diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000000..f40e0f70b4 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +open_collective: gephi diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000000..99593f4c77 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,37 @@ +--- +name: Bug report +about: Create a report to help us improve Gephi +title: '' +labels: To review +assignees: '' + +--- + + + +## Expected Behavior + +## Current Behavior + +## Possible Solution + + + +## Steps to Reproduce + +1. +2. +3. +4. + +## Context + + + +## Your Environment + +* Version used: Gephi 0.11.2 +* Operating System: + + + diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000000..b7e015a5ab --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: Ask a question (discussions) + url: https://github.com/gephi/gephi/discussions + about: Please ask and answer questions here. \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000000..133725a872 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,19 @@ +--- +name: Feature request +about: Suggest an idea for Gephi +title: '' +labels: Wishlist, To review +assignees: '' + +--- + + + +### Proposed solution + + +### Alternatives considered + + +### Additional context + \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000000..addc803f5b --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,11 @@ +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + + - package-ecosystem: "maven" + directory: "/" + schedule: + interval: "weekly" diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000000..bbd090faa9 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,38 @@ + + +## Description + + + +## Checklist + +- [ ] Merged with master beforehand + +## Added tests? + +- [ ] πŸ‘ yes +- [ ] πŸ™… no, because they aren't needed + + +## Added to documentation? +- [ ] πŸ‘ README.md +- [ ] πŸ‘ [API Changes](https://github.com/gephi/gephi/blob/master/src/main/javadoc/overview.html) +- [ ] πŸ‘ Additional documentation in [docs](https://github.com/gephi/gephi-documentation) +- [ ] πŸ‘ Relevant code documentation +- [ ] πŸ™… no, because they aren’t needed diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 0000000000..a263f8b388 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,21 @@ +name: build + +on: + push: + branches-ignore: + - 0.11.3 + - weblate** + +jobs: + build_and_test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - name: Set up JDK 17 + uses: actions/setup-java@v5.7.0 + with: + java-version: '17' + distribution: 'temurin' + cache: 'maven' + - name: Build project with Maven + run: mvn -T 4 --batch-mode -Djava.awt.headless=true verify -P enableCheckStyle diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000000..7085201ab7 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,412 @@ +name: release + +on: + push: + branches: [ 0.11.3 ] + +jobs: + build-base: + runs-on: ubuntu-latest + outputs: + is_release: ${{ steps.detect.outputs.is_release }} + version: ${{ steps.detect.outputs.version }} + steps: + - uses: actions/checkout@v7 + + # Detect whether this build is a release (no -SNAPSHOT) or a snapshot. + # - SNAPSHOT: existing flow, each job deploys directly to Central. + # - RELEASE: every job stages locally (-DskipPublishing=true) and the + # publish-central job merges and uploads a single bundle. + - name: Detect version + id: detect + shell: bash + run: | + VERSION=$(grep -A1 'gephi-parent' pom.xml | grep '' | head -1 | sed -E 's|.*([^<]+).*|\1|') + if [[ -z "$VERSION" ]]; then + echo "Could not detect project version from pom.xml" >&2 + exit 1 + fi + if [[ "$VERSION" == *SNAPSHOT* ]]; then + IS_RELEASE=false + else + IS_RELEASE=true + fi + echo "version=$VERSION" >> "$GITHUB_OUTPUT" + echo "is_release=$IS_RELEASE" >> "$GITHUB_OUTPUT" + echo "Detected version: $VERSION (is_release=$IS_RELEASE)" + + - name: Set up Maven Central Repository + uses: actions/setup-java@v5.7.0 + with: + java-version: '17' + distribution: 'temurin' + cache: 'maven' + server-id: central + server-username: OSSRH_USER + server-password: OSSRH_PASS + gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} + gpg-passphrase: GPG_PASSPHRASE + + - name: Setup Maven + uses: stCarolas/setup-maven@v5 + with: + maven-version: 3.9.14 + + - name: Get NBM Keystore + run: | + echo "${{ secrets.NBM_KEYSTORE }}" > keystore.ks.asc + gpg -d --passphrase "${{ secrets.NBM_KEYSTORE_ENC_PASSPHRASE }}" --batch keystore.ks.asc > keystore.ks + + - name: Build and publish modules + shell: bash + run: | + SKIP_PUBLISHING="" + if [[ "${{ steps.detect.outputs.is_release }}" == "true" ]]; then + SKIP_PUBLISHING="-DskipPublishing=true" + echo "Release mode: staging artifacts locally; upload happens in publish-central." + else + echo "Snapshot mode: deploying directly to Central." + fi + mvn --batch-mode -Djava.awt.headless=true \ + -Dkeystore.password=${{ secrets.KEYSTORE_PASSWD }} \ + $SKIP_PUBLISHING \ + site deploy \ + -P deployment,sign-artifacts,create-modules,create-sources,create-javadoc,create-autoupdate + env: + OSSRH_USER: ${{ secrets.OSSRH_TOKEN_USER }} + OSSRH_PASS: ${{ secrets.OSSRH_TOKEN_PASSWD }} + GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} + + - name: Upload central staging (base) + if: steps.detect.outputs.is_release == 'true' + uses: actions/upload-artifact@v7 + with: + name: central-staging-base + path: target/central-staging + if-no-files-found: error + retention-days: 1 + + - name: Upload autoupdate output + uses: actions/upload-artifact@v7 + with: + name: autoupdate-output + path: modules/application/target/autoupdate_site + if-no-files-found: error + retention-days: 1 + + - name: Prepare modules output + run: tar -I 'zstd -9 -T0' -cf /tmp/modules.tar.zst -C ~/.m2/repository/org/gephi . + + - name: Upload modules output + uses: actions/upload-artifact@v7 + with: + name: modules-output + path: /tmp/modules.tar.zst + if-no-files-found: error + retention-days: 1 + + bundle: + needs: build-base + strategy: + fail-fast: false + max-parallel: 1 + matrix: + os: [ ubuntu-latest, windows-latest, macos-latest ] + arch: [ x64 ] + include: + - task: create-targz + os: ubuntu-latest + arch: x64 + - task: create-targz + os: ubuntu-latest + arch: aarch64 + - task: create-exe + os: windows-latest + arch: x64 + - task: create-dmg,notarize-dmg + os: macos-latest + arch: x64 + - task: create-dmg,notarize-dmg + os: macos-latest + arch: aarch64 + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v7 + - name: Set up Maven Central Repository + uses: actions/setup-java@v5.7.0 + with: + java-version: '17' + distribution: 'temurin' + server-id: central + server-username: OSSRH_USER + server-password: OSSRH_PASS + gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }} + gpg-passphrase: GPG_PASSPHRASE + + - name: Install MacOS requirements + run: brew install gnupg@1.4 create-dmg + if: runner.os == 'macOS' + + - name: Apple Developer Certificates + run: | + gpg1 --output .github/workflows/release/certs/dev_id.cer --passphrase "$ENCRYPTION_SECRET" --decrypt .github/workflows/release/certs/dev_id.cer.enc + gpg1 --output .github/workflows/release/certs/dev_id.p12 --passphrase "$ENCRYPTION_SECRET" --decrypt .github/workflows/release/certs/dev_id.p12.enc + ./.github/workflows/release/add-key.sh + if: runner.os == 'macOS' + env: + ENCRYPTION_SECRET: ${{ secrets.ENCRYPTION_SECRET }} + KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }} + + # Workaround for "hdiutil: create failed - Resource busy" error + # https://github.com/actions/runner-images/issues/7522 + - name: MacOS hdiutil workaround + run: | + echo killing...; sudo pkill -9 XProtect >/dev/null || true; + echo waiting...; while pgrep XProtect; do sleep 3; done; + if: runner.os == 'macOS' + + - name: Retrieve modules output + uses: actions/download-artifact@v8 + with: + name: modules-output + + - name: Extract artifacts Linux + run: | + mkdir -p ~/.m2/repository/org/gephi/ + tar --zstd -xf modules.tar.zst -C ~/.m2/repository/org/gephi + if: runner.os == 'Linux' + + - name: Extract artifacts Mac OS + run: | + mkdir -p ~/.m2/repository/org/gephi/ + unzstd -c modules.tar.zst | tar -x -C ~/.m2/repository/org/gephi + if: runner.os == 'macOS' + + - name: Extract artifacts Windows + shell: bash + run: | + mkdir -p ~/.m2/repository/org/gephi/ + tar --zstd -xf modules.tar.zst -C ~/.m2/repository/org/gephi + if: runner.os == 'Windows' + + - name: Build and publish bundle + shell: bash + run: | + SKIP_PUBLISHING="" + if [[ "${{ needs.build-base.outputs.is_release }}" == "true" ]]; then + SKIP_PUBLISHING="-DskipPublishing=true" + echo "Release mode: staging artifacts locally; upload happens in publish-central." + else + echo "Snapshot mode: deploying directly to Central." + fi + mvn --batch-mode -Djava.awt.headless=true \ + -DautoPublish=true -DwaitUntil=published \ + $SKIP_PUBLISHING \ + -Dgephi.apple.notarization.username=$APPLE_USERNAME \ + -Dgephi.apple.notarization.password=$APPLE_PASSWORD \ + -Dgephi.apple.notarization.teamId=$APPLE_TEAM_ID \ + -Dgephi.windows.codesign.username=$CODESIGN_USERNAME \ + -Dgephi.windows.codesign.password=$CODESIGN_PASSWORD \ + -Dgephi.windows.codesign.totp=$CODESIGN_TOTP \ + -Dgephi.bundle.arch=${{ matrix.arch }} \ + deploy -P deployment,sign-artifacts,${{ matrix.task }} + working-directory: modules/application + env: + OSSRH_USER: ${{ secrets.OSSRH_TOKEN_USER }} + OSSRH_PASS: ${{ secrets.OSSRH_TOKEN_PASSWD }} + GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} + APPLE_USERNAME: ${{ secrets.APPLE_USERNAME }} + APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }} + APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} + CODESIGN_USERNAME: ${{ secrets.CODESIGN_USERNAME }} + CODESIGN_PASSWORD: ${{ secrets.CODESIGN_PASSWORD }} + CODESIGN_TOTP: ${{ secrets.CODESIGN_TOTP }} + + - name: CleanUp MacOS keychain + run: ./.github/workflows/release/remove-key.sh + if: runner.os == 'macOS' + + - name: Upload central staging + if: needs.build-base.outputs.is_release == 'true' + uses: actions/upload-artifact@v7 + with: + name: central-staging-${{ matrix.os }}-${{ matrix.arch }} + path: modules/application/target/central-staging + if-no-files-found: error + retention-days: 1 + + - name: Output download link + shell: bash + run: | + VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout) + [[ "$VERSION" != *SNAPSHOT* ]] && exit 0 + BASE="https://central.sonatype.com/repository/maven-snapshots/org/gephi/gephi/$VERSION" + METADATA=$(curl -sf "$BASE/maven-metadata.xml") + SNAPSHOT_TS=$(echo "$METADATA" | sed -n 's/.*\([^<]*\)<\/timestamp>.*/\1/p') + SNAPSHOT_BN=$(echo "$METADATA" | sed -n 's/.*\([^<]*\)<\/buildNumber>.*/\1/p') + SNAP_SUFFIX="${SNAPSHOT_TS}-${SNAPSHOT_BN}" + FILE=$(find ~/.m2/repository/org/gephi/gephi/$VERSION/ \ + -name "gephi-*-${{ matrix.arch }}.*" \ + ! -name "*.asc" ! -name "*.md5" ! -name "*.sha*" ! -name "*.pom" \ + | sort | tail -1) + FILENAME=$(basename "$FILE") + REMOTE_FILENAME="${FILENAME/SNAPSHOT/$SNAP_SUFFIX}" + echo "- [$REMOTE_FILENAME]($BASE/$REMOTE_FILENAME)" >> $GITHUB_STEP_SUMMARY + + # Releases only: download every job's central-staging tree, merge them into a + # single Maven Repository Layout directory, zip it, and upload it as a single + # deployment to the Sonatype Central Publisher Portal as USER_MANAGED. The + # deployment then needs to be validated and published manually via the UI at + # https://central.sonatype.com/publishing/deployments. + publish-central: + needs: [ build-base, bundle ] + if: needs.build-base.outputs.is_release == 'true' + runs-on: ubuntu-latest + steps: + - name: Download all central staging artifacts + uses: actions/download-artifact@v8 + with: + pattern: 'central-staging-*' + path: staging-parts + + - name: Merge staging trees into a single bundle + shell: bash + run: | + set -euo pipefail + mkdir -p bundle + # Merge base first so its application POM and signatures win for files + # produced by multiple jobs (every job stages a gephi-.pom + .asc; + # the per-classifier .tar.gz / .exe / .dmg files are unique). + if [[ -d "staging-parts/central-staging-base" ]]; then + echo "Merging central-staging-base" + rsync -a staging-parts/central-staging-base/ bundle/ + else + echo "central-staging-base artifact missing" >&2 + exit 1 + fi + for d in staging-parts/*/; do + name=$(basename "$d") + if [[ "$name" == "central-staging-base" ]]; then + continue + fi + echo "Merging $name" + rsync -a --ignore-existing "$d" bundle/ + done + # Drop the plugin's intermediate metadata files; they must not be in + # the Portal bundle. + find bundle -name 'maven-metadata*' -delete + echo "Bundle contents:" + find bundle -type f | sort + + - name: Create bundle zip + shell: bash + run: | + set -euo pipefail + (cd bundle && zip -qr ../central-bundle.zip .) + ls -la central-bundle.zip + + - name: Upload bundle to Sonatype Central Portal + id: upload + shell: bash + env: + OSSRH_USER: ${{ secrets.OSSRH_TOKEN_USER }} + OSSRH_PASS: ${{ secrets.OSSRH_TOKEN_PASSWD }} + VERSION: ${{ needs.build-base.outputs.version }} + run: | + set -euo pipefail + TOKEN=$(printf '%s:%s' "$OSSRH_USER" "$OSSRH_PASS" | base64 -w0) + DEPLOYMENT_NAME="org.gephi:gephi:${VERSION}" + echo "Uploading bundle as $DEPLOYMENT_NAME" + ID=$(curl -fsS -X POST \ + -H "Authorization: Bearer $TOKEN" \ + -F "bundle=@central-bundle.zip" \ + "https://central.sonatype.com/api/v1/publisher/upload?publishingType=USER_MANAGED&name=${DEPLOYMENT_NAME}") + if [[ -z "$ID" ]]; then + echo "Upload returned an empty deployment ID" >&2 + exit 1 + fi + echo "Deployment ID: $ID" + echo "deployment_id=$ID" >> "$GITHUB_OUTPUT" + + - name: Wait for Central validation + shell: bash + env: + OSSRH_USER: ${{ secrets.OSSRH_TOKEN_USER }} + OSSRH_PASS: ${{ secrets.OSSRH_TOKEN_PASSWD }} + DEPLOYMENT_ID: ${{ steps.upload.outputs.deployment_id }} + run: | + set -euo pipefail + TOKEN=$(printf '%s:%s' "$OSSRH_USER" "$OSSRH_PASS" | base64 -w0) + while true; do + RESPONSE=$(curl -fsS -X POST \ + -H "Authorization: Bearer $TOKEN" \ + "https://central.sonatype.com/api/v1/publisher/status?id=${DEPLOYMENT_ID}") + STATE=$(echo "$RESPONSE" | jq -r '.deploymentState') + echo "Current state: $STATE" + case "$STATE" in + VALIDATED|PUBLISHING|PUBLISHED) + echo "Deployment is in $STATE state." + break + ;; + FAILED) + echo "Deployment failed:" + echo "$RESPONSE" | jq . + exit 1 + ;; + esac + sleep 15 + done + + - name: Write summary + shell: bash + env: + DEPLOYMENT_ID: ${{ steps.upload.outputs.deployment_id }} + VERSION: ${{ needs.build-base.outputs.version }} + run: | + { + echo "## Maven Central deployment ready for publishing" + echo + echo "- Component: \`org.gephi:gephi:${VERSION}\`" + echo "- Deployment ID: \`${DEPLOYMENT_ID}\`" + echo + echo "Validate it and click **Publish** at ." + } >> "$GITHUB_STEP_SUMMARY" + + update-site: + # In snapshot mode bundle directly publishes binaries, so update-site can + # run right after. In release mode wait for publish-central to succeed so + # we don't push the autoupdate XML before the bundle is at least validated + # by Central. The bundle still needs to be manually published in the UI to + # actually become live, so the autoupdate site may briefly point to + # not-yet-published files until that step is completed. + needs: [ build-base, bundle, publish-central ] + if: | + always() && + needs.build-base.result == 'success' && + needs.bundle.result == 'success' && + (needs.publish-central.result == 'success' || needs.publish-central.result == 'skipped') + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + - name: Set up JDK 17 + uses: actions/setup-java@v5.7.0 + with: + java-version: '17' + distribution: 'temurin' + + - name: Retrieve autoupdate output + uses: actions/download-artifact@v8 + with: + name: autoupdate-output + path: modules/application/target/autoupdate_site + + - name: Configure Git user + run: | + git config --global user.email "github-action@users.noreply.github.com" + git config --global user.name "GitHub Actions" + + - name: Update autoupdate content on gh-pages + run: mvn validate scm-publish:publish-scm -P push-site + working-directory: modules/application + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/release/add-key.sh b/.github/workflows/release/add-key.sh new file mode 100755 index 0000000000..35fe2cd137 --- /dev/null +++ b/.github/workflows/release/add-key.sh @@ -0,0 +1,20 @@ +#!/bin/sh + +# Create a custom keychain +security create-keychain -p travis gephi-build.keychain + +# Make the custom keychain default, so xcodebuild will use it for signing +security default-keychain -s gephi-build.keychain + +# Unlock the keychain +security unlock-keychain -p travis gephi-build.keychain + +# Set keychain timeout to 1 hour for long builds +security set-keychain-settings -t 3600 -l ~/Library/Keychains/gephi-build.keychain + +# Add certificates to keychain and allow codesign to access them +security import ./.github/workflows/release/certs/apple.cer -k ~/Library/Keychains/gephi-build.keychain -T /usr/bin/codesign +security import ./.github/workflows/release/certs/dev_id.cer -k ~/Library/Keychains/gephi-build.keychain -T /usr/bin/codesign +security import ./.github/workflows/release/certs/dev_id.p12 -k ~/Library/Keychains/gephi-build.keychain -P $KEY_PASSWORD -T /usr/bin/codesign + +security set-key-partition-list -S apple-tool:,apple: -s -k travis gephi-build.keychain \ No newline at end of file diff --git a/.github/workflows/release/certs/apple.cer b/.github/workflows/release/certs/apple.cer new file mode 100644 index 0000000000..0de099b869 Binary files /dev/null and b/.github/workflows/release/certs/apple.cer differ diff --git a/.github/workflows/release/certs/dev_id.cer.enc b/.github/workflows/release/certs/dev_id.cer.enc new file mode 100644 index 0000000000..f472cf74f5 Binary files /dev/null and b/.github/workflows/release/certs/dev_id.cer.enc differ diff --git a/.github/workflows/release/certs/dev_id.p12.enc b/.github/workflows/release/certs/dev_id.p12.enc new file mode 100644 index 0000000000..8628c3cd1d Binary files /dev/null and b/.github/workflows/release/certs/dev_id.p12.enc differ diff --git a/.github/workflows/release/remove-key.sh b/.github/workflows/release/remove-key.sh new file mode 100755 index 0000000000..497a8a779f --- /dev/null +++ b/.github/workflows/release/remove-key.sh @@ -0,0 +1,3 @@ +#!/bin/sh +security delete-keychain gephi-build.keychain +rm -rf .github/workflows/build/certs diff --git a/.gitignore b/.gitignore index f289760cc1..fccc17c9f6 100644 --- a/.gitignore +++ b/.gitignore @@ -32,8 +32,6 @@ keystore.ks /modules/DesktopSpigot/target/ /modules/DesktopStatistics/target/ /modules/DesktopTimeline/target/ -/modules/DesktopTools/target/ -/modules/DHNSGraph/target/ /modules/DirectoryChooser/target/ /modules/DynamicAPI/target/ /modules/DynamicImpl/target/ @@ -99,3 +97,33 @@ keystore.ks /modules/AppearancePlugin/target/ /modules/AppearancePluginUI/target/ /modules/DesktopAppearance/target/ +/modules/DesktopAttributes/target/ +/modules/branding/src/main/nbm-branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/view/ui/Bundle.properties +/modules/branding/src/main/nbm-branding/core/core.jar/org/netbeans/core/startup/Bundle.properties +/modules/TestUtils/target +.java-version +nb-configuration.xml +*.args +*.gpg +dev_id.cer +*.p12 + +*.iml +.idea/ +*.project +.settings/** +**/.settings/** +**/.classpath +**/.factorypath +modules/DesktopBranding/src/main/nbm-branding/core/core.jar/org/netbeans/core/startup/Bundle.properties +modules/DesktopBranding/src/main/nbm-branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/view/ +build.sh +*.asc +**/keystore/** +src/macosx-launcher/.build +src/macosx-launcher/.swiftpm +src/macosx-launcher/Packages +src/macosx-launcher/*.xcodeproj +xcuserdata/ +projects.xml +modules/application/.flattened-pom.xml \ No newline at end of file diff --git a/.tx/config b/.tx/config deleted file mode 100644 index aa180fc062..0000000000 --- a/.tx/config +++ /dev/null @@ -1,951 +0,0 @@ -[main] -host = gephi - -[gephi.org-gephi-ui-workspace] -file_filter = modules\WorkspaceUI\src\main\resources\org\gephi\ui\workspace\.po -source_file = modules\WorkspaceUI\src\main\resources\org\gephi\ui\workspace\org-gephi-ui-workspace.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-welcome] -file_filter = modules\WelcomeScreen\src\main\resources\org\gephi\desktop\welcome\.po -source_file = modules\WelcomeScreen\src\main\resources\org\gephi\desktop\welcome\org-gephi-desktop-welcome.pot -source_lang = en -type = PO - -[gephi.org-gephi-visualization] -file_filter = modules\VisualizationImpl\src\main\resources\org\gephi\visualization\.po -source_file = modules\VisualizationImpl\src\main\resources\org\gephi\visualization\org-gephi-visualization.pot -source_lang = en -type = PO - -[gephi.org-gephi-visualization-screenshot] -file_filter = modules\VisualizationImpl\src\main\resources\org\gephi\visualization\screenshot\.po -source_file = modules\VisualizationImpl\src\main\resources\org\gephi\visualization\screenshot\org-gephi-visualization-screenshot.pot -source_lang = en -type = PO - -[gephi.org-gephi-visualization-options] -file_filter = modules\VisualizationImpl\src\main\resources\org\gephi\visualization\options\.po -source_file = modules\VisualizationImpl\src\main\resources\org\gephi\visualization\options\org-gephi-visualization-options.pot -source_lang = en -type = PO - -[gephi.org-gephi-visualization-config] -file_filter = modules\VisualizationImpl\src\main\resources\org\gephi\visualization\config\.po -source_file = modules\VisualizationImpl\src\main\resources\org\gephi\visualization\config\org-gephi-visualization-config.pot -source_lang = en -type = PO - -[gephi.org-gephi-visualization-component] -file_filter = modules\VisualizationImpl\src\main\resources\org\gephi\visualization\component\.po -source_file = modules\VisualizationImpl\src\main\resources\org\gephi\visualization\component\org-gephi-visualization-component.pot -source_lang = en -type = PO - -[gephi.org-gephi-visualization-apiimpl-contextmenuitems] -file_filter = modules\VisualizationImpl\src\main\resources\org\gephi\visualization\apiimpl\contextmenuitems\.po -source_file = modules\VisualizationImpl\src\main\resources\org\gephi\visualization\apiimpl\contextmenuitems\org-gephi-visualization-apiimpl-contextmenuitems.pot -source_lang = en -type = PO - -[gephi.org-gephi-visualization-opengl] -file_filter = modules\VisualizationImpl\src\main\resources\org\gephi\visualization\opengl\.po -source_file = modules\VisualizationImpl\src\main\resources\org\gephi\visualization\opengl\org-gephi-visualization-opengl.pot -source_lang = en -type = PO - -[gephi.org-gephi-visualization-api] -file_filter = modules\VisualizationAPI\src\main\resources\org\gephi\visualization\api\.po -source_file = modules\VisualizationAPI\src\main\resources\org\gephi\visualization\api\org-gephi-visualization-api.pot -source_lang = en -type = PO - -[gephi.org-gephi-lib-validation] -file_filter = modules\ValidationAPI\src\main\resources\org\gephi\lib\validation\.po -source_file = modules\ValidationAPI\src\main\resources\org\gephi\lib\validation\org-gephi-lib-validation.pot -source_lang = en -type = PO - -[gephi.org-gephi-utils] -file_filter = modules\Utils\src\main\resources\org\gephi\utils\.po -source_file = modules\Utils\src\main\resources\org\gephi\utils\org-gephi-utils.pot -source_lang = en -type = PO - -[gephi.org-gephi-ui-utils] -file_filter = modules\UIUtils\src\main\resources\org\gephi\ui\utils\.po -source_file = modules\UIUtils\src\main\resources\org\gephi\ui\utils\org-gephi-ui-utils.pot -source_lang = en -type = PO - -[gephi.org-gephi-ui-components] -file_filter = modules\UIComponents\src\main\resources\org\gephi\ui\components\.po -source_file = modules\UIComponents\src\main\resources\org\gephi\ui\components\org-gephi-ui-components.pot -source_lang = en -type = PO - -[gephi.org-gephi-ui-tools-plugin] -file_filter = modules\ToolsPlugin\src\main\resources\org\gephi\ui\tools\plugin\.po -source_file = modules\ToolsPlugin\src\main\resources\org\gephi\ui\tools\plugin\org-gephi-ui-tools-plugin.pot -source_lang = en -type = PO - -[gephi.org-gephi-ui-tools-plugin-edit] -file_filter = modules\ToolsPlugin\src\main\resources\org\gephi\ui\tools\plugin\edit\.po -source_file = modules\ToolsPlugin\src\main\resources\org\gephi\ui\tools\plugin\edit\org-gephi-ui-tools-plugin-edit.pot -source_lang = en -type = PO - -[gephi.org-gephi-tools-plugin] -file_filter = modules\ToolsPlugin\src\main\resources\org\gephi\tools\plugin\.po -source_file = modules\ToolsPlugin\src\main\resources\org\gephi\tools\plugin\org-gephi-tools-plugin.pot -source_lang = en -type = PO - -[gephi.org-gephi-tools-api] -file_filter = modules\ToolsAPI\src\main\resources\org\gephi\tools\api\.po -source_file = modules\ToolsAPI\src\main\resources\org\gephi\tools\api\org-gephi-tools-api.pot -source_lang = en -type = PO - -[gephi.org-gephi-timeline] -file_filter = modules\TimelineAPI\src\main\resources\org\gephi\timeline\.po -source_file = modules\TimelineAPI\src\main\resources\org\gephi\timeline\org-gephi-timeline.pot -source_lang = en -type = PO - -[gephi.org-gephi-ui-statistics-plugin] -file_filter = modules\StatisticsPluginUI\src\main\resources\org\gephi\ui\statistics\plugin\.po -source_file = modules\StatisticsPluginUI\src\main\resources\org\gephi\ui\statistics\plugin\org-gephi-ui-statistics-plugin.pot -source_lang = en -type = PO - -[gephi.org-gephi-ui-statistics-plugin-dynamic] -file_filter = modules\StatisticsPluginUI\src\main\resources\org\gephi\ui\statistics\plugin\dynamic\.po -source_file = modules\StatisticsPluginUI\src\main\resources\org\gephi\ui\statistics\plugin\dynamic\org-gephi-ui-statistics-plugin-dynamic.pot -source_lang = en -type = PO - -[gephi.org-gephi-statistics-plugin] -file_filter = modules\StatisticsPlugin\src\main\resources\org\gephi\statistics\plugin\.po -source_file = modules\StatisticsPlugin\src\main\resources\org\gephi\statistics\plugin\org-gephi-statistics-plugin.pot -source_lang = en -type = PO - -[gephi.org-gephi-statistics-plugin-dynamic] -file_filter = modules\StatisticsPlugin\src\main\resources\org\gephi\statistics\plugin\dynamic\.po -source_file = modules\StatisticsPlugin\src\main\resources\org\gephi\statistics\plugin\dynamic\org-gephi-statistics-plugin-dynamic.pot -source_lang = en -type = PO - -[gephi.org-gephi-statistics-plugin-dynamic-builder] -file_filter = modules\StatisticsPlugin\src\main\resources\org\gephi\statistics\plugin\dynamic\builder\.po -source_file = modules\StatisticsPlugin\src\main\resources\org\gephi\statistics\plugin\dynamic\builder\org-gephi-statistics-plugin-dynamic-builder.pot -source_lang = en -type = PO - -[gephi.org-gephi-statistics-plugin-builder] -file_filter = modules\StatisticsPlugin\src\main\resources\org\gephi\statistics\plugin\builder\.po -source_file = modules\StatisticsPlugin\src\main\resources\org\gephi\statistics\plugin\builder\org-gephi-statistics-plugin-builder.pot -source_lang = en -type = PO - -[gephi.org-gephi-statistics-spi] -file_filter = modules\StatisticsAPI\src\main\resources\org\gephi\statistics\spi\.po -source_file = modules\StatisticsAPI\src\main\resources\org\gephi\statistics\spi\org-gephi-statistics-spi.pot -source_lang = en -type = PO - -[gephi.org-gephi-statistics-api] -file_filter = modules\StatisticsAPI\src\main\resources\org\gephi\statistics\api\.po -source_file = modules\StatisticsAPI\src\main\resources\org\gephi\statistics\api\org-gephi-statistics-api.pot -source_lang = en -type = PO - -[gephi.org-gephi-ui-components-SplineEditor] -file_filter = modules\SplineEditor\src\main\resources\org\gephi\ui\components\SplineEditor\.po -source_file = modules\SplineEditor\src\main\resources\org\gephi\ui\components\SplineEditor\org-gephi-ui-components-SplineEditor.pot -source_lang = en -type = PO - -[gephi.org-gephi-ui-spigot-plugin] -file_filter = modules\SpigotPluginUI\src\main\resources\org\gephi\ui\spigot\plugin\.po -source_file = modules\SpigotPluginUI\src\main\resources\org\gephi\ui\spigot\plugin\org-gephi-ui-spigot-plugin.pot -source_lang = en -type = PO - -[gephi.org-gephi-ui-spigot-plugin-email] -file_filter = modules\SpigotPluginUI\src\main\resources\org\gephi\ui\spigot\plugin\email\.po -source_file = modules\SpigotPluginUI\src\main\resources\org\gephi\ui\spigot\plugin\email\org-gephi-ui-spigot-plugin-email.pot -source_lang = en -type = PO - -[gephi.org-gephi-io-spigot-plugin] -file_filter = modules\SpigotPlugin\src\main\resources\org\gephi\io\spigot\plugin\.po -source_file = modules\SpigotPlugin\src\main\resources\org\gephi\io\spigot\plugin\org-gephi-io-spigot-plugin.pot -source_lang = en -type = PO - -[gephi.org-gephi-io-spigot-plugin-email] -file_filter = modules\SpigotPlugin\src\main\resources\org\gephi\io\spigot\plugin\email\.po -source_file = modules\SpigotPlugin\src\main\resources\org\gephi\io\spigot\plugin\email\org-gephi-io-spigot-plugin-email.pot -source_lang = en -type = PO - -[gephi.org-gephi-ui-upgrader] -file_filter = modules\SettingsUpgrader\src\main\resources\org\gephi\ui\upgrader\.po -source_file = modules\SettingsUpgrader\src\main\resources\org\gephi\ui\upgrader\org-gephi-ui-upgrader.pot -source_lang = en -type = PO - -[gephi.org-gephi-ui-ranking-plugin] -file_filter = modules\RankingPluginUI\src\main\resources\org\gephi\ui\ranking\plugin\.po -source_file = modules\RankingPluginUI\src\main\resources\org\gephi\ui\ranking\plugin\org-gephi-ui-ranking-plugin.pot -source_lang = en -type = PO - -[gephi.org-gephi-ranking-plugin] -file_filter = modules\RankingPlugin\src\main\resources\org\gephi\ranking\plugin\.po -source_file = modules\RankingPlugin\src\main\resources\org\gephi\ranking\plugin\org-gephi-ranking-plugin.pot -source_lang = en -type = PO - -[gephi.org-gephi-ranking-api] -file_filter = modules\RankingAPI\src\main\resources\org\gephi\ranking\api\.po -source_file = modules\RankingAPI\src\main\resources\org\gephi\ranking\api\org-gephi-ranking-api.pot -source_lang = en -type = PO - -[gephi.org-gephi-ui-project] -file_filter = modules\ProjectUI\src\main\resources\org\gephi\ui\project\.po -source_file = modules\ProjectUI\src\main\resources\org\gephi\ui\project\org-gephi-ui-project.pot -source_lang = en -type = PO - -[gephi.org-gephi-project-io] -file_filter = modules\ProjectAPI\src\main\resources\org\gephi\project\io\.po -source_file = modules\ProjectAPI\src\main\resources\org\gephi\project\io\org-gephi-project-io.pot -source_lang = en -type = PO - -[gephi.org-gephi-project-impl] -file_filter = modules\ProjectAPI\src\main\resources\org\gephi\project\impl\.po -source_file = modules\ProjectAPI\src\main\resources\org\gephi\project\impl\org-gephi-project-impl.pot -source_lang = en -type = PO - -[gephi.org-gephi-project-api] -file_filter = modules\ProjectAPI\src\main\resources\org\gephi\project\api\.po -source_file = modules\ProjectAPI\src\main\resources\org\gephi\project\api\org-gephi-project-api.pot -source_lang = en -type = PO - -[gephi.org-gephi-ui-processor-plugin] -file_filter = modules\ProcessorPluginUI\src\main\resources\org\gephi\ui\processor\plugin\.po -source_file = modules\ProcessorPluginUI\src\main\resources\org\gephi\ui\processor\plugin\org-gephi-ui-processor-plugin.pot -source_lang = en -type = PO - -[gephi.org-gephi-io-processor-plugin] -file_filter = modules\ProcessorPlugin\src\main\resources\org\gephi\io\processor\plugin\.po -source_file = modules\ProcessorPlugin\src\main\resources\org\gephi\io\processor\plugin\org-gephi-io-processor-plugin.pot -source_lang = en -type = PO - -[gephi.org-gephi-preview-plugin] -file_filter = modules\PreviewPlugin\src\main\resources\org\gephi\preview\plugin\.po -source_file = modules\PreviewPlugin\src\main\resources\org\gephi\preview\plugin\org-gephi-preview-plugin.pot -source_lang = en -type = PO - -[gephi.org-gephi-preview-plugin-renderers] -file_filter = modules\PreviewPlugin\src\main\resources\org\gephi\preview\plugin\renderers\.po -source_file = modules\PreviewPlugin\src\main\resources\org\gephi\preview\plugin\renderers\org-gephi-preview-plugin-renderers.pot -source_lang = en -type = PO - -[gephi.org-gephi-ui-exporter-preview] -file_filter = modules\PreviewExportUI\src\main\resources\org\gephi\ui\exporter\preview\.po -source_file = modules\PreviewExportUI\src\main\resources\org\gephi\ui\exporter\preview\org-gephi-ui-exporter-preview.pot -source_lang = en -type = PO - -[gephi.org-gephi-io-exporter-preview] -file_filter = modules\PreviewExport\src\main\resources\org\gephi\io\exporter\preview\.po -source_file = modules\PreviewExport\src\main\resources\org\gephi\io\exporter\preview\org-gephi-io-exporter-preview.pot -source_lang = en -type = PO - -[gephi.org-gephi-preview] -file_filter = modules\PreviewAPI\src\main\resources\org\gephi\preview\.po -source_file = modules\PreviewAPI\src\main\resources\org\gephi\preview\org-gephi-preview.pot -source_lang = en -type = PO - -[gephi.org-gephi-preview-presets] -file_filter = modules\PreviewAPI\src\main\resources\org\gephi\preview\presets\.po -source_file = modules\PreviewAPI\src\main\resources\org\gephi\preview\presets\org-gephi-preview-presets.pot -source_lang = en -type = PO - -[gephi.org-gephi-preview-api] -file_filter = modules\PreviewAPI\src\main\resources\org\gephi\preview\api\.po -source_file = modules\PreviewAPI\src\main\resources\org\gephi\preview\api\org-gephi-preview-api.pot -source_lang = en -type = PO - -[gephi.org-gephi-perspective-api] -file_filter = modules\PerspectiveAPI\src\main\resources\org\gephi\perspective\api\.po -source_file = modules\PerspectiveAPI\src\main\resources\org\gephi\perspective\api\org-gephi-perspective-api.pot -source_lang = en -type = PO - -[gephi.org-gephi-ui-partition-plugin] -file_filter = modules\PartitionPluginUI\src\main\resources\org\gephi\ui\partition\plugin\.po -source_file = modules\PartitionPluginUI\src\main\resources\org\gephi\ui\partition\plugin\org-gephi-ui-partition-plugin.pot -source_lang = en -type = PO - -[gephi.org-gephi-partition-plugin] -file_filter = modules\PartitionPlugin\src\main\resources\org\gephi\partition\plugin\.po -source_file = modules\PartitionPlugin\src\main\resources\org\gephi\partition\plugin\org-gephi-partition-plugin.pot -source_lang = en -type = PO - -[gephi.org-gephi-partition-api] -file_filter = modules\PartitionAPI\src\main\resources\org\gephi\partition\api\.po -source_file = modules\PartitionAPI\src\main\resources\org\gephi\partition\api\org-gephi-partition-api.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-mrufiles-api] -file_filter = modules\MostRecentFilesAPI\src\main\resources\org\gephi\desktop\mrufiles\api\.po -source_file = modules\MostRecentFilesAPI\src\main\resources\org\gephi\desktop\mrufiles\api\org-gephi-desktop-mrufiles-api.pot -source_lang = en -type = PO - -[gephi.org-gephi-utils-longtask] -file_filter = modules\LongTaskAPI\src\main\resources\org\gephi\utils\longtask\.po -source_file = modules\LongTaskAPI\src\main\resources\org\gephi\utils\longtask\org-gephi-utils-longtask.pot -source_lang = en -type = PO - -[gephi.org-gephi-layout-plugin] -file_filter = modules\LayoutPlugin\src\main\resources\org\gephi\layout\plugin\.po -source_file = modules\LayoutPlugin\src\main\resources\org\gephi\layout\plugin\org-gephi-layout-plugin.pot -source_lang = en -type = PO - -[gephi.org-gephi-layout-plugin-scale] -file_filter = modules\LayoutPlugin\src\main\resources\org\gephi\layout\plugin\scale\.po -source_file = modules\LayoutPlugin\src\main\resources\org\gephi\layout\plugin\scale\org-gephi-layout-plugin-scale.pot -source_lang = en -type = PO - -[gephi.org-gephi-layout-plugin-rotate] -file_filter = modules\LayoutPlugin\src\main\resources\org\gephi\layout\plugin\rotate\.po -source_file = modules\LayoutPlugin\src\main\resources\org\gephi\layout\plugin\rotate\org-gephi-layout-plugin-rotate.pot -source_lang = en -type = PO - -[gephi.org-gephi-layout-plugin-random] -file_filter = modules\LayoutPlugin\src\main\resources\org\gephi\layout\plugin\random\.po -source_file = modules\LayoutPlugin\src\main\resources\org\gephi\layout\plugin\random\org-gephi-layout-plugin-random.pot -source_lang = en -type = PO - -[gephi.org-gephi-layout-plugin-multilevel] -file_filter = modules\LayoutPlugin\src\main\resources\org\gephi\layout\plugin\multilevel\.po -source_file = modules\LayoutPlugin\src\main\resources\org\gephi\layout\plugin\multilevel\org-gephi-layout-plugin-multilevel.pot -source_lang = en -type = PO - -[gephi.org-gephi-layout-plugin-labelAdjust] -file_filter = modules\LayoutPlugin\src\main\resources\org\gephi\layout\plugin\labelAdjust\.po -source_file = modules\LayoutPlugin\src\main\resources\org\gephi\layout\plugin\labelAdjust\org-gephi-layout-plugin-labelAdjust.pot -source_lang = en -type = PO - -[gephi.org-gephi-layout-plugin-fruchterman] -file_filter = modules\LayoutPlugin\src\main\resources\org\gephi\layout\plugin\fruchterman\.po -source_file = modules\LayoutPlugin\src\main\resources\org\gephi\layout\plugin\fruchterman\org-gephi-layout-plugin-fruchterman.pot -source_lang = en -type = PO - -[gephi.org-gephi-layout-plugin-forceAtlas2] -file_filter = modules\LayoutPlugin\src\main\resources\org\gephi\layout\plugin\forceAtlas2\.po -source_file = modules\LayoutPlugin\src\main\resources\org\gephi\layout\plugin\forceAtlas2\org-gephi-layout-plugin-forceAtlas2.pot -source_lang = en -type = PO - -[gephi.org-gephi-layout-plugin-forceAtlas] -file_filter = modules\LayoutPlugin\src\main\resources\org\gephi\layout\plugin\forceAtlas\.po -source_file = modules\LayoutPlugin\src\main\resources\org\gephi\layout\plugin\forceAtlas\org-gephi-layout-plugin-forceAtlas.pot -source_lang = en -type = PO - -[gephi.org-gephi-layout-plugin-force-yifanHu] -file_filter = modules\LayoutPlugin\src\main\resources\org\gephi\layout\plugin\force\yifanHu\.po -source_file = modules\LayoutPlugin\src\main\resources\org\gephi\layout\plugin\force\yifanHu\org-gephi-layout-plugin-force-yifanHu.pot -source_lang = en -type = PO - -[gephi.org-gephi-layout] -file_filter = modules\LayoutAPI\src\main\resources\org\gephi\layout\.po -source_file = modules\LayoutAPI\src\main\resources\org\gephi\layout\org-gephi-layout.pot -source_lang = en -type = PO - -[gephi.org-gephi-layout-api] -file_filter = modules\LayoutAPI\src\main\resources\org\gephi\layout\api\.po -source_file = modules\LayoutAPI\src\main\resources\org\gephi\layout\api\org-gephi-layout-api.pot -source_lang = en -type = PO - -[gephi.org-gephi-ui-importer-plugin] -file_filter = modules\ImportPluginUI\src\main\resources\org\gephi\ui\importer\plugin\.po -source_file = modules\ImportPluginUI\src\main\resources\org\gephi\ui\importer\plugin\org-gephi-ui-importer-plugin.pot -source_lang = en -type = PO - -[gephi.org-gephi-io-importer-plugin] -file_filter = modules\ImportPlugin\src\main\resources\org\gephi\io\importer\plugin\.po -source_file = modules\ImportPlugin\src\main\resources\org\gephi\io\importer\plugin\org-gephi-io-importer-plugin.pot -source_lang = en -type = PO - -[gephi.org-gephi-io-importer-plugin-file] -file_filter = modules\ImportPlugin\src\main\resources\org\gephi\io\importer\plugin\file\.po -source_file = modules\ImportPlugin\src\main\resources\org\gephi\io\importer\plugin\file\org-gephi-io-importer-plugin-file.pot -source_lang = en -type = PO - -[gephi.org-gephi-io-importer-impl] -file_filter = modules\ImportAPI\src\main\resources\org\gephi\io\importer\impl\.po -source_file = modules\ImportAPI\src\main\resources\org\gephi\io\importer\impl\org-gephi-io-importer-impl.pot -source_lang = en -type = PO - -[gephi.org-gephi-io-importer-api] -file_filter = modules\ImportAPI\src\main\resources\org\gephi\io\importer\api\.po -source_file = modules\ImportAPI\src\main\resources\org\gephi\io\importer\api\org-gephi-io-importer-api.pot -source_lang = en -type = PO - -[gephi.org-gephi-graph-api] -file_filter = modules\GraphAPI\src\main\resources\org\gephi\graph\api\.po -source_file = modules\GraphAPI\src\main\resources\org\gephi\graph\api\org-gephi-graph-api.pot -source_lang = en -type = PO - -[gephi.org-gephi-lib-gleem] -file_filter = modules\Gleem\src\main\resources\org\gephi\lib\gleem\.po -source_file = modules\Gleem\src\main\resources\org\gephi\lib\gleem\org-gephi-lib-gleem.pot -source_lang = en -type = PO - -[gephi.org-gephi-ui-generator-plugin] -file_filter = modules\GeneratorPluginUI\src\main\resources\org\gephi\ui\generator\plugin\.po -source_file = modules\GeneratorPluginUI\src\main\resources\org\gephi\ui\generator\plugin\org-gephi-ui-generator-plugin.pot -source_lang = en -type = PO - -[gephi.org-gephi-io-generator-plugin] -file_filter = modules\GeneratorPlugin\src\main\resources\org\gephi\io\generator\plugin\.po -source_file = modules\GeneratorPlugin\src\main\resources\org\gephi\io\generator\plugin\org-gephi-io-generator-plugin.pot -source_lang = en -type = PO - -[gephi.org-gephi-io-generator-api] -file_filter = modules\GeneratorAPI\src\main\resources\org\gephi\io\generator\api\.po -source_file = modules\GeneratorAPI\src\main\resources\org\gephi\io\generator\api\org-gephi-io-generator-api.pot -source_lang = en -type = PO - -[gephi.org-gephi-ui-filters-plugin] -file_filter = modules\FiltersPluginUI\src\main\resources\org\gephi\ui\filters\plugin\.po -source_file = modules\FiltersPluginUI\src\main\resources\org\gephi\ui\filters\plugin\org-gephi-ui-filters-plugin.pot -source_lang = en -type = PO - -[gephi.org-gephi-ui-filters-plugin-partition] -file_filter = modules\FiltersPluginUI\src\main\resources\org\gephi\ui\filters\plugin\partition\.po -source_file = modules\FiltersPluginUI\src\main\resources\org\gephi\ui\filters\plugin\partition\org-gephi-ui-filters-plugin-partition.pot -source_lang = en -type = PO - -[gephi.org-gephi-ui-filters-plugin-operator] -file_filter = modules\FiltersPluginUI\src\main\resources\org\gephi\ui\filters\plugin\operator\.po -source_file = modules\FiltersPluginUI\src\main\resources\org\gephi\ui\filters\plugin\operator\org-gephi-ui-filters-plugin-operator.pot -source_lang = en -type = PO - -[gephi.org-gephi-ui-filters-plugin-graph] -file_filter = modules\FiltersPluginUI\src\main\resources\org\gephi\ui\filters\plugin\graph\.po -source_file = modules\FiltersPluginUI\src\main\resources\org\gephi\ui\filters\plugin\graph\org-gephi-ui-filters-plugin-graph.pot -source_lang = en -type = PO - -[gephi.org-gephi-ui-filters-plugin-dynamic] -file_filter = modules\FiltersPluginUI\src\main\resources\org\gephi\ui\filters\plugin\dynamic\.po -source_file = modules\FiltersPluginUI\src\main\resources\org\gephi\ui\filters\plugin\dynamic\org-gephi-ui-filters-plugin-dynamic.pot -source_lang = en -type = PO - -[gephi.org-gephi-ui-filters-plugin-attribute] -file_filter = modules\FiltersPluginUI\src\main\resources\org\gephi\ui\filters\plugin\attribute\.po -source_file = modules\FiltersPluginUI\src\main\resources\org\gephi\ui\filters\plugin\attribute\org-gephi-ui-filters-plugin-attribute.pot -source_lang = en -type = PO - -[gephi.org-gephi-filters-plugin] -file_filter = modules\FiltersPlugin\src\main\resources\org\gephi\filters\plugin\.po -source_file = modules\FiltersPlugin\src\main\resources\org\gephi\filters\plugin\org-gephi-filters-plugin.pot -source_lang = en -type = PO - -[gephi.org-gephi-filters-plugin-partition] -file_filter = modules\FiltersPlugin\src\main\resources\org\gephi\filters\plugin\partition\.po -source_file = modules\FiltersPlugin\src\main\resources\org\gephi\filters\plugin\partition\org-gephi-filters-plugin-partition.pot -source_lang = en -type = PO - -[gephi.org-gephi-filters-plugin-operator] -file_filter = modules\FiltersPlugin\src\main\resources\org\gephi\filters\plugin\operator\.po -source_file = modules\FiltersPlugin\src\main\resources\org\gephi\filters\plugin\operator\org-gephi-filters-plugin-operator.pot -source_lang = en -type = PO - -[gephi.org-gephi-filters-plugin-hierarchy] -file_filter = modules\FiltersPlugin\src\main\resources\org\gephi\filters\plugin\hierarchy\.po -source_file = modules\FiltersPlugin\src\main\resources\org\gephi\filters\plugin\hierarchy\org-gephi-filters-plugin-hierarchy.pot -source_lang = en -type = PO - -[gephi.org-gephi-filters-plugin-graph] -file_filter = modules\FiltersPlugin\src\main\resources\org\gephi\filters\plugin\graph\.po -source_file = modules\FiltersPlugin\src\main\resources\org\gephi\filters\plugin\graph\org-gephi-filters-plugin-graph.pot -source_lang = en -type = PO - -[gephi.org-gephi-filters-plugin-edge] -file_filter = modules\FiltersPlugin\src\main\resources\org\gephi\filters\plugin\edge\.po -source_file = modules\FiltersPlugin\src\main\resources\org\gephi\filters\plugin\edge\org-gephi-filters-plugin-edge.pot -source_lang = en -type = PO - -[gephi.org-gephi-filters-plugin-dynamic] -file_filter = modules\FiltersPlugin\src\main\resources\org\gephi\filters\plugin\dynamic\.po -source_file = modules\FiltersPlugin\src\main\resources\org\gephi\filters\plugin\dynamic\org-gephi-filters-plugin-dynamic.pot -source_lang = en -type = PO - -[gephi.org-gephi-filters-plugin-attribute] -file_filter = modules\FiltersPlugin\src\main\resources\org\gephi\filters\plugin\attribute\.po -source_file = modules\FiltersPlugin\src\main\resources\org\gephi\filters\plugin\attribute\org-gephi-filters-plugin-attribute.pot -source_lang = en -type = PO - -[gephi.org-gephi-filters] -file_filter = modules\FiltersImpl\src\main\resources\org\gephi\filters\.po -source_file = modules\FiltersImpl\src\main\resources\org\gephi\filters\org-gephi-filters.pot -source_lang = en -type = PO - -[gephi.org-gephi-filters-api] -file_filter = modules\FiltersAPI\src\main\resources\org\gephi\filters\api\.po -source_file = modules\FiltersAPI\src\main\resources\org\gephi\filters\api\org-gephi-filters-api.pot -source_lang = en -type = PO - -[gephi.org-gephi-ui-exporter-plugin] -file_filter = modules\ExportPluginUI\src\main\resources\org\gephi\ui\exporter\plugin\.po -source_file = modules\ExportPluginUI\src\main\resources\org\gephi\ui\exporter\plugin\org-gephi-ui-exporter-plugin.pot -source_lang = en -type = PO - -[gephi.org-gephi-io-exporter-plugin] -file_filter = modules\ExportPlugin\src\main\resources\org\gephi\io\exporter\plugin\.po -source_file = modules\ExportPlugin\src\main\resources\org\gephi\io\exporter\plugin\org-gephi-io-exporter-plugin.pot -source_lang = en -type = PO - -[gephi.org-gephi-io-exporter-impl] -file_filter = modules\ExportAPI\src\main\resources\org\gephi\io\exporter\impl\.po -source_file = modules\ExportAPI\src\main\resources\org\gephi\io\exporter\impl\org-gephi-io-exporter-impl.pot -source_lang = en -type = PO - -[gephi.org-gephi-io-exporter-api] -file_filter = modules\ExportAPI\src\main\resources\org\gephi\io\exporter\api\.po -source_file = modules\ExportAPI\src\main\resources\org\gephi\io\exporter\api\org-gephi-io-exporter-api.pot -source_lang = en -type = PO - -[gephi.org-gephi-dynamic] -file_filter = modules\DynamicImpl\src\main\resources\org\gephi\dynamic\.po -source_file = modules\DynamicImpl\src\main\resources\org\gephi\dynamic\org-gephi-dynamic.pot -source_lang = en -type = PO - -[gephi.org-gephi-dynamic-api] -file_filter = modules\DynamicAPI\src\main\resources\org\gephi\dynamic\api\.po -source_file = modules\DynamicAPI\src\main\resources\org\gephi\dynamic\api\org-gephi-dynamic-api.pot -source_lang = en -type = PO - -[gephi.org-netbeans-swing-dirchooser] -file_filter = modules\DirectoryChooser\src\main\resources\org\netbeans\swing\dirchooser\.po -source_file = modules\DirectoryChooser\src\main\resources\org\netbeans\swing\dirchooser\org-netbeans-swing-dirchooser.pot -source_lang = en -type = PO - -[gephi.org-gephi-graph-dhns] -file_filter = modules\DHNSGraph\src\main\resources\org\gephi\graph\dhns\.po -source_file = modules\DHNSGraph\src\main\resources\org\gephi\graph\dhns\org-gephi-graph-dhns.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-tools] -file_filter = modules\DesktopTools\src\main\resources\org\gephi\desktop\tools\.po -source_file = modules\DesktopTools\src\main\resources\org\gephi\desktop\tools\org-gephi-desktop-tools.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-timeline] -file_filter = modules\DesktopTimeline\src\main\resources\org\gephi\desktop\timeline\.po -source_file = modules\DesktopTimeline\src\main\resources\org\gephi\desktop\timeline\org-gephi-desktop-timeline.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-statistics] -file_filter = modules\DesktopStatistics\src\main\resources\org\gephi\desktop\statistics\.po -source_file = modules\DesktopStatistics\src\main\resources\org\gephi\desktop\statistics\org-gephi-desktop-statistics.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-spigot] -file_filter = modules\DesktopSpigot\src\main\resources\org\gephi\desktop\spigot\.po -source_file = modules\DesktopSpigot\src\main\resources\org\gephi\desktop\spigot\org-gephi-desktop-spigot.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-recentfiles] -file_filter = modules\DesktopRecentFiles\src\main\resources\org\gephi\desktop\recentfiles\.po -source_file = modules\DesktopRecentFiles\src\main\resources\org\gephi\desktop\recentfiles\org-gephi-desktop-recentfiles.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-ranking] -file_filter = modules\DesktopRanking\src\main\resources\org\gephi\desktop\ranking\.po -source_file = modules\DesktopRanking\src\main\resources\org\gephi\desktop\ranking\org-gephi-desktop-ranking.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-project] -file_filter = modules\DesktopProject\src\main\resources\org\gephi\desktop\project\.po -source_file = modules\DesktopProject\src\main\resources\org\gephi\desktop\project\org-gephi-desktop-project.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-progress] -file_filter = modules\DesktopProgress\src\main\resources\org\gephi\desktop\progress\.po -source_file = modules\DesktopProgress\src\main\resources\org\gephi\desktop\progress\org-gephi-desktop-progress.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-preview] -file_filter = modules\DesktopPreview\src\main\resources\org\gephi\desktop\preview\.po -source_file = modules\DesktopPreview\src\main\resources\org\gephi\desktop\preview\org-gephi-desktop-preview.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-preview-propertyeditors] -file_filter = modules\DesktopPreview\src\main\resources\org\gephi\desktop\preview\propertyeditors\.po -source_file = modules\DesktopPreview\src\main\resources\org\gephi\desktop\preview\propertyeditors\org-gephi-desktop-preview-propertyeditors.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-perspective] -file_filter = modules\DesktopPerspective\src\main\resources\org\gephi\desktop\perspective\.po -source_file = modules\DesktopPerspective\src\main\resources\org\gephi\desktop\perspective\org-gephi-desktop-perspective.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-perspective-plugin] -file_filter = modules\DesktopPerspective\src\main\resources\org\gephi\desktop\perspective\plugin\.po -source_file = modules\DesktopPerspective\src\main\resources\org\gephi\desktop\perspective\plugin\org-gephi-desktop-perspective-plugin.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-partition] -file_filter = modules\DesktopPartition\src\main\resources\org\gephi\desktop\partition\.po -source_file = modules\DesktopPartition\src\main\resources\org\gephi\desktop\partition\org-gephi-desktop-partition.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-layout] -file_filter = modules\DesktopLayout\src\main\resources\org\gephi\desktop\layout\.po -source_file = modules\DesktopLayout\src\main\resources\org\gephi\desktop\layout\org-gephi-desktop-layout.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-importer] -file_filter = modules\DesktopImport\src\main\resources\org\gephi\desktop\importer\.po -source_file = modules\DesktopImport\src\main\resources\org\gephi\desktop\importer\org-gephi-desktop-importer.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-hierarchy] -file_filter = modules\DesktopHierarchy\src\main\resources\org\gephi\desktop\hierarchy\.po -source_file = modules\DesktopHierarchy\src\main\resources\org\gephi\desktop\hierarchy\org-gephi-desktop-hierarchy.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-generate] -file_filter = modules\DesktopGenerate\src\main\resources\org\gephi\desktop\generate\.po -source_file = modules\DesktopGenerate\src\main\resources\org\gephi\desktop\generate\org-gephi-desktop-generate.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-filters] -file_filter = modules\DesktopFilters\src\main\resources\org\gephi\desktop\filters\.po -source_file = modules\DesktopFilters\src\main\resources\org\gephi\desktop\filters\org-gephi-desktop-filters.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-filters-query] -file_filter = modules\DesktopFilters\src\main\resources\org\gephi\desktop\filters\query\.po -source_file = modules\DesktopFilters\src\main\resources\org\gephi\desktop\filters\query\org-gephi-desktop-filters-query.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-filters-library] -file_filter = modules\DesktopFilters\src\main\resources\org\gephi\desktop\filters\library\.po -source_file = modules\DesktopFilters\src\main\resources\org\gephi\desktop\filters\library\org-gephi-desktop-filters-library.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-io-export] -file_filter = modules\DesktopExport\src\main\resources\org\gephi\desktop\io\export\.po -source_file = modules\DesktopExport\src\main\resources\org\gephi\desktop\io\export\org-gephi-desktop-io-export.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-io-export-api] -file_filter = modules\DesktopExport\src\main\resources\org\gephi\desktop\io\export\api\.po -source_file = modules\DesktopExport\src\main\resources\org\gephi\desktop\io\export\api\org-gephi-desktop-io-export-api.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-datalab] -file_filter = modules\DesktopDataLaboratory\src\main\resources\org\gephi\desktop\datalab\.po -source_file = modules\DesktopDataLaboratory\src\main\resources\org\gephi\desktop\datalab\org-gephi-desktop-datalab.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-datalab-utils] -file_filter = modules\DesktopDataLaboratory\src\main\resources\org\gephi\desktop\datalab\utils\.po -source_file = modules\DesktopDataLaboratory\src\main\resources\org\gephi\desktop\datalab\utils\org-gephi-desktop-datalab-utils.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-datalab-general-actions] -file_filter = modules\DesktopDataLaboratory\src\main\resources\org\gephi\desktop\datalab\general\actions\.po -source_file = modules\DesktopDataLaboratory\src\main\resources\org\gephi\desktop\datalab\general\actions\org-gephi-desktop-datalab-general-actions.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-context] -file_filter = modules\DesktopContext\src\main\resources\org\gephi\desktop\context\.po -source_file = modules\DesktopContext\src\main\resources\org\gephi\desktop\context\org-gephi-desktop-context.pot -source_lang = en -type = PO - -[gephi.org-gephi-desktop-clustering] -file_filter = modules\DesktopClustering\src\main\resources\org\gephi\desktop\clustering\.po -source_file = modules\DesktopClustering\src\main\resources\org\gephi\desktop\clustering\org-gephi-desktop-clustering.pot -source_lang = en -type = PO - -[gephi.org-gephi-branding-desktop] -file_filter = modules\DesktopBranding\src\main\resources\org\gephi\branding\desktop\.po -source_file = modules\DesktopBranding\src\main\resources\org\gephi\branding\desktop\org-gephi-branding-desktop.pot -source_lang = en -type = PO - -[gephi.org-gephi-branding-desktop-reporter] -file_filter = modules\DesktopBranding\src\main\resources\org\gephi\branding\desktop\reporter\.po -source_file = modules\DesktopBranding\src\main\resources\org\gephi\branding\desktop\reporter\org-gephi-branding-desktop-reporter.pot -source_lang = en -type = PO - -[gephi.org-gephi-branding-desktop-multilingual] -file_filter = modules\DesktopBranding\src\main\resources\org\gephi\branding\desktop\multilingual\.po -source_file = modules\DesktopBranding\src\main\resources\org\gephi\branding\desktop\multilingual\org-gephi-branding-desktop-multilingual.pot -source_lang = en -type = PO - -[gephi.org-gephi-branding-desktop-actions] -file_filter = modules\DesktopBranding\src\main\resources\org\gephi\branding\desktop\actions\.po -source_file = modules\DesktopBranding\src\main\resources\org\gephi\branding\desktop\actions\org-gephi-branding-desktop-actions.pot -source_lang = en -type = PO - -[gephi.org-gephi-io-database-drivers] -file_filter = modules\DBDrivers\src\main\resources\org\gephi\io\database\drivers\.po -source_file = modules\DBDrivers\src\main\resources\org\gephi\io\database\drivers\org-gephi-io-database-drivers.pot -source_lang = en -type = PO - -[gephi.org-gephi-datalab-plugin] -file_filter = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\.po -source_file = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\org-gephi-datalab-plugin.pot -source_lang = en -type = PO - -[gephi.org-gephi-datalab-plugin-manipulators-values] -file_filter = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\manipulators\values\.po -source_file = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\manipulators\values\org-gephi-datalab-plugin-manipulators-values.pot -source_lang = en -type = PO - -[gephi.org-gephi-datalab-plugin-manipulators-ui] -file_filter = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\manipulators\ui\.po -source_file = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\manipulators\ui\org-gephi-datalab-plugin-manipulators-ui.pot -source_lang = en -type = PO - -[gephi.org-gephi-datalab-plugin-manipulators-rows-merge] -file_filter = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\manipulators\rows\merge\.po -source_file = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\manipulators\rows\merge\org-gephi-datalab-plugin-manipulators-rows-merge.pot -source_lang = en -type = PO - -[gephi.s--gephi-datalab-plugin-manipulators-rows-merge-ui] -file_filter = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\manipulators\rows\merge\ui\.po -source_file = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\manipulators\rows\merge\ui\org-gephi-datalab-plugin-manipulators-rows-merge-ui.pot -source_lang = en -type = PO - -[gephi.org-gephi-datalab-plugin-manipulators-nodes] -file_filter = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\manipulators\nodes\.po -source_file = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\manipulators\nodes\org-gephi-datalab-plugin-manipulators-nodes.pot -source_lang = en -type = PO - -[gephi.org-gephi-datalab-plugin-manipulators-nodes-ui] -file_filter = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\manipulators\nodes\ui\.po -source_file = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\manipulators\nodes\ui\org-gephi-datalab-plugin-manipulators-nodes-ui.pot -source_lang = en -type = PO - -[gephi.org-gephi-datalab-plugin-manipulators-general] -file_filter = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\manipulators\general\.po -source_file = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\manipulators\general\org-gephi-datalab-plugin-manipulators-general.pot -source_lang = en -type = PO - -[gephi.org-gephi-datalab-plugin-manipulators-general-ui] -file_filter = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\manipulators\general\ui\.po -source_file = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\manipulators\general\ui\org-gephi-datalab-plugin-manipulators-general-ui.pot -source_lang = en -type = PO - -[gephi.org-gephi-datalab-plugin-manipulators-edges] -file_filter = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\manipulators\edges\.po -source_file = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\manipulators\edges\org-gephi-datalab-plugin-manipulators-edges.pot -source_lang = en -type = PO - -[gephi.org-gephi-datalab-plugin-manipulators-edges-ui] -file_filter = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\manipulators\edges\ui\.po -source_file = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\manipulators\edges\ui\org-gephi-datalab-plugin-manipulators-edges-ui.pot -source_lang = en -type = PO - -[gephi.org-gephi-datalab-plugin-manipulators-columns] -file_filter = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\manipulators\columns\.po -source_file = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\manipulators\columns\org-gephi-datalab-plugin-manipulators-columns.pot -source_lang = en -type = PO - -[gephi.org-gephi-datalab-plugin-manipulators-columns-ui] -file_filter = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\manipulators\columns\ui\.po -source_file = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\manipulators\columns\ui\org-gephi-datalab-plugin-manipulators-columns-ui.pot -source_lang = en -type = PO - -[gephi.s--gephi-datalab-plugin-manipulators-columns-merge] -file_filter = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\manipulators\columns\merge\.po -source_file = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\manipulators\columns\merge\org-gephi-datalab-plugin-manipulators-columns-merge.pot -source_lang = en -type = PO - -[gephi.s-phi-datalab-plugin-manipulators-columns-merge-ui] -file_filter = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\manipulators\columns\merge\ui\.po -source_file = modules\DataLaboratoryPlugin\src\main\resources\org\gephi\datalab\plugin\manipulators\columns\merge\ui\org-gephi-datalab-plugin-manipulators-columns-merge-ui.pot -source_lang = en -type = PO - -[gephi.org-gephi-datalab-impl] -file_filter = modules\DataLaboratoryAPI\src\main\resources\org\gephi\datalab\impl\.po -source_file = modules\DataLaboratoryAPI\src\main\resources\org\gephi\datalab\impl\org-gephi-datalab-impl.pot -source_lang = en -type = PO - -[gephi.org-gephi-datalab-api] -file_filter = modules\DataLaboratoryAPI\src\main\resources\org\gephi\datalab\api\.po -source_file = modules\DataLaboratoryAPI\src\main\resources\org\gephi\datalab\api\org-gephi-datalab-api.pot -source_lang = en -type = PO - -[gephi.org-gephi-utils-collection] -file_filter = modules\CollectionUtils\src\main\resources\org\gephi\utils\collection\.po -source_file = modules\CollectionUtils\src\main\resources\org\gephi\utils\collection\org-gephi-utils-collection.pot -source_lang = en -type = PO - -[gephi.org-gephi-clustering-plugin] -file_filter = modules\ClusteringPlugin\src\main\resources\org\gephi\clustering\plugin\.po -source_file = modules\ClusteringPlugin\src\main\resources\org\gephi\clustering\plugin\org-gephi-clustering-plugin.pot -source_lang = en -type = PO - -[gephi.org-gephi-clustering-plugin-mcl] -file_filter = modules\ClusteringPlugin\src\main\resources\org\gephi\clustering\plugin\mcl\.po -source_file = modules\ClusteringPlugin\src\main\resources\org\gephi\clustering\plugin\mcl\org-gephi-clustering-plugin-mcl.pot -source_lang = en -type = PO - -[gephi.org-gephi-clustering-api] -file_filter = modules\ClusteringAPI\src\main\resources\org\gephi\clustering\api\.po -source_file = modules\ClusteringAPI\src\main\resources\org\gephi\clustering\api\org-gephi-clustering-api.pot -source_lang = en -type = PO - -[gephi.org-gephi-data-attributes] -file_filter = modules\AttributesImpl\src\main\resources\org\gephi\data\attributes\.po -source_file = modules\AttributesImpl\src\main\resources\org\gephi\data\attributes\org-gephi-data-attributes.pot -source_lang = en -type = PO - -[gephi.org-gephi-data-attributes-api] -file_filter = modules\AttributesAPI\src\main\resources\org\gephi\data\attributes\api\.po -source_file = modules\AttributesAPI\src\main\resources\org\gephi\data\attributes\api\org-gephi-data-attributes-api.pot -source_lang = en -type = PO - -[gephi.org-gephi-ui-propertyeditor] -file_filter = modules\AttributeColumnPropertyEditor\src\main\resources\org\gephi\ui\propertyeditor\.po -source_file = modules\AttributeColumnPropertyEditor\src\main\resources\org\gephi\ui\propertyeditor\org-gephi-ui-propertyeditor.pot -source_lang = en -type = PO - -[gephi.org-gephi-algorithms] -file_filter = modules\AlgorithmsPlugin\src\main\resources\org\gephi\algorithms\.po -source_file = modules\AlgorithmsPlugin\src\main\resources\org\gephi\algorithms\org-gephi-algorithms.pot -source_lang = en -type = PO - diff --git a/.tx/readme.txt b/.tx/readme.txt deleted file mode 100644 index b16b71be83..0000000000 --- a/.tx/readme.txt +++ /dev/null @@ -1,4 +0,0 @@ -This folder contains the https://www.transifex.net/projects/p/gephi translation tool configuration to push and pull translation files from there. - -!!Transifex needs "\" separators in windows to correctly find .po files, depending on your OS you should use / or \ in the config file. This can be easily replaced with a text editor. -See set_transifex.py script \ No newline at end of file diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md new file mode 100644 index 0000000000..0c6820b852 --- /dev/null +++ b/CODE_OF_CONDUCT.md @@ -0,0 +1,128 @@ +# Gephi Code of Conduct + +## Our Pledge + +We as Gephi contributors and maintainers pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity +and orientation. + +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. + +## Our Standards + +Examples of behavior that contributes to a positive environment for our +community include: + +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the + overall community + +Examples of unacceptable behavior include: + +* The use of sexualized language or imagery, and sexual attention or + advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email + address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Enforcement Responsibilities + +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. + +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. + +## Scope + +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +contact@gephi.org. +All complaints will be reviewed and investigated promptly and fairly. + +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. + +## Enforcement Guidelines + +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: + +### 1. Correction + +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. + +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. + +### 2. Warning + +**Community Impact**: A violation through a single incident or series +of actions. + +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or +permanent ban. + +### 3. Temporary Ban + +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. + +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. + +### 4. Permanent Ban + +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. + +**Consequence**: A permanent ban from any sort of public interaction within +the community. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], +version 2.0, available at +https://www.contributor-covenant.org/version/2/0/code_of_conduct.html. + +Community Impact Guidelines were inspired by [Mozilla's code of conduct +enforcement ladder](https://github.com/mozilla/diversity). + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see the FAQ at +https://www.contributor-covenant.org/faq. Translations are available at +https://www.contributor-covenant.org/translations. diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000000..6b111d165d --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + +Copyright (C) 2007 Free Software Foundation, Inc. +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + + Preamble + +The GNU General Public License is a free, copyleft license for +software and other kinds of works. + +The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + +When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + +To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + +For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + +Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + +For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + +Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + +Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + +The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + +0. Definitions. + +"This License" refers to version 3 of the GNU General Public License. + +"Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + +"The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + +To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + +A "covered work" means either the unmodified Program or a work based +on the Program. + +To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + +To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + +An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + +1. Source Code. + +The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + +A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + +The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + +The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + +The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + +The Corresponding Source for a work in source code form is that +same work. + +2. Basic Permissions. + +All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + +3. Protecting Users' Legal Rights From Anti-Circumvention Law. + +No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + +When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + +4. Conveying Verbatim Copies. + +You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + +5. Conveying Modified Source Versions. + +You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + +A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + +6. Conveying Non-Source Forms. + +You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + +A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + +"Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + +If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + +The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + +Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + +7. Additional Terms. + +"Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + +All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + +8. Termination. + +You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + +However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + +Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + +Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + +9. Acceptance Not Required for Having Copies. + +You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + +10. Automatic Licensing of Downstream Recipients. + +Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + +An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + +11. Patents. + +A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + +A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + +In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + +If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + +A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + +12. No Surrender of Others' Freedom. + +If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + +13. Use with the GNU Affero General Public License. + +Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + +14. Revised Versions of this License. + +The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + +If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + +Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + +15. Disclaimer of Warranty. + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +16. Limitation of Liability. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + +17. Interpretation of Sections 15 and 16. + +If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + +If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + +You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + +The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/README.md b/README.md index bcdebbca67..2f021d088d 100644 --- a/README.md +++ b/README.md @@ -1,120 +1,144 @@ -# Gephi - The Open Graph Viz Platform - -[Gephi](http://gephi.org) is an award-winning open-source platform for visualizing and manipulating large graphs. It runs on Windows, Mac OS X and Linux. Localization is available in French, Spanish, Japanese, Russian, Brazilian Portuguese, Chinese and Czech. - -- **Fast** Powered by a built-in OpenGL engine, Gephi is able to push the envelope with very large networks. Visualize networks up to a million elements. All actions (e.g. layout, filter, drag) run in real-time. - -- **Simple** Easy to install and [get started](http://gephi.org/users/quick-start/). An UI that is centered around the visualization. Like Photoshopβ„’ for graphs. - -- **Modular** Extend Gephi with [plug-ins](http://gephi.org/plugins/). The architecture is built on top of Netbeans Platform and can be extended or reused easily through well-written APIs. - -[Download Gephi](http://gephi.org/users/download/) for Windows, Mac OS X and Linux and consult the [release notes](https://wiki.gephi.org/index.php/Gephi_Releases). Example datasets can be found on our [wiki](https://wiki.gephi.org/index.php?title=Datasets). - -![Gephi](http://gephi.org/wp-content/themes/gephi/images/screenshots/select-tool-mini.png) - -## Install and use Gephi - -Download and [Install](http://gephi.org/users/install) Gephi on your computer. - -Get started with the [Quick Start](http://gephi.org/users/quick-start/) and follow the [Tutorials](http://gephi.org/users/). Load a sample [dataset](https://wiki.gephi.org/index.php?title=Datasets) and start to play with the data. - -If you run into any trouble or have questions consult our [forum](http://forum.gephi.org). - -## Latest releases - -### Stable - -- Latest stable release on [gephi.org](http://gephi.org/download). - -### Nightly builds - -Current version is 0.9-SNAPSHOT - -- [gephi-0.9-SNAPSHOT.zip](http://nexus.gephi.org/nexus/service/local/artifact/maven/content?r=snapshots&g=org.gephi&a=gephi&v=0.9-SNAPSHOT&p=zip) (Windows & Linux) - -- [gephi-0.9-SNAPSHOT.dmg](http://nexus.gephi.org/nexus/service/local/artifact/maven/content?r=snapshots&g=org.gephi&a=gephi&v=0.9-SNAPSHOT&p=dmg) (Mac OS X) - -- [gephi-0.9-SNAPSHOT-sources.tar.gz](http://nexus.gephi.org/nexus/service/local/artifact/maven/redirect?r=snapshots&g=org.gephi&a=gephi-parent&v=0.9-SNAPSHOT&c=sources&p=tar.gz) (Sources) - -- [gephi-0.9-SNAPSHOT-javadoc.jar](http://nexus.gephi.org/nexus/service/local/artifact/maven/redirect?r=snapshots&g=org.gephi&a=gephi-parent&v=0.9-SNAPSHOT&c=javadoc&p=jar) (Javadoc) - -## Developer Introduction - -Gephi is developed in Java and uses OpenGL for its visualization engine. Built on the top of Netbeans Platform, it follows a loosely-coupled, modular architecture philosophy. That allows it to be used build large applications and to grow in a sustainable way. Gephi is split into modules, which depend on other modules through well-written APIs. Plugins can reuse existing APIs, create new services and even replace a default implementation with a new one. - -Consult the [**Javadoc**](http://gephi.org/docs/api) for an overview of the APIs. - -### Requirements - -- Java JDK 6 or 7 with preferably [Oracle Java JDK](http://java.com/en/). - -- [Apache Maven](http://maven.apache.org/) version 3.0.4 or later - -### Checkout and Build the sources - -- Fork the repository and clone - - git clone git@github.com:username/gephi.git - -- Run the following command or [open the project in Netbeans](http://wiki.gephi.org/index.php/Build_Gephi) - - mvn clean install - -- Once built, one can test running Gephi - - cd modules/application - mvn nbm:cluster-app nbm:run-platform - -### Create Plug-ins - -Gephi is extensible and lets users create plug-ins to add new features, or to modify existing features. For example, you can create a new layout algorithm, add a metric, create a filter or a tool, support a new file format or database, or modify the visualization. - -- [**Plugins Portal**](http://wiki.gephi.org/index.php/Plugins_portal) - -- [Plugins Quick Start (5 minutes)](http://wiki.gephi.org/index.php/Plugin_Quick_Start_(5_minutes\)) - -- Browse the [plugins](http://gephi.org/plugins) created by the community - -- We've created a [**Plugins Bootcamp**](https://github.com/gephi/gephi-plugins-bootcamp) to learn by examples. - -## Gephi Toolkit - -The Gephi Toolkit project packages essential Gephi modules (Graph, Layout, Filters, IO…) in a standard Java library which any Java project can use for getting things done. It can be used on a server or command-line tool to do the same things Gephi does but automatically. - -- [Download](http://gephi.org/toolkit/) - -- [GitHub Project](https://github.com/gephi/gephi-toolkit) - -- [Toolkit Portal](https://wiki.gephi.org/index.php/Toolkit_portal) - -## License - -Gephi main source code is distributed under the dual license [CDDL 1.0](http://www.opensource.org/licenses/CDDL-1.0) and [GNU General Public License v3](http://www.gnu.org/licenses/gpl.html). Read the [Legal FAQs](https://gephi.org/about/legal/faq/) to learn more. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. +# Gephi - The Open Graph Viz Platform + +[![build](https://github.com/gephi/gephi/actions/workflows/build.yml/badge.svg)](https://github.com/gephi/gephi/actions/workflows/build.yml) +[![Downloads](https://img.shields.io/github/downloads/gephi/gephi/v0.11.2/total.svg)](https://github.com/gephi/gephi/releases/tag/v0.11.2) +[![Downloads](https://img.shields.io/github/downloads/gephi/gephi/total.svg)](https://github.com/gephi/gephi/releases/) +[![Translation progress](https://hosted.weblate.org/widgets/gephi/-/svg-badge.svg)](https://hosted.weblate.org/engage/gephi/?utm_source=widget) + +[Gephi](http://gephi.org) is an award-winning open-source platform for visualizing and manipulating large graphs. It runs on Windows, Mac OS X and Linux. Localization is available in English, French, Spanish, Japanese, Russian, Brazilian Portuguese, Chinese, Czech, German, Romanian, Greek, Hungarian, Korean, Swedish and Ukrainian. + +- **Fast** Powered by a built-in OpenGL engine, Gephi is able to push the envelope with very large networks. Visualize networks up to a million elements. All actions (e.g. layout, filter, drag) run in real-time. + +- **Simple** Easy to install and [get started](https://gephi.org/quickstart/). An UI that is centered around the visualization. Like Photoshopβ„’ for graphs. + +- **Modular** Extend Gephi with [plug-ins](https://gephi.org/desktop/plugins/). The architecture is built on top of [Apache Netbeans Platform](https://netbeans.apache.org/tutorials/nbm-quick-start.html) and can be extended or reused easily through well-written APIs. + +[Download Gephi](https://gephi.org/desktop/) for Windows, Mac OS X and Linux and consult the [release notes](https://github.com/gephi/gephi/releases). Example datasets can be found on our [wiki](https://docs.gephi.org/desktop/User_Manual/Datasets/). + +![Gephi](https://gephi.org/select-tool-mini.png) + +## Install and use Gephi + +Download and [Install](https://gephi.github.io/users/install/) Gephi on your computer. + +Get started with the [Quick Start](https://gephi.org/quickstart/) and follow the [Tutorials](https://gephi.org/quickstart/). Load a sample [dataset](https://docs.gephi.org/desktop/User_Manual/Datasets/) and start to play with the data. + +If you run into any trouble or have questions consult our [discussions](https://github.com/gephi/gephi/discussions). + +## Latest releases + +### Stable + +- Latest stable release on [gephi.org](https://gephi.org/desktop/). + +### Development builds + +Development builds are [generated regularly](https://github.com/gephi/gephi/actions/workflows/release.yml?query=is%3Asuccess++). Current version is 0.11.2-SNAPSHOT + +- [gephi-0.11.2-SNAPSHOT-windows-x64.exe](https://central.sonatype.com/repository/maven-snapshots/org/gephi/gephi/0.11.2-SNAPSHOT/gephi-0.11.2-20260509.150210-9-windows-x64.exe) (Windows) + +- [gephi-0.11.2-SNAPSHOT-macos-x64.dmg](https://central.sonatype.com/repository/maven-snapshots/org/gephi/gephi/0.11.2-SNAPSHOT/gephi-0.11.2-20260509.150534-10-macos-x64.dmg) (Mac OS X) + +- [gephi-0.11.2-SNAPSHOT-macos-aarch64.dmg](https://central.sonatype.com/repository/maven-snapshots/org/gephi/gephi/0.11.2-SNAPSHOT/gephi-0.11.2-20260509.152025-12-macos-aarch64.dmg) (Mac OS X Silicon) + +- [gephi-0.11.2-SNAPSHOT-linux-aarch64.tar.gz](https://central.sonatype.com/repository/maven-snapshots/org/gephi/gephi/0.11.2-SNAPSHOT/gephi-0.11.2-20260509.151835-11-linux-aarch64.tar.gz) (Linux aarch64) + +- [gephi-0.11.2-SNAPSHOT-linux-x64.tar.gz](https://central.sonatype.com/repository/maven-snapshots/org/gephi/gephi/0.11.2-SNAPSHOT/gephi-0.11.2-20260509.145838-8-linux-x64.tar.gz) (Linux) + +## Developer Introduction + +Gephi is developed in Java and uses OpenGL for its visualization engine. Built on the top of Netbeans Platform, it follows a loosely-coupled, modular architecture philosophy. Gephi is split into modules, which depend on other modules through well-written APIs. Plugins can reuse existing APIs, create new services and even replace a default implementation with a new one. + +Consult the [**Javadoc**](https://javadoc.io/doc/org.gephi/gephi/latest/index.html) for an overview of the APIs. + +### Requirements + +- Java JDK 17 (or later) + +- [Apache Maven](http://maven.apache.org/) version 3.6.3 or later + +### Checkout and Build the sources + +- Fork the repository and clone + + git clone git@github.com:username/gephi.git + +- Run the following command or [open the project in an IDE](https://docs.gephi.org/desktop/Developer_Documentation/how_to_build_gephi) + + mvn -T 4 clean install + +- To skip tests and speed up the build, use the `skipTests` profile + + mvn -T 4 clean install -P skipTests + +- Once built, one can test running Gephi + + cd modules/application + mvn nbm:cluster-app nbm:run-platform + +Note that while Gephi can be built using JDK 17 or later, it currently requires JDK 17 to run. + +### Create Plug-ins + +Gephi is extensible and lets developers create plug-ins to add new features, or to modify existing features. For example, you can create a new layout algorithm, add a metric, create a filter or a tool, support a new file format or database, or modify the visualization. + +- [**Plugins Portal**](https://gephi.org/desktop/plugins/) + +- [Plugins Quick Start (5 minutes)](https://docs.gephi.org/desktop/Plugins) + +- Browse the [plugins](https://gephi.org/plugins) created by the community + +- We've created a [**Plugins Bootcamp**](https://github.com/gephi/gephi-plugins-bootcamp) to learn by examples. + +## Gephi Toolkit + +The Gephi Toolkit project packages essential Gephi modules (Graph, Layout, Filters, IO…) in a standard Java library which any Java project can use for getting things done. It can be used on a server or command-line tool to do the same things Gephi does but automatically. + +- [Download](https://gephi.org/toolkit/) + +- [GitHub Project](https://github.com/gephi/gephi-toolkit) + +- [Toolkit Portal](https://github.com/gephi/gephi/wiki/Toolkit) + +## Localization + +We use [Weblate](https://hosted.weblate.org/projects/gephi/) for localization. Follow the guidelines on the [wiki](https://docs.gephi.org/desktop/Developer_Documentation/localization) for more details how to contribute. + +## Icons + +Gephi uses icons from various sources. The icons are licensed under the [CC BY 3.0](https://creativecommons.org/licenses/by/3.0/) license. + +All icons can be found in the `DesktopIcons` module, organised by module name. + +## License + +Gephi main source code is distributed under the dual license [CDDL 1.0](http://www.opensource.org/licenses/CDDL-1.0) and [GNU General Public License v3](http://www.gnu.org/licenses/gpl.html). Read the [Legal FAQs](https://gephi.org/about/) to learn more. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License ("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.github.io/developers/license/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 0000000000..7c0c120ee2 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,76 @@ +# Security Policy + +## Introduction + +Before diving into the details, it's important to note that Gephi is a **desktop software**. +- It only interacts with local files. It **does NOT connect to the web** or to any networks. +- Gephi **does NOT have any servers** and **does NOT host any data**. + +All of the data you load into Gephi only resides in your computer's memory and hard drive. As a result, Gephi is much less exposed to security problems compared to web software for instance. Please take that in account while evaluating the policy below. + +The only exception when it comes to **connecting to the web** is for crash reporting. + +## Supported Versions + +We monitor security vulnerabilities in the dependencies we use, as well as within the core codebase. In case of a major vulnerability, we would release a new patch version of Gephi to address it. + +| Version | Supported | +|---------| ------------------ | +| 0.11.1 | :white_check_mark: | +| 0.10.1 | :white_check_mark: | +| 0.9.7 | :x: | + +## Code security + +Gephi's codebase is entirely open-source and [available on GitHub](https://github.com/gephi/gephi/). The project had always restricted commit permissions on its `main` branch and stable contributors. No external organisations are responsible for auditing the codebase. + +Gephi has numerous dependencies, listed in the projects' `pom.xml` files. It only depends on other open-source projects. There are no dependencies on closed sources. If you're having a hard-time locating the source code of some of our dependencies, don't hesitate to reach out. + +In addition, we have enabled **dependabot** to get informed about security vulnerabilities in our dependencies. + +## Contributors + +Gephi had contributions from many individuals in many countries but the vast majority of the code was written by less than 5 people. We have CLA agreements with all major contributors. The core contributors are from France and Spain. + +## Release versions + +The artifacts produced via the Gephi repository are secured. Users can always trust us with the release binaries they download from [gephi.or](https://gephi.org) or [https://github.com/gephi/gephi/releases](https://github.com/gephi/gephi/releases). + +**These measures are in place to ensure Gephi artifacts are safe and can't be compromised:** +- Only the members of the core Gephi team can approve contributions and trigger releases. +- The release process is [completely automated](https://github.com/gephi/gephi/actions/workflows/release.yml) via GitHub Actions and doesn't require any interactions with a developer's local computer. +- Binaries are directly uploaded from GitHub Actions to [Maven Central](https://central.sonatype.com/artifact/org.gephi/gephi/overview). Only our project can push artifacts to the `org.gephi` groupId. As you may know, once a file is released on Maven Central, it can't be altered. +- Digital signatures for the release binaries are also available on Maven Central. +- The Mac OS app goes through a thorough [notarisation process](https://developer.apple.com/documentation/security/notarizing-macos-software-before-distribution) before being released. This means the package is sent to Apple's servers for verification and only if approved it can be released. +- The Windows installer is also codesigned using an official certificate. + +## Vulnerabilities + +Here is a history of security/data vulnerabilities: + +| Name | Type | Severity | Description | Reported | Fixed | +| ---- | ---- | -------- | ----------- | -------- | ----- | +| PII in Crash Reports | Data privacy | Low | In the application logs it's possible to identify the username. The crash reports are voluntary, but it would be better to anonymize them. | October 2021 | βœ… Yes, in version 0.9.3 [#2340](https://github.com/gephi/gephi/issues/2340) | +| Log4j vulnerability | Dependency vulnerability | N/A | Gephi doesn't depend on Log4j, we weren't affected. | December 2021 | N/A | + +## Reporting a Vulnerability + +In case you find a vulnerability or want to get in touch regarding security, reach out to us at contact [at] gephi.org. Alternatively, you can [directly report via GitHub](https://github.com/gephi/gephi/security/advisories/new). + +Based on your analysis, we'll evaluate if there are any risks for our users. In case we decide to release a patched version, you'll be informed. + +We don't offer any rewards. If you provide a PR or a patch with your report, we'll be happy to include you in the release notes (if you desire so). + +## Gephi Plugins + +[Plugins](https://gephi.org/plugins/#/) are extensions users can install within Gephi to extend its functionalities. Plugins are made available within Gephi via an approval process [detailed here](https://github.com/gephi/gephi-plugins). + +**These measures are in place to avoid malicious code from Plugins:** +- Plugin contributors have to make PRs to the repository we control. Plugins artifacts can only be built from our repository. You can [inspect the codebase](https://github.com/gephi/gephi-plugins/tree/master-forge). +- Plugin artifacts are hosted on GitHub on [our page](https://github.com/gephi/gephi-plugins/tree/gh-pages/plugins) branch. There is full visibility. These are the plugins files downloaded from Gephi. +- Plugin packages (i.e. NBM files) are signed. +- We only accept open-source dependencies in plugins. + +That all said, be aware that Gephi Plugins can pose a risk: +- Plugins can be packaged and distributed as NBMs files. Only the plugins available via Gephi are officially approved. If you manually install (e.g. via a NBM file you have received), you do that at your own risk. +- Some Plugins may require network access. We recommend you to review the source code of the plugins you install. diff --git a/checkstyle-suppressions.xml b/checkstyle-suppressions.xml new file mode 100644 index 0000000000..4af6827c10 --- /dev/null +++ b/checkstyle-suppressions.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/checkstyle.xml b/checkstyle.xml new file mode 100644 index 0000000000..2a89081015 --- /dev/null +++ b/checkstyle.xml @@ -0,0 +1,378 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/flathub/gephi.png b/flathub/gephi.png new file mode 100644 index 0000000000..0ccc65c771 Binary files /dev/null and b/flathub/gephi.png differ diff --git a/flathub/org.gephi.Gephi.desktop b/flathub/org.gephi.Gephi.desktop new file mode 100644 index 0000000000..2dabf7e685 --- /dev/null +++ b/flathub/org.gephi.Gephi.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Version=1.0 +Type=Application +Name=Gephi +Comment=The Open Graph Viz Platform +Exec=gephi %F +Icon=org.gephi.Gephi +Terminal=false +Categories=Science; +StartupNotify=true +StartupWMClass=Gephi \ No newline at end of file diff --git a/flathub/org.gephi.Gephi.metainfo.xml b/flathub/org.gephi.Gephi.metainfo.xml new file mode 100644 index 0000000000..a4d358b5a6 --- /dev/null +++ b/flathub/org.gephi.Gephi.metainfo.xml @@ -0,0 +1,58 @@ + + + org.gephi.Gephi + CC-BY-SA-3.0 + GPL-3.0 + Gephi + The Open Graph Viz Platform + +

+ Gephi is the leading open-source platform for visualizing and manipulating large graphs. +

+

+

    +
  • Fast: Powered by a built-in OpenGL engine, Gephi is able to push the envelope with very large networks. Visualize networks up to a million elements. All actions (e.g. layout, filter, drag) run in real-time.
  • +
  • Simple: Easy to install and get started. An UI that is centered around the visualization. Like Photoshopβ„’ for graphs.
  • +
  • Extensible: Extend Gephi with plug-ins.
  • +
+

+

+ Example datasets can be found on our wiki: https://github.com/gephi/gephi/wiki/Datasets +

+

Localization is available in English, French, Spanish, Japanese, Russian, Brazilian Portuguese, Chinese, Czech, German, Romanian, Greek, Hungarian, Korean, Swedish and Ukrainian.

+
+ org.gephi.Gephi.desktop + + + https://upload.wikimedia.org/wikipedia/commons/2/27/Gephi-07beta-screenshot.png + + + https://dashboard.snapcraft.io/site_media/appmedia/2022/01/preview4.png + + + https://dashboard.snapcraft.io/site_media/appmedia/2022/01/metricsresults.png + + + https://dashboard.snapcraft.io/site_media/appmedia/2022/01/layout2.png + + + https://dashboard.snapcraft.io/site_media/appmedia/2022/01/neighbours.png + + + https://github.com/gephi/gephi/issues + https://gephi.org/users/ + https://gephi.org/ + Mathieu Bastian + contact@gephi.org + + + + + + + + + + + +
\ No newline at end of file diff --git a/maven-version-rules.xml b/maven-version-rules.xml new file mode 100644 index 0000000000..c680bae3c8 --- /dev/null +++ b/maven-version-rules.xml @@ -0,0 +1,46 @@ + + + + + (?i).*alpha.* + + (?i).*beta.* + (?i).*preview.* + + (?i).*[-.]b([0-9]+)? + + (?i).*[-.]rc([0-9]+)? + + (?i).*[-.]m([0-9]+)? + + (?i).*[-.]pr([0-9]+)? + + + (?i)RELEASE.* + + + (?i).*[-.]jre[0-9]+ + + + + + + + + \ No newline at end of file diff --git a/modules/AlgorithmsPlugin/pom.xml b/modules/AlgorithmsPlugin/pom.xml index 53bf9de2fb..90808d16aa 100644 --- a/modules/AlgorithmsPlugin/pom.xml +++ b/modules/AlgorithmsPlugin/pom.xml @@ -4,13 +4,13 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi algorithms-plugin - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm @@ -31,7 +31,7 @@ - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/AlgorithmsPlugin/src/main/java/org/gephi/algorithms/shortestpath/AbstractShortestPathAlgorithm.java b/modules/AlgorithmsPlugin/src/main/java/org/gephi/algorithms/shortestpath/AbstractShortestPathAlgorithm.java index c7b8dd3125..da4dce5530 100644 --- a/modules/AlgorithmsPlugin/src/main/java/org/gephi/algorithms/shortestpath/AbstractShortestPathAlgorithm.java +++ b/modules/AlgorithmsPlugin/src/main/java/org/gephi/algorithms/shortestpath/AbstractShortestPathAlgorithm.java @@ -39,15 +39,16 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.algorithms.shortestpath; import java.awt.Color; import java.util.HashMap; +import java.util.Map; import org.gephi.graph.api.Edge; import org.gephi.graph.api.Node; /** - * * @author Mathieu Bastian */ public abstract class AbstractShortestPathAlgorithm { @@ -59,8 +60,8 @@ public abstract class AbstractShortestPathAlgorithm { public AbstractShortestPathAlgorithm(Node sourceNode) { this.sourceNode = sourceNode; - colors = new HashMap(); - distances = new HashMap(); + colors = new HashMap<>(); + distances = new HashMap<>(); } protected boolean relax(Edge edge) { @@ -86,9 +87,23 @@ protected double edgeWeight(Edge edge) { public abstract void compute(); - public abstract Node getPredecessor(Node node); + public abstract Map getPredecessors(); - public abstract Edge getPredecessorIncoming(Node node); + public final Node getPredecessor(Node node) { + Edge edge = getPredecessors().get(node); + if (edge != null) { + if (edge.getSource() != node) { + return edge.getSource(); + } else { + return edge.getTarget(); + } + } + return null; + } + + public final Edge getPredecessorIncoming(Node node) { + return getPredecessors().get(node); + } public HashMap getDistances() { return distances; diff --git a/modules/AlgorithmsPlugin/src/main/java/org/gephi/algorithms/shortestpath/BellmanFordShortestPathAlgorithm.java b/modules/AlgorithmsPlugin/src/main/java/org/gephi/algorithms/shortestpath/BellmanFordShortestPathAlgorithm.java index 38db347593..bb4459ac9e 100644 --- a/modules/AlgorithmsPlugin/src/main/java/org/gephi/algorithms/shortestpath/BellmanFordShortestPathAlgorithm.java +++ b/modules/AlgorithmsPlugin/src/main/java/org/gephi/algorithms/shortestpath/BellmanFordShortestPathAlgorithm.java @@ -39,15 +39,17 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.algorithms.shortestpath; import java.util.HashMap; +import java.util.Map; import org.gephi.graph.api.DirectedGraph; import org.gephi.graph.api.Edge; +import org.gephi.graph.api.EdgeIterable; import org.gephi.graph.api.Node; /** - * * @author Mathieu Bastian */ public class BellmanFordShortestPathAlgorithm extends AbstractShortestPathAlgorithm { @@ -58,71 +60,54 @@ public class BellmanFordShortestPathAlgorithm extends AbstractShortestPathAlgori public BellmanFordShortestPathAlgorithm(DirectedGraph graph, Node sourceNode) { super(sourceNode); this.graph = graph; - predecessors = new HashMap(); + predecessors = new HashMap<>(); } @Override public void compute() { graph.readLock(); - - //Initialize - int nodeCount = 0; - for (Node node : graph.getNodes()) { - distances.put(node, Double.POSITIVE_INFINITY); - nodeCount++; - } - distances.put(sourceNode, 0d); - - - //Relax edges repeatedly - for (int i = 0; i < nodeCount; i++) { - - boolean relaxed = false; - for (Edge edge : graph.getEdges()) { - Node target = edge.getTarget(); - if (relax(edge)) { - relaxed = true; - predecessors.put(target, edge); - } + try { + //Initialize + int nodeCount = 0; + for (Node node : graph.getNodes()) { + distances.put(node, Double.POSITIVE_INFINITY); + nodeCount++; } - if (!relaxed) { - break; + distances.put(sourceNode, 0d); + + //Relax edges repeatedly + for (int i = 0; i < nodeCount; i++) { + + boolean relaxed = false; + for (Edge edge : graph.getEdges()) { + Node target = edge.getTarget(); + if (relax(edge)) { + relaxed = true; + predecessors.put(target, edge); + } + } + if (!relaxed) { + break; + } } - } - //Check for negative-weight cycles - for (Edge edge : graph.getEdges()) { - - if (distances.get(edge.getSource()) + edgeWeight(edge) < distances.get(edge.getTarget())) { - graph.readUnlock(); - throw new RuntimeException("The Graph contains a negative-weighted cycle"); + //Check for negative-weight cycles + EdgeIterable edgesIterable = graph.getEdges(); + for (Edge edge : edgesIterable) { + if (distances.get(edge.getSource()) + edgeWeight(edge) < distances.get(edge.getTarget())) { + edgesIterable.doBreak(); + throw new RuntimeException("The Graph contains a negative-weighted cycle"); + } } + } finally { + graph.readUnlockAll(); } - - graph.readUnlock(); - } - - @Override - protected double edgeWeight(Edge edge) { - return edge.getWeight(); } @Override - public Node getPredecessor(Node node) { - Edge edge = predecessors.get(node); - if (edge != null) { - if (edge.getSource() != node) { - return edge.getSource(); - } else { - return edge.getTarget(); - } - } - return null; + public Map getPredecessors() { + return predecessors; } - @Override - public Edge getPredecessorIncoming(Node node) { - return predecessors.get(node); - } } diff --git a/modules/AlgorithmsPlugin/src/main/java/org/gephi/algorithms/shortestpath/DijkstraShortestPathAlgorithm.java b/modules/AlgorithmsPlugin/src/main/java/org/gephi/algorithms/shortestpath/DijkstraShortestPathAlgorithm.java index 7bbaa09949..b6d4426c34 100644 --- a/modules/AlgorithmsPlugin/src/main/java/org/gephi/algorithms/shortestpath/DijkstraShortestPathAlgorithm.java +++ b/modules/AlgorithmsPlugin/src/main/java/org/gephi/algorithms/shortestpath/DijkstraShortestPathAlgorithm.java @@ -39,17 +39,18 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.algorithms.shortestpath; import java.util.HashMap; import java.util.HashSet; +import java.util.Map; import java.util.Set; import org.gephi.graph.api.Edge; import org.gephi.graph.api.Graph; import org.gephi.graph.api.Node; /** - * * @author Mathieu Bastian */ public class DijkstraShortestPathAlgorithm extends AbstractShortestPathAlgorithm { @@ -60,58 +61,60 @@ public class DijkstraShortestPathAlgorithm extends AbstractShortestPathAlgorithm public DijkstraShortestPathAlgorithm(Graph graph, Node sourceNode) { super(sourceNode); this.graph = graph; - predecessors = new HashMap(); + predecessors = new HashMap<>(); } @Override public void compute() { graph.readLock(); - Set unsettledNodes = new HashSet(); - Set settledNodes = new HashSet(); + try { + Set unsettledNodes = new HashSet<>(); + Set settledNodes = new HashSet<>(); - //Initialize - for (Node node : graph.getNodes()) { - distances.put(node, Double.POSITIVE_INFINITY); - } - distances.put(sourceNode, 0d); - unsettledNodes.add(sourceNode); - - while (!unsettledNodes.isEmpty()) { - - // find node with smallest distance value - Double minDistance = Double.POSITIVE_INFINITY; - Node minDistanceNode = null; - for (Node k : unsettledNodes) { - Double dist = distances.get(k); - if (minDistanceNode == null) { - minDistanceNode = k; - } + //Initialize + for (Node node : graph.getNodes()) { + distances.put(node, Double.POSITIVE_INFINITY); + } + distances.put(sourceNode, 0d); + unsettledNodes.add(sourceNode); + + while (!unsettledNodes.isEmpty()) { + + // find node with smallest distance value + Double minDistance = Double.POSITIVE_INFINITY; + Node minDistanceNode = null; + for (Node k : unsettledNodes) { + Double dist = distances.get(k); + if (minDistanceNode == null) { + minDistanceNode = k; + } - if (dist.compareTo(minDistance) < 0) { - minDistance = dist; - minDistanceNode = k; + if (dist.compareTo(minDistance) < 0) { + minDistance = dist; + minDistanceNode = k; + } } - } - unsettledNodes.remove(minDistanceNode); - settledNodes.add(minDistanceNode); - - for (Edge edge : graph.getEdges(minDistanceNode)) { - Node neighbor = graph.getOpposite(minDistanceNode, edge); - if (!settledNodes.contains(neighbor)) { - double dist = getShortestDistance(minDistanceNode) + edgeWeight(edge); - if (getShortestDistance(neighbor) > dist) { - - distances.put(neighbor, dist); - predecessors.put(neighbor, edge); - unsettledNodes.add(neighbor); - maxDistance = Math.max(maxDistance, dist); + unsettledNodes.remove(minDistanceNode); + settledNodes.add(minDistanceNode); + + for (Edge edge : graph.getEdges(minDistanceNode)) { + Node neighbor = graph.getOpposite(minDistanceNode, edge); + if (!settledNodes.contains(neighbor)) { + double dist = getShortestDistance(minDistanceNode) + edgeWeight(edge); + if (getShortestDistance(neighbor) > dist) { + + distances.put(neighbor, dist); + predecessors.put(neighbor, edge); + unsettledNodes.add(neighbor); + maxDistance = Math.max(maxDistance, dist); + } } } } + } finally { + graph.readUnlockAll(); } - - graph.readUnlock(); } private double getShortestDistance(Node destination) { @@ -124,25 +127,7 @@ private double getShortestDistance(Node destination) { } @Override - protected double edgeWeight(Edge edge) { - return edge.getWeight(); - } - - @Override - public Node getPredecessor(Node node) { - Edge edge = predecessors.get(node); - if (edge != null) { - if (edge.getSource() != node) { - return edge.getSource(); - } else { - return edge.getTarget(); - } - } - return null; - } - - @Override - public Edge getPredecessorIncoming(Node node) { - return predecessors.get(node); + public Map getPredecessors() { + return predecessors; } } diff --git a/modules/AlgorithmsPlugin/src/main/nbm/manifest.mf b/modules/AlgorithmsPlugin/src/main/nbm/manifest.mf index 4b9cb9d738..e3023f54f9 100644 --- a/modules/AlgorithmsPlugin/src/main/nbm/manifest.mf +++ b/modules/AlgorithmsPlugin/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/algorithms/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi Core +OpenIDE-Module-Name: Algorithms diff --git a/modules/AlgorithmsPlugin/src/main/nbm/module.xml b/modules/AlgorithmsPlugin/src/main/nbm/module.xml deleted file mode 100644 index 710276ba14..0000000000 --- a/modules/AlgorithmsPlugin/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle.properties b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle.properties index fd3ca503b9..c7bae2cf96 100644 --- a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle.properties +++ b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle.properties @@ -1,5 +1,2 @@ -OpenIDE-Module-Display-Category=Gephi Core -OpenIDE-Module-Long-Description=\ - Basic graph theory algorithms -OpenIDE-Module-Name=Algorithms +OpenIDE-Module-Long-Description=Basic graph theory algorithms OpenIDE-Module-Short-Description=Basic graph theory algorithms diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_ar.properties b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_ca.properties b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_ca.properties new file mode 100644 index 0000000000..0ad168e5a1 --- /dev/null +++ b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_ca.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Basic graph theory algorithms +OpenIDE-Module-Short-Description=Basic graph theory algorithms diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_cs.properties b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_cs.properties index bb0f0c8e60..cfd1df86c2 100644 --- a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_cs.properties +++ b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_cs.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-29 20\:31+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=Z\u00e1kladn\u00ed algoritmy teorie graf\u016f - -OpenIDE-Module-Short-Description=Z\u00e1kladn\u00ed algoritmy teorie graf\u016f +OpenIDE-Module-Long-Description=Zαkladnν algoritmy teorie graf\u016f +OpenIDE-Module-Short-Description=Zαkladnν algoritmy teorie graf\u016f diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_de.properties b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_de.properties index f4527f3fb1..94ee704d4d 100644 --- a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_de.properties +++ b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_de.properties @@ -1,10 +1,2 @@ -# German translation for gephi -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the gephi package. -# FIRST AUTHOR , 2011. -# -!=Project-Id-Version\: gephi\nReport-Msgid-Bugs-To\: FULL NAME \nPOT-Creation-Date\: 2010-04-07 13\:16+0200\nPO-Revision-Date\: 2011-03-01 15\:39+0000\nLast-Translator\: FULL NAME \nLanguage-Team\: German \nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nX-Launchpad-Export-Date\: 2011-03-13 04\:46+0000\nX-Generator\: Launchpad (build 12559)\n - -!OpenIDE-Module-Long-Description= - -!OpenIDE-Module-Short-Description= +OpenIDE-Module-Long-Description=Grundlegende graphentheoretische Algorithmen +OpenIDE-Module-Short-Description=Grundlegende graphentheoretische Algorithmen diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_el.properties b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_el.properties new file mode 100644 index 0000000000..a673e6b68e --- /dev/null +++ b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_el.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Long-Description=\u0392\u03B1\u03C3\u03B9\u03BA\u03BF\u03AF \u03B3\u03C1\u03B1\u03C6\u03BF\u03B8\u03B5\u03C9\u03C1\u03B7\u03C4\u03B9\u03BA\u03BF\u03AF \u03B1\u03BB\u03B3\u03CC\u03C1\u03B9\u03B8\u03BC\u03BF\u03B9 +OpenIDE-Module-Short-Description=\u0392\u03B1\u03C3\u03B9\u03BA\u03BF\u03AF \u03B3\u03C1\u03B1\u03C6\u03BF\u03B8\u03B5\u03C9\u03C1\u03B7\u03C4\u03B9\u03BA\u03BF\u03AF \u03B1\u03BB\u03B3\u03CC\u03C1\u03B9\u03B8\u03BC\u03BF\u03B9 diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_es.properties b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_es.properties index a1b018c94a..52756cd69e 100644 --- a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_es.properties +++ b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_es.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:30+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Algoritmos b\u00e1sicos de la teor\u00eda de grafos - -OpenIDE-Module-Short-Description=Algoritmos b\u00e1sicos de la teor\u00eda de grafos +OpenIDE-Module-Long-Description=Algoritmos bαsicos de la teorνa de grafos +OpenIDE-Module-Short-Description=Algoritmos bαsicos de la teorνa de grafos diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_fr.properties b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_fr.properties index a7c89cc5dc..478e7d528a 100644 --- a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_fr.properties +++ b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_fr.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:30+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Algorithmes de base en th\u00e9orie des graphes - -OpenIDE-Module-Short-Description=Algorithmes de base en th\u00e9orie des graphes +OpenIDE-Module-Long-Description=Algorithmes de base en thιorie des graphes +OpenIDE-Module-Short-Description=Algorithmes de base en thιorie des graphes diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_he.properties b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_he.properties new file mode 100644 index 0000000000..b2c04dc9e7 --- /dev/null +++ b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_he.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=\u05d0\u05dc\u05d2\u05d5\u05e8\u05d9\u05ea\u05de\u05d9\u05dd \u05d1\u05e1\u05d9\u05e1\u05d9\u05dd \u05d1\u05ea\u05d5\u05e8\u05ea \u05d4\u05d2\u05e8\u05e4\u05d9\u05dd +OpenIDE-Module-Short-Description=\u05d0\u05dc\u05d2\u05d5\u05e8\u05d9\u05ea\u05de\u05d9\u05dd \u05d1\u05e1\u05d9\u05e1\u05d9\u05dd \u05d1\u05ea\u05d5\u05e8\u05ea \u05d4\u05d2\u05e8\u05e4\u05d9\u05dd diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_hu.properties b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_hu.properties new file mode 100644 index 0000000000..22bfed9537 --- /dev/null +++ b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_hu.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Short-Description=Alapvet\u0151 gr\u00E1felm\u00E9leti algoritmusok +OpenIDE-Module-Long-Description=Alapvet\u0151 gr\u00E1felm\u00E9leti algoritmusok diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_it.properties b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_it.properties new file mode 100644 index 0000000000..808b470e0f --- /dev/null +++ b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_it.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Algoritmi di base sulla teoria dei grafi +OpenIDE-Module-Short-Description=Algoritmi di base sulla teoria dei grafi diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_ja.properties b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_ja.properties index df36d50be0..3faa83fe29 100644 --- a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_ja.properties +++ b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_ja.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-11 00\:30+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u57fa\u790e\u30b0\u30e9\u30d5\u7406\u8ad6\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0 - -OpenIDE-Module-Short-Description=\u57fa\u790e\u30b0\u30e9\u30d5\u7406\u8ad6\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0 +OpenIDE-Module-Long-Description=\u57fa\u790e\u30b0\u30e9\u30d5\u7406\u8ad6\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0 +OpenIDE-Module-Short-Description=\u57fa\u790e\u30b0\u30e9\u30d5\u7406\u8ad6\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0 diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_ko.properties b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_ko.properties new file mode 100644 index 0000000000..3ea290a0a0 --- /dev/null +++ b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_ko.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Long-Description=\uAE30\uBCF8 \uADF8\uB798\uD504 \uC774\uB860 \uC54C\uACE0\uB9AC\uC998 +OpenIDE-Module-Short-Description=\uAE30\uBCF8 \uADF8\uB798\uD504 \uC774\uB860 \uC54C\uACE0\uB9AC\uC998 diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_nb_NO.properties b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_nb_NO.properties new file mode 100644 index 0000000000..a12d2347c8 --- /dev/null +++ b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_nb_NO.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Long-Description=Algoritmer for grunnleggende grafteori +OpenIDE-Module-Short-Description=Algoritmer for grunnleggende grafteori diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_nl.properties b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_nl.properties new file mode 100644 index 0000000000..0ad168e5a1 --- /dev/null +++ b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_nl.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Basic graph theory algorithms +OpenIDE-Module-Short-Description=Basic graph theory algorithms diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_oc.properties b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_oc.properties index e9370845f0..a9f79325c8 100644 --- a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_oc.properties +++ b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_oc.properties @@ -1,10 +1,2 @@ -# Occitan (post 1500) translation for gephi -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the gephi package. -# FIRST AUTHOR , 2010. -# -!=Project-Id-Version\: gephi\nReport-Msgid-Bugs-To\: FULL NAME \nPOT-Creation-Date\: 2010-04-07 13\:16+0200\nPO-Revision-Date\: 2010-10-21 13\:36+0000\nLast-Translator\: C\u00e9dric VALMARY (Tot en \u00f2c) \nLanguage-Team\: Occitan (post 1500) \nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nX-Launchpad-Export-Date\: 2011-03-13 04\:46+0000\nX-Generator\: Launchpad (build 12559)\n - -OpenIDE-Module-Long-Description=Algoritmes de basa en teoria dels grafes - -OpenIDE-Module-Short-Description=Algoritmes de basa en teoria dels grafes +OpenIDE-Module-Long-Description=Algoritmes de basa en teoria dels grafes +OpenIDE-Module-Short-Description=Algoritmes de basa en teoria dels grafes diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_pl.properties b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_pl.properties new file mode 100644 index 0000000000..e9e2efa8ed --- /dev/null +++ b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_pl.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Long-Description=Podstawowe algorytmy teorii graf\u00F3w +OpenIDE-Module-Short-Description=Podstawowe algorytmy teorii graf\u00F3w diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_pt.properties b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_pt.properties new file mode 100644 index 0000000000..9cf88419be --- /dev/null +++ b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_pt.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Algoritmos b\u00E1sicos de teoria de grafos +OpenIDE-Module-Short-Description=Algoritmos b\u00E1sicos de teoria de grafos diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_pt_BR.properties b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_pt_BR.properties index 6e1af6e154..d2369bb3eb 100644 --- a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_pt_BR.properties +++ b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_pt_BR.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 23\:22+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Algoritmos b\u00e1sicos de teoria de grafos - -OpenIDE-Module-Short-Description=Algoritmos b\u00e1sicos de teoria de grafos +OpenIDE-Module-Long-Description=Algoritmos bαsicos de teoria de grafos +OpenIDE-Module-Short-Description=Algoritmos bαsicos de teoria de grafos diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_ro.properties b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_ro.properties new file mode 100644 index 0000000000..5903a932fc --- /dev/null +++ b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_ro.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Long-Description=Algoritmi de baz\u0103 din teoria grafurilor +OpenIDE-Module-Short-Description=Algoritmi de baz\u0103 din teoria grafurilor diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_ru.properties b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_ru.properties index d481fb7cee..353004c428 100644 --- a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_ru.properties +++ b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_ru.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:30+0000\nLast-Translator\: gephi \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=\u0411\u0430\u0437\u043e\u0432\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0442\u0435\u043e\u0440\u0438\u0438 \u0433\u0440\u0430\u0444\u043e\u0432 - -OpenIDE-Module-Short-Description=\u0411\u0430\u0437\u043e\u0432\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0442\u0435\u043e\u0440\u0438\u0438 \u0433\u0440\u0430\u0444\u043e\u0432 +OpenIDE-Module-Long-Description=\u0411\u0430\u0437\u043e\u0432\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0442\u0435\u043e\u0440\u0438\u0438 \u0433\u0440\u0430\u0444\u043e\u0432 +OpenIDE-Module-Short-Description=\u0411\u0430\u0437\u043e\u0432\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0442\u0435\u043e\u0440\u0438\u0438 \u0433\u0440\u0430\u0444\u043e\u0432 diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_th.properties b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_th.properties new file mode 100644 index 0000000000..05179733e1 --- /dev/null +++ b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_th.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=\u0E2D\u0E31\u0E25\u0E01\u0E2D\u0E23\u0E34\u0E17\u0E36\u0E21\u0E17\u0E24\u0E29\u0E0E\u0E35\u0E01\u0E23\u0E32\u0E1F\u0E40\u0E1A\u0E37\u0E49\u0E2D\u0E07\u0E15\u0E49\u0E19 +OpenIDE-Module-Short-Description=\u0E2D\u0E31\u0E25\u0E01\u0E2D\u0E23\u0E34\u0E17\u0E36\u0E21\u0E17\u0E24\u0E29\u0E0E\u0E35\u0E01\u0E23\u0E32\u0E1F\u0E40\u0E1A\u0E37\u0E49\u0E2D\u0E07\u0E15\u0E49\u0E19 diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_tr.properties b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_tr.properties new file mode 100644 index 0000000000..7a09775e26 --- /dev/null +++ b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_tr.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Temel ηizge kuram\u0131 algoritmalar\u0131 +OpenIDE-Module-Short-Description=Temel ηizge kuram\u0131 algoritmalar\u0131 diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_uk.properties b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_uk.properties new file mode 100644 index 0000000000..25e24fad7b --- /dev/null +++ b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_uk.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=\u0411\u0430\u0437\u043E\u0432\u0456 \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C\u0438 \u0442\u0435\u043E\u0440\u0456\u0457 \u0433\u0440\u0430\u0444\u0456\u0432 +OpenIDE-Module-Short-Description=\u0411\u0430\u0437\u043E\u0432\u0456 \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C\u0438 \u0442\u0435\u043E\u0440\u0456\u0457 \u0433\u0440\u0430\u0444\u0456\u0432 diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_zh_CN.properties b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_zh_CN.properties index 1655e8fbaa..11dc0e13b1 100644 --- a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_zh_CN.properties +++ b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_zh_CN.properties @@ -1,10 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:21+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u57fa\u672c\u7684\u56fe\u8bba\u7b97\u6cd5 - -OpenIDE-Module-Short-Description=\u57fa\u672c\u7684\u56fe\u8bba\u7b97\u6cd5 +OpenIDE-Module-Long-Description=\u57fa\u672c\u7684\u56fe\u8bba\u7b97\u6cd5 +OpenIDE-Module-Short-Description=\u57fa\u672c\u7684\u56fe\u8bba\u7b97\u6cd5 diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_zh_TW.properties b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_zh_TW.properties new file mode 100644 index 0000000000..edac71fde2 --- /dev/null +++ b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/Bundle_zh_TW.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=\u57fa\u790e\u5716\u8ad6\u6f14\u7b97\u6cd5 +OpenIDE-Module-Short-Description=\u57fa\u790e\u5716\u8ad6\u6f14\u7b97\u6cd5 diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/cs.po b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/cs.po deleted file mode 100644 index ff6cfc77dd..0000000000 --- a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/cs.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-29 20:31+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ZΓ‘kladnΓ­ algoritmy teorie grafΕ―" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ZΓ‘kladnΓ­ algoritmy teorie grafΕ―" diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/es.po b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/es.po deleted file mode 100644 index d4ed14b959..0000000000 --- a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/es.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:30+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Algoritmos bΓ‘sicos de la teorΓ­a de grafos" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Algoritmos bΓ‘sicos de la teorΓ­a de grafos" diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/fr.po b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/fr.po deleted file mode 100644 index 9305337554..0000000000 --- a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/fr.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:30+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Algorithmes de base en thΓ©orie des graphes" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Algorithmes de base en thΓ©orie des graphes" diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/ja.po b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/ja.po deleted file mode 100644 index 612ea1bede..0000000000 --- a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-11 00:30+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "εŸΊη€Žγ‚°γƒ©γƒ•η†θ«–γ‚’γƒ«γ‚΄γƒͺγ‚Ίγƒ " - -msgid "OpenIDE-Module-Short-Description" -msgstr "εŸΊη€Žγ‚°γƒ©γƒ•η†θ«–γ‚’γƒ«γ‚΄γƒͺγ‚Ίγƒ " diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/org-gephi-algorithms.pot b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/org-gephi-algorithms.pot deleted file mode 100644 index 5de8c51514..0000000000 --- a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/org-gephi-algorithms.pot +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Basic graph theory algorithms" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Basic graph theory algorithms" diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/pt_BR.po b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/pt_BR.po deleted file mode 100644 index a1d7986682..0000000000 --- a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/pt_BR.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 23:22+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Algoritmos bΓ‘sicos de teoria de grafos " - -msgid "OpenIDE-Module-Short-Description" -msgstr "Algoritmos bΓ‘sicos de teoria de grafos " diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/ru.po b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/ru.po deleted file mode 100644 index c96c9c1f6d..0000000000 --- a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/ru.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:30+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Π³Ρ€Π°Ρ„ΠΎΠ²" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Π‘Π°Π·ΠΎΠ²Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ Ρ‚Π΅ΠΎΡ€ΠΈΠΈ Π³Ρ€Π°Ρ„ΠΎΠ²" diff --git a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/zh_CN.po b/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/zh_CN.po deleted file mode 100644 index 0970dddd0b..0000000000 --- a/modules/AlgorithmsPlugin/src/main/resources/org/gephi/algorithms/zh_CN.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:21+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "εŸΊζœ¬ηš„ε›ΎθΊη—法" - -msgid "OpenIDE-Module-Short-Description" -msgstr "εŸΊζœ¬ηš„ε›ΎθΊη—法" diff --git a/modules/AppearanceAPI/pom.xml b/modules/AppearanceAPI/pom.xml index 53ebbc3886..e92d38e317 100644 --- a/modules/AppearanceAPI/pom.xml +++ b/modules/AppearanceAPI/pom.xml @@ -4,22 +4,18 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi appearance-api - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm AppearanceAPI - - ${project.groupId} - dynamic-api - ${project.groupId} graph-api @@ -40,12 +36,31 @@ org.netbeans.api org-openide-util + + + + org.mockito + mockito-core + test + + + ${project.groupId} + graph-api + test + test-jar + + + ${project.groupId} + project-api + test-jar + test + - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/AppearanceControllerImpl.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/AppearanceControllerImpl.java index fbb1224b96..d540dca19a 100644 --- a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/AppearanceControllerImpl.java +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/AppearanceControllerImpl.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance; import org.gephi.appearance.api.AppearanceController; @@ -47,110 +48,99 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.appearance.spi.TransformerUI; import org.gephi.graph.api.Element; import org.gephi.graph.api.ElementIterable; +import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphModel; -import org.gephi.project.api.ProjectController; +import org.gephi.graph.api.Node; import org.gephi.project.api.Workspace; -import org.gephi.project.api.WorkspaceListener; +import org.gephi.project.spi.Controller; import org.openide.util.Lookup; import org.openide.util.lookup.ServiceProvider; +import org.openide.util.lookup.ServiceProviders; /** - * * @author mbastian */ -@ServiceProvider(service = AppearanceController.class) -public class AppearanceControllerImpl implements AppearanceController { - - private AppearanceModelImpl model; +@ServiceProviders({ + @ServiceProvider(service = AppearanceController.class), + @ServiceProvider(service = Controller.class)}) +public class AppearanceControllerImpl implements AppearanceController, Controller { public AppearanceControllerImpl() { - //Workspace events - ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); - pc.addWorkspaceListener(new WorkspaceListener() { - @Override - public void initialize(Workspace workspace) { - } - - @Override - public void select(Workspace workspace) { - model = workspace.getLookup().lookup(AppearanceModelImpl.class); - if (model == null) { - model = new AppearanceModelImpl(workspace); - workspace.add(model); - } -// model.select(); - } - - @Override - public void unselect(Workspace workspace) { -// model.unselect(); - model = null; - } - - @Override - public void close(Workspace workspace) { - } - - @Override - public void disable() { - model = null; - } - }); + } - if (pc.getCurrentWorkspace() != null) { - model = pc.getCurrentWorkspace().getLookup().lookup(AppearanceModelImpl.class); - if (model == null) { - model = new AppearanceModelImpl(pc.getCurrentWorkspace()); - pc.getCurrentWorkspace().add(model); - } - } + @Override + public AppearanceModelImpl newModel(Workspace workspace) { + return new AppearanceModelImpl(workspace); } @Override public void transform(Function function) { - if (model != null) { - GraphModel graphModel = model.getGraphModel(); - ElementIterable iterable; - if (function.getTransformer().isNode()) { - iterable = graphModel.getGraphVisible().getNodes(); + if (!function.isValid()) { + return; + } + GraphModel graphModel = function.getGraph().getModel(); + Graph graph = graphModel.getGraphVisible(); + ElementIterable iterable; + if (function.getElementClass().equals(Node.class)) { + iterable = graph.getNodes(); + } else { + iterable = graph.getEdges(); + } + try { + function.transformAll(iterable); + } catch (Exception e) { + iterable.doBreak(); + if (e instanceof RuntimeException) { + throw (RuntimeException) e; } else { - iterable = graphModel.getGraphVisible().getEdges(); - } - for (Element element : iterable) { - function.transform(element); + throw new RuntimeException(e); } } } + @Override + public Class getModelClass() { + return AppearanceModelImpl.class; + } + @Override public AppearanceModelImpl getModel() { - return model; + return Controller.super.getModel(); } @Override public AppearanceModelImpl getModel(Workspace workspace) { - AppearanceModelImpl m = workspace.getLookup().lookup(AppearanceModelImpl.class); - if (m == null) { - m = new AppearanceModelImpl(workspace); - workspace.add(m); - } - return m; + return Controller.super.getModel(workspace); } @Override public Transformer getTransformer(TransformerUI ui) { Class transformerClass = ui.getTransformerClass(); Transformer transformer = Lookup.getDefault().lookup(transformerClass); - if (transformer != null) { - return transformer; + return transformer; + } + + @Override + public void setUseRankingLocalScale(boolean useLocalScale) { + AppearanceModelImpl model = getModel(); + if (model != null) { + model.setRankingLocalScale(useLocalScale); + } + } + + @Override + public void setUsePartitionLocalScale(boolean useLocalScale) { + AppearanceModelImpl model = getModel(); + if (model != null) { + model.setPartitionLocalScale(useLocalScale); } - return null; } @Override - public void setUseLocalScale(boolean useLocalScale) { + public void setTransformNullValues(boolean transformNullValues) { + AppearanceModelImpl model = getModel(); if (model != null) { - model.setLocalScale(useLocalScale); + model.setTransformNullValues(transformNullValues); } } } diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/AppearanceModelImpl.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/AppearanceModelImpl.java index 8e7b24ccb0..c0c5dcf4ac 100644 --- a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/AppearanceModelImpl.java +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/AppearanceModelImpl.java @@ -39,58 +39,227 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance; import java.util.ArrayList; import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; import java.util.List; import java.util.Map; -import java.util.Set; +import java.util.WeakHashMap; +import java.util.stream.Collectors; import org.gephi.appearance.api.AppearanceModel; -import org.gephi.appearance.api.AttributeFunction; import org.gephi.appearance.api.Function; -import org.gephi.appearance.api.Interpolator; +import org.gephi.appearance.api.Partition; +import org.gephi.appearance.api.Ranking; import org.gephi.appearance.spi.PartitionTransformer; import org.gephi.appearance.spi.RankingTransformer; import org.gephi.appearance.spi.SimpleTransformer; import org.gephi.appearance.spi.Transformer; import org.gephi.appearance.spi.TransformerUI; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.attribute.api.AttributeUtils; -import org.gephi.attribute.api.Column; -import org.gephi.attribute.api.Index; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphController; import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.Table; import org.gephi.project.api.Workspace; +import org.gephi.project.spi.Model; import org.openide.util.Lookup; +import org.openide.util.NbBundle; +import org.openide.util.NbPreferences; /** - * * @author mbastian */ -public class AppearanceModelImpl implements AppearanceModel { +public class AppearanceModelImpl implements AppearanceModel, Model { private final Workspace workspace; - private final AttributeModel attributeModel; private final GraphModel graphModel; - private final Interpolator defaultInterpolator; - private boolean localScale = false; - //Functions - private final Object functionLock; - private List nodeFunctions; - private List edgeFunctions; + // Transformers + private final List nodeTransformers; + private final List edgeTransformers; + // Transformer UIS + private final Map transformerUIs; + // Ranking and partitions + private final DegreeRankingImpl degreeRanking; + private final InDegreeRankingImpl inDegreeRanking; + private final OutDegreeRankingImpl outDegreeRanking; + private final EdgeWeightRankingImpl edgeWeightRanking; + private final EdgeTypePartitionImpl edgeTypePartition; + private final Map nodeAttributeRankings; + private final Map edgeAttributeRankings; + private final Map nodeAttributePartitions; + private final Map edgeAttributePartitions; + // Static functions + private final List nodeStaticFunctions; + private final List edgeStaticFunctions; + // LocalScale (if true, uses visible graph) + private boolean rankingLocalScale = NbPreferences.forModule(AppearanceModel.class) + .getBoolean("Appearance.rankingLocalScale", false); + private boolean partitionLocalScale = NbPreferences.forModule(AppearanceModel.class) + .getBoolean("Appearance.partitionLocalScale", false); + // Null values settings + private boolean transformNullValues = NbPreferences.forModule(AppearanceModel.class) + .getBoolean("Appearance.transformNullValues", false); public AppearanceModelImpl(Workspace workspace) { this.workspace = workspace; this.graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(workspace); - this.attributeModel = Lookup.getDefault().lookup(GraphController.class).getAttributeModel(workspace); - this.defaultInterpolator = Interpolator.LINEAR; - this.functionLock = new Object(); + this.transformerUIs = initTransformerUIs(); + this.nodeTransformers = initNodeTransformers(); + this.edgeTransformers = initEdgeTransformers(); + + degreeRanking = new DegreeRankingImpl(graphModel.defaultColumns().degree()); + inDegreeRanking = new InDegreeRankingImpl(graphModel.defaultColumns().inDegree()); + outDegreeRanking = new OutDegreeRankingImpl(graphModel.defaultColumns().outDegree()); + edgeWeightRanking = new EdgeWeightRankingImpl(); + edgeTypePartition = new EdgeTypePartitionImpl(graphModel.defaultColumns().edgeType(), + graphModel.getConfiguration().getEdgeLabelType()); + nodeAttributeRankings = new WeakHashMap<>(); + edgeAttributeRankings = new WeakHashMap<>(); + nodeAttributePartitions = new WeakHashMap<>(); + edgeAttributePartitions = new WeakHashMap<>(); + + // Static functions + nodeStaticFunctions = getNodeSimpleFunctions(); + nodeStaticFunctions.addAll(getNodeRankingFunctions()); + edgeStaticFunctions = getEdgeSimpleFunctions(); + edgeStaticFunctions.addAll(getRankingAndPartitionEdgeFunctions()); - //Functions - refreshFunctions(); + //Init + initAttributeRankingsAndPartitions(); + } + + protected Graph getRankingGraph() { + if (rankingLocalScale) { + return graphModel.getGraphVisible(); + } else { + return graphModel.getGraph(); + } + } + + protected Graph getPartitionGraph() { + if (partitionLocalScale) { + return graphModel.getGraphVisible(); + } else { + return graphModel.getGraph(); + } + } + + @Override + public Function[] getNodeFunctions() { + List res = new ArrayList<>(); + res.addAll(nodeStaticFunctions); + res.addAll(getAttributeFunctions(graphModel.getNodeTable())); + return res.stream().filter(FunctionImpl::isValid).toArray(Function[]::new); + } + + @Override + public Function[] getEdgeFunctions() { + List res = new ArrayList<>(); + res.addAll(edgeStaticFunctions); + res.addAll(getAttributeFunctions(graphModel.getEdgeTable())); + return res.stream().filter(FunctionImpl::isValid).toArray(Function[]::new); + } + + @Override + public Function getNodeFunction(Column column, Class transformer) { + return getFunction(column, transformer); + } + + @Override + public Function getEdgeFunction(Column column, Class transformer) { + return getFunction(column, transformer); + } + + private Function getFunction(Column column, Class transformer) { + if (column.isProperty()) { + GraphFunction graphFunction = convertColumnToGraphFunction(column); + List funcs = + column.getTable().isNodeTable() ? getNodeRankingFunctions() : getRankingAndPartitionEdgeFunctions(); + return funcs.stream() + .filter(f -> f.getTransformer().getClass().equals(transformer) && + f.getGraphFunction().equals(graphFunction)) + .filter(FunctionImpl::isValid) + .findFirst().orElse(null); + } else { + return getAttributeFunctions(column.getTable()).stream() + .filter(f -> f.getTransformer().getClass().equals(transformer) && f.getColumn().equals(column)) + .filter(FunctionImpl::isValid) + .findFirst().orElse(null); + } + } + + @Override + public Partition getNodePartition(Column column) { + return initAttributePartition(column); + } + + @Override + public Partition getEdgePartition(Column column) { + return initAttributePartition(column); + } + + protected RankingImpl[] getNodeRankings() { + List rankings = new ArrayList<>(); + rankings.add(degreeRanking); + rankings.add(inDegreeRanking); + rankings.add(outDegreeRanking); + rankings.addAll(nodeAttributeRankings.values()); + return rankings.toArray(new RankingImpl[0]); + } + + protected RankingImpl[] getEdgeRankings() { + List rankings = new ArrayList<>(); + rankings.add(edgeWeightRanking); + rankings.addAll(edgeAttributeRankings.values()); + return rankings.toArray(new RankingImpl[0]); + } + + protected PartitionImpl[] getNodePartitions() { + return nodeAttributePartitions.values().toArray(new AttributePartitionImpl[0]); + } + + protected PartitionImpl[] getEdgePartitions() { + List partitions = new ArrayList<>(); + partitions.add(edgeTypePartition); + partitions.addAll(edgeAttributePartitions.values()); + return partitions.toArray(new PartitionImpl[0]); + } + + protected RankingImpl getDegreeRanking() { + return degreeRanking; + } + + protected Ranking getInDegreeRanking() { + return inDegreeRanking; + } + + protected Ranking getOutDegreeRanking() { + return outDegreeRanking; + } + + protected Ranking getEdgeWeightRanking() { + return edgeWeightRanking; + } + + protected Partition getEdgeTypePartition() { + return edgeTypePartition; + } + + protected RankingImpl getNodeRanking(Column column) { + return nodeAttributeRankings.get(column); + } + + protected Ranking getEdgeRanking(Column column) { + return edgeAttributeRankings.get(column); + } + + // Only for testing + protected int countNodeAttributeRanking() { + return nodeAttributeRankings.size(); } @Override @@ -99,173 +268,262 @@ public Workspace getWorkspace() { } @Override - public boolean isLocalScale() { - return localScale; + public boolean isRankingLocalScale() { + return rankingLocalScale; + } + + public void setRankingLocalScale(boolean localScale) { + this.rankingLocalScale = localScale; } @Override - public Function[] getNodeFunctions() { - refreshFunctions(); - return nodeFunctions.toArray(new Function[0]); + public boolean isPartitionLocalScale() { + return partitionLocalScale; + } + + public void setPartitionLocalScale(boolean localScale) { + this.partitionLocalScale = localScale; } @Override - public Function[] getEdgeFunctions() { - refreshFunctions(); - return edgeFunctions.toArray(new Function[0]); + public boolean isTransformNullValues() { + return transformNullValues; } - private void refreshFunctions() { - synchronized (functionLock) { - //Index UIs - Map uis = new HashMap(); + public void setTransformNullValues(boolean transformNullValues) { + this.transformNullValues = transformNullValues; + } - for (TransformerUI ui : Lookup.getDefault().lookupAll(TransformerUI.class)) { - Class transformerClass = ui.getTransformerClass(); - if (transformerClass == null) { - throw new NullPointerException("Transformer class can' be null"); - } - if (uis.containsKey(transformerClass)) { - throw new RuntimeException("A Transformer can't be attach to multiple TransformerUI"); - } - uis.put(transformerClass, ui); - } + private List getNodeRankingFunctions() { + return nodeTransformers.stream().filter(t -> t instanceof RankingTransformer) + .flatMap(t -> getDegreeFunctions(t).stream()).collect(Collectors.toList()); + } + + private void cleanAttributeRankingsAndPartitions(Table table) { + if (table.isNodeTable()) { + nodeAttributeRankings.keySet().removeIf(c -> !c.exists()); + nodeAttributePartitions.keySet().removeIf(c -> !c.exists()); + } else { + edgeAttributeRankings.keySet().removeIf(c -> !c.exists()); + edgeAttributePartitions.keySet().removeIf(c -> !c.exists()); + } + } - //Index existing funcs - Set attributeNodeFunctions = new HashSet(); - Set attributeEdgeFunctions = new HashSet(); - if (nodeFunctions != null) { - for (Function f : nodeFunctions) { - if (f.isAttribute()) { - attributeNodeFunctions.add(((AttributeFunction) f).getColumn()); + private List getAttributeFunctions(Table table) { + cleanAttributeRankingsAndPartitions(table); + + List res = new ArrayList<>(); + List transformers = table.isNodeTable() ? nodeTransformers : edgeTransformers; + for (Column column : table) { + if (!column.isProperty()) { + transformers.forEach(t -> { + if ((column.isNumber() && t instanceof RankingTransformer) || t instanceof PartitionTransformer) { + res.addAll(getAttributeFunctions(column, t)); } - } + }); + } else if (column.isDynamic() && !column.isDynamicAttribute()) { + transformers.stream().filter(t -> t instanceof RankingTransformer).forEach(t -> { + res.addAll(getTimesetFunctions(column, t)); + }); } - if (edgeFunctions != null) { - for (Function f : edgeFunctions) { - if (f.isAttribute()) { - attributeEdgeFunctions.add(((AttributeFunction) f).getColumn()); - } - } + } + return res; + } + + private List getTimesetFunctions(Column column, Transformer transformer) { + List res = new ArrayList<>(); + if (transformer instanceof RankingTransformer && column.isDynamic() && !column.isDynamicAttribute()) { + if (transformer.isNode() && column.getTable().isNodeTable()) { + RankingImpl ranking = + nodeAttributeRankings.computeIfAbsent(column, k -> new TimesetRankingImpl(column)); + res.add(new AttributeFunctionImpl(this, getId("node", transformer, column), column, + transformer, getTransformerUI(transformer), ranking)); + } + if (transformer.isEdge() && column.getTable().isEdgeTable()) { + RankingImpl ranking = + edgeAttributeRankings.computeIfAbsent(column, k -> new TimesetRankingImpl(column)); + res.add(new AttributeFunctionImpl(this, getId("edge", transformer, column), column, + transformer, getTransformerUI(transformer), ranking)); } + } + return res; + } - //Simple transformers - if (nodeFunctions == null) { - nodeFunctions = new ArrayList(); - edgeFunctions = new ArrayList(); - - for (Transformer transformer : Lookup.getDefault().lookupAll(Transformer.class)) { - if (transformer instanceof SimpleTransformer) { - if (transformer.isNode()) { - nodeFunctions.add(new FunctionImpl(this, null, transformer, uis.get(transformer.getClass()))); - } - if (transformer.isEdge()) { - edgeFunctions.add(new FunctionImpl(this, null, transformer, uis.get(transformer.getClass()))); - } - } - } + private List getAttributeFunctions(Column column, Transformer transformer) { + List res = new ArrayList<>(); + if (transformer instanceof RankingTransformer && column.isNumber()) { + if (transformer.isNode() && column.getTable().isNodeTable()) { + RankingImpl ranking = + nodeAttributeRankings.computeIfAbsent(column, k -> new AttributeRankingImpl(column)); + res.add(new AttributeFunctionImpl(this, getId("node", transformer, column), column, + transformer, getTransformerUI(transformer), ranking)); } - //Atts - Set foundNodeColumns = new HashSet(); - Set foundEdgeColumns = new HashSet(); - for (Transformer transformer : Lookup.getDefault().lookupAll(Transformer.class)) { - if (transformer instanceof RankingTransformer || transformer instanceof PartitionTransformer) { - if (transformer.isNode()) { - for (Column col : attributeModel.getNodeTable()) { - if (!col.isProperty()) { - Index index = localScale ? graphModel.getNodeIndex(graphModel.getVisibleView()) : graphModel.getNodeIndex(); - if (transformer instanceof RankingTransformer && isRanking(col) && !attributeNodeFunctions.contains(col)) { - nodeFunctions.add(new FunctionImpl(this, col, transformer, uis.get(transformer.getClass()), new RankingImpl(col, index, defaultInterpolator))); - } else if (transformer instanceof PartitionTransformer && isPartition(col) && !attributeNodeFunctions.contains(col)) { - nodeFunctions.add(new FunctionImpl(this, col, transformer, uis.get(transformer.getClass()), new PartitionImpl(col, index))); - } - foundNodeColumns.add(col); - } - } - } - if (transformer.isEdge()) { - for (Column col : attributeModel.getEdgeTable()) { - if (!col.isProperty() && col.isNumber()) { - Index index = localScale ? graphModel.getEdgeIndex(graphModel.getVisibleView()) : graphModel.getEdgeIndex(); - if (transformer instanceof RankingTransformer && isRanking(col) && !attributeEdgeFunctions.contains(col)) { - edgeFunctions.add(new FunctionImpl(this, col, transformer, uis.get(transformer.getClass()), new RankingImpl(col, index, defaultInterpolator))); - } else if (transformer instanceof PartitionTransformer && isPartition(col) && !attributeEdgeFunctions.contains(col)) { - edgeFunctions.add(new FunctionImpl(this, col, transformer, uis.get(transformer.getClass()), new PartitionImpl(col, index))); - } - foundEdgeColumns.add(col); - } - } - } - } + if (transformer.isEdge() && column.getTable().isEdgeTable()) { + RankingImpl ranking = + edgeAttributeRankings.computeIfAbsent(column, k -> new AttributeRankingImpl(column)); + res.add(new AttributeFunctionImpl(this, getId("edge", transformer, column), column, + transformer, getTransformerUI(transformer), ranking)); } - attributeNodeFunctions.removeAll(foundNodeColumns); - attributeEdgeFunctions.removeAll(foundEdgeColumns); - - //Remove - for (Iterator nodeItr = nodeFunctions.iterator(); nodeItr.hasNext();) { - Function f = nodeItr.next(); - if (f.isAttribute() && attributeNodeFunctions.contains(((AttributeFunction) f).getColumn())) { - nodeItr.remove(); - } + } + if (transformer instanceof PartitionTransformer) { + if (transformer.isNode() && column.getTable().isNodeTable()) { + PartitionImpl partition = + nodeAttributePartitions.computeIfAbsent(column, k -> new AttributePartitionImpl(column)); + res.add(new AttributeFunctionImpl(this, getId("node", transformer, column), column, transformer, + getTransformerUI(transformer), partition)); } - for (Iterator edgeItr = edgeFunctions.iterator(); edgeItr.hasNext();) { - Function f = edgeItr.next(); - if (f.isAttribute() && attributeEdgeFunctions.contains(((AttributeFunction) f).getColumn())) { - edgeItr.remove(); - } + if (transformer.isEdge() && column.getTable().isEdgeTable()) { + PartitionImpl partition = + edgeAttributePartitions.computeIfAbsent(column, k -> new AttributePartitionImpl(column)); + res.add(new AttributeFunctionImpl(this, getId("edge", transformer, column), column, transformer, + getTransformerUI(transformer), partition)); } } + return res; } - private boolean isPartition(Column column) { - Index index; - if (AttributeUtils.isNodeColumn(column)) { - index = localScale ? graphModel.getNodeIndex(graphModel.getVisibleView()) : graphModel.getNodeIndex(); - } else { - index = localScale ? graphModel.getEdgeIndex(graphModel.getVisibleView()) : graphModel.getEdgeIndex(); - } - int valueCount = index.countValues(column); - int elementCount = index.countElements(column); - double ratio = valueCount / (double) elementCount; - if (column.isNumber()) { - Class columnTypeClass = column.getTypeClass(); - if (columnTypeClass.equals(Integer.class)) { - if (ratio < 0.6) { - return true; + protected void initAttributeRankingsAndPartitions() { + for (Column column : graphModel.getNodeTable()) { + if (!column.isProperty()) { + if (column.isNumber()) { + nodeAttributeRankings.put(column, new AttributeRankingImpl(column)); } - } else { - if (ratio < 0.1) { - return true; + nodeAttributePartitions.put(column, new AttributePartitionImpl(column)); + } + } + for (Column column : graphModel.getEdgeTable()) { + if (!column.isProperty()) { + if (column.isNumber()) { + edgeAttributeRankings.put(column, new AttributeRankingImpl(column)); } + edgeAttributePartitions.put(column, new AttributePartitionImpl(column)); } - } else { - if (ratio < 0.8) { - return true; + } + } + + private AttributePartitionImpl initAttributePartition(Column column) { + if (!column.isProperty()) { + if (column.getTable().isNodeTable()) { + return nodeAttributePartitions.computeIfAbsent(column, k -> new AttributePartitionImpl(column)); + } else if (column.getTable().isEdgeTable()) { + return edgeAttributePartitions.computeIfAbsent(column, k -> new AttributePartitionImpl(column)); } } - return false; + return null; + } + + private List getNodeSimpleFunctions() { + return Lookup.getDefault().lookupAll(Transformer.class).stream() + .filter(t -> t instanceof SimpleTransformer && t.isNode()) + .map(t -> new SimpleFunctionImpl(this, getId("node", t, "simple"), Node.class, t, getTransformerUI(t))) + .collect(Collectors.toList()); + } + + private List getEdgeSimpleFunctions() { + return Lookup.getDefault().lookupAll(Transformer.class).stream() + .filter(t -> t instanceof SimpleTransformer && t.isEdge()) + .map(t -> new SimpleFunctionImpl(this, getId("edge", t, "simple"), Edge.class, t, getTransformerUI(t))) + .collect(Collectors.toList()); + } + + private List getDegreeFunctions(Transformer transformer) { + List res = new ArrayList<>(); + TransformerUI transformerUI = getTransformerUI(transformer); + + res.add( + new GraphFunctionImpl(this, GraphFunction.NODE_DEGREE, getId("node", transformer, "degree"), + NbBundle.getMessage(AppearanceModelImpl.class, "NodeGraphFunction.Degree.name"), + Node.class, transformer, transformerUI, degreeRanking)); + + res.add(new GraphFunctionImpl(this, GraphFunction.NODE_INDEGREE, getId("node", transformer, "indegree"), + NbBundle.getMessage(AppearanceModelImpl.class, "NodeGraphFunction.InDegree.name"), + Node.class, transformer, transformerUI, inDegreeRanking)); + res.add( + new GraphFunctionImpl(this, GraphFunction.NODE_OUTDEGREE, getId("node", transformer, "outdegree"), + NbBundle.getMessage(AppearanceModelImpl.class, "NodeGraphFunction.OutDegree.name"), + Node.class, transformer, transformerUI, outDegreeRanking)); + return res; } - private boolean isRanking(Column column) { - if (column.isNumber()) { - Index index; - if (AttributeUtils.isNodeColumn(column)) { - index = localScale ? graphModel.getNodeIndex(graphModel.getVisibleView()) : graphModel.getNodeIndex(); - } else { - index = localScale ? graphModel.getEdgeIndex(graphModel.getVisibleView()) : graphModel.getEdgeIndex(); + private List getRankingAndPartitionEdgeFunctions() { + return edgeTransformers.stream().flatMap(t -> { + List res = new ArrayList<>(); + TransformerUI transformerUI = getTransformerUI(t); + + if (t instanceof RankingTransformer) { + res.add(new GraphFunctionImpl(this, GraphFunction.EDGE_WEIGHT, getId("edge", t, "weight"), + NbBundle.getMessage(AppearanceModelImpl.class, "EdgeGraphFunction.Weight.name"), Edge.class, t, + transformerUI, edgeWeightRanking)); } - if (index.countValues(column) > 0 && !isPartition(column)) { - return true; + + if (t instanceof PartitionTransformer) { + res.add( + new GraphFunctionImpl(this, GraphFunction.EDGE_TYPE, getId("edge", t, "type"), + NbBundle.getMessage(AppearanceModelImpl.class, "EdgeGraphFunction.Type.name"), + Edge.class, t, transformerUI, edgeTypePartition)); } - } - return false; + return res.stream(); + }).collect(Collectors.toList()); } - public void setLocalScale(boolean localScale) { - this.localScale = localScale; + protected TransformerUI getTransformerUI(Transformer transformer) { + return transformerUIs.get(transformer.getClass()); } - protected GraphModel getGraphModel() { + @Override + public GraphModel getGraphModel() { return graphModel; } + + private Map initTransformerUIs() { + //Index UIs + Map uis = new HashMap<>(); + + for (TransformerUI ui : Lookup.getDefault().lookupAll(TransformerUI.class)) { + Class transformerClass = ui.getTransformerClass(); + if (transformerClass == null) { + throw new NullPointerException("Transformer class can' be null"); + } + if (uis.containsKey(transformerClass)) { + throw new RuntimeException("A Transformer can't be attach to multiple TransformerUI"); + } + uis.put(transformerClass, ui); + } + return uis; + } + + private List initNodeTransformers() { + return Lookup.getDefault().lookupAll(Transformer.class).stream().filter(Transformer::isNode).collect( + Collectors.toList()); + } + + private List initEdgeTransformers() { + return Lookup.getDefault().lookupAll(Transformer.class).stream().filter(Transformer::isEdge).collect( + Collectors.toList()); + } + + private GraphFunction convertColumnToGraphFunction(Column column) { + GraphFunction graphFunction = null; + if (column.equals(graphModel.defaultColumns().degree())) { + graphFunction = GraphFunction.NODE_DEGREE; + } else if (column.equals(graphModel.defaultColumns().inDegree())) { + graphFunction = GraphFunction.NODE_INDEGREE; + } else if (column.equals(graphModel.defaultColumns().outDegree())) { + graphFunction = GraphFunction.NODE_OUTDEGREE; + } else if (column.equals(graphModel.defaultColumns().edgeType())) { + graphFunction = GraphFunction.EDGE_TYPE; + } else if (column.getTable().isEdgeTable() && column.getId().equals("weight")) { + graphFunction = GraphFunction.EDGE_WEIGHT; + } + return graphFunction; + } + + private String getId(String prefix, Transformer transformer, Column column) { + return prefix + "_" + transformer.getClass().getSimpleName() + "_column_" + column.getId(); + } + + + private String getId(String prefix, Transformer transformer, String suffix) { + return prefix + "_" + transformer.getClass().getSimpleName() + "_" + suffix; + } } diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/AppearanceModelPersistenceProvider.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/AppearanceModelPersistenceProvider.java new file mode 100644 index 0000000000..b29a52a39f --- /dev/null +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/AppearanceModelPersistenceProvider.java @@ -0,0 +1,260 @@ +package org.gephi.appearance; + +import java.awt.Color; +import java.util.Arrays; +import java.util.Map; +import java.util.stream.Collectors; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; +import javax.xml.stream.XMLStreamWriter; +import javax.xml.stream.events.XMLEvent; +import org.gephi.appearance.api.Interpolator; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.project.api.Workspace; +import org.gephi.project.spi.WorkspacePersistenceProvider; +import org.gephi.project.spi.WorkspaceXMLPersistenceProvider; +import org.openide.util.lookup.ServiceProvider; + +@ServiceProvider(service = WorkspacePersistenceProvider.class, position = 400) +public class AppearanceModelPersistenceProvider implements WorkspaceXMLPersistenceProvider { + + + @Override + public void writeXML(XMLStreamWriter writer, Workspace workspace) { + AppearanceModelImpl model = workspace.getLookup().lookup(AppearanceModelImpl.class); + if (model != null) { + try { + writeXML(writer, model); + } catch (XMLStreamException ex) { + throw new RuntimeException(ex); + } + } + } + + @Override + public void readXML(XMLStreamReader reader, Workspace workspace) { + AppearanceModelImpl model = workspace.getLookup().lookup(AppearanceModelImpl.class); + model.initAttributeRankingsAndPartitions(); + try { + readXML(reader, model); + } catch (XMLStreamException ex) { + throw new RuntimeException(ex); + } + } + + @Override + public String getIdentifier() { + return "appearancemodel"; + } + + protected void writeXML(XMLStreamWriter writer, AppearanceModelImpl model) + throws XMLStreamException { + writer.writeStartElement("localscale"); + writer.writeAttribute("ranking", String.valueOf(model.isRankingLocalScale())); + writer.writeAttribute("partition", String.valueOf(model.isPartitionLocalScale())); + writer.writeEndElement(); + + //Rankings + writeRankings(writer, model.getNodeRankings(), "node"); + writeRankings(writer, model.getEdgeRankings(), "edge"); + + //Partitions + writePartitions(writer, model.getNodePartitions(), "node"); + writePartitions(writer, model.getEdgePartitions(), "edge"); + } + + public void readXML(XMLStreamReader reader, AppearanceModelImpl model) throws XMLStreamException { + boolean end = false; + while (reader.hasNext() && !end) { + Integer eventType = reader.next(); + if (eventType.equals(XMLEvent.START_ELEMENT)) { + String name = reader.getLocalName(); + if ("localscale".equalsIgnoreCase(name)) { + String partition = reader.getAttributeValue(null, "partition"); + String ranking = reader.getAttributeValue(null, "ranking"); + model.setPartitionLocalScale(Boolean.parseBoolean(partition)); + model.setRankingLocalScale(Boolean.parseBoolean(ranking)); + } else if ("rankings".equalsIgnoreCase(name)) { + String elementClass = reader.getAttributeValue(null, "for"); + readRankings(reader, + elementClass.equals("node") ? model.getNodeRankings() : model.getEdgeRankings()); + } else if ("partitions".equalsIgnoreCase(name)) { + String elementClass = reader.getAttributeValue(null, "for"); + readPartitions(reader, + elementClass.equals("node") ? model.getNodePartitions() : model.getEdgePartitions()); + } + } else if (eventType.equals(XMLStreamReader.END_ELEMENT)) { + if (getIdentifier().equalsIgnoreCase(reader.getLocalName())) { + end = true; + } + } + } + } + + protected void writeRankings(XMLStreamWriter writer, RankingImpl[] rankings, String elementClass) + throws XMLStreamException { + writer.writeStartElement("rankings"); + writer.writeAttribute("for", elementClass); + for (RankingImpl ranking : rankings) { + writer.writeStartElement("ranking"); + writer.writeAttribute("class", ranking.getClass().getSimpleName()); + if (ranking instanceof AttributeRankingImpl) { + Column col = ranking.getColumn(); + writer.writeAttribute("column", col != null ? col.getId() : ""); + } + writeInterpolator(writer, ranking.getInterpolator()); + writer.writeEndElement(); + } + writer.writeEndElement(); + } + + protected void readRankings(XMLStreamReader reader, RankingImpl[] rankings) throws XMLStreamException { + Map graphRankings = + Arrays.stream(rankings).filter(r -> !(r instanceof AttributeRankingImpl)).collect( + Collectors.toMap(r -> r.getClass().getSimpleName(), r -> r)); + Map attributeRankings = + Arrays.stream(rankings).filter(r -> r instanceof AttributeRankingImpl).filter(r -> r.getColumn() != null) + .collect( + Collectors.toMap(r -> r.getColumn().getId(), r -> r)); + + RankingImpl ranking = null; + boolean end = false; + while (reader.hasNext() && !end) { + Integer eventType = reader.next(); + if (eventType.equals(XMLEvent.START_ELEMENT)) { + String name = reader.getLocalName(); + if ("ranking".equalsIgnoreCase(name)) { + String rankingClass = reader.getAttributeValue(null, "class"); + String rankingColumn = reader.getAttributeValue(null, "column"); + if (rankingColumn != null) { + ranking = attributeRankings.get(rankingColumn); + } else { + ranking = graphRankings.get(rankingClass); + } + } else if ("interpolator".equalsIgnoreCase(name) && ranking != null) { + readInterpolator(reader, ranking); + } + } else if (eventType.equals(XMLStreamReader.END_ELEMENT)) { + ranking = null; + if ("rankings".equalsIgnoreCase(reader.getLocalName())) { + end = true; + } + } + } + } + + protected void writeInterpolator(XMLStreamWriter writer, Interpolator interpolator) + throws XMLStreamException { + String type = null; + if (interpolator == Interpolator.LOG2) { + type = "log2"; + } else if (interpolator == Interpolator.LINEAR) { + type = "linear"; + } else if (interpolator instanceof Interpolator.BezierInterpolator) { + type = "bezier"; + } + if (type != null) { + writer.writeStartElement("interpolator"); + writer.writeAttribute("type", type); + if (type.equals("bezier")) { + Interpolator.BezierInterpolator bezierInterpolator = + (Interpolator.BezierInterpolator) interpolator; + writer.writeAttribute("x1", String.valueOf(bezierInterpolator.getControl1().getX())); + writer.writeAttribute("y1", String.valueOf(bezierInterpolator.getControl1().getY())); + writer.writeAttribute("x2", String.valueOf(bezierInterpolator.getControl2().getX())); + writer.writeAttribute("y2", String.valueOf(bezierInterpolator.getControl2().getY())); + } + writer.writeEndElement(); + } + } + + protected void readInterpolator(XMLStreamReader reader, RankingImpl ranking) { + String type = reader.getAttributeValue(null, "type"); + Interpolator interpolator = null; + switch (type) { + case "log2": + interpolator = Interpolator.LOG2; + break; + case "linear": + interpolator = Interpolator.LINEAR; + break; + case "bezier": + float x1 = Float.parseFloat(reader.getAttributeValue(null, "x1")); + float y1 = Float.parseFloat(reader.getAttributeValue(null, "y1")); + float x2 = Float.parseFloat(reader.getAttributeValue(null, "x2")); + float y2 = Float.parseFloat(reader.getAttributeValue(null, "y2")); + interpolator = new Interpolator.BezierInterpolator(x1, y1, x2, y2); + break; + } + if (interpolator != null) { + ranking.setInterpolator(interpolator); + } + } + + protected void writePartitions(XMLStreamWriter writer, PartitionImpl[] partitions, String elementClass) + throws XMLStreamException { + writer.writeStartElement("partitions"); + writer.writeAttribute("for", elementClass); + for (PartitionImpl partition : partitions) { + if (!partition.colorMap.isEmpty()) { + writer.writeStartElement("partition"); + writer.writeAttribute("class", partition.getClass().getSimpleName()); + if (partition instanceof AttributePartitionImpl) { + Column col = partition.getColumn(); + writer.writeAttribute("column", col != null ? col.getId() : ""); + } + for (Map.Entry entry : partition.colorMap.entrySet()) { + String key = AttributeUtils.print(entry.getKey()); + int rgba = (entry.getValue().getAlpha() << 24) | entry.getValue().getRGB(); + writer.writeStartElement("color"); + writer.writeAttribute("for", key); + writer.writeAttribute("rgba", String.valueOf(rgba)); + writer.writeEndElement(); + } + writer.writeEndElement(); + } + } + writer.writeEndElement(); + } + + protected void readPartitions(XMLStreamReader reader, PartitionImpl[] partitions) throws XMLStreamException { + Map graphPartitions = + Arrays.stream(partitions).filter(r -> !(r instanceof AttributePartitionImpl)).collect( + Collectors.toMap(r -> r.getClass().getSimpleName(), r -> r)); + Map attributePartitions = + Arrays.stream(partitions).filter(r -> r instanceof AttributePartitionImpl) + .filter(r -> r.getColumn() != null) + .collect( + Collectors.toMap(r -> r.getColumn().getId(), r -> r)); + + PartitionImpl partition = null; + boolean end = false; + while (reader.hasNext() && !end) { + Integer eventType = reader.next(); + if (eventType.equals(XMLEvent.START_ELEMENT)) { + String name = reader.getLocalName(); + if ("partition".equalsIgnoreCase(name)) { + String partitionClass = reader.getAttributeValue(null, "class"); + String partitionColumn = reader.getAttributeValue(null, "column"); + if (partitionColumn != null) { + partition = attributePartitions.get(partitionColumn); + } else { + partition = graphPartitions.get(partitionClass); + } + } else if ("color".equalsIgnoreCase(name) && partition != null) { + Color color = new Color(Integer.parseInt(reader.getAttributeValue(null, "rgba")), true); + String keyStr = reader.getAttributeValue(null, "for"); + Object key = AttributeUtils.parse(keyStr, partition.getValueType()); + partition.colorMap.put(key, color); + } + } else if (eventType.equals(XMLStreamReader.END_ELEMENT)) { + if ("partitions".equalsIgnoreCase(reader.getLocalName())) { + end = true; + } else if ("partition".equalsIgnoreCase(reader.getLocalName())) { + partition = null; + } + } + } + } +} diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/AttributeFunctionImpl.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/AttributeFunctionImpl.java new file mode 100644 index 0000000000..b0adb02511 --- /dev/null +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/AttributeFunctionImpl.java @@ -0,0 +1,66 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package org.gephi.appearance; + +import org.gephi.appearance.api.AttributeFunction; +import org.gephi.appearance.api.Interpolator; +import org.gephi.appearance.api.Partition; +import org.gephi.appearance.api.PartitionFunction; +import org.gephi.appearance.api.Ranking; +import org.gephi.appearance.api.RankingFunction; +import org.gephi.appearance.spi.Transformer; +import org.gephi.appearance.spi.TransformerUI; +import org.gephi.graph.api.Column; + +/** + * @author mbastian + */ +public class AttributeFunctionImpl extends FunctionImpl + implements RankingFunction, PartitionFunction, AttributeFunction { + + public AttributeFunctionImpl(AppearanceModelImpl model, String name, Column column, Transformer transformer, + TransformerUI transformerUI, RankingImpl ranking) { + super(model, name, column.getTable().getElementClass(), column, transformer, + transformerUI, null, ranking); + } + + public AttributeFunctionImpl(AppearanceModelImpl model, String name, Column column, Transformer transformer, + TransformerUI transformerUI, PartitionImpl partition) { + super(model, name, column.getTable().getElementClass(), column, transformer, + transformerUI, partition, null); + } + + @Override + public Interpolator getInterpolator() { + return ranking.getInterpolator(); + } + + @Override + public void setInterpolator(Interpolator interpolator) { + ranking.setInterpolator(interpolator); + } + + @Override + public Column getColumn() { + return column; + } + + @Override + public Partition getPartition() { + return partition; + } + + @Override + public Ranking getRanking() { + return ranking; + } + + @Override + public String toString() { + return column.getTitle(); + } +} diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/AttributePartitionImpl.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/AttributePartitionImpl.java new file mode 100644 index 0000000000..5934f27bb7 --- /dev/null +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/AttributePartitionImpl.java @@ -0,0 +1,145 @@ +/* + Copyright 2008-2013 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2013 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2013 Gephi Consortium. + */ + +package org.gephi.appearance; + +import java.lang.ref.WeakReference; +import java.util.Collection; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Index; + +/** + * @author mbastian + */ +public class AttributePartitionImpl extends PartitionImpl { + + protected final WeakReference column; + + public AttributePartitionImpl(Column column) { + super(); + this.column = new WeakReference<>(column); + } + + @Override + public Object getValue(Element element, Graph graph) { + return element.getAttribute(column.get(), graph.getView()); + } + + private Index getIndex(Graph graph) { + return graph.getModel().getElementIndex(column.get().getTable(), graph.getView()); + } + + @Override + public Collection getValues(Graph graph) { + return getIndex(graph).values(column.get()); + } + + @Override + public int getElementCount(Graph graph) { + return getIndex(graph).countElements(column.get()); + } + + @Override + public int count(Object value, Graph graph) { + return getIndex(graph).count(column.get(), value); + } + + @Override + public float percentage(Object value, Graph graph) { + Index index = getIndex(graph); + int count = index.count(column.get(), value); + return 100f * ((float) count / index.countElements(column.get())); + } + + @Override + public int size(Graph graph) { + return getIndex(graph).countValues(column.get()); + } + + @Override + public Column getColumn() { + return column.get(); + } + + @Override + public Class getValueType() { + return getColumn().getTypeClass(); + } + + @Override + public boolean isValid(Graph graph) { + Column col = column.get(); + if (col != null && col.getIndex() != -1) { + return true; + } + return false; + } + + @Override + public int getVersion(Graph graph) { + if (isValid(graph)) { + return getIndex(graph).getColumnIndex(column.get()).getVersion(); + } + return 0; + } + + @Override + public int hashCode() { + int hash = 3; + hash = 23 * hash + (this.column != null ? this.column.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final AttributePartitionImpl other = (AttributePartitionImpl) obj; + return this.column == other.column || (this.column != null && this.column.equals(other.column)); + } +} diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/AttributeRankingImpl.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/AttributeRankingImpl.java new file mode 100644 index 0000000000..e977bb3a0e --- /dev/null +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/AttributeRankingImpl.java @@ -0,0 +1,115 @@ +/* + Copyright 2008-2013 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2013 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2013 Gephi Consortium. + */ + +package org.gephi.appearance; + +import java.lang.ref.WeakReference; +import java.util.Objects; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Index; + +/** + * @author mbastian + */ +public class AttributeRankingImpl extends RankingImpl { + + protected final WeakReference column; + + public AttributeRankingImpl(Column column) { + super(); + this.column = new WeakReference<>(column); + } + + @Override + public Number getMinValue(Graph graph) { + return getIndex(graph).getMinValue(column.get()); + } + + @Override + public Number getMaxValue(Graph graph) { + return getIndex(graph).getMaxValue(column.get()); + } + + private Index getIndex(Graph graph) { + return graph.getModel().getElementIndex(column.get().getTable(), graph.getView()); + } + + @Override + public Number getValue(Element element, Graph graph) { + return (Number) element.getAttribute(column.get(), graph.getView()); + } + + @Override + public boolean isValid(Graph graph) { + Column col = column.get(); + if (col != null && col.getIndex() != -1) { + return col.isNumber() && !col.isArray(); + } + return false; + } + + @Override + public int hashCode() { + int hash = 3; + hash = 67 * hash + (this.column != null ? this.column.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final AttributeRankingImpl other = (AttributeRankingImpl) obj; + return Objects.equals(this.column, other.column); + } + + @Override + public Column getColumn() { + return column.get(); + } +} diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/DegreeRankingImpl.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/DegreeRankingImpl.java new file mode 100644 index 0000000000..df3aa188ee --- /dev/null +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/DegreeRankingImpl.java @@ -0,0 +1,88 @@ +/* + Copyright 2008-2013 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2013 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2013 Gephi Consortium. + */ + +package org.gephi.appearance; + +import java.lang.ref.WeakReference; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.DirectedGraph; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Index; +import org.gephi.graph.api.Node; + +/** + * @author mbastian + */ +public class DegreeRankingImpl extends RankingImpl { + + protected final Column column; + + public DegreeRankingImpl(Column degreeColumn) { + super(); + this.column = degreeColumn; + } + + @Override + public Number getValue(Element element, Graph gr) { + return gr.getDegree((Node) element); + } + + @Override + public Number getMinValue(Graph graph) { + return getIndex(graph).getMinValue(column); + } + + @Override + public Number getMaxValue(Graph graph) { + return getIndex(graph).getMaxValue(column); + } + + private Index getIndex(Graph graph) { + return graph.getModel().getNodeIndex(graph.getView()); + } + + @Override + public boolean isValid(Graph graph) { + return true; + } +} diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/EdgeTypePartitionImpl.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/EdgeTypePartitionImpl.java new file mode 100644 index 0000000000..3ed32a75e6 --- /dev/null +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/EdgeTypePartitionImpl.java @@ -0,0 +1,129 @@ +/* + Copyright 2008-2013 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2013 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2013 Gephi Consortium. + */ + +package org.gephi.appearance; + +import java.util.Arrays; +import java.util.Collection; +import java.util.stream.Collectors; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Index; + +/** + * @author mbastian + */ +public class EdgeTypePartitionImpl extends PartitionImpl { + + private final Class valueType; + private final Column column; + + public EdgeTypePartitionImpl(Column column, Class valueType) { + super(); + this.valueType = valueType; + this.column = column; + } + + @Override + public Collection getValues(Graph graph) { + int[] types = graph.getModel().getEdgeTypes(); + return Arrays.stream(types).filter(t -> graph.getEdgeCount(t) > 0) + .mapToObj(t -> graph.getModel().getEdgeTypeLabel(t)).collect( + Collectors.toList()); + } + + @Override + public Object getValue(Element element, Graph gr) { + return ((Edge) element).getTypeLabel(); + } + + @Override + public int getElementCount(Graph graph) { + return graph.getEdgeCount(); + } + + @Override + public int count(Object value, Graph graph) { + return getIndex(graph).count(column, value); + } + + @Override + public float percentage(Object value, Graph graph) { + Index index = getIndex(graph); + int count = index.count(column, value); + return 100f * ((float) count / index.countElements(column)); + } + + @Override + public int size(Graph graph) { + return getIndex(graph).countValues(column); + } + + private Index getIndex(Graph graph) { + return graph.getModel().getEdgeIndex(graph.getView()); + } + + @Override + public Column getColumn() { + return column; + } + + @Override + public Class getValueType() { + return valueType; + } + + @Override + public boolean isValid(Graph graph) { + return graph.getModel().isMultiGraph(); + } + + @Override + public int getVersion(Graph graph) { + if (isValid(graph)) { + return getIndex(graph).getColumnIndex(column).getVersion(); + } + return 0; + } +} diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/EdgeWeightRankingImpl.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/EdgeWeightRankingImpl.java new file mode 100644 index 0000000000..db8d8c9fa0 --- /dev/null +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/EdgeWeightRankingImpl.java @@ -0,0 +1,87 @@ +/* + Copyright 2008-2013 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2013 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2013 Gephi Consortium. + */ + +package org.gephi.appearance; + +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Index; + +/** + * @author mbastian + */ +public class EdgeWeightRankingImpl extends RankingImpl { + + public EdgeWeightRankingImpl() { + super(); + } + + @Override + public Number getValue(Element element, Graph graph) { + return ((Edge) element).getWeight(graph.getView()); + } + + @Override + public Number getMinValue(Graph graph) { + return getIndex(graph).getMinValue(getColumn(graph)); + } + + @Override + public Number getMaxValue(Graph graph) { + return getIndex(graph).getMaxValue(getColumn(graph)); + } + + private Index getIndex(Graph graph) { + return graph.getModel().getElementIndex(graph.getModel().getEdgeTable(), graph.getView()); + } + + private Column getColumn(Graph graph) { + return graph.getModel().getEdgeTable().getColumn("weight"); + } + + @Override + public boolean isValid(Graph graph) { + return true; + } +} diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/FunctionImpl.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/FunctionImpl.java index 1e5f71625f..98cbabd1ea 100644 --- a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/FunctionImpl.java +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/FunctionImpl.java @@ -39,48 +39,49 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance; -import org.gephi.appearance.api.Partition; -import org.gephi.appearance.api.PartitionFunction; -import org.gephi.appearance.api.Ranking; -import org.gephi.appearance.api.RankingFunction; -import org.gephi.appearance.api.SimpleFunction; +import java.lang.ref.WeakReference; +import java.util.Objects; +import java.util.concurrent.atomic.AtomicInteger; +import org.gephi.appearance.api.Function; import org.gephi.appearance.spi.PartitionTransformer; import org.gephi.appearance.spi.RankingTransformer; import org.gephi.appearance.spi.SimpleTransformer; import org.gephi.appearance.spi.Transformer; import org.gephi.appearance.spi.TransformerUI; -import org.gephi.attribute.api.Column; +import org.gephi.graph.api.Column; import org.gephi.graph.api.Element; +import org.gephi.graph.api.Graph; /** - * * @author mbastian */ -public class FunctionImpl implements RankingFunction, PartitionFunction, SimpleFunction { +public abstract class FunctionImpl implements Function { protected final AppearanceModelImpl model; + protected final Class elementClass; + protected final String name; protected final Column column; protected final Transformer transformer; protected final TransformerUI transformerUI; protected final PartitionImpl partition; protected final RankingImpl ranking; + protected final AtomicInteger version; + // Version + protected WeakReference lastGraph; + protected boolean lastTransformNullValues; - public FunctionImpl(AppearanceModelImpl model, Column column, Transformer transformer, TransformerUI transformerUI) { - this(model, column, transformer, transformerUI, null, null); - } - - public FunctionImpl(AppearanceModelImpl model, Column column, Transformer transformer, TransformerUI transformerUI, RankingImpl ranking) { - this(model, column, transformer, transformerUI, null, ranking); - } - - public FunctionImpl(AppearanceModelImpl model, Column column, Transformer transformer, TransformerUI transformerUI, PartitionImpl partition) { - this(model, column, transformer, transformerUI, partition, null); - } - - public FunctionImpl(AppearanceModelImpl model, Column column, Transformer transformer, TransformerUI transformerUI, PartitionImpl partition, RankingImpl ranking) { + protected FunctionImpl(AppearanceModelImpl model, String name, Class elementClass, Column column, + Transformer transformer, TransformerUI transformerUI, PartitionImpl partition, + RankingImpl ranking) { + if (name == null) { + throw new NullPointerException("The name can't be null"); + } this.model = model; + this.name = name; + this.elementClass = elementClass; this.column = column; try { this.transformer = transformer.getClass().newInstance(); @@ -90,28 +91,111 @@ public FunctionImpl(AppearanceModelImpl model, Column column, Transformer transf this.transformerUI = transformerUI; this.partition = partition; this.ranking = ranking; + this.version = + new AtomicInteger(partition != null ? partition.getVersion(model.getPartitionGraph()) : Integer.MIN_VALUE); + this.lastGraph = partition != null ? new WeakReference<>(model.getPartitionGraph()) : null; + this.lastTransformNullValues = model.isTransformNullValues(); } @Override public void transform(Element element) { + Graph graph = getGraph(); if (isSimple()) { ((SimpleTransformer) transformer).transform(element); } else if (isRanking()) { - Number val = (Number) element.getAttribute(column); - ((RankingTransformer) transformer).transform(element, ranking, val); + transformRanking(element, graph, ranking.getMinValue(graph), ranking.getMaxValue(graph)); } else if (isPartition()) { - Object val = element.getAttribute(column); + transformPartition(element, graph); + } + } + + @Override + public void transformAll(Iterable elementIterable) { + Graph graph = getGraph(); + if (!graph.getView().isDestroyed()) { + if (isSimple()) { + elementIterable.forEach(((SimpleTransformer) transformer)::transform); + } else if (isRanking()) { + final Number minValue = ranking.getMinValue(graph); + final Number maxValue = ranking.getMaxValue(graph); + elementIterable.forEach(e -> transformRanking(e, graph, minValue, maxValue)); + } else if (isPartition()) { + elementIterable.forEach(e -> transformPartition(e, graph)); + } + } + } + + private void transformPartition(Element element, Graph graph) { + Object val = partition.getValue(element, graph); + if (val != null || model.isTransformNullValues()) { ((PartitionTransformer) transformer).transform(element, partition, val); } } + private void transformRanking(Element element, Graph graph, Number minValue, Number maxValue) { + // Always use visible graph to get the value (see #2629) + Number val = ranking.getValue(element, graph.getModel().getGraphVisible()); + if (val != null) { + float normalizedValue = ranking.normalize(val, ranking.getInterpolator(), minValue, maxValue); + ((RankingTransformer) transformer).transform(element, ranking, val, normalizedValue); + } else if (model.isTransformNullValues()) { + ((RankingTransformer) transformer).transform(element, ranking, null, 0f); + } + } + + public boolean hasChanged() { + if (isPartition()) { + Graph graph = model.getPartitionGraph(); + + // Check if view has changed + boolean viewChanged = false; + synchronized (this) { + if (lastGraph == null) { + lastGraph = new WeakReference<>(graph); + } else { + Graph lg = lastGraph.get(); + lastGraph = null; + if (lg == null || lg != graph) { + viewChanged = true; + lastGraph = new WeakReference<>(graph); + } + } + + // Check if transformNullValues was changed + if (lastTransformNullValues != model.isTransformNullValues()) { + viewChanged = true; + } + lastTransformNullValues = model.isTransformNullValues(); + } + + int newVersion = partition.getVersion(graph); + return version.getAndSet(newVersion) != newVersion || viewChanged; + } + return false; + } + @Override - public Column getColumn() { - return column; + public boolean isValid() { + Graph graph = getGraph(); + if (graph.getView().isDestroyed()) { + return false; + } + if (isRanking()) { + return ranking.isValid(graph); + } else if (isPartition()) { + return partition.isValid(graph); + } + return true; } - public AppearanceModelImpl getModel() { - return model; + @Override + public Graph getGraph() { + if (isRanking()) { + return model.getRankingGraph(); + } else if (isPartition()) { + return model.getPartitionGraph(); + } + return model.getGraphModel().getGraph(); } @Override @@ -126,7 +210,7 @@ public TransformerUI getUI() { @Override public boolean isSimple() { - return column == null; + return ranking == null && partition == null; } @Override @@ -145,39 +229,37 @@ public boolean isRanking() { } @Override - public Partition getPartition() { - return partition; + public Class getElementClass() { + return elementClass; } @Override - public Ranking getRanking() { - return ranking; + public AppearanceModelImpl getModel() { + return model; } @Override public String toString() { - if (column != null) { - if (column.getTitle() != null) { - return column.getTitle(); - } else { - return column.getId(); - } - } - return super.toString(); + return name; + } + + @Override + public String getId() { + return name; } @Override public int hashCode() { int hash = 5; - hash = 47 * hash + (this.column != null ? this.column.hashCode() : 0); - hash = 47 * hash + (this.transformer != null ? this.transformer.hashCode() : 0); - hash = 47 * hash + (this.partition != null ? this.partition.hashCode() : 0); - hash = 47 * hash + (this.ranking != null ? this.ranking.hashCode() : 0); + hash = 97 * hash + (this.name != null ? this.name.hashCode() : 0); return hash; } @Override public boolean equals(Object obj) { + if (this == obj) { + return true; + } if (obj == null) { return false; } @@ -185,18 +267,6 @@ public boolean equals(Object obj) { return false; } final FunctionImpl other = (FunctionImpl) obj; - if (this.column != other.column && (this.column == null || !this.column.equals(other.column))) { - return false; - } - if (this.transformer != other.transformer && (this.transformer == null || !this.transformer.equals(other.transformer))) { - return false; - } - if (this.partition != other.partition && (this.partition == null || !this.partition.equals(other.partition))) { - return false; - } - if (this.ranking != other.ranking && (this.ranking == null || !this.ranking.equals(other.ranking))) { - return false; - } - return true; + return Objects.equals(this.name, other.name); } } diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/GraphFunctionImpl.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/GraphFunctionImpl.java new file mode 100644 index 0000000000..411c3aa72d --- /dev/null +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/GraphFunctionImpl.java @@ -0,0 +1,71 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package org.gephi.appearance; + +import org.gephi.appearance.api.AppearanceModel; +import org.gephi.appearance.api.GraphFunction; +import org.gephi.appearance.api.Interpolator; +import org.gephi.appearance.api.PartitionFunction; +import org.gephi.appearance.api.RankingFunction; +import org.gephi.appearance.spi.Transformer; +import org.gephi.appearance.spi.TransformerUI; +import org.gephi.graph.api.Element; + +/** + * @author mbastian + */ +public class GraphFunctionImpl extends FunctionImpl implements GraphFunction, RankingFunction, PartitionFunction { + + private final String displayName; + private final AppearanceModel.GraphFunction graphFunction; + + public GraphFunctionImpl(AppearanceModelImpl model, AppearanceModel.GraphFunction graphFunction, String name, + String displayName, Class elementClass, + Transformer transformer, TransformerUI transformerUI, RankingImpl ranking) { + super(model, name, elementClass, null, transformer, transformerUI, null, ranking); + this.displayName = displayName; + this.graphFunction = graphFunction; + } + + public GraphFunctionImpl(AppearanceModelImpl model, AppearanceModel.GraphFunction graphFunction, String name, + String displayName, Class elementClass, + Transformer transformer, TransformerUI transformerUI, PartitionImpl partition) { + super(model, name, elementClass, null, transformer, transformerUI, partition, null); + this.displayName = displayName; + this.graphFunction = graphFunction; + } + + @Override + public AppearanceModel.GraphFunction getGraphFunction() { + return graphFunction; + } + + @Override + public Interpolator getInterpolator() { + return ranking.getInterpolator(); + } + + @Override + public void setInterpolator(Interpolator interpolator) { + ranking.setInterpolator(interpolator); + } + + @Override + public PartitionImpl getPartition() { + return partition; + } + + @Override + public RankingImpl getRanking() { + return ranking; + } + + @Override + public String toString() { + return displayName; + } +} diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/InDegreeRankingImpl.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/InDegreeRankingImpl.java new file mode 100644 index 0000000000..ac52210b06 --- /dev/null +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/InDegreeRankingImpl.java @@ -0,0 +1,69 @@ +/* + Copyright 2008-2013 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2013 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2013 Gephi Consortium. + */ + +package org.gephi.appearance; + +import org.gephi.graph.api.Column; +import org.gephi.graph.api.DirectedGraph; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Node; + +/** + * @author mbastian + */ +public class InDegreeRankingImpl extends DegreeRankingImpl { + + public InDegreeRankingImpl(Column degreeColumn) { + super(degreeColumn); + } + + @Override + public Number getValue(Element element, Graph gr) { + return ((DirectedGraph) gr).getInDegree((Node) element); + } + + @Override + public boolean isValid(Graph graph) { + return graph.isDirected(); + } +} diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/OutDegreeRankingImpl.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/OutDegreeRankingImpl.java new file mode 100644 index 0000000000..f42391feaf --- /dev/null +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/OutDegreeRankingImpl.java @@ -0,0 +1,69 @@ +/* + Copyright 2008-2013 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2013 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2013 Gephi Consortium. + */ + +package org.gephi.appearance; + +import org.gephi.graph.api.Column; +import org.gephi.graph.api.DirectedGraph; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Node; + +/** + * @author mbastian + */ +public class OutDegreeRankingImpl extends DegreeRankingImpl { + + public OutDegreeRankingImpl(Column degreeColumn) { + super(degreeColumn); + } + + @Override + public Number getValue(Element element, Graph gr) { + return ((DirectedGraph) gr).getOutDegree((Node) element); + } + + @Override + public boolean isValid(Graph graph) { + return graph.isDirected(); + } +} diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/PartitionImpl.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/PartitionImpl.java index b74652c6b9..0d203e03e7 100644 --- a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/PartitionImpl.java +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/PartitionImpl.java @@ -39,91 +39,67 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance; import java.awt.Color; +import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; +import java.util.Iterator; +import java.util.List; import java.util.Map; import org.gephi.appearance.api.Partition; -import org.gephi.attribute.api.Column; -import org.gephi.attribute.api.Index; +import org.gephi.graph.api.Graph; /** - * * @author mbastian */ -public class PartitionImpl implements Partition { - - private final Index index; - private final Column column; - private final Map colorMap; +public abstract class PartitionImpl implements Partition { - public PartitionImpl(Column column, Index index) { - this.column = column; - this.index = index; - this.colorMap = new HashMap(); - } + protected final Map colorMap; - @Override - public Iterable getValues() { - return index.values(column); - } - - @Override - public int getElementCount() { - return index.countElements(column); - } - - @Override - public int count(Object value) { - return index.count(column, value); + protected PartitionImpl() { + this.colorMap = new HashMap<>(); } @Override public Color getColor(Object value) { - return colorMap.get(value); + return colorMap.getOrDefault(value, Partition.DEFAULT_COLOR); } @Override public void setColor(Object value, Color color) { - colorMap.put(value, color); + if (color.equals(Partition.DEFAULT_COLOR)) { + colorMap.remove(value); + } else { + colorMap.put(value, color); + } } @Override - public float percentage(Object value) { - int count = index.count(column, value); - return (float) count / index.countElements(column); + public void setColors(Graph graph, Color[] colors) { + Collection sortedValues = getSortedValues(graph); + Iterator itr = sortedValues.iterator(); + for (int i = 0; i < colors.length && itr.hasNext(); i++) { + setColor(itr.next(), colors[i]); + } } @Override - public int size() { - return index.countValues(column); + public Collection getSortedValues(Graph graph) { + List values = new ArrayList(getValues(graph)); + values.sort((o1, o2) -> { + int c1 = count(o1, graph); + int c2 = count(o2, graph); + return Integer.compare(c2, c1); + }); + return values; } - @Override - public Column getColumn() { - return column; - } + public abstract boolean isValid(Graph graph); - @Override - public int hashCode() { - int hash = 3; - hash = 23 * hash + (this.column != null ? this.column.hashCode() : 0); - return hash; - } + public abstract Class getValueType(); - @Override - public boolean equals(Object obj) { - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final PartitionImpl other = (PartitionImpl) obj; - if (this.column != other.column && (this.column == null || !this.column.equals(other.column))) { - return false; - } - return true; - } + public abstract int getVersion(Graph graph); } diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/RankingImpl.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/RankingImpl.java index 4d9a741518..02fea781c1 100644 --- a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/RankingImpl.java +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/RankingImpl.java @@ -39,74 +39,54 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance; import org.gephi.appearance.api.Interpolator; import org.gephi.appearance.api.Ranking; -import org.gephi.attribute.api.Column; -import org.gephi.attribute.api.Index; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.Graph; +import org.openide.util.NbPreferences; /** - * * @author mbastian */ -public class RankingImpl implements Ranking { +public abstract class RankingImpl implements Ranking { - private final Index index; - private final Column column; - private Interpolator interpolator; + static final String PREF_DEFAULT_INTERPOLATOR = "Appearance.defaultInterpolator"; - public RankingImpl(Column column, Index index, Interpolator interpolator) { - this.column = column; - this.index = index; - this.interpolator = interpolator; - } - - @Override - public Number getMinValue() { - return index.getMinValue(column); - } - - @Override - public Number getMaxValue() { - return index.getMaxValue(column); - } + protected Interpolator interpolator = Interpolator.fromString( + NbPreferences.forModule(Interpolator.class).get(PREF_DEFAULT_INTERPOLATOR, null)); - @Override public Interpolator getInterpolator() { return interpolator; } - @Override public void setInterpolator(Interpolator interpolator) { this.interpolator = interpolator; } @Override - public float normalize(Number value) { - float normalizedValue = (float) (value.doubleValue() - getMinValue().doubleValue()) / (float) (getMaxValue().doubleValue() - getMinValue().doubleValue()); - return interpolator.interpolate(normalizedValue); + public float getNormalizedValue(Element element, Graph graph) { + return normalize(getValue(element, graph), interpolator, getMinValue(graph), getMaxValue(graph)); } @Override - public int hashCode() { - int hash = 3; - hash = 67 * hash + (this.column != null ? this.column.hashCode() : 0); - return hash; + public float normalize(Number value, Interpolator interpolator, Number minValue, Number maxValue) { + if (minValue.equals(maxValue)) { + return 1f; + } + float normalizedValue = + (float) (value.doubleValue() - minValue.doubleValue()) / + (float) (maxValue.doubleValue() - minValue.doubleValue()); + return interpolator.interpolate(normalizedValue); } + public abstract boolean isValid(Graph graph); + @Override - public boolean equals(Object obj) { - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final RankingImpl other = (RankingImpl) obj; - if (this.column != other.column && (this.column == null || !this.column.equals(other.column))) { - return false; - } - return true; + public Column getColumn() { + return null; } } diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/SimpleFunctionImpl.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/SimpleFunctionImpl.java new file mode 100644 index 0000000000..9499b0af73 --- /dev/null +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/SimpleFunctionImpl.java @@ -0,0 +1,24 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package org.gephi.appearance; + +import org.gephi.appearance.api.SimpleFunction; +import org.gephi.appearance.spi.Transformer; +import org.gephi.appearance.spi.TransformerUI; +import org.gephi.graph.api.Element; + +/** + * @author mbastian + */ +public class SimpleFunctionImpl extends FunctionImpl implements SimpleFunction { + + public SimpleFunctionImpl(AppearanceModelImpl model, String name, Class elementClass, + Transformer transformer, + TransformerUI transformerUI) { + super(model, name, elementClass, null, transformer, transformerUI, null, null); + } +} diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/TimesetRankingImpl.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/TimesetRankingImpl.java new file mode 100644 index 0000000000..77281dc4d8 --- /dev/null +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/TimesetRankingImpl.java @@ -0,0 +1,52 @@ +package org.gephi.appearance; + +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.TimeIndex; +import org.gephi.graph.api.types.TimeSet; + +public class TimesetRankingImpl extends AttributeRankingImpl { + + public TimesetRankingImpl(Column column) { + super(column); + } + + @Override + public Number getValue(Element element, Graph graph) { + TimeSet timeSet = (TimeSet) element.getAttribute(column.get(), graph.getView()); + if (timeSet != null) { + // TODO Make this configurable via Estimator + return timeSet.getMinDouble(); + } + return null; + } + + @Override + public Number getMinValue(Graph graph) { + return getIndex(graph).getMinTimestamp(); + } + + @Override + public Number getMaxValue(Graph graph) { + return getIndex(graph).getMaxTimestamp(); + } + + private TimeIndex getIndex(Graph graph) { + if (this.column.get().getTable().isNodeTable()) { + return graph.getModel().getNodeTimeIndex(graph.getView()); + } else { + return graph.getModel().getEdgeTimeIndex(graph.getView()); + } + } + + @Override + public boolean isValid(Graph graph) { + if (column.get() != null) { + TimeIndex timeIndex = getIndex(graph); + return timeIndex.getMinTimestamp() != Double.NEGATIVE_INFINITY && + timeIndex.getMaxTimestamp() != Double.POSITIVE_INFINITY; + } + return false; + } +} \ No newline at end of file diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/AppearanceController.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/AppearanceController.java index 5088983222..57b48133e5 100644 --- a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/AppearanceController.java +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/AppearanceController.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance.api; import org.gephi.appearance.spi.Transformer; @@ -46,8 +47,11 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.project.api.Workspace; /** - * - * @author mbastian + * Manage and controls the appearance of elements through visual + * transformations. + *

+ * This controller is a singleton and can therefore be found in Lookup: + *

AppearanceController ac = Lookup.getDefault().lookup(AppearanceController.class);
*/ public interface AppearanceController { @@ -58,15 +62,55 @@ public interface AppearanceController { * it is called the local scale. * * @param useLocalScale true for local, false for - * global + * global */ - public void setUseLocalScale(boolean useLocalScale); + void setUseRankingLocalScale(boolean useLocalScale); - public void transform(Function function); + /** + * Sets whether partitions use a local or a global scale. When calculating the + * partitions it can use the complete graph or only the currently visible graph. When using the visible graph + * it is called the local scale. + * + * @param useLocalScale true for local, false for + * global + */ + void setUsePartitionLocalScale(boolean useLocalScale); - public AppearanceModel getModel(); + /** + * Sets whether elements with null values are also transformed. Default value is false/ + * + * @param transformNullValues true to transform also null values, false to ignore + */ + void setTransformNullValues(boolean transformNullValues); - public AppearanceModel getModel(Workspace workspace); + /** + * Apply the function's transformer. If the function is for nodes all nodes + * in the visible graph will be transformed. Similarly for edges. + * + * @param function function to transform + */ + void transform(Function function); - public Transformer getTransformer(TransformerUI ui); + /** + * Returns the appearance model for the current workspace. + * + * @return appearance model + */ + AppearanceModel getModel(); + + /** + * Returns the appearance model for the given workspace. + * + * @param workspace workspace + * @return appearance model + */ + AppearanceModel getModel(Workspace workspace); + + /** + * Returns the transformer associated with the given transformer UI. + * + * @param ui user interface instance + * @return transformer instance or null if not found + */ + Transformer getTransformer(TransformerUI ui); } diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/AppearanceModel.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/AppearanceModel.java index 8e1d48d304..18a0ac1d66 100644 --- a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/AppearanceModel.java +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/AppearanceModel.java @@ -39,13 +39,18 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance.api; +import org.gephi.appearance.spi.Transformer; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.GraphModel; import org.gephi.project.api.Workspace; /** - * - * @author mbastian + * Entry point to access the appearance functions. + *

+ * One model exists for each workspace. */ public interface AppearanceModel { @@ -54,21 +59,111 @@ public interface AppearanceModel { * * @return the workspace of this model */ - public Workspace getWorkspace(); + Workspace getWorkspace(); /** - * Returns - * true if rankings are using the currently visible graph as a - * scale. If - * false the complete graph is used to determine minimum and - * maximum values, the ranking scale. + * Returns true if rankings are using the currently visible + * graph as a scale. If false the complete graph is used to + * determine minimum and maximum values. * * @return true if using a local scale, false if * global scale */ - public boolean isLocalScale(); + boolean isRankingLocalScale(); + + /** + * Returns true if partitions are using the currently visible + * graph as a source. If false the complete graph is used to + * determine partitions. + * + * @return true if using a local scale, false if + * global scale + */ + boolean isPartitionLocalScale(); + + /** + * Returns true if null values are considered in functions. If false elements with null + * values will be transformed as well. Default value is false. + *

+ * When using a ranking function, null values will receive the lowest normalised value. + * + * @return true if null values are transformed, false otherwise + */ + boolean isTransformNullValues(); + + /** + * Returns the node partition for thid column. + * + * @param column column + * @return node partition of null if it doesn't exist + */ + Partition getNodePartition(Column column); + + /** + * Returns the edge partition for this column. + * + * @param column column + * @return edge partition of null if it doesn't exist + */ + Partition getEdgePartition(Column column); + + /** + * Returns all node functions for the given graph. + * + * @return all node functions + */ + Function[] getNodeFunctions(); + + /** + * Returns the node function for the given column and transformer. + * + * @param column column + * @param transformer transformer + * @return node function or null if not found + */ + Function getNodeFunction(Column column, Class transformer); + + /** + * Returns the edge function for the given column and transformer. + * + * @param column column + * @param transformer transformer + * @return edge function or null if not found + */ + Function getEdgeFunction(Column column, Class transformer); + + /** + * Returns all edge functions for the given graph. + * + * @return all edge functions + */ + Function[] getEdgeFunctions(); + + /** + * Returns the graph model this model is associated with. + * + * @return the graph model + */ + GraphModel getGraphModel(); + + /** + * Identifies the non-column-based functions. + */ + enum GraphFunction { + NODE_DEGREE("degree"), + NODE_INDEGREE("indegree"), + NODE_OUTDEGREE("outdegree"), + EDGE_WEIGHT("weight"), + EDGE_TYPE("type"); + + private final String id; - public Function[] getNodeFunctions(); + GraphFunction(String id) { + this.id = id; + } - public Function[] getEdgeFunctions(); + public String getId() { + return id; + } + } } diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/AttributeFunction.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/AttributeFunction.java index ef84e8a1fc..0934afb135 100644 --- a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/AttributeFunction.java +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/AttributeFunction.java @@ -39,15 +39,20 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance.api; -import org.gephi.attribute.api.Column; +import org.gephi.graph.api.Column; /** - * - * @author mbastian + * Attribute functions are based on attribute columns. */ public interface AttributeFunction extends Function { - public Column getColumn(); + /** + * Returns the column this function finds its value from. + * + * @return column + */ + Column getColumn(); } diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/Function.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/Function.java index 977945b26d..df048b17a2 100644 --- a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/Function.java +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/Function.java @@ -39,29 +39,128 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance.api; import org.gephi.appearance.spi.Transformer; import org.gephi.appearance.spi.TransformerUI; import org.gephi.graph.api.Element; +import org.gephi.graph.api.Graph; /** - * - * @author mbastian + * Functions represent the various transformations that can be applied to the + * graph elements. Each function is specific to an element class (i.e. nodes or + * edges), to a specific transformer and to a specific source (e.g. a ranking or + * a partition). + *

+ * This interface has sub-interfaces specific to the type of function. */ public interface Function { - public void transform(Element element); - - public Transformer getTransformer(); - - public TransformerUI getUI(); - - public boolean isSimple(); - - public boolean isAttribute(); - - public boolean isRanking(); - - public boolean isPartition(); + /** + * Transforms the given element. + * + * @param element element to transform + */ + void transform(Element element); + + /** + * Transforms all the given elements. + * + * @param elementIterable element iterable to tranform + */ + void transformAll(Iterable elementIterable); + + /** + * Returns the transformer associated with this function. + * + * @param transformer class + * @return transformer + */ + T getTransformer(); + + /** + * Returns the transformer user interface associated with this function. + * + * @return transformer UI or null if not found + */ + TransformerUI getUI(); + + /** + * Returns true if this function is a simple function. + *

+ * If true, this instance can be casted to SimpleFunction. + * + * @return true if partition, false otherwise + */ + boolean isSimple(); + + /** + * Returns true if this function is based on attribute column. + *

+ * If true, this instance can be casted to AttributeFunction. + * + * @return true if attribute, false otherwise + */ + boolean isAttribute(); + + /** + * Returns true if this function is a ranking function. + *

+ * If true, this instance can be casted to RankingFunction. + * + * @return true if ranking, false otherwise + */ + boolean isRanking(); + + /** + * Returns true if this function is a partition function. + *

+ * If true, this instance can be casted to PartitionFunction. + * + * @return true if partition, false otherwise + */ + boolean isPartition(); + + /** + * Returns the element class this function will be applied to. + * + * @return element class + */ + Class getElementClass(); + + /** + * Returns the graph this function is being applied on. + * + * @return graph + */ + Graph getGraph(); + + /** + * Returns the model this function belongs to. + * + * @return model + */ + AppearanceModel getModel(); + + /** + * Returns true if the underlying partition or ranking changed its boundaries or values since last time checked. + * + * @return true if changed, false otherwise + */ + boolean hasChanged(); + + /** + * Returns the function's unique identifier. + * + * @return function id + */ + String getId(); + + /** + * Returns true if the function is valid. A function may not be valid if the underlying column has been removed for instance. + * + * @return true if valid, false otherwise + */ + boolean isValid(); } diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/GraphFunction.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/GraphFunction.java new file mode 100644 index 0000000000..1ad32fb47d --- /dev/null +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/GraphFunction.java @@ -0,0 +1,53 @@ +/* + Copyright 2008-2013 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2013 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2013 Gephi Consortium. + */ + +package org.gephi.appearance.api; + +/** + * A graph function operates based on graph attributes such as edge type or node + * degree. These values are different from AttributeFunction as + * they change when the graph topology change. + */ +public interface GraphFunction extends Function { + + public AppearanceModel.GraphFunction getGraphFunction(); +} diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/Interpolator.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/Interpolator.java index 8e0bb3161a..40d7dd337e 100644 --- a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/Interpolator.java +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/Interpolator.java @@ -39,28 +39,32 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.appearance.api; import java.awt.geom.Point2D; +import java.util.Objects; /** - * Abstract clas that defines the single {@link #interpolate(float)} method. - * This abstract class is implemented by built-in interpolators. - * - * @author Mathieu Bastian + * Abstract class that defines the single {@link #interpolate(float)} method. + * This abstract class is implemented by built-in interpolators accessible as + * static classes. */ public abstract class Interpolator { /** - * Linear interpolation - * x = interpolate(x) - * + * Linear interpolation x = interpolate(x) */ public static final Interpolator LINEAR = new Interpolator() { @Override public float interpolate(float x) { return x; } + + @Override + public String toString() { + return "LINEAR"; + } }; /** * Log2 interpolation @@ -71,8 +75,47 @@ public float interpolate(float x) { public float interpolate(float x) { return (float) (Math.log(1 + x) / Math.log(2)); } + + @Override + public String toString() { + return "LOG2"; + } }; + /** + * Deserializes an interpolator from its string representation, as produced + * by {@link #toString()}. + *

+ * Recognized formats: + *

    + *
  • {@code "LINEAR"} β†’ {@link #LINEAR}
  • + *
  • {@code "LOG2"} β†’ {@link #LOG2}
  • + *
  • {@code "BEZIER:x1,y1,x2,y2"} β†’ {@link BezierInterpolator}
  • + *
+ * Returns {@link #LINEAR} for any unrecognized or malformed input. + * + * @param s serialized string, may be null + * @return corresponding interpolator, never null + */ + public static Interpolator fromString(String s) { + if (s == null || s.isEmpty() || "LINEAR".equals(s)) { + return LINEAR; + } + if ("LOG2".equals(s)) { + return LOG2; + } + if (s.startsWith("BEZIER:")) { + try { + String[] parts = s.substring(7).split(","); + return new BezierInterpolator( + Float.parseFloat(parts[0]), Float.parseFloat(parts[1]), + Float.parseFloat(parts[2]), Float.parseFloat(parts[3])); + } catch (Exception ignored) { + } + } + return LINEAR; + } + /** * Builds a bezier interpolator with two control points (px1, py1) and (px2, * py2). The points should all be in range [0, 1]. @@ -109,6 +152,16 @@ public static Interpolator newBezierInterpolator(float px1, float py1, float px2 //Author David C. Browne public static class BezierInterpolator extends Interpolator { + /** + * power of 2 sample size for lookup table of x values + */ + private static final int SAMPLE_SIZE = 16; + /** + * difference in t used to calculate each of the xSamples values -- + * power of 2 sample size should provide exact representation of this + * value and its integer multiples (integer in range of [0..SAMPLE_SIZE] + */ + private static final float SAMPLE_INCREMENT = 1f / SAMPLE_SIZE; /** * the coordinates of the 2 2D control points for a cubic Bezier curve, * with implicit start point (0,0) and end point (1,1) -- each @@ -120,16 +173,6 @@ public static class BezierInterpolator extends Interpolator { * x1 == y1 and x2 == y2 -- if so, then all x(t) == y(t) for the curve */ private final boolean isCurveLinear; - /** - * power of 2 sample size for lookup table of x values - */ - private static final int SAMPLE_SIZE = 16; - /** - * difference in t used to calculate each of the xSamples values -- - * power of 2 sample size should provide exact representation of this - * value and its integer multiples (integer in range of [0..SAMPLE_SIZE] - */ - private static final float SAMPLE_INCREMENT = 1f / SAMPLE_SIZE; /** * x values for the bezier curve, sampled at increments of 1/SAMPLE_SIZE * -- this is used to find the good initial guess for parameter t, given @@ -150,9 +193,13 @@ public static class BezierInterpolator extends Interpolator { public BezierInterpolator(float px1, float py1, float px2, float py2) { // check user input for precondition if (px1 < 0 || px1 > 1 || py1 < 0 || py1 > 1 - || px2 < 0 || px2 > 1 || py2 < 0 || py2 > 1) { + || px2 < 0 || px2 > 1 || py2 < 0 || py2 > 1) { throw new IllegalArgumentException("control point coordinates must " - + "all be in range [0,1]"); + + "all be in range [0,1]"); + } + + if (px1 == 0 && px2 == 0) { + px2 += 0.01;//Fix numerical inestability with some small difference } // save control point data @@ -210,15 +257,13 @@ public float interpolate(float x) { * use Bernstein basis to evaluate 1D cubic Bezier curve (quicker and * more numerically stable than power basis) -- 1D control coordinates * are (0, p1, p2, 1), where p1 and p2 are in range [0,1], and there is - * no ordering constraint on p1 and p2, i.e., p1 <= p2 does not have to - * be true @param t is the pa + * no ordering constraint on p1 and p2, i.e., p1 <= p2 does not have to + * be true * - * ramaterized value in range [0,1] @param p1 is 1st control point - * coordinate in range [0,1] @param p2 is 2nd control point coor - * - * d - * inate in range [0,1] @return the value of the Bezier curve at - * parameter t + * @param t is the paramaterized value in range [0,1] + * @param p1 is 1st control point coordinate in range [0,1] + * @param p2 is 2nd control point coordinate in range [0,1] + * @return the value of the Bezier curve at parameter t */ private float eval(float t, float p1, float p2) { // Use optimzied version of the normal Bernstein basis form of Bezier: @@ -232,15 +277,13 @@ private float eval(float t, float p1, float p2) { /** * evaluate Bernstein basis derivative of 1D cubic Bezier curve, where * 1D control points are (0, p1, p2, 1), where p1 and p2 are in range - * [0,1], and there is no ordering constraint on p1 and p2, i.e., p1 <= - * p2 does not have to be true @param t is the paramaterized - * - * value in range [0,1] @param p1 is 1st control point coordinate in - * range [0,1] @param p2 is 2nd control point coo + * [0,1], and there is no ordering constraint on p1 and p2, i.e., p1 <= + * p2 does not have to be true * - * r - * dinate in range [0,1] @return the value of the Bezier curve at - * parameter t + * @param t is the paramaterized value in range [0,1] + * @param p1 is 1st control point coordinate in range [0,1] + * @param p2 is 2nd control point coordinate in range [0,1] + * @return the value of the Bezier curve at parameter t */ private float evalDerivative(float t, float p1, float p2) { // use optimzed version of Berstein basis Bezier derivative: @@ -257,8 +300,7 @@ private float evalDerivative(float t, float p1, float p2) { * x-value sample array that was created on construction * * @param x is x-value of cubic bezier curve, in range [0,1] - * @return a good initial guess for parameter t (in range [0,1]) that - * gives x + * @return a good initial guess for parameter t (in range [0,1]) that gives x */ private float getInitialGuessForT(float x) { // find which places in the array that x would be sandwiched between, @@ -274,7 +316,7 @@ private float getInitialGuessForT(float x) { } else { // linearly interpolate the time value return ((i - 1) + ((x - xSamples[i - 1]) / xRange)) - * SAMPLE_INCREMENT; + * SAMPLE_INCREMENT; } } } @@ -321,5 +363,28 @@ private float findTForX(float x) { return t; } + + @Override + public String toString() { + return String.format("BEZIER:%s,%s,%s,%s", x1, y1, x2, y2); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof BezierInterpolator)) { + return false; + } + BezierInterpolator that = (BezierInterpolator) o; + return Float.compare(that.x1, x1) == 0 && Float.compare(that.y1, y1) == 0 && + Float.compare(that.x2, x2) == 0 && Float.compare(that.y2, y2) == 0; + } + + @Override + public int hashCode() { + return Objects.hash(x1, y1, x2, y2); + } } } diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/Partition.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/Partition.java index 1380f5e981..e33bcb1245 100644 --- a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/Partition.java +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/Partition.java @@ -39,30 +39,118 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance.api; import java.awt.Color; -import org.gephi.attribute.api.Column; +import java.util.Collection; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.Graph; /** - * - * @author mbastian + * Partition configuration for categorical attributes. + *

+ * This interface has access to the underlying index so it can return the + * complete collection of different values, as well as the number of elements + * with this value. + *

+ * Note that null can be a valid value. + *

+ * Colors can be associated with values. */ public interface Partition { - public Iterable getValues(); - - public int getElementCount(); - - public int count(Object value); - - public Color getColor(Object value); - - public void setColor(Object value, Color color); - - public float percentage(Object value); - - public int size(); - - public Column getColumn(); + public static Color DEFAULT_COLOR = Color.LIGHT_GRAY; + + /** + * Returns the collection of values this partition represents. Each value + * has at least one element. + * + * @param graph graph this partition applies to + * @return values + */ + Collection getValues(Graph graph); + + /** + * Returns the same collection as {@link #getValues(Graph graph) } but sorted + * descendant in counts. + * + * @param graph graph this partition applies to + * @return sorted values + */ + Collection getSortedValues(Graph graph); + + /** + * Returns the number of elements that have a value in this partition. + * + * @param graph graph this partition applies to + * @return element count + */ + int getElementCount(Graph graph); + + /** + * Returns the number of elements for the given value. + * + * @param value value + * @param graph graph this partition applies to + * @return value count + */ + int count(Object value, Graph graph); + + /** + * Returns the element's value for this partition. + * + * @param element element to get the value for + * @param graph graph this element belongs to + * @return the value for this partition + */ + Object getValue(Element element, Graph graph); + + /** + * Returns the color for the given value. + * + * @param value value to get the color for + * @return color or null if not defined + */ + Color getColor(Object value); + + /** + * Sets the color for the given value. + * + * @param value value to set the color for + * @param color color + */ + void setColor(Object value, Color color); + + /** + * Sets the colors for all values. It uses the descending value count as order from getSortedValues(). + * + * @param graph graph this partition applies to + * @param colors colors to set + */ + void setColors(Graph graph, Color[] colors); + + /** + * Returns the percentage of elements with the given value. + * + * @param value value + * @return percentage, between zero and 100 + */ + float percentage(Object value, Graph graph); + + /** + * Returns the number of values this partition represents. + * + * @param graph this element belongs to + * @return value count + */ + int size(Graph graph); + + /** + * Returns the column associated with this partition. + * + * @return column or null if partition not based on a column + */ + Column getColumn(); } diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/PartitionFunction.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/PartitionFunction.java index 962b072742..d5279bf860 100644 --- a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/PartitionFunction.java +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/PartitionFunction.java @@ -39,13 +39,18 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance.api; /** - * - * @author mbastian + * Partition function. */ -public interface PartitionFunction extends AttributeFunction { - - public Partition getPartition(); +public interface PartitionFunction extends Function { + + /** + * Returns the partition configuration associated with this function. + * + * @return partition + */ + Partition getPartition(); } diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/Ranking.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/Ranking.java index 02a776eec5..48aea97fd2 100644 --- a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/Ranking.java +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/Ranking.java @@ -39,21 +39,71 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance.api; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.Graph; + /** - * - * @author mbastian + * Ranking configuration for numerical attributes. + *

+ * This interface has underlying access to the elements value so it can return + * the minimum and maximum values. */ public interface Ranking { - public Number getMinValue(); + /** + * Returns the minimum value in this ranking. + * + * @param graph graph to query + * @return minimum value + */ + Number getMinValue(Graph graph); + + /** + * Returns the maximum value in this ranking. + * + * @param graph graph to query + * @return maximum value + */ + Number getMaxValue(Graph graph); - public Number getMaxValue(); + /** + * Returns the element's value for this ranking. + * + * @param element element to get the value for + * @param graph graph this element belongs to + * @return the value for this ranking + */ + Number getValue(Element element, Graph graph); - public Interpolator getInterpolator(); + /** + * Returns the element's normalized value for this ranking. + * + * @param element element to get the value for + * @param graph graph this element belongs to + * @return the normalized value for this ranking + */ + float getNormalizedValue(Element element, Graph graph); - public void setInterpolator(Interpolator interpolator); + /** + * Normalizes the given value with the interpolator. + *

+ * The value is first put between zero and one by doing (value - min) / (max + * - min) and then passed to the given interpolator. + * + * @param value value to normalize + * @param interpolator interpolator + * @return normalized value + */ + float normalize(Number value, Interpolator interpolator, Number minValue, Number maxValue); - public float normalize(Number value); + /** + * Returns the column associated with this partition. + * + * @return column or null if partition not based on a column + */ + Column getColumn(); } diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/RankingFunction.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/RankingFunction.java index 9bcd4e2067..1db4c3b1f1 100644 --- a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/RankingFunction.java +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/RankingFunction.java @@ -39,13 +39,35 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance.api; /** - * - * @author mbastian + * Ranking function. */ -public interface RankingFunction extends AttributeFunction { +public interface RankingFunction extends Function { + + /** + * Returns the ranking configuration associated with this function. + * + * @return ranking + */ + Ranking getRanking(); + + /** + * Returns the interpolator. + *

+ * By default, a Interpolator.LINEAR is used so no + * transformation is operated. + * + * @return interpolator + */ + Interpolator getInterpolator(); - public Ranking getRanking(); + /** + * Sets the interpolator for this function. + * + * @param interpolator interpolator + */ + void setInterpolator(Interpolator interpolator); } diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/SimpleFunction.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/SimpleFunction.java index 22b5579454..99fd8dedf5 100644 --- a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/SimpleFunction.java +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/api/SimpleFunction.java @@ -39,11 +39,11 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance.api; /** - * - * @author mbastian + * Simple functions are neither ranking nor partition. */ public interface SimpleFunction extends Function { } diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/spi/PartitionTransformer.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/spi/PartitionTransformer.java index db545424ac..b90ad482fa 100644 --- a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/spi/PartitionTransformer.java +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/spi/PartitionTransformer.java @@ -39,16 +39,27 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance.spi; import org.gephi.appearance.api.Partition; import org.gephi.graph.api.Element; /** + * Partition transformer that transforms an element based on a categorical + * partition column. * - * @author mbastian + * @param element class */ public interface PartitionTransformer extends Transformer { - public void transform(E element, Partition partition, Object value); + /** + * Transforms the given element based on the provided partition + * configuration. + * + * @param element element to transform + * @param partition partition configuration + * @param value element's value for this partition + */ + void transform(E element, Partition partition, Object value); } diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/spi/RankingTransformer.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/spi/RankingTransformer.java index ab4565441b..23e7816051 100644 --- a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/spi/RankingTransformer.java +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/spi/RankingTransformer.java @@ -39,16 +39,31 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance.spi; import org.gephi.appearance.api.Ranking; import org.gephi.graph.api.Element; /** + * Ranking transformer that transforms an element based on a numerical ranking + * column. * - * @author mbastian + * @param element class */ public interface RankingTransformer extends Transformer { - public void transform(E element, Ranking ranking, Number value); + /** + * Transforms the given element based on the provided ranking parameters. + *

+ * The ranking object contains the min and max value so the + * ranked value can be calculated. + * + * @param element element to transform + * @param ranking ranking configuration + * @param value element's value for this ranking + * @param normalisedValue normalised value between 0.0 and 1.0 + */ + void transform(E element, Ranking ranking, Number value, float normalisedValue); + } diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/spi/SimpleTransformer.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/spi/SimpleTransformer.java index e6717fef06..31ca8850f2 100644 --- a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/spi/SimpleTransformer.java +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/spi/SimpleTransformer.java @@ -39,15 +39,22 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance.spi; import org.gephi.graph.api.Element; /** + * Basic transformer that takes only an element to transform it. * - * @author mbastian + * @param element class */ public interface SimpleTransformer extends Transformer { - public void transform(E element); + /** + * Transforms the given element. + * + * @param element element to transform + */ + void transform(E element); } diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/spi/Transformer.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/spi/Transformer.java index 6c3988ac0f..9054f50a84 100644 --- a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/spi/Transformer.java +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/spi/Transformer.java @@ -39,15 +39,31 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance.spi; /** - * - * @author mbastian + * Transformers role is to transform the appearance of elements based on user + * configuration. Examples of appearance alteration are color, size, label color + * or label size. + *

+ * Transformers can be defined as singleton services by adding the + * @ServiceProvider annotation: + *

@ServiceProvider(service = Transformer.class)
*/ public interface Transformer { - public boolean isNode(); + /** + * True is this transformer can be applied to nodes. + * + * @return true if is node, false otherwise + */ + boolean isNode(); - public boolean isEdge(); + /** + * True if this transformer can be applied to edges. + * + * @return true if is edge, false otherwise + */ + boolean isEdge(); } diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/spi/TransformerCategory.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/spi/TransformerCategory.java index 30ad67151f..bbf90d727f 100644 --- a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/spi/TransformerCategory.java +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/spi/TransformerCategory.java @@ -39,17 +39,41 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance.spi; import javax.swing.Icon; /** - * - * @author mbastian + * Transformer categories are associated with TransformerUI to + * describe what kind of transformation is performed. It is designed to group + * together different transformers. For instance if two transformers both act on + * the size of a node but in a different way they should be grouped together + * with the same category. + *

+ * For persistence purposes, the category should have a unique identifier via {#getId()}. + * @see TransformerUI */ public interface TransformerCategory { - public String getDisplayName(); + /** + * Returns the transformer category display name. + * + * @return display name + */ + String getDisplayName(); + + /** + * Returns the transformer category icon. + * + * @return icon or null if missing + */ + Icon getIcon(); - public Icon getIcon(); + /** + * Returns the category's unique identifier. + * + * @return unique identifier + */ + String getId(); } diff --git a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/spi/TransformerUI.java b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/spi/TransformerUI.java index 27698c5e94..a9320a442b 100644 --- a/modules/AppearanceAPI/src/main/java/org/gephi/appearance/spi/TransformerUI.java +++ b/modules/AppearanceAPI/src/main/java/org/gephi/appearance/spi/TransformerUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance.spi; import javax.swing.AbstractButton; @@ -47,22 +48,80 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.appearance.api.Function; /** + * Defines the user interface associated with a transformer. + *

+ * It is a one-to-one relationship as only a single transformer UI can be + * associated with a transformer. + *

+ * Implementations of this class should be singleton services by adding the + * @ServiceProvider annotation: + *

@ServiceProvider(service = TransformerUI.class, position = 2000)
+ * The position parameter is optional but can be used to control the order in + * which the transformers appear in the user interface. The higher the last. * - * @author mbastian + * @param transformer class */ public interface TransformerUI { - public TransformerCategory getCategory(); - - public JPanel getPanel(Function function); - - public String getDisplayName(); - - public String getDescription(); - - public Icon getIcon(); - - public AbstractButton[] getControlButton(); - - public Class getTransformerClass(); + /** + * Returns the transformer category. + * + * @return transformer category + */ + TransformerCategory getCategory(); + + /** + * Returns the transformer panel for the given function. + * + * @param function function + * @return transformer panel + */ + JPanel getPanel(Function function); + + /** + * Returns the transformer's display name. + * + * @return display name + */ + String getDisplayName(); + + /** + * Returns the transformer's description. + * + * @return description or null if missing + */ + String getDescription(); + + /** + * Returns the transformer's icon. + * + * @return icon or null if missing + */ + Icon getIcon(); + + /** + * Returns the control buttons associated with this transformer. + * + * @return control buttons or null if missing + */ + AbstractButton[] getControlButton(); + + /** + * Returns the transformer class this transformer UI is associated with. + * + * @return transformer class + */ + Class getTransformerClass(); + + /** + * Called after the transformer has been applied to the graph, either via + * the Apply button or auto-apply. + *

+ * Implementations can override this to react to apply events, for example + * to persist UI state that depends on the current function configuration. + * + * @param function function that was applied + */ + default void onApply(Function function) { + } } diff --git a/modules/AppearanceAPI/src/main/nbm/manifest.mf b/modules/AppearanceAPI/src/main/nbm/manifest.mf index 161630016e..662c4370f9 100644 --- a/modules/AppearanceAPI/src/main/nbm/manifest.mf +++ b/modules/AppearanceAPI/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true -OpenIDE-Module-Localizing-Bundle: org/gephi/appearance/api/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Localizing-Bundle: org/gephi/appearance/Bundle.properties +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi Core +OpenIDE-Module-Name: Appearance API diff --git a/modules/AppearanceAPI/src/main/nbm/module.xml b/modules/AppearanceAPI/src/main/nbm/module.xml deleted file mode 100644 index bfd7747603..0000000000 --- a/modules/AppearanceAPI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle.properties b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle.properties new file mode 100644 index 0000000000..310672a2c6 --- /dev/null +++ b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle.properties @@ -0,0 +1,7 @@ +OpenIDE-Module-Long-Description = API for the visual appearance of elements +OpenIDE-Module-Short-Description = API for the visual appearance of elements +NodeGraphFunction.Degree.name = Degree +NodeGraphFunction.InDegree.name = In-Degree +NodeGraphFunction.OutDegree.name = Out-Degree +EdgeGraphFunction.Weight.name = Weight +EdgeGraphFunction.Type.name = Type diff --git a/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_ar.properties b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_ca.properties b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_ca.properties new file mode 100644 index 0000000000..610a555802 --- /dev/null +++ b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_ca.properties @@ -0,0 +1,7 @@ +OpenIDE-Module-Long-Description=API for the visual appearance of elements +OpenIDE-Module-Short-Description=API for the visual appearance of elements +NodeGraphFunction.Degree.name=Grau +NodeGraphFunction.InDegree.name=Grau d'entrada +NodeGraphFunction.OutDegree.name=Grau de sortida +EdgeGraphFunction.Weight.name=Pes +EdgeGraphFunction.Type.name=Tipus diff --git a/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_cs.properties b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_cs.properties new file mode 100644 index 0000000000..26355f407f --- /dev/null +++ b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_cs.properties @@ -0,0 +1,7 @@ +OpenIDE-Module-Long-Description = API pro vizuαlnν vzhled prvk\u016f +OpenIDE-Module-Short-Description = API pro vizuαlnν vzhled prvk\u016f +NodeGraphFunction.Degree.name = Stupe\u0148 +NodeGraphFunction.InDegree.name = Stupe\u0148 Dovnit\u0159 +NodeGraphFunction.OutDegree.name = Stupe\u0148 Ven +EdgeGraphFunction.Weight.name = Vαha +EdgeGraphFunction.Type.name = Typ diff --git a/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_de.properties b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_de.properties new file mode 100644 index 0000000000..65155d0f36 --- /dev/null +++ b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_de.properties @@ -0,0 +1,7 @@ +OpenIDE-Module-Long-Description = API fόr die visuelle Ausgestaltung von Elementen +OpenIDE-Module-Short-Description = API fόr die visuelle Ausgestaltung von Elementen +NodeGraphFunction.Degree.name = Grad +NodeGraphFunction.InDegree.name = Eingangsgrad +NodeGraphFunction.OutDegree.name = Ausgangsgrad +EdgeGraphFunction.Weight.name = Gewicht +EdgeGraphFunction.Type.name = Typ diff --git a/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_el.properties b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_el.properties new file mode 100644 index 0000000000..3113a479e2 --- /dev/null +++ b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_el.properties @@ -0,0 +1,9 @@ + + +NodeGraphFunction.Degree.name=\u0392\u03B1\u03B8\u03BC\u03CC\u03C2 +NodeGraphFunction.InDegree.name=\u0392\u03B1\u03B8\u03BC\u03CC\u03C2 \u0395\u03B9\u03C3\u03CC\u03B4\u03BF\u03C5 +NodeGraphFunction.OutDegree.name=\u0392\u03B1\u03B8\u03BC\u03CC\u03C2 \u0395\u03BE\u03CC\u03B4\u03BF\u03C5 +EdgeGraphFunction.Weight.name=\u0392\u03AC\u03C1\u03BF\u03C2 +EdgeGraphFunction.Type.name=\u03A4\u03CD\u03C0\u03BF\u03C2 +OpenIDE-Module-Long-Description=API \u03B5\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7\u03C2 \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03C9\u03BD +OpenIDE-Module-Short-Description=API \u03B5\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7\u03C2 \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03C9\u03BD diff --git a/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_es.properties b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_es.properties new file mode 100644 index 0000000000..77c4927dff --- /dev/null +++ b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_es.properties @@ -0,0 +1,7 @@ +OpenIDE-Module-Long-Description = API para la apariencia visual de los elementos +OpenIDE-Module-Short-Description = API para la apariencia visual de los elementos +NodeGraphFunction.Degree.name = Grado +NodeGraphFunction.InDegree.name = Grado de entrada +NodeGraphFunction.OutDegree.name = Grado de salida +EdgeGraphFunction.Weight.name = Peso +EdgeGraphFunction.Type.name = Tipo diff --git a/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_fr.properties b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_fr.properties new file mode 100644 index 0000000000..74001357e0 --- /dev/null +++ b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_fr.properties @@ -0,0 +1,7 @@ +OpenIDE-Module-Long-Description = API pour l'aspect visuel des ιlιments +OpenIDE-Module-Short-Description = API pour l'aspect visuel des ιlιments +NodeGraphFunction.Degree.name = Degrι +NodeGraphFunction.InDegree.name = Degrι Entrant +NodeGraphFunction.OutDegree.name = Degrι Sortant +EdgeGraphFunction.Weight.name = Poids +EdgeGraphFunction.Type.name = Type diff --git a/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_he.properties b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_he.properties new file mode 100644 index 0000000000..268a11d2bb --- /dev/null +++ b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_he.properties @@ -0,0 +1,7 @@ +OpenIDE-Module-Long-Description = \u05de\u05e0\u05e9\u05e7 \u05e2\u05d1\u05d5\u05e8 \u05d4\u05ea\u05d5\u05e6\u05d2\u05d4 \u05d4\u05d7\u05d6\u05d5\u05ea\u05d9\u05ea \u05e9\u05dc \u05d4\u05e8\u05db\u05d9\u05d1\u05d9\u05dd +OpenIDE-Module-Short-Description = \u05de\u05e0\u05e9\u05e7 \u05e2\u05d1\u05d5\u05e8 \u05d4\u05ea\u05e6\u05d5\u05d2\u05d4 \u05d4\u05d7\u05d6\u05d5\u05ea\u05d9\u05ea \u05e9\u05dc \u05d4\u05de\u05e8\u05db\u05d9\u05d1\u05d9\u05dd +NodeGraphFunction.Degree.name = \u05d3\u05e8\u05d2\u05d4 +NodeGraphFunction.InDegree.name = \u05d3\u05e8\u05d2\u05d4 \u05e0\u05db\u05e0\u05e1\u05ea +NodeGraphFunction.OutDegree.name = \u05d3\u05e8\u05d2\u05d4 \u05d9\u05d5\u05e6\u05d0\u05ea +EdgeGraphFunction.Weight.name = \u05de\u05e9\u05e7\u05dc +EdgeGraphFunction.Type.name = \u05e1\u05d5\u05d2 diff --git a/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_hu.properties b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_hu.properties new file mode 100644 index 0000000000..b20dfe9924 --- /dev/null +++ b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_hu.properties @@ -0,0 +1,9 @@ + + +NodeGraphFunction.InDegree.name=Fokozatban +EdgeGraphFunction.Weight.name=S\u00FAly +NodeGraphFunction.Degree.name=Fokozat +NodeGraphFunction.OutDegree.name=Kimen\u0151 fokozat +OpenIDE-Module-Short-Description=API az elemek vizu\u00E1lis megjelen\u00E9s\u00E9hez +OpenIDE-Module-Long-Description=API az elemek vizu\u00E1lis megjelen\u00E9s\u00E9hez +EdgeGraphFunction.Type.name=T\u00EDpus diff --git a/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_it.properties b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_it.properties new file mode 100644 index 0000000000..3dbc8e8224 --- /dev/null +++ b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_it.properties @@ -0,0 +1,7 @@ +OpenIDE-Module-Long-Description=API for the visual appearance of elements +OpenIDE-Module-Short-Description=API for the visual appearance of elements +NodeGraphFunction.Degree.name=Grado +NodeGraphFunction.InDegree.name=Grado entrante +NodeGraphFunction.OutDegree.name=Grado uscente +EdgeGraphFunction.Weight.name=Peso +EdgeGraphFunction.Type.name=Tipo diff --git a/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_ja.properties b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_ja.properties new file mode 100644 index 0000000000..dc9e28c8ea --- /dev/null +++ b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_ja.properties @@ -0,0 +1,7 @@ +# OpenIDE-Module-Long-Description = API for the visual appearance of elements +# OpenIDE-Module-Short-Description = API for the visual appearance of elements +# NodeGraphFunction.Degree.name = Degree +# NodeGraphFunction.InDegree.name = In-Degree +# NodeGraphFunction.OutDegree.name = Out-Degree +# EdgeGraphFunction.Weight.name = Weight +# EdgeGraphFunction.Type.name = Type diff --git a/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_ko.properties b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_ko.properties new file mode 100644 index 0000000000..27ac6229d5 --- /dev/null +++ b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_ko.properties @@ -0,0 +1,9 @@ + + +EdgeGraphFunction.Weight.name=\uAC00\uC911\uCE58 +NodeGraphFunction.Degree.name=\uCC28\uC218 +NodeGraphFunction.InDegree.name=\uC9C4\uC785 \uCC28\uC218 +NodeGraphFunction.OutDegree.name=\uC9C4\uCD9C \uCC28\uC218 +EdgeGraphFunction.Type.name=\uC720\uD615 +OpenIDE-Module-Long-Description=\uAD6C\uC131 \uC694\uC18C\uB4E4\uC758 \uC2DC\uAC01\uC801 \uBAA8\uC2B5\uC744 \uC704\uD55C API +OpenIDE-Module-Short-Description=\uAD6C\uC131 \uC694\uC18C\uB4E4\uC758 \uC2DC\uAC01\uC801 \uBAA8\uC2B5\uC744 \uC704\uD55C API diff --git a/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_nl.properties b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_nl.properties new file mode 100644 index 0000000000..22c555c7a2 --- /dev/null +++ b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_nl.properties @@ -0,0 +1,7 @@ +OpenIDE-Module-Long-Description=API for the visual appearance of elements +OpenIDE-Module-Short-Description=API for the visual appearance of elements +NodeGraphFunction.Degree.name=Degree +NodeGraphFunction.InDegree.name=In-Degree +NodeGraphFunction.OutDegree.name=Out-Degree +EdgeGraphFunction.Weight.name=Gewicht +EdgeGraphFunction.Type.name=Type diff --git a/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_pt.properties b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_pt.properties new file mode 100644 index 0000000000..5aa51b821d --- /dev/null +++ b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_pt.properties @@ -0,0 +1,7 @@ +OpenIDE-Module-Long-Description=API para a apar\u00EAncia visual de elementos +OpenIDE-Module-Short-Description=API para a apar\u00EAncia visual de elementos +NodeGraphFunction.Degree.name=Grau +NodeGraphFunction.InDegree.name=Grau de Entrada +NodeGraphFunction.OutDegree.name=Grau de Sa\u00EDda +EdgeGraphFunction.Weight.name=Peso +EdgeGraphFunction.Type.name=Tipo diff --git a/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_pt_BR.properties b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_pt_BR.properties new file mode 100644 index 0000000000..21f7937c30 --- /dev/null +++ b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_pt_BR.properties @@ -0,0 +1,7 @@ +OpenIDE-Module-Long-Description = API para a aparκncia visual dos elementos +OpenIDE-Module-Short-Description = API para a aparκncia visual dos elementos +NodeGraphFunction.Degree.name = Grau +NodeGraphFunction.InDegree.name = Grau de Entrada +NodeGraphFunction.OutDegree.name = Grau de Saνda +EdgeGraphFunction.Weight.name = Peso +EdgeGraphFunction.Type.name = Tipo diff --git a/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_ro.properties b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_ro.properties new file mode 100644 index 0000000000..9a1a823974 --- /dev/null +++ b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_ro.properties @@ -0,0 +1,9 @@ + + +OpenIDE-Module-Long-Description=API pentru aspectul vizual al elementelor +OpenIDE-Module-Short-Description=API pentru aspectul vizual al elementelor +NodeGraphFunction.Degree.name=Grad +NodeGraphFunction.InDegree.name=Grad Interior +NodeGraphFunction.OutDegree.name=Grad Exterior +EdgeGraphFunction.Weight.name=Pondere +EdgeGraphFunction.Type.name=Tip diff --git a/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_ru.properties b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_ru.properties new file mode 100644 index 0000000000..dc9e28c8ea --- /dev/null +++ b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_ru.properties @@ -0,0 +1,7 @@ +# OpenIDE-Module-Long-Description = API for the visual appearance of elements +# OpenIDE-Module-Short-Description = API for the visual appearance of elements +# NodeGraphFunction.Degree.name = Degree +# NodeGraphFunction.InDegree.name = In-Degree +# NodeGraphFunction.OutDegree.name = Out-Degree +# EdgeGraphFunction.Weight.name = Weight +# EdgeGraphFunction.Type.name = Type diff --git a/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_th.properties b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_th.properties new file mode 100644 index 0000000000..59b9ae3e32 --- /dev/null +++ b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_th.properties @@ -0,0 +1,7 @@ +OpenIDE-Module-Long-Description=API \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E04\u0E27\u0E1A\u0E04\u0E38\u0E21\u0E41\u0E25\u0E30\u0E08\u0E31\u0E14\u0E01\u0E32\u0E23\u0E01\u0E32\u0E23\u0E41\u0E2A\u0E14\u0E07\u0E1C\u0E25\u0E23\u0E39\u0E1B\u0E25\u0E31\u0E01\u0E29\u0E13\u0E4C\u0E02\u0E2D\u0E07\u0E2D\u0E07\u0E04\u0E4C\u0E1B\u0E23\u0E30\u0E01\u0E2D\u0E1A\u0E01\u0E23\u0E32\u0E1F +OpenIDE-Module-Short-Description=API \u0E2A\u0E33\u0E2B\u0E23\u0E31\u0E1A\u0E01\u0E32\u0E23\u0E41\u0E2A\u0E14\u0E07\u0E23\u0E39\u0E1B\u0E25\u0E31\u0E01\u0E29\u0E13\u0E4C\u0E02\u0E2D\u0E07\u0E2D\u0E07\u0E04\u0E4C\u0E1B\u0E23\u0E30\u0E01\u0E2D\u0E1A +NodeGraphFunction.Degree.name=\u0E14\u0E35\u0E01\u0E23\u0E35 +NodeGraphFunction.InDegree.name=\u0E2D\u0E34\u0E19\u0E14\u0E35\u0E01\u0E23\u0E35 +NodeGraphFunction.OutDegree.name=\u0E40\u0E2D\u0E32\u0E15\u0E4C\u0E14\u0E35\u0E01\u0E23\u0E35 +EdgeGraphFunction.Type.name=\u0E1B\u0E23\u0E30\u0E40\u0E20\u0E17 +EdgeGraphFunction.Weight.name=\u0E19\u0E49\u0E33\u0E2B\u0E19\u0E31\u0E01 diff --git a/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_tr.properties b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_tr.properties new file mode 100644 index 0000000000..ceafebf940 --- /dev/null +++ b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_tr.properties @@ -0,0 +1,7 @@ +OpenIDE-Module-Long-Description=Gφrsel gφrόnόm elemanlar\u0131 API'si +OpenIDE-Module-Short-Description=Gφrsel gφrόnόm elemanlar\u0131 API'si +NodeGraphFunction.Degree.name=Degree +NodeGraphFunction.InDegree.name=In-Degree +NodeGraphFunction.OutDegree.name=Out-Degree +EdgeGraphFunction.Weight.name=A\u011f\u0131rl\u0131k +EdgeGraphFunction.Type.name=Tόr diff --git a/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_uk.properties b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_uk.properties new file mode 100644 index 0000000000..170193e4a1 --- /dev/null +++ b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_uk.properties @@ -0,0 +1,7 @@ +NodeGraphFunction.OutDegree.name=\u0412\u0438\u0445\u0456\u0434\u043D\u0438\u0439 \u0441\u0442\u0443\u043F\u0456\u043D\u044C +EdgeGraphFunction.Type.name=\u0422\u0438\u043F +OpenIDE-Module-Short-Description=API \u0434\u043B\u044F \u0432\u0456\u0437\u0443\u0430\u043B\u044C\u043D\u043E\u0433\u043E \u0432\u0438\u0433\u043B\u044F\u0434\u0443 \u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432 +NodeGraphFunction.InDegree.name=\u0406\u043D-\u0433\u0440\u0430\u0434\u0443\u0441 +EdgeGraphFunction.Weight.name=\u0412\u0430\u0433\u0430 +OpenIDE-Module-Long-Description=API \u0434\u043B\u044F \u0432\u0456\u0437\u0443\u0430\u043B\u044C\u043D\u043E\u0433\u043E \u0432\u0438\u0433\u043B\u044F\u0434\u0443 \u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432 +NodeGraphFunction.Degree.name=\u0421\u0442\u0443\u043F\u0456\u043D\u044C diff --git a/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_zh_CN.properties b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_zh_CN.properties new file mode 100644 index 0000000000..c6d2591b8e --- /dev/null +++ b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_zh_CN.properties @@ -0,0 +1,9 @@ +# OpenIDE-Module-Long-Description = API for the visual appearance of elements +# OpenIDE-Module-Short-Description = API for the visual appearance of elements +NodeGraphFunction.Degree.name=\u5ea6 +NodeGraphFunction.InDegree.name=\u8fde\u5165\u5ea6 +NodeGraphFunction.OutDegree.name=\u8fde\u51fa\u5ea6 +EdgeGraphFunction.Weight.name=\u8fb9\u7684\u6743\u91cd +EdgeGraphFunction.Type.name=\u7c7b\u578b +OpenIDE-Module-Short-Description=\u5143\u7D20\u89C6\u89C9\u5916\u89C2\u7684API +OpenIDE-Module-Long-Description=\u5143\u7D20\u89C6\u89C9\u5916\u89C2\u7684API diff --git a/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_zh_TW.properties b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_zh_TW.properties new file mode 100644 index 0000000000..ec101a92ea --- /dev/null +++ b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/Bundle_zh_TW.properties @@ -0,0 +1,7 @@ +OpenIDE-Module-Long-Description = \u8996\u89ba\u5143\u4ef6\u61c9\u7528\u7a0b\u5f0f\u4ecb\u9762 +OpenIDE-Module-Short-Description = \u8996\u89ba\u5143\u4ef6\u61c9\u7528\u7a0b\u5f0f\u4ecb\u9762 +NodeGraphFunction.Degree.name = \u5ea6 +NodeGraphFunction.InDegree.name = \u9023\u5165\u5ea6 +NodeGraphFunction.OutDegree.name = \u9023\u51fa\u5ea6 +EdgeGraphFunction.Weight.name = \u9023\u7d50\u6b0a\u91cd +EdgeGraphFunction.Type.name = \u9023\u7d50\u985e\u578b diff --git a/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/api/Bundle.properties b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/api/Bundle.properties deleted file mode 100644 index ed50dd12d7..0000000000 --- a/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/api/Bundle.properties +++ /dev/null @@ -1,5 +0,0 @@ -OpenIDE-Module-Display-Category=Gephi Core -OpenIDE-Module-Long-Description=\ - API for the visual appearance of elements -OpenIDE-Module-Name=Appearance API -OpenIDE-Module-Short-Description=API for the visual appearance of elements diff --git a/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/api/package.html b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/api/package.html new file mode 100644 index 0000000000..7b4bcfebd3 --- /dev/null +++ b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/api/package.html @@ -0,0 +1,18 @@ + + + + org.gephi.appearance.api + + +

+ API for manipulating element appearance. +

+

+ This API gives access to the available appearance functions. Functions + define how nodes or edges visual appearance should be transformed. + Functions are created automatically and users of this API can obtain them + via the org.gephi.appearance.api.AppearanceModel. +

+ + + diff --git a/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/spi/Bundle.properties b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/spi/Bundle.properties deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/spi/package.html b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/spi/package.html new file mode 100644 index 0000000000..3df0dbd8f6 --- /dev/null +++ b/modules/AppearanceAPI/src/main/resources/org/gephi/appearance/spi/package.html @@ -0,0 +1,27 @@ + + + + org.gephi.appearance.spi + + +

+ Interfaces that define the different ways the appearance of elements can + be transformed. +

+

+ The purpose of transformers is to change the appearance of elements + based on user parameters and column's values. There are three types + of transformers: simple, ranking and partition. The simple transformer + interface is defined in org.gephi.appearance.spi.SimpleTransformer. + The ranking and partition transformers are both based on the specific value + an element has in a given column. The ranking transformer work with + numerical, sorted values (e.g. age, number of followers) and the + partition transformer work with categorical values (e.g. community id, + gender). The ranking transformer is defined in org.gephi.appearance.spi.RankingTransformer + and the partition transformer in org.gephi.appearance.spi.PartitionTransformer. + Then, transformers can be associated with user interfaces elements + through the implementation of org.gephi.appearance.spi.TransformerUI. +

+ + + diff --git a/modules/AppearanceAPI/src/main/resources/overview.html b/modules/AppearanceAPI/src/main/resources/overview.html new file mode 100644 index 0000000000..bceecb1c92 --- /dev/null +++ b/modules/AppearanceAPI/src/main/resources/overview.html @@ -0,0 +1,22 @@ + + + + Appearance API + + +

+ Appearance API/SPI controls the visual transformations that can + be applied to nodes and edges. +

+

+ API provides access to the various functions that can be applied to + elements. Functions can be simple (e.g. unique color to all nodes) + but also based on a ranking for numerical sorted attributes or a + partition for categorical attributes. +

+

+ See org.gephi.appearance.spi package to know how to define + new transformers. +

+ + diff --git a/modules/AppearanceAPI/src/test/java/org.gephi.appearance/AppearanceControllerTest.java b/modules/AppearanceAPI/src/test/java/org.gephi.appearance/AppearanceControllerTest.java new file mode 100644 index 0000000000..289f859291 --- /dev/null +++ b/modules/AppearanceAPI/src/test/java/org.gephi.appearance/AppearanceControllerTest.java @@ -0,0 +1,269 @@ +package org.gephi.appearance; + +import java.awt.Color; +import java.util.Arrays; +import java.util.Optional; +import org.gephi.appearance.api.AttributeFunction; +import org.gephi.appearance.api.Function; +import org.gephi.appearance.api.Partition; +import org.gephi.appearance.api.Ranking; +import org.gephi.appearance.spi.PartitionTransformer; +import org.gephi.appearance.spi.RankingTransformer; +import org.gephi.appearance.spi.SimpleTransformer; +import org.gephi.appearance.spi.Transformer; +import org.gephi.graph.GraphGenerator; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Configuration; +import org.gephi.graph.api.Estimator; +import org.gephi.graph.api.GraphView; +import org.gephi.graph.api.Interval; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.TimeRepresentation; +import org.gephi.graph.api.types.TimestampDoubleMap; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.mockito.Spy; +import org.mockito.junit.MockitoJUnitRunner; +import org.netbeans.junit.MockServices; + +@RunWith(MockitoJUnitRunner.class) +public class AppearanceControllerTest { + + @Spy + AppearanceControllerImpl controller = new AppearanceControllerImpl(); + + @Test + public void testTransform() { + MockServices.setServices(FixedTransformer.class); + GraphGenerator generator = GraphGenerator.build().generateTinyGraph().addIntNodeColumn(); + + AppearanceModelImpl model = new AppearanceModelImpl(generator.getWorkspace()); + Mockito.doReturn(model).when(controller).getModel(); + + Assert.assertFalse(controller.getModel().isRankingLocalScale()); + + Node node = generator.getGraph().getNode(GraphGenerator.FIRST_NODE); + + Optional simpleFunction = Arrays.stream(controller.getModel().getNodeFunctions()).filter( + Function::isSimple).findFirst(); + Assert.assertTrue(simpleFunction.isPresent()); + + Optional rankingFunction = + Arrays.stream(controller.getModel().getNodeFunctions()).filter(f -> f.isRanking() && f.isAttribute()) + .findFirst(); + Assert.assertTrue(rankingFunction.isPresent()); + + Optional partitionFunction = Arrays.stream(controller.getModel().getNodeFunctions()).filter( + Function::isPartition).findFirst(); + Assert.assertTrue(partitionFunction.isPresent()); + + controller.transform(simpleFunction.get()); + Assert.assertEquals(Color.PINK, node.getColor()); + + controller.transform(rankingFunction.get()); + Assert.assertEquals(0, (int) node.size()); + + controller.transform(partitionFunction.get()); + Assert.assertEquals(Color.CYAN, node.getColor()); + } + + @Test + public void testFilteredView() { + MockServices.setServices(FixedTransformer.class); + GraphGenerator generator = GraphGenerator.build().generateTinyGraph().addIntNodeColumn(); + + AppearanceModelImpl model = new AppearanceModelImpl(generator.getWorkspace()); + Mockito.doReturn(model).when(controller).getModel(); + + Node node1 = generator.getGraph().getNode(GraphGenerator.FIRST_NODE); + Node node2 = generator.getGraph().getNode(GraphGenerator.SECOND_NODE); + + Function simpleFunction = Arrays.stream(controller.getModel().getNodeFunctions()).filter( + Function::isSimple).findFirst().get(); + + GraphView view = generator.getGraphModel().createView(true, false); + view.getGraphModel().getGraph(view).addNode(node1); + generator.getGraphModel().setVisibleView(view); + + controller.transform(simpleFunction); + + Assert.assertEquals(Color.PINK, node1.getColor()); + Assert.assertNotEquals(Color.PINK, node2.getColor()); + } + + @Test + public void testLocalScale() { + MockServices.setServices(FixedTransformer.class); + GraphGenerator generator = GraphGenerator.build().generateTinyGraph().addIntNodeColumn(); + + AppearanceModelImpl model = new AppearanceModelImpl(generator.getWorkspace()); + Mockito.doReturn(model).when(controller).getModel(); + + Node node1 = generator.getGraph().getNode(GraphGenerator.FIRST_NODE); + Node node2 = generator.getGraph().getNode(GraphGenerator.SECOND_NODE); + int age1 = (Integer) node1.getAttribute(GraphGenerator.INT_COLUMN); + int age2 = (Integer) node2.getAttribute(GraphGenerator.INT_COLUMN); + node1.setSize(42f); + Assert.assertTrue(age2 > age1); + + Function rankingFunction = + Arrays.stream(controller.getModel().getNodeFunctions()).filter(f -> f.isRanking() && f.isAttribute()) + .findFirst().get(); + + GraphView view = generator.getGraphModel().createView(true, false); + view.getGraphModel().getGraph(view).addNode(node1); + generator.getGraphModel().setVisibleView(view); + + controller.transform(rankingFunction); + Assert.assertEquals(0, (int) node1.size()); + + controller.setUseRankingLocalScale(true); + controller.transform(rankingFunction); + Assert.assertEquals(1, (int) node1.size()); + } + + @Test + public void testTransformNullValuesRanking() { + MockServices.setServices(FixedTransformer.class); + GraphGenerator generator = GraphGenerator.build().generateTinyGraph().addIntNodeColumn(); + + AppearanceModelImpl model = new AppearanceModelImpl(generator.getWorkspace()); + Mockito.doReturn(model).when(controller).getModel(); + controller.setTransformNullValues(true); + + Node node = generator.getGraph().getNode(GraphGenerator.FIRST_NODE); + node.clearAttributes(); + node.setSize(42f); + + Function rankingFunction = + Arrays.stream(controller.getModel().getNodeFunctions()).filter(f -> f.isRanking() && f.isAttribute()) + .findFirst().get(); + controller.transform(rankingFunction); + Assert.assertEquals(0f, node.size(), 0); + } + + @Test + public void testNotTransformNullValuesRanking() { + MockServices.setServices(FixedTransformer.class); + GraphGenerator generator = GraphGenerator.build().generateTinyGraph().addIntNodeColumn(); + + AppearanceModelImpl model = new AppearanceModelImpl(generator.getWorkspace()); + Mockito.doReturn(model).when(controller).getModel(); + controller.setTransformNullValues(false); + + Node node = generator.getGraph().getNode(GraphGenerator.FIRST_NODE); + node.clearAttributes(); + node.setSize(42f); + + Function rankingFunction = + Arrays.stream(controller.getModel().getNodeFunctions()).filter(f -> f.isRanking() && f.isAttribute()) + .findFirst().get(); + controller.transform(rankingFunction); + Assert.assertEquals(42f, node.size(), 0); + } + + @Test + public void testTransformNullValuesPartition() { + MockServices.setServices(FixedTransformer.class); + GraphGenerator generator = GraphGenerator.build().generateSmallRandomGraph().addIntNodeColumn(); + + AppearanceModelImpl model = new AppearanceModelImpl(generator.getWorkspace()); + Mockito.doReturn(model).when(controller).getModel(); + controller.setTransformNullValues(true); + + Node node = generator.getGraph().getNode(GraphGenerator.FIRST_NODE); + node.clearAttributes(); + node.setColor(Color.GREEN); + + Optional partitionFunction = Arrays.stream(controller.getModel().getNodeFunctions()).filter( + Function::isPartition).findFirst(); + controller.transform(partitionFunction.get()); + Assert.assertEquals(Color.CYAN, node.getColor()); + } + + @Test + public void testNotTransformNullValuesPartition() { + MockServices.setServices(FixedTransformer.class); + GraphGenerator generator = GraphGenerator.build().generateSmallRandomGraph().addIntNodeColumn(); + + AppearanceModelImpl model = new AppearanceModelImpl(generator.getWorkspace()); + Mockito.doReturn(model).when(controller).getModel(); + controller.setTransformNullValues(false); + + Node node = generator.getGraph().getNode(GraphGenerator.FIRST_NODE); + node.clearAttributes(); + node.setColor(Color.GREEN); + + Optional partitionFunction = Arrays.stream(controller.getModel().getNodeFunctions()).filter( + Function::isPartition).findFirst(); + controller.transform(partitionFunction.get()); + Assert.assertEquals(Color.GREEN, node.getColor()); + } + + @Test + public void testRankingDynamicColumn() { + MockServices.setServices(FixedTransformer.class); + GraphGenerator generator = + GraphGenerator.build(Configuration.builder().timeRepresentation(TimeRepresentation.TIMESTAMP).build()).generateTinyGraph().addTimestampDoubleColumn(); + + AppearanceModelImpl model = new AppearanceModelImpl(generator.getWorkspace()); + Mockito.doReturn(model).when(controller).getModel(); + Column col = generator.getGraphModel().getNodeTable().getColumn(GraphGenerator.TIMESTAMP_DOUBLE_COLUMN); + + Node node1 = generator.getGraph().getNode(GraphGenerator.FIRST_NODE); + TimestampDoubleMap ts = new TimestampDoubleMap(new double[] {2000, 2004, 2008}, new double[] {0, 500, 1000}); + node1.setAttribute(col, ts); + + Function rankingFunction = + Arrays.stream(controller.getModel().getNodeFunctions()).filter(f -> f.isRanking() && f.isAttribute() + && ((AttributeFunction) f).getColumn() == col) + .findFirst().get(); + + GraphView view = generator.getGraphModel().createView(true, false); + view.getGraphModel().getGraph(view).fill(); + generator.getGraphModel().setVisibleView(view); + + controller.transform(rankingFunction); + Assert.assertEquals(0, (int) node1.size()); + + col.setEstimator(Estimator.MAX); + controller.transform(rankingFunction); + Assert.assertEquals(1, (int) node1.size()); + + view.getGraphModel().setTimeInterval(view, new Interval(2000, 2000)); + controller.transform(rankingFunction); + Assert.assertEquals(0, (int) node1.size()); + } + + public static class FixedTransformer implements Transformer, RankingTransformer, + PartitionTransformer, + SimpleTransformer { + + @Override + public boolean isNode() { + return true; + } + + @Override + public boolean isEdge() { + return false; + } + + @Override + public void transform(Node node, Partition partition, Object value) { + node.setColor(Color.CYAN); + } + + @Override + public void transform(Node node, Ranking ranking, Number value, float normalisedValue) { + node.setSize(normalisedValue); + } + + @Override + public void transform(Node node) { + node.setColor(Color.PINK); + } + } +} diff --git a/modules/AppearanceAPI/src/test/java/org.gephi.appearance/AppearanceModelTest.java b/modules/AppearanceAPI/src/test/java/org.gephi.appearance/AppearanceModelTest.java new file mode 100644 index 0000000000..3836aa92f8 --- /dev/null +++ b/modules/AppearanceAPI/src/test/java/org.gephi.appearance/AppearanceModelTest.java @@ -0,0 +1,168 @@ +package org.gephi.appearance; + +import java.util.Arrays; +import org.gephi.appearance.api.AppearanceModel; +import org.gephi.appearance.api.AttributeFunction; +import org.gephi.appearance.api.Function; +import org.gephi.appearance.api.GraphFunction; +import org.gephi.appearance.api.Partition; +import org.gephi.appearance.api.PartitionFunction; +import org.gephi.appearance.api.Ranking; +import org.gephi.appearance.spi.PartitionTransformer; +import org.gephi.appearance.spi.RankingTransformer; +import org.gephi.appearance.spi.SimpleTransformer; +import org.gephi.appearance.spi.Transformer; +import org.gephi.graph.GraphGenerator; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.GraphView; +import org.junit.Assert; +import org.junit.Test; +import org.netbeans.junit.MockServices; + +public class AppearanceModelTest { + + @Test + public void testDefaultPartition() { + GraphGenerator generator = GraphGenerator.build().generateTinyGraph().addIntNodeColumn(); + AppearanceModelImpl model = new AppearanceModelImpl(generator.getWorkspace()); + + Column idCol = generator.getGraphModel().getNodeTable().getColumn("id"); + Assert.assertNull(model.getNodePartition(idCol)); + + Column ageCol = generator.getGraphModel().getNodeTable().getColumn("id"); + Assert.assertNull(model.getNodePartition(ageCol)); + + Assert.assertNotNull(model.getDegreeRanking()); + } + + @Test + public void testPartitionColumnCreation() { + MockServices.setServices(DummyTransformer.class); + GraphGenerator generator = GraphGenerator.build().generateTinyGraph().addIntNodeColumn(); + AppearanceModelImpl model = new AppearanceModelImpl(generator.getWorkspace()); + + Column ageCol = generator.getGraphModel().getNodeTable().getColumn(GraphGenerator.INT_COLUMN); + Assert.assertNotNull(model.getNodePartition(ageCol)); + + Partition partition = model.getNodePartition(ageCol); + Assert.assertEquals(generator.getGraph().getNodeCount(), partition.getElementCount(generator.getGraph())); + } + + @Test + public void testPartitionCleanup() { + MockServices.setServices(DummyTransformer.class); + GraphGenerator generator = GraphGenerator.build().generateTinyGraph().addIntNodeColumn(); + AppearanceModelImpl model = new AppearanceModelImpl(generator.getWorkspace()); + model.getNodeFunctions(); + + Assert.assertEquals(2, model.countNodeAttributeRanking()); + + generator.getGraphModel().getNodeTable().removeColumn(GraphGenerator.INT_COLUMN); + + // Trigger cleanup by calling getNodeFunctions() which calls cleanAttributeRankingsAndPartitions() + model.getNodeFunctions(); + + Assert.assertEquals(1, model.countNodeAttributeRanking()); + } + + @Test + public void testRemoveColumn() { + MockServices.setServices(DummyTransformer.class); + GraphGenerator generator = GraphGenerator.build().generateTinyGraph().addIntNodeColumn(); + AppearanceModelImpl model = new AppearanceModelImpl(generator.getWorkspace()); + Column col = model.getGraphModel().getNodeTable().getColumn(GraphGenerator.INT_COLUMN); + Function function = Arrays.stream(model.getNodeFunctions()).filter(f -> f.isPartition()).findFirst().get(); + Partition partition = ((PartitionFunction)function).getPartition(); + + Assert.assertFalse(partition.getValues(model.getGraphModel().getGraph()).isEmpty()); + model.getGraphModel().getNodeTable().removeColumn(col); + Assert.assertFalse(function.isValid()); + } + + @Test + public void testHasChanged() { + MockServices.setServices(DummyTransformer.class); + GraphGenerator generator = GraphGenerator.build().generateTinyGraph().addIntNodeColumn(); + AppearanceModelImpl model = new AppearanceModelImpl(generator.getWorkspace()); + Function function = + Arrays.stream(model.getNodeFunctions()).filter(f -> f.isPartition() && f.isAttribute()).findFirst().get(); + + Assert.assertFalse(function.hasChanged()); + GraphView view = generator.getGraphModel().createView(); + generator.getGraphModel().setVisibleView(view); + Assert.assertFalse(function.hasChanged()); + + model.setPartitionLocalScale(true); + Assert.assertTrue(function.hasChanged()); + Assert.assertFalse(function.hasChanged()); + } + + @Test + public void testNodeFunctionsDegree() { + MockServices.setServices(DummyTransformer.class); + GraphGenerator generator = GraphGenerator.build().generateTinyGraph().addIntNodeColumn(); + AppearanceModelImpl model = new AppearanceModelImpl(generator.getWorkspace()); + + Column col = generator.getGraphModel().defaultColumns().degree(); + Function function = model.getNodeFunction(col, DummyTransformer.class); + Assert.assertNotNull(function); + Assert.assertTrue(function instanceof GraphFunction); + Assert + .assertEquals(AppearanceModel.GraphFunction.NODE_DEGREE, ((GraphFunctionImpl) function).getGraphFunction()); + } + + @Test + public void testNodeFunctionsAttribute() { + MockServices.setServices(DummyTransformer.class); + GraphGenerator generator = GraphGenerator.build().generateTinyGraph().addIntNodeColumn(); + AppearanceModelImpl model = new AppearanceModelImpl(generator.getWorkspace()); + + Column col = generator.getGraphModel().getNodeTable().getColumn(GraphGenerator.INT_COLUMN); + Function function = model.getNodeFunction(col, DummyTransformer.class); + Assert.assertNotNull(function); + Assert.assertTrue(function.isAttribute()); + Assert.assertEquals(col, ((AttributeFunction) function).getColumn()); + } + + @Test + public void testEdgeFunctionsWeight() { + MockServices.setServices(DummyTransformer.class); + GraphGenerator generator = GraphGenerator.build().generateTinyGraph().addIntNodeColumn(); + AppearanceModelImpl model = new AppearanceModelImpl(generator.getWorkspace()); + + Column col = generator.getGraphModel().getEdgeTable().getColumn("weight"); + Function function = model.getEdgeFunction(col, DummyTransformer.class); + Assert + .assertEquals(AppearanceModel.GraphFunction.EDGE_WEIGHT, ((GraphFunctionImpl) function).getGraphFunction()); + } + + public static class DummyTransformer implements Transformer, RankingTransformer, PartitionTransformer, + SimpleTransformer { + + @Override + public boolean isNode() { + return true; + } + + @Override + public boolean isEdge() { + return true; + } + + @Override + public void transform(Element element, Partition partition, Object value) { + + } + + @Override + public void transform(Element element, Ranking ranking, Number value, float normalisedValue) { + + } + + @Override + public void transform(Element element) { + + } + } +} diff --git a/modules/AppearanceAPI/src/test/java/org.gephi.appearance/AttributePartitionTest.java b/modules/AppearanceAPI/src/test/java/org.gephi.appearance/AttributePartitionTest.java new file mode 100644 index 0000000000..e40bb2351b --- /dev/null +++ b/modules/AppearanceAPI/src/test/java/org.gephi.appearance/AttributePartitionTest.java @@ -0,0 +1,191 @@ +/* + Copyright 2008-2013 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2013 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2013 Gephi Consortium. + */ + +package org.gephi.appearance; + +import java.awt.Color; +import java.util.Collection; +import org.gephi.graph.GraphGenerator; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Configuration; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.TimeRepresentation; +import org.junit.Assert; +import org.junit.Test; + +public class AttributePartitionTest { + + private static void clearNodeAttributes(Graph graph) { + for (Node n : graph.getNodes()) { + n.clearAttributes(); + } + } + + @Test + public void testEmpty() { + Graph graph = GraphGenerator.build().addIntNodeColumn().getGraph(); + Column column = graph.getModel().getNodeTable().getColumn(GraphGenerator.INT_COLUMN); + AttributePartitionImpl attributePartition = new AttributePartitionImpl(column); + + Assert.assertEquals(0, attributePartition.getElementCount(graph)); + Assert.assertEquals(0, attributePartition.getValues(graph).size()); + Assert.assertEquals(0, attributePartition.getSortedValues(graph).size()); + Assert.assertEquals(0, attributePartition.size(graph)); + } + + @Test + public void testIntColumn() { + Graph graph = GraphGenerator.build().generateTinyGraph().addIntNodeColumn().getGraph(); + Column column = graph.getModel().getNodeTable().getColumn(GraphGenerator.INT_COLUMN); + + AttributePartitionImpl p = new AttributePartitionImpl(column); + Assert.assertEquals(graph.getNodeCount(), p.getElementCount(graph)); + Assert.assertEquals(graph.getNodeCount(), p.getValues(graph).size()); + Assert.assertNotNull(p.getValue(graph.getNodes().toArray()[0], graph)); + } + + @Test + public void testIsValidStringColumn() { + Graph graph = GraphGenerator.build().generateTinyGraph().addStringNodeColumn().getGraph(); + Column column = graph.getModel().getNodeTable().getColumn(GraphGenerator.STRING_COLUMN); + + AttributePartitionImpl p = new AttributePartitionImpl(column); + Assert.assertTrue(p.isValid(graph)); + + clearNodeAttributes(graph); + Assert.assertTrue(p.isValid(graph)); + } + + @Test + public void testIsValidIntColumn() { + Graph graph = GraphGenerator.build().generateTinyGraph().addIntNodeColumn().getGraph(); + Column column = graph.getModel().getNodeTable().getColumn(GraphGenerator.INT_COLUMN); + + AttributePartitionImpl p = new AttributePartitionImpl(column); + Assert.assertTrue(p.isValid(graph)); + + clearNodeAttributes(graph); + Assert.assertTrue(p.isValid(graph)); + } + + @Test + public void testStringArrayColumn() { + Graph graph = GraphGenerator.build().generateTinyGraph().addStringArrayNodeColumn().getGraph(); + Column column = graph.getModel().getNodeTable().getColumn(GraphGenerator.STRING_ARRAY_COLUMN); + + AttributePartitionImpl p = new AttributePartitionImpl(column); + Assert.assertEquals(graph.getNodeCount(), p.getElementCount(graph)); + Assert.assertEquals(graph.getNodeCount(), p.getValues(graph).size()); + Assert.assertArrayEquals(GraphGenerator.STRING_ARRAY_COLUMN_VALUES, p.getValues(graph).toArray()); + } + + @Test + public void testVersion() { + Graph graph = GraphGenerator.build().generateTinyGraph().addIntNodeColumn().getGraph(); + Column column = graph.getModel().getNodeTable().getColumn(GraphGenerator.INT_COLUMN); + Node n1 = graph.getNode(GraphGenerator.FIRST_NODE); + + AttributePartitionImpl p = new AttributePartitionImpl(column); + int version = p.getVersion(graph); + n1.setAttribute(column, 99); + Assert.assertNotEquals(version, version = p.getVersion(graph)); + Assert.assertEquals(version, p.getVersion(graph)); + + graph.removeNode(n1); + Assert.assertNotEquals(version, p.getVersion(graph)); + } + + @Test + public void testVersionDynamic() { + Graph graph = GraphGenerator.build(Configuration.builder().timeRepresentation(TimeRepresentation.TIMESTAMP).build()).generateTinyGraph().addTimestampDoubleColumn().getGraph(); + Column column = graph.getModel().getNodeTable().getColumn(GraphGenerator.TIMESTAMP_DOUBLE_COLUMN); + Node n1 = graph.getNode(GraphGenerator.FIRST_NODE); + + AttributePartitionImpl p = new AttributePartitionImpl(column); + int version = p.getVersion(graph); + n1.setAttribute(column, 99.0, 2000); + Assert.assertNotEquals(version, p.getVersion(graph)); + } + + @Test + public void testNullValues() { + Graph graph = GraphGenerator.build().generateTinyGraph().addIntNodeColumn().getGraph(); + Column column = graph.getModel().getNodeTable().getColumn(GraphGenerator.INT_COLUMN); + + AttributePartitionImpl p = new AttributePartitionImpl(column); + Assert.assertEquals(AttributePartitionImpl.DEFAULT_COLOR, p.getColor(null)); + + p.setColor(null, Color.BLUE); + Assert.assertEquals(Color.BLUE, p.getColor(null)); + } + + @Test + public void testNullValuesValues() { + Graph graph = GraphGenerator.build().generateSmallRandomGraph().addIntNodeColumn().getGraph(); + Column column = graph.getModel().getNodeTable().getColumn(GraphGenerator.INT_COLUMN); + + Node n1 = graph.getNode(GraphGenerator.FIRST_NODE); + n1.setAttribute(column, null); + + AttributePartitionImpl p = new AttributePartitionImpl(column); + Assert.assertTrue(p.getValues(graph).contains(null)); + Assert.assertTrue(p.getSortedValues(graph).contains(null)); + } + + @Test + public void testSetColors() { + Graph graph = GraphGenerator.build().generateSmallRandomGraph().addIntNodeColumn().getGraph(); + Column column = graph.getModel().getNodeTable().getColumn(GraphGenerator.INT_COLUMN); + + Node n1 = graph.getNode(GraphGenerator.FIRST_NODE); + Node n2 = graph.getNode(GraphGenerator.SECOND_NODE); + + n1.setAttribute(column, 42); + n2.setAttribute(column, 42); + + AttributePartitionImpl p = new AttributePartitionImpl(column); + p.setColors(graph, new Color[] {Color.MAGENTA, Color.BLUE}); + + Assert.assertEquals(Color.MAGENTA, p.getColor(42)); + } +} diff --git a/modules/AppearanceAPI/src/test/java/org.gephi.appearance/AttributeRankingTest.java b/modules/AppearanceAPI/src/test/java/org.gephi.appearance/AttributeRankingTest.java new file mode 100644 index 0000000000..25139c95d0 --- /dev/null +++ b/modules/AppearanceAPI/src/test/java/org.gephi.appearance/AttributeRankingTest.java @@ -0,0 +1,85 @@ +package org.gephi.appearance; + +import org.gephi.graph.GraphGenerator; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Configuration; +import org.gephi.graph.api.Estimator; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.TimeRepresentation; +import org.junit.Assert; +import org.junit.Test; + +public class AttributeRankingTest { + + @Test + public void testEmpty() { + Graph graph = GraphGenerator.build().addIntNodeColumn().getGraph(); + Column column = graph.getModel().getNodeTable().getColumn(GraphGenerator.INT_COLUMN); + AttributeRankingImpl attributeRanking = new AttributeRankingImpl(column); + + Assert.assertNull(attributeRanking.getMinValue(graph)); + Assert.assertNull(attributeRanking.getMaxValue(graph)); + } + + @Test + public void testTwoNodes() { + Graph graph = GraphGenerator.build().generateTinyGraph().addIntNodeColumn().getGraph(); + Column column = graph.getModel().getNodeTable().getColumn(GraphGenerator.INT_COLUMN); + AttributeRankingImpl attributeRanking = new AttributeRankingImpl(column); + + Assert.assertEquals(GraphGenerator.INT_COLUMN_MIN_VALUE, attributeRanking.getMinValue(graph)); + Assert.assertEquals(GraphGenerator.INT_COLUMN_MIN_VALUE + 1, attributeRanking.getMaxValue(graph)); + + Node n1 = graph.getNode(GraphGenerator.FIRST_NODE); + Node n2 = graph.getNode(GraphGenerator.SECOND_NODE); + + Assert.assertEquals(GraphGenerator.INT_COLUMN_MIN_VALUE, attributeRanking.getValue(n1, graph)); + Assert.assertEquals(0f, attributeRanking.getNormalizedValue(n1, graph), 0); + Assert.assertEquals(1f, attributeRanking.getNormalizedValue(n2, graph), 0); + } + + @Test + public void testIsValidStringColumn() { + Graph graph = GraphGenerator.build().generateTinyGraph().addStringNodeColumn().getGraph(); + Column column = graph.getModel().getNodeTable().getColumn(GraphGenerator.STRING_COLUMN); + + AttributeRankingImpl p = new AttributeRankingImpl(column); + Assert.assertFalse(p.isValid(graph)); + } + + @Test + public void testIsValidIntColumn() { + Graph graph = GraphGenerator.build().generateTinyGraph().addIntNodeColumn().getGraph(); + Column column = graph.getModel().getNodeTable().getColumn(GraphGenerator.INT_COLUMN); + + AttributeRankingImpl p = new AttributeRankingImpl(column); + Assert.assertTrue(p.isValid(graph)); + } + + @Test + public void testArrayColumnNotValid() { + Graph graph = GraphGenerator.build().generateTinyGraph().addFloatArrayNodeColumn().getGraph(); + Column column = graph.getModel().getNodeTable().getColumn(GraphGenerator.FLOAT_ARRAY_COLUMN); + + AttributeRankingImpl p = new AttributeRankingImpl(column); + Assert.assertFalse(p.isValid(graph)); + } + + @Test + public void testDynamicTimestampColumn() { + Graph graph = GraphGenerator.build(Configuration.builder().timeRepresentation(TimeRepresentation.TIMESTAMP).build()).generateTinyGraph().addTimestampDoubleColumn().getGraph(); + Column column = graph.getModel().getNodeTable().getColumn(GraphGenerator.TIMESTAMP_DOUBLE_COLUMN); + + AttributeRankingImpl p = new AttributeRankingImpl(column); + Assert.assertTrue(p.isValid(graph)); + + + Assert.assertEquals(GraphGenerator.TIMESTAMP_DOUBLE_COLUMN_VALUES[0][0], p.getMinValue(graph)); + Assert.assertEquals(GraphGenerator.TIMESTAMP_DOUBLE_COLUMN_VALUES[1][0], p.getMaxValue(graph)); + + Node n1 = graph.getNode(GraphGenerator.FIRST_NODE); + + Assert.assertEquals(GraphGenerator.TIMESTAMP_DOUBLE_COLUMN_VALUES[0][0], p.getValue(n1, graph)); + } +} diff --git a/modules/AppearanceAPI/src/test/java/org.gephi.appearance/DegreeRankingTest.java b/modules/AppearanceAPI/src/test/java/org.gephi.appearance/DegreeRankingTest.java new file mode 100644 index 0000000000..5176cc8ba8 --- /dev/null +++ b/modules/AppearanceAPI/src/test/java/org.gephi.appearance/DegreeRankingTest.java @@ -0,0 +1,71 @@ +package org.gephi.appearance; + +import org.gephi.appearance.api.Interpolator; +import org.gephi.graph.GraphGenerator; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Node; +import org.junit.Assert; +import org.junit.Test; + +public class DegreeRankingTest { + + @Test + public void testEmpty() { + Graph graph = GraphGenerator.build().getGraph(); + Column col = graph.getModel().defaultColumns().degree(); + DegreeRankingImpl degreeRanking = new DegreeRankingImpl(col); + + Assert.assertNull(degreeRanking.getMinValue(graph)); + Assert.assertNull(degreeRanking.getMaxValue(graph)); + } + + @Test + public void testInterpolator() { + Graph graph = GraphGenerator.build().getGraph(); + Column col = graph.getModel().defaultColumns().degree(); + DegreeRankingImpl degreeRanking = new DegreeRankingImpl(col); + + Assert.assertSame(Interpolator.LINEAR, degreeRanking.getInterpolator()); + degreeRanking.setInterpolator(Interpolator.LOG2); + Assert.assertSame(Interpolator.LOG2, degreeRanking.getInterpolator()); + } + + @Test + public void testOneEdge() { + Graph graph = GraphGenerator.build().generateTinyGraph().getGraph(); + Column col = graph.getModel().defaultColumns().degree(); + DegreeRankingImpl degreeRanking = new DegreeRankingImpl(col); + + Assert.assertEquals(1, degreeRanking.getMinValue(graph)); + Assert.assertEquals(1, degreeRanking.getMaxValue(graph)); + + Node node = graph.getNode(GraphGenerator.FIRST_NODE); + Assert.assertEquals(1, degreeRanking.getValue(node, graph)); + Assert.assertEquals(1f, degreeRanking.getNormalizedValue(node, graph), 0); + } + + @Test + public void testNormalization() { + Graph graph = GraphGenerator.build().generateSmallRandomGraph().getGraph(); + Column col = graph.getModel().defaultColumns().degree(); + DegreeRankingImpl degreeRanking = new DegreeRankingImpl(col); + + int minDegree = degreeRanking.getMinValue(graph).intValue(); + int maxDegree = degreeRanking.getMaxValue(graph).intValue(); + + for(Node node : graph.getNodes()) { + int degree = degreeRanking.getValue(node, graph).intValue(); + float normalizedDegree = degreeRanking.getNormalizedValue(node, graph); + if(degree == minDegree) { + Assert.assertEquals(0f, normalizedDegree, 0); + } else if(degree == maxDegree) { + Assert.assertEquals(1f, normalizedDegree, 0); + } else { + Assert.assertNotEquals(minDegree, normalizedDegree); + Assert.assertNotEquals(maxDegree, normalizedDegree); + } + } + } + +} diff --git a/modules/AppearanceAPI/src/test/java/org.gephi.appearance/EdgeTypePartitionTest.java b/modules/AppearanceAPI/src/test/java/org.gephi.appearance/EdgeTypePartitionTest.java new file mode 100644 index 0000000000..c5df2b0f4a --- /dev/null +++ b/modules/AppearanceAPI/src/test/java/org.gephi.appearance/EdgeTypePartitionTest.java @@ -0,0 +1,78 @@ +package org.gephi.appearance; + +import org.gephi.graph.GraphGenerator; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Node; +import org.gephi.graph.impl.GraphStoreConfiguration; +import org.junit.Assert; +import org.junit.Test; + +public class EdgeTypePartitionTest { + + @Test + public void testEmpty() { + Graph graph = GraphGenerator.build().getGraph(); + Column col = graph.getModel().defaultColumns().edgeType(); + EdgeTypePartitionImpl typePartition = new EdgeTypePartitionImpl(col, GraphStoreConfiguration.DEFAULT_EDGE_LABEL_TYPE); + + Assert.assertEquals(0, typePartition.getElementCount(graph)); + Assert.assertEquals(0, typePartition.getValues(graph).size()); + Assert.assertEquals(0, typePartition.getSortedValues(graph).size()); + Assert.assertEquals(0, typePartition.size(graph)); + } + + @Test + public void testSimpleGraph() { + Graph graph = GraphGenerator.build().generateTinyGraph().getGraph(); + Column col = graph.getModel().defaultColumns().edgeType(); + EdgeTypePartitionImpl typePartition = new EdgeTypePartitionImpl(col, GraphStoreConfiguration.DEFAULT_EDGE_LABEL_TYPE); + + Assert.assertEquals(1, typePartition.getElementCount(graph)); + Assert.assertEquals(1, typePartition.getValues(graph).size()); + Assert.assertEquals(1, typePartition.getSortedValues(graph).size()); + Assert.assertEquals(1, typePartition.size(graph)); + } + + @Test + public void testMultiGraph() { + Graph graph = GraphGenerator.build().generateTinyMultiGraph().getGraph(); + Column col = graph.getModel().defaultColumns().edgeType(); + EdgeTypePartitionImpl typePartition = new EdgeTypePartitionImpl(col, GraphStoreConfiguration.DEFAULT_EDGE_LABEL_TYPE); + + Assert.assertEquals(2, typePartition.getElementCount(graph)); + Assert.assertEquals(2, typePartition.getValues(graph).size()); + Assert.assertEquals(2, typePartition.getSortedValues(graph).size()); + Assert.assertEquals(2, typePartition.size(graph)); + } + + @Test + public void testIsValid() { + Graph graph = GraphGenerator.build().generateTinyMultiGraph().getGraph(); + Column col = graph.getModel().defaultColumns().edgeType(); + EdgeTypePartitionImpl typePartition = new EdgeTypePartitionImpl(col, GraphStoreConfiguration.DEFAULT_EDGE_LABEL_TYPE); + Assert.assertTrue(typePartition.isValid(graph)); + } + + @Test + public void testIsNotValid() { + Graph graph = GraphGenerator.build().generateTinyGraph().getGraph(); + Column col = graph.getModel().defaultColumns().edgeType(); + EdgeTypePartitionImpl typePartition = new EdgeTypePartitionImpl(col, GraphStoreConfiguration.DEFAULT_EDGE_LABEL_TYPE); + Assert.assertFalse(typePartition.isValid(graph)); + } + + @Test + public void testVersion() { + Graph graph = GraphGenerator.build().generateTinyMultiGraph().getGraph(); + Column col = graph.getModel().defaultColumns().edgeType(); + EdgeTypePartitionImpl p = new EdgeTypePartitionImpl(col, GraphStoreConfiguration.DEFAULT_EDGE_LABEL_TYPE); + Edge e2 = graph.getEdge(GraphGenerator.SECOND_EDGE); + + int version = p.getVersion(graph); + graph.removeEdge(e2); + Assert.assertNotEquals(version, version = p.getVersion(graph)); + Assert.assertEquals(version, p.getVersion(graph)); + } +} diff --git a/modules/AppearanceAPI/src/test/java/org.gephi.appearance/EdgeWeightRankingTest.java b/modules/AppearanceAPI/src/test/java/org.gephi.appearance/EdgeWeightRankingTest.java new file mode 100644 index 0000000000..10fab55fb2 --- /dev/null +++ b/modules/AppearanceAPI/src/test/java/org.gephi.appearance/EdgeWeightRankingTest.java @@ -0,0 +1,31 @@ +package org.gephi.appearance; + +import org.gephi.graph.GraphGenerator; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Graph; +import org.junit.Assert; +import org.junit.Test; + +public class EdgeWeightRankingTest { + + @Test + public void testEmpty() { + Graph graph = GraphGenerator.build().getGraph(); + EdgeWeightRankingImpl weightRanking = new EdgeWeightRankingImpl(); + + Assert.assertNull(weightRanking.getMinValue(graph)); + Assert.assertNull(weightRanking.getMaxValue(graph)); + } + + @Test + public void testOneEdge() { + Graph graph = GraphGenerator.build().generateTinyGraph().getGraph(); + EdgeWeightRankingImpl weightRanking = new EdgeWeightRankingImpl(); + + Assert.assertEquals(1.0, weightRanking.getMinValue(graph).doubleValue(), 0); + Assert.assertEquals(1.0, weightRanking.getMaxValue(graph).doubleValue(), 0); + + Edge edge = graph.getEdge(GraphGenerator.FIRST_EDGE); + Assert.assertEquals(1.0, weightRanking.getValue(edge, graph).doubleValue(), 0); + } +} diff --git a/modules/AppearanceAPI/src/test/java/org.gephi.appearance/InterpolatorTest.java b/modules/AppearanceAPI/src/test/java/org.gephi.appearance/InterpolatorTest.java new file mode 100644 index 0000000000..a62a658e60 --- /dev/null +++ b/modules/AppearanceAPI/src/test/java/org.gephi.appearance/InterpolatorTest.java @@ -0,0 +1,93 @@ +package org.gephi.appearance; + +import org.gephi.appearance.api.Interpolator; +import org.junit.Assert; +import org.junit.Test; + +public class InterpolatorTest { + + // ---- toString ---- + + @Test + public void testLinearToString() { + Assert.assertEquals("LINEAR", Interpolator.LINEAR.toString()); + } + + @Test + public void testLog2ToString() { + Assert.assertEquals("LOG2", Interpolator.LOG2.toString()); + } + + @Test + public void testBezierToString() { + Interpolator.BezierInterpolator bi = new Interpolator.BezierInterpolator(0.1f, 0.2f, 0.8f, 0.9f); + Assert.assertEquals("BEZIER:0.1,0.2,0.8,0.9", bi.toString()); + } + + // ---- fromString ---- + + @Test + public void testFromStringLinear() { + Assert.assertSame(Interpolator.LINEAR, Interpolator.fromString("LINEAR")); + } + + @Test + public void testFromStringLog2() { + Assert.assertSame(Interpolator.LOG2, Interpolator.fromString("LOG2")); + } + + @Test + public void testFromStringNull() { + Assert.assertSame(Interpolator.LINEAR, Interpolator.fromString(null)); + } + + @Test + public void testFromStringEmpty() { + Assert.assertSame(Interpolator.LINEAR, Interpolator.fromString("")); + } + + @Test + public void testFromStringUnknown() { + Assert.assertSame(Interpolator.LINEAR, Interpolator.fromString("UNKNOWN")); + } + + @Test + public void testFromStringMalformedBezier() { + Assert.assertSame(Interpolator.LINEAR, Interpolator.fromString("BEZIER:not,valid")); + } + + @Test + public void testFromStringBezier() { + Interpolator result = Interpolator.fromString("BEZIER:0.1,0.2,0.8,0.9"); + Assert.assertTrue(result instanceof Interpolator.BezierInterpolator); + Interpolator.BezierInterpolator bi = (Interpolator.BezierInterpolator) result; + Assert.assertEquals(new java.awt.geom.Point2D.Float(0.1f, 0.2f), bi.getControl1()); + Assert.assertEquals(new java.awt.geom.Point2D.Float(0.8f, 0.9f), bi.getControl2()); + } + + // ---- Round-trip ---- + + @Test + public void testLinearRoundTrip() { + Assert.assertSame(Interpolator.LINEAR, Interpolator.fromString(Interpolator.LINEAR.toString())); + } + + @Test + public void testLog2RoundTrip() { + Assert.assertSame(Interpolator.LOG2, Interpolator.fromString(Interpolator.LOG2.toString())); + } + + @Test + public void testBezierRoundTrip() { + Interpolator.BezierInterpolator original = new Interpolator.BezierInterpolator(0.25f, 0.1f, 0.75f, 0.9f); + Interpolator restored = Interpolator.fromString(original.toString()); + Assert.assertEquals(original, restored); + } + + @Test + public void testBezierRoundTripInterpolation() { + Interpolator.BezierInterpolator original = new Interpolator.BezierInterpolator(0.25f, 0.1f, 0.75f, 0.9f); + Interpolator restored = Interpolator.fromString(original.toString()); + Assert.assertEquals(original.interpolate(0.5f), restored.interpolate(0.5f), 1e-6f); + } +} diff --git a/modules/AppearanceAPI/src/test/java/org.gephi.appearance/PersistenceProvideTest.java b/modules/AppearanceAPI/src/test/java/org.gephi.appearance/PersistenceProvideTest.java new file mode 100644 index 0000000000..1f776fc78b --- /dev/null +++ b/modules/AppearanceAPI/src/test/java/org.gephi.appearance/PersistenceProvideTest.java @@ -0,0 +1,64 @@ +package org.gephi.appearance; + +import java.awt.Color; +import org.gephi.appearance.api.Interpolator; +import org.gephi.appearance.utils.Utils; +import org.gephi.graph.GraphGenerator; +import org.gephi.project.api.Workspace; +import org.gephi.project.io.utils.GephiFormat; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mockito; +import org.mockito.Spy; +import org.mockito.junit.MockitoJUnitRunner; + +@RunWith(MockitoJUnitRunner.class) +public class PersistenceProvideTest { + + AppearanceModelImpl model; + + @Before + public void setUp() { + model = Utils.newAppearanceModel(); + } + + @Test + public void testEmpty() throws Exception { + GephiFormat + .testXMLPersistenceProvider(new AppearanceModelPersistenceProvider(), model.getWorkspace()); + } + + @Test + public void testInterpolatorLog2() throws Exception { + model.getDegreeRanking().setInterpolator(Interpolator.LOG2); + + Workspace workspace = GephiFormat + .testXMLPersistenceProvider(new AppearanceModelPersistenceProvider(), model.getWorkspace()); + AppearanceModelImpl readModel = workspace.getLookup().lookup(AppearanceModelImpl.class); + Assert.assertSame(Interpolator.LOG2, readModel.getDegreeRanking().interpolator); + } + + @Test + public void testInterpolatorBezier() throws Exception { + model.getDegreeRanking() + .setInterpolator(Interpolator.newBezierInterpolator(0.23f, 0.45f, 0.67f, 0.12f)); + + Workspace workspace = GephiFormat + .testXMLPersistenceProvider(new AppearanceModelPersistenceProvider(), model.getWorkspace()); + AppearanceModelImpl readModel = workspace.getLookup().lookup(AppearanceModelImpl.class); + Assert.assertEquals(model.getDegreeRanking().interpolator, + readModel.getDegreeRanking().interpolator); + } + + @Test + public void testPartitionColor() throws Exception { + model.getEdgeTypePartition().setColor("foo", Color.RED); + + Workspace workspace = GephiFormat + .testXMLPersistenceProvider(new AppearanceModelPersistenceProvider(), model.getWorkspace()); + AppearanceModelImpl readModel = workspace.getLookup().lookup(AppearanceModelImpl.class); + Assert.assertEquals(Color.RED, readModel.getEdgeTypePartition().getColor("foo")); + } +} diff --git a/modules/AppearanceAPI/src/test/java/org.gephi.appearance/TimesetRankingTest.java b/modules/AppearanceAPI/src/test/java/org.gephi.appearance/TimesetRankingTest.java new file mode 100644 index 0000000000..f262231cbe --- /dev/null +++ b/modules/AppearanceAPI/src/test/java/org.gephi.appearance/TimesetRankingTest.java @@ -0,0 +1,67 @@ +package org.gephi.appearance; + +import org.gephi.graph.GraphGenerator; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Configuration; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.TimeRepresentation; +import org.junit.Assert; +import org.junit.Test; + +public class TimesetRankingTest { + + private final Configuration intervalConfiguration = Configuration.builder().timeRepresentation( + TimeRepresentation.INTERVAL).build(); + private final Configuration timestampConfiguration = Configuration.builder().timeRepresentation( + TimeRepresentation.TIMESTAMP).build(); + + @Test + public void testEmpty() { + Graph graph = GraphGenerator.build(timestampConfiguration).getGraph(); + Column column = graph.getModel().defaultColumns().nodeTimeSet(); + TimesetRankingImpl timesetRanking = new TimesetRankingImpl(column); + + Assert.assertEquals(Double.NEGATIVE_INFINITY, timesetRanking.getMinValue(graph)); + Assert.assertEquals(Double.POSITIVE_INFINITY, timesetRanking.getMaxValue(graph)); + } + + @Test + public void testMinMax() { + Graph graph = GraphGenerator.build(timestampConfiguration).generateTinyGraph().setTimestampSet().getGraph(); + Column column = graph.getModel().defaultColumns().nodeTimeSet(); + TimesetRankingImpl timesetRanking = new TimesetRankingImpl(column); + + Assert.assertEquals(GraphGenerator.TIMESTAMP_SET_VALUES[0], timesetRanking.getMinValue(graph)); + Assert.assertEquals(GraphGenerator.TIMESTAMP_SET_VALUES[1], timesetRanking.getMaxValue(graph)); + } + + @Test + public void testGetValue() { + Graph graph = GraphGenerator.build(timestampConfiguration).generateTinyGraph().setTimestampSet().getGraph(); + Column column = graph.getModel().defaultColumns().nodeTimeSet(); + TimesetRankingImpl timesetRanking = new TimesetRankingImpl(column); + + Assert.assertEquals(GraphGenerator.TIMESTAMP_SET_VALUES[0], + timesetRanking.getValue(graph.getNode(GraphGenerator.FIRST_NODE), graph)); + } + + @Test + public void testMinMaxInterval() { + Graph graph = GraphGenerator.build(intervalConfiguration).generateTinyGraph().setIntervalSet().getGraph(); + Column column = graph.getModel().defaultColumns().nodeTimeSet(); + TimesetRankingImpl timesetRanking = new TimesetRankingImpl(column); + + Assert.assertEquals(GraphGenerator.INTERVAL_SET_VALUES[0][0], timesetRanking.getMinValue(graph)); + Assert.assertEquals(GraphGenerator.INTERVAL_SET_VALUES[1][1], timesetRanking.getMaxValue(graph)); + } + + @Test + public void testMinMaxOtherColumn() { + Graph graph = GraphGenerator.build(timestampConfiguration).generateTinyGraph().addTimestampSetColumn().getGraph(); + Column column = graph.getModel().getNodeTable().getColumn(GraphGenerator.TIMESTAMP_SET_COLUMN); + TimesetRankingImpl timesetRanking = new TimesetRankingImpl(column); + + Assert.assertEquals(GraphGenerator.TIMESTAMP_SET_VALUES[0], timesetRanking.getMinValue(graph)); + Assert.assertEquals(GraphGenerator.TIMESTAMP_SET_VALUES[1], timesetRanking.getMaxValue(graph)); + } +} diff --git a/modules/AppearanceAPI/src/test/java/org/gephi/appearance/utils/Utils.java b/modules/AppearanceAPI/src/test/java/org/gephi/appearance/utils/Utils.java new file mode 100644 index 0000000000..336311f9e5 --- /dev/null +++ b/modules/AppearanceAPI/src/test/java/org/gephi/appearance/utils/Utils.java @@ -0,0 +1,13 @@ +package org.gephi.appearance.utils; + +import org.gephi.appearance.AppearanceModelImpl; +import org.gephi.graph.GraphGenerator; + +public class Utils { + + public static AppearanceModelImpl newAppearanceModel() { + GraphGenerator generator = + GraphGenerator.build().generateTinyGraph(); + return generator.getWorkspace().getLookup().lookup(AppearanceModelImpl.class); + } +} diff --git a/modules/AppearancePlugin/pom.xml b/modules/AppearancePlugin/pom.xml index 6a2113217c..72d6a6a5ca 100644 --- a/modules/AppearancePlugin/pom.xml +++ b/modules/AppearancePlugin/pom.xml @@ -4,13 +4,13 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi appearance-plugin - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm AppearancePlugin @@ -41,7 +41,7 @@ - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/AbstractUniqueColorTransformer.java b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/AbstractUniqueColorTransformer.java new file mode 100644 index 0000000000..24c8000050 --- /dev/null +++ b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/AbstractUniqueColorTransformer.java @@ -0,0 +1,58 @@ +/* + Copyright 2008-2013 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2013 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2013 Gephi Consortium. + */ + +package org.gephi.appearance.plugin; + +import java.awt.Color; + +public class AbstractUniqueColorTransformer { + + protected Color color = Color.LIGHT_GRAY; + + public Color getColor() { + return color; + } + + public void setColor(Color color) { + this.color = color; + } +} diff --git a/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/AbstractUniqueSizeTransformer.java b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/AbstractUniqueSizeTransformer.java new file mode 100644 index 0000000000..41c16615ab --- /dev/null +++ b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/AbstractUniqueSizeTransformer.java @@ -0,0 +1,56 @@ +/* + Copyright 2008-2013 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2013 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2013 Gephi Consortium. + */ + +package org.gephi.appearance.plugin; + +public class AbstractUniqueSizeTransformer { + + protected float size = 1f; + + public float getSize() { + return size; + } + + public void setSize(float size) { + this.size = size; + } +} diff --git a/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/PartitionElementColorTransformer.java b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/PartitionElementColorTransformer.java index 14674c6732..d8e41c191e 100644 --- a/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/PartitionElementColorTransformer.java +++ b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/PartitionElementColorTransformer.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance.plugin; import java.awt.Color; @@ -50,7 +51,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author mbastian */ @ServiceProvider(service = Transformer.class) @@ -59,9 +59,6 @@ public class PartitionElementColorTransformer implements PartitionTransformer + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2013 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2013 Gephi Consortium. + */ + +package org.gephi.appearance.plugin; + +import java.awt.Color; +import org.gephi.appearance.api.Partition; +import org.gephi.appearance.plugin.palette.PaletteManager; +import org.gephi.appearance.spi.PartitionTransformer; +import org.gephi.appearance.spi.Transformer; +import org.gephi.graph.api.Element; +import org.openide.util.lookup.ServiceProvider; + +/** + * @author mbastian + */ +@ServiceProvider(service = Transformer.class) +public class PartitionLabelColorTransformer implements PartitionTransformer { + + @Override + public void transform(Element element, Partition partition, Object value) { + Color color = partition.getColor(value); + if (color == null) { + color = Partition.DEFAULT_COLOR; + } + element.getTextProperties().setColor(color); + } + + @Override + public boolean isNode() { + return true; + } + + @Override + public boolean isEdge() { + return true; + } + + public PaletteManager getPaletteManager() { + return PaletteManager.getInstance(); + } +} diff --git a/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/RankingElementColorTransformer.java b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/RankingElementColorTransformer.java index 6120ba4f7a..9ce571799e 100644 --- a/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/RankingElementColorTransformer.java +++ b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/RankingElementColorTransformer.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance.plugin; import java.awt.Color; @@ -51,17 +52,18 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author mbastian */ @ServiceProvider(service = Transformer.class) public class RankingElementColorTransformer implements RankingTransformer { - protected final LinearGradient linearGradient = new LinearGradient(new Color[]{Color.WHITE, Color.BLACK}, new float[]{0f, 1f}); + protected final LinearGradient linearGradient = + new LinearGradient(new Color[] {new Color(0xEDF8FB), new Color(0x66C2A4), new Color(0x006D2C)}, + new float[] {0f, 0.5f, 1f}); @Override - public void transform(Element element, Ranking ranking, Number value) { - Color color = linearGradient.getValue(ranking.normalize(value)); + public void transform(Element element, Ranking ranking, Number value, float normalisedValue) { + Color color = linearGradient.getValue(normalisedValue); element.setColor(color); } @@ -79,18 +81,26 @@ public float[] getColorPositions() { return linearGradient.getPositions(); } - public Color[] getColors() { - return linearGradient.getColors(); - } - public void setColorPositions(float[] positions) { linearGradient.setPositions(positions); } + public Color[] getColors() { + return linearGradient.getColors(); + } + public void setColors(Color[] colors) { linearGradient.setColors(colors); } + public int[] getColorsAsRgba() { + return linearGradient.getColorsAsRgba(); + } + + public void setColorsAsRgba(int[] colors) { + linearGradient.setColorsAsRgba(colors); + } + public LinearGradient getLinearGradient() { return linearGradient; } @@ -100,7 +110,7 @@ public static class LinearGradient implements Serializable, Cloneable { private Color[] colors; private float[] positions; - public LinearGradient(Color colors[], float[] positions) { + public LinearGradient(Color[] colors, float[] positions) { if (colors == null || positions == null) { throw new NullPointerException(); } @@ -132,24 +142,32 @@ public Color getValue(float pos) { private Color tween(Color c1, Color c2, float p) { return new Color( - (int) (c1.getRed() * (1 - p) + c2.getRed() * (p)), - (int) (c1.getGreen() * (1 - p) + c2.getGreen() * (p)), - (int) (c1.getBlue() * (1 - p) + c2.getBlue() * (p)), - (int) (c1.getAlpha() * (1 - p) + c2.getAlpha() * (p))); + (int) (c1.getRed() * (1 - p) + c2.getRed() * (p)), + (int) (c1.getGreen() * (1 - p) + c2.getGreen() * (p)), + (int) (c1.getBlue() * (1 - p) + c2.getBlue() * (p)), + (int) (c1.getAlpha() * (1 - p) + c2.getAlpha() * (p))); } public Color[] getColors() { return colors; } - public float[] getPositions() { - return positions; - } - public void setColors(Color[] colors) { this.colors = colors; } + public int[] getColorsAsRgba() { + return Arrays.stream(colors).mapToInt(c -> (c.getAlpha() << 24) | c.getRGB()).toArray(); + } + + public void setColorsAsRgba(int[] colors) { + this.colors = Arrays.stream(colors).mapToObj(rgba -> new Color(rgba, true)).toArray(Color[]::new); + } + + public float[] getPositions() { + return positions; + } + public void setPositions(float[] positions) { this.positions = positions; } @@ -166,10 +184,7 @@ public boolean equals(Object obj) { if (!Arrays.deepEquals(this.colors, other.colors)) { return false; } - if (!Arrays.equals(this.positions, other.positions)) { - return false; - } - return true; + return Arrays.equals(this.positions, other.positions); } @Override diff --git a/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/RankingLabelColorTransformer.java b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/RankingLabelColorTransformer.java index 65c4439a96..c29b32522c 100644 --- a/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/RankingLabelColorTransformer.java +++ b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/RankingLabelColorTransformer.java @@ -39,24 +39,25 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance.plugin; import java.awt.Color; +import org.gephi.appearance.api.Interpolator; import org.gephi.appearance.api.Ranking; import org.gephi.appearance.spi.Transformer; import org.gephi.graph.api.Element; import org.openide.util.lookup.ServiceProvider; /** - * * @author mbastian */ @ServiceProvider(service = Transformer.class) public class RankingLabelColorTransformer extends RankingElementColorTransformer { @Override - public void transform(Element element, Ranking ranking, Number value) { - Color color = linearGradient.getValue(ranking.normalize(value)); + public void transform(Element element, Ranking ranking, Number value, float normalisedValue) { + Color color = linearGradient.getValue(normalisedValue); element.getTextProperties().setColor(color); } diff --git a/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/RankingLabelSizeTransformer.java b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/RankingLabelSizeTransformer.java new file mode 100644 index 0000000000..4eaf86de82 --- /dev/null +++ b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/RankingLabelSizeTransformer.java @@ -0,0 +1,74 @@ +/* + Copyright 2008-2013 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2013 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2013 Gephi Consortium. + */ + +package org.gephi.appearance.plugin; + +import org.gephi.appearance.api.Interpolator; +import org.gephi.appearance.api.Ranking; +import org.gephi.appearance.spi.RankingTransformer; +import org.gephi.appearance.spi.Transformer; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.Node; +import org.openide.util.lookup.ServiceProvider; + +/** + * @author mbastian + */ +@ServiceProvider(service = Transformer.class) +public class RankingLabelSizeTransformer extends RankingSizeTransformer { + + @Override + public void transform(Element element, Ranking ranking, Number value, float normalisedValue) { + float size = normalisedValue * (maxSize - minSize) + minSize; + element.getTextProperties().setSize(size); + } + + @Override + public boolean isNode() { + return true; + } + + @Override + public boolean isEdge() { + return true; + } +} diff --git a/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/RankingNodeSizeTransformer.java b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/RankingNodeSizeTransformer.java index fffc9e397b..16f8300245 100644 --- a/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/RankingNodeSizeTransformer.java +++ b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/RankingNodeSizeTransformer.java @@ -39,28 +39,23 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance.plugin; import org.gephi.appearance.api.Ranking; -import org.gephi.appearance.spi.RankingTransformer; import org.gephi.appearance.spi.Transformer; import org.gephi.graph.api.Node; import org.openide.util.lookup.ServiceProvider; /** - * * @author mbastian */ @ServiceProvider(service = Transformer.class) -public class RankingNodeSizeTransformer implements RankingTransformer { - - protected float minSize = 1f; - protected float maxSize = 4f; +public class RankingNodeSizeTransformer extends RankingSizeTransformer { @Override - public void transform(Node node, Ranking ranking, Number value) { - float rankingValue = ranking.normalize(value); - float size = rankingValue * (maxSize - minSize) + minSize; + public void transform(Node node, Ranking ranking, Number value, float normalisedValue) { + float size = normalisedValue * (maxSize - minSize) + minSize; node.setSize(size); } @@ -73,20 +68,4 @@ public boolean isNode() { public boolean isEdge() { return false; } - - public float getMaxSize() { - return maxSize; - } - - public float getMinSize() { - return minSize; - } - - public void setMaxSize(float maxSize) { - this.maxSize = maxSize; - } - - public void setMinSize(float minSize) { - this.minSize = minSize; - } } diff --git a/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/RankingSizeTransformer.java b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/RankingSizeTransformer.java new file mode 100644 index 0000000000..04aa140edb --- /dev/null +++ b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/RankingSizeTransformer.java @@ -0,0 +1,26 @@ +package org.gephi.appearance.plugin; + +import org.gephi.appearance.spi.RankingTransformer; +import org.gephi.graph.api.Element; + +public abstract class RankingSizeTransformer implements RankingTransformer { + + protected float minSize = 1f; + protected float maxSize = 4f; + + public float getMaxSize() { + return maxSize; + } + + public void setMaxSize(float maxSize) { + this.maxSize = maxSize; + } + + public float getMinSize() { + return minSize; + } + + public void setMinSize(float minSize) { + this.minSize = minSize; + } +} diff --git a/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/UniqueElementColorTransformer.java b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/UniqueElementColorTransformer.java index f2c50d7195..12a1748659 100644 --- a/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/UniqueElementColorTransformer.java +++ b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/UniqueElementColorTransformer.java @@ -39,22 +39,20 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance.plugin; -import java.awt.Color; import org.gephi.appearance.spi.SimpleTransformer; import org.gephi.appearance.spi.Transformer; import org.gephi.graph.api.Element; import org.openide.util.lookup.ServiceProvider; /** - * * @author mbastian */ @ServiceProvider(service = Transformer.class) -public class UniqueElementColorTransformer implements SimpleTransformer { - - private Color color = Color.BLACK; +public class UniqueElementColorTransformer extends AbstractUniqueColorTransformer + implements SimpleTransformer { @Override public void transform(Element element) { @@ -70,12 +68,4 @@ public boolean isNode() { public boolean isEdge() { return true; } - - public Color getColor() { - return color; - } - - public void setColor(Color color) { - this.color = color; - } } diff --git a/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/UniqueLabelColorTransformer.java b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/UniqueLabelColorTransformer.java new file mode 100644 index 0000000000..3765545e60 --- /dev/null +++ b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/UniqueLabelColorTransformer.java @@ -0,0 +1,70 @@ +/* + Copyright 2008-2013 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2013 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2013 Gephi Consortium. + */ + +package org.gephi.appearance.plugin; + +import org.gephi.appearance.spi.SimpleTransformer; +import org.gephi.appearance.spi.Transformer; +import org.gephi.graph.api.Element; +import org.openide.util.lookup.ServiceProvider; + +/** + * @author mbastian + */ +@ServiceProvider(service = Transformer.class) +public class UniqueLabelColorTransformer extends AbstractUniqueColorTransformer implements SimpleTransformer { + + @Override + public void transform(Element element) { + element.getTextProperties().setColor(color); + } + + @Override + public boolean isNode() { + return true; + } + + @Override + public boolean isEdge() { + return true; + } +} diff --git a/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/UniqueLabelSizeTransformer.java b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/UniqueLabelSizeTransformer.java new file mode 100644 index 0000000000..0e93dbb9fc --- /dev/null +++ b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/UniqueLabelSizeTransformer.java @@ -0,0 +1,70 @@ +/* + Copyright 2008-2013 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2013 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2013 Gephi Consortium. + */ + +package org.gephi.appearance.plugin; + +import org.gephi.appearance.spi.SimpleTransformer; +import org.gephi.appearance.spi.Transformer; +import org.gephi.graph.api.Element; +import org.openide.util.lookup.ServiceProvider; + +/** + * @author mbastian + */ +@ServiceProvider(service = Transformer.class) +public class UniqueLabelSizeTransformer extends AbstractUniqueSizeTransformer implements SimpleTransformer { + + @Override + public void transform(Element element) { + element.getTextProperties().setSize(size); + } + + @Override + public boolean isNode() { + return true; + } + + @Override + public boolean isEdge() { + return true; + } +} diff --git a/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/UniqueNodeSizeTransformer.java b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/UniqueNodeSizeTransformer.java index 8cd1c78fa7..074de682ae 100644 --- a/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/UniqueNodeSizeTransformer.java +++ b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/UniqueNodeSizeTransformer.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance.plugin; import org.gephi.appearance.spi.SimpleTransformer; @@ -47,13 +48,15 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author mbastian */ @ServiceProvider(service = Transformer.class) -public class UniqueNodeSizeTransformer implements SimpleTransformer { +public class UniqueNodeSizeTransformer extends AbstractUniqueSizeTransformer implements SimpleTransformer { - private float size = 10f; + public UniqueNodeSizeTransformer() { + super(); + size = 10f; + } @Override public void transform(Node node) { @@ -69,12 +72,4 @@ public boolean isNode() { public boolean isEdge() { return false; } - - public float getSize() { - return size; - } - - public void setSize(float size) { - this.size = size; - } } diff --git a/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/palette/Palette.java b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/palette/Palette.java index 7e16f223b2..fff226214a 100644 --- a/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/palette/Palette.java +++ b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/palette/Palette.java @@ -39,12 +39,13 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance.plugin.palette; import java.awt.Color; +import java.util.Arrays; /** - * * @author mbastian */ public class Palette { @@ -72,4 +73,31 @@ public String getName() { public int size() { return colors.length; } + + @Override + public int hashCode() { + int hash = 7; + hash = 29 * hash + (this.name != null ? this.name.hashCode() : 0); + hash = 29 * hash + Arrays.deepHashCode(this.colors); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Palette other = (Palette) obj; + if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) { + return false; + } + return Arrays.deepEquals(this.colors, other.colors); + } + } diff --git a/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/palette/PaletteGenerator.java b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/palette/PaletteGenerator.java index b7a05d4fbf..c8e9b72917 100644 --- a/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/palette/PaletteGenerator.java +++ b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/palette/PaletteGenerator.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance.plugin.palette; import java.awt.Color; @@ -49,22 +50,26 @@ Development and Distribution License("CDDL") (collectively, the import java.util.Random; /** - * * @author mbastian */ public class PaletteGenerator { - private static final float[] DEFAULT_FILTER = new float[]{0, 360, 0, 3, 0, 1.5f}; + private static final float[] DEFAULT_FILTER = new float[] {0, 360, 0, 3, 0, 1.5f}; public static Color[] generatePalette(int colorsCount, int quality) { return generatePalette(colorsCount, quality, false, null, null); } + public static Color[] generatePalette(int colorsCount, int quality, Random random) { + return generatePalette(colorsCount, quality, false, random, null); + } + public static Color[] generatePalette(int colorsCount, int quality, float[] filter) { return generatePalette(colorsCount, quality, false, null, filter); } - public static Color[] generatePalette(int colorsCount, int quality, boolean ultraPrecision, Random random, float[] filter) { + public static Color[] generatePalette(int colorsCount, int quality, boolean ultraPrecision, Random random, + float[] filter) { if (filter == null) { filter = DEFAULT_FILTER; } @@ -74,13 +79,13 @@ public static Color[] generatePalette(int colorsCount, int quality, boolean ultr double[][] kMeans = generateRandomKmeans(colorsCount, random, filter); - List colorSamples = new ArrayList(); + List colorSamples = new ArrayList<>(); if (ultraPrecision) { for (double l = 0; l <= 1; l += 0.01) { for (double a = -1; a <= 1; a += 0.05) { for (double b = -1; b <= 1; b += 0.05) { if (checkColor2(l, a, b, filter)) { - colorSamples.add(new double[]{l, a, b}); + colorSamples.add(new double[] {l, a, b}); } } } @@ -90,7 +95,7 @@ public static Color[] generatePalette(int colorsCount, int quality, boolean ultr for (double a = -1; a <= 1; a += 0.1) { for (double b = -1; b <= 1; b += 0.1) { if (checkColor2(l, a, b, filter)) { - colorSamples.add(new double[]{l, a, b}); + colorSamples.add(new double[] {l, a, b}); } } } @@ -107,7 +112,8 @@ public static Color[] generatePalette(int colorsCount, int quality, boolean ultr double minDistance = 1000000; for (int j = 0; j < kMeans.length; j++) { double[] kMean = kMeans[j]; - double distance = Math.sqrt(Math.pow(lab[0] - kMean[0], 2) + Math.pow(lab[1] - kMean[1], 2) + Math.pow(lab[2] - kMean[2], 2)); + double distance = Math.sqrt(Math.pow(lab[0] - kMean[0], 2) + Math.pow(lab[1] - kMean[1], 2) + + Math.pow(lab[2] - kMean[2], 2)); if (distance < minDistance) { minDistance = distance; samplesClosest[i] = j; @@ -119,7 +125,7 @@ public static Color[] generatePalette(int colorsCount, int quality, boolean ultr List freeColorSamples = colorSamples; for (int j = 0; j < kMeans.length; j++) { int count = 0; - double[] candidateKMean = new double[]{0, 0, 0}; + double[] candidateKMean = new double[] {0, 0, 0}; for (int i = 0; i < colorSamples.size(); i++) { if (samplesClosest[i] == j) { count++; @@ -137,14 +143,15 @@ public static Color[] generatePalette(int colorsCount, int quality, boolean ultr if (count != 0 && checkColor2(candidateKMean[0], candidateKMean[1], candidateKMean[2], filter)) { kMeans[j] = candidateKMean; - } else { - // The candidate kMean is out of the boundaries of the color space, or unfound. + } else // The candidate kMean is out of the boundaries of the color space, or unfound. if (freeColorSamples.size() > 0) { // We just search for the closest FREE color of the candidate kMean double minDistance = 10000000000.0; int closest = -1; for (int i = 0; i < freeColorSamples.size(); i++) { - double distance = Math.sqrt(Math.pow(freeColorSamples.get(i)[0] - candidateKMean[0], 2) + Math.pow(freeColorSamples.get(i)[1] - candidateKMean[1], 2) + Math.pow(freeColorSamples.get(i)[2] - candidateKMean[2], 2)); + double distance = Math.sqrt(Math.pow(freeColorSamples.get(i)[0] - candidateKMean[0], 2) + + Math.pow(freeColorSamples.get(i)[1] - candidateKMean[1], 2) + + Math.pow(freeColorSamples.get(i)[2] - candidateKMean[2], 2)); if (distance < minDistance) { minDistance = distance; closest = i; @@ -157,7 +164,9 @@ public static Color[] generatePalette(int colorsCount, int quality, boolean ultr double minDistance = 10000000000.0; int closest = -1; for (int i = 0; i < colorSamples.size(); i++) { - double distance = Math.sqrt(Math.pow(colorSamples.get(i)[0] - candidateKMean[0], 2) + Math.pow(colorSamples.get(i)[1] - candidateKMean[1], 2) + Math.pow(colorSamples.get(i)[2] - candidateKMean[2], 2)); + double distance = Math.sqrt(Math.pow(colorSamples.get(i)[0] - candidateKMean[0], 2) + + Math.pow(colorSamples.get(i)[1] - candidateKMean[1], 2) + + Math.pow(colorSamples.get(i)[2] - candidateKMean[2], 2)); if (distance < minDistance) { minDistance = distance; closest = i; @@ -165,13 +174,12 @@ public static Color[] generatePalette(int colorsCount, int quality, boolean ultr } kMeans[j] = colorSamples.get(closest); } - } - List newFreeColorSamples = new ArrayList(); + List newFreeColorSamples = new ArrayList<>(); for (double[] color : freeColorSamples) { double[] kMean = kMeans[j]; if (color[0] != kMean[0] - || color[1] != kMean[1] - || color[2] != kMean[2]) { + || color[1] != kMean[1] + || color[2] != kMean[2]) { newFreeColorSamples.add(color); } } @@ -191,9 +199,9 @@ public static Color[] generatePalette(int colorsCount, int quality, boolean ultr private static double[][] generateRandomKmeans(int colorsCount, Random random, float[] filter) { double[][] kMeans = new double[colorsCount][]; for (int i = 0; i < colorsCount; i++) { - double[] lab = new double[]{random.nextDouble(), 2 * random.nextDouble() - 1, 2 * random.nextDouble() - 1}; + double[] lab = new double[] {random.nextDouble(), 2 * random.nextDouble() - 1, 2 * random.nextDouble() - 1}; while (!checkColor2(lab, filter)) { - lab = new double[]{random.nextDouble(), 2 * random.nextDouble() - 1, 2 * random.nextDouble() - 1}; + lab = new double[] {random.nextDouble(), 2 * random.nextDouble() - 1, 2 * random.nextDouble() - 1}; } kMeans[i] = lab; } @@ -201,8 +209,8 @@ private static double[][] generateRandomKmeans(int colorsCount, Random random, f } private static double[][] sortColors(double[][] colors) { - LinkedList colorsToSort = new LinkedList(Arrays.asList(colors)); - List diffColors = new ArrayList(); + LinkedList colorsToSort = new LinkedList<>(Arrays.asList(colors)); + List diffColors = new ArrayList<>(); diffColors.add(colorsToSort.pop()); while (colorsToSort.size() > 0) { int index = -1; @@ -242,10 +250,11 @@ private static boolean checkColor2(double l, double a, double b, float[] filter) double[] hcl = lab2hcl(l, a, b); // Check that a color is valid: it must verify our checkColor condition, but also be in the color space return !Double.isNaN(rgb[0]) && rgb[0] >= 0 && rgb[1] >= 0 - && rgb[2] >= 0 && rgb[0] < 256 && rgb[1] < 256 && rgb[2] < 256 - && hcl[0] >= filter[0] && hcl[0] <= filter[1] - && hcl[1] >= filter[2] && hcl[1] <= filter[3] - && hcl[2] >= filter[4] && hcl[2] <= filter[5]; + && rgb[2] >= 0 && rgb[0] < 256 && rgb[1] < 256 && rgb[2] < 256 + && (filter[0] < filter[1] ? (hcl[0] >= filter[0] && hcl[0] <= filter[1]) : + (hcl[0] >= filter[0] || hcl[0] <= filter[1])) + && hcl[1] >= filter[2] && hcl[1] <= filter[3] + && hcl[2] >= filter[4] && hcl[2] <= filter[5]; } private static int[] lab2rgb(double l, double a, double b) { @@ -255,11 +264,11 @@ private static int[] lab2rgb(double l, double a, double b) { private static double[] lab2xyz(double l, double a, double b) { double sl = (l + 0.16) / 1.16; - double[] ill = new double[]{0.96421, 1.00000, 0.82519}; + double[] ill = new double[] {0.96421, 1.00000, 0.82519}; double y = ill[1] * finv(sl); double x = ill[0] * finv(sl + (a / 5.0)); double z = ill[2] * finv(sl - (b / 2.0)); - return new double[]{x, y, z}; + return new double[] {x, y, z}; } private static int[] xyz2rgb(double x, double y, double z) { @@ -275,7 +284,7 @@ private static int[] xyz2rgb(double x, double y, double z) { int r = (int) Math.round(255.0 * correct1(rl)); int g = (int) Math.round(255.0 * correct1(gl)); int b = (int) Math.round(255.0 * correct1(bl)); - return new int[]{r, g, b}; + return new int[] {r, g, b}; } private static double[] rgb2lab(int r, int g, int b) { @@ -290,15 +299,15 @@ private static double[] rgb2xyz(int r, int g, int b) { double x = 0.4124 * rl + 0.3576 * gl + 0.1805 * bl; double y = 0.2126 * rl + 0.7152 * gl + 0.0722 * bl; double z = 0.0193 * rl + 0.1192 * gl + 0.9505 * bl; - return new double[]{x, y, z}; + return new double[] {x, y, z}; } private static double[] xyz2lab(double x, double y, double z) { - double[] ill = new double[]{0.96421, 1.00000, 0.82519}; + double[] ill = new double[] {0.96421, 1.00000, 0.82519}; double l = 1.16 * flab(y / ill[1]) - 0.16; double a = 5 * (flab(x / ill[0]) - flab(y / ill[1])); double b = 2 * (flab(y / ill[1]) - flab(z / ill[2])); - return new double[]{l, a, b}; + return new double[] {l, a, b}; } private static double[] lab2hcl(double l, double a, double b) { @@ -312,7 +321,7 @@ private static double[] lab2hcl(double l, double a, double b) { if (c < 0) { c += 360; } - return new double[]{c, s, l}; + return new double[] {c, s, l}; } private static double finv(double t) { diff --git a/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/palette/PaletteManager.java b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/palette/PaletteManager.java index 0e96120a74..4c2d39ed6a 100644 --- a/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/palette/PaletteManager.java +++ b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/palette/PaletteManager.java @@ -39,26 +39,49 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance.plugin.palette; import java.awt.Color; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.LineNumberReader; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.LinkedList; import java.util.List; +import java.util.Random; +import java.util.prefs.BackingStoreException; +import java.util.prefs.Preferences; import org.openide.util.Exceptions; +import org.openide.util.NbPreferences; /** - * * @author mbastian */ public class PaletteManager { + public static final String COLORS = "PaletteColors"; + private final static int RECENT_PALETTE_SIZE = 5; + private static final String NODE_NAME = "recentpartitionpalettes"; private static PaletteManager instance; + private final List presets; + private final Collection defaultPalettes; + private final LinkedList recentPalette; + private final Color DEFAULT_COLOR = Color.LIGHT_GRAY; + + private PaletteManager() { + presets = loadPresets(); + defaultPalettes = loadDefaultPalettes(); + recentPalette = new LinkedList<>(); + retrieve(); + } public synchronized static PaletteManager getInstance() { if (instance == null) { @@ -66,35 +89,86 @@ public synchronized static PaletteManager getInstance() { } return instance; } - private final static int RECENT_PALETTE_SIZE = 5; - private final List presets; - private final Collection whiteBackgroundPalette; - private final Collection blackBackgroundPalette; - private final LinkedList recentPalette; - public PaletteManager() { - presets = loadPresets(); - whiteBackgroundPalette = loadWhiteBackgroundPalettes(); - blackBackgroundPalette = loadBlackBackgroundPalettes(); - recentPalette = new LinkedList(); + private static Collection loadDefaultPalettes() { + try { + return loadPalettes("palette_default.csv"); + } catch (IOException ex) { + Exceptions.printStackTrace(ex); + } + return Collections.emptyList(); + } + + private static Collection loadPalettes(String fileName) throws IOException { + List> palettes = new ArrayList<>(); + try (LineNumberReader reader = + new LineNumberReader(new InputStreamReader(PaletteManager.class.getResourceAsStream(fileName)))) { + String line; + while ((line = reader.readLine()) != null) { + List palette = new ArrayList<>(); + String[] split = line.split(","); + for (String colorStr : split) { + if (!colorStr.isEmpty()) { + palette.add(parseHexColor(colorStr.trim())); + } + } + if (!palette.isEmpty()) { + palettes.add(palette); + } + } + } + List result = new ArrayList<>(); + for (List cls : palettes) { + Palette plt = new Palette(cls.toArray(new Color[0])); + result.add(plt); + } + return result; + } + + private static Color parseHexColor(String hexColor) { + int rgb = Integer.parseInt(hexColor.replaceFirst("#", ""), 16); + return new Color(rgb); + } + + public Palette randomPalette(int colorCount) { + List colors = new ArrayList<>(); + + Random random = new Random(); + float B = random.nextFloat() * 2 / 5f + 0.6f; + float S = random.nextFloat() * 2 / 5f + 0.6f; + + for (int i = 1; i <= colorCount; i++) { + float H = i / (float) colorCount; + Color c = Color.getHSBColor(H, S, B); + colors.add(c); + } + + Collections.shuffle(colors); + + return new Palette(colors.toArray(new Color[0])); } public Palette generatePalette(int colorCount) { return generatePalette(colorCount, null); } - public Palette generatePalette(int colorCount, Preset preset) { - int quality = 50; - if (colorCount > 50) { - quality = 25; - } else if (colorCount > 100) { - quality = 10; + public int getGeneratePaletteQuality(int colorCount) { + var quality = 50; + if (colorCount > 300) { + quality = 2; } else if (colorCount > 200) { quality = 5; - } else if (colorCount > 300) { - quality = 2; + } else if (colorCount > 100) { + quality = 10; + } else if (colorCount > 50) { + quality = 25; } - Color[] cls = PaletteGenerator.generatePalette(colorCount, quality, preset.toArray()); + return quality; + } + + public Palette generatePalette(int colorCount, Preset preset) { + int quality = getGeneratePaletteQuality(colorCount); + Color[] cls = PaletteGenerator.generatePalette(colorCount, quality, preset != null ? preset.toArray() : null); return new Palette(cls); } @@ -102,31 +176,41 @@ public Collection getPresets() { return presets; } - public Collection getWhiteBackgroudPalette(int colorCount) { - List palettes = new ArrayList(); - for (Palette p : whiteBackgroundPalette) { - if (p.size() >= colorCount) { - palettes.add(p); - } - } - return palettes; + public Preset getPreset(String name) { + return presets.stream().filter(p -> p.getName().equals(name)).findFirst().orElse(null); } - public Collection getBlackBackgroudPalette(int colorCount) { - List palettes = new ArrayList(); - for (Palette p : blackBackgroundPalette) { - if (p.size() >= colorCount) { + public Collection getDefaultPalette(int colorCount) { + List palettes = new ArrayList<>(); + for (Palette p : defaultPalettes) { + if (p.size() == colorCount) { palettes.add(p); + } else if (p.size() < colorCount) { + Color[] cols = Arrays.copyOf(p.getColors(), colorCount); + for (int i = p.size(); i < cols.length; i++) { + cols[i] = DEFAULT_COLOR; + } + palettes.add(new Palette(cols)); + } else { + // p.size() > colorCount: truncate to the requested size + Color[] cols = Arrays.copyOf(p.getColors(), colorCount); + palettes.add(new Palette(cols)); } } + Collections.reverse(palettes); return palettes; } public void addRecentPalette(Palette palette) { - if (recentPalette.size() == RECENT_PALETTE_SIZE) { + if (!recentPalette.isEmpty() && recentPalette.getFirst().equals(palette)) { + return; + } + recentPalette.remove(palette); + if (recentPalette.size() >= RECENT_PALETTE_SIZE) { recentPalette.removeLast(); } recentPalette.addFirst(palette); + store(); } public Collection getRecentPalettes() { @@ -134,9 +218,9 @@ public Collection getRecentPalettes() { } private List loadPresets() { - List presetList = new ArrayList(); - try { - LineNumberReader reader = new LineNumberReader(new InputStreamReader(PaletteManager.class.getResourceAsStream("palette_presets.csv"))); + List presetList = new ArrayList<>(); + try (LineNumberReader reader = new LineNumberReader( + new InputStreamReader(PaletteManager.class.getResourceAsStream("palette_presets.csv")))) { reader.readLine(); String line; while ((line = reader.readLine()) != null) { @@ -158,57 +242,66 @@ private List loadPresets() { return presetList; } - private static Collection loadWhiteBackgroundPalettes() { - try { - return loadPalettes("palette_white_background.csv"); - } catch (IOException ex) { - Exceptions.printStackTrace(ex); + private void retrieve() { + recentPalette.clear(); + Preferences prefs = getPreferences(); + + for (int i = 0; i < RECENT_PALETTE_SIZE; i++) { + byte[] cols = prefs.getByteArray(COLORS + i, null); + if (cols != null) { + try { + Color[] colors = deserializeColors(cols); + recentPalette.addLast(new Palette(colors)); + } catch (Exception e) { + Exceptions.printStackTrace(e); + } + } } - return Collections.EMPTY_LIST; } - private static Collection loadBlackBackgroundPalettes() { + private void store() { + Preferences prefs = getPreferences(); + + // clear the backing store try { - return loadPalettes("palette_black_background.csv"); - } catch (IOException ex) { - Exceptions.printStackTrace(ex); + prefs.clear(); + } catch (BackingStoreException ex) { } - return Collections.EMPTY_LIST; - } - private static Collection loadPalettes(String fileName) throws IOException { - List> palettes = new ArrayList>(); - LineNumberReader reader = new LineNumberReader(new InputStreamReader(PaletteManager.class.getResourceAsStream(fileName))); - reader.readLine(); - String line; - int maxPalette = 32; - while ((line = reader.readLine()) != null) { - String[] split = line.split(","); - for (int i = 0; i < split.length && i < maxPalette; i++) { - String colorStr = split[i]; - if (!colorStr.isEmpty()) { - List palette; - if (palettes.size() <= i) { - palette = new ArrayList(); - palettes.add(palette); - } else { - palette = palettes.get(i); - } - palette.add(parseHexColor(colorStr.trim())); - } + int i = 0; + for (Palette palette : recentPalette) { + try { + prefs.putByteArray(COLORS + i, serializeColors(palette.getColors())); + } catch (Exception e) { + Exceptions.printStackTrace(e); } + i++; } - List result = new ArrayList(); - for (List cls : palettes) { - Collections.reverse(cls); - Palette plt = new Palette(cls.toArray(new Color[0])); - result.add(plt); + } + + private byte[] serializeColors(Color[] colors) throws Exception { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + try (ObjectOutputStream out = new ObjectOutputStream(bos)) { + out.writeObject(colors); } - return result; + return bos.toByteArray(); } - private static Color parseHexColor(String hexColor) { - int rgb = Integer.parseInt(hexColor.replaceFirst("#", ""), 16); - return new Color(rgb); + private Color[] deserializeColors(byte[] colors) throws Exception { + ByteArrayInputStream bis = new ByteArrayInputStream(colors); + Color[] array; + try (ObjectInputStream in = new ObjectInputStream(bis)) { + array = (Color[]) in.readObject(); + } + return array; + } + + /** + * Return the backing store Preferences + * + * @return Preferences + */ + protected final Preferences getPreferences() { + return NbPreferences.forModule(this.getClass()).node("options").node(NODE_NAME); } } diff --git a/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/palette/Preset.java b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/palette/Preset.java index caec8b22bc..5d05d9984b 100644 --- a/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/palette/Preset.java +++ b/modules/AppearancePlugin/src/main/java/org/gephi/appearance/plugin/palette/Preset.java @@ -39,10 +39,10 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.appearance.plugin.palette; /** - * * @author mbastian */ public class Preset { @@ -100,7 +100,7 @@ public float getlMax() { } public float[] toArray() { - return new float[]{hMin, hMax, cMin, cMax, lMin, lMax}; + return new float[] {hMin, hMax, cMin, cMax, lMin, lMax}; } @Override diff --git a/modules/AppearancePlugin/src/main/nbm/manifest.mf b/modules/AppearancePlugin/src/main/nbm/manifest.mf index 70e70259f5..d303b95330 100644 --- a/modules/AppearancePlugin/src/main/nbm/manifest.mf +++ b/modules/AppearancePlugin/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/appearance/plugin/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Plugin +OpenIDE-Module-Name: Appearance Plugin \ No newline at end of file diff --git a/modules/AppearancePlugin/src/main/nbm/module.xml b/modules/AppearancePlugin/src/main/nbm/module.xml deleted file mode 100644 index bda4b50319..0000000000 --- a/modules/AppearancePlugin/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle.properties b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle.properties index 3ff5f462f3..c80cc7994b 100644 --- a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle.properties +++ b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle.properties @@ -1,5 +1 @@ -OpenIDE-Module-Display-Category=Plugin -OpenIDE-Module-Name=Appearance Plugin -OpenIDE-Module-Short-Description=Partition transformers implementations with UI - - +OpenIDE-Module-Short-Description=Partition transformers implementations with UI \ No newline at end of file diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_ar.properties b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_ca.properties b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_ca.properties new file mode 100644 index 0000000000..0d650029fa --- /dev/null +++ b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_ca.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=Partition transformers implementations with UI diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_cs.properties b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_cs.properties index 1debbf8ebc..f5a9223f97 100644 --- a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_cs.properties +++ b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_cs.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-21 20\:39+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Short-Description=Zaveden\u00ed transform\u00e1tor\u016f odd\u00edlu s rozhran\u00edm +OpenIDE-Module-Short-Description=Zavedenν transformαtor\u016f oddνlu s rozhranνm diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_de.properties b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_de.properties new file mode 100644 index 0000000000..96a554d8fc --- /dev/null +++ b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_de.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=Partitionierungs-Transformatoren Implementierungen inkl. UI diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_es.properties b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_es.properties index 6b28a1bfaa..245c672524 100644 --- a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_es.properties +++ b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_es.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:00+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Short-Description=Implementaci\u00f3n de los transformadores de partici\u00f3n con interfaz de usuario +OpenIDE-Module-Short-Description=Implementaciσn de los transformadores de particiσn con interfaz de usuario diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_fr.properties b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_fr.properties index ebaf578c9e..62fce624c0 100644 --- a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_fr.properties +++ b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_fr.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:00+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Impl\u00e9mentation et interface utilisateur des transformeurs de partition. +OpenIDE-Module-Short-Description=Impl\u00E9mentation et interface utilisateur des transformeurs de partition diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_he.properties b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_he.properties new file mode 100644 index 0000000000..b77d62a9c0 --- /dev/null +++ b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_he.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=\u05de\u05d9\u05de\u05d5\u05e9\u05d9 \u05de\u05de\u05e8\u05d9 \u05d7\u05dc\u05d5\u05e7\u05d4 \u05e2\u05dd \u05de\u05e0\u05e9\u05e7 \u05de\u05e9\u05ea\u05de\u05e9 diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_hu.properties b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_hu.properties new file mode 100644 index 0000000000..75c42b294a --- /dev/null +++ b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_hu.properties @@ -0,0 +1,3 @@ + + +OpenIDE-Module-Short-Description=Part\u00EDci\u00F3 transzform\u00E1torok megval\u00F3s\u00EDt\u00E1sa felhaszn\u00E1l\u00F3i fel\u00FClettel diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_it.properties b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_it.properties new file mode 100644 index 0000000000..0d650029fa --- /dev/null +++ b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_it.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=Partition transformers implementations with UI diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_ja.properties b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_ja.properties index feb854c586..1f5fed43c7 100644 --- a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_ja.properties +++ b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_ja.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-19 07\:01+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - OpenIDE-Module-Short-Description=UI\u3092\u6301\u3064\u30d1\u30fc\u30c6\u30a3\u30b7\u30e7\u30f3\u30c8\u30e9\u30f3\u30b9\u30d5\u30a9\u30fc\u30de\u306e\u5b9f\u88c5 diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_ko.properties b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_ko.properties new file mode 100644 index 0000000000..3377323960 --- /dev/null +++ b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_ko.properties @@ -0,0 +1,3 @@ + + +OpenIDE-Module-Short-Description=UI\uB97C \uC0AC\uC6A9\uD55C \uD30C\uD2F0\uC158 \uBCC0\uD658\uAE30 \uAD6C\uD604 diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_nl.properties b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_nl.properties new file mode 100644 index 0000000000..0d650029fa --- /dev/null +++ b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_nl.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=Partition transformers implementations with UI diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_pt.properties b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_pt.properties new file mode 100644 index 0000000000..40fc143d9b --- /dev/null +++ b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_pt.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=Implementa\u00E7\u00F5es de transformadores de parti\u00E7\u00E3o com interfaces de utilizador diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_pt_BR.properties b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_pt_BR.properties index 03a2b89332..67e108a3e9 100644 --- a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_pt_BR.properties +++ b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_pt_BR.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 15\:28+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Implementa\u00e7\u00f5es de transformadores de parti\u00e7\u00e3o com interfaces de usu\u00e1rio +OpenIDE-Module-Short-Description=Implementaηυes de transformadores de partiηγo com interfaces de usuαrio diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_ro.properties b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_ro.properties new file mode 100644 index 0000000000..64bf1fc342 --- /dev/null +++ b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_ro.properties @@ -0,0 +1,3 @@ + + +OpenIDE-Module-Short-Description=Implement\u0103ri de transformatoare de parti\u021Bii cu interfa\u021B\u0103 diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_ru.properties b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_ru.properties index 966da5e81f..0d650029fa 100644 --- a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_ru.properties +++ b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_ru.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-08 06\:20+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - OpenIDE-Module-Short-Description=Partition transformers implementations with UI diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_th.properties b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_th.properties new file mode 100644 index 0000000000..f7273cb6fb --- /dev/null +++ b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_th.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=\u0E2A\u0E48\u0E27\u0E19\u0E01\u0E32\u0E23\u0E41\u0E1B\u0E25\u0E07\u0E02\u0E49\u0E2D\u0E21\u0E39\u0E25\u0E1E\u0E32\u0E23\u0E4C\u0E17\u0E34\u0E0A\u0E31\u0E19\u0E1E\u0E23\u0E49\u0E2D\u0E21\u0E2A\u0E48\u0E27\u0E19\u0E15\u0E48\u0E2D\u0E1B\u0E23\u0E30\u0E2A\u0E32\u0E19\u0E01\u0E31\u0E1A\u0E1C\u0E39\u0E49\u0E43\u0E0A\u0E49 diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_tr.properties b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_tr.properties new file mode 100644 index 0000000000..f1e21b5abc --- /dev/null +++ b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_tr.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=Arayόz ile partisyon ηevirim uygulamalar\u0131 diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_uk.properties b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_uk.properties new file mode 100644 index 0000000000..8f7c9e2b82 --- /dev/null +++ b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_uk.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043B\u0456\u0437\u0430\u0446\u0456\u0457 \u0442\u0440\u0430\u043D\u0441\u0444\u043E\u0440\u043C\u0430\u0442\u043E\u0440\u0456\u0432 \u0440\u043E\u0437\u0434\u0456\u043B\u0456\u0432 \u0437 \u0456\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043E\u043C \u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430 diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_zh_CN.properties b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_zh_CN.properties index eafd7d8b38..991cca1387 100644 --- a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_zh_CN.properties +++ b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_zh_CN.properties @@ -1,8 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:09+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - OpenIDE-Module-Short-Description=\u5206\u533a\u8f6c\u6362\u5668\u5b9e\u73b0\u754c\u9762 diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_zh_TW.properties b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_zh_TW.properties new file mode 100644 index 0000000000..5e1a6d54d8 --- /dev/null +++ b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/Bundle_zh_TW.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=\u5340\u6bb5\u8f49\u63db\u5668\u4ecb\u9762 diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/cs.po b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/cs.po deleted file mode 100644 index d87033169b..0000000000 --- a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/cs.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-21 20:39+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ZavedenΓ­ transformΓ‘torΕ― oddΓ­lu s rozhranΓ­m" diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/es.po b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/es.po deleted file mode 100644 index 1cfb7e0fcd..0000000000 --- a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/es.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:00+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplementaciΓ³n de los transformadores de particiΓ³n con interfaz de usuario" diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/fr.po b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/fr.po deleted file mode 100644 index ec510dab62..0000000000 --- a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/fr.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:00+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplΓ©mentation et interface utilisateur des transformeurs de partition." diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/ja.po b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/ja.po deleted file mode 100644 index 79cd5b70d2..0000000000 --- a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/ja.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-19 07:01+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "UIγ‚’ζŒγ€γƒ‘γƒΌγƒ†γ‚£γ‚·γƒ§γƒ³γƒˆγƒ©γƒ³γ‚Ήγƒ•γ‚©γƒΌγƒžγεŸθ£…" diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/org-gephi-partition-plugin.pot b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/org-gephi-partition-plugin.pot deleted file mode 100644 index 8e9dceed34..0000000000 --- a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/org-gephi-partition-plugin.pot +++ /dev/null @@ -1,19 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Partition transformers implementations with UI" diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/palette/palette_black_background.csv b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/palette/palette_black_background.csv deleted file mode 100644 index 14be18f766..0000000000 --- a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/palette/palette_black_background.csv +++ /dev/null @@ -1,101 +0,0 @@ -1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100 -#82635C ,#597568,#56737C,#8B6685,#557849,#9C5F75,#A06074,#7779A3,#9C7095,#70833B,#AD7AAE,#908B36,#7D444B,#405863,#415F49,#A19A68,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A,#B0959A -,#976253 ,#737339,#68753C,#8B6584,#678644,#518550,#A07434,#618B4A,#8D7199,#589A5A,#A37DAB,#6A9141,#BE7533,#AE81B9,#A890CC,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137,#98C137 -,,#9E5E63 ,#9E5F48,#8C6835,#AB6C44,#554F39,#4B7F5C,#9F7536,#B3624F,#BA793E,#355E52,#528C9E,#569555,#CB8340,#C55B65,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C,#D57B3C -,,,#4C7473 ,#4F7480,#61718C,#6A7193,#BB645A,#C2666A,#475D5E,#565363,#D06B7C,#D26D54,#C46C96,#619EB2,#415E6B,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4,#52BDA4 -,,,,#A55B5B ,#457768,#AB6247,#664F37,#5C849F,#488664,#5A9087,#C47846,#465A3E,#794638,#61A455,#5FAE62,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4,#CD88D4 -,,,,,#5C5030 ,#867631,#925D73,#497E6F,#61532F,#764F38,#569959,#A18336,#8C8B2C,#704A58,#C69133,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A,#E3666A -,,,,,,#4F7B77 ,#4D7078,#55505E,#BC6780,#465F3D,#5E8EAD,#8C84B7,#4A542D,#D16E68,#734B31,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4,#7E98D4 -,,,,,,,#697C36 ,#525832,#A47535,#6E8AB0,#515266,#C96D92,#D26763,#A59B3B,#61A3CA,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67,#B99B67 -,,,,,,,,#804F43 ,#744C54,#8C8738,#785533,#504E64,#917EB4,#7F5637,#57A78F,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67,#58BD67 -,,,,,,,,,#59859F ,#D46C63,#8A585E,#579473,#A08187,#5BA184,#95A736,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434,#CEA434 -,,,,,,,,,,#B0697C ,#4B5E30,#744F27,#578FB3,#95908C,#DB7CAF,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C,#D6719C -,,,,,,,,,,,#6D9682 ,#AE7D68,#598D7E,#606729,#465F32,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF,#6FABBF -,,,,,,,,,,,,#987F8B ,#A08054,#486078,#75506C,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E,#8EA24E -,,,,,,,,,,,,,#6C4861 ,#7897D0,#C9908C,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574,#CC8574 -,,,,,,,,,,,,,,#CB7599 ,#D17749,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484,#85A484 -,,,,,,,,,,,,,,,#949EA4 ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE ,#BF97BE -,,,,,,,,,,,,,,,,#4E3532 ,#4D3745,#423B4D,#29404C,#30321D,#553819,#28433F,#523A19,#6B2E31,#42211A,#66374F,#362837,#713753,#334632,#613C5E,#4D491A,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642,#053642 -,,,,,,,,,,,,,,,,,#444020 ,#2F4625,#603225,#593243,#34445A,#673620,#574163,#34491D,#414867,#3B4E17,#2A5120,#3A4C16,#773137,#30541F,#584569,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A,#763B0A -,,,,,,,,,,,,,,,,,,#5C3423 ,#374220,#65391E,#364B1D,#6A374A,#2A4D43,#2E4961,#375022,#2F4A4F,#6C391E,#73371C,#5F430B,#833722,#703235,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A,#91315A -,,,,,,,,,,,,,,,,,,,#56354F ,#2D414F,#233B31,#2A4E22,#384F1F,#664019,#713A57,#603E1A,#222913,#304A48,#573D5F,#1F2C2C,#182726,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14,#405A14 -,,,,,,,,,,,,,,,,,,,,#364F23 ,#57324A,#3D435F,#562D38,#2C4C42,#634017,#2E2B15,#71374F,#332B16,#3C1E21,#3F241B,#6F3B18,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C,#2E130C -,,,,,,,,,,,,,,,,,,,,,#622E2F ,#372228,#713326,#222930,#7A2F34,#693030,#284347,#481A1F,#25313A,#4C4319,#5B4547,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42,#075A42 -,,,,,,,,,,,,,,,,,,,,,,#403C18 ,#293947,#3C2C19,#273C42,#322536,#4B4A0C,#324A68,#73371C,#394669,#274D3E,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945,#482945 -,,,,,,,,,,,,,,,,,,,,,,,#252E17 ,#533E5F,#3F2639,#2C4B31,#404766,#5C4115,#424913,#793139,#3B1B23,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C,#08210C -,,,,,,,,,,,,,,,,,,,,,,,,#5C3445 ,#2E361F,#284968,#482220,#294A2E,#2F4B64,#1E2E0F,#24263B,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441,#804441 -,,,,,,,,,,,,,,,,,,,,,,,,,#64403D ,#55456A,#2D4E39,#202A35,#513A1F,#322536,#2B4D1F,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37,#514E37 -,,,,,,,,,,,,,,,,,,,,,,,,,,#2C282A ,#594233,#533E5A,#633A45,#2B4D41,#693550,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905,#4C3905 -,,,,,,,,,,,,,,,,,,,,,,,,,,,#46441F ,#713938,#212712,#663C19,#2E280F,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A,#4F515A -,,,,,,,,,,,,,,,,,,,,,,,,,,,,#3B222B ,#2A4E23,#633944,#304A66,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18,#5C2B18 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#26544D ,#314B59,#284A51,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727,#1D1727 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#394C2D ,#573D25,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870,#6F4870 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#3E3742 ,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A,#14370A -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41,#5B3C41 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237,#732237 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59,#393C59 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13,#1B1A13 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731,#385731 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F,#2E2C0F -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C,#26585C -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53,#743C53 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66,#144C66 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127,#542127 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27,#833A27 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21,#0E3B21 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33,#892E33 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A,#3C202A -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B,#00453B -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607,#404607 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24,#524E24 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C,#1B262C -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922,#142922 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B,#60493B -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509,#5E3509 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017,#665017 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68,#594B68 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32,#693E32 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52,#1D5E52 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48,#172D48 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10,#402D10 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543,#5E2543 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00,#1A2A00 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701,#351701 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058,#503058 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60,#843A60 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C,#78491C -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551,#4E5551 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66,#3B4E66 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D,#221A1D -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948,#853948 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212,#3D1212 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706,#2E4706 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C,#1B4F2C -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101,#1A2101 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256,#6A3256 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C,#52490C -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227,#093227 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633,#1C3633 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738,#7E4738 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07,#392F07 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D,#67203D -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409,#734409 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36,#6D2B36 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044,#8B3044 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531,#7B2531 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124,#6A3124 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040,#4C5040 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#803F30,#803F30,#803F30,#803F30,#803F30,#803F30,#803F30,#803F30,#803F30,#803F30,#803F30,#803F30,#803F30,#803F30 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#351F2F,#351F2F,#351F2F,#351F2F,#351F2F,#351F2F,#351F2F,#351F2F,#351F2F,#351F2F,#351F2F,#351F2F,#351F2F -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#092B37,#092B37,#092B37,#092B37,#092B37,#092B37,#092B37,#092B37,#092B37,#092B37,#092B37,#092B37 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#27564D,#27564D,#27564D,#27564D,#27564D,#27564D,#27564D,#27564D,#27564D,#27564D,#27564D -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#1D2009,#1D2009,#1D2009,#1D2009,#1D2009,#1D2009,#1D2009,#1D2009,#1D2009,#1D2009 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#6D4053,#6D4053,#6D4053,#6D4053,#6D4053,#6D4053,#6D4053,#6D4053,#6D4053 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#3A223F,#3A223F,#3A223F,#3A223F,#3A223F,#3A223F,#3A223F,#3A223F -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#2D5834,#2D5834,#2D5834,#2D5834,#2D5834,#2D5834,#2D5834 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#0F3E4D,#0F3E4D,#0F3E4D,#0F3E4D,#0F3E4D,#0F3E4D -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#68334D,#68334D,#68334D,#68334D,#68334D -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#2E4A5F,#2E4A5F,#2E4A5F,#2E4A5F -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#43570A,#43570A,#43570A -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#2F1507,#2F1507 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#5D4913 diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/palette/palette_default.csv b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/palette/palette_default.csv new file mode 100644 index 0000000000..fc85b893ab --- /dev/null +++ b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/palette/palette_default.csv @@ -0,0 +1,7 @@ +#F1087B,#5FA5FD +#06BB1B,#E72094,#D3A207 +#9183E2,#E7663B,#67A030,#E558B2 +#F05252,#62A131,#8985E1,#E25BBD,#D87823 +#C9821C,#7D77CE,#69C73F,#D44443,#CE51A9,#5D8D2B +#D06D20,#C364D7,#59BF42,#D4404A,#6E7ACA,#CA4B93,#7E9321 +#6E7ACA,#5BC344,#D64E2B,#C94992,#C78A1C,#C465D6,#D14058,#699025 \ No newline at end of file diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/palette/palette_white_background.csv b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/palette/palette_white_background.csv deleted file mode 100644 index 41aba2eb58..0000000000 --- a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/palette/palette_white_background.csv +++ /dev/null @@ -1,101 +0,0 @@ -1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100 -#AECFAB ,#B8C7D5,#CFD172,#80DCCB,#F0A399,#8CE0A2,#C9C6A3,#D9B965,#9CD580,#88DC95,#CE9D54,#D58876,#C4AB52,#D7A2CF,#D18664,#D3DBA3,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632,#AA8632 -,#BCD684 ,#D4B8D3,#DEC96A,#A4E18C,#ECACC6,#D1D062,#9ABCDA,#C1AED2,#D18C9D,#94B8D6,#6DDFC2,#A2ACD3,#D1DA60,#69D8E0,#D484B3,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC,#6593BC -,,#83DEC0 ,#D6B6D3,#C5C0E1,#E2B86E,#DEA6C0,#90D897,#DA9762,#7EBFD2,#95DB8A,#D4DD68,#78E3AD,#64A797,#AEDE7C,#699BAB,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B,#D2708B -,,,#A4E18C ,#7CDDC9,#7DDCD6,#76D9C1,#E59B81,#AECDB9,#D5D96A,#66E0C9,#B6ABD6,#D8897C,#DA8769,#D094BD,#D1953B,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766,#54A766 -,,,,#DDCD69 ,#B1C5E4,#9CC2DA,#6DD7CD,#5BDBB3,#D4D1B1,#D296BC,#D6D8A9,#D5D4A5,#D7D5B5,#CBD7C8,#A6DC5C,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A,#7B7C6A -,,,,,#CBDE70 ,#E19F6B,#C7CAB3,#DC939D,#D79064,#D6D864,#78C2D5,#81D6DA,#82A564,#709B65,#DC7468,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC,#BB82BC -,,,,,,#98D988 ,#DCA7C7,#D0C75E,#BAABCF,#CEDFC1,#D6A257,#AFE07C,#74E4AF,#7DE2AB,#5EDEA1,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C,#915E3C -,,,,,,,#C1DA6A ,#73C2D2,#729F88,#D88473,#8DD98A,#D693B4,#C9A457,#8390A9,#899A49,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D,#93A53D -,,,,,,,,#C3B98D ,#6AE0CF,#A3A96C,#71A188,#81A365,#89A2C9,#A1917F,#6D9E7C,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61,#DA6F61 -,,,,,,,,,#A0A05B ,#69A390,#9B9E5A,#BFB0AE,#74D6DE,#D6CF93,#BA9092,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593,#539593 -,,,,,,,,,,#C2A39F ,#C4BDBA,#6CA493,#D48897,#BC984B,#989DD2,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95,#8A7B95 -,,,,,,,,,,,#CE8EAA ,#E0DE61,#A59687,#DBD55C,#D1CED8,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40,#D37F40 -,,,,,,,,,,,,#CD925B ,#BDE290,#D2838A,#7ADAD5,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E,#97636E -,,,,,,,,,,,,,#C9C9D9 ,#54A29C,#C19366,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71,#B98F71 -,,,,,,,,,,,,,,#BAC1E5 ,#DCD44D,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F,#76823F -,,,,,,,,,,,,,,,#88D379 ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E ,#55865E -,,,,,,,,,,,,,,,,#D0E6BE ,#D3E99E,#E0DBDE,#E1E881,#E0E981,#E4E2B6,#E6E688,#BFEEB8,#F3D5AD,#EAE08A,#E8E589,#DFE4DE,#F0DB7A,#EAE37E,#6AF7F6,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB,#BBDBDB -,,,,,,,,,,,,,,,,,#C9E2E0 ,#DCE896,#DADBE6,#DFDBE6,#E2F07B,#EECEE8,#E7D6E7,#A1EBE3,#DFD2F5,#EDCEEC,#E0EB81,#DFD2F5,#E9CEF5,#ECE379,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A,#FFE57A -,,,,,,,,,,,,,,,,,,#A3EED2 ,#9DEFD1,#9CECE0,#D9DBEA,#9EEFD6,#EAE37E,#C2F192,#89F0D3,#89F1CA,#85F3C4,#85F2C7,#8DF3BA,#E5D1EF,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9,#A9F2A9 -,,,,,,,,,,,,,,,,,,,#DAE6AD ,#EDDDAD,#9EEFD6,#F6D4A8,#B8E8E5,#DCD4F0,#A3E4F3,#F3D4B0,#8CECE9,#E0E3C8,#E8E1C9,#A9F0A9,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5,#FBCBF5 -,,,,,,,,,,,,,,,,,,,,#BAEFB0 ,#BCEFA0,#B6F0A0,#EDDEB0,#9FF1BC,#EDDCB3,#D0E7E6,#EDCEEC,#B7F09A,#98ECE8,#C1E8EA,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9,#F1C7A9 -,,,,,,,,,,,,,,,,,,,,,#EBDF80 ,#C6E1EF,#87F1CE,#EAE37E,#BCEF9C,#91EAEE,#D9E8BA,#B8E6ED,#C2F192,#DEE7B8,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9,#9AF5D9 -,,,,,,,,,,,,,,,,,,,,,,#DEE5C3 ,#CAF289,#D5E9BD,#EDDADC,#C2F192,#B4EFA3,#EAE1A5,#C9EDB7,#E8DED2,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499,#C9D499 -,,,,,,,,,,,,,,,,,,,,,,,#C5ED9E ,#E0E2DC,#C9EADD,#BFEEB8,#F2D3B6,#C4EEBA,#BDDCF5,#85F2C7,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC,#FDD8DC -,,,,,,,,,,,,,,,,,,,,,,,,#E4E7A6 ,#C4EEBA,#C4DCF5,#BDDCF5,#84EEE7,#F6D4A8,#D0EF93,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B,#E1FB9B -,,,,,,,,,,,,,,,,,,,,,,,,,#E5EE79 ,#E3E6BB,#EAE095,#EED8D9,#ECD2DB,#BCEDCA,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B,#F2CE8B -,,,,,,,,,,,,,,,,,,,,,,,,,,#D8E6D5 ,#BEECDD,#DBEE84,#B6EBD2,#F2DA9F,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF,#D6F9CF -,,,,,,,,,,,,,,,,,,,,,,,,,,,#ADEEC7 ,#B6EBD2,#E4E7A6,#9DDEF6,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB,#FAFAEB -,,,,,,,,,,,,,,,,,,,,,,,,,,,,#96F2AC ,#D9E8E0,#97EBDF,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8,#C7DBF8 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#A3F0C7 ,#87EBF0,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7,#D0D4B7 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#76EFDF ,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4,#AEF5F4 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483,#D9D483 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9,#B1DFC9 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1,#92E2B1 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA,#E1E0EA -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE,#D8F6AE -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7,#F5F3B7 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0,#DDCDA0 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2,#FAF4A2 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0,#FCCBC0 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3,#DFD0C3 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6,#A7D4E6 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC,#8AF6EC -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B,#B2DC9B -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975,#D8D975 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC,#96DBBC -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC,#E8E1FC -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3,#E6EFD3 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED,#E0FBED -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A,#F3C99A -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092,#DDD092 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E,#BEF09E -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE,#94DECE -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE,#C7FCEE -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986,#C9D986 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED,#FCD2ED -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB,#F0C2CB -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686,#C7E686 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6,#F1D6B6 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B,#98DD9B -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1,#C1D5B1 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0,#A6D6D0 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB,#95E8AB -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE,#C5E7EE -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385,#E7D385 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E,#C9D48E -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9,#D1D5D9 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384,#FDE384 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0,#CBFED0 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD,#8FEFDD -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7,#DCCAC7 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A,#E8EE9A -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC,#D9D7CC -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6,#D8FAC6 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7,#E4ECC7 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF,#B0FBDF -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0,#F0C3E0 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8,#9BE0B8 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0,#BCD8D0 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC,#EAD4AC -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499,#D5D499 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0,#DEF1E0 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD,#A1ECBD -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8,#DCEFA8 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7,#A5D6D7 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9,#F6F2E9 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3,#B0EFF3 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#92ECCD,#92ECCD,#92ECCD,#92ECCD,#92ECCD,#92ECCD,#92ECCD,#92ECCD,#92ECCD,#92ECCD,#92ECCD,#92ECCD,#92ECCD -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#BCF5A7,#BCF5A7,#BCF5A7,#BCF5A7,#BCF5A7,#BCF5A7,#BCF5A7,#BCF5A7,#BCF5A7,#BCF5A7,#BCF5A7,#BCF5A7 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#CCD789,#CCD789,#CCD789,#CCD789,#CCD789,#CCD789,#CCD789,#CCD789,#CCD789,#CCD789,#CCD789 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#F7E37B,#F7E37B,#F7E37B,#F7E37B,#F7E37B,#F7E37B,#F7E37B,#F7E37B,#F7E37B,#F7E37B -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#99E3A7,#99E3A7,#99E3A7,#99E3A7,#99E3A7,#99E3A7,#99E3A7,#99E3A7,#99E3A7 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DECDA5,#DECDA5,#DECDA5,#DECDA5,#DECDA5,#DECDA5,#DECDA5,#DECDA5 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#EAD1AF,#EAD1AF,#EAD1AF,#EAD1AF,#EAD1AF,#EAD1AF,#EAD1AF -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#F6F7EF,#F6F7EF,#F6F7EF,#F6F7EF,#F6F7EF,#F6F7EF -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#C7D596,#C7D596,#C7D596,#C7D596,#C7D596 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DFCF81,#DFCF81,#DFCF81,#DFCF81 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DEDA77,#DEDA77,#DEDA77 -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#DEDACC,#DEDACC -,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,#F5C8F4 diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/pt_BR.po b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/pt_BR.po deleted file mode 100644 index 6c86da173d..0000000000 --- a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/pt_BR.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 15:28+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplementaΓ§Γ΅es de transformadores de partiΓ§Γ£o com interfaces de usuΓ‘rio" diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/ru.po b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/ru.po deleted file mode 100644 index 940819256a..0000000000 --- a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/ru.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-08 06:20+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Partition transformers implementations with UI" diff --git a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/zh_CN.po b/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/zh_CN.po deleted file mode 100644 index 140b53e629..0000000000 --- a/modules/AppearancePlugin/src/main/resources/org/gephi/appearance/plugin/zh_CN.po +++ /dev/null @@ -1,21 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:09+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "εˆ†εŒΊθ½¬ζ’ε™¨εžηŽ°η•Œι’" diff --git a/modules/AppearancePlugin/src/test/java/PaletteTest.java b/modules/AppearancePlugin/src/test/java/PaletteTest.java new file mode 100644 index 0000000000..b9ccac7660 --- /dev/null +++ b/modules/AppearancePlugin/src/test/java/PaletteTest.java @@ -0,0 +1,29 @@ +import java.util.HashMap; +import java.util.Map; +import org.gephi.appearance.plugin.palette.PaletteManager; +import org.junit.Assert; +import org.junit.Test; + +public class PaletteTest { + @Test + public void testPalette() { + PaletteManager paletteManager = PaletteManager.getInstance(); + + // input parameter, expected result + Map testCases = new HashMap<>(); + testCases.put(400, 2); + testCases.put(300, 5); + testCases.put(250, 5); + testCases.put(200, 10); + testCases.put(150, 10); + testCases.put(100, 25); + testCases.put(75, 25); + testCases.put(50, 50); + testCases.put(10, 50); + + for (Map.Entry test : testCases.entrySet()) { + Integer result = paletteManager.getGeneratePaletteQuality(test.getKey()); + Assert.assertEquals(test.getValue(), result); + } + } +} diff --git a/modules/AppearancePluginUI/pom.xml b/modules/AppearancePluginUI/pom.xml index cec38d3f73..c1a1d0541a 100644 --- a/modules/AppearancePluginUI/pom.xml +++ b/modules/AppearancePluginUI/pom.xml @@ -4,13 +4,13 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi appearance-plugin-ui - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm AppearancePluginUI @@ -28,10 +28,18 @@ org-openide-dialogs org.netbeans.api + + ${project.groupId} + graph-api + ${project.groupId} appearance-api + + ${project.groupId} + desktop-icons + ${project.groupId} appearance-plugin @@ -52,16 +60,21 @@ ${project.groupId} ui-library-wrapper + + org.netbeans.api + org-openide-util-ui +
- org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin org.gephi.ui.appearance.plugin.category + org.gephi.ui.appearance.plugin diff --git a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/PartitionColorTransformerPanel.form b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/PartitionColorTransformerPanel.form index 82ad40cabb..983b23fb4a 100644 --- a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/PartitionColorTransformerPanel.form +++ b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/PartitionColorTransformerPanel.form @@ -25,9 +25,6 @@
- - - diff --git a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/PartitionColorTransformerPanel.java b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/PartitionColorTransformerPanel.java index ca248b9490..06249dc04a 100644 --- a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/PartitionColorTransformerPanel.java +++ b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/PartitionColorTransformerPanel.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.appearance.plugin; import java.awt.Color; @@ -52,8 +53,8 @@ Development and Distribution License("CDDL") (collectively, the import java.util.ArrayList; import java.util.Collection; import java.util.Collections; -import java.util.Comparator; import java.util.List; +import java.util.Random; import javax.swing.AbstractCellEditor; import javax.swing.Icon; import javax.swing.JButton; @@ -62,18 +63,20 @@ Development and Distribution License("CDDL") (collectively, the import javax.swing.JMenuItem; import javax.swing.JPopupMenu; import javax.swing.JTable; -import javax.swing.UIManager; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableCellEditor; import javax.swing.table.TableCellRenderer; import javax.swing.table.TableColumn; import net.java.dev.colorchooser.ColorChooser; +import org.gephi.appearance.api.Partition; import org.gephi.appearance.api.PartitionFunction; import org.gephi.appearance.plugin.palette.Palette; +import org.gephi.appearance.plugin.palette.PaletteGenerator; import org.gephi.appearance.plugin.palette.PaletteManager; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Graph; import org.gephi.ui.appearance.plugin.palette.PaletteGeneratorPanel; import org.gephi.ui.components.PaletteIcon; -import org.gephi.ui.utils.UIUtils; import org.jdesktop.swingx.JXHyperlink; import org.jdesktop.swingx.JXTitledSeparator; import org.openide.DialogDisplayer; @@ -81,21 +84,23 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class PartitionColorTransformerPanel extends javax.swing.JPanel { - private PalettePopupButton palettePopupButton; + private static final int PALETTE_DISPLAY_LIMIT = 15; + private final PalettePopupButton palettePopupButton; private PartitionFunction function; - private List values; + private Collection values; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPanel backPanel; + private javax.swing.JScrollPane centerScrollPane; + private javax.swing.JTable table; + // End of variables declaration//GEN-END:variables public PartitionColorTransformerPanel() { initComponents(); palettePopupButton = new PalettePopupButton(); - if (UIUtils.isAquaLookAndFeel()) { - backPanel.setBackground(UIManager.getColor("NbExplorerView.background")); - } } public JButton getPaletteButton() { @@ -106,76 +111,183 @@ public void setup(PartitionFunction function) { this.function = function; NumberFormat formatter = NumberFormat.getPercentInstance(); formatter.setMaximumFractionDigits(2); + Partition partition = function.getPartition(); + Graph graph = function.getGraph(); + + try { + graph.readLock(); + + boolean ignoreNull = !function.getModel().isTransformNullValues(); + values = function.isValid() ? partition.getSortedValues(function.getGraph()) : Collections.EMPTY_LIST; + + int valuesSize = 0; + int nullElements = 0; + List nullColors = new ArrayList<>(); + for (Object val : values) { + if (!ignoreNull || val != null) { + Color c = partition.getColor(val); + if (c.equals(Partition.DEFAULT_COLOR)) { + nullColors.add(val); + } + valuesSize++; + } else { + // Will be used firther for the percentage calculation + nullElements = function.getPartition().count(null, function.getGraph()); + } + } - values = new ArrayList(); - for (Object value : function.getPartition().getValues()) { - values.add(value); - } - Collections.sort(values, new Comparator() { - @Override - public int compare(Object o1, Object o2) { - float p1 = PartitionColorTransformerPanel.this.function.getPartition().percentage(o1); - float p2 = PartitionColorTransformerPanel.this.function.getPartition().percentage(o2); - return p1 > p2 ? -1 : p1 < p2 ? 1 : 0; + int valuesWithColors = valuesSize - nullColors.size(); + if (!nullColors.isEmpty() && valuesWithColors < 8) { + Color[] cls = PaletteGenerator.generatePalette(Math.min(8, valuesSize), 5, new Random(42L)); + int i = 0; + for (Object val : nullColors) { + int index = valuesWithColors + i++; + if (index < cls.length) { + partition.setColor(val, cls[index]); + } + } } - }); - - //Model - String[] columnNames = new String[]{"Color", "Partition", "Percentage"}; - DefaultTableModel model = new DefaultTableModel(columnNames, values.size()) { - @Override - public boolean isCellEditable(int row, int column) { - return column == 0; + + //Model + String[] columnNames = new String[] {"Color", "Partition", "Percentage"}; + DefaultTableModel model = new DefaultTableModel(columnNames, valuesSize) { + @Override + public boolean isCellEditable(int row, int column) { + return column == 0; + } + }; + table.setModel(model); + + String countMsg = NbBundle + .getMessage(PartitionColorTransformerPanel.class, + "PartitionColorTransformerPanel.tooltip.elementsCount"); + + TableColumn partCol = table.getColumnModel().getColumn(1); + partCol.setCellRenderer(new TextRenderer(null)); + + TableColumn percCol = table.getColumnModel().getColumn(2); + percCol.setCellRenderer(new TextRenderer(countMsg)); + percCol.setPreferredWidth(60); + percCol.setMaxWidth(60); + + TableColumn colorCol = table.getColumnModel().getColumn(0); + colorCol.setCellEditor(new ColorChooserEditor()); + colorCol.setCellRenderer(new ColorChooserRenderer()); + colorCol.setPreferredWidth(16); + colorCol.setMaxWidth(16); + + int j = 0; + for (Object value : values) { + if (!ignoreNull || value != null) { + String displayName = value == null ? "null" : + value.getClass().isArray() ? AttributeUtils.printArray(value) : value.toString(); + int count = partition.count(value, graph); + float percentage = (float) count / (partition.getElementCount(graph) - nullElements); + model.setValueAt(value, j, 0); + model.setValueAt(displayName, j, 1); + String percCount = count + "_(" + formatter.format(percentage) + ")"; + model.setValueAt(percCount, j, 2); + j++; + } } - }; - table.setModel(model); - - TableColumn partCol = table.getColumnModel().getColumn(1); - partCol.setCellRenderer(new TextRenderer()); - - TableColumn percCol = table.getColumnModel().getColumn(2); - percCol.setCellRenderer(new TextRenderer()); - percCol.setPreferredWidth(60); - percCol.setMaxWidth(60); - - TableColumn colorCol = table.getColumnModel().getColumn(0); - colorCol.setCellEditor(new ColorChooserEditor()); - colorCol.setCellRenderer(new ColorChooserRenderer()); - colorCol.setPreferredWidth(16); - colorCol.setMaxWidth(16); - - for (int j = 0; j < values.size(); j++) { - Object value = values.get(j); - String displayName = value == null ? "null" : value.toString(); - float percentage = function.getPartition().percentage(value); - model.setValueAt(value, j, 0); - model.setValueAt(displayName, j, 1); - String perc = "(" + formatter.format(percentage) + ")"; - model.setValueAt(perc, j, 2); + } finally { + graph.readUnlock(); } } private void applyPalette(Palette palette) { - PaletteManager.getInstance().addRecentPalette(palette); Color[] colors = palette.getColors(); - for (int i = 0; i < values.size(); i++) { - Object val = values.get(i); - Color col = colors[i]; - function.getPartition().setColor(val, col); + int i = 0; + boolean ignoreNull = !function.getModel().isTransformNullValues(); + for (Object value : values) { + if (!ignoreNull || value != null) { + Color col = colors[i++]; + function.getPartition().setColor(value, col); + } } table.revalidate(); table.repaint(); } + void saveCurrentPaletteAsRecent() { + List colors = new ArrayList<>(); + boolean ignoreNull = !function.getModel().isTransformNullValues(); + for (Object value : values) { + if (!ignoreNull || value != null) { + Color c = function.getPartition().getColor(value); + colors.add(c != null ? c : Partition.DEFAULT_COLOR); + } + } + if (!colors.isEmpty()) { + PaletteManager.getInstance().addRecentPalette(new Palette(colors.toArray(new Color[0]))); + } + } + private void applyColor(Color col) { - for (int i = 0; i < values.size(); i++) { - Object val = values.get(i); - function.getPartition().setColor(val, col); + for (Object value : values) { + function.getPartition().setColor(value, col); } table.revalidate(); table.repaint(); } + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + java.awt.GridBagConstraints gridBagConstraints; + + centerScrollPane = new javax.swing.JScrollPane(); + backPanel = new javax.swing.JPanel(); + table = new javax.swing.JTable(); + + setOpaque(false); + setLayout(new java.awt.GridBagLayout()); + + centerScrollPane.setBorder(null); + centerScrollPane.setOpaque(false); + + backPanel.setLayout(new java.awt.GridBagLayout()); + + table.setModel(new javax.swing.table.DefaultTableModel( + new Object[][] { + + }, + new String[] { + + } + )); + table.setOpaque(false); + table.setRowHeight(18); + table.setRowMargin(4); + table.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); + table.setShowHorizontalLines(false); + table.setShowVerticalLines(false); + table.setTableHeader(null); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.weighty = 1.0; + backPanel.add(table, gridBagConstraints); + + centerScrollPane.setViewportView(backPanel); + + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.weighty = 1.0; + gridBagConstraints.insets = new java.awt.Insets(4, 10, 0, 0); + add(centerScrollPane, gridBagConstraints); + }// //GEN-END:initComponents + class ColorChooserRenderer extends JLabel implements TableCellRenderer { public ColorChooserRenderer() { @@ -183,30 +295,43 @@ public ColorChooserRenderer() { } @Override - public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { - Color c = function.getPartition().getColor(value); - setBackground(c); + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, + int row, int column) { + Color color = function.getPartition().getColor(value); + if (color == null) { + color = Partition.DEFAULT_COLOR; + } + setBackground(color); return this; } } class TextRenderer extends JLabel implements TableCellRenderer { - private EmptyIcon emptyIcon; + private final EmptyIcon emptyIcon; + private final String elementsMessage; - public TextRenderer() { + public TextRenderer(String countMessage) { setFont(table.getFont()); emptyIcon = new EmptyIcon(); + elementsMessage = countMessage; } @Override - public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { - setText((String) value); + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, + int row, int column) { + String valTxt = (String) value; if (column == 1) { + setText(valTxt); + setToolTipText(valTxt); setIcon(emptyIcon); - } else { + } else if (column == 2) { + String[] spl = valTxt.split("_"); + setText(spl[1]); + setToolTipText(spl[0] + " " + elementsMessage); setIcon(null); } + return this; } } @@ -239,7 +364,13 @@ public ColorChooserEditor() { @Override public void propertyChange(PropertyChangeEvent evt) { if (evt.getPropertyName().equals(ColorChooser.PROP_COLOR)) { - function.getPartition().setColor(currentValue, (Color) evt.getNewValue()); + Color color = (Color) evt.getNewValue(); + Partition partition = function.getPartition(); + if (partition.getColor(currentValue) == null || + !partition.getColor(currentValue).equals(color)) { + function.getPartition().setColor(currentValue, (Color) evt.getNewValue()); + } + PartitionColorTransformerPanel.this.requestFocusInWindow(); } } }); @@ -252,7 +383,7 @@ public Object getCellEditorValue() { @Override public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, - int row, int column) { + int row, int column) { currentValue = value; return delegate; } @@ -263,8 +394,8 @@ class PalettePopupButton extends JXHyperlink { private final PaletteManager paletteManager; public PalettePopupButton() { - setText(NbBundle.getMessage(PartitionColorTransformerPanel.class, "PartitionColorTransformerPanel.paletteButton")); - setClickedColor(new Color(0, 51, 255)); + setText(NbBundle + .getMessage(PartitionColorTransformerPanel.class, "PartitionColorTransformerPanel.paletteButton")); setFocusPainted(false); setFocusable(false); paletteManager = PaletteManager.getInstance(); @@ -272,7 +403,7 @@ public PalettePopupButton() { addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - int size = function.getPartition().size(); + int size = function.getPartition().size(function.getGraph()); JPopupMenu menu = createPopup(size); menu.show(PalettePopupButton.this, 0, getHeight()); } @@ -281,39 +412,42 @@ public void actionPerformed(ActionEvent e) { private JPopupMenu createPopup(final int colorsCount) { JPopupMenu menu = new JPopupMenu(); - menu.add(new JXTitledSeparator(NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.recent"))); + menu.add(new JXTitledSeparator( + NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.recent"))); Collection recentPalettes = paletteManager.getRecentPalettes(); if (recentPalettes.isEmpty()) { - menu.add("" + NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.norecent") + ""); + menu.add( + "" + NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.norecent") + + ""); } else { for (Palette pl : recentPalettes) { - menu.add(new PaletteMenuItem(pl, colorsCount)); + if (pl.size() >= colorsCount) { + menu.add(new PaletteMenuItem(pl, Math.min(PALETTE_DISPLAY_LIMIT, colorsCount))); + } } } - menu.add(new JXTitledSeparator(NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.standard"))); - JMenu lightPalette = new JMenu(NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.light")); - for (Palette pl : paletteManager.getWhiteBackgroudPalette(colorsCount)) { - lightPalette.add(new PaletteMenuItem(pl, colorsCount)); + menu.add(new JXTitledSeparator( + NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.standard"))); + JMenu lightPalette = + new JMenu(NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.palette")); + for (Palette pl : paletteManager.getDefaultPalette(colorsCount)) { + lightPalette.add(new PaletteMenuItem(pl, Math.min(PALETTE_DISPLAY_LIMIT, colorsCount))); } menu.add(lightPalette); - JMenu darkPalette = new JMenu(NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.dark")); - for (Palette pl : paletteManager.getBlackBackgroudPalette(colorsCount)) { - darkPalette.add(new PaletteMenuItem(pl, colorsCount)); - } - menu.add(darkPalette); - - JMenuItem allBlack = new JMenuItem(NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.allblack")); - allBlack.addActionListener(new ActionListener() { + JMenuItem allGrey = + new JMenuItem(NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.allgrey")); + allGrey.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - applyColor(Color.BLACK); + applyColor(Color.LIGHT_GRAY); } }); - menu.add(allBlack); + menu.add(allGrey); - JMenuItem allWhite = new JMenuItem(NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.allwhite")); + JMenuItem allWhite = + new JMenuItem(NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.allwhite")); allWhite.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { @@ -322,16 +456,18 @@ public void actionPerformed(ActionEvent e) { }); menu.add(allWhite); - JMenuItem generate = new JMenuItem(NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.generate")); + JMenuItem generate = + new JMenuItem(NbBundle.getMessage(PartitionColorTransformerPanel.class, "PalettePopup.generate")); generate.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { PaletteGeneratorPanel pgn = new PaletteGeneratorPanel(); pgn.setup(colorsCount); NotifyDescriptor nd = new NotifyDescriptor(pgn, - NbBundle.getMessage(PartitionColorTransformerPanel.class, "PartitionColorTransformerPanel.generatePalettePanel.title"), - NotifyDescriptor.OK_CANCEL_OPTION, - NotifyDescriptor.DEFAULT_OPTION, null, null); + NbBundle.getMessage(PartitionColorTransformerPanel.class, + "PartitionColorTransformerPanel.generatePalettePanel.title"), + NotifyDescriptor.OK_CANCEL_OPTION, + NotifyDescriptor.DEFAULT_OPTION, null, null); if (DialogDisplayer.getDefault().notify(nd) == NotifyDescriptor.OK_OPTION) { Palette pl = pgn.getSelectedPalette(); @@ -362,67 +498,4 @@ public void actionPerformed(ActionEvent e) { applyPalette(palette); } } - - /** - * This method is called from within the constructor to initialize the form. - * WARNING: Do NOT modify this code. The content of this method is always - * regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // //GEN-BEGIN:initComponents - private void initComponents() { - java.awt.GridBagConstraints gridBagConstraints; - - centerScrollPane = new javax.swing.JScrollPane(); - backPanel = new javax.swing.JPanel(); - table = new javax.swing.JTable(); - - setOpaque(false); - setLayout(new java.awt.GridBagLayout()); - - centerScrollPane.setBorder(null); - centerScrollPane.setOpaque(false); - centerScrollPane.setViewportView(null); - - backPanel.setLayout(new java.awt.GridBagLayout()); - - table.setModel(new javax.swing.table.DefaultTableModel( - new Object [][] { - - }, - new String [] { - - } - )); - table.setOpaque(false); - table.setRowHeight(18); - table.setRowMargin(4); - table.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); - table.setShowHorizontalLines(false); - table.setShowVerticalLines(false); - table.setTableHeader(null); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 0; - gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.weighty = 1.0; - backPanel.add(table, gridBagConstraints); - - centerScrollPane.setViewportView(backPanel); - - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 0; - gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.weighty = 1.0; - gridBagConstraints.insets = new java.awt.Insets(4, 10, 0, 0); - add(centerScrollPane, gridBagConstraints); - }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JPanel backPanel; - private javax.swing.JScrollPane centerScrollPane; - private javax.swing.JTable table; - // End of variables declaration//GEN-END:variables } diff --git a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/PartitionElementColorTransformerUI.java b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/PartitionElementColorTransformerUI.java index 4e57eb2de3..2f5188e882 100644 --- a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/PartitionElementColorTransformerUI.java +++ b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/PartitionElementColorTransformerUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.ui.appearance.plugin; import javax.swing.AbstractButton; @@ -55,7 +56,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author mbastian */ @ServiceProvider(service = TransformerUI.class, position = 200) @@ -70,7 +70,7 @@ public TransformerCategory getCategory() { @Override public String getDisplayName() { - return NbBundle.getMessage(UniqueElementColorTransformerUI.class, "Attribute.name"); + return NbBundle.getMessage(PartitionElementColorTransformerUI.class, "Attribute.partition.name"); } @Override @@ -97,7 +97,14 @@ public synchronized AbstractButton[] getControlButton() { if (panel == null) { panel = new PartitionColorTransformerPanel(); } - return new AbstractButton[]{panel.getPaletteButton()}; + return new AbstractButton[] {panel.getPaletteButton()}; + } + + @Override + public synchronized void onApply(Function function) { + if (panel != null) { + panel.saveCurrentPaletteAsRecent(); + } } @Override diff --git a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/PartitionLabelColorTransformerUI.java b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/PartitionLabelColorTransformerUI.java new file mode 100644 index 0000000000..226c814542 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/PartitionLabelColorTransformerUI.java @@ -0,0 +1,114 @@ +/* + Copyright 2008-2013 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2013 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2013 Gephi Consortium. + */ + +package org.gephi.ui.appearance.plugin; + +import javax.swing.AbstractButton; +import javax.swing.Icon; +import javax.swing.JPanel; +import org.gephi.appearance.api.Function; +import org.gephi.appearance.api.PartitionFunction; +import org.gephi.appearance.plugin.PartitionLabelColorTransformer; +import org.gephi.appearance.spi.PartitionTransformer; +import org.gephi.appearance.spi.TransformerCategory; +import org.gephi.appearance.spi.TransformerUI; +import org.gephi.ui.appearance.plugin.category.DefaultCategory; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +/** + * @author mbastian + */ +@ServiceProvider(service = TransformerUI.class, position = 600) +public class PartitionLabelColorTransformerUI implements TransformerUI { + + private PartitionColorTransformerPanel panel; + + @Override + public TransformerCategory getCategory() { + return DefaultCategory.LABEL_COLOR; + } + + @Override + public String getDisplayName() { + return NbBundle.getMessage(PartitionLabelColorTransformerUI.class, "Attribute.partition.name"); + } + + @Override + public Icon getIcon() { + return null; + } + + @Override + public String getDescription() { + return null; + } + + @Override + public synchronized JPanel getPanel(Function function) { + if (panel == null) { + panel = new PartitionColorTransformerPanel(); + } + panel.setup((PartitionFunction) function); + return panel; + } + + @Override + public synchronized AbstractButton[] getControlButton() { + if (panel == null) { + panel = new PartitionColorTransformerPanel(); + } + return new AbstractButton[] {panel.getPaletteButton()}; + } + + @Override + public synchronized void onApply(Function function) { + if (panel != null) { + panel.saveCurrentPaletteAsRecent(); + } + } + + @Override + public Class getTransformerClass() { + return PartitionLabelColorTransformer.class; + } +} diff --git a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RankingColorTransformerPanel.java b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RankingColorTransformerPanel.java index 5fac643113..79fded54e2 100644 --- a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RankingColorTransformerPanel.java +++ b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RankingColorTransformerPanel.java @@ -39,118 +39,101 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.appearance.plugin; import java.awt.BorderLayout; import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; +import java.beans.PropertyChangeListener; import java.util.Arrays; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; import org.gephi.appearance.api.RankingFunction; import org.gephi.appearance.plugin.RankingElementColorTransformer; import org.gephi.ui.components.PaletteIcon; import org.gephi.ui.components.gradientslider.GradientSlider; +import org.gephi.ui.components.gradientslider.MultiThumbSlider; import org.gephi.utils.PaletteUtils; import org.gephi.utils.PaletteUtils.Palette; +import org.openide.util.ImageUtilities; import org.openide.util.NbBundle; -import org.openide.util.NbPreferences; /** * @author Mathieu Bastian */ public class RankingColorTransformerPanel extends javax.swing.JPanel { - private RankingElementColorTransformer colorTransformer; - private GradientSlider gradientSlider; private final RecentPalettes recentPalettes; + private RankingElementColorTransformer colorTransformer; + private final GradientSlider gradientSlider; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton colorSwatchButton; + private javax.swing.JToolBar colorSwatchToolbar; + private javax.swing.JPanel gradientPanel; + private javax.swing.JLabel labelColor; + + // End of variables declaration//GEN-END:variables + private PropertyChangeListener listener = null; public RankingColorTransformerPanel() { initComponents(); this.recentPalettes = new RecentPalettes(); + + //Init slider + gradientSlider = new GradientSlider(GradientSlider.HORIZONTAL); + gradientPanel.add(gradientSlider, BorderLayout.CENTER); + + //Color Swatch + colorSwatchButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent ae) { + JPopupMenu popupMenu = getPalettePopupMenu(); + popupMenu.show(colorSwatchToolbar, -popupMenu.getPreferredSize().width, 0); + } + }); } - public void setup(RankingFunction function) { - colorTransformer = (RankingElementColorTransformer) function.getTransformer(); - final String POSITIONS = "RankingColorTransformerPanel_" + colorTransformer.getClass().getSimpleName() + "_positions"; - final String COLORS = "RankingColorTransformerPanel_" + colorTransformer.getClass().getSimpleName() + "_colors"; + public void setup(RankingFunction function) { + colorTransformer = function.getTransformer(); + if (listener != null) { + gradientSlider.removePropertyChangeListener(listener); + } float[] positionsStart = colorTransformer.getColorPositions(); Color[] colorsStart = colorTransformer.getColors(); - try { - positionsStart = deserializePositions(NbPreferences.forModule(RankingColorTransformerPanel.class).getByteArray(POSITIONS, serializePositions(positionsStart))); - colorsStart = deserializeColors(NbPreferences.forModule(RankingColorTransformerPanel.class).getByteArray(COLORS, serializeColors(colorsStart))); - colorTransformer.setColorPositions(positionsStart); - colorTransformer.setColors(colorsStart); - } catch (Exception e) { - e.printStackTrace(); - } //Gradient - gradientSlider = new GradientSlider(GradientSlider.HORIZONTAL, positionsStart, colorsStart); - gradientSlider.putClientProperty("GradientSlider.includeOpacity", "false"); - gradientSlider.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { + gradientSlider.setValues(positionsStart, colorsStart); + + listener = (evt) -> { + if (colorTransformer != null + && ((!gradientSlider.isValueAdjusting() && + evt.getPropertyName().equals(MultiThumbSlider.VALUES_PROPERTY)) + || (evt.getPropertyName().equals(MultiThumbSlider.ADJUST_PROPERTY) && + evt.getNewValue().equals(Boolean.FALSE)))) { Color[] colors = gradientSlider.getColors(); float[] positions = gradientSlider.getThumbPositions(); - colorTransformer.setColors(Arrays.copyOf(colors, colors.length)); - colorTransformer.setColorPositions(Arrays.copyOf(positions, positions.length)); - try { - NbPreferences.forModule(RankingColorTransformerPanel.class).putByteArray(POSITIONS, serializePositions(positions)); - NbPreferences.forModule(RankingColorTransformerPanel.class).putByteArray(COLORS, serializeColors(colors)); - } catch (Exception ex) { - ex.printStackTrace(); + + if (!Arrays.equals(positions, colorTransformer.getColorPositions()) || + !Arrays.deepEquals(colors, colorTransformer.getColors())) { + colorTransformer.setColors(Arrays.copyOf(colors, colors.length)); + colorTransformer.setColorPositions(Arrays.copyOf(positions, positions.length)); } // prepareGradientTooltip(); } - }); - gradientPanel.add(gradientSlider, BorderLayout.CENTER); + }; + gradientSlider.addPropertyChangeListener(listener); // prepareGradientTooltip(); - //Context // setComponentPopupMenu(getPalettePopupMenu()); - addMouseListener(new MouseAdapter() { - @Override - public void mousePressed(MouseEvent evt) { - if (evt.isPopupTrigger()) { - JPopupMenu popupMenu = getPalettePopupMenu(); - popupMenu.show(evt.getComponent(), evt.getX(), evt.getY()); - } - } - - @Override - public void mouseReleased(MouseEvent evt) { - if (evt.isPopupTrigger()) { - JPopupMenu popupMenu = getPalettePopupMenu(); - popupMenu.show(evt.getComponent(), evt.getX(), evt.getY()); - } - } - }); - - //Color Swatch - colorSwatchButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent ae) { - JPopupMenu popupMenu = getPalettePopupMenu(); - popupMenu.show(colorSwatchToolbar, -popupMenu.getPreferredSize().width, 0); - } - }); } -// private void prepareGradientTooltip() { + // private void prepareGradientTooltip() { // StringBuilder sb = new StringBuilder(); // final double min = ((Number) ranking.unNormalize(colorTransformer.getLowerBound())).doubleValue(); // final double max = ((Number) ranking.unNormalize(colorTransformer.getUpperBound())).doubleValue(); @@ -191,11 +174,13 @@ public void actionPerformed(ActionEvent e) { popupMenu.add(defaultMenu); //Invert - JMenuItem invertItem = new JMenuItem(NbBundle.getMessage(RankingColorTransformerPanel.class, "PalettePopup.invert")); + JMenuItem invertItem = + new JMenuItem(NbBundle.getMessage(RankingColorTransformerPanel.class, "PalettePopup.invert")); invertItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - gradientSlider.setValues(invert(gradientSlider.getThumbPositions()), invert(gradientSlider.getColors())); + gradientSlider + .setValues(invert(gradientSlider.getThumbPositions()), invert(gradientSlider.getColors())); } }); popupMenu.add(invertItem); @@ -217,9 +202,10 @@ public void actionPerformed(ActionEvent e) { return popupMenu; } - private void addRecentPalette() { - RankingElementColorTransformer.LinearGradient gradient = colorTransformer.getLinearGradient(); - recentPalettes.add(gradient); + void saveCurrentGradientAsRecent() { + if (colorTransformer != null) { + recentPalettes.add(colorTransformer.getLinearGradient()); + } } private Color[] invert(Color[] source) { @@ -241,38 +227,6 @@ private float[] invert(float[] source) { return res; } - private byte[] serializePositions(float[] positions) throws Exception { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - ObjectOutputStream out = new ObjectOutputStream(bos); - out.writeObject(positions); - out.close(); - return bos.toByteArray(); - } - - private float[] deserializePositions(byte[] positions) throws Exception { - ByteArrayInputStream bis = new ByteArrayInputStream(positions); - ObjectInputStream in = new ObjectInputStream(bis); - float[] array = (float[]) in.readObject(); - in.close(); - return array; - } - - private byte[] serializeColors(Color[] colors) throws Exception { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - ObjectOutputStream out = new ObjectOutputStream(bos); - out.writeObject(colors); - out.close(); - return bos.toByteArray(); - } - - private Color[] deserializeColors(byte[] colors) throws Exception { - ByteArrayInputStream bis = new ByteArrayInputStream(colors); - ObjectInputStream in = new ObjectInputStream(bis); - Color[] array = (Color[]) in.readObject(); - in.close(); - return array; - } - /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always @@ -289,7 +243,8 @@ private void initComponents() { setPreferredSize(new java.awt.Dimension(225, 114)); - labelColor.setText(org.openide.util.NbBundle.getMessage(RankingColorTransformerPanel.class, "RankingColorTransformerPanel.labelColor.text")); // NOI18N + labelColor.setText(org.openide.util.NbBundle + .getMessage(RankingColorTransformerPanel.class, "RankingColorTransformerPanel.labelColor.text")); // NOI18N gradientPanel.setOpaque(false); gradientPanel.setLayout(new java.awt.BorderLayout()); @@ -298,7 +253,8 @@ private void initComponents() { colorSwatchToolbar.setRollover(true); colorSwatchToolbar.setOpaque(false); - colorSwatchButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/ui/appearance/plugin/resources/color-swatch.png"))); // NOI18N + colorSwatchButton.setIcon( + ImageUtilities.loadImageIcon("AppearancePluginUI/color-swatch.svg", false)); // NOI18N colorSwatchButton.setFocusable(false); colorSwatchButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); colorSwatchButton.setIconTextGap(0); @@ -310,31 +266,31 @@ private void initComponents() { this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap() - .addComponent(labelColor) - .addGap(18, 18, 18) - .addComponent(gradientPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(colorSwatchToolbar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addComponent(labelColor) + .addGap(18, 18, 18) + .addComponent(gradientPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 160, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(colorSwatchToolbar, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(colorSwatchToolbar, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(labelColor, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(gradientPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 17, javax.swing.GroupLayout.PREFERRED_SIZE)))) - .addContainerGap(88, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(colorSwatchToolbar, javax.swing.GroupLayout.PREFERRED_SIZE, 22, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(labelColor, javax.swing.GroupLayout.PREFERRED_SIZE, 20, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(gradientPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 17, + javax.swing.GroupLayout.PREFERRED_SIZE)))) + .addContainerGap(88, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton colorSwatchButton; - private javax.swing.JToolBar colorSwatchToolbar; - private javax.swing.JPanel gradientPanel; - private javax.swing.JLabel labelColor; - // End of variables declaration//GEN-END:variables } diff --git a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RankingElementColorTransformerUI.java b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RankingElementColorTransformerUI.java index ae6a0da113..7d2ef80492 100644 --- a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RankingElementColorTransformerUI.java +++ b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RankingElementColorTransformerUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.ui.appearance.plugin; import javax.swing.AbstractButton; @@ -55,7 +56,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author mbastian */ @ServiceProvider(service = TransformerUI.class, position = 200) @@ -75,7 +75,7 @@ public Icon getIcon() { @Override public String getDisplayName() { - return NbBundle.getMessage(UniqueElementColorTransformerUI.class, "Attribute.name"); + return NbBundle.getMessage(RankingElementColorTransformerUI.class, "Attribute.ranking.name"); } @Override @@ -97,6 +97,13 @@ public synchronized AbstractButton[] getControlButton() { return null; } + @Override + public synchronized void onApply(Function function) { + if (panel != null) { + panel.saveCurrentGradientAsRecent(); + } + } + @Override public Class getTransformerClass() { return RankingElementColorTransformer.class; diff --git a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RankingElementSizeTransformerUI.java b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RankingElementSizeTransformerUI.java index 7e70557544..dfc39f6819 100644 --- a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RankingElementSizeTransformerUI.java +++ b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RankingElementSizeTransformerUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.ui.appearance.plugin; import javax.swing.AbstractButton; @@ -55,10 +56,9 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author mbastian */ -@ServiceProvider(service = TransformerUI.class, position = 300) +@ServiceProvider(service = TransformerUI.class, position = 400) public class RankingElementSizeTransformerUI implements TransformerUI { private RankingSizeTransformerPanel panel; @@ -75,7 +75,7 @@ public Icon getIcon() { @Override public String getDisplayName() { - return NbBundle.getMessage(UniqueElementColorTransformerUI.class, "Attribute.name"); + return NbBundle.getMessage(RankingElementSizeTransformerUI.class, "Attribute.ranking.name"); } @Override diff --git a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RankingLabelColorTransformerUI.java b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RankingLabelColorTransformerUI.java new file mode 100644 index 0000000000..244f9b4cb2 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RankingLabelColorTransformerUI.java @@ -0,0 +1,111 @@ +/* + Copyright 2008-2013 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2013 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2013 Gephi Consortium. + */ + +package org.gephi.ui.appearance.plugin; + +import javax.swing.AbstractButton; +import javax.swing.Icon; +import javax.swing.JPanel; +import org.gephi.appearance.api.Function; +import org.gephi.appearance.api.RankingFunction; +import org.gephi.appearance.plugin.RankingLabelColorTransformer; +import org.gephi.appearance.spi.RankingTransformer; +import org.gephi.appearance.spi.TransformerCategory; +import org.gephi.appearance.spi.TransformerUI; +import org.gephi.ui.appearance.plugin.category.DefaultCategory; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +/** + * @author mbastian + */ +@ServiceProvider(service = TransformerUI.class, position = 600) +public class RankingLabelColorTransformerUI implements TransformerUI { + + private RankingColorTransformerPanel panel; + + @Override + public TransformerCategory getCategory() { + return DefaultCategory.LABEL_COLOR; + } + + @Override + public Icon getIcon() { + return null; + } + + @Override + public String getDisplayName() { + return NbBundle.getMessage(RankingLabelColorTransformerUI.class, "Attribute.ranking.name"); + } + + @Override + public String getDescription() { + return null; + } + + @Override + public synchronized JPanel getPanel(Function function) { + if (panel == null) { + panel = new RankingColorTransformerPanel(); + } + panel.setup((RankingFunction) function); + return panel; + } + + @Override + public synchronized AbstractButton[] getControlButton() { + return null; + } + + @Override + public synchronized void onApply(Function function) { + if (panel != null) { + panel.saveCurrentGradientAsRecent(); + } + } + + @Override + public Class getTransformerClass() { + return RankingLabelColorTransformer.class; + } +} diff --git a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RankingLabelSizeTransformerUI.java b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RankingLabelSizeTransformerUI.java new file mode 100644 index 0000000000..7ae3c2efb9 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RankingLabelSizeTransformerUI.java @@ -0,0 +1,104 @@ +/* + Copyright 2008-2013 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2013 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2013 Gephi Consortium. + */ + +package org.gephi.ui.appearance.plugin; + +import javax.swing.AbstractButton; +import javax.swing.Icon; +import javax.swing.JPanel; +import org.gephi.appearance.api.Function; +import org.gephi.appearance.api.RankingFunction; +import org.gephi.appearance.plugin.RankingLabelSizeTransformer; +import org.gephi.appearance.spi.RankingTransformer; +import org.gephi.appearance.spi.TransformerCategory; +import org.gephi.appearance.spi.TransformerUI; +import org.gephi.ui.appearance.plugin.category.DefaultCategory; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +/** + * @author mbastian + */ +@ServiceProvider(service = TransformerUI.class, position = 800) +public class RankingLabelSizeTransformerUI implements TransformerUI { + + private RankingSizeTransformerPanel panel; + + @Override + public TransformerCategory getCategory() { + return DefaultCategory.LABEL_SIZE; + } + + @Override + public Icon getIcon() { + return null; + } + + @Override + public String getDisplayName() { + return NbBundle.getMessage(RankingLabelSizeTransformerUI.class, "Attribute.ranking.name"); + } + + @Override + public String getDescription() { + return null; + } + + @Override + public synchronized JPanel getPanel(Function function) { + if (panel == null) { + panel = new RankingSizeTransformerPanel(); + } + panel.setup((RankingFunction) function); + return panel; + } + + @Override + public synchronized AbstractButton[] getControlButton() { + return null; + } + + @Override + public Class getTransformerClass() { + return RankingLabelSizeTransformer.class; + } +} diff --git a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RankingSizeTransformerPanel.form b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RankingSizeTransformerPanel.form index 93b8904970..5e710c5b6d 100644 --- a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RankingSizeTransformerPanel.form +++ b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RankingSizeTransformerPanel.form @@ -25,11 +25,11 @@ - + - + diff --git a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RankingSizeTransformerPanel.java b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RankingSizeTransformerPanel.java index 3b2312be82..d6b7c802db 100644 --- a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RankingSizeTransformerPanel.java +++ b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RankingSizeTransformerPanel.java @@ -39,53 +39,52 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.appearance.plugin; -import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.gephi.appearance.api.RankingFunction; -import org.gephi.appearance.plugin.RankingNodeSizeTransformer; -import org.openide.util.NbPreferences; +import org.gephi.appearance.plugin.RankingSizeTransformer; /** - * * @author Mathieu Bastian */ public class RankingSizeTransformerPanel extends javax.swing.JPanel { - private RankingNodeSizeTransformer sizeTransformer; + // Variables declaration - do not modify//GEN-BEGIN:variables + private RankingSizeTransformer sizeTransformer; + private javax.swing.JSpinner maxSize; + private javax.swing.JSpinner minSize; + + private ChangeListener maxSizeChangeEvent = null; + private ChangeListener minSizeChangeEvent = null; + // End of variables declaration//GEN-END:variables public RankingSizeTransformerPanel() { initComponents(); } public void setup(RankingFunction function) { - sizeTransformer = (RankingNodeSizeTransformer) function.getTransformer(); - - final String MIN_SIZE = "RankingSizeTransformerPanel_" + sizeTransformer.getClass().getSimpleName() + "_min"; - final String MAX_SIZE = "RankingSizeTransformerPanel_" + sizeTransformer.getClass().getSimpleName() + "_max"; - - float minSizeStart = NbPreferences.forModule(RankingSizeTransformerPanel.class).getFloat(MIN_SIZE, sizeTransformer.getMinSize()); - float maxSizeStart = NbPreferences.forModule(RankingSizeTransformerPanel.class).getFloat(MAX_SIZE, sizeTransformer.getMaxSize()); - sizeTransformer.setMinSize(minSizeStart); - sizeTransformer.setMaxSize(maxSizeStart); - - minSize.setValue(minSizeStart); - maxSize.setValue(maxSizeStart); - minSize.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - sizeTransformer.setMinSize((Float) minSize.getValue()); - NbPreferences.forModule(RankingSizeTransformerPanel.class).putFloat(MIN_SIZE, (Float) minSize.getValue()); - } - }); - maxSize.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - sizeTransformer.setMaxSize((Float) maxSize.getValue()); - NbPreferences.forModule(RankingSizeTransformerPanel.class).putFloat(MAX_SIZE, (Float) maxSize.getValue()); - } - }); + sizeTransformer = function.getTransformer(); + + // setup is called at each change of function, so we need to clean the minSize and maxSize changeEvent + if (minSizeChangeEvent != null) { + minSize.removeChangeListener(minSizeChangeEvent); + } + if (maxSizeChangeEvent != null) { + maxSize.removeChangeListener(maxSizeChangeEvent); + } + + minSize.setValue(sizeTransformer.getMinSize()); + maxSize.setValue(sizeTransformer.getMaxSize()); + + // Regenerate the event function. Used also to delete it later + minSizeChangeEvent = (e -> sizeTransformer.setMinSize((Float) minSize.getValue())); + maxSizeChangeEvent = (e -> sizeTransformer.setMaxSize((Float) maxSize.getValue())); + + // Add the change event listener + minSize.addChangeListener(minSizeChangeEvent); + maxSize.addChangeListener(maxSizeChangeEvent); } /** @@ -97,52 +96,53 @@ public void stateChanged(ChangeEvent e) { // //GEN-BEGIN:initComponents private void initComponents() { - labelMinSize = new javax.swing.JLabel(); + javax.swing.JLabel labelMinSize = new javax.swing.JLabel(); minSize = new javax.swing.JSpinner(); - labelMaxSize = new javax.swing.JLabel(); + // Variables declaration - do not modify//GEN-BEGIN:variables + javax.swing.JLabel labelMaxSize = new javax.swing.JLabel(); maxSize = new javax.swing.JSpinner(); setPreferredSize(new java.awt.Dimension(225, 114)); - labelMinSize.setText(org.openide.util.NbBundle.getMessage(RankingSizeTransformerPanel.class, "RankingSizeTransformerPanel.labelMinSize.text")); // NOI18N + labelMinSize.setText(org.openide.util.NbBundle + .getMessage(RankingSizeTransformerPanel.class, "RankingSizeTransformerPanel.labelMinSize.text")); // NOI18N - minSize.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(1.0f), Float.valueOf(0.1f), null, Float.valueOf(0.5f))); + minSize.setModel(new javax.swing.SpinnerNumberModel(1.0f, 0.01f, null, 0.5f)); - labelMaxSize.setText(org.openide.util.NbBundle.getMessage(RankingSizeTransformerPanel.class, "RankingSizeTransformerPanel.labelMaxSize.text")); // NOI18N + labelMaxSize.setText(org.openide.util.NbBundle + .getMessage(RankingSizeTransformerPanel.class, "RankingSizeTransformerPanel.labelMaxSize.text")); // NOI18N - maxSize.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(4.0f), Float.valueOf(0.5f), null, Float.valueOf(0.5f))); + maxSize.setModel(new javax.swing.SpinnerNumberModel(4.0f, 0.5f, null, 0.5f)); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(labelMinSize) - .addGap(8, 8, 8) - .addComponent(minSize, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(labelMaxSize) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(maxSize, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(labelMinSize) + .addGap(8, 8, 8) + .addComponent(minSize, javax.swing.GroupLayout.PREFERRED_SIZE, 60, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addComponent(labelMaxSize) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(maxSize, javax.swing.GroupLayout.PREFERRED_SIZE, 60, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(minSize, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(maxSize, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelMaxSize) - .addComponent(labelMinSize)) - .addContainerGap(80, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(minSize, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(maxSize, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(labelMaxSize) + .addComponent(labelMinSize)) + .addContainerGap(80, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JLabel labelMaxSize; - private javax.swing.JLabel labelMinSize; - private javax.swing.JSpinner maxSize; - private javax.swing.JSpinner minSize; - // End of variables declaration//GEN-END:variables } diff --git a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RecentPalettes.java b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RecentPalettes.java index bdac46d95b..d3e3e6c236 100644 --- a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RecentPalettes.java +++ b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/RecentPalettes.java @@ -39,48 +39,46 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.appearance.plugin; import java.awt.Color; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.util.ArrayList; -import java.util.List; -import java.util.prefs.BackingStoreException; +import java.util.Arrays; +import java.util.LinkedList; import java.util.prefs.Preferences; import org.gephi.appearance.plugin.RankingElementColorTransformer.LinearGradient; +import org.gephi.utils.ColorUtils; import org.openide.util.NbPreferences; /** - * * @author Mathieu Bastian */ public class RecentPalettes { - protected static String DEFAULT_NODE_NAME = "prefs"; public static final String COLORS = "PaletteColors"; public static final String POSITIONS = "PalettePositions"; - private List gradients; - private int maxSize; - protected String nodeName = null; + private static final int MAX_SIZE = 14; + protected static final String NODE_NAME = "recentrankingpalettes"; + private final LinkedList gradients; public RecentPalettes() { - nodeName = "recentpalettes"; - maxSize = 14; - gradients = new ArrayList(maxSize); + gradients = new LinkedList<>(); retrieve(); } public void add(LinearGradient gradient) { + if (!gradients.isEmpty() && gradients.getFirst().equals(gradient)) { + return; + } //Remove the old gradients.remove(gradient); // add to the top - gradients.add(0, gradient); - while (gradients.size() > maxSize) { - gradients.remove(gradients.size() - 1); + gradients.push(new LinearGradient( + Arrays.copyOf(gradient.getColors(), gradient.getColors().length), + Arrays.copyOf(gradient.getPositions(), gradient.getPositions().length))); + while (gradients.size() > MAX_SIZE) { + gradients.removeLast(); } store(); @@ -90,41 +88,34 @@ public LinearGradient[] getPalettes() { return gradients.toArray(new LinearGradient[0]); } - protected void store() { + private void store() { Preferences prefs = getPreferences(); - // clear the backing store - try { - prefs.clear(); - } catch (BackingStoreException ex) { + int i = 0; + for (LinearGradient gradient : gradients) { + prefs.putByteArray(COLORS + i, ColorUtils.serializeColors(gradient.getColors())); + prefs.putByteArray(POSITIONS + i, ColorUtils.serializeFloats(gradient.getPositions())); + i++; } - - for (int i = 0; i < gradients.size(); i++) { - LinearGradient gradient = gradients.get(i); - try { - prefs.putByteArray(COLORS + i, serializeColors(gradient.getColors())); - prefs.putByteArray(POSITIONS + i, serializePositions(gradient.getPositions())); - } catch (Exception e) { - e.printStackTrace(); - } + // Remove stale entries beyond the current list size + for (; i < MAX_SIZE; i++) { + prefs.remove(COLORS + i); + prefs.remove(POSITIONS + i); } } - protected void retrieve() { + private void retrieve() { gradients.clear(); Preferences prefs = getPreferences(); - for (int i = 0; i < maxSize; i++) { + for (int i = 0; i < MAX_SIZE; i++) { byte[] cols = prefs.getByteArray(COLORS + i, null); byte[] poss = prefs.getByteArray(POSITIONS + i, null); if (cols != null && poss != null) { - try { - Color[] colors = deserializeColors(cols); - float[] posisitons = deserializePositions(poss); - LinearGradient linearGradient = new LinearGradient(colors, posisitons); - gradients.add(linearGradient); - } catch (Exception e) { - e.printStackTrace(); + Color[] colors = ColorUtils.deserializeColors(cols); + float[] positions = ColorUtils.deserializeFloats(poss); + if (colors != null && positions != null) { + gradients.addLast(new LinearGradient(colors, positions)); } } else { break; @@ -138,45 +129,6 @@ protected void retrieve() { * @return Preferences */ protected final Preferences getPreferences() { - String name = DEFAULT_NODE_NAME; - if (nodeName != null) { - name = nodeName; - } - - Preferences prefs = NbPreferences.forModule(this.getClass()).node("options").node(name); - - return prefs; - } - - private byte[] serializePositions(float[] positions) throws Exception { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - ObjectOutputStream out = new ObjectOutputStream(bos); - out.writeObject(positions); - out.close(); - return bos.toByteArray(); - } - - private float[] deserializePositions(byte[] positions) throws Exception { - ByteArrayInputStream bis = new ByteArrayInputStream(positions); - ObjectInputStream in = new ObjectInputStream(bis); - float[] array = (float[]) in.readObject(); - in.close(); - return array; - } - - private byte[] serializeColors(Color[] colors) throws Exception { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - ObjectOutputStream out = new ObjectOutputStream(bos); - out.writeObject(colors); - out.close(); - return bos.toByteArray(); - } - - private Color[] deserializeColors(byte[] colors) throws Exception { - ByteArrayInputStream bis = new ByteArrayInputStream(colors); - ObjectInputStream in = new ObjectInputStream(bis); - Color[] array = (Color[]) in.readObject(); - in.close(); - return array; + return NbPreferences.forModule(this.getClass()).node("options").node(NODE_NAME); } } diff --git a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/UniqueColorTransformerPanel.java b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/UniqueColorTransformerPanel.java index 0b573269c8..b64b79350d 100644 --- a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/UniqueColorTransformerPanel.java +++ b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/UniqueColorTransformerPanel.java @@ -39,41 +39,53 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.ui.appearance.plugin; import java.awt.Color; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; +import java.beans.PropertyChangeListener; +import net.java.dev.colorchooser.ColorChooser; import org.gephi.appearance.api.SimpleFunction; -import org.gephi.appearance.plugin.UniqueElementColorTransformer; +import org.gephi.appearance.plugin.AbstractUniqueColorTransformer; /** - * * @author mbastian */ public class UniqueColorTransformerPanel extends javax.swing.JPanel { - private UniqueElementColorTransformer transformer; + private AbstractUniqueColorTransformer transformer; + // Variables declaration - do not modify//GEN-BEGIN:variables + private net.java.dev.colorchooser.ColorChooser colorChooser; + private javax.swing.JLabel colorLabel; + + // End of variables declaration//GEN-END:variables + private PropertyChangeListener colorPropertyChangeListener = null; - /** - * Creates new form UniqueNodeColorTransformerPanel - */ public UniqueColorTransformerPanel() { initComponents(); - colorChooser.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - transformer.setColor(colorChooser.getColor()); - colorLabel.setText(getHex(colorChooser.getColor())); - } - }); + } public void setup(SimpleFunction function) { - transformer = (UniqueElementColorTransformer) function.getTransformer(); + transformer = function.getTransformer(); + + if (colorPropertyChangeListener != null) { + colorChooser.removePropertyChangeListener(colorPropertyChangeListener); + } + colorChooser.setColor(transformer.getColor()); colorLabel.setText(getHex(transformer.getColor())); + colorPropertyChangeListener = (evt -> { + if (evt.getPropertyName().equals(ColorChooser.PROP_COLOR)) { + Color newColor = colorChooser.getColor(); + if (!transformer.getColor().equals(newColor)) { + transformer.setColor(newColor); + colorLabel.setText(getHex(newColor)); + } + } + }); + colorChooser.addPropertyChangeListener(colorPropertyChangeListener); } private String getHex(Color color) { @@ -88,49 +100,48 @@ private String getHex(Color color) { @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents private void initComponents() { - java.awt.GridBagConstraints gridBagConstraints; colorChooser = new net.java.dev.colorchooser.ColorChooser(); colorLabel = new javax.swing.JLabel(); colorChooser.setMinimumSize(new java.awt.Dimension(14, 14)); colorChooser.setPreferredSize(new java.awt.Dimension(14, 14)); - colorChooser.setToolTipText(org.openide.util.NbBundle.getMessage(UniqueColorTransformerPanel.class, "UniqueColorTransformerPanel.colorChooser.toolTipText")); // NOI18N + colorChooser.setToolTipText(org.openide.util.NbBundle.getMessage(UniqueColorTransformerPanel.class, + "UniqueColorTransformerPanel.colorChooser.toolTipText")); // NOI18N javax.swing.GroupLayout colorChooserLayout = new javax.swing.GroupLayout(colorChooser); colorChooser.setLayout(colorChooserLayout); colorChooserLayout.setHorizontalGroup( colorChooserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 12, Short.MAX_VALUE) + .addGap(0, 12, Short.MAX_VALUE) ); colorChooserLayout.setVerticalGroup( colorChooserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 12, Short.MAX_VALUE) + .addGap(0, 12, Short.MAX_VALUE) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(colorChooser, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(colorLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 380, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(colorChooser, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(colorLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 380, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(colorLabel) - .addComponent(colorChooser, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(278, 278, 278)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(colorLabel) + .addComponent(colorChooser, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(278, 278, 278)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private net.java.dev.colorchooser.ColorChooser colorChooser; - private javax.swing.JLabel colorLabel; - // End of variables declaration//GEN-END:variables } diff --git a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/UniqueElementColorTransformerUI.java b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/UniqueElementColorTransformerUI.java index 2ea5b3ae8c..1c8bf06950 100644 --- a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/UniqueElementColorTransformerUI.java +++ b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/UniqueElementColorTransformerUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.ui.appearance.plugin; import javax.swing.AbstractButton; @@ -55,7 +56,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author mbastian */ @ServiceProvider(service = TransformerUI.class, position = 100) diff --git a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/UniqueLabelColorTransformerUI.java b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/UniqueLabelColorTransformerUI.java new file mode 100644 index 0000000000..6f62437d71 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/UniqueLabelColorTransformerUI.java @@ -0,0 +1,104 @@ +/* + Copyright 2008-2013 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2013 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2013 Gephi Consortium. + */ + +package org.gephi.ui.appearance.plugin; + +import javax.swing.AbstractButton; +import javax.swing.Icon; +import javax.swing.JPanel; +import org.gephi.appearance.api.Function; +import org.gephi.appearance.api.SimpleFunction; +import org.gephi.appearance.plugin.UniqueLabelColorTransformer; +import org.gephi.appearance.spi.SimpleTransformer; +import org.gephi.appearance.spi.TransformerCategory; +import org.gephi.appearance.spi.TransformerUI; +import org.gephi.ui.appearance.plugin.category.DefaultCategory; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +/** + * @author mbastian + */ +@ServiceProvider(service = TransformerUI.class, position = 500) +public class UniqueLabelColorTransformerUI implements TransformerUI { + + private UniqueColorTransformerPanel panel; + + @Override + public String getDisplayName() { + return NbBundle.getMessage(UniqueLabelColorTransformerUI.class, "Unique.name"); + } + + @Override + public TransformerCategory getCategory() { + return DefaultCategory.LABEL_COLOR; + } + + @Override + public String getDescription() { + return null; + } + + @Override + public Icon getIcon() { + return null; + } + + @Override + public synchronized JPanel getPanel(Function function) { + if (panel == null) { + panel = new UniqueColorTransformerPanel(); + } + panel.setup((SimpleFunction) function); + return panel; + } + + @Override + public synchronized AbstractButton[] getControlButton() { + return null; + } + + @Override + public Class getTransformerClass() { + return UniqueLabelColorTransformer.class; + } +} diff --git a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/UniqueLabelSizeTransformerUI.java b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/UniqueLabelSizeTransformerUI.java new file mode 100644 index 0000000000..f965166b72 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/UniqueLabelSizeTransformerUI.java @@ -0,0 +1,104 @@ +/* + Copyright 2008-2013 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2013 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2013 Gephi Consortium. + */ + +package org.gephi.ui.appearance.plugin; + +import javax.swing.AbstractButton; +import javax.swing.Icon; +import javax.swing.JPanel; +import org.gephi.appearance.api.Function; +import org.gephi.appearance.api.SimpleFunction; +import org.gephi.appearance.plugin.UniqueLabelSizeTransformer; +import org.gephi.appearance.spi.SimpleTransformer; +import org.gephi.appearance.spi.TransformerCategory; +import org.gephi.appearance.spi.TransformerUI; +import org.gephi.ui.appearance.plugin.category.DefaultCategory; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +/** + * @author mbastian + */ +@ServiceProvider(service = TransformerUI.class, position = 700) +public class UniqueLabelSizeTransformerUI implements TransformerUI { + + private UniqueSizeTransformerPanel panel; + + @Override + public String getDisplayName() { + return NbBundle.getMessage(UniqueLabelSizeTransformerUI.class, "Unique.name"); + } + + @Override + public TransformerCategory getCategory() { + return DefaultCategory.LABEL_SIZE; + } + + @Override + public String getDescription() { + return null; + } + + @Override + public Icon getIcon() { + return null; + } + + @Override + public synchronized JPanel getPanel(Function function) { + if (panel == null) { + panel = new UniqueSizeTransformerPanel(); + } + panel.setup((SimpleFunction) function); + return panel; + } + + @Override + public synchronized AbstractButton[] getControlButton() { + return null; + } + + @Override + public Class getTransformerClass() { + return UniqueLabelSizeTransformer.class; + } +} diff --git a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/UniqueNodeSizeTransformerUI.java b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/UniqueNodeSizeTransformerUI.java index 377bd8b9a7..e7c85dc2a1 100644 --- a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/UniqueNodeSizeTransformerUI.java +++ b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/UniqueNodeSizeTransformerUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.ui.appearance.plugin; import javax.swing.AbstractButton; @@ -55,17 +56,16 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author mbastian */ -@ServiceProvider(service = TransformerUI.class, position = 100) +@ServiceProvider(service = TransformerUI.class, position = 300) public class UniqueNodeSizeTransformerUI implements TransformerUI { private UniqueSizeTransformerPanel panel; @Override public String getDisplayName() { - return NbBundle.getMessage(UniqueElementColorTransformerUI.class, "Unique.name"); + return NbBundle.getMessage(UniqueNodeSizeTransformerUI.class, "Unique.name"); } @Override diff --git a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/UniqueSizeTransformerPanel.java b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/UniqueSizeTransformerPanel.java index 851aa405a0..418049342e 100644 --- a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/UniqueSizeTransformerPanel.java +++ b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/UniqueSizeTransformerPanel.java @@ -39,35 +39,39 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.ui.appearance.plugin; -import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.gephi.appearance.api.SimpleFunction; -import org.gephi.appearance.plugin.UniqueNodeSizeTransformer; +import org.gephi.appearance.plugin.AbstractUniqueSizeTransformer; /** - * * @author mbastian */ public class UniqueSizeTransformerPanel extends javax.swing.JPanel { - private UniqueNodeSizeTransformer transformer; + private AbstractUniqueSizeTransformer transformer; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel jLabel1; + private javax.swing.JSpinner sizeSpinner; + // End of variables declaration//GEN-END:variables + + private ChangeListener sizeChangeListener = null; public UniqueSizeTransformerPanel() { initComponents(); - - sizeSpinner.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - transformer.setSize((Float) sizeSpinner.getValue()); - } - }); } public void setup(SimpleFunction function) { - transformer = (UniqueNodeSizeTransformer) function.getTransformer(); + transformer = function.getTransformer(); + + if (sizeChangeListener != null) { + sizeSpinner.removeChangeListener(sizeChangeListener); + } sizeSpinner.setValue(transformer.getSize()); + sizeChangeListener = (e -> transformer.setSize((Float) sizeSpinner.getValue())); + sizeSpinner.addChangeListener(sizeChangeListener); } /** @@ -82,33 +86,33 @@ private void initComponents() { jLabel1 = new javax.swing.JLabel(); sizeSpinner = new javax.swing.JSpinner(); - jLabel1.setText(org.openide.util.NbBundle.getMessage(UniqueSizeTransformerPanel.class, "UniqueSizeTransformerPanel.jLabel1.text")); // NOI18N + jLabel1.setText(org.openide.util.NbBundle + .getMessage(UniqueSizeTransformerPanel.class, "UniqueSizeTransformerPanel.jLabel1.text")); // NOI18N - sizeSpinner.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(1.0f), Float.valueOf(0.1f), null, Float.valueOf(0.5f))); + sizeSpinner.setModel( + new javax.swing.SpinnerNumberModel(1.0f, 0.01f, null, 0.5f)); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(jLabel1) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(sizeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(294, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(jLabel1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(sizeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(294, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(jLabel1) - .addComponent(sizeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(266, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel1) + .addComponent(sizeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(266, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JLabel jLabel1; - private javax.swing.JSpinner sizeSpinner; - // End of variables declaration//GEN-END:variables } diff --git a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/category/DefaultCategory.java b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/category/DefaultCategory.java index 2f18ace0cd..95ea540b44 100644 --- a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/category/DefaultCategory.java +++ b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/category/DefaultCategory.java @@ -39,15 +39,15 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.ui.appearance.plugin.category; import javax.swing.Icon; -import javax.swing.ImageIcon; import org.gephi.appearance.spi.TransformerCategory; +import org.openide.util.ImageUtilities; import org.openide.util.NbBundle; /** - * * @author mbastian */ public class DefaultCategory { @@ -60,13 +60,18 @@ public String getDisplayName() { @Override public Icon getIcon() { - return new ImageIcon(getClass().getResource("/org/gephi/ui/appearance/plugin/resources/size.png")); + return ImageUtilities.loadImageIcon("AppearancePluginUI/size.svg", false); } @Override - public String toString() { + public String getId() { return "SIZE"; } + + @Override + public String toString() { + return getId(); + } }; public static TransformerCategory COLOR = new TransformerCategory() { @Override @@ -76,12 +81,59 @@ public String getDisplayName() { @Override public Icon getIcon() { - return new ImageIcon(getClass().getResource("/org/gephi/ui/appearance/plugin/resources/color.png")); + return ImageUtilities.loadImageIcon("AppearancePluginUI/color.svg", false); } @Override - public String toString() { + public String getId() { return "COLOR"; } + + @Override + public String toString() { + return getId(); + } + }; + public static TransformerCategory LABEL_COLOR = new TransformerCategory() { + @Override + public String getDisplayName() { + return NbBundle.getMessage(DefaultCategory.class, "Category.LabelColor.name"); + } + + @Override + public Icon getIcon() { + return ImageUtilities.loadImageIcon("AppearancePluginUI/labelcolor.svg", false); + } + + @Override + public String getId() { + return "LABEL_COLOR"; + } + + @Override + public String toString() { + return getId(); + } + }; + public static TransformerCategory LABEL_SIZE = new TransformerCategory() { + @Override + public String getDisplayName() { + return NbBundle.getMessage(DefaultCategory.class, "Category.LabelSize.name"); + } + + @Override + public Icon getIcon() { + return ImageUtilities.loadImageIcon("AppearancePluginUI/labelsize.svg", false); + } + + @Override + public String getId() { + return "LABEL_SIZE"; + } + + @Override + public String toString() { + return getId(); + } }; } diff --git a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/palette/PaletteGeneratorPanel.form b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/palette/PaletteGeneratorPanel.form index 42a53028c1..b431a66fcd 100644 --- a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/palette/PaletteGeneratorPanel.form +++ b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/palette/PaletteGeneratorPanel.form @@ -26,15 +26,16 @@ - - - - - - - - - + + + + + + + + + + @@ -45,19 +46,30 @@ - - - + + + + + + + + + + + + + + + + - - - + @@ -134,5 +146,21 @@ + + + + + + + + + + + + + + + + diff --git a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/palette/PaletteGeneratorPanel.java b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/palette/PaletteGeneratorPanel.java index e189065dff..6fb9db71ac 100644 --- a/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/palette/PaletteGeneratorPanel.java +++ b/modules/AppearancePluginUI/src/main/java/org/gephi/ui/appearance/plugin/palette/PaletteGeneratorPanel.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.ui.appearance.plugin.palette; import java.awt.Color; @@ -47,6 +48,7 @@ Development and Distribution License("CDDL") (collectively, the import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; +import java.util.Arrays; import javax.swing.DefaultComboBoxModel; import javax.swing.JLabel; import javax.swing.JTable; @@ -58,13 +60,24 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.appearance.plugin.palette.Preset; /** - * * @author mbastian */ public class PaletteGeneratorPanel extends javax.swing.JPanel { private Preset selectedPreset; private Palette selectedPalette; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPanel centerPanel; + private javax.swing.JScrollPane centerScrollPanel; + private javax.swing.JLabel colorCountLabel; + private javax.swing.JTable colorTable; + private javax.swing.JButton generateButton; + private javax.swing.JLabel labelColorCount; + private javax.swing.JLabel labelPreset; + private javax.swing.JSpinner limitColorSpinner; + private javax.swing.JCheckBox limitColorsCheckbox; + private javax.swing.JComboBox presetCombo; + // End of variables declaration//GEN-END:variables public PaletteGeneratorPanel() { initComponents(); @@ -77,6 +90,13 @@ public PaletteGeneratorPanel() { selectedPreset = (Preset) model.getElementAt(0); presetCombo.setModel(model); + limitColorsCheckbox.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + limitColorSpinner.setEnabled(e.getStateChange() == ItemEvent.SELECTED); + } + }); + presetCombo.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { @@ -97,9 +117,20 @@ public void actionPerformed(ActionEvent e) { private void generate() { int colorCount = Integer.parseInt(colorCountLabel.getText()); - selectedPalette = PaletteManager.getInstance().generatePalette(colorCount, selectedPreset); + int paletteCount = colorCount; + if (limitColorsCheckbox.isSelected()) { + paletteCount = ((Number) limitColorSpinner.getValue()).intValue(); + } + selectedPalette = PaletteManager.getInstance().generatePalette(paletteCount, selectedPreset); + if (paletteCount < colorCount) { + Color[] cols = Arrays.copyOf(selectedPalette.getColors(), colorCount); + for (int i = paletteCount; i < cols.length; i++) { + cols[i] = Color.LIGHT_GRAY; + } + selectedPalette = new Palette(cols); + } - String[] columnNames = new String[]{"Color"}; + String[] columnNames = new String[] {"Color"}; DefaultTableModel model = new DefaultTableModel(columnNames, colorCount) { @Override public boolean isCellEditable(int row, int column) { @@ -119,26 +150,13 @@ public boolean isCellEditable(int row, int column) { public void setup(int colorsCount) { colorCountLabel.setText(String.valueOf(colorsCount)); + limitColorSpinner.setModel(new javax.swing.SpinnerNumberModel(Math.min(colorsCount, 8), 1, colorsCount, 1)); } public Palette getSelectedPalette() { return selectedPalette; } - class ColorCellRenderer extends JLabel implements TableCellRenderer { - - public ColorCellRenderer() { - setOpaque(true); - } - - @Override - public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { - Color c = (Color) value; - setBackground(c); - return this; - } - } - /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always @@ -157,12 +175,17 @@ private void initComponents() { centerScrollPanel = new javax.swing.JScrollPane(); centerPanel = new javax.swing.JPanel(); colorTable = new javax.swing.JTable(); + limitColorsCheckbox = new javax.swing.JCheckBox(); + limitColorSpinner = new javax.swing.JSpinner(); - labelColorCount.setText(org.openide.util.NbBundle.getMessage(PaletteGeneratorPanel.class, "PaletteGeneratorPanel.labelColorCount.text")); // NOI18N + labelColorCount.setText(org.openide.util.NbBundle + .getMessage(PaletteGeneratorPanel.class, "PaletteGeneratorPanel.labelColorCount.text")); // NOI18N - labelPreset.setText(org.openide.util.NbBundle.getMessage(PaletteGeneratorPanel.class, "PaletteGeneratorPanel.labelPreset.text")); // NOI18N + labelPreset.setText(org.openide.util.NbBundle + .getMessage(PaletteGeneratorPanel.class, "PaletteGeneratorPanel.labelPreset.text")); // NOI18N - generateButton.setText(org.openide.util.NbBundle.getMessage(PaletteGeneratorPanel.class, "PaletteGeneratorPanel.generateButton.text")); // NOI18N + generateButton.setText(org.openide.util.NbBundle + .getMessage(PaletteGeneratorPanel.class, "PaletteGeneratorPanel.generateButton.text")); // NOI18N centerScrollPanel.setBorder(null); centerScrollPanel.setOpaque(false); @@ -170,10 +193,10 @@ private void initComponents() { centerPanel.setLayout(new java.awt.GridBagLayout()); colorTable.setModel(new javax.swing.table.DefaultTableModel( - new Object [][] { + new Object[][] { }, - new String [] { + new String[] { } )); @@ -193,54 +216,81 @@ private void initComponents() { centerScrollPanel.setViewportView(centerPanel); + limitColorsCheckbox.setSelected(true); + limitColorsCheckbox.setText(org.openide.util.NbBundle + .getMessage(PaletteGeneratorPanel.class, "PaletteGeneratorPanel.limitColorsCheckbox.text")); // NOI18N + limitColorsCheckbox.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT); + + limitColorSpinner.setModel(new javax.swing.SpinnerNumberModel(8, 1, null, 1)); + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(centerScrollPanel) - .addGroup(layout.createSequentialGroup() - .addComponent(presetCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 216, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 73, Short.MAX_VALUE) - .addComponent(generateButton)) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(labelColorCount) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(colorCountLabel)) - .addComponent(labelPreset)) - .addGap(0, 0, Short.MAX_VALUE))) - .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(centerScrollPanel) + .addGroup(layout.createSequentialGroup() + .addComponent(presetCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 216, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 73, Short.MAX_VALUE) + .addComponent(generateButton)) + .addGroup(layout.createSequentialGroup() + .addComponent(labelPreset) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(limitColorSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 60, + javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createSequentialGroup() + .addComponent(labelColorCount) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(colorCountLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(limitColorsCheckbox))) + .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(labelColorCount) - .addComponent(colorCountLabel)) - .addGap(18, 18, 18) - .addComponent(labelPreset) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(presetCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(generateButton)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(centerScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 208, Short.MAX_VALUE) - .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelColorCount) + .addComponent(colorCountLabel)) + .addComponent(limitColorsCheckbox)) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(28, 28, 28) + .addComponent(labelPreset)) + .addGroup(layout.createSequentialGroup() + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(limitColorSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(presetCombo, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(generateButton)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(centerScrollPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 191, Short.MAX_VALUE) + .addContainerGap()) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JPanel centerPanel; - private javax.swing.JScrollPane centerScrollPanel; - private javax.swing.JLabel colorCountLabel; - private javax.swing.JTable colorTable; - private javax.swing.JButton generateButton; - private javax.swing.JLabel labelColorCount; - private javax.swing.JLabel labelPreset; - private javax.swing.JComboBox presetCombo; - // End of variables declaration//GEN-END:variables + + class ColorCellRenderer extends JLabel implements TableCellRenderer { + + public ColorCellRenderer() { + setOpaque(true); + } + + @Override + public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, + int row, int column) { + Color c = (Color) value; + setBackground(c); + return this; + } + } } diff --git a/modules/AppearancePluginUI/src/main/nbm/manifest.mf b/modules/AppearancePluginUI/src/main/nbm/manifest.mf index 5a381022a0..9a39468cd6 100644 --- a/modules/AppearancePluginUI/src/main/nbm/manifest.mf +++ b/modules/AppearancePluginUI/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/ui/appearance/plugin/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Plugin +OpenIDE-Module-Name: Partition Plugin UI \ No newline at end of file diff --git a/modules/AppearancePluginUI/src/main/nbm/module.xml b/modules/AppearancePluginUI/src/main/nbm/module.xml deleted file mode 100644 index 729d47bc51..0000000000 --- a/modules/AppearancePluginUI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle.properties index 82b5b86daf..5a3b096fdd 100644 --- a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle.properties +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle.properties @@ -1,28 +1,23 @@ - +OpenIDE-Module-Short-Description=Partition transformers UI Unique.name = Unique -Attribute.name = Attribute - - -ColorTransformerUI.name = Color -SizeTransformerUI.name = Size -LabelColorTransformerUI.name = Label Color -LabelSizeTransformerUI.name = Label Size +Attribute.ranking.name = Ranking +Attribute.partition.name = Partition RankingColorTransformerPanel.labelColor.text=Color: RankingSizeTransformerPanel.labelMaxSize.text=Max size: RankingSizeTransformerPanel.labelMinSize.text=Min size: -PalettePopup.light=Light -PalettePopup.dark=Dark +PalettePopup.palette=Palettes PalettePopup.default=Default PalettePopup.generate=Generate... PalettePopup.invert=Invert PalettePopup.standard=Standard PalettePopup.recent=Recent PalettePopup.norecent=No recent palette -PalettePopup.allblack=All black +PalettePopup.allgrey=All grey PalettePopup.allwhite=All white UniqueColorTransformerPanel.colorChooser.toolTipText=Set Color UniqueSizeTransformerPanel.jLabel1.text=Size: PartitionColorTransformerPanel.paletteButton=Palette... PartitionColorTransformerPanel.generatePalettePanel.title=Generate Palette +PartitionColorTransformerPanel.tooltip.elementsCount = elements diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_ar.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_ca.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_ca.properties new file mode 100644 index 0000000000..97cca3fa50 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_ca.properties @@ -0,0 +1,23 @@ +OpenIDE-Module-Short-Description=Partition transformers UI +Unique.name=Unique +Attribute.ranking.name=Ranking +Attribute.partition.name=Partition + + +RankingColorTransformerPanel.labelColor.text=Color: +RankingSizeTransformerPanel.labelMaxSize.text=Mida mΰxima: +RankingSizeTransformerPanel.labelMinSize.text=Mida mνnima: +PalettePopup.palette=Palettes +PalettePopup.default=Per defecte +PalettePopup.generate=Genera... +PalettePopup.invert=Inverteix +PalettePopup.standard=Standard +PalettePopup.recent=Recent +PalettePopup.norecent=No recent palette +PalettePopup.allgrey=All grey +PalettePopup.allwhite=Tots blancs +UniqueColorTransformerPanel.colorChooser.toolTipText=Estableix el color +UniqueSizeTransformerPanel.jLabel1.text=Mida: +PartitionColorTransformerPanel.paletteButton=Paleta... +PartitionColorTransformerPanel.generatePalettePanel.title=Genera una paleta +PartitionColorTransformerPanel.tooltip.elementsCount=elements diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_cs.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_cs.properties index 4acd7fb739..69a2eceb1b 100644 --- a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_cs.properties +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_cs.properties @@ -1,2 +1,25 @@ - -UniqueColorTransformerPanel.colorChooser.toolTipText=Hrana dovnit\u0159<- Barva +OpenIDE-Module-Short-Description=Rozhranν transformαtor\u016f oddνlu +Unique.name = Jedine\u010dnι +# Attribute.ranking.name = Ranking +# Attribute.partition.name = Partition + + + +RankingColorTransformerPanel.labelColor.text=Barva: +RankingSizeTransformerPanel.labelMaxSize.text=Maximαlnν velikost: +RankingSizeTransformerPanel.labelMinSize.text=Minimαlnν velikost: + +PalettePopup.palette=Palety +PalettePopup.default=Vύchozν +PalettePopup.generate=Vytvo\u0159it... +PalettePopup.invert=P\u0159evrαtit +PalettePopup.standard=Standardnν +PalettePopup.recent=Nedαvnι +PalettePopup.norecent=\u017dαdnα nedαvnα paleta +PalettePopup.allgrey=V\u0161e \u0161edι +PalettePopup.allwhite=V\u0161e bνlι +UniqueColorTransformerPanel.colorChooser.toolTipText=Nastavit barvu +UniqueSizeTransformerPanel.jLabel1.text=Velikost: +PartitionColorTransformerPanel.paletteButton=Paleta... +PartitionColorTransformerPanel.generatePalettePanel.title=Vytvo\u0159it paletu +PartitionColorTransformerPanel.tooltip.elementsCount = prvky diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_de.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_de.properties new file mode 100644 index 0000000000..da10a9a33f --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_de.properties @@ -0,0 +1,22 @@ +OpenIDE-Module-Short-Description=Partition-Transformierer Bedienoberflδche +Unique.name=Eindeutig +# Attribute.ranking.name = Ranking +# Attribute.partition.name = Partition + +RankingColorTransformerPanel.labelColor.text=Farbe: +RankingSizeTransformerPanel.labelMaxSize.text=Maximalgrφίe: +RankingSizeTransformerPanel.labelMinSize.text=Minimalgrφίe: +PalettePopup.palette=Paletten +PalettePopup.default=Standard +PalettePopup.generate=Generiere... +PalettePopup.invert=Invertiere +PalettePopup.standard=Standard +PalettePopup.recent=Aktuell +PalettePopup.norecent=Keine aktuelle Palette +PalettePopup.allgrey=Alles grau +PalettePopup.allwhite=Komplett weiί +UniqueColorTransformerPanel.colorChooser.toolTipText=Setze Farbe +UniqueSizeTransformerPanel.jLabel1.text=Grφίe: +PartitionColorTransformerPanel.paletteButton=Palette... +PartitionColorTransformerPanel.generatePalettePanel.title=Generiere Palette +PartitionColorTransformerPanel.tooltip.elementsCount=Elemente diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_es.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_es.properties index e98bee929f..193c894571 100644 --- a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_es.properties +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_es.properties @@ -1,2 +1,23 @@ +OpenIDE-Module-Short-Description=UI para los transformadores de particionado +Unique.name=Ϊnico +Attribute.ranking.name=Clasificaci\u00F3n +Attribute.partition.name=Particiσn + +RankingColorTransformerPanel.labelColor.text=Color: +RankingSizeTransformerPanel.labelMaxSize.text=Tamaρo mαx.: +RankingSizeTransformerPanel.labelMinSize.text=Tamaρo mνn.: +PalettePopup.palette=Paletas +PalettePopup.default=Por defecto +PalettePopup.generate=Generar... +PalettePopup.invert=Invertir +PalettePopup.standard=Estαndar +PalettePopup.recent=Recientes +PalettePopup.norecent=Sin paletas recientes +PalettePopup.allgrey=Todo grises +PalettePopup.allwhite=Todos blancos UniqueColorTransformerPanel.colorChooser.toolTipText=Color de arista Entrante <- +UniqueSizeTransformerPanel.jLabel1.text=Tamaρo: +PartitionColorTransformerPanel.paletteButton=Paleta... +PartitionColorTransformerPanel.generatePalettePanel.title=Generar paleta +PartitionColorTransformerPanel.tooltip.elementsCount=elementos diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_fr.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_fr.properties index 65fcfcd1dc..4bb8a4f5be 100644 --- a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_fr.properties +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_fr.properties @@ -1,2 +1,23 @@ +OpenIDE-Module-Short-Description=GUI transformeurs de partition +Unique.name=Unique +Attribute.ranking.name=Classement +Attribute.partition.name=Partition + +RankingColorTransformerPanel.labelColor.text=Couleur : +RankingSizeTransformerPanel.labelMaxSize.text=Taille max : +RankingSizeTransformerPanel.labelMinSize.text=Taille min : +PalettePopup.palette=Palettes +PalettePopup.default=Dιfaut +PalettePopup.generate=Gιnιrer... +PalettePopup.invert=Inverser +PalettePopup.standard=Standard +PalettePopup.recent=Rιcent +PalettePopup.norecent=Pas de palette rιcente +PalettePopup.allgrey=Tout gris +PalettePopup.allwhite=Tout blanc UniqueColorTransformerPanel.colorChooser.toolTipText=Couleur de lien ENTRANT<- +UniqueSizeTransformerPanel.jLabel1.text=Taille : +PartitionColorTransformerPanel.paletteButton=Palette... +PartitionColorTransformerPanel.generatePalettePanel.title=Gιnιrer la palette +PartitionColorTransformerPanel.tooltip.elementsCount=ιlιments diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_he.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_he.properties new file mode 100644 index 0000000000..5cbe0cc143 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_he.properties @@ -0,0 +1,23 @@ +OpenIDE-Module-Short-Description=Partition transformers UI +Unique.name=Unique +Attribute.ranking.name=Ranking +Attribute.partition.name=Partition + + +RankingColorTransformerPanel.labelColor.text=\u05e6\u05d1\u05e2: +RankingSizeTransformerPanel.labelMaxSize.text=Max size: +RankingSizeTransformerPanel.labelMinSize.text=Min size: +PalettePopup.palette=Palettes +PalettePopup.default=\u05d1\u05e8\u05d9\u05e8\u05ea \u05de\u05d7\u05d3\u05dc +PalettePopup.generate=Generate... +PalettePopup.invert=Invert +PalettePopup.standard=Standard +PalettePopup.recent=Recent +PalettePopup.norecent=No recent palette +PalettePopup.allgrey=All grey +PalettePopup.allwhite=All white +UniqueColorTransformerPanel.colorChooser.toolTipText=Set Color +UniqueSizeTransformerPanel.jLabel1.text=Size: +PartitionColorTransformerPanel.paletteButton=Palette... +PartitionColorTransformerPanel.generatePalettePanel.title=Generate Palette +PartitionColorTransformerPanel.tooltip.elementsCount=elements diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_hu.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_hu.properties new file mode 100644 index 0000000000..c1efca7613 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_hu.properties @@ -0,0 +1,23 @@ + + +PalettePopup.standard=Alap\u00E9rtelmezett +PartitionColorTransformerPanel.paletteButton=Paletta... +PalettePopup.invert=Ford\u00EDtott +Attribute.partition.name=Part\u00EDci\u00F3 +PartitionColorTransformerPanel.tooltip.elementsCount=elemeket +PalettePopup.norecent=Nem friss paletta +PalettePopup.recent=Friss +RankingSizeTransformerPanel.labelMaxSize.text=Max m\u00E9ret: +RankingColorTransformerPanel.labelColor.text=Sz\u00EDn: +Unique.name=Egyedi +PalettePopup.allwhite=Minden feh\u00E9r +PartitionColorTransformerPanel.generatePalettePanel.title=Paletta gener\u00E1l\u00E1sa +RankingSizeTransformerPanel.labelMinSize.text=Min m\u00E9ret: +UniqueColorTransformerPanel.colorChooser.toolTipText=Sz\u00EDn be\u00E1ll\u00EDt\u00E1sa +Attribute.ranking.name=Rangsorol\u00E1s +PalettePopup.allgrey=Minden sz\u00FCrke +PalettePopup.palette=Paletta +PalettePopup.generate=Gener\u00E1ci\u00F3... +OpenIDE-Module-Short-Description=Part\u00EDci\u00F3 transzform\u00E1torok UI +UniqueSizeTransformerPanel.jLabel1.text=M\u00E9ret: +PalettePopup.default=Alap\u00E9rtelmezett diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_it.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_it.properties new file mode 100644 index 0000000000..8f87ff41e0 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_it.properties @@ -0,0 +1,23 @@ +OpenIDE-Module-Short-Description=Partition transformers UI +Unique.name=Unique +Attribute.ranking.name=Ranking +Attribute.partition.name=Partition + + +RankingColorTransformerPanel.labelColor.text=Color: +RankingSizeTransformerPanel.labelMaxSize.text=Max size: +RankingSizeTransformerPanel.labelMinSize.text=Min size: +PalettePopup.palette=Palettes +PalettePopup.default=Default +PalettePopup.generate=Generate... +PalettePopup.invert=Invert +PalettePopup.standard=Standard +PalettePopup.recent=Recent +PalettePopup.norecent=No recent palette +PalettePopup.allgrey=All grey +PalettePopup.allwhite=All white +UniqueColorTransformerPanel.colorChooser.toolTipText=Set Color +UniqueSizeTransformerPanel.jLabel1.text=Size: +PartitionColorTransformerPanel.paletteButton=Palette... +PartitionColorTransformerPanel.generatePalettePanel.title=Generate Palette +PartitionColorTransformerPanel.tooltip.elementsCount=elements diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_ja.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_ja.properties index 59409d2a01..9e59af5e61 100644 --- a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_ja.properties +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_ja.properties @@ -1,2 +1,27 @@ - -UniqueColorTransformerPanel.colorChooser.toolTipText=\u6d41\u5165\u8fba<-\u8272 +# OpenIDE-Module-Short-Description=Partition transformers UI +# Unique.name = Unique +# Attribute.ranking.name = Ranking +# Attribute.partition.name = Partition + + +# LabelColorTransformerUI.name = Label Color +# LabelSizeTransformerUI.name = Label Size + +# RankingColorTransformerPanel.labelColor.text=Color: +# RankingSizeTransformerPanel.labelMaxSize.text=Max size: +# RankingSizeTransformerPanel.labelMinSize.text=Min size: + +# PalettePopup.palette=Palettes +# PalettePopup.default=Default +# PalettePopup.generate=Generate... +# PalettePopup.invert=Invert +# PalettePopup.standard=Standard +# PalettePopup.recent=Recent +# PalettePopup.norecent=No recent palette +# PalettePopup.allgrey=All grey +# PalettePopup.allwhite=All white +UniqueColorTransformerPanel.colorChooser.toolTipText=\u6d41\u5165\u8fba<-\u8272 +# UniqueSizeTransformerPanel.jLabel1.text=Size: +# PartitionColorTransformerPanel.paletteButton=Palette... +# PartitionColorTransformerPanel.generatePalettePanel.title=Generate Palette +# PartitionColorTransformerPanel.tooltip.elementsCount = elements diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_ko.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_ko.properties new file mode 100644 index 0000000000..ff98b04817 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_ko.properties @@ -0,0 +1,23 @@ + + +PalettePopup.standard=\uD45C\uC900 +PartitionColorTransformerPanel.paletteButton=\uD314\uB808\uD2B8... +PalettePopup.invert=\uBC18\uC804 +Attribute.partition.name=\uD30C\uD2F0\uC158 +PartitionColorTransformerPanel.tooltip.elementsCount=\uADF8\uB798\uD504 \uC694\uC18C +PalettePopup.norecent=\uCD5C\uADFC \uD314\uB808\uD2B8 \uC5C6\uC74C +PalettePopup.recent=\uCD5C\uADFC +RankingSizeTransformerPanel.labelMaxSize.text=\uCD5C\uB300 \uD06C\uAE30: +RankingColorTransformerPanel.labelColor.text=\uC0C9\uC0C1: +Unique.name=\uC2DD\uBCC4\uBA85 +PalettePopup.allwhite=\uBAA8\uB450 \uD770\uC0C9 +PartitionColorTransformerPanel.generatePalettePanel.title=\uD314\uB808\uD2B8 \uC0DD\uC131 +RankingSizeTransformerPanel.labelMinSize.text=\uCD5C\uC18C \uD06C\uAE30: +UniqueColorTransformerPanel.colorChooser.toolTipText=\uC0C9\uC0C1 \uC9C0\uC815 +Attribute.ranking.name=\uC21C\uC704 +PalettePopup.allgrey=\uBAA8\uB450 \uD68C\uC0C9 +PalettePopup.palette=\uD314\uB808\uD2B8 +PalettePopup.generate=\uC0DD\uC131\uD558\uAE30... +OpenIDE-Module-Short-Description=\uD30C\uD2F0\uC158 \uBCC0\uD658 \uB3C4\uAD6C UI +UniqueSizeTransformerPanel.jLabel1.text=\uD06C\uAE30: +PalettePopup.default=\uAE30\uBCF8\uAC12 diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_nl.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_nl.properties new file mode 100644 index 0000000000..adc08433b4 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_nl.properties @@ -0,0 +1,23 @@ +OpenIDE-Module-Short-Description=Partition transformers UI +Unique.name=Uniek +Attribute.ranking.name=Ranking +Attribute.partition.name=Partition + + +RankingColorTransformerPanel.labelColor.text=Kleur: +RankingSizeTransformerPanel.labelMaxSize.text=Max. grootte: +RankingSizeTransformerPanel.labelMinSize.text=Min. grootte: +PalettePopup.palette=Paletten +PalettePopup.default=Standaard +PalettePopup.generate=Genereren... +PalettePopup.invert=Omkeren +PalettePopup.standard=Standaard +PalettePopup.recent=Recent +PalettePopup.norecent=Geen recent palet +PalettePopup.allgrey=All grey +PalettePopup.allwhite=All white +UniqueColorTransformerPanel.colorChooser.toolTipText=Kleur instellen +UniqueSizeTransformerPanel.jLabel1.text=Grootte: +PartitionColorTransformerPanel.paletteButton=Palet... +PartitionColorTransformerPanel.generatePalettePanel.title=Palet genereren +PartitionColorTransformerPanel.tooltip.elementsCount=elementen diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_pt_BR.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_pt_BR.properties index d93f73f466..7bb1bc688e 100644 --- a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_pt_BR.properties +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_pt_BR.properties @@ -1,2 +1,25 @@ - -UniqueColorTransformerPanel.colorChooser.toolTipText=Cor da aresta de entrada <- +OpenIDE-Module-Short-Description=Interface de usuαrio de transformadores de partiηγo +Unique.name = Ϊnico +# Attribute.ranking.name = Ranking +# Attribute.partition.name = Partition + + + +RankingColorTransformerPanel.labelColor.text=Cor: +RankingSizeTransformerPanel.labelMaxSize.text=Tamanho mαx: +RankingSizeTransformerPanel.labelMinSize.text=Tamanho mνn: + +PalettePopup.palette=Paletas +PalettePopup.default=Padrγo +PalettePopup.generate=Gerar +PalettePopup.invert=Inverter +PalettePopup.standard=Padrγo +PalettePopup.recent=Recente +PalettePopup.norecent=Nenhuma paleta recente +PalettePopup.allgrey=Tudo Cinza +PalettePopup.allwhite=Tudo branco +UniqueColorTransformerPanel.colorChooser.toolTipText=Cor da aresta de entrada <- +UniqueSizeTransformerPanel.jLabel1.text=Tamanho: +PartitionColorTransformerPanel.paletteButton=Paleta... +PartitionColorTransformerPanel.generatePalettePanel.title=Gerar paleta +PartitionColorTransformerPanel.tooltip.elementsCount = elementos diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_ro.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_ro.properties new file mode 100644 index 0000000000..1ef1800593 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_ro.properties @@ -0,0 +1,23 @@ + + +Unique.name=Unice +Attribute.ranking.name=Clasament +Attribute.partition.name=Parti\u021Bie +PalettePopup.generate=Genereaz\u0103... +PalettePopup.invert=Inverseaz\u0103 +PalettePopup.standard=Standard +PalettePopup.recent=Recente +PalettePopup.norecent=Nicio palet\u0103 recent\u0103 +PalettePopup.allgrey=Toate gri +PalettePopup.allwhite=Toate albe +UniqueColorTransformerPanel.colorChooser.toolTipText=Seteaz\u0103 culoarea +UniqueSizeTransformerPanel.jLabel1.text=Dimensiune: +PartitionColorTransformerPanel.paletteButton=Palet\u0103... +PartitionColorTransformerPanel.generatePalettePanel.title=Genereaz\u0103 palet\u0103 +PartitionColorTransformerPanel.tooltip.elementsCount=elemente +OpenIDE-Module-Short-Description=Interfa\u021Ba transformatorilor de parti\u021Bii +PalettePopup.default=Implicit +RankingColorTransformerPanel.labelColor.text=Culoare: +RankingSizeTransformerPanel.labelMaxSize.text=Dimensiune maxim\u0103: +RankingSizeTransformerPanel.labelMinSize.text=Dimensiune minim\u0103: +PalettePopup.palette=Palete diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_ru.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_ru.properties index 5d89f101ef..01e256279d 100644 --- a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_ru.properties +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_ru.properties @@ -1,2 +1,27 @@ - -UniqueColorTransformerPanel.colorChooser.toolTipText=\u0426\u0432\u0435\u0442 \u0432\u0445\u043e\u0434. \u0440\u0451\u0431\u0435\u0440 +# OpenIDE-Module-Short-Description=Partition transformers UI +# Unique.name = Unique +# Attribute.ranking.name = Ranking +# Attribute.partition.name = Partition + + +# LabelColorTransformerUI.name = Label Color +# LabelSizeTransformerUI.name = Label Size + +# RankingColorTransformerPanel.labelColor.text=Color: +# RankingSizeTransformerPanel.labelMaxSize.text=Max size: +# RankingSizeTransformerPanel.labelMinSize.text=Min size: + +# PalettePopup.palette=Palettes +# PalettePopup.default=Default +# PalettePopup.generate=Generate... +# PalettePopup.invert=Invert +# PalettePopup.standard=Standard +# PalettePopup.recent=Recent +# PalettePopup.norecent=No recent palette +# PalettePopup.allgrey=All grey +# PalettePopup.allwhite=All white +UniqueColorTransformerPanel.colorChooser.toolTipText=\u0426\u0432\u0435\u0442 \u0432\u0445\u043e\u0434. \u0440\u0451\u0431\u0435\u0440 +# UniqueSizeTransformerPanel.jLabel1.text=Size: +# PartitionColorTransformerPanel.paletteButton=Palette... +# PartitionColorTransformerPanel.generatePalettePanel.title=Generate Palette +# PartitionColorTransformerPanel.tooltip.elementsCount = elements diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_th.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_tr.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_tr.properties new file mode 100644 index 0000000000..f8d749877d --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_tr.properties @@ -0,0 +1,23 @@ +OpenIDE-Module-Short-Description=Partition transformers UI +Unique.name=E\u015fsiz +Attribute.ranking.name=Ranking +Attribute.partition.name=Partition + + +RankingColorTransformerPanel.labelColor.text=Renk: +RankingSizeTransformerPanel.labelMaxSize.text=En bόyόk boyut: +RankingSizeTransformerPanel.labelMinSize.text=En kόηόk boyut: +PalettePopup.palette=Paletler +PalettePopup.default=Varsay\u0131lan +PalettePopup.generate=άret... +PalettePopup.invert=Tersini ηevir +PalettePopup.standard=Standart +PalettePopup.recent=En son +PalettePopup.norecent=En son palet yok +PalettePopup.allgrey=Tamamen gri +PalettePopup.allwhite=Tamam\u0131 beyaz +UniqueColorTransformerPanel.colorChooser.toolTipText=Renk Ver +UniqueSizeTransformerPanel.jLabel1.text=Boyut: +PartitionColorTransformerPanel.paletteButton=Palet... +PartitionColorTransformerPanel.generatePalettePanel.title=Palet άret +PartitionColorTransformerPanel.tooltip.elementsCount=φgeler diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_uk.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_uk.properties new file mode 100644 index 0000000000..c780e6ebe0 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_uk.properties @@ -0,0 +1,21 @@ +OpenIDE-Module-Short-Description=\u0406\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0442\u0440\u0430\u043D\u0441\u0444\u043E\u0440\u043C\u0430\u0442\u043E\u0440\u0456\u0432 \u043F\u0435\u0440\u0435\u0433\u043E\u0440\u043E\u0434\u043E\u043A +RankingSizeTransformerPanel.labelMaxSize.text=\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0438\u0439 \u0440\u043E\u0437\u043C\u0456\u0440: +Attribute.ranking.name=\u0420\u0435\u0439\u0442\u0438\u043D\u0433 +RankingSizeTransformerPanel.labelMinSize.text=\u041C\u0456\u043D\u0456\u043C\u0430\u043B\u044C\u043D\u0438\u0439 \u0440\u043E\u0437\u043C\u0456\u0440: +Unique.name=\u0423\u043D\u0456\u043A\u0430\u043B\u044C\u043D\u0438\u0439 +Attribute.partition.name=\u041F\u0435\u0440\u0435\u0433\u043E\u0440\u043E\u0434\u043A\u0430 +RankingColorTransformerPanel.labelColor.text=\u041A\u043E\u043B\u0456\u0440: +PalettePopup.palette=\u041F\u0430\u043B\u0456\u0442\u0440\u0438 +PalettePopup.default=\u0417\u0430 \u0437\u0430\u043C\u043E\u0432\u0447\u0443\u0432\u0430\u043D\u043D\u044F\u043C +PalettePopup.generate=\u0413\u0435\u043D\u0435\u0440\u0443\u0432\u0430\u0442\u0438... +PalettePopup.invert=\u0406\u043D\u0432\u0435\u0440\u0442\u0443\u0432\u0430\u0442\u0438 +PalettePopup.standard=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0438\u0439 +PalettePopup.recent=\u041E\u0441\u0442\u0430\u043D\u043D\u0456 +PalettePopup.norecent=\u041D\u0435\u043C\u0430\u0454 \u043E\u0441\u0442\u0430\u043D\u043D\u0456\u0445 \u043F\u0430\u043B\u0456\u0442\u0440 +PalettePopup.allgrey=\u0412\u0435\u0441\u044C \u0441\u0456\u0440\u0438\u0439 +PalettePopup.allwhite=\u0412\u0435\u0441\u044C \u0431\u0456\u043B\u0438\u0439 +UniqueColorTransformerPanel.colorChooser.toolTipText=\u0412\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0438 \u043A\u043E\u043B\u0456\u0440 +UniqueSizeTransformerPanel.jLabel1.text=\u0420\u043E\u0437\u043C\u0456\u0440: +PartitionColorTransformerPanel.paletteButton=\u041F\u0430\u043B\u0456\u0442\u0440\u0430... +PartitionColorTransformerPanel.generatePalettePanel.title=\u0421\u0442\u0432\u043E\u0440\u0438\u0442\u0438 \u043F\u0430\u043B\u0456\u0442\u0440\u0443 +PartitionColorTransformerPanel.tooltip.elementsCount=\u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432 diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_zh_CN.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_zh_CN.properties index 93df4eab7b..c4051abab8 100644 --- a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_zh_CN.properties +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_zh_CN.properties @@ -1,2 +1,24 @@ +OpenIDE-Module-Short-Description=\u5206\u533a\u8f6c\u6362\u754c\u9762 +Unique.name=\u7edf\u4e00\u7684 +# Attribute.ranking.name = Ranking +# Attribute.partition.name = Partition +RankingColorTransformerPanel.labelColor.text=\u989C\u8272\uFF1A +RankingSizeTransformerPanel.labelMaxSize.text=\u6700\u5927\u5c3a\u5bf8: +RankingSizeTransformerPanel.labelMinSize.text=\u6700\u5c0f\u5c3a\u5bf8: +PalettePopup.palette=\u8C03\u8272\u677F +PalettePopup.default=\u9ed8\u8ba4 +PalettePopup.generate=\u751F\u6210\u2026 +PalettePopup.invert=\u98a0\u5012 +PalettePopup.standard=\u6807\u51c6\u8f93\u51fa +PalettePopup.recent=\u6700\u8fd1 +PalettePopup.norecent=\u6ca1\u6709\u65b0\u7684\u9009\u53d6\u8272 +PalettePopup.allgrey=\u5168\u90e8\u7070\u8272 +PalettePopup.allwhite=\u5168\u90e8\u767d\u8272 UniqueColorTransformerPanel.colorChooser.toolTipText=\u8fb9 IN<- \u989c\u8272 +UniqueSizeTransformerPanel.jLabel1.text=\u5927\u5c0f\uff1a +PartitionColorTransformerPanel.paletteButton=\u8C03\u8272\u677F\u2026 +PartitionColorTransformerPanel.generatePalettePanel.title=\u53cd\u8f6c\u8c03\u8272\u677f +PartitionColorTransformerPanel.tooltip.elementsCount=\u5206\u5b50 +Attribute.ranking.name=\u6392\u540D +Attribute.partition.name=\u5206\u5272 diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_zh_TW.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_zh_TW.properties new file mode 100644 index 0000000000..8f87ff41e0 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/Bundle_zh_TW.properties @@ -0,0 +1,23 @@ +OpenIDE-Module-Short-Description=Partition transformers UI +Unique.name=Unique +Attribute.ranking.name=Ranking +Attribute.partition.name=Partition + + +RankingColorTransformerPanel.labelColor.text=Color: +RankingSizeTransformerPanel.labelMaxSize.text=Max size: +RankingSizeTransformerPanel.labelMinSize.text=Min size: +PalettePopup.palette=Palettes +PalettePopup.default=Default +PalettePopup.generate=Generate... +PalettePopup.invert=Invert +PalettePopup.standard=Standard +PalettePopup.recent=Recent +PalettePopup.norecent=No recent palette +PalettePopup.allgrey=All grey +PalettePopup.allwhite=All white +UniqueColorTransformerPanel.colorChooser.toolTipText=Set Color +UniqueSizeTransformerPanel.jLabel1.text=Size: +PartitionColorTransformerPanel.paletteButton=Palette... +PartitionColorTransformerPanel.generatePalettePanel.title=Generate Palette +PartitionColorTransformerPanel.tooltip.elementsCount=elements diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle.properties index ebb882d1f8..c7ed2d7a75 100644 --- a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle.properties +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle.properties @@ -1,2 +1,4 @@ Category.Size.name = Size -Category.Color.name = Color \ No newline at end of file +Category.Color.name = Color +Category.LabelColor.name = Label Color +Category.LabelSize.name = Label Size \ No newline at end of file diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_ar.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_ca.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_ca.properties new file mode 100644 index 0000000000..3a71c04ced --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_ca.properties @@ -0,0 +1,4 @@ +Category.Size.name = Mida +Category.Color.name = Color +Category.LabelColor.name = Color de l'etiqueta +Category.LabelSize.name = Mida de l'etiqueta diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_cs.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_cs.properties new file mode 100644 index 0000000000..f137122208 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_cs.properties @@ -0,0 +1,4 @@ +Category.Size.name = Velikost +Category.Color.name = Barva +Category.LabelColor.name = barva jmenovky +Category.LabelSize.name = Velikost jmenovky diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_de.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_de.properties new file mode 100644 index 0000000000..c3b4341e9f --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_de.properties @@ -0,0 +1,4 @@ +Category.Size.name = Grφίe +Category.Color.name = Farbe +Category.LabelColor.name = Beschriftungsfarbe +Category.LabelSize.name = Beschriftungsgrφίe diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_es.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_es.properties new file mode 100644 index 0000000000..da15944680 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_es.properties @@ -0,0 +1,4 @@ +Category.Size.name = Tamaρo +Category.Color.name = Color +Category.LabelColor.name = Color de etiqueta +Category.LabelSize.name = Tamaρo de etiqueta diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_fr.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_fr.properties new file mode 100644 index 0000000000..7c85baecac --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_fr.properties @@ -0,0 +1,4 @@ +Category.Size.name = Taille +Category.Color.name = Couleur +Category.LabelColor.name = Couleur des labels +Category.LabelSize.name = Taille des labels diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_he.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_he.properties new file mode 100644 index 0000000000..2bbf467cab --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_he.properties @@ -0,0 +1,4 @@ +Category.Size.name=Size +Category.Color.name=\u05e6\u05d1\u05e2 +Category.LabelColor.name=Label Color +Category.LabelSize.name=Label Size diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_hu.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_hu.properties new file mode 100644 index 0000000000..bec67d6831 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_hu.properties @@ -0,0 +1,6 @@ + + +Category.LabelSize.name=C\u00EDmke m\u00E9rete +Category.LabelColor.name=C\u00EDmke sz\u00EDne +Category.Color.name=Sz\u00EDn +Category.Size.name=M\u00E9ret diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_it.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_it.properties new file mode 100644 index 0000000000..072d62e9f7 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_it.properties @@ -0,0 +1,4 @@ +Category.Size.name=Size +Category.Color.name=Color +Category.LabelColor.name=Label Color +Category.LabelSize.name=Label Size diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_ja.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_ja.properties new file mode 100644 index 0000000000..b3feb1b8d9 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_ja.properties @@ -0,0 +1,4 @@ +Category.Size.name = \u5927\u304d\u3055 +Category.Color.name = \u8272 +# Category.LabelColor.name = Label Color +# Category.LabelSize.name = Label Size diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_ko.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_ko.properties new file mode 100644 index 0000000000..2848335893 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_ko.properties @@ -0,0 +1,6 @@ + + +Category.Color.name=\uC0C9\uC0C1 +Category.LabelColor.name=\uB77C\uBCA8 \uC0C9\uC0C1 +Category.LabelSize.name=\uB77C\uBCA8 \uD06C\uAE30 +Category.Size.name=\uD06C\uAE30 diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_nl.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_nl.properties new file mode 100644 index 0000000000..5d5567f852 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_nl.properties @@ -0,0 +1,4 @@ +Category.Size.name = Grootte +Category.Color.name = Kleur +Category.LabelColor.name = Labelkleur +Category.LabelSize.name = Labelgrootte diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_pt_BR.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_pt_BR.properties new file mode 100644 index 0000000000..4e823b5f77 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_pt_BR.properties @@ -0,0 +1,4 @@ +Category.Size.name = Tamanho +Category.Color.name = Cor +Category.LabelColor.name = Cor do rσtulo +Category.LabelSize.name = Tamanho do rσtulo diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_ro.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_ro.properties new file mode 100644 index 0000000000..406acd6a0c --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_ro.properties @@ -0,0 +1,6 @@ + + +Category.Size.name=Dimensiune +Category.Color.name=Culoare +Category.LabelColor.name=Culoare etichet\u0103 +Category.LabelSize.name=Dimensiune etichet\u0103 diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_ru.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_ru.properties new file mode 100644 index 0000000000..afd48a551a --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_ru.properties @@ -0,0 +1,7 @@ +Category.Size.name=\u0420\u0430\u0437\u043c\u0435\u0440 +Category.Color.name=\u0426\u0432\u0435\u0442 +# Category.LabelColor.name = Label Color +# Category.LabelSize.name = Label Size + +Category.LabelColor.name=\u0426\u0432\u0435\u0442 \u043C\u0435\u0442\u043A\u0438 +Category.LabelSize.name=\u0420\u0430\u0437\u043C\u0435\u0440 \u043C\u0435\u0442\u043A\u0438 diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_th.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_tr.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_tr.properties new file mode 100644 index 0000000000..54eb8c84da --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_tr.properties @@ -0,0 +1,4 @@ +Category.Size.name = Boyut +Category.Color.name = Renk +Category.LabelColor.name = Etiket Rengi +Category.LabelSize.name = Etiket Boyutu diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_uk.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_uk.properties new file mode 100644 index 0000000000..853f9a731b --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_uk.properties @@ -0,0 +1,4 @@ +Category.Size.name=\u0420\u043E\u0437\u043C\u0456\u0440 +Category.Color.name=\u041A\u043E\u043B\u0456\u0440 +Category.LabelColor.name=\u041A\u043E\u043B\u0456\u0440 \u0435\u0442\u0438\u043A\u0435\u0442\u043A\u0438 +Category.LabelSize.name=\u0420\u043E\u0437\u043C\u0456\u0440 \u0435\u0442\u0438\u043A\u0435\u0442\u043A\u0438 diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_zh_CN.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_zh_CN.properties new file mode 100644 index 0000000000..962ae82254 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_zh_CN.properties @@ -0,0 +1,4 @@ +Category.Size.name=\u5927\u5C0F +Category.Color.name=\u989c\u8272 +Category.LabelColor.name=\u6807\u7b7e\u989c\u8272 +Category.LabelSize.name=\u6807\u7b7e\u5c3a\u5bf8 diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_zh_TW.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_zh_TW.properties new file mode 100644 index 0000000000..072d62e9f7 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/category/Bundle_zh_TW.properties @@ -0,0 +1,4 @@ +Category.Size.name=Size +Category.Color.name=Color +Category.LabelColor.name=Label Color +Category.LabelSize.name=Label Size diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle.properties index 5ab0e3bcb2..68e9163736 100644 --- a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle.properties +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle.properties @@ -1,3 +1,4 @@ -PaletteGeneratorPanel.labelColorCount.text=Colors count: +PaletteGeneratorPanel.labelColorCount.text=Values count: PaletteGeneratorPanel.generateButton.text=Generate PaletteGeneratorPanel.labelPreset.text=Presets +PaletteGeneratorPanel.limitColorsCheckbox.text=Limit number of colors diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_ar.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_ca.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_ca.properties new file mode 100644 index 0000000000..81ac6bb6b8 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_ca.properties @@ -0,0 +1,4 @@ +PaletteGeneratorPanel.labelColorCount.text=Values count: +PaletteGeneratorPanel.generateButton.text=Genera +PaletteGeneratorPanel.labelPreset.text=Presets +PaletteGeneratorPanel.limitColorsCheckbox.text=Limit number of colors diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_cs.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_cs.properties new file mode 100644 index 0000000000..b8875e2c77 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_cs.properties @@ -0,0 +1,4 @@ +PaletteGeneratorPanel.labelColorCount.text=Po\u010det hodnot: +PaletteGeneratorPanel.generateButton.text=Vytvo\u0159it +PaletteGeneratorPanel.labelPreset.text=P\u0159edvolby +PaletteGeneratorPanel.limitColorsCheckbox.text=Omezit po\u010det barev diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_de.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_de.properties new file mode 100644 index 0000000000..83c686bc1e --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_de.properties @@ -0,0 +1,4 @@ +PaletteGeneratorPanel.labelColorCount.text=Anzahl Werte: +PaletteGeneratorPanel.generateButton.text=Generieren +PaletteGeneratorPanel.labelPreset.text=Voreinstellungen +PaletteGeneratorPanel.limitColorsCheckbox.text=Beschrδnke Anzahl Farben diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_es.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_es.properties new file mode 100644 index 0000000000..9cd0ff284a --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_es.properties @@ -0,0 +1,4 @@ +PaletteGeneratorPanel.labelColorCount.text=Cantidad de valores: +PaletteGeneratorPanel.generateButton.text=Generar +PaletteGeneratorPanel.labelPreset.text=Configuraciones predefinidas +PaletteGeneratorPanel.limitColorsCheckbox.text=Limitar el nϊmero de colores diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_fr.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_fr.properties new file mode 100644 index 0000000000..5b6201c202 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_fr.properties @@ -0,0 +1,4 @@ +PaletteGeneratorPanel.labelColorCount.text=Nombre de valeurs: +PaletteGeneratorPanel.generateButton.text=Gιnιrer +PaletteGeneratorPanel.labelPreset.text=Rιglages +PaletteGeneratorPanel.limitColorsCheckbox.text=Limiter le nombre de couleurs diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_he.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_he.properties new file mode 100644 index 0000000000..68e9163736 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_he.properties @@ -0,0 +1,4 @@ +PaletteGeneratorPanel.labelColorCount.text=Values count: +PaletteGeneratorPanel.generateButton.text=Generate +PaletteGeneratorPanel.labelPreset.text=Presets +PaletteGeneratorPanel.limitColorsCheckbox.text=Limit number of colors diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_hu.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_hu.properties new file mode 100644 index 0000000000..57c51e0b5b --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_hu.properties @@ -0,0 +1,6 @@ + + +PaletteGeneratorPanel.limitColorsCheckbox.text=Korl\u00E1tozza a sz\u00EDnek sz\u00E1m\u00E1t +PaletteGeneratorPanel.labelPreset.text=El\u0151be\u00E1ll\u00EDt\u00E1sok +PaletteGeneratorPanel.generateButton.text=gener\u00E1l +PaletteGeneratorPanel.labelColorCount.text=Az \u00E9rt\u00E9kek sz\u00E1m\u00EDtanak: diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_it.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_it.properties new file mode 100644 index 0000000000..68e9163736 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_it.properties @@ -0,0 +1,4 @@ +PaletteGeneratorPanel.labelColorCount.text=Values count: +PaletteGeneratorPanel.generateButton.text=Generate +PaletteGeneratorPanel.labelPreset.text=Presets +PaletteGeneratorPanel.limitColorsCheckbox.text=Limit number of colors diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_ja.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_ja.properties new file mode 100644 index 0000000000..5e14b1822f --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_ja.properties @@ -0,0 +1,4 @@ +# PaletteGeneratorPanel.labelColorCount.text=Values count\: +# PaletteGeneratorPanel.generateButton.text=Generate +# PaletteGeneratorPanel.labelPreset.text=Presets +# PaletteGeneratorPanel.limitColorsCheckbox.text=Limit number of colors diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_ko.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_ko.properties new file mode 100644 index 0000000000..c26103d35a --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_ko.properties @@ -0,0 +1,6 @@ + + +PaletteGeneratorPanel.limitColorsCheckbox.text=\uC0C9\uC0C1 \uC218 \uC81C\uD55C +PaletteGeneratorPanel.labelPreset.text=\uC0AC\uC804 \uC124\uC815 +PaletteGeneratorPanel.generateButton.text=\uC0DD\uC131 +PaletteGeneratorPanel.labelColorCount.text=\uAC12 \uAC1C\uC218: diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_nl.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_nl.properties new file mode 100644 index 0000000000..4508665264 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_nl.properties @@ -0,0 +1,4 @@ +PaletteGeneratorPanel.labelColorCount.text=Values count: +PaletteGeneratorPanel.generateButton.text=Genereren +PaletteGeneratorPanel.labelPreset.text=Presets +PaletteGeneratorPanel.limitColorsCheckbox.text=Aantal kleuren beperken diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_pt_BR.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_pt_BR.properties new file mode 100644 index 0000000000..7cecef2676 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_pt_BR.properties @@ -0,0 +1,4 @@ +PaletteGeneratorPanel.labelColorCount.text=Contagem dos valores: +PaletteGeneratorPanel.generateButton.text=Gerar +PaletteGeneratorPanel.labelPreset.text=Configuraηγo prι-definida +PaletteGeneratorPanel.limitColorsCheckbox.text=Nϊmero limite de cores diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_ro.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_ro.properties new file mode 100644 index 0000000000..5fc844c15c --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_ro.properties @@ -0,0 +1,6 @@ + + +PaletteGeneratorPanel.labelColorCount.text=Num\u0103r de valori: +PaletteGeneratorPanel.labelPreset.text=Preset\u0103ri +PaletteGeneratorPanel.generateButton.text=Genereaz\u0103 +PaletteGeneratorPanel.limitColorsCheckbox.text=Limiteaz\u0103 num\u0103rul de culori diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_ru.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_ru.properties new file mode 100644 index 0000000000..5e14b1822f --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_ru.properties @@ -0,0 +1,4 @@ +# PaletteGeneratorPanel.labelColorCount.text=Values count\: +# PaletteGeneratorPanel.generateButton.text=Generate +# PaletteGeneratorPanel.labelPreset.text=Presets +# PaletteGeneratorPanel.limitColorsCheckbox.text=Limit number of colors diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_th.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_tr.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_tr.properties new file mode 100644 index 0000000000..2ad41fe903 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_tr.properties @@ -0,0 +1,4 @@ +PaletteGeneratorPanel.labelColorCount.text=Say\u0131lan de\u011ferler: +PaletteGeneratorPanel.generateButton.text=άret +PaletteGeneratorPanel.labelPreset.text=Φn ayarlar +PaletteGeneratorPanel.limitColorsCheckbox.text=Renk say\u0131s\u0131n\u0131 s\u0131n\u0131rla diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_uk.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_uk.properties new file mode 100644 index 0000000000..1515b6f9cf --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_uk.properties @@ -0,0 +1,4 @@ +PaletteGeneratorPanel.labelColorCount.text=\u0412\u0440\u0430\u0445\u043E\u0432\u0443\u044E\u0442\u044C\u0441\u044F \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F: +PaletteGeneratorPanel.generateButton.text=\u0413\u0435\u043D\u0435\u0440\u0443\u0432\u0430\u0442\u0438 +PaletteGeneratorPanel.labelPreset.text=\u041F\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0438 +PaletteGeneratorPanel.limitColorsCheckbox.text=\u041E\u0431\u043C\u0435\u0436\u0435\u043D\u043D\u044F \u043A\u0456\u043B\u044C\u043A\u043E\u0441\u0442\u0456 \u043A\u043E\u043B\u044C\u043E\u0440\u0456\u0432 diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_zh_CN.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_zh_CN.properties new file mode 100644 index 0000000000..319459342e --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_zh_CN.properties @@ -0,0 +1,4 @@ +PaletteGeneratorPanel.labelColorCount.text=\u503C\u8BA1\u6570\uFF1A +PaletteGeneratorPanel.generateButton.text=\u751f\u6210 +PaletteGeneratorPanel.labelPreset.text=\u9884\u8bbe +PaletteGeneratorPanel.limitColorsCheckbox.text=\u9650\u5236\u989C\u8272\u6570\u76EE diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_zh_TW.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_zh_TW.properties new file mode 100644 index 0000000000..68e9163736 --- /dev/null +++ b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/palette/Bundle_zh_TW.properties @@ -0,0 +1,4 @@ +PaletteGeneratorPanel.labelColorCount.text=Values count: +PaletteGeneratorPanel.generateButton.text=Generate +PaletteGeneratorPanel.labelPreset.text=Presets +PaletteGeneratorPanel.limitColorsCheckbox.text=Limit number of colors diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/resources/color-swatch.png b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/resources/color-swatch.png deleted file mode 100644 index 85330f2a6b..0000000000 Binary files a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/resources/color-swatch.png and /dev/null differ diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/resources/color.png b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/resources/color.png deleted file mode 100644 index 809fb00e5a..0000000000 Binary files a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/resources/color.png and /dev/null differ diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/resources/labelcolor.png b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/resources/labelcolor.png deleted file mode 100644 index ab543cc28a..0000000000 Binary files a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/resources/labelcolor.png and /dev/null differ diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/resources/labelsize.png b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/resources/labelsize.png deleted file mode 100644 index 52c26f9c49..0000000000 Binary files a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/resources/labelsize.png and /dev/null differ diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/resources/randomize.png b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/resources/randomize.png deleted file mode 100644 index 94adf70a97..0000000000 Binary files a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/resources/randomize.png and /dev/null differ diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/resources/size.png b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/resources/size.png deleted file mode 100644 index f763a16880..0000000000 Binary files a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/appearance/plugin/resources/size.png and /dev/null differ diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/Bundle.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/Bundle.properties deleted file mode 100644 index cb826c6b0c..0000000000 --- a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/Bundle.properties +++ /dev/null @@ -1,11 +0,0 @@ -OpenIDE-Module-Display-Category=Plugin -OpenIDE-Module-Name=Partition Plugin UI -OpenIDE-Module-Short-Description=Partition transformers UI - -NodeColorTransformerBuilder.ui.name = Color -NodeColorTransformerPanel.action.randomize = Randomize colors -NodeColorTransformerPanel.action.allBlacks = All Blacks - -EdgeColorTransformerBuilder.ui.name = Color -EdgeColorTransformerPanel.action.randomize = Randomize -EdgeColorTransformerPanel.action.allBlacks = All Blacks \ No newline at end of file diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/Bundle_cs.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/Bundle_cs.properties deleted file mode 100644 index 0b1ac9ceb8..0000000000 --- a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/Bundle_cs.properties +++ /dev/null @@ -1,21 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-21 20\:39+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Short-Description=Rozhran\u00ed transform\u00e1tor\u016f odd\u00edlu - -NodeColorTransformerBuilder.ui.name=Barva - -NodeColorTransformerPanel.action.randomize=Barvy n\u00e1hodn\u011b - -NodeColorTransformerPanel.action.allBlacks=V\u0161echno \u010dern\u00e9 - -EdgeColorTransformerBuilder.ui.name=Barva - -EdgeColorTransformerPanel.action.randomize=N\u00e1hodn\u011b - -EdgeColorTransformerPanel.action.allBlacks=V\u0161echno \u010dern\u00e9 diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/Bundle_es.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/Bundle_es.properties deleted file mode 100644 index 71adb9a26e..0000000000 --- a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/Bundle_es.properties +++ /dev/null @@ -1,21 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:00+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Short-Description=Interfaz de usuario de los transformadores de partici\u00f3n - -NodeColorTransformerBuilder.ui.name=Color - -NodeColorTransformerPanel.action.randomize=Colores aleatorios - -NodeColorTransformerPanel.action.allBlacks=Todos negros - -EdgeColorTransformerBuilder.ui.name=Color - -EdgeColorTransformerPanel.action.randomize=Colores aleatorios - -EdgeColorTransformerPanel.action.allBlacks=Todos negros diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/Bundle_fr.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/Bundle_fr.properties deleted file mode 100644 index 4620f02e6b..0000000000 --- a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/Bundle_fr.properties +++ /dev/null @@ -1,21 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:00+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=GUI transformeurs de partition - -NodeColorTransformerBuilder.ui.name=Couleur - -NodeColorTransformerPanel.action.randomize=G\u00e9n\u00e9rer les couleurs al\u00e9atoirement - -NodeColorTransformerPanel.action.allBlacks=Tout en noir - -EdgeColorTransformerBuilder.ui.name=Couleur - -EdgeColorTransformerPanel.action.randomize=Al\u00e9atoire - -EdgeColorTransformerPanel.action.allBlacks=Tout en noir diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/Bundle_ja.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/Bundle_ja.properties deleted file mode 100644 index 18b452b4c6..0000000000 --- a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/Bundle_ja.properties +++ /dev/null @@ -1,21 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-18 08\:35+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u30d1\u30fc\u30c6\u30a3\u30b7\u30e7\u30f3\u30c8\u30e9\u30f3\u30b9\u30d5\u30a9\u30fc\u30deUI - -NodeColorTransformerBuilder.ui.name=\u8272 - -NodeColorTransformerPanel.action.randomize=\u8272\u3092\u30e9\u30f3\u30c0\u30e0\u5316 - -NodeColorTransformerPanel.action.allBlacks=\u3059\u3079\u3066\u9ed2 - -EdgeColorTransformerBuilder.ui.name=\u8272 - -EdgeColorTransformerPanel.action.randomize=\u30e9\u30f3\u30c0\u30e0\u5316 - -EdgeColorTransformerPanel.action.allBlacks=\u3059\u3079\u3066\u9ed2 diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/Bundle_pt_BR.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/Bundle_pt_BR.properties deleted file mode 100644 index 1bc956992b..0000000000 --- a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/Bundle_pt_BR.properties +++ /dev/null @@ -1,21 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 00\:46+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Interface de usu\u00e1rio de transformadores de parti\u00e7\u00e3o - -NodeColorTransformerBuilder.ui.name=Cor - -NodeColorTransformerPanel.action.randomize=Cores aleat\u00f3rias - -NodeColorTransformerPanel.action.allBlacks=Todos negros - -EdgeColorTransformerBuilder.ui.name=Cor - -EdgeColorTransformerPanel.action.randomize=Cores aleat\u00f3rias - -EdgeColorTransformerPanel.action.allBlacks=Todos negros diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/Bundle_ru.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/Bundle_ru.properties deleted file mode 100644 index 41f9a3e910..0000000000 --- a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/Bundle_ru.properties +++ /dev/null @@ -1,21 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-08 06\:20+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Short-Description=Partition transformers UI - -NodeColorTransformerBuilder.ui.name=\u0426\u0432\u0435\u0442 - -NodeColorTransformerPanel.action.randomize=\u0421\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 \u0446\u0432\u0435\u0442\u0430 - -NodeColorTransformerPanel.action.allBlacks=\u0412\u0441\u0435 \u0447\u0451\u0440\u043d\u044b\u0435 - -EdgeColorTransformerBuilder.ui.name=\u0426\u0432\u0435\u0442 - -EdgeColorTransformerPanel.action.randomize=\u0421\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0435 - -EdgeColorTransformerPanel.action.allBlacks=\u0412\u0441\u0435 \u0447\u0451\u0440\u043d\u044b\u0435 diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/Bundle_zh_CN.properties b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/Bundle_zh_CN.properties deleted file mode 100644 index 59578d9140..0000000000 --- a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/Bundle_zh_CN.properties +++ /dev/null @@ -1,20 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:09+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u5206\u533a\u8f6c\u6362\u7684\u7528\u6237\u754c\u9762 - -NodeColorTransformerBuilder.ui.name=\u989c\u8272 - -NodeColorTransformerPanel.action.randomize=\u968f\u673a\u989c\u8272 - -NodeColorTransformerPanel.action.allBlacks=\u5168\u9ed1 - -EdgeColorTransformerBuilder.ui.name=\u989c\u8272 - -EdgeColorTransformerPanel.action.randomize=\u968f\u673a - -EdgeColorTransformerPanel.action.allBlacks=\u5168\u9ed1 diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/cs.po b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/cs.po deleted file mode 100644 index 336c19d75e..0000000000 --- a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/cs.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-21 20:39+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "RozhranΓ­ transformΓ‘torΕ― oddΓ­lu" - -msgid "NodeColorTransformerBuilder.ui.name" -msgstr "Barva" - -msgid "NodeColorTransformerPanel.action.randomize" -msgstr "Barvy nΓ‘hodnΔ›" - -msgid "NodeColorTransformerPanel.action.allBlacks" -msgstr "VΕ‘echno černΓ©" - -msgid "EdgeColorTransformerBuilder.ui.name" -msgstr "Barva" - -msgid "EdgeColorTransformerPanel.action.randomize" -msgstr "NΓ‘hodnΔ›" - -msgid "EdgeColorTransformerPanel.action.allBlacks" -msgstr "VΕ‘echno černΓ©" diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/es.po b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/es.po deleted file mode 100644 index 3f3b86336d..0000000000 --- a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/es.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:00+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interfaz de usuario de los transformadores de particiΓ³n" - -msgid "NodeColorTransformerBuilder.ui.name" -msgstr "Color" - -msgid "NodeColorTransformerPanel.action.randomize" -msgstr "Colores aleatorios" - -msgid "NodeColorTransformerPanel.action.allBlacks" -msgstr "Todos negros" - -msgid "EdgeColorTransformerBuilder.ui.name" -msgstr "Color" - -msgid "EdgeColorTransformerPanel.action.randomize" -msgstr "Colores aleatorios" - -msgid "EdgeColorTransformerPanel.action.allBlacks" -msgstr "Todos negros" diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/fr.po b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/fr.po deleted file mode 100644 index bbe93cdeed..0000000000 --- a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/fr.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:00+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "GUI transformeurs de partition" - -msgid "NodeColorTransformerBuilder.ui.name" -msgstr "Couleur" - -msgid "NodeColorTransformerPanel.action.randomize" -msgstr "GΓ©nΓ©rer les couleurs alΓ©atoirement" - -msgid "NodeColorTransformerPanel.action.allBlacks" -msgstr "Tout en noir" - -msgid "EdgeColorTransformerBuilder.ui.name" -msgstr "Couleur" - -msgid "EdgeColorTransformerPanel.action.randomize" -msgstr "AlΓ©atoire" - -msgid "EdgeColorTransformerPanel.action.allBlacks" -msgstr "Tout en noir" diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/ja.po b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/ja.po deleted file mode 100644 index b6239c941b..0000000000 --- a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/ja.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-18 08:35+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "γƒ‘γƒΌγƒ†γ‚£γ‚·γƒ§γƒ³γƒˆγƒ©γƒ³γ‚Ήγƒ•γ‚©γƒΌγƒžUI" - -msgid "NodeColorTransformerBuilder.ui.name" -msgstr "色" - -msgid "NodeColorTransformerPanel.action.randomize" -msgstr "θ‰²γ‚’γƒ©γƒ³γƒ€γƒ εŒ–" - -msgid "NodeColorTransformerPanel.action.allBlacks" -msgstr "すべて黒" - -msgid "EdgeColorTransformerBuilder.ui.name" -msgstr "色" - -msgid "EdgeColorTransformerPanel.action.randomize" -msgstr "γƒ©γƒ³γƒ€γƒ εŒ–" - -msgid "EdgeColorTransformerPanel.action.allBlacks" -msgstr "すべて黒" diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/org-gephi-ui-partition-plugin.pot b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/org-gephi-ui-partition-plugin.pot deleted file mode 100644 index 2cf08cf415..0000000000 --- a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/org-gephi-ui-partition-plugin.pot +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Partition transformers UI" - -msgid "NodeColorTransformerBuilder.ui.name" -msgstr "Color" - -msgid "NodeColorTransformerPanel.action.randomize" -msgstr "Randomize colors" - -msgid "NodeColorTransformerPanel.action.allBlacks" -msgstr "All Blacks" - -msgid "EdgeColorTransformerBuilder.ui.name" -msgstr "Color" - -msgid "EdgeColorTransformerPanel.action.randomize" -msgstr "Randomize" - -msgid "EdgeColorTransformerPanel.action.allBlacks" -msgstr "All Blacks" diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/pt_BR.po b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/pt_BR.po deleted file mode 100644 index d1b1e70504..0000000000 --- a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/pt_BR.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 00:46+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interface de usuΓ‘rio de transformadores de partiΓ§Γ£o" - -msgid "NodeColorTransformerBuilder.ui.name" -msgstr "Cor" - -msgid "NodeColorTransformerPanel.action.randomize" -msgstr "Cores aleatΓ³rias" - -msgid "NodeColorTransformerPanel.action.allBlacks" -msgstr "Todos negros" - -msgid "EdgeColorTransformerBuilder.ui.name" -msgstr "Cor" - -msgid "EdgeColorTransformerPanel.action.randomize" -msgstr "Cores aleatΓ³rias" - -msgid "EdgeColorTransformerPanel.action.allBlacks" -msgstr "Todos negros" diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/ru.po b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/ru.po deleted file mode 100644 index 7fc2e82739..0000000000 --- a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/ru.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-08 06:20+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Partition transformers UI" - -msgid "NodeColorTransformerBuilder.ui.name" -msgstr "Π¦Π²Π΅Ρ‚" - -msgid "NodeColorTransformerPanel.action.randomize" -msgstr "Π‘Π»ΡƒΡ‡Π°ΠΉΠ½Ρ‹Π΅ Ρ†Π²Π΅Ρ‚Π°" - -msgid "NodeColorTransformerPanel.action.allBlacks" -msgstr "ВсС Ρ‡Ρ‘Ρ€Π½Ρ‹Π΅" - -msgid "EdgeColorTransformerBuilder.ui.name" -msgstr "Π¦Π²Π΅Ρ‚" - -msgid "EdgeColorTransformerPanel.action.randomize" -msgstr "Π‘Π»ΡƒΡ‡Π°ΠΉΠ½Ρ‹Π΅" - -msgid "EdgeColorTransformerPanel.action.allBlacks" -msgstr "ВсС Ρ‡Ρ‘Ρ€Π½Ρ‹Π΅" diff --git a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/zh_CN.po b/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/zh_CN.po deleted file mode 100644 index 84185bc146..0000000000 --- a/modules/AppearancePluginUI/src/main/resources/org/gephi/ui/partition/plugin/zh_CN.po +++ /dev/null @@ -1,39 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:09+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "εˆ†εŒΊθ½¬ζ’ηš„η”¨ζˆ·η•Œι’" - -msgid "NodeColorTransformerBuilder.ui.name" -msgstr "ι’œθ‰²" - -msgid "NodeColorTransformerPanel.action.randomize" -msgstr "ιšζœΊι’œθ‰²" - -msgid "NodeColorTransformerPanel.action.allBlacks" -msgstr "ε…¨ι»‘" - -msgid "EdgeColorTransformerBuilder.ui.name" -msgstr "ι’œθ‰²" - -msgid "EdgeColorTransformerPanel.action.randomize" -msgstr "随机" - -msgid "EdgeColorTransformerPanel.action.allBlacks" -msgstr "ε…¨ι»‘" diff --git a/modules/AttributeColumnPropertyEditor/pom.xml b/modules/AttributeColumnPropertyEditor/pom.xml deleted file mode 100644 index c6bfaeda16..0000000000 --- a/modules/AttributeColumnPropertyEditor/pom.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - 4.0.0 - - gephi-parent - org.gephi - 0.9-SNAPSHOT - ../.. - - - org.gephi - ui-propertyeditor - 0.9-SNAPSHOT - nbm - - AttributeColumnPropertyEditor - - - - org.netbeans.api - org-openide-util - - - org.netbeans.api - org-openide-util-lookup - - - ${project.groupId} - data-attributes-api - - - - - - - org.codehaus.mojo - nbm-maven-plugin - - - org.gephi.ui.propertyeditor - - - - - - diff --git a/modules/AttributeColumnPropertyEditor/src/main/java/org/gephi/ui/propertyeditor/AbstractAttributeColumnPropertyEditor.java b/modules/AttributeColumnPropertyEditor/src/main/java/org/gephi/ui/propertyeditor/AbstractAttributeColumnPropertyEditor.java deleted file mode 100644 index 487cba5bef..0000000000 --- a/modules/AttributeColumnPropertyEditor/src/main/java/org/gephi/ui/propertyeditor/AbstractAttributeColumnPropertyEditor.java +++ /dev/null @@ -1,175 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ui.propertyeditor; - -import java.beans.PropertyEditorSupport; -import java.util.ArrayList; -import java.util.List; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeController; -import org.gephi.data.attributes.api.AttributeModel; -import org.gephi.data.attributes.api.AttributeType; -import org.gephi.data.attributes.api.AttributeUtils; -import org.openide.util.Lookup; - -/** - * - * @author Mathieu Bastian - */ -abstract class AbstractAttributeColumnPropertyEditor extends PropertyEditorSupport { - - public enum EditorClass { - - NODE, EDGE, NODEEDGE - }; - - public enum AttributeTypeClass { - - ALL, NUMBER, STRING, DYNAMIC_NUMBER, ALL_NUMBER - }; - private AttributeColumn[] columns; - private AttributeColumn selectedColumn; - private EditorClass editorClass = EditorClass.NODE; - private AttributeTypeClass attributeTypeClass = AttributeTypeClass.ALL; - - protected AbstractAttributeColumnPropertyEditor(EditorClass editorClass) { - this.editorClass = editorClass; - } - - protected AbstractAttributeColumnPropertyEditor(EditorClass editorClass, AttributeTypeClass attributeClass) { - this.editorClass = editorClass; - this.attributeTypeClass = attributeClass; - } - - protected AttributeColumn[] getColumns() { - List cols = new ArrayList(); - AttributeModel model = Lookup.getDefault().lookup(AttributeController.class).getModel(); - if (model != null) { - if (editorClass.equals(EditorClass.NODE) || editorClass.equals(EditorClass.NODEEDGE)) { - for (AttributeColumn column : model.getNodeTable().getColumns()) { - if (attributeTypeClass.equals(AttributeTypeClass.NUMBER) && isNumberColumn(column)) { - cols.add(column); - } else if (attributeTypeClass.equals(AttributeTypeClass.DYNAMIC_NUMBER) && isDynamicNumberColumn(column)) { - cols.add(column); - } else if (attributeTypeClass.equals(AttributeTypeClass.ALL_NUMBER) && (isDynamicNumberColumn(column) || isNumberColumn(column))) { - cols.add(column); - } else if (attributeTypeClass.equals(AttributeTypeClass.ALL)) { - cols.add(column); - } else if (attributeTypeClass.equals(attributeTypeClass.STRING) && isStringColumn(column)) { - cols.add(column); - } - } - } - if (editorClass.equals(EditorClass.EDGE) || editorClass.equals(EditorClass.NODEEDGE)) { - for (AttributeColumn column : model.getEdgeTable().getColumns()) { - if (attributeTypeClass.equals(AttributeTypeClass.NUMBER) && isNumberColumn(column)) { - cols.add(column); - } else if (attributeTypeClass.equals(AttributeTypeClass.DYNAMIC_NUMBER) && isDynamicNumberColumn(column)) { - cols.add(column); - } else if (attributeTypeClass.equals(AttributeTypeClass.ALL_NUMBER) && (isDynamicNumberColumn(column) || isNumberColumn(column))) { - cols.add(column); - } else if (attributeTypeClass.equals(AttributeTypeClass.ALL)) { - cols.add(column); - } else if (attributeTypeClass.equals(attributeTypeClass.STRING) && isStringColumn(column)) { - cols.add(column); - } - } - } - } - return cols.toArray(new AttributeColumn[0]); - } - - @Override - public String[] getTags() { - columns = getColumns(); - //selectedColumn = columns[0]; - String[] tags = new String[columns.length]; - for (int i = 0; i < columns.length; i++) { - tags[i] = columns[i].getTitle(); - } - return tags; - } - - @Override - public Object getValue() { - return selectedColumn; - } - - @Override - public void setValue(Object value) { - AttributeColumn column = (AttributeColumn) value; - this.selectedColumn = column; - } - - @Override - public String getAsText() { - if (selectedColumn == null) { - return "---"; - } - return selectedColumn.getTitle(); - } - - @Override - public void setAsText(String text) throws IllegalArgumentException { - for (AttributeColumn c : columns) { - if (c.getTitle().equals(text)) { - this.selectedColumn = c; - } - } - } - - public boolean isDynamicNumberColumn(AttributeColumn column) { - return AttributeUtils.getDefault().isDynamicNumberColumn(column); - } - - public boolean isNumberColumn(AttributeColumn column) { - return AttributeUtils.getDefault().isNumberColumn(column); - } - - public boolean isStringColumn(AttributeColumn column) { - AttributeType type = column.getType(); - if (type == AttributeType.STRING) { - return true; - } - return false; - } -} diff --git a/modules/AttributeColumnPropertyEditor/src/main/nbm/manifest.mf b/modules/AttributeColumnPropertyEditor/src/main/nbm/manifest.mf deleted file mode 100644 index 8226ef21b8..0000000000 --- a/modules/AttributeColumnPropertyEditor/src/main/nbm/manifest.mf +++ /dev/null @@ -1,4 +0,0 @@ -Manifest-Version: 1.0 -AutoUpdate-Essential-Module: true -OpenIDE-Module-Localizing-Bundle: org/gephi/ui/propertyeditor/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file diff --git a/modules/AttributeColumnPropertyEditor/src/main/nbm/module.xml b/modules/AttributeColumnPropertyEditor/src/main/nbm/module.xml deleted file mode 100644 index aae1e8ead1..0000000000 --- a/modules/AttributeColumnPropertyEditor/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/Bundle.properties b/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/Bundle.properties deleted file mode 100644 index 87803f303a..0000000000 --- a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/Bundle.properties +++ /dev/null @@ -1,5 +0,0 @@ -OpenIDE-Module-Display-Category=Gephi UI -OpenIDE-Module-Long-Description=\ - These property editors can be used to display a combobox with current columns in a PropertySheet. -OpenIDE-Module-Name=AttributeColumn Property Editor -OpenIDE-Module-Short-Description=Provide PropertyEditor class for AttributeColumn properties diff --git a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/Bundle_cs.properties b/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/Bundle_cs.properties deleted file mode 100644 index ffc591c4c1..0000000000 --- a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/Bundle_cs.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-29 19\:11+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=Tyto edito\u0159i vlastnost\u00ed mohou b\u00fdt pou\u017eity pro zobrazen\u00ed rozbalovac\u00edho r\u00e1me\u010dku se sou\u010dasn\u00fdmi sloupci v PropertySheet. - -OpenIDE-Module-Short-Description=Poskytnout t\u0159\u00eddu PropertyEditor pro vlastnosti AttributeColumn diff --git a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/Bundle_es.properties b/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/Bundle_es.properties deleted file mode 100644 index bc1a2b91b5..0000000000 --- a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/Bundle_es.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:30+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Estos editores de propiedades pueden ser utilizados para mostrar un combobox con las columnas actuales en un PropertySheet. - -OpenIDE-Module-Short-Description=Proporcionar la clase PropertyEditor para las propiedades de AttributeColumn diff --git a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/Bundle_fr.properties b/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/Bundle_fr.properties deleted file mode 100644 index f27e1baaf1..0000000000 --- a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/Bundle_fr.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:30+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Ces \u00e9diteurs de propri\u00e9t\u00e9 sont utilisables pour afficher une combobox avec les colonnes courantes dans un PropertySheet. - -OpenIDE-Module-Short-Description=Fournit la classe PropertyEditor pour les propri\u00e9t\u00e9s de AttributeColumn diff --git a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/Bundle_ja.properties b/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/Bundle_ja.properties deleted file mode 100644 index 0d59041975..0000000000 --- a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/Bundle_ja.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-18 10\:40+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u3053\u308c\u3089\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u30a8\u30c7\u30a3\u30bf\u306f\u3001\u30d7\u30ed\u30d1\u30c6\u30a3\u30b7\u30fc\u30c8\u3067\u3001\u73fe\u5728\u306e\u5217\u3092\u6301\u3064\u30b3\u30f3\u30dc\u30dc\u30c3\u30af\u30b9\u3092\u8868\u793a\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002 - -OpenIDE-Module-Short-Description=AttributeColumn\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u306ePropertyEditor\u30af\u30e9\u30b9\u3092\u63d0\u4f9b\u3059\u308b diff --git a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/Bundle_pt_BR.properties b/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/Bundle_pt_BR.properties deleted file mode 100644 index 118c65a9d3..0000000000 --- a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/Bundle_pt_BR.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 23\:31+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Estes editores de propriedades pode ser usados para exibir um combobox com as colunas atuais em uma PropertySheet. - -OpenIDE-Module-Short-Description=Fornece classe PropertyEditor para propriedades do tipo AttributeColumn diff --git a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/Bundle_ru.properties b/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/Bundle_ru.properties deleted file mode 100644 index 6904c2cd42..0000000000 --- a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/Bundle_ru.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-07 06\:10+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u044b \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043a\u043e\u043c\u0431\u043e-\u0431\u043e\u043a\u0441\u0430 \u0441 \u0442\u0435\u043a\u0443\u0449\u0438\u043c\u0438 \u043a\u043e\u043b\u043e\u043d\u043a\u0430\u043c\u0438 \u0432 PropertySheet - -OpenIDE-Module-Short-Description=\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043a\u043b\u0430\u0441\u0441 PropertyEditor \u0434\u043b\u044f \u0441\u0432\u043e\u0439\u0441\u0442\u0432 AttributeColumn diff --git a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/Bundle_zh_CN.properties b/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/Bundle_zh_CN.properties deleted file mode 100644 index 35af7080c0..0000000000 --- a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/Bundle_zh_CN.properties +++ /dev/null @@ -1,10 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:21+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u8fd9\u4e9b\u5c5e\u6027\u7f16\u8f91\u5668\u53ef\u7528\u4e8e\u663e\u793a\u5f53\u524d\u5217\u5728PropertySheet\u4e2d\u7684\u4e00\u4e2aComboBox\u3002 - -OpenIDE-Module-Short-Description=\u63d0\u4f9bAttributeColumn\u5c5e\u6027\u7684PropertyEditor\u7c7b diff --git a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/cs.po b/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/cs.po deleted file mode 100644 index 4fe048df62..0000000000 --- a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/cs.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-29 19:11+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Tyto editoΕ™i vlastnostΓ­ mohou bΓ½t pouΕΎity pro zobrazenΓ­ rozbalovacΓ­ho rΓ‘mečku se současnΓ½mi sloupci v PropertySheet." - -msgid "OpenIDE-Module-Short-Description" -msgstr "Poskytnout tΕ™Γ­du PropertyEditor pro vlastnosti AttributeColumn" diff --git a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/es.po b/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/es.po deleted file mode 100644 index cc40b89e45..0000000000 --- a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/es.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:30+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Estos editores de propiedades pueden ser utilizados para mostrar un combobox con las columnas actuales en un PropertySheet." - -msgid "OpenIDE-Module-Short-Description" -msgstr "Proporcionar la clase PropertyEditor para las propiedades de AttributeColumn" diff --git a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/fr.po b/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/fr.po deleted file mode 100644 index edc0360f51..0000000000 --- a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/fr.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:30+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Ces Γ©diteurs de propriΓ©tΓ© sont utilisables pour afficher une combobox avec les colonnes courantes dans un PropertySheet." - -msgid "OpenIDE-Module-Short-Description" -msgstr "Fournit la classe PropertyEditor pour les propriΓ©tΓ©s de AttributeColumn" diff --git a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/ja.po b/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/ja.po deleted file mode 100644 index 256ef6e556..0000000000 --- a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-18 10:40+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "γ“γ‚Œγ‚‰γγƒ—γƒ­γƒ‘γƒ†γ‚£γ‚¨γƒ‡γ‚£γ‚Ώγ―γ€γƒ—γƒ­γƒ‘γƒ†γ‚£γ‚·γƒΌγƒˆγ§γ€ηΎεœ¨γεˆ—γ‚’ζŒγ€γ‚³γƒ³γƒœγƒœγƒƒγ‚―γ‚Ήγ‚’θ‘¨η€Ίγ™γ‚‹γŸγ‚γ«δ½Ώη”¨γ™γ‚‹γ“γ¨γŒγ§γγΎγ™γ€‚" - -msgid "OpenIDE-Module-Short-Description" -msgstr "AttributeColumnγγƒ—ロパティγPropertyEditorクラスを提供する" diff --git a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/org-gephi-ui-propertyeditor.pot b/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/org-gephi-ui-propertyeditor.pot deleted file mode 100644 index 93c6daf8cb..0000000000 --- a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/org-gephi-ui-propertyeditor.pot +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "" -"These property editors can be used to display a combobox with current " -"columns in a PropertySheet." - -msgid "OpenIDE-Module-Short-Description" -msgstr "Provide PropertyEditor class for AttributeColumn properties" diff --git a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/pt_BR.po b/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/pt_BR.po deleted file mode 100644 index eea7d8d781..0000000000 --- a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/pt_BR.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 23:31+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Estes editores de propriedades pode ser usados para exibir um combobox com as colunas atuais em uma PropertySheet." - -msgid "OpenIDE-Module-Short-Description" -msgstr "Fornece classe PropertyEditor para propriedades do tipo AttributeColumn " diff --git a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/ru.po b/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/ru.po deleted file mode 100644 index aec5570c77..0000000000 --- a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/ru.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-07 06:10+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€Ρ‹ свойств ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ для отобраТСния ΠΊΠΎΠΌΠ±ΠΎ-бокса с Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΌΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°ΠΌΠΈ Π² PropertySheet" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ класс PropertyEditor для свойств AttributeColumn " diff --git a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/zh_CN.po b/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/zh_CN.po deleted file mode 100644 index eb063d59b2..0000000000 --- a/modules/AttributeColumnPropertyEditor/src/main/resources/org/gephi/ui/propertyeditor/zh_CN.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:21+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "θΏ™δΊ›ε±žζ€§ηΌ–θΎ‘ε™¨ε―η”¨δΊŽζ˜Ύη€Ίε½“ε‰εˆ—εœ¨PropertySheetδΈ­ηš„δΈ€δΈͺComboBox。" - -msgid "OpenIDE-Module-Short-Description" -msgstr "提供AttributeColumnε±žζ€§ηš„PropertyEditorη±»" diff --git a/modules/AttributesAPI/pom.xml b/modules/AttributesAPI/pom.xml deleted file mode 100644 index 8acb30e8a9..0000000000 --- a/modules/AttributesAPI/pom.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - 4.0.0 - - gephi-parent - org.gephi - 0.9-SNAPSHOT - ../.. - - - org.gephi - data-attributes-api - 0.9-SNAPSHOT - nbm - - AttributesAPI - - - - ${project.groupId} - graph-api - - - ${project.groupId} - project-api - - - org.netbeans.api - org-openide-util-lookup - - - org.netbeans.api - org-openide-util - - - junit - junit - 4.10 - test - - - - - - - org.codehaus.mojo - nbm-maven-plugin - - - org.gephi.data.attributes.api - org.gephi.data.attributes.spi - org.gephi.data.attributes.type - org.gephi.data.properties - - - - - - diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeColumn.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeColumn.java deleted file mode 100644 index 8753662304..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeColumn.java +++ /dev/null @@ -1,136 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.api; - -import org.gephi.data.attributes.spi.AttributeValueDelegateProvider; - -/** - * Column is the header of a data column. It belongs to an AttributeTable - * and is the key to access data within AttributeRow. - *

- * It contains its index that may be used to get the appropriate value in the - * AttributeRow values array. - *

- * For Gephi internal implementation purposes, names of columns are restricted. They can have any name - * except these defined in {@link org.gephi.data.properties.PropertiesColumn PropertiesColumn} enum. - *

Iterate rows values

- *
- * Attribute row = ...;
- * for(AttributeColumn column : table.getColumns()) {
- *      Object value = row.getValue(column);
- * }
- * 
- * - * @author Mathieu Bastian - * @author Martin Ε kurla - * @see AttributeRow - * @see AttributeTable - */ -public interface AttributeColumn { - - /** - * Returns the type of this column content. - * - * @return the type of this column - */ - public AttributeType getType(); - - /** - * Returns the title of this column. The title is a human-readable text that - * describes the column data. When no title exists, returns the Id - * of this column. - * - * @return the title of this column, if exists, or the Id otherwise - */ - public String getTitle(); - - /** - * Returns the index of this column. The index is the fastest way to access a - * column from its AttributeTable or manipulate - * AttributeRow. - * - * @return the index of this column - * @see AttributeTable#getColumn(int) - * @see AttributeRow#getValue(int) - */ - public int getIndex(); - - /** - * Returns the origin of this column content, meta-data that describes where - * the column comes from. Default value is AttributeOrigin.DATA. - * - * @return the origin of this column content - */ - public AttributeOrigin getOrigin(); - - /** - * Returns the id of this column. The id is the unique identifier that describes - * the column data. - * - * @return the id of this column - */ - public String getId(); - - /** - * Returns the default value for this column. May be null. - *

- * The returned Object class type is equal to the class obtained - * with AttributeType.getType(). - * - * @return the default value, or null - */ - public Object getDefaultValue(); - - /** - * Returns the attribute value delegate provider. The Provider is always set if the origin of the - * current attribute column is AttributeOrigin.DELEGATE. - * - * @return attribute value delegate provider - */ - public AttributeValueDelegateProvider getProvider(); - - /** - * Returns the table that contains this column - * @return Table for the column - */ - public AttributeTable getTable(); -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeController.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeController.java deleted file mode 100644 index 28503f7330..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeController.java +++ /dev/null @@ -1,96 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes.api; - -import org.gephi.project.api.Workspace; - -/** - * This controller is the access door to {@link AttributeModel}, that contains - * all attributes data. Attributes are simply any data that could be associated - * with elements like nodes or edges. This module helps to organize data in - * columsn and rows in a way they can be accessed in multiple, yet efficient ways. - *

- * This controller is a service, and exist in the system as a singleton. It can be - * retrieved by using the following command: - *

- * AttributeController ac = Lookup.getDefault().lookup(AttributeController.class);
- * 
- * @author Mathieu Bastian - */ -public interface AttributeController { - - /** - * Returns the model for the current Workspace. May return - * null if there currently no Worksapce active. - *

- * The controller maintains the current project status and is responsible of - * maintaining one AttributeModel instance per Workspace. - * Hence, the model can also be accessed by using the following code: - *

-     * Workspace.getLookup().get(AttributeModel.class);
-     * 
- * @return the currently active model - */ - public AttributeModel getModel(); - - /** - * Returns the model for the given Workspace. - *

- * The controller maintains the current project status and is responsible of - * maintaining one AttributeModel instance per Workspace. - * Hence, the model can also be accessed by using the following code: - *

-     * Workspace.getLookup().get(AttributeModel.class);
-     * 
- * @return the attribute model for workspace. - */ - public AttributeModel getModel(Workspace workspace); - - /** - * Create a new model independent from any Workspace. The model - * can be used indepedently and then merged in another model. - * - * @return a new independent model - * @see AttributeModel#mergeModel(org.gephi.data.attributes.api.AttributeModel) - */ - public AttributeModel newModel(); -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeEvent.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeEvent.java deleted file mode 100644 index a711436460..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeEvent.java +++ /dev/null @@ -1,94 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes.api; - -/** - * Attribute event interface, that {@link AttributeListener } receives when the - * attribute model or any attribute row is modified. - *

- *

    - *
  • ADD_COLUMN: One or several columns have been created, look at - * {@link AttributeEventData#getAddedColumns() } to get data.
  • - *
  • REMOVE_COLUMN: One or several columns have been removed, look at - * {@link AttributeEventData#getRemovedColumns() } to get data.
  • - *
  • SET_VALUE: A value has been set in a row, look at* - * {@link AttributeEventData#getTouchedValues()} to get new values and - * {@link AttributeEventData#getTouchedObjects() } to get objects where value - * has been modified.
  • - *
- * - * @author Mathieu Bastian - */ -public interface AttributeEvent { - - /** - * Attribute model events. - *
    - *
  • ADD_COLUMN: One or several columns have been created, look at - * {@link AttributeEventData#getAddedColumns() } to get data.
  • - *
  • REMOVE_COLUMN: One or several columns have been removed, look at - * {@link AttributeEventData#getRemovedColumns() } to get data.
  • - *
  • SET_VALUE: A value has been set in a row, look at* - * {@link AttributeEventData#getTouchedValues()} to get new values and - * {@link AttributeEventData#getTouchedObjects() } to get objects where value - * has been modified.
  • - *
- */ - public enum EventType { - - ADD_COLUMN, REMOVE_COLUMN, REPLACE_COLUMN, SET_VALUE, UNSET_VALUE - }; - - public EventType getEventType(); - - public AttributeTable getSource(); - - public AttributeEventData getData(); - - /** - * Returns true if this event is one of these in parameters. - * @param type the event types that are to be compared with this event - * @return true if this event is type, - * false otherwise - */ - public boolean is(EventType... type); -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeEventData.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeEventData.java deleted file mode 100644 index e74584d61d..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeEventData.java +++ /dev/null @@ -1,82 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes.api; - -/** - * Data associated with an attribute event. - * - * @author Mathieu Bastian - * @see AttributeEvent - */ -public interface AttributeEventData { - - /** - * Returns columns that have been added. Look at {@link AttributeEvent#getSource() } - * to know to which AttributeTable. - * @return the added columns - */ - public AttributeColumn[] getAddedColumns(); - - /** - * Returns columns that have been removed. Look at {@link AttributeEvent#getSource() } - * to know from which AttributeTable. - * @return the removed columns - */ - public AttributeColumn[] getRemovedColumns(); - - /** - * Returns objects where attribute values have been modified. Objects are - * either NodeData or EdgeData. The index of the - * returned array is matching with values from getTouchedValues(). - * @return the objects modified with the SET_VALUE - * event - */ - public Object[] getTouchedObjects(); - - /** - * Returns values with the SET_VALUE event. The - * AttributeValue object contains the new value that has been set. - * The index of the array is matching with values from getTouchedObjects(). - * @return the new values set with the SET_VALUE event. - */ - public AttributeValue[] getTouchedValues(); -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeListener.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeListener.java deleted file mode 100644 index e1ef8692bb..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeListener.java +++ /dev/null @@ -1,55 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.api; - -import java.util.EventListener; - -/** - * Listener for attribute events. - * - * @author Mathieu Bastian - * @see AttributeEvent - */ -public interface AttributeListener extends EventListener { - - public void attributesChanged(AttributeEvent event); -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeModel.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeModel.java deleted file mode 100644 index ba437d819a..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeModel.java +++ /dev/null @@ -1,158 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.api; - -import org.gephi.project.api.Workspace; - -/** - * Represents the data model, like a standard database would do. As a database, - * contains a list of tables, where columns are defined. By default, a model - * owns a node and edge table, but more could exist, depending - * of the model implementation. - *

- * The model also provides factories that are linked to this model. Use row - * factory to build new rows and value factory to push new values to these - * rows. Columns are manipulated from the AttributeTable class. - * - * @author Mathieu Bastian - * @see AttributeController - */ -public interface AttributeModel { - - /** - * Returns the node table. Contains all the columns associated to - * node elements. - *

- * An AttributeModel has always node, edge and - * graph tables by default. - * - * @return the node table, contains node columns - */ - public AttributeTable getNodeTable(); - - /** - * Returns the edge table. Contains all the columns associated to - * edge elements. - *

- * An AttributeModel has always node, edge and - * graph tables by default. - * - * @return the edge table, contains edge columns - */ - public AttributeTable getEdgeTable(); - - /** - * Returns the graph table. Contains all the columns associated to - * the graph. - *

- * An AttributeModel has always node, edge and - * graph tables by default. - * - * @return the edge table, contains edge columns - */ - public AttributeTable getGraphTable(); - - /** - * Returns the AttributeTable which has the given name - * or null if this table doesn't exist. - * - * @param name the table's name - * @return the table that has been found, or null - */ - public AttributeTable getTable(String name); - - /** - * Returns all tables this model contains. By default, only contains - * node and edge tables. - * - * @return all the tables of this model - */ - public AttributeTable[] getTables(); - - /** - * Return the value factory. - * - * @return the value factory - */ - public AttributeValueFactory valueFactory(); - - /** - * Returns the row factory. - * - * @return the row factory - */ - public AttributeRowFactory rowFactory(); - - /** - * Adds listener to the listeners of this table. It receives - * events when columns are added or removed, as well as when values are set. - * @param listener the listener that is to be added - */ - public void addAttributeListener(AttributeListener listener); - - /** - * Removes listener to the listeners of this table. - * @param listener the listener that is to be removed - */ - public void removeAttributeListener(AttributeListener listener); - - /** - * Merge model in this model. Makes the union of tables and - * columns of both models. Copy tables this model don't - * have and merge existing ones. For existing tables, call - * {@link AttributeTable#mergeTable(AttributeTable)} - * to merge columns. - *

- * Columns are compared according to their id and type. - * Columns found in model are appended only if they no column - * exist with the same id and type. - * - * @param model the model that is to be merged in this model - */ - public void mergeModel(AttributeModel model); - - /** - * Returns the workspace this Attribute model belongs to. - * @return the workspace that owns this Attribute model or null if it is independent from a Workspace - */ - public Workspace getWorkspace(); -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeOrigin.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeOrigin.java deleted file mode 100644 index c9995cea47..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeOrigin.java +++ /dev/null @@ -1,66 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian , Martin Ε kurla -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.api; - -/** - * Meta-data that describes the origin of columns content. Default value is DATA. - *

  • PROPERTY: The attribute is a static field like Label, X or Y.
  • - *
  • DATA: The attribute is a normal associated data to the object.
  • - *
  • COMPUTED: The attribute has been computed during the program execution.
- *

- * - * @author Mathieu Bastian - * @author Martin Ε kurla - */ -public enum AttributeOrigin { - - PROPERTY("AttributeOrigin_property"), - DATA ("AttributeOrigin_data"), - COMPUTED("AttributeOrigin_computed"), - DELEGATE(null); - - private final String label; - - AttributeOrigin(String label) { - this.label = label; - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeRow.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeRow.java deleted file mode 100644 index 3b04725368..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeRow.java +++ /dev/null @@ -1,192 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian , Cezary Bartosiak -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.api; - -import org.gephi.graph.api.Attributes; -import org.gephi.graph.api.EdgeData; -import org.gephi.graph.api.NodeData; - -/** - * Rows contains {@link AttributeValue}, one for each column. Rows are - * not stored in columns and nor in tables, they are stored in the object that - * possess the row, for instance Nodes or Edges. - *

- * But colums are fixed, stored in AttributeTable. Rows always - * contains the values in the same order as columns are described in the table. - *

- * For instance, if an table contains a single column label, the column - * index is equal to 0 and the value can be retrieved in the following ways: - *

    - *
  • row.getValue(column);
  • - *
  • row.getValue("label");
  • - *
  • row.getValue(0);
  • - *
- * Rows are build from a {@link AttributeRowFactory}, that can be get from the - * {@link AttributeModel}. - *

Nodes and edges

- * Nodes and edges elements are build from Graph API, and already have a - * default row that can be found with {@link NodeData#getAttributes()} and - * {@link EdgeData#getAttributes()}. Please cast Attributes in - * AttributesRow to profit from the complete API. - * - * @author Mathieu Bastian - * @author Cezary Bartosiak - * @see AttributeColumn - * @see AttributeTable - * @see AttributeValue - */ -public interface AttributeRow extends Attributes { - - /** - * Resets all data in the row. - */ - public void reset(); - - /** - * Returns the number of values this rows contains. Equal to the number of - * columns of the AttributeTable this row belongs. - * - * @return the size of the values array - */ - public int countValues(); - - /** - * Sets values from another row. Values must have existing column in the - * current table. - * - * @param row an existing row that may refer to the same columns - */ - public void setValues(AttributeRow row); - - /** - * Sets a value for this row. If the column retrieved from - * value cannot be found at the same index, the column - * Id is used to find the column. - * - * @param value a value that refers to an existing column for this row - */ - public void setValue(AttributeValue value); - - /** - * Sets a value at the specified column index. - * - * @param column a column that exists for this row - * @param value the value that is to be set a the specified column index - */ - public void setValue(AttributeColumn column, Object value); - - /** - * Sets a value at the specified column index, if column is found. The - * column is found if column refers to an existing column - * id or title. - * - * @param column a column id or title - * @param value the value that is to be set if column is found - */ - public void setValue(String column, Object value); - - /** - * Sets a value at the specified column index, if index is in - * range. This is equivalent as - * setValue(AttributeColumn.getIndex(), Object). - * - * @param index a valid column index - * @param value the value that is to be set if index is valide - */ - public void setValue(int index, Object value); - - /** - * Returns the value found at the specified column index. May return - * null if the value is null or if the column - * doesn't exist. - * - * @param column a column that exists for this row - * @return the value found at the specified column index or - * null otherwise - */ - public Object getValue(AttributeColumn column); - - /** - * Returns the value at the specified column, if found. The - * column is found if column refers to an existing column - * id or title. - * - * @param column a column id or title - * @return the value found at the specified column or - * null otherwise - */ - public Object getValue(String column); - - /** - * Returns the value at the specified index, if index is in range. - * This is equivalent as getValue(AttributeColumn.getIndex()). - * - * @param index a valid column index - * @return the value found at the specified column or - * null otherwise - * @see AttributeColumn#getIndex() - */ - public Object getValue(int index); - - /** - * Returns the value array. Each AttributeValue is a pair between - * a data and the column it belongs. - * - * @return the value array of this row - */ - public AttributeValue[] getValues(); - - /** - * Returns the value at given index or null if the index is not valid. Each AttributeValue is a pair between - * a data and the column it belongs. - * @param index - * @return AttributeValue at given index or null if the index is not valid - */ - public AttributeValue getAttributeValueAt(int index); - - /** - * Returns the column at given index or null if the index is not valid - * @param index - * @return AttributeColumn at given index or null if the index is not valid - */ - public AttributeColumn getColumnAt(int index); -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeRowFactory.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeRowFactory.java deleted file mode 100644 index 0636d3af67..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeRowFactory.java +++ /dev/null @@ -1,90 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian , Cezary Bartosiak -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.api; - -import org.gephi.graph.api.EdgeData; -import org.gephi.graph.api.Graph; -import org.gephi.graph.api.GraphView; -import org.gephi.graph.api.NodeData; - -/** - * Factory which is building exclusively {@link AttributeRow}. It can be get - * from the {@link AttributeModel#rowFactory()}. - * - * @author Mathieu Bastian - */ -public interface AttributeRowFactory { - - /** - * Returns a new row for the node table. - * - * @return a newly created row for the node table - * @see AttributeModel#getNodeTable() - */ - public AttributeRow newNodeRow(NodeData nodeData); - - /** - * Returns a new row for the edge table. - * - * @return a newly created row for the edge table - * @see AttributeModel#getEdgeTable() - */ - public AttributeRow newEdgeRow(EdgeData edgeData); - - /** - * Returns a new row for the graph table. - * - * @return a newly created row for the graph table - * @see AttributeModel#getGraphTable() - */ - public AttributeRow newGraphRow(GraphView graphView); - - /** - * Returns a new row for the given tableName, or null - * if no table with this name exists. - * - * @return a newly created row for the given table, or null - * otherwise - * @see AttributeModel#getTable(java.lang.String) - */ - public AttributeRow newRowForTable(String tableName, Object object); -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeTable.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeTable.java deleted file mode 100644 index 114f7ebbe7..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeTable.java +++ /dev/null @@ -1,203 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian , Martin Ε kurla -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes.api; - -import org.gephi.data.attributes.spi.AttributeValueDelegateProvider; -import org.gephi.data.properties.PropertiesColumn; - -/** - * Table hosts columns and permits all manipulation on them. Columns can be - * appened with different level of details. The table maintains a map with - * column identifier and title (header) in order they can be retrieved efficiently. - *

- * Tracking added or removed columns can be performed by adding an - * {@link AttributeListener} to this table. - * - * @author Mathieu Bastian - * @author Martin Ε kurla - * @see AttributeColumn - * @see AttributeRow - */ -public interface AttributeTable { - - /** - * Returns the name of this table. - * - * @return the name of this table - */ - public String getName(); - - /** - * Returns the current columns. Call this method to iterate over columns. - * - * @return the current columns. - */ - public AttributeColumn[] getColumns(); - - /** - * Returns the number of column in this table. - * - * @return the number of columns - */ - public int countColumns(); - - /** - *

Creates and add a new column to this table. The default origin is set at DATA.

- *

The title of the column is the identifier.

- * @param id the identifier of the column - * @param type the type of the column - * @return the newly created column - */ - public AttributeColumn addColumn(String id, AttributeType type); - - /** - *

Creates and add a new column to this table.

- *

The title of the column is the identifier.

- * @param id the identifier of the column - * @param type the type of the column - * @param origin the origin of the column - * @return the newly created column - */ - public AttributeColumn addColumn(String id, AttributeType type, AttributeOrigin origin); - - /** - *

Creates and add a new column to this table.

- *

The title can't be null, empty or already existing in the table

- * @param id the identifier of the column - * @param title the title of the column - * @param type the type of the column - * @param origin the origin of the column. - * @param defaultValue the default value of the column. - * @return the newly created column - */ - public AttributeColumn addColumn(String id, String title, AttributeType type, AttributeOrigin origin, Object defaultValue); - - /** - *

Creates and add a new column to this table.

- *

The title can't be null, empty or already existing in the table

- *

Attribute origin will be set to AttributeOrigin.DELEGATE.

* - * @param id the identifier of the column - * @param title the title of the column - * @param type the type of the column - * @param attributeValueDelegateProvider the attribute value delegate provider of the column - * @param defaultValue the default value of the column - * @return the newly created column - */ - public AttributeColumn addColumn(String id, String title, AttributeType type, AttributeValueDelegateProvider attributeValueDelegateProvider, Object defaultValue); - - /** - * Creates and add a new properties column to this table. All needed informations are set in - * PropertiesColumn enum instance. * - * @param propertiesColumn the properties column - * @return the newly created column - */ - public AttributeColumn addPropertiesColumn(PropertiesColumn propertiesColumn); - - /** - * If exists, remove the column and all rows values. - * - * @param column the column that is to be removed - */ - public void removeColumn(AttributeColumn column); - - /** - * If exists, replace source by the new column created from params. - * @param source the column that is to be removed - * @param id the identifier of the column - * @param title the title of the column - * @param type the type of the column - * @param defaultValue the default value of the column - * @return the newly created column, or - * null if source can't be found - */ - public AttributeColumn replaceColumn(AttributeColumn source, String id, String title, AttributeType type, AttributeOrigin origin, Object defaultValue); - - /** - * Gets the column at the index of null if the - * index is not valid. - * - * @param index a valid column index range - * @return the column, or null if not found - */ - public AttributeColumn getColumn(int index); - - /** - * Gets the column with the given identifier or null if it is - * not found. - * - * @param id the column id or title - * @return the column, or null if not found - */ - public AttributeColumn getColumn(String id); - - /** - * Gets the column which match the given parameters or null - * if it is not found. - * - * @param title the column id or title - * @param type the column type - * @return the column, or null if not found - */ - public AttributeColumn getColumn(String title, AttributeType type); - - /** - * Return true if this table has a column with the given - * title or id. - * - * @param title the column title that is to be searched - * @return true if found, or false - * otherwise - */ - public boolean hasColumn(String title); - - /** - * Merge this table with the given table given. New columns from - * table are added to this table. - *

- * Columns are compared according to their id and type. - * Columns found in model are appended only if they no column - * exist with the same id and type. - * - * @param table the table that is to be merged with this table - */ - public void mergeTable(AttributeTable table); -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeType.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeType.java deleted file mode 100644 index bd676d7834..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeType.java +++ /dev/null @@ -1,494 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian , Martin Ε kurla, Cezary Bartosiak - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes.api; - -import java.math.BigDecimal; -import java.math.BigInteger; -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Pattern; -import org.gephi.data.attributes.type.*; - -/** - * The different type an {@link AttributeColumn} can have. - * - * @author Mathieu Bastian - * @author Martin Ε kurla - * @author Cezary Bartosiak - */ -public enum AttributeType { - - BYTE(Byte.class), - SHORT(Short.class), - INT(Integer.class), - LONG(Long.class), - FLOAT(Float.class), - DOUBLE(Double.class), - BOOLEAN(Boolean.class), - CHAR(Character.class), - STRING(String.class), - BIGINTEGER(BigInteger.class), - BIGDECIMAL(BigDecimal.class), - DYNAMIC_BYTE(DynamicByte.class), - DYNAMIC_SHORT(DynamicShort.class), - DYNAMIC_INT(DynamicInteger.class), - DYNAMIC_LONG(DynamicLong.class), - DYNAMIC_FLOAT(DynamicFloat.class), - DYNAMIC_DOUBLE(DynamicDouble.class), - DYNAMIC_BOOLEAN(DynamicBoolean.class), - DYNAMIC_CHAR(DynamicCharacter.class), - DYNAMIC_STRING(DynamicString.class), - DYNAMIC_BIGINTEGER(DynamicBigInteger.class), - DYNAMIC_BIGDECIMAL(DynamicBigDecimal.class), - TIME_INTERVAL(TimeInterval.class), - LIST_BYTE(ByteList.class), - LIST_SHORT(ShortList.class), - LIST_INTEGER(IntegerList.class), - LIST_LONG(LongList.class), - LIST_FLOAT(FloatList.class), - LIST_DOUBLE(DoubleList.class), - LIST_BOOLEAN(BooleanList.class), - LIST_CHARACTER(CharacterList.class), - LIST_STRING(StringList.class), - LIST_BIGINTEGER(BigIntegerList.class), - LIST_BIGDECIMAL(BigDecimalList.class); - private final Class type; - - AttributeType(Class type) { - this.type = type; - } - - @Override - public String toString() { - return type.getSimpleName(); - } - - /** - * The name of the enum constant. - * - * @return the name of the enum constant - */ - public String getTypeString() { - return super.toString(); - } - - /** - * Returns the - * Class the type is associated with. - * - * @return the class the type is associated with - */ - public Class getType() { - return type; - } - - /** - * Try to parse the given - * str snippet in an object of the type associated to this - * AttributeType. For instance if the type is Boolean, and - * str equals - * true, this method will succeed to return a - * Boolean instance. May throw - * NumberFormatException. - * - * DYNAMIC types and - * TIME_INTERVAL cannot be parsed with this method (see - * isDynamicType method) and a UnsupportedOperationException will be thrown if it is tried. - * - * @param str the string that is to be parsed - * @return an instance of the type of this or null if not able to parse given string as the type AttributeType. - */ - public Object parse(String str) { - try { - switch (this) { - case BYTE: - return new Byte(removeDecimalDigitsFromString(str)); - case SHORT: - return new Short(removeDecimalDigitsFromString(str)); - case INT: - return new Integer(removeDecimalDigitsFromString(str)); - case LONG: - return new Long(removeDecimalDigitsFromString(str)); - case FLOAT: - return new Float(str); - case DOUBLE: - return new Double(str); - case BOOLEAN: - return Boolean.valueOf(str); - case CHAR: - return new Character(str.charAt(0)); - case BIGINTEGER: - return new BigInteger(removeDecimalDigitsFromString(str)); - case BIGDECIMAL: - return new BigDecimal(str); - case DYNAMIC_BYTE: - case DYNAMIC_SHORT: - case DYNAMIC_INT: - case DYNAMIC_LONG: - case DYNAMIC_FLOAT: - case DYNAMIC_DOUBLE: - case DYNAMIC_BOOLEAN: - case DYNAMIC_CHAR: - case DYNAMIC_STRING: - case DYNAMIC_BIGINTEGER: - case DYNAMIC_BIGDECIMAL: - case TIME_INTERVAL: - return parseDynamic(str); - case LIST_BYTE: - return new ByteList(removeDecimalDigitsFromString(str)); - case LIST_SHORT: - return new ShortList(removeDecimalDigitsFromString(str)); - case LIST_INTEGER: - return new IntegerList(removeDecimalDigitsFromString(str)); - case LIST_LONG: - return new LongList(removeDecimalDigitsFromString(str)); - case LIST_FLOAT: - return new FloatList(str); - case LIST_DOUBLE: - return new DoubleList(str); - case LIST_BOOLEAN: - return new BooleanList(str); - case LIST_CHARACTER: - return new CharacterList(str); - case LIST_STRING: - return new StringList(str); - case LIST_BIGINTEGER: - return new BigIntegerList(removeDecimalDigitsFromString(str)); - case LIST_BIGDECIMAL: - return new BigDecimalList(str); - } - return str; - } catch (Exception e) { - return null;//Any parse exception due to incorrect syntax - } - } - - private Object parseDynamic(String str) { - List intervals; - try { - intervals = DynamicParser.parseIntervals(this, str); - } catch (Exception ex) { - return null;//Unable to parse - } - - return createDynamicObject(intervals); - } - - public DynamicType createDynamicObject(List in) { - if (!this.isDynamicType()) { - throw new IllegalArgumentException("The attribute type is not dynamic"); - } - - switch (this) { - case DYNAMIC_BYTE: { - ArrayList> lin = null; - if (in != null) { - lin = new ArrayList>(); - for (Interval interval : in) { - lin.add(new Interval(interval.getLow(), interval.getHigh(), - interval.isLowExcluded(), interval.isHighExcluded(), (Byte) interval.getValue())); - } - } - return new DynamicByte(lin); - } - case DYNAMIC_SHORT: { - ArrayList> lin = null; - if (in != null) { - lin = new ArrayList>(); - for (Interval interval : in) { - lin.add(new Interval(interval.getLow(), interval.getHigh(), - interval.isLowExcluded(), interval.isHighExcluded(), (Short) interval.getValue())); - } - } - return new DynamicShort(lin); - } - case DYNAMIC_INT: { - ArrayList> lin = null; - if (in != null) { - lin = new ArrayList>(); - for (Interval interval : in) { - lin.add(new Interval(interval.getLow(), interval.getHigh(), - interval.isLowExcluded(), interval.isHighExcluded(), (Integer) interval.getValue())); - } - } - return new DynamicInteger(lin); - } - case DYNAMIC_LONG: { - ArrayList> lin = null; - if (in != null) { - lin = new ArrayList>(); - for (Interval interval : in) { - lin.add(new Interval(interval.getLow(), interval.getHigh(), - interval.isLowExcluded(), interval.isHighExcluded(), (Long) interval.getValue())); - } - } - return new DynamicLong(lin); - } - case DYNAMIC_FLOAT: { - ArrayList> lin = null; - if (in != null) { - lin = new ArrayList>(); - for (Interval interval : in) { - lin.add(new Interval(interval.getLow(), interval.getHigh(), - interval.isLowExcluded(), interval.isHighExcluded(), (Float) interval.getValue())); - } - } - return new DynamicFloat(lin); - } - case DYNAMIC_DOUBLE: { - ArrayList> lin = null; - if (in != null) { - lin = new ArrayList>(); - for (Interval interval : in) { - lin.add(new Interval(interval.getLow(), interval.getHigh(), - interval.isLowExcluded(), interval.isHighExcluded(), (Double) interval.getValue())); - } - } - return new DynamicDouble(lin); - } - case DYNAMIC_BOOLEAN: { - ArrayList> lin = null; - if (in != null) { - lin = new ArrayList>(); - for (Interval interval : in) { - lin.add(new Interval(interval.getLow(), interval.getHigh(), - interval.isLowExcluded(), interval.isHighExcluded(), (Boolean) interval.getValue())); - } - } - return new DynamicBoolean(lin); - } - case DYNAMIC_CHAR: { - ArrayList> lin = null; - if (in != null) { - lin = new ArrayList>(); - for (Interval interval : in) { - lin.add(new Interval(interval.getLow(), interval.getHigh(), - interval.isLowExcluded(), interval.isHighExcluded(), (Character) interval.getValue())); - } - } - return new DynamicCharacter(lin); - } - case DYNAMIC_STRING: { - ArrayList> lin = null; - if (in != null) { - lin = new ArrayList>(); - for (Interval interval : in) { - lin.add(new Interval(interval.getLow(), interval.getHigh(), - interval.isLowExcluded(), interval.isHighExcluded(), (String) interval.getValue())); - } - } - return new DynamicString(lin); - } - case DYNAMIC_BIGINTEGER: { - ArrayList> lin = null; - if (in != null) { - lin = new ArrayList>(); - for (Interval interval : in) { - lin.add(new Interval(interval.getLow(), interval.getHigh(), - interval.isLowExcluded(), interval.isHighExcluded(), (BigInteger) interval.getValue())); - } - } - return new DynamicBigInteger(lin); - } - case DYNAMIC_BIGDECIMAL: { - ArrayList> lin = null; - if (in != null) { - lin = new ArrayList>(); - for (Interval interval : in) { - lin.add(new Interval(interval.getLow(), interval.getHigh(), - interval.isLowExcluded(), interval.isHighExcluded(), (BigDecimal) interval.getValue())); - } - } - return new DynamicBigDecimal(lin); - } - case TIME_INTERVAL: { - ArrayList lin = null; - if (in != null) { - lin = new ArrayList(); - for (Interval interval : in) { - lin.add(new Interval(interval.getLow(), interval.getHigh(), - interval.isLowExcluded(), interval.isHighExcluded())); - } - } - return new TimeInterval(lin); - } - default: - return null; - } - } - - /** - * Build an - * AttributeType from the given - * obj type. If the given - * obj class match with an - * AttributeType type, returns this type. Returns - * null otherwise.

For instance if obj instanceof Float equals true, returns - * AttributeType.FLOAT. - * - * @param obj the object that is to be parsed - * @return the compatible AttributeType, or null if no type is found or the input object is null - */ - public static AttributeType parse(Object obj) { - if (obj == null) { - return null; - } - Class c = obj.getClass(); - - for (AttributeType attributeType : AttributeType.values()) { - if (c.equals(attributeType.getType())) { - return attributeType; - } - } - - return null; - } - - /** - * Build an dynamic - * AttributeType from the given - * obj type. If the given - * obj class match with an - * AttributeType type, returns this type. Returns - * null otherwise.

For instance if obj instanceof Float equals true, returns - * AttributeType.DYNAMIC_FLOAT. - * - * @param obj the object that is to be parsed - * @return the compatible AttributeType, or null - */ - public static AttributeType parseDynamic(Object obj) { - if (obj == null) { - return null; - } - - Class c = obj.getClass(); - - if (c.equals(Byte.class)) { - return DYNAMIC_BYTE; - } - if (c.equals(Short.class)) { - return DYNAMIC_SHORT; - } - if (c.equals(Integer.class)) { - return DYNAMIC_INT; - } - if (c.equals(Long.class)) { - return DYNAMIC_LONG; - } - if (c.equals(Float.class)) { - return DYNAMIC_FLOAT; - } - if (c.equals(Double.class)) { - return DYNAMIC_DOUBLE; - } - if (c.equals(Boolean.class)) { - return DYNAMIC_BOOLEAN; - } - if (c.equals(Character.class)) { - return DYNAMIC_CHAR; - } - if (c.equals(String.class)) { - return DYNAMIC_STRING; - } - if (c.equals(BigInteger.class)) { - return DYNAMIC_BIGINTEGER; - } - if (c.equals(BigDecimal.class)) { - return DYNAMIC_BIGDECIMAL; - } - - return null; - } - - /** - * Indicates if this type is a {@code DynamicType}. - * - * @return {@code true} if this is a {@code DynamicType}, {@code false} otherwise - */ - public boolean isDynamicType() { - switch (this) { - case DYNAMIC_BYTE: - case DYNAMIC_SHORT: - case DYNAMIC_INT: - case DYNAMIC_LONG: - case DYNAMIC_FLOAT: - case DYNAMIC_DOUBLE: - case DYNAMIC_BOOLEAN: - case DYNAMIC_CHAR: - case DYNAMIC_STRING: - case DYNAMIC_BIGINTEGER: - case DYNAMIC_BIGDECIMAL: - case TIME_INTERVAL: - return true; - default: - return false; - } - } - - public boolean isListType() { - if (this.equals(LIST_BIGDECIMAL) - || this.equals(LIST_BIGINTEGER) - || this.equals(LIST_BOOLEAN) - || this.equals(LIST_BYTE) - || this.equals(LIST_CHARACTER) - || this.equals(LIST_DOUBLE) - || this.equals(LIST_FLOAT) - || this.equals(LIST_INTEGER) - || this.equals(LIST_LONG) - || this.equals(LIST_SHORT) - || this.equals(LIST_STRING)) { - return true; - } - return false; - } - - /** - * Removes the decimal digits and point of the numbers of string when necessary. Used for trying to parse decimal numbers as not decimal. For example BigDecimal to BigInteger. - * - * @param s String to remove decimal digits - * @return String without dot and decimal digits. - */ - public static String removeDecimalDigitsFromString(String s) { - return removeDecimalDigitsFromStringPattern.matcher(s).replaceAll(""); - } - private static final Pattern removeDecimalDigitsFromStringPattern = Pattern.compile("\\.[0-9]*"); -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeUtils.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeUtils.java deleted file mode 100644 index 1554fdb498..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeUtils.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian , Martin Ε kurla - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes.api; - -import java.util.GregorianCalendar; -import javax.xml.datatype.DatatypeConfigurationException; -import javax.xml.datatype.DatatypeFactory; -import org.openide.util.Lookup; - -/** - * - * @author Mathieu Bastian - * @author Martin Ε kurla - */ -public abstract class AttributeUtils { - - private static DatatypeFactory dateFactory; - - static { - try { - dateFactory = DatatypeFactory.newInstance(); - } catch (DatatypeConfigurationException ex) { - } - } - - public abstract boolean isNodeColumn(AttributeColumn column); - - public abstract boolean isEdgeColumn(AttributeColumn column); - - public abstract boolean isGraphColumn(AttributeColumn column); - - public abstract boolean isColumnOfType(AttributeColumn column, AttributeType type); - - public abstract boolean areAllColumnsOfType(AttributeColumn[] columns, AttributeType type); - - public abstract boolean areAllColumnsOfSameType(AttributeColumn[] columns); - - public abstract boolean isStringColumn(AttributeColumn column); - - public abstract boolean areAllStringColumns(AttributeColumn[] columns); - - public abstract boolean isNumberColumn(AttributeColumn column); - - public abstract boolean areAllNumberColumns(AttributeColumn[] columns); - - public abstract boolean isNumberListColumn(AttributeColumn column); - - public abstract boolean areAllNumberListColumns(AttributeColumn[] columns); - - public abstract boolean isNumberOrNumberListColumn(AttributeColumn column); - - public abstract boolean areAllNumberOrNumberListColumns(AttributeColumn[] columns); - - public abstract boolean isDynamicNumberColumn(AttributeColumn column); - - public abstract boolean areAllDynamicNumberColumns(AttributeColumn[] columns); - - public abstract AttributeColumn[] getNumberColumns(AttributeTable table); - - public abstract AttributeColumn[] getStringColumns(AttributeTable table); - - public abstract AttributeColumn[] getAllCollums(AttributeModel model); - - @SuppressWarnings("rawtypes") - public abstract Comparable getMin(AttributeColumn column, Comparable[] values); - - @SuppressWarnings("rawtypes") - public abstract Comparable getMax(AttributeColumn column, Comparable[] values); - - public static synchronized AttributeUtils getDefault() { - return Lookup.getDefault().lookup(AttributeUtils.class); - } - - /** - * Used for attributes representation. - * - * @param d a double to convert from - * - * @return an XML date string. - * - * @throws IllegalArgumentException if {@code d} is infinite. - */ - public static String getXMLDateStringFromDouble(double d) { - if (d == Double.NEGATIVE_INFINITY) { - return "-Infinity"; - } else if (d == Double.POSITIVE_INFINITY) { - return "Infinity"; - } - GregorianCalendar gc = new GregorianCalendar(); - gc.setTimeInMillis((long) d); - String s = dateFactory.newXMLGregorianCalendar(gc).toXMLFormat().substring(0, 23); - s = s.endsWith("T00:00:00.000") ? s.substring(0, 10) : s; - return s; - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeValue.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeValue.java deleted file mode 100644 index aa11c2136d..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeValue.java +++ /dev/null @@ -1,70 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.api; - -/** - * Cell that contains the value for a particular {@link AttributeColumn} and - * {@link AttributeRow}. - *

- * Cells are build from a {@link AttributeValueFactory}, that can be get from the - * {@link AttributeModel}. - * - * @author Mathieu Bastian - */ -public interface AttributeValue { - - /** - * Returns the column this value belongs. - * - * @return the column this value belongs - */ - public AttributeColumn getColumn(); - - /** - * Returns the value. May be null or equal to the column's - * default value. - * - * @return the value or null - * @see AttributeColumn#getDefaultValue() - */ - public Object getValue(); -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeValueFactory.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeValueFactory.java deleted file mode 100644 index 346ebe2873..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/AttributeValueFactory.java +++ /dev/null @@ -1,63 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.api; - -/** - * Factory which is building exclusively {@link AttributeValue}. It can be get - * from the {@link AttributeModel#valueFactory()}. - * - * @author Mathieu Bastian - */ -public interface AttributeValueFactory { - - /** - * Returns a new cell value for the given column and - * value. The value can be null. - *

- * The value type should be compatible with the column type. - * - * @param column the column where the cell belongs - * @param value a compatible value, or null - * @return the new value for the given column - */ - public AttributeValue newValue(AttributeColumn column, Object value); -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/Estimator.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/Estimator.java deleted file mode 100644 index 99330ec165..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/api/Estimator.java +++ /dev/null @@ -1,155 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Cezary Bartosiak -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.api; - -/** - * This enum is used to determine what should be done with "ties". For example - * if in the given time interval some attribute has got 3 different values we - * should know how to estimate its value. - * - *

The table below shows how the estimation is done for different types - * ({@code -} means {@code not specified}). - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
AVERAGEMEDIANMODESUMMINMAXFIRSTLAST
Real numbersarithmetic meanthe value separating the higher half from the lower half (if there is - * an even number of values, the median is then defined to be the mean of - * the two middle values)the value that occurs the most frequentlythe result of addition of all valuesthe lowest valuethe highest valuethe value which occured firstlythe value which occured lastly
Integersarithmetic mean - using integer divisionthe value separating the higher half from the lower half (if there is - * an even number of values, the median is then defined to be the mean of - * the two middle values - using integer division)the value that occurs the most frequentlythe result of addition of all valuesthe lowest valuethe highest valuethe value which occured firstlythe value which occured lastly
Boolean-the bool separating the higher half from the lower half (if there is - * an even number of bools, the median is then defined to be the bool - * which occured earlier than the second middle bool)the bool that occurs the most frequently-false if exists in a given set of bools, otherwise truetrue if exists in a given set of bools, otherwise falsethe bool which occured firstlythe bool which occured lastly
Character-the character separating the higher half from the lower half (if there - * is an even number of characters, the median is then defined to be the - * character which occured earlier than the second middle character)the character that occurs the most frequently-the lowest character (with the lowest {@code int} value)the highest character (with the highest {@code int} value)the character which occured firstlythe character which occured lastly
String-the string separating the higher half from the lower half (if there - * is an even number of strings, the median is then defined to be the - * string which occured earlier than the second middle string)the string that occurs the most frequently-the lowest string (using {@code compareTo} method)the highest string (using {@code compareTo} method)the string which occured firstlythe string which occured lastly
TimeInterval-the time interval separating the higher half from the lower half (if - * there is an even number of time intervals, the median is then defined - * to be the time interval which occured earlier than the second middle - * time interval)the time interval that occurs the most frequently---the time interval which occured firstlythe time interval which occured lastly
- * - * @author Cezary Bartosiak - */ -public enum Estimator { - AVERAGE, - MEDIAN, - MODE, - SUM, - MIN, - MAX, - FIRST, - LAST -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/spi/AttributeValueDelegateProvider.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/spi/AttributeValueDelegateProvider.java deleted file mode 100644 index 325f79efaf..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/spi/AttributeValueDelegateProvider.java +++ /dev/null @@ -1,183 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Martin Ε kurla -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes.spi; - - -import org.gephi.data.attributes.api.AttributeColumn; - - -/** - *

General information

- * Provider for delegating attribute value. Using this interface it is possible to delegate the real - * value of AttributeValue object to database (relational, graph, ...), index/search engine, ... - *
- * For every node/edge it is possible to add, get, set and remove every attribute value. - * - *

Implementation details

- * As of implementation detail of AttributeValue immutability, both adding and setting the attribute value is done through the - * set[Edge|Node]AttributeValue() method, so it is absolutely necessary to treat both cases in the method body. - *
- * Every method takes at least 2 arguments: - *
    - *
  • delegate id - *
  • attribute column - *
- * Delegate id is any type of object necessary to get the right node/edge. For instance for Neo4j it is of type Long, - * which is directly used as Neo4j node/relationship id. For other storing engines which require indexing key and - * value it could be crate (wrapper object) wrapping both values with proper types. - *
- * Attribute column is used usually for getting the column id which is used as property name. - * - *

Automatic and manual type conversions

- * Important thing about the whole delegating process is type conversion. It is clear that there might exist type mismatch - * between Gephi types and types which are supported in storing engine. During implementation it is necessary to fulfill - * following requirements: - *
    - *
  • get[Edge|Node]AttributeValue() method must return any of primitive types, String or array of these types. The - * conversion from array type into appropriate List type is done automatically using ListFactory method. - *
  • set[Edge|Node]AttributeValue() can accept any of Gephi supported types described in AttributeType constructors - * as class objects. It is up to the Provider to make appropriate conversion if this is needed, especially conversion - * from List types. - *
- * - *

Usage

- * Every AttributeColumn has direct link to its own AttributeValueDelegateProvider. This means that it is possible to - * have more Providers in the same AttributeTable, each delegating from a subset of all columns. And because the fact - * that every AttributeValue has link to its AttributeColumn, it has direct access to its Provider too. - *
- * Provider will be called for getting value for every AttributeValue which has column with AttributeOrigin.DELEGATE. - * The first setValue() method call on Attributes/AttributeRow will set the delegate id and every other will change - * data in storing engine. - * - *

Best practises

- * Every implementing class should be implemented as singleton because of memory savings. This singleton should be - * passed during populating AttributeTable / creating columns. - *
- * Any other necessary implementation information / resources (as concrete database instance) should be set using - * static methods. - *
- * Any necessary convertor described in Automatic and manual type conversions should be implemented as static - * inner class. - * - * @author Martin Ε kurla - * - * @param type parameter used to restrict delegate id type - */ -public abstract class AttributeValueDelegateProvider { - /** - * Returns the delegated node attribute value. - * - * @param delegateId delegate id - * @param attributeColumn attribute column - * - * @return delegated node attribute value - */ - public abstract Object getNodeAttributeValue(T delegateId, AttributeColumn attributeColumn); - - /** - * Adds or sets the delegated node attribute value. It is necessary to treat both cases in the method body! - * - * @param delegateId delegate id - * @param attributeColumn attribute column - * @param nodeValue new/changed delegated node attribute value - */ - public abstract void setNodeAttributeValue(T delegateId, AttributeColumn attributeColumn, Object nodeValue); - - /** - * Deletes the delegated node attribute value. - * - * @param delegateId delegate id - * @param attributeColumn attribute column - */ - public abstract void deleteNodeAttributeValue(T delegateId, AttributeColumn attributeColumn); - - /** - * Returns the delegated edge attribute value. - * - * @param delegateId delegate id - * @param attributeColumn attribute column - * - * @return delegated edge attribute value - */ - public abstract Object getEdgeAttributeValue(T delegateId, AttributeColumn attributeColumn); - - /** - * Adds or sets the delegated edge attribute value. It is necessary to treat both cases in the method body! - * - * @param delegateId delegate id - * @param attributeColumn attribute column - * @param nodeValue new/changed delegated edge attribute value - */ - public abstract void setEdgeAttributeValue(T delegateId, AttributeColumn attributeColumn, Object edgeValue); - - /** - * Deletes the delegated edge attribute value. - * - * @param delegateId delegate id - * @param attributeColumn attribute column - */ - public abstract void deleteEdgeAttributeValue(T delegateId, AttributeColumn attributeColumn); - - /** - * Returns name of storage engine. This is used when graph uses more storage engines and where must be an - * option how to differ them in GUI. - * - * @return name of storage engine - */ - public abstract String storageEngineName();//TODO >>> add documentation for these two methods - - public abstract GraphItemDelegateFactoryProvider graphItemDelegateFactoryProvider(); - - - @Override//TODO >>> add documentation about this usage for hashing, ... - public final boolean equals(Object obj) { - if (!(obj instanceof AttributeValueDelegateProvider)) - return false; - - return ((AttributeValueDelegateProvider) obj).storageEngineName().equals(this.storageEngineName()); - } - - @Override - public final int hashCode() { - return storageEngineName().hashCode(); - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/spi/GraphItemDelegateFactoryProvider.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/spi/GraphItemDelegateFactoryProvider.java deleted file mode 100644 index 2328663131..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/spi/GraphItemDelegateFactoryProvider.java +++ /dev/null @@ -1,58 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Martin Ε kurla -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes.spi; - -/** - * - * @author Martin Ε kurla - * @param - */ -public interface GraphItemDelegateFactoryProvider { - - T createNode(); - - void deleteNode(T nodeId); - - T createEdge(T startNodeId, T endNodeId); - - void deleteEdge(T edgeId); -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/AbstractList.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/AbstractList.java deleted file mode 100644 index 13bf802754..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/AbstractList.java +++ /dev/null @@ -1,200 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Martin Ε kurla -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.type; - -import java.util.Arrays; - -/** - * Complex type that defines list of any type of items. Can be created from an array or from single - * string using either given or default separators. Internal representation of data is array of generic - * type. This means that every primitive type must be first converted into wrapper type. The exact - * conversion process from String value into given type is done by {@link TypeConvertor TypeConvertor} - * class. - * - *

- *

Design guidelines

- * This is a basic abstract class that every other 'List' class should extend. In order to not misuse - * the API, every extending type should be one of the following: - *
    - *
  • helper type which restricts the type parameter and possibly brings some new functionality (e.g. - * {@link NumberList NumberList}). This is not final usable type so it should be declared as abstract. - *
  • final type that extends any of defined helper types or basic class and sets the type parameter - * (e.g. there are types for representing all primitive types, String, BigInteger & BigDecimal). - * These are final usable types so they should be declared as final. - *
- * - *

Flexibility

- * The flexibility of this API is done in 2 ways: - *
    - *
  • We can add functionality by defining conversions from any other type in difference from general - * supported types through defining new constructors (e.g. {@link StringList StringList} class can - * be created from array of characters). We can also restrict the functionality (e.g. BigInteger & - * BigDecimal cannot be created from arrays of primitive types). The conversion process should be - * done by {@link TypeConvertor TypeConvertor} type if the conversion can be used in more List - * implementations or by 'private static T parseXXX()' method in appropriate List implementation if - * only this type uses the conversion (e.g. {@link StringList#parse}). - *
  • Any other functionality required from 'List' implementations should be done by implementing - * appropriate non-static methods in concrete 'List' implementations. - *
- * - *

Extensibility

- * This API can be simply extended. New 'List' type should extend base or any helper 'List' type. We can - * create final 'List' implementations as well as helper 'list' implementations with appropriate modifiers - * (see Design Guidelines). We can define as many constructors responsible for conversions from other - * types and as many additional methods as we want.
- * To fully integrate new 'List' type into the whole codebase we have to update following types: - *
    - *
  1. {@link org.gephi.data.attributes.api.AttributeType AttributeType}: - *
      - *
    1. add appropriate enum constants - *
    2. update {@link org.gephi.data.attributes.api.AttributeType#parse(String str) parse(String)} method - *
    - *
  2. {@link org.gephi.data.attributes.model.DataIndex DataIndex}: - *
      - *
    1. add appropriate type represented by Class object into - * {@link org.gephi.data.attributes.model.DataIndex#SUPPORTED_TYPES SUPPORTED_TYPES} array - *
    - *
- * - * This class defines {@link #size method for recognizing size} of the list and - * {@link #getItem method for getting item by index}. - * - * @param type parameter defining final List type - * - * @author Martin Ε kurla - * - * @see TypeConvertor - */ -public abstract class AbstractList { - - public static final String DEFAULT_SEPARATOR = ",|;"; - protected final T[] list; - private volatile int hashCode = 0; - - public AbstractList(String input, Class finalType) { - this(input, DEFAULT_SEPARATOR, finalType); - } - - public AbstractList(String input, String separator, Class finalType) { - this(TypeConvertor.createArrayFromString(input, separator, finalType)); - } - - public AbstractList(T[] array) { - this.list = Arrays.copyOf(array, array.length); - } - - public int size() { - return list.length; - } - - public T getItem(int index) { - if (index >= list.length) { - return null; - } - - return list[index]; - } - - public boolean contains(T value) { - for (int i = 0; i < list.length; i++) { - if (list[i].equals(value)) { - return true; - } - } - return false; - } - - @Override - public String toString() { - StringBuilder builder = new StringBuilder(); - - for (int i = 0; i < list.length; i++) { - builder.append(list[i]); - builder.append(','); - } - - if (list.length > 0) { - builder.deleteCharAt(builder.length() - 1); - } - - return builder.toString(); - } - - @Override - public boolean equals(Object obj) { - if (!(obj instanceof AbstractList)) { - return false; - } - - AbstractList s = (AbstractList) obj; - - if (s.size() != this.size()) { - return false; - } - - for (int i = 0; i < list.length; i++) { - if (this.getItem(i) != s.getItem(i)) { - if (this.getItem(i)!=null&&!this.getItem(i).equals(s.getItem(i))) { - return false; - }else if(s.getItem(i)!=null&&!s.getItem(i).equals(this.getItem(i))){ - return false; - } - } - } - - return true; - } - - @Override - public int hashCode() { - if (hashCode == 0) { - int hash = 7; - - for (int i = 0; i < list.length; i++) { - hash = 53 * hash + (this.list[i] != null ? this.list[i].hashCode() : 0); - } - hashCode = hash; - } - return hashCode; - } -} - diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/BigDecimalList.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/BigDecimalList.java deleted file mode 100644 index ce04db1ae4..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/BigDecimalList.java +++ /dev/null @@ -1,65 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Martin Ε kurla -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.type; - -import java.math.BigDecimal; - -/** - * Complex type that define a list of BigDecimal items. Can be created from a BigDecimal - * array or from single string using either given or default separators. - * - * @author Martin Ε kurla - */ -public final class BigDecimalList extends NumberList { - - public BigDecimalList(BigDecimal[] array) { - super(array); - } - - public BigDecimalList(String input) { - this(input, AbstractList.DEFAULT_SEPARATOR); - } - - public BigDecimalList(String input, String separator) { - super(input, separator, BigDecimal.class); - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/BigIntegerList.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/BigIntegerList.java deleted file mode 100644 index 95d58b34e1..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/BigIntegerList.java +++ /dev/null @@ -1,66 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Martin Ε kurla -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.type; - -import java.math.BigInteger; - -/** - * Complex type that define a list of BigInteger items. Can be created from a BigInteger - * array or from single string using either given or default separators. - * - * @author Martin Ε kurla - */ -public final class BigIntegerList extends NumberList { - - public BigIntegerList(BigInteger[] array) { - super(array); - } - - public BigIntegerList(String input) { - this(input, AbstractList.DEFAULT_SEPARATOR); - } - - public BigIntegerList(String input, String separator) { - super(input, separator, BigInteger.class); - } -} - diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/BooleanList.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/BooleanList.java deleted file mode 100644 index 662f5a99b2..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/BooleanList.java +++ /dev/null @@ -1,67 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Martin Ε kurla -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.type; - -/** - * Complex type that define a list of Boolean items. Can be created from a boolean - * array, from a Boolean array or from single string using either given or default separators. - * - * @author Martin Ε kurla - */ -public final class BooleanList extends AbstractList { - - public BooleanList(boolean[] primitiveBooleanArray) { - super(TypeConvertor.convertPrimitiveToWrapperArray(primitiveBooleanArray)); - } - - public BooleanList(Boolean[] wrapperBooleanArray) { - super(wrapperBooleanArray); - } - - public BooleanList(String input) { - this(input, AbstractList.DEFAULT_SEPARATOR); - } - - public BooleanList(String input, String separator) { - super(input, separator, Boolean.class); - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/ByteList.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/ByteList.java deleted file mode 100644 index b6d9febda9..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/ByteList.java +++ /dev/null @@ -1,67 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Martin Ε kurla -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.type; - -/** - * Complex type that define a list of Byte items. Can be created from a byte - * array, from a Byte array or from single string using either given or default separators. - * - * @author Martin Ε kurla - */ -public final class ByteList extends NumberList { - - public ByteList(byte[] primitiveByteArray) { - super(TypeConvertor.convertPrimitiveToWrapperArray(primitiveByteArray)); - } - - public ByteList(Byte[] wrapperByteArray) { - super(wrapperByteArray); - } - - public ByteList(String input) { - this(input, AbstractList.DEFAULT_SEPARATOR); - } - - public ByteList(String input, String separator) { - super(input, separator, Byte.class); - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/CharacterList.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/CharacterList.java deleted file mode 100644 index 3b1e3ff719..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/CharacterList.java +++ /dev/null @@ -1,67 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Martin Ε kurla -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.type; - -/** - * Complex type that define a list of Character items. Can be created from a char - * array, from a Character array or from single string using either given or default separators. - * - * @author Martin Ε kurla - */ -public final class CharacterList extends AbstractList { - - public CharacterList(char[] primitiveCharArray) { - super(TypeConvertor.convertPrimitiveToWrapperArray(primitiveCharArray)); - } - - public CharacterList(Character[] wrapperCharArray) { - super(wrapperCharArray); - } - - public CharacterList(String input) { - this(input, AbstractList.DEFAULT_SEPARATOR); - } - - public CharacterList(String input, String separator) { - super(input, separator, Character.class); - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DoubleList.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DoubleList.java deleted file mode 100644 index d02864b3f0..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DoubleList.java +++ /dev/null @@ -1,67 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Martin Ε kurla -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.type; - -/** - * Complex type that define a list of Double items. Can be created from a double - * array, from a Double array or from single string using either given or default separators. - * - * @author Martin Ε kurla - */ -public final class DoubleList extends NumberList { - - public DoubleList(double[] primitiveDoubleArray) { - super(TypeConvertor.convertPrimitiveToWrapperArray(primitiveDoubleArray)); - } - - public DoubleList(Double[] wrapperDoubleArray) { - super(wrapperDoubleArray); - } - - public DoubleList(String input) { - this(input, AbstractList.DEFAULT_SEPARATOR); - } - - public DoubleList(String input, String separator) { - super(input, separator, Double.class); - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicBigDecimal.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicBigDecimal.java deleted file mode 100644 index c8624da2b3..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicBigDecimal.java +++ /dev/null @@ -1,214 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Cezary Bartosiak -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.type; - -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.util.Hashtable; -import java.util.List; -import org.gephi.data.attributes.api.Estimator; - -/** - * Represents {@link BigDecimal} type which can have got different values in - * different time intervals. - * - * @author Cezary Bartosiak - */ -public final class DynamicBigDecimal extends DynamicType { - /** - * Constructs a new {@code DynamicType} instance with no intervals. - */ - public DynamicBigDecimal() { - super(); - } - - /** - * Constructs a new {@code DynamicType} instance that contains a given - * {@code Interval} in. - * - * @param in interval to add (could be null) - */ - public DynamicBigDecimal(Interval in) { - super(in); - } - - /** - * Constructs a new {@code DynamicType} instance with intervals given by - * {@code List>} in. - * - * @param in intervals to add (could be null) - */ - public DynamicBigDecimal(List> in) { - super(in); - } - - /** - * Constructs a deep copy of {@code source}. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - */ - public DynamicBigDecimal(DynamicBigDecimal source) { - super(source); - } - - /** - * Constructs a deep copy of {@code source} that contains a given - * {@code Interval} in. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in interval to add (could be null) - */ - public DynamicBigDecimal(DynamicBigDecimal source, Interval in) { - super(source, in); - } - - /** - * Constructs a deep copy of {@code source} that contains a given - * {@code Interval} in. Before add it removes from the newly created - * object all intervals that overlap with a given {@code Interval} out. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in interval to add (could be null) - * @param out interval to remove (could be null) - */ - public DynamicBigDecimal(DynamicBigDecimal source, Interval in, Interval out) { - super(source, in, out); - } - - /** - * Constructs a deep copy of {@code source} with additional intervals - * given by {@code List>} in. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in intervals to add (could be null) - */ - public DynamicBigDecimal(DynamicBigDecimal source, List> in) { - super(source, in); - } - - /** - * Constructs a deep copy of {@code source} with additional intervals - * given by {@code List>} in. Before add it removes from the - * newly created object all intervals that overlap with intervals given by - * {@code List>} out. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in intervals to add (could be null) - * @param out intervals to remove (could be null) - */ - public DynamicBigDecimal(DynamicBigDecimal source, List> in, List> out) { - super(source, in, out); - } - - @Override - public BigDecimal getValue(Interval interval, Estimator estimator) { - List values = getValues(interval); - if (values.isEmpty()) - return null; - - switch (estimator) { - case AVERAGE: - if (values.size() == 1) - return values.get(0); - BigDecimal total = new BigDecimal(0); - for (int i = 0; i < values.size(); ++i) - total = total.add(values.get(i)); - return total.divide(BigDecimal.valueOf(values.size()), RoundingMode.HALF_UP); - case MEDIAN: - if (values.size() % 2 == 1) - return values.get(values.size() / 2); - BigDecimal bd = values.get(values.size() / 2 - 1); - bd = bd.add(values.get(values.size() / 2)); - return bd.divide(new BigDecimal(2)); - case MODE: - Hashtable map = - new Hashtable(); - for (int i = 0; i < values.size(); ++i) { - int prev = 0; - if (map.containsKey(values.get(i).hashCode())) - prev = map.get(values.get(i).hashCode()); - map.put(values.get(i).hashCode(), prev + 1); - } - int max = map.get(values.get(0).hashCode()); - int index = 0; - for (int i = 1; i < values.size(); ++i) - if (max < map.get(values.get(i).hashCode())) { - max = map.get(values.get(i).hashCode()); - index = i; - } - return values.get(index); - case SUM: - BigDecimal sum = new BigDecimal(0); - for (int i = 0; i < values.size(); ++i) - sum = sum.add(values.get(i)); - return sum; - case MIN: - BigDecimal minimum = values.get(0); - for (int i = 1; i < values.size(); ++i) - if (minimum.compareTo(values.get(i)) > 0) - minimum = values.get(i); - return minimum; - case MAX: - BigDecimal maximum = values.get(0); - for (int i = 1; i < values.size(); ++i) - if (maximum.compareTo(values.get(i)) < 0) - maximum = values.get(i); - return maximum; - case FIRST: - return values.get(0); - case LAST: - return values.get(values.size() - 1); - default: - throw new IllegalArgumentException("Unknown estimator."); - } - } - - @Override - public Class getUnderlyingType() { - return BigDecimal.class; - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicBigInteger.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicBigInteger.java deleted file mode 100644 index fda3ba9e74..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicBigInteger.java +++ /dev/null @@ -1,213 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Cezary Bartosiak -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.type; - -import java.math.BigInteger; -import java.util.Hashtable; -import java.util.List; -import org.gephi.data.attributes.api.Estimator; - -/** - * Represents {@link BigInteger} type which can have got different values in - * different time intervals. - * - * @author Cezary Bartosiak - */ -public final class DynamicBigInteger extends DynamicType { - /** - * Constructs a new {@code DynamicType} instance with no intervals. - */ - public DynamicBigInteger() { - super(); - } - - /** - * Constructs a new {@code DynamicType} instance that contains a given - * {@code Interval} in. - * - * @param in interval to add (could be null) - */ - public DynamicBigInteger(Interval in) { - super(in); - } - - /** - * Constructs a new {@code DynamicType} instance with intervals given by - * {@code List>} in. - * - * @param in intervals to add (could be null) - */ - public DynamicBigInteger(List> in) { - super(in); - } - - /** - * Constructs a deep copy of {@code source}. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - */ - public DynamicBigInteger(DynamicBigInteger source) { - super(source); - } - - /** - * Constructs a deep copy of {@code source} that contains a given - * {@code Interval} in. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in interval to add (could be null) - */ - public DynamicBigInteger(DynamicBigInteger source, Interval in) { - super(source, in); - } - - /** - * Constructs a deep copy of {@code source} that contains a given - * {@code Interval} in. Before add it removes from the newly created - * object all intervals that overlap with a given {@code Interval} out. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in interval to add (could be null) - * @param out interval to remove (could be null) - */ - public DynamicBigInteger(DynamicBigInteger source, Interval in, Interval out) { - super(source, in, out); - } - - /** - * Constructs a deep copy of {@code source} with additional intervals - * given by {@code List>} in. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in intervals to add (could be null) - */ - public DynamicBigInteger(DynamicBigInteger source, List> in) { - super(source, in); - } - - /** - * Constructs a deep copy of {@code source} with additional intervals - * given by {@code List>} in. Before add it removes from the - * newly created object all intervals that overlap with intervals given by - * {@code List>} out. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in intervals to add (could be null) - * @param out intervals to remove (could be null) - */ - public DynamicBigInteger(DynamicBigInteger source, List> in, List> out) { - super(source, in, out); - } - - @Override - public BigInteger getValue(Interval interval, Estimator estimator) { - List values = getValues(interval); - if (values.isEmpty()) - return null; - - switch (estimator) { - case AVERAGE: - if (values.size() == 1) - return values.get(0); - BigInteger total = BigInteger.valueOf(0); - for (int i = 0; i < values.size(); ++i) - total = total.add(values.get(i)); - return total.divide(BigInteger.valueOf(values.size())); - case MEDIAN: - if (values.size() % 2 == 1) - return values.get(values.size() / 2); - BigInteger bi = values.get(values.size() / 2 - 1); - bi = bi.add(values.get(values.size() / 2)); - return bi.divide(BigInteger.valueOf(2)); - case MODE: - Hashtable map = - new Hashtable(); - for (int i = 0; i < values.size(); ++i) { - int prev = 0; - if (map.containsKey(values.get(i).hashCode())) - prev = map.get(values.get(i).hashCode()); - map.put(values.get(i).hashCode(), prev + 1); - } - int max = map.get(values.get(0).hashCode()); - int index = 0; - for (int i = 1; i < values.size(); ++i) - if (max < map.get(values.get(i).hashCode())) { - max = map.get(values.get(i).hashCode()); - index = i; - } - return values.get(index); - case SUM: - BigInteger sum = BigInteger.valueOf(0); - for (int i = 0; i < values.size(); ++i) - sum = sum.add(values.get(i)); - return sum; - case MIN: - BigInteger minimum = values.get(0); - for (int i = 1; i < values.size(); ++i) - if (minimum.compareTo(values.get(i)) > 0) - minimum = values.get(i); - return minimum; - case MAX: - BigInteger maximum = values.get(0); - for (int i = 1; i < values.size(); ++i) - if (maximum.compareTo(values.get(i)) < 0) - maximum = values.get(i); - return maximum; - case FIRST: - return values.get(0); - case LAST: - return values.get(values.size() - 1); - default: - throw new IllegalArgumentException("Unknown estimator."); - } - } - - @Override - public Class getUnderlyingType() { - return BigInteger.class; - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicBoolean.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicBoolean.java deleted file mode 100644 index 54d21ffb73..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicBoolean.java +++ /dev/null @@ -1,204 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Cezary Bartosiak -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.type; - -import java.util.Hashtable; -import java.util.List; -import org.gephi.data.attributes.api.Estimator; - -/** - * Represents {@link Boolean} type which can have got different values in - * different time intervals. - * - * @author Cezary Bartosiak - */ -public final class DynamicBoolean extends DynamicType { - /** - * Constructs a new {@code DynamicType} instance with no intervals. - */ - public DynamicBoolean() { - super(); - } - - /** - * Constructs a new {@code DynamicType} instance that contains a given - * {@code Interval} in. - * - * @param in interval to add (could be null) - */ - public DynamicBoolean(Interval in) { - super(in); - } - - /** - * Constructs a new {@code DynamicType} instance with intervals given by - * {@code List>} in. - * - * @param in intervals to add (could be null) - */ - public DynamicBoolean(List> in) { - super(in); - } - - /** - * Constructs a deep copy of {@code source}. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - */ - public DynamicBoolean(DynamicBoolean source) { - super(source); - } - - /** - * Constructs a deep copy of {@code source} that contains a given - * {@code Interval} in. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in interval to add (could be null) - */ - public DynamicBoolean(DynamicBoolean source, Interval in) { - super(source, in); - } - - /** - * Constructs a deep copy of {@code source} that contains a given - * {@code Interval} in. Before add it removes from the newly created - * object all intervals that overlap with a given {@code Interval} out. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in interval to add (could be null) - * @param out interval to remove (could be null) - */ - public DynamicBoolean(DynamicBoolean source, Interval in, Interval out) { - super(source, in, out); - } - - /** - * Constructs a deep copy of {@code source} with additional intervals - * given by {@code List>} in. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in intervals to add (could be null) - */ - public DynamicBoolean(DynamicBoolean source, List> in) { - super(source, in); - } - - /** - * Constructs a deep copy of {@code source} with additional intervals - * given by {@code List>} in. Before add it removes from the - * newly created object all intervals that overlap with intervals given by - * {@code List>} out. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in intervals to add (could be null) - * @param out intervals to remove (could be null) - */ - public DynamicBoolean(DynamicBoolean source, List> in, List> out) { - super(source, in, out); - } - - @Override - public Boolean getValue(Interval interval, Estimator estimator) { - List values = getValues(interval); - if (values.isEmpty()) - return null; - - switch (estimator) { - case AVERAGE: - throw new UnsupportedOperationException( - "Not supported estimator"); - case MEDIAN: - if (values.size() % 2 == 1) - return values.get(values.size() / 2); - return values.get(values.size() / 2 - 1); - case MODE: - Hashtable map = - new Hashtable(); - for (int i = 0; i < values.size(); ++i) { - int prev = 0; - if (map.containsKey(values.get(i).hashCode())) - prev = map.get(values.get(i).hashCode()); - map.put(values.get(i).hashCode(), prev + 1); - } - int max = map.get(values.get(0).hashCode()); - int index = 0; - for (int i = 1; i < values.size(); ++i) - if (max < map.get(values.get(i).hashCode())) { - max = map.get(values.get(i).hashCode()); - index = i; - } - return values.get(index); - case SUM: - throw new UnsupportedOperationException( - "Not supported estimator"); - case MIN: - Boolean minimum = values.get(0); - for (int i = 1; i < values.size(); ++i) - if (minimum.compareTo(values.get(i)) > 0) - minimum = values.get(i); - return minimum; - case MAX: - Boolean maximum = values.get(0); - for (int i = 1; i < values.size(); ++i) - if (maximum.compareTo(values.get(i)) < 0) - maximum = values.get(i); - return maximum; - case FIRST: - return values.get(0); - case LAST: - return values.get(values.size() - 1); - default: - throw new IllegalArgumentException("Unknown estimator."); - } - } - - @Override - public Class getUnderlyingType() { - return Boolean.class; - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicByte.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicByte.java deleted file mode 100644 index 5e47270521..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicByte.java +++ /dev/null @@ -1,216 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Cezary Bartosiak -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.type; - -import java.math.BigInteger; -import java.util.Hashtable; -import java.util.List; -import org.gephi.data.attributes.api.Estimator; - -/** - * Represents {@link Byte} type which can have got different values in - * different time intervals. - * - * @author Cezary Bartosiak - */ -public final class DynamicByte extends DynamicType { - /** - * Constructs a new {@code DynamicType} instance with no intervals. - */ - public DynamicByte() { - super(); - } - - /** - * Constructs a new {@code DynamicType} instance that contains a given - * {@code Interval} in. - * - * @param in interval to add (could be null) - */ - public DynamicByte(Interval in) { - super(in); - } - - /** - * Constructs a new {@code DynamicType} instance with intervals given by - * {@code List>} in. - * - * @param in intervals to add (could be null) - */ - public DynamicByte(List> in) { - super(in); - } - - /** - * Constructs a deep copy of {@code source}. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - */ - public DynamicByte(DynamicByte source) { - super(source); - } - - /** - * Constructs a deep copy of {@code source} that contains a given - * {@code Interval} in. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in interval to add (could be null) - */ - public DynamicByte(DynamicByte source, Interval in) { - super(source, in); - } - - /** - * Constructs a deep copy of {@code source} that contains a given - * {@code Interval} in. Before add it removes from the newly created - * object all intervals that overlap with a given {@code Interval} out. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in interval to add (could be null) - * @param out interval to remove (could be null) - */ - public DynamicByte(DynamicByte source, Interval in, Interval out) { - super(source, in, out); - } - - /** - * Constructs a deep copy of {@code source} with additional intervals - * given by {@code List>} in. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in intervals to add (could be null) - */ - public DynamicByte(DynamicByte source, List> in) { - super(source, in); - } - - /** - * Constructs a deep copy of {@code source} with additional intervals - * given by {@code List>} in. Before add it removes from the - * newly created object all intervals that overlap with intervals given by - * {@code List>} out. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in intervals to add (could be null) - * @param out intervals to remove (could be null) - */ - public DynamicByte(DynamicByte source, List> in, List> out) { - super(source, in, out); - } - - @Override - public Byte getValue(Interval interval, Estimator estimator) { - List values = getValues(interval); - if (values.isEmpty()) - return null; - - switch (estimator) { - case AVERAGE: - if (values.size() == 1) - return values.get(0); - BigInteger total = BigInteger.valueOf(0); - for (int i = 0; i < values.size(); ++i) - total = total.add(BigInteger.valueOf(values.get(i))); - return total.divide(BigInteger.valueOf(values.size())).byteValue(); - case MEDIAN: - if (values.size() % 2 == 1) - return values.get(values.size() / 2); - BigInteger bi = BigInteger.valueOf(values.get( - values.size() / 2 - 1)); - bi = bi.add(BigInteger.valueOf(values.get(values.size() / 2))); - return bi.divide(BigInteger.valueOf(2)).byteValue(); - case MODE: - Hashtable map = - new Hashtable(); - for (int i = 0; i < values.size(); ++i) { - int prev = 0; - if (map.containsKey(values.get(i).hashCode())) - prev = map.get(values.get(i).hashCode()); - map.put(values.get(i).hashCode(), prev + 1); - } - int max = map.get(values.get(0).hashCode()); - int index = 0; - for (int i = 1; i < values.size(); ++i) - if (max < map.get(values.get(i).hashCode())) { - max = map.get(values.get(i).hashCode()); - index = i; - } - return values.get(index); - case SUM: - BigInteger sum = BigInteger.valueOf(0); - for (int i = 0; i < values.size(); ++i) - sum = sum.add(BigInteger.valueOf(values.get(i))); - return sum.byteValue(); - case MIN: - BigInteger minimum = BigInteger.valueOf(values.get(0)); - for (int i = 1; i < values.size(); ++i) - if (minimum.compareTo(BigInteger.valueOf( - values.get(i))) > 0) - minimum = BigInteger.valueOf(values.get(i)); - return minimum.byteValue(); - case MAX: - BigInteger maximum = BigInteger.valueOf(values.get(0)); - for (int i = 1; i < values.size(); ++i) - if (maximum.compareTo(BigInteger.valueOf( - values.get(i))) < 0) - maximum = BigInteger.valueOf(values.get(i)); - return maximum.byteValue(); - case FIRST: - return values.get(0); - case LAST: - return values.get(values.size() - 1); - default: - throw new IllegalArgumentException("Unknown estimator."); - } - } - - @Override - public Class getUnderlyingType() { - return Byte.class; - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicCharacter.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicCharacter.java deleted file mode 100644 index 0ce08026a0..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicCharacter.java +++ /dev/null @@ -1,205 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Cezary Bartosiak -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.type; - -import java.util.Hashtable; -import java.util.List; -import org.gephi.data.attributes.api.Estimator; - -/** - * Represents {@link Character} type which can have got different values in - * different time intervals. - * - * @author Cezary Bartosiak - */ -public final class DynamicCharacter extends DynamicType { - /** - * Constructs a new {@code DynamicType} instance with no intervals. - */ - public DynamicCharacter() { - super(); - } - - /** - * Constructs a new {@code DynamicType} instance that contains a given - * {@code Interval} in. - * - * @param in interval to add (could be null) - */ - public DynamicCharacter(Interval in) { - super(in); - } - - /** - * Constructs a new {@code DynamicType} instance with intervals given by - * {@code List>} in. - * - * @param in intervals to add (could be null) - */ - public DynamicCharacter(List> in) { - super(in); - } - - /** - * Constructs a deep copy of {@code source}. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - */ - public DynamicCharacter(DynamicCharacter source) { - super(source); - } - - /** - * Constructs a deep copy of {@code source} that contains a given - * {@code Interval} in. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in interval to add (could be null) - */ - public DynamicCharacter(DynamicCharacter source, Interval in) { - super(source, in); - } - - /** - * Constructs a deep copy of {@code source} that contains a given - * {@code Interval} in. Before add it removes from the newly created - * object all intervals that overlap with a given {@code Interval} out. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in interval to add (could be null) - * @param out interval to remove (could be null) - */ - public DynamicCharacter(DynamicCharacter source, Interval in, Interval out) { - super(source, in, out); - } - - /** - * Constructs a deep copy of {@code source} with additional intervals - * given by {@code List>} in. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in intervals to add (could be null) - */ - public DynamicCharacter(DynamicCharacter source, - List> in) { - super(source, in); - } - - /** - * Constructs a deep copy of {@code source} with additional intervals - * given by {@code List>} in. Before add it removes from the - * newly created object all intervals that overlap with intervals given by - * {@code List>} out. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in intervals to add (could be null) - * @param out intervals to remove (could be null) - */ - public DynamicCharacter(DynamicCharacter source, List> in, List> out) { - super(source, in, out); - } - - @Override - public Character getValue(Interval interval, Estimator estimator) { - List values = getValues(interval); - if (values.isEmpty()) - return null; - - switch (estimator) { - case AVERAGE: - throw new UnsupportedOperationException( - "Not supported estimator"); - case MEDIAN: - if (values.size() % 2 == 1) - return values.get(values.size() / 2); - return values.get(values.size() / 2 - 1); - case MODE: - Hashtable map = - new Hashtable(); - for (int i = 0; i < values.size(); ++i) { - int prev = 0; - if (map.containsKey(values.get(i).hashCode())) - prev = map.get(values.get(i).hashCode()); - map.put(values.get(i).hashCode(), prev + 1); - } - int max = map.get(values.get(0).hashCode()); - int index = 0; - for (int i = 1; i < values.size(); ++i) - if (max < map.get(values.get(i).hashCode())) { - max = map.get(values.get(i).hashCode()); - index = i; - } - return values.get(index); - case SUM: - throw new UnsupportedOperationException( - "Not supported estimator"); - case MIN: - Character minimum = values.get(0); - for (int i = 1; i < values.size(); ++i) - if (minimum.compareTo(values.get(i)) > 0) - minimum = values.get(i); - return minimum; - case MAX: - Character maximum = values.get(0); - for (int i = 1; i < values.size(); ++i) - if (maximum.compareTo(values.get(i)) < 0) - maximum = values.get(i); - return maximum; - case FIRST: - return values.get(0); - case LAST: - return values.get(values.size() - 1); - default: - throw new IllegalArgumentException("Unknown estimator."); - } - } - - @Override - public Class getUnderlyingType() { - return Character.class; - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicDouble.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicDouble.java deleted file mode 100644 index 70f5c71dfc..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicDouble.java +++ /dev/null @@ -1,215 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Cezary Bartosiak -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.type; - -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.util.Hashtable; -import java.util.List; -import org.gephi.data.attributes.api.Estimator; - -/** - * Represents {@link Double} type which can have got different values in - * different time intervals. - * - * @author Cezary Bartosiak - */ -public final class DynamicDouble extends DynamicType { - /** - * Constructs a new {@code DynamicType} instance with no intervals. - */ - public DynamicDouble() { - super(); - } - - /** - * Constructs a new {@code DynamicType} instance that contains a given - * {@code Interval} in. - * - * @param in interval to add (could be null) - */ - public DynamicDouble(Interval in) { - super(in); - } - - /** - * Constructs a new {@code DynamicType} instance with intervals given by - * {@code List>} in. - * - * @param in intervals to add (could be null) - */ - public DynamicDouble(List> in) { - super(in); - } - - /** - * Constructs a deep copy of {@code source}. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - */ - public DynamicDouble(DynamicDouble source) { - super(source); - } - - /** - * Constructs a deep copy of {@code source} that contains a given - * {@code Interval} in. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in interval to add (could be null) - */ - public DynamicDouble(DynamicDouble source, Interval in) { - super(source, in); - } - - /** - * Constructs a deep copy of {@code source} that contains a given - * {@code Interval} in. Before add it removes from the newly created - * object all intervals that overlap with a given {@code Interval} out. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in interval to add (could be null) - * @param out interval to remove (could be null) - */ - public DynamicDouble(DynamicDouble source, Interval in, Interval out) { - super(source, in, out); - } - - /** - * Constructs a deep copy of {@code source} with additional intervals - * given by {@code List>} in. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in intervals to add (could be null) - */ - public DynamicDouble(DynamicDouble source, List> in) { - super(source, in); - } - - /** - * Constructs a deep copy of {@code source} with additional intervals - * given by {@code List>} in. Before add it removes from the - * newly created object all intervals that overlap with intervals given by - * {@code List>} out. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in intervals to add (could be null) - * @param out intervals to remove (could be null) - */ - public DynamicDouble(DynamicDouble source, List> in, List> out) { - super(source, in, out); - } - - @Override - public Double getValue(Interval interval, Estimator estimator) { - List values = getValues(interval); - if (values.isEmpty()) - return null; - - switch (estimator) { - case AVERAGE: - if (values.size() == 1) - return values.get(0); - BigDecimal total = new BigDecimal(0); - for (int i = 0; i < values.size(); ++i) - total = total.add(BigDecimal.valueOf(values.get(i))); - return total.divide(BigDecimal.valueOf((long)values.size()), 10, RoundingMode.HALF_EVEN).doubleValue(); - case MEDIAN: - if (values.size() % 2 == 1) - return values.get(values.size() / 2); - BigDecimal bd = new BigDecimal( - values.get(values.size() / 2 - 1)); - bd = bd.add(new BigDecimal(values.get(values.size() / 2))); - return bd.divide(new BigDecimal(2)).doubleValue(); - case MODE: - Hashtable map = - new Hashtable(); - for (int i = 0; i < values.size(); ++i) { - int prev = 0; - if (map.containsKey(values.get(i).hashCode())) - prev = map.get(values.get(i).hashCode()); - map.put(values.get(i).hashCode(), prev + 1); - } - int max = map.get(values.get(0).hashCode()); - int index = 0; - for (int i = 1; i < values.size(); ++i) - if (max < map.get(values.get(i).hashCode())) { - max = map.get(values.get(i).hashCode()); - index = i; - } - return values.get(index); - case SUM: - BigDecimal sum = new BigDecimal(0); - for (int i = 0; i < values.size(); ++i) - sum = sum.add(new BigDecimal(values.get(i))); - return sum.doubleValue(); - case MIN: - BigDecimal minimum = new BigDecimal(values.get(0)); - for (int i = 1; i < values.size(); ++i) - if (minimum.compareTo(new BigDecimal(values.get(i))) > 0) - minimum = new BigDecimal(values.get(i)); - return minimum.doubleValue(); - case MAX: - BigDecimal maximum = new BigDecimal(values.get(0)); - for (int i = 1; i < values.size(); ++i) - if (maximum.compareTo(new BigDecimal(values.get(i))) < 0) - maximum = new BigDecimal(values.get(i)); - return maximum.doubleValue(); - case FIRST: - return values.get(0); - case LAST: - return values.get(values.size() - 1); - default: - throw new IllegalArgumentException("Unknown estimator."); - } - } - - @Override - public Class getUnderlyingType() { - return Double.class; - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicFloat.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicFloat.java deleted file mode 100644 index 290d70f71e..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicFloat.java +++ /dev/null @@ -1,215 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Cezary Bartosiak -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.type; - -import java.math.BigDecimal; -import java.math.RoundingMode; -import java.util.Hashtable; -import java.util.List; -import org.gephi.data.attributes.api.Estimator; - -/** - * Represents {@link Float} type which can have got different values in - * different time intervals. - * - * @author Cezary Bartosiak - */ -public final class DynamicFloat extends DynamicType { - /** - * Constructs a new {@code DynamicType} instance with no intervals. - */ - public DynamicFloat() { - super(); - } - - /** - * Constructs a new {@code DynamicType} instance that contains a given - * {@code Interval} in. - * - * @param in interval to add (could be null) - */ - public DynamicFloat(Interval in) { - super(in); - } - - /** - * Constructs a new {@code DynamicType} instance with intervals given by - * {@code List>} in. - * - * @param in intervals to add (could be null) - */ - public DynamicFloat(List> in) { - super(in); - } - - /** - * Constructs a deep copy of {@code source}. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - */ - public DynamicFloat(DynamicFloat source) { - super(source); - } - - /** - * Constructs a deep copy of {@code source} that contains a given - * {@code Interval} in. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in interval to add (could be null) - */ - public DynamicFloat(DynamicFloat source, Interval in) { - super(source, in); - } - - /** - * Constructs a deep copy of {@code source} that contains a given - * {@code Interval} in. Before add it removes from the newly created - * object all intervals that overlap with a given {@code Interval} out. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in interval to add (could be null) - * @param out interval to remove (could be null) - */ - public DynamicFloat(DynamicFloat source, Interval in, Interval out) { - super(source, in, out); - } - - /** - * Constructs a deep copy of {@code source} with additional intervals - * given by {@code List>} in. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in intervals to add (could be null) - */ - public DynamicFloat(DynamicFloat source, List> in) { - super(source, in); - } - - /** - * Constructs a deep copy of {@code source} with additional intervals - * given by {@code List>} in. Before add it removes from the - * newly created object all intervals that overlap with intervals given by - * {@code List>} out. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in intervals to add (could be null) - * @param out intervals to remove (could be null) - */ - public DynamicFloat(DynamicFloat source, List> in, List> out) { - super(source, in, out); - } - - @Override - public Float getValue(Interval interval, Estimator estimator) { - List values = getValues(interval); - if (values.isEmpty()) - return null; - - switch (estimator) { - case AVERAGE: - if (values.size() == 1) - return values.get(0); - BigDecimal total = new BigDecimal(0); - for (int i = 0; i < values.size(); ++i) - total = total.add(BigDecimal.valueOf(values.get(i).doubleValue())); - return total.divide(BigDecimal.valueOf((long)values.size()), 10, RoundingMode.HALF_EVEN).floatValue(); - case MEDIAN: - if (values.size() % 2 == 1) - return values.get(values.size() / 2); - BigDecimal bd = new BigDecimal( - values.get(values.size() / 2 - 1)); - bd = bd.add(new BigDecimal(values.get(values.size() / 2))); - return bd.divide(new BigDecimal(2)).floatValue(); - case MODE: - Hashtable map = - new Hashtable(); - for (int i = 0; i < values.size(); ++i) { - int prev = 0; - if (map.containsKey(values.get(i).hashCode())) - prev = map.get(values.get(i).hashCode()); - map.put(values.get(i).hashCode(), prev + 1); - } - int max = map.get(values.get(0).hashCode()); - int index = 0; - for (int i = 1; i < values.size(); ++i) - if (max < map.get(values.get(i).hashCode())) { - max = map.get(values.get(i).hashCode()); - index = i; - } - return values.get(index); - case SUM: - BigDecimal sum = new BigDecimal(0); - for (int i = 0; i < values.size(); ++i) - sum = sum.add(new BigDecimal(values.get(i))); - return sum.floatValue(); - case MIN: - BigDecimal minimum = new BigDecimal(values.get(0)); - for (int i = 1; i < values.size(); ++i) - if (minimum.compareTo(new BigDecimal(values.get(i))) > 0) - minimum = new BigDecimal(values.get(i)); - return minimum.floatValue(); - case MAX: - BigDecimal maximum = new BigDecimal(values.get(0)); - for (int i = 1; i < values.size(); ++i) - if (maximum.compareTo(new BigDecimal(values.get(i))) < 0) - maximum = new BigDecimal(values.get(i)); - return maximum.floatValue(); - case FIRST: - return values.get(0); - case LAST: - return values.get(values.size() - 1); - default: - throw new IllegalArgumentException("Unknown estimator."); - } - } - - @Override - public Class getUnderlyingType() { - return Float.class; - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicInteger.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicInteger.java deleted file mode 100644 index 6f55abf0d8..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicInteger.java +++ /dev/null @@ -1,216 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Cezary Bartosiak -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.type; - -import java.math.BigInteger; -import java.util.Hashtable; -import java.util.List; -import org.gephi.data.attributes.api.Estimator; - -/** - * Represents {@link Integer} type which can have got different values in - * different time intervals. - * - * @author Cezary Bartosiak - */ -public final class DynamicInteger extends DynamicType { - /** - * Constructs a new {@code DynamicType} instance with no intervals. - */ - public DynamicInteger() { - super(); - } - - /** - * Constructs a new {@code DynamicType} instance that contains a given - * {@code Interval} in. - * - * @param in interval to add (could be null) - */ - public DynamicInteger(Interval in) { - super(in); - } - - /** - * Constructs a new {@code DynamicType} instance with intervals given by - * {@code List>} in. - * - * @param in intervals to add (could be null) - */ - public DynamicInteger(List> in) { - super(in); - } - - /** - * Constructs a deep copy of {@code source}. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - */ - public DynamicInteger(DynamicInteger source) { - super(source); - } - - /** - * Constructs a deep copy of {@code source} that contains a given - * {@code Interval} in. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in interval to add (could be null) - */ - public DynamicInteger(DynamicInteger source, Interval in) { - super(source, in); - } - - /** - * Constructs a deep copy of {@code source} that contains a given - * {@code Interval} in. Before add it removes from the newly created - * object all intervals that overlap with a given {@code Interval} out. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in interval to add (could be null) - * @param out interval to remove (could be null) - */ - public DynamicInteger(DynamicInteger source, Interval in, Interval out) { - super(source, in, out); - } - - /** - * Constructs a deep copy of {@code source} with additional intervals - * given by {@code List>} in. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in intervals to add (could be null) - */ - public DynamicInteger(DynamicInteger source, List> in) { - super(source, in); - } - - /** - * Constructs a deep copy of {@code source} with additional intervals - * given by {@code List>} in. Before add it removes from the - * newly created object all intervals that overlap with intervals given by - * {@code List>} out. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in intervals to add (could be null) - * @param out intervals to remove (could be null) - */ - public DynamicInteger(DynamicInteger source, List> in, List> out) { - super(source, in, out); - } - - @Override - public Integer getValue(Interval interval, Estimator estimator) { - List values = getValues(interval); - if (values.isEmpty()) - return null; - - switch (estimator) { - case AVERAGE: - if (values.size() == 1) - return values.get(0); - BigInteger total = BigInteger.valueOf(0); - for (int i = 0; i < values.size(); ++i) - total = total.add(BigInteger.valueOf(values.get(i))); - return total.divide(BigInteger.valueOf(values.size())).intValue(); - case MEDIAN: - if (values.size() % 2 == 1) - return values.get(values.size() / 2); - BigInteger bi = BigInteger.valueOf(values.get( - values.size() / 2 - 1)); - bi = bi.add(BigInteger.valueOf(values.get(values.size() / 2))); - return bi.divide(BigInteger.valueOf(2)).intValue(); - case MODE: - Hashtable map = - new Hashtable(); - for (int i = 0; i < values.size(); ++i) { - int prev = 0; - if (map.containsKey(values.get(i).hashCode())) - prev = map.get(values.get(i).hashCode()); - map.put(values.get(i).hashCode(), prev + 1); - } - int max = map.get(values.get(0).hashCode()); - int index = 0; - for (int i = 1; i < values.size(); ++i) - if (max < map.get(values.get(i).hashCode())) { - max = map.get(values.get(i).hashCode()); - index = i; - } - return values.get(index); - case SUM: - BigInteger sum = BigInteger.valueOf(0); - for (int i = 0; i < values.size(); ++i) - sum = sum.add(BigInteger.valueOf(values.get(i))); - return sum.intValue(); - case MIN: - BigInteger minimum = BigInteger.valueOf(values.get(0)); - for (int i = 1; i < values.size(); ++i) - if (minimum.compareTo(BigInteger.valueOf( - values.get(i))) > 0) - minimum = BigInteger.valueOf(values.get(i)); - return minimum.intValue(); - case MAX: - BigInteger maximum = BigInteger.valueOf(values.get(0)); - for (int i = 1; i < values.size(); ++i) - if (maximum.compareTo(BigInteger.valueOf( - values.get(i))) < 0) - maximum = BigInteger.valueOf(values.get(i)); - return maximum.intValue(); - case FIRST: - return values.get(0); - case LAST: - return values.get(values.size() - 1); - default: - throw new IllegalArgumentException("Unknown estimator."); - } - } - - @Override - public Class getUnderlyingType() { - return Integer.class; - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicLong.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicLong.java deleted file mode 100644 index f689695093..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicLong.java +++ /dev/null @@ -1,216 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Cezary Bartosiak -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.type; - -import java.math.BigInteger; -import java.util.Hashtable; -import java.util.List; -import org.gephi.data.attributes.api.Estimator; - -/** - * Represents {@link Long} type which can have got different values in - * different time intervals. - * - * @author Cezary Bartosiak - */ -public final class DynamicLong extends DynamicType { - /** - * Constructs a new {@code DynamicType} instance with no intervals. - */ - public DynamicLong() { - super(); - } - - /** - * Constructs a new {@code DynamicType} instance that contains a given - * {@code Interval} in. - * - * @param in interval to add (could be null) - */ - public DynamicLong(Interval in) { - super(in); - } - - /** - * Constructs a new {@code DynamicType} instance with intervals given by - * {@code List>} in. - * - * @param in intervals to add (could be null) - */ - public DynamicLong(List> in) { - super(in); - } - - /** - * Constructs a deep copy of {@code source}. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - */ - public DynamicLong(DynamicLong source) { - super(source); - } - - /** - * Constructs a deep copy of {@code source} that contains a given - * {@code Interval} in. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in interval to add (could be null) - */ - public DynamicLong(DynamicLong source, Interval in) { - super(source, in); - } - - /** - * Constructs a deep copy of {@code source} that contains a given - * {@code Interval} in. Before add it removes from the newly created - * object all intervals that overlap with a given {@code Interval} out. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in interval to add (could be null) - * @param out interval to remove (could be null) - */ - public DynamicLong(DynamicLong source, Interval in, Interval out) { - super(source, in, out); - } - - /** - * Constructs a deep copy of {@code source} with additional intervals - * given by {@code List>} in. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in intervals to add (could be null) - */ - public DynamicLong(DynamicLong source, List> in) { - super(source, in); - } - - /** - * Constructs a deep copy of {@code source} with additional intervals - * given by {@code List>} in. Before add it removes from the - * newly created object all intervals that overlap with intervals given by - * {@code List>} out. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in intervals to add (could be null) - * @param out intervals to remove (could be null) - */ - public DynamicLong(DynamicLong source, List> in, List> out) { - super(source, in, out); - } - - @Override - public Long getValue(Interval interval, Estimator estimator) { - List values = getValues(interval); - if (values.isEmpty()) - return null; - - switch (estimator) { - case AVERAGE: - if (values.size() == 1) - return values.get(0); - BigInteger total = BigInteger.valueOf(0); - for (int i = 0; i < values.size(); ++i) - total = total.add(BigInteger.valueOf(values.get(i))); - return total.divide(BigInteger.valueOf(values.size())).longValue(); - case MEDIAN: - if (values.size() % 2 == 1) - return values.get(values.size() / 2); - BigInteger bi = BigInteger.valueOf(values.get( - values.size() / 2 - 1)); - bi = bi.add(BigInteger.valueOf(values.get(values.size() / 2))); - return bi.divide(BigInteger.valueOf(2)).longValue(); - case MODE: - Hashtable map = - new Hashtable(); - for (int i = 0; i < values.size(); ++i) { - int prev = 0; - if (map.containsKey(values.get(i).hashCode())) - prev = map.get(values.get(i).hashCode()); - map.put(values.get(i).hashCode(), prev + 1); - } - int max = map.get(values.get(0).hashCode()); - int index = 0; - for (int i = 1; i < values.size(); ++i) - if (max < map.get(values.get(i).hashCode())) { - max = map.get(values.get(i).hashCode()); - index = i; - } - return values.get(index); - case SUM: - BigInteger sum = BigInteger.valueOf(0); - for (int i = 0; i < values.size(); ++i) - sum = sum.add(BigInteger.valueOf(values.get(i))); - return sum.longValue(); - case MIN: - BigInteger minimum = BigInteger.valueOf(values.get(0)); - for (int i = 1; i < values.size(); ++i) - if (minimum.compareTo(BigInteger.valueOf( - values.get(i))) > 0) - minimum = BigInteger.valueOf(values.get(i)); - return minimum.longValue(); - case MAX: - BigInteger maximum = BigInteger.valueOf(values.get(0)); - for (int i = 1; i < values.size(); ++i) - if (maximum.compareTo(BigInteger.valueOf( - values.get(i))) < 0) - maximum = BigInteger.valueOf(values.get(i)); - return maximum.longValue(); - case FIRST: - return values.get(0); - case LAST: - return values.get(values.size() - 1); - default: - throw new IllegalArgumentException("Unknown estimator."); - } - } - - @Override - public Class getUnderlyingType() { - return Long.class; - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicParser.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicParser.java deleted file mode 100644 index cdea72065d..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicParser.java +++ /dev/null @@ -1,345 +0,0 @@ -/* - Copyright 2008-2012 Gephi - Authors : Martin Ε kurla , Mathieu Bastian , Eduardo Ramos - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes.type; - -import java.io.IOException; -import java.io.StringReader; -import java.math.BigDecimal; -import java.math.BigInteger; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import javax.xml.datatype.DatatypeConfigurationException; -import javax.xml.datatype.DatatypeFactory; -import org.gephi.data.attributes.api.AttributeType; - -/** - *

Class for parsing dynamic types with several intervals.

- * - *

- * Examples of valid dynamic intervals are: - *

    - *
  • <(1, 2, v1); [3, 5, v2]>
  • - *
  • [1,2]
  • - *
  • [1,2] (5,6)
  • - *
  • [1,2]; [1.15,2.21, 'literal value " \' ,[]()']
  • - *
  • <[1,2]; [1.15,2.21, "literal value \" ' ,[]()"]>
  • - *
- *

- * - *

The most correct examples are those that include < > and proper commas and semicolons for separation, - * but the parser will be permissive when possible.

- *

Gephi will always format intervals in the correct way.

- * - *

See https://gephi.org/users/supported-graph-formats/spreadsheet for more examples

- * @author Eduardo Ramos - */ -public final class DynamicParser { - - private static final char LOPEN = '('; - private static final char LCLOSE = '['; - private static final char ROPEN = ')'; - private static final char RCLOSE = ']'; - private static final char COMMA = ','; - - /** - * Parses a dynamic type with one or more intervals - * @param type Dynamic type for the result intervals - * @param input Input string to parse - * @return List of parsed intervals, or null if the input equals '' - * @throws IOException Thrown if error while reading input - * @throws ParseException Thronw if the intervals could not be parsed - */ - public static List parseIntervals(AttributeType type, String input) throws IOException, ParseException, IllegalArgumentException { - if (!type.isDynamicType()) { - throw new IllegalArgumentException(String.format("Type %s is not dynamic", type.getTypeString())); - } - - if (input.equalsIgnoreCase("")) { - return null; - } - - List intervals = new ArrayList(); - - StringReader reader = new StringReader(input + ' ');//Add 1 space so reader.skip function always works when necessary (end of string not reached). - - int r; - char c; - while ((r = reader.read()) != -1) { - c = (char) r; - switch (c) { - case LCLOSE: - case LOPEN: - intervals.add(parseInterval(type, reader, c == LOPEN)); - break; - default: - //Ignore other chars outside of intervals - } - } - - if(intervals.isEmpty()){ - throw new IllegalArgumentException("No dynamic intervals could be parsed"); - } - - return intervals; - } - - private static Interval parseInterval(AttributeType type, StringReader reader, boolean lopen) throws IOException, ParseException { - ArrayList values = new ArrayList(); - boolean ropen = true; - - int r; - char c; - while ((r = reader.read()) != -1) { - c = (char) r; - switch (c) { - case RCLOSE: - ropen = false; - case ROPEN: - return buildInterval(type, values, lopen, ropen); - case ' ': - case '\t': - case '\r': - case '\n': - case COMMA: - //Ignore leading whitespace or similar until a value or literal starts: - break; - case '"': - case '\'': - values.add(parseLiteral(reader, c)); - break; - default: - reader.skip(-1);//Go backwards 1 position, for reading start of value - values.add(parseValue(reader)); - } - } - - - return buildInterval(type, values, lopen, ropen); - } - - /** - * Parse literal value until detecting the end of it (quote can be ' or ") - * @param reader Input reader - * @param quote Quote mode that started this literal (' or ") - * @return Parsed value - * @throws IOException - */ - private static String parseLiteral(StringReader reader, char quote) throws IOException { - StringBuilder sb = new StringBuilder(); - boolean escapeEnabled = false; - - int r; - char c; - while ((r = reader.read()) != -1) { - c = (char) r; - if (c == quote) { - if (escapeEnabled) { - sb.append(quote); - escapeEnabled = false; - } else { - return sb.toString(); - } - } else { - switch (c) { - case '\\': - if (escapeEnabled) { - sb.append('\\'); - - escapeEnabled = false; - } else { - escapeEnabled = true; - } - break; - default: - if (escapeEnabled) { - escapeEnabled = false; - } - sb.append(c); - } - } - } - - return sb.toString(); - } - - /** - * Parses a value until end is detected either by a comma or an interval closing character. - * @param reader Input reader - * @return Parsed value - * @throws IOException - */ - private static String parseValue(StringReader reader) throws IOException { - StringBuilder sb = new StringBuilder(); - int r; - char c; - while ((r = reader.read()) != -1) { - c = (char) r; - switch (c) { - case ROPEN: - case RCLOSE: - reader.skip(-1);//Go backwards 1 position, for detecting end of interval - case COMMA: - return sb.toString().trim(); - default: - sb.append(c); - } - } - - return sb.toString().trim(); - } - - private static Interval buildInterval(AttributeType type, ArrayList values, boolean lopen, boolean ropen) throws ParseException { - double low, high; - Object value; - if (values.size() == 2) { - //Time interval or null value: - value = null; - } else if (values.size() == 3) { - //Interval with value: - switch (type) { - case DYNAMIC_BYTE: - value = new Byte(AttributeType.removeDecimalDigitsFromString(values.get(2))); - break; - case DYNAMIC_SHORT: - value = new Short(AttributeType.removeDecimalDigitsFromString(values.get(2))); - break; - case DYNAMIC_INT: - value = new Integer(AttributeType.removeDecimalDigitsFromString(values.get(2))); - break; - case DYNAMIC_LONG: - value = new Long(AttributeType.removeDecimalDigitsFromString(values.get(2))); - break; - case DYNAMIC_FLOAT: - value = new Float(infinityIgnoreCase(values.get(2))); - break; - case DYNAMIC_DOUBLE: - value = new Double(infinityIgnoreCase(values.get(2))); - break; - case DYNAMIC_BOOLEAN: - value = Boolean.valueOf(values.get(2)); - break; - case DYNAMIC_CHAR: - value = new Character(values.get(2).charAt(0)); - break; - case DYNAMIC_STRING: - value = values.get(2); - break; - case DYNAMIC_BIGINTEGER: - value = new BigInteger(AttributeType.removeDecimalDigitsFromString(values.get(2))); - break; - case DYNAMIC_BIGDECIMAL: - value = new BigDecimal(values.get(2)); - break; - case TIME_INTERVAL: - default: - value = null; - break; - } - } else { - //Unknown: - throw new IllegalArgumentException("Unrecognized type of interval = " + values); - } - - low = parseTime(values.get(0)); - high = parseTime(values.get(1)); - - return new Interval(low, high, lopen, ropen, value); - } - - //For date parsing: - private static final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - private static DatatypeFactory dateFactory; - - static { - try { - dateFactory = DatatypeFactory.newInstance(); - } catch (DatatypeConfigurationException ex) { - } - } - - //Throws exception when a date can't be parsed - public static double getDoubleFromXMLDateString(String str) throws ParseException { - try { - return dateFactory.newXMLGregorianCalendar(str.length() > 23 ? str.substring(0, 23) : str). - toGregorianCalendar().getTimeInMillis(); - } catch (IllegalArgumentException ex) { - //Try simple format - Date date = dateFormat.parse(str); - return date.getTime(); - } - } - - public static double parseTime(String time) throws ParseException { - double value; - try { - //Try first to parse as a single double: - value = Double.parseDouble(infinityIgnoreCase(time)); - if(Double.isNaN(value)){ - throw new IllegalArgumentException("NaN is not allowed as an interval bound"); - } - } catch (Exception ex) { - //Try to parse as date instead - value = getDoubleFromXMLDateString(time); - } - - return value; - } - - /** - * Method for allowing inputs such as "infinity" when parsing decimal numbers - * @param value Input String - * @return Input String with fixed "Infinity" syntax if necessary. - */ - private static String infinityIgnoreCase(String value){ - if(value.equalsIgnoreCase("Infinity")){ - return "Infinity"; - } - if(value.equalsIgnoreCase("-Infinity")){ - return "-Infinity"; - } - - return value; - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicShort.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicShort.java deleted file mode 100644 index 60b93b38c7..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicShort.java +++ /dev/null @@ -1,216 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Cezary Bartosiak -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.type; - -import java.math.BigInteger; -import java.util.Hashtable; -import java.util.List; -import org.gephi.data.attributes.api.Estimator; - -/** - * Represents {@link Short} type which can have got different values in - * different time intervals. - * - * @author Cezary Bartosiak - */ -public final class DynamicShort extends DynamicType { - /** - * Constructs a new {@code DynamicType} instance with no intervals. - */ - public DynamicShort() { - super(); - } - - /** - * Constructs a new {@code DynamicType} instance that contains a given - * {@code Interval} in. - * - * @param in interval to add (could be null) - */ - public DynamicShort(Interval in) { - super(in); - } - - /** - * Constructs a new {@code DynamicType} instance with intervals given by - * {@code List>} in. - * - * @param in intervals to add (could be null) - */ - public DynamicShort(List> in) { - super(in); - } - - /** - * Constructs a deep copy of {@code source}. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - */ - public DynamicShort(DynamicShort source) { - super(source); - } - - /** - * Constructs a deep copy of {@code source} that contains a given - * {@code Interval} in. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in interval to add (could be null) - */ - public DynamicShort(DynamicShort source, Interval in) { - super(source, in); - } - - /** - * Constructs a deep copy of {@code source} that contains a given - * {@code Interval} in. Before add it removes from the newly created - * object all intervals that overlap with a given {@code Interval} out. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in interval to add (could be null) - * @param out interval to remove (could be null) - */ - public DynamicShort(DynamicShort source, Interval in, Interval out) { - super(source, in, out); - } - - /** - * Constructs a deep copy of {@code source} with additional intervals - * given by {@code List>} in. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in intervals to add (could be null) - */ - public DynamicShort(DynamicShort source, List> in) { - super(source, in); - } - - /** - * Constructs a deep copy of {@code source} with additional intervals - * given by {@code List>} in. Before add it removes from the - * newly created object all intervals that overlap with intervals given by - * {@code List>} out. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in intervals to add (could be null) - * @param out intervals to remove (could be null) - */ - public DynamicShort(DynamicShort source, List> in, List> out) { - super(source, in, out); - } - - @Override - public Short getValue(Interval interval, Estimator estimator) { - List values = getValues(interval); - if (values.isEmpty()) - return null; - - switch (estimator) { - case AVERAGE: - if (values.size() == 1) - return values.get(0); - BigInteger total = BigInteger.valueOf(0); - for (int i = 0; i < values.size(); ++i) - total = total.add(BigInteger.valueOf(values.get(i))); - return total.divide(BigInteger.valueOf(values.size())).shortValue(); - case MEDIAN: - if (values.size() % 2 == 1) - return values.get(values.size() / 2); - BigInteger bi = BigInteger.valueOf(values.get( - values.size() / 2 - 1)); - bi = bi.add(BigInteger.valueOf(values.get(values.size() / 2))); - return bi.divide(BigInteger.valueOf(2)).shortValue(); - case MODE: - Hashtable map = - new Hashtable(); - for (int i = 0; i < values.size(); ++i) { - int prev = 0; - if (map.containsKey(values.get(i).hashCode())) - prev = map.get(values.get(i).hashCode()); - map.put(values.get(i).hashCode(), prev + 1); - } - int max = map.get(values.get(0).hashCode()); - int index = 0; - for (int i = 1; i < values.size(); ++i) - if (max < map.get(values.get(i).hashCode())) { - max = map.get(values.get(i).hashCode()); - index = i; - } - return values.get(index); - case SUM: - BigInteger sum = BigInteger.valueOf(0); - for (int i = 0; i < values.size(); ++i) - sum = sum.add(BigInteger.valueOf(values.get(i))); - return sum.shortValue(); - case MIN: - BigInteger minimum = BigInteger.valueOf(values.get(0)); - for (int i = 1; i < values.size(); ++i) - if (minimum.compareTo(BigInteger.valueOf( - values.get(i))) > 0) - minimum = BigInteger.valueOf(values.get(i)); - return minimum.shortValue(); - case MAX: - BigInteger maximum = BigInteger.valueOf(values.get(0)); - for (int i = 1; i < values.size(); ++i) - if (maximum.compareTo(BigInteger.valueOf( - values.get(i))) < 0) - maximum = BigInteger.valueOf(values.get(i)); - return maximum.shortValue(); - case FIRST: - return values.get(0); - case LAST: - return values.get(values.size() - 1); - default: - throw new IllegalArgumentException("Unknown estimator."); - } - } - - @Override - public Class getUnderlyingType() { - return Short.class; - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicString.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicString.java deleted file mode 100644 index 76b24f9388..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicString.java +++ /dev/null @@ -1,204 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Cezary Bartosiak -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.type; - -import java.util.Hashtable; -import java.util.List; -import org.gephi.data.attributes.api.Estimator; - -/** - * Represents {@link String} type which can have got different values in - * different time intervals. - * - * @author Cezary Bartosiak - */ -public final class DynamicString extends DynamicType { - /** - * Constructs a new {@code DynamicType} instance with no intervals. - */ - public DynamicString() { - super(); - } - - /** - * Constructs a new {@code DynamicType} instance that contains a given - * {@code Interval} in. - * - * @param in interval to add (could be null) - */ - public DynamicString(Interval in) { - super(in); - } - - /** - * Constructs a new {@code DynamicType} instance with intervals given by - * {@code List>} in. - * - * @param in intervals to add (could be null) - */ - public DynamicString(List> in) { - super(in); - } - - /** - * Constructs a deep copy of {@code source}. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - */ - public DynamicString(DynamicString source) { - super(source); - } - - /** - * Constructs a deep copy of {@code source} that contains a given - * {@code Interval} in. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in interval to add (could be null) - */ - public DynamicString(DynamicString source, Interval in) { - super(source, in); - } - - /** - * Constructs a deep copy of {@code source} that contains a given - * {@code Interval} in. Before add it removes from the newly created - * object all intervals that overlap with a given {@code Interval} out. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in interval to add (could be null) - * @param out interval to remove (could be null) - */ - public DynamicString(DynamicString source, Interval in, Interval out) { - super(source, in, out); - } - - /** - * Constructs a deep copy of {@code source} with additional intervals - * given by {@code List>} in. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in intervals to add (could be null) - */ - public DynamicString(DynamicString source, List> in) { - super(source, in); - } - - /** - * Constructs a deep copy of {@code source} with additional intervals - * given by {@code List>} in. Before add it removes from the - * newly created object all intervals that overlap with intervals given by - * {@code List>} out. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in intervals to add (could be null) - * @param out intervals to remove (could be null) - */ - public DynamicString(DynamicString source, List> in, List> out) { - super(source, in, out); - } - - @Override - public String getValue(Interval interval, Estimator estimator) { - List values = getValues(interval); - if (values.isEmpty()) - return null; - - switch (estimator) { - case AVERAGE: - throw new UnsupportedOperationException( - "Not supported estimator"); - case MEDIAN: - if (values.size() % 2 == 1) - return values.get(values.size() / 2); - return values.get(values.size() / 2 - 1); - case MODE: - Hashtable map = - new Hashtable(); - for (int i = 0; i < values.size(); ++i) { - int prev = 0; - if (map.containsKey(values.get(i).hashCode())) - prev = map.get(values.get(i).hashCode()); - map.put(values.get(i).hashCode(), prev + 1); - } - int max = map.get(values.get(0).hashCode()); - int index = 0; - for (int i = 1; i < values.size(); ++i) - if (max < map.get(values.get(i).hashCode())) { - max = map.get(values.get(i).hashCode()); - index = i; - } - return values.get(index); - case SUM: - throw new UnsupportedOperationException( - "Not supported estimator"); - case MIN: - String minimum = values.get(0); - for (int i = 1; i < values.size(); ++i) - if (minimum.compareTo(values.get(i)) > 0) - minimum = values.get(i); - return minimum; - case MAX: - String maximum = values.get(0); - for (int i = 1; i < values.size(); ++i) - if (maximum.compareTo(values.get(i)) < 0) - maximum = values.get(i); - return maximum; - case FIRST: - return values.get(0); - case LAST: - return values.get(values.size() - 1); - default: - throw new IllegalArgumentException("Unknown estimator."); - } - } - - @Override - public Class getUnderlyingType() { - return String.class; - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicType.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicType.java deleted file mode 100644 index 42f416d03f..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/DynamicType.java +++ /dev/null @@ -1,499 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Cezary Bartosiak -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.type; - -import java.util.ArrayList; -import java.util.List; -import org.gephi.data.attributes.api.Estimator; - -/** - * A special type which provides methods of getting/setting values of any time - * interval. It is internally implemented using Interval Tree for efficiency. - * - * @author Cezary Bartosiak - * - * @param type of data - */ -public abstract class DynamicType { - protected IntervalTree intervalTree; - - /** - * Constructs a new {@code DynamicType} instance with no intervals. - */ - public DynamicType() { - intervalTree = new IntervalTree(); - } - - /** - * Constructs a new {@code DynamicType} instance that contains a given - * {@code Interval} in. - * - * @param in interval to add (could be null) - */ - public DynamicType(Interval in) { - this(); - if (in != null) - intervalTree.insert(in); - } - - /** - * Constructs a new {@code DynamicType} instance with intervals given by - * {@code List>} in. - * - * @param in intervals to add (could be null) - */ - public DynamicType(List> in) { - this(); - if (in != null) - for (Interval interval : in) - intervalTree.insert(interval); - } - - /** - * Constructs a deep copy of {@code source}. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - */ - public DynamicType(DynamicType source) { - if (source == null) - intervalTree = new IntervalTree(); - else intervalTree = new IntervalTree(source.intervalTree); - } - - /** - * Constructs a deep copy of {@code source} that contains a given - * {@code Interval} in. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in interval to add (could be null) - */ - public DynamicType(DynamicType source, Interval in) { - this(source); - if (in != null) - intervalTree.insert(in); - } - - /** - * Constructs a deep copy of {@code source} that contains a given - * {@code Interval} in. Before add it removes from the newly created - * object all intervals that overlap with a given {@code Interval} out. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in interval to add (could be null) - * @param out interval to remove (could be null) - */ - public DynamicType(DynamicType source, Interval in, Interval out) { - this(source); - if (out != null) - intervalTree.delete(out); - if (in != null) - intervalTree.insert(in); - } - - /** - * Constructs a deep copy of {@code source} with additional intervals - * given by {@code List>} in. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in intervals to add (could be null) - */ - public DynamicType(DynamicType source, List> in) { - this(source); - if (in != null) - for (Interval interval : in) - intervalTree.insert(interval); - } - - /** - * Constructs a deep copy of {@code source} with additional intervals - * given by {@code List>} in. Before add it removes from the - * newly created object all intervals that overlap with intervals given by - * {@code List>} out. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in intervals to add (could be null) - * @param out intervals to remove (could be null) - */ - public DynamicType(DynamicType source, List> in, List> out) { - this(source); - if (out != null) - for (Interval interval : out) - intervalTree.delete(interval); - if (in != null) - for (Interval interval : in) - intervalTree.insert(interval); - } - - /** - * Returns the leftmost point or {@code Double.NEGATIVE_INFINITY} in case - * of no intervals. - * - * @return the leftmost point. - */ - public double getLow() { - return intervalTree.getLow(); - } - - /** - * Returns the rightmost point or {@code Double.POSITIVE_INFINITY} in case - * of no intervals. - * - * @return the rightmost point. - */ - public double getHigh() { - return intervalTree.getHigh(); - } - - /** - * Indicates if the leftmost point is excluded. - * - * @return {@code true} if the leftmost point is excluded, - * {@code false} otherwise. - */ - public boolean isLowExcluded() { - return intervalTree.isLowExcluded(); - } - - /** - * Indicates if the rightmost point is excluded. - * - * @return {@code true} if the rightmost point is excluded, - * {@code false} otherwise. - */ - public boolean isHighExcluded() { - return intervalTree.isHighExcluded(); - } - - /** - * Indicates if a given time interval overlaps with any interval of this instance. - * - * @param interval a given time interval - * - * @return {@code true} a given time interval overlaps with any interval of this - * instance, otherwise {@code false}. - */ - public boolean isInRange(Interval interval) { - return intervalTree.overlapsWith(interval); - } - - /** - * Indicates if [{@code low}, {@code high}] interval overlaps with any interval of this instance. - * - * @param low the left endpoint - * @param high the right endpoint - * - * @return {@code true} a given time interval overlaps with any interval of this - * instance, otherwise {@code false}. - * - * @throws IllegalArgumentException if {@code low} > {@code high}. - */ - public boolean isInRange(double low, double high) { - if (low > high) - throw new IllegalArgumentException( - "The left endpoint of the interval must be less than " + - "the right endpoint."); - - return intervalTree.overlapsWith(new Interval(low, high)); - } - - /** - * Returns the estimated value of a set of values whose time intervals - * overlap with a [{@code -inf}, {@code inf}] time interval. - * {@code Estimator.FIRST} is used. - * - * @return the estimated value of a set of values whose time intervals - * overlap with a [{@code -inf}, {@code inf}] time interval or - * {@code null} if there are no intervals. - * - * @see Estimator - */ - public T getValue() { - return getValue(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); - } - - /** - * Returns the estimated value of a set of values whose time intervals - * overlap with a given time interval. - * {@code Estimator.FIRST} is used. - * - * @param interval a given time interval - * - * @return the estimated value of a set of values whose time intervals - * overlap with a given time interval or - * {@code null} if there are no intervals. - * - * @see Estimator - */ - public T getValue(Interval interval) { - return getValue(interval, Estimator.FIRST); - } - - /** - * Returns the estimated value of a set of values whose time intervals - * overlap with a [{@code low}, {@code high}] time interval. - * {@code Estimator.FIRST} is used. - * - * @param low the left endpoint - * @param high the right endpoint - * - * @return the estimated value of a set of values whose time intervals - * overlap with a [{@code low}, {@code high}] time interval or - * {@code null} if there are no intervals. - * - * @throws IllegalArgumentException if {@code low} > {@code high}. - * - * @see Estimator - */ - public T getValue(double low, double high) { - return getValue(low, high, Estimator.FIRST); - } - - /** - * Returns the estimated value of a set of values whose time intervals - * overlap with a [{@code -inf}, {@code inf}] time interval. - * - * @param estimator used to estimate the result - * - * @return the estimated value of a set of values whose time intervals - * overlap with a [{@code -inf}, {@code inf}] time interval or - * {@code null} if there are no intervals. - * - * @throws UnsupportedOperationException if type {@code T} doesn't support - * the given {@code estimator}. - * - * @see Estimator - */ - public T getValue(Estimator estimator) { - return getValue(Double.NEGATIVE_INFINITY, - Double.POSITIVE_INFINITY, - estimator); - } - - /** - * Returns the estimated value of a set of values whose time intervals - * overlap with a given time interval. - * - * @param interval a given time interval - * @param estimator used to estimate the result - * - * @return the estimated value of a set of values whose time intervals - * overlap with a given time interval or - * {@code null} if there are no intervals. - * - * @throws UnsupportedOperationException if type {@code T} doesn't support - * the given {@code estimator}. - * - * @see Estimator - */ - public abstract T getValue(Interval interval, Estimator estimator); - - /** - * Returns the estimated value of a set of values whose time intervals - * overlap with a [{@code low}, {@code high}] time interval. - * - * @param low the left endpoint - * @param high the right endpoint - * @param estimator used to estimate the result - * - * @return the estimated value of a set of values whose time intervals - * overlap with a [{@code low}, {@code high}] time interval or - * {@code null} if there are no intervals. - * - * @throws IllegalArgumentException if {@code low} > {@code high}. - * @throws UnsupportedOperationException if type {@code T} doesn't support - * the given {@code estimator}. - * - * @see Estimator - */ - public T getValue(double low, double high, Estimator estimator) { - if (low > high) - throw new IllegalArgumentException( - "The left endpoint of the interval must be less than " + - "the right endpoint."); - - return getValue(new Interval(low, high, false, false), estimator); - } - - /** - * Returns a list of all values stored in this instance. - * - * @return a list of all values stored in this instance. - */ - public List getValues() { - return getValues(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); - } - - /** - * Returns a list of values whose time intervals overlap with a - * [{@code low}, {@code high}] time interval. - * - * @param low the left endpoint - * @param high the right endpoint - * - * @return a list of values whose time intervals overlap with a - * [{@code low}, {@code high}] time interval. - * - * @throws IllegalArgumentException if {@code low} > {@code high}. - */ - public List getValues(double low, double high) { - return getValues(new Interval(low, high)); - } - - /** - * Returns a list of values whose time intervals overlap with a - * given time interval. - * - * @param interval a given time interval - * - * @return a list of values whose time intervals overlap with a - * given time interval. - */ - public List getValues(Interval interval) { - List result = new ArrayList(); - for (Interval i : intervalTree.search(interval)) - result.add(i.getValue()); - return result; - } - - /** - * Returns a list of all intervals. - * - * @return a list of intervals which overlap with a given time interval. - */ - public List> getIntervals() { - return intervalTree.getIntervals(); - } - - /** - * Returns a list of intervals which overlap with a given time interval. - * - * @param interval a given time interval - * - * @return a list of intervals which overlap with a given time interval. - */ - public List> getIntervals(Interval interval) { - return intervalTree.search(interval); - } - - /** - * Returns a list of intervals which overlap with a - * [{@code low}, {@code high}] time interval. - * - * @param low the left endpoint - * @param high the right endpoint - * - * @return a list of intervals which overlap with a - * [{@code low}, {@code high}] time interval. - * - * @throws IllegalArgumentException if {@code low} > {@code high}. - */ - public List> getIntervals(double low, double high) { - return intervalTree.search(low, high); - } - - /** - * Returns the underlying type {@code T}. - * - * @return the underlying type {@code T}. - */ - public abstract Class getUnderlyingType(); - - /** - * Compares this instance with the specified object for equality. - * - *

Note that two {@code DynamicType} instances are equal if they have got - * the same type {@code T} and their interval trees are equal. - * - * @param obj object to which this instance is to be compared - * - * @return {@code true} if and only if the specified {@code Object} is a - * {@code DynamicType} which has the same type {@code T} and an - * equal interval tree. - * - * @see #hashCode - */ - @Override - public boolean equals(Object obj) { - if (obj != null && obj.getClass().equals(this.getClass()) && - ((DynamicType)obj).intervalTree.equals(intervalTree)) - return true; - return false; - } - - /** - * Returns a hashcode of this instance. - * - * @return a hashcode of this instance. - */ - @Override - public int hashCode() { - return intervalTree.hashCode(); - } - - /** - * Creates a string representation of all the intervals with their values. - * - * @param timesAsDoubles indicates if times should be shown as doubles or dates - * - * @return a string representation with times as doubles or dates. - */ - public String toString(boolean timesAsDoubles) { - return intervalTree.toString(timesAsDoubles); - } - - /** - * Returns a string representation of this instance in a format - * {@code <[low, high, value], ..., [low, high, value]>}. Intervals are - * ordered by its left endpoint. - * - * @return a string representation of this instance. - */ - @Override - public String toString() { - return intervalTree.toString(); - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/FloatList.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/FloatList.java deleted file mode 100644 index 2e88d2acc9..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/FloatList.java +++ /dev/null @@ -1,67 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Martin Ε kurla -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.type; - -/** - * Complex type that define a list of Float items. Can be created from a float - * array, from a Float array or from single string using either given or default separators. - * - * @author Martin Ε kurla - */ -public final class FloatList extends NumberList { - - public FloatList(float[] primitiveFloatArray) { - super(TypeConvertor.convertPrimitiveToWrapperArray(primitiveFloatArray)); - } - - public FloatList(Float[] wrapperFloatArray) { - super(wrapperFloatArray); - } - - public FloatList(String input) { - this(input, AbstractList.DEFAULT_SEPARATOR); - } - - public FloatList(String input, String separator) { - super(input, separator, Float.class); - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/IntegerList.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/IntegerList.java deleted file mode 100644 index 16a78ef853..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/IntegerList.java +++ /dev/null @@ -1,67 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Martin Ε kurla -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.type; - -/** - * Complex type that define a list of Integer items. Can be created from a int - * array, from a Integer array or from single string using either given or default separators. - * - * @author Martin Ε kurla - */ -public final class IntegerList extends NumberList { - - public IntegerList(int[] primitiveIntArray) { - super(TypeConvertor.convertPrimitiveToWrapperArray(primitiveIntArray)); - } - - public IntegerList(Integer[] wrapperIntArray) { - super(wrapperIntArray); - } - - public IntegerList(String input) { - this(input, AbstractList.DEFAULT_SEPARATOR); - } - - public IntegerList(String input, String separator) { - super(input, separator, Integer.class); - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/Interval.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/Interval.java deleted file mode 100644 index d4731915a3..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/Interval.java +++ /dev/null @@ -1,319 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Cezary Bartosiak - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes.type; - -import org.gephi.data.attributes.api.AttributeUtils; - -/** - * This class represents an interval with some value. - * - * @author Cezary Bartosiak - * - * @param type of data - */ -public final class Interval implements Comparable { - - private double low; // the left endpoint - private double high; // the right endpoint - private boolean lopen; // indicates if the left endpoint is excluded - private boolean ropen; // indicates if the right endpoint is excluded - private T value; // the value stored in this interval - - /** - * Constructs a new interval instance - * - *

Note that {@code value} cannot be null if you want use this {@code interval} as a value storage. If it is null some estimators could not work and generate exceptions. - * - * @param interval the interval to copy the values from - * @param value the value stored in this interval - * - * @throws IllegalArgumentException if {@code low} > {@code high}. - */ - public Interval(Interval interval, T value) { - this.low = interval.low; - this.high = interval.high; - this.lopen = interval.lopen; - this.ropen = interval.ropen; - this.value = value; - } - - /** - * Constructs a new interval instance. - * - *

Note that {@code value} cannot be null if you want use this {@code interval} as a value storage. If it is null some estimators could not work and generate exceptions. - * - * @param low the left endpoint - * @param high the right endpoint - * @param lopen indicates if the left endpoint is excluded (true in this case) - * @param ropen indicates if the right endpoint is excluded (true in this case) - * @param value the value stored in this interval - * - * @throws IllegalArgumentException if {@code low} > {@code high}. - */ - public Interval(double low, double high, boolean lopen, boolean ropen, T value) { - if (low > high) { - throw new IllegalArgumentException( - "The left endpoint of the interval must be less than " - + "the right endpoint."); - } - - this.low = low; - this.high = high; - this.lopen = lopen; - this.ropen = ropen; - this.value = value; - } - - /** - * Constructs a new interval instance with no value. - * - * @param low the left endpoint - * @param high the right endpoint - * @param lopen indicates if the left endpoint is excluded (true in this case) - * @param ropen indicates if the right endpoint is excluded (true in this case) - * - * @throws IllegalArgumentException if {@code low} > {@code high}. - */ - public Interval(double low, double high, boolean lopen, boolean ropen) { - this(low, high, lopen, ropen, null); - } - - /** - * Constructs a new interval instance with left and right endpoints included by default. - * - *

Note that {@code value} cannot be null if you want use this {@code interval} as a value storage. If it is null some estimators could not work and generate exceptions. - * - * @param low the left endpoint - * @param high the right endpoint - * @param value the value stored in this interval - * - * @throws IllegalArgumentException if {@code low} > {@code high}. - */ - public Interval(double low, double high, T value) { - this(low, high, false, false, value); - } - - /** - * Constructs a new interval instance with no value and left and right endpoints included by default. - * - * @param low the left endpoint - * @param high the right endpoint - * - * @throws IllegalArgumentException if {@code low} > {@code high}. - */ - public Interval(double low, double high) { - this(low, high, false, false, null); - } - - /** - * Compares this interval with the specified interval for order. - * - *

Any two intervals i and i' satisfy the {@code interval - * trichotomy}; that is, exactly one of the following three properties holds:

  1. i and i' overlap; - * - *
  2. i is to the left of i' (i.high < i'.low); - * - *
  3. i is to the right of i' (i'.high < i.low).
- * - *

Note that if two intervals are equal ({@code i.low = i'.low} and {@code i.high = i'.high}), they overlap as well. But if they simply overlap (for instance {@code i.low < i'.low} and {@code i.high > - * i'.high}) they aren't equal. Remember that if two intervals are equal, they have got the same bounds excluded or included. - * - * @param interval the interval to be compared - * - * @return a negative integer, zero, or a positive integer as this interval is to the left of, overlaps with, or is to the right of the specified interval. - * - * @throws NullPointerException if {@code interval} is null. - */ - public int compareTo(Interval interval) { - if (interval == null) { - throw new NullPointerException("Interval cannot be null."); - } - - if (high < interval.low || high <= interval.low && (ropen || interval.lopen)) { - return -1; - } - if (interval.high < low || interval.high <= low && (interval.ropen || lopen)) { - return 1; - } - return 0; - } - - /** - * Returns the left endpoint. - * - * @return the left endpoint. - */ - public double getLow() { - return low; - } - - /** - * Returns the right endpoint. - * - * @return the right endpoint. - */ - public double getHigh() { - return high; - } - - /** - * Indicates if the left endpoint is excluded. - * - * @return {@code true} if the left endpoint is excluded, {@code false} otherwise. - */ - public boolean isLowExcluded() { - return lopen; - } - - /** - * Indicates if the right endpoint is excluded. - * - * @return {@code true} if the right endpoint is excluded, {@code false} otherwise. - */ - public boolean isHighExcluded() { - return ropen; - } - - /** - * Returns the value stored in this interval. - * - * @return the value stored in this interval. - */ - public T getValue() { - return value; - } - - /** - * Compares this interval with the specified object for equality. - * - *

Note that two intervals are equal if {@code i.low = i'.low} and {@code i.high = i'.high} and they have got the bounds excluded/included. - * - * @param obj object to which this interval is to be compared - * - * @return {@code true} if and only if the specified {@code Object} is a {@code Interval} whose low and high are equal to this {@code Interval's}. - * - * @see #compareTo(org.gephi.data.attributes.type.Interval) - * @see #hashCode - */ - @Override - public boolean equals(Object obj) { - if (obj != null && obj.getClass().equals(this.getClass())) { - Interval interval = (Interval) obj; - if (low == interval.low && high == interval.high - && lopen == interval.lopen && ropen == interval.ropen) { - return true; - } - } - return false; - } - - @Override - public int hashCode() { - int hash = 7; - hash = 97 * hash + (int) (Double.doubleToLongBits(this.low) ^ (Double.doubleToLongBits(this.low) >>> 32)); - hash = 97 * hash + (int) (Double.doubleToLongBits(this.high) ^ (Double.doubleToLongBits(this.high) >>> 32)); - hash = 97 * hash + (this.lopen ? 1 : 0); - hash = 97 * hash + (this.ropen ? 1 : 0); - return hash; - } - - /** - * @param value String value - * @return True if the string contains special characters for dynamic intervals syntax - */ - public static boolean containsSpecialCharacters(String value) { - for (Character c : ";,()[]\"'".toCharArray()) { - if (value.indexOf(c) != -1) { - return true; - } - } - return false; - } - - /** - * Creates a string representation of the interval with its value. - * - * @param timesAsDoubles indicates if times should be shown as doubles or dates - * - * @return a string representation with times as doubles or dates. - */ - public String toString(boolean timesAsDoubles) { - StringBuilder sb = new StringBuilder(); - sb.append(lopen ? '(' : '['); - if (timesAsDoubles) { - sb.append(low); - sb.append(", "); - sb.append(high); - } else { - sb.append(AttributeUtils.getXMLDateStringFromDouble(low)); - sb.append(", "); - sb.append(AttributeUtils.getXMLDateStringFromDouble(high)); - } - if (value != null) { - sb.append(", "); - String stringValue = value.toString(); - if (containsSpecialCharacters(stringValue) || stringValue.trim().isEmpty()) { - sb.append('"'); - sb.append(stringValue.replace("\\", "\\\\").replace("\"", "\\\"")); - sb.append('"'); - } else { - sb.append(stringValue); - } - } - sb.append(ropen ? ')' : ']'); - - return sb.toString(); - } - - /** - * Returns a string representation of this interval in one of the formats:

  1. {@code [low, high, value]}
  2. {@code (low, high, value]}
  3. {@code [low, high, value)}
  4. - * {@code (low, high, value)}
- * - *

Times are always shown as doubles

- * - * @return a string representation of this interval. - */ - @Override - public String toString() { - return toString(true); - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/IntervalTree.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/IntervalTree.java deleted file mode 100644 index 65e06e0af6..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/IntervalTree.java +++ /dev/null @@ -1,706 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Cezary Bartosiak -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.type; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -/** - * It is essentially a map from intervals to object which can be queried for - * {@code Interval} instances associated with a particular interval of time. - * - *

Insertion can be performed in O(lg n) time, where n - * is the number of nodes. All intervals in a tree that overlap some interval - * i can be listed in O(min(n, k lg n) time, - * where k is the number of intervals in the output list. Thus search and - * deletion can be performed in this time. - * - *

The space consumption is O(n). - * - *

Note that this implementation doesn't allow intervals to be duplicated. - * - *

References: - *

    - *
  • Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest, and Clifford Stein. - * Introduction to Algorithms, Second Edition. MIT, 2001. ISBN 83-204-2879-3 - *
- * - * @author Cezary Bartosiak - * - * @param type of data - */ -public final class IntervalTree { - private Node nil; // the sentinel node - private Node root; // the root of this interval tree - - /** - * Constructs an empty {@code IntervalTree}. - */ - public IntervalTree() { - nil = new Node(); - nil.left = nil.right = nil.p = nil; - root = nil; - } - - /** - * Constructs a copy of the given {@code IntervalTree}. - * - * @param intervalTree a copied {@code IntervalTree} - */ - public IntervalTree(IntervalTree intervalTree) { - this(); - copy(intervalTree.root.left, intervalTree.nil); - } - - private void copy(Node x, Node nil) { - if (x != nil) { - copy(x.left, nil); - insert(x.i); - copy(x.right, nil); - } - } - - private boolean compareLow(Interval a, Interval b) { - if (a.getLow() < b.getLow() || a.getLow() == b.getLow() && - (!a.isLowExcluded() || b.isHighExcluded())) - return true; - return false; - } - - /** - * Inserts the {@code interval} into this {@code IntervalTree}. - * - * @param interval an interval to be inserted - * - * @throws NullPointerException if {@code interval} is null. - */ - public void insert(Interval interval) { - if (interval == null) - throw new NullPointerException("Interval cannot be null."); - - insert(new Node(interval)); - } - - private void insert(Node z) { - z.left = z.right = nil; - - Node y = root; - Node x = root.left; - while (x != nil) { - y = x; - if (compareLow(z.i, y.i)) - x = x.left; - else x = x.right; - y.max = Math.max(z.max, y.max); - if (y.p == root) - root.max = y.max; - } - z.p = y; - if (y == root) - root.max = z.max; - if (y == root || compareLow(z.i, y.i)) - y.left = z; - else y.right = z; - insertFixup(z); - } - - private void insertFixup(Node z) { - Node y = nil; - - z.color = RED; - while (z.p.color == RED) - if (z.p == z.p.p.left) { - y = z.p.p.right; - if (y.color == RED) { - z.p.color = BLACK; - y.color = BLACK; - z.p.p.color = RED; - z = z.p.p; - } - else { - if (z == z.p.right) { - z = z.p; - leftRotate(z); - } - z.p.color = BLACK; - z.p.p.color = RED; - rightRotate(z.p.p); - } - } - else { - y = z.p.p.left; - if (y.color == RED) { - z.p.color = BLACK; - y.color = BLACK; - z.p.p.color = RED; - z = z.p.p; - } - else { - if (z == z.p.left) { - z = z.p; - rightRotate(z); - } - z.p.color = BLACK; - z.p.p.color = RED; - leftRotate(z.p.p); - } - } - root.left.color = BLACK; - } - - /** - * Removes all intervals from this {@code IntervalTree} that overlap with - * the given {@code interval}. - * - * @param interval determines which intervals should be removed - * - * @throws NullPointerException if {@code interval} is null. - */ - public void delete(Interval interval) { - if (interval == null) - throw new NullPointerException("Interval cannot be null."); - - for (Node n : searchNodes(interval)) - delete(n); - } - - private void delete(Node z) { - z.max = Double.NEGATIVE_INFINITY; - for (Node i = z.p; i != root; i = i.p) { - i.max = Math.max(i.left.max, i.right.max); - if (i.p == root) - root.max = i.max; - } - - Node y; - Node x; - - if (z.left == nil || z.right == nil) - y = z; - else y = succesor(z); - if (y.left == nil) - x = y.right; - else x = y.left; - x.p = y.p; - if (root == x.p) - root.left = x; - else if (y == y.p.left) - y.p.left = x; - else y.p.right = x; - if (y != z) { - if (y.color == BLACK) - deleteFixup(x); - - y.left = z.left; - y.right = z.right; - y.p = z.p; - y.color = z.color; - z.left.p = z.right.p = y; - if (z == z.p.left) - z.p.left = y; - else z.p.right = y; - } - else if (y.color == BLACK) - deleteFixup(x); - } - - private void deleteFixup(Node x) { - while (x != root.left && x.color == BLACK) - if (x == x.p.left) { - Node w = x.p.right; - if (w.color == RED) { - w.color = BLACK; - x.p.color = RED; - leftRotate(x.p); - w = x.p.right; - } - if (w.left.color == BLACK && w.right.color == BLACK) { - w.color = RED; - x = x.p; - } - else { - if (w.right.color == BLACK) { - w.left.color = BLACK; - w.color = RED; - rightRotate(w); - w = x.p.right; - } - w.color = x.p.color; - x.p.color = BLACK; - w.right.color = BLACK; - leftRotate(x.p); - x = root.left; - } - } - else { - Node w = x.p.left; - if (w.color == RED) { - w.color = BLACK; - x.p.color = RED; - rightRotate(x.p); - w = x.p.left; - } - if (w.right.color == BLACK && w.left.color == BLACK) { - w.color = RED; - x = x.p; - } - else { - if (w.left.color == BLACK) { - w.right.color = BLACK; - w.color = RED; - leftRotate(w); - w = x.p.left; - } - w.color = x.p.color; - x.p.color = BLACK; - w.left.color = BLACK; - rightRotate(x.p); - x = root.left; - } - } - x.color = BLACK; - } - - private void leftRotate(Node x) { - Node y = x.right; - - x.right = y.left; - if (y.left != nil) - y.left.p = x; - y.p = x.p; - if (x == x.p.left) - x.p.left = y; - else x.p.right = y; - y.left = x; - x.p = y; - - if (y.p == root) - root.max = x.max; - y.max = x.max; - x.max = Math.max(x.i.getHigh(), Math.max(x.left.max, x.right.max)); - } - - private void rightRotate(Node x) { - Node y = x.left; - - x.left = y.right; - if (y.right != nil) - y.right.p = x; - y.p = x.p; - if (x == x.p.left) - x.p.left = y; - else x.p.right = y; - y.right = x; - x.p = y; - - if (y.p == root) - root.max = x.max; - y.max = x.max; - x.max = Math.max(x.i.getHigh(), Math.max(x.left.max, x.right.max)); - } - - private Node succesor(Node x) { - Node y = x.right; - if (y != nil) { - while (y.left != nil) - y = y.left; - return y; - } - y = x.p; - while (x == y.right) { - x = y; - y = y.p; - } - if (y == root) - return nil; - return y; - } - - /** - * Returns the interval with the lowest left endpoint. - * - * @return the interval with the lowest left endpoint - * or null if the tree is empty. - */ - public Interval minimum() { - if (root.left == nil) - return null; - return treeMinimum(root.left).i; - } - - private Node treeMinimum(Node x) { - while (x.left != nil) - x = x.left; - return x; - } - - /** - * Returns the interval with the highest left endpoint. - * - * @return the interval with the highest left endpoint - * or null if the tree is empty. - */ - public Interval maximum() { - if (root.left == nil) - return null; - return treeMaximum(root.left).i; - } - - private Node treeMaximum(Node x) { - while (x.right != nil) - x = x.right; - return x; - } - - /** - * Returns the leftmost point or {@code Double.NEGATIVE_INFINITY} in case - * of no intervals. - * - * @return the leftmost point. - */ - public double getLow() { - if (isEmpty()) - return Double.NEGATIVE_INFINITY; - return minimum().getLow(); - } - - /** - * Returns the rightmost point or {@code Double.POSITIVE_INFINITY} in case - * of no intervals. - * - * @return the rightmost point. - */ - public double getHigh() { - if (isEmpty()) - return Double.POSITIVE_INFINITY; - return root.left.max; - } - - /** - * Indicates if the leftmost point is excluded. - * - * @return {@code true} if the leftmost point is excluded, - * {@code false} otherwise. - */ - public boolean isLowExcluded() { - if (isEmpty()) - return true; - return minimum().isLowExcluded(); - } - - /** - * Indicates if the rightmost point is excluded. - * - * @return {@code true} if the rightmost point is excluded, - * {@code false} otherwise. - */ - public boolean isHighExcluded() { - if (isEmpty()) - return true; - return maximum().isHighExcluded(); - } - - /** - * Indicates if this {@code IntervalTree} contains 0 intervals. - * - * @return {@code true} if this {@code IntervalTree} is empty, - * {@code false} otherwise. - */ - public boolean isEmpty() { - return root.left == nil; - } - - /** - * Returns all intervals. - * - * @return all intervals - */ - public List> getIntervals() { - List> list = new ArrayList>(); - inorderTreeWalk(root.left, list); - return list; - } - - /** - * Returns all intervals overlapping with a given {@code Interval}. - * - * @param interval an {#code Interval} to be searched for overlaps - * - * @return all intervals overlapping with a given {@code Interval}. - * - * @throws NullPointerException if {@code interval} is null. - */ - public List> search(Interval interval) { - if (interval == null) - throw new NullPointerException("Interval cannot be null."); - - List> overlaps = new ArrayList>(); - for (Node n : searchNodes(interval)) - overlaps.add(n.i); - return overlaps; - } - - /** - * Returns all intervals overlapping with an interval given by {@code low} - * and {@code high}. They are considered as included by default. - * - * @param low the left endpoint of an interval to be searched for overlaps - * @param high the right endpoint an interval to be searched for overlaps - * - * @return all intervals overlapping with an interval given by {@code low} - * and {@code high}. - * - * @throws IllegalArgumentException if {@code low} > {@code high}. - */ - public List> search(double low, double high) { - if (low > high) - throw new IllegalArgumentException( - "The left endpoint of the interval must be less than " + - "the right endpoint."); - - List> overlaps = new ArrayList>(); - for (Node n : searchNodes(new Interval(low, high))) - overlaps.add(n.i); - return overlaps; - } - - private List searchNodes(Interval interval) { - List result = new ArrayList(); - searchNodes(root.left, interval, result); - return result; - } - - private void searchNodes(Node n, Interval interval, List result) { - // Don't search nodes that don't exist. - if (n == nil) - return; - - // Skip all nodes that have got their max value below the start of - // the given interval. - if (interval.getLow() > n.max) - return; - - // Search left children. - if (n.left != nil) - searchNodes(n.left, interval, result); - - // Check this node. - if (n.i.compareTo(interval) == 0) - result.add(n); - - // Skip all nodes to the right of nodes whose low value is past the end - // of the given interval. - if (interval.compareTo(n.i) < 0) - return; - - // Otherwise, search right children. - if (n.right != nil) - searchNodes(n.right, interval, result); - } - - /** - * Indicates if this {@code IntervalTree} overlaps with the given time interval. - * - * @param interval a given time interval - * - * @return {@code true} if this {@code IntervalTree} overlaps with {@code interval}, - * {@code false} otherwise. - */ - public boolean overlapsWith(Interval interval) { - return overlapsWith(root.left, interval); - } - - private boolean overlapsWith(Node n, Interval interval) { - // Don't search nodes that don't exist. - if (n == nil) - return false; - - // Skip all nodes that have got their max value below the start of - // the given interval. - if (interval.getLow() > n.max) - return false; - - // Search left children. - if (n.left != nil) - if (overlapsWith(n.left, interval)) - return true; - - // Check this node. - if (n.i.compareTo(interval) == 0) - return true; - - // Skip all nodes to the right of nodes whose low value is past the end - // of the given interval. - if (interval.compareTo(n.i) < 0) - return false; - - // Otherwise, search right children. - if (n.right != nil) - if (overlapsWith(n.right, interval)) - return true; - - // No overlaps, return false. - return false; - } - - private void inorderTreeWalk(Node x, List> list) { - if (x != nil) { - inorderTreeWalk(x.left, list); - list.add(x.i); - inorderTreeWalk(x.right, list); - } - } - - /** - * Compares this interval tree with the specified object for equality. - * - *

Note that two interval trees are equal if they contain the same - * intervals. - * - * @param obj object to which this interval tree is to be compared - * - * @return {@code true} if and only if the specified {@code Object} is a - * {@code IntervalTree} which contain the same intervals as this - * {@code IntervalTree's}. - * - * @see #hashCode - */ - @Override - public boolean equals(Object obj) { - if (obj != null && obj.getClass().equals(this.getClass())) { - List> thisIntervals = new ArrayList>(); - List> objIntervals = new ArrayList>(); - inorderTreeWalk(root.left, thisIntervals); - ((IntervalTree)obj).inorderTreeWalk( - ((IntervalTree)obj).root.left, objIntervals); - if (thisIntervals.size() == objIntervals.size()) { - for (int i = 0; i < thisIntervals.size(); ++i) - if (!thisIntervals.get(i).equals(objIntervals.get(i))) - return false; - return true; - } - } - return false; - } - - /** - * Returns a hashcode of this interval tree. - * - * @return a hashcode of this interval tree. - */ - @Override - public int hashCode() { - List> list = new ArrayList>(); - inorderTreeWalk(root.left, list); - return Arrays.deepHashCode(list.toArray()); - } - - /** - * Creates a string representation of all the intervals with their values. - * - * @param timesAsDoubles indicates if times should be shown as doubles or dates - * - * @return a string representation with times as doubles or dates. - */ - public String toString(boolean timesAsDoubles) { - List> list = new ArrayList>(); - inorderTreeWalk(root.left, list); - if (!list.isEmpty()) { - StringBuilder sb = new StringBuilder("<"); - sb.append(list.get(0).toString(timesAsDoubles)); - for (int i = 1; i < list.size(); ++i) - sb.append("; ").append(list.get(i).toString(timesAsDoubles)); - sb.append(">"); - return sb.toString(); - } - return ""; - } - - /** - * Returns a string representation of this interval tree in a format - * {@code <[low, high, value], ..., [low, high, value]>}. Nodes are visited - * in {@code inorder}. - * - *

Times are always shown as doubles.

- * - * @return a string representation of this interval tree. - */ - @Override - public String toString() { - return toString(true); - } - - private class Node { - public Interval i; // i.low is the key of this node - public double max; // the maximum value of any interval endpoint - // stored in the subtree rooted at this node - - public Color color; // the color of this node - public Node left; // the left subtree of this node - public Node right; // the right subtree of this node - public Node p; // the parent node - - /* - * Constructs a sentinel node by default. - */ - public Node() { - color = BLACK; - } - - /* - * Constructs a new {@code Node} instance. - */ - public Node(Interval i) { - this(); - this.i = i; - this.max = i.getHigh(); - } - } - - private enum Color { - RED, BLACK - } - - private static final Color RED = Color.RED; - private static final Color BLACK = Color.BLACK; -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/LongList.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/LongList.java deleted file mode 100644 index 3b92a922f5..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/LongList.java +++ /dev/null @@ -1,67 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Martin Ε kurla -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.type; - -/** - * Complex type that define a list of Long items. Can be created from a long - * array, from a Long array or from single string using either given or default separators. - * - * @author Martin Ε kurla - */ -public final class LongList extends NumberList { - - public LongList(long[] primitiveLongArray) { - super(TypeConvertor.convertPrimitiveToWrapperArray(primitiveLongArray)); - } - - public LongList(Long[] wrapperLongArray) { - super(wrapperLongArray); - } - - public LongList(String input) { - this(input, AbstractList.DEFAULT_SEPARATOR); - } - - public LongList(String input, String separator) { - super(input, separator, Long.class); - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/NumberList.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/NumberList.java deleted file mode 100644 index 7e9346bb3c..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/NumberList.java +++ /dev/null @@ -1,65 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Martin Ε kurla -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.type; - -/** - * Complex type that defines list of items that are numbers. - * - * @param type parameter restricted to types extending Number type - * - * @author Martin Ε kurla - */ -public abstract class NumberList extends AbstractList { - - public NumberList(T[] wrapperArray) { - super(wrapperArray); - } - - public NumberList(String input, Class finalType) { - this(input, AbstractList.DEFAULT_SEPARATOR, finalType); - } - - public NumberList(String input, String separator, Class finalType) { - super(input, separator, finalType); - } -} - diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/ShortList.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/ShortList.java deleted file mode 100644 index 79bb0e56ad..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/ShortList.java +++ /dev/null @@ -1,67 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Martin Ε kurla -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.type; - -/** - * Complex type that define a list of Short items. Can be created from a short - * array, from a Short array or from single string using either given or default separators. - * - * @author Martin Ε kurla - */ -public final class ShortList extends NumberList { - - public ShortList(short[] primitiveShortArray) { - super(TypeConvertor.convertPrimitiveToWrapperArray(primitiveShortArray)); - } - - public ShortList(Short[] wrapperShortArray) { - super(wrapperShortArray); - } - - public ShortList(String input) { - this(input, AbstractList.DEFAULT_SEPARATOR); - } - - public ShortList(String input, String separator) { - super(input, separator, Short.class); - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/StringList.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/StringList.java deleted file mode 100644 index 1e5678b71a..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/StringList.java +++ /dev/null @@ -1,118 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Martin Ε kurla -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.type; - -import org.gephi.data.attributes.api.AttributeType; - -/** - * Complex type that define a list of String items. Can be created from a String - * array, from a char array or from single string using either given or default separators. - *

- * String list is useful when, for a particular type, the number of string - * that define an element is not known by advance. - * - * @author Martin Ε kurla - * @author Mathieu Bastian - * @see AttributeType - */ -public final class StringList extends AbstractList { - - /** - * Create a new string from a char array. One char per list cell. - * - * @param list the list - */ - public StringList(char[] list) { - super(StringList.parse(list)); - } - - /** - * Create a new string list with the given items. - * - * @param list the list of string items - */ - public StringList(String[] list) { - super(list); - } - - /** - * Create a new string list with items found in the given value. Default - * separators ,|; are used to split the string in a list. - * - * @param input a string with default separators - */ - public StringList(String input) { - this(input, AbstractList.DEFAULT_SEPARATOR); - } - - /** - * Create a new string list with items found using given separators. - * - * @param input a string with separators defined in separator - * @param separator the separators chars that are to be used to split - * value - */ - public StringList(String input, String separator) { - super(input, separator, String.class); - } - - private static String[] parse(char[] list) { - String[] resultList = new String[list.length]; - - for (int i = 0; i < list.length; i++) { - resultList[i] = "" + list[i]; - } - - return resultList; - } - - /** - * Returns the item at the specified index. May return - * null if index is out of range. - * - * @param index the position in the string list - * @return the item at the specified position, or null - */ - public String getString(int index) { - return getItem(index); - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/TimeInterval.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/TimeInterval.java deleted file mode 100644 index e61ba52bb2..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/TimeInterval.java +++ /dev/null @@ -1,335 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian, Cezary Bartosiak -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.type; - -import java.util.ArrayList; -import java.util.Hashtable; -import java.util.List; -import org.gephi.data.attributes.api.AttributeUtils; -import org.gephi.data.attributes.api.Estimator; - -/** - * Complex type for specifying time interval. An, interval is two - * double with low inferior or equal to - * high. Thus intervals can have got included or excluded - * bounds. - * - * @author Mathieu Bastian, Cezary Bartosiak - */ -public final class TimeInterval extends DynamicType { - /** - * Constructs a new {@code DynamicType} instance with no intervals. - */ - public TimeInterval() { - super(); - } - - /** - * Constructs a new {@code DynamicType} instance that contains a given - * {@code interval}. - * - * @param low the left endpoint - * @param high the right endpoint - * @param lopen indicates if the left endpoint is excluded (true in this case) - * @param ropen indicates if the right endpoint is excluded (true in this case) - */ - public TimeInterval(double low, double high, boolean lopen, boolean ropen) { - super(new Interval(low, high, lopen, ropen)); - } - - /** - * Constructs a new {@code DynamicType} instance that contains a given - * {@code interval} [{@code low}, {@code high}]. - * - * @param low the left endpoint - * @param high the right endpoint - */ - public TimeInterval(double low, double high) { - super(new Interval(low, high)); - } - - /** - * Constructs a new {@code DynamicType} instance with intervals given by - * {@code List} in. - * - * @param in intervals to add (could be null) - */ - public TimeInterval(List in) { - super(getList(in)); - } - - /** - * Constructs a deep copy of {@code source}. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - */ - public TimeInterval(TimeInterval source) { - super(source); - } - - /** - * Constructs a deep copy of {@code source} that contains a given - * {@code interval}. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param low the left endpoint - * @param high the right endpoint - * @param lopen indicates if the left endpoint is excluded (true in this case) - * @param ropen indicates if the right endpoint is excluded (true in this case) - */ - public TimeInterval(TimeInterval source, double low, double high, boolean lopen, boolean ropen) { - super(source, new Interval(low, high, lopen, ropen)); - } - - /** - * Constructs a deep copy of {@code source} that contains a given - * {@code interval} [{@code low}, {@code high}]. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param low the left endpoint - * @param high the right endpoint - */ - public TimeInterval(TimeInterval source, double low, double high) { - super(source, new Interval(low, high)); - } - - /** - * Constructs a deep copy of {@code source} that contains a given - * {@code interval} [{@code alow}, {@code ahigh}]. Before add it removes - * from the newly created object all intervals that overlap with a given - * {@code interval} [{@code rlow}, {@code rhigh}]. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param alow the left endpoint of the interval to add - * @param ahigh the right endpoint of the interval to add - * @param alopen indicates if the left endpoint of the interval to add is excluded (true in this case) - * @param aropen indicates if the right endpoint of the interval to add is excluded (true in this case) - * @param rlow the left endpoint of the interval to remove - * @param rhigh the right endpoint of the interval to remove - * @param blopen indicates if the left endpoint of the interval to remove is excluded (true in this case) - * @param bropen indicates if the right endpoint of the interval to remove is excluded (true in this case) - */ - public TimeInterval(TimeInterval source, double alow, double ahigh, boolean alopen, boolean aropen, - double rlow, double rhigh, boolean blopen, boolean bropen) { - super(source, - new Interval(alow, ahigh, alopen, aropen), - new Interval(rlow, rhigh, blopen, bropen)); - } - - /** - * Constructs a deep copy of {@code source} that contains a given - * {@code interval} [{@code alow}, {@code ahigh}]. Before add it removes - * from the newly created object all intervals that overlap with a given - * {@code interval} [{@code rlow}, {@code rhigh}]. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param alow the left endpoint of the interval to add - * @param ahigh the right endpoint of the interval to add - * @param rlow the left endpoint of the interval to remove - * @param rhigh the right endpoint of the interval to remove - */ - public TimeInterval(TimeInterval source, double alow, double ahigh, double rlow, double rhigh) { - super(source, - new Interval(alow, ahigh), - new Interval(rlow, rhigh)); - } - - /** - * Constructs a deep copy of {@code source} with additional intervals - * given by {@code List} in. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in intervals to add (could be null) - */ - public TimeInterval(TimeInterval source, List in) { - super(source, getList(in)); - } - - /** - * Constructs a deep copy of {@code source} with additional intervals - * given by {@code List} in. Before add it removes from the - * newly created object all intervals that overlap with intervals given by - * {@code List} out. - * - * @param source an object to copy from (could be null, then completely new - * instance is created) - * @param in intervals to add (could be null) - * @param out intervals to remove (could be null) - */ - public TimeInterval(TimeInterval source, List in, List out) { - super(source, getList(in), getList(out)); - } - - private static List> getList(List arg) { - if (arg == null) - return null; - List> list = new ArrayList>(); - for (Interval item : arg) - list.add(new Interval(item.getLow(), item.getHigh(), - item.isLowExcluded(), item.isHighExcluded())); - return list; - } - - @Override - public Double[] getValue(Interval interval, Estimator estimator) { - List values = getValues(interval); - if (values.isEmpty()) - return null; - - switch (estimator) { - case AVERAGE: - throw new UnsupportedOperationException( - "Not supported estimator"); - case MEDIAN: - if (values.size() % 2 == 1) - return values.get(values.size() / 2); - return values.get(values.size() / 2 - 1); - case MODE: - Hashtable map = - new Hashtable(); - for (int i = 0; i < values.size(); ++i) { - int prev = 0; - if (map.containsKey(values.get(i).hashCode())) - prev = map.get(values.get(i).hashCode()); - map.put(values.get(i).hashCode(), prev + 1); - } - int max = map.get(values.get(0).hashCode()); - int index = 0; - for (int i = 1; i < values.size(); ++i) - if (max < map.get(values.get(i).hashCode())) { - max = map.get(values.get(i).hashCode()); - index = i; - } - return values.get(index); - case SUM: - throw new UnsupportedOperationException( - "Not supported estimator"); - case MIN: - throw new UnsupportedOperationException( - "Not supported estimator"); - case MAX: - throw new UnsupportedOperationException( - "Not supported estimator"); - case FIRST: - return values.get(0); - case LAST: - return values.get(values.size() - 1); - default: - throw new IllegalArgumentException("Unknown estimator."); - } - } - - @Override - public List getValues(Interval interval) { - List result = new ArrayList(); - for (Interval i : intervalTree.search(interval)) - result.add(new Double[] { i.getLow(), i.getHigh() }); - return result; - } - - @Override - public Class getUnderlyingType() { - return Double[].class; - } - - @Override - public String toString(boolean timesAsDoubles) { - if (timesAsDoubles) - return toString(); - return toStringTimesAsDates(); - } - - /** - * Returns a string representation of this instance in a format - * {@code <[low, high], ..., [low, high]>}. Intervals are - * ordered by its left endpoint. - * - *

Times are always shown as dates.

- * - * @return a string representation of this instance. - */ - public String toStringTimesAsDates() { - List> list = getIntervals(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); - if (!list.isEmpty()) { - StringBuilder sb = new StringBuilder("<"); - sb.append(list.get(0).isLowExcluded() ? "(" : "[").append(AttributeUtils.getXMLDateStringFromDouble( - list.get(0).getLow())).append(", ").append(AttributeUtils.getXMLDateStringFromDouble( - list.get(0).getHigh())).append(list.get(0).isHighExcluded() ? ")" : "]"); - for (int i = 1; i < list.size(); ++i) - sb.append("; ").append(list.get(i).isLowExcluded() ? "(" : "[").append(AttributeUtils. - getXMLDateStringFromDouble(list.get(i).getLow())).append(", ").append(AttributeUtils. - getXMLDateStringFromDouble(list.get(i).getHigh())).append(list.get(i).isHighExcluded() ? ")" : "]"); - sb.append(">"); - return sb.toString(); - } - return ""; - } - - /** - * Returns a string representation of this instance in a format - * {@code <[low, high], ..., [low, high]>}. Intervals are - * ordered by its left endpoint. - * - * @return a string representation of this instance. - */ - @Override - public String toString() { - List> list = getIntervals(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); - if (!list.isEmpty()) { - StringBuilder sb = new StringBuilder("<"); - sb.append(list.get(0).isLowExcluded() ? "(" : "[").append(list.get(0).getLow()).append(", "). - append(list.get(0).getHigh()).append(list.get(0).isHighExcluded() ? ")" : "]"); - for (int i = 1; i < list.size(); ++i) - sb.append("; ").append(list.get(i).isLowExcluded() ? "(" : "[").append(list.get(i).getLow()). - append(", ").append(list.get(i).getHigh()).append(list.get(i).isHighExcluded() ? ")" : "]"); - sb.append(">"); - return sb.toString(); - } - return ""; - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/TypeConvertor.java b/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/TypeConvertor.java deleted file mode 100644 index 4218621de0..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/attributes/type/TypeConvertor.java +++ /dev/null @@ -1,301 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Martin Ε kurla , Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes.type; - -import java.lang.reflect.Array; -import java.lang.reflect.Constructor; -import java.lang.reflect.Method; -import org.gephi.data.attributes.api.AttributeType; - -/** - * Class responsible for type manipulation and creation needed in Attributes API. - * - * @author Martin Ε kurla - * @author Mathieu Bastian - */ -public final class TypeConvertor { - - private static final String CONVERSION_METHOD_NAME = "valueOf"; - - private TypeConvertor() { - } - - /** - * Creates array of given type from single String value. String value is always parsed by given - * separator into smaller chunks. Every chunk will represent independent object in final array. - * The exact conversion process from String value into final type is done by - * {@link #createInstanceFromString createInstanceFromString} method. - * - * @param type parameter representing final array type - * @param input input - * @param separator separator which will be used in the process of tokenizing input - * @param finalType type of final array - * - * @return final array - * - * @throws NullPointerException if any of given parameters is null - * @throws IllegalArgumentException if array of given type cannot be created - * - * @see #createInstanceFromString createInstanceFromString - */ - @SuppressWarnings("unchecked") - public static T[] createArrayFromString(String input, String separator, Class finalType) { - if (input == null || separator == null || finalType == null) { - throw new NullPointerException(); - } - - String[] stringValues = input.split(separator); - T[] resultList = (T[]) Array.newInstance(finalType, stringValues.length); - - for (int i = 0; i < stringValues.length; i++) { - String stringValue = stringValues[i].trim(); - T resultValue = null; - - if (finalType == String.class) { - resultValue = (T) stringValue; - } else { - resultValue = TypeConvertor.createInstanceFromString(stringValue, finalType); - } - - resultList[i] = resultValue; - } - return resultList; - } - - /** - * Transforms String value to any kind of object with given type. The concrete conversion - * must be done by the type itself. This assumes, that given type defines at least one of the - * following: - *
    - *
  • public constructor with single parameter of type String - *
  • factory method "valueOf" with single parameter of type String
    - * If given type does not definy any of these requirements, IllegalArgumentException will be - * thrown. - * - * @param type parameter representing final type - * @param input input - * @param finalType type of final object - * - * @return final object - * - * @throws NullPointerException if any of given parameters is null - * @throws IllegalArgumentException if given type cannot be created - */ - @SuppressWarnings("unchecked") - public static T createInstanceFromString(String input, Class finalType) { - if (input == null || finalType == null) { - throw new NullPointerException(); - } - - T resultValue = null; - - try { - Method conversionMethod = finalType.getMethod(CONVERSION_METHOD_NAME, String.class); - - resultValue = (T) conversionMethod.invoke(null, input); - } catch (NoSuchMethodException e) { - try { - Constructor constructor = finalType.getConstructor(String.class); - resultValue = constructor.newInstance(input); - } catch (NoSuchMethodException e1) { - String errorMessage = String.format( - "Type '%s' does not have neither method 'T %s(String)' nor constructor '(String)'...", - finalType, - CONVERSION_METHOD_NAME); - - throw new IllegalArgumentException(errorMessage); - } catch (Exception e2) { - } - } catch (Exception e) { - } - return resultValue; - } - - /** - * Converts given array of primitive type into array of wrapper type. - * - * @param type parameter representing final wrapper type - * @param primitiveArray primitive array - * - * @return wrapper array - * - * @throws NullPointerException if given parameter is null - * @throws IllegalArgumentException if given parameter is not array or given parameter is not - * array of primitive type - */ - @SuppressWarnings("unchecked") - public static T[] convertPrimitiveToWrapperArray(Object primitiveArray) { - if (primitiveArray == null) { - throw new NullPointerException(); - } - - if (!primitiveArray.getClass().isArray()) { - throw new IllegalArgumentException("Given object is not of primitive array: " + primitiveArray.getClass()); - } - - Class primitiveClass = primitiveArray.getClass().getComponentType(); - Class wrapperClass = (Class) getWrapperFromPrimitive(primitiveClass); - int arrayLength = Array.getLength(primitiveArray); - T[] wrapperArray = (T[]) Array.newInstance(wrapperClass, arrayLength); - - for (int i = 0; i < arrayLength; i++) { - T arrayItem = (T) Array.get(primitiveArray, i); - wrapperArray[i] = arrayItem; - } - - return wrapperArray; - } - - /** - * Returns wrapper type from given primitive type. - * - * @param primitiveType primitive type - * - * @return wrapper type - * - * @throws NullPointerException if given parameter is null - * @throws IllegalArgumentException if given parameter is not a primitive type - */ - public static Class getWrapperFromPrimitive(Class primitiveType) { - if (primitiveType == null) { - throw new NullPointerException(); - } - - if (primitiveType == byte.class) { - return Byte.class; - } else if (primitiveType == short.class) { - return Short.class; - } else if (primitiveType == int.class) { - return Integer.class; - } else if (primitiveType == long.class) { - return Long.class; - } else if (primitiveType == float.class) { - return Float.class; - } else if (primitiveType == double.class) { - return Double.class; - } else if (primitiveType == boolean.class) { - return Boolean.class; - } else if (primitiveType == char.class) { - return Character.class; - } - - throw new IllegalArgumentException("Given type '" + primitiveType + "' is not primitive..."); - } - - /** - * Returns the underlying static type from dynamicType For example - * returns FLOAT if given type is DYNAMIC_FLOAT. - * @param dynamicType a dynamic type - * @return the underlying static type - * @throws IllegalArgumentException if dynamicType is not dynamic - */ - public static AttributeType getStaticType(AttributeType dynamicType) { - if (!dynamicType.isDynamicType()) { - throw new IllegalArgumentException("Given type '" + dynamicType + "' is not dynamic."); - } - switch (dynamicType) { - case DYNAMIC_BIGDECIMAL: - return AttributeType.BIGDECIMAL; - case DYNAMIC_BIGINTEGER: - return AttributeType.BIGINTEGER; - case DYNAMIC_BOOLEAN: - return AttributeType.BOOLEAN; - case DYNAMIC_BYTE: - return AttributeType.BYTE; - case DYNAMIC_CHAR: - return AttributeType.CHAR; - case DYNAMIC_DOUBLE: - return AttributeType.DOUBLE; - case DYNAMIC_FLOAT: - return AttributeType.FLOAT; - case DYNAMIC_INT: - return AttributeType.INT; - case DYNAMIC_LONG: - return AttributeType.LONG; - case DYNAMIC_SHORT: - return AttributeType.SHORT; - case DYNAMIC_STRING: - return AttributeType.STRING; - default: - return null; - } - } - - /** - * Returns the corresponding dynamic type from staticType For example - * returns DYNAMIC_FLOAT if given type is FLOAT. - * @param staticType a static type - * @return the corresponding dynamic type - * @throws IllegalArgumentException if staticType is not static - */ - public static AttributeType getDynamicType(AttributeType staticType) { - if (staticType.isDynamicType()) { - throw new IllegalArgumentException("Given type '" + staticType + "' is not static."); - } - switch (staticType) { - case BIGDECIMAL: - return AttributeType.DYNAMIC_BIGDECIMAL; - case BIGINTEGER: - return AttributeType.DYNAMIC_BIGINTEGER; - case BOOLEAN: - return AttributeType.DYNAMIC_BOOLEAN; - case BYTE: - return AttributeType.DYNAMIC_BYTE; - case CHAR: - return AttributeType.DYNAMIC_CHAR; - case DOUBLE: - return AttributeType.DYNAMIC_DOUBLE; - case FLOAT: - return AttributeType.DYNAMIC_FLOAT; - case INT: - return AttributeType.DYNAMIC_INT; - case LONG: - return AttributeType.DYNAMIC_LONG; - case SHORT: - return AttributeType.DYNAMIC_SHORT; - case STRING: - return AttributeType.DYNAMIC_STRING; - default: - return null; - } - } -} diff --git a/modules/AttributesAPI/src/main/java/org/gephi/data/properties/PropertiesColumn.java b/modules/AttributesAPI/src/main/java/org/gephi/data/properties/PropertiesColumn.java deleted file mode 100644 index 8890e36728..0000000000 --- a/modules/AttributesAPI/src/main/java/org/gephi/data/properties/PropertiesColumn.java +++ /dev/null @@ -1,118 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian , Martin Ε kurla -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.properties; - -import org.gephi.data.attributes.api.AttributeOrigin; -import org.gephi.data.attributes.api.AttributeType; - -/** - * Enum that define static AttributeColumn indexes, like ID - * or LABEL. Use these enum to find the index of these columns in - * node and edge table. - *

    Get nodes ID column - *
    - * AttributeColumn col = nodeTable.getColumn(PropertiesColumn.NODE_ID.getIndex());
    - * 
    - * @author Mathieu Bastian - * @author Martin Ε kurla - */ -public enum PropertiesColumn { - - NODE_ID(0, "id", AttributeType.STRING, AttributeOrigin.PROPERTY, null), - NODE_LABEL(1, "label", AttributeType.STRING, AttributeOrigin.PROPERTY, null), - EDGE_ID(0, "id", AttributeType.STRING, AttributeOrigin.PROPERTY, null), - EDGE_LABEL(1, "label", AttributeType.STRING, AttributeOrigin.PROPERTY, null), - EDGE_WEIGHT(2, "weight", AttributeType.FLOAT, AttributeOrigin.PROPERTY, 1f), - GRAPH_NAME(0, "name", AttributeType.STRING, AttributeOrigin.PROPERTY, null), - GRAPH_DESCRIPTION(0, "description", AttributeType.STRING, AttributeOrigin.PROPERTY, null), - NEO4J_RELATIONSHIP_TYPE(3, "neo4j_rt", AttributeType.STRING, AttributeOrigin.DELEGATE, null) { - - @Override - public String getTitle() { - return "Neo4j Relationship Type"; - } - }; - private final int index; - private final String id; - private final AttributeType type; - private final AttributeOrigin origin; - private final Object defaultValue; - - PropertiesColumn(int index, String id, AttributeType attributeType, AttributeOrigin origin, Object defaultValue) { - this.index = index; - this.id = id; - this.type = attributeType; - this.origin = origin; - this.defaultValue = defaultValue; - } - - public int getIndex() { - return index; - } - - public String getId() { - return id; - } - - /** - * Returns column title which will be showed to user in AttributeTables. Default title is derived - * from id uppercasing first character. For multiword titles, getTitle() method in appropriate enum - * constant object should be overridden. - * - * @return title - */ - public String getTitle() { - return Character.toUpperCase(id.charAt(0)) + id.substring(1, id.length()); - } - - public Object getDefaultValue() { - return defaultValue; - } - - public AttributeType getType() { - return type; - } - - public AttributeOrigin getOrigin() { - return origin; - } -} diff --git a/modules/AttributesAPI/src/main/nbm/manifest.mf b/modules/AttributesAPI/src/main/nbm/manifest.mf deleted file mode 100644 index 27c233815d..0000000000 --- a/modules/AttributesAPI/src/main/nbm/manifest.mf +++ /dev/null @@ -1,4 +0,0 @@ -Manifest-Version: 1.0 -OpenIDE-Module-Localizing-Bundle: org/gephi/data/attributes/api/Bundle.properties -AutoUpdate-Essential-Module: true -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file diff --git a/modules/AttributesAPI/src/main/nbm/module.xml b/modules/AttributesAPI/src/main/nbm/module.xml deleted file mode 100644 index 0e5106bbc8..0000000000 --- a/modules/AttributesAPI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/Bundle.properties b/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/Bundle.properties deleted file mode 100644 index 044dee36cb..0000000000 --- a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/Bundle.properties +++ /dev/null @@ -1,8 +0,0 @@ -OpenIDE-Module-Display-Category=Gephi Core -OpenIDE-Module-Long-Description=\ - Attributes API provides access to attributes values through an efficient column/row system. -OpenIDE-Module-Name=Attributes API -AttributeOrigin_property = Property -AttributeOrigin_data = Data -AttributeOrigin_computed_name = Computed -OpenIDE-Module-Short-Description=API for storing and retrieving attributes diff --git a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/Bundle_cs.properties b/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/Bundle_cs.properties deleted file mode 100644 index e19cb8eb02..0000000000 --- a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/Bundle_cs.properties +++ /dev/null @@ -1,17 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-29 19\:39+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=API vlastnost\u00ed poskytuje p\u0159\u00edstup k hodnot\u00e1m vlastnost\u00ed pomoc\u00ed \u00fa\u010dinn\u00e9ho syst\u00e9mu sloupec/\u0159\u00e1dek. - -AttributeOrigin_property=Vlastnost - -AttributeOrigin_data=Data - -AttributeOrigin_computed_name=Spo\u010d\u00edt\u00e1no - -OpenIDE-Module-Short-Description=API pro ukl\u00e1d\u00e1n\u00ed a z\u00edsk\u00e1v\u00e1n\u00ed vlastnost\u00ed diff --git a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/Bundle_es.properties b/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/Bundle_es.properties deleted file mode 100644 index 0e79084b3e..0000000000 --- a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/Bundle_es.properties +++ /dev/null @@ -1,17 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 19\:12+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Attributes API proporciona acceso a valores de atributos mediante un sistema eficiente de filas/columnas. - -AttributeOrigin_property=Propiedad - -AttributeOrigin_data=Dato - -AttributeOrigin_computed_name=Calculado - -OpenIDE-Module-Short-Description=API para almacenar y recuperar atributos diff --git a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/Bundle_fr.properties b/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/Bundle_fr.properties deleted file mode 100644 index 4dea6ebcd8..0000000000 --- a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/Bundle_fr.properties +++ /dev/null @@ -1,17 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 19\:12+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Attributes API donne acc\u00e8s aux valeurs d'attribut \u00e0 travers un syst\u00e8me efficace de lignes/colonnes. - -AttributeOrigin_property=Propri\u00e9t\u00e9 - -AttributeOrigin_data=Donn\u00e9e - -AttributeOrigin_computed_name=Calcul\u00e9 - -OpenIDE-Module-Short-Description=API de stockage et de r\u00e9cup\u00e9ration d'attributs diff --git a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/Bundle_ja.properties b/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/Bundle_ja.properties deleted file mode 100644 index 63f30d5ee8..0000000000 --- a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/Bundle_ja.properties +++ /dev/null @@ -1,17 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-29 18\:30+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u5c5e\u6027API\u306f\u3001\u52b9\u7387\u7684\u306a\u5217/\u884c\u306e\u30b7\u30b9\u30c6\u30e0\u3092\u4f7f\u7528\u3057\u3066\u5c5e\u6027\u5024\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002 - -AttributeOrigin_property=\u30d7\u30ed\u30d1\u30c6\u30a3 - -AttributeOrigin_data=\u30c7\u30fc\u30bf - -AttributeOrigin_computed_name=\u8a08\u7b97\u3055\u308c\u305f - -OpenIDE-Module-Short-Description=\u5c5e\u6027\u3092\u683c\u7d0d\u304a\u3088\u3073\u53d6\u5f97\u3059\u308b\u305f\u3081\u306eAPI diff --git a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/Bundle_oc.properties b/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/Bundle_oc.properties deleted file mode 100644 index 8934731197..0000000000 --- a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/Bundle_oc.properties +++ /dev/null @@ -1,16 +0,0 @@ -# Occitan (post 1500) translation for gephi -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the gephi package. -# FIRST AUTHOR , 2010. -# -!=Project-Id-Version\: gephi\nReport-Msgid-Bugs-To\: FULL NAME \nPOT-Creation-Date\: 2010-04-07 13\:16+0200\nPO-Revision-Date\: 2010-10-21 13\:36+0000\nLast-Translator\: C\u00e9dric VALMARY (Tot en \u00f2c) \nLanguage-Team\: Occitan (post 1500) \nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nX-Launchpad-Export-Date\: 2011-03-13 04\:46+0000\nX-Generator\: Launchpad (build 12559)\n - -OpenIDE-Module-Long-Description=Attributes API balha acc\u00e8s a las valors d'atribut a trav\u00e8rs un sist\u00e8ma efica\u00e7 de linhas/colomnas. - -AttributeOrigin_property=Proprietat - -AttributeOrigin_data=Donada - -AttributeOrigin_computed_name=Calculat - -OpenIDE-Module-Short-Description=API d'emmagazinatge e de recuperacion d'atributs diff --git a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/Bundle_pt_BR.properties b/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/Bundle_pt_BR.properties deleted file mode 100644 index 3fe0d5e520..0000000000 --- a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/Bundle_pt_BR.properties +++ /dev/null @@ -1,17 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 16\:43+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=A API de atributos fornece acesso aos valores de atributos por meio de um sistema eficiente de colunas e linhas. - -AttributeOrigin_property=Propriedade - -AttributeOrigin_data=Dado - -AttributeOrigin_computed_name=Calculado - -OpenIDE-Module-Short-Description=API de armazenamento e recupera\u00e7\u00e3o de dados diff --git a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/Bundle_ru.properties b/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/Bundle_ru.properties deleted file mode 100644 index 6a3f25ed8d..0000000000 --- a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/Bundle_ru.properties +++ /dev/null @@ -1,17 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 19\:14+0000\nLast-Translator\: gephi \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=API \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438 \u0432 \u0442\u0435\u0440\u043c\u0438\u043d\u0430\u0445 \u0441\u0442\u0440\u043e\u043a \u0438 \u043a\u043e\u043b\u043e\u043d\u043e\u043a. - -AttributeOrigin_property=\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u043e - -AttributeOrigin_data=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 - -AttributeOrigin_computed_name=\u0420\u0430\u0441\u0447\u0438\u0442\u0430\u043d\u043e - -OpenIDE-Module-Short-Description=API \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c diff --git a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/Bundle_zh_CN.properties b/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/Bundle_zh_CN.properties deleted file mode 100644 index d756040e44..0000000000 --- a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/Bundle_zh_CN.properties +++ /dev/null @@ -1,16 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:21+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u5c5e\u6027\u5e94\u7528\u7a0b\u5e8f\u63a5\u53e3\u63d0\u4f9b\u4e86\u4e00\u4e2a\u901a\u8fc7\u6709\u6548\u7684\u5217/\u884c\u7cfb\u7edf\u6765\u8bbf\u95ee\u5c5e\u6027\u503c\u3002 - -AttributeOrigin_property=\u5c5e\u6027 - -AttributeOrigin_data=\u6570\u636e - -AttributeOrigin_computed_name=\u8ba1\u7b97 - -OpenIDE-Module-Short-Description=\u7528\u4e8e\u5b58\u50a8\u548c\u63d0\u53d6\u5c5e\u6027\u7684\u5e94\u7528\u7a0b\u5e8f\u63a5\u53e3 diff --git a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/cs.po b/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/cs.po deleted file mode 100644 index c0310c2035..0000000000 --- a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/cs.po +++ /dev/null @@ -1,34 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-29 19:39+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API vlastnostΓ­ poskytuje pΕ™Γ­stup k hodnotΓ‘m vlastnostΓ­ pomocΓ­ účinnΓ©ho systΓ©mu sloupec/Ε™Γ‘dek." - -msgid "AttributeOrigin_property" -msgstr "Vlastnost" - -msgid "AttributeOrigin_data" -msgstr "Data" - -msgid "AttributeOrigin_computed_name" -msgstr "SpočítΓ‘no" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API pro uklΓ‘dΓ‘nΓ­ a zΓ­skΓ‘vΓ‘nΓ­ vlastnostΓ­" diff --git a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/es.po b/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/es.po deleted file mode 100644 index 9c20403e7b..0000000000 --- a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/es.po +++ /dev/null @@ -1,34 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 19:12+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Attributes API proporciona acceso a valores de atributos mediante un sistema eficiente de filas/columnas." - -msgid "AttributeOrigin_property" -msgstr "Propiedad" - -msgid "AttributeOrigin_data" -msgstr "Dato" - -msgid "AttributeOrigin_computed_name" -msgstr "Calculado" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API para almacenar y recuperar atributos" diff --git a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/fr.po b/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/fr.po deleted file mode 100644 index 3ec84483d8..0000000000 --- a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/fr.po +++ /dev/null @@ -1,34 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 19:12+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Attributes API donne accΓ¨s aux valeurs d'attribut Γ  travers un systΓ¨me efficace de lignes/colonnes." - -msgid "AttributeOrigin_property" -msgstr "PropriΓ©tΓ©" - -msgid "AttributeOrigin_data" -msgstr "DonnΓ©e" - -msgid "AttributeOrigin_computed_name" -msgstr "CalculΓ©" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API de stockage et de rΓ©cupΓ©ration d'attributs" diff --git a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/ja.po b/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/ja.po deleted file mode 100644 index 7cba586294..0000000000 --- a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/ja.po +++ /dev/null @@ -1,34 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-29 18:30+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ε±žζ€§APIγ―γ€εŠΉηŽ‡ηš„γͺεˆ—/葌γγ‚·γ‚Ήγƒ†γƒ γ‚’δ½Ώη”¨γ—γ¦ε±žζ€§ε€€γΈγγ‚’クセスを提供します。" - -msgid "AttributeOrigin_property" -msgstr "プロパティ" - -msgid "AttributeOrigin_data" -msgstr "データ" - -msgid "AttributeOrigin_computed_name" -msgstr "計η—γ•γ‚ŒγŸ" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ε±žζ€§γ‚’ζ Όη΄γŠγ‚ˆγ³ε–εΎ—γ™γ‚‹γŸγ‚γAPI" diff --git a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/org-gephi-data-attributes-api.pot b/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/org-gephi-data-attributes-api.pot deleted file mode 100644 index 14dcae5ed1..0000000000 --- a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/org-gephi-data-attributes-api.pot +++ /dev/null @@ -1,33 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "" -"Attributes API provides access to attributes values through an efficient " -"column/row system." - -msgid "AttributeOrigin_property" -msgstr "Property" - -msgid "AttributeOrigin_data" -msgstr "Data" - -msgid "AttributeOrigin_computed_name" -msgstr "Computed" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API for storing and retrieving attributes" diff --git a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/package.html b/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/package.html deleted file mode 100644 index d7d215089c..0000000000 --- a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/package.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - General API that defines the data structure, attributes associated to elements. -

    - Gephi uses Attribute API to store all data for elements (nodes, edges) - that are specific to the data manipulated - i.e. imported from a file - or a datasource. -

    -

    - The AttributeController is managing models and is the - access door to the system. This controller is a service, and can be - retrieved by using the following command: -

    -

    AttributeController ac = Lookup.getDefault().lookup(AttributeController.class);

    -

    - Using the Attributes API, it is possible to add data columns of any type, - and push data to rows dynamically. -

    - - diff --git a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/pt_BR.po b/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/pt_BR.po deleted file mode 100644 index a64208a21e..0000000000 --- a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/pt_BR.po +++ /dev/null @@ -1,34 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 16:43+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "A API de atributos fornece acesso aos valores de atributos por meio de um sistema eficiente de colunas e linhas." - -msgid "AttributeOrigin_property" -msgstr "Propriedade" - -msgid "AttributeOrigin_data" -msgstr "Dado" - -msgid "AttributeOrigin_computed_name" -msgstr "Calculado" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API de armazenamento e recuperaΓ§Γ£o de dados" diff --git a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/ru.po b/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/ru.po deleted file mode 100644 index e53559b8b3..0000000000 --- a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/ru.po +++ /dev/null @@ -1,34 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 19:14+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API доступа ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ прСдоставляСт эффСктивный ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… строк ΠΈ ΠΊΠΎΠ»ΠΎΠ½ΠΎΠΊ." - -msgid "AttributeOrigin_property" -msgstr "Бвойство" - -msgid "AttributeOrigin_data" -msgstr "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅" - -msgid "AttributeOrigin_computed_name" -msgstr "Расчитано" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API доступа ΠΊ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌ" diff --git a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/zh_CN.po b/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/zh_CN.po deleted file mode 100644 index 53ca8b4f4e..0000000000 --- a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/api/zh_CN.po +++ /dev/null @@ -1,33 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:21+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ε±žζ€§εΊ”η”¨η¨‹εΊζŽ₯口提供了一δΈͺι€šθΏ‡ζœ‰ζ•ˆηš„εˆ—/葌系统ζ₯θΏι—ε±žζ€§ε€Όγ€‚" - -msgid "AttributeOrigin_property" -msgstr "ε±žζ€§" - -msgid "AttributeOrigin_data" -msgstr "ζ•°ζ" - -msgid "AttributeOrigin_computed_name" -msgstr "θ‘η—" - -msgid "OpenIDE-Module-Short-Description" -msgstr "η”¨δΊŽε­˜ε‚¨ε’Œζε–ε±žζ€§ηš„εΊ”η”¨η¨‹εΊζŽ₯口" diff --git a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/type/package.html b/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/type/package.html deleted file mode 100644 index 61335a99d7..0000000000 --- a/modules/AttributesAPI/src/main/resources/org/gephi/data/attributes/type/package.html +++ /dev/null @@ -1,11 +0,0 @@ - - - - Defines new immutable types that can represent attributes. -

    - Defines more complex type of data than Java doesn't provide. Types defined - here may be supported by {@link org.gephi.data.attributes.api.AttributeType} and exploited by others - API. -

    - - diff --git a/modules/AttributesAPI/src/main/resources/overview.html b/modules/AttributesAPI/src/main/resources/overview.html deleted file mode 100644 index fb99d54574..0000000000 --- a/modules/AttributesAPI/src/main/resources/overview.html +++ /dev/null @@ -1,14 +0,0 @@ - - - - Attributes API provides access to attributes values through an - efficient column/row system. -

    - Attributes are data associated to elements like node or edge. - Various kind of data can be set for each element. The API allows to - define data columns with a title and a type in tables - and then creates row to push data values. By default, there are two - tables: node and edge. -

    - - diff --git a/modules/AttributesAPI/src/test/java/org/gephi/data/attributes/type/DynamicParserTest.java b/modules/AttributesAPI/src/test/java/org/gephi/data/attributes/type/DynamicParserTest.java deleted file mode 100644 index 2c6f4a0460..0000000000 --- a/modules/AttributesAPI/src/test/java/org/gephi/data/attributes/type/DynamicParserTest.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - Copyright 2008-2012 Gephi - Authors : Eduardo Ramos - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes.type; - -import org.gephi.data.attributes.api.AttributeType; -import static org.junit.Assert.*; -import org.junit.Test; - -/** - * - * @author Eduardo Ramos - */ -public class DynamicParserTest { - - private String parseDynamic(String str){ - return parseDynamic(str, AttributeType.DYNAMIC_STRING); - } - - private String parseDynamic(String str, AttributeType type){ - return type.parse(str).toString(); - } - - @Test - public void testParseIntervals() throws Exception { - assertEquals(parseDynamic("[2.0, 3.5, \"; A3R; JJG; JJG\"); [3.5, 8.0, \"; A3R; JJG; [ ] () , JJG\"]; [10,20,30]") - , "<[2.0, 3.5, \"; A3R; JJG; JJG\"); [3.5, 8.0, \"; A3R; JJG; [ ] () , JJG\"]; [10.0, 20.0, 30]>"); - - assertEquals(parseDynamic("<[' 2.0', '3.5', ';a b c')") - , "<[2.0, 3.5, \";a b c\")>"); - - assertEquals(parseDynamic(" ( 1, 2, ) (4,5, '[\\'a;b\\']']") - , "<(1.0, 2.0); (4.0, 5.0, \"['a;b']\"]>"); - - assertEquals(parseDynamic("[1.25,1.55, ]"), "<[1.25, 1.55, ]>"); - assertEquals(parseDynamic("[1.25,'1.55' ]"), "<[1.25, 1.55, ]>"); - - assertEquals(parseDynamic("[1.25,1.55, \"21.12 \" ]", AttributeType.DYNAMIC_DOUBLE), "<[1.25, 1.55, 21.12]>"); - - assertEquals(parseDynamic("[1.25,1.55]", AttributeType.DYNAMIC_DOUBLE), "<[1.25, 1.55]>"); - - assertEquals(parseDynamic("[1.25,1.55]", AttributeType.TIME_INTERVAL), "<[1.25, 1.55]>"); - } -} diff --git a/modules/AttributesImpl/pom.xml b/modules/AttributesImpl/pom.xml deleted file mode 100644 index 7cc6ed598c..0000000000 --- a/modules/AttributesImpl/pom.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - 4.0.0 - - gephi-parent - org.gephi - 0.9-SNAPSHOT - ../.. - - - org.gephi - attributes - 0.9-SNAPSHOT - nbm - - AttributesImpl - - - - ${project.groupId} - data-attributes-api - - - ${project.groupId} - graph-api - - - org.netbeans.api - org-openide-util - - - org.netbeans.api - org-openide-util-lookup - - - ${project.groupId} - project-api - - - - - - - org.codehaus.mojo - nbm-maven-plugin - - - org.gephi.data.attributes.spi - - - - - - diff --git a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/AbstractAttributeModel.java b/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/AbstractAttributeModel.java deleted file mode 100644 index 0765e0e1bd..0000000000 --- a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/AbstractAttributeModel.java +++ /dev/null @@ -1,195 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian , Martin Ε kurla -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes; - -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; -import org.gephi.data.attributes.api.AttributeListener; -import org.gephi.data.attributes.api.AttributeModel; -import org.gephi.data.attributes.api.AttributeRowFactory; -import org.gephi.data.attributes.api.AttributeTable; -import org.gephi.data.attributes.api.AttributeType; -import org.gephi.data.attributes.api.AttributeValueFactory; -import org.gephi.data.attributes.event.AbstractEvent; -import org.gephi.data.attributes.event.AttributeEventManager; -import org.gephi.data.properties.PropertiesColumn; -import org.gephi.project.api.Workspace; -import org.openide.util.NbBundle; - -/** - * - * @author Mathieu Bastian - * @author Martin Ε kurla - */ -public abstract class AbstractAttributeModel implements AttributeModel { - - private final Workspace workspace; - //Classes - private final ConcurrentMap tableMap; - private final AttributeTableImpl nodeTable; - private final AttributeTableImpl edgeTable; - private final AttributeTableImpl graphTable; - //Factory - private final AttributeFactoryImpl factory; - //Events - protected AttributeEventManager eventManager; - - //Data API - public AbstractAttributeModel(Workspace workspace) { - this.workspace = workspace; - tableMap = new ConcurrentHashMap(); - nodeTable = new AttributeTableImpl(this, NbBundle.getMessage(AttributeTableImpl.class, "NodeAttributeTable.name")); - edgeTable = new AttributeTableImpl(this, NbBundle.getMessage(AttributeTableImpl.class, "EdgeAttributeTable.name")); - graphTable = new AttributeTableImpl(this, NbBundle.getMessage(AttributeTableImpl.class, "GraphAttributeTable.name")); - tableMap.put(nodeTable.name, nodeTable); - tableMap.put(edgeTable.name, edgeTable); - tableMap.put(graphTable.name, graphTable); - factory = new AttributeFactoryImpl(this); - } - - protected void createPropertiesColumn() { - // !!! the position of PropertiesColumn enum constants in following arrays must be the same - // !!! as index in each constant - PropertiesColumn[] columnsForNodeTable = {PropertiesColumn.NODE_ID, - PropertiesColumn.NODE_LABEL}; - PropertiesColumn[] columnsForEdgeTable = {PropertiesColumn.EDGE_ID, - PropertiesColumn.EDGE_LABEL, - PropertiesColumn.EDGE_WEIGHT}; - PropertiesColumn[] columnsForGraphTable = {PropertiesColumn.GRAPH_NAME, - PropertiesColumn.GRAPH_DESCRIPTION}; - - for (PropertiesColumn columnForNodeTable : columnsForNodeTable) { - nodeTable.addPropertiesColumn(columnForNodeTable); - } - - for (PropertiesColumn columnForEdgeTable : columnsForEdgeTable) { - edgeTable.addPropertiesColumn(columnForEdgeTable); - } - - for (PropertiesColumn columnForGraphTable : columnsForGraphTable) { - graphTable.addPropertiesColumn(columnForGraphTable); - } - } - - public abstract Object getManagedValue(Object obj, AttributeType attributeType); - - public void clear() { - } - - public AttributeTableImpl getNodeTable() { - return nodeTable; - } - - public AttributeTableImpl getGraphTable() { - return graphTable; - } - - public AttributeTableImpl getEdgeTable() { - return edgeTable; - } - - public AttributeTableImpl getTable(String name) { - AttributeTableImpl attTable = tableMap.get(name); - if (attTable != null) { - return attTable; - } - return null; - } - - public AttributeTableImpl[] getTables() { - return tableMap.values().toArray(new AttributeTableImpl[0]); - } - - public AttributeRowFactory rowFactory() { - return factory; - } - - public AttributeValueFactory valueFactory() { - return factory; - } - - public AttributeFactoryImpl getFactory() { - return factory; - } - - public void addTable(AttributeTableImpl table) { - tableMap.put(table.getName(), table); - } - - public void addAttributeListener(AttributeListener listener) { - eventManager.addAttributeListener(listener); - } - - public void removeAttributeListener(AttributeListener listener) { - eventManager.removeAttributeListener(listener); - } - - public void fireAttributeEvent(AbstractEvent event) { - eventManager.fireEvent(event); - } - - public void mergeModel(AttributeModel model) { - if (model.getNodeTable() != null) { - nodeTable.mergeTable(model.getNodeTable()); - } - if (model.getEdgeTable() != null) { - edgeTable.mergeTable(model.getEdgeTable()); - } - - for (AttributeTable table : model.getTables()) { - if (table != model.getNodeTable() && table != model.getEdgeTable()) { - AttributeTable existingTable = tableMap.get(table.getName()); - if (existingTable != null) { - ((AttributeTableImpl) existingTable).mergeTable(table); - } else { - AttributeTableImpl newTable = new AttributeTableImpl(this, table.getName()); - tableMap.put(newTable.getName(), newTable); - newTable.mergeTable(table); - } - } - } - } - - public Workspace getWorkspace(){ - return this.workspace; - } -} diff --git a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/AttributeColumnImpl.java b/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/AttributeColumnImpl.java deleted file mode 100644 index 72b6069612..0000000000 --- a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/AttributeColumnImpl.java +++ /dev/null @@ -1,129 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian , Martin Ε kurla -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes; - -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeOrigin; -import org.gephi.data.attributes.api.AttributeType; -import org.gephi.data.attributes.spi.AttributeValueDelegateProvider; - -/** - * - * @author Mathieu Bastian - * @author Martin Ε kurla - */ -public class AttributeColumnImpl implements AttributeColumn { - - protected final AttributeTableImpl table; - protected int index; - protected final String id; - protected final String title; - protected final AttributeType type; - protected final AttributeOrigin origin; - protected final AttributeValueImpl defaultValue; - protected final AttributeValueDelegateProvider attributeValueDelegateProvider; - - public AttributeColumnImpl(AttributeTableImpl table, int index, String id, String title, AttributeType attributeType, AttributeOrigin origin, Object defaultValue, AttributeValueDelegateProvider attributeValueDelegateProvider) { - this.table = table; - this.index = index; - this.id = id; - this.type = attributeType; - this.title = title; - this.origin = origin; - this.attributeValueDelegateProvider = attributeValueDelegateProvider; - this.defaultValue = new AttributeValueImpl(this, defaultValue); - } - - public AttributeTableImpl getTable() { - return table; - } - - public AttributeType getType() { - return type; - } - - public String getTitle() { - return title; - } - - public int getIndex() { - return index; - } - - public AttributeOrigin getOrigin() { - return origin; - } - - public String getId() { - return id; - } - - public Object getDefaultValue() { - return defaultValue.getValue(); - } - - public AttributeValueDelegateProvider getProvider() { - return attributeValueDelegateProvider; - } - - @Override - public String toString() { - return title + " (" + type.toString() + ")"; - } - - @Override - public boolean equals(Object obj) { - if (obj instanceof AttributeColumn) { - AttributeColumnImpl o = (AttributeColumnImpl) obj; - return id.equals(o.id) && o.type == type; - } - return false; - } - - @Override - public int hashCode() { - int hash = 3; - hash = 53 * hash + (this.id != null ? this.id.hashCode() : 0); - hash = 53 * hash + (this.type != null ? this.type.hashCode() : 0); - return hash; - } -} diff --git a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/AttributeControllerImpl.java b/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/AttributeControllerImpl.java deleted file mode 100644 index 3dee13ae64..0000000000 --- a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/AttributeControllerImpl.java +++ /dev/null @@ -1,125 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes; - -import org.gephi.data.attributes.api.AttributeController; -import org.gephi.data.attributes.api.AttributeModel; -import org.gephi.data.attributes.model.IndexedAttributeModel; -import org.gephi.data.attributes.model.TemporaryAttributeModel; -import org.gephi.project.api.ProjectController; -import org.gephi.project.api.Workspace; -import org.gephi.project.api.WorkspaceListener; -import org.gephi.project.api.WorkspaceProvider; -import org.openide.util.Lookup; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = AttributeController.class) -public class AttributeControllerImpl implements AttributeController { - - private ProjectController projectController; - - public AttributeControllerImpl() { - projectController = Lookup.getDefault().lookup(ProjectController.class); - projectController.addWorkspaceListener(new WorkspaceListener() { - - public void initialize(Workspace workspace) { - AttributeModel m = workspace.getLookup().lookup(AttributeModel.class); - if (m == null) { - workspace.add(new IndexedAttributeModel(workspace)); - } - } - - public void select(Workspace workspace) { - } - - public void unselect(Workspace workspace) { - } - - public void close(Workspace workspace) { - } - - public void disable() { - } - }); - if (projectController.getCurrentProject() != null) { - for (Workspace workspace : projectController.getCurrentProject().getLookup().lookup(WorkspaceProvider.class).getWorkspaces()) { - AttributeModel m = workspace.getLookup().lookup(AttributeModel.class); - if (m == null) { - workspace.add(new IndexedAttributeModel(workspace)); - } - } - } - } - - public synchronized AttributeModel getModel() { - Workspace workspace = projectController.getCurrentWorkspace(); - if (workspace != null) { - AttributeModel model = workspace.getLookup().lookup(AttributeModel.class); - if (model != null) { - return model; - } - model = new IndexedAttributeModel(workspace); - workspace.add(model); - return model; - } - return null; - } - - public synchronized AttributeModel getModel(Workspace workspace) { - AttributeModel model = workspace.getLookup().lookup(AttributeModel.class); - if (model != null) { - return model; - } - model = new IndexedAttributeModel(workspace); - workspace.add(model); - return model; - } - - public AttributeModel newModel() { - TemporaryAttributeModel model = new TemporaryAttributeModel(null); - return model; - } -} diff --git a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/AttributeFactoryImpl.java b/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/AttributeFactoryImpl.java deleted file mode 100644 index cc4dc7ff80..0000000000 --- a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/AttributeFactoryImpl.java +++ /dev/null @@ -1,115 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes; - -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeOrigin; -import org.gephi.data.attributes.api.AttributeRow; -import org.gephi.data.attributes.api.AttributeRowFactory; -import org.gephi.data.attributes.api.AttributeType; -import org.gephi.data.attributes.api.AttributeValue; -import org.gephi.data.attributes.api.AttributeValueFactory; -import org.gephi.graph.api.EdgeData; -import org.gephi.graph.api.GraphView; -import org.gephi.graph.api.NodeData; - -/** - * - * @author Mathieu Bastian - */ -public class AttributeFactoryImpl implements AttributeValueFactory, AttributeRowFactory { - - private AbstractAttributeModel model; - - public AttributeFactoryImpl(AbstractAttributeModel model) { - this.model = model; - } - - public AttributeValue newValue(AttributeColumn column, Object value) { - if (value == null) { - return new AttributeValueImpl((AttributeColumnImpl) column, null); - } - - //If the column is not a delegate (wrong type value allowed), try to convert value to correct type if necessary - if(!column.getOrigin().equals(AttributeOrigin.DELEGATE)){ - AttributeType targetType = column.getType(); - if (!value.getClass().equals(targetType.getType())) { - try { - value = targetType.parse(value.toString());//Try to convert to target type - } catch (Exception ex) { - return new AttributeValueImpl((AttributeColumnImpl) column, null);//Could not parse - } - } - } - - - Object managedValue = value; - if (!column.getOrigin().equals(AttributeOrigin.PROPERTY)) { - managedValue = model.getManagedValue(value, column.getType()); - } - return new AttributeValueImpl((AttributeColumnImpl) column, managedValue); - } - - public AttributeRowImpl newNodeRow(NodeData nodeData) { - return new AttributeRowImpl(model.getNodeTable(), nodeData); - } - - public AttributeRowImpl newEdgeRow(EdgeData edgeData) { - return new AttributeRowImpl(model.getEdgeTable(), edgeData); - } - - public AttributeRow newGraphRow(GraphView graphView) { - return new AttributeRowImpl(model.getGraphTable(), graphView); - } - - public AttributeRowImpl newRowForTable(String tableName, Object object) { - AttributeTableImpl attTable = model.getTable(tableName); - if (attTable != null) { - return new AttributeRowImpl(attTable, object); - } - return null; - } - - public void setModel(AbstractAttributeModel model) { - this.model = model; - } -} diff --git a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/AttributeModelDuplicateProvider.java b/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/AttributeModelDuplicateProvider.java deleted file mode 100644 index 5486195276..0000000000 --- a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/AttributeModelDuplicateProvider.java +++ /dev/null @@ -1,66 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes; - -import org.gephi.data.attributes.api.AttributeController; -import org.gephi.data.attributes.api.AttributeModel; -import org.gephi.project.api.Workspace; -import org.gephi.project.spi.WorkspaceDuplicateProvider; -import org.openide.util.Lookup; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = WorkspaceDuplicateProvider.class, position = 10) -public class AttributeModelDuplicateProvider implements WorkspaceDuplicateProvider { - - public void duplicate(Workspace source, Workspace destination) { - AttributeController controller = Lookup.getDefault().lookup(AttributeController.class); - AttributeModel sourceModel = controller.getModel(source); - AttributeModel destModel = controller.getModel(destination); - if (sourceModel != null && destModel != null) { - destModel.mergeModel(sourceModel); - } - } -} diff --git a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/AttributeRowImpl.java b/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/AttributeRowImpl.java deleted file mode 100644 index 0e9c3561ad..0000000000 --- a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/AttributeRowImpl.java +++ /dev/null @@ -1,268 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian , Cezary Bartosiak - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes; - -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeEvent.EventType; -import org.gephi.data.attributes.api.AttributeOrigin; -import org.gephi.data.attributes.api.AttributeRow; -import org.gephi.data.attributes.api.AttributeType; -import org.gephi.data.attributes.api.AttributeValue; -import org.gephi.data.attributes.event.ValueEvent; - -/** - * - * @author Mathieu Bastian - * @author Cezary Bartosiak - */ -public class AttributeRowImpl implements AttributeRow { - - protected final Object object; - protected final AttributeTableImpl attributeTable; - protected AttributeValueImpl[] values; - protected int rowVersion = -1; - - public AttributeRowImpl(AttributeTableImpl attributeTable, Object object) { - this.attributeTable = attributeTable; - this.object = object; - reset(); - } - - public void reset() { - rowVersion = attributeTable.getVersion(); - int attSize = attributeTable.countColumns(); - - if (values == null) { - values = new AttributeValueImpl[attSize]; - } else { - updateColumns(); - } - - for (int i = 0; i < attSize; i++) { - setValue(i, attributeTable.getColumn(i).defaultValue, false); - } - } - - public void setValues(AttributeRow attributeRow) { - if (attributeRow == null) { - throw new NullPointerException(); - } - AttributeValue[] attValues = attributeRow.getValues(); - for (int i = 0; i < attValues.length; i++) { - setValue(attValues[i]); - } - } - - public void setValue(int index, Object value) { - AttributeColumn column = attributeTable.getColumn(index); - if (column != null) { - setValue(column, value); - } else { - throw new IllegalArgumentException("The column doesn't exist"); - } - } - - public void setValue(String column, Object value) { - if (column == null) { - throw new NullPointerException("Column is null"); - } - AttributeColumn attributeColumn = attributeTable.getColumn(column); - if (attributeColumn != null) { - setValue(attributeColumn, value); - } else { - //add column - AttributeType type = AttributeType.parse(value); - //System.out.println("parsed value type: " + value.getClass()); - if (type != null) { - attributeColumn = attributeTable.addColumn(column, type); - setValue(attributeColumn, value); - } - } - } - - public void setValue(AttributeColumn column, Object value) { - if (column == null) { - throw new NullPointerException("Column is null"); - } - - AttributeValue attValue = attributeTable.getFactory().newValue(column, value); - setValue(attValue); - } - - public void setValue(AttributeValue value) { - AttributeColumn column = value.getColumn(); - if (attributeTable.getColumn(column.getIndex()) != column) { - column = attributeTable.getColumn(column); - if (column == null) { - throw new IllegalArgumentException("The " + attributeTable.getName() + " value column " + value.getColumn().getId() + " with index " + value.getColumn().getIndex() + " doesn't exist"); - } - value = attributeTable.getFactory().newValue(column, value.getValue()); - } - - setValue(column.getIndex(), (AttributeValueImpl) value, true); - } - - private void setValue(int index, AttributeValueImpl value, boolean doUpdateColumns) { - if (doUpdateColumns) { - updateColumns(); - } - - AttributeValueImpl oldValue = this.values[index]; - - this.values[index] = value; - - if (!(oldValue != null && oldValue.equals(value)) - && index > 0 && !value.getColumn().getOrigin().equals(AttributeOrigin.COMPUTED)) { //0 is the index of node id and edge id cols, not useful to send these events - if (oldValue != null) { - attributeTable.model.fireAttributeEvent(new ValueEvent(EventType.UNSET_VALUE, attributeTable, object, oldValue)); - } - attributeTable.model.fireAttributeEvent(new ValueEvent(EventType.SET_VALUE, attributeTable, object, value)); - } - } - - public Object getValue(AttributeColumn column) { - if (column == null) { - throw new NullPointerException(); - } - updateColumns(); - int index = column.getIndex(); - if (checkIndexRange(index)) { - AttributeValue val = values[index]; - if (val.getColumn() == column) { - return val.getValue(); - } - } - return null; - } - - public Object getValue(int index) { - updateColumns(); - if (checkIndexRange(index)) { - AttributeColumn attributeColumn = attributeTable.getColumn(index); - return getValue(attributeColumn); - } - return null; - } - - public Object getValue(String column) { - updateColumns(); - AttributeColumn attributeColumn = attributeTable.getColumn(column); - if (attributeColumn != null) { - return getValue(attributeColumn); - } - return null; - } - - public AttributeValue[] getValues() { - return values; - } - - public AttributeValue getAttributeValueAt(int index) { - if (checkIndexRange(index)) { - return values[index]; - } - return null; - } - - public int countValues() { - updateColumns(); - return values.length; - } - - public AttributeColumn getColumnAt(int index) { - updateColumns(); - return attributeTable.getColumn(index); - } - - public Object getObject() { - return object; - } - - private void updateColumns() { - int tableVersion = attributeTable.getVersion(); - if (rowVersion < tableVersion) { - - //Need to update - AttributeColumnImpl[] columns = attributeTable.getColumns(); - AttributeValueImpl[] oldValues = values; - - values = new AttributeValueImpl[columns.length]; - - for (int i = 0; i < columns.length; i++) { - AttributeColumnImpl tableCol = columns[i]; - boolean found = false; - int j = 0; - while (j < oldValues.length) { - AttributeValueImpl val = oldValues[j++]; - if (val.getColumn() == tableCol) { - values[i] = val; - found = true; - break; - } - } - - if (!found) { - setValue(i, tableCol.defaultValue, false); - } - } - - //Upd version - rowVersion = tableVersion; - } - } - - private boolean checkIndexRange(int index) { - return index < values.length && index >= 0; - } - - public int getRowVersion() { - return rowVersion; - } - - public void setRowVersion(int rowVersion) { - this.rowVersion = rowVersion; - } - - public void setValues(AttributeValueImpl[] values) { - this.values = values; - } -} diff --git a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/AttributeTableImpl.java b/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/AttributeTableImpl.java deleted file mode 100644 index bc50a9a4ea..0000000000 --- a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/AttributeTableImpl.java +++ /dev/null @@ -1,349 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian , Martin Ε kurla - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.logging.Level; -import java.util.logging.Logger; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeEvent; -import org.gephi.data.attributes.api.AttributeOrigin; -import org.gephi.data.attributes.api.AttributeTable; -import org.gephi.data.attributes.api.AttributeType; -import org.gephi.data.attributes.api.AttributeUtils; -import org.gephi.data.attributes.event.ColumnEvent; -import org.gephi.data.attributes.spi.AttributeValueDelegateProvider; -import org.gephi.data.attributes.type.TypeConvertor; -import org.gephi.data.properties.PropertiesColumn; -import org.gephi.graph.api.Attributes; -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.GraphModel; -import org.gephi.graph.api.Node; -import org.openide.util.Lookup; - -/** - * - * @author Mathieu Bastian - * @author Martin Ε kurla - */ -public class AttributeTableImpl implements AttributeTable { - - protected String name; - protected final AbstractAttributeModel model; - //Listeners - //Columns - protected final List columns = new ArrayList(); - protected final Map columnsSet = new HashMap(); - protected final Map columnsMap = new HashMap(); - //Version - protected int version = 0; - - public AttributeTableImpl(AbstractAttributeModel model, String name) { - this.name = name; - this.model = model; - } - - public synchronized AttributeColumnImpl[] getColumns() { - return columns.toArray(new AttributeColumnImpl[]{}); - } - - public synchronized int countColumns() { - return columns.size(); - } - - public AttributeColumn addPropertiesColumn(PropertiesColumn propertiesColumn) { - return addColumn(propertiesColumn.getId(), - propertiesColumn.getTitle(), - propertiesColumn.getType(), - propertiesColumn.getOrigin(), - propertiesColumn.getDefaultValue()); - } - - public AttributeColumnImpl addColumn(String id, AttributeType type) { - return addColumn(id, id, type, AttributeOrigin.DATA, null, null); - } - - public AttributeColumnImpl addColumn(String id, AttributeType type, AttributeOrigin origin) { - return addColumn(id, id, type, origin, null, null); - } - - public AttributeColumnImpl addColumn(String id, String title, AttributeType type, AttributeOrigin origin, Object defaultValue) { - return addColumn(id, title, type, origin, defaultValue, null); - } - - public AttributeColumn addColumn(String id, String title, AttributeType type, AttributeValueDelegateProvider attributeValueDelegateProvider, Object defaultValue) { - return addColumn(id, title, type, AttributeOrigin.DELEGATE, defaultValue, attributeValueDelegateProvider); - } - - private synchronized AttributeColumnImpl addColumn(String id, String title, AttributeType type, AttributeOrigin origin, Object defaultValue, AttributeValueDelegateProvider attributeValueDelegateProvider) { - if (id == null || id.isEmpty() || hasColumn(id)) { - throw new IllegalArgumentException("The column id can't be null, empty or already existing in the table"); - } - - if (title == null || title.isEmpty() || hasColumn(title)) { - //The id is correct, but the title may be invalid or repeated even when the id is valid - //Use id as title as a compromise so the column can still be added: - - Logger.getLogger(AttributeTableImpl.class.getName()).log(Level.WARNING, "Invalid or repeated column title ({0}), used column id as its title instead", title); - title = id; - } - - if (defaultValue != null) { - if (defaultValue.getClass() != type.getType()) { - if (defaultValue.getClass() == String.class) { - defaultValue = type.parse((String) defaultValue); - } else { - throw new IllegalArgumentException("The default value type cannot be cast to the type"); - } - } - defaultValue = model.getManagedValue(defaultValue, type); - } - AttributeColumnImpl column = new AttributeColumnImpl(this, columns.size(), id, title, type, origin, defaultValue, attributeValueDelegateProvider); - columns.add(column); - columnsMap.put(id.toLowerCase(), column); - if (title != null && !title.equals(id)) { - columnsMap.put(title.toLowerCase(), column); - } - columnsSet.put(column, column); - - //Version - version++; - - model.fireAttributeEvent( - new ColumnEvent(AttributeEvent.EventType.ADD_COLUMN, column)); - - return column; - } - - /** - * Sends unset events for all attribute rows of a column that is going to be removed. (This is basically necessary to correctly update Dynamic index of Dynamic API.) - * - * Events are only sent for node, edge and graph table columns. - * - * @param column Column that is being removed - */ - private boolean sendUnsetValueEventsForRemovedColumn(AttributeColumn column) { - if (this.model.getWorkspace() == null) { - return false; - } - - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getModel(this.model.getWorkspace()); - Attributes[] rows; - - if (AttributeUtils.getDefault().isNodeColumn(column)) { - Node[] nodes = graphModel.getGraph().getNodes().toArray(); - rows = new Attributes[nodes.length]; - - for (int i = 0; i < nodes.length; i++) { - rows[i] = nodes[i].getAttributes(); - } - } else if (AttributeUtils.getDefault().isEdgeColumn(column)) { - Edge[] edges = graphModel.getGraph().getEdges().toArray(); - rows = new Attributes[edges.length]; - - for (int i = 0; i < edges.length; i++) { - rows[i] = edges[i].getAttributes(); - } - } else if (AttributeUtils.getDefault().isGraphColumn(column)) { - rows = new Attributes[]{graphModel.getGraph().getAttributes()}; - } else { - return false; - } - - int columnIndex = column.getIndex(); - - for (Attributes row : rows) { - row.setValue(columnIndex, null); - } - - return true; - } - - public synchronized void removeColumn(AttributeColumn column) { - int index = columns.indexOf(column); - if (index == -1) { - return; - } - - sendUnsetValueEventsForRemovedColumn(column); - - //update indexes of the next columns of the one to delete: - AttributeColumnImpl c; - for (index = index + 1; index < columns.size(); index++) { - c = columns.get(index); - c.index--; - } - //Remove from collections - columns.remove((AttributeColumnImpl) column); - columnsMap.remove(column.getId().toLowerCase()); - if (column.getTitle() != null && !column.getTitle().equals(column.getId())) { - columnsMap.remove(column.getTitle().toLowerCase()); - } - columnsSet.remove(column); - - model.fireAttributeEvent( - new ColumnEvent(AttributeEvent.EventType.REMOVE_COLUMN, (AttributeColumnImpl) column)); - - //Version - version++; - } - - public synchronized AttributeColumn replaceColumn(AttributeColumn source, AttributeColumnImpl targetImpl) { - int index = columns.indexOf(source); - if (index == -1) { - return null; - } - - sendUnsetValueEventsForRemovedColumn(source); - - //Remove from collections - columnsMap.remove(source.getId().toLowerCase()); - if (source.getTitle() != null && !source.getTitle().equals(source.getId())) { - columnsMap.remove(source.getTitle().toLowerCase()); - } - columnsSet.remove(source); - - //Add - targetImpl.index = index; - columns.set(index, targetImpl); - columnsMap.put(targetImpl.id.toLowerCase(), targetImpl); - if (targetImpl.title != null && !targetImpl.title.equals(targetImpl.id)) { - columnsMap.put(targetImpl.title.toLowerCase(), targetImpl); - } - columnsSet.put(targetImpl, targetImpl); - - model.fireAttributeEvent( - new ColumnEvent(AttributeEvent.EventType.REPLACE_COLUMN, (AttributeColumnImpl) source)); - - //Version - version++; - return targetImpl; - } - - public synchronized AttributeColumn replaceColumn(AttributeColumn source, String id, String title, AttributeType type, AttributeOrigin origin, Object defaultValue) { - if (defaultValue != null) { - if (defaultValue.getClass() != type.getType()) { - if (defaultValue.getClass() == String.class) { - defaultValue = type.parse((String) defaultValue); - } else { - throw new IllegalArgumentException("The default value type cannot be cast to the type"); - } - } - defaultValue = model.getManagedValue(defaultValue, type); - } - AttributeColumnImpl targetImpl = new AttributeColumnImpl(this, columns.size(), id, title, type, origin, defaultValue, null); - return replaceColumn(source, targetImpl); - } - - public synchronized AttributeColumnImpl getColumn(int index) { - if (index >= 0 && index < columns.size()) { - return columns.get(index); - } - - return null; - } - - public synchronized AttributeColumnImpl getColumn(String id) { - return columnsMap.get(id.toLowerCase()); - } - - public synchronized AttributeColumnImpl getColumn(String title, AttributeType type) { - AttributeColumnImpl c = columnsMap.get(title.toLowerCase()); - if (c != null && c.getType().equals(type)) { - return c; - } - return null; - } - - public synchronized AttributeColumn getColumn(AttributeColumn column) { - return columnsSet.get(column); - } - - public synchronized boolean hasColumn(String title) { - return columnsMap.containsKey(title.toLowerCase()); - } - - public synchronized int getVersion() { - return version; - } - - public void setVersion(int version) { - this.version = version; - } - - public String getName() { - return name; - } - - public void setName(String name) { - this.name = name; - } - - public AttributeFactoryImpl getFactory() { - return model.getFactory(); - } - - public AbstractAttributeModel getModel() { - return model; - } - - public synchronized void mergeTable(AttributeTable table) { - for (AttributeColumn column : table.getColumns()) { - AttributeColumn existingCol = getColumn(column); - if (existingCol == null) { - existingCol = getColumn(column.getTitle()); - } - if (existingCol == null) { - addColumn(column.getId(), column.getTitle(), column.getType(), column.getOrigin(), column.getDefaultValue()); - } else if (column.getType().isDynamicType() && TypeConvertor.getStaticType(column.getType()).equals(existingCol.getType())) { - //The column exists but has the underlying static type - //Change type - AttributeColumnImpl newCol = new AttributeColumnImpl(this, existingCol.getIndex(), existingCol.getId(), existingCol.getTitle(), column.getType(), existingCol.getOrigin(), column.getDefaultValue(), null); - replaceColumn(existingCol, newCol); - } - } - } -} diff --git a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/AttributeUtilsImpl.java b/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/AttributeUtilsImpl.java deleted file mode 100644 index d1377ac462..0000000000 --- a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/AttributeUtilsImpl.java +++ /dev/null @@ -1,297 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian , Martin Ε kurla -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes; - -import java.util.ArrayList; -import java.util.List; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeModel; -import org.gephi.data.attributes.api.AttributeTable; -import org.gephi.data.attributes.api.AttributeType; -import org.gephi.data.attributes.api.AttributeUtils; -import org.gephi.data.attributes.type.NumberList; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Mathieu Bastian - * @author Martin Ε kurla - */ -@ServiceProvider(service = AttributeUtils.class) -public class AttributeUtilsImpl extends AttributeUtils { - - @Override - public boolean isColumnOfType(AttributeColumn column, AttributeType type) { - return column.getType() == type; - } - - @Override - public boolean areAllColumnsOfType(AttributeColumn[] columns, AttributeType type) { - for (AttributeColumn column : columns) { - if (!isColumnOfType(column, type)) { - return false; - } - } - return true; - } - - @Override - public boolean areAllColumnsOfSameType(AttributeColumn[] columns) { - if (columns.length == 0) { - return false; - } - AttributeType type = columns[0].getType(); - return areAllColumnsOfType(columns, type); - } - - @Override - public boolean isStringColumn(AttributeColumn column) { - return column.getType().equals(AttributeType.STRING) || column.getType().equals(AttributeType.LIST_STRING); - } - - @Override - public boolean areAllStringColumns(AttributeColumn[] columns) { - for (AttributeColumn column : columns) { - if (!isStringColumn(column)) { - return false; - } - } - return true; - } - - @Override - public boolean isNumberColumn(AttributeColumn column) { - AttributeType attributeType = column.getType(); - return Number.class.isAssignableFrom(attributeType.getType()); - } - - @Override - public boolean areAllNumberColumns(AttributeColumn[] columns) { - for (AttributeColumn column : columns) { - if (!isNumberColumn(column)) { - return false; - } - } - return true; - } - - @Override - public boolean isNumberListColumn(AttributeColumn column) { - AttributeType attributeType = column.getType(); - return NumberList.class.isAssignableFrom(attributeType.getType()); - } - - @Override - public boolean areAllNumberListColumns(AttributeColumn[] columns) { - for (AttributeColumn column : columns) { - if (!isNumberListColumn(column)) { - return false; - } - } - return true; - } - - @Override - public boolean isNumberOrNumberListColumn(AttributeColumn column) { - return isNumberColumn(column) || isNumberListColumn(column); - } - - @Override - public boolean areAllNumberOrNumberListColumns(AttributeColumn[] columns) { - for (AttributeColumn column : columns) { - if (!isNumberOrNumberListColumn(column)) { - return false; - } - } - return true; - } - - public boolean isDynamicNumberColumn(AttributeColumn column) { - switch (column.getType()) { - case DYNAMIC_BIGDECIMAL: - case DYNAMIC_BIGINTEGER: - case DYNAMIC_BYTE: - case DYNAMIC_DOUBLE: - case DYNAMIC_FLOAT: - case DYNAMIC_INT: - case DYNAMIC_LONG: - case DYNAMIC_SHORT: - return true; - default: - return false; - } - } - - public boolean areAllDynamicNumberColumns(AttributeColumn[] columns) { - for (AttributeColumn column : columns) { - if (!isDynamicNumberColumn(column)) { - return false; - } - } - return true; - } - - @Override - @SuppressWarnings({"rawtypes", "unchecked"}) - public Comparable getMin(AttributeColumn column, Comparable[] values) { - if (!isNumberColumn(column) && !isDynamicNumberColumn(column)) { - throw new IllegalArgumentException("Colun must be a number column"); - } - - switch (values.length) { - case 0: - return null; - case 1: - return values[0]; - // values.length > 1 - default: - Comparable min = values[0]; - - for (int index = 1; index < values.length; index++) { - Comparable o = values[index]; - if (o.compareTo(min) < 0) { - min = o; - } - } - - return min; - } - } - - @Override - @SuppressWarnings({"rawtypes", "unchecked"}) - public Comparable getMax(AttributeColumn column, Comparable[] values) { - if (!isNumberColumn(column) && !isDynamicNumberColumn(column)) { - throw new IllegalArgumentException("Colun must be a number column"); - } - - switch (values.length) { - case 0: - return null; - case 1: - return values[0]; - // values.length > 1 - default: - Comparable max = values[0]; - - for (int index = 1; index < values.length; index++) { - Comparable o = values[index]; - if (o.compareTo(max) > 0) { - max = o; - } - } - - return max; - } - } - - @Override - public boolean isNodeColumn(AttributeColumn column) { - if (column == null) { - throw new NullPointerException(); - } - AttributeColumnImpl columnImpl = (AttributeColumnImpl) column; - AttributeTableImpl table = columnImpl.getTable(); - if (table == table.getModel().getNodeTable()) { - return true; - } - return false; - } - - @Override - public boolean isEdgeColumn(AttributeColumn column) { - if (column == null) { - throw new NullPointerException(); - } - AttributeColumnImpl columnImpl = (AttributeColumnImpl) column; - AttributeTableImpl table = columnImpl.getTable(); - if (table == table.getModel().getEdgeTable()) { - return true; - } - return false; - } - - @Override - public boolean isGraphColumn(AttributeColumn column) { - if (column == null) { - throw new NullPointerException(); - } - AttributeColumnImpl columnImpl = (AttributeColumnImpl) column; - AttributeTableImpl table = columnImpl.getTable(); - if (table == table.getModel().getGraphTable()) { - return true; - } - return false; - } - - @Override - public AttributeColumn[] getNumberColumns(AttributeTable table) { - List res = new ArrayList(); - for (AttributeColumn c : table.getColumns()) { - if (isNumberColumn(c)) { - res.add(c); - } - } - return res.toArray(new AttributeColumn[0]); - } - - @Override - public AttributeColumn[] getStringColumns(AttributeTable table) { - List res = new ArrayList(); - for (AttributeColumn c : table.getColumns()) { - if (isStringColumn(c)) { - res.add(c); - } - } - return res.toArray(new AttributeColumn[0]); - } - - @Override - public AttributeColumn[] getAllCollums(AttributeModel model) { - List cols = new ArrayList(); - for (AttributeTable t : model.getTables()) { - AttributeTableImpl tableImpl = (AttributeTableImpl) t; - cols.addAll(tableImpl.columns); - } - return cols.toArray(new AttributeColumn[0]); - } -} diff --git a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/AttributeValueImpl.java b/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/AttributeValueImpl.java deleted file mode 100644 index 4463f511cf..0000000000 --- a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/AttributeValueImpl.java +++ /dev/null @@ -1,123 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian , Martin Ε kurla - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes; - -import org.gephi.data.attributes.api.AttributeOrigin; -import org.gephi.data.attributes.api.AttributeValue; -import org.gephi.data.attributes.spi.AttributeValueDelegateProvider; - -/** - * - * @author Mathieu Bastian - * @author Martin Ε kurla - */ -public final class AttributeValueImpl implements AttributeValue { - - private final AttributeColumnImpl column; - private final Object value; - - public AttributeValueImpl(AttributeColumnImpl column, Object value) { - this.column = column; - this.value = value; - } - - public AttributeColumnImpl getColumn() { - return column; - } - - public Object getValue() { - if (column.getOrigin() != AttributeOrigin.DELEGATE) { - return value; - } else { - if (value == null) { - return null; - } - - AttributeValueDelegateProvider attributeValueDelegateProvider = column.getProvider(); - - Object result; - if (AttributeUtilsImpl.getDefault().isEdgeColumn(column)) { - result = attributeValueDelegateProvider.getEdgeAttributeValue(value, column); - } else if (AttributeUtilsImpl.getDefault().isNodeColumn(column)) { - result = attributeValueDelegateProvider.getNodeAttributeValue(value, column); - } else { - throw new AssertionError(); - } - - if(result != null && result.getClass() != column.getType().getType()){ - //Try to parse to correct column type if the delegate provides a wrong type value: - Object convertedValue = column.getType().parse(value.toString()); - if(convertedValue != null){ - result = convertedValue; - } - } - - // important for Neo4j and in future also for other storing engines - // the conversion can be necessary because of types mismatch - // for Neo4j return type can be array of primitive type which must be - // converted into List type - if (result != null && result.getClass().isArray()) { - result = ListFactory.fromArray(result); - } - - return result; - } - } - - @Override - public boolean equals(Object obj) { - if (obj != null && obj instanceof AttributeValue) { - if (this == obj) { - return true; - } - Object thisVal = this.getValue(); - Object objVal = ((AttributeValue) obj).getValue(); - if (thisVal == null && objVal == null) { - return true; - } - if (thisVal != null && objVal != null && thisVal.equals(objVal)) { - return true; - } - } - return false; - } -} diff --git a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/ListFactory.java b/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/ListFactory.java deleted file mode 100644 index 03371eae98..0000000000 --- a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/ListFactory.java +++ /dev/null @@ -1,121 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Martin Ε kurla -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ - -package org.gephi.data.attributes; - -import java.math.BigDecimal; -import java.math.BigInteger; -import org.gephi.data.attributes.type.AbstractList; -import org.gephi.data.attributes.type.BigDecimalList; -import org.gephi.data.attributes.type.BigIntegerList; -import org.gephi.data.attributes.type.BooleanList; -import org.gephi.data.attributes.type.ByteList; -import org.gephi.data.attributes.type.CharacterList; -import org.gephi.data.attributes.type.DoubleList; -import org.gephi.data.attributes.type.FloatList; -import org.gephi.data.attributes.type.IntegerList; -import org.gephi.data.attributes.type.LongList; -import org.gephi.data.attributes.type.ShortList; -import org.gephi.data.attributes.type.StringList; - -/** - * - * @author Martin Ε kurla - */ -public class ListFactory { - private ListFactory() {} - - public static AbstractList fromArray(Object array) { - Class componentType = array.getClass().getComponentType(); - - if (componentType == byte.class) - return new ByteList((byte[]) array); - else if (componentType == Byte.class) - return new ByteList((Byte[]) array); - - else if (componentType == short.class) - return new ShortList((short[]) array); - else if (componentType == Short.class) - return new ShortList((Short[]) array); - - else if (componentType == int.class) - return new IntegerList((int[]) array); - else if (componentType == Integer.class) - return new IntegerList((Integer[]) array); - - else if (componentType == long.class) - return new LongList((long[]) array); - else if (componentType == Long.class) - return new LongList((Long[]) array); - - else if (componentType == float.class) - return new FloatList((float[]) array); - else if (componentType == Float.class) - return new FloatList((Float[]) array); - - else if (componentType == double.class) - return new DoubleList((double[]) array); - else if (componentType == Double.class) - return new DoubleList((Double[]) array); - - else if (componentType == boolean.class) - return new BooleanList((boolean[]) array); - else if (componentType == Boolean.class) - return new BooleanList((Boolean[]) array); - - else if (componentType == char.class) - return new CharacterList((char[]) array); - else if (componentType == Character.class) - return new CharacterList((Character[]) array); - - else if (componentType == String.class) - return new StringList((String[]) array); - - else if (componentType == BigInteger.class) - return new BigIntegerList((BigInteger[]) array); - - else if (componentType == BigDecimal.class) - return new BigDecimalList((BigDecimal[]) array); - - throw new AssertionError(); - } -} diff --git a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/event/AbstractEvent.java b/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/event/AbstractEvent.java deleted file mode 100644 index dce9da6bc9..0000000000 --- a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/event/AbstractEvent.java +++ /dev/null @@ -1,76 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ - -package org.gephi.data.attributes.event; - -import org.gephi.data.attributes.api.AttributeEvent; -import org.gephi.data.attributes.api.AttributeEvent.EventType; -import org.gephi.data.attributes.api.AttributeTable; - -/** - * - * @author Mathieu Bastian - */ -public abstract class AbstractEvent { - - private final AttributeEvent.EventType eventType; - private final AttributeTable table; - private final T data; - - public AbstractEvent(EventType eventType, AttributeTable table, T data) { - this.eventType = eventType; - this.table = table; - this.data = data; - } - - public T getData() { - return data; - } - - public EventType getEventType() { - return eventType; - } - - public AttributeTable getAttributeTable() { - return table; - } -} diff --git a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/event/AttributeEventDataImpl.java b/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/event/AttributeEventDataImpl.java deleted file mode 100644 index 0480ae098b..0000000000 --- a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/event/AttributeEventDataImpl.java +++ /dev/null @@ -1,85 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes.event; - -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeEventData; -import org.gephi.data.attributes.api.AttributeValue; - -/** - * - * @author Mathieu Bastian - */ -public class AttributeEventDataImpl implements AttributeEventData { - - private AttributeColumn[] columns; - private AttributeValue[] values; - private Object[] objects; - - public AttributeColumn[] getAddedColumns() { - return columns; - } - - public AttributeColumn[] getRemovedColumns() { - return columns; - } - - public AttributeValue[] getTouchedValues() { - return values; - } - - public Object[] getTouchedObjects() { - return objects; - } - - public void setColumns(AttributeColumn[] columns) { - this.columns = columns; - } - - public void setValues(AttributeValue[] values) { - this.values = values; - } - - public void setObjects(Object[] objects) { - this.objects = objects; - } -} diff --git a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/event/AttributeEventImpl.java b/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/event/AttributeEventImpl.java deleted file mode 100644 index 0c7ae8effb..0000000000 --- a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/event/AttributeEventImpl.java +++ /dev/null @@ -1,84 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes.event; - -import org.gephi.data.attributes.api.AttributeEvent; -import org.gephi.data.attributes.api.AttributeEventData; -import org.gephi.data.attributes.api.AttributeTable; - -/** - * - * @author Mathieu Bastian - */ -public final class AttributeEventImpl implements AttributeEvent { - - private final EventType type; - private final AttributeTable source; - private final AttributeEventData data; - - public AttributeEventImpl(EventType type, AttributeTable source, AttributeEventData data) { - this.type = type; - this.source = source; - this.data = data; - } - - public EventType getEventType() { - return type; - } - - public AttributeTable getSource() { - return source; - } - - public AttributeEventData getData() { - return data; - } - - public boolean is(EventType... type) { - for (EventType t : type) { - if (t.equals(this.type)) { - return true; - } - } - return false; - } -} diff --git a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/event/AttributeEventManager.java b/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/event/AttributeEventManager.java deleted file mode 100644 index 5809c3b62d..0000000000 --- a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/event/AttributeEventManager.java +++ /dev/null @@ -1,216 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes.event; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.LinkedList; -import java.util.List; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.atomic.AtomicReference; -import org.gephi.data.attributes.AbstractAttributeModel; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeEvent; -import org.gephi.data.attributes.api.AttributeListener; -import org.gephi.data.attributes.api.AttributeValue; - -/** - * - * @author Mathieu Bastian - */ -public class AttributeEventManager implements Runnable { - - //Const - private final static long DELAY = 100; - //Architecture - private final AbstractAttributeModel model; - private final List listeners; - private final AtomicReference thread = new AtomicReference(); - private final LinkedBlockingQueue eventQueue; - private final Object lock = new Object(); - private final LinkedList rateList = new LinkedList(); - private double avgRate = 1.0; - //Flag - private boolean stop; - - public AttributeEventManager(AbstractAttributeModel model) { - this.model = model; - this.eventQueue = new LinkedBlockingQueue(); - this.listeners = Collections.synchronizedList(new ArrayList()); - } - - @Override - public void run() { - int rate = 0; - while (!stop) { - if (rate == (int) avgRate) { - try { - Thread.sleep(DELAY); - } catch (InterruptedException ex) { - ex.printStackTrace(); - } - int w = (int) (eventQueue.size() * 0.1f); - w = Math.max(1, w); - updateRate(w); - rate++; - } - List eventCompress = null; - List eventCompressObjects = null; - - AbstractEvent precEvt = null; - AbstractEvent evt = null; - while ((evt = eventQueue.peek()) != null) { - if (precEvt != null) { - if ((evt instanceof ValueEvent || evt instanceof ColumnEvent) && precEvt.getEventType().equals(evt.getEventType()) && precEvt.getAttributeTable() == evt.getAttributeTable()) { //Same type - if (eventCompress == null) { - eventCompress = new ArrayList(); - eventCompress.add(precEvt.getData()); - } - if (evt instanceof ValueEvent) { - if (eventCompressObjects == null) { - eventCompressObjects = new ArrayList(); - eventCompressObjects.add(((ValueEvent) precEvt).getObject()); - } - eventCompressObjects.add(((ValueEvent) evt).getObject()); - } - - eventCompress.add(evt.getData()); - } else { - break; - } - } - eventQueue.poll(); - precEvt = evt; - } - - if (precEvt != null) { - AttributeEvent event = createEvent(precEvt, eventCompress, eventCompressObjects); - for (AttributeListener l : listeners.toArray(new AttributeListener[0])) { - l.attributesChanged(event); - } - } - rate++; - - while (eventQueue.isEmpty()) { - rate = (int) avgRate; - try { - synchronized (lock) { - lock.wait(); - } - } catch (InterruptedException e) { - } - } - } - } - - private AttributeEvent createEvent(AbstractEvent event, List compress, List compressObjects) { - final AttributeEventDataImpl eventData = new AttributeEventDataImpl(); - final AttributeEventImpl attributeEvent = new AttributeEventImpl(event.getEventType(), event.getAttributeTable(), eventData); - if (event instanceof ValueEvent) { - AttributeValue[] values; - Object[] objects; - if (compress != null) { - values = compress.toArray(new AttributeValue[0]); - objects = compressObjects.toArray(); - } else { - values = new AttributeValue[]{(AttributeValue) event.getData()}; - objects = new Object[]{((ValueEvent) event).getObject()}; - } - eventData.setValues(values); - eventData.setObjects(objects); - } else if (event instanceof ColumnEvent) { - AttributeColumn[] columns; - if (compress != null) { - columns = compress.toArray(new AttributeColumn[0]); - } else { - columns = new AttributeColumn[]{(AttributeColumn) event.getData()}; - } - eventData.setColumns(columns); - } - return attributeEvent; - } - - private double updateRate(int n) { - int windowLength = 10; - if (rateList.size() == windowLength) { - Integer oldest = rateList.poll(); - avgRate = ((avgRate * windowLength) - oldest) / (windowLength - 1); - } - avgRate = ((avgRate * rateList.size()) + n) / (rateList.size() + 1); - rateList.add(n); - return avgRate; - } - - public void stop(boolean stop) { - this.stop = stop; - } - - public void fireEvent(AbstractEvent event) { - eventQueue.add(event); - synchronized (lock) { - lock.notifyAll(); - } - } - - public void start() { - Thread t = new Thread(this); - t.setDaemon(true); - t.setName("attribute-event-bus"); - if (this.thread.compareAndSet(null, t)) { - t.start(); - } - } - - public boolean isRunning() { - return thread.get() != null; - } - - public void addAttributeListener(AttributeListener listener) { - if (!listeners.contains(listener)) { - listeners.add(listener); - } - } - - public void removeAttributeListener(AttributeListener listener) { - listeners.remove(listener); - } -} diff --git a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/event/ColumnEvent.java b/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/event/ColumnEvent.java deleted file mode 100644 index 13da3e524f..0000000000 --- a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/event/ColumnEvent.java +++ /dev/null @@ -1,57 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes.event; - -import org.gephi.data.attributes.AttributeColumnImpl; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeEvent.EventType; - -/** - * - * @author Mathieu Bastian - */ -public class ColumnEvent extends AbstractEvent { - - public ColumnEvent(EventType eventType, AttributeColumnImpl data) { - super(eventType, data.getTable(), data); - } -} diff --git a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/event/ValueEvent.java b/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/event/ValueEvent.java deleted file mode 100644 index ce6ec79b07..0000000000 --- a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/event/ValueEvent.java +++ /dev/null @@ -1,64 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes.event; - -import org.gephi.data.attributes.AttributeValueImpl; -import org.gephi.data.attributes.api.AttributeEvent.EventType; -import org.gephi.data.attributes.api.AttributeTable; - -/** - * - * @author Mathieu Bastian - */ -public class ValueEvent extends AbstractEvent { - - private Object object; - - public ValueEvent(EventType eventType, AttributeTable table, Object object, AttributeValueImpl data) { - super(eventType, table, data); - this.object = object; - } - - public Object getObject() { - return object; - } -} diff --git a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/model/DataIndex.java b/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/model/DataIndex.java deleted file mode 100644 index 73447bdb1d..0000000000 --- a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/model/DataIndex.java +++ /dev/null @@ -1,129 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian , Martin Ε kurla -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.model; - -import java.lang.ref.WeakReference; -import java.math.BigDecimal; -import java.math.BigInteger; -import java.util.HashMap; -import java.util.Map; -import java.util.WeakHashMap; -import org.gephi.data.attributes.api.AttributeRow; -import org.gephi.data.attributes.api.AttributeType; -import org.gephi.data.attributes.type.BigDecimalList; -import org.gephi.data.attributes.type.BigIntegerList; -import org.gephi.data.attributes.type.BooleanList; -import org.gephi.data.attributes.type.ByteList; -import org.gephi.data.attributes.type.CharacterList; -import org.gephi.data.attributes.type.DoubleList; -import org.gephi.data.attributes.type.FloatList; -import org.gephi.data.attributes.type.IntegerList; -import org.gephi.data.attributes.type.LongList; -import org.gephi.data.attributes.type.ShortList; -import org.gephi.data.attributes.type.StringList; -import org.gephi.data.attributes.type.TimeInterval; - -/** - * The index where values of the current {@link IndexedAttributeManager} are. This index stores the objects - * as {@link WeakReference}, so the {@link AttributeRow} may share the objects reference with this index. - * Moreover when no more objects possess a reference to a value, the {@link WeakReference} system - * (i.e. Garbage collector) will automatically clean the old references. - * - * @author Mathieu Bastian - * @author Martin Ε kurla - * @see AttributeType - */ -public class DataIndex { - @SuppressWarnings("rawtypes") - private static final Class[] SUPPORTED_TYPES = { - String.class, BigInteger.class, BigDecimal.class, TimeInterval.class, - ByteList.class, ShortList.class, IntegerList.class, LongList.class, - FloatList.class, DoubleList.class, BooleanList.class, CharacterList.class, - StringList.class, BigIntegerList.class, BigDecimalList.class}; - - @SuppressWarnings("rawtypes") - private static Map, WeakHashMap> centralHashMap; - - @SuppressWarnings("rawtypes") - public DataIndex() { - centralHashMap = new HashMap, WeakHashMap>(); - - for (Class supportedType : SUPPORTED_TYPES) - putInCentralMap(supportedType); - } - - private static void putInCentralMap(Class supportedType) { - centralHashMap.put(supportedType, new WeakHashMap>()); - } - - public int countEntries() { - int entries = 0; - - for (WeakHashMap weakHashMap : centralHashMap.values()) - entries += weakHashMap.size(); - - return entries; - } - - @SuppressWarnings("unchecked") - T pushData(T data) { - Class classObjectKey = data.getClass(); - WeakHashMap> weakHashMap = centralHashMap.get(classObjectKey); - - if (weakHashMap == null) - return data; - - WeakReference value = weakHashMap.get(data); - if (value == null) { - WeakReference weakRef = new WeakReference(data); - weakHashMap.put(data, weakRef); - return data; - } - - return value.get(); - } - - public void clear() { - for (WeakHashMap weakHashMap : centralHashMap.values()) - weakHashMap.clear(); - } -} diff --git a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/model/IndexedAttributeModel.java b/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/model/IndexedAttributeModel.java deleted file mode 100644 index a69ebf18a6..0000000000 --- a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/model/IndexedAttributeModel.java +++ /dev/null @@ -1,77 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian , Martin Ε kurla -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.data.attributes.model; - -import org.gephi.data.attributes.AbstractAttributeModel; -import org.gephi.data.attributes.api.AttributeType; -import org.gephi.data.attributes.event.AttributeEventManager; -import org.gephi.project.api.Workspace; - -/** - * - * @author Mathieu Bastian - * @author Martin Ε kurla - */ -public class IndexedAttributeModel extends AbstractAttributeModel { - - protected DataIndex dataIndex; - - public IndexedAttributeModel(Workspace workspace) { - super(workspace); - dataIndex = new DataIndex(); - eventManager = new AttributeEventManager(this); - createPropertiesColumn(); - - eventManager.start(); - } - - @Override - public Object getManagedValue(Object obj, AttributeType attributeType) { - return dataIndex.pushData(obj); - } - - @Override - public void clear() { - super.clear(); - dataIndex.clear(); - } -} diff --git a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/model/TemporaryAttributeModel.java b/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/model/TemporaryAttributeModel.java deleted file mode 100644 index 727b989c6a..0000000000 --- a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/model/TemporaryAttributeModel.java +++ /dev/null @@ -1,83 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes.model; - -import org.gephi.data.attributes.AbstractAttributeModel; -import org.gephi.data.attributes.api.AttributeListener; -import org.gephi.data.attributes.api.AttributeType; -import org.gephi.data.attributes.event.AbstractEvent; -import org.gephi.project.api.Workspace; - -/** - * Specific manager for temporary storing of attributes. This is typically used when new attributes are - * imported in the system. No index system is required. - *

    - * - * @author Mathieu Bastian - * @see IndexedAttributeManager - */ -public class TemporaryAttributeModel extends AbstractAttributeModel { - - public TemporaryAttributeModel(Workspace workspace) { - super(workspace); - createPropertiesColumn(); - } - - @Override - public Object getManagedValue(Object obj, AttributeType attributeType) { - return obj; - } - - @Override - public void addAttributeListener(AttributeListener listener) { - throw new UnsupportedOperationException("Temporary Attribute Model doens't supper events"); - } - - @Override - public void removeAttributeListener(AttributeListener listener) { - throw new UnsupportedOperationException("Temporary Attribute Model doens't supper events"); - } - - @Override - public void fireAttributeEvent(AbstractEvent event) { - } -} diff --git a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/serialization/AttributeModelPersistenceProvider.java b/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/serialization/AttributeModelPersistenceProvider.java deleted file mode 100644 index 2cb4dd45cd..0000000000 --- a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/serialization/AttributeModelPersistenceProvider.java +++ /dev/null @@ -1,90 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes.serialization; - -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamReader; -import javax.xml.stream.XMLStreamWriter; -import org.gephi.data.attributes.AbstractAttributeModel; -import org.gephi.data.attributes.api.AttributeModel; -import org.gephi.data.attributes.model.IndexedAttributeModel; -import org.gephi.project.api.Workspace; -import org.gephi.project.spi.WorkspacePersistenceProvider; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = WorkspacePersistenceProvider.class, position = 10) -public class AttributeModelPersistenceProvider implements WorkspacePersistenceProvider { - - public void writeXML(XMLStreamWriter writer, Workspace workspace) { - AttributeModel model = workspace.getLookup().lookup(AttributeModel.class); - AttributeModelSerializer serializer = new AttributeModelSerializer(); - if (model instanceof AbstractAttributeModel) { - try { - serializer.writeModel(writer, (AbstractAttributeModel) model); - } catch (XMLStreamException ex) { - throw new RuntimeException(ex); - } - } - } - - public void readXML(XMLStreamReader reader, Workspace workspace) { - IndexedAttributeModel model = workspace.getLookup().lookup(IndexedAttributeModel.class); - if (model == null) { - model = new IndexedAttributeModel(workspace); - workspace.add(model); - } - AttributeModelSerializer serializer = new AttributeModelSerializer(); - try { - serializer.readModel(reader, model); - } catch (XMLStreamException ex) { - throw new RuntimeException(ex); - } - } - - public String getIdentifier() { - return "attributemodel"; - } -} diff --git a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/serialization/AttributeModelSerializer.java b/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/serialization/AttributeModelSerializer.java deleted file mode 100644 index 9691a18124..0000000000 --- a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/serialization/AttributeModelSerializer.java +++ /dev/null @@ -1,239 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes.serialization; - -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamReader; -import javax.xml.stream.XMLStreamWriter; -import org.gephi.data.attributes.AbstractAttributeModel; -import org.gephi.data.attributes.AttributeColumnImpl; -import org.gephi.data.attributes.AttributeTableImpl; -import org.gephi.data.attributes.api.AttributeOrigin; -import org.gephi.data.attributes.api.AttributeType; - -/** - * - * @author Mathieu Bastian - */ -public class AttributeModelSerializer { - - private static final String ELEMENT_MODEL = "attributemodel"; - private static final String ELEMENT_TABLE = "table"; - private static final String ELEMENT_COLUMN = "column"; - private static final String ELEMENT_COLUMN_INDEX = "index"; - private static final String ELEMENT_COLUMN_ID = "id"; - private static final String ELEMENT_COLUMN_TITLE = "title"; - private static final String ELEMENT_COLUMN_TYPE = "type"; - private static final String ELEMENT_COLUMN_ORIGIN = "origin"; - private static final String ELEMENT_COLUMN_DEFAULT = "default"; - - public void writeModel(XMLStreamWriter writer, AbstractAttributeModel model) throws XMLStreamException { - writer.writeStartElement(ELEMENT_MODEL); - - if (model != null) { - for (AttributeTableImpl table : model.getTables()) { - writeTable(writer, table, model); - } - } - - writer.writeEndElement(); - } - - public void readModel(XMLStreamReader reader, AbstractAttributeModel model) throws XMLStreamException { - boolean end = false; - while (reader.hasNext() && !end) { - int type = reader.next(); - - switch (type) { - case XMLStreamReader.START_ELEMENT: - String name = reader.getLocalName(); - if (ELEMENT_TABLE.equalsIgnoreCase(name)) { - AttributeTableImpl table; - if (Boolean.parseBoolean(reader.getAttributeValue(null, "nodetable"))) { - table = model.getNodeTable(); - } else if (Boolean.parseBoolean(reader.getAttributeValue(null, "edgetable"))) { - table = model.getEdgeTable(); - } else if (Boolean.parseBoolean(reader.getAttributeValue(null, "graphtable"))) { - table = model.getGraphTable(); - } else { - table = new AttributeTableImpl(model, ""); - } - readTable(reader, table); - if (table != model.getNodeTable() && table != model.getEdgeTable() && table != model.getGraphTable()) { - model.addTable(table); - } - } - break; - case XMLStreamReader.END_ELEMENT: - if (ELEMENT_MODEL.equalsIgnoreCase(reader.getLocalName())) { - end = true; - } - break; - } - } - } - - public void writeTable(XMLStreamWriter writer, AttributeTableImpl table, AbstractAttributeModel model) throws XMLStreamException { - writer.writeStartElement(ELEMENT_TABLE); - - writer.writeAttribute("name", table.getName()); - writer.writeAttribute("version", String.valueOf(table.getVersion())); - writer.writeAttribute("nodetable", String.valueOf(table == model.getNodeTable())); - writer.writeAttribute("edgetable", String.valueOf(table == model.getEdgeTable())); - writer.writeAttribute("graphtable", String.valueOf(table == model.getGraphTable())); - - for (AttributeColumnImpl columnImpl : table.getColumns()) { - writeColumn(writer, columnImpl); - } - writer.writeEndElement(); - } - - public void readTable(XMLStreamReader reader, AttributeTableImpl table) throws XMLStreamException { - table.setName(reader.getAttributeValue(null, "name")); - int version = Integer.parseInt(reader.getAttributeValue(null, "version")); - - boolean end = false; - while (reader.hasNext() && !end) { - int type = reader.next(); - - switch (type) { - case XMLStreamReader.START_ELEMENT: - String name = reader.getLocalName(); - if (ELEMENT_COLUMN.equalsIgnoreCase(name)) { - readColumn(reader, table); - } - break; - case XMLStreamReader.END_ELEMENT: - if (ELEMENT_TABLE.equalsIgnoreCase(reader.getLocalName())) { - end = true; - } - break; - } - } - - table.setVersion(version); - } - - public void writeColumn(XMLStreamWriter writer, AttributeColumnImpl column) throws XMLStreamException { - writer.writeStartElement(ELEMENT_COLUMN); - - writer.writeStartElement(ELEMENT_COLUMN_INDEX); - writer.writeCharacters(String.valueOf(column.getIndex())); - writer.writeEndElement(); - - writer.writeStartElement(ELEMENT_COLUMN_ID); - writer.writeCharacters(String.valueOf(column.getId())); - writer.writeEndElement(); - - writer.writeStartElement(ELEMENT_COLUMN_TITLE); - writer.writeCharacters(String.valueOf(column.getTitle())); - writer.writeEndElement(); - - writer.writeStartElement(ELEMENT_COLUMN_TYPE); - writer.writeCharacters(column.getType().getTypeString()); - writer.writeEndElement(); - - writer.writeStartElement(ELEMENT_COLUMN_ORIGIN); - writer.writeCharacters(column.getOrigin().name()); - writer.writeEndElement(); - - writer.writeStartElement(ELEMENT_COLUMN_DEFAULT); - if (column.getDefaultValue() != null) { - writer.writeCharacters(column.getDefaultValue().toString()); - } - writer.writeEndElement(); - - writer.writeEndElement(); - } - - public void readColumn(XMLStreamReader reader, AttributeTableImpl table) throws XMLStreamException { - - int index = 0; - String id = ""; - String title = ""; - AttributeType type = AttributeType.STRING; - AttributeOrigin origin = AttributeOrigin.DATA; - String defaultValue = ""; - - boolean end = false; - String name = null; - while (reader.hasNext() && !end) { - int t = reader.next(); - - switch (t) { - case XMLStreamReader.START_ELEMENT: - name = reader.getLocalName(); - break; - case XMLStreamReader.CHARACTERS: - if (!reader.isWhiteSpace()) { - if (ELEMENT_COLUMN_INDEX.equalsIgnoreCase(name)) { - index = Integer.parseInt(reader.getText()); - } else if (ELEMENT_COLUMN_ID.equalsIgnoreCase(name)) { - id += reader.getText(); - } else if (ELEMENT_COLUMN_TITLE.equalsIgnoreCase(name)) { - title += reader.getText(); - } else if (ELEMENT_COLUMN_TYPE.equalsIgnoreCase(name)) { - type = AttributeType.valueOf(reader.getText()); - } else if (ELEMENT_COLUMN_ORIGIN.equalsIgnoreCase(name)) { - origin = AttributeOrigin.valueOf(reader.getText()); - } else if (ELEMENT_COLUMN_DEFAULT.equalsIgnoreCase(name)) { - if (!reader.getText().isEmpty()) { - defaultValue += reader.getText(); - } - } - } - break; - case XMLStreamReader.END_ELEMENT: - if (ELEMENT_COLUMN.equalsIgnoreCase(reader.getLocalName())) { - end = true; - } - break; - } - } - Object defaultVal = !defaultValue.isEmpty() ? type.parse(defaultValue) : null; - if (!table.hasColumn(title)) { - table.addColumn(id, title, type, origin, defaultVal); - } else { - table.replaceColumn(table.getColumn(title), id, title, type, origin, defaultVal); - } - } -} diff --git a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/serialization/AttributeRowPersistenceProvider.java b/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/serialization/AttributeRowPersistenceProvider.java deleted file mode 100644 index 56a222dddc..0000000000 --- a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/serialization/AttributeRowPersistenceProvider.java +++ /dev/null @@ -1,90 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes.serialization; - -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamReader; -import javax.xml.stream.XMLStreamWriter; -import org.gephi.data.attributes.AbstractAttributeModel; -import org.gephi.data.attributes.api.AttributeModel; -import org.gephi.graph.api.GraphModel; -import org.gephi.project.api.Workspace; -import org.gephi.project.spi.WorkspacePersistenceProvider; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = WorkspacePersistenceProvider.class, position = 15000) -public class AttributeRowPersistenceProvider implements WorkspacePersistenceProvider { - - public void writeXML(XMLStreamWriter writer, Workspace workspace) { - AttributeModel model = workspace.getLookup().lookup(AttributeModel.class); - GraphModel graphModel = workspace.getLookup().lookup(GraphModel.class); - AttributeRowSerializer serializer = new AttributeRowSerializer(); - if (model != null && graphModel != null && model instanceof AbstractAttributeModel) { - try { - serializer.writeRows(writer, graphModel); - } catch (XMLStreamException ex) { - throw new RuntimeException(ex); - } - } - } - - public void readXML(XMLStreamReader reader, Workspace workspace) { - AttributeModel model = workspace.getLookup().lookup(AttributeModel.class); - GraphModel graphModel = workspace.getLookup().lookup(GraphModel.class); - AttributeRowSerializer serializer = new AttributeRowSerializer(); - if (model != null && graphModel != null && model instanceof AbstractAttributeModel) { - try { - serializer.readRows(reader, graphModel, (AbstractAttributeModel) model); - } catch (XMLStreamException ex) { - throw new RuntimeException(ex); - } - } - } - - public String getIdentifier() { - return "attributerows"; - } -} diff --git a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/serialization/AttributeRowSerializer.java b/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/serialization/AttributeRowSerializer.java deleted file mode 100644 index c560aa3edb..0000000000 --- a/modules/AttributesImpl/src/main/java/org/gephi/data/attributes/serialization/AttributeRowSerializer.java +++ /dev/null @@ -1,192 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.data.attributes.serialization; - -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamReader; -import javax.xml.stream.XMLStreamWriter; -import org.gephi.data.attributes.AbstractAttributeModel; -import org.gephi.data.attributes.AttributeRowImpl; -import org.gephi.data.attributes.AttributeTableImpl; -import org.gephi.data.attributes.api.AttributeType; -import org.gephi.data.attributes.api.AttributeValue; -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.GraphModel; -import org.gephi.graph.api.HierarchicalGraph; -import org.gephi.graph.api.Node; - -/** - * - * @author Mathieu Bastian - */ -public class AttributeRowSerializer { - - private static final String ELEMENT_ROWS = "attributerows"; - private static final String ELEMENT_NODE_ROW = "noderow"; - private static final String ELEMENT_EDGE_ROW = "edgerow"; - private static final String ELEMENT_VALUE = "attvalue"; - - public void writeRows(XMLStreamWriter writer, GraphModel graphModel) throws XMLStreamException { - writer.writeStartElement(ELEMENT_ROWS); - - HierarchicalGraph hierarchicalGraph = graphModel.getHierarchicalGraph(); - for (Node node : hierarchicalGraph.getNodesTree()) { - if (node.getNodeData().getAttributes() != null && node.getNodeData().getAttributes() instanceof AttributeRowImpl) { - AttributeRowImpl row = (AttributeRowImpl) node.getNodeData().getAttributes(); - writer.writeStartElement(ELEMENT_NODE_ROW); - writer.writeAttribute("for", String.valueOf(node.getId())); - if (writeRow(writer, row)) { - writer.writeEndElement(); - } - } - } - - for (Edge edge : hierarchicalGraph.getEdges()) { - if (edge.getEdgeData().getAttributes() != null && edge.getEdgeData().getAttributes() instanceof AttributeRowImpl) { - AttributeRowImpl row = (AttributeRowImpl) edge.getEdgeData().getAttributes(); - writer.writeStartElement(ELEMENT_EDGE_ROW); - writer.writeAttribute("for", String.valueOf(edge.getId())); - if (writeRow(writer, row)) { - writer.writeEndElement(); - } - } - } - - writer.writeEndElement(); - } - - public void readRows(XMLStreamReader reader, GraphModel graphModel, AbstractAttributeModel attributeModel) throws XMLStreamException { - HierarchicalGraph hierarchicalGraph = graphModel.getHierarchicalGraph(); - - boolean end = false; - while (reader.hasNext() && !end) { - int type = reader.next(); - - switch (type) { - case XMLStreamReader.START_ELEMENT: - String name = reader.getLocalName(); - if (ELEMENT_NODE_ROW.equalsIgnoreCase(name)) { - int id = Integer.parseInt(reader.getAttributeValue(null, "for")); - Node node = hierarchicalGraph.getNode(id); - if (node.getNodeData().getAttributes() != null && node.getNodeData().getAttributes() instanceof AttributeRowImpl) { - AttributeRowImpl row = (AttributeRowImpl) node.getNodeData().getAttributes(); - readRow(reader, attributeModel, attributeModel.getNodeTable(), row); - } - } else if (ELEMENT_EDGE_ROW.equalsIgnoreCase(name)) { - int id = Integer.parseInt(reader.getAttributeValue(null, "for")); - Edge edge = hierarchicalGraph.getEdge(id); - if (edge.getEdgeData().getAttributes() != null && edge.getEdgeData().getAttributes() instanceof AttributeRowImpl) { - AttributeRowImpl row = (AttributeRowImpl) edge.getEdgeData().getAttributes(); - readRow(reader, attributeModel, attributeModel.getEdgeTable(), row); - } - } - break; - case XMLStreamReader.END_ELEMENT: - if (ELEMENT_ROWS.equalsIgnoreCase(reader.getLocalName())) { - end = true; - } - break; - } - } - } - - public boolean writeRow(XMLStreamWriter writer, AttributeRowImpl row) throws XMLStreamException { - writer.writeAttribute("version", String.valueOf(row.getRowVersion())); - int writtenRows = 0; - for (AttributeValue value : row.getValues()) { - int index = value.getColumn().getIndex(); - Object obj = value.getValue(); - if (obj != null) { - writtenRows++; - writer.writeStartElement(ELEMENT_VALUE); - writer.writeAttribute("index", String.valueOf(index)); - writer.writeCharacters(obj.toString()); - writer.writeEndElement(); - } - } - return writtenRows > 0; - } - - public void readRow(XMLStreamReader reader, AbstractAttributeModel model, AttributeTableImpl table, AttributeRowImpl row) throws XMLStreamException { - row.setRowVersion(Integer.parseInt(reader.getAttributeValue(null, "version"))); - Integer index = null; - String value = ""; - - boolean end = false; - while (reader.hasNext() && !end) { - int t = reader.next(); - - switch (t) { - case XMLStreamReader.START_ELEMENT: - String name = reader.getLocalName(); - if (ELEMENT_VALUE.equalsIgnoreCase(name)) { - index = Integer.parseInt(reader.getAttributeValue(null, "index")); - } - break; - case XMLStreamReader.CHARACTERS: - if (!reader.isWhiteSpace() && index != null) { - value += reader.getText(); - } - break; - case XMLStreamReader.END_ELEMENT: - if (ELEMENT_NODE_ROW.equalsIgnoreCase(reader.getLocalName()) || ELEMENT_EDGE_ROW.equalsIgnoreCase(reader.getLocalName())) { - end = true; - } - if (!value.isEmpty() && index != null) { - AttributeType type = table.getColumn(index).getType(); - Object v = type.parse(value); - if (v != null) { - v = model.getManagedValue(v, type); - } else { - Logger.getLogger(AttributeRowSerializer.class.getName()).log(Level.WARNING, "Unable to parse \"{0}\" as type {1}", new Object[]{value, type.toString()}); - } - row.setValue(index, v); - } - value = ""; - index = null; - break; - } - } - } -} diff --git a/modules/AttributesImpl/src/main/nbm/manifest.mf b/modules/AttributesImpl/src/main/nbm/manifest.mf deleted file mode 100644 index 75c904d965..0000000000 --- a/modules/AttributesImpl/src/main/nbm/manifest.mf +++ /dev/null @@ -1,4 +0,0 @@ -Manifest-Version: 1.0 -AutoUpdate-Essential-Module: true -OpenIDE-Module-Localizing-Bundle: org/gephi/data/attributes/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file diff --git a/modules/AttributesImpl/src/main/nbm/module.xml b/modules/AttributesImpl/src/main/nbm/module.xml deleted file mode 100644 index a21d3290fd..0000000000 --- a/modules/AttributesImpl/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/Bundle.properties b/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/Bundle.properties deleted file mode 100644 index 9dc0cd8084..0000000000 --- a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/Bundle.properties +++ /dev/null @@ -1,6 +0,0 @@ -OpenIDE-Module-Display-Category=Gephi Core -OpenIDE-Module-Name=Attributes Impl -NodeAttributeTable.name = Nodes -EdgeAttributeTable.name = Edges -GraphAttributeTable.name = Graph -OpenIDE-Module-Short-Description=Attributes API default implementation. diff --git a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/Bundle_cs.properties b/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/Bundle_cs.properties deleted file mode 100644 index d73ac2343f..0000000000 --- a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/Bundle_cs.properties +++ /dev/null @@ -1,15 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-29 20\:31+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -NodeAttributeTable.name=Uzly - -EdgeAttributeTable.name=Hrany - -GraphAttributeTable.name=Graf - -OpenIDE-Module-Short-Description=V\u00fdchoz\u00ed zaveden\u00e9 API vlastnost\u00ed diff --git a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/Bundle_es.properties b/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/Bundle_es.properties deleted file mode 100644 index 8d748062d0..0000000000 --- a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/Bundle_es.properties +++ /dev/null @@ -1,16 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-16 23\:07+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -NodeAttributeTable.name=Nodos - -EdgeAttributeTable.name=Aristas - -GraphAttributeTable.name=Grafo - -OpenIDE-Module-Short-Description=Implementaci\u00f3n por defecto del m\u00f3dulo Attributes API diff --git a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/Bundle_fr.properties b/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/Bundle_fr.properties deleted file mode 100644 index 78b768f648..0000000000 --- a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/Bundle_fr.properties +++ /dev/null @@ -1,16 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-08 15\:11+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -NodeAttributeTable.name=Noeuds - -EdgeAttributeTable.name=Liens - -GraphAttributeTable.name=Graphe - -OpenIDE-Module-Short-Description=Impl\u00e9mentation standard du module Attributes API diff --git a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/Bundle_ja.properties b/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/Bundle_ja.properties deleted file mode 100644 index aba0133c4d..0000000000 --- a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/Bundle_ja.properties +++ /dev/null @@ -1,15 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-15 02\:15+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -NodeAttributeTable.name=\u30ce\u30fc\u30c9 - -EdgeAttributeTable.name=\u8fba - -GraphAttributeTable.name=\u30b0\u30e9\u30d5 - -OpenIDE-Module-Short-Description=\u5c5e\u6027API\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5b9f\u88c5 diff --git a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/Bundle_oc.properties b/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/Bundle_oc.properties deleted file mode 100644 index 72cec5b30a..0000000000 --- a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/Bundle_oc.properties +++ /dev/null @@ -1,12 +0,0 @@ -# Occitan (post 1500) translation for gephi -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the gephi package. -# FIRST AUTHOR , 2010. -# -!=Project-Id-Version\: gephi\nReport-Msgid-Bugs-To\: FULL NAME \nPOT-Creation-Date\: 2010-04-07 13\:16+0200\nPO-Revision-Date\: 2010-10-21 13\:36+0000\nLast-Translator\: C\u00e9dric VALMARY (Tot en \u00f2c) \nLanguage-Team\: Occitan (post 1500) \nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nX-Launchpad-Export-Date\: 2011-03-13 04\:46+0000\nX-Generator\: Launchpad (build 12559)\n - -NodeAttributeTable.name=Nos\u00e8ls - -EdgeAttributeTable.name=Ligams - -OpenIDE-Module-Short-Description=Implementacion estandarda del modul Attributes API diff --git a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/Bundle_pt_BR.properties b/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/Bundle_pt_BR.properties deleted file mode 100644 index ea829feafe..0000000000 --- a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/Bundle_pt_BR.properties +++ /dev/null @@ -1,16 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -# C\u00e9lio Faria Jr. , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-17 13\:08+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -NodeAttributeTable.name=N\u00f3s - -EdgeAttributeTable.name=Arestas - -GraphAttributeTable.name=Grafo - -OpenIDE-Module-Short-Description=Implementa\u00e7\u00e3o padr\u00e3o da API Attributes. diff --git a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/Bundle_ru.properties b/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/Bundle_ru.properties deleted file mode 100644 index 62a69e0da1..0000000000 --- a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/Bundle_ru.properties +++ /dev/null @@ -1,16 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-15 08\:32+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -NodeAttributeTable.name=\u0423\u0437\u043b\u044b - -EdgeAttributeTable.name=\u0420\u0451\u0431\u0440\u0430 - -GraphAttributeTable.name=\u0413\u0440\u0430\u0444 - -OpenIDE-Module-Short-Description=\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0435 API \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430\u043c\u0438 diff --git a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/Bundle_zh_CN.properties b/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/Bundle_zh_CN.properties deleted file mode 100644 index 7029dff5c0..0000000000 --- a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/Bundle_zh_CN.properties +++ /dev/null @@ -1,15 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-15 09\:34+0000\nLast-Translator\: Xi-Nian Zuo \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -NodeAttributeTable.name=\u8282\u70b9 - -EdgeAttributeTable.name=\u8fb9 - -GraphAttributeTable.name=\u56fe - -OpenIDE-Module-Short-Description=\u5c5e\u6027API\u7684\u9ed8\u8ba4\u5b9e\u73b0\u3002 diff --git a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/cs.po b/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/cs.po deleted file mode 100644 index b83d16a817..0000000000 --- a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/cs.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-29 20:31+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "NodeAttributeTable.name" -msgstr "Uzly" - -msgid "EdgeAttributeTable.name" -msgstr "Hrany" - -msgid "GraphAttributeTable.name" -msgstr "Graf" - -msgid "OpenIDE-Module-Short-Description" -msgstr "VΓ½chozΓ­ zavedenΓ© API vlastnostΓ­" diff --git a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/es.po b/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/es.po deleted file mode 100644 index 643ff1c2c8..0000000000 --- a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/es.po +++ /dev/null @@ -1,32 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-16 23:07+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "NodeAttributeTable.name" -msgstr "Nodos" - -msgid "EdgeAttributeTable.name" -msgstr "Aristas" - -msgid "GraphAttributeTable.name" -msgstr "Grafo" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplementaciΓ³n por defecto del mΓ³dulo Attributes API" diff --git a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/fr.po b/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/fr.po deleted file mode 100644 index 7f49c6912b..0000000000 --- a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/fr.po +++ /dev/null @@ -1,32 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-08 15:11+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "NodeAttributeTable.name" -msgstr "Noeuds" - -msgid "EdgeAttributeTable.name" -msgstr "Liens" - -msgid "GraphAttributeTable.name" -msgstr "Graphe" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplΓ©mentation standard du module Attributes API" diff --git a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/ja.po b/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/ja.po deleted file mode 100644 index 0290b93b92..0000000000 --- a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/ja.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-15 02:15+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "NodeAttributeTable.name" -msgstr "γƒŽγƒΌγƒ‰" - -msgid "EdgeAttributeTable.name" -msgstr "θΎΊ" - -msgid "GraphAttributeTable.name" -msgstr "グラフ" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ε±žζ€§APIγγƒ‡γƒ•γ‚©γƒ«γƒˆγεŸθ£…" diff --git a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/org-gephi-data-attributes.pot b/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/org-gephi-data-attributes.pot deleted file mode 100644 index 5e71070074..0000000000 --- a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/org-gephi-data-attributes.pot +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "NodeAttributeTable.name" -msgstr "Nodes" - -msgid "EdgeAttributeTable.name" -msgstr "Edges" - -msgid "GraphAttributeTable.name" -msgstr "Graph" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Attributes API default implementation." diff --git a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/pt_BR.po b/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/pt_BR.po deleted file mode 100644 index 8554be0b1e..0000000000 --- a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/pt_BR.po +++ /dev/null @@ -1,32 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -# CΓ©lio Faria Jr. , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-17 13:08+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "NodeAttributeTable.name" -msgstr "NΓ³s" - -msgid "EdgeAttributeTable.name" -msgstr "Arestas" - -msgid "GraphAttributeTable.name" -msgstr "Grafo" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplementaΓ§Γ£o padrΓ£o da API Attributes." diff --git a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/ru.po b/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/ru.po deleted file mode 100644 index ceb45840d8..0000000000 --- a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/ru.po +++ /dev/null @@ -1,32 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-15 08:32+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "NodeAttributeTable.name" -msgstr "Π£Π·Π»Ρ‹" - -msgid "EdgeAttributeTable.name" -msgstr "Π Ρ‘Π±Ρ€Π°" - -msgid "GraphAttributeTable.name" -msgstr "Π“Ρ€Π°Ρ„" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½ΠΎΠ΅ API для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°ΠΌΠΈ" diff --git a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/zh_CN.po b/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/zh_CN.po deleted file mode 100644 index 394d175b94..0000000000 --- a/modules/AttributesImpl/src/main/resources/org/gephi/data/attributes/zh_CN.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-15 09:34+0000\n" -"Last-Translator: Xi-Nian Zuo \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "NodeAttributeTable.name" -msgstr "θŠ‚η‚Ή" - -msgid "EdgeAttributeTable.name" -msgstr "θΎΉ" - -msgid "GraphAttributeTable.name" -msgstr "ε›Ύ" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ε±žζ€§APIηš„ι»˜θ€εžηŽ°γ€‚" diff --git a/modules/BatikWrapper/pom.xml b/modules/BatikWrapper/pom.xml new file mode 100644 index 0000000000..d95bf06c86 --- /dev/null +++ b/modules/BatikWrapper/pom.xml @@ -0,0 +1,64 @@ + + + 4.0.0 + + gephi-parent + org.gephi + 0.11.3-SNAPSHOT + ../.. + + + org.gephi + batik-wrapper + 0.11.3-SNAPSHOT + nbm + + BatikWrapper + + + 1.19 + + + + + org.apache.xmlgraphics + batik-transcoder + ${gephi.batik.version} + + + + xml-apis + xml-apis + + + xalan + xalan + + + commons-logging + commons-logging + + + commons-io + commons-io + + + + + + + + + org.apache.netbeans.utilities + nbm-maven-plugin + + autoload + + org.w3c.* + org.apache.batik.* + + + + + + diff --git a/modules/BatikWrapper/src/main/nbm/manifest.mf b/modules/BatikWrapper/src/main/nbm/manifest.mf new file mode 100644 index 0000000000..8c68aeff0f --- /dev/null +++ b/modules/BatikWrapper/src/main/nbm/manifest.mf @@ -0,0 +1,5 @@ +Manifest-Version: 1.0 +AutoUpdate-Essential-Module: true +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Libraries +OpenIDE-Module-Name: Batik Wrapper \ No newline at end of file diff --git a/modules/ClusteringAPI/pom.xml b/modules/ClusteringAPI/pom.xml deleted file mode 100644 index 020b89ae48..0000000000 --- a/modules/ClusteringAPI/pom.xml +++ /dev/null @@ -1,39 +0,0 @@ - - - 4.0.0 - - gephi-parent - org.gephi - 0.9-SNAPSHOT - ../.. - - - org.gephi - clustering-api - 0.9-SNAPSHOT - nbm - - ClusteringAPI - - - - ${project.groupId} - graph-api - - - - - - - org.codehaus.mojo - nbm-maven-plugin - - - org.gephi.clustering.api - org.gephi.clustering.spi - - - - - - diff --git a/modules/ClusteringAPI/src/main/java/org/gephi/clustering/api/Cluster.java b/modules/ClusteringAPI/src/main/java/org/gephi/clustering/api/Cluster.java deleted file mode 100644 index 42aa999af6..0000000000 --- a/modules/ClusteringAPI/src/main/java/org/gephi/clustering/api/Cluster.java +++ /dev/null @@ -1,61 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.clustering.api; - -import org.gephi.graph.api.Node; - -/** - * - * @author Mathieu Bastian - */ -public interface Cluster { - - public Node[] getNodes(); - - public int getNodesCount(); - - public String getName(); - - public Node getMetaNode(); - - public void setMetaNode(Node node); -} diff --git a/modules/ClusteringAPI/src/main/java/org/gephi/clustering/api/ClusteringController.java b/modules/ClusteringAPI/src/main/java/org/gephi/clustering/api/ClusteringController.java deleted file mode 100644 index eebf364b87..0000000000 --- a/modules/ClusteringAPI/src/main/java/org/gephi/clustering/api/ClusteringController.java +++ /dev/null @@ -1,65 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.clustering.api; - -import org.gephi.clustering.spi.Clusterer; - -/** - * - * @author Mathieu Bastian - */ -public interface ClusteringController { - - public void clusterize(Clusterer clusterer); - - public void cancelClusterize(Clusterer clusterer); - - public void selectCluster(Cluster cluster); - - public void groupCluster(Cluster cluster); - - public void ungroupCluster(Cluster cluster); - - public boolean canGroup(Cluster cluster); - - public boolean canUngroup(Cluster cluster); -} diff --git a/modules/ClusteringAPI/src/main/java/org/gephi/clustering/api/ClusteringModel.java b/modules/ClusteringAPI/src/main/java/org/gephi/clustering/api/ClusteringModel.java deleted file mode 100644 index 3c674a00ec..0000000000 --- a/modules/ClusteringAPI/src/main/java/org/gephi/clustering/api/ClusteringModel.java +++ /dev/null @@ -1,64 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.clustering.api; - -import javax.swing.event.ChangeListener; -import org.gephi.clustering.spi.Clusterer; - -/** - * - * @author Mathieu Bastian - */ -public interface ClusteringModel { - - public Clusterer getSelectedClusterer(); - - public Clusterer[] getClusterers(); - - public void setRunning(boolean running); - - public boolean isRunning(); - - public void addChangeListener(ChangeListener changeListener); - - public void removeChangeListener(ChangeListener changeListener); -} diff --git a/modules/ClusteringAPI/src/main/java/org/gephi/clustering/spi/Clusterer.java b/modules/ClusteringAPI/src/main/java/org/gephi/clustering/spi/Clusterer.java deleted file mode 100644 index fa567f3ddc..0000000000 --- a/modules/ClusteringAPI/src/main/java/org/gephi/clustering/spi/Clusterer.java +++ /dev/null @@ -1,56 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.clustering.spi; - -import org.gephi.clustering.api.Cluster; -import org.gephi.graph.api.GraphModel; - -/** - * - * @author Mathieu Bastian - */ -public interface Clusterer { - - public void execute(GraphModel graphModel); - - public Cluster[] getClusters(); -} diff --git a/modules/ClusteringAPI/src/main/java/org/gephi/clustering/spi/ClustererBuilder.java b/modules/ClusteringAPI/src/main/java/org/gephi/clustering/spi/ClustererBuilder.java deleted file mode 100644 index c74ff8bb0a..0000000000 --- a/modules/ClusteringAPI/src/main/java/org/gephi/clustering/spi/ClustererBuilder.java +++ /dev/null @@ -1,59 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.clustering.spi; - -/** - * - * @author Mathieu Bastian - */ -public interface ClustererBuilder { - - public Clusterer getClusterer(); - - public String getName(); - - public String getDescription(); - - public Class getClustererClass(); - - public ClustererUI getUI(); -} diff --git a/modules/ClusteringAPI/src/main/java/org/gephi/clustering/spi/ClustererUI.java b/modules/ClusteringAPI/src/main/java/org/gephi/clustering/spi/ClustererUI.java deleted file mode 100644 index 834cc64ab5..0000000000 --- a/modules/ClusteringAPI/src/main/java/org/gephi/clustering/spi/ClustererUI.java +++ /dev/null @@ -1,57 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.clustering.spi; - -import javax.swing.JPanel; - -/** - * - * @author Mathieu Bastian - */ -public interface ClustererUI { - - public JPanel getPanel(); - - public void setup(Clusterer clusterer); - - public void unsetup(); -} diff --git a/modules/ClusteringAPI/src/main/nbm/manifest.mf b/modules/ClusteringAPI/src/main/nbm/manifest.mf deleted file mode 100644 index 92f3750d95..0000000000 --- a/modules/ClusteringAPI/src/main/nbm/manifest.mf +++ /dev/null @@ -1,4 +0,0 @@ -Manifest-Version: 1.0 -AutoUpdate-Essential-Module: true -OpenIDE-Module-Localizing-Bundle: org/gephi/clustering/api/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file diff --git a/modules/ClusteringAPI/src/main/nbm/module.xml b/modules/ClusteringAPI/src/main/nbm/module.xml deleted file mode 100644 index 86b1182c46..0000000000 --- a/modules/ClusteringAPI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/Bundle.properties b/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/Bundle.properties deleted file mode 100644 index 093382605e..0000000000 --- a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/Bundle.properties +++ /dev/null @@ -1,5 +0,0 @@ -OpenIDE-Module-Display-Category=Gephi Core -OpenIDE-Module-Long-Description=\ - API/SPI for clustering algorithms (experimental) -OpenIDE-Module-Name=Clustering API -OpenIDE-Module-Short-Description=API/SPI for clustering algorithms (experimental) diff --git a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/Bundle_cs.properties b/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/Bundle_cs.properties deleted file mode 100644 index fac17ff00b..0000000000 --- a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/Bundle_cs.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-29 20\:30+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=API/SPI pro algoritmy shlukov\u00e1n\u00ed (experiment\u00e1ln\u00ed) - -OpenIDE-Module-Short-Description=API/SPI pro algoritmy shlukov\u00e1n\u00ed (experiment\u00e1ln\u00ed) diff --git a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/Bundle_es.properties b/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/Bundle_es.properties deleted file mode 100644 index b3e56c78ba..0000000000 --- a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/Bundle_es.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:30+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=API/SPI para algoritmos de clustering (experimental) - -OpenIDE-Module-Short-Description=API/SPI para algoritmos de clustering (experimental) diff --git a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/Bundle_fr.properties b/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/Bundle_fr.properties deleted file mode 100644 index 94923fc222..0000000000 --- a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/Bundle_fr.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:30+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API/SPI pour algorithmes de clustering (exp\u00e9rimental) - -OpenIDE-Module-Short-Description=API/SPI pour algorithmes de clustering (exp\u00e9rimental) diff --git a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/Bundle_ja.properties b/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/Bundle_ja.properties deleted file mode 100644 index 58102a1699..0000000000 --- a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/Bundle_ja.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-13 08\:44+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u30af\u30e9\u30b9\u30bf\u30fc\u5316\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306eAPI/SPI(\u5b9f\u9a13\u7684) - -OpenIDE-Module-Short-Description=\u30af\u30e9\u30b9\u30bf\u30fc\u5316\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306eAPI/SPI(\u5b9f\u9a13\u7684) diff --git a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/Bundle_oc.properties b/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/Bundle_oc.properties deleted file mode 100644 index ac1749d60a..0000000000 --- a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/Bundle_oc.properties +++ /dev/null @@ -1,10 +0,0 @@ -# Occitan (post 1500) translation for gephi -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the gephi package. -# FIRST AUTHOR , 2010. -# -!=Project-Id-Version\: gephi\nReport-Msgid-Bugs-To\: FULL NAME \nPOT-Creation-Date\: 2010-04-07 13\:16+0200\nPO-Revision-Date\: 2010-10-21 13\:36+0000\nLast-Translator\: C\u00e9dric VALMARY (Tot en \u00f2c) \nLanguage-Team\: Occitan (post 1500) \nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nX-Launchpad-Export-Date\: 2011-03-13 04\:46+0000\nX-Generator\: Launchpad (build 12559)\n - -OpenIDE-Module-Long-Description=API/SPI per algoritmes de clustering (experimental) - -OpenIDE-Module-Short-Description=API/SPI per algoritmes de clustering (experimental) diff --git a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/Bundle_pt_BR.properties b/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/Bundle_pt_BR.properties deleted file mode 100644 index 269cdf0991..0000000000 --- a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/Bundle_pt_BR.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 19\:24+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API/SPI de algoritmos de clustering (experimental) - -OpenIDE-Module-Short-Description=API/SPI de algoritmos de clustering (experimental) diff --git a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/Bundle_ru.properties b/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/Bundle_ru.properties deleted file mode 100644 index bbcf59b467..0000000000 --- a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/Bundle_ru.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:30+0000\nLast-Translator\: gephi \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=API/SPI \u0434\u043b\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 (\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f) - -OpenIDE-Module-Short-Description=API/SPI \u0434\u043b\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 (\u044d\u043a\u0441\u043f\u0435\u0440\u0438\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u044f) diff --git a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/Bundle_zh_CN.properties b/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/Bundle_zh_CN.properties deleted file mode 100644 index 7ec52191a7..0000000000 --- a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/Bundle_zh_CN.properties +++ /dev/null @@ -1,10 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:20+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u805a\u7c7b\u7b97\u6cd5\u7684\u5e94\u7528\u7a0b\u5e8f\u63a5\u53e3API\u548c\u670d\u52a1\u63d0\u4f9b\u501f\u53e3SPI(\u8bd5\u9a8c\u9636\u6bb5\u529f\u80fd) - -OpenIDE-Module-Short-Description=\u805a\u7c7b\u7b97\u6cd5\u7684\u5e94\u7528\u7a0b\u5e8f\u63a5\u53e3API\u548c\u670d\u52a1\u63d0\u4f9b\u501f\u53e3SPI(\u8bd5\u9a8c\u9636\u6bb5\u529f\u80fd) diff --git a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/cs.po b/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/cs.po deleted file mode 100644 index f71d0e60df..0000000000 --- a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/cs.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-29 20:30+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI pro algoritmy shlukovΓ‘nΓ­ (experimentΓ‘lnΓ­)" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI pro algoritmy shlukovΓ‘nΓ­ (experimentΓ‘lnΓ­)" diff --git a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/es.po b/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/es.po deleted file mode 100644 index 98907c9785..0000000000 --- a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/es.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:30+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI para algoritmos de clustering (experimental)" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI para algoritmos de clustering (experimental)" diff --git a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/fr.po b/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/fr.po deleted file mode 100644 index 06c592ba65..0000000000 --- a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/fr.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:30+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI pour algorithmes de clustering (expΓ©rimental)" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI pour algorithmes de clustering (expΓ©rimental)" diff --git a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/ja.po b/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/ja.po deleted file mode 100644 index 6d48b3e159..0000000000 --- a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-13 08:44+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "γ‚―γƒ©γ‚Ήγ‚ΏγƒΌεŒ–γ‚’γƒ«γ‚΄γƒͺγ‚Ίγƒ γAPI/SPI(εŸι¨“ηš„)" - -msgid "OpenIDE-Module-Short-Description" -msgstr "γ‚―γƒ©γ‚Ήγ‚ΏγƒΌεŒ–γ‚’γƒ«γ‚΄γƒͺγ‚Ίγƒ γAPI/SPI(εŸι¨“ηš„)" diff --git a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/org-gephi-clustering-api.pot b/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/org-gephi-clustering-api.pot deleted file mode 100644 index aaab0fc8ea..0000000000 --- a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/org-gephi-clustering-api.pot +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI for clustering algorithms (experimental)" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI for clustering algorithms (experimental)" diff --git a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/package.html b/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/package.html deleted file mode 100644 index d8992fa828..0000000000 --- a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/package.html +++ /dev/null @@ -1,6 +0,0 @@ - - - - API for clustering algorithm execution. - - \ No newline at end of file diff --git a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/pt_BR.po b/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/pt_BR.po deleted file mode 100644 index 10f47b51f6..0000000000 --- a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/pt_BR.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 19:24+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI de algoritmos de clustering (experimental)" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI de algoritmos de clustering (experimental)" diff --git a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/ru.po b/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/ru.po deleted file mode 100644 index a7fb8ea149..0000000000 --- a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/ru.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:30+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI для Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² кластСризации (ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ функция)" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI для Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΎΠ² кластСризации (ΡΠΊΡΠΏΠ΅Ρ€ΠΈΠΌΠ΅Π½Ρ‚Π°Π»ΡŒΠ½Π°Ρ функция)" diff --git a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/zh_CN.po b/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/zh_CN.po deleted file mode 100644 index 7f26dc247e..0000000000 --- a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/api/zh_CN.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:20+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "聚类η—ζ³•ηš„εΊ”η”¨η¨‹εΊζŽ₯口APIε’ŒζœεŠ‘ζδΎ›ε€Ÿε£SPI(θ―•ιͺŒι˜Άζ΅εŠŸθƒ½)" - -msgid "OpenIDE-Module-Short-Description" -msgstr "聚类η—ζ³•ηš„εΊ”η”¨η¨‹εΊζŽ₯口APIε’ŒζœεŠ‘ζδΎ›ε€Ÿε£SPI(θ―•ιͺŒι˜Άζ΅εŠŸθƒ½)" diff --git a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/spi/package.html b/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/spi/package.html deleted file mode 100644 index c07f23d9bd..0000000000 --- a/modules/ClusteringAPI/src/main/resources/org/gephi/clustering/spi/package.html +++ /dev/null @@ -1,9 +0,0 @@ - - - - Interfaces for clustering algorithms definition. -

    - The algorithm is defined by the ClustererBuilder interface. -

    - - \ No newline at end of file diff --git a/modules/ClusteringPlugin/pom.xml b/modules/ClusteringPlugin/pom.xml deleted file mode 100644 index 10308ebbd1..0000000000 --- a/modules/ClusteringPlugin/pom.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - 4.0.0 - - gephi-parent - org.gephi - 0.9-SNAPSHOT - ../.. - - - org.gephi - clustering-plugin - 0.9-SNAPSHOT - nbm - - ClusteringPlugin - - - - ${project.groupId} - graph-api - - - ${project.groupId} - clustering-api - - - ${project.groupId} - utils-longtask - - - org.netbeans.api - org-openide-util - - - org.netbeans.api - org-openide-util-lookup - - - - - - - org.codehaus.mojo - nbm-maven-plugin - - - org.gephi.clustering.plugin.mcl - - - - - - diff --git a/modules/ClusteringPlugin/src/main/java/org/gephi/clustering/plugin/mcl/MarkovClustering.java b/modules/ClusteringPlugin/src/main/java/org/gephi/clustering/plugin/mcl/MarkovClustering.java deleted file mode 100644 index 1fdf9e3935..0000000000 --- a/modules/ClusteringPlugin/src/main/java/org/gephi/clustering/plugin/mcl/MarkovClustering.java +++ /dev/null @@ -1,454 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.clustering.plugin.mcl; - -import java.util.ArrayList; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import org.gephi.clustering.api.Cluster; -import org.gephi.clustering.spi.Clusterer; -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.Graph; -import org.gephi.graph.api.GraphModel; -import org.gephi.graph.api.Node; -import org.gephi.utils.longtask.spi.LongTask; -import org.gephi.utils.progress.Progress; -import org.gephi.utils.progress.ProgressTicket; - -/** - * MarkovClustering implements the Markov clustering (MCL) algorithm for graphs, - * using a HashMap-based sparse representation of a Markov matrix, i.e., an - * adjacency matrix m that is normalised to one. Elements in a column / node can - * be interpreted as decision probabilities of a random walker being at that - * node. Note: whereas we explain the algorithms with columns, the actual - * implementation works with rows because the used sparse matrix has row-major - * format. - *

    - * The basic idea underlying the MCL algorithm is that dense regions in sparse - * graphs correspond with regions in which the number of k-length paths is - * relatively large, for small k in N, which corresponds to multiplying - * probabilities in the matrix appropriately. Random walks of length k have - * higher probability (product) for paths with beginning and ending in the same - * dense region than for other paths. - *

    - * The algorithm starts by creating a Markov matrix from the graph, for which - * first the adjacency matrix is added diagonal elements to include self-loops - * for all nodes, i.e., probabilities that the random walker stays at a - * particular node. After this initialisation, the algorithm works by - * alternating two operations, expansion and inflation, iteratively recomputing - * the set of transition probabilities. The expansion step corresponds to matrix - * multiplication (on stochastic matrices), the inflation step corresponds with - * a parametrized inflation operator Gamma_r, which acts column-wise on (column) - * stochastic matrices (here, we use row-wise operation, which is analogous). - *

    - * The inflation operator transforms a stochastic matrix into another one by - * raising each element to a positive power p and re-normalising columns to keep - * the matrix stochastic. The effect is that larger probabilities in each column - * are emphasised and smaller ones deemphasised. On the other side, the matrix - * multiplication in the expansion step creates new non-zero elements, i.e., - * edges. The algorithm converges very fast, and the result is an idempotent - * Markov matrix, M = M * M, which represents a hard clustering of the graph - * into components. - *

    - * Expansion and inflation have two opposing effects: While expansion flattens - * the stochastic distributions in the columns and thus causes paths of a random - * walker to become more evenly spread, inflation contracts them to favoured - * paths. - *

    - * Description is based on the introduction of Stijn van Dongen's thesis Graph - * Clustering by Flow Simulation (2000); for a mathematical treatment of the - * algorithm and the associated MCL process, see there. - */ -//Original author Gregor Heinrich -public class MarkovClustering implements Clusterer, LongTask { - - private double maxResidual = 0.001; - private double gammaExp = 2.0; - private double loopGain = 0.; - private double zeroMax = 0.001; - private Cluster[] clusters; - //LongTask - private ProgressTicket progressTicket; - private boolean cancelled; - - public void execute(GraphModel graphModel) { - cancelled = false; - Progress.start(progressTicket); - Progress.setDisplayName(progressTicket, "MCL Clustering"); - - HashMap nodeMap = new HashMap(); - HashMap intMap = new HashMap(); - - Graph graph = graphModel.getGraphVisible(); - graph.readLock(); - - //Load matrix - SparseMatrix matrix = new SparseMatrix(); - int nodeId = 0; - for (Edge e : graph.getEdges()) { - Node source = e.getSource(); - Node target = e.getTarget(); - Integer sourceId; - Integer targetId; - if ((sourceId = intMap.get(source)) == null) { - sourceId = nodeId++; - intMap.put(source, sourceId); - nodeMap.put(sourceId, source); - } - if ((targetId = intMap.get(target)) == null) { - targetId = nodeId++; - intMap.put(target, targetId); - nodeMap.put(targetId, target); - } - double weight = e.getWeight(); - matrix.add(sourceId, targetId, weight); - - if (cancelled) { - graph.readUnlockAll(); - return; - } - } - - graph.readUnlock(); - - matrix = matrix.transpose(); - matrix = run(matrix, maxResidual, gammaExp, loopGain, zeroMax); - - if (cancelled) { - return; - } - - Map> map = getClusters(matrix); - - if (cancelled) { - return; - } - - int clusterNumber = 1; - List clustersList = new ArrayList(); - Set> sortedClusters = new HashSet>(); - for (ArrayList c : map.values()) { - if (!sortedClusters.contains(c)) { - sortedClusters.add(c); - Node[] nodes = new Node[c.size()]; - int i = 0; - for (Integer in : c) { - Node node = nodeMap.get(in); - nodes[i] = node; - i++; - } - clustersList.add(new MCLCluster(nodes, clusterNumber)); - clusterNumber++; - } - if (cancelled) { - return; - } - } - clusters = clustersList.toArray(new Cluster[0]); - - Progress.finish(progressTicket); - } - - public Cluster[] getClusters() { - return clusters; - } - - public boolean cancel() { - cancelled = true; - return true; - } - - public void setProgressTicket(ProgressTicket progressTicket) { - this.progressTicket = progressTicket; - } - - private static class MCLCluster implements Cluster { - - private Node[] nodes; - private String name; - private Node metaNode; - - public MCLCluster(Node[] nodes, int number) { - this.nodes = nodes; - this.name = "Cluster " + number; - } - - public Node[] getNodes() { - return nodes; - } - - public int getNodesCount() { - return nodes.length; - } - - public String getName() { - return name; - } - - public Node getMetaNode() { - return metaNode; - } - - public void setMetaNode(Node node) { - this.metaNode = node; - } - } - - /** - * run the MCL process. - * - * @param a matrix - * @param maxResidual maximum difference between row elements and row square - * sum (measure of idempotence) - * @param pGamma inflation exponent for Gamma operator - * @param loopGain values for cycles - * @param maxZero maximum value considered zero for pruning operations - * @return the resulting matrix - */ - public SparseMatrix run(SparseMatrix a, double maxResidual, double pGamma, double loopGain, double maxZero) { - - //System.out.println("original matrix\n" + a.transpose().toStringDense()); - - // add cycles - addLoops(a, loopGain); - - // make stochastic - a.normaliseRows(); - //System.out.println("normalised\n" + a.transpose().toStringDense()); - - double residual = 1.; - int i = 0; - - if (cancelled) { - return a; - } - - // main iteration - while (residual > maxResidual) { - i++; - a = expand(a); - residual = inflate(a, pGamma, maxZero); - System.out.println("residual energy = " + residual); - if (cancelled) { - return a; - } - } - return a; - } - - /** - * inflate stochastic matrix by Hadamard (elementwise) exponentiation, - * pruning and normalisation : - *

    - * result = Gamma ( m, p ) = normalise ( prune ( m .^ p ) ). - *

    - * By convention, normalisation is done along rows (SparseMatrix has - * row-major representation) - * - * @param m matrix (mutable) - * @param p exponent as a double - * @param zeromax below which elements are pruned from the sparse matrix - * @return residuum value, m is modified. - */ - public double inflate(SparseMatrix m, double p, double zeromax) { - double res = 0.; - - // matlab: m = m .^ p - m.hadamardPower(p); - // matlab: m(find(m < threshold)) = 0 - m.prune(zeromax); - // matlab [for cols]: dinv = diag(1./sum(m)); m = m * dinv; return - // sum(m) - SparseVector rowsums = m.normalise(1.); - - // check if done: if the maximum element - for (int i : rowsums.keySet()) { - SparseVector row = m.get(i); - double max = row.max(); - double sumsq = row.sum(2.); - res = Math.max(res, max - sumsq); - if (cancelled) { - return res; - } - } - return res; - } - - /** - * expand stochastic quadratic matrix by sqaring it with itself: result = m * - * m. Here normalisation is rowwise. - * - * @param matrix - * @return new matrix (pointer != argument) - */ - public SparseMatrix expand(SparseMatrix m) { - m = m.times(m); - return m; - } - - /** - * add loops with specific energy, which corresponds to adding loopGain to - * the diagonal elements. - * - * @param a - * @param loopGain - */ - private void addLoops(SparseMatrix a, double loopGain) { - if (loopGain <= 0) { - return; - } - for (int i = 0; i < a.size(); i++) { - a.add(i, i, loopGain); - if (cancelled) { - return; - } - } - } - - public double getGammaExp() { - return gammaExp; - } - - /** - * Set inflation exponent for Gamma operator. Default is 2.0 - */ - public void setGammaExp(double gammaExp) { - this.gammaExp = gammaExp; - } - - public double getLoopGain() { - return loopGain; - } - - /** - * Set values for cycles. Default is 0.0 - */ - public void setLoopGain(double loopGain) { - this.loopGain = loopGain; - } - - public double getMaxResidual() { - return maxResidual; - } - - /** - * Set the maximum difference between row elements and row square sum (measure of idempotence). Default is 0.001 - */ - public void setMaxResidual(double maxResidual) { - this.maxResidual = maxResidual; - } - - public double getZeroMax() { - return zeroMax; - } - - /** - * Set the maximum value considered zero for pruning operations. Default is 0.001 - */ - public void setZeroMax(double zeroMax) { - this.zeroMax = zeroMax; - } - - private Map> getClusters(SparseMatrix matrix) { - - Map> clusters = new HashMap>(); - int clusterCount = 0; - - double[][] mat = matrix.getDense(); - for (int i = 0; i < mat.length; i++) { - for (int j = 0; j < mat[0].length; j++) { - double value = mat[i][j]; - if (value != 0.0) { - if (i == j) { - continue; - } - - if (clusters.containsKey(j)) { - // Already seen "column" -- get the cluster and add column - ArrayList columnCluster = clusters.get(j); - if (clusters.containsKey(i)) { - // We've already seen row also -- join them - ArrayList rowCluster = clusters.get(i); - if (rowCluster == columnCluster) { - continue; - } - columnCluster.addAll(rowCluster); - clusterCount--; - } else { - // debugln("Adding "+row+" to "+columnCluster.getClusterNumber()); - columnCluster.add(i); - } - for (Integer in : columnCluster) { - clusters.put(in, columnCluster); - } - } else { - ArrayList rowCluster; - // First time we've seen "column" -- have we already seen "row" - if (clusters.containsKey(i)) { - // Yes, just add column to row's cluster - rowCluster = clusters.get(i); - // debugln("Adding "+column+" to "+rowCluster.getClusterNumber()); - rowCluster.add(j); - } else { - rowCluster = new ArrayList(); - clusterCount++; - // debugln("Created new cluster "+rowCluster.getClusterNumber()+" with "+row+" and "+column); - rowCluster.add(j); - rowCluster.add(i); - } - for (Integer in : rowCluster) { - clusters.put(in, rowCluster); - } - } - } - if (cancelled) { - return clusters; - } - } - } - - return clusters; - } -} diff --git a/modules/ClusteringPlugin/src/main/java/org/gephi/clustering/plugin/mcl/MarkovClusteringBuilder.java b/modules/ClusteringPlugin/src/main/java/org/gephi/clustering/plugin/mcl/MarkovClusteringBuilder.java deleted file mode 100644 index 93ace7bc75..0000000000 --- a/modules/ClusteringPlugin/src/main/java/org/gephi/clustering/plugin/mcl/MarkovClusteringBuilder.java +++ /dev/null @@ -1,96 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.clustering.plugin.mcl; - -import javax.swing.JPanel; -import org.gephi.clustering.spi.Clusterer; -import org.gephi.clustering.spi.ClustererBuilder; -import org.gephi.clustering.spi.ClustererUI; -import org.openide.util.NbBundle; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = ClustererBuilder.class) -public class MarkovClusteringBuilder implements ClustererBuilder { - - public Clusterer getClusterer() { - return new MarkovClustering(); - } - - public String getName() { - return "MCL (experimental)"; - } - - public String getDescription() { - return NbBundle.getMessage(MarkovClusteringBuilder.class, "MarkovClustering.description"); - } - - public Class getClustererClass() { - return MarkovClustering.class; - } - - public ClustererUI getUI() { - return new MarkovClusteringUI(); - } - - private static class MarkovClusteringUI implements ClustererUI { - - MarkovClusteringPanel panel; - - public JPanel getPanel() { - panel = new MarkovClusteringPanel(); - return panel; - } - - public void setup(Clusterer clusterer) { - panel.setup(clusterer); - } - - public void unsetup() { - panel.unsetup(); - panel = null; - } - } -} diff --git a/modules/ClusteringPlugin/src/main/java/org/gephi/clustering/plugin/mcl/MarkovClusteringPanel.form b/modules/ClusteringPlugin/src/main/java/org/gephi/clustering/plugin/mcl/MarkovClusteringPanel.form deleted file mode 100644 index ae42640101..0000000000 --- a/modules/ClusteringPlugin/src/main/java/org/gephi/clustering/plugin/mcl/MarkovClusteringPanel.form +++ /dev/null @@ -1,124 +0,0 @@ - - -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    diff --git a/modules/ClusteringPlugin/src/main/java/org/gephi/clustering/plugin/mcl/MarkovClusteringPanel.java b/modules/ClusteringPlugin/src/main/java/org/gephi/clustering/plugin/mcl/MarkovClusteringPanel.java deleted file mode 100644 index e734b8f88d..0000000000 --- a/modules/ClusteringPlugin/src/main/java/org/gephi/clustering/plugin/mcl/MarkovClusteringPanel.java +++ /dev/null @@ -1,170 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.clustering.plugin.mcl; - -import org.gephi.clustering.spi.Clusterer; - -/** - * - * @author Mathieu Bastian - */ -public class MarkovClusteringPanel extends javax.swing.JPanel { - - private MarkovClustering markovClustering; - - public MarkovClusteringPanel() { - initComponents(); - } - - public void setup(Clusterer clusterer) { - markovClustering = (MarkovClustering) clusterer; - gamma.setText("" + markovClustering.getGammaExp()); - maxresidual.setText("" + markovClustering.getMaxResidual()); - loop.setText("" + markovClustering.getLoopGain()); - zeromax.setText("" + markovClustering.getZeroMax()); - } - - public void unsetup() { - try { - markovClustering.setGammaExp(Double.parseDouble(gamma.getText())); - } catch (Exception e) { - } - try { - markovClustering.setLoopGain(Double.parseDouble(loop.getText())); - } catch (Exception e) { - } - try { - markovClustering.setMaxResidual(Double.parseDouble(maxresidual.getText())); - } catch (Exception e) { - } - try { - markovClustering.setZeroMax(Double.parseDouble(zeromax.getText())); - } catch (Exception e) { - } - } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // //GEN-BEGIN:initComponents - private void initComponents() { - - jLabel4 = new javax.swing.JLabel(); - maxresidual = new javax.swing.JTextField(); - loop = new javax.swing.JTextField(); - jLabel3 = new javax.swing.JLabel(); - jLabel2 = new javax.swing.JLabel(); - gamma = new javax.swing.JTextField(); - zeromax = new javax.swing.JTextField(); - jLabel1 = new javax.swing.JLabel(); - - jLabel4.setText(org.openide.util.NbBundle.getMessage(MarkovClusteringPanel.class, "MarkovClusteringPanel.jLabel4.text")); // NOI18N - - maxresidual.setText(org.openide.util.NbBundle.getMessage(MarkovClusteringPanel.class, "MarkovClusteringPanel.maxresidual.text")); // NOI18N - - loop.setText(org.openide.util.NbBundle.getMessage(MarkovClusteringPanel.class, "MarkovClusteringPanel.loop.text")); // NOI18N - - jLabel3.setText(org.openide.util.NbBundle.getMessage(MarkovClusteringPanel.class, "MarkovClusteringPanel.jLabel3.text")); // NOI18N - - jLabel2.setText(org.openide.util.NbBundle.getMessage(MarkovClusteringPanel.class, "MarkovClusteringPanel.jLabel2.text")); // NOI18N - - gamma.setText(org.openide.util.NbBundle.getMessage(MarkovClusteringPanel.class, "MarkovClusteringPanel.gamma.text")); // NOI18N - - zeromax.setText(org.openide.util.NbBundle.getMessage(MarkovClusteringPanel.class, "MarkovClusteringPanel.zeromax.text")); // NOI18N - - jLabel1.setText(org.openide.util.NbBundle.getMessage(MarkovClusteringPanel.class, "MarkovClusteringPanel.jLabel1.text")); // NOI18N - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jLabel4) - .addComponent(jLabel3) - .addComponent(jLabel2) - .addComponent(jLabel1)) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(loop) - .addComponent(gamma) - .addComponent(zeromax) - .addComponent(maxresidual, javax.swing.GroupLayout.PREFERRED_SIZE, 45, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(jLabel1) - .addComponent(zeromax, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(jLabel2) - .addComponent(gamma, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(jLabel3) - .addComponent(loop, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(jLabel4) - .addComponent(maxresidual, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JTextField gamma; - private javax.swing.JLabel jLabel1; - private javax.swing.JLabel jLabel2; - private javax.swing.JLabel jLabel3; - private javax.swing.JLabel jLabel4; - private javax.swing.JTextField loop; - private javax.swing.JTextField maxresidual; - private javax.swing.JTextField zeromax; - // End of variables declaration//GEN-END:variables -} diff --git a/modules/ClusteringPlugin/src/main/java/org/gephi/clustering/plugin/mcl/SparseMatrix.java b/modules/ClusteringPlugin/src/main/java/org/gephi/clustering/plugin/mcl/SparseMatrix.java deleted file mode 100644 index 2f1e69c32e..0000000000 --- a/modules/ClusteringPlugin/src/main/java/org/gephi/clustering/plugin/mcl/SparseMatrix.java +++ /dev/null @@ -1,434 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.clustering.plugin.mcl; - -import java.util.ArrayList; -import java.util.Collections; - -/** - * SparseMatrix is a sparse matrix with row-major format. - *

    - * Conventions: except for the inherited methods and normalise(double), - * operations leave this ummodified (immutable) if there is a return - * value. Within operations, no pruning of values close to zero is done. Pruning - * can be controlled via the prune() method. - */ -//Original author Gregor Heinrich -public class SparseMatrix extends ArrayList { - - private static final long serialVersionUID = 1L; - private int maxVLength; - - /** - * empty sparse matrix - */ - public SparseMatrix() { - super(); - } - - /** - * empty sparse matrix with allocated number of rows - * - * @param rows - * @param cols - */ - public SparseMatrix(int rows, int cols) { - this(); - adjustMaxIndex(rows - 1, cols - 1); - } - - /** - * create sparse matrix from full matrix - * - * @param x - */ - public SparseMatrix(double[][] x) { - this(x.length - 1, x[0].length - 1); - for (int i = 0; i < x.length; i++) { - SparseVector v = new SparseVector(x[i]); - set(i, v); - } - } - - /** - * copy contructor - * - * @param matrix - */ - public SparseMatrix(SparseMatrix matrix) { - for (SparseVector s : matrix) { - add(s.copy()); - } - } - - /** - * create dense representation - * - * @return - */ - public double[][] getDense() { - double[][] aa = new double[size()][]; - for (int i = 0; i < size(); i++) { - aa[i] = new double[maxVLength]; - for (int j : get(i).keySet()) { - aa[i][j] = get(i).get(j); - } - } - return aa; - } - - /** - * set the sparse vector at index i. - * - * @param i - * @param x - * @return the old value of the element - */ - public SparseVector set(int i, SparseVector x) { - adjustMaxIndex(i, x.getLength() - 1); - return super.set(i, x); - } - - /** - * get number at index or 0. if not set. If index > size, returns 0. - * - * @param i - * @param j - * @return - */ - public double get(int i, int j) { - if (i > size() - 1) { - return 0.; - } - return get(i).get(j); - } - - /** - * set the value at the index i,j, returning the old value or 0. Increase - * matrix size if index exceeds the dimension. - * - * @param i - * @param j - * @param a - * @return - */ - public double set(int i, int j, double a) { - adjustMaxIndex(i, j); - double b = get(i).get(j); - get(i).put(j, a); - return b; - } - - /** - * adjusts the size of the matrix. - * - * @param i index addressed - * @param j index addressed - */ - public void adjustMaxIndex(int i, int j) { - if (i > size() - 1) { - increase(i); - } - if (j >= maxVLength) { - maxVLength = j + 1; - for (int row = 0; row < size(); row++) { - get(row).setLength(maxVLength); - } - } - } - - /** - * increase the size of the matrix with empty element SparseVectors. - * - * @param i - */ - private void increase(int i) { - addAll(Collections.nCopies(i - size() + 1, new SparseVector())); - } - - /** - * get the size of the matrix - * - * @return - */ - public int[] getSize() { - return new int[]{size(), maxVLength}; - - } - - /** - * adds a to the specified element, growing the matrix if necessary. - * - * @param i - * @param j - * @param a - * @return new value - */ - public double add(int i, int j, double a) { - adjustMaxIndex(i, j); - double b = get(i, j); - a += b; - set(i, j, a); - return a; - } - - /** - * normalise rows to rowsum - * - * @param rowsum for each row - * @return vector of old row sums - */ - public SparseVector normalise(double rowsum) { - SparseVector sums = new SparseVector(); - int i = 0; - for (SparseVector vec : this) { - sums.put(i, vec.normalise(rowsum)); - i++; - } - return sums; - } - - /** - * normalise by major dimension (rows) - */ - public void normaliseRows() { - for (SparseVector vec : this) { - vec.normalise(); - } - } - - /** - * normalise by minor dimension (columns), expensive. - */ - public void normaliseCols() { - double[] sums = new double[maxVLength]; - for (int row = 0; row < size(); row++) { - for (int col = 0; col < get(row).getLength(); col++) { - sums[col] += get(row).get(col); - } - } - for (int row = 0; row < size(); row++) { - for (int col = 0; col < get(row).getLength(); col++) { - get(row).mult(col, 1 / sums[col]); - } - } - } - - /** - * copy the matrix and its elements - */ - public SparseMatrix copy() { - return new SparseMatrix(this); - } - - /** - * immutable multiply this times the vector: A * x, i.e., rowwise. - * - * @param v - * @return - */ - public SparseVector times(SparseVector v) { - SparseVector w = new SparseVector(); - for (int i = 0; i < size(); i++) { - w.add(i, get(i).times(v)); - } - return w; - } - - /** - * immutable multiply the vector times this: x' * A, i.e., colwise. - * - * @param v - * @return - */ - public SparseVector vectorTimes(SparseVector v) { - SparseVector w = new SparseVector(); - // only the rows in A that v is nonzero - for (int i : v.keySet()) { - SparseVector a = get(i).copy(); - a.factor(v.get(i)); - w.add(a); - } - return w; - } - - /** - * mutable multiply this matrix (A) with M : A * M' - * - * @param m - * @return modified this - */ - public SparseMatrix timesTransposed(SparseMatrix m) { - // A*M = ;( A(i,:) * M ) - for (int i = 0; i < size(); i++) { - set(i, m.times(get(i))); - } - return this; - } - - /** - * immutable multiply this matrix (A) with M : A * M - * - * @param m - * @return matrix product - */ - public SparseMatrix times(SparseMatrix m) { - SparseMatrix s = new SparseMatrix(); - for (int i = 0; i < size(); i++) { - for (int j = 0; j < m.size(); j++) { - for (int k : get(i).keySet()) { - double a = m.get(k, j); - if (a != 0.) { - s.add(i, j, get(i, k) * a); - } - } - } - } - return s; - } - - /** - * immutable multiply matrix M with this (A) : M * A - * - * @param m - * @return - */ - public SparseMatrix matrixTimes(SparseMatrix m) { - return m.times(this); - } - - /** - * immutable transpose. - * - * @return - */ - public SparseMatrix transpose() { - SparseMatrix s = new SparseMatrix(); - for (int i = 0; i < size(); i++) { - s.set(i, getColum(i)); - } - return s; - } - - /** - * get a column of the sparse matrix (expensive). - * - * @return - */ - public SparseVector getColum(int i) { - SparseVector s = new SparseVector(); - for (int row = 0; row < size(); row++) { - double v = get(row, i); - if (v != 0.) { - s.put(row, v); - } - } - return s; - } - - /** - * mutable Hadamard product - * - * @param m - */ - public void hadamardProduct(SparseMatrix m) { - for (int i = 0; i < size(); i++) { - get(i).hadamardProduct(m.get(i)); - } - } - - /** - * mutable m2 = m .^ s - * - * @param s - * @return - */ - public void hadamardPower(double s) { - for (int i = 0; i < size(); i++) { - get(i).hadamardPower(s); - } - } - - /* - * (non-Javadoc) - * - * @see java.lang.Object#toString() - */ - @Override - public String toString() { - StringBuffer sb = new StringBuffer(); - for (int i = 0; i < size(); i++) { - sb.append(i).append(" => ").append(get(i)).append("\n"); - } - return sb.toString(); - } - - /** - * prints a dense representation - * - * @return - */ - public String toStringDense() { - double[][] dense = getDense(); - StringBuffer b = new StringBuffer(); - for (int i = 0; i < dense.length - 1; i++) { - for (int j = 0; j < dense[i].length; j++) { - b.append(Double.toString(dense[i][j])).append(" "); - } - b.append("\n"); - } - return b.toString(); - } - - /** - * prune all values whose magnitude is below threshold - */ - public void prune(double threshold) { - // for (SparseVector v : this) { - for (int i = 0; i < size(); i++) { - SparseVector a = get(i); - a.prune(threshold); - } - - } -} - diff --git a/modules/ClusteringPlugin/src/main/java/org/gephi/clustering/plugin/mcl/SparseVector.java b/modules/ClusteringPlugin/src/main/java/org/gephi/clustering/plugin/mcl/SparseVector.java deleted file mode 100644 index 55ebae367d..0000000000 --- a/modules/ClusteringPlugin/src/main/java/org/gephi/clustering/plugin/mcl/SparseVector.java +++ /dev/null @@ -1,356 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.clustering.plugin.mcl; - -import java.util.HashMap; -import java.util.Iterator; - -/** - * SparseVector represents a sparse vector. - *

    - * Conventions: except for the inherited methods and normalise(double), - * operations leave this ummodified (immutable) if there is a return - * value. Within operations, no pruning of values close to zero is done. Pruning - * can be controlled via the prune() method. - */ -//Original author Gregor Heinrich -public class SparseVector extends HashMap { - - private static final long serialVersionUID = 1L; - private int length = 0; - - /** - * create empty vector - */ - public SparseVector() { - super(); - } - - /** - * create empty vector with length - */ - public SparseVector(int i) { - this(); - length = i; - } - - /** - * create vector from dense vector - * - * @param x - */ - public SparseVector(double[] x) { - this(x.length); - for (int i = 0; i < x.length; i++) { - if (x[i] != 0) { - put(i, x[i]); - } - } - } - - /** - * copy constructor - * - * @param v - */ - public SparseVector(SparseVector v) { - super(v); - this.length = v.length; - } - - /** - * get ensures it returns 0 for empty hash values or if index exceeds - * length. - * - * @param key - * @return val - */ - @Override - public Double get(Object key) { - Double b = super.get(key); - if (b == null) { - return 0.; - } - return b; - } - - /** - * put increases the matrix size if the index exceeds the current size. - * - * @param key - * @param value - * @return - */ - @Override - public Double put(Integer key, Double value) { - length = Math.max(length, key + 1); - if (value == 0) { - return remove(key); - } - return super.put(key, value); - } - - /** - * normalises the vector to 1. - */ - public void normalise() { - double invsum = 1. / sum(); - for (int i : keySet()) { - mult(i, invsum); - } - } - - /** - * normalises the vector to newsum - * - * @param the value to which the element sum - * @return the old element sum - */ - public double normalise(double newsum) { - double sum = sum(); - double invsum = newsum / sum; - for (int i : keySet()) { - mult(i, invsum); - } - return sum; - } - - /** - * sum of the elements - * - * @return - */ - private double sum() { - double sum = 0; - for (double a : values()) { - sum += a; - } - return sum; - } - - /** - * power sum of the elements - * - * @return - */ - public double sum(double s) { - double sum = 0; - for (double a : values()) { - sum += Math.pow(a, s); - } - return sum; - } - - /** - * mutable add - * - * @param v - */ - public void add(SparseVector v) { - for (int i : keySet()) { - add(i, v.get(i)); - } - } - - /** - * mutable mult - * - * @param i index - * @param a value - */ - public void mult(int i, double a) { - Double c = get(i); - c *= a; - put(i, c); - } - - /** - * mutable factorisation - * - * @param a - */ - public void factor(double a) { - SparseVector s = copy(); - for (int i : keySet()) { - s.mult(i, a); - } - } - - /** - * immutable scalar product - * - * @param v - * @return scalar product - */ - public double times(SparseVector v) { - double sum = 0; - for (int i : keySet()) { - sum += get(i) * v.get(i); - } - return sum; - } - - /** - * mutable Hadamard product (elementwise multiplication) - * - * @param v - */ - public void hadamardProduct(SparseVector v) { - for (int i : keySet()) { - put(i, v.get(i) * get(i)); - } - } - - /** - * mutable Hadamard power - * - * @param s - */ - public void hadamardPower(double s) { - for (int i : keySet().toArray(new Integer[0])) { - put(i, Math.pow(get(i), s)); - } - } - - /** - * mutable add - * - * @param i - * @param a - */ - public void add(int i, double a) { - length = Math.max(length, i + 1); - double c = get(i); - c += a; - put(i, c); - } - - /** - * get the length of the vector - * - * @return - */ - public final int getLength() { - return length; - } - - /** - * set the new length of the vector (regardless of the maximum index). - * - * @param length - */ - public final void setLength(int length) { - this.length = length; - } - - /** - * copy the contents of the sparse vector - * - * @return - */ - public SparseVector copy() { - return new SparseVector(this); - } - - @Override - public String toString() { - StringBuffer sb = new StringBuffer(); - for (int i : keySet()) { - sb.append(i).append("->").append(get(i)).append(", "); - } - return sb.toString(); - } - - /** - * get dense represenation - * - * @return - */ - public double[] getDense() { - double[] a = new double[length]; - for (int i : keySet()) { - a[i] = get(i); - } - return a; - } - - /** - * maximum element value - * - * @return - */ - public double max() { - double max = 0; - for (int i : keySet()) { - max = Math.max(get(i), max); - } - return max; - } - - /** - * exponential sum, i.e., sum (elements^p) - * - * @param p - * @return - */ - public double expSum(int p) { - double sum = 0; - for (double a : values()) { - sum += Math.pow(a, p); - } - return sum; - } - - /** - * remove all elements whose magnitude is < threshold - * - * @param threshold - */ - public void prune(double threshold) { - for (Iterator it = keySet().iterator(); it.hasNext();) { - int key = it.next(); - if (Math.abs(get(key)) < threshold) { - it.remove(); - } - } - } -} diff --git a/modules/ClusteringPlugin/src/main/nbm/manifest.mf b/modules/ClusteringPlugin/src/main/nbm/manifest.mf deleted file mode 100644 index e40e3026d7..0000000000 --- a/modules/ClusteringPlugin/src/main/nbm/manifest.mf +++ /dev/null @@ -1,4 +0,0 @@ -Manifest-Version: 1.0 -AutoUpdate-Essential-Module: true -OpenIDE-Module-Localizing-Bundle: org/gephi/clustering/plugin/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file diff --git a/modules/ClusteringPlugin/src/main/nbm/module.xml b/modules/ClusteringPlugin/src/main/nbm/module.xml deleted file mode 100644 index b5154d7435..0000000000 --- a/modules/ClusteringPlugin/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/Bundle.properties b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/Bundle.properties deleted file mode 100644 index 5c351a1184..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/Bundle.properties +++ /dev/null @@ -1,5 +0,0 @@ -OpenIDE-Module-Display-Category=Gephi Core -OpenIDE-Module-Long-Description=\ - Standard clustering algorithms -OpenIDE-Module-Name=Clustering Plugin -OpenIDE-Module-Short-Description=Standard clustering algorithms diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/Bundle_cs.properties b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/Bundle_cs.properties deleted file mode 100644 index d19eeb65e2..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/Bundle_cs.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-29 20\:29+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=Standardn\u00ed algoritmy shlukov\u00e1n\u00ed - -OpenIDE-Module-Short-Description=Standardn\u00ed algoritmy shlukov\u00e1n\u00ed diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/Bundle_es.properties b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/Bundle_es.properties deleted file mode 100644 index 1ba7ef8bba..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/Bundle_es.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:30+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Algoritmos est\u00e1ndar de clustering - -OpenIDE-Module-Short-Description=Algoritmos est\u00e1ndar de clustering diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/Bundle_fr.properties b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/Bundle_fr.properties deleted file mode 100644 index a0d0da6d5d..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/Bundle_fr.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:29+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Algorithmes classiques de clustering - -OpenIDE-Module-Short-Description=Algorithmes classiques de clustering diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/Bundle_ja.properties b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/Bundle_ja.properties deleted file mode 100644 index b6176ea7ac..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/Bundle_ja.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-13 08\:47+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u6a19\u6e96\u7684\u30af\u30e9\u30b9\u30bf\u30fc\u5316\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0 - -OpenIDE-Module-Short-Description=\u6a19\u6e96\u7684\u30af\u30e9\u30b9\u30bf\u30fc\u5316\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0 diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/Bundle_oc.properties b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/Bundle_oc.properties deleted file mode 100644 index 3c741c8171..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/Bundle_oc.properties +++ /dev/null @@ -1,10 +0,0 @@ -# Occitan (post 1500) translation for gephi -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the gephi package. -# FIRST AUTHOR , 2010. -# -!=Project-Id-Version\: gephi\nReport-Msgid-Bugs-To\: FULL NAME \nPOT-Creation-Date\: 2010-04-07 13\:16+0200\nPO-Revision-Date\: 2010-10-21 13\:36+0000\nLast-Translator\: C\u00e9dric VALMARY (Tot en \u00f2c) \nLanguage-Team\: Occitan (post 1500) \nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nX-Launchpad-Export-Date\: 2011-03-13 04\:46+0000\nX-Generator\: Launchpad (build 12559)\n - -OpenIDE-Module-Long-Description=Algoritmes classics de clustering - -OpenIDE-Module-Short-Description=Algoritmes classics de clustering diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/Bundle_pt_BR.properties b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/Bundle_pt_BR.properties deleted file mode 100644 index 2727f9157f..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/Bundle_pt_BR.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 23\:47+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Algoritmos padr\u00e3o de clustering - -OpenIDE-Module-Short-Description=Algoritmos padr\u00e3o de clustering diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/Bundle_ru.properties b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/Bundle_ru.properties deleted file mode 100644 index 01148874e7..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/Bundle_ru.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:29+0000\nLast-Translator\: gephi \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 - -OpenIDE-Module-Short-Description=\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/Bundle_zh_CN.properties b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/Bundle_zh_CN.properties deleted file mode 100644 index 15a5fdb409..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/Bundle_zh_CN.properties +++ /dev/null @@ -1,10 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:20+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u6807\u51c6\u805a\u7c7b\u7b97\u6cd5 - -OpenIDE-Module-Short-Description=\u6807\u51c6\u805a\u7c7b\u7b97\u6cd5 diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/cs.po b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/cs.po deleted file mode 100644 index 53737b405f..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/cs.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-29 20:29+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "StandardnΓ­ algoritmy shlukovΓ‘nΓ­" - -msgid "OpenIDE-Module-Short-Description" -msgstr "StandardnΓ­ algoritmy shlukovΓ‘nΓ­" diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/es.po b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/es.po deleted file mode 100644 index 8df726593d..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/es.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:30+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Algoritmos estΓ‘ndar de clustering" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Algoritmos estΓ‘ndar de clustering" diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/fr.po b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/fr.po deleted file mode 100644 index b9f46903d9..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/fr.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:29+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Algorithmes classiques de clustering" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Algorithmes classiques de clustering" diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/ja.po b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/ja.po deleted file mode 100644 index 6d52d309fd..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-13 08:47+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ζ¨™ζΊ–ηš„γ‚―γƒ©γ‚Ήγ‚ΏγƒΌεŒ–γ‚’γƒ«γ‚΄γƒͺγ‚Ίγƒ " - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζ¨™ζΊ–ηš„γ‚―γƒ©γ‚Ήγ‚ΏγƒΌεŒ–γ‚’γƒ«γ‚΄γƒͺγ‚Ίγƒ " diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/Bundle.properties b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/Bundle.properties deleted file mode 100644 index 83d58f1a2f..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/Bundle.properties +++ /dev/null @@ -1,10 +0,0 @@ -MarkovClustering.description = Markov Cluster Algorithm, a fast and scalable unsupervised cluster algorithm - -MarkovClusteringPanel.jLabel4.text=max-residual -MarkovClusteringPanel.jLabel1.text=zero-Max -MarkovClusteringPanel.zeromax.text=0.001 -MarkovClusteringPanel.gamma.text=2.0 -MarkovClusteringPanel.jLabel2.text=gamma -MarkovClusteringPanel.jLabel3.text=loop -MarkovClusteringPanel.loop.text=0 -MarkovClusteringPanel.maxresidual.text=0.001 \ No newline at end of file diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/Bundle_cs.properties b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/Bundle_cs.properties deleted file mode 100644 index fe847cd435..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/Bundle_cs.properties +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-28 21\:38+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -MarkovClustering.description=Markov\u016fv klastrov\u00fd algoritmus, rychl\u00fd a \u0161k\u00e1lovateln\u00fd nehl\u00eddan\u00fd algoritmus klastru - -MarkovClusteringPanel.jLabel4.text=max-zbytkov\u00e9 - -MarkovClusteringPanel.jLabel1.text=nula-Max - -MarkovClusteringPanel.zeromax.text=0.001 - -MarkovClusteringPanel.gamma.text=2.0 - -MarkovClusteringPanel.jLabel2.text=gama - -MarkovClusteringPanel.jLabel3.text=smy\u010dka - -MarkovClusteringPanel.loop.text=0 - -MarkovClusteringPanel.maxresidual.text=0.001 diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/Bundle_es.properties b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/Bundle_es.properties deleted file mode 100644 index 0c329464e9..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/Bundle_es.properties +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:30+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -MarkovClustering.description=Algoritmo Markov Cluster (MCL), un algoritmo de cl\u00fastering no supervisado, r\u00e1pido y escalable - -MarkovClusteringPanel.jLabel4.text=max-residual - -MarkovClusteringPanel.jLabel1.text=zero-Max - -MarkovClusteringPanel.zeromax.text=0.001 - -MarkovClusteringPanel.gamma.text=2.0 - -MarkovClusteringPanel.jLabel2.text=gamma - -MarkovClusteringPanel.jLabel3.text=loop - -MarkovClusteringPanel.loop.text=0 - -MarkovClusteringPanel.maxresidual.text=0.001 diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/Bundle_fr.properties b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/Bundle_fr.properties deleted file mode 100644 index 0b95e7a277..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/Bundle_fr.properties +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:30+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -MarkovClustering.description=Algorithme Markov Cluster (MCL), un algorithme non supervis\u00e9 de clustering rapide et scalable - -MarkovClusteringPanel.jLabel4.text=max-residual - -MarkovClusteringPanel.jLabel1.text=zero-Max - -MarkovClusteringPanel.zeromax.text=0.001 - -MarkovClusteringPanel.gamma.text=2.0 - -MarkovClusteringPanel.jLabel2.text=gamma - -MarkovClusteringPanel.jLabel3.text=loop - -MarkovClusteringPanel.loop.text=0 - -MarkovClusteringPanel.maxresidual.text=0.001 diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/Bundle_ja.properties b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/Bundle_ja.properties deleted file mode 100644 index 7907fd9c03..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/Bundle_ja.properties +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-03 10\:52+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -MarkovClustering.description=\u30de\u30eb\u30b3\u30d5\u30af\u30e9\u30b9\u30bf\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3001\u901f\u304f\u30b9\u30b1\u30fc\u30e9\u30d6\u30eb\u306a\u6559\u5e2b\u306a\u3057\u5206\u985e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0 - -MarkovClusteringPanel.jLabel4.text=\u6700\u5927\u6b8b\u4f59 - -MarkovClusteringPanel.jLabel1.text=\u30bc\u30ed\u30de\u30c3\u30af\u30b9 - -MarkovClusteringPanel.zeromax.text=0.001 - -MarkovClusteringPanel.gamma.text=2.0 - -MarkovClusteringPanel.jLabel2.text=\u30ac\u30f3\u30de - -MarkovClusteringPanel.jLabel3.text=\u30eb\u30fc\u30d7 - -MarkovClusteringPanel.loop.text=0 - -MarkovClusteringPanel.maxresidual.text=0.001 diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/Bundle_pt_BR.properties b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/Bundle_pt_BR.properties deleted file mode 100644 index 387b25a9ed..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/Bundle_pt_BR.properties +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-07 00\:17+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -MarkovClustering.description=Algoritmo de Cluster de Markov, um algoritmo de clustering r\u00e1pido e escal\u00e1vel sem supervis\u00e3o - -MarkovClusteringPanel.jLabel4.text=max-residual - -MarkovClusteringPanel.jLabel1.text=zero-Max - -MarkovClusteringPanel.zeromax.text=0.001 - -MarkovClusteringPanel.gamma.text=2.0 - -MarkovClusteringPanel.jLabel2.text=gamma - -MarkovClusteringPanel.jLabel3.text=loop - -MarkovClusteringPanel.loop.text=0 - -MarkovClusteringPanel.maxresidual.text=0.001 diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/Bundle_ru.properties b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/Bundle_ru.properties deleted file mode 100644 index 6b107025ea..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/Bundle_ru.properties +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-20 21\:39+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -MarkovClustering.description=\u041a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u041c\u0430\u0440\u043a\u043e\u0432\u0430, \u0431\u044b\u0441\u0442\u0440\u044b\u0439 \u0438 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u0443\u0435\u043c\u044b\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c - -MarkovClusteringPanel.jLabel4.text=\u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u043d\u0435\u0432\u044f\u0437\u043a\u0430 - -MarkovClusteringPanel.jLabel1.text=zero-Max - -MarkovClusteringPanel.zeromax.text=0,001 - -MarkovClusteringPanel.gamma.text=2.0 - -MarkovClusteringPanel.jLabel2.text=gamma - -MarkovClusteringPanel.jLabel3.text=loop - -MarkovClusteringPanel.loop.text=0 - -MarkovClusteringPanel.maxresidual.text=0.001 diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/Bundle_zh_CN.properties b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/Bundle_zh_CN.properties deleted file mode 100644 index 2afa274047..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/Bundle_zh_CN.properties +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:20+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -MarkovClustering.description=\u9a6c\u5c14\u53ef\u592b\u805a\u7c7b\u7b97\u6cd5\uff0c\u4e00\u79cd\u5feb\u901f\u548c\u53ef\u53d8\u5c3a\u5ea6\u7684\u65e0\u76d1\u7763\u805a\u7c7b\u7b97\u6cd5 - -MarkovClusteringPanel.jLabel4.text=\u6700\u5927\u6b8b\u5dee - -MarkovClusteringPanel.jLabel1.text=\u96f6\u6700\u5927 - -MarkovClusteringPanel.zeromax.text=0.001 - -MarkovClusteringPanel.gamma.text=2.0 - -MarkovClusteringPanel.jLabel2.text=gamma - -MarkovClusteringPanel.jLabel3.text=\u5faa\u73af - -MarkovClusteringPanel.loop.text=0 - -MarkovClusteringPanel.maxresidual.text=0.001 diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/cs.po b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/cs.po deleted file mode 100644 index 593925fb32..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/cs.po +++ /dev/null @@ -1,46 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-28 21:38+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "MarkovClustering.description" -msgstr "MarkovΕ―v klastrovΓ½ algoritmus, rychlΓ½ a Ε‘kΓ‘lovatelnΓ½ nehlΓ­danΓ½ algoritmus klastru" - -msgid "MarkovClusteringPanel.jLabel4.text" -msgstr "max-zbytkovΓ©" - -msgid "MarkovClusteringPanel.jLabel1.text" -msgstr "nula-Max" - -msgid "MarkovClusteringPanel.zeromax.text" -msgstr "0.001" - -msgid "MarkovClusteringPanel.gamma.text" -msgstr "2.0" - -msgid "MarkovClusteringPanel.jLabel2.text" -msgstr "gama" - -msgid "MarkovClusteringPanel.jLabel3.text" -msgstr "smyčka" - -msgid "MarkovClusteringPanel.loop.text" -msgstr "0" - -msgid "MarkovClusteringPanel.maxresidual.text" -msgstr "0.001" diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/es.po b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/es.po deleted file mode 100644 index e52da908ed..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/es.po +++ /dev/null @@ -1,46 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:30+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "MarkovClustering.description" -msgstr "Algoritmo Markov Cluster (MCL), un algoritmo de clΓΊstering no supervisado, rΓ‘pido y escalable" - -msgid "MarkovClusteringPanel.jLabel4.text" -msgstr "max-residual" - -msgid "MarkovClusteringPanel.jLabel1.text" -msgstr "zero-Max" - -msgid "MarkovClusteringPanel.zeromax.text" -msgstr "0.001" - -msgid "MarkovClusteringPanel.gamma.text" -msgstr "2.0" - -msgid "MarkovClusteringPanel.jLabel2.text" -msgstr "gamma" - -msgid "MarkovClusteringPanel.jLabel3.text" -msgstr "loop" - -msgid "MarkovClusteringPanel.loop.text" -msgstr "0" - -msgid "MarkovClusteringPanel.maxresidual.text" -msgstr "0.001" diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/fr.po b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/fr.po deleted file mode 100644 index 2b72705879..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/fr.po +++ /dev/null @@ -1,46 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:30+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "MarkovClustering.description" -msgstr "Algorithme Markov Cluster (MCL), un algorithme non supervisΓ© de clustering rapide et scalable" - -msgid "MarkovClusteringPanel.jLabel4.text" -msgstr "max-residual" - -msgid "MarkovClusteringPanel.jLabel1.text" -msgstr "zero-Max" - -msgid "MarkovClusteringPanel.zeromax.text" -msgstr "0.001" - -msgid "MarkovClusteringPanel.gamma.text" -msgstr "2.0" - -msgid "MarkovClusteringPanel.jLabel2.text" -msgstr "gamma" - -msgid "MarkovClusteringPanel.jLabel3.text" -msgstr "loop" - -msgid "MarkovClusteringPanel.loop.text" -msgstr "0" - -msgid "MarkovClusteringPanel.maxresidual.text" -msgstr "0.001" diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/ja.po b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/ja.po deleted file mode 100644 index e564de975f..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/ja.po +++ /dev/null @@ -1,46 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-03 10:52+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "MarkovClustering.description" -msgstr "γƒžγƒ«γ‚³γƒ•γ‚―γƒ©γ‚Ήγ‚Ώγ‚’γƒ«γ‚΄γƒͺγ‚Ίγƒ γ€ι€Ÿγγ‚Ήγ‚±γƒΌγƒ©γƒ–γƒ«γͺζ•™εΈ«γͺγ—εˆ†ι‘žγ‚’γƒ«γ‚΄γƒͺγ‚Ίγƒ " - -msgid "MarkovClusteringPanel.jLabel4.text" -msgstr "ζœ€ε€§ζ‹δ½™" - -msgid "MarkovClusteringPanel.jLabel1.text" -msgstr "γ‚Όγƒ­γƒžγƒƒγ‚―γ‚Ή" - -msgid "MarkovClusteringPanel.zeromax.text" -msgstr "0.001" - -msgid "MarkovClusteringPanel.gamma.text" -msgstr "2.0" - -msgid "MarkovClusteringPanel.jLabel2.text" -msgstr "γ‚¬γƒ³γƒž" - -msgid "MarkovClusteringPanel.jLabel3.text" -msgstr "ループ" - -msgid "MarkovClusteringPanel.loop.text" -msgstr "0" - -msgid "MarkovClusteringPanel.maxresidual.text" -msgstr "0.001" diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/org-gephi-clustering-plugin-mcl.pot b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/org-gephi-clustering-plugin-mcl.pot deleted file mode 100644 index 5c4cc616c9..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/org-gephi-clustering-plugin-mcl.pot +++ /dev/null @@ -1,44 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "MarkovClustering.description" -msgstr "" -"Markov Cluster Algorithm, a fast and scalable unsupervised cluster algorithm" - -msgid "MarkovClusteringPanel.jLabel4.text" -msgstr "max-residual" - -msgid "MarkovClusteringPanel.jLabel1.text" -msgstr "zero-Max" - -msgid "MarkovClusteringPanel.zeromax.text" -msgstr "0.001" - -msgid "MarkovClusteringPanel.gamma.text" -msgstr "2.0" - -msgid "MarkovClusteringPanel.jLabel2.text" -msgstr "gamma" - -msgid "MarkovClusteringPanel.jLabel3.text" -msgstr "loop" - -msgid "MarkovClusteringPanel.loop.text" -msgstr "0" - -msgid "MarkovClusteringPanel.maxresidual.text" -msgstr "0.001" diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/pt_BR.po b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/pt_BR.po deleted file mode 100644 index d813cabfd4..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/pt_BR.po +++ /dev/null @@ -1,46 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-07 00:17+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "MarkovClustering.description" -msgstr "Algoritmo de Cluster de Markov, um algoritmo de clustering rΓ‘pido e escalΓ‘vel sem supervisΓ£o" - -msgid "MarkovClusteringPanel.jLabel4.text" -msgstr "max-residual" - -msgid "MarkovClusteringPanel.jLabel1.text" -msgstr "zero-Max" - -msgid "MarkovClusteringPanel.zeromax.text" -msgstr "0.001" - -msgid "MarkovClusteringPanel.gamma.text" -msgstr "2.0" - -msgid "MarkovClusteringPanel.jLabel2.text" -msgstr "gamma" - -msgid "MarkovClusteringPanel.jLabel3.text" -msgstr "loop" - -msgid "MarkovClusteringPanel.loop.text" -msgstr "0" - -msgid "MarkovClusteringPanel.maxresidual.text" -msgstr "0.001" diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/ru.po b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/ru.po deleted file mode 100644 index 3a8acac53e..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/ru.po +++ /dev/null @@ -1,46 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-20 21:39+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "MarkovClustering.description" -msgstr "ΠšΠ»Π°ΡΡ‚Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° ΠœΠ°Ρ€ΠΊΠΎΠ²Π°, быстрый ΠΈ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ кластСризационный Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ" - -msgid "MarkovClusteringPanel.jLabel4.text" -msgstr "максимальная нСвязка" - -msgid "MarkovClusteringPanel.jLabel1.text" -msgstr "zero-Max" - -msgid "MarkovClusteringPanel.zeromax.text" -msgstr "0,001" - -msgid "MarkovClusteringPanel.gamma.text" -msgstr "2.0" - -msgid "MarkovClusteringPanel.jLabel2.text" -msgstr "gamma" - -msgid "MarkovClusteringPanel.jLabel3.text" -msgstr "loop" - -msgid "MarkovClusteringPanel.loop.text" -msgstr "0" - -msgid "MarkovClusteringPanel.maxresidual.text" -msgstr "0.001" diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/zh_CN.po b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/zh_CN.po deleted file mode 100644 index 7197d3b892..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/mcl/zh_CN.po +++ /dev/null @@ -1,45 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:20+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "MarkovClustering.description" -msgstr "ι©¬ε°”ε―ε€«θšη±»η—ζ³•οΌŒδΈ€η§εΏ«ι€Ÿε’Œε―ε˜ε°ΊεΊ¦ηš„ζ— η›‘η£θšη±»η—法" - -msgid "MarkovClusteringPanel.jLabel4.text" -msgstr "ζœ€ε€§ζ‹ε·" - -msgid "MarkovClusteringPanel.jLabel1.text" -msgstr "ι›Άζœ€ε€§" - -msgid "MarkovClusteringPanel.zeromax.text" -msgstr "0.001" - -msgid "MarkovClusteringPanel.gamma.text" -msgstr "2.0" - -msgid "MarkovClusteringPanel.jLabel2.text" -msgstr "gamma" - -msgid "MarkovClusteringPanel.jLabel3.text" -msgstr "εΎͺ环" - -msgid "MarkovClusteringPanel.loop.text" -msgstr "0" - -msgid "MarkovClusteringPanel.maxresidual.text" -msgstr "0.001" diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/org-gephi-clustering-plugin.pot b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/org-gephi-clustering-plugin.pot deleted file mode 100644 index 114a2e2e1e..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/org-gephi-clustering-plugin.pot +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Standard clustering algorithms" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Standard clustering algorithms" diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/pt_BR.po b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/pt_BR.po deleted file mode 100644 index c872f4da65..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/pt_BR.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 23:47+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Algoritmos padrΓ£o de clustering" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Algoritmos padrΓ£o de clustering" diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/ru.po b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/ru.po deleted file mode 100644 index 75aa71d0c0..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/ru.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:29+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ кластСризации" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹ кластСризации" diff --git a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/zh_CN.po b/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/zh_CN.po deleted file mode 100644 index 988b42a891..0000000000 --- a/modules/ClusteringPlugin/src/main/resources/org/gephi/clustering/plugin/zh_CN.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:20+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ζ ‡ε‡†θšη±»η—法" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζ ‡ε‡†θšη±»η—法" diff --git a/modules/CollectionUtils/pom.xml b/modules/CollectionUtils/pom.xml deleted file mode 100644 index d276654756..0000000000 --- a/modules/CollectionUtils/pom.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - 4.0.0 - - gephi-parent - org.gephi - 0.9-SNAPSHOT - ../.. - - - org.gephi - utils-collection - 0.9-SNAPSHOT - nbm - - CollectionUtils - - - - ${project.groupId} - core-library-wrapper - - - - - - - org.codehaus.mojo - nbm-maven-plugin - - - org.gephi.utils.collection.avl - - - - - - diff --git a/modules/CollectionUtils/src/main/java/org/gephi/utils/collection/avl/AVLItem.java b/modules/CollectionUtils/src/main/java/org/gephi/utils/collection/avl/AVLItem.java deleted file mode 100644 index ed3107cf07..0000000000 --- a/modules/CollectionUtils/src/main/java/org/gephi/utils/collection/avl/AVLItem.java +++ /dev/null @@ -1,53 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.utils.collection.avl; - -/** - * Interface for {@link SimpleAVLTree} items. The getNumber must return a unique key for the - * tree. - * - * @author Mathieu Bastian - */ -public interface AVLItem { - - public int getNumber(); -} diff --git a/modules/CollectionUtils/src/main/java/org/gephi/utils/collection/avl/AVLItemAccessor.java b/modules/CollectionUtils/src/main/java/org/gephi/utils/collection/avl/AVLItemAccessor.java deleted file mode 100644 index e4a0fc12cf..0000000000 --- a/modules/CollectionUtils/src/main/java/org/gephi/utils/collection/avl/AVLItemAccessor.java +++ /dev/null @@ -1,55 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.utils.collection.avl; - -/** - * Interface for specializing the getNumber() method. The tree key got from the Item - * can vary. - * - * @author Mathieu Bastian - * @param The type of Object in the tree - * @see ParamAVLTree - */ -public interface AVLItemAccessor { - - public int getNumber(Item item); -} diff --git a/modules/CollectionUtils/src/main/java/org/gephi/utils/collection/avl/BiParamAVLIterator.java b/modules/CollectionUtils/src/main/java/org/gephi/utils/collection/avl/BiParamAVLIterator.java deleted file mode 100644 index 84d1a3cac2..0000000000 --- a/modules/CollectionUtils/src/main/java/org/gephi/utils/collection/avl/BiParamAVLIterator.java +++ /dev/null @@ -1,123 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.utils.collection.avl; - -import java.util.Iterator; - -/** - * Identical at ParamAVLIterator, but with two trees. When the first is fully browsed, - * the iterator moves to the second tree items. Used for IN and OUT edges tree. - *

    - * Support null values for trees. - * - * @author Mathieu Bastian - * @param The type of Object in the tree - */ -public class BiParamAVLIterator implements Iterator { - - private ParamAVLTree tree2; - private ParamAVLTree currentTree; - private ParamAVLNode next; - private Item current; - - public BiParamAVLIterator(ParamAVLTree tree1, ParamAVLTree tree2) { - if (tree1 == null) { - this.currentTree = tree2; - } else { - this.currentTree = tree1; - this.tree2 = tree2; - } - if (currentTree != null) { - next = currentTree.root; - } - goToDownLeft(); - } - - private void goToDownLeft() { - if (next != null) { - while (next.left != null) { - next = next.left; - } - } - } - - public boolean hasNext() { - if (next == null) { - if (tree2 != null && currentTree != tree2) { - currentTree = tree2; - next = currentTree.root; - if (next == null) { - return false; - } - goToDownLeft(); - } else { - return false; - } - } - - current = this.next.item; - - if (next.right == null) { - while ((next.parent != null) && (next == next.parent.right)) { - this.next = this.next.parent; - } - - this.next = this.next.parent; - } else { - this.next = this.next.right; - - while (this.next.left != null) { - this.next = this.next.left; - } - } - - return true; - } - - public Item next() { - return current; - } - - public void remove() { - currentTree.remove(current); //TODO Optimize, remove in O(1) instead of O(ln(n)) - } -} diff --git a/modules/CollectionUtils/src/main/java/org/gephi/utils/collection/avl/MonoAVLTree.java b/modules/CollectionUtils/src/main/java/org/gephi/utils/collection/avl/MonoAVLTree.java deleted file mode 100644 index 63e1c2d471..0000000000 --- a/modules/CollectionUtils/src/main/java/org/gephi/utils/collection/avl/MonoAVLTree.java +++ /dev/null @@ -1,737 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.utils.collection.avl; - -import java.util.Iterator; -import org.gephi.utils.collection.avl.ResetableIterator; - -/** - * Simple AVL Tree storing items of {@link AVLItem} class. It uses the getNumber() method to - * get item's key. With the iterator, nodes in the tree will be returned in a ascending order. - *

    - * The AVL tree implementaion is based on a iterative method and guarantee O(ln(n)) access. - *

    - * This tree has a single iterator, it can be accessed from a single thread. - * @author Mathieu Bastian - */ -public class MonoAVLTree implements Iterable { - - protected MonoAVLNode root; - protected int count; - protected MonoAVLIterator iterator; - - public MonoAVLTree() { - iterator = new MonoAVLIterator(); - } - - public boolean add(AVLItem item) { - MonoAVLNode p = this.root; - - if (p == null) { - this.root = new MonoAVLNode(item); - } else { - while (true) { - int c = item.getNumber() - p.item.getNumber(); - - if (c < 0) { - if (p.left != null) { - p = p.left; - } else { - p.left = new MonoAVLNode(item, p); - p.balance--; - - break; - } - } else if (c > 0) { - if (p.right != null) { - p = p.right; - } else { - p.right = new MonoAVLNode(item, p); - p.balance++; - - break; - } - } else { - return false; - } - } - - while ((p.balance != 0) && (p.parent != null)) { - if (p.parent.left == p) { - p.parent.balance--; - } else { - p.parent.balance++; - } - - p = p.parent; - - if (p.balance == -2) { - MonoAVLNode x = p.left; - - if (x.balance == -1) { - x.parent = p.parent; - - if (p.parent == null) { - this.root = x; - } else { - if (p.parent.left == p) { - p.parent.left = x; - } else { - p.parent.right = x; - } - } - - p.left = x.right; - - if (p.left != null) { - p.left.parent = p; - } - - x.right = p; - p.parent = x; - - x.balance = 0; - p.balance = 0; - } else { - MonoAVLNode w = x.right; - - w.parent = p.parent; - - if (p.parent == null) { - this.root = w; - } else { - if (p.parent.left == p) { - p.parent.left = w; - } else { - p.parent.right = w; - } - } - - x.right = w.left; - - if (x.right != null) { - x.right.parent = x; - } - - p.left = w.right; - - if (p.left != null) { - p.left.parent = p; - } - - w.left = x; - w.right = p; - - x.parent = w; - p.parent = w; - - if (w.balance == -1) { - x.balance = 0; - p.balance = 1; - } else if (w.balance == 0) { - x.balance = 0; - p.balance = 0; - } else // w.balance == 1 - { - x.balance = -1; - p.balance = 0; - } - - w.balance = 0; - } - - break; - } else if (p.balance == 2) { - MonoAVLNode x = p.right; - - if (x.balance == 1) { - x.parent = p.parent; - - if (p.parent == null) { - this.root = x; - } else { - if (p.parent.left == p) { - p.parent.left = x; - } else { - p.parent.right = x; - } - } - - p.right = x.left; - - if (p.right != null) { - p.right.parent = p; - } - - x.left = p; - p.parent = x; - - x.balance = 0; - p.balance = 0; - } else { - MonoAVLNode w = x.left; - - w.parent = p.parent; - - if (p.parent == null) { - this.root = w; - } else { - if (p.parent.left == p) { - p.parent.left = w; - } else { - p.parent.right = w; - } - } - - x.left = w.right; - - if (x.left != null) { - x.left.parent = x; - } - - p.right = w.left; - - if (p.right != null) { - p.right.parent = p; - } - - w.right = x; - w.left = p; - - x.parent = w; - p.parent = w; - - if (w.balance == 1) { - x.balance = 0; - p.balance = -1; - } else if (w.balance == 0) { - x.balance = 0; - p.balance = 0; - } else // w.balance == -1 - { - x.balance = 1; - p.balance = 0; - } - - w.balance = 0; - } - - break; - } - } - } - - this.count++; - return true; - } - - public boolean remove(AVLItem item) { - return this.remove(item.getNumber()); - } - - public boolean remove(int number) { - MonoAVLNode p = this.root; - - while (p != null) { - int c = number - p.item.getNumber(); - - if (c < 0) { - p = p.left; - } else if (c > 0) { - p = p.right; - } else { - MonoAVLNode y; // node from which rebalancing begins - - int choice = 0; //0:Done 1:Left 2:Right - - if (p.right == null) // Case 1: p has no right child - { - if (p.left != null) { - p.left.parent = p.parent; - } - - if (p.parent == null) { - this.root = p.left; - - count--; - return true; - } - - if (p == p.parent.left) { - p.parent.left = p.left; - - y = p.parent; - - choice = 1; - // goto LeftDelete; - } else { - p.parent.right = p.left; - - y = p.parent; - - choice = 2; - //goto RightDelete; - } - } else if (p.right.left == null) // Case 2: p's right child has no left child - { - if (p.left != null) { - p.left.parent = p.right; - p.right.left = p.left; - } - - p.right.balance = p.balance; - p.right.parent = p.parent; - - if (p.parent == null) { - this.root = p.right; - } else { - if (p == p.parent.left) { - p.parent.left = p.right; - } else { - p.parent.right = p.right; - } - } - - y = p.right; - - choice = 2; - //goto RightDelete; - } else // Case 3: p's right child has a left child - { - MonoAVLNode s = p.right.left; - - while (s.left != null) { - s = s.left; - } - - if (p.left != null) { - p.left.parent = s; - s.left = p.left; - } - - s.parent.left = s.right; - - if (s.right != null) { - s.right.parent = s.parent; - } - - p.right.parent = s; - s.right = p.right; - - y = s.parent; // for rebalacing, must be set before we change s.parent - - s.balance = p.balance; - s.parent = p.parent; - - if (p.parent == null) { - this.root = s; - } else { - if (p == p.parent.left) { - p.parent.left = s; - } else { - p.parent.right = s; - } - } - - choice = 1; - // goto LeftDelete; - } - - // rebalancing begins - while (choice != 0) { - if (choice == 1) { - //LeftDelete: - - y.balance++; - - if (y.balance == 1) { - //goto Done; - choice = 0; - } else if (y.balance == 2) { - MonoAVLNode x = y.right; - - if (x.balance == -1) { - MonoAVLNode w = x.left; - - w.parent = y.parent; - - if (y.parent == null) { - this.root = w; - } else { - if (y.parent.left == y) { - y.parent.left = w; - } else { - y.parent.right = w; - } - } - - x.left = w.right; - - if (x.left != null) { - x.left.parent = x; - } - - y.right = w.left; - - if (y.right != null) { - y.right.parent = y; - } - - w.right = x; - w.left = y; - - x.parent = w; - y.parent = w; - - if (w.balance == 1) { - x.balance = 0; - y.balance = -1; - } else if (w.balance == 0) { - x.balance = 0; - y.balance = 0; - } else // w.balance == -1 - { - x.balance = 1; - y.balance = 0; - } - - w.balance = 0; - - y = w; // for next iteration - } else { - x.parent = y.parent; - - if (y.parent != null) { - if (y.parent.left == y) { - y.parent.left = x; - } else { - y.parent.right = x; - } - } else { - this.root = x; - } - - y.right = x.left; - - if (y.right != null) { - y.right.parent = y; - } - - x.left = y; - y.parent = x; - - if (x.balance == 0) { - x.balance = -1; - y.balance = 1; - - //goto Done - choice = 0; - } else { - x.balance = 0; - y.balance = 0; - - y = x; // for next iteration - } - } - } - } else if (choice == 2) { - //goto LoopTest; - - - //RightDelete: - - y.balance--; - - if (y.balance == -1) { - choice = 0; - //goto Done; - } else if (y.balance == -2) { - MonoAVLNode x = y.left; - - if (x.balance == 1) { - MonoAVLNode w = x.right; - - w.parent = y.parent; - - if (y.parent == null) { - this.root = w; - } else { - if (y.parent.left == y) { - y.parent.left = w; - } else { - y.parent.right = w; - } - } - - x.right = w.left; - - if (x.right != null) { - x.right.parent = x; - } - - y.left = w.right; - - if (y.left != null) { - y.left.parent = y; - } - - w.left = x; - w.right = y; - - x.parent = w; - y.parent = w; - - if (w.balance == -1) { - x.balance = 0; - y.balance = 1; - } else if (w.balance == 0) { - x.balance = 0; - y.balance = 0; - } else // w.balance == 1 - { - x.balance = -1; - y.balance = 0; - } - - w.balance = 0; - - y = w; // for next iteration - } else { - x.parent = y.parent; - - if (y.parent != null) { - if (y.parent.left == y) { - y.parent.left = x; - } else { - y.parent.right = x; - } - } else { - this.root = x; - } - - y.left = x.right; - - if (y.left != null) { - y.left.parent = y; - } - - x.right = y; - y.parent = x; - - if (x.balance == 0) { - x.balance = 1; - y.balance = -1; - - choice = 0; - //goto Done; - } else { - x.balance = 0; - y.balance = 0; - - y = x; // for next iteration - } - } - } - } - - - if (choice == 0) { - this.count--; - return true; - } - - //LoopTest: { - - if (y.parent != null) { - if (y == y.parent.left) { - y = y.parent; - choice = 1; - // goto LeftDelete; - } else { - y = y.parent; - choice = 2; - //goto RightDelete; - } - } else { - //Done - this.count--; - return true; - } - } - - } - } - - return false; - } - - public boolean contains(AVLItem item) { - MonoAVLNode p = this.root; - - while (p != null) { - int c = item.getNumber() - p.item.getNumber(); - - if (c < 0) { - p = p.left; - } else if (c > 0) { - p = p.right; - } else { - return true; - } - } - - return false; - } - - public AVLItem get(int number) { - MonoAVLNode p = this.root; - - while (p != null) { - int c = number - p.item.getNumber(); - - if (c < 0) { - p = p.left; - } else if (c > 0) { - p = p.right; - } else { - return p.item; - } - } - - return null; - } - - public void clear() { - this.root = null; - this.count = 0; - } - - public Iterator iterator() { - iterator.setNode(this); - return iterator; - } - - public int getCount() { - return count; - } - - private class MonoAVLNode { - - MonoAVLNode parent; - MonoAVLNode left; - MonoAVLNode right; - int balance; - AVLItem item; - - public MonoAVLNode(AVLItem item) { - this.item = item; - } - - public MonoAVLNode(AVLItem item, MonoAVLNode parent) { - this.item = item; - this.parent = parent; - } - } - - private static class MonoAVLIterator implements Iterator, ResetableIterator { - - private MonoAVLNode next; - private AVLItem current; - - public MonoAVLIterator() { - } - - public MonoAVLIterator(MonoAVLNode node) { - this.next = node; - goToDownLeft(); - } - - public MonoAVLIterator(MonoAVLTree tree) { - this(tree.root); - } - - public void setNode(MonoAVLTree tree) { - this.next = tree.root; - goToDownLeft(); - } - - private void goToDownLeft() { - if (next != null) { - while (next.left != null) { - next = next.left; - } - } - } - - public boolean hasNext() { - if (next == null) { - return false; - } - - current = this.next.item; - - if (next.right == null) { - while ((next.parent != null) && (next == next.parent.right)) { - this.next = this.next.parent; - } - - this.next = this.next.parent; - } else { - this.next = this.next.right; - - while (this.next.left != null) { - this.next = this.next.left; - } - } - - return true; - } - - public AVLItem next() { - return current; - } - - public void remove() { - throw new UnsupportedOperationException(); - } - } -} diff --git a/modules/CollectionUtils/src/main/java/org/gephi/utils/collection/avl/ParamAVLIterator.java b/modules/CollectionUtils/src/main/java/org/gephi/utils/collection/avl/ParamAVLIterator.java deleted file mode 100644 index 4c2647848b..0000000000 --- a/modules/CollectionUtils/src/main/java/org/gephi/utils/collection/avl/ParamAVLIterator.java +++ /dev/null @@ -1,117 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.utils.collection.avl; - -import java.util.Iterator; -import org.gephi.utils.collection.avl.ResetableIterator; - -/** - * Iterator for the {@link ParamAVLTree}. Return items in an ascending order. - * - * @author Mathieu Bastian - * @param The type of Object in the tree - */ -public class ParamAVLIterator implements Iterator, ResetableIterator { - - private ParamAVLTree tree; - private ParamAVLNode next; - private Item current; - - public ParamAVLIterator() { - } - - public ParamAVLIterator(ParamAVLNode node) { - this.next = node; - goToDownLeft(); - } - - public ParamAVLIterator(ParamAVLTree tree) { - this(tree.root); - this.tree = tree; - } - - public void setNode(ParamAVLTree tree) { - this.next = tree.root; - this.tree = tree; - goToDownLeft(); - } - - private void goToDownLeft() { - if (next != null) { - while (next.left != null) { - next = next.left; - } - } - } - - public boolean hasNext() { - if (next == null) { - return false; - } - - current = this.next.item; - - if (next.right == null) { - while ((next.parent != null) && (next == next.parent.right)) { - this.next = this.next.parent; - } - - this.next = this.next.parent; - } else { - this.next = this.next.right; - - while (this.next.left != null) { - this.next = this.next.left; - } - } - - return true; - } - - public Item next() { - return current; - } - - public void remove() { - tree.remove(current); //TODO Optimize, remove in O(1) instead of O(ln(n)) - } -} diff --git a/modules/CollectionUtils/src/main/java/org/gephi/utils/collection/avl/ParamAVLNode.java b/modules/CollectionUtils/src/main/java/org/gephi/utils/collection/avl/ParamAVLNode.java deleted file mode 100644 index 53048051ae..0000000000 --- a/modules/CollectionUtils/src/main/java/org/gephi/utils/collection/avl/ParamAVLNode.java +++ /dev/null @@ -1,66 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.utils.collection.avl; - -/** - * Node of the {@link ParamAVLTree}. - * - * @author Mathieu Bastian - * @param The type of Object in the tree - */ -public class ParamAVLNode { - - ParamAVLNode parent; - ParamAVLNode left; - ParamAVLNode right; - int balance; - Item item; - - public ParamAVLNode(Item item) { - this.item = item; - } - - public ParamAVLNode(Item item, ParamAVLNode parent) { - this.item = item; - this.parent = parent; - } -} diff --git a/modules/CollectionUtils/src/main/java/org/gephi/utils/collection/avl/ParamAVLTree.java b/modules/CollectionUtils/src/main/java/org/gephi/utils/collection/avl/ParamAVLTree.java deleted file mode 100644 index a27971baec..0000000000 --- a/modules/CollectionUtils/src/main/java/org/gephi/utils/collection/avl/ParamAVLTree.java +++ /dev/null @@ -1,676 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.utils.collection.avl; - -import java.lang.reflect.Array; -import java.util.Iterator; - -/** - * Special type of AVL tree which possess a {@link AVLItemAccessor}. It allows to configure the indexes returned - * by the tree nodes - * - * @author Mathieu Bastian - * @param The type of Object in the tree - */ -public class ParamAVLTree implements Iterable { - - protected ParamAVLNode root; - protected int count; - private AVLItemAccessor accessor; - - public ParamAVLTree(AVLItemAccessor accessor) { - this.accessor = accessor; - } - - public ParamAVLTree() { - } - - public boolean add(Item item) { - ParamAVLNode p = this.root; - - if (p == null) { - this.root = new ParamAVLNode(item); - } else { - while (true) { - int c = accessor.getNumber(item) - accessor.getNumber(p.item); - - if (c < 0) { - if (p.left != null) { - p = p.left; - } else { - p.left = new ParamAVLNode(item, p); - p.balance--; - - break; - } - } else if (c > 0) { - if (p.right != null) { - p = p.right; - } else { - p.right = new ParamAVLNode(item, p); - p.balance++; - - break; - } - } else { - return false; - } - } - - while ((p.balance != 0) && (p.parent != null)) { - if (p.parent.left == p) { - p.parent.balance--; - } else { - p.parent.balance++; - } - - p = p.parent; - - if (p.balance == -2) { - ParamAVLNode x = p.left; - - if (x.balance == -1) { - x.parent = p.parent; - - if (p.parent == null) { - this.root = x; - } else { - if (p.parent.left == p) { - p.parent.left = x; - } else { - p.parent.right = x; - } - } - - p.left = x.right; - - if (p.left != null) { - p.left.parent = p; - } - - x.right = p; - p.parent = x; - - x.balance = 0; - p.balance = 0; - } else { - ParamAVLNode w = x.right; - - w.parent = p.parent; - - if (p.parent == null) { - this.root = w; - } else { - if (p.parent.left == p) { - p.parent.left = w; - } else { - p.parent.right = w; - } - } - - x.right = w.left; - - if (x.right != null) { - x.right.parent = x; - } - - p.left = w.right; - - if (p.left != null) { - p.left.parent = p; - } - - w.left = x; - w.right = p; - - x.parent = w; - p.parent = w; - - if (w.balance == -1) { - x.balance = 0; - p.balance = 1; - } else if (w.balance == 0) { - x.balance = 0; - p.balance = 0; - } else // w.balance == 1 - { - x.balance = -1; - p.balance = 0; - } - - w.balance = 0; - } - - break; - } else if (p.balance == 2) { - ParamAVLNode x = p.right; - - if (x.balance == 1) { - x.parent = p.parent; - - if (p.parent == null) { - this.root = x; - } else { - if (p.parent.left == p) { - p.parent.left = x; - } else { - p.parent.right = x; - } - } - - p.right = x.left; - - if (p.right != null) { - p.right.parent = p; - } - - x.left = p; - p.parent = x; - - x.balance = 0; - p.balance = 0; - } else { - ParamAVLNode w = x.left; - - w.parent = p.parent; - - if (p.parent == null) { - this.root = w; - } else { - if (p.parent.left == p) { - p.parent.left = w; - } else { - p.parent.right = w; - } - } - - x.left = w.right; - - if (x.left != null) { - x.left.parent = x; - } - - p.right = w.left; - - if (p.right != null) { - p.right.parent = p; - } - - w.right = x; - w.left = p; - - x.parent = w; - p.parent = w; - - if (w.balance == 1) { - x.balance = 0; - p.balance = -1; - } else if (w.balance == 0) { - x.balance = 0; - p.balance = 0; - } else // w.balance == -1 - { - x.balance = 1; - p.balance = 0; - } - - w.balance = 0; - } - - break; - } - } - } - - this.count++; - return true; - } - - public boolean remove(Item item) { - ParamAVLNode p = this.root; - - while (p != null) { - int c = accessor.getNumber(item) - accessor.getNumber(p.item); - - if (c < 0) { - p = p.left; - } else if (c > 0) { - p = p.right; - } else { - ParamAVLNode y; // node from which rebalancing begins - - int choice = 0; //0:Done 1:Left 2:Right - - if (p.right == null) // Case 1: p has no right child - { - if (p.left != null) { - p.left.parent = p.parent; - } - - if (p.parent == null) { - this.root = p.left; - - count--; - return true; - } - - if (p == p.parent.left) { - p.parent.left = p.left; - - y = p.parent; - - choice = 1; - // goto LeftDelete; - } else { - p.parent.right = p.left; - - y = p.parent; - - choice = 2; - //goto RightDelete; - } - } else if (p.right.left == null) // Case 2: p's right child has no left child - { - if (p.left != null) { - p.left.parent = p.right; - p.right.left = p.left; - } - - p.right.balance = p.balance; - p.right.parent = p.parent; - - if (p.parent == null) { - this.root = p.right; - } else { - if (p == p.parent.left) { - p.parent.left = p.right; - } else { - p.parent.right = p.right; - } - } - - y = p.right; - - choice = 2; - //goto RightDelete; - } else // Case 3: p's right child has a left child - { - ParamAVLNode s = p.right.left; - - while (s.left != null) { - s = s.left; - } - - if (p.left != null) { - p.left.parent = s; - s.left = p.left; - } - - s.parent.left = s.right; - - if (s.right != null) { - s.right.parent = s.parent; - } - - p.right.parent = s; - s.right = p.right; - - y = s.parent; // for rebalacing, must be set before we change s.parent - - s.balance = p.balance; - s.parent = p.parent; - - if (p.parent == null) { - this.root = s; - } else { - if (p == p.parent.left) { - p.parent.left = s; - } else { - p.parent.right = s; - } - } - - choice = 1; - // goto LeftDelete; - } - - // rebalancing begins - while (choice != 0) { - if (choice == 1) { - //LeftDelete: - - y.balance++; - - if (y.balance == 1) { - //goto Done; - choice = 0; - } else if (y.balance == 2) { - ParamAVLNode x = y.right; - - if (x.balance == -1) { - ParamAVLNode w = x.left; - - w.parent = y.parent; - - if (y.parent == null) { - this.root = w; - } else { - if (y.parent.left == y) { - y.parent.left = w; - } else { - y.parent.right = w; - } - } - - x.left = w.right; - - if (x.left != null) { - x.left.parent = x; - } - - y.right = w.left; - - if (y.right != null) { - y.right.parent = y; - } - - w.right = x; - w.left = y; - - x.parent = w; - y.parent = w; - - if (w.balance == 1) { - x.balance = 0; - y.balance = -1; - } else if (w.balance == 0) { - x.balance = 0; - y.balance = 0; - } else // w.balance == -1 - { - x.balance = 1; - y.balance = 0; - } - - w.balance = 0; - - y = w; // for next iteration - } else { - x.parent = y.parent; - - if (y.parent != null) { - if (y.parent.left == y) { - y.parent.left = x; - } else { - y.parent.right = x; - } - } else { - this.root = x; - } - - y.right = x.left; - - if (y.right != null) { - y.right.parent = y; - } - - x.left = y; - y.parent = x; - - if (x.balance == 0) { - x.balance = -1; - y.balance = 1; - - //goto Done - choice = 0; - } else { - x.balance = 0; - y.balance = 0; - - y = x; // for next iteration - } - } - } - } else if (choice == 2) { - //goto LoopTest; - - - //RightDelete: - - y.balance--; - - if (y.balance == -1) { - choice = 0; - //goto Done; - } else if (y.balance == -2) { - ParamAVLNode x = y.left; - - if (x.balance == 1) { - ParamAVLNode w = x.right; - - w.parent = y.parent; - - if (y.parent == null) { - this.root = w; - } else { - if (y.parent.left == y) { - y.parent.left = w; - } else { - y.parent.right = w; - } - } - - x.right = w.left; - - if (x.right != null) { - x.right.parent = x; - } - - y.left = w.right; - - if (y.left != null) { - y.left.parent = y; - } - - w.left = x; - w.right = y; - - x.parent = w; - y.parent = w; - - if (w.balance == -1) { - x.balance = 0; - y.balance = 1; - } else if (w.balance == 0) { - x.balance = 0; - y.balance = 0; - } else // w.balance == 1 - { - x.balance = -1; - y.balance = 0; - } - - w.balance = 0; - - y = w; // for next iteration - } else { - x.parent = y.parent; - - if (y.parent != null) { - if (y.parent.left == y) { - y.parent.left = x; - } else { - y.parent.right = x; - } - } else { - this.root = x; - } - - y.left = x.right; - - if (y.left != null) { - y.left.parent = y; - } - - x.right = y; - y.parent = x; - - if (x.balance == 0) { - x.balance = 1; - y.balance = -1; - - choice = 0; - //goto Done; - } else { - x.balance = 0; - y.balance = 0; - - y = x; // for next iteration - } - } - } - } - - - if (choice == 0) { - this.count--; - return true; - } - - //LoopTest: { - - if (y.parent != null) { - if (y == y.parent.left) { - y = y.parent; - choice = 1; - // goto LeftDelete; - } else { - y = y.parent; - choice = 2; - //goto RightDelete; - } - } else { - //Done - this.count--; - return true; - } - } - - } - } - - return false; - } - - public boolean contains(Item item) { - ParamAVLNode p = this.root; - - while (p != null) { - int c = accessor.getNumber(item) - accessor.getNumber(p.item); - - if (c < 0) { - p = p.left; - } else if (c > 0) { - p = p.right; - } else { - return true; - } - } - - return false; - } - - public Item getItem(int number) { - ParamAVLNode p = this.root; - - while (p != null) { - int c = number - accessor.getNumber(p.item); - - if (c < 0) { - p = p.left; - } else if (c > 0) { - p = p.right; - } else { - return p.item; - } - } - - return null; - } - - public void clear() { - this.root = null; - this.count = 0; - } - - public Iterator iterator() { - return new ParamAVLIterator(this); - } - - public int getCount() { - return count; - } - - public boolean isEmpty() { - return count==0; - } - - public AVLItemAccessor getAccessor() { - return accessor; - } - - public void setAccessor(AVLItemAccessor accessor) { - this.accessor = accessor; - } - - public Item[] toArray(Item[] array) { - Item[] result = (Item[]) java.lang.reflect.Array.newInstance(array.getClass().getComponentType(), count); - if(count==0) - return result; - ParamAVLIterator itr = new ParamAVLIterator(root); - for (int i = 0; itr.hasNext(); i++) { - Item item = itr.next(); - result[i] = item; - } - return result; - } -} diff --git a/modules/CollectionUtils/src/main/java/org/gephi/utils/collection/avl/ResetableIterator.java b/modules/CollectionUtils/src/main/java/org/gephi/utils/collection/avl/ResetableIterator.java deleted file mode 100644 index 68bab73ad8..0000000000 --- a/modules/CollectionUtils/src/main/java/org/gephi/utils/collection/avl/ResetableIterator.java +++ /dev/null @@ -1,52 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.utils.collection.avl; - -/** - * Interface without methods, specify an iterator can be reset and used more than once. - *

    - * Iterators implementing this interface possess a setNode() or reset() method. - * - * @author Mathieu Bastian - */ -public interface ResetableIterator { -} diff --git a/modules/CollectionUtils/src/main/java/org/gephi/utils/collection/avl/SimpleAVLTree.java b/modules/CollectionUtils/src/main/java/org/gephi/utils/collection/avl/SimpleAVLTree.java deleted file mode 100644 index 4ed29b8241..0000000000 --- a/modules/CollectionUtils/src/main/java/org/gephi/utils/collection/avl/SimpleAVLTree.java +++ /dev/null @@ -1,729 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.utils.collection.avl; - -import java.util.Iterator; -import org.gephi.utils.collection.avl.ResetableIterator; - -/** - * Simple AVL Tree storing items of {@link AVLItem} class. It uses the getNumber() method to - * get item's key. With the iterator, nodes in the tree will be returned in a ascending order. - *

    - * The AVL tree implementaion is based on a iterative method and guarantee O(ln(n)) access. - * @author Mathieu Bastian - */ -public class SimpleAVLTree implements Iterable { - - protected SimpleAVLNode root; - protected int count; - - public boolean add(AVLItem item) { - SimpleAVLNode p = this.root; - - if (p == null) { - this.root = new SimpleAVLNode(item); - } else { - while (true) { - int c = item.getNumber() - p.item.getNumber(); - - if (c < 0) { - if (p.left != null) { - p = p.left; - } else { - p.left = new SimpleAVLNode(item, p); - p.balance--; - - break; - } - } else if (c > 0) { - if (p.right != null) { - p = p.right; - } else { - p.right = new SimpleAVLNode(item, p); - p.balance++; - - break; - } - } else { - return false; - } - } - - while ((p.balance != 0) && (p.parent != null)) { - if (p.parent.left == p) { - p.parent.balance--; - } else { - p.parent.balance++; - } - - p = p.parent; - - if (p.balance == -2) { - SimpleAVLNode x = p.left; - - if (x.balance == -1) { - x.parent = p.parent; - - if (p.parent == null) { - this.root = x; - } else { - if (p.parent.left == p) { - p.parent.left = x; - } else { - p.parent.right = x; - } - } - - p.left = x.right; - - if (p.left != null) { - p.left.parent = p; - } - - x.right = p; - p.parent = x; - - x.balance = 0; - p.balance = 0; - } else { - SimpleAVLNode w = x.right; - - w.parent = p.parent; - - if (p.parent == null) { - this.root = w; - } else { - if (p.parent.left == p) { - p.parent.left = w; - } else { - p.parent.right = w; - } - } - - x.right = w.left; - - if (x.right != null) { - x.right.parent = x; - } - - p.left = w.right; - - if (p.left != null) { - p.left.parent = p; - } - - w.left = x; - w.right = p; - - x.parent = w; - p.parent = w; - - if (w.balance == -1) { - x.balance = 0; - p.balance = 1; - } else if (w.balance == 0) { - x.balance = 0; - p.balance = 0; - } else // w.balance == 1 - { - x.balance = -1; - p.balance = 0; - } - - w.balance = 0; - } - - break; - } else if (p.balance == 2) { - SimpleAVLNode x = p.right; - - if (x.balance == 1) { - x.parent = p.parent; - - if (p.parent == null) { - this.root = x; - } else { - if (p.parent.left == p) { - p.parent.left = x; - } else { - p.parent.right = x; - } - } - - p.right = x.left; - - if (p.right != null) { - p.right.parent = p; - } - - x.left = p; - p.parent = x; - - x.balance = 0; - p.balance = 0; - } else { - SimpleAVLNode w = x.left; - - w.parent = p.parent; - - if (p.parent == null) { - this.root = w; - } else { - if (p.parent.left == p) { - p.parent.left = w; - } else { - p.parent.right = w; - } - } - - x.left = w.right; - - if (x.left != null) { - x.left.parent = x; - } - - p.right = w.left; - - if (p.right != null) { - p.right.parent = p; - } - - w.right = x; - w.left = p; - - x.parent = w; - p.parent = w; - - if (w.balance == 1) { - x.balance = 0; - p.balance = -1; - } else if (w.balance == 0) { - x.balance = 0; - p.balance = 0; - } else // w.balance == -1 - { - x.balance = 1; - p.balance = 0; - } - - w.balance = 0; - } - - break; - } - } - } - - this.count++; - return true; - } - - public boolean remove(AVLItem item) { - return this.remove(item.getNumber()); - } - - public boolean remove(int number) { - SimpleAVLNode p = this.root; - - while (p != null) { - int c = number - p.item.getNumber(); - - if (c < 0) { - p = p.left; - } else if (c > 0) { - p = p.right; - } else { - SimpleAVLNode y; // node from which rebalancing begins - - int choice = 0; //0:Done 1:Left 2:Right - - if (p.right == null) // Case 1: p has no right child - { - if (p.left != null) { - p.left.parent = p.parent; - } - - if (p.parent == null) { - this.root = p.left; - - count--; - return true; - } - - if (p == p.parent.left) { - p.parent.left = p.left; - - y = p.parent; - - choice = 1; - // goto LeftDelete; - } else { - p.parent.right = p.left; - - y = p.parent; - - choice = 2; - //goto RightDelete; - } - } else if (p.right.left == null) // Case 2: p's right child has no left child - { - if (p.left != null) { - p.left.parent = p.right; - p.right.left = p.left; - } - - p.right.balance = p.balance; - p.right.parent = p.parent; - - if (p.parent == null) { - this.root = p.right; - } else { - if (p == p.parent.left) { - p.parent.left = p.right; - } else { - p.parent.right = p.right; - } - } - - y = p.right; - - choice = 2; - //goto RightDelete; - } else // Case 3: p's right child has a left child - { - SimpleAVLNode s = p.right.left; - - while (s.left != null) { - s = s.left; - } - - if (p.left != null) { - p.left.parent = s; - s.left = p.left; - } - - s.parent.left = s.right; - - if (s.right != null) { - s.right.parent = s.parent; - } - - p.right.parent = s; - s.right = p.right; - - y = s.parent; // for rebalacing, must be set before we change s.parent - - s.balance = p.balance; - s.parent = p.parent; - - if (p.parent == null) { - this.root = s; - } else { - if (p == p.parent.left) { - p.parent.left = s; - } else { - p.parent.right = s; - } - } - - choice = 1; - // goto LeftDelete; - } - - // rebalancing begins - while (choice != 0) { - if (choice == 1) { - //LeftDelete: - - y.balance++; - - if (y.balance == 1) { - //goto Done; - choice = 0; - } else if (y.balance == 2) { - SimpleAVLNode x = y.right; - - if (x.balance == -1) { - SimpleAVLNode w = x.left; - - w.parent = y.parent; - - if (y.parent == null) { - this.root = w; - } else { - if (y.parent.left == y) { - y.parent.left = w; - } else { - y.parent.right = w; - } - } - - x.left = w.right; - - if (x.left != null) { - x.left.parent = x; - } - - y.right = w.left; - - if (y.right != null) { - y.right.parent = y; - } - - w.right = x; - w.left = y; - - x.parent = w; - y.parent = w; - - if (w.balance == 1) { - x.balance = 0; - y.balance = -1; - } else if (w.balance == 0) { - x.balance = 0; - y.balance = 0; - } else // w.balance == -1 - { - x.balance = 1; - y.balance = 0; - } - - w.balance = 0; - - y = w; // for next iteration - } else { - x.parent = y.parent; - - if (y.parent != null) { - if (y.parent.left == y) { - y.parent.left = x; - } else { - y.parent.right = x; - } - } else { - this.root = x; - } - - y.right = x.left; - - if (y.right != null) { - y.right.parent = y; - } - - x.left = y; - y.parent = x; - - if (x.balance == 0) { - x.balance = -1; - y.balance = 1; - - //goto Done - choice = 0; - } else { - x.balance = 0; - y.balance = 0; - - y = x; // for next iteration - } - } - } - } else if (choice == 2) { - //goto LoopTest; - - - //RightDelete: - - y.balance--; - - if (y.balance == -1) { - choice = 0; - //goto Done; - } else if (y.balance == -2) { - SimpleAVLNode x = y.left; - - if (x.balance == 1) { - SimpleAVLNode w = x.right; - - w.parent = y.parent; - - if (y.parent == null) { - this.root = w; - } else { - if (y.parent.left == y) { - y.parent.left = w; - } else { - y.parent.right = w; - } - } - - x.right = w.left; - - if (x.right != null) { - x.right.parent = x; - } - - y.left = w.right; - - if (y.left != null) { - y.left.parent = y; - } - - w.left = x; - w.right = y; - - x.parent = w; - y.parent = w; - - if (w.balance == -1) { - x.balance = 0; - y.balance = 1; - } else if (w.balance == 0) { - x.balance = 0; - y.balance = 0; - } else // w.balance == 1 - { - x.balance = -1; - y.balance = 0; - } - - w.balance = 0; - - y = w; // for next iteration - } else { - x.parent = y.parent; - - if (y.parent != null) { - if (y.parent.left == y) { - y.parent.left = x; - } else { - y.parent.right = x; - } - } else { - this.root = x; - } - - y.left = x.right; - - if (y.left != null) { - y.left.parent = y; - } - - x.right = y; - y.parent = x; - - if (x.balance == 0) { - x.balance = 1; - y.balance = -1; - - choice = 0; - //goto Done; - } else { - x.balance = 0; - y.balance = 0; - - y = x; // for next iteration - } - } - } - } - - - if (choice == 0) { - this.count--; - return true; - } - - //LoopTest: { - - if (y.parent != null) { - if (y == y.parent.left) { - y = y.parent; - choice = 1; - // goto LeftDelete; - } else { - y = y.parent; - choice = 2; - //goto RightDelete; - } - } else { - //Done - this.count--; - return true; - } - } - - } - } - - return false; - } - - public boolean contains(AVLItem item) { - SimpleAVLNode p = this.root; - - while (p != null) { - int c = item.getNumber() - p.item.getNumber(); - - if (c < 0) { - p = p.left; - } else if (c > 0) { - p = p.right; - } else { - return true; - } - } - - return false; - } - - public AVLItem get(int number) { - SimpleAVLNode p = this.root; - - while (p != null) { - int c = number - p.item.getNumber(); - - if (c < 0) { - p = p.left; - } else if (c > 0) { - p = p.right; - } else { - return p.item; - } - } - - return null; - } - - public void clear() { - this.root = null; - this.count = 0; - } - - public Iterator iterator() { - return new SimpleAVLIterator(this); - } - - public int getCount() { - return count; - } - - private class SimpleAVLNode { - - SimpleAVLNode parent; - SimpleAVLNode left; - SimpleAVLNode right; - int balance; - AVLItem item; - - public SimpleAVLNode(AVLItem item) { - this.item = item; - } - - public SimpleAVLNode(AVLItem item, SimpleAVLNode parent) { - this.item = item; - this.parent = parent; - } - } - - private class SimpleAVLIterator implements Iterator, ResetableIterator { - - private SimpleAVLNode next; - private AVLItem current; - - public SimpleAVLIterator() { - } - - public SimpleAVLIterator(SimpleAVLNode node) { - this.next = node; - goToDownLeft(); - } - - public SimpleAVLIterator(SimpleAVLTree tree) { - this(tree.root); - } - - public void setNode(SimpleAVLTree tree) { - this.next = tree.root; - goToDownLeft(); - } - - private void goToDownLeft() { - if (next != null) { - while (next.left != null) { - next = next.left; - } - } - } - - public boolean hasNext() { - if (next == null) { - return false; - } - - current = this.next.item; - - if (next.right == null) { - while ((next.parent != null) && (next == next.parent.right)) { - this.next = this.next.parent; - } - - this.next = this.next.parent; - } else { - this.next = this.next.right; - - while (this.next.left != null) { - this.next = this.next.left; - } - } - - return true; - } - - public AVLItem next() { - return current; - } - - public void remove() { - SimpleAVLTree.this.remove(current); - } - } -} diff --git a/modules/CollectionUtils/src/main/nbm/manifest.mf b/modules/CollectionUtils/src/main/nbm/manifest.mf deleted file mode 100644 index 3b6a2e9522..0000000000 --- a/modules/CollectionUtils/src/main/nbm/manifest.mf +++ /dev/null @@ -1,4 +0,0 @@ -Manifest-Version: 1.0 -AutoUpdate-Essential-Module: true -OpenIDE-Module-Localizing-Bundle: org/gephi/utils/collection/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file diff --git a/modules/CollectionUtils/src/main/nbm/module.xml b/modules/CollectionUtils/src/main/nbm/module.xml deleted file mode 100644 index c229bb0904..0000000000 --- a/modules/CollectionUtils/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/Bundle.properties b/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/Bundle.properties deleted file mode 100644 index 447283f5f4..0000000000 --- a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/Bundle.properties +++ /dev/null @@ -1,5 +0,0 @@ -OpenIDE-Module-Display-Category=Gephi Core -OpenIDE-Module-Long-Description=\ - Custom collections and libraries utilities:\n- Goolgle Collections\n- Trove -OpenIDE-Module-Name=Collection Utils -OpenIDE-Module-Short-Description=Custom collections and libraries utilities diff --git a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/Bundle_cs.properties b/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/Bundle_cs.properties deleted file mode 100644 index fef7a6b0b4..0000000000 --- a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/Bundle_cs.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-28 21\:35+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=Vlastn\u00ed sb\u00edrky a n\u00e1stroje knihoven\:\n- Google Collections\n- Trove - -OpenIDE-Module-Short-Description=Vlastn\u00ed sb\u00edrky a n\u00e1stroje knihoven diff --git a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/Bundle_es.properties b/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/Bundle_es.properties deleted file mode 100644 index ba2ce8cf3f..0000000000 --- a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/Bundle_es.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:29+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Colecciones personalizadas y librer\u00edas de utilidades - -OpenIDE-Module-Short-Description=Colecciones personalizadas y librer\u00edas de utilidades diff --git a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/Bundle_fr.properties b/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/Bundle_fr.properties deleted file mode 100644 index 58e9ddbf0f..0000000000 --- a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/Bundle_fr.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:29+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Collections personnalis\u00e9es et biblioth\u00e8ques utilitaires - -OpenIDE-Module-Short-Description=Collections personnalis\u00e9es et biblioth\u00e8ques utilitaires diff --git a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/Bundle_ja.properties b/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/Bundle_ja.properties deleted file mode 100644 index c0585caa8f..0000000000 --- a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/Bundle_ja.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-27 03\:10+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u30ab\u30b9\u30bf\u30e0\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u3068\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\:\n-Google\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\n-Trove - -OpenIDE-Module-Short-Description=\u30ab\u30b9\u30bf\u30e0\u30b3\u30ec\u30af\u30b7\u30e7\u30f3\u3068\u30e9\u30a4\u30d6\u30e9\u30ea\u306e\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3 diff --git a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/Bundle_pt_BR.properties b/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/Bundle_pt_BR.properties deleted file mode 100644 index 3e25cb20df..0000000000 --- a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/Bundle_pt_BR.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 23\:39+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Cole\u00e7\u00f5es personalizadas e bibliotecas de utilit\u00e1rios\:\n- Google Collections\n- Trove - -OpenIDE-Module-Short-Description=Cole\u00e7\u00f5es personalizadas e bibliotecas de utilit\u00e1rios diff --git a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/Bundle_ru.properties b/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/Bundle_ru.properties deleted file mode 100644 index 121bcdee98..0000000000 --- a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/Bundle_ru.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-06 06\:56+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=\u0412\u044b\u0431\u043e\u0440\u043e\u0447\u043d\u044b\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0443\u0442\u0438\u043b\u0438\u0442\:\n- Goolgle Collections\n- Trove - -OpenIDE-Module-Short-Description=\u0412\u044b\u0431\u043e\u0440\u043e\u0447\u043d\u044b\u0435 \u043a\u043e\u043b\u043b\u0435\u043a\u0446\u0438\u0438 \u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0443\u0442\u0438\u043b\u0438\u0442 diff --git a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/Bundle_zh_CN.properties b/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/Bundle_zh_CN.properties deleted file mode 100644 index 4e87e86847..0000000000 --- a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/Bundle_zh_CN.properties +++ /dev/null @@ -1,10 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:20+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u81ea\u5b9a\u4e49\u6536\u96c6\u548c\u5e93\u5de5\u5177\uff1a\n- Goolgle\u6536\u96c6 \n- \u5b9d\u5e93 - -OpenIDE-Module-Short-Description=\u81ea\u5b9a\u4e49\u6536\u96c6\u548c\u5e93\u5de5\u5177 diff --git a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/cs.po b/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/cs.po deleted file mode 100644 index 8ee7323c98..0000000000 --- a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/cs.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-28 21:35+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "VlastnΓ­ sbΓ­rky a nΓ‘stroje knihoven:\n- Google Collections\n- Trove" - -msgid "OpenIDE-Module-Short-Description" -msgstr "VlastnΓ­ sbΓ­rky a nΓ‘stroje knihoven" diff --git a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/es.po b/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/es.po deleted file mode 100644 index 087bf7d6e9..0000000000 --- a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/es.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:29+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Colecciones personalizadas y librerΓ­as de utilidades" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Colecciones personalizadas y librerΓ­as de utilidades" diff --git a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/fr.po b/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/fr.po deleted file mode 100644 index f8698a5c63..0000000000 --- a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/fr.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:29+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Collections personnalisΓ©es et bibliothΓ¨ques utilitaires" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Collections personnalisΓ©es et bibliothΓ¨ques utilitaires" diff --git a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/ja.po b/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/ja.po deleted file mode 100644 index d879c2b0b4..0000000000 --- a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-27 03:10+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "カスタムコレクションとラむブラγƒͺγγƒ¦γƒΌγƒ†γ‚£γƒͺティ:\n-Googleコレクション\n-Trove" - -msgid "OpenIDE-Module-Short-Description" -msgstr "カスタムコレクションとラむブラγƒͺγγƒ¦γƒΌγƒ†γ‚£γƒͺティ" diff --git a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/org-gephi-utils-collection.pot b/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/org-gephi-utils-collection.pot deleted file mode 100644 index 3087751de3..0000000000 --- a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/org-gephi-utils-collection.pot +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "" -"Custom collections and libraries utilities:\n" -"- Goolgle Collections\n" -"- Trove" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Custom collections and libraries utilities" diff --git a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/pt_BR.po b/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/pt_BR.po deleted file mode 100644 index b02bbde419..0000000000 --- a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/pt_BR.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 23:39+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ColeΓ§Γ΅es personalizadas e bibliotecas de utilitΓ‘rios:\n- Google Collections\n- Trove" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ColeΓ§Γ΅es personalizadas e bibliotecas de utilitΓ‘rios " diff --git a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/ru.po b/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/ru.po deleted file mode 100644 index 88002860e0..0000000000 --- a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/ru.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-06 06:56+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Π’Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚:\n- Goolgle Collections\n- Trove" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Π’Ρ‹Π±ΠΎΡ€ΠΎΡ‡Π½Ρ‹Π΅ ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚" diff --git a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/zh_CN.po b/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/zh_CN.po deleted file mode 100644 index 2e3eb4a670..0000000000 --- a/modules/CollectionUtils/src/main/resources/org/gephi/utils/collection/zh_CN.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:20+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "θ‡ͺεšδΉ‰ζ”Άι›†ε’ŒεΊ“ε·₯ε…·οΌš\n- Goolgle攢集 \n- εεΊ“" - -msgid "OpenIDE-Module-Short-Description" -msgstr "θ‡ͺεšδΉ‰ζ”Άι›†ε’ŒεΊ“ε·₯ε…·" diff --git a/modules/CoreLibraryWrapper/pom.xml b/modules/CoreLibraryWrapper/pom.xml index 8ef76f4581..5549ac557f 100644 --- a/modules/CoreLibraryWrapper/pom.xml +++ b/modules/CoreLibraryWrapper/pom.xml @@ -4,132 +4,100 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi core-library-wrapper - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm CoreLibraryWrapper + + + snapshot-20100402 + 1.21.0 + 1.28.0 + 1.14.1 + 3.6.1 + 1.0.19 + 3.0.7 + 3.0.3 + 2.13.2 + - - joda-time - joda-time - 2.1 - net.java.dev stax-utils - snapshot-20100402 + ${gephi.stax-utils.version} commons-codec commons-codec - 1.6 + ${gephi.commons-codec.version} org.apache.commons commons-compress - 1.1 - - - jfree - jfreechart - 1.0.13 + ${gephi.commons-compress.version} - gnu.trove - trove - 2.1.0 - - - com.google.collections - google-collections - 1.0 + org.apache.commons + commons-math3 + ${gephi.commons-math3.version} - net.sourceforge.javacsv - javacsv - 2.0 + org.jfree + jfreechart + ${gephi.jfreechart.version} - xml-apis-ext - xml-apis - 1.3.04 + net.sf.trove4j + trove4j + ${gephi.trove4j.version} - com.itextpdf - itextpdf - 5.2.0 + org.apache.commons + commons-csv + ${gephi.commons-csv.version} - org.apache.xmlgraphics - batik-transcoder - 1.7 - - - org.apache.xmlgraphics - batik-js - - - org.apache.xmlgraphics - batik-svggen - - - org.apache.xmlgraphics - fop - - - xml-apis - xml-apis-ext - - - xml-apis - xml-apis - - + org.apache.pdfbox + pdfbox + ${gephi.pdfbox.version} - it.unimi.dsi - fastutil - 6.5.9 + com.google.code.gson + gson + ${gephi.gson.version} - colt - colt - 1.2.0 + org.apache.logging.log4j + log4j-api + 2.21.1 - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin - org.joda.time.* org.apache.commons.codec.* org.apache.commons.compress.* + org.apache.commons.math3.* org.jfree.* - com.google.common.* gnu.trove.* - com.csvreader - javax.xml.* - org.w3c.* - com.itextpdf.text.* - processing.* - org.apache.batik.* - org.apache.xpath.* - org.apache.xalan.* - org.apache.xml.* - org.xml.sax.* + org.apache.commons.csv.* + org.apache.pdfbox.* + org.apache.fontbox.* javanet.staxutils.* - it.unimi.dsi.fastutil.* + com.google.gson.* + org.apache.logging.log4j.* diff --git a/modules/CoreLibraryWrapper/src/main/nbm/manifest.mf b/modules/CoreLibraryWrapper/src/main/nbm/manifest.mf index bf740c92a2..cc4aeb24e5 100644 --- a/modules/CoreLibraryWrapper/src/main/nbm/manifest.mf +++ b/modules/CoreLibraryWrapper/src/main/nbm/manifest.mf @@ -1,4 +1,5 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true -OpenIDE-Module-Localizing-Bundle: org/gephi/lib/core/Bundle.properties OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Libraries +OpenIDE-Module-Name: Core Library Wrapper \ No newline at end of file diff --git a/modules/CoreLibraryWrapper/src/main/nbm/module.xml b/modules/CoreLibraryWrapper/src/main/nbm/module.xml deleted file mode 100644 index b218d372c6..0000000000 --- a/modules/CoreLibraryWrapper/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/CoreLibraryWrapper/src/main/resources/org/gephi/lib/core/Bundle.properties b/modules/CoreLibraryWrapper/src/main/resources/org/gephi/lib/core/Bundle.properties deleted file mode 100644 index 27785ad03a..0000000000 --- a/modules/CoreLibraryWrapper/src/main/resources/org/gephi/lib/core/Bundle.properties +++ /dev/null @@ -1 +0,0 @@ -OpenIDE-Module-Display-Category=Libraries \ No newline at end of file diff --git a/modules/DBDrivers/pom.xml b/modules/DBDrivers/pom.xml index 6b7440096c..6203236c41 100644 --- a/modules/DBDrivers/pom.xml +++ b/modules/DBDrivers/pom.xml @@ -4,47 +4,44 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi db-drivers - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm DBDrivers + + 3.50.3.0 + 9.4.0 + 42.7.13 + 13.2.1.jre11 + + org.xerial sqlite-jdbc - 3.7.2 + ${gephi.sqlite.version} - mysql - mysql-connector-java - 5.1.18 + com.mysql + mysql-connector-j + ${gephi.mysql.version} - postgresql + org.postgresql postgresql - 9.1-901-1.jdbc4 + ${gephi.postgresql.version} com.microsoft.sqlserver - sqljdbc4 - 3.0.1301.101 - - - com.teradata - teradata-jdbc - 14.00.00.21 - - - com.teradata - teradata-config - 14.00.00.21 + mssql-jdbc + ${gephi.sqlserver.version} org.netbeans.api @@ -55,11 +52,18 @@ - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin + autoload + warn org.gephi.io.database.drivers + com.microsoft.sqlserver.* + microsoft.sql.* + com.mysql.* + org.postgresql.* + org.sqlite.* diff --git a/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/MySQLDriver.java b/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/MySQLDriver.java index d4ab7e8af2..3b2f1c8e4b 100644 --- a/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/MySQLDriver.java +++ b/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/MySQLDriver.java @@ -39,18 +39,31 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.database.drivers; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ +@ServiceProvider(service = SQLDriver.class, position = 10) public class MySQLDriver implements SQLDriver { + public MySQLDriver() { + try { + Class.forName("com.mysql.jdbc.Driver"); + } catch (ClassNotFoundException ex) { + Logger.getLogger(MySQLDriver.class.getName()).log(Level.SEVERE, null, ex); + } + } + + @Override public Connection getConnection(String connectionUrl, String username, String passwd) throws SQLException { return DriverManager.getConnection(connectionUrl, username, passwd); } diff --git a/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/PostgreSQLDriver.java b/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/PostgreSQLDriver.java index 5150f1a139..e3c49cdfe6 100644 --- a/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/PostgreSQLDriver.java +++ b/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/PostgreSQLDriver.java @@ -38,19 +38,31 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.io.database.drivers; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ +@ServiceProvider(service = SQLDriver.class, position = 30) public class PostgreSQLDriver implements SQLDriver { + public PostgreSQLDriver() { + try { + Class.forName("org.postgresql.Driver"); + } catch (ClassNotFoundException ex) { + Logger.getLogger(PostgreSQLDriver.class.getName()).log(Level.SEVERE, null, ex); + } + } + @Override public Connection getConnection(String connectionUrl, String username, String passwd) throws SQLException { return DriverManager.getConnection(connectionUrl, username, passwd); diff --git a/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/SQLDriver.java b/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/SQLDriver.java index 62849a8a46..dac4c324bf 100644 --- a/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/SQLDriver.java +++ b/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/SQLDriver.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.database.drivers; import java.io.Serializable; @@ -46,15 +47,14 @@ Development and Distribution License("CDDL") (collectively, the import java.sql.SQLException; /** - * * @author Mathieu Bastian */ public interface SQLDriver extends Serializable { - public String getPrefix(); + String getPrefix(); - public Connection getConnection(String connectionUrl, String username, String passwd) throws SQLException; + Connection getConnection(String connectionUrl, String username, String passwd) throws SQLException; @Override - public String toString(); + String toString(); } diff --git a/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/SQLServerDriver.java b/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/SQLServerDriver.java index 94248f311a..236cc23a14 100644 --- a/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/SQLServerDriver.java +++ b/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/SQLServerDriver.java @@ -1,13 +1,13 @@ /* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian +Copyright 2008-2017 Gephi +Authors : Mathieu Bastian Eduardo Ramos Website : http://www.gephi.org This file is part of Gephi. DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. -Copyright 2011 Gephi Consortium. All rights reserved. +Copyright 2017 Gephi Consortium. All rights reserved. The contents of this file are subject to the terms of either the GNU General Public License Version 3 only ("GPL") or the Common @@ -37,20 +37,32 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): -Portions Copyrighted 2011 Gephi Consortium. +Portions Copyrighted 2017 Gephi Consortium. */ + package org.gephi.io.database.drivers; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ +@ServiceProvider(service = SQLDriver.class, position = 40) public class SQLServerDriver implements SQLDriver { + public SQLServerDriver() { + try { + Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); + } catch (ClassNotFoundException ex) { + Logger.getLogger(MySQLDriver.class.getName()).log(Level.SEVERE, null, ex); + } + } + @Override public Connection getConnection(String connectionUrl, String username, String passwd) throws SQLException { //Bug #745414 diff --git a/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/SQLUtils.java b/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/SQLUtils.java index 4bec689386..348b1dd4e5 100644 --- a/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/SQLUtils.java +++ b/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/SQLUtils.java @@ -39,12 +39,12 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.database.drivers; import org.openide.util.Lookup; /** - * * @author Mathieu Bastian */ public class SQLUtils { diff --git a/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/SQLiteDriver.java b/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/SQLiteDriver.java index 27de907184..41b9afea56 100644 --- a/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/SQLiteDriver.java +++ b/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/SQLiteDriver.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.database.drivers; import java.sql.Connection; @@ -46,11 +47,12 @@ Development and Distribution License("CDDL") (collectively, the import java.sql.SQLException; import java.util.logging.Level; import java.util.logging.Logger; +import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ +@ServiceProvider(service = SQLDriver.class, position = 20) public class SQLiteDriver implements SQLDriver { public SQLiteDriver() { diff --git a/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/TeradataDriver.java b/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/TeradataDriver.java deleted file mode 100644 index 27b6c84cfb..0000000000 --- a/modules/DBDrivers/src/main/java/org/gephi/io/database/drivers/TeradataDriver.java +++ /dev/null @@ -1,102 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.io.database.drivers; - -import java.sql.Connection; -import java.sql.DriverManager; -import java.sql.SQLException; -import java.util.logging.Level; -import java.util.logging.Logger; - -/** - * - * @author Mathieu Bastian - */ -public class TeradataDriver implements SQLDriver { - - public TeradataDriver() { - try { - // load the teradata using the current class loader - Class.forName("com.teradata.jdbc.TeraDriver"); - } catch (ClassNotFoundException ex) { - Logger.getLogger(SQLiteDriver.class.getName()).log(Level.SEVERE, null, ex); - } - } - - @Override - public Connection getConnection(String connectionUrl, String username, String passwd) throws SQLException { - if (!connectionUrl.contains("database=")) { - String dbname = connectionUrl.substring(connectionUrl.lastIndexOf('/') + 1); - String url = connectionUrl.substring(0, connectionUrl.lastIndexOf('/')); - String port = url.substring(url.lastIndexOf(":") + 1); - port = port.isEmpty() ? "" : ",dbs_port=" + port; - url = url.substring(0, url.lastIndexOf(":")); - connectionUrl = url + "/database=" + dbname + ",charset=UTF8" + port; - } - - return DriverManager.getConnection(connectionUrl, username, passwd); - } - - @Override - public String getPrefix() { - return "teradata"; - } - - @Override - public String toString() { - return "Teradata"; - } - - @Override - public boolean equals(Object obj) { - if (obj instanceof TeradataDriver) { - return ((TeradataDriver) obj).getPrefix().equals(getPrefix()); - } else { - return false; - } - } - - @Override - public int hashCode() { - return getPrefix().hashCode(); - } -} diff --git a/modules/DBDrivers/src/main/nbm/manifest.mf b/modules/DBDrivers/src/main/nbm/manifest.mf index c830419293..22a09a4cfd 100644 --- a/modules/DBDrivers/src/main/nbm/manifest.mf +++ b/modules/DBDrivers/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/io/database/drivers/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Libraries +OpenIDE-Module-Name: DBDrivers \ No newline at end of file diff --git a/modules/DBDrivers/src/main/nbm/module.xml b/modules/DBDrivers/src/main/nbm/module.xml deleted file mode 100644 index 4afeaa842c..0000000000 --- a/modules/DBDrivers/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/DBDrivers/src/main/resources/META-INF/services/org.gephi.io.database.drivers.SQLDriver b/modules/DBDrivers/src/main/resources/META-INF/services/org.gephi.io.database.drivers.SQLDriver deleted file mode 100644 index 530610afe1..0000000000 --- a/modules/DBDrivers/src/main/resources/META-INF/services/org.gephi.io.database.drivers.SQLDriver +++ /dev/null @@ -1,5 +0,0 @@ -org.gephi.io.database.drivers.MySQLDriver -org.gephi.io.database.drivers.SQLServerDriver -org.gephi.io.database.drivers.PostgreSQLDriver -org.gephi.io.database.drivers.SQLiteDriver -org.gephi.io.database.drivers.TeradataDriver \ No newline at end of file diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle.properties b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle.properties index 4e1148177a..92c2e2c3f4 100644 --- a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle.properties +++ b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle.properties @@ -1,5 +1,2 @@ -OpenIDE-Module-Display-Category=Libraries -OpenIDE-Module-Long-Description=\ - Database Drivers (MySQL, PostgreSQL, SQLite, Teradata, SQLServer) -OpenIDE-Module-Name=DBDrivers +OpenIDE-Module-Long-Description=Database Drivers (MySQL, PostgreSQL, SQLite) OpenIDE-Module-Short-Description=Database Drivers diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_ar.properties b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_ca.properties b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_ca.properties new file mode 100644 index 0000000000..92c2e2c3f4 --- /dev/null +++ b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_ca.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Database Drivers (MySQL, PostgreSQL, SQLite) +OpenIDE-Module-Short-Description=Database Drivers diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_cs.properties b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_cs.properties index a39c1435c4..c6f4d7e1e2 100644 --- a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_cs.properties +++ b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_cs.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-26 18\:23+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=Ovlada\u010de datab\u00e1ze (MySQL, PostgreSQL, SQLite, Teradata, SQLServer) - -OpenIDE-Module-Short-Description=Ovlada\u010de datab\u00e1ze +# OpenIDE-Module-Long-Description=Database Drivers (MySQL, PostgreSQL, SQLite) +OpenIDE-Module-Short-Description=Ovlada\u010de databαze diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_de.properties b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_de.properties new file mode 100644 index 0000000000..827d5c914b --- /dev/null +++ b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_de.properties @@ -0,0 +1,3 @@ +# OpenIDE-Module-Long-Description=Database Drivers (MySQL, PostgreSQL, SQLite) +OpenIDE-Module-Short-Description=Datenbank-Treiber +OpenIDE-Module-Long-Description=Datenbank-Treiber (MySQL, PostgreSQL, SQLite) diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_es.properties b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_es.properties index ce5ceec144..ba13baa031 100644 --- a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_es.properties +++ b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_es.properties @@ -1,12 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 18\:24+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Controladores para las bases de datos (MySQL, PostgreSQL, SQLite, Teradata, SQLServer) - -OpenIDE-Module-Short-Description=Controladores para las bases de datos +OpenIDE-Module-Long-Description=Controladores para las bases de datos (MySQL, PostgreSQL, SQLite, Teradata, SQLServer) +OpenIDE-Module-Short-Description=Controladores para las bases de datos diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_fr.properties b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_fr.properties index f674e50a6a..153a81d4b8 100644 --- a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_fr.properties +++ b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_fr.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 18\:18+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Pilotes de base de donn\u00e9es (MySQL, SQLServer) - -OpenIDE-Module-Short-Description=Pilotes de base de donn\u00e9es +OpenIDE-Module-Long-Description=Pilotes de base de donnιes (MySQL, PostgreSQL, SQLite) +OpenIDE-Module-Short-Description=Pilotes de base de donnιes diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_he.properties b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_he.properties new file mode 100644 index 0000000000..92c2e2c3f4 --- /dev/null +++ b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_he.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Database Drivers (MySQL, PostgreSQL, SQLite) +OpenIDE-Module-Short-Description=Database Drivers diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_hu.properties b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_hu.properties new file mode 100644 index 0000000000..d805d879a4 --- /dev/null +++ b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_hu.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Short-Description=Adatb\u00E1zis-illeszt\u0151programok +OpenIDE-Module-Long-Description=Adatb\u00E1zis-illeszt\u0151programok (MySQL, PostgreSQL, SQLite) diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_it.properties b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_it.properties new file mode 100644 index 0000000000..92c2e2c3f4 --- /dev/null +++ b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_it.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Database Drivers (MySQL, PostgreSQL, SQLite) +OpenIDE-Module-Short-Description=Database Drivers diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_ja.properties b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_ja.properties index f6bd627b63..66e9f27c47 100644 --- a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_ja.properties +++ b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_ja.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 18\:18+0000\nLast-Translator\: gephi \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c9\u30e9\u30a4\u30d0(MySQL\u3001SQLServer) - -OpenIDE-Module-Short-Description=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c9\u30e9\u30a4\u30d0 +# OpenIDE-Module-Long-Description=Database Drivers (MySQL, PostgreSQL, SQLite) +OpenIDE-Module-Short-Description=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30c9\u30e9\u30a4\u30d0 diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_ko.properties b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_ko.properties new file mode 100644 index 0000000000..575a146309 --- /dev/null +++ b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_ko.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Short-Description=\uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uB4DC\uB77C\uC774\uBC84 +OpenIDE-Module-Long-Description=\uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uB4DC\uB77C\uC774\uBC84 (MySQL, PostgreSQL, SQLite) diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_nl.properties b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_nl.properties new file mode 100644 index 0000000000..92c2e2c3f4 --- /dev/null +++ b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_nl.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Database Drivers (MySQL, PostgreSQL, SQLite) +OpenIDE-Module-Short-Description=Database Drivers diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_pt_BR.properties b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_pt_BR.properties index 263b634d1f..140becfa8c 100644 --- a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_pt_BR.properties +++ b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_pt_BR.properties @@ -1,11 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 18\:18+0000\nLast-Translator\: gephi \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Drivers de banco de dados (MySQL, SQLServer) - +# OpenIDE-Module-Long-Description=Database Drivers (MySQL, PostgreSQL, SQLite) OpenIDE-Module-Short-Description=Drivers de banco de dados +OpenIDE-Module-Long-Description=Drivers de banco de dados (MySQL, PostgreSQL, SQLite) diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_ro.properties b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_ro.properties new file mode 100644 index 0000000000..a3087419ef --- /dev/null +++ b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_ro.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Long-Description=Drivere de baze de date (MySQL, PostgreSQL, SQLite) +OpenIDE-Module-Short-Description=Drivere de baze de date diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_ru.properties b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_ru.properties index e92403e2ae..3f74d37b54 100644 --- a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_ru.properties +++ b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_ru.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 18\:18+0000\nLast-Translator\: gephi \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=\u0414\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0411\u0414 (MySQL, SQLServer) - -OpenIDE-Module-Short-Description=\u0414\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0411\u0414 +# OpenIDE-Module-Long-Description=Database Drivers (MySQL, PostgreSQL, SQLite) +OpenIDE-Module-Short-Description=\u0414\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0411\u0414 diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_th.properties b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_tr.properties b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_tr.properties new file mode 100644 index 0000000000..92c2e2c3f4 --- /dev/null +++ b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_tr.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Database Drivers (MySQL, PostgreSQL, SQLite) +OpenIDE-Module-Short-Description=Database Drivers diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_uk.properties b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_uk.properties new file mode 100644 index 0000000000..fd18ce5a39 --- /dev/null +++ b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_uk.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=\u0414\u0440\u0430\u0439\u0432\u0435\u0440\u0438 \u0431\u0430\u0437 \u0434\u0430\u043D\u0438\u0445 (MySQL, PostgreSQL, SQLite) +OpenIDE-Module-Short-Description=\u0414\u0440\u0430\u0439\u0432\u0435\u0440\u0438 \u0431\u0430\u0437\u0438 \u0434\u0430\u043D\u0438\u0445 diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_zh_CN.properties b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_zh_CN.properties index 61263bd420..b1c95fc9d6 100644 --- a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_zh_CN.properties +++ b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_zh_CN.properties @@ -1,10 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 18\:18+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u6570\u636e\u5e93\u9a71\u52a8\u7a0b\u5e8f\uff08MySQL\uff0cSQL\u670d\u52a1\u5668\uff09 - +# OpenIDE-Module-Long-Description=Database Drivers (MySQL, PostgreSQL, SQLite) OpenIDE-Module-Short-Description=\u6570\u636e\u5e93\u9a71\u52a8\u7a0b\u5e8f +OpenIDE-Module-Long-Description=\u6570\u636E\u5E93\u9A71\u52A8\u7A0B\u5E8F\uFF08MySQL\u3001PostgreSQL\u3001SQLite\uFF09 diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_zh_TW.properties b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_zh_TW.properties new file mode 100644 index 0000000000..92c2e2c3f4 --- /dev/null +++ b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/Bundle_zh_TW.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Database Drivers (MySQL, PostgreSQL, SQLite) +OpenIDE-Module-Short-Description=Database Drivers diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/cs.po b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/cs.po deleted file mode 100644 index af83553645..0000000000 --- a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/cs.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-26 18:23+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Ovladače databΓ‘ze (MySQL, PostgreSQL, SQLite, Teradata, SQLServer)" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Ovladače databΓ‘ze" diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/es.po b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/es.po deleted file mode 100644 index 6b8944991d..0000000000 --- a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/es.po +++ /dev/null @@ -1,26 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 18:24+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Controladores para las bases de datos (MySQL, PostgreSQL, SQLite, Teradata, SQLServer)" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Controladores para las bases de datos" diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/fr.po b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/fr.po deleted file mode 100644 index d534e672d3..0000000000 --- a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/fr.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 18:18+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Pilotes de base de donnΓ©es (MySQL, SQLServer)" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Pilotes de base de donnΓ©es" diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/ja.po b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/ja.po deleted file mode 100644 index 5fa07394aa..0000000000 --- a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 18:18+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "データベースドラむバ(MySQL、SQLServer)" - -msgid "OpenIDE-Module-Short-Description" -msgstr "データベースドラむバ" diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/org-gephi-io-database-drivers.pot b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/org-gephi-io-database-drivers.pot deleted file mode 100644 index 448c764f69..0000000000 --- a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/org-gephi-io-database-drivers.pot +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Database Drivers (MySQL, PostgreSQL, SQLite, Teradata, SQLServer)" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Database Drivers" diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/pt_BR.po b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/pt_BR.po deleted file mode 100644 index f1ce201ea1..0000000000 --- a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/pt_BR.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 18:18+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Drivers de banco de dados (MySQL, SQLServer)" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Drivers de banco de dados" diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/ru.po b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/ru.po deleted file mode 100644 index a780ddc624..0000000000 --- a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/ru.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 18:18+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Π”Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π‘Π” (MySQL, SQLServer)" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Π”Ρ€Π°ΠΉΠ²Π΅Ρ€Π° Π‘Π”" diff --git a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/zh_CN.po b/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/zh_CN.po deleted file mode 100644 index 4511f68fc0..0000000000 --- a/modules/DBDrivers/src/main/resources/org/gephi/io/database/drivers/zh_CN.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 18:18+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ζ•°ζεΊ“ι©±εŠ¨η¨‹εΊοΌˆMySQL,SQLζœεŠ‘ε™¨οΌ‰" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζ•°ζεΊ“ι©±εŠ¨η¨‹εΊ" diff --git a/modules/DataLaboratoryAPI/pom.xml b/modules/DataLaboratoryAPI/pom.xml index 23a30b964d..6d1ae45ab2 100644 --- a/modules/DataLaboratoryAPI/pom.xml +++ b/modules/DataLaboratoryAPI/pom.xml @@ -4,13 +4,13 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi datalab-api - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm DataLaboratoryAPI @@ -20,10 +20,6 @@ ${project.groupId} utils - - ${project.groupId} - dynamic-api - ${project.groupId} graph-api @@ -49,20 +45,14 @@ - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin org.gephi.datalab.api org.gephi.datalab.api.datatables - org.gephi.datalab.spi - org.gephi.datalab.spi.columns - org.gephi.datalab.spi.columns.merge - org.gephi.datalab.spi.edges - org.gephi.datalab.spi.general - org.gephi.datalab.spi.nodes - org.gephi.datalab.spi.rows.merge - org.gephi.datalab.spi.values + org.gephi.datalab.spi.* + org.gephi.datalab.utils diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/AttributeColumnsController.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/AttributeColumnsController.java index 82c6fbe85f..0e7fed11e7 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/AttributeColumnsController.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/AttributeColumnsController.java @@ -39,26 +39,26 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.api; -import java.io.File; import java.math.BigDecimal; -import java.nio.charset.Charset; import java.util.List; import java.util.Map; import java.util.regex.Pattern; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; -import org.gephi.data.attributes.api.AttributeType; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; -import org.gephi.graph.api.Attributes; +import org.gephi.graph.api.Column; import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Element; import org.gephi.graph.api.Node; +import org.gephi.graph.api.Table; +import org.gephi.graph.api.TimeRepresentation; /** *

    This interface defines part of the Data Laboratory API basic actions.

    *

    It contains methods for manipulating the attributes and properties of nodes and edges.

    - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public interface AttributeColumnsController { @@ -67,12 +67,13 @@ public interface AttributeColumnsController { * it will try to parse the toString representation of the value.

    *

    Takes care to avoid parsing exceptions of the target column type.

    *

    Also, this will not set a null value to a column that can't have null values (see canClearColumnData method) if the given object is null or the parsing fails.

    - * @param value Value to set, can be null - * @param row Row + * + * @param value Value to set, can be null + * @param row Row * @param column Column * @return True if the value was set, false otherwise */ - boolean setAttributeValue(Object value, Attributes row, AttributeColumn column); + boolean setAttributeValue(Object value, Element row, Column column); /** *

    Adds a new column to the specified table with the given title and type of column.

    @@ -82,280 +83,317 @@ public interface AttributeColumnsController { * it will be given the default dynamic time interval id to be able to use dynamic filters.

    *

    The AttributeOrigin of the column will be set to DATA.

    *

    Default column value will be set to null.

    + * * @param table Table to add the column * @param title Title for the new column, can't be repeated in the table, null or empty string - * @param type Type for the new column + * @param type Type for the new column * @return The created column or null if the column could not be created */ - AttributeColumn addAttributeColumn(AttributeTable table, String title, AttributeType type); + Column addAttributeColumn(Table table, String title, Class type); /** *

    Duplicates a given column of a table and copies al row values.

    - *

    If the AttributeType for the new column is different from the old column type, it will try to parse each value. If it is not possible, the value will be set to null.

    + *

    If the Class for the new column is different from the old column type, it will try to parse each value. If it is not possible, the value will be set to null.

    *

    The title for the new column can't be repeated in the table, null or an empty string.

    . *

    The id of the column will be set to the title.

    *

    The AttributeOrigin of the column will be set to DATA.

    *

    Default column value will be set to null.

    - * @param table Table of the column to duplicate + * + * @param table Table of the column to duplicate * @param column Column to duplicate - * @param title Title for the new column - * @param type AttributeType for the new column + * @param title Title for the new column + * @param type Class for the new column * @return The created column or null if the column could not be created */ - AttributeColumn duplicateColumn(AttributeTable table, AttributeColumn column, String title, AttributeType type); + Column duplicateColumn(Table table, Column column, String title, Class type); /** *

    Copies all row values of a column to another column.

    - *

    If the AttributeType for the target is different from the source column type, it will try to parse each value. If it is not possible, the value will be set to null.

    + *

    If the Class for the target is different from the source column type, it will try to parse each value. If it is not possible, the value will be set to null.

    *

    Source and target columns must be different.

    - * @param table Table of the columns + * + * @param table Table of the columns * @param sourceColumn Source column * @param targetColumn Target column */ - void copyColumnDataToOtherColumn(AttributeTable table, AttributeColumn sourceColumn, AttributeColumn targetColumn); + void copyColumnDataToOtherColumn(Table table, Column sourceColumn, Column targetColumn); /** *

    Deletes the specified column from a table if the table has the column and data laboratory behaviour allows to delete it (see canDeleteColumn method).

    - * @param table Table to delete the column + * + * @param table Table to delete the column * @param column Column to delete */ - void deleteAttributeColumn(AttributeTable table, AttributeColumn column); - + void deleteAttributeColumn(Table table, Column column); + /** *

    Converts and replaces a table column with a dynamic column preserving original column values.

    *

    This should be used only in columns where the canConvertColumnToDynamic returns true

    - *

    The new values have a default interval that uses the low, high, lopen and ropen parameters.

    - * @param table Table of the column + *

    For graphs with {@code INTERVAL} {@link TimeRepresentation}, the new values have a default interval that uses the {@code low} and {@code high} parameters.

    + *

    For graphs with {@code TIMESTAMP} {@link TimeRepresentation}, the new values have a default timestamp that uses the {@code low} parameter, {@code high} parameter is ignored.

    + * + * @param table Table of the column * @param column Column to convert and replace - * @param low Low bound for default interval - * @param high High bound for default interval - * @param lopen Open low bound for default interval - * @param ropen Open high bound for default interval + * @param low Low bound for default interval or default timestamp + * @param high High bound for default interval or ignored for timestamps * @return The new column */ - AttributeColumn convertAttributeColumnToDynamic(AttributeTable table, AttributeColumn column, double low, double high, boolean lopen, boolean ropen); - + Column convertAttributeColumnToDynamic(Table table, Column column, double low, double high); + /** *

    Converts a table column into a new dynamic column preserving original column values. The original column is kept intact

    - *

    The new values have a default interval that uses the low, high, lopen and ropen parameters.

    - * @param table Table of the column - * @param column Column to convert to dynamic - * @param low Low bound for default interval - * @param high High bound for default interval - * @param lopen Open low bound for default interval - * @param ropen Open high bound for default interval + *

    For graphs with {@code INTERVAL} {@link TimeRepresentation}, the new values have a default interval that uses the {@code low} and {@code high} parameters.

    + *

    For graphs with {@code TIMESTAMP} {@link TimeRepresentation}, the new values have a default timestamp that uses the {@code low} parameter, {@code high} parameter is ignored.

    + * + * @param table Table of the column + * @param column Column to convert to dynamic + * @param low Low bound for default interval or default timestamp + * @param high High bound for default interval or ignored for timestamps * @param newColumnTitle Title for the new dynamic column * @return The new column */ - AttributeColumn convertAttributeColumnToNewDynamicColumn(AttributeTable table, AttributeColumn column, double low, double high, boolean lopen, boolean ropen, String newColumnTitle); + Column convertAttributeColumnToNewDynamicColumn(Table table, Column column, double low, double high, + String newColumnTitle); /** *

    Fills the data values of a given column of a table with a value as a String, - * parsing it for the AttributeType of the column. If it is not possible to parse, + * parsing it for the Class of the column. If it is not possible to parse, * the value will be set to null.

    - * @param table Table of the column + * + * @param table Table of the column * @param column Column to fill - * @param value String representation of the value for each row of the column + * @param value String representation of the value for each row of the column */ - void fillColumnWithValue(AttributeTable table, AttributeColumn column, String value); + void fillColumnWithValue(Table table, Column column, String value); /** *

    Fills the data values of a given column of the indicated nodes with a value as a String, - * parsing it for the AttributeType of the column. If it is not possible to parse, + * parsing it for the Class of the column. If it is not possible to parse, * the value will be set to null.

    - * @param nodes Nodes to fill + * + * @param nodes Nodes to fill * @param column Column to fill - * @param value String representation of the value for the column for each node + * @param value String representation of the value for the column for each node */ - void fillNodesColumnWithValue(Node[] nodes, AttributeColumn column, String value); + void fillNodesColumnWithValue(Node[] nodes, Column column, String value); /** *

    Fills the data values of a given column of the indicated edges with a value as a String, - * parsing it for the AttributeType of the column. If it is not possible to parse, + * parsing it for the Class of the column. If it is not possible to parse, * the value will be set to null.

    - * @param edges Edges to fill + * + * @param edges Edges to fill * @param column Column to fill - * @param value String representation of the value for the column for each edge + * @param value String representation of the value for the column for each edge */ - void fillEdgesColumnWithValue(Edge[] edges, AttributeColumn column, String value); + void fillEdgesColumnWithValue(Edge[] edges, Column column, String value); /** *

    Clears all rows data for a given column of a table (nodes table or edges table)

    - * @param table Table to clear column data + * + * @param table Table to clear column data * @param column Column to clear data */ - void clearColumnData(AttributeTable table, AttributeColumn column); + void clearColumnData(Table table, Column column); /** *

    Calculates the absolute frequency of appearance of each value of the given column and returns a Map containing each different value mapped to its frequency of appearance.

    - * @param table Table of the column + * + * @param table Table of the column * @param column Column to calculate values frequencies * @return Map containing each different value mapped to its frequency of appearance */ - Map calculateColumnValuesFrequencies(AttributeTable table, AttributeColumn column); + Map calculateColumnValuesFrequencies(Table table, Column column); /** *

    Creates a new BOOLEAN column from the given column and regular expression * filling it with boolean values that indicate if each of the old column values match the regular expression.

    *

    Title for the new column can't be repeated in the table, null or empty.

    - * @param table Table of the column to match - * @param column Column to match + * + * @param table Table of the column to match + * @param column Column to match * @param newColumnTitle Title for the new boolean column - * @param pattern Regular expression to match + * @param pattern Regular expression to match * @return New created column or null if title is not correct */ - AttributeColumn createBooleanMatchesColumn(AttributeTable table, AttributeColumn column, String newColumnTitle, Pattern pattern); + Column createBooleanMatchesColumn(Table table, Column column, String newColumnTitle, Pattern pattern); /** *

    Negates not null values of a given BOOLEAN or LIST_BOOLEANcolumn.

    - *

    Throws IllegalArgumentException if the column does not have BOOLEAN or LIST_BOOLEAN AttributeType.

    - * @param table Table of the column to negate + *

    Throws IllegalArgumentException if the column does not have BOOLEAN or LIST_BOOLEAN Class.

    + * + * @param table Table of the column to negate * @param column Boolean column to negate */ - void negateBooleanColumn(AttributeTable table, AttributeColumn column); + void negateBooleanColumn(Table table, Column column); /** *

    Creates a new LIST_STRING column from the given column and regular expression with values that are * the list of matching groups for the given regular expression for each row.

    *

    The title for the new column can't be repeated in the table, null or an empty string.

    . - * @param table Table of the column to match - * @param column Column to match + * + * @param table Table of the column to match + * @param column Column to match * @param newColumnTitle Title for the new boolean column - * @param pattern Regular expression to match + * @param pattern Regular expression to match * @return New created column or null if title is not correct */ - AttributeColumn createFoundGroupsListColumn(AttributeTable table, AttributeColumn column, String newColumnTitle, Pattern pattern); + Column createFoundGroupsListColumn(Table table, Column column, String newColumnTitle, Pattern pattern); /** *

    Clears all node attributes except computed attributes and id, checking first that the node is in the graph.

    *

    Columns to clear can be specified, but id and computed columns will not be cleared.

    - * @param node Node to clear data + * + * @param node Node to clear data * @param columnsToClear Columns of the node to clear. All columns will be cleared if it is null */ - void clearNodeData(Node node, AttributeColumn[] columnsToClear); + void clearNodeData(Node node, Column[] columnsToClear); /** *

    Clears all the nodes attributes except computed attributes and id.

    *

    Columns to clear can be specified, but id and computed columns will not be cleared.

    - * @param nodes Array of nodes to clear data + * + * @param nodes Array of nodes to clear data * @param columnsToClear Columns of the nodes to clear. All columns will be cleared if it is null */ - void clearNodesData(Node[] nodes, AttributeColumn[] columnsToClear); + void clearNodesData(Node[] nodes, Column[] columnsToClear); /** *

    Clears all edge attributes except computed attributes and id.

    *

    Columns to clear can be specified, but id and computed columns will not be cleared.

    - * @param edge Edge to clear data + * + * @param edge Edge to clear data * @param columnsToClear Columns of the edge to clear. All columns will be cleared if it is null */ - void clearEdgeData(Edge edge, AttributeColumn[] columnsToClear); + void clearEdgeData(Edge edge, Column[] columnsToClear); /** *

    Clears all the edges attributes except computed attributes and id, checking first that the edges are in the graph.

    *

    Columns to clear can be specified, but id and computed columns will not be cleared.

    - * @param edges Array of edges to clear data + * + * @param edges Array of edges to clear data * @param columnsToClear Columns of the edges to clear. All columns will be cleared if it is null */ - void clearEdgesData(Edge[] edges, AttributeColumn[] columnsToClear); + void clearEdgesData(Edge[] edges, Column[] columnsToClear); /** *

    Clears row attributes except computed attributes and id if node/edge row.

    *

    Columns to clear can be specified, but id of node/edge and computed columns will not be cleared.

    - * @param row Array of rows to clear data + * + * @param row Array of rows to clear data * @param columnsToClear Columns of the row to clear. All columns will be cleared if it is null */ - void clearRowData(Attributes row, AttributeColumn[] columnsToClear); + void clearRowData(Element row, Column[] columnsToClear); /** *

    Copies attributes data of the given node to the other rows except computed attributes and id.

    *

    Columns to copy can be specified, but id node and computed columns will not be copied.

    - * @param node Node to copy data from - * @param otherNodes Nodes to copy data to + * + * @param node Node to copy data from + * @param otherNodes Nodes to copy data to * @param columnsToCopy Columns of the node to copy. All columns will be copied if it is null */ - void copyNodeDataToOtherNodes(Node node, Node[] otherNodes, AttributeColumn[] columnsToCopy); + void copyNodeDataToOtherNodes(Node node, Node[] otherNodes, Column[] columnsToCopy); /** *

    Copies attributes data of the given edge to the other rows except computed attributes and id.

    *

    Columns to copy can be specified, but id edge and computed columns will not be copied.

    - * @param edge Edge to copy data from - * @param otherEdges Edges to copy data to + * + * @param edge Edge to copy data from + * @param otherEdges Edges to copy data to * @param columnsToCopy Columns of the edge to copy. All columns will be copied if it is null */ - void copyEdgeDataToOtherEdges(Edge edge, Edge[] otherEdges, AttributeColumn[] columnsToCopy); + void copyEdgeDataToOtherEdges(Edge edge, Edge[] otherEdges, Column[] columnsToCopy); /** *

    Copies attributes data of the given row to the other rows except computed attributes and id if node/edge.

    *

    Columns to copy can be specified, but id of node/edge and computed columns will not be copied.

    - * @param row Row to copy data from - * @param otherRows Rows to copy data to + * + * @param row Row to copy data from + * @param otherRows Rows to copy data to * @param columnsToCopy Columns of the row to copy. All columns will be copied if it is null */ - void copyRowDataToOtherRows(Attributes row, Attributes[] otherRows, AttributeColumn[] columnsToCopy); + void copyRowDataToOtherRows(Element row, Element[] otherRows, Column[] columnsToCopy); /** *

    Returns all rows of a given table (node or edges table).

    *

    Used for iterating through all attribute rows of a table

    + * * @param table Table to get attribute rows * @return Array of attribute rows of the table */ - Attributes[] getTableAttributeRows(AttributeTable table); + Element[] getTableAttributeRows(Table table); /** *

    Counts the number of rows of a table (nodes or edges table) and returns the result.

    *

    Uses GraphElementsController getNodesCount and getEdgesCount to calculate the result.

    + * * @param table * @return the number of rows in table */ - int getTableRowsCount(AttributeTable table); + int getTableRowsCount(Table table); /** *

    Checks if the given table is nodes table.

    + * + * @param table Table to check * @return True if the table is nodes table, false otherwise */ - boolean isNodeTable(AttributeTable table); + boolean isNodeTable(Table table); /** *

    Checks if the given table is edges table.

    + * + * @param table Table to check * @return True if the table is edges table, false otherwise */ - boolean isEdgeTable(AttributeTable table); + boolean isEdgeTable(Table table); + + boolean isTableColumn(Table table, Column column); + + boolean isNodeColumn(Column column); + + boolean isEdgeColumn(Column column); /** *

    Indicates if the Data Laboratory API behaviour allows to delete the given column of a table.

    *

    The behaviour is: Any column that does not have a AttributeOrigin of type PROPERTY can be deleted.

    + * * @param column Column to check if it can be deleted * @return True if it can be deleted, false otherwise */ - boolean canDeleteColumn(AttributeColumn column); + boolean canDeleteColumn(Column column); /** *

    Indicates if the Data Laboratory API behaviour allows to change a value of the given column of a table.

    *

    The behaviour is: Only values of columns with AttributeOrigin of type DATA or a node/edge label and weight column can be changed. (but weight can't be null. see canClearColumnData method).

    + * * @param column Column to check if values can be changed * @return True if the column values can be changed, false otherwise */ - boolean canChangeColumnData(AttributeColumn column); + boolean canChangeColumnData(Column column); /** *

    Indicates if the Data Laboratory API behaviour allows to set as null a value of the given column of a table.

    *

    The behaviour is: Only values of columns with AttributeOrigin of type DATA or a node/edge label column can be set to null. Edge weight can't be null

    + * * @param column Column to check if values can be changed * @return True if the column values can be changed, false otherwise */ - boolean canClearColumnData(AttributeColumn column); - + boolean canClearColumnData(Column column); + /** *

    Indicates if the Data Laboratory API behaviour allows to convert an existing column into its dynamic equivalent.

    *

    The behaviour is: Only values of columns with AttributeOrigin of type DATA and edge weight can be converted.

    + * * @param column Column to check if can be converted * @return True if the column can be converted to dynamic, false otherwise */ - boolean canConvertColumnToDynamic(AttributeColumn column); + boolean canConvertColumnToDynamic(Column column); /** *

    Calculates all statistics at once from a number/number list column using MathUtils class.

    - *

    Returns an array of length=8 of BigDecimal numbers with the results in the following order: + * Returns an array of length=8 of BigDecimal numbers with the results in the following order: *

      *
    1. average
    2. *
    3. first quartile (Q1)
    4. @@ -366,104 +404,72 @@ public interface AttributeColumnsController { *
    5. minimumValue
    6. *
    7. maximumValue
    8. *
    - *

    *

    The column can only be a number/number list column.

    *

    Otherwise, a IllegalArgumentException will be thrown.

    - * @param table Table of the column + * + * @param table Table of the column * @param column Column to get statistics * @return Array with statistics */ - BigDecimal[] getNumberOrNumberListColumnStatistics(AttributeTable table, AttributeColumn column); + BigDecimal[] getNumberOrNumberListColumnStatistics(Table table, Column column); /** *

    Prepares an array with all not null numbers of all the rows of a given column.

    *

    The column can only be a number/number list column.

    *

    Otherwise, a IllegalArgumentException will be thrown.

    - * @param table Table of the column to get numbers + * + * @param table Table of the column to get numbers * @param column Column to get numbers * @return Array with all numbers. */ - Number[] getColumnNumbers(AttributeTable table, AttributeColumn column); - + Number[] getColumnNumbers(Table table, Column column); + /** *

    Prepares an array only with all not null numbers the indicated rows of a given column.

    *

    The column can only be a number/number list column.

    *

    Otherwise, a IllegalArgumentException will be thrown.

    - * @param rows Rows to get numbers + * + * @param rows Rows to get numbers * @param column Column to get numbers * @return Array with all numbers. */ - Number[] getRowsColumnNumbers(Attributes[] rows, AttributeColumn column); + Number[] getRowsColumnNumbers(Element[] rows, Column column); /** *

    Prepares an array with all not null numbers of a row using only the given columns.

    *

    The columns can only be number/dynamic number/number list columns (in any combination).

    *

    All numbers intervals of a dynamic number column will be used.

    *

    Otherwise, a IllegalArgumentException will be thrown.

    - * @param row Row to get numbers + * + * @param row Row to get numbers * @param columns Columns of the row to use * @return Array with all numbers */ - Number[] getRowNumbers(Attributes row, AttributeColumn[] columns); - - /** - *

    Method for importing CSV file data to nodes table.

    - *

    Only special case is treating columns is id columns: first column found named 'id' (case insensitive) will be used as node id, others will be ignored.

    - *

    No special column must be provided.

    - *

    If a column name is not already in nodes table, it will be created with the corresponding columnType index.

    - *

    If a node id already exists, depending on assignNewNodeIds, a new id will be assigned to it or instead, the already existing node attributes will be updated with the CSV data

    - * @param file CSV file - * @param separator Separator of values of the CSV file - * @param charset Charset of the CSV file - * @param columnNames Names of the columns in the CSV file to use - * @param columnTypes Types of the columns in the CSV file to use when creating columns - * @param assignNewNodeIds Indicates if nodes should be assigned new ids when the ids are already in nodes table or not provided. - */ - void importCSVToNodesTable(File file, Character separator, Charset charset, String[] columnNames, AttributeType[] columnTypes, boolean assignNewNodeIds); - - /** - *

    Method for importing csv data to edges table.

    - *

    Column named 'Source' and 'Target' (case insensitive) should be provided. Any row that does not provide a source and target nodes ids will be ignored.

    - *

    If no 'Type' (case insensitive) column is provided, all edges will be directed.

    - *

    If an edge already exists and cannot be created, it will be ignored but the weight of the existing edge will be increased with each repetition.

    - * - *

    Special cases are id, source, target and type columns: - *

      - *
    • First column found named 'id' (case insensitive) will be used as node id, others will be ignored.
    • - *
    • First column named 'Source' (case insensitive) will be used as source node id. The next ones will be used as normal columns, and created if not already existing.
    • - *
    • First column named 'Target' (case insensitive) will be used as target node id. The next ones will be used as normal columns, and created if not already existing.
    • - *
    • First column named 'Type' (case insensitive) will be used as edge type, matching 'Directed' or 'Undirected' strings (case insensitive). The next ones will be used as normal columns, and created if not already existing.
    • - *
    - *

    - * @param file CSV file - * @param separator Separator of values of the CSV file - * @param charset Charset of the CSV file - * @param columnNames Names of the columns in the CSV file to use - * @param columnTypes Types of the columns in the CSV file to use when creating columns - * @param createNewNodes Indicates if missing nodes should be created when an edge declares a source or target id not already existing - */ - void importCSVToEdgesTable(File file, Character separator, Charset charset, String[] columnNames, AttributeType[] columnTypes, boolean createNewNodes); - + Number[] getRowNumbers(Element row, Column[] columns); + /** *

    Merges the given rows values to the given result row using one merge strategy for each column of the table.

    *

    The number of columns must be equal to the number of merge strategies provided

    *

    No parameters can be null except selectedRow (first row will be used in case selectedRow is null)

    *

    If any strategy is null, the value of the selectedRow will be used

    - * @param table Table of the rows - * @param mergeStrategies Strategies for each column of the table - * @param rows Rows to merge (at least 1) - * @param selectedRow Main selected row or null (first row will be used in case selectedRow is null) - * @param resultRow Already existing row to put the values on + * + * @param columns Columns to apply a merge strategy in each row + * @param mergeStrategies Strategies for each column in {@code columns} + * @param rows Rows to merge (at least 1) + * @param selectedRow Main selected row or null (first row will be used in case selectedRow is null) + * @param resultRow Already existing row to put the values on */ - void mergeRowsValues(AttributeTable table, AttributeRowsMergeStrategy[] mergeStrategies, Attributes[] rows, Attributes selectedRow, Attributes resultRow); - + void mergeRowsValues(Column[] columns, AttributeRowsMergeStrategy[] mergeStrategies, Element[] rows, + Element selectedRow, Element resultRow); + /** *

    Finds and returns nodes duplicates based on the values of a given column of nodes table

    *

    A node is a duplicate of other if they have the same value (String representation of the values is used) in the given column.

    *

    This is useful to be used to automatically merge duplicated nodes

    - * @param column Column to use values to detect duplicates + * + * @param column Column to use values to detect duplicates * @param caseSensitive Case insensitivity when comparing the column values * @return List of node duplicates groups (at least 2 nodes in each group) */ - List> detectNodeDuplicatesByColumn(AttributeColumn column, boolean caseSensitive); + List> detectNodeDuplicatesByColumn(Column column, boolean caseSensitive); } diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/AttributeColumnsMergeStrategiesController.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/AttributeColumnsMergeStrategiesController.java index cce2df076c..f261652117 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/AttributeColumnsMergeStrategiesController.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/AttributeColumnsMergeStrategiesController.java @@ -39,62 +39,55 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.api; import java.text.SimpleDateFormat; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; -import org.gephi.data.attributes.api.AttributeType; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Table; /** * This interface defines part of the Data Laboratory API basic actions. * It contains methods for applying different basic attribute columns merge strategies. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public interface AttributeColumnsMergeStrategiesController { - /** - * Enumeration that defines the supported logic operations for a merge with booleanLogicOperationsMerge strategy. - */ - public enum BooleanOperations { - AND, - OR, - XOR, - NAND, - NOR - } - /** *

    Joins various columns of any type into a new column using the given separator string (or null).

    *

    If the specified column type is null, the new created column will have STRING AttributeType by default.

    - * @param table Table of the columns to merge + * + * @param table Table of the columns to merge * @param columnsToMerge Columns to merge - * @param newColumnType Type for the new column. If null, STRING will be used by default + * @param newColumnType Type for the new column. If null, STRING will be used by default * @param newColumnTitle Title for the new column - * @param separator Separator to put between each value + * @param separator Separator to put between each value * @return The new created column */ - AttributeColumn joinWithSeparatorMerge(AttributeTable table, AttributeColumn[] columnsToMerge, AttributeType newColumnType, String newColumnTitle, String separator); + Column joinWithSeparatorMerge(Table table, Column[] columnsToMerge, Class newColumnType, String newColumnTitle, + String separator); /** *

    Merge 1 or 2 columns creating a time interval for each row. Values of the columns will be expected as numbers

    *

    Only one of the 2 column could be null, and its corresponding start/end default will be used.

    *

    Columns can be of any type. If not numeric, their values will be parsed.

    *

    Default start and end values will be used when the columns don't have a value or it can't be parsed to a double.

    - *

    When start > end for any reason: + * When start > end for any reason: *

      *
    • If both columns were provided: A infinite time interval will be set
    • *
    • If only one column was provided: The value for the provided column will be kept and the other will be infinite
    • *
    - *

    - * @param table Table of the columns, can't be null or wrong - * @param startColumn Column to use as start value - * @param endColumn Column to use as end value + * + * @param table Table of the columns, can't be null or wrong + * @param startColumn Column to use as start value + * @param endColumn Column to use as end value * @param defaultStart Default start value - * @param defaultEnd Default end value + * @param defaultEnd Default end value * @return Time interval column */ - AttributeColumn mergeNumericColumnsToTimeInterval(AttributeTable table, AttributeColumn startColumn, AttributeColumn endColumn, double defaultStart, double defaultEnd); + Column mergeNumericColumnsToTimeInterval(Table table, Column startColumn, Column endColumn, double defaultStart, + double defaultEnd); /** *

    Merge 1 or 2 columns creating a time interval for each row. Values of the columns will be expected as dates in the given date format

    @@ -102,111 +95,133 @@ public enum BooleanOperations { *

    Columns can be of any type.

    *

    Default start and end values will be used when the columns don't have a value or it can't be parsed to a date. * If a default value can't be parsed to a date, infinity will be used as default instead.

    - *

    When start > end for any reason: + * When start > end for any reason: *

      *
    • If both columns were provided: A infinite time interval will be set
    • *
    • If only one column was provided: The value for the provided column will be kept and the other will be infinite
    • *
    - *

    - * @param table Table of the columns, can't be null or wrong - * @param startColumn Column to use as start value - * @param endColumn Column to use as end value - * @param dateFormat Format for the dates, can't be null + * + * @param table Table of the columns, can't be null or wrong + * @param startColumn Column to use as start value + * @param endColumn Column to use as end value + * @param dateFormat Format for the dates, can't be null * @param defaultStartDate Default date to use as start if it can be parsed - * @param defaultEndDate Default date to use as end if it can be parsed + * @param defaultEndDate Default date to use as end if it can be parsed * @return Time interval column */ - AttributeColumn mergeDateColumnsToTimeInterval(AttributeTable table, AttributeColumn startColumn, AttributeColumn endColumn, SimpleDateFormat dateFormat, String defaultStartDate, String defaultEndDate); + Column mergeDateColumnsToTimeInterval(Table table, Column startColumn, Column endColumn, + SimpleDateFormat dateFormat, String defaultStartDate, String defaultEndDate); /** *

    Strategy to apply only to all boolean columns. Merges various columns into a new boolean column * allowing to define each operation to apply between each pair of columns to merge.

    *

    The length of the operations array must be the length of the columns array-1, or IllegalArgumentException will be thrown.

    - * @param table Table of the columns to merge - * @param columnsToMerge Boolean columns to merge + * + * @param table Table of the columns to merge + * @param columnsToMerge Boolean columns to merge * @param booleanOperations Boolean operations to apply - * @param newColumnTitle Title for the new column + * @param newColumnTitle Title for the new column * @return The new created column */ - AttributeColumn booleanLogicOperationsMerge(AttributeTable table, AttributeColumn[] columnsToMerge, BooleanOperations[] booleanOperations, String newColumnTitle); + Column booleanLogicOperationsMerge(Table table, Column[] columnsToMerge, BooleanOperations[] booleanOperations, + String newColumnTitle); /** *

    Merges any combination of number or number list columns, calculating the average of all not null values * and puts the result of each row in a new column of BIGDECIMAL AttributeType.

    - * @param table Table of the columns to merge + * + * @param table Table of the columns to merge * @param columnsToMerge Number or number list columns * @param newColumnTitle Title for the new column * @return The new created column */ - AttributeColumn averageNumberMerge(AttributeTable table, AttributeColumn[] columnsToMerge, String newColumnTitle); + Column averageNumberMerge(Table table, Column[] columnsToMerge, String newColumnTitle); /** *

    Merges any combination of number or number list columns, calculating the first quartile (Q1) of all not null values * and puts the result of each row in a new column of BIGDECIMAL AttributeType.

    - * @param table Table of the columns to merge + * + * @param table Table of the columns to merge * @param columnsToMerge Number or number list columns * @param newColumnTitle Title for the new column * @return The new created column */ - AttributeColumn firstQuartileNumberMerge(AttributeTable table, AttributeColumn[] columnsToMerge, String newColumnTitle); + Column firstQuartileNumberMerge(Table table, Column[] columnsToMerge, String newColumnTitle); /** *

    Merges any combination of number or number list columns, calculating the median of all not null values * and puts the result of each row in a new column of BIGDECIMAL AttributeType.

    - * @param table Table of the columns to merge + * + * @param table Table of the columns to merge * @param columnsToMerge Number or number list columns * @param newColumnTitle Title for the new column * @return The new created column */ - AttributeColumn medianNumberMerge(AttributeTable table, AttributeColumn[] columnsToMerge, String newColumnTitle); + Column medianNumberMerge(Table table, Column[] columnsToMerge, String newColumnTitle); /** *

    Merges any combination of number or number list columns, calculating the third quartile (Q3) of all not null values * and puts the result of each row in a new column of BIGDECIMAL AttributeType.

    - * @param table Table of the columns to merge + * + * @param table Table of the columns to merge * @param columnsToMerge Number or number list columns * @param newColumnTitle Title for the new column * @return The new created column */ - AttributeColumn thirdQuartileNumberMerge(AttributeTable table, AttributeColumn[] columnsToMerge, String newColumnTitle); + Column thirdQuartileNumberMerge(Table table, Column[] columnsToMerge, String newColumnTitle); /** *

    Merges any combination of number or number list columns, calculating the interquartile range (IQR) of all not null values * and puts the result of each row in a new column of BIGDECIMAL AttributeType.

    - * @param table Table of the columns to merge + * + * @param table Table of the columns to merge * @param columnsToMerge Number or number list columns * @param newColumnTitle Title for the new column * @return The new created column */ - AttributeColumn interQuartileRangeNumberMerge(AttributeTable table, AttributeColumn[] columnsToMerge, String newColumnTitle); + Column interQuartileRangeNumberMerge(Table table, Column[] columnsToMerge, String newColumnTitle); /** *

    Merges any combination of number or number list columns, calculating the sum of all not null values * and puts the result of each row in a new column of BIGDECIMAL AttributeType.

    - * @param table Table of the columns to merge + * + * @param table Table of the columns to merge * @param columnsToMerge Number or number list columns * @param newColumnTitle Title for the new column * @return The new created column */ - AttributeColumn sumNumbersMerge(AttributeTable table, AttributeColumn[] columnsToMerge, String newColumnTitle); + Column sumNumbersMerge(Table table, Column[] columnsToMerge, String newColumnTitle); /** * Merges any combination of number or number list columns, calculating the minimum value of all not null values * and puts the result of each row in a new column of BIGDECIMAL AttributeType. - * @param table Table of the columns to merge + * + * @param table Table of the columns to merge * @param columnsToMerge Number or number list columns * @param newColumnTitle Title for the new column * @return The new created column */ - AttributeColumn minValueNumbersMerge(AttributeTable table, AttributeColumn[] columnsToMerge, String newColumnTitle); + Column minValueNumbersMerge(Table table, Column[] columnsToMerge, String newColumnTitle); /** *

    Merges any combination of number or number list columns, calculating the maximum value of all not null values * and puts the result of each row in a new column of BIGDECIMAL AttributeType.

    - * @param table Table of the columns to merge + * + * @param table Table of the columns to merge * @param columnsToMerge Number or number list columns * @param newColumnTitle Title for the new column * @return The new created column */ - AttributeColumn maxValueNumbersMerge(AttributeTable table, AttributeColumn[] columnsToMerge, String newColumnTitle); + Column maxValueNumbersMerge(Table table, Column[] columnsToMerge, String newColumnTitle); + + /** + * Enumeration that defines the supported logic operations for a merge with booleanLogicOperationsMerge strategy. + */ + enum BooleanOperations { + AND, + OR, + XOR, + NAND, + NOR + } } diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/DataLaboratoryHelper.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/DataLaboratoryHelper.java index e2be3d6e78..c079340bf9 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/DataLaboratoryHelper.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/DataLaboratoryHelper.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.api; import java.awt.Dialog; @@ -49,12 +50,12 @@ Development and Distribution License("CDDL") (collectively, the import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.SwingUtilities; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; import org.gephi.datalab.spi.DialogControls; import org.gephi.datalab.spi.Manipulator; import org.gephi.datalab.spi.ManipulatorUI; @@ -62,8 +63,6 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.datalab.spi.columns.AttributeColumnsManipulatorUI; import org.gephi.datalab.spi.columns.merge.AttributeColumnsMergeStrategy; import org.gephi.datalab.spi.columns.merge.AttributeColumnsMergeStrategyBuilder; -import org.gephi.datalab.spi.values.AttributeValueManipulator; -import org.gephi.datalab.spi.values.AttributeValueManipulatorBuilder; import org.gephi.datalab.spi.edges.EdgesManipulator; import org.gephi.datalab.spi.edges.EdgesManipulatorBuilder; import org.gephi.datalab.spi.general.GeneralActionsManipulator; @@ -72,6 +71,11 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.datalab.spi.nodes.NodesManipulatorBuilder; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategyBuilder; +import org.gephi.datalab.spi.values.AttributeValueManipulator; +import org.gephi.datalab.spi.values.AttributeValueManipulatorBuilder; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Table; import org.openide.DialogDescriptor; import org.openide.DialogDisplayer; import org.openide.util.Lookup; @@ -84,14 +88,19 @@ Development and Distribution License("CDDL") (collectively, the @ServiceProvider(service = DataLaboratoryHelper.class) public class DataLaboratoryHelper { + public static DataLaboratoryHelper getDefault() { + return Lookup.getDefault().lookup(DataLaboratoryHelper.class); + } + /** *

    Prepares an array with one new instance of every NodesManipulator * that has a builder registered and returns it.

    *

    It also returns the manipulators ordered first by type and then by position.

    + * * @return Array of all NodesManipulator implementations */ public NodesManipulator[] getNodesManipulators() { - ArrayList nodesManipulators = new ArrayList(); + ArrayList nodesManipulators = new ArrayList<>(); for (NodesManipulatorBuilder nm : Lookup.getDefault().lookupAll(NodesManipulatorBuilder.class)) { nodesManipulators.add(nm.getNodesManipulator()); } @@ -103,10 +112,11 @@ public NodesManipulator[] getNodesManipulators() { *

    Prepares an array with one new instance of every EdgesManipulator * that has a builder registered and returns it.

    *

    It also returns the manipulators ordered first by type and then by position.

    + * * @return Array of all EdgesManipulator implementations */ public EdgesManipulator[] getEdgesManipulators() { - ArrayList edgesManipulators = new ArrayList(); + ArrayList edgesManipulators = new ArrayList<>(); for (EdgesManipulatorBuilder em : Lookup.getDefault().lookupAll(EdgesManipulatorBuilder.class)) { edgesManipulators.add(em.getEdgesManipulator()); } @@ -117,10 +127,11 @@ public EdgesManipulator[] getEdgesManipulators() { /** *

    Prepares an array with one instance of every GeneralActionsManipulator that is registered.

    *

    It also returns the manipulators ordered first by type and then by position.

    + * * @return Array of all GeneralActionsManipulator implementations */ public GeneralActionsManipulator[] getGeneralActionsManipulators() { - ArrayList generalActionsManipulators = new ArrayList(); + ArrayList generalActionsManipulators = new ArrayList<>(); generalActionsManipulators.addAll(Lookup.getDefault().lookupAll(GeneralActionsManipulator.class)); sortManipulators(generalActionsManipulators); return generalActionsManipulators.toArray(new GeneralActionsManipulator[0]); @@ -129,10 +140,11 @@ public GeneralActionsManipulator[] getGeneralActionsManipulators() { /** *

    Prepares an array with one instance of every PluginGeneralActionsManipulator that is registered.

    *

    It also returns the manipulators ordered first by type and then by position.

    + * * @return Array of all PluginGeneralActionsManipulator implementations */ public PluginGeneralActionsManipulator[] getPluginGeneralActionsManipulators() { - ArrayList pluginGeneralActionsManipulators = new ArrayList(); + ArrayList pluginGeneralActionsManipulators = new ArrayList<>(); pluginGeneralActionsManipulators.addAll(Lookup.getDefault().lookupAll(PluginGeneralActionsManipulator.class)); sortManipulators(pluginGeneralActionsManipulators); return pluginGeneralActionsManipulators.toArray(new PluginGeneralActionsManipulator[0]); @@ -142,10 +154,11 @@ public PluginGeneralActionsManipulator[] getPluginGeneralActionsManipulators() { *

    Prepares an array that has one instance of every AttributeColumnsManipulator implementation * that has a builder registered and returns it.

    *

    It also returns the manipulators ordered first by type and then by position.

    + * * @return Array of all AttributeColumnsManipulator implementations */ public AttributeColumnsManipulator[] getAttributeColumnsManipulators() { - ArrayList attributeColumnsManipulators = new ArrayList(); + ArrayList attributeColumnsManipulators = new ArrayList<>(); attributeColumnsManipulators.addAll(Lookup.getDefault().lookupAll(AttributeColumnsManipulator.class)); sortAttributeColumnsManipulators(attributeColumnsManipulators); return attributeColumnsManipulators.toArray(new AttributeColumnsManipulator[0]); @@ -155,11 +168,13 @@ public AttributeColumnsManipulator[] getAttributeColumnsManipulators() { *

    Prepares an array with one new instance of every AttributeValueManipulator * that has a builder registered and returns it.

    *

    It also returns the manipulators ordered first by type and then by position.

    + * * @return Array of all AttributeValueManipulator implementations */ public AttributeValueManipulator[] getAttributeValueManipulators() { - ArrayList attributeValueManipulators = new ArrayList(); - for (AttributeValueManipulatorBuilder am : Lookup.getDefault().lookupAll(AttributeValueManipulatorBuilder.class)) { + ArrayList attributeValueManipulators = new ArrayList<>(); + for (AttributeValueManipulatorBuilder am : Lookup.getDefault() + .lookupAll(AttributeValueManipulatorBuilder.class)) { attributeValueManipulators.add(am.getAttributeValueManipulator()); } sortManipulators(attributeValueManipulators); @@ -169,11 +184,13 @@ public AttributeValueManipulator[] getAttributeValueManipulators() { /** *

    Prepares an array that has one new instance of every AttributeColumnsMergeStrategy implementation that is registered.

    *

    It also returns the manipulators ordered first by type and then by position.

    + * * @return Array of all AttributeColumnsMergeStrategy implementations */ public AttributeColumnsMergeStrategy[] getAttributeColumnsMergeStrategies() { - ArrayList strategies = new ArrayList(); - for (AttributeColumnsMergeStrategyBuilder cs : Lookup.getDefault().lookupAll(AttributeColumnsMergeStrategyBuilder.class)) { + ArrayList strategies = new ArrayList<>(); + for (AttributeColumnsMergeStrategyBuilder cs : Lookup.getDefault() + .lookupAll(AttributeColumnsMergeStrategyBuilder.class)) { strategies.add(cs.getAttributeColumnsMergeStrategy()); } sortManipulators(strategies); @@ -183,11 +200,13 @@ public AttributeColumnsMergeStrategy[] getAttributeColumnsMergeStrategies() { /** *

    Prepares an array that has one new instance of every AttributeRowsMergeStrategy implementation that is registered.

    *

    It also returns the manipulators ordered first by type and then by position.

    + * * @return Array of all AttributeRowsMergeStrategy implementations */ public AttributeRowsMergeStrategy[] getAttributeRowsMergeStrategies() { - ArrayList strategies = new ArrayList(); - for (AttributeRowsMergeStrategyBuilder cs : Lookup.getDefault().lookupAll(AttributeRowsMergeStrategyBuilder.class)) { + ArrayList strategies = new ArrayList<>(); + for (AttributeRowsMergeStrategyBuilder cs : Lookup.getDefault() + .lookupAll(AttributeRowsMergeStrategyBuilder.class)) { strategies.add(cs.getAttributeRowsMergeStrategy()); } sortManipulators(strategies); @@ -197,6 +216,7 @@ public AttributeRowsMergeStrategy[] getAttributeRowsMergeStrategies() { private void sortManipulators(ArrayList m) { Collections.sort(m, new Comparator() { + @Override public int compare(Manipulator o1, Manipulator o2) { //Order by type, position. if (o1.getType() == o2.getType()) { @@ -211,6 +231,7 @@ public int compare(Manipulator o1, Manipulator o2) { private void sortAttributeColumnsManipulators(ArrayList m) { Collections.sort(m, new Comparator() { + @Override public int compare(AttributeColumnsManipulator o1, AttributeColumnsManipulator o2) { //Order by type, position. if (o1.getType() == o2.getType()) { @@ -225,23 +246,29 @@ public int compare(AttributeColumnsManipulator o1, AttributeColumnsManipulator o /** * Prepares the dialog UI of a manipulator if it has one and executes the manipulator in a separate * Thread when the dialog is accepted or directly if there is no UI. + * * @param m Manipulator to execute */ public void executeManipulator(final Manipulator m) { if (m.canExecute()) { SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { final ManipulatorUI ui = m.getUI(); //Show a dialog for the manipulator UI if it provides one. If not, execute the manipulator directly: if (ui != null) { - final JButton okButton = new JButton(NbBundle.getMessage(DataLaboratoryHelper.class, "DataLaboratoryHelper.ui.okButton.text")); + final JButton okButton = new JButton( + NbBundle.getMessage(DataLaboratoryHelper.class, "DataLaboratoryHelper.ui.okButton.text")); DialogControls dialogControls = new DialogControlsImpl(okButton); ui.setup(m, dialogControls); JPanel settingsPanel = ui.getSettingsPanel(); - DialogDescriptor dd = new DialogDescriptor(settingsPanel, NbBundle.getMessage(DataLaboratoryHelper.class, "SettingsPanel.title", ui.getDisplayName()), ui.isModal(), new ActionListener() { + DialogDescriptor dd = new DialogDescriptor(settingsPanel, + NbBundle.getMessage(DataLaboratoryHelper.class, "SettingsPanel.title", ui.getDisplayName()), + ui.isModal(), new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { if (e.getSource().equals(okButton)) { ui.unSetup(); @@ -251,7 +278,7 @@ public void actionPerformed(ActionEvent e) { } } }); - dd.setOptions(new Object[]{okButton, DialogDescriptor.CANCEL_OPTION}); + dd.setOptions(new Object[] {okButton, DialogDescriptor.CANCEL_OPTION}); dd.setClosingOptions(null);//All options close Dialog dialog = DialogDisplayer.getDefault().createDialog(dd); dialog.addWindowListener(new WindowAdapter() { @@ -274,6 +301,7 @@ public void windowClosing(WindowEvent e) { * This method shows the UI of an AttributeRowsMergeStrategy if it is provided and the AttributeRowsMergeStrategy can be executed. * These UI only configures (calls unSetup) the AttributeRowsMergeStrategy if the dialog is accepted, * and it does not execute the AttributeRowsMergeStrategy. + * * @param m AttributeRowsMergeStrategy * @return True if the AttributeRowsMergeStrategy UI is provided */ @@ -281,19 +309,23 @@ public boolean showAttributeRowsMergeStrategyUIDialog(final AttributeRowsMergeSt final ManipulatorUI ui = m.getUI(); //Show a dialog for the manipulator UI if it provides one. If not, execute the manipulator directly: if (ui != null && m.canExecute()) { - final JButton okButton = new JButton(NbBundle.getMessage(DataLaboratoryHelper.class, "DataLaboratoryHelper.ui.okButton.text")); + final JButton okButton = + new JButton(NbBundle.getMessage(DataLaboratoryHelper.class, "DataLaboratoryHelper.ui.okButton.text")); DialogControls dialogControls = new DialogControlsImpl(okButton); ui.setup(m, dialogControls); JPanel settingsPanel = ui.getSettingsPanel(); - DialogDescriptor dd = new DialogDescriptor(settingsPanel, NbBundle.getMessage(DataLaboratoryHelper.class, "SettingsPanel.title", ui.getDisplayName()), ui.isModal(), new ActionListener() { + DialogDescriptor dd = new DialogDescriptor(settingsPanel, + NbBundle.getMessage(DataLaboratoryHelper.class, "SettingsPanel.title", ui.getDisplayName()), + ui.isModal(), new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { if (e.getSource().equals(okButton)) { ui.unSetup(); } } }); - dd.setOptions(new Object[]{okButton, DialogDescriptor.CANCEL_OPTION}); + dd.setOptions(new Object[] {okButton, DialogDescriptor.CANCEL_OPTION}); dd.setClosingOptions(null);//All options close Dialog dialog = DialogDisplayer.getDefault().createDialog(dd); dialog.setVisible(true); @@ -307,6 +339,13 @@ private void executeManipulatorInOtherThread(final Manipulator m) { @Override public void run() { + this.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { + + @Override + public void uncaughtException(Thread t, Throwable e) { + Logger.getLogger("").log(Level.SEVERE, null, e); + } + }); m.execute(); } }.start(); @@ -315,24 +354,32 @@ public void run() { /** * Prepares the dialog UI of a AttributeColumnsManipulator if it has one and executes the manipulator in a separate * Thread when the dialog is accepted or directly if there is no UI. - * @param m AttributeColumnsManipulator - * @param table Table of the column - * @param column Column to manipulate + * + * @param m AttributeColumnsManipulator + * @param graphModel Graph model of the table + * @param table Table of the column + * @param column Column to manipulate */ - public void executeAttributeColumnsManipulator(final AttributeColumnsManipulator m, final AttributeTable table, final AttributeColumn column) { + public void executeAttributeColumnsManipulator(final AttributeColumnsManipulator m, final GraphModel graphModel, + final Table table, final Column column) { if (m.canManipulateColumn(table, column)) { SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { final AttributeColumnsManipulatorUI ui = m.getUI(table, column); //Show a dialog for the manipulator UI if it provides one. If not, execute the manipulator directly: if (ui != null) { - final JButton okButton = new JButton(NbBundle.getMessage(DataLaboratoryHelper.class, "DataLaboratoryHelper.ui.okButton.text")); + final JButton okButton = new JButton( + NbBundle.getMessage(DataLaboratoryHelper.class, "DataLaboratoryHelper.ui.okButton.text")); DialogControls dialogControls = new DialogControlsImpl(okButton); - ui.setup(m, table, column, dialogControls); + ui.setup(m, graphModel, table, column, dialogControls); JPanel settingsPanel = ui.getSettingsPanel(); - DialogDescriptor dd = new DialogDescriptor(settingsPanel, NbBundle.getMessage(DataLaboratoryHelper.class, "SettingsPanel.title", ui.getDisplayName()), ui.isModal(), new ActionListener() { + DialogDescriptor dd = new DialogDescriptor(settingsPanel, + NbBundle.getMessage(DataLaboratoryHelper.class, "SettingsPanel.title", ui.getDisplayName()), + ui.isModal(), new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { if (e.getSource().equals(okButton)) { ui.unSetup(); @@ -342,7 +389,7 @@ public void actionPerformed(ActionEvent e) { } } }); - dd.setOptions(new Object[]{okButton, DialogDescriptor.CANCEL_OPTION}); + dd.setOptions(new Object[] {okButton, DialogDescriptor.CANCEL_OPTION}); dd.setClosingOptions(null);//All options close Dialog dialog = DialogDisplayer.getDefault().createDialog(dd); dialog.addWindowListener(new WindowAdapter() { @@ -361,7 +408,8 @@ public void windowClosing(WindowEvent e) { } } - private void executeAttributeColumnsManipulatorInOtherThread(final AttributeColumnsManipulator m, final AttributeTable table, final AttributeColumn column) { + private void executeAttributeColumnsManipulatorInOtherThread(final AttributeColumnsManipulator m, final Table table, + final Column column) { new Thread() { @Override @@ -435,7 +483,8 @@ public AttributeColumnsManipulator getAttributeColumnsManipulatorByName(String n * Returns the AttributeColumnsMergeStrategy with that class name or null if it does not exist */ public AttributeValueManipulator getAttributeValueManipulatorByName(String name) { - for (AttributeValueManipulatorBuilder am : Lookup.getDefault().lookupAll(AttributeValueManipulatorBuilder.class)) { + for (AttributeValueManipulatorBuilder am : Lookup.getDefault() + .lookupAll(AttributeValueManipulatorBuilder.class)) { if (am.getAttributeValueManipulator().getClass().getSimpleName().equals(name)) { return am.getAttributeValueManipulator(); } @@ -447,7 +496,8 @@ public AttributeValueManipulator getAttributeValueManipulatorByName(String name) * Returns the AttributeColumnsMergeStrategy with that class name or null if it does not exist */ public AttributeColumnsMergeStrategy getAttributeColumnsMergeStrategyByName(String name) { - for (AttributeColumnsMergeStrategyBuilder cs : Lookup.getDefault().lookupAll(AttributeColumnsMergeStrategyBuilder.class)) { + for (AttributeColumnsMergeStrategyBuilder cs : Lookup.getDefault() + .lookupAll(AttributeColumnsMergeStrategyBuilder.class)) { if (cs.getAttributeColumnsMergeStrategy().getClass().getSimpleName().equals(name)) { return cs.getAttributeColumnsMergeStrategy(); } @@ -459,7 +509,8 @@ public AttributeColumnsMergeStrategy getAttributeColumnsMergeStrategyByName(Stri * Returns the AttributeRowsMergeStrategy with that class name or null if it does not exist */ public AttributeRowsMergeStrategy getAttributeRowsMergeStrategyByName(String name) { - for (AttributeRowsMergeStrategyBuilder cs : Lookup.getDefault().lookupAll(AttributeRowsMergeStrategyBuilder.class)) { + for (AttributeRowsMergeStrategyBuilder cs : Lookup.getDefault() + .lookupAll(AttributeRowsMergeStrategyBuilder.class)) { if (cs.getAttributeRowsMergeStrategy().getClass().getSimpleName().equals(name)) { return cs.getAttributeRowsMergeStrategy(); } @@ -475,16 +526,14 @@ public DialogControlsImpl(JComponent okButton) { this.okButton = okButton; } - public void setOkButtonEnabled(boolean enabled) { - okButton.setEnabled(enabled); - } - + @Override public boolean isOkButtonEnabled() { return okButton.isEnabled(); } - } - public static DataLaboratoryHelper getDefault() { - return Lookup.getDefault().lookup(DataLaboratoryHelper.class); + @Override + public void setOkButtonEnabled(boolean enabled) { + okButton.setEnabled(enabled); + } } } diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/GraphElementsController.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/GraphElementsController.java index 5be2a3732d..52e2e3196a 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/GraphElementsController.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/GraphElementsController.java @@ -39,41 +39,68 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.api; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; +import org.gephi.graph.api.Column; import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Graph; import org.gephi.graph.api.Node; /** *

    This interface defines part of the Data Laboratory API basic actions.

    *

    It contains methods for manipulating the nodes and edges of the graph.

    *

    All the provided methods take care to check first that the nodes and edges to manipulate are in the graph.

    - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public interface GraphElementsController { /** - * Creates a node with default id and the given label. + * Creates a node with default id and the given label in the current graph. + * * @param label Label for the node * @return The new created node */ Node createNode(String label); /** - *

    Creates a node with the given id and label.

    + * Creates a node with default id and the given label. + * + * @param label Label for the node + * @param graph Graph to insert the node into + * @return The new created node + */ + Node createNode(String label, Graph graph); + + /** + *

    Creates a node with the given id and label in the current graph.

    *

    If a node with that id already exists, no node will be created

    + * * @param label Label for the node - * @param id Id for the node + * @param id Id for the node * @return The new created node or null if a node with the given id already exists */ Node createNode(String label, String id); + /** + *

    Creates a node with the given id and label.

    + *

    If a node with that id already exists, no node will be created

    + * + * @param label Label for the node + * @param id Id for the node + * @param graph Graph to insert the node into + * @return The new created node or null if a node with the given id already exists + */ + Node createNode(String label, String id, Graph graph); + /** *

    Duplicates a node if it is in the graph, and returns the new node.

    *

    If the node has children, they are also copied as children of the new node.

    *

    Sets the same properties and attributes for the node as the original node: id, label and AttributeColumns with DATA AttributeOrigin. * Does not copy AttributeColumns with COMPUTED AttributeOrigin.

    + * * @param node Node to copy * @return New node */ @@ -81,33 +108,112 @@ public interface GraphElementsController { /** * Tries to duplicate an array of nodes with the same behaviour as duplicateNode method. + * * @param nodes Array of nodes to duplicate */ void duplicateNodes(Node[] nodes); /** - *

    Creates and edge between source and target node (if it does not already exist), directed or undirected.

    - * @param source Source node - * @param target Target node + *

    Creates and edge between source and target node (if it does not already exist), directed or undirected, in the current graph.

    + * + * @param source Source node + * @param target Target node * @param directed Indicates if the edge has to be directed * @return New edge if the edge was created succesfully, null otherwise */ Edge createEdge(Node source, Node target, boolean directed); + /** + *

    Creates and edge between source and target node (if it does not already exist), directed or undirected, in the current graph.

    + * + * @param source Source node + * @param target Target node + * @param directed Indicates if the edge has to be directed + * @param typeLabel Edge type label or null + * @return New edge if the edge was created succesfully, null otherwise + */ + Edge createEdge(Node source, Node target, boolean directed, Object typeLabel); + + /** + *

    Creates and edge between source and target node (if it does not already exist), directed or undirected.

    + * + * @param source Source node + * @param target Target node + * @param directed Indicates if the edge has to be directed + * @param graph Graph to insert the node into + * @return New edge if the edge was created succesfully, null otherwise + */ + Edge createEdge(Node source, Node target, boolean directed, Graph graph); + + /** + *

    Creates and edge between source and target node (if it does not already exist), directed or undirected.

    + * + * @param source Source node + * @param target Target node + * @param directed Indicates if the edge has to be directed + * @param typeLabel Edge type label or null + * @param graph Graph to insert the node into + * @return New edge if the edge was created succesfully, null otherwise + */ + Edge createEdge(Node source, Node target, boolean directed, Object typeLabel, Graph graph); + /** *

    Creates and edge between source and target node (if it does not already exist), directed or undirected.

    *

    If a edge with the given id already exists, no edge will be created.

    - * @param source Source node - * @param target Target node + * + * @param id Id for the new edge + * @param source Source node + * @param target Target node * @param directed Indicates if the edge has to be directed * @return New edge if the edge was created succesfully, null otherwise */ Edge createEdge(String id, Node source, Node target, boolean directed); + /** + *

    Creates and edge between source and target node (if it does not already exist), directed or undirected.

    + *

    If a edge with the given id already exists, no edge will be created.

    + * + * @param id Id for the new edge + * @param source Source node + * @param target Target node + * @param directed Indicates if the edge has to be directed + * @param typeLabel Edge type label or null + * @return New edge if the edge was created succesfully, null otherwise + */ + Edge createEdge(String id, Node source, Node target, boolean directed, Object typeLabel); + + /** + *

    Creates and edge between source and target node (if it does not already exist), directed or undirected, in the current graph.

    + *

    If a edge with the given id already exists, no edge will be created.

    + * + * @param id Id for the new edge + * @param source Source node + * @param target Target node + * @param directed Indicates if the edge has to be directed + * @param graph Graph to insert the node into + * @return New edge if the edge was created succesfully, null otherwise + */ + Edge createEdge(String id, Node source, Node target, boolean directed, Graph graph); + + /** + *

    Creates and edge between source and target node (if it does not already exist), directed or undirected, in the current graph.

    + *

    If a edge with the given id already exists, no edge will be created.

    + * + * @param id Id for the new edge + * @param source Source node + * @param target Target node + * @param directed Indicates if the edge has to be directed + * @param typeLabel Edge type label or null + * @param graph Graph to insert the node into + * @return New edge if the edge was created succesfully, null otherwise + */ + Edge createEdge(String id, Node source, Node target, boolean directed, Object typeLabel, Graph graph); + /** *

    Tries to create edges between the source node and all other edges, directed or undirected.

    *

    An edge won't be created if it already exists or is a self-loop.

    - * @param source Source node + * + * @param source Source node * @param allNodes All edges * @param directed Indicates if the edges have to be directed */ @@ -115,24 +221,28 @@ public interface GraphElementsController { /** * Tries to delete a node checking first if it is on the graph. + * * @param node Node to delete */ void deleteNode(Node node); /** * Tries to delete an array of nodes checking first if they are on the graph. + * * @param nodes Array of nodes to delete */ void deleteNodes(Node[] nodes); /** * Tries to delete an edge checking first if it is on the graph. + * * @param edge Edge to delete */ void deleteEdge(Edge edge); /** * Tries to delete an array of edges checking first if they are on the graph. + * * @param edges Array of edges to delete */ void deleteEdges(Edge[] edges); @@ -140,7 +250,8 @@ public interface GraphElementsController { /** * Tries to delete an edge checking first if it is on the graph * and also deletes its source and target node if it is indicated. - * @param edge Edge to delete + * + * @param edge Edge to delete * @param deleteSource Indicates if the source node has to be deleted * @param deleteTarget Indicates if the target node has to be deleted */ @@ -149,133 +260,39 @@ public interface GraphElementsController { /** * Tries to delete an array of edges checking first if they are on the graph * and also deletes their source and target node if it is indicated. - * @param edges Array of edges to delete + * + * @param edges Array of edges to delete * @param deleteSource Indicates if the source nodes have to be deleted * @param deleteTarget Indicates if the target nodes have to be deleted */ void deleteEdgesWithNodes(Edge[] edges, boolean deleteSource, boolean deleteTarget); - /** - * Groups an array of nodes if it is possible. - * @param nodes Array of nodes to group - * @return True if the nodes were succesfully grouped, false otherwise - */ - boolean groupNodes(Node[] nodes); - - /** - * Checks if an array of nodes can form a group. - * @param nodes Array of nodes to check - * @return True if the nodes can form a group, false otherwise - */ - boolean canGroupNodes(Node[] nodes); - - /** - * Ungroups a node if it forms a group. - * @param node Node to ungroup - * @return True if the node was succesfully ungrouped, false otherwise - */ - boolean ungroupNode(Node node); - - /** - * Tries to ungroup every node un the array of nodes checking first they form a group. - * @param nodes Array of nodes to ungroup - */ - void ungroupNodes(Node[] nodes); - - /** - * Ungroups a node if it forms a group and also ungroups all its descendant. - * @param node Node to ungroup recursively - * @return True if the node was succesfully ungrouped, false otherwise - */ - boolean ungroupNodeRecursively(Node node); - - /** - * Tries to ungroup every node un the array of nodes checking first they form a group. - * @param nodes Array of nodes to ungroup - */ - void ungroupNodesRecursively(Node[] nodes); - - /** - * Checks if the node can be ungrouped (it forms a group of nodes). - * @param node Node to check - * @return True if the node can be ungrouped, false otherwise - */ - boolean canUngroupNode(Node node); - /** * Merges 2 or more nodes into a new one node that has all the edges of the merged nodes. * An AttributeRowsMergeStrategy must be provided for each column of the nodes. - * @param nodes Nodes to merge (at least 1) - * @param selectedNode Main selected node of the nodes to merge (or null to use first node) - * @param mergeStrategies Strategies to merge rows of each column of the nodes + * + * @param graph Graph that contains the nodes + * @param nodes Nodes to merge (at least 1) + * @param selectedNode Main selected node of the nodes to merge (or null to use first node) + * @param columns Columns to apply a merge strategy in each row + * @param mergeStrategies Strategies to merge rows of each column in {@code columns} * @param deleteMergedNodes Indicates if merged nodes should be deleted * @return New resulting node */ - Node mergeNodes(Node[] nodes, Node selectedNode, AttributeRowsMergeStrategy[] mergeStrategies, boolean deleteMergedNodes); - - /** - * Moves a node to a group of nodes if it is possible. - * To move a node to a group node, they must be different, have the same parent and the node to be the group has to be a group of nodes. - * @param node Node to move to group - * @param group Group of nodes to move the node - * @return True if the node was moved, false otherwise - */ - boolean moveNodeToGroup(Node node, Node group); - - /** - * Tries to move each node of the nodes array to the group node. - * @param nodes Array of nodes to move - * @param group Group node - */ - void moveNodesToGroup(Node[] nodes, Node group); - - /** - *

    Prepares and returns an array with the groups that the given nodes can be moved to.

    - *

    These groups are the nodes that have the same parent as the given nodes and are not in the given nodes array.

    - * @param nodes Nodes to get available groups to be moved - * @return Available groups array of null if the nodes don't all have the same parent - */ - Node[] getAvailableGroupsToMoveNodes(Node[] nodes); - - /** - * Indicates if a given node can be moved to a group node. - * To move a node to a group, they must have the same parent and the group node has to be a group of nodes. - * @param node Node to check if can be moved - * @param group Group node - * @return True if it can be moved, false otherwise - */ - boolean canMoveNodeToGroup(Node node, Node group); - - /** - * Removes a node from its group if the node is in a group (has a parent). - * Also breaks the group if the last node is removed. - * @param node Node to remove from its group - * @return True if the node was removed from a group, false otherwise - */ - boolean removeNodeFromGroup(Node node); - - /** - * Tries to remove every node in the array from its group checking first they are in a group. - * Also breaks groups when the last node is removed. - * @param nodes Arrays of nodes to remove from its group - */ - void removeNodesFromGroup(Node[] nodes); - - /** - * Checks if the node is in a group (has a parent). - * @return True if the node is in a group, false otherwise - */ - boolean isNodeInGroup(Node node); + Node mergeNodes(Graph graph, Node[] nodes, Node selectedNode, Column[] columns, + AttributeRowsMergeStrategy[] mergeStrategies, boolean deleteMergedNodes); /** * Sets the fixed state of a node to the indicated. - * @param node Node to set fixed state + * + * @param node Node to set fixed state * @param fixed Fixed state for the node */ void setNodeFixed(Node node, boolean fixed); /** * Sets the fixed state of an array of nodes to the indicated. + * * @param nodes Array of nodes to set fixed state * @param fixed Fixed state for the nodes */ @@ -283,6 +300,7 @@ public interface GraphElementsController { /** * Checks the fixed state of a node. + * * @param node Node to check * @return Fixed state of the node */ @@ -290,6 +308,7 @@ public interface GraphElementsController { /** * Prepares and returns an array with the neighbour nodes of the specified node. + * * @param node Node to get neighbours * @return Array of neighbour nodes */ @@ -297,6 +316,7 @@ public interface GraphElementsController { /** * Prepares and returns an array with the edges incident to the specified node. + * * @param node Node to get edges * @return Array of incident edges */ @@ -304,18 +324,21 @@ public interface GraphElementsController { /** * Returns the number of nodes in the graph. + * * @return Nodes count */ int getNodesCount(); /** * Returns the number of edges in the graph. + * * @return Edges count */ int getEdgesCount(); /** * Checks if a node is contained in the main view graph. + * * @param node Node to check * @return True if the node is in the graph, false otherwise */ @@ -323,6 +346,7 @@ public interface GraphElementsController { /** * Checks if an array of nodes are contained in the main view graph. + * * @param nodes Array of nodes to check * @return True if all the nodes are in the graph, false otherwise */ @@ -330,6 +354,7 @@ public interface GraphElementsController { /** * Checks if an edge is contained in the main view graph. + * * @param edge Edge to check * @return True if the edge is in the graph, false otherwise */ @@ -337,6 +362,7 @@ public interface GraphElementsController { /** * Checks if an array of edges are contained in the main view graph. + * * @param edges Edges to check * @return True if all the edges are in the graph, false otherwise */ diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/SearchReplaceController.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/SearchReplaceController.java index 5ca2e66cd0..eb3397ff5b 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/SearchReplaceController.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/SearchReplaceController.java @@ -39,23 +39,25 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.api; -import org.gephi.datalab.api.datatables.DataTablesController; import java.util.HashSet; import java.util.Set; import java.util.regex.Pattern; -import org.gephi.data.attributes.api.AttributeColumn; +import org.gephi.datalab.api.datatables.DataTablesController; +import org.gephi.graph.api.Column; import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.HierarchicalGraph; import org.gephi.graph.api.Node; import org.openide.util.Lookup; /** *

    Independent controller for search/replace feature.

    *

    Operates with SearchOptions and SearchResult objects.

    - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public interface SearchReplaceController { @@ -63,6 +65,7 @@ public interface SearchReplaceController { *

    Finds next (or first) ocurrence for the given search options.

    *

    Returns a SearchResult instance with the details or null if the search was not successful.

    *

    Modifies the given search options in order to match the next result the next time findNext is called

    + * * @param searchOptions Options of the search * @return SearchResult with details of the match or null */ @@ -72,14 +75,16 @@ public interface SearchReplaceController { *

    Finds next ocurrence for the given search options contained in a SearchResult.

    *

    Returns a SearchResult instance with the details or null if the search was not successful.

    *

    Modifies the given search options in order to match the next result the next time findNext is called

    + * * @param result Last result of the search - * @return SearchResult with details of the match or null + * @return SearchResult with details of the match or null */ SearchResult findNext(SearchResult result); /** *

    Indicates if a SearchResult can be replaced or not.

    *

    Computed columns and id columns cannot be replaced.

    + * * @param result SearchResult to check before replacing * @return True if it can be replaced, false otherwise */ @@ -90,7 +95,8 @@ public interface SearchReplaceController { *

    Also tries to find next search result and returns it.

    *

    If the data has changed and the replacement can't be done it will just return next SearchResult calling findNext.

    *

    If useRegexReplaceMode is enabled, IndexOutOfBoundsException can be thrown when the replacement is not correct for the regular expression.

    - * @param result SearchResult to replace + * + * @param result SearchResult to replace * @param replacement Replacement String * @return Next SearchResult or null if not successful */ @@ -99,8 +105,9 @@ public interface SearchReplaceController { /** *

    Replaces all SearchResults that can be replaced with the given search options from the beginning to the end of the data.

    *

    If useRegexReplaceMode is enabled, IndexOutOfBoundsException can be thrown when the replacement is not correct for the regular expression.

    + * * @param searchOptions Search options for the searches - * @param replacement Replacement String + * @param replacement Replacement String * @return Count of made replacements */ int replaceAll(SearchOptions searchOptions, String replacement); @@ -110,58 +117,21 @@ public interface SearchReplaceController { */ class SearchOptions { - private boolean searchNodes; + private final boolean searchNodes; private Node[] nodesToSearch; private Edge[] edgesToSearch; private Integer startingRow = null, startingColumn = null; - private HashSet columnsToSearch = new HashSet(); + private final HashSet columnsToSearch = new HashSet<>(); private boolean loopToBeginning = true; private Pattern regexPattern; private boolean useRegexReplaceMode = false; private int regionStart = 0; private boolean onlyMatchWholeAttributeValue; - public void resetStatus() { - regionStart = 0; - startingRow = null; - startingRow = null; - } - - /** - * Sets nodesToSearch as all nodes in the graph if they are null or empty array. - * Also only search on visible view if data table is showing visible only. - */ - private void checkNodesToSearch() { - if (nodesToSearch == null || nodesToSearch.length == 0) { - HierarchicalGraph hg; - if (Lookup.getDefault().lookup(DataTablesController.class).isShowOnlyVisible()) { - hg = Lookup.getDefault().lookup(GraphController.class).getModel().getHierarchicalGraphVisible(); - } else { - hg = Lookup.getDefault().lookup(GraphController.class).getModel().getHierarchicalGraph(); - } - nodesToSearch = hg.getNodesTree().toArray(); - } - } - - /** - * Sets edgesToSearch as all edges in the graph if they are null or empty array. - * Also only search on visible view if data table is showing visible only. - */ - private void checkEdgesToSearch() { - if (edgesToSearch == null || edgesToSearch.length == 0) { - HierarchicalGraph hg; - if (Lookup.getDefault().lookup(DataTablesController.class).isShowOnlyVisible()) { - hg = Lookup.getDefault().lookup(GraphController.class).getModel().getHierarchicalGraphVisible(); - } else { - hg = Lookup.getDefault().lookup(GraphController.class).getModel().getHierarchicalGraph(); - } - edgesToSearch = hg.getEdges().toArray(); - } - } - /** * Setup options to search on nodes with the given pattern. * If nodesToSearch is null, all nodes of the graph will be used. + * * @param nodesToSearch * @param regexPattern */ @@ -175,6 +145,7 @@ public SearchOptions(Node[] nodesToSearch, Pattern regexPattern) { /** * Setup options to search on edges with the given pattern. * If edgesToSearch is null, all edges of the graph will be used. + * * @param edgesToSearch * @param regexPattern */ @@ -188,9 +159,10 @@ public SearchOptions(Edge[] edgesToSearch, Pattern regexPattern) { /** * Setup options to search on nodes with the given pattern. * If nodesToSearch is null, all nodes of the graph will be used. + * * @param nodesToSearch * @param regexPattern - * @param onlyMatchWholeAttributeValue + * @param onlyMatchWholeAttributeValue */ public SearchOptions(Node[] nodesToSearch, Pattern regexPattern, boolean onlyMatchWholeAttributeValue) { this.nodesToSearch = nodesToSearch; @@ -202,6 +174,7 @@ public SearchOptions(Node[] nodesToSearch, Pattern regexPattern, boolean onlyMat /** * Setup options to search on edges with the given pattern. * If edgesToSearch is null, all edges of the graph will be used. + * * @param edgesToSearch * @param regexPattern * @param onlyMatchWholeAttributeValue @@ -213,6 +186,44 @@ public SearchOptions(Edge[] edgesToSearch, Pattern regexPattern, boolean onlyMat searchNodes = false; } + public void resetStatus() { + regionStart = 0; + startingRow = null; + startingColumn = null; + } + + /** + * Sets nodesToSearch as all nodes in the graph if they are null or empty array. + * Also only search on visible view if data table is showing visible only. + */ + private void checkNodesToSearch() { + if (nodesToSearch == null || nodesToSearch.length == 0) { + Graph graph; + if (Lookup.getDefault().lookup(DataTablesController.class).isShowOnlyVisible()) { + graph = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getGraphVisible(); + } else { + graph = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getGraph(); + } + nodesToSearch = graph.getNodes().toArray(); + } + } + + /** + * Sets edgesToSearch as all edges in the graph if they are null or empty array. + * Also only search on visible view if data table is showing visible only. + */ + private void checkEdgesToSearch() { + if (edgesToSearch == null || edgesToSearch.length == 0) { + Graph hg; + if (Lookup.getDefault().lookup(DataTablesController.class).isShowOnlyVisible()) { + hg = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getGraphVisible(); + } else { + hg = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getGraph(); + } + edgesToSearch = hg.getEdges().toArray(); + } + } + /************Getters and setters***********/ public Edge[] getEdgesToSearch() { return edgesToSearch; @@ -254,9 +265,19 @@ public void setStartingRow(Integer startingRow) { this.startingRow = startingRow; } + /** + * Returns columns indexes to search + * + * @return Set with columns indexes to search + */ + public Set getColumnsToSearch() { + return columnsToSearch; + } + /** * Set column indexes that should be used to search with the current options. * If columnsToSearch is empty, all columns will be used to search. + * * @param columnsToSearch It is safe to specify invalid columns indexes, they will be ignored */ public void setColumnsToSearch(int[] columnsToSearch) { @@ -271,25 +292,18 @@ public void setColumnsToSearch(int[] columnsToSearch) { /** * Set column that should be used to search with the current options. * If columnsToSearch is empty, all columns will be used to search. + * * @param columnsToSearch It is safe to specify invalid columns, they will be ignored */ - public void setColumnsToSearch(AttributeColumn[] columnsToSearch) { + public void setColumnsToSearch(Column[] columnsToSearch) { this.columnsToSearch.clear(); if (columnsToSearch != null) { - for (AttributeColumn c : columnsToSearch) { + for (Column c : columnsToSearch) { this.columnsToSearch.add(c.getIndex()); } } } - /** - * Returns columns indexes to search - * @return Set with columns indexes to search - */ - public Set getColumnsToSearch() { - return columnsToSearch; - } - public boolean isSearchNodes() { return searchNodes; } @@ -334,7 +348,8 @@ class SearchResult { private int foundRowIndex, foundColumnIndex; private int start, end; - public SearchResult(SearchOptions searchOptions, Node foundNode, Edge foundEdge, int foundRowIndex, int foundColumnIndex, int start, int end) { + public SearchResult(SearchOptions searchOptions, Node foundNode, Edge foundEdge, int foundRowIndex, + int foundColumnIndex, int start, int end) { this.searchOptions = searchOptions; this.foundNode = foundNode; this.foundEdge = foundEdge; diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/datatables/AttributeTableCSVExporter.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/datatables/AttributeTableCSVExporter.java deleted file mode 100644 index c66e51e656..0000000000 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/datatables/AttributeTableCSVExporter.java +++ /dev/null @@ -1,135 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Eduardo Ramos - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.datalab.api.datatables; - -import com.csvreader.CsvWriter; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.nio.charset.Charset; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; -import org.gephi.graph.api.Attributable; -import org.gephi.graph.api.Edge; - -public class AttributeTableCSVExporter { - - private static final Character DEFAULT_SEPARATOR = ','; - public static final int FAKE_COLUMN_EDGE_SOURCE = -1; - public static final int FAKE_COLUMN_EDGE_TARGET = -2; - public static final int FAKE_COLUMN_EDGE_TYPE = -3; - - /** - *

    Export a AttributeTable to the specified file.

    - * - * @param table Table to export - * @param file File to write - * @param separator Separator to use for separating values of a row in the CSV file. If null ',' will be used. - * @param charset Charset encoding for the file - * @param columnsToExport Indicates the indexes of the columns to export. All columns will be exported if null - * @throws IOException When an error happens while writing the file - */ - public static void writeCSVFile(AttributeTable table, File file, Character separator, Charset charset, Integer[] columnsToExport, Attributable[] rows) throws IOException { - FileOutputStream out = new FileOutputStream(file); - if (separator == null) { - separator = DEFAULT_SEPARATOR; - } - - AttributeColumn columns[] = table.getColumns(); - - if (columnsToExport == null) { - columnsToExport = new Integer[columns.length]; - for (int i = 0; i < columnsToExport.length; i++) { - columnsToExport[i] = columns[i].getIndex(); - } - } - - CsvWriter writer = new CsvWriter(out, separator, charset); - - - - //Write column headers: - for (int column = 0; column < columnsToExport.length; column++) { - int columnIndex = columnsToExport[column]; - - if (columnIndex == FAKE_COLUMN_EDGE_SOURCE) { - writer.write("Source"); - } else if (columnIndex == FAKE_COLUMN_EDGE_TARGET) { - writer.write("Target"); - } else if (columnIndex == FAKE_COLUMN_EDGE_TYPE) { - writer.write("Type"); - } else { - writer.write(table.getColumn(columnIndex).getTitle(), true); - } - - } - writer.endRecord(); - - //Write rows: - Object value; - String text; - for (int row = 0; row < rows.length; row++) { - for (int column = 0; column < columnsToExport.length; column++) { - int columnIndex = columnsToExport[column]; - - if (columnIndex == FAKE_COLUMN_EDGE_SOURCE) { - value = ((Edge)rows[row]).getSource().getNodeData().getId(); - } else if (columnIndex == FAKE_COLUMN_EDGE_TARGET) { - value = ((Edge)rows[row]).getTarget().getNodeData().getId(); - } else if (columnIndex == FAKE_COLUMN_EDGE_TYPE) { - value = ((Edge)rows[row]).isDirected() ? "Directed" : "Undirected"; - } else { - value = rows[row].getAttributes().getValue(columnIndex); - } - - if (value != null) { - text = value.toString(); - } else { - text = ""; - } - writer.write(text, true); - } - writer.endRecord(); - } - writer.close(); - } -} diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/datatables/DataTablesCommonInterface.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/datatables/DataTablesCommonInterface.java index 8534d232a3..c5adcd6620 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/datatables/DataTablesCommonInterface.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/datatables/DataTablesCommonInterface.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.api.datatables; import org.gephi.graph.api.Edge; @@ -46,6 +47,7 @@ Development and Distribution License("CDDL") (collectively, the /** * Common interface for DataTablesEventListener and DataTablesController + * * @author Eduardo */ interface DataTablesCommonInterface { @@ -66,37 +68,57 @@ interface DataTablesCommonInterface { void refreshCurrentTable(); /** - * Requests the tables implementation to adapt the nodes table row selection to the specified nodes. - * @param nodes Nodes to select + * Gets auto-refresh suspended state. True by default. + * + * @return Current auto-refresh state */ - void setNodeTableSelection(Node[] nodes); + boolean isAutoRefreshEnabled(); /** - * Requests the tables implementation to adapt the edges table row selection to the specified edges. - * @param edges Edges to select + * Sets auto-refresh suspended state. True by default. + * + * @param enabled */ - void setEdgeTableSelection(Edge[] edges); + void setAutoRefreshEnabled(boolean enabled); /** * Request the tables implementation to provide the selected nodes in nodes table. + * * @return Array of selected nodes */ Node[] getNodeTableSelection(); + /** + * Requests the tables implementation to adapt the nodes table row selection to the specified nodes. + * + * @param nodes Nodes to select + */ + void setNodeTableSelection(Node[] nodes); + /** * Request the tables implementation to provide the selected edges in edges table. + * * @return Array of selected edges */ Edge[] getEdgeTableSelection(); + /** + * Requests the tables implementation to adapt the edges table row selection to the specified edges. + * + * @param edges Edges to select + */ + void setEdgeTableSelection(Edge[] edges); + /** * Checks if the data tables implementation is showing nodes table + * * @return True if nodes table is being shown, false otherwise */ boolean isNodeTableMode(); /** * Checks if the data tables implementation is showing edges table + * * @return True if edges table is being shown, false otherwise */ boolean isEdgeTableMode(); @@ -104,60 +126,67 @@ interface DataTablesCommonInterface { /** * Checks if the data tables implementation is showing only visible elements (nodes or edges) * in the graph at the moment. + * * @return True if only visible elements are being shown, false otherwise */ boolean isShowOnlyVisible(); /** * Requests the tables implementation to show only visible elements or not. + * * @param showOnlyVisible Indicates if only visible elements have to be shown in table */ void setShowOnlyVisible(boolean showOnlyVisible); /** * Checks if the data tables implementation is showing number lists and dynamic numbers as sparklines at the moment. + * * @return True if sparklines are on, false otherwise */ boolean isUseSparklines(); /** * Requests the tables implementation to show number lists and dynamic numbers as sparklines. + * * @param useSparklines Indicates if sparklines should be used */ void setUseSparklines(boolean useSparklines); /** * Checks if the data tables implementation is showing time intervals as graphics at the moment. + * * @return True if sparklines are on, false otherwise */ boolean isTimeIntervalGraphics(); /** * Requests the tables implementation to show time intervals as graphics. + * * @param timeIntervalGraphics Indicates if time interval graphics should be used */ void setTimeIntervalGraphics(boolean timeIntervalGraphics); /** * Checks if the data tables implementation is showing edges nodes (source and target) labels at the moment. + * * @return True if edges nodes lables are shown, false otherwise */ boolean isShowEdgesNodesLabels(); /** * Requests the tables implementation to show edges nodes (source and target). + * * @param showEdgesNodesLabels Indicates if edges nodes labels should be shown */ void setShowEdgesNodesLabels(boolean showEdgesNodesLabels); - public enum ExportMode { - - CSV - } - /** * Requests to exports current table being shown as a file. - * @param exportMode ExportMode - CSV only for now */ - void exportCurrentTable(ExportMode exportMode); + void exportCurrentTable(); + + /** + * Clears the current selected elements, if any. + */ + void clearSelection(); } diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/datatables/DataTablesController.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/datatables/DataTablesController.java index 4b6d8d1470..b84b13628b 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/datatables/DataTablesController.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/datatables/DataTablesController.java @@ -39,46 +39,53 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.api.datatables; -import org.gephi.data.attributes.api.AttributeTable; +import org.gephi.graph.api.Table; /** *

    This interface defines part of the Data Laboratory API.

    *

    It provides methods to control the Data Table UI that shows a table for nodes and edges.

    *

    This is done by registering the data table ui as a listener of these events that can be requested with this controller. * Note that data table ui will not be registered to listen to the events of this controller until it is instanced opening Data Laboratory Group

    - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public interface DataTablesController extends DataTablesCommonInterface { /** * Request the tables implementation to show the given table (nodes or edges table) + * * @param table Table to show */ - void selectTable(AttributeTable table); - - /** - * Register a listener for these requests. - * @param listener Instance of DataTablesEventListener - */ - void setDataTablesEventListener(DataTablesEventListener listener); + void selectTable(Table table); /** * Returns the current registered DataTablesEventListener. * It can be null if it is still not activated or there is no active workspace. + * * @return Current listener or null */ DataTablesEventListener getDataTablesEventListener(); + /** + * Register a listener for these requests. + * + * @param listener Instance of DataTablesEventListener + */ + void setDataTablesEventListener(DataTablesEventListener listener); + /** * Indicates if Data Table UI is registered as a listener of the events created by this controller. + * * @return True if Data Table UI is prepared, false otherwise */ boolean isDataTablesReady(); /** * Looks for an available DataTablesEventListenerBuilder and sets its DataTablesEventListener. + * * @return True if listener found, false otherwise */ boolean prepareDataTables(); diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/datatables/DataTablesEventListener.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/datatables/DataTablesEventListener.java index 578b293517..8a128f391f 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/datatables/DataTablesEventListener.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/datatables/DataTablesEventListener.java @@ -39,14 +39,16 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.api.datatables; /** *

    This is the interface for a listener of DataTablesController requests.

    *

    Only data table UI should be an implementation of this listener

    + * + * @author Eduardo Ramos * @see DataTablesController - * @author Eduardo Ramos */ public interface DataTablesEventListener extends DataTablesCommonInterface { - + } diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/datatables/DataTablesEventListenerBuilder.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/datatables/DataTablesEventListenerBuilder.java index ca160ebcc4..5e246f2cf4 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/datatables/DataTablesEventListenerBuilder.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/api/datatables/DataTablesEventListenerBuilder.java @@ -39,16 +39,19 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.api.datatables; /** *

    Builder interface for providing a default DataTablesEventListener when it has not been set.

    + * * @author Eduardo */ public interface DataTablesEventListenerBuilder { /** * Get default implementation + * * @return listener */ DataTablesEventListener getDataTablesEventListener(); diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/impl/AttributeColumnsControllerImpl.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/impl/AttributeColumnsControllerImpl.java index 38eabb843c..2a6df5643d 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/impl/AttributeColumnsControllerImpl.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/impl/AttributeColumnsControllerImpl.java @@ -39,110 +39,130 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.impl; -import com.csvreader.CsvReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; +import java.lang.reflect.Array; import java.math.BigDecimal; -import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeController; -import org.gephi.data.attributes.api.AttributeOrigin; -import org.gephi.data.attributes.api.AttributeRow; -import org.gephi.data.attributes.api.AttributeTable; -import org.gephi.data.attributes.api.AttributeType; -import org.gephi.data.attributes.api.AttributeUtils; -import org.gephi.data.attributes.api.AttributeValue; -import org.gephi.data.attributes.type.BooleanList; -import org.gephi.data.attributes.type.DynamicType; -import org.gephi.data.attributes.type.Interval; -import org.gephi.data.attributes.type.NumberList; -import org.gephi.data.attributes.type.StringList; -import org.gephi.data.attributes.type.TypeConvertor; -import org.gephi.data.properties.PropertiesColumn; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.api.GraphElementsController; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; -import org.gephi.dynamic.api.DynamicModel; -import org.gephi.graph.api.Attributes; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Element; import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Interval; import org.gephi.graph.api.Node; +import org.gephi.graph.api.Origin; +import org.gephi.graph.api.Table; +import org.gephi.graph.api.TimeFormat; +import org.gephi.graph.api.TimeRepresentation; +import org.gephi.graph.api.types.IntervalMap; +import org.gephi.graph.api.types.TimestampMap; import org.gephi.utils.StatisticsUtils; -import org.openide.util.Exceptions; +import java.time.ZoneId; import org.openide.util.Lookup; import org.openide.util.lookup.ServiceProvider; /** * Implementation of the AttributeColumnsController interface declared in the Data Laboratory API. * - * @author Eduardo Ramos + * @author Eduardo Ramos * @see AttributeColumnsController */ @ServiceProvider(service = AttributeColumnsController.class) public class AttributeColumnsControllerImpl implements AttributeColumnsController { - public boolean setAttributeValue(Object value, Attributes row, AttributeColumn column) { - AttributeType targetType = column.getType(); - if (value != null && !value.getClass().equals(targetType.getType())) { + @Override + public boolean setAttributeValue(Object value, Element row, Column column) { + if (!canChangeColumnData(column)) { + return false; + } + + Class targetType = column.getTypeClass(); + if (value != null && !value.getClass().equals(targetType)) { try { - value = targetType.parse(value.toString());//Try to convert to target type + GraphModel graphModel = column.getTable().getGraph().getModel(); + + String stringValue = AttributeUtils.print(value, graphModel.getTimeFormat(), graphModel.getTimeZone()); + value = AttributeUtils + .parse(stringValue, targetType);//Try to convert to target type from string representation } catch (Exception ex) { - value = null;//Could not parse + return false;//Could not parse } } if (value == null && !canClearColumnData(column)) { - return false;//Do not set a null value when the column can't have a null value. + return false;//Do not set a null value when the column can't have a null value } else { - row.setValue(column.getIndex(), value); - return true; + try { + if (value == null) { + row.removeAttribute(column); + } else { + row.setAttribute(column, value); + } + + return true; + } catch (Exception e) { + Logger.getLogger("").log(Level.SEVERE, null, e); + return false; + } } } - public AttributeColumn addAttributeColumn(AttributeTable table, String title, AttributeType type) { + @Override + public Column addAttributeColumn(Table table, String title, Class type) { if (title == null || title.isEmpty()) { return null; } if (table.hasColumn(title)) { return null; } - if (type == AttributeType.TIME_INTERVAL && table.getColumn(DynamicModel.TIMEINTERVAL_COLUMN) == null) { - return table.addColumn(DynamicModel.TIMEINTERVAL_COLUMN, title, type, AttributeOrigin.PROPERTY, null); - } - return table.addColumn(title, title, type, AttributeOrigin.DATA, null); + return table.addColumn(title, type, Origin.DATA); } - public void deleteAttributeColumn(AttributeTable table, AttributeColumn column) { + @Override + public void deleteAttributeColumn(Table table, Column column) { if (canDeleteColumn(column)) { table.removeColumn(column); } } @Override - public AttributeColumn convertAttributeColumnToDynamic(AttributeTable table, AttributeColumn column, double low, double high, boolean lopen, boolean ropen) { - return convertColumnToDynamic(table, column, low, high, lopen, ropen, null); + public Column convertAttributeColumnToDynamic(Table table, Column column, double low, double high) { + return convertColumnToDynamic(table, column, low, high, null); } @Override - public AttributeColumn convertAttributeColumnToNewDynamicColumn(AttributeTable table, AttributeColumn column, double low, double high, boolean lopen, boolean ropen, String newColumnTitle) { - return convertColumnToDynamic(table, column, low, high, lopen, ropen, newColumnTitle); + public Column convertAttributeColumnToNewDynamicColumn(Table table, Column column, double low, double high, + String newColumnTitle) { + return convertColumnToDynamic(table, column, low, high, newColumnTitle); } - private AttributeColumn convertColumnToDynamic(AttributeTable table, AttributeColumn column, double low, double high, boolean lopen, boolean ropen, String newColumnTitle) { - AttributeType oldType = column.getType(); - AttributeType newType = TypeConvertor.getDynamicType(oldType); + private Column convertColumnToDynamic(Table table, Column column, double low, double high, String newColumnTitle) { + Class oldType = column.getTypeClass(); + + TimeRepresentation timeRepresentation = + Lookup.getDefault().lookup(GraphController.class).getGraphModel().getConfiguration() + .getTimeRepresentation(); + Class newType; + if (timeRepresentation == TimeRepresentation.TIMESTAMP) { + newType = AttributeUtils.getTimestampMapType(oldType); + } else { + newType = AttributeUtils.getIntervalMapType(oldType); + } if (newColumnTitle != null) { if (newColumnTitle.equals(column.getTitle())) { @@ -150,40 +170,42 @@ private AttributeColumn convertColumnToDynamic(AttributeTable table, AttributeCo } } - int oldColumnIndex = column.getIndex(); - - Attributes rows[] = getTableAttributeRows(table); + Element[] rows = getTableAttributeRows(table); Object[] oldValues = new Object[rows.length]; for (int i = 0; i < rows.length; i++) { - oldValues[i] = rows[i].getValue(oldColumnIndex); + oldValues[i] = rows[i].getAttribute(column); } - AttributeColumn newColumn; + Column newColumn; if (newColumnTitle == null) { - newColumn = table.replaceColumn(column, column.getId(), column.getTitle(), newType, column.getOrigin(), null); + table.removeColumn(column); + newColumn = table.addColumn(column.getTitle(), newType, column.getOrigin()); } else { - newColumn = table.addColumn(newColumnTitle, newColumnTitle, newType, column.getOrigin(), null); + newColumn = table.addColumn(newColumnTitle, newType, column.getOrigin()); } - int newColumnIndex = newColumn.getIndex(); - - Object value; - for (int i = 0; i < rows.length; i++) { - if (oldValues[i] != null) { - Interval interval = new Interval(low, high, lopen, ropen, oldValues[i]); - value = newType.createDynamicObject(Arrays.asList(new Interval[]{interval})); - } else { - value = null; + + if (timeRepresentation == TimeRepresentation.TIMESTAMP) { + for (int i = 0; i < rows.length; i++) { + if (oldValues[i] != null) { + rows[i].setAttribute(newColumn, oldValues[i], low); + } + } + } else { + Interval interval = new Interval(low, high); + for (int i = 0; i < rows.length; i++) { + if (oldValues[i] != null) { + rows[i].setAttribute(newColumn, oldValues[i], interval); + } } - - rows[i].setValue(newColumnIndex, value); } return newColumn; } - public AttributeColumn duplicateColumn(AttributeTable table, AttributeColumn column, String title, AttributeType type) { - AttributeColumn newColumn = addAttributeColumn(table, title, type); + @Override + public Column duplicateColumn(Table table, Column column, String title, Class type) { + Column newColumn = addAttributeColumn(table, title, type); if (newColumn == null) { return null; } @@ -191,91 +213,103 @@ public AttributeColumn duplicateColumn(AttributeTable table, AttributeColumn col return newColumn; } - public void copyColumnDataToOtherColumn(AttributeTable table, AttributeColumn sourceColumn, AttributeColumn targetColumn) { + @Override + public void copyColumnDataToOtherColumn(Table table, Column sourceColumn, Column targetColumn) { if (sourceColumn == targetColumn) { throw new IllegalArgumentException("Source and target columns can't be equal"); } - final int sourceColumnIndex = sourceColumn.getIndex(); - final int targetColumnIndex = targetColumn.getIndex(); - AttributeType targetType = targetColumn.getType(); - if (targetType != sourceColumn.getType()) { - Object value; - for (Attributes row : getTableAttributeRows(table)) { - value = row.getValue(sourceColumnIndex); + Class targetType = targetColumn.getTypeClass(); + Object value; + if (!targetType.equals(sourceColumn.getTypeClass())) { + for (Element row : getTableAttributeRows(table)) { + value = row.getAttribute(sourceColumn); setAttributeValue(value, row, targetColumn); } } else { - for (Attributes row : getTableAttributeRows(table)) { - row.setValue(targetColumnIndex, row.getValue(sourceColumnIndex)); + for (Element row : getTableAttributeRows(table)) { + value = row.getAttribute(sourceColumn); + if (value == null) { + row.removeAttribute(targetColumn); + } else { + row.setAttribute(targetColumn, value); + } } } } - public void fillColumnWithValue(AttributeTable table, AttributeColumn column, String value) { + @Override + public void fillColumnWithValue(Table table, Column column, String value) { if (canChangeColumnData(column)) { - for (Attributes row : getTableAttributeRows(table)) { + for (Element row : getTableAttributeRows(table)) { setAttributeValue(value, row, column); } } } - public void fillNodesColumnWithValue(Node[] nodes, AttributeColumn column, String value) { + @Override + public void fillNodesColumnWithValue(Node[] nodes, Column column, String value) { if (canChangeColumnData(column)) { for (Node node : nodes) { - setAttributeValue(value, node.getNodeData().getAttributes(), column); + setAttributeValue(value, node, column); } } } - public void fillEdgesColumnWithValue(Edge[] edges, AttributeColumn column, String value) { + @Override + public void fillEdgesColumnWithValue(Edge[] edges, Column column, String value) { if (canChangeColumnData(column)) { for (Edge edge : edges) { - setAttributeValue(value, edge.getEdgeData().getAttributes(), column); + setAttributeValue(value, edge, column); } } } - public void clearColumnData(AttributeTable table, AttributeColumn column) { + @Override + public void clearColumnData(Table table, Column column) { if (canClearColumnData(column)) { - final int columnIndex = column.getIndex(); - for (Attributes attributes : getTableAttributeRows(table)) { - attributes.setValue(columnIndex, null); + for (Element row : getTableAttributeRows(table)) { + row.removeAttribute(column); } } } - public Map calculateColumnValuesFrequencies(AttributeTable table, AttributeColumn column) { - Map valuesFrequencies = new HashMap(); + @Override + public Map calculateColumnValuesFrequencies(Table table, Column column) { + Map valuesFrequencies = new HashMap<>(); Object value; - for (Attributes row : getTableAttributeRows(table)) { - value = row.getValue(column.getIndex()); + for (Element row : getTableAttributeRows(table)) { + value = row.getAttribute(column); if (valuesFrequencies.containsKey(value)) { - valuesFrequencies.put(value, new Integer(valuesFrequencies.get(value) + 1)); + valuesFrequencies.put(value, valuesFrequencies.get(value) + 1); } else { - valuesFrequencies.put(value, new Integer(1)); + valuesFrequencies.put(value, 1); } } return valuesFrequencies; } - public AttributeColumn createBooleanMatchesColumn(AttributeTable table, AttributeColumn column, String newColumnTitle, Pattern pattern) { + @Override + public Column createBooleanMatchesColumn(Table table, Column column, String newColumnTitle, Pattern pattern) { if (pattern != null) { - AttributeColumn newColumn = addAttributeColumn(table, newColumnTitle, AttributeType.BOOLEAN); + Column newColumn = addAttributeColumn(table, newColumnTitle, Boolean.class); if (newColumn == null) { return null; } Matcher matcher; Object value; - for (Attributes row : getTableAttributeRows(table)) { - value = row.getValue(column.getIndex()); + + TimeFormat timeFormat = table.getGraph().getModel().getTimeFormat(); + ZoneId timeZone = table.getGraph().getModel().getTimeZone(); + for (Element row : getTableAttributeRows(table)) { + value = row.getAttribute(column); if (value != null) { - matcher = pattern.matcher(value.toString()); + matcher = pattern.matcher(AttributeUtils.print(value, timeFormat, timeZone)); } else { matcher = pattern.matcher(""); } - row.setValue(newColumn.getIndex(), matcher.matches()); + row.setAttribute(newColumn, matcher.matches()); } return newColumn; } else { @@ -283,30 +317,35 @@ public AttributeColumn createBooleanMatchesColumn(AttributeTable table, Attribut } } - public void negateBooleanColumn(AttributeTable table, AttributeColumn column) { - AttributeUtils attributeUtils = AttributeUtils.getDefault(); - if (attributeUtils.isColumnOfType(column, AttributeType.BOOLEAN)) { + @Override + public void negateBooleanColumn(Table table, Column column) { + if (column.getTypeClass().equals(Boolean.class)) { negateColumnBooleanType(table, column); - } else if (attributeUtils.isColumnOfType(column, AttributeType.LIST_BOOLEAN)) { + } else if (column.getTypeClass().equals(Boolean[].class)) { negateColumnListBooleanType(table, column); } else { throw new IllegalArgumentException(); } } - public AttributeColumn createFoundGroupsListColumn(AttributeTable table, AttributeColumn column, String newColumnTitle, Pattern pattern) { + @Override + public Column createFoundGroupsListColumn(Table table, Column column, String newColumnTitle, Pattern pattern) { if (pattern != null) { - AttributeColumn newColumn = addAttributeColumn(table, newColumnTitle, AttributeType.LIST_STRING); + Column newColumn = addAttributeColumn(table, newColumnTitle, String[].class); if (newColumn == null) { return null; } Matcher matcher; Object value; - ArrayList foundGroups = new ArrayList(); - for (Attributes attributes : getTableAttributeRows(table)) { - value = attributes.getValue(column.getIndex()); + ArrayList foundGroups = new ArrayList<>(); + + TimeFormat timeFormat = table.getGraph().getModel().getTimeFormat(); + ZoneId timeZone = table.getGraph().getModel().getTimeZone(); + + for (Element row : getTableAttributeRows(table)) { + value = row.getAttribute(column); if (value != null) { - matcher = pattern.matcher(value.toString()); + matcher = pattern.matcher(AttributeUtils.print(value, timeFormat, timeZone)); } else { matcher = pattern.matcher(""); } @@ -314,10 +353,10 @@ public AttributeColumn createFoundGroupsListColumn(AttributeTable table, Attribu foundGroups.add(matcher.group()); } if (foundGroups.size() > 0) { - attributes.setValue(newColumn.getIndex(), new StringList(foundGroups.toArray(new String[0]))); + row.setAttribute(newColumn, foundGroups.toArray(new String[0])); foundGroups.clear(); } else { - attributes.setValue(newColumn.getIndex(), null); + row.setAttribute(newColumn, null); } } return newColumn; @@ -326,111 +365,106 @@ public AttributeColumn createFoundGroupsListColumn(AttributeTable table, Attribu } } - public void clearNodeData(Node node, AttributeColumn[] columnsToClear) { - clearRowData((AttributeRow) node.getNodeData().getAttributes(), columnsToClear); + @Override + public void clearNodeData(Node node, Column[] columnsToClear) { + clearRowData(node, columnsToClear); } - public void clearNodesData(Node[] nodes, AttributeColumn[] columnsToClear) { + @Override + public void clearNodesData(Node[] nodes, Column[] columnsToClear) { for (Node n : nodes) { clearNodeData(n, columnsToClear); } } - public void clearEdgeData(Edge edge, AttributeColumn[] columnsToClear) { - clearRowData((AttributeRow) edge.getEdgeData().getAttributes(), columnsToClear); + @Override + public void clearEdgeData(Edge edge, Column[] columnsToClear) { + clearRowData(edge, columnsToClear); } - public void clearEdgesData(Edge[] edges, AttributeColumn[] columnsToClear) { + @Override + public void clearEdgesData(Edge[] edges, Column[] columnsToClear) { for (Edge e : edges) { clearEdgeData(e, columnsToClear); } } - public void clearRowData(Attributes row, AttributeColumn[] columnsToClear) { - AttributeRow attributeRow = (AttributeRow) row; + @Override + public void clearRowData(Element row, Column[] columnsToClear) { if (columnsToClear != null) { - for (AttributeColumn column : columnsToClear) { + for (Column column : columnsToClear) { //Clear all except id and computed attributes: if (canClearColumnData(column)) { - row.setValue(column.getIndex(), null); + row.removeAttribute(column); } } } else { - AttributeValue[] values = attributeRow.getValues(); - for (int i = 0; i < values.length; i++) { - //Clear all except id and computed attributes: - if (canClearColumnData(values[i].getColumn())) { - row.setValue(i, null); + Table table; + if (row instanceof Node) { + table = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getNodeTable(); + } else { + table = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getNodeTable(); + } + + for (Column column : table) { + if (canClearColumnData(column)) { + row.removeAttribute(column); } } } } - public void copyNodeDataToOtherNodes(Node node, Node[] otherNodes, AttributeColumn[] columnsToCopy) { - Attributes row = node.getNodeData().getAttributes(); - Attributes[] otherRows = new Attributes[otherNodes.length]; - for (int i = 0; i < otherNodes.length; i++) { - otherRows[i] = otherNodes[i].getNodeData().getAttributes(); - } - - copyRowDataToOtherRows(row, otherRows, columnsToCopy); + @Override + public void copyNodeDataToOtherNodes(Node node, Node[] otherNodes, Column[] columnsToCopy) { + copyRowDataToOtherRows(node, otherNodes, columnsToCopy); } - public void copyEdgeDataToOtherEdges(Edge edge, Edge[] otherEdges, AttributeColumn[] columnsToCopy) { - Attributes row = edge.getEdgeData().getAttributes(); - Attributes[] otherRows = new Attributes[otherEdges.length]; - for (int i = 0; i < otherEdges.length; i++) { - otherRows[i] = otherEdges[i].getEdgeData().getAttributes(); - } - - copyRowDataToOtherRows(row, otherRows, columnsToCopy); + @Override + public void copyEdgeDataToOtherEdges(Edge edge, Edge[] otherEdges, Column[] columnsToCopy) { + copyRowDataToOtherRows(edge, otherEdges, columnsToCopy); } - public void copyRowDataToOtherRows(Attributes row, Attributes[] otherRows, AttributeColumn[] columnsToCopy) { - AttributeRow attributeRow = (AttributeRow) row; + @Override + public void copyRowDataToOtherRows(Element row, Element[] otherRows, Column[] columnsToCopy) { if (columnsToCopy != null) { - for (AttributeColumn column : columnsToCopy) { + for (Column column : columnsToCopy) { //Copy all except id and computed attributes: if (canChangeColumnData(column)) { - for (Attributes otherRow : otherRows) { - otherRow.setValue(column.getIndex(), row.getValue(column.getIndex())); + for (Element otherRow : otherRows) { + Object value = row.getAttribute(column); + setAttributeValue(value, otherRow, column); } } } } else { - AttributeColumn column; - AttributeValue[] values = attributeRow.getValues(); - for (int i = 0; i < values.length; i++) { - column = values[i].getColumn(); - //Copy all except id and computed attributes: + Table table; + if (row instanceof Node) { + table = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getNodeTable(); + } else { + table = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getNodeTable(); + } + + for (Column column : table) { if (canChangeColumnData(column)) { - for (Attributes otherRow : otherRows) { - otherRow.setValue(column.getIndex(), row.getValue(column.getIndex())); + for (Element otherRow : otherRows) { + otherRow.removeAttribute(column); } } } } } - public Attributes[] getTableAttributeRows(AttributeTable table) { - Attributes[] attributes; + @Override + public Element[] getTableAttributeRows(Table table) { if (isNodeTable(table)) { - Node[] nodes = getNodesArray(); - attributes = new Attributes[nodes.length]; - for (int i = 0; i < nodes.length; i++) { - attributes[i] = nodes[i].getNodeData().getAttributes(); - } + return getNodesArray(); } else { - Edge[] edges = getEdgesArray(); - attributes = new Attributes[edges.length]; - for (int i = 0; i < edges.length; i++) { - attributes[i] = edges[i].getEdgeData().getAttributes(); - } + return getEdgesArray(); } - return attributes; } - public int getTableRowsCount(AttributeTable table) { + @Override + public int getTableRowsCount(Table table) { if (isNodeTable(table)) { return Lookup.getDefault().lookup(GraphElementsController.class).getNodesCount(); } else { @@ -438,359 +472,227 @@ public int getTableRowsCount(AttributeTable table) { } } - public boolean isNodeTable(AttributeTable table) { - AttributeController ac = Lookup.getDefault().lookup(AttributeController.class); - return table == ac.getModel().getNodeTable(); + @Override + public boolean isNodeTable(Table table) { + return Node.class.equals(table.getElementClass()); + } + + @Override + public boolean isEdgeTable(Table table) { + return Edge.class.equals(table.getElementClass()); } - public boolean isEdgeTable(AttributeTable table) { - AttributeController ac = Lookup.getDefault().lookup(AttributeController.class); - return table == ac.getModel().getEdgeTable(); + @Override + public boolean canDeleteColumn(Column column) { + return !column.isReadOnly() && column.getOrigin() != Origin.PROPERTY; } - public boolean canDeleteColumn(AttributeColumn column) { - return column.getOrigin() != AttributeOrigin.PROPERTY; + @Override + public boolean isTableColumn(Table table, Column column) { + return column.getTable() == table; } - public boolean canChangeColumnData(AttributeColumn column) { - AttributeUtils au = Lookup.getDefault().lookup(AttributeUtils.class); - if (au.isNodeColumn(column)) { - return canChangeGenericColumnData(column) && column.getIndex() != PropertiesColumn.NODE_ID.getIndex(); - } else if (au.isEdgeColumn(column)) { - return canChangeGenericColumnData(column) && column.getIndex() != PropertiesColumn.EDGE_ID.getIndex(); - } else { - return canChangeGenericColumnData(column); - } + @Override + public boolean isNodeColumn(Column column) { + return isNodeTable(column.getTable()); } - public boolean canClearColumnData(AttributeColumn column) { - AttributeUtils au = Lookup.getDefault().lookup(AttributeUtils.class); - if (au.isNodeColumn(column)) { - return canChangeGenericColumnData(column) && column.getIndex() != PropertiesColumn.NODE_ID.getIndex(); - } else if (au.isEdgeColumn(column)) { - return canChangeGenericColumnData(column) && column.getIndex() != PropertiesColumn.EDGE_ID.getIndex() && column.getIndex() != PropertiesColumn.EDGE_WEIGHT.getIndex(); - } else { - return canChangeGenericColumnData(column); + @Override + public boolean isEdgeColumn(Column column) { + return isEdgeTable(column.getTable()); + } + + @Override + public boolean canChangeColumnData(Column column) { + return !column.isReadOnly(); + } + + @Override + public boolean canClearColumnData(Column column) { + if (isEdgeColumn(column) && column.getId().equalsIgnoreCase("weight")) { + return false;//Should not remove weight value but grapshtore currently allows it } + + return !column.isReadOnly(); } - public boolean canConvertColumnToDynamic(AttributeColumn column) { - if(column.getType().isDynamicType()){ + @Override + public boolean canConvertColumnToDynamic(Column column) { + if (column.isReadOnly() || AttributeUtils.isDynamicType(column.getTypeClass())) { + return false; + } + + try { + //Make sure the simple type can actually be part of a dynamic type of intervals/timestamps + //For example array types cannot be converted to dynamic + AttributeUtils.getIntervalMapType(column.getTypeClass()); + AttributeUtils.getTimestampMapType(column.getTypeClass()); + } catch (Exception e) { return false; } - - AttributeUtils au = Lookup.getDefault().lookup(AttributeUtils.class); - if (au.isNodeColumn(column)) { - return canChangeGenericColumnData(column) && column.getIndex() != PropertiesColumn.NODE_ID.getIndex() && column.getIndex() != PropertiesColumn.NODE_LABEL.getIndex(); - } else if (au.isEdgeColumn(column)) { - return canChangeGenericColumnData(column) && column.getIndex() != PropertiesColumn.EDGE_ID.getIndex() && column.getIndex() != PropertiesColumn.EDGE_LABEL.getIndex(); + + if (isNodeColumn(column) || isEdgeColumn(column)) { + return !column.getTitle().equalsIgnoreCase("Label"); } else { return true; } } - public BigDecimal[] getNumberOrNumberListColumnStatistics(AttributeTable table, AttributeColumn column) { + @Override + public BigDecimal[] getNumberOrNumberListColumnStatistics(Table table, Column column) { return StatisticsUtils.getAllStatistics(getColumnNumbers(table, column)); } - public Number[] getColumnNumbers(AttributeTable table, AttributeColumn column) { + @Override + public Number[] getColumnNumbers(Table table, Column column) { return getRowsColumnNumbers(getTableAttributeRows(table), column); } - public Number[] getRowsColumnNumbers(Attributes[] rows, AttributeColumn column) { - AttributeUtils attributeUtils = AttributeUtils.getDefault(); - if (!attributeUtils.isNumberOrNumberListColumn(column)) { - throw new IllegalArgumentException("The column has to be a number or number list column"); - } - - ArrayList numbers = new ArrayList(); - final int columnIndex = column.getIndex(); - Number number; - if (attributeUtils.isNumberColumn(column)) {//Number column - for (Attributes row : rows) { - number = (Number) row.getValue(columnIndex); - if (number != null) { - numbers.add(number); - } - } - } else {//Number list column - for (Attributes row : rows) { - numbers.addAll(getNumberListColumnNumbers(row, column)); - } + @Override + public Number[] getRowsColumnNumbers(Element[] rows, Column column) { + Class type = column.getTypeClass(); + if (!AttributeUtils.isNumberType(type)) { + throw new IllegalArgumentException("The column has to be a number column"); } - return numbers.toArray(new Number[0]); - } - - public Number[] getRowNumbers(Attributes row, AttributeColumn[] columns) { - AttributeUtils attributeUtils = AttributeUtils.getDefault(); - checkColumnsAreNumberOrNumberList(columns); + boolean isDynamic = AttributeUtils.isDynamicType(type); + boolean isArray = type.isArray(); - ArrayList numbers = new ArrayList(); + ArrayList numbers = new ArrayList<>(); Number number; - for (AttributeColumn column : columns) { - if (attributeUtils.isNumberColumn(column)) {//Single number column: - number = (Number) row.getValue(column.getIndex()); - if (number != null) { - numbers.add(number); + for (Element row : rows) { + Object value = row.getAttribute(column); + if (value != null) { + if (!isDynamic) { + if (isArray) { + numbers.addAll(getArrayNumbers(value)); + } else { + //Single number column: + number = (Number) row.getAttribute(column); + if (number != null) { + numbers.add(number); + } + } + } else { + numbers.addAll(getDynamicNumberColumnNumbers(row, column)); } - } else if (attributeUtils.isNumberListColumn(column)) {//Number list column: - numbers.addAll(getNumberListColumnNumbers(row, column)); - } else if (attributeUtils.isDynamicNumberColumn(column)) {//Dynamic number column - numbers.addAll(getDynamicNumberColumnNumbers(row, column)); } } return numbers.toArray(new Number[0]); } - public void importCSVToNodesTable(File file, Character separator, Charset charset, String[] columnNames, AttributeType[] columnTypes, boolean assignNewNodeIds) { - if (columnNames == null || columnNames.length == 0) { - return; - } - - if (columnTypes == null || columnNames.length != columnTypes.length) { - throw new IllegalArgumentException("Column names length must be the same as column types lenght"); - } - - CsvReader reader = null; - try { - //Prepare attribute columns for the column names, creating the not already existing columns: - AttributeTable nodesTable = Lookup.getDefault().lookup(AttributeController.class).getModel().getNodeTable(); - String idColumn = null; - ArrayList columnsList = new ArrayList(); - HashMap columnHeaders = new HashMap();//Necessary because of column name case insensitivity, to map columns to its corresponding csv header. - for (int i = 0; i < columnNames.length; i++) { - //Separate first id column found from the list to use as id. If more are found later, the will not be in the list and be ignored. - if (columnNames[i].equalsIgnoreCase("id")) { - if (idColumn == null) { - idColumn = columnNames[i]; - } - } else if (nodesTable.hasColumn(columnNames[i])) { - AttributeColumn column = nodesTable.getColumn(columnNames[i]); - columnsList.add(column); - columnHeaders.put(column, columnNames[i]); - } else { - AttributeColumn column = addAttributeColumn(nodesTable, columnNames[i], columnTypes[i]); - if (column != null) { - columnsList.add(column); - columnHeaders.put(column, columnNames[i]); - } - } + @Override + public Number[] getRowNumbers(Element row, Column[] columns) { + ArrayList numbers = new ArrayList<>(); + Number number; + for (Column column : columns) { + Class type = column.getTypeClass(); + if (!AttributeUtils.isNumberType(type)) { + throw new IllegalArgumentException("The column has to be a number column"); } + Object value = row.getAttribute(column); - //Create nodes: - GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); - Graph graph = Lookup.getDefault().lookup(GraphController.class).getModel().getGraph(); - String id = null; - Node node; - Attributes nodeAttributes; - reader = new CsvReader(new FileInputStream(file), separator, charset); - reader.setTrimWhitespace(false); - reader.readHeaders(); - while (reader.readRecord()) { - //Prepare the correct node to assign the attributes: - if (idColumn != null) { - id = reader.get(idColumn); - if (id == null || id.isEmpty()) { - node = gec.createNode(null);//id null or empty, assign one + if (value != null) { + if (!AttributeUtils.isDynamicType(type)) { + if (type.isArray()) { + numbers.addAll(getArrayNumbers(value)); } else { - graph.readLock(); - node = graph.getNode(id); - graph.readUnlock(); - if (node != null) {//Node with that id already in graph - if (assignNewNodeIds) { - node = gec.createNode(null); - } - } else { - node = gec.createNode(null, id);//New id in the graph + //Single number column: + number = (Number) value; + if (number != null) { + numbers.add(number); } } } else { - node = gec.createNode(null); - } - //Assign attributes to the current node: - nodeAttributes = node.getNodeData().getAttributes(); - for (AttributeColumn column : columnsList) { - setAttributeValue(reader.get(columnHeaders.get(column)), nodeAttributes, column); + numbers.addAll(getDynamicNumberColumnNumbers(row, column)); } } - } catch (FileNotFoundException ex) { - Exceptions.printStackTrace(ex); - } catch (IOException ex) { - Exceptions.printStackTrace(ex); - } finally { - reader.close(); + } + + return numbers.toArray(new Number[0]); } - public void importCSVToEdgesTable(File file, Character separator, Charset charset, String[] columnNames, AttributeType[] columnTypes, boolean createNewNodes) { - if (columnNames == null || columnNames.length == 0) { - return; - } + /** + * Finds the same edge (same source, target, and directedness) in the graph. If directed = false (undirected), it finds the reversed undirected edge too. + * + * @param graph Graph + * @param id Optional id, to enforce the edge id to match too + * @param source Source node + * @param target Target node + * @param directed Directedness of the edge to find + * @return The found edge or null if not found + */ + private Edge findEdge(Graph graph, String id, Node source, Node target, boolean directed) { + Edge edge = null; + if (id != null) { + //Try to find same edge with same id, if the id is provided: + edge = graph.getEdge(id); - if (columnTypes == null || columnNames.length != columnTypes.length) { - throw new IllegalArgumentException("Column names length must be the same as column types lenght"); - } + boolean sameEdgeDefinition = true; - CsvReader reader = null; - try { - //Prepare attribute columns for the column names, creating the not already existing columns: - AttributeTable edgesTable = Lookup.getDefault().lookup(AttributeController.class).getModel().getEdgeTable(); - String idColumn = null; - String sourceColumn = null; - String targetColumn = null; - String typeColumn = null; - ArrayList columnsList = new ArrayList(); - HashMap columnHeaders = new HashMap();//Necessary because of column name case insensitivity, to map columns to its corresponding csv header. - for (int i = 0; i < columnNames.length; i++) { - //Separate first id column found from the list to use as id. If more are found later, the will not be in the list and be ignored. - if (columnNames[i].equalsIgnoreCase("id")) { - if (idColumn == null) { - idColumn = columnNames[i]; + if (edge.isDirected() != directed) { + sameEdgeDefinition = false; + } else { + if (directed) { + if (edge.getSource() != source || edge.getTarget() != target) { + sameEdgeDefinition = false; } - } else if (columnNames[i].equalsIgnoreCase("source") && sourceColumn == null) {//Separate first source column found from the list to use as source node id - sourceColumn = columnNames[i]; - } else if (columnNames[i].equalsIgnoreCase("target") && targetColumn == null) {//Separate first target column found from the list to use as target node id - targetColumn = columnNames[i]; - } else if (columnNames[i].equalsIgnoreCase("type") && typeColumn == null) {//Separate first type column found from the list to use as edge type (directed/undirected) - typeColumn = columnNames[i]; - } else if (edgesTable.hasColumn(columnNames[i])) { - AttributeColumn column = edgesTable.getColumn(columnNames[i]); - columnsList.add(column); - columnHeaders.put(column, columnNames[i]); } else { - AttributeColumn column = addAttributeColumn(edgesTable, columnNames[i], columnTypes[i]); - if (column != null) { - columnsList.add(column); - columnHeaders.put(column, columnNames[i]); - } - } - } - - //Create edges: - GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); - Graph graph = Lookup.getDefault().lookup(GraphController.class).getModel().getGraph(); - String id = null; - Edge edge; - String sourceId, targetId; - Node source, target; - String type; - boolean directed; - Attributes edgeAttributes; - reader = new CsvReader(new FileInputStream(file), separator, charset); - reader.setTrimWhitespace(false); - reader.readHeaders(); - while (reader.readRecord()) { - sourceId = reader.get(sourceColumn); - targetId = reader.get(targetColumn); - - if (sourceId == null || sourceId.isEmpty() || targetId == null || targetId.isEmpty()) { - continue;//No correct source and target ids were provided, ignore row - } - - graph.readLock(); - source = graph.getNode(sourceId); - graph.readUnlock(); - - if (source == null) { - if (createNewNodes) {//Create new nodes when they don't exist already and option is enabled - if (source == null) { - source = gec.createNode(null, sourceId); + if (edge.getSource() == source) { + if (edge.getTarget() != target) { + sameEdgeDefinition = false; } - } else { - continue;//Ignore this edge row, since no new nodes should be created. - } - } - - graph.readLock(); - target = graph.getNode(targetId); - graph.readUnlock(); - - if (target == null) { - if (createNewNodes) {//Create new nodes when they don't exist already and option is enabled - if (target == null) { - target = gec.createNode(null, targetId); + } else if (edge.getTarget() == source) { + if (edge.getSource() != target) { + sameEdgeDefinition = false; } } else { - continue;//Ignore this edge row, since no new nodes should be created. + //Edge data is different even when the id coincides: + sameEdgeDefinition = false; } } + } - if (typeColumn != null) { - type = reader.get(typeColumn); - //Undirected if indicated correctly, otherwise always directed: - if (type != null) { - directed = !type.equalsIgnoreCase("undirected"); - } else { - directed = true; + if (!sameEdgeDefinition) { + Logger.getLogger("").log( + Level.WARNING, + "Found edge with correct id = {0} but different definition (wanted = [source = {1}, target = {2}, directed = {3}]; found = [source = {4}, target = {5}, directed = {6}]). Cannot use this edge", + new Object[] { + id, + source.getId(), target.getId(), directed, + edge.getSource().getId(), edge.getTarget().getId(), edge.isDirected() } - } else { - directed = true;//Directed by default when not indicated - } + ); + //Edge data is different even when the id coincides: + edge = null; + } + } else { + //Find a similar edge with any id: + if (edge == null) { + edge = graph.getEdge(source, target); + } - //Prepare the correct edge to assign the attributes: - if (idColumn != null) { - id = reader.get(idColumn); - if (id == null || id.isEmpty()) { - edge = gec.createEdge(source, target, directed);//id null or empty, assign one - } else { - edge = gec.createEdge(id, source, target, directed); - if (edge == null) {//Edge with that id already in graph - edge = gec.createEdge(source, target, directed); - } - } - } else { - edge = gec.createEdge(source, target, directed); - } + if (edge == null && !directed) { + //Not from source to target but undirected and reverse? + edge = graph.getEdge(target, source); + } - if (edge != null) {//Edge could be created because it does not already exist: - //Assign attributes to the current edge: - edgeAttributes = edge.getEdgeData().getAttributes(); - for (AttributeColumn column : columnsList) { - setAttributeValue(reader.get(columnHeaders.get(column)), edgeAttributes, column); - } - } else { - //Do not ignore repeated edge, instead increase edge weight - edge = graph.getEdge(source, target); - if (edge == null) { - //Not from source to target but undirected and reverse? - edge = graph.getEdge(target, source); - if (edge != null && edge.isDirected()) { - edge = null; - } - } - if (edge != null) { - //Increase edge weight with specified weight (if specified), else increase by 1: - String weight = reader.get(columnHeaders.get(edgesTable.getColumn(PropertiesColumn.EDGE_WEIGHT.getIndex()))); - if (weight != null) { - try { - Float weightFloat = Float.parseFloat(weight); - edge.getEdgeData().getAttributes().setValue(PropertiesColumn.EDGE_WEIGHT.getIndex(), edge.getWeight() + weightFloat); - } catch (NumberFormatException numberFormatException) { - //Not valid weight, add 1 - edge.getEdgeData().getAttributes().setValue(PropertiesColumn.EDGE_WEIGHT.getIndex(), edge.getWeight() + 1); - } - } else { - //Add 1 (weight not specified) - edge.getEdgeData().getAttributes().setValue(PropertiesColumn.EDGE_WEIGHT.getIndex(), edge.getWeight() + 1); - } - } - } + if (edge != null && edge.isDirected() != directed) { + edge = null;//Cannot use it since directedness is different } - } catch (FileNotFoundException ex) { - Exceptions.printStackTrace(ex); - } catch (IOException ex) { - Exceptions.printStackTrace(ex); - } finally { - reader.close(); } + + return edge; } - public void mergeRowsValues(AttributeTable table, AttributeRowsMergeStrategy[] mergeStrategies, Attributes[] rows, Attributes selectedRow, Attributes resultRow) { - AttributeColumn[] columns = table.getColumns(); + @Override + public void mergeRowsValues(Column[] columns, AttributeRowsMergeStrategy[] mergeStrategies, Element[] rows, + Element selectedRow, Element resultRow) { if (columns.length != mergeStrategies.length) { - throw new IllegalArgumentException("The number of columns must be equal to the number of merge strategies provided"); + throw new IllegalArgumentException( + "The number of columns must be equal to the number of merge strategies provided"); } if (selectedRow == null) { selectedRow = rows[0]; @@ -798,48 +700,56 @@ public void mergeRowsValues(AttributeTable table, AttributeRowsMergeStrategy[] m AttributeRowsMergeStrategy mergeStrategy; Object value; - for (int i = 0; i < columns.length; i++) { + + int i = 0; + for (Column column : columns) { mergeStrategy = mergeStrategies[i]; if (mergeStrategy != null) { - mergeStrategy.setup(rows, selectedRow, columns[i]); + mergeStrategy.setup(rows, selectedRow, column); if (mergeStrategy.canExecute()) { mergeStrategy.execute(); value = mergeStrategy.getReducedValue(); } else { - value = selectedRow.getValue(columns[i].getIndex()); + value = selectedRow.getAttribute(column); } } else { - value = selectedRow.getValue(columns[i].getIndex()); + value = selectedRow.getAttribute(column); } - setAttributeValue(value, resultRow, columns[i]); + setAttributeValue(value, resultRow, column); + + i++; } } - public List> detectNodeDuplicatesByColumn(AttributeColumn column, boolean caseSensitive) { - final HashMap> valuesMap = new HashMap>(); - final int columnIndex = column.getIndex(); + @Override + public List> detectNodeDuplicatesByColumn(Column column, boolean caseSensitive) { + final HashMap> valuesMap = new HashMap<>(); - Graph graph = Lookup.getDefault().lookup(GraphController.class).getModel().getGraph(); + Graph graph = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getGraph(); Object value; String strValue; + + TimeFormat timeFormat = graph.getModel().getTimeFormat(); + ZoneId timeZone = graph.getModel().getTimeZone(); + for (Node node : graph.getNodes().toArray()) { - value = node.getNodeData().getAttributes().getValue(columnIndex); + value = node.getAttribute(column); if (value != null) { - strValue = value.toString(); + strValue = AttributeUtils.print(value, timeFormat, timeZone); if (!caseSensitive) { strValue = strValue.toLowerCase(); } if (valuesMap.containsKey(strValue)) { valuesMap.get(strValue).add(node); } else { - ArrayList newGroup = new ArrayList(); + ArrayList newGroup = new ArrayList<>(); newGroup.add(node); valuesMap.put(strValue, newGroup); } } } - final List> groupsList = new ArrayList>(); + final List> groupsList = new ArrayList<>(); for (List group : valuesMap.values()) { if (group.size() > 1) { groupsList.add(group); @@ -857,7 +767,7 @@ public List> detectNodeDuplicatesByColumn(AttributeColumn column, boo * @return Array with all graph nodes */ private Node[] getNodesArray() { - return Lookup.getDefault().lookup(GraphController.class).getModel().getHierarchicalGraph().getNodesTree().toArray(); + return Lookup.getDefault().lookup(GraphController.class).getGraphModel().getGraph().getNodes().toArray(); } /** @@ -866,30 +776,20 @@ private Node[] getNodesArray() { * @return Array with all graph edges */ private Edge[] getEdgesArray() { - return Lookup.getDefault().lookup(GraphController.class).getModel().getHierarchicalGraph().getEdges().toArray(); - } - - /** - * Only checks that a column is not - * COMPUTED or - * DELEGATE - */ - private boolean canChangeGenericColumnData(AttributeColumn column) { - return column.getOrigin() != AttributeOrigin.COMPUTED && column.getOrigin() != AttributeOrigin.DELEGATE; + return Lookup.getDefault().lookup(GraphController.class).getGraphModel().getGraph().getEdges().toArray(); } /** * Used to negate the values of a single boolean column. */ - private void negateColumnBooleanType(AttributeTable table, AttributeColumn column) { - final int columnIndex = column.getIndex(); + private void negateColumnBooleanType(Table table, Column column) { Object value; Boolean newValue; - for (Attributes row : getTableAttributeRows(table)) { - value = row.getValue(columnIndex); + for (Element row : getTableAttributeRows(table)) { + value = row.getAttribute(column); if (value != null) { newValue = !((Boolean) value); - row.setValue(columnIndex, newValue); + row.setAttribute(column, newValue); } } } @@ -897,74 +797,67 @@ private void negateColumnBooleanType(AttributeTable table, AttributeColumn colum /** * Used to negate all values of a list of boolean values column. */ - private void negateColumnListBooleanType(AttributeTable table, AttributeColumn column) { - final int columnIndex = column.getIndex(); + private void negateColumnListBooleanType(Table table, Column column) { Object value; - BooleanList list; Boolean[] newValues; - for (Attributes row : getTableAttributeRows(table)) { - value = row.getValue(columnIndex); + for (Element row : getTableAttributeRows(table)) { + value = row.getAttribute(column); if (value != null) { - list = (BooleanList) value; - newValues = new Boolean[list.size()]; - for (int i = 0; i < list.size(); i++) { - newValues[i] = !list.getItem(i); + Boolean[] list = (Boolean[]) value; + newValues = new Boolean[list.length]; + for (int i = 0; i < list.length; i++) { + newValues[i] = !list[i]; } - row.setValue(columnIndex, new BooleanList(newValues)); + row.setAttribute(column, newValues); } } } /** - * Used for obtaining a list of the numbers of row of a number list column. + * Used for obtaining a list of the numbers of row of a dynamic number column. + * + * @param row Row + * @param column Column with dynamic type + * @return list of numbers */ - private ArrayList getNumberListColumnNumbers(Attributes row, AttributeColumn column) { - if (!AttributeUtils.getDefault().isNumberListColumn(column)) { - throw new IllegalArgumentException("Column must be a number list column"); + private List getDynamicNumberColumnNumbers(Element row, Column column) { + Class type = column.getTypeClass(); + if (!(AttributeUtils.isNumberType(type) && AttributeUtils.isDynamicType(type))) { + throw new IllegalArgumentException("Column must be a dynamic number column"); } - ArrayList numbers = new ArrayList(); - NumberList list = (NumberList) row.getValue(column.getIndex()); - if (list == null) { - return numbers; - } - Number n; - for (int i = 0; i < list.size(); i++) { - n = (Number) list.getItem(i); - if (n != null) { - numbers.add((Number) n); + if (TimestampMap.class.isAssignableFrom(type)) {//Timestamp type: + TimestampMap timestampMap = (TimestampMap) row.getAttribute(column); + if (timestampMap == null) { + return new ArrayList<>(); + } + Number[] dynamicNumbers = (Number[]) timestampMap.toValuesArray(); + return Arrays.asList(dynamicNumbers); + } else if (IntervalMap.class.isAssignableFrom(type)) {//Interval type: + IntervalMap intervalMap = (IntervalMap) row.getAttribute(column); + if (intervalMap == null) { + return new ArrayList<>(); } + Number[] dynamicNumbers = (Number[]) intervalMap.toValuesArray(); + return Arrays.asList(dynamicNumbers); + } else { + throw new IllegalArgumentException("Unsupported dynamic type class " + type.getCanonicalName()); } - return numbers; } /** - * Used for obtaining a list of the numbers of row of a dynamic number column. + * Works for arrays of primitive and non primitive numbers. + * + * @param arr Array of Number assignable type + * @return numbers */ - private ArrayList getDynamicNumberColumnNumbers(Attributes row, AttributeColumn column) { - if (!AttributeUtils.getDefault().isDynamicNumberColumn(column)) { - throw new IllegalArgumentException("Column must be a dynamic number column"); - } - ArrayList numbers = new ArrayList(); - DynamicType dynamicList = (DynamicType) row.getValue(column.getIndex()); - if (dynamicList == null) { - return numbers; - } - Number[] dynamicNumbers; - dynamicNumbers = (Number[]) dynamicList.getValues().toArray(new Number[0]); - Number n; - for (int i = 0; i < dynamicNumbers.length; i++) { - n = (Number) dynamicNumbers[i]; - if (n != null) { - numbers.add((Number) n); - } - } - return numbers; - } + private List getArrayNumbers(Object arr) { + int length = Array.getLength(arr); + List result = new ArrayList<>(); - private void checkColumnsAreNumberOrNumberList(AttributeColumn[] columns) { - if (columns == null || (!AttributeUtils.getDefault().areAllNumberOrNumberListColumns(columns) && !AttributeUtils.getDefault().areAllDynamicNumberColumns(columns))) { - throw new IllegalArgumentException("All columns have to be number or number list columns and can't be null"); + for (int i = 0; i < length; i++) { + result.add((Number) Array.get(arr, i)); } + return result; } } diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/impl/AttributeColumnsMergeStrategiesControllerImpl.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/impl/AttributeColumnsMergeStrategiesControllerImpl.java index 525bc3a0d5..f3930bb1c4 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/impl/AttributeColumnsMergeStrategiesControllerImpl.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/impl/AttributeColumnsMergeStrategiesControllerImpl.java @@ -39,50 +39,54 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.impl; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeOrigin; -import org.gephi.data.attributes.api.AttributeTable; -import org.gephi.data.attributes.api.AttributeType; -import org.gephi.data.attributes.api.AttributeUtils; -import org.gephi.data.attributes.type.TimeInterval; -import org.gephi.datalab.api.AttributeColumnsMergeStrategiesController; +import java.util.TimeZone; import org.gephi.datalab.api.AttributeColumnsController; -import org.gephi.dynamic.api.DynamicController; -import org.gephi.dynamic.api.DynamicModel; -import org.gephi.graph.api.Attributes; +import org.gephi.datalab.api.AttributeColumnsMergeStrategiesController; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Origin; +import org.gephi.graph.api.Table; +import org.gephi.graph.api.TimeFormat; +import org.gephi.graph.api.types.IntervalSet; import org.gephi.utils.StatisticsUtils; +import java.time.ZoneId; import org.openide.util.Lookup; import org.openide.util.lookup.ServiceProvider; /** * Implementation of the AttributeColumnsMergeStrategiesController interface * declared in the Data Laboratory API. - * @author Eduardo Ramos + * + * @author Eduardo Ramos * @see AttributeColumnsMergeStrategiesController */ @ServiceProvider(service = AttributeColumnsMergeStrategiesController.class) public class AttributeColumnsMergeStrategiesControllerImpl implements AttributeColumnsMergeStrategiesController { - public AttributeColumn joinWithSeparatorMerge(AttributeTable table, AttributeColumn[] columnsToMerge, AttributeType newColumnType, String newColumnTitle, String separator) { + @Override + public Column joinWithSeparatorMerge(Table table, Column[] columnsToMerge, Class newColumnType, + String newColumnTitle, String separator) { if (table == null || columnsToMerge == null) { throw new IllegalArgumentException("Table or columns can't be null"); } AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); - AttributeColumn newColumn; - newColumn = ac.addAttributeColumn(table, newColumnTitle, newColumnType != null ? newColumnType : AttributeType.STRING);//Create as STRING column by default. Then it can be duplicated to other type. + Column newColumn; + newColumn = ac.addAttributeColumn(table, newColumnTitle, newColumnType != null ? newColumnType : + String.class);//Create as STRING column by default. Then it can be duplicated to other type. if (newColumn == null) { return null; } - final int newColumnIndex = newColumn.getIndex(); - if (separator == null) { separator = ""; } @@ -91,46 +95,58 @@ public AttributeColumn joinWithSeparatorMerge(AttributeTable table, AttributeCol StringBuilder sb; final int columnsCount = columnsToMerge.length; - for (Attributes row : ac.getTableAttributeRows(table)) { + GraphModel graphModel = table.getGraph().getModel(); + TimeFormat timeFormat = graphModel.getTimeFormat(); + ZoneId timeZone = graphModel.getTimeZone(); + + for (Element row : ac.getTableAttributeRows(table)) { sb = new StringBuilder(); for (int i = 0; i < columnsCount; i++) { - value = row.getValue(columnsToMerge[i].getIndex()); + value = row.getAttribute(columnsToMerge[i]); if (value != null) { - sb.append(value.toString()); + sb.append(AttributeUtils.print(value, timeFormat, timeZone)); if (i < columnsCount - 1) { sb.append(separator); } } } - row.setValue(newColumnIndex, sb.toString()); + + ac.setAttributeValue(sb.toString(), row, newColumn); } return newColumn; } - public AttributeColumn booleanLogicOperationsMerge(AttributeTable table, AttributeColumn[] columnsToMerge, BooleanOperations[] booleanOperations, String newColumnTitle) { - AttributeUtils attributeUtils = AttributeUtils.getDefault(); + @Override + public Column booleanLogicOperationsMerge(Table table, Column[] columnsToMerge, + BooleanOperations[] booleanOperations, String newColumnTitle) { AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); - if (table == null || columnsToMerge == null || !attributeUtils.areAllColumnsOfType(columnsToMerge, AttributeType.BOOLEAN) || booleanOperations == null || booleanOperations.length != columnsToMerge.length - 1) { - throw new IllegalArgumentException("All columns have to be boolean columns, table, columns or operations can't be null and operations length must be columns length -1"); + if (table == null || columnsToMerge == null || booleanOperations == null || + booleanOperations.length != columnsToMerge.length - 1) { + throw new IllegalArgumentException( + "table, columns or operations can't be null and operations length must be columns length -1"); + } + + for (Column column : columnsToMerge) { + if (!column.getTypeClass().equals(Boolean.class)) { + throw new IllegalArgumentException("All columns have to be boolean columns"); + } } - AttributeColumn newColumn; - newColumn = ac.addAttributeColumn(table, newColumnTitle, AttributeType.BOOLEAN); + Column newColumn; + newColumn = ac.addAttributeColumn(table, newColumnTitle, Boolean.class); if (newColumn == null) { return null; } - final int newColumnIndex = newColumn.getIndex(); - Boolean value; Boolean secondValue; - for (Attributes row : ac.getTableAttributeRows(table)) { - value = (Boolean) row.getValue(columnsToMerge[0].getIndex()); + for (Element row : ac.getTableAttributeRows(table)) { + value = (Boolean) row.getAttribute(columnsToMerge[0]); value = value != null ? value : false;//Use false if null for (int i = 0; i < booleanOperations.length; i++) { - secondValue = (Boolean) row.getValue(columnsToMerge[i + 1].getIndex()); + secondValue = (Boolean) row.getAttribute(columnsToMerge[i + 1]); secondValue = secondValue != null ? secondValue : false;//Use false if null switch (booleanOperations[i]) { case AND: @@ -150,29 +166,33 @@ public AttributeColumn booleanLogicOperationsMerge(AttributeTable table, Attribu break; } } - row.setValue(newColumnIndex, value); + row.setAttribute(newColumn, value); } return newColumn; } - public AttributeColumn mergeNumericColumnsToTimeInterval(AttributeTable table, AttributeColumn startColumn, AttributeColumn endColumn, double defaultStart, double defaultEnd) { + @Override + public Column mergeNumericColumnsToTimeInterval(Table table, Column startColumn, Column endColumn, + double defaultStart, double defaultEnd) { checkTableAndOneColumn(table, startColumn, endColumn); - AttributeColumn timeIntervalColumn = getTimeIntervalColumn(table); - final int timeIntervalColumnIndex = timeIntervalColumn.getIndex(); + Column timeIntervalColumn = getTimeIntervalColumn(table); final int startColumnIndex = startColumn != null ? startColumn.getIndex() : -1; final int endColumnIndex = endColumn != null ? endColumn.getIndex() : -1; - final boolean isStartColumnNumeric = startColumn != null ? AttributeUtils.getDefault().isNumberColumn(startColumn) : false; - final boolean isEndColumnNumeric = endColumn != null ? AttributeUtils.getDefault().isNumberColumn(endColumn) : false; + final boolean isStartColumnNumeric = + startColumn != null && (!AttributeUtils.isDynamicType(startColumn.getTypeClass()) && + AttributeUtils.isNumberType(startColumn.getTypeClass())); + final boolean isEndColumnNumeric = + endColumn != null && (!AttributeUtils.isDynamicType(endColumn.getTypeClass()) && + AttributeUtils.isNumberType(endColumn.getTypeClass())); AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); Object value; double start, end; - TimeInterval timeInterval; - for (Attributes row : ac.getTableAttributeRows(table)) { + for (Element row : ac.getTableAttributeRows(table)) { if (startColumnIndex != -1) { - value = row.getValue(startColumnIndex); + value = row.getAttribute(startColumn); if (value != null) { if (isStartColumnNumeric) { start = ((Number) value).doubleValue(); @@ -186,7 +206,7 @@ public AttributeColumn mergeNumericColumnsToTimeInterval(AttributeTable table, A start = defaultStart; } if (endColumnIndex != -1) { - value = row.getValue(endColumnIndex); + value = row.getAttribute(endColumn); if (value != null) { if (isEndColumnNumeric) { end = ((Number) value).doubleValue(); @@ -210,21 +230,27 @@ public AttributeColumn mergeNumericColumnsToTimeInterval(AttributeTable table, A end = Double.POSITIVE_INFINITY; } } - timeInterval = new TimeInterval(start, end); - row.setValue(timeIntervalColumnIndex, timeInterval); + + IntervalSet timeInterval = new IntervalSet(new double[] {start, end}); + row.setAttribute(timeIntervalColumn, timeInterval); } - Lookup.getDefault().lookup(DynamicController.class).setTimeFormat(DynamicModel.TimeFormat.DOUBLE); + return timeIntervalColumn; } - public AttributeColumn mergeDateColumnsToTimeInterval(AttributeTable table, AttributeColumn startColumn, AttributeColumn endColumn, SimpleDateFormat dateFormat, String defaultStartDate, String defaultEndDate) { + @Override + public Column mergeDateColumnsToTimeInterval(Table table, Column startColumn, Column endColumn, + SimpleDateFormat dateFormat, String defaultStartDate, + String defaultEndDate) { checkTableAndOneColumn(table, startColumn, endColumn); if (dateFormat == null) { throw new IllegalArgumentException("Date format can't be null can't be null"); } - AttributeColumn timeIntervalColumn = getTimeIntervalColumn(table); - final int timeIntervalColumnIndex = timeIntervalColumn.getIndex(); + Column timeIntervalColumn = getTimeIntervalColumn(table); + ZoneId timeZone = table.getGraph().getModel().getTimeZone(); + dateFormat.setTimeZone(TimeZone.getTimeZone(timeZone)); + final int startColumnIndex = startColumn != null ? startColumn.getIndex() : -1; final int endColumnIndex = endColumn != null ? endColumn.getIndex() : -1; double defaultStart = parseDateToDouble(dateFormat, defaultStartDate, Double.NEGATIVE_INFINITY); @@ -233,16 +259,15 @@ public AttributeColumn mergeDateColumnsToTimeInterval(AttributeTable table, Attr AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); Object value; double start, end; - TimeInterval timeInterval; - for (Attributes row : ac.getTableAttributeRows(table)) { + for (Element row : ac.getTableAttributeRows(table)) { if (startColumnIndex != -1) { - value = row.getValue(startColumnIndex); + value = row.getAttribute(startColumn); start = parseDateToDouble(dateFormat, value != null ? value.toString() : null, defaultStart); } else { start = defaultStart; } if (endColumnIndex != -1) { - value = row.getValue(endColumnIndex); + value = row.getAttribute(endColumn); end = parseDateToDouble(dateFormat, value != null ? value.toString() : null, defaultEnd); } else { end = defaultEnd; @@ -258,64 +283,63 @@ public AttributeColumn mergeDateColumnsToTimeInterval(AttributeTable table, Attr end = Double.POSITIVE_INFINITY; } } - timeInterval = new TimeInterval(start, end); - row.setValue(timeIntervalColumnIndex, timeInterval); + + IntervalSet timeInterval = new IntervalSet(new double[] {start, end}); + row.setAttribute(timeIntervalColumn, timeInterval); } - Lookup.getDefault().lookup(DynamicController.class).setTimeFormat(DynamicModel.TimeFormat.DATE); return timeIntervalColumn; } - public AttributeColumn averageNumberMerge(AttributeTable table, AttributeColumn[] columnsToMerge, String newColumnTitle) { + @Override + public Column averageNumberMerge(Table table, Column[] columnsToMerge, String newColumnTitle) { checkTableAndColumnsAreNumberOrNumberList(table, columnsToMerge); AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); - AttributeColumn newColumn; - newColumn = ac.addAttributeColumn(table, newColumnTitle, AttributeType.BIGDECIMAL);//Create as BIGDECIMAL column by default. Then it can be duplicated to other type. + Column newColumn; + newColumn = ac.addAttributeColumn(table, newColumnTitle, + BigDecimal.class);//Create as BIGDECIMAL column by default. Then it can be duplicated to other type. if (newColumn == null) { return null; } - final int newColumnIndex = newColumn.getIndex(); BigDecimal average; - for (Attributes row : ac.getTableAttributeRows(table)) { + for (Element row : ac.getTableAttributeRows(table)) { average = StatisticsUtils.average(ac.getRowNumbers(row, columnsToMerge)); - row.setValue(newColumnIndex, average); + row.setAttribute(newColumn, average); } return newColumn; } - public AttributeColumn firstQuartileNumberMerge(AttributeTable table, AttributeColumn[] columnsToMerge, String newColumnTitle) { + @Override + public Column firstQuartileNumberMerge(Table table, Column[] columnsToMerge, String newColumnTitle) { checkTableAndColumnsAreNumberOrNumberList(table, columnsToMerge); AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); - AttributeColumn newColumn; - newColumn = ac.addAttributeColumn(table, newColumnTitle, AttributeType.BIGDECIMAL);//Create as BIGDECIMAL column by default. Then it can be duplicated to other type. + Column newColumn; + newColumn = ac.addAttributeColumn(table, newColumnTitle, + BigDecimal.class);//Create as BIGDECIMAL column by default. Then it can be duplicated to other type. if (newColumn == null) { return null; } - if (newColumn == null) { - return null; - } - - final int newColumnIndex = newColumn.getIndex(); - BigDecimal Q1; - for (Attributes row : ac.getTableAttributeRows(table)) { + for (Element row : ac.getTableAttributeRows(table)) { Q1 = StatisticsUtils.quartile1(ac.getRowNumbers(row, columnsToMerge)); - row.setValue(newColumnIndex, Q1); + row.setAttribute(newColumn, Q1); } return newColumn; } - public AttributeColumn medianNumberMerge(AttributeTable table, AttributeColumn[] columnsToMerge, String newColumnTitle) { + @Override + public Column medianNumberMerge(Table table, Column[] columnsToMerge, String newColumnTitle) { checkTableAndColumnsAreNumberOrNumberList(table, columnsToMerge); AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); - AttributeColumn newColumn; - newColumn = ac.addAttributeColumn(table, newColumnTitle, AttributeType.BIGDECIMAL);//Create as BIGDECIMAL column by default. Then it can be duplicated to other type. + Column newColumn; + newColumn = ac.addAttributeColumn(table, newColumnTitle, + BigDecimal.class);//Create as BIGDECIMAL column by default. Then it can be duplicated to other type. if (newColumn == null) { return null; } @@ -323,50 +347,50 @@ public AttributeColumn medianNumberMerge(AttributeTable table, AttributeColumn[] final int newColumnIndex = newColumn.getIndex(); BigDecimal median; - for (Attributes row : ac.getTableAttributeRows(table)) { + for (Element row : ac.getTableAttributeRows(table)) { median = StatisticsUtils.median(ac.getRowNumbers(row, columnsToMerge)); - row.setValue(newColumnIndex, median); + row.setAttribute(newColumn, median); } return newColumn; } - public AttributeColumn thirdQuartileNumberMerge(AttributeTable table, AttributeColumn[] columnsToMerge, String newColumnTitle) { + @Override + public Column thirdQuartileNumberMerge(Table table, Column[] columnsToMerge, String newColumnTitle) { checkTableAndColumnsAreNumberOrNumberList(table, columnsToMerge); AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); - AttributeColumn newColumn; - newColumn = ac.addAttributeColumn(table, newColumnTitle, AttributeType.BIGDECIMAL);//Create as BIGDECIMAL column by default. Then it can be duplicated to other type. + Column newColumn; + newColumn = ac.addAttributeColumn(table, newColumnTitle, + BigDecimal.class);//Create as BIGDECIMAL column by default. Then it can be duplicated to other type. if (newColumn == null) { return null; } - final int newColumnIndex = newColumn.getIndex(); - BigDecimal Q3; - for (Attributes row : ac.getTableAttributeRows(table)) { + for (Element row : ac.getTableAttributeRows(table)) { Q3 = StatisticsUtils.quartile3(ac.getRowNumbers(row, columnsToMerge)); - row.setValue(newColumnIndex, Q3); + row.setAttribute(newColumn, Q3); } return newColumn; } - public AttributeColumn interQuartileRangeNumberMerge(AttributeTable table, AttributeColumn[] columnsToMerge, String newColumnTitle) { + @Override + public Column interQuartileRangeNumberMerge(Table table, Column[] columnsToMerge, String newColumnTitle) { checkTableAndColumnsAreNumberOrNumberList(table, columnsToMerge); AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); - AttributeColumn newColumn; - newColumn = ac.addAttributeColumn(table, newColumnTitle, AttributeType.BIGDECIMAL);//Create as BIGDECIMAL column by default. Then it can be duplicated to other type. + Column newColumn; + newColumn = ac.addAttributeColumn(table, newColumnTitle, + BigDecimal.class);//Create as BIGDECIMAL column by default. Then it can be duplicated to other type. if (newColumn == null) { return null; } - final int newColumnIndex = newColumn.getIndex(); - BigDecimal IQR, Q1, Q3; Number[] rowNumbers; - for (Attributes row : ac.getTableAttributeRows(table)) { + for (Element row : ac.getTableAttributeRows(table)) { rowNumbers = ac.getRowNumbers(row, columnsToMerge); Q3 = StatisticsUtils.quartile3(rowNumbers); Q1 = StatisticsUtils.quartile1(rowNumbers); @@ -375,80 +399,81 @@ public AttributeColumn interQuartileRangeNumberMerge(AttributeTable table, Attri } else { IQR = null; } - row.setValue(newColumnIndex, IQR); + row.setAttribute(newColumn, IQR); } return newColumn; } - public AttributeColumn sumNumbersMerge(AttributeTable table, AttributeColumn[] columnsToMerge, String newColumnTitle) { + @Override + public Column sumNumbersMerge(Table table, Column[] columnsToMerge, String newColumnTitle) { checkTableAndColumnsAreNumberOrNumberList(table, columnsToMerge); AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); - AttributeColumn newColumn; - newColumn = ac.addAttributeColumn(table, newColumnTitle, AttributeType.BIGDECIMAL);//Create as BIGDECIMAL column by default. Then it can be duplicated to other type. + Column newColumn; + newColumn = ac.addAttributeColumn(table, newColumnTitle, + BigDecimal.class);//Create as BIGDECIMAL column by default. Then it can be duplicated to other type. if (newColumn == null) { return null; } - final int newColumnIndex = newColumn.getIndex(); - BigDecimal sum; - for (Attributes row : ac.getTableAttributeRows(table)) { + for (Element row : ac.getTableAttributeRows(table)) { sum = StatisticsUtils.sum(ac.getRowNumbers(row, columnsToMerge)); - row.setValue(newColumnIndex, sum); + row.setAttribute(newColumn, sum); } return newColumn; } - public AttributeColumn minValueNumbersMerge(AttributeTable table, AttributeColumn[] columnsToMerge, String newColumnTitle) { + @Override + public Column minValueNumbersMerge(Table table, Column[] columnsToMerge, String newColumnTitle) { checkTableAndColumnsAreNumberOrNumberList(table, columnsToMerge); AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); - AttributeColumn newColumn; - newColumn = ac.addAttributeColumn(table, newColumnTitle, AttributeType.BIGDECIMAL);//Create as BIGDECIMAL column by default. Then it can be duplicated to other type. + Column newColumn; + newColumn = ac.addAttributeColumn(table, newColumnTitle, + BigDecimal.class);//Create as BIGDECIMAL column by default. Then it can be duplicated to other type. if (newColumn == null) { return null; } - final int newColumnIndex = newColumn.getIndex(); - BigDecimal min; - for (Attributes row : ac.getTableAttributeRows(table)) { + for (Element row : ac.getTableAttributeRows(table)) { min = StatisticsUtils.minValue(ac.getRowNumbers(row, columnsToMerge)); - row.setValue(newColumnIndex, min); + row.setAttribute(newColumn, min); } return newColumn; } - public AttributeColumn maxValueNumbersMerge(AttributeTable table, AttributeColumn[] columnsToMerge, String newColumnTitle) { + @Override + public Column maxValueNumbersMerge(Table table, Column[] columnsToMerge, String newColumnTitle) { checkTableAndColumnsAreNumberOrNumberList(table, columnsToMerge); AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); - AttributeColumn newColumn; - newColumn = ac.addAttributeColumn(table, newColumnTitle, AttributeType.BIGDECIMAL);//Create as BIGDECIMAL column by default. Then it can be duplicated to other type. + Column newColumn; + newColumn = ac.addAttributeColumn(table, newColumnTitle, + BigDecimal.class);//Create as BIGDECIMAL column by default. Then it can be duplicated to other type. if (newColumn == null) { return null; } - final int newColumnIndex = newColumn.getIndex(); - BigDecimal max; - for (Attributes row : ac.getTableAttributeRows(table)) { + for (Element row : ac.getTableAttributeRows(table)) { max = StatisticsUtils.maxValue(ac.getRowNumbers(row, columnsToMerge)); - row.setValue(newColumnIndex, max); + row.setAttribute(newColumn, max); } return newColumn; } /*************Private methods:*************/ - private AttributeColumn getTimeIntervalColumn(AttributeTable table) { - AttributeColumn column = table.getColumn(DynamicModel.TIMEINTERVAL_COLUMN); + private Column getTimeIntervalColumn(Table table) { + Column column = table.getColumn("timeset"); if (column == null) { - column = table.addColumn(DynamicModel.TIMEINTERVAL_COLUMN, "Time Interval", AttributeType.TIME_INTERVAL, AttributeOrigin.PROPERTY, null); + //This should not happen with our graphstore usage + column = table.addColumn("timeset", "Interval", IntervalSet.class, Origin.PROPERTY, null, true); } return column; } @@ -478,7 +503,7 @@ private double parseDateToDouble(SimpleDateFormat dateFormat, String date, doubl } } - private void checkTableAndOneColumn(AttributeTable table, AttributeColumn startColumn, AttributeColumn endColumn) { + private void checkTableAndOneColumn(Table table, Column startColumn, Column endColumn) { if (table == null) { throw new IllegalArgumentException("Table can't be null"); } @@ -487,16 +512,23 @@ private void checkTableAndOneColumn(AttributeTable table, AttributeColumn startC } } - private void checkTableAndColumnsAreNumberOrNumberList(AttributeTable table, AttributeColumn[] columns) { + private void checkTableAndColumnsAreNumberOrNumberList(Table table, Column[] columns) { if (table == null) { throw new IllegalArgumentException("Table can't be null"); } checkColumnsAreNumberOrNumberList(columns); } - private void checkColumnsAreNumberOrNumberList(AttributeColumn[] columns) { - if (columns == null || !AttributeUtils.getDefault().areAllNumberOrNumberListColumns(columns)) { - throw new IllegalArgumentException("All columns have to be number or number list columns and can't be null"); + private void checkColumnsAreNumberOrNumberList(Column[] columns) { + if (columns == null) { + throw new IllegalArgumentException( + "All columns have to be number or number list columns and can't be null"); + } + for (Column column : columns) { + if (!AttributeUtils.isNumberType(column.getTypeClass())) { + throw new IllegalArgumentException( + "All columns have to be number or number list columns and can't be null"); + } } } } diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/impl/DataTablesControllerImpl.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/impl/DataTablesControllerImpl.java index 3d6cd143c2..30c9ed1566 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/impl/DataTablesControllerImpl.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/impl/DataTablesControllerImpl.java @@ -1,136 +1,155 @@ /* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. + Copyright 2008-2010 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.impl; -import org.gephi.data.attributes.api.AttributeController; -import org.gephi.data.attributes.api.AttributeTable; +import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.api.datatables.DataTablesController; import org.gephi.datalab.api.datatables.DataTablesEventListener; import org.gephi.datalab.api.datatables.DataTablesEventListenerBuilder; import org.gephi.graph.api.Edge; import org.gephi.graph.api.Node; +import org.gephi.graph.api.Table; import org.openide.util.Lookup; import org.openide.util.lookup.ServiceProvider; /** - * Implementation of the DataTablesController interface - * declared in the Data Laboratory API. - * @author Eduardo Ramos + * Implementation of the DataTablesController interface declared in the Data Laboratory API. + * + * @author Eduardo Ramos * @see DataTablesController */ @ServiceProvider(service = DataTablesController.class) public class DataTablesControllerImpl implements DataTablesController { - DataTablesEventListener listener; - - public void setDataTablesEventListener(DataTablesEventListener listener) { - this.listener = listener; - } + private DataTablesEventListener listener; + @Override public DataTablesEventListener getDataTablesEventListener() { return listener; } + @Override + public void setDataTablesEventListener(DataTablesEventListener listener) { + this.listener = listener; + } + + @Override public boolean isDataTablesReady() { - return listener!=null; + return listener != null; } + @Override public void selectNodesTable() { if (listener != null) { listener.selectNodesTable(); } } + @Override public void selectEdgesTable() { if (listener != null) { listener.selectEdgesTable(); } } - public void selectTable(AttributeTable table) { + @Override + public void selectTable(Table table) { if (listener != null) { - AttributeController ac = Lookup.getDefault().lookup(AttributeController.class); - if (ac.getModel().getNodeTable() == table) { - selectNodesTable(); - } else { + if (Lookup.getDefault().lookup(AttributeColumnsController.class).isEdgeTable(table)) { selectEdgesTable(); + } else { + selectNodesTable(); } } } + @Override public void refreshCurrentTable() { if (listener != null) { listener.refreshCurrentTable(); } } - public void setNodeTableSelection(Node[] nodes) { + @Override + public Node[] getNodeTableSelection() { if (listener != null) { - listener.setNodeTableSelection(nodes); + return listener.getNodeTableSelection(); + } else { + return null; } } - public void setEdgeTableSelection(Edge[] edges) { + @Override + public void setNodeTableSelection(Node[] nodes) { if (listener != null) { - listener.setEdgeTableSelection(edges); + listener.setNodeTableSelection(nodes); } } - public Node[] getNodeTableSelection() { + @Override + public Edge[] getEdgeTableSelection() { if (listener != null) { - return listener.getNodeTableSelection(); + return listener.getEdgeTableSelection(); } else { return null; } } - public Edge[] getEdgeTableSelection() { + @Override + public void setEdgeTableSelection(Edge[] edges) { if (listener != null) { - return listener.getEdgeTableSelection(); - } else { - return null; + listener.setEdgeTableSelection(edges); } } + @Override + public void clearSelection() { + if (listener != null) { + listener.clearSelection(); + } + } + + @Override public boolean isNodeTableMode() { if (listener != null) { return listener.isNodeTableMode(); @@ -139,6 +158,7 @@ public boolean isNodeTableMode() { } } + @Override public boolean isEdgeTableMode() { if (listener != null) { return listener.isEdgeTableMode(); @@ -147,6 +167,7 @@ public boolean isEdgeTableMode() { } } + @Override public boolean isShowOnlyVisible() { if (listener != null) { return listener.isShowOnlyVisible(); @@ -155,18 +176,21 @@ public boolean isShowOnlyVisible() { } } - public void setShowOnlyVisible(boolean showOnlyVisible){ + @Override + public void setShowOnlyVisible(boolean showOnlyVisible) { if (listener != null) { listener.setShowOnlyVisible(showOnlyVisible); } } - public void exportCurrentTable(ExportMode exportMode) { + @Override + public void exportCurrentTable() { if (listener != null) { - listener.exportCurrentTable(exportMode); + listener.exportCurrentTable(); } } + @Override public boolean isUseSparklines() { if (listener != null) { return listener.isUseSparklines(); @@ -175,12 +199,14 @@ public boolean isUseSparklines() { } } + @Override public void setUseSparklines(boolean useSparklines) { if (listener != null) { listener.setUseSparklines(useSparklines); } } + @Override public boolean isTimeIntervalGraphics() { if (listener != null) { return listener.isTimeIntervalGraphics(); @@ -189,12 +215,14 @@ public boolean isTimeIntervalGraphics() { } } + @Override public void setTimeIntervalGraphics(boolean timeIntervalGraphics) { if (listener != null) { listener.setTimeIntervalGraphics(timeIntervalGraphics); } } + @Override public boolean isShowEdgesNodesLabels() { if (listener != null) { return listener.isShowEdgesNodesLabels(); @@ -203,17 +231,35 @@ public boolean isShowEdgesNodesLabels() { } } + @Override public void setShowEdgesNodesLabels(boolean showEdgesNodesLabels) { if (listener != null) { listener.setShowEdgesNodesLabels(showEdgesNodesLabels); } } + @Override public boolean prepareDataTables() { - DataTablesEventListenerBuilder builder=Lookup.getDefault().lookup(DataTablesEventListenerBuilder.class); - if(builder!=null){ - listener=builder.getDataTablesEventListener(); + DataTablesEventListenerBuilder builder = Lookup.getDefault().lookup(DataTablesEventListenerBuilder.class); + if (builder != null) { + listener = builder.getDataTablesEventListener(); } return isDataTablesReady(); } + + @Override + public boolean isAutoRefreshEnabled() { + if (listener != null) { + return listener.isAutoRefreshEnabled(); + } else { + return false; + } + } + + @Override + public void setAutoRefreshEnabled(boolean enabled) { + if (listener != null) { + listener.setAutoRefreshEnabled(enabled); + } + } } diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/impl/GraphElementsControllerImpl.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/impl/GraphElementsControllerImpl.java index 4edc823831..65836d9804 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/impl/GraphElementsControllerImpl.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/impl/GraphElementsControllerImpl.java @@ -1,76 +1,68 @@ /* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. + Copyright 2008-2010 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.impl; -import java.util.ArrayList; import java.util.Arrays; import java.util.HashSet; import java.util.Set; -import org.gephi.data.attributes.api.AttributeController; -import org.gephi.data.attributes.api.AttributeRow; -import org.gephi.data.attributes.api.AttributeTable; -import org.gephi.data.properties.PropertiesColumn; +import java.util.logging.Level; +import java.util.logging.Logger; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.api.GraphElementsController; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; -import org.gephi.graph.api.Attributes; -import org.gephi.graph.api.DirectedGraph; +import org.gephi.graph.api.Column; import org.gephi.graph.api.Edge; import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.HierarchicalGraph; import org.gephi.graph.api.Node; -import org.gephi.graph.api.NodeData; -import org.gephi.graph.api.UndirectedGraph; -import org.openide.DialogDisplayer; -import org.openide.NotifyDescriptor; +import org.gephi.graph.api.Table; import org.openide.util.Lookup; -import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * Implementation of the GraphElementsController interface - * declared in the Data Laboratory API - * @author Eduardo Ramos + * Implementation of the GraphElementsController interface declared in the Data Laboratory API + * + * @author Eduardo Ramos * @see GraphElementsController */ @ServiceProvider(service = GraphElementsController.class) @@ -79,16 +71,27 @@ public class GraphElementsControllerImpl implements GraphElementsController { private static final float DEFAULT_NODE_SIZE = 10f; private static final float DEFAULT_EDGE_WEIGHT = 1f; + @Override public Node createNode(String label) { - Node newNode = buildNode(label); - getGraph().addNode(newNode); + return createNode(label, getCurrentGraph()); + } + + @Override + public Node createNode(String label, Graph graph) { + Node newNode = buildNode(graph, label); + graph.addNode(newNode); return newNode; } + @Override public Node createNode(String label, String id) { - Graph graph = getGraph(); + return createNode(label, id, getCurrentGraph()); + } + + @Override + public Node createNode(String label, String id, Graph graph) { if (graph.getNode(id) == null) { - Node newNode = buildNode(label, id); + Node newNode = buildNode(graph, label, id); graph.addNode(newNode); return newNode; } else { @@ -96,61 +99,74 @@ public Node createNode(String label, String id) { } } + @Override public Node duplicateNode(Node node) { - HierarchicalGraph hg = getHierarchicalGraph(); + Graph g = getCurrentGraph(); - Node copy = copyNodeRecursively(node, hg.getParent(node), hg);//Add copy to the same level as the original node + Node copy = copyNode(node, g); return copy; } + @Override public void duplicateNodes(Node[] nodes) { for (Node n : nodes) { duplicateNode(n); } } + @Override public Edge createEdge(Node source, Node target, boolean directed) { - Edge newEdge; - if (directed) { - newEdge = buildEdge(source, target, true); - if (getDirectedGraph().addEdge(newEdge)) {//The edge will be created if it does not already exist. - return newEdge; - } else { - return null; - } - } else { - newEdge = buildEdge(source, target, false); - if (getUndirectedGraph().addEdge(newEdge)) {//The edge will be created if it does not already exist. - return newEdge; - } else { - return null; - } - } + return createEdge(null, source, target, directed, getCurrentGraph()); } + @Override + public Edge createEdge(Node source, Node target, boolean directed, Graph graph) { + return createEdge(null, source, target, directed, graph); + } + + @Override public Edge createEdge(String id, Node source, Node target, boolean directed) { - Edge newEdge; - if (source != target) {//Cannot create self-loop - if (directed) { - newEdge = buildEdge(id, source, target, true); - if (getDirectedGraph().addEdge(newEdge)) {//The edge will be created if it does not already exist. - return newEdge; - } else { - return null; - } - } else { - newEdge = buildEdge(id, source, target, false); - if (getUndirectedGraph().addEdge(newEdge)) {//The edge will be created if it does not already exist. - return newEdge; - } else { - return null; - } + return createEdge(id, source, target, directed, getCurrentGraph()); + } + + @Override + public Edge createEdge(Node source, Node target, boolean directed, Object typeLabel) { + return createEdge(null, source, target, directed, typeLabel, getCurrentGraph()); + } + + @Override + public Edge createEdge(Node source, Node target, boolean directed, Object typeLabel, Graph graph) { + return createEdge(null, source, target, directed, typeLabel, graph); + } + + @Override + public Edge createEdge(String id, Node source, Node target, boolean directed, Object typeLabel) { + return createEdge(id, source, target, directed, typeLabel, getCurrentGraph()); + } + + @Override + public Edge createEdge(String id, Node source, Node target, boolean directed, Graph graph) { + return createEdge(id, source, target, directed, null, graph); + } + + @Override + public Edge createEdge(String id, Node source, Node target, boolean directed, Object typeLabel, Graph graph) { + Edge newEdge = buildEdge(graph, id, source, target, directed, typeLabel); + try { + if (graph.addEdge(newEdge)) {//The edge will be created if it does not already exist. + return newEdge; } - } else { - return null; + } catch (Exception e) { + Logger.getLogger("").log( + Level.SEVERE, + "Error when adding edge [id = {0}, source = {1}, target = {2}, directed = {3}, typeLabel = {4}] to the graph. Exception message: {5}", + new Object[] {id, source.getId(), target.getId(), directed, typeLabel, e.getMessage()} + ); } + return null; } + @Override public void createEdges(Node source, Node[] allNodes, boolean directed) { for (Node n : allNodes) { if (n != source) { @@ -159,28 +175,33 @@ public void createEdges(Node source, Node[] allNodes, boolean directed) { } } + @Override public void deleteNode(Node node) { - removeNode(node, getGraph()); + removeNode(node, getCurrentGraph()); } + @Override public void deleteNodes(Node[] nodes) { - Graph graph = getGraph(); + Graph graph = getCurrentGraph(); for (Node node : nodes) { removeNode(node, graph); } } + @Override public void deleteEdge(Edge edge) { - removeEdge(edge, getGraph()); + removeEdge(edge, getCurrentGraph()); } + @Override public void deleteEdges(Edge[] edges) { - Graph graph = getGraph(); + Graph graph = getCurrentGraph(); for (Edge edge : edges) { removeEdge(edge, graph); } } + @Override public void deleteEdgeWithNodes(Edge edge, boolean deleteSource, boolean deleteTarget) { if (deleteSource) { deleteNode(edge.getSource()); @@ -188,164 +209,88 @@ public void deleteEdgeWithNodes(Edge edge, boolean deleteSource, boolean deleteT if (deleteTarget) { deleteNode(edge.getTarget()); } - removeEdge(edge, getGraph());//If no node is deleted, we need to remove the edge. + removeEdge(edge, getCurrentGraph());//If no node is deleted, we need to remove the edge. } + @Override public void deleteEdgesWithNodes(Edge[] edges, boolean deleteSource, boolean deleteTarget) { for (Edge edge : edges) { deleteEdgeWithNodes(edge, deleteSource, deleteTarget); } } - public boolean groupNodes(Node[] nodes) { - if (canGroupNodes(nodes)) { - HierarchicalGraph graph = getHierarchicalGraph(); - try { - float centroidX = 0; - float centroidY = 0; - int len = 0; - float sizes = 0; - float r = 0; - float g = 0; - float b = 0; - Node group = graph.groupNodes(nodes); - group.getNodeData().setLabel(NbBundle.getMessage(GraphElementsControllerImpl.class, "Group.nodeCount.label", nodes.length)); - group.getNodeData().setSize(10f); - for (Node child : nodes) { - centroidX += child.getNodeData().x(); - centroidY += child.getNodeData().y(); - len++; - sizes += child.getNodeData().getSize() / 10f; - r += child.getNodeData().r(); - g += child.getNodeData().g(); - b += child.getNodeData().b(); - } - centroidX /= len; - centroidY /= len; - group.getNodeData().setSize(sizes); - group.getNodeData().setColor(r / len, g / len, b / len); - group.getNodeData().setX(centroidX); - group.getNodeData().setY(centroidY); - } catch (Exception e) { - graph.readUnlockAll(); - NotifyDescriptor.Message nd = new NotifyDescriptor.Message(e.getMessage()); - DialogDisplayer.getDefault().notifyLater(nd); - return false; - } - return true; - } else { - return false; - } - } - - public boolean canGroupNodes(Node[] nodes) { - HierarchicalGraph hg = getHierarchicalGraph(); - Node parent = hg.getParent(nodes[0]); - for (Node n : nodes) { - if (hg.getParent(n) != parent) { - return false; - } - } - return true; - } - - public boolean ungroupNode(Node node) { - if (canUngroupNode(node)) { - HierarchicalGraph hg = getHierarchicalGraph(); - hg.ungroupNodes(node); - return true; - } else { - return false; - } - } - - public void ungroupNodes(Node[] nodes) { - for (Node n : nodes) { - ungroupNode(n); - } - } - - public boolean ungroupNodeRecursively(Node node) { - if (canUngroupNode(node)) { - HierarchicalGraph hg = getHierarchicalGraph(); - //We can get directly all descendant nodes withoud using recursion and break the groups: - ungroupNodes(hg.getDescendant(node).toArray()); - ungroupNode(node); - return true; - } else { - return false; - } - } - - public void ungroupNodesRecursively(Node[] nodes) { - for (Node n : nodes) { - ungroupNodeRecursively(n); - } - } - - public boolean canUngroupNode(Node node) { - boolean canUngroup; - HierarchicalGraph hg = getHierarchicalGraph(); - canUngroup = getNodeChildrenCount(hg, node) > 0;//The node has children - return canUngroup; - } - - public Node mergeNodes(Node[] nodes, Node selectedNode, AttributeRowsMergeStrategy[] mergeStrategies, boolean deleteMergedNodes) { - AttributeTable nodesTable = Lookup.getDefault().lookup(AttributeController.class).getModel().getNodeTable(); + @Override + public Node mergeNodes(Graph graph, Node[] nodes, Node selectedNode, Column[] columns, + AttributeRowsMergeStrategy[] mergeStrategies, boolean deleteMergedNodes) { + Table edgesTable = graph.getModel().getEdgeTable(); if (selectedNode == null) { selectedNode = nodes[0];//Use first node as selected node if null } - + //Create empty new node: - Node newNode = createNode(""); + Node newNode = createNode("", null, graph); //Set properties (position, size and color) using the selected node properties: - NodeData newNodeData = newNode.getNodeData(); - NodeData selectedNodeData = selectedNode.getNodeData(); - newNodeData.setX(selectedNodeData.x()); - newNodeData.setY(selectedNodeData.y()); - newNodeData.setZ(selectedNodeData.z()); - newNodeData.setSize(selectedNodeData.getSize()); - newNodeData.setColor(selectedNodeData.r(), selectedNodeData.g(), selectedNodeData.b()); - newNodeData.setAlpha(selectedNodeData.alpha()); - - //Prepare node rows: - Attributes[] rows = new Attributes[nodes.length]; - for (int i = 0; i < nodes.length; i++) { - rows[i] = nodes[i].getAttributes(); - } + newNode.setPosition(selectedNode.x(), selectedNode.y(), selectedNode.z()); + + newNode.setSize(selectedNode.size()); + + newNode.setR(selectedNode.r()); + newNode.setG(selectedNode.g()); + newNode.setB(selectedNode.b()); + newNode.setAlpha(selectedNode.alpha()); + + newNode.getTextProperties().setR(selectedNode.getTextProperties().getR()); + newNode.getTextProperties().setG(selectedNode.getTextProperties().getG()); + newNode.getTextProperties().setB(selectedNode.getTextProperties().getB()); + newNode.getTextProperties().setAlpha(selectedNode.getTextProperties().getAlpha()); + newNode.getTextProperties().setSize(selectedNode.getTextProperties().getSize()); //Merge attributes: AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); - ac.mergeRowsValues(nodesTable, mergeStrategies, rows, selectedNode.getAttributes(), newNode.getAttributes()); + ac.mergeRowsValues(columns, mergeStrategies, nodes, selectedNode, newNode); - Set nodesSet=new HashSet(); + Set nodesSet = new HashSet<>(); nodesSet.addAll(Arrays.asList(nodes)); - + //Assign edges to the new node: Edge newEdge; for (Node node : nodes) { for (Edge edge : getNodeEdges(node)) { + Node newEdgeSource; + Node newEdgeTarget; if (edge.getSource() == node) { + newEdgeSource = newNode; if (nodesSet.contains(edge.getTarget())) { - newEdge = createEdge(newNode, newNode, edge.isDirected());//Self loop because of edge between merged nodes + newEdgeTarget = newNode;//Self loop because of edge between merged nodes } else { - newEdge = createEdge(newNode, edge.getTarget(), edge.isDirected()); + newEdgeTarget = edge.getTarget(); } } else { + newEdgeTarget = newNode; if (nodesSet.contains(edge.getSource())) { - newEdge = createEdge(newNode, newNode, edge.isDirected());//Self loop because of edge between merged nodes + newEdgeSource = newNode;//Self loop because of edge between merged nodes } else { - newEdge = createEdge(edge.getSource(), newNode, edge.isDirected()); + newEdgeSource = edge.getSource(); } } + if (graph.getEdge(newEdgeSource, newEdgeTarget) != null) { + //This edge already exists + continue; + } + + newEdge = createEdge(newEdgeSource, newEdgeTarget, edge.isDirected(), edge.getTypeLabel(), graph); if (newEdge != null) {//Edge may not be created if repeated //Copy edge attributes: - AttributeRow row = (AttributeRow) edge.getAttributes(); - for (int i = 0; i < row.countValues(); i++) { - if (row.getAttributeValueAt(i).getColumn().getIndex() != PropertiesColumn.EDGE_ID.getIndex()) { - newEdge.getAttributes().setValue(i, row.getValue(i)); + for (Column column : edgesTable) { + if (!column.isReadOnly()) { + Object value = edge.getAttribute(column); + if (value == null) { + newEdge.removeAttribute(column); + } else { + newEdge.setAttribute(column, edge.getAttribute(column)); + } } } } @@ -360,128 +305,53 @@ public Node mergeNodes(Node[] nodes, Node selectedNode, AttributeRowsMergeStrate return newNode; } - public boolean moveNodeToGroup(Node node, Node group) { - if (canMoveNodeToGroup(node, group)) { - getHierarchicalGraph().moveToGroup(node, group); - return true; - } else { - return false; - } - } - - public void moveNodesToGroup(Node[] nodes, Node group) { - for (Node n : nodes) { - moveNodeToGroup(n, group); - } - } - - public Node[] getAvailableGroupsToMoveNodes(Node[] nodes) { - if (canGroupNodes(nodes)) { - HierarchicalGraph hg = getHierarchicalGraph(); - Set nodesSet = new HashSet(); - nodesSet.addAll(Arrays.asList(nodes)); - - //All have the same parent, get children and check what of them are groups and are not in the nodes array: - Node parent = hg.getParent(nodes[0]); - Node[] possibleGroups; - //If no parent, get nodes at level 0: - if (parent != null) { - possibleGroups = hg.getChildren(parent).toArray(); - } else { - possibleGroups = hg.getNodes(0).toArray(); - } - ArrayList availableGroups = new ArrayList(); - - for (Node n : possibleGroups) { - if (!nodesSet.contains(n) && getNodeChildrenCount(hg, n) > 0) { - availableGroups.add(n); - } - } - - return availableGroups.toArray(new Node[0]); - } else { - return null; - } - } - - public boolean canMoveNodeToGroup(Node node, Node group) { - HierarchicalGraph hg = getHierarchicalGraph(); - return node != group && hg.getParent(node) == hg.getParent(group) && canUngroupNode(group); - } - - public boolean removeNodeFromGroup(Node node) { - if (isNodeInGroup(node)) { - HierarchicalGraph hg = getHierarchicalGraph(); - Node parent = hg.getParent(node); - hg.readLock(); - int childrenCount = hg.getChildrenCount(parent); - hg.readUnlock(); - if (childrenCount == 1) { - hg.ungroupNodes(parent);//Break group when the last child is removed. - } else { - hg.removeFromGroup(node); - } - return true; - } else { - return false; - } - } - - public void removeNodesFromGroup(Node[] nodes) { - for (Node n : nodes) { - removeNodeFromGroup(n); - } - } - - public boolean isNodeInGroup(Node node) { - HierarchicalGraph hg = getHierarchicalGraph(); - return hg.getParent(node) != null; - } - + @Override public void setNodeFixed(Node node, boolean fixed) { - node.getNodeData().setFixed(fixed); + node.setFixed(fixed); } + @Override public void setNodesFixed(Node[] nodes, boolean fixed) { for (Node n : nodes) { setNodeFixed(n, fixed); } } + @Override public boolean isNodeFixed(Node node) { - return node.getNodeData().isFixed(); + return node.isFixed(); } + @Override public Node[] getNodeNeighbours(Node node) { - return getGraph().getNeighbors(node).toArray(); + return getCurrentGraph().getNeighbors(node).toArray(); } + @Override public Edge[] getNodeEdges(Node node) { - return getGraph().getEdges(node).toArray(); + return getCurrentGraph().getEdges(node).toArray(); } + @Override public int getNodesCount() { - Graph graph = getGraph(); - graph.readLock(); - int nodesCount = graph.getNodeCount(); - graph.readUnlock(); - return nodesCount; + Graph graph = getCurrentGraph(); + return graph.getNodeCount(); } + @Override public int getEdgesCount() { - Graph graph = getGraph(); - graph.readLock(); - int edgesCount = graph.getEdgeCount(); - graph.readUnlock(); - return edgesCount; + Graph graph = getCurrentGraph(); + return graph.getEdgeCount(); } + @Override public boolean isNodeInGraph(Node node) { - return getGraph().contains(node); + return getCurrentGraph().contains(node); } + @Override public boolean areNodesInGraph(Node[] nodes) { - Graph graph = getGraph(); + Graph graph = getCurrentGraph(); for (Node n : nodes) { if (!graph.contains(n)) { return false; @@ -490,12 +360,14 @@ public boolean areNodesInGraph(Node[] nodes) { return true; } + @Override public boolean isEdgeInGraph(Edge edge) { - return getGraph().contains(edge); + return getCurrentGraph().contains(edge); } + @Override public boolean areEdgesInGraph(Edge[] edges) { - Graph graph = getGraph(); + Graph graph = getCurrentGraph(); for (Edge e : edges) { if (!graph.contains(e)) { return false; @@ -504,81 +376,75 @@ public boolean areEdgesInGraph(Edge[] edges) { return true; } - /************Private methods : ************/ - private Graph getGraph() { - return Lookup.getDefault().lookup(GraphController.class).getModel().getGraph(); - } - - private DirectedGraph getDirectedGraph() { - return Lookup.getDefault().lookup(GraphController.class).getModel().getDirectedGraph(); + /** + * **********Private methods : *********** + */ + private Graph getCurrentGraph() { + return Lookup.getDefault().lookup(GraphController.class).getGraphModel().getGraph(); } - private UndirectedGraph getUndirectedGraph() { - return Lookup.getDefault().lookup(GraphController.class).getModel().getUndirectedGraph(); + private Node buildNode(Graph graph, String label) { + return buildNode(graph, label, null); } - private HierarchicalGraph getHierarchicalGraph() { - return Lookup.getDefault().lookup(GraphController.class).getModel().getHierarchicalGraph(); - } + private Node buildNode(Graph graph, String label, String id) { + Node newNode; + if (id != null) { + newNode = graph.getModel().factory().newNode(id); + } else { + newNode = graph.getModel().factory().newNode(); + } + newNode.setSize(DEFAULT_NODE_SIZE); + newNode.setLabel(label); - private Node buildNode(String label) { - Node newNode = Lookup.getDefault().lookup(GraphController.class).getModel().factory().newNode(); - newNode.getNodeData().setSize(DEFAULT_NODE_SIZE); - newNode.getNodeData().setLabel(label); - return newNode; - } + //Set random position to the node: + newNode.setX((float) ((0.01 + Math.random()) * 1000) - 500); + newNode.setY((float) ((0.01 + Math.random()) * 1000) - 500); - private Node buildNode(String label, String id) { - Node newNode = Lookup.getDefault().lookup(GraphController.class).getModel().factory().newNode(id); - newNode.getNodeData().setSize(DEFAULT_NODE_SIZE); - newNode.getNodeData().setLabel(label); return newNode; } - private Edge buildEdge(Node source, Node target, boolean directed) { - Edge newEdge = Lookup.getDefault().lookup(GraphController.class).getModel().factory().newEdge(source, target, DEFAULT_EDGE_WEIGHT, directed); - return newEdge; - } + private Edge buildEdge(Graph graph, String id, Node source, Node target, boolean directed, Object typeLabel) { + int type; + if (typeLabel == null) { + type = graph.getModel().getEdgeType(null); + } else { + //Create the type if missing: + type = graph.getModel().addEdgeType(typeLabel); + } - private Edge buildEdge(String id, Node source, Node target, boolean directed) { - Edge newEdge = Lookup.getDefault().lookup(GraphController.class).getModel().factory().newEdge(id, source, target, DEFAULT_EDGE_WEIGHT, directed); + Edge newEdge; + if (id != null) { + newEdge = graph.getModel().factory().newEdge(id, source, target, type, DEFAULT_EDGE_WEIGHT, directed); + } else { + newEdge = graph.getModel().factory().newEdge(source, target, type, DEFAULT_EDGE_WEIGHT, directed); + } return newEdge; } - private Node copyNodeRecursively(Node node, Node parent, HierarchicalGraph hg) { - NodeData nodeData = node.getNodeData(); - Node copy = buildNode(nodeData.getLabel()); - NodeData copyData = copy.getNodeData(); + private Node copyNode(Node node, Graph graph) { + Node copy = buildNode(graph, node.getLabel()); //Copy properties (position, size and color): - copyData.setX(nodeData.x()); - copyData.setY(nodeData.y()); - copyData.setZ(nodeData.z()); - copyData.setSize(nodeData.getSize()); - copyData.setColor(nodeData.r(), nodeData.g(), nodeData.b()); - copyData.setAlpha(nodeData.alpha()); + copy.setX(node.x()); + copy.setY(node.y()); + copy.setZ(node.z()); + copy.setSize(node.size()); + copy.setR(node.r()); + copy.setG(node.g()); + copy.setB(node.b()); + copy.setAlpha(node.alpha()); + + Table nodeTable = graph.getModel().getNodeTable(); //Copy attributes: - AttributeRow row = (AttributeRow) nodeData.getAttributes(); - for (int i = 0; i < row.countValues(); i++) { - if (row.getAttributeValueAt(i).getColumn().getIndex() != PropertiesColumn.NODE_ID.getIndex()) { - copyData.getAttributes().setValue(i, row.getValue(i)); + for (Column column : nodeTable) { + if (!column.isReadOnly()) { + copy.setAttribute(column, node.getAttribute(column)); } } - if (parent != null) { - hg.addNode(copy, parent); - } else { - hg.addNode(copy); - } - - //Copy the children of the original node if any: - Node[] children = hg.getChildren(node).toArray(); - if (children != null) { - for (Node child : children) { - copyNodeRecursively(child, copy, hg); - } - } + graph.addNode(copy); return copy; } @@ -590,11 +456,4 @@ private void removeNode(Node node, Graph graph) { private void removeEdge(Edge edge, Graph graph) { graph.removeEdge(edge); } - - private int getNodeChildrenCount(HierarchicalGraph hg, Node n) { - hg.readLock(); - int childrenCount = hg.getChildrenCount(n); - hg.readUnlock(); - return childrenCount; - } } diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/impl/SearchReplaceControllerImpl.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/impl/SearchReplaceControllerImpl.java index bfc393ef3d..8da8656ed3 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/impl/SearchReplaceControllerImpl.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/impl/SearchReplaceControllerImpl.java @@ -39,33 +39,37 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.impl; import java.util.Set; import java.util.regex.Matcher; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeController; -import org.gephi.data.attributes.api.AttributeRow; -import org.gephi.data.attributes.api.AttributeTable; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.api.GraphElementsController; import org.gephi.datalab.api.SearchReplaceController; -import org.gephi.datalab.api.SearchReplaceController.SearchResult; -import org.gephi.graph.api.Attributes; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; import org.gephi.graph.api.Node; +import org.gephi.graph.api.Table; +import org.gephi.graph.api.TimeFormat; +import java.time.ZoneId; import org.openide.util.Lookup; import org.openide.util.lookup.ServiceProvider; /** - * Implementation of the SearchReplaceController interface - * declared in the Data Laboratory API. + * Implementation of the SearchReplaceController interface declared in the Data Laboratory API. + * + * @author Eduardo Ramos * @see SearchReplaceController - * @author Eduardo Ramos */ @ServiceProvider(service = SearchReplaceController.class) public class SearchReplaceControllerImpl implements SearchReplaceController { + @Override public SearchResult findNext(SearchOptions searchOptions) { int row = 0; int column = 0; @@ -80,7 +84,8 @@ public SearchResult findNext(SearchOptions searchOptions) { result = findOnNodes(searchOptions, row, column); if (result == null && searchOptions.isLoopToBeginning()) { searchOptions.resetStatus(); - return findOnNodes(searchOptions, 0, 0);//If the end of data is reached with no success, try to search again from the beginning as a loop + return findOnNodes(searchOptions, 0, + 0);//If the end of data is reached with no success, try to search again from the beginning as a loop } else { return result; } @@ -88,60 +93,71 @@ public SearchResult findNext(SearchOptions searchOptions) { result = findOnEdges(searchOptions, row, column); if (result == null && searchOptions.isLoopToBeginning()) { searchOptions.resetStatus(); - return findOnEdges(searchOptions, 0, 0);//If the end of data is reached with no success, try to search again from the beginning as a loop + return findOnEdges(searchOptions, 0, + 0);//If the end of data is reached with no success, try to search again from the beginning as a loop } else { return result; } } } + @Override public SearchResult findNext(SearchResult result) { return findNext(result.getSearchOptions()); } + @Override public boolean canReplace(SearchResult result) { - AttributeController ac = Lookup.getDefault().lookup(AttributeController.class); - AttributeTable table; - AttributeColumn column; + GraphController gc = Lookup.getDefault().lookup(GraphController.class); + Table table; + Column column; if (result.getFoundNode() != null) { - table = ac.getModel().getNodeTable(); + table = gc.getGraphModel().getNodeTable(); column = table.getColumn(result.getFoundColumnIndex()); } else { - table = ac.getModel().getEdgeTable(); + table = gc.getGraphModel().getEdgeTable(); column = table.getColumn(result.getFoundColumnIndex()); } return Lookup.getDefault().lookup(AttributeColumnsController.class).canChangeColumnData(column); } + @Override public SearchResult replace(SearchResult result, String replacement) { if (result == null) { throw new IllegalArgumentException(); } if (!canReplace(result)) { - //Data has changed and the replacement can't be done, continue finding. + //Data has changed and the replacement can't be done, continue looking. return findNext(result);//Go to next search result } - AttributeController ac = Lookup.getDefault().lookup(AttributeController.class); + GraphController gc = Lookup.getDefault().lookup(GraphController.class); Object value; String str; - Attributes attributes; - AttributeColumn column; + Element attributes; + Column column; if (!result.getSearchOptions().isUseRegexReplaceMode()) { - replacement = Matcher.quoteReplacement(replacement);//Avoid using groups and other regex aspects in the replacement + replacement = + Matcher.quoteReplacement(replacement);//Avoid using groups and other regex aspects in the replacement } try { //Get value to re-match and replace: if (result.getFoundNode() != null) { - attributes = result.getFoundNode().getNodeData().getAttributes(); - column = ac.getModel().getNodeTable().getColumn(result.getFoundColumnIndex()); + attributes = result.getFoundNode(); + column = gc.getGraphModel().getNodeTable().getColumn(result.getFoundColumnIndex()); } else { - attributes = result.getFoundEdge().getEdgeData().getAttributes(); - column = ac.getModel().getEdgeTable().getColumn(result.getFoundColumnIndex()); + attributes = result.getFoundEdge(); + column = gc.getGraphModel().getEdgeTable().getColumn(result.getFoundColumnIndex()); } - value = attributes.getValue(result.getFoundColumnIndex()); - str = value != null ? value.toString() : ""; + + GraphModel graphModel = column.getTable().getGraph().getModel(); + TimeFormat timeFormat = graphModel.getTimeFormat(); + ZoneId timeZone = graphModel.getTimeZone(); + + value = attributes.getAttribute(column); + + str = value != null ? AttributeUtils.print(value, timeFormat, timeZone) : ""; StringBuffer sb = new StringBuffer(); //Match and replace the result: @@ -150,28 +166,30 @@ public SearchResult replace(SearchResult result, String replacement) { matcher.appendReplacement(sb, replacement); int replaceLong = sb.length(); matcher.appendTail(sb); - str = str.substring(0, result.getStart()) + sb.toString(); + str = str.substring(0, result.getStart()) + sb; result.getSearchOptions().setRegionStart(result.getStart() + replaceLong); Lookup.getDefault().lookup(AttributeColumnsController.class).setAttributeValue(str, attributes, column); return findNext(result);//Go to next search result } else { - //Data has changed and the replacement can't be done, continue finding. + //Data has changed and the replacement can't be done, continue looking. return findNext(result);//Go to next search result } } catch (Exception ex) { if (ex instanceof IndexOutOfBoundsException) { throw new IndexOutOfBoundsException();//Rethrow the exception when it is caused by a bad regex replacement } - //Data has changed (a lot of different errors can happen) and the replacement can't be done, continue finding. + //Data has changed (a lot of different errors can happen) and the replacement can't be done, continue looking. return findNext(result);//Go to next search result } } + @Override public int replaceAll(SearchOptions searchOptions, String replacement) { int replacementsCount = 0; searchOptions.resetStatus(); - searchOptions.setLoopToBeginning(false);//To avoid infinite loop when the replacement parse makes it to match again. + searchOptions + .setLoopToBeginning(false);//To avoid infinite loop when the replacement parse makes it to match again. SearchResult result; result = findNext(searchOptions); while (result != null) { @@ -191,20 +209,32 @@ private SearchResult findOnNodes(SearchOptions searchOptions, int rowIndex, int SearchResult result = null; Set columnsToSearch = searchOptions.getColumnsToSearch(); boolean searchAllColumns = columnsToSearch.isEmpty(); + Table table = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getNodeTable(); Node[] nodes = searchOptions.getNodesToSearch(); - AttributeRow row; + Node row; Object value; + + TimeFormat timeFormat = table.getGraph().getModel().getTimeFormat(); + ZoneId timeZone = table.getGraph().getModel().getTimeZone(); + + // Use toArray() to get a compact, gap-free snapshot of active columns. + // Column indices in the store may not be contiguous after deletions, so + // countColumns() cannot safely be used as an upper bound for index-based access. + Column[] columns = table.toArray(); + for (; rowIndex < nodes.length; rowIndex++) { if (!gec.isNodeInGraph(nodes[rowIndex])) { continue;//Make sure node is still in graph when continuing a search } - row = (AttributeRow) nodes[rowIndex].getNodeData().getAttributes(); - for (; columnIndex < row.countValues(); columnIndex++) { - if (searchAllColumns || columnsToSearch.contains(columnIndex)) { - value = row.getValue(columnIndex); - result = matchRegex(value, searchOptions, rowIndex, columnIndex); + row = nodes[rowIndex]; + for (; columnIndex < columns.length; columnIndex++) { + Column column = columns[columnIndex]; + if (searchAllColumns || columnsToSearch.contains(column.getIndex())) { + value = row.getAttribute(column); + result = matchRegex(value, searchOptions, rowIndex, columnIndex, timeFormat, timeZone); if (result != null) { result.setFoundNode(nodes[rowIndex]); + result.setFoundColumnIndex(column.getIndex()); return result; } } @@ -221,20 +251,32 @@ private SearchResult findOnEdges(SearchOptions searchOptions, int rowIndex, int SearchResult result = null; Set columnsToSearch = searchOptions.getColumnsToSearch(); boolean searchAllColumns = columnsToSearch.isEmpty(); + Table table = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getEdgeTable(); Edge[] edges = searchOptions.getEdgesToSearch(); - AttributeRow row; + Edge row; Object value; + + TimeFormat timeFormat = table.getGraph().getModel().getTimeFormat(); + ZoneId timeZone = table.getGraph().getModel().getTimeZone(); + + // Use toArray() to get a compact, gap-free snapshot of active columns. + // Column indices in the store may not be contiguous after deletions, so + // countColumns() cannot safely be used as an upper bound for index-based access. + Column[] columns = table.toArray(); + for (; rowIndex < edges.length; rowIndex++) { if (!gec.isEdgeInGraph(edges[rowIndex])) { continue;//Make sure edge is still in graph when continuing a search } - row = (AttributeRow) edges[rowIndex].getEdgeData().getAttributes(); - for (; columnIndex < row.countValues(); columnIndex++) { - if (searchAllColumns || columnsToSearch.contains(columnIndex)) { - value = row.getValue(columnIndex); - result = matchRegex(value, searchOptions, rowIndex, columnIndex); + row = edges[rowIndex]; + for (; columnIndex < columns.length; columnIndex++) { + Column column = columns[columnIndex]; + if (searchAllColumns || columnsToSearch.contains(column.getIndex())) { + value = row.getAttribute(column); + result = matchRegex(value, searchOptions, rowIndex, columnIndex, timeFormat, timeZone); if (result != null) { result.setFoundEdge(edges[rowIndex]); + result.setFoundColumnIndex(column.getIndex()); return result; } } @@ -246,9 +288,12 @@ private SearchResult findOnEdges(SearchOptions searchOptions, int rowIndex, int return result; } - private SearchResult matchRegex(Object value, SearchOptions searchOptions, int rowIndex, int columnIndex) { + private SearchResult matchRegex(Object value, SearchOptions searchOptions, int rowIndex, int columnIndex, + TimeFormat timeFormat, ZoneId timeZone) { boolean found; - String str = value != null ? value.toString() : ""; + + String str = value != null ? AttributeUtils.print(value, timeFormat, timeZone) : ""; + Matcher matcher = searchOptions.getRegexPattern().matcher(str); if (str.isEmpty()) { if (searchOptions.getRegionStart() > 0) { @@ -261,7 +306,8 @@ private SearchResult matchRegex(Object value, SearchOptions searchOptions, int r if (searchOptions.isOnlyMatchWholeAttributeValue()) { found = matcher.matches();//Try to match the whole value } else { - matcher.region(searchOptions.getRegionStart(), str.length());//Try to match a group in the remaining part of the value + matcher.region(searchOptions.getRegionStart(), + str.length());//Try to match a group in the remaining part of the value found = matcher.find(); } @@ -275,8 +321,10 @@ private SearchResult matchRegex(Object value, SearchOptions searchOptions, int r if (str.isEmpty()) { end++;//To be able to search on next values when the value matched is empty } - searchOptions.setRegionStart(end);//Start next search after this match in this value. (If it is greater than the length of the value, it will be discarded at the beginning of this method next time) - return new SearchResult(searchOptions, null, null, rowIndex, columnIndex, matcher.start(), matcher.end());//Set node or edge values later + searchOptions.setRegionStart( + end);//Start next search after this match in this value. (If it is greater than the length of the value, it will be discarded at the beginning of this method next time) + return new SearchResult(searchOptions, null, null, rowIndex, columnIndex, matcher.start(), + matcher.end());//Set node or edge values later } else { return null; } diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/ContextMenuItemManipulator.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/ContextMenuItemManipulator.java index 4a8ef43352..d4baf5c09b 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/ContextMenuItemManipulator.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/ContextMenuItemManipulator.java @@ -1,4 +1,3 @@ - /* Copyright 2008-2010 Gephi Authors : Eduardo Ramos @@ -40,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.spi; import org.gephi.datalab.spi.nodes.NodesManipulator; @@ -48,7 +48,8 @@ Development and Distribution License("CDDL") (collectively, the /** *

    This interface defines a common extension for the manipulators that appear as context menu items * such as NodesManipulator, EdgesManipulator and GraphContextMenuItem (from Visualization API)

    - * @author Eduardo Ramos + * + * @author Eduardo Ramos * @see NodesManipulator */ public interface ContextMenuItemManipulator extends Manipulator { @@ -61,12 +62,14 @@ public interface ContextMenuItemManipulator extends Manipulator { * must return the subitem(s) with the mnemonic even when it has not been setup. * If you don't need a mnemonic, return null if the item is not setup.

    *

    Returned items have to be of the same type as the subinterface (NodesManipulator for example)

    - * @return + * + * @return sub items */ ContextMenuItemManipulator[] getSubItems(); /** * Indicates if this item has to appear in the context menu at all + * * @return True to show, false otherwise */ boolean isAvailable(); @@ -74,6 +77,7 @@ public interface ContextMenuItemManipulator extends Manipulator { /** * Optional. Allows to declare a mnemonic key for this item in the menu. * There should not be 2 items with the same mnemonic at the same time. + * * @return Integer from KeyEvent values or null */ Integer getMnemonicKey(); diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/DialogControls.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/DialogControls.java index c333afaab6..d893ff4985 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/DialogControls.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/DialogControls.java @@ -39,25 +39,29 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.spi; /** *

    An instance of this interface is passed to any type of manipulator UI, allowing the * UIs to enable/disable the dialog controls

    *

    For now allows to enable/disable the Ok button of the dialog

    - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public interface DialogControls { - /** - * Enable or disable the Ok button of the dialog for the UI. - * @param enabled - */ - void setOkButtonEnabled(boolean enabled); - /** * Indicates if ok button is enabled for this dialog at the moment + * * @return true if ok button is enabled */ boolean isOkButtonEnabled(); + + /** + * Enable or disable the Ok button of the dialog for the UI. + * + * @param enabled + */ + void setOkButtonEnabled(boolean enabled); } diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/Manipulator.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/Manipulator.java index 211fdcff78..120fe1b235 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/Manipulator.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/Manipulator.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.spi; import javax.swing.Icon; @@ -58,8 +59,9 @@ Development and Distribution License("CDDL") (collectively, the *

    Used for different manipulators such as NodesManipulator, EdgesManipulator and GeneralActionsManipulator.

    *

    The only methods that are called before setting up a manipulator (subtypes have special setup methods) with the data are getType and getPosition. * This way, the other methods behaviour can depend on the data that has been setup before

    + * + * @author Eduardo Ramos * @see NodesManipulator - * @author Eduardo Ramos */ public interface Manipulator { @@ -73,12 +75,14 @@ public interface Manipulator { *

    Return name to show for this Manipulator on the ui.

    *

    Implementations can provide different names depending on the data this * Manipulator has (for example depending on the number of nodes in a NodesManipulator).

    + * * @return Name to show at current time and conditions */ String getName(); /** * Description of the Manipulator. + * * @return Description */ String getDescription(); @@ -86,12 +90,14 @@ public interface Manipulator { /** * Indicates if this Manipulator has to be executable. * Implementations should evaluate the current data and conditions. + * * @return True if it has to be executable, false otherwise */ boolean canExecute(); /** * Returns a ManipulatorUI for this Manipulator if it needs one. + * * @return ManipulatorUI for this Manipulator or null */ ManipulatorUI getUI(); @@ -99,6 +105,7 @@ public interface Manipulator { /** * Type of manipulator. This is used for separating the manipulators * in groups when shown, using popup separators. First types to show will be the lesser. + * * @return Type of this manipulator */ int getType(); @@ -106,12 +113,14 @@ public interface Manipulator { /** * Returns a position value that indicates the position * of this Manipulator in its type group. Less means upper. + * * @return This Manipulator position */ int getPosition(); /** * Returns an icon for this manipulator if necessary. + * * @return Icon for the manipulator or null */ Icon getIcon(); diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/ManipulatorUI.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/ManipulatorUI.java index 7c10edeb8d..ed260068e0 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/ManipulatorUI.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/ManipulatorUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.spi; import javax.swing.JPanel; @@ -48,13 +49,15 @@ Development and Distribution License("CDDL") (collectively, the *

    Must provide a JPanel, a window name/title and indicate if it is modal.

    *

    The panel will be shown in a dialog with Ok/Cancel options only.

    *

    The ok button can be enabled/disabled with the DialogControls instance passed at setup

    - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public interface ManipulatorUI { /** * Prepare this UI to be able to interact with its Manipulator. - * @param m Manipulator for the UI + * + * @param m Manipulator for the UI * @param dialogControls Used to enable/disable the dialog controls */ void setup(Manipulator m, DialogControls dialogControls); @@ -66,19 +69,22 @@ public interface ManipulatorUI { /** * Returns name/title for the window + * * @return Name/title for the window */ String getDisplayName(); /** * Returns a settings panel instance for this Manipulator. + * * @return Settings panel instance */ - public JPanel getSettingsPanel(); + JPanel getSettingsPanel(); /** * Indicates if the created dialog has to be modal + * * @return True if modal, false otherwise */ - public boolean isModal(); + boolean isModal(); } diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/columns/AttributeColumnsManipulator.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/columns/AttributeColumnsManipulator.java index ad03289144..74232f3460 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/columns/AttributeColumnsManipulator.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/columns/AttributeColumnsManipulator.java @@ -1,115 +1,123 @@ - /* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. + Copyright 2008-2010 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.spi.columns; import java.awt.Image; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Table; /** *

    Manipulation action to use for Data Laboratory column manipulator buttons.

    - *

    This special type of manipulator does not need any builder, implementations can be published simply with @ServiceProvider(service = AttributeColumnsManipulator.class) annotation

    + *

    This special type of manipulator does not need any builder, implementations can be published simply with + * @ServiceProvider(service = AttributeColumnsManipulator.class) annotation

    *

    These are shown as drop down buttons and are able to:

    *
      - *
    • Execute an action with 1 column
    • - *
    • Provide a name, description, type and order of appearance (position in group of its type)
    • - *
    • Indicate wether they can be executed on a specific AttributeColumn or not
    • - *
    • Provide and UI or not
    • - *
    • Provide and icon or not
    • + *
    • Execute an action with 1 column
    • + *
    • Provide a name, description, type and order of appearance (position in group of its type)
    • + *
    • Indicate wether they can be executed on a specific AttributeColumn or not
    • + *
    • Provide and UI or not
    • + *
    • Provide and icon or not
    • *
    - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public interface AttributeColumnsManipulator { /** * Execute this AttributeColumnsManipulator with the indicated table and column - * @param table AttributeTable of the column + * + * @param table AttributeTable of the column * @param column AttributeColumn of the table to manipulate */ - void execute(AttributeTable table,AttributeColumn column); + void execute(Table table, Column column); /** * Return name to show for this AttributeColumnsManipulator on the ui. + * * @return Name to show in UI */ String getName(); /** * Description of the AttributeColumnsManipulator. + * * @return Description */ String getDescription(); /** * Indicates if this AttributeColumnsManipulator can manipulate a specific AttributeColumn. + * * @return True if it can manipulate the column, false otherwise */ - boolean canManipulateColumn(AttributeTable table,AttributeColumn column); + boolean canManipulateColumn(Table table, Column column); /** * Returns a ManipulatorUI for this Manipulator if it needs one. - * @param table AttributeTable of the column + * + * @param table AttributeTable of the column * @param column AttributeColumn of the table to manipulate * @return ManipulatorUI for this Manipulator or null */ - AttributeColumnsManipulatorUI getUI(AttributeTable table,AttributeColumn column); + AttributeColumnsManipulatorUI getUI(Table table, Column column); /** - * Type of manipulator. This is used for separating the manipulators - * in groups when shown. First types to show will be the lesser. + * Type of manipulator. This is used for separating the manipulators in groups when shown. First types to show will be the lesser. + * * @return Type of this manipulator */ int getType(); /** - * Returns a position value that indicates the position - * of this AttributeColumnsManipulator in its type group. Less means upper. + * Returns a position value that indicates the position of this AttributeColumnsManipulator in its type group. Less means upper. + * * @return This AttributeColumnsManipulator position */ int getPosition(); /** * Returns an icon for this AttributeColumnsManipulator if necessary. + * * @return Icon for the manipulator or null */ Image getIcon(); diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/columns/AttributeColumnsManipulatorUI.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/columns/AttributeColumnsManipulatorUI.java index 8563f13226..a03755b557 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/columns/AttributeColumnsManipulatorUI.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/columns/AttributeColumnsManipulatorUI.java @@ -1,4 +1,3 @@ - /* Copyright 2008-2010 Gephi Authors : Eduardo Ramos @@ -40,30 +39,36 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.spi.columns; import javax.swing.JPanel; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; import org.gephi.datalab.spi.DialogControls; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Table; /** *

    UI AttributeColumnsManipulators can provide.

    *

    Must provide a JPanel, a window name/title and indictate if it is modal.

    *

    The panel will be shown in a dialog with Ok/Cancel options only.

    *

    The ok button can be enabled/disabled with the DialogControls instance passed at setup

    - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public interface AttributeColumnsManipulatorUI { /** * Prepare this UI to be able to interact with its AttributeColumnsManipulator. - * @param m Manipulator for the UI - * @param table Table of the column to manipulate - * @param column Column to manipulate + * + * @param m Manipulator for the UI + * @param graphModel Graph model of the table + * @param table Table of the column to manipulate + * @param column Column to manipulate * @param dialogControls Used to enable/disable the dialog controls */ - void setup(AttributeColumnsManipulator m, AttributeTable table, AttributeColumn column, DialogControls dialogControls); + void setup(AttributeColumnsManipulator m, GraphModel graphModel, Table table, Column column, + DialogControls dialogControls); /** * Called when the window is closed or accepted. @@ -72,19 +77,22 @@ public interface AttributeColumnsManipulatorUI { /** * Returns name/title for the window + * * @return Name/title for the window */ String getDisplayName(); /** * Returns a settings panel instance for this AttributeColumnsManipulator. + * * @return Settings panel instance */ - public JPanel getSettingsPanel(); + JPanel getSettingsPanel(); /** * Indicates if the created dialog has to be modal + * * @return True if modal, false otherwise */ - public boolean isModal(); + boolean isModal(); } diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/columns/merge/AttributeColumnsMergeStrategy.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/columns/merge/AttributeColumnsMergeStrategy.java index 1a339a68ef..2608e04443 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/columns/merge/AttributeColumnsMergeStrategy.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/columns/merge/AttributeColumnsMergeStrategy.java @@ -39,25 +39,28 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.spi.columns.merge; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; import org.gephi.datalab.spi.Manipulator; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Table; /** *

    Service for defining strategies for merging attribute columns of a table.

    *

    Has the same interface as a manipulator.

    + * + * @author Eduardo Ramos * @see Manipulator - * @author Eduardo Ramos */ -public interface AttributeColumnsMergeStrategy extends Manipulator{ +public interface AttributeColumnsMergeStrategy extends Manipulator { /** * Prepare columns (with their table) for this merge strategy. * At least 1 column will be set up to merge always. - * @param table Table of the columns + * + * @param table Table of the columns * @param columns Columns to merge */ - void setup(AttributeTable table, AttributeColumn[] columns); + void setup(Table table, Column[] columns); } diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/columns/merge/AttributeColumnsMergeStrategyBuilder.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/columns/merge/AttributeColumnsMergeStrategyBuilder.java index f350c0bcdd..3fe2e8820d 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/columns/merge/AttributeColumnsMergeStrategyBuilder.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/columns/merge/AttributeColumnsMergeStrategyBuilder.java @@ -39,13 +39,15 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.spi.columns.merge; /** *

    This interface is used for providing AttributeColumnsMergeStrategy instances * using the Netbeans Lookup but avoiding the singleton it causes.

    *

    Each AttributeColumnsMergeStrategy should have a AttributeColumnsMergeStrategyBuilder and publish it with @ServiceProvider(service=AttributeColumnsMergeStrategyBuilder.class) annotation.

    - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public interface AttributeColumnsMergeStrategyBuilder { diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/edges/EdgesManipulator.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/edges/EdgesManipulator.java index 02d13feb9f..5f0be357c6 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/edges/EdgesManipulator.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/edges/EdgesManipulator.java @@ -1,4 +1,3 @@ - /* Copyright 2008-2010 Gephi Authors : Eduardo Ramos @@ -40,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.spi.edges; import org.gephi.datalab.spi.ContextMenuItemManipulator; @@ -48,13 +48,15 @@ Development and Distribution License("CDDL") (collectively, the /** * Manipulator for edges. + * + * @author Eduardo Ramos * @see Manipulator - * @author Eduardo Ramos */ -public interface EdgesManipulator extends ContextMenuItemManipulator{ +public interface EdgesManipulator extends ContextMenuItemManipulator { /** * Prepare edges for this action. - * @param edges All selected edges to operate + * + * @param edges All selected edges to operate * @param clickedEdge The right clicked edge of all edges */ void setup(Edge[] edges, Edge clickedEdge); diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/edges/EdgesManipulatorBuilder.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/edges/EdgesManipulatorBuilder.java index bf356f5412..5571f1eb1a 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/edges/EdgesManipulatorBuilder.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/edges/EdgesManipulatorBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.spi.edges; /** @@ -46,7 +47,8 @@ Development and Distribution License("CDDL") (collectively, the * using the Netbeans Lookup but avoiding the singleton it causes.

    *

    Each EdgesManipulator should have a EdgesManipulatorBuilder * with @ServiceProvider(service=EdgesManipulatorBuilder.class) annotation to be public.

    - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public interface EdgesManipulatorBuilder { diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/general/GeneralActionsManipulator.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/general/GeneralActionsManipulator.java index 0e026cd297..25ce715687 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/general/GeneralActionsManipulator.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/general/GeneralActionsManipulator.java @@ -1,4 +1,3 @@ - /* Copyright 2008-2010 Gephi Authors : Eduardo Ramos @@ -40,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.spi.general; import org.gephi.datalab.spi.Manipulator; @@ -48,8 +48,9 @@ Development and Distribution License("CDDL") (collectively, the *

    Manipulator for general actions that don't need to obtain any data before being executed.

    *

    They are added as buttons in Data table toolbar.

    *

    The implementations don't need a builder and can simply be published with @ServiceProvider(service = GeneralActionsManipulator.class) annotation

    + * + * @author Eduardo Ramos * @see Manipulator - * @author Eduardo Ramos */ public interface GeneralActionsManipulator extends Manipulator { diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/general/PluginGeneralActionsManipulator.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/general/PluginGeneralActionsManipulator.java index cc5c0db32e..b098aff8c8 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/general/PluginGeneralActionsManipulator.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/general/PluginGeneralActionsManipulator.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.spi.general; import org.gephi.datalab.spi.Manipulator; @@ -47,8 +48,9 @@ Development and Distribution License("CDDL") (collectively, the *

    This interface defines the same service as GeneralActionsManipulator, with one * only change: the actions are shown in a drop down panel as plugins, * to tell the difference between normal, basic general actions in data laboratory and plugins.

    - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -public interface PluginGeneralActionsManipulator extends Manipulator{ +public interface PluginGeneralActionsManipulator extends Manipulator { } diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/nodes/NodesManipulator.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/nodes/NodesManipulator.java index cb9be1d086..12ed8c8029 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/nodes/NodesManipulator.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/nodes/NodesManipulator.java @@ -1,4 +1,3 @@ - /* Copyright 2008-2010 Gephi Authors : Eduardo Ramos @@ -40,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.spi.nodes; import org.gephi.datalab.spi.ContextMenuItemManipulator; @@ -50,13 +50,15 @@ Development and Distribution License("CDDL") (collectively, the *

    Please note that the methods offered in this service are the same as Visualization API GraphContextMenuItem. * It is possible to reuse actions implementations by adding both ServiceProvider annotations.

    * Manipulator for nodes. + * + * @author Eduardo Ramos * @see Manipulator - * @author Eduardo Ramos */ public interface NodesManipulator extends ContextMenuItemManipulator { /** * Prepare nodes for this action. - * @param nodes All selected nodes to operate + * + * @param nodes All selected nodes to operate * @param clickedNode The right clicked node of all nodes */ void setup(Node[] nodes, Node clickedNode); diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/nodes/NodesManipulatorBuilder.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/nodes/NodesManipulatorBuilder.java index 8832188d8a..6754b0415b 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/nodes/NodesManipulatorBuilder.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/nodes/NodesManipulatorBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.spi.nodes; /** @@ -46,7 +47,8 @@ Development and Distribution License("CDDL") (collectively, the * using the Netbeans Lookup but avoiding the singleton it causes.

    *

    Each NodesManipulator should have a NodesManipulatorBuilder * with @ServiceProvider(service=NodesManipulatorBuilder.class) annotation to be public.

    - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public interface NodesManipulatorBuilder { diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/rows/merge/AttributeRowsMergeStrategy.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/rows/merge/AttributeRowsMergeStrategy.java index d63b72af44..6712262a2c 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/rows/merge/AttributeRowsMergeStrategy.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/rows/merge/AttributeRowsMergeStrategy.java @@ -39,32 +39,36 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.spi.rows.merge; -import org.gephi.data.attributes.api.AttributeColumn; import org.gephi.datalab.spi.Manipulator; -import org.gephi.graph.api.Attributes; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; /** *

    Service for defining strategies for merging a column of rows of a table.

    *

    Has the same interface as a manipulator.

    *

    When a RowsMergeStrategy is executed it must reduce all values to one that should be returned later when getReducedValue is called

    + * + * @author Eduardo Ramos * @see Manipulator - * @author Eduardo Ramos */ -public interface AttributeRowsMergeStrategy extends Manipulator{ +public interface AttributeRowsMergeStrategy extends Manipulator { /** * Prepare column and rows for this merge strategy. * At least 1 row will be set up to merge always. - * @param rows Rows to merge + * + * @param rows Rows to merge * @param selectedRow Main row of the row group to merge - * @param column Column to merge + * @param column Column to merge */ - void setup(Attributes[] rows, Attributes selectedRow, AttributeColumn column); - + void setup(Element[] rows, Element selectedRow, Column column); + /** * This method is always called after the strategy is set up and executed. + * * @return Reduced value from all rows and the column */ Object getReducedValue(); diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/rows/merge/AttributeRowsMergeStrategyBuilder.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/rows/merge/AttributeRowsMergeStrategyBuilder.java index 8c3f9a5a36..e922fdffa9 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/rows/merge/AttributeRowsMergeStrategyBuilder.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/rows/merge/AttributeRowsMergeStrategyBuilder.java @@ -39,13 +39,15 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.spi.rows.merge; /** *

    This interface is used for providing RowsMergeStrategy instances * using the Netbeans Lookup but avoiding the singleton it causes.

    *

    Each RowsMergeStrategy should have a RowsMergeStrategyBuilder and publish it with @ServiceProvider(service=RowsMergeStrategyBuilder.class) annotation.

    - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public interface AttributeRowsMergeStrategyBuilder { diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/values/AttributeValueManipulator.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/values/AttributeValueManipulator.java index 82306b1e93..e93f91a419 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/values/AttributeValueManipulator.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/values/AttributeValueManipulator.java @@ -1,4 +1,3 @@ - /* Copyright 2008-2010 Gephi Authors : Eduardo Ramos @@ -40,23 +39,26 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.spi.values; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeRow; import org.gephi.datalab.spi.Manipulator; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; /** * Manipulator for a single AttributeValue (cells) on right click. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -public interface AttributeValueManipulator extends Manipulator{ +public interface AttributeValueManipulator extends Manipulator { /** * Prepare the AttributeValue data. * AttributeRow and AttributeColumn are provided. - * @param row Row + * + * @param row Row * @param column Column */ - void setup (AttributeRow row, AttributeColumn column); + void setup(Element row, Column column); } diff --git a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/values/AttributeValueManipulatorBuilder.java b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/values/AttributeValueManipulatorBuilder.java index 9c0242ad80..f1736b536d 100644 --- a/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/values/AttributeValueManipulatorBuilder.java +++ b/modules/DataLaboratoryAPI/src/main/java/org/gephi/datalab/spi/values/AttributeValueManipulatorBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.spi.values; /** @@ -46,7 +47,8 @@ Development and Distribution License("CDDL") (collectively, the * using the Netbeans Lookup but avoiding the singleton it causes.

    *

    Each AttributeValueManipulator should have a AttributeValueManipulatorBuilder * with @ServiceProvider(service=AttributeValueManipulatorBuilder.class) annotation to be public.

    - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public interface AttributeValueManipulatorBuilder { diff --git a/modules/DataLaboratoryAPI/src/main/nbm/manifest.mf b/modules/DataLaboratoryAPI/src/main/nbm/manifest.mf index 76d3dd3456..efd6683035 100644 --- a/modules/DataLaboratoryAPI/src/main/nbm/manifest.mf +++ b/modules/DataLaboratoryAPI/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/datalab/api/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi Core +OpenIDE-Module-Name: Data Laboratory API \ No newline at end of file diff --git a/modules/DataLaboratoryAPI/src/main/nbm/module.xml b/modules/DataLaboratoryAPI/src/main/nbm/module.xml deleted file mode 100644 index 91797546f7..0000000000 --- a/modules/DataLaboratoryAPI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle.properties index 292e73c9d0..5c2b656c61 100644 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle.properties +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle.properties @@ -1,7 +1,4 @@ -OpenIDE-Module-Display-Category=Gephi Core -OpenIDE-Module-Long-Description=\ - API/SPI for interacting with the Data Laboratory and extending it. -OpenIDE-Module-Name=Data Laboratory API +OpenIDE-Module-Long-Description=API/SPI for interacting with the Data Laboratory and extending it. OpenIDE-Module-Short-Description=API/SPI for interacting with the Data Laboratory and extending it DataLaboratoryHelper.ui.okButton.text=Ok SettingsPanel.title={0} diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_ar.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_ca.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_ca.properties new file mode 100644 index 0000000000..5c1fcf61e0 --- /dev/null +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_ca.properties @@ -0,0 +1,4 @@ +OpenIDE-Module-Long-Description=API/SPI per interactuar i expandir el Laboratori de Dades +OpenIDE-Module-Short-Description=API/SPI per interactuar i expandir el Laboratori de Dades +DataLaboratoryHelper.ui.okButton.text=Ok +SettingsPanel.title={0} diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_cs.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_cs.properties index d6d99b458d..f2ca6a9180 100644 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_cs.properties +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_cs.properties @@ -1,15 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-28 21\:31+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=API/SPI pro interakci s datovou laborato\u0159\u00ed a jej\u00edm roz\u0161i\u0159ov\u00e1n\u00edm - -OpenIDE-Module-Short-Description=API/SPI pro interakci s datovou laborato\u0159\u00ed a jej\u00edm roz\u0161i\u0159ov\u00e1n\u00edm - -DataLaboratoryHelper.ui.okButton.text=Ok - -SettingsPanel.title={0} +OpenIDE-Module-Long-Description=API/SPI pro interakci s datovou laborato\u0159ν a jejνm roz\u0161i\u0159ovαnνm +OpenIDE-Module-Short-Description=API/SPI pro interakci s datovou laborato\u0159ν a jejνm roz\u0161i\u0159ovαnνm +DataLaboratoryHelper.ui.okButton.text=Ok +SettingsPanel.title={0} diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_de.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_de.properties new file mode 100644 index 0000000000..98664c68ae --- /dev/null +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_de.properties @@ -0,0 +1,4 @@ +OpenIDE-Module-Long-Description=API/SPI zur Interaktion mit und Erweiterung des Datenlabors. +OpenIDE-Module-Short-Description=API/SPI zur Interaktion mit und Erweiterung des Datenlabors +DataLaboratoryHelper.ui.okButton.text=Ok +SettingsPanel.title={0} diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_es.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_es.properties index 0a8e0e368d..0baf24f0d2 100644 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_es.properties +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_es.properties @@ -1,15 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:29+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - OpenIDE-Module-Long-Description=API/SPI para interactuar con el Laboratorio de Datos y extenderlo. - -OpenIDE-Module-Short-Description=API/SPI para interactuar con el Laboratorio de Datos y extenderlo. - +OpenIDE-Module-Short-Description=API/SPI para interactuar con el Laboratorio de Datos y ampliarlo DataLaboratoryHelper.ui.okButton.text=Ok - SettingsPanel.title={0} diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_fr.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_fr.properties index c5cea5a0ad..95a2824d2a 100644 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_fr.properties +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_fr.properties @@ -1,15 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:29+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API/SPI pour interagir avec le Data Laboratory et l'\u00e9tendre - -OpenIDE-Module-Short-Description=API/SPI pour interagir avec le Data Laboratory et l'\u00e9tendre - -DataLaboratoryHelper.ui.okButton.text=Ok - -SettingsPanel.title={0} +OpenIDE-Module-Long-Description=API/SPI pour interagir avec le Data Laboratory et l'ιtendre +OpenIDE-Module-Short-Description=API/SPI pour interagir avec le Data Laboratory et l'ιtendre +DataLaboratoryHelper.ui.okButton.text=Ok +SettingsPanel.title={0} diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_he.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_he.properties new file mode 100644 index 0000000000..bb92c28e57 --- /dev/null +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_he.properties @@ -0,0 +1,4 @@ +OpenIDE-Module-Long-Description=\u05de\u05e0\u05e9\u05e7 \u05ea\u05d5\u05db\u05e0\u05d4 (API/SPI) \u05dc\u05d4\u05ea\u05de\u05de\u05e9\u05e7\u05d5\u05ea \u05e2\u05dd \u05de\u05e2\u05d1\u05d3\u05ea \u05d4\u05ea\u05d5\u05e0\u05d9\u05dd \u05d5\u05dc\u05d4\u05e8\u05d7\u05d9\u05d1\u05d4 +OpenIDE-Module-Short-Description=\u05de\u05e0\u05e9\u05e7 \u05ea\u05d5\u05db\u05e0\u05d4 (API/SPI) \u05dc\u05d4\u05ea\u05de\u05de\u05e9\u05e7\u05d5\u05ea \u05e2\u05dd \u05de\u05e2\u05d1\u05d3\u05ea \u05d4\u05ea\u05d5\u05e0\u05d9\u05dd \u05d5\u05dc\u05d4\u05e8\u05d7\u05d9\u05d1\u05d4 +DataLaboratoryHelper.ui.okButton.text=\u05d0\u05e9\u05e8 +SettingsPanel.title={0} diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_hu.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_hu.properties new file mode 100644 index 0000000000..fecf823c4b --- /dev/null +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_hu.properties @@ -0,0 +1,6 @@ + + +DataLaboratoryHelper.ui.okButton.text=Ok +SettingsPanel.title={0} +OpenIDE-Module-Short-Description=API/SPI az Adatlaborat\u00F3riummal val\u00F3 interakci\u00F3hoz \u00E9s annak b\u0151v\u00EDt\u00E9s\u00E9hez +OpenIDE-Module-Long-Description=API/SPI az Adatlaborat\u00F3riummal val\u00F3 interakci\u00F3hoz \u00E9s annak b\u0151v\u00EDt\u00E9s\u00E9hez. diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_it.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_it.properties new file mode 100644 index 0000000000..85f0157707 --- /dev/null +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_it.properties @@ -0,0 +1,4 @@ +OpenIDE-Module-Long-Description=API/SPI per interagire con il Data Laboratory o per estenderlo. +OpenIDE-Module-Short-Description=API/SPI per interagire con il Data Laboratory o per estenderlo +DataLaboratoryHelper.ui.okButton.text=Ok +SettingsPanel.title={0} diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_ja.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_ja.properties index 369e10b3ae..05e2da58ad 100644 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_ja.properties +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_ja.properties @@ -1,15 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-25 16\:22+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u30c7\u30fc\u30bf\u5de5\u623f\u3068\u306e\u76f8\u4e92\u4f5c\u7528\u3068\u305d\u308c\u3092\u62e1\u5f35\u3059\u308b\u305f\u3081\u306eAPI / SPI\u3002 - -OpenIDE-Module-Short-Description=\u30c7\u30fc\u30bf\u5de5\u623f\u3068\u306e\u76f8\u4e92\u4f5c\u7528\u3068\u305d\u308c\u3092\u62e1\u5f35\u3059\u308b\u305f\u3081\u306eAPI / SPI\u3002 - -DataLaboratoryHelper.ui.okButton.text=Ok - -SettingsPanel.title={0} +OpenIDE-Module-Long-Description=\u30c7\u30fc\u30bf\u5de5\u623f\u3068\u306e\u76f8\u4e92\u4f5c\u7528\u3068\u305d\u308c\u3092\u62e1\u5f35\u3059\u308b\u305f\u3081\u306eAPI / SPI\u3002 +OpenIDE-Module-Short-Description=\u30c7\u30fc\u30bf\u5de5\u623f\u3068\u306e\u76f8\u4e92\u4f5c\u7528\u3068\u305d\u308c\u3092\u62e1\u5f35\u3059\u308b\u305f\u3081\u306eAPI / SPI\u3002 +DataLaboratoryHelper.ui.okButton.text=Ok +SettingsPanel.title={0} diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_nl.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_nl.properties new file mode 100644 index 0000000000..4cadcbd519 --- /dev/null +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_nl.properties @@ -0,0 +1,4 @@ +OpenIDE-Module-Long-Description=API/SPI for interacting with the Data Laboratory and extending it. +OpenIDE-Module-Short-Description=API/SPI for interacting with the Data Laboratory and extending it +DataLaboratoryHelper.ui.okButton.text=OK +SettingsPanel.title={0} diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_pt_BR.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_pt_BR.properties index 4f26d35eba..9fcbfbc580 100644 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_pt_BR.properties +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_pt_BR.properties @@ -1,15 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 23\:42+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API/SPI para interagir com o Laborat\u00f3rio de Dados e estend\u00ea-lo. - -OpenIDE-Module-Short-Description=API/SPI para interagir com o Laborat\u00f3rio de Dados e estend\u00ea-lo - -DataLaboratoryHelper.ui.okButton.text=Ok - -SettingsPanel.title={0} +OpenIDE-Module-Long-Description=API/SPI para interagir com o Laboratσrio de Dados e estendκ-lo. +OpenIDE-Module-Short-Description=API/SPI para interagir com o Laboratσrio de Dados e estendκ-lo +DataLaboratoryHelper.ui.okButton.text=Ok +SettingsPanel.title={0} diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_ro.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_ro.properties new file mode 100644 index 0000000000..3390b9130c --- /dev/null +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_ro.properties @@ -0,0 +1,6 @@ + + +OpenIDE-Module-Long-Description=API/SPI pentru interac\u021Biunea cu Laboratorul de date \u0219i extensiile lui. +OpenIDE-Module-Short-Description=API/SPI pentru interac\u021Biunea cu Laboratorul de date \u0219i extensiile lui +DataLaboratoryHelper.ui.okButton.text=Ok +SettingsPanel.title={0} diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_ru.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_ru.properties index a96ccd17c7..e754f1127e 100644 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_ru.properties +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_ru.properties @@ -1,16 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 15\:03+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=API/SPI \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0435\u0439 \u0414\u0430\u043d\u043d\u044b\u0445 - -OpenIDE-Module-Short-Description=API/SPI \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0435\u0439 \u0414\u0430\u043d\u043d\u044b\u0445 - -DataLaboratoryHelper.ui.okButton.text=\u041e\u043a - -SettingsPanel.title={0} +OpenIDE-Module-Long-Description=API/SPI \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0435\u0439 \u0414\u0430\u043d\u043d\u044b\u0445 +OpenIDE-Module-Short-Description=API/SPI \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0435\u0439 \u0414\u0430\u043d\u043d\u044b\u0445 +DataLaboratoryHelper.ui.okButton.text=\u041e\u043a +SettingsPanel.title={0} diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_th.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_tr.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_tr.properties new file mode 100644 index 0000000000..ba6c320098 --- /dev/null +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_tr.properties @@ -0,0 +1,4 @@ +OpenIDE-Module-Long-Description=API/SPI for interacting with the Data Laboratory and extending it. +OpenIDE-Module-Short-Description=API/SPI for interacting with the Data Laboratory and extending it +DataLaboratoryHelper.ui.okButton.text=Tamam +SettingsPanel.title={0} diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_zh_CN.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_zh_CN.properties index 05b0fed49b..fcd659a3dd 100644 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_zh_CN.properties +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_zh_CN.properties @@ -1,14 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:20+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u4e0e\u5b9e\u9a8c\u6570\u636e\u4ea4\u4e92\u7684\u4ee5\u53ca\u6269\u5c55\u7684API/SPI - +OpenIDE-Module-Long-Description=\u4E0E\u6570\u636E\u5B9E\u9A8C\u5BA4\u4E92\u52A8\u5E76\u6269\u5C55\u5B83\u7684 API/SPI\u3002 OpenIDE-Module-Short-Description=\u4e0e\u5b9e\u9a8c\u6570\u636e\u4ea4\u4e92\u7684\u4ee5\u53ca\u6269\u5c55\u7684API/SPI - DataLaboratoryHelper.ui.okButton.text=\u597d - SettingsPanel.title={0} diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_zh_TW.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_zh_TW.properties new file mode 100644 index 0000000000..8cf04b167c --- /dev/null +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/Bundle_zh_TW.properties @@ -0,0 +1,4 @@ +OpenIDE-Module-Long-Description=\u5728\u8cc7\u6599\u5be6\u9a57\u5ba4\u4e2d\u5ef6\u4f38\u4f7f\u7528 API/SPI +OpenIDE-Module-Short-Description=\u5728\u8cc7\u6599\u5be6\u9a57\u5ba4\u4e2d\u5ef6\u4f38\u4f7f\u7528 API/SPI +DataLaboratoryHelper.ui.okButton.text=\u78ba\u5b9a +SettingsPanel.title={0} diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/cs.po b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/cs.po deleted file mode 100644 index 8678a82229..0000000000 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/cs.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-28 21:31+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI pro interakci s datovou laboratoΕ™Γ­ a jejΓ­m rozΕ‘iΕ™ovΓ‘nΓ­m" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI pro interakci s datovou laboratoΕ™Γ­ a jejΓ­m rozΕ‘iΕ™ovΓ‘nΓ­m" - -msgid "DataLaboratoryHelper.ui.okButton.text" -msgstr "Ok" - -msgid "SettingsPanel.title" -msgstr "{0}" diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/es.po b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/es.po deleted file mode 100644 index a428911d8e..0000000000 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/es.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:29+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI para interactuar con el Laboratorio de Datos y extenderlo." - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI para interactuar con el Laboratorio de Datos y extenderlo." - -msgid "DataLaboratoryHelper.ui.okButton.text" -msgstr "Ok" - -msgid "SettingsPanel.title" -msgstr "{0}" diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/fr.po b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/fr.po deleted file mode 100644 index fdc5f42d4e..0000000000 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/fr.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:29+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI pour interagir avec le Data Laboratory et l'Γ©tendre" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI pour interagir avec le Data Laboratory et l'Γ©tendre" - -msgid "DataLaboratoryHelper.ui.okButton.text" -msgstr "Ok" - -msgid "SettingsPanel.title" -msgstr "{0}" diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/ja.po b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/ja.po deleted file mode 100644 index 6ca2cdb18c..0000000000 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/ja.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-25 16:22+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "データε·₯房とγη›ΈδΊ’δ½œη”¨γ¨γγ‚Œγ‚’ζ‹‘εΌ΅γ™γ‚‹γŸγ‚γAPI / SPI。" - -msgid "OpenIDE-Module-Short-Description" -msgstr "データε·₯房とγη›ΈδΊ’δ½œη”¨γ¨γγ‚Œγ‚’ζ‹‘εΌ΅γ™γ‚‹γŸγ‚γAPI / SPI。" - -msgid "DataLaboratoryHelper.ui.okButton.text" -msgstr "Ok" - -msgid "SettingsPanel.title" -msgstr "{0}" diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/org-gephi-datalab-api.pot b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/org-gephi-datalab-api.pot deleted file mode 100644 index b7f9297c91..0000000000 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/org-gephi-datalab-api.pot +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI for interacting with the Data Laboratory and extending it." - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI for interacting with the Data Laboratory and extending it" - -msgid "DataLaboratoryHelper.ui.okButton.text" -msgstr "Ok" - -msgid "SettingsPanel.title" -msgstr "{0}" diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/package.html b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/package.html index 6c3160dd32..bee1d118b6 100644 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/package.html +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/package.html @@ -1,7 +1,12 @@ - + - - Data Laboratory API, all capabilites are exposed through various controllers. + + org.gephi.datalab.api + + +

    + Data Laboratory API, all capabilites are exposed through various controllers. +

    Use the various controllers to perform the same actions programatically as the Data Laboratory UI is doing. Use Lookup to find diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/pt_BR.po b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/pt_BR.po deleted file mode 100644 index 4a7f8ae9c3..0000000000 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/pt_BR.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 23:42+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI para interagir com o LaboratΓ³rio de Dados e estendΓͺ-lo." - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI para interagir com o LaboratΓ³rio de Dados e estendΓͺ-lo" - -msgid "DataLaboratoryHelper.ui.okButton.text" -msgstr "Ok" - -msgid "SettingsPanel.title" -msgstr "{0}" diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/ru.po b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/ru.po deleted file mode 100644 index eb5c28acf3..0000000000 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/ru.po +++ /dev/null @@ -1,32 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 15:03+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π›Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΈΠ΅ΠΉ Π”Π°Π½Π½Ρ‹Ρ…" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с Π›Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΈΠ΅ΠΉ Π”Π°Π½Π½Ρ‹Ρ…" - -msgid "DataLaboratoryHelper.ui.okButton.text" -msgstr "Ок" - -msgid "SettingsPanel.title" -msgstr "{0}" diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/zh_CN.po b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/zh_CN.po deleted file mode 100644 index 93e232ef03..0000000000 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/api/zh_CN.po +++ /dev/null @@ -1,30 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:20+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "与εžιͺŒζ•°ζδΊ€δΊ’ηš„δ»₯εŠζ‰©ε±•ηš„API/SPI" - -msgid "OpenIDE-Module-Short-Description" -msgstr "与εžιͺŒζ•°ζδΊ€δΊ’ηš„δ»₯εŠζ‰©ε±•ηš„API/SPI" - -msgid "DataLaboratoryHelper.ui.okButton.text" -msgstr "ε₯½" - -msgid "SettingsPanel.title" -msgstr "{0}" diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle.properties index 5f2aa2078c..301341cefb 100644 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle.properties +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle.properties @@ -1,5 +1,2 @@ -OpenIDE-Module-Display-Category=Plugin -OpenIDE-Module-Name=Data Laboratory Plugin - Group.nodeCount.label=Group ({0} nodes) OpenIDE-Module-Short-Description=Implementation of Data Laboratory API and some manipulators diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_ar.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_ca.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_ca.properties new file mode 100644 index 0000000000..edc7b9bebc --- /dev/null +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_ca.properties @@ -0,0 +1,2 @@ +Group.nodeCount.label=Group ({0} nodes) +OpenIDE-Module-Short-Description=Implementaciσ de l\u2019API del Laboratori de Dades i alguns manipuladors diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_cs.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_cs.properties index 00fdb47044..003734387d 100644 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_cs.properties +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_cs.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-28 21\:30+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -Group.nodeCount.label=Skupina ({0} uzl\u016f) - -OpenIDE-Module-Short-Description=Zaveden\u00ed API datov\u00e9 laborato\u0159e a n\u011bkter\u00fdch manipul\u00e1tor\u016f +Group.nodeCount.label=Skupina ({0} uzl\u016f) +OpenIDE-Module-Short-Description=Zavedenν API datovι laborato\u0159e a n\u011bkterύch manipulαtor\u016f diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_de.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_de.properties new file mode 100644 index 0000000000..ea46a05be7 --- /dev/null +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_de.properties @@ -0,0 +1,2 @@ +Group.nodeCount.label=Gruppieren ({0} Knoten) +OpenIDE-Module-Short-Description=Implementierung der Datenlabor API und einiger Operatoren diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_es.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_es.properties index 4818606300..b322de2e50 100644 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_es.properties +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_es.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:29+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -Group.nodeCount.label=Grupo ({0} nodos) - -OpenIDE-Module-Short-Description=Implementaci\u00f3n de la API del Laboratorio de Datos y algunos manipuladores +Group.nodeCount.label=Grupo ({0} nodos) +OpenIDE-Module-Short-Description=Implementaciσn de la API del Laboratorio de Datos y algunos manipuladores diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_fr.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_fr.properties index 1c3eabf9b3..61ab216723 100644 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_fr.properties +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_fr.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:29+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -Group.nodeCount.label=Groupe ({0} noeuds) - +Group.nodeCount.label=Groupe ({0} n\u0153uds) OpenIDE-Module-Short-Description=Implementation du Data Laboratory API et quelques manipulateurs diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_he.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_he.properties new file mode 100644 index 0000000000..a6d96b02cd --- /dev/null +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_he.properties @@ -0,0 +1,2 @@ +Group.nodeCount.label=\u05e7\u05d1\u05d5\u05e6\u05d4 (\u05e6\u05de\u05ea\u05d9 {0}) +OpenIDE-Module-Short-Description=\u05d9\u05d9\u05e9\u05d5\u05dd \u05de\u05e0\u05e9\u05e7 \u05e0\u05e2\u05d1\u05d3\u05ea \u05d4\u05e0\u05ea\u05d5\u05e0\u05d9\u05dd \u05d5\u05de\u05ea\u05e4\u05dc\u05dc\u05d9\u05dd \u05e9\u05d5\u05e0\u05d9\u05dd diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_hu.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_hu.properties new file mode 100644 index 0000000000..259eb35cb7 --- /dev/null +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_hu.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Short-Description=A Data Laboratory API \u00E9s n\u00E9h\u00E1ny manipul\u00E1tor megval\u00F3s\u00EDt\u00E1sa +Group.nodeCount.label=Csoport ({0} csom\u00F3pont) diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_it.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_it.properties new file mode 100644 index 0000000000..4f0b26369b --- /dev/null +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_it.properties @@ -0,0 +1,2 @@ +Group.nodeCount.label=Gruppo ({0} nodi) +OpenIDE-Module-Short-Description=Implementazione della Data Laboratory API e di alcuni manipulators diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_ja.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_ja.properties index d5662cfd15..9cf37605b9 100644 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_ja.properties +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_ja.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-27 03\:09+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -Group.nodeCount.label=\u30b0\u30eb\u30fc\u30d7 ({0}\u30ce\u30fc\u30c9) - -OpenIDE-Module-Short-Description=\u30c7\u30fc\u30bf\u30e9\u30dcAPI\u3068\u3044\u304f\u3064\u304b\u306e\u30de\u30cb\u30d4\u30e5\u30ec\u30fc\u30bf\u306e\u5b9f\u88c5 +Group.nodeCount.label=\u30b0\u30eb\u30fc\u30d7 ({0}\u30ce\u30fc\u30c9) +OpenIDE-Module-Short-Description=\u30c7\u30fc\u30bf\u30e9\u30dcAPI\u3068\u3044\u304f\u3064\u304b\u306e\u30de\u30cb\u30d4\u30e5\u30ec\u30fc\u30bf\u306e\u5b9f\u88c5 diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_nl.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_nl.properties new file mode 100644 index 0000000000..17cd9a876a --- /dev/null +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_nl.properties @@ -0,0 +1,2 @@ +Group.nodeCount.label=Groeperen ({0} knopen) +OpenIDE-Module-Short-Description=Implementation of Data Laboratory API and some manipulators diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_pt.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_pt.properties new file mode 100644 index 0000000000..0936ab5897 --- /dev/null +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_pt.properties @@ -0,0 +1,2 @@ +Group.nodeCount.label=Grupo ({0} n\u00F3s) +OpenIDE-Module-Short-Description=Implementa\u00E7\u00E3o de API de Laborat\u00F3rio de Dados e alguns manipuladores diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_pt_BR.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_pt_BR.properties index 276982b922..50d6b0d30f 100644 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_pt_BR.properties +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_pt_BR.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 23\:41+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -Group.nodeCount.label=Grupo ({0} n\u00f3s) - -OpenIDE-Module-Short-Description=Implementa\u00e7\u00e3o de API de Laborat\u00f3rio de Dados e alguns manipuladores +Group.nodeCount.label=Grupo ({0} nσs) +OpenIDE-Module-Short-Description=Implementaηγo de API de Laboratσrio de Dados e alguns manipuladores diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_ro.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_ro.properties new file mode 100644 index 0000000000..a090a50749 --- /dev/null +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_ro.properties @@ -0,0 +1,4 @@ + + +Group.nodeCount.label=Grupeaz\u0103 ({0} noduri) +OpenIDE-Module-Short-Description=Implementarea API-ului Laboratorului de date \u0219i a unor manipulatori diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_ru.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_ru.properties index bb7e4edf76..792aad5f37 100644 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_ru.properties +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_ru.properties @@ -1,12 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 15\:06+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -Group.nodeCount.label=\u0413\u0440\u0443\u043f\u043f\u0430 (\u0447\u0438\u0441\u043b\u043e \u0443\u0437\u043b\u043e\u0432 {0}) - -OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f API \u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0438 \u0414\u0430\u043d\u043d\u044b\u0445 \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 +Group.nodeCount.label=\u0413\u0440\u0443\u043f\u043f\u0430 (\u0447\u0438\u0441\u043b\u043e \u0443\u0437\u043b\u043e\u0432 {0}) +OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f API \u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0438 \u0414\u0430\u043d\u043d\u044b\u0445 \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_th.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_tr.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_tr.properties new file mode 100644 index 0000000000..56c98ef6b5 --- /dev/null +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_tr.properties @@ -0,0 +1,2 @@ +Group.nodeCount.label=Grup ({0} dό\u011fόm) +OpenIDE-Module-Short-Description=Implementation of Data Laboratory API and some manipulators diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_uk.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_uk.properties new file mode 100644 index 0000000000..67fa4ec93a --- /dev/null +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_uk.properties @@ -0,0 +1,2 @@ +Group.nodeCount.label=\u0413\u0440\u0443\u043F\u0430 ({0} \u0432\u0443\u0437\u043B\u0456\u0432) +OpenIDE-Module-Short-Description=\u0412\u043F\u0440\u043E\u0432\u0430\u0434\u0436\u0435\u043D\u043D\u044F Data Laboratory API \u0442\u0430 \u0434\u0435\u044F\u043A\u0438\u0445 \u043C\u0430\u043D\u0456\u043F\u0443\u043B\u044F\u0442\u043E\u0440\u0456\u0432 diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_zh_CN.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_zh_CN.properties index 4ff1537638..fdfadc8419 100644 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_zh_CN.properties +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_zh_CN.properties @@ -1,10 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:20+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -Group.nodeCount.label=\u7ec4\uff08{0}\u8282\u70b9\uff09 - -OpenIDE-Module-Short-Description=\u6570\u636e\u5b9e\u9a8c\u5ba4API\u5b89\u88c5\u542f\u7528\u53ca\u4e00\u4e9b\u64cd\u4f5c +Group.nodeCount.label=\u7ec4\uff08{0}\u8282\u70b9\uff09 +OpenIDE-Module-Short-Description=\u6570\u636e\u5b9e\u9a8c\u5ba4API\u5b89\u88c5\u542f\u7528\u53ca\u4e00\u4e9b\u64cd\u4f5c diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_zh_TW.properties b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_zh_TW.properties new file mode 100644 index 0000000000..4d542b0448 --- /dev/null +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/Bundle_zh_TW.properties @@ -0,0 +1,2 @@ +Group.nodeCount.label=\u7fa4\u7d44 ({0} \u7bc0\u9ede) +OpenIDE-Module-Short-Description=\u5efa\u7acb\u8cc7\u6599\u5be6\u9a57\u5ba4 API \u53ca\u8cc7\u6599\u8655\u7406\u529f\u80fd diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/cs.po b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/cs.po deleted file mode 100644 index 903abe669f..0000000000 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/cs.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-28 21:30+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "Group.nodeCount.label" -msgstr "Skupina ({0} uzlΕ―)" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ZavedenΓ­ API datovΓ© laboratoΕ™e a nΔ›kterΓ½ch manipulΓ‘torΕ―" diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/es.po b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/es.po deleted file mode 100644 index 2e2a0bd994..0000000000 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/es.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:29+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "Group.nodeCount.label" -msgstr "Grupo ({0} nodos)" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplementaciΓ³n de la API del Laboratorio de Datos y algunos manipuladores" diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/fr.po b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/fr.po deleted file mode 100644 index ee116a4b85..0000000000 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/fr.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:29+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "Group.nodeCount.label" -msgstr "Groupe ({0} noeuds)" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implementation du Data Laboratory API et quelques manipulateurs" diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/ja.po b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/ja.po deleted file mode 100644 index 580b37f2f8..0000000000 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-27 03:09+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "Group.nodeCount.label" -msgstr "グループ ({0}γƒŽγƒΌγƒ‰)" - -msgid "OpenIDE-Module-Short-Description" -msgstr "γƒ‡γƒΌγ‚Ώγƒ©γƒœAPIといく぀かγγƒžγƒ‹γƒ”γƒ₯レータγεŸθ£…" diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/org-gephi-datalab-impl.pot b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/org-gephi-datalab-impl.pot deleted file mode 100644 index 0889598b1b..0000000000 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/org-gephi-datalab-impl.pot +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "Group.nodeCount.label" -msgstr "Group ({0} nodes)" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implementation of Data Laboratory API and some manipulators" diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/pt_BR.po b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/pt_BR.po deleted file mode 100644 index 01976e0975..0000000000 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/pt_BR.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 23:41+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "Group.nodeCount.label" -msgstr "Grupo ({0} nΓ³s)" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplementaΓ§Γ£o de API de LaboratΓ³rio de Dados e alguns manipuladores" diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/ru.po b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/ru.po deleted file mode 100644 index 1acddfefb3..0000000000 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/ru.po +++ /dev/null @@ -1,26 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 15:06+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "Group.nodeCount.label" -msgstr "Π“Ρ€ΡƒΠΏΠΏΠ° (число ΡƒΠ·Π»ΠΎΠ² {0})" - -msgid "OpenIDE-Module-Short-Description" -msgstr "РСализация API Π›Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΈΠΈ Π”Π°Π½Π½Ρ‹Ρ… ΠΈ нСсколько ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ²" diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/zh_CN.po b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/zh_CN.po deleted file mode 100644 index 3b4a3ae53d..0000000000 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/impl/zh_CN.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:20+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "Group.nodeCount.label" -msgstr "η»„οΌˆ{0}θŠ‚η‚ΉοΌ‰" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζ•°ζεžιͺŒε€APIε‰θ£…ε―η”¨εŠδΈ€δΊ›ζ“δ½œ" diff --git a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/spi/package.html b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/spi/package.html index 730fe81d43..e1d0332a2a 100644 --- a/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/spi/package.html +++ b/modules/DataLaboratoryAPI/src/main/resources/org/gephi/datalab/spi/package.html @@ -1,6 +1,11 @@ - + - - Interfaces for creating data laboratory plugins. + + org.gephi.datalab.spi + + +

    + Interfaces for creating data laboratory plugins. +

    diff --git a/modules/DataLaboratoryPlugin/pom.xml b/modules/DataLaboratoryPlugin/pom.xml index dec154e65f..3148ac5cc0 100644 --- a/modules/DataLaboratoryPlugin/pom.xml +++ b/modules/DataLaboratoryPlugin/pom.xml @@ -4,13 +4,12 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. - org.gephi datalab-plugin - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm DataLaboratoryPlugin @@ -18,15 +17,27 @@ ${project.groupId} - data-attributes-api + datalab-api ${project.groupId} - datalab-api + graph-api ${project.groupId} - graph-api + project-api + + + ${project.groupId} + io-importer-api + + + ${project.groupId} + desktop-icons + + + ${project.groupId} + desktop-project ${project.groupId} @@ -34,7 +45,7 @@ ${project.groupId} - tools-api + desktop-attributes ${project.groupId} @@ -66,26 +77,26 @@ org.netbeans.api - org-openide-util-lookup + org-openide-util-ui org.netbeans.api - org-openide-windows + org-openide-util-lookup - ${project.groupId} - visualization + org.netbeans.api + org-openide-windows - ${project.groupId} - lib.validation + org.netbeans.api + org-openide-awt - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/GeneralColumnsAndRowChooser.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/GeneralColumnsAndRowChooser.java index 8b6c86811c..8b80da0a4b 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/GeneralColumnsAndRowChooser.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/GeneralColumnsAndRowChooser.java @@ -39,33 +39,39 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators; import org.gephi.datalab.plugin.manipulators.nodes.CopyNodeDataToOtherNodes; +import org.gephi.graph.api.Element; /** * Interface in common for choosing columns to manipulate. * Used to be able to get/set the columns to copy and row (node or edge) to user in the GeneralChooseColumnsAndRowUI. - * @author Eduardo Ramos + * + * @author Eduardo Ramos * @see CopyNodeDataToOtherNodes */ -public interface GeneralColumnsAndRowChooser extends GeneralColumnsChooser{ +public interface GeneralColumnsAndRowChooser extends GeneralColumnsChooser { /** * Provide rows (nodes or edges) to show in the GeneralChooseColumnsAndRowUI to be selected or not. + * * @return Nodes or edges set to select one */ - Object[] getRows(); + Element[] getRows(); /** * Provide initially selected node or edge in the GeneralChooseColumnsAndRowUI + * * @return Initially selected node or edge */ - Object getRow(); + Element getRow(); /** * The GeneralChooseColumnsAndRowUI will use this method to set the row to finally manipulate, after the GeneralChooseColumnsAndRowUI is closed. + * * @param row Selected node or edge depending on the manipulator */ - void setRow(Object row); + void setRow(Element row); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/GeneralColumnsChooser.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/GeneralColumnsChooser.java index fe65a05750..f7df4f4011 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/GeneralColumnsChooser.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/GeneralColumnsChooser.java @@ -39,34 +39,39 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators; -import org.gephi.data.attributes.api.AttributeColumn; import org.gephi.datalab.plugin.manipulators.nodes.ClearNodesData; +import org.gephi.graph.api.Column; /** * Interface in common for choosing columns to manipulate. * Used to be able to get/set the columns to clear in the GeneralChooseColumnsUI. - * @author Eduardo Ramos + * + * @author Eduardo Ramos * @see ClearNodesData */ -public interface GeneralColumnsChooser{ +public interface GeneralColumnsChooser { /** * Provide columns to show in the UI to be selected or not. * Normally provide all table columns that can be manipulated. + * * @return Columns to show in the GeneralChooseColumnsUI */ - AttributeColumn[] getColumns(); + Column[] getColumns(); /** * The GeneralChooseColumnsUI will use this method to set the columns to finally manipulate, after the GeneralChooseColumnsUI is closed. + * * @param columnsToClearData Columns to manipulate */ - void setColumns(AttributeColumn[] columnsToClearData); + void setColumns(Column[] columnsToClearData); /** * Provide title for the GeneralChooseColumnsUI. + * * @return Title name */ String getName(); diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ClearColumnData.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ClearColumnData.java index 364508d7b3..7429b900a9 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ClearColumnData.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ClearColumnData.java @@ -1,102 +1,113 @@ /* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. + Copyright 2008-2010 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns; import java.awt.Image; import javax.swing.JOptionPane; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.api.datatables.DataTablesController; import org.gephi.datalab.spi.columns.AttributeColumnsManipulator; import org.gephi.datalab.spi.columns.AttributeColumnsManipulatorUI; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Table; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * AttributeColumnsManipulator that clears all data of a AttributeColumn of a AttributeTable. - * Only allows to clear columns with DATA AttributeOrigin or the label column of nodes and edges table. - * @author Eduardo Ramos + * AttributeColumnsManipulator that clears all data of a Column of a AttributeTable. Only allows to clear columns with DATA AttributeOrigin or the label column of nodes and edges table. + * + * @author Eduardo Ramos */ @ServiceProvider(service = AttributeColumnsManipulator.class) public class ClearColumnData implements AttributeColumnsManipulator { - public void execute(AttributeTable table, AttributeColumn column) { - if (JOptionPane.showConfirmDialog(null, NbBundle.getMessage(ClearColumnData.class, "ClearColumnData.confirmation.message",column.getTitle()), getName(), JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { + @Override + public void execute(Table table, Column column) { + if (JOptionPane.showConfirmDialog(null, + NbBundle.getMessage(ClearColumnData.class, "ClearColumnData.confirmation.message", column.getTitle()), + getName(), JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { Lookup.getDefault().lookup(AttributeColumnsController.class).clearColumnData(table, column); Lookup.getDefault().lookup(DataTablesController.class).selectTable(table); } } + @Override public String getName() { return NbBundle.getMessage(ClearColumnData.class, "ClearColumnData.name"); } + @Override public String getDescription() { return ""; } - public boolean canManipulateColumn(AttributeTable table, AttributeColumn column) { + @Override + public boolean canManipulateColumn(Table table, Column column) { boolean result; AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); - result=ac.canClearColumnData(column); - return result&&ac.getTableRowsCount(table)>0;//Also make sure that there is at least 1 row + result = ac.canClearColumnData(column); + return result && ac.getTableRowsCount(table) > 0;//Also make sure that there is at least 1 row } - public AttributeColumnsManipulatorUI getUI(AttributeTable table,AttributeColumn column) { + @Override + public AttributeColumnsManipulatorUI getUI(Table table, Column column) { return null; } + @Override public int getType() { return 0; } + @Override public int getPosition() { return 100; } + @Override public Image getIcon() { - return ImageUtilities.loadImage("org/gephi/datalab/plugin/manipulators/resources/table-delete-column.png"); + return ImageUtilities.loadImage("DataLaboratoryPlugin/table-clear-column.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ColumnValuesFrequency.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ColumnValuesFrequency.java index 10da23e50c..08814d9460 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ColumnValuesFrequency.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ColumnValuesFrequency.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns; import java.awt.Dimension; @@ -49,12 +50,13 @@ Development and Distribution License("CDDL") (collectively, the import java.util.Collections; import java.util.Comparator; import java.util.Map; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.plugin.manipulators.columns.ui.ColumnValuesFrequencyUI; import org.gephi.datalab.spi.columns.AttributeColumnsManipulator; import org.gephi.datalab.spi.columns.AttributeColumnsManipulatorUI; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Table; import org.gephi.utils.HTMLEscape; import org.gephi.utils.TempDirUtils; import org.gephi.utils.TempDirUtils.TempDir; @@ -66,58 +68,68 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; -import org.openide.util.lookup.ServiceProvider; /** * AttributeColumnsManipulator that shows a report with a list of the different values of a column and their frequency of appearance. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ //@ServiceProvider(service = AttributeColumnsManipulator.class) public class ColumnValuesFrequency implements AttributeColumnsManipulator { public static final int MAX_PIE_CHART_CATEGORIES = 100; - public void execute(AttributeTable table, AttributeColumn column) { + @Override + public void execute(Table table, Column column) { } + @Override public String getName() { return NbBundle.getMessage(ColumnValuesFrequency.class, "ColumnValuesFrequency.name"); } + @Override public String getDescription() { return NbBundle.getMessage(ColumnValuesFrequency.class, "ColumnValuesFrequency.description"); } - public boolean canManipulateColumn(AttributeTable table, AttributeColumn column) { + @Override + public boolean canManipulateColumn(Table table, Column column) { AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); return ac.getTableRowsCount(table) > 0;//Make sure that there is at least 1 row } - public AttributeColumnsManipulatorUI getUI(AttributeTable table,AttributeColumn column) { + @Override + public AttributeColumnsManipulatorUI getUI(Table table, Column column) { return new ColumnValuesFrequencyUI(); } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 0; } + @Override public Image getIcon() { - return ImageUtilities.loadImage("org/gephi/datalab/plugin/manipulators/resources/frequency-list.png"); + return ImageUtilities.loadImage("DataLaboratoryPlugin/frequency-list.svg", false); } - public String getReportHTML(AttributeTable table, AttributeColumn column, Map valuesFrequencies, JFreeChart pieChart, Dimension dimension) { + public String getReportHTML(Table table, Column column, Map valuesFrequencies, JFreeChart pieChart, + Dimension dimension) { AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); int totalValuesCount = ac.getTableRowsCount(table); - ArrayList values = new ArrayList(valuesFrequencies.keySet()); + ArrayList values = new ArrayList<>(valuesFrequencies.keySet()); //Try to sort the values when they are comparable. (All objects of the set will have the same type) and not null: if (!values.isEmpty() && values.get(0) instanceof Comparable) { Collections.sort(values, new Comparator() { + @Override public int compare(Object o1, Object o2) { //Check for null objects because some comparables can't handle them (like Float...) if (o1 == null) { @@ -142,7 +154,8 @@ public int compare(Object o1, Object o2) { final StringBuilder sb = new StringBuilder(); sb.append(""); - sb.append(NbBundle.getMessage(ColumnValuesFrequency.class, "ColumnValuesFrequency.report.header", HTMLEscape.stringToHTMLString(column.getTitle()))); + sb.append(NbBundle.getMessage(ColumnValuesFrequency.class, "ColumnValuesFrequency.report.header", + HTMLEscape.stringToHTMLString(column.getTitle()))); sb.append("
    "); sb.append("
      "); @@ -152,7 +165,8 @@ public int compare(Object o1, Object o2) { sb.append("
    "); sb.append("
    "); - if (!values.isEmpty() && values.size() <= MAX_PIE_CHART_CATEGORIES) {//Do not show pie chart if there are more than 100 different values + if (!values.isEmpty() && values.size() <= + MAX_PIE_CHART_CATEGORIES) {//Do not show pie chart if there are more than 100 different values try { if (pieChart != null) { writePieChart(sb, pieChart, dimension); @@ -161,20 +175,22 @@ public int compare(Object o1, Object o2) { Exceptions.printStackTrace(ex); } } else { - sb.append(NbBundle.getMessage(ColumnValuesFrequency.class, "ColumnValuesFrequency.report.piechart.not-shown")); + sb.append( + NbBundle.getMessage(ColumnValuesFrequency.class, "ColumnValuesFrequency.report.piechart.not-shown")); } sb.append(""); return sb.toString(); } - private void writeValue(final StringBuilder sb, final Object value, final Map valuesFrequencies, final float totalValuesCount) { + private void writeValue(final StringBuilder sb, final Object value, final Map valuesFrequencies, + final float totalValuesCount) { int frequency = valuesFrequencies.get(value); sb.append("
  • "); sb.append(""); if (value != null) { - sb.append(HTMLEscape.stringToHTMLString(value.toString())); + sb.append(HTMLEscape.stringToHTMLString(AttributeUtils.print(value))); } else { sb.append("null"); } @@ -187,31 +203,34 @@ private void writeValue(final StringBuilder sb, final Object value, final Map"); } - public Map buildValuesFrequencies(AttributeTable table, AttributeColumn column){ + public Map buildValuesFrequencies(Table table, Column column) { AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); return ac.calculateColumnValuesFrequencies(table, column); } public JFreeChart buildPieChart(final Map valuesFrequencies) { - final ArrayList values= new ArrayList(valuesFrequencies.keySet()); + final ArrayList values = new ArrayList<>(valuesFrequencies.keySet()); DefaultPieDataset pieDataset = new DefaultPieDataset(); for (Object value : values) { - pieDataset.setValue(value != null ? "'" + value.toString() + "'" : "null", valuesFrequencies.get(value)); + pieDataset.setValue(value != null ? "'" + AttributeUtils.print(value) + "'" : "null", + valuesFrequencies.get(value)); } - JFreeChart chart = ChartFactory.createPieChart(NbBundle.getMessage(ColumnValuesFrequency.class, "ColumnValuesFrequency.report.piechart.title"), pieDataset, false, true, false); + JFreeChart chart = ChartFactory.createPieChart( + NbBundle.getMessage(ColumnValuesFrequency.class, "ColumnValuesFrequency.report.piechart.title"), pieDataset, + false, true, false); return chart; } private void writePieChart(final StringBuilder sb, JFreeChart chart, Dimension dimension) throws IOException { TempDir tempDir = TempDirUtils.createTempDir(); - String imageFile = ""; String fileName = "frequencies-pie-chart.png"; File file = tempDir.createFile(fileName); - imageFile = "
    "; - ChartUtilities.saveChartAsPNG(file, chart, dimension != null ? dimension.width : 1000, dimension != null ? dimension.height : 1000); + String imageFile = "
    "; + ChartUtilities.saveChartAsPNG(file, chart, dimension != null ? dimension.width : 1000, + dimension != null ? dimension.height : 1000); sb.append(imageFile); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ConvertColumnToDynamic.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ConvertColumnToDynamic.java index 877e02fec7..90d6c5c68b 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ConvertColumnToDynamic.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ConvertColumnToDynamic.java @@ -39,65 +39,86 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns; import java.awt.Image; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; import org.gephi.datalab.api.AttributeColumnsController; +import org.gephi.datalab.plugin.manipulators.columns.ui.ConvertColumnToDynamicTimestampsUI; import org.gephi.datalab.plugin.manipulators.columns.ui.ConvertColumnToDynamicUI; import org.gephi.datalab.spi.columns.AttributeColumnsManipulator; import org.gephi.datalab.spi.columns.AttributeColumnsManipulatorUI; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.Table; +import org.gephi.graph.api.TimeRepresentation; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * @author Eduardo Ramos + * @author Eduardo Ramos */ @ServiceProvider(service = AttributeColumnsManipulator.class) public class ConvertColumnToDynamic implements AttributeColumnsManipulator { private String title; private double low, high; - private boolean lopen, ropen; private boolean replaceColumn; - public void execute(AttributeTable table, AttributeColumn column) { + @Override + public void execute(Table table, Column column) { if (replaceColumn) { - Lookup.getDefault().lookup(AttributeColumnsController.class).convertAttributeColumnToDynamic(table, column, low, high, lopen, ropen); + Lookup.getDefault().lookup(AttributeColumnsController.class) + .convertAttributeColumnToDynamic(table, column, low, high); } else { - Lookup.getDefault().lookup(AttributeColumnsController.class).convertAttributeColumnToNewDynamicColumn(table, column, low, high, lopen, ropen, title); + Lookup.getDefault().lookup(AttributeColumnsController.class) + .convertAttributeColumnToNewDynamicColumn(table, column, low, high, title); } } + @Override public String getName() { return NbBundle.getMessage(ConvertColumnToDynamic.class, "ConvertColumnToDynamic.name"); } + @Override public String getDescription() { return ""; } - public boolean canManipulateColumn(AttributeTable table, AttributeColumn column) { + @Override + public boolean canManipulateColumn(Table table, Column column) { return Lookup.getDefault().lookup(AttributeColumnsController.class).canConvertColumnToDynamic(column); } - public AttributeColumnsManipulatorUI getUI(AttributeTable table, AttributeColumn column) { - return new ConvertColumnToDynamicUI(); + @Override + public AttributeColumnsManipulatorUI getUI(Table table, Column column) { + TimeRepresentation timeRepresentation = + Lookup.getDefault().lookup(GraphController.class).getGraphModel().getConfiguration() + .getTimeRepresentation(); + + if (timeRepresentation == TimeRepresentation.INTERVAL) { + return new ConvertColumnToDynamicUI(); + } else { + return new ConvertColumnToDynamicTimestampsUI(); + } } + @Override public int getType() { return 400; } + @Override public int getPosition() { return 0; } + @Override public Image getIcon() { - return ImageUtilities.loadImage("org/gephi/datalab/plugin/manipulators/resources/table-insert-column.png"); + return ImageUtilities.loadImage("DataLaboratoryPlugin/table-convert-dynamic-column.svg", false); } public String getTitle() { @@ -124,22 +145,6 @@ public void setHigh(double high) { this.high = high; } - public boolean isLopen() { - return lopen; - } - - public void setLopen(boolean lopen) { - this.lopen = lopen; - } - - public boolean isRopen() { - return ropen; - } - - public void setRopen(boolean ropen) { - this.ropen = ropen; - } - public boolean isReplaceColumn() { return replaceColumn; } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/CopyDataToOtherColumn.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/CopyDataToOtherColumn.java index f95dbd8f2b..c68e81754d 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/CopyDataToOtherColumn.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/CopyDataToOtherColumn.java @@ -39,71 +39,82 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns; import java.awt.Image; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.api.datatables.DataTablesController; import org.gephi.datalab.plugin.manipulators.columns.ui.CopyDataToOtherColumnUI; import org.gephi.datalab.spi.columns.AttributeColumnsManipulator; import org.gephi.datalab.spi.columns.AttributeColumnsManipulatorUI; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Table; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * AttributeColumnsManipulator that copies data from a AttributeColumn of a AttributeTable to other AttributeColumn. + * AttributeColumnsManipulator that copies data from a Column of a Table to other AttributeColumn. * Allows the user to select the target column in the UI - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ @ServiceProvider(service = AttributeColumnsManipulator.class) public class CopyDataToOtherColumn implements AttributeColumnsManipulator { - AttributeColumn targetColumn; + Column targetColumn; - public void execute(AttributeTable table, AttributeColumn column) { + @Override + public void execute(Table table, Column column) { if (targetColumn != null && targetColumn != column) { - Lookup.getDefault().lookup(AttributeColumnsController.class).copyColumnDataToOtherColumn(table, column, targetColumn); + Lookup.getDefault().lookup(AttributeColumnsController.class) + .copyColumnDataToOtherColumn(table, column, targetColumn); Lookup.getDefault().lookup(DataTablesController.class).refreshCurrentTable(); } } + @Override public String getName() { return NbBundle.getMessage(CopyDataToOtherColumn.class, "CopyDataToOtherColumn.name"); } + @Override public String getDescription() { return ""; } - public boolean canManipulateColumn(AttributeTable table, AttributeColumn column) { + @Override + public boolean canManipulateColumn(Table table, Column column) { return true; } - public AttributeColumnsManipulatorUI getUI(AttributeTable table,AttributeColumn column) { + @Override + public AttributeColumnsManipulatorUI getUI(Table table, Column column) { return new CopyDataToOtherColumnUI(); } + @Override public int getType() { return 0; } + @Override public int getPosition() { return 200; } + @Override public Image getIcon() { - return ImageUtilities.loadImage("org/gephi/datalab/plugin/manipulators/resources/table-duplicate-column.png"); + return ImageUtilities.loadImage("DataLaboratoryPlugin/table-copy-data-to-other-column.svg", false); } - public AttributeColumn getTargetColumn() { + public Column getTargetColumn() { return targetColumn; } - public void setTargetColumn(AttributeColumn targetColumn) { + public void setTargetColumn(Column targetColumn) { this.targetColumn = targetColumn; } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/CreateBooleanMatchesColumn.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/CreateBooleanMatchesColumn.java index 3a0b4e9da2..b1731c7146 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/CreateBooleanMatchesColumn.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/CreateBooleanMatchesColumn.java @@ -39,15 +39,16 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns; import java.awt.Image; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.plugin.manipulators.columns.ui.GeneralCreateColumnFromRegexUI; import org.gephi.datalab.spi.columns.AttributeColumnsManipulator; import org.gephi.datalab.spi.columns.AttributeColumnsManipulatorUI; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Table; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; @@ -57,44 +58,54 @@ Development and Distribution License("CDDL") (collectively, the * AttributeColumnsManipulator that creates a new boolean column from the given column and regular expression with boolean values that indicate if * each of the old column values match the regular expression. * Allows the user to select the title of the new column in the UI - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ @ServiceProvider(service = AttributeColumnsManipulator.class) -public class CreateBooleanMatchesColumn extends GeneralCreateColumnFromRegex{ - public void execute(AttributeTable table, AttributeColumn column) { +public class CreateBooleanMatchesColumn extends GeneralCreateColumnFromRegex { + @Override + public void execute(Table table, Column column) { if (pattern != null) { - Lookup.getDefault().lookup(AttributeColumnsController.class).createBooleanMatchesColumn(table, column, title, pattern); + Lookup.getDefault().lookup(AttributeColumnsController.class) + .createBooleanMatchesColumn(table, column, title, pattern); } } + @Override public String getName() { return NbBundle.getMessage(CreateBooleanMatchesColumn.class, "CreateBooleanMatchesColumn.name"); } + @Override public String getDescription() { return NbBundle.getMessage(CreateBooleanMatchesColumn.class, "CreateBooleanMatchesColumn.description"); } - public boolean canManipulateColumn(AttributeTable table, AttributeColumn column) { + @Override + public boolean canManipulateColumn(Table table, Column column) { AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); - return ac.getTableRowsCount(table)>0;//Make sure that there is at least 1 row + return ac.getTableRowsCount(table) > 0;//Make sure that there is at least 1 row } - public AttributeColumnsManipulatorUI getUI(AttributeTable table,AttributeColumn column) { - GeneralCreateColumnFromRegexUI ui=new GeneralCreateColumnFromRegexUI(); + @Override + public AttributeColumnsManipulatorUI getUI(Table table, Column column) { + GeneralCreateColumnFromRegexUI ui = new GeneralCreateColumnFromRegexUI(); ui.setMode(GeneralCreateColumnFromRegexUI.Mode.BOOLEAN); return ui; } + @Override public int getType() { return 200; } + @Override public int getPosition() { return 0; } + @Override public Image getIcon() { - return ImageUtilities.loadImage("org/gephi/datalab/plugin/manipulators/resources/binocular--arrow.png"); + return ImageUtilities.loadImage("DataLaboratoryPlugin/table-create-boolean-column.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/CreateFoundGroupsListColumn.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/CreateFoundGroupsListColumn.java index a82780a7c8..849438576a 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/CreateFoundGroupsListColumn.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/CreateFoundGroupsListColumn.java @@ -39,15 +39,16 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns; import java.awt.Image; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.plugin.manipulators.columns.ui.GeneralCreateColumnFromRegexUI; import org.gephi.datalab.spi.columns.AttributeColumnsManipulator; import org.gephi.datalab.spi.columns.AttributeColumnsManipulatorUI; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Table; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; @@ -57,45 +58,55 @@ Development and Distribution License("CDDL") (collectively, the * AttributeColumnsManipulator that creates a new string list column from the given column and regular expression with values that are * the list of matching groups of the given regular expression. * Allows the user to select the title of the new column in the UI - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ @ServiceProvider(service = AttributeColumnsManipulator.class) public class CreateFoundGroupsListColumn extends GeneralCreateColumnFromRegex { - public void execute(AttributeTable table, AttributeColumn column) { + @Override + public void execute(Table table, Column column) { if (pattern != null) { - Lookup.getDefault().lookup(AttributeColumnsController.class).createFoundGroupsListColumn(table, column, title, pattern); + Lookup.getDefault().lookup(AttributeColumnsController.class) + .createFoundGroupsListColumn(table, column, title, pattern); } } + @Override public String getName() { return NbBundle.getMessage(CreateFoundGroupsListColumn.class, "CreateFoundGroupsListColumn.name"); } + @Override public String getDescription() { return NbBundle.getMessage(CreateFoundGroupsListColumn.class, "CreateFoundGroupsListColumn.description"); } - public boolean canManipulateColumn(AttributeTable table, AttributeColumn column) { + @Override + public boolean canManipulateColumn(Table table, Column column) { AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); - return ac.getTableRowsCount(table)>0;//Make sure that there is at least 1 row + return ac.getTableRowsCount(table) > 0;//Make sure that there is at least 1 row } - public AttributeColumnsManipulatorUI getUI(AttributeTable table,AttributeColumn column) { + @Override + public AttributeColumnsManipulatorUI getUI(Table table, Column column) { GeneralCreateColumnFromRegexUI ui = new GeneralCreateColumnFromRegexUI(); ui.setMode(GeneralCreateColumnFromRegexUI.Mode.MATCHING_GROUPS); return ui; } + @Override public int getType() { return 200; } + @Override public int getPosition() { return 100; } + @Override public Image getIcon() { - return ImageUtilities.loadImage("org/gephi/datalab/plugin/manipulators/resources/binocular--arrow.png"); + return ImageUtilities.loadImage("DataLaboratoryPlugin/table-create-list-column-matching-groups.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/DeleteColumn.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/DeleteColumn.java index c7f59cfc92..36929fbef2 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/DeleteColumn.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/DeleteColumn.java @@ -1,99 +1,110 @@ /* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. + Copyright 2008-2010 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns; import java.awt.Image; import javax.swing.JOptionPane; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.api.datatables.DataTablesController; import org.gephi.datalab.spi.columns.AttributeColumnsManipulator; import org.gephi.datalab.spi.columns.AttributeColumnsManipulatorUI; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Table; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * AttributeColumnsManipulator that deletes a AttributeColumn of a AttributeTable. - * Only allows to delete columns with DATA AttributeOrigin. - * @author Eduardo Ramos + * AttributeColumnsManipulator that deletes a Column of a AttributeTable. Only allows to delete columns with DATA AttributeOrigin. + * + * @author Eduardo Ramos */ @ServiceProvider(service = AttributeColumnsManipulator.class) public class DeleteColumn implements AttributeColumnsManipulator { - public void execute(AttributeTable table, AttributeColumn column) { - if (JOptionPane.showConfirmDialog(null, NbBundle.getMessage(ClearColumnData.class, "DeleteColumn.confirmation.message", column.getTitle()), getName(), JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { + @Override + public void execute(Table table, Column column) { + if (JOptionPane.showConfirmDialog(null, + NbBundle.getMessage(ClearColumnData.class, "DeleteColumn.confirmation.message", column.getTitle()), + getName(), JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { Lookup.getDefault().lookup(AttributeColumnsController.class).deleteAttributeColumn(table, column); Lookup.getDefault().lookup(DataTablesController.class).selectTable(table); } } + @Override public String getName() { return NbBundle.getMessage(DeleteColumn.class, "DeleteColumn.name"); } + @Override public String getDescription() { return ""; } - public boolean canManipulateColumn(AttributeTable table, AttributeColumn column) { + @Override + public boolean canManipulateColumn(Table table, Column column) { return Lookup.getDefault().lookup(AttributeColumnsController.class).canDeleteColumn(column); } - public AttributeColumnsManipulatorUI getUI(AttributeTable table,AttributeColumn column) { + @Override + public AttributeColumnsManipulatorUI getUI(Table table, Column column) { return null; } + @Override public int getType() { return 0; } + @Override public int getPosition() { return 0; } + @Override public Image getIcon() { - return ImageUtilities.loadImage("org/gephi/datalab/plugin/manipulators/resources/table-delete-column.png"); + return ImageUtilities.loadImage("DataLaboratoryPlugin/table-delete-column.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/DuplicateColumn.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/DuplicateColumn.java index ef5aa620b1..22345f0bde 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/DuplicateColumn.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/DuplicateColumn.java @@ -39,61 +39,70 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns; import java.awt.Image; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; -import org.gephi.data.attributes.api.AttributeType; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.plugin.manipulators.columns.ui.DuplicateColumnUI; import org.gephi.datalab.spi.columns.AttributeColumnsManipulator; import org.gephi.datalab.spi.columns.AttributeColumnsManipulatorUI; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Table; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * AttributeColumnsManipulator that duplicate a AttributeColumn of a AttributeTable setting the same values for the rows. + * AttributeColumnsManipulator that duplicate a Column of a Table setting the same values for the rows. * Allows the user to select the title and AttributeType of the new column in the UI - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ @ServiceProvider(service = AttributeColumnsManipulator.class) public class DuplicateColumn implements AttributeColumnsManipulator { private String title; - private AttributeType columnType; + private Class columnType; - public void execute(AttributeTable table, AttributeColumn column) { + @Override + public void execute(Table table, Column column) { Lookup.getDefault().lookup(AttributeColumnsController.class).duplicateColumn(table, column, title, columnType); } + @Override public String getName() { return NbBundle.getMessage(DuplicateColumn.class, "DuplicateColumn.name"); } + @Override public String getDescription() { return ""; } - public boolean canManipulateColumn(AttributeTable table, AttributeColumn column) { + @Override + public boolean canManipulateColumn(Table table, Column column) { return true; } - public AttributeColumnsManipulatorUI getUI(AttributeTable table,AttributeColumn column) { + @Override + public AttributeColumnsManipulatorUI getUI(Table table, Column column) { return new DuplicateColumnUI(); } + @Override public int getType() { return 0; } + @Override public int getPosition() { return 400; } + @Override public Image getIcon() { - return ImageUtilities.loadImage("org/gephi/datalab/plugin/manipulators/resources/table-duplicate-column.png"); + return ImageUtilities.loadImage("DataLaboratoryPlugin/table-duplicate-column.svg", false); } public String getTitle() { @@ -104,11 +113,11 @@ public void setTitle(String title) { this.title = title; } - public AttributeType getColumnType() { + public Class getColumnType() { return columnType; } - public void setColumnType(AttributeType columnType) { + public void setColumnType(Class columnType) { this.columnType = columnType; } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/FillColumnWithValue.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/FillColumnWithValue.java index 53c1e1926e..077d59f7c6 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/FillColumnWithValue.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/FillColumnWithValue.java @@ -39,61 +39,73 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns; import java.awt.Image; import javax.swing.JOptionPane; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.api.datatables.DataTablesController; import org.gephi.datalab.spi.columns.AttributeColumnsManipulator; import org.gephi.datalab.spi.columns.AttributeColumnsManipulatorUI; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Table; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * AttributeColumnsManipulator that fills an AttributeColumn with the value that the user provides in the UI. - * @author Eduardo Ramos + * AttributeColumnsManipulator that fills an Column with the value that the user provides in the UI. + * + * @author Eduardo Ramos */ @ServiceProvider(service = AttributeColumnsManipulator.class) public class FillColumnWithValue implements AttributeColumnsManipulator { - public void execute(AttributeTable table, AttributeColumn column) { - String value = JOptionPane.showInputDialog(null,NbBundle.getMessage(FillColumnWithValue.class, "FillColumnWithValue.inputDialog.text"),getName(),JOptionPane.QUESTION_MESSAGE); + @Override + public void execute(Table table, Column column) { + String value = JOptionPane.showInputDialog(null, + NbBundle.getMessage(FillColumnWithValue.class, "FillColumnWithValue.inputDialog.text"), getName(), + JOptionPane.QUESTION_MESSAGE); if (value != null) { Lookup.getDefault().lookup(AttributeColumnsController.class).fillColumnWithValue(table, column, value); Lookup.getDefault().lookup(DataTablesController.class).refreshCurrentTable(); } } + @Override public String getName() { return NbBundle.getMessage(FillColumnWithValue.class, "FillColumnWithValue.name"); } + @Override public String getDescription() { return ""; } - public boolean canManipulateColumn(AttributeTable table, AttributeColumn column) { + @Override + public boolean canManipulateColumn(Table table, Column column) { return Lookup.getDefault().lookup(AttributeColumnsController.class).canChangeColumnData(column); } - public AttributeColumnsManipulatorUI getUI(AttributeTable table,AttributeColumn column) { + @Override + public AttributeColumnsManipulatorUI getUI(Table table, Column column) { return null; } + @Override public int getType() { return 0; } + @Override public int getPosition() { return 300; } + @Override public Image getIcon() { - return ImageUtilities.loadImage("org/gephi/datalab/plugin/manipulators/resources/table-duplicate-column.png"); + return ImageUtilities.loadImage("DataLaboratoryPlugin/table-fill-column.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/GeneralCreateColumnFromRegex.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/GeneralCreateColumnFromRegex.java index 974f9b55a3..b9b538c537 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/GeneralCreateColumnFromRegex.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/GeneralCreateColumnFromRegex.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns; import java.util.regex.Pattern; @@ -47,9 +48,10 @@ Development and Distribution License("CDDL") (collectively, the /** * General abstract class for AttributeColumnManipulators that create a new column from a regular expression and another column. * They need a title for the new column and a pattern (regex). - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -public abstract class GeneralCreateColumnFromRegex implements AttributeColumnsManipulator{ +public abstract class GeneralCreateColumnFromRegex implements AttributeColumnsManipulator { protected String title; protected Pattern pattern; diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/NegateBooleanColumn.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/NegateBooleanColumn.java index b45026d131..4ee532e72f 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/NegateBooleanColumn.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/NegateBooleanColumn.java @@ -1,54 +1,54 @@ /* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. + Copyright 2008-2010 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns; import java.awt.Image; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; -import org.gephi.data.attributes.api.AttributeType; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.api.datatables.DataTablesController; import org.gephi.datalab.spi.columns.AttributeColumnsManipulator; import org.gephi.datalab.spi.columns.AttributeColumnsManipulatorUI; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Table; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; @@ -56,41 +56,50 @@ Development and Distribution License("CDDL") (collectively, the /** * AttributeColumnsManipulator that negates the not null values of a boolean or boolean list column. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ @ServiceProvider(service = AttributeColumnsManipulator.class) public class NegateBooleanColumn implements AttributeColumnsManipulator { - public void execute(AttributeTable table, AttributeColumn column) { + @Override + public void execute(Table table, Column column) { Lookup.getDefault().lookup(AttributeColumnsController.class).negateBooleanColumn(table, column); Lookup.getDefault().lookup(DataTablesController.class).refreshCurrentTable(); } + @Override public String getName() { return NbBundle.getMessage(NegateBooleanColumn.class, "NegateBooleanColumn.name"); } + @Override public String getDescription() { return ""; } - public boolean canManipulateColumn(AttributeTable table, AttributeColumn column) { - return column.getType()==AttributeType.BOOLEAN||column.getType()==AttributeType.LIST_BOOLEAN; + @Override + public boolean canManipulateColumn(Table table, Column column) { + return column.getTypeClass() == Boolean.class || column.getTypeClass() == Boolean[].class; } - public AttributeColumnsManipulatorUI getUI(AttributeTable table,AttributeColumn column) { + @Override + public AttributeColumnsManipulatorUI getUI(Table table, Column column) { return null; } + @Override public int getType() { return 300; } + @Override public int getPosition() { return 0; } + @Override public Image getIcon() { - return ImageUtilities.loadImage("org/gephi/datalab/plugin/manipulators/resources/ui-check-boxes.png"); + return ImageUtilities.loadImage("DataLaboratoryPlugin/table-negate-boolean-column.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/NumberColumnStatisticsReport.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/NumberColumnStatisticsReport.java index 3f5cb6c85b..537018b70e 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/NumberColumnStatisticsReport.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/NumberColumnStatisticsReport.java @@ -39,60 +39,71 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns; import java.awt.Image; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; -import org.gephi.data.attributes.api.AttributeUtils; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.plugin.manipulators.ui.GeneralNumberListStatisticsReportUI; import org.gephi.datalab.spi.columns.AttributeColumnsManipulator; import org.gephi.datalab.spi.columns.AttributeColumnsManipulatorUI; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Table; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; /** * AttributeColumnsManipulator that shows a report with statistics values and charts of a number/number list column. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ //@ServiceProvider(service = AttributeColumnsManipulator.class) public class NumberColumnStatisticsReport implements AttributeColumnsManipulator { - public void execute(AttributeTable table, AttributeColumn column) { + @Override + public void execute(Table table, Column column) { } + @Override public String getName() { return getMessage("NumberColumnStatisticsReport.name"); } + @Override public String getDescription() { return getMessage("NumberColumnStatisticsReport.description"); } - public boolean canManipulateColumn(AttributeTable table, AttributeColumn column) { + @Override + public boolean canManipulateColumn(Table table, Column column) { AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); - return AttributeUtils.getDefault().isNumberOrNumberListColumn(column) && ac.getTableRowsCount(table) > 0;//Make sure it is a number/number list column and there is at least 1 row + return AttributeUtils.isNumberType(column.getTypeClass()) && + ac.getTableRowsCount(table) > 0;//Make sure it is a number/number list column and there is at least 1 row } - public AttributeColumnsManipulatorUI getUI(AttributeTable table,AttributeColumn column) { + @Override + public AttributeColumnsManipulatorUI getUI(Table table, Column column) { return new GeneralNumberListStatisticsReportUI(getColumnNumbers(table, column), column.getTitle(), getName()); } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 100; } + @Override public Image getIcon() { - return ImageUtilities.loadImage("org/gephi/datalab/plugin/manipulators/resources/statistics.png"); + return ImageUtilities.loadImage("DataLaboratoryPlugin/statistics.svg", false); } - public Number[] getColumnNumbers(final AttributeTable table, final AttributeColumn column) { + public Number[] getColumnNumbers(final Table table, final Column column) { AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); Number[] columnNumbers = ac.getColumnNumbers(table, column); return columnNumbers; diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/AverageNumber.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/AverageNumber.java index 0f44553e5c..e5b1b3b3a1 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/AverageNumber.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/AverageNumber.java @@ -39,16 +39,17 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.merge; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; -import org.gephi.data.attributes.api.AttributeUtils; import org.gephi.datalab.api.AttributeColumnsMergeStrategiesController; import org.gephi.datalab.plugin.manipulators.columns.merge.ui.GeneralColumnTitleChooserUI; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.columns.merge.AttributeColumnsMergeStrategy; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Table; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; @@ -56,59 +57,79 @@ Development and Distribution License("CDDL") (collectively, the /** * AttributeColumnsMergeStrategy for any combination of number or number list columns that * calculates the average of all the values and creates a new BigDecimal column with the result of each row. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -public class AverageNumber implements AttributeColumnsMergeStrategy, GeneralColumnTitleChooser{ - private AttributeTable table; - private AttributeColumn[] columns; +public class AverageNumber implements AttributeColumnsMergeStrategy, GeneralColumnTitleChooser { + private Table table; + private Column[] columns; private String columnTitle; - public void setup(AttributeTable table, AttributeColumn[] columns) { - this.table=table; - this.columns=columns; + @Override + public void setup(Table table, Column[] columns) { + this.table = table; + this.columns = columns; } + @Override public void execute() { - Lookup.getDefault().lookup(AttributeColumnsMergeStrategiesController.class).averageNumberMerge(table, columns, columnTitle); + Lookup.getDefault().lookup(AttributeColumnsMergeStrategiesController.class) + .averageNumberMerge(table, columns, columnTitle); } + @Override public String getName() { return NbBundle.getMessage(AverageNumber.class, "AverageNumber.name"); } + @Override public String getDescription() { return NbBundle.getMessage(AverageNumber.class, "AverageNumber.description"); } + @Override public boolean canExecute() { - return AttributeUtils.getDefault().areAllNumberOrNumberListColumns(columns); + for (Column column : columns) { + if (!AttributeUtils.isNumberType(column.getTypeClass())) { + return false; + } + } + + return true; } + @Override public ManipulatorUI getUI() { return new GeneralColumnTitleChooserUI(); } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 0; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/balance.png",true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/balance.svg", false); } - public AttributeTable getTable() { + @Override + public Table getTable() { return table; } + @Override public String getColumnTitle() { return columnTitle; } + @Override public void setColumnTitle(String columnTitle) { - this.columnTitle=columnTitle; + this.columnTitle = columnTitle; } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/AverageNumberBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/AverageNumberBuilder.java index 2010b311c9..17f745773d 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/AverageNumberBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/AverageNumberBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.merge; import org.gephi.datalab.spi.columns.merge.AttributeColumnsMergeStrategy; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for AverageNumber AttributeColumnsMergeStrategy. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=AttributeColumnsMergeStrategyBuilder.class) -public class AverageNumberBuilder implements AttributeColumnsMergeStrategyBuilder{ +@ServiceProvider(service = AttributeColumnsMergeStrategyBuilder.class) +public class AverageNumberBuilder implements AttributeColumnsMergeStrategyBuilder { + @Override public AttributeColumnsMergeStrategy getAttributeColumnsMergeStrategy() { return new AverageNumber(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/BooleanLogicOperations.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/BooleanLogicOperations.java index 3642a45723..711162b99e 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/BooleanLogicOperations.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/BooleanLogicOperations.java @@ -1,107 +1,122 @@ /* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. + Copyright 2008-2010 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.merge; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; -import org.gephi.data.attributes.api.AttributeType; -import org.gephi.data.attributes.api.AttributeUtils; import org.gephi.datalab.api.AttributeColumnsMergeStrategiesController; import org.gephi.datalab.api.AttributeColumnsMergeStrategiesController.BooleanOperations; import org.gephi.datalab.plugin.manipulators.columns.merge.ui.BooleanLogicOperationsUI; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.columns.merge.AttributeColumnsMergeStrategy; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Table; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; /** - * AttributeColumnsMergeStrategy for only all boolean columns that allows the user to select - * each operation to apply between each pair of columns to merge. - * @author Eduardo Ramos + * AttributeColumnsMergeStrategy for only all boolean columns that allows the user to select each operation to apply between each pair of columns to merge. + * + * @author Eduardo Ramos */ -public class BooleanLogicOperations implements AttributeColumnsMergeStrategy{ - private AttributeTable table; - private AttributeColumn[] columns; +public class BooleanLogicOperations implements AttributeColumnsMergeStrategy { + + private Table table; + private Column[] columns; private String newColumnTitle; - private BooleanOperations[] booleanOperations; + private BooleanOperations[] booleanOperations; - public void setup(AttributeTable table, AttributeColumn[] columns) { - this.columns=columns; - this.table=table; + @Override + public void setup(Table table, Column[] columns) { + this.columns = columns; + this.table = table; } + @Override public void execute() { - Lookup.getDefault().lookup(AttributeColumnsMergeStrategiesController.class).booleanLogicOperationsMerge(table, columns, booleanOperations, newColumnTitle); + Lookup.getDefault().lookup(AttributeColumnsMergeStrategiesController.class) + .booleanLogicOperationsMerge(table, columns, booleanOperations, newColumnTitle); } + @Override public String getName() { return NbBundle.getMessage(BooleanLogicOperations.class, "BooleanLogicOperations.name"); } + @Override public String getDescription() { return NbBundle.getMessage(BooleanLogicOperations.class, "BooleanLogicOperations.description"); } + @Override public boolean canExecute() { - AttributeUtils attributeUtils=AttributeUtils.getDefault(); - return attributeUtils.areAllColumnsOfType(columns, AttributeType.BOOLEAN); + for (Column column : columns) { + if (column.getTypeClass() != Boolean.class) { + return false; + } + } + + return true; } + @Override public ManipulatorUI getUI() { return new BooleanLogicOperationsUI(); } + @Override public int getType() { return 200; } + @Override public int getPosition() { return 0; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/script-binary.png",true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/script-binary.svg", false); } public BooleanOperations[] getBooleanOperations() { @@ -120,11 +135,11 @@ public void setNewColumnTitle(String newColumnTitle) { this.newColumnTitle = newColumnTitle; } - public AttributeColumn[] getColumns() { + public Column[] getColumns() { return columns; } - public AttributeTable getTable() { + public Table getTable() { return table; } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/BooleanLogicOperationsBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/BooleanLogicOperationsBuilder.java index 1cee06010d..a30b7f23c2 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/BooleanLogicOperationsBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/BooleanLogicOperationsBuilder.java @@ -48,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for BooleanLogicOperations AttributeColumnsMergeStrategy. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=AttributeColumnsMergeStrategyBuilder.class) -public class BooleanLogicOperationsBuilder implements AttributeColumnsMergeStrategyBuilder{ +@ServiceProvider(service = AttributeColumnsMergeStrategyBuilder.class) +public class BooleanLogicOperationsBuilder implements AttributeColumnsMergeStrategyBuilder { + @Override public AttributeColumnsMergeStrategy getAttributeColumnsMergeStrategy() { return new BooleanLogicOperations(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/CreateTimeInterval.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/CreateTimeInterval.java index a171388fde..9c5949bd30 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/CreateTimeInterval.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/CreateTimeInterval.java @@ -39,80 +39,100 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.merge; import java.text.SimpleDateFormat; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; import org.gephi.datalab.api.AttributeColumnsMergeStrategiesController; import org.gephi.datalab.plugin.manipulators.columns.merge.ui.CreateTimeIntervalUI; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.columns.merge.AttributeColumnsMergeStrategy; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.Table; +import org.gephi.graph.api.TimeRepresentation; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; /** - * AttributeColumnsMergeStrategy for 1 or 2 columns that uses the column values as dates or numbers for start/end times - * to create or fill the TimeInterval column for each row. - * @author Eduardo Ramos + * AttributeColumnsMergeStrategy for 1 or 2 columns that uses the column values as dates or numbers for start/end times to create or fill the TimeInterval column for each row. + * + * @author Eduardo Ramos */ public class CreateTimeInterval implements AttributeColumnsMergeStrategy { - private AttributeTable table; - private AttributeColumn[] columns; - private AttributeColumn startColumn, endColumn; - private boolean parseNumbers=true; + private Table table; + private Column[] columns; + private Column startColumn, endColumn; + private boolean parseNumbers = true; //Number mode: private double startNumber, endNumber; //Date mode: private SimpleDateFormat dateFormat; private String startDate, endDate; - public void setup(AttributeTable table, AttributeColumn[] columns) { + @Override + public void setup(Table table, Column[] columns) { this.table = table; this.columns = columns; } + @Override public void execute() { - AttributeColumnsMergeStrategiesController ac=Lookup.getDefault().lookup(AttributeColumnsMergeStrategiesController.class); - if(parseNumbers){ + AttributeColumnsMergeStrategiesController ac = + Lookup.getDefault().lookup(AttributeColumnsMergeStrategiesController.class); + if (parseNumbers) { ac.mergeNumericColumnsToTimeInterval(table, startColumn, endColumn, startNumber, endNumber); - }else{ + } else { ac.mergeDateColumnsToTimeInterval(table, startColumn, endColumn, dateFormat, startDate, endDate); } } + @Override public String getName() { return NbBundle.getMessage(CreateTimeInterval.class, "CreateTimeInterval.name"); } + @Override public String getDescription() { return NbBundle.getMessage(CreateTimeInterval.class, "CreateTimeInterval.description"); } + @Override public boolean canExecute() { + TimeRepresentation timeRepresentation = + Lookup.getDefault().lookup(GraphController.class).getGraphModel().getConfiguration() + .getTimeRepresentation(); + if (timeRepresentation != TimeRepresentation.INTERVAL) { + return false; + } + return columns.length == 1 || columns.length == 2; } + @Override public ManipulatorUI getUI() { return new CreateTimeIntervalUI(); } + @Override public int getType() { return 0; } + @Override public int getPosition() { return 200; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/clock-select.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/clock-select.svg", false); } - public AttributeColumn[] getColumns() { + public Column[] getColumns() { return columns; } @@ -124,11 +144,11 @@ public void setDateFormat(SimpleDateFormat dateFormat) { this.dateFormat = dateFormat; } - public AttributeColumn getEndColumn() { + public Column getEndColumn() { return endColumn; } - public void setEndColumn(AttributeColumn endColumn) { + public void setEndColumn(Column endColumn) { this.endColumn = endColumn; } @@ -156,11 +176,11 @@ public void setParseNumbers(boolean parseNumbers) { this.parseNumbers = parseNumbers; } - public AttributeColumn getStartColumn() { + public Column getStartColumn() { return startColumn; } - public void setStartColumn(AttributeColumn startColumn) { + public void setStartColumn(Column startColumn) { this.startColumn = startColumn; } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/CreateTimeIntervalBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/CreateTimeIntervalBuilder.java index 5eff4ddff2..fde513f0b5 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/CreateTimeIntervalBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/CreateTimeIntervalBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.merge; import org.gephi.datalab.spi.columns.merge.AttributeColumnsMergeStrategy; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for CreateTimeInterval AttributeColumnsMergeStrategyBuilder. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=AttributeColumnsMergeStrategyBuilder.class) -public class CreateTimeIntervalBuilder implements AttributeColumnsMergeStrategyBuilder{ +@ServiceProvider(service = AttributeColumnsMergeStrategyBuilder.class) +public class CreateTimeIntervalBuilder implements AttributeColumnsMergeStrategyBuilder { + @Override public AttributeColumnsMergeStrategy getAttributeColumnsMergeStrategy() { return new CreateTimeInterval(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/FirstQuartileNumber.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/FirstQuartileNumber.java index cb6130d0eb..28ca39716c 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/FirstQuartileNumber.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/FirstQuartileNumber.java @@ -39,75 +39,95 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.merge; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; -import org.gephi.data.attributes.api.AttributeUtils; import org.gephi.datalab.api.AttributeColumnsMergeStrategiesController; import org.gephi.datalab.plugin.manipulators.columns.merge.ui.GeneralColumnTitleChooserUI; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.columns.merge.AttributeColumnsMergeStrategy; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Table; import org.openide.util.Lookup; import org.openide.util.NbBundle; /** * AttributeColumnsMergeStrategy for any combination of number or number list columns that * calculates the first quartile (Q1) of all the values and creates a new BigDecimal column with the result of each row. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class FirstQuartileNumber implements AttributeColumnsMergeStrategy, GeneralColumnTitleChooser { - private AttributeTable table; - private AttributeColumn[] columns; + private Table table; + private Column[] columns; private String columnTitle; - public void setup(AttributeTable table, AttributeColumn[] columns) { + @Override + public void setup(Table table, Column[] columns) { this.table = table; this.columns = columns; } + @Override public void execute() { - Lookup.getDefault().lookup(AttributeColumnsMergeStrategiesController.class).firstQuartileNumberMerge(table, columns, columnTitle); + Lookup.getDefault().lookup(AttributeColumnsMergeStrategiesController.class) + .firstQuartileNumberMerge(table, columns, columnTitle); } + @Override public String getName() { return NbBundle.getMessage(FirstQuartileNumber.class, "FirstQuartileNumber.name"); } + @Override public String getDescription() { return NbBundle.getMessage(FirstQuartileNumber.class, "FirstQuartileNumber.description"); } + @Override public boolean canExecute() { - return AttributeUtils.getDefault().areAllNumberOrNumberListColumns(columns); + for (Column column : columns) { + if (!AttributeUtils.isNumberType(column.getTypeClass())) { + return false; + } + } + return true; } + @Override public ManipulatorUI getUI() { return new GeneralColumnTitleChooserUI(); } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 100; } + @Override public Icon getIcon() { return null; } - public AttributeTable getTable() { + @Override + public Table getTable() { return table; } + @Override public String getColumnTitle() { return columnTitle; } + @Override public void setColumnTitle(String columnTitle) { this.columnTitle = columnTitle; } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/FirstQuartileNumberBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/FirstQuartileNumberBuilder.java index f3d43c7a9c..9814dd90a8 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/FirstQuartileNumberBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/FirstQuartileNumberBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.merge; @@ -48,11 +49,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for MedianNumber AttributeColumnsMergeStrategy. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=AttributeColumnsMergeStrategyBuilder.class) -public class FirstQuartileNumberBuilder implements AttributeColumnsMergeStrategyBuilder{ +@ServiceProvider(service = AttributeColumnsMergeStrategyBuilder.class) +public class FirstQuartileNumberBuilder implements AttributeColumnsMergeStrategyBuilder { + @Override public AttributeColumnsMergeStrategy getAttributeColumnsMergeStrategy() { return new FirstQuartileNumber(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/GeneralColumnTitleChooser.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/GeneralColumnTitleChooser.java index 0c8d3cbeb8..62d7d0d45c 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/GeneralColumnTitleChooser.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/GeneralColumnTitleChooser.java @@ -39,32 +39,37 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.merge; -import org.gephi.data.attributes.api.AttributeTable; +import org.gephi.graph.api.Table; /** * Interface that general merge strategies that only need to choose a title for the column to create * should implement in order to be able to use GeneralColumnTitleChooserUI. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public interface GeneralColumnTitleChooser { /** * Provide a initial title for the UI if needed. + * * @return Title */ String getColumnTitle(); /** * Called from the UI to set the final title to use. + * * @param columnTitle Title */ void setColumnTitle(String columnTitle); /** * Manipulators must provide the table to use in the UI to validate the column title with this method. + * * @return Table for the new column */ - AttributeTable getTable(); + Table getTable(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/InterQuartileRangeNumber.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/InterQuartileRangeNumber.java index 4c50ec0d70..48423c3668 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/InterQuartileRangeNumber.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/InterQuartileRangeNumber.java @@ -39,75 +39,95 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.merge; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; -import org.gephi.data.attributes.api.AttributeUtils; import org.gephi.datalab.api.AttributeColumnsMergeStrategiesController; import org.gephi.datalab.plugin.manipulators.columns.merge.ui.GeneralColumnTitleChooserUI; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.columns.merge.AttributeColumnsMergeStrategy; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Table; import org.openide.util.Lookup; import org.openide.util.NbBundle; /** * AttributeColumnsMergeStrategy for any combination of number or number list columns that * calculates the interquartile range (IQR) of all the values and creates a new BigDecimal column with the result of each row. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class InterQuartileRangeNumber implements AttributeColumnsMergeStrategy, GeneralColumnTitleChooser { - private AttributeTable table; - private AttributeColumn[] columns; + private Table table; + private Column[] columns; private String columnTitle; - public void setup(AttributeTable table, AttributeColumn[] columns) { + @Override + public void setup(Table table, Column[] columns) { this.table = table; this.columns = columns; } + @Override public void execute() { - Lookup.getDefault().lookup(AttributeColumnsMergeStrategiesController.class).interQuartileRangeNumberMerge(table, columns, columnTitle); + Lookup.getDefault().lookup(AttributeColumnsMergeStrategiesController.class) + .interQuartileRangeNumberMerge(table, columns, columnTitle); } + @Override public String getName() { return NbBundle.getMessage(InterQuartileRangeNumber.class, "InterQuartileRangeNumber.name"); } + @Override public String getDescription() { return NbBundle.getMessage(InterQuartileRangeNumber.class, "InterQuartileRangeNumber.description"); } + @Override public boolean canExecute() { - return AttributeUtils.getDefault().areAllNumberOrNumberListColumns(columns); + for (Column column : columns) { + if (!AttributeUtils.isNumberType(column.getTypeClass())) { + return false; + } + } + return true; } + @Override public ManipulatorUI getUI() { return new GeneralColumnTitleChooserUI(); } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 400; } + @Override public Icon getIcon() { return null; } - public AttributeTable getTable() { + @Override + public Table getTable() { return table; } + @Override public String getColumnTitle() { return columnTitle; } + @Override public void setColumnTitle(String columnTitle) { this.columnTitle = columnTitle; } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/InterQuartileRangeNumberBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/InterQuartileRangeNumberBuilder.java index aa5c1f5d59..50142cc3a1 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/InterQuartileRangeNumberBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/InterQuartileRangeNumberBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.merge; import org.gephi.datalab.spi.columns.merge.AttributeColumnsMergeStrategy; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for MedianNumber AttributeColumnsMergeStrategy. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=AttributeColumnsMergeStrategyBuilder.class) -public class InterQuartileRangeNumberBuilder implements AttributeColumnsMergeStrategyBuilder{ +@ServiceProvider(service = AttributeColumnsMergeStrategyBuilder.class) +public class InterQuartileRangeNumberBuilder implements AttributeColumnsMergeStrategyBuilder { + @Override public AttributeColumnsMergeStrategy getAttributeColumnsMergeStrategy() { return new InterQuartileRangeNumber(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/JoinNumberColumns.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/JoinNumberColumns.java index 17b3ceb022..843f4872fa 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/JoinNumberColumns.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/JoinNumberColumns.java @@ -1,115 +1,135 @@ /* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. + Copyright 2008-2010 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.merge; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; -import org.gephi.data.attributes.api.AttributeType; -import org.gephi.data.attributes.api.AttributeUtils; import org.gephi.datalab.api.AttributeColumnsMergeStrategiesController; import org.gephi.datalab.plugin.manipulators.columns.merge.ui.GeneralColumnTitleChooserUI; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.columns.merge.AttributeColumnsMergeStrategy; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Table; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; /** - * AttributeColumnsMergeStrategy that joins one or more number column into a number list column with AttributeType LIST_BIGDECIMAL - * @author Eduardo Ramos + * AttributeColumnsMergeStrategy that joins one or more number column into a number list column with AttributeType + * double[] + * + * @author Eduardo Ramos */ public class JoinNumberColumns implements AttributeColumnsMergeStrategy, GeneralColumnTitleChooser { private static final String SEPARATOR = ","; - private AttributeTable table; - private AttributeColumn[] columns; + private Table table; + private Column[] columns; private String columnTitle; - public void setup(AttributeTable table, AttributeColumn[] columns) { + @Override + public void setup(Table table, Column[] columns) { this.table = table; this.columns = columns; } + @Override public void execute() { - Lookup.getDefault().lookup(AttributeColumnsMergeStrategiesController.class).joinWithSeparatorMerge(table, columns, AttributeType.LIST_BIGDECIMAL, columnTitle, SEPARATOR); + Lookup.getDefault().lookup(AttributeColumnsMergeStrategiesController.class) + .joinWithSeparatorMerge(table, columns, double[].class, columnTitle, SEPARATOR); } + @Override public String getName() { return NbBundle.getMessage(JoinNumberColumns.class, "JoinNumberColumns.name"); } + @Override public String getDescription() { return NbBundle.getMessage(JoinNumberColumns.class, "JoinNumberColumns.description"); } + @Override public boolean canExecute() { - return AttributeUtils.getDefault().areAllNumberOrNumberListColumns(columns); + for (Column column : columns) { + if (!AttributeUtils.isNumberType(column.getTypeClass())) { + return false; + } + } + return true; } + @Override public ManipulatorUI getUI() { return new GeneralColumnTitleChooserUI(); } + @Override public int getType() { return 0; } + @Override public int getPosition() { return 100; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/join.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/join.svg", false); } - public AttributeTable getTable() { + @Override + public Table getTable() { return table; } + @Override public String getColumnTitle() { return columnTitle; } + @Override public void setColumnTitle(String columnTitle) { this.columnTitle = columnTitle; } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/JoinNumberColumnsBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/JoinNumberColumnsBuilder.java index b71dfc8148..f355141618 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/JoinNumberColumnsBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/JoinNumberColumnsBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.merge; import org.gephi.datalab.spi.columns.merge.AttributeColumnsMergeStrategy; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for JoinNumberColumns AttributeColumnsMergeStrategy. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=AttributeColumnsMergeStrategyBuilder.class) -public class JoinNumberColumnsBuilder implements AttributeColumnsMergeStrategyBuilder{ +@ServiceProvider(service = AttributeColumnsMergeStrategyBuilder.class) +public class JoinNumberColumnsBuilder implements AttributeColumnsMergeStrategyBuilder { + @Override public AttributeColumnsMergeStrategy getAttributeColumnsMergeStrategy() { return new JoinNumberColumns(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/JoinWithSeparator.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/JoinWithSeparator.java index d38e6b4d2a..a806ed708e 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/JoinWithSeparator.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/JoinWithSeparator.java @@ -39,15 +39,16 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.merge; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; import org.gephi.datalab.api.AttributeColumnsMergeStrategiesController; import org.gephi.datalab.plugin.manipulators.columns.merge.ui.JoinWithSeparatorUI; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.columns.merge.AttributeColumnsMergeStrategy; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Table; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; @@ -56,53 +57,65 @@ Development and Distribution License("CDDL") (collectively, the /** * AttributeColumnsMergeStrategy that joins columns of any type into a new column * using the separator string that the user provides. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class JoinWithSeparator implements AttributeColumnsMergeStrategy { public static final String SEPARATOR_SAVED_PREFERENCES = "JoinWithSeparator_Separator"; - private static final String DEFAULT_SEPARATOR = ","; - private AttributeTable table; - private AttributeColumn[] columns; + private static final String DEFAULT_SEPARATOR = ", "; + private Table table; + private Column[] columns; private String newColumnTitle, separator; - public void setup(AttributeTable table, AttributeColumn[] columns) { + @Override + public void setup(Table table, Column[] columns) { this.table = table; this.columns = columns; - separator=NbPreferences.forModule(JoinWithSeparator.class).get(SEPARATOR_SAVED_PREFERENCES, DEFAULT_SEPARATOR); + separator = + NbPreferences.forModule(JoinWithSeparator.class).get(SEPARATOR_SAVED_PREFERENCES, DEFAULT_SEPARATOR); } + @Override public void execute() { NbPreferences.forModule(JoinWithSeparator.class).put(SEPARATOR_SAVED_PREFERENCES, separator); - Lookup.getDefault().lookup(AttributeColumnsMergeStrategiesController.class).joinWithSeparatorMerge(table, columns, null, newColumnTitle, separator); + Lookup.getDefault().lookup(AttributeColumnsMergeStrategiesController.class) + .joinWithSeparatorMerge(table, columns, null, newColumnTitle, separator); } + @Override public String getName() { return NbBundle.getMessage(JoinWithSeparator.class, "JoinWithSeparator.name"); } + @Override public String getDescription() { return NbBundle.getMessage(JoinWithSeparator.class, "JoinWithSeparator.description"); } + @Override public boolean canExecute() { return true; } + @Override public ManipulatorUI getUI() { return new JoinWithSeparatorUI(); } + @Override public int getType() { return 0; } + @Override public int getPosition() { return 0; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/join.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/join.svg", false); } public String getNewColumnTitle() { @@ -121,7 +134,7 @@ public void setSeparator(String separator) { this.separator = separator; } - public AttributeTable getTable() { + public Table getTable() { return table; } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/JoinWithSeparatorBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/JoinWithSeparatorBuilder.java index 9d3f36e935..2dd124007c 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/JoinWithSeparatorBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/JoinWithSeparatorBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.merge; import org.gephi.datalab.spi.columns.merge.AttributeColumnsMergeStrategy; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for JoinWithSeparator AttributeColumnsMergeStrategy. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=AttributeColumnsMergeStrategyBuilder.class) -public class JoinWithSeparatorBuilder implements AttributeColumnsMergeStrategyBuilder{ +@ServiceProvider(service = AttributeColumnsMergeStrategyBuilder.class) +public class JoinWithSeparatorBuilder implements AttributeColumnsMergeStrategyBuilder { + @Override public AttributeColumnsMergeStrategy getAttributeColumnsMergeStrategy() { return new JoinWithSeparator(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/MaximumNumber.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/MaximumNumber.java index f7389114a5..6f9a2d4ae8 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/MaximumNumber.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/MaximumNumber.java @@ -39,16 +39,17 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.merge; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; -import org.gephi.data.attributes.api.AttributeUtils; import org.gephi.datalab.api.AttributeColumnsMergeStrategiesController; import org.gephi.datalab.plugin.manipulators.columns.merge.ui.GeneralColumnTitleChooserUI; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.columns.merge.AttributeColumnsMergeStrategy; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Table; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; @@ -56,59 +57,78 @@ Development and Distribution License("CDDL") (collectively, the /** * AttributeColumnsMergeStrategy for any combination of number or number list columns that * calculates the maximum value of all the values and creates a new BigDecimal column with the result of each row. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class MaximumNumber implements AttributeColumnsMergeStrategy, GeneralColumnTitleChooser { - private AttributeTable table; - private AttributeColumn[] columns; + private Table table; + private Column[] columns; private String columnTitle; - public void setup(AttributeTable table, AttributeColumn[] columns) { + @Override + public void setup(Table table, Column[] columns) { this.table = table; this.columns = columns; } + @Override public void execute() { - Lookup.getDefault().lookup(AttributeColumnsMergeStrategiesController.class).maxValueNumbersMerge(table, columns, columnTitle); + Lookup.getDefault().lookup(AttributeColumnsMergeStrategiesController.class) + .maxValueNumbersMerge(table, columns, columnTitle); } + @Override public String getName() { return NbBundle.getMessage(MaximumNumber.class, "MaximumNumber.name"); } + @Override public String getDescription() { return NbBundle.getMessage(MaximumNumber.class, "MaximumNumber.description"); } + @Override public boolean canExecute() { - return AttributeUtils.getDefault().areAllNumberOrNumberListColumns(columns); + for (Column column : columns) { + if (!AttributeUtils.isNumberType(column.getTypeClass())) { + return false; + } + } + return true; } + @Override public ManipulatorUI getUI() { return new GeneralColumnTitleChooserUI(); } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 700; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/plus-white.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/plus-white.svg", false); } - public AttributeTable getTable() { + @Override + public Table getTable() { return table; } + @Override public String getColumnTitle() { return columnTitle; } + @Override public void setColumnTitle(String columnTitle) { this.columnTitle = columnTitle; } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/MaximumNumberBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/MaximumNumberBuilder.java index 8737905217..06aa0f85ee 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/MaximumNumberBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/MaximumNumberBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.merge; import org.gephi.datalab.spi.columns.merge.AttributeColumnsMergeStrategy; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for MaximumNumber AttributeColumnsMergeStrategy. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=AttributeColumnsMergeStrategyBuilder.class) -public class MaximumNumberBuilder implements AttributeColumnsMergeStrategyBuilder{ +@ServiceProvider(service = AttributeColumnsMergeStrategyBuilder.class) +public class MaximumNumberBuilder implements AttributeColumnsMergeStrategyBuilder { + @Override public AttributeColumnsMergeStrategy getAttributeColumnsMergeStrategy() { return new MaximumNumber(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/MedianNumber.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/MedianNumber.java index 2c127f9aaf..7b173646c9 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/MedianNumber.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/MedianNumber.java @@ -39,16 +39,17 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.merge; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; -import org.gephi.data.attributes.api.AttributeUtils; import org.gephi.datalab.api.AttributeColumnsMergeStrategiesController; import org.gephi.datalab.plugin.manipulators.columns.merge.ui.GeneralColumnTitleChooserUI; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.columns.merge.AttributeColumnsMergeStrategy; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Table; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; @@ -56,59 +57,78 @@ Development and Distribution License("CDDL") (collectively, the /** * AttributeColumnsMergeStrategy for any combination of number or number list columns that * calculates the median of all the values and creates a new BigDecimal column with the result of each row. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class MedianNumber implements AttributeColumnsMergeStrategy, GeneralColumnTitleChooser { - private AttributeTable table; - private AttributeColumn[] columns; + private Table table; + private Column[] columns; private String columnTitle; - public void setup(AttributeTable table, AttributeColumn[] columns) { + @Override + public void setup(Table table, Column[] columns) { this.table = table; this.columns = columns; } + @Override public void execute() { - Lookup.getDefault().lookup(AttributeColumnsMergeStrategiesController.class).medianNumberMerge(table, columns, columnTitle); + Lookup.getDefault().lookup(AttributeColumnsMergeStrategiesController.class) + .medianNumberMerge(table, columns, columnTitle); } + @Override public String getName() { return NbBundle.getMessage(MedianNumber.class, "MedianNumber.name"); } + @Override public String getDescription() { return NbBundle.getMessage(MedianNumber.class, "MedianNumber.description"); } + @Override public boolean canExecute() { - return AttributeUtils.getDefault().areAllNumberOrNumberListColumns(columns); + for (Column column : columns) { + if (!AttributeUtils.isNumberType(column.getTypeClass())) { + return false; + } + } + return true; } + @Override public ManipulatorUI getUI() { return new GeneralColumnTitleChooserUI(); } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 200; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/ui-slider-050.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/ui-slider-050.svg", false); } - public AttributeTable getTable() { + @Override + public Table getTable() { return table; } + @Override public String getColumnTitle() { return columnTitle; } + @Override public void setColumnTitle(String columnTitle) { this.columnTitle = columnTitle; } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/MedianNumberBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/MedianNumberBuilder.java index 76f8a65dba..56143f213e 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/MedianNumberBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/MedianNumberBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.merge; import org.gephi.datalab.spi.columns.merge.AttributeColumnsMergeStrategy; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for MedianNumber AttributeColumnsMergeStrategy. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=AttributeColumnsMergeStrategyBuilder.class) -public class MedianNumberBuilder implements AttributeColumnsMergeStrategyBuilder{ +@ServiceProvider(service = AttributeColumnsMergeStrategyBuilder.class) +public class MedianNumberBuilder implements AttributeColumnsMergeStrategyBuilder { + @Override public AttributeColumnsMergeStrategy getAttributeColumnsMergeStrategy() { return new MedianNumber(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/MinimumNumber.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/MinimumNumber.java index d3065a022e..98039ca4dd 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/MinimumNumber.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/MinimumNumber.java @@ -1,107 +1,124 @@ /* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. + Copyright 2008-2010 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.merge; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; -import org.gephi.data.attributes.api.AttributeUtils; import org.gephi.datalab.api.AttributeColumnsMergeStrategiesController; import org.gephi.datalab.plugin.manipulators.columns.merge.ui.GeneralColumnTitleChooserUI; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.columns.merge.AttributeColumnsMergeStrategy; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Table; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; /** - * AttributeColumnsMergeStrategy for any combination of number or number list columns that - * calculates the minimum value of all the values and creates a new BigDecimal column with the result of each row. - * @author Eduardo Ramos + * AttributeColumnsMergeStrategy for any combination of number or number list columns that calculates the minimum value of all the values and creates a new BigDecimal column with the result of each + * row. + * + * @author Eduardo Ramos */ public class MinimumNumber implements AttributeColumnsMergeStrategy { - private AttributeTable table; - private AttributeColumn[] columns; + private Table table; + private Column[] columns; private String columnTitle; - public void setup(AttributeTable table, AttributeColumn[] columns) { + @Override + public void setup(Table table, Column[] columns) { this.table = table; this.columns = columns; } + @Override public void execute() { - Lookup.getDefault().lookup(AttributeColumnsMergeStrategiesController.class).minValueNumbersMerge(table, columns, columnTitle); + Lookup.getDefault().lookup(AttributeColumnsMergeStrategiesController.class) + .minValueNumbersMerge(table, columns, columnTitle); } + @Override public String getName() { return NbBundle.getMessage(MinimumNumber.class, "MinimumNumber.name"); } + @Override public String getDescription() { return NbBundle.getMessage(MinimumNumber.class, "MinimumNumber.description"); } + @Override public boolean canExecute() { - return AttributeUtils.getDefault().areAllNumberOrNumberListColumns(columns); + for (Column column : columns) { + if (!AttributeUtils.isNumberType(column.getTypeClass())) { + return false; + } + } + return true; } + @Override public ManipulatorUI getUI() { return new GeneralColumnTitleChooserUI(); } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 600; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/minus-white.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/minus-white.svg", false); } - public AttributeTable getTable() { + public Table getTable() { return table; } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/MinimumNumberBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/MinimumNumberBuilder.java index abc735bfe8..57b113ec94 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/MinimumNumberBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/MinimumNumberBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.merge; @@ -48,11 +49,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for MinimumNumber AttributeColumnsMergeStrategy. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=AttributeColumnsMergeStrategyBuilder.class) -public class MinimumNumberBuilder implements AttributeColumnsMergeStrategyBuilder{ +@ServiceProvider(service = AttributeColumnsMergeStrategyBuilder.class) +public class MinimumNumberBuilder implements AttributeColumnsMergeStrategyBuilder { + @Override public AttributeColumnsMergeStrategy getAttributeColumnsMergeStrategy() { return new MinimumNumber(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/SumNumbers.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/SumNumbers.java index 9a4b24c008..cc5780b95e 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/SumNumbers.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/SumNumbers.java @@ -39,16 +39,17 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.merge; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; -import org.gephi.data.attributes.api.AttributeUtils; import org.gephi.datalab.api.AttributeColumnsMergeStrategiesController; import org.gephi.datalab.plugin.manipulators.columns.merge.ui.GeneralColumnTitleChooserUI; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.columns.merge.AttributeColumnsMergeStrategy; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Table; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; @@ -56,59 +57,78 @@ Development and Distribution License("CDDL") (collectively, the /** * AttributeColumnsMergeStrategy for any combination of number or number list columns that * calculates the sum of all the values and creates a new BigDecimal column with the result of each row. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class SumNumbers implements AttributeColumnsMergeStrategy, GeneralColumnTitleChooser { - private AttributeTable table; - private AttributeColumn[] columns; + private Table table; + private Column[] columns; private String columnTitle; - public void setup(AttributeTable table, AttributeColumn[] columns) { + @Override + public void setup(Table table, Column[] columns) { this.table = table; this.columns = columns; } + @Override public void execute() { - Lookup.getDefault().lookup(AttributeColumnsMergeStrategiesController.class).sumNumbersMerge(table, columns, columnTitle); + Lookup.getDefault().lookup(AttributeColumnsMergeStrategiesController.class) + .sumNumbersMerge(table, columns, columnTitle); } + @Override public String getName() { return NbBundle.getMessage(SumNumbers.class, "SumNumbers.name"); } + @Override public String getDescription() { return NbBundle.getMessage(SumNumbers.class, "SumNumbers.description"); } + @Override public boolean canExecute() { - return AttributeUtils.getDefault().areAllNumberOrNumberListColumns(columns); + for (Column column : columns) { + if (!AttributeUtils.isNumberType(column.getTypeClass())) { + return false; + } + } + return true; } + @Override public ManipulatorUI getUI() { return new GeneralColumnTitleChooserUI(); } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 500; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/plus-circle.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/plus-circle.svg", false); } - public AttributeTable getTable() { + @Override + public Table getTable() { return table; } + @Override public String getColumnTitle() { return columnTitle; } + @Override public void setColumnTitle(String columnTitle) { this.columnTitle = columnTitle; } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/SumNumbersBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/SumNumbersBuilder.java index 0bb4a72c16..c16caed726 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/SumNumbersBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/SumNumbersBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.merge; @@ -48,11 +49,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for SumNumbers AttributeColumnsMergeStrategy. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=AttributeColumnsMergeStrategyBuilder.class) -public class SumNumbersBuilder implements AttributeColumnsMergeStrategyBuilder{ +@ServiceProvider(service = AttributeColumnsMergeStrategyBuilder.class) +public class SumNumbersBuilder implements AttributeColumnsMergeStrategyBuilder { + @Override public AttributeColumnsMergeStrategy getAttributeColumnsMergeStrategy() { return new SumNumbers(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ThirdQuartileNumber.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ThirdQuartileNumber.java index 6c32c602fe..caed14fe5b 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ThirdQuartileNumber.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ThirdQuartileNumber.java @@ -39,68 +39,85 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.merge; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; -import org.gephi.data.attributes.api.AttributeUtils; import org.gephi.datalab.api.AttributeColumnsMergeStrategiesController; import org.gephi.datalab.plugin.manipulators.columns.merge.ui.GeneralColumnTitleChooserUI; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.columns.merge.AttributeColumnsMergeStrategy; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Table; import org.openide.util.Lookup; import org.openide.util.NbBundle; /** * AttributeColumnsMergeStrategy for any combination of number or number list columns that * calculates the thrid quartile (Q3) of all the values and creates a new BigDecimal column with the result of each row. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class ThirdQuartileNumber implements AttributeColumnsMergeStrategy { - private AttributeTable table; - private AttributeColumn[] columns; + private Table table; + private Column[] columns; private String columnTitle; - public void setup(AttributeTable table, AttributeColumn[] columns) { + @Override + public void setup(Table table, Column[] columns) { this.table = table; this.columns = columns; } + @Override public void execute() { - Lookup.getDefault().lookup(AttributeColumnsMergeStrategiesController.class).thirdQuartileNumberMerge(table, columns, columnTitle); + Lookup.getDefault().lookup(AttributeColumnsMergeStrategiesController.class) + .thirdQuartileNumberMerge(table, columns, columnTitle); } + @Override public String getName() { return NbBundle.getMessage(ThirdQuartileNumber.class, "ThirdQuartileNumber.name"); } + @Override public String getDescription() { return NbBundle.getMessage(ThirdQuartileNumber.class, "ThirdQuartileNumber.description"); } + @Override public boolean canExecute() { - return AttributeUtils.getDefault().areAllNumberOrNumberListColumns(columns); + for (Column column : columns) { + if (!AttributeUtils.isNumberType(column.getTypeClass())) { + return false; + } + } + return true; } + @Override public ManipulatorUI getUI() { return new GeneralColumnTitleChooserUI(); } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 300; } + @Override public Icon getIcon() { return null; } - public AttributeTable getTable() { + public Table getTable() { return table; } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ThirdQuartileNumberBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ThirdQuartileNumberBuilder.java index 6c4d05ce8e..cc9decca3a 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ThirdQuartileNumberBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ThirdQuartileNumberBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.merge; @@ -48,11 +49,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for MedianNumber AttributeColumnsMergeStrategy. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=AttributeColumnsMergeStrategyBuilder.class) -public class ThirdQuartileNumberBuilder implements AttributeColumnsMergeStrategyBuilder{ +@ServiceProvider(service = AttributeColumnsMergeStrategyBuilder.class) +public class ThirdQuartileNumberBuilder implements AttributeColumnsMergeStrategyBuilder { + @Override public AttributeColumnsMergeStrategy getAttributeColumnsMergeStrategy() { return new ThirdQuartileNumber(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/BooleanLogicOperationsUI.form b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/BooleanLogicOperationsUI.form index ce1f9856df..6c43d64b01 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/BooleanLogicOperationsUI.form +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/BooleanLogicOperationsUI.form @@ -1,4 +1,4 @@ - +
    diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/BooleanLogicOperationsUI.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/BooleanLogicOperationsUI.java index 76461c1e1b..6364391983 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/BooleanLogicOperationsUI.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/BooleanLogicOperationsUI.java @@ -1,44 +1,45 @@ /* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. + Copyright 2008-2010 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.merge.ui; import javax.swing.JComboBox; @@ -46,73 +47,90 @@ Development and Distribution License("CDDL") (collectively, the import javax.swing.JPanel; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; import org.gephi.datalab.api.AttributeColumnsMergeStrategiesController.BooleanOperations; import org.gephi.datalab.plugin.manipulators.columns.merge.BooleanLogicOperations; import org.gephi.datalab.spi.DialogControls; import org.gephi.datalab.spi.Manipulator; import org.gephi.datalab.spi.ManipulatorUI; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Table; import org.gephi.ui.utils.ColumnTitleValidator; import org.netbeans.validation.api.ui.ValidationGroup; -import org.netbeans.validation.api.ui.ValidationPanel; +import org.netbeans.validation.api.ui.swing.ValidationPanel; /** * UI for BooleanLogicOperations AttributeColumnsMergeStrategy - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class BooleanLogicOperationsUI extends javax.swing.JPanel implements ManipulatorUI { private BooleanLogicOperations manipulator; private JComboBox[] operationSelectors; - private AttributeTable table; + private Table table; private DialogControls dialogControls; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel descriptionLabel; + private javax.swing.JPanel panel; + private javax.swing.JScrollPane scroll; + private javax.swing.JLabel titleLabel; + private javax.swing.JTextField titleTextField; + // End of variables declaration//GEN-END:variables - /** Creates new form BooleanLogicOperationsUI */ + /** + * Creates new form BooleanLogicOperationsUI + */ public BooleanLogicOperationsUI() { initComponents(); titleTextField.getDocument().addDocumentListener(new DocumentListener() { - + @Override public void insertUpdate(DocumentEvent e) { refreshOkButton(); } + @Override public void removeUpdate(DocumentEvent e) { refreshOkButton(); } + @Override public void changedUpdate(DocumentEvent e) { refreshOkButton(); } - private void refreshOkButton(){ - String text=titleTextField.getText(); - dialogControls.setOkButtonEnabled(text!=null&&!text.isEmpty()&&!table.hasColumn(text));//Title not empty and not repeated. + private void refreshOkButton() { + String text = titleTextField.getText(); + dialogControls.setOkButtonEnabled( + text != null && !text.isEmpty() && !table.hasColumn(text));//Title not empty and not repeated. } }); } + @Override public void setup(Manipulator m, DialogControls dialogControls) { manipulator = (BooleanLogicOperations) m; - this.dialogControls=dialogControls; - this.table=manipulator.getTable(); + this.dialogControls = dialogControls; + this.table = manipulator.getTable(); prepareColumnsAndOperations(); } + @Override public void unSetup() { - BooleanOperations[] booleanOperations=new BooleanOperations[operationSelectors.length]; + BooleanOperations[] booleanOperations = new BooleanOperations[operationSelectors.length]; for (int i = 0; i < booleanOperations.length; i++) { - booleanOperations[i]=(BooleanOperations) operationSelectors[i].getSelectedItem(); + booleanOperations[i] = (BooleanOperations) operationSelectors[i].getSelectedItem(); } manipulator.setBooleanOperations(booleanOperations); manipulator.setNewColumnTitle(titleTextField.getText()); } + @Override public String getDisplayName() { return manipulator.getName(); } + @Override public JPanel getSettingsPanel() { ValidationPanel validationPanel = new ValidationPanel(); validationPanel.setInnerComponent(this); @@ -124,17 +142,18 @@ public JPanel getSettingsPanel() { return validationPanel; } + @Override public boolean isModal() { return true; } private void prepareColumnsAndOperations() { - AttributeColumn[] columns = manipulator.getColumns(); + Column[] columns = manipulator.getColumns(); operationSelectors = new JComboBox[columns.length - 1]; JLabel columnLabel; for (int i = 0; i < columns.length; i++) { - columnLabel=new JLabel(columns[i].getTitle()); + columnLabel = new JLabel(columns[i].getTitle()); columnLabel.setHorizontalAlignment(JLabel.CENTER); panel.add(columnLabel); if (i < columns.length - 1) { @@ -149,10 +168,8 @@ private JComboBox prepareOperationSelector() { return selector; } - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. + /** + * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The content of this method is always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents @@ -164,49 +181,47 @@ private void initComponents() { titleLabel = new javax.swing.JLabel(); titleTextField = new javax.swing.JTextField(); - descriptionLabel.setText(org.openide.util.NbBundle.getMessage(BooleanLogicOperationsUI.class, "BooleanLogicOperationsUI.descriptionLabel.text")); // NOI18N + descriptionLabel.setText(org.openide.util.NbBundle + .getMessage(BooleanLogicOperationsUI.class, "BooleanLogicOperationsUI.descriptionLabel.text")); // NOI18N panel.setLayout(new java.awt.GridLayout(0, 1, 0, 20)); scroll.setViewportView(panel); - titleLabel.setText(org.openide.util.NbBundle.getMessage(BooleanLogicOperationsUI.class, "BooleanLogicOperationsUI.titleLabel.text")); // NOI18N + titleLabel.setText(org.openide.util.NbBundle + .getMessage(BooleanLogicOperationsUI.class, "BooleanLogicOperationsUI.titleLabel.text")); // NOI18N - titleTextField.setText(org.openide.util.NbBundle.getMessage(BooleanLogicOperationsUI.class, "BooleanLogicOperationsUI.titleTextField.text")); // NOI18N + titleTextField.setText(org.openide.util.NbBundle + .getMessage(BooleanLogicOperationsUI.class, "BooleanLogicOperationsUI.titleTextField.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 254, Short.MAX_VALUE) - .addComponent(scroll, javax.swing.GroupLayout.DEFAULT_SIZE, 254, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addComponent(titleLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(titleTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 135, Short.MAX_VALUE))) - .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 254, Short.MAX_VALUE) + .addComponent(scroll, javax.swing.GroupLayout.DEFAULT_SIZE, 254, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addComponent(titleLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(titleTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 135, Short.MAX_VALUE))) + .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(titleLabel) - .addComponent(titleTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(descriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(scroll, javax.swing.GroupLayout.DEFAULT_SIZE, 105, Short.MAX_VALUE) - .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(titleLabel) + .addComponent(titleTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(descriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 26, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(scroll, javax.swing.GroupLayout.DEFAULT_SIZE, 105, Short.MAX_VALUE) + .addContainerGap()) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JLabel descriptionLabel; - private javax.swing.JPanel panel; - private javax.swing.JScrollPane scroll; - private javax.swing.JLabel titleLabel; - private javax.swing.JTextField titleTextField; - // End of variables declaration//GEN-END:variables } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/CreateTimeIntervalUI.form b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/CreateTimeIntervalUI.form index 8a0d19aa2c..ea00f7a87b 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/CreateTimeIntervalUI.form +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/CreateTimeIntervalUI.form @@ -20,7 +20,7 @@ - + diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/CreateTimeIntervalUI.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/CreateTimeIntervalUI.java index 8eaae3b458..05082c9df8 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/CreateTimeIntervalUI.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/CreateTimeIntervalUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.merge.ui; import java.text.ParseException; @@ -48,22 +49,22 @@ Development and Distribution License("CDDL") (collectively, the import javax.swing.JPanel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import org.gephi.data.attributes.api.AttributeColumn; import org.gephi.datalab.plugin.manipulators.columns.merge.CreateTimeInterval; import org.gephi.datalab.spi.DialogControls; import org.gephi.datalab.spi.Manipulator; import org.gephi.datalab.spi.ManipulatorUI; +import org.gephi.graph.api.Column; import org.netbeans.validation.api.Problems; import org.netbeans.validation.api.Validator; import org.netbeans.validation.api.ui.ValidationGroup; -import org.netbeans.validation.api.ui.ValidationPanel; +import org.netbeans.validation.api.ui.swing.ValidationPanel; import org.openide.util.NbBundle; import org.openide.util.NbPreferences; /** * UI for CreateTimeInterval * - * @author Eduardo Ramos + * @author Eduardo Ramos */ public class CreateTimeIntervalUI extends javax.swing.JPanel implements ManipulatorUI { @@ -78,6 +79,26 @@ public class CreateTimeIntervalUI extends javax.swing.JPanel implements Manipula private DialogControls dialogControls; private ValidationPanel validationPanel; private ColumnWrapper column1, column2; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.ButtonGroup buttonGroup; + private javax.swing.JLabel dateDefaultEndLabel; + private javax.swing.JLabel dateDefaultStartLabel; + private javax.swing.JComboBox dateFormatComboBox; + private javax.swing.JLabel dateFormatLabel; + private org.jdesktop.swingx.JXDatePicker defaultEndDatePicker; + private javax.swing.JLabel defaultEndNumberLabel; + private javax.swing.JTextField defaultEndNumberText; + private org.jdesktop.swingx.JXDatePicker defaultStartDatePicker; + private javax.swing.JLabel defaultStartNumberLabel; + private javax.swing.JTextField defaultStartNumberText; + private javax.swing.JComboBox endColumnComboBox; + private javax.swing.JLabel endColumnLabel; + private org.jdesktop.swingx.JXHeader header; + private javax.swing.JRadioButton parseDatesRadioButton; + private javax.swing.JRadioButton parseNumbersRadioButton; + private javax.swing.JComboBox startColumnComboBox; + private javax.swing.JLabel startColumnLabel; + // End of variables declaration//GEN-END:variables /** * Creates new form CreateTimeIntervalUI @@ -85,6 +106,9 @@ public class CreateTimeIntervalUI extends javax.swing.JPanel implements Manipula public CreateTimeIntervalUI() { initComponents(); + defaultStartDatePicker.setFormats("yyyy-MM-dd"); + defaultEndDatePicker.setFormats("yyyy-MM-dd"); + //Add some common date formats to choose: dateFormatComboBox.addItem("yyyy-MM-dd"); dateFormatComboBox.addItem("yyyy/MM/dd"); @@ -94,18 +118,26 @@ public CreateTimeIntervalUI() { dateFormatComboBox.addItem("yyyy/MM/dd HH:mm:ss"); dateFormatComboBox.addItem("dd-MM-yyyy HH:mm:ss"); dateFormatComboBox.addItem("dd/MM/yyyy HH:mm:ss"); + dateFormatComboBox.addItem("yyyy-MM-dd'T'HH:mm:ss"); + dateFormatComboBox.addItem("yyyy/MM/dd'T'HH:mm:ss"); + dateFormatComboBox.addItem("dd-MM-yyyy'T'HH:mm:ss"); + dateFormatComboBox.addItem("dd/MM/yyyy'T'HH:mm:ss"); dateFormatComboBox.setSelectedIndex(0); } - private AttributeColumn getComboBoxColumn(JComboBox comboBox) { + private Column getComboBoxColumn(JComboBox comboBox) { return ((ColumnWrapper) comboBox.getSelectedItem()).column; } private void readSavedParameters() { - parseNumbersRadioButton.setSelected(NbPreferences.forModule(CreateTimeIntervalUI.class).getBoolean(PARSE_NUMBERS_SAVED_PARAMETER, true)); - defaultStartNumberText.setText(NbPreferences.forModule(CreateTimeIntervalUI.class).get(START_NUMBER_SAVED_PARAMETER, "")); - defaultEndNumberText.setText(NbPreferences.forModule(CreateTimeIntervalUI.class).get(END_NUMBER_SAVED_PARAMETER, "")); - dateFormatComboBox.setSelectedItem(NbPreferences.forModule(CreateTimeIntervalUI.class).get(DATE_FORMAT_SAVED_PARAMETER_STRING, "yyyy-MM-dd")); + parseNumbersRadioButton.setSelected( + NbPreferences.forModule(CreateTimeIntervalUI.class).getBoolean(PARSE_NUMBERS_SAVED_PARAMETER, true)); + defaultStartNumberText + .setText(NbPreferences.forModule(CreateTimeIntervalUI.class).get(START_NUMBER_SAVED_PARAMETER, "")); + defaultEndNumberText + .setText(NbPreferences.forModule(CreateTimeIntervalUI.class).get(END_NUMBER_SAVED_PARAMETER, "")); + dateFormatComboBox.setSelectedItem( + NbPreferences.forModule(CreateTimeIntervalUI.class).get(DATE_FORMAT_SAVED_PARAMETER_STRING, "yyyy-MM-dd")); try { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String date = NbPreferences.forModule(CreateTimeIntervalUI.class).get(START_DATE_SAVED_PARAMETER, ""); @@ -121,10 +153,14 @@ private void readSavedParameters() { } private void storeSavedParameters() { - NbPreferences.forModule(CreateTimeIntervalUI.class).putBoolean(PARSE_NUMBERS_SAVED_PARAMETER, parseNumbersRadioButton.isSelected()); - NbPreferences.forModule(CreateTimeIntervalUI.class).put(START_NUMBER_SAVED_PARAMETER, defaultStartNumberText.getText()); - NbPreferences.forModule(CreateTimeIntervalUI.class).put(END_NUMBER_SAVED_PARAMETER, defaultEndNumberText.getText()); - NbPreferences.forModule(CreateTimeIntervalUI.class).put(DATE_FORMAT_SAVED_PARAMETER_STRING, dateFormatComboBox.getSelectedItem().toString()); + NbPreferences.forModule(CreateTimeIntervalUI.class) + .putBoolean(PARSE_NUMBERS_SAVED_PARAMETER, parseNumbersRadioButton.isSelected()); + NbPreferences.forModule(CreateTimeIntervalUI.class) + .put(START_NUMBER_SAVED_PARAMETER, defaultStartNumberText.getText()); + NbPreferences.forModule(CreateTimeIntervalUI.class) + .put(END_NUMBER_SAVED_PARAMETER, defaultEndNumberText.getText()); + NbPreferences.forModule(CreateTimeIntervalUI.class) + .put(DATE_FORMAT_SAVED_PARAMETER_STRING, dateFormatComboBox.getSelectedItem().toString()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date; date = defaultStartDatePicker.getDate(); @@ -137,10 +173,11 @@ private void storeSavedParameters() { } } + @Override public void setup(Manipulator m, DialogControls dialogControls) { this.manipulator = (CreateTimeInterval) m; this.dialogControls = dialogControls; - AttributeColumn[] columns = manipulator.getColumns(); + Column[] columns = manipulator.getColumns(); column1 = new ColumnWrapper(columns[0]); if (columns.length == 2) {//2 columns were chosen to merge column2 = new ColumnWrapper(columns[1]); @@ -151,7 +188,7 @@ public void setup(Manipulator m, DialogControls dialogControls) { startColumnComboBox.addItem(column2); endColumnComboBox.addItem(column1); endColumnComboBox.addItem(column2); - if (columns.length == 2) {//Make possible to choose null column even when 2 columns were chosen to merge + if (columns.length == 2) {//Make possible to choose null column even when 2 columns were chosen to merge startColumnComboBox.addItem(new ColumnWrapper(null)); endColumnComboBox.addItem(new ColumnWrapper(null)); } @@ -163,6 +200,7 @@ public void setup(Manipulator m, DialogControls dialogControls) { refreshOkButton(); } + @Override public void unSetup() { if (dialogControls.isOkButtonEnabled()) { boolean parseNumbers = parseNumbersRadioButton.isSelected(); @@ -183,13 +221,17 @@ public void unSetup() { } else { SimpleDateFormat dateFormat = new SimpleDateFormat(dateFormatComboBox.getSelectedItem().toString()); manipulator.setDateFormat(dateFormat); - manipulator.setStartDate(defaultStartDatePicker.getDate() != null ? dateFormat.format(defaultStartDatePicker.getDate()) : null); - manipulator.setEndDate(defaultEndDatePicker.getDate() != null ? dateFormat.format(defaultEndDatePicker.getDate()) : null); + manipulator.setStartDate( + defaultStartDatePicker.getDate() != null ? dateFormat.format(defaultStartDatePicker.getDate()) : + null); + manipulator.setEndDate( + defaultEndDatePicker.getDate() != null ? dateFormat.format(defaultEndDatePicker.getDate()) : null); } } storeSavedParameters(); } + @Override public String getDisplayName() { return manipulator.getName(); } @@ -201,24 +243,35 @@ private void buildValidationPanel() { ValidationGroup group = validationPanel.getValidationGroup(); group.add(dateFormatComboBox, new Validator() { + + @Override + public Class modelType() { + return String.class; + } + @Override - public boolean validate(Problems prblms, String string, String t) { + public void validate(Problems prblms, String string, String t) { boolean valid = validateDateFormat(t); - if(!valid){ - prblms.add(NbBundle.getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.invalid.dateformat")); + if (!valid) { + prblms.add( + NbBundle.getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.invalid.dateformat")); } - return valid; } }); Validator emptyOrNumberValidator = new Validator() { + + @Override + public Class modelType() { + return String.class; + } + @Override - public boolean validate(Problems prblms, String string, String t) { + public void validate(Problems prblms, String string, String t) { boolean valid = validateNumberOrEmpty(t); - if(!valid){ + if (!valid) { prblms.add(NbBundle.getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.invalid.number")); } - return valid; } }; group.add(defaultStartNumberText, emptyOrNumberValidator); @@ -232,11 +285,13 @@ public void stateChanged(ChangeEvent e) { }); } + @Override public JPanel getSettingsPanel() { return validationPanel; } + @Override public boolean isModal() { return true; } @@ -266,8 +321,9 @@ private boolean validateDateFormat(String dateFormat) { } private void refreshOkButton() { - boolean enabled = getComboBoxColumn(startColumnComboBox) != null || getComboBoxColumn(endColumnComboBox) != null;//At least 1 column not null - enabled &= validationPanel != null && !validationPanel.isProblem(); + boolean enabled = getComboBoxColumn(startColumnComboBox) != null || + getComboBoxColumn(endColumnComboBox) != null;//At least 1 column not null + enabled &= validationPanel != null && !validationPanel.isFatalProblem(); dialogControls.setOkButtonEnabled(enabled); } @@ -286,20 +342,6 @@ private void refreshTimeParseMode() { refreshOkButton(); } - private class ColumnWrapper { - - private AttributeColumn column; - - public ColumnWrapper(AttributeColumn column) { - this.column = column; - } - - @Override - public String toString() { - return column != null ? column.getTitle() : ""; - } - } - /** * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The content of this method is always regenerated by the Form Editor. */ @@ -326,37 +368,47 @@ private void initComponents() { defaultStartNumberText = new javax.swing.JTextField(); defaultEndNumberText = new javax.swing.JTextField(); - startColumnLabel.setText(org.openide.util.NbBundle.getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.startColumnLabel.text")); // NOI18N + startColumnLabel.setText(org.openide.util.NbBundle + .getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.startColumnLabel.text")); // NOI18N startColumnComboBox.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { startColumnComboBoxActionPerformed(evt); } }); endColumnComboBox.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { endColumnComboBoxActionPerformed(evt); } }); - endColumnLabel.setText(org.openide.util.NbBundle.getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.endColumnLabel.text")); // NOI18N + endColumnLabel.setText(org.openide.util.NbBundle + .getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.endColumnLabel.text")); // NOI18N buttonGroup.add(parseNumbersRadioButton); parseNumbersRadioButton.setSelected(true); - parseNumbersRadioButton.setText(org.openide.util.NbBundle.getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.parseNumbersRadioButton.text")); // NOI18N + parseNumbersRadioButton.setText(org.openide.util.NbBundle + .getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.parseNumbersRadioButton.text")); // NOI18N parseNumbersRadioButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { parseNumbersRadioButtonActionPerformed(evt); } }); - header.setDescription(org.openide.util.NbBundle.getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.header.description")); // NOI18N - header.setTitle(org.openide.util.NbBundle.getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.header.title")); // NOI18N + header.setDescription(org.openide.util.NbBundle + .getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.header.description")); // NOI18N + header.setTitle(org.openide.util.NbBundle + .getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.header.title")); // NOI18N buttonGroup.add(parseDatesRadioButton); - parseDatesRadioButton.setText(org.openide.util.NbBundle.getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.parseDatesRadioButton.text")); // NOI18N + parseDatesRadioButton.setText(org.openide.util.NbBundle + .getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.parseDatesRadioButton.text")); // NOI18N parseDatesRadioButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { parseDatesRadioButtonActionPerformed(evt); } @@ -364,143 +416,170 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { defaultStartDatePicker.setEnabled(false); - dateDefaultStartLabel.setText(org.openide.util.NbBundle.getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.dateDefaultStartLabel.text")); // NOI18N + dateDefaultStartLabel.setText(org.openide.util.NbBundle + .getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.dateDefaultStartLabel.text")); // NOI18N dateDefaultStartLabel.setEnabled(false); defaultEndDatePicker.setEnabled(false); - dateDefaultEndLabel.setText(org.openide.util.NbBundle.getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.dateDefaultEndLabel.text")); // NOI18N + dateDefaultEndLabel.setText(org.openide.util.NbBundle + .getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.dateDefaultEndLabel.text")); // NOI18N dateDefaultEndLabel.setEnabled(false); - dateFormatLabel.setText(org.openide.util.NbBundle.getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.dateFormatLabel.text")); // NOI18N + dateFormatLabel.setText(org.openide.util.NbBundle + .getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.dateFormatLabel.text")); // NOI18N dateFormatLabel.setEnabled(false); dateFormatComboBox.setEditable(true); dateFormatComboBox.setEnabled(false); - defaultStartNumberLabel.setText(org.openide.util.NbBundle.getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.defaultStartNumberLabel.text")); // NOI18N + defaultStartNumberLabel.setText(org.openide.util.NbBundle + .getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.defaultStartNumberLabel.text")); // NOI18N - defaultEndNumberLabel.setText(org.openide.util.NbBundle.getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.defaultEndNumberLabel.text")); // NOI18N + defaultEndNumberLabel.setText(org.openide.util.NbBundle + .getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.defaultEndNumberLabel.text")); // NOI18N - defaultStartNumberText.setText(org.openide.util.NbBundle.getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.defaultStartNumberText.text")); // NOI18N + defaultStartNumberText.setText(org.openide.util.NbBundle + .getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.defaultStartNumberText.text")); // NOI18N - defaultEndNumberText.setText(org.openide.util.NbBundle.getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.defaultEndNumberText.text")); // NOI18N + defaultEndNumberText.setText(org.openide.util.NbBundle + .getMessage(CreateTimeIntervalUI.class, "CreateTimeIntervalUI.defaultEndNumberText.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(header, javax.swing.GroupLayout.DEFAULT_SIZE, 664, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() - .addGap(15, 15, 15) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(dateDefaultStartLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(dateDefaultEndLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addComponent(dateFormatLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGap(6, 6, 6)))) - .addGroup(layout.createSequentialGroup() - .addGap(13, 13, 13) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(defaultStartNumberLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(defaultEndNumberLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(defaultStartDatePicker, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(defaultEndDatePicker, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(dateFormatComboBox, javax.swing.GroupLayout.Alignment.TRAILING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(defaultStartNumberText) - .addComponent(defaultEndNumberText))) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(endColumnLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(startColumnLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(startColumnComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(endColumnComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) - .addComponent(parseDatesRadioButton) - .addComponent(parseNumbersRadioButton)) - .addContainerGap()) + .addComponent(header, javax.swing.GroupLayout.DEFAULT_SIZE, 664, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() + .addGap(15, 15, 15) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(dateDefaultStartLabel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(dateDefaultEndLabel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addComponent(dateFormatLabel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGap(6, 6, 6)))) + .addGroup(layout.createSequentialGroup() + .addGap(13, 13, 13) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(defaultStartNumberLabel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(defaultEndNumberLabel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(defaultStartDatePicker, javax.swing.GroupLayout.Alignment.TRAILING, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, + Short.MAX_VALUE) + .addComponent(defaultEndDatePicker, javax.swing.GroupLayout.Alignment.TRAILING, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, + Short.MAX_VALUE) + .addComponent(dateFormatComboBox, javax.swing.GroupLayout.Alignment.TRAILING, 0, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(defaultStartNumberText) + .addComponent(defaultEndNumberText))) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(endColumnLabel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(startColumnLabel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(startColumnComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, + Short.MAX_VALUE) + .addComponent(endColumnComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, + Short.MAX_VALUE))) + .addComponent(parseDatesRadioButton) + .addComponent(parseNumbersRadioButton)) + .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, 105, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(startColumnLabel) - .addComponent(startColumnComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(endColumnComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(endColumnLabel)) - .addGap(18, 18, 18) - .addComponent(parseNumbersRadioButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(defaultStartNumberLabel) - .addComponent(defaultStartNumberText, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(defaultEndNumberLabel) - .addComponent(defaultEndNumberText, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(33, 33, 33) - .addComponent(parseDatesRadioButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(dateFormatComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(dateFormatLabel)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(defaultStartDatePicker, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(dateDefaultStartLabel)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(dateDefaultEndLabel) - .addComponent(defaultEndDatePicker, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, 105, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(startColumnLabel) + .addComponent(startColumnComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(endColumnComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(endColumnLabel)) + .addGap(18, 18, 18) + .addComponent(parseNumbersRadioButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(defaultStartNumberLabel) + .addComponent(defaultStartNumberText, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(defaultEndNumberLabel) + .addComponent(defaultEndNumberText, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(33, 33, 33) + .addComponent(parseDatesRadioButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(dateFormatComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(dateFormatLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(defaultStartDatePicker, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(dateDefaultStartLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(dateDefaultEndLabel) + .addComponent(defaultEndDatePicker, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap()) ); }// //GEN-END:initComponents - private void parseNumbersRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_parseNumbersRadioButtonActionPerformed + private void parseNumbersRadioButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_parseNumbersRadioButtonActionPerformed refreshTimeParseMode(); }//GEN-LAST:event_parseNumbersRadioButtonActionPerformed - private void parseDatesRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_parseDatesRadioButtonActionPerformed + private void parseDatesRadioButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_parseDatesRadioButtonActionPerformed refreshTimeParseMode(); }//GEN-LAST:event_parseDatesRadioButtonActionPerformed - private void startColumnComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_startColumnComboBoxActionPerformed + private void startColumnComboBoxActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_startColumnComboBoxActionPerformed refreshOkButton(); }//GEN-LAST:event_startColumnComboBoxActionPerformed - private void endColumnComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_endColumnComboBoxActionPerformed + private void endColumnComboBoxActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_endColumnComboBoxActionPerformed refreshOkButton(); }//GEN-LAST:event_endColumnComboBoxActionPerformed - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.ButtonGroup buttonGroup; - private javax.swing.JLabel dateDefaultEndLabel; - private javax.swing.JLabel dateDefaultStartLabel; - private javax.swing.JComboBox dateFormatComboBox; - private javax.swing.JLabel dateFormatLabel; - private org.jdesktop.swingx.JXDatePicker defaultEndDatePicker; - private javax.swing.JLabel defaultEndNumberLabel; - private javax.swing.JTextField defaultEndNumberText; - private org.jdesktop.swingx.JXDatePicker defaultStartDatePicker; - private javax.swing.JLabel defaultStartNumberLabel; - private javax.swing.JTextField defaultStartNumberText; - private javax.swing.JComboBox endColumnComboBox; - private javax.swing.JLabel endColumnLabel; - private org.jdesktop.swingx.JXHeader header; - private javax.swing.JRadioButton parseDatesRadioButton; - private javax.swing.JRadioButton parseNumbersRadioButton; - private javax.swing.JComboBox startColumnComboBox; - private javax.swing.JLabel startColumnLabel; - // End of variables declaration//GEN-END:variables + + private class ColumnWrapper { + + private final Column column; + + public ColumnWrapper(Column column) { + this.column = column; + } + + @Override + public String toString() { + return column != null ? column.getTitle() : ""; + } + } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/GeneralColumnTitleChooserUI.form b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/GeneralColumnTitleChooserUI.form index e390cac111..01657bf724 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/GeneralColumnTitleChooserUI.form +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/GeneralColumnTitleChooserUI.form @@ -1,4 +1,4 @@ - + diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/GeneralColumnTitleChooserUI.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/GeneralColumnTitleChooserUI.java index 97a593ffcd..eb927a9af9 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/GeneralColumnTitleChooserUI.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/GeneralColumnTitleChooserUI.java @@ -39,45 +39,56 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.merge.ui; import javax.swing.JPanel; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; -import org.gephi.data.attributes.api.AttributeTable; import org.gephi.datalab.plugin.manipulators.columns.merge.GeneralColumnTitleChooser; import org.gephi.datalab.spi.DialogControls; import org.gephi.datalab.spi.Manipulator; import org.gephi.datalab.spi.ManipulatorUI; +import org.gephi.graph.api.Table; import org.gephi.ui.utils.ColumnTitleValidator; import org.netbeans.validation.api.ui.ValidationGroup; -import org.netbeans.validation.api.ui.ValidationPanel; +import org.netbeans.validation.api.ui.swing.ValidationPanel; /** * UI for general merge strategies that only need to select a title for the column to create. * Takes care to validate the column title. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class GeneralColumnTitleChooserUI extends javax.swing.JPanel implements ManipulatorUI { private GeneralColumnTitleChooser manipulator; private DialogControls dialogControls; - private AttributeTable table; + private Table table; private String displayName; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel titleLabel; + private javax.swing.JTextField titleTextField; + // End of variables declaration//GEN-END:variables - /** Creates new form GeneralColumnTitleChooserUI */ + /** + * Creates new form GeneralColumnTitleChooserUI + */ public GeneralColumnTitleChooserUI() { initComponents(); titleTextField.getDocument().addDocumentListener(new DocumentListener() { + @Override public void insertUpdate(DocumentEvent e) { refreshOkButton(); } + @Override public void removeUpdate(DocumentEvent e) { refreshOkButton(); } + @Override public void changedUpdate(DocumentEvent e) { refreshOkButton(); } @@ -86,9 +97,11 @@ public void changedUpdate(DocumentEvent e) { private void refreshOkButton() { String text = titleTextField.getText(); - dialogControls.setOkButtonEnabled(text != null && !text.isEmpty() && table != null && !table.hasColumn(text));//Title not empty and not repeated. + dialogControls.setOkButtonEnabled(text != null && !text.isEmpty() && table != null && + !table.hasColumn(text));//Title not empty and not repeated. } + @Override public void setup(Manipulator m, DialogControls dialogControls) { this.manipulator = (GeneralColumnTitleChooser) m; this.table = manipulator.getTable(); @@ -98,14 +111,17 @@ public void setup(Manipulator m, DialogControls dialogControls) { refreshOkButton(); } + @Override public void unSetup() { manipulator.setColumnTitle(titleTextField.getText()); } + @Override public String getDisplayName() { return displayName; } + @Override public JPanel getSettingsPanel() { ValidationPanel validationPanel = new ValidationPanel(); validationPanel.setInnerComponent(this); @@ -117,11 +133,13 @@ public JPanel getSettingsPanel() { return validationPanel; } + @Override public boolean isModal() { return true; } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -133,33 +151,32 @@ private void initComponents() { titleLabel = new javax.swing.JLabel(); titleTextField = new javax.swing.JTextField(); - titleLabel.setText(org.openide.util.NbBundle.getMessage(GeneralColumnTitleChooserUI.class, "GeneralColumnTitleChooserUI.titleLabel.text")); // NOI18N + titleLabel.setText(org.openide.util.NbBundle + .getMessage(GeneralColumnTitleChooserUI.class, "GeneralColumnTitleChooserUI.titleLabel.text")); // NOI18N - titleTextField.setText(org.openide.util.NbBundle.getMessage(GeneralColumnTitleChooserUI.class, "GeneralColumnTitleChooserUI.titleTextField.text")); // NOI18N + titleTextField.setText(org.openide.util.NbBundle.getMessage(GeneralColumnTitleChooserUI.class, + "GeneralColumnTitleChooserUI.titleTextField.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(titleLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(titleTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 150, Short.MAX_VALUE) - .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(titleLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(titleTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 150, Short.MAX_VALUE) + .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(titleLabel) - .addComponent(titleTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(titleLabel) + .addComponent(titleTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JLabel titleLabel; - private javax.swing.JTextField titleTextField; - // End of variables declaration//GEN-END:variables } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/JoinWithSeparatorUI.form b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/JoinWithSeparatorUI.form index 183f69c9cb..602217c1bb 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/JoinWithSeparatorUI.form +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/JoinWithSeparatorUI.form @@ -1,4 +1,4 @@ - + diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/JoinWithSeparatorUI.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/JoinWithSeparatorUI.java index 93b939b306..9b89a86457 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/JoinWithSeparatorUI.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/merge/ui/JoinWithSeparatorUI.java @@ -1,109 +1,128 @@ /* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. + Copyright 2008-2010 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.merge.ui; import javax.swing.JPanel; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; -import org.gephi.data.attributes.api.AttributeTable; import org.gephi.datalab.plugin.manipulators.columns.merge.JoinWithSeparator; import org.gephi.datalab.spi.DialogControls; import org.gephi.datalab.spi.Manipulator; import org.gephi.datalab.spi.ManipulatorUI; +import org.gephi.graph.api.Table; import org.gephi.ui.utils.ColumnTitleValidator; import org.netbeans.validation.api.ui.ValidationGroup; -import org.netbeans.validation.api.ui.ValidationPanel; +import org.netbeans.validation.api.ui.swing.ValidationPanel; import org.openide.util.NbPreferences; /** * UI for JoinWithSeparator AttributeColumnsMergeStrategy - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -public class JoinWithSeparatorUI extends javax.swing.JPanel implements ManipulatorUI{ +public class JoinWithSeparatorUI extends javax.swing.JPanel implements ManipulatorUI { + private JoinWithSeparator manipulator; private DialogControls dialogControls; - private AttributeTable table; + private Table table; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel separatorLabel; + private javax.swing.JTextField separatorText; + private javax.swing.JLabel titleLabel; + private javax.swing.JTextField titleTextField; + // End of variables declaration//GEN-END:variables - /** Creates new form JoinWithSeparatorUI */ + /** + * Creates new form JoinWithSeparatorUI + */ public JoinWithSeparatorUI() { initComponents(); titleTextField.getDocument().addDocumentListener(new DocumentListener() { - + @Override public void insertUpdate(DocumentEvent e) { refreshOkButton(); } + @Override public void removeUpdate(DocumentEvent e) { refreshOkButton(); } + @Override public void changedUpdate(DocumentEvent e) { refreshOkButton(); } - private void refreshOkButton(){ - String text=titleTextField.getText(); - dialogControls.setOkButtonEnabled(text!=null&&!text.isEmpty()&&!table.hasColumn(text));//Title not empty and not repeated. + private void refreshOkButton() { + String text = titleTextField.getText(); + dialogControls.setOkButtonEnabled( + text != null && !text.isEmpty() && !table.hasColumn(text));//Title not empty and not repeated. } }); } + @Override public void setup(Manipulator m, DialogControls dialogControls) { - this.manipulator=(JoinWithSeparator) m; - this.dialogControls=dialogControls; - this.table=manipulator.getTable(); + this.manipulator = (JoinWithSeparator) m; + this.dialogControls = dialogControls; + this.table = manipulator.getTable(); separatorText.setText(manipulator.getSeparator()); } + @Override public void unSetup() { manipulator.setNewColumnTitle(titleTextField.getText()); manipulator.setSeparator(separatorText.getText()); - NbPreferences.forModule(JoinWithSeparator.class).put(JoinWithSeparator.SEPARATOR_SAVED_PREFERENCES, separatorText.getText()); + NbPreferences.forModule(JoinWithSeparator.class) + .put(JoinWithSeparator.SEPARATOR_SAVED_PREFERENCES, separatorText.getText()); } + @Override public String getDisplayName() { return manipulator.getName(); } + @Override public JPanel getSettingsPanel() { ValidationPanel validationPanel = new ValidationPanel(); validationPanel.setInnerComponent(this); @@ -115,14 +134,13 @@ public JPanel getSettingsPanel() { return validationPanel; } + @Override public boolean isModal() { return true; } - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. + /** + * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The content of this method is always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents @@ -133,49 +151,47 @@ private void initComponents() { separatorLabel = new javax.swing.JLabel(); separatorText = new javax.swing.JTextField(); - titleLabel.setText(org.openide.util.NbBundle.getMessage(JoinWithSeparatorUI.class, "JoinWithSeparatorUI.titleLabel.text")); // NOI18N + titleLabel.setText(org.openide.util.NbBundle + .getMessage(JoinWithSeparatorUI.class, "JoinWithSeparatorUI.titleLabel.text")); // NOI18N - titleTextField.setText(org.openide.util.NbBundle.getMessage(JoinWithSeparatorUI.class, "JoinWithSeparatorUI.titleTextField.text")); // NOI18N + titleTextField.setText(org.openide.util.NbBundle + .getMessage(JoinWithSeparatorUI.class, "JoinWithSeparatorUI.titleTextField.text")); // NOI18N - separatorLabel.setText(org.openide.util.NbBundle.getMessage(JoinWithSeparatorUI.class, "JoinWithSeparatorUI.separatorLabel.text")); // NOI18N + separatorLabel.setText(org.openide.util.NbBundle + .getMessage(JoinWithSeparatorUI.class, "JoinWithSeparatorUI.separatorLabel.text")); // NOI18N - separatorText.setText(org.openide.util.NbBundle.getMessage(JoinWithSeparatorUI.class, "JoinWithSeparatorUI.separatorText.text")); // NOI18N + separatorText.setText(org.openide.util.NbBundle + .getMessage(JoinWithSeparatorUI.class, "JoinWithSeparatorUI.separatorText.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(titleLabel) - .addComponent(separatorLabel)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(separatorText, javax.swing.GroupLayout.DEFAULT_SIZE, 135, Short.MAX_VALUE) - .addComponent(titleTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 135, Short.MAX_VALUE)) - .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(titleLabel) + .addComponent(separatorLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(separatorText, javax.swing.GroupLayout.DEFAULT_SIZE, 135, Short.MAX_VALUE) + .addComponent(titleTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 135, Short.MAX_VALUE)) + .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(titleLabel) - .addComponent(titleTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(separatorLabel) - .addComponent(separatorText, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(titleLabel) + .addComponent(titleTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(separatorLabel) + .addComponent(separatorText, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - - - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JLabel separatorLabel; - private javax.swing.JTextField separatorText; - private javax.swing.JLabel titleLabel; - private javax.swing.JTextField titleTextField; - // End of variables declaration//GEN-END:variables } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/ColumnValuesFrequencyUI.form b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/ColumnValuesFrequencyUI.form index 853c12ad2a..ae73a19727 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/ColumnValuesFrequencyUI.form +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/ColumnValuesFrequencyUI.form @@ -1,4 +1,4 @@ - + diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/ColumnValuesFrequencyUI.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/ColumnValuesFrequencyUI.java index bd1fcd40a7..a39422d5ca 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/ColumnValuesFrequencyUI.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/ColumnValuesFrequencyUI.java @@ -39,49 +39,62 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.ui; import java.util.Map; import javax.swing.JPanel; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; import org.gephi.datalab.plugin.manipulators.columns.ColumnValuesFrequency; import org.gephi.datalab.spi.DialogControls; import org.gephi.datalab.spi.columns.AttributeColumnsManipulator; import org.gephi.datalab.spi.columns.AttributeColumnsManipulatorUI; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Table; import org.gephi.ui.components.JFreeChartDialog; import org.gephi.ui.components.SimpleHTMLReport; import org.jfree.chart.JFreeChart; +import org.openide.util.ImageUtilities; import org.openide.windows.WindowManager; /** * UI for ColumnValuesFrequency AttributeColumnsManipulator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class ColumnValuesFrequencyUI extends javax.swing.JPanel implements AttributeColumnsManipulatorUI { private ColumnValuesFrequency manipulator; - private AttributeTable table; - private AttributeColumn column; + private Table table; + private Column column; private Map valuesFrequencies; private JFreeChart pieChart; private JFreeChartDialog pieChartDialog; private SimpleHTMLReport reportDialog; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton configurePieChartButton; + private javax.swing.JButton showReportButton; + // End of variables declaration//GEN-END:variables - /** Creates new form ColumnValuesFrequencyUI */ + /** + * Creates new form ColumnValuesFrequencyUI + */ public ColumnValuesFrequencyUI() { initComponents(); } - public void setup(AttributeColumnsManipulator m, AttributeTable table, AttributeColumn column, DialogControls dialogControls) { + @Override + public void setup(AttributeColumnsManipulator m, GraphModel graphModel, Table table, Column column, + DialogControls dialogControls) { this.table = table; this.column = column; this.manipulator = (ColumnValuesFrequency) m; valuesFrequencies = manipulator.buildValuesFrequencies(table, column); - configurePieChartButton.setEnabled(valuesFrequencies.size()<=ColumnValuesFrequency.MAX_PIE_CHART_CATEGORIES); + configurePieChartButton.setEnabled(valuesFrequencies.size() <= ColumnValuesFrequency.MAX_PIE_CHART_CATEGORIES); } + @Override public void unSetup() { if (reportDialog != null) { reportDialog.dispose(); @@ -91,19 +104,23 @@ public void unSetup() { } } + @Override public String getDisplayName() { return manipulator.getName(); } + @Override public JPanel getSettingsPanel() { return this; } + @Override public boolean isModal() { return false; } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -115,17 +132,22 @@ private void initComponents() { configurePieChartButton = new javax.swing.JButton(); showReportButton = new javax.swing.JButton(); - configurePieChartButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/datalab/plugin/manipulators/resources/category.png"))); // NOI18N - configurePieChartButton.setText(org.openide.util.NbBundle.getMessage(ColumnValuesFrequencyUI.class, "ColumnValuesFrequencyUI.configurePieChartButton.text")); // NOI18N + configurePieChartButton.setIcon( + ImageUtilities.loadImageIcon("DataLaboratoryPlugin/category.svg", false)); // NOI18N + configurePieChartButton.setText(org.openide.util.NbBundle.getMessage(ColumnValuesFrequencyUI.class, + "ColumnValuesFrequencyUI.configurePieChartButton.text")); // NOI18N configurePieChartButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { configurePieChartButtonActionPerformed(evt); } }); - showReportButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/datalab/plugin/manipulators/resources/application-block.png"))); // NOI18N - showReportButton.setText(org.openide.util.NbBundle.getMessage(ColumnValuesFrequencyUI.class, "ColumnValuesFrequencyUI.showReportButton.text")); // NOI18N + showReportButton.setIcon(ImageUtilities.loadImageIcon("DataLaboratoryPlugin/application-block.svg", false)); // NOI18N + showReportButton.setText(org.openide.util.NbBundle + .getMessage(ColumnValuesFrequencyUI.class, "ColumnValuesFrequencyUI.showReportButton.text")); // NOI18N showReportButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { showReportButtonActionPerformed(evt); } @@ -135,49 +157,50 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(configurePieChartButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 9, Short.MAX_VALUE) - .addComponent(showReportButton) - .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(configurePieChartButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 9, Short.MAX_VALUE) + .addComponent(showReportButton) + .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(configurePieChartButton) - .addComponent(showReportButton)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(configurePieChartButton) + .addComponent(showReportButton)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - private void configurePieChartButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_configurePieChartButtonActionPerformed + private void configurePieChartButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_configurePieChartButtonActionPerformed if (pieChart == null) { pieChart = manipulator.buildPieChart(valuesFrequencies); } if (pieChartDialog != null) { pieChartDialog.setVisible(true); } else { - pieChartDialog = new JFreeChartDialog(WindowManager.getDefault().getMainWindow(), pieChart.getTitle().getText(), pieChart, 1000, 1000); + pieChartDialog = + new JFreeChartDialog(WindowManager.getDefault().getMainWindow(), pieChart.getTitle().getText(), + pieChart, 1000, 1000); } }//GEN-LAST:event_configurePieChartButtonActionPerformed - private void showReportButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showReportButtonActionPerformed + private void showReportButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showReportButtonActionPerformed if (pieChart == null) { pieChart = manipulator.buildPieChart(valuesFrequencies); } - final String html = manipulator.getReportHTML(table, column, valuesFrequencies, pieChart, pieChartDialog != null ? pieChartDialog.getChartSize() : null); + final String html = manipulator.getReportHTML(table, column, valuesFrequencies, pieChart, + pieChartDialog != null ? pieChartDialog.getChartSize() : null); if (reportDialog != null) { reportDialog.dispose(); } reportDialog = new SimpleHTMLReport(WindowManager.getDefault().getMainWindow(), html); }//GEN-LAST:event_showReportButtonActionPerformed - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton configurePieChartButton; - private javax.swing.JButton showReportButton; - // End of variables declaration//GEN-END:variables } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/ConvertColumnToDynamicTimestampsUI.form b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/ConvertColumnToDynamicTimestampsUI.form new file mode 100644 index 0000000000..022d5bd2a7 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/ConvertColumnToDynamicTimestampsUI.form @@ -0,0 +1,108 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/ConvertColumnToDynamicTimestampsUI.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/ConvertColumnToDynamicTimestampsUI.java new file mode 100644 index 0000000000..a4725138b6 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/ConvertColumnToDynamicTimestampsUI.java @@ -0,0 +1,263 @@ +/* + Copyright 2008-2010 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.datalab.plugin.manipulators.columns.ui; + +import javax.swing.JPanel; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import org.gephi.datalab.plugin.manipulators.columns.ConvertColumnToDynamic; +import org.gephi.datalab.spi.DialogControls; +import org.gephi.datalab.spi.columns.AttributeColumnsManipulator; +import org.gephi.datalab.spi.columns.AttributeColumnsManipulatorUI; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Table; +import org.gephi.ui.utils.ColumnTitleValidator; +import org.gephi.ui.utils.IntervalBoundValidator; +import org.netbeans.validation.api.ui.ValidationGroup; +import org.netbeans.validation.api.ui.swing.ValidationPanel; +import org.openide.util.NbBundle; +import org.openide.util.NbPreferences; + +/** + * UI for ConvertColumnToDynamic AttributeColumnsManipulator and for Timestamps + * + * @author Eduardo Ramos + */ +public class ConvertColumnToDynamicTimestampsUI extends javax.swing.JPanel implements AttributeColumnsManipulatorUI { + + private static final String TIMESTAMP_PREFERENCE = "ConvertColumnToDynamicTimestampsUI.intervalStart"; + private static final String REPLACE_COLUMN_PREFERENCE = "ConvertColumnToDynamicTimestampsUI.replaceColumn"; + + private static final String DEFAULT_TIMESTAMP = "0"; + + private ConvertColumnToDynamic manipulator; + private Table table; + private DialogControls dialogControls; + private ValidationPanel validationPanel; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel descriptionLabel; + private javax.swing.JCheckBox replaceColumnCheckbox; + private javax.swing.JLabel timestampLabel; + private javax.swing.JTextField timestampText; + private javax.swing.JLabel titleLabel; + private javax.swing.JTextField titleTextField; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form DuplicateColumnUI + */ + public ConvertColumnToDynamicTimestampsUI() { + initComponents(); + + timestampText.setText(NbPreferences.forModule(ConvertColumnToDynamicTimestampsUI.class) + .get(TIMESTAMP_PREFERENCE, DEFAULT_TIMESTAMP)); + replaceColumnCheckbox.setSelected(NbPreferences.forModule(ConvertColumnToDynamicTimestampsUI.class) + .getBoolean(REPLACE_COLUMN_PREFERENCE, false)); + } + + private void buildValidationPanel() { + validationPanel = new ValidationPanel(); + validationPanel.setInnerComponent(this); + + ValidationGroup group = validationPanel.getValidationGroup(); + + group.add(titleTextField, new ColumnTitleValidator(table)); + group.add(timestampText, new IntervalBoundValidator()); + + validationPanel.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + dialogControls.setOkButtonEnabled(!validationPanel.isFatalProblem()); + } + }); + } + + @Override + public void setup(AttributeColumnsManipulator m, GraphModel graphModel, Table table, Column column, + DialogControls dialogControls) { + this.table = table; + this.dialogControls = dialogControls; + this.manipulator = (ConvertColumnToDynamic) m; + + buildValidationPanel(); + + descriptionLabel.setText(NbBundle + .getMessage(ConvertColumnToDynamicTimestampsUI.class, "ConvertColumnToDynamicUI.descriptionLabel.text", + column.getTitle())); + titleTextField.setText(NbBundle + .getMessage(ConvertColumnToDynamicTimestampsUI.class, "ConvertColumnToDynamicUI.new.title", + column.getTitle())); + + refreshTitleEnabledState(); + } + + @Override + public void unSetup() { + String timestampString = timestampText.getText(); + boolean replaceColumn = replaceColumnCheckbox.isSelected(); + + NbPreferences.forModule(ConvertColumnToDynamicTimestampsUI.class).put(TIMESTAMP_PREFERENCE, timestampString); + NbPreferences.forModule(ConvertColumnToDynamicTimestampsUI.class) + .putBoolean(REPLACE_COLUMN_PREFERENCE, replaceColumn); + + if (!validationPanel.isFatalProblem()) { + manipulator.setTitle(titleTextField.getText()); + manipulator.setReplaceColumn(replaceColumn); + + double timestamp = AttributeUtils.parseDateTimeOrTimestamp(timestampString); + + manipulator.setLow(timestamp); + manipulator.setHigh(timestamp); + } + } + + @Override + public String getDisplayName() { + return manipulator.getName(); + } + + @Override + public JPanel getSettingsPanel() { + return validationPanel; + } + + @Override + public boolean isModal() { + return true; + } + + private void refreshTitleEnabledState() { + boolean enabled = !replaceColumnCheckbox.isSelected(); + titleTextField.setEnabled(enabled); + } + + /** + * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The content of this method is always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + titleLabel = new javax.swing.JLabel(); + titleTextField = new javax.swing.JTextField(); + descriptionLabel = new javax.swing.JLabel(); + replaceColumnCheckbox = new javax.swing.JCheckBox(); + timestampLabel = new javax.swing.JLabel(); + timestampText = new javax.swing.JTextField(); + + titleLabel.setText(org.openide.util.NbBundle.getMessage(ConvertColumnToDynamicTimestampsUI.class, + "ConvertColumnToDynamicTimestampsUI.titleLabel.text")); // NOI18N + + titleTextField.setText(org.openide.util.NbBundle.getMessage(ConvertColumnToDynamicTimestampsUI.class, + "ConvertColumnToDynamicTimestampsUI.titleTextField.text")); // NOI18N + + descriptionLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); + descriptionLabel.setText(null); + + replaceColumnCheckbox.setText(org.openide.util.NbBundle.getMessage(ConvertColumnToDynamicTimestampsUI.class, + "ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.text")); // NOI18N + replaceColumnCheckbox.setToolTipText(org.openide.util.NbBundle + .getMessage(ConvertColumnToDynamicTimestampsUI.class, + "ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.toolTipText")); // NOI18N + replaceColumnCheckbox.setHorizontalTextPosition(javax.swing.SwingConstants.LEADING); + replaceColumnCheckbox.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + replaceColumnCheckboxActionPerformed(evt); + } + }); + + timestampLabel.setText(org.openide.util.NbBundle.getMessage(ConvertColumnToDynamicTimestampsUI.class, + "ConvertColumnToDynamicTimestampsUI.timestampLabel.text")); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addComponent(replaceColumnCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(titleLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 61, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(titleTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 177, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addComponent(timestampLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 108, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(timestampText))) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(descriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 23, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(timestampLabel) + .addComponent(timestampText, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(titleLabel) + .addComponent(titleTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(replaceColumnCheckbox)) + .addGap(24, 24, 24)) + ); + }// //GEN-END:initComponents + + private void replaceColumnCheckboxActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_replaceColumnCheckboxActionPerformed + refreshTitleEnabledState(); + }//GEN-LAST:event_replaceColumnCheckboxActionPerformed +} diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/ConvertColumnToDynamicUI.form b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/ConvertColumnToDynamicUI.form index 78d3bb7c8e..7f360a0aef 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/ConvertColumnToDynamicUI.form +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/ConvertColumnToDynamicUI.form @@ -19,31 +19,24 @@ - + + + + + + + + + - + - + - + - - - - - - - - - - - - - - - @@ -56,25 +49,20 @@ - - - - + + + - - - - - - - - - + + + + + @@ -118,16 +106,6 @@ - - - - - - - - - - @@ -136,11 +114,6 @@ - - - - - @@ -150,27 +123,6 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/ConvertColumnToDynamicUI.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/ConvertColumnToDynamicUI.java index 914062f833..e3a72e2b61 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/ConvertColumnToDynamicUI.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/ConvertColumnToDynamicUI.java @@ -39,47 +39,55 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.ui; -import java.text.ParseException; import javax.swing.JPanel; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; -import org.gephi.data.attributes.type.DynamicParser; import org.gephi.datalab.plugin.manipulators.columns.ConvertColumnToDynamic; import org.gephi.datalab.spi.DialogControls; import org.gephi.datalab.spi.columns.AttributeColumnsManipulator; import org.gephi.datalab.spi.columns.AttributeColumnsManipulatorUI; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Table; import org.gephi.ui.utils.ColumnTitleValidator; import org.gephi.ui.utils.IntervalBoundValidator; import org.netbeans.validation.api.ui.ValidationGroup; -import org.netbeans.validation.api.ui.ValidationPanel; -import org.openide.util.Exceptions; +import org.netbeans.validation.api.ui.swing.ValidationPanel; import org.openide.util.NbBundle; import org.openide.util.NbPreferences; /** - * UI for DuplicateColumn AttributeColumnsManipulator. + * UI for ConvertColumnToDynamic AttributeColumnsManipulator and for Intervals * - * @author Eduardo Ramos + * @author Eduardo Ramos */ public class ConvertColumnToDynamicUI extends javax.swing.JPanel implements AttributeColumnsManipulatorUI { - + private static final String INTERVAL_START_PREFERENCE = "ConvertColumnToDynamicUI.intervalStart"; private static final String INTERVAL_END_PREFERENCE = "ConvertColumnToDynamicUI.intervalEnd"; - private static final String INTERVAL_START_OPEN_PREFERENCE = "ConvertColumnToDynamicUI.lopen"; - private static final String INTERVAL_END_OPEN_PREFERENCE = "ConvertColumnToDynamicUI.ropen"; private static final String REPLACE_COLUMN_PREFERENCE = "ConvertColumnToDynamicUI.replaceColumn"; - - private static final String DEFAULT_INTERVAL_START = "0"; - private static final String DEFAULT_INTERVAL_END = "1.0"; + + private static final String DEFAULT_INTERVAL_START = "-Infinity"; + private static final String DEFAULT_INTERVAL_END = "Infinity"; private ConvertColumnToDynamic manipulator; - private AttributeTable table; + private Table table; private DialogControls dialogControls; private ValidationPanel validationPanel; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel descriptionLabel; + private javax.swing.JLabel intervalEndLabel; + private javax.swing.JTextField intervalEndText; + private javax.swing.JLabel intervalStartLabel; + private javax.swing.JTextField intervalStartText; + private javax.swing.JCheckBox replaceColumnCheckbox; + private javax.swing.JLabel titleLabel; + private javax.swing.JTextField titleTextField; + // End of variables declaration//GEN-END:variables /** * Creates new form DuplicateColumnUI @@ -87,11 +95,12 @@ public class ConvertColumnToDynamicUI extends javax.swing.JPanel implements Attr public ConvertColumnToDynamicUI() { initComponents(); - intervalStartText.setText(NbPreferences.forModule(ConvertColumnToDynamicUI.class).get(INTERVAL_START_PREFERENCE, DEFAULT_INTERVAL_START)); - intervalEndText.setText(NbPreferences.forModule(ConvertColumnToDynamicUI.class).get(INTERVAL_END_PREFERENCE, DEFAULT_INTERVAL_END)); - intervalStartOpenCheckbox.setSelected(NbPreferences.forModule(ConvertColumnToDynamicUI.class).getBoolean(INTERVAL_START_OPEN_PREFERENCE, false)); - intervalEndOpenCheckbox.setSelected(NbPreferences.forModule(ConvertColumnToDynamicUI.class).getBoolean(INTERVAL_END_OPEN_PREFERENCE, false)); - replaceColumnCheckbox.setSelected(NbPreferences.forModule(ConvertColumnToDynamicUI.class).getBoolean(REPLACE_COLUMN_PREFERENCE, false)); + intervalStartText.setText(NbPreferences.forModule(ConvertColumnToDynamicUI.class) + .get(INTERVAL_START_PREFERENCE, DEFAULT_INTERVAL_START)); + intervalEndText.setText( + NbPreferences.forModule(ConvertColumnToDynamicUI.class).get(INTERVAL_END_PREFERENCE, DEFAULT_INTERVAL_END)); + replaceColumnCheckbox.setSelected( + NbPreferences.forModule(ConvertColumnToDynamicUI.class).getBoolean(REPLACE_COLUMN_PREFERENCE, false)); } private void buildValidationPanel() { @@ -107,59 +116,58 @@ private void buildValidationPanel() { validationPanel.addChangeListener(new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { - dialogControls.setOkButtonEnabled(!validationPanel.isProblem()); + dialogControls.setOkButtonEnabled(!validationPanel.isFatalProblem()); } }); } - public void setup(AttributeColumnsManipulator m, AttributeTable table, AttributeColumn column, DialogControls dialogControls) { + @Override + public void setup(AttributeColumnsManipulator m, GraphModel graphModel, Table table, Column column, + DialogControls dialogControls) { this.table = table; this.dialogControls = dialogControls; this.manipulator = (ConvertColumnToDynamic) m; buildValidationPanel(); - descriptionLabel.setText(NbBundle.getMessage(ConvertColumnToDynamicUI.class, "ConvertColumnToDynamicUI.descriptionLabel.text", column.getTitle())); - titleTextField.setText(NbBundle.getMessage(ConvertColumnToDynamicUI.class, "ConvertColumnToDynamicUI.new.title", column.getTitle())); - + descriptionLabel.setText(NbBundle + .getMessage(ConvertColumnToDynamicUI.class, "ConvertColumnToDynamicUI.descriptionLabel.text", + column.getTitle())); + titleTextField.setText(NbBundle + .getMessage(ConvertColumnToDynamicUI.class, "ConvertColumnToDynamicUI.new.title", column.getTitle())); + refreshTitleEnabledState(); } + @Override public void unSetup() { String intervalStart = intervalStartText.getText(); String intervalEnd = intervalEndText.getText(); - boolean lopen = intervalStartOpenCheckbox.isSelected(); - boolean ropen = intervalEndOpenCheckbox.isSelected(); boolean replaceColumn = replaceColumnCheckbox.isSelected(); - + NbPreferences.forModule(ConvertColumnToDynamicUI.class).put(INTERVAL_START_PREFERENCE, intervalStart); NbPreferences.forModule(ConvertColumnToDynamicUI.class).put(INTERVAL_END_PREFERENCE, intervalEnd); - NbPreferences.forModule(ConvertColumnToDynamicUI.class).putBoolean(INTERVAL_START_OPEN_PREFERENCE, lopen); - NbPreferences.forModule(ConvertColumnToDynamicUI.class).putBoolean(INTERVAL_END_OPEN_PREFERENCE, ropen); NbPreferences.forModule(ConvertColumnToDynamicUI.class).putBoolean(REPLACE_COLUMN_PREFERENCE, replaceColumn); - - if (!validationPanel.isProblem()) { + + if (!validationPanel.isFatalProblem()) { manipulator.setTitle(titleTextField.getText()); - try { - manipulator.setReplaceColumn(replaceColumn); - manipulator.setLow(DynamicParser.parseTime(intervalStart)); - manipulator.setHigh(DynamicParser.parseTime(intervalEnd)); - manipulator.setLopen(lopen); - manipulator.setRopen(ropen); - } catch (ParseException ex) { - Exceptions.printStackTrace(ex); - } + manipulator.setReplaceColumn(replaceColumn); + manipulator.setLow(AttributeUtils.parseDateTimeOrTimestamp(intervalStart)); + manipulator.setHigh(AttributeUtils.parseDateTimeOrTimestamp(intervalEnd)); } } + @Override public String getDisplayName() { return manipulator.getName(); } + @Override public JPanel getSettingsPanel() { return validationPanel; } + @Override public boolean isModal() { return true; } @@ -180,114 +188,94 @@ private void initComponents() { titleTextField = new javax.swing.JTextField(); descriptionLabel = new javax.swing.JLabel(); replaceColumnCheckbox = new javax.swing.JCheckBox(); - filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(32767, 0)); intervalStartLabel = new javax.swing.JLabel(); intervalStartText = new javax.swing.JTextField(); intervalEndLabel = new javax.swing.JLabel(); intervalEndText = new javax.swing.JTextField(); - intervalStartOpenCheckbox = new javax.swing.JCheckBox(); - intervalEndOpenCheckbox = new javax.swing.JCheckBox(); - titleLabel.setText(org.openide.util.NbBundle.getMessage(ConvertColumnToDynamicUI.class, "ConvertColumnToDynamicUI.titleLabel.text")); // NOI18N + titleLabel.setText(org.openide.util.NbBundle + .getMessage(ConvertColumnToDynamicUI.class, "ConvertColumnToDynamicUI.titleLabel.text")); // NOI18N - titleTextField.setText(org.openide.util.NbBundle.getMessage(ConvertColumnToDynamicUI.class, "ConvertColumnToDynamicUI.titleTextField.text")); // NOI18N + titleTextField.setText(org.openide.util.NbBundle + .getMessage(ConvertColumnToDynamicUI.class, "ConvertColumnToDynamicUI.titleTextField.text")); // NOI18N descriptionLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); descriptionLabel.setText(null); - replaceColumnCheckbox.setText(org.openide.util.NbBundle.getMessage(ConvertColumnToDynamicUI.class, "ConvertColumnToDynamicUI.replaceColumnCheckbox.text")); // NOI18N - replaceColumnCheckbox.setToolTipText(org.openide.util.NbBundle.getMessage(ConvertColumnToDynamicUI.class, "ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText")); // NOI18N + replaceColumnCheckbox.setText(org.openide.util.NbBundle.getMessage(ConvertColumnToDynamicUI.class, + "ConvertColumnToDynamicUI.replaceColumnCheckbox.text")); // NOI18N + replaceColumnCheckbox.setToolTipText(org.openide.util.NbBundle.getMessage(ConvertColumnToDynamicUI.class, + "ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText")); // NOI18N replaceColumnCheckbox.setHorizontalTextPosition(javax.swing.SwingConstants.LEADING); replaceColumnCheckbox.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { replaceColumnCheckboxActionPerformed(evt); } }); - intervalStartLabel.setText(org.openide.util.NbBundle.getMessage(ConvertColumnToDynamicUI.class, "ConvertColumnToDynamicUI.intervalStartLabel.text")); // NOI18N - - intervalStartText.setText(org.openide.util.NbBundle.getMessage(ConvertColumnToDynamicUI.class, "ConvertColumnToDynamicUI.intervalStartText.text")); // NOI18N - - intervalEndLabel.setText(org.openide.util.NbBundle.getMessage(ConvertColumnToDynamicUI.class, "ConvertColumnToDynamicUI.intervalEndLabel.text")); // NOI18N - - intervalEndText.setText(org.openide.util.NbBundle.getMessage(ConvertColumnToDynamicUI.class, "ConvertColumnToDynamicUI.intervalEndText.text")); // NOI18N + intervalStartLabel.setText(org.openide.util.NbBundle + .getMessage(ConvertColumnToDynamicUI.class, "ConvertColumnToDynamicUI.intervalStartLabel.text")); // NOI18N - intervalStartOpenCheckbox.setText(org.openide.util.NbBundle.getMessage(ConvertColumnToDynamicUI.class, "ConvertColumnToDynamicUI.intervalOpenCheckbox.text")); - intervalStartOpenCheckbox.setHorizontalTextPosition(javax.swing.SwingConstants.LEADING); - - intervalEndOpenCheckbox.setText(org.openide.util.NbBundle.getMessage(ConvertColumnToDynamicUI.class, "ConvertColumnToDynamicUI.intervalOpenCheckbox.text")); - intervalEndOpenCheckbox.setHorizontalTextPosition(javax.swing.SwingConstants.LEADING); + intervalEndLabel.setText(org.openide.util.NbBundle + .getMessage(ConvertColumnToDynamicUI.class, "ConvertColumnToDynamicUI.intervalEndLabel.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(intervalEndLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(intervalStartLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 92, Short.MAX_VALUE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(intervalStartText, javax.swing.GroupLayout.DEFAULT_SIZE, 201, Short.MAX_VALUE) - .addComponent(intervalEndText)) - .addGap(6, 6, 6) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(intervalStartOpenCheckbox, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(intervalEndOpenCheckbox, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) - .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addComponent(replaceColumnCheckbox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(filler1, javax.swing.GroupLayout.PREFERRED_SIZE, 4, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(titleLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 30, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(titleTextField))) - .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addComponent(replaceColumnCheckbox) + .addGap(16, 16, 16) + .addComponent(titleLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 30, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(titleTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 190, Short.MAX_VALUE)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(intervalEndLabel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(intervalStartLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 117, + Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(intervalStartText) + .addComponent(intervalEndText)))) + .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(descriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(intervalStartLabel) - .addComponent(intervalStartText, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(intervalStartOpenCheckbox)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(intervalEndLabel) - .addComponent(intervalEndText, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(intervalEndOpenCheckbox)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 71, Short.MAX_VALUE) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(filler1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(descriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 23, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(intervalStartLabel) + .addComponent(intervalStartText, javax.swing.GroupLayout.PREFERRED_SIZE, 20, + javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(intervalEndLabel) + .addComponent(intervalEndText, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 23, Short.MAX_VALUE) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(titleLabel) - .addComponent(titleTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(replaceColumnCheckbox))) - .addGap(24, 24, 24)) + .addComponent(titleTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(replaceColumnCheckbox)) + .addGap(24, 24, 24)) ); }// //GEN-END:initComponents - private void replaceColumnCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_replaceColumnCheckboxActionPerformed + private void replaceColumnCheckboxActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_replaceColumnCheckboxActionPerformed refreshTitleEnabledState(); }//GEN-LAST:event_replaceColumnCheckboxActionPerformed - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JLabel descriptionLabel; - private javax.swing.Box.Filler filler1; - private javax.swing.JLabel intervalEndLabel; - private javax.swing.JCheckBox intervalEndOpenCheckbox; - private javax.swing.JTextField intervalEndText; - private javax.swing.JLabel intervalStartLabel; - private javax.swing.JCheckBox intervalStartOpenCheckbox; - private javax.swing.JTextField intervalStartText; - private javax.swing.JCheckBox replaceColumnCheckbox; - private javax.swing.JLabel titleLabel; - private javax.swing.JTextField titleTextField; - // End of variables declaration//GEN-END:variables } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/CopyDataToOtherColumnUI.form b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/CopyDataToOtherColumnUI.form index 35a63c7e41..b4b55f765a 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/CopyDataToOtherColumnUI.form +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/CopyDataToOtherColumnUI.form @@ -1,4 +1,4 @@ - +
    diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/CopyDataToOtherColumnUI.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/CopyDataToOtherColumnUI.java index 2f03af390d..53deb369a9 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/CopyDataToOtherColumnUI.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/CopyDataToOtherColumnUI.java @@ -1,115 +1,131 @@ /* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. + Copyright 2008-2010 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.ui; import java.util.ArrayList; import javax.swing.JPanel; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.plugin.manipulators.columns.CopyDataToOtherColumn; - import org.gephi.datalab.spi.DialogControls; import org.gephi.datalab.spi.columns.AttributeColumnsManipulator; import org.gephi.datalab.spi.columns.AttributeColumnsManipulatorUI; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Table; import org.openide.util.Lookup; import org.openide.util.NbBundle; /** * UI for CopyDataToOtherColumn AttributeColumnsManipulator - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -public class CopyDataToOtherColumnUI extends javax.swing.JPanel implements AttributeColumnsManipulatorUI{ +public class CopyDataToOtherColumnUI extends javax.swing.JPanel implements AttributeColumnsManipulatorUI { + CopyDataToOtherColumn manipulator; - AttributeColumn[] columns; + Column[] columns; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JComboBox columnsComboBox; + private javax.swing.JLabel descriptionLabel; + private javax.swing.JLabel sourceColumnLabel; + // End of variables declaration//GEN-END:variables - /** Creates new form CopyDataToOtherColumnUI */ + /** + * Creates new form CopyDataToOtherColumnUI + */ public CopyDataToOtherColumnUI() { initComponents(); } - public void setup(AttributeColumnsManipulator m, AttributeTable table, AttributeColumn column, DialogControls dialogControls) { - this.manipulator=(CopyDataToOtherColumn) m; + @Override + public void setup(AttributeColumnsManipulator m, GraphModel graphModel, Table table, Column column, + DialogControls dialogControls) { + this.manipulator = (CopyDataToOtherColumn) m; - sourceColumnLabel.setText(NbBundle.getMessage(CopyDataToOtherColumnUI.class, "CopyDataToOtherColumnUI.sourceColumnLabel.text",column.getTitle())); + sourceColumnLabel.setText(NbBundle + .getMessage(CopyDataToOtherColumnUI.class, "CopyDataToOtherColumnUI.sourceColumnLabel.text", + column.getTitle())); - AttributeColumnsController ac=Lookup.getDefault().lookup(AttributeColumnsController.class); + AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); - ArrayList availableColumns=new ArrayList(); + ArrayList availableColumns = new ArrayList<>(); - for(AttributeColumn c:table.getColumns()){ - if(ac.canChangeColumnData(c)&&c!=column){ + for (Column c : table) { + if (ac.canChangeColumnData(c) && c != column) { availableColumns.add(c); columnsComboBox.addItem(c.getTitle()); } } - columns=availableColumns.toArray(new AttributeColumn[0]); + columns = availableColumns.toArray(new Column[0]); } + @Override public void unSetup() { - if(columnsComboBox.getSelectedIndex()!=-1){ + if (columnsComboBox.getSelectedIndex() != -1) { manipulator.setTargetColumn(columns[columnsComboBox.getSelectedIndex()]); - }else{ + } else { manipulator.setTargetColumn(null); } } + @Override public String getDisplayName() { return manipulator.getName(); } + @Override public JPanel getSettingsPanel() { return this; } + @Override public boolean isModal() { return true; } - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. + /** + * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The content of this method is always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents @@ -120,7 +136,8 @@ private void initComponents() { sourceColumnLabel = new javax.swing.JLabel(); descriptionLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - descriptionLabel.setText(org.openide.util.NbBundle.getMessage(CopyDataToOtherColumnUI.class, "CopyDataToOtherColumnUI.descriptionLabel.text")); // NOI18N + descriptionLabel.setText(org.openide.util.NbBundle + .getMessage(CopyDataToOtherColumnUI.class, "CopyDataToOtherColumnUI.descriptionLabel.text")); // NOI18N sourceColumnLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); sourceColumnLabel.setText(null); @@ -129,30 +146,27 @@ private void initComponents() { this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(columnsComboBox, 0, 192, Short.MAX_VALUE) - .addComponent(sourceColumnLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 192, Short.MAX_VALUE)) - .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(columnsComboBox, 0, 192, Short.MAX_VALUE) + .addComponent(sourceColumnLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 192, Short.MAX_VALUE)) + .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap() - .addComponent(sourceColumnLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(descriptionLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(columnsComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap()) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addComponent(sourceColumnLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(descriptionLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(columnsComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap()) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JComboBox columnsComboBox; - private javax.swing.JLabel descriptionLabel; - private javax.swing.JLabel sourceColumnLabel; - // End of variables declaration//GEN-END:variables - } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/DuplicateColumnUI.form b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/DuplicateColumnUI.form index 217560a0ca..45ec8596c2 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/DuplicateColumnUI.form +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/DuplicateColumnUI.form @@ -1,4 +1,4 @@ - + diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/DuplicateColumnUI.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/DuplicateColumnUI.java index 50869b4dfe..665dcbc163 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/DuplicateColumnUI.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/DuplicateColumnUI.java @@ -1,118 +1,146 @@ /* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. + Copyright 2008-2010 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.ui; +import java.util.List; import javax.swing.JPanel; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; -import org.gephi.data.attributes.api.AttributeType; import org.gephi.datalab.plugin.manipulators.columns.DuplicateColumn; import org.gephi.datalab.spi.DialogControls; import org.gephi.datalab.spi.columns.AttributeColumnsManipulator; import org.gephi.datalab.spi.columns.AttributeColumnsManipulatorUI; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Table; import org.gephi.ui.utils.ColumnTitleValidator; +import org.gephi.ui.utils.SupportedColumnTypeWrapper; import org.netbeans.validation.api.ui.ValidationGroup; -import org.netbeans.validation.api.ui.ValidationPanel; +import org.netbeans.validation.api.ui.swing.ValidationPanel; import org.openide.util.NbBundle; /** * UI for DuplicateColumn AttributeColumnsManipulator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class DuplicateColumnUI extends javax.swing.JPanel implements AttributeColumnsManipulatorUI { private DuplicateColumn manipulator; - private AttributeTable table; + private Table table; private DialogControls dialogControls; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel descriptionLabel; + private javax.swing.JLabel titleLabel; + private javax.swing.JTextField titleTextField; + private javax.swing.JComboBox typeComboBox; + private javax.swing.JLabel typeLabel; + // End of variables declaration//GEN-END:variables - /** Creates new form DuplicateColumnUI */ + /** + * Creates new form DuplicateColumnUI + */ public DuplicateColumnUI() { initComponents(); titleTextField.getDocument().addDocumentListener(new DocumentListener() { + @Override public void insertUpdate(DocumentEvent e) { refreshOkButton(); } + @Override public void removeUpdate(DocumentEvent e) { refreshOkButton(); } + @Override public void changedUpdate(DocumentEvent e) { refreshOkButton(); } - private void refreshOkButton(){ - String text=titleTextField.getText(); - dialogControls.setOkButtonEnabled(text!=null&&!text.isEmpty()&&!table.hasColumn(text));//Title not empty and not repeated. + private void refreshOkButton() { + String text = titleTextField.getText(); + dialogControls.setOkButtonEnabled( + text != null && !text.isEmpty() && !table.hasColumn(text));//Title not empty and not repeated. } }); } - public void setup(AttributeColumnsManipulator m, AttributeTable table, AttributeColumn column, DialogControls dialogControls) { - this.table=table; - this.dialogControls=dialogControls; + @Override + public void setup(AttributeColumnsManipulator m, GraphModel graphModel, Table table, Column column, + DialogControls dialogControls) { + this.table = table; + this.dialogControls = dialogControls; this.manipulator = (DuplicateColumn) m; - descriptionLabel.setText(NbBundle.getMessage(DuplicateColumnUI.class, "DuplicateColumnUI.descriptionLabel.text", column.getTitle())); - titleTextField.setText(NbBundle.getMessage(DuplicateColumnUI.class, "DuplicateColumnUI.new.title", column.getTitle())); + descriptionLabel.setText( + NbBundle.getMessage(DuplicateColumnUI.class, "DuplicateColumnUI.descriptionLabel.text", column.getTitle())); + titleTextField + .setText(NbBundle.getMessage(DuplicateColumnUI.class, "DuplicateColumnUI.new.title", column.getTitle())); - for (AttributeType type : AttributeType.values()) { - typeComboBox.addItem(type); + List supportedTypesWrappers = + SupportedColumnTypeWrapper.buildOrderedSupportedTypesList(graphModel); + + for (SupportedColumnTypeWrapper supportedColumnTypeWrapper : supportedTypesWrappers) { + typeComboBox.addItem(supportedColumnTypeWrapper); } - typeComboBox.setSelectedItem(column.getType()); + + typeComboBox.setSelectedItem(new SupportedColumnTypeWrapper(column.getTypeClass())); } + @Override public void unSetup() { - manipulator.setColumnType((AttributeType) typeComboBox.getSelectedItem()); + manipulator.setColumnType(((SupportedColumnTypeWrapper) typeComboBox.getSelectedItem()).getType()); manipulator.setTitle(titleTextField.getText()); } + @Override public String getDisplayName() { return manipulator.getName(); } + @Override public JPanel getSettingsPanel() { ValidationPanel validationPanel = new ValidationPanel(); validationPanel.setInnerComponent(this); @@ -124,14 +152,13 @@ public JPanel getSettingsPanel() { return validationPanel; } + @Override public boolean isModal() { return true; } - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. + /** + * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The content of this method is always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents @@ -143,11 +170,14 @@ private void initComponents() { typeComboBox = new javax.swing.JComboBox(); descriptionLabel = new javax.swing.JLabel(); - titleLabel.setText(org.openide.util.NbBundle.getMessage(DuplicateColumnUI.class, "DuplicateColumnUI.titleLabel.text")); // NOI18N + titleLabel.setText(org.openide.util.NbBundle + .getMessage(DuplicateColumnUI.class, "DuplicateColumnUI.titleLabel.text")); // NOI18N - titleTextField.setText(org.openide.util.NbBundle.getMessage(DuplicateColumnUI.class, "DuplicateColumnUI.titleTextField.text")); // NOI18N + titleTextField.setText(org.openide.util.NbBundle + .getMessage(DuplicateColumnUI.class, "DuplicateColumnUI.titleTextField.text")); // NOI18N - typeLabel.setText(org.openide.util.NbBundle.getMessage(DuplicateColumnUI.class, "DuplicateColumnUI.typeLabel.text")); // NOI18N + typeLabel.setText(org.openide.util.NbBundle + .getMessage(DuplicateColumnUI.class, "DuplicateColumnUI.typeLabel.text")); // NOI18N descriptionLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); descriptionLabel.setText(null); @@ -156,41 +186,38 @@ private void initComponents() { this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(descriptionLabel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 299, Short.MAX_VALUE) - .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() - .addComponent(titleLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(titleTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 203, Short.MAX_VALUE)) - .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() - .addComponent(typeLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(typeComboBox, 0, 199, Short.MAX_VALUE))) - .addContainerGap()) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(descriptionLabel, javax.swing.GroupLayout.Alignment.LEADING, + javax.swing.GroupLayout.DEFAULT_SIZE, 299, Short.MAX_VALUE) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() + .addComponent(titleLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(titleTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 203, Short.MAX_VALUE)) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() + .addComponent(typeLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(typeComboBox, 0, 199, Short.MAX_VALUE))) + .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(descriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(titleLabel) - .addComponent(titleTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(typeLabel) - .addComponent(typeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(descriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 23, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(titleLabel) + .addComponent(titleTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(typeLabel) + .addComponent(typeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JLabel descriptionLabel; - private javax.swing.JLabel titleLabel; - private javax.swing.JTextField titleTextField; - private javax.swing.JComboBox typeComboBox; - private javax.swing.JLabel typeLabel; - // End of variables declaration//GEN-END:variables } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/GeneralCreateColumnFromRegexUI.form b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/GeneralCreateColumnFromRegexUI.form index f9d02243e5..9e00f8926f 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/GeneralCreateColumnFromRegexUI.form +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/GeneralCreateColumnFromRegexUI.form @@ -1,4 +1,4 @@ - + diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/GeneralCreateColumnFromRegexUI.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/GeneralCreateColumnFromRegexUI.java index ed1e723986..9c68a3306b 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/GeneralCreateColumnFromRegexUI.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/columns/ui/GeneralCreateColumnFromRegexUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.columns.ui; import java.awt.Color; @@ -47,93 +48,111 @@ Development and Distribution License("CDDL") (collectively, the import javax.swing.JPanel; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; import org.gephi.datalab.plugin.manipulators.columns.GeneralCreateColumnFromRegex; import org.gephi.datalab.spi.DialogControls; import org.gephi.datalab.spi.columns.AttributeColumnsManipulator; import org.gephi.datalab.spi.columns.AttributeColumnsManipulatorUI; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Table; import org.gephi.ui.utils.ColumnTitleValidator; import org.netbeans.validation.api.ui.ValidationGroup; -import org.netbeans.validation.api.ui.ValidationPanel; +import org.netbeans.validation.api.ui.swing.ValidationPanel; import org.openide.util.NbBundle; /** * UI for CreateBooleanMatchesColumn AttributeColumnsManipulator - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class GeneralCreateColumnFromRegexUI extends javax.swing.JPanel implements AttributeColumnsManipulatorUI { + private static final Color invalidRegexColor = new Color(254, 150, 150); private DialogControls dialogControls; - private AttributeTable table; - - public enum Mode { - - BOOLEAN, - MATCHING_GROUPS - } + private Table table; private Mode mode = Mode.BOOLEAN; - private static final Color invalidRegexColor = new Color(254, 150, 150); private GeneralCreateColumnFromRegex manipulator; private Pattern pattern; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel descriptionLabel; + private javax.swing.JLabel regexLabel; + private javax.swing.JTextField regexTextField; + private javax.swing.JLabel titleLabel; + private javax.swing.JTextField titleTextField; + // End of variables declaration//GEN-END:variables - /** Creates new form CreateBooleanMatchesColumnUI */ + /** + * Creates new form CreateBooleanMatchesColumnUI + */ public GeneralCreateColumnFromRegexUI() { initComponents(); regexTextField.getDocument().addDocumentListener(new DocumentListener() { + @Override public void insertUpdate(DocumentEvent e) { refreshPattern(); } + @Override public void removeUpdate(DocumentEvent e) { refreshPattern(); } + @Override public void changedUpdate(DocumentEvent e) { refreshPattern(); } }); titleTextField.getDocument().addDocumentListener(new DocumentListener() { + @Override public void insertUpdate(DocumentEvent e) { refreshOkButton(); } + @Override public void removeUpdate(DocumentEvent e) { refreshOkButton(); } + @Override public void changedUpdate(DocumentEvent e) { refreshOkButton(); } }); } - public void setup(AttributeColumnsManipulator m, AttributeTable table, AttributeColumn column, DialogControls dialogControls) { + @Override + public void setup(AttributeColumnsManipulator m, GraphModel graphModel, Table table, Column column, + DialogControls dialogControls) { this.manipulator = (GeneralCreateColumnFromRegex) m; this.table = table; this.dialogControls = dialogControls; switch (mode) { case BOOLEAN: - descriptionLabel.setText(NbBundle.getMessage(GeneralCreateColumnFromRegexUI.class, "GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean", column.getTitle())); + descriptionLabel.setText(NbBundle.getMessage(GeneralCreateColumnFromRegexUI.class, + "GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean", column.getTitle())); break; case MATCHING_GROUPS: - descriptionLabel.setText(NbBundle.getMessage(GeneralCreateColumnFromRegexUI.class, "GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups", column.getTitle())); + descriptionLabel.setText(NbBundle.getMessage(GeneralCreateColumnFromRegexUI.class, + "GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups", column.getTitle())); break; } refreshPattern(); } + @Override public void unSetup() { manipulator.setTitle(titleTextField.getText()); manipulator.setPattern(pattern); } + @Override public String getDisplayName() { return manipulator.getName(); } + @Override public JPanel getSettingsPanel() { ValidationPanel validationPanel = new ValidationPanel(); validationPanel.setInnerComponent(this); @@ -145,13 +164,15 @@ public JPanel getSettingsPanel() { return validationPanel; } + @Override public boolean isModal() { return true; } private void refreshOkButton() { String text = titleTextField.getText(); - dialogControls.setOkButtonEnabled(pattern != null && text != null && !text.isEmpty() && !table.hasColumn(text));//Valid regex and title not empty and not repeated. + dialogControls.setOkButtonEnabled(pattern != null && text != null && !text.isEmpty() && + !table.hasColumn(text));//Valid regex and title not empty and not repeated. } private void refreshPattern() { @@ -174,7 +195,8 @@ public void setMode(Mode mode) { this.mode = mode; } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -189,13 +211,17 @@ private void initComponents() { regexTextField = new javax.swing.JTextField(); descriptionLabel = new javax.swing.JLabel(); - titleLabel.setText(org.openide.util.NbBundle.getMessage(GeneralCreateColumnFromRegexUI.class, "GeneralCreateColumnFromRegexUI.titleLabel.text")); // NOI18N + titleLabel.setText(org.openide.util.NbBundle.getMessage(GeneralCreateColumnFromRegexUI.class, + "GeneralCreateColumnFromRegexUI.titleLabel.text")); // NOI18N - titleTextField.setText(org.openide.util.NbBundle.getMessage(GeneralCreateColumnFromRegexUI.class, "GeneralCreateColumnFromRegexUI.titleTextField.text")); // NOI18N + titleTextField.setText(org.openide.util.NbBundle.getMessage(GeneralCreateColumnFromRegexUI.class, + "GeneralCreateColumnFromRegexUI.titleTextField.text")); // NOI18N - regexLabel.setText(org.openide.util.NbBundle.getMessage(GeneralCreateColumnFromRegexUI.class, "GeneralCreateColumnFromRegexUI.regexLabel.text")); // NOI18N + regexLabel.setText(org.openide.util.NbBundle.getMessage(GeneralCreateColumnFromRegexUI.class, + "GeneralCreateColumnFromRegexUI.regexLabel.text")); // NOI18N - regexTextField.setText(org.openide.util.NbBundle.getMessage(GeneralCreateColumnFromRegexUI.class, "GeneralCreateColumnFromRegexUI.regexTextField.text")); // NOI18N + regexTextField.setText(org.openide.util.NbBundle.getMessage(GeneralCreateColumnFromRegexUI.class, + "GeneralCreateColumnFromRegexUI.regexTextField.text")); // NOI18N descriptionLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); descriptionLabel.setText(null); @@ -204,41 +230,45 @@ private void initComponents() { this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(descriptionLabel, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 280, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addComponent(regexLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(regexTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 180, Short.MAX_VALUE)) - .addGroup(layout.createSequentialGroup() - .addComponent(titleLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(titleTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 184, Short.MAX_VALUE))) - .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(descriptionLabel, javax.swing.GroupLayout.Alignment.TRAILING, + javax.swing.GroupLayout.DEFAULT_SIZE, 280, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addComponent(regexLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(regexTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 180, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addComponent(titleLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(titleTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 184, Short.MAX_VALUE))) + .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap() - .addComponent(descriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 33, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(titleTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(titleLabel)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(regexLabel) - .addComponent(regexTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap()) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addComponent(descriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 33, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(titleTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(titleLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(regexLabel) + .addComponent(regexTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap()) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JLabel descriptionLabel; - private javax.swing.JLabel regexLabel; - private javax.swing.JTextField regexTextField; - private javax.swing.JLabel titleLabel; - private javax.swing.JTextField titleTextField; - // End of variables declaration//GEN-END:variables + + public enum Mode { + + BOOLEAN, + MATCHING_GROUPS + } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/BasicEdgesManipulator.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/BasicEdgesManipulator.java index fe5d25d909..4116dc18cf 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/BasicEdgesManipulator.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/BasicEdgesManipulator.java @@ -39,25 +39,28 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.edges; import org.gephi.datalab.spi.ContextMenuItemManipulator; import org.gephi.datalab.spi.edges.EdgesManipulator; /** - * * @author Eduardo */ -public abstract class BasicEdgesManipulator implements EdgesManipulator{ +public abstract class BasicEdgesManipulator implements EdgesManipulator { + @Override public boolean isAvailable() { return true; } + @Override public ContextMenuItemManipulator[] getSubItems() { return null; } + @Override public Integer getMnemonicKey() { return null; } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/ClearEdgesData.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/ClearEdgesData.java index 4b2c64ddc1..205d90a29e 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/ClearEdgesData.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/ClearEdgesData.java @@ -39,43 +39,47 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.edges; import java.util.ArrayList; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeController; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.api.datatables.DataTablesController; import org.gephi.datalab.plugin.manipulators.GeneralColumnsChooser; import org.gephi.datalab.plugin.manipulators.ui.GeneralChooseColumnsUI; import org.gephi.datalab.spi.ManipulatorUI; +import org.gephi.graph.api.Column; import org.gephi.graph.api.Edge; +import org.gephi.graph.api.GraphController; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; /** * Edges manipulator that clears the given columns data of one or more edges except the id and computed attributes. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class ClearEdgesData extends BasicEdgesManipulator implements GeneralColumnsChooser { private Edge[] edges; - private AttributeColumn[] columnsToClearData; + private Column[] columnsToClearData; + @Override public void setup(Edge[] edges, Edge clickedEdge) { this.edges = edges; AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); - ArrayList columnsToClearDataList = new ArrayList(); - for (AttributeColumn column : Lookup.getDefault().lookup(AttributeController.class).getModel().getEdgeTable().getColumns()) { + ArrayList columnsToClearDataList = new ArrayList<>(); + for (Column column : Lookup.getDefault().lookup(GraphController.class).getGraphModel().getEdgeTable()) { if (ac.canClearColumnData(column)) { columnsToClearDataList.add(column); } } - columnsToClearData = columnsToClearDataList.toArray(new AttributeColumn[0]); + columnsToClearData = columnsToClearDataList.toArray(new Column[0]); } + @Override public void execute() { if (columnsToClearData.length >= 0) { AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); @@ -84,6 +88,7 @@ public void execute() { } } + @Override public String getName() { if (edges.length > 1) { return NbBundle.getMessage(ClearEdgesData.class, "ClearEdgesData.name.multiple"); @@ -92,35 +97,43 @@ public String getName() { } } + @Override public String getDescription() { return NbBundle.getMessage(ClearEdgesData.class, "ClearEdgesData.description"); } + @Override public boolean canExecute() { return true; } + @Override public ManipulatorUI getUI() { return new GeneralChooseColumnsUI(NbBundle.getMessage(ClearEdgesData.class, "ClearEdgesData.ui.description")); } + @Override public int getType() { return 200; } + @Override public int getPosition() { return 100; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/clear-data.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/clear-data.svg", false); } - public AttributeColumn[] getColumns() { + @Override + public Column[] getColumns() { return columnsToClearData; } - public void setColumns(AttributeColumn[] columnsToClearData) { + @Override + public void setColumns(Column[] columnsToClearData) { this.columnsToClearData = columnsToClearData; } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/ClearEdgesDataBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/ClearEdgesDataBuilder.java index 5315305187..9600cacd8f 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/ClearEdgesDataBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/ClearEdgesDataBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.edges; import org.gephi.datalab.spi.edges.EdgesManipulator; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for ClearEdgesData edges manipulator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=EdgesManipulatorBuilder.class) -public class ClearEdgesDataBuilder implements EdgesManipulatorBuilder{ +@ServiceProvider(service = EdgesManipulatorBuilder.class) +public class ClearEdgesDataBuilder implements EdgesManipulatorBuilder { + @Override public EdgesManipulator getEdgesManipulator() { return new ClearEdgesData(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/CopyEdgeDataToOtherEdges.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/CopyEdgeDataToOtherEdges.java index 9c605b103a..5f09180991 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/CopyEdgeDataToOtherEdges.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/CopyEdgeDataToOtherEdges.java @@ -1,83 +1,88 @@ /* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. + Copyright 2008-2010 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.edges; import java.util.ArrayList; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeController; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.api.datatables.DataTablesController; import org.gephi.datalab.plugin.manipulators.GeneralColumnsAndRowChooser; import org.gephi.datalab.plugin.manipulators.ui.GeneralChooseColumnsAndRowUI; import org.gephi.datalab.spi.ManipulatorUI; +import org.gephi.graph.api.Column; import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.GraphController; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; /** * Edges manipulator that copies the given columns data of one edge to the other selected edges. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class CopyEdgeDataToOtherEdges extends BasicEdgesManipulator implements GeneralColumnsAndRowChooser { private Edge clickedEdge; private Edge[] edges; - private AttributeColumn[] columnsToCopyData; + private Column[] columnsToCopyData; + @Override public void setup(Edge[] edges, Edge clickedEdge) { this.clickedEdge = clickedEdge; this.edges = edges; AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); - ArrayList columnsToCopyDataList = new ArrayList(); - for (AttributeColumn column : Lookup.getDefault().lookup(AttributeController.class).getModel().getEdgeTable().getColumns()) { + ArrayList columnsToCopyDataList = new ArrayList<>(); + for (Column column : Lookup.getDefault().lookup(GraphController.class).getGraphModel().getEdgeTable()) { if (ac.canChangeColumnData(column)) { columnsToCopyDataList.add(column); } } - columnsToCopyData = columnsToCopyDataList.toArray(new AttributeColumn[0]); + columnsToCopyData = columnsToCopyDataList.toArray(new Column[0]); } + @Override public void execute() { if (columnsToCopyData.length >= 0) { AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); @@ -86,51 +91,65 @@ public void execute() { } } + @Override public String getName() { return NbBundle.getMessage(CopyEdgeDataToOtherEdges.class, "CopyEdgeDataToOtherEdges.name"); } + @Override public String getDescription() { return NbBundle.getMessage(CopyEdgeDataToOtherEdges.class, "CopyEdgeDataToOtherEdges.description"); } + @Override public boolean canExecute() { - return edges.length>1;//At least 2 edges to copy data from one to the other. + return edges.length > 1;//At least 2 edges to copy data from one to the other. } + @Override public ManipulatorUI getUI() { - return new GeneralChooseColumnsAndRowUI(NbBundle.getMessage(CopyEdgeDataToOtherEdges.class, "CopyEdgeDataToOtherEdges.ui.rowDescription"),NbBundle.getMessage(CopyEdgeDataToOtherEdges.class, "CopyEdgeDataToOtherEdges.ui.columnsDescription")); + return new GeneralChooseColumnsAndRowUI( + NbBundle.getMessage(CopyEdgeDataToOtherEdges.class, "CopyEdgeDataToOtherEdges.ui.rowDescription"), + NbBundle.getMessage(CopyEdgeDataToOtherEdges.class, "CopyEdgeDataToOtherEdges.ui.columnsDescription")); } + @Override public int getType() { return 200; } + @Override public int getPosition() { return 200; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/broom--arrow.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/broom--arrow.svg", false); } - public AttributeColumn[] getColumns() { + @Override + public Column[] getColumns() { return columnsToCopyData; } - public void setColumns(AttributeColumn[] columnsToClearData) { + @Override + public void setColumns(Column[] columnsToClearData) { this.columnsToCopyData = columnsToClearData; } - public Object[] getRows() { + @Override + public Element[] getRows() { return edges; } - public Object getRow() { + @Override + public Element getRow() { return clickedEdge; } - public void setRow(Object row) { - clickedEdge=(Edge) row; + @Override + public void setRow(Element row) { + clickedEdge = (Edge) row; } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/CopyEdgeDataToOtherEdgesBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/CopyEdgeDataToOtherEdgesBuilder.java index f2ffb554f4..f647b4f2a1 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/CopyEdgeDataToOtherEdgesBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/CopyEdgeDataToOtherEdgesBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.edges; import org.gephi.datalab.spi.edges.EdgesManipulator; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for CopyEdgeDataToOtherEdges edges manipulator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=EdgesManipulatorBuilder.class) -public class CopyEdgeDataToOtherEdgesBuilder implements EdgesManipulatorBuilder{ +@ServiceProvider(service = EdgesManipulatorBuilder.class) +public class CopyEdgeDataToOtherEdgesBuilder implements EdgesManipulatorBuilder { + @Override public EdgesManipulator getEdgesManipulator() { return new CopyEdgeDataToOtherEdges(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/DeleteEdges.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/DeleteEdges.java index 29d8bfc5b8..76ee2fc60b 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/DeleteEdges.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/DeleteEdges.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.edges; import javax.swing.Icon; @@ -52,23 +53,29 @@ Development and Distribution License("CDDL") (collectively, the /** * Edges manipulator that deletes one or more edges. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class DeleteEdges extends BasicEdgesManipulator { private Edge[] edges; + @Override public void setup(Edge[] edges, Edge clickedEdge) { this.edges = edges; } + @Override public void execute() { - if (JOptionPane.showConfirmDialog(null, NbBundle.getMessage(DeleteEdges.class, "DeleteEdges.confirmation.message"), getName(), JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { + if (JOptionPane + .showConfirmDialog(null, NbBundle.getMessage(DeleteEdges.class, "DeleteEdges.confirmation.message"), + getName(), JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); gec.deleteEdges(edges); } } + @Override public String getName() { if (edges.length > 1) { return NbBundle.getMessage(DeleteEdges.class, "DeleteEdges.name.multiple"); @@ -77,27 +84,33 @@ public String getName() { } } + @Override public String getDescription() { return ""; } + @Override public boolean canExecute() { return true; } + @Override public ManipulatorUI getUI() { return null; } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 300; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/cross.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/cross.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/DeleteEdgesBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/DeleteEdgesBuilder.java index 5dc2ebf846..b184a989f9 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/DeleteEdgesBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/DeleteEdgesBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.edges; import org.gephi.datalab.spi.edges.EdgesManipulator; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for DeleteEdges edges manipulator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=EdgesManipulatorBuilder.class) -public class DeleteEdgesBuilder implements EdgesManipulatorBuilder{ +@ServiceProvider(service = EdgesManipulatorBuilder.class) +public class DeleteEdgesBuilder implements EdgesManipulatorBuilder { + @Override public EdgesManipulator getEdgesManipulator() { return new DeleteEdges(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/DeleteEdgesWithNodes.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/DeleteEdgesWithNodes.java index 0f39134784..aa9a10bc5a 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/DeleteEdgesWithNodes.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/DeleteEdgesWithNodes.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.edges; import javax.swing.Icon; @@ -52,22 +53,26 @@ Development and Distribution License("CDDL") (collectively, the /** * Edges manipulator that deletes one or more edges and allows the user to choose what of their nodes to delete at the same time. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -public class DeleteEdgesWithNodes extends BasicEdgesManipulator { +public class DeleteEdgesWithNodes extends BasicEdgesManipulator { private Edge[] edges; - private boolean deleteSource,deleteTarget; + private boolean deleteSource, deleteTarget; + @Override public void setup(Edge[] edges, Edge clickedEdge) { this.edges = edges; } + @Override public void execute() { GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); - gec.deleteEdgesWithNodes(edges,deleteSource,deleteTarget); + gec.deleteEdgesWithNodes(edges, deleteSource, deleteTarget); } + @Override public String getName() { if (edges.length > 1) { return NbBundle.getMessage(DeleteEdgesWithNodes.class, "DeleteEdgesWithNodes.name.multiple"); @@ -76,28 +81,34 @@ public String getName() { } } + @Override public String getDescription() { return ""; } + @Override public boolean canExecute() { return true; } + @Override public ManipulatorUI getUI() { return new DeleteEdgesWithNodesUI(); } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 400; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/cross.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/cross.svg", false); } public void setDeleteSource(boolean deleteSource) { diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/DeleteEdgesWithNodesBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/DeleteEdgesWithNodesBuilder.java index e9eb7bc7da..0c555c3088 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/DeleteEdgesWithNodesBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/DeleteEdgesWithNodesBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.edges; import org.gephi.datalab.spi.edges.EdgesManipulator; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for DeleteEdgesWithNodes edges manipulator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=EdgesManipulatorBuilder.class) -public class DeleteEdgesWithNodesBuilder implements EdgesManipulatorBuilder{ +@ServiceProvider(service = EdgesManipulatorBuilder.class) +public class DeleteEdgesWithNodesBuilder implements EdgesManipulatorBuilder { + @Override public EdgesManipulator getEdgesManipulator() { return new DeleteEdgesWithNodes(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/OpenInEditEdgeWindow.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/OpenInEditEdgeWindow.java index 7de799ebad..5420d73b3f 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/OpenInEditEdgeWindow.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/OpenInEditEdgeWindow.java @@ -39,33 +39,38 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.edges; import javax.swing.Icon; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.graph.api.Edge; -import org.gephi.tools.api.EditWindowController; +import org.gephi.desktop.attributes.api.AttributesUIController; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; /** * Opens the selected edge(s) one or various in Edit window. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -public class OpenInEditEdgeWindow extends BasicEdgesManipulator { +public class OpenInEditEdgeWindow extends BasicEdgesManipulator { Edge[] edges; + @Override public void setup(Edge[] edges, Edge clickedEdge) { - this.edges=edges; + this.edges = edges; } + @Override public void execute() { - EditWindowController edc = Lookup.getDefault().lookup(EditWindowController.class); - edc.openEditWindow(); + AttributesUIController edc = Lookup.getDefault().lookup(AttributesUIController.class); + edc.openWindowAndRequestActive(); edc.editEdges(edges); } + @Override public String getName() { if (edges.length > 1) { return NbBundle.getMessage(OpenInEditEdgeWindow.class, "OpenInEditEdgeWindow.name.multiple"); @@ -74,6 +79,7 @@ public String getName() { } } + @Override public String getDescription() { if (edges.length > 1) { return NbBundle.getMessage(OpenInEditEdgeWindow.class, "OpenInEditEdgeWindow.description.multiple"); @@ -82,23 +88,28 @@ public String getDescription() { } } + @Override public boolean canExecute() { return true; } + @Override public ManipulatorUI getUI() { return null; } + @Override public int getType() { return 0; } + @Override public int getPosition() { return 0; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/edit.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/edit.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/OpenInEditEdgeWindowBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/OpenInEditEdgeWindowBuilder.java index 53792ab6b6..8961da2e6a 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/OpenInEditEdgeWindowBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/OpenInEditEdgeWindowBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.edges; import org.gephi.datalab.spi.edges.EdgesManipulator; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for OpenInEditEdgeWindow edges manipulator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=EdgesManipulatorBuilder.class) -public class OpenInEditEdgeWindowBuilder implements EdgesManipulatorBuilder{ +@ServiceProvider(service = EdgesManipulatorBuilder.class) +public class OpenInEditEdgeWindowBuilder implements EdgesManipulatorBuilder { + @Override public EdgesManipulator getEdgesManipulator() { return new OpenInEditEdgeWindow(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectNodesOnTable.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectNodesOnTable.java index b426df625f..22b8377765 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectNodesOnTable.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectNodesOnTable.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.edges; import javax.swing.Icon; @@ -52,48 +53,59 @@ Development and Distribution License("CDDL") (collectively, the /** * Edges manipulator that selects source and target node of an edge and selects them in nodes table. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class SelectNodesOnTable extends BasicEdgesManipulator { private Edge clickedEdge; + @Override public void setup(Edge[] edges, Edge clickedEdge) { - this.clickedEdge=clickedEdge; + this.clickedEdge = clickedEdge; } + @Override public void execute() { - Node[] nodes=new Node[]{clickedEdge.getSource(),clickedEdge.getTarget()}; - DataTablesController dtc=Lookup.getDefault().lookup(DataTablesController.class); + Node[] nodes = new Node[] {clickedEdge.getSource(), clickedEdge.getTarget()}; + DataTablesController dtc = Lookup.getDefault().lookup(DataTablesController.class); dtc.setNodeTableSelection(nodes); dtc.selectNodesTable(); } + @Override public String getName() { return NbBundle.getMessage(SelectNodesOnTable.class, "SelectNodesOnTable.name"); } + @Override public String getDescription() { return ""; } + @Override public boolean canExecute() { return true; } + @Override public ManipulatorUI getUI() { return null; } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 200; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/table-select-row.png", true); + return ImageUtilities + .loadImageIcon("DataLaboratoryPlugin/table-select-row.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectNodesOnTableBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectNodesOnTableBuilder.java index 8850eb6193..85e01f4b2a 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectNodesOnTableBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectNodesOnTableBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.edges; import org.gephi.datalab.spi.edges.EdgesManipulator; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for SelectNodesOnTable edges manipulator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=EdgesManipulatorBuilder.class) -public class SelectNodesOnTableBuilder implements EdgesManipulatorBuilder{ +@ServiceProvider(service = EdgesManipulatorBuilder.class) +public class SelectNodesOnTableBuilder implements EdgesManipulatorBuilder { + @Override public EdgesManipulator getEdgesManipulator() { return new SelectNodesOnTable(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectOnGraph.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectOnGraph.java new file mode 100644 index 0000000000..6cd1a5d4df --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectOnGraph.java @@ -0,0 +1,113 @@ +/* +Copyright 2008-2010 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.datalab.plugin.manipulators.edges; + +import javax.swing.Icon; +import org.gephi.datalab.spi.ManipulatorUI; +import org.gephi.graph.api.Edge; +import org.gephi.visualization.api.VisualizationController; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +/** + * Nodes manipulator that selects edges in the graph overview. + * + * @author Eduardo Ramos + */ +public class SelectOnGraph extends BasicEdgesManipulator { + + private Edge[] edges; + private Edge clickedEdge; + + @Override + public void setup(Edge[] nodes, Edge clickedEdge) { + this.edges = nodes; + this.clickedEdge = clickedEdge; + } + + @Override + public void execute() { + VisualizationController vc = Lookup.getDefault().lookup(VisualizationController.class); + if (vc != null) { + vc.selectEdges(edges); + vc.centerOnEdge(clickedEdge); + } + } + + @Override + public String getName() { + return NbBundle.getMessage(SelectOnGraph.class, "SelectOnGraph.name"); + } + + @Override + public String getDescription() { + return ""; + } + + @Override + public boolean canExecute() { + return true; + } + + @Override + public ManipulatorUI getUI() { + return null; + } + + @Override + public int getType() { + return 100; + } + + @Override + public int getPosition() { + return 0; + } + + @Override + public Icon getIcon() { + return ImageUtilities + .loadImageIcon("DataLaboratoryPlugin/magnifier--arrow.svg", false); + } +} diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectOnGraphBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectOnGraphBuilder.java new file mode 100644 index 0000000000..d0029f8ff9 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectOnGraphBuilder.java @@ -0,0 +1,61 @@ +/* +Copyright 2008-2010 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.datalab.plugin.manipulators.edges; + +import org.gephi.datalab.spi.edges.EdgesManipulator; +import org.gephi.datalab.spi.edges.EdgesManipulatorBuilder; +import org.openide.util.lookup.ServiceProvider; + +/** + * Builder for SelectOnGraph nodes manipulator. + * + * @author Eduardo Ramos + */ +@ServiceProvider(service = EdgesManipulatorBuilder.class) +public class SelectOnGraphBuilder implements EdgesManipulatorBuilder { + + @Override + public EdgesManipulator getEdgesManipulator() { + return new SelectOnGraph(); + } +} diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectSourceOnGraph.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectSourceOnGraph.java index 4302e9f5d7..7eec9da4ee 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectSourceOnGraph.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectSourceOnGraph.java @@ -39,58 +39,72 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.edges; import javax.swing.Icon; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.graph.api.Edge; import org.gephi.graph.api.Node; -import org.gephi.visualization.VizController; +import org.gephi.visualization.api.VisualizationController; import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; import org.openide.util.NbBundle; /** * Edges manipulator that shows the source node of an edge centered in graph view. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class SelectSourceOnGraph extends BasicEdgesManipulator { private Edge clickedEdge; + @Override public void setup(Edge[] edges, Edge clickedEdge) { this.clickedEdge = clickedEdge; } + @Override public void execute() { Node source = clickedEdge.getSource(); - VizController.getInstance().getSelectionManager().centerOnNode(source); + VisualizationController vc = Lookup.getDefault().lookup(VisualizationController.class); + vc.centerOnNode(source); } + @Override public String getName() { return NbBundle.getMessage(SelectSourceOnGraph.class, "SelectSourceOnGraph.name"); } + @Override public String getDescription() { return ""; } + @Override public boolean canExecute() { return true; } + @Override public ManipulatorUI getUI() { return null; } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 0; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/magnifier--arrow.png", true); + return ImageUtilities + .loadImageIcon("DataLaboratoryPlugin/magnifier--arrow.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectSourceOnGraphBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectSourceOnGraphBuilder.java index cb298e1c48..5e02dd86f2 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectSourceOnGraphBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectSourceOnGraphBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.edges; import org.gephi.datalab.spi.edges.EdgesManipulator; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for SelectSourceOnGraph edges manipulator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=EdgesManipulatorBuilder.class) -public class SelectSourceOnGraphBuilder implements EdgesManipulatorBuilder{ +@ServiceProvider(service = EdgesManipulatorBuilder.class) +public class SelectSourceOnGraphBuilder implements EdgesManipulatorBuilder { + @Override public EdgesManipulator getEdgesManipulator() { return new SelectSourceOnGraph(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectTargetOnGraph.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectTargetOnGraph.java index 035e0f0051..bc1a20a84f 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectTargetOnGraph.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectTargetOnGraph.java @@ -39,57 +39,71 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.edges; import javax.swing.Icon; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.graph.api.Edge; import org.gephi.graph.api.Node; -import org.gephi.visualization.VizController; +import org.gephi.visualization.api.VisualizationController; import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; import org.openide.util.NbBundle; /** * Edges manipulator that shows the target node of an edge centered in graph view. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class SelectTargetOnGraph extends BasicEdgesManipulator { private Edge clickedEdge; + @Override public void setup(Edge[] edges, Edge clickedEdge) { - this.clickedEdge=clickedEdge; + this.clickedEdge = clickedEdge; } + @Override public void execute() { - Node source=clickedEdge.getTarget(); - VizController.getInstance().getSelectionManager().centerOnNode(source); + Node source = clickedEdge.getTarget(); + VisualizationController vc = Lookup.getDefault().lookup(VisualizationController.class); + vc.centerOnNode(source); } + @Override public String getName() { return NbBundle.getMessage(SelectTargetOnGraph.class, "SelectTargetOnGraph.name"); } + @Override public String getDescription() { return ""; } + @Override public boolean canExecute() { return true; } + @Override public ManipulatorUI getUI() { return null; } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 100; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/magnifier--arrow.png", true); + return ImageUtilities + .loadImageIcon("DataLaboratoryPlugin/magnifier--arrow.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectTargetOnGraphBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectTargetOnGraphBuilder.java index f82f89583b..f2725e33df 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectTargetOnGraphBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/SelectTargetOnGraphBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.edges; import org.gephi.datalab.spi.edges.EdgesManipulator; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for SelectTargetOnGraph edges manipulator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=EdgesManipulatorBuilder.class) -public class SelectTargetOnGraphBuilder implements EdgesManipulatorBuilder{ +@ServiceProvider(service = EdgesManipulatorBuilder.class) +public class SelectTargetOnGraphBuilder implements EdgesManipulatorBuilder { + @Override public EdgesManipulator getEdgesManipulator() { return new SelectTargetOnGraph(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/ui/DeleteEdgesWithNodesUI.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/ui/DeleteEdgesWithNodesUI.java index b876dc3f39..fba9591453 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/ui/DeleteEdgesWithNodesUI.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/edges/ui/DeleteEdgesWithNodesUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.edges.ui; import javax.swing.JPanel; @@ -50,44 +51,62 @@ Development and Distribution License("CDDL") (collectively, the /** * UI for DeleteEdgesWithNodes edges manipulator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class DeleteEdgesWithNodesUI extends javax.swing.JPanel implements ManipulatorUI { private static final String DELETE_SOURCE_SAVED_PREFERENCES = "DeleteEdgesWithNodesUI_deleteSource"; private static final String DELETE_TARGET_SAVED_PREFERENCES = "DeleteEdgesWithNodesUI_deleteTarget"; private DeleteEdgesWithNodes del; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JCheckBox deleteSource; + private javax.swing.JCheckBox deleteTarget; + private javax.swing.JLabel descriptionLabel; + // End of variables declaration//GEN-END:variables - /** Creates new form DeleteEdgesWithNodesUI */ + /** + * Creates new form DeleteEdgesWithNodesUI + */ public DeleteEdgesWithNodesUI() { initComponents(); } + @Override public void setup(Manipulator m, DialogControls dialogControls) { - del=(DeleteEdgesWithNodes) m; - deleteSource.setSelected(NbPreferences.forModule(DeleteEdgesWithNodesUI.class).getBoolean(DELETE_SOURCE_SAVED_PREFERENCES, true)); - deleteTarget.setSelected(NbPreferences.forModule(DeleteEdgesWithNodesUI.class).getBoolean(DELETE_TARGET_SAVED_PREFERENCES, true)); + del = (DeleteEdgesWithNodes) m; + deleteSource.setSelected( + NbPreferences.forModule(DeleteEdgesWithNodesUI.class).getBoolean(DELETE_SOURCE_SAVED_PREFERENCES, true)); + deleteTarget.setSelected( + NbPreferences.forModule(DeleteEdgesWithNodesUI.class).getBoolean(DELETE_TARGET_SAVED_PREFERENCES, true)); } + @Override public void unSetup() { del.setDeleteSource(deleteSource.isSelected()); del.setDeleteTarget(deleteTarget.isSelected()); - NbPreferences.forModule(DeleteEdgesWithNodesUI.class).putBoolean(DELETE_SOURCE_SAVED_PREFERENCES, deleteSource.isSelected()); - NbPreferences.forModule(DeleteEdgesWithNodesUI.class).putBoolean(DELETE_TARGET_SAVED_PREFERENCES, deleteTarget.isSelected()); + NbPreferences.forModule(DeleteEdgesWithNodesUI.class) + .putBoolean(DELETE_SOURCE_SAVED_PREFERENCES, deleteSource.isSelected()); + NbPreferences.forModule(DeleteEdgesWithNodesUI.class) + .putBoolean(DELETE_TARGET_SAVED_PREFERENCES, deleteTarget.isSelected()); } + @Override public String getDisplayName() { return del.getName(); } + @Override public JPanel getSettingsPanel() { return this; } + @Override public boolean isModal() { return true; } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -101,45 +120,42 @@ private void initComponents() { descriptionLabel = new javax.swing.JLabel(); deleteSource.setSelected(true); - deleteSource.setText(org.openide.util.NbBundle.getMessage(DeleteEdgesWithNodesUI.class, "DeleteEdgesWithNodesUI.deleteSource.text")); // NOI18N + deleteSource.setText(org.openide.util.NbBundle + .getMessage(DeleteEdgesWithNodesUI.class, "DeleteEdgesWithNodesUI.deleteSource.text")); // NOI18N deleteTarget.setSelected(true); - deleteTarget.setText(org.openide.util.NbBundle.getMessage(DeleteEdgesWithNodesUI.class, "DeleteEdgesWithNodesUI.deleteTarget.text")); // NOI18N + deleteTarget.setText(org.openide.util.NbBundle + .getMessage(DeleteEdgesWithNodesUI.class, "DeleteEdgesWithNodesUI.deleteTarget.text")); // NOI18N - descriptionLabel.setText(org.openide.util.NbBundle.getMessage(DeleteEdgesWithNodesUI.class, "DeleteEdgesWithNodesUI.description")); // NOI18N + descriptionLabel.setText(org.openide.util.NbBundle + .getMessage(DeleteEdgesWithNodesUI.class, "DeleteEdgesWithNodesUI.description")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 254, Short.MAX_VALUE) - .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() - .addComponent(deleteSource) - .addGap(18, 18, 18) - .addComponent(deleteTarget))) - .addContainerGap()) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 254, Short.MAX_VALUE) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() + .addComponent(deleteSource) + .addGap(18, 18, 18) + .addComponent(deleteTarget))) + .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap() - .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(deleteSource) - .addComponent(deleteTarget)) - .addContainerGap()) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(deleteSource) + .addComponent(deleteTarget)) + .addContainerGap()) ); }// //GEN-END:initComponents - - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JCheckBox deleteSource; - private javax.swing.JCheckBox deleteTarget; - private javax.swing.JLabel descriptionLabel; - // End of variables declaration//GEN-END:variables - } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/AddEdgeToGraph.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/AddEdgeToGraph.java index 6c2c248ef7..e60a5f9872 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/AddEdgeToGraph.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/AddEdgeToGraph.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.general; import javax.swing.Icon; @@ -57,53 +58,65 @@ Development and Distribution License("CDDL") (collectively, the /** * GeneralActionsManipulator that adds a new edge to the graph, asking for source and target nodes and type of edge in UI. * - * @author Eduardo Ramos + * @author Eduardo Ramos */ @ServiceProvider(service = GeneralActionsManipulator.class) public class AddEdgeToGraph implements GeneralActionsManipulator { private Node source = null, target = null; private boolean directed; + private Object edgeTypeLabel = null; private GraphModel graphModel = null; + @Override public void execute() { if (source != null && target != null) { - Lookup.getDefault().lookup(GraphElementsController.class).createEdge(source, target, directed); + Lookup.getDefault().lookup(GraphElementsController.class) + .createEdge(source, target, directed, edgeTypeLabel); } } + @Override public String getName() { return NbBundle.getMessage(AddNodeToGraph.class, "AddEdgeToGraph.name"); } + @Override public String getDescription() { return ""; } + @Override public boolean canExecute() { return Lookup.getDefault().lookup(GraphElementsController.class).getNodesCount() > 0;//At least 1 nodes } + @Override public ManipulatorUI getUI() { - GraphModel currentGraphModel = Lookup.getDefault().lookup(GraphController.class).getModel(); - if (graphModel != currentGraphModel) {//If graph model has changed since last execution, change default mode for edges to create in UI, else keep this parameter across calls - directed = currentGraphModel.isDirected() || currentGraphModel.isMixed();//Get graph directed state. Set to true if graph is directed or mixed + GraphModel currentGraphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); + if (graphModel != null && graphModel != + currentGraphModel) {//If graph model has changed since last execution, change default mode for edges to create in UI, else keep this parameter across calls + directed = currentGraphModel.isDirected() || + currentGraphModel.isMixed();//Get graph directed state. Set to true if graph is directed or mixed graphModel = currentGraphModel; source = null; } return new AddEdgeToGraphUI(); } + @Override public int getType() { return 0; } + @Override public int getPosition() { return 200; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/plus-white.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/plus-white.svg", false); } public boolean isDirected() { @@ -129,4 +142,12 @@ public Node getTarget() { public void setTarget(Node target) { this.target = target; } + + public Object getEdgeTypeLabel() { + return edgeTypeLabel; + } + + public void setEdgeTypeLabel(Object edgeTypeLabel) { + this.edgeTypeLabel = edgeTypeLabel; + } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/AddNodeToGraph.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/AddNodeToGraph.java index bd4b09334e..eb78826d0a 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/AddNodeToGraph.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/AddNodeToGraph.java @@ -39,12 +39,13 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.general; import javax.swing.Icon; import javax.swing.JOptionPane; -import org.gephi.datalab.api.datatables.DataTablesController; import org.gephi.datalab.api.GraphElementsController; +import org.gephi.datalab.api.datatables.DataTablesController; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.general.GeneralActionsManipulator; import org.gephi.graph.api.Node; @@ -56,44 +57,55 @@ Development and Distribution License("CDDL") (collectively, the /** * GeneralActionsManipulator that adds a new node to the graph, asking for its label. * Uses the default id for the node. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=GeneralActionsManipulator.class) -public class AddNodeToGraph implements GeneralActionsManipulator{ +@ServiceProvider(service = GeneralActionsManipulator.class) +public class AddNodeToGraph implements GeneralActionsManipulator { + @Override public void execute() { - String label = JOptionPane.showInputDialog(null, NbBundle.getMessage(AddNodeToGraph.class, "AddNodeToGraph.dialog.text"), NbBundle.getMessage(AddNodeToGraph.class, "AddNodeToGraph.name"), JOptionPane.QUESTION_MESSAGE); + String label = JOptionPane + .showInputDialog(null, NbBundle.getMessage(AddNodeToGraph.class, "AddNodeToGraph.dialog.text"), + NbBundle.getMessage(AddNodeToGraph.class, "AddNodeToGraph.name"), JOptionPane.QUESTION_MESSAGE); if (label != null) { - Node node=Lookup.getDefault().lookup(GraphElementsController.class).createNode(label); - Lookup.getDefault().lookup(DataTablesController.class).setNodeTableSelection(new Node[]{node}); + Node node = Lookup.getDefault().lookup(GraphElementsController.class).createNode(label); + Lookup.getDefault().lookup(DataTablesController.class).setNodeTableSelection(new Node[] {node}); } } + @Override public String getName() { return NbBundle.getMessage(AddNodeToGraph.class, "AddNodeToGraph.name"); } + @Override public String getDescription() { return ""; } + @Override public boolean canExecute() { return true; } + @Override public ManipulatorUI getUI() { return null; } + @Override public int getType() { return 0; } + @Override public int getPosition() { return 0; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/plus-circle.png",true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/plus-circle.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ClearEdges.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ClearEdges.java index 5cc23dafcf..f9200cd828 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ClearEdges.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ClearEdges.java @@ -39,15 +39,19 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.general; +import java.util.ArrayList; +import java.util.List; import javax.swing.Icon; import org.gephi.datalab.api.GraphElementsController; import org.gephi.datalab.plugin.manipulators.general.ui.ClearEdgesUI; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.general.PluginGeneralActionsManipulator; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.MixedGraph; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; @@ -56,7 +60,8 @@ Development and Distribution License("CDDL") (collectively, the /** * PluginGeneralActionsManipulator that clears directed and/or undirected edges of the graph. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ @ServiceProvider(service = PluginGeneralActionsManipulator.class) public class ClearEdges implements PluginGeneralActionsManipulator { @@ -67,46 +72,62 @@ public class ClearEdges implements PluginGeneralActionsManipulator { public ClearEdges() { deleteDirected = NbPreferences.forModule(ClearEdges.class).getBoolean(DELETE_DIRECTED_SAVED_PREFERENCES, true); - deleteUndirected = NbPreferences.forModule(ClearEdges.class).getBoolean(DELETE_UNDIRECTED_SAVED_PREFERENCES, true); + deleteUndirected = + NbPreferences.forModule(ClearEdges.class).getBoolean(DELETE_UNDIRECTED_SAVED_PREFERENCES, true); } + @Override public void execute() { GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); - MixedGraph graph = Lookup.getDefault().lookup(GraphController.class).getModel().getMixedGraph(); - if (deleteDirected) { - gec.deleteEdges(graph.getDirectedEdges().toArray()); - } - if (deleteUndirected) { - gec.deleteEdges(graph.getUndirectedEdges().toArray()); + Graph graph = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getGraph(); + + List edges = new ArrayList<>(); + for (Edge edge : graph.getEdges().toArray()) { + if (edge.isDirected()) { + if (deleteDirected) { + edges.add(edge); + } + } else if (deleteUndirected) { + edges.add(edge); + } } + + gec.deleteEdges(edges.toArray(new Edge[0])); } + @Override public String getName() { return NbBundle.getMessage(ClearEdges.class, "ClearEdges.name"); } + @Override public String getDescription() { return ""; } + @Override public boolean canExecute() { return Lookup.getDefault().lookup(GraphElementsController.class).getEdgesCount() > 0; } + @Override public ManipulatorUI getUI() { return new ClearEdgesUI(); } + @Override public int getType() { return 0; } + @Override public int getPosition() { return 300; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/eraser--minus.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/eraser--minus.svg", false); } public boolean isDeleteDirected() { diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ClearGraph.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ClearGraph.java index fbf7daddc8..4e98bd9169 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ClearGraph.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ClearGraph.java @@ -1,44 +1,45 @@ /* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. + Copyright 2008-2010 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.general; import javax.swing.Icon; @@ -54,42 +55,53 @@ Development and Distribution License("CDDL") (collectively, the /** * PluginGeneralActionsManipulator that clears the entire graph, asking for confirmation. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=PluginGeneralActionsManipulator.class) +@ServiceProvider(service = PluginGeneralActionsManipulator.class) public class ClearGraph implements PluginGeneralActionsManipulator { + @Override public void execute() { - if (JOptionPane.showConfirmDialog(null, NbBundle.getMessage(ClearGraph.class, "ClearGraph.dialog.text"), NbBundle.getMessage(ClearGraph.class, "ClearGraph.name"), JOptionPane.YES_NO_OPTION, JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION) { - Lookup.getDefault().lookup(GraphController.class).getModel().getGraph().clear(); + if (JOptionPane.showConfirmDialog(null, NbBundle.getMessage(ClearGraph.class, "ClearGraph.dialog.text"), + NbBundle.getMessage(ClearGraph.class, "ClearGraph.name"), JOptionPane.YES_NO_OPTION, + JOptionPane.WARNING_MESSAGE) == JOptionPane.YES_OPTION) { + Lookup.getDefault().lookup(GraphController.class).getGraphModel().getGraph().clear(); } } + @Override public String getName() { return NbBundle.getMessage(ClearGraph.class, "ClearGraph.name"); } + @Override public String getDescription() { return ""; } + @Override public boolean canExecute() { - return Lookup.getDefault().lookup(GraphElementsController.class).getNodesCount()>0; + return Lookup.getDefault().lookup(GraphElementsController.class).getNodesCount() > 0; } + @Override public ManipulatorUI getUI() { return null; } + @Override public int getType() { return 0; } + @Override public int getPosition() { return 200; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/eraser--minus.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/eraser--minus.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ExportTable.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ExportTable.java index 467810faef..3a02cfc673 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ExportTable.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ExportTable.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.general; import javax.swing.Icon; @@ -51,42 +52,51 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * GeneralActionsManipulator that exports a table to CSV. - * @author Eduardo Ramos + * GeneralActionsManipulator that exports a table to a spreadsheet file. + * + * @author Eduardo Ramos */ -@ServiceProvider(service=GeneralActionsManipulator.class) +@ServiceProvider(service = GeneralActionsManipulator.class) public class ExportTable implements GeneralActionsManipulator { + @Override public void execute() { - DataTablesController dtc=Lookup.getDefault().lookup(DataTablesController.class); - dtc.exportCurrentTable(DataTablesController.ExportMode.CSV); + DataTablesController dtc = Lookup.getDefault().lookup(DataTablesController.class); + dtc.exportCurrentTable(); } + @Override public String getName() { return NbBundle.getMessage(ExportTable.class, "ExportTable.name"); } + @Override public String getDescription() { return ""; } + @Override public boolean canExecute() { return true; } + @Override public ManipulatorUI getUI() { return null; } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 200; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/table-excel.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/table-excel.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ImportCSV.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ImportCSV.java index d89e861800..c4692a4cf4 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ImportCSV.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ImportCSV.java @@ -39,53 +39,81 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.general; +import java.awt.event.ActionEvent; +import java.util.ArrayList; +import java.util.List; import javax.swing.Icon; -import org.gephi.datalab.plugin.manipulators.general.ui.ImportCSVUIWizardAction; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.general.GeneralActionsManipulator; +import org.gephi.io.importer.spi.FileImporterBuilder; +import org.openide.awt.Actions; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * GeneralActionsManipulator shows a wizard UI for importing a CSV file to nodes/edges table. - * @author Eduardo Ramos + * GeneralActionsManipulator that shows a wizard UI for importing a CSV/Excel file to nodes/edges table. + * + * @author Eduardo Ramos */ -@ServiceProvider(service=GeneralActionsManipulator.class) -public class ImportCSV implements GeneralActionsManipulator{ +@ServiceProvider(service = GeneralActionsManipulator.class) +public class ImportCSV implements GeneralActionsManipulator { + + private final FileImporterBuilder[] spreadsheetImporterBuilders; + + public ImportCSV() { + List list = new ArrayList<>(); + for (FileImporterBuilder builder : Lookup.getDefault().lookupAll(FileImporterBuilder.class)) { + if (builder.getName().startsWith("spreadsheet")) { + list.add(builder); + } + } + + spreadsheetImporterBuilders = list.toArray(new FileImporterBuilder[0]); + } + @Override public void execute() { - Lookup.getDefault().lookup(ImportCSVUIWizardAction.class).performAction(); + Actions.forID("File", "org.gephi.desktop.project.actions.OpenFile").actionPerformed( + new ActionEvent(spreadsheetImporterBuilders, 0, null)); } + @Override public String getName() { return NbBundle.getMessage(ImportCSV.class, "ImportCSV.name"); } + @Override public String getDescription() { return ""; } + @Override public boolean canExecute() { return true; } + @Override public ManipulatorUI getUI() { return null; } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 100; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/table-excel.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/table-excel.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ManageColumnEstimators.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ManageColumnEstimators.java new file mode 100644 index 0000000000..067c438940 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ManageColumnEstimators.java @@ -0,0 +1,144 @@ +/* + Copyright 2008-2015 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.datalab.plugin.manipulators.general; + +import java.util.ArrayList; +import java.util.List; +import javax.swing.Icon; +import org.gephi.datalab.api.datatables.DataTablesController; +import org.gephi.datalab.plugin.manipulators.general.ui.ManageColumnEstimatorsUI; +import org.gephi.datalab.spi.ManipulatorUI; +import org.gephi.datalab.spi.general.PluginGeneralActionsManipulator; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Estimator; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Table; +import org.gephi.graph.api.types.TimeMap; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +/** + * PluginGeneralActionsManipulator for managing column estimators. + * + * @author Eduardo Ramos + */ +@ServiceProvider(service = PluginGeneralActionsManipulator.class) +public class ManageColumnEstimators implements PluginGeneralActionsManipulator { + + private Column[] columns; + private Estimator[] estimators; + + @Override + public void execute() { + for (int i = 0; i < columns.length; i++) { + Column column = columns[i]; + Estimator estimator = estimators[i]; + + column.setEstimator(estimator); + } + } + + @Override + public String getName() { + return NbBundle.getMessage(ManageColumnEstimators.class, "ManageColumnEstimators.name"); + } + + @Override + public String getDescription() { + return NbBundle.getMessage(ManageColumnEstimators.class, "ManageColumnEstimators.description"); + } + + public List getColumns() { + GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); + + Table table; + if (Lookup.getDefault().lookup(DataTablesController.class).isNodeTableMode()) { + table = graphModel.getNodeTable(); + } else { + table = graphModel.getEdgeTable(); + } + + List availableColumns = new ArrayList<>(); + for (Column column : table) { + if (TimeMap.class.isAssignableFrom(column.getTypeClass())) { + availableColumns.add(column); + } + } + return availableColumns; + } + + @Override + public boolean canExecute() { + return !getColumns().isEmpty(); + } + + @Override + public ManipulatorUI getUI() { + this.columns = null; + this.estimators = null; + return new ManageColumnEstimatorsUI(); + } + + @Override + public int getType() { + return 200; + } + + @Override + public int getPosition() { + return 0; + } + + @Override + public Icon getIcon() { + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/gear.svg", false); + } + + public void setup(Column[] columns, Estimator[] estimators) { + this.columns = columns; + this.estimators = estimators; + } +} diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/MergeNodeDuplicates.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/MergeNodeDuplicates.java index 71c011e542..4428d832ec 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/MergeNodeDuplicates.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/MergeNodeDuplicates.java @@ -39,18 +39,22 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.general; +import java.util.ArrayList; import java.util.List; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeController; import org.gephi.datalab.api.GraphElementsController; import org.gephi.datalab.plugin.manipulators.general.ui.MergeNodeDuplicatesUI; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.general.PluginGeneralActionsManipulator; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphController; import org.gephi.graph.api.Node; +import org.gephi.graph.api.Table; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; @@ -59,7 +63,8 @@ Development and Distribution License("CDDL") (collectively, the /** * PluginGeneralActionsManipulator that automatically detects and merges node duplicates based on a column - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ @ServiceProvider(service = PluginGeneralActionsManipulator.class) public class MergeNodeDuplicates implements PluginGeneralActionsManipulator { @@ -72,55 +77,76 @@ public class MergeNodeDuplicates implements PluginGeneralActionsManipulator { private List> duplicateGroups; private boolean deleteMergedNodes; private boolean caseSensitive; - private AttributeColumn[] columns; + private Column[] columns; private AttributeRowsMergeStrategy[] mergeStrategies; + @Override public void execute() { + Graph graph = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getGraph(); GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); for (List nodes : duplicateGroups) { - gec.mergeNodes(nodes.toArray(new Node[0]), nodes.get(0), mergeStrategies, deleteMergedNodes); + gec.mergeNodes(graph, nodes.toArray(new Node[0]), nodes.get(0), columns, mergeStrategies, + deleteMergedNodes); } - NbPreferences.forModule(MergeNodeDuplicates.class).putBoolean(DELETE_MERGED_NODES_SAVED_PREFERENCES, deleteMergedNodes); + NbPreferences.forModule(MergeNodeDuplicates.class) + .putBoolean(DELETE_MERGED_NODES_SAVED_PREFERENCES, deleteMergedNodes); NbPreferences.forModule(MergeNodeDuplicates.class).putBoolean(CASE_SENSITIVE_SAVED_PREFERENCES, caseSensitive); } + @Override public String getName() { return NbBundle.getMessage(MergeNodeDuplicates.class, "MergeNodeDuplicates.name"); } + @Override public String getDescription() { return "MergeNodeDuplicates.description"; } + @Override public boolean canExecute() { return Lookup.getDefault().lookup(GraphElementsController.class).getNodesCount() > 0; } + @Override public ManipulatorUI getUI() { - columns = Lookup.getDefault().lookup(AttributeController.class).getModel().getNodeTable().getColumns(); + Table nodeTable = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getNodeTable(); + List columnsList = new ArrayList<>(); + for (Column column : nodeTable) { + if (!column.isReadOnly()) { + columnsList.add(column); + } + } + + columns = columnsList.toArray(new Column[0]); mergeStrategies = new AttributeRowsMergeStrategy[columns.length]; - deleteMergedNodes = NbPreferences.forModule(MergeNodeDuplicates.class).getBoolean(DELETE_MERGED_NODES_SAVED_PREFERENCES, true); - caseSensitive = NbPreferences.forModule(MergeNodeDuplicates.class).getBoolean(CASE_SENSITIVE_SAVED_PREFERENCES, true); + deleteMergedNodes = + NbPreferences.forModule(MergeNodeDuplicates.class).getBoolean(DELETE_MERGED_NODES_SAVED_PREFERENCES, true); + caseSensitive = + NbPreferences.forModule(MergeNodeDuplicates.class).getBoolean(CASE_SENSITIVE_SAVED_PREFERENCES, true); return new MergeNodeDuplicatesUI(); } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 0; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/merge.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/merge.svg", false); } - public AttributeColumn[] getColumns() { + public Column[] getColumns() { return columns; } - public void setColumns(AttributeColumn[] columns) { + public void setColumns(Column[] columns) { this.columns = columns; } @@ -128,6 +154,10 @@ public boolean isDeleteMergedNodes() { return deleteMergedNodes; } + public void setDeleteMergedNodes(boolean deleteMergedNodes) { + this.deleteMergedNodes = deleteMergedNodes; + } + public boolean isCaseSensitive() { return caseSensitive; } @@ -136,10 +166,6 @@ public void setCaseSensitive(boolean caseSensitive) { this.caseSensitive = caseSensitive; } - public void setDeleteMergedNodes(boolean deleteMergedNodes) { - this.deleteMergedNodes = deleteMergedNodes; - } - public List> getDuplicateGroups() { return duplicateGroups; } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/SearchReplace.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/SearchReplace.java index c5c1a2f370..c316e4c069 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/SearchReplace.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/SearchReplace.java @@ -39,16 +39,17 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.general; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeController; -import org.gephi.data.attributes.api.AttributeTable; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.api.datatables.DataTablesController; import org.gephi.datalab.plugin.manipulators.general.ui.SearchReplaceUI; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.general.GeneralActionsManipulator; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.Table; import org.openide.DialogDescriptor; import org.openide.DialogDisplayer; import org.openide.util.ImageUtilities; @@ -58,11 +59,13 @@ Development and Distribution License("CDDL") (collectively, the /** * GeneralActionsManipulator that shows a UI for doing search/replace tasks with normal and regex features. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ @ServiceProvider(service = GeneralActionsManipulator.class) public class SearchReplace implements GeneralActionsManipulator { + @Override public void execute() { SearchReplaceUI ui = Lookup.getDefault().lookup(SearchReplaceUI.class); if (ui.isActive()) { @@ -75,50 +78,60 @@ public void execute() { } DialogDescriptor dd = new DialogDescriptor(ui, getName()); dd.setModal(true); - dd.setOptions(new Object[]{NbBundle.getMessage(SearchReplace.class, "SearchReplace.window.close")}); + dd.setOptions(new Object[] {NbBundle.getMessage(SearchReplace.class, "SearchReplace.window.close")}); ui.setActive(true); DialogDisplayer.getDefault().notify(dd); ui.setActive(false); } + @Override public String getName() { return NbBundle.getMessage(SearchReplace.class, "SearchReplace.name"); } + @Override public String getDescription() { return ""; } + @Override public boolean canExecute() { - AttributeTable currentTable = getCurrentTable(); - return currentTable != null && Lookup.getDefault().lookup(AttributeColumnsController.class).getTableRowsCount(currentTable) > 0;//Make sure that there is at least 1 row + Table currentTable = getCurrentTable(); + return currentTable != null && + Lookup.getDefault().lookup(AttributeColumnsController.class).getTableRowsCount(currentTable) > + 0;//Make sure that there is at least 1 row } + @Override public ManipulatorUI getUI() { return null; } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 0; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/binocular--pencil.png", true); + return ImageUtilities + .loadImageIcon("DataLaboratoryPlugin/binocular--pencil.svg", false); } - private AttributeTable getCurrentTable() { + private Table getCurrentTable() { DataTablesController dtc = Lookup.getDefault().lookup(DataTablesController.class); if (dtc.getDataTablesEventListener() == null) { return null; } if (dtc.isNodeTableMode()) { - return Lookup.getDefault().lookup(AttributeController.class).getModel().getNodeTable(); + return Lookup.getDefault().lookup(GraphController.class).getGraphModel().getNodeTable(); } else { - return Lookup.getDefault().lookup(AttributeController.class).getModel().getEdgeTable(); + return Lookup.getDefault().lookup(GraphController.class).getGraphModel().getEdgeTable(); } } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/AddEdgeToGraphUI.form b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/AddEdgeToGraphUI.form index 6ca401e18e..253412b5b7 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/AddEdgeToGraphUI.form +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/AddEdgeToGraphUI.form @@ -40,6 +40,11 @@ + + + + + @@ -50,7 +55,7 @@ - + @@ -65,7 +70,12 @@ - + + + + + + @@ -80,9 +90,6 @@ - - - @@ -93,9 +100,6 @@ - - - @@ -110,9 +114,6 @@ - - - @@ -135,5 +136,20 @@ + + + + + + + + + + + + + + + diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/AddEdgeToGraphUI.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/AddEdgeToGraphUI.java index 41a52fe02a..d1637d8bd4 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/AddEdgeToGraphUI.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/AddEdgeToGraphUI.java @@ -39,31 +39,45 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.general.ui; -import java.util.ArrayList; +import javax.swing.JComboBox; import javax.swing.JPanel; import org.gephi.datalab.plugin.manipulators.general.AddEdgeToGraph; import org.gephi.datalab.spi.DialogControls; import org.gephi.datalab.spi.Manipulator; import org.gephi.datalab.spi.ManipulatorUI; -import org.gephi.graph.api.Edge; import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphController; import org.gephi.graph.api.Node; +import org.gephi.project.api.ProjectController; +import org.gephi.project.api.Workspace; import org.openide.util.Lookup; /** * UI for AddEdgeToGraph GeneralActionsManipulator * - * @author Eduardo Ramos + * @author Eduardo Ramos */ public class AddEdgeToGraphUI extends javax.swing.JPanel implements ManipulatorUI { private AddEdgeToGraph manipulator; - private Node[] nodes, targetNodes; + private Node[] nodes; private Graph graph; - private DialogControls dialogControls; + private Workspace workspace; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel descriptionLabel; + private javax.swing.JRadioButton directedRadioButton; + private javax.swing.ButtonGroup directedUndirectedRadioButtonGroup; + private javax.swing.JComboBox edgeTypeComboBox; + private javax.swing.JLabel edgeTypeLabel; + private javax.swing.JLabel sourceNodeLabel; + private javax.swing.JComboBox sourceNodesComboBox; + private javax.swing.JLabel targetNodeLabel; + private javax.swing.JComboBox targetNodesComboBox; + private javax.swing.JRadioButton undirectedRadioButton; + // End of variables declaration//GEN-END:variables /** * Creates new form AddEdgeToGraphUI @@ -72,85 +86,105 @@ public AddEdgeToGraphUI() { initComponents(); } + @Override public void setup(Manipulator m, DialogControls dialogControls) { this.manipulator = (AddEdgeToGraph) m; - this.dialogControls = dialogControls; if (manipulator.isDirected()) { directedRadioButton.setSelected(true); } else { undirectedRadioButton.setSelected(true); } - - graph = Lookup.getDefault().lookup(GraphController.class).getModel().getMixedGraph(); + + graph = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getGraph(); nodes = graph.getNodes().toArray(); - + + workspace = Lookup.getDefault().lookup(ProjectController.class).getCurrentWorkspace(); + for (Node n : nodes) { - sourceNodesComboBox.addItem(n.getId() + " - " + n.getNodeData().getLabel()); + sourceNodesComboBox.addItem(n.getId() + " - " + n.getLabel()); + targetNodesComboBox.addItem(n.getId() + " - " + n.getLabel()); + } + + SelectedOptions selectedOptions = workspace.getLookup().lookup(SelectedOptions.class); + if (selectedOptions != null) { + setNodeComboBoxSelection(sourceNodesComboBox, selectedOptions.source); + setNodeComboBoxSelection(targetNodesComboBox, selectedOptions.target); + edgeTypeComboBox.setSelectedItem(selectedOptions.edgeType); + } else { + workspace.add(new SelectedOptions()); } - - Node selectedSource = manipulator.getSource(); - if(selectedSource != null){ + + refreshAvailableEdgeTypes(); + + dialogControls.setOkButtonEnabled(nodes.length > 0); + } + + private void setNodeComboBoxSelection(JComboBox comboBox, Node node) { + if (node != null) { for (int i = 0; i < nodes.length; i++) { - if(nodes[i] == selectedSource){ - sourceNodesComboBox.setSelectedIndex(i); + if (nodes[i] == node) {//Make sure the node is still in the graph + comboBox.setSelectedIndex(i); } } } - - refreshAvailableTargetNodes(); } + @Override public void unSetup() { - manipulator.setDirected(directedRadioButton.isSelected()); + Object edgeType = getSelectedEdgeType(); + boolean directed = directedRadioButton.isSelected(); + Node source = null; + Node target = null; + + if (sourceNodesComboBox.getSelectedIndex() != -1) { + source = nodes[sourceNodesComboBox.getSelectedIndex()]; + } + if (targetNodesComboBox.getSelectedIndex() != -1) { - manipulator.setSource(nodes[sourceNodesComboBox.getSelectedIndex()]); - manipulator.setTarget(targetNodes[targetNodesComboBox.getSelectedIndex()]); + target = nodes[targetNodesComboBox.getSelectedIndex()]; } + + manipulator.setDirected(directed); + manipulator.setEdgeTypeLabel(edgeType); + manipulator.setSource(source); + manipulator.setTarget(target); + + SelectedOptions selectedOptions = workspace.getLookup().lookup(SelectedOptions.class); + + selectedOptions.directed = directed; + selectedOptions.edgeType = edgeType; + selectedOptions.source = source; + selectedOptions.target = target; } + @Override public String getDisplayName() { return manipulator.getName(); } + @Override public JPanel getSettingsPanel() { return this; } + @Override public boolean isModal() { return true; } - private boolean canCreateEdge(Graph graph, Node source, Node target, boolean createUndirected) { - Edge existingEdge = graph.getEdge(source, target); - - if (existingEdge == null) { - return true; + private String getSelectedEdgeType() { + String edgeType = + edgeTypeComboBox.getSelectedItem() != null ? edgeTypeComboBox.getSelectedItem().toString() : null; + if (edgeType != null && edgeType.trim().isEmpty()) { + edgeType = null; } - if (existingEdge.getSource() == source) {//Exact edge found - return false; - } else {//Inverse edge found - return !createUndirected && existingEdge.isDirected(); - } + return edgeType; } - private void refreshAvailableTargetNodes() { - if (nodes != null) { - ArrayList availableTargetNodes = new ArrayList(); - Node sourceNode = nodes[sourceNodesComboBox.getSelectedIndex()]; - boolean createUndirected = undirectedRadioButton.isSelected(); - for (Node n : nodes) { - if (canCreateEdge(graph, sourceNode, n, createUndirected)) { - availableTargetNodes.add(n); - } - } - - targetNodes = availableTargetNodes.toArray(new Node[0]); - dialogControls.setOkButtonEnabled(!availableTargetNodes.isEmpty()); - targetNodesComboBox.removeAllItems(); - for (Node n : targetNodes) { - targetNodesComboBox.addItem(n.getId() + " - " + n.getNodeData().getLabel()); - } + private void refreshAvailableEdgeTypes() { + for (Object edgeType : graph.getModel().getEdgeTypeLabels()) { + edgeTypeComboBox.addItem(edgeType); } } @@ -169,97 +203,100 @@ private void initComponents() { sourceNodeLabel = new javax.swing.JLabel(); targetNodeLabel = new javax.swing.JLabel(); targetNodesComboBox = new javax.swing.JComboBox(); + edgeTypeLabel = new javax.swing.JLabel(); + edgeTypeComboBox = new javax.swing.JComboBox(); directedUndirectedRadioButtonGroup.add(directedRadioButton); - directedRadioButton.setText(org.openide.util.NbBundle.getMessage(AddEdgeToGraphUI.class, "AddEdgeToGraphUI.directedRadioButton.text")); // NOI18N - directedRadioButton.addItemListener(new java.awt.event.ItemListener() { - public void itemStateChanged(java.awt.event.ItemEvent evt) { - directedRadioButtonItemStateChanged(evt); - } - }); + directedRadioButton.setText(org.openide.util.NbBundle + .getMessage(AddEdgeToGraphUI.class, "AddEdgeToGraphUI.directedRadioButton.text")); // NOI18N directedUndirectedRadioButtonGroup.add(undirectedRadioButton); - undirectedRadioButton.setText(org.openide.util.NbBundle.getMessage(AddEdgeToGraphUI.class, "AddEdgeToGraphUI.undirectedRadioButton.text")); // NOI18N - undirectedRadioButton.addItemListener(new java.awt.event.ItemListener() { - public void itemStateChanged(java.awt.event.ItemEvent evt) { - undirectedRadioButtonItemStateChanged(evt); - } - }); + undirectedRadioButton.setText(org.openide.util.NbBundle + .getMessage(AddEdgeToGraphUI.class, "AddEdgeToGraphUI.undirectedRadioButton.text")); // NOI18N - descriptionLabel.setText(org.openide.util.NbBundle.getMessage(AddEdgeToGraphUI.class, "AddEdgeToGraphUI.descriptionLabel.text")); // NOI18N + descriptionLabel.setText(org.openide.util.NbBundle + .getMessage(AddEdgeToGraphUI.class, "AddEdgeToGraphUI.descriptionLabel.text")); // NOI18N - sourceNodesComboBox.addItemListener(new java.awt.event.ItemListener() { - public void itemStateChanged(java.awt.event.ItemEvent evt) { - sourceNodesComboBoxItemStateChanged(evt); - } - }); + sourceNodeLabel.setText(org.openide.util.NbBundle + .getMessage(AddEdgeToGraphUI.class, "AddEdgeToGraphUI.sourceNodeLabel.text")); // NOI18N + + targetNodeLabel.setText(org.openide.util.NbBundle + .getMessage(AddEdgeToGraphUI.class, "AddEdgeToGraphUI.targetNodeLabel.text")); // NOI18N - sourceNodeLabel.setText(org.openide.util.NbBundle.getMessage(AddEdgeToGraphUI.class, "AddEdgeToGraphUI.sourceNodeLabel.text")); // NOI18N + edgeTypeLabel.setText(org.openide.util.NbBundle + .getMessage(AddEdgeToGraphUI.class, "AddEdgeToGraphUI.edgeTypeLabel.text")); // NOI18N - targetNodeLabel.setText(org.openide.util.NbBundle.getMessage(AddEdgeToGraphUI.class, "AddEdgeToGraphUI.targetNodeLabel.text")); // NOI18N + edgeTypeComboBox.setEditable(true); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(directedRadioButton) - .addComponent(sourceNodeLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(sourceNodesComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(undirectedRadioButton))) - .addGroup(layout.createSequentialGroup() - .addComponent(targetNodeLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(targetNodesComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) - .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(directedRadioButton) + .addComponent(sourceNodeLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 73, + javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(sourceNodesComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, + Short.MAX_VALUE) + .addComponent(undirectedRadioButton))) + .addGroup(layout.createSequentialGroup() + .addComponent(targetNodeLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 73, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(targetNodesComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, + Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addComponent(edgeTypeLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 73, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(edgeTypeComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) + .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap() - .addComponent(descriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(directedRadioButton) - .addComponent(undirectedRadioButton)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(sourceNodesComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(sourceNodeLabel)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(targetNodesComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(targetNodeLabel)) - .addContainerGap()) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addComponent(descriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 25, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(directedRadioButton) + .addComponent(undirectedRadioButton)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(sourceNodesComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(sourceNodeLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(targetNodesComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(targetNodeLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(edgeTypeLabel) + .addComponent(edgeTypeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - private void sourceNodesComboBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_sourceNodesComboBoxItemStateChanged - refreshAvailableTargetNodes(); - }//GEN-LAST:event_sourceNodesComboBoxItemStateChanged + private class SelectedOptions { - private void directedRadioButtonItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_directedRadioButtonItemStateChanged - refreshAvailableTargetNodes(); - }//GEN-LAST:event_directedRadioButtonItemStateChanged + private Node source; + private Node target; + private Object edgeType; + private boolean directed = false; - private void undirectedRadioButtonItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_undirectedRadioButtonItemStateChanged - refreshAvailableTargetNodes(); - }//GEN-LAST:event_undirectedRadioButtonItemStateChanged - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JLabel descriptionLabel; - private javax.swing.JRadioButton directedRadioButton; - private javax.swing.ButtonGroup directedUndirectedRadioButtonGroup; - private javax.swing.JLabel sourceNodeLabel; - private javax.swing.JComboBox sourceNodesComboBox; - private javax.swing.JLabel targetNodeLabel; - private javax.swing.JComboBox targetNodesComboBox; - private javax.swing.JRadioButton undirectedRadioButton; - // End of variables declaration//GEN-END:variables + public SelectedOptions() { + } + } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ClearEdgesUI.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ClearEdgesUI.java index fc6c3fb062..1c14f58d9d 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ClearEdgesUI.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ClearEdgesUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.general.ui; import javax.swing.JPanel; @@ -50,41 +51,58 @@ Development and Distribution License("CDDL") (collectively, the /** * UI for ClearEdges GeneralActionsManipulator - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class ClearEdgesUI extends javax.swing.JPanel implements ManipulatorUI { ClearEdges manipulator; - /** Creates new form ClearEdgesUI */ + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JCheckBox deleteDirectedCheckbox; + private javax.swing.JCheckBox deleteUndirectedChekbox; + private javax.swing.JLabel descriptionLabel; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form ClearEdgesUI + */ public ClearEdgesUI() { initComponents(); } + @Override public void setup(Manipulator m, DialogControls dialogControls) { - manipulator=(ClearEdges) m; + manipulator = (ClearEdges) m; deleteDirectedCheckbox.setSelected(manipulator.isDeleteDirected()); deleteUndirectedChekbox.setSelected(manipulator.isDeleteUndirected()); } + @Override public void unSetup() { manipulator.setDeleteDirected(deleteDirectedCheckbox.isSelected()); manipulator.setDeleteUndirected(deleteUndirectedChekbox.isSelected()); - NbPreferences.forModule(ClearEdges.class).putBoolean(ClearEdges.DELETE_DIRECTED_SAVED_PREFERENCES, deleteDirectedCheckbox.isSelected()); - NbPreferences.forModule(ClearEdges.class).putBoolean(ClearEdges.DELETE_UNDIRECTED_SAVED_PREFERENCES, deleteUndirectedChekbox.isSelected()); + NbPreferences.forModule(ClearEdges.class) + .putBoolean(ClearEdges.DELETE_DIRECTED_SAVED_PREFERENCES, deleteDirectedCheckbox.isSelected()); + NbPreferences.forModule(ClearEdges.class) + .putBoolean(ClearEdges.DELETE_UNDIRECTED_SAVED_PREFERENCES, deleteUndirectedChekbox.isSelected()); } + @Override public String getDisplayName() { return manipulator.getName(); } + @Override public JPanel getSettingsPanel() { return this; } + @Override public boolean isModal() { return true; } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -97,45 +115,41 @@ private void initComponents() { deleteUndirectedChekbox = new javax.swing.JCheckBox(); descriptionLabel = new javax.swing.JLabel(); - deleteDirectedCheckbox.setText(org.openide.util.NbBundle.getMessage(ClearEdgesUI.class, "ClearEdgesUI.deleteDirectedCheckbox.text")); // NOI18N + deleteDirectedCheckbox.setText(org.openide.util.NbBundle + .getMessage(ClearEdgesUI.class, "ClearEdgesUI.deleteDirectedCheckbox.text")); // NOI18N - deleteUndirectedChekbox.setText(org.openide.util.NbBundle.getMessage(ClearEdgesUI.class, "ClearEdgesUI.deleteUndirectedChekbox.text")); // NOI18N + deleteUndirectedChekbox.setText(org.openide.util.NbBundle + .getMessage(ClearEdgesUI.class, "ClearEdgesUI.deleteUndirectedChekbox.text")); // NOI18N descriptionLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - descriptionLabel.setText(org.openide.util.NbBundle.getMessage(ClearEdgesUI.class, "ClearEdgesUI.descriptionLabel.text")); // NOI18N + descriptionLabel.setText( + org.openide.util.NbBundle.getMessage(ClearEdgesUI.class, "ClearEdgesUI.descriptionLabel.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(deleteDirectedCheckbox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(deleteUndirectedChekbox)) - .addGroup(layout.createSequentialGroup() - .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 271, Short.MAX_VALUE) - .addContainerGap()))) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(deleteDirectedCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(deleteUndirectedChekbox)) + .addGroup(layout.createSequentialGroup() + .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 271, Short.MAX_VALUE) + .addContainerGap()))) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap() - .addComponent(descriptionLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 16, Short.MAX_VALUE) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(deleteUndirectedChekbox) - .addComponent(deleteDirectedCheckbox)) - .addContainerGap()) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addComponent(descriptionLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 16, Short.MAX_VALUE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(deleteUndirectedChekbox) + .addComponent(deleteDirectedCheckbox)) + .addContainerGap()) ); }// //GEN-END:initComponents - - - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JCheckBox deleteDirectedCheckbox; - private javax.swing.JCheckBox deleteUndirectedChekbox; - private javax.swing.JLabel descriptionLabel; - // End of variables declaration//GEN-END:variables } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ImportCSVUIVisualPanel1.form b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ImportCSVUIVisualPanel1.form deleted file mode 100644 index 1c2fc2a4eb..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ImportCSVUIVisualPanel1.form +++ /dev/null @@ -1,185 +0,0 @@ - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ImportCSVUIVisualPanel1.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ImportCSVUIVisualPanel1.java deleted file mode 100644 index b416d132c8..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ImportCSVUIVisualPanel1.java +++ /dev/null @@ -1,529 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian, Mathieu Jacomy, Julian Bilcke, Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.datalab.plugin.manipulators.general.ui; - -import com.csvreader.CsvReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.Set; -import javax.swing.JFileChooser; -import javax.swing.JOptionPane; -import javax.swing.SwingUtilities; -import javax.swing.event.TableModelListener; -import javax.swing.table.TableModel; -import org.gephi.ui.utils.DialogFileFilter; -import org.netbeans.validation.api.Problems; -import org.netbeans.validation.api.Validator; -import org.netbeans.validation.api.ui.ValidationGroup; -import org.netbeans.validation.api.ui.ValidationPanel; -import org.openide.util.Exceptions; -import org.openide.util.NbBundle; -import org.openide.util.NbPreferences; - -/** - * - * @author Eduardo Ramos - */ -public class ImportCSVUIVisualPanel1 extends javax.swing.JPanel { - - private static final String CHARSET_SAVED_PREFERENCES = "ImportCSVUIVisualPanel1_Charset"; - private static final String SEPARATOR_SAVED_PREFERENCES = "ImportCSVUIVisualPanel1_Separator"; - private static final String TABLE_SAVED_PREFERENCES = "ImportCSVUIVisualPanel1_Table"; - - private static final int MAX_ROWS_PREVIEW = 25; - private File selectedFile = null; - private ImportCSVUIWizardPanel1 wizard1; - private int columnCount = 0; - private boolean hasSourceNodeColumn = false; - private boolean hasTargetNodeColumn = false; - private boolean columnNamesRepeated = false; - private ValidationPanel validationPanel; - - /** Creates new form ImportCSVUIVisualPanel1 */ - public ImportCSVUIVisualPanel1(ImportCSVUIWizardPanel1 wizard1) { - initComponents(); - this.wizard1 = wizard1; - separatorComboBox.addItem(new SeparatorWrapper((','), getMessage("ImportCSVUIVisualPanel1.comma"))); - separatorComboBox.addItem(new SeparatorWrapper((';'), getMessage("ImportCSVUIVisualPanel1.semicolon"))); - separatorComboBox.addItem(new SeparatorWrapper(('\t'), getMessage("ImportCSVUIVisualPanel1.tab"))); - separatorComboBox.addItem(new SeparatorWrapper((' '), getMessage("ImportCSVUIVisualPanel1.space"))); - - separatorComboBox.setSelectedIndex(NbPreferences.forModule(ImportCSVUIVisualPanel1.class).getInt(SEPARATOR_SAVED_PREFERENCES, 0));//Use saved separator or comma if not saved yet - - tableComboBox.addItem(getMessage("ImportCSVUIVisualPanel1.nodes-table")); - tableComboBox.addItem(getMessage("ImportCSVUIVisualPanel1.edges-table")); - - tableComboBox.setSelectedIndex(NbPreferences.forModule(ImportCSVUIVisualPanel1.class).getInt(TABLE_SAVED_PREFERENCES, 0));//Use saved table or nodes table if not saved yet - - for (String charset : Charset.availableCharsets().keySet()) { - charsetComboBox.addItem(charset); - } - String savedCharset = NbPreferences.forModule(ImportCSVUIVisualPanel1.class).get(CHARSET_SAVED_PREFERENCES, null); - if (savedCharset != null) { - charsetComboBox.setSelectedItem(savedCharset); - }else{ - charsetComboBox.setSelectedItem(Charset.forName("UTF-8").name());//UTF-8 by default, not system default charset - } - } - - public void unSetup(){ - NbPreferences.forModule(ImportCSVUIVisualPanel1.class).put(CHARSET_SAVED_PREFERENCES, charsetComboBox.getSelectedItem().toString()); - NbPreferences.forModule(ImportCSVUIVisualPanel1.class).putInt(SEPARATOR_SAVED_PREFERENCES, separatorComboBox.getSelectedIndex()); - NbPreferences.forModule(ImportCSVUIVisualPanel1.class).putInt(TABLE_SAVED_PREFERENCES, tableComboBox.getSelectedIndex()); - } - - public ValidationPanel getValidationPanel() { - if (validationPanel != null) { - return validationPanel; - } - try { - SwingUtilities.invokeAndWait(new Runnable() { - - public void run() { - validationPanel = new ValidationPanel(); - validationPanel.setInnerComponent(ImportCSVUIVisualPanel1.this); - - ValidationGroup validationGroup = validationPanel.getValidationGroup(); - - validationGroup.add(pathTextField, new Validator() { - - public boolean validate(Problems prblms, String string, String t) { - if (!isValidFile()) { - prblms.add(getMessage("ImportCSVUIVisualPanel1.validation.invalid-file")); - return false; - } - if (!hasColumns()) { - prblms.add(getMessage("ImportCSVUIVisualPanel1.validation.no-columns")); - return false; - } - if (columnNamesRepeated) { - prblms.add(getMessage("ImportCSVUIVisualPanel1.validation.repeated-columns")); - return false; - } - if (!areValidColumnsForTable()) { - prblms.add(getMessage("ImportCSVUIVisualPanel1.validation.edges.no-source-target-columns")); - return false; - } - return true; - } - }); - } - }); - validationPanel.setName(getName()); - } catch (InterruptedException ex) { - Exceptions.printStackTrace(ex); - } catch (InvocationTargetException ex) { - Exceptions.printStackTrace(ex); - } - - return validationPanel; - } - - public void refreshPreviewTable() { - if (selectedFile != null && selectedFile.exists()) { - try { - CsvReader reader = new CsvReader(new FileInputStream(selectedFile), getSelectedSeparator(), getSelectedCharset()); - reader.setTrimWhitespace(false); - String[] headers; - try { - reader.readHeaders(); - headers = reader.getHeaders(); - } catch (Exception ex) { - headers = new String[0];//Some charsets can be problematic with unreal columns lenght. Don't show table when there are problems - } - columnCount = headers.length; - - //Check for repeated column names: - Set columnNamesSet = new HashSet(); - columnNamesRepeated = false; - hasSourceNodeColumn = false; - hasTargetNodeColumn = false; - for (String header : headers) { - if (header.equalsIgnoreCase("source")) { - hasSourceNodeColumn = true; - } - if (header.equalsIgnoreCase("target")) { - hasTargetNodeColumn = true; - } - if (columnNamesSet.contains(header)) { - columnNamesRepeated = true; - break; - } - columnNamesSet.add(header); - } - - ArrayList records = new ArrayList(); - if (columnCount > 0) { - String[] currentRecord; - while (reader.readRecord() && records.size() < MAX_ROWS_PREVIEW) { - currentRecord = new String[reader.getColumnCount()]; - for (int i = 0; i < currentRecord.length; i++) { - currentRecord[i] = reader.get(i); - } - records.add(currentRecord); - } - } - reader.close(); - final String[] columnNames = headers; - final String[][] values = records.toArray(new String[0][]); - previewTable.setModel(new TableModel() { - - public int getRowCount() { - return values.length; - } - - public int getColumnCount() { - return columnNames.length; - } - - public String getColumnName(int columnIndex) { - return columnNames[columnIndex]; - } - - public Class getColumnClass(int columnIndex) { - return String.class; - } - - public boolean isCellEditable(int rowIndex, int columnIndex) { - return false; - } - - public Object getValueAt(int rowIndex, int columnIndex) { - if (values[rowIndex].length > columnIndex) { - return values[rowIndex][columnIndex]; - } else { - return null; - } - } - - public void setValueAt(Object aValue, int rowIndex, int columnIndex) { - } - - public void addTableModelListener(TableModelListener l) { - } - - public void removeTableModelListener(TableModelListener l) { - } - }); - } catch (FileNotFoundException ex) { - Exceptions.printStackTrace(ex); - } catch (IOException ex) { - JOptionPane.showMessageDialog(this, getMessage("ImportCSVUIVisualPanel1.validation.error"), getMessage("ImportCSVUIVisualPanel1.validation.file-permissions-error"), JOptionPane.ERROR_MESSAGE); - } - } - wizard1.fireChangeEvent(); - pathTextField.setText(pathTextField.getText());//To fire validation panel messages. - } - - @Override - public String getName() { - return getMessage("ImportCSVUIVisualPanel1.name"); - } - - public Character getSelectedSeparator() { - Object item = separatorComboBox.getSelectedItem(); - if (item instanceof SeparatorWrapper) { - return ((SeparatorWrapper) item).separator; - } else { - return item.toString().charAt(0); - } - } - - public File getSelectedFile() { - return selectedFile; - } - - public ImportCSVUIWizardAction.Mode getMode() { - switch (tableComboBox.getSelectedIndex()) { - case 0: - return ImportCSVUIWizardAction.Mode.NODES_TABLE; - case 1: - return ImportCSVUIWizardAction.Mode.EDGES_TABLE; - default: - return ImportCSVUIWizardAction.Mode.NODES_TABLE;//Not going to happen. - } - } - - public Charset getSelectedCharset() { - return Charset.forName(charsetComboBox.getSelectedItem().toString()); - } - - public int getColumnCount() { - return columnCount; - } - - public boolean isColumnNamesRepeated() { - return columnNamesRepeated; - } - - public boolean isValidFile() { - return selectedFile != null && selectedFile.exists(); - } - - public boolean hasColumns() { - return columnCount > 0; - } - - public boolean areValidColumnsForTable() { - switch (getMode()) { - case NODES_TABLE: - return true; - case EDGES_TABLE: - return hasSourceNodeColumn && hasTargetNodeColumn; - default: - return false; - } - } - - public boolean isCSVValid() { - return isValidFile() && hasColumns() && !columnNamesRepeated && areValidColumnsForTable(); - } - - class SeparatorWrapper { - - private Character separator; - private String displayText; - - public SeparatorWrapper(Character separator) { - this.separator = separator; - } - - public SeparatorWrapper(Character separator, String displayText) { - this.separator = separator; - this.displayText = displayText; - } - - @Override - public String toString() { - if (displayText != null) { - return displayText; - } else { - return String.valueOf(separator); - } - } - } - - private String getMessage(String resName) { - return NbBundle.getMessage(ImportCSVUIVisualPanel1.class, resName); - } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // //GEN-BEGIN:initComponents - private void initComponents() { - - descriptionLabel = new javax.swing.JLabel(); - pathTextField = new javax.swing.JTextField(); - fileButton = new javax.swing.JButton(); - separatorLabel = new javax.swing.JLabel(); - separatorComboBox = new javax.swing.JComboBox(); - tableLabel = new javax.swing.JLabel(); - tableComboBox = new javax.swing.JComboBox(); - previewLabel = new javax.swing.JLabel(); - scroll = new javax.swing.JScrollPane(); - previewTable = new javax.swing.JTable(); - charsetLabel = new javax.swing.JLabel(); - charsetComboBox = new javax.swing.JComboBox(); - - descriptionLabel.setText(org.openide.util.NbBundle.getMessage(ImportCSVUIVisualPanel1.class, "ImportCSVUIVisualPanel1.descriptionLabel.text")); // NOI18N - - pathTextField.setEditable(false); - pathTextField.setText(org.openide.util.NbBundle.getMessage(ImportCSVUIVisualPanel1.class, "ImportCSVUIVisualPanel1.pathTextField.text")); // NOI18N - - fileButton.setText(org.openide.util.NbBundle.getMessage(ImportCSVUIVisualPanel1.class, "ImportCSVUIVisualPanel1.fileButton.text")); // NOI18N - fileButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - fileButtonActionPerformed(evt); - } - }); - - separatorLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - separatorLabel.setText(org.openide.util.NbBundle.getMessage(ImportCSVUIVisualPanel1.class, "ImportCSVUIVisualPanel1.separatorLabel.text")); // NOI18N - - separatorComboBox.addItemListener(new java.awt.event.ItemListener() { - public void itemStateChanged(java.awt.event.ItemEvent evt) { - separatorComboBoxItemStateChanged(evt); - } - }); - - tableLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - tableLabel.setText(org.openide.util.NbBundle.getMessage(ImportCSVUIVisualPanel1.class, "ImportCSVUIVisualPanel1.tableLabel.text")); // NOI18N - - tableComboBox.addItemListener(new java.awt.event.ItemListener() { - public void itemStateChanged(java.awt.event.ItemEvent evt) { - tableComboBoxItemStateChanged(evt); - } - }); - - previewLabel.setText(org.openide.util.NbBundle.getMessage(ImportCSVUIVisualPanel1.class, "ImportCSVUIVisualPanel1.previewLabel.text")); // NOI18N - - scroll.setViewportView(previewTable); - - charsetLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - charsetLabel.setText(org.openide.util.NbBundle.getMessage(ImportCSVUIVisualPanel1.class, "ImportCSVUIVisualPanel1.charsetLabel.text")); // NOI18N - - charsetComboBox.addItemListener(new java.awt.event.ItemListener() { - public void itemStateChanged(java.awt.event.ItemEvent evt) { - charsetComboBoxItemStateChanged(evt); - } - }); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(scroll, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 325, Short.MAX_VALUE) - .addComponent(descriptionLabel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 325, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addComponent(pathTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 274, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(fileButton)) - .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(separatorLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(separatorComboBox, 0, 90, Short.MAX_VALUE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(tableLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(tableComboBox, 0, 123, Short.MAX_VALUE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(charsetLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 96, Short.MAX_VALUE) - .addComponent(charsetComboBox, 0, 96, Short.MAX_VALUE))) - .addComponent(previewLabel, javax.swing.GroupLayout.Alignment.LEADING)) - .addContainerGap()) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(descriptionLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(pathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(fileButton)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addGroup(layout.createSequentialGroup() - .addComponent(separatorLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(separatorComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(tableLabel) - .addComponent(charsetLabel)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(tableComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(charsetComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))) - .addGap(18, 18, 18) - .addComponent(previewLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(scroll, javax.swing.GroupLayout.DEFAULT_SIZE, 147, Short.MAX_VALUE) - .addContainerGap()) - ); - }// //GEN-END:initComponents - - private void fileButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileButtonActionPerformed - String lastPath = NbPreferences.forModule(ImportCSVUIVisualPanel1.class).get(LAST_PATH, null); - final JFileChooser chooser = new JFileChooser(lastPath); - chooser.setAcceptAllFileFilterUsed(true); - DialogFileFilter dialogFileFilter = new DialogFileFilter(NbBundle.getMessage(ImportCSVUIVisualPanel1.class, "ImportCSVUIVisualPanel1.filechooser.csvDescription")); - dialogFileFilter.addExtension("csv"); - chooser.addChoosableFileFilter(dialogFileFilter); - chooser.setSelectedFile(selectedFile); - int returnFile = chooser.showOpenDialog(null); - if (returnFile != JFileChooser.APPROVE_OPTION) { - return; - } - - selectedFile = chooser.getSelectedFile(); - String path = selectedFile.getAbsolutePath(); - - pathTextField.setText(path); - - //Save last path - String defaultDirectory = selectedFile.getParentFile().getAbsolutePath(); - NbPreferences.forModule(ImportCSVUIVisualPanel1.class).put(LAST_PATH, defaultDirectory); - refreshPreviewTable(); - }//GEN-LAST:event_fileButtonActionPerformed - - private void separatorComboBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_separatorComboBoxItemStateChanged - refreshPreviewTable(); - }//GEN-LAST:event_separatorComboBoxItemStateChanged - - private void charsetComboBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_charsetComboBoxItemStateChanged - refreshPreviewTable(); - }//GEN-LAST:event_charsetComboBoxItemStateChanged - - private void tableComboBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_tableComboBoxItemStateChanged - refreshPreviewTable(); - }//GEN-LAST:event_tableComboBoxItemStateChanged - private static final String LAST_PATH = "ImportCSVUIVisualPanel1_Save_Last_Path"; - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JComboBox charsetComboBox; - private javax.swing.JLabel charsetLabel; - private javax.swing.JLabel descriptionLabel; - private javax.swing.JButton fileButton; - private javax.swing.JTextField pathTextField; - private javax.swing.JLabel previewLabel; - private javax.swing.JTable previewTable; - private javax.swing.JScrollPane scroll; - private javax.swing.JComboBox separatorComboBox; - private javax.swing.JLabel separatorLabel; - private javax.swing.JComboBox tableComboBox; - private javax.swing.JLabel tableLabel; - // End of variables declaration//GEN-END:variables -} diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ImportCSVUIVisualPanel2.form b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ImportCSVUIVisualPanel2.form deleted file mode 100644 index 354c16272c..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ImportCSVUIVisualPanel2.form +++ /dev/null @@ -1,34 +0,0 @@ - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ImportCSVUIVisualPanel2.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ImportCSVUIVisualPanel2.java deleted file mode 100644 index f05131c6bf..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ImportCSVUIVisualPanel2.java +++ /dev/null @@ -1,307 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Eduardo Ramos - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.datalab.plugin.manipulators.general.ui; - -import com.csvreader.CsvReader; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.nio.charset.Charset; -import java.util.ArrayList; -import javax.swing.JCheckBox; -import javax.swing.JComboBox; -import javax.swing.JLabel; -import javax.swing.JPanel; -import net.miginfocom.swing.MigLayout; -import org.gephi.data.attributes.api.AttributeController; -import org.gephi.data.attributes.api.AttributeTable; -import org.gephi.data.attributes.api.AttributeType; -import org.gephi.datalab.plugin.manipulators.general.ui.ImportCSVUIWizardAction.Mode; -import org.openide.util.Exceptions; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; -import org.openide.util.NbPreferences; - -public final class ImportCSVUIVisualPanel2 extends JPanel { - - private static final String ASSIGN_NEW_NODES_IDS_SAVED_PREFERENCES = "ImportCSVUIVisualPanel2_assign_new_nodes_ids"; - private static final String CREATE_NEW_NODES_SAVED_PREFERENCES = "ImportCSVUIVisualPanel2_create_new_nodes"; - private final ImportCSVUIWizardPanel2 wizard2; - private Character separator; - private File file; - private ImportCSVUIWizardAction.Mode mode; - private ArrayList columnsCheckBoxes=new ArrayList(); - private ArrayList columnsComboBoxes=new ArrayList(); - private AttributeTable table; - private Charset charset; - //Nodes table settings: - private JCheckBox assignNewNodeIds; - //Edges table settings: - private JCheckBox createNewNodes; - - /** - * Creates new form ImportCSVUIVisualPanel2 - */ - public ImportCSVUIVisualPanel2(ImportCSVUIWizardPanel2 wizard2) { - initComponents(); - this.wizard2 = wizard2; - } - - public void unSetup() { - if (assignNewNodeIds != null) { - NbPreferences.forModule(ImportCSVUIVisualPanel1.class).putBoolean(ASSIGN_NEW_NODES_IDS_SAVED_PREFERENCES, assignNewNodeIds.isSelected()); - } - if (createNewNodes != null) { - NbPreferences.forModule(ImportCSVUIVisualPanel1.class).putBoolean(CREATE_NEW_NODES_SAVED_PREFERENCES, createNewNodes.isSelected()); - } - } - - public void reloadSettings() { - if (separator != null && file != null && file.exists() && mode != null && charset != null) { - JPanel settingsPanel = new JPanel(); - settingsPanel.setLayout(new MigLayout()); - loadDescription(settingsPanel); - switch (mode) { - case NODES_TABLE: - table = Lookup.getDefault().lookup(AttributeController.class).getModel().getNodeTable(); - loadColumns(settingsPanel); - loadNodesTableSettings(settingsPanel); - break; - case EDGES_TABLE: - table = Lookup.getDefault().lookup(AttributeController.class).getModel().getEdgeTable(); - loadColumns(settingsPanel); - loadEdgesTableSettings(settingsPanel); - break; - } - - scroll.setViewportView(settingsPanel); - } - wizard2.fireChangeEvent();//Enable/disable finish button - } - - private void loadDescription(JPanel settingsPanel) { - JLabel descriptionLabel = new JLabel(); - switch (mode) { - case NODES_TABLE: - descriptionLabel.setText(getMessage("ImportCSVUIVisualPanel2.nodes.description")); - break; - case EDGES_TABLE: - descriptionLabel.setText(getMessage("ImportCSVUIVisualPanel2.edges.description")); - break; - } - settingsPanel.add(descriptionLabel, "wrap 15px"); - } - - private void loadColumns(JPanel settingsPanel) { - try { - columnsCheckBoxes.clear(); - columnsComboBoxes.clear(); - JLabel columnsLabel = new JLabel(getMessage("ImportCSVUIVisualPanel2.columnsLabel.text")); - settingsPanel.add(columnsLabel, "wrap"); - - CsvReader reader = new CsvReader(new FileInputStream(file), separator, charset); - reader.setTrimWhitespace(false); - reader.readHeaders(); - final String[] columns = reader.getHeaders(); - reader.close(); - - boolean sourceFound = false, targetFound = false, typeFound = false;//Only first source and target columns found will be used as source and target nodes ids. - for (int i = 0; i < columns.length; i++) { - if (columns[i].isEmpty()) { - continue;//Remove empty column headers: - } - - JCheckBox columnCheckBox= new JCheckBox(columns[i], true); - columnsCheckBoxes.add(columnCheckBox); - settingsPanel.add(columnCheckBox, "wrap"); - JComboBox columnComboBox = new JComboBox(); - columnsComboBoxes.add(columnComboBox); - fillComboBoxWithColumnTypes(columns[i], columnComboBox); - settingsPanel.add(columnComboBox, "wrap 15px"); - - if (mode == ImportCSVUIWizardAction.Mode.EDGES_TABLE && columns[i].equalsIgnoreCase("source") && !sourceFound) { - sourceFound = true; - //Do not allow to not select source column: - columnCheckBox.setEnabled(false); - columnComboBox.setEnabled(false); - } - if (mode == ImportCSVUIWizardAction.Mode.EDGES_TABLE && columns[i].equalsIgnoreCase("target") && !targetFound) { - targetFound = true; - //Do not allow to not select target column: - columnCheckBox.setEnabled(false); - columnComboBox.setEnabled(false); - } - if (mode == ImportCSVUIWizardAction.Mode.EDGES_TABLE && columns[i].equalsIgnoreCase("type") && !typeFound) { - typeFound = true; - //Do not allow to change type column type: - columnComboBox.setEnabled(false); - } - } - } catch (IOException ex) { - Exceptions.printStackTrace(ex); - } - } - - private void fillComboBoxWithColumnTypes(String column, JComboBox comboBox) { - comboBox.removeAllItems(); - for (AttributeType type : AttributeType.values()) { - comboBox.addItem(type); - } - if (table.hasColumn(column)) { - //Set type of the already existing column in the table and disable the edition: - comboBox.setSelectedItem(table.getColumn(column).getType()); - comboBox.setEnabled(false); - } else { - comboBox.setSelectedItem(AttributeType.STRING);//Set STRING by default - } - } - - private void loadNodesTableSettings(JPanel settingsPanel) { - //Create assignNewNodeIds checkbox and set its selection with saved preferences or true by default: - assignNewNodeIds = new JCheckBox(getMessage("ImportCSVUIVisualPanel2.nodes.assign-ids-checkbox"), - NbPreferences.forModule(ImportCSVUIVisualPanel1.class).getBoolean(ASSIGN_NEW_NODES_IDS_SAVED_PREFERENCES, true)); - settingsPanel.add(assignNewNodeIds, "wrap"); - } - - private void loadEdgesTableSettings(JPanel settingsPanel) { - //Create createNewNodes checkbox and set its selection with saved preferences or true by default: - createNewNodes = new JCheckBox(getMessage("ImportCSVUIVisualPanel2.edges.create-new-nodes-checkbox"), - NbPreferences.forModule(ImportCSVUIVisualPanel1.class).getBoolean(CREATE_NEW_NODES_SAVED_PREFERENCES, true)); - settingsPanel.add(createNewNodes, "wrap"); - } - - public boolean isValidCSV() { - return true; - } - - public String[] getColumnsToImport() { - ArrayList columns = new ArrayList(); - for (JCheckBox columnCheckBox : columnsCheckBoxes) { - if (columnCheckBox.isSelected()) { - columns.add(columnCheckBox.getText()); - } - } - return columns.toArray(new String[0]); - } - - public AttributeType[] getColumnsToImportTypes() { - ArrayList types = new ArrayList(); - for (int i = 0; i < columnsCheckBoxes.size(); i++) { - if (columnsCheckBoxes.get(i).isSelected()) { - types.add((AttributeType) columnsComboBoxes.get(i).getSelectedItem()); - } - } - return types.toArray(new AttributeType[0]); - } - - public boolean getAssignNewNodeIds() { - return assignNewNodeIds != null ? assignNewNodeIds.isSelected() : false; - } - - public boolean getCreateNewNodes() { - return createNewNodes != null ? createNewNodes.isSelected() : false; - } - - @Override - public String getName() { - return NbBundle.getMessage(ImportCSVUIVisualPanel2.class, "ImportCSVUIVisualPanel2.name"); - } - - public File getFile() { - return file; - } - - public void setFile(File file) { - this.file = file; - } - - public Mode getMode() { - return mode; - } - - public void setMode(Mode mode) { - this.mode = mode; - } - - public Character getSeparator() { - return separator; - } - - public void setSeparator(Character separator) { - this.separator = separator; - } - - public Charset getCharset() { - return charset; - } - - void setCharset(Charset charset) { - this.charset = charset; - } - - private String getMessage(String resName) { - return NbBundle.getMessage(ImportCSVUIVisualPanel2.class, resName); - } - - /** - * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The content of this method is always regenerated by the Form Editor. - */ - // //GEN-BEGIN:initComponents - private void initComponents() { - - scroll = new javax.swing.JScrollPane(); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(scroll, javax.swing.GroupLayout.DEFAULT_SIZE, 290, Short.MAX_VALUE) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(scroll, javax.swing.GroupLayout.DEFAULT_SIZE, 320, Short.MAX_VALUE) - ); - }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JScrollPane scroll; - // End of variables declaration//GEN-END:variables -} diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ImportCSVUIWizardAction.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ImportCSVUIWizardAction.java deleted file mode 100644 index 324a39c1e3..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ImportCSVUIWizardAction.java +++ /dev/null @@ -1,173 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.datalab.plugin.manipulators.general.ui; - -import java.awt.Component; -import java.awt.Dialog; -import java.io.File; -import java.nio.charset.Charset; -import java.text.MessageFormat; -import javax.swing.JComponent; -import org.gephi.data.attributes.api.AttributeType; -import org.gephi.datalab.api.AttributeColumnsController; -import org.gephi.datalab.api.datatables.DataTablesController; -import org.openide.DialogDisplayer; -import org.openide.WizardDescriptor; -import org.openide.util.HelpCtx; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; -import org.openide.util.actions.CallableSystemAction; -import org.openide.util.lookup.ServiceProvider; - -// An example action demonstrating how the wizard could be called from within -// your code. You can copy-paste the code below wherever you need. -@ServiceProvider(service = ImportCSVUIWizardAction.class) -public final class ImportCSVUIWizardAction extends CallableSystemAction { - - public enum Mode { - - NODES_TABLE, - EDGES_TABLE - } - private WizardDescriptor.Panel[] panels; - private ImportCSVUIWizardPanel1 step1; - private ImportCSVUIWizardPanel2 step2; - private WizardDescriptor wizardDescriptor; - - public void performAction() { - wizardDescriptor = new WizardDescriptor(getPanels()); - step1.setWizardDescriptor(wizardDescriptor); - step2.setWizardDescriptor(wizardDescriptor); - // {0} will be replaced by WizardDesriptor.Panel.getComponent().getName() - wizardDescriptor.setTitleFormat(new MessageFormat("{0}")); - wizardDescriptor.setTitle(getName()); - Dialog dialog = DialogDisplayer.getDefault().createDialog(wizardDescriptor); - dialog.setVisible(true); - dialog.toFront(); - boolean cancelled = wizardDescriptor.getValue() != WizardDescriptor.FINISH_OPTION; - if (!cancelled) { - //General parameters: - File file = (File) wizardDescriptor.getProperty("file"); - Character separator = (Character) wizardDescriptor.getProperty("separator"); - Charset charset = (Charset) wizardDescriptor.getProperty("charset"); - String[] columnNames = (String[]) wizardDescriptor.getProperty("columns-names"); - AttributeType[] columnTypes = (AttributeType[]) wizardDescriptor.getProperty("columns-types"); - - //Nodes import parameters: - Boolean assignNewNodeIds = (Boolean) wizardDescriptor.getProperty("assign-new-node-ids"); - //Edges import parameters: - Boolean createNewNodes = (Boolean) wizardDescriptor.getProperty("create-new-nodes"); - - AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); - switch ((Mode) wizardDescriptor.getProperty("mode")) { - case NODES_TABLE: - ac.importCSVToNodesTable(file, separator, charset, columnNames, columnTypes, assignNewNodeIds); - break; - case EDGES_TABLE: - ac.importCSVToEdgesTable(file, separator, charset, columnNames, columnTypes, createNewNodes); - break; - } - Lookup.getDefault().lookup(DataTablesController.class).refreshCurrentTable(); - } - step1.unSetup(); - step2.unSetup(); - } - - /** - * Initialize panels representing individual wizard's steps and sets - * various properties for them influencing wizard appearance. - */ - private WizardDescriptor.Panel[] getPanels() { - if (panels == null) { - panels = new WizardDescriptor.Panel[]{ - step1 = new ImportCSVUIWizardPanel1(), - step2 = new ImportCSVUIWizardPanel2() - }; - String[] steps = new String[panels.length]; - - - for (int i = 0; i - < panels.length; i++) { - Component c = panels[i].getComponent(); - // Default step name to component name of panel. Mainly useful - // for getting the name of the target chooser to appear in the - // list of steps. - steps[i] = c.getName(); - - - if (c instanceof JComponent) { // assume Swing components - JComponent jc = (JComponent) c; - // Sets step number of a component - // TODO if using org.openide.dialogs >= 7.8, can use WizardDescriptor.PROP_*: - jc.putClientProperty("WizardPanel_contentSelectedIndex", new Integer(i)); - // Sets steps names for a panel - jc.putClientProperty("WizardPanel_contentData", steps); - // Turn on subtitle creation on each step - jc.putClientProperty("WizardPanel_autoWizardStyle", Boolean.TRUE); - // Show steps on the left side with the image on the background - jc.putClientProperty("WizardPanel_contentDisplayed", Boolean.TRUE); - // Turn on numbering of all steps - jc.putClientProperty("WizardPanel_contentNumbered", Boolean.TRUE); - } - } - } - return panels; - } - - public String getName() { - return NbBundle.getMessage(ImportCSVUIWizardAction.class, "ImportCSVUIWizardAction.name"); - } - - @Override - public String iconResource() { - return null; - } - - public HelpCtx getHelpCtx() { - return HelpCtx.DEFAULT_HELP; - } - - @Override - protected boolean asynchronous() { - return false; - } -} diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ImportCSVUIWizardPanel1.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ImportCSVUIWizardPanel1.java deleted file mode 100644 index 10092fd9e0..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ImportCSVUIWizardPanel1.java +++ /dev/null @@ -1,134 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ - -package org.gephi.datalab.plugin.manipulators.general.ui; - -import java.awt.Component; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Set; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import org.openide.WizardDescriptor; -import org.openide.util.HelpCtx; - -public class ImportCSVUIWizardPanel1 implements WizardDescriptor.Panel { - - private WizardDescriptor wizardDescriptor; - /** - * The visual component that displays this panel. If you need to access the - * component from this class, just use getComponent(). - */ - private ImportCSVUIVisualPanel1 component; - - // Get the visual component for the panel. In this template, the component - // is kept separate. This can be more efficient: if the wizard is created - // but never displayed, or not all panels are displayed, it is better to - // create only those which really need to be visible. - public Component getComponent() { - if (component == null) { - component = new ImportCSVUIVisualPanel1(this); - } - return component.getValidationPanel(); - } - - public HelpCtx getHelp() { - // Show no Help button for this panel: - return HelpCtx.DEFAULT_HELP; - // If you have context help: - // return new HelpCtx(SampleWizardPanel1.class); - } - - public boolean isValid() { - return component.isCSVValid(); - } - private final Set listeners = new HashSet(1); // or can use ChangeSupport in NB 6.0 - - public final void addChangeListener(ChangeListener l) { - synchronized (listeners) { - listeners.add(l); - } - } - - public final void removeChangeListener(ChangeListener l) { - synchronized (listeners) { - listeners.remove(l); - } - } - - protected final void fireChangeEvent() { - Iterator it; - synchronized (listeners) { - it = new HashSet(listeners).iterator(); - } - ChangeEvent ev = new ChangeEvent(this); - while (it.hasNext()) { - it.next().stateChanged(ev); - } - } - - // You can use a settings object to keep track of state. Normally the - // settings object will be the WizardDescriptor, so you can use - // WizardDescriptor.getProperty & putProperty to store information entered - // by the user. - public void readSettings(Object settings) { - component.refreshPreviewTable(); - } - - public void storeSettings(Object settings) { - wizardDescriptor.putProperty("separator", component.getSelectedSeparator()); - wizardDescriptor.putProperty("file", component.getSelectedFile()); - wizardDescriptor.putProperty("mode", component.getMode()); - wizardDescriptor.putProperty("charset", component.getSelectedCharset()); - } - - public void unSetup(){ - component.unSetup(); - } - - public WizardDescriptor getWizardDescriptor() { - return wizardDescriptor; - } - - public void setWizardDescriptor(WizardDescriptor wizardDescriptor) { - this.wizardDescriptor = wizardDescriptor; - } -} diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ImportCSVUIWizardPanel2.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ImportCSVUIWizardPanel2.java deleted file mode 100644 index 03244ec295..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ImportCSVUIWizardPanel2.java +++ /dev/null @@ -1,138 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.datalab.plugin.manipulators.general.ui; - -import java.awt.Component; -import java.io.File; -import java.nio.charset.Charset; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Set; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import org.gephi.datalab.plugin.manipulators.general.ui.ImportCSVUIWizardAction.Mode; -import org.openide.WizardDescriptor; -import org.openide.util.HelpCtx; - -public class ImportCSVUIWizardPanel2 implements WizardDescriptor.Panel { - - private WizardDescriptor wizardDescriptor; - /** - * The visual component that displays this panel. If you need to access the - * component from this class, just use getComponent(). - */ - private ImportCSVUIVisualPanel2 component; - - // Get the visual component for the panel. In this template, the component - // is kept separate. This can be more efficient: if the wizard is created - // but never displayed, or not all panels are displayed, it is better to - // create only those which really need to be visible. - public Component getComponent() { - if (component == null) { - component = new ImportCSVUIVisualPanel2(this); - } - return component; - } - - public HelpCtx getHelp() { - // Show no Help button for this panel: - return HelpCtx.DEFAULT_HELP; - // If you have context help: - // return new HelpCtx(SampleWizardPanel1.class); - } - - public boolean isValid() { - return component.isValidCSV(); - } - - private final Set listeners = new HashSet(1); // or can use ChangeSupport in NB 6.0 - - public final void addChangeListener(ChangeListener l) { - synchronized (listeners) { - listeners.add(l); - } - } - - public final void removeChangeListener(ChangeListener l) { - synchronized (listeners) { - listeners.remove(l); - } - } - - protected final void fireChangeEvent() { - Iterator it; - synchronized (listeners) { - it = new HashSet(listeners).iterator(); - } - ChangeEvent ev = new ChangeEvent(this); - while (it.hasNext()) { - it.next().stateChanged(ev); - } - } - - // You can use a settings object to keep track of state. Normally the - // settings object will be the WizardDescriptor, so you can use - // WizardDescriptor.getProperty & putProperty to store information entered - // by the user. - public void readSettings(Object settings) { - component.setSeparator((Character) wizardDescriptor.getProperty("separator")); - component.setFile((File) wizardDescriptor.getProperty("file")); - component.setMode((Mode) wizardDescriptor.getProperty("mode")); - component.setCharset((Charset) wizardDescriptor.getProperty("charset")); - component.reloadSettings(); - } - - public void unSetup() { - component.unSetup(); - } - - public void storeSettings(Object settings) { - wizardDescriptor.putProperty("columns-names", component.getColumnsToImport()); - wizardDescriptor.putProperty("columns-types", component.getColumnsToImportTypes()); - wizardDescriptor.putProperty("assign-new-node-ids", component.getAssignNewNodeIds()); - wizardDescriptor.putProperty("create-new-nodes", component.getCreateNewNodes()); - } - - public void setWizardDescriptor(WizardDescriptor wizardDescriptor) { - this.wizardDescriptor = wizardDescriptor; - } -} diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ManageColumnEstimatorsUI.form b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ManageColumnEstimatorsUI.form new file mode 100644 index 0000000000..7e35b2c2f6 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ManageColumnEstimatorsUI.form @@ -0,0 +1,63 @@ + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ManageColumnEstimatorsUI.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ManageColumnEstimatorsUI.java new file mode 100644 index 0000000000..cc1b79d7cb --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/ManageColumnEstimatorsUI.java @@ -0,0 +1,252 @@ +/* +Copyright 2008-2015 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.datalab.plugin.manipulators.general.ui; + +import java.util.List; +import java.util.MissingResourceException; +import javax.swing.JComboBox; +import javax.swing.JLabel; +import javax.swing.JPanel; +import net.miginfocom.swing.MigLayout; +import org.gephi.datalab.plugin.manipulators.general.ManageColumnEstimators; +import org.gephi.datalab.spi.DialogControls; +import org.gephi.datalab.spi.Manipulator; +import org.gephi.datalab.spi.ManipulatorUI; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Estimator; +import org.gephi.graph.api.types.TimeMap; +import org.openide.util.NbBundle; + +/** + * UI for ManageColumnEstimators. + * + * @author Eduardo Ramos + */ +public class ManageColumnEstimatorsUI extends javax.swing.JPanel implements ManipulatorUI { + + private ManageColumnEstimators manipulator; + private ColumnEstimator[] columnsEstimators; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPanel contentPanel; + private javax.swing.JScrollPane contentScrollPane; + private javax.swing.JLabel descriptionLabel; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form GeneralChooseColumnsUI + */ + public ManageColumnEstimatorsUI() { + initComponents(); + } + + @Override + public void setup(Manipulator m, DialogControls dialogControls) { + this.manipulator = (ManageColumnEstimators) m; + descriptionLabel.setText(manipulator.getDescription()); + refreshColumns(); + } + + @Override + public void unSetup() { + Column[] columns = new Column[columnsEstimators.length]; + Estimator[] estimators = new Estimator[columnsEstimators.length]; + for (int i = 0; i < columnsEstimators.length; i++) { + columns[i] = columnsEstimators[i].column; + estimators[i] = columnsEstimators[i].getEstimator(); + } + + manipulator.setup(columns, estimators); + } + + @Override + public String getDisplayName() { + return manipulator.getName(); + } + + @Override + public JPanel getSettingsPanel() { + return this; + } + + @Override + public boolean isModal() { + return true; + } + + private void refreshColumns() { + List columns = manipulator.getColumns(); + columnsEstimators = new ColumnEstimator[columns.size()]; + contentPanel.removeAll(); + contentPanel.setLayout(new MigLayout("", "[pref!]")); + for (int i = 0; i < columnsEstimators.length; i++) { + columnsEstimators[i] = new ColumnEstimator(columns.get(i)); + contentPanel.add(columnsEstimators[i].label, "wrap"); + contentPanel.add(columnsEstimators[i].comboBox, "wrap"); + } + contentPanel.revalidate(); + contentPanel.repaint(); + } + + /** + * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The content of this method is always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + contentScrollPane = new javax.swing.JScrollPane(); + contentPanel = new javax.swing.JPanel(); + descriptionLabel = new javax.swing.JLabel(); + + contentPanel.setLayout(new java.awt.GridLayout(1, 0)); + contentScrollPane.setViewportView(contentPanel); + + descriptionLabel.setText(null); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(descriptionLabel, javax.swing.GroupLayout.Alignment.LEADING, + javax.swing.GroupLayout.DEFAULT_SIZE, 319, Short.MAX_VALUE) + .addComponent(contentScrollPane, javax.swing.GroupLayout.Alignment.LEADING, + javax.swing.GroupLayout.DEFAULT_SIZE, 319, Short.MAX_VALUE)) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(descriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 26, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(contentScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 220, Short.MAX_VALUE) + .addContainerGap()) + ); + }// //GEN-END:initComponents + + private static class EstimatorWrapper { + + private final Estimator estimator; + + public EstimatorWrapper(Estimator estimator) { + this.estimator = estimator; + } + + @Override + public String toString() { + if (estimator == null) { + return "---"; + } + + try { + return NbBundle.getMessage(ManageColumnEstimatorsUI.class, + "ManageColumnEstimatorsUI.estimator." + estimator.name()); + } catch (MissingResourceException missingResourceException) { + return estimator.name();//In case of new estimators without translation + } + } + + @Override + public int hashCode() { + int hash = 7; + hash = 37 * hash + (this.estimator != null ? this.estimator.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final EstimatorWrapper other = (EstimatorWrapper) obj; + return this.estimator == other.estimator; + } + } + + private static class ColumnEstimator { + + private final JLabel label; + private final JComboBox comboBox; + private final Column column; + + public ColumnEstimator(Column column) { + this.column = column; + this.comboBox = new JComboBox(); + this.label = new JLabel(column.getTitle()); + + initAvailableEstimators(); + Estimator currentEstimator = column.getEstimator(); + comboBox.setSelectedItem(new EstimatorWrapper(currentEstimator)); + } + + private void initAvailableEstimators() { + Class type = column.getTypeClass(); + try { + TimeMap dummy = type.newInstance(); + for (Estimator estimator : Estimator.values()) { + if (dummy.isSupported(estimator)) { + comboBox.addItem(new EstimatorWrapper(estimator)); + } + } + } catch (InstantiationException ex) { + throw new RuntimeException(ex); + } catch (IllegalAccessException ex) { + throw new RuntimeException(ex); + } + } + + public Estimator getEstimator() { + return ((EstimatorWrapper) comboBox.getSelectedItem()).estimator; + } + } +} diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/MergeNodeDuplicatesUI.form b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/MergeNodeDuplicatesUI.form index 4dd2656d3e..4d8177666b 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/MergeNodeDuplicatesUI.form +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/MergeNodeDuplicatesUI.form @@ -1,4 +1,4 @@ - +
    @@ -16,16 +16,16 @@ - - + + - - - + + + diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/MergeNodeDuplicatesUI.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/MergeNodeDuplicatesUI.java index 090c4e2e88..9f148894cc 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/MergeNodeDuplicatesUI.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/MergeNodeDuplicatesUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.general.ui; import java.awt.event.ActionEvent; @@ -54,7 +55,6 @@ Development and Distribution License("CDDL") (collectively, the import javax.swing.JLabel; import javax.swing.JPanel; import net.miginfocom.swing.MigLayout; -import org.gephi.data.attributes.api.AttributeColumn; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.api.DataLaboratoryHelper; import org.gephi.datalab.plugin.manipulators.general.MergeNodeDuplicates; @@ -62,7 +62,8 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.datalab.spi.Manipulator; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; -import org.gephi.graph.api.Attributes; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; import org.gephi.graph.api.Node; import org.gephi.ui.components.richtooltip.RichTooltip; import org.openide.util.ImageUtilities; @@ -71,28 +72,38 @@ Development and Distribution License("CDDL") (collectively, the /** * UI for MergeNodeDuplicates PluginGeneralActionsManipulator - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public final class MergeNodeDuplicatesUI extends JPanel implements ManipulatorUI { - private static final ImageIcon CONFIG_BUTTONS_ICON = ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/gear.png", true); - private static final ImageIcon INFO_LABELS_ICON = ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/information.png", true); + private static final ImageIcon CONFIG_BUTTONS_ICON = + ImageUtilities.loadImageIcon("DataLaboratoryPlugin/gear.svg", false); + private static final ImageIcon INFO_LABELS_ICON = + ImageUtilities.loadImageIcon("DataLaboratoryPlugin/information.png", false); private MergeNodeDuplicates manipulator; private DialogControls dialogControls; - private AttributeColumn[] columns; + private Column[] columns; private List> duplicateGroups; private JCheckBox deleteMergedNodesCheckBox; private JCheckBox caseSensitiveCheckBox; private JComboBox baseColumnComboBox; - private Attributes[] rows; + private Element[] rows; private StrategyComboBox[] strategiesComboBoxes; private StrategyConfigurationButton[] strategiesConfigurationButtons; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JScrollPane scroll; + private javax.swing.JScrollPane scrollStrategies; + // End of variables declaration//GEN-END:variables - /** Creates new form MergeNodeDuplicatesUI */ + /** + * Creates new form MergeNodeDuplicatesUI + */ public MergeNodeDuplicatesUI() { initComponents(); } + @Override public void setup(Manipulator m, DialogControls dialogControls) { manipulator = (MergeNodeDuplicates) m; this.dialogControls = dialogControls; @@ -100,34 +111,41 @@ public void setup(Manipulator m, DialogControls dialogControls) { loadSettings(); } + @Override public void unSetup() { manipulator.setDeleteMergedNodes(deleteMergedNodesCheckBox.isSelected()); manipulator.setCaseSensitive(caseSensitiveCheckBox.isSelected()); if (duplicateGroups != null && duplicateGroups.size() > 0) { AttributeRowsMergeStrategy[] chosenStrategies = new AttributeRowsMergeStrategy[strategiesComboBoxes.length]; for (int i = 0; i < strategiesComboBoxes.length; i++) { - chosenStrategies[i] = strategiesComboBoxes[i].getSelectedItem() != null ? ((StrategyWrapper) strategiesComboBoxes[i].getSelectedItem()).getStrategy() : null; + chosenStrategies[i] = strategiesComboBoxes[i].getSelectedItem() != null ? + ((StrategyWrapper) strategiesComboBoxes[i].getSelectedItem()).getStrategy() : null; } manipulator.setMergeStrategies(chosenStrategies); manipulator.setDuplicateGroups(duplicateGroups); } } + @Override public String getDisplayName() { return manipulator.getName(); } + @Override public JPanel getSettingsPanel() { return this; } + @Override public boolean isModal() { return true; } private void calculateDuplicates() { if (baseColumnComboBox.getSelectedIndex() != -1) { - duplicateGroups = Lookup.getDefault().lookup(AttributeColumnsController.class).detectNodeDuplicatesByColumn(columns[baseColumnComboBox.getSelectedIndex()], caseSensitiveCheckBox.isSelected()); + duplicateGroups = Lookup.getDefault().lookup(AttributeColumnsController.class) + .detectNodeDuplicatesByColumn(columns[baseColumnComboBox.getSelectedIndex()], + caseSensitiveCheckBox.isSelected()); } } @@ -151,13 +169,16 @@ private void loadColumnsStrategies() { JPanel strategiesPanel = new JPanel(); strategiesPanel.setLayout(new MigLayout("fillx")); if (duplicateGroups != null && duplicateGroups.size() > 0) { - strategiesPanel.add(new JLabel(NbBundle.getMessage(MergeNodeDuplicatesUI.class, "MergeNodeDuplicatesUI.duplicateGroupsNumber",duplicateGroups.size())),"wrap 15px"); - - List nodes = duplicateGroups.get(0);//Use first group of duplicated nodes to set strategies for all of them + strategiesPanel.add(new JLabel(NbBundle + .getMessage(MergeNodeDuplicatesUI.class, "MergeNodeDuplicatesUI.duplicateGroupsNumber", + duplicateGroups.size())), "wrap 15px"); + + List nodes = + duplicateGroups.get(0);//Use first group of duplicated nodes to set strategies for all of them //Prepare node rows: - rows = new Attributes[nodes.size()]; + rows = new Element[nodes.size()]; for (int i = 0; i < nodes.size(); i++) { - rows[i] = nodes.get(0).getAttributes(); + rows[i] = nodes.get(i); } strategiesConfigurationButtons = new StrategyConfigurationButton[columns.length]; @@ -191,9 +212,10 @@ private void loadColumnsStrategies() { scrollStrategies.setViewportView(strategiesPanel); } - private List getColumnAvailableStrategies(AttributeColumn column) { - ArrayList availableStrategies = new ArrayList(); - for (AttributeRowsMergeStrategy strategy : DataLaboratoryHelper.getDefault().getAttributeRowsMergeStrategies()) { + private List getColumnAvailableStrategies(Column column) { + ArrayList availableStrategies = new ArrayList<>(); + for (AttributeRowsMergeStrategy strategy : DataLaboratoryHelper.getDefault() + .getAttributeRowsMergeStrategies()) { strategy.setup(rows, rows[0], column); if (strategy.canExecute()) { availableStrategies.add(strategy); @@ -210,17 +232,19 @@ private void loadDescription(JPanel settingsPanel) { private void loadBaseColumn(JPanel settingsPanel) { baseColumnComboBox = new JComboBox(); - for (AttributeColumn column : columns) { + for (Column column : columns) { baseColumnComboBox.addItem(column.getTitle()); } settingsPanel.add(new JLabel(getMessage("MergeNodeDuplicatesUI.baseColumnText")), "split 2"); settingsPanel.add(baseColumnComboBox, "growx, wrap"); - caseSensitiveCheckBox = new JCheckBox(getMessage("MergeNodeDuplicatesUI.caseSensitiveText"), manipulator.isCaseSensitive()); + caseSensitiveCheckBox = + new JCheckBox(getMessage("MergeNodeDuplicatesUI.caseSensitiveText"), manipulator.isCaseSensitive()); settingsPanel.add(caseSensitiveCheckBox, "wrap"); //Reload duplicates on parameteres of detection change: ActionListener listener = new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { refreshDuplicatesAndStrategies(); } @@ -230,7 +254,8 @@ public void actionPerformed(ActionEvent e) { } private void loadDeleteMergedNodesCheckBox(JPanel settingsPanel) { - deleteMergedNodesCheckBox = new JCheckBox(getMessage("MergeNodeDuplicatesUI.deleteMergedNodesText"), manipulator.isDeleteMergedNodes()); + deleteMergedNodesCheckBox = + new JCheckBox(getMessage("MergeNodeDuplicatesUI.deleteMergedNodesText"), manipulator.isDeleteMergedNodes()); settingsPanel.add(deleteMergedNodesCheckBox, "wrap"); } @@ -248,9 +273,38 @@ private AttributeRowsMergeStrategy getStrategy(int strategyIndex) { return null; } + /** + * This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + + scrollStrategies = new javax.swing.JScrollPane(); + scroll = new javax.swing.JScrollPane(); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(scrollStrategies, javax.swing.GroupLayout.DEFAULT_SIZE, 782, Short.MAX_VALUE) + .addComponent(scroll, javax.swing.GroupLayout.DEFAULT_SIZE, 782, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addComponent(scroll, javax.swing.GroupLayout.PREFERRED_SIZE, 192, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(scrollStrategies, javax.swing.GroupLayout.DEFAULT_SIZE, 308, Short.MAX_VALUE)) + ); + }// //GEN-END:initComponents + class StrategyConfigurationButton extends JButton implements ActionListener { - private int strategyIndex; + private final int strategyIndex; public StrategyConfigurationButton(int strategyIndex) { this.strategyIndex = strategyIndex; @@ -264,6 +318,7 @@ public void refreshEnabledState() { setEnabled(strategy != null && strategy.getUI() != null);//Has strategy and the strategy has UI } + @Override public void actionPerformed(ActionEvent e) { DataLaboratoryHelper.getDefault().showAttributeRowsMergeStrategyUIDialog(getStrategy(strategyIndex)); } @@ -271,8 +326,8 @@ public void actionPerformed(ActionEvent e) { class StrategyComboBox extends JComboBox implements ActionListener { - private StrategyConfigurationButton button; - private StrategyInfoLabel infoLabel; + private final StrategyConfigurationButton button; + private final StrategyInfoLabel infoLabel; public StrategyComboBox(StrategyConfigurationButton button, StrategyInfoLabel infoLabel) { this.button = button; @@ -293,7 +348,7 @@ public void actionPerformed(ActionEvent e) { class StrategyInfoLabel extends JLabel { - private int strategyIndex; + private final int strategyIndex; public StrategyInfoLabel(int strategyIndex) { this.strategyIndex = strategyIndex; @@ -347,7 +402,7 @@ private RichTooltip buildTooltip(AttributeRowsMergeStrategy strategy) { class StrategyWrapper { - private AttributeRowsMergeStrategy strategy; + private final AttributeRowsMergeStrategy strategy; public StrategyWrapper(AttributeRowsMergeStrategy strategy) { this.strategy = strategy; @@ -362,35 +417,4 @@ public AttributeRowsMergeStrategy getStrategy() { return strategy; } } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - // //GEN-BEGIN:initComponents - private void initComponents() { - - scrollStrategies = new javax.swing.JScrollPane(); - scroll = new javax.swing.JScrollPane(); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(scrollStrategies, javax.swing.GroupLayout.DEFAULT_SIZE, 489, Short.MAX_VALUE) - .addComponent(scroll, javax.swing.GroupLayout.DEFAULT_SIZE, 489, Short.MAX_VALUE) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addComponent(scroll, javax.swing.GroupLayout.PREFERRED_SIZE, 159, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(scrollStrategies, javax.swing.GroupLayout.DEFAULT_SIZE, 199, Short.MAX_VALUE)) - ); - }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JScrollPane scroll; - private javax.swing.JScrollPane scrollStrategies; - // End of variables declaration//GEN-END:variables } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/SearchReplaceUI.form b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/SearchReplaceUI.form index f265ac65eb..af1b9fb990 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/SearchReplaceUI.form +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/SearchReplaceUI.form @@ -1,4 +1,4 @@ - + @@ -20,8 +20,9 @@ + - + @@ -58,15 +59,12 @@ + + + + + - - - - - - - - @@ -221,6 +219,9 @@ + + + diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/SearchReplaceUI.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/SearchReplaceUI.java index 3b9c6b47f8..b1cd53d057 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/SearchReplaceUI.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/general/ui/SearchReplaceUI.java @@ -39,24 +39,29 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.general.ui; import java.awt.Color; +import java.awt.event.KeyEvent; +import java.time.ZoneId; import java.util.regex.Pattern; import java.util.regex.PatternSyntaxException; import javax.swing.JOptionPane; +import javax.swing.UIManager; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeController; -import org.gephi.data.attributes.api.AttributeTable; -import org.gephi.datalab.api.datatables.DataTablesController; import org.gephi.datalab.api.SearchReplaceController; import org.gephi.datalab.api.SearchReplaceController.SearchOptions; import org.gephi.datalab.api.SearchReplaceController.SearchResult; +import org.gephi.datalab.api.datatables.DataTablesController; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; import org.gephi.graph.api.Edge; import org.gephi.graph.api.GraphController; import org.gephi.graph.api.Node; +import org.gephi.graph.api.Table; +import org.gephi.graph.api.TimeFormat; import org.gephi.utils.HTMLEscape; import org.openide.util.Lookup; import org.openide.util.NbBundle; @@ -64,26 +69,45 @@ Development and Distribution License("CDDL") (collectively, the /** * Special UI for SearchReplace GeneralActionsManipulator - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ @ServiceProvider(service = SearchReplaceUI.class) public final class SearchReplaceUI extends javax.swing.JPanel { - public enum Mode { - - NODES_TABLE, - EDGES_TABLE - } private static final Color invalidRegexColor = new Color(254, 150, 150); private Mode mode = Mode.NODES_TABLE; - private SearchReplaceController searchReplaceController; - private DataTablesController dataTablesController; + private final SearchReplaceController searchReplaceController; + private final DataTablesController dataTablesController; private SearchOptions searchOptions; private SearchResult searchResult = null; private Pattern regexPattern; private boolean active = false; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JCheckBox caseSensitiveCheckBox; + private javax.swing.JComboBox columnsToSearchComboBox; + private javax.swing.JLabel columnsToSearchLabel; + private javax.swing.JButton findNextButton; + private javax.swing.JSeparator jSeparator1; + private javax.swing.JCheckBox matchWholeValueCheckBox; + private javax.swing.JRadioButton normalSearchModeRadioButton; + private javax.swing.JCheckBox regexReplaceCheckBox; + private javax.swing.JRadioButton regexSearchModeRadioButton; + private javax.swing.JButton replaceAllButton; + private javax.swing.JButton replaceButton; + private javax.swing.JLabel replaceLabel; + private javax.swing.JTextField replaceText; + private javax.swing.JLabel resultLabel; + private javax.swing.JTextPane resultText; + private javax.swing.JScrollPane scroll; + private javax.swing.JLabel searchLabel; + private javax.swing.ButtonGroup searchModeButtonGroup; + private javax.swing.JTextField searchText; + // End of variables declaration//GEN-END:variables - /** Creates new form SearchReplaceUI */ + /** + * Creates new form SearchReplaceUI + */ public SearchReplaceUI() { initComponents(); @@ -94,14 +118,17 @@ public SearchReplaceUI() { searchText.getDocument().addDocumentListener(new DocumentListener() { + @Override public void insertUpdate(DocumentEvent e) { refreshSearchOptions(); } + @Override public void removeUpdate(DocumentEvent e) { refreshSearchOptions(); } + @Override public void changedUpdate(DocumentEvent e) { refreshSearchOptions(); } @@ -126,7 +153,8 @@ public void refreshSearchOptions() { if (columnsToSearchComboBox.getSelectedIndex() <= 0) { searchOptions.setColumnsToSearch(new int[0]); } else { - searchOptions.setColumnsToSearch(new int[]{((ColumnWrapper) columnsToSearchComboBox.getSelectedItem()).column.getIndex()}); + searchOptions.setColumnsToSearch( + new int[] {((ColumnWrapper) columnsToSearchComboBox.getSelectedItem()).column.getIndex()}); } refreshControls(); } @@ -135,32 +163,34 @@ private void createSearchOptions() { boolean onlyVisibleElements = Lookup.getDefault().lookup(DataTablesController.class).isShowOnlyVisible(); searchResult = null; columnsToSearchComboBox.removeAllItems(); - AttributeTable table; + Table table; if (mode == Mode.NODES_TABLE) { Node[] nodes; if (onlyVisibleElements) { //Search on visible nodes: - nodes = Lookup.getDefault().lookup(GraphController.class).getModel().getHierarchicalGraphVisible().getNodesTree().toArray(); + nodes = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getGraphVisible().getNodes() + .toArray(); } else { nodes = new Node[0];//Search on all nodes } searchOptions = new SearchOptions(nodes, null); - table = Lookup.getDefault().lookup(AttributeController.class).getModel().getNodeTable(); + table = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getNodeTable(); } else { Edge[] edges; if (onlyVisibleElements) { //Search on visible edges: - edges = Lookup.getDefault().lookup(GraphController.class).getModel().getHierarchicalGraphVisible().getEdges().toArray(); + edges = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getGraphVisible().getEdges() + .toArray(); } else { edges = new Edge[0];//Search on all edges } searchOptions = new SearchOptions(edges, null); - table = Lookup.getDefault().lookup(AttributeController.class).getModel().getEdgeTable(); + table = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getEdgeTable(); } //Fill possible columns to search (first value is all columns): columnsToSearchComboBox.addItem(NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.allColumns")); - for (AttributeColumn c : table.getColumns()) { + for (Column c : table) { columnsToSearchComboBox.addItem(new ColumnWrapper(c)); } } @@ -182,7 +212,7 @@ private void refreshRegexPattern() { regexPattern = Pattern.compile(text); } searchOptions.setRegexPattern(regexPattern); - searchText.setBackground(Color.WHITE); + searchText.setBackground(UIManager.getColor("TextField.background")); } catch (PatternSyntaxException ex) { searchText.setBackground(invalidRegexColor); regexPattern = null; @@ -196,7 +226,7 @@ private void refreshControls() { } else { boolean canReplace = searchReplaceController.canReplace(searchResult); replaceButton.setEnabled(canReplace); - replaceAllButton.setEnabled(columnsToSearchComboBox.getSelectedIndex() > 0 ? canReplace : true);//Disable replace all when the current search result cannot be replaced and + replaceAllButton.setEnabled(columnsToSearchComboBox.getSelectedIndex() <= 0 || canReplace);//Disable replace all when the current search result cannot be replaced and } if (regexPattern == null) { @@ -210,39 +240,50 @@ private void refreshControls() { private void showSearchResult() { if (searchResult != null) { + Table table; Object value; if (mode == Mode.NODES_TABLE) { Node node = searchResult.getFoundNode(); - dataTablesController.setNodeTableSelection(new Node[]{node}); + dataTablesController.setNodeTableSelection(new Node[] {node}); if (!dataTablesController.isNodeTableMode()) { dataTablesController.selectNodesTable(); } - value = node.getNodeData().getAttributes().getValue(searchResult.getFoundColumnIndex()); + + table = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getNodeTable(); + value = node.getAttribute(table.getColumn(searchResult.getFoundColumnIndex())); } else { Edge edge = searchResult.getFoundEdge(); - dataTablesController.setEdgeTableSelection(new Edge[]{edge}); + dataTablesController.setEdgeTableSelection(new Edge[] {edge}); if (!dataTablesController.isEdgeTableMode()) { dataTablesController.selectEdgesTable(); } - value = edge.getEdgeData().getAttributes().getValue(searchResult.getFoundColumnIndex()); + table = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getEdgeTable(); + value = edge.getAttribute(table.getColumn(searchResult.getFoundColumnIndex())); } + TimeFormat timeFormat = table.getGraph().getModel().getTimeFormat(); + ZoneId timeZone = table.getGraph().getModel().getTimeZone(); + String columnName; if (mode == Mode.NODES_TABLE) { - columnName = Lookup.getDefault().lookup(AttributeController.class).getModel().getNodeTable().getColumn(searchResult.getFoundColumnIndex()).getTitle(); + columnName = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getNodeTable() + .getColumn(searchResult.getFoundColumnIndex()).getTitle(); } else { - columnName = Lookup.getDefault().lookup(AttributeController.class).getModel().getEdgeTable().getColumn(searchResult.getFoundColumnIndex()).getTitle(); + columnName = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getEdgeTable() + .getColumn(searchResult.getFoundColumnIndex()).getTitle(); } StringBuilder sb = new StringBuilder(); sb.append(""); - sb.append(NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.column", HTMLEscape.stringToHTMLString(columnName))); + sb.append(NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.column", + HTMLEscape.stringToHTMLString(columnName))); sb.append("
    "); if (value != null) { - String text = value.toString(); + String text = AttributeUtils.print(value, timeFormat, timeZone); sb.append(HTMLEscape.stringToHTMLString(text.substring(0, searchResult.getStart()))); sb.append(""); - sb.append(HTMLEscape.stringToHTMLString(text.substring(searchResult.getStart(), searchResult.getEnd()))); + sb.append( + HTMLEscape.stringToHTMLString(text.substring(searchResult.getStart(), searchResult.getEnd()))); sb.append(""); sb.append(HTMLEscape.stringToHTMLString(text.substring(searchResult.getEnd()))); } else { @@ -251,13 +292,23 @@ private void showSearchResult() { sb.append(""); resultText.setText(sb.toString()); } else { - JOptionPane.showMessageDialog(null, NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.not.found", searchText.getText())); + JOptionPane.showMessageDialog(null, + NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.not.found", searchText.getText())); resultText.setText(""); } } + private void nextResult() { + searchResult = searchReplaceController.findNext(searchOptions); + refreshSearchOptions(); + showSearchResult(); + } + private void showRegexReplaceError() { - JOptionPane.showMessageDialog(null, NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.regexReplacementError"), NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.dialog.title.error"), JOptionPane.ERROR_MESSAGE); + JOptionPane.showMessageDialog(null, + NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.regexReplacementError"), + NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.dialog.title.error"), + JOptionPane.ERROR_MESSAGE); } public boolean isActive() { @@ -268,24 +319,8 @@ public void setActive(boolean active) { this.active = active; } - class ColumnWrapper { - - AttributeColumn column; - - public ColumnWrapper(AttributeColumn column) { - this.column = column; - } - - @Override - public String toString() { - return column.getTitle(); - } - } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. + /** + * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The content of this method is always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents @@ -311,12 +346,16 @@ private void initComponents() { columnsToSearchLabel = new javax.swing.JLabel(); columnsToSearchComboBox = new javax.swing.JComboBox(); - searchLabel.setText(org.openide.util.NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.searchLabel.text")); // NOI18N + searchLabel.setText( + org.openide.util.NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.searchLabel.text")); // NOI18N - replaceLabel.setText(org.openide.util.NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.replaceLabel.text")); // NOI18N + replaceLabel.setText( + org.openide.util.NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.replaceLabel.text")); // NOI18N - matchWholeValueCheckBox.setText(org.openide.util.NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.matchWholeValueCheckBox.text")); // NOI18N + matchWholeValueCheckBox.setText(org.openide.util.NbBundle + .getMessage(SearchReplaceUI.class, "SearchReplaceUI.matchWholeValueCheckBox.text")); // NOI18N matchWholeValueCheckBox.addItemListener(new java.awt.event.ItemListener() { + @Override public void itemStateChanged(java.awt.event.ItemEvent evt) { matchWholeValueCheckBoxItemStateChanged(evt); } @@ -324,69 +363,95 @@ public void itemStateChanged(java.awt.event.ItemEvent evt) { searchModeButtonGroup.add(normalSearchModeRadioButton); normalSearchModeRadioButton.setSelected(true); - normalSearchModeRadioButton.setText(org.openide.util.NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.normalSearchModeRadioButton.text")); // NOI18N + normalSearchModeRadioButton.setText(org.openide.util.NbBundle + .getMessage(SearchReplaceUI.class, "SearchReplaceUI.normalSearchModeRadioButton.text")); // NOI18N normalSearchModeRadioButton.addItemListener(new java.awt.event.ItemListener() { + @Override public void itemStateChanged(java.awt.event.ItemEvent evt) { normalSearchModeRadioButtonItemStateChanged(evt); } }); searchModeButtonGroup.add(regexSearchModeRadioButton); - regexSearchModeRadioButton.setText(org.openide.util.NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.regexSearchModeRadioButton.text")); // NOI18N + regexSearchModeRadioButton.setText(org.openide.util.NbBundle + .getMessage(SearchReplaceUI.class, "SearchReplaceUI.regexSearchModeRadioButton.text")); // NOI18N regexSearchModeRadioButton.addItemListener(new java.awt.event.ItemListener() { + @Override public void itemStateChanged(java.awt.event.ItemEvent evt) { regexSearchModeRadioButtonItemStateChanged(evt); } }); - caseSensitiveCheckBox.setText(org.openide.util.NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.caseSensitiveCheckBox.text")); // NOI18N + caseSensitiveCheckBox.setText(org.openide.util.NbBundle + .getMessage(SearchReplaceUI.class, "SearchReplaceUI.caseSensitiveCheckBox.text")); // NOI18N caseSensitiveCheckBox.addItemListener(new java.awt.event.ItemListener() { + @Override public void itemStateChanged(java.awt.event.ItemEvent evt) { caseSensitiveCheckBoxItemStateChanged(evt); } }); - findNextButton.setText(org.openide.util.NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.findNextButton.text")); // NOI18N + findNextButton.setText(org.openide.util.NbBundle + .getMessage(SearchReplaceUI.class, "SearchReplaceUI.findNextButton.text")); // NOI18N findNextButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { findNextButtonActionPerformed(evt); } }); - replaceButton.setText(org.openide.util.NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.replaceButton.text")); // NOI18N + replaceButton.setText(org.openide.util.NbBundle + .getMessage(SearchReplaceUI.class, "SearchReplaceUI.replaceButton.text")); // NOI18N replaceButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { replaceButtonActionPerformed(evt); } }); - replaceAllButton.setText(org.openide.util.NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.replaceAllButton.text")); // NOI18N + replaceAllButton.setText(org.openide.util.NbBundle + .getMessage(SearchReplaceUI.class, "SearchReplaceUI.replaceAllButton.text")); // NOI18N replaceAllButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { replaceAllButtonActionPerformed(evt); } }); - searchText.setText(org.openide.util.NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.searchText.text")); // NOI18N + searchText.setText( + org.openide.util.NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.searchText.text")); // NOI18N + searchText.addKeyListener(new java.awt.event.KeyAdapter() { + @Override + public void keyPressed(java.awt.event.KeyEvent evt) { + searchTextKeyPressed(evt); + } + }); - replaceText.setText(org.openide.util.NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.replaceText.text")); // NOI18N + replaceText.setText( + org.openide.util.NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.replaceText.text")); // NOI18N - resultText.setContentType(org.openide.util.NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.resultText.contentType")); // NOI18N + resultText.setContentType(org.openide.util.NbBundle + .getMessage(SearchReplaceUI.class, "SearchReplaceUI.resultText.contentType")); // NOI18N resultText.setEditable(false); scroll.setViewportView(resultText); - resultLabel.setText(org.openide.util.NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.resultLabel.text")); // NOI18N + resultLabel.setText( + org.openide.util.NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.resultLabel.text")); // NOI18N - regexReplaceCheckBox.setText(org.openide.util.NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.regexReplaceCheckBox.text")); // NOI18N + regexReplaceCheckBox.setText(org.openide.util.NbBundle + .getMessage(SearchReplaceUI.class, "SearchReplaceUI.regexReplaceCheckBox.text")); // NOI18N regexReplaceCheckBox.addItemListener(new java.awt.event.ItemListener() { + @Override public void itemStateChanged(java.awt.event.ItemEvent evt) { regexReplaceCheckBoxItemStateChanged(evt); } }); - columnsToSearchLabel.setText(org.openide.util.NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.columnsToSearchLabel.text")); // NOI18N + columnsToSearchLabel.setText(org.openide.util.NbBundle + .getMessage(SearchReplaceUI.class, "SearchReplaceUI.columnsToSearchLabel.text")); // NOI18N columnsToSearchComboBox.addItemListener(new java.awt.event.ItemListener() { + @Override public void itemStateChanged(java.awt.event.ItemEvent evt) { columnsToSearchComboBoxItemStateChanged(evt); } @@ -396,111 +461,128 @@ public void itemStateChanged(java.awt.event.ItemEvent evt) { this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jSeparator1, javax.swing.GroupLayout.DEFAULT_SIZE, 379, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(matchWholeValueCheckBox) + .addGroup(layout.createSequentialGroup() + .addComponent(normalSearchModeRadioButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(regexSearchModeRadioButton)) + .addGroup(layout.createSequentialGroup() + .addComponent(caseSensitiveCheckBox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(regexReplaceCheckBox)) + .addGroup(layout.createSequentialGroup() + .addGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(searchLabel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(replaceLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 71, + Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(searchText, javax.swing.GroupLayout.DEFAULT_SIZE, 160, + Short.MAX_VALUE) + .addComponent(replaceText, javax.swing.GroupLayout.DEFAULT_SIZE, 160, + Short.MAX_VALUE)) + .addGap(41, 41, 41))) + .addGap(0, 0, 0) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(replaceAllButton, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(replaceButton, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(findNextButton, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) + .addComponent(scroll, javax.swing.GroupLayout.DEFAULT_SIZE, 359, Short.MAX_VALUE) + .addComponent(resultLabel) + .addGroup(layout.createSequentialGroup() + .addComponent(columnsToSearchLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 164, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(columnsToSearchComboBox, 0, 185, Short.MAX_VALUE))) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(findNextButton) + .addGap(35, 35, 35) + .addComponent(replaceButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(replaceAllButton)) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(searchText, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(searchLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(replaceText, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(replaceLabel)) + .addGap(18, 18, 18) .addComponent(matchWholeValueCheckBox) - .addGroup(layout.createSequentialGroup() + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(normalSearchModeRadioButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(regexSearchModeRadioButton)) - .addGroup(layout.createSequentialGroup() + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(caseSensitiveCheckBox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(regexReplaceCheckBox)) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(searchLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(replaceLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 71, Short.MAX_VALUE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(searchText, javax.swing.GroupLayout.DEFAULT_SIZE, 160, Short.MAX_VALUE) - .addComponent(replaceText, javax.swing.GroupLayout.DEFAULT_SIZE, 160, Short.MAX_VALUE)) - .addGap(41, 41, 41))) - .addGap(0, 0, 0) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(replaceAllButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(replaceButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(findNextButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) - .addComponent(scroll, javax.swing.GroupLayout.DEFAULT_SIZE, 359, Short.MAX_VALUE) - .addComponent(resultLabel)) - .addContainerGap()) - .addComponent(jSeparator1, javax.swing.GroupLayout.DEFAULT_SIZE, 379, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(columnsToSearchLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 164, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(columnsToSearchComboBox, 0, 185, Short.MAX_VALUE) - .addContainerGap()) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(findNextButton) - .addGap(35, 35, 35) - .addComponent(replaceButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(replaceAllButton)) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(searchText, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(searchLabel)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(replaceText, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(replaceLabel)) - .addGap(18, 18, 18) - .addComponent(matchWholeValueCheckBox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(normalSearchModeRadioButton) - .addComponent(regexSearchModeRadioButton)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(caseSensitiveCheckBox) - .addComponent(regexReplaceCheckBox)))) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(columnsToSearchLabel) - .addComponent(columnsToSearchComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(resultLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(scroll, javax.swing.GroupLayout.PREFERRED_SIZE, 53, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap()) + .addComponent(regexReplaceCheckBox)))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(columnsToSearchLabel) + .addComponent(columnsToSearchComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 21, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(resultLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(scroll, javax.swing.GroupLayout.PREFERRED_SIZE, 53, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap()) ); }// //GEN-END:initComponents - private void normalSearchModeRadioButtonItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_normalSearchModeRadioButtonItemStateChanged + private void normalSearchModeRadioButtonItemStateChanged( + java.awt.event.ItemEvent evt) {//GEN-FIRST:event_normalSearchModeRadioButtonItemStateChanged refreshSearchOptions(); }//GEN-LAST:event_normalSearchModeRadioButtonItemStateChanged - private void regexSearchModeRadioButtonItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_regexSearchModeRadioButtonItemStateChanged + private void regexSearchModeRadioButtonItemStateChanged( + java.awt.event.ItemEvent evt) {//GEN-FIRST:event_regexSearchModeRadioButtonItemStateChanged refreshSearchOptions(); }//GEN-LAST:event_regexSearchModeRadioButtonItemStateChanged - private void matchWholeValueCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_matchWholeValueCheckBoxItemStateChanged + private void matchWholeValueCheckBoxItemStateChanged( + java.awt.event.ItemEvent evt) {//GEN-FIRST:event_matchWholeValueCheckBoxItemStateChanged refreshSearchOptions(); }//GEN-LAST:event_matchWholeValueCheckBoxItemStateChanged - private void caseSensitiveCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_caseSensitiveCheckBoxItemStateChanged + private void caseSensitiveCheckBoxItemStateChanged( + java.awt.event.ItemEvent evt) {//GEN-FIRST:event_caseSensitiveCheckBoxItemStateChanged refreshSearchOptions(); }//GEN-LAST:event_caseSensitiveCheckBoxItemStateChanged - private void findNextButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_findNextButtonActionPerformed - searchResult = searchReplaceController.findNext(searchOptions); - refreshSearchOptions(); - showSearchResult(); + private void findNextButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_findNextButtonActionPerformed + nextResult(); }//GEN-LAST:event_findNextButtonActionPerformed - private void replaceButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_replaceButtonActionPerformed + private void replaceButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_replaceButtonActionPerformed try { searchResult = searchReplaceController.replace(searchResult, replaceText.getText()); refreshSearchOptions(); @@ -511,45 +593,54 @@ private void replaceButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN } }//GEN-LAST:event_replaceButtonActionPerformed - private void replaceAllButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_replaceAllButtonActionPerformed + private void replaceAllButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_replaceAllButtonActionPerformed try { int replacementsCount = searchReplaceController.replaceAll(searchOptions, replaceText.getText()); searchResult = null; refreshSearchOptions(); dataTablesController.refreshCurrentTable(); - JOptionPane.showMessageDialog(null, NbBundle.getMessage(SearchReplaceUI.class, "SearchReplaceUI.replacements.count.message", replacementsCount)); + JOptionPane.showMessageDialog(null, NbBundle + .getMessage(SearchReplaceUI.class, "SearchReplaceUI.replacements.count.message", replacementsCount)); resultText.setText(""); } catch (Exception ex) { showRegexReplaceError(); } }//GEN-LAST:event_replaceAllButtonActionPerformed - private void regexReplaceCheckBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_regexReplaceCheckBoxItemStateChanged + private void regexReplaceCheckBoxItemStateChanged( + java.awt.event.ItemEvent evt) {//GEN-FIRST:event_regexReplaceCheckBoxItemStateChanged refreshSearchOptions(); }//GEN-LAST:event_regexReplaceCheckBoxItemStateChanged - private void columnsToSearchComboBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_columnsToSearchComboBoxItemStateChanged + private void columnsToSearchComboBoxItemStateChanged( + java.awt.event.ItemEvent evt) {//GEN-FIRST:event_columnsToSearchComboBoxItemStateChanged refreshSearchOptions(); }//GEN-LAST:event_columnsToSearchComboBoxItemStateChanged - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JCheckBox caseSensitiveCheckBox; - private javax.swing.JComboBox columnsToSearchComboBox; - private javax.swing.JLabel columnsToSearchLabel; - private javax.swing.JButton findNextButton; - private javax.swing.JSeparator jSeparator1; - private javax.swing.JCheckBox matchWholeValueCheckBox; - private javax.swing.JRadioButton normalSearchModeRadioButton; - private javax.swing.JCheckBox regexReplaceCheckBox; - private javax.swing.JRadioButton regexSearchModeRadioButton; - private javax.swing.JButton replaceAllButton; - private javax.swing.JButton replaceButton; - private javax.swing.JLabel replaceLabel; - private javax.swing.JTextField replaceText; - private javax.swing.JLabel resultLabel; - private javax.swing.JTextPane resultText; - private javax.swing.JScrollPane scroll; - private javax.swing.JLabel searchLabel; - private javax.swing.ButtonGroup searchModeButtonGroup; - private javax.swing.JTextField searchText; - // End of variables declaration//GEN-END:variables + + private void searchTextKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_searchTextKeyPressed + if (evt.getKeyCode() == KeyEvent.VK_ENTER) { + nextResult(); + } + }//GEN-LAST:event_searchTextKeyPressed + + public enum Mode { + + NODES_TABLE, + EDGES_TABLE + } + + class ColumnWrapper { + + Column column; + + public ColumnWrapper(Column column) { + this.column = column; + } + + @Override + public String toString() { + return column.getTitle(); + } + } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/BasicNodesManipulator.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/BasicNodesManipulator.java index 41e17a3898..98c0cccfe4 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/BasicNodesManipulator.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/BasicNodesManipulator.java @@ -39,25 +39,28 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes; import org.gephi.datalab.spi.ContextMenuItemManipulator; import org.gephi.datalab.spi.nodes.NodesManipulator; /** - * * @author Eduardo */ -public abstract class BasicNodesManipulator implements NodesManipulator{ +public abstract class BasicNodesManipulator implements NodesManipulator { + @Override public boolean isAvailable() { return true; } + @Override public ContextMenuItemManipulator[] getSubItems() { return null; } + @Override public Integer getMnemonicKey() { return null; } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ClearNodesData.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ClearNodesData.java index 00d237d136..ba4dd77242 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ClearNodesData.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ClearNodesData.java @@ -39,17 +39,18 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes; import java.util.ArrayList; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeController; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.api.datatables.DataTablesController; import org.gephi.datalab.plugin.manipulators.GeneralColumnsChooser; import org.gephi.datalab.plugin.manipulators.ui.GeneralChooseColumnsUI; import org.gephi.datalab.spi.ManipulatorUI; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.GraphController; import org.gephi.graph.api.Node; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; @@ -57,25 +58,28 @@ Development and Distribution License("CDDL") (collectively, the /** * Nodes manipulator that clears the given columns data of one or more nodes except the id and computed attributes. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -public class ClearNodesData extends BasicNodesManipulator implements GeneralColumnsChooser { +public class ClearNodesData extends BasicNodesManipulator implements GeneralColumnsChooser { private Node[] nodes; - private AttributeColumn[] columnsToClearData; + private Column[] columnsToClearData; + @Override public void setup(Node[] nodes, Node clickedNode) { this.nodes = nodes; AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); - ArrayList columnsToClearDataList = new ArrayList(); - for (AttributeColumn column : Lookup.getDefault().lookup(AttributeController.class).getModel().getNodeTable().getColumns()) { + ArrayList columnsToClearDataList = new ArrayList<>(); + for (Column column : Lookup.getDefault().lookup(GraphController.class).getGraphModel().getNodeTable()) { if (ac.canClearColumnData(column)) { columnsToClearDataList.add(column); } } - columnsToClearData = columnsToClearDataList.toArray(new AttributeColumn[0]); + columnsToClearData = columnsToClearDataList.toArray(new Column[0]); } + @Override public void execute() { if (columnsToClearData.length >= 0) { AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); @@ -84,6 +88,7 @@ public void execute() { } } + @Override public String getName() { if (nodes.length > 1) { return NbBundle.getMessage(ClearNodesData.class, "ClearNodesData.name.multiple"); @@ -92,35 +97,43 @@ public String getName() { } } + @Override public String getDescription() { return NbBundle.getMessage(ClearNodesData.class, "ClearNodesData.description"); } + @Override public boolean canExecute() { return true; } + @Override public ManipulatorUI getUI() { return new GeneralChooseColumnsUI(NbBundle.getMessage(ClearNodesData.class, "ClearNodesData.ui.description")); } + @Override public int getType() { return 200; } + @Override public int getPosition() { return 100; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/clear-data.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/clear-data.svg", false); } - public AttributeColumn[] getColumns() { + @Override + public Column[] getColumns() { return columnsToClearData; } - public void setColumns(AttributeColumn[] columnsToClearData) { + @Override + public void setColumns(Column[] columnsToClearData) { this.columnsToClearData = columnsToClearData; } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ClearNodesDataBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ClearNodesDataBuilder.java index a919d9fcb9..8ba2eff0b9 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ClearNodesDataBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ClearNodesDataBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes; import org.gephi.datalab.spi.nodes.NodesManipulator; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for ClearNodesData nodes manipulator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=NodesManipulatorBuilder.class) -public class ClearNodesDataBuilder implements NodesManipulatorBuilder{ +@ServiceProvider(service = NodesManipulatorBuilder.class) +public class ClearNodesDataBuilder implements NodesManipulatorBuilder { + @Override public NodesManipulator getNodesManipulator() { return new ClearNodesData(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/CopyNodeDataToOtherNodes.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/CopyNodeDataToOtherNodes.java index 7478f90fc8..ba2e4c1c90 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/CopyNodeDataToOtherNodes.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/CopyNodeDataToOtherNodes.java @@ -39,17 +39,19 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes; import java.util.ArrayList; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeController; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.api.datatables.DataTablesController; import org.gephi.datalab.plugin.manipulators.GeneralColumnsAndRowChooser; import org.gephi.datalab.plugin.manipulators.ui.GeneralChooseColumnsAndRowUI; import org.gephi.datalab.spi.ManipulatorUI; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.GraphController; import org.gephi.graph.api.Node; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; @@ -57,27 +59,30 @@ Development and Distribution License("CDDL") (collectively, the /** * Nodes manipulator that copies the given columns data of one node to the other selected nodes. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class CopyNodeDataToOtherNodes extends BasicNodesManipulator implements GeneralColumnsAndRowChooser { private Node clickedNode; private Node[] nodes; - private AttributeColumn[] columnsToCopyData; + private Column[] columnsToCopyData; + @Override public void setup(Node[] nodes, Node clickedNode) { this.clickedNode = clickedNode; this.nodes = nodes; AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); - ArrayList columnsToCopyDataList = new ArrayList(); - for (AttributeColumn column : Lookup.getDefault().lookup(AttributeController.class).getModel().getNodeTable().getColumns()) { + ArrayList columnsToCopyDataList = new ArrayList<>(); + for (Column column : Lookup.getDefault().lookup(GraphController.class).getGraphModel().getNodeTable()) { if (ac.canChangeColumnData(column)) { columnsToCopyDataList.add(column); } } - columnsToCopyData = columnsToCopyDataList.toArray(new AttributeColumn[0]); + columnsToCopyData = columnsToCopyDataList.toArray(new Column[0]); } + @Override public void execute() { if (columnsToCopyData.length >= 0) { AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); @@ -86,51 +91,65 @@ public void execute() { } } + @Override public String getName() { return NbBundle.getMessage(CopyNodeDataToOtherNodes.class, "CopyNodeDataToOtherNodes.name"); } + @Override public String getDescription() { return NbBundle.getMessage(CopyNodeDataToOtherNodes.class, "CopyNodeDataToOtherNodes.description"); } + @Override public boolean canExecute() { return nodes.length > 1;//At least 2 nodes to copy data from one to the other. } + @Override public ManipulatorUI getUI() { - return new GeneralChooseColumnsAndRowUI(NbBundle.getMessage(CopyNodeDataToOtherNodes.class, "CopyNodeDataToOtherNodes.ui.rowDescription"),NbBundle.getMessage(CopyNodeDataToOtherNodes.class, "CopyNodeDataToOtherNodes.ui.columnsDescription")); + return new GeneralChooseColumnsAndRowUI( + NbBundle.getMessage(CopyNodeDataToOtherNodes.class, "CopyNodeDataToOtherNodes.ui.rowDescription"), + NbBundle.getMessage(CopyNodeDataToOtherNodes.class, "CopyNodeDataToOtherNodes.ui.columnsDescription")); } + @Override public int getType() { return 200; } + @Override public int getPosition() { return 200; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/broom--arrow.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/broom--arrow.svg", false); } - public AttributeColumn[] getColumns() { + @Override + public Column[] getColumns() { return columnsToCopyData; } - public void setColumns(AttributeColumn[] columnsToClearData) { + @Override + public void setColumns(Column[] columnsToClearData) { this.columnsToCopyData = columnsToClearData; } - public Object[] getRows() { + @Override + public Element[] getRows() { return nodes; } - public Object getRow() { + @Override + public Element getRow() { return clickedNode; } - public void setRow(Object row) { - clickedNode=(Node) row; + @Override + public void setRow(Element row) { + clickedNode = (Node) row; } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/CopyNodeDataToOtherNodesBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/CopyNodeDataToOtherNodesBuilder.java index fc49fef17d..7ec67c9433 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/CopyNodeDataToOtherNodesBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/CopyNodeDataToOtherNodesBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes; import org.gephi.datalab.spi.nodes.NodesManipulator; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for CopyNodeDataToOtherNodes nodes manipulator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=NodesManipulatorBuilder.class) -public class CopyNodeDataToOtherNodesBuilder implements NodesManipulatorBuilder{ +@ServiceProvider(service = NodesManipulatorBuilder.class) +public class CopyNodeDataToOtherNodesBuilder implements NodesManipulatorBuilder { + @Override public NodesManipulator getNodesManipulator() { return new CopyNodeDataToOtherNodes(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/CopyNodes.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/CopyNodes.java index 30c4d1962d..94e7041fbe 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/CopyNodes.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/CopyNodes.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes; import javax.swing.Icon; @@ -52,17 +53,20 @@ Development and Distribution License("CDDL") (collectively, the /** * Nodes manipulator that copies one or more nodes one or more times. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class CopyNodes extends BasicNodesManipulator { private Node[] nodes; private int copies = 1; + @Override public void setup(Node[] nodes, Node clickedNode) { this.nodes = nodes; } + @Override public void execute() { GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); for (int i = 0; i < copies; i++) { @@ -70,6 +74,7 @@ public void execute() { } } + @Override public String getName() { if (nodes.length > 1) { return NbBundle.getMessage(CopyNodes.class, "CopyNodes.name.multiple"); @@ -78,28 +83,34 @@ public String getName() { } } + @Override public String getDescription() { return ""; } + @Override public boolean canExecute() { return true; } + @Override public ManipulatorUI getUI() { return new CopyNodesUI(); } + @Override public int getType() { return 500; } + @Override public int getPosition() { return 200; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/duplicate.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/duplicate.svg", false); } public int getCopies() { diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/CopyNodesBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/CopyNodesBuilder.java index 8bb817f70a..232aaf6bb8 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/CopyNodesBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/CopyNodesBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes; import org.gephi.datalab.spi.nodes.NodesManipulator; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for CopyNodes nodes manipulator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=NodesManipulatorBuilder.class) -public class CopyNodesBuilder implements NodesManipulatorBuilder{ +@ServiceProvider(service = NodesManipulatorBuilder.class) +public class CopyNodesBuilder implements NodesManipulatorBuilder { + @Override public NodesManipulator getNodesManipulator() { return new CopyNodes(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/DeleteNodes.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/DeleteNodes.java index acdc23fc3c..6770e58db4 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/DeleteNodes.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/DeleteNodes.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes; import javax.swing.Icon; @@ -52,23 +53,29 @@ Development and Distribution License("CDDL") (collectively, the /** * Nodes manipulator that deletes one or more nodes. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class DeleteNodes extends BasicNodesManipulator { private Node[] nodes; + @Override public void setup(Node[] nodes, Node clickedNode) { this.nodes = nodes; } + @Override public void execute() { - if (JOptionPane.showConfirmDialog(null, NbBundle.getMessage(DeleteNodes.class, "DeleteNodes.confirmation.message"), getName(), JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { + if (JOptionPane + .showConfirmDialog(null, NbBundle.getMessage(DeleteNodes.class, "DeleteNodes.confirmation.message"), + getName(), JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); gec.deleteNodes(nodes); } } + @Override public String getName() { if (nodes.length > 1) { return NbBundle.getMessage(DeleteNodes.class, "DeleteNodes.name.multiple"); @@ -77,27 +84,33 @@ public String getName() { } } + @Override public String getDescription() { return ""; } + @Override public boolean canExecute() { return true; } + @Override public ManipulatorUI getUI() { return null; } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 300; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/cross.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/cross.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/DeleteNodesBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/DeleteNodesBuilder.java index 87bc3f1941..e587ebca32 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/DeleteNodesBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/DeleteNodesBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes; import org.gephi.datalab.spi.nodes.NodesManipulator; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for DeleteNodes nodes manipulator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=NodesManipulatorBuilder.class) -public class DeleteNodesBuilder implements NodesManipulatorBuilder{ +@ServiceProvider(service = NodesManipulatorBuilder.class) +public class DeleteNodesBuilder implements NodesManipulatorBuilder { + @Override public NodesManipulator getNodesManipulator() { return new DeleteNodes(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/Free.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/Free.java index 66a08216b6..dc29d699a0 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/Free.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/Free.java @@ -39,11 +39,12 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes; import javax.swing.Icon; -import org.gephi.datalab.api.datatables.DataTablesController; import org.gephi.datalab.api.GraphElementsController; +import org.gephi.datalab.api.datatables.DataTablesController; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.graph.api.Node; import org.openide.util.ImageUtilities; @@ -52,24 +53,28 @@ Development and Distribution License("CDDL") (collectively, the /** * Nodes manipulator that frees (not fixed position) one or more nodes. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class Free extends BasicNodesManipulator { private Node[] nodes; private Node clickedNode; + @Override public void setup(Node[] nodes, Node clickedNode) { this.nodes = nodes; this.clickedNode = clickedNode; } + @Override public void execute() { GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); gec.setNodesFixed(nodes, false); Lookup.getDefault().lookup(DataTablesController.class).refreshCurrentTable(); } + @Override public String getName() { if (nodes.length > 1) { return NbBundle.getMessage(Settle.class, "Free.name.multiple"); @@ -78,28 +83,34 @@ public String getName() { } } + @Override public String getDescription() { return ""; } + @Override public boolean canExecute() { GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); return gec.isNodeFixed(clickedNode); } + @Override public ManipulatorUI getUI() { return null; } + @Override public int getType() { return 400; } + @Override public int getPosition() { return 100; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/free.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/free.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/FreeBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/FreeBuilder.java index 1ac3629bf0..c9936f8b15 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/FreeBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/FreeBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes; import org.gephi.datalab.spi.nodes.NodesManipulator; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for Free nodes manipulator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=NodesManipulatorBuilder.class) -public class FreeBuilder implements NodesManipulatorBuilder{ +@ServiceProvider(service = NodesManipulatorBuilder.class) +public class FreeBuilder implements NodesManipulatorBuilder { + @Override public NodesManipulator getNodesManipulator() { return new Free(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/Group.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/Group.java deleted file mode 100644 index 0c9ea49bd4..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/Group.java +++ /dev/null @@ -1,96 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.datalab.plugin.manipulators.nodes; - -import javax.swing.Icon; -import org.gephi.datalab.api.GraphElementsController; -import org.gephi.datalab.spi.ManipulatorUI; -import org.gephi.graph.api.Node; -import org.openide.util.ImageUtilities; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; - -/** - * Nodes manipulator that groups one or more nodes into a new group node hierarchically. - * @author Eduardo Ramos - */ -public class Group extends BasicNodesManipulator { - private Node[] nodes; - - public void setup(Node[] nodes, Node clickedNode) { - this.nodes=nodes; - } - - public void execute() { - GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); - gec.groupNodes(nodes); - } - - public String getName() { - return NbBundle.getMessage(Group.class, "Group.name"); - } - - public String getDescription() { - return ""; - } - - public boolean canExecute() { - GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); - return gec.canGroupNodes(nodes); - } - - public ManipulatorUI getUI() { - return null; - } - - public int getType() { - return 300; - } - - public int getPosition() { - return 0; - } - - public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/group.png", true); - } -} diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/GroupBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/GroupBuilder.java deleted file mode 100644 index 536784f053..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/GroupBuilder.java +++ /dev/null @@ -1,58 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.datalab.plugin.manipulators.nodes; - -import org.gephi.datalab.spi.nodes.NodesManipulator; -import org.gephi.datalab.spi.nodes.NodesManipulatorBuilder; -import org.openide.util.lookup.ServiceProvider; - -/** - * Builder for Group nodes manipulator. - * @author Eduardo Ramos - */ -@ServiceProvider(service=NodesManipulatorBuilder.class) -public class GroupBuilder implements NodesManipulatorBuilder{ - - public NodesManipulator getNodesManipulator() { - return new Group(); - } -} diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/LinkNodes.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/LinkNodes.java index 0fbb1daa43..b04a314aac 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/LinkNodes.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/LinkNodes.java @@ -1,139 +1,153 @@ -/* - Copyright 2008-2010 Gephi - Authors : Eduardo Ramos - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.datalab.plugin.manipulators.nodes; - -import javax.swing.Icon; -import org.gephi.datalab.api.DataLaboratoryHelper; -import org.gephi.datalab.api.GraphElementsController; -import org.gephi.datalab.plugin.manipulators.general.AddEdgeToGraph; -import org.gephi.datalab.plugin.manipulators.nodes.ui.LinkNodesUI; -import org.gephi.datalab.spi.ManipulatorUI; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.GraphModel; -import org.gephi.graph.api.Node; -import org.openide.util.ImageUtilities; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; - -/** - * Nodes manipulator that links at least 2 different nodes creating edges. Asks the user to select a source node and whether to create directed or undirected edges. It will create edges between the - * source node and all of the other nodes. - * - * @author Eduardo Ramos - */ -public class LinkNodes extends BasicNodesManipulator { - - private Node[] nodes; - private Node sourceNode; - private static boolean directed; - private static GraphModel graphModel; - - public void setup(Node[] nodes, Node clickedNode) { - this.nodes = nodes; - this.sourceNode = clickedNode;//Choose clicked node as source by default (but the user can select it or other one in the UI) - - GraphModel currentGraphModel = Lookup.getDefault().lookup(GraphController.class).getModel(); - if (graphModel != currentGraphModel) {//If graph model has changed since last execution, change default mode for edges to create in UI, else keep this parameter across calls - directed = currentGraphModel.isDirected() || currentGraphModel.isMixed();//Get graph directed state. Set to true if graph is directed or mixed - graphModel = currentGraphModel; - } - } - - public void execute() { - if (nodes.length > 1) { - GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); - gec.createEdges(sourceNode, nodes, directed); - }else{ - AddEdgeToGraph manipulator = new AddEdgeToGraph(); - manipulator.setSource(sourceNode); - DataLaboratoryHelper.getDefault().executeManipulator(manipulator); - } - } - - public String getName() { - return NbBundle.getMessage(LinkNodes.class, "LinkNodes.name"); - } - - public String getDescription() { - return NbBundle.getMessage(LinkNodes.class, "LinkNodes.description"); - } - - public boolean canExecute() { - return true; - } - - public ManipulatorUI getUI() { - return nodes.length > 1 ? new LinkNodesUI() : null;//Use link nodes UI if more than one node selected, otherwise add edge to graph action will be called in execute. - } - - public int getType() { - return 500; - } - - public int getPosition() { - return 100; - } - - public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/edge.png", true); - } - - public Node[] getNodes() { - return nodes; - } - - public Node getSourceNode() { - return sourceNode; - } - - public void setSourceNode(Node sourceNode) { - this.sourceNode = sourceNode; - } - - public boolean isDirected() { - return directed; - } - - public void setDirected(boolean directed) { - LinkNodes.directed = directed; - } -} +/* + Copyright 2008-2010 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.datalab.plugin.manipulators.nodes; + +import javax.swing.Icon; +import org.gephi.datalab.api.DataLaboratoryHelper; +import org.gephi.datalab.api.GraphElementsController; +import org.gephi.datalab.plugin.manipulators.general.AddEdgeToGraph; +import org.gephi.datalab.plugin.manipulators.nodes.ui.LinkNodesUI; +import org.gephi.datalab.spi.ManipulatorUI; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +/** + * Nodes manipulator that links at least 2 different nodes creating edges. Asks the user to select a source node and whether to create directed or undirected edges. It will create edges between the + * source node and all of the other nodes. + * + * @author Eduardo Ramos + */ +public class LinkNodes extends BasicNodesManipulator { + + private static boolean directed; + private static GraphModel graphModel; + private Node[] nodes; + private Node sourceNode; + + @Override + public void setup(Node[] nodes, Node clickedNode) { + this.nodes = nodes; + this.sourceNode = + clickedNode;//Choose clicked node as source by default (but the user can select it or other one in the UI) + + GraphModel currentGraphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); + if (graphModel != + currentGraphModel) {//If graph model has changed since last execution, change default mode for edges to create in UI, else keep this parameter across calls + directed = currentGraphModel.isDirected() || + currentGraphModel.isMixed();//Get graph directed state. Set to true if graph is directed or mixed + graphModel = currentGraphModel; + } + } + + @Override + public void execute() { + if (nodes.length > 1) { + GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); + gec.createEdges(sourceNode, nodes, directed); + } else { + AddEdgeToGraph manipulator = new AddEdgeToGraph(); + manipulator.setSource(sourceNode); + DataLaboratoryHelper.getDefault().executeManipulator(manipulator); + } + } + + @Override + public String getName() { + return NbBundle.getMessage(LinkNodes.class, "LinkNodes.name"); + } + + @Override + public String getDescription() { + return NbBundle.getMessage(LinkNodes.class, "LinkNodes.description"); + } + + @Override + public boolean canExecute() { + return true; + } + + @Override + public ManipulatorUI getUI() { + return nodes.length > 1 ? new LinkNodesUI() : + null;//Use link nodes UI if more than one node selected, otherwise add edge to graph action will be called in execute. + } + + @Override + public int getType() { + return 500; + } + + @Override + public int getPosition() { + return 100; + } + + @Override + public Icon getIcon() { + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/edge.svg", false); + } + + public Node[] getNodes() { + return nodes; + } + + public Node getSourceNode() { + return sourceNode; + } + + public void setSourceNode(Node sourceNode) { + this.sourceNode = sourceNode; + } + + public boolean isDirected() { + return directed; + } + + public void setDirected(boolean directed) { + LinkNodes.directed = directed; + } +} diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/LinkNodesBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/LinkNodesBuilder.java index 92bb5a25e7..eff02a5ba8 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/LinkNodesBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/LinkNodesBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes; import org.gephi.datalab.spi.nodes.NodesManipulator; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for LinkNodes nodes manipulator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=NodesManipulatorBuilder.class) -public class LinkNodesBuilder implements NodesManipulatorBuilder{ +@ServiceProvider(service = NodesManipulatorBuilder.class) +public class LinkNodesBuilder implements NodesManipulatorBuilder { + @Override public NodesManipulator getNodesManipulator() { return new LinkNodes(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/MergeNodes.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/MergeNodes.java index f2add1ef16..3cbca2940c 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/MergeNodes.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/MergeNodes.java @@ -39,17 +39,22 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes; +import java.util.ArrayList; +import java.util.List; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeController; import org.gephi.datalab.api.GraphElementsController; import org.gephi.datalab.api.datatables.DataTablesController; import org.gephi.datalab.plugin.manipulators.nodes.ui.MergeNodesUI; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphController; import org.gephi.graph.api.Node; +import org.gephi.graph.api.Table; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; @@ -57,7 +62,6 @@ Development and Distribution License("CDDL") (collectively, the /** *

    Nodes manipulator that merges 2 or more nodes

    - *

    * The behaviour is: *

      *
    • Merged nodes are deleted if desired, and one new node is created
    • @@ -65,59 +69,81 @@ Development and Distribution License("CDDL") (collectively, the *
    • Each column uses an strategy to reduce the rows values to one value
    • *
    • *
    - *

    - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class MergeNodes extends BasicNodesManipulator { public static final String DELETE_MERGED_NODES_SAVED_PREFERENCES = "MergeNodes_DeleteMergedNodes"; private Node[] nodes; private Node selectedNode; - private AttributeColumn[] columns; + private Column[] columns; private AttributeRowsMergeStrategy[] mergeStrategies; private boolean deleteMergedNodes; + @Override public void setup(Node[] nodes, Node clickedNode) { this.nodes = nodes; selectedNode = clickedNode != null ? clickedNode : nodes[0]; - columns = Lookup.getDefault().lookup(AttributeController.class).getModel().getNodeTable().getColumns(); + + Table nodeTable = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getNodeTable(); + List columnsList = new ArrayList<>(); + for (Column column : nodeTable) { + if (!column.isReadOnly()) { + columnsList.add(column); + } + } + + columns = columnsList.toArray(new Column[0]); + mergeStrategies = new AttributeRowsMergeStrategy[columns.length]; - deleteMergedNodes = NbPreferences.forModule(MergeNodes.class).getBoolean(DELETE_MERGED_NODES_SAVED_PREFERENCES, true); + deleteMergedNodes = + NbPreferences.forModule(MergeNodes.class).getBoolean(DELETE_MERGED_NODES_SAVED_PREFERENCES, true); } + @Override public void execute() { + Graph graph = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getGraph(); + GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); - Node newNode=gec.mergeNodes(nodes, selectedNode, mergeStrategies, deleteMergedNodes); - Lookup.getDefault().lookup(DataTablesController.class).setNodeTableSelection(new Node[]{newNode}); + Node newNode = gec.mergeNodes(graph, nodes, selectedNode, columns, mergeStrategies, deleteMergedNodes); + Lookup.getDefault().lookup(DataTablesController.class).setNodeTableSelection(new Node[] {newNode}); NbPreferences.forModule(MergeNodes.class).putBoolean(DELETE_MERGED_NODES_SAVED_PREFERENCES, deleteMergedNodes); } + @Override public String getName() { return NbBundle.getMessage(MergeNodes.class, "MergeNodes.name"); } + @Override public String getDescription() { return NbBundle.getMessage(MergeNodes.class, "MergeNodes.description"); } + @Override public boolean canExecute() { return nodes.length > 1; } + @Override public ManipulatorUI getUI() { return new MergeNodesUI(); } + @Override public int getType() { return 500; } + @Override public int getPosition() { return 0; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/merge.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/merge.svg", false); } public boolean isDeleteMergedNodes() { @@ -140,7 +166,7 @@ public void setSelectedNode(Node selectedNode) { this.selectedNode = selectedNode; } - public AttributeColumn[] getColumns() { + public Column[] getColumns() { return columns; } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/MergeNodesBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/MergeNodesBuilder.java index da3d73b2cb..ba9df9ec89 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/MergeNodesBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/MergeNodesBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes; import org.gephi.datalab.spi.nodes.NodesManipulator; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for MergeNodes nodes manipulator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=NodesManipulatorBuilder.class) -public class MergeNodesBuilder implements NodesManipulatorBuilder{ +@ServiceProvider(service = NodesManipulatorBuilder.class) +public class MergeNodesBuilder implements NodesManipulatorBuilder { + @Override public NodesManipulator getNodesManipulator() { return new MergeNodes(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/MoveNodeToGroup.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/MoveNodeToGroup.java deleted file mode 100644 index 7ba48fd490..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/MoveNodeToGroup.java +++ /dev/null @@ -1,130 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.datalab.plugin.manipulators.nodes; - -import javax.swing.Icon; -import org.gephi.datalab.api.GraphElementsController; -import org.gephi.datalab.plugin.manipulators.nodes.ui.MoveNodeToGroupUI; -import org.gephi.datalab.spi.ManipulatorUI; -import org.gephi.graph.api.Node; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; - -/** - * Nodes manipulator that moves one or more nodes to a group. It shows an UI to select 1 of the available groups. - * @author Eduardo Ramos - */ -public class MoveNodeToGroup extends BasicNodesManipulator { - - private Node[] nodes; - private Node[] availableGroupsToMoveNodes; - private Node group=null; - - public void setup(Node[] nodes, Node clickedNode) { - this.nodes = nodes; - } - - public void execute() { - if (group != null) { - GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); - gec.moveNodesToGroup(nodes, group); - } - } - - public String getName() { - if (nodes.length > 1) { - return NbBundle.getMessage(MoveNodeToGroup.class, "MoveNodeToGroup.name.multiple"); - } else { - return NbBundle.getMessage(MoveNodeToGroup.class, "MoveNodeToGroup.name.single"); - } - } - - public String getDescription() { - return ""; - } - - /** - * Can group nodes so it can be all moved to a group (at least 1 available) - */ - public boolean canExecute() { - GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); - boolean canGroup = gec.canGroupNodes(nodes); - if (canGroup) { - availableGroupsToMoveNodes = gec.getAvailableGroupsToMoveNodes(nodes); - return availableGroupsToMoveNodes != null && availableGroupsToMoveNodes.length > 0; - } else { - return false; - } - } - - public ManipulatorUI getUI() { - return new MoveNodeToGroupUI(); - } - - public int getType() { - return 300; - } - - public int getPosition() { - return 300; - } - - public Icon getIcon() { - return null; - } - - public Node[] getAvailableGroupsToMoveNodes() { - return availableGroupsToMoveNodes; - } - - public void setAvailableGroupsToMoveNodes(Node[] availableGroupsToMoveNodes) { - this.availableGroupsToMoveNodes = availableGroupsToMoveNodes; - } - - public Node getGroup() { - return group; - } - - public void setGroup(Node group) { - this.group = group; - } -} diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/MoveNodeToGroupBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/MoveNodeToGroupBuilder.java deleted file mode 100644 index 715160b62c..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/MoveNodeToGroupBuilder.java +++ /dev/null @@ -1,58 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.datalab.plugin.manipulators.nodes; - -import org.gephi.datalab.spi.nodes.NodesManipulator; -import org.gephi.datalab.spi.nodes.NodesManipulatorBuilder; -import org.openide.util.lookup.ServiceProvider; - -/** - * Builder for RemoveNodeFromGroup nodes manipulator. - * @author Eduardo Ramos - */ -@ServiceProvider(service=NodesManipulatorBuilder.class) -public class MoveNodeToGroupBuilder implements NodesManipulatorBuilder{ - - public NodesManipulator getNodesManipulator() { - return new MoveNodeToGroup(); - } -} diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/OpenInEditNodeWindow.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/OpenInEditNodeWindow.java index ffb4222d4f..b2c92ca409 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/OpenInEditNodeWindow.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/OpenInEditNodeWindow.java @@ -39,34 +39,39 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes; import javax.swing.Icon; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.graph.api.Node; -import org.gephi.tools.api.EditWindowController; +import org.gephi.desktop.attributes.api.AttributesUIController; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; /** * Opens the selected node(s) one or various in Edit window. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class OpenInEditNodeWindow extends BasicNodesManipulator { private Node[] nodes; + @Override public void setup(Node[] nodes, Node clickedNode) { this.nodes = nodes; } + @Override public void execute() { - EditWindowController edc = Lookup.getDefault().lookup(EditWindowController.class); - edc.openEditWindow(); + AttributesUIController edc = Lookup.getDefault().lookup(AttributesUIController.class); + edc.openWindowAndRequestActive(); edc.editNodes(nodes); } + @Override public String getName() { if (nodes.length > 1) { return NbBundle.getMessage(OpenInEditNodeWindow.class, "OpenInEditNodeWindow.name.multiple"); @@ -75,6 +80,7 @@ public String getName() { } } + @Override public String getDescription() { if (nodes.length > 1) { return NbBundle.getMessage(OpenInEditNodeWindow.class, "OpenInEditNodeWindow.description.multiple"); @@ -83,23 +89,28 @@ public String getDescription() { } } + @Override public boolean canExecute() { return true; } + @Override public ManipulatorUI getUI() { return null; } + @Override public int getType() { return 0; } + @Override public int getPosition() { return 0; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/edit.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/edit.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/OpenInEditNodeWindowBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/OpenInEditNodeWindowBuilder.java index e773015e18..e5a0969ec2 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/OpenInEditNodeWindowBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/OpenInEditNodeWindowBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes; import org.gephi.datalab.spi.nodes.NodesManipulator; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for ClearNodesData nodes manipulator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=NodesManipulatorBuilder.class) -public class OpenInEditNodeWindowBuilder implements NodesManipulatorBuilder{ +@ServiceProvider(service = NodesManipulatorBuilder.class) +public class OpenInEditNodeWindowBuilder implements NodesManipulatorBuilder { + @Override public NodesManipulator getNodesManipulator() { return new OpenInEditNodeWindow(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/RemoveNodeFromGroup.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/RemoveNodeFromGroup.java deleted file mode 100644 index fa80d82bf8..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/RemoveNodeFromGroup.java +++ /dev/null @@ -1,105 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.datalab.plugin.manipulators.nodes; - -import javax.swing.Icon; -import org.gephi.datalab.api.GraphElementsController; -import org.gephi.datalab.spi.ManipulatorUI; -import org.gephi.graph.api.Node; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; - -/** - * Nodes manipulator that removes a node from its group if it has one. If the last node of the group is removed, breaks the group. - * @author Eduardo Ramos - */ -public class RemoveNodeFromGroup extends BasicNodesManipulator { - - private Node[] nodes; - - public void setup(Node[] nodes, Node clickedNode) { - this.nodes = nodes; - } - - public void execute() { - GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); - gec.removeNodesFromGroup(nodes);//At least 1 node is in a group. And we don't have to check now every node because the removeNodesFromGroup method does it for us. - } - - public String getName() { - if(nodes.length>1){ - return NbBundle.getMessage(RemoveNodeFromGroup.class, "RemoveNodeFromGroup.name.multiple"); - }else{ - return NbBundle.getMessage(RemoveNodeFromGroup.class, "RemoveNodeFromGroup.name.single"); - } - } - - public String getDescription() { - return ""; - } - - public boolean canExecute() { - GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); - for (Node n : nodes) { - if (gec.isNodeInGroup(n)) { - return true;//If any of the nodes can be removed from its group, then allow to execute this action. - } - } - return false; - } - - public ManipulatorUI getUI() { - return null; - } - - public int getType() { - return 300; - } - - public int getPosition() { - return 400; - } - - public Icon getIcon() { - return null; - } -} diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/RemoveNodeFromGroupBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/RemoveNodeFromGroupBuilder.java deleted file mode 100644 index c613c3ac24..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/RemoveNodeFromGroupBuilder.java +++ /dev/null @@ -1,58 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.datalab.plugin.manipulators.nodes; - -import org.gephi.datalab.spi.nodes.NodesManipulator; -import org.gephi.datalab.spi.nodes.NodesManipulatorBuilder; -import org.openide.util.lookup.ServiceProvider; - -/** - * Builder for RemoveNodeFromGroup nodes manipulator. - * @author Eduardo Ramos - */ -@ServiceProvider(service=NodesManipulatorBuilder.class) -public class RemoveNodeFromGroupBuilder implements NodesManipulatorBuilder{ - - public NodesManipulator getNodesManipulator() { - return new RemoveNodeFromGroup(); - } -} diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SelectEdgesOnTable.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SelectEdgesOnTable.java index dab4f6e969..8af888ab10 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SelectEdgesOnTable.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SelectEdgesOnTable.java @@ -39,11 +39,12 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes; import javax.swing.Icon; -import org.gephi.datalab.api.datatables.DataTablesController; import org.gephi.datalab.api.GraphElementsController; +import org.gephi.datalab.api.datatables.DataTablesController; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.graph.api.Edge; import org.gephi.graph.api.Node; @@ -53,13 +54,15 @@ Development and Distribution License("CDDL") (collectively, the /** * Nodes manipulator that selects in edges table all edges that have a node. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class SelectEdgesOnTable extends BasicNodesManipulator { private Node node; private Edge[] edges; + @Override public void setup(Node[] nodes, Node clickedNode) { this.node = clickedNode; if (Lookup.getDefault().lookup(GraphElementsController.class).isNodeInGraph(node)) { @@ -67,37 +70,46 @@ public void setup(Node[] nodes, Node clickedNode) { } } + @Override public void execute() { DataTablesController dtc = Lookup.getDefault().lookup(DataTablesController.class); dtc.setEdgeTableSelection(edges); dtc.selectEdgesTable(); } + @Override public String getName() { return NbBundle.getMessage(SelectEdgesOnTable.class, "SelectEdgesOnTable.name"); } + @Override public String getDescription() { return ""; } + @Override public boolean canExecute() { - return edges!=null;//Do not enable if the node has no edges. + return edges != null;//Do not enable if the node has no edges. } + @Override public ManipulatorUI getUI() { return null; } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 200; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/table-select-row.png", true); + return ImageUtilities + .loadImageIcon("DataLaboratoryPlugin/table-select-row.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SelectEdgesOnTableBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SelectEdgesOnTableBuilder.java index c75245475c..0b9b431bb2 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SelectEdgesOnTableBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SelectEdgesOnTableBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes; @@ -48,11 +49,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for SelectEdgesOnTable nodes manipulator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=NodesManipulatorBuilder.class) -public class SelectEdgesOnTableBuilder implements NodesManipulatorBuilder{ +@ServiceProvider(service = NodesManipulatorBuilder.class) +public class SelectEdgesOnTableBuilder implements NodesManipulatorBuilder { + @Override public NodesManipulator getNodesManipulator() { return new SelectEdgesOnTable(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SelectNeighboursOnTable.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SelectNeighboursOnTable.java index bda243bf46..07d7aa5e89 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SelectNeighboursOnTable.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SelectNeighboursOnTable.java @@ -39,11 +39,12 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes; import javax.swing.Icon; -import org.gephi.datalab.api.datatables.DataTablesController; import org.gephi.datalab.api.GraphElementsController; +import org.gephi.datalab.api.datatables.DataTablesController; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.graph.api.Node; import org.openide.util.ImageUtilities; @@ -52,12 +53,14 @@ Development and Distribution License("CDDL") (collectively, the /** * Nodes manipulator that selects in nodes table all neighbours of a node. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -public class SelectNeighboursOnTable extends BasicNodesManipulator{ +public class SelectNeighboursOnTable extends BasicNodesManipulator { private Node node; private Node[] neighbours; + @Override public void setup(Node[] nodes, Node clickedNode) { this.node = clickedNode; if (Lookup.getDefault().lookup(GraphElementsController.class).isNodeInGraph(node)) { @@ -65,35 +68,44 @@ public void setup(Node[] nodes, Node clickedNode) { } } + @Override public void execute() { Lookup.getDefault().lookup(DataTablesController.class).setNodeTableSelection(neighbours); } + @Override public String getName() { return NbBundle.getMessage(SelectNeighboursOnTable.class, "SelectNeighboursOnTable.name"); } + @Override public String getDescription() { return ""; } + @Override public boolean canExecute() { return neighbours != null;//Do not enable if the node has no neighbours. } + @Override public ManipulatorUI getUI() { return null; } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 100; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/table-select-row.png", true); + return ImageUtilities + .loadImageIcon("DataLaboratoryPlugin/table-select-row.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SelectNeighboursOnTableBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SelectNeighboursOnTableBuilder.java index d325308f68..5f510b9a9f 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SelectNeighboursOnTableBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SelectNeighboursOnTableBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes; import org.gephi.datalab.spi.nodes.NodesManipulator; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for SelectNeighboursOnTable nodes manipulator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=NodesManipulatorBuilder.class) -public class SelectNeighboursOnTableBuilder implements NodesManipulatorBuilder{ +@ServiceProvider(service = NodesManipulatorBuilder.class) +public class SelectNeighboursOnTableBuilder implements NodesManipulatorBuilder { + @Override public NodesManipulator getNodesManipulator() { return new SelectNeighboursOnTable(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SelectOnGraph.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SelectOnGraph.java index ecf468ddf7..2c7c2642f5 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SelectOnGraph.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SelectOnGraph.java @@ -39,55 +39,75 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes; import javax.swing.Icon; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.graph.api.Node; -import org.gephi.visualization.VizController; +import org.gephi.visualization.api.VisualizationController; import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; import org.openide.util.NbBundle; /** - * Nodes manipulator that centers the graph view to show a node. - * @author Eduardo Ramos + * Nodes manipulator that centers the graph view to show a node and selects one or more nodes. + * + * @author Eduardo Ramos */ public class SelectOnGraph extends BasicNodesManipulator { - private Node node; + private Node[] nodes; + private Node clickedNode; + + @Override public void setup(Node[] nodes, Node clickedNode) { - this.node=clickedNode; + this.nodes = nodes; + this.clickedNode = clickedNode; } + @Override public void execute() { - VizController.getInstance().getSelectionManager().centerOnNode(node); + VisualizationController vc = Lookup.getDefault().lookup(VisualizationController.class); + if (vc != null) { + vc.selectNodes(nodes); + vc.centerOnNode(clickedNode); + } } + @Override public String getName() { return NbBundle.getMessage(SelectOnGraph.class, "SelectOnGraph.name"); } + @Override public String getDescription() { return ""; } + @Override public boolean canExecute() { return true; } + @Override public ManipulatorUI getUI() { return null; } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 0; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/magnifier--arrow.png", true); + return ImageUtilities + .loadImageIcon("DataLaboratoryPlugin/magnifier--arrow.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SelectOnGraphBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SelectOnGraphBuilder.java index 8732f918a3..2025f5cb04 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SelectOnGraphBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SelectOnGraphBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes; import org.gephi.datalab.spi.nodes.NodesManipulator; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for SelectOnGraph nodes manipulator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=NodesManipulatorBuilder.class) -public class SelectOnGraphBuilder implements NodesManipulatorBuilder{ +@ServiceProvider(service = NodesManipulatorBuilder.class) +public class SelectOnGraphBuilder implements NodesManipulatorBuilder { + @Override public NodesManipulator getNodesManipulator() { return new SelectOnGraph(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SetNodesSize.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SetNodesSize.java index c06335f497..ffad1691e7 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SetNodesSize.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SetNodesSize.java @@ -1,44 +1,45 @@ /* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. + Copyright 2008-2010 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes; import javax.swing.Icon; @@ -50,24 +51,28 @@ Development and Distribution License("CDDL") (collectively, the /** * Nodes manipulator that sets a given size for all the selected nodes. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class SetNodesSize extends BasicNodesManipulator { private Node[] nodes; private float size = 1.0f; + @Override public void setup(Node[] nodes, Node clickedNode) { this.nodes = nodes; - size=clickedNode.getNodeData().getSize();//Show size of the clicked node in UI + size = clickedNode.size();//Show size of the clicked node in UI } + @Override public void execute() { - for(Node node:nodes){ - node.getNodeData().setSize(size); + for (Node node : nodes) { + node.setSize(size); } } + @Override public String getName() { if (nodes.length > 1) { return NbBundle.getMessage(SetNodesSize.class, "SetNodesSize.name.multiple"); @@ -76,28 +81,34 @@ public String getName() { } } + @Override public String getDescription() { return ""; } + @Override public boolean canExecute() { return true; } + @Override public ManipulatorUI getUI() { return new SetNodesSizeUI(); } + @Override public int getType() { return 400; } + @Override public int getPosition() { return 2112;//We are the priests of the temples of syrinx! } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/size.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/size.svg", false); } public float getSize() { diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SetNodesSizeBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SetNodesSizeBuilder.java index 350e328753..4dc0ab23fe 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SetNodesSizeBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SetNodesSizeBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes; import org.gephi.datalab.spi.nodes.NodesManipulator; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for SetNodesSize nodes manipulator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=NodesManipulatorBuilder.class) -public class SetNodesSizeBuilder implements NodesManipulatorBuilder{ +@ServiceProvider(service = NodesManipulatorBuilder.class) +public class SetNodesSizeBuilder implements NodesManipulatorBuilder { + @Override public NodesManipulator getNodesManipulator() { return new SetNodesSize(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/Settle.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/Settle.java index ea354fdc86..35fe20874c 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/Settle.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/Settle.java @@ -39,11 +39,12 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes; import javax.swing.Icon; -import org.gephi.datalab.api.datatables.DataTablesController; import org.gephi.datalab.api.GraphElementsController; +import org.gephi.datalab.api.datatables.DataTablesController; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.graph.api.Node; import org.openide.util.ImageUtilities; @@ -52,24 +53,28 @@ Development and Distribution License("CDDL") (collectively, the /** * Nodes manipulator that settles (fixed position) one or more nodes. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class Settle extends BasicNodesManipulator { private Node[] nodes; private Node clickedNode; + @Override public void setup(Node[] nodes, Node clickedNode) { this.nodes = nodes; - this.clickedNode=clickedNode; + this.clickedNode = clickedNode; } + @Override public void execute() { GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); gec.setNodesFixed(nodes, true); Lookup.getDefault().lookup(DataTablesController.class).refreshCurrentTable(); } + @Override public String getName() { if (nodes.length > 1) { return NbBundle.getMessage(Settle.class, "Settle.name.multiple"); @@ -78,28 +83,34 @@ public String getName() { } } + @Override public String getDescription() { return ""; } + @Override public boolean canExecute() { GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); return !gec.isNodeFixed(clickedNode); } + @Override public ManipulatorUI getUI() { return null; } + @Override public int getType() { return 400; } + @Override public int getPosition() { return 0; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/settle.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/settle.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SettleBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SettleBuilder.java index 8096262f83..d9719aa22d 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SettleBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/SettleBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes; import org.gephi.datalab.spi.nodes.NodesManipulator; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for Settle nodes manipulator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=NodesManipulatorBuilder.class) -public class SettleBuilder implements NodesManipulatorBuilder{ +@ServiceProvider(service = NodesManipulatorBuilder.class) +public class SettleBuilder implements NodesManipulatorBuilder { + @Override public NodesManipulator getNodesManipulator() { return new Settle(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/Ungroup.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/Ungroup.java deleted file mode 100644 index dc47bc8831..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/Ungroup.java +++ /dev/null @@ -1,106 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.datalab.plugin.manipulators.nodes; - -import javax.swing.Icon; -import org.gephi.datalab.api.GraphElementsController; -import org.gephi.datalab.spi.ManipulatorUI; -import org.gephi.graph.api.Node; -import org.openide.util.ImageUtilities; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; - -/** - * Nodes manipulator that breaks one or more selected groups. - * @author Eduardo Ramos - */ -public class Ungroup extends BasicNodesManipulator { - - private Node[] nodes; - - public void setup(Node[] nodes, Node clickedNode) { - this.nodes = nodes; - } - - public void execute() { - GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); - gec.ungroupNodes(nodes);//At least 1 node is a group. And we don't have to check now every node because the ungroupNodes method does it for us. - } - - public String getName() { - if (nodes.length > 1) { - return NbBundle.getMessage(Ungroup.class, "Ungroup.name.multiple"); - } else { - return NbBundle.getMessage(Ungroup.class, "Ungroup.name.single"); - } - } - - public String getDescription() { - return ""; - } - - public boolean canExecute() { - GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); - for (Node n : nodes) { - if (gec.canUngroupNode(n)) { - return true;//If any of the nodes can be ungrouped, then allow to execute this action. - } - } - return false; - } - - public ManipulatorUI getUI() { - return null; - } - - public int getType() { - return 300; - } - - public int getPosition() { - return 100; - } - - public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/ungroup.png", true); - } -} diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/UngroupBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/UngroupBuilder.java deleted file mode 100644 index 1fd2c2b963..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/UngroupBuilder.java +++ /dev/null @@ -1,59 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.datalab.plugin.manipulators.nodes; - -import org.gephi.datalab.spi.nodes.NodesManipulator; -import org.gephi.datalab.spi.nodes.NodesManipulatorBuilder; -import org.openide.util.lookup.ServiceProvider; - -/** - * Builder for Ungroup nodes manipulator. - * @author Eduardo Ramos - */ -@ServiceProvider(service=NodesManipulatorBuilder.class) -public class UngroupBuilder implements NodesManipulatorBuilder{ - - public NodesManipulator getNodesManipulator() { - return new Ungroup(); - } - -} diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/UngroupRecursively.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/UngroupRecursively.java deleted file mode 100644 index 80bfaac6dd..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/UngroupRecursively.java +++ /dev/null @@ -1,106 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.datalab.plugin.manipulators.nodes; - -import javax.swing.Icon; -import org.gephi.datalab.api.GraphElementsController; -import org.gephi.datalab.spi.ManipulatorUI; -import org.gephi.graph.api.Node; -import org.openide.util.ImageUtilities; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; - -/** - * Nodes manipulator that breaks one or more selected groups recursively, breaking all groups formed by descendant nodes of the groups. - * @author Eduardo Ramos - */ -public class UngroupRecursively extends BasicNodesManipulator{ - - private Node[] nodes; - - public void setup(Node[] nodes, Node clickedNode) { - this.nodes = nodes; - } - - public void execute() { - GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); - gec.ungroupNodesRecursively(nodes);//At least 1 node is a group. And we don't have to check now every node because the ungroupNodesRecursively method does it for us. - } - - public String getName() { - if (nodes.length > 1) { - return NbBundle.getMessage(Ungroup.class, "UngroupRecursively.name.multiple"); - } else { - return NbBundle.getMessage(Ungroup.class, "UngroupRecursively.name.single"); - } - } - - public String getDescription() { - return NbBundle.getMessage(Ungroup.class, "UngroupRecursively.description"); - } - - public boolean canExecute() { - GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); - for (Node n : nodes) { - if (gec.canUngroupNode(n)) { - return true;//If any of the nodes can be ungrouped, then allow to execute this action. - } - } - return false; - } - - public ManipulatorUI getUI() { - return null; - } - - public int getType() { - return 300; - } - - public int getPosition() { - return 200; - } - - public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/ungroup.png", true); - } -} diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/UngroupRecursivelyBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/UngroupRecursivelyBuilder.java deleted file mode 100644 index e81ca9c47d..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/UngroupRecursivelyBuilder.java +++ /dev/null @@ -1,59 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.datalab.plugin.manipulators.nodes; - -import org.gephi.datalab.spi.nodes.NodesManipulator; -import org.gephi.datalab.spi.nodes.NodesManipulatorBuilder; -import org.openide.util.lookup.ServiceProvider; - -/** - * Builder for UngroupRecursively nodes manipulator. - * @author Eduardo Ramos - */ -@ServiceProvider(service=NodesManipulatorBuilder.class) -public class UngroupRecursivelyBuilder implements NodesManipulatorBuilder{ - - public NodesManipulator getNodesManipulator() { - return new UngroupRecursively(); - } - -} diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/CopyNodesUI.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/CopyNodesUI.java index 3b5d65a50d..15fc5fc557 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/CopyNodesUI.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/CopyNodesUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes.ui; import javax.swing.JFormattedTextField; @@ -52,13 +53,20 @@ Development and Distribution License("CDDL") (collectively, the /** * UI for CopyNodes nodes manipulator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class CopyNodesUI extends javax.swing.JPanel implements ManipulatorUI { private CopyNodes manipulator; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JSpinner copiesSpinner; + private javax.swing.JLabel descriptionLabel; + // End of variables declaration//GEN-END:variables - /** Creates new form CopyNodesUI */ + /** + * Creates new form CopyNodesUI + */ public CopyNodesUI() { initComponents(); copiesSpinner.setModel(new SpinnerNumberModel(1, 1, 100, 1));//Min: 1, Max:500 @@ -66,28 +74,34 @@ public CopyNodesUI() { spinnerText.setEditable(false);//Not editable with keyboard } + @Override public void setup(Manipulator m, DialogControls dialogControls) { this.manipulator = (CopyNodes) m; copiesSpinner.setValue(manipulator.getCopies()); } + @Override public void unSetup() { manipulator.setCopies((Integer) copiesSpinner.getValue()); } + @Override public String getDisplayName() { return manipulator.getName(); } + @Override public JPanel getSettingsPanel() { return this; } + @Override public boolean isModal() { return true; } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -100,31 +114,32 @@ private void initComponents() { copiesSpinner = new javax.swing.JSpinner(); descriptionLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - descriptionLabel.setText(org.openide.util.NbBundle.getMessage(CopyNodesUI.class, "CopyNodesUI.descriptionLabel.text")); // NOI18N + descriptionLabel.setText( + org.openide.util.NbBundle.getMessage(CopyNodesUI.class, "CopyNodesUI.descriptionLabel.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(descriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(copiesSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(descriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 160, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(copiesSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 58, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(descriptionLabel) - .addComponent(copiesSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(descriptionLabel) + .addComponent(copiesSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JSpinner copiesSpinner; - private javax.swing.JLabel descriptionLabel; - // End of variables declaration//GEN-END:variables } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/LinkNodesUI.form b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/LinkNodesUI.form index 15c9303d11..8661ec4668 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/LinkNodesUI.form +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/LinkNodesUI.form @@ -1,4 +1,4 @@ - + @@ -23,7 +23,7 @@ - + diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/LinkNodesUI.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/LinkNodesUI.java index d9acb2f89c..01898a7904 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/LinkNodesUI.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/LinkNodesUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes.ui; import javax.swing.JPanel; @@ -50,55 +51,73 @@ Development and Distribution License("CDDL") (collectively, the /** * UI for LinkNodes nodes manipulator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class LinkNodesUI extends javax.swing.JPanel implements ManipulatorUI { private LinkNodes manipulator; private Node[] nodes; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel descriptionLabel; + private javax.swing.JRadioButton directedEdge; + private javax.swing.ButtonGroup edgeTypeButtonGroup; + private javax.swing.JLabel edgeTypeLabel; + private javax.swing.JComboBox sourceNodeComboBox; + private javax.swing.JLabel sourceNodeLabel; + private javax.swing.JRadioButton undirectedEdge; + // End of variables declaration//GEN-END:variables - /** Creates new form LinkNodesUI */ + /** + * Creates new form LinkNodesUI + */ public LinkNodesUI() { initComponents(); } + @Override public void setup(Manipulator m, DialogControls dialogControls) { manipulator = (LinkNodes) m; nodes = manipulator.getNodes(); - if(manipulator.isDirected()){ + if (manipulator.isDirected()) { directedEdge.setSelected(true); - }else{ + } else { undirectedEdge.setSelected(true); } Node sourceNode = manipulator.getSourceNode(); //Prepare combo box with nodes data: for (int i = 0; i < nodes.length; i++) { - sourceNodeComboBox.addItem(nodes[i].getId() + " - " + nodes[i].getNodeData().getLabel()); + sourceNodeComboBox.addItem(nodes[i].getId() + " - " + nodes[i].getLabel()); if (nodes[i] == sourceNode) { sourceNodeComboBox.setSelectedIndex(i); } } } + @Override public void unSetup() { manipulator.setSourceNode(nodes[sourceNodeComboBox.getSelectedIndex()]); manipulator.setDirected(directedEdge.isSelected()); } + @Override public String getDisplayName() { return manipulator.getName(); } + @Override public JPanel getSettingsPanel() { return this; } + @Override public boolean isModal() { return true; } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -115,63 +134,63 @@ private void initComponents() { sourceNodeLabel = new javax.swing.JLabel(); edgeTypeLabel = new javax.swing.JLabel(); - descriptionLabel.setText(org.openide.util.NbBundle.getMessage(LinkNodesUI.class, "LinkNodesUI.descriptionLabel.text")); // NOI18N + descriptionLabel.setText( + org.openide.util.NbBundle.getMessage(LinkNodesUI.class, "LinkNodesUI.descriptionLabel.text")); // NOI18N edgeTypeButtonGroup.add(directedEdge); - directedEdge.setText(org.openide.util.NbBundle.getMessage(LinkNodesUI.class, "LinkNodesUI.directedEdge.text")); // NOI18N + directedEdge.setText( + org.openide.util.NbBundle.getMessage(LinkNodesUI.class, "LinkNodesUI.directedEdge.text")); // NOI18N edgeTypeButtonGroup.add(undirectedEdge); - undirectedEdge.setText(org.openide.util.NbBundle.getMessage(LinkNodesUI.class, "LinkNodesUI.undirectedEdge.text")); // NOI18N + undirectedEdge.setText( + org.openide.util.NbBundle.getMessage(LinkNodesUI.class, "LinkNodesUI.undirectedEdge.text")); // NOI18N - sourceNodeLabel.setText(org.openide.util.NbBundle.getMessage(LinkNodesUI.class, "LinkNodesUI.sourceNodeLabel.text")); // NOI18N + sourceNodeLabel.setText( + org.openide.util.NbBundle.getMessage(LinkNodesUI.class, "LinkNodesUI.sourceNodeLabel.text")); // NOI18N - edgeTypeLabel.setText(org.openide.util.NbBundle.getMessage(LinkNodesUI.class, "LinkNodesUI.edgeTypeLabel.text")); // NOI18N + edgeTypeLabel.setText( + org.openide.util.NbBundle.getMessage(LinkNodesUI.class, "LinkNodesUI.edgeTypeLabel.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 242, Short.MAX_VALUE) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(sourceNodeLabel) - .addComponent(edgeTypeLabel)) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(directedEdge) - .addGap(18, 18, 18) - .addComponent(undirectedEdge)) - .addComponent(sourceNodeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE)))) - .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 242, Short.MAX_VALUE) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(sourceNodeLabel) + .addComponent(edgeTypeLabel)) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(directedEdge) + .addGap(18, 18, 18) + .addComponent(undirectedEdge)) + .addComponent(sourceNodeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 160, + javax.swing.GroupLayout.PREFERRED_SIZE)))) + .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(descriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 51, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(5, 5, 5) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(sourceNodeLabel) - .addComponent(sourceNodeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(directedEdge, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(undirectedEdge) - .addComponent(edgeTypeLabel)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(descriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 51, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(5, 5, 5) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(sourceNodeLabel) + .addComponent(sourceNodeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(directedEdge, javax.swing.GroupLayout.PREFERRED_SIZE, 23, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(undirectedEdge) + .addComponent(edgeTypeLabel)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JLabel descriptionLabel; - private javax.swing.JRadioButton directedEdge; - private javax.swing.ButtonGroup edgeTypeButtonGroup; - private javax.swing.JLabel edgeTypeLabel; - private javax.swing.JComboBox sourceNodeComboBox; - private javax.swing.JLabel sourceNodeLabel; - private javax.swing.JRadioButton undirectedEdge; - // End of variables declaration//GEN-END:variables } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/MergeNodesUI.form b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/MergeNodesUI.form index b88cb20c46..e3ecb1febe 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/MergeNodesUI.form +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/MergeNodesUI.form @@ -1,4 +1,4 @@ - + diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/MergeNodesUI.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/MergeNodesUI.java index 4e1a65201b..827354815f 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/MergeNodesUI.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/MergeNodesUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes.ui; import java.awt.event.ActionEvent; @@ -54,14 +55,13 @@ Development and Distribution License("CDDL") (collectively, the import javax.swing.JLabel; import javax.swing.JPanel; import net.miginfocom.swing.MigLayout; -import org.gephi.data.attributes.api.AttributeColumn; import org.gephi.datalab.api.DataLaboratoryHelper; import org.gephi.datalab.plugin.manipulators.nodes.MergeNodes; import org.gephi.datalab.spi.DialogControls; import org.gephi.datalab.spi.Manipulator; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; -import org.gephi.graph.api.Attributes; +import org.gephi.graph.api.Column; import org.gephi.graph.api.Node; import org.gephi.ui.components.richtooltip.RichTooltip; import org.openide.util.ImageUtilities; @@ -69,44 +69,56 @@ Development and Distribution License("CDDL") (collectively, the public final class MergeNodesUI extends JPanel implements ManipulatorUI { - private static final ImageIcon CONFIG_BUTTONS_ICON = ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/gear.png", true); - private static final ImageIcon INFO_LABELS_ICON = ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/information.png", true); + private static final ImageIcon CONFIG_BUTTONS_ICON = + ImageUtilities.loadImageIcon("DataLaboratoryPlugin/gear.svg", false); + private static final ImageIcon INFO_LABELS_ICON = + ImageUtilities.loadImageIcon("DataLaboratoryPlugin/information.png", false); private MergeNodes manipulator; private JCheckBox deleteMergedNodesCheckBox; private JComboBox nodesComboBox; private Node[] nodes; - private Attributes[] rows; private StrategyComboBox[] strategiesComboBoxes; private StrategyConfigurationButton[] strategiesConfigurationButtons; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JScrollPane scroll; + // End of variables declaration//GEN-END:variables - /** Creates new form MergeNodesUI */ + /** + * Creates new form MergeNodesUI + */ public MergeNodesUI() { initComponents(); } + @Override public void setup(Manipulator m, DialogControls dialogControls) { manipulator = (MergeNodes) m; loadSettings(); } + @Override public void unSetup() { manipulator.setDeleteMergedNodes(deleteMergedNodesCheckBox.isSelected()); manipulator.setSelectedNode(nodes[nodesComboBox.getSelectedIndex()]); AttributeRowsMergeStrategy[] chosenStrategies = new AttributeRowsMergeStrategy[strategiesComboBoxes.length]; for (int i = 0; i < strategiesComboBoxes.length; i++) { - chosenStrategies[i] = strategiesComboBoxes[i].getSelectedItem() != null ? ((StrategyWrapper) strategiesComboBoxes[i].getSelectedItem()).getStrategy() : null; + chosenStrategies[i] = strategiesComboBoxes[i].getSelectedItem() != null ? + ((StrategyWrapper) strategiesComboBoxes[i].getSelectedItem()).getStrategy() : null; } manipulator.setMergeStrategies(chosenStrategies); } + @Override public String getDisplayName() { return manipulator.getName(); } + @Override public JPanel getSettingsPanel() { return this; } + @Override public boolean isModal() { return true; } @@ -122,12 +134,7 @@ public void loadSettings() { } private void loadColumnsStrategies(JPanel settingsPanel) { - AttributeColumn[] columns = manipulator.getColumns(); - //Prepare node rows: - rows = new Attributes[nodes.length]; - for (int i = 0; i < nodes.length; i++) { - rows[i] = nodes[i].getAttributes(); - } + Column[] columns = manipulator.getColumns(); strategiesConfigurationButtons = new StrategyConfigurationButton[columns.length]; strategiesComboBoxes = new StrategyComboBox[columns.length]; @@ -139,7 +146,7 @@ private void loadColumnsStrategies(JPanel settingsPanel) { strategiesConfigurationButtons[i] = new StrategyConfigurationButton(i); //Strategy selection: - StrategyComboBox strategyComboBox = new StrategyComboBox(strategiesConfigurationButtons[i],infoLabel); + StrategyComboBox strategyComboBox = new StrategyComboBox(strategiesConfigurationButtons[i], infoLabel); strategiesComboBoxes[i] = strategyComboBox; for (AttributeRowsMergeStrategy strategy : getColumnAvailableStrategies(columns[i])) { strategyComboBox.addItem(new StrategyWrapper(strategy)); @@ -155,10 +162,11 @@ private void loadColumnsStrategies(JPanel settingsPanel) { } } - private List getColumnAvailableStrategies(AttributeColumn column) { - ArrayList availableStrategies = new ArrayList(); - for (AttributeRowsMergeStrategy strategy : DataLaboratoryHelper.getDefault().getAttributeRowsMergeStrategies()) { - strategy.setup(rows, manipulator.getSelectedNode().getAttributes(), column); + private List getColumnAvailableStrategies(Column column) { + ArrayList availableStrategies = new ArrayList<>(); + for (AttributeRowsMergeStrategy strategy : DataLaboratoryHelper.getDefault() + .getAttributeRowsMergeStrategies()) { + strategy.setup(nodes, manipulator.getSelectedNode(), column); if (strategy.canExecute()) { availableStrategies.add(strategy); } @@ -173,7 +181,8 @@ private void loadDescription(JPanel settingsPanel) { } private void loadDeleteMergedNodesCheckBox(JPanel settingsPanel) { - deleteMergedNodesCheckBox = new JCheckBox(getMessage("MergeNodesUI.deleteMergedNodesText"), manipulator.isDeleteMergedNodes()); + deleteMergedNodesCheckBox = + new JCheckBox(getMessage("MergeNodesUI.deleteMergedNodesText"), manipulator.isDeleteMergedNodes()); settingsPanel.add(deleteMergedNodesCheckBox, "wrap 25px"); } @@ -188,7 +197,7 @@ private void loadSelectedRow(JPanel settingsPanel) { Node selectedNode = manipulator.getSelectedNode(); for (int i = 0; i < nodes.length; i++) { - nodesComboBox.addItem(nodes[i].getId() + " - " + nodes[i].getNodeData().getLabel()); + nodesComboBox.addItem(nodes[i].getId() + " - " + nodes[i].getLabel()); if (nodes[i] == selectedNode) { nodesComboBox.setSelectedIndex(i); } @@ -210,9 +219,32 @@ private AttributeRowsMergeStrategy getStrategy(int strategyIndex) { return null; } + /** + * This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + + scroll = new javax.swing.JScrollPane(); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(scroll, javax.swing.GroupLayout.DEFAULT_SIZE, 594, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(scroll, javax.swing.GroupLayout.DEFAULT_SIZE, 320, Short.MAX_VALUE) + ); + }// //GEN-END:initComponents + class StrategyConfigurationButton extends JButton implements ActionListener { - private int strategyIndex; + private final int strategyIndex; public StrategyConfigurationButton(int strategyIndex) { this.strategyIndex = strategyIndex; @@ -226,21 +258,22 @@ public void refreshEnabledState() { setEnabled(strategy != null && strategy.getUI() != null);//Has strategy and the strategy has UI } + @Override public void actionPerformed(ActionEvent e) { DataLaboratoryHelper.getDefault().showAttributeRowsMergeStrategyUIDialog(getStrategy(strategyIndex)); } } class StrategyComboBox extends JComboBox implements ActionListener { - private StrategyConfigurationButton button; - private StrategyInfoLabel infoLabel; + private final StrategyConfigurationButton button; + private final StrategyInfoLabel infoLabel; public StrategyComboBox(StrategyConfigurationButton button, StrategyInfoLabel infoLabel) { this.button = button; this.infoLabel = infoLabel; this.addActionListener(this); } - + public void refresh() { button.refreshEnabledState(); infoLabel.refreshEnabledState(); @@ -254,7 +287,7 @@ public void actionPerformed(ActionEvent e) { class StrategyInfoLabel extends JLabel { - private int strategyIndex; + private final int strategyIndex; public StrategyInfoLabel(int strategyIndex) { this.strategyIndex = strategyIndex; @@ -308,7 +341,7 @@ private RichTooltip buildTooltip(AttributeRowsMergeStrategy strategy) { class StrategyWrapper { - private AttributeRowsMergeStrategy strategy; + private final AttributeRowsMergeStrategy strategy; public StrategyWrapper(AttributeRowsMergeStrategy strategy) { this.strategy = strategy; @@ -323,29 +356,4 @@ public AttributeRowsMergeStrategy getStrategy() { return strategy; } } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - // //GEN-BEGIN:initComponents - private void initComponents() { - - scroll = new javax.swing.JScrollPane(); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(scroll, javax.swing.GroupLayout.DEFAULT_SIZE, 594, Short.MAX_VALUE) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(scroll, javax.swing.GroupLayout.DEFAULT_SIZE, 320, Short.MAX_VALUE) - ); - }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JScrollPane scroll; - // End of variables declaration//GEN-END:variables } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/MoveNodeToGroupUI.form b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/MoveNodeToGroupUI.form deleted file mode 100644 index f75a33b225..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/MoveNodeToGroupUI.form +++ /dev/null @@ -1,57 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/MoveNodeToGroupUI.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/MoveNodeToGroupUI.java deleted file mode 100644 index b64fc86f65..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/MoveNodeToGroupUI.java +++ /dev/null @@ -1,130 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.datalab.plugin.manipulators.nodes.ui; - -import javax.swing.JPanel; -import org.gephi.datalab.plugin.manipulators.nodes.MoveNodeToGroup; -import org.gephi.datalab.spi.DialogControls; -import org.gephi.datalab.spi.Manipulator; -import org.gephi.datalab.spi.ManipulatorUI; -import org.gephi.graph.api.Node; - -/** - * UI for MoveNodeToGroup NodesManipulator - * @author Eduardo Ramos - */ -public class MoveNodeToGroupUI extends javax.swing.JPanel implements ManipulatorUI{ - private MoveNodeToGroup manipulator; - private Node[] availableGroups; - - /** Creates new form MoveNodeToGroupUI */ - public MoveNodeToGroupUI() { - initComponents(); - } - - public void setup(Manipulator m, DialogControls dialogControls) { - manipulator=(MoveNodeToGroup) m; - availableGroups=manipulator.getAvailableGroupsToMoveNodes(); - - for(Node n:availableGroups){ - availableGroupsComboBox.addItem(n.getNodeData().getId()+" - "+n.getNodeData().getLabel()); - } - } - - public void unSetup() { - manipulator.setGroup(availableGroups[availableGroupsComboBox.getSelectedIndex()]); - } - - public String getDisplayName() { - return manipulator.getName(); - } - - public JPanel getSettingsPanel() { - return this; - } - - public boolean isModal() { - return true; - } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // //GEN-BEGIN:initComponents - private void initComponents() { - - descriptionLabel = new javax.swing.JLabel(); - availableGroupsComboBox = new javax.swing.JComboBox(); - - descriptionLabel.setText(org.openide.util.NbBundle.getMessage(MoveNodeToGroupUI.class, "MoveNodeToGroupUI.descriptionLabel.text")); // NOI18N - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) - .addComponent(availableGroupsComboBox, javax.swing.GroupLayout.Alignment.LEADING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(descriptionLabel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(descriptionLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(availableGroupsComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - }// //GEN-END:initComponents - - - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JComboBox availableGroupsComboBox; - private javax.swing.JLabel descriptionLabel; - // End of variables declaration//GEN-END:variables -} diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/SetNodesSizeUI.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/SetNodesSizeUI.java index bae899094f..1c87944ff4 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/SetNodesSizeUI.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/nodes/ui/SetNodesSizeUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.nodes.ui; import javax.swing.JPanel; @@ -52,39 +53,93 @@ Development and Distribution License("CDDL") (collectively, the /** * UI for SetNodesSize nodes manipulator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class SetNodesSizeUI extends javax.swing.JPanel implements ManipulatorUI { private SetNodesSize manipulator; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel sizeLabel; + private javax.swing.JTextField sizeText; + // End of variables declaration//GEN-END:variables - /** Creates new form SetNodesSizeUI */ + /** + * Creates new form SetNodesSizeUI + */ public SetNodesSizeUI() { initComponents(); sizeText.setDocument(new FloatJTextFieldFilter()); } + @Override public void setup(Manipulator m, DialogControls dialogControls) { this.manipulator = (SetNodesSize) m; sizeText.setText(String.valueOf(manipulator.getSize())); } + @Override public void unSetup() { manipulator.setSize(Float.parseFloat(sizeText.getText())); } + @Override public String getDisplayName() { return manipulator.getName(); } + @Override public JPanel getSettingsPanel() { return this; } + @Override public boolean isModal() { return true; } + /** + * This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + sizeLabel = new javax.swing.JLabel(); + sizeText = new javax.swing.JTextField(); + + sizeLabel.setText( + org.openide.util.NbBundle.getMessage(SetNodesSizeUI.class, "SetNodesSizeUI.sizeLabel.text")); // NOI18N + + sizeText.setText( + org.openide.util.NbBundle.getMessage(SetNodesSizeUI.class, "SetNodesSizeUI.sizeText.text")); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(sizeLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(sizeText, javax.swing.GroupLayout.DEFAULT_SIZE, 47, Short.MAX_VALUE) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(sizeLabel) + .addComponent(sizeText, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + }// //GEN-END:initComponents + /** * Filter for only allowing float numbers in a JTextField. */ @@ -95,13 +150,13 @@ class FloatJTextFieldFilter extends PlainDocument { @Override public void insertString(int offs, String str, AttributeSet a) throws BadLocationException { for (int i = 0; i < str.length(); i++) { - if (POSITIVE_FLOAT_ACCEPTED_CHARS.indexOf(String.valueOf(str.charAt(i))) == -1) { + if (!POSITIVE_FLOAT_ACCEPTED_CHARS.contains(String.valueOf(str.charAt(i)))) { return; } } - if (str.indexOf(".") != -1) { - if (getText(0, getLength()).indexOf(".") != -1) { + if (str.contains(".")) { + if (getText(0, getLength()).contains(".")) { return; } } @@ -118,46 +173,4 @@ public void remove(int offs, int len) throws BadLocationException { } } } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // //GEN-BEGIN:initComponents - private void initComponents() { - - sizeLabel = new javax.swing.JLabel(); - sizeText = new javax.swing.JTextField(); - - sizeLabel.setText(org.openide.util.NbBundle.getMessage(SetNodesSizeUI.class, "SetNodesSizeUI.sizeLabel.text")); // NOI18N - - sizeText.setText(org.openide.util.NbBundle.getMessage(SetNodesSizeUI.class, "SetNodesSizeUI.sizeText.text")); // NOI18N - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(sizeLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(sizeText, javax.swing.GroupLayout.DEFAULT_SIZE, 47, Short.MAX_VALUE) - .addContainerGap()) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(sizeLabel) - .addComponent(sizeText, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JLabel sizeLabel; - private javax.swing.JTextField sizeText; - // End of variables declaration//GEN-END:variables } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/AverageNumber.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/AverageNumber.java index bc169a3dd3..adf4d88953 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/AverageNumber.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/AverageNumber.java @@ -39,16 +39,17 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.rows.merge; import java.math.BigDecimal; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeUtils; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; -import org.gephi.graph.api.Attributes; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; import org.gephi.utils.StatisticsUtils; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; @@ -57,52 +58,64 @@ Development and Distribution License("CDDL") (collectively, the /** * AttributeRowsMergeStrategy for any number or number list column that * calculates the average of all the values. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class AverageNumber implements AttributeRowsMergeStrategy { - private Attributes[] rows; - private AttributeColumn column; + private Element[] rows; + private Column column; private BigDecimal result; - public void setup(Attributes[] rows, Attributes selectedRow, AttributeColumn column) { + @Override + public void setup(Element[] rows, Element selectedRow, Column column) { this.rows = rows; this.column = column; } + @Override public Object getReducedValue() { return result; } + @Override public void execute() { - result = StatisticsUtils.average(Lookup.getDefault().lookup(AttributeColumnsController.class).getRowsColumnNumbers(rows, column)); + result = StatisticsUtils + .average(Lookup.getDefault().lookup(AttributeColumnsController.class).getRowsColumnNumbers(rows, column)); } + @Override public String getName() { return NbBundle.getMessage(AverageNumber.class, "AverageNumber.name"); } + @Override public String getDescription() { return NbBundle.getMessage(AverageNumber.class, "AverageNumber.description"); } + @Override public boolean canExecute() { - return AttributeUtils.getDefault().isNumberOrNumberListColumn(column); + return AttributeUtils.isNumberType(column.getTypeClass()); } + @Override public ManipulatorUI getUI() { return null; } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 0; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/balance.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/balance.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/AverageNumberBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/AverageNumberBuilder.java index 756a5c863c..6a4e7c7a46 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/AverageNumberBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/AverageNumberBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.rows.merge; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; @@ -47,13 +48,15 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for AverageNumber AttributeColumnsMergeStrategy. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=AttributeRowsMergeStrategyBuilder.class) +@ServiceProvider(service = AttributeRowsMergeStrategyBuilder.class) public class AverageNumberBuilder implements AttributeRowsMergeStrategyBuilder { + @Override public AttributeRowsMergeStrategy getAttributeRowsMergeStrategy() { return new AverageNumber(); } - + } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/FirstQuartileNumber.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/FirstQuartileNumber.java index 080500c779..2ca2823c7a 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/FirstQuartileNumber.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/FirstQuartileNumber.java @@ -39,16 +39,17 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.rows.merge; import java.math.BigDecimal; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeUtils; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; -import org.gephi.graph.api.Attributes; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; import org.gephi.utils.StatisticsUtils; import org.openide.util.Lookup; import org.openide.util.NbBundle; @@ -56,51 +57,63 @@ Development and Distribution License("CDDL") (collectively, the /** * AttributeRowsMergeStrategy for any number or number list column that * calculates the first quartile of all the values. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class FirstQuartileNumber implements AttributeRowsMergeStrategy { - private Attributes[] rows; - private AttributeColumn column; + private Element[] rows; + private Column column; private BigDecimal result; - public void setup(Attributes[] rows, Attributes selectedRow, AttributeColumn column) { + @Override + public void setup(Element[] rows, Element selectedRow, Column column) { this.rows = rows; this.column = column; } + @Override public Object getReducedValue() { return result; } + @Override public void execute() { - result = StatisticsUtils.quartile1(Lookup.getDefault().lookup(AttributeColumnsController.class).getRowsColumnNumbers(rows, column)); + result = StatisticsUtils + .quartile1(Lookup.getDefault().lookup(AttributeColumnsController.class).getRowsColumnNumbers(rows, column)); } + @Override public String getName() { return NbBundle.getMessage(FirstQuartileNumber.class, "FirstQuartileNumber.name"); } + @Override public String getDescription() { return NbBundle.getMessage(FirstQuartileNumber.class, "FirstQuartileNumber.description"); } + @Override public boolean canExecute() { - return AttributeUtils.getDefault().isNumberOrNumberListColumn(column); + return AttributeUtils.isNumberType(column.getTypeClass()); } + @Override public ManipulatorUI getUI() { return null; } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 100; } + @Override public Icon getIcon() { return null; } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/FirstQuartileNumberBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/FirstQuartileNumberBuilder.java index 99810acfb8..538a972b2a 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/FirstQuartileNumberBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/FirstQuartileNumberBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.rows.merge; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; @@ -47,13 +48,15 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for FirstQuartileNumber AttributeColumnsMergeStrategy. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=AttributeRowsMergeStrategyBuilder.class) +@ServiceProvider(service = AttributeRowsMergeStrategyBuilder.class) public class FirstQuartileNumberBuilder implements AttributeRowsMergeStrategyBuilder { + @Override public AttributeRowsMergeStrategy getAttributeRowsMergeStrategy() { return new FirstQuartileNumber(); } - + } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/InterQuartileRangeNumber.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/InterQuartileRangeNumber.java index 35bd2efe9c..1ed43d2df4 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/InterQuartileRangeNumber.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/InterQuartileRangeNumber.java @@ -39,16 +39,17 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.rows.merge; import java.math.BigDecimal; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeUtils; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; -import org.gephi.graph.api.Attributes; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; import org.gephi.utils.StatisticsUtils; import org.openide.util.Lookup; import org.openide.util.NbBundle; @@ -56,26 +57,31 @@ Development and Distribution License("CDDL") (collectively, the /** * AttributeRowsMergeStrategy for any number or number list column that * calculates the inter quartile range of all the values. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class InterQuartileRangeNumber implements AttributeRowsMergeStrategy { - private Attributes[] rows; - private AttributeColumn column; + private Element[] rows; + private Column column; private BigDecimal result; - public void setup(Attributes[] rows, Attributes selectedRow, AttributeColumn column) { + @Override + public void setup(Element[] rows, Element selectedRow, Column column) { this.rows = rows; this.column = column; } + @Override public Object getReducedValue() { return result; } + @Override public void execute() { - BigDecimal Q1, Q3; - Number[] numbers=Lookup.getDefault().lookup(AttributeColumnsController.class).getRowsColumnNumbers(rows, column); + BigDecimal Q1, Q3; + Number[] numbers = + Lookup.getDefault().lookup(AttributeColumnsController.class).getRowsColumnNumbers(rows, column); Q3 = StatisticsUtils.quartile3(numbers); Q1 = StatisticsUtils.quartile1(numbers); if (Q3 != null && Q1 != null) { @@ -85,30 +91,37 @@ public void execute() { } } + @Override public String getName() { return NbBundle.getMessage(FirstQuartileNumber.class, "InterQuartileRangeNumber.name"); } + @Override public String getDescription() { return NbBundle.getMessage(FirstQuartileNumber.class, "InterQuartileRangeNumber.description"); } + @Override public boolean canExecute() { - return AttributeUtils.getDefault().isNumberOrNumberListColumn(column); + return AttributeUtils.isNumberType(column.getTypeClass()); } + @Override public ManipulatorUI getUI() { return null; } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 400; } + @Override public Icon getIcon() { return null; } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/InterQuartileRangeNumberBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/InterQuartileRangeNumberBuilder.java index b63fe87069..72ca6529de 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/InterQuartileRangeNumberBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/InterQuartileRangeNumberBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.rows.merge; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; @@ -47,13 +48,15 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for InterQuartileRangeNumber AttributeColumnsMergeStrategy. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=AttributeRowsMergeStrategyBuilder.class) +@ServiceProvider(service = AttributeRowsMergeStrategyBuilder.class) public class InterQuartileRangeNumberBuilder implements AttributeRowsMergeStrategyBuilder { + @Override public AttributeRowsMergeStrategy getAttributeRowsMergeStrategy() { return new InterQuartileRangeNumber(); } - + } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/JoinWithSeparator.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/JoinWithSeparator.java index a6183c1482..deaf367650 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/JoinWithSeparator.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/JoinWithSeparator.java @@ -1,129 +1,146 @@ /* -Copyright 2008-2011 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. + Copyright 2008-2011 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.rows.merge; +import java.time.ZoneId; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeType; import org.gephi.datalab.plugin.manipulators.rows.merge.ui.JoinWithSeparatorUI; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; -import org.gephi.graph.api.Attributes; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.TimeFormat; import org.openide.util.ImageUtilities; import org.openide.util.NbBundle; import org.openide.util.NbPreferences; /** * AttributeRowsMergeStrategy for any String or list column that joins the row values with a separator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class JoinWithSeparator implements AttributeRowsMergeStrategy { public static final String SEPARATOR_SAVED_PREFERENCES = "JoinWithSeparator_Separator"; - private static final String DEFAULT_SEPARATOR = ","; - private Attributes[] rows; - private AttributeColumn column; + private static final String DEFAULT_SEPARATOR = ", "; + private Element[] rows; + private Column column; private String separator, result; public JoinWithSeparator() { - separator = NbPreferences.forModule(JoinWithSeparator.class).get(SEPARATOR_SAVED_PREFERENCES, DEFAULT_SEPARATOR); + separator = + NbPreferences.forModule(JoinWithSeparator.class).get(SEPARATOR_SAVED_PREFERENCES, DEFAULT_SEPARATOR); } - public void setup(Attributes[] rows, Attributes selectedRow, AttributeColumn column) { + @Override + public void setup(Element[] rows, Element selectedRow, Column column) { this.rows = rows; this.column = column; } + @Override public Object getReducedValue() { return result; } + @Override public void execute() { NbPreferences.forModule(JoinWithSeparator.class).put(SEPARATOR_SAVED_PREFERENCES, separator); - + Object value; StringBuilder sb; final int rowsCount = rows.length; - final int columnIndex=column.getIndex(); - + + TimeFormat timeFormat = column.getTable().getGraph().getModel().getTimeFormat(); + ZoneId timeZone = column.getTable().getGraph().getModel().getTimeZone(); + sb = new StringBuilder(); for (int i = 0; i < rows.length; i++) { - value = rows[i].getValue(columnIndex); + value = rows[i].getAttribute(column); if (value != null) { - sb.append(value.toString()); + sb.append(AttributeUtils.print(value, timeFormat, timeZone)); if (i < rowsCount - 1) { sb.append(separator); } } } - result=sb.toString(); + result = sb.toString(); } + @Override public String getName() { return NbBundle.getMessage(AverageNumber.class, "JoinWithSeparator.name"); } + @Override public String getDescription() { return NbBundle.getMessage(AverageNumber.class, "JoinWithSeparator.description"); } + @Override public boolean canExecute() { - return column.getType().isListType() || column.getType() == AttributeType.STRING; + return Object[].class.isAssignableFrom(column.getTypeClass()) || column.getTypeClass() == String.class; } + @Override public ManipulatorUI getUI() { return new JoinWithSeparatorUI(); } + @Override public int getType() { return 0; } + @Override public int getPosition() { return 100; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/join.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/join.svg", false); } public String getSeparator() { diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/JoinWithSeparatorBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/JoinWithSeparatorBuilder.java index 4717f288bb..edaeaa3fd2 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/JoinWithSeparatorBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/JoinWithSeparatorBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.rows.merge; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; @@ -47,13 +48,15 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for JoinWithSeparator AttributeColumnsMergeStrategy. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=AttributeRowsMergeStrategyBuilder.class) +@ServiceProvider(service = AttributeRowsMergeStrategyBuilder.class) public class JoinWithSeparatorBuilder implements AttributeRowsMergeStrategyBuilder { + @Override public AttributeRowsMergeStrategy getAttributeRowsMergeStrategy() { return new JoinWithSeparator(); } - + } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/KeepSelectedRowValue.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/KeepSelectedRowValue.java index 41cdfa7b00..315df45f06 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/KeepSelectedRowValue.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/KeepSelectedRowValue.java @@ -39,64 +39,76 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.rows.merge; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; -import org.gephi.graph.api.Attributes; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; import org.openide.util.ImageUtilities; import org.openide.util.NbBundle; /** * AttributeRowsMergeStrategy that simply keeps the value of the main row selected. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class KeepSelectedRowValue implements AttributeRowsMergeStrategy { - private Attributes row; - private AttributeColumn column; + private Element row; + private Column column; private Object result; - public void setup(Attributes[] rows, Attributes selectedRow, AttributeColumn column) { + @Override + public void setup(Element[] rows, Element selectedRow, Column column) { this.row = selectedRow; this.column = column; } + @Override public Object getReducedValue() { return result; } + @Override public void execute() { - result = row.getValue(column.getIndex()); + result = row.getAttribute(column); } + @Override public String getName() { return NbBundle.getMessage(AverageNumber.class, "KeepSelectedRowValue.name"); } + @Override public String getDescription() { return NbBundle.getMessage(AverageNumber.class, "KeepSelectedRowValue.description"); } + @Override public boolean canExecute() { return true; } + @Override public ManipulatorUI getUI() { return null; } + @Override public int getType() { return 0; } + @Override public int getPosition() { return 0; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/table-select.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/table-select.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/KeepSelectedRowValueBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/KeepSelectedRowValueBuilder.java index 282b15f512..3294f072a5 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/KeepSelectedRowValueBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/KeepSelectedRowValueBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.rows.merge; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; @@ -47,13 +48,15 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for KeepSelectedRowValue AttributeRowsMergeStrategy. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=AttributeRowsMergeStrategyBuilder.class) +@ServiceProvider(service = AttributeRowsMergeStrategyBuilder.class) public class KeepSelectedRowValueBuilder implements AttributeRowsMergeStrategyBuilder { + @Override public AttributeRowsMergeStrategy getAttributeRowsMergeStrategy() { return new KeepSelectedRowValue(); } - + } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/MaximumNumber.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/MaximumNumber.java index 8ef6c87c50..e858134871 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/MaximumNumber.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/MaximumNumber.java @@ -39,16 +39,17 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.rows.merge; import java.math.BigDecimal; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeUtils; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; -import org.gephi.graph.api.Attributes; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; import org.gephi.utils.StatisticsUtils; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; @@ -57,52 +58,64 @@ Development and Distribution License("CDDL") (collectively, the /** * AttributeRowsMergeStrategy for any number or number list column that * calculates the maximum of all the values. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class MaximumNumber implements AttributeRowsMergeStrategy { - private Attributes[] rows; - private AttributeColumn column; + private Element[] rows; + private Column column; private BigDecimal result; - public void setup(Attributes[] rows, Attributes selectedRow, AttributeColumn column) { + @Override + public void setup(Element[] rows, Element selectedRow, Column column) { this.rows = rows; this.column = column; } + @Override public Object getReducedValue() { return result; } + @Override public void execute() { - result = StatisticsUtils.maxValue(Lookup.getDefault().lookup(AttributeColumnsController.class).getRowsColumnNumbers(rows, column)); + result = StatisticsUtils + .maxValue(Lookup.getDefault().lookup(AttributeColumnsController.class).getRowsColumnNumbers(rows, column)); } + @Override public String getName() { return NbBundle.getMessage(AverageNumber.class, "MaximumNumber.name"); } + @Override public String getDescription() { return NbBundle.getMessage(AverageNumber.class, "MaximumNumber.description"); } + @Override public boolean canExecute() { - return AttributeUtils.getDefault().isNumberOrNumberListColumn(column); + return AttributeUtils.isNumberType(column.getTypeClass()); } + @Override public ManipulatorUI getUI() { return null; } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 700; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/plus-white.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/plus-white.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/MaximumNumberBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/MaximumNumberBuilder.java index 35ea319b22..d5ca67e78e 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/MaximumNumberBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/MaximumNumberBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.rows.merge; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; @@ -47,13 +48,15 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for MaximumNumber AttributeColumnsMergeStrategy. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=AttributeRowsMergeStrategyBuilder.class) +@ServiceProvider(service = AttributeRowsMergeStrategyBuilder.class) public class MaximumNumberBuilder implements AttributeRowsMergeStrategyBuilder { + @Override public AttributeRowsMergeStrategy getAttributeRowsMergeStrategy() { return new MaximumNumber(); } - + } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/MedianNumber.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/MedianNumber.java index b7805e0cb6..3acefb81ab 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/MedianNumber.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/MedianNumber.java @@ -39,16 +39,17 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.rows.merge; import java.math.BigDecimal; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeUtils; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; -import org.gephi.graph.api.Attributes; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; import org.gephi.utils.StatisticsUtils; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; @@ -57,52 +58,64 @@ Development and Distribution License("CDDL") (collectively, the /** * AttributeRowsMergeStrategy for any number or number list column that * calculates the median of all the values. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class MedianNumber implements AttributeRowsMergeStrategy { - private Attributes[] rows; - private AttributeColumn column; + private Element[] rows; + private Column column; private BigDecimal result; - public void setup(Attributes[] rows, Attributes selectedRow, AttributeColumn column) { + @Override + public void setup(Element[] rows, Element selectedRow, Column column) { this.rows = rows; this.column = column; } + @Override public Object getReducedValue() { return result; } + @Override public void execute() { - result = StatisticsUtils.median(Lookup.getDefault().lookup(AttributeColumnsController.class).getRowsColumnNumbers(rows, column)); + result = StatisticsUtils + .median(Lookup.getDefault().lookup(AttributeColumnsController.class).getRowsColumnNumbers(rows, column)); } + @Override public String getName() { return NbBundle.getMessage(AverageNumber.class, "MedianNumber.name"); } + @Override public String getDescription() { return NbBundle.getMessage(AverageNumber.class, "MedianNumber.description"); } + @Override public boolean canExecute() { - return AttributeUtils.getDefault().isNumberOrNumberListColumn(column); + return AttributeUtils.isNumberType(column.getTypeClass()); } + @Override public ManipulatorUI getUI() { return null; } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 200; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/ui-slider-050.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/ui-slider-050.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/MedianNumberBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/MedianNumberBuilder.java index 8f496026dc..ac13684446 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/MedianNumberBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/MedianNumberBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.rows.merge; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; @@ -47,13 +48,15 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for AverageNumber AttributeColumnsMergeStrategy. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=AttributeRowsMergeStrategyBuilder.class) +@ServiceProvider(service = AttributeRowsMergeStrategyBuilder.class) public class MedianNumberBuilder implements AttributeRowsMergeStrategyBuilder { + @Override public AttributeRowsMergeStrategy getAttributeRowsMergeStrategy() { return new MedianNumber(); } - + } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/MinimumNumber.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/MinimumNumber.java index ce60314e33..00efcdedb4 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/MinimumNumber.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/MinimumNumber.java @@ -39,16 +39,17 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.rows.merge; import java.math.BigDecimal; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeUtils; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; -import org.gephi.graph.api.Attributes; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; import org.gephi.utils.StatisticsUtils; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; @@ -57,52 +58,64 @@ Development and Distribution License("CDDL") (collectively, the /** * AttributeRowsMergeStrategy for any number or number list column that * calculates the minimum of all the values. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class MinimumNumber implements AttributeRowsMergeStrategy { - private Attributes[] rows; - private AttributeColumn column; + private Element[] rows; + private Column column; private BigDecimal result; - public void setup(Attributes[] rows, Attributes selectedRow, AttributeColumn column) { + @Override + public void setup(Element[] rows, Element selectedRow, Column column) { this.rows = rows; this.column = column; } + @Override public Object getReducedValue() { return result; } + @Override public void execute() { - result = StatisticsUtils.minValue(Lookup.getDefault().lookup(AttributeColumnsController.class).getRowsColumnNumbers(rows, column)); + result = StatisticsUtils + .minValue(Lookup.getDefault().lookup(AttributeColumnsController.class).getRowsColumnNumbers(rows, column)); } + @Override public String getName() { return NbBundle.getMessage(AverageNumber.class, "MinimumNumber.name"); } + @Override public String getDescription() { return NbBundle.getMessage(AverageNumber.class, "MinimumNumber.description"); } + @Override public boolean canExecute() { - return AttributeUtils.getDefault().isNumberOrNumberListColumn(column); + return AttributeUtils.isNumberType(column.getTypeClass()); } + @Override public ManipulatorUI getUI() { return null; } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 600; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/minus-white.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/minus-white.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/MinimumNumberBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/MinimumNumberBuilder.java index fce3bda44b..8f2f543676 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/MinimumNumberBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/MinimumNumberBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.rows.merge; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; @@ -47,13 +48,15 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for MinimumNumber AttributeColumnsMergeStrategy. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=AttributeRowsMergeStrategyBuilder.class) +@ServiceProvider(service = AttributeRowsMergeStrategyBuilder.class) public class MinimumNumberBuilder implements AttributeRowsMergeStrategyBuilder { + @Override public AttributeRowsMergeStrategy getAttributeRowsMergeStrategy() { return new MinimumNumber(); } - + } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/SetNull.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/SetNull.java index e6aec7711f..df7d33ed94 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/SetNull.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/SetNull.java @@ -39,57 +39,69 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.rows.merge; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; -import org.gephi.graph.api.Attributes; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; import org.openide.util.ImageUtilities; import org.openide.util.NbBundle; /** * AttributeRowsMergeStrategy that simply keeps sets null value to the merged row. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class SetNull implements AttributeRowsMergeStrategy { - public void setup(Attributes[] rows, Attributes selectedRow, AttributeColumn column) { + @Override + public void setup(Element[] rows, Element selectedRow, Column column) { } + @Override public Object getReducedValue() { return null; } + @Override public void execute() { } + @Override public String getName() { return NbBundle.getMessage(AverageNumber.class, "SetNull.name"); } + @Override public String getDescription() { return null; } + @Override public boolean canExecute() { return true; } + @Override public ManipulatorUI getUI() { return null; } + @Override public int getType() { return 0; } + @Override public int getPosition() { return 200; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/broom.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/broom.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/SetNullBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/SetNullBuilder.java index aa4c4f3cfa..1305560449 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/SetNullBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/SetNullBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.rows.merge; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; @@ -47,13 +48,15 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for SetNull AttributeRowsMergeStrategy. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=AttributeRowsMergeStrategyBuilder.class) +@ServiceProvider(service = AttributeRowsMergeStrategyBuilder.class) public class SetNullBuilder implements AttributeRowsMergeStrategyBuilder { + @Override public AttributeRowsMergeStrategy getAttributeRowsMergeStrategy() { return new SetNull(); } - + } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/SumNumbers.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/SumNumbers.java index b4f1d13509..496d26f1ca 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/SumNumbers.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/SumNumbers.java @@ -39,16 +39,17 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.rows.merge; import java.math.BigDecimal; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeUtils; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; -import org.gephi.graph.api.Attributes; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; import org.gephi.utils.StatisticsUtils; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; @@ -57,52 +58,64 @@ Development and Distribution License("CDDL") (collectively, the /** * AttributeRowsMergeStrategy for any number or number list column that * calculates the sum of all the values. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class SumNumbers implements AttributeRowsMergeStrategy { - private Attributes[] rows; - private AttributeColumn column; + private Element[] rows; + private Column column; private BigDecimal result; - public void setup(Attributes[] rows, Attributes selectedRow, AttributeColumn column) { + @Override + public void setup(Element[] rows, Element selectedRow, Column column) { this.rows = rows; this.column = column; } + @Override public Object getReducedValue() { return result; } + @Override public void execute() { - result = StatisticsUtils.sum(Lookup.getDefault().lookup(AttributeColumnsController.class).getRowsColumnNumbers(rows, column)); + result = StatisticsUtils + .sum(Lookup.getDefault().lookup(AttributeColumnsController.class).getRowsColumnNumbers(rows, column)); } + @Override public String getName() { return NbBundle.getMessage(AverageNumber.class, "SumNumbers.name"); } + @Override public String getDescription() { return NbBundle.getMessage(AverageNumber.class, "SumNumbers.description"); } + @Override public boolean canExecute() { - return AttributeUtils.getDefault().isNumberOrNumberListColumn(column); + return AttributeUtils.isNumberType(column.getTypeClass()); } + @Override public ManipulatorUI getUI() { return null; } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 500; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/plus-circle.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/plus-circle.svg", false); } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/SumNumbersBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/SumNumbersBuilder.java index 9ae14e7650..eb514ca2c6 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/SumNumbersBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/SumNumbersBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.rows.merge; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; @@ -47,13 +48,15 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for SumNumbers AttributeColumnsMergeStrategy. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=AttributeRowsMergeStrategyBuilder.class) +@ServiceProvider(service = AttributeRowsMergeStrategyBuilder.class) public class SumNumbersBuilder implements AttributeRowsMergeStrategyBuilder { + @Override public AttributeRowsMergeStrategy getAttributeRowsMergeStrategy() { return new SumNumbers(); } - + } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/ThirdQuartileNumber.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/ThirdQuartileNumber.java index 4f0b3653d7..ae72996c28 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/ThirdQuartileNumber.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/ThirdQuartileNumber.java @@ -39,16 +39,17 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.rows.merge; import java.math.BigDecimal; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeUtils; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; -import org.gephi.graph.api.Attributes; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; import org.gephi.utils.StatisticsUtils; import org.openide.util.Lookup; import org.openide.util.NbBundle; @@ -56,51 +57,63 @@ Development and Distribution License("CDDL") (collectively, the /** * AttributeRowsMergeStrategy for any number or number list column that * calculates the third quartile of all the values. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class ThirdQuartileNumber implements AttributeRowsMergeStrategy { - private Attributes[] rows; - private AttributeColumn column; + private Element[] rows; + private Column column; private BigDecimal result; - public void setup(Attributes[] rows, Attributes selectedRow, AttributeColumn column) { + @Override + public void setup(Element[] rows, Element selectedRow, Column column) { this.rows = rows; this.column = column; } + @Override public Object getReducedValue() { return result; } + @Override public void execute() { - result = StatisticsUtils.quartile3(Lookup.getDefault().lookup(AttributeColumnsController.class).getRowsColumnNumbers(rows, column)); + result = StatisticsUtils + .quartile3(Lookup.getDefault().lookup(AttributeColumnsController.class).getRowsColumnNumbers(rows, column)); } + @Override public String getName() { return NbBundle.getMessage(FirstQuartileNumber.class, "ThirdQuartileNumber.name"); } + @Override public String getDescription() { return NbBundle.getMessage(FirstQuartileNumber.class, "ThirdQuartileNumber.description"); } + @Override public boolean canExecute() { - return AttributeUtils.getDefault().isNumberOrNumberListColumn(column); + return AttributeUtils.isNumberType(column.getTypeClass()); } + @Override public ManipulatorUI getUI() { return null; } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 300; } + @Override public Icon getIcon() { return null; } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/ThirdQuartileNumberBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/ThirdQuartileNumberBuilder.java index 5786252f1a..ba646cf386 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/ThirdQuartileNumberBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/ThirdQuartileNumberBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.rows.merge; import org.gephi.datalab.spi.rows.merge.AttributeRowsMergeStrategy; @@ -47,13 +48,15 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for ThirdQuartileNumber AttributeColumnsMergeStrategy. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=AttributeRowsMergeStrategyBuilder.class) +@ServiceProvider(service = AttributeRowsMergeStrategyBuilder.class) public class ThirdQuartileNumberBuilder implements AttributeRowsMergeStrategyBuilder { + @Override public AttributeRowsMergeStrategy getAttributeRowsMergeStrategy() { return new ThirdQuartileNumber(); } - + } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/ui/JoinWithSeparatorUI.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/ui/JoinWithSeparatorUI.java index 67040e0ae0..b314bbaf2d 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/ui/JoinWithSeparatorUI.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/rows/merge/ui/JoinWithSeparatorUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.rows.merge.ui; import javax.swing.JPanel; @@ -49,37 +50,51 @@ Development and Distribution License("CDDL") (collectively, the /** * UI for JoinWithSeparator AttributeRowsMergeStrategy - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -public class JoinWithSeparatorUI extends javax.swing.JPanel implements ManipulatorUI{ +public class JoinWithSeparatorUI extends javax.swing.JPanel implements ManipulatorUI { JoinWithSeparator manipulator; - /** Creates new form JoinWithSeparatorUI */ + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel separatorLabel; + private javax.swing.JTextField separatorText; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form JoinWithSeparatorUI + */ public JoinWithSeparatorUI() { initComponents(); } - + + @Override public void setup(Manipulator m, DialogControls dialogControls) { - manipulator=(JoinWithSeparator) m; + manipulator = (JoinWithSeparator) m; separatorText.setText(manipulator.getSeparator()); } + @Override public void unSetup() { manipulator.setSeparator(separatorText.getText()); } + @Override public String getDisplayName() { return manipulator.getName(); } + @Override public JPanel getSettingsPanel() { return this; } + @Override public boolean isModal() { return true; } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -91,7 +106,8 @@ private void initComponents() { separatorLabel = new javax.swing.JLabel(); separatorText = new javax.swing.JTextField(); - separatorLabel.setText(org.openide.util.NbBundle.getMessage(JoinWithSeparatorUI.class, "JoinWithSeparatorUI.separatorLabel.text")); // NOI18N + separatorLabel.setText(org.openide.util.NbBundle + .getMessage(JoinWithSeparatorUI.class, "JoinWithSeparatorUI.separatorLabel.text")); // NOI18N separatorText.setText(null); @@ -99,25 +115,24 @@ private void initComponents() { this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(separatorLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 67, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(separatorText, javax.swing.GroupLayout.PREFERRED_SIZE, 124, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(separatorLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 67, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(separatorText, javax.swing.GroupLayout.PREFERRED_SIZE, 124, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(separatorLabel) - .addComponent(separatorText, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(separatorLabel) + .addComponent(separatorText, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JLabel separatorLabel; - private javax.swing.JTextField separatorText; - // End of variables declaration//GEN-END:variables } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/ui/GeneralChooseColumnsAndRowUI.form b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/ui/GeneralChooseColumnsAndRowUI.form index 9c78f9c382..e51cdf8215 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/ui/GeneralChooseColumnsAndRowUI.form +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/ui/GeneralChooseColumnsAndRowUI.form @@ -1,4 +1,4 @@ - +
    diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/ui/GeneralChooseColumnsAndRowUI.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/ui/GeneralChooseColumnsAndRowUI.java index 96b49f32f1..c9373a956f 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/ui/GeneralChooseColumnsAndRowUI.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/ui/GeneralChooseColumnsAndRowUI.java @@ -39,72 +39,89 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.ui; import java.util.ArrayList; import javax.swing.JCheckBox; import javax.swing.JPanel; import net.miginfocom.swing.MigLayout; -import org.gephi.data.attributes.api.AttributeColumn; import org.gephi.datalab.plugin.manipulators.GeneralColumnsAndRowChooser; import org.gephi.datalab.spi.DialogControls; import org.gephi.datalab.spi.Manipulator; import org.gephi.datalab.spi.ManipulatorUI; +import org.gephi.graph.api.Column; import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Element; import org.gephi.graph.api.Node; /** * UI for GeneralColumnsChooser (ClearNodesData and ClearEdgesData) - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class GeneralChooseColumnsAndRowUI extends javax.swing.JPanel implements ManipulatorUI { private GeneralColumnsAndRowChooser columnsAndRowChooser; private ColumnCheckBox[] columnsCheckBoxes; - private Object[] rows;//Node or edge + private Element[] rows;//Node or edge + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel columnsDescriptionLabel; + private javax.swing.JPanel contentPanel; + private javax.swing.JScrollPane contentScrollPane; + private javax.swing.JComboBox rowComboBox; + private javax.swing.JLabel rowDescriptionLabel; + // End of variables declaration//GEN-END:variables - /** Creates new form GeneralChooseColumnsUI */ + /** + * Creates new form GeneralChooseColumnsUI + */ public GeneralChooseColumnsAndRowUI(String rowDescription, String columnsDescription) { initComponents(); rowDescriptionLabel.setText(rowDescription); columnsDescriptionLabel.setText(columnsDescription); } + @Override public void setup(Manipulator m, DialogControls dialogControls) { this.columnsAndRowChooser = (GeneralColumnsAndRowChooser) m; refreshColumns(); refreshRows(); } + @Override public void unSetup() { columnsAndRowChooser.setColumns(getChosenColumns()); columnsAndRowChooser.setRow(rows[rowComboBox.getSelectedIndex()]); } + @Override public String getDisplayName() { return columnsAndRowChooser.getName(); } + @Override public JPanel getSettingsPanel() { return this; } + @Override public boolean isModal() { return true; } - public AttributeColumn[] getChosenColumns() { - ArrayList columnsToClearDataList = new ArrayList(); + public Column[] getChosenColumns() { + ArrayList columnsToClearDataList = new ArrayList<>(); for (ColumnCheckBox c : columnsCheckBoxes) { if (c.isSelected()) { columnsToClearDataList.add(c.getColumn()); } } - return columnsToClearDataList.toArray(new AttributeColumn[0]); + return columnsToClearDataList.toArray(new Column[0]); } private void refreshColumns() { - AttributeColumn[] columns = columnsAndRowChooser.getColumns(); + Column[] columns = columnsAndRowChooser.getColumns(); columnsCheckBoxes = new ColumnCheckBox[columns.length]; contentPanel.removeAll(); contentPanel.setLayout(new MigLayout("", "[pref!]")); @@ -125,10 +142,10 @@ private void refreshRows() { for (int i = 0; i < rows.length; i++) { if (rows[i] instanceof Node) { node = (Node) rows[i]; - rowComboBox.addItem(node.getId() + " - " + node.getNodeData().getLabel()); + rowComboBox.addItem(node.getId() + " - " + node.getLabel()); } else { edge = (Edge) rows[i]; - rowComboBox.addItem(edge.getId() + " - " + edge.getEdgeData().getLabel()); + rowComboBox.addItem(edge.getId() + " - " + edge.getLabel()); } if (rows[i] == sourceRow) { rowComboBox.setSelectedIndex(i); @@ -136,34 +153,8 @@ private void refreshRows() { } } - private static class ColumnCheckBox { - - private JCheckBox checkBox; - private AttributeColumn column; - - public ColumnCheckBox(AttributeColumn column, boolean selected) { - checkBox = new JCheckBox(column.getTitle(), selected); - this.column = column; - } - - public void setSelected(boolean selected) { - checkBox.setSelected(selected); - } - - public boolean isSelected() { - return checkBox.isSelected(); - } - - public JCheckBox getCheckBox() { - return checkBox; - } - - public AttributeColumn getColumn() { - return column; - } - } - - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -189,36 +180,60 @@ private void initComponents() { this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(columnsDescriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 301, Short.MAX_VALUE) - .addComponent(contentScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 301, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addComponent(rowDescriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 149, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(rowComboBox, 0, 142, Short.MAX_VALUE))) - .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(columnsDescriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 301, + Short.MAX_VALUE) + .addComponent(contentScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 301, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addComponent(rowDescriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 149, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(rowComboBox, 0, 142, Short.MAX_VALUE))) + .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(rowDescriptionLabel) - .addComponent(rowComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(columnsDescriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(contentScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 194, Short.MAX_VALUE) - .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(rowDescriptionLabel) + .addComponent(rowComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(columnsDescriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 26, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(contentScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 194, Short.MAX_VALUE) + .addContainerGap()) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JLabel columnsDescriptionLabel; - private javax.swing.JPanel contentPanel; - private javax.swing.JScrollPane contentScrollPane; - private javax.swing.JComboBox rowComboBox; - private javax.swing.JLabel rowDescriptionLabel; - // End of variables declaration//GEN-END:variables + + private static class ColumnCheckBox { + + private final JCheckBox checkBox; + private final Column column; + + public ColumnCheckBox(Column column, boolean selected) { + checkBox = new JCheckBox(column.getTitle(), selected); + this.column = column; + } + + public boolean isSelected() { + return checkBox.isSelected(); + } + + public void setSelected(boolean selected) { + checkBox.setSelected(selected); + } + + public JCheckBox getCheckBox() { + return checkBox; + } + + public Column getColumn() { + return column; + } + } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/ui/GeneralChooseColumnsUI.form b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/ui/GeneralChooseColumnsUI.form index 4c0754e443..7e35b2c2f6 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/ui/GeneralChooseColumnsUI.form +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/ui/GeneralChooseColumnsUI.form @@ -1,4 +1,4 @@ - + diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/ui/GeneralChooseColumnsUI.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/ui/GeneralChooseColumnsUI.java index ddd8c72fcc..6319cf07e9 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/ui/GeneralChooseColumnsUI.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/ui/GeneralChooseColumnsUI.java @@ -39,70 +39,84 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.ui; import java.util.ArrayList; import javax.swing.JCheckBox; import javax.swing.JPanel; import net.miginfocom.swing.MigLayout; -import org.gephi.data.attributes.api.AttributeColumn; import org.gephi.datalab.plugin.manipulators.GeneralColumnsChooser; import org.gephi.datalab.spi.DialogControls; import org.gephi.datalab.spi.Manipulator; import org.gephi.datalab.spi.ManipulatorUI; +import org.gephi.graph.api.Column; /** * UI for GeneralColumnsChooser (ClearNodesData and ClearEdgesData) - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class GeneralChooseColumnsUI extends javax.swing.JPanel implements ManipulatorUI { private GeneralColumnsChooser columnsChooser; private ColumnCheckBox[] columnsCheckBoxes; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPanel contentPanel; + private javax.swing.JScrollPane contentScrollPane; + private javax.swing.JLabel descriptionLabel; + // End of variables declaration//GEN-END:variables - /** Creates new form GeneralChooseColumnsUI */ + /** + * Creates new form GeneralChooseColumnsUI + */ public GeneralChooseColumnsUI(String descriptionText) { initComponents(); descriptionLabel.setText(descriptionText); } + @Override public void setup(Manipulator m, DialogControls dialogControls) { this.columnsChooser = (GeneralColumnsChooser) m; refreshColumns(); } + @Override public void unSetup() { columnsChooser.setColumns(getChosenColumns()); } + @Override public String getDisplayName() { return columnsChooser.getName(); } + @Override public JPanel getSettingsPanel() { return this; } + @Override public boolean isModal() { return true; } - public AttributeColumn[] getChosenColumns(){ - ArrayList columnsToClearDataList=new ArrayList(); - for(ColumnCheckBox c:columnsCheckBoxes){ - if(c.isSelected()){ + public Column[] getChosenColumns() { + ArrayList columnsToClearDataList = new ArrayList<>(); + for (ColumnCheckBox c : columnsCheckBoxes) { + if (c.isSelected()) { columnsToClearDataList.add(c.getColumn()); } } - return columnsToClearDataList.toArray(new AttributeColumn[0]); + return columnsToClearDataList.toArray(new Column[0]); } private void refreshColumns() { - AttributeColumn[] columns=columnsChooser.getColumns(); - columnsCheckBoxes=new ColumnCheckBox[columns.length]; + Column[] columns = columnsChooser.getColumns(); + columnsCheckBoxes = new ColumnCheckBox[columns.length]; contentPanel.removeAll(); contentPanel.setLayout(new MigLayout("", "[pref!]")); - for (int i=0;i< columns.length;i++) { + for (int i = 0; i < columns.length; i++) { columnsCheckBoxes[i] = new ColumnCheckBox(columns[i], true); contentPanel.add(columnsCheckBoxes[i].getCheckBox(), "wrap"); } @@ -110,34 +124,8 @@ private void refreshColumns() { contentPanel.repaint(); } - private static class ColumnCheckBox { - - private JCheckBox checkBox; - private AttributeColumn column; - - public ColumnCheckBox(AttributeColumn column, boolean selected) { - checkBox = new JCheckBox(column.getTitle(), selected); - this.column = column; - } - - public void setSelected(boolean selected) { - checkBox.setSelected(selected); - } - - public boolean isSelected() { - return checkBox.isSelected(); - } - - public JCheckBox getCheckBox() { - return checkBox; - } - - public AttributeColumn getColumn() { - return column; - } - } - - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -159,26 +147,51 @@ private void initComponents() { this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(descriptionLabel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 319, Short.MAX_VALUE) - .addComponent(contentScrollPane, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 319, Short.MAX_VALUE)) - .addContainerGap()) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(descriptionLabel, javax.swing.GroupLayout.Alignment.LEADING, + javax.swing.GroupLayout.DEFAULT_SIZE, 319, Short.MAX_VALUE) + .addComponent(contentScrollPane, javax.swing.GroupLayout.Alignment.LEADING, + javax.swing.GroupLayout.DEFAULT_SIZE, 319, Short.MAX_VALUE)) + .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(descriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(contentScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 220, Short.MAX_VALUE) - .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(descriptionLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 26, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(contentScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 220, Short.MAX_VALUE) + .addContainerGap()) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JPanel contentPanel; - private javax.swing.JScrollPane contentScrollPane; - private javax.swing.JLabel descriptionLabel; - // End of variables declaration//GEN-END:variables + + private static class ColumnCheckBox { + + private final JCheckBox checkBox; + private final Column column; + + public ColumnCheckBox(Column column, boolean selected) { + checkBox = new JCheckBox(column.getTitle(), selected); + this.column = column; + } + + public boolean isSelected() { + return checkBox.isSelected(); + } + + public void setSelected(boolean selected) { + checkBox.setSelected(selected); + } + + public JCheckBox getCheckBox() { + return checkBox; + } + + public Column getColumn() { + return column; + } + } } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/ui/GeneralNumberListStatisticsReportUI.form b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/ui/GeneralNumberListStatisticsReportUI.form index 59b612d55f..4f3df9740f 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/ui/GeneralNumberListStatisticsReportUI.form +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/ui/GeneralNumberListStatisticsReportUI.form @@ -1,4 +1,4 @@ - + diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/ui/GeneralNumberListStatisticsReportUI.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/ui/GeneralNumberListStatisticsReportUI.java index c408dc0bee..dec6a5e26c 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/ui/GeneralNumberListStatisticsReportUI.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/ui/GeneralNumberListStatisticsReportUI.java @@ -39,44 +39,61 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.ui; import java.math.BigDecimal; import javax.swing.JPanel; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeTable; import org.gephi.datalab.spi.DialogControls; import org.gephi.datalab.spi.Manipulator; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.columns.AttributeColumnsManipulator; import org.gephi.datalab.spi.columns.AttributeColumnsManipulatorUI; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Table; import org.gephi.ui.components.JFreeChartDialog; import org.gephi.ui.components.SimpleHTMLReport; import org.gephi.ui.utils.ChartsUtils; import org.gephi.utils.StatisticsUtils; import org.jfree.chart.JFreeChart; +import org.openide.util.ImageUtilities; import org.openide.windows.WindowManager; /** * UI for NumberColumnStatisticsReport AttributeColumnsManipulator. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -public class GeneralNumberListStatisticsReportUI extends javax.swing.JPanel implements AttributeColumnsManipulatorUI, ManipulatorUI { +public class GeneralNumberListStatisticsReportUI extends javax.swing.JPanel + implements AttributeColumnsManipulatorUI, ManipulatorUI { - private Number[] numbers; - private String dataName; - private String dialogTitle; - private BigDecimal[] statistics; + private static final int MIN_HISTOGRAM_DIVISIONS = 1, MAX_HISTOGRAM_DIVISIONS = 50; + private final Number[] numbers; + private final String dataName; + private final String dialogTitle; + private final BigDecimal[] statistics; private JFreeChart boxPlot, scatterPlot, histogram; private JFreeChartDialog boxPlotDialog, scatterPlotDialog, histogramDialog; private SimpleHTMLReport reportDialog; private int histogramDivisions; - private static final int MIN_HISTOGRAM_DIVISIONS = 1, MAX_HISTOGRAM_DIVISIONS = 50; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton configureBoxPlotButton; + private javax.swing.JButton configureHistogramButton; + private javax.swing.JButton configureScatterPlotButton; + private javax.swing.JComboBox divisionsComboBox; + private javax.swing.JLabel divisionsLabel; + private javax.swing.JSeparator jSeparator1; + private javax.swing.JButton showReportButton; + private javax.swing.JCheckBox useLinearRegression; + private javax.swing.JCheckBox useLinesCheckBox; + // End of variables declaration//GEN-END:variables /** * Constructor method to set all necessary information to build statistics, charts and dialog title. - * @param numbers Numbers to build statistics and charts - * @param dataName Name of the numbers data (column title for example) + * + * @param numbers Numbers to build statistics and charts + * @param dataName Name of the numbers data (column title for example) * @param dialogTitle Title of the dialog window */ public GeneralNumberListStatisticsReportUI(Number[] numbers, String dataName, String dialogTitle) { @@ -92,9 +109,12 @@ public GeneralNumberListStatisticsReportUI(Number[] numbers, String dataName, St setChartControlsEnabled(statistics != null);//Disable chart controls if no numbers available } - public void setup(AttributeColumnsManipulator m, AttributeTable table, AttributeColumn column, DialogControls dialogControls) { + @Override + public void setup(AttributeColumnsManipulator m, GraphModel graphModel, Table table, Column column, + DialogControls dialogControls) { } + @Override public void setup(Manipulator m, DialogControls dialogControls) { } @@ -108,6 +128,7 @@ private void setChartControlsEnabled(boolean enabled) { divisionsComboBox.setEnabled(enabled); } + @Override public void unSetup() { if (reportDialog != null) { reportDialog.dispose(); @@ -123,14 +144,17 @@ public void unSetup() { } } + @Override public String getDisplayName() { return dialogTitle; } + @Override public JPanel getSettingsPanel() { return this; } + @Override public boolean isModal() { return false; } @@ -143,7 +167,8 @@ private void prepareBoxPlot() { private void prepareScatterPlot() { if (scatterPlot == null) { - scatterPlot = ChartsUtils.buildScatterPlot(numbers, dataName, useLinesCheckBox.isSelected(), useLinearRegression.isSelected()); + scatterPlot = ChartsUtils + .buildScatterPlot(numbers, dataName, useLinesCheckBox.isSelected(), useLinearRegression.isSelected()); } } @@ -151,7 +176,8 @@ private void prepareHistogram() { histogram = ChartsUtils.buildHistogram(numbers, dataName, histogramDivisions); } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -170,55 +196,71 @@ private void initComponents() { divisionsLabel = new javax.swing.JLabel(); divisionsComboBox = new javax.swing.JComboBox(); - configureBoxPlotButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/datalab/plugin/manipulators/resources/wooden-box.png"))); // NOI18N - configureBoxPlotButton.setText(org.openide.util.NbBundle.getMessage(GeneralNumberListStatisticsReportUI.class, "GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text")); // NOI18N + configureBoxPlotButton.setIcon( + ImageUtilities.loadImageIcon("DataLaboratoryPlugin/wooden-box.svg", false)); // NOI18N + configureBoxPlotButton.setText(org.openide.util.NbBundle.getMessage(GeneralNumberListStatisticsReportUI.class, + "GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text")); // NOI18N configureBoxPlotButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { configureBoxPlotButtonActionPerformed(evt); } }); - configureScatterPlotButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/datalab/plugin/manipulators/resources/chart-up.png"))); // NOI18N - configureScatterPlotButton.setText(org.openide.util.NbBundle.getMessage(GeneralNumberListStatisticsReportUI.class, "GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1")); // NOI18N + configureScatterPlotButton.setIcon(ImageUtilities.loadImageIcon("DataLaboratoryPlugin/chart-up.svg", false)); // NOI18N + configureScatterPlotButton.setText(org.openide.util.NbBundle + .getMessage(GeneralNumberListStatisticsReportUI.class, + "GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1")); // NOI18N configureScatterPlotButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { configureScatterPlotButtonActionPerformed(evt); } }); - showReportButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/datalab/plugin/manipulators/resources/application-block.png"))); // NOI18N - showReportButton.setText(org.openide.util.NbBundle.getMessage(GeneralNumberListStatisticsReportUI.class, "GeneralNumberListStatisticsReportUI.showReportButton.text")); // NOI18N + showReportButton.setIcon(ImageUtilities.loadImageIcon("DataLaboratoryPlugin/application-block.svg", false)); // NOI18N + showReportButton.setText(org.openide.util.NbBundle.getMessage(GeneralNumberListStatisticsReportUI.class, + "GeneralNumberListStatisticsReportUI.showReportButton.text")); // NOI18N showReportButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { showReportButtonActionPerformed(evt); } }); - useLinesCheckBox.setText(org.openide.util.NbBundle.getMessage(GeneralNumberListStatisticsReportUI.class, "GeneralNumberListStatisticsReportUI.useLinesCheckBox.text")); // NOI18N + useLinesCheckBox.setText(org.openide.util.NbBundle.getMessage(GeneralNumberListStatisticsReportUI.class, + "GeneralNumberListStatisticsReportUI.useLinesCheckBox.text")); // NOI18N useLinesCheckBox.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { useLinesCheckBoxActionPerformed(evt); } }); - useLinearRegression.setText(org.openide.util.NbBundle.getMessage(GeneralNumberListStatisticsReportUI.class, "GeneralNumberListStatisticsReportUI.useLinearRegression.text")); // NOI18N + useLinearRegression.setText(org.openide.util.NbBundle.getMessage(GeneralNumberListStatisticsReportUI.class, + "GeneralNumberListStatisticsReportUI.useLinearRegression.text")); // NOI18N useLinearRegression.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { useLinearRegressionActionPerformed(evt); } }); - configureHistogramButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/datalab/plugin/manipulators/resources/chart.png"))); // NOI18N - configureHistogramButton.setText(org.openide.util.NbBundle.getMessage(GeneralNumberListStatisticsReportUI.class, "GeneralNumberListStatisticsReportUI.configureHistogramButton.text")); // NOI18N + configureHistogramButton.setIcon(ImageUtilities.loadImageIcon("DataLaboratoryPlugin/chart.svg", false)); // NOI18N + configureHistogramButton.setText(org.openide.util.NbBundle.getMessage(GeneralNumberListStatisticsReportUI.class, + "GeneralNumberListStatisticsReportUI.configureHistogramButton.text")); // NOI18N configureHistogramButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { configureHistogramButtonActionPerformed(evt); } }); - divisionsLabel.setText(org.openide.util.NbBundle.getMessage(GeneralNumberListStatisticsReportUI.class, "GeneralNumberListStatisticsReportUI.divisionsLabel.text")); // NOI18N + divisionsLabel.setText(org.openide.util.NbBundle.getMessage(GeneralNumberListStatisticsReportUI.class, + "GeneralNumberListStatisticsReportUI.divisionsLabel.text")); // NOI18N divisionsComboBox.addItemListener(new java.awt.event.ItemListener() { + @Override public void itemStateChanged(java.awt.event.ItemEvent evt) { divisionsComboBoxItemStateChanged(evt); } @@ -228,77 +270,95 @@ public void itemStateChanged(java.awt.event.ItemEvent evt) { this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(showReportButton) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(configureHistogramButton, javax.swing.GroupLayout.DEFAULT_SIZE, 163, Short.MAX_VALUE) - .addComponent(configureScatterPlotButton, javax.swing.GroupLayout.DEFAULT_SIZE, 163, Short.MAX_VALUE) - .addComponent(configureBoxPlotButton, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 163, Short.MAX_VALUE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(useLinesCheckBox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(useLinearRegression)) - .addGroup(layout.createSequentialGroup() - .addGap(10, 10, 10) - .addComponent(divisionsLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(divisionsComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))) - .addContainerGap()) - .addComponent(jSeparator1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 393, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(showReportButton) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(configureHistogramButton, javax.swing.GroupLayout.DEFAULT_SIZE, 163, + Short.MAX_VALUE) + .addComponent(configureScatterPlotButton, javax.swing.GroupLayout.DEFAULT_SIZE, 163, + Short.MAX_VALUE) + .addComponent(configureBoxPlotButton, javax.swing.GroupLayout.Alignment.TRAILING, + javax.swing.GroupLayout.DEFAULT_SIZE, 163, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(useLinesCheckBox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(useLinearRegression)) + .addGroup(layout.createSequentialGroup() + .addGap(10, 10, 10) + .addComponent(divisionsLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(divisionsComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.PREFERRED_SIZE))))) + .addContainerGap()) + .addComponent(jSeparator1, javax.swing.GroupLayout.Alignment.TRAILING, + javax.swing.GroupLayout.DEFAULT_SIZE, 393, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(configureBoxPlotButton, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(11, 11, 11) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(configureScatterPlotButton) - .addComponent(useLinesCheckBox) - .addComponent(useLinearRegression)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(configureHistogramButton) - .addComponent(divisionsLabel) - .addComponent(divisionsComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(jSeparator1, javax.swing.GroupLayout.DEFAULT_SIZE, 1, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(showReportButton) - .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(configureBoxPlotButton, javax.swing.GroupLayout.PREFERRED_SIZE, 25, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(11, 11, 11) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(configureScatterPlotButton) + .addComponent(useLinesCheckBox) + .addComponent(useLinearRegression)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(configureHistogramButton) + .addComponent(divisionsLabel) + .addComponent(divisionsComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(jSeparator1, javax.swing.GroupLayout.DEFAULT_SIZE, 1, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(showReportButton) + .addContainerGap()) ); }// //GEN-END:initComponents - private void configureBoxPlotButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_configureBoxPlotButtonActionPerformed + private void configureBoxPlotButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_configureBoxPlotButtonActionPerformed prepareBoxPlot(); if (boxPlotDialog != null) { boxPlotDialog.setVisible(true); } else { - boxPlotDialog = new JFreeChartDialog(WindowManager.getDefault().getMainWindow(), boxPlot.getTitle().getText(), boxPlot, 300, 500); + boxPlotDialog = + new JFreeChartDialog(WindowManager.getDefault().getMainWindow(), boxPlot.getTitle().getText(), boxPlot, + 300, 500); } }//GEN-LAST:event_configureBoxPlotButtonActionPerformed - private void configureScatterPlotButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_configureScatterPlotButtonActionPerformed + private void configureScatterPlotButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_configureScatterPlotButtonActionPerformed prepareScatterPlot(); if (scatterPlotDialog != null) { scatterPlotDialog.setVisible(true); } else { - scatterPlotDialog = new JFreeChartDialog(WindowManager.getDefault().getMainWindow(), scatterPlot.getTitle().getText(), scatterPlot, 600, 400); + scatterPlotDialog = + new JFreeChartDialog(WindowManager.getDefault().getMainWindow(), scatterPlot.getTitle().getText(), + scatterPlot, 600, 400); } }//GEN-LAST:event_configureScatterPlotButtonActionPerformed - private void showReportButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showReportButtonActionPerformed + private void showReportButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_showReportButtonActionPerformed prepareBoxPlot(); prepareScatterPlot(); if (histogram == null) { prepareHistogram(); } - final String html = ChartsUtils.getStatisticsReportHTML(dataName, statistics, boxPlot, scatterPlot, histogram, boxPlotDialog != null ? boxPlotDialog.getChartSize() : null, scatterPlotDialog != null ? scatterPlotDialog.getChartSize() : null, histogramDialog != null ? histogramDialog.getChartSize() : null); + final String html = ChartsUtils.getStatisticsReportHTML(dataName, statistics, boxPlot, scatterPlot, histogram, + boxPlotDialog != null ? boxPlotDialog.getChartSize() : null, + scatterPlotDialog != null ? scatterPlotDialog.getChartSize() : null, + histogramDialog != null ? histogramDialog.getChartSize() : null); if (reportDialog != null) { reportDialog.dispose(); @@ -306,19 +366,22 @@ private void showReportButtonActionPerformed(java.awt.event.ActionEvent evt) {// reportDialog = new SimpleHTMLReport(WindowManager.getDefault().getMainWindow(), html); }//GEN-LAST:event_showReportButtonActionPerformed - private void useLinesCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_useLinesCheckBoxActionPerformed + private void useLinesCheckBoxActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_useLinesCheckBoxActionPerformed if (scatterPlot != null) { ChartsUtils.setScatterPlotLinesEnabled(scatterPlot, useLinesCheckBox.isSelected()); } }//GEN-LAST:event_useLinesCheckBoxActionPerformed - private void useLinearRegressionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_useLinearRegressionActionPerformed + private void useLinearRegressionActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_useLinearRegressionActionPerformed if (scatterPlot != null) { ChartsUtils.setScatterPlotLinearRegressionEnabled(scatterPlot, useLinearRegression.isSelected()); } }//GEN-LAST:event_useLinearRegressionActionPerformed - private void divisionsComboBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_divisionsComboBoxItemStateChanged + private void divisionsComboBoxItemStateChanged( + java.awt.event.ItemEvent evt) {//GEN-FIRST:event_divisionsComboBoxItemStateChanged this.histogramDivisions = divisionsComboBox.getSelectedIndex() + 1; if (histogramDialog != null) { prepareHistogram(); @@ -326,23 +389,15 @@ private void divisionsComboBoxItemStateChanged(java.awt.event.ItemEvent evt) {// } }//GEN-LAST:event_divisionsComboBoxItemStateChanged - private void configureHistogramButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_configureHistogramButtonActionPerformed + private void configureHistogramButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_configureHistogramButtonActionPerformed prepareHistogram(); if (histogramDialog != null) { histogramDialog.setVisible(true); } else { - histogramDialog = new JFreeChartDialog(WindowManager.getDefault().getMainWindow(), histogram.getTitle().getText(), histogram, 600, 400); + histogramDialog = + new JFreeChartDialog(WindowManager.getDefault().getMainWindow(), histogram.getTitle().getText(), + histogram, 600, 400); } }//GEN-LAST:event_configureHistogramButtonActionPerformed - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton configureBoxPlotButton; - private javax.swing.JButton configureHistogramButton; - private javax.swing.JButton configureScatterPlotButton; - private javax.swing.JComboBox divisionsComboBox; - private javax.swing.JLabel divisionsLabel; - private javax.swing.JSeparator jSeparator1; - private javax.swing.JButton showReportButton; - private javax.swing.JCheckBox useLinearRegression; - private javax.swing.JCheckBox useLinesCheckBox; - // End of variables declaration//GEN-END:variables } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/values/ClearAttributeValue.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/values/ClearAttributeValue.java index 9edf5c76c4..1fbefcef04 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/values/ClearAttributeValue.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/values/ClearAttributeValue.java @@ -1,99 +1,110 @@ /* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. + Copyright 2008-2010 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.values; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeRow; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.values.AttributeValueManipulator; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; /** * AttributeValueManipulator that sets a value to null when the column can have null values. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -public class ClearAttributeValue implements AttributeValueManipulator{ - private AttributeRow row; - private AttributeColumn column; +public class ClearAttributeValue implements AttributeValueManipulator { + + private Element row; + private Column column; - public void setup(AttributeRow row, AttributeColumn column) { - this.row=row; - this.column=column; + @Override + public void setup(Element row, Column column) { + this.row = row; + this.column = column; } + @Override public void execute() { - row.setValue(column.getIndex(), null); + row.setAttribute(column, null); } + @Override public String getName() { return NbBundle.getMessage(ClearAttributeValue.class, "ClearAttributeValue.name"); } + @Override public String getDescription() { return ""; } + @Override public boolean canExecute() { return Lookup.getDefault().lookup(AttributeColumnsController.class).canClearColumnData(column); } + @Override public ManipulatorUI getUI() { return null; } + @Override public int getType() { return 0; } + @Override public int getPosition() { return 0; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/clear-data.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/clear-data.svg", false); } - } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/values/ClearAttributeValueBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/values/ClearAttributeValueBuilder.java index 267f01dbc6..0327c81146 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/values/ClearAttributeValueBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/values/ClearAttributeValueBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.values; import org.gephi.datalab.spi.values.AttributeValueManipulator; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for ClearAttributeValue AttributeValueManipulatorBuilder. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=AttributeValueManipulatorBuilder.class) -public class ClearAttributeValueBuilder implements AttributeValueManipulatorBuilder{ +@ServiceProvider(service = AttributeValueManipulatorBuilder.class) +public class ClearAttributeValueBuilder implements AttributeValueManipulatorBuilder { + @Override public AttributeValueManipulator getAttributeValueManipulator() { return new ClearAttributeValue(); } diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/values/NumberListStatisticsReport.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/values/NumberListStatisticsReport.java index fb7cf85973..3905e91ae9 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/values/NumberListStatisticsReport.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/values/NumberListStatisticsReport.java @@ -39,66 +39,77 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.values; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeRow; -import org.gephi.data.attributes.api.AttributeUtils; import org.gephi.datalab.api.AttributeColumnsController; import org.gephi.datalab.plugin.manipulators.ui.GeneralNumberListStatisticsReportUI; import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.datalab.spi.values.AttributeValueManipulator; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; /** * AttributeValueManipulator that shows a report with statistics values and charts of a dynamic number/number list AttributeValue. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class NumberListStatisticsReport implements AttributeValueManipulator { private Number[] numbers; - private AttributeColumn column; + private Column column; - public void setup(AttributeRow row, AttributeColumn column) { + @Override + public void setup(Element row, Column column) { this.column = column; - AttributeUtils attributeUtils = AttributeUtils.getDefault(); - if (attributeUtils.isNumberListColumn(column) || attributeUtils.isDynamicNumberColumn(column)) { - numbers = Lookup.getDefault().lookup(AttributeColumnsController.class).getRowNumbers(row, new AttributeColumn[]{column}); + if (AttributeUtils.isNumberType(column.getTypeClass())) { + numbers = + Lookup.getDefault().lookup(AttributeColumnsController.class).getRowNumbers(row, new Column[] {column}); } } + @Override public void execute() { } + @Override public String getName() { return getMessage("NumberListStatisticsReport.name"); } + @Override public String getDescription() { return getMessage("NumberListStatisticsReport.description"); } + @Override public boolean canExecute() { return numbers != null && numbers.length > 1;//Column is number list column and there is numbers to show } + @Override public ManipulatorUI getUI() { return new GeneralNumberListStatisticsReportUI(numbers, column.getTitle(), getName()); } + @Override public int getType() { return 100; } + @Override public int getPosition() { return 0; } + @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/datalab/plugin/manipulators/resources/chart-up.png", true); + return ImageUtilities.loadImageIcon("DataLaboratoryPlugin/chart-up.svg", false); } private String getMessage(String resName) { diff --git a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/values/NumberListStatisticsReportBuilder.java b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/values/NumberListStatisticsReportBuilder.java index d3c99da735..dbec61a531 100644 --- a/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/values/NumberListStatisticsReportBuilder.java +++ b/modules/DataLaboratoryPlugin/src/main/java/org/gephi/datalab/plugin/manipulators/values/NumberListStatisticsReportBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.datalab.plugin.manipulators.values; import org.gephi.datalab.spi.values.AttributeValueManipulator; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Builder for NumberListStatisticsReport AttributeValueManipulatorBuilder. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ -@ServiceProvider(service=AttributeValueManipulatorBuilder.class) -public class NumberListStatisticsReportBuilder implements AttributeValueManipulatorBuilder{ +@ServiceProvider(service = AttributeValueManipulatorBuilder.class) +public class NumberListStatisticsReportBuilder implements AttributeValueManipulatorBuilder { + @Override public AttributeValueManipulator getAttributeValueManipulator() { return new NumberListStatisticsReport(); } diff --git a/modules/DataLaboratoryPlugin/src/main/nbm/manifest.mf b/modules/DataLaboratoryPlugin/src/main/nbm/manifest.mf index e3c4724c0b..bab6ffc755 100644 --- a/modules/DataLaboratoryPlugin/src/main/nbm/manifest.mf +++ b/modules/DataLaboratoryPlugin/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/datalab/plugin/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Plugin +OpenIDE-Module-Name: Data Laboratory Plugin \ No newline at end of file diff --git a/modules/DataLaboratoryPlugin/src/main/nbm/module.xml b/modules/DataLaboratoryPlugin/src/main/nbm/module.xml deleted file mode 100644 index 714fd31585..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle.properties index cf75259550..370d25bff8 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle.properties @@ -1,4 +1 @@ -OpenIDE-Module-Display-Category=Plugin -OpenIDE-Module-Name=Data Laboratory Plugin - OpenIDE-Module-Short-Description=Implementation of some Data Laboratory manipulators diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_ar.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_ca.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_ca.properties new file mode 100644 index 0000000000..e47c4096cb --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_ca.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=Implementaciσ d'algun manipulador del laboratori de dades diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_cs.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_cs.properties index 79f94fda47..15d4a62210 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_cs.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_cs.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-26 18\:24+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Short-Description=Zaveden\u00ed n\u011bkter\u00fdch manipul\u00e1tor\u016f datov\u00e9 laborato\u0159e +OpenIDE-Module-Short-Description=Zavedenν n\u011bkterύch manipulαtor\u016f datovι laborato\u0159e diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_de.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_de.properties new file mode 100644 index 0000000000..03ae68c7bf --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_de.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=Implementierung einiger Datenlabor Operatoren diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_es.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_es.properties index 6ea8751cc0..bf389159d7 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_es.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_es.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:10+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Short-Description=Implementaci\u00f3n de algunos manipuladores para el Laboratorio de Datos +OpenIDE-Module-Short-Description=Implementaciσn de algunos manipuladores para el Laboratorio de Datos diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_fr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_fr.properties index 8e5d18b80b..581d8335ab 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_fr.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_fr.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:10+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Implementation des manipulateurs dans le Data Laboratory +OpenIDE-Module-Short-Description=Implementation des manipulateurs dans le Data Laboratory diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_he.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_he.properties new file mode 100644 index 0000000000..8e18189e5a --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_he.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=\u05d9\u05e9\u05d5\u05dd \u05de\u05ea\u05e4\u05dc\u05dc\u05d9\u05dd \u05e9\u05dc \u05de\u05e2\u05d1\u05d3\u05ea \u05d4\u05e0\u05ea\u05d5\u05e0\u05d9\u05dd diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_hu.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_hu.properties new file mode 100644 index 0000000000..4a103c444c --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_hu.properties @@ -0,0 +1,3 @@ + + +OpenIDE-Module-Short-Description=N\u00E9h\u00E1ny Data Laboratory manipul\u00E1tor megval\u00F3s\u00EDt\u00E1sa diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_it.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_it.properties new file mode 100644 index 0000000000..963839ced6 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_it.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=Implementazione di alcuni Data Laboratory manipulators diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_ja.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_ja.properties index 2f770e5cf2..b6451fb49a 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_ja.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_ja.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-13 12\:19+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u30c7\u30fc\u30bf\u30fb\u30e9\u30dc\u30e9\u30c8\u30ea\u30fc\u30fb\u30de\u30cb\u30d4\u30e5\u30ec\u30fc\u30bf\u306e\u5b9f\u88c5 +OpenIDE-Module-Short-Description=\u30c7\u30fc\u30bf\u30fb\u30e9\u30dc\u30e9\u30c8\u30ea\u30fc\u30fb\u30de\u30cb\u30d4\u30e5\u30ec\u30fc\u30bf\u306e\u5b9f\u88c5 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_ko.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_ko.properties new file mode 100644 index 0000000000..a9f17a70bb --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_ko.properties @@ -0,0 +1,3 @@ + + +OpenIDE-Module-Short-Description=\uC77C\uBD80 \uB370\uC774\uD130 \uC2E4\uD5D8\uC2E4 \uC870\uC791\uAE30\uC758 \uAD6C\uD604 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_nl.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_nl.properties new file mode 100644 index 0000000000..e6e63a42c3 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_nl.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=Implementation of some Data Laboratory manipulators diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_pt.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_pt.properties new file mode 100644 index 0000000000..95e28262db --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_pt.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=Implementa\u00E7\u00E3o de alguns manipuladores para o Laborat\u00F3rio de Dados diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_pt_BR.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_pt_BR.properties index ef412858cb..5dcf93ddc4 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_pt_BR.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_pt_BR.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 18\:10+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Implementa\u00e7\u00e3o de alguns manipuladores para o Laborat\u00f3rio de Dados +OpenIDE-Module-Short-Description=Implementaηγo de alguns manipuladores para o Laboratσrio de Dados diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_ro.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_ro.properties new file mode 100644 index 0000000000..2e0c5ce796 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_ro.properties @@ -0,0 +1,3 @@ + + +OpenIDE-Module-Short-Description=Implementarea unor manipulatori pentru Laboratorul de Date diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_ru.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_ru.properties index f698b11aa5..18d6a29c01 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_ru.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_ru.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 13\:16+0000\nLast-Translator\: gephi \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0438 \u0414\u0430\u043d\u043d\u044b\u0445 +OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0438 \u0414\u0430\u043d\u043d\u044b\u0445 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_th.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_tr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_tr.properties new file mode 100644 index 0000000000..e6e63a42c3 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_tr.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=Implementation of some Data Laboratory manipulators diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_zh_CN.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_zh_CN.properties index 24c6e98e70..7769b79d92 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_zh_CN.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_zh_CN.properties @@ -1,8 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:18+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u4e00\u4e9b\u6570\u636e\u5b9e\u9a8c\u5ba4\u64cd\u4f5c\u7684\u5b89\u88c5\u542f\u7528 +OpenIDE-Module-Short-Description=\u4e00\u4e9b\u6570\u636e\u5b9e\u9a8c\u5ba4\u64cd\u4f5c\u7684\u5b89\u88c5\u542f\u7528 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_zh_TW.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_zh_TW.properties new file mode 100644 index 0000000000..bb426fd02e --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/Bundle_zh_TW.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=\u5efa\u7acb\u8cc7\u6599\u5be6\u9a57\u5ba4\u7684\u8cc7\u6599\u8655\u7406\u529f\u80fd diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/cs.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/cs.po deleted file mode 100644 index a5c2333e36..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/cs.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-26 18:24+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ZavedenΓ­ nΔ›kterΓ½ch manipulΓ‘torΕ― datovΓ© laboratoΕ™e" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/es.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/es.po deleted file mode 100644 index a0c2f4ebef..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/es.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:10+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplementaciΓ³n de algunos manipuladores para el Laboratorio de Datos" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/fr.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/fr.po deleted file mode 100644 index 417c7befae..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/fr.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:10+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implementation des manipulateurs dans le Data Laboratory" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/ja.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/ja.po deleted file mode 100644 index e2f3d47609..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/ja.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-13 12:19+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "γƒ‡γƒΌγ‚Ώγƒ»γƒ©γƒœγƒ©γƒˆγƒͺγƒΌγƒ»γƒžγƒ‹γƒ”γƒ₯レータγεŸθ£…" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_ar.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_ca.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_ca.properties new file mode 100644 index 0000000000..2a3353f69a --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_ca.properties @@ -0,0 +1,22 @@ +DeleteColumn.name=Elimina la columna +DeleteColumn.confirmation.message=Confirm to delete ''{0}''? +ClearColumnData.name=Neteja la columna +ClearColumnData.confirmation.message=Confirm to clear ''{0}''? +CopyDataToOtherColumn.name=Copia les dades a una altra columna +FillColumnWithValue.name=Fill column with a value +FillColumnWithValue.inputDialog.text=Choose a value to fill all rows: +DuplicateColumn.name=Duplica la columna +ColumnValuesFrequency.name=Calculate values frequency +ColumnValuesFrequency.description=Calculate the frequency of each value appearance. +ColumnValuesFrequency.report.header=

    Values frequencies report ''{0}''

    +ColumnValuesFrequency.report.piechart.title=Values frequencies pie chart +ColumnValuesFrequency.report.piechart.not-shown=There are more than 100 different values, pie chart is not shown. +NumberColumnStatisticsReport.name=Calcula les estadνstiques +NumberColumnStatisticsReport.description=Calculate statistics on a number or number list column. +CreateBooleanMatchesColumn.name=Create a boolean column from regex match +CreateBooleanMatchesColumn.description=Create a boolean column with values indicating if each of the selected values matches the regular expression. +CreateFoundGroupsListColumn.name=Create column with list of regex matching groups +CreateFoundGroupsListColumn.description=Create a string list column in which values are the matching groups results of the regular expression. +NegateBooleanColumn.name=Negate boolean values +ConvertColumnToDynamic.name=Convert column to dynamic +ConvertColumnToDynamic.description=Convert an existing column to a dynamic column and optionally replace it diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_cs.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_cs.properties index 3819cc4bb1..d52836bc27 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_cs.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_cs.properties @@ -1,51 +1,26 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:16+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -DeleteColumn.name=Smazat sloupec - -DeleteColumn.confirmation.message=Potvrdit smaz\u00e1n\u00ed ''{0}''? - -ClearColumnData.name=Vy\u010distit sloupec - -ClearColumnData.confirmation.message=Potvrdit vy\u010di\u0161t\u011bn\u00ed ''{0}''? - -CopyDataToOtherColumn.name=Kop\u00edrovat data na dal\u0161\u00ed sloupec - -FillColumnWithValue.name=Naplnit sloupec hodnotou - -FillColumnWithValue.inputDialog.text=Zvolte hodnotu kterou vyplnit v\u0161echny \u0159\u00e1dky\: - -DuplicateColumn.name=Kop\u00edrovat sloupec - -ColumnValuesFrequency.name=Spo\u010d\u00edtat \u010detnost hodnot - -ColumnValuesFrequency.description=Vypo\u010d\u00edtat \u010detnost v\u00fdskytu ka\u017ed\u00e9 hodnoty. - -ColumnValuesFrequency.report.header=

    Hl\u00e1\u0161en\u00ed \u010detnosti hodnot ''{0}''

    - -ColumnValuesFrequency.report.piechart.title=Kol\u00e1\u010dov\u00fd graf \u010detnosti hodnot - -ColumnValuesFrequency.report.piechart.not-shown=Existuje v\u00edce ne\u017e 100 r\u016fzn\u00fdch hodnot, kol\u00e1\u010dov\u00fd graf nen\u00ed zobrazen. - -NumberColumnStatisticsReport.name=Vypo\u010d\u00edtat statistiky - -NumberColumnStatisticsReport.description=Vypo\u010d\u00edtat statistiky \u010d\u00edsla nebo sloupec seznamu \u010d\u00edsel. - -CreateBooleanMatchesColumn.name=Vytvo\u0159it booleovsk\u00fd sloupec ze shody regul\u00e1rn\u00edho v\u00fdrazu - -CreateBooleanMatchesColumn.description=Vytvo\u0159it booleovsk\u00fd sloupec s hodnotami ozna\u010duj\u00edc\u00ed jestli ka\u017ed\u00e1 z vybran\u00fdch hodnot odpov\u00edd\u00e1 regul\u00e1rn\u00edmu v\u00fdrazu. - -CreateFoundGroupsListColumn.name=Vytvo\u0159it sloupec se seznamem skupin odpov\u00eddaj\u00edc\u00ed regul\u00e1rn\u00edmu v\u00fdrazu - -CreateFoundGroupsListColumn.description=Vytvo\u0159it sloupec se seznamen \u0159et\u011bzc\u016f, v n\u011bm\u017e hodnoty odpov\u00eddaj\u00ed skupinov\u00fdm v\u00fdsledk\u016fm regul\u00e1rn\u00edho v\u00fdrazu. - -NegateBooleanColumn.name=Negovat booleovsk\u00e9 hodnoty - -!ConvertColumnToDynamic.name= - -!ConvertColumnToDynamic.description= +DeleteColumn.name=Smazat sloupec +DeleteColumn.confirmation.message=Potvrdit smazαnν ''{0}''? +ClearColumnData.name=Vy\u010distit sloupec +ClearColumnData.confirmation.message=Potvrdit vy\u010di\u0161t\u011bnν ''{0}''? +CopyDataToOtherColumn.name=Kopνrovat data na dal\u0161ν sloupec +FillColumnWithValue.name=Naplnit sloupec hodnotou +FillColumnWithValue.inputDialog.text=Zvolte hodnotu kterou vyplnit v\u0161echny \u0159αdky: +DuplicateColumn.name=Kopνrovat sloupec + +ColumnValuesFrequency.name=Spo\u010dνtat \u010detnost hodnot +ColumnValuesFrequency.description=Vypo\u010dνtat \u010detnost vύskytu ka\u017edι hodnoty. +ColumnValuesFrequency.report.header=

    Hlα\u0161enν \u010detnosti hodnot ''{0}''

    +ColumnValuesFrequency.report.piechart.title=Kolα\u010dovύ graf \u010detnosti hodnot +ColumnValuesFrequency.report.piechart.not-shown=Existuje vνce ne\u017e 100 r\u016fznύch hodnot, kolα\u010dovύ graf nenν zobrazen. +NumberColumnStatisticsReport.name=Vypo\u010dνtat statistiky +NumberColumnStatisticsReport.description=Vypo\u010dνtat statistiky \u010dνsla nebo sloupec seznamu \u010dνsel. + +CreateBooleanMatchesColumn.name=Vytvo\u0159it booleovskύ sloupec ze shody regulαrnνho vύrazu +CreateBooleanMatchesColumn.description=Vytvo\u0159it booleovskύ sloupec s hodnotami ozna\u010dujνcν jestli ka\u017edα z vybranύch hodnot odpovνdα regulαrnνmu vύrazu. +CreateFoundGroupsListColumn.name=Vytvo\u0159it sloupec se seznamem skupin odpovνdajνcν regulαrnνmu vύrazu +CreateFoundGroupsListColumn.description=Vytvo\u0159it sloupec se seznamen \u0159et\u011bzc\u016f, v n\u011bm\u017e hodnoty odpovνdajν skupinovύm vύsledk\u016fm regulαrnνho vύrazu. + +NegateBooleanColumn.name=Negovat booleovskι hodnoty + +ConvertColumnToDynamic.name=P\u0159evιst sloupec na dynamickύ +ConvertColumnToDynamic.description=P\u0159evιst existujνcν sloupec na dynamickύ s mo\u017enostν jeho p\u0159emνst\u011bnν diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_de.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_de.properties new file mode 100644 index 0000000000..ab0a9375ae --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_de.properties @@ -0,0 +1,26 @@ +DeleteColumn.name=Spalte lφschen +DeleteColumn.confirmation.message=Soll ''{0}'' gelφscht werden? +ClearColumnData.name=Spalte leeren +ClearColumnData.confirmation.message=Soll ''{0}'' geleert werden? +CopyDataToOtherColumn.name=Daten in andere Spalte kopieren +FillColumnWithValue.name=Spalte mit einem Wert fόllen +FillColumnWithValue.inputDialog.text=Einen Wert wδhlen, mit dem die Zeilen gefόllt werden sollen: +DuplicateColumn.name=Spalte duplizieren + +ColumnValuesFrequency.name=Hδufigkeit der Werte berechnen +ColumnValuesFrequency.description=Hδufigkeit jedes vorkommenden Wertes berechnen. +ColumnValuesFrequency.report.header=

    Bericht όber Hδufigkeiten der Werte ''{0}''

    +ColumnValuesFrequency.report.piechart.title=Tortendiagramm όber die Hδufigkeiten der Werte +ColumnValuesFrequency.report.piechart.not-shown=Es wird kein Tortendiagramm angezeigt, da mehr als 100 verschiedene Werte vorhanden sind. +NumberColumnStatisticsReport.name=Statistiken berechnen +NumberColumnStatisticsReport.description=Statistik zu einer numerischen Spalte berechnen. + +CreateBooleanMatchesColumn.name=Erzeuge Spalte vom Typ Boolean aus Regex-Treffern +CreateBooleanMatchesColumn.description=Erzeuge Spalte vom Typ Boolean mit Werten, die anzeugen ob jeder der selektierten Werte mit dem regulδren Ausdruck όbereinstimmt. +CreateFoundGroupsListColumn.name=Erzeuge Spalte mit Liste der den regulδren Ausdrόcken entsprechenden Teilausdrόcke. +CreateFoundGroupsListColumn.description=Erzeuge Spalte vom Typ String-List deren Werte die den regulδren Ausdrόcken entsprechenden Teilausdrόcke sind. + +NegateBooleanColumn.name=Wahrheitswerte negieren + +ConvertColumnToDynamic.name=Wandle Spalte in eine dynamische Spalte +ConvertColumnToDynamic.description=Wandele eine bestehende Spalte in eine dynamische Spalte und, optional, ersetze diese. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_es.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_es.properties index 956f76a3b1..0e6324abd1 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_es.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_es.properties @@ -1,52 +1,22 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:24+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - DeleteColumn.name=Borrar columna - -DeleteColumn.confirmation.message=\u00bfConfirmar eliminaci\u00f3n de ''{0}''? - +DeleteColumn.confirmation.message=ΏConfirmar eliminaciσn de ''{0}''? ClearColumnData.name=Borrar datos de columna - -ClearColumnData.confirmation.message=\u00bfConfirmar borrado de datos de ''{0}''? - +ClearColumnData.confirmation.message=ΏConfirmar borrado de datos de ''{0}''? CopyDataToOtherColumn.name=Copiar datos a otra columna - FillColumnWithValue.name=Rellenar columna con un valor - -FillColumnWithValue.inputDialog.text=Elige un valor con el que rellenar todas las filas de la columna - +FillColumnWithValue.inputDialog.text=Elige un valor para rellenar todas las filas: DuplicateColumn.name=Duplicar columna - ColumnValuesFrequency.name=Calcular frecuencia de valores de columna - -ColumnValuesFrequency.description=Calcula la frecuencia de aparici\u00f3n de cada valor de una columna y muestra un informe - +ColumnValuesFrequency.description=Calcula la frecuencia en que aparece cada valor. ColumnValuesFrequency.report.header=

    Informe de frecuencia de valores para la columna ''{0}''

    - -ColumnValuesFrequency.report.piechart.title=Gr\u00e1fico de tarta de frecuencias de valores - -ColumnValuesFrequency.report.piechart.not-shown=Hay m\u00e1s de 100 valores diferentes, el gr\u00e1fico de tarta no es mostrado. - -NumberColumnStatisticsReport.name=Calcular estad\u00edsticas - -NumberColumnStatisticsReport.description=Calcula estad\u00edsticas de una columna num\u00e9rica o de lista de n\u00fameros y muestra un informe - -CreateBooleanMatchesColumn.name=Crear columna booleana a partir de expresi\u00f3n regular - -CreateBooleanMatchesColumn.description=Crea una nueva columna booleana con valores que indican si cada valor de la columna seleccionada se ajusta a la expresi\u00f3n regular proporcionada - -CreateFoundGroupsListColumn.name=Crear columna con lista de grupos que se ajustan a una expresi\u00f3n regular - -CreateFoundGroupsListColumn.description=Crea una nueva columna de tipo lista de cadenas de texto con valores que son la lista de grupos que se ajustan a la expresi\u00f3n regular proporcionada - +ColumnValuesFrequency.report.piechart.title=Grαfico de tarta de frecuencias de valores +ColumnValuesFrequency.report.piechart.not-shown=Hay mαs de 100 valores diferentes, el grαfico de tarta no es mostrado. +NumberColumnStatisticsReport.name=Calcular estadνsticas +NumberColumnStatisticsReport.description=Calcular las estad\u00EDsticas de un n\u00FAmero o columna de una lista de n\u00FAmeros. +CreateBooleanMatchesColumn.name=Crear columna booleana a partir de expresiσn regular +CreateBooleanMatchesColumn.description=Crear una columna booleana con valores que indiquen si cada uno de los valores seleccionados coincide con la expresi\u00F3n regular. +CreateFoundGroupsListColumn.name=Crear columna con lista de grupos que se ajustan a una expresiσn regular +CreateFoundGroupsListColumn.description=Crea una columna de lista de cadenas que da como resultado grupos coincidentes de expresiones regulares. NegateBooleanColumn.name=Negar columna booleana - -ConvertColumnToDynamic.name=Convertir columna a din\u00e1mica - -ConvertColumnToDynamic.description=Convertir una columna existente en din\u00e1mica y opcionalmente reemplazarla +ConvertColumnToDynamic.name=Convertir columna a dinαmica +ConvertColumnToDynamic.description=Convertir una columna existente en dinαmica y opcionalmente reemplazarla diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_fr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_fr.properties index 7920f8589e..43d4319c23 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_fr.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_fr.properties @@ -1,51 +1,26 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:16+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -DeleteColumn.name=Supprimer la colonne - -DeleteColumn.confirmation.message=Confirmer la suppression de ''{0}''? - -ClearColumnData.name=Effacer la colonne - -ClearColumnData.confirmation.message=Confirmer effacement de ''{0}''? - -CopyDataToOtherColumn.name=Copier les donn\u00e9es vers une colonne - -FillColumnWithValue.name=Remplir la colonne avec une valeur - -FillColumnWithValue.inputDialog.text=Valeur de remplissage pour toutes les lignes \: - -DuplicateColumn.name=Dupliquer la colonne - -ColumnValuesFrequency.name=Calculer les fr\u00e9quences - -ColumnValuesFrequency.description=Calcule la fr\u00e9quence de chaque apparition de valeur - -ColumnValuesFrequency.report.header=

    Rapport des fr\u00e9quences ''{0}''

    - -ColumnValuesFrequency.report.piechart.title=Diagramme circulaire des fr\u00e9quences - -ColumnValuesFrequency.report.piechart.not-shown=Diagramme non affich\u00e9 car il y a plus de 100 valeurs diff\u00e9rentes. - -NumberColumnStatisticsReport.name=Calculer les statistiques - -NumberColumnStatisticsReport.description=Calcule les statistiques sur une colonne de nombres ou de liste de nombres. - -CreateBooleanMatchesColumn.name=Cr\u00e9er une colonne bool\u00e9enne depuis une expression rationnelle - -CreateBooleanMatchesColumn.description=Cr\u00e9er une colonne bool\u00e9enne indiquant si chaque ligne correspond \u00e0 l'expression rationnelle. - -CreateFoundGroupsListColumn.name=Cr\u00e9er une colonne depuis une liste de groupes d'une expression rationnelle - -CreateFoundGroupsListColumn.description=Cr\u00e9er une colonne en liste dont les valeurs correspondent aux groupes de l'expression rationnelle. - -NegateBooleanColumn.name=Inverse les valeurs bool\u00e9nnes - -!ConvertColumnToDynamic.name= - -!ConvertColumnToDynamic.description= +DeleteColumn.name=Supprimer la colonne +DeleteColumn.confirmation.message=Confirmer la suppression de ''{0}''? +ClearColumnData.name=Effacer la colonne +ClearColumnData.confirmation.message=Confirmer effacement de ''{0}''? +CopyDataToOtherColumn.name=Copier les donnιes vers une colonne +FillColumnWithValue.name=Remplir la colonne avec une valeur +FillColumnWithValue.inputDialog.text=Valeur de remplissage pour toutes les lignes : +DuplicateColumn.name=Dupliquer la colonne + +ColumnValuesFrequency.name=Calculer les frιquences +ColumnValuesFrequency.description=Calcule la frιquence de chaque apparition de valeur +ColumnValuesFrequency.report.header=

    Rapport des frιquences ''{0}''

    +ColumnValuesFrequency.report.piechart.title=Diagramme circulaire des frιquences +ColumnValuesFrequency.report.piechart.not-shown=Diagramme non affichι car il y a plus de 100 valeurs diffιrentes. +NumberColumnStatisticsReport.name=Calculer les statistiques +NumberColumnStatisticsReport.description=Calcule les statistiques sur une colonne de nombres ou de liste de nombres. + +CreateBooleanMatchesColumn.name=Crιer une colonne boolιenne depuis une expression rationnelle +CreateBooleanMatchesColumn.description=Crιer une colonne boolιenne indiquant si chaque ligne correspond ΰ l'expression rationnelle. +CreateFoundGroupsListColumn.name=Crιer une colonne depuis une liste de groupes d'une expression rationnelle +CreateFoundGroupsListColumn.description=Crιer une colonne en liste dont les valeurs correspondent aux groupes de l'expression rationnelle. + +NegateBooleanColumn.name=Inverse les valeurs boolιnnes + +ConvertColumnToDynamic.name=Convertir la colonne en dynamique +ConvertColumnToDynamic.description=Convertir une colonne existante vers une colonne dynamique. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_he.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_he.properties new file mode 100644 index 0000000000..19b6d27b5d --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_he.properties @@ -0,0 +1,26 @@ +DeleteColumn.name=\u05de\u05d7\u05e7 \u05e2\u05de\u05d5\u05d3\u05d4 +DeleteColumn.confirmation.message=\u05d0\u05e9\u05e8 \u05de\u05d7\u05d9\u05e7\u05ea "{0}"? +ClearColumnData.name=\u05e0\u05e7\u05d4 \u05e2\u05de\u05d5\u05d3\u05d4 +ClearColumnData.confirmation.message=\u05d0\u05e9\u05e8 \u05e0\u05d9\u05e7\u05d5\u05d9 "{0}"? +CopyDataToOtherColumn.name=\u05d4\u05e2\u05ea\u05e7 \u05e0\u05ea\u05d5\u05e0\u05d9\u05dd \u05dc\u05e2\u05de\u05d5\u05d3\u05d4 \u05d0\u05d7\u05e8\u05ea +FillColumnWithValue.name=\u05de\u05dc\u05d0 \u05e2\u05de\u05d5\u05d3\u05d4 \u05e2\u05dd \u05e2\u05e8\u05da +FillColumnWithValue.inputDialog.text=\u05d1\u05d7\u05e8 \u05e2\u05e8\u05da \u05dc\u05de\u05d9\u05dc\u05d5\u05d9 \u05db\u05dc \u05d4\u05e9\u05d5\u05e8\u05d5\u05ea +DuplicateColumn.name=\u05e9\u05db\u05e4\u05dc \u05e2\u05de\u05d5\u05d3\u05d5\u05ea + +ColumnValuesFrequency.name=\u05d7\u05e9\u05d1 \u05e9\u05db\u05d9\u05d7\u05d5\u05ea \u05e2\u05e8\u05db\u05d9\u05dd +ColumnValuesFrequency.description=\u05d7\u05e9\u05d1 \u05e9\u05db\u05d9\u05d7\u05d5\u05ea \u05d4\u05d5\u05e4\u05e2\u05ea \u05db\u05dc \u05e2\u05e8\u05da +ColumnValuesFrequency.report.header=

    \u05d3\u05d5\u05d7 \u05e9\u05db\u05d9\u05d7\u05d5\u05ea \u05e2\u05e8\u05db\u05d9 "{0}"

    +ColumnValuesFrequency.report.piechart.title=\u05d2\u05e8\u05e3 \u05e4\u05d0\u05d9 \u05e9\u05dc \u05e9\u05db\u05d9\u05d7\u05d5\u05ea \u05e2\u05e8\u05db\u05d9\u05dd +ColumnValuesFrequency.report.piechart.not-shown=\u05e7\u05d9\u05d9\u05de\u05d9\u05dd \u05dc\u05de\u05e2\u05dc\u05d4 \u05de 100 \u05e2\u05e8\u05db\u05d9\u05dd \u05e9\u05d5\u05e0\u05d9\u05dd, \u05d2\u05e8\u05e3 \u05e4\u05d0\u05d9 \u05d0\u05d9\u05e0\u05d5 \u05de\u05d5\u05e6\u05d2 +NumberColumnStatisticsReport.name=\u05d7\u05d9\u05e9\u05d5\u05d1 \u05e1\u05d8\u05d8\u05d9\u05e1\u05d8\u05d9\u05e7\u05d5\u05ea +NumberColumnStatisticsReport.description=\u05d7\u05d9\u05e9\u05d5\u05d1 \u05e1\u05d8\u05d8\u05d9\u05e1\u05d8\u05d9\u05e7\u05d4 \u05e2\u05dc \u05de\u05e1\u05e4\u05e8 \u05d0\u05d5 \u05e2\u05dc \u05d8\u05d5\u05e8 \u05e9\u05dc \u05e8\u05e9\u05d9\u05de\u05ea \u05de\u05e1\u05e4\u05e8\u05d9\u05dd + +CreateBooleanMatchesColumn.name=\u05d9\u05e6\u05d9\u05e8\u05ea \u05d8\u05d5\u05e8 \u05d1\u05d5\u05dc\u05d9\u05d0\u05e0\u05d9 \u05de\u05d4\u05ea\u05d0\u05de\u05ea \u05d1\u05d9\u05d8\u05d5\u05d9 \u05e8\u05d2\u05d5\u05dc\u05e8\u05d9 +CreateBooleanMatchesColumn.description=\u05d9\u05e6\u05d9\u05e8\u05ea \u05d8\u05d5\u05e8 \u05d1\u05d5\u05dc\u05d9\u05d0\u05e0\u05d9 \u05e2\u05dd \u05e2\u05e8\u05db\u05d9\u05dd \u05d4\u05de\u05d9\u05d9\u05e6\u05d2\u05d9\u05dd \u05d4\u05d0\u05dd \u05db\u05dc \u05d0\u05d7\u05d3 \u05de\u05d4\u05e2\u05e8\u05db\u05d9\u05dd \u05d4\u05e0\u05d1\u05d7\u05e8\u05d9\u05dd \u05de\u05ea\u05d0\u05d9\u05de\u05d9\u05dd \u05dc\u05d1\u05d9\u05d8\u05d5\u05d9 \u05d4\u05e8\u05d2\u05d5\u05dc\u05e8\u05d9 +CreateFoundGroupsListColumn.name=\u05d9\u05e6\u05e8\u05ea \u05d8\u05d5\u05e8 \u05de\u05e8\u05e9\u05d9\u05de\u05ea \u05e7\u05d1\u05d5\u05e6\u05d5\u05ea \u05d4\u05ea\u05d0\u05de\u05ea \u05d1\u05d9\u05d8\u05d5\u05d9 \u05e8\u05d2\u05d5\u05dc\u05e8\u05d9 +CreateFoundGroupsListColumn.description=\u05d9\u05e6\u05d9\u05e8\u05ea \u05d8\u05d5\u05e8 \u05de\u05d7\u05e8\u05d5\u05d6\u05ea \u05d1\u05d4 \u05d4\u05e2\u05e8\u05db\u05d9\u05dd \u05d4\u05dd \u05ea\u05d5\u05e6\u05d0\u05d5\u05ea \u05d4\u05ea\u05d0\u05de\u05ea \u05e7\u05d1\u05d5\u05e6\u05d5\u05ea \u05e9\u05dc \u05d1\u05d9\u05d5\u05d8\u05d9\u05d9\u05dd \u05e8\u05d2\u05d5\u05dc\u05e8\u05d9\u05dd + +NegateBooleanColumn.name=\u05d4\u05d9\u05e4\u05d5\u05da \u05e2\u05e8\u05db\u05d9\u05dd \u05d1\u05d5\u05dc\u05d9\u05d0\u05e0\u05d9\u05dd + +ConvertColumnToDynamic.name=\u05d4\u05e4\u05d9\u05db\u05ea \u05d8\u05d5\u05e8 \u05dc\u05d3\u05d9\u05e0\u05d0\u05de\u05d9 +ConvertColumnToDynamic.description=\u05d4\u05e4\u05d9\u05db\u05ea \u05d8\u05d5\u05e8 \u05e7\u05d9\u05d9\u05dd \u05dc\u05d8\u05d5\u05e8 \u05d3\u05d9\u05e0\u05d0\u05de\u05d9 \u05d5\u05d4\u05d7\u05dc\u05e4\u05ea\u05d5 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_hu.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_hu.properties new file mode 100644 index 0000000000..f0fb20e26c --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_hu.properties @@ -0,0 +1,24 @@ + + +CreateFoundGroupsListColumn.name=Hozzon l\u00E9tre oszlopot a regex egyez\u0151 csoportok list\u00E1j\u00E1val +DuplicateColumn.name=Oszlop megkett\u0151z\u00E9se +DeleteColumn.confirmation.message=Meger\u0151s\u00EDti a(z) ''{0}'' t\u00F6rl\u00E9s\u00E9t? +ConvertColumnToDynamic.description=Konvert\u00E1lja a megl\u00E9v\u0151 oszlopot dinamikus oszlopp\u00E1, \u00E9s opcion\u00E1lisan cser\u00E9lje le +CopyDataToOtherColumn.name=Adatok m\u00E1sol\u00E1sa m\u00E1sik oszlopba +ClearColumnData.name=Oszlop t\u00F6rl\u00E9se +FillColumnWithValue.name=Az oszlop kit\u00F6lt\u00E9se \u00E9rt\u00E9kkel +ColumnValuesFrequency.report.piechart.title=\u00C9rt\u00E9kek gyakoris\u00E1gi k\u00F6rdiagramja +ClearColumnData.confirmation.message=Meger\u0151s\u00EDti a ''{0}'' t\u00F6rl\u00E9s\u00E9t? +NegateBooleanColumn.name=Logikai \u00E9rt\u00E9kek tagad\u00E1sa +NumberColumnStatisticsReport.description=Statisztik\u00E1k kisz\u00E1m\u00EDt\u00E1sa egy sz\u00E1m vagy sz\u00E1mlista oszlop\u00E1ban. +CreateBooleanMatchesColumn.name=Hozzon l\u00E9tre egy logikai oszlopot a regul\u00E1ris kifejez\u00E9sb\u0151l +ConvertColumnToDynamic.name=Oszlop \u00E1talak\u00EDt\u00E1sa dinamikuss\u00E1 +ColumnValuesFrequency.name=Sz\u00E1m\u00EDtsa ki az \u00E9rt\u00E9kek gyakoris\u00E1g\u00E1t +DeleteColumn.name=Oszlop t\u00F6rl\u00E9se +CreateBooleanMatchesColumn.description=Hozzon l\u00E9tre egy logikai oszlopot olyan \u00E9rt\u00E9kekkel, amelyek jelzik, hogy a kiv\u00E1lasztott \u00E9rt\u00E9kek mindegyike egyezik-e a regul\u00E1ris kifejez\u00E9ssel. +CreateFoundGroupsListColumn.description=Hozzon l\u00E9tre egy karakterl\u00E1nc-lista oszlopot, amelyben az \u00E9rt\u00E9kek a regul\u00E1ris kifejez\u00E9s egyez\u0151 csoporteredm\u00E9nyei. +ColumnValuesFrequency.report.piechart.not-shown=T\u00F6bb mint 100 k\u00FCl\u00F6nb\u00F6z\u0151 \u00E9rt\u00E9k l\u00E9tezik, a k\u00F6rdiagram nem jelenik meg. +ColumnValuesFrequency.report.header=

    Az \u00E9rt\u00E9kek gyakoris\u00E1gi jelent\u00E9se: ''{0}

    +ColumnValuesFrequency.description=Sz\u00E1m\u00EDtsa ki az egyes \u00E9rt\u00E9kek megjelen\u00E9si gyakoris\u00E1g\u00E1t. +FillColumnWithValue.inputDialog.text=V\u00E1lasszon egy \u00E9rt\u00E9ket az \u00F6sszes sor kit\u00F6lt\u00E9s\u00E9hez: +NumberColumnStatisticsReport.name=Statisztik\u00E1k sz\u00E1m\u00EDt\u00E1sa diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_it.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_it.properties new file mode 100644 index 0000000000..5aa4d1b80f --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_it.properties @@ -0,0 +1,22 @@ +DeleteColumn.name=Cancella colonna +DeleteColumn.confirmation.message=Confermi di cancellare ''{0}''? +ClearColumnData.name=Svuota colonna +ClearColumnData.confirmation.message=Confermi di svuotare ''{0}''? +CopyDataToOtherColumn.name=Copia i dati su altra colonna +FillColumnWithValue.name=Riempi colonna con un valore +FillColumnWithValue.inputDialog.text=Scegli un valore per riempire tutte le righe: +DuplicateColumn.name=Duplica colonna +ColumnValuesFrequency.name=Calcolare la frequenza dei valori +ColumnValuesFrequency.description=Calcola la frequenza di apparizione di ciascun valore. +ColumnValuesFrequency.report.header=

    Values frequencies report ''{0}''

    +ColumnValuesFrequency.report.piechart.title=Grafico a torta delle frequenze dei valori +ColumnValuesFrequency.report.piechart.not-shown=Esistono piω di 100 valori differenti, il grafico a torta non θ mostrato. +NumberColumnStatisticsReport.name=Calcola statistiche +NumberColumnStatisticsReport.description=Calcola le statistiche su una colonna di tipo numero o lista di numeri. +CreateBooleanMatchesColumn.name=Crea una colonna binaria dalle corrispondenze di tipo regex +CreateBooleanMatchesColumn.description=Create a boolean column with values indicating if each of the selected values matches the regular expression. +CreateFoundGroupsListColumn.name=Create column with list of regex matching groups +CreateFoundGroupsListColumn.description=Create a string list column in which values are the matching groups results of the regular expression. +NegateBooleanColumn.name=Inverti i valori binari +ConvertColumnToDynamic.name=Converti la colonna a dinamica +ConvertColumnToDynamic.description=Converti una colonna esistente a dinamica eventualmente rimpiazzandola diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_ja.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_ja.properties index 981af7b5fe..13f220fef6 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_ja.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_ja.properties @@ -1,51 +1,26 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:16+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -DeleteColumn.name=\u5217\u306e\u524a\u9664 - -DeleteColumn.confirmation.message=''{0}''\u3092\u524a\u9664\u3057\u3066\u3082\u3044\u3044\u3067\u3059\u304b\uff1f - -ClearColumnData.name=\u5217\u306e\u30af\u30ea\u30a2 - -ClearColumnData.confirmation.message=''{0}''\u3092\u30af\u30ea\u30a2\u3057\u3066\u3082\u3044\u3044\u3067\u3059\u304b\uff1f - -CopyDataToOtherColumn.name=\u30c7\u30fc\u30bf\u3092\u4ed6\u306e\u5217\u306b\u30b3\u30d4\u30fc - -FillColumnWithValue.name=\u5217\u3092\u5024\u3067\u57cb\u3081\u308b - -FillColumnWithValue.inputDialog.text=\u884c\u3092\u57cb\u3081\u308b\u5024\u3092\u9078\u629e\: - -DuplicateColumn.name=\u5217\u3092\u8907\u5199 - -ColumnValuesFrequency.name=\u5024\u306e\u983b\u5ea6\u3092\u8a08\u7b97 - -ColumnValuesFrequency.description=\u305d\u308c\u305e\u308c\u306e\u5024\u306e\u51fa\u73fe\u306e\u983b\u5ea6\u3092\u8a08\u7b97 - -ColumnValuesFrequency.report.header=

    \u5024\u983b\u5ea6\u30ec\u30dd\u30fc\u30c8''{0}''

    - -ColumnValuesFrequency.report.piechart.title=\u5024\u983b\u5ea6\u5186\u30b0\u30e9\u30d5 - -ColumnValuesFrequency.report.piechart.not-shown=100\u4ee5\u4e0a\u306e\u5024\u304c\u3042\u308b\u305f\u3081\u5186\u30b0\u30e9\u30d5\u306f\u8868\u793a\u3055\u308c\u307e\u305b\u3093\u3002 - -NumberColumnStatisticsReport.name=\u7d71\u8a08\u91cf\u306e\u8a08\u7b97 - -NumberColumnStatisticsReport.description=\u6570\u5024\u307e\u305f\u306f\u6570\u5024\u30ea\u30b9\u30c8\u306e\u5217\u306b\u95a2\u3059\u308b\u7d71\u8a08\u91cf\u3092\u8a08\u7b97 - -CreateBooleanMatchesColumn.name=\u6b63\u898f\u8868\u73fe\u306e\u30de\u30c3\u30c1\u304b\u3089\u30d6\u30fc\u30eb\u5024\u306e\u5217\u3092\u4f5c\u6210 - -CreateBooleanMatchesColumn.description=\u9078\u629e\u3055\u308c\u305f\u5024\u306e\u5404\u3005\u306f\u6b63\u898f\u8868\u73fe\u306b\u4e00\u81f4\u3059\u308c\u3070\u3001\u793a\u3059\u5024\u3092\u6301\u3064\u30d6\u30fc\u30eb\u5217\u3092\u4f5c\u6210 - -CreateFoundGroupsListColumn.name=\u6b63\u898f\u8868\u73fe\u306b\u4e00\u81f4\u3059\u308b\u30b0\u30eb\u30fc\u30d7\u306e\u30ea\u30b9\u30c8\u3067\u5217\u3092\u4f5c\u6210 - -CreateFoundGroupsListColumn.description=\u5024\u304c\u6b63\u898f\u8868\u73fe\u306e\u4e00\u81f4\u3059\u308b\u30b0\u30eb\u30fc\u30d7\u306e\u7d50\u679c\u3055\u308c\u3066\u3044\u308b\u6587\u5b57\u5217\u30ea\u30b9\u30c8\u306e\u5217\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002 - -NegateBooleanColumn.name=\u30d6\u30fc\u30eb\u5024\u3092\u62d2\u5426 - -!ConvertColumnToDynamic.name= - -!ConvertColumnToDynamic.description= +DeleteColumn.name=\u5217\u306e\u524a\u9664 +DeleteColumn.confirmation.message=''{0}''\u3092\u524a\u9664\u3057\u3066\u3082\u3044\u3044\u3067\u3059\u304b\uff1f +ClearColumnData.name=\u5217\u306e\u30af\u30ea\u30a2 +ClearColumnData.confirmation.message=''{0}''\u3092\u30af\u30ea\u30a2\u3057\u3066\u3082\u3044\u3044\u3067\u3059\u304b\uff1f +CopyDataToOtherColumn.name=\u30c7\u30fc\u30bf\u3092\u4ed6\u306e\u5217\u306b\u30b3\u30d4\u30fc +FillColumnWithValue.name=\u5217\u3092\u5024\u3067\u57cb\u3081\u308b +FillColumnWithValue.inputDialog.text=\u884c\u3092\u57cb\u3081\u308b\u5024\u3092\u9078\u629e: +DuplicateColumn.name=\u5217\u3092\u8907\u5199 + +ColumnValuesFrequency.name=\u5024\u306e\u983b\u5ea6\u3092\u8a08\u7b97 +ColumnValuesFrequency.description=\u305d\u308c\u305e\u308c\u306e\u5024\u306e\u51fa\u73fe\u306e\u983b\u5ea6\u3092\u8a08\u7b97 +ColumnValuesFrequency.report.header=

    \u5024\u983b\u5ea6\u30ec\u30dd\u30fc\u30c8''{0}''

    +ColumnValuesFrequency.report.piechart.title=\u5024\u983b\u5ea6\u5186\u30b0\u30e9\u30d5 +ColumnValuesFrequency.report.piechart.not-shown=100\u4ee5\u4e0a\u306e\u5024\u304c\u3042\u308b\u305f\u3081\u5186\u30b0\u30e9\u30d5\u306f\u8868\u793a\u3055\u308c\u307e\u305b\u3093\u3002 +NumberColumnStatisticsReport.name=\u7d71\u8a08\u91cf\u306e\u8a08\u7b97 +NumberColumnStatisticsReport.description=\u6570\u5024\u307e\u305f\u306f\u6570\u5024\u30ea\u30b9\u30c8\u306e\u5217\u306b\u95a2\u3059\u308b\u7d71\u8a08\u91cf\u3092\u8a08\u7b97 + +CreateBooleanMatchesColumn.name=\u6b63\u898f\u8868\u73fe\u306e\u30de\u30c3\u30c1\u304b\u3089\u30d6\u30fc\u30eb\u5024\u306e\u5217\u3092\u4f5c\u6210 +CreateBooleanMatchesColumn.description=\u9078\u629e\u3055\u308c\u305f\u5024\u306e\u5404\u3005\u306f\u6b63\u898f\u8868\u73fe\u306b\u4e00\u81f4\u3059\u308c\u3070\u3001\u793a\u3059\u5024\u3092\u6301\u3064\u30d6\u30fc\u30eb\u5217\u3092\u4f5c\u6210 +CreateFoundGroupsListColumn.name=\u6b63\u898f\u8868\u73fe\u306b\u4e00\u81f4\u3059\u308b\u30b0\u30eb\u30fc\u30d7\u306e\u30ea\u30b9\u30c8\u3067\u5217\u3092\u4f5c\u6210 +CreateFoundGroupsListColumn.description=\u5024\u304c\u6b63\u898f\u8868\u73fe\u306e\u4e00\u81f4\u3059\u308b\u30b0\u30eb\u30fc\u30d7\u306e\u7d50\u679c\u3055\u308c\u3066\u3044\u308b\u6587\u5b57\u5217\u30ea\u30b9\u30c8\u306e\u5217\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002 + +NegateBooleanColumn.name=\u30d6\u30fc\u30eb\u5024\u3092\u62d2\u5426 + +# ConvertColumnToDynamic.name=Convert column to dynamic +# ConvertColumnToDynamic.description=Convert an existing column to a dynamic column and optionally replace it diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_ko.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_ko.properties new file mode 100644 index 0000000000..432ca35a94 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_ko.properties @@ -0,0 +1,24 @@ + + +ColumnValuesFrequency.description=\uAC12 \uCD9C\uD604 \uBE48\uB3C4\uB97C \uACC4\uC0B0\uD569\uB2C8\uB2E4. +DeleteColumn.name=\uCEEC\uB7FC \uC0AD\uC81C\uD558\uAE30 +CopyDataToOtherColumn.name=\uB2E4\uB978 \uCEEC\uB7FC\uC5D0 \uB370\uC774\uD130 \uBCF5\uC0AC\uD558\uAE30 +FillColumnWithValue.name=\uCEEC\uB7FC\uC744 \uAC12\uC73C\uB85C \uCC44\uC6B0\uAE30 +ClearColumnData.confirmation.message=''{0}''\uC744 \uC9C0\uC6B8\uAE4C\uC694? +ClearColumnData.name=\uCEEC\uB7FC \uC9C0\uC6B0\uAE30 +ColumnValuesFrequency.name=\uAC12 \uBE48\uB3C4 \uACC4\uC0B0\uD558\uAE30 +NumberColumnStatisticsReport.name=\uD1B5\uACC4\uCE58 \uACC4\uC0B0\uD558\uAE30 +CreateBooleanMatchesColumn.name=\uC815\uADDC\uC2DD \uACB0\uACFC\uB85C bool\uD615 \uCEEC\uB7FC \uC0DD\uC131\uD558\uAE30 +NegateBooleanColumn.name=bool \uAC12\uC744 \uB4A4\uC9D1\uAE30 +ConvertColumnToDynamic.name=\uB3D9\uC801 \uCEEC\uB7FC\uC73C\uB85C \uBCC0\uD658\uD558\uAE30 +DeleteColumn.confirmation.message=\uC815\uB9D0\uB85C {0}\uC744 \uC0AD\uC81C\uD560\uAE4C\uC694? +FillColumnWithValue.inputDialog.text=\uBAA8\uB4E0 \uD589\uC5D0 \uCC44\uC6B8 \uAC12 \uC120\uD0DD\uD558\uAE30: +DuplicateColumn.name=\uCEEC\uB7FC \uBCF5\uC81C\uD558\uAE30 +ColumnValuesFrequency.report.header=

    ''{0}'' \uAC12 \uBE48\uB3C4 \uBCF4\uACE0

    +ColumnValuesFrequency.report.piechart.title=\uD30C\uC774 \uCC28\uD2B8 \uAC12 \uBE48\uB3C4 +ColumnValuesFrequency.report.piechart.not-shown=100 \uAC1C \uC774\uC0C1\uC758 \uAC12\uC774 \uC788\uC74C. \uD30C\uC774 \uCC28\uD2B8 \uD45C\uC2DC \uC548 \uB428. +NumberColumnStatisticsReport.description=\uC22B\uC790\uB098 \uC22B\uC790 \uB9AC\uC2A4\uD2B8 \uCEEC\uB7FC\uC5D0 \uB300\uD55C \uD1B5\uACC4\uCE58\uB97C \uACC4\uC0B0\uD569\uB2C8\uB2E4. +CreateBooleanMatchesColumn.description=\uC120\uD0DD\uB41C \uAC12\uB4E4\uC774 \uC815\uADDC\uC2DD \uD45C\uD604\uC5D0 \uB9DE\uB294\uC9C0 \uB098\uD0C0\uB0B4\uB294 \uAC12\uC73C\uB85C bool\uD615 \uCEEC\uB7FC\uC744 \uC0DD\uC131\uD569\uB2C8\uB2E4. +CreateFoundGroupsListColumn.name=\uC815\uADDC\uC2DD \uB9E4\uCE58 \uADF8\uB8F9 \uB9AC\uC2A4\uD2B8\uB85C \uCEEC\uB7FC \uC0DD\uC131\uD558\uAE30 +ConvertColumnToDynamic.description=\uAE30\uC874 \uCEEC\uB7FC\uC744 \uB3D9\uC801 \uCEEC\uB7FC\uC73C\uB85C \uBCC0\uD658\uD558\uACE0 \uC120\uD0DD\uC801\uC73C\uB85C \uB300\uCCB4\uD569\uB2C8\uB2E4 +CreateFoundGroupsListColumn.description=\uC815\uADDC\uC2DD \uD45C\uD604\uC758 \uB9E4\uCE6D \uADF8\uB8F9 \uACB0\uACFC\uAC00 \uB418\uB294 \uC2A4\uD2B8\uB9C1 \uB9AC\uC2A4\uD2B8 \uCEEC\uB7FC\uC744 \uC0DD\uC131\uD569\uB2C8\uB2E4. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_nl.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_nl.properties new file mode 100644 index 0000000000..a5b0fa7cda --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_nl.properties @@ -0,0 +1,22 @@ +DeleteColumn.name=Kolom verwijderen +DeleteColumn.confirmation.message=Confirm to delete ''{0}''? +ClearColumnData.name=Kolom wissen +ClearColumnData.confirmation.message=Confirm to clear ''{0}''? +CopyDataToOtherColumn.name=Gegevens naar andere kolom kopiλren +FillColumnWithValue.name=Kolom met een waarde vullen +FillColumnWithValue.inputDialog.text=Choose a value to fill all rows: +DuplicateColumn.name=Kolom dupliceren +ColumnValuesFrequency.name=Calculate values frequency +ColumnValuesFrequency.description=Calculate the frequency of each value appearance. +ColumnValuesFrequency.report.header=

    Values frequencies report ''{0}''

    +ColumnValuesFrequency.report.piechart.title=Values frequencies pie chart +ColumnValuesFrequency.report.piechart.not-shown=There are more than 100 different values, pie chart is not shown. +NumberColumnStatisticsReport.name=Statistieken berekenen +NumberColumnStatisticsReport.description=Calculate statistics on a number or number list column. +CreateBooleanMatchesColumn.name=Create a boolean column from regex match +CreateBooleanMatchesColumn.description=Create a boolean column with values indicating if each of the selected values matches the regular expression. +CreateFoundGroupsListColumn.name=Create column with list of regex matching groups +CreateFoundGroupsListColumn.description=Create a string list column in which values are the matching groups results of the regular expression. +NegateBooleanColumn.name=Negate boolean values +ConvertColumnToDynamic.name=Convert column to dynamic +ConvertColumnToDynamic.description=Convert an existing column to a dynamic column and optionally replace it diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_pt.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_pt.properties new file mode 100644 index 0000000000..5fcc97f8b1 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_pt.properties @@ -0,0 +1,22 @@ +ClearColumnData.name=Limpar dados da coluna +ClearColumnData.confirmation.message=Confirma a limpeza dos dados da coluna ''{0}''? +ColumnValuesFrequency.description=Calcula a frequ\u00EAncia de ocorr\u00EAncia de cada valor de uma coluna e exibe um relat\u00F3rio. +CreateBooleanMatchesColumn.name=Criar coluna booleana a partir de uma express\u00E3o regular +CreateFoundGroupsListColumn.name=Criar coluna com a lista de grupos que atendem a uma express\u00E3o regular +NegateBooleanColumn.name=Negar coluna booleana +ConvertColumnToDynamic.name=Converter a coluna para o tipo din\u00E2mico +NumberColumnStatisticsReport.description=Calcula estat\u00EDsticas de uma coluna num\u00E9rica ou de lista de n\u00FAmeros e mostra um relat\u00F3rio. +CreateBooleanMatchesColumn.description=Cria uma coluna booleana com valores que indicam se cada valor da coluna selecionada corresponde \u00E0 express\u00E3o regular fornecida. +CreateFoundGroupsListColumn.description=Cria uma coluna de tipo lista de cadeias com valores preenchidos com a lista de grupos que correspondem \u00E0 express\u00E3o regular fornecida. +DeleteColumn.name=Apagar coluna +DeleteColumn.confirmation.message=Confirma apagar ''{0}''? +CopyDataToOtherColumn.name=Copiar dados para outra coluna +FillColumnWithValue.name=Preencher coluna com um valor +FillColumnWithValue.inputDialog.text=Escolha um valor para preencher todas as linhas: +DuplicateColumn.name=Duplicar coluna +ColumnValuesFrequency.name=Calcular a frequ\u00EAncia de valores de coluna +ColumnValuesFrequency.report.header=

    Relat\u00F3rio de frequ\u00EAncias de valores para a coluna ''{0}''

    +ColumnValuesFrequency.report.piechart.title=Gr\u00E1fico de pizza de frequ\u00EAncias de valores +ColumnValuesFrequency.report.piechart.not-shown=Existem mais que 100 valores diferentes, o gr\u00E1fico de pizza n\u00E3o ser\u00E1 exibido. +NumberColumnStatisticsReport.name=Calcular estat\u00EDsticas +ConvertColumnToDynamic.description=Converter uma coluna existente para uma coluna din\u00E2mica e opcionalmente substitu\u00ED-la diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_pt_BR.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_pt_BR.properties index 16e5a08a7a..a6b5ff58cd 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_pt_BR.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_pt_BR.properties @@ -1,51 +1,26 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:16+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -DeleteColumn.name=Excluir coluna - -DeleteColumn.confirmation.message=Confirma a exclus\u00e3o de ''{0}''? - -ClearColumnData.name=Limpar dados da coluna - -ClearColumnData.confirmation.message=Confirma a limpeza dos dados da coluna ''{0}''? - -CopyDataToOtherColumn.name=Copiar dados para outra coluna - -FillColumnWithValue.name=Preencher coluna com um valor - -FillColumnWithValue.inputDialog.text=Escolha um valor para preencher todas as linhas\: - -DuplicateColumn.name=Duplicar coluna - -ColumnValuesFrequency.name=Calcular a frequ\u00eancia de valores de coluna - -ColumnValuesFrequency.description=Calcula a frequ\u00eancia de ocorr\u00eancia de cada valor de uma coluna e exibe um relat\u00f3rio - -ColumnValuesFrequency.report.header=

    Relat\u00f3rio de frequ\u00eancias de valores para a coluna ''{0}''

    - -ColumnValuesFrequency.report.piechart.title=Gr\u00e1fico de pizza de frequ\u00eancias de valores - -ColumnValuesFrequency.report.piechart.not-shown=Existem mais de 100 diferentes valores, o gr\u00e1fico de pizza n\u00e3o ser\u00e1 exibido. - -NumberColumnStatisticsReport.name=Calcular estat\u00edsticas - -NumberColumnStatisticsReport.description=Calcula estat\u00edsticas de una coluna num\u00e9rica ou de lista de n\u00fameros e mostra um relat\u00f3rio - -CreateBooleanMatchesColumn.name=Criar coluna booleana a partir de uma express\u00e3o regular - -CreateBooleanMatchesColumn.description=Cria uma nova coluna booleana com valores que indicam se cada valor da coluna selecionada atende \u00e0 express\u00e3o regular fornecida - -CreateFoundGroupsListColumn.name=Criar coluna com a lista de grupos que atendem a uma express\u00e3o regular - -CreateFoundGroupsListColumn.description=Cria uma nova columna de tipo lista de strings com valores preenchidos com a lista de grupos que atendem \u00e0 express\u00e3o regular fornecida - -NegateBooleanColumn.name=Negar coluna booleana - -!ConvertColumnToDynamic.name= - -!ConvertColumnToDynamic.description= +DeleteColumn.name=Excluir coluna +DeleteColumn.confirmation.message=Confirma a exclusγo de ''{0}''? +ClearColumnData.name=Limpar dados da coluna +ClearColumnData.confirmation.message=Confirma a limpeza dos dados da coluna ''{0}''? +CopyDataToOtherColumn.name=Copiar dados para outra coluna +FillColumnWithValue.name=Preencher coluna com um valor +FillColumnWithValue.inputDialog.text=Escolha um valor para preencher todas as linhas: +DuplicateColumn.name=Duplicar coluna + +ColumnValuesFrequency.name=Calcular a frequκncia de valores de coluna +ColumnValuesFrequency.description=Calcula a frequκncia de ocorrκncia de cada valor de uma coluna e exibe um relatσrio +ColumnValuesFrequency.report.header=

    Relatσrio de frequκncias de valores para a coluna ''{0}''

    +ColumnValuesFrequency.report.piechart.title=Grαfico de pizza de frequκncias de valores +ColumnValuesFrequency.report.piechart.not-shown=Existem mais de 100 diferentes valores, o grαfico de pizza nγo serα exibido. +NumberColumnStatisticsReport.name=Calcular estatνsticas +NumberColumnStatisticsReport.description=Calcula estatνsticas de una coluna numιrica ou de lista de nϊmeros e mostra um relatσrio + +CreateBooleanMatchesColumn.name=Criar coluna booleana a partir de uma expressγo regular +CreateBooleanMatchesColumn.description=Cria uma nova coluna booleana com valores que indicam se cada valor da coluna selecionada atende ΰ expressγo regular fornecida +CreateFoundGroupsListColumn.name=Criar coluna com a lista de grupos que atendem a uma expressγo regular +CreateFoundGroupsListColumn.description=Cria uma nova columna de tipo lista de strings com valores preenchidos com a lista de grupos que atendem ΰ expressγo regular fornecida + +NegateBooleanColumn.name=Negar coluna booleana + +ConvertColumnToDynamic.name=Converter a coluna para o tipo dinβmico +ConvertColumnToDynamic.description=Converter uma coluna existente para uma coluna dinβmica e opcionalmente substituν-la diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_ro.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_ro.properties new file mode 100644 index 0000000000..337bb758df --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_ro.properties @@ -0,0 +1,24 @@ + + +DeleteColumn.confirmation.message=Confirm\u0103 \u0219tergerea ''{0}''? +ClearColumnData.name=Gole\u0219te coloana +CopyDataToOtherColumn.name=Copiaz\u0103 datele \u00EEn alt\u0103 coloan\u0103 +FillColumnWithValue.name=Umple coloana cu o valoare +DuplicateColumn.name=Duplic\u0103 o coloan\u0103 +ColumnValuesFrequency.name=Calculeaz\u0103 frecven\u021Ba valorilor +ColumnValuesFrequency.description=Calculeaz\u0103 frecven\u021Ba de apari\u021Bie a fiec\u0103rei valori. +ColumnValuesFrequency.report.header=

    Raport frecven\u021Be valori ''{0}''

    +ColumnValuesFrequency.report.piechart.title=Diagram\u0103 radial\u0103 frecven\u021Be valori +DeleteColumn.name=\u0218terge coloana +FillColumnWithValue.inputDialog.text=Alege o valoare cu care vor fi umplute toate r\u00E2ndurile: +NumberColumnStatisticsReport.name=Calculeaz\u0103 statistici +CreateBooleanMatchesColumn.name=Creaz\u0103 o coloan\u0103 de valori booleene dintr-o expresie regulat\u0103 +CreateBooleanMatchesColumn.description=Creaz\u0103 o coloan\u0103 de valori booleene care indic\u0103 dac\u0103 valorile selectate se potrivesc cu expresia regulat\u0103. +CreateFoundGroupsListColumn.name=Creaz\u0103 o coloan\u0103 cu liste de grupuri de potrivire regex +NegateBooleanColumn.name=Neag\u0103 valorile booleene +ConvertColumnToDynamic.name=Converte\u0219te coloana \u00EEntr-una dinamic\u0103 +ConvertColumnToDynamic.description=Converte\u0219te o coloan\u0103 existent\u0103 \u00EEntr-o coloan\u0103 dinamic\u0103 \u0219i, op\u021Bional, o \u00EEnlocuie\u0219te +ClearColumnData.confirmation.message=Confirm\u0103 golirea ''{0}''? +ColumnValuesFrequency.report.piechart.not-shown=Exist\u0103 mai mult de 100 valori diferite, diagrama radial\u0103 nu este afi\u0219at\u0103. +NumberColumnStatisticsReport.description=Calculeaz\u0103 statistici pe o coloan\u0103 de numere sau liste de numere. +CreateFoundGroupsListColumn.description=Creaz\u0103 o coloan\u0103 de liste de \u0219iruri de caractere \u00EEn care valorile sunt grupurile de potrivire g\u0103site de expresia regulat\u0103. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_ru.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_ru.properties index d457f5885f..6705ccf9a0 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_ru.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_ru.properties @@ -1,51 +1,26 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:16+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -DeleteColumn.name=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 - -DeleteColumn.confirmation.message=\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 ''{0}''? - -ClearColumnData.name=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0435 - -ClearColumnData.confirmation.message=\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0435 ''{0}''? - -CopyDataToOtherColumn.name=\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 - -FillColumnWithValue.name=\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c - -FillColumnWithValue.inputDialog.text=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0435 - -DuplicateColumn.name=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043f\u0438\u044e \u043a\u043e\u043b\u043e\u043d\u043a\u0438 - -ColumnValuesFrequency.name=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0435 - -ColumnValuesFrequency.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0435 \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u043e\u0442\u0447\u0451\u0442 - -ColumnValuesFrequency.report.header=

    \u041e\u0442\u0447\u0451\u0442 \u043f\u043e \u0447\u0430\u0441\u0442\u043e\u0442\u0430\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0435 ''{0}''

    - -ColumnValuesFrequency.report.piechart.title=\u041a\u0440\u0443\u0433\u043e\u0432\u0430\u044f \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u0447\u0430\u0441\u0442\u043e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 - -ColumnValuesFrequency.report.piechart.not-shown=\u0422.\u043a. \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e \u0431\u043e\u043b\u0435\u0435 100 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043a\u0440\u0443\u0433\u043e\u0432\u0430\u044f \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0435 \u0431\u044b\u043b\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0430. - -NumberColumnStatisticsReport.name=\u0420\u0430\u0441\u0447\u0451\u0442 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u043f\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0443 \u0441 \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 - -NumberColumnStatisticsReport.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0443 \u0441 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u043e\u0442\u0447\u0451\u0442 - -CreateBooleanMatchesColumn.name=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u0441 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f - -CreateBooleanMatchesColumn.description=\u0421\u043e\u0437\u0434\u0430\u0435\u0442 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0441 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044f, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0442 \u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u043c\u0443 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e - -CreateFoundGroupsListColumn.name=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u043c\u0430\u0441\u043a\u0435, \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c - -CreateFoundGroupsListColumn.description=\u0421\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0433\u0440\u0443\u043f\u043f, \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c - -NegateBooleanColumn.name=\u0418\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u0441 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 - -!ConvertColumnToDynamic.name= - -!ConvertColumnToDynamic.description= +DeleteColumn.name=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 +DeleteColumn.confirmation.message=\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 ''{0}''? +ClearColumnData.name=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0435 +ClearColumnData.confirmation.message=\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0435 ''{0}''? +CopyDataToOtherColumn.name=\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 +FillColumnWithValue.name=\u0417\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c +FillColumnWithValue.inputDialog.text=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0432\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u044f\u0447\u0435\u0439\u043a\u0438 \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0435 +DuplicateColumn.name=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043f\u0438\u044e \u043a\u043e\u043b\u043e\u043d\u043a\u0438 + +ColumnValuesFrequency.name=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0447\u0430\u0441\u0442\u043e\u0442\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0435 +ColumnValuesFrequency.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0447\u0430\u0441\u0442\u043e\u0442\u0443 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0435 \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u043e\u0442\u0447\u0451\u0442 +ColumnValuesFrequency.report.header=

    \u041e\u0442\u0447\u0451\u0442 \u043f\u043e \u0447\u0430\u0441\u0442\u043e\u0442\u0430\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0435 ''{0}''

    +ColumnValuesFrequency.report.piechart.title=\u041a\u0440\u0443\u0433\u043e\u0432\u0430\u044f \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u0447\u0430\u0441\u0442\u043e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 +ColumnValuesFrequency.report.piechart.not-shown=\u0422.\u043a. \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u043e \u0431\u043e\u043b\u0435\u0435 100 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439, \u043a\u0440\u0443\u0433\u043e\u0432\u0430\u044f \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u043d\u0435 \u0431\u044b\u043b\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0430. +NumberColumnStatisticsReport.name=\u0420\u0430\u0441\u0447\u0451\u0442 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u043f\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0443 \u0441 \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 +NumberColumnStatisticsReport.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043f\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0443 \u0441 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u043e\u0442\u0447\u0451\u0442 + +CreateBooleanMatchesColumn.name=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u0441 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0433\u043e \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f +CreateBooleanMatchesColumn.description=\u0421\u043e\u0437\u0434\u0430\u0435\u0442 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0441 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438, \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u044f, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0442 \u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u043c\u0443 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e +CreateFoundGroupsListColumn.name=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u043e\u0438\u0441\u043a\u0430 \u043f\u043e \u043c\u0430\u0441\u043a\u0435, \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0439 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c +CreateFoundGroupsListColumn.description=\u0421\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0433\u0440\u0443\u043f\u043f, \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0445 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c + +NegateBooleanColumn.name=\u0418\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u0441 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 + +# ConvertColumnToDynamic.name=Convert column to dynamic +# ConvertColumnToDynamic.description=Convert an existing column to a dynamic column and optionally replace it diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_th.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_tr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_tr.properties new file mode 100644 index 0000000000..86e34ba963 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_tr.properties @@ -0,0 +1,22 @@ +DeleteColumn.name=Delete column +DeleteColumn.confirmation.message=Confirm to delete ''{0}''? +ClearColumnData.name=Clear column +ClearColumnData.confirmation.message=Confirm to clear ''{0}''? +CopyDataToOtherColumn.name=Copy data to other column +FillColumnWithValue.name=Fill column with a value +FillColumnWithValue.inputDialog.text=Choose a value to fill all rows: +DuplicateColumn.name=Duplicate column +ColumnValuesFrequency.name=Calculate values frequency +ColumnValuesFrequency.description=Calculate the frequency of each value appearance. +ColumnValuesFrequency.report.header=

    Values frequencies report ''{0}''

    +ColumnValuesFrequency.report.piechart.title=Values frequencies pie chart +ColumnValuesFrequency.report.piechart.not-shown=There are more than 100 different values, pie chart is not shown. +NumberColumnStatisticsReport.name=Calculate statistics +NumberColumnStatisticsReport.description=Calculate statistics on a number or number list column. +CreateBooleanMatchesColumn.name=Create a boolean column from regex match +CreateBooleanMatchesColumn.description=Create a boolean column with values indicating if each of the selected values matches the regular expression. +CreateFoundGroupsListColumn.name=Create column with list of regex matching groups +CreateFoundGroupsListColumn.description=Create a string list column in which values are the matching groups results of the regular expression. +NegateBooleanColumn.name=Negate boolean values +ConvertColumnToDynamic.name=Convert column to dynamic +ConvertColumnToDynamic.description=Convert an existing column to a dynamic column and optionally replace it diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_uk.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_uk.properties new file mode 100644 index 0000000000..9092c1752a --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_uk.properties @@ -0,0 +1,22 @@ +ClearColumnData.confirmation.message=\u041F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0438, \u0449\u043E\u0431 \u043E\u0447\u0438\u0441\u0442\u0438\u0442\u0438 ''{0}''? +DeleteColumn.name=\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C +CopyDataToOtherColumn.name=\u0421\u043A\u043E\u043F\u0456\u044E\u0439\u0442\u0435 \u0434\u0430\u043D\u0456 \u0432 \u0456\u043D\u0448\u0438\u0439 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C +FillColumnWithValue.name=\u0417\u0430\u043F\u043E\u0432\u043D\u0438\u0442\u0438 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F\u043C +NumberColumnStatisticsReport.name=\u041E\u0431\u0447\u0438\u0441\u043B\u0438\u0442\u0438 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0443 +FillColumnWithValue.inputDialog.text=\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044C \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0434\u043B\u044F \u0437\u0430\u043F\u043E\u0432\u043D\u0435\u043D\u043D\u044F \u0432\u0441\u0456\u0445 \u0440\u044F\u0434\u043A\u0456\u0432: +DuplicateColumn.name=\u0414\u0443\u0431\u043B\u044C\u043E\u0432\u0430\u043D\u0438\u0439 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C +ColumnValuesFrequency.name=\u041E\u0431\u0447\u0438\u0441\u043B\u0438\u0442\u0438 \u0447\u0430\u0441\u0442\u043E\u0442\u0443 \u0437\u043D\u0430\u0447\u0435\u043D\u044C +ColumnValuesFrequency.description=\u041E\u0431\u0447\u0438\u0441\u043B\u0456\u0442\u044C \u0447\u0430\u0441\u0442\u043E\u0442\u0443 \u043F\u043E\u044F\u0432\u0438 \u043A\u043E\u0436\u043D\u043E\u0433\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F. +ColumnValuesFrequency.report.header=

    \u0417\u0432\u0456\u0442 \u043F\u0440\u043E \u0447\u0430\u0441\u0442\u043E\u0442\u0438 \u0437\u043D\u0430\u0447\u0435\u043D\u044C ''{0}''

    +ColumnValuesFrequency.report.piechart.title=\u041A\u0440\u0443\u0433\u043E\u0432\u0430 \u0434\u0456\u0430\u0433\u0440\u0430\u043C\u0430 \u0447\u0430\u0441\u0442\u043E\u0442 \u0437\u043D\u0430\u0447\u0435\u043D\u044C +ColumnValuesFrequency.report.piechart.not-shown=\u0406\u0441\u043D\u0443\u0454 \u043F\u043E\u043D\u0430\u0434 100 \u0440\u0456\u0437\u043D\u0438\u0445 \u0437\u043D\u0430\u0447\u0435\u043D\u044C, \u043A\u0440\u0443\u0433\u043E\u0432\u0430 \u0434\u0456\u0430\u0433\u0440\u0430\u043C\u0430 \u043D\u0435 \u043F\u043E\u043A\u0430\u0437\u0430\u043D\u0430. +NumberColumnStatisticsReport.description=\u041E\u0431\u0447\u0438\u0441\u043B\u0438\u0442\u0438 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0443 \u0434\u043B\u044F \u0447\u0438\u0441\u043B\u0430 \u0430\u0431\u043E \u0441\u0442\u043E\u0432\u043F\u0446\u044F \u0441\u043F\u0438\u0441\u043A\u0443 \u0447\u0438\u0441\u0435\u043B. +CreateBooleanMatchesColumn.name=\u0421\u0442\u0432\u043E\u0440\u0456\u0442\u044C \u043B\u043E\u0433\u0456\u0447\u043D\u0438\u0439 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C \u0456\u0437 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u043D\u043E\u0441\u0442\u0456 \u0440\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u043E\u0433\u043E \u0432\u0438\u0440\u0430\u0437\u0443 +CreateBooleanMatchesColumn.description=\u0421\u0442\u0432\u043E\u0440\u0456\u0442\u044C \u043B\u043E\u0433\u0456\u0447\u043D\u0438\u0439 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C \u0456\u0437 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F\u043C\u0438, \u044F\u043A\u0456 \u0432\u043A\u0430\u0437\u0443\u044E\u0442\u044C, \u0447\u0438 \u043A\u043E\u0436\u043D\u0435 \u0437 \u0432\u0438\u0431\u0440\u0430\u043D\u0438\u0445 \u0437\u043D\u0430\u0447\u0435\u043D\u044C \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0430\u0454 \u0440\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u043E\u043C\u0443 \u0432\u0438\u0440\u0430\u0437\u0443. +CreateFoundGroupsListColumn.name=\u0421\u0442\u0432\u043E\u0440\u0456\u0442\u044C \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C \u0437\u0456 \u0441\u043F\u0438\u0441\u043A\u043E\u043C \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u043D\u0438\u0445 \u0433\u0440\u0443\u043F \u0440\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u0438\u0445 \u0432\u0438\u0440\u0430\u0437\u0456\u0432 +CreateFoundGroupsListColumn.description=\u0421\u0442\u0432\u043E\u0440\u0456\u0442\u044C \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C \u0441\u043F\u0438\u0441\u043A\u0443 \u0440\u044F\u0434\u043A\u0456\u0432, \u0443 \u044F\u043A\u043E\u043C\u0443 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0454 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u043D\u0438\u043C\u0438 \u0433\u0440\u0443\u043F\u0430\u043C\u0438 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0456\u0432 \u0440\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u043E\u0433\u043E \u0432\u0438\u0440\u0430\u0437\u0443. +NegateBooleanColumn.name=\u0412\u0456\u0434\u043C\u0456\u043D\u0438\u0442\u0438 \u043B\u043E\u0433\u0456\u0447\u043D\u0456 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F +ConvertColumnToDynamic.name=\u041F\u0435\u0440\u0435\u0442\u0432\u043E\u0440\u0438\u0442\u0438 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C \u043D\u0430 \u0434\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0438\u0439 +ConvertColumnToDynamic.description=\u041F\u0435\u0440\u0435\u0442\u0432\u043E\u0440\u0456\u0442\u044C \u043D\u0430\u044F\u0432\u043D\u0438\u0439 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C \u043D\u0430 \u0434\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0438\u0439 \u0456, \u0437\u0430 \u0431\u0430\u0436\u0430\u043D\u043D\u044F\u043C, \u0437\u0430\u043C\u0456\u043D\u0456\u0442\u044C \u0439\u043E\u0433\u043E +DeleteColumn.confirmation.message=\u041F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0438 \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043D\u044F ''{0}''? +ClearColumnData.name=\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_zh_CN.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_zh_CN.properties index d9f212bfb1..0278b191a8 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_zh_CN.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_zh_CN.properties @@ -1,50 +1,22 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:16+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - DeleteColumn.name=\u5220\u9664\u5217 - DeleteColumn.confirmation.message=\u786e\u8ba4\u5220\u9664\u201c{0}\u201d\uff1f - ClearColumnData.name=\u6e05\u9664\u5217 - ClearColumnData.confirmation.message=\u786e\u8ba4\u6e05\u9664\u201c{0}\u201d\uff1f - CopyDataToOtherColumn.name=\u590d\u5236\u6570\u636e\u5230\u5176\u5b83\u5217 - FillColumnWithValue.name=\u586b\u5199\u6570\u503c\u5230\u5217 - FillColumnWithValue.inputDialog.text=\u9009\u62e9\u586b\u5199\u5230\u6240\u6709\u884c\u7684\u6570\u503c\uff1a - DuplicateColumn.name=\u590d\u5236\u5217\u6570\u636e - ColumnValuesFrequency.name=\u8ba1\u7b97\u6570\u503c\u9891\u7387 - ColumnValuesFrequency.description=\u8ba1\u7b97\u6bcf\u4e2a\u6570\u503c\u51fa\u73b0\u7684\u9891\u7387\u3002 - ColumnValuesFrequency.report.header=

    \u6570\u503c\u9891\u7387\u62a5\u544a"{0}"

    - ColumnValuesFrequency.report.piechart.title=\u6570\u503c\u9891\u7387\u5706\u5f62\u5206\u683c\u7edf\u8ba1\u56fe\u8868 - -ColumnValuesFrequency.report.piechart.not-shown=\u82e5\u5b58\u5728\u5927\u4e8e100\u4e2a\u4e0d\u540c\u7684\u6570\u503c\uff0c\u4e0d\u663e\u793a\u5706\u5f62\u5206\u683c\u7edf\u8ba1\u56fe\u8868 - +ColumnValuesFrequency.report.piechart.not-shown=\u82E5\u5B58\u5728\u8D85\u8FC7 100 \u4E2A\u4E0D\u540C\u7684\u6570\u503C\uFF0C\u5C06\u4E0D\u663E\u793A\u997C\u72B6\u56FE\u3002 NumberColumnStatisticsReport.name=\u8ba1\u7b97\u7edf\u8ba1\u5c5e\u6027 - -NumberColumnStatisticsReport.description=\u5728\u4e00\u4e2a\u6570\u6216\u8005\u8ba1\u6570\u5217\u8868\u8ba1\u7b97\u7edf\u8ba1\u5c5e\u6027 - +NumberColumnStatisticsReport.description=\u8BA1\u7B97\u4E00\u4E2A\u6570\u6216\u6570\u5B57\u5217\u7684\u7EDF\u8BA1\u6570\u636E\u3002 CreateBooleanMatchesColumn.name=\u4ece\u6b63\u5219\u8868\u8fbe\u5f0f\u4e2d\u65b0\u5efa\u4e00\u4e2a\u5e03\u5c14\u5217 - CreateBooleanMatchesColumn.description=\u65b0\u5efa\u4e00\u4e2a\u5e03\u5c14\u5217\uff0c\u91cc\u9762\u7684\u6570\u503c\u8868\u660e\u6bcf\u4e2a\u9009\u62e9\u7684\u6570\u503c\u662f\u5426\u4e0e\u6b63\u5219\u8868\u8fbe\u5f0f\u76f8\u5339\u914d\u3002 - CreateFoundGroupsListColumn.name=\u65b0\u5efa\u4e00\u5217\uff08\u5217\u8868\u6216\u8005\u6b63\u5219\u8868\u8fbe\u5f0f\u5339\u914d\u7ec4\u5408\uff09 - CreateFoundGroupsListColumn.description=\u65b0\u5efa\u5b57\u7b26\u4e32\u5217\u8868\uff0c\u91cc\u9762\u7684\u6570\u503c\u586b\u5199\u6b63\u5219\u8868\u8fbe\u5f0f\u7684\u5339\u914d\u7ec4\u7684\u7ed3\u679c\u3002 - NegateBooleanColumn.name=\u5e03\u5c14\u503c\u6c42\u53cd - -!ConvertColumnToDynamic.name= - -!ConvertColumnToDynamic.description= +ConvertColumnToDynamic.name=\u5217\u8f6c\u6362\u4e3a\u52a8\u6001 +ConvertColumnToDynamic.description=\u5c06\u73b0\u6709\u5217\u52a8\u6001\u5217\u548c\u53ef\u9009\u66f4\u6362 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_zh_TW.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_zh_TW.properties new file mode 100644 index 0000000000..86e34ba963 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/Bundle_zh_TW.properties @@ -0,0 +1,22 @@ +DeleteColumn.name=Delete column +DeleteColumn.confirmation.message=Confirm to delete ''{0}''? +ClearColumnData.name=Clear column +ClearColumnData.confirmation.message=Confirm to clear ''{0}''? +CopyDataToOtherColumn.name=Copy data to other column +FillColumnWithValue.name=Fill column with a value +FillColumnWithValue.inputDialog.text=Choose a value to fill all rows: +DuplicateColumn.name=Duplicate column +ColumnValuesFrequency.name=Calculate values frequency +ColumnValuesFrequency.description=Calculate the frequency of each value appearance. +ColumnValuesFrequency.report.header=

    Values frequencies report ''{0}''

    +ColumnValuesFrequency.report.piechart.title=Values frequencies pie chart +ColumnValuesFrequency.report.piechart.not-shown=There are more than 100 different values, pie chart is not shown. +NumberColumnStatisticsReport.name=Calculate statistics +NumberColumnStatisticsReport.description=Calculate statistics on a number or number list column. +CreateBooleanMatchesColumn.name=Create a boolean column from regex match +CreateBooleanMatchesColumn.description=Create a boolean column with values indicating if each of the selected values matches the regular expression. +CreateFoundGroupsListColumn.name=Create column with list of regex matching groups +CreateFoundGroupsListColumn.description=Create a string list column in which values are the matching groups results of the regular expression. +NegateBooleanColumn.name=Negate boolean values +ConvertColumnToDynamic.name=Convert column to dynamic +ConvertColumnToDynamic.description=Convert an existing column to a dynamic column and optionally replace it diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/cs.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/cs.po deleted file mode 100644 index 7c5c7567d8..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/cs.po +++ /dev/null @@ -1,85 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:16+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "DeleteColumn.name" -msgstr "Smazat sloupec" - -msgid "DeleteColumn.confirmation.message" -msgstr "Potvrdit smazΓ‘nΓ­ ''{0}''?" - -msgid "ClearColumnData.name" -msgstr "Vyčistit sloupec" - -msgid "ClearColumnData.confirmation.message" -msgstr "Potvrdit vyčiΕ‘tΔ›nΓ­ ''{0}''?" - -msgid "CopyDataToOtherColumn.name" -msgstr "KopΓ­rovat data na dalΕ‘Γ­ sloupec" - -msgid "FillColumnWithValue.name" -msgstr "Naplnit sloupec hodnotou" - -msgid "FillColumnWithValue.inputDialog.text" -msgstr "Zvolte hodnotu kterou vyplnit vΕ‘echny Ε™Γ‘dky:" - -msgid "DuplicateColumn.name" -msgstr "KopΓ­rovat sloupec" - -msgid "ColumnValuesFrequency.name" -msgstr "Spočítat četnost hodnot" - -msgid "ColumnValuesFrequency.description" -msgstr "Vypočítat četnost vΓ½skytu kaΕΎdΓ© hodnoty." - -msgid "ColumnValuesFrequency.report.header" -msgstr "

    HlÑőení četnosti hodnot ''{0}''

    " - -msgid "ColumnValuesFrequency.report.piechart.title" -msgstr "KolÑčovΓ½ graf četnosti hodnot" - -msgid "ColumnValuesFrequency.report.piechart.not-shown" -msgstr "Existuje vΓ­ce neΕΎ 100 rΕ―znΓ½ch hodnot, kolÑčovΓ½ graf nenΓ­ zobrazen." - -msgid "NumberColumnStatisticsReport.name" -msgstr "Vypočítat statistiky" - -msgid "NumberColumnStatisticsReport.description" -msgstr "Vypočítat statistiky čísla nebo sloupec seznamu čísel." - -msgid "CreateBooleanMatchesColumn.name" -msgstr "VytvoΕ™it booleovskΓ½ sloupec ze shody regulΓ‘rnΓ­ho vΓ½razu" - -msgid "CreateBooleanMatchesColumn.description" -msgstr "VytvoΕ™it booleovskΓ½ sloupec s hodnotami označujΓ­cΓ­ jestli kaΕΎdΓ‘ z vybranΓ½ch hodnot odpovΓ­dΓ‘ regulΓ‘rnΓ­mu vΓ½razu." - -msgid "CreateFoundGroupsListColumn.name" -msgstr "VytvoΕ™it sloupec se seznamem skupin odpovΓ­dajΓ­cΓ­ regulΓ‘rnΓ­mu vΓ½razu" - -msgid "CreateFoundGroupsListColumn.description" -msgstr "VytvoΕ™it sloupec se seznamen Ε™etΔ›zcΕ―, v nΔ›mΕΎ hodnoty odpovΓ­dajΓ­ skupinovΓ½m vΓ½sledkΕ―m regulΓ‘rnΓ­ho vΓ½razu." - -msgid "NegateBooleanColumn.name" -msgstr "Negovat booleovskΓ© hodnoty" - -msgid "ConvertColumnToDynamic.name" -msgstr "" - -msgid "ConvertColumnToDynamic.description" -msgstr "" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/es.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/es.po deleted file mode 100644 index 5cd12fa6f8..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/es.po +++ /dev/null @@ -1,86 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:24+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "DeleteColumn.name" -msgstr "Borrar columna" - -msgid "DeleteColumn.confirmation.message" -msgstr "ΒΏConfirmar eliminaciΓ³n de ''{0}''?" - -msgid "ClearColumnData.name" -msgstr "Borrar datos de columna" - -msgid "ClearColumnData.confirmation.message" -msgstr "ΒΏConfirmar borrado de datos de ''{0}''?" - -msgid "CopyDataToOtherColumn.name" -msgstr "Copiar datos a otra columna" - -msgid "FillColumnWithValue.name" -msgstr "Rellenar columna con un valor" - -msgid "FillColumnWithValue.inputDialog.text" -msgstr "Elige un valor con el que rellenar todas las filas de la columna" - -msgid "DuplicateColumn.name" -msgstr "Duplicar columna" - -msgid "ColumnValuesFrequency.name" -msgstr "Calcular frecuencia de valores de columna" - -msgid "ColumnValuesFrequency.description" -msgstr "Calcula la frecuencia de apariciΓ³n de cada valor de una columna y muestra un informe" - -msgid "ColumnValuesFrequency.report.header" -msgstr "

    Informe de frecuencia de valores para la columna ''{0}''

    " - -msgid "ColumnValuesFrequency.report.piechart.title" -msgstr "GrΓ‘fico de tarta de frecuencias de valores" - -msgid "ColumnValuesFrequency.report.piechart.not-shown" -msgstr "Hay mΓ‘s de 100 valores diferentes, el grΓ‘fico de tarta no es mostrado." - -msgid "NumberColumnStatisticsReport.name" -msgstr "Calcular estadΓ­sticas" - -msgid "NumberColumnStatisticsReport.description" -msgstr "Calcula estadΓ­sticas de una columna numΓ©rica o de lista de nΓΊmeros y muestra un informe" - -msgid "CreateBooleanMatchesColumn.name" -msgstr "Crear columna booleana a partir de expresiΓ³n regular" - -msgid "CreateBooleanMatchesColumn.description" -msgstr "Crea una nueva columna booleana con valores que indican si cada valor de la columna seleccionada se ajusta a la expresiΓ³n regular proporcionada" - -msgid "CreateFoundGroupsListColumn.name" -msgstr "Crear columna con lista de grupos que se ajustan a una expresiΓ³n regular" - -msgid "CreateFoundGroupsListColumn.description" -msgstr "Crea una nueva columna de tipo lista de cadenas de texto con valores que son la lista de grupos que se ajustan a la expresiΓ³n regular proporcionada" - -msgid "NegateBooleanColumn.name" -msgstr "Negar columna booleana" - -msgid "ConvertColumnToDynamic.name" -msgstr "Convertir columna a dinΓ‘mica" - -msgid "ConvertColumnToDynamic.description" -msgstr "Convertir una columna existente en dinΓ‘mica y opcionalmente reemplazarla" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/fr.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/fr.po deleted file mode 100644 index 9be527fc5a..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/fr.po +++ /dev/null @@ -1,85 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:16+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "DeleteColumn.name" -msgstr "Supprimer la colonne" - -msgid "DeleteColumn.confirmation.message" -msgstr "Confirmer la suppression de ''{0}''?" - -msgid "ClearColumnData.name" -msgstr "Effacer la colonne" - -msgid "ClearColumnData.confirmation.message" -msgstr "Confirmer effacement de ''{0}''?" - -msgid "CopyDataToOtherColumn.name" -msgstr "Copier les donnΓ©es vers une colonne" - -msgid "FillColumnWithValue.name" -msgstr "Remplir la colonne avec une valeur" - -msgid "FillColumnWithValue.inputDialog.text" -msgstr "Valeur de remplissage pour toutes les lignes :" - -msgid "DuplicateColumn.name" -msgstr "Dupliquer la colonne" - -msgid "ColumnValuesFrequency.name" -msgstr "Calculer les frΓ©quences" - -msgid "ColumnValuesFrequency.description" -msgstr "Calcule la frΓ©quence de chaque apparition de valeur" - -msgid "ColumnValuesFrequency.report.header" -msgstr "

    Rapport des frΓ©quences ''{0}''

    " - -msgid "ColumnValuesFrequency.report.piechart.title" -msgstr "Diagramme circulaire des frΓ©quences" - -msgid "ColumnValuesFrequency.report.piechart.not-shown" -msgstr "Diagramme non affichΓ© car il y a plus de 100 valeurs diffΓ©rentes." - -msgid "NumberColumnStatisticsReport.name" -msgstr "Calculer les statistiques" - -msgid "NumberColumnStatisticsReport.description" -msgstr "Calcule les statistiques sur une colonne de nombres ou de liste de nombres." - -msgid "CreateBooleanMatchesColumn.name" -msgstr "CrΓ©er une colonne boolΓ©enne depuis une expression rationnelle" - -msgid "CreateBooleanMatchesColumn.description" -msgstr "CrΓ©er une colonne boolΓ©enne indiquant si chaque ligne correspond Γ  l'expression rationnelle." - -msgid "CreateFoundGroupsListColumn.name" -msgstr "CrΓ©er une colonne depuis une liste de groupes d'une expression rationnelle" - -msgid "CreateFoundGroupsListColumn.description" -msgstr "CrΓ©er une colonne en liste dont les valeurs correspondent aux groupes de l'expression rationnelle." - -msgid "NegateBooleanColumn.name" -msgstr "Inverse les valeurs boolΓ©nnes" - -msgid "ConvertColumnToDynamic.name" -msgstr "" - -msgid "ConvertColumnToDynamic.description" -msgstr "" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ja.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ja.po deleted file mode 100644 index 3c538bc15b..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ja.po +++ /dev/null @@ -1,85 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:16+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "DeleteColumn.name" -msgstr "εˆ—γε‰Šι™€" - -msgid "DeleteColumn.confirmation.message" -msgstr "''{0}''γ‚’ε‰Šι™€γ—γ¦γ‚‚γ„γ„γ§γ™γ‹οΌŸ" - -msgid "ClearColumnData.name" -msgstr "εˆ—γγ‚―γƒͺγ‚’" - -msgid "ClearColumnData.confirmation.message" -msgstr "''{0}''γ‚’γ‚―γƒͺγ‚’γ—γ¦γ‚‚γ„γ„γ§γ™γ‹οΌŸ" - -msgid "CopyDataToOtherColumn.name" -msgstr "データを他γεˆ—にコピー" - -msgid "FillColumnWithValue.name" -msgstr "εˆ—γ‚’ε€€γ§εŸ‹γ‚γ‚‹" - -msgid "FillColumnWithValue.inputDialog.text" -msgstr "θ‘Œγ‚’εŸ‹γ‚γ‚‹ε€€γ‚’ιΈζŠž:" - -msgid "DuplicateColumn.name" -msgstr "εˆ—γ‚’θ€‡ε†™" - -msgid "ColumnValuesFrequency.name" -msgstr "ε€€γι »εΊ¦γ‚’θ¨ˆη—" - -msgid "ColumnValuesFrequency.description" -msgstr "γγ‚Œγžγ‚Œγε€€γε‡ΊηΎγι »εΊ¦γ‚’θ¨ˆη—" - -msgid "ColumnValuesFrequency.report.header" -msgstr "

    ε€€ι »εΊ¦γƒ¬γƒγƒΌγƒˆ''{0}''

    " - -msgid "ColumnValuesFrequency.report.piechart.title" -msgstr "倀頻度円グラフ" - -msgid "ColumnValuesFrequency.report.piechart.not-shown" -msgstr "100δ»₯上γε€€γŒγ‚γ‚‹γŸγ‚ε††γ‚°γƒ©γƒ•γ―θ‘¨η€Ίγ•γ‚ŒγΎγ›γ‚“γ€‚" - -msgid "NumberColumnStatisticsReport.name" -msgstr "η΅±θ¨ˆι‡γθ¨ˆη—" - -msgid "NumberColumnStatisticsReport.description" -msgstr "ζ•°ε€€γΎγŸγ―ζ•°ε€€γƒͺγ‚Ήγƒˆγεˆ—γ«ι–’γ™γ‚‹η΅±θ¨ˆι‡γ‚’θ¨ˆη—" - -msgid "CreateBooleanMatchesColumn.name" -msgstr "正規葨現γγƒžγƒƒγƒγ‹γ‚‰γƒ–ール倀γεˆ—γ‚’δ½œζˆ" - -msgid "CreateBooleanMatchesColumn.description" -msgstr "ιΈζŠžγ•γ‚ŒγŸε€€γε„γ€…γ―ζ­£θ¦θ‘¨ηΎγ«δΈ€θ‡΄γ™γ‚Œγ°γ€η€Ίγ™ε€€γ‚’ζŒγ€γƒ–γƒΌγƒ«εˆ—γ‚’δ½œζˆ" - -msgid "CreateFoundGroupsListColumn.name" -msgstr "正規葨現に一致するグループγγƒͺγ‚Ήγƒˆγ§εˆ—γ‚’δ½œζˆ" - -msgid "CreateFoundGroupsListColumn.description" -msgstr "ε€€γŒζ­£θ¦θ‘¨ηΎγδΈ€θ‡΄γ™γ‚‹γ‚°γƒ«γƒΌγƒ—γη΅ζžœγ•γ‚Œγ¦γ„γ‚‹ζ–‡ε­—εˆ—γƒͺγ‚Ήγƒˆγεˆ—γ‚’δ½œζˆγ—γΎγ™γ€‚" - -msgid "NegateBooleanColumn.name" -msgstr "ブール倀を拒否" - -msgid "ConvertColumnToDynamic.name" -msgstr "" - -msgid "ConvertColumnToDynamic.description" -msgstr "" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle.properties index e959927cb4..c0ffda65aa 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle.properties @@ -1,7 +1,7 @@ JoinWithSeparator.name=Join values with separator JoinWithSeparator.description=Join the values of columns of any type with an optional separator. The new column has type STRING. JoinNumberColumns.name=Join numerical columns -JoinNumberColumns.description=Join the values of number/number list columns into a new column with the type LIST_BIGDECIMAL. +JoinNumberColumns.description=Join the values of number/number list columns into a new column with the type double[]. CreateTimeInterval.name=Create time interval CreateTimeInterval.description=Create a time interval for each row taking 1 or 2 columns as start/end times. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_ar.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_ca.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_ca.properties new file mode 100644 index 0000000000..e86f1e8cc3 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_ca.properties @@ -0,0 +1,24 @@ +JoinWithSeparator.name=Join values with separator +JoinWithSeparator.description=Join the values of columns of any type with an optional separator. The new column has type STRING. +JoinNumberColumns.name=Join numerical columns +JoinNumberColumns.description=Join the values of number/number list columns into a new column with the type double[]. +CreateTimeInterval.name=Crea un interval de temps +CreateTimeInterval.description=Crea un interval de temps per cada fila, agafant 1 o 2 columnes per marcar l'inici i el final +AverageNumber.name=Calcula el valor de la mitjana +AverageNumber.description=Calculate the average value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +FirstQuartileNumber.name=Calculate first quartile (Q1) +FirstQuartileNumber.description=Calculate the first quartile (Q1) value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +MedianNumber.name=Calcula el valor de la mediana +MedianNumber.description=Calcula el valor de la mediana de les columnes numθriques (nombres o llista de nombres) i crea una nova columna (BIGDECIMAL) amb el resultat +ThirdQuartileNumber.name=Calculate third quartile (Q3) +ThirdQuartileNumber.description=Calculate the third quartile (Q3) value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +InterQuartileRangeNumber.name=Calculate interquartile range (IQR) +InterQuartileRangeNumber.description=Calculate the interquartile range (IQR) value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +SumNumbers.name=Sum number values +SumNumbers.description=Calculate the sum of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +MinimumNumber.name=Calcula el valor mνnim +MinimumNumber.description=Calculate the minimum value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +MaximumNumber.name=Calcula el valor mΰxim +MaximumNumber.description=Calculate the maximum value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +BooleanLogicOperations.name=Merge boolean columns +BooleanLogicOperations.description=Merge boolean columns in the selected order to create a new column, choosing the logical operations applied between each pair of columns. A null value is used as false. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_cs.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_cs.properties index a6016dbf35..b642cf4333 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_cs.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_cs.properties @@ -1,55 +1,26 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-28 20\:48+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -JoinWithSeparator.name=Spojit hodnoty odd\u011blova\u010dem - -JoinWithSeparator.description=Spoj\u00ed hodnoty sloupc\u016f jak\u00e9hokoliv typu nepovinn\u00fdm odd\u011blova\u010dem. Nov\u00fd sloupec m\u00e1 typ STRING. - -JoinNumberColumns.name=Spojit \u010d\u00edseln\u00e9 sloupce - -JoinNumberColumns.description=Spoj\u00ed hodnoty \u010d\u00edseln\u00fdch sloupc\u016f/sloupc\u016f seznamu \u010d\u00edseldo nov\u00e9ho sloupce s typem LIST_BIGDECIMAL. - -CreateTimeInterval.name=Vytvo\u0159it \u010dasov\u00fd interval - -CreateTimeInterval.description=Vytvo\u0159it \u010dasov\u00fd interval pro ka\u017ed\u00fd \u0159\u00e1dek, kter\u00fd pou\u017e\u00edv\u00e1 1 nebo 2 sloupce jako doba za\u010d\u00e1tku/konce. - -AverageNumber.name=Vypo\u010d\u00edtat pr\u016fm\u011brnou hodnotu - -AverageNumber.description=Vypo\u010d\u00edt\u00e1 pr\u016fm\u011brnou hodnotu \u010d\u00edseln\u00fdch sloupc\u016f (\u010d\u00edseln\u00e9 nebo seznam \u010d\u00edsel). Vytvo\u0159\u00ed nov\u00fd sloupec (BIGDECIMAL) s v\u00fdsledkem. - -FirstQuartileNumber.name=Vypo\u010d\u00edtat prvn\u00ed kvartil (Q1) - -FirstQuartileNumber.description=Vypo\u010d\u00edt\u00e1 hodnotu prvn\u00edho kvartilu (Q1) \u010d\u00edseln\u00fdch sloupc\u016f (\u010d\u00edseln\u00e9 nebo seznam \u010d\u00edsel). Vytvo\u0159\u00ed nov\u00fd sloupec (BIGDECIMAL) s v\u00fdsledkem. - -MedianNumber.name=Vypo\u010d\u00edt\u00e1 hodnotu medi\u00e1nu - -MedianNumber.description=Vypo\u010d\u00edt\u00e1 hodnotu medi\u00e1nu \u010d\u00edseln\u00fdch sloupc\u016f (\u010d\u00edseln\u00e9 nebo seznam \u010d\u00edsel). Vytvo\u0159\u00ed nov\u00fd sloupec (BIGDECIMAL) s v\u00fdsledkem. - -ThirdQuartileNumber.name=Vypo\u010d\u00edtat prvn\u00ed kvartil (Q3) - -ThirdQuartileNumber.description=Vypo\u010d\u00edt\u00e1 hodnotu prvn\u00edho kvartilu (Q3) \u010d\u00edseln\u00fdch sloupc\u016f (\u010d\u00edseln\u00e9 nebo seznam \u010d\u00edsel). Vytvo\u0159\u00ed nov\u00fd sloupec (BIGDECIMAL) s v\u00fdsledkem. - -InterQuartileRangeNumber.name=Vypo\u010d\u00edtat mezikvartiln\u00ed rozsah (IQR) - -InterQuartileRangeNumber.description=Vypo\u010d\u00edt\u00e1 hodnotu mezikvartiln\u00edho rozsahu (Q1) \u010d\u00edseln\u00fdch sloupc\u016f (\u010d\u00edseln\u00e9 nebo seznam \u010d\u00edsel). Vytvo\u0159\u00ed nov\u00fd sloupec (BIGDECIMAL) s v\u00fdsledkem. - -SumNumbers.name=Sou\u010det \u010d\u00edseln\u00fdch hodnot - -SumNumbers.description=Vypo\u010d\u00edt\u00e1 sou\u010det \u010d\u00edseln\u00fdch sloupc\u016f (\u010d\u00edseln\u00e9 nebo seznam \u010d\u00edsel). Vytvo\u0159\u00ed nov\u00fd sloupec (BIGDECIMAL) s v\u00fdsledkem. - -MinimumNumber.name=Vypo\u010d\u00edtat minim\u00e1ln\u00ed hodnotu - -MinimumNumber.description=Vypo\u010d\u00edt\u00e1 minim\u00e1ln\u00ed hodnotu \u010d\u00edseln\u00fdch sloupc\u016f (\u010d\u00edseln\u00e9 nebo seznam \u010d\u00edsel). Vytvo\u0159\u00ed nov\u00fd sloupec (BIGDECIMAL) s v\u00fdsledkem. - -MaximumNumber.name=Vypo\u010d\u00edtat maxim\u00e1ln\u00ed hodnotu - -MaximumNumber.description=Vypo\u010d\u00edt\u00e1 maxim\u00e1ln\u00ed hodnotu \u010d\u00edseln\u00fdch sloupc\u016f (\u010d\u00edseln\u00e9 nebo seznam \u010d\u00edsel). Vytvo\u0159\u00ed nov\u00fd sloupec (BIGDECIMAL) s v\u00fdsledkem. - -BooleanLogicOperations.name=Slou\u010dit booleovsk\u00e9 sloupce - -BooleanLogicOperations.description=Slou\u010d\u00ed booleovsk\u00e9 sloupce ve zvolen\u00e9m po\u0159ad\u00ed pro vytvo\u0159en\u00ed nov\u00e9ho volen\u00edm logick\u00e9 operace, kter\u00e1 je pou\u017eita na ka\u017ed\u00fd p\u00e1r sloupc\u016f. Pr\u00e1zdn\u00e1 hodnota se pou\u017e\u00edv\u00e1 jako nepravda +JoinWithSeparator.name=Spojit hodnoty odd\u011blova\u010dem +JoinWithSeparator.description=Spojν hodnoty sloupc\u016f jakιhokoliv typu nepovinnύm odd\u011blova\u010dem. Novύ sloupec mα typ STRING. +JoinNumberColumns.name=Spojit \u010dνselnι sloupce +# JoinNumberColumns.description=Join the values of number/number list columns into a new column with the type double[]. +CreateTimeInterval.name=Vytvo\u0159it \u010dasovύ interval +CreateTimeInterval.description=Vytvo\u0159it \u010dasovύ interval pro ka\u017edύ \u0159αdek, kterύ pou\u017eνvα 1 nebo 2 sloupce jako doba za\u010dαtku/konce. + +AverageNumber.name=Vypo\u010dνtat pr\u016fm\u011brnou hodnotu +AverageNumber.description=Vypo\u010dνtα pr\u016fm\u011brnou hodnotu \u010dνselnύch sloupc\u016f (\u010dνselnι nebo seznam \u010dνsel). Vytvo\u0159ν novύ sloupec (BIGDECIMAL) s vύsledkem. +FirstQuartileNumber.name=Vypo\u010dνtat prvnν kvartil (Q1) +FirstQuartileNumber.description=Vypo\u010dνtα hodnotu prvnνho kvartilu (Q1) \u010dνselnύch sloupc\u016f (\u010dνselnι nebo seznam \u010dνsel). Vytvo\u0159ν novύ sloupec (BIGDECIMAL) s vύsledkem. +MedianNumber.name=Vypo\u010dνtα hodnotu mediαnu +MedianNumber.description=Vypo\u010dνtα hodnotu mediαnu \u010dνselnύch sloupc\u016f (\u010dνselnι nebo seznam \u010dνsel). Vytvo\u0159ν novύ sloupec (BIGDECIMAL) s vύsledkem. +ThirdQuartileNumber.name=Vypo\u010dνtat prvnν kvartil (Q3) +ThirdQuartileNumber.description=Vypo\u010dνtα hodnotu prvnνho kvartilu (Q3) \u010dνselnύch sloupc\u016f (\u010dνselnι nebo seznam \u010dνsel). Vytvo\u0159ν novύ sloupec (BIGDECIMAL) s vύsledkem. +InterQuartileRangeNumber.name=Vypo\u010dνtat mezikvartilnν rozsah (IQR) +InterQuartileRangeNumber.description=Vypo\u010dνtα hodnotu mezikvartilnνho rozsahu (Q1) \u010dνselnύch sloupc\u016f (\u010dνselnι nebo seznam \u010dνsel). Vytvo\u0159ν novύ sloupec (BIGDECIMAL) s vύsledkem. +SumNumbers.name=Sou\u010det \u010dνselnύch hodnot +SumNumbers.description=Vypo\u010dνtα sou\u010det \u010dνselnύch sloupc\u016f (\u010dνselnι nebo seznam \u010dνsel). Vytvo\u0159ν novύ sloupec (BIGDECIMAL) s vύsledkem. +MinimumNumber.name=Vypo\u010dνtat minimαlnν hodnotu +MinimumNumber.description=Vypo\u010dνtα minimαlnν hodnotu \u010dνselnύch sloupc\u016f (\u010dνselnι nebo seznam \u010dνsel). Vytvo\u0159ν novύ sloupec (BIGDECIMAL) s vύsledkem. +MaximumNumber.name=Vypo\u010dνtat maximαlnν hodnotu +MaximumNumber.description=Vypo\u010dνtα maximαlnν hodnotu \u010dνselnύch sloupc\u016f (\u010dνselnι nebo seznam \u010dνsel). Vytvo\u0159ν novύ sloupec (BIGDECIMAL) s vύsledkem. + +BooleanLogicOperations.name=Slou\u010dit booleovskι sloupce +BooleanLogicOperations.description=Slou\u010dν booleovskι sloupce ve zvolenιm po\u0159adν pro vytvo\u0159enν novιho volenνm logickι operace, kterα je pou\u017eita na ka\u017edύ pαr sloupc\u016f. Prαzdnα hodnota se pou\u017eνvα jako nepravda diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_de.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_de.properties new file mode 100644 index 0000000000..3b841c4be9 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_de.properties @@ -0,0 +1,26 @@ +JoinWithSeparator.name=Vereine Werte mit Trenner +JoinWithSeparator.description=Vereine die Werte der Spalten beliebigen Typs mit einem optionalen Trenner. Die neue Spalte hat den Typ STRING. +JoinNumberColumns.name=Vereine numerische Spalten +JoinNumberColumns.description=Vereine die Werte der Spalten vom Typ number/number list in eine neue Spalte vom Typ double[]. +CreateTimeInterval.name=Erzeuge Zeitintervall +CreateTimeInterval.description=Erzeuge ein Zeitintervall fόr jede Zeile anhand 1 oder 2 Start-/Endzeit-Spalten. + +AverageNumber.name=Durschnittswert berechnen +AverageNumber.description=Berechne den Durchschnittswert numerischer Spalten (number oder number list). Erzeuge eine neue Spalte (BIGDECIMAL) mit dem Ergebnis. +FirstQuartileNumber.name=Erstes Quartil (Q1) berechnen +FirstQuartileNumber.description=Berechne das erste Quartil (Q1) numerischer Spalten (number oder number list). Erzeuge eine neue Spalte (BIGDECIMAL) mit dem Ergebnis. +MedianNumber.name=Berechnet den Median-Wert +MedianNumber.description=Berechne den Medianwert numerischer Spalten (number oder number list). Erzeuge eine neue Spalte (BIGDECIMAL) mit dem Ergebnis. +ThirdQuartileNumber.name=Drittes Quartil (Q3) berechnen +ThirdQuartileNumber.description=Berechne das dritte Quartil (Q3) numerischer Spalten (number oder number list). Erzeuge eine neue Spalte (BIGDECIMAL) mit dem Ergebnis. +InterQuartileRangeNumber.name=Interquartilsabstand (IQR) berechnen +InterQuartileRangeNumber.description=Berechne den Interquartilsabstand (IQR) numerischer Spalten (number oder number list). Erzeuge eine neue Spalte (BIGDECIMAL) mit dem Ergebnis. +SumNumbers.name=Summiere numerische Werte +SumNumbers.description=Berechne die Summer numerischer Spalten (number oder number list). Erzeuge eine neue Spalte (BIGDECIMAL) mit dem Ergebnis. +MinimumNumber.name=Minimum-Wert berechnen +MinimumNumber.description=Berechne den Minimalwert numerischer Spalten (number oder number list). Erzeuge eine neue Spalte (BIGDECIMAL) mit dem Ergebnis. +MaximumNumber.name=Maximal-Wert berechnen +MaximumNumber.description=Berechne den Maximalwert numerischer Spalten (number oder number list). Erzeuge eine neue Spalte (BIGDECIMAL) mit dem Ergebnis. + +BooleanLogicOperations.name=Verschmelze boolesche Spalten +BooleanLogicOperations.description=Verschmelze boolesche Spalten in der ausgewδhlten Reihenfolge um eine neue Spalte zu erzeugen, indem die logischen Operationen auf jedes Spaltenpaar angewendet werden. Ein Null-Wert wird als 'false' interpretiert. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_es.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_es.properties index ec11a9ea33..a38b6e49d9 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_es.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_es.properties @@ -1,55 +1,24 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:29+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - JoinWithSeparator.name=Unir valores con separador - -JoinWithSeparator.description=Une los valores de columnas de cualquier tipo con el separador proporcionado (o sin separador) entre cada par de columnas. La nueva columna tendr\u00e1 tipo STRING. - -JoinNumberColumns.name=Unir columnas num\u00e9ricas - -JoinNumberColumns.description=Une los valores de varias columnas num\u00e9ricas/listas de n\u00fameros creando una nueva columna con el tipo LIST_BIGDECIMAL. - -CreateTimeInterval.name=Crear int\u00e9rvalo de tiempo - -CreateTimeInterval.description=Crea un int\u00e9rvalo de tiempo para cada fila tomando 1 o 2 columnas como tiempos de inicio/final y usando los tiempos por defecto indicados. - +JoinWithSeparator.description=Une los valores de columnas de cualquier tipo con el separador proporcionado (o sin separador) entre cada par de columnas. La nueva columna tendrα tipo STRING. +JoinNumberColumns.name=Unir columnas numιricas +JoinNumberColumns.description=Une los valores de varias columnas numιricas/listas de nϊmeros creando una nueva columna con el tipo double[]. +CreateTimeInterval.name=Crear intιrvalo de tiempo +CreateTimeInterval.description=Crea un intιrvalo de tiempo para cada fila tomando 1 o 2 columnas como tiempos de inicio/final y usando los tiempos por defecto indicados. AverageNumber.name=Calcular valor medio - -AverageNumber.description=Calcula el valor medio de todos los n\u00fameros en las columnas escogidas (solamente columnas num\u00e9ricas o de listas de n\u00fameros) y crea una nueva columna (BIGDECIMAL) con el resultado. - +AverageNumber.description=Calcula el promedio de las columnas num\u00E9ricas (n\u00FAmero o lista de n\u00FAmeros). Crea una nueva columna (BIGDECIMAL) con el resultado. FirstQuartileNumber.name=Calcular primer cuartil (Q1) - -FirstQuartileNumber.description=Calcula el primer cuartil (Q1) de todos los n\u00fameros en las columnas escogidas (solamente columnas num\u00e9ricas o de listas de n\u00fameros) y crea una nueva columna (BIGDECIMAL) con el resultado. - +FirstQuartileNumber.description=Calcula el primer cuartil (Q1) de todos los nϊmeros en las columnas escogidas (solamente columnas numιricas o de listas de nϊmeros) y crea una nueva columna (BIGDECIMAL) con el resultado. MedianNumber.name=Calcular mediana - -MedianNumber.description=Calcula la mediana de todos los n\u00fameros en las columnas escogidas (solamente columnas num\u00e9ricas o de listas de n\u00fameros) y crea una nueva columna (BIGDECIMAL) con el resultado. - +MedianNumber.description=Calcula la mediana de todos los nϊmeros en las columnas escogidas (solamente columnas numιricas o de listas de nϊmeros) y crea una nueva columna (BIGDECIMAL) con el resultado. ThirdQuartileNumber.name=Calcular tercer cuartil (Q3) - -ThirdQuartileNumber.description=Calcula el tercer cuartil (Q3) de todos los n\u00fameros en las columnas escogidas (solamente columnas num\u00e9ricas o de listas de n\u00fameros) y crea una nueva columna (BIGDECIMAL) con el resultado. - -InterQuartileRangeNumber.name=Calcular rango intercuart\u00edlico (IQR) - -InterQuartileRangeNumber.description=Calcula el rango intercuart\u00edlico (IQR) de todos los n\u00fameros en las columnas escogidas (solamente columnas num\u00e9ricas o de listas de n\u00fameros) y crea una nueva columna (BIGDECIMAL) con el resultado. - -SumNumbers.name=Calcular suma - -SumNumbers.description=Calcula la suma de todos los n\u00fameros en las columnas escogidas (solamente columnas num\u00e9ricas o de listas de n\u00fameros) y crea una nueva columna (BIGDECIMAL) con el resultado. - -MinimumNumber.name=Calcular valor m\u00ednimo - -MinimumNumber.description=Calcula el valor m\u00ednimo de todos los n\u00fameros en las columnas escogidas (solamente columnas num\u00e9ricas o de listas de n\u00fameros) y crea una nueva columna (BIGDECIMAL) con el resultado. - -MaximumNumber.name=Calcular valor m\u00e1ximo - -MaximumNumber.description=Calcula el valor m\u00e1ximo de todos los n\u00fameros en las columnas escogidas (solamente columnas num\u00e9ricas o de listas de n\u00fameros) y crea una nueva columna (BIGDECIMAL) con el resultado. - -BooleanLogicOperations.name=Mezcla l\u00f3gica de columnas booleanas - -BooleanLogicOperations.description=Mezcla varias columnas booleanas en el orden seleccionado para crear una nueva columna, pudiendo elegir las operaciones l\u00f3gicas realizadas entre cada par de columnas. Si cualquier valor es nulo, 'false' ser\u00e1 usado en su lugar. +ThirdQuartileNumber.description=Calcula el valor del tercer cuartil (Q3) de las columnas num\u00E9ricas (n\u00FAmero o lista de n\u00FAmeros). Crea una nueva columna (BigDecimal) con el resultado. +InterQuartileRangeNumber.name=Calcular rango intercuartνlico (IQR) +InterQuartileRangeNumber.description=Calcular el valor del rango intercuart\u00EDlico (IQR) de columnas num\u00E9ricas (n\u00FAmero o lista de n\u00FAmeros). Crear una nueva columna (BIGDECIMAL) con el resultado. +SumNumbers.name=Suma de los valores num\u00E9ricos +SumNumbers.description=Calcular la suma de las columnas num\u00E9ricas (n\u00FAmero o lista de n\u00FAmeros). Crear una nueva columna (BIGDECIMAL) con el resultado. +MinimumNumber.name=Calcula el valor m\u00EDnimo +MinimumNumber.description=Calcula el valor mνnimo de todos los nϊmeros en las columnas escogidas (solamente columnas numιricas o de listas de nϊmeros) y crea una nueva columna (BIGDECIMAL) con el resultado. +MaximumNumber.name=Calcular valor mαximo +MaximumNumber.description=Calcular el valor m\u00E1ximo de las columnas num\u00E9ricas (n\u00FAmero o lista de n\u00FAmeros). Crear una nueva columna (BIGDECIMAL) con el resultado. +BooleanLogicOperations.name=Unir columnas booleanas +BooleanLogicOperations.description=Combina las columnas booleanas en el orden seleccionado para crear una nueva columna, eligiendo las operaciones l\u00F3gicas aplicadas entre cada par de columnas. Un valor nulo se utiliza como falso. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_fr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_fr.properties index 51e0b52e47..cbbcbd42c8 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_fr.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_fr.properties @@ -1,55 +1,24 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:29+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -JoinWithSeparator.name=Jointure avec s\u00e9parateur - -JoinWithSeparator.description=Fusionne les valeurs de n'importe quelles colonnes avec un s\u00e9parateur (optionnel) entre elles. La colonne ainsi cr\u00e9\u00e9e est de type STRING. - -JoinNumberColumns.name=Jointure num\u00e9rique - -JoinNumberColumns.description=Cr\u00e9\u00e9 une colonne de liste de nombres de type LIST_BIGDECIMAL. - -CreateTimeInterval.name=Cr\u00e9er un intervalle temporel - -CreateTimeInterval.description=Cr\u00e9\u00e9 un intervalle temporel pour chaque ligne. Un ou deux colonnes servent de d\u00e9but/fin. - -AverageNumber.name=Calcule la moyenne - -AverageNumber.description=Calcule la valeur moyenne d'une colonne num\u00e9rique. Cr\u00e9\u00e9 une colonne de type BIGDECIMAL contenant le r\u00e9sultat. - -FirstQuartileNumber.name=Calcule le premier quartile (Q1) - -FirstQuartileNumber.description=Calcule le premier quartile (Q1) d'une colonne num\u00e9rique. Cr\u00e9\u00e9 une colonne de type BIGDECIMAL contenant le r\u00e9sultat. - -MedianNumber.name=Calcule la m\u00e9diane - -MedianNumber.description=Calcule la valeur m\u00e9diane d'une colonne num\u00e9rique. Cr\u00e9\u00e9 une colonne de type BIGDECIMAL contenant le r\u00e9sultat. - -ThirdQuartileNumber.name=Calcule le troisi\u00e8me quartile (Q3) - -ThirdQuartileNumber.description=Calcule le troisi\u00e8me quartile (Q3) d'une colonne num\u00e9rique. Cr\u00e9\u00e9 une colonne de type BIGDECIMAL contenant le r\u00e9sultat. - -InterQuartileRangeNumber.name=Calcule l'\u00e9cart interquartile (IQR) - -InterQuartileRangeNumber.description=Calcule l'\u00e9cart interquartile (IQR) d'une colonne num\u00e9rique. Cr\u00e9\u00e9 une colonne de type BIGDECIMAL contenant le r\u00e9sultat. - +JoinWithSeparator.name=Jointure avec sιparateur +JoinWithSeparator.description=Fusionne les valeurs de n'importe quelles colonnes avec un sιparateur (optionnel) entre elles. La colonne ainsi crιιe est de type STRING. +JoinNumberColumns.name=Jointure numιrique +JoinNumberColumns.description=Joindre les valeurs des colonnes de liste de numιros / numιros dans une nouvelle colonne de type double []. +CreateTimeInterval.name=Crιer un intervalle temporel +CreateTimeInterval.description=Crιι un intervalle temporel pour chaque ligne. Un ou deux colonnes servent de dιbut/fin. +AverageNumber.name=Calculer la valeur moyenne +AverageNumber.description=Calcule la valeur moyenne d'une colonne numιrique. Crιι une colonne de type BIGDECIMAL contenant le rιsultat. +FirstQuartileNumber.name=Calculer le premier quartile (Q1) +FirstQuartileNumber.description=Calcule le premier quartile (Q1) d'une colonne numιrique. Crιι une colonne de type BIGDECIMAL contenant le rιsultat. +MedianNumber.name=Calculer la valeur m\u00E9diane +MedianNumber.description=Calcule la valeur mιdiane d'une colonne numιrique. Crιι une colonne de type BIGDECIMAL contenant le rιsultat. +ThirdQuartileNumber.name=Calcule le troisiθme quartile (Q3) +ThirdQuartileNumber.description=Calcule le troisiθme quartile (Q3) d'une colonne numιrique. Crιι une colonne de type BIGDECIMAL contenant le rιsultat. +InterQuartileRangeNumber.name=Calculer l'\u00E9cart interquartile (EI) +InterQuartileRangeNumber.description=Calcule l'ιcart interquartile (IQR) d'une colonne numιrique. Crιι une colonne de type BIGDECIMAL contenant le rιsultat. SumNumbers.name=Calcule la somme - -SumNumbers.description=Calcule la somme d'une colonne num\u00e9rique. Cr\u00e9\u00e9 une colonne de type BIGDECIMAL contenant le r\u00e9sultat. - -MinimumNumber.name=Calcule le minimum - -MinimumNumber.description=Calcule le minimum d'une colonne num\u00e9rique. Cr\u00e9\u00e9 une colonne de type BIGDECIMAL contenant le r\u00e9sultat. - -MaximumNumber.name=Calcule la valeur maximale - -MaximumNumber.description=Calcule la valeur maximale d'une colonne num\u00e9rique, et cr\u00e9\u00e9 une nouvelle colonne de type BIGDECIMAL contenant le r\u00e9sultat. - -BooleanLogicOperations.name=Fusion de colonnes bool\u00e9ennes - -BooleanLogicOperations.description=Fusionne des colonnes bool\u00e9ennes dans une nouvelle, selon une op\u00e9ration logique entre chaque pair de colonnes. Les valeurs nulles sont interpr\u00e9t\u00e9es comme fausses. +SumNumbers.description=Calcule la somme d'une colonne numιrique. Crιι une colonne de type BIGDECIMAL contenant le rιsultat. +MinimumNumber.name=Calculer la valeur minimum +MinimumNumber.description=Calcule le minimum d'une colonne numιrique. Crιι une colonne de type BIGDECIMAL contenant le rιsultat. +MaximumNumber.name=Calculer la valeur maximum +MaximumNumber.description=Calcule la valeur maximale d'une colonne numιrique, et crιι une nouvelle colonne de type BIGDECIMAL contenant le rιsultat. +BooleanLogicOperations.name=Fusion de colonnes boolιennes +BooleanLogicOperations.description=Fusionne des colonnes boolιennes dans une nouvelle, selon une opιration logique entre chaque pair de colonnes. Les valeurs nulles sont interprιtιes comme fausses. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_he.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_he.properties new file mode 100644 index 0000000000..fa2155a884 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_he.properties @@ -0,0 +1,24 @@ +JoinWithSeparator.name=Join values with separator +JoinWithSeparator.description=Join the values of columns of any type with an optional separator. The new column has type STRING. +JoinNumberColumns.name=Join numerical columns +JoinNumberColumns.description=Join the values of number/number list columns into a new column with the type double[]. +CreateTimeInterval.name=Create time interval +CreateTimeInterval.description=Create a time interval for each row taking 1 or 2 columns as start/end times. +AverageNumber.name=Calculate average value +AverageNumber.description=Calculate the average value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +FirstQuartileNumber.name=Calculate first quartile (Q1) +FirstQuartileNumber.description=Calculate the first quartile (Q1) value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +MedianNumber.name=Calculate median value +MedianNumber.description=Calculate the median value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +ThirdQuartileNumber.name=Calculate third quartile (Q3) +ThirdQuartileNumber.description=Calculate the third quartile (Q3) value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +InterQuartileRangeNumber.name=Calculate interquartile range (IQR) +InterQuartileRangeNumber.description=Calculate the interquartile range (IQR) value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +SumNumbers.name=Sum number values +SumNumbers.description=Calculate the sum of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +MinimumNumber.name=Calculate minimum value +MinimumNumber.description=Calculate the minimum value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +MaximumNumber.name=Calculate maximum value +MaximumNumber.description=Calculate the maximum value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +BooleanLogicOperations.name=Merge boolean columns +BooleanLogicOperations.description=Merge boolean columns in the selected order to create a new column, choosing the logical operations applied between each pair of columns. A null value is used as false. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_hu.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_hu.properties new file mode 100644 index 0000000000..404c20ef49 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_hu.properties @@ -0,0 +1,26 @@ + + +InterQuartileRangeNumber.name=Interkvartilis tartom\u00E1ny (IQR) kisz\u00E1m\u00EDt\u00E1sa +AverageNumber.description=Sz\u00E1m\u00EDtsd ki a numerikus oszlopok \u00E1tlag\u00E9rt\u00E9k\u00E9t (sz\u00E1m vagy sz\u00E1mlista). Hozzon l\u00E9tre egy \u00FAj oszlopot (BIGDECIMAL) az eredm\u00E9nnyel. +MaximumNumber.name=Sz\u00E1m\u00EDtsa ki a maxim\u00E1lis \u00E9rt\u00E9ket +BooleanLogicOperations.description=\u00DAj oszlop l\u00E9trehoz\u00E1s\u00E1hoz egyes\u00EDtse a logikai oszlopokat a kiv\u00E1lasztott sorrendben, \u00E9s v\u00E1lassza ki az egyes oszlopp\u00E1rok k\u00F6z\u00F6tt alkalmazott logikai m\u0171veleteket. A null \u00E9rt\u00E9ket falsk\u00E9nt haszn\u00E1ljuk. +FirstQuartileNumber.name=Az els\u0151 kvartilis kisz\u00E1m\u00EDt\u00E1sa (Q1) +JoinNumberColumns.name=Csatlakoztassa a numerikus oszlopokat +BooleanLogicOperations.name=Logikai oszlopok egyes\u00EDt\u00E9se +InterQuartileRangeNumber.description=Sz\u00E1m\u00EDtsd ki a numerikus oszlopok (sz\u00E1m vagy sz\u00E1mlista) interkvartilis tartom\u00E1ny (IQR) \u00E9rt\u00E9k\u00E9t. Hozzon l\u00E9tre egy \u00FAj oszlopot (BIGDECIMAL) az eredm\u00E9nnyel. +MaximumNumber.description=Sz\u00E1m\u00EDtsa ki a numerikus oszlopok maxim\u00E1lis \u00E9rt\u00E9k\u00E9t (sz\u00E1m vagy sz\u00E1mlista). Hozzon l\u00E9tre egy \u00FAj oszlopot (BIGDECIMAL) az eredm\u00E9nnyel. +ThirdQuartileNumber.description=Sz\u00E1m\u00EDtsd ki a numerikus oszlopok (sz\u00E1m vagy sz\u00E1mlista) harmadik kvartilis (Q3) \u00E9rt\u00E9k\u00E9t. Hozzon l\u00E9tre egy \u00FAj oszlopot (BIGDECIMAL) az eredm\u00E9nnyel. +MedianNumber.name=Sz\u00E1m\u00EDtsa ki a medi\u00E1n \u00E9rt\u00E9ket +MinimumNumber.name=Sz\u00E1m\u00EDtsa ki a minim\u00E1lis \u00E9rt\u00E9ket +MinimumNumber.description=Sz\u00E1molja ki a numerikus oszlopok minim\u00E1lis \u00E9rt\u00E9k\u00E9t (sz\u00E1m vagy sz\u00E1mlista). Hozzon l\u00E9tre egy \u00FAj oszlopot (BIGDECIMAL) az eredm\u00E9nnyel. +AverageNumber.name=Sz\u00E1m\u00EDtsa ki az \u00E1tlag\u00E9rt\u00E9ket +SumNumbers.description=Sz\u00E1m\u00EDtsa ki a numerikus oszlopok \u00F6sszeg\u00E9t (sz\u00E1m vagy sz\u00E1mlista). Hozzon l\u00E9tre egy \u00FAj oszlopot (BIGDECIMAL) az eredm\u00E9nnyel. +CreateTimeInterval.name=Id\u0151intervallum l\u00E9trehoz\u00E1sa +MedianNumber.description=Sz\u00E1m\u00EDtsd ki a numerikus oszlopok medi\u00E1n \u00E9rt\u00E9k\u00E9t (sz\u00E1m vagy sz\u00E1mlista). Hozzon l\u00E9tre egy \u00FAj oszlopot (BIGDECIMAL) az eredm\u00E9nnyel. +JoinNumberColumns.description=Csatlakoztassa a sz\u00E1m/sz\u00E1mlista oszlopainak \u00E9rt\u00E9keit egy \u00FAj, double[] t\u00EDpus\u00FA oszlopba. +CreateTimeInterval.description=Hozzon l\u00E9tre egy id\u0151intervallumot minden sorhoz \u00FAgy, hogy 1 vagy 2 oszlopot vegyen fel kezd\u00E9si/v\u00E9gi id\u0151k\u00E9nt. +JoinWithSeparator.name=Csatlakoztassa az \u00E9rt\u00E9keket elv\u00E1laszt\u00F3val +SumNumbers.name=Sz\u00E1m\u00E9rt\u00E9kek \u00F6sszege +JoinWithSeparator.description=Csatlakoztassa a tetsz\u0151leges t\u00EDpus\u00FA oszlopok \u00E9rt\u00E9keit egy opcion\u00E1lis elv\u00E1laszt\u00F3val. Az \u00FAj oszlop t\u00EDpusa STRING. +FirstQuartileNumber.description=Sz\u00E1m\u00EDtsd ki a numerikus oszlopok (sz\u00E1m vagy sz\u00E1mlista) els\u0151 kvartilis (Q1) \u00E9rt\u00E9k\u00E9t. Hozzon l\u00E9tre egy \u00FAj oszlopot (BIGDECIMAL) az eredm\u00E9nnyel. +ThirdQuartileNumber.name=Harmadik kvartilis kisz\u00E1m\u00EDt\u00E1sa (Q3) diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_it.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_it.properties new file mode 100644 index 0000000000..fa2155a884 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_it.properties @@ -0,0 +1,24 @@ +JoinWithSeparator.name=Join values with separator +JoinWithSeparator.description=Join the values of columns of any type with an optional separator. The new column has type STRING. +JoinNumberColumns.name=Join numerical columns +JoinNumberColumns.description=Join the values of number/number list columns into a new column with the type double[]. +CreateTimeInterval.name=Create time interval +CreateTimeInterval.description=Create a time interval for each row taking 1 or 2 columns as start/end times. +AverageNumber.name=Calculate average value +AverageNumber.description=Calculate the average value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +FirstQuartileNumber.name=Calculate first quartile (Q1) +FirstQuartileNumber.description=Calculate the first quartile (Q1) value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +MedianNumber.name=Calculate median value +MedianNumber.description=Calculate the median value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +ThirdQuartileNumber.name=Calculate third quartile (Q3) +ThirdQuartileNumber.description=Calculate the third quartile (Q3) value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +InterQuartileRangeNumber.name=Calculate interquartile range (IQR) +InterQuartileRangeNumber.description=Calculate the interquartile range (IQR) value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +SumNumbers.name=Sum number values +SumNumbers.description=Calculate the sum of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +MinimumNumber.name=Calculate minimum value +MinimumNumber.description=Calculate the minimum value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +MaximumNumber.name=Calculate maximum value +MaximumNumber.description=Calculate the maximum value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +BooleanLogicOperations.name=Merge boolean columns +BooleanLogicOperations.description=Merge boolean columns in the selected order to create a new column, choosing the logical operations applied between each pair of columns. A null value is used as false. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_ja.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_ja.properties index fc9428001a..0beb8620a9 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_ja.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_ja.properties @@ -1,55 +1,26 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-02 11\:15+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -JoinWithSeparator.name=\u533a\u5207\u308a\u5b50\u4ed8\u304d\u306e\u5024\u3092\u8ffd\u52a0 - -JoinWithSeparator.description=\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u533a\u5207\u308a\u5b50\u3092\u6301\u3064\u4efb\u610f\u306e\u578b\u306e\u5217\u306e\u5024\u3092\u7d50\u5408\u3057\u307e\u3059\u3002\u65b0\u3057\u3044\u5217\u306e\u578b\u306fSTRING\u3067\u3059\u3002 - -JoinNumberColumns.name=\u6570\u5024\u306e\u5217\u3092\u8ffd\u52a0 - -JoinNumberColumns.description=LIST_BIGDECIMAL\u578b\u3092\u6301\u3064\u65b0\u3057\u3044\u5217\u306b\u756a\u53f7/\u756a\u53f7\u30ea\u30b9\u30c8\u306e\u5217\u306e\u5024\u3092\u7d50\u5408\u3057\u307e\u3059\u3002 - -CreateTimeInterval.name=\u6642\u9593\u9593\u9694\u3092\u4f5c\u6210 - -CreateTimeInterval.description=\u958b\u59cb/\u7d42\u4e86\u6642\u523b\u3068\u3057\u30661\u307e\u305f\u306f2\u5217\u3092\u5360\u3081\u308b\u5404\u884c\u7528\u306b\u6642\u9593\u9593\u9694\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002 - -AverageNumber.name=\u5e73\u5747\u5024\u3092\u8a08\u7b97 - -AverageNumber.description=\u6570\u5024\u5217(\u6570\u5024\u307e\u305f\u306f\u6570\u5024\u306e\u30ea\u30b9\u30c8)\u306e\u5e73\u5747\u5024\u3092\u8a08\u7b97\u3059\u308b\u3002\u7d50\u679c\u3092\u5165\u308c\u305f\u65b0\u898f\u5217 (BIGDECIMAL)\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002 - -FirstQuartileNumber.name=\u7b2c\u4e00\u56db\u5206\u4f4d(Q1)\u3092\u8a08\u7b97 - -FirstQuartileNumber.description=\u6570\u5024\u5217(\u6570\u5024\u307e\u305f\u306f\u6570\u5024\u306e\u30ea\u30b9\u30c8)\u306e\u7b2c\u4e00\u56db\u5206\u4f4d(Q1)\u3092\u8a08\u7b97\u3059\u308b\u3002\u7d50\u679c\u3092\u5165\u308c\u305f\u65b0\u898f\u5217 (BIGDECIMAL)\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002 - -MedianNumber.name=\u4e2d\u592e\u5024\u3092\u8a08\u7b97 - -MedianNumber.description=\u6570\u5024\u5217(\u6570\u5024\u307e\u305f\u306f\u6570\u5024\u306e\u30ea\u30b9\u30c8)\u306e\u4e2d\u592e\u5024\u3092\u8a08\u7b97\u3059\u308b\u3002\u7d50\u679c\u3092\u5165\u308c\u305f\u65b0\u898f\u5217 (BIGDECIMAL)\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002 - -ThirdQuartileNumber.name=\u7b2c\u4e09\u56db\u5206\u4f4d(Q3)\u3092\u8a08\u7b97 - -ThirdQuartileNumber.description=\u6570\u5024\u5217(\u6570\u5024\u307e\u305f\u306f\u6570\u5024\u306e\u30ea\u30b9\u30c8)\u306e\u7b2c\u4e09\u56db\u5206\u4f4d(Q3)\u3092\u8a08\u7b97\u3059\u308b\u3002\u7d50\u679c\u3092\u5165\u308c\u305f\u65b0\u898f\u5217 (BIGDECIMAL)\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002 - -InterQuartileRangeNumber.name=\u56db\u5206\u4f4d\u7bc4\u56f2\u3092\u8a08\u7b97 (IQR) - -InterQuartileRangeNumber.description=\u6570\u5024\u5217(\u6570\u5024\u307e\u305f\u306f\u6570\u5024\u306e\u30ea\u30b9\u30c8)\u306e\u56db\u5206\u4f4d\u7bc4\u56f2 (IQR)\u3092\u8a08\u7b97\u3059\u308b\u3002\u7d50\u679c\u3092\u5165\u308c\u305f\u65b0\u898f\u5217 (BIGDECIMAL)\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002 - -SumNumbers.name=\u6570\u5024\u306e\u5408\u8a08 - -SumNumbers.description=\u6570\u5024\u5217(\u6570\u5024\u307e\u305f\u306f\u6570\u5024\u306e\u30ea\u30b9\u30c8)\u306e\u6570\u5024\u306e\u5408\u8a08\u3092\u8a08\u7b97\u3059\u308b\u3002\u7d50\u679c\u3092\u5165\u308c\u305f\u65b0\u898f\u5217 (BIGDECIMAL)\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002 - -MinimumNumber.name=\u6700\u5c0f\u5024\u3092\u8a08\u7b97 - -MinimumNumber.description=\u6570\u5024\u5217(\u6570\u5024\u307e\u305f\u306f\u6570\u5024\u306e\u30ea\u30b9\u30c8)\u306e\u6700\u5c0f\u5024\u3092\u8a08\u7b97\u3059\u308b\u3002\u7d50\u679c\u3092\u5165\u308c\u305f\u65b0\u898f\u5217 (BIGDECIMAL)\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002 - -MaximumNumber.name=\u6700\u5927\u5024\u3092\u8a08\u7b97 - -MaximumNumber.description=\u6570\u5024\u5217(\u6570\u5024\u307e\u305f\u306f\u6570\u5024\u306e\u30ea\u30b9\u30c8)\u306e\u6700\u5927\u5024\u3092\u8a08\u7b97\u3059\u308b\u3002\u7d50\u679c\u3092\u5165\u308c\u305f\u65b0\u898f\u5217 (BIGDECIMAL)\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002 - -BooleanLogicOperations.name=\u30d6\u30fc\u30eb\u5024\u306e\u5217\u3092\u7d71\u5408 - -BooleanLogicOperations.description=\u65b0\u3057\u3044\u5217\u3092\u4f5c\u308b\u305f\u3081\u306b\u9078\u629e\u3057\u305f\u9806\u306b\u3001\u5217\u306e\u5404\u30da\u30a2\u9593\u306b\u9069\u7528\u3055\u308c\u305f\u8ad6\u7406\u6f14\u7b97\u3092\u9078\u629e\u3057\u3001\u8ad6\u7406\u578b\u5217\u3092\u7d71\u5408\u3057\u307e\u3059\u3002null\u5024\u306f\u507d\u3068\u307f\u306a\u3057\u307e\u3059\u3002 +JoinWithSeparator.name=\u533a\u5207\u308a\u5b50\u4ed8\u304d\u306e\u5024\u3092\u8ffd\u52a0 +JoinWithSeparator.description=\u30aa\u30d7\u30b7\u30e7\u30f3\u306e\u533a\u5207\u308a\u5b50\u3092\u6301\u3064\u4efb\u610f\u306e\u578b\u306e\u5217\u306e\u5024\u3092\u7d50\u5408\u3057\u307e\u3059\u3002\u65b0\u3057\u3044\u5217\u306e\u578b\u306fSTRING\u3067\u3059\u3002 +JoinNumberColumns.name=\u6570\u5024\u306e\u5217\u3092\u8ffd\u52a0 +# JoinNumberColumns.description=Join the values of number/number list columns into a new column with the type double[]. +CreateTimeInterval.name=\u6642\u9593\u9593\u9694\u3092\u4f5c\u6210 +CreateTimeInterval.description=\u958b\u59cb/\u7d42\u4e86\u6642\u523b\u3068\u3057\u30661\u307e\u305f\u306f2\u5217\u3092\u5360\u3081\u308b\u5404\u884c\u7528\u306b\u6642\u9593\u9593\u9694\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002 + +AverageNumber.name=\u5e73\u5747\u5024\u3092\u8a08\u7b97 +AverageNumber.description=\u6570\u5024\u5217(\u6570\u5024\u307e\u305f\u306f\u6570\u5024\u306e\u30ea\u30b9\u30c8)\u306e\u5e73\u5747\u5024\u3092\u8a08\u7b97\u3059\u308b\u3002\u7d50\u679c\u3092\u5165\u308c\u305f\u65b0\u898f\u5217 (BIGDECIMAL)\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002 +FirstQuartileNumber.name=\u7b2c\u4e00\u56db\u5206\u4f4d(Q1)\u3092\u8a08\u7b97 +FirstQuartileNumber.description=\u6570\u5024\u5217(\u6570\u5024\u307e\u305f\u306f\u6570\u5024\u306e\u30ea\u30b9\u30c8)\u306e\u7b2c\u4e00\u56db\u5206\u4f4d(Q1)\u3092\u8a08\u7b97\u3059\u308b\u3002\u7d50\u679c\u3092\u5165\u308c\u305f\u65b0\u898f\u5217 (BIGDECIMAL)\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002 +MedianNumber.name=\u4e2d\u592e\u5024\u3092\u8a08\u7b97 +MedianNumber.description=\u6570\u5024\u5217(\u6570\u5024\u307e\u305f\u306f\u6570\u5024\u306e\u30ea\u30b9\u30c8)\u306e\u4e2d\u592e\u5024\u3092\u8a08\u7b97\u3059\u308b\u3002\u7d50\u679c\u3092\u5165\u308c\u305f\u65b0\u898f\u5217 (BIGDECIMAL)\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002 +ThirdQuartileNumber.name=\u7b2c\u4e09\u56db\u5206\u4f4d(Q3)\u3092\u8a08\u7b97 +ThirdQuartileNumber.description=\u6570\u5024\u5217(\u6570\u5024\u307e\u305f\u306f\u6570\u5024\u306e\u30ea\u30b9\u30c8)\u306e\u7b2c\u4e09\u56db\u5206\u4f4d(Q3)\u3092\u8a08\u7b97\u3059\u308b\u3002\u7d50\u679c\u3092\u5165\u308c\u305f\u65b0\u898f\u5217 (BIGDECIMAL)\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002 +InterQuartileRangeNumber.name=\u56db\u5206\u4f4d\u7bc4\u56f2\u3092\u8a08\u7b97 (IQR) +InterQuartileRangeNumber.description=\u6570\u5024\u5217(\u6570\u5024\u307e\u305f\u306f\u6570\u5024\u306e\u30ea\u30b9\u30c8)\u306e\u56db\u5206\u4f4d\u7bc4\u56f2 (IQR)\u3092\u8a08\u7b97\u3059\u308b\u3002\u7d50\u679c\u3092\u5165\u308c\u305f\u65b0\u898f\u5217 (BIGDECIMAL)\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002 +SumNumbers.name=\u6570\u5024\u306e\u5408\u8a08 +SumNumbers.description=\u6570\u5024\u5217(\u6570\u5024\u307e\u305f\u306f\u6570\u5024\u306e\u30ea\u30b9\u30c8)\u306e\u6570\u5024\u306e\u5408\u8a08\u3092\u8a08\u7b97\u3059\u308b\u3002\u7d50\u679c\u3092\u5165\u308c\u305f\u65b0\u898f\u5217 (BIGDECIMAL)\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002 +MinimumNumber.name=\u6700\u5c0f\u5024\u3092\u8a08\u7b97 +MinimumNumber.description=\u6570\u5024\u5217(\u6570\u5024\u307e\u305f\u306f\u6570\u5024\u306e\u30ea\u30b9\u30c8)\u306e\u6700\u5c0f\u5024\u3092\u8a08\u7b97\u3059\u308b\u3002\u7d50\u679c\u3092\u5165\u308c\u305f\u65b0\u898f\u5217 (BIGDECIMAL)\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002 +MaximumNumber.name=\u6700\u5927\u5024\u3092\u8a08\u7b97 +MaximumNumber.description=\u6570\u5024\u5217(\u6570\u5024\u307e\u305f\u306f\u6570\u5024\u306e\u30ea\u30b9\u30c8)\u306e\u6700\u5927\u5024\u3092\u8a08\u7b97\u3059\u308b\u3002\u7d50\u679c\u3092\u5165\u308c\u305f\u65b0\u898f\u5217 (BIGDECIMAL)\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002 + +BooleanLogicOperations.name=\u30d6\u30fc\u30eb\u5024\u306e\u5217\u3092\u7d71\u5408 +BooleanLogicOperations.description=\u65b0\u3057\u3044\u5217\u3092\u4f5c\u308b\u305f\u3081\u306b\u9078\u629e\u3057\u305f\u9806\u306b\u3001\u5217\u306e\u5404\u30da\u30a2\u9593\u306b\u9069\u7528\u3055\u308c\u305f\u8ad6\u7406\u6f14\u7b97\u3092\u9078\u629e\u3057\u3001\u8ad6\u7406\u578b\u5217\u3092\u7d71\u5408\u3057\u307e\u3059\u3002null\u5024\u306f\u507d\u3068\u307f\u306a\u3057\u307e\u3059\u3002 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_ko.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_ko.properties new file mode 100644 index 0000000000..6f97c862ff --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_ko.properties @@ -0,0 +1,26 @@ + + +JoinWithSeparator.name=\uAD6C\uBD84\uC790\uB85C \uAC12 \uD569\uCE58\uAE30 +JoinNumberColumns.name=\uC22B\uC790 \uC5F4 \uD569\uCE58\uAE30 +JoinNumberColumns.description=\uC22B\uC790/\uC22B\uC790 \uB9AC\uC2A4\uD2B8 \uC5F4\uC758 \uAC12\uC744 double[] \uD615\uC758 \uC0C8 \uC5F4\uB85C \uD569\uCE58\uAE30. +CreateTimeInterval.name=\uC2DC\uAC04 \uAC04\uACA9\uC744 \uC0DD\uC131\uD558\uAE30 +AverageNumber.name=\uD3C9\uADE0\uAC12 \uACC4\uC0B0\uD558\uAE30 +AverageNumber.description=\uC22B\uC790 \uC5F4(\uC22B\uC790 \uD639\uC740 \uC22B\uC790 \uB9AC\uC2A4\uD2B8)\uC758 \uD3C9\uADE0 \uAC12\uC744 \uACC4\uC0B0\uD558\uAE30. \uADF8 \uACB0\uACFC\uB85C \uC0C8\uB85C\uC6B4 \uC5F4(BIGDECIMAL \uD615)\uC744 \uC0DD\uC131\uD558\uAE30. +MedianNumber.name=\uC911\uC559\uAC12 \uACC4\uC0B0\uD558\uAE30 +MedianNumber.description=\uC22B\uC790 \uC5F4(\uC22B\uC790\uB098 \uC22B\uC790 \uB9AC\uC2A4\uD2B8)\uC758 \uC911\uAC04\uAC12\uC744 \uACC4\uC0B0\uD558\uAE30. \uADF8 \uACB0\uACFC\uB85C \uC0C8\uB85C\uC6B4 \uC5F4(BIGDECIMAL\uD615)\uC744 \uC0DD\uC131\uD558\uAE30. +ThirdQuartileNumber.name=\uC81C3 \uC0AC\uBD84\uC704\uC218(Q3) \uACC4\uC0B0\uD558\uAE30 +FirstQuartileNumber.name=\uC81C1 \uC0AC\uBD84\uC704\uC218(Q1) \uACC4\uC0B0\uD558\uAE30 +InterQuartileRangeNumber.name=\uC0AC\uBD84\uC704\uAC04 \uBC94\uC704(IQR) \uACC4\uC0B0\uD558\uAE30 +InterQuartileRangeNumber.description=\uC22B\uC790 \uC5F4 (\uC22B\uC790\uB098 \uC22B\uC790 \uB9AC\uC2A4\uD2B8)\uC758 \uC0AC\uBD84\uC704\uAC04 \uBC94\uC704(IQR)\uC744 \uACC4\uC0B0\uD558\uAE30. \uADF8 \uACB0\uACFC\uB85C \uC0C8\uB85C\uC6B4 \uC5F4(BIGDECIMAL\uD615)\uC744 \uC0DD\uC131\uD558\uAE30. +SumNumbers.name=\uC22B\uC790 \uAC12 \uB354\uD558\uAE30 +SumNumbers.description=\uC22B\uC790 \uC5F4 (\uC22B\uC790\uB098 \uC22B\uC790 \uB9AC\uC2A4\uD2B8)\uC758 \uD569\uC744 \uACC4\uC0B0\uD558\uAE30. \uADF8 \uACB0\uACFC\uB85C \uC0C8\uB85C\uC6B4 \uC5F4(BIGDECIMAL\uD615)\uC744 \uC0DD\uC131\uD558\uAE30. +MinimumNumber.name=\uCD5C\uC19F\uAC12\uC744 \uACC4\uC0B0\uD558\uAE30 +MinimumNumber.description=\uC22B\uC790 \uC5F4(\uC22B\uC790\uB098 \uC22B\uC790 \uB9AC\uC2A4\uD2B8)\uC758 \uCD5C\uC19F\uAC12\uC744 \uACC4\uC0B0\uD558\uAE30. \uADF8 \uACB0\uACFC\uB85C \uC0C8\uB85C\uC6B4 \uC5F4(BIGDECIMAL\uD615)\uC744 \uC0DD\uC131\uD558\uAE30. +MaximumNumber.name=\uCD5C\uB313\uAC12 \uACC4\uC0B0\uD558\uAE30 +MaximumNumber.description=\uC22B\uC790 \uC5F4(\uC22B\uC790\uB098 \uC22B\uC790 \uB9AC\uC2A4\uD2B8)\uC758 \uCD5C\uB313\uAC12\uC744 \uACC4\uC0B0\uD558\uAE30. \uADF8 \uACB0\uACFC\uB85C \uC0C8\uB85C\uC6B4 \uC5F4(BIGDECIMAL\uD615)\uC744 \uC0DD\uC131\uD558\uAE30. +BooleanLogicOperations.name=\uBD80\uC6B8\uD615 \uC5F4 \uD569\uCE58\uAE30 +BooleanLogicOperations.description=\uAC01 \uC5F4 \uC30D \uC0AC\uC774\uC5D0 \uC801\uC6A9\uB418\uB294 \uB17C\uB9AC\uC801 \uC5F0\uC0B0\uC744 \uC120\uD0DD\uD558\uC5EC, \uC120\uD0DD\uB41C \uC21C\uC11C\uB300\uB85C \uBD80\uC6B8\uD615 \uC5F4\uC744 \uBCD1\uD569\uD558\uC5EC \uC0C8\uB85C\uC6B4 \uC5F4 \uB9CC\uB4E4\uAE30. null \uAC12\uC740 false\uB85C \uC0AC\uC6A9\uB41C\uB2E4. +JoinWithSeparator.description=\uC5EC\uB7EC \uC720\uD615\uC758 \uC5F4\uC744 \uC120\uD0DD\uC801 \uAD6C\uBD84\uC790\uB85C \uD569\uCE58\uAE30. \uC0C8 \uC5F4\uC740 STRING \uD615\uC744 \uAC16\uB294\uB2E4. +CreateTimeInterval.description=\uC2DC\uC791/\uB05D \uC2DC\uAC04\uC73C\uB85C 1\uAC1C \uD639\uC740 2\uAC1C \uC5F4\uC744 \uAC16\uB294 \uAC01 \uD589\uC5D0 \uB300\uD55C \uC2DC\uAC04 \uAC04\uACA9\uC744 \uC0DD\uC131\uD558\uAE30. +FirstQuartileNumber.description=\uC22B\uC790 \uC5F4(\uC22B\uC790 \uD639\uC740 \uC22B\uC790 \uB9AC\uC2A4\uD2B8)\uC758 \uCCAB \uC0AC\uBD84\uC704\uC218(Q1)\uB97C \uACC4\uC0B0\uD558\uAE30. \uADF8 \uACB0\uACFC\uB85C \uC0C8\uB85C\uC6B4 \uC5F4(BIGDECIMAL \uD615)\uC744 \uC0DD\uC131\uD558\uAE30. +ThirdQuartileNumber.description=\uC22B\uC790 \uC5F4 (\uC22B\uC790\uB098 \uC22B\uC790 \uB9AC\uC2A4\uD2B8)\uC758 \uC81C3 \uC0AC\uBD84\uC704\uC218(Q3)\uB97C \uACC4\uC0B0\uD558\uAE30. \uADF8 \uACB0\uACFC\uB85C \uC0C8\uB85C\uC6B4 \uC5F4(BIGDECIMAL\uD615)\uC744 \uC0DD\uC131\uD558\uAE30. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_nl.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_nl.properties new file mode 100644 index 0000000000..fa2155a884 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_nl.properties @@ -0,0 +1,24 @@ +JoinWithSeparator.name=Join values with separator +JoinWithSeparator.description=Join the values of columns of any type with an optional separator. The new column has type STRING. +JoinNumberColumns.name=Join numerical columns +JoinNumberColumns.description=Join the values of number/number list columns into a new column with the type double[]. +CreateTimeInterval.name=Create time interval +CreateTimeInterval.description=Create a time interval for each row taking 1 or 2 columns as start/end times. +AverageNumber.name=Calculate average value +AverageNumber.description=Calculate the average value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +FirstQuartileNumber.name=Calculate first quartile (Q1) +FirstQuartileNumber.description=Calculate the first quartile (Q1) value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +MedianNumber.name=Calculate median value +MedianNumber.description=Calculate the median value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +ThirdQuartileNumber.name=Calculate third quartile (Q3) +ThirdQuartileNumber.description=Calculate the third quartile (Q3) value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +InterQuartileRangeNumber.name=Calculate interquartile range (IQR) +InterQuartileRangeNumber.description=Calculate the interquartile range (IQR) value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +SumNumbers.name=Sum number values +SumNumbers.description=Calculate the sum of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +MinimumNumber.name=Calculate minimum value +MinimumNumber.description=Calculate the minimum value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +MaximumNumber.name=Calculate maximum value +MaximumNumber.description=Calculate the maximum value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +BooleanLogicOperations.name=Merge boolean columns +BooleanLogicOperations.description=Merge boolean columns in the selected order to create a new column, choosing the logical operations applied between each pair of columns. A null value is used as false. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_pt.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_pt.properties new file mode 100644 index 0000000000..0b97451ae1 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_pt.properties @@ -0,0 +1,24 @@ +JoinWithSeparator.name=Unir valores com separador +AverageNumber.description=Calcula o valor m\u00E9dio das colunas num\u00E9ricas (n\u00FAmeros ou listas de n\u00FAmeros). Cria uma coluna nova (BIGDECIMAL) com o resultado. +ThirdQuartileNumber.description=Calcula o valor do terceiro quartil (Q3) das colunas num\u00E9ricas (n\u00FAmeros ou lista de n\u00FAmeros). Cria uma coluna nova (BIGDECIMAL) com o resultado. +InterQuartileRangeNumber.description=Calcula o valor do intervalo do interquartil (IQR) das colunas num\u00E9ricas (n\u00FAmeros ou lista de n\u00FAmeros). Cria uma coluna nova (BIGDECIMAL) com o resultado. +MinimumNumber.name=Calcular valor m\u00EDnimo +MaximumNumber.description=Calcula o valor m\u00E1ximo das colunas num\u00E9ricas (n\u00FAmeros ou listas de n\u00FAmeros). Cria uma coluna nova (BIGDECIMAL) com o resultado. +JoinWithSeparator.description=Une os valores das colunas de qualquer tipo com um separador opcional. A nova coluna ser\u00E1 do tipo STRING. +JoinNumberColumns.name=Unir colunas num\u00E9ricas +JoinNumberColumns.description=Une os valores das colunas de lista de n\u00FAmeros/n\u00FAmeros numa coluna nova com o tipo double[]. +CreateTimeInterval.name=Criar intervalo de tempo +CreateTimeInterval.description=Cria um intervalo de tempo para cada linha, usando 1 ou 2 colunas como tempos de in\u00EDcio/fim. +AverageNumber.name=Calcular valor m\u00E9dio +FirstQuartileNumber.name=Calcular primeiro quartil (Q1) +FirstQuartileNumber.description=Calcula o primeiro quartil (Q1) de todos os n\u00FAmeros nas colunas selecionadas (somente colunas num\u00E9ricas ou de listas de n\u00FAmeros) e cria uma nova coluna (BIGDECIMAL) com o resultado. +MedianNumber.name=Calcular mediana +MedianNumber.description=Calcula a mediana de todos os n\u00FAmeros nas colunas selecionadas (somente colunas num\u00E9ricas ou de listas de n\u00FAmeros) e cria uma nova coluna (BIGDECIMAL) com o resultado. +ThirdQuartileNumber.name=Calcule terceiro quartil (Q3) +InterQuartileRangeNumber.name=Calcular intervalo interquartil (IQR) +SumNumbers.name=Calcular soma +SumNumbers.description=Calcula a soma de todos os n\u00FAmeros nas colunas selecionadas (somente colunas num\u00E9ricas ou de listas de n\u00FAmeros) e cria uma nova coluna (BIGDECIMAL) com o resultado. +MinimumNumber.description=Calcula o valor m\u00EDnimo de todos os n\u00FAmeros nas colunas selecionadas (somente colunas num\u00E9ricas ou de listas de n\u00FAmeros) e cria uma nova coluna (BIGDECIMAL) com o resultado. +MaximumNumber.name=Calcular valor m\u00E1ximo +BooleanLogicOperations.name=Mesclar logicamente colunas booleanas +BooleanLogicOperations.description=Mesclar colunas booleanas na ordem selecionada para criar uma nova coluna, escolhendo as opera\u00E7\u00F5es l\u00F3gicas aplicadas a cada par de colunas. Valores nulos ser\u00E3o considerados como 'falso'. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_pt_BR.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_pt_BR.properties index 26f0e84f4c..772e3bc2c9 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_pt_BR.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_pt_BR.properties @@ -1,55 +1,25 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 12\:08+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - JoinWithSeparator.name=Unir valores com separador - -JoinWithSeparator.description=Une os valores das colunas de qualquer tipo com um separador opcional. A nova coluna ser\u00e1 do tipo STRING. - -JoinNumberColumns.name=Unir colunas num\u00e9ricas - -JoinNumberColumns.description=Une os valores de v\u00e1rias columnas num\u00e9ricas/listas de n\u00fameros criando uma nova coluna do tipo LIST_BIGDECIMAL. - +JoinWithSeparator.description=Une os valores das colunas de qualquer tipo com um separador opcional. A nova coluna serα do tipo STRING. +JoinNumberColumns.name=Unir colunas numιricas +# JoinNumberColumns.description=Join the values of number/number list columns into a new column with the type double[]. CreateTimeInterval.name=Criar intervalo de tempo - -CreateTimeInterval.description=Cria um intervalo de tempo para cada linha, usando 1 ou 2 colunas como tempos de in\u00edcio/fim. - -AverageNumber.name=Calcular valor m\u00e9dio - -AverageNumber.description=Calcula o valor m\u00e9dio de todos os n\u00fameros nas colunas selecionadas (somente colunas num\u00e9ricas ou de listas de n\u00fameros) e cria uma nova coluna (BIGDECIMAL) com o resultado. - +CreateTimeInterval.description=Cria um intervalo de tempo para cada linha, usando 1 ou 2 colunas como tempos de inνcio/fim. +AverageNumber.name=Calcular valor mιdio +AverageNumber.description=Calcula o valor m\u00E9dio das colunas num\u00E9ricas (n\u00FAmeros ou listas de n\u00FAmeros). Cria uma nova coluna (BIGDECIMAL) com o resultado. FirstQuartileNumber.name=Calcular primeiro quartil (Q1) - -FirstQuartileNumber.description=Calcula o primeiro quartil (Q1) de todos os n\u00fameros nas colunas selecionadas (somente colunas num\u00e9ricas ou de listas de n\u00fameros) e cria uma nova coluna (BIGDECIMAL) com o resultado. - +FirstQuartileNumber.description=Calcula o primeiro quartil (Q1) de todos os nϊmeros nas colunas selecionadas (somente colunas numιricas ou de listas de nϊmeros) e cria uma nova coluna (BIGDECIMAL) com o resultado. MedianNumber.name=Calcular mediana - -MedianNumber.description=Calcula a mediana de todos os n\u00fameros nas colunas selecionadas (somente colunas num\u00e9ricas ou de listas de n\u00fameros) e cria uma nova coluna (BIGDECIMAL) com o resultado. - +MedianNumber.description=Calcula a mediana de todos os nϊmeros nas colunas selecionadas (somente colunas numιricas ou de listas de nϊmeros) e cria uma nova coluna (BIGDECIMAL) com o resultado. ThirdQuartileNumber.name=Calcule terceiro quartil (Q3) - -ThirdQuartileNumber.description=Calcula o terceiro quartil (Q3) de todos os n\u00fameros nas colunas selecionadas (somente colunas num\u00e9ricas ou de listas de n\u00fameros) e cria uma nova coluna (BIGDECIMAL) com o resultado. - +ThirdQuartileNumber.description=Calcula o valor do terceiro quartil (Q3) das colunas num\u00E9ricas (n\u00FAmeros ou lista de n\u00FAmeros). Cria uma nova coluna (BIGDECIMAL) com o resultado. InterQuartileRangeNumber.name=Calcular intervalo interquartil (IQR) - -InterQuartileRangeNumber.description=Calcula o intervalo de valores interquartil (IQR) de todos os n\u00fameros nas colunas selecionadas (somente colunas num\u00e9ricas ou de listas de n\u00fameros) e cria uma nova coluna (BIGDECIMAL) com o resultado. - +InterQuartileRangeNumber.description=Calcula o valor do intervalo do interquartil (IQR) das colunas num\u00E9ricas (n\u00FAmeros ou lista de n\u00FAmeros). Cria uma nova coluna (BIGDECIMAL) com o resultado. SumNumbers.name=Calcular soma - -SumNumbers.description=Calcula a soma de todos os n\u00fameros nas colunas selecionadas (somente colunas num\u00e9ricas ou de listas de n\u00fameros) e cria uma nova coluna (BIGDECIMAL) com o resultado. - -MinimumNumber.name=Calcular valor m\u00ednimo - -MinimumNumber.description=Calcula o valor m\u00ednimo de todos os n\u00fameros nas colunas selecionadas (somente colunas num\u00e9ricas ou de listas de n\u00fameros) e cria uma nova coluna (BIGDECIMAL) com o resultado. - -MaximumNumber.name=Calcular valor m\u00e1ximo - -MaximumNumber.description=Calcula o valor m\u00e1ximo de todos os n\u00fameros nas colunas selecionadas (somente colunas num\u00e9ricas ou de listas de n\u00fameros) e cria uma nova coluna (BIGDECIMAL) com o resultado. - +SumNumbers.description=Calcula a soma de todos os nϊmeros nas colunas selecionadas (somente colunas numιricas ou de listas de nϊmeros) e cria uma nova coluna (BIGDECIMAL) com o resultado. +MinimumNumber.name=Calcular valor mνnimo +MinimumNumber.description=Calcula o valor mνnimo de todos os nϊmeros nas colunas selecionadas (somente colunas numιricas ou de listas de nϊmeros) e cria uma nova coluna (BIGDECIMAL) com o resultado. +MaximumNumber.name=Calcular valor mαximo +MaximumNumber.description=Calcula o valor m\u00E1ximo das colunas num\u00E9ricas (n\u00FAmeros ou listas de n\u00FAmeros). Cria uma nova coluna (BIGDECIMAL) com o resultado. BooleanLogicOperations.name=Mesclar logicamente colunas booleanas - -BooleanLogicOperations.description=Mesclar colunas booleanas na ordem selecionada para criar uma nova coluna, escolhendo as opera\u00e7\u00f5es l\u00f3gicas aplicadas a cada par de colunas. Valores nulos ser\u00e3o considerados como 'falso'. +BooleanLogicOperations.description=Mesclar colunas booleanas na ordem selecionada para criar uma nova coluna, escolhendo as operaηυes lσgicas aplicadas a cada par de colunas. Valores nulos serγo considerados como 'falso'. +JoinNumberColumns.description=Une os valores das colunas de lista de n\u00FAmeros/n\u00FAmeros dentro de uma nova coluna com o tipo double[]. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_ro.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_ro.properties new file mode 100644 index 0000000000..d8a0ac980a --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_ro.properties @@ -0,0 +1,26 @@ + + +JoinWithSeparator.name=Une\u0219te valorile cu separator +JoinNumberColumns.name=Une\u0219te coloanele numerice +JoinNumberColumns.description=Une\u0219te valorile coloanelor de tip num\u0103r/list\u0103 de numere \u00EEntr-o nou\u0103 coloan\u0103 de tip double[]. +CreateTimeInterval.description=Creaz\u0103 un interval de timp pentru fiecare r\u00E2nd, lu\u00E2nd 1 sau 2 coloane ca timpi de \u00EEnceput/sf\u00E2r\u0219it. +AverageNumber.description=Calculeaz\u0103 valoarea medie a coloanelor numerice (numere sau liste de numere). Creaz\u0103 o nou\u0103 coloan\u0103 (BIGDECIMAL) cu rezultatul. +FirstQuartileNumber.name=Calculeaz\u0103 prima cuartil\u0103 (Q1) +MedianNumber.name=Calculeaz\u0103 valoarea median\u0103 +MedianNumber.description=Calculeaz\u0103 valoarea median\u0103 a coloanelor numerice (numere sau liste de numere). Creaz\u0103 o nou\u0103 coloan\u0103 (BIGDECIMAL) cu rezultatul. +InterQuartileRangeNumber.name=Calculeaz\u0103 intervalul dintre cuartile (IQR) +InterQuartileRangeNumber.description=Calculeaz\u0103 intervalul dintre cuartile (IQR) al coloanelor numerice (numere sau liste de numere). Creaz\u0103 o nou\u0103 coloan\u0103 (BIGDECIMAL) cu rezultatul. +SumNumbers.name=\u00CEnsumeaz\u0103 valorile numerice +SumNumbers.description=Calculeaz\u0103 suma coloanelor numerice (numere sau liste de numere). Creaz\u0103 o nou\u0103 coloan\u0103 (BIGDECIMAL) cu rezultatul. +MinimumNumber.name=Calculeaz\u0103 valoarea minim\u0103 +MaximumNumber.name=Calculeaz\u0103 valoarea maxim\u0103 +MaximumNumber.description=Calculeaz\u0103 valoarea maxim\u0103 a coloanelor numerice (numere sau liste de numere). Creaz\u0103 o nou\u0103 coloan\u0103 (BIGDECIMAL) cu rezultatul. +BooleanLogicOperations.name=\u00CEmbin\u0103 coloanele booleene +JoinWithSeparator.description=Une\u0219te valorile coloanelor de orice tip cu un separator op\u021Bional. Noua coloan\u0103 are tipul STRING. +AverageNumber.name=Calculeaz\u0103 valoarea medie +CreateTimeInterval.name=Creaz\u0103 un interval de timp +MinimumNumber.description=Calculeaz\u0103 valoarea minim\u0103 a coloanelor numerice (numere sau liste de numere). Creaz\u0103 o nou\u0103 coloan\u0103 (BIGDECIMAL) cu rezultatul. +FirstQuartileNumber.description=Calculeaz\u0103 prima cuartil\u0103 (Q1) a coloanelor numerice (numere sau liste de numere). Creaz\u0103 o nou\u0103 coloan\u0103 (BIGDECIMAL) cu rezultatul. +ThirdQuartileNumber.name=Calculeaz\u0103 a treia cuartil\u0103 (Q3) +ThirdQuartileNumber.description=Calculeaz\u0103 a treia cuartil\u0103 (Q3) a coloanelor numerice (numere sau liste de numere). Creaz\u0103 o nou\u0103 coloan\u0103 (BIGDECIMAL) cu rezultatul. +BooleanLogicOperations.description=\u00CEmbin\u0103 coloanele booleene \u00EEn ordinea selectat\u0103 pentru a crea o nou\u0103 coloan\u0103, aleg\u00E2nd opera\u021Biile logice aplicate \u00EEntre fiecare pereche de coloane. O valoare nul\u0103 este utilizat\u0103 pe post de fals. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_ru.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_ru.properties index 76a2d79fd2..c670945085 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_ru.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_ru.properties @@ -1,55 +1,26 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:29+0000\nLast-Translator\: gephi \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -JoinWithSeparator.name=\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c - -JoinWithSeparator.description=\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u0443\u0441\u0442\u043e\u0439) \u043c\u0435\u0436\u0434\u0443 \u043a\u0430\u0436\u0434\u044b\u043c\u0438 \u0434\u0432\u0443\u043c\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. \u041d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0438\u043c\u0435\u0435\u0442 \u0442\u0438\u043f STRING. - -JoinNumberColumns.name=\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0438\u043b\u0438 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0447\u0438\u0441\u0435\u043b - -JoinNumberColumns.description=\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0438\u043b\u0438 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0447\u0438\u0441\u0435\u043b \u0432 \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446, \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0447\u0438\u0441\u0435\u043b \u0438 \u0438\u043c\u0435\u044e\u0442 \u0442\u0438\u043f LIST_BIGDECIMAL. - -CreateTimeInterval.name=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 - -CreateTimeInterval.description=\u0421\u043e\u0437\u0434\u0430\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u0434\u0432\u0443\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432, \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044f \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u0430\u043a \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0430 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. - -AverageNumber.name=\u0420\u0430\u0441\u0447\u0451\u0442 \u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f - -AverageNumber.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044f\u0447\u0435\u0435\u043a \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0438 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0447\u0438\u0441\u0435\u043b) \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 (BIGDECIMAL) \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. - -FirstQuartileNumber.name=\u0420\u0430\u0441\u0447\u0451\u0442 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044f (Q1) - -FirstQuartileNumber.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044c (Q1) \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0438 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0447\u0438\u0441\u0435\u043b) \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 (BIGDECIMAL) \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. - -MedianNumber.name=\u0420\u0430\u0441\u0447\u0451\u0442 \u043c\u0435\u0434\u0438\u0430\u043d\u044b - -MedianNumber.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043c\u0435\u0434\u0438\u0430\u043d\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0438 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0447\u0438\u0441\u0435\u043b) \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 (BIGDECIMAL) \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. - -ThirdQuartileNumber.name=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u0440\u0435\u0442\u0438\u0439 \u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044c (Q3) \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0438 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0447\u0438\u0441\u0435\u043b) \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 (BIGDECIMAL) \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. - -ThirdQuartileNumber.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u0440\u0435\u0442\u0438\u0439 \u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044c (Q3) \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0438 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0447\u0438\u0441\u0435\u043b) \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 (BIGDECIMAL) \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. - -InterQuartileRangeNumber.name=\u0420\u0430\u0441\u0447\u0451\u0442 \u043c\u0435\u0436\u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0430\u0445\u0430 - -InterQuartileRangeNumber.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043c\u0435\u0436\u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0430\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0438 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0447\u0438\u0441\u0435\u043b) \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 (BIGDECIMAL) \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. - -SumNumbers.name=\u0420\u0430\u0441\u0447\u0451\u0442 \u0441\u0443\u043c\u043c\u044b - -SumNumbers.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0443\u043c\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0438 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0447\u0438\u0441\u0435\u043b) \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 (BIGDECIMAL) \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. - -MinimumNumber.name=\u0420\u0430\u0441\u0447\u0451\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f - -MinimumNumber.description=\u0418\u0449\u0435\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0438 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0447\u0438\u0441\u0435\u043b) \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 (BIGDECIMAL) \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. - -MaximumNumber.name=\u0420\u0430\u0441\u0447\u0451\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f - -MaximumNumber.description=\u0418\u0449\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0438 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0447\u0438\u0441\u0435\u043b) \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 (BIGDECIMAL) \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. - -BooleanLogicOperations.name=\u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 - -BooleanLogicOperations.description=\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0430\u0440\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a false. +JoinWithSeparator.name=\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c +JoinWithSeparator.description=\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430, \u0432\u0441\u0442\u0430\u0432\u043b\u044f\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c (\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e, \u043f\u0443\u0441\u0442\u043e\u0439) \u043c\u0435\u0436\u0434\u0443 \u043a\u0430\u0436\u0434\u044b\u043c\u0438 \u0434\u0432\u0443\u043c\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. \u041d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0438\u043c\u0435\u0435\u0442 \u0442\u0438\u043f STRING. +JoinNumberColumns.name=\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0438\u043b\u0438 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0447\u0438\u0441\u0435\u043b +# JoinNumberColumns.description=Join the values of number/number list columns into a new column with the type double[]. +CreateTimeInterval.name=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 +CreateTimeInterval.description=\u0421\u043e\u0437\u0434\u0430\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u043b\u0438 \u0434\u0432\u0443\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432, \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u044f \u0438\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043a\u0430\u043a \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0435 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u0430 \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. + +AverageNumber.name=\u0420\u0430\u0441\u0447\u0451\u0442 \u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f +AverageNumber.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u044f\u0447\u0435\u0435\u043a \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0438 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0447\u0438\u0441\u0435\u043b) \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 (BIGDECIMAL) \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. +FirstQuartileNumber.name=\u0420\u0430\u0441\u0447\u0451\u0442 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044f (Q1) +FirstQuartileNumber.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044c (Q1) \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0438 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0447\u0438\u0441\u0435\u043b) \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 (BIGDECIMAL) \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. +MedianNumber.name=\u0420\u0430\u0441\u0447\u0451\u0442 \u043c\u0435\u0434\u0438\u0430\u043d\u044b +MedianNumber.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043c\u0435\u0434\u0438\u0430\u043d\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0438 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0447\u0438\u0441\u0435\u043b) \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 (BIGDECIMAL) \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. +ThirdQuartileNumber.name=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u0440\u0435\u0442\u0438\u0439 \u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044c (Q3) \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0438 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0447\u0438\u0441\u0435\u043b) \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 (BIGDECIMAL) \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. +ThirdQuartileNumber.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u0440\u0435\u0442\u0438\u0439 \u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044c (Q3) \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0438 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0447\u0438\u0441\u0435\u043b) \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 (BIGDECIMAL) \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. +InterQuartileRangeNumber.name=\u0420\u0430\u0441\u0447\u0451\u0442 \u043c\u0435\u0436\u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0430\u0445\u0430 +InterQuartileRangeNumber.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043c\u0435\u0436\u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0430\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0438 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0447\u0438\u0441\u0435\u043b) \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 (BIGDECIMAL) \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. +SumNumbers.name=\u0420\u0430\u0441\u0447\u0451\u0442 \u0441\u0443\u043c\u043c\u044b +SumNumbers.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0443\u043c\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0438 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0447\u0438\u0441\u0435\u043b) \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 (BIGDECIMAL) \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. +MinimumNumber.name=\u0420\u0430\u0441\u0447\u0451\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f +MinimumNumber.description=\u0418\u0449\u0435\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0438 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0447\u0438\u0441\u0435\u043b) \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 (BIGDECIMAL) \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. +MaximumNumber.name=\u0420\u0430\u0441\u0447\u0451\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f +MaximumNumber.description=\u0418\u0449\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 (\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u0447\u0438\u0441\u043b\u0430\u043c\u0438 \u0438 \u0441\u043f\u0438\u0441\u043a\u0430\u043c\u0438 \u0447\u0438\u0441\u0435\u043b) \u0438 \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u043d\u043e\u0432\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 (BIGDECIMAL) \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0438\u0440\u0443\u044e\u0449\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438. + +BooleanLogicOperations.name=\u041b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 +BooleanLogicOperations.description=\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u044f\u0435\u0442 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0430\u0440\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439. \u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u043f\u0440\u0435\u0442\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043a\u0430\u043a false. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_th.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_tr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_tr.properties new file mode 100644 index 0000000000..977e722fcd --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_tr.properties @@ -0,0 +1,24 @@ +JoinWithSeparator.name=Ayraη ile de\u011ferleri birle\u015ftir +JoinWithSeparator.description=Join the values of columns of any type with an optional separator. The new column has type STRING. +JoinNumberColumns.name=Join numerical columns +JoinNumberColumns.description=Join the values of number/number list columns into a new column with the type double[]. +CreateTimeInterval.name=Create time interval +CreateTimeInterval.description=Create a time interval for each row taking 1 or 2 columns as start/end times. +AverageNumber.name=Calculate average value +AverageNumber.description=Calculate the average value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +FirstQuartileNumber.name=Calculate first quartile (Q1) +FirstQuartileNumber.description=Calculate the first quartile (Q1) value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +MedianNumber.name=Calculate median value +MedianNumber.description=Calculate the median value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +ThirdQuartileNumber.name=Calculate third quartile (Q3) +ThirdQuartileNumber.description=Calculate the third quartile (Q3) value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +InterQuartileRangeNumber.name=Calculate interquartile range (IQR) +InterQuartileRangeNumber.description=Calculate the interquartile range (IQR) value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +SumNumbers.name=Sum number values +SumNumbers.description=Calculate the sum of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +MinimumNumber.name=Calculate minimum value +MinimumNumber.description=Calculate the minimum value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +MaximumNumber.name=Calculate maximum value +MaximumNumber.description=Calculate the maximum value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +BooleanLogicOperations.name=Merge boolean columns +BooleanLogicOperations.description=Merge boolean columns in the selected order to create a new column, choosing the logical operations applied between each pair of columns. A null value is used as false. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_zh_CN.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_zh_CN.properties index fecaa3c26c..c941f3ff5b 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_zh_CN.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_zh_CN.properties @@ -1,54 +1,25 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:19+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -JoinWithSeparator.name=\u52a0\u5165\u6570\u503c\uff0c\u5206\u9694\u7b26\u9694\u5f00 - +JoinWithSeparator.name=\u52A0\u5165\u6570\u503C\uFF0C\u5E76\u7528\u5206\u9694\u7B26\u9694\u5F00 JoinWithSeparator.description=\u7528\u4e00\u4e2a\u53ef\u9009\u7684\u5206\u9694\u7b26\u52a0\u5165\u4efb\u4f55\u7c7b\u578b\u7684\u5217\u7684\u503c\u3002\u65b0\u5217\u7c7b\u578b\u4e3a\u5b57\u7b26\u4e32\u3002 - JoinNumberColumns.name=\u52a0\u5165\u6570\u503c\u5217 - -JoinNumberColumns.description=\u52a0\u5165\u5230\u4e00\u4e2a\u540c\u7c7b\u578bLIST_BIGDECIMAL\u7684\u65b0\u5217\u7f16\u53f7/\u5217\u8868\u4e2d\u7684\u5217\u7684\u503c\u3002 - +# JoinNumberColumns.description=Join the values of number/number list columns into a new column with the type double[]. CreateTimeInterval.name=\u521b\u5efa\u65f6\u95f4\u95f4\u9694 - -CreateTimeInterval.description=\u4e3a1\u62162\u5217\u7684\u6bcf\u4e00\u884c\u521b\u5efa\u65f6\u95f4\u95f4\u9694\u4e3a\u5f00\u59cb/\u7ed3\u675f\u65f6\u95f4\u3002 - +CreateTimeInterval.description=\u4E3A\u6BCF\u4E00\u884C\u521B\u5EFA\u4E00\u4E2A\u65F6\u95F4\u95F4\u9694\uFF0C\u4EE51\u62162\u5217\u4F5C\u4E3A\u5F00\u59CB/\u7ED3\u675F\u65F6\u95F4\u3002 AverageNumber.name=\u8ba1\u7b97\u5e73\u5747\u503c - -AverageNumber.description=\u8ba1\u7b97\u5e73\u5747\u503c\u7684\u6570\u503c\u5217\uff08\u6570\u5b57\u6216\u6570\u5b57\u5217\u8868\uff09\u3002\u7528\u6b64\u7ed3\u679c\u521b\u5efa\u4e00\u4e2a\u65b0\u5217\uff08BigDecimal\uff09\u3002 - -FirstQuartileNumber.name=\u8ba1\u7b97\u7b2c\u4e00\u56db\u5206\u4f4d\u6570\uff08Q1\uff09 - -FirstQuartileNumber.description=\u8ba1\u7b97\u7b2c\u4e00\u56db\u5206\u4f4d\u6570\uff08Q1\uff09\u503c\u7684\u6570\u503c\u5217\uff08\u6570\u5b57\u6216\u6570\u5b57\u5217\u8868\uff09\u3002\u7528\u6b64\u7ed3\u679c\u521b\u5efa\u4e00\u4e2a\u65b0\u5217\uff08BigDecimal\uff09\u3002 - +AverageNumber.description=\u8BA1\u7B97\u6570\u503C\u5217\uFF08\u6570\u5B57\u6216\u6570\u5B57\u5217\u8868\uFF09\u7684\u5E73\u5747\u503C\u3002\u4EE5\u6B64\u7ED3\u679C\u521B\u5EFA\u4E00\u4E2A\u65B0\u5217 \uFF08BIGDECIMAL\uFF09\u3002 +FirstQuartileNumber.name=\u8BA1\u7B97\u7B2C\u4E00\u56DB\u5206\u4F4D\u6570\uFF08Q1\uFF09 +FirstQuartileNumber.description=\u8BA1\u7B97\u6570\u503C\u5217\uFF08\u6570\u5B57\u6216\u6570\u5B57\u5217\u8868\uFF09\u7684\u7B2C\u4E00\u56DB\u5206\u4F4D\u6570\uFF08Q1\uFF09\u503C\u3002\u4EE5\u6B64\u7ED3\u679C\u521B\u5EFA\u4E00\u4E2A\u65B0\u5217\uFF08BIGDECIMAL\uFF09\u3002 MedianNumber.name=\u8ba1\u7b97\u4e2d\u95f4\u503c - -MedianNumber.description=\u4e2d\u503c\u8ba1\u7b97\u7684\u6570\u503c\u5217\uff08\u6570\u5b57\u6216\u6570\u5b57\u5217\u8868\uff09\u3002\u4ee5\u6b64\u7ed3\u679c\u521b\u5efa\u4e00\u4e2a\u65b0\u5217\uff08BigDecimal\uff09\u3002 - +MedianNumber.description=\u8BA1\u7B97\u6570\u503C\u5217\uFF08\u6570\u5B57\u6216\u6570\u5B57\u5217\u8868\uFF09\u7684\u4E2D\u95F4\u503C\u3002\u4EE5\u6B64\u7ED3\u679C\u521B\u5EFA\u4E00\u4E2A\u65B0\u5217\uFF08BIGDECIMAL\uFF09\u3002 ThirdQuartileNumber.name=\u8ba1\u7b97\u7b2c\u4e09\u56db\u5206\u4f4d\u6570\uff08Q3\uff09 - -ThirdQuartileNumber.description=\u8ba1\u7b97\u6570\u503c\u5217\uff08\u6570\u5b57\u6216\u6570\u5b57\u5217\u8868\uff09\u7b2c\u4e09\u56db\u5206\u4f4d\u6570\uff08Q3\uff09\u7684\u4ef7\u503c\u3002\u4ee5\u6b64\u7ed3\u679c\u521b\u5efa\u4e00\u4e2a\u65b0\u5217\uff08BigDecimal\uff09\u3002 - -InterQuartileRangeNumber.name=\u8ba1\u7b97\u56db\u5206\u4f4d\u8ddd\uff08IQR\uff09 - -InterQuartileRangeNumber.description=\u8ba1\u7b97\u6570\u503c\u5217\uff08\u6570\u5b57\u6216\u6570\u5b57\u5217\u8868\uff09\u7684\u56db\u5206\u4f4d\u8ddd\uff08IQR\uff09\u503c\u3002\u4ee5\u6b64\u7ed3\u679c\u521b\u5efa\u4e00\u4e2a\u65b0\u5217\uff08BigDecimal\uff09\u3002 - +ThirdQuartileNumber.description=\u8BA1\u7B97\u6570\u503C\u5217\uFF08\u6570\u5B57\u6216\u6570\u5B57\u5217\u8868\uFF09\u7684\u7B2C\u4E09\u56DB\u5206\u4F4D\u6570(Q3)\u503C\u3002\u4EE5\u6B64\u7ED3\u679C\u521B\u5EFA\u4E00\u4E2A\u65B0\u5217\uFF08BIGDECIMAL\uFF09\u3002 +InterQuartileRangeNumber.name=\u8BA1\u7B97\u56DB\u5206\u4F4D\u5DEE\uFF08IQR\uFF09 +InterQuartileRangeNumber.description=\u8BA1\u7B97\u6570\u503C\u5217\uFF08\u6570\u5B57\u6216\u6570\u5B57\u5217\u8868\uFF09\u7684\u56DB\u5206\u4F4D\u5DEE\uFF08IQR\uFF09\u503C\u3002\u4EE5\u6B64\u7ED3\u679C\u521B\u5EFA\u4E00\u4E2A\u65B0\u5217\uFF08BIGDECIMAL\uFF09\u3002 SumNumbers.name=\u6570\u503c\u603b\u548c - -SumNumbers.description=\u8ba1\u7b97\u7684\u6570\u503c\u5217\uff08\u6570\u5b57\u6216\u6570\u5b57\u5217\u8868\uff09\u7684\u603b\u548c\u3002\u4ee5\u6b64\u7ed3\u679c\u521b\u5efa\u4e00\u4e2a\u65b0\u5217\uff08BigDecimal\uff09\u3002 - +SumNumbers.description=\u8BA1\u7B97\u6570\u503C\u5217\uFF08\u6570\u5B57\u6216\u6570\u5B57\u5217\u8868\uFF09\u7684\u603B\u548C\u3002\u4EE5\u6B64\u7ED3\u679C\u521B\u5EFA\u4E00\u4E2A\u65B0\u5217\uFF08BIGDECIMAL\uFF09\u3002 MinimumNumber.name=\u8ba1\u7b97\u6700\u5c0f\u503c - -MinimumNumber.description=\u8ba1\u7b97\u7684\u6570\u503c\u5217\uff08\u6570\u5b57\u6216\u6570\u5b57\u5217\u8868\uff09\u7684\u6700\u4f4e\u503c\u3002\u4ee5\u6b64\u7ed3\u679c\u521b\u5efa\u4e00\u4e2a\u65b0\u5217\uff08BigDecimal\uff09\u3002 - +MinimumNumber.description=\u8BA1\u7B97\u6570\u503C\u5217\uFF08\u6570\u5B57\u6216\u6570\u5B57\u5217\u8868\uFF09\u7684\u6700\u5C0F\u503C\u3002\u4EE5\u6B64\u7ED3\u679C\u521B\u5EFA\u4E00\u4E2A\u65B0\u5217\uFF08BIGDECIMAL\uFF09\u3002 MaximumNumber.name=\u8ba1\u7b97\u6700\u5927\u503c - -MaximumNumber.description=\u8ba1\u7b97\u7684\u6570\u503c\u5217\uff08\u6570\u5b57\u6216\u6570\u5b57\u5217\u8868\uff09\u7684\u6700\u5927\u503c\u3002\u4ee5\u6b64\u7ed3\u679c\u521b\u5efa\u4e00\u4e2a\u65b0\u5217\uff08BigDecimal\uff09\u3002 - +MaximumNumber.description=\u8BA1\u7B97\u6570\u503C\u5217\uFF08\u6570\u5B57\u6216\u6570\u5B57\u5217\u8868\uFF09\u7684\u6700\u5927\u503C\u3002\u4EE5\u6B64\u7ED3\u679C\u521B\u5EFA\u4E00\u4E2A\u65B0\u5217\uFF08BIGDECIMAL\uFF09\u3002 BooleanLogicOperations.name=\u5408\u5e76\u5e03\u5c14\u5217 - -BooleanLogicOperations.description=\u5408\u5e76\u5e03\u5c14\u5217\uff0c\u5728\u9009\u5b9a\u7684\u4ee5\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u5217\u7684\u9009\u62e9\u5e94\u7528\u4e8e\u6bcf\u5217\u4e4b\u95f4\u7684\u903b\u8f91\u8fd0\u7b97\u3002 null\u503c\u7528\u4e3a\u5047\u3002 +BooleanLogicOperations.description=\u6309\u7167\u9009\u5B9A\u7684\u987A\u5E8F\u5408\u5E76\u5E03\u5C14\u503C\u5217\uFF0C\u4EE5\u521B\u5EFA\u4E00\u4E2A\u65B0\u7684\u5217\uFF0C\u9009\u62E9\u6BCF\u5BF9\u5217\u4E4B\u95F4\u5E94\u7528\u7684\u903B\u8F91\u64CD\u4F5C\u3002\u7A7A\u503C\u88AB\u5F53\u4F5C\u5047\u503C\u4F7F\u7528\u3002 +JoinNumberColumns.description=\u5C06\u6570\u5B57/\u6570\u5B57\u5217\u8868\u7684\u5217\u7684\u503C\u52A0\u5165\u5230\u4E00\u4E2A\u7C7B\u578B\u4E3Adouble[]\u7684\u65B0\u5217\u3002 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_zh_TW.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_zh_TW.properties new file mode 100644 index 0000000000..fa2155a884 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/Bundle_zh_TW.properties @@ -0,0 +1,24 @@ +JoinWithSeparator.name=Join values with separator +JoinWithSeparator.description=Join the values of columns of any type with an optional separator. The new column has type STRING. +JoinNumberColumns.name=Join numerical columns +JoinNumberColumns.description=Join the values of number/number list columns into a new column with the type double[]. +CreateTimeInterval.name=Create time interval +CreateTimeInterval.description=Create a time interval for each row taking 1 or 2 columns as start/end times. +AverageNumber.name=Calculate average value +AverageNumber.description=Calculate the average value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +FirstQuartileNumber.name=Calculate first quartile (Q1) +FirstQuartileNumber.description=Calculate the first quartile (Q1) value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +MedianNumber.name=Calculate median value +MedianNumber.description=Calculate the median value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +ThirdQuartileNumber.name=Calculate third quartile (Q3) +ThirdQuartileNumber.description=Calculate the third quartile (Q3) value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +InterQuartileRangeNumber.name=Calculate interquartile range (IQR) +InterQuartileRangeNumber.description=Calculate the interquartile range (IQR) value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +SumNumbers.name=Sum number values +SumNumbers.description=Calculate the sum of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +MinimumNumber.name=Calculate minimum value +MinimumNumber.description=Calculate the minimum value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +MaximumNumber.name=Calculate maximum value +MaximumNumber.description=Calculate the maximum value of numerical columns (number or number list). Create a new column (BIGDECIMAL) with the result. +BooleanLogicOperations.name=Merge boolean columns +BooleanLogicOperations.description=Merge boolean columns in the selected order to create a new column, choosing the logical operations applied between each pair of columns. A null value is used as false. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/cs.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/cs.po deleted file mode 100644 index 832924a897..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/cs.po +++ /dev/null @@ -1,91 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-28 20:48+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "JoinWithSeparator.name" -msgstr "Spojit hodnoty oddΔ›lovačem" - -msgid "JoinWithSeparator.description" -msgstr "SpojΓ­ hodnoty sloupcΕ― jakΓ©hokoliv typu nepovinnΓ½m oddΔ›lovačem. NovΓ½ sloupec mΓ‘ typ STRING." - -msgid "JoinNumberColumns.name" -msgstr "Spojit číselnΓ© sloupce" - -msgid "JoinNumberColumns.description" -msgstr "SpojΓ­ hodnoty číselnΓ½ch sloupcΕ―/sloupcΕ― seznamu číseldo novΓ©ho sloupce s typem LIST_BIGDECIMAL." - -msgid "CreateTimeInterval.name" -msgstr "VytvoΕ™it časovΓ½ interval" - -msgid "CreateTimeInterval.description" -msgstr "VytvoΕ™it časovΓ½ interval pro kaΕΎdΓ½ Ε™Γ‘dek, kterΓ½ pouΕΎΓ­vΓ‘ 1 nebo 2 sloupce jako doba začÑtku/konce." - -msgid "AverageNumber.name" -msgstr "Vypočítat prΕ―mΔ›rnou hodnotu" - -msgid "AverageNumber.description" -msgstr "VypočítΓ‘ prΕ―mΔ›rnou hodnotu číselnΓ½ch sloupcΕ― (číselnΓ© nebo seznam čísel). VytvoΕ™Γ­ novΓ½ sloupec (BIGDECIMAL) s vΓ½sledkem." - -msgid "FirstQuartileNumber.name" -msgstr "Vypočítat prvnΓ­ kvartil (Q1)" - -msgid "FirstQuartileNumber.description" -msgstr "VypočítΓ‘ hodnotu prvnΓ­ho kvartilu (Q1) číselnΓ½ch sloupcΕ― (číselnΓ© nebo seznam čísel). VytvoΕ™Γ­ novΓ½ sloupec (BIGDECIMAL) s vΓ½sledkem." - -msgid "MedianNumber.name" -msgstr "VypočítΓ‘ hodnotu mediΓ‘nu" - -msgid "MedianNumber.description" -msgstr "VypočítΓ‘ hodnotu mediΓ‘nu číselnΓ½ch sloupcΕ― (číselnΓ© nebo seznam čísel). VytvoΕ™Γ­ novΓ½ sloupec (BIGDECIMAL) s vΓ½sledkem." - -msgid "ThirdQuartileNumber.name" -msgstr "Vypočítat prvnΓ­ kvartil (Q3)" - -msgid "ThirdQuartileNumber.description" -msgstr "VypočítΓ‘ hodnotu prvnΓ­ho kvartilu (Q3) číselnΓ½ch sloupcΕ― (číselnΓ© nebo seznam čísel). VytvoΕ™Γ­ novΓ½ sloupec (BIGDECIMAL) s vΓ½sledkem." - -msgid "InterQuartileRangeNumber.name" -msgstr "Vypočítat mezikvartilnΓ­ rozsah (IQR)" - -msgid "InterQuartileRangeNumber.description" -msgstr "VypočítΓ‘ hodnotu mezikvartilnΓ­ho rozsahu (Q1) číselnΓ½ch sloupcΕ― (číselnΓ© nebo seznam čísel). VytvoΕ™Γ­ novΓ½ sloupec (BIGDECIMAL) s vΓ½sledkem." - -msgid "SumNumbers.name" -msgstr "Součet číselnΓ½ch hodnot" - -msgid "SumNumbers.description" -msgstr "VypočítΓ‘ součet číselnΓ½ch sloupcΕ― (číselnΓ© nebo seznam čísel). VytvoΕ™Γ­ novΓ½ sloupec (BIGDECIMAL) s vΓ½sledkem." - -msgid "MinimumNumber.name" -msgstr "Vypočítat minimΓ‘lnΓ­ hodnotu" - -msgid "MinimumNumber.description" -msgstr "VypočítΓ‘ minimΓ‘lnΓ­ hodnotu číselnΓ½ch sloupcΕ― (číselnΓ© nebo seznam čísel). VytvoΕ™Γ­ novΓ½ sloupec (BIGDECIMAL) s vΓ½sledkem." - -msgid "MaximumNumber.name" -msgstr "Vypočítat maximΓ‘lnΓ­ hodnotu" - -msgid "MaximumNumber.description" -msgstr "VypočítΓ‘ maximΓ‘lnΓ­ hodnotu číselnΓ½ch sloupcΕ― (číselnΓ© nebo seznam čísel). VytvoΕ™Γ­ novΓ½ sloupec (BIGDECIMAL) s vΓ½sledkem." - -msgid "BooleanLogicOperations.name" -msgstr "Sloučit booleovskΓ© sloupce" - -msgid "BooleanLogicOperations.description" -msgstr "Sloučí booleovskΓ© sloupce ve zvolenΓ©m poΕ™adΓ­ pro vytvoΕ™enΓ­ novΓ©ho volenΓ­m logickΓ© operace, kterΓ‘ je pouΕΎita na kaΕΎdΓ½ pΓ‘r sloupcΕ―. PrΓ‘zdnΓ‘ hodnota se pouΕΎΓ­vΓ‘ jako nepravda" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/es.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/es.po deleted file mode 100644 index 9f097001e4..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/es.po +++ /dev/null @@ -1,91 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:29+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "JoinWithSeparator.name" -msgstr "Unir valores con separador" - -msgid "JoinWithSeparator.description" -msgstr "Une los valores de columnas de cualquier tipo con el separador proporcionado (o sin separador) entre cada par de columnas. La nueva columna tendrΓ‘ tipo STRING." - -msgid "JoinNumberColumns.name" -msgstr "Unir columnas numΓ©ricas" - -msgid "JoinNumberColumns.description" -msgstr "Une los valores de varias columnas numΓ©ricas/listas de nΓΊmeros creando una nueva columna con el tipo LIST_BIGDECIMAL." - -msgid "CreateTimeInterval.name" -msgstr "Crear intΓ©rvalo de tiempo" - -msgid "CreateTimeInterval.description" -msgstr "Crea un intΓ©rvalo de tiempo para cada fila tomando 1 o 2 columnas como tiempos de inicio/final y usando los tiempos por defecto indicados." - -msgid "AverageNumber.name" -msgstr "Calcular valor medio" - -msgid "AverageNumber.description" -msgstr "Calcula el valor medio de todos los nΓΊmeros en las columnas escogidas (solamente columnas numΓ©ricas o de listas de nΓΊmeros) y crea una nueva columna (BIGDECIMAL) con el resultado." - -msgid "FirstQuartileNumber.name" -msgstr "Calcular primer cuartil (Q1)" - -msgid "FirstQuartileNumber.description" -msgstr "Calcula el primer cuartil (Q1) de todos los nΓΊmeros en las columnas escogidas (solamente columnas numΓ©ricas o de listas de nΓΊmeros) y crea una nueva columna (BIGDECIMAL) con el resultado." - -msgid "MedianNumber.name" -msgstr "Calcular mediana" - -msgid "MedianNumber.description" -msgstr "Calcula la mediana de todos los nΓΊmeros en las columnas escogidas (solamente columnas numΓ©ricas o de listas de nΓΊmeros) y crea una nueva columna (BIGDECIMAL) con el resultado." - -msgid "ThirdQuartileNumber.name" -msgstr "Calcular tercer cuartil (Q3)" - -msgid "ThirdQuartileNumber.description" -msgstr "Calcula el tercer cuartil (Q3) de todos los nΓΊmeros en las columnas escogidas (solamente columnas numΓ©ricas o de listas de nΓΊmeros) y crea una nueva columna (BIGDECIMAL) con el resultado." - -msgid "InterQuartileRangeNumber.name" -msgstr "Calcular rango intercuartΓ­lico (IQR)" - -msgid "InterQuartileRangeNumber.description" -msgstr "Calcula el rango intercuartΓ­lico (IQR) de todos los nΓΊmeros en las columnas escogidas (solamente columnas numΓ©ricas o de listas de nΓΊmeros) y crea una nueva columna (BIGDECIMAL) con el resultado." - -msgid "SumNumbers.name" -msgstr "Calcular suma" - -msgid "SumNumbers.description" -msgstr "Calcula la suma de todos los nΓΊmeros en las columnas escogidas (solamente columnas numΓ©ricas o de listas de nΓΊmeros) y crea una nueva columna (BIGDECIMAL) con el resultado." - -msgid "MinimumNumber.name" -msgstr "Calcular valor mΓ­nimo" - -msgid "MinimumNumber.description" -msgstr "Calcula el valor mΓ­nimo de todos los nΓΊmeros en las columnas escogidas (solamente columnas numΓ©ricas o de listas de nΓΊmeros) y crea una nueva columna (BIGDECIMAL) con el resultado." - -msgid "MaximumNumber.name" -msgstr "Calcular valor mΓ‘ximo" - -msgid "MaximumNumber.description" -msgstr "Calcula el valor mΓ‘ximo de todos los nΓΊmeros en las columnas escogidas (solamente columnas numΓ©ricas o de listas de nΓΊmeros) y crea una nueva columna (BIGDECIMAL) con el resultado." - -msgid "BooleanLogicOperations.name" -msgstr "Mezcla lΓ³gica de columnas booleanas" - -msgid "BooleanLogicOperations.description" -msgstr "Mezcla varias columnas booleanas en el orden seleccionado para crear una nueva columna, pudiendo elegir las operaciones lΓ³gicas realizadas entre cada par de columnas. Si cualquier valor es nulo, 'false' serΓ‘ usado en su lugar." diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/fr.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/fr.po deleted file mode 100644 index 4fe89ee5a3..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/fr.po +++ /dev/null @@ -1,91 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:29+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "JoinWithSeparator.name" -msgstr "Jointure avec sΓ©parateur" - -msgid "JoinWithSeparator.description" -msgstr "Fusionne les valeurs de n'importe quelles colonnes avec un sΓ©parateur (optionnel) entre elles. La colonne ainsi créée est de type STRING." - -msgid "JoinNumberColumns.name" -msgstr "Jointure numΓ©rique" - -msgid "JoinNumberColumns.description" -msgstr "Créé une colonne de liste de nombres de type LIST_BIGDECIMAL." - -msgid "CreateTimeInterval.name" -msgstr "CrΓ©er un intervalle temporel" - -msgid "CreateTimeInterval.description" -msgstr "Créé un intervalle temporel pour chaque ligne. Un ou deux colonnes servent de dΓ©but/fin." - -msgid "AverageNumber.name" -msgstr "Calcule la moyenne" - -msgid "AverageNumber.description" -msgstr "Calcule la valeur moyenne d'une colonne numΓ©rique. Créé une colonne de type BIGDECIMAL contenant le rΓ©sultat." - -msgid "FirstQuartileNumber.name" -msgstr "Calcule le premier quartile (Q1)" - -msgid "FirstQuartileNumber.description" -msgstr "Calcule le premier quartile (Q1) d'une colonne numΓ©rique. Créé une colonne de type BIGDECIMAL contenant le rΓ©sultat." - -msgid "MedianNumber.name" -msgstr "Calcule la mΓ©diane" - -msgid "MedianNumber.description" -msgstr "Calcule la valeur mΓ©diane d'une colonne numΓ©rique. Créé une colonne de type BIGDECIMAL contenant le rΓ©sultat." - -msgid "ThirdQuartileNumber.name" -msgstr "Calcule le troisiΓ¨me quartile (Q3)" - -msgid "ThirdQuartileNumber.description" -msgstr "Calcule le troisiΓ¨me quartile (Q3) d'une colonne numΓ©rique. Créé une colonne de type BIGDECIMAL contenant le rΓ©sultat." - -msgid "InterQuartileRangeNumber.name" -msgstr "Calcule l'Γ©cart interquartile (IQR)" - -msgid "InterQuartileRangeNumber.description" -msgstr "Calcule l'Γ©cart interquartile (IQR) d'une colonne numΓ©rique. Créé une colonne de type BIGDECIMAL contenant le rΓ©sultat." - -msgid "SumNumbers.name" -msgstr "Calcule la somme" - -msgid "SumNumbers.description" -msgstr "Calcule la somme d'une colonne numΓ©rique. Créé une colonne de type BIGDECIMAL contenant le rΓ©sultat." - -msgid "MinimumNumber.name" -msgstr "Calcule le minimum" - -msgid "MinimumNumber.description" -msgstr "Calcule le minimum d'une colonne numΓ©rique. Créé une colonne de type BIGDECIMAL contenant le rΓ©sultat." - -msgid "MaximumNumber.name" -msgstr "Calcule la valeur maximale" - -msgid "MaximumNumber.description" -msgstr "Calcule la valeur maximale d'une colonne numΓ©rique, et créé une nouvelle colonne de type BIGDECIMAL contenant le rΓ©sultat." - -msgid "BooleanLogicOperations.name" -msgstr "Fusion de colonnes boolΓ©ennes" - -msgid "BooleanLogicOperations.description" -msgstr "Fusionne des colonnes boolΓ©ennes dans une nouvelle, selon une opΓ©ration logique entre chaque pair de colonnes. Les valeurs nulles sont interprΓ©tΓ©es comme fausses." diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ja.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ja.po deleted file mode 100644 index 07b57ba586..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ja.po +++ /dev/null @@ -1,91 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-02 11:15+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "JoinWithSeparator.name" -msgstr "εŒΊεˆ‡γ‚Šε­δ»˜γγε€€γ‚’θΏ½εŠ " - -msgid "JoinWithSeparator.description" -msgstr "γ‚ͺプションγεŒΊεˆ‡γ‚Šε­γ‚’ζŒγ€δ»»ζ„γεž‹γεˆ—γε€€γ‚’η΅εˆγ—γΎγ™γ€‚ζ–°γ—γ„εˆ—γεž‹γ―STRINGです。" - -msgid "JoinNumberColumns.name" -msgstr "ζ•°ε€€γεˆ—γ‚’θΏ½εŠ " - -msgid "JoinNumberColumns.description" -msgstr "LIST_BIGDECIMALεž‹γ‚’ζŒγ€ζ–°γ—γ„εˆ—γ«η•ͺ号/η•ͺ号γƒͺγ‚Ήγƒˆγεˆ—γε€€γ‚’η΅εˆγ—γΎγ™γ€‚" - -msgid "CreateTimeInterval.name" -msgstr "ζ™‚ι–“ι–“ιš”γ‚’δ½œζˆ" - -msgid "CreateTimeInterval.description" -msgstr "ι–‹ε§‹/η΅‚δΊ†ζ™‚εˆ»γ¨γ—γ¦1または2εˆ—γ‚’ε γ‚γ‚‹ε„θ‘Œη”¨γ«ζ™‚ι–“ι–“ιš”γ‚’δ½œζˆγ—γΎγ™γ€‚" - -msgid "AverageNumber.name" -msgstr "εΉ³ε‡ε€€γ‚’θ¨ˆη—" - -msgid "AverageNumber.description" -msgstr "ζ•°ε€€εˆ—(ζ•°ε€€γΎγŸγ―ζ•°ε€€γγƒͺγ‚Ήγƒˆ)γεΉ³ε‡ε€€γ‚’θ¨ˆη—γ™γ‚‹γ€‚η΅ζžœγ‚’ε…₯γ‚ŒγŸζ–°θ¦εˆ— (BIGDECIMAL)γ‚’δ½œζˆγ—γΎγ™γ€‚" - -msgid "FirstQuartileNumber.name" -msgstr "η¬¬δΈ€ε››εˆ†δ½(Q1)γ‚’θ¨ˆη—" - -msgid "FirstQuartileNumber.description" -msgstr "ζ•°ε€€εˆ—(ζ•°ε€€γΎγŸγ―ζ•°ε€€γγƒͺγ‚Ήγƒˆ)γη¬¬δΈ€ε››εˆ†δ½(Q1)γ‚’θ¨ˆη—γ™γ‚‹γ€‚η΅ζžœγ‚’ε…₯γ‚ŒγŸζ–°θ¦εˆ— (BIGDECIMAL)γ‚’δ½œζˆγ—γΎγ™γ€‚" - -msgid "MedianNumber.name" -msgstr "δΈ­ε€ε€€γ‚’θ¨ˆη—" - -msgid "MedianNumber.description" -msgstr "ζ•°ε€€εˆ—(ζ•°ε€€γΎγŸγ―ζ•°ε€€γγƒͺγ‚Ήγƒˆ)γδΈ­ε€ε€€γ‚’θ¨ˆη—γ™γ‚‹γ€‚η΅ζžœγ‚’ε…₯γ‚ŒγŸζ–°θ¦εˆ— (BIGDECIMAL)γ‚’δ½œζˆγ—γΎγ™γ€‚" - -msgid "ThirdQuartileNumber.name" -msgstr "η¬¬δΈ‰ε››εˆ†δ½(Q3)γ‚’θ¨ˆη—" - -msgid "ThirdQuartileNumber.description" -msgstr "ζ•°ε€€εˆ—(ζ•°ε€€γΎγŸγ―ζ•°ε€€γγƒͺγ‚Ήγƒˆ)γη¬¬δΈ‰ε››εˆ†δ½(Q3)γ‚’θ¨ˆη—γ™γ‚‹γ€‚η΅ζžœγ‚’ε…₯γ‚ŒγŸζ–°θ¦εˆ— (BIGDECIMAL)γ‚’δ½œζˆγ—γΎγ™γ€‚" - -msgid "InterQuartileRangeNumber.name" -msgstr "ε››εˆ†δ½η―„ε›²γ‚’θ¨ˆη— (IQR)" - -msgid "InterQuartileRangeNumber.description" -msgstr "ζ•°ε€€εˆ—(ζ•°ε€€γΎγŸγ―ζ•°ε€€γγƒͺγ‚Ήγƒˆ)γε››εˆ†δ½η―„ε›² (IQR)γ‚’θ¨ˆη—γ™γ‚‹γ€‚η΅ζžœγ‚’ε…₯γ‚ŒγŸζ–°θ¦εˆ— (BIGDECIMAL)γ‚’δ½œζˆγ—γΎγ™γ€‚" - -msgid "SumNumbers.name" -msgstr "ζ•°ε€€γεˆθ¨ˆ" - -msgid "SumNumbers.description" -msgstr "ζ•°ε€€εˆ—(ζ•°ε€€γΎγŸγ―ζ•°ε€€γγƒͺγ‚Ήγƒˆ)γζ•°ε€€γεˆθ¨ˆγ‚’θ¨ˆη—γ™γ‚‹γ€‚η΅ζžœγ‚’ε…₯γ‚ŒγŸζ–°θ¦εˆ— (BIGDECIMAL)γ‚’δ½œζˆγ—γΎγ™γ€‚" - -msgid "MinimumNumber.name" -msgstr "ζœ€ε°ε€€γ‚’θ¨ˆη—" - -msgid "MinimumNumber.description" -msgstr "ζ•°ε€€εˆ—(ζ•°ε€€γΎγŸγ―ζ•°ε€€γγƒͺγ‚Ήγƒˆ)γζœ€ε°ε€€γ‚’θ¨ˆη—γ™γ‚‹γ€‚η΅ζžœγ‚’ε…₯γ‚ŒγŸζ–°θ¦εˆ— (BIGDECIMAL)γ‚’δ½œζˆγ—γΎγ™γ€‚" - -msgid "MaximumNumber.name" -msgstr "ζœ€ε€§ε€€γ‚’θ¨ˆη—" - -msgid "MaximumNumber.description" -msgstr "ζ•°ε€€εˆ—(ζ•°ε€€γΎγŸγ―ζ•°ε€€γγƒͺγ‚Ήγƒˆ)γζœ€ε€§ε€€γ‚’θ¨ˆη—γ™γ‚‹γ€‚η΅ζžœγ‚’ε…₯γ‚ŒγŸζ–°θ¦εˆ— (BIGDECIMAL)γ‚’δ½œζˆγ—γΎγ™γ€‚" - -msgid "BooleanLogicOperations.name" -msgstr "ブール倀γεˆ—γ‚’η΅±εˆ" - -msgid "BooleanLogicOperations.description" -msgstr "ζ–°γ—γ„εˆ—γ‚’δ½œγ‚‹γŸγ‚γ«ιΈζŠžγ—γŸι †γ«γ€εˆ—γε„γƒšγ‚’ι–“γ«ι©η”¨γ•γ‚ŒγŸθ«–η†ζΌ”η—γ‚’ιΈζŠžγ—γ€θ«–η†εž‹εˆ—γ‚’η΅±εˆγ—γΎγ™γ€‚null倀は偽とみγͺします。" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/org-gephi-datalab-plugin-manipulators-columns-merge.pot b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/org-gephi-datalab-plugin-manipulators-columns-merge.pot deleted file mode 100644 index 5e1b6d37a7..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/org-gephi-datalab-plugin-manipulators-columns-merge.pot +++ /dev/null @@ -1,112 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "JoinWithSeparator.name" -msgstr "Join values with separator" - -msgid "JoinWithSeparator.description" -msgstr "" -"Join the values of columns of any type with an optional separator. The new " -"column has type STRING." - -msgid "JoinNumberColumns.name" -msgstr "Join numerical columns" - -msgid "JoinNumberColumns.description" -msgstr "" -"Join the values of number/number list columns into a new column with the " -"type LIST_BIGDECIMAL." - -msgid "CreateTimeInterval.name" -msgstr "Create time interval" - -msgid "CreateTimeInterval.description" -msgstr "" -"Create a time interval for each row taking 1 or 2 columns as start/end times." - -msgid "AverageNumber.name" -msgstr "Calculate average value" - -msgid "AverageNumber.description" -msgstr "" -"Calculate the average value of numerical columns (number or number list). " -"Create a new column (BIGDECIMAL) with the result." - -msgid "FirstQuartileNumber.name" -msgstr "Calculate first quartile (Q1)" - -msgid "FirstQuartileNumber.description" -msgstr "" -"Calculate the first quartile (Q1) value of numerical columns (number or " -"number list). Create a new column (BIGDECIMAL) with the result." - -msgid "MedianNumber.name" -msgstr "Calculate median value" - -msgid "MedianNumber.description" -msgstr "" -"Calculate the median value of numerical columns (number or number list). " -"Create a new column (BIGDECIMAL) with the result." - -msgid "ThirdQuartileNumber.name" -msgstr "Calculate third quartile (Q3)" - -msgid "ThirdQuartileNumber.description" -msgstr "" -"Calculate the third quartile (Q3) value of numerical columns (number or " -"number list). Create a new column (BIGDECIMAL) with the result." - -msgid "InterQuartileRangeNumber.name" -msgstr "Calculate interquartile range (IQR)" - -msgid "InterQuartileRangeNumber.description" -msgstr "" -"Calculate the interquartile range (IQR) value of numerical columns (number " -"or number list). Create a new column (BIGDECIMAL) with the result." - -msgid "SumNumbers.name" -msgstr "Sum number values" - -msgid "SumNumbers.description" -msgstr "" -"Calculate the sum of numerical columns (number or number list). Create a new " -"column (BIGDECIMAL) with the result." - -msgid "MinimumNumber.name" -msgstr "Calculate minimum value" - -msgid "MinimumNumber.description" -msgstr "" -"Calculate the minimum value of numerical columns (number or number list). " -"Create a new column (BIGDECIMAL) with the result." - -msgid "MaximumNumber.name" -msgstr "Calculate maximum value" - -msgid "MaximumNumber.description" -msgstr "" -"Calculate the maximum value of numerical columns (number or number list). " -"Create a new column (BIGDECIMAL) with the result." - -msgid "BooleanLogicOperations.name" -msgstr "Merge boolean columns" - -msgid "BooleanLogicOperations.description" -msgstr "" -"Merge boolean columns in the selected order to create a new column, choosing " -"the logical operations applied between each pair of columns. A null value is " -"used as false." diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/pt_BR.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/pt_BR.po deleted file mode 100644 index 9e68c3bfa5..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/pt_BR.po +++ /dev/null @@ -1,91 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 12:08+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "JoinWithSeparator.name" -msgstr "Unir valores com separador" - -msgid "JoinWithSeparator.description" -msgstr "Une os valores das colunas de qualquer tipo com um separador opcional. A nova coluna serΓ‘ do tipo STRING." - -msgid "JoinNumberColumns.name" -msgstr "Unir colunas numΓ©ricas" - -msgid "JoinNumberColumns.description" -msgstr "Une os valores de vΓ‘rias columnas numΓ©ricas/listas de nΓΊmeros criando uma nova coluna do tipo LIST_BIGDECIMAL." - -msgid "CreateTimeInterval.name" -msgstr "Criar intervalo de tempo" - -msgid "CreateTimeInterval.description" -msgstr "Cria um intervalo de tempo para cada linha, usando 1 ou 2 colunas como tempos de inΓ­cio/fim." - -msgid "AverageNumber.name" -msgstr "Calcular valor mΓ©dio" - -msgid "AverageNumber.description" -msgstr "Calcula o valor mΓ©dio de todos os nΓΊmeros nas colunas selecionadas (somente colunas numΓ©ricas ou de listas de nΓΊmeros) e cria uma nova coluna (BIGDECIMAL) com o resultado." - -msgid "FirstQuartileNumber.name" -msgstr "Calcular primeiro quartil (Q1)" - -msgid "FirstQuartileNumber.description" -msgstr "Calcula o primeiro quartil (Q1) de todos os nΓΊmeros nas colunas selecionadas (somente colunas numΓ©ricas ou de listas de nΓΊmeros) e cria uma nova coluna (BIGDECIMAL) com o resultado." - -msgid "MedianNumber.name" -msgstr "Calcular mediana" - -msgid "MedianNumber.description" -msgstr "Calcula a mediana de todos os nΓΊmeros nas colunas selecionadas (somente colunas numΓ©ricas ou de listas de nΓΊmeros) e cria uma nova coluna (BIGDECIMAL) com o resultado." - -msgid "ThirdQuartileNumber.name" -msgstr "Calcule terceiro quartil (Q3)" - -msgid "ThirdQuartileNumber.description" -msgstr "Calcula o terceiro quartil (Q3) de todos os nΓΊmeros nas colunas selecionadas (somente colunas numΓ©ricas ou de listas de nΓΊmeros) e cria uma nova coluna (BIGDECIMAL) com o resultado." - -msgid "InterQuartileRangeNumber.name" -msgstr "Calcular intervalo interquartil (IQR)" - -msgid "InterQuartileRangeNumber.description" -msgstr "Calcula o intervalo de valores interquartil (IQR) de todos os nΓΊmeros nas colunas selecionadas (somente colunas numΓ©ricas ou de listas de nΓΊmeros) e cria uma nova coluna (BIGDECIMAL) com o resultado." - -msgid "SumNumbers.name" -msgstr "Calcular soma" - -msgid "SumNumbers.description" -msgstr "Calcula a soma de todos os nΓΊmeros nas colunas selecionadas (somente colunas numΓ©ricas ou de listas de nΓΊmeros) e cria uma nova coluna (BIGDECIMAL) com o resultado." - -msgid "MinimumNumber.name" -msgstr "Calcular valor mΓ­nimo" - -msgid "MinimumNumber.description" -msgstr "Calcula o valor mΓ­nimo de todos os nΓΊmeros nas colunas selecionadas (somente colunas numΓ©ricas ou de listas de nΓΊmeros) e cria uma nova coluna (BIGDECIMAL) com o resultado." - -msgid "MaximumNumber.name" -msgstr "Calcular valor mΓ‘ximo" - -msgid "MaximumNumber.description" -msgstr "Calcula o valor mΓ‘ximo de todos os nΓΊmeros nas colunas selecionadas (somente colunas numΓ©ricas ou de listas de nΓΊmeros) e cria uma nova coluna (BIGDECIMAL) com o resultado." - -msgid "BooleanLogicOperations.name" -msgstr "Mesclar logicamente colunas booleanas" - -msgid "BooleanLogicOperations.description" -msgstr "Mesclar colunas booleanas na ordem selecionada para criar uma nova coluna, escolhendo as operaΓ§Γ΅es lΓ³gicas aplicadas a cada par de colunas. Valores nulos serΓ£o considerados como 'falso'." diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ru.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ru.po deleted file mode 100644 index acff3c73cb..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ru.po +++ /dev/null @@ -1,91 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:29+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "JoinWithSeparator.name" -msgstr "ОбъСдинСниС столбцов Ρ‡Π΅Ρ€Π΅Π· Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ" - -msgid "JoinWithSeparator.description" -msgstr "ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ значСния столбцов ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, вставляя ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ (Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, пустой) ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌΠΈ двумя значСниями. Новый столбСц ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ STRING." - -msgid "JoinNumberColumns.name" -msgstr "ОбъСдинСниС столбцов с числами ΠΈΠ»ΠΈ списками чисСл" - -msgid "JoinNumberColumns.description" -msgstr "ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ значСния столбцов с числами ΠΈΠ»ΠΈ списками чисСл Π² Π½ΠΎΠ²Ρ‹ΠΉ столбСц, значСния ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ списками чисСл ΠΈ ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏ LIST_BIGDECIMAL." - -msgid "CreateTimeInterval.name" -msgstr "Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ" - -msgid "CreateTimeInterval.description" -msgstr "Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π° основС ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π΄Π²ΡƒΡ… столбцов, рассматривая ΠΈΡ… значСния ΠΊΠ°ΠΊ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π° ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ Π·Π°Π΄Π°Π½Π½Ρ‹Π΅ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ." - -msgid "AverageNumber.name" -msgstr "Расчёт срСднСго значСния" - -msgid "AverageNumber.description" -msgstr "РассчитываСт срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ячССк Π² ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… столбцах (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для столбцов с числами ΠΈ списками чисСл) ΠΈ создаёт Π½ΠΎΠ²Ρ‹ΠΉ столбСц (BIGDECIMAL) с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌΠΈ значСниями." - -msgid "FirstQuartileNumber.name" -msgstr "Расчёт ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ квартиля (Q1)" - -msgid "FirstQuartileNumber.description" -msgstr "РассчитываСт ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΠ»ΡŒ (Q1) Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… столбцах (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для столбцов с числами ΠΈ списками чисСл) ΠΈ создаёт Π½ΠΎΠ²Ρ‹ΠΉ столбСц (BIGDECIMAL) с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌΠΈ значСниями." - -msgid "MedianNumber.name" -msgstr "Расчёт ΠΌΠ΅Π΄ΠΈΠ°Π½Ρ‹" - -msgid "MedianNumber.description" -msgstr "РассчитываСт ΠΌΠ΅Π΄ΠΈΠ°Π½Ρƒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… столбцах (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для столбцов с числами ΠΈ списками чисСл) ΠΈ создаёт Π½ΠΎΠ²Ρ‹ΠΉ столбСц (BIGDECIMAL) с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌΠΈ значСниями." - -msgid "ThirdQuartileNumber.name" -msgstr "РассчитываСт Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΠ»ΡŒ (Q3) Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… столбцах (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для столбцов с числами ΠΈ списками чисСл) ΠΈ создаёт Π½ΠΎΠ²Ρ‹ΠΉ столбСц (BIGDECIMAL) с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌΠΈ значСниями." - -msgid "ThirdQuartileNumber.description" -msgstr "РассчитываСт Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΠ»ΡŒ (Q3) Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… столбцах (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для столбцов с числами ΠΈ списками чисСл) ΠΈ создаёт Π½ΠΎΠ²Ρ‹ΠΉ столбСц (BIGDECIMAL) с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌΠΈ значСниями." - -msgid "InterQuartileRangeNumber.name" -msgstr "Расчёт ΠΌΠ΅ΠΆΠΊΠ²Π°Ρ€Ρ‚ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ°Ρ…Π°" - -msgid "InterQuartileRangeNumber.description" -msgstr "РассчитываСт ΠΌΠ΅ΠΆΠΊΠ²Π°Ρ€Ρ‚ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ°Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… столбцах (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для столбцов с числами ΠΈ списками чисСл) ΠΈ создаёт Π½ΠΎΠ²Ρ‹ΠΉ столбСц (BIGDECIMAL) с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌΠΈ значСниями." - -msgid "SumNumbers.name" -msgstr "Расчёт суммы" - -msgid "SumNumbers.description" -msgstr "РассчитываСт сумму Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… столбцах (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для столбцов с числами ΠΈ списками чисСл) ΠΈ создаёт Π½ΠΎΠ²Ρ‹ΠΉ столбСц (BIGDECIMAL) с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌΠΈ значСниями." - -msgid "MinimumNumber.name" -msgstr "Расчёт минимального значСния" - -msgid "MinimumNumber.description" -msgstr "Π˜Ρ‰Π΅Ρ‚ минимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… столбцах (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для столбцов с числами ΠΈ списками чисСл) ΠΈ создаёт Π½ΠΎΠ²Ρ‹ΠΉ столбСц (BIGDECIMAL) с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌΠΈ значСниями." - -msgid "MaximumNumber.name" -msgstr "Расчёт максимального значСния" - -msgid "MaximumNumber.description" -msgstr "Π˜Ρ‰Π΅Ρ‚ максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… столбцах (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для столбцов с числами ΠΈ списками чисСл) ΠΈ создаёт Π½ΠΎΠ²Ρ‹ΠΉ столбСц (BIGDECIMAL) с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΌΠΈ значСниями." - -msgid "BooleanLogicOperations.name" -msgstr "ЛогичСскоС объСдинСниС столбцов" - -msgid "BooleanLogicOperations.description" -msgstr "ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ нСсколько столбцов с логичСскими значСниями Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ порядкС для создания Π½ΠΎΠ²ΠΎΠ³ΠΎ столбца, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ логичСский ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ для объСдинСния ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€Ρ‹ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ. ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ значСния ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ false." diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_ar.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_ca.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_ca.properties new file mode 100644 index 0000000000..7cc7bf1536 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_ca.properties @@ -0,0 +1,24 @@ +BooleanLogicOperationsUI.descriptionLabel.text=
    Tria les operacions lςgiques entre cada parell de columnes
    +BooleanLogicOperationsUI.titleLabel.text=Tνtol de la nova columna +JoinWithSeparatorUI.titleLabel.text=Tνtol de la nova columna +JoinWithSeparatorUI.separatorLabel.text=Text separador: +JoinWithSeparatorUI.separatorText.text= +BooleanLogicOperationsUI.titleTextField.text= +JoinWithSeparatorUI.titleTextField.text= +GeneralColumnTitleChooserUI.titleLabel.text=Tνtol de la nova columna +GeneralColumnTitleChooserUI.titleTextField.text= +CreateTimeIntervalUI.startColumnLabel.text=Start time column: +CreateTimeIntervalUI.endColumnLabel.text=End time column: +CreateTimeIntervalUI.header.title=Time Interval creation options +CreateTimeIntervalUI.header.description=Tria les columnes per utilitzar-les com a temps d'inici o finalitzaciσ.
    Tambι pots fixar temps d'inici o finalitzaciσ per defecte, que s'utilitzaran si hi ha algun error o falta alguna dada; si no estΰ configurat, s'utilitzarΰ l'infinit +CreateTimeIntervalUI.parseDatesRadioButton.text=Parse dates +CreateTimeIntervalUI.parseNumbersRadioButton.text=Parse numbers +CreateTimeIntervalUI.dateDefaultStartLabel.text=Temps d'inici per defecte +CreateTimeIntervalUI.dateDefaultEndLabel.text=Temps de finalitzaciσ per defecte: +CreateTimeIntervalUI.dateFormatLabel.text=Format de la data: +CreateTimeIntervalUI.defaultStartNumberText.text= +CreateTimeIntervalUI.defaultEndNumberText.text= +CreateTimeIntervalUI.defaultStartNumberLabel.text=Temps d'inici per defecte +CreateTimeIntervalUI.defaultEndNumberLabel.text=Temps de finalitzaciσ per defecte: +CreateTimeIntervalUI.invalid.dateformat=El format de data no ιs vΰlid +CreateTimeIntervalUI.invalid.number=El nombre no ιs vΰlid diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_cs.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_cs.properties index c3538e0a61..58bfd2523a 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_cs.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_cs.properties @@ -1,43 +1,24 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:16+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -BooleanLogicOperationsUI.descriptionLabel.text=
    Zvolte logick\u00e9 operace mezi ka\u017ed\u00fdm p\u00e1rem sloupc\u016f
    - -BooleanLogicOperationsUI.titleLabel.text=Nov\u00fd n\u00e1zev sloupce\: - -JoinWithSeparatorUI.titleLabel.text=Nov\u00fd n\u00e1zev sloupce\: - -JoinWithSeparatorUI.separatorLabel.text=Text odd\u011blova\u010de - -GeneralColumnTitleChooserUI.titleLabel.text=Nov\u00fd n\u00e1zev sloupce\: - -CreateTimeIntervalUI.startColumnLabel.text=\u010cas \u010dasu spu\u0161t\u011bn\u00ed\: - -CreateTimeIntervalUI.endColumnLabel.text=Sloupec \u010dasu dokon\u010den\u00ed\: - -CreateTimeIntervalUI.header.title=Mo\u017enosti vytvo\u0159en\u00ed \u010dasov\u00e9ho intervalu - -CreateTimeIntervalUI.header.description=Zvolte sloupce, kter\u00e9 budou pou\u017eity jako \u010dasy spu\u0161t\u011bn\u00ed/dokon\u010den\u00ed.
    Tak\u00e9 m\u016f\u017eete zvolit v\u00fdchoz\u00ed pou\u017eit\u00e9 \u010dasy spu\u0161t\u011bn\u00ed a dokon\u010den\u00ed kdy\u017e hodnoty nejsou spr\u00e1vn\u011b nebo chyb\u011bj\u00ed, jinak bude m\u00edsto toho pou\u017eito nekone\u010dno. - -CreateTimeIntervalUI.parseDatesRadioButton.text=Zpracovat data - -CreateTimeIntervalUI.parseNumbersRadioButton.text=Zpracovat \u010d\u00edsla - -CreateTimeIntervalUI.dateDefaultStartLabel.text=V\u00fdchoz\u00ed \u010das spu\u0161t\u011bn\u00ed\: - -CreateTimeIntervalUI.dateDefaultEndLabel.text=V\u00fdchoz\u00ed \u010das dokon\u010den\u00ed\: - -CreateTimeIntervalUI.dateFormatLabel.text=Form\u00e1t data\: - -CreateTimeIntervalUI.defaultStartNumberLabel.text=V\u00fdchoz\u00ed \u010das spu\u0161t\u011bn\u00ed\: - -CreateTimeIntervalUI.defaultEndNumberLabel.text=V\u00fdchoz\u00ed \u010das dokon\u010den\u00ed\: - -!CreateTimeIntervalUI.invalid.dateformat= - -!CreateTimeIntervalUI.invalid.number= +BooleanLogicOperationsUI.descriptionLabel.text=
    Zvolte logickι operace mezi ka\u017edύm pαrem sloupc\u016f
    +BooleanLogicOperationsUI.titleLabel.text=Novύ nαzev sloupce: +JoinWithSeparatorUI.titleLabel.text=Novύ nαzev sloupce: +JoinWithSeparatorUI.separatorLabel.text=Text odd\u011blova\u010de +JoinWithSeparatorUI.separatorText.text= +BooleanLogicOperationsUI.titleTextField.text= +JoinWithSeparatorUI.titleTextField.text= +GeneralColumnTitleChooserUI.titleLabel.text=Novύ nαzev sloupce: +GeneralColumnTitleChooserUI.titleTextField.text= +CreateTimeIntervalUI.startColumnLabel.text=\u010cas \u010dasu spu\u0161t\u011bnν: +CreateTimeIntervalUI.endColumnLabel.text=Sloupec \u010dasu dokon\u010denν: +CreateTimeIntervalUI.header.title=Mo\u017enosti vytvo\u0159enν \u010dasovιho intervalu +CreateTimeIntervalUI.header.description=Zvolte sloupce, kterι budou pou\u017eity jako \u010dasy spu\u0161t\u011bnν/dokon\u010denν.
    Takι m\u016f\u017eete zvolit vύchozν pou\u017eitι \u010dasy spu\u0161t\u011bnν a dokon\u010denν kdy\u017e hodnoty nejsou sprαvn\u011b nebo chyb\u011bjν, jinak bude mνsto toho pou\u017eito nekone\u010dno. +CreateTimeIntervalUI.parseDatesRadioButton.text=Zpracovat data +CreateTimeIntervalUI.parseNumbersRadioButton.text=Zpracovat \u010dνsla +CreateTimeIntervalUI.dateDefaultStartLabel.text=Vύchozν \u010das spu\u0161t\u011bnν: +CreateTimeIntervalUI.dateDefaultEndLabel.text=Vύchozν \u010das dokon\u010denν: +CreateTimeIntervalUI.dateFormatLabel.text=Formαt data: +CreateTimeIntervalUI.defaultStartNumberText.text= +CreateTimeIntervalUI.defaultEndNumberText.text= +CreateTimeIntervalUI.defaultStartNumberLabel.text=Vύchozν \u010das spu\u0161t\u011bnν: +CreateTimeIntervalUI.defaultEndNumberLabel.text=Vύchozν \u010das dokon\u010denν: +CreateTimeIntervalUI.invalid.dateformat=Neplatnύ formαt data +CreateTimeIntervalUI.invalid.number=Neplatnι \u010dνslo diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_de.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_de.properties new file mode 100644 index 0000000000..21db07c3ca --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_de.properties @@ -0,0 +1,24 @@ +BooleanLogicOperationsUI.descriptionLabel.text=
    Wδhlen Sie die logischen Operationen zwischen jedem Spaltenpaar
    +BooleanLogicOperationsUI.titleLabel.text=Titel der neuen Spalte: +JoinWithSeparatorUI.titleLabel.text=Titel der neuen Spalte: +JoinWithSeparatorUI.separatorLabel.text=Trenner-Text: +JoinWithSeparatorUI.separatorText.text= +BooleanLogicOperationsUI.titleTextField.text= +JoinWithSeparatorUI.titleTextField.text= +GeneralColumnTitleChooserUI.titleLabel.text=Titel der neuen Spalte: +GeneralColumnTitleChooserUI.titleTextField.text= +CreateTimeIntervalUI.startColumnLabel.text=Startzeit Spalte: +CreateTimeIntervalUI.endColumnLabel.text=Endzeit Spalte: +CreateTimeIntervalUI.header.title=Optionen Zeitintervall-Erzeugung +CreateTimeIntervalUI.header.description=Wδhlen Sie Spalten, die als Start-/Endzeit verwendet werden.
    Sie kφnnen Default-Start- und Endzeiten festlegen, die verwendet werden, wenn Werte fehlen oder fehlerhaft sind. Ansonsten wird stattdessen "unendlich" verwendet. +CreateTimeIntervalUI.parseDatesRadioButton.text=Parse Datum +CreateTimeIntervalUI.parseNumbersRadioButton.text=Parse Zahlen +CreateTimeIntervalUI.dateDefaultStartLabel.text=Standardwert fόr Beginn: +CreateTimeIntervalUI.dateDefaultEndLabel.text=Standardwert fόr Ende: +CreateTimeIntervalUI.dateFormatLabel.text=Datumsformat: +CreateTimeIntervalUI.defaultStartNumberText.text= +CreateTimeIntervalUI.defaultEndNumberText.text= +CreateTimeIntervalUI.defaultStartNumberLabel.text=Standardwert fόr Beginn: +CreateTimeIntervalUI.defaultEndNumberLabel.text=Standardwert fόr Ende: +CreateTimeIntervalUI.invalid.dateformat=Ungόltiges Datumsformat +CreateTimeIntervalUI.invalid.number=Ungόltige Zahl diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_es.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_es.properties index b6e517117b..472585c90b 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_es.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_es.properties @@ -1,44 +1,24 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:26+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -BooleanLogicOperationsUI.descriptionLabel.text=
    Elige las operaciones l\u00f3gicas para utilizar entre cada par de columnas
    - -BooleanLogicOperationsUI.titleLabel.text=T\u00edtulo de la nueva columna\: - -JoinWithSeparatorUI.titleLabel.text=T\u00edtulo de la nueva columna\: - -JoinWithSeparatorUI.separatorLabel.text=Texto separador\: - -GeneralColumnTitleChooserUI.titleLabel.text=T\u00edtulo de la nueva columna\: - -CreateTimeIntervalUI.startColumnLabel.text=Columna de tiempo inicial\: - -CreateTimeIntervalUI.endColumnLabel.text=Columna de tiempo final\: - -CreateTimeIntervalUI.header.title=Opciones de creaci\u00f3n de intervalo temporal - -CreateTimeIntervalUI.header.description=Escoge las columnas para utilizar como tiempos iniciales y/o tiempos finales.
    Tambi\u00e9n puedes escoger tiempos iniciales y finales por defecto para utilizar cuando los valores no son correctos o vacios, si no se usar\u00e1 infinito en su lugar. - -CreateTimeIntervalUI.parseDatesRadioButton.text=Analizar fechas - -CreateTimeIntervalUI.parseNumbersRadioButton.text=Analizar n\u00fameros - -CreateTimeIntervalUI.dateDefaultStartLabel.text=Tiempo inicial por defecto\: - -CreateTimeIntervalUI.dateDefaultEndLabel.text=Tiempo final por defecto\: - -CreateTimeIntervalUI.dateFormatLabel.text=Formato de fechas\: - -CreateTimeIntervalUI.defaultStartNumberLabel.text=Tiempo inicial por defecto\: - -CreateTimeIntervalUI.defaultEndNumberLabel.text=Tiempo final por defecto\: - -CreateTimeIntervalUI.invalid.dateformat=Forma de fecha inv\u00e1lido - -CreateTimeIntervalUI.invalid.number=N\u00famero inv\u00e1lido +BooleanLogicOperationsUI.descriptionLabel.text=
    Elige las operaciones lσgicas para utilizar entre cada par de columnas
    +BooleanLogicOperationsUI.titleLabel.text=Tνtulo de la nueva columna: +JoinWithSeparatorUI.titleLabel.text=Tνtulo de la nueva columna: +JoinWithSeparatorUI.separatorLabel.text=Texto separador: +JoinWithSeparatorUI.separatorText.text= +BooleanLogicOperationsUI.titleTextField.text= +JoinWithSeparatorUI.titleTextField.text= +GeneralColumnTitleChooserUI.titleLabel.text=Tνtulo de la nueva columna: +GeneralColumnTitleChooserUI.titleTextField.text= +CreateTimeIntervalUI.startColumnLabel.text=Columna de tiempo inicial: +CreateTimeIntervalUI.endColumnLabel.text=Columna de tiempo final: +CreateTimeIntervalUI.header.title=Opciones de creaciσn de intervalo temporal +CreateTimeIntervalUI.header.description=Escoge las columnas para utilizar como tiempos iniciales y/o tiempos finales.
    Tambiιn puedes escoger tiempos iniciales y finales por defecto para utilizar cuando los valores no son correctos o vacios, si no se usarα infinito en su lugar. +CreateTimeIntervalUI.parseDatesRadioButton.text=Analizar fechas +CreateTimeIntervalUI.parseNumbersRadioButton.text=Analizar nϊmeros +CreateTimeIntervalUI.dateDefaultStartLabel.text=Tiempo inicial por defecto: +CreateTimeIntervalUI.dateDefaultEndLabel.text=Tiempo final por defecto: +CreateTimeIntervalUI.dateFormatLabel.text=Formato de fechas: +CreateTimeIntervalUI.defaultStartNumberText.text= +CreateTimeIntervalUI.defaultEndNumberText.text= +CreateTimeIntervalUI.defaultStartNumberLabel.text=Tiempo inicial por defecto: +CreateTimeIntervalUI.defaultEndNumberLabel.text=Tiempo final por defecto: +CreateTimeIntervalUI.invalid.dateformat=Forma de fecha invαlido +CreateTimeIntervalUI.invalid.number=Nϊmero invαlido diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_fr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_fr.properties index 61e7833c62..c98e6a290f 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_fr.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_fr.properties @@ -1,43 +1,24 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:16+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -BooleanLogicOperationsUI.descriptionLabel.text=
    Op\u00e9ration logique entre chaque pair de colonnes
    - -BooleanLogicOperationsUI.titleLabel.text=Titre de la nouvelle colonne \: - -JoinWithSeparatorUI.titleLabel.text=Titre de la nouvelle colonne \: - -JoinWithSeparatorUI.separatorLabel.text=S\u00e9parateur \: - -GeneralColumnTitleChooserUI.titleLabel.text=Titre de la nouvelle colonne \: - -CreateTimeIntervalUI.startColumnLabel.text=Temps de d\u00e9but \: - -CreateTimeIntervalUI.endColumnLabel.text=Temps de fin \: - -CreateTimeIntervalUI.header.title=Options du nouvel intervalle temporel - -CreateTimeIntervalUI.header.description=Colonnes de temps de d\u00e9but et de fin.
    Choisissez des valeurs par d\u00e9faut pour les valeurs manquantes ou incorrectes, ou l'infini sera utilis\u00e9. - -CreateTimeIntervalUI.parseDatesRadioButton.text=Extraire les dates - -CreateTimeIntervalUI.parseNumbersRadioButton.text=Extraire les nombres - -CreateTimeIntervalUI.dateDefaultStartLabel.text=D\u00e9faut par d\u00e9faut \: - -CreateTimeIntervalUI.dateDefaultEndLabel.text=Fin par d\u00e9faut \: - -CreateTimeIntervalUI.dateFormatLabel.text=Format temporel \: - -CreateTimeIntervalUI.defaultStartNumberLabel.text=D\u00e9but par d\u00e9faut \: - -CreateTimeIntervalUI.defaultEndNumberLabel.text=Fin par d\u00e9faut \: - -!CreateTimeIntervalUI.invalid.dateformat= - -!CreateTimeIntervalUI.invalid.number= +BooleanLogicOperationsUI.descriptionLabel.text=
    Opιration logique entre chaque pair de colonnes
    +BooleanLogicOperationsUI.titleLabel.text=Titre de la nouvelle colonne : +JoinWithSeparatorUI.titleLabel.text=Titre de la nouvelle colonne : +JoinWithSeparatorUI.separatorLabel.text=Sιparateur : +JoinWithSeparatorUI.separatorText.text= +BooleanLogicOperationsUI.titleTextField.text= +JoinWithSeparatorUI.titleTextField.text= +GeneralColumnTitleChooserUI.titleLabel.text=Titre de la nouvelle colonne : +GeneralColumnTitleChooserUI.titleTextField.text= +CreateTimeIntervalUI.startColumnLabel.text=Temps de dιbut : +CreateTimeIntervalUI.endColumnLabel.text=Temps de fin : +CreateTimeIntervalUI.header.title=Options du nouvel intervalle temporel +CreateTimeIntervalUI.header.description=Colonnes de temps de dιbut et de fin.
    Choisissez des valeurs par dιfaut pour les valeurs manquantes ou incorrectes, ou l'infini sera utilisι. +CreateTimeIntervalUI.parseDatesRadioButton.text=Extraire les dates +CreateTimeIntervalUI.parseNumbersRadioButton.text=Extraire les nombres +CreateTimeIntervalUI.dateDefaultStartLabel.text=Dιfaut par dιfaut : +CreateTimeIntervalUI.dateDefaultEndLabel.text=Fin par dιfaut : +CreateTimeIntervalUI.dateFormatLabel.text=Format temporel : +CreateTimeIntervalUI.defaultStartNumberText.text= +CreateTimeIntervalUI.defaultEndNumberText.text= +CreateTimeIntervalUI.defaultStartNumberLabel.text=Dιbut par dιfaut : +CreateTimeIntervalUI.defaultEndNumberLabel.text=Fin par dιfaut : +CreateTimeIntervalUI.invalid.dateformat=Format de date invalide +CreateTimeIntervalUI.invalid.number=Nombre invalide diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_he.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_he.properties new file mode 100644 index 0000000000..2299a6a219 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_he.properties @@ -0,0 +1,24 @@ +BooleanLogicOperationsUI.descriptionLabel.text=
    Choose the logical operations between each pair of columns
    +BooleanLogicOperationsUI.titleLabel.text=New column title: +JoinWithSeparatorUI.titleLabel.text=New column title: +JoinWithSeparatorUI.separatorLabel.text=Separator text: +JoinWithSeparatorUI.separatorText.text= +BooleanLogicOperationsUI.titleTextField.text= +JoinWithSeparatorUI.titleTextField.text= +GeneralColumnTitleChooserUI.titleLabel.text=New column title: +GeneralColumnTitleChooserUI.titleTextField.text= +CreateTimeIntervalUI.startColumnLabel.text=Start time column: +CreateTimeIntervalUI.endColumnLabel.text=End time column: +CreateTimeIntervalUI.header.title=Time Interval creation options +CreateTimeIntervalUI.header.description=Choose columns to use as start and/or end times.
    Also you can choose default start and end times to use when values are not correct or missing, else infinity will be used instead. +CreateTimeIntervalUI.parseDatesRadioButton.text=Parse dates +CreateTimeIntervalUI.parseNumbersRadioButton.text=Parse numbers +CreateTimeIntervalUI.dateDefaultStartLabel.text=Default start time: +CreateTimeIntervalUI.dateDefaultEndLabel.text=Default end time: +CreateTimeIntervalUI.dateFormatLabel.text=Date format: +CreateTimeIntervalUI.defaultStartNumberText.text= +CreateTimeIntervalUI.defaultEndNumberText.text= +CreateTimeIntervalUI.defaultStartNumberLabel.text=Default start time: +CreateTimeIntervalUI.defaultEndNumberLabel.text=Default end time: +CreateTimeIntervalUI.invalid.dateformat=Invalid date format +CreateTimeIntervalUI.invalid.number=Invalid number diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_hu.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_hu.properties new file mode 100644 index 0000000000..c76b5abb9a --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_hu.properties @@ -0,0 +1,20 @@ + + +GeneralColumnTitleChooserUI.titleLabel.text=\u00DAj oszlop c\u00EDme: +CreateTimeIntervalUI.endColumnLabel.text=V\u00E9gid\u0151s oszlop: +CreateTimeIntervalUI.dateFormatLabel.text=D\u00E1tum form\u00E1tuma: +CreateTimeIntervalUI.invalid.number=\u00C9rv\u00E9nytelen sz\u00E1m +CreateTimeIntervalUI.invalid.dateformat=\u00C9rv\u00E9nytelen d\u00E1tumform\u00E1tum +CreateTimeIntervalUI.parseNumbersRadioButton.text=Sz\u00E1mok elemz\u00E9se +CreateTimeIntervalUI.header.description=V\u00E1lassza ki a kezd\u00E9si \u00E9s/vagy befejez\u00E9si id\u0151pontk\u00E9nt haszn\u00E1lni k\u00EDv\u00E1nt oszlopokat.
    Kiv\u00E1laszthatja az alap\u00E9rtelmezett kezd\u00E9si \u00E9s befejez\u00E9si id\u0151pontokat is, ha az \u00E9rt\u00E9kek nem helyesek vagy hi\u00E1nyoznak, k\u00FCl\u00F6nben a v\u00E9gtelent haszn\u00E1lja a rendszer. +CreateTimeIntervalUI.dateDefaultStartLabel.text=Alap\u00E9rtelmezett kezd\u00E9si id\u0151: +CreateTimeIntervalUI.defaultStartNumberLabel.text=Alap\u00E9rtelmezett kezd\u00E9si id\u0151: +CreateTimeIntervalUI.dateDefaultEndLabel.text=Alap\u00E9rtelmezett befejez\u00E9si id\u0151: +CreateTimeIntervalUI.defaultEndNumberLabel.text=Alap\u00E9rtelmezett befejez\u00E9si id\u0151: +CreateTimeIntervalUI.startColumnLabel.text=Kezd\u0151 id\u0151pont oszlop: +BooleanLogicOperationsUI.descriptionLabel.text=
    V\u00E1lassza ki az egyes oszlopp\u00E1rok k\u00F6z\u00F6tti logikai m\u0171veleteket
    +CreateTimeIntervalUI.header.title=Id\u0151 intervallum l\u00E9trehoz\u00E1si lehet\u0151s\u00E9gek +BooleanLogicOperationsUI.titleLabel.text=\u00DAj oszlop c\u00EDme: +CreateTimeIntervalUI.parseDatesRadioButton.text=D\u00E1tumok elemz\u00E9se +JoinWithSeparatorUI.separatorLabel.text=Elv\u00E1laszt\u00F3 sz\u00F6veg: +JoinWithSeparatorUI.titleLabel.text=\u00DAj oszlop c\u00EDme: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_it.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_it.properties new file mode 100644 index 0000000000..2299a6a219 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_it.properties @@ -0,0 +1,24 @@ +BooleanLogicOperationsUI.descriptionLabel.text=
    Choose the logical operations between each pair of columns
    +BooleanLogicOperationsUI.titleLabel.text=New column title: +JoinWithSeparatorUI.titleLabel.text=New column title: +JoinWithSeparatorUI.separatorLabel.text=Separator text: +JoinWithSeparatorUI.separatorText.text= +BooleanLogicOperationsUI.titleTextField.text= +JoinWithSeparatorUI.titleTextField.text= +GeneralColumnTitleChooserUI.titleLabel.text=New column title: +GeneralColumnTitleChooserUI.titleTextField.text= +CreateTimeIntervalUI.startColumnLabel.text=Start time column: +CreateTimeIntervalUI.endColumnLabel.text=End time column: +CreateTimeIntervalUI.header.title=Time Interval creation options +CreateTimeIntervalUI.header.description=Choose columns to use as start and/or end times.
    Also you can choose default start and end times to use when values are not correct or missing, else infinity will be used instead. +CreateTimeIntervalUI.parseDatesRadioButton.text=Parse dates +CreateTimeIntervalUI.parseNumbersRadioButton.text=Parse numbers +CreateTimeIntervalUI.dateDefaultStartLabel.text=Default start time: +CreateTimeIntervalUI.dateDefaultEndLabel.text=Default end time: +CreateTimeIntervalUI.dateFormatLabel.text=Date format: +CreateTimeIntervalUI.defaultStartNumberText.text= +CreateTimeIntervalUI.defaultEndNumberText.text= +CreateTimeIntervalUI.defaultStartNumberLabel.text=Default start time: +CreateTimeIntervalUI.defaultEndNumberLabel.text=Default end time: +CreateTimeIntervalUI.invalid.dateformat=Invalid date format +CreateTimeIntervalUI.invalid.number=Invalid number diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_ja.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_ja.properties index 69facbc5b1..a9b0fe4b35 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_ja.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_ja.properties @@ -1,43 +1,24 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:16+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -BooleanLogicOperationsUI.descriptionLabel.text=
    \u5217\u306e\u5404\u7d44\u9593\u306e\u8ad6\u7406\u6f14\u7b97\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
    - -BooleanLogicOperationsUI.titleLabel.text=\u65b0\u898f\u5217\u30bf\u30a4\u30c8\u30eb\: - -JoinWithSeparatorUI.titleLabel.text=\u65b0\u898f\u5217\u30bf\u30a4\u30c8\u30eb\: - -JoinWithSeparatorUI.separatorLabel.text=\u30bb\u30d1\u30ec\u30fc\u30bf\u30fb\u30c6\u30ad\u30b9\u30c8\: - -GeneralColumnTitleChooserUI.titleLabel.text=\u65b0\u898f\u5217\u30bf\u30a4\u30c8\u30eb\: - -CreateTimeIntervalUI.startColumnLabel.text=\u958b\u59cb\u6642\u9593\u5217\: - -CreateTimeIntervalUI.endColumnLabel.text=\u7d42\u4e86\u6642\u9593\u5217\: - -CreateTimeIntervalUI.header.title=\u6642\u9593\u9593\u9694\u4f5c\u6210\u30aa\u30d7\u30b7\u30e7\u30f3 - -CreateTimeIntervalUI.header.description=\u958b\u59cb\u304a\u3088\u3073/\u307e\u305f\u306f\u7d42\u4e86\u6642\u523b\u3068\u3057\u3066\u4f7f\u200b\u200b\u7528\u3059\u308b\u5217\u3092\u9078\u629e\u3057\u307e\u3059\u3002
    \u5024\u304c\u6b63\u3057\u304f\u306a\u3044\u304b\u6b20\u843d\u3057\u3066\u3044\u308b\u3068\u304d\u306b\u4f7f\u7528\u3059\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u958b\u59cb\u6642\u523b\u3068\u7d42\u4e86\u6642\u523b\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u304c\u3001\u305d\u3046\u3067\u306a\u3051\u308c\u3070\u6c38\u9060\u3067\u4ee3\u7528\u3055\u308c\u307e\u3059\u3002 - -CreateTimeIntervalUI.parseDatesRadioButton.text=\u65e5\u4ed8\u306e\u89e3\u6790 - -CreateTimeIntervalUI.parseNumbersRadioButton.text=\u6570\u306e\u89e3\u6790 - -CreateTimeIntervalUI.dateDefaultStartLabel.text=\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u958b\u59cb\u6642\u523b\: - -CreateTimeIntervalUI.dateDefaultEndLabel.text=\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u7d42\u4e86\u6642\u9593\: - -CreateTimeIntervalUI.dateFormatLabel.text=\u65e5\u4ed8\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\: - -CreateTimeIntervalUI.defaultStartNumberLabel.text=\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u958b\u59cb\u6642\u523b\: - -CreateTimeIntervalUI.defaultEndNumberLabel.text=\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u7d42\u4e86\u6642\u9593\: - -!CreateTimeIntervalUI.invalid.dateformat= - -!CreateTimeIntervalUI.invalid.number= +BooleanLogicOperationsUI.descriptionLabel.text=
    \u5217\u306e\u5404\u7d44\u9593\u306e\u8ad6\u7406\u6f14\u7b97\u3092\u9078\u629e\u3057\u3066\u304f\u3060\u3055\u3044
    +BooleanLogicOperationsUI.titleLabel.text=\u65b0\u898f\u5217\u30bf\u30a4\u30c8\u30eb: +JoinWithSeparatorUI.titleLabel.text=\u65b0\u898f\u5217\u30bf\u30a4\u30c8\u30eb: +JoinWithSeparatorUI.separatorLabel.text=\u30bb\u30d1\u30ec\u30fc\u30bf\u30fb\u30c6\u30ad\u30b9\u30c8: +JoinWithSeparatorUI.separatorText.text= +BooleanLogicOperationsUI.titleTextField.text= +JoinWithSeparatorUI.titleTextField.text= +GeneralColumnTitleChooserUI.titleLabel.text=\u65b0\u898f\u5217\u30bf\u30a4\u30c8\u30eb: +GeneralColumnTitleChooserUI.titleTextField.text= +CreateTimeIntervalUI.startColumnLabel.text=\u958b\u59cb\u6642\u9593\u5217: +CreateTimeIntervalUI.endColumnLabel.text=\u7d42\u4e86\u6642\u9593\u5217: +CreateTimeIntervalUI.header.title=\u6642\u9593\u9593\u9694\u4f5c\u6210\u30aa\u30d7\u30b7\u30e7\u30f3 +CreateTimeIntervalUI.header.description=\u958b\u59cb\u304a\u3088\u3073/\u307e\u305f\u306f\u7d42\u4e86\u6642\u523b\u3068\u3057\u3066\u4f7f\u200b\u200b\u7528\u3059\u308b\u5217\u3092\u9078\u629e\u3057\u307e\u3059\u3002
    \u5024\u304c\u6b63\u3057\u304f\u306a\u3044\u304b\u6b20\u843d\u3057\u3066\u3044\u308b\u3068\u304d\u306b\u4f7f\u7528\u3059\u308b\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u958b\u59cb\u6642\u523b\u3068\u7d42\u4e86\u6642\u523b\u3092\u9078\u629e\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u304c\u3001\u305d\u3046\u3067\u306a\u3051\u308c\u3070\u6c38\u9060\u3067\u4ee3\u7528\u3055\u308c\u307e\u3059\u3002 +CreateTimeIntervalUI.parseDatesRadioButton.text=\u65e5\u4ed8\u306e\u89e3\u6790 +CreateTimeIntervalUI.parseNumbersRadioButton.text=\u6570\u306e\u89e3\u6790 +CreateTimeIntervalUI.dateDefaultStartLabel.text=\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u958b\u59cb\u6642\u523b: +CreateTimeIntervalUI.dateDefaultEndLabel.text=\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u7d42\u4e86\u6642\u9593: +CreateTimeIntervalUI.dateFormatLabel.text=\u65e5\u4ed8\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8: +CreateTimeIntervalUI.defaultStartNumberText.text= +CreateTimeIntervalUI.defaultEndNumberText.text= +CreateTimeIntervalUI.defaultStartNumberLabel.text=\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u958b\u59cb\u6642\u523b: +CreateTimeIntervalUI.defaultEndNumberLabel.text=\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u7d42\u4e86\u6642\u9593: +# CreateTimeIntervalUI.invalid.dateformat=Invalid date format +# CreateTimeIntervalUI.invalid.number=Invalid number diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_ko.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_ko.properties new file mode 100644 index 0000000000..85e6380238 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_ko.properties @@ -0,0 +1,20 @@ + + +GeneralColumnTitleChooserUI.titleLabel.text=\uC0C8\uB85C\uC6B4 \uC5F4 \uC81C\uBAA9: +CreateTimeIntervalUI.endColumnLabel.text=\uB05D \uC2DC\uAC04 \uC5F4: +CreateTimeIntervalUI.dateFormatLabel.text=\uB0A0\uC9DC \uD3EC\uB9F7: +CreateTimeIntervalUI.invalid.number=\uC798\uBABB\uB41C \uC22B\uC790 +CreateTimeIntervalUI.invalid.dateformat=\uC798\uBABB\uB41C \uB0A0\uC9DC \uD3EC\uB9F7 +CreateTimeIntervalUI.parseNumbersRadioButton.text=\uC22B\uC790 \uD574\uC11D +CreateTimeIntervalUI.header.description=\uC2DC\uC791 \uC2DC\uAC04 \uBC0F/\uB610\uB294 \uC885\uB8CC \uC2DC\uAC04\uC73C\uB85C \uC0AC\uC6A9\uD560 \uC5F4\uC744 \uC120\uD0DD\uD558\uC138\uC694.
    \uB610\uD55C \uAC12\uC774 \uC815\uD655\uD558\uC9C0 \uC54A\uAC70\uB098 \uB204\uB77D\uB41C \uACBD\uC6B0 \uC0AC\uC6A9\uD560 \uAE30\uBCF8 \uC2DC\uC791 \uC2DC\uAC04\uACFC \uC885\uB8CC \uC2DC\uAC04\uC744 \uC120\uD0DD\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4, \uC544\uB2C8\uBA74 \uBB34\uD55C\uAC12\uC774 \uB300\uC2E0 \uC0AC\uC6A9\uB429\uB2C8\uB2E4. +CreateTimeIntervalUI.dateDefaultStartLabel.text=\uC2DC\uC791 \uC2DC\uAC04 \uAE30\uBCF8\uAC12: +CreateTimeIntervalUI.defaultStartNumberLabel.text=\uC2DC\uC791 \uC2DC\uAC04 \uAE30\uBCF8\uAC12: +CreateTimeIntervalUI.dateDefaultEndLabel.text=\uB05D \uC2DC\uAC04 \uAE30\uBCF8\uAC12: +CreateTimeIntervalUI.defaultEndNumberLabel.text=\uB05D \uC2DC\uAC04 \uAE30\uBCF8\uAC12: +CreateTimeIntervalUI.startColumnLabel.text=\uC2DC\uC791 \uC2DC\uAC04 \uC5F4: +BooleanLogicOperationsUI.descriptionLabel.text=
    \uAC01 \uC5F4 \uC30D \uC0AC\uC774\uC758 \uB17C\uB9AC \uC5F0\uC0B0\uC744 \uC120\uD0DD
    +CreateTimeIntervalUI.header.title=\uC2DC\uAC04 \uAC04\uACA9 \uC0DD\uC131 \uC635\uC158 +BooleanLogicOperationsUI.titleLabel.text=\uC0C8 \uC5F4 \uC81C\uBAA9: +CreateTimeIntervalUI.parseDatesRadioButton.text=\uB0A0\uC9DC \uD574\uC11D +JoinWithSeparatorUI.separatorLabel.text=\uAD6C\uBD84\uC790 \uD14D\uC2A4\uD2B8: +JoinWithSeparatorUI.titleLabel.text=\uC0C8\uB85C\uC6B4 \uC5F4 \uC81C\uBAA9: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_nl.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_nl.properties new file mode 100644 index 0000000000..23622af037 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_nl.properties @@ -0,0 +1,24 @@ +BooleanLogicOperationsUI.descriptionLabel.text=
    Choose the logical operations between each pair of columns
    +BooleanLogicOperationsUI.titleLabel.text=Nieuwe kolomtitel: +JoinWithSeparatorUI.titleLabel.text=Nieuwe kolomtitel: +JoinWithSeparatorUI.separatorLabel.text=Separator text: +JoinWithSeparatorUI.separatorText.text= +BooleanLogicOperationsUI.titleTextField.text= +JoinWithSeparatorUI.titleTextField.text= +GeneralColumnTitleChooserUI.titleLabel.text=Nieuwe kolomtitel: +GeneralColumnTitleChooserUI.titleTextField.text= +CreateTimeIntervalUI.startColumnLabel.text=Start time column: +CreateTimeIntervalUI.endColumnLabel.text=End time column: +CreateTimeIntervalUI.header.title=Time Interval creation options +CreateTimeIntervalUI.header.description=Choose columns to use as start and/or end times.
    Also you can choose default start and end times to use when values are not correct or missing, else infinity will be used instead. +CreateTimeIntervalUI.parseDatesRadioButton.text=Data parseren +CreateTimeIntervalUI.parseNumbersRadioButton.text=Parse numbers +CreateTimeIntervalUI.dateDefaultStartLabel.text=Default start time: +CreateTimeIntervalUI.dateDefaultEndLabel.text=Default end time: +CreateTimeIntervalUI.dateFormatLabel.text=Date format: +CreateTimeIntervalUI.defaultStartNumberText.text= +CreateTimeIntervalUI.defaultEndNumberText.text= +CreateTimeIntervalUI.defaultStartNumberLabel.text=Default start time: +CreateTimeIntervalUI.defaultEndNumberLabel.text=Default end time: +CreateTimeIntervalUI.invalid.dateformat=Ongeldig datumformaat +CreateTimeIntervalUI.invalid.number=Invalid number diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_pt.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_pt.properties new file mode 100644 index 0000000000..1b3f6de059 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_pt.properties @@ -0,0 +1,18 @@ +CreateTimeIntervalUI.dateDefaultEndLabel.text=Tempo final padr\u00E3o: +CreateTimeIntervalUI.dateFormatLabel.text=Formato de data: +CreateTimeIntervalUI.defaultStartNumberLabel.text=Tempo inicial padr\u00E3o: +CreateTimeIntervalUI.defaultEndNumberLabel.text=Tempo final padr\u00E3o: +BooleanLogicOperationsUI.descriptionLabel.text=
    Escolha as opera\u00E7\u00F5es l\u00F3gicas entre cada par de colunas
    +BooleanLogicOperationsUI.titleLabel.text=T\u00EDtulo da nova coluna: +JoinWithSeparatorUI.titleLabel.text=T\u00EDtulo da nova coluna: +JoinWithSeparatorUI.separatorLabel.text=Texto separador: +GeneralColumnTitleChooserUI.titleLabel.text=T\u00EDtulo da nova coluna: +CreateTimeIntervalUI.startColumnLabel.text=Coluna de tempo inicial: +CreateTimeIntervalUI.endColumnLabel.text=Coluna de tempo final: +CreateTimeIntervalUI.header.title=Op\u00E7\u00F5es de cria\u00E7\u00E3o de Intervalo de Tempo +CreateTimeIntervalUI.header.description=Escolha as columas para utilizar como tempos iniciais e/ou finais.
    Tamb\u00E9m pode escolher tempos iniciais e finais padr\u00E3o para utilizar quando os valores sejam vazios ou n\u00E3o sejam fornecidos. Caso os valores padr\u00E3o n\u00E3o sejam fornecidos, ser\u00E1 usado "infinito". +CreateTimeIntervalUI.parseDatesRadioButton.text=Analisar datas +CreateTimeIntervalUI.parseNumbersRadioButton.text=Analisar n\u00FAmeros +CreateTimeIntervalUI.dateDefaultStartLabel.text=Tempo inicial padr\u00E3o: +CreateTimeIntervalUI.invalid.dateformat=Formato inv\u00E1lido de data +CreateTimeIntervalUI.invalid.number=N\u00FAmero inv\u00E1lido diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_pt_BR.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_pt_BR.properties index 80f4d2c3d2..fb75d17181 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_pt_BR.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_pt_BR.properties @@ -1,43 +1,24 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:16+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -BooleanLogicOperationsUI.descriptionLabel.text=
    Escolha as opera\u00e7\u00f5es l\u00f3gicas entre cada par de colunas
    - -BooleanLogicOperationsUI.titleLabel.text=T\u00edtulo da nova coluna\: - -JoinWithSeparatorUI.titleLabel.text=T\u00edtulo da nova coluna\: - -JoinWithSeparatorUI.separatorLabel.text=Texto separador\: - -GeneralColumnTitleChooserUI.titleLabel.text=T\u00edtulo da nova coluna\: - -CreateTimeIntervalUI.startColumnLabel.text=Coluna de tempo inicial\: - -CreateTimeIntervalUI.endColumnLabel.text=Coluna de tempo final\: - -CreateTimeIntervalUI.header.title=Op\u00e7\u00f5es de cria\u00e7\u00e3o de Intervalo de Tempo - -CreateTimeIntervalUI.header.description=Escolha as columas para utilizar como tempos iniciais e/ou finais.
    Voc\u00ea tamb\u00e9m pode escolher tempos iniciais e finais padr\u00e3o para utilizar quando os valores sejam vazios ou n\u00e3o sejam fornecidos. Caso os valores padr\u00e3o n\u00e3o sejam fornecidos, ser\u00e1 usado "infinito". - -CreateTimeIntervalUI.parseDatesRadioButton.text=Analisar datas - -CreateTimeIntervalUI.parseNumbersRadioButton.text=Analisar n\u00fameros - -CreateTimeIntervalUI.dateDefaultStartLabel.text=Tempo inicial padr\u00e3o\: - -CreateTimeIntervalUI.dateDefaultEndLabel.text=Tempo final padr\u00e3o\: - -CreateTimeIntervalUI.dateFormatLabel.text=Formato de data\: - -CreateTimeIntervalUI.defaultStartNumberLabel.text=Tempo inicial padr\u00e3o\: - -CreateTimeIntervalUI.defaultEndNumberLabel.text=Tempo final padr\u00e3o\: - -!CreateTimeIntervalUI.invalid.dateformat= - -!CreateTimeIntervalUI.invalid.number= +BooleanLogicOperationsUI.descriptionLabel.text=
    Escolha as operaηυes lσgicas entre cada par de colunas
    +BooleanLogicOperationsUI.titleLabel.text=Tνtulo da nova coluna: +JoinWithSeparatorUI.titleLabel.text=Tνtulo da nova coluna: +JoinWithSeparatorUI.separatorLabel.text=Texto separador: +JoinWithSeparatorUI.separatorText.text= +BooleanLogicOperationsUI.titleTextField.text= +JoinWithSeparatorUI.titleTextField.text= +GeneralColumnTitleChooserUI.titleLabel.text=Tνtulo da nova coluna: +GeneralColumnTitleChooserUI.titleTextField.text= +CreateTimeIntervalUI.startColumnLabel.text=Coluna de tempo inicial: +CreateTimeIntervalUI.endColumnLabel.text=Coluna de tempo final: +CreateTimeIntervalUI.header.title=Opηυes de criaηγo de Intervalo de Tempo +CreateTimeIntervalUI.header.description=Escolha as columas para utilizar como tempos iniciais e/ou finais.
    Vocκ tambιm pode escolher tempos iniciais e finais padrγo para utilizar quando os valores sejam vazios ou nγo sejam fornecidos. Caso os valores padrγo nγo sejam fornecidos, serα usado "infinito". +CreateTimeIntervalUI.parseDatesRadioButton.text=Analisar datas +CreateTimeIntervalUI.parseNumbersRadioButton.text=Analisar nϊmeros +CreateTimeIntervalUI.dateDefaultStartLabel.text=Tempo inicial padrγo: +CreateTimeIntervalUI.dateDefaultEndLabel.text=Tempo final padrγo: +CreateTimeIntervalUI.dateFormatLabel.text=Formato de data: +CreateTimeIntervalUI.defaultStartNumberText.text= +CreateTimeIntervalUI.defaultEndNumberText.text= +CreateTimeIntervalUI.defaultStartNumberLabel.text=Tempo inicial padrγo: +CreateTimeIntervalUI.defaultEndNumberLabel.text=Tempo final padrγo: +CreateTimeIntervalUI.invalid.dateformat=Formato invαlido de data +CreateTimeIntervalUI.invalid.number=Nϊmero invαlido diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_ro.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_ro.properties new file mode 100644 index 0000000000..c59eaa14c2 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_ro.properties @@ -0,0 +1,20 @@ + + +BooleanLogicOperationsUI.titleLabel.text=Titlul noii coloane: +CreateTimeIntervalUI.parseDatesRadioButton.text=Parseaz\u0103 date +BooleanLogicOperationsUI.descriptionLabel.text=
    Alege opera\u021Biile logice dintre fiecare pereche de coloane
    +CreateTimeIntervalUI.endColumnLabel.text=Coloan\u0103 timp de sf\u00E2r\u0219it: +CreateTimeIntervalUI.dateDefaultStartLabel.text=Timp implicit de \u00EEnceput: +CreateTimeIntervalUI.dateDefaultEndLabel.text=Timp implicit de sf\u00E2r\u0219it: +CreateTimeIntervalUI.dateFormatLabel.text=Format dat\u0103: +CreateTimeIntervalUI.defaultStartNumberLabel.text=Timp implicit de \u00EEnceput: +CreateTimeIntervalUI.defaultEndNumberLabel.text=Timp implicit de sf\u00E2r\u0219it: +CreateTimeIntervalUI.invalid.dateformat=Format de dat\u0103 nevalid +CreateTimeIntervalUI.invalid.number=Num\u0103r nevalid +JoinWithSeparatorUI.separatorLabel.text=Text separator: +JoinWithSeparatorUI.titleLabel.text=Titlul noii coloane: +GeneralColumnTitleChooserUI.titleLabel.text=Titlul noii coloane: +CreateTimeIntervalUI.parseNumbersRadioButton.text=Parseaz\u0103 numere +CreateTimeIntervalUI.startColumnLabel.text=Coloan\u0103 timp de \u00EEnceput: +CreateTimeIntervalUI.header.description=Alege coloanele de folosit ca timpi de \u00EEnceput \u0219i/sau sf\u00E2r\u0219it.
    Po\u021Bi alege \u0219i timpii implici\u021Bi pentru cazul \u00EEn care valorile nu sunt corecte sau lipsesc, altfel se va folosi infinitul. +CreateTimeIntervalUI.header.title=Op\u021Biuni de creare interval de timp diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_ru.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_ru.properties index 4995687c7f..4a88b90ce3 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_ru.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_ru.properties @@ -1,43 +1,24 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:16+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -BooleanLogicOperationsUI.descriptionLabel.text=
    \u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0430\u0440\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432
    - -BooleanLogicOperationsUI.titleLabel.text=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430\: - -JoinWithSeparatorUI.titleLabel.text=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430\: - -JoinWithSeparatorUI.separatorLabel.text=\u0420\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c\: - -GeneralColumnTitleChooserUI.titleLabel.text=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430\: - -CreateTimeIntervalUI.startColumnLabel.text=\u0421\u0442\u043e\u043b\u0431\u0435\u0446 \u0441 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c\: - -CreateTimeIntervalUI.endColumnLabel.text=\u0421\u0442\u043e\u043b\u0431\u0435\u0446 \u0441 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c\: - -CreateTimeIntervalUI.header.title=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 - -CreateTimeIntervalUI.header.description=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438/\u0438\u043b\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432.
    \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0432 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b \u0438\u043b\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442, \u0438\u043d\u0430\u0447\u0435 \u0432 \u044d\u0442\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u044c. - -CreateTimeIntervalUI.parseDatesRadioButton.text=\u0420\u0430\u0437\u0431\u043e\u0440 \u0434\u0430\u0442\u044b - -CreateTimeIntervalUI.parseNumbersRadioButton.text=\u0420\u0430\u0437\u0431\u043e\u0440 \u0447\u0438\u0441\u0435\u043b - -CreateTimeIntervalUI.dateDefaultStartLabel.text=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430\u0447\u0430\u043b\u0430\: - -CreateTimeIntervalUI.dateDefaultEndLabel.text=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f\: - -CreateTimeIntervalUI.dateFormatLabel.text=\u0424\u043e\u0440\u043c\u0430\u0442 \u0434\u0430\u0442\u044b\: - -CreateTimeIntervalUI.defaultStartNumberLabel.text=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430\u0447\u0430\u043b\u0430\: - -CreateTimeIntervalUI.defaultEndNumberLabel.text=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f\: - -!CreateTimeIntervalUI.invalid.dateformat= - -!CreateTimeIntervalUI.invalid.number= +BooleanLogicOperationsUI.descriptionLabel.text=
    \u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043a \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0430\u0440\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432
    +BooleanLogicOperationsUI.titleLabel.text=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430: +JoinWithSeparatorUI.titleLabel.text=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430: +JoinWithSeparatorUI.separatorLabel.text=\u0420\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c: +JoinWithSeparatorUI.separatorText.text= +BooleanLogicOperationsUI.titleTextField.text= +JoinWithSeparatorUI.titleTextField.text= +GeneralColumnTitleChooserUI.titleLabel.text=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430: +GeneralColumnTitleChooserUI.titleTextField.text= +CreateTimeIntervalUI.startColumnLabel.text=\u0421\u0442\u043e\u043b\u0431\u0435\u0446 \u0441 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c: +CreateTimeIntervalUI.endColumnLabel.text=\u0421\u0442\u043e\u043b\u0431\u0435\u0446 \u0441 \u0444\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c \u0432\u0440\u0435\u043c\u0435\u043d\u0435\u043c: +CreateTimeIntervalUI.header.title=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 +CreateTimeIntervalUI.header.description=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0430 \u043d\u0430\u0447\u0430\u043b\u0430 \u0438/\u0438\u043b\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u043e\u0432.
    \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u044b \u0432 \u0441\u043b\u0443\u0447\u0430\u044f\u0445, \u043a\u043e\u0433\u0434\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 \u043d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u044b \u0438\u043b\u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442, \u0438\u043d\u0430\u0447\u0435 \u0432 \u044d\u0442\u0438\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0435\u0441\u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0441\u0442\u044c. +CreateTimeIntervalUI.parseDatesRadioButton.text=\u0420\u0430\u0437\u0431\u043e\u0440 \u0434\u0430\u0442\u044b +CreateTimeIntervalUI.parseNumbersRadioButton.text=\u0420\u0430\u0437\u0431\u043e\u0440 \u0447\u0438\u0441\u0435\u043b +CreateTimeIntervalUI.dateDefaultStartLabel.text=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430\u0447\u0430\u043b\u0430: +CreateTimeIntervalUI.dateDefaultEndLabel.text=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f: +CreateTimeIntervalUI.dateFormatLabel.text=\u0424\u043e\u0440\u043c\u0430\u0442 \u0434\u0430\u0442\u044b: +CreateTimeIntervalUI.defaultStartNumberText.text= +CreateTimeIntervalUI.defaultEndNumberText.text= +CreateTimeIntervalUI.defaultStartNumberLabel.text=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u043d\u0430\u0447\u0430\u043b\u0430: +CreateTimeIntervalUI.defaultEndNumberLabel.text=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0434\u043b\u044f \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0438\u044f: +# CreateTimeIntervalUI.invalid.dateformat=Invalid date format +# CreateTimeIntervalUI.invalid.number=Invalid number diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_th.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_tr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_tr.properties new file mode 100644 index 0000000000..1bb97916a5 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_tr.properties @@ -0,0 +1,24 @@ +BooleanLogicOperationsUI.descriptionLabel.text=
    Her bir sόtun ηifti aras\u0131ndaki mant\u0131ksal operatφrleri seηiniz
    +BooleanLogicOperationsUI.titleLabel.text=Yeni sόtun ba\u015fl\u0131\u011f\u0131: +JoinWithSeparatorUI.titleLabel.text=Yeni sόtun ba\u015fl\u0131\u011f\u0131: +JoinWithSeparatorUI.separatorLabel.text=Ay\u0131s\u0131c\u0131 metin: +JoinWithSeparatorUI.separatorText.text= +BooleanLogicOperationsUI.titleTextField.text= +JoinWithSeparatorUI.titleTextField.text= +GeneralColumnTitleChooserUI.titleLabel.text=Yeni sόtun ba\u015fl\u0131\u011f\u0131: +GeneralColumnTitleChooserUI.titleTextField.text= +CreateTimeIntervalUI.startColumnLabel.text=Ba\u015flang\u0131η zaman\u0131 sόtunu: +CreateTimeIntervalUI.endColumnLabel.text=Biti\u015f zaman\u0131 sόtunu: +CreateTimeIntervalUI.header.title=Time Interval creation options +CreateTimeIntervalUI.header.description=Choose columns to use as start and/or end times.
    Also you can choose default start and end times to use when values are not correct or missing, else infinity will be used instead. +CreateTimeIntervalUI.parseDatesRadioButton.text=Parse dates +CreateTimeIntervalUI.parseNumbersRadioButton.text=Parse numbers +CreateTimeIntervalUI.dateDefaultStartLabel.text=Varsay\u0131lan ba\u015flama zaman\u0131: +CreateTimeIntervalUI.dateDefaultEndLabel.text=Varsay\u0131lan biti\u015f zaman\u0131: +CreateTimeIntervalUI.dateFormatLabel.text=Tarih format\u0131: +CreateTimeIntervalUI.defaultStartNumberText.text= +CreateTimeIntervalUI.defaultEndNumberText.text= +CreateTimeIntervalUI.defaultStartNumberLabel.text=Varsay\u0131lan ba\u015flama zaman\u0131: +CreateTimeIntervalUI.defaultEndNumberLabel.text=Varsay\u0131lan biti\u015f zaman\u0131: +CreateTimeIntervalUI.invalid.dateformat=Invalid date format +CreateTimeIntervalUI.invalid.number=Hatal\u0131 say\u0131 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_uk.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_uk.properties new file mode 100644 index 0000000000..e7c1d5ed5d --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_uk.properties @@ -0,0 +1,24 @@ +CreateTimeIntervalUI.dateDefaultStartLabel.text=\u0427\u0430\u0441 \u043F\u043E\u0447\u0430\u0442\u043A\u0443 \u0437\u0430 \u0443\u043C\u043E\u0432\u0447\u0430\u043D\u043D\u044F\u043C: +CreateTimeIntervalUI.header.description=\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044C \u0441\u0442\u043E\u0432\u043F\u0446\u0456 \u0434\u043B\u044F \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u0430\u043D\u043D\u044F \u044F\u043A \u0447\u0430\u0441 \u043F\u043E\u0447\u0430\u0442\u043A\u0443 \u0442\u0430/\u0430\u0431\u043E \u0437\u0430\u043A\u0456\u043D\u0447\u0435\u043D\u043D\u044F.
    \u0422\u0430\u043A\u043E\u0436 \u0432\u0438 \u043C\u043E\u0436\u0435\u0442\u0435 \u0432\u0438\u0431\u0440\u0430\u0442\u0438 \u0447\u0430\u0441 \u043F\u043E\u0447\u0430\u0442\u043A\u0443 \u0442\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u043D\u044F \u0437\u0430 \u0437\u0430\u043C\u043E\u0432\u0447\u0443\u0432\u0430\u043D\u043D\u044F\u043C \u0434\u043B\u044F \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u0430\u043D\u043D\u044F, \u044F\u043A\u0449\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u043D\u0435\u043F\u0440\u0430\u0432\u0438\u043B\u044C\u043D\u0456 \u0430\u0431\u043E \u0432\u0456\u0434\u0441\u0443\u0442\u043D\u0456, \u0456\u043D\u0430\u043A\u0448\u0435 \u0437\u0430\u043C\u0456\u0441\u0442\u044C \u0446\u044C\u043E\u0433\u043E \u0431\u0443\u0434\u0435 \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u0430\u043D\u043E \u043D\u0435\u0441\u043A\u0456\u043D\u0447\u0435\u043D\u043D\u0456\u0441\u0442\u044C. +CreateTimeIntervalUI.parseNumbersRadioButton.text=\u0420\u043E\u0437\u0431\u0435\u0440\u0456\u0442\u044C \u0447\u0438\u0441\u043B\u0430 +BooleanLogicOperationsUI.descriptionLabel.text=
    \u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044C \u043B\u043E\u0433\u0456\u0447\u043D\u0456 \u043E\u043F\u0435\u0440\u0430\u0446\u0456\u0457 \u043C\u0456\u0436 \u043A\u043E\u0436\u043D\u043E\u044E \u043F\u0430\u0440\u043E\u044E \u0441\u0442\u043E\u0432\u043F\u0446\u0456\u0432
    +BooleanLogicOperationsUI.titleLabel.text=\u041D\u043E\u0432\u0430 \u043D\u0430\u0437\u0432\u0430 \u0441\u0442\u043E\u0432\u043F\u0446\u044F: +JoinWithSeparatorUI.titleLabel.text=\u041D\u043E\u0432\u0430 \u043D\u0430\u0437\u0432\u0430 \u0441\u0442\u043E\u0432\u043F\u0446\u044F: +JoinWithSeparatorUI.separatorLabel.text=\u0420\u043E\u0437\u0434\u0456\u043B\u044C\u043D\u0438\u0439 \u0442\u0435\u043A\u0441\u0442: +JoinWithSeparatorUI.separatorText.text=\u0406 +BooleanLogicOperationsUI.titleTextField.text=\u0406 +JoinWithSeparatorUI.titleTextField.text=\u0406 +CreateTimeIntervalUI.startColumnLabel.text=\u041A\u043E\u043B\u043E\u043D\u043A\u0430 \u0447\u0430\u0441\u0443 \u043F\u043E\u0447\u0430\u0442\u043A\u0443: +CreateTimeIntervalUI.endColumnLabel.text=\u0421\u0442\u043E\u0432\u043F\u0435\u0446\u044C \u0447\u0430\u0441\u0443 \u0437\u0430\u043A\u0456\u043D\u0447\u0435\u043D\u043D\u044F: +CreateTimeIntervalUI.header.title=\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0438 \u0441\u0442\u0432\u043E\u0440\u0435\u043D\u043D\u044F \u0456\u043D\u0442\u0435\u0440\u0432\u0430\u043B\u0443 \u0447\u0430\u0441\u0443 +CreateTimeIntervalUI.dateDefaultEndLabel.text=\u0427\u0430\u0441 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u043D\u044F \u0437\u0430 \u0443\u043C\u043E\u0432\u0447\u0430\u043D\u043D\u044F\u043C: +CreateTimeIntervalUI.defaultStartNumberText.text=\u0406 +CreateTimeIntervalUI.defaultStartNumberLabel.text=\u0427\u0430\u0441 \u043F\u043E\u0447\u0430\u0442\u043A\u0443 \u0437\u0430 \u0443\u043C\u043E\u0432\u0447\u0430\u043D\u043D\u044F\u043C: +CreateTimeIntervalUI.defaultEndNumberLabel.text=\u0427\u0430\u0441 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u043D\u044F \u0437\u0430 \u0443\u043C\u043E\u0432\u0447\u0430\u043D\u043D\u044F\u043C: +CreateTimeIntervalUI.invalid.dateformat=\u041D\u0435\u0434\u0456\u0439\u0441\u043D\u0438\u0439 \u0444\u043E\u0440\u043C\u0430\u0442 \u0434\u0430\u0442\u0438 +CreateTimeIntervalUI.invalid.number=\u041D\u0435\u0432\u0456\u0440\u043D\u0438\u0439 \u043D\u043E\u043C\u0435\u0440 +GeneralColumnTitleChooserUI.titleLabel.text=\u041D\u043E\u0432\u0430 \u043D\u0430\u0437\u0432\u0430 \u0441\u0442\u043E\u0432\u043F\u0446\u044F: +CreateTimeIntervalUI.parseDatesRadioButton.text=\u0420\u043E\u0437\u0431\u0435\u0440\u0456\u0442\u044C \u0434\u0430\u0442\u0438 +CreateTimeIntervalUI.defaultEndNumberText.text=\u0406 +CreateTimeIntervalUI.dateFormatLabel.text=\u0424\u043E\u0440\u043C\u0430\u0442 \u0434\u0430\u0442\u0438: +GeneralColumnTitleChooserUI.titleTextField.text=\u0406 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_zh_CN.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_zh_CN.properties index e8abf6d9e9..a986559fe5 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_zh_CN.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_zh_CN.properties @@ -1,42 +1,24 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:16+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -BooleanLogicOperationsUI.descriptionLabel.text=
    \u9009\u62e9\u6bcf\u5217\u4e4b\u95f4\u7684\u903b\u8f91\u8fd0\u7b97
    - -BooleanLogicOperationsUI.titleLabel.text=\u65b0\u5217\u7684\u6807\u9898\uff1a - -JoinWithSeparatorUI.titleLabel.text=\u65b0\u5217\u7684\u6807\u9898\uff1a - -JoinWithSeparatorUI.separatorLabel.text=\u5206\u9694\u7b26\u7684\u6587\u672c\uff1a - -GeneralColumnTitleChooserUI.titleLabel.text=\u65b0\u5217\u7684\u6807\u9898\uff1a - -CreateTimeIntervalUI.startColumnLabel.text=\u542f\u52a8\u65f6\u95f4\u5217\uff1a - -CreateTimeIntervalUI.endColumnLabel.text=\u7ed3\u675f\u65f6\u95f4\u5217\uff1a - -CreateTimeIntervalUI.header.title=\u65f6\u95f4\u95f4\u9694\u521b\u5efa\u9009\u9879 - -CreateTimeIntervalUI.header.description=\u9009\u62e9\u5217\u4f7f\u7528\u4f5c\u4e3a\u542f\u52a8\u548c/\u6216\u7ed3\u675f\u65f6\u95f4\u3002
    \u60a8\u4e5f\u53ef\u4ee5\u9009\u62e9\u9ed8\u8ba4\u7684\u5f00\u59cb\u548c\u7ed3\u675f\u65f6\u95f4\u65f6\u4f7f\u7528\u7684\u503c\u4e0d\u6b63\u786e\u6216\u4e22\u5931\uff0c\u5426\u5219\u5c06\u88ab\u7528\u6765\u4ee3\u66ff\u65e0\u7a77\u3002 - -CreateTimeIntervalUI.parseDatesRadioButton.text=\u89e3\u6790\u65e5\u671f - -CreateTimeIntervalUI.parseNumbersRadioButton.text=\u89e3\u6790\u6570\u5b57 - -CreateTimeIntervalUI.dateDefaultStartLabel.text=\u9ed8\u8ba4\u7684\u5f00\u59cb\u65f6\u95f4\uff1a - -CreateTimeIntervalUI.dateDefaultEndLabel.text=\u9ed8\u8ba4\u7684\u7ed3\u675f\u65f6\u95f4\uff1a - -CreateTimeIntervalUI.dateFormatLabel.text=\u65e5\u671f\u683c\u5f0f\uff1a - -CreateTimeIntervalUI.defaultStartNumberLabel.text=\u9ed8\u8ba4\u7684\u5f00\u59cb\u65f6\u95f4\uff1a - -CreateTimeIntervalUI.defaultEndNumberLabel.text=\u9ed8\u8ba4\u7684\u7ed3\u675f\u65f6\u95f4\uff1a - -!CreateTimeIntervalUI.invalid.dateformat= - -!CreateTimeIntervalUI.invalid.number= +BooleanLogicOperationsUI.descriptionLabel.text=
    \u9009\u62e9\u6bcf\u5217\u4e4b\u95f4\u7684\u903b\u8f91\u8fd0\u7b97
    +BooleanLogicOperationsUI.titleLabel.text=\u65b0\u5217\u7684\u6807\u9898\uff1a +JoinWithSeparatorUI.titleLabel.text=\u65b0\u5217\u7684\u6807\u9898\uff1a +JoinWithSeparatorUI.separatorLabel.text=\u5206\u9694\u7b26\u7684\u6587\u672c\uff1a +JoinWithSeparatorUI.separatorText.text= +BooleanLogicOperationsUI.titleTextField.text= +JoinWithSeparatorUI.titleTextField.text= +GeneralColumnTitleChooserUI.titleLabel.text=\u65b0\u5217\u7684\u6807\u9898\uff1a +GeneralColumnTitleChooserUI.titleTextField.text= +CreateTimeIntervalUI.startColumnLabel.text=\u542f\u52a8\u65f6\u95f4\u5217\uff1a +CreateTimeIntervalUI.endColumnLabel.text=\u7ed3\u675f\u65f6\u95f4\u5217\uff1a +CreateTimeIntervalUI.header.title=\u65f6\u95f4\u95f4\u9694\u521b\u5efa\u9009\u9879 +CreateTimeIntervalUI.header.description=\u9009\u62e9\u5217\u4f7f\u7528\u4f5c\u4e3a\u542f\u52a8\u548c/\u6216\u7ed3\u675f\u65f6\u95f4\u3002
    \u60a8\u4e5f\u53ef\u4ee5\u9009\u62e9\u9ed8\u8ba4\u7684\u5f00\u59cb\u548c\u7ed3\u675f\u65f6\u95f4\u65f6\u4f7f\u7528\u7684\u503c\u4e0d\u6b63\u786e\u6216\u4e22\u5931\uff0c\u5426\u5219\u5c06\u88ab\u7528\u6765\u4ee3\u66ff\u65e0\u7a77\u3002 +CreateTimeIntervalUI.parseDatesRadioButton.text=\u89e3\u6790\u65e5\u671f +CreateTimeIntervalUI.parseNumbersRadioButton.text=\u89e3\u6790\u6570\u5b57 +CreateTimeIntervalUI.dateDefaultStartLabel.text=\u9ed8\u8ba4\u7684\u5f00\u59cb\u65f6\u95f4\uff1a +CreateTimeIntervalUI.dateDefaultEndLabel.text=\u9ed8\u8ba4\u7684\u7ed3\u675f\u65f6\u95f4\uff1a +CreateTimeIntervalUI.dateFormatLabel.text=\u65e5\u671f\u683c\u5f0f\uff1a +CreateTimeIntervalUI.defaultStartNumberText.text= +CreateTimeIntervalUI.defaultEndNumberText.text= +CreateTimeIntervalUI.defaultStartNumberLabel.text=\u9ed8\u8ba4\u7684\u5f00\u59cb\u65f6\u95f4\uff1a +CreateTimeIntervalUI.defaultEndNumberLabel.text=\u9ed8\u8ba4\u7684\u7ed3\u675f\u65f6\u95f4\uff1a +CreateTimeIntervalUI.invalid.dateformat=\u65e5\u671f\u683c\u5f0f\u65e0\u6548 +CreateTimeIntervalUI.invalid.number=\u65e0\u6548\u7684\u53f7\u7801 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_zh_TW.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_zh_TW.properties new file mode 100644 index 0000000000..2299a6a219 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/Bundle_zh_TW.properties @@ -0,0 +1,24 @@ +BooleanLogicOperationsUI.descriptionLabel.text=
    Choose the logical operations between each pair of columns
    +BooleanLogicOperationsUI.titleLabel.text=New column title: +JoinWithSeparatorUI.titleLabel.text=New column title: +JoinWithSeparatorUI.separatorLabel.text=Separator text: +JoinWithSeparatorUI.separatorText.text= +BooleanLogicOperationsUI.titleTextField.text= +JoinWithSeparatorUI.titleTextField.text= +GeneralColumnTitleChooserUI.titleLabel.text=New column title: +GeneralColumnTitleChooserUI.titleTextField.text= +CreateTimeIntervalUI.startColumnLabel.text=Start time column: +CreateTimeIntervalUI.endColumnLabel.text=End time column: +CreateTimeIntervalUI.header.title=Time Interval creation options +CreateTimeIntervalUI.header.description=Choose columns to use as start and/or end times.
    Also you can choose default start and end times to use when values are not correct or missing, else infinity will be used instead. +CreateTimeIntervalUI.parseDatesRadioButton.text=Parse dates +CreateTimeIntervalUI.parseNumbersRadioButton.text=Parse numbers +CreateTimeIntervalUI.dateDefaultStartLabel.text=Default start time: +CreateTimeIntervalUI.dateDefaultEndLabel.text=Default end time: +CreateTimeIntervalUI.dateFormatLabel.text=Date format: +CreateTimeIntervalUI.defaultStartNumberText.text= +CreateTimeIntervalUI.defaultEndNumberText.text= +CreateTimeIntervalUI.defaultStartNumberLabel.text=Default start time: +CreateTimeIntervalUI.defaultEndNumberLabel.text=Default end time: +CreateTimeIntervalUI.invalid.dateformat=Invalid date format +CreateTimeIntervalUI.invalid.number=Invalid number diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/cs.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/cs.po deleted file mode 100644 index 391c0ee03a..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/cs.po +++ /dev/null @@ -1,73 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:16+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "BooleanLogicOperationsUI.descriptionLabel.text" -msgstr "
    Zvolte logickΓ© operace mezi kaΕΎdΓ½m pΓ‘rem sloupcΕ―
    " - -msgid "BooleanLogicOperationsUI.titleLabel.text" -msgstr "NovΓ½ nΓ‘zev sloupce:" - -msgid "JoinWithSeparatorUI.titleLabel.text" -msgstr "NovΓ½ nΓ‘zev sloupce:" - -msgid "JoinWithSeparatorUI.separatorLabel.text" -msgstr "Text oddΔ›lovače" - -msgid "GeneralColumnTitleChooserUI.titleLabel.text" -msgstr "NovΓ½ nΓ‘zev sloupce:" - -msgid "CreateTimeIntervalUI.startColumnLabel.text" -msgstr "Čas času spuΕ‘tΔ›nΓ­:" - -msgid "CreateTimeIntervalUI.endColumnLabel.text" -msgstr "Sloupec času dokončenΓ­:" - -msgid "CreateTimeIntervalUI.header.title" -msgstr "MoΕΎnosti vytvoΕ™enΓ­ časovΓ©ho intervalu" - -msgid "CreateTimeIntervalUI.header.description" -msgstr "Zvolte sloupce, kterΓ© budou pouΕΎity jako časy spuΕ‘tΔ›nΓ­/dokončenΓ­.
    TakΓ© mΕ―ΕΎete zvolit vΓ½chozΓ­ pouΕΎitΓ© časy spuΕ‘tΔ›nΓ­ a dokončenΓ­ kdyΕΎ hodnoty nejsou sprΓ‘vnΔ› nebo chybΔ›jΓ­, jinak bude mΓ­sto toho pouΕΎito nekonečno." - -msgid "CreateTimeIntervalUI.parseDatesRadioButton.text" -msgstr "Zpracovat data" - -msgid "CreateTimeIntervalUI.parseNumbersRadioButton.text" -msgstr "Zpracovat čísla" - -msgid "CreateTimeIntervalUI.dateDefaultStartLabel.text" -msgstr "VΓ½chozΓ­ čas spuΕ‘tΔ›nΓ­:" - -msgid "CreateTimeIntervalUI.dateDefaultEndLabel.text" -msgstr "VΓ½chozΓ­ čas dokončenΓ­:" - -msgid "CreateTimeIntervalUI.dateFormatLabel.text" -msgstr "FormΓ‘t data:" - -msgid "CreateTimeIntervalUI.defaultStartNumberLabel.text" -msgstr "VΓ½chozΓ­ čas spuΕ‘tΔ›nΓ­:" - -msgid "CreateTimeIntervalUI.defaultEndNumberLabel.text" -msgstr "VΓ½chozΓ­ čas dokončenΓ­:" - -msgid "CreateTimeIntervalUI.invalid.dateformat" -msgstr "" - -msgid "CreateTimeIntervalUI.invalid.number" -msgstr "" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/es.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/es.po deleted file mode 100644 index b72c4a2bb4..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/es.po +++ /dev/null @@ -1,74 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:26+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "BooleanLogicOperationsUI.descriptionLabel.text" -msgstr "
    Elige las operaciones lΓ³gicas para utilizar entre cada par de columnas
    " - -msgid "BooleanLogicOperationsUI.titleLabel.text" -msgstr "TΓ­tulo de la nueva columna:" - -msgid "JoinWithSeparatorUI.titleLabel.text" -msgstr "TΓ­tulo de la nueva columna:" - -msgid "JoinWithSeparatorUI.separatorLabel.text" -msgstr "Texto separador:" - -msgid "GeneralColumnTitleChooserUI.titleLabel.text" -msgstr "TΓ­tulo de la nueva columna:" - -msgid "CreateTimeIntervalUI.startColumnLabel.text" -msgstr "Columna de tiempo inicial:" - -msgid "CreateTimeIntervalUI.endColumnLabel.text" -msgstr "Columna de tiempo final:" - -msgid "CreateTimeIntervalUI.header.title" -msgstr "Opciones de creaciΓ³n de intervalo temporal" - -msgid "CreateTimeIntervalUI.header.description" -msgstr "Escoge las columnas para utilizar como tiempos iniciales y/o tiempos finales.
    TambiΓ©n puedes escoger tiempos iniciales y finales por defecto para utilizar cuando los valores no son correctos o vacios, si no se usarΓ‘ infinito en su lugar." - -msgid "CreateTimeIntervalUI.parseDatesRadioButton.text" -msgstr "Analizar fechas" - -msgid "CreateTimeIntervalUI.parseNumbersRadioButton.text" -msgstr "Analizar nΓΊmeros" - -msgid "CreateTimeIntervalUI.dateDefaultStartLabel.text" -msgstr "Tiempo inicial por defecto:" - -msgid "CreateTimeIntervalUI.dateDefaultEndLabel.text" -msgstr "Tiempo final por defecto:" - -msgid "CreateTimeIntervalUI.dateFormatLabel.text" -msgstr "Formato de fechas:" - -msgid "CreateTimeIntervalUI.defaultStartNumberLabel.text" -msgstr "Tiempo inicial por defecto:" - -msgid "CreateTimeIntervalUI.defaultEndNumberLabel.text" -msgstr "Tiempo final por defecto:" - -msgid "CreateTimeIntervalUI.invalid.dateformat" -msgstr "Forma de fecha invΓ‘lido" - -msgid "CreateTimeIntervalUI.invalid.number" -msgstr "NΓΊmero invΓ‘lido" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/fr.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/fr.po deleted file mode 100644 index 02cd695ee4..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/fr.po +++ /dev/null @@ -1,73 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:16+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "BooleanLogicOperationsUI.descriptionLabel.text" -msgstr "
    OpΓ©ration logique entre chaque pair de colonnes
    " - -msgid "BooleanLogicOperationsUI.titleLabel.text" -msgstr "Titre de la nouvelle colonne :" - -msgid "JoinWithSeparatorUI.titleLabel.text" -msgstr "Titre de la nouvelle colonne :" - -msgid "JoinWithSeparatorUI.separatorLabel.text" -msgstr "SΓ©parateur :" - -msgid "GeneralColumnTitleChooserUI.titleLabel.text" -msgstr "Titre de la nouvelle colonne :" - -msgid "CreateTimeIntervalUI.startColumnLabel.text" -msgstr "Temps de dΓ©but :" - -msgid "CreateTimeIntervalUI.endColumnLabel.text" -msgstr "Temps de fin :" - -msgid "CreateTimeIntervalUI.header.title" -msgstr "Options du nouvel intervalle temporel" - -msgid "CreateTimeIntervalUI.header.description" -msgstr "Colonnes de temps de dΓ©but et de fin.
    Choisissez des valeurs par dΓ©faut pour les valeurs manquantes ou incorrectes, ou l'infini sera utilisΓ©." - -msgid "CreateTimeIntervalUI.parseDatesRadioButton.text" -msgstr "Extraire les dates" - -msgid "CreateTimeIntervalUI.parseNumbersRadioButton.text" -msgstr "Extraire les nombres" - -msgid "CreateTimeIntervalUI.dateDefaultStartLabel.text" -msgstr "DΓ©faut par dΓ©faut :" - -msgid "CreateTimeIntervalUI.dateDefaultEndLabel.text" -msgstr "Fin par dΓ©faut :" - -msgid "CreateTimeIntervalUI.dateFormatLabel.text" -msgstr "Format temporel :" - -msgid "CreateTimeIntervalUI.defaultStartNumberLabel.text" -msgstr "DΓ©but par dΓ©faut :" - -msgid "CreateTimeIntervalUI.defaultEndNumberLabel.text" -msgstr "Fin par dΓ©faut :" - -msgid "CreateTimeIntervalUI.invalid.dateformat" -msgstr "" - -msgid "CreateTimeIntervalUI.invalid.number" -msgstr "" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/ja.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/ja.po deleted file mode 100644 index e440f588e1..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/ja.po +++ /dev/null @@ -1,73 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:16+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "BooleanLogicOperationsUI.descriptionLabel.text" -msgstr "
    εˆ—γε„η΅„ι–“γθ«–理演η—γ‚’ιΈζŠžγ—γ¦γγ γ•γ„
    " - -msgid "BooleanLogicOperationsUI.titleLabel.text" -msgstr "ζ–°θ¦εˆ—γ‚Ώγ‚€γƒˆγƒ«:" - -msgid "JoinWithSeparatorUI.titleLabel.text" -msgstr "ζ–°θ¦εˆ—γ‚Ώγ‚€γƒˆγƒ«:" - -msgid "JoinWithSeparatorUI.separatorLabel.text" -msgstr "γ‚»γƒ‘γƒ¬γƒΌγ‚Ώγƒ»γƒ†γ‚­γ‚Ήγƒˆ:" - -msgid "GeneralColumnTitleChooserUI.titleLabel.text" -msgstr "ζ–°θ¦εˆ—γ‚Ώγ‚€γƒˆγƒ«:" - -msgid "CreateTimeIntervalUI.startColumnLabel.text" -msgstr "ι–‹ε§‹ζ™‚ι–“εˆ—:" - -msgid "CreateTimeIntervalUI.endColumnLabel.text" -msgstr "η΅‚δΊ†ζ™‚ι–“εˆ—:" - -msgid "CreateTimeIntervalUI.header.title" -msgstr "ζ™‚ι–“ι–“ιš”δ½œζˆγ‚ͺプション" - -msgid "CreateTimeIntervalUI.header.description" -msgstr "ι–‹ε§‹γŠγ‚ˆγ³/γΎγŸγ―η΅‚δΊ†ζ™‚εˆ»γ¨γ—γ¦δ½Ώβ€‹β€‹η”¨γ™γ‚‹εˆ—γ‚’ιΈζŠžγ—γΎγ™γ€‚
    ε€€γŒζ­£γ—γγͺγ„γ‹ζ¬ θ½γ—γ¦γ„γ‚‹γ¨γγ«δ½Ώη”¨γ™γ‚‹γƒ‡γƒ•γ‚©γƒ«γƒˆγι–‹ε§‹ζ™‚εˆ»γ¨η΅‚δΊ†ζ™‚εˆ»γ‚’ιΈζŠžγ™γ‚‹γ“γ¨γŒγ§γγΎγ™γŒγ€γγ†γ§γͺγ‘γ‚Œγ°ζ°Έι γ§δ»£η”¨γ•γ‚ŒγΎγ™γ€‚" - -msgid "CreateTimeIntervalUI.parseDatesRadioButton.text" -msgstr "ζ—₯付γθ§£ζž" - -msgid "CreateTimeIntervalUI.parseNumbersRadioButton.text" -msgstr "ζ•°γθ§£ζž" - -msgid "CreateTimeIntervalUI.dateDefaultStartLabel.text" -msgstr "γƒ‡γƒ•γ‚©γƒ«γƒˆγι–‹ε§‹ζ™‚εˆ»:" - -msgid "CreateTimeIntervalUI.dateDefaultEndLabel.text" -msgstr "γƒ‡γƒ•γ‚©γƒ«γƒˆγη΅‚δΊ†ζ™‚ι–“:" - -msgid "CreateTimeIntervalUI.dateFormatLabel.text" -msgstr "ζ—₯付γγƒ•γ‚©γƒΌγƒžγƒƒγƒˆ:" - -msgid "CreateTimeIntervalUI.defaultStartNumberLabel.text" -msgstr "γƒ‡γƒ•γ‚©γƒ«γƒˆγι–‹ε§‹ζ™‚εˆ»:" - -msgid "CreateTimeIntervalUI.defaultEndNumberLabel.text" -msgstr "γƒ‡γƒ•γ‚©γƒ«γƒˆγη΅‚δΊ†ζ™‚ι–“:" - -msgid "CreateTimeIntervalUI.invalid.dateformat" -msgstr "" - -msgid "CreateTimeIntervalUI.invalid.number" -msgstr "" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/org-gephi-datalab-plugin-manipulators-columns-merge-ui.pot b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/org-gephi-datalab-plugin-manipulators-columns-merge-ui.pot deleted file mode 100644 index e5de2aea8d..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/org-gephi-datalab-plugin-manipulators-columns-merge-ui.pot +++ /dev/null @@ -1,75 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "BooleanLogicOperationsUI.descriptionLabel.text" -msgstr "" -"
    Choose the logical operations between each pair of columns" - -msgid "BooleanLogicOperationsUI.titleLabel.text" -msgstr "New column title:" - -msgid "JoinWithSeparatorUI.titleLabel.text" -msgstr "New column title:" - -msgid "JoinWithSeparatorUI.separatorLabel.text" -msgstr "Separator text:" - -msgid "GeneralColumnTitleChooserUI.titleLabel.text" -msgstr "New column title:" - -msgid "CreateTimeIntervalUI.startColumnLabel.text" -msgstr "Start time column:" - -msgid "CreateTimeIntervalUI.endColumnLabel.text" -msgstr "End time column:" - -msgid "CreateTimeIntervalUI.header.title" -msgstr "Time Interval creation options" - -msgid "CreateTimeIntervalUI.header.description" -msgstr "" -"Choose columns to use as start and/or end times.
    Also you can " -"choose default start and end times to use when values are not correct or " -"missing, else infinity will be used instead." - -msgid "CreateTimeIntervalUI.parseDatesRadioButton.text" -msgstr "Parse dates" - -msgid "CreateTimeIntervalUI.parseNumbersRadioButton.text" -msgstr "Parse numbers" - -msgid "CreateTimeIntervalUI.dateDefaultStartLabel.text" -msgstr "Default start time:" - -msgid "CreateTimeIntervalUI.dateDefaultEndLabel.text" -msgstr "Default end time:" - -msgid "CreateTimeIntervalUI.dateFormatLabel.text" -msgstr "Date format:" - -msgid "CreateTimeIntervalUI.defaultStartNumberLabel.text" -msgstr "Default start time:" - -msgid "CreateTimeIntervalUI.defaultEndNumberLabel.text" -msgstr "Default end time:" - -msgid "CreateTimeIntervalUI.invalid.dateformat" -msgstr "Invalid date format" - -msgid "CreateTimeIntervalUI.invalid.number" -msgstr "Invalid number" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/pt_BR.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/pt_BR.po deleted file mode 100644 index 77a9a3ab3c..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/pt_BR.po +++ /dev/null @@ -1,73 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:16+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "BooleanLogicOperationsUI.descriptionLabel.text" -msgstr "
    Escolha as operaΓ§Γ΅es lΓ³gicas entre cada par de colunas
    " - -msgid "BooleanLogicOperationsUI.titleLabel.text" -msgstr "TΓ­tulo da nova coluna:" - -msgid "JoinWithSeparatorUI.titleLabel.text" -msgstr "TΓ­tulo da nova coluna:" - -msgid "JoinWithSeparatorUI.separatorLabel.text" -msgstr "Texto separador:" - -msgid "GeneralColumnTitleChooserUI.titleLabel.text" -msgstr "TΓ­tulo da nova coluna:" - -msgid "CreateTimeIntervalUI.startColumnLabel.text" -msgstr "Coluna de tempo inicial:" - -msgid "CreateTimeIntervalUI.endColumnLabel.text" -msgstr "Coluna de tempo final:" - -msgid "CreateTimeIntervalUI.header.title" -msgstr "OpΓ§Γ΅es de criaΓ§Γ£o de Intervalo de Tempo" - -msgid "CreateTimeIntervalUI.header.description" -msgstr "Escolha as columas para utilizar como tempos iniciais e/ou finais.
    VocΓͺ tambΓ©m pode escolher tempos iniciais e finais padrΓ£o para utilizar quando os valores sejam vazios ou nΓ£o sejam fornecidos. Caso os valores padrΓ£o nΓ£o sejam fornecidos, serΓ‘ usado \"infinito\"." - -msgid "CreateTimeIntervalUI.parseDatesRadioButton.text" -msgstr "Analisar datas" - -msgid "CreateTimeIntervalUI.parseNumbersRadioButton.text" -msgstr "Analisar nΓΊmeros" - -msgid "CreateTimeIntervalUI.dateDefaultStartLabel.text" -msgstr "Tempo inicial padrΓ£o:" - -msgid "CreateTimeIntervalUI.dateDefaultEndLabel.text" -msgstr "Tempo final padrΓ£o:" - -msgid "CreateTimeIntervalUI.dateFormatLabel.text" -msgstr "Formato de data:" - -msgid "CreateTimeIntervalUI.defaultStartNumberLabel.text" -msgstr "Tempo inicial padrΓ£o:" - -msgid "CreateTimeIntervalUI.defaultEndNumberLabel.text" -msgstr "Tempo final padrΓ£o:" - -msgid "CreateTimeIntervalUI.invalid.dateformat" -msgstr "" - -msgid "CreateTimeIntervalUI.invalid.number" -msgstr "" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/ru.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/ru.po deleted file mode 100644 index c30ce63249..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/ru.po +++ /dev/null @@ -1,73 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:16+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "BooleanLogicOperationsUI.descriptionLabel.text" -msgstr "
    Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ логичСскиС ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ для примСнСния ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠ°Ρ€Π΅ столбцов
    " - -msgid "BooleanLogicOperationsUI.titleLabel.text" -msgstr "Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π½ΠΎΠ²ΠΎΠ³ΠΎ столбца:" - -msgid "JoinWithSeparatorUI.titleLabel.text" -msgstr "Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π½ΠΎΠ²ΠΎΠ³ΠΎ столбца:" - -msgid "JoinWithSeparatorUI.separatorLabel.text" -msgstr "Π Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ:" - -msgid "GeneralColumnTitleChooserUI.titleLabel.text" -msgstr "Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ Π½ΠΎΠ²ΠΎΠ³ΠΎ столбца:" - -msgid "CreateTimeIntervalUI.startColumnLabel.text" -msgstr "Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ† с Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ:" - -msgid "CreateTimeIntervalUI.endColumnLabel.text" -msgstr "Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ† с Ρ„ΠΈΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌ Π²Ρ€Π΅ΠΌΠ΅Π½Π΅ΠΌ:" - -msgid "CreateTimeIntervalUI.header.title" -msgstr "ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ создания ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ" - -msgid "CreateTimeIntervalUI.header.description" -msgstr "Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ столбцы, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ содСрТат Π²Ρ€Π΅ΠΌΠ΅Π½Π° Π½Π°Ρ‡Π°Π»Π° ΠΈ/ΠΈΠ»ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»ΠΎΠ².
    ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π’Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Π² случаях, ΠΊΠΎΠ³Π΄Π° значСния Π² столбцах Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ ΠΈΠ»ΠΈ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚, ΠΈΠ½Π°Ρ‡Π΅ Π² этих случаях Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Π±Π΅ΡΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΡΡ‚ΡŒ." - -msgid "CreateTimeIntervalUI.parseDatesRadioButton.text" -msgstr "Π Π°Π·Π±ΠΎΡ€ Π΄Π°Ρ‚Ρ‹" - -msgid "CreateTimeIntervalUI.parseNumbersRadioButton.text" -msgstr "Π Π°Π·Π±ΠΎΡ€ чисСл" - -msgid "CreateTimeIntervalUI.dateDefaultStartLabel.text" -msgstr "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π°Ρ‡Π°Π»Π°:" - -msgid "CreateTimeIntervalUI.dateDefaultEndLabel.text" -msgstr "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ:" - -msgid "CreateTimeIntervalUI.dateFormatLabel.text" -msgstr "Π€ΠΎΡ€ΠΌΠ°Ρ‚ Π΄Π°Ρ‚Ρ‹:" - -msgid "CreateTimeIntervalUI.defaultStartNumberLabel.text" -msgstr "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π½Π°Ρ‡Π°Π»Π°:" - -msgid "CreateTimeIntervalUI.defaultEndNumberLabel.text" -msgstr "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ для Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ:" - -msgid "CreateTimeIntervalUI.invalid.dateformat" -msgstr "" - -msgid "CreateTimeIntervalUI.invalid.number" -msgstr "" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/zh_CN.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/zh_CN.po deleted file mode 100644 index 6638bf6214..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/ui/zh_CN.po +++ /dev/null @@ -1,72 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:16+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "BooleanLogicOperationsUI.descriptionLabel.text" -msgstr "
    ι€‰ζ‹©ζ―εˆ—δΉ‹ι—΄ηš„ι€»θΎ‘θΏη—
    " - -msgid "BooleanLogicOperationsUI.titleLabel.text" -msgstr "ζ–°εˆ—ηš„ζ ‡ι’˜οΌš" - -msgid "JoinWithSeparatorUI.titleLabel.text" -msgstr "ζ–°εˆ—ηš„ζ ‡ι’˜οΌš" - -msgid "JoinWithSeparatorUI.separatorLabel.text" -msgstr "εˆ†ιš”η¬¦ηš„ζ–‡ζœ¬οΌš" - -msgid "GeneralColumnTitleChooserUI.titleLabel.text" -msgstr "ζ–°εˆ—ηš„ζ ‡ι’˜οΌš" - -msgid "CreateTimeIntervalUI.startColumnLabel.text" -msgstr "ε―εŠ¨ζ—Άι—΄εˆ—οΌš" - -msgid "CreateTimeIntervalUI.endColumnLabel.text" -msgstr "η»“ζŸζ—Άι—΄εˆ—οΌš" - -msgid "CreateTimeIntervalUI.header.title" -msgstr "ζ—Άι—΄ι—΄ιš”εˆ›ε»Ίι€‰ι‘Ή" - -msgid "CreateTimeIntervalUI.header.description" -msgstr "ι€‰ζ‹©εˆ—δ½Ώη”¨δ½œδΈΊε―εŠ¨ε’Œ/ζˆ–η»“ζŸζ—Άι—΄γ€‚
    ζ‚¨δΉŸε―δ»₯ι€‰ζ‹©ι»˜θ€ηš„εΌ€ε§‹ε’Œη»“ζŸζ—Άι—΄ζ—Άδ½Ώη”¨ηš„ε€ΌδΈζ­£η‘ζˆ–δΈ’ε€±οΌŒε¦εˆ™ε°†θ’«η”¨ζ₯代替无穷。 " - -msgid "CreateTimeIntervalUI.parseDatesRadioButton.text" -msgstr "解析ζ—₯期" - -msgid "CreateTimeIntervalUI.parseNumbersRadioButton.text" -msgstr "θ§£ζžζ•°ε­—" - -msgid "CreateTimeIntervalUI.dateDefaultStartLabel.text" -msgstr "默θ€ηš„εΌ€ε§‹ζ—Άι—΄οΌš" - -msgid "CreateTimeIntervalUI.dateDefaultEndLabel.text" -msgstr "默θ€ηš„η»“ζŸζ—Άι—΄οΌš" - -msgid "CreateTimeIntervalUI.dateFormatLabel.text" -msgstr "ζ—₯期格式:" - -msgid "CreateTimeIntervalUI.defaultStartNumberLabel.text" -msgstr "默θ€ηš„εΌ€ε§‹ζ—Άι—΄οΌš" - -msgid "CreateTimeIntervalUI.defaultEndNumberLabel.text" -msgstr "默θ€ηš„η»“ζŸζ—Άι—΄οΌš" - -msgid "CreateTimeIntervalUI.invalid.dateformat" -msgstr "" - -msgid "CreateTimeIntervalUI.invalid.number" -msgstr "" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/zh_CN.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/zh_CN.po deleted file mode 100644 index 90d3c77453..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/merge/zh_CN.po +++ /dev/null @@ -1,90 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:19+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "JoinWithSeparator.name" -msgstr "加ε…₯ζ•°ε€ΌοΌŒεˆ†ιš”η¬¦ιš”εΌ€" - -msgid "JoinWithSeparator.description" -msgstr "用一δΈͺε―ι€‰ηš„εˆ†ιš”η¬¦εŠ ε…₯δ»»δ½•η±»εž‹ηš„εˆ—ηš„ε€Όγ€‚ζ–°εˆ—η±»εž‹δΈΊε­—η¬¦δΈ²γ€‚" - -msgid "JoinNumberColumns.name" -msgstr "加ε…₯ζ•°ε€Όεˆ—" - -msgid "JoinNumberColumns.description" -msgstr "加ε…₯εˆ°δΈ€δΈͺεŒη±»εž‹LIST_BIGDECIMALηš„ζ–°εˆ—ηΌ–ε·/εˆ—θ‘¨δΈ­ηš„εˆ—ηš„ε€Όγ€‚" - -msgid "CreateTimeInterval.name" -msgstr "εˆ›ε»Ίζ—Άι—΄ι—΄ιš”" - -msgid "CreateTimeInterval.description" -msgstr "δΈΊ1ζˆ–2εˆ—ηš„ζ―δΈ€θ‘Œεˆ›ε»Ίζ—Άι—΄ι—΄ιš”δΈΊεΌ€ε§‹/η»“ζŸζ—Άι—΄γ€‚" - -msgid "AverageNumber.name" -msgstr "θ‘η—平均值" - -msgid "AverageNumber.description" -msgstr "θ‘η—εΉ³ε‡ε€Όηš„ζ•°ε€Όεˆ—οΌˆζ•°ε­—ζˆ–ζ•°ε­—εˆ—θ‘¨οΌ‰γ€‚η”¨ζ­€η»“ζžœεˆ›ε»ΊδΈ€δΈͺζ–°εˆ—οΌˆBigDecimal)。" - -msgid "FirstQuartileNumber.name" -msgstr "θ‘η—η¬¬δΈ€ε››εˆ†δ½ζ•°οΌˆQ1οΌ‰" - -msgid "FirstQuartileNumber.description" -msgstr "θ‘η—η¬¬δΈ€ε››εˆ†δ½ζ•°οΌˆQ1οΌ‰ε€Όηš„ζ•°ε€Όεˆ—οΌˆζ•°ε­—ζˆ–ζ•°ε­—εˆ—θ‘¨οΌ‰γ€‚η”¨ζ­€η»“ζžœεˆ›ε»ΊδΈ€δΈͺζ–°εˆ—οΌˆBigDecimal)。" - -msgid "MedianNumber.name" -msgstr "θ‘η—δΈ­ι—΄ε€Ό" - -msgid "MedianNumber.description" -msgstr "δΈ­ε€Όθ‘η—ηš„ζ•°ε€Όεˆ—οΌˆζ•°ε­—ζˆ–ζ•°ε­—εˆ—θ‘¨οΌ‰γ€‚δ»₯ζ­€η»“ζžœεˆ›ε»ΊδΈ€δΈͺζ–°εˆ—οΌˆBigDecimal)。" - -msgid "ThirdQuartileNumber.name" -msgstr "θ‘η—η¬¬δΈ‰ε››εˆ†δ½ζ•°οΌˆQ3οΌ‰" - -msgid "ThirdQuartileNumber.description" -msgstr "θ‘η—ζ•°ε€Όεˆ—οΌˆζ•°ε­—ζˆ–ζ•°ε­—εˆ—θ‘¨οΌ‰η¬¬δΈ‰ε››εˆ†δ½ζ•°οΌˆQ3οΌ‰ηš„δ»·ε€Όγ€‚δ»₯ζ­€η»“ζžœεˆ›ε»ΊδΈ€δΈͺζ–°εˆ—οΌˆBigDecimal)。" - -msgid "InterQuartileRangeNumber.name" -msgstr "θ‘η—ε››εˆ†δ½θ·οΌˆIQRοΌ‰" - -msgid "InterQuartileRangeNumber.description" -msgstr "θ‘η—ζ•°ε€Όεˆ—οΌˆζ•°ε­—ζˆ–ζ•°ε­—εˆ—θ‘¨οΌ‰ηš„ε››εˆ†δ½θ·οΌˆIQR)值。δ»₯ζ­€η»“ζžœεˆ›ε»ΊδΈ€δΈͺζ–°εˆ—οΌˆBigDecimal)。" - -msgid "SumNumbers.name" -msgstr "ζ•°ε€Όζ€»ε’Œ" - -msgid "SumNumbers.description" -msgstr "θ‘η—ηš„ζ•°ε€Όεˆ—οΌˆζ•°ε­—ζˆ–ζ•°ε­—εˆ—θ‘¨οΌ‰ηš„ζ€»ε’Œγ€‚δ»₯ζ­€η»“ζžœεˆ›ε»ΊδΈ€δΈͺζ–°εˆ—οΌˆBigDecimal)。" - -msgid "MinimumNumber.name" -msgstr "θ‘η—ζœ€ε°ε€Ό" - -msgid "MinimumNumber.description" -msgstr "θ‘η—ηš„ζ•°ε€Όεˆ—οΌˆζ•°ε­—ζˆ–ζ•°ε­—εˆ—θ‘¨οΌ‰ηš„ζœ€δ½Žε€Όγ€‚δ»₯ζ­€η»“ζžœεˆ›ε»ΊδΈ€δΈͺζ–°εˆ—οΌˆBigDecimal)。" - -msgid "MaximumNumber.name" -msgstr "θ‘η—ζœ€ε€§ε€Ό" - -msgid "MaximumNumber.description" -msgstr "θ‘η—ηš„ζ•°ε€Όεˆ—οΌˆζ•°ε­—ζˆ–ζ•°ε­—εˆ—θ‘¨οΌ‰ηš„ζœ€ε€§ε€Όγ€‚δ»₯ζ­€η»“ζžœεˆ›ε»ΊδΈ€δΈͺζ–°εˆ—οΌˆBigDecimal)。" - -msgid "BooleanLogicOperations.name" -msgstr "εˆεΉΆεΈƒε°”εˆ—" - -msgid "BooleanLogicOperations.description" -msgstr "εˆεΉΆεΈƒε°”εˆ—οΌŒεœ¨ι€‰εšηš„δ»₯εˆ›ε»ΊδΈ€δΈͺζ–°ηš„εˆ—ηš„ι€‰ζ‹©εΊ”η”¨δΊŽζ―εˆ—δΉ‹ι—΄ηš„ι€»θΎ‘θΏη—。 null值用为假。" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/org-gephi-datalab-plugin-manipulators-columns.pot b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/org-gephi-datalab-plugin-manipulators-columns.pot deleted file mode 100644 index b10933012c..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/org-gephi-datalab-plugin-manipulators-columns.pot +++ /dev/null @@ -1,87 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "DeleteColumn.name" -msgstr "Delete column" - -msgid "DeleteColumn.confirmation.message" -msgstr "Confirm to delete ''{0}''?" - -msgid "ClearColumnData.name" -msgstr "Clear column" - -msgid "ClearColumnData.confirmation.message" -msgstr "Confirm to clear ''{0}''?" - -msgid "CopyDataToOtherColumn.name" -msgstr "Copy data to other column" - -msgid "FillColumnWithValue.name" -msgstr "Fill column with a value" - -msgid "FillColumnWithValue.inputDialog.text" -msgstr "Choose a value to fill all rows:" - -msgid "DuplicateColumn.name" -msgstr "Duplicate column" - -msgid "ColumnValuesFrequency.name" -msgstr "Calculate values frequency" - -msgid "ColumnValuesFrequency.description" -msgstr "Calculate the frequency of each value appearance." - -msgid "ColumnValuesFrequency.report.header" -msgstr "

    Values frequencies report ''{0}''

    " - -msgid "ColumnValuesFrequency.report.piechart.title" -msgstr "Values frequencies pie chart" - -msgid "ColumnValuesFrequency.report.piechart.not-shown" -msgstr "There are more than 100 different values, pie chart is not shown." - -msgid "NumberColumnStatisticsReport.name" -msgstr "Calculate statistics" - -msgid "NumberColumnStatisticsReport.description" -msgstr "Calculate statistics on a number or number list column." - -msgid "CreateBooleanMatchesColumn.name" -msgstr "Create a boolean column from regex match" - -msgid "CreateBooleanMatchesColumn.description" -msgstr "" -"Create a boolean column with values indicating if each of the selected " -"values matches the regular expression." - -msgid "CreateFoundGroupsListColumn.name" -msgstr "Create column with list of regex matching groups" - -msgid "CreateFoundGroupsListColumn.description" -msgstr "" -"Create a string list column in which values are the matching groups results " -"of the regular expression." - -msgid "NegateBooleanColumn.name" -msgstr "Negate boolean values" - -msgid "ConvertColumnToDynamic.name" -msgstr "Convert column to dynamic" - -msgid "ConvertColumnToDynamic.description" -msgstr "" -"Convert an existing column to a dynamic column and optionally replace it" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/pt_BR.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/pt_BR.po deleted file mode 100644 index 5026bf2579..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/pt_BR.po +++ /dev/null @@ -1,85 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:16+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "DeleteColumn.name" -msgstr "Excluir coluna" - -msgid "DeleteColumn.confirmation.message" -msgstr "Confirma a exclusΓ£o de ''{0}''?" - -msgid "ClearColumnData.name" -msgstr "Limpar dados da coluna" - -msgid "ClearColumnData.confirmation.message" -msgstr "Confirma a limpeza dos dados da coluna ''{0}''?" - -msgid "CopyDataToOtherColumn.name" -msgstr "Copiar dados para outra coluna" - -msgid "FillColumnWithValue.name" -msgstr "Preencher coluna com um valor" - -msgid "FillColumnWithValue.inputDialog.text" -msgstr "Escolha um valor para preencher todas as linhas:" - -msgid "DuplicateColumn.name" -msgstr "Duplicar coluna" - -msgid "ColumnValuesFrequency.name" -msgstr "Calcular a frequΓͺncia de valores de coluna" - -msgid "ColumnValuesFrequency.description" -msgstr "Calcula a frequΓͺncia de ocorrΓͺncia de cada valor de uma coluna e exibe um relatΓ³rio" - -msgid "ColumnValuesFrequency.report.header" -msgstr "

    RelatΓ³rio de frequΓͺncias de valores para a coluna ''{0}''

    " - -msgid "ColumnValuesFrequency.report.piechart.title" -msgstr "GrΓ‘fico de pizza de frequΓͺncias de valores" - -msgid "ColumnValuesFrequency.report.piechart.not-shown" -msgstr "Existem mais de 100 diferentes valores, o grΓ‘fico de pizza nΓ£o serΓ‘ exibido." - -msgid "NumberColumnStatisticsReport.name" -msgstr "Calcular estatΓ­sticas" - -msgid "NumberColumnStatisticsReport.description" -msgstr "Calcula estatΓ­sticas de una coluna numΓ©rica ou de lista de nΓΊmeros e mostra um relatΓ³rio" - -msgid "CreateBooleanMatchesColumn.name" -msgstr "Criar coluna booleana a partir de uma expressΓ£o regular" - -msgid "CreateBooleanMatchesColumn.description" -msgstr "Cria uma nova coluna booleana com valores que indicam se cada valor da coluna selecionada atende Γ  expressΓ£o regular fornecida" - -msgid "CreateFoundGroupsListColumn.name" -msgstr "Criar coluna com a lista de grupos que atendem a uma expressΓ£o regular" - -msgid "CreateFoundGroupsListColumn.description" -msgstr "Cria uma nova columna de tipo lista de strings com valores preenchidos com a lista de grupos que atendem Γ  expressΓ£o regular fornecida" - -msgid "NegateBooleanColumn.name" -msgstr "Negar coluna booleana" - -msgid "ConvertColumnToDynamic.name" -msgstr "" - -msgid "ConvertColumnToDynamic.description" -msgstr "" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ru.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ru.po deleted file mode 100644 index 3868808769..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ru.po +++ /dev/null @@ -1,85 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:16+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "DeleteColumn.name" -msgstr "Π£Π΄Π°Π»ΠΈΡ‚ΡŒ столбСц" - -msgid "DeleteColumn.confirmation.message" -msgstr "Π’Ρ‹ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ столбСц ''{0}''?" - -msgid "ClearColumnData.name" -msgstr "ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ значСния Π² столбцС" - -msgid "ClearColumnData.confirmation.message" -msgstr "Π’Ρ‹ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ значСния Π² столбцС ''{0}''?" - -msgid "CopyDataToOtherColumn.name" -msgstr "Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ значСния Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ столбСц" - -msgid "FillColumnWithValue.name" -msgstr "Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ столбСц Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ" - -msgid "FillColumnWithValue.inputDialog.text" -msgstr "Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ всС ячСйки Π² столбцС" - -msgid "DuplicateColumn.name" -msgstr "Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ копию ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ" - -msgid "ColumnValuesFrequency.name" -msgstr "Π Π°ΡΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ частоты Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² столбцС" - -msgid "ColumnValuesFrequency.description" -msgstr "РассчитываСт частоту появлСния ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ значСния Π² столбцС ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΎΡ‚Ρ‡Ρ‘Ρ‚" - -msgid "ColumnValuesFrequency.report.header" -msgstr "

    ΠžΡ‚Ρ‡Ρ‘Ρ‚ ΠΏΠΎ частотам Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² столбцС ''{0}''

    " - -msgid "ColumnValuesFrequency.report.piechart.title" -msgstr "ΠšΡ€ΡƒΠ³ΠΎΠ²Π°Ρ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° частот Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ" - -msgid "ColumnValuesFrequency.report.piechart.not-shown" -msgstr "Π’.ΠΊ. ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ 100 Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, круговая Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° Π½Π΅ Π±Ρ‹Π»Π° построСна." - -msgid "NumberColumnStatisticsReport.name" -msgstr "Расчёт статистики ΠΏΠΎ столбцу с числовыми значСниями" - -msgid "NumberColumnStatisticsReport.description" -msgstr "РассчитываСт статистику Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΏΠΎ столбцу с числами ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ ΠΎΡ‚Ρ‡Ρ‘Ρ‚" - -msgid "CreateBooleanMatchesColumn.name" -msgstr "Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ столбца с логичСскими значСниями с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ рСгулярного выраТСния" - -msgid "CreateBooleanMatchesColumn.description" -msgstr "Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ столбСц с логичСскими значСниями, ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ провСряя, ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‚ Π»ΠΈ значСния Π² Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ рСгулярному Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ" - -msgid "CreateFoundGroupsListColumn.name" -msgstr "Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ столбца с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ поиска ΠΏΠΎ маскС, Π·Π°Π΄Π°Π½Π½ΠΎΠΉ рСгулярным Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ" - -msgid "CreateFoundGroupsListColumn.description" -msgstr "Π‘ΠΎΠ·Π΄Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹ΠΉ столбСц со значСниями Π³Ρ€ΡƒΠΏΠΏ, Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹Ρ… рСгулярным Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ" - -msgid "NegateBooleanColumn.name" -msgstr "Π˜Π½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ столбца с логичСскими значСниями" - -msgid "ConvertColumnToDynamic.name" -msgstr "" - -msgid "ConvertColumnToDynamic.description" -msgstr "" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle.properties index 6bc031f74f..3da7ff11be 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle.properties @@ -25,12 +25,17 @@ NumberColumnStatisticsReportUI.divisionsLabel.text=Divisions: ConvertColumnToDynamicUI.descriptionLabel.text=Convert column ''{0}'' to a dynamic column ConvertColumnToDynamicUI.new.title={0}_dynamic -ConvertColumnToDynamicUI.titleLabel.text=Title: -ConvertColumnToDynamicUI.titleTextField.text= + ConvertColumnToDynamicUI.intervalOpenCheckbox.text=Open ConvertColumnToDynamicUI.intervalStartLabel.text=Interval start: -ConvertColumnToDynamicUI.intervalStartText.text=-Infinity -ConvertColumnToDynamicUI.intervalEndLabel.text=Interval end: -ConvertColumnToDynamicUI.intervalEndText.text=Infinity -ConvertColumnToDynamicUI.replaceColumnCheckbox.text=Replace column ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText=Replace original column with dynamic column instead of creating a new one +ConvertColumnToDynamicUI.replaceColumnCheckbox.text=Replace column +ConvertColumnToDynamicUI.titleTextField.text= +ConvertColumnToDynamicUI.titleLabel.text=Title: +ConvertColumnToDynamicUI.intervalEndLabel.text=Interval end: + +ConvertColumnToDynamicTimestampsUI.timestampLabel.text=Timestamp +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.text=Replace column +ConvertColumnToDynamicTimestampsUI.titleTextField.text= +ConvertColumnToDynamicTimestampsUI.titleLabel.text=Title: +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.toolTipText=Replace original column with dynamic column instead of creating a new one diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_ar.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_ca.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_ca.properties new file mode 100644 index 0000000000..541616bd62 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_ca.properties @@ -0,0 +1,38 @@ +CopyDataToOtherColumnUI.sourceColumnLabel.text=Copy data from ''{0}'' +CopyDataToOtherColumnUI.descriptionLabel.text=Copia a: +DuplicateColumnUI.titleLabel.text=Tνtol: +DuplicateColumnUI.typeLabel.text=Tipus: +DuplicateColumnUI.titleTextField.text= +DuplicateColumnUI.new.title={0}_cςpia +DuplicateColumnUI.descriptionLabel.text=Duplica "{0}". +GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean=Create a new boolean matches column from ''{0}'' +GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups=Create a new list of matching groups column from ''{0}'' +GeneralCreateColumnFromRegexUI.regexLabel.text=Regular expression: +GeneralCreateColumnFromRegexUI.regexTextField.text= +GeneralCreateColumnFromRegexUI.titleLabel.text=Tνtol: +GeneralCreateColumnFromRegexUI.titleTextField.text= +ColumnValuesFrequencyUI.configurePieChartButton.text=Configure pie chart +ColumnValuesFrequencyUI.showReportButton.text=Mostra l'informe +NumberColumnStatisticsReportUI.showReportButton.text=Mostra l'informe +NumberColumnStatisticsReportUI.configureBoxPlotButton.text=Configura el diagrama de caixa +NumberColumnStatisticsReportUI.configureScatterPlotButton.text=Configura el diagrama de dispersiσ +NumberColumnStatisticsReportUI.configureHistogramButton.text=Configura l'Historiograma +NumberColumnStatisticsReportUI.useLinesCheckBox.text=Mostra les lνnies +NumberColumnStatisticsReportUI.useLinearRegression.text=Show linear regression +NumberColumnStatisticsReportUI.divisionsLabel.text=Divisions: + + +ConvertColumnToDynamicUI.descriptionLabel.text=Convert column ''{0}'' to a dynamic column +ConvertColumnToDynamicUI.new.title={0}_dynamic +ConvertColumnToDynamicUI.intervalOpenCheckbox.text=Obre +ConvertColumnToDynamicUI.intervalStartLabel.text=L'interval comenηa: +ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText=Replace original column with dynamic column instead of creating a new one +ConvertColumnToDynamicUI.replaceColumnCheckbox.text=Reemplaηa la columna +ConvertColumnToDynamicUI.titleTextField.text= +ConvertColumnToDynamicUI.titleLabel.text=Tνtol: +ConvertColumnToDynamicUI.intervalEndLabel.text=L'interval acaba: +ConvertColumnToDynamicTimestampsUI.timestampLabel.text=Timestamp +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.text=Replace column +ConvertColumnToDynamicTimestampsUI.titleTextField.text= +ConvertColumnToDynamicTimestampsUI.titleLabel.text=Tνtol: +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.toolTipText=Replace original column with dynamic column instead of creating a new one diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_cs.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_cs.properties index 85c29fef76..1842890d83 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_cs.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_cs.properties @@ -1,65 +1,41 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:16+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -CopyDataToOtherColumnUI.sourceColumnLabel.text=Kop\u00edrovat data z ''{0}'' - -CopyDataToOtherColumnUI.descriptionLabel.text=Kop\u00edrovat do\: - -DuplicateColumnUI.titleLabel.text=N\u00e1zev\: - -DuplicateColumnUI.typeLabel.text=Typ\: - -DuplicateColumnUI.new.title={0}_kopie - -DuplicateColumnUI.descriptionLabel.text=Kop\u00edrovat ''{0}''. - -GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean=Vytvo\u0159it nov\u00fd sloupec booleovsk\u00fdch shod z ''{0}'' - -GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups=Vytvo\u0159it nov\u00fd sloupec seznamu shoduj\u00edc\u00edch se skupin z ''{0}'' - -GeneralCreateColumnFromRegexUI.regexLabel.text=Regul\u00e1rn\u00ed v\u00fdraz\: - -GeneralCreateColumnFromRegexUI.titleLabel.text=N\u00e1zev\: - -ColumnValuesFrequencyUI.configurePieChartButton.text=Nastavit kol\u00e1\u010dov\u00fd graf - -ColumnValuesFrequencyUI.showReportButton.text=Zobrazit z\u00e1znam - -NumberColumnStatisticsReportUI.showReportButton.text=Zobrazit z\u00e1znam - -NumberColumnStatisticsReportUI.configureBoxPlotButton.text=Nastavit burzovn\u00ed graf - -NumberColumnStatisticsReportUI.configureScatterPlotButton.text=Nastavit bodov\u00fd graf - -NumberColumnStatisticsReportUI.configureHistogramButton.text=Nastavit histogram - -NumberColumnStatisticsReportUI.useLinesCheckBox.text=Zobrazit \u010d\u00e1ry - -NumberColumnStatisticsReportUI.useLinearRegression.text=Zobrazit line\u00e1rn\u00ed regresi - -NumberColumnStatisticsReportUI.divisionsLabel.text=Odd\u00edly\: - -!ConvertColumnToDynamicUI.descriptionLabel.text= - -!ConvertColumnToDynamicUI.new.title= - -!ConvertColumnToDynamicUI.titleLabel.text= - -!ConvertColumnToDynamicUI.intervalOpenCheckbox.text= - -!ConvertColumnToDynamicUI.intervalStartLabel.text= - -!ConvertColumnToDynamicUI.intervalStartText.text= - -!ConvertColumnToDynamicUI.intervalEndLabel.text= - -!ConvertColumnToDynamicUI.intervalEndText.text= - -!ConvertColumnToDynamicUI.replaceColumnCheckbox.text= - -!ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText= +CopyDataToOtherColumnUI.sourceColumnLabel.text=Kopνrovat data z ''{0}'' +CopyDataToOtherColumnUI.descriptionLabel.text=Kopνrovat do: +DuplicateColumnUI.titleLabel.text=Nαzev: +DuplicateColumnUI.typeLabel.text=Typ: +DuplicateColumnUI.titleTextField.text= +DuplicateColumnUI.new.title={0}_kopie +DuplicateColumnUI.descriptionLabel.text=Kopνrovat ''{0}''. + +GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean=Vytvo\u0159it novύ sloupec booleovskύch shod z ''{0}'' +GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups=Vytvo\u0159it novύ sloupec seznamu shodujνcνch se skupin z ''{0}'' +GeneralCreateColumnFromRegexUI.regexLabel.text=Regulαrnν vύraz: +GeneralCreateColumnFromRegexUI.regexTextField.text= +GeneralCreateColumnFromRegexUI.titleLabel.text=Nαzev: +GeneralCreateColumnFromRegexUI.titleTextField.text= +ColumnValuesFrequencyUI.configurePieChartButton.text=Nastavit kolα\u010dovύ graf +ColumnValuesFrequencyUI.showReportButton.text=Zobrazit zαznam +NumberColumnStatisticsReportUI.showReportButton.text=Zobrazit zαznam +NumberColumnStatisticsReportUI.configureBoxPlotButton.text=Nastavit burzovnν graf +NumberColumnStatisticsReportUI.configureScatterPlotButton.text=Nastavit bodovύ graf +NumberColumnStatisticsReportUI.configureHistogramButton.text=Nastavit histogram +NumberColumnStatisticsReportUI.useLinesCheckBox.text=Zobrazit \u010dαry +NumberColumnStatisticsReportUI.useLinearRegression.text=Zobrazit lineαrnν regresi +NumberColumnStatisticsReportUI.divisionsLabel.text=Oddνly: + + +ConvertColumnToDynamicUI.descriptionLabel.text=P\u0159evιst sloupec ''{0}'' na dynamickύ +ConvertColumnToDynamicUI.new.title={0}_dynamickύ + +ConvertColumnToDynamicUI.intervalOpenCheckbox.text=Otev\u0159enύ +ConvertColumnToDynamicUI.intervalStartLabel.text=Za\u010dαtek intervalu: +ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText=Nahradit p\u016fvodnν sloupec dynamickύm namνsto vytvα\u0159enν novιho +ConvertColumnToDynamicUI.replaceColumnCheckbox.text=Nahradit sloupec +ConvertColumnToDynamicUI.titleTextField.text= +ConvertColumnToDynamicUI.titleLabel.text=Nαzev: +ConvertColumnToDynamicUI.intervalEndLabel.text=Konec intervalu: + +# ConvertColumnToDynamicTimestampsUI.timestampLabel.text=Timestamp +# ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.text=Replace column +ConvertColumnToDynamicTimestampsUI.titleTextField.text= +# ConvertColumnToDynamicTimestampsUI.titleLabel.text=Title: +# ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.toolTipText=Replace original column with dynamic column instead of creating a new one diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_de.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_de.properties new file mode 100644 index 0000000000..e390ebb7f3 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_de.properties @@ -0,0 +1,38 @@ +CopyDataToOtherColumnUI.sourceColumnLabel.text=Daten von '{0}'' kopieren +CopyDataToOtherColumnUI.descriptionLabel.text=Kopieren nach: +DuplicateColumnUI.titleLabel.text=Titel: +DuplicateColumnUI.typeLabel.text=Type: +DuplicateColumnUI.titleTextField.text= +DuplicateColumnUI.new.title={0}_Kopie +DuplicateColumnUI.descriptionLabel.text=''{0}'' duplizieren. +GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean=Erzeuge neue boolesche Treffer-Spalte von "{0}" +GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups=Erzeuge eine neue Liste zutreffender Gruppen-Spalten von "{0}" +GeneralCreateColumnFromRegexUI.regexLabel.text=Regulδrer Ausdruck: +GeneralCreateColumnFromRegexUI.regexTextField.text= +GeneralCreateColumnFromRegexUI.titleLabel.text=Titel: +GeneralCreateColumnFromRegexUI.titleTextField.text= +ColumnValuesFrequencyUI.configurePieChartButton.text=Tortendiagramm konfigurieren +ColumnValuesFrequencyUI.showReportButton.text=Bericht anzeigen +NumberColumnStatisticsReportUI.showReportButton.text=Bericht anzeigen +NumberColumnStatisticsReportUI.configureBoxPlotButton.text=Boxplot konfigurieren +NumberColumnStatisticsReportUI.configureScatterPlotButton.text=Streudiagramm konfigurieren +NumberColumnStatisticsReportUI.configureHistogramButton.text=Histogramm konfigurieren +NumberColumnStatisticsReportUI.useLinesCheckBox.text=Zeilen anzeigen +NumberColumnStatisticsReportUI.useLinearRegression.text=Lineare Regression anzeigen +NumberColumnStatisticsReportUI.divisionsLabel.text=Unterteilungen: + + +ConvertColumnToDynamicUI.descriptionLabel.text=Wandle Spalte "{0}" in eine dynamische Spalte +ConvertColumnToDynamicUI.new.title={0}_dynamic +ConvertColumnToDynamicUI.intervalOpenCheckbox.text=Φffnen +ConvertColumnToDynamicUI.intervalStartLabel.text=Intervall Beginn: +ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText=Ersetze Originalspalte mit dynamischer Spalte anstatt eine neue zu erzeugen +ConvertColumnToDynamicUI.replaceColumnCheckbox.text=Ersetze Spalte +ConvertColumnToDynamicUI.titleTextField.text= +ConvertColumnToDynamicUI.titleLabel.text=Titel: +ConvertColumnToDynamicUI.intervalEndLabel.text=Intervall Ende: +ConvertColumnToDynamicTimestampsUI.timestampLabel.text=Zeitstempel +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.text=Ersetze Spalte +ConvertColumnToDynamicTimestampsUI.titleTextField.text= +ConvertColumnToDynamicTimestampsUI.titleLabel.text=Titel: +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.toolTipText=Ersetze originale Spalte durch dynamische Spalte anstatt eine neue zu erzeugen diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_es.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_es.properties index 3ecb324b75..d24b18baa5 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_es.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_es.properties @@ -1,66 +1,38 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:37+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - CopyDataToOtherColumnUI.sourceColumnLabel.text=Copiar datos de ''{0}'' - -CopyDataToOtherColumnUI.descriptionLabel.text=Copiar a\: - -DuplicateColumnUI.titleLabel.text=T\u00edtulo\: - -DuplicateColumnUI.typeLabel.text=Tipo\: - +CopyDataToOtherColumnUI.descriptionLabel.text=Copiar a: +DuplicateColumnUI.titleLabel.text=Tνtulo: +DuplicateColumnUI.typeLabel.text=Tipo: +DuplicateColumnUI.titleTextField.text= DuplicateColumnUI.new.title={0}_copia - DuplicateColumnUI.descriptionLabel.text=Duplicar ''{0}''. - -GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean=Crear columna booleana a partir de expresi\u00f3n regular en ''{0}'' - -GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups=Creando columna de grupos que se ajustan a una expresi\u00f3n regular en ''{0}'' - -GeneralCreateColumnFromRegexUI.regexLabel.text=Expresi\u00f3n regular\: - -GeneralCreateColumnFromRegexUI.titleLabel.text=T\u00edtulo\: - -ColumnValuesFrequencyUI.configurePieChartButton.text=Configurar gr\u00e1fico de tarta - +GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean=Crear columna booleana a partir de expresiσn regular en ''{0}'' +GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups=Creando columna de grupos que se ajustan a una expresiσn regular en ''{0}'' +GeneralCreateColumnFromRegexUI.regexLabel.text=Expresiσn regular: +GeneralCreateColumnFromRegexUI.regexTextField.text= +GeneralCreateColumnFromRegexUI.titleLabel.text=Tνtulo: +GeneralCreateColumnFromRegexUI.titleTextField.text= +ColumnValuesFrequencyUI.configurePieChartButton.text=Configurar grαfico de tarta ColumnValuesFrequencyUI.showReportButton.text=Mostrar informe - NumberColumnStatisticsReportUI.showReportButton.text=Mostrar informe - NumberColumnStatisticsReportUI.configureBoxPlotButton.text=Configurar diagrama de cajas - -NumberColumnStatisticsReportUI.configureScatterPlotButton.text=Configurar diagrama de dispersi\u00f3n - +NumberColumnStatisticsReportUI.configureScatterPlotButton.text=Configurar diagrama de dispersiσn NumberColumnStatisticsReportUI.configureHistogramButton.text=Configurar histograma +NumberColumnStatisticsReportUI.useLinesCheckBox.text=Mostrar lνneas +NumberColumnStatisticsReportUI.useLinearRegression.text=Mostrar regresiσn lineal +NumberColumnStatisticsReportUI.divisionsLabel.text=Divisiones: -NumberColumnStatisticsReportUI.useLinesCheckBox.text=Mostrar l\u00edneas - -NumberColumnStatisticsReportUI.useLinearRegression.text=Mostrar regresi\u00f3n lineal - -NumberColumnStatisticsReportUI.divisionsLabel.text=Divisiones\: - -ConvertColumnToDynamicUI.descriptionLabel.text=Convertir columna "{0}" a din\u00e1mica +ConvertColumnToDynamicUI.descriptionLabel.text=Convertir columna "{0}" a dinαmica ConvertColumnToDynamicUI.new.title={0}_dinamico - -ConvertColumnToDynamicUI.titleLabel.text=T\u00edtulo\: - ConvertColumnToDynamicUI.intervalOpenCheckbox.text=Abierto - -ConvertColumnToDynamicUI.intervalStartLabel.text=Inicio del int\u00e9rvalo\: - -ConvertColumnToDynamicUI.intervalStartText.text=-Infinity - -ConvertColumnToDynamicUI.intervalEndLabel.text=Fin del int\u00e9rvalo\: - -ConvertColumnToDynamicUI.intervalEndText.text=Infinity - +ConvertColumnToDynamicUI.intervalStartLabel.text=Inicio del intιrvalo: +ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText=Reemplazar columna original por columna dinαmica en lugar de crear una nueva ConvertColumnToDynamicUI.replaceColumnCheckbox.text=Reemplazar columna - -ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText=Reemplazar columna original por columna din\u00e1mica en lugar de crear una nueva +ConvertColumnToDynamicUI.titleTextField.text= +ConvertColumnToDynamicUI.titleLabel.text=Tνtulo: +ConvertColumnToDynamicUI.intervalEndLabel.text=Fin del intιrvalo: +ConvertColumnToDynamicTimestampsUI.timestampLabel.text=Marca de tiempo +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.text=Reemplazar columna +ConvertColumnToDynamicTimestampsUI.titleTextField.text= +ConvertColumnToDynamicTimestampsUI.titleLabel.text=Tνtulo: +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.toolTipText=Reemplazar columna original por columna dinαmica en lugar de crear una nueva diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_fr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_fr.properties index ce1d6afd0a..8cfae2d205 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_fr.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_fr.properties @@ -1,65 +1,38 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:16+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -CopyDataToOtherColumnUI.sourceColumnLabel.text=Copier les donn\u00e9es de ''{0}'' - -CopyDataToOtherColumnUI.descriptionLabel.text=Copier vers \: - -DuplicateColumnUI.titleLabel.text=Titre \: - -DuplicateColumnUI.typeLabel.text=Type \: - -DuplicateColumnUI.new.title={0}_copy - +CopyDataToOtherColumnUI.sourceColumnLabel.text=Copier les donnιes de ''{0}'' +CopyDataToOtherColumnUI.descriptionLabel.text=Copier vers : +DuplicateColumnUI.titleLabel.text=Titre : +DuplicateColumnUI.typeLabel.text=Type : +DuplicateColumnUI.titleTextField.text= +DuplicateColumnUI.new.title={0}_copie DuplicateColumnUI.descriptionLabel.text=Dupliquer ''{0}''. - -GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean=Cr\u00e9er une colonne bool\u00e9enne depuis ''{0}'' - -GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups=Cr\u00e9er une colonne de liste bool\u00e9enne depuis ''{0}'' - -GeneralCreateColumnFromRegexUI.regexLabel.text=Expression rationnelle \: - -GeneralCreateColumnFromRegexUI.titleLabel.text=Titre \: - +GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean=Crιer une colonne boolιenne depuis ''{0}'' +GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups=Crιer une colonne de liste boolιenne depuis ''{0}'' +GeneralCreateColumnFromRegexUI.regexLabel.text=Expression rationnelle : +GeneralCreateColumnFromRegexUI.regexTextField.text= +GeneralCreateColumnFromRegexUI.titleLabel.text=Titre : +GeneralCreateColumnFromRegexUI.titleTextField.text= ColumnValuesFrequencyUI.configurePieChartButton.text=Configurer le diagramme circulaire - ColumnValuesFrequencyUI.showReportButton.text=Afficher le rapport - NumberColumnStatisticsReportUI.showReportButton.text=Afficher le rapport - -NumberColumnStatisticsReportUI.configureBoxPlotButton.text=Configurer la bo\u00eete \u00e0 moustaches - +NumberColumnStatisticsReportUI.configureBoxPlotButton.text=Configurer la boξte ΰ moustaches NumberColumnStatisticsReportUI.configureScatterPlotButton.text=Configurer le nuage de points - NumberColumnStatisticsReportUI.configureHistogramButton.text=Configurer l'histogramme - NumberColumnStatisticsReportUI.useLinesCheckBox.text=Afficher les lignes - -NumberColumnStatisticsReportUI.useLinearRegression.text=Afficher la r\u00e9gression lin\u00e9aire - -NumberColumnStatisticsReportUI.divisionsLabel.text=Divisions \: - -!ConvertColumnToDynamicUI.descriptionLabel.text= - -!ConvertColumnToDynamicUI.new.title= - -!ConvertColumnToDynamicUI.titleLabel.text= - -!ConvertColumnToDynamicUI.intervalOpenCheckbox.text= - -!ConvertColumnToDynamicUI.intervalStartLabel.text= - -!ConvertColumnToDynamicUI.intervalStartText.text= - -!ConvertColumnToDynamicUI.intervalEndLabel.text= - -!ConvertColumnToDynamicUI.intervalEndText.text= - -!ConvertColumnToDynamicUI.replaceColumnCheckbox.text= - -!ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText= +NumberColumnStatisticsReportUI.useLinearRegression.text=Afficher la rιgression linιaire +NumberColumnStatisticsReportUI.divisionsLabel.text=Divisions : + + +ConvertColumnToDynamicUI.descriptionLabel.text=Convertir la colonne "{0}" en dynamique. +ConvertColumnToDynamicUI.new.title={0}_dynamique +ConvertColumnToDynamicUI.intervalOpenCheckbox.text=Ouvrir +ConvertColumnToDynamicUI.intervalStartLabel.text=Dιbut de l'intervalle : +ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText=Remplacer la colonne originale par une colonne dynamique au lieu d'en crιer une nouvelle. +ConvertColumnToDynamicUI.replaceColumnCheckbox.text=Remplacer colonne +ConvertColumnToDynamicUI.titleTextField.text= +ConvertColumnToDynamicUI.titleLabel.text=Titre : +ConvertColumnToDynamicUI.intervalEndLabel.text=Fin de l'intervalle : +ConvertColumnToDynamicTimestampsUI.timestampLabel.text=Timestamp +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.text=Remplacer colonne +ConvertColumnToDynamicTimestampsUI.titleTextField.text= +ConvertColumnToDynamicTimestampsUI.titleLabel.text=Titre : +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.toolTipText=Remplacer la colonne originale par une colonne dynamique au lieu d'en crιer une nouvelle. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_he.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_he.properties new file mode 100644 index 0000000000..c6b2fe64e5 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_he.properties @@ -0,0 +1,38 @@ +CopyDataToOtherColumnUI.sourceColumnLabel.text=\u05d4\u05e2\u05ea\u05e7\u05ea \u05e0\u05ea\u05d5\u05e0\u05d9\u05dd \u05de "{0}" +CopyDataToOtherColumnUI.descriptionLabel.text=\u05d4\u05e2\u05ea\u05e7 \u05d0\u05dc: +DuplicateColumnUI.titleLabel.text=\u05db\u05d5\u05ea\u05e8\u05ea: +DuplicateColumnUI.typeLabel.text=\u05e1\u05d5\u05d2: +DuplicateColumnUI.titleTextField.text= +DuplicateColumnUI.new.title=\u05d4\u05e2\u05ea\u05e7_{0} +DuplicateColumnUI.descriptionLabel.text=\u05e9\u05db\u05e4\u05dc "{0}" +GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean=\u05e6\u05d5\u05e8 \u05d8\u05d5\u05e8 \u05d4\u05ea\u05d0\u05de\u05d5\u05ea \u05d4\u05d5\u05dc\u05d9\u05d0\u05e0\u05d9 \u05de "{0}" +GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups=\u05d9\u05e6\u05d9\u05e8\u05ea \u05d8\u05d5\u05e8 \u05d4\u05ea\u05d0\u05de\u05ea \u05e7\u05d1\u05d5\u05e6\u05d5\u05ea \u05de "{0}" +GeneralCreateColumnFromRegexUI.regexLabel.text=\u05d1\u05d9\u05d8\u05d5\u05d9 \u05e8\u05d2\u05d5\u05dc\u05e8\u05d9: +GeneralCreateColumnFromRegexUI.regexTextField.text= +GeneralCreateColumnFromRegexUI.titleLabel.text=\u05db\u05d5\u05ea\u05e8\u05ea:\u05db\u05d5\u05ea\u05e8\u05ea: +GeneralCreateColumnFromRegexUI.titleTextField.text= +ColumnValuesFrequencyUI.configurePieChartButton.text=\u05d4\u05e2\u05d3\u05e4\u05d5\u05ea \u05d2\u05e8\u05e3 \u05e4\u05d0\u05d9 +ColumnValuesFrequencyUI.showReportButton.text=\u05d4\u05e6\u05d2 \u05d3\u05d5\u05d7 +NumberColumnStatisticsReportUI.showReportButton.text=\u05d4\u05e6\u05d2 \u05d3\u05d5\u05d7 +NumberColumnStatisticsReportUI.configureBoxPlotButton.text=\u05d4\u05e2\u05d3\u05e4\u05d5\u05ea \u05d2\u05e8\u05e3 boxplot +NumberColumnStatisticsReportUI.configureScatterPlotButton.text=\u05d4\u05e2\u05d3\u05e4\u05d5\u05ea \u05d2\u05e8\u05e3 \u05e0\u05e7\u05d5\u05d3\u05d5\u05ea +NumberColumnStatisticsReportUI.configureHistogramButton.text=\u05d4\u05e2\u05d3\u05e4\u05d5\u05ea \u05d4\u05d9\u05e1\u05d8\u05d5\u05d2\u05e8\u05de\u05d4 +NumberColumnStatisticsReportUI.useLinesCheckBox.text=\u05d4\u05e8\u05d0\u05d4 \u05e7\u05d5\u05d9\u05dd +NumberColumnStatisticsReportUI.useLinearRegression.text=\u05d4\u05e6\u05d2 \u05e8\u05d2\u05e8\u05e1\u05d9\u05d4 \u05dc\u05d9\u05e0\u05d0\u05e8\u05d9\u05ea +NumberColumnStatisticsReportUI.divisionsLabel.text=\u05d7\u05dc\u05d5\u05e7\u05d5\u05ea: + + +ConvertColumnToDynamicUI.descriptionLabel.text=\u05d4\u05de\u05e8 \u05d8\u05d5\u05e8 "{0}" \u05dc\u05d8\u05d5\u05e8 \u05d3\u05d9\u05e0\u05d0\u05de\u05d9 +ConvertColumnToDynamicUI.new.title={0}_\u05d3\u05d9\u05e0\u05d0\u05de\u05d9 +ConvertColumnToDynamicUI.intervalOpenCheckbox.text=\u05e4\u05ea\u05d7 +ConvertColumnToDynamicUI.intervalStartLabel.text=\u05d4\u05ea\u05d7\u05dc\u05ea \u05d4\u05de\u05e7\u05d8\u05e2 +ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText=\u05d4\u05d7\u05dc\u05e3 \u05d4\u05d8\u05d5\u05e8 \u05d4\u05de\u05e7\u05d5\u05e8\u05d9 \u05e2\u05dd \u05d8\u05d5\u05e8 \u05d3\u05d9\u05e0\u05d0\u05de\u05d9 \u05d1\u05de\u05e7\u05d5\u05dd \u05dc\u05d9\u05e6\u05d5\u05e8 \u05d7\u05d3\u05e9 +ConvertColumnToDynamicUI.replaceColumnCheckbox.text=\u05d4\u05d7\u05dc\u05e3 \u05d8\u05d5\u05e8 +ConvertColumnToDynamicUI.titleTextField.text= +ConvertColumnToDynamicUI.titleLabel.text=\u05db\u05d5\u05ea\u05e8\u05ea: +ConvertColumnToDynamicUI.intervalEndLabel.text=\u05e1\u05d9\u05d5\u05dd \u05d4\u05de\u05e7\u05d8\u05e2: +ConvertColumnToDynamicTimestampsUI.timestampLabel.text=Timestamp +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.text=Replace column +ConvertColumnToDynamicTimestampsUI.titleTextField.text= +ConvertColumnToDynamicTimestampsUI.titleLabel.text=Title: +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.toolTipText=Replace original column with dynamic column instead of creating a new one diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_hu.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_hu.properties new file mode 100644 index 0000000000..f12a788b68 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_hu.properties @@ -0,0 +1,3 @@ + + +CopyDataToOtherColumnUI.sourceColumnLabel.text=Adatok m\u00E1sol\u00E1sa innen: ''{0}'' diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_it.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_it.properties new file mode 100644 index 0000000000..e3c3f7c6c5 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_it.properties @@ -0,0 +1,38 @@ +CopyDataToOtherColumnUI.sourceColumnLabel.text=Copy data from ''{0}'' +CopyDataToOtherColumnUI.descriptionLabel.text=Copy to: +DuplicateColumnUI.titleLabel.text=Title: +DuplicateColumnUI.typeLabel.text=Type: +DuplicateColumnUI.titleTextField.text= +DuplicateColumnUI.new.title={0}_copy +DuplicateColumnUI.descriptionLabel.text=Duplicate ''{0}''. +GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean=Create a new boolean matches column from ''{0}'' +GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups=Create a new list of matching groups column from ''{0}'' +GeneralCreateColumnFromRegexUI.regexLabel.text=Regular expression: +GeneralCreateColumnFromRegexUI.regexTextField.text= +GeneralCreateColumnFromRegexUI.titleLabel.text=Title: +GeneralCreateColumnFromRegexUI.titleTextField.text= +ColumnValuesFrequencyUI.configurePieChartButton.text=Configure pie chart +ColumnValuesFrequencyUI.showReportButton.text=Show report +NumberColumnStatisticsReportUI.showReportButton.text=Show report +NumberColumnStatisticsReportUI.configureBoxPlotButton.text=Configure box plot +NumberColumnStatisticsReportUI.configureScatterPlotButton.text=Configure scatter plot +NumberColumnStatisticsReportUI.configureHistogramButton.text=Configure histogram +NumberColumnStatisticsReportUI.useLinesCheckBox.text=Show lines +NumberColumnStatisticsReportUI.useLinearRegression.text=Show linear regression +NumberColumnStatisticsReportUI.divisionsLabel.text=Divisions: + + +ConvertColumnToDynamicUI.descriptionLabel.text=Convert column ''{0}'' to a dynamic column +ConvertColumnToDynamicUI.new.title={0}_dynamic +ConvertColumnToDynamicUI.intervalOpenCheckbox.text=Open +ConvertColumnToDynamicUI.intervalStartLabel.text=Interval start: +ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText=Replace original column with dynamic column instead of creating a new one +ConvertColumnToDynamicUI.replaceColumnCheckbox.text=Replace column +ConvertColumnToDynamicUI.titleTextField.text= +ConvertColumnToDynamicUI.titleLabel.text=Title: +ConvertColumnToDynamicUI.intervalEndLabel.text=Interval end: +ConvertColumnToDynamicTimestampsUI.timestampLabel.text=Timestamp +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.text=Replace column +ConvertColumnToDynamicTimestampsUI.titleTextField.text= +ConvertColumnToDynamicTimestampsUI.titleLabel.text=Title: +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.toolTipText=Replace original column with dynamic column instead of creating a new one diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_ja.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_ja.properties index 43058d23af..36c67e5a24 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_ja.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_ja.properties @@ -1,65 +1,41 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:16+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -CopyDataToOtherColumnUI.sourceColumnLabel.text=''{0}''\u304b\u3089\u30c7\u30fc\u30bf\u3092\u30b3\u30d4\u30fc - -CopyDataToOtherColumnUI.descriptionLabel.text=\u30b3\u30d4\u30fc\: - -DuplicateColumnUI.titleLabel.text=\u30bf\u30a4\u30c8\u30eb\: - -DuplicateColumnUI.typeLabel.text=\u7a2e\u985e\: - -DuplicateColumnUI.new.title={0}_\u30b3\u30d4\u30fc - -DuplicateColumnUI.descriptionLabel.text=''{0}''\u3092\u8907\u5199 - -GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean=''{0}''\u304b\u3089\u65b0\u898f\u8ad6\u7406\u578b\u306e\u4e00\u81f4\u3059\u308b\u5217\u3092\u4f5c\u6210 - -GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups=''{0}''\u304b\u3089\u306e\u30b0\u30eb\u30fc\u30d7\u306e\u5217\u3092\u30de\u30c3\u30c1\u30f3\u30b0\u306e\u65b0\u898f\u30ea\u30b9\u30c8\u3092\u4f5c\u6210 - -GeneralCreateColumnFromRegexUI.regexLabel.text=\u6b63\u898f\u8868\u73fe\: - -GeneralCreateColumnFromRegexUI.titleLabel.text=\u30bf\u30a4\u30c8\u30eb\: - -ColumnValuesFrequencyUI.configurePieChartButton.text=\u5186\u30b0\u30e9\u30d5\u306e\u8a2d\u5b9a - -ColumnValuesFrequencyUI.showReportButton.text=\u5831\u544a\u3092\u95b2\u89a7 - -NumberColumnStatisticsReportUI.showReportButton.text=\u5831\u544a\u3092\u95b2\u89a7 - -NumberColumnStatisticsReportUI.configureBoxPlotButton.text=\u7bb1\u30d2\u30b2\u56f3\u306e\u8a2d\u5b9a - -NumberColumnStatisticsReportUI.configureScatterPlotButton.text=\u6563\u5e03\u56f3\u306e\u8a2d\u5b9a - -NumberColumnStatisticsReportUI.configureHistogramButton.text=\u30d2\u30b9\u30c8\u30b0\u30e9\u30e0\u306e\u8a2d\u5b9a - -NumberColumnStatisticsReportUI.useLinesCheckBox.text=\u7dda\u3092\u8868\u793a - -NumberColumnStatisticsReportUI.useLinearRegression.text=\u56de\u5e30\u76f4\u7dda\u306e\u8868\u793a - -NumberColumnStatisticsReportUI.divisionsLabel.text=\u90e8\u9580\: - -!ConvertColumnToDynamicUI.descriptionLabel.text= - -!ConvertColumnToDynamicUI.new.title= - -!ConvertColumnToDynamicUI.titleLabel.text= - -!ConvertColumnToDynamicUI.intervalOpenCheckbox.text= - -!ConvertColumnToDynamicUI.intervalStartLabel.text= - -!ConvertColumnToDynamicUI.intervalStartText.text= - -!ConvertColumnToDynamicUI.intervalEndLabel.text= - -!ConvertColumnToDynamicUI.intervalEndText.text= - -!ConvertColumnToDynamicUI.replaceColumnCheckbox.text= - -!ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText= +CopyDataToOtherColumnUI.sourceColumnLabel.text=''{0}''\u304b\u3089\u30c7\u30fc\u30bf\u3092\u30b3\u30d4\u30fc +CopyDataToOtherColumnUI.descriptionLabel.text=\u30b3\u30d4\u30fc: +DuplicateColumnUI.titleLabel.text=\u30bf\u30a4\u30c8\u30eb: +DuplicateColumnUI.typeLabel.text=\u7a2e\u985e: +DuplicateColumnUI.titleTextField.text= +DuplicateColumnUI.new.title={0}_\u30b3\u30d4\u30fc +DuplicateColumnUI.descriptionLabel.text=''{0}''\u3092\u8907\u5199 + +GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean=''{0}''\u304b\u3089\u65b0\u898f\u8ad6\u7406\u578b\u306e\u4e00\u81f4\u3059\u308b\u5217\u3092\u4f5c\u6210 +GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups=''{0}''\u304b\u3089\u306e\u30b0\u30eb\u30fc\u30d7\u306e\u5217\u3092\u30de\u30c3\u30c1\u30f3\u30b0\u306e\u65b0\u898f\u30ea\u30b9\u30c8\u3092\u4f5c\u6210 +GeneralCreateColumnFromRegexUI.regexLabel.text=\u6b63\u898f\u8868\u73fe: +GeneralCreateColumnFromRegexUI.regexTextField.text= +GeneralCreateColumnFromRegexUI.titleLabel.text=\u30bf\u30a4\u30c8\u30eb: +GeneralCreateColumnFromRegexUI.titleTextField.text= +ColumnValuesFrequencyUI.configurePieChartButton.text=\u5186\u30b0\u30e9\u30d5\u306e\u8a2d\u5b9a +ColumnValuesFrequencyUI.showReportButton.text=\u5831\u544a\u3092\u95b2\u89a7 +NumberColumnStatisticsReportUI.showReportButton.text=\u5831\u544a\u3092\u95b2\u89a7 +NumberColumnStatisticsReportUI.configureBoxPlotButton.text=\u7bb1\u30d2\u30b2\u56f3\u306e\u8a2d\u5b9a +NumberColumnStatisticsReportUI.configureScatterPlotButton.text=\u6563\u5e03\u56f3\u306e\u8a2d\u5b9a +NumberColumnStatisticsReportUI.configureHistogramButton.text=\u30d2\u30b9\u30c8\u30b0\u30e9\u30e0\u306e\u8a2d\u5b9a +NumberColumnStatisticsReportUI.useLinesCheckBox.text=\u7dda\u3092\u8868\u793a +NumberColumnStatisticsReportUI.useLinearRegression.text=\u56de\u5e30\u76f4\u7dda\u306e\u8868\u793a +NumberColumnStatisticsReportUI.divisionsLabel.text=\u90e8\u9580: + + +# ConvertColumnToDynamicUI.descriptionLabel.text=Convert column ''{0}'' to a dynamic column +# ConvertColumnToDynamicUI.new.title={0}_dynamic + +# ConvertColumnToDynamicUI.intervalOpenCheckbox.text=Open +# ConvertColumnToDynamicUI.intervalStartLabel.text=Interval start: +# ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText=Replace original column with dynamic column instead of creating a new one +# ConvertColumnToDynamicUI.replaceColumnCheckbox.text=Replace column +ConvertColumnToDynamicUI.titleTextField.text= +ConvertColumnToDynamicUI.titleLabel.text=\u30bf\u30a4\u30c8\u30eb: +# ConvertColumnToDynamicUI.intervalEndLabel.text=Interval end: + +# ConvertColumnToDynamicTimestampsUI.timestampLabel.text=Timestamp +# ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.text=Replace column +ConvertColumnToDynamicTimestampsUI.titleTextField.text= +# ConvertColumnToDynamicTimestampsUI.titleLabel.text=Title: +# ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.toolTipText=Replace original column with dynamic column instead of creating a new one diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_ko.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_ko.properties new file mode 100644 index 0000000000..5f52731ff3 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_ko.properties @@ -0,0 +1,35 @@ + + +CopyDataToOtherColumnUI.sourceColumnLabel.text=''{0}''\uB85C\uBD80\uD130 \uB370\uC774\uD130 \uBCF5\uC0AC\uD558\uAE30 +CopyDataToOtherColumnUI.descriptionLabel.text=\uBCF5\uC0AC\uD560 \uACF3: +DuplicateColumnUI.titleLabel.text=\uC81C\uBAA9: +DuplicateColumnUI.typeLabel.text=\uC720\uD615: +DuplicateColumnUI.new.title={0}_\uBCF5\uC81C +DuplicateColumnUI.descriptionLabel.text=''{0}''\uB97C \uBCF5\uC81C\uD558\uAE30. +GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean=''{0}''\uB85C\uBD80\uD130 \uB9E4\uCE6D\uB418\uB294 boolean \uD0C0\uC785\uC758 \uCEEC\uB7FC\uC744 \uC0DD\uC131\uD558\uAE30 +GeneralCreateColumnFromRegexUI.regexLabel.text=\uC815\uADDC\uC2DD: +GeneralCreateColumnFromRegexUI.titleLabel.text=\uC81C\uBAA9: +ColumnValuesFrequencyUI.showReportButton.text=\uB9AC\uD3EC\uD2B8 \uBCF4\uC774\uAE30 +NumberColumnStatisticsReportUI.showReportButton.text=\uB9AC\uD3EC\uD2B8 \uBCF4\uC774\uAE30 +ColumnValuesFrequencyUI.configurePieChartButton.text=\uD30C\uC774 \uCC28\uD2B8 \uC124\uC815\uD558\uAE30 +NumberColumnStatisticsReportUI.configureBoxPlotButton.text=\uBC15\uC2A4 \uD50C\uB86F \uC124\uC815\uD558\uAE30 +NumberColumnStatisticsReportUI.configureScatterPlotButton.text=\uC2A4\uCE90\uD130 \uD50C\uB86F \uC124\uC815\uD558\uAE30 +NumberColumnStatisticsReportUI.configureHistogramButton.text=\uD788\uC2A4\uD1A0\uADF8\uB7A8 \uC124\uC815\uD558\uAE30 +NumberColumnStatisticsReportUI.useLinesCheckBox.text=\uB77C\uC778 \uBCF4\uC774\uAE30 +NumberColumnStatisticsReportUI.useLinearRegression.text=\uC120\uD615 \uD68C\uAE30 \uBCF4\uC774\uAE30 + + +ConvertColumnToDynamicUI.descriptionLabel.text=''{0}'' \uCEEC\uB7FC\uC744 \uB3D9\uC801\uC778 \uCEEC\uB7FC\uC73C\uB85C \uBCC0\uD658\uD558\uAE30 +ConvertColumnToDynamicUI.new.title={0}_\uB3D9\uC801 +ConvertColumnToDynamicUI.intervalOpenCheckbox.text=\uC5F4\uAE30 +ConvertColumnToDynamicUI.intervalStartLabel.text=\uAC04\uACA9 \uC2DC\uC791: +ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText=\uC0C8\uB85C\uC6B4 \uCEEC\uB7FC\uC744 \uC0DD\uC131\uD558\uB294 \uB300\uC2E0 \uC6D0\uB798 \uCEEC\uB7FC\uC744 \uB3D9\uC801 \uCEEC\uB7FC\uC73C\uB85C \uB300\uCCB4\uD558\uAE30 +ConvertColumnToDynamicUI.replaceColumnCheckbox.text=\uCEEC\uB7FC \uB300\uCCB4\uD558\uAE30 +ConvertColumnToDynamicUI.titleLabel.text=\uC81C\uBAA9: +ConvertColumnToDynamicUI.intervalEndLabel.text=\uAC04\uACA9 \uB05D: +ConvertColumnToDynamicTimestampsUI.timestampLabel.text=\uD0C0\uC784\uC2A4\uD0EC\uD504 +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.text=\uCEEC\uB7FC \uB300\uCCB4\uD558\uAE30 +ConvertColumnToDynamicTimestampsUI.titleLabel.text=\uC81C\uBAA9: +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.toolTipText=\uC0C8\uB85C\uC6B4 \uCEEC\uB7FC\uC744 \uC0DD\uC131\uD558\uB294 \uB300\uC2E0 \uC6D0\uB798 \uCEEC\uB7FC\uC744 \uB3D9\uC801 \uCEEC\uB7FC\uC73C\uB85C \uB300\uCCB4\uD558\uAE30 +GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups=Create a new list of matching groups column from ''{0}''\uB85C\uBD80\uD130 \uB9E4\uCE6D\uB418\uB294 \uADF8\uB8F9\uB4E4\uC758 \uB9AC\uC2A4\uD2B8 \uD615\uD0DC\uB85C \uC0C8\uB85C\uC6B4 \uCEEC\uB7FC\uC744 \uC0DD\uC131\uD558\uAE30 +NumberColumnStatisticsReportUI.divisionsLabel.text=\uB514\uBE44\uC83C: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_nl.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_nl.properties new file mode 100644 index 0000000000..f20355c355 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_nl.properties @@ -0,0 +1,38 @@ +CopyDataToOtherColumnUI.sourceColumnLabel.text=Gegevens kopiλren van "{0}" +CopyDataToOtherColumnUI.descriptionLabel.text=Kopiλren naar: +DuplicateColumnUI.titleLabel.text=Titel: +DuplicateColumnUI.typeLabel.text=Type: +DuplicateColumnUI.titleTextField.text= +DuplicateColumnUI.new.title=Kopie van {0} +DuplicateColumnUI.descriptionLabel.text=Duplicate ''{0}''. +GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean=Create a new boolean matches column from ''{0}'' +GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups=Create a new list of matching groups column from ''{0}'' +GeneralCreateColumnFromRegexUI.regexLabel.text=Regular expression: +GeneralCreateColumnFromRegexUI.regexTextField.text= +GeneralCreateColumnFromRegexUI.titleLabel.text=Title: +GeneralCreateColumnFromRegexUI.titleTextField.text= +ColumnValuesFrequencyUI.configurePieChartButton.text=Configure pie chart +ColumnValuesFrequencyUI.showReportButton.text=Show report +NumberColumnStatisticsReportUI.showReportButton.text=Show report +NumberColumnStatisticsReportUI.configureBoxPlotButton.text=Configure box plot +NumberColumnStatisticsReportUI.configureScatterPlotButton.text=Configure scatter plot +NumberColumnStatisticsReportUI.configureHistogramButton.text=Histogram configureren +NumberColumnStatisticsReportUI.useLinesCheckBox.text=Show lines +NumberColumnStatisticsReportUI.useLinearRegression.text=Show linear regression +NumberColumnStatisticsReportUI.divisionsLabel.text=Divisions: + + +ConvertColumnToDynamicUI.descriptionLabel.text=Convert column ''{0}'' to a dynamic column +ConvertColumnToDynamicUI.new.title={0}_dynamic +ConvertColumnToDynamicUI.intervalOpenCheckbox.text=Openen +ConvertColumnToDynamicUI.intervalStartLabel.text=Interval start: +ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText=Replace original column with dynamic column instead of creating a new one +ConvertColumnToDynamicUI.replaceColumnCheckbox.text=Kolom vervangen +ConvertColumnToDynamicUI.titleTextField.text= +ConvertColumnToDynamicUI.titleLabel.text=Titel: +ConvertColumnToDynamicUI.intervalEndLabel.text=Interval end: +ConvertColumnToDynamicTimestampsUI.timestampLabel.text=Tijdstempel +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.text=Kolom vervangen +ConvertColumnToDynamicTimestampsUI.titleTextField.text= +ConvertColumnToDynamicTimestampsUI.titleLabel.text=Titel: +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.toolTipText=Replace original column with dynamic column instead of creating a new one diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_pt.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_pt.properties new file mode 100644 index 0000000000..620039749d --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_pt.properties @@ -0,0 +1,30 @@ +CopyDataToOtherColumnUI.sourceColumnLabel.text=Copiar dados de ''{0}'' +CopyDataToOtherColumnUI.descriptionLabel.text=Copiar para: +DuplicateColumnUI.titleLabel.text=T\u00EDtulo: +DuplicateColumnUI.typeLabel.text=Tipo: +DuplicateColumnUI.new.title={0} _c\u00F3pia +DuplicateColumnUI.descriptionLabel.text=Duplicar ''{0}''. +GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean=Criar coluna booleana que correspondem a uma express\u00E3o regular em ''{0}'' +GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups=Criar lista de grupos que correspondem a uma express\u00E3o regular em ''{0}'' +GeneralCreateColumnFromRegexUI.regexLabel.text=Express\u00E3o regular: +ConvertColumnToDynamicUI.intervalStartLabel.text=In\u00EDcio do intervalo: +GeneralCreateColumnFromRegexUI.titleLabel.text=T\u00EDtulo: +ColumnValuesFrequencyUI.configurePieChartButton.text=Configurar gr\u00E1fico de pizza +ColumnValuesFrequencyUI.showReportButton.text=Exibir relat\u00F3rio +NumberColumnStatisticsReportUI.showReportButton.text=Exibir relat\u00F3rio +NumberColumnStatisticsReportUI.configureBoxPlotButton.text=Configurar gr\u00E1fico de caixa +NumberColumnStatisticsReportUI.configureScatterPlotButton.text=Configurar gr\u00E1fico de dispers\u00E3o +NumberColumnStatisticsReportUI.configureHistogramButton.text=Configurar histograma +NumberColumnStatisticsReportUI.useLinesCheckBox.text=Exibir linhas +NumberColumnStatisticsReportUI.useLinearRegression.text=Exibir regress\u00E3o linear +NumberColumnStatisticsReportUI.divisionsLabel.text=Divis\u00F5es: +ConvertColumnToDynamicUI.descriptionLabel.text=Converter a coluna "{0}" para uma coluna din\u00E2mica +ConvertColumnToDynamicUI.new.title={0}_din\u00E2mica +ConvertColumnToDynamicUI.intervalOpenCheckbox.text=Aberto +ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText=Substituir a coluna original pela coluna din\u00E2mica ao inv\u00E9s de criar uma nova coluna +ConvertColumnToDynamicUI.replaceColumnCheckbox.text=Substituir coluna +ConvertColumnToDynamicUI.titleLabel.text=T\u00EDtulo: +ConvertColumnToDynamicUI.intervalEndLabel.text=Fim do intervalo: +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.text=Substituir coluna +ConvertColumnToDynamicTimestampsUI.titleLabel.text=T\u00EDtulo: +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.toolTipText=Substituir a coluna original pela coluna din\u00E2mica ao inv\u00E9s de criar uma nova coluna diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_pt_BR.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_pt_BR.properties index 6304bf4397..1da37a2f55 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_pt_BR.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_pt_BR.properties @@ -1,65 +1,38 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:16+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - CopyDataToOtherColumnUI.sourceColumnLabel.text=Copiar dados de ''{0}'' - -CopyDataToOtherColumnUI.descriptionLabel.text=Copiar para\: - -DuplicateColumnUI.titleLabel.text=T\u00edtulo\: - -DuplicateColumnUI.typeLabel.text=Tipo\: - -DuplicateColumnUI.new.title={0} _c\u00f3pia - +CopyDataToOtherColumnUI.descriptionLabel.text=Copiar para: +DuplicateColumnUI.titleLabel.text=Tνtulo: +DuplicateColumnUI.typeLabel.text=Tipo: +DuplicateColumnUI.titleTextField.text= +DuplicateColumnUI.new.title={0} _cσpia DuplicateColumnUI.descriptionLabel.text=Duplicar ''{0}''. - -GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean=Criar coluna booleana a partir de uma express\u00e3o regular em ''{0}'' - -GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups=Criando coluna de grupos que atendem a uma express\u00e3o regular em ''{0}'' - -GeneralCreateColumnFromRegexUI.regexLabel.text=Express\u00e3o regular\: - -GeneralCreateColumnFromRegexUI.titleLabel.text=T\u00edtulo\: - -ColumnValuesFrequencyUI.configurePieChartButton.text=Configurar gr\u00e1fico de pizza - -ColumnValuesFrequencyUI.showReportButton.text=Exibir relat\u00f3rio - -NumberColumnStatisticsReportUI.showReportButton.text=Exibir relat\u00f3rio - -NumberColumnStatisticsReportUI.configureBoxPlotButton.text=Configurar gr\u00e1fico de caixa - -NumberColumnStatisticsReportUI.configureScatterPlotButton.text=Configurar gr\u00e1fico de dispers\u00e3o - +GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean=Criar coluna booleana a partir de uma expressγo regular em ''{0}'' +GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups=Criando coluna de grupos que atendem a uma expressγo regular em ''{0}'' +GeneralCreateColumnFromRegexUI.regexLabel.text=Expressγo regular: +GeneralCreateColumnFromRegexUI.regexTextField.text= +GeneralCreateColumnFromRegexUI.titleLabel.text=Tνtulo: +GeneralCreateColumnFromRegexUI.titleTextField.text= +ColumnValuesFrequencyUI.configurePieChartButton.text=Configurar grαfico de pizza +ColumnValuesFrequencyUI.showReportButton.text=Exibir relatσrio +NumberColumnStatisticsReportUI.showReportButton.text=Exibir relatσrio +NumberColumnStatisticsReportUI.configureBoxPlotButton.text=Configurar grαfico de caixa +NumberColumnStatisticsReportUI.configureScatterPlotButton.text=Configurar grαfico de dispersγo NumberColumnStatisticsReportUI.configureHistogramButton.text=Configurar histograma - NumberColumnStatisticsReportUI.useLinesCheckBox.text=Exibir linhas - -NumberColumnStatisticsReportUI.useLinearRegression.text=Exibir regress\u00e3o linear - -NumberColumnStatisticsReportUI.divisionsLabel.text=Divis\u00f5es\: - -!ConvertColumnToDynamicUI.descriptionLabel.text= - -!ConvertColumnToDynamicUI.new.title= - -!ConvertColumnToDynamicUI.titleLabel.text= - -!ConvertColumnToDynamicUI.intervalOpenCheckbox.text= - -!ConvertColumnToDynamicUI.intervalStartLabel.text= - -!ConvertColumnToDynamicUI.intervalStartText.text= - -!ConvertColumnToDynamicUI.intervalEndLabel.text= - -!ConvertColumnToDynamicUI.intervalEndText.text= - -!ConvertColumnToDynamicUI.replaceColumnCheckbox.text= - -!ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText= +NumberColumnStatisticsReportUI.useLinearRegression.text=Exibir regressγo linear +NumberColumnStatisticsReportUI.divisionsLabel.text=Divisυes: + + +ConvertColumnToDynamicUI.descriptionLabel.text=Converter a coluna "{0}" para uma coluna dinβmica +ConvertColumnToDynamicUI.new.title={0}_dinβmica +ConvertColumnToDynamicUI.intervalOpenCheckbox.text=Aberto +ConvertColumnToDynamicUI.intervalStartLabel.text=Inνcio do intervalo +ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText=Substituir a coluna original pela coluna dinβmica ao invιs de criar uma nova coluna +ConvertColumnToDynamicUI.replaceColumnCheckbox.text=Substituir coluna +ConvertColumnToDynamicUI.titleTextField.text= +ConvertColumnToDynamicUI.titleLabel.text=Tνtulo: +ConvertColumnToDynamicUI.intervalEndLabel.text=Fim do intervalo: +ConvertColumnToDynamicTimestampsUI.timestampLabel.text=Timestamp +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.text=Substituir coluna +ConvertColumnToDynamicTimestampsUI.titleTextField.text= +ConvertColumnToDynamicTimestampsUI.titleLabel.text=Tνtulo: +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.toolTipText=Substituir a coluna original pela coluna dinβmica ao invιs de criar uma nova coluna diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_ro.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_ro.properties new file mode 100644 index 0000000000..319237091e --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_ro.properties @@ -0,0 +1,35 @@ + + +DuplicateColumnUI.new.title={0}_copie +DuplicateColumnUI.descriptionLabel.text=Duplic\u0103 ''{0}''. +GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean=Creaz\u0103 o nou\u0103 coloan\u0103 de potriviri booleene din ''{0}'' +GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups=Creaz\u0103 o nou\u0103 coloan\u0103 de liste de potriviri booleene din ''{0}'' +GeneralCreateColumnFromRegexUI.regexLabel.text=Expresie regulat\u0103: +ColumnValuesFrequencyUI.configurePieChartButton.text=Configureaz\u0103 diagrama radial\u0103 +ColumnValuesFrequencyUI.showReportButton.text=Afi\u0219eaz\u0103 raportul +NumberColumnStatisticsReportUI.showReportButton.text=Afi\u0219eaz\u0103 raportul +NumberColumnStatisticsReportUI.configureBoxPlotButton.text=Configureaz\u0103 diagrama boxplot +NumberColumnStatisticsReportUI.configureScatterPlotButton.text=Configureaz\u0103 diagrama de dispersie +NumberColumnStatisticsReportUI.configureHistogramButton.text=Configureaz\u0103 histograma +NumberColumnStatisticsReportUI.useLinesCheckBox.text=Afi\u0219eaz\u0103 liniile +NumberColumnStatisticsReportUI.useLinearRegression.text=Afi\u0219eaz\u0103 regresia liniar\u0103 + + +ConvertColumnToDynamicUI.descriptionLabel.text=Converte\u0219te coloana ''{0}'' \u00EEntr-o coloan\u0103 dinamic\u0103 +ConvertColumnToDynamicUI.new.title={0}_dinamic +ConvertColumnToDynamicUI.intervalOpenCheckbox.text=Deschis +ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText=\u00CEnlocuie\u0219te coloana original\u0103 cu una dinamic\u0103 \u00EEn locul cre\u0103rii uneia noi +ConvertColumnToDynamicUI.replaceColumnCheckbox.text=\u00CEnlocuie\u0219te coloana +ConvertColumnToDynamicUI.titleLabel.text=Titlu: +ConvertColumnToDynamicUI.intervalEndLabel.text=Sf\u00E2r\u0219it interval: +ConvertColumnToDynamicTimestampsUI.timestampLabel.text=Marcaj temporal +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.text=\u00CEnlocuie\u0219te coloana +CopyDataToOtherColumnUI.sourceColumnLabel.text=Copiaz\u0103 datele din ''{0}'' +CopyDataToOtherColumnUI.descriptionLabel.text=Copiaz\u0103 \u00EEn: +DuplicateColumnUI.typeLabel.text=Tip: +DuplicateColumnUI.titleLabel.text=Titlu: +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.toolTipText=\u00CEnlocuie\u0219te coloana original\u0103 cu una dinamic\u0103 \u00EEn locul cre\u0103rii uneia noi +GeneralCreateColumnFromRegexUI.titleLabel.text=Titlu: +NumberColumnStatisticsReportUI.divisionsLabel.text=Diviziuni: +ConvertColumnToDynamicTimestampsUI.titleLabel.text=Titlu: +ConvertColumnToDynamicUI.intervalStartLabel.text=\u00CEnceput interval: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_ru.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_ru.properties index 678ab6a29f..91105f12b4 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_ru.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_ru.properties @@ -1,65 +1,41 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:16+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - CopyDataToOtherColumnUI.sourceColumnLabel.text=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0437 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 ''{0}'' - -CopyDataToOtherColumnUI.descriptionLabel.text=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0434\u043b\u044f \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\: - -DuplicateColumnUI.titleLabel.text=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u0442\u043e\u043b\u0431\u0446\u0430\: - -DuplicateColumnUI.typeLabel.text=\u0422\u0438\u043f \u0441\u0442\u043e\u043b\u0431\u0446\u0430\: - +CopyDataToOtherColumnUI.descriptionLabel.text=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0446\u0435\u043b\u0435\u0432\u043e\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0434\u043b\u044f \u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f: +DuplicateColumnUI.titleLabel.text=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u0442\u043e\u043b\u0431\u0446\u0430: +DuplicateColumnUI.typeLabel.text=\u0422\u0438\u043f \u0441\u0442\u043e\u043b\u0431\u0446\u0430: +DuplicateColumnUI.titleTextField.text= DuplicateColumnUI.new.title={0}_copy - DuplicateColumnUI.descriptionLabel.text=\u0414\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 ''{0}''. - GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u0430 ''{0}'' \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u043c\u0443 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044e - GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups=\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u0441 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \u043f\u043e\u0438\u0441\u043a\u0430 \u0432 \u0441\u0442\u043e\u043b\u0431\u0446\u0435 ''{0}'' \u043f\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0443, \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c\u0443 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c - -GeneralCreateColumnFromRegexUI.regexLabel.text=\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435\: - -GeneralCreateColumnFromRegexUI.titleLabel.text=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u0442\u043e\u043b\u0431\u0446\u0430\: - +GeneralCreateColumnFromRegexUI.regexLabel.text=\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435: +GeneralCreateColumnFromRegexUI.regexTextField.text= +GeneralCreateColumnFromRegexUI.titleLabel.text=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u0442\u043e\u043b\u0431\u0446\u0430: +GeneralCreateColumnFromRegexUI.titleTextField.text= ColumnValuesFrequencyUI.configurePieChartButton.text=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u0440\u0443\u0433\u043e\u0432\u0443\u044e \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0443 - ColumnValuesFrequencyUI.showReportButton.text=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0442\u0447\u0451\u0442 - NumberColumnStatisticsReportUI.showReportButton.text=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0442\u0447\u0451\u0442 - NumberColumnStatisticsReportUI.configureBoxPlotButton.text=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c ''\u043a\u043e\u0440\u043e\u0431\u0447\u0430\u0442\u0443\u044e'' \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0443 - NumberColumnStatisticsReportUI.configureScatterPlotButton.text=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0443 \u0440\u0430\u0441\u0441\u0435\u0438\u0432\u0430\u043d\u0438\u044f - NumberColumnStatisticsReportUI.configureHistogramButton.text=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u0443 - NumberColumnStatisticsReportUI.useLinesCheckBox.text=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u044f\u043c\u044b\u0435 - NumberColumnStatisticsReportUI.useLinearRegression.text=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043b\u0438\u043d\u0435\u0439\u043d\u0443\u044e \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0438\u044e +NumberColumnStatisticsReportUI.divisionsLabel.text=Divisions: -NumberColumnStatisticsReportUI.divisionsLabel.text=Divisions\: - -!ConvertColumnToDynamicUI.descriptionLabel.text= - -!ConvertColumnToDynamicUI.new.title= - -!ConvertColumnToDynamicUI.titleLabel.text= - -!ConvertColumnToDynamicUI.intervalOpenCheckbox.text= - -!ConvertColumnToDynamicUI.intervalStartLabel.text= - -!ConvertColumnToDynamicUI.intervalStartText.text= -!ConvertColumnToDynamicUI.intervalEndLabel.text= +# ConvertColumnToDynamicUI.descriptionLabel.text=Convert column ''{0}'' to a dynamic column +# ConvertColumnToDynamicUI.new.title={0}_dynamic -!ConvertColumnToDynamicUI.intervalEndText.text= +# ConvertColumnToDynamicUI.intervalOpenCheckbox.text=Open +# ConvertColumnToDynamicUI.intervalStartLabel.text=Interval start: +# ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText=Replace original column with dynamic column instead of creating a new one +# ConvertColumnToDynamicUI.replaceColumnCheckbox.text=Replace column +ConvertColumnToDynamicUI.titleTextField.text= +ConvertColumnToDynamicUI.titleLabel.text=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u0442\u043e\u043b\u0431\u0446\u0430: +# ConvertColumnToDynamicUI.intervalEndLabel.text=Interval end: -!ConvertColumnToDynamicUI.replaceColumnCheckbox.text= +# ConvertColumnToDynamicTimestampsUI.timestampLabel.text=Timestamp +# ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.text=Replace column +ConvertColumnToDynamicTimestampsUI.titleTextField.text= +# ConvertColumnToDynamicTimestampsUI.titleLabel.text=Title: +# ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.toolTipText=Replace original column with dynamic column instead of creating a new one -!ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText= diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_th.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_tr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_tr.properties new file mode 100644 index 0000000000..b1d5186205 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_tr.properties @@ -0,0 +1,38 @@ +CopyDataToOtherColumnUI.sourceColumnLabel.text=Copy data from ''{0}'' +CopyDataToOtherColumnUI.descriptionLabel.text=Copy to: +DuplicateColumnUI.titleLabel.text=Ba\u015fl\u0131k: +DuplicateColumnUI.typeLabel.text=Type: +DuplicateColumnUI.titleTextField.text= +DuplicateColumnUI.new.title={0}_copy +DuplicateColumnUI.descriptionLabel.text=Duplicate ''{0}''. +GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean=Create a new boolean matches column from ''{0}'' +GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups=Create a new list of matching groups column from ''{0}'' +GeneralCreateColumnFromRegexUI.regexLabel.text=Regular expression: +GeneralCreateColumnFromRegexUI.regexTextField.text= +GeneralCreateColumnFromRegexUI.titleLabel.text=Ba\u015fl\u0131k: +GeneralCreateColumnFromRegexUI.titleTextField.text= +ColumnValuesFrequencyUI.configurePieChartButton.text=Configure pie chart +ColumnValuesFrequencyUI.showReportButton.text=Show report +NumberColumnStatisticsReportUI.showReportButton.text=Show report +NumberColumnStatisticsReportUI.configureBoxPlotButton.text=Configure box plot +NumberColumnStatisticsReportUI.configureScatterPlotButton.text=Configure scatter plot +NumberColumnStatisticsReportUI.configureHistogramButton.text=Configure histogram +NumberColumnStatisticsReportUI.useLinesCheckBox.text=Show lines +NumberColumnStatisticsReportUI.useLinearRegression.text=Do\u011frusal ba\u011flan\u0131m\u0131 (do\u011frusal regresyon) gφster +NumberColumnStatisticsReportUI.divisionsLabel.text=Divisions: + + +ConvertColumnToDynamicUI.descriptionLabel.text=Convert column ''{0}'' to a dynamic column +ConvertColumnToDynamicUI.new.title={0}_dynamic +ConvertColumnToDynamicUI.intervalOpenCheckbox.text=Open +ConvertColumnToDynamicUI.intervalStartLabel.text=Interval start: +ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText=Replace original column with dynamic column instead of creating a new one +ConvertColumnToDynamicUI.replaceColumnCheckbox.text=Replace column +ConvertColumnToDynamicUI.titleTextField.text= +ConvertColumnToDynamicUI.titleLabel.text=Ba\u015fl\u0131k: +ConvertColumnToDynamicUI.intervalEndLabel.text=Interval end: +ConvertColumnToDynamicTimestampsUI.timestampLabel.text=Timestamp +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.text=Replace column +ConvertColumnToDynamicTimestampsUI.titleTextField.text= +ConvertColumnToDynamicTimestampsUI.titleLabel.text=Title: +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.toolTipText=Replace original column with dynamic column instead of creating a new one diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_uk.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_uk.properties new file mode 100644 index 0000000000..be7c336349 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_uk.properties @@ -0,0 +1,36 @@ +GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean=\u0421\u0442\u0432\u043E\u0440\u0456\u0442\u044C \u043D\u043E\u0432\u0438\u0439 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C \u043B\u043E\u0433\u0456\u0447\u043D\u0438\u0445 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u043D\u043E\u0441\u0442\u0435\u0439 \u0456\u0437 ''{0}'' +CopyDataToOtherColumnUI.descriptionLabel.text=\u041A\u043E\u043F\u0456\u044E\u0432\u0430\u0442\u0438 \u0434\u043E: +ConvertColumnToDynamicUI.titleLabel.text=\u041D\u0430\u0437\u0432\u0430: +ColumnValuesFrequencyUI.showReportButton.text=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u0438 \u0437\u0432\u0456\u0442 +ConvertColumnToDynamicTimestampsUI.timestampLabel.text=\u041C\u0456\u0442\u043A\u0430 \u0447\u0430\u0441\u0443 +ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText=\u0417\u0430\u043C\u0456\u043D\u0456\u0442\u044C \u0432\u0438\u0445\u0456\u0434\u043D\u0438\u0439 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C \u0434\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0438\u043C \u0437\u0430\u043C\u0456\u0441\u0442\u044C \u0441\u0442\u0432\u043E\u0440\u0435\u043D\u043D\u044F \u043D\u043E\u0432\u043E\u0433\u043E +DuplicateColumnUI.titleTextField.text=\u0406 +CopyDataToOtherColumnUI.sourceColumnLabel.text=\u041A\u043E\u043F\u0456\u044E\u0432\u0430\u0442\u0438 \u0434\u0430\u043D\u0456 \u0437 ''{0}'' +ConvertColumnToDynamicUI.intervalEndLabel.text=\u041A\u0456\u043D\u0435\u0446\u044C \u0456\u043D\u0442\u0435\u0440\u0432\u0430\u043B\u0443: +DuplicateColumnUI.titleLabel.text=\u041D\u0430\u0437\u0432\u0430: +DuplicateColumnUI.typeLabel.text=\u0422\u0438\u043F: +DuplicateColumnUI.new.title={0}_\u043A\u043E\u043F\u0456\u044F +DuplicateColumnUI.descriptionLabel.text=\u0414\u0443\u0431\u043B\u0456\u043A\u0430\u0442 ''{0}''. +GeneralCreateColumnFromRegexUI.regexLabel.text=\u0420\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u0438\u0439 \u0432\u0438\u0440\u0430\u0437: +GeneralCreateColumnFromRegexUI.regexTextField.text=\u0406 +GeneralCreateColumnFromRegexUI.titleLabel.text=\u041D\u0430\u0437\u0432\u0430: +GeneralCreateColumnFromRegexUI.titleTextField.text=\u0406 +ColumnValuesFrequencyUI.configurePieChartButton.text=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u0442\u0438 \u0441\u0435\u043A\u0442\u043E\u0440\u043D\u0443 \u0434\u0456\u0430\u0433\u0440\u0430\u043C\u0443 +NumberColumnStatisticsReportUI.configureBoxPlotButton.text=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u0442\u0438 \u0434\u0456\u0430\u0433\u0440\u0430\u043C\u0443 \u043A\u043E\u0440\u043E\u0431\u043A\u0438 +NumberColumnStatisticsReportUI.configureScatterPlotButton.text=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u0442\u0438 \u0434\u0456\u0430\u0433\u0440\u0430\u043C\u0443 \u0440\u043E\u0437\u0441\u0456\u044E\u0432\u0430\u043D\u043D\u044F +NumberColumnStatisticsReportUI.configureHistogramButton.text=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u0442\u0438 \u0433\u0456\u0441\u0442\u043E\u0433\u0440\u0430\u043C\u0443 +NumberColumnStatisticsReportUI.useLinesCheckBox.text=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u0438 \u0440\u044F\u0434\u043A\u0438 +NumberColumnStatisticsReportUI.useLinearRegression.text=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u0438 \u043B\u0456\u043D\u0456\u0439\u043D\u0443 \u0440\u0435\u0433\u0440\u0435\u0441\u0456\u044E +ConvertColumnToDynamicUI.new.title={0}_\u0434\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0438\u0439 +ConvertColumnToDynamicUI.intervalOpenCheckbox.text=\u0412\u0456\u0434\u043A\u0440\u0438\u0442\u0438 +ConvertColumnToDynamicUI.intervalStartLabel.text=\u041F\u043E\u0447\u0430\u0442\u043E\u043A \u0456\u043D\u0442\u0435\u0440\u0432\u0430\u043B\u0443: +ConvertColumnToDynamicUI.replaceColumnCheckbox.text=\u0417\u0430\u043C\u0456\u043D\u0438\u0442\u0438 \u043A\u043E\u043B\u043E\u043D\u043A\u0443 +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.text=\u0417\u0430\u043C\u0456\u043D\u0438\u0442\u0438 \u043A\u043E\u043B\u043E\u043D\u043A\u0443 +ConvertColumnToDynamicTimestampsUI.titleTextField.text=\u0406 +GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups=\u0421\u0442\u0432\u043E\u0440\u0456\u0442\u044C \u043D\u043E\u0432\u0438\u0439 \u0441\u043F\u0438\u0441\u043E\u043A \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u043D\u0438\u0445 \u0441\u0442\u043E\u0432\u043F\u0446\u0456\u0432 \u0433\u0440\u0443\u043F \u0456\u0437 ''{0}'' +ConvertColumnToDynamicUI.titleTextField.text=\u0406 +NumberColumnStatisticsReportUI.showReportButton.text=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u0438 \u0437\u0432\u0456\u0442 +ConvertColumnToDynamicTimestampsUI.titleLabel.text=\u041D\u0430\u0437\u0432\u0430: +NumberColumnStatisticsReportUI.divisionsLabel.text=\u041F\u0456\u0434\u0440\u043E\u0437\u0434\u0456\u043B\u0438: +ConvertColumnToDynamicUI.descriptionLabel.text=\u041F\u0435\u0440\u0435\u0442\u0432\u043E\u0440\u0438\u0442\u0438 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C ''{0}'' \u043D\u0430 \u0434\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0438\u0439 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.toolTipText=\u0417\u0430\u043C\u0456\u043D\u0456\u0442\u044C \u0432\u0438\u0445\u0456\u0434\u043D\u0438\u0439 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C \u0434\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0438\u043C \u0437\u0430\u043C\u0456\u0441\u0442\u044C \u0441\u0442\u0432\u043E\u0440\u0435\u043D\u043D\u044F \u043D\u043E\u0432\u043E\u0433\u043E diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_zh_CN.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_zh_CN.properties index 0b27cb2beb..82dfd7181f 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_zh_CN.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_zh_CN.properties @@ -1,64 +1,38 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:16+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - CopyDataToOtherColumnUI.sourceColumnLabel.text=\u4ece\u201c{0}\u201d\u590d\u5236\u6570\u636e - CopyDataToOtherColumnUI.descriptionLabel.text=\u590d\u5236\u5230\uff1a - DuplicateColumnUI.titleLabel.text=\u6807\u9898\uff1a - DuplicateColumnUI.typeLabel.text=\u7c7b\u578b\uff1a - +DuplicateColumnUI.titleTextField.text= DuplicateColumnUI.new.title={0}_\u590d\u5236 - -DuplicateColumnUI.descriptionLabel.text=\u590d\u5236\u201c{0}\u201d - +DuplicateColumnUI.descriptionLabel.text=\u590D\u5236 \u201C{0}\u201D. GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean=\u65b0\u5efa\u4e0e\u201c{0}\u201d\u5217\u5339\u914d\u7684\u5e03\u5c14\u578b - GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups=\u65b0\u5efa\u4e0e\u201c{0}\u201d\u5217\u7ec4\u5339\u914d\u7684\u5217\u8868 - GeneralCreateColumnFromRegexUI.regexLabel.text=\u6b63\u5219\u8868\u8fbe\u5f0f\uff1a - +GeneralCreateColumnFromRegexUI.regexTextField.text= GeneralCreateColumnFromRegexUI.titleLabel.text=\u6807\u9898\uff1a - +GeneralCreateColumnFromRegexUI.titleTextField.text= ColumnValuesFrequencyUI.configurePieChartButton.text=\u8bbe\u7f6e\u5706\u5f62\u5206\u683c\u7edf\u8ba1\u56fe\u8868 - ColumnValuesFrequencyUI.showReportButton.text=\u663e\u793a\u62a5\u544a - NumberColumnStatisticsReportUI.showReportButton.text=\u663e\u793a\u62a5\u544a - NumberColumnStatisticsReportUI.configureBoxPlotButton.text=\u8bbe\u7f6e - NumberColumnStatisticsReportUI.configureScatterPlotButton.text=\u8bbe\u7f6e\u76d2\u578b\u56fe - NumberColumnStatisticsReportUI.configureHistogramButton.text=\u8bbe\u7f6e\u76f4\u65b9\u56fe - NumberColumnStatisticsReportUI.useLinesCheckBox.text=\u663e\u793a\u7ebf - NumberColumnStatisticsReportUI.useLinearRegression.text=\u663e\u793a\u7ebf\u6027\u56de\u5f52 - NumberColumnStatisticsReportUI.divisionsLabel.text=\u5206\u7c7b\uff1a -!ConvertColumnToDynamicUI.descriptionLabel.text= - -!ConvertColumnToDynamicUI.new.title= - -!ConvertColumnToDynamicUI.titleLabel.text= - -!ConvertColumnToDynamicUI.intervalOpenCheckbox.text= - -!ConvertColumnToDynamicUI.intervalStartLabel.text= - -!ConvertColumnToDynamicUI.intervalStartText.text= - -!ConvertColumnToDynamicUI.intervalEndLabel.text= - -!ConvertColumnToDynamicUI.intervalEndText.text= - -!ConvertColumnToDynamicUI.replaceColumnCheckbox.text= -!ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText= +ConvertColumnToDynamicUI.descriptionLabel.text=\u8f6c\u6362\u5217 ''{0}'' \u4e3a\u52a8\u6001\u5217 +ConvertColumnToDynamicUI.new.title={0}_\u52a8\u6001 +ConvertColumnToDynamicUI.intervalOpenCheckbox.text=\u6253\u5f00 +ConvertColumnToDynamicUI.intervalStartLabel.text=\u95F4\u9694\u5F00\u5934\uFF1A +ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText=\u66f4\u6362\u800c\u4e0d\u662f\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u52a8\u6001\u5217\u539f\u59cb\u5217 +ConvertColumnToDynamicUI.replaceColumnCheckbox.text=\u66ff\u6362\u5217 +ConvertColumnToDynamicUI.titleTextField.text= +ConvertColumnToDynamicUI.titleLabel.text=\u6807\u9898\uff1a +ConvertColumnToDynamicUI.intervalEndLabel.text=\u95F4\u9694\u7ED3\u5C3E\uFF1A +ConvertColumnToDynamicTimestampsUI.timestampLabel.text=\u65f6\u95f4\u6233 +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.text=\u66ff\u6362\u5217 +ConvertColumnToDynamicTimestampsUI.titleTextField.text= +ConvertColumnToDynamicTimestampsUI.titleLabel.text=\u6807\u9898\uff1a +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.toolTipText=\u66f4\u6362\u800c\u4e0d\u662f\u521b\u5efa\u4e00\u4e2a\u65b0\u7684\u52a8\u6001\u5217\u539f\u59cb\u5217 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_zh_TW.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_zh_TW.properties new file mode 100644 index 0000000000..e3c3f7c6c5 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/Bundle_zh_TW.properties @@ -0,0 +1,38 @@ +CopyDataToOtherColumnUI.sourceColumnLabel.text=Copy data from ''{0}'' +CopyDataToOtherColumnUI.descriptionLabel.text=Copy to: +DuplicateColumnUI.titleLabel.text=Title: +DuplicateColumnUI.typeLabel.text=Type: +DuplicateColumnUI.titleTextField.text= +DuplicateColumnUI.new.title={0}_copy +DuplicateColumnUI.descriptionLabel.text=Duplicate ''{0}''. +GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean=Create a new boolean matches column from ''{0}'' +GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups=Create a new list of matching groups column from ''{0}'' +GeneralCreateColumnFromRegexUI.regexLabel.text=Regular expression: +GeneralCreateColumnFromRegexUI.regexTextField.text= +GeneralCreateColumnFromRegexUI.titleLabel.text=Title: +GeneralCreateColumnFromRegexUI.titleTextField.text= +ColumnValuesFrequencyUI.configurePieChartButton.text=Configure pie chart +ColumnValuesFrequencyUI.showReportButton.text=Show report +NumberColumnStatisticsReportUI.showReportButton.text=Show report +NumberColumnStatisticsReportUI.configureBoxPlotButton.text=Configure box plot +NumberColumnStatisticsReportUI.configureScatterPlotButton.text=Configure scatter plot +NumberColumnStatisticsReportUI.configureHistogramButton.text=Configure histogram +NumberColumnStatisticsReportUI.useLinesCheckBox.text=Show lines +NumberColumnStatisticsReportUI.useLinearRegression.text=Show linear regression +NumberColumnStatisticsReportUI.divisionsLabel.text=Divisions: + + +ConvertColumnToDynamicUI.descriptionLabel.text=Convert column ''{0}'' to a dynamic column +ConvertColumnToDynamicUI.new.title={0}_dynamic +ConvertColumnToDynamicUI.intervalOpenCheckbox.text=Open +ConvertColumnToDynamicUI.intervalStartLabel.text=Interval start: +ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText=Replace original column with dynamic column instead of creating a new one +ConvertColumnToDynamicUI.replaceColumnCheckbox.text=Replace column +ConvertColumnToDynamicUI.titleTextField.text= +ConvertColumnToDynamicUI.titleLabel.text=Title: +ConvertColumnToDynamicUI.intervalEndLabel.text=Interval end: +ConvertColumnToDynamicTimestampsUI.timestampLabel.text=Timestamp +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.text=Replace column +ConvertColumnToDynamicTimestampsUI.titleTextField.text= +ConvertColumnToDynamicTimestampsUI.titleLabel.text=Title: +ConvertColumnToDynamicTimestampsUI.replaceColumnCheckbox.toolTipText=Replace original column with dynamic column instead of creating a new one diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/cs.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/cs.po deleted file mode 100644 index 53ec754895..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/cs.po +++ /dev/null @@ -1,106 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:16+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "CopyDataToOtherColumnUI.sourceColumnLabel.text" -msgstr "KopΓ­rovat data z ''{0}''" - -msgid "CopyDataToOtherColumnUI.descriptionLabel.text" -msgstr "KopΓ­rovat do:" - -msgid "DuplicateColumnUI.titleLabel.text" -msgstr "NΓ‘zev:" - -msgid "DuplicateColumnUI.typeLabel.text" -msgstr "Typ:" - -msgid "DuplicateColumnUI.new.title" -msgstr "{0}_kopie" - -msgid "DuplicateColumnUI.descriptionLabel.text" -msgstr "KopΓ­rovat ''{0}''." - -msgid "GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean" -msgstr "VytvoΕ™it novΓ½ sloupec booleovskΓ½ch shod z ''{0}''" - -msgid "GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups" -msgstr "VytvoΕ™it novΓ½ sloupec seznamu shodujΓ­cΓ­ch se skupin z ''{0}''" - -msgid "GeneralCreateColumnFromRegexUI.regexLabel.text" -msgstr "RegulΓ‘rnΓ­ vΓ½raz:" - -msgid "GeneralCreateColumnFromRegexUI.titleLabel.text" -msgstr "NΓ‘zev:" - -msgid "ColumnValuesFrequencyUI.configurePieChartButton.text" -msgstr "Nastavit kolÑčovΓ½ graf" - -msgid "ColumnValuesFrequencyUI.showReportButton.text" -msgstr "Zobrazit zΓ‘znam" - -msgid "NumberColumnStatisticsReportUI.showReportButton.text" -msgstr "Zobrazit zΓ‘znam" - -msgid "NumberColumnStatisticsReportUI.configureBoxPlotButton.text" -msgstr "Nastavit burzovnΓ­ graf" - -msgid "NumberColumnStatisticsReportUI.configureScatterPlotButton.text" -msgstr "Nastavit bodovΓ½ graf" - -msgid "NumberColumnStatisticsReportUI.configureHistogramButton.text" -msgstr "Nastavit histogram" - -msgid "NumberColumnStatisticsReportUI.useLinesCheckBox.text" -msgstr "Zobrazit čÑry" - -msgid "NumberColumnStatisticsReportUI.useLinearRegression.text" -msgstr "Zobrazit lineΓ‘rnΓ­ regresi" - -msgid "NumberColumnStatisticsReportUI.divisionsLabel.text" -msgstr "OddΓ­ly:" - -msgid "ConvertColumnToDynamicUI.descriptionLabel.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.new.title" -msgstr "" - -msgid "ConvertColumnToDynamicUI.titleLabel.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalOpenCheckbox.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalStartLabel.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalStartText.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalEndLabel.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalEndText.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.replaceColumnCheckbox.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText" -msgstr "" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/es.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/es.po deleted file mode 100644 index 8002eb9d2f..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/es.po +++ /dev/null @@ -1,107 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:37+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "CopyDataToOtherColumnUI.sourceColumnLabel.text" -msgstr "Copiar datos de ''{0}''" - -msgid "CopyDataToOtherColumnUI.descriptionLabel.text" -msgstr "Copiar a:" - -msgid "DuplicateColumnUI.titleLabel.text" -msgstr "TΓ­tulo:" - -msgid "DuplicateColumnUI.typeLabel.text" -msgstr "Tipo:" - -msgid "DuplicateColumnUI.new.title" -msgstr "{0}_copia" - -msgid "DuplicateColumnUI.descriptionLabel.text" -msgstr "Duplicar ''{0}''." - -msgid "GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean" -msgstr "Crear columna booleana a partir de expresiΓ³n regular en ''{0}''" - -msgid "GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups" -msgstr "Creando columna de grupos que se ajustan a una expresiΓ³n regular en ''{0}''" - -msgid "GeneralCreateColumnFromRegexUI.regexLabel.text" -msgstr "ExpresiΓ³n regular:" - -msgid "GeneralCreateColumnFromRegexUI.titleLabel.text" -msgstr "TΓ­tulo:" - -msgid "ColumnValuesFrequencyUI.configurePieChartButton.text" -msgstr "Configurar grΓ‘fico de tarta" - -msgid "ColumnValuesFrequencyUI.showReportButton.text" -msgstr "Mostrar informe" - -msgid "NumberColumnStatisticsReportUI.showReportButton.text" -msgstr "Mostrar informe" - -msgid "NumberColumnStatisticsReportUI.configureBoxPlotButton.text" -msgstr "Configurar diagrama de cajas" - -msgid "NumberColumnStatisticsReportUI.configureScatterPlotButton.text" -msgstr "Configurar diagrama de dispersiΓ³n" - -msgid "NumberColumnStatisticsReportUI.configureHistogramButton.text" -msgstr "Configurar histograma" - -msgid "NumberColumnStatisticsReportUI.useLinesCheckBox.text" -msgstr "Mostrar lΓ­neas" - -msgid "NumberColumnStatisticsReportUI.useLinearRegression.text" -msgstr "Mostrar regresiΓ³n lineal" - -msgid "NumberColumnStatisticsReportUI.divisionsLabel.text" -msgstr "Divisiones:" - -msgid "ConvertColumnToDynamicUI.descriptionLabel.text" -msgstr "Convertir columna \"{0}\" a dinΓ‘mica" - -msgid "ConvertColumnToDynamicUI.new.title" -msgstr "{0}_dinamico" - -msgid "ConvertColumnToDynamicUI.titleLabel.text" -msgstr "TΓ­tulo:" - -msgid "ConvertColumnToDynamicUI.intervalOpenCheckbox.text" -msgstr "Abierto" - -msgid "ConvertColumnToDynamicUI.intervalStartLabel.text" -msgstr "Inicio del intΓ©rvalo:" - -msgid "ConvertColumnToDynamicUI.intervalStartText.text" -msgstr "-Infinity" - -msgid "ConvertColumnToDynamicUI.intervalEndLabel.text" -msgstr "Fin del intΓ©rvalo:" - -msgid "ConvertColumnToDynamicUI.intervalEndText.text" -msgstr "Infinity" - -msgid "ConvertColumnToDynamicUI.replaceColumnCheckbox.text" -msgstr "Reemplazar columna" - -msgid "ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText" -msgstr "Reemplazar columna original por columna dinΓ‘mica en lugar de crear una nueva" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/fr.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/fr.po deleted file mode 100644 index 39802616df..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/fr.po +++ /dev/null @@ -1,106 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:16+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "CopyDataToOtherColumnUI.sourceColumnLabel.text" -msgstr "Copier les donnΓ©es de ''{0}''" - -msgid "CopyDataToOtherColumnUI.descriptionLabel.text" -msgstr "Copier vers :" - -msgid "DuplicateColumnUI.titleLabel.text" -msgstr "Titre :" - -msgid "DuplicateColumnUI.typeLabel.text" -msgstr "Type :" - -msgid "DuplicateColumnUI.new.title" -msgstr "{0}_copy" - -msgid "DuplicateColumnUI.descriptionLabel.text" -msgstr "Dupliquer ''{0}''." - -msgid "GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean" -msgstr "CrΓ©er une colonne boolΓ©enne depuis ''{0}''" - -msgid "GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups" -msgstr "CrΓ©er une colonne de liste boolΓ©enne depuis ''{0}''" - -msgid "GeneralCreateColumnFromRegexUI.regexLabel.text" -msgstr "Expression rationnelle :" - -msgid "GeneralCreateColumnFromRegexUI.titleLabel.text" -msgstr "Titre :" - -msgid "ColumnValuesFrequencyUI.configurePieChartButton.text" -msgstr "Configurer le diagramme circulaire" - -msgid "ColumnValuesFrequencyUI.showReportButton.text" -msgstr "Afficher le rapport" - -msgid "NumberColumnStatisticsReportUI.showReportButton.text" -msgstr "Afficher le rapport" - -msgid "NumberColumnStatisticsReportUI.configureBoxPlotButton.text" -msgstr "Configurer la boΓte Γ  moustaches" - -msgid "NumberColumnStatisticsReportUI.configureScatterPlotButton.text" -msgstr "Configurer le nuage de points" - -msgid "NumberColumnStatisticsReportUI.configureHistogramButton.text" -msgstr "Configurer l'histogramme" - -msgid "NumberColumnStatisticsReportUI.useLinesCheckBox.text" -msgstr "Afficher les lignes" - -msgid "NumberColumnStatisticsReportUI.useLinearRegression.text" -msgstr "Afficher la rΓ©gression linΓ©aire" - -msgid "NumberColumnStatisticsReportUI.divisionsLabel.text" -msgstr "Divisions :" - -msgid "ConvertColumnToDynamicUI.descriptionLabel.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.new.title" -msgstr "" - -msgid "ConvertColumnToDynamicUI.titleLabel.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalOpenCheckbox.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalStartLabel.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalStartText.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalEndLabel.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalEndText.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.replaceColumnCheckbox.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText" -msgstr "" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/ja.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/ja.po deleted file mode 100644 index e68b428d80..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/ja.po +++ /dev/null @@ -1,106 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:16+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "CopyDataToOtherColumnUI.sourceColumnLabel.text" -msgstr "''{0}''からデータをコピー" - -msgid "CopyDataToOtherColumnUI.descriptionLabel.text" -msgstr "コピー:" - -msgid "DuplicateColumnUI.titleLabel.text" -msgstr "γ‚Ώγ‚€γƒˆγƒ«:" - -msgid "DuplicateColumnUI.typeLabel.text" -msgstr "η¨ι‘ž:" - -msgid "DuplicateColumnUI.new.title" -msgstr "{0}_コピー" - -msgid "DuplicateColumnUI.descriptionLabel.text" -msgstr "''{0}''を耇写" - -msgid "GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean" -msgstr "''{0}''γ‹γ‚‰ζ–°θ¦θ«–η†εž‹γδΈ€θ‡΄γ™γ‚‹εˆ—γ‚’δ½œζˆ" - -msgid "GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups" -msgstr "''{0}''からγγ‚°γƒ«γƒΌγƒ—γεˆ—γ‚’γƒžγƒƒγƒγƒ³γ‚°γζ–°θ¦γƒͺγ‚Ήγƒˆγ‚’δ½œζˆ" - -msgid "GeneralCreateColumnFromRegexUI.regexLabel.text" -msgstr "正規葨現:" - -msgid "GeneralCreateColumnFromRegexUI.titleLabel.text" -msgstr "γ‚Ώγ‚€γƒˆγƒ«:" - -msgid "ColumnValuesFrequencyUI.configurePieChartButton.text" -msgstr "円グラフγθ¨­εš" - -msgid "ColumnValuesFrequencyUI.showReportButton.text" -msgstr "ε ±ε‘Šγ‚’ι–²θ¦§" - -msgid "NumberColumnStatisticsReportUI.showReportButton.text" -msgstr "ε ±ε‘Šγ‚’ι–²θ¦§" - -msgid "NumberColumnStatisticsReportUI.configureBoxPlotButton.text" -msgstr "η±γƒ’γ‚²ε›³γθ¨­εš" - -msgid "NumberColumnStatisticsReportUI.configureScatterPlotButton.text" -msgstr "ζ•£εΈƒε›³γθ¨­εš" - -msgid "NumberColumnStatisticsReportUI.configureHistogramButton.text" -msgstr "γƒ’γ‚Ήγƒˆγ‚°γƒ©γƒ γθ¨­εš" - -msgid "NumberColumnStatisticsReportUI.useLinesCheckBox.text" -msgstr "η·šγ‚’θ‘¨η€Ί" - -msgid "NumberColumnStatisticsReportUI.useLinearRegression.text" -msgstr "ε›žεΈ°η›΄η·šγθ‘¨η€Ί" - -msgid "NumberColumnStatisticsReportUI.divisionsLabel.text" -msgstr "部門:" - -msgid "ConvertColumnToDynamicUI.descriptionLabel.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.new.title" -msgstr "" - -msgid "ConvertColumnToDynamicUI.titleLabel.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalOpenCheckbox.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalStartLabel.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalStartText.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalEndLabel.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalEndText.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.replaceColumnCheckbox.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText" -msgstr "" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/org-gephi-datalab-plugin-manipulators-columns-ui.pot b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/org-gephi-datalab-plugin-manipulators-columns-ui.pot deleted file mode 100644 index cffac3a0a3..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/org-gephi-datalab-plugin-manipulators-columns-ui.pot +++ /dev/null @@ -1,104 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "CopyDataToOtherColumnUI.sourceColumnLabel.text" -msgstr "Copy data from ''{0}''" - -msgid "CopyDataToOtherColumnUI.descriptionLabel.text" -msgstr "Copy to:" - -msgid "DuplicateColumnUI.titleLabel.text" -msgstr "Title:" - -msgid "DuplicateColumnUI.typeLabel.text" -msgstr "Type:" - -msgid "DuplicateColumnUI.new.title" -msgstr "{0}_copy" - -msgid "DuplicateColumnUI.descriptionLabel.text" -msgstr "Duplicate ''{0}''." - -msgid "GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean" -msgstr "Create a new boolean matches column from ''{0}''" - -msgid "GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups" -msgstr "Create a new list of matching groups column from ''{0}''" - -msgid "GeneralCreateColumnFromRegexUI.regexLabel.text" -msgstr "Regular expression:" - -msgid "GeneralCreateColumnFromRegexUI.titleLabel.text" -msgstr "Title:" - -msgid "ColumnValuesFrequencyUI.configurePieChartButton.text" -msgstr "Configure pie chart" - -msgid "ColumnValuesFrequencyUI.showReportButton.text" -msgstr "Show report" - -msgid "NumberColumnStatisticsReportUI.showReportButton.text" -msgstr "Show report" - -msgid "NumberColumnStatisticsReportUI.configureBoxPlotButton.text" -msgstr "Configure box plot" - -msgid "NumberColumnStatisticsReportUI.configureScatterPlotButton.text" -msgstr "Configure scatter plot" - -msgid "NumberColumnStatisticsReportUI.configureHistogramButton.text" -msgstr "Configure histogram" - -msgid "NumberColumnStatisticsReportUI.useLinesCheckBox.text" -msgstr "Show lines" - -msgid "NumberColumnStatisticsReportUI.useLinearRegression.text" -msgstr "Show linear regression" - -msgid "NumberColumnStatisticsReportUI.divisionsLabel.text" -msgstr "Divisions:" - -msgid "ConvertColumnToDynamicUI.descriptionLabel.text" -msgstr "Convert column ''{0}'' to a dynamic column" - -msgid "ConvertColumnToDynamicUI.new.title" -msgstr "{0}_dynamic" - -msgid "ConvertColumnToDynamicUI.titleLabel.text" -msgstr "Title:" - -msgid "ConvertColumnToDynamicUI.intervalOpenCheckbox.text" -msgstr "Open" - -msgid "ConvertColumnToDynamicUI.intervalStartLabel.text" -msgstr "Interval start:" - -msgid "ConvertColumnToDynamicUI.intervalStartText.text" -msgstr "-Infinity" - -msgid "ConvertColumnToDynamicUI.intervalEndLabel.text" -msgstr "Interval end:" - -msgid "ConvertColumnToDynamicUI.intervalEndText.text" -msgstr "Infinity" - -msgid "ConvertColumnToDynamicUI.replaceColumnCheckbox.text" -msgstr "Replace column" - -msgid "ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText" -msgstr "" -"Replace original column with dynamic column instead of creating a new one" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/pt_BR.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/pt_BR.po deleted file mode 100644 index 3082b9ecc4..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/pt_BR.po +++ /dev/null @@ -1,106 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:16+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "CopyDataToOtherColumnUI.sourceColumnLabel.text" -msgstr "Copiar dados de ''{0}''" - -msgid "CopyDataToOtherColumnUI.descriptionLabel.text" -msgstr "Copiar para:" - -msgid "DuplicateColumnUI.titleLabel.text" -msgstr "TΓ­tulo:" - -msgid "DuplicateColumnUI.typeLabel.text" -msgstr "Tipo:" - -msgid "DuplicateColumnUI.new.title" -msgstr "{0} _cΓ³pia" - -msgid "DuplicateColumnUI.descriptionLabel.text" -msgstr "Duplicar ''{0}''." - -msgid "GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean" -msgstr "Criar coluna booleana a partir de uma expressΓ£o regular em ''{0}''" - -msgid "GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups" -msgstr "Criando coluna de grupos que atendem a uma expressΓ£o regular em ''{0}''" - -msgid "GeneralCreateColumnFromRegexUI.regexLabel.text" -msgstr "ExpressΓ£o regular:" - -msgid "GeneralCreateColumnFromRegexUI.titleLabel.text" -msgstr "TΓ­tulo:" - -msgid "ColumnValuesFrequencyUI.configurePieChartButton.text" -msgstr "Configurar grΓ‘fico de pizza" - -msgid "ColumnValuesFrequencyUI.showReportButton.text" -msgstr "Exibir relatΓ³rio" - -msgid "NumberColumnStatisticsReportUI.showReportButton.text" -msgstr "Exibir relatΓ³rio" - -msgid "NumberColumnStatisticsReportUI.configureBoxPlotButton.text" -msgstr "Configurar grΓ‘fico de caixa" - -msgid "NumberColumnStatisticsReportUI.configureScatterPlotButton.text" -msgstr "Configurar grΓ‘fico de dispersΓ£o" - -msgid "NumberColumnStatisticsReportUI.configureHistogramButton.text" -msgstr "Configurar histograma" - -msgid "NumberColumnStatisticsReportUI.useLinesCheckBox.text" -msgstr "Exibir linhas" - -msgid "NumberColumnStatisticsReportUI.useLinearRegression.text" -msgstr "Exibir regressΓ£o linear" - -msgid "NumberColumnStatisticsReportUI.divisionsLabel.text" -msgstr "DivisΓ΅es:" - -msgid "ConvertColumnToDynamicUI.descriptionLabel.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.new.title" -msgstr "" - -msgid "ConvertColumnToDynamicUI.titleLabel.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalOpenCheckbox.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalStartLabel.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalStartText.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalEndLabel.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalEndText.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.replaceColumnCheckbox.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText" -msgstr "" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/ru.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/ru.po deleted file mode 100644 index 6f372287c4..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/ru.po +++ /dev/null @@ -1,106 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:16+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "CopyDataToOtherColumnUI.sourceColumnLabel.text" -msgstr "ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠ· столбца ''{0}''" - -msgid "CopyDataToOtherColumnUI.descriptionLabel.text" -msgstr "Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ Ρ†Π΅Π»Π΅Π²ΠΎΠΉ столбСц для копирования:" - -msgid "DuplicateColumnUI.titleLabel.text" -msgstr "Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ столбца:" - -msgid "DuplicateColumnUI.typeLabel.text" -msgstr "Π’ΠΈΠΏ столбца:" - -msgid "DuplicateColumnUI.new.title" -msgstr "{0}_copy" - -msgid "DuplicateColumnUI.descriptionLabel.text" -msgstr "Π”ΡƒΠ±Π»ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ столбца ''{0}''." - -msgid "GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean" -msgstr "Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ столбца с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠΌ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ соотвСтствия столбца ''{0}'' рСгулярному Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΡŽ" - -msgid "GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups" -msgstr "Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ столбца с Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ поиска Π² столбцС ''{0}'' ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ, Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡƒ рСгулярным Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ" - -msgid "GeneralCreateColumnFromRegexUI.regexLabel.text" -msgstr "РСгулярноС Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅:" - -msgid "GeneralCreateColumnFromRegexUI.titleLabel.text" -msgstr "Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ столбца:" - -msgid "ColumnValuesFrequencyUI.configurePieChartButton.text" -msgstr "ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΊΡ€ΡƒΠ³ΠΎΠ²ΡƒΡŽ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ" - -msgid "ColumnValuesFrequencyUI.showReportButton.text" -msgstr "ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΡ‚Ρ‡Ρ‘Ρ‚" - -msgid "NumberColumnStatisticsReportUI.showReportButton.text" -msgstr "ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΡ‚Ρ‡Ρ‘Ρ‚" - -msgid "NumberColumnStatisticsReportUI.configureBoxPlotButton.text" -msgstr "ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ''ΠΊΠΎΡ€ΠΎΠ±Ρ‡Π°Ρ‚ΡƒΡŽ'' Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ" - -msgid "NumberColumnStatisticsReportUI.configureScatterPlotButton.text" -msgstr "ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ рассСивания" - -msgid "NumberColumnStatisticsReportUI.configureHistogramButton.text" -msgstr "ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ гистограмму" - -msgid "NumberColumnStatisticsReportUI.useLinesCheckBox.text" -msgstr "Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ прямыС" - -msgid "NumberColumnStatisticsReportUI.useLinearRegression.text" -msgstr "Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π»ΠΈΠ½Π΅ΠΉΠ½ΡƒΡŽ Ρ€Π΅Π³Ρ€Π΅ΡΡΠΈΡŽ" - -msgid "NumberColumnStatisticsReportUI.divisionsLabel.text" -msgstr "Divisions:" - -msgid "ConvertColumnToDynamicUI.descriptionLabel.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.new.title" -msgstr "" - -msgid "ConvertColumnToDynamicUI.titleLabel.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalOpenCheckbox.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalStartLabel.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalStartText.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalEndLabel.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalEndText.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.replaceColumnCheckbox.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText" -msgstr "" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/zh_CN.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/zh_CN.po deleted file mode 100644 index b8974d218d..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/ui/zh_CN.po +++ /dev/null @@ -1,105 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:16+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "CopyDataToOtherColumnUI.sourceColumnLabel.text" -msgstr "δ»Žβ€œ{0}β€ε€εˆΆζ•°ζ" - -msgid "CopyDataToOtherColumnUI.descriptionLabel.text" -msgstr "倍刢到:" - -msgid "DuplicateColumnUI.titleLabel.text" -msgstr "ζ ‡ι’˜οΌš" - -msgid "DuplicateColumnUI.typeLabel.text" -msgstr "η±»εž‹οΌš" - -msgid "DuplicateColumnUI.new.title" -msgstr "{0}_倍刢" - -msgid "DuplicateColumnUI.descriptionLabel.text" -msgstr "ε€εˆΆβ€œ{0}”" - -msgid "GeneralCreateColumnFromRegexUI.descriptionLabel.text.boolean" -msgstr "ζ–°ε»ΊδΈŽβ€œ{0}β€εˆ—εŒΉι…ηš„εΈƒε°”εž‹" - -msgid "GeneralCreateColumnFromRegexUI.descriptionLabel.text.matching_groups" -msgstr "ζ–°ε»ΊδΈŽβ€œ{0}β€εˆ—η»„εŒΉι…ηš„εˆ—θ‘¨" - -msgid "GeneralCreateColumnFromRegexUI.regexLabel.text" -msgstr "ζ­£εˆ™θ‘¨θΎΎεΌοΌš" - -msgid "GeneralCreateColumnFromRegexUI.titleLabel.text" -msgstr "ζ ‡ι’˜οΌš" - -msgid "ColumnValuesFrequencyUI.configurePieChartButton.text" -msgstr "θΎη½εœ†ε½’εˆ†ζ Όη»Ÿθ‘图葨" - -msgid "ColumnValuesFrequencyUI.showReportButton.text" -msgstr "显瀺ζŠ₯ε‘Š" - -msgid "NumberColumnStatisticsReportUI.showReportButton.text" -msgstr "显瀺ζŠ₯ε‘Š" - -msgid "NumberColumnStatisticsReportUI.configureBoxPlotButton.text" -msgstr "θΎη½" - -msgid "NumberColumnStatisticsReportUI.configureScatterPlotButton.text" -msgstr "θΎη½η›’εž‹ε›Ύ" - -msgid "NumberColumnStatisticsReportUI.configureHistogramButton.text" -msgstr "θΎη½η›΄ζ–Ήε›Ύ" - -msgid "NumberColumnStatisticsReportUI.useLinesCheckBox.text" -msgstr "显瀺线" - -msgid "NumberColumnStatisticsReportUI.useLinearRegression.text" -msgstr "ζ˜Ύη€ΊηΊΏζ€§ε›žε½’" - -msgid "NumberColumnStatisticsReportUI.divisionsLabel.text" -msgstr "εˆ†η±»οΌš" - -msgid "ConvertColumnToDynamicUI.descriptionLabel.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.new.title" -msgstr "" - -msgid "ConvertColumnToDynamicUI.titleLabel.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalOpenCheckbox.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalStartLabel.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalStartText.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalEndLabel.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.intervalEndText.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.replaceColumnCheckbox.text" -msgstr "" - -msgid "ConvertColumnToDynamicUI.replaceColumnCheckbox.toolTipText" -msgstr "" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/zh_CN.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/zh_CN.po deleted file mode 100644 index 0b5eb22367..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/columns/zh_CN.po +++ /dev/null @@ -1,84 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:16+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "DeleteColumn.name" -msgstr "εˆ ι™€εˆ—" - -msgid "DeleteColumn.confirmation.message" -msgstr "η‘θ€εˆ ι™€β€œ{0}β€οΌŸ" - -msgid "ClearColumnData.name" -msgstr "ζΈ…ι™€εˆ—" - -msgid "ClearColumnData.confirmation.message" -msgstr "η‘θ€ζΈ…ι™€β€œ{0}β€οΌŸ" - -msgid "CopyDataToOtherColumn.name" -msgstr "ε€εˆΆζ•°ζεˆ°ε…Άεƒεˆ—" - -msgid "FillColumnWithValue.name" -msgstr "ε‘«ε†™ζ•°ε€Όεˆ°εˆ—" - -msgid "FillColumnWithValue.inputDialog.text" -msgstr "ι€‰ζ‹©ε‘«ε†™εˆ°ζ‰€ζœ‰θ‘Œηš„ζ•°ε€ΌοΌš" - -msgid "DuplicateColumn.name" -msgstr "ε€εˆΆεˆ—ζ•°ζ" - -msgid "ColumnValuesFrequency.name" -msgstr "θ‘η—ζ•°ε€Όι’‘ηŽ‡" - -msgid "ColumnValuesFrequency.description" -msgstr "θ‘η—每δΈͺζ•°ε€Όε‡ΊηŽ°ηš„ι’‘ηŽ‡γ€‚" - -msgid "ColumnValuesFrequency.report.header" -msgstr "

    ζ•°ε€Όι’‘ηŽ‡ζŠ₯ε‘Š\"{0}\"

    " - -msgid "ColumnValuesFrequency.report.piechart.title" -msgstr "ζ•°ε€Όι’‘ηŽ‡εœ†ε½’εˆ†ζ Όη»Ÿθ‘图葨" - -msgid "ColumnValuesFrequency.report.piechart.not-shown" -msgstr "θ‹₯存在倧于100δΈͺδΈεŒηš„ζ•°ε€ΌοΌŒδΈζ˜Ύη€Ίεœ†ε½’εˆ†ζ Όη»Ÿθ‘图葨" - -msgid "NumberColumnStatisticsReport.name" -msgstr "θ‘η—η»Ÿθ‘ε±žζ€§" - -msgid "NumberColumnStatisticsReport.description" -msgstr "εœ¨δΈ€δΈͺζ•°ζˆ–θ€…θ‘ζ•°εˆ—θ‘¨θ‘η—η»Ÿθ‘ε±žζ€§" - -msgid "CreateBooleanMatchesColumn.name" -msgstr "δ»Žζ­£εˆ™θ‘¨θΎΎεΌδΈ­ζ–°ε»ΊδΈ€δΈͺεΈƒε°”εˆ—" - -msgid "CreateBooleanMatchesColumn.description" -msgstr "ζ–°ε»ΊδΈ€δΈͺεΈƒε°”εˆ—οΌŒι‡Œι’ηš„ζ•°ε€Όθ‘¨ζ˜Žζ―δΈͺι€‰ζ‹©ηš„ζ•°ε€Όζ˜―ε¦δΈŽζ­£εˆ™θ‘¨θΎΎεΌη›ΈεŒΉι…γ€‚" - -msgid "CreateFoundGroupsListColumn.name" -msgstr "ζ–°ε»ΊδΈ€εˆ—οΌˆεˆ—θ‘¨ζˆ–θ€…ζ­£εˆ™θ‘¨θΎΎεΌεŒΉι…η»„εˆοΌ‰" - -msgid "CreateFoundGroupsListColumn.description" -msgstr "ζ–°ε»Ίε­—η¬¦δΈ²εˆ—θ‘¨οΌŒι‡Œι’ηš„ζ•°ε€Όε‘«ε†™ζ­£εˆ™θ‘¨θΎΎεΌηš„εŒΉι…η»„ηš„η»“ζžœγ€‚" - -msgid "NegateBooleanColumn.name" -msgstr "布尔值求反" - -msgid "ConvertColumnToDynamic.name" -msgstr "" - -msgid "ConvertColumnToDynamic.description" -msgstr "" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle.properties index f7e92e6de2..e913d44a6c 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle.properties @@ -12,6 +12,8 @@ DeleteEdges.confirmation.message=Confirm edge deletion? DeleteEdgesWithNodes.name.single=Delete edge with nodes... DeleteEdgesWithNodes.name.multiple=Delete all edges with nodes... +SelectOnGraph.name=Select on Overview + ClearEdgesData.name.single=Clear... ClearEdgesData.name.multiple=Clear all... ClearEdgesData.description=Clear data of the selected edges diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_ar.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_ca.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_ca.properties new file mode 100644 index 0000000000..ef140e5229 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_ca.properties @@ -0,0 +1,21 @@ +OpenInEditEdgeWindow.name=Edita la aresta +OpenInEditEdgeWindow.name.multiple=Edita totes les arestes +OpenInEditEdgeWindow.description=Change colors and attributes. +OpenInEditEdgeWindow.description.multiple=Change colors and attributes. Fields will be blank at first. +SelectSourceOnGraph.name=Select source node on Overview +SelectTargetOnGraph.name=Select target node on Overview +SelectNodesOnTable.name=Select source and target on nodes table +DeleteEdges.name.single=Elimina +DeleteEdges.name.multiple=Elimina'ls tots +DeleteEdges.confirmation.message=Confirm edge deletion? +DeleteEdgesWithNodes.name.single=Delete edge with nodes... +DeleteEdgesWithNodes.name.multiple=Delete all edges with nodes... +SelectOnGraph.name=Select on Overview +ClearEdgesData.name.single=Neteja... +ClearEdgesData.name.multiple=Neteja-ho tot +ClearEdgesData.description=Clear data of the selected edges +ClearEdgesData.ui.description=Neteja les columnes +CopyEdgeDataToOtherEdges.name=Overwrite data to other selected edges... +CopyEdgeDataToOtherEdges.description=Copy the selected edge columns to the other selected edges. +CopyEdgeDataToOtherEdges.ui.rowDescription=Copia la aresta: +CopyEdgeDataToOtherEdges.ui.columnsDescription=Overwrite columns: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_cs.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_cs.properties index 2f7de72d14..a89f9d3d5b 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_cs.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_cs.properties @@ -1,47 +1,24 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-27 15\:44+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenInEditEdgeWindow.name=Upravit hranu - -OpenInEditEdgeWindow.name.multiple=Upravit v\u0161echny hrany - -OpenInEditEdgeWindow.description=Zm\u011bnit barvu a vlastnosti. - -OpenInEditEdgeWindow.description.multiple=Zm\u011bnit barvu a vlastnosti. Pole budou zpo\u010d\u00e1tku pr\u00e1zdn\u00e1. - -SelectSourceOnGraph.name=Vybrat zdrojov\u00fd uzel v p\u0159ehledu - -SelectTargetOnGraph.name=Vybrat c\u00edlov\u00fd uzel v p\u0159ehledu - -SelectNodesOnTable.name=Vyberte zdroj a c\u00edl v tabulce uzl\u016f - -DeleteEdges.name.single=Smazat - -DeleteEdges.name.multiple=Smazat v\u0161e - -DeleteEdges.confirmation.message=Potvrdit smaz\u00e1n\u00ed hrany? - -DeleteEdgesWithNodes.name.single=Smazat hranu s uzly... - -DeleteEdgesWithNodes.name.multiple=Smazat v\u0161echny hrany s uzly... - -ClearEdgesData.name.single=Vy\u010distit... - -ClearEdgesData.name.multiple=Vy\u010distit v\u0161e... - -ClearEdgesData.description=Vy\u010distit data ve zvolen\u00fdch hran\u00e1ch - -ClearEdgesData.ui.description=Vy\u010distit sloupce\: - -CopyEdgeDataToOtherEdges.name=P\u0159epsat data na ostatn\u00ed zvolen\u00e9 hrany... - -CopyEdgeDataToOtherEdges.description=Kop\u00edrovat zvolen\u00e9 sloupce hrany na ostatn\u00ed zvolen\u00e9 hrany - -CopyEdgeDataToOtherEdges.ui.rowDescription=Kop\u00edrovat hranu\: - -CopyEdgeDataToOtherEdges.ui.columnsDescription=P\u0159epsat sloupce\: +OpenInEditEdgeWindow.name=Upravit hranu +OpenInEditEdgeWindow.name.multiple=Upravit v\u0161echny hrany +OpenInEditEdgeWindow.description=Zm\u011bnit barvu a vlastnosti. +OpenInEditEdgeWindow.description.multiple=Zm\u011bnit barvu a vlastnosti. Pole budou zpo\u010dαtku prαzdnα. + +SelectSourceOnGraph.name=Vybrat zdrojovύ uzel v p\u0159ehledu +SelectTargetOnGraph.name=Vybrat cνlovύ uzel v p\u0159ehledu +SelectNodesOnTable.name=Vyberte zdroj a cνl v tabulce uzl\u016f +DeleteEdges.name.single=Smazat +DeleteEdges.name.multiple=Smazat v\u0161e +DeleteEdges.confirmation.message=Potvrdit smazαnν hrany? +DeleteEdgesWithNodes.name.single=Smazat hranu s uzly... +DeleteEdgesWithNodes.name.multiple=Smazat v\u0161echny hrany s uzly... + +# SelectOnGraph.name=Select on Overview + +ClearEdgesData.name.single=Vy\u010distit... +ClearEdgesData.name.multiple=Vy\u010distit v\u0161e... +ClearEdgesData.description=Vy\u010distit data ve zvolenύch hranαch +ClearEdgesData.ui.description=Vy\u010distit sloupce: +CopyEdgeDataToOtherEdges.name=P\u0159epsat data na ostatnν zvolenι hrany... +CopyEdgeDataToOtherEdges.description=Kopνrovat zvolenι sloupce hrany na ostatnν zvolenι hrany +CopyEdgeDataToOtherEdges.ui.rowDescription=Kopνrovat hranu: +CopyEdgeDataToOtherEdges.ui.columnsDescription=P\u0159epsat sloupce: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_de.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_de.properties new file mode 100644 index 0000000000..ced4cc7c87 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_de.properties @@ -0,0 +1,24 @@ +OpenInEditEdgeWindow.name=Kante bearbeiten +OpenInEditEdgeWindow.name.multiple=Alle Kanten bearbeiten +OpenInEditEdgeWindow.description=Farben und Attribute δndern. +OpenInEditEdgeWindow.description.multiple=Farben und Attribute δndern. Die Felder werden anfangs leer sein. + +SelectSourceOnGraph.name=Wδhlen Sie einen Start-Knoten in der άbersicht +SelectTargetOnGraph.name=Wδhlen Sie einen Ziel-Knoten in der άbersicht +SelectNodesOnTable.name=Wδhlen Sie Start- und Ziel-Knoten in der Knoten-Tabelle +DeleteEdges.name.single=Lφschen +DeleteEdges.name.multiple=Alle lφschen +DeleteEdges.confirmation.message=Kantenlφschung bestδtigen? +DeleteEdgesWithNodes.name.single=Lφsche Kante einschlieίlich ihrer Knoten... +DeleteEdgesWithNodes.name.multiple=Alle Kanten einschlieίlich ihrer Knoten lφschen... + +# SelectOnGraph.name=Select on Overview + +ClearEdgesData.name.single=Leeren... +ClearEdgesData.name.multiple=Alle leeren... +ClearEdgesData.description=Leere Daten der ausgewδhlten Kanten +ClearEdgesData.ui.description=Spalten leeren: +CopyEdgeDataToOtherEdges.name=άberschreibe Daten auf andere ausgewδhlte Kanten... +CopyEdgeDataToOtherEdges.description=Kopiere die ausgewδhlten Kanten-Spalten auf die anderen ausgewδhlten Kanten. +CopyEdgeDataToOtherEdges.ui.rowDescription=Kopiere Kante: +CopyEdgeDataToOtherEdges.ui.columnsDescription=Spalten όberschreiben: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_es.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_es.properties index 8421ba9f15..47fc214cd9 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_es.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_es.properties @@ -1,47 +1,21 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:28+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - OpenInEditEdgeWindow.name=Editar arista - OpenInEditEdgeWindow.name.multiple=Editar todas aristas - -OpenInEditEdgeWindow.description=Cambiar colores y atributos - -OpenInEditEdgeWindow.description.multiple=Cambiar colores y atributos. Los campos estar\u00e1n vac\u00edos inicialmente. - +OpenInEditEdgeWindow.description=Cambia los colores y los atributos. +OpenInEditEdgeWindow.description.multiple=Cambiar colores y atributos. Los campos estarαn vacνos inicialmente. SelectSourceOnGraph.name=Seleccionar nodo origen en la vista del grafo - SelectTargetOnGraph.name=Seleccionar nodo destino en la vista del grafo - SelectNodesOnTable.name=Seleccionar nodos origen y destino en la tabla de nodos - DeleteEdges.name.single=Eliminar - DeleteEdges.name.multiple=Eliminar todas - -DeleteEdges.confirmation.message=\u00bfConfirmar eliminaci\u00f3n de arista(s)? - +DeleteEdges.confirmation.message=ΏConfirmar eliminaciσn de arista(s)? DeleteEdgesWithNodes.name.single=Eliminar arista con sus nodos... - DeleteEdgesWithNodes.name.multiple=Eliminar aristas con sus nodos... - +SelectOnGraph.name=Seleccionar en la vista del grafo ClearEdgesData.name.single=Borrar datos de la arista... - ClearEdgesData.name.multiple=Borrar datos de todas las aristas... - ClearEdgesData.description=Borra los datos de las aristas seleccionadas - -ClearEdgesData.ui.description=Borrar columnas\: - +ClearEdgesData.ui.description=Borrar columnas: CopyEdgeDataToOtherEdges.name=Sobreescribir datos a las otras aristas seleccionadas... - -CopyEdgeDataToOtherEdges.description=Copia las columnas de la arista seleccionada a las otras aristas seleccionadas - -CopyEdgeDataToOtherEdges.ui.rowDescription=Copiar arista\: - -CopyEdgeDataToOtherEdges.ui.columnsDescription=Sobreescribir columnas\: +CopyEdgeDataToOtherEdges.description=Copia las columnas de borde seleccionadas en otros bordes seleccionados. +CopyEdgeDataToOtherEdges.ui.rowDescription=Copiar arista: +CopyEdgeDataToOtherEdges.ui.columnsDescription=Sobreescribir columnas: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_fr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_fr.properties index 012c5b4a46..f8420ab186 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_fr.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_fr.properties @@ -1,47 +1,24 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:28+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenInEditEdgeWindow.name=Editer le lien - -OpenInEditEdgeWindow.name.multiple=Editer tous les liens - -OpenInEditEdgeWindow.description=Change les couleurs et attributs. - -OpenInEditEdgeWindow.description.multiple=Change les couleurs et attributs. Les champs sont vides au d\u00e9but. - -SelectSourceOnGraph.name=S\u00e9lectionner le noeud source dans la Vue d'Ensemble - -SelectTargetOnGraph.name=S\u00e9lectionner le noeud de destination dans la Vue d'Ensemble - -SelectNodesOnTable.name=S\u00e9lectionner les noeuds source et destination - -DeleteEdges.name.single=Supprimer - -DeleteEdges.name.multiple=Tout supprimer - -DeleteEdges.confirmation.message=Confirmer la suppression des liens ? - -DeleteEdgesWithNodes.name.single=Supprimer les liens avec leurs noeuds... - -DeleteEdgesWithNodes.name.multiple=Supprimer tous les liens avec leurs noeuds... - -ClearEdgesData.name.single=Effacer... - -ClearEdgesData.name.multiple=Tout effacer... - -ClearEdgesData.description=Effacer les donn\u00e9es des liens s\u00e9lectionn\u00e9s - -ClearEdgesData.ui.description=Effacer les colonnes \: - -CopyEdgeDataToOtherEdges.name=Ecraser les donn\u00e9es des autres liens s\u00e9lectionn\u00e9s... - -CopyEdgeDataToOtherEdges.description=Copier les colonnes du lien vers les autres liens s\u00e9lectionn\u00e9s - -CopyEdgeDataToOtherEdges.ui.rowDescription=Copier le lien \: - -CopyEdgeDataToOtherEdges.ui.columnsDescription=Ecraser les colonnes \: +OpenInEditEdgeWindow.name=Editer le lien +OpenInEditEdgeWindow.name.multiple=Editer tous les liens +OpenInEditEdgeWindow.description=Change les couleurs et attributs. +OpenInEditEdgeWindow.description.multiple=Change les couleurs et attributs. Les champs sont vides au dιbut. + +SelectSourceOnGraph.name=Sιlectionner le noeud source dans la Vue d'Ensemble +SelectTargetOnGraph.name=Sιlectionner le noeud de destination dans la Vue d'Ensemble +SelectNodesOnTable.name=Sιlectionner les noeuds source et destination +DeleteEdges.name.single=Supprimer +DeleteEdges.name.multiple=Tout supprimer +DeleteEdges.confirmation.message=Confirmer la suppression des liens ? +DeleteEdgesWithNodes.name.single=Supprimer les liens avec leurs noeuds... +DeleteEdgesWithNodes.name.multiple=Supprimer tous les liens avec leurs noeuds... + +SelectOnGraph.name=Sιlectionner dans la Vue d'Ensemble + +ClearEdgesData.name.single=Effacer... +ClearEdgesData.name.multiple=Tout effacer... +ClearEdgesData.description=Effacer les donnιes des liens sιlectionnιs +ClearEdgesData.ui.description=Effacer les colonnes : +CopyEdgeDataToOtherEdges.name=Ecraser les donnιes des autres liens sιlectionnιs... +CopyEdgeDataToOtherEdges.description=Copier les colonnes du lien vers les autres liens sιlectionnιs +CopyEdgeDataToOtherEdges.ui.rowDescription=Copier le lien : +CopyEdgeDataToOtherEdges.ui.columnsDescription=Ecraser les colonnes : diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_he.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_he.properties new file mode 100644 index 0000000000..4ef950ad1c --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_he.properties @@ -0,0 +1,21 @@ +OpenInEditEdgeWindow.name=Edit edge +OpenInEditEdgeWindow.name.multiple=Edit all edges +OpenInEditEdgeWindow.description=Change colors and attributes. +OpenInEditEdgeWindow.description.multiple=Change colors and attributes. Fields will be blank at first. +SelectSourceOnGraph.name=Select source node on Overview +SelectTargetOnGraph.name=Select target node on Overview +SelectNodesOnTable.name=Select source and target on nodes table +DeleteEdges.name.single=\u05de\u05d7\u05e7 +DeleteEdges.name.multiple=Delete all +DeleteEdges.confirmation.message=Confirm edge deletion? +DeleteEdgesWithNodes.name.single=Delete edge with nodes... +DeleteEdgesWithNodes.name.multiple=Delete all edges with nodes... +SelectOnGraph.name=Select on Overview +ClearEdgesData.name.single=Clear... +ClearEdgesData.name.multiple=Clear all... +ClearEdgesData.description=Clear data of the selected edges +ClearEdgesData.ui.description=Clear columns: +CopyEdgeDataToOtherEdges.name=Overwrite data to other selected edges... +CopyEdgeDataToOtherEdges.description=Copy the selected edge columns to the other selected edges. +CopyEdgeDataToOtherEdges.ui.rowDescription=Copy edge: +CopyEdgeDataToOtherEdges.ui.columnsDescription=Overwrite columns: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_hu.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_hu.properties new file mode 100644 index 0000000000..230a214058 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_hu.properties @@ -0,0 +1,23 @@ + + +SelectOnGraph.name=V\u00E1lassza az \u00C1ttekint\u00E9s lehet\u0151s\u00E9get +SelectTargetOnGraph.name=V\u00E1lassza ki a c\u00E9lcsom\u00F3pontot az \u00C1ttekint\u00E9s oldalon +DeleteEdges.confirmation.message=Meger\u0151s\u00EDti az \u00E9l t\u00F6rl\u00E9s\u00E9t? +CopyEdgeDataToOtherEdges.ui.rowDescription=\u00C9l m\u00E1sol\u00E1sa: +DeleteEdgesWithNodes.name.single=Csom\u00F3pontokkal rendelkez\u0151 \u00E9l t\u00F6rl\u00E9se... +ClearEdgesData.ui.description=Oszlopok t\u00F6rl\u00E9se: +CopyEdgeDataToOtherEdges.name=Adatok fel\u00FCl\u00EDr\u00E1sa a t\u00F6bbi kijel\u00F6lt \u00E9lre... +SelectNodesOnTable.name=V\u00E1lassza ki a forr\u00E1st \u00E9s a c\u00E9lt a csom\u00F3pontt\u00E1bl\u00E1zaton +CopyEdgeDataToOtherEdges.description=M\u00E1solja a kijel\u00F6lt \u00E9loszlopokat a t\u00F6bbi kijel\u00F6lt \u00E9lre. +OpenInEditEdgeWindow.description.multiple=V\u00E1ltoztassa meg a sz\u00EDneket \u00E9s az attrib\u00FAtumokat. A mez\u0151k el\u0151sz\u00F6r \u00FCresek lesznek. +DeleteEdges.name.multiple=Mindet t\u00F6rli +SelectSourceOnGraph.name=V\u00E1lassza ki a forr\u00E1scsom\u00F3pontot az \u00C1ttekint\u00E9s oldalon +ClearEdgesData.name.single=T\u00F6rl\u00E9s +ClearEdgesData.name.multiple=Mindent t\u00F6r\u00F6l... +DeleteEdgesWithNodes.name.multiple=Az \u00F6sszes csom\u00F3pontos \u00E9l t\u00F6rl\u00E9se... +OpenInEditEdgeWindow.description=V\u00E1ltoztassa meg a sz\u00EDneket \u00E9s az attrib\u00FAtumokat. +CopyEdgeDataToOtherEdges.ui.columnsDescription=Oszlopok fel\u00FCl\u00EDr\u00E1sa: +DeleteEdges.name.single=T\u00F6r\u00F6l +ClearEdgesData.description=A kijel\u00F6lt \u00E9lek adatainak t\u00F6rl\u00E9se +OpenInEditEdgeWindow.name.multiple=Szerkessze az \u00F6sszes \u00E9lt +OpenInEditEdgeWindow.name=\u00C9l szerkeszt\u00E9se diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_it.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_it.properties new file mode 100644 index 0000000000..ac9befb73c --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_it.properties @@ -0,0 +1,21 @@ +OpenInEditEdgeWindow.name=Edit edge +OpenInEditEdgeWindow.name.multiple=Edit all edges +OpenInEditEdgeWindow.description=Change colors and attributes. +OpenInEditEdgeWindow.description.multiple=Change colors and attributes. Fields will be blank at first. +SelectSourceOnGraph.name=Select source node on Overview +SelectTargetOnGraph.name=Select target node on Overview +SelectNodesOnTable.name=Select source and target on nodes table +DeleteEdges.name.single=Cancella +DeleteEdges.name.multiple=Delete all +DeleteEdges.confirmation.message=Confirm edge deletion? +DeleteEdgesWithNodes.name.single=Delete edge with nodes... +DeleteEdgesWithNodes.name.multiple=Delete all edges with nodes... +SelectOnGraph.name=Select on Overview +ClearEdgesData.name.single=Clear... +ClearEdgesData.name.multiple=Clear all... +ClearEdgesData.description=Clear data of the selected edges +ClearEdgesData.ui.description=Clear columns: +CopyEdgeDataToOtherEdges.name=Overwrite data to other selected edges... +CopyEdgeDataToOtherEdges.description=Copy the selected edge columns to the other selected edges. +CopyEdgeDataToOtherEdges.ui.rowDescription=Copy edge: +CopyEdgeDataToOtherEdges.ui.columnsDescription=Overwrite columns: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_ja.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_ja.properties index 99fcb12701..8cfcae4e3e 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_ja.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_ja.properties @@ -1,47 +1,24 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-02 10\:55+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenInEditEdgeWindow.name=\u8fba\u3092\u7de8\u96c6 - -OpenInEditEdgeWindow.name.multiple=\u3059\u3079\u3066\u306e\u8fba\u3092\u7de8\u96c6 - -OpenInEditEdgeWindow.description=\u8272\u3068\u5c5e\u6027\u306e\u5909\u66f4 - -OpenInEditEdgeWindow.description.multiple=\u8272\u3068\u5c5e\u6027\u306e\u5909\u66f4\u3002\u521d\u3081\u306f\u7a7a\u6b04\u3067\u3059\u3002 - -SelectSourceOnGraph.name=\u6982\u8981\u306e\u30bd\u30fc\u30b9\u30ce\u30fc\u30c9\u3092\u9078\u629e - -SelectTargetOnGraph.name=\u6982\u8981\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u30ce\u30fc\u30c9\u3092\u9078\u629e - -SelectNodesOnTable.name=\u30ce\u30fc\u30c9\u30c6\u30fc\u30d6\u30eb\u306e\u30bd\u30fc\u30b9\u3068\u30bf\u30fc\u30b2\u30c3\u30c8\u3092\u9078\u629e - -DeleteEdges.name.single=\u524a\u9664 - -DeleteEdges.name.multiple=\u3059\u3079\u3066\u3092\u524a\u9664 - -DeleteEdges.confirmation.message=\u8fba\u3092\u524a\u9664\u3057\u3066\u3082\u3044\u3044\u3067\u3059\u304b\uff1f - -DeleteEdgesWithNodes.name.single=\u30ce\u30fc\u30c9\u4ed8\u304d\u306e\u8fba\u3092\u524a\u9664... - -DeleteEdgesWithNodes.name.multiple=\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u4ed8\u304d\u306e\u8fba\u3092\u524a\u9664... - -ClearEdgesData.name.single=\u30af\u30ea\u30a2... - -ClearEdgesData.name.multiple=\u3059\u3079\u3066\u3092\u30af\u30ea\u30a2... - -ClearEdgesData.description=\u9078\u629e\u3057\u305f\u8fba\u306e\u30c7\u30fc\u30bf\u3092\u30af\u30ea\u30a2 - -ClearEdgesData.ui.description=\u5217\u3092\u30af\u30ea\u30a2\: - -CopyEdgeDataToOtherEdges.name=\u9078\u629e\u3057\u305f\u4ed6\u306e\u8fba\u306b\u30c7\u30fc\u30bf\u3092\u4e0a\u66f8\u304d\: - -CopyEdgeDataToOtherEdges.description=\u9078\u629e\u3057\u305f\u8fba\u306e\u5217\u3092\u4ed6\u306e\u9078\u629e\u3057\u305f\u8fba\u306b\u30b3\u30d4\u30fc\u3002 - -CopyEdgeDataToOtherEdges.ui.rowDescription=\u8fba\u3092\u30b3\u30d4\u30fc\: - -CopyEdgeDataToOtherEdges.ui.columnsDescription=\u5217\u3092\u4e0a\u66f8\u304d\: +OpenInEditEdgeWindow.name=\u8fba\u3092\u7de8\u96c6 +OpenInEditEdgeWindow.name.multiple=\u3059\u3079\u3066\u306e\u8fba\u3092\u7de8\u96c6 +OpenInEditEdgeWindow.description=\u8272\u3068\u5c5e\u6027\u306e\u5909\u66f4 +OpenInEditEdgeWindow.description.multiple=\u8272\u3068\u5c5e\u6027\u306e\u5909\u66f4\u3002\u521d\u3081\u306f\u7a7a\u6b04\u3067\u3059\u3002 + +SelectSourceOnGraph.name=\u6982\u8981\u306e\u30bd\u30fc\u30b9\u30ce\u30fc\u30c9\u3092\u9078\u629e +SelectTargetOnGraph.name=\u6982\u8981\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u30ce\u30fc\u30c9\u3092\u9078\u629e +SelectNodesOnTable.name=\u30ce\u30fc\u30c9\u30c6\u30fc\u30d6\u30eb\u306e\u30bd\u30fc\u30b9\u3068\u30bf\u30fc\u30b2\u30c3\u30c8\u3092\u9078\u629e +DeleteEdges.name.single=\u524a\u9664 +DeleteEdges.name.multiple=\u3059\u3079\u3066\u3092\u524a\u9664 +DeleteEdges.confirmation.message=\u8fba\u3092\u524a\u9664\u3057\u3066\u3082\u3044\u3044\u3067\u3059\u304b\uff1f +DeleteEdgesWithNodes.name.single=\u30ce\u30fc\u30c9\u4ed8\u304d\u306e\u8fba\u3092\u524a\u9664... +DeleteEdgesWithNodes.name.multiple=\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u4ed8\u304d\u306e\u8fba\u3092\u524a\u9664... + +# SelectOnGraph.name=Select on Overview + +ClearEdgesData.name.single=\u30af\u30ea\u30a2... +ClearEdgesData.name.multiple=\u3059\u3079\u3066\u3092\u30af\u30ea\u30a2... +ClearEdgesData.description=\u9078\u629e\u3057\u305f\u8fba\u306e\u30c7\u30fc\u30bf\u3092\u30af\u30ea\u30a2 +ClearEdgesData.ui.description=\u5217\u3092\u30af\u30ea\u30a2: +CopyEdgeDataToOtherEdges.name=\u9078\u629e\u3057\u305f\u4ed6\u306e\u8fba\u306b\u30c7\u30fc\u30bf\u3092\u4e0a\u66f8\u304d: +CopyEdgeDataToOtherEdges.description=\u9078\u629e\u3057\u305f\u8fba\u306e\u5217\u3092\u4ed6\u306e\u9078\u629e\u3057\u305f\u8fba\u306b\u30b3\u30d4\u30fc\u3002 +CopyEdgeDataToOtherEdges.ui.rowDescription=\u8fba\u3092\u30b3\u30d4\u30fc: +CopyEdgeDataToOtherEdges.ui.columnsDescription=\u5217\u3092\u4e0a\u66f8\u304d: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_ko.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_ko.properties new file mode 100644 index 0000000000..02b35486a6 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_ko.properties @@ -0,0 +1,23 @@ + + +OpenInEditEdgeWindow.name=\uC5E3\uC9C0 \uD3B8\uC9D1\uD558\uAE30 +OpenInEditEdgeWindow.name.multiple=\uBAA8\uB4E0 \uC5E3\uC9C0 \uD3B8\uC9D1\uD558\uAE30 +SelectSourceOnGraph.name=\uAC1C\uC694 \uD654\uBA74\uC5D0\uC11C \uC18C\uC2A4 \uB178\uB4DC\uB97C \uC120\uD0DD\uD558\uAE30 +SelectTargetOnGraph.name=\uAC1C\uC694 \uD654\uBA74\uC5D0\uC11C \uD0C0\uAC9F \uB178\uB4DC\uB97C \uC120\uD0DD\uD558\uAE30 +SelectNodesOnTable.name=\uB178\uB4DC \uD14C\uC774\uBE14\uC5D0\uC11C \uC18C\uC2A4\uC640 \uD0C0\uAC9F\uC744 \uC120\uD0DD\uD558\uAE30 +DeleteEdges.name.single=\uC0AD\uC81C\uD558\uAE30 +DeleteEdges.name.multiple=\uC804\uCCB4 \uC0AD\uC81C\uD558\uAE30 +DeleteEdges.confirmation.message=\uD655\uC2E4\uD788 \uC5E3\uC9C0\uB97C \uC0AD\uC81C\uD560\uAE4C\uC694? +SelectOnGraph.name=\uAC1C\uC694\uC5D0\uC11C \uC120\uD0DD +DeleteEdgesWithNodes.name.single=\uB178\uB4DC\uAC00 \uC788\uB294 \uC5E3\uC9C0\uB97C \uC0AD\uC81C\uD558\uAE30 ... +DeleteEdgesWithNodes.name.multiple=\uB178\uB4DC\uAC00 \uC788\uB294 \uBAA8\uB4E0 \uC5E3\uC9C0\uB97C \uC0AD\uC81C\uD558\uAE30 ... +ClearEdgesData.name.single=\uC9C0\uC6B0\uAE30 ... +ClearEdgesData.name.multiple=\uC804\uCCB4 \uC9C0\uC6B0\uAE30 ... +ClearEdgesData.ui.description=\uCEEC\uB7FC\uB4E4 \uC9C0\uC6B0\uAE30: +CopyEdgeDataToOtherEdges.name=\uB370\uC774\uD130\uB97C \uB2E4\uB978 \uC120\uD0DD\uB41C \uC5E3\uC9C0\uB4E4\uC5D0\uAC8C \uB36E\uC5B4 \uC4F0\uAE30 ... +CopyEdgeDataToOtherEdges.description=\uC120\uD0DD\uB41C \uC5E3\uC9C0 \uCEEC\uB7FC\uB4E4\uC744 \uB2E4\uB978 \uC120\uD0DD\uB41C \uC5E3\uC9C0\uB4E4\uC5D0 \uBCF5\uC0AC\uD569\uB2C8\uB2E4. +OpenInEditEdgeWindow.description=\uC0C9\uC0C1 \uBC0F \uC18D\uC131\uB4E4\uC744 \uBC14\uAFC9\uB2C8\uB2E4. +OpenInEditEdgeWindow.description.multiple=\uC0C9\uC0C1 \uBC0F \uC18D\uC131\uB4E4\uC744 \uBC14\uAFC9\uB2C8\uB2E4. \uCC98\uC74C\uC5D0\uB294 \uD544\uB4DC\uAC00 \uBE44\uC5B4 \uC788\uC2B5\uB2C8\uB2E4. +CopyEdgeDataToOtherEdges.ui.rowDescription=\uC5E3\uC9C0\uB97C \uBCF5\uC0AC\uD569\uB2C8\uB2E4: +CopyEdgeDataToOtherEdges.ui.columnsDescription=\uCEEC\uB7FC\uB4E4\uC744 \uB36E\uC5B4\uC501\uB2C8\uB2E4: +ClearEdgesData.description=\uC120\uD0DD\uB41C \uC5E3\uC9C0\uB4E4\uC758 \uB370\uC774\uD130\uB97C \uC9C0\uC6C1\uB2C8\uB2E4 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_nl.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_nl.properties new file mode 100644 index 0000000000..ab0c0d0531 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_nl.properties @@ -0,0 +1,21 @@ +OpenInEditEdgeWindow.name=Edit edge +OpenInEditEdgeWindow.name.multiple=Edit all edges +OpenInEditEdgeWindow.description=Change colors and attributes. +OpenInEditEdgeWindow.description.multiple=Change colors and attributes. Fields will be blank at first. +SelectSourceOnGraph.name=Select source node on Overview +SelectTargetOnGraph.name=Select target node on Overview +SelectNodesOnTable.name=Select source and target on nodes table +DeleteEdges.name.single=Verwijderen +DeleteEdges.name.multiple=Alles verwijderen +DeleteEdges.confirmation.message=Confirm edge deletion? +DeleteEdgesWithNodes.name.single=Delete edge with nodes... +DeleteEdgesWithNodes.name.multiple=Delete all edges with nodes... +SelectOnGraph.name=Select on Overview +ClearEdgesData.name.single=Wissen... +ClearEdgesData.name.multiple=Alles wissen... +ClearEdgesData.description=Clear data of the selected edges +ClearEdgesData.ui.description=Kolommen wissen: +CopyEdgeDataToOtherEdges.name=Overwrite data to other selected edges... +CopyEdgeDataToOtherEdges.description=Copy the selected edge columns to the other selected edges. +CopyEdgeDataToOtherEdges.ui.rowDescription=Copy edge: +CopyEdgeDataToOtherEdges.ui.columnsDescription=Kolommen overschrijven: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_pt.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_pt.properties new file mode 100644 index 0000000000..f9d1d80256 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_pt.properties @@ -0,0 +1,21 @@ +OpenInEditEdgeWindow.name=Editar aresta +SelectOnGraph.name=Selecionar na Vis\u00E3o geral +ClearEdgesData.ui.description=Limpar colunas: +OpenInEditEdgeWindow.name.multiple=Editar todas as arestas +OpenInEditEdgeWindow.description=Alterar cores e atributos. +OpenInEditEdgeWindow.description.multiple=Alterar cores e atributos. Os campos estar\u00E3o inicialmente vazios. +SelectSourceOnGraph.name=Selecionar n\u00F3 de origem na Vis\u00E3o geral +SelectTargetOnGraph.name=Selecionar n\u00F3 de destino na Vis\u00E3o geral +SelectNodesOnTable.name=Selecionar n\u00F3s de origem e destino na tabela de n\u00F3s +DeleteEdges.name.single=Apagar +DeleteEdges.name.multiple=Apagar todos +DeleteEdges.confirmation.message=Confirmar apagar aresta? +DeleteEdgesWithNodes.name.single=Apagar aresta e os seus n\u00F3s... +DeleteEdgesWithNodes.name.multiple=Apagar arestas com os seus n\u00F3s... +ClearEdgesData.name.single=Limpar dados da aresta... +ClearEdgesData.name.multiple=Limpar dados de todas as arestas... +ClearEdgesData.description=Limpar dados das arestas selecionadas +CopyEdgeDataToOtherEdges.name=Sobrescrever dados das outras arestas selecionadas... +CopyEdgeDataToOtherEdges.description=Copiar as colunas da aresta selecionada para as outras arestas selecionadas. +CopyEdgeDataToOtherEdges.ui.rowDescription=Copiar aresta: +CopyEdgeDataToOtherEdges.ui.columnsDescription=Sobrescrever colunas: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_pt_BR.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_pt_BR.properties index 1f0d53f217..d901407dac 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_pt_BR.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_pt_BR.properties @@ -1,47 +1,24 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 19\:16+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenInEditEdgeWindow.name=Editar aresta - -OpenInEditEdgeWindow.name.multiple=Editar todas as arestas - -OpenInEditEdgeWindow.description=Alterar cores e atributos. - -OpenInEditEdgeWindow.description.multiple=Alterar cores e atributos. Os campos estar\u00e3o inicialmente vazios. - -SelectSourceOnGraph.name=Selecionar n\u00f3 de origem na Vis\u00e3o geral - -SelectTargetOnGraph.name=Selecionar n\u00f3 de destino na Vis\u00e3o geral - -SelectNodesOnTable.name=Selecionar n\u00f3s de origem e destino na tabela de n\u00f3s - -DeleteEdges.name.single=Excluir - -DeleteEdges.name.multiple=Excluir todos - -DeleteEdges.confirmation.message=Confirmar a exclus\u00e3o da aresta? - -DeleteEdgesWithNodes.name.single=Excluir aresta e seus n\u00f3s... - -DeleteEdgesWithNodes.name.multiple=Excluir arestas com seus n\u00f3s... - -ClearEdgesData.name.single=Limpar dados da aresta... - -ClearEdgesData.name.multiple=Limpar dados de todas as arestas... - -ClearEdgesData.description=Limpar dados das arestas selecionadas - -ClearEdgesData.ui.description=Limpar colunas\: - -CopyEdgeDataToOtherEdges.name=Sobrescrever dados das outras arestas selecionadas... - -CopyEdgeDataToOtherEdges.description=Copiar as colunas da aresta selecionada para as outras arestas selecionadas. - -CopyEdgeDataToOtherEdges.ui.rowDescription=Copiar aresta\: - -CopyEdgeDataToOtherEdges.ui.columnsDescription=Sobrescrever colunas\: +OpenInEditEdgeWindow.name=Editar aresta +OpenInEditEdgeWindow.name.multiple=Editar todas as arestas +OpenInEditEdgeWindow.description=Alterar cores e atributos. +OpenInEditEdgeWindow.description.multiple=Alterar cores e atributos. Os campos estarγo inicialmente vazios. + +SelectSourceOnGraph.name=Selecionar nσ de origem na Visγo geral +SelectTargetOnGraph.name=Selecionar nσ de destino na Visγo geral +SelectNodesOnTable.name=Selecionar nσs de origem e destino na tabela de nσs +DeleteEdges.name.single=Excluir +DeleteEdges.name.multiple=Excluir todos +DeleteEdges.confirmation.message=Confirmar a exclusγo da aresta? +DeleteEdgesWithNodes.name.single=Excluir aresta e seus nσs... +DeleteEdgesWithNodes.name.multiple=Excluir arestas com seus nσs... + +# SelectOnGraph.name=Select on Overview + +ClearEdgesData.name.single=Limpar dados da aresta... +ClearEdgesData.name.multiple=Limpar dados de todas as arestas... +ClearEdgesData.description=Limpar dados das arestas selecionadas +ClearEdgesData.ui.description=Limpar colunas: +CopyEdgeDataToOtherEdges.name=Sobrescrever dados das outras arestas selecionadas... +CopyEdgeDataToOtherEdges.description=Copiar as colunas da aresta selecionada para as outras arestas selecionadas. +CopyEdgeDataToOtherEdges.ui.rowDescription=Copiar aresta: +CopyEdgeDataToOtherEdges.ui.columnsDescription=Sobrescrever colunas: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_ro.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_ro.properties new file mode 100644 index 0000000000..f768c5ac9e --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_ro.properties @@ -0,0 +1,23 @@ + + +OpenInEditEdgeWindow.name.multiple=Editeaz\u0103 toate muchiile +OpenInEditEdgeWindow.name=Editeaz\u0103 muchia +OpenInEditEdgeWindow.description=Schimb\u0103 culorile \u0219i atributele. +SelectSourceOnGraph.name=Selecteaz\u0103 nodul surs\u0103 pe graf +SelectTargetOnGraph.name=Selecteaz\u0103 nodul \u021Bint\u0103 pe graf +SelectNodesOnTable.name=Selecteaz\u0103 nodurile surs\u0103 \u0219i \u021Bint\u0103 pe tabelul de noduri +DeleteEdges.name.multiple=\u0218terge tot +DeleteEdges.confirmation.message=Confirm\u0103 \u0219tergerea muchiei? +DeleteEdgesWithNodes.name.multiple=\u0218terge toate muchiile si nodurile lor... +ClearEdgesData.name.multiple=Cur\u0103\u021B\u0103 tot... +ClearEdgesData.description=\u0218terge datele din muchiile selectate +ClearEdgesData.ui.description=Cur\u0103\u021B\u0103 coloanele: +CopyEdgeDataToOtherEdges.name=Suprascrie datele \u00EEn celelalte muchii selectate... +CopyEdgeDataToOtherEdges.description=Copiaz\u0103 coloanele din muchia selectat\u0103 \u00EEn celelalte muchii selectate. +CopyEdgeDataToOtherEdges.ui.rowDescription=Copiaz\u0103 muchia: +CopyEdgeDataToOtherEdges.ui.columnsDescription=Suprascrie coloanele: +OpenInEditEdgeWindow.description.multiple=Schimb\u0103 culorile \u0219i atributele. C\u00E2mpurile vor fi goale la \u00EEnceput. +DeleteEdges.name.single=\u0218terge +DeleteEdgesWithNodes.name.single=\u0218terge muchia \u0219i nodurile ei... +SelectOnGraph.name=Selecteaz\u0103 pe graf +ClearEdgesData.name.single=Cur\u0103\u021B\u0103... diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_ru.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_ru.properties index 25a03a07e1..96833fd33c 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_ru.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_ru.properties @@ -1,47 +1,24 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 13\:16+0000\nLast-Translator\: gephi \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenInEditEdgeWindow.name=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0431\u0440\u043e - -OpenInEditEdgeWindow.name.multiple=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0440\u0435\u0431\u0440\u0430 - -OpenInEditEdgeWindow.description=\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043e\u043a\u043d\u043e \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0431\u0440\u0430. \u0412 \u043d\u0451\u043c \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0446\u0432\u0435\u0442 \u0440\u0435\u0431\u0440\u0430 \u0438 \u0435\u0433\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b. - -OpenInEditEdgeWindow.description.multiple=\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043e\u043a\u043d\u043e \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0440\u0451\u0431\u0435\u0440. \u0412 \u043d\u0451\u043c \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0446\u0432\u0435\u0442\u0430 \u0440\u0451\u0431\u0435\u0440 \u0438 \u0438\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b. - -SelectSourceOnGraph.name=\u0412\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0443\u0437\u0435\u043b-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0433\u0440\u0430\u0444\u0430 - -SelectTargetOnGraph.name=\u0412\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0443\u0437\u0435\u043b-\u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0433\u0440\u0430\u0444\u0430 - -SelectNodesOnTable.name=\u0412\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0443\u0437\u0435\u043b-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0438 \u0443\u0437\u0435\u043b-\u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0443\u0437\u043b\u043e\u0432 - -DeleteEdges.name.single=\u0423\u0434\u0430\u043b\u0438\u0442\u044c - -DeleteEdges.name.multiple=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0435 - -DeleteEdges.confirmation.message=\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0440\u0435\u0431\u0440\u043e(\u0440\u0451\u0431\u0440\u0430)? - -DeleteEdgesWithNodes.name.single=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0440\u0435\u0431\u0440\u043e \u0441 \u043f\u0440\u0438\u043c\u044b\u043a\u0430\u044e\u0449\u0438\u043c\u0438 \u0443\u0437\u043b\u0430\u043c\u0438... - -DeleteEdgesWithNodes.name.multiple=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0435 \u0440\u0451\u0431\u0440\u0430 \u0441 \u043f\u0440\u0438\u043c\u044b\u043a\u0430\u044e\u0449\u0438\u043c\u0438 \u0443\u0437\u043b\u0430\u043c\u0438... - -ClearEdgesData.name.single=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0440\u0435\u0431\u0440\u0430... - -ClearEdgesData.name.multiple=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0432\u0441\u0435\u0445 \u0440\u0451\u0431\u0435\u0440... - -ClearEdgesData.description=\u041e\u0447\u0438\u0449\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 \u0443 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0431\u0440\u0430(\u0440\u0451\u0431\u0435\u0440)... - -ClearEdgesData.ui.description=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0434\u043b\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0438\: - -CopyEdgeDataToOtherEdges.name=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0440\u0435\u0431\u0440\u0430 \u0432 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0451\u0431\u0435\u0440... - -CopyEdgeDataToOtherEdges.description=\u041a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0431\u0440\u0430 \u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0440\u0451\u0431\u0440\u0430 - -CopyEdgeDataToOtherEdges.ui.rowDescription=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Edge \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 Edges.ui.\u0440\u044f\u0434 \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 - -CopyEdgeDataToOtherEdges.ui.columnsDescription=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Edge \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 Edges.ui.\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 +OpenInEditEdgeWindow.name=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0431\u0440\u043e +OpenInEditEdgeWindow.name.multiple=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u0440\u0435\u0431\u0440\u0430 +OpenInEditEdgeWindow.description=\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043e\u043a\u043d\u043e \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0431\u0440\u0430. \u0412 \u043d\u0451\u043c \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0446\u0432\u0435\u0442 \u0440\u0435\u0431\u0440\u0430 \u0438 \u0435\u0433\u043e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b. +OpenInEditEdgeWindow.description.multiple=\u041e\u0442\u043a\u0440\u044b\u0432\u0430\u0435\u0442 \u043e\u043a\u043d\u043e \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0440\u0451\u0431\u0435\u0440. \u0412 \u043d\u0451\u043c \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0446\u0432\u0435\u0442\u0430 \u0440\u0451\u0431\u0435\u0440 \u0438 \u0438\u0445 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b. + +SelectSourceOnGraph.name=\u0412\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0443\u0437\u0435\u043b-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0433\u0440\u0430\u0444\u0430 +SelectTargetOnGraph.name=\u0412\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0443\u0437\u0435\u043b-\u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0433\u0440\u0430\u0444\u0430 +SelectNodesOnTable.name=\u0412\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0443\u0437\u0435\u043b-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0438 \u0443\u0437\u0435\u043b-\u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0443\u0437\u043b\u043e\u0432 +DeleteEdges.name.single=\u0423\u0434\u0430\u043b\u0438\u0442\u044c +DeleteEdges.name.multiple=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0435 +DeleteEdges.confirmation.message=\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0440\u0435\u0431\u0440\u043e(\u0440\u0451\u0431\u0440\u0430)? +DeleteEdgesWithNodes.name.single=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0440\u0435\u0431\u0440\u043e \u0441 \u043f\u0440\u0438\u043c\u044b\u043a\u0430\u044e\u0449\u0438\u043c\u0438 \u0443\u0437\u043b\u0430\u043c\u0438... +DeleteEdgesWithNodes.name.multiple=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0435 \u0440\u0451\u0431\u0440\u0430 \u0441 \u043f\u0440\u0438\u043c\u044b\u043a\u0430\u044e\u0449\u0438\u043c\u0438 \u0443\u0437\u043b\u0430\u043c\u0438... + +# SelectOnGraph.name=Select on Overview + +ClearEdgesData.name.single=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0440\u0435\u0431\u0440\u0430... +ClearEdgesData.name.multiple=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0432\u0441\u0435\u0445 \u0440\u0451\u0431\u0435\u0440... +ClearEdgesData.description=\u041e\u0447\u0438\u0449\u0430\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u0445 \u0443 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0431\u0440\u0430(\u0440\u0451\u0431\u0435\u0440)... +ClearEdgesData.ui.description=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0434\u043b\u044f \u043e\u0447\u0438\u0441\u0442\u043a\u0438: +CopyEdgeDataToOtherEdges.name=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0440\u0435\u0431\u0440\u0430 \u0432 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0451\u0431\u0435\u0440... +CopyEdgeDataToOtherEdges.description=\u041a\u043e\u043f\u0438\u0440\u0443\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0435\u0431\u0440\u0430 \u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0440\u0451\u0431\u0440\u0430 +CopyEdgeDataToOtherEdges.ui.rowDescription=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Edge \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 Edges.ui.\u0440\u044f\u0434 \u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 +CopyEdgeDataToOtherEdges.ui.columnsDescription=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 Edge \u0434\u0430\u043d\u043d\u044b\u0445 \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 Edges.ui.\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_th.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_tr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_tr.properties new file mode 100644 index 0000000000..15276e32dd --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_tr.properties @@ -0,0 +1,21 @@ +OpenInEditEdgeWindow.name=Edit edge +OpenInEditEdgeWindow.name.multiple=Edit all edges +OpenInEditEdgeWindow.description=Change colors and attributes. +OpenInEditEdgeWindow.description.multiple=Change colors and attributes. Fields will be blank at first. +SelectSourceOnGraph.name=Select source node on Overview +SelectTargetOnGraph.name=Select target node on Overview +SelectNodesOnTable.name=Select source and target on nodes table +DeleteEdges.name.single=Sil +DeleteEdges.name.multiple=Delete all +DeleteEdges.confirmation.message=Confirm edge deletion? +DeleteEdgesWithNodes.name.single=Delete edge with nodes... +DeleteEdgesWithNodes.name.multiple=Delete all edges with nodes... +SelectOnGraph.name=Select on Overview +ClearEdgesData.name.single=Clear... +ClearEdgesData.name.multiple=Clear all... +ClearEdgesData.description=Clear data of the selected edges +ClearEdgesData.ui.description=Clear columns: +CopyEdgeDataToOtherEdges.name=Overwrite data to other selected edges... +CopyEdgeDataToOtherEdges.description=Copy the selected edge columns to the other selected edges. +CopyEdgeDataToOtherEdges.ui.rowDescription=Copy edge: +CopyEdgeDataToOtherEdges.ui.columnsDescription=Overwrite columns: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_zh_CN.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_zh_CN.properties index aff2c13157..c5e32e5ad0 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_zh_CN.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_zh_CN.properties @@ -1,46 +1,24 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:19+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - OpenInEditEdgeWindow.name=\u7f16\u8f91\u8fb9 - OpenInEditEdgeWindow.name.multiple=\u5168\u7f16\u8f91\u8fb9 - OpenInEditEdgeWindow.description=\u6539\u53d8\u989c\u8272\u548c\u5c5e\u6027\u3002 - OpenInEditEdgeWindow.description.multiple=\u6539\u53d8\u989c\u8272\u548c\u5c5e\u6027\u3002 \u5c06\u5148\u7a7a\u5b57\u6bb5\u3002 - SelectSourceOnGraph.name=\u5728\u6982\u8ff0\u9009\u62e9\u6e90\u8282\u70b9 - SelectTargetOnGraph.name=\u5728\u6982\u8ff0\u9009\u62e9\u76ee\u6807\u8282\u70b9 - SelectNodesOnTable.name=\u5728\u8282\u70b9\u8868\u683c\u9009\u62e9\u6e90\u548c\u76ee\u6807\u8282\u70b9 - DeleteEdges.name.single=\u5220\u9664 - DeleteEdges.name.multiple=\u5168\u5220\u9664 - DeleteEdges.confirmation.message=\u786e\u8ba4\u5220\u9664\u8fb9\uff1f - DeleteEdgesWithNodes.name.single=\u5220\u9664\u8ddf\u8282\u70b9\u4eec\u2026 - DeleteEdgesWithNodes.name.multiple=\u5220\u9664\u90fd\u8fb9\u4eec\u8ddf\u8282\u70b9\u4eec\u2026 -ClearEdgesData.name.single=\u6e05\u6d17\u2026 +# SelectOnGraph.name=Select on Overview +ClearEdgesData.name.single=\u6e05\u6d17\u2026 ClearEdgesData.name.multiple=\u5168\u6e05\u6d17\u2026 - ClearEdgesData.description=\u6e05\u6d17\u9009\u5b9a\u8fb9\u7684\u6570\u636e - ClearEdgesData.ui.description=\u6e05\u6d17\u5217\u4eec\uff1a - CopyEdgeDataToOtherEdges.name=\u5728\u522b\u9009\u5b9a\u7684\u8fb9\u4eec\u8986\u76d6\u6570\u636e\u2026 - CopyEdgeDataToOtherEdges.description=\u5728\u522b\u7684\u9009\u5b9a\u8fb9\u590d\u5236\u9009\u5b9a\u8fb9\u7684\u5217\u3002 - CopyEdgeDataToOtherEdges.ui.rowDescription=\u590d\u5236\u8fb9\uff1a - CopyEdgeDataToOtherEdges.ui.columnsDescription=\u8986\u76d6\u5217\u4eec\uff1a +SelectOnGraph.name=\u9009\u62E9\u6982\u89C8 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_zh_TW.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_zh_TW.properties new file mode 100644 index 0000000000..54c7240b84 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/Bundle_zh_TW.properties @@ -0,0 +1,21 @@ +OpenInEditEdgeWindow.name=\u7de8\u8f2f\u9023\u7d50 +OpenInEditEdgeWindow.name.multiple=\u7de8\u8f2f\u6240\u6709\u9023\u7d50 +OpenInEditEdgeWindow.description=\u6539\u8b8a\u984f\u8272\u53ca\u5c6c\u6027\u3002 +OpenInEditEdgeWindow.description.multiple=\u6539\u8b8a\u984f\u8272\u53ca\u5c6c\u6027\u3002\u6b04\u4f4d\u5c07\u6703\u5148\u88ab\u6e05\u7a7a\u3002 +SelectSourceOnGraph.name=\u8acb\u5728\u7e3d\u652c\u4e2d\u9078\u53d6\u4f86\u6e90\u7bc0\u9ede +SelectTargetOnGraph.name=\u8acb\u5728\u7e3d\u652c\u4e2d\u9078\u53d6\u76ee\u6a19\u7bc0\u9ede +SelectNodesOnTable.name=\u8acb\u5728\u7bc0\u9ede\u8868\u683c\u4e2d\u9078\u53d6\u9023\u7d50\u4f86\u6e90\u53ca\u76ee\u6a19 +DeleteEdges.name.single=\u522a\u9664 +DeleteEdges.name.multiple=\u522a\u9664\u5168\u90e8 +DeleteEdges.confirmation.message=\u78ba\u8a8d\u522a\u9664\u9023\u7d50\uff1f +DeleteEdgesWithNodes.name.single=\u522a\u9664\u7bc0\u9ede\u6240\u5c6c\u7684\u9023\u7d50... +DeleteEdgesWithNodes.name.multiple=\u522a\u9664\u6240\u6709\u7bc0\u9ede\u6240\u5c6c\u7684\u9023\u7d50... +SelectOnGraph.name=Select on Overview +ClearEdgesData.name.single=\u6e05\u9664... +ClearEdgesData.name.multiple=\u6e05\u9664\u5168\u90e8... +ClearEdgesData.description=\u6e05\u9664\u9078\u53d6\u9023\u7d50\u7684\u8cc7\u6599 +ClearEdgesData.ui.description=\u6e05\u9664\u6574\u6b04\uff1a +CopyEdgeDataToOtherEdges.name=\u8986\u84cb\u5176\u4ed6\u6240\u9078\u9023\u7d50\u7684\u8cc7\u6599... +CopyEdgeDataToOtherEdges.description=\u8907\u88fd\u6240\u9078\u9023\u7d50\u6b04\u4f4d\u8cc7\u6599\u5230\u5176\u4ed6\u6240\u9078\u9023\u7d50\u3002 +CopyEdgeDataToOtherEdges.ui.rowDescription=\u8907\u88fd\u9023\u7d50\uff1a +CopyEdgeDataToOtherEdges.ui.columnsDescription=\u8986\u84cb\u6b04\u4f4d\uff1a diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/cs.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/cs.po deleted file mode 100644 index 35837a56fb..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/cs.po +++ /dev/null @@ -1,79 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-27 15:44+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenInEditEdgeWindow.name" -msgstr "Upravit hranu" - -msgid "OpenInEditEdgeWindow.name.multiple" -msgstr "Upravit vΕ‘echny hrany" - -msgid "OpenInEditEdgeWindow.description" -msgstr "ZmΔ›nit barvu a vlastnosti." - -msgid "OpenInEditEdgeWindow.description.multiple" -msgstr "ZmΔ›nit barvu a vlastnosti. Pole budou zpočÑtku prΓ‘zdnΓ‘." - -msgid "SelectSourceOnGraph.name" -msgstr "Vybrat zdrojovΓ½ uzel v pΕ™ehledu" - -msgid "SelectTargetOnGraph.name" -msgstr "Vybrat cΓ­lovΓ½ uzel v pΕ™ehledu" - -msgid "SelectNodesOnTable.name" -msgstr "Vyberte zdroj a cΓ­l v tabulce uzlΕ―" - -msgid "DeleteEdges.name.single" -msgstr "Smazat" - -msgid "DeleteEdges.name.multiple" -msgstr "Smazat vΕ‘e" - -msgid "DeleteEdges.confirmation.message" -msgstr "Potvrdit smazΓ‘nΓ­ hrany?" - -msgid "DeleteEdgesWithNodes.name.single" -msgstr "Smazat hranu s uzly..." - -msgid "DeleteEdgesWithNodes.name.multiple" -msgstr "Smazat vΕ‘echny hrany s uzly..." - -msgid "ClearEdgesData.name.single" -msgstr "Vyčistit..." - -msgid "ClearEdgesData.name.multiple" -msgstr "Vyčistit vΕ‘e..." - -msgid "ClearEdgesData.description" -msgstr "Vyčistit data ve zvolenΓ½ch hranΓ‘ch" - -msgid "ClearEdgesData.ui.description" -msgstr "Vyčistit sloupce:" - -msgid "CopyEdgeDataToOtherEdges.name" -msgstr "PΕ™epsat data na ostatnΓ­ zvolenΓ© hrany..." - -msgid "CopyEdgeDataToOtherEdges.description" -msgstr "KopΓ­rovat zvolenΓ© sloupce hrany na ostatnΓ­ zvolenΓ© hrany" - -msgid "CopyEdgeDataToOtherEdges.ui.rowDescription" -msgstr "KopΓ­rovat hranu:" - -msgid "CopyEdgeDataToOtherEdges.ui.columnsDescription" -msgstr "PΕ™epsat sloupce:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/es.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/es.po deleted file mode 100644 index 46375dccac..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/es.po +++ /dev/null @@ -1,79 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:28+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenInEditEdgeWindow.name" -msgstr "Editar arista" - -msgid "OpenInEditEdgeWindow.name.multiple" -msgstr "Editar todas aristas" - -msgid "OpenInEditEdgeWindow.description" -msgstr "Cambiar colores y atributos" - -msgid "OpenInEditEdgeWindow.description.multiple" -msgstr "Cambiar colores y atributos. Los campos estarΓ‘n vacΓ­os inicialmente." - -msgid "SelectSourceOnGraph.name" -msgstr "Seleccionar nodo origen en la vista del grafo" - -msgid "SelectTargetOnGraph.name" -msgstr "Seleccionar nodo destino en la vista del grafo" - -msgid "SelectNodesOnTable.name" -msgstr "Seleccionar nodos origen y destino en la tabla de nodos" - -msgid "DeleteEdges.name.single" -msgstr "Eliminar" - -msgid "DeleteEdges.name.multiple" -msgstr "Eliminar todas" - -msgid "DeleteEdges.confirmation.message" -msgstr "ΒΏConfirmar eliminaciΓ³n de arista(s)?" - -msgid "DeleteEdgesWithNodes.name.single" -msgstr "Eliminar arista con sus nodos..." - -msgid "DeleteEdgesWithNodes.name.multiple" -msgstr "Eliminar aristas con sus nodos..." - -msgid "ClearEdgesData.name.single" -msgstr "Borrar datos de la arista..." - -msgid "ClearEdgesData.name.multiple" -msgstr "Borrar datos de todas las aristas..." - -msgid "ClearEdgesData.description" -msgstr "Borra los datos de las aristas seleccionadas" - -msgid "ClearEdgesData.ui.description" -msgstr "Borrar columnas:" - -msgid "CopyEdgeDataToOtherEdges.name" -msgstr "Sobreescribir datos a las otras aristas seleccionadas..." - -msgid "CopyEdgeDataToOtherEdges.description" -msgstr "Copia las columnas de la arista seleccionada a las otras aristas seleccionadas" - -msgid "CopyEdgeDataToOtherEdges.ui.rowDescription" -msgstr "Copiar arista:" - -msgid "CopyEdgeDataToOtherEdges.ui.columnsDescription" -msgstr "Sobreescribir columnas:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/fr.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/fr.po deleted file mode 100644 index 3dfdbd3cda..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/fr.po +++ /dev/null @@ -1,79 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:28+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenInEditEdgeWindow.name" -msgstr "Editer le lien" - -msgid "OpenInEditEdgeWindow.name.multiple" -msgstr "Editer tous les liens" - -msgid "OpenInEditEdgeWindow.description" -msgstr "Change les couleurs et attributs." - -msgid "OpenInEditEdgeWindow.description.multiple" -msgstr "Change les couleurs et attributs. Les champs sont vides au dΓ©but." - -msgid "SelectSourceOnGraph.name" -msgstr "SΓ©lectionner le noeud source dans la Vue d'Ensemble" - -msgid "SelectTargetOnGraph.name" -msgstr "SΓ©lectionner le noeud de destination dans la Vue d'Ensemble" - -msgid "SelectNodesOnTable.name" -msgstr "SΓ©lectionner les noeuds source et destination" - -msgid "DeleteEdges.name.single" -msgstr "Supprimer" - -msgid "DeleteEdges.name.multiple" -msgstr "Tout supprimer" - -msgid "DeleteEdges.confirmation.message" -msgstr "Confirmer la suppression des liens ?" - -msgid "DeleteEdgesWithNodes.name.single" -msgstr "Supprimer les liens avec leurs noeuds..." - -msgid "DeleteEdgesWithNodes.name.multiple" -msgstr "Supprimer tous les liens avec leurs noeuds..." - -msgid "ClearEdgesData.name.single" -msgstr "Effacer..." - -msgid "ClearEdgesData.name.multiple" -msgstr "Tout effacer..." - -msgid "ClearEdgesData.description" -msgstr "Effacer les donnΓ©es des liens sΓ©lectionnΓ©s" - -msgid "ClearEdgesData.ui.description" -msgstr "Effacer les colonnes :" - -msgid "CopyEdgeDataToOtherEdges.name" -msgstr "Ecraser les donnΓ©es des autres liens sΓ©lectionnΓ©s..." - -msgid "CopyEdgeDataToOtherEdges.description" -msgstr "Copier les colonnes du lien vers les autres liens sΓ©lectionnΓ©s" - -msgid "CopyEdgeDataToOtherEdges.ui.rowDescription" -msgstr "Copier le lien :" - -msgid "CopyEdgeDataToOtherEdges.ui.columnsDescription" -msgstr "Ecraser les colonnes :" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ja.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ja.po deleted file mode 100644 index 4cd6c22379..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ja.po +++ /dev/null @@ -1,79 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-02 10:55+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenInEditEdgeWindow.name" -msgstr "辺を編集" - -msgid "OpenInEditEdgeWindow.name.multiple" -msgstr "すべてγθΎΊγ‚’編集" - -msgid "OpenInEditEdgeWindow.description" -msgstr "θ‰²γ¨ε±žζ€§γε€‰ζ›΄" - -msgid "OpenInEditEdgeWindow.description.multiple" -msgstr "θ‰²γ¨ε±žζ€§γε€‰ζ›΄γ€‚εˆγ‚γ―空欄です。" - -msgid "SelectSourceOnGraph.name" -msgstr "概要γγ‚½γƒΌγ‚ΉγƒŽγƒΌγƒ‰γ‚’ιΈζŠž" - -msgid "SelectTargetOnGraph.name" -msgstr "概要γγ‚ΏγƒΌγ‚²γƒƒγƒˆγƒŽγƒΌγƒ‰γ‚’ιΈζŠž" - -msgid "SelectNodesOnTable.name" -msgstr "γƒŽγƒΌγƒ‰γƒ†γƒΌγƒ–γƒ«γγ‚½γƒΌγ‚Ήγ¨γ‚ΏγƒΌγ‚²γƒƒγƒˆγ‚’ιΈζŠž" - -msgid "DeleteEdges.name.single" -msgstr "ε‰Šι™€" - -msgid "DeleteEdges.name.multiple" -msgstr "γ™γΉγ¦γ‚’ε‰Šι™€" - -msgid "DeleteEdges.confirmation.message" -msgstr "θΎΊγ‚’ε‰Šι™€γ—γ¦γ‚‚γ„γ„γ§γ™γ‹οΌŸ" - -msgid "DeleteEdgesWithNodes.name.single" -msgstr "γƒŽγƒΌγƒ‰δ»˜γγθΎΊγ‚’ε‰Šι™€..." - -msgid "DeleteEdgesWithNodes.name.multiple" -msgstr "すべてγγƒŽγƒΌγƒ‰δ»˜γγθΎΊγ‚’ε‰Šι™€..." - -msgid "ClearEdgesData.name.single" -msgstr "γ‚―γƒͺγ‚’..." - -msgid "ClearEdgesData.name.multiple" -msgstr "すべてをクγƒͺγ‚’..." - -msgid "ClearEdgesData.description" -msgstr "ιΈζŠžγ—γŸθΎΊγγƒ‡γƒΌγ‚Ώγ‚’γ‚―γƒͺγ‚’" - -msgid "ClearEdgesData.ui.description" -msgstr "εˆ—γ‚’γ‚―γƒͺγ‚’:" - -msgid "CopyEdgeDataToOtherEdges.name" -msgstr "ιΈζŠžγ—γŸδ»–γθΎΊγ«γƒ‡γƒΌγ‚Ώγ‚’δΈŠζ›Έγ:" - -msgid "CopyEdgeDataToOtherEdges.description" -msgstr "ιΈζŠžγ—γŸθΎΊγεˆ—γ‚’δ»–γιΈζŠžγ—γŸθΎΊγ«γ‚³γƒ”γƒΌγ€‚" - -msgid "CopyEdgeDataToOtherEdges.ui.rowDescription" -msgstr "辺をコピー:" - -msgid "CopyEdgeDataToOtherEdges.ui.columnsDescription" -msgstr "εˆ—γ‚’δΈŠζ›Έγ:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/org-gephi-datalab-plugin-manipulators-edges.pot b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/org-gephi-datalab-plugin-manipulators-edges.pot deleted file mode 100644 index 84d1a693cb..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/org-gephi-datalab-plugin-manipulators-edges.pot +++ /dev/null @@ -1,76 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenInEditEdgeWindow.name" -msgstr "Edit edge" - -msgid "OpenInEditEdgeWindow.name.multiple" -msgstr "Edit all edges" - -msgid "OpenInEditEdgeWindow.description" -msgstr "Change colors and attributes." - -msgid "OpenInEditEdgeWindow.description.multiple" -msgstr "Change colors and attributes. Fields will be blank at first." - -msgid "SelectSourceOnGraph.name" -msgstr "Select source node on Overview" - -msgid "SelectTargetOnGraph.name" -msgstr "Select target node on Overview" - -msgid "SelectNodesOnTable.name" -msgstr "Select source and target on nodes table" - -msgid "DeleteEdges.name.single" -msgstr "Delete" - -msgid "DeleteEdges.name.multiple" -msgstr "Delete all" - -msgid "DeleteEdges.confirmation.message" -msgstr "Confirm edge deletion?" - -msgid "DeleteEdgesWithNodes.name.single" -msgstr "Delete edge with nodes..." - -msgid "DeleteEdgesWithNodes.name.multiple" -msgstr "Delete all edges with nodes..." - -msgid "ClearEdgesData.name.single" -msgstr "Clear..." - -msgid "ClearEdgesData.name.multiple" -msgstr "Clear all..." - -msgid "ClearEdgesData.description" -msgstr "Clear data of the selected edges" - -msgid "ClearEdgesData.ui.description" -msgstr "Clear columns:" - -msgid "CopyEdgeDataToOtherEdges.name" -msgstr "Overwrite data to other selected edges..." - -msgid "CopyEdgeDataToOtherEdges.description" -msgstr "Copy the selected edge columns to the other selected edges." - -msgid "CopyEdgeDataToOtherEdges.ui.rowDescription" -msgstr "Copy edge:" - -msgid "CopyEdgeDataToOtherEdges.ui.columnsDescription" -msgstr "Overwrite columns:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/pt_BR.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/pt_BR.po deleted file mode 100644 index 35762dcc2e..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/pt_BR.po +++ /dev/null @@ -1,79 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 19:16+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenInEditEdgeWindow.name" -msgstr "Editar aresta" - -msgid "OpenInEditEdgeWindow.name.multiple" -msgstr "Editar todas as arestas" - -msgid "OpenInEditEdgeWindow.description" -msgstr "Alterar cores e atributos." - -msgid "OpenInEditEdgeWindow.description.multiple" -msgstr "Alterar cores e atributos. Os campos estarΓ£o inicialmente vazios." - -msgid "SelectSourceOnGraph.name" -msgstr "Selecionar nΓ³ de origem na VisΓ£o geral" - -msgid "SelectTargetOnGraph.name" -msgstr "Selecionar nΓ³ de destino na VisΓ£o geral" - -msgid "SelectNodesOnTable.name" -msgstr "Selecionar nΓ³s de origem e destino na tabela de nΓ³s" - -msgid "DeleteEdges.name.single" -msgstr "Excluir" - -msgid "DeleteEdges.name.multiple" -msgstr "Excluir todos" - -msgid "DeleteEdges.confirmation.message" -msgstr "Confirmar a exclusΓ£o da aresta?" - -msgid "DeleteEdgesWithNodes.name.single" -msgstr "Excluir aresta e seus nΓ³s..." - -msgid "DeleteEdgesWithNodes.name.multiple" -msgstr "Excluir arestas com seus nΓ³s..." - -msgid "ClearEdgesData.name.single" -msgstr "Limpar dados da aresta..." - -msgid "ClearEdgesData.name.multiple" -msgstr "Limpar dados de todas as arestas..." - -msgid "ClearEdgesData.description" -msgstr "Limpar dados das arestas selecionadas" - -msgid "ClearEdgesData.ui.description" -msgstr "Limpar colunas:" - -msgid "CopyEdgeDataToOtherEdges.name" -msgstr "Sobrescrever dados das outras arestas selecionadas..." - -msgid "CopyEdgeDataToOtherEdges.description" -msgstr "Copiar as colunas da aresta selecionada para as outras arestas selecionadas." - -msgid "CopyEdgeDataToOtherEdges.ui.rowDescription" -msgstr "Copiar aresta:" - -msgid "CopyEdgeDataToOtherEdges.ui.columnsDescription" -msgstr "Sobrescrever colunas:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ru.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ru.po deleted file mode 100644 index 124b59f18c..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ru.po +++ /dev/null @@ -1,79 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 13:16+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenInEditEdgeWindow.name" -msgstr "Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π±Ρ€ΠΎ" - -msgid "OpenInEditEdgeWindow.name.multiple" -msgstr "Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС Ρ€Π΅Π±Ρ€Π°" - -msgid "OpenInEditEdgeWindow.description" -msgstr "ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠΊΠ½ΠΎ для рСдактирования Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π΅Π±Ρ€Π°. Π’ Π½Ρ‘ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ†Π²Π΅Ρ‚ Ρ€Π΅Π±Ρ€Π° ΠΈ Π΅Π³ΠΎ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹." - -msgid "OpenInEditEdgeWindow.description.multiple" -msgstr "ΠžΡ‚ΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ ΠΎΠΊΠ½ΠΎ для рСдактирования Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Ρ… Ρ€Ρ‘Π±Π΅Ρ€. Π’ Π½Ρ‘ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ†Π²Π΅Ρ‚Π° Ρ€Ρ‘Π±Π΅Ρ€ ΠΈ ΠΈΡ… Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹." - -msgid "SelectSourceOnGraph.name" -msgstr "Π’Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡƒΠ·Π΅Π»-источник Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ просмотра Π³Ρ€Π°Ρ„Π°" - -msgid "SelectTargetOnGraph.name" -msgstr "Π’Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡƒΠ·Π΅Π»-ΠΏΡ€ΠΈΡ‘ΠΌΠ½ΠΈΠΊ Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ просмотра Π³Ρ€Π°Ρ„Π°" - -msgid "SelectNodesOnTable.name" -msgstr "Π’Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡƒΠ·Π΅Π»-источник ΠΈ ΡƒΠ·Π΅Π»-ΠΏΡ€ΠΈΡ‘ΠΌΠ½ΠΈΠΊ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΡƒΠ·Π»ΠΎΠ²" - -msgid "DeleteEdges.name.single" -msgstr "Π£Π΄Π°Π»ΠΈΡ‚ΡŒ" - -msgid "DeleteEdges.name.multiple" -msgstr "Π£Π΄Π°Π»ΠΈΡ‚ΡŒ всС" - -msgid "DeleteEdges.confirmation.message" -msgstr "Π’Ρ‹ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ Ρ€Π΅Π±Ρ€ΠΎ(Ρ€Ρ‘Π±Ρ€Π°)?" - -msgid "DeleteEdgesWithNodes.name.single" -msgstr "Π£Π΄Π°Π»ΠΈΡ‚ΡŒ Ρ€Π΅Π±Ρ€ΠΎ с ΠΏΡ€ΠΈΠΌΡ‹ΠΊΠ°ΡŽΡ‰ΠΈΠΌΠΈ ΡƒΠ·Π»Π°ΠΌΠΈ..." - -msgid "DeleteEdgesWithNodes.name.multiple" -msgstr "Π£Π΄Π°Π»ΠΈΡ‚ΡŒ всС Ρ€Ρ‘Π±Ρ€Π° с ΠΏΡ€ΠΈΠΌΡ‹ΠΊΠ°ΡŽΡ‰ΠΈΠΌΠΈ ΡƒΠ·Π»Π°ΠΌΠΈ..." - -msgid "ClearEdgesData.name.single" -msgstr "ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Ρ€Π΅Π±Ρ€Π°..." - -msgid "ClearEdgesData.name.multiple" -msgstr "ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ всСх Ρ€Ρ‘Π±Π΅Ρ€..." - -msgid "ClearEdgesData.description" -msgstr "ΠžΡ‡ΠΈΡ‰Π°Π΅Ρ‚ значСния Π² ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… столбцах Ρƒ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π΅Π±Ρ€Π°(Ρ€Ρ‘Π±Π΅Ρ€)..." - -msgid "ClearEdgesData.ui.description" -msgstr "Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ столбцы для очистки:" - -msgid "CopyEdgeDataToOtherEdges.name" -msgstr "ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Ρ€Π΅Π±Ρ€Π° Π² Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ€Ρ‘Π±Π΅Ρ€..." - -msgid "CopyEdgeDataToOtherEdges.description" -msgstr "ΠšΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ значСния ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… столбцов Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Ρ€Π΅Π±Ρ€Π° Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ Ρ€Ρ‘Π±Ρ€Π°" - -msgid "CopyEdgeDataToOtherEdges.ui.rowDescription" -msgstr "ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Edge Π΄Π°Π½Π½Ρ‹Ρ… Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Edges.ui.ряд ОписаниС" - -msgid "CopyEdgeDataToOtherEdges.ui.columnsDescription" -msgstr "ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Edge Π΄Π°Π½Π½Ρ‹Ρ… Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ Edges.ui.ОписаниС столбцов" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_ar.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_ca.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_ca.properties new file mode 100644 index 0000000000..f13f9d3b73 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_ca.properties @@ -0,0 +1,3 @@ +DeleteEdgesWithNodesUI.description=Choose the nodes to delete. +DeleteEdgesWithNodesUI.deleteSource.text=Esborra el node de sortida +DeleteEdgesWithNodesUI.deleteTarget.text=Esborra el node d'arribada diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_cs.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_cs.properties index 630a05e674..915bc1bf1f 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_cs.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_cs.properties @@ -1,13 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-27 15\:44+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -DeleteEdgesWithNodesUI.description=Zvolte uzly ke smaz\u00e1n\u00ed. - -DeleteEdgesWithNodesUI.deleteSource.text=Smazat zdrojov\u00fd uzel - -DeleteEdgesWithNodesUI.deleteTarget.text=Smazat c\u00edlov\u00fd uzel +DeleteEdgesWithNodesUI.description=Zvolte uzly ke smazαnν. +DeleteEdgesWithNodesUI.deleteSource.text=Smazat zdrojovύ uzel +DeleteEdgesWithNodesUI.deleteTarget.text=Smazat cνlovύ uzel diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_de.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_de.properties new file mode 100644 index 0000000000..f58b6ca119 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_de.properties @@ -0,0 +1,3 @@ +DeleteEdgesWithNodesUI.description=Knoten zum Lφschen auswδhlen. +DeleteEdgesWithNodesUI.deleteSource.text=Startknoten lφschen +DeleteEdgesWithNodesUI.deleteTarget.text=Zielknoten lφschen diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_es.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_es.properties index c9c9971749..d1f7524e65 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_es.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_es.properties @@ -1,13 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:29+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -DeleteEdgesWithNodesUI.description=Elige qu\u00e9 nodos eliminar. - -DeleteEdgesWithNodesUI.deleteSource.text=Eliminar nodo origen - -DeleteEdgesWithNodesUI.deleteTarget.text=Eliminar nodo destino +DeleteEdgesWithNodesUI.description=Elige quι nodos eliminar. +DeleteEdgesWithNodesUI.deleteSource.text=Eliminar nodo origen +DeleteEdgesWithNodesUI.deleteTarget.text=Eliminar nodo destino diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_fr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_fr.properties index 7b7059d138..492dc5f09e 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_fr.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_fr.properties @@ -1,13 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:28+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -DeleteEdgesWithNodesUI.description=Choisissez les noeuds \u00e0 supprimer des liens s\u00e9lectionn\u00e9s. - -DeleteEdgesWithNodesUI.deleteSource.text=Supprimer noeud source - -DeleteEdgesWithNodesUI.deleteTarget.text=Supprimer noeud de destination +DeleteEdgesWithNodesUI.description=Choisissez les noeuds ΰ supprimer des liens sιlectionnιs. +DeleteEdgesWithNodesUI.deleteSource.text=Supprimer noeud source +DeleteEdgesWithNodesUI.deleteTarget.text=Supprimer noeud de destination diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_he.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_he.properties new file mode 100644 index 0000000000..0e85ddfe0e --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_he.properties @@ -0,0 +1,3 @@ +DeleteEdgesWithNodesUI.description=Choose the nodes to delete. +DeleteEdgesWithNodesUI.deleteSource.text=Delete source node +DeleteEdgesWithNodesUI.deleteTarget.text=Delete target node diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_hu.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_hu.properties new file mode 100644 index 0000000000..221afbaf66 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_hu.properties @@ -0,0 +1,5 @@ + + +DeleteEdgesWithNodesUI.deleteSource.text=Forr\u00E1scsom\u00F3pont t\u00F6rl\u00E9se +DeleteEdgesWithNodesUI.description=V\u00E1lassza ki a t\u00F6r\u00F6lni k\u00EDv\u00E1nt csom\u00F3pontokat. +DeleteEdgesWithNodesUI.deleteTarget.text=C\u00E9lcsom\u00F3pont t\u00F6rl\u00E9se diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_it.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_it.properties new file mode 100644 index 0000000000..0e85ddfe0e --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_it.properties @@ -0,0 +1,3 @@ +DeleteEdgesWithNodesUI.description=Choose the nodes to delete. +DeleteEdgesWithNodesUI.deleteSource.text=Delete source node +DeleteEdgesWithNodesUI.deleteTarget.text=Delete target node diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_ja.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_ja.properties index f8ed84a111..7d5286f13c 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_ja.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_ja.properties @@ -1,13 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-13 09\:11+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -DeleteEdgesWithNodesUI.description=\u6d88\u53bb\u3059\u308b\u30ce\u30fc\u30c9\u306e\u9078\u629e - -DeleteEdgesWithNodesUI.deleteSource.text=\u30bd\u30fc\u30b9\u30fb\u30ce\u30fc\u30c9\u3092\u6d88\u53bb\u3059\u308b - -DeleteEdgesWithNodesUI.deleteTarget.text=\u30bf\u30fc\u30b2\u30c3\u30c8\u30fb\u30ce\u30fc\u30c9\u3092\u6d88\u53bb\u3059\u308b +DeleteEdgesWithNodesUI.description=\u6d88\u53bb\u3059\u308b\u30ce\u30fc\u30c9\u306e\u9078\u629e +DeleteEdgesWithNodesUI.deleteSource.text=\u30bd\u30fc\u30b9\u30fb\u30ce\u30fc\u30c9\u3092\u6d88\u53bb\u3059\u308b +DeleteEdgesWithNodesUI.deleteTarget.text=\u30bf\u30fc\u30b2\u30c3\u30c8\u30fb\u30ce\u30fc\u30c9\u3092\u6d88\u53bb\u3059\u308b diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_ko.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_ko.properties new file mode 100644 index 0000000000..89ab9a3791 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_ko.properties @@ -0,0 +1,5 @@ + + +DeleteEdgesWithNodesUI.deleteSource.text=\uC18C\uC2A4 \uB178\uB4DC\uB97C \uC0AD\uC81C +DeleteEdgesWithNodesUI.description=\uC0AD\uC81C\uD560 \uB178\uB4DC\uB97C \uC120\uD0DD\uD558\uC138\uC694. +DeleteEdgesWithNodesUI.deleteTarget.text=\uD0C0\uAC9F \uB178\uB4DC\uB97C \uC0AD\uC81C diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_nl.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_nl.properties new file mode 100644 index 0000000000..f425f6eea8 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_nl.properties @@ -0,0 +1,3 @@ +DeleteEdgesWithNodesUI.description=Kies de knopen om te verwijderen. +DeleteEdgesWithNodesUI.deleteSource.text=Bronknoop verwijderen +DeleteEdgesWithNodesUI.deleteTarget.text=Doelknoop verwijderen diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_pt_BR.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_pt_BR.properties index 9f0bfbe88c..2cd1fc2a3f 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_pt_BR.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_pt_BR.properties @@ -1,13 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 19\:17+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -DeleteEdgesWithNodesUI.description=Escolha os n\u00f3s para excluir. - -DeleteEdgesWithNodesUI.deleteSource.text=Excluir n\u00f3 de origem - -DeleteEdgesWithNodesUI.deleteTarget.text=Excluir n\u00f3 de destino +DeleteEdgesWithNodesUI.description=Escolha os nσs para excluir. +DeleteEdgesWithNodesUI.deleteSource.text=Excluir nσ de origem +DeleteEdgesWithNodesUI.deleteTarget.text=Excluir nσ de destino diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_ro.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_ro.properties new file mode 100644 index 0000000000..c618d561ba --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_ro.properties @@ -0,0 +1,5 @@ + + +DeleteEdgesWithNodesUI.description=Alege nodurile de \u0219ters. +DeleteEdgesWithNodesUI.deleteSource.text=\u0218terge nodul surs\u0103 +DeleteEdgesWithNodesUI.deleteTarget.text=\u0218terge nodul \u021Bint\u0103 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_ru.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_ru.properties index a60e62c40f..4d5e31beeb 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_ru.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_ru.properties @@ -1,13 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:28+0000\nLast-Translator\: gephi \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -DeleteEdgesWithNodesUI.description=\u0412\u044b\u0431\u043e\u0440 \u0443\u0437\u043b\u043e\u0432, \u0443\u0434\u0430\u043b\u044f\u0435\u043c\u044b\u0445 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u043c \u0440\u0435\u0431\u0440\u043e\u043c(\u0440\u0451\u0431\u0440\u0430\u043c\u0438). - -DeleteEdgesWithNodesUI.deleteSource.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0443\u0437\u0435\u043b-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a - -DeleteEdgesWithNodesUI.deleteTarget.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0443\u0437\u0435\u043b-\u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a +DeleteEdgesWithNodesUI.description=\u0412\u044b\u0431\u043e\u0440 \u0443\u0437\u043b\u043e\u0432, \u0443\u0434\u0430\u043b\u044f\u0435\u043c\u044b\u0445 \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u043c \u0440\u0435\u0431\u0440\u043e\u043c(\u0440\u0451\u0431\u0440\u0430\u043c\u0438). +DeleteEdgesWithNodesUI.deleteSource.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0443\u0437\u0435\u043b-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a +DeleteEdgesWithNodesUI.deleteTarget.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0443\u0437\u0435\u043b-\u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_th.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_tr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_tr.properties new file mode 100644 index 0000000000..3c04740d3b --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_tr.properties @@ -0,0 +1,3 @@ +DeleteEdgesWithNodesUI.description=Silinecek dό\u011fόmleri seηiniz. +DeleteEdgesWithNodesUI.deleteSource.text=Kaynak dό\u011fόmό sil +DeleteEdgesWithNodesUI.deleteTarget.text=Hedef dό\u011fόmό sil diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_zh_CN.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_zh_CN.properties index af37615332..dd85c2cbf3 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_zh_CN.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_zh_CN.properties @@ -1,12 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:19+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -DeleteEdgesWithNodesUI.description=\u9009\u62e9\u8981\u5220\u9664\u7684\u8282\u70b9\u3002 - -DeleteEdgesWithNodesUI.deleteSource.text=\u5220\u9664\u6e90\u8282\u70b9 - -DeleteEdgesWithNodesUI.deleteTarget.text=\u5220\u9664\u76ee\u6807\u8282\u70b9 +DeleteEdgesWithNodesUI.description=\u9009\u62e9\u8981\u5220\u9664\u7684\u8282\u70b9\u3002 +DeleteEdgesWithNodesUI.deleteSource.text=\u5220\u9664\u6e90\u8282\u70b9 +DeleteEdgesWithNodesUI.deleteTarget.text=\u5220\u9664\u76ee\u6807\u8282\u70b9 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_zh_TW.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_zh_TW.properties new file mode 100644 index 0000000000..0e85ddfe0e --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/Bundle_zh_TW.properties @@ -0,0 +1,3 @@ +DeleteEdgesWithNodesUI.description=Choose the nodes to delete. +DeleteEdgesWithNodesUI.deleteSource.text=Delete source node +DeleteEdgesWithNodesUI.deleteTarget.text=Delete target node diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/cs.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/cs.po deleted file mode 100644 index ad285085e3..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/cs.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-27 15:44+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "DeleteEdgesWithNodesUI.description" -msgstr "Zvolte uzly ke smazΓ‘nΓ­." - -msgid "DeleteEdgesWithNodesUI.deleteSource.text" -msgstr "Smazat zdrojovΓ½ uzel" - -msgid "DeleteEdgesWithNodesUI.deleteTarget.text" -msgstr "Smazat cΓ­lovΓ½ uzel" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/es.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/es.po deleted file mode 100644 index 5a904d01dc..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/es.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:29+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "DeleteEdgesWithNodesUI.description" -msgstr "Elige quΓ© nodos eliminar." - -msgid "DeleteEdgesWithNodesUI.deleteSource.text" -msgstr "Eliminar nodo origen" - -msgid "DeleteEdgesWithNodesUI.deleteTarget.text" -msgstr "Eliminar nodo destino" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/fr.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/fr.po deleted file mode 100644 index 67b29aeb7d..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/fr.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:28+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "DeleteEdgesWithNodesUI.description" -msgstr "Choisissez les noeuds Γ  supprimer des liens sΓ©lectionnΓ©s." - -msgid "DeleteEdgesWithNodesUI.deleteSource.text" -msgstr "Supprimer noeud source" - -msgid "DeleteEdgesWithNodesUI.deleteTarget.text" -msgstr "Supprimer noeud de destination" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/ja.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/ja.po deleted file mode 100644 index 8798732462..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/ja.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-13 09:11+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "DeleteEdgesWithNodesUI.description" -msgstr "ζΆˆεŽ»γ™γ‚‹γƒŽγƒΌγƒ‰γιΈζŠž" - -msgid "DeleteEdgesWithNodesUI.deleteSource.text" -msgstr "γ‚½γƒΌγ‚Ήγƒ»γƒŽγƒΌγƒ‰γ‚’ζΆˆεŽ»γ™γ‚‹" - -msgid "DeleteEdgesWithNodesUI.deleteTarget.text" -msgstr "γ‚ΏγƒΌγ‚²γƒƒγƒˆγƒ»γƒŽγƒΌγƒ‰γ‚’ζΆˆεŽ»γ™γ‚‹" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/org-gephi-datalab-plugin-manipulators-edges-ui.pot b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/org-gephi-datalab-plugin-manipulators-edges-ui.pot deleted file mode 100644 index 53775fcb0c..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/org-gephi-datalab-plugin-manipulators-edges-ui.pot +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "DeleteEdgesWithNodesUI.description" -msgstr "Choose the nodes to delete." - -msgid "DeleteEdgesWithNodesUI.deleteSource.text" -msgstr "Delete source node" - -msgid "DeleteEdgesWithNodesUI.deleteTarget.text" -msgstr "Delete target node" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/pt_BR.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/pt_BR.po deleted file mode 100644 index e14e031179..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/pt_BR.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 19:17+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "DeleteEdgesWithNodesUI.description" -msgstr "Escolha os nΓ³s para excluir." - -msgid "DeleteEdgesWithNodesUI.deleteSource.text" -msgstr "Excluir nΓ³ de origem" - -msgid "DeleteEdgesWithNodesUI.deleteTarget.text" -msgstr "Excluir nΓ³ de destino" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/ru.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/ru.po deleted file mode 100644 index 6dc37c9cd6..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/ru.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:28+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "DeleteEdgesWithNodesUI.description" -msgstr "Π’Ρ‹Π±ΠΎΡ€ ΡƒΠ·Π»ΠΎΠ², удаляСмых вмСстС с Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌ Ρ€Π΅Π±Ρ€ΠΎΠΌ(Ρ€Ρ‘Π±Ρ€Π°ΠΌΠΈ)." - -msgid "DeleteEdgesWithNodesUI.deleteSource.text" -msgstr "Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΡƒΠ·Π΅Π»-источник" - -msgid "DeleteEdgesWithNodesUI.deleteTarget.text" -msgstr "Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΡƒΠ·Π΅Π»-ΠΏΡ€ΠΈΡ‘ΠΌΠ½ΠΈΠΊ" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/zh_CN.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/zh_CN.po deleted file mode 100644 index ac2230a76a..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/ui/zh_CN.po +++ /dev/null @@ -1,27 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:19+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "DeleteEdgesWithNodesUI.description" -msgstr "ι€‰ζ‹©θ¦εˆ ι™€ηš„θŠ‚η‚Ήγ€‚" - -msgid "DeleteEdgesWithNodesUI.deleteSource.text" -msgstr "εˆ ι™€ζΊθŠ‚η‚Ή" - -msgid "DeleteEdgesWithNodesUI.deleteTarget.text" -msgstr "εˆ ι™€η›ζ ‡θŠ‚η‚Ή" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/zh_CN.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/zh_CN.po deleted file mode 100644 index 2d1724a3a5..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/edges/zh_CN.po +++ /dev/null @@ -1,78 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:19+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenInEditEdgeWindow.name" -msgstr "ηΌ–θΎ‘θΎΉ" - -msgid "OpenInEditEdgeWindow.name.multiple" -msgstr "ε…¨ηΌ–θΎ‘θΎΉ" - -msgid "OpenInEditEdgeWindow.description" -msgstr "ζ”Ήε˜ι’œθ‰²ε’Œε±žζ€§γ€‚" - -msgid "OpenInEditEdgeWindow.description.multiple" -msgstr "ζ”Ήε˜ι’œθ‰²ε’Œε±žζ€§γ€‚ ε°†ε…ˆη©Ίε­—ζ΅γ€‚" - -msgid "SelectSourceOnGraph.name" -msgstr "εœ¨ζ¦‚θΏ°ι€‰ζ‹©ζΊθŠ‚η‚Ή" - -msgid "SelectTargetOnGraph.name" -msgstr "εœ¨ζ¦‚θΏ°ι€‰ζ‹©η›ζ ‡θŠ‚η‚Ή" - -msgid "SelectNodesOnTable.name" -msgstr "εœ¨θŠ‚η‚Ήθ‘¨ζ Όι€‰ζ‹©ζΊε’Œη›ζ ‡θŠ‚η‚Ή" - -msgid "DeleteEdges.name.single" -msgstr "εˆ ι™€" - -msgid "DeleteEdges.name.multiple" -msgstr "ε…¨εˆ ι™€" - -msgid "DeleteEdges.confirmation.message" -msgstr "η‘θ€εˆ ι™€θΎΉοΌŸ" - -msgid "DeleteEdgesWithNodes.name.single" -msgstr "εˆ ι™€θ·ŸθŠ‚η‚Ήδ»¬β€¦" - -msgid "DeleteEdgesWithNodes.name.multiple" -msgstr "εˆ ι™€ιƒ½θΎΉδ»¬θ·ŸθŠ‚η‚Ήδ»¬β€¦" - -msgid "ClearEdgesData.name.single" -msgstr "清洗…" - -msgid "ClearEdgesData.name.multiple" -msgstr "全清洗…" - -msgid "ClearEdgesData.description" -msgstr "清洗选εšθΎΉηš„ζ•°ζ" - -msgid "ClearEdgesData.ui.description" -msgstr "ζΈ…ζ΄—εˆ—δ»¬οΌš" - -msgid "CopyEdgeDataToOtherEdges.name" -msgstr "εœ¨εˆ«ι€‰εšηš„边们覆盖数ζβ€¦" - -msgid "CopyEdgeDataToOtherEdges.description" -msgstr "εœ¨εˆ«ηš„ι€‰εšθΎΉε€εˆΆι€‰εšθΎΉηš„εˆ—γ€‚" - -msgid "CopyEdgeDataToOtherEdges.ui.rowDescription" -msgstr "倍刢边:" - -msgid "CopyEdgeDataToOtherEdges.ui.columnsDescription" -msgstr "θ¦†η›–εˆ—δ»¬οΌš" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle.properties index 7ae71c4b77..ca1718a18c 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle.properties @@ -12,4 +12,7 @@ MergeNodeDuplicates.description=Automatically detects and merges node duplicates SearchReplace.name=Search/Replace SearchReplace.window.close=Close ImportCSV.name=Import Spreadsheet -ExportTable.name=Export table \ No newline at end of file +ExportTable.name=Export table + +ManageColumnEstimators.name=Manage dynamic column estimators +ManageColumnEstimators.description=Configure estimators of dynamic columns (TimestampMap or IntervalMap types) \ No newline at end of file diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_ar.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_ca.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_ca.properties new file mode 100644 index 0000000000..c018c5fa9d --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_ca.properties @@ -0,0 +1,14 @@ +AddNodeToGraph.name=Afegeix un node +AddNodeToGraph.dialog.text=Etiqueta +AddEdgeToGraph.name=Afegeix una aresta +ClearGraph.name=Neteja el graf +ClearGraph.dialog.text=Segur que vol netejar el graf?
    Tots els nodes i arestes s'esborraran
    +ClearEdges.name=Neteja les arestes +MergeNodeDuplicates.name=Detect and merge node duplicates +MergeNodeDuplicates.description=Automatically detects and merges node duplicates based on a column +SearchReplace.name=Busca/Reemplaηa +SearchReplace.window.close=Tanca +ImportCSV.name=Importa un full de cΰlcul +ExportTable.name=Exporta la taula +ManageColumnEstimators.name=Manage dynamic column estimators +ManageColumnEstimators.description=Configure estimators of dynamic columns (TimestampMap or IntervalMap types) diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_cs.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_cs.properties index 22494e3453..42dc975c82 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_cs.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_cs.properties @@ -1,31 +1,18 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-27 14\:22+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -AddNodeToGraph.name=P\u0159idat uzel - -AddNodeToGraph.dialog.text=\u0160t\u00edtek\: - -AddEdgeToGraph.name=P\u0159idat hranu - -ClearGraph.name=Vy\u010distit graf - -ClearGraph.dialog.text=Potvrdit vy\u010di\u0161t\u011bn\u00ed grafu?
    V\u0161echny uzle a hrany budou smaz\u00e1ny.
    - -ClearEdges.name=Vy\u010distit hrany - -MergeNodeDuplicates.name=Zjistit a slou\u010dit kopie uzlu - -MergeNodeDuplicates.description=Automaticky zjist\u00ed a slou\u010d\u00ed kopie uzlu na z\u00e1klad\u011b sloupce - -SearchReplace.name=Hledat/Nahradit - -SearchReplace.window.close=Zav\u0159\u00edt - -ImportCSV.name=Importovat tabulky - -ExportTable.name=Exportovat tabulky +AddNodeToGraph.name=P\u0159idat uzel +AddNodeToGraph.dialog.text=Jmenovka: +AddEdgeToGraph.name=P\u0159idat hranu + +ClearGraph.name=Vy\u010distit graf +ClearGraph.dialog.text=Potvrdit vy\u010di\u0161t\u011bnν grafu?
    V\u0161echny uzle a hrany budou smazαny.
    +ClearEdges.name=Vy\u010distit hrany + +MergeNodeDuplicates.name=Zjistit a slou\u010dit kopie uzlu +MergeNodeDuplicates.description=Automaticky zjistν a slou\u010dν kopie uzlu na zαklad\u011b sloupce + +SearchReplace.name=Hledat/Nahradit +SearchReplace.window.close=Zav\u0159νt +ImportCSV.name=Importovat tabulky +ExportTable.name=Exportovat tabulky + +ManageColumnEstimators.name=Spravovat odhadce dynamickύch sloupc\u016f +ManageColumnEstimators.description=Nastavit odhadce dynamickύch sloupc\u016f (Typy TimestampMap nebo IntervalMap) diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_de.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_de.properties new file mode 100644 index 0000000000..b67a44bb56 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_de.properties @@ -0,0 +1,18 @@ +AddNodeToGraph.name=Knoten hinzufόgen +AddNodeToGraph.dialog.text=Bezeichnung: +AddEdgeToGraph.name=Kante hinzufόgen + +ClearGraph.name=Graph lφschen +ClearGraph.dialog.text=Bestδtigen sie das Lφschen des Graphen?
    Alle Knoten und Kanten werden gelφscht.
    +ClearEdges.name=Kanten lφschen + +MergeNodeDuplicates.name=Knotenduplikate finden und verschmelzen +MergeNodeDuplicates.description=Findet und verschmilzt Knotenduplikate anhand einer Spalte + +SearchReplace.name=Suchen/Ersetzen +SearchReplace.window.close=Schlieίen +ImportCSV.name=Tabelle importieren +ExportTable.name=Tabelle exportieren + +ManageColumnEstimators.name=Schδtzer fόr dynamische Spalten verwalten +ManageColumnEstimators.description=Schδtzer fόr dynamische Spalten konfigurieren (TimestampMap oder IntervalMap-Typen) diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_es.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_es.properties index 0aab85aa79..8eb9f4c55a 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_es.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_es.properties @@ -1,32 +1,14 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-16 23\:07+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -AddNodeToGraph.name=A\u00f1adir nodo - -AddNodeToGraph.dialog.text=Etiqueta\: - -AddEdgeToGraph.name=A\u00f1adir arista - +AddNodeToGraph.name=Aρadir nodo +AddNodeToGraph.dialog.text=Etiqueta: +AddEdgeToGraph.name=Aρadir arista ClearGraph.name=Vaciar grafo - -ClearGraph.dialog.text=\u00bfConfirmar vaciar el grafo?
    Todos los nodos y aristas ser\u00e1n eliminados
    - +ClearGraph.dialog.text=ΏConfirmar vaciar el grafo?
    Todos los nodos y aristas serαn eliminados
    ClearEdges.name=Eliminar aristas - -MergeNodeDuplicates.name=Detectar y mezclar duplicados - -MergeNodeDuplicates.description=Autom\u00e1ticamente detecta y mezcla nodos duplicados a partir de una columna - +MergeNodeDuplicates.name=Detectar y fusionar nodos duplicados +MergeNodeDuplicates.description=Detecta y fusiona autom\u00E1ticamente nodos duplicados a partir de una columna SearchReplace.name=Buscar/Reemplazar - SearchReplace.window.close=Cerrar - -ImportCSV.name=Importar hoja de c\u00e1lculo - +ImportCSV.name=Importar hoja de cαlculo ExportTable.name=Exportar tabla +ManageColumnEstimators.name=Gestionar estimadores de columnas dinαmicas +ManageColumnEstimators.description=Configurar los estimadores de columnas dinαmicas (de tipo TimestampMap o IntervalMap) diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_fr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_fr.properties index b863f0938b..9be2371f99 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_fr.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_fr.properties @@ -1,32 +1,18 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-08 15\:13+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -AddNodeToGraph.name=Cr\u00e9er un noeud - -AddNodeToGraph.dialog.text=Label \: - -AddEdgeToGraph.name=Cr\u00e9er un lien - -ClearGraph.name=Effacer le graphe - -ClearGraph.dialog.text=Confirmer l'effacement du graphe ?
    Tous les noeuds et liens seront supprim\u00e9s.
    - -ClearEdges.name=Effacer les liens - -MergeNodeDuplicates.name=D\u00e9tecte et fusionne les noeuds en double - -MergeNodeDuplicates.description=D\u00e9tecte et fusionne automatiquement les noeuds en double selon une colonne. - -SearchReplace.name=Chercher/Remplacer - -SearchReplace.window.close=Fermer - -ImportCSV.name=Importer feuille de calcul - -ExportTable.name=Exporter la table +AddNodeToGraph.name=Crιer un noeud +AddNodeToGraph.dialog.text=Label : +AddEdgeToGraph.name=Crιer un lien + +ClearGraph.name=Effacer le graphe +ClearGraph.dialog.text=Confirmer l'effacement du graphe ?
    Tous les noeuds et liens seront supprimιs.
    +ClearEdges.name=Effacer les liens + +MergeNodeDuplicates.name=Dιtecte et fusionne les noeuds en double +MergeNodeDuplicates.description=Dιtecte et fusionne automatiquement les noeuds en double selon une colonne. + +SearchReplace.name=Chercher/Remplacer +SearchReplace.window.close=Fermer +ImportCSV.name=Importer feuille de calcul +ExportTable.name=Exporter la table + +ManageColumnEstimators.name=Gιrer les estimateurs de colonnes dynamiques +ManageColumnEstimators.description=Configurez les estimateurs de colonnes dynamiques (TimestampMap ou IntervalMap types) diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_he.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_he.properties new file mode 100644 index 0000000000..eaba6afebc --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_he.properties @@ -0,0 +1,14 @@ +AddNodeToGraph.name=Add node +AddNodeToGraph.dialog.text=Label: +AddEdgeToGraph.name=Add edge +ClearGraph.name=Clear graph +ClearGraph.dialog.text=Confirm to clear the graph?
    All nodes and edges will be deleted.
    +ClearEdges.name=Clear edges +MergeNodeDuplicates.name=Detect and merge node duplicates +MergeNodeDuplicates.description=Automatically detects and merges node duplicates based on a column +SearchReplace.name=Search/Replace +SearchReplace.window.close=Close +ImportCSV.name=Import Spreadsheet +ExportTable.name=Export table +ManageColumnEstimators.name=Manage dynamic column estimators +ManageColumnEstimators.description=Configure estimators of dynamic columns (TimestampMap or IntervalMap types) diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_hu.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_hu.properties new file mode 100644 index 0000000000..8aa8390959 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_hu.properties @@ -0,0 +1,16 @@ + + +ManageColumnEstimators.name=Dinamikus oszlopbecsl\u00E9sek kezel\u00E9se +SearchReplace.name=Keres\u00E9s/csere +AddEdgeToGraph.name=Adjon hozz\u00E1 \u00E9lt +MergeNodeDuplicates.description=Egy oszlop alapj\u00E1n automatikusan \u00E9szleli \u00E9s egyes\u00EDti a csom\u00F3pont-duplik\u00E1ci\u00F3kat +ManageColumnEstimators.description=Dinamikus oszlopok becsl\u0151inek konfigur\u00E1l\u00E1sa (TimestampMap vagy IntervalMap t\u00EDpusok) +ClearGraph.dialog.text=Er\u0151s\u00EDtse meg a grafikon t\u00F6rl\u00E9s\u00E9t?
    Minden csom\u00F3pont \u00E9s \u00E9l t\u00F6rl\u0151dik.
    +ClearGraph.name=Tiszta grafikon +ExportTable.name=T\u00E1bl\u00E1zat export\u00E1l\u00E1sa +AddNodeToGraph.name=Csom\u00F3pont hozz\u00E1ad\u00E1sa +SearchReplace.window.close=Bez\u00E1r\u00E1s +ImportCSV.name=T\u00E1bl\u00E1zat import\u00E1l\u00E1sa +MergeNodeDuplicates.name=A csom\u00F3pont ism\u00E9tl\u0151d\u00E9seinek \u00E9szlel\u00E9se \u00E9s egyes\u00EDt\u00E9se +ClearEdges.name=Tiszta sz\u00E9lek +AddNodeToGraph.dialog.text=C\u00EDmke: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_it.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_it.properties new file mode 100644 index 0000000000..eaba6afebc --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_it.properties @@ -0,0 +1,14 @@ +AddNodeToGraph.name=Add node +AddNodeToGraph.dialog.text=Label: +AddEdgeToGraph.name=Add edge +ClearGraph.name=Clear graph +ClearGraph.dialog.text=Confirm to clear the graph?
    All nodes and edges will be deleted.
    +ClearEdges.name=Clear edges +MergeNodeDuplicates.name=Detect and merge node duplicates +MergeNodeDuplicates.description=Automatically detects and merges node duplicates based on a column +SearchReplace.name=Search/Replace +SearchReplace.window.close=Close +ImportCSV.name=Import Spreadsheet +ExportTable.name=Export table +ManageColumnEstimators.name=Manage dynamic column estimators +ManageColumnEstimators.description=Configure estimators of dynamic columns (TimestampMap or IntervalMap types) diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_ja.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_ja.properties index 61e46fc57c..2c123b9079 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_ja.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_ja.properties @@ -1,31 +1,18 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-15 08\:07+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -AddNodeToGraph.name=\u30ce\u30fc\u30c9\u306e\u8ffd\u52a0 - -AddNodeToGraph.dialog.text=\u30e9\u30d9\u30eb\: - -AddEdgeToGraph.name=\u8fba\u306e\u8ffd\u52a0 - -ClearGraph.name=\u30b0\u30e9\u30d5\u3092\u30af\u30ea\u30a2 - -ClearGraph.dialog.text= \u672c\u5f53\u306b\u30b0\u30e9\u30d5\u3092\u6d88\u53bb\u3057\u307e\u3059\u304b\uff1f
    \u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u3068\u8fba\u306f\u524a\u9664\u3055\u308c\u307e\u3059\u3002
    - -ClearEdges.name=\u8fba\u3092\u30af\u30ea\u30a2 - -MergeNodeDuplicates.name=\u9802\u70b9\u306e\u91cd\u8907\u3092\u691c\u77e5\u3001\u4f75\u5408\u3059\u308b - -MergeNodeDuplicates.description=\u3042\u308b\u884c\u306b\u304a\u3051\u308b\u9802\u70b9\u306e\u91cd\u8907\u306e\u81ea\u52d5\u7684\u306a\u691c\u51fa\u3068\u4f75\u5408 - -SearchReplace.name=\u691c\u7d22/\u7f6e\u63db - -SearchReplace.window.close=\u9589\u3058\u308b - -ImportCSV.name=\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u306e\u30a4\u30f3\u30dd\u30fc\u30c8 - -ExportTable.name=\u30c6\u30fc\u30d6\u30eb\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 +AddNodeToGraph.name=\u30ce\u30fc\u30c9\u306e\u8ffd\u52a0 +AddNodeToGraph.dialog.text=\u30e9\u30d9\u30eb: +AddEdgeToGraph.name=\u8fba\u306e\u8ffd\u52a0 + +ClearGraph.name=\u30b0\u30e9\u30d5\u3092\u30af\u30ea\u30a2 +ClearGraph.dialog.text= \u672c\u5f53\u306b\u30b0\u30e9\u30d5\u3092\u6d88\u53bb\u3057\u307e\u3059\u304b\uff1f
    \u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u3068\u8fba\u306f\u524a\u9664\u3055\u308c\u307e\u3059\u3002
    +ClearEdges.name=\u8fba\u3092\u30af\u30ea\u30a2 + +MergeNodeDuplicates.name=\u9802\u70b9\u306e\u91cd\u8907\u3092\u691c\u77e5\u3001\u4f75\u5408\u3059\u308b +MergeNodeDuplicates.description=\u3042\u308b\u884c\u306b\u304a\u3051\u308b\u9802\u70b9\u306e\u91cd\u8907\u306e\u81ea\u52d5\u7684\u306a\u691c\u51fa\u3068\u4f75\u5408 + +SearchReplace.name=\u691c\u7d22/\u7f6e\u63db +SearchReplace.window.close=\u9589\u3058\u308b +ImportCSV.name=\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u306e\u30a4\u30f3\u30dd\u30fc\u30c8 +ExportTable.name=\u30c6\u30fc\u30d6\u30eb\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 + +# ManageColumnEstimators.name=Manage dynamic column estimators +# ManageColumnEstimators.description=Configure estimators of dynamic columns (TimestampMap or IntervalMap types) diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_nl.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_nl.properties new file mode 100644 index 0000000000..cad80ff864 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_nl.properties @@ -0,0 +1,14 @@ +AddNodeToGraph.name=Knoop toevoegen +AddNodeToGraph.dialog.text=Label: +AddEdgeToGraph.name=Add edge +ClearGraph.name=Graaf wissen +ClearGraph.dialog.text=Confirm to clear the graph?
    All nodes and edges will be deleted.
    +ClearEdges.name=Clear edges +MergeNodeDuplicates.name=Detect and merge node duplicates +MergeNodeDuplicates.description=Automatically detects and merges node duplicates based on a column +SearchReplace.name=Search/Replace +SearchReplace.window.close=Sluiten +ImportCSV.name=Spreadsheet importeren +ExportTable.name=Tabel exporteren +ManageColumnEstimators.name=Manage dynamic column estimators +ManageColumnEstimators.description=Configure estimators of dynamic columns (TimestampMap or IntervalMap types) diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_pt_BR.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_pt_BR.properties index c48ad5685a..620accdd06 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_pt_BR.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_pt_BR.properties @@ -1,32 +1,18 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -# C\u00e9lio Faria Jr. , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-17 12\:36+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -AddNodeToGraph.name=Adicionar n\u00f3 - -AddNodeToGraph.dialog.text=R\u00f3tulo\: - -AddEdgeToGraph.name=Adicionar aresta - -ClearGraph.name=Limpar grafo - -ClearGraph.dialog.text=Deseja realmente limpar o grafo?
    Todos os n\u00f3s e arestas ser\u00e3o apagados.
    - -ClearEdges.name=Limpar arestas - -MergeNodeDuplicates.name=Detectar e mesclar n\u00f3s duplicados - -MergeNodeDuplicates.description=Detectar e mesclar n\u00f3s duplicados automaticamente com base nos dados de uma coluna - -SearchReplace.name=Procurar/Substituir - -SearchReplace.window.close=Fechar - -ImportCSV.name=Importar planilha - -ExportTable.name=Exportar tabela +AddNodeToGraph.name=Adicionar nσ +AddNodeToGraph.dialog.text=Rσtulo: +AddEdgeToGraph.name=Adicionar aresta + +ClearGraph.name=Limpar grafo +ClearGraph.dialog.text=Deseja realmente limpar o grafo?
    Todos os nσs e arestas serγo apagados.
    +ClearEdges.name=Limpar arestas + +MergeNodeDuplicates.name=Detectar e mesclar nσs duplicados +MergeNodeDuplicates.description=Detectar e mesclar nσs duplicados automaticamente com base nos dados de uma coluna + +SearchReplace.name=Procurar/Substituir +SearchReplace.window.close=Fechar +ImportCSV.name=Importar planilha +ExportTable.name=Exportar tabela + +ManageColumnEstimators.name=Gerenciar os estimadores da coluna dinβmica +ManageColumnEstimators.description=Configure estimators of dynamic columns (tipo "TimestampMap" ou "IntervalMap") diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_ro.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_ro.properties new file mode 100644 index 0000000000..1f2f5a93a2 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_ro.properties @@ -0,0 +1,16 @@ + + +AddNodeToGraph.name=Adaug\u0103 nod +AddEdgeToGraph.name=Adaug\u0103 muchie +ClearGraph.name=Cur\u0103\u021B\u0103 graf +ClearGraph.dialog.text=Confirm\u0103 cur\u0103\u021Barea grafului?
    Toate nodurile \u0219i muchiile vor fi \u0219terse.
    +ClearEdges.name=Cur\u0103\u021B\u0103 muchiile +MergeNodeDuplicates.description=Detecteaz\u0103 automat nodurile duplicate \u0219i le \u00EEmbin\u0103 pe baza unei coloane +SearchReplace.name=C\u0103utare/\u00EEnlocuire +SearchReplace.window.close=\u00CEnchide +ImportCSV.name=Import\u0103 foaie de calcul +ExportTable.name=Export\u0103 tabel +ManageColumnEstimators.name=Gestioneaz\u0103 estimatorii de coloane dinamice +ManageColumnEstimators.description=Gestioneaz\u0103 estimatorii de coloane dinamice (tipurile TimestampMap sau IntervalMap) +AddNodeToGraph.dialog.text=Etichet\u0103: +MergeNodeDuplicates.name=Detecteaz\u0103 \u0219i \u00EEmbin\u0103 nodurile duplicate diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_ru.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_ru.properties index fdcf4892bd..7a3e00a41e 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_ru.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_ru.properties @@ -1,32 +1,18 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -# FIRST AUTHOR , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-15 08\:33+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -AddNodeToGraph.name=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0443\u0437\u0435\u043b - -AddNodeToGraph.dialog.text=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0443\u0437\u043b\u0430 - -AddEdgeToGraph.name=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u0435\u0431\u0440\u043e - -ClearGraph.name=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0433\u0440\u0430\u0444 - -ClearGraph.dialog.text=\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0433\u0440\u0430\u0444?
    \u0412\u0441\u0435 \u0443\u0437\u043b\u044b \u0438 \u0440\u0451\u0431\u0440\u0430 \u0431\u0443\u0434\u0443\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u044b\!
    - -ClearEdges.name=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0440\u0435\u0431\u0440\u0430 - -MergeNodeDuplicates.name=\u041f\u043e\u0438\u0441\u043a \u0438 \u0441\u043b\u0438\u044f\u043d\u0438\u0435 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432 \u0443\u0437\u043b\u043e\u0432 - -MergeNodeDuplicates.description=\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0438 \u0441\u043a\u043b\u0435\u0438\u0432\u0430\u0435\u0442 \u0443\u0437\u043b\u044b \u0441 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 - -SearchReplace.name=\u041f\u043e\u0438\u0441\u043a/\u0417\u0430\u043c\u0435\u043d\u0430 - -SearchReplace.window.close=\u0417\u0430\u043a\u0440\u044b\u0442\u044c - -ImportCSV.name=\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437 CSV - -ExportTable.name=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 +AddNodeToGraph.name=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0443\u0437\u0435\u043b +AddNodeToGraph.dialog.text=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043d\u043e\u0432\u043e\u0433\u043e \u0443\u0437\u043b\u0430 +AddEdgeToGraph.name=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0440\u0435\u0431\u0440\u043e + +ClearGraph.name=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0433\u0440\u0430\u0444 +ClearGraph.dialog.text=\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0433\u0440\u0430\u0444?
    \u0412\u0441\u0435 \u0443\u0437\u043b\u044b \u0438 \u0440\u0451\u0431\u0440\u0430 \u0431\u0443\u0434\u0443\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u044b!
    +ClearEdges.name=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0440\u0435\u0431\u0440\u0430 + +MergeNodeDuplicates.name=\u041f\u043e\u0438\u0441\u043a \u0438 \u0441\u043b\u0438\u044f\u043d\u0438\u0435 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432 \u0443\u0437\u043b\u043e\u0432 +MergeNodeDuplicates.description=\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043d\u0430\u0445\u043e\u0434\u0438\u0442 \u0438 \u0441\u043a\u043b\u0435\u0438\u0432\u0430\u0435\u0442 \u0443\u0437\u043b\u044b \u0441 \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u044e\u0449\u0438\u043c\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 + +SearchReplace.name=\u041f\u043e\u0438\u0441\u043a/\u0417\u0430\u043c\u0435\u043d\u0430 +SearchReplace.window.close=\u0417\u0430\u043a\u0440\u044b\u0442\u044c +ImportCSV.name=\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0437 CSV +ExportTable.name=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443 + +# ManageColumnEstimators.name=Manage dynamic column estimators +# ManageColumnEstimators.description=Configure estimators of dynamic columns (TimestampMap or IntervalMap types) diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_th.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_tr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_tr.properties new file mode 100644 index 0000000000..8e62dc8f2a --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_tr.properties @@ -0,0 +1,14 @@ +AddNodeToGraph.name=Add node +AddNodeToGraph.dialog.text=Label: +AddEdgeToGraph.name=Add edge +ClearGraph.name=Clear graph +ClearGraph.dialog.text=Confirm to clear the graph?
    All nodes and edges will be deleted.
    +ClearEdges.name=Clear edges +MergeNodeDuplicates.name=Detect and merge node duplicates +MergeNodeDuplicates.description=Automatically detects and merges node duplicates based on a column +SearchReplace.name=Search/Replace +SearchReplace.window.close=Kapat +ImportCSV.name=Import Spreadsheet +ExportTable.name=Export table +ManageColumnEstimators.name=Manage dynamic column estimators +ManageColumnEstimators.description=Configure estimators of dynamic columns (TimestampMap or IntervalMap types) diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_uk.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_uk.properties new file mode 100644 index 0000000000..ff8c504278 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_uk.properties @@ -0,0 +1,14 @@ +ClearGraph.dialog.text=\u041F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0438 \u043E\u0447\u0438\u0449\u0435\u043D\u043D\u044F \u0433\u0440\u0430\u0444\u0456\u043A\u0430?
    \u0423\u0441\u0456 \u0432\u0443\u0437\u043B\u0438 \u0442\u0430 \u0440\u0435\u0431\u0440\u0430 \u0431\u0443\u0434\u0435 \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043E.
    +SearchReplace.window.close=\u0417\u0430\u043A\u0440\u0438\u0442\u0438 +AddEdgeToGraph.name=\u0414\u043E\u0434\u0430\u0439\u0442\u0435 \u043A\u0440\u0430\u0439 +ClearGraph.name=\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0433\u0440\u0430\u0444\u0456\u043A +MergeNodeDuplicates.name=\u0412\u0438\u044F\u0432\u043B\u044F\u0442\u0438 \u0442\u0430 \u043E\u0431\u2019\u0454\u0434\u043D\u0443\u0432\u0430\u0442\u0438 \u0434\u0443\u0431\u043B\u0456\u043A\u0430\u0442\u0438 \u0432\u0443\u0437\u043B\u0456\u0432 +MergeNodeDuplicates.description=\u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u043D\u043E \u0432\u0438\u044F\u0432\u043B\u044F\u0454 \u0442\u0430 \u043E\u0431\u2019\u0454\u0434\u043D\u0443\u0454 \u0434\u0443\u0431\u043B\u0456\u043A\u0430\u0442\u0438 \u0432\u0443\u0437\u043B\u0456\u0432 \u043D\u0430 \u043E\u0441\u043D\u043E\u0432\u0456 \u0441\u0442\u043E\u0432\u043F\u0446\u044F +SearchReplace.name=\u041F\u043E\u0448\u0443\u043A/\u0417\u0430\u043C\u0456\u043D\u0430 +AddNodeToGraph.name=\u0414\u043E\u0434\u0430\u0442\u0438 \u0432\u0443\u0437\u043E\u043B +AddNodeToGraph.dialog.text=\u041C\u0456\u0442\u043A\u0430: +ClearEdges.name=\u0427\u0456\u0442\u043A\u0438\u0439 \u043A\u0440\u0430\u0439 +ImportCSV.name=\u0406\u043C\u043F\u043E\u0440\u0442 \u0435\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0457 \u0442\u0430\u0431\u043B\u0438\u0446\u0456 +ExportTable.name=\u0415\u043A\u0441\u043F\u043E\u0440\u0442 \u0442\u0430\u0431\u043B\u0438\u0446\u0456 +ManageColumnEstimators.name=\u041A\u0435\u0440\u0443\u0439\u0442\u0435 \u0434\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0438\u043C\u0438 \u043E\u0446\u0456\u043D\u044E\u0432\u0430\u0447\u0430\u043C\u0438 \u0441\u0442\u043E\u0432\u043F\u0446\u0456\u0432 +ManageColumnEstimators.description=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u0442\u0438 \u043E\u0446\u0456\u043D\u044E\u0432\u0430\u0447\u0456 \u0434\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0438\u0445 \u0441\u0442\u043E\u0432\u043F\u0446\u0456\u0432 (\u0442\u0438\u043F\u0438 TimestampMap \u0430\u0431\u043E IntervalMap) diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_zh_CN.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_zh_CN.properties index cd9df74ab6..c621d8d4b4 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_zh_CN.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_zh_CN.properties @@ -1,31 +1,18 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-15 09\:22+0000\nLast-Translator\: Xi-Nian Zuo \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -AddNodeToGraph.name=\u6dfb\u52a0\u8282\u70b9 - -AddNodeToGraph.dialog.text=\u6807\u8bb0\uff1a - -AddEdgeToGraph.name=\u6dfb\u52a0\u8fb9 - -ClearGraph.name=\u5220\u9664\u56fe\u8868 - -ClearGraph.dialog.text=\u786e\u5b9a\u5220\u9664\u56fe\u8868\uff1f
    \u6240\u6709\u7684\u8282\u70b9\u548c\u8fb9\u5c06\u88ab\u5220\u9664\u3002
    - -ClearEdges.name=\u5220\u9664\u8fb9 - -MergeNodeDuplicates.name=\u68c0\u6d4b\u5e76\u5408\u5e76\u91cd\u590d\u8282\u70b9 - -MergeNodeDuplicates.description=\u81ea\u52a8\u68c0\u6d4b\u5e76\u5408\u5e76\u5217\u5185\u91cd\u590d\u8282\u70b9 - -SearchReplace.name=\u641c\u7d22/\u66ff\u6362 - -SearchReplace.window.close=\u5173\u95ed - -ImportCSV.name=\u8f93\u5165\u7535\u5b50\u8868\u683c - -ExportTable.name=\u8f93\u51fa\u8868\u683c +AddNodeToGraph.name=\u6dfb\u52a0\u8282\u70b9 +AddNodeToGraph.dialog.text=\u6807\u8bb0\uff1a +AddEdgeToGraph.name=\u6dfb\u52a0\u8fb9 + +ClearGraph.name=\u5220\u9664\u56fe\u8868 +ClearGraph.dialog.text=\u786e\u5b9a\u5220\u9664\u56fe\u8868\uff1f
    \u6240\u6709\u7684\u8282\u70b9\u548c\u8fb9\u5c06\u88ab\u5220\u9664\u3002
    +ClearEdges.name=\u5220\u9664\u8fb9 + +MergeNodeDuplicates.name=\u68c0\u6d4b\u5e76\u5408\u5e76\u91cd\u590d\u8282\u70b9 +MergeNodeDuplicates.description=\u81ea\u52a8\u68c0\u6d4b\u5e76\u5408\u5e76\u5217\u5185\u91cd\u590d\u8282\u70b9 + +SearchReplace.name=\u641c\u7d22/\u66ff\u6362 +SearchReplace.window.close=\u5173\u95ed +ImportCSV.name=\u8f93\u5165\u7535\u5b50\u8868\u683c +ExportTable.name=\u8f93\u51fa\u8868\u683c + +ManageColumnEstimators.name=\u7ba1\u7406\u52a8\u6001\u5217\u4f30\u7b97 +ManageColumnEstimators.description=\u914d\u7f6e\u52a8\u6001\u5217\u7684\u4f30\u8ba1\uff08\u65f6\u95f4\u6233\u5730\u56fe\u6216\u533a\u95f4\u6620\u5c04\u7c7b\u578b\uff09 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_zh_TW.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_zh_TW.properties new file mode 100644 index 0000000000..eaba6afebc --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/Bundle_zh_TW.properties @@ -0,0 +1,14 @@ +AddNodeToGraph.name=Add node +AddNodeToGraph.dialog.text=Label: +AddEdgeToGraph.name=Add edge +ClearGraph.name=Clear graph +ClearGraph.dialog.text=Confirm to clear the graph?
    All nodes and edges will be deleted.
    +ClearEdges.name=Clear edges +MergeNodeDuplicates.name=Detect and merge node duplicates +MergeNodeDuplicates.description=Automatically detects and merges node duplicates based on a column +SearchReplace.name=Search/Replace +SearchReplace.window.close=Close +ImportCSV.name=Import Spreadsheet +ExportTable.name=Export table +ManageColumnEstimators.name=Manage dynamic column estimators +ManageColumnEstimators.description=Configure estimators of dynamic columns (TimestampMap or IntervalMap types) diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/cs.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/cs.po deleted file mode 100644 index 00fd99d35f..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/cs.po +++ /dev/null @@ -1,55 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-27 14:22+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "AddNodeToGraph.name" -msgstr "PΕ™idat uzel" - -msgid "AddNodeToGraph.dialog.text" -msgstr "Ε tΓ­tek:" - -msgid "AddEdgeToGraph.name" -msgstr "PΕ™idat hranu" - -msgid "ClearGraph.name" -msgstr "Vyčistit graf" - -msgid "ClearGraph.dialog.text" -msgstr "Potvrdit vyčiΕ‘tΔ›nΓ­ grafu?
    VΕ‘echny uzle a hrany budou smazΓ‘ny.
    " - -msgid "ClearEdges.name" -msgstr "Vyčistit hrany" - -msgid "MergeNodeDuplicates.name" -msgstr "Zjistit a sloučit kopie uzlu" - -msgid "MergeNodeDuplicates.description" -msgstr "Automaticky zjistΓ­ a sloučí kopie uzlu na zΓ‘kladΔ› sloupce" - -msgid "SearchReplace.name" -msgstr "Hledat/Nahradit" - -msgid "SearchReplace.window.close" -msgstr "ZavΕ™Γ­t" - -msgid "ImportCSV.name" -msgstr "Importovat tabulky" - -msgid "ExportTable.name" -msgstr "Exportovat tabulky" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/es.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/es.po deleted file mode 100644 index 9a0c2796c4..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/es.po +++ /dev/null @@ -1,56 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-16 23:07+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "AddNodeToGraph.name" -msgstr "AΓ±adir nodo" - -msgid "AddNodeToGraph.dialog.text" -msgstr "Etiqueta:" - -msgid "AddEdgeToGraph.name" -msgstr "AΓ±adir arista" - -msgid "ClearGraph.name" -msgstr "Vaciar grafo" - -msgid "ClearGraph.dialog.text" -msgstr "ΒΏConfirmar vaciar el grafo?
    Todos los nodos y aristas serΓ‘n eliminados
    " - -msgid "ClearEdges.name" -msgstr "Eliminar aristas" - -msgid "MergeNodeDuplicates.name" -msgstr "Detectar y mezclar duplicados" - -msgid "MergeNodeDuplicates.description" -msgstr "AutomΓ‘ticamente detecta y mezcla nodos duplicados a partir de una columna" - -msgid "SearchReplace.name" -msgstr "Buscar/Reemplazar" - -msgid "SearchReplace.window.close" -msgstr "Cerrar" - -msgid "ImportCSV.name" -msgstr "Importar hoja de cΓ‘lculo" - -msgid "ExportTable.name" -msgstr "Exportar tabla" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/fr.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/fr.po deleted file mode 100644 index 3bd4a4901b..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/fr.po +++ /dev/null @@ -1,56 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-08 15:13+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "AddNodeToGraph.name" -msgstr "CrΓ©er un noeud" - -msgid "AddNodeToGraph.dialog.text" -msgstr "Label :" - -msgid "AddEdgeToGraph.name" -msgstr "CrΓ©er un lien" - -msgid "ClearGraph.name" -msgstr "Effacer le graphe" - -msgid "ClearGraph.dialog.text" -msgstr "Confirmer l'effacement du graphe ?
    Tous les noeuds et liens seront supprimΓ©s.
    " - -msgid "ClearEdges.name" -msgstr "Effacer les liens" - -msgid "MergeNodeDuplicates.name" -msgstr "DΓ©tecte et fusionne les noeuds en double" - -msgid "MergeNodeDuplicates.description" -msgstr "DΓ©tecte et fusionne automatiquement les noeuds en double selon une colonne." - -msgid "SearchReplace.name" -msgstr "Chercher/Remplacer" - -msgid "SearchReplace.window.close" -msgstr "Fermer" - -msgid "ImportCSV.name" -msgstr "Importer feuille de calcul" - -msgid "ExportTable.name" -msgstr "Exporter la table" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ja.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ja.po deleted file mode 100644 index 5210b21075..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ja.po +++ /dev/null @@ -1,55 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-15 08:07+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "AddNodeToGraph.name" -msgstr "γƒŽγƒΌγƒ‰γθΏ½εŠ " - -msgid "AddNodeToGraph.dialog.text" -msgstr "ラベル:" - -msgid "AddEdgeToGraph.name" -msgstr "θΎΊγθΏ½εŠ " - -msgid "ClearGraph.name" -msgstr "グラフをクγƒͺγ‚’" - -msgid "ClearGraph.dialog.text" -msgstr " ζœ¬ε½“γ«γ‚°γƒ©γƒ•γ‚’ζΆˆεŽ»γ—γΎγ™γ‹οΌŸ
    すべてγγƒŽγƒΌγƒ‰γ¨θΎΊγ―ε‰Šι™€γ•γ‚ŒγΎγ™γ€‚
    " - -msgid "ClearEdges.name" -msgstr "θΎΊγ‚’γ‚―γƒͺγ‚’" - -msgid "MergeNodeDuplicates.name" -msgstr "ι ‚η‚Ήγι‡θ€‡γ‚’ζ€œηŸ₯γ€δ½΅εˆγ™γ‚‹" - -msgid "MergeNodeDuplicates.description" -msgstr "γ‚γ‚‹θ‘Œγ«γŠγ‘γ‚‹ι ‚η‚Ήγι‡θ€‡γθ‡ͺε‹•ηš„γͺζ€œε‡Ίγ¨δ½΅εˆ" - -msgid "SearchReplace.name" -msgstr "怜紒/η½ζ›" - -msgid "SearchReplace.window.close" -msgstr "ι–‰γ˜γ‚‹" - -msgid "ImportCSV.name" -msgstr "γ‚Ήγƒ—γƒ¬γƒƒγƒ‰γ‚·γƒΌγƒˆγγ‚€γƒ³γƒγƒΌγƒˆ" - -msgid "ExportTable.name" -msgstr "テーブルγγ‚¨γ‚―γ‚ΉγƒγƒΌγƒˆ" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/org-gephi-datalab-plugin-manipulators-general.pot b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/org-gephi-datalab-plugin-manipulators-general.pot deleted file mode 100644 index 15b638b5a0..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/org-gephi-datalab-plugin-manipulators-general.pot +++ /dev/null @@ -1,54 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "AddNodeToGraph.name" -msgstr "Add node" - -msgid "AddNodeToGraph.dialog.text" -msgstr "Label:" - -msgid "AddEdgeToGraph.name" -msgstr "Add edge" - -msgid "ClearGraph.name" -msgstr "Clear graph" - -msgid "ClearGraph.dialog.text" -msgstr "" -"Confirm to clear the graph?
    All nodes and edges will be deleted." -"
    " - -msgid "ClearEdges.name" -msgstr "Clear edges" - -msgid "MergeNodeDuplicates.name" -msgstr "Detect and merge node duplicates" - -msgid "MergeNodeDuplicates.description" -msgstr "Automatically detects and merges node duplicates based on a column" - -msgid "SearchReplace.name" -msgstr "Search/Replace" - -msgid "SearchReplace.window.close" -msgstr "Close" - -msgid "ImportCSV.name" -msgstr "Import Spreadsheet" - -msgid "ExportTable.name" -msgstr "Export table" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/pt_BR.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/pt_BR.po deleted file mode 100644 index eeacb7f569..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/pt_BR.po +++ /dev/null @@ -1,56 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -# CΓ©lio Faria Jr. , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-17 12:36+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "AddNodeToGraph.name" -msgstr "Adicionar nΓ³" - -msgid "AddNodeToGraph.dialog.text" -msgstr "RΓ³tulo:" - -msgid "AddEdgeToGraph.name" -msgstr "Adicionar aresta" - -msgid "ClearGraph.name" -msgstr "Limpar grafo" - -msgid "ClearGraph.dialog.text" -msgstr "Deseja realmente limpar o grafo?
    Todos os nΓ³s e arestas serΓ£o apagados.
    " - -msgid "ClearEdges.name" -msgstr "Limpar arestas" - -msgid "MergeNodeDuplicates.name" -msgstr "Detectar e mesclar nΓ³s duplicados" - -msgid "MergeNodeDuplicates.description" -msgstr "Detectar e mesclar nΓ³s duplicados automaticamente com base nos dados de uma coluna" - -msgid "SearchReplace.name" -msgstr "Procurar/Substituir" - -msgid "SearchReplace.window.close" -msgstr "Fechar" - -msgid "ImportCSV.name" -msgstr "Importar planilha" - -msgid "ExportTable.name" -msgstr "Exportar tabela" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ru.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ru.po deleted file mode 100644 index 0864ac1ede..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ru.po +++ /dev/null @@ -1,56 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -# FIRST AUTHOR , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-15 08:33+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "AddNodeToGraph.name" -msgstr "Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡƒΠ·Π΅Π»" - -msgid "AddNodeToGraph.dialog.text" -msgstr "Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ Π½Π°Π·Π²Π°Π½ΠΈΠ΅ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°" - -msgid "AddEdgeToGraph.name" -msgstr "Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Ρ€Π΅Π±Ρ€ΠΎ" - -msgid "ClearGraph.name" -msgstr "ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Π³Ρ€Π°Ρ„" - -msgid "ClearGraph.dialog.text" -msgstr "Π’Ρ‹ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Π³Ρ€Π°Ρ„?
    ВсС ΡƒΠ·Π»Ρ‹ ΠΈ Ρ€Ρ‘Π±Ρ€Π° Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹!
    " - -msgid "ClearEdges.name" -msgstr "ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π΅Π±Ρ€Π°" - -msgid "MergeNodeDuplicates.name" -msgstr "Поиск ΠΈ слияниС Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² ΡƒΠ·Π»ΠΎΠ²" - -msgid "MergeNodeDuplicates.description" -msgstr "АвтоматичСски Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΈ склСиваСт ΡƒΠ·Π»Ρ‹ с ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‰ΠΈΠΌΠΈ значСниями Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅" - -msgid "SearchReplace.name" -msgstr "Поиск/Π—Π°ΠΌΠ΅Π½Π°" - -msgid "SearchReplace.window.close" -msgstr "Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ" - -msgid "ImportCSV.name" -msgstr "Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ· CSV" - -msgid "ExportTable.name" -msgstr "Π­ΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle.properties index dfb48260f5..7d3950a8e6 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle.properties @@ -6,6 +6,7 @@ AddEdgeToGraphUI.directedRadioButton.text=Directed AddEdgeToGraphUI.undirectedRadioButton.text=Undirected AddEdgeToGraphUI.sourceNodeLabel.text=Source node: AddEdgeToGraphUI.targetNodeLabel.text=Target node: +AddEdgeToGraphUI.edgeTypeLabel.text=Edge Kind: SearchReplaceUI.searchLabel.text=Search: SearchReplaceUI.replaceLabel.text=Replace with: SearchReplaceUI.matchWholeValueCheckBox.text=Only match whole value @@ -28,41 +29,20 @@ SearchReplaceUI.replacements.count.message={0} ocurrences were replaced SearchReplaceUI.column=Column: ''{0}'' SearchReplaceUI.allColumns=--All columns-- -ImportCSVUIWizardAction.name=Import spreadsheet -ImportCSVUIVisualPanel1.name=General options -ImportCSVUIVisualPanel1.comma=Comma -ImportCSVUIVisualPanel1.semicolon=Semicolon -ImportCSVUIVisualPanel1.space=Space -ImportCSVUIVisualPanel1.tab=Tab -ImportCSVUIVisualPanel1.nodes-table=Nodes table -ImportCSVUIVisualPanel1.edges-table=Edges table -ImportCSVUIVisualPanel1.filechooser.csvDescription=CSV -ImportCSVUIVisualPanel1.tableLabel.text=As table: -ImportCSVUIVisualPanel1.pathTextField.text= -ImportCSVUIVisualPanel1.fileButton.text=... -ImportCSVUIVisualPanel1.separatorLabel.text=Separator: -ImportCSVUIVisualPanel1.descriptionLabel.text=Choose a CSV file to import: -ImportCSVUIVisualPanel1.previewLabel.text=Preview: -ImportCSVUIVisualPanel1.charsetLabel.text=Charset: -ImportCSVUIVisualPanel1.validation.invalid-file:Invalid CSV file -ImportCSVUIVisualPanel1.validation.no-columns:The file does not have any column -ImportCSVUIVisualPanel1.validation.repeated-columns:The file can't have repeated column names -ImportCSVUIVisualPanel1.validation.error=Error -ImportCSVUIVisualPanel1.validation.file-permissions-error=An error happened when reading the file. Make sure the file is not in use and you have permissions. -ImportCSVUIVisualPanel1.validation.edges.no-source-target-columns=Edges table needs a 'Source' and 'Target' column with nodes ids. -ImportCSVUIVisualPanel2.name=Import settings -ImportCSVUIVisualPanel2.columnsLabel.text=Imported columns: -ImportCSVUIVisualPanel2.nodes.description=New columns are created with the specified type.
    A generated id is assigned if missing.
    Unless the option 'Force nodes to be created as new ones' is enabled, already existing nodes will be updated. -ImportCSVUIVisualPanel2.nodes.assign-ids-checkbox=Force nodes to be created as new ones -ImportCSVUIVisualPanel2.edges.description=New columns are created with the specified type.
    A generated id is assigned if missing or existing.
    Edges need 'Source' and 'Target' columns with the id of the source and target nodes. If any is not provided for a row, it will be ignored.
    If no 'Type' column is provided, all edges will be directed.
    If an edge already exists, attributes will be ignored, but their weights will be added (weight=1 if not specified) -ImportCSVUIVisualPanel2.edges.create-new-nodes-checkbox=Create missing nodes SearchReplaceUI.regexReplaceCheckBox.text=Regular expression replacement SearchReplaceUI.columnsToSearchLabel.text=Columns to search/replace: -MergeNodeDuplicatesUI.description=Node duplicates are automatically detected and merged based on a column.
    For each group of node duplicates, one new node with the same color, size and position of the first node in the group is created.
    Edges are assigned to the new node.
    Each column uses the given strategy to reduce the rows values to one value.
    Hierarchy is ignored. +MergeNodeDuplicatesUI.description=Node duplicates are automatically detected and merged based on a column.
    For each group of node duplicates, one new node with the same color, size and position of the first node in the group is created.
    Edges are assigned to the new node.
    Each column uses the given strategy to reduce the rows values to one value. MergeNodeDuplicatesUI.noDuplicatesText=No duplicates found! MergeNodeDuplicatesUI.duplicateGroupsNumber={0} duplicates found! MergeNodeDuplicatesUI.deleteMergedNodesText=Delete merged nodes MergeNodeDuplicatesUI.configurationText=Configure MergeNodeDuplicatesUI.caseSensitiveText=Case sensitive MergeNodeDuplicatesUI.baseColumnText=Base column to detect duplicates: + +ManageColumnEstimatorsUI.estimator.AVERAGE=Average +ManageColumnEstimatorsUI.estimator.MEDIAN=Median +ManageColumnEstimatorsUI.estimator.MIN=Min +ManageColumnEstimatorsUI.estimator.MAX=Max +ManageColumnEstimatorsUI.estimator.FIRST=First +ManageColumnEstimatorsUI.estimator.LAST=Last \ No newline at end of file diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_ar.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_ca.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_ca.properties new file mode 100644 index 0000000000..b684987a6f --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_ca.properties @@ -0,0 +1,45 @@ +ClearEdgesUI.deleteDirectedCheckbox.text=Delete directed edges +ClearEdgesUI.descriptionLabel.text=Edge types to delete: +ClearEdgesUI.deleteUndirectedChekbox.text=Delete undirected edges +AddEdgeToGraphUI.descriptionLabel.text=Select the new edge type, source and target nodes: +AddEdgeToGraphUI.directedRadioButton.text=Dirigit +AddEdgeToGraphUI.undirectedRadioButton.text=No dirigit +AddEdgeToGraphUI.sourceNodeLabel.text=Source node: +AddEdgeToGraphUI.targetNodeLabel.text=Target node: +AddEdgeToGraphUI.edgeTypeLabel.text=Edge Kind: +SearchReplaceUI.searchLabel.text=Cerca: +SearchReplaceUI.replaceLabel.text=Reemplaηa amb: +SearchReplaceUI.matchWholeValueCheckBox.text=Only match whole value +SearchReplaceUI.caseSensitiveCheckBox.text=Case sensitive +SearchReplaceUI.normalSearchModeRadioButton.text=Normal search +SearchReplaceUI.regexSearchModeRadioButton.text=Regular expression search +SearchReplaceUI.findNextButton.text=Troba el segόent +SearchReplaceUI.replaceButton.text=Reemplaηa +SearchReplaceUI.replaceAllButton.text=Reemplaηa-les totes +SearchReplaceUI.descriptionLabel.text.nodes=Cerca a la taula dels nodes +SearchReplaceUI.descriptionLabel.text.edges=Searching on edges table +SearchReplaceUI.searchText.text= +SearchReplaceUI.replaceText.text= +SearchReplaceUI.resultLabel.text=Search match result: +SearchReplaceUI.resultText.contentType=text/html +SearchReplaceUI.not.found=No s'ha pogut trobar "{0}" +SearchReplaceUI.regexReplacementError=The replacement string is not correct for the regular expression +SearchReplaceUI.dialog.title.error=Error +SearchReplaceUI.replacements.count.message=S'han reemplaηat {0} ocurrθncies +SearchReplaceUI.column=Columna: "{0}" +SearchReplaceUI.allColumns=--Totes les columnes-- +SearchReplaceUI.regexReplaceCheckBox.text=Regular expression replacement +SearchReplaceUI.columnsToSearchLabel.text=Columnes on cerca/reemplaηar +MergeNodeDuplicatesUI.description=Node duplicates are automatically detected and merged based on a column.
    For each group of node duplicates, one new node with the same color, size and position of the first node in the group is created.
    Edges are assigned to the new node.
    Each column uses the given strategy to reduce the rows values to one value. +MergeNodeDuplicatesUI.noDuplicatesText=No duplicates found! +MergeNodeDuplicatesUI.duplicateGroupsNumber={0} duplicates found! +MergeNodeDuplicatesUI.deleteMergedNodesText=Delete merged nodes +MergeNodeDuplicatesUI.configurationText=Configura +MergeNodeDuplicatesUI.caseSensitiveText=Case sensitive +MergeNodeDuplicatesUI.baseColumnText=Base column to detect duplicates: +ManageColumnEstimatorsUI.estimator.AVERAGE=Mitjana +ManageColumnEstimatorsUI.estimator.MEDIAN=Mediana +ManageColumnEstimatorsUI.estimator.MIN=Mνnim +ManageColumnEstimatorsUI.estimator.MAX=Mΰxim +ManageColumnEstimatorsUI.estimator.FIRST=Primer: +ManageColumnEstimatorsUI.estimator.LAST=Ϊltim diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_cs.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_cs.properties index f8c3979de6..d74f862442 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_cs.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_cs.properties @@ -1,133 +1,48 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-27 15\:36+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -ClearEdgesUI.deleteDirectedCheckbox.text=Smazat \u0159\u00edzen\u00e9 hrany - -ClearEdgesUI.descriptionLabel.text=Typy hran ke smaz\u00e1n\u00ed\: - -ClearEdgesUI.deleteUndirectedChekbox.text=Smazat ne\u0159\u00edzen\u00e9 hrany - -AddEdgeToGraphUI.descriptionLabel.text=Vyberte nov\u00fd typ hrany, zdrojov\u00e9 a c\u00edlov\u00e9 uzle\: - -AddEdgeToGraphUI.directedRadioButton.text=\u0158\u00edzen\u00e9 - -AddEdgeToGraphUI.undirectedRadioButton.text=Ne\u0159\u00edzen\u00e9 - -AddEdgeToGraphUI.sourceNodeLabel.text=Zdrojov\u00fd uzel\: - -AddEdgeToGraphUI.targetNodeLabel.text=C\u00edlov\u00fd uzel\: - -SearchReplaceUI.searchLabel.text=Hledat\: - -SearchReplaceUI.replaceLabel.text=Nahradit \u010d\u00edm\: - -SearchReplaceUI.matchWholeValueCheckBox.text=Pouze shodovat celou hodnotu - -SearchReplaceUI.caseSensitiveCheckBox.text=Citliv\u00e9 na velikost ps\u00edmen - -SearchReplaceUI.normalSearchModeRadioButton.text=Norm\u00e1ln\u00ed hled\u00e1n\u00ed - -SearchReplaceUI.regexSearchModeRadioButton.text=Hled\u00e1n\u00ed regul\u00e1rn\u00edm v\u00fdrazem - -SearchReplaceUI.findNextButton.text=Naj\u00edt dal\u0161\u00ed - -SearchReplaceUI.replaceButton.text=Nahradit - -SearchReplaceUI.replaceAllButton.text=Nahradit v\u0161e - -SearchReplaceUI.descriptionLabel.text.nodes=Hledat v tabulce uzl\u016f - -SearchReplaceUI.descriptionLabel.text.edges=Hledat v tabulce hran - -SearchReplaceUI.resultLabel.text=V\u00fdsledky shody hled\u00e1n\u00ed\: - -SearchReplaceUI.resultText.contentType=text/html - -SearchReplaceUI.not.found=Nelze nal\u00e9zt "{0}" - -SearchReplaceUI.regexReplacementError=\u0158et\u011bzec nahrazen\u00ed nen\u00ed pro regul\u00e1rn\u00ed v\u00fdraz spr\u00e1vn\u00fd - -SearchReplaceUI.dialog.title.error=Chyba - -SearchReplaceUI.replacements.count.message={0} v\u00fdskyt\u016f bylo nahrazeno - -SearchReplaceUI.column=Sloupec\: ''{0}'' - -SearchReplaceUI.allColumns=--V\u0161echny sloupce-- - -ImportCSVUIWizardAction.name=Importovat tabulky - -ImportCSVUIVisualPanel1.name=Obecn\u00e9 mo\u017enosti - -ImportCSVUIVisualPanel1.comma=\u010c\u00e1rka - -ImportCSVUIVisualPanel1.semicolon=St\u0159edn\u00edk - -ImportCSVUIVisualPanel1.space=Mezera - -ImportCSVUIVisualPanel1.tab=Tabul\u00e1tor - -ImportCSVUIVisualPanel1.nodes-table=Tabulka uzl\u016f - -ImportCSVUIVisualPanel1.edges-table=Tabulka hran - -ImportCSVUIVisualPanel1.filechooser.csvDescription=CSV - -ImportCSVUIVisualPanel1.tableLabel.text=Jako tabulka\: - -ImportCSVUIVisualPanel1.fileButton.text=... - -ImportCSVUIVisualPanel1.separatorLabel.text=Odd\u011blova\u010d\: - -ImportCSVUIVisualPanel1.descriptionLabel.text=Zvolte soubor CSV k importu\: - -ImportCSVUIVisualPanel1.previewLabel.text=N\u00e1hled\: - -ImportCSVUIVisualPanel1.charsetLabel.text=Znakov\u00e1 sada\: - -ImportCSVUIVisualPanel1.validation.invalid-file=Neplatn\u00fd soubor CSV - -ImportCSVUIVisualPanel1.validation.no-columns=Soubor nem\u00e1 \u017e\u00e1ndn\u00fd sloupec - -ImportCSVUIVisualPanel1.validation.repeated-columns=Soubor nem\u016f\u017ee m\u00edt opakovan\u00e9 n\u00e1zvy sloupc\u016f - -ImportCSVUIVisualPanel1.validation.error=Chyba - -ImportCSVUIVisualPanel1.validation.file-permissions-error=P\u0159i \u010dten\u00ed souboru do\u0161lo k chyb\u011b. Ujist\u011bte se, \u017ee soubor nen\u00ed pou\u017e\u00edv\u00e1n a \u017ee m\u00e1te opr\u00e1vn\u011bn\u00ed. - -ImportCSVUIVisualPanel1.validation.edges.no-source-target-columns=Tabulka hran pot\u0159ebuje sloupce 'Source' a 'Target' s id uzl\u016f. - -ImportCSVUIVisualPanel2.name=Importovat nastaven\u00ed - -ImportCSVUIVisualPanel2.columnsLabel.text=Importovan\u00e9 sloupce\: - -ImportCSVUIVisualPanel2.nodes.description=Nov\u00e9 sloupce jsou vytvo\u0159eny pomoc\u00ed ur\u010den\u00e9ho typu.
    Vytvo\u0159en\u00e9 id je p\u0159id\u011bleno, pokud chyb\u00ed.
    Pokud mo\u017enost 'Donutit uzly, aby byly vytv\u00e1\u0159eny jako nov\u00e9' nen\u00ed povolena, ji\u017e existuj\u00edc\u00ed uzle budou aktualizov\u00e1ny. - -ImportCSVUIVisualPanel2.nodes.assign-ids-checkbox=Donutit uzly, aby byly vytv\u00e1\u0159eny jako nov\u00e9 - -ImportCSVUIVisualPanel2.edges.description=Nov\u00e9 sloupce jsou vytvo\u0159eny pomoc\u00ed ur\u010den\u00e9ho typu.
    Vytvo\u0159en\u00e9 id je p\u0159id\u011bleno, pokud chyb\u00ed nebo i kdy\u017e existuje.
    Hrany pot\u0159ebuj\u00ed sloupce 'Source' a 'Target' s id zdrojov\u00e9ho a c\u00edlov\u00e9ho uzlu. Pokud kter\u00fdkoliv nen\u00ed pro \u0159\u00e1dek poskytnut, bude ignorov\u00e1n.
    Pokud nen\u00ed poskytnut \u017e\u00e1dn\u00fd sloupec 'Type', v\u0161echny hrany budou \u0159\u00edzen\u00e9.
    Pokud hrana ji\u017e existuje, budou vlastnosti ignorov\u00e1ny, ale jejich v\u00e1hy budou p\u0159id\u00e1ny (pokud nen\u00ed ur\u010deno, pak v\u00e1ha je 1) - -ImportCSVUIVisualPanel2.edges.create-new-nodes-checkbox=Vytvo\u0159it chyb\u011bj\u00edc\u00ed uzle - -SearchReplaceUI.regexReplaceCheckBox.text=Nahrazen\u00ed regul\u00e1rn\u00edm v\u00fdrazem - -SearchReplaceUI.columnsToSearchLabel.text=Sloupce k hled\u00e1n\u00ed/nahrazen\u00ed - -MergeNodeDuplicatesUI.description=Kopie uzl\u016f jsou automaticky zji\u0161t\u011bny a slou\u010deny na z\u00e1klad\u011b sloupce.
    Za ka\u017edou skupinu kopi\u00ed uzl\u016f, bude vytvo\u0159en jeden se stejnou barvou, velikost\u00ed a um\u00edst\u011bn\u00edm jako prvn\u00ed uzel ve stejn\u00e9 skupin\u011b.
    Hrany jsou p\u0159id\u011bleny k nov\u00e9mu uzlu.
    Ka\u017ed\u00fd sloupce pou\u017e\u00edv\u00e1 danou strategii ke sn\u00ed\u017een\u00ed hodnot \u0159\u00e1dk\u016f na jednu.
    Hierarchie je ignorov\u00e1na. - -MergeNodeDuplicatesUI.noDuplicatesText=\u017d\u00e1dn\u00e9 kopie nenalezeny\! - -MergeNodeDuplicatesUI.duplicateGroupsNumber=Nalezeno {0} kopi\u00ed\! - -MergeNodeDuplicatesUI.deleteMergedNodesText=Smazat slou\u010den\u00e9 uzle - -MergeNodeDuplicatesUI.configurationText=Nastavit - -MergeNodeDuplicatesUI.caseSensitiveText=Citliv\u00e9 na velikost p\u00edsmen - -MergeNodeDuplicatesUI.baseColumnText=Z\u00e1kladn\u00ed sloupec pro zji\u0161\u0165ov\u00e1n\u00ed kopi\u00ed\: +ClearEdgesUI.deleteDirectedCheckbox.text=Smazat \u0159νzenι hrany +ClearEdgesUI.descriptionLabel.text=Typy hran ke smazαnν: +ClearEdgesUI.deleteUndirectedChekbox.text=Smazat ne\u0159νzenι hrany +AddEdgeToGraphUI.descriptionLabel.text=Vyberte novύ typ hrany, zdrojovι a cνlovι uzle: +AddEdgeToGraphUI.directedRadioButton.text=\u0158νzenι +AddEdgeToGraphUI.undirectedRadioButton.text=Ne\u0159νzenι +AddEdgeToGraphUI.sourceNodeLabel.text=Zdrojovύ uzel: +AddEdgeToGraphUI.targetNodeLabel.text=Cνlovύ uzel: +AddEdgeToGraphUI.edgeTypeLabel.text=Druh hrany: +SearchReplaceUI.searchLabel.text=Hledat: +SearchReplaceUI.replaceLabel.text=Nahradit \u010dνm: +SearchReplaceUI.matchWholeValueCheckBox.text=Pouze shodovat celou hodnotu +SearchReplaceUI.caseSensitiveCheckBox.text=Citlivι na velikost psνmen +SearchReplaceUI.normalSearchModeRadioButton.text=Normαlnν hledαnν +SearchReplaceUI.regexSearchModeRadioButton.text=Hledαnν regulαrnνm vύrazem +SearchReplaceUI.findNextButton.text=Najνt dal\u0161ν +SearchReplaceUI.replaceButton.text=Nahradit +SearchReplaceUI.replaceAllButton.text=Nahradit v\u0161e +SearchReplaceUI.descriptionLabel.text.nodes=Hledat v tabulce uzl\u016f +SearchReplaceUI.descriptionLabel.text.edges=Hledat v tabulce hran +SearchReplaceUI.searchText.text= +SearchReplaceUI.replaceText.text= +SearchReplaceUI.resultLabel.text=Vύsledky shody hledαnν: +SearchReplaceUI.resultText.contentType=text/html +SearchReplaceUI.not.found=Nelze nalιzt "{0}" +SearchReplaceUI.regexReplacementError=\u0158et\u011bzec nahrazenν nenν pro regulαrnν vύraz sprαvnύ +SearchReplaceUI.dialog.title.error=Chyba +SearchReplaceUI.replacements.count.message={0} vύskyt\u016f bylo nahrazeno +SearchReplaceUI.column=Sloupec: ''{0}'' +SearchReplaceUI.allColumns=--V\u0161echny sloupce-- + +SearchReplaceUI.regexReplaceCheckBox.text=Nahrazenν regulαrnνm vύrazem +SearchReplaceUI.columnsToSearchLabel.text=Sloupce k hledαnν/nahrazenν + +MergeNodeDuplicatesUI.description=Kopie uzl\u016f jsou automaticky zji\u0161t\u011bny a slou\u010deny na zαklad\u011b sloupce.
    Za ka\u017edou skupinu kopiν uzl\u016f, bude vytvo\u0159en jeden se stejnou barvou, velikostν a umνst\u011bnνm jako prvnν uzel ve stejnι skupin\u011b.
    Hrany jsou p\u0159id\u011bleny k novιmu uzlu.
    Ka\u017edύ sloupce pou\u017eνvα danou strategii ke snν\u017eenν hodnot \u0159αdk\u016f na jednu.
    Hierarchie je ignorovαna. +MergeNodeDuplicatesUI.noDuplicatesText=\u017dαdnι kopie nenalezeny! +MergeNodeDuplicatesUI.duplicateGroupsNumber=Nalezeno {0} kopiν! +MergeNodeDuplicatesUI.deleteMergedNodesText=Smazat slou\u010denι uzle +MergeNodeDuplicatesUI.configurationText=Nastavit +MergeNodeDuplicatesUI.caseSensitiveText=Citlivι na velikost pνsmen +MergeNodeDuplicatesUI.baseColumnText=Zαkladnν sloupec pro zji\u0161\u0165ovαnν kopiν: + +ManageColumnEstimatorsUI.estimator.AVERAGE=Pr\u016fm\u011br +ManageColumnEstimatorsUI.estimator.MEDIAN=Mediαn +ManageColumnEstimatorsUI.estimator.MIN=Minimum +ManageColumnEstimatorsUI.estimator.MAX=Maximum +ManageColumnEstimatorsUI.estimator.FIRST=Prvnν +ManageColumnEstimatorsUI.estimator.LAST=Poslednν diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_de.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_de.properties new file mode 100644 index 0000000000..ea8e545944 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_de.properties @@ -0,0 +1,48 @@ +ClearEdgesUI.deleteDirectedCheckbox.text=Gerichtete Kanten lφschen +ClearEdgesUI.descriptionLabel.text=Zu lφschende Kanten-Typen: +ClearEdgesUI.deleteUndirectedChekbox.text=Ungerichtete Kanten lφschen +AddEdgeToGraphUI.descriptionLabel.text=Wδhlen Sie den neuen Kanten-Typ, sowie Quell- und Ziel-Knoten: +AddEdgeToGraphUI.directedRadioButton.text=Gerichtet +AddEdgeToGraphUI.undirectedRadioButton.text=Ungerichtet +AddEdgeToGraphUI.sourceNodeLabel.text=Startknoten: +AddEdgeToGraphUI.targetNodeLabel.text=Ziel-Knoten: +AddEdgeToGraphUI.edgeTypeLabel.text=Kanten-Art: +SearchReplaceUI.searchLabel.text=Suche: +SearchReplaceUI.replaceLabel.text=Ersetzen durch: +SearchReplaceUI.matchWholeValueCheckBox.text=Nur Wert vergleichen +SearchReplaceUI.caseSensitiveCheckBox.text=Groί- /Kleinschreibung-unterscheidend +SearchReplaceUI.normalSearchModeRadioButton.text=Einfache Suche +SearchReplaceUI.regexSearchModeRadioButton.text=Suche mit regulδren Ausdrόcken +SearchReplaceUI.findNextButton.text=Weitersuchen +SearchReplaceUI.replaceButton.text=Ersetzen +SearchReplaceUI.replaceAllButton.text=Alle ersetzen +SearchReplaceUI.descriptionLabel.text.nodes=Suche in Knoten-Tabelle +SearchReplaceUI.descriptionLabel.text.edges=Suchen in Kanten-Tabelle +SearchReplaceUI.searchText.text= +SearchReplaceUI.replaceText.text= +SearchReplaceUI.resultLabel.text=Suchergebnis +SearchReplaceUI.resultText.contentType=text/html +SearchReplaceUI.not.found="{0}" konnte nicht gefunden werden +SearchReplaceUI.regexReplacementError=Die Ersatz-Zeichenkette ist nicht korrekt fόr den regulδren Ausdruck +SearchReplaceUI.dialog.title.error=Fehler +SearchReplaceUI.replacements.count.message={0} Vorkommen wurden ersetzt +SearchReplaceUI.column=Spalte:''{0}'' +SearchReplaceUI.allColumns=--Alle Spalten-- + +SearchReplaceUI.regexReplaceCheckBox.text=Regulδre Ausdrόcke Ersetzung +SearchReplaceUI.columnsToSearchLabel.text=Zu suchende/ersetzende Spalten: + +MergeNodeDuplicatesUI.description=Knoten-Duplikate werden anhand einer Spalte automatisch erkannt und verschmolzen.
    Fόr jede Gruppe von Knoten-Duplikaten, wird ein neuer Knoten mit der selben Farbe, Grφίe und Position des ersten Knoten der Gruppe erstellt.
    Kanten werden dem neuen Knoten zugewiesen
    Jede Spalte verwendet die angegebene Vorgehensweise um die Werte der Reihen auf einen Wert zu reduzieren. +MergeNodeDuplicatesUI.noDuplicatesText=Keine Duplikate gefunden! +MergeNodeDuplicatesUI.duplicateGroupsNumber={0} Duplikate gefundenen! +MergeNodeDuplicatesUI.deleteMergedNodesText=Verschmolzene Knoten lφschen +MergeNodeDuplicatesUI.configurationText=Konfigurieren +MergeNodeDuplicatesUI.caseSensitiveText=Groί- /Kleinschreibung-unterscheidend +MergeNodeDuplicatesUI.baseColumnText=Spalte um Duplikate zu erkennen: + +ManageColumnEstimatorsUI.estimator.AVERAGE=Durchschnitt +ManageColumnEstimatorsUI.estimator.MEDIAN=Median +ManageColumnEstimatorsUI.estimator.MIN=Min +ManageColumnEstimatorsUI.estimator.MAX=Max +ManageColumnEstimatorsUI.estimator.FIRST=Erste +ManageColumnEstimatorsUI.estimator.LAST=Letzte diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_es.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_es.properties index bd50f59fa4..65b599e3b5 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_es.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_es.properties @@ -1,135 +1,45 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-31 12\:38+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - ClearEdgesUI.deleteDirectedCheckbox.text=Eliminar aristas dirigidas - -ClearEdgesUI.descriptionLabel.text=Tipos de aristas a eliminar\: - +ClearEdgesUI.descriptionLabel.text=Tipos de aristas a eliminar: ClearEdgesUI.deleteUndirectedChekbox.text=Eliminar aristas no dirigidas - -AddEdgeToGraphUI.descriptionLabel.text=Selecciona un tipo para la nueva arista y un nodo origen y destino\: - +AddEdgeToGraphUI.descriptionLabel.text=Selecciona un tipo para la nueva arista y un nodo origen y destino: AddEdgeToGraphUI.directedRadioButton.text=Dirigida - AddEdgeToGraphUI.undirectedRadioButton.text=No dirigida - -AddEdgeToGraphUI.sourceNodeLabel.text=Nodo origen\: - -AddEdgeToGraphUI.targetNodeLabel.text=Nodo destino\: - -SearchReplaceUI.searchLabel.text=B\u00fasqueda - -SearchReplaceUI.replaceLabel.text=Reemplazar con\: - -SearchReplaceUI.matchWholeValueCheckBox.text=S\u00f3lo valores completos - -SearchReplaceUI.caseSensitiveCheckBox.text=Sensible a may\u00fasculas - -SearchReplaceUI.normalSearchModeRadioButton.text=B\u00fasqueda normal - -SearchReplaceUI.regexSearchModeRadioButton.text=B\u00fasqueda con expresi\u00f3n regular - +AddEdgeToGraphUI.sourceNodeLabel.text=Nodo origen: +AddEdgeToGraphUI.targetNodeLabel.text=Nodo destino: +AddEdgeToGraphUI.edgeTypeLabel.text=Clase de arista: +SearchReplaceUI.searchLabel.text=Buscar: +SearchReplaceUI.replaceLabel.text=Reemplazar con: +SearchReplaceUI.matchWholeValueCheckBox.text=Sσlo valores completos +SearchReplaceUI.caseSensitiveCheckBox.text=Sensible a mayϊsculas +SearchReplaceUI.normalSearchModeRadioButton.text=Bϊsqueda normal +SearchReplaceUI.regexSearchModeRadioButton.text=Bϊsqueda con expresiσn regular SearchReplaceUI.findNextButton.text=Encontrar siguiente - SearchReplaceUI.replaceButton.text=Reemplazar - SearchReplaceUI.replaceAllButton.text=Reemplazar todo - SearchReplaceUI.descriptionLabel.text.nodes=Buscando en la tabla de nodos - SearchReplaceUI.descriptionLabel.text.edges=Buscando en la tabla de aristas - -SearchReplaceUI.resultLabel.text=Resultado de la b\u00fasqueda\: - +SearchReplaceUI.searchText.text= +SearchReplaceUI.replaceText.text= +SearchReplaceUI.resultLabel.text=Resultado de la bϊsqueda: SearchReplaceUI.resultText.contentType=text/html - SearchReplaceUI.not.found=No se pudo encontrar "{0}" - -SearchReplaceUI.regexReplacementError=El texto de reemplazado no es correcto para la expresi\u00f3n regular - +SearchReplaceUI.regexReplacementError=El texto de reemplazado no es correcto para la expresiσn regular SearchReplaceUI.dialog.title.error=Error - SearchReplaceUI.replacements.count.message={0} ocurrencias fueron reemplazadas - -SearchReplaceUI.column=Columna\: ''{0}'' - +SearchReplaceUI.column=Columna: ''{0}'' SearchReplaceUI.allColumns=--Todas columnas-- - -ImportCSVUIWizardAction.name=Importar hoja de c\u00e1lculo - -ImportCSVUIVisualPanel1.name=Opciones generales - -ImportCSVUIVisualPanel1.comma=Coma - -ImportCSVUIVisualPanel1.semicolon=Punto y coma - -ImportCSVUIVisualPanel1.space=Espacio - -ImportCSVUIVisualPanel1.tab=Tabulador - -ImportCSVUIVisualPanel1.nodes-table=Tabla de nodos - -ImportCSVUIVisualPanel1.edges-table=Tabla de aristas - -ImportCSVUIVisualPanel1.filechooser.csvDescription=CSV - -ImportCSVUIVisualPanel1.tableLabel.text=Tabla\: - -ImportCSVUIVisualPanel1.fileButton.text=... - -ImportCSVUIVisualPanel1.separatorLabel.text=Separador\: - -ImportCSVUIVisualPanel1.descriptionLabel.text=Escoge un archivo CSV a importar\: - -ImportCSVUIVisualPanel1.previewLabel.text=Previsualizaci\u00f3n\: - -ImportCSVUIVisualPanel1.charsetLabel.text=Conjunto de caracteres\: - -ImportCSVUIVisualPanel1.validation.invalid-file=Archivo CSV inv\u00e1lido - -ImportCSVUIVisualPanel1.validation.no-columns=El archivo no contiene ninguna columna - -ImportCSVUIVisualPanel1.validation.repeated-columns=El archivo no puede tener nombres de columnas repetidos - -ImportCSVUIVisualPanel1.validation.error=Error - -ImportCSVUIVisualPanel1.validation.file-permissions-error=Un error ocurri\u00f3 al leer el archivo. Aseg\u00farate de que el archivo no est\u00e1 en uso y tienes permisos - -ImportCSVUIVisualPanel1.validation.edges.no-source-target-columns=Importar a la tabla de aristas requiere las columnas llamadas 'Source' y 'Target' con las ids de los nodos - -ImportCSVUIVisualPanel2.name=Par\u00e1metros de importaci\u00f3n\: - -ImportCSVUIVisualPanel2.columnsLabel.text=Importar columnas\: - -ImportCSVUIVisualPanel2.nodes.description=Las columnas no existentes ser\u00e1n creadas con el tipo especificado.
    Si no se proporciona la id de un nodo, se le asignar\u00e1 una.
    A no ser que la opci\u00f3n 'Asignar un nuevo id a un nodo cuando ya existe' est\u00e9 activada, los datos de los nodos ya existentes ser\u00e1n actualizados con los datos del archivo CSV - -ImportCSVUIVisualPanel2.nodes.assign-ids-checkbox=Forzar que los nodos sean creados nuevos - -ImportCSVUIVisualPanel2.edges.description=Las columnas no existentes ser\u00e1n creadas con el tipo especificado.
    Si no se proporciona la id de una arista o una arista con esa id ya existe, se le asignar\u00e1 una.
    Las aristas necesitan las columnas llamadas 'Source' y 'Target' con las ids de los nodos origen y destino. Si alguna no es proporcionada en una fila ser\u00e1 ignorada.
    Si no se proporciona la columna 'Type', todas las aristas ser\u00e1n dirigidas.
    Si una arista ya existe, sus atributos ser\u00e1n ignorados, pero los pesos ser\u00e1n sumados (peso 1 si no se especifica) - -ImportCSVUIVisualPanel2.edges.create-new-nodes-checkbox=Crear nodos inexistentes - -SearchReplaceUI.regexReplaceCheckBox.text=Reemplazar en modo expresi\u00f3n regular - -SearchReplaceUI.columnsToSearchLabel.text=Columnas en las que buscar/reemplazar\: - -MergeNodeDuplicatesUI.description=Los nodos duplicados son detectados y mezclados autom\u00e1ticamente a partir de los valores de una columna.
    Para cada grupo de nodos duplicados, un nuevo nodo con el mismo color, tama\u00f1o y posici\u00f3n que el primer nodo del grupo es creado.
    Las aristas son asignadas al nuevo nodo.
    Cada columna utiliza la estrategia escogida para reducir los valores de las filas a un solo valor.
    La jerarqu\u00eda es ignorada. - -MergeNodeDuplicatesUI.noDuplicatesText=\u00a1No se encontraron duplicados\! - -MergeNodeDuplicatesUI.duplicateGroupsNumber=\u00a1{0} duplicados encontrados\! - -MergeNodeDuplicatesUI.deleteMergedNodesText=Borrar nodos mezclados - +SearchReplaceUI.regexReplaceCheckBox.text=Reemplazar en modo expresiσn regular +SearchReplaceUI.columnsToSearchLabel.text=Columnas en las que buscar/reemplazar: +MergeNodeDuplicatesUI.description=Los nodos duplicados se detectan y fusionan autom\u00E1ticamente en funci\u00F3n de una columna.
    Para cada grupo de nodos duplicados, se crea un nuevo nodo con el mismo color, tama\u00F1o y posici\u00F3n que el primer nodo del grupo.
    Los bordes se asignan al nuevo nodo.
    Cada columna reduce los valores a uno usando la estrategia dada. +MergeNodeDuplicatesUI.noDuplicatesText=‘No se encontraron duplicados! +MergeNodeDuplicatesUI.duplicateGroupsNumber=‘{0} duplicados encontrados! +MergeNodeDuplicatesUI.deleteMergedNodesText=Borrar nodos fusionados MergeNodeDuplicatesUI.configurationText=Configurar - -MergeNodeDuplicatesUI.caseSensitiveText=Sensible a may\u00fasculas - -MergeNodeDuplicatesUI.baseColumnText=Columna base para detectar duplicados\: +MergeNodeDuplicatesUI.caseSensitiveText=Sensible a mayϊsculas +MergeNodeDuplicatesUI.baseColumnText=Columna base para detectar duplicados: +ManageColumnEstimatorsUI.estimator.AVERAGE=Promedio +ManageColumnEstimatorsUI.estimator.MEDIAN=Mediana +ManageColumnEstimatorsUI.estimator.MIN=Mνnimo +ManageColumnEstimatorsUI.estimator.MAX=Mαximo +ManageColumnEstimatorsUI.estimator.FIRST=Primero +ManageColumnEstimatorsUI.estimator.LAST=Ϊltimo diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_fr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_fr.properties index 216b896f85..51096de580 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_fr.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_fr.properties @@ -1,135 +1,48 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-31 12\:50+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -ClearEdgesUI.deleteDirectedCheckbox.text=Supprimer liens dirig\u00e9s - -ClearEdgesUI.descriptionLabel.text=Types de liens \u00e0 supprimer \: - -ClearEdgesUI.deleteUndirectedChekbox.text=Supprimer liens non dirig\u00e9s - -AddEdgeToGraphUI.descriptionLabel.text=S\u00e9lectionnez le type du lien cr\u00e9\u00e9, ses noeuds source et destination \: - -AddEdgeToGraphUI.directedRadioButton.text=Dirig\u00e9 - -AddEdgeToGraphUI.undirectedRadioButton.text=Non dirig\u00e9 - -AddEdgeToGraphUI.sourceNodeLabel.text=Noeud source \: - -AddEdgeToGraphUI.targetNodeLabel.text=Noeud de destination \: - -SearchReplaceUI.searchLabel.text=Rechercher \: - -SearchReplaceUI.replaceLabel.text=Remplacer par \: - -SearchReplaceUI.matchWholeValueCheckBox.text=Cha\u00eene compl\u00e8te - -SearchReplaceUI.caseSensitiveCheckBox.text=Sensible \u00e0 la casse - -SearchReplaceUI.normalSearchModeRadioButton.text=Recherche normale - -SearchReplaceUI.regexSearchModeRadioButton.text=Recherche par expression rationnelle - -SearchReplaceUI.findNextButton.text=Trouver suivant - -SearchReplaceUI.replaceButton.text=Remplacer - -SearchReplaceUI.replaceAllButton.text=Tout remplacer - -SearchReplaceUI.descriptionLabel.text.nodes=Chercher parmi les noeuds - -SearchReplaceUI.descriptionLabel.text.edges=Chercher parmi les liens - -SearchReplaceUI.resultLabel.text=R\u00e9sultat \: - -SearchReplaceUI.resultText.contentType=text/html - -SearchReplaceUI.not.found="{0}" introuvable - -SearchReplaceUI.regexReplacementError=Cha\u00efne de remplacement incorrecte pour l'expression rationnelle - -SearchReplaceUI.dialog.title.error=Erreur - -SearchReplaceUI.replacements.count.message={0} ocurrences ont \u00e9t\u00e9 remplac\u00e9es - -SearchReplaceUI.column=Colonne\: ''{0}'' - -SearchReplaceUI.allColumns=--Toutes les colonnes-- - -ImportCSVUIWizardAction.name=Importer feuille de calcul - -ImportCSVUIVisualPanel1.name=Options g\u00e9n\u00e9rales - -ImportCSVUIVisualPanel1.comma=Virgule - -ImportCSVUIVisualPanel1.semicolon=Point-virgule - -ImportCSVUIVisualPanel1.space=Espace - -ImportCSVUIVisualPanel1.tab=Tabulation - -ImportCSVUIVisualPanel1.nodes-table=Table des noeuds - -ImportCSVUIVisualPanel1.edges-table=Table des liens - -ImportCSVUIVisualPanel1.filechooser.csvDescription=CSV - -ImportCSVUIVisualPanel1.tableLabel.text=En tant que table \: - -ImportCSVUIVisualPanel1.fileButton.text=... - -ImportCSVUIVisualPanel1.separatorLabel.text=S\u00e9parateur \: - -ImportCSVUIVisualPanel1.descriptionLabel.text=Choisissez un fichier CSV \u00e0 importer \: - -ImportCSVUIVisualPanel1.previewLabel.text=Pr\u00e9visualisation \: - -ImportCSVUIVisualPanel1.charsetLabel.text=Encodage \: - -ImportCSVUIVisualPanel1.validation.invalid-file=Fichier CSV invalide - -ImportCSVUIVisualPanel1.validation.no-columns=Le fichier n'a aucune colonne. - -ImportCSVUIVisualPanel1.validation.repeated-columns=Les noms de colonne doivent \u00eatre unique dans le fichier. - -ImportCSVUIVisualPanel1.validation.error=Erreur - -ImportCSVUIVisualPanel1.validation.file-permissions-error=Erreur lors de la lecture du fichier. V\u00e9rifiez qu'il n'est pas utilis\u00e9 et que vous avez les bonnes permissions. - -ImportCSVUIVisualPanel1.validation.edges.no-source-target-columns=La tables des liens n\u00e9cessite les colonnes 'Source' et 'Target' contenant les ids des noeuds. - -ImportCSVUIVisualPanel2.name=Param\u00e8tres d'import - -ImportCSVUIVisualPanel2.columnsLabel.text=Colonnes import\u00e9es \: - -ImportCSVUIVisualPanel2.nodes.description=Les nouvelles colonnes ont le type sp\u00e9cifi\u00e9.
    Un identifiant est cr\u00e9\u00e9 s'il est manquant.
    Les noeuds existants sont mis \u00e0 jour sauf si l'option 'Forcer les noeuds import\u00e9s \u00e0 \u00eatre de nouveaux noeuds' est coch\u00e9e. - -ImportCSVUIVisualPanel2.nodes.assign-ids-checkbox=Forcer les noeuds import\u00e9s \u00e0 \u00eatre de nouveaux noeuds - -ImportCSVUIVisualPanel2.edges.description=Les nouvelles colonnes ont le type sp\u00e9cifi\u00e9.
    Un identifiant est cr\u00e9\u00e9 s'il est manquant ou d\u00e9j\u00e0 pr\u00e9sent.
    Les liens ont besoin de colonnes 'Source' et 'Target' contenant les ids des noeuds. Si une ligne n'en contient pas, elle est ignor\u00e9.
    Sans colonne 'Type', les liens sont dirig\u00e9s.
    Les attributs sont ignor\u00e9s si un lien est d\u00e9j\u00e0 pr\u00e9sent, mais leurs poids sont additionn\u00e9s (poids\=1 par d\u00e9faut) - -ImportCSVUIVisualPanel2.edges.create-new-nodes-checkbox=Cr\u00e9er les noeuds manquants - -SearchReplaceUI.regexReplaceCheckBox.text=Remplacement par expression rationnelle - -SearchReplaceUI.columnsToSearchLabel.text=Colonnes \u00e0 chercher/remplacer \: - -MergeNodeDuplicatesUI.description=Les noeuds en double sont automatiquement d\u00e9tect\u00e9s et fusionn\u00e9s selon une colonne donn\u00e9e.
    Pour chaque groupe de doublons, un nouveau noeud est cr\u00e9\u00e9 ayant m\u00eame couleur, taille et position que le premier noeud du groupe.
    Les liens sont affect\u00e9s au nouveau noeud.
    Chaque colonne utilise une strat\u00e9gie donn\u00e9e pour r\u00e9duire les diff\u00e9rentes valeurs \u00e0 une seule.
    La hi\u00e9rarchie est ignor\u00e9e. - -MergeNodeDuplicatesUI.noDuplicatesText=Aucun doublon trouv\u00e9 - -MergeNodeDuplicatesUI.duplicateGroupsNumber={0} doublons trouv\u00e9s - -MergeNodeDuplicatesUI.deleteMergedNodesText=Supprimer les noeuds fusionn\u00e9s - -MergeNodeDuplicatesUI.configurationText=Configurer - -MergeNodeDuplicatesUI.caseSensitiveText=Sensible \u00e0 la casse - -MergeNodeDuplicatesUI.baseColumnText=Colonne de base pour d\u00e9tecter les doublons \: +ClearEdgesUI.deleteDirectedCheckbox.text=Supprimer liens dirigιs +ClearEdgesUI.descriptionLabel.text=Types de liens ΰ supprimer : +ClearEdgesUI.deleteUndirectedChekbox.text=Supprimer liens non dirigιs +AddEdgeToGraphUI.descriptionLabel.text=Sιlectionnez le type du lien crιι, ses noeuds source et destination : +AddEdgeToGraphUI.directedRadioButton.text=Dirigι +AddEdgeToGraphUI.undirectedRadioButton.text=Non dirigι +AddEdgeToGraphUI.sourceNodeLabel.text=Noeud source : +AddEdgeToGraphUI.targetNodeLabel.text=Noeud de destination : +AddEdgeToGraphUI.edgeTypeLabel.text=Sorte de lien: +SearchReplaceUI.searchLabel.text=Rechercher : +SearchReplaceUI.replaceLabel.text=Remplacer par : +SearchReplaceUI.matchWholeValueCheckBox.text=Chaξne complθte +SearchReplaceUI.caseSensitiveCheckBox.text=Sensible ΰ la casse +SearchReplaceUI.normalSearchModeRadioButton.text=Recherche normale +SearchReplaceUI.regexSearchModeRadioButton.text=Recherche par expression rationnelle +SearchReplaceUI.findNextButton.text=Trouver suivant +SearchReplaceUI.replaceButton.text=Remplacer +SearchReplaceUI.replaceAllButton.text=Tout remplacer +SearchReplaceUI.descriptionLabel.text.nodes=Chercher parmi les noeuds +SearchReplaceUI.descriptionLabel.text.edges=Chercher parmi les liens +SearchReplaceUI.searchText.text= +SearchReplaceUI.replaceText.text= +SearchReplaceUI.resultLabel.text=Rιsultat : +SearchReplaceUI.resultText.contentType=text/html +SearchReplaceUI.not.found="{0}" introuvable +SearchReplaceUI.regexReplacementError=Chaοne de remplacement incorrecte pour l'expression rationnelle +SearchReplaceUI.dialog.title.error=Erreur +SearchReplaceUI.replacements.count.message={0} ocurrences ont ιtι remplacιes +SearchReplaceUI.column=Colonne: ''{0}'' +SearchReplaceUI.allColumns=--Toutes les colonnes-- + +SearchReplaceUI.regexReplaceCheckBox.text=Remplacement par expression rationnelle +SearchReplaceUI.columnsToSearchLabel.text=Colonnes ΰ chercher/remplacer : + +MergeNodeDuplicatesUI.description=Les noeuds en double sont automatiquement dιtectιs et fusionnιs selon une colonne donnιe.
    Pour chaque groupe de doublons, un nouveau noeud est crιι ayant mκme couleur, taille et position que le premier noeud du groupe.
    Les liens sont affectιs au nouveau noeud.
    Chaque colonne utilise une stratιgie donnιe pour rιduire les diffιrentes valeurs ΰ une seule.
    La hiιrarchie est ignorιe. +MergeNodeDuplicatesUI.noDuplicatesText=Aucun doublon trouvι +MergeNodeDuplicatesUI.duplicateGroupsNumber={0} doublons trouvιs +MergeNodeDuplicatesUI.deleteMergedNodesText=Supprimer les noeuds fusionnιs +MergeNodeDuplicatesUI.configurationText=Configurer +MergeNodeDuplicatesUI.caseSensitiveText=Sensible ΰ la casse +MergeNodeDuplicatesUI.baseColumnText=Colonne de base pour dιtecter les doublons : + +ManageColumnEstimatorsUI.estimator.AVERAGE=Moyenne +ManageColumnEstimatorsUI.estimator.MEDIAN=Mιdiane +ManageColumnEstimatorsUI.estimator.MIN=Minimum +ManageColumnEstimatorsUI.estimator.MAX=Maximum +ManageColumnEstimatorsUI.estimator.FIRST=Premier +ManageColumnEstimatorsUI.estimator.LAST=Dernier diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_he.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_he.properties new file mode 100644 index 0000000000..fc69652366 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_he.properties @@ -0,0 +1,45 @@ +ClearEdgesUI.deleteDirectedCheckbox.text=Delete directed edges +ClearEdgesUI.descriptionLabel.text=Edge types to delete: +ClearEdgesUI.deleteUndirectedChekbox.text=Delete undirected edges +AddEdgeToGraphUI.descriptionLabel.text=Select the new edge type, source and target nodes: +AddEdgeToGraphUI.directedRadioButton.text=Directed +AddEdgeToGraphUI.undirectedRadioButton.text=Undirected +AddEdgeToGraphUI.sourceNodeLabel.text=Source node: +AddEdgeToGraphUI.targetNodeLabel.text=Target node: +AddEdgeToGraphUI.edgeTypeLabel.text=Edge Kind: +SearchReplaceUI.searchLabel.text=Search: +SearchReplaceUI.replaceLabel.text=Replace with: +SearchReplaceUI.matchWholeValueCheckBox.text=Only match whole value +SearchReplaceUI.caseSensitiveCheckBox.text=Case sensitive +SearchReplaceUI.normalSearchModeRadioButton.text=Normal search +SearchReplaceUI.regexSearchModeRadioButton.text=Regular expression search +SearchReplaceUI.findNextButton.text=Find next +SearchReplaceUI.replaceButton.text=Replace +SearchReplaceUI.replaceAllButton.text=Replace all +SearchReplaceUI.descriptionLabel.text.nodes=Searching on nodes table +SearchReplaceUI.descriptionLabel.text.edges=Searching on edges table +SearchReplaceUI.searchText.text= +SearchReplaceUI.replaceText.text= +SearchReplaceUI.resultLabel.text=Search match result: +SearchReplaceUI.resultText.contentType=text/html +SearchReplaceUI.not.found=Could not find "{0}" +SearchReplaceUI.regexReplacementError=The replacement string is not correct for the regular expression +SearchReplaceUI.dialog.title.error=Error +SearchReplaceUI.replacements.count.message={0} ocurrences were replaced +SearchReplaceUI.column=Column: ''{0}'' +SearchReplaceUI.allColumns=--All columns-- +SearchReplaceUI.regexReplaceCheckBox.text=Regular expression replacement +SearchReplaceUI.columnsToSearchLabel.text=Columns to search/replace: +MergeNodeDuplicatesUI.description=Node duplicates are automatically detected and merged based on a column.
    For each group of node duplicates, one new node with the same color, size and position of the first node in the group is created.
    Edges are assigned to the new node.
    Each column uses the given strategy to reduce the rows values to one value. +MergeNodeDuplicatesUI.noDuplicatesText=No duplicates found! +MergeNodeDuplicatesUI.duplicateGroupsNumber={0} duplicates found! +MergeNodeDuplicatesUI.deleteMergedNodesText=Delete merged nodes +MergeNodeDuplicatesUI.configurationText=Configure +MergeNodeDuplicatesUI.caseSensitiveText=Case sensitive +MergeNodeDuplicatesUI.baseColumnText=Base column to detect duplicates: +ManageColumnEstimatorsUI.estimator.AVERAGE=Average +ManageColumnEstimatorsUI.estimator.MEDIAN=Median +ManageColumnEstimatorsUI.estimator.MIN=Min +ManageColumnEstimatorsUI.estimator.MAX=Max +ManageColumnEstimatorsUI.estimator.FIRST=First +ManageColumnEstimatorsUI.estimator.LAST=Last diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_hu.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_hu.properties new file mode 100644 index 0000000000..e99e9cf2ae --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_hu.properties @@ -0,0 +1,45 @@ + + +SearchReplaceUI.replaceAllButton.text=Cser\u00E9lje ki az \u00F6sszeset +AddEdgeToGraphUI.directedRadioButton.text=Ir\u00E1ny\u00EDtott +SearchReplaceUI.matchWholeValueCheckBox.text=Csak a teljes \u00E9rt\u00E9knek feleljen meg +SearchReplaceUI.columnsToSearchLabel.text=Keresend\u0151/cser\u00E9lhet\u0151 oszlopok: +SearchReplaceUI.replacements.count.message={0} el\u0151fordul\u00E1s lecser\u00E9lve +ManageColumnEstimatorsUI.estimator.FIRST=Els\u0151 +MergeNodeDuplicatesUI.description=A csom\u00F3pont-duplik\u00E1ci\u00F3kat a rendszer automatikusan \u00E9szleli \u00E9s egy oszlop alapj\u00E1n egyes\u00EDti.
    A csom\u00F3pont-duplik\u00E1tumok minden csoportj\u00E1hoz egy \u00FAj csom\u00F3pont j\u00F6n l\u00E9tre, amelynek sz\u00EDne, m\u00E9rete \u00E9s poz\u00EDci\u00F3ja megegyezik a csoport els\u0151 csom\u00F3pontj\u00E1val.
    Az \u00E9lek hozz\u00E1 vannak rendelve az \u00FAj csom\u00F3ponthoz.
    Minden oszlop a megadott strat\u00E9gi\u00E1t haszn\u00E1lja a sorok \u00E9rt\u00E9keinek egy \u00E9rt\u00E9kre val\u00F3 cs\u00F6kkent\u00E9s\u00E9re. +MergeNodeDuplicatesUI.caseSensitiveText=Kis-nagybet\u0171 \u00E9rz\u00E9keny +SearchReplaceUI.regexReplaceCheckBox.text=Regul\u00E1ris kifejez\u00E9s helyettes\u00EDt\u00E9se +SearchReplaceUI.not.found="{0}" nem tal\u00E1lhat\u00F3 +MergeNodeDuplicatesUI.baseColumnText=Alaposzlop az ism\u00E9tl\u0151d\u00E9sek \u00E9szlel\u00E9s\u00E9hez: +AddEdgeToGraphUI.descriptionLabel.text=V\u00E1lassza ki az \u00FAj \u00E9lt\u00EDpust, forr\u00E1s- \u00E9s c\u00E9lcsom\u00F3pontokat: +SearchReplaceUI.normalSearchModeRadioButton.text=Norm\u00E1l keres\u00E9s +MergeNodeDuplicatesUI.duplicateGroupsNumber={0} ism\u00E9tl\u0151d\u00E9s tal\u00E1lhat\u00F3! +AddEdgeToGraphUI.undirectedRadioButton.text=Ir\u00E1ny\u00EDtatlan +SearchReplaceUI.regexReplacementError=A helyettes\u00EDt\u0151 karakterl\u00E1nc nem megfelel\u0151 a regul\u00E1ris kifejez\u00E9shez +SearchReplaceUI.searchLabel.text=Keres\u00E9s: +SearchReplaceUI.resultLabel.text=Keres\u00E9s egyez\u00E9s eredm\u00E9nye: +SearchReplaceUI.resultText.contentType=sz\u00F6veg/html +SearchReplaceUI.replaceButton.text=Cser\u00E9lje ki +MergeNodeDuplicatesUI.noDuplicatesText=Nem tal\u00E1lhat\u00F3 ism\u00E9tl\u0151d\u00E9s! +MergeNodeDuplicatesUI.deleteMergedNodesText=Az egyes\u00EDtett csom\u00F3pontok t\u00F6rl\u00E9se +ClearEdgesUI.deleteDirectedCheckbox.text=Ir\u00E1ny\u00EDtott \u00E9lek t\u00F6rl\u00E9se +ManageColumnEstimatorsUI.estimator.MAX=Maximum +AddEdgeToGraphUI.sourceNodeLabel.text=Forr\u00E1s csom\u00F3pont: +SearchReplaceUI.caseSensitiveCheckBox.text=Kis-nagybet\u0171 \u00E9rz\u00E9keny +ManageColumnEstimatorsUI.estimator.LAST=Utols\u00F3 +SearchReplaceUI.replaceLabel.text=Cser\u00E9ld ki: +AddEdgeToGraphUI.targetNodeLabel.text=C\u00E9lcsom\u00F3pont: +SearchReplaceUI.descriptionLabel.text.edges=Keres\u00E9s az asztal sz\u00E9l\u00E9n +ClearEdgesUI.descriptionLabel.text=T\u00F6r\u00F6lend\u0151 \u00E9lt\u00EDpusok: +AddEdgeToGraphUI.edgeTypeLabel.text=Edge t\u00EDpus: +ClearEdgesUI.deleteUndirectedChekbox.text=Ir\u00E1ny\u00EDtatlan \u00E9lek t\u00F6rl\u00E9se +SearchReplaceUI.descriptionLabel.text.nodes=Keres\u00E9s a csom\u00F3pontok t\u00E1bl\u00E1j\u00E1n +MergeNodeDuplicatesUI.configurationText=Be\u00E1ll\u00EDt\u00E1s +SearchReplaceUI.findNextButton.text=Keresse meg a k\u00F6vetkez\u0151t +ManageColumnEstimatorsUI.estimator.MEDIAN=K\u00F6z\u00E9ps\u0151 +ManageColumnEstimatorsUI.estimator.MIN=Min +ManageColumnEstimatorsUI.estimator.AVERAGE=\u00C1tlagos +SearchReplaceUI.column=Oszlop: ''{0}'' +SearchReplaceUI.dialog.title.error=Hiba +SearchReplaceUI.allColumns=--Minden oszlop-- +SearchReplaceUI.regexSearchModeRadioButton.text=Regul\u00E1ris kifejez\u00E9s keres\u00E9se diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_it.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_it.properties new file mode 100644 index 0000000000..d75b4af0ca --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_it.properties @@ -0,0 +1,45 @@ +ClearEdgesUI.deleteDirectedCheckbox.text=Delete directed edges +ClearEdgesUI.descriptionLabel.text=Edge types to delete: +ClearEdgesUI.deleteUndirectedChekbox.text=Delete undirected edges +AddEdgeToGraphUI.descriptionLabel.text=Select the new edge type, source and target nodes: +AddEdgeToGraphUI.directedRadioButton.text=Orientato +AddEdgeToGraphUI.undirectedRadioButton.text=Non orientato +AddEdgeToGraphUI.sourceNodeLabel.text=Source node: +AddEdgeToGraphUI.targetNodeLabel.text=Target node: +AddEdgeToGraphUI.edgeTypeLabel.text=Edge Kind: +SearchReplaceUI.searchLabel.text=Search: +SearchReplaceUI.replaceLabel.text=Replace with: +SearchReplaceUI.matchWholeValueCheckBox.text=Only match whole value +SearchReplaceUI.caseSensitiveCheckBox.text=Case sensitive +SearchReplaceUI.normalSearchModeRadioButton.text=Normal search +SearchReplaceUI.regexSearchModeRadioButton.text=Regular expression search +SearchReplaceUI.findNextButton.text=Find next +SearchReplaceUI.replaceButton.text=Replace +SearchReplaceUI.replaceAllButton.text=Replace all +SearchReplaceUI.descriptionLabel.text.nodes=Searching on nodes table +SearchReplaceUI.descriptionLabel.text.edges=Searching on edges table +SearchReplaceUI.searchText.text= +SearchReplaceUI.replaceText.text= +SearchReplaceUI.resultLabel.text=Search match result: +SearchReplaceUI.resultText.contentType=text/html +SearchReplaceUI.not.found=Could not find "{0}" +SearchReplaceUI.regexReplacementError=The replacement string is not correct for the regular expression +SearchReplaceUI.dialog.title.error=Error +SearchReplaceUI.replacements.count.message={0} ocurrences were replaced +SearchReplaceUI.column=Column: ''{0}'' +SearchReplaceUI.allColumns=--All columns-- +SearchReplaceUI.regexReplaceCheckBox.text=Regular expression replacement +SearchReplaceUI.columnsToSearchLabel.text=Columns to search/replace: +MergeNodeDuplicatesUI.description=Node duplicates are automatically detected and merged based on a column.
    For each group of node duplicates, one new node with the same color, size and position of the first node in the group is created.
    Edges are assigned to the new node.
    Each column uses the given strategy to reduce the rows values to one value. +MergeNodeDuplicatesUI.noDuplicatesText=No duplicates found! +MergeNodeDuplicatesUI.duplicateGroupsNumber={0} duplicates found! +MergeNodeDuplicatesUI.deleteMergedNodesText=Delete merged nodes +MergeNodeDuplicatesUI.configurationText=Configure +MergeNodeDuplicatesUI.caseSensitiveText=Case sensitive +MergeNodeDuplicatesUI.baseColumnText=Base column to detect duplicates: +ManageColumnEstimatorsUI.estimator.AVERAGE=Average +ManageColumnEstimatorsUI.estimator.MEDIAN=Median +ManageColumnEstimatorsUI.estimator.MIN=Min +ManageColumnEstimatorsUI.estimator.MAX=Max +ManageColumnEstimatorsUI.estimator.FIRST=First +ManageColumnEstimatorsUI.estimator.LAST=Last diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_ja.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_ja.properties index e750ee47c4..c7099c5d18 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_ja.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_ja.properties @@ -1,133 +1,48 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-15 07\:52+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -ClearEdgesUI.deleteDirectedCheckbox.text=\u6709\u5411\u8fba\u3092\u524a\u9664\u3059\u308b - -ClearEdgesUI.descriptionLabel.text=\u524a\u9664\u3059\u308b\u30a8\u30c3\u30b8\u306e\u7a2e\u985e\: - -ClearEdgesUI.deleteUndirectedChekbox.text=\u7121\u5411\u30a8\u30c3\u30b8\u3092\u524a\u9664\u3059\u308b - -AddEdgeToGraphUI.descriptionLabel.text=\u65b0\u898f\u8fba\u306e\u7a2e\u985e\u3001\u30bd\u30fc\u30b9\u3001\u30bf\u30fc\u30b2\u30c3\u30c8\u3092\u9078\u629e\u3002 - -AddEdgeToGraphUI.directedRadioButton.text=\u6709\u5411 - -AddEdgeToGraphUI.undirectedRadioButton.text=\u7121\u5411 - -AddEdgeToGraphUI.sourceNodeLabel.text=\u30bd\u30fc\u30b9\u30ce\u30fc\u30c9\: - -AddEdgeToGraphUI.targetNodeLabel.text=\u30bf\u30fc\u30b2\u30c3\u30c8\u30ce\u30fc\u30c9\: - -SearchReplaceUI.searchLabel.text=\u691c\u7d22\: - -SearchReplaceUI.replaceLabel.text=\u7f6e\u63db\: - -SearchReplaceUI.matchWholeValueCheckBox.text=\u5024\u5168\u4f53\u306e\u4e00\u81f4\u306e\u307f - -SearchReplaceUI.caseSensitiveCheckBox.text=\u5927\u6587\u5b57\u3068\u5c0f\u6587\u5b57\u3092\u533a\u5225 - -SearchReplaceUI.normalSearchModeRadioButton.text=\u901a\u5e38\u691c\u7d22 - -SearchReplaceUI.regexSearchModeRadioButton.text=\u6b63\u898f\u8868\u73fe\u691c\u7d22 - -SearchReplaceUI.findNextButton.text=\u6b21\u3092\u691c\u7d22 - -SearchReplaceUI.replaceButton.text=\u7f6e\u63db - -SearchReplaceUI.replaceAllButton.text=\u3059\u3079\u3066\u3092\u7f6e\u63db - -SearchReplaceUI.descriptionLabel.text.nodes=\u30ce\u30fc\u30c9\u306e\u30c6\u30fc\u30d6\u30eb\u3092\u4f7f\u7528\u3057\u305f\u691c\u7d22 - -SearchReplaceUI.descriptionLabel.text.edges=\u8fba\u30c6\u30fc\u30d6\u30eb\u3092\u691c\u7d22 - -SearchReplaceUI.resultLabel.text=\u4e00\u81f4\u7d50\u679c\u3092\u691c\u7d22\: - -SearchReplaceUI.resultText.contentType=text/html - -SearchReplaceUI.not.found="{0}"\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f - -SearchReplaceUI.regexReplacementError=\u7f6e\u63db\u6587\u5b57\u5217\u306e\u6b63\u898f\u8868\u73fe\u304c\u4e0d\u6b63\u78ba\u3067\u3059 - -SearchReplaceUI.dialog.title.error=\u30a8\u30e9\u30fc - -SearchReplaceUI.replacements.count.message={0}\u4ef6\u3092\u7f6e\u63db - -SearchReplaceUI.column=\u5217\:'' {0} '' - -SearchReplaceUI.allColumns=--\u5168\u5217-- - -ImportCSVUIWizardAction.name=\u30b9\u30d7\u30ec\u30c3\u30c9\u30b7\u30fc\u30c8\u306e\u30a4\u30f3\u30dd\u30fc\u30c8 - -ImportCSVUIVisualPanel1.name=\u7dcf\u5408\u7684\u30aa\u30d7\u30b7\u30e7\u30f3 - -ImportCSVUIVisualPanel1.comma=\u30b3\u30f3\u30de - -ImportCSVUIVisualPanel1.semicolon=\u30bb\u30df\u30b3\u30ed\u30f3 - -ImportCSVUIVisualPanel1.space=\u30b9\u30da\u30fc\u30b9 - -ImportCSVUIVisualPanel1.tab=\u30bf\u30d6 - -ImportCSVUIVisualPanel1.nodes-table=\u30ce\u30fc\u30c9\u30c6\u30fc\u30d6\u30eb - -ImportCSVUIVisualPanel1.edges-table=\u8fba\u30c6\u30fc\u30d6\u30eb - -ImportCSVUIVisualPanel1.filechooser.csvDescription=CSV - -ImportCSVUIVisualPanel1.tableLabel.text=\u30c6\u30fc\u30d6\u30eb\u3068\u3057\u3066\: - -ImportCSVUIVisualPanel1.fileButton.text=... - -ImportCSVUIVisualPanel1.separatorLabel.text=\u30bb\u30d1\u30ec\u30fc\u30bf\: - -ImportCSVUIVisualPanel1.descriptionLabel.text=\u30a4\u30f3\u30dd\u30fc\u30c8\u3059\u308bCSV\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e\: - -ImportCSVUIVisualPanel1.previewLabel.text=\u30d7\u30ec\u30d3\u30e5\u30fc\: - -ImportCSVUIVisualPanel1.charsetLabel.text=\u6587\u5b57\u30bb\u30c3\u30c8\: - -ImportCSVUIVisualPanel1.validation.invalid-file=\u7121\u52b9\u306aCSV\u30d5\u30a1\u30a4\u30eb - -ImportCSVUIVisualPanel1.validation.no-columns=\u30d5\u30a1\u30a4\u30eb\u306b\u5217\u304c\u3042\u308a\u307e\u305b\u3093 - -ImportCSVUIVisualPanel1.validation.repeated-columns=\u30d5\u30a1\u30a4\u30eb\u306f\u7e70\u308a\u8fd4\u3057\u305f\u5217\u540d\u3092\u4ed8\u3051\u3089\u308c\u307e\u305b\u3093\u3002 - -ImportCSVUIVisualPanel1.validation.error=\u30a8\u30e9\u30fc - -ImportCSVUIVisualPanel1.validation.file-permissions-error=\u30d5\u30a1\u30a4\u30eb\u3092\u8aad\u307f\u8fbc\u3080\u3068\u304d\u306b\u30a8\u30e9\u30fc\u304c\u8d77\u3053\u3063\u305f\u3002\u30d5\u30a1\u30a4\u30eb\u304c\u4f7f\u7528\u4e2d\u3067\u306a\u3044\u304b\u30a2\u30af\u30bb\u30b9\u8a31\u53ef\u304c\u3042\u308b\u3053\u3068\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 - -ImportCSVUIVisualPanel1.validation.edges.no-source-target-columns=\u8fba\u30c6\u30fc\u30d6\u30eb\u306b\u306f\u30ce\u30fc\u30c9ID\u3092\u6301\u3064"\u30bd\u30fc\u30b9"\u3068"\u30bf\u30fc\u30b2\u30c3\u30c8"\u5217\u304c\u5fc5\u8981\u3067\u3059\u3002 - -ImportCSVUIVisualPanel2.name=\u8a2d\u5b9a\u3092\u30a4\u30f3\u30dd\u30fc\u30c8 - -ImportCSVUIVisualPanel2.columnsLabel.text=\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u305f\u5217\: - -ImportCSVUIVisualPanel2.nodes.description=\u65b0\u3057\u3044\u5217\u306f\u7279\u5b9a\u306e\u30bf\u30a4\u30d7\u3067\u751f\u6210\u3055\u308c\u307e\u3059\u3002
    \u306a\u3051\u308c\u3070\u751f\u6210\u3055\u308c\u305fid\u304c\u5272\u308a\u5f53\u3066\u3089\u308c\u307e\u3059\u3002
    '\u65b0\u3057\u3044\u30ce\u30fc\u30c9\u3068\u3057\u3066\u5f37\u5236\u7684\u306b\u4f5c\u6210'\u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u53ef\u80fd\u3067\u306a\u3051\u308c\u3070\u3001\u65e2\u5b58\u306e\u30ce\u30fc\u30c9\u304c\u66f4\u65b0\u3055\u308c\u307e\u3059\u3002 - -ImportCSVUIVisualPanel2.nodes.assign-ids-checkbox=\u5f37\u5236\u7684\u306b\u65b0\u898f\u30ce\u30fc\u30c9\u3068\u3057\u3066\u751f\u6210 - -ImportCSVUIVisualPanel2.edges.description=\u65b0\u3057\u3044\u5217\u306f\u7279\u5b9a\u306e\u30bf\u30a4\u30d7\u3067\u751f\u6210\u3055\u308c\u307e\u3059\u3002
    \u3042\u3063\u3066\u3082\u306a\u304f\u3068\u3082\u751f\u6210\u3055\u308c\u305fid\u304c\u5272\u308a\u5f53\u3066\u3089\u308c\u307e\u3059\u3002
    \u8fba\u306f\u30bd\u30fc\u30b9\u53ca\u3073\u30bf\u30fc\u30b2\u30c3\u30c8\u30ce\u30fc\u30c9\u306eid\u3092\u6301\u3063\u305f'Source'\u53ca\u3073'Target'\u5217\u3092\u5fc5\u8981\u3068\u3057\u307e\u3059\u3002\u4f55\u3082\u884c\u306b\u5145\u5f53\u3055\u308c\u306a\u3051\u308c\u3070\u7121\u8996\u3055\u308c\u307e\u3059\u3002
    'Type'\u5217\u304c\u306a\u3051\u308c\u3070\u3059\u3079\u3066\u306e\u8fba\u306f\u6709\u5411\u306b\u306a\u308a\u307e\u3059\u3002
    \u8fba\u304c\u65e2\u5b58\u306e\u5834\u5408\u3001\u5c5e\u6027\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u304c\u3001\u91cd\u307f\u306f\u8ffd\u52a0\u3055\u308c\u307e\u3059\u3002(\u6307\u5b9a\u304c\u306a\u3051\u308c\u3070\u91cd\u307f\=1) - -ImportCSVUIVisualPanel2.edges.create-new-nodes-checkbox=\u6b20\u843d\u30ce\u30fc\u30c9\u3092\u751f\u6210 - -SearchReplaceUI.regexReplaceCheckBox.text=\u6b63\u898f\u8868\u73fe\u306e\u7f6e\u63db - -SearchReplaceUI.columnsToSearchLabel.text=\u691c\u7d22/\u7f6e\u63db\u3059\u308b\u5217 - -MergeNodeDuplicatesUI.description=\u9802\u70b9\u306e\u91cd\u8907\u306f\u81ea\u52d5\u7684\u306b\u691c\u51fa\u3055\u308c\uff11\u3064\u306e\u5217\u306b\u4f75\u5408\u3055\u308c\u307e\u3059\u3002
    \u9802\u70b9\u306e\u91cd\u8907\uff11\u7d44\u306b\u3064\u304d\uff11\u3064\u65b0\u898f\u306e\u9802\u70b9\u304c\u540c\u8272\u3001\u540c\u30b5\u30a4\u30ba\u3001\u305d\u306e\u7fa4\u306e\u4e2d\u306e\u7b2c\uff11\u9802\u70b9\u306e\u4f4d\u7f6e\u306b\u751f\u6210\u3055\u308c\u307e\u3059\u3002
    \u8fba\u306f\u65b0\u305f\u306a\u9802\u70b9\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u307e\u3059\u3002
    \u5404\u5217\u306f\u884c\u306e\u5024\u3092\uff11\u3064\u306e\u5024\u306b\u6e1b\u3089\u3059\u3068\u3044\u3046\u6240\u5b9a\u306e\u6226\u7565\u3092\u7528\u3044\u307e\u3059\u3002
    \u968e\u5c64\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002 - -MergeNodeDuplicatesUI.noDuplicatesText=\u91cd\u8907\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\uff01 - -MergeNodeDuplicatesUI.duplicateGroupsNumber={0} \u500b\u306e\u91cd\u8907\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f\uff01 - -MergeNodeDuplicatesUI.deleteMergedNodesText=\u4f75\u5408\u3057\u305f\u9802\u70b9\u3092\u6d88\u53bb - -MergeNodeDuplicatesUI.configurationText=\u69cb\u6210\u3059\u308b - -MergeNodeDuplicatesUI.caseSensitiveText=\u5927\u6587\u5b57\u3068\u5c0f\u6587\u5b57\u3092\u533a\u5225\u3059\u308b - -MergeNodeDuplicatesUI.baseColumnText=\u91cd\u8907\u691c\u77e5\u306e\u57fa\u790e\u5217\: +ClearEdgesUI.deleteDirectedCheckbox.text=\u6709\u5411\u8fba\u3092\u524a\u9664\u3059\u308b +ClearEdgesUI.descriptionLabel.text=\u524a\u9664\u3059\u308b\u30a8\u30c3\u30b8\u306e\u7a2e\u985e: +ClearEdgesUI.deleteUndirectedChekbox.text=\u7121\u5411\u30a8\u30c3\u30b8\u3092\u524a\u9664\u3059\u308b +AddEdgeToGraphUI.descriptionLabel.text=\u65b0\u898f\u8fba\u306e\u7a2e\u985e\u3001\u30bd\u30fc\u30b9\u3001\u30bf\u30fc\u30b2\u30c3\u30c8\u3092\u9078\u629e\u3002 +AddEdgeToGraphUI.directedRadioButton.text=\u6709\u5411 +AddEdgeToGraphUI.undirectedRadioButton.text=\u7121\u5411 +AddEdgeToGraphUI.sourceNodeLabel.text=\u30bd\u30fc\u30b9\u30ce\u30fc\u30c9: +AddEdgeToGraphUI.targetNodeLabel.text=\u30bf\u30fc\u30b2\u30c3\u30c8\u30ce\u30fc\u30c9: +# AddEdgeToGraphUI.edgeTypeLabel.text=Edge Kind: +SearchReplaceUI.searchLabel.text=\u691c\u7d22: +SearchReplaceUI.replaceLabel.text=\u7f6e\u63db: +SearchReplaceUI.matchWholeValueCheckBox.text=\u5024\u5168\u4f53\u306e\u4e00\u81f4\u306e\u307f +SearchReplaceUI.caseSensitiveCheckBox.text=\u5927\u6587\u5b57\u3068\u5c0f\u6587\u5b57\u3092\u533a\u5225 +SearchReplaceUI.normalSearchModeRadioButton.text=\u901a\u5e38\u691c\u7d22 +SearchReplaceUI.regexSearchModeRadioButton.text=\u6b63\u898f\u8868\u73fe\u691c\u7d22 +SearchReplaceUI.findNextButton.text=\u6b21\u3092\u691c\u7d22 +SearchReplaceUI.replaceButton.text=\u7f6e\u63db +SearchReplaceUI.replaceAllButton.text=\u3059\u3079\u3066\u3092\u7f6e\u63db +SearchReplaceUI.descriptionLabel.text.nodes=\u30ce\u30fc\u30c9\u306e\u30c6\u30fc\u30d6\u30eb\u3092\u4f7f\u7528\u3057\u305f\u691c\u7d22 +SearchReplaceUI.descriptionLabel.text.edges=\u8fba\u30c6\u30fc\u30d6\u30eb\u3092\u691c\u7d22 +SearchReplaceUI.searchText.text= +SearchReplaceUI.replaceText.text= +SearchReplaceUI.resultLabel.text=\u4e00\u81f4\u7d50\u679c\u3092\u691c\u7d22: +SearchReplaceUI.resultText.contentType=text/html +SearchReplaceUI.not.found="{0}"\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f +SearchReplaceUI.regexReplacementError=\u7f6e\u63db\u6587\u5b57\u5217\u306e\u6b63\u898f\u8868\u73fe\u304c\u4e0d\u6b63\u78ba\u3067\u3059 +SearchReplaceUI.dialog.title.error=\u30a8\u30e9\u30fc +SearchReplaceUI.replacements.count.message={0}\u4ef6\u3092\u7f6e\u63db +SearchReplaceUI.column=\u5217:'' {0} '' +SearchReplaceUI.allColumns=--\u5168\u5217-- + +SearchReplaceUI.regexReplaceCheckBox.text=\u6b63\u898f\u8868\u73fe\u306e\u7f6e\u63db +SearchReplaceUI.columnsToSearchLabel.text=\u691c\u7d22/\u7f6e\u63db\u3059\u308b\u5217 + +MergeNodeDuplicatesUI.description=\u9802\u70b9\u306e\u91cd\u8907\u306f\u81ea\u52d5\u7684\u306b\u691c\u51fa\u3055\u308c\uff11\u3064\u306e\u5217\u306b\u4f75\u5408\u3055\u308c\u307e\u3059\u3002
    \u9802\u70b9\u306e\u91cd\u8907\uff11\u7d44\u306b\u3064\u304d\uff11\u3064\u65b0\u898f\u306e\u9802\u70b9\u304c\u540c\u8272\u3001\u540c\u30b5\u30a4\u30ba\u3001\u305d\u306e\u7fa4\u306e\u4e2d\u306e\u7b2c\uff11\u9802\u70b9\u306e\u4f4d\u7f6e\u306b\u751f\u6210\u3055\u308c\u307e\u3059\u3002
    \u8fba\u306f\u65b0\u305f\u306a\u9802\u70b9\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u307e\u3059\u3002
    \u5404\u5217\u306f\u884c\u306e\u5024\u3092\uff11\u3064\u306e\u5024\u306b\u6e1b\u3089\u3059\u3068\u3044\u3046\u6240\u5b9a\u306e\u6226\u7565\u3092\u7528\u3044\u307e\u3059\u3002
    \u968e\u5c64\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002 +MergeNodeDuplicatesUI.noDuplicatesText=\u91cd\u8907\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\uff01 +MergeNodeDuplicatesUI.duplicateGroupsNumber={0} \u500b\u306e\u91cd\u8907\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f\uff01 +MergeNodeDuplicatesUI.deleteMergedNodesText=\u4f75\u5408\u3057\u305f\u9802\u70b9\u3092\u6d88\u53bb +MergeNodeDuplicatesUI.configurationText=\u69cb\u6210\u3059\u308b +MergeNodeDuplicatesUI.caseSensitiveText=\u5927\u6587\u5b57\u3068\u5c0f\u6587\u5b57\u3092\u533a\u5225\u3059\u308b +MergeNodeDuplicatesUI.baseColumnText=\u91cd\u8907\u691c\u77e5\u306e\u57fa\u790e\u5217: + +# ManageColumnEstimatorsUI.estimator.AVERAGE=Average +# ManageColumnEstimatorsUI.estimator.MEDIAN=Median +# ManageColumnEstimatorsUI.estimator.MIN=Min +# ManageColumnEstimatorsUI.estimator.MAX=Max +# ManageColumnEstimatorsUI.estimator.FIRST=First +# ManageColumnEstimatorsUI.estimator.LAST=Last diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_ko.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_ko.properties new file mode 100644 index 0000000000..aed4a738b9 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_ko.properties @@ -0,0 +1,45 @@ + + +SearchReplaceUI.replaceAllButton.text=\uBAA8\uB450 \uB300\uCCB4 +AddEdgeToGraphUI.directedRadioButton.text=\uBC29\uD5A5\uC131 +SearchReplaceUI.matchWholeValueCheckBox.text=\uC804\uCCB4 \uAC12\uC774 \uC77C\uCE58\uD558\uB294 \uACBD\uC6B0\uB9CC +SearchReplaceUI.columnsToSearchLabel.text=\uAC80\uC0C9/\uB300\uCCB4\uD560 \uC5F4: +SearchReplaceUI.replacements.count.message={0}\uAC1C\uAC00 \uB300\uCCB4\uB410\uC2B5\uB2C8\uB2E4 +ManageColumnEstimatorsUI.estimator.FIRST=\uCC98\uC74C +MergeNodeDuplicatesUI.description=\uB178\uB4DC \uC911\uBCF5\uC740 \uC5F4\uC744 \uAE30\uC900\uC73C\uB85C \uD558\uC5EC \uC790\uB3D9\uC73C\uB85C \uD0D0\uC9C0 \uBC0F \uBCD1\uD569\uB429\uB2C8\uB2E4.
    \uAC01 \uB178\uB4DC \uC911\uBCF5 \uADF8\uB8F9\uC5D0 \uB300\uD574, \uADF8\uB8F9\uC758 \uCCAB \uBC88\uC9F8 \uB178\uB4DC\uC640 \uAC19\uC740 \uC0C9\uC0C1, \uD06C\uAE30 \uBC0F \uC704\uCE58\uB97C \uAC16\uB294 \uD558\uB098\uC758 \uC0C8 \uB178\uB4DC\uAC00 \uC0DD\uC131\uB429\uB2C8\uB2E4.
    \uC0C8 \uB178\uB4DC\uC5D0 \uC5E3\uC9C0\uAC00 \uBC30\uC815\uB429\uB2C8\uB2E4.
    \uAC01 \uC5F4\uC740 \uC5EC\uB7EC \uD589 \uAC12\uB4E4\uC744 \uD558\uB098\uB85C \uC904\uC774\uAE30 \uC704\uD574 \uC8FC\uC5B4\uC9C4 \uBC29\uBC95\uC744 \uC0AC\uC6A9\uD569\uB2C8\uB2E4. +MergeNodeDuplicatesUI.caseSensitiveText=\uB300\uC18C\uBB38\uC790 \uAD6C\uBD84 +SearchReplaceUI.regexReplaceCheckBox.text=\uC815\uADDC\uC2DD \uB300\uCCB4 +SearchReplaceUI.not.found="{0}"\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 +MergeNodeDuplicatesUI.baseColumnText=\uC911\uBCF5\uC744 \uD0D0\uC9C0\uD560 \uAE30\uC900 \uC5F4: +AddEdgeToGraphUI.descriptionLabel.text=\uC0C8\uB85C\uC6B4 \uC5E3\uC9C0 \uD0C0\uC785\uACFC \uC18C\uC2A4 \uBC0F \uD0C0\uAC9F \uB178\uB4DC \uC120\uD0DD: +SearchReplaceUI.normalSearchModeRadioButton.text=\uC77C\uBC18 \uAC80\uC0C9 +MergeNodeDuplicatesUI.duplicateGroupsNumber={0} \uAC1C\uC758 \uC911\uBCF5\uC774 \uC788\uC2B5\uB2C8\uB2E4! +AddEdgeToGraphUI.undirectedRadioButton.text=\uBE44\uBC29\uD5A5\uC131 +SearchReplaceUI.regexReplacementError=\uB300\uCCB4 \uBB38\uC790\uC5F4\uC774 \uC815\uADDC\uC2DD\uC5D0 \uB9DE\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 +SearchReplaceUI.searchLabel.text=\uD0D0\uC0C9: +SearchReplaceUI.resultLabel.text=\uC77C\uCE58 \uACB0\uACFC \uCC3E\uAE30: +SearchReplaceUI.resultText.contentType=text/html +SearchReplaceUI.replaceButton.text=\uB300\uCCB4\uD558\uAE30 +MergeNodeDuplicatesUI.noDuplicatesText=\uC911\uBCF5\uC774 \uC5C6\uC2B5\uB2C8\uB2E4! +MergeNodeDuplicatesUI.deleteMergedNodesText=\uBCD1\uD569\uB41C \uB178\uB4DC \uC0AD\uC81C +ClearEdgesUI.deleteDirectedCheckbox.text=\uBC29\uD5A5\uC131 \uC5E3\uC9C0 \uC0AD\uC81C +ManageColumnEstimatorsUI.estimator.MAX=\uCD5C\uB313\uAC12 +AddEdgeToGraphUI.sourceNodeLabel.text=\uC18C\uC2A4 \uB178\uB4DC: +SearchReplaceUI.caseSensitiveCheckBox.text=\uB300\uC18C\uBB38\uC790 \uAD6C\uBD84 +ManageColumnEstimatorsUI.estimator.LAST=\uB9C8\uC9C0\uB9C9 +SearchReplaceUI.replaceLabel.text=\uBC14\uAFB8\uAE30 \uC18C\uC2A4: +AddEdgeToGraphUI.targetNodeLabel.text=\uD0C0\uAC9F \uB178\uB4DC: +SearchReplaceUI.descriptionLabel.text.edges=\uC5E3\uC9C0 \uD14C\uC774\uBE14\uC5D0\uC11C \uCC3E\uAE30 +ClearEdgesUI.descriptionLabel.text=\uC0AD\uC81C\uD560 \uC5E3\uC9C0 \uC720\uD615: +AddEdgeToGraphUI.edgeTypeLabel.text=\uC5E3\uC9C0 \uC885\uB958: +ClearEdgesUI.deleteUndirectedChekbox.text=\uBE44\uBC29\uD5A5\uC131 \uC5E3\uC9C0 \uC0AD\uC81C +SearchReplaceUI.descriptionLabel.text.nodes=\uB178\uB4DC \uD14C\uC774\uBE14\uC5D0\uC11C \uCC3E\uAE30 +MergeNodeDuplicatesUI.configurationText=\uAD6C\uC131\uD558\uAE30 +SearchReplaceUI.findNextButton.text=\uB2E4\uC74C \uCC3E\uAE30 +ManageColumnEstimatorsUI.estimator.MEDIAN=\uC911\uAC04\uAC12 +ManageColumnEstimatorsUI.estimator.MIN=\uCD5C\uC19F\uAC12 +ManageColumnEstimatorsUI.estimator.AVERAGE=\uD3C9\uADE0 +SearchReplaceUI.column=\uC5F4: ''{0}'' +SearchReplaceUI.dialog.title.error=\uC624\uB958 +SearchReplaceUI.allColumns=--\uBAA8\uB4E0 \uC5F4-- +SearchReplaceUI.regexSearchModeRadioButton.text=\uC815\uADDC\uC2DD \uAC80\uC0C9 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_nl.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_nl.properties new file mode 100644 index 0000000000..2e7f8781d1 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_nl.properties @@ -0,0 +1,45 @@ +ClearEdgesUI.deleteDirectedCheckbox.text=Delete directed edges +ClearEdgesUI.descriptionLabel.text=Edge types to delete: +ClearEdgesUI.deleteUndirectedChekbox.text=Delete undirected edges +AddEdgeToGraphUI.descriptionLabel.text=Select the new edge type, source and target nodes: +AddEdgeToGraphUI.directedRadioButton.text=Gericht +AddEdgeToGraphUI.undirectedRadioButton.text=Ongericht +AddEdgeToGraphUI.sourceNodeLabel.text=Bronknoop: +AddEdgeToGraphUI.targetNodeLabel.text=Doelknoop: +AddEdgeToGraphUI.edgeTypeLabel.text=Edge Kind: +SearchReplaceUI.searchLabel.text=Zoeken: +SearchReplaceUI.replaceLabel.text=Vervangen door: +SearchReplaceUI.matchWholeValueCheckBox.text=Only match whole value +SearchReplaceUI.caseSensitiveCheckBox.text=Hoofdlettergevoelig +SearchReplaceUI.normalSearchModeRadioButton.text=Normaal zoeken +SearchReplaceUI.regexSearchModeRadioButton.text=Regular expression search +SearchReplaceUI.findNextButton.text=Volgende zoeken +SearchReplaceUI.replaceButton.text=Vervangen +SearchReplaceUI.replaceAllButton.text=Alles vervangen +SearchReplaceUI.descriptionLabel.text.nodes=Zoeken in knooptabel +SearchReplaceUI.descriptionLabel.text.edges=Searching on edges table +SearchReplaceUI.searchText.text= +SearchReplaceUI.replaceText.text= +SearchReplaceUI.resultLabel.text=Search match result: +SearchReplaceUI.resultText.contentType=tekst/html +SearchReplaceUI.not.found=Kan "{0}" niet vinden +SearchReplaceUI.regexReplacementError=The replacement string is not correct for the regular expression +SearchReplaceUI.dialog.title.error=Fout +SearchReplaceUI.replacements.count.message={0} ocurrences were replaced +SearchReplaceUI.column=Kolom: "{0}" +SearchReplaceUI.allColumns=--Alle kolommen-- +SearchReplaceUI.regexReplaceCheckBox.text=Regular expression replacement +SearchReplaceUI.columnsToSearchLabel.text=Columns to search/replace: +MergeNodeDuplicatesUI.description=Node duplicates are automatically detected and merged based on a column.
    For each group of node duplicates, one new node with the same color, size and position of the first node in the group is created.
    Edges are assigned to the new node.
    Each column uses the given strategy to reduce the rows values to one value. +MergeNodeDuplicatesUI.noDuplicatesText=No duplicates found! +MergeNodeDuplicatesUI.duplicateGroupsNumber={0} duplicates found! +MergeNodeDuplicatesUI.deleteMergedNodesText=Samengevoegde knopen verwijderen +MergeNodeDuplicatesUI.configurationText=Configureren +MergeNodeDuplicatesUI.caseSensitiveText=Hoofdlettergevoelig +MergeNodeDuplicatesUI.baseColumnText=Base column to detect duplicates: +ManageColumnEstimatorsUI.estimator.AVERAGE=Gemiddelde +ManageColumnEstimatorsUI.estimator.MEDIAN=Mediaan +ManageColumnEstimatorsUI.estimator.MIN=Minimum +ManageColumnEstimatorsUI.estimator.MAX=Maximum +ManageColumnEstimatorsUI.estimator.FIRST=Eerste +ManageColumnEstimatorsUI.estimator.LAST=Laatste diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_pt.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_pt.properties new file mode 100644 index 0000000000..6b7d4d4db6 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_pt.properties @@ -0,0 +1,43 @@ +ClearEdgesUI.deleteDirectedCheckbox.text=Apagar arestas dirigidas +ClearEdgesUI.descriptionLabel.text=Tipos de arestas a apagar: +ClearEdgesUI.deleteUndirectedChekbox.text=Apagar arestas n\u00E3o dirigidas +AddEdgeToGraphUI.descriptionLabel.text=Selecione um tipo para a nova aresta e os n\u00F3s origem e destino: +AddEdgeToGraphUI.directedRadioButton.text=Dirigida +AddEdgeToGraphUI.undirectedRadioButton.text=N\u00E3o dirigida +AddEdgeToGraphUI.sourceNodeLabel.text=N\u00F3 origem: +AddEdgeToGraphUI.targetNodeLabel.text=N\u00F3 destino: +AddEdgeToGraphUI.edgeTypeLabel.text=Tipo da aresta: +SearchReplaceUI.searchLabel.text=Busca: +SearchReplaceUI.replaceLabel.text=Substituir por: +SearchReplaceUI.matchWholeValueCheckBox.text=Somente valores completos +SearchReplaceUI.caseSensitiveCheckBox.text=Mai\u00FAsculas e min\u00FAsculas +SearchReplaceUI.normalSearchModeRadioButton.text=Busca normal +SearchReplaceUI.regexSearchModeRadioButton.text=Busca com express\u00E3o regular +SearchReplaceUI.findNextButton.text=Localizar pr\u00F3xima +SearchReplaceUI.replaceButton.text=Substituir +SearchReplaceUI.replaceAllButton.text=Substituir todos +SearchReplaceUI.descriptionLabel.text.nodes=A procurar na tabela de n\u00F3s +SearchReplaceUI.descriptionLabel.text.edges=A procurar na tabela de arestas +SearchReplaceUI.resultLabel.text=Resultado da busca: +SearchReplaceUI.resultText.contentType=text/html +SearchReplaceUI.not.found=N\u00E3o foi poss\u00EDvel encontrar "{0}" +SearchReplaceUI.regexReplacementError=A cadeia de substitui\u00E7\u00E3o n\u00E3o \u00E9 correta para a express\u00E3o regular +SearchReplaceUI.dialog.title.error=Erro +SearchReplaceUI.replacements.count.message={0} ocorr\u00EAncias foram substitu\u00EDdas +SearchReplaceUI.column=Coluna: ''{0}'' +SearchReplaceUI.allColumns=--Todas as colunas-- +SearchReplaceUI.regexReplaceCheckBox.text=Substituir usando express\u00E3o regular +SearchReplaceUI.columnsToSearchLabel.text=Colunas para buscar/substituir: +MergeNodeDuplicatesUI.noDuplicatesText=Nenhuma duplica\u00E7\u00E3o encontrada! +MergeNodeDuplicatesUI.duplicateGroupsNumber={0} duplica\u00E7\u00F5es encontradas! +MergeNodeDuplicatesUI.deleteMergedNodesText=Remover n\u00F3s duplicados +MergeNodeDuplicatesUI.configurationText=Configurar +MergeNodeDuplicatesUI.caseSensitiveText=Diferenciar mai\u00FAsculas e min\u00FAsculas +ManageColumnEstimatorsUI.estimator.AVERAGE=M\u00E9dia +ManageColumnEstimatorsUI.estimator.MEDIAN=Mediana +ManageColumnEstimatorsUI.estimator.MIN=M\u00EDnimo +ManageColumnEstimatorsUI.estimator.MAX=M\u00E1ximo +MergeNodeDuplicatesUI.description=N\u00F3s duplicados s\u00E3o automaticamente detetados e mesclados \u00E0 base do valor de uma coluna.
    Para cada grupo de n\u00F3s duplicados, ser\u00E1 criado um n\u00F3 com a mesma cor, tamanho e posi\u00E7\u00E3o do primeiro n\u00F3 do grupo.
    As arestas ser\u00E3o atribu\u00EDdas ao novo n\u00F3.
    Cada coluna usar\u00E1 a estrat\u00E9gia escolhida para reduzir os valores das linhas apenas a um valor. +MergeNodeDuplicatesUI.baseColumnText=Coluna base para a dete\u00E7\u00E3o de duplicatas: +ManageColumnEstimatorsUI.estimator.FIRST=Primeiro +ManageColumnEstimatorsUI.estimator.LAST=\u00DAltimo diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_pt_BR.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_pt_BR.properties index d3770b1223..261f9b11a6 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_pt_BR.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_pt_BR.properties @@ -1,134 +1,48 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -# C\u00e9lio Faria Jr. , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-17 13\:07+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -ClearEdgesUI.deleteDirectedCheckbox.text=Excluir arestas dirigidas - -ClearEdgesUI.descriptionLabel.text=Tipos de arestas a excluir\: - -ClearEdgesUI.deleteUndirectedChekbox.text=Excluir arestas n\u00e3o dirigidas - -AddEdgeToGraphUI.descriptionLabel.text=Selecione um tipo para a nova aresta e os n\u00f3s origem e destino\: - -AddEdgeToGraphUI.directedRadioButton.text=Dirigida - -AddEdgeToGraphUI.undirectedRadioButton.text=N\u00e3o dirigida - -AddEdgeToGraphUI.sourceNodeLabel.text=N\u00f3 origem\: - -AddEdgeToGraphUI.targetNodeLabel.text=N\u00f3 destino\: - -SearchReplaceUI.searchLabel.text=Busca\: - -SearchReplaceUI.replaceLabel.text=Substituir por\: - -SearchReplaceUI.matchWholeValueCheckBox.text=Somente valores completos - -SearchReplaceUI.caseSensitiveCheckBox.text=Mai\u00fasculas e min\u00fasculas - -SearchReplaceUI.normalSearchModeRadioButton.text=Busca normal - -SearchReplaceUI.regexSearchModeRadioButton.text=Busca com express\u00e3o regular - -SearchReplaceUI.findNextButton.text=Localizar pr\u00f3xima - -SearchReplaceUI.replaceButton.text=Substituir - -SearchReplaceUI.replaceAllButton.text=Substituir todos - -SearchReplaceUI.descriptionLabel.text.nodes=Buscando na tabela de n\u00f3s - -SearchReplaceUI.descriptionLabel.text.edges=Buscando na tabela de arestas - -SearchReplaceUI.resultLabel.text=Resultado da busca\: - -SearchReplaceUI.resultText.contentType=text/html - -SearchReplaceUI.not.found=N\u00e3o foi poss\u00edvel encontrar "{0}" - -SearchReplaceUI.regexReplacementError=O texto de substitui\u00e7\u00e3o n\u00e3o \u00e9 correto para a express\u00e3o regular - -SearchReplaceUI.dialog.title.error=Erro - -SearchReplaceUI.replacements.count.message={0} ocorr\u00eancias foram substitu\u00eddas - -SearchReplaceUI.column=Coluna\: ''{0}'' - -SearchReplaceUI.allColumns=--Todas as colunas-- - -ImportCSVUIWizardAction.name=Importar planilha - -ImportCSVUIVisualPanel1.name=Op\u00e7\u00f5es gerais - -ImportCSVUIVisualPanel1.comma=V\u00edrgula - -ImportCSVUIVisualPanel1.semicolon=Ponto e v\u00edrgula - -ImportCSVUIVisualPanel1.space=Espa\u00e7o - -ImportCSVUIVisualPanel1.tab=Tabula\u00e7\u00e3o - -ImportCSVUIVisualPanel1.nodes-table=Tabela de n\u00f3s - -ImportCSVUIVisualPanel1.edges-table=Tabela de arestas - -ImportCSVUIVisualPanel1.filechooser.csvDescription=CSV - -ImportCSVUIVisualPanel1.tableLabel.text=Tabela\: - -ImportCSVUIVisualPanel1.fileButton.text=... - -ImportCSVUIVisualPanel1.separatorLabel.text=Separador\: - -ImportCSVUIVisualPanel1.descriptionLabel.text=Escolha um arquivo CSV para importar\: - -ImportCSVUIVisualPanel1.previewLabel.text=Visualiza\u00e7\u00e3o\: - -ImportCSVUIVisualPanel1.charsetLabel.text=Codifica\u00e7\u00e3o de caracteres\: - -ImportCSVUIVisualPanel1.validation.invalid-file=Arquivo CSV inv\u00e1lido - -ImportCSVUIVisualPanel1.validation.no-columns=O arquivo n\u00e3o cont\u00e9m nenhuma coluna - -ImportCSVUIVisualPanel1.validation.repeated-columns=O arquivo n\u00e3o pode conter colunas com nomes repetidos - -ImportCSVUIVisualPanel1.validation.error=Erro - -ImportCSVUIVisualPanel1.validation.file-permissions-error=Um erro ocorreu ao ler o arquivo. Verifique se o arquivo n\u00e3o est\u00e1 em uso e voc\u00ea tem permiss\u00f5es. - -ImportCSVUIVisualPanel1.validation.edges.no-source-target-columns=A tabela de arestas precisa conter colunas chamadas 'Source' e 'Target' (contendo os ids dos n\u00f3s origem e destino). - -ImportCSVUIVisualPanel2.name=Configura\u00e7\u00f5es de importa\u00e7\u00e3o - -ImportCSVUIVisualPanel2.columnsLabel.text=Colunas importadas\: - -ImportCSVUIVisualPanel2.nodes.description=Novas colunas ser\u00e3o criadas com o tipo especificado.
    Se o id de um n\u00f3 n\u00e3o for especificado, um id gerado ser\u00e1 atribu\u00eddo a ele.
    A menos que a op\u00e7\u00e3o 'For\u00e7ar n\u00f3s a serem criados como novos' esteja habilitada, os dados dos n\u00f3s j\u00e1 existentes ser\u00e3o atualizados com os dados do arquivo CSV. - -ImportCSVUIVisualPanel2.nodes.assign-ids-checkbox=For\u00e7ar n\u00f3s a serem criados como novos - -ImportCSVUIVisualPanel2.edges.description=Novas colunas ser\u00e3o criadas com o tipo especificado.
    Se o id de uma aresta n\u00e3o for especificado, um id gerado ser\u00e1 atribu\u00eddo a ela.
    A tabela de arestas precisa conter colunas chamadas 'Source' e 'Target' com os ids dos n\u00f3s origem e destino. Se qualquer dos id n\u00e3o forem fornecidos em uma determinada linha, ela ser\u00e1 ignorada.
    Se n\u00e3o existir uma coluna 'Type' no arquivo, todas as arestas ser\u00e3o dirigidas.
    Se uma aresta j\u00e1 existir, seus atributos ser\u00e3o ignorados, mas seu peso ser\u00e1 alterado (caso o peso n\u00e3o seja especificado, ser\u00e1 utilizado peso\=1) - -ImportCSVUIVisualPanel2.edges.create-new-nodes-checkbox=Criar n\u00f3s inexistentes - -SearchReplaceUI.regexReplaceCheckBox.text=Substituir usando express\u00e3o regular - -SearchReplaceUI.columnsToSearchLabel.text=Colunas para buscar/substituir\: - -MergeNodeDuplicatesUI.description=N\u00f3s duplicados s\u00e3o automaticamente detectados e mesclados baseados no valor de uma coluna.
    Para cada grupos de n\u00f3s duplicados, ser\u00e1 criado um novo n\u00f3 com a mesma cor, tamanho e posi\u00e7\u00e3o do primeiro n\u00f3 do grupo.
    As arestas ser\u00e3o atribu\u00eddas ao novo n\u00f3.
    Cada coluna usar\u00e1 a estrat\u00e9gia escolhida para reduzir os valores das linhas a um valor apenas.
    A hierarquia ser\u00e1 ignorada. - -MergeNodeDuplicatesUI.noDuplicatesText=Nenhuma duplica\u00e7\u00e3o encontrada\! - -MergeNodeDuplicatesUI.duplicateGroupsNumber={0} duplica\u00e7\u00f5es encontradas\! - -MergeNodeDuplicatesUI.deleteMergedNodesText=Remover n\u00f3s duplicados - -MergeNodeDuplicatesUI.configurationText=Configurar - -MergeNodeDuplicatesUI.caseSensitiveText=Diferenciar mai\u00fasculas e min\u00fasculas - -MergeNodeDuplicatesUI.baseColumnText=Coluna-base para a detec\u00e7\u00e3o de duplicatas +ClearEdgesUI.deleteDirectedCheckbox.text=Excluir arestas dirigidas +ClearEdgesUI.descriptionLabel.text=Tipos de arestas a excluir: +ClearEdgesUI.deleteUndirectedChekbox.text=Excluir arestas nγo dirigidas +AddEdgeToGraphUI.descriptionLabel.text=Selecione um tipo para a nova aresta e os nσs origem e destino: +AddEdgeToGraphUI.directedRadioButton.text=Dirigida +AddEdgeToGraphUI.undirectedRadioButton.text=Nγo dirigida +AddEdgeToGraphUI.sourceNodeLabel.text=Nσ origem: +AddEdgeToGraphUI.targetNodeLabel.text=Nσ destino: +AddEdgeToGraphUI.edgeTypeLabel.text=Tipo da aresta: +SearchReplaceUI.searchLabel.text=Busca: +SearchReplaceUI.replaceLabel.text=Substituir por: +SearchReplaceUI.matchWholeValueCheckBox.text=Somente valores completos +SearchReplaceUI.caseSensitiveCheckBox.text=Maiϊsculas e minϊsculas +SearchReplaceUI.normalSearchModeRadioButton.text=Busca normal +SearchReplaceUI.regexSearchModeRadioButton.text=Busca com expressγo regular +SearchReplaceUI.findNextButton.text=Localizar prσxima +SearchReplaceUI.replaceButton.text=Substituir +SearchReplaceUI.replaceAllButton.text=Substituir todos +SearchReplaceUI.descriptionLabel.text.nodes=Buscando na tabela de nσs +SearchReplaceUI.descriptionLabel.text.edges=Buscando na tabela de arestas +SearchReplaceUI.searchText.text= +SearchReplaceUI.replaceText.text= +SearchReplaceUI.resultLabel.text=Resultado da busca: +SearchReplaceUI.resultText.contentType=text/html +SearchReplaceUI.not.found=Nγo foi possνvel encontrar "{0}" +SearchReplaceUI.regexReplacementError=O texto de substituiηγo nγo ι correto para a expressγo regular +SearchReplaceUI.dialog.title.error=Erro +SearchReplaceUI.replacements.count.message={0} ocorrκncias foram substituνdas +SearchReplaceUI.column=Coluna: ''{0}'' +SearchReplaceUI.allColumns=--Todas as colunas-- + +SearchReplaceUI.regexReplaceCheckBox.text=Substituir usando expressγo regular +SearchReplaceUI.columnsToSearchLabel.text=Colunas para buscar/substituir: + +MergeNodeDuplicatesUI.description=Nσs duplicados sγo automaticamente detectados e mesclados baseados no valor de uma coluna.
    Para cada grupos de nσs duplicados, serα criado um novo nσ com a mesma cor, tamanho e posiηγo do primeiro nσ do grupo.
    As arestas serγo atribuνdas ao novo nσ.
    Cada coluna usarα a estratιgia escolhida para reduzir os valores das linhas a um valor apenas.
    A hierarquia serα ignorada. +MergeNodeDuplicatesUI.noDuplicatesText=Nenhuma duplicaηγo encontrada! +MergeNodeDuplicatesUI.duplicateGroupsNumber={0} duplicaηυes encontradas! +MergeNodeDuplicatesUI.deleteMergedNodesText=Remover nσs duplicados +MergeNodeDuplicatesUI.configurationText=Configurar +MergeNodeDuplicatesUI.caseSensitiveText=Diferenciar maiϊsculas e minϊsculas +MergeNodeDuplicatesUI.baseColumnText=Coluna-base para a detecηγo de duplicatas + +ManageColumnEstimatorsUI.estimator.AVERAGE=Mιdia +ManageColumnEstimatorsUI.estimator.MEDIAN=Mediana +ManageColumnEstimatorsUI.estimator.MIN=Mνnimo +ManageColumnEstimatorsUI.estimator.MAX=Mαximo +ManageColumnEstimatorsUI.estimator.FIRST=Primeiro +ManageColumnEstimatorsUI.estimator.LAST=Ϊltimo diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_ro.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_ro.properties new file mode 100644 index 0000000000..cb1c7aed7a --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_ro.properties @@ -0,0 +1,45 @@ + + +SearchReplaceUI.matchWholeValueCheckBox.text=Potrive\u0219te doar valoarea complet\u0103 +SearchReplaceUI.replaceLabel.text=\u00CEnlocuie\u0219te cu: +SearchReplaceUI.searchLabel.text=C\u0103utare: +SearchReplaceUI.normalSearchModeRadioButton.text=C\u0103utare normal\u0103 +SearchReplaceUI.regexSearchModeRadioButton.text=C\u0103utare prin expresii regulate +ClearEdgesUI.descriptionLabel.text=Tipuri de muchii de \u0219ters: +ClearEdgesUI.deleteUndirectedChekbox.text=\u0218terge muchiile neorientate +AddEdgeToGraphUI.targetNodeLabel.text=Nod \u021Bint\u0103: +AddEdgeToGraphUI.edgeTypeLabel.text=Fel de muchie: +SearchReplaceUI.caseSensitiveCheckBox.text=Sensibil la majuscule +SearchReplaceUI.findNextButton.text=G\u0103se\u0219te urm\u0103torul +SearchReplaceUI.replaceButton.text=\u00CEnlocuie\u0219te +SearchReplaceUI.replaceAllButton.text=\u00CEnlocuie\u0219te tot +SearchReplaceUI.descriptionLabel.text.nodes=C\u0103utare \u00EEn tabelul de noduri +SearchReplaceUI.resultLabel.text=Rezultatul c\u0103ut\u0103rii: +SearchReplaceUI.not.found=Nu s-a putut g\u0103si "{0}" +SearchReplaceUI.regexReplacementError=\u0218irul de \u00EEnlocuire nu este corect pentru expresia regulat\u0103 +SearchReplaceUI.replacements.count.message={0} apari\u021Bii au fost \u00EEnlocuite +SearchReplaceUI.column=Coloana: ''{0}'' +SearchReplaceUI.regexReplaceCheckBox.text=\u00CEnlocuire prin expresie regulat\u0103 +SearchReplaceUI.columnsToSearchLabel.text=Coloane de c\u0103utat/\u00EEnlocuit: +MergeNodeDuplicatesUI.deleteMergedNodesText=\u0218terge nodurile \u00EEmbinate +MergeNodeDuplicatesUI.configurationText=Configureaz\u0103 +MergeNodeDuplicatesUI.caseSensitiveText=Sensibil la majuscule +ManageColumnEstimatorsUI.estimator.AVERAGE=Media +ManageColumnEstimatorsUI.estimator.MEDIAN=Mediana +ManageColumnEstimatorsUI.estimator.MIN=Min +ManageColumnEstimatorsUI.estimator.MAX=Max +ManageColumnEstimatorsUI.estimator.FIRST=Prima +ManageColumnEstimatorsUI.estimator.LAST=Ultima +AddEdgeToGraphUI.descriptionLabel.text=Selecteaz\u0103 noul tip de muchie \u0219i nodurile surs\u0103 \u0219i \u021Bint\u0103: +AddEdgeToGraphUI.directedRadioButton.text=Orientat +AddEdgeToGraphUI.undirectedRadioButton.text=Neorientat +ClearEdgesUI.deleteDirectedCheckbox.text=\u0218terge muchiile orientate +AddEdgeToGraphUI.sourceNodeLabel.text=Nod surs\u0103: +SearchReplaceUI.resultText.contentType=text/html +SearchReplaceUI.allColumns=--Toate coloanele-- +SearchReplaceUI.descriptionLabel.text.edges=C\u0103utare \u00EEn tabelul de muchii +MergeNodeDuplicatesUI.noDuplicatesText=Niciun duplicat g\u0103sit! +SearchReplaceUI.dialog.title.error=Eroare +MergeNodeDuplicatesUI.description=Nodurile duplicate sunt detectate automat \u0219i \u00EEmbinate pe baza unei coloane.
    Pentru fiecare grup de noduri duplicate este creat un nou nod de aceea\u0219i culoare, dimensiune \u0219i pozi\u021Bie ca primul nod din grup.
    Muchiile sunt atribuite nodului nou.
    Fiecare coloan\u0103 reduce valorile la una singur\u0103 folosind strategia dat\u0103. +MergeNodeDuplicatesUI.duplicateGroupsNumber={0} duplicate g\u0103site! +MergeNodeDuplicatesUI.baseColumnText=Coloana de baz\u0103 pentru detectarea duplicatelor: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_ru.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_ru.properties index 5d83311276..ad020637ec 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_ru.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_ru.properties @@ -1,135 +1,48 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -# FIRST AUTHOR , 2011. -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-31 12\:51+0000\nLast-Translator\: gephi \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -ClearEdgesUI.deleteDirectedCheckbox.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0440\u0451\u0431\u0440\u0430 - -ClearEdgesUI.descriptionLabel.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0442\u0438\u043f\u044b \u0440\u0451\u0431\u0435\u0440\: - -ClearEdgesUI.deleteUndirectedChekbox.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0440\u0451\u0431\u0440\u0430 - -AddEdgeToGraphUI.descriptionLabel.text=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0438\u043f \u043d\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0431\u0440\u0430, \u0435\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0443\u0437\u043b\u044b\: - -AddEdgeToGraphUI.directedRadioButton.text=\u041e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 - -AddEdgeToGraphUI.undirectedRadioButton.text=\u041d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 - -AddEdgeToGraphUI.sourceNodeLabel.text=\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0443\u0437\u0435\u043b\: - -AddEdgeToGraphUI.targetNodeLabel.text=\u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0443\u0437\u0435\u043b\: - -SearchReplaceUI.searchLabel.text=\u041f\u043e\u0438\u0441\u043a\: - -SearchReplaceUI.replaceLabel.text=\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430\: - -SearchReplaceUI.matchWholeValueCheckBox.text=\u0418\u0441\u043a\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f - -SearchReplaceUI.caseSensitiveCheckBox.text=\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 - -SearchReplaceUI.normalSearchModeRadioButton.text=\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a - -SearchReplaceUI.regexSearchModeRadioButton.text=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f - -SearchReplaceUI.findNextButton.text=\u041d\u0430\u0439\u0442\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 - -SearchReplaceUI.replaceButton.text=\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c - -SearchReplaceUI.replaceAllButton.text=\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435 - -SearchReplaceUI.descriptionLabel.text.nodes=\u0418\u0441\u043a\u0430\u0442\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0443\u0437\u043b\u043e\u0432 - -SearchReplaceUI.descriptionLabel.text.edges=\u0418\u0441\u043a\u0430\u0442\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0440\u0451\u0431\u0435\u0440 - -SearchReplaceUI.resultLabel.text=\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0438\u0441\u043a\u0430\: - -SearchReplaceUI.resultText.contentType=text/html - -SearchReplaceUI.not.found=\u041d\u0435 \u043c\u043e\u0433\u0443 \u043d\u0430\u0439\u0442\u0438 "{0}" - -SearchReplaceUI.regexReplacementError=\u0421\u0442\u0440\u043e\u043a\u0430 \u0437\u0430\u043c\u0435\u043d\u044b \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 - -SearchReplaceUI.dialog.title.error=\u041e\u0448\u0438\u0431\u043a\u0430 - -SearchReplaceUI.replacements.count.message={0} \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0439 \u0431\u044b\u043b\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043e - -SearchReplaceUI.column=\u0421\u0442\u043e\u043b\u0431\u0435\u0446\: ''{0}'' - -SearchReplaceUI.allColumns=-- \u0412\u0441\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b-- - -ImportCSVUIWizardAction.name=\u0418\u043c\u043f\u043e\u0440\u0442 CSV \u0444\u0430\u0439\u043b\u0430 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 - -ImportCSVUIVisualPanel1.name=\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043e\u043f\u0446\u0438\u0438 - -ImportCSVUIVisualPanel1.comma=\u0437\u0430\u043f\u044f\u0442\u0430\u044f - -ImportCSVUIVisualPanel1.semicolon=\u0442\u043e\u0447\u043a\u0430 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 - -ImportCSVUIVisualPanel1.space=\u041f\u0440\u043e\u0431\u0435\u043b - -ImportCSVUIVisualPanel1.tab=\u0422\u0430\u0431\u0443\u043b\u044f\u0446\u0438\u044f - -ImportCSVUIVisualPanel1.nodes-table=\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0443\u0437\u043b\u043e\u0432 - -ImportCSVUIVisualPanel1.edges-table=\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0440\u0451\u0431\u0435\u0440 - -ImportCSVUIVisualPanel1.filechooser.csvDescription=ImportCSVUIVisualPanel1.filechooser.csvDescription - -ImportCSVUIVisualPanel1.tableLabel.text=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0430\u043b\u0438\u0446\u0443\: - -ImportCSVUIVisualPanel1.fileButton.text=ImportCSVUIVisualPanel1.fileButton.text - -ImportCSVUIVisualPanel1.separatorLabel.text=\u0420\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c\: - -ImportCSVUIVisualPanel1.descriptionLabel.text=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 CSV \u0444\u0430\u0439\u043b \u0434\u043b\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0430 - -ImportCSVUIVisualPanel1.previewLabel.text=\u041f\u0440\u0435\u0432\u044c\u044e\: - -ImportCSVUIVisualPanel1.charsetLabel.text=\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430\: - -ImportCSVUIVisualPanel1.validation.invalid-file=\u041e\u0448\u0438\u0431\u043a\u0430 \u0432 CSV \u0444\u0430\u0439\u043b\u0435 - -ImportCSVUIVisualPanel1.validation.no-columns=\u0412 \u0444\u0430\u0439\u043b\u0435 \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442\u0441\u044f \u043d\u0438 \u043e\u0434\u043d\u043e\u0433\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u0430 - -ImportCSVUIVisualPanel1.validation.repeated-columns=\u0412 \u0444\u0430\u0439\u043b\u0435 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0441 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u043c\u0438 \u0438\u043c\u0435\u043d\u0430\u043c\u0438 - -ImportCSVUIVisualPanel1.validation.error=\u041e\u0448\u0438\u0431\u043a\u0430 - -ImportCSVUIVisualPanel1.validation.file-permissions-error=\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0447\u0442\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b\u0430 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430. \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0444\u0430\u0439\u043b \r\n\u043d\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u0440\u0443\u0433\u0438\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u0438 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0430 \u043d\u0435\u0433\u043e \u043f\u0440\u0430\u0432\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 - -ImportCSVUIVisualPanel1.validation.edges.no-source-target-columns=\u0412 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0441 \u0440\u0451\u0431\u0440\u0430\u043c\u0438 \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u043a\u043e\u043b\u043e\u043d\u043a\u0438 'Source' \u0438 'Target', \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 id \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0443\u0437\u043b\u043e\u0432 - -ImportCSVUIVisualPanel2.name=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 - -ImportCSVUIVisualPanel2.columnsLabel.text=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0434\u043b\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0430\: - -ImportCSVUIVisualPanel2.nodes.description=\u0412\u0441\u0435 \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0438 \u0431\u0443\u0434\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u0442\u0438\u043f.
    \u0415\u0441\u043b\u0438 \u0434\u043b\u044f \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u043d\u0435 \u0437\u0430\u0434\u0430\u043d id, \u0442\u043e \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438
    \u0415\u0441\u043b\u0438 \u043d\u0435 \u0441\u0442\u043e\u0438\u0442 \u0433\u0430\u043b\u043e\u0447\u043a\u0438 \u043d\u0430\u043f\u0440\u043e\u0442\u0438\u0432 '\u041f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u043d\u043e\u0432\u043e\u0451 id \u0432\u0435\u0440\u0448\u0438\u043d\u0435, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435', \u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u043d\u043e\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0430\u044f \u0432\u0435\u0440\u0448\u0438\u043d\u0430." - -ImportCSVUIVisualPanel2.nodes.assign-ids-checkbox=\u041f\u0440\u0438\u0441\u0432\u043e\u0438\u0442\u044c \u043d\u043e\u0432\u043e\u0435 id \u0432\u0435\u0440\u0448\u0438\u043d\u0435, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 - -ImportCSVUIVisualPanel2.edges.description=\u0412\u0441\u0435 \u043d\u0435\u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u0438 \u0438\u043c\u0435\u0442\u044c \u0437\u0430\u0434\u0430\u043d\u043d\u044b\u0439 \u0442\u0438\u043f.
    \r\n\u0415\u0441\u043b\u0438 \u0443 \u0440\u0435\u0431\u0440\u0430 \u043d\u0435 \u0437\u0430\u0434\u0430\u043d id, \u0442\u043e \u043e\u043d \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438.
    \r\n\u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0435\u0431\u0440\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b \u0441\u0442\u043e\u043b\u0431\u0446\u044b 'Source' \u0438 'Target', \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 id \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0432\u0435\u0440\u0448\u0438\u043d. \u0415\u0441\u043b\u0438 \u0434\u043b\u044f \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u0438\u0437 \u0440\u0451\u0431\u0435\u0440 \u043d\u0435 \u0443\u043a\u0430\u0437\u0430\u043d\u044b \u044d\u0442\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0442\u043e \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u043e.
    \r\n\u0415\u0441\u043b\u0438 \u043d\u0435\u0442 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 'Type', \u0442\u043e \u0432\u0441\u0435 \u0440\u0451\u0431\u0440\u0430 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u044b \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c\u0438.
    \r\n\u0415\u0441\u043b\u0438 \u043a\u0430\u043a\u043e\u0435-\u0442\u043e \u0438\u0437 \u0440\u0451\u0431\u0435\u0440 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u043b\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043e, \u0442\u043e \u043e\u043d\u043e \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e, \u043d\u043e\u0432\u044b\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043d\u0435 \u0431\u0443\u0434\u0443\u0442 \u0437\u0430\u043f\u0438\u0441\u0430\u043d\u044b. - -ImportCSVUIVisualPanel2.edges.create-new-nodes-checkbox=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u0443\u044e \u0432\u0435\u0440\u0448\u0438\u043d\u0443, \u0435\u0441\u043b\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0439 \u0438\u043b\u0438 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0448\u0438\u043d\u044b \u0433\u0440\u0430\u0444\u0430 \u043d\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 - -SearchReplaceUI.regexReplaceCheckBox.text=\u0417\u0430\u043c\u0435\u043d\u0430 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c - -SearchReplaceUI.columnsToSearchLabel.text=\u0421\u0442\u043e\u043b\u0431\u0446\u044b \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430/\u0437\u0430\u043c\u0435\u043d\u044b - -MergeNodeDuplicatesUI.description=\u0414\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u044b \u0443\u0437\u043b\u043e\u0432 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 \u0438 \u0441\u043a\u043b\u0435\u0438\u0432\u0430\u044e\u0442\u0441\u044f.
    \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u0443\u0437\u0435\u043b \u0441 \u0446\u0432\u0435\u0442\u043e\u043c, \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439, \u0432\u0437\u044f\u0442\u044b\u043c\u0438 \u0443 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0443\u0437\u043b\u0430 \u0432 \u0433\u0440\u0443\u043f\u043f\u0435.
    \u0420\u0451\u0431\u0440\u0430 \u043f\u0435\u0440\u0435\u043d\u0430\u0437\u043d\u0430\u0447\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u0443\u0437\u0435\u043b.
    \u0418\u0435\u0440\u0430\u0440\u0445\u0438\u044f \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f. - -MergeNodeDuplicatesUI.noDuplicatesText=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u044b\! - -MergeNodeDuplicatesUI.duplicateGroupsNumber={0} \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432 \u043d\u0430\u0439\u0434\u0435\u043d\u043e\! - -MergeNodeDuplicatesUI.deleteMergedNodesText=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u043a\u043b\u0435\u0435\u043d\u044b\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b - -MergeNodeDuplicatesUI.configurationText=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c - -MergeNodeDuplicatesUI.caseSensitiveText=\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 - -MergeNodeDuplicatesUI.baseColumnText=\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043a\u043e\u043b\u043e\u043d\u043a\u0430 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432\: +ClearEdgesUI.deleteDirectedCheckbox.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0440\u0451\u0431\u0440\u0430 +ClearEdgesUI.descriptionLabel.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0442\u0438\u043f\u044b \u0440\u0451\u0431\u0435\u0440: +ClearEdgesUI.deleteUndirectedChekbox.text=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u043d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u0440\u0451\u0431\u0440\u0430 +AddEdgeToGraphUI.descriptionLabel.text=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0438\u043f \u043d\u043e\u0432\u043e\u0433\u043e \u0440\u0435\u0431\u0440\u0430, \u0435\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0443\u0437\u043b\u044b: +AddEdgeToGraphUI.directedRadioButton.text=\u041e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 +AddEdgeToGraphUI.undirectedRadioButton.text=\u041d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 +AddEdgeToGraphUI.sourceNodeLabel.text=\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0443\u0437\u0435\u043b: +AddEdgeToGraphUI.targetNodeLabel.text=\u041a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u0443\u0437\u0435\u043b: +# AddEdgeToGraphUI.edgeTypeLabel.text=Edge Kind: +SearchReplaceUI.searchLabel.text=\u041f\u043e\u0438\u0441\u043a: +SearchReplaceUI.replaceLabel.text=\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043d\u0430: +SearchReplaceUI.matchWholeValueCheckBox.text=\u0418\u0441\u043a\u0430\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0435 \u0441\u043e\u0432\u043f\u0430\u0434\u0435\u043d\u0438\u044f +SearchReplaceUI.caseSensitiveCheckBox.text=\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 +SearchReplaceUI.normalSearchModeRadioButton.text=\u041e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u043e\u0438\u0441\u043a +SearchReplaceUI.regexSearchModeRadioButton.text=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f +SearchReplaceUI.findNextButton.text=\u041d\u0430\u0439\u0442\u0438 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0435 +SearchReplaceUI.replaceButton.text=\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c +SearchReplaceUI.replaceAllButton.text=\u0417\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435 +SearchReplaceUI.descriptionLabel.text.nodes=\u0418\u0441\u043a\u0430\u0442\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0443\u0437\u043b\u043e\u0432 +SearchReplaceUI.descriptionLabel.text.edges=\u0418\u0441\u043a\u0430\u0442\u044c \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0440\u0451\u0431\u0435\u0440 +SearchReplaceUI.searchText.text= +SearchReplaceUI.replaceText.text= +SearchReplaceUI.resultLabel.text=\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u043f\u043e\u0438\u0441\u043a\u0430: +SearchReplaceUI.resultText.contentType=text/html +SearchReplaceUI.not.found=\u041d\u0435 \u043c\u043e\u0433\u0443 \u043d\u0430\u0439\u0442\u0438 "{0}" +SearchReplaceUI.regexReplacementError=\u0421\u0442\u0440\u043e\u043a\u0430 \u0437\u0430\u043c\u0435\u043d\u044b \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0439 +SearchReplaceUI.dialog.title.error=\u041e\u0448\u0438\u0431\u043a\u0430 +SearchReplaceUI.replacements.count.message={0} \u0432\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0439 \u0431\u044b\u043b\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043e +SearchReplaceUI.column=\u0421\u0442\u043e\u043b\u0431\u0435\u0446: ''{0}'' +SearchReplaceUI.allColumns=-- \u0412\u0441\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b-- + +SearchReplaceUI.regexReplaceCheckBox.text=\u0417\u0430\u043c\u0435\u043d\u0430 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c +SearchReplaceUI.columnsToSearchLabel.text=\u0421\u0442\u043e\u043b\u0431\u0446\u044b \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430/\u0437\u0430\u043c\u0435\u043d\u044b + +MergeNodeDuplicatesUI.description=\u0414\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u044b \u0443\u0437\u043b\u043e\u0432 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u044b\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 \u0438 \u0441\u043a\u043b\u0435\u0438\u0432\u0430\u044e\u0442\u0441\u044f.
    \u0414\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0433\u0440\u0443\u043f\u043f\u044b \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432 \u0441\u043e\u0437\u0434\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u0439 \u0443\u0437\u0435\u043b \u0441 \u0446\u0432\u0435\u0442\u043e\u043c, \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u0435\u0439, \u0432\u0437\u044f\u0442\u044b\u043c\u0438 \u0443 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u0443\u0437\u043b\u0430 \u0432 \u0433\u0440\u0443\u043f\u043f\u0435.
    \u0420\u0451\u0431\u0440\u0430 \u043f\u0435\u0440\u0435\u043d\u0430\u0437\u043d\u0430\u0447\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u0443\u0437\u0435\u043b.
    \u0418\u0435\u0440\u0430\u0440\u0445\u0438\u044f \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f. +MergeNodeDuplicatesUI.noDuplicatesText=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u044b! +MergeNodeDuplicatesUI.duplicateGroupsNumber={0} \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432 \u043d\u0430\u0439\u0434\u0435\u043d\u043e! +MergeNodeDuplicatesUI.deleteMergedNodesText=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u043a\u043b\u0435\u0435\u043d\u044b\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b +MergeNodeDuplicatesUI.configurationText=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c +MergeNodeDuplicatesUI.caseSensitiveText=\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0435\u0433\u0438\u0441\u0442\u0440 \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 +MergeNodeDuplicatesUI.baseColumnText=\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u043a\u043e\u043b\u043e\u043d\u043a\u0430 \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0432: + +# ManageColumnEstimatorsUI.estimator.AVERAGE=Average +# ManageColumnEstimatorsUI.estimator.MEDIAN=Median +# ManageColumnEstimatorsUI.estimator.MIN=Min +# ManageColumnEstimatorsUI.estimator.MAX=Max +# ManageColumnEstimatorsUI.estimator.FIRST=First +# ManageColumnEstimatorsUI.estimator.LAST=Last diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_th.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_tr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_tr.properties new file mode 100644 index 0000000000..a6e1146f7e --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_tr.properties @@ -0,0 +1,45 @@ +ClearEdgesUI.deleteDirectedCheckbox.text=Delete directed edges +ClearEdgesUI.descriptionLabel.text=Edge types to delete: +ClearEdgesUI.deleteUndirectedChekbox.text=Delete undirected edges +AddEdgeToGraphUI.descriptionLabel.text=Select the new edge type, source and target nodes: +AddEdgeToGraphUI.directedRadioButton.text=Yφnlό +AddEdgeToGraphUI.undirectedRadioButton.text=Yφnsόz +AddEdgeToGraphUI.sourceNodeLabel.text=Source node: +AddEdgeToGraphUI.targetNodeLabel.text=Target node: +AddEdgeToGraphUI.edgeTypeLabel.text=Edge Kind: +SearchReplaceUI.searchLabel.text=Search: +SearchReplaceUI.replaceLabel.text=Replace with: +SearchReplaceUI.matchWholeValueCheckBox.text=Only match whole value +SearchReplaceUI.caseSensitiveCheckBox.text=Case sensitive +SearchReplaceUI.normalSearchModeRadioButton.text=Normal search +SearchReplaceUI.regexSearchModeRadioButton.text=Regular expression search +SearchReplaceUI.findNextButton.text=Find next +SearchReplaceUI.replaceButton.text=Replace +SearchReplaceUI.replaceAllButton.text=Replace all +SearchReplaceUI.descriptionLabel.text.nodes=Searching on nodes table +SearchReplaceUI.descriptionLabel.text.edges=Searching on edges table +SearchReplaceUI.searchText.text= +SearchReplaceUI.replaceText.text= +SearchReplaceUI.resultLabel.text=Search match result: +SearchReplaceUI.resultText.contentType=text/html +SearchReplaceUI.not.found=Could not find "{0}" +SearchReplaceUI.regexReplacementError=The replacement string is not correct for the regular expression +SearchReplaceUI.dialog.title.error=Error +SearchReplaceUI.replacements.count.message={0} ocurrences were replaced +SearchReplaceUI.column=Column: ''{0}'' +SearchReplaceUI.allColumns=--All columns-- +SearchReplaceUI.regexReplaceCheckBox.text=Regular expression replacement +SearchReplaceUI.columnsToSearchLabel.text=Columns to search/replace: +MergeNodeDuplicatesUI.description=Node duplicates are automatically detected and merged based on a column.
    For each group of node duplicates, one new node with the same color, size and position of the first node in the group is created.
    Edges are assigned to the new node.
    Each column uses the given strategy to reduce the rows values to one value. +MergeNodeDuplicatesUI.noDuplicatesText=No duplicates found! +MergeNodeDuplicatesUI.duplicateGroupsNumber={0} duplicates found! +MergeNodeDuplicatesUI.deleteMergedNodesText=Delete merged nodes +MergeNodeDuplicatesUI.configurationText=Configure +MergeNodeDuplicatesUI.caseSensitiveText=Case sensitive +MergeNodeDuplicatesUI.baseColumnText=Base column to detect duplicates: +ManageColumnEstimatorsUI.estimator.AVERAGE=Ortalama +ManageColumnEstimatorsUI.estimator.MEDIAN=Ortanca +ManageColumnEstimatorsUI.estimator.MIN=Min +ManageColumnEstimatorsUI.estimator.MAX=Max +ManageColumnEstimatorsUI.estimator.FIRST=First +ManageColumnEstimatorsUI.estimator.LAST=Last diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_zh_CN.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_zh_CN.properties index 782f20acbc..f21e6fd36f 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_zh_CN.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_zh_CN.properties @@ -1,133 +1,45 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-15 09\:13+0000\nLast-Translator\: Xi-Nian Zuo \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - ClearEdgesUI.deleteDirectedCheckbox.text=\u5220\u9664\u6709\u5411\u8fb9 - ClearEdgesUI.descriptionLabel.text=\u8981\u5220\u9664\u7684\u8fb9\u7684\u7c7b\u578b\uff1a - ClearEdgesUI.deleteUndirectedChekbox.text=\u5220\u9664\u65e0\u5411\u8fb9 - AddEdgeToGraphUI.descriptionLabel.text=\u9009\u62e9\u65b0\u7684\u8fb9\u7684\u7c7b\u578b\uff0c\u6e90\u8282\u70b9\u548c\u76ee\u6807\u8282\u70b9\uff1a - AddEdgeToGraphUI.directedRadioButton.text=\u6709\u5411\u7684 - AddEdgeToGraphUI.undirectedRadioButton.text=\u65e0\u5411\u7684 - AddEdgeToGraphUI.sourceNodeLabel.text=\u6e90\u8282\u70b9\uff1a - AddEdgeToGraphUI.targetNodeLabel.text=\u76ee\u6807\u8282\u70b9\uff1a - +AddEdgeToGraphUI.edgeTypeLabel.text=\u8FB9\u79CD\u7C7B\uFF1A SearchReplaceUI.searchLabel.text=\u641c\u7d22\uff1a - SearchReplaceUI.replaceLabel.text=\u66ff\u6362\u4e3a\uff1a - SearchReplaceUI.matchWholeValueCheckBox.text=\u4ec5\u5339\u914d\u6240\u6709\u6570\u503c - SearchReplaceUI.caseSensitiveCheckBox.text=\u533a\u5206\u5927\u5c0f\u5199 - SearchReplaceUI.normalSearchModeRadioButton.text=\u666e\u901a\u641c\u7d22 - SearchReplaceUI.regexSearchModeRadioButton.text=\u652f\u6301\u6b63\u5219\u8868\u8fbe\u5f0f\u7684\u641c\u7d22 - SearchReplaceUI.findNextButton.text=\u67e5\u627e\u4e0b\u4e00\u4e2a - SearchReplaceUI.replaceButton.text=\u66ff\u6362 - SearchReplaceUI.replaceAllButton.text=\u66ff\u6362\u6240\u6709 - SearchReplaceUI.descriptionLabel.text.nodes=\u641c\u7d22\u8282\u70b9\u8868 - SearchReplaceUI.descriptionLabel.text.edges=\u641c\u7d22\u8fb9\u5217\u8868 - +SearchReplaceUI.searchText.text= +SearchReplaceUI.replaceText.text= SearchReplaceUI.resultLabel.text=\u641c\u7d22\u5339\u914d\u7ed3\u679c\uff1a - SearchReplaceUI.resultText.contentType=\u6587\u672c\u7f16\u8f91\u5668 - SearchReplaceUI.not.found=\u627e\u4e0d\u5230\u201c{0}\u201d - SearchReplaceUI.regexReplacementError=\u8981\u66ff\u6362\u7684\u5b57\u7b26\u4e0e\u6b63\u5219\u8868\u8fbe\u5f0f\u4e0d\u5339\u914d - SearchReplaceUI.dialog.title.error=\u9519\u8bef - SearchReplaceUI.replacements.count.message={0}\u88ab\u66ff\u6362 - SearchReplaceUI.column=\u5217\uff1a\u201c{0}\u201d - SearchReplaceUI.allColumns=--\u6240\u6709\u5217-- - -ImportCSVUIWizardAction.name=\u8f93\u5165\u7535\u5b50\u8868\u683c - -ImportCSVUIVisualPanel1.name=\u5e38\u89c4\u9009\u9879 - -ImportCSVUIVisualPanel1.comma=\u9017\u53f7 - -ImportCSVUIVisualPanel1.semicolon=\u5206\u53f7 - -ImportCSVUIVisualPanel1.space=\u7a7a\u683c - -ImportCSVUIVisualPanel1.tab=\u5236\u8868\u7b26Tab - -ImportCSVUIVisualPanel1.nodes-table=\u8282\u70b9\u8868\u683c - -ImportCSVUIVisualPanel1.edges-table=\u8fb9\u8868\u683c - -ImportCSVUIVisualPanel1.filechooser.csvDescription=CSV - -ImportCSVUIVisualPanel1.tableLabel.text=\u5982\u8868\u683c\uff1a - -ImportCSVUIVisualPanel1.fileButton.text=\u2026\u2026 - -ImportCSVUIVisualPanel1.separatorLabel.text=\u5206\u9694\u7b26\uff1a - -ImportCSVUIVisualPanel1.descriptionLabel.text=\u9009\u62e9\u4e00\u4e2aCSV\u6587\u4ef6\u8f93\u5165\uff1a - -ImportCSVUIVisualPanel1.previewLabel.text=\u9884\u89c8\uff1a - -ImportCSVUIVisualPanel1.charsetLabel.text=\u683c\u5f0f\uff1a - -ImportCSVUIVisualPanel1.validation.invalid-file=\u65e0\u6548\u7684CSV\u6587\u4ef6 - -ImportCSVUIVisualPanel1.validation.no-columns=\u6587\u4ef6\u4e0d\u5305\u542b\u4efb\u4f55\u5217 - -ImportCSVUIVisualPanel1.validation.repeated-columns=\u6587\u4ef6\u4e0d\u5305\u542b\u91cd\u590d\u7684\u540d\u5b57 - -ImportCSVUIVisualPanel1.validation.error=\u9519\u8bef - -ImportCSVUIVisualPanel1.validation.file-permissions-error=\u8bfb\u6587\u4ef6\u65f6\u62a5\u9519\u3002\u786e\u8ba4\u6587\u4ef6\u662f\u5426\u6b63\u5728\u88ab\u4f7f\u7528\uff0c\u5e76\u786e\u4fdd\u4f60\u6709\u6743\u9650\u3002 - -ImportCSVUIVisualPanel1.validation.edges.no-source-target-columns=\u8fb9\u8868\u683c\u9700\u8981\u4e00\u4e2a\u5305\u542b\u8282\u70b9\u6807\u53f7\u7684\u201c\u6e90\u201d\u548c\u201c\u76ee\u6807\u201d\u5217\u3002 - -ImportCSVUIVisualPanel2.name=\u8f93\u5165\u8bbe\u7f6e - -ImportCSVUIVisualPanel2.columnsLabel.text=\u8f93\u5165\u5217\uff1a - -ImportCSVUIVisualPanel2.nodes.description=\u521b\u5efa\u65b0\u7684\u7279\u6b8a\u79cd\u7c7b\u7684\u5217\u3002
    \u5982\u679c\u4e22\u5931\u6807\u53f7\uff0c\u5206\u914d\u4e00\u4e2a\u65b0\u7684\u6807\u53f7\u3002
    \u9664\u975e\u6fc0\u6d3b\u9009\u9879\u201c\u5f3a\u5236\u521b\u5efa\u65b0\u7684\u8282\u70b9\u201d\uff0c\u5426\u5219\u4f1a\u4e0d\u4f1a\u66f4\u65b0\u5b58\u5728\u7684\u8282\u70b9\u3002 - -ImportCSVUIVisualPanel2.nodes.assign-ids-checkbox=\u5f3a\u5236\u521b\u5efa\u65b0\u7684\u8282\u70b9 - -ImportCSVUIVisualPanel2.edges.description=\u521b\u5efa\u65b0\u7684\u7279\u6b8a\u79cd\u7c7b\u7684\u5217\u3002
    \u5982\u679c\u4e22\u5931\u6807\u53f7\uff0c\u5206\u914d\u4e00\u4e2a\u65b0\u7684\u6807\u53f7\u3002
    \u8fb9\u9700\u8981\u586b\u5199\u4e86\u6e90\u8282\u70b9\u6807\u53f7\u548c\u76ee\u6807\u8282\u70b9\u6807\u53f7\u7684\u201c\u6e90\u201d\u548c\u201c\u76ee\u6807\u201d\u5217\u3002\u5982\u679c\u4e0d\u662f\u4ee5\u884c\u7684\u5f62\u5f0f\u63d0\u4f9b\uff0c\u5c06\u4f1a\u88ab\u7f3a\u7701\u3002
    \u5982\u679c\u6ca1\u63d0\u4f9b\u201c\u7c7b\u578b\u201d\u5217\uff0c\u6240\u6709\u7684\u8fb9\u5c06\u88ab\u5b9a\u4e49\u4e3a\u6709\u5411\u7684\u3002
    \u5982\u679c\u8fb9\u5df2\u7ecf\u5b58\u5728\uff0c\u5c5e\u6027\u5c06\u7f3a\u7701\uff0c\u4f46\u662f\u8981\u52a0\u4e0a\u5b83\u4eec\u7684\u6743\u91cd\uff08\u9ed8\u8ba4\u6743\u91cd\u4e3a1\uff09\u3002 - -ImportCSVUIVisualPanel2.edges.create-new-nodes-checkbox=\u521b\u5efa\u4e22\u5931\u7684jiedian - SearchReplaceUI.regexReplaceCheckBox.text=\u6b63\u5219\u8868\u8fbe\u5f0f\u66ff\u6362 - SearchReplaceUI.columnsToSearchLabel.text=\u641c\u7d22/\u66ff\u6362\u7684\u5217\uff1a - MergeNodeDuplicatesUI.description=\u81ea\u52a8\u68c0\u6d4b\u8282\u70b9\u91cd\u590d\u5e76\u5408\u5e76.
    \u5bf9\u6bcf\u4e00\u7ec4\u8282\u70b9\u590d\u5236, \u65b0\u8282\u70b9\u5c06\u4f1a\u548c\u8fd9\u4e00\u7ec4\u7684\u7b2c\u4e00\u4e2a\u8282\u70b9\u5177\u6709\u76f8\u540c\u989c\u8272\u3001\u5927\u5c0f\u548c\u4f4d\u7f6e.
    \u6bcf\u4e00\u5217\u4f7f\u7528\u4e0a\u8ff0\u7b56\u7565\u6765\u964d\u4f4e\u884c\u503c\u6570\u5230\u4e00\u4e2a\u503c.
    \u7b49\u7ea7\u662f\u5ffd\u7565\u7684. - -MergeNodeDuplicatesUI.noDuplicatesText=\u672a\u53d1\u73b0\u91cd\u590d\u7ed3\u70b9\! - -MergeNodeDuplicatesUI.duplicateGroupsNumber={0} \u4e2a\u8282\u70b9\u91cd\u590d\u53d1\u73b0\! - +MergeNodeDuplicatesUI.noDuplicatesText=\u672a\u53d1\u73b0\u91cd\u590d\u7ed3\u70b9! +MergeNodeDuplicatesUI.duplicateGroupsNumber={0} \u4e2a\u8282\u70b9\u91cd\u590d\u53d1\u73b0! MergeNodeDuplicatesUI.deleteMergedNodesText=\u5220\u9664\u5408\u5e76\u7684\u8282\u70b9 - MergeNodeDuplicatesUI.configurationText=\u914d\u7f6e - MergeNodeDuplicatesUI.caseSensitiveText=\u533a\u5206\u5927\u5c0f\u5199 - -MergeNodeDuplicatesUI.baseColumnText=\u57fa\u4e8e\u5217\u6765\u5220\u9664\u91cd\u590d\: +MergeNodeDuplicatesUI.baseColumnText=\u57fa\u4e8e\u5217\u6765\u5220\u9664\u91cd\u590d: +ManageColumnEstimatorsUI.estimator.AVERAGE=\u5e73\u5747 +ManageColumnEstimatorsUI.estimator.MEDIAN=\u4e2d\u95f4 +ManageColumnEstimatorsUI.estimator.MIN=\u6700\u5c0f +ManageColumnEstimatorsUI.estimator.MAX=\u6700\u5927 +ManageColumnEstimatorsUI.estimator.FIRST=\u9996\u5148 +ManageColumnEstimatorsUI.estimator.LAST=\u6700\u540e diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_zh_TW.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_zh_TW.properties new file mode 100644 index 0000000000..e410cce7e1 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/Bundle_zh_TW.properties @@ -0,0 +1,45 @@ +ClearEdgesUI.deleteDirectedCheckbox.text=Delete directed edges +ClearEdgesUI.descriptionLabel.text=Edge types to delete: +ClearEdgesUI.deleteUndirectedChekbox.text=Delete undirected edges +AddEdgeToGraphUI.descriptionLabel.text=Select the new edge type, source and target nodes: +AddEdgeToGraphUI.directedRadioButton.text=\u6709\u5411\u6027 +AddEdgeToGraphUI.undirectedRadioButton.text=\u7121\u5411\u6027 +AddEdgeToGraphUI.sourceNodeLabel.text=Source node: +AddEdgeToGraphUI.targetNodeLabel.text=Target node: +AddEdgeToGraphUI.edgeTypeLabel.text=Edge Kind: +SearchReplaceUI.searchLabel.text=Search: +SearchReplaceUI.replaceLabel.text=Replace with: +SearchReplaceUI.matchWholeValueCheckBox.text=Only match whole value +SearchReplaceUI.caseSensitiveCheckBox.text=Case sensitive +SearchReplaceUI.normalSearchModeRadioButton.text=Normal search +SearchReplaceUI.regexSearchModeRadioButton.text=Regular expression search +SearchReplaceUI.findNextButton.text=Find next +SearchReplaceUI.replaceButton.text=Replace +SearchReplaceUI.replaceAllButton.text=Replace all +SearchReplaceUI.descriptionLabel.text.nodes=Searching on nodes table +SearchReplaceUI.descriptionLabel.text.edges=Searching on edges table +SearchReplaceUI.searchText.text= +SearchReplaceUI.replaceText.text= +SearchReplaceUI.resultLabel.text=Search match result: +SearchReplaceUI.resultText.contentType=text/html +SearchReplaceUI.not.found=Could not find "{0}" +SearchReplaceUI.regexReplacementError=The replacement string is not correct for the regular expression +SearchReplaceUI.dialog.title.error=Error +SearchReplaceUI.replacements.count.message={0} ocurrences were replaced +SearchReplaceUI.column=Column: ''{0}'' +SearchReplaceUI.allColumns=--All columns-- +SearchReplaceUI.regexReplaceCheckBox.text=Regular expression replacement +SearchReplaceUI.columnsToSearchLabel.text=Columns to search/replace: +MergeNodeDuplicatesUI.description=Node duplicates are automatically detected and merged based on a column.
    For each group of node duplicates, one new node with the same color, size and position of the first node in the group is created.
    Edges are assigned to the new node.
    Each column uses the given strategy to reduce the rows values to one value. +MergeNodeDuplicatesUI.noDuplicatesText=No duplicates found! +MergeNodeDuplicatesUI.duplicateGroupsNumber={0} duplicates found! +MergeNodeDuplicatesUI.deleteMergedNodesText=Delete merged nodes +MergeNodeDuplicatesUI.configurationText=Configure +MergeNodeDuplicatesUI.caseSensitiveText=Case sensitive +MergeNodeDuplicatesUI.baseColumnText=Base column to detect duplicates: +ManageColumnEstimatorsUI.estimator.AVERAGE=Average +ManageColumnEstimatorsUI.estimator.MEDIAN=Median +ManageColumnEstimatorsUI.estimator.MIN=Min +ManageColumnEstimatorsUI.estimator.MAX=Max +ManageColumnEstimatorsUI.estimator.FIRST=First +ManageColumnEstimatorsUI.estimator.LAST=Last diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/cs.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/cs.po deleted file mode 100644 index a338e3b2e9..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/cs.po +++ /dev/null @@ -1,208 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-27 15:36+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "ClearEdgesUI.deleteDirectedCheckbox.text" -msgstr "Smazat Ε™Γ­zenΓ© hrany" - -msgid "ClearEdgesUI.descriptionLabel.text" -msgstr "Typy hran ke smazΓ‘nΓ­:" - -msgid "ClearEdgesUI.deleteUndirectedChekbox.text" -msgstr "Smazat neΕ™Γ­zenΓ© hrany" - -msgid "AddEdgeToGraphUI.descriptionLabel.text" -msgstr "Vyberte novΓ½ typ hrany, zdrojovΓ© a cΓ­lovΓ© uzle:" - -msgid "AddEdgeToGraphUI.directedRadioButton.text" -msgstr "ŘízenΓ©" - -msgid "AddEdgeToGraphUI.undirectedRadioButton.text" -msgstr "NeΕ™Γ­zenΓ©" - -msgid "AddEdgeToGraphUI.sourceNodeLabel.text" -msgstr "ZdrojovΓ½ uzel:" - -msgid "AddEdgeToGraphUI.targetNodeLabel.text" -msgstr "CΓ­lovΓ½ uzel:" - -msgid "SearchReplaceUI.searchLabel.text" -msgstr "Hledat:" - -msgid "SearchReplaceUI.replaceLabel.text" -msgstr "Nahradit čím:" - -msgid "SearchReplaceUI.matchWholeValueCheckBox.text" -msgstr "Pouze shodovat celou hodnotu" - -msgid "SearchReplaceUI.caseSensitiveCheckBox.text" -msgstr "CitlivΓ© na velikost psΓ­men" - -msgid "SearchReplaceUI.normalSearchModeRadioButton.text" -msgstr "NormΓ‘lnΓ­ hledΓ‘nΓ­" - -msgid "SearchReplaceUI.regexSearchModeRadioButton.text" -msgstr "HledΓ‘nΓ­ regulΓ‘rnΓ­m vΓ½razem" - -msgid "SearchReplaceUI.findNextButton.text" -msgstr "NajΓ­t dalΕ‘Γ­" - -msgid "SearchReplaceUI.replaceButton.text" -msgstr "Nahradit" - -msgid "SearchReplaceUI.replaceAllButton.text" -msgstr "Nahradit vΕ‘e" - -msgid "SearchReplaceUI.descriptionLabel.text.nodes" -msgstr "Hledat v tabulce uzlΕ―" - -msgid "SearchReplaceUI.descriptionLabel.text.edges" -msgstr "Hledat v tabulce hran" - -msgid "SearchReplaceUI.resultLabel.text" -msgstr "VΓ½sledky shody hledΓ‘nΓ­:" - -msgid "SearchReplaceUI.resultText.contentType" -msgstr "text/html" - -msgid "SearchReplaceUI.not.found" -msgstr "Nelze nalΓ©zt \"{0}\"" - -msgid "SearchReplaceUI.regexReplacementError" -msgstr "ŘetΔ›zec nahrazenΓ­ nenΓ­ pro regulΓ‘rnΓ­ vΓ½raz sprΓ‘vnΓ½" - -msgid "SearchReplaceUI.dialog.title.error" -msgstr "Chyba" - -msgid "SearchReplaceUI.replacements.count.message" -msgstr "{0} vΓ½skytΕ― bylo nahrazeno" - -msgid "SearchReplaceUI.column" -msgstr "Sloupec: ''{0}''" - -msgid "SearchReplaceUI.allColumns" -msgstr "--VΕ‘echny sloupce--" - -msgid "ImportCSVUIWizardAction.name" -msgstr "Importovat tabulky" - -msgid "ImportCSVUIVisualPanel1.name" -msgstr "ObecnΓ© moΕΎnosti" - -msgid "ImportCSVUIVisualPanel1.comma" -msgstr "ČÑrka" - -msgid "ImportCSVUIVisualPanel1.semicolon" -msgstr "StΕ™ednΓ­k" - -msgid "ImportCSVUIVisualPanel1.space" -msgstr "Mezera" - -msgid "ImportCSVUIVisualPanel1.tab" -msgstr "TabulΓ‘tor" - -msgid "ImportCSVUIVisualPanel1.nodes-table" -msgstr "Tabulka uzlΕ―" - -msgid "ImportCSVUIVisualPanel1.edges-table" -msgstr "Tabulka hran" - -msgid "ImportCSVUIVisualPanel1.filechooser.csvDescription" -msgstr "CSV" - -msgid "ImportCSVUIVisualPanel1.tableLabel.text" -msgstr "Jako tabulka:" - -msgid "ImportCSVUIVisualPanel1.fileButton.text" -msgstr "..." - -msgid "ImportCSVUIVisualPanel1.separatorLabel.text" -msgstr "OddΔ›lovač:" - -msgid "ImportCSVUIVisualPanel1.descriptionLabel.text" -msgstr "Zvolte soubor CSV k importu:" - -msgid "ImportCSVUIVisualPanel1.previewLabel.text" -msgstr "NΓ‘hled:" - -msgid "ImportCSVUIVisualPanel1.charsetLabel.text" -msgstr "ZnakovΓ‘ sada:" - -msgid "ImportCSVUIVisualPanel1.validation.invalid-file" -msgstr "NeplatnΓ½ soubor CSV" - -msgid "ImportCSVUIVisualPanel1.validation.no-columns" -msgstr "Soubor nemΓ‘ ΕΎΓ‘ndnΓ½ sloupec" - -msgid "ImportCSVUIVisualPanel1.validation.repeated-columns" -msgstr "Soubor nemΕ―ΕΎe mΓ­t opakovanΓ© nΓ‘zvy sloupcΕ―" - -msgid "ImportCSVUIVisualPanel1.validation.error" -msgstr "Chyba" - -msgid "ImportCSVUIVisualPanel1.validation.file-permissions-error" -msgstr "PΕ™i čtenΓ­ souboru doΕ‘lo k chybΔ›. UjistΔ›te se, ΕΎe soubor nenΓ­ pouΕΎΓ­vΓ‘n a ΕΎe mΓ‘te oprΓ‘vnΔ›nΓ­." - -msgid "ImportCSVUIVisualPanel1.validation.edges.no-source-target-columns" -msgstr "Tabulka hran potΕ™ebuje sloupce 'Source' a 'Target' s id uzlΕ―." - -msgid "ImportCSVUIVisualPanel2.name" -msgstr "Importovat nastavenΓ­" - -msgid "ImportCSVUIVisualPanel2.columnsLabel.text" -msgstr "ImportovanΓ© sloupce:" - -msgid "ImportCSVUIVisualPanel2.nodes.description" -msgstr "NovΓ© sloupce jsou vytvoΕ™eny pomocΓ­ určenΓ©ho typu.
    VytvoΕ™enΓ© id je pΕ™idΔ›leno, pokud chybΓ­.
    Pokud moΕΎnost 'Donutit uzly, aby byly vytvΓ‘Ε™eny jako novΓ©' nenΓ­ povolena, jiΕΎ existujΓ­cΓ­ uzle budou aktualizovΓ‘ny." - -msgid "ImportCSVUIVisualPanel2.nodes.assign-ids-checkbox" -msgstr "Donutit uzly, aby byly vytvΓ‘Ε™eny jako novΓ©" - -msgid "ImportCSVUIVisualPanel2.edges.description" -msgstr "NovΓ© sloupce jsou vytvoΕ™eny pomocΓ­ určenΓ©ho typu.
    VytvoΕ™enΓ© id je pΕ™idΔ›leno, pokud chybΓ­ nebo i kdyΕΎ existuje.
    Hrany potΕ™ebujΓ­ sloupce 'Source' a 'Target' s id zdrojovΓ©ho a cΓ­lovΓ©ho uzlu. Pokud kterΓ½koliv nenΓ­ pro Ε™Γ‘dek poskytnut, bude ignorovΓ‘n.
    Pokud nenΓ­ poskytnut ΕΎΓ‘dnΓ½ sloupec 'Type', vΕ‘echny hrany budou Ε™Γ­zenΓ©.
    Pokud hrana jiΕΎ existuje, budou vlastnosti ignorovΓ‘ny, ale jejich vΓ‘hy budou pΕ™idΓ‘ny (pokud nenΓ­ určeno, pak vΓ‘ha je 1)" - -msgid "ImportCSVUIVisualPanel2.edges.create-new-nodes-checkbox" -msgstr "VytvoΕ™it chybΔ›jΓ­cΓ­ uzle" - -msgid "SearchReplaceUI.regexReplaceCheckBox.text" -msgstr "NahrazenΓ­ regulΓ‘rnΓ­m vΓ½razem" - -msgid "SearchReplaceUI.columnsToSearchLabel.text" -msgstr "Sloupce k hledΓ‘nΓ­/nahrazenΓ­" - -msgid "MergeNodeDuplicatesUI.description" -msgstr "Kopie uzlΕ― jsou automaticky zjiΕ‘tΔ›ny a sloučeny na zΓ‘kladΔ› sloupce.
    Za kaΕΎdou skupinu kopiΓ­ uzlΕ―, bude vytvoΕ™en jeden se stejnou barvou, velikostΓ­ a umΓ­stΔ›nΓ­m jako prvnΓ­ uzel ve stejnΓ© skupinΔ›.
    Hrany jsou pΕ™idΔ›leny k novΓ©mu uzlu.
    KaΕΎdΓ½ sloupce pouΕΎΓ­vΓ‘ danou strategii ke snΓ­ΕΎenΓ­ hodnot Ε™Γ‘dkΕ― na jednu.
    Hierarchie je ignorovΓ‘na." - -msgid "MergeNodeDuplicatesUI.noDuplicatesText" -msgstr "Ε½Γ‘dnΓ© kopie nenalezeny!" - -msgid "MergeNodeDuplicatesUI.duplicateGroupsNumber" -msgstr "Nalezeno {0} kopiΓ­!" - -msgid "MergeNodeDuplicatesUI.deleteMergedNodesText" -msgstr "Smazat sloučenΓ© uzle" - -msgid "MergeNodeDuplicatesUI.configurationText" -msgstr "Nastavit" - -msgid "MergeNodeDuplicatesUI.caseSensitiveText" -msgstr "CitlivΓ© na velikost pΓ­smen" - -msgid "MergeNodeDuplicatesUI.baseColumnText" -msgstr "ZΓ‘kladnΓ­ sloupec pro zjiΕ‘Ε₯ovΓ‘nΓ­ kopiΓ­:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/es.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/es.po deleted file mode 100644 index 6801c6cd34..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/es.po +++ /dev/null @@ -1,210 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-31 12:38+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "ClearEdgesUI.deleteDirectedCheckbox.text" -msgstr "Eliminar aristas dirigidas" - -msgid "ClearEdgesUI.descriptionLabel.text" -msgstr "Tipos de aristas a eliminar:" - -msgid "ClearEdgesUI.deleteUndirectedChekbox.text" -msgstr "Eliminar aristas no dirigidas" - -msgid "AddEdgeToGraphUI.descriptionLabel.text" -msgstr "Selecciona un tipo para la nueva arista y un nodo origen y destino:" - -msgid "AddEdgeToGraphUI.directedRadioButton.text" -msgstr "Dirigida" - -msgid "AddEdgeToGraphUI.undirectedRadioButton.text" -msgstr "No dirigida" - -msgid "AddEdgeToGraphUI.sourceNodeLabel.text" -msgstr "Nodo origen:" - -msgid "AddEdgeToGraphUI.targetNodeLabel.text" -msgstr "Nodo destino:" - -msgid "SearchReplaceUI.searchLabel.text" -msgstr "BΓΊsqueda" - -msgid "SearchReplaceUI.replaceLabel.text" -msgstr "Reemplazar con:" - -msgid "SearchReplaceUI.matchWholeValueCheckBox.text" -msgstr "SΓ³lo valores completos" - -msgid "SearchReplaceUI.caseSensitiveCheckBox.text" -msgstr "Sensible a mayΓΊsculas" - -msgid "SearchReplaceUI.normalSearchModeRadioButton.text" -msgstr "BΓΊsqueda normal" - -msgid "SearchReplaceUI.regexSearchModeRadioButton.text" -msgstr "BΓΊsqueda con expresiΓ³n regular" - -msgid "SearchReplaceUI.findNextButton.text" -msgstr "Encontrar siguiente" - -msgid "SearchReplaceUI.replaceButton.text" -msgstr "Reemplazar" - -msgid "SearchReplaceUI.replaceAllButton.text" -msgstr "Reemplazar todo" - -msgid "SearchReplaceUI.descriptionLabel.text.nodes" -msgstr "Buscando en la tabla de nodos" - -msgid "SearchReplaceUI.descriptionLabel.text.edges" -msgstr "Buscando en la tabla de aristas" - -msgid "SearchReplaceUI.resultLabel.text" -msgstr "Resultado de la bΓΊsqueda:" - -msgid "SearchReplaceUI.resultText.contentType" -msgstr "text/html" - -msgid "SearchReplaceUI.not.found" -msgstr "No se pudo encontrar \"{0}\"" - -msgid "SearchReplaceUI.regexReplacementError" -msgstr "El texto de reemplazado no es correcto para la expresiΓ³n regular" - -msgid "SearchReplaceUI.dialog.title.error" -msgstr "Error" - -msgid "SearchReplaceUI.replacements.count.message" -msgstr "{0} ocurrencias fueron reemplazadas" - -msgid "SearchReplaceUI.column" -msgstr "Columna: ''{0}''" - -msgid "SearchReplaceUI.allColumns" -msgstr "--Todas columnas--" - -msgid "ImportCSVUIWizardAction.name" -msgstr "Importar hoja de cΓ‘lculo" - -msgid "ImportCSVUIVisualPanel1.name" -msgstr "Opciones generales" - -msgid "ImportCSVUIVisualPanel1.comma" -msgstr "Coma" - -msgid "ImportCSVUIVisualPanel1.semicolon" -msgstr "Punto y coma" - -msgid "ImportCSVUIVisualPanel1.space" -msgstr "Espacio" - -msgid "ImportCSVUIVisualPanel1.tab" -msgstr "Tabulador" - -msgid "ImportCSVUIVisualPanel1.nodes-table" -msgstr "Tabla de nodos" - -msgid "ImportCSVUIVisualPanel1.edges-table" -msgstr "Tabla de aristas" - -msgid "ImportCSVUIVisualPanel1.filechooser.csvDescription" -msgstr "CSV" - -msgid "ImportCSVUIVisualPanel1.tableLabel.text" -msgstr "Tabla:" - -msgid "ImportCSVUIVisualPanel1.fileButton.text" -msgstr "..." - -msgid "ImportCSVUIVisualPanel1.separatorLabel.text" -msgstr "Separador:" - -msgid "ImportCSVUIVisualPanel1.descriptionLabel.text" -msgstr "Escoge un archivo CSV a importar:" - -msgid "ImportCSVUIVisualPanel1.previewLabel.text" -msgstr "PrevisualizaciΓ³n:" - -msgid "ImportCSVUIVisualPanel1.charsetLabel.text" -msgstr "Conjunto de caracteres:" - -msgid "ImportCSVUIVisualPanel1.validation.invalid-file" -msgstr "Archivo CSV invΓ‘lido" - -msgid "ImportCSVUIVisualPanel1.validation.no-columns" -msgstr "El archivo no contiene ninguna columna" - -msgid "ImportCSVUIVisualPanel1.validation.repeated-columns" -msgstr "El archivo no puede tener nombres de columnas repetidos" - -msgid "ImportCSVUIVisualPanel1.validation.error" -msgstr "Error" - -msgid "ImportCSVUIVisualPanel1.validation.file-permissions-error" -msgstr "Un error ocurriΓ³ al leer el archivo. AsegΓΊrate de que el archivo no estΓ‘ en uso y tienes permisos" - -msgid "ImportCSVUIVisualPanel1.validation.edges.no-source-target-columns" -msgstr "Importar a la tabla de aristas requiere las columnas llamadas 'Source' y 'Target' con las ids de los nodos" - -msgid "ImportCSVUIVisualPanel2.name" -msgstr "ParΓ‘metros de importaciΓ³n:" - -msgid "ImportCSVUIVisualPanel2.columnsLabel.text" -msgstr "Importar columnas:" - -msgid "ImportCSVUIVisualPanel2.nodes.description" -msgstr "Las columnas no existentes serΓ‘n creadas con el tipo especificado.
    Si no se proporciona la id de un nodo, se le asignarΓ‘ una.
    A no ser que la opciΓ³n 'Asignar un nuevo id a un nodo cuando ya existe' estΓ© activada, los datos de los nodos ya existentes serΓ‘n actualizados con los datos del archivo CSV" - -msgid "ImportCSVUIVisualPanel2.nodes.assign-ids-checkbox" -msgstr "Forzar que los nodos sean creados nuevos" - -msgid "ImportCSVUIVisualPanel2.edges.description" -msgstr "Las columnas no existentes serΓ‘n creadas con el tipo especificado.
    Si no se proporciona la id de una arista o una arista con esa id ya existe, se le asignarΓ‘ una.
    Las aristas necesitan las columnas llamadas 'Source' y 'Target' con las ids de los nodos origen y destino. Si alguna no es proporcionada en una fila serΓ‘ ignorada.
    Si no se proporciona la columna 'Type', todas las aristas serΓ‘n dirigidas.
    Si una arista ya existe, sus atributos serΓ‘n ignorados, pero los pesos serΓ‘n sumados (peso 1 si no se especifica)" - -msgid "ImportCSVUIVisualPanel2.edges.create-new-nodes-checkbox" -msgstr "Crear nodos inexistentes" - -msgid "SearchReplaceUI.regexReplaceCheckBox.text" -msgstr "Reemplazar en modo expresiΓ³n regular" - -msgid "SearchReplaceUI.columnsToSearchLabel.text" -msgstr "Columnas en las que buscar/reemplazar:" - -msgid "MergeNodeDuplicatesUI.description" -msgstr "Los nodos duplicados son detectados y mezclados automΓ‘ticamente a partir de los valores de una columna.
    Para cada grupo de nodos duplicados, un nuevo nodo con el mismo color, tamaΓ±o y posiciΓ³n que el primer nodo del grupo es creado.
    Las aristas son asignadas al nuevo nodo.
    Cada columna utiliza la estrategia escogida para reducir los valores de las filas a un solo valor.
    La jerarquΓ­a es ignorada." - -msgid "MergeNodeDuplicatesUI.noDuplicatesText" -msgstr "Β‘No se encontraron duplicados!" - -msgid "MergeNodeDuplicatesUI.duplicateGroupsNumber" -msgstr "Β‘{0} duplicados encontrados!" - -msgid "MergeNodeDuplicatesUI.deleteMergedNodesText" -msgstr "Borrar nodos mezclados" - -msgid "MergeNodeDuplicatesUI.configurationText" -msgstr "Configurar" - -msgid "MergeNodeDuplicatesUI.caseSensitiveText" -msgstr "Sensible a mayΓΊsculas" - -msgid "MergeNodeDuplicatesUI.baseColumnText" -msgstr "Columna base para detectar duplicados:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/fr.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/fr.po deleted file mode 100644 index 64b81fbc9a..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/fr.po +++ /dev/null @@ -1,210 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-31 12:50+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "ClearEdgesUI.deleteDirectedCheckbox.text" -msgstr "Supprimer liens dirigΓ©s" - -msgid "ClearEdgesUI.descriptionLabel.text" -msgstr "Types de liens Γ  supprimer :" - -msgid "ClearEdgesUI.deleteUndirectedChekbox.text" -msgstr "Supprimer liens non dirigΓ©s" - -msgid "AddEdgeToGraphUI.descriptionLabel.text" -msgstr "SΓ©lectionnez le type du lien créé, ses noeuds source et destination :" - -msgid "AddEdgeToGraphUI.directedRadioButton.text" -msgstr "DirigΓ©" - -msgid "AddEdgeToGraphUI.undirectedRadioButton.text" -msgstr "Non dirigΓ©" - -msgid "AddEdgeToGraphUI.sourceNodeLabel.text" -msgstr "Noeud source :" - -msgid "AddEdgeToGraphUI.targetNodeLabel.text" -msgstr "Noeud de destination :" - -msgid "SearchReplaceUI.searchLabel.text" -msgstr "Rechercher :" - -msgid "SearchReplaceUI.replaceLabel.text" -msgstr "Remplacer par :" - -msgid "SearchReplaceUI.matchWholeValueCheckBox.text" -msgstr "ChaΓne complΓ¨te" - -msgid "SearchReplaceUI.caseSensitiveCheckBox.text" -msgstr "Sensible Γ  la casse" - -msgid "SearchReplaceUI.normalSearchModeRadioButton.text" -msgstr "Recherche normale" - -msgid "SearchReplaceUI.regexSearchModeRadioButton.text" -msgstr "Recherche par expression rationnelle" - -msgid "SearchReplaceUI.findNextButton.text" -msgstr "Trouver suivant" - -msgid "SearchReplaceUI.replaceButton.text" -msgstr "Remplacer" - -msgid "SearchReplaceUI.replaceAllButton.text" -msgstr "Tout remplacer" - -msgid "SearchReplaceUI.descriptionLabel.text.nodes" -msgstr "Chercher parmi les noeuds" - -msgid "SearchReplaceUI.descriptionLabel.text.edges" -msgstr "Chercher parmi les liens" - -msgid "SearchReplaceUI.resultLabel.text" -msgstr "RΓ©sultat :" - -msgid "SearchReplaceUI.resultText.contentType" -msgstr "text/html" - -msgid "SearchReplaceUI.not.found" -msgstr "\"{0}\" introuvable" - -msgid "SearchReplaceUI.regexReplacementError" -msgstr "ChaΓ―ne de remplacement incorrecte pour l'expression rationnelle" - -msgid "SearchReplaceUI.dialog.title.error" -msgstr "Erreur" - -msgid "SearchReplaceUI.replacements.count.message" -msgstr "{0} ocurrences ont Γ©tΓ© remplacΓ©es" - -msgid "SearchReplaceUI.column" -msgstr "Colonne: ''{0}''" - -msgid "SearchReplaceUI.allColumns" -msgstr "--Toutes les colonnes--" - -msgid "ImportCSVUIWizardAction.name" -msgstr "Importer feuille de calcul" - -msgid "ImportCSVUIVisualPanel1.name" -msgstr "Options gΓ©nΓ©rales" - -msgid "ImportCSVUIVisualPanel1.comma" -msgstr "Virgule" - -msgid "ImportCSVUIVisualPanel1.semicolon" -msgstr "Point-virgule" - -msgid "ImportCSVUIVisualPanel1.space" -msgstr "Espace" - -msgid "ImportCSVUIVisualPanel1.tab" -msgstr "Tabulation" - -msgid "ImportCSVUIVisualPanel1.nodes-table" -msgstr "Table des noeuds" - -msgid "ImportCSVUIVisualPanel1.edges-table" -msgstr "Table des liens" - -msgid "ImportCSVUIVisualPanel1.filechooser.csvDescription" -msgstr "CSV" - -msgid "ImportCSVUIVisualPanel1.tableLabel.text" -msgstr "En tant que table :" - -msgid "ImportCSVUIVisualPanel1.fileButton.text" -msgstr "..." - -msgid "ImportCSVUIVisualPanel1.separatorLabel.text" -msgstr "SΓ©parateur :" - -msgid "ImportCSVUIVisualPanel1.descriptionLabel.text" -msgstr "Choisissez un fichier CSV Γ  importer :" - -msgid "ImportCSVUIVisualPanel1.previewLabel.text" -msgstr "PrΓ©visualisation :" - -msgid "ImportCSVUIVisualPanel1.charsetLabel.text" -msgstr "Encodage :" - -msgid "ImportCSVUIVisualPanel1.validation.invalid-file" -msgstr "Fichier CSV invalide" - -msgid "ImportCSVUIVisualPanel1.validation.no-columns" -msgstr "Le fichier n'a aucune colonne." - -msgid "ImportCSVUIVisualPanel1.validation.repeated-columns" -msgstr "Les noms de colonne doivent Γͺtre unique dans le fichier." - -msgid "ImportCSVUIVisualPanel1.validation.error" -msgstr "Erreur" - -msgid "ImportCSVUIVisualPanel1.validation.file-permissions-error" -msgstr "Erreur lors de la lecture du fichier. VΓ©rifiez qu'il n'est pas utilisΓ© et que vous avez les bonnes permissions." - -msgid "ImportCSVUIVisualPanel1.validation.edges.no-source-target-columns" -msgstr "La tables des liens nΓ©cessite les colonnes 'Source' et 'Target' contenant les ids des noeuds." - -msgid "ImportCSVUIVisualPanel2.name" -msgstr "ParamΓ¨tres d'import" - -msgid "ImportCSVUIVisualPanel2.columnsLabel.text" -msgstr "Colonnes importΓ©es :" - -msgid "ImportCSVUIVisualPanel2.nodes.description" -msgstr "Les nouvelles colonnes ont le type spΓ©cifiΓ©.
    Un identifiant est créé s'il est manquant.
    Les noeuds existants sont mis Γ  jour sauf si l'option 'Forcer les noeuds importΓ©s Γ  Γͺtre de nouveaux noeuds' est cochΓ©e." - -msgid "ImportCSVUIVisualPanel2.nodes.assign-ids-checkbox" -msgstr "Forcer les noeuds importΓ©s Γ  Γͺtre de nouveaux noeuds" - -msgid "ImportCSVUIVisualPanel2.edges.description" -msgstr "Les nouvelles colonnes ont le type spΓ©cifiΓ©.
    Un identifiant est créé s'il est manquant ou déjà présent.
    Les liens ont besoin de colonnes 'Source' et 'Target' contenant les ids des noeuds. Si une ligne n'en contient pas, elle est ignorΓ©.
    Sans colonne 'Type', les liens sont dirigΓ©s.
    Les attributs sont ignorΓ©s si un lien est dΓ©jΓ  prΓ©sent, mais leurs poids sont additionnΓ©s (poids=1 par dΓ©faut)" - -msgid "ImportCSVUIVisualPanel2.edges.create-new-nodes-checkbox" -msgstr "CrΓ©er les noeuds manquants" - -msgid "SearchReplaceUI.regexReplaceCheckBox.text" -msgstr "Remplacement par expression rationnelle" - -msgid "SearchReplaceUI.columnsToSearchLabel.text" -msgstr "Colonnes Γ  chercher/remplacer :" - -msgid "MergeNodeDuplicatesUI.description" -msgstr "Les noeuds en double sont automatiquement dΓ©tectΓ©s et fusionnΓ©s selon une colonne donnΓ©e.
    Pour chaque groupe de doublons, un nouveau noeud est créé ayant mΓͺme couleur, taille et position que le premier noeud du groupe.
    Les liens sont affectΓ©s au nouveau noeud.
    Chaque colonne utilise une stratΓ©gie donnΓ©e pour rΓ©duire les diffΓ©rentes valeurs Γ  une seule.
    La hiΓ©rarchie est ignorΓ©e." - -msgid "MergeNodeDuplicatesUI.noDuplicatesText" -msgstr "Aucun doublon trouvΓ©" - -msgid "MergeNodeDuplicatesUI.duplicateGroupsNumber" -msgstr "{0} doublons trouvΓ©s" - -msgid "MergeNodeDuplicatesUI.deleteMergedNodesText" -msgstr "Supprimer les noeuds fusionnΓ©s" - -msgid "MergeNodeDuplicatesUI.configurationText" -msgstr "Configurer" - -msgid "MergeNodeDuplicatesUI.caseSensitiveText" -msgstr "Sensible Γ  la casse" - -msgid "MergeNodeDuplicatesUI.baseColumnText" -msgstr "Colonne de base pour dΓ©tecter les doublons :" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/ja.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/ja.po deleted file mode 100644 index fe5c12035e..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/ja.po +++ /dev/null @@ -1,208 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-15 07:52+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "ClearEdgesUI.deleteDirectedCheckbox.text" -msgstr "ζœ‰ε‘θΎΊγ‚’ε‰Šι™€γ™γ‚‹" - -msgid "ClearEdgesUI.descriptionLabel.text" -msgstr "ε‰Šι™€γ™γ‚‹γ‚¨γƒƒγ‚Έγη¨ι‘ž:" - -msgid "ClearEdgesUI.deleteUndirectedChekbox.text" -msgstr "η„‘ε‘γ‚¨γƒƒγ‚Έγ‚’ε‰Šι™€γ™γ‚‹" - -msgid "AddEdgeToGraphUI.descriptionLabel.text" -msgstr "新規辺γη¨ι‘žγ€γ‚½γƒΌγ‚Ήγ€γ‚ΏγƒΌγ‚²γƒƒγƒˆγ‚’ιΈζŠžγ€‚" - -msgid "AddEdgeToGraphUI.directedRadioButton.text" -msgstr "ζœ‰ε‘" - -msgid "AddEdgeToGraphUI.undirectedRadioButton.text" -msgstr "焑向" - -msgid "AddEdgeToGraphUI.sourceNodeLabel.text" -msgstr "γ‚½γƒΌγ‚ΉγƒŽγƒΌγƒ‰:" - -msgid "AddEdgeToGraphUI.targetNodeLabel.text" -msgstr "γ‚ΏγƒΌγ‚²γƒƒγƒˆγƒŽγƒΌγƒ‰:" - -msgid "SearchReplaceUI.searchLabel.text" -msgstr "怜紒:" - -msgid "SearchReplaceUI.replaceLabel.text" -msgstr "η½ζ›:" - -msgid "SearchReplaceUI.matchWholeValueCheckBox.text" -msgstr "倀全体γδΈ€θ‡΄γγΏ" - -msgid "SearchReplaceUI.caseSensitiveCheckBox.text" -msgstr "ε€§ζ–‡ε­—γ¨ε°ζ–‡ε­—γ‚’εŒΊεˆ₯" - -msgid "SearchReplaceUI.normalSearchModeRadioButton.text" -msgstr "ι€šεΈΈζ€œη΄’" - -msgid "SearchReplaceUI.regexSearchModeRadioButton.text" -msgstr "正規葨現怜紒" - -msgid "SearchReplaceUI.findNextButton.text" -msgstr "ζ¬‘γ‚’ζ€œη΄’" - -msgid "SearchReplaceUI.replaceButton.text" -msgstr "η½ζ›" - -msgid "SearchReplaceUI.replaceAllButton.text" -msgstr "すべてをη½ζ›" - -msgid "SearchReplaceUI.descriptionLabel.text.nodes" -msgstr "γƒŽγƒΌγƒ‰γγƒ†γƒΌγƒ–γƒ«γ‚’δ½Ώη”¨γ—γŸζ€œη΄’" - -msgid "SearchReplaceUI.descriptionLabel.text.edges" -msgstr "θΎΊγƒ†γƒΌγƒ–γƒ«γ‚’ζ€œη΄’" - -msgid "SearchReplaceUI.resultLabel.text" -msgstr "δΈ€θ‡΄η΅ζžœγ‚’ζ€œη΄’:" - -msgid "SearchReplaceUI.resultText.contentType" -msgstr "text/html" - -msgid "SearchReplaceUI.not.found" -msgstr "\"{0}\"γŒθ¦‹γ€γ‹γ‚ŠγΎγ›γ‚“γ§γ—γŸ" - -msgid "SearchReplaceUI.regexReplacementError" -msgstr "η½ζ›ζ–‡ε­—εˆ—γζ­£θ¦θ‘¨ηΎγŒδΈζ­£η’Ίγ§γ™" - -msgid "SearchReplaceUI.dialog.title.error" -msgstr "エラー" - -msgid "SearchReplaceUI.replacements.count.message" -msgstr "{0}δ»Άγ‚’η½ζ›" - -msgid "SearchReplaceUI.column" -msgstr "εˆ—:'' {0} ''" - -msgid "SearchReplaceUI.allColumns" -msgstr "--ε…¨εˆ—--" - -msgid "ImportCSVUIWizardAction.name" -msgstr "γ‚Ήγƒ—γƒ¬γƒƒγƒ‰γ‚·γƒΌγƒˆγγ‚€γƒ³γƒγƒΌγƒˆ" - -msgid "ImportCSVUIVisualPanel1.name" -msgstr "η·εˆηš„γ‚ͺプション" - -msgid "ImportCSVUIVisualPanel1.comma" -msgstr "γ‚³γƒ³γƒž" - -msgid "ImportCSVUIVisualPanel1.semicolon" -msgstr "γ‚»γƒŸγ‚³γƒ­γƒ³" - -msgid "ImportCSVUIVisualPanel1.space" -msgstr "γ‚ΉγƒšγƒΌγ‚Ή" - -msgid "ImportCSVUIVisualPanel1.tab" -msgstr "γ‚Ώγƒ–" - -msgid "ImportCSVUIVisualPanel1.nodes-table" -msgstr "γƒŽγƒΌγƒ‰γƒ†γƒΌγƒ–γƒ«" - -msgid "ImportCSVUIVisualPanel1.edges-table" -msgstr "辺テーブル" - -msgid "ImportCSVUIVisualPanel1.filechooser.csvDescription" -msgstr "CSV" - -msgid "ImportCSVUIVisualPanel1.tableLabel.text" -msgstr "テーブルとして:" - -msgid "ImportCSVUIVisualPanel1.fileButton.text" -msgstr "..." - -msgid "ImportCSVUIVisualPanel1.separatorLabel.text" -msgstr "セパレータ:" - -msgid "ImportCSVUIVisualPanel1.descriptionLabel.text" -msgstr "γ‚€γƒ³γƒγƒΌγƒˆγ™γ‚‹CSVγƒ•γ‚‘γ‚€γƒ«γ‚’ιΈζŠž:" - -msgid "ImportCSVUIVisualPanel1.previewLabel.text" -msgstr "プレビγƒ₯γƒΌ:" - -msgid "ImportCSVUIVisualPanel1.charsetLabel.text" -msgstr "ζ–‡ε­—γ‚»γƒƒγƒˆ:" - -msgid "ImportCSVUIVisualPanel1.validation.invalid-file" -msgstr "η„‘εŠΉγͺCSVフゑむル" - -msgid "ImportCSVUIVisualPanel1.validation.no-columns" -msgstr "γƒ•γ‚‘γ‚€γƒ«γ«εˆ—γŒγ‚γ‚ŠγΎγ›γ‚“" - -msgid "ImportCSVUIVisualPanel1.validation.repeated-columns" -msgstr "γƒ•γ‚‘γ‚€γƒ«γ―ηΉ°γ‚ŠθΏ”γ—γŸεˆ—εγ‚’δ»˜γ‘γ‚‰γ‚ŒγΎγ›γ‚“γ€‚" - -msgid "ImportCSVUIVisualPanel1.validation.error" -msgstr "エラー" - -msgid "ImportCSVUIVisualPanel1.validation.file-permissions-error" -msgstr "フゑむルをθͺ­γΏθΎΌγ‚€γ¨γγ«γ‚¨γƒ©γƒΌγŒθ΅·γ“γ£γŸγ€‚γƒ•γ‚‘γ‚€γƒ«γŒδ½Ώη”¨δΈ­γ§γͺγ„γ‹γ‚’γ‚―γ‚»γ‚Ήθ¨±ε―γŒγ‚γ‚‹γ“γ¨γ‚’η’Ίθͺγ—てください。" - -msgid "ImportCSVUIVisualPanel1.validation.edges.no-source-target-columns" -msgstr "θΎΊγƒ†γƒΌγƒ–γƒ«γ«γ―γƒŽγƒΌγƒ‰IDγ‚’ζŒγ€\"γ‚½γƒΌγ‚Ή\"と\"γ‚ΏγƒΌγ‚²γƒƒγƒˆ\"εˆ—γŒεΏ…θ¦γ§γ™γ€‚" - -msgid "ImportCSVUIVisualPanel2.name" -msgstr "θ¨­εšγ‚’γ‚€γƒ³γƒγƒΌγƒˆ" - -msgid "ImportCSVUIVisualPanel2.columnsLabel.text" -msgstr "γ‚€γƒ³γƒγƒΌγƒˆγ—γŸεˆ—:" - -msgid "ImportCSVUIVisualPanel2.nodes.description" -msgstr "ζ–°γ—γ„εˆ—γ―η‰Ήεšγγ‚Ώγ‚€γƒ—γ§η”Ÿζˆγ•γ‚ŒγΎγ™γ€‚
    γͺγ‘γ‚Œγ°η”Ÿζˆγ•γ‚ŒγŸidγŒε‰²γ‚Šε½“γ¦γ‚‰γ‚ŒγΎγ™γ€‚
    'ζ–°γ—γ„γƒŽγƒΌγƒ‰γ¨γ—γ¦εΌ·εˆΆηš„γ«δ½œζˆ'γ‚ͺγƒ—γ‚·γƒ§γƒ³γŒε―θƒ½γ§γͺγ‘γ‚Œγ°γ€ζ—’ε­˜γγƒŽγƒΌγƒ‰γŒζ›΄ζ–°γ•γ‚ŒγΎγ™γ€‚" - -msgid "ImportCSVUIVisualPanel2.nodes.assign-ids-checkbox" -msgstr "εΌ·εˆΆηš„γ«ζ–°θ¦γƒŽγƒΌγƒ‰γ¨γ—γ¦η”Ÿζˆ" - -msgid "ImportCSVUIVisualPanel2.edges.description" -msgstr "ζ–°γ—γ„εˆ—γ―η‰Ήεšγγ‚Ώγ‚€γƒ—γ§η”Ÿζˆγ•γ‚ŒγΎγ™γ€‚
    あってもγͺγγ¨γ‚‚η”Ÿζˆγ•γ‚ŒγŸidγŒε‰²γ‚Šε½“γ¦γ‚‰γ‚ŒγΎγ™γ€‚
    θΎΊγ―γ‚½γƒΌγ‚ΉεŠγ³γ‚ΏγƒΌγ‚²γƒƒγƒˆγƒŽγƒΌγƒ‰γidγ‚’ζŒγ£γŸ'Source'及び'Target'εˆ—γ‚’εΏ…θ¦γ¨γ—γΎγ™γ€‚δ½•γ‚‚θ‘Œγ«ε……ε½“γ•γ‚Œγͺγ‘γ‚Œγ°η„‘θ¦–γ•γ‚ŒγΎγ™γ€‚
    'Type'εˆ—γŒγͺγ‘γ‚Œγ°γ™γΉγ¦γθΎΊγ―ζœ‰ε‘γ«γͺγ‚ŠγΎγ™γ€‚
    θΎΊγŒζ—’ε­˜γε ΄εˆγ€ε±žζ€§γ―η„‘θ¦–γ•γ‚ŒγΎγ™γŒγ€ι‡γΏγ―θΏ½εŠ γ•γ‚ŒγΎγ™γ€‚(ζŒ‡εšγŒγͺγ‘γ‚Œγ°ι‡γΏ=1)" - -msgid "ImportCSVUIVisualPanel2.edges.create-new-nodes-checkbox" -msgstr "ζ¬ θ½γƒŽγƒΌγƒ‰γ‚’η”Ÿζˆ" - -msgid "SearchReplaceUI.regexReplaceCheckBox.text" -msgstr "正規葨現γη½ζ›" - -msgid "SearchReplaceUI.columnsToSearchLabel.text" -msgstr "怜紒/η½ζ›γ™γ‚‹εˆ—" - -msgid "MergeNodeDuplicatesUI.description" -msgstr "ι ‚η‚Ήγι‡θ€‡γ―θ‡ͺε‹•ηš„γ«ζ€œε‡Ίγ•γ‚ŒοΌ‘γ€γεˆ—γ«δ½΅εˆγ•γ‚ŒγΎγ™γ€‚
    ι ‚η‚Ήγι‡θ€‡οΌ‘硄に぀き1぀新規γι ‚η‚ΉγŒεŒθ‰²γ€εŒγ‚΅γ‚€γ‚Ίγ€γγηΎ€γδΈ­γη¬¬οΌ‘ι ‚η‚Ήγδ½η½γ«η”Ÿζˆγ•γ‚ŒγΎγ™γ€‚
    θΎΊγ―ζ–°γŸγͺι ‚η‚Ήγ«ε‰²γ‚Šε½“γ¦γ‚‰γ‚ŒγΎγ™γ€‚
    ε„εˆ—γ―θ‘Œγε€€γ‚’1぀γε€€γ«ζΈ›γ‚‰γ™γ¨γ„う所εšγζˆ¦η•₯を用います。
    ιšŽε±€γ―η„‘θ¦–γ•γ‚ŒγΎγ™γ€‚" - -msgid "MergeNodeDuplicatesUI.noDuplicatesText" -msgstr "ι‡θ€‡γŒθ¦‹γ€γ‹γ‚ŠγΎγ›γ‚“οΌ" - -msgid "MergeNodeDuplicatesUI.duplicateGroupsNumber" -msgstr "{0} 個γι‡θ€‡γŒθ¦‹γ€γ‹γ‚ŠγΎγ—γŸοΌ" - -msgid "MergeNodeDuplicatesUI.deleteMergedNodesText" -msgstr "δ½΅εˆγ—γŸι ‚η‚Ήγ‚’ζΆˆεŽ»" - -msgid "MergeNodeDuplicatesUI.configurationText" -msgstr "ζ§‹ζˆγ™γ‚‹" - -msgid "MergeNodeDuplicatesUI.caseSensitiveText" -msgstr "ε€§ζ–‡ε­—γ¨ε°ζ–‡ε­—γ‚’εŒΊεˆ₯する" - -msgid "MergeNodeDuplicatesUI.baseColumnText" -msgstr "ι‡θ€‡ζ€œηŸ₯γεŸΊη€Žεˆ—:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/org-gephi-datalab-plugin-manipulators-general-ui.pot b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/org-gephi-datalab-plugin-manipulators-general-ui.pot deleted file mode 100644 index dabd4b9085..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/org-gephi-datalab-plugin-manipulators-general-ui.pot +++ /dev/null @@ -1,222 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "ClearEdgesUI.deleteDirectedCheckbox.text" -msgstr "Delete directed edges" - -msgid "ClearEdgesUI.descriptionLabel.text" -msgstr "Edge types to delete:" - -msgid "ClearEdgesUI.deleteUndirectedChekbox.text" -msgstr "Delete undirected edges" - -msgid "AddEdgeToGraphUI.descriptionLabel.text" -msgstr "Select the new edge type, source and target nodes:" - -msgid "AddEdgeToGraphUI.directedRadioButton.text" -msgstr "Directed" - -msgid "AddEdgeToGraphUI.undirectedRadioButton.text" -msgstr "Undirected" - -msgid "AddEdgeToGraphUI.sourceNodeLabel.text" -msgstr "Source node:" - -msgid "AddEdgeToGraphUI.targetNodeLabel.text" -msgstr "Target node:" - -msgid "SearchReplaceUI.searchLabel.text" -msgstr "Search:" - -msgid "SearchReplaceUI.replaceLabel.text" -msgstr "Replace with:" - -msgid "SearchReplaceUI.matchWholeValueCheckBox.text" -msgstr "Only match whole value" - -msgid "SearchReplaceUI.caseSensitiveCheckBox.text" -msgstr "Case sensitive" - -msgid "SearchReplaceUI.normalSearchModeRadioButton.text" -msgstr "Normal search" - -msgid "SearchReplaceUI.regexSearchModeRadioButton.text" -msgstr "Regular expression search" - -msgid "SearchReplaceUI.findNextButton.text" -msgstr "Find next" - -msgid "SearchReplaceUI.replaceButton.text" -msgstr "Replace" - -msgid "SearchReplaceUI.replaceAllButton.text" -msgstr "Replace all" - -msgid "SearchReplaceUI.descriptionLabel.text.nodes" -msgstr "Searching on nodes table" - -msgid "SearchReplaceUI.descriptionLabel.text.edges" -msgstr "Searching on edges table" - -msgid "SearchReplaceUI.resultLabel.text" -msgstr "Search match result:" - -msgid "SearchReplaceUI.resultText.contentType" -msgstr "text/html" - -msgid "SearchReplaceUI.not.found" -msgstr "Could not find \"{0}\"" - -msgid "SearchReplaceUI.regexReplacementError" -msgstr "The replacement string is not correct for the regular expression" - -msgid "SearchReplaceUI.dialog.title.error" -msgstr "Error" - -msgid "SearchReplaceUI.replacements.count.message" -msgstr "{0} ocurrences were replaced" - -msgid "SearchReplaceUI.column" -msgstr "Column: ''{0}''" - -msgid "SearchReplaceUI.allColumns" -msgstr "--All columns--" - -msgid "ImportCSVUIWizardAction.name" -msgstr "Import spreadsheet" - -msgid "ImportCSVUIVisualPanel1.name" -msgstr "General options" - -msgid "ImportCSVUIVisualPanel1.comma" -msgstr "Comma" - -msgid "ImportCSVUIVisualPanel1.semicolon" -msgstr "Semicolon" - -msgid "ImportCSVUIVisualPanel1.space" -msgstr "Space" - -msgid "ImportCSVUIVisualPanel1.tab" -msgstr "Tab" - -msgid "ImportCSVUIVisualPanel1.nodes-table" -msgstr "Nodes table" - -msgid "ImportCSVUIVisualPanel1.edges-table" -msgstr "Edges table" - -msgid "ImportCSVUIVisualPanel1.filechooser.csvDescription" -msgstr "CSV" - -msgid "ImportCSVUIVisualPanel1.tableLabel.text" -msgstr "As table:" - -msgid "ImportCSVUIVisualPanel1.fileButton.text" -msgstr "..." - -msgid "ImportCSVUIVisualPanel1.separatorLabel.text" -msgstr "Separator:" - -msgid "ImportCSVUIVisualPanel1.descriptionLabel.text" -msgstr "Choose a CSV file to import:" - -msgid "ImportCSVUIVisualPanel1.previewLabel.text" -msgstr "Preview:" - -msgid "ImportCSVUIVisualPanel1.charsetLabel.text" -msgstr "Charset:" - -msgid "ImportCSVUIVisualPanel1.validation.invalid-file" -msgstr "Invalid CSV file" - -msgid "ImportCSVUIVisualPanel1.validation.no-columns" -msgstr "The file does not have any column" - -msgid "ImportCSVUIVisualPanel1.validation.repeated-columns" -msgstr "The file can't have repeated column names" - -msgid "ImportCSVUIVisualPanel1.validation.error" -msgstr "Error" - -msgid "ImportCSVUIVisualPanel1.validation.file-permissions-error" -msgstr "" -"An error happened when reading the file. Make sure the file is not in use " -"and you have permissions." - -msgid "ImportCSVUIVisualPanel1.validation.edges.no-source-target-columns" -msgstr "Edges table needs a 'Source' and 'Target' column with nodes ids." - -msgid "ImportCSVUIVisualPanel2.name" -msgstr "Import settings" - -msgid "ImportCSVUIVisualPanel2.columnsLabel.text" -msgstr "Imported columns:" - -msgid "ImportCSVUIVisualPanel2.nodes.description" -msgstr "" -"New columns are created with the specified type.
    A generated id " -"is assigned if missing.
    Unless the option 'Force nodes to be created as " -"new ones' is enabled, already existing nodes will be updated." - -msgid "ImportCSVUIVisualPanel2.nodes.assign-ids-checkbox" -msgstr "Force nodes to be created as new ones" - -msgid "ImportCSVUIVisualPanel2.edges.description" -msgstr "" -"New columns are created with the specified type.
    A generated id " -"is assigned if missing or existing.
    Edges need 'Source' and 'Target' " -"columns with the id of the source and target nodes. If any is not provided " -"for a row, it will be ignored.
    If no 'Type' column is provided, all " -"edges will be directed.
    If an edge already exists, attributes will be " -"ignored, but their weights will be added (weight=1 if not specified)" - -msgid "ImportCSVUIVisualPanel2.edges.create-new-nodes-checkbox" -msgstr "Create missing nodes" - -msgid "SearchReplaceUI.regexReplaceCheckBox.text" -msgstr "Regular expression replacement" - -msgid "SearchReplaceUI.columnsToSearchLabel.text" -msgstr "Columns to search/replace:" - -msgid "MergeNodeDuplicatesUI.description" -msgstr "" -"Node duplicates are automatically detected and merged based on a " -"column.
    For each group of node duplicates, one new node with the same " -"color, size and position of the first node in the group is created.
    Edges are assigned to the new node.
    Each column uses the given " -"strategy to reduce the rows values to one value.
    Hierarchy is ignored." - -msgid "MergeNodeDuplicatesUI.noDuplicatesText" -msgstr "No duplicates found!" - -msgid "MergeNodeDuplicatesUI.duplicateGroupsNumber" -msgstr "{0} duplicates found!" - -msgid "MergeNodeDuplicatesUI.deleteMergedNodesText" -msgstr "Delete merged nodes" - -msgid "MergeNodeDuplicatesUI.configurationText" -msgstr "Configure" - -msgid "MergeNodeDuplicatesUI.caseSensitiveText" -msgstr "Case sensitive" - -msgid "MergeNodeDuplicatesUI.baseColumnText" -msgstr "Base column to detect duplicates:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/pt_BR.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/pt_BR.po deleted file mode 100644 index 484a959ed9..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/pt_BR.po +++ /dev/null @@ -1,209 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -# CΓ©lio Faria Jr. , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-17 13:07+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "ClearEdgesUI.deleteDirectedCheckbox.text" -msgstr "Excluir arestas dirigidas" - -msgid "ClearEdgesUI.descriptionLabel.text" -msgstr "Tipos de arestas a excluir:" - -msgid "ClearEdgesUI.deleteUndirectedChekbox.text" -msgstr "Excluir arestas nΓ£o dirigidas" - -msgid "AddEdgeToGraphUI.descriptionLabel.text" -msgstr "Selecione um tipo para a nova aresta e os nΓ³s origem e destino:" - -msgid "AddEdgeToGraphUI.directedRadioButton.text" -msgstr "Dirigida" - -msgid "AddEdgeToGraphUI.undirectedRadioButton.text" -msgstr "NΓ£o dirigida" - -msgid "AddEdgeToGraphUI.sourceNodeLabel.text" -msgstr "NΓ³ origem:" - -msgid "AddEdgeToGraphUI.targetNodeLabel.text" -msgstr "NΓ³ destino:" - -msgid "SearchReplaceUI.searchLabel.text" -msgstr "Busca:" - -msgid "SearchReplaceUI.replaceLabel.text" -msgstr "Substituir por:" - -msgid "SearchReplaceUI.matchWholeValueCheckBox.text" -msgstr "Somente valores completos" - -msgid "SearchReplaceUI.caseSensitiveCheckBox.text" -msgstr "MaiΓΊsculas e minΓΊsculas" - -msgid "SearchReplaceUI.normalSearchModeRadioButton.text" -msgstr "Busca normal" - -msgid "SearchReplaceUI.regexSearchModeRadioButton.text" -msgstr "Busca com expressΓ£o regular" - -msgid "SearchReplaceUI.findNextButton.text" -msgstr "Localizar prΓ³xima" - -msgid "SearchReplaceUI.replaceButton.text" -msgstr "Substituir" - -msgid "SearchReplaceUI.replaceAllButton.text" -msgstr "Substituir todos" - -msgid "SearchReplaceUI.descriptionLabel.text.nodes" -msgstr "Buscando na tabela de nΓ³s" - -msgid "SearchReplaceUI.descriptionLabel.text.edges" -msgstr "Buscando na tabela de arestas" - -msgid "SearchReplaceUI.resultLabel.text" -msgstr "Resultado da busca:" - -msgid "SearchReplaceUI.resultText.contentType" -msgstr "text/html" - -msgid "SearchReplaceUI.not.found" -msgstr "NΓ£o foi possΓ­vel encontrar \"{0}\"" - -msgid "SearchReplaceUI.regexReplacementError" -msgstr "O texto de substituiΓ§Γ£o nΓ£o Γ© correto para a expressΓ£o regular" - -msgid "SearchReplaceUI.dialog.title.error" -msgstr "Erro" - -msgid "SearchReplaceUI.replacements.count.message" -msgstr "{0} ocorrΓͺncias foram substituΓ­das" - -msgid "SearchReplaceUI.column" -msgstr "Coluna: ''{0}''" - -msgid "SearchReplaceUI.allColumns" -msgstr "--Todas as colunas--" - -msgid "ImportCSVUIWizardAction.name" -msgstr "Importar planilha" - -msgid "ImportCSVUIVisualPanel1.name" -msgstr "OpΓ§Γ΅es gerais" - -msgid "ImportCSVUIVisualPanel1.comma" -msgstr "VΓ­rgula" - -msgid "ImportCSVUIVisualPanel1.semicolon" -msgstr "Ponto e vΓ­rgula" - -msgid "ImportCSVUIVisualPanel1.space" -msgstr "EspaΓ§o" - -msgid "ImportCSVUIVisualPanel1.tab" -msgstr "TabulaΓ§Γ£o" - -msgid "ImportCSVUIVisualPanel1.nodes-table" -msgstr "Tabela de nΓ³s" - -msgid "ImportCSVUIVisualPanel1.edges-table" -msgstr "Tabela de arestas" - -msgid "ImportCSVUIVisualPanel1.filechooser.csvDescription" -msgstr "CSV" - -msgid "ImportCSVUIVisualPanel1.tableLabel.text" -msgstr "Tabela:" - -msgid "ImportCSVUIVisualPanel1.fileButton.text" -msgstr "..." - -msgid "ImportCSVUIVisualPanel1.separatorLabel.text" -msgstr "Separador:" - -msgid "ImportCSVUIVisualPanel1.descriptionLabel.text" -msgstr "Escolha um arquivo CSV para importar:" - -msgid "ImportCSVUIVisualPanel1.previewLabel.text" -msgstr "VisualizaΓ§Γ£o:" - -msgid "ImportCSVUIVisualPanel1.charsetLabel.text" -msgstr "CodificaΓ§Γ£o de caracteres:" - -msgid "ImportCSVUIVisualPanel1.validation.invalid-file" -msgstr "Arquivo CSV invΓ‘lido" - -msgid "ImportCSVUIVisualPanel1.validation.no-columns" -msgstr "O arquivo nΓ£o contΓ©m nenhuma coluna" - -msgid "ImportCSVUIVisualPanel1.validation.repeated-columns" -msgstr "O arquivo nΓ£o pode conter colunas com nomes repetidos" - -msgid "ImportCSVUIVisualPanel1.validation.error" -msgstr "Erro" - -msgid "ImportCSVUIVisualPanel1.validation.file-permissions-error" -msgstr "Um erro ocorreu ao ler o arquivo. Verifique se o arquivo nΓ£o estΓ‘ em uso e vocΓͺ tem permissΓ΅es." - -msgid "ImportCSVUIVisualPanel1.validation.edges.no-source-target-columns" -msgstr "A tabela de arestas precisa conter colunas chamadas 'Source' e 'Target' (contendo os ids dos nΓ³s origem e destino)." - -msgid "ImportCSVUIVisualPanel2.name" -msgstr "ConfiguraΓ§Γ΅es de importaΓ§Γ£o" - -msgid "ImportCSVUIVisualPanel2.columnsLabel.text" -msgstr "Colunas importadas:" - -msgid "ImportCSVUIVisualPanel2.nodes.description" -msgstr "Novas colunas serΓ£o criadas com o tipo especificado.
    Se o id de um nΓ³ nΓ£o for especificado, um id gerado serΓ‘ atribuΓ­do a ele.
    A menos que a opΓ§Γ£o 'ForΓ§ar nΓ³s a serem criados como novos' esteja habilitada, os dados dos nΓ³s jΓ‘ existentes serΓ£o atualizados com os dados do arquivo CSV." - -msgid "ImportCSVUIVisualPanel2.nodes.assign-ids-checkbox" -msgstr "ForΓ§ar nΓ³s a serem criados como novos" - -msgid "ImportCSVUIVisualPanel2.edges.description" -msgstr "Novas colunas serΓ£o criadas com o tipo especificado.
    Se o id de uma aresta nΓ£o for especificado, um id gerado serΓ‘ atribuΓ­do a ela.
    A tabela de arestas precisa conter colunas chamadas 'Source' e 'Target' com os ids dos nΓ³s origem e destino. Se qualquer dos id nΓ£o forem fornecidos em uma determinada linha, ela serΓ‘ ignorada.
    Se nΓ£o existir uma coluna 'Type' no arquivo, todas as arestas serΓ£o dirigidas.
    Se uma aresta jΓ‘ existir, seus atributos serΓ£o ignorados, mas seu peso serΓ‘ alterado (caso o peso nΓ£o seja especificado, serΓ‘ utilizado peso=1)" - -msgid "ImportCSVUIVisualPanel2.edges.create-new-nodes-checkbox" -msgstr "Criar nΓ³s inexistentes" - -msgid "SearchReplaceUI.regexReplaceCheckBox.text" -msgstr "Substituir usando expressΓ£o regular" - -msgid "SearchReplaceUI.columnsToSearchLabel.text" -msgstr "Colunas para buscar/substituir:" - -msgid "MergeNodeDuplicatesUI.description" -msgstr "NΓ³s duplicados sΓ£o automaticamente detectados e mesclados baseados no valor de uma coluna.
    Para cada grupos de nΓ³s duplicados, serΓ‘ criado um novo nΓ³ com a mesma cor, tamanho e posiΓ§Γ£o do primeiro nΓ³ do grupo.
    As arestas serΓ£o atribuΓ­das ao novo nΓ³.
    Cada coluna usarΓ‘ a estratΓ©gia escolhida para reduzir os valores das linhas a um valor apenas.
    A hierarquia serΓ‘ ignorada." - -msgid "MergeNodeDuplicatesUI.noDuplicatesText" -msgstr "Nenhuma duplicaΓ§Γ£o encontrada!" - -msgid "MergeNodeDuplicatesUI.duplicateGroupsNumber" -msgstr "{0} duplicaΓ§Γ΅es encontradas!" - -msgid "MergeNodeDuplicatesUI.deleteMergedNodesText" -msgstr "Remover nΓ³s duplicados" - -msgid "MergeNodeDuplicatesUI.configurationText" -msgstr "Configurar" - -msgid "MergeNodeDuplicatesUI.caseSensitiveText" -msgstr "Diferenciar maiΓΊsculas e minΓΊsculas" - -msgid "MergeNodeDuplicatesUI.baseColumnText" -msgstr "Coluna-base para a detecΓ§Γ£o de duplicatas" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/ru.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/ru.po deleted file mode 100644 index 796c9fab62..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/ru.po +++ /dev/null @@ -1,210 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -# FIRST AUTHOR , 2011. -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-31 12:51+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "ClearEdgesUI.deleteDirectedCheckbox.text" -msgstr "Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ€Ρ‘Π±Ρ€Π°" - -msgid "ClearEdgesUI.descriptionLabel.text" -msgstr "Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ‚ΠΈΠΏΡ‹ Ρ€Ρ‘Π±Π΅Ρ€:" - -msgid "ClearEdgesUI.deleteUndirectedChekbox.text" -msgstr "Π£Π΄Π°Π»ΠΈΡ‚ΡŒ Π½Π΅ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ Ρ€Ρ‘Π±Ρ€Π°" - -msgid "AddEdgeToGraphUI.descriptionLabel.text" -msgstr "Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ‚ΠΈΠΏ Π½ΠΎΠ²ΠΎΠ³ΠΎ Ρ€Π΅Π±Ρ€Π°, Π΅Π³ΠΎ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ ΡƒΠ·Π»Ρ‹:" - -msgid "AddEdgeToGraphUI.directedRadioButton.text" -msgstr "ΠžΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅" - -msgid "AddEdgeToGraphUI.undirectedRadioButton.text" -msgstr "НСориСнтированноС" - -msgid "AddEdgeToGraphUI.sourceNodeLabel.text" -msgstr "ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΠ·Π΅Π»:" - -msgid "AddEdgeToGraphUI.targetNodeLabel.text" -msgstr "ΠšΠΎΠ½Π΅Ρ‡Π½Ρ‹ΠΉ ΡƒΠ·Π΅Π»:" - -msgid "SearchReplaceUI.searchLabel.text" -msgstr "Поиск:" - -msgid "SearchReplaceUI.replaceLabel.text" -msgstr "Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π½Π°:" - -msgid "SearchReplaceUI.matchWholeValueCheckBox.text" -msgstr "Π˜ΡΠΊΠ°Ρ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹Π΅ совпадСния" - -msgid "SearchReplaceUI.caseSensitiveCheckBox.text" -msgstr "Π£Ρ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ рСгистр" - -msgid "SearchReplaceUI.normalSearchModeRadioButton.text" -msgstr "ΠžΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ поиск" - -msgid "SearchReplaceUI.regexSearchModeRadioButton.text" -msgstr "Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ рСгулярныС выраТСния" - -msgid "SearchReplaceUI.findNextButton.text" -msgstr "Найти ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅" - -msgid "SearchReplaceUI.replaceButton.text" -msgstr "Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ" - -msgid "SearchReplaceUI.replaceAllButton.text" -msgstr "Π—Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ всС" - -msgid "SearchReplaceUI.descriptionLabel.text.nodes" -msgstr "Π˜ΡΠΊΠ°Ρ‚ΡŒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΡƒΠ·Π»ΠΎΠ²" - -msgid "SearchReplaceUI.descriptionLabel.text.edges" -msgstr "Π˜ΡΠΊΠ°Ρ‚ΡŒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ Ρ€Ρ‘Π±Π΅Ρ€" - -msgid "SearchReplaceUI.resultLabel.text" -msgstr "Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ поиска:" - -msgid "SearchReplaceUI.resultText.contentType" -msgstr "text/html" - -msgid "SearchReplaceUI.not.found" -msgstr "НС ΠΌΠΎΠ³Ρƒ Π½Π°ΠΉΡ‚ΠΈ \"{0}\"" - -msgid "SearchReplaceUI.regexReplacementError" -msgstr "Π‘Ρ‚Ρ€ΠΎΠΊΠ° Π·Π°ΠΌΠ΅Π½Ρ‹ Π½Π΅ являСтся ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΠΉ" - -msgid "SearchReplaceUI.dialog.title.error" -msgstr "Ошибка" - -msgid "SearchReplaceUI.replacements.count.message" -msgstr "{0} Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠΉ Π±Ρ‹Π»ΠΎ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ" - -msgid "SearchReplaceUI.column" -msgstr "Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ†: ''{0}''" - -msgid "SearchReplaceUI.allColumns" -msgstr "-- ВсС столбцы--" - -msgid "ImportCSVUIWizardAction.name" -msgstr "Π˜ΠΌΠΏΠΎΡ€Ρ‚ CSV Ρ„Π°ΠΉΠ»Π° Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ" - -msgid "ImportCSVUIVisualPanel1.name" -msgstr "ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΎΠΏΡ†ΠΈΠΈ" - -msgid "ImportCSVUIVisualPanel1.comma" -msgstr "запятая" - -msgid "ImportCSVUIVisualPanel1.semicolon" -msgstr "Ρ‚ΠΎΡ‡ΠΊΠ° с запятой" - -msgid "ImportCSVUIVisualPanel1.space" -msgstr "ΠŸΡ€ΠΎΠ±Π΅Π»" - -msgid "ImportCSVUIVisualPanel1.tab" -msgstr "Вабуляция" - -msgid "ImportCSVUIVisualPanel1.nodes-table" -msgstr "Π’Π°Π±Π»ΠΈΡ†Π° ΡƒΠ·Π»ΠΎΠ²" - -msgid "ImportCSVUIVisualPanel1.edges-table" -msgstr "Π’Π°Π±Π»ΠΈΡ†Π° Ρ€Ρ‘Π±Π΅Ρ€" - -msgid "ImportCSVUIVisualPanel1.filechooser.csvDescription" -msgstr "ImportCSVUIVisualPanel1.filechooser.csvDescription" - -msgid "ImportCSVUIVisualPanel1.tableLabel.text" -msgstr "Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ‚Π°Π»ΠΈΡ†Ρƒ:" - -msgid "ImportCSVUIVisualPanel1.fileButton.text" -msgstr "ImportCSVUIVisualPanel1.fileButton.text" - -msgid "ImportCSVUIVisualPanel1.separatorLabel.text" -msgstr "Π Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ:" - -msgid "ImportCSVUIVisualPanel1.descriptionLabel.text" -msgstr "Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ CSV Ρ„Π°ΠΉΠ» для ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°" - -msgid "ImportCSVUIVisualPanel1.previewLabel.text" -msgstr "ΠŸΡ€Π΅Π²ΡŒΡŽ:" - -msgid "ImportCSVUIVisualPanel1.charsetLabel.text" -msgstr "ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°:" - -msgid "ImportCSVUIVisualPanel1.validation.invalid-file" -msgstr "Ошибка Π² CSV Ρ„Π°ΠΉΠ»Π΅" - -msgid "ImportCSVUIVisualPanel1.validation.no-columns" -msgstr "Π’ Ρ„Π°ΠΉΠ»Π΅ Π½Π΅ содСрТится Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ столбца" - -msgid "ImportCSVUIVisualPanel1.validation.repeated-columns" -msgstr "Π’ Ρ„Π°ΠΉΠ»Π΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ столбцов с ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠΌΠ΅Π½Π°ΠΌΠΈ" - -msgid "ImportCSVUIVisualPanel1.validation.error" -msgstr "Ошибка" - -msgid "ImportCSVUIVisualPanel1.validation.file-permissions-error" -msgstr "Π’ΠΎ врСмя чтСния Ρ„Π°ΠΉΠ»Π° ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка. Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» \r\nΠ½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ ΠΈ Ρƒ вас Π΅ΡΡ‚ΡŒ Π½Π° Π½Π΅Π³ΠΎ ΠΏΡ€Π°Π²Π° доступа" - -msgid "ImportCSVUIVisualPanel1.validation.edges.no-source-target-columns" -msgstr "Π’ Ρ‚Π°Π±Π»ΠΈΡ†Π΅ с Ρ€Ρ‘Π±Ρ€Π°ΠΌΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ 'Source' ΠΈ 'Target', содСрТащиС id ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΡƒΠ·Π»ΠΎΠ²" - -msgid "ImportCSVUIVisualPanel2.name" -msgstr "Настройки ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°" - -msgid "ImportCSVUIVisualPanel2.columnsLabel.text" -msgstr "Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ столбцы для ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°:" - -msgid "ImportCSVUIVisualPanel2.nodes.description" -msgstr "ВсС Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ столбцы Π±ΡƒΠ΄ΡƒΡ‚ созданы ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ.
    Если для Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π½Π΅ Π·Π°Π΄Π°Π½ id, Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ присвоСн автоматичСски
    Если Π½Π΅ стоит Π³Π°Π»ΠΎΡ‡ΠΊΠΈ Π½Π°ΠΏΡ€ΠΎΡ‚ΠΈΠ² 'ΠŸΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΡ‘ id Π²Π΅Ρ€ΡˆΠΈΠ½Π΅, Ссли ΠΎΠ½Π° ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅', Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ‚ΡŒΡΡ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ Π²Π΅Ρ€ΡˆΠΈΠ½Π°.\"" - -msgid "ImportCSVUIVisualPanel2.nodes.assign-ids-checkbox" -msgstr "ΠŸΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ id Π²Π΅Ρ€ΡˆΠΈΠ½Π΅, Ссли ΠΎΠ½Π° ΡƒΠΆΠ΅ Π΅ΡΡ‚ΡŒ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅" - -msgid "ImportCSVUIVisualPanel2.edges.description" -msgstr "ВсС Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ столбцы Π±ΡƒΠ΄ΡƒΡ‚ созданы ΠΈ ΠΈΠΌΠ΅Ρ‚ΡŒ Π·Π°Π΄Π°Π½Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ.
    \r\nЕсли Ρƒ Ρ€Π΅Π±Ρ€Π° Π½Π΅ Π·Π°Π΄Π°Π½ id, Ρ‚ΠΎ ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ присвоСн автоматичСски.
    \r\nДля создания Ρ€Π΅Π±Ρ€Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ столбцы 'Source' ΠΈ 'Target', содСрТащиС id ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π²Π΅Ρ€ΡˆΠΈΠ½. Если для ΠΊΠ°ΠΊΠΎΠ³ΠΎ-Ρ‚ΠΎ ΠΈΠ· Ρ€Ρ‘Π±Π΅Ρ€ Π½Π΅ ΡƒΠΊΠ°Π·Π°Π½Ρ‹ эти значСния, Ρ‚ΠΎ ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ.
    \r\nЕсли Π½Π΅Ρ‚ столбца 'Type', Ρ‚ΠΎ всС Ρ€Ρ‘Π±Ρ€Π° Π±ΡƒΠ΄ΡƒΡ‚ созданы ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ.
    \r\nЕсли ΠΊΠ°ΠΊΠΎΠ΅-Ρ‚ΠΎ ΠΈΠ· Ρ€Ρ‘Π±Π΅Ρ€ ΡƒΠΆΠ΅ сущСствуСт ΠΈΠ»ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ создано, Ρ‚ΠΎ ΠΎΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ, Π½ΠΎΠ²Ρ‹Π΅ Π΄Π°Π½Π½Ρ‹Π΅ Π½Π΅ Π±ΡƒΠ΄ΡƒΡ‚ записаны." - -msgid "ImportCSVUIVisualPanel2.edges.create-new-nodes-checkbox" -msgstr "Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ€ΡˆΠΈΠ½Ρƒ, Ссли ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΉ ΠΈΠ»ΠΈ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΉ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹ Π³Ρ€Π°Ρ„Π° Π½Π΅ сущСствуСт" - -msgid "SearchReplaceUI.regexReplaceCheckBox.text" -msgstr "Π—Π°ΠΌΠ΅Π½Π° рСгулярным Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ" - -msgid "SearchReplaceUI.columnsToSearchLabel.text" -msgstr "Π‘Ρ‚ΠΎΠ»Π±Ρ†Ρ‹ для поиска/Π·Π°ΠΌΠ΅Π½Ρ‹" - -msgid "MergeNodeDuplicatesUI.description" -msgstr "Π”ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹ ΡƒΠ·Π»ΠΎΠ² автоматичСски Π²Ρ‹ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΏΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ ΠΈ ΡΠΊΠ»Π΅ΠΈΠ²Π°ΡŽΡ‚ΡΡ.
    Для ΠΊΠ°ΠΆΠ΄ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² создаСтся Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΠ·Π΅Π» с Ρ†Π²Π΅Ρ‚ΠΎΠΌ, Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠ΅ΠΉ, взятыми Ρƒ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° Π² Π³Ρ€ΡƒΠΏΠΏΠ΅.
    Π Ρ‘Π±Ρ€Π° ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡Π°ΡŽΡ‚ΡΡ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΠ·Π΅Π».
    Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ игнорируСтся." - -msgid "MergeNodeDuplicatesUI.noDuplicatesText" -msgstr "НС ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π½Π°ΠΉΡ‚ΠΈ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚Ρ‹!" - -msgid "MergeNodeDuplicatesUI.duplicateGroupsNumber" -msgstr "{0} Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ² Π½Π°ΠΉΠ΄Π΅Π½ΠΎ!" - -msgid "MergeNodeDuplicatesUI.deleteMergedNodesText" -msgstr "Π£Π΄Π°Π»ΠΈΡ‚ΡŒ склССныС Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹" - -msgid "MergeNodeDuplicatesUI.configurationText" -msgstr "ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ" - -msgid "MergeNodeDuplicatesUI.caseSensitiveText" -msgstr "Π£Ρ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ рСгистр символов" - -msgid "MergeNodeDuplicatesUI.baseColumnText" -msgstr "Основная ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° для поиска Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ΠΎΠ²:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/zh_CN.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/zh_CN.po deleted file mode 100644 index 93c908c09f..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/ui/zh_CN.po +++ /dev/null @@ -1,208 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-15 09:13+0000\n" -"Last-Translator: Xi-Nian Zuo \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "ClearEdgesUI.deleteDirectedCheckbox.text" -msgstr "εˆ ι™€ζœ‰ε‘θΎΉ" - -msgid "ClearEdgesUI.descriptionLabel.text" -msgstr "θ¦εˆ ι™€ηš„θΎΉηš„η±»εž‹οΌš" - -msgid "ClearEdgesUI.deleteUndirectedChekbox.text" -msgstr "εˆ ι™€ζ— ε‘θΎΉ" - -msgid "AddEdgeToGraphUI.descriptionLabel.text" -msgstr "ι€‰ζ‹©ζ–°ηš„θΎΉηš„η±»εž‹οΌŒζΊθŠ‚η‚Ήε’Œη›ζ ‡θŠ‚η‚ΉοΌš" - -msgid "AddEdgeToGraphUI.directedRadioButton.text" -msgstr "ζœ‰ε‘ηš„" - -msgid "AddEdgeToGraphUI.undirectedRadioButton.text" -msgstr "ζ— ε‘ηš„" - -msgid "AddEdgeToGraphUI.sourceNodeLabel.text" -msgstr "ζΊθŠ‚η‚ΉοΌš" - -msgid "AddEdgeToGraphUI.targetNodeLabel.text" -msgstr "η›ζ ‡θŠ‚η‚ΉοΌš" - -msgid "SearchReplaceUI.searchLabel.text" -msgstr "搜紒:" - -msgid "SearchReplaceUI.replaceLabel.text" -msgstr "ζ›Ώζ’δΈΊοΌš" - -msgid "SearchReplaceUI.matchWholeValueCheckBox.text" -msgstr "δ»…εŒΉι…ζ‰€ζœ‰ζ•°ε€Ό" - -msgid "SearchReplaceUI.caseSensitiveCheckBox.text" -msgstr "εŒΊεˆ†ε€§ε°ε†™" - -msgid "SearchReplaceUI.normalSearchModeRadioButton.text" -msgstr "ζ™ι€šζœη΄’" - -msgid "SearchReplaceUI.regexSearchModeRadioButton.text" -msgstr "ζ”―ζŒζ­£εˆ™θ‘¨θΎΎεΌηš„ζœη΄’" - -msgid "SearchReplaceUI.findNextButton.text" -msgstr "ζŸ₯ζ‰ΎδΈ‹δΈ€δΈͺ" - -msgid "SearchReplaceUI.replaceButton.text" -msgstr "替捒" - -msgid "SearchReplaceUI.replaceAllButton.text" -msgstr "ζ›Ώζ’ζ‰€ζœ‰" - -msgid "SearchReplaceUI.descriptionLabel.text.nodes" -msgstr "ζœη΄’θŠ‚η‚Ήθ‘¨" - -msgid "SearchReplaceUI.descriptionLabel.text.edges" -msgstr "ζœη΄’θΎΉεˆ—θ‘¨" - -msgid "SearchReplaceUI.resultLabel.text" -msgstr "ζœη΄’εŒΉι…η»“ζžœοΌš" - -msgid "SearchReplaceUI.resultText.contentType" -msgstr "ζ–‡ζœ¬ηΌ–θΎ‘ε™¨" - -msgid "SearchReplaceUI.not.found" -msgstr "ζ‰ΎδΈεˆ°β€œ{0}”" - -msgid "SearchReplaceUI.regexReplacementError" -msgstr "θ¦ζ›Ώζ’ηš„ε­—η¬¦δΈŽζ­£εˆ™θ‘¨θΎΎεΌδΈεŒΉι…" - -msgid "SearchReplaceUI.dialog.title.error" -msgstr "ι”™θ――" - -msgid "SearchReplaceUI.replacements.count.message" -msgstr "{0}蒫替捒" - -msgid "SearchReplaceUI.column" -msgstr "εˆ—οΌšβ€œ{0}”" - -msgid "SearchReplaceUI.allColumns" -msgstr "--ζ‰€ζœ‰εˆ—--" - -msgid "ImportCSVUIWizardAction.name" -msgstr "θΎ“ε…₯甡子葨格" - -msgid "ImportCSVUIVisualPanel1.name" -msgstr "常规选鑹" - -msgid "ImportCSVUIVisualPanel1.comma" -msgstr "逗号" - -msgid "ImportCSVUIVisualPanel1.semicolon" -msgstr "εˆ†ε·" - -msgid "ImportCSVUIVisualPanel1.space" -msgstr "η©Ίζ Ό" - -msgid "ImportCSVUIVisualPanel1.tab" -msgstr "刢葨符Tab" - -msgid "ImportCSVUIVisualPanel1.nodes-table" -msgstr "θŠ‚η‚Ήθ‘¨ζ Ό" - -msgid "ImportCSVUIVisualPanel1.edges-table" -msgstr "边葨格" - -msgid "ImportCSVUIVisualPanel1.filechooser.csvDescription" -msgstr "CSV" - -msgid "ImportCSVUIVisualPanel1.tableLabel.text" -msgstr "ε¦‚θ‘¨ζ ΌοΌš" - -msgid "ImportCSVUIVisualPanel1.fileButton.text" -msgstr "……" - -msgid "ImportCSVUIVisualPanel1.separatorLabel.text" -msgstr "εˆ†ιš”η¬¦οΌš" - -msgid "ImportCSVUIVisualPanel1.descriptionLabel.text" -msgstr "选择一δΈͺCSVζ–‡δ»ΆθΎ“ε…₯:" - -msgid "ImportCSVUIVisualPanel1.previewLabel.text" -msgstr "ι’„θ§ˆοΌš" - -msgid "ImportCSVUIVisualPanel1.charsetLabel.text" -msgstr "格式:" - -msgid "ImportCSVUIVisualPanel1.validation.invalid-file" -msgstr "ζ— ζ•ˆηš„CSVζ–‡δ»Ά" - -msgid "ImportCSVUIVisualPanel1.validation.no-columns" -msgstr "ζ–‡δ»ΆδΈεŒ…ε«δ»»δ½•εˆ—" - -msgid "ImportCSVUIVisualPanel1.validation.repeated-columns" -msgstr "ζ–‡δ»ΆδΈεŒ…ε«ι‡ε€ηš„εε­—" - -msgid "ImportCSVUIVisualPanel1.validation.error" -msgstr "ι”™θ――" - -msgid "ImportCSVUIVisualPanel1.validation.file-permissions-error" -msgstr "θ―»ζ–‡δ»Άζ—ΆζŠ₯错。η‘θ€ζ–‡δ»Άζ˜―ε¦ζ­£εœ¨θ’«δ½Ώη”¨οΌŒεΉΆη‘δΏδ½ ζœ‰ζƒι™γ€‚" - -msgid "ImportCSVUIVisualPanel1.validation.edges.no-source-target-columns" -msgstr "θΎΉθ‘¨ζ Όιœ€θ¦δΈ€δΈͺεŒ…ε«θŠ‚η‚Ήζ ‡ε·ηš„β€œζΊβ€ε’Œβ€œη›ζ ‡β€εˆ—。" - -msgid "ImportCSVUIVisualPanel2.name" -msgstr "θΎ“ε…₯θΎη½" - -msgid "ImportCSVUIVisualPanel2.columnsLabel.text" -msgstr "θΎ“ε…₯εˆ—οΌš" - -msgid "ImportCSVUIVisualPanel2.nodes.description" -msgstr "εˆ›ε»Ίζ–°ηš„η‰ΉζŠη§η±»ηš„εˆ—γ€‚
    ε¦‚ζžœδΈ’ε€±ζ ‡ε·οΌŒεˆ†ι…δΈ€δΈͺζ–°ηš„ζ ‡ε·γ€‚
    ι™€ιžζΏ€ζ΄»ι€‰ι‘Ήβ€œεΌΊεˆΆεˆ›ε»Ίζ–°ηš„θŠ‚η‚Ήβ€οΌŒε¦εˆ™δΌšδΈδΌšζ›΄ζ–°ε­˜εœ¨ηš„θŠ‚η‚Ήγ€‚" - -msgid "ImportCSVUIVisualPanel2.nodes.assign-ids-checkbox" -msgstr "εΌΊεˆΆεˆ›ε»Ίζ–°ηš„θŠ‚η‚Ή" - -msgid "ImportCSVUIVisualPanel2.edges.description" -msgstr "εˆ›ε»Ίζ–°ηš„η‰ΉζŠη§η±»ηš„εˆ—γ€‚
    ε¦‚ζžœδΈ’ε€±ζ ‡ε·οΌŒεˆ†ι…δΈ€δΈͺζ–°ηš„ζ ‡ε·γ€‚
    θΎΉιœ€θ¦ε‘«ε†™δΊ†ζΊθŠ‚η‚Ήζ ‡ε·ε’Œη›ζ ‡θŠ‚η‚Ήζ ‡ε·ηš„β€œζΊβ€ε’Œβ€œη›ζ ‡β€εˆ—γ€‚ε¦‚ζžœδΈζ˜―δ»₯θ‘Œηš„ε½’εΌζδΎ›οΌŒε°†δΌšθ’«ηΌΊηœγ€‚
    ε¦‚ζžœζ²‘ζδΎ›β€œη±»εž‹β€εˆ—οΌŒζ‰€ζœ‰ηš„θΎΉε°†θ’«εšδΉ‰δΈΊζœ‰ε‘ηš„γ€‚
    ε¦‚ζžœθΎΉε·²η»ε­˜εœ¨οΌŒε±žζ€§ε°†ηΌΊηœοΌŒδ½†ζ˜―θ¦εŠ δΈŠεƒδ»¬ηš„ζƒι‡οΌˆι»˜θ€ζƒι‡δΈΊ1)。" - -msgid "ImportCSVUIVisualPanel2.edges.create-new-nodes-checkbox" -msgstr "εˆ›ε»ΊδΈ’ε€±ηš„jiedian" - -msgid "SearchReplaceUI.regexReplaceCheckBox.text" -msgstr "ζ­£εˆ™θ‘¨θΎΎεΌζ›Ώζ’" - -msgid "SearchReplaceUI.columnsToSearchLabel.text" -msgstr "搜紒/ζ›Ώζ’ηš„εˆ—οΌš" - -msgid "MergeNodeDuplicatesUI.description" -msgstr "θ‡ͺεŠ¨ζ£€ζ΅‹θŠ‚η‚Ήι‡ε€εΉΆεˆεΉΆ.
    ε―Ήζ―δΈ€η»„θŠ‚η‚Ήε€εˆΆ, ζ–°θŠ‚η‚Ήε°†δΌšε’ŒθΏ™δΈ€η»„ηš„η¬¬δΈ€δΈͺθŠ‚η‚Ήε…·ζœ‰η›ΈεŒι’œθ‰²γ€ε€§ε°ε’Œδ½η½.
    ζ―δΈ€εˆ—δ½Ώη”¨δΈŠθΏ°η­–η•₯ζ₯ι™δ½Žθ‘Œε€Όζ•°εˆ°δΈ€δΈͺε€Ό.
    η­‰ηΊ§ζ˜―εΏ½η•₯ηš„." - -msgid "MergeNodeDuplicatesUI.noDuplicatesText" -msgstr "ζœͺε‘ηŽ°ι‡ε€η»“η‚Ή!" - -msgid "MergeNodeDuplicatesUI.duplicateGroupsNumber" -msgstr "{0} δΈͺθŠ‚η‚Ήι‡ε€ε‘ηŽ°!" - -msgid "MergeNodeDuplicatesUI.deleteMergedNodesText" -msgstr "εˆ ι™€εˆεΉΆηš„θŠ‚η‚Ή" - -msgid "MergeNodeDuplicatesUI.configurationText" -msgstr "配η½" - -msgid "MergeNodeDuplicatesUI.caseSensitiveText" -msgstr "εŒΊεˆ†ε€§ε°ε†™" - -msgid "MergeNodeDuplicatesUI.baseColumnText" -msgstr "εŸΊδΊŽεˆ—ζ₯εˆ ι™€ι‡ε€:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/zh_CN.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/zh_CN.po deleted file mode 100644 index 051db6ec78..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/general/zh_CN.po +++ /dev/null @@ -1,55 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-15 09:22+0000\n" -"Last-Translator: Xi-Nian Zuo \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "AddNodeToGraph.name" -msgstr "ζ·»εŠ θŠ‚η‚Ή" - -msgid "AddNodeToGraph.dialog.text" -msgstr "ζ ‡θ°οΌš" - -msgid "AddEdgeToGraph.name" -msgstr "添加边" - -msgid "ClearGraph.name" -msgstr "εˆ ι™€ε›Ύθ‘¨" - -msgid "ClearGraph.dialog.text" -msgstr "η‘εšεˆ ι™€ε›Ύθ‘¨οΌŸ
    ζ‰€ζœ‰ηš„θŠ‚η‚Ήε’ŒθΎΉε°†θ’«εˆ ι™€γ€‚
    " - -msgid "ClearEdges.name" -msgstr "εˆ ι™€θΎΉ" - -msgid "MergeNodeDuplicates.name" -msgstr "ζ£€ζ΅‹εΉΆεˆεΉΆι‡ε€θŠ‚η‚Ή" - -msgid "MergeNodeDuplicates.description" -msgstr "θ‡ͺεŠ¨ζ£€ζ΅‹εΉΆεˆεΉΆεˆ—ε†…ι‡ε€θŠ‚η‚Ή" - -msgid "SearchReplace.name" -msgstr "搜紒/替捒" - -msgid "SearchReplace.window.close" -msgstr "ε…³ι—­" - -msgid "ImportCSV.name" -msgstr "θΎ“ε…₯甡子葨格" - -msgid "ExportTable.name" -msgstr "输出葨格" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_ar.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_ca.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_ca.properties new file mode 100644 index 0000000000..0dd49a3533 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_ca.properties @@ -0,0 +1,40 @@ +OpenInEditNodeWindow.name=Edita el node +OpenInEditNodeWindow.name.multiple=Edita tots els nodes +OpenInEditNodeWindow.description=Canvia la mida, posiciσ, color i atributs +OpenInEditNodeWindow.description.multiple=Change size, position, color and attributes. Fields will be blank at first. +SelectOnGraph.name=Select on Overview +SelectNeighboursOnTable.name=Selecciona els nodes veοns a la taula +SelectEdgesOnTable.name=Selecciona les arestes relacionades +DeleteNodes.name.single=Elimina +DeleteNodes.name.multiple=Elimina'ls tots +DeleteNodes.confirmation.message=Segur que vols eliminar els nodes? +ClearNodesData.name.single=Neteja... +ClearNodesData.name.multiple=Neteja-ho tot +ClearNodesData.description=Neteja les dades dels nodes seleccionats +ClearNodesData.ui.description=Neteja les columnes +CopyNodeDataToOtherNodes.name=Overwrite data to the other selected nodes... +CopyNodeDataToOtherNodes.description=Copy the selected node columns to the other selected nodes. +CopyNodeDataToOtherNodes.ui.rowDescription=Copia el node: +CopyNodeDataToOtherNodes.ui.columnsDescription=Sobreescriu les columnes: +Group.name=Agrupa +Ungroup.name.single=Desagrupa +Ungroup.name.multiple=Desagrupa els grups seleccionats +UngroupRecursively.name.single=Desagrupa recursivament +UngroupRecursively.name.multiple=Desagrupa els grups seleccionats recursivament +UngroupRecursively.description=Desagrupa els grups seleccionats i els seus descendents +MoveNodeToGroup.name.single=Mou al grup... +MoveNodeToGroup.name.multiple=Mou-los tots al grup... +RemoveNodeFromGroup.name.single=Elimina del seu grup +RemoveNodeFromGroup.name.multiple=Remove all from their group +Settle.name.single=Settle +Settle.name.multiple=Settle all +Free.name.single=Free +Free.name.multiple=Free all +SetNodesSize.name.single=Estableix la mida del node... +SetNodesSize.name.multiple=Estableix la mida de tots els nodes... +MergeNodes.name=Merge nodes... +MergeNodes.description=All nodes are merged into a new one, combining the edges and values using different strategies +LinkNodes.name=Connecta els nodes... +LinkNodes.description=Create edges (directed or undirected) between one node and all the selected nodes +CopyNodes.name.single=Duplica +CopyNodes.name.multiple=Duplica'ls tots diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_cs.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_cs.properties index 966fa9c50c..0f0101938e 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_cs.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_cs.properties @@ -1,87 +1,45 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-27 14\:03+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenInEditNodeWindow.name=Upravit uzel - -OpenInEditNodeWindow.name.multiple=Upravit v\u0161echny uzle - -OpenInEditNodeWindow.description=Zm\u011bnit velikost, um\u00edst\u011bn\u00ed, barvu a vlastnosti. - -OpenInEditNodeWindow.description.multiple=Zm\u011bnit velikost, um\u00edst\u011bn\u00ed, barvu a vlastnosti. Pole budou zpo\u010d\u00e1tku pr\u00e1zdn\u00e1. - -SelectOnGraph.name=Vybrat p\u0159ehled - -SelectNeighboursOnTable.name=Vybrat soused\u00edc\u00ed uzle v tabulce - -SelectEdgesOnTable.name=Vybrat souvisej\u00edc\u00ed hrany - -DeleteNodes.name.single=Smazat - -DeleteNodes.name.multiple=Smazat v\u0161e - -DeleteNodes.confirmation.message=Potvrdit smaz\u00e1n\u00ed uzle? - -ClearNodesData.name.single=Vy\u010distit... - -ClearNodesData.name.multiple=Vy\u010disti v\u0161e... - -ClearNodesData.description=Vy\u010distit data z vybran\u00fdch uzl\u016f - -ClearNodesData.ui.description=Vy\u010distit sloupce\: - -CopyNodeDataToOtherNodes.name=P\u0159epsat data na dal\u0161\u00ed vybran\u00e9 uzly... - -CopyNodeDataToOtherNodes.description=Kop\u00edrovat vybran\u00e9 sloupce uzl\u016f na dal\u0161\u00ed vybran\u00e9 uzly. - -CopyNodeDataToOtherNodes.ui.rowDescription=Kop\u00edrovat uzel\: - -CopyNodeDataToOtherNodes.ui.columnsDescription=P\u0159epsat sloupce\: - -Group.name=Seskupit - -Ungroup.name.single=Rozd\u011blit - -Ungroup.name.multiple=Rozd\u011blit vybran\u00e9 skupiny - -UngroupRecursively.name.single=Rozd\u011blit rekurzivn\u011b - -UngroupRecursively.name.multiple=Rozd\u011blit vybran\u00e9 skupiny rekurzivn\u011b - -UngroupRecursively.description=Rozd\u011blit vybran\u00e9 skupiny a jejich n\u00e1sledn\u00edky - -MoveNodeToGroup.name.single=P\u0159esunout do skupiny... - -MoveNodeToGroup.name.multiple=P\u0159esunout v\u0161e do skupiny... - -RemoveNodeFromGroup.name.single=Odstranit ze skupiny - -RemoveNodeFromGroup.name.multiple=Odstranit v\u0161e ze skupiny - -Settle.name.single=Urovnat - -Settle.name.multiple=Urovnat v\u0161e - -Free.name.single=Uvolnit - -Free.name.multiple=Uvolnit v\u0161e - -SetNodesSize.name.single=Nastavit velikost uzlu... - -SetNodesSize.name.multiple=Nastavit velikost v\u0161ech uzl\u016f... - -MergeNodes.name=Slou\u010dit uzle... - -MergeNodes.description=V\u0161echny uzle jsou slou\u010deny do nov\u00e9ho, spojen\u00edm hran a hodnot pomoc\u00ed r\u016fzn\u00fdch strategi\u00ed - -LinkNodes.name=Odkazy na uzle... - -LinkNodes.description=Vytvo\u0159it hrany (\u0159\u00edzen\u00e9 \u010di ne\u0159\u00edzen\u00e9) mezi jedn\u00edm uzlem a vybran\u00fdmi uzly - -CopyNodes.name.single=Kop\u00edrovat - -CopyNodes.name.multiple=Kop\u00edrovat v\u0161e +OpenInEditNodeWindow.name=Upravit uzel +OpenInEditNodeWindow.name.multiple=Upravit v\u0161echny uzle +OpenInEditNodeWindow.description=Zm\u011bnit velikost, umνst\u011bnν, barvu a vlastnosti. +OpenInEditNodeWindow.description.multiple=Zm\u011bnit velikost, umνst\u011bnν, barvu a vlastnosti. Pole budou zpo\u010dαtku prαzdnα. + +SelectOnGraph.name=Vybrat p\u0159ehled +SelectNeighboursOnTable.name=Vybrat sousedνcν uzle v tabulce +SelectEdgesOnTable.name=Vybrat souvisejνcν hrany +DeleteNodes.name.single=Smazat +DeleteNodes.name.multiple=Smazat v\u0161e +DeleteNodes.confirmation.message=Potvrdit smazαnν uzle? + +ClearNodesData.name.single=Vy\u010distit... +ClearNodesData.name.multiple=Vy\u010disti v\u0161e... +ClearNodesData.description=Vy\u010distit data z vybranύch uzl\u016f +ClearNodesData.ui.description=Vy\u010distit sloupce: +CopyNodeDataToOtherNodes.name=P\u0159epsat data na dal\u0161ν vybranι uzly... +CopyNodeDataToOtherNodes.description=Kopνrovat vybranι sloupce uzl\u016f na dal\u0161ν vybranι uzly. +CopyNodeDataToOtherNodes.ui.rowDescription=Kopνrovat uzel: +CopyNodeDataToOtherNodes.ui.columnsDescription=P\u0159epsat sloupce: + +Group.name=Seskupit +Ungroup.name.single=Rozd\u011blit +Ungroup.name.multiple=Rozd\u011blit vybranι skupiny +UngroupRecursively.name.single=Rozd\u011blit rekurzivn\u011b +UngroupRecursively.name.multiple=Rozd\u011blit vybranι skupiny rekurzivn\u011b +UngroupRecursively.description=Rozd\u011blit vybranι skupiny a jejich nαslednνky +MoveNodeToGroup.name.single=P\u0159esunout do skupiny... +MoveNodeToGroup.name.multiple=P\u0159esunout v\u0161e do skupiny... +RemoveNodeFromGroup.name.single=Odstranit ze skupiny +RemoveNodeFromGroup.name.multiple=Odstranit v\u0161e ze skupiny + +Settle.name.single=Usadit +Settle.name.multiple=Usadit v\u0161e +Free.name.single=Uvolnit +Free.name.multiple=Uvolnit v\u0161e +SetNodesSize.name.single=Nastavit velikost uzlu... +SetNodesSize.name.multiple=Nastavit velikost v\u0161ech uzl\u016f... + +MergeNodes.name=Slou\u010dit uzle... +MergeNodes.description=V\u0161echny uzle jsou slou\u010deny do novιho, spojenνm hran a hodnot pomocν r\u016fznύch strategiν +LinkNodes.name=Odkazy na uzle... +LinkNodes.description=Vytvo\u0159it hrany (\u0159νzenι \u010di ne\u0159νzenι) mezi jednνm uzlem a vybranύmi uzly +CopyNodes.name.single=Kopνrovat +CopyNodes.name.multiple=Kopνrovat v\u0161e diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_de.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_de.properties new file mode 100644 index 0000000000..976bbdf971 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_de.properties @@ -0,0 +1,45 @@ +OpenInEditNodeWindow.name=Knoten bearbeiten +OpenInEditNodeWindow.name.multiple=Alle Knoten bearbeiten +OpenInEditNodeWindow.description=Grφίe, Position, Farbe und Attribute δndern. +OpenInEditNodeWindow.description.multiple=Grφίe, Position, Farbe und Attribute δndern. Die Felder sind zuerst leer. + +SelectOnGraph.name=Selektiere auf άbersicht +SelectNeighboursOnTable.name=Selektiere Nachbarknoten in der Tabelle +SelectEdgesOnTable.name=Selektiere in Zusammenhang stehende Kanten +DeleteNodes.name.single=Lφschen +DeleteNodes.name.multiple=Alle lφschen +DeleteNodes.confirmation.message=Knotenlφschung bestδtigen? + +ClearNodesData.name.single=Leeren... +ClearNodesData.name.multiple=Alle leeren... +ClearNodesData.description=Lφsche Daten der ausgewδhlten Knoten +ClearNodesData.ui.description=Spalten leeren: +CopyNodeDataToOtherNodes.name=άberschreibe Daten der anderen ausgewδhlten Knoten... +CopyNodeDataToOtherNodes.description=Kopiere die ausgewδhlten Spalten auf die anderen ausgewδhlten Knoten. +CopyNodeDataToOtherNodes.ui.rowDescription=Knoten kopieren: +CopyNodeDataToOtherNodes.ui.columnsDescription=Spalten όberschreiben: + +Group.name=Gruppieren +Ungroup.name.single=Gruppierung aufheben +Ungroup.name.multiple=Gruppierung der ausgewδhlten Gruppen aufheben +UngroupRecursively.name.single=Gruppierung rekursiv aufheben +UngroupRecursively.name.multiple=Gruppierung der ausgewδhlten Gruppen rekursiv aufheben +UngroupRecursively.description=Gruppierung der ausgewδhlten Gruppen und deren Nachkommen aufheben +MoveNodeToGroup.name.single=Verschiebe zur Gruppe... +MoveNodeToGroup.name.multiple=Verschiebe alle zur Gruppe... +RemoveNodeFromGroup.name.single=Von seiner Gruppe entfernen +RemoveNodeFromGroup.name.multiple=Alle von deren Gruppe entfernen + +Settle.name.single=Ausgleichen +Settle.name.multiple=Alle ausgleichen +Free.name.single=Freigeben +Free.name.multiple=Alle Freigeben +SetNodesSize.name.single=Setze Knotengrφίe... +SetNodesSize.name.multiple=Setze alle Knotengrφίen... + +MergeNodes.name=Knoten verschmelzen... +MergeNodes.description=Alle Knoten werden in einem neuen verschmolzen, Kanten und Werte werden mithilfe verschiedener Vorgehensweisen kombiniert. +LinkNodes.name=Verknόpfung zu Knoten... +LinkNodes.description=Erzeuge Kanten (gerichtet oder ungerichtet) zwischen einem Knoten und allen selektierten Knoten. +CopyNodes.name.single=Duplizieren +CopyNodes.name.multiple=Alle Duplizieren diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_es.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_es.properties index da2cbd2d66..20cefa0c28 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_es.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_es.properties @@ -1,88 +1,40 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:40+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - OpenInEditNodeWindow.name=Editar nodo - OpenInEditNodeWindow.name.multiple=Editar todos nodos - -OpenInEditNodeWindow.description=Cambiar tama\u00f1o, posici\u00f3n, color y atributos. - -OpenInEditNodeWindow.description.multiple=Cambiar tama\u00f1o, posici\u00f3n, color y atributos. Los campos estar\u00e1n vac\u00edos inicialmente. - +OpenInEditNodeWindow.description=Cambiar tamaρo, posiciσn, color y atributos. +OpenInEditNodeWindow.description.multiple=Cambiar tamaρo, posiciσn, color y atributos. Los campos estarαn vacνos inicialmente. SelectOnGraph.name=Seleccionar en la vista del grafo - SelectNeighboursOnTable.name=Seleccionar nodos vecinos en la tabla - SelectEdgesOnTable.name=Seleccionar aristas relacionadas - DeleteNodes.name.single=Eliminar - DeleteNodes.name.multiple=Eliminar todos - -DeleteNodes.confirmation.message=\u00bfConfirmar borrado de nodo(s)? - +DeleteNodes.confirmation.message=ΏConfirmar borrado de nodo(s)? ClearNodesData.name.single=Borrar datos del nodo... - ClearNodesData.name.multiple=Borrar datos de todos los nodos... - ClearNodesData.description=Borrar datos lo(s) nodo(s) seleccionado(s) - -ClearNodesData.ui.description=Borrar columnas\: - +ClearNodesData.ui.description=Borrar columnas: CopyNodeDataToOtherNodes.name=Sobreescribir datos a los otros nodos seleccionados... - -CopyNodeDataToOtherNodes.description=Copia las columnas del nodo seleccionado a los otros nodos seleccionados - -CopyNodeDataToOtherNodes.ui.rowDescription=Copiar nodo\: - -CopyNodeDataToOtherNodes.ui.columnsDescription=Sobreescribir columnas\: - +CopyNodeDataToOtherNodes.description=Copia la columna del nodo seleccionado a otros nodos seleccionados. +CopyNodeDataToOtherNodes.ui.rowDescription=Copiar nodo: +CopyNodeDataToOtherNodes.ui.columnsDescription=Sobreescribir columnas: Group.name=Agrupar - Ungroup.name.single=Desagrupar - Ungroup.name.multiple=Desagrupar grupos seleccionados - UngroupRecursively.name.single=Desagrupar recursivamente - UngroupRecursively.name.multiple=Desagrupar grupos seleccionados recursivamente - UngroupRecursively.description=Desagrupa los grupos seleccionados y sus descendientes - MoveNodeToGroup.name.single=Mover a grupo... - MoveNodeToGroup.name.multiple=Mover todos a grupo... - RemoveNodeFromGroup.name.single=Quitar del grupo - RemoveNodeFromGroup.name.multiple=Quitar todos de su grupo - Settle.name.single=Bloquear - Settle.name.multiple=Bloquear todos - Free.name.single=Desbloquear - Free.name.multiple=Desbloquear todos - -SetNodesSize.name.single=Configurar tama\u00f1o del nodo... - -SetNodesSize.name.multiple=Configurar tama\u00f1o de los nodos... - -MergeNodes.name=Mezclar nodos... - -MergeNodes.description=Todos los nodos son mezclados creando uno nuevo, combinando las aristas y valores utilizando diferentes estrategias - +SetNodesSize.name.single=Configurar tamaρo del nodo... +SetNodesSize.name.multiple=Configurar tamaρo de los nodos... +MergeNodes.name=Fusionar nodos... +MergeNodes.description=Todos los nodos son fusionados en uno nuevo, combinando las aristas y valores utilizando diferentes estrategias LinkNodes.name=Enlazar a nodos... - -LinkNodes.description=Crea aristas (dirigidas o no dirigidas) entre el nodo escogido y todos los dem\u00e1s nodos seleccionados - +LinkNodes.description=Crea aristas (dirigidas o no dirigidas) entre el nodo escogido y todos los demαs nodos seleccionados CopyNodes.name.single=Duplicar - CopyNodes.name.multiple=Duplicar todos diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_fr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_fr.properties index c06c787b90..205d6d256f 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_fr.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_fr.properties @@ -1,88 +1,45 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-07 11\:16+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenInEditNodeWindow.name=Editer le noeud - -OpenInEditNodeWindow.name.multiple=Editer tous les noeuds - -OpenInEditNodeWindow.description=Change la taille, couleur, position et attributs. - -OpenInEditNodeWindow.description.multiple=Change la taille, couleur, position et attributs. Les champs sont vides au d\u00e9but. - -SelectOnGraph.name=S\u00e9lectionner dans la Vue d'Ensemble - -SelectNeighboursOnTable.name=S\u00e9lectionner les noeuds voisins - -SelectEdgesOnTable.name=S\u00e9lectionner les liens connect\u00e9s - -DeleteNodes.name.single=Supprimer - -DeleteNodes.name.multiple=Tout supprimer - -DeleteNodes.confirmation.message=Confirmer la suppression des noeuds ? - -ClearNodesData.name.single=Effacer... - -ClearNodesData.name.multiple=Tout effacer... - -ClearNodesData.description=Effacer les donn\u00e9es des noeuds s\u00e9lectionn\u00e9s - -ClearNodesData.ui.description=Effacer les colonnes \: - -CopyNodeDataToOtherNodes.name=Ecraser les donn\u00e9es des autres noeuds s\u00e9lectionn\u00e9s... - -CopyNodeDataToOtherNodes.description=Copier les colonnes du noeud vers les autres noeuds s\u00e9lectionn\u00e9s - -CopyNodeDataToOtherNodes.ui.rowDescription=Copier le noeud \: - -CopyNodeDataToOtherNodes.ui.columnsDescription=Ecraser les colonnes \: - -Group.name=Grouper - -Ungroup.name.single=D\u00e9grouper - -Ungroup.name.multiple=D\u00e9grouper les noeuds s\u00e9lectionn\u00e9s - -UngroupRecursively.name.single=D\u00e9grouper r\u00e9cursivement - -UngroupRecursively.name.multiple=D\u00e9grouper la s\u00e9lection r\u00e9cursivement - -UngroupRecursively.description=D\u00e9grouper les groupes s\u00e9lectionn\u00e9s et leur descendants - -MoveNodeToGroup.name.single=D\u00e9placer dans un groupe... - -MoveNodeToGroup.name.multiple=Tout d\u00e9placer dans un groupe... - -RemoveNodeFromGroup.name.single=Retirer de son groupe - -RemoveNodeFromGroup.name.multiple=Tout retirer des groupes - -Settle.name.single=Fixer - -Settle.name.multiple=Tout fixer - -Free.name.single=Rel\u00e2cher - -Free.name.multiple=Tout rel\u00e2cher - -SetNodesSize.name.single=D\u00e9finir la taille... - -SetNodesSize.name.multiple=D\u00e9finir la taille de tous... - -MergeNodes.name=Fusionner les noeuds... - -MergeNodes.description=Tous les noeuds sont fusionn\u00e9s dans un nouveau noeud unique, combinant les liens et les valeurs d'attributs par diff\u00e9rentes strat\u00e9gies. - -LinkNodes.name=Connecter aux noeuds... - -LinkNodes.description=Cr\u00e9er les liens (direct ou non) entre un noeud et tous les autres s\u00e9lectionn\u00e9s - -CopyNodes.name.single=Dupliquer - -CopyNodes.name.multiple=Tout dupliquer +OpenInEditNodeWindow.name=Editer le noeud +OpenInEditNodeWindow.name.multiple=Editer tous les noeuds +OpenInEditNodeWindow.description=Change la taille, couleur, position et attributs. +OpenInEditNodeWindow.description.multiple=Change la taille, couleur, position et attributs. Les champs sont vides au dιbut. + +SelectOnGraph.name=Sιlectionner dans la Vue d'Ensemble +SelectNeighboursOnTable.name=Sιlectionner les noeuds voisins +SelectEdgesOnTable.name=Sιlectionner les liens connectιs +DeleteNodes.name.single=Supprimer +DeleteNodes.name.multiple=Tout supprimer +DeleteNodes.confirmation.message=Confirmer la suppression des noeuds ? + +ClearNodesData.name.single=Effacer... +ClearNodesData.name.multiple=Tout effacer... +ClearNodesData.description=Effacer les donnιes des noeuds sιlectionnιs +ClearNodesData.ui.description=Effacer les colonnes : +CopyNodeDataToOtherNodes.name=Ecraser les donnιes des autres noeuds sιlectionnιs... +CopyNodeDataToOtherNodes.description=Copier les colonnes du noeud vers les autres noeuds sιlectionnιs +CopyNodeDataToOtherNodes.ui.rowDescription=Copier le noeud : +CopyNodeDataToOtherNodes.ui.columnsDescription=Ecraser les colonnes : + +Group.name=Grouper +Ungroup.name.single=Dιgrouper +Ungroup.name.multiple=Dιgrouper les noeuds sιlectionnιs +UngroupRecursively.name.single=Dιgrouper rιcursivement +UngroupRecursively.name.multiple=Dιgrouper la sιlection rιcursivement +UngroupRecursively.description=Dιgrouper les groupes sιlectionnιs et leur descendants +MoveNodeToGroup.name.single=Dιplacer dans un groupe... +MoveNodeToGroup.name.multiple=Tout dιplacer dans un groupe... +RemoveNodeFromGroup.name.single=Retirer de son groupe +RemoveNodeFromGroup.name.multiple=Tout retirer des groupes + +Settle.name.single=Fixer +Settle.name.multiple=Tout fixer +Free.name.single=Relβcher +Free.name.multiple=Tout relβcher +SetNodesSize.name.single=Dιfinir la taille... +SetNodesSize.name.multiple=Dιfinir la taille de tous... + +MergeNodes.name=Fusionner les noeuds... +MergeNodes.description=Tous les noeuds sont fusionnιs dans un nouveau noeud unique, combinant les liens et les valeurs d'attributs par diffιrentes stratιgies. +LinkNodes.name=Connecter aux noeuds... +LinkNodes.description=Crιer les liens (direct ou non) entre un noeud et tous les autres sιlectionnιs +CopyNodes.name.single=Dupliquer +CopyNodes.name.multiple=Tout dupliquer diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_he.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_he.properties new file mode 100644 index 0000000000..18077b4c59 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_he.properties @@ -0,0 +1,40 @@ +OpenInEditNodeWindow.name=Edit node +OpenInEditNodeWindow.name.multiple=Edit all nodes +OpenInEditNodeWindow.description=Change size, position, color and attributes. +OpenInEditNodeWindow.description.multiple=Change size, position, color and attributes. Fields will be blank at first. +SelectOnGraph.name=Select on Overview +SelectNeighboursOnTable.name=Select neighbour nodes on table +SelectEdgesOnTable.name=Select related edges +DeleteNodes.name.single=\u05de\u05d7\u05e7 +DeleteNodes.name.multiple=Delete all +DeleteNodes.confirmation.message=Confirm nodes deletion? +ClearNodesData.name.single=Clear... +ClearNodesData.name.multiple=Clear all... +ClearNodesData.description=Clear data of the selected nodes +ClearNodesData.ui.description=Clear columns: +CopyNodeDataToOtherNodes.name=Overwrite data to the other selected nodes... +CopyNodeDataToOtherNodes.description=Copy the selected node columns to the other selected nodes. +CopyNodeDataToOtherNodes.ui.rowDescription=Copy node: +CopyNodeDataToOtherNodes.ui.columnsDescription=Overwrite columns: +Group.name=Group +Ungroup.name.single=Ungroup +Ungroup.name.multiple=Ungroup selected groups +UngroupRecursively.name.single=Ungroup recursively +UngroupRecursively.name.multiple=Ungroup selected groups recursively +UngroupRecursively.description=Ungroup the selected groups and their descendants +MoveNodeToGroup.name.single=Move to group... +MoveNodeToGroup.name.multiple=Move all to group... +RemoveNodeFromGroup.name.single=Remove from its group +RemoveNodeFromGroup.name.multiple=Remove all from their group +Settle.name.single=Settle +Settle.name.multiple=Settle all +Free.name.single=Free +Free.name.multiple=Free all +SetNodesSize.name.single=Set node size... +SetNodesSize.name.multiple=Set all nodes size... +MergeNodes.name=Merge nodes... +MergeNodes.description=All nodes are merged into a new one, combining the edges and values using different strategies +LinkNodes.name=Link to nodes... +LinkNodes.description=Create edges (directed or undirected) between one node and all the selected nodes +CopyNodes.name.single=\u05e9\u05db\u05e4\u05dc +CopyNodes.name.multiple=Duplicate all diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_hu.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_hu.properties new file mode 100644 index 0000000000..aa4b4c6155 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_hu.properties @@ -0,0 +1,42 @@ + + +Settle.name.multiple=Mindent rendezni +ClearNodesData.name.single=T\u00F6rl\u00E9s +LinkNodes.description=Hozzon l\u00E9tre \u00E9leket (ir\u00E1ny\u00EDtott vagy nem ir\u00E1ny\u00EDtott) egy csom\u00F3pont \u00E9s az \u00F6sszes kiv\u00E1lasztott csom\u00F3pont k\u00F6z\u00F6tt +CopyNodeDataToOtherNodes.ui.rowDescription=Csom\u00F3pont m\u00E1sol\u00E1sa: +MergeNodes.description=Az \u00F6sszes csom\u00F3pont egy \u00FAjba egyes\u00FCl, az \u00E9leket \u00E9s az \u00E9rt\u00E9keket k\u00FCl\u00F6nb\u00F6z\u0151 strat\u00E9gi\u00E1k haszn\u00E1lat\u00E1val kombin\u00E1lva +SelectOnGraph.name=V\u00E1lassza az \u00C1ttekint\u00E9s lehet\u0151s\u00E9get +Ungroup.name.multiple=A kiv\u00E1lasztott csoportok csoportos\u00EDt\u00E1sa +ClearNodesData.name.multiple=Mindent t\u00F6r\u00F6l... +MergeNodes.name=Csom\u00F3pontok egyes\u00EDt\u00E9se... +MoveNodeToGroup.name.multiple=Az \u00F6sszes \u00E1thelyez\u00E9se a csoportba... +RemoveNodeFromGroup.name.single=T\u00E1vol\u00EDtsa el a csoportb\u00F3l +SetNodesSize.name.single=\u00C1ll\u00EDtsa be a csom\u00F3 m\u00E9ret\u00E9t... +CopyNodeDataToOtherNodes.description=M\u00E1solja a kijel\u00F6lt csom\u00F3pont oszlopait a t\u00F6bbi kijel\u00F6lt csom\u00F3pontba. +OpenInEditNodeWindow.description=M\u00E9ret, poz\u00EDci\u00F3, sz\u00EDn \u00E9s attrib\u00FAtumok m\u00F3dos\u00EDt\u00E1sa. +Group.name=Csoport +Free.name.multiple=Ingyenes minden +CopyNodes.name.single=M\u00E1solat +UngroupRecursively.name.single=Rekurz\u00EDv csoportbont\u00E1s +UngroupRecursively.description=Bontsa ki a kiv\u00E1lasztott csoportokat \u00E9s lesz\u00E1rmazottjaikat +OpenInEditNodeWindow.name=Csom\u00F3pont szerkeszt\u00E9se +ClearNodesData.description=A kiv\u00E1lasztott csom\u00F3pontok adatainak t\u00F6rl\u00E9se +Free.name.single=Ingyenes +SetNodesSize.name.multiple=\u00C1ll\u00EDtsa be az \u00F6sszes csom\u00F3 m\u00E9ret\u00E9t... +OpenInEditNodeWindow.description.multiple=M\u00E9ret, poz\u00EDci\u00F3, sz\u00EDn \u00E9s attrib\u00FAtumok m\u00F3dos\u00EDt\u00E1sa. A mez\u0151k el\u0151sz\u00F6r \u00FCresek lesznek. +Settle.name.single=Rendezni +MoveNodeToGroup.name.single=Mozgat\u00E1s a csoportba... +LinkNodes.name=Link a csom\u00F3pontokhoz... +CopyNodes.name.multiple=Az \u00F6sszes megkett\u0151z\u00E9se +CopyNodeDataToOtherNodes.ui.columnsDescription=Oszlopok fel\u00FCl\u00EDr\u00E1sa: +RemoveNodeFromGroup.name.multiple=Az \u00F6sszes elt\u00E1vol\u00EDt\u00E1sa a csoportb\u00F3l +SelectNeighboursOnTable.name=V\u00E1lassza ki a szomsz\u00E9dos csom\u00F3pontokat a t\u00E1bl\u00E1n +SelectEdgesOnTable.name=V\u00E1lassza ki a kapcsol\u00F3d\u00F3 \u00E9leket +ClearNodesData.ui.description=Oszlopok t\u00F6rl\u00E9se: +DeleteNodes.name.multiple=Mindet t\u00F6rli +DeleteNodes.confirmation.message=Meger\u0151s\u00EDti a csom\u00F3pontok t\u00F6rl\u00E9s\u00E9t? +UngroupRecursively.name.multiple=A kiv\u00E1lasztott csoportok csoportos\u00EDt\u00E1sa rekurz\u00EDv m\u00F3don +CopyNodeDataToOtherNodes.name=\u00CDrja \u00E1t az adatokat a t\u00F6bbi kiv\u00E1lasztott csom\u00F3pontra... +Ungroup.name.single=Csoportbont\u00E1s felold\u00E1sa +DeleteNodes.name.single=T\u00F6r\u00F6l +OpenInEditNodeWindow.name.multiple=Szerkessze az \u00F6sszes csom\u00F3pontot diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_it.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_it.properties new file mode 100644 index 0000000000..7a9a7683c5 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_it.properties @@ -0,0 +1,40 @@ +OpenInEditNodeWindow.name=Modifica nodo +OpenInEditNodeWindow.name.multiple=Edit all nodes +OpenInEditNodeWindow.description=Change size, position, color and attributes. +OpenInEditNodeWindow.description.multiple=Change size, position, color and attributes. Fields will be blank at first. +SelectOnGraph.name=Select on Overview +SelectNeighboursOnTable.name=Select neighbour nodes on table +SelectEdgesOnTable.name=Select related edges +DeleteNodes.name.single=Cancella +DeleteNodes.name.multiple=Delete all +DeleteNodes.confirmation.message=Confirm nodes deletion? +ClearNodesData.name.single=Clear... +ClearNodesData.name.multiple=Clear all... +ClearNodesData.description=Clear data of the selected nodes +ClearNodesData.ui.description=Clear columns: +CopyNodeDataToOtherNodes.name=Overwrite data to the other selected nodes... +CopyNodeDataToOtherNodes.description=Copy the selected node columns to the other selected nodes. +CopyNodeDataToOtherNodes.ui.rowDescription=Copy node: +CopyNodeDataToOtherNodes.ui.columnsDescription=Overwrite columns: +Group.name=Raggruppa +Ungroup.name.single=Separa +Ungroup.name.multiple=Ungroup selected groups +UngroupRecursively.name.single=Ungroup recursively +UngroupRecursively.name.multiple=Ungroup selected groups recursively +UngroupRecursively.description=Ungroup the selected groups and their descendants +MoveNodeToGroup.name.single=Move to group... +MoveNodeToGroup.name.multiple=Move all to group... +RemoveNodeFromGroup.name.single=Remove from its group +RemoveNodeFromGroup.name.multiple=Remove all from their group +Settle.name.single=Fissa +Settle.name.multiple=Settle all +Free.name.single=Libera +Free.name.multiple=Free all +SetNodesSize.name.single=Set node size... +SetNodesSize.name.multiple=Set all nodes size... +MergeNodes.name=Merge nodes... +MergeNodes.description=All nodes are merged into a new one, combining the edges and values using different strategies +LinkNodes.name=Link to nodes... +LinkNodes.description=Create edges (directed or undirected) between one node and all the selected nodes +CopyNodes.name.single=Duplica +CopyNodes.name.multiple=Duplicate all diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_ja.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_ja.properties index 91b208ff5f..520cc26265 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_ja.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_ja.properties @@ -1,87 +1,45 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-27 08\:12+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenInEditNodeWindow.name=\u30ce\u30fc\u30c9\u306e\u7de8\u96c6 - -OpenInEditNodeWindow.name.multiple=\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u306e\u7de8\u96c6 - -OpenInEditNodeWindow.description=\u30b5\u30a4\u30ba\u3001\u4f4d\u7f6e\u3001\u8272\u304a\u3088\u3073\u5c5e\u6027\u306e\u5909\u66f4\u3002 - -OpenInEditNodeWindow.description.multiple=\u30b5\u30a4\u30ba\u3001\u4f4d\u7f6e\u3001\u8272\u304a\u3088\u3073\u5c5e\u6027\u306e\u5909\u66f4\u3002\u6700\u521d\u306f\u7a7a\u6b04\u3067\u3059\u3002 - -SelectOnGraph.name=\u6982\u8981\u3067\u9078\u629e - -SelectNeighboursOnTable.name=\u30c6\u30fc\u30d6\u30eb\u3067\u96a3\u63a5\u30ce\u30fc\u30c9\u3092\u9078\u629e - -SelectEdgesOnTable.name=\u95a2\u9023\u3059\u308b\u8fba\u3092\u9078\u629e - -DeleteNodes.name.single=\u524a\u9664 - -DeleteNodes.name.multiple=\u3059\u3079\u3066\u306e\u524a\u9664 - -DeleteNodes.confirmation.message=\u30ce\u30fc\u30c9\u306e\u524a\u9664\u306e\u78ba\u8a8d\uff1f - -ClearNodesData.name.single=\u30af\u30ea\u30a2... - -ClearNodesData.name.multiple=\u3059\u3079\u3066\u3092\u30af\u30ea\u30a2... - -ClearNodesData.description=\u9078\u629e\u3057\u305f\u30ce\u30fc\u30c9\u306e\u30c7\u30fc\u30bf\u3092\u30af\u30ea\u30a2 - -ClearNodesData.ui.description=\u5217\u3092\u30af\u30ea\u30a2\: - -CopyNodeDataToOtherNodes.name=\u30c7\u30fc\u30bf\u3092\u5225\u306e\u9078\u629e\u3057\u305f\u30ce\u30fc\u30c9\u306b\u4e0a\u66f8\u304d\: - -CopyNodeDataToOtherNodes.description=\u9078\u629e\u3057\u305f\u30ce\u30fc\u30c9\u5217\u3092\u5225\u306e\u9078\u629e\u3057\u305f\u30ce\u30fc\u30c9\u306b\u30b3\u30d4\u30fc - -CopyNodeDataToOtherNodes.ui.rowDescription=\u30ce\u30fc\u30c9\u3092\u30b3\u30d4\u30fc\: - -CopyNodeDataToOtherNodes.ui.columnsDescription=\u5217\u3092\u4e0a\u66f8\u304d\: - -Group.name=\u30b0\u30eb\u30fc\u30d7\u5316 - -Ungroup.name.single=\u30b0\u30eb\u30fc\u30d7\u5316\u89e3\u9664 - -Ungroup.name.multiple=\u9078\u629e\u3057\u305f\u30b0\u30eb\u30fc\u30d7\u306e\u30b0\u30eb\u30fc\u30d7\u5316\u89e3\u9664 - -UngroupRecursively.name.single=\u518d\u5e30\u7684\u306b\u30b0\u30eb\u30fc\u30d7\u5316\u3092\u89e3\u9664 - -UngroupRecursively.name.multiple=\u9078\u629e\u3055\u308c\u305f\u30b0\u30eb\u30fc\u30d7\u3092\u518d\u5e30\u7684\u306b\u30b0\u30eb\u30fc\u30d7\u5316\u89e3\u9664 - -UngroupRecursively.description=\u9078\u629e\u3055\u308c\u305f\u30b0\u30eb\u30fc\u30d7\u3068\u305d\u306e\u6d3e\u751f\u30b0\u30eb\u30fc\u30d7\u306e\u30b0\u30eb\u30fc\u30d7\u5316\u89e3\u9664 - -MoveNodeToGroup.name.single=\u30b0\u30eb\u30fc\u30d7\u306b\u79fb\u52d5\: - -MoveNodeToGroup.name.multiple=\u5168\u3066\u3092\u30b0\u30eb\u30fc\u30d7\u306b\u79fb\u52d5\: - -RemoveNodeFromGroup.name.single=\u30b0\u30eb\u30fc\u30d7\u304b\u3089\u6392\u9664 - -RemoveNodeFromGroup.name.multiple=\u3059\u3079\u3066\u3092\u30b0\u30eb\u30fc\u30d7\u304b\u3089\u6392\u9664 - -Settle.name.single=\u56fa\u5b9a - -Settle.name.multiple=\u3059\u3079\u3066\u3092\u56fa\u5b9a - -Free.name.single=\u53ef\u52d5 - -Free.name.multiple=\u3059\u3079\u3066\u3092\u53ef\u52d5 - -SetNodesSize.name.single=\u30ce\u30fc\u30c9\u306e\u30b5\u30a4\u30ba\u306e\u8a2d\u5b9a... - -SetNodesSize.name.multiple=\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u306e\u30b5\u30a4\u30ba\u306e\u8a2d\u5b9a... - -MergeNodes.name=\u30ce\u30fc\u30c9\u306e\u7d71\u5408... - -MergeNodes.description=\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u306f\u3001\u5225\u306e\u6226\u7565\u3092\u4f7f\u3063\u3066\u8fba\u3068\u5024\u3092\u7d44\u307f\u5408\u308f\u305b\u3001\u65b0\u3057\u3044\u3082\u306e\u306b\u7d71\u5408\u3055\u308c\u307e\u3059 - -LinkNodes.name=\u30ce\u30fc\u30c9\u3078\u306e\u30ea\u30f3\u30af... - -LinkNodes.description=\uff11\u3064\u306e\u30ce\u30fc\u30c9\u3068\u9078\u629e\u3057\u305f\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u9593\u306e\u8fba(\u6709\u5411\u30b0\u30e9\u30d5\u307e\u305f\u306f\u7121\u5411)\u3092\u4f5c\u6210 - -CopyNodes.name.single=\u8907\u5199 - -CopyNodes.name.multiple=\u3059\u3079\u3066\u306e\u8907\u5199 +OpenInEditNodeWindow.name=\u30ce\u30fc\u30c9\u306e\u7de8\u96c6 +OpenInEditNodeWindow.name.multiple=\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u306e\u7de8\u96c6 +OpenInEditNodeWindow.description=\u30b5\u30a4\u30ba\u3001\u4f4d\u7f6e\u3001\u8272\u304a\u3088\u3073\u5c5e\u6027\u306e\u5909\u66f4\u3002 +OpenInEditNodeWindow.description.multiple=\u30b5\u30a4\u30ba\u3001\u4f4d\u7f6e\u3001\u8272\u304a\u3088\u3073\u5c5e\u6027\u306e\u5909\u66f4\u3002\u6700\u521d\u306f\u7a7a\u6b04\u3067\u3059\u3002 + +SelectOnGraph.name=\u6982\u8981\u3067\u9078\u629e +SelectNeighboursOnTable.name=\u30c6\u30fc\u30d6\u30eb\u3067\u96a3\u63a5\u30ce\u30fc\u30c9\u3092\u9078\u629e +SelectEdgesOnTable.name=\u95a2\u9023\u3059\u308b\u8fba\u3092\u9078\u629e +DeleteNodes.name.single=\u524a\u9664 +DeleteNodes.name.multiple=\u3059\u3079\u3066\u306e\u524a\u9664 +DeleteNodes.confirmation.message=\u30ce\u30fc\u30c9\u306e\u524a\u9664\u306e\u78ba\u8a8d\uff1f + +ClearNodesData.name.single=\u30af\u30ea\u30a2... +ClearNodesData.name.multiple=\u3059\u3079\u3066\u3092\u30af\u30ea\u30a2... +ClearNodesData.description=\u9078\u629e\u3057\u305f\u30ce\u30fc\u30c9\u306e\u30c7\u30fc\u30bf\u3092\u30af\u30ea\u30a2 +ClearNodesData.ui.description=\u5217\u3092\u30af\u30ea\u30a2: +CopyNodeDataToOtherNodes.name=\u30c7\u30fc\u30bf\u3092\u5225\u306e\u9078\u629e\u3057\u305f\u30ce\u30fc\u30c9\u306b\u4e0a\u66f8\u304d: +CopyNodeDataToOtherNodes.description=\u9078\u629e\u3057\u305f\u30ce\u30fc\u30c9\u5217\u3092\u5225\u306e\u9078\u629e\u3057\u305f\u30ce\u30fc\u30c9\u306b\u30b3\u30d4\u30fc +CopyNodeDataToOtherNodes.ui.rowDescription=\u30ce\u30fc\u30c9\u3092\u30b3\u30d4\u30fc: +CopyNodeDataToOtherNodes.ui.columnsDescription=\u5217\u3092\u4e0a\u66f8\u304d: + +Group.name=\u30b0\u30eb\u30fc\u30d7\u5316 +Ungroup.name.single=\u30b0\u30eb\u30fc\u30d7\u5316\u89e3\u9664 +Ungroup.name.multiple=\u9078\u629e\u3057\u305f\u30b0\u30eb\u30fc\u30d7\u306e\u30b0\u30eb\u30fc\u30d7\u5316\u89e3\u9664 +UngroupRecursively.name.single=\u518d\u5e30\u7684\u306b\u30b0\u30eb\u30fc\u30d7\u5316\u3092\u89e3\u9664 +UngroupRecursively.name.multiple=\u9078\u629e\u3055\u308c\u305f\u30b0\u30eb\u30fc\u30d7\u3092\u518d\u5e30\u7684\u306b\u30b0\u30eb\u30fc\u30d7\u5316\u89e3\u9664 +UngroupRecursively.description=\u9078\u629e\u3055\u308c\u305f\u30b0\u30eb\u30fc\u30d7\u3068\u305d\u306e\u6d3e\u751f\u30b0\u30eb\u30fc\u30d7\u306e\u30b0\u30eb\u30fc\u30d7\u5316\u89e3\u9664 +MoveNodeToGroup.name.single=\u30b0\u30eb\u30fc\u30d7\u306b\u79fb\u52d5: +MoveNodeToGroup.name.multiple=\u5168\u3066\u3092\u30b0\u30eb\u30fc\u30d7\u306b\u79fb\u52d5: +RemoveNodeFromGroup.name.single=\u30b0\u30eb\u30fc\u30d7\u304b\u3089\u6392\u9664 +RemoveNodeFromGroup.name.multiple=\u3059\u3079\u3066\u3092\u30b0\u30eb\u30fc\u30d7\u304b\u3089\u6392\u9664 + +Settle.name.single=\u56fa\u5b9a +Settle.name.multiple=\u3059\u3079\u3066\u3092\u56fa\u5b9a +Free.name.single=\u53ef\u52d5 +Free.name.multiple=\u3059\u3079\u3066\u3092\u53ef\u52d5 +SetNodesSize.name.single=\u30ce\u30fc\u30c9\u306e\u30b5\u30a4\u30ba\u306e\u8a2d\u5b9a... +SetNodesSize.name.multiple=\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u306e\u30b5\u30a4\u30ba\u306e\u8a2d\u5b9a... + +MergeNodes.name=\u30ce\u30fc\u30c9\u306e\u7d71\u5408... +MergeNodes.description=\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u306f\u3001\u5225\u306e\u6226\u7565\u3092\u4f7f\u3063\u3066\u8fba\u3068\u5024\u3092\u7d44\u307f\u5408\u308f\u305b\u3001\u65b0\u3057\u3044\u3082\u306e\u306b\u7d71\u5408\u3055\u308c\u307e\u3059 +LinkNodes.name=\u30ce\u30fc\u30c9\u3078\u306e\u30ea\u30f3\u30af... +LinkNodes.description=\uff11\u3064\u306e\u30ce\u30fc\u30c9\u3068\u9078\u629e\u3057\u305f\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u9593\u306e\u8fba(\u6709\u5411\u30b0\u30e9\u30d5\u307e\u305f\u306f\u7121\u5411)\u3092\u4f5c\u6210 +CopyNodes.name.single=\u8907\u5199 +CopyNodes.name.multiple=\u3059\u3079\u3066\u306e\u8907\u5199 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_ko.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_ko.properties new file mode 100644 index 0000000000..6d1b1f4105 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_ko.properties @@ -0,0 +1,42 @@ + + +OpenInEditNodeWindow.name=\uB178\uB4DC \uD3B8\uC9D1 +OpenInEditNodeWindow.name.multiple=\uBAA8\uB4E0 \uB178\uB4DC \uD3B8\uC9D1 +OpenInEditNodeWindow.description=\uD06C\uAE30, \uC704\uCE58, \uC0C9\uC0C1 \uBC0F \uC18D\uC131 \uBCC0\uACBD. +SelectOnGraph.name=\uAC1C\uC694\uC5D0\uC11C \uC120\uD0DD +SelectNeighboursOnTable.name=\uD14C\uC774\uBE14\uC5D0\uC11C \uC774\uC6C3 \uB178\uB4DC \uC120\uD0DD +SelectEdgesOnTable.name=\uAD00\uB828\uB41C \uC5E3\uC9C0 \uC120\uD0DD +DeleteNodes.name.single=\uC0AD\uC81C +DeleteNodes.name.multiple=\uBAA8\uB450 \uC0AD\uC81C +DeleteNodes.confirmation.message=\uB178\uB4DC\uB97C \uC0AD\uC81C\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C? +ClearNodesData.name.single=\uC9C0\uC6B0\uAE30... +ClearNodesData.name.multiple=\uBAA8\uB450 \uC9C0\uC6B0\uAE30... +ClearNodesData.description=\uC120\uD0DD\uB41C \uB178\uB4DC\uC758 \uB370\uC774\uD130\uB97C \uC9C0\uC6B0\uAE30 +ClearNodesData.ui.description=\uC5F4 \uC9C0\uC6B0\uAE30: +CopyNodeDataToOtherNodes.name=\uB2E4\uB978 \uC120\uD0DD \uB178\uB4DC\uC5D0 \uB370\uC774\uD130 \uB36E\uC5B4\uC4F0\uAE30... +CopyNodeDataToOtherNodes.ui.rowDescription=\uB178\uB4DC \uBCF5\uC0AC: +CopyNodeDataToOtherNodes.ui.columnsDescription=\uC5F4 \uB36E\uC5B4\uC4F0\uAE30: +Group.name=\uADF8\uB8F9 +Ungroup.name.single=\uADF8\uB8F9 \uD574\uC81C +Ungroup.name.multiple=\uC120\uD0DD\uB41C \uADF8\uB8F9 \uD574\uC81C +UngroupRecursively.name.single=\uC7AC\uADC0\uC801 \uADF8\uB8F9 \uD574\uC81C +UngroupRecursively.name.multiple=\uC120\uD0DD\uB41C \uADF8\uB8F9\uC744 \uC7AC\uADC0\uC801 \uD574\uC81C +UngroupRecursively.description=\uC120\uD0DD\uB41C \uADF8\uB8F9\uACFC \uD558\uC704 \uADF8\uB8F9\uC744 \uD574\uC81C +MoveNodeToGroup.name.single=\uADF8\uB8F9\uC73C\uB85C \uC774\uB3D9... +RemoveNodeFromGroup.name.multiple=\uADF8\uB8F9\uC73C\uB85C\uBD80\uD130 \uBAA8\uB450 \uC0AD\uC81C +SetNodesSize.name.single=\uB178\uB4DC \uD06C\uAE30 \uC124\uC815... +SetNodesSize.name.multiple=\uBAA8\uB4E0 \uB178\uB4DC \uD06C\uAE30 \uC124\uC815... +MergeNodes.name=\uB178\uB4DC \uBCD1\uD569... +LinkNodes.name=\uB178\uB4DC\uC5D0 \uB300\uD55C \uB9C1\uD06C... +LinkNodes.description=\uD55C \uB178\uB4DC\uC640 \uBAA8\uB4E0 \uC120\uD0DD \uB178\uB4DC \uC0AC\uC774\uC758 \uC5E3\uC9C0(\uBC29\uD5A5\uC131, \uBE44\uBC29\uD5A5\uC131)\uB97C \uC0DD\uC131 +CopyNodes.name.single=\uBCF5\uC81C +CopyNodes.name.multiple=\uBAA8\uB450 \uBCF5\uC81C +Settle.name.single=\uBC30\uCE58 +Settle.name.multiple=\uBAA8\uB450 \uBC30\uCE58 +Free.name.multiple=\uBAA8\uB450 \uC790\uC720 \uBC30\uCE58 +Free.name.single=\uC790\uC720 \uBC30\uCE58 +OpenInEditNodeWindow.description.multiple=\uD06C\uAE30, \uC704\uCE58, \uC0C9\uC0C1 \uBC0F \uC18D\uC131 \uBCC0\uACBD. \uCC98\uC74C\uC5D0\uB294 \uD544\uB4DC\uAC00 \uACF5\uBC31\uC785\uB2C8\uB2E4. +CopyNodeDataToOtherNodes.description=\uC120\uD0DD \uB178\uB4DC \uC5F4\uC744 \uB2E4\uB978 \uC120\uD0DD\uB41C \uB178\uB4DC\uC5D0 \uBCF5\uC0AC\uD569\uB2C8\uB2E4. +MoveNodeToGroup.name.multiple=\uBAA8\uB450 \uADF8\uB8F9\uC73C\uB85C \uC774\uB3D9... +RemoveNodeFromGroup.name.single=\uADF8\uB8F9\uC73C\uB85C\uBD80\uD130 \uC0AD\uC81C +MergeNodes.description=\uBAA8\uB4E0 \uB178\uB4DC\uB294 \uB2E4\uC591\uD55C \uC804\uB7B5\uC744 \uC0AC\uC6A9\uD558\uC5EC \uC5E3\uC9C0\uC640 \uAC12\uC744 \uACB0\uD569\uD558\uC5EC \uC0C8\uB85C\uC6B4 \uB178\uB4DC\uB85C \uBCD1\uD569\uB429\uB2C8\uB2E4 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_nl.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_nl.properties new file mode 100644 index 0000000000..231a2bbe6b --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_nl.properties @@ -0,0 +1,40 @@ +OpenInEditNodeWindow.name=Knoop bewerken +OpenInEditNodeWindow.name.multiple=Alle knopen bewerken +OpenInEditNodeWindow.description=Wijzig de grootte, positie, kleur en attributen. +OpenInEditNodeWindow.description.multiple=Wijzig de grootte, positie, kleur en attributen. De velden zullen in eerste instantie leeg zijn. +SelectOnGraph.name=Select on Overview +SelectNeighboursOnTable.name=Select neighbour nodes on table +SelectEdgesOnTable.name=Select related edges +DeleteNodes.name.single=Verwijderen +DeleteNodes.name.multiple=Alles verwijderen +DeleteNodes.confirmation.message=Confirm nodes deletion? +ClearNodesData.name.single=Wissen... +ClearNodesData.name.multiple=Alles wissen... +ClearNodesData.description=Clear data of the selected nodes +ClearNodesData.ui.description=Clear columns: +CopyNodeDataToOtherNodes.name=Overwrite data to the other selected nodes... +CopyNodeDataToOtherNodes.description=Copy the selected node columns to the other selected nodes. +CopyNodeDataToOtherNodes.ui.rowDescription=Knoop kopiλren: +CopyNodeDataToOtherNodes.ui.columnsDescription=Kolommen overschrijven: +Group.name=Groeperen +Ungroup.name.single=Ungroup +Ungroup.name.multiple=Ungroup selected groups +UngroupRecursively.name.single=Ungroup recursively +UngroupRecursively.name.multiple=Ungroup selected groups recursively +UngroupRecursively.description=Ungroup the selected groups and their descendants +MoveNodeToGroup.name.single=Move to group... +MoveNodeToGroup.name.multiple=Move all to group... +RemoveNodeFromGroup.name.single=Remove from its group +RemoveNodeFromGroup.name.multiple=Remove all from their group +Settle.name.single=Settle +Settle.name.multiple=Settle all +Free.name.single=Free +Free.name.multiple=Free all +SetNodesSize.name.single=Grootte van knoop instellen... +SetNodesSize.name.multiple=Grootte van alle knopen instellen... +MergeNodes.name=Knopen samenvoegen... +MergeNodes.description=All nodes are merged into a new one, combining the edges and values using different strategies +LinkNodes.name=Link to nodes... +LinkNodes.description=Create edges (directed or undirected) between one node and all the selected nodes +CopyNodes.name.single=Dupliceren +CopyNodes.name.multiple=Alles dupliceren diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_pt.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_pt.properties new file mode 100644 index 0000000000..1e5c46bc27 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_pt.properties @@ -0,0 +1,40 @@ +SelectOnGraph.name=Selecionar na Vis\u00E3o geral +CopyNodeDataToOtherNodes.description=Copia as colunas do n\u00F3 selecionado para os outros n\u00F3s selecionados. +SetNodesSize.name.multiple=Definir o tamanho de todos os n\u00F3s... +MergeNodes.name=Mesclar n\u00F3s... +CopyNodes.name.single=Duplicar +MergeNodes.description=Todos os n\u00F3s ser\u00E3o mesclados num novo n\u00F3, combinando as arestas e valores usando diferentes estrat\u00E9gias +LinkNodes.name=Conectar aos n\u00F3s... +LinkNodes.description=Criar arestas (dirigidas ou n\u00E3o) entre um n\u00F3 e todos os n\u00F3s selecionados +CopyNodes.name.multiple=Duplicar todos +CopyNodeDataToOtherNodes.ui.rowDescription=Copiar n\u00F3: +CopyNodeDataToOtherNodes.ui.columnsDescription=Sobrescrever colunas: +OpenInEditNodeWindow.name=Editar n\u00F3 +OpenInEditNodeWindow.name.multiple=Editar todos os n\u00F3s +OpenInEditNodeWindow.description=Alterar tamanho, cor, posi\u00E7\u00E3o e atributos. +OpenInEditNodeWindow.description.multiple=Alterar tamanho, cor, posi\u00E7\u00E3o e atributos. Os campos ser\u00E3o inicializados em branco. +SelectNeighboursOnTable.name=Selecionar n\u00F3s vizinhos na tabela +SelectEdgesOnTable.name=Selecionar arestas relacionadas +DeleteNodes.name.single=Apagar +DeleteNodes.name.multiple=Apagar todos +DeleteNodes.confirmation.message=Confirma apagar os n\u00F3s? +ClearNodesData.name.single=Limpar dados do n\u00F3... +ClearNodesData.name.multiple=Limpar dados de todos os n\u00F3s... +ClearNodesData.description=Limpar dados do(s) n\u00F3(s) selecionado(s) +ClearNodesData.ui.description=Limpar valores das colunas: +CopyNodeDataToOtherNodes.name=Sobrescrever dados dos outros n\u00F3s selecionados... +Group.name=Agrupar +Ungroup.name.single=Desagrupar +Ungroup.name.multiple=Desagrupar selecionados +UngroupRecursively.name.single=Desagrupar recursivamente +UngroupRecursively.name.multiple=Desagrupar os grupos selecionados recursivamente +UngroupRecursively.description=Desagrupar os grupos selecionados e os seus descendentes +MoveNodeToGroup.name.single=Mover para o grupo... +MoveNodeToGroup.name.multiple=Mover todos para o grupo... +RemoveNodeFromGroup.name.single=Remover do seu grupo +RemoveNodeFromGroup.name.multiple=Remover todos dos seus grupos +Settle.name.single=Bloquear +Settle.name.multiple=Bloquear todos +Free.name.single=Desbloquear +Free.name.multiple=Desbloquear todos +SetNodesSize.name.single=Definir o tamanho do n\u00F3... diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_pt_BR.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_pt_BR.properties index 7e83ca34b7..649c38848f 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_pt_BR.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_pt_BR.properties @@ -1,87 +1,45 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 23\:45+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenInEditNodeWindow.name=Editar n\u00f3 - -OpenInEditNodeWindow.name.multiple=Editar todos os n\u00f3s - -OpenInEditNodeWindow.description=Alterar tamanho, cor, posi\u00e7\u00e3o e atributos. - -OpenInEditNodeWindow.description.multiple=Alterar tamanho, cor, posi\u00e7\u00e3o e atributos. Os campos ser\u00e3o inicializados em branco. - -SelectOnGraph.name=Selecionar na Vis\u00e3o Geral - -SelectNeighboursOnTable.name=Selecionar n\u00f3s vizinhos na tabela - -SelectEdgesOnTable.name=Selecionar arestas relacionadas - -DeleteNodes.name.single=Excluir - -DeleteNodes.name.multiple=Excluir todos - -DeleteNodes.confirmation.message=Confirma a exclus\u00e3o dos n\u00f3s? - -ClearNodesData.name.single=Limpar dados do n\u00f3... - -ClearNodesData.name.multiple=Limpar dados de todos os n\u00f3s... - -ClearNodesData.description=Limpar dados do(s) n\u00f3(s) selecionado(s) - -ClearNodesData.ui.description=Limpar valores das colunas\: - -CopyNodeDataToOtherNodes.name=Sobrescrever dados dos outros n\u00f3s selecionados... - -CopyNodeDataToOtherNodes.description=Copia as colunas do n\u00f3 selecionado para os outros n\u00f3s selecionados - -CopyNodeDataToOtherNodes.ui.rowDescription=Copiar n\u00f3\: - -CopyNodeDataToOtherNodes.ui.columnsDescription=Sobrescrever colunas\: - -Group.name=Agrupar - -Ungroup.name.single=Desagrupar - -Ungroup.name.multiple=Desagrupar selecionados - -UngroupRecursively.name.single=Desagrupar recursivamente - -UngroupRecursively.name.multiple=Desagrupar os grupos selecionados recursivamente - -UngroupRecursively.description=Desagrupar os grupos selecionados e seus descendentes - -MoveNodeToGroup.name.single=Mover para o grupo... - -MoveNodeToGroup.name.multiple=Mover todos para o grupo... - -RemoveNodeFromGroup.name.single=Remover de seu grupo - -RemoveNodeFromGroup.name.multiple=Remover todos de seus grupos - -Settle.name.single=Bloquear - -Settle.name.multiple=Bloquear todos - -Free.name.single=Desbloquear - -Free.name.multiple=Desbloquear todos - -SetNodesSize.name.single=Definir o tamanho do n\u00f3... - -SetNodesSize.name.multiple=Definir o tamanho de todos os n\u00f3s... - -MergeNodes.name=Mesclar n\u00f3s... - -MergeNodes.description=Todos os n\u00f3s ser\u00e3o mesclados em um novo n\u00f3, combinando as arestas e valores usando diferentes estrat\u00e9gias - -LinkNodes.name=Conectar aos n\u00f3s... - -LinkNodes.description=Criar arestas (dirigidas ou n\u00e3o) entre um n\u00f3 e todos os n\u00f3s selecionados - -CopyNodes.name.single=Duplicar - -CopyNodes.name.multiple=Duplicar todos +OpenInEditNodeWindow.name=Editar nσ +OpenInEditNodeWindow.name.multiple=Editar todos os nσs +OpenInEditNodeWindow.description=Alterar tamanho, cor, posiηγo e atributos. +OpenInEditNodeWindow.description.multiple=Alterar tamanho, cor, posiηγo e atributos. Os campos serγo inicializados em branco. + +SelectOnGraph.name=Selecionar na Visγo Geral +SelectNeighboursOnTable.name=Selecionar nσs vizinhos na tabela +SelectEdgesOnTable.name=Selecionar arestas relacionadas +DeleteNodes.name.single=Excluir +DeleteNodes.name.multiple=Excluir todos +DeleteNodes.confirmation.message=Confirma a exclusγo dos nσs? + +ClearNodesData.name.single=Limpar dados do nσ... +ClearNodesData.name.multiple=Limpar dados de todos os nσs... +ClearNodesData.description=Limpar dados do(s) nσ(s) selecionado(s) +ClearNodesData.ui.description=Limpar valores das colunas: +CopyNodeDataToOtherNodes.name=Sobrescrever dados dos outros nσs selecionados... +CopyNodeDataToOtherNodes.description=Copia as colunas do nσ selecionado para os outros nσs selecionados +CopyNodeDataToOtherNodes.ui.rowDescription=Copiar nσ: +CopyNodeDataToOtherNodes.ui.columnsDescription=Sobrescrever colunas: + +Group.name=Agrupar +Ungroup.name.single=Desagrupar +Ungroup.name.multiple=Desagrupar selecionados +UngroupRecursively.name.single=Desagrupar recursivamente +UngroupRecursively.name.multiple=Desagrupar os grupos selecionados recursivamente +UngroupRecursively.description=Desagrupar os grupos selecionados e seus descendentes +MoveNodeToGroup.name.single=Mover para o grupo... +MoveNodeToGroup.name.multiple=Mover todos para o grupo... +RemoveNodeFromGroup.name.single=Remover de seu grupo +RemoveNodeFromGroup.name.multiple=Remover todos de seus grupos + +Settle.name.single=Bloquear +Settle.name.multiple=Bloquear todos +Free.name.single=Desbloquear +Free.name.multiple=Desbloquear todos +SetNodesSize.name.single=Definir o tamanho do nσ... +SetNodesSize.name.multiple=Definir o tamanho de todos os nσs... + +MergeNodes.name=Mesclar nσs... +MergeNodes.description=Todos os nσs serγo mesclados em um novo nσ, combinando as arestas e valores usando diferentes estratιgias +LinkNodes.name=Conectar aos nσs... +LinkNodes.description=Criar arestas (dirigidas ou nγo) entre um nσ e todos os nσs selecionados +CopyNodes.name.single=Duplicar +CopyNodes.name.multiple=Duplicar todos diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_ro.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_ro.properties new file mode 100644 index 0000000000..3a1aa45be5 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_ro.properties @@ -0,0 +1,42 @@ + + +OpenInEditNodeWindow.name=Editeaz\u0103 nod +OpenInEditNodeWindow.name.multiple=Editeaz\u0103 toate nodurile +OpenInEditNodeWindow.description=Schimb\u0103 dimensiunea, pozi\u021Bia, culoarea \u0219i atributele. +OpenInEditNodeWindow.description.multiple=Schimb\u0103 dimensiunea, pozi\u021Bia, culoarea \u0219i atributele. C\u00E2mpurile vor fi goale la \u00EEnceput. +SelectOnGraph.name=Selecteaz\u0103 pe graf +SelectNeighboursOnTable.name=Selecteaz\u0103 nodurile vecine \u00EEn tabel +SelectEdgesOnTable.name=Selecteaz\u0103 muchiile aferente +DeleteNodes.name.single=\u0218terge +DeleteNodes.confirmation.message=Confirm\u0103 \u0219tergerea nodurilor? +ClearNodesData.name.single=Cur\u0103\u021B\u0103... +ClearNodesData.name.multiple=Cur\u0103\u021B\u0103 tot... +ClearNodesData.ui.description=Cur\u0103\u021B\u0103 coloanele: +CopyNodeDataToOtherNodes.name=Suprascrie datele \u00EEn celelalte noduri selectate... +CopyNodeDataToOtherNodes.description=Copiaz\u0103 coloanele din nodul selectat \u00EEn celelalte noduri selectate. +Group.name=Grupeaz\u0103 +Ungroup.name.single=Degrupeaz\u0103 +Ungroup.name.multiple=Degrupeaz\u0103 grupurile selectate +UngroupRecursively.name.single=Degrupeaz\u0103 recursiv +UngroupRecursively.name.multiple=Degrupeaz\u0103 recursiv grupurile selectate +UngroupRecursively.description=Degrupeaz\u0103 grupurile selectate \u0219i descenden\u021Bii lor +MoveNodeToGroup.name.single=Mut\u0103 \u00EEn grup... +Settle.name.single=Fixeaz\u0103 +SetNodesSize.name.multiple=Seteaz\u0103 dimensiunea tuturor nodurilor... +MergeNodes.name=\u00CEmbin\u0103 nodurile... +MergeNodes.description=Toate nodurile sunt \u00EEmbinate \u00EEntr-unul nou, combin\u00E2nd muchiile \u0219i valorile folosind strategii diferite +LinkNodes.name=Conecteaz\u0103 cu nodurile... +LinkNodes.description=Creaz\u0103 muchii (orientate sau neorientate) \u00EEntre un nod \u0219i toate nodurile selectate +CopyNodes.name.single=Duplic\u0103 +CopyNodes.name.multiple=Duplic\u0103 tot +DeleteNodes.name.multiple=\u0218terge tot +Settle.name.multiple=Fixeaz\u0103 tot +ClearNodesData.description=\u0218terge datele din nodurile selectate +MoveNodeToGroup.name.multiple=Mut\u0103 tot \u00EEn grup... +RemoveNodeFromGroup.name.single=Elimin\u0103 din grup +CopyNodeDataToOtherNodes.ui.rowDescription=Copiaz\u0103 nodul: +CopyNodeDataToOtherNodes.ui.columnsDescription=Suprascrie coloanele: +Free.name.single=Elibereaz\u0103 +SetNodesSize.name.single=Seteaz\u0103 dimensiunea nodului... +RemoveNodeFromGroup.name.multiple=Elimin\u0103 tot din grup +Free.name.multiple=Elibereaz\u0103 tot diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_ru.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_ru.properties index 883aa44a8d..93f33e28be 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_ru.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_ru.properties @@ -1,88 +1,45 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -# FIRST AUTHOR , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 15\:22+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenInEditNodeWindow.name=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0443\u0437\u0435\u043b - -OpenInEditNodeWindow.name.multiple=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u0443\u0437\u043b\u044b - -OpenInEditNodeWindow.description=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440, \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0446\u0432\u0435\u0442 \u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b. - -OpenInEditNodeWindow.description.multiple=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440, \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0446\u0432\u0435\u0442 \u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u044f \u0431\u0443\u0434\u0443\u0442 \u043f\u0443\u0441\u0442\u044b\u043c\u0438. - -SelectOnGraph.name=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0432 \u043e\u043a\u043d\u0435 \u043e\u0431\u0437\u043e\u0440\u0430 - -SelectNeighboursOnTable.name=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0435 \u0443\u0437\u043b\u044b \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 - -SelectEdgesOnTable.name=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0440\u0451\u0431\u0440\u0430 - -DeleteNodes.name.single=\u0423\u0434\u0430\u043b\u0438\u0442\u044c - -DeleteNodes.name.multiple=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0435 - -DeleteNodes.confirmation.message=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0443\u0437\u043b\u043e\u0432? - -ClearNodesData.name.single=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c... - -ClearNodesData.name.multiple=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u0435... - -ClearNodesData.description=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u0430\u0445 - -ClearNodesData.ui.description=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0446\u044b\: - -CopyNodeDataToOtherNodes.name=\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0443\u0437\u043b\u044b... - -CopyNodeDataToOtherNodes.description=\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0443\u0437\u043b\u044b - -CopyNodeDataToOtherNodes.ui.rowDescription=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0437\u043b\u044b\: - -CopyNodeDataToOtherNodes.ui.columnsDescription=\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0446\u044b\: - -Group.name=\u0421\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c - -Ungroup.name.single=\u0420\u0430\u0437\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c - -Ungroup.name.multiple=\u0420\u0430\u0437\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0433\u0440\u0443\u043f\u043f\u044b - -UngroupRecursively.name.single=\u0420\u0430\u0437\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e - -UngroupRecursively.name.multiple=\u0420\u0430\u0437\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e - -UngroupRecursively.description=\u0420\u0430\u0437\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0438 \u0438\u0445 \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432 - -MoveNodeToGroup.name.single=\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u0433\u0440\u0443\u043f\u043f\u0443... - -MoveNodeToGroup.name.multiple=\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u0451 \u0432 \u0433\u0440\u0443\u043f\u043f\u0443... - -RemoveNodeFromGroup.name.single=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0438\u0437 \u0433\u0440\u0443\u043f\u043f\u044b - -RemoveNodeFromGroup.name.multiple=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0451 \u0438\u0437 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0433\u0440\u0443\u043f\u043f - -Settle.name.single=\u0417\u0430\u043a\u0440\u0435\u043f\u0438\u0442\u044c - -Settle.name.multiple=\u0417\u0430\u043a\u0440\u0435\u043f\u0438\u0442\u044c \u0432\u0441\u0451 - -Free.name.single=\u041e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c - -Free.name.multiple=\u041e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c \u0432\u0441\u0451 - -SetNodesSize.name.single=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0443\u0437\u043b\u0430... - -SetNodesSize.name.multiple=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u043e\u0432... - -MergeNodes.name=\u0421\u043a\u043b\u0435\u0438\u0442\u044c \u0443\u0437\u043b\u044b... - -MergeNodes.description=\u0412\u0441\u0435 \u0443\u0437\u043b\u044b \u0431\u0443\u0434\u0443\u0442 \u0441\u043b\u0438\u0442\u044b \u0432 \u043e\u0434\u0438\u043d \u043d\u043e\u0432\u044b\u0439, \u0440\u0435\u0431\u0440\u0430 \u0438 \u043c\u0435\u0442\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c - -LinkNodes.name=\u041f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u043a \u0443\u0437\u043b\u0430\u043c... - -LinkNodes.description=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0435\u0431\u0440\u043e (\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0438\u043b\u0438 \u043d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435) \u043c\u0435\u0436\u0434\u0443 \u043e\u0434\u043d\u0438\u043c \u0443\u0437\u043b\u043e\u043c \u0438 \u0432\u0441\u0435\u043c\u0438 \u0432\u044b\u0440\u0431\u0440\u0430\u043d\u043d\u044b\u043c\u0438 \u0443\u0437\u043b\u0430\u043c\u0438 - -CopyNodes.name.single=\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c - -CopyNodes.name.multiple=\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 +OpenInEditNodeWindow.name=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0443\u0437\u0435\u043b +OpenInEditNodeWindow.name.multiple=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0432\u0441\u0435 \u0443\u0437\u043b\u044b +OpenInEditNodeWindow.description=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440, \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0446\u0432\u0435\u0442 \u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b. +OpenInEditNodeWindow.description.multiple=\u0418\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440, \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0446\u0432\u0435\u0442 \u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b. \u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u044f \u0431\u0443\u0434\u0443\u0442 \u043f\u0443\u0441\u0442\u044b\u043c\u0438. + +SelectOnGraph.name=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0432 \u043e\u043a\u043d\u0435 \u043e\u0431\u0437\u043e\u0440\u0430 +SelectNeighboursOnTable.name=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0435 \u0443\u0437\u043b\u044b \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 +SelectEdgesOnTable.name=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0440\u0451\u0431\u0440\u0430 +DeleteNodes.name.single=\u0423\u0434\u0430\u043b\u0438\u0442\u044c +DeleteNodes.name.multiple=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0435 +DeleteNodes.confirmation.message=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0443\u0437\u043b\u043e\u0432? + +ClearNodesData.name.single=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c... +ClearNodesData.name.multiple=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u0435... +ClearNodesData.description=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u0430\u0445 +ClearNodesData.ui.description=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0446\u044b: +CopyNodeDataToOtherNodes.name=\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0443\u0437\u043b\u044b... +CopyNodeDataToOtherNodes.description=\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0432 \u0434\u0440\u0443\u0433\u0438\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0443\u0437\u043b\u044b +CopyNodeDataToOtherNodes.ui.rowDescription=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0437\u043b\u044b: +CopyNodeDataToOtherNodes.ui.columnsDescription=\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0446\u044b: + +Group.name=\u0421\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c +Ungroup.name.single=\u0420\u0430\u0437\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c +Ungroup.name.multiple=\u0420\u0430\u0437\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0433\u0440\u0443\u043f\u043f\u044b +UngroupRecursively.name.single=\u0420\u0430\u0437\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e +UngroupRecursively.name.multiple=\u0420\u0430\u0437\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e +UngroupRecursively.description=\u0420\u0430\u0437\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0433\u0440\u0443\u043f\u043f\u044b \u0438 \u0438\u0445 \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432 +MoveNodeToGroup.name.single=\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432 \u0433\u0440\u0443\u043f\u043f\u0443... +MoveNodeToGroup.name.multiple=\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u0432\u0441\u0451 \u0432 \u0433\u0440\u0443\u043f\u043f\u0443... +RemoveNodeFromGroup.name.single=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0438\u0437 \u0433\u0440\u0443\u043f\u043f\u044b +RemoveNodeFromGroup.name.multiple=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0432\u0441\u0451 \u0438\u0437 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0433\u0440\u0443\u043f\u043f + +Settle.name.single=\u0417\u0430\u043a\u0440\u0435\u043f\u0438\u0442\u044c +Settle.name.multiple=\u0417\u0430\u043a\u0440\u0435\u043f\u0438\u0442\u044c \u0432\u0441\u0451 +Free.name.single=\u041e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c +Free.name.multiple=\u041e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c \u0432\u0441\u0451 +SetNodesSize.name.single=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0443\u0437\u043b\u0430... +SetNodesSize.name.multiple=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u043e\u0432... + +MergeNodes.name=\u0421\u043a\u043b\u0435\u0438\u0442\u044c \u0443\u0437\u043b\u044b... +MergeNodes.description=\u0412\u0441\u0435 \u0443\u0437\u043b\u044b \u0431\u0443\u0434\u0443\u0442 \u0441\u043b\u0438\u0442\u044b \u0432 \u043e\u0434\u0438\u043d \u043d\u043e\u0432\u044b\u0439, \u0440\u0435\u0431\u0440\u0430 \u0438 \u043c\u0435\u0442\u043a\u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u044b \u043f\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c +LinkNodes.name=\u041f\u0440\u0438\u0432\u044f\u0437\u0430\u0442\u044c \u043a \u0443\u0437\u043b\u0430\u043c... +LinkNodes.description=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0435\u0431\u0440\u043e (\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 \u0438\u043b\u0438 \u043d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435) \u043c\u0435\u0436\u0434\u0443 \u043e\u0434\u043d\u0438\u043c \u0443\u0437\u043b\u043e\u043c \u0438 \u0432\u0441\u0435\u043c\u0438 \u0432\u044b\u0440\u0431\u0440\u0430\u043d\u043d\u044b\u043c\u0438 \u0443\u0437\u043b\u0430\u043c\u0438 +CopyNodes.name.single=\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c +CopyNodes.name.multiple=\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_th.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_tr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_tr.properties new file mode 100644 index 0000000000..affa063ce1 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_tr.properties @@ -0,0 +1,45 @@ +OpenInEditNodeWindow.name=Dό\u011fόmό dόzenle +OpenInEditNodeWindow.name.multiple=Tόm dό\u011fόmleri dόzenle +OpenInEditNodeWindow.description=Bόyόklόk, konum, renk ve φzellikleri de\u011fi\u015ftir +OpenInEditNodeWindow.description.multiple=Bόyόklόk, konum, renk ve φzellikleri de\u011fi\u015ftir. Alanlar ba\u015flang\u0131ηta bo\u015f b\u0131rak\u0131lacakt\u0131r. + +SelectOnGraph.name=Genel bak\u0131\u015f seηiniz +SelectNeighboursOnTable.name=Tablodan kom\u015fu dό\u011fόmleri seηiniz +SelectEdgesOnTable.name=\u0130li\u015fkili ba\u011flant\u0131lar\u0131 seηiniz +DeleteNodes.name.single=Sil +DeleteNodes.name.multiple=Hepsini sil +DeleteNodes.confirmation.message=Dό\u011fόmlerin silinmesini onaylay\u0131n + +ClearNodesData.name.single=Temizle... +ClearNodesData.name.multiple=Tόmόnό temizle... +ClearNodesData.description=Seηili dό\u011fόmlerin verisini temizle +ClearNodesData.ui.description=Sόtunlar\u0131 temizle: +CopyNodeDataToOtherNodes.name=Seηili di\u011fer dό\u011fόmler iηin veriyi όstόne yaz +CopyNodeDataToOtherNodes.description=Seηili dό\u011fόmlerin sόtunlar\u0131n\u0131 di\u011fer seηili dό\u011fόmlere kopyala +CopyNodeDataToOtherNodes.ui.rowDescription=Dό\u011fόmό kopyala: +CopyNodeDataToOtherNodes.ui.columnsDescription=Sόtunlar\u0131n όstόne yaz: + +Group.name=Grupla +Ungroup.name.single=Grubu ηφz +Ungroup.name.multiple=Seηili gruplar\u0131n grubunu ηφz +UngroupRecursively.name.single=Tekrarlanan \u015fekilde grubu ηφz +UngroupRecursively.name.multiple=Seηili gruplar iηin tekrarlanan \u015fekilde grubu ηφz +UngroupRecursively.description=Seηili gruplar ve alt dallar\u0131 iηin tekrarlanan \u015fekilde grubu ηφz +MoveNodeToGroup.name.single=Grubu ta\u015f\u0131... +MoveNodeToGroup.name.multiple=Hepsini gruba ta\u015f\u0131... +RemoveNodeFromGroup.name.single=Grubundan kald\u0131r +RemoveNodeFromGroup.name.multiple=Hepsini grubundan kald\u0131r + +Settle.name.single=Yerle\u015ftir +Settle.name.multiple=Tόmόnό yerle\u015ftir +Free.name.single=Serbest b\u0131rak +Free.name.multiple=Tόmόnό serbest b\u0131rak +SetNodesSize.name.single=Dό\u011fόm boyutunu ayarla... +SetNodesSize.name.multiple=Tόm dό\u011fόmlerin boyutunu ayarla... + +MergeNodes.name=Dό\u011fόmleri birle\u015ftir +MergeNodes.description=Tόm dό\u011fόmler yeni bir dό\u011fόme birle\u015ftirildi, ba\u011flant\u0131lar\u0131n birle\u015ftirilmesi ve de\u011ferler iηin farkl\u0131 stratejiler kullan\u0131l\u0131yor +LinkNodes.name=Dό\u011fόmleri linkle +LinkNodes.description=Bir dό\u011fόm ile tόm seηili dό\u011fόmler aras\u0131nda ba\u011flant\u0131 olu\u015ftur( Yφnlό ya da Yφnsόz) +CopyNodes.name.single=Co\u011falt +CopyNodes.name.multiple=Tόmόnό ηo\u011falt diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_uk.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_uk.properties new file mode 100644 index 0000000000..466466e7d9 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_uk.properties @@ -0,0 +1,40 @@ +Ungroup.name.multiple=\u0420\u043E\u0437\u0433\u0440\u0443\u043F\u0443\u0432\u0430\u0442\u0438 \u0432\u0438\u0431\u0440\u0430\u043D\u0456 \u0433\u0440\u0443\u043F\u0438 +ClearNodesData.name.multiple=\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0432\u0441\u0435... +Group.name=\u0413\u0440\u0443\u043F\u0430 +DeleteNodes.confirmation.message=\u041F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0438 \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043D\u044F \u0432\u0443\u0437\u043B\u0456\u0432? +ClearNodesData.ui.description=\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0441\u0442\u043E\u0432\u043F\u0446\u0456: +SelectEdgesOnTable.name=\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044C \u043F\u043E\u0432\u2019\u044F\u0437\u0430\u043D\u0456 \u0440\u0435\u0431\u0440\u0430 +UngroupRecursively.description=\u0420\u043E\u0437\u0433\u0440\u0443\u043F\u0443\u0439\u0442\u0435 \u0432\u0438\u0431\u0440\u0430\u043D\u0456 \u0433\u0440\u0443\u043F\u0438 \u0442\u0430 \u0457\u0445 \u043D\u0430\u0449\u0430\u0434\u043A\u0456\u0432 +DeleteNodes.name.single=\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 +OpenInEditNodeWindow.name=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0432\u0443\u0437\u043E\u043B +DeleteNodes.name.multiple=\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u0432\u0441\u0435 +SetNodesSize.name.single=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0438 \u0440\u043E\u0437\u043C\u0456\u0440 \u0432\u0443\u0437\u043B\u0430... +SetNodesSize.name.multiple=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0438 \u0440\u043E\u0437\u043C\u0456\u0440 \u0443\u0441\u0456\u0445 \u0432\u0443\u0437\u043B\u0456\u0432... +MergeNodes.name=\u041E\u0431\u2019\u0454\u0434\u043D\u0430\u0442\u0438 \u0432\u0443\u0437\u043B\u0438... +CopyNodes.name.single=\u0414\u0443\u0431\u043B\u044E\u0432\u0430\u0442\u0438 +CopyNodes.name.multiple=\u0414\u0443\u0431\u043B\u044E\u0432\u0430\u0442\u0438 \u0432\u0441\u0435 +MoveNodeToGroup.name.single=\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043E \u0433\u0440\u0443\u043F\u0438... +MoveNodeToGroup.name.multiple=\u041F\u0435\u0440\u0435\u043C\u0456\u0441\u0442\u0438\u0442\u0438 \u0432\u0441\u0456\u0445 \u0434\u043E \u0433\u0440\u0443\u043F\u0438... +ClearNodesData.description=\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u0438 \u0434\u0430\u043D\u0456 \u0432\u0438\u0431\u0440\u0430\u043D\u0438\u0445 \u0432\u0443\u0437\u043B\u0456\u0432 +ClearNodesData.name.single=\u041E\u0447\u0438\u0441\u0442\u0438\u0442\u0438... +CopyNodeDataToOtherNodes.description=\u0421\u043A\u043E\u043F\u0456\u044E\u0439\u0442\u0435 \u0432\u0438\u0431\u0440\u0430\u043D\u0456 \u0441\u0442\u043E\u0432\u043F\u0446\u0456 \u0432\u0443\u0437\u043B\u0430 \u0434\u043E \u0456\u043D\u0448\u0438\u0445 \u0432\u0438\u0431\u0440\u0430\u043D\u0438\u0445 \u0432\u0443\u0437\u043B\u0456\u0432. +CopyNodeDataToOtherNodes.ui.rowDescription=\u041A\u043E\u043F\u0456\u044E\u0432\u0430\u0442\u0438 \u0432\u0443\u0437\u043E\u043B: +OpenInEditNodeWindow.description=\u0417\u043C\u0456\u043D\u0438\u0442\u0438 \u0440\u043E\u0437\u043C\u0456\u0440, \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u043D\u044F, \u043A\u043E\u043B\u0456\u0440 \u0456 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0438. +OpenInEditNodeWindow.description.multiple=\u0417\u043C\u0456\u043D\u0438\u0442\u0438 \u0440\u043E\u0437\u043C\u0456\u0440, \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u043D\u044F, \u043A\u043E\u043B\u0456\u0440 \u0456 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0438. \u0421\u043F\u043E\u0447\u0430\u0442\u043A\u0443 \u043F\u043E\u043B\u044F \u0431\u0443\u0434\u0443\u0442\u044C \u043F\u043E\u0440\u043E\u0436\u043D\u0456\u043C\u0438. +OpenInEditNodeWindow.name.multiple=\u0412\u0456\u0434\u0440\u0435\u0434\u0430\u0433\u0443\u0439\u0442\u0435 \u0432\u0441\u0456 \u0432\u0443\u0437\u043B\u0438 +SelectNeighboursOnTable.name=\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044C \u0441\u0443\u0441\u0456\u0434\u043D\u0456 \u0432\u0443\u0437\u043B\u0438 \u0432 \u0442\u0430\u0431\u043B\u0438\u0446\u0456 +LinkNodes.name=\u041F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F \u043D\u0430 \u0432\u0443\u0437\u043B\u0438... +SelectOnGraph.name=\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044C \u041E\u0433\u043B\u044F\u0434 +UngroupRecursively.name.multiple=\u0420\u043E\u0437\u0433\u0440\u0443\u043F\u0443\u0432\u0430\u0442\u0438 \u0432\u0438\u0431\u0440\u0430\u043D\u0456 \u0433\u0440\u0443\u043F\u0438 \u0440\u0435\u043A\u0443\u0440\u0441\u0438\u0432\u043D\u043E +CopyNodeDataToOtherNodes.name=\u041F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u0430\u0442\u0438 \u0434\u0430\u043D\u0456 \u043D\u0430 \u0456\u043D\u0448\u0456 \u0432\u0438\u0431\u0440\u0430\u043D\u0456 \u0432\u0443\u0437\u043B\u0438... +CopyNodeDataToOtherNodes.ui.columnsDescription=\u041F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u0430\u0442\u0438 \u0441\u0442\u043E\u0432\u043F\u0446\u0456: +Free.name.multiple=\u0411\u0435\u0437\u043A\u043E\u0448\u0442\u043E\u0432\u043D\u043E \u0432\u0441\u0435 +RemoveNodeFromGroup.name.single=\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u0437\u0456 \u0441\u0432\u043E\u0454\u0457 \u0433\u0440\u0443\u043F\u0438 +RemoveNodeFromGroup.name.multiple=\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u0432\u0441\u0456\u0445 \u0437\u0456 \u0441\u0432\u043E\u0454\u0457 \u0433\u0440\u0443\u043F\u0438 +Ungroup.name.single=\u0420\u043E\u0437\u0433\u0440\u0443\u043F\u0443\u0432\u0430\u0442\u0438 +Settle.name.single=\u0420\u043E\u0437\u0440\u0430\u0445\u0443\u043D\u043E\u043A +Settle.name.multiple=\u0420\u043E\u0437\u0440\u0430\u0445\u0443\u0432\u0430\u0442\u0438 \u0432\u0441\u0435 +Free.name.single=\u0411\u0435\u0437\u043A\u043E\u0448\u0442\u043E\u0432\u043D\u043E +UngroupRecursively.name.single=\u0420\u043E\u0437\u0433\u0440\u0443\u043F\u0443\u0432\u0430\u0442\u0438 \u0440\u0435\u043A\u0443\u0440\u0441\u0438\u0432\u043D\u043E +MergeNodes.description=\u0423\u0441\u0456 \u0432\u0443\u0437\u043B\u0438 \u043E\u0431\u2019\u0454\u0434\u043D\u0443\u044E\u0442\u044C\u0441\u044F \u0432 \u043D\u043E\u0432\u0438\u0439, \u043F\u043E\u0454\u0434\u043D\u0443\u044E\u0447\u0438 \u0440\u0435\u0431\u0440\u0430 \u0442\u0430 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0437\u0430 \u0434\u043E\u043F\u043E\u043C\u043E\u0433\u043E\u044E \u0440\u0456\u0437\u043D\u0438\u0445 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0456\u0439 +LinkNodes.description=\u0421\u0442\u0432\u043E\u0440\u0456\u0442\u044C \u0440\u0435\u0431\u0440\u0430 (\u0441\u043F\u0440\u044F\u043C\u043E\u0432\u0430\u043D\u0456 \u0430\u0431\u043E \u043D\u0435\u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0456) \u043C\u0456\u0436 \u043E\u0434\u043D\u0438\u043C \u0432\u0443\u0437\u043B\u043E\u043C \u0456 \u0432\u0441\u0456\u043C\u0430 \u0432\u0438\u0431\u0440\u0430\u043D\u0438\u043C\u0438 \u0432\u0443\u0437\u043B\u0430\u043C\u0438 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_zh_CN.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_zh_CN.properties index dd2cd3aeb3..97e78befec 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_zh_CN.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_zh_CN.properties @@ -1,86 +1,40 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:18+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - OpenInEditNodeWindow.name=\u7f16\u8f91\u8282\u70b9 - OpenInEditNodeWindow.name.multiple=\u7f16\u8f91\u6240\u6709\u8282\u70b9 - OpenInEditNodeWindow.description=\u6539\u53d8\u5927\u5c0f\u3001\u4f4d\u7f6e\u3001\u989c\u8272\u548c\u5c5e\u6027\u3002 - OpenInEditNodeWindow.description.multiple=\u6539\u53d8\u5927\u5c0f\u3001\u4f4d\u7f6e\u3001\u989c\u8272\u548c\u5c5e\u6027\u3002\u521d\u59cb\u503c\u4e3a\u7a7a\u3002 - -SelectOnGraph.name=\u5728\u6982\u8ff0\u9009\u62e9 - +SelectOnGraph.name=\u9009\u62E9\u6982\u89C8 SelectNeighboursOnTable.name=\u5728\u8868\u683c\u9009\u62e9\u4e34\u8fd1\u8282\u70b9 - SelectEdgesOnTable.name=\u9009\u62e9\u76f8\u5173\u7684\u8fb9 - DeleteNodes.name.single=\u5220\u9664 - DeleteNodes.name.multiple=\u5168\u90e8\u5220\u9664 - DeleteNodes.confirmation.message=\u786e\u5b9a\u5220\u9664\u8282\u70b9\uff1f - ClearNodesData.name.single=\u5220\u9664\u2026\u2026 - ClearNodesData.name.multiple=\u5220\u9664\u6240\u6709\u2026\u2026 - ClearNodesData.description=\u5220\u9664\u9009\u62e9\u8282\u70b9\u7684\u6570\u636e - -ClearNodesData.ui.description=\u5220\u9664\u5217 - +ClearNodesData.ui.description=\u6E05\u9664\u5217\uFF1A CopyNodeDataToOtherNodes.name=\u8986\u76d6\u6570\u636e\u5230\u5176\u5b83\u9009\u62e9\u7684\u8282\u70b9\u2026\u2026 - CopyNodeDataToOtherNodes.description=\u590d\u5236\u9009\u62e9\u7684\u8282\u70b9\u5217\u5230\u9009\u62e9\u7684\u5176\u5b83\u8282\u70b9\u3002 - CopyNodeDataToOtherNodes.ui.rowDescription=\u590d\u5236\u8282\u70b9\uff1a - CopyNodeDataToOtherNodes.ui.columnsDescription=\u8986\u76d6\u5217\uff1a - Group.name=\u7ec4 - Ungroup.name.single=\u53d6\u6d88\u7ec4 - Ungroup.name.multiple=\u53d6\u6d88\u9009\u62e9\u7684\u7ec4 - UngroupRecursively.name.single=\u9012\u5f52\u7684\u53d6\u6d88\u7ec4\u7fa4 - UngroupRecursively.name.multiple=\u9012\u5f52\u53d6\u6d88\u6240\u9009\u7684\u7ec4 - UngroupRecursively.description=\u53d6\u6d88\u6240\u9009\u7684\u7ec4\u548c\u5b50jiedian - -MoveNodeToGroup.name.single=\u79fb\u52a8\u5230\u7ec4 - -MoveNodeToGroup.name.multiple=\u5168\u90e8\u79fb\u52a8\u5230\u7ec4 - +MoveNodeToGroup.name.single=\u79FB\u52A8\u5230\u7EC4\u2026 +MoveNodeToGroup.name.multiple=\u5168\u90E8\u79FB\u52A8\u5230\u7EC4\u2026 RemoveNodeFromGroup.name.single=\u4ece\u7ec4\u91cc\u79fb\u9664 - RemoveNodeFromGroup.name.multiple=\u4ece\u7ec4\u91cc\u5168\u90e8\u79fb\u9664 - Settle.name.single=\u786e\u5b9a - Settle.name.multiple=\u5168\u90e8\u786e\u5b9a - Free.name.single=\u91ca\u653e - Free.name.multiple=\u5168\u90e8\u91ca\u653e - -SetNodesSize.name.single=\u8bbe\u5b9a\u8282\u70b9\u5927\u5c0f - -SetNodesSize.name.multiple=\u8bbe\u5b9a\u6240\u6709\u8282\u70b9\u5927\u5c0f - -MergeNodes.name=\u5408\u5e76\u8282\u70b9 - -MergeNodes.description=\u6240\u6709\u8282\u70b9\u88ab\u5408\u5e76\u4e3a\u4e00\u4e2a\u65b0\u7684\u8282\u70b9\uff0c\u7528\u4e0d\u540c\u7684\u65b9\u6cd5\u5408\u5e76\u8fb9\u548c\u6570\u503c\u3002 - +SetNodesSize.name.single=\u8BBE\u5B9A\u8282\u70B9\u5927\u5C0F\u2026 +SetNodesSize.name.multiple=\u8BBE\u5B9A\u6240\u6709\u8282\u70B9\u5927\u5C0F\u2026 +MergeNodes.name=\u5408\u5E76\u8282\u70B9\u2026 +MergeNodes.description=\u6240\u6709\u8282\u70B9\u88AB\u5408\u5E76\u4E3A\u4E00\u4E2A\u65B0\u7684\u8282\u70B9\uFF0C\u7528\u4E0D\u540C\u7684\u65B9\u6CD5\u5408\u5E76\u8FB9\u548C\u6570\u503C LinkNodes.name=\u8fde\u63a5\u5230\u8282\u70b9\u2026\u2026 - LinkNodes.description=\u521b\u5efa\u8282\u70b9\u548c\u6240\u6709\u9009\u62e9\u8282\u70b9\u95f4\u7684\u8fb9\uff08\u6709\u5411\u7684\u6216\u8005\u65e0\u5411\u7684\uff09 - CopyNodes.name.single=\u590d\u5236 - CopyNodes.name.multiple=\u5168\u90e8\u590d\u5236 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_zh_TW.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_zh_TW.properties new file mode 100644 index 0000000000..fddfac63ac --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/Bundle_zh_TW.properties @@ -0,0 +1,40 @@ +OpenInEditNodeWindow.name=\u7de8\u8f2f\u7bc0\u9ede +OpenInEditNodeWindow.name.multiple=\u7de8\u8f2f\u6240\u6709\u7bc0\u9ede +OpenInEditNodeWindow.description=\u8b8a\u66f4\u7bc0\u9ede\u5927\u5c0f\uff0c\u4f4d\u7f6e\uff0c\u984f\u8272\u53ca\u5c6c\u6027\u8cc7\u6599\u3002 +OpenInEditNodeWindow.description.multiple=\u8b8a\u66f4\u7bc0\u9ede\u5927\u5c0f\uff0c\u4f4d\u7f6e\uff0c\u984f\u8272\u53ca\u5c6c\u6027\u3002\u6b04\u4f4d\u8cc7\u6599\u5c07\u6703\u5148\u88ab\u6e05\u7a7a\u3002 +SelectOnGraph.name=\u65bc\u7e3d\u652c\u4e2d\u9078\u53d6 +SelectNeighboursOnTable.name=\u65bc\u8cc7\u6599\u4e2d\u9078\u53d6\u9130\u8fd1\u7bc0\u9ede +SelectEdgesOnTable.name=\u9078\u53d6\u76f8\u95dc\u806f\u7684\u9023\u7d50 +DeleteNodes.name.single=\u522a\u9664 +DeleteNodes.name.multiple=\u522a\u9664\u5168\u90e8 +DeleteNodes.confirmation.message=\u78ba\u8a8d\u522a\u9664\u7bc0\u9ede\uff1f +ClearNodesData.name.single=\u6e05\u9664... +ClearNodesData.name.multiple=\u6e05\u9664\u5168\u90e8... +ClearNodesData.description=\u6e05\u9664\u9078\u53d6\u7bc0\u9ede\u7684\u8cc7\u6599 +ClearNodesData.ui.description=\u6e05\u9664\u6574\u6b04\uff1a +CopyNodeDataToOtherNodes.name=\u8986\u5beb\u5176\u5b83\u6240\u9078\u7bc0\u9ede\u7684\u8cc7\u6599... +CopyNodeDataToOtherNodes.description=\u8907\u88fd\u6240\u9078\u7bc0\u9ede\u6b04\u4f4d\u8cc7\u6599\u5230\u5176\u4ed6\u6240\u9078\u7bc0\u9ede\u3002 +CopyNodeDataToOtherNodes.ui.rowDescription=\u8907\u88fd\u7bc0\u9ede\uff1a +CopyNodeDataToOtherNodes.ui.columnsDescription=\u8986\u84cb\u6b04\u4f4d\uff1a +Group.name=\u7fa4\u7d44\u5316 +Ungroup.name.single=\u53d6\u6d88\u7fa4\u7d44 +Ungroup.name.multiple=\u53d6\u6d88\u6240\u9078\u7fa4\u7d44 +UngroupRecursively.name.single=\u905e\u8ff4\u53d6\u6d88\u7fa4\u7d44 +UngroupRecursively.name.multiple=\u905e\u8ff4\u53d6\u6d88\u6240\u9078\u7fa4\u7d44 +UngroupRecursively.description=\u53d6\u6d88\u6240\u9078\u7fa4\u7d44\u53ca\u5176\u5167\u5305\u542b\u7684\u7fa4\u7d44 +MoveNodeToGroup.name.single=\u642c\u79fb\u81f3\u7fa4\u7d44... +MoveNodeToGroup.name.multiple=Move all to group... +RemoveNodeFromGroup.name.single=Remove from its group +RemoveNodeFromGroup.name.multiple=Remove all from their group +Settle.name.single=\u56fa\u5b9a +Settle.name.multiple=Settle all +Free.name.single=\u91cb\u653e +Free.name.multiple=Free all +SetNodesSize.name.single=Set node size... +SetNodesSize.name.multiple=Set all nodes size... +MergeNodes.name=Merge nodes... +MergeNodes.description=All nodes are merged into a new one, combining the edges and values using different strategies +LinkNodes.name=Link to nodes... +LinkNodes.description=Create edges (directed or undirected) between one node and all the selected nodes +CopyNodes.name.single=\u8907\u88fd +CopyNodes.name.multiple=Duplicate all diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/cs.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/cs.po deleted file mode 100644 index e6ba426cef..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/cs.po +++ /dev/null @@ -1,139 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-27 14:03+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenInEditNodeWindow.name" -msgstr "Upravit uzel" - -msgid "OpenInEditNodeWindow.name.multiple" -msgstr "Upravit vΕ‘echny uzle" - -msgid "OpenInEditNodeWindow.description" -msgstr "ZmΔ›nit velikost, umΓ­stΔ›nΓ­, barvu a vlastnosti." - -msgid "OpenInEditNodeWindow.description.multiple" -msgstr "ZmΔ›nit velikost, umΓ­stΔ›nΓ­, barvu a vlastnosti. Pole budou zpočÑtku prΓ‘zdnΓ‘." - -msgid "SelectOnGraph.name" -msgstr "Vybrat pΕ™ehled" - -msgid "SelectNeighboursOnTable.name" -msgstr "Vybrat sousedΓ­cΓ­ uzle v tabulce" - -msgid "SelectEdgesOnTable.name" -msgstr "Vybrat souvisejΓ­cΓ­ hrany" - -msgid "DeleteNodes.name.single" -msgstr "Smazat" - -msgid "DeleteNodes.name.multiple" -msgstr "Smazat vΕ‘e" - -msgid "DeleteNodes.confirmation.message" -msgstr "Potvrdit smazΓ‘nΓ­ uzle?" - -msgid "ClearNodesData.name.single" -msgstr "Vyčistit..." - -msgid "ClearNodesData.name.multiple" -msgstr "Vyčisti vΕ‘e..." - -msgid "ClearNodesData.description" -msgstr "Vyčistit data z vybranΓ½ch uzlΕ―" - -msgid "ClearNodesData.ui.description" -msgstr "Vyčistit sloupce:" - -msgid "CopyNodeDataToOtherNodes.name" -msgstr "PΕ™epsat data na dalΕ‘Γ­ vybranΓ© uzly..." - -msgid "CopyNodeDataToOtherNodes.description" -msgstr "KopΓ­rovat vybranΓ© sloupce uzlΕ― na dalΕ‘Γ­ vybranΓ© uzly." - -msgid "CopyNodeDataToOtherNodes.ui.rowDescription" -msgstr "KopΓ­rovat uzel:" - -msgid "CopyNodeDataToOtherNodes.ui.columnsDescription" -msgstr "PΕ™epsat sloupce:" - -msgid "Group.name" -msgstr "Seskupit" - -msgid "Ungroup.name.single" -msgstr "RozdΔ›lit" - -msgid "Ungroup.name.multiple" -msgstr "RozdΔ›lit vybranΓ© skupiny" - -msgid "UngroupRecursively.name.single" -msgstr "RozdΔ›lit rekurzivnΔ›" - -msgid "UngroupRecursively.name.multiple" -msgstr "RozdΔ›lit vybranΓ© skupiny rekurzivnΔ›" - -msgid "UngroupRecursively.description" -msgstr "RozdΔ›lit vybranΓ© skupiny a jejich nΓ‘slednΓ­ky" - -msgid "MoveNodeToGroup.name.single" -msgstr "PΕ™esunout do skupiny..." - -msgid "MoveNodeToGroup.name.multiple" -msgstr "PΕ™esunout vΕ‘e do skupiny..." - -msgid "RemoveNodeFromGroup.name.single" -msgstr "Odstranit ze skupiny" - -msgid "RemoveNodeFromGroup.name.multiple" -msgstr "Odstranit vΕ‘e ze skupiny" - -msgid "Settle.name.single" -msgstr "Urovnat" - -msgid "Settle.name.multiple" -msgstr "Urovnat vΕ‘e" - -msgid "Free.name.single" -msgstr "Uvolnit" - -msgid "Free.name.multiple" -msgstr "Uvolnit vΕ‘e" - -msgid "SetNodesSize.name.single" -msgstr "Nastavit velikost uzlu..." - -msgid "SetNodesSize.name.multiple" -msgstr "Nastavit velikost vΕ‘ech uzlΕ―..." - -msgid "MergeNodes.name" -msgstr "Sloučit uzle..." - -msgid "MergeNodes.description" -msgstr "VΕ‘echny uzle jsou sloučeny do novΓ©ho, spojenΓ­m hran a hodnot pomocΓ­ rΕ―znΓ½ch strategiΓ­" - -msgid "LinkNodes.name" -msgstr "Odkazy na uzle..." - -msgid "LinkNodes.description" -msgstr "VytvoΕ™it hrany (Ε™Γ­zenΓ© či neΕ™Γ­zenΓ©) mezi jednΓ­m uzlem a vybranΓ½mi uzly" - -msgid "CopyNodes.name.single" -msgstr "KopΓ­rovat" - -msgid "CopyNodes.name.multiple" -msgstr "KopΓ­rovat vΕ‘e" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/es.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/es.po deleted file mode 100644 index f10695244c..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/es.po +++ /dev/null @@ -1,140 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:40+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenInEditNodeWindow.name" -msgstr "Editar nodo" - -msgid "OpenInEditNodeWindow.name.multiple" -msgstr "Editar todos nodos" - -msgid "OpenInEditNodeWindow.description" -msgstr "Cambiar tamaΓ±o, posiciΓ³n, color y atributos." - -msgid "OpenInEditNodeWindow.description.multiple" -msgstr "Cambiar tamaΓ±o, posiciΓ³n, color y atributos. Los campos estarΓ‘n vacΓ­os inicialmente." - -msgid "SelectOnGraph.name" -msgstr "Seleccionar en la vista del grafo" - -msgid "SelectNeighboursOnTable.name" -msgstr "Seleccionar nodos vecinos en la tabla" - -msgid "SelectEdgesOnTable.name" -msgstr "Seleccionar aristas relacionadas" - -msgid "DeleteNodes.name.single" -msgstr "Eliminar" - -msgid "DeleteNodes.name.multiple" -msgstr "Eliminar todos" - -msgid "DeleteNodes.confirmation.message" -msgstr "ΒΏConfirmar borrado de nodo(s)?" - -msgid "ClearNodesData.name.single" -msgstr "Borrar datos del nodo..." - -msgid "ClearNodesData.name.multiple" -msgstr "Borrar datos de todos los nodos..." - -msgid "ClearNodesData.description" -msgstr "Borrar datos lo(s) nodo(s) seleccionado(s)" - -msgid "ClearNodesData.ui.description" -msgstr "Borrar columnas:" - -msgid "CopyNodeDataToOtherNodes.name" -msgstr "Sobreescribir datos a los otros nodos seleccionados..." - -msgid "CopyNodeDataToOtherNodes.description" -msgstr "Copia las columnas del nodo seleccionado a los otros nodos seleccionados" - -msgid "CopyNodeDataToOtherNodes.ui.rowDescription" -msgstr "Copiar nodo:" - -msgid "CopyNodeDataToOtherNodes.ui.columnsDescription" -msgstr "Sobreescribir columnas:" - -msgid "Group.name" -msgstr "Agrupar" - -msgid "Ungroup.name.single" -msgstr "Desagrupar" - -msgid "Ungroup.name.multiple" -msgstr "Desagrupar grupos seleccionados" - -msgid "UngroupRecursively.name.single" -msgstr "Desagrupar recursivamente" - -msgid "UngroupRecursively.name.multiple" -msgstr "Desagrupar grupos seleccionados recursivamente" - -msgid "UngroupRecursively.description" -msgstr "Desagrupa los grupos seleccionados y sus descendientes" - -msgid "MoveNodeToGroup.name.single" -msgstr "Mover a grupo..." - -msgid "MoveNodeToGroup.name.multiple" -msgstr "Mover todos a grupo..." - -msgid "RemoveNodeFromGroup.name.single" -msgstr "Quitar del grupo" - -msgid "RemoveNodeFromGroup.name.multiple" -msgstr "Quitar todos de su grupo" - -msgid "Settle.name.single" -msgstr "Bloquear" - -msgid "Settle.name.multiple" -msgstr "Bloquear todos" - -msgid "Free.name.single" -msgstr "Desbloquear" - -msgid "Free.name.multiple" -msgstr "Desbloquear todos" - -msgid "SetNodesSize.name.single" -msgstr "Configurar tamaΓ±o del nodo..." - -msgid "SetNodesSize.name.multiple" -msgstr "Configurar tamaΓ±o de los nodos..." - -msgid "MergeNodes.name" -msgstr "Mezclar nodos..." - -msgid "MergeNodes.description" -msgstr "Todos los nodos son mezclados creando uno nuevo, combinando las aristas y valores utilizando diferentes estrategias" - -msgid "LinkNodes.name" -msgstr "Enlazar a nodos..." - -msgid "LinkNodes.description" -msgstr "Crea aristas (dirigidas o no dirigidas) entre el nodo escogido y todos los demΓ‘s nodos seleccionados" - -msgid "CopyNodes.name.single" -msgstr "Duplicar" - -msgid "CopyNodes.name.multiple" -msgstr "Duplicar todos" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/fr.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/fr.po deleted file mode 100644 index a1dedbc9d7..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/fr.po +++ /dev/null @@ -1,140 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-07 11:16+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenInEditNodeWindow.name" -msgstr "Editer le noeud" - -msgid "OpenInEditNodeWindow.name.multiple" -msgstr "Editer tous les noeuds" - -msgid "OpenInEditNodeWindow.description" -msgstr "Change la taille, couleur, position et attributs." - -msgid "OpenInEditNodeWindow.description.multiple" -msgstr "Change la taille, couleur, position et attributs. Les champs sont vides au dΓ©but." - -msgid "SelectOnGraph.name" -msgstr "SΓ©lectionner dans la Vue d'Ensemble" - -msgid "SelectNeighboursOnTable.name" -msgstr "SΓ©lectionner les noeuds voisins" - -msgid "SelectEdgesOnTable.name" -msgstr "SΓ©lectionner les liens connectΓ©s" - -msgid "DeleteNodes.name.single" -msgstr "Supprimer" - -msgid "DeleteNodes.name.multiple" -msgstr "Tout supprimer" - -msgid "DeleteNodes.confirmation.message" -msgstr "Confirmer la suppression des noeuds ?" - -msgid "ClearNodesData.name.single" -msgstr "Effacer..." - -msgid "ClearNodesData.name.multiple" -msgstr "Tout effacer..." - -msgid "ClearNodesData.description" -msgstr "Effacer les donnΓ©es des noeuds sΓ©lectionnΓ©s" - -msgid "ClearNodesData.ui.description" -msgstr "Effacer les colonnes :" - -msgid "CopyNodeDataToOtherNodes.name" -msgstr "Ecraser les donnΓ©es des autres noeuds sΓ©lectionnΓ©s..." - -msgid "CopyNodeDataToOtherNodes.description" -msgstr "Copier les colonnes du noeud vers les autres noeuds sΓ©lectionnΓ©s" - -msgid "CopyNodeDataToOtherNodes.ui.rowDescription" -msgstr "Copier le noeud :" - -msgid "CopyNodeDataToOtherNodes.ui.columnsDescription" -msgstr "Ecraser les colonnes :" - -msgid "Group.name" -msgstr "Grouper" - -msgid "Ungroup.name.single" -msgstr "DΓ©grouper" - -msgid "Ungroup.name.multiple" -msgstr "DΓ©grouper les noeuds sΓ©lectionnΓ©s" - -msgid "UngroupRecursively.name.single" -msgstr "DΓ©grouper rΓ©cursivement" - -msgid "UngroupRecursively.name.multiple" -msgstr "DΓ©grouper la sΓ©lection rΓ©cursivement" - -msgid "UngroupRecursively.description" -msgstr "DΓ©grouper les groupes sΓ©lectionnΓ©s et leur descendants" - -msgid "MoveNodeToGroup.name.single" -msgstr "DΓ©placer dans un groupe..." - -msgid "MoveNodeToGroup.name.multiple" -msgstr "Tout dΓ©placer dans un groupe..." - -msgid "RemoveNodeFromGroup.name.single" -msgstr "Retirer de son groupe" - -msgid "RemoveNodeFromGroup.name.multiple" -msgstr "Tout retirer des groupes" - -msgid "Settle.name.single" -msgstr "Fixer" - -msgid "Settle.name.multiple" -msgstr "Tout fixer" - -msgid "Free.name.single" -msgstr "RelΓ’cher" - -msgid "Free.name.multiple" -msgstr "Tout relΓ’cher" - -msgid "SetNodesSize.name.single" -msgstr "DΓ©finir la taille..." - -msgid "SetNodesSize.name.multiple" -msgstr "DΓ©finir la taille de tous..." - -msgid "MergeNodes.name" -msgstr "Fusionner les noeuds..." - -msgid "MergeNodes.description" -msgstr "Tous les noeuds sont fusionnΓ©s dans un nouveau noeud unique, combinant les liens et les valeurs d'attributs par diffΓ©rentes stratΓ©gies." - -msgid "LinkNodes.name" -msgstr "Connecter aux noeuds..." - -msgid "LinkNodes.description" -msgstr "CrΓ©er les liens (direct ou non) entre un noeud et tous les autres sΓ©lectionnΓ©s" - -msgid "CopyNodes.name.single" -msgstr "Dupliquer" - -msgid "CopyNodes.name.multiple" -msgstr "Tout dupliquer" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ja.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ja.po deleted file mode 100644 index bc5f2569b1..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ja.po +++ /dev/null @@ -1,139 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-27 08:12+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenInEditNodeWindow.name" -msgstr "γƒŽγƒΌγƒ‰γη·¨ι›†" - -msgid "OpenInEditNodeWindow.name.multiple" -msgstr "すべてγγƒŽγƒΌγƒ‰γη·¨ι›†" - -msgid "OpenInEditNodeWindow.description" -msgstr "ァむズ、位η½γ€θ‰²γŠγ‚ˆγ³ε±žζ€§γε€‰ζ›΄γ€‚" - -msgid "OpenInEditNodeWindow.description.multiple" -msgstr "ァむズ、位η½γ€θ‰²γŠγ‚ˆγ³ε±žζ€§γε€‰ζ›΄γ€‚ζœ€εˆγ―空欄です。" - -msgid "SelectOnGraph.name" -msgstr "ζ¦‚θ¦γ§ιΈζŠž" - -msgid "SelectNeighboursOnTable.name" -msgstr "γƒ†γƒΌγƒ–γƒ«γ§ιš£ζŽ₯γƒŽγƒΌγƒ‰γ‚’ιΈζŠž" - -msgid "SelectEdgesOnTable.name" -msgstr "ι–’ι€£γ™γ‚‹θΎΊγ‚’ιΈζŠž" - -msgid "DeleteNodes.name.single" -msgstr "ε‰Šι™€" - -msgid "DeleteNodes.name.multiple" -msgstr "すべてγε‰Šι™€" - -msgid "DeleteNodes.confirmation.message" -msgstr "γƒŽγƒΌγƒ‰γε‰Šι™€γη’ΊθͺοΌŸ" - -msgid "ClearNodesData.name.single" -msgstr "γ‚―γƒͺγ‚’..." - -msgid "ClearNodesData.name.multiple" -msgstr "すべてをクγƒͺγ‚’..." - -msgid "ClearNodesData.description" -msgstr "ιΈζŠžγ—γŸγƒŽγƒΌγƒ‰γγƒ‡γƒΌγ‚Ώγ‚’γ‚―γƒͺγ‚’" - -msgid "ClearNodesData.ui.description" -msgstr "εˆ—γ‚’γ‚―γƒͺγ‚’:" - -msgid "CopyNodeDataToOtherNodes.name" -msgstr "データをεˆ₯γιΈζŠžγ—γŸγƒŽγƒΌγƒ‰γ«δΈŠζ›Έγ:" - -msgid "CopyNodeDataToOtherNodes.description" -msgstr "ιΈζŠžγ—γŸγƒŽγƒΌγƒ‰εˆ—γ‚’εˆ₯γιΈζŠžγ—γŸγƒŽγƒΌγƒ‰γ«γ‚³γƒ”γƒΌ" - -msgid "CopyNodeDataToOtherNodes.ui.rowDescription" -msgstr "γƒŽγƒΌγƒ‰γ‚’γ‚³γƒ”γƒΌ:" - -msgid "CopyNodeDataToOtherNodes.ui.columnsDescription" -msgstr "εˆ—γ‚’δΈŠζ›Έγ:" - -msgid "Group.name" -msgstr "γ‚°γƒ«γƒΌγƒ—εŒ–" - -msgid "Ungroup.name.single" -msgstr "γ‚°γƒ«γƒΌγƒ—εŒ–θ§£ι™€" - -msgid "Ungroup.name.multiple" -msgstr "ιΈζŠžγ—γŸγ‚°γƒ«γƒΌγƒ—γγ‚°γƒ«γƒΌγƒ—εŒ–θ§£ι™€" - -msgid "UngroupRecursively.name.single" -msgstr "ε†εΈ°ηš„γ«γ‚°γƒ«γƒΌγƒ—εŒ–γ‚’θ§£ι™€" - -msgid "UngroupRecursively.name.multiple" -msgstr "ιΈζŠžγ•γ‚ŒγŸγ‚°γƒ«γƒΌγƒ—γ‚’ε†εΈ°ηš„γ«γ‚°γƒ«γƒΌγƒ—εŒ–θ§£ι™€" - -msgid "UngroupRecursively.description" -msgstr "ιΈζŠžγ•γ‚ŒγŸγ‚°γƒ«γƒΌγƒ—γ¨γγζ΄Ύη”Ÿγ‚°γƒ«γƒΌγƒ—γγ‚°γƒ«γƒΌγƒ—εŒ–θ§£ι™€" - -msgid "MoveNodeToGroup.name.single" -msgstr "グループに移動:" - -msgid "MoveNodeToGroup.name.multiple" -msgstr "全てをグループに移動:" - -msgid "RemoveNodeFromGroup.name.single" -msgstr "γ‚°γƒ«γƒΌγƒ—γ‹γ‚‰ζŽ’ι™€" - -msgid "RemoveNodeFromGroup.name.multiple" -msgstr "γ™γΉγ¦γ‚’γ‚°γƒ«γƒΌγƒ—γ‹γ‚‰ζŽ’ι™€" - -msgid "Settle.name.single" -msgstr "ε›Ίεš" - -msgid "Settle.name.multiple" -msgstr "すべてを固εš" - -msgid "Free.name.single" -msgstr "可動" - -msgid "Free.name.multiple" -msgstr "すべてを可動" - -msgid "SetNodesSize.name.single" -msgstr "γƒŽγƒΌγƒ‰γγ‚΅γ‚€γ‚Ίγθ¨­εš..." - -msgid "SetNodesSize.name.multiple" -msgstr "すべてγγƒŽγƒΌγƒ‰γγ‚΅γ‚€γ‚Ίγθ¨­εš..." - -msgid "MergeNodes.name" -msgstr "γƒŽγƒΌγƒ‰γη΅±εˆ..." - -msgid "MergeNodes.description" -msgstr "すべてγγƒŽγƒΌγƒ‰γ―、εˆ₯γζˆ¦η•₯γ‚’δ½Ώγ£γ¦θΎΊγ¨ε€€γ‚’η΅„γΏεˆγ‚γ›γ€ζ–°γ—γ„γ‚‚γγ«η΅±εˆγ•γ‚ŒγΎγ™" - -msgid "LinkNodes.name" -msgstr "γƒŽγƒΌγƒ‰γΈγγƒͺンク..." - -msgid "LinkNodes.description" -msgstr "1぀γγƒŽγƒΌγƒ‰γ¨ιΈζŠžγ—γŸγ™γΉγ¦γγƒŽγƒΌγƒ‰ι–“γθΎΊ(ζœ‰ε‘γ‚°γƒ©γƒ•γΎγŸγ―η„‘ε‘)γ‚’δ½œζˆ" - -msgid "CopyNodes.name.single" -msgstr "耇写" - -msgid "CopyNodes.name.multiple" -msgstr "すべてγθ€‡ε†™" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/org-gephi-datalab-plugin-manipulators-nodes.pot b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/org-gephi-datalab-plugin-manipulators-nodes.pot deleted file mode 100644 index 395618f681..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/org-gephi-datalab-plugin-manipulators-nodes.pot +++ /dev/null @@ -1,141 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenInEditNodeWindow.name" -msgstr "Edit node" - -msgid "OpenInEditNodeWindow.name.multiple" -msgstr "Edit all nodes" - -msgid "OpenInEditNodeWindow.description" -msgstr "Change size, position, color and attributes." - -msgid "OpenInEditNodeWindow.description.multiple" -msgstr "" -"Change size, position, color and attributes. Fields will be blank at first." - -msgid "SelectOnGraph.name" -msgstr "Select on Overview" - -msgid "SelectNeighboursOnTable.name" -msgstr "Select neighbour nodes on table" - -msgid "SelectEdgesOnTable.name" -msgstr "Select related edges" - -msgid "DeleteNodes.name.single" -msgstr "Delete" - -msgid "DeleteNodes.name.multiple" -msgstr "Delete all" - -msgid "DeleteNodes.confirmation.message" -msgstr "Confirm nodes deletion?" - -msgid "ClearNodesData.name.single" -msgstr "Clear..." - -msgid "ClearNodesData.name.multiple" -msgstr "Clear all..." - -msgid "ClearNodesData.description" -msgstr "Clear data of the selected nodes" - -msgid "ClearNodesData.ui.description" -msgstr "Clear columns:" - -msgid "CopyNodeDataToOtherNodes.name" -msgstr "Overwrite data to the other selected nodes..." - -msgid "CopyNodeDataToOtherNodes.description" -msgstr "Copy the selected node columns to the other selected nodes." - -msgid "CopyNodeDataToOtherNodes.ui.rowDescription" -msgstr "Copy node:" - -msgid "CopyNodeDataToOtherNodes.ui.columnsDescription" -msgstr "Overwrite columns:" - -msgid "Group.name" -msgstr "Group" - -msgid "Ungroup.name.single" -msgstr "Ungroup" - -msgid "Ungroup.name.multiple" -msgstr "Ungroup selected groups" - -msgid "UngroupRecursively.name.single" -msgstr "Ungroup recursively" - -msgid "UngroupRecursively.name.multiple" -msgstr "Ungroup selected groups recursively" - -msgid "UngroupRecursively.description" -msgstr "Ungroup the selected groups and their descendants" - -msgid "MoveNodeToGroup.name.single" -msgstr "Move to group..." - -msgid "MoveNodeToGroup.name.multiple" -msgstr "Move all to group..." - -msgid "RemoveNodeFromGroup.name.single" -msgstr "Remove from its group" - -msgid "RemoveNodeFromGroup.name.multiple" -msgstr "Remove all from their group" - -msgid "Settle.name.single" -msgstr "Settle" - -msgid "Settle.name.multiple" -msgstr "Settle all" - -msgid "Free.name.single" -msgstr "Free" - -msgid "Free.name.multiple" -msgstr "Free all" - -msgid "SetNodesSize.name.single" -msgstr "Set node size..." - -msgid "SetNodesSize.name.multiple" -msgstr "Set all nodes size..." - -msgid "MergeNodes.name" -msgstr "Merge nodes..." - -msgid "MergeNodes.description" -msgstr "" -"All nodes are merged into a new one, combining the edges and values using " -"different strategies" - -msgid "LinkNodes.name" -msgstr "Link to nodes..." - -msgid "LinkNodes.description" -msgstr "" -"Create edges (directed or undirected) between one node and all the selected " -"nodes" - -msgid "CopyNodes.name.single" -msgstr "Duplicate" - -msgid "CopyNodes.name.multiple" -msgstr "Duplicate all" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/pt_BR.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/pt_BR.po deleted file mode 100644 index b1b4d12692..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/pt_BR.po +++ /dev/null @@ -1,139 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 23:45+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenInEditNodeWindow.name" -msgstr "Editar nΓ³" - -msgid "OpenInEditNodeWindow.name.multiple" -msgstr "Editar todos os nΓ³s" - -msgid "OpenInEditNodeWindow.description" -msgstr "Alterar tamanho, cor, posiΓ§Γ£o e atributos." - -msgid "OpenInEditNodeWindow.description.multiple" -msgstr "Alterar tamanho, cor, posiΓ§Γ£o e atributos. Os campos serΓ£o inicializados em branco." - -msgid "SelectOnGraph.name" -msgstr "Selecionar na VisΓ£o Geral" - -msgid "SelectNeighboursOnTable.name" -msgstr "Selecionar nΓ³s vizinhos na tabela" - -msgid "SelectEdgesOnTable.name" -msgstr "Selecionar arestas relacionadas" - -msgid "DeleteNodes.name.single" -msgstr "Excluir" - -msgid "DeleteNodes.name.multiple" -msgstr "Excluir todos" - -msgid "DeleteNodes.confirmation.message" -msgstr "Confirma a exclusΓ£o dos nΓ³s?" - -msgid "ClearNodesData.name.single" -msgstr "Limpar dados do nΓ³..." - -msgid "ClearNodesData.name.multiple" -msgstr "Limpar dados de todos os nΓ³s..." - -msgid "ClearNodesData.description" -msgstr "Limpar dados do(s) nΓ³(s) selecionado(s)" - -msgid "ClearNodesData.ui.description" -msgstr "Limpar valores das colunas:" - -msgid "CopyNodeDataToOtherNodes.name" -msgstr "Sobrescrever dados dos outros nΓ³s selecionados..." - -msgid "CopyNodeDataToOtherNodes.description" -msgstr "Copia as colunas do nΓ³ selecionado para os outros nΓ³s selecionados" - -msgid "CopyNodeDataToOtherNodes.ui.rowDescription" -msgstr "Copiar nΓ³:" - -msgid "CopyNodeDataToOtherNodes.ui.columnsDescription" -msgstr "Sobrescrever colunas:" - -msgid "Group.name" -msgstr "Agrupar" - -msgid "Ungroup.name.single" -msgstr "Desagrupar" - -msgid "Ungroup.name.multiple" -msgstr "Desagrupar selecionados" - -msgid "UngroupRecursively.name.single" -msgstr "Desagrupar recursivamente" - -msgid "UngroupRecursively.name.multiple" -msgstr "Desagrupar os grupos selecionados recursivamente" - -msgid "UngroupRecursively.description" -msgstr "Desagrupar os grupos selecionados e seus descendentes" - -msgid "MoveNodeToGroup.name.single" -msgstr "Mover para o grupo..." - -msgid "MoveNodeToGroup.name.multiple" -msgstr "Mover todos para o grupo..." - -msgid "RemoveNodeFromGroup.name.single" -msgstr "Remover de seu grupo" - -msgid "RemoveNodeFromGroup.name.multiple" -msgstr "Remover todos de seus grupos" - -msgid "Settle.name.single" -msgstr "Bloquear" - -msgid "Settle.name.multiple" -msgstr "Bloquear todos" - -msgid "Free.name.single" -msgstr "Desbloquear" - -msgid "Free.name.multiple" -msgstr "Desbloquear todos" - -msgid "SetNodesSize.name.single" -msgstr "Definir o tamanho do nΓ³..." - -msgid "SetNodesSize.name.multiple" -msgstr "Definir o tamanho de todos os nΓ³s..." - -msgid "MergeNodes.name" -msgstr "Mesclar nΓ³s..." - -msgid "MergeNodes.description" -msgstr "Todos os nΓ³s serΓ£o mesclados em um novo nΓ³, combinando as arestas e valores usando diferentes estratΓ©gias" - -msgid "LinkNodes.name" -msgstr "Conectar aos nΓ³s..." - -msgid "LinkNodes.description" -msgstr "Criar arestas (dirigidas ou nΓ£o) entre um nΓ³ e todos os nΓ³s selecionados" - -msgid "CopyNodes.name.single" -msgstr "Duplicar" - -msgid "CopyNodes.name.multiple" -msgstr "Duplicar todos" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ru.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ru.po deleted file mode 100644 index 5b9cce200e..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ru.po +++ /dev/null @@ -1,140 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -# FIRST AUTHOR , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 15:22+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenInEditNodeWindow.name" -msgstr "Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡƒΠ·Π΅Π»" - -msgid "OpenInEditNodeWindow.name.multiple" -msgstr "Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ всС ΡƒΠ·Π»Ρ‹" - -msgid "OpenInEditNodeWindow.description" -msgstr "Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€, ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ†Π²Π΅Ρ‚ ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹." - -msgid "OpenInEditNodeWindow.description.multiple" -msgstr "Π˜Π·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€, ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ†Π²Π΅Ρ‚ ΠΈ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹. Π˜Π·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ поля Π±ΡƒΠ΄ΡƒΡ‚ пустыми." - -msgid "SelectOnGraph.name" -msgstr "Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π² ΠΎΠΊΠ½Π΅ ΠΎΠ±Π·ΠΎΡ€Π°" - -msgid "SelectNeighboursOnTable.name" -msgstr "Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ сосСдниС ΡƒΠ·Π»Ρ‹ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅" - -msgid "SelectEdgesOnTable.name" -msgstr "Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ связанныС Ρ€Ρ‘Π±Ρ€Π°" - -msgid "DeleteNodes.name.single" -msgstr "Π£Π΄Π°Π»ΠΈΡ‚ΡŒ" - -msgid "DeleteNodes.name.multiple" -msgstr "Π£Π΄Π°Π»ΠΈΡ‚ΡŒ всС" - -msgid "DeleteNodes.confirmation.message" -msgstr "ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡƒΠ·Π»ΠΎΠ²?" - -msgid "ClearNodesData.name.single" -msgstr "ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ..." - -msgid "ClearNodesData.name.multiple" -msgstr "ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ всС..." - -msgid "ClearNodesData.description" -msgstr "ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Ρ… ΡƒΠ·Π»Π°Ρ…" - -msgid "ClearNodesData.ui.description" -msgstr "ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ столбцы:" - -msgid "CopyNodeDataToOtherNodes.name" -msgstr "ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ ΡƒΠ·Π»Ρ‹..." - -msgid "CopyNodeDataToOtherNodes.description" -msgstr "Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ столбцы Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π² Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ ΡƒΠ·Π»Ρ‹" - -msgid "CopyNodeDataToOtherNodes.ui.rowDescription" -msgstr "ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠ·Π»Ρ‹:" - -msgid "CopyNodeDataToOtherNodes.ui.columnsDescription" -msgstr "ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ столбцы:" - -msgid "Group.name" -msgstr "Π‘Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ" - -msgid "Ungroup.name.single" -msgstr "Π Π°Π·Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ" - -msgid "Ungroup.name.multiple" -msgstr "Π Π°Π·Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹" - -msgid "UngroupRecursively.name.single" -msgstr "Π Π°Π·Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ рСкурсивно" - -msgid "UngroupRecursively.name.multiple" -msgstr "Π Π°Π·Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹ рСкурсивно" - -msgid "UngroupRecursively.description" -msgstr "Π Π°Π·Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΈ ΠΈΡ… ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΎΠ²" - -msgid "MoveNodeToGroup.name.single" -msgstr "ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ Π² Π³Ρ€ΡƒΠΏΠΏΡƒ..." - -msgid "MoveNodeToGroup.name.multiple" -msgstr "ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚ΡŒ всё Π² Π³Ρ€ΡƒΠΏΠΏΡƒ..." - -msgid "RemoveNodeFromGroup.name.single" -msgstr "Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΈΠ· Π³Ρ€ΡƒΠΏΠΏΡ‹" - -msgid "RemoveNodeFromGroup.name.multiple" -msgstr "Π£Π΄Π°Π»ΠΈΡ‚ΡŒ всё ΠΈΠ· ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π³Ρ€ΡƒΠΏΠΏ" - -msgid "Settle.name.single" -msgstr "Π—Π°ΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ" - -msgid "Settle.name.multiple" -msgstr "Π—Π°ΠΊΡ€Π΅ΠΏΠΈΡ‚ΡŒ всё" - -msgid "Free.name.single" -msgstr "ΠžΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ" - -msgid "Free.name.multiple" -msgstr "ΠžΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ всё" - -msgid "SetNodesSize.name.single" -msgstr "Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΡƒΠ·Π»Π°..." - -msgid "SetNodesSize.name.multiple" -msgstr "Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ всСх ΡƒΠ·Π»ΠΎΠ²..." - -msgid "MergeNodes.name" -msgstr "Π‘ΠΊΠ»Π΅ΠΈΡ‚ΡŒ ΡƒΠ·Π»Ρ‹..." - -msgid "MergeNodes.description" -msgstr "ВсС ΡƒΠ·Π»Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ слиты Π² ΠΎΠ΄ΠΈΠ½ Π½ΠΎΠ²Ρ‹ΠΉ, Ρ€Π΅Π±Ρ€Π° ΠΈ ΠΌΠ΅Ρ‚ΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ сгСнСрированы ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹ΠΌ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°ΠΌ" - -msgid "LinkNodes.name" -msgstr "ΠŸΡ€ΠΈΠ²ΡΠ·Π°Ρ‚ΡŒ ΠΊ ΡƒΠ·Π»Π°ΠΌ..." - -msgid "LinkNodes.description" -msgstr "Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Ρ€Π΅Π±Ρ€ΠΎ (ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅ ΠΈΠ»ΠΈ Π½Π΅ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅) ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΎΠ΄Π½ΠΈΠΌ ΡƒΠ·Π»ΠΎΠΌ ΠΈ всСми Π²Ρ‹Ρ€Π±Ρ€Π°Π½Π½Ρ‹ΠΌΠΈ ΡƒΠ·Π»Π°ΠΌΠΈ" - -msgid "CopyNodes.name.single" -msgstr "Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ" - -msgid "CopyNodes.name.multiple" -msgstr "Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ всС" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle.properties index 15795fc6ed..88d8c12b5a 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle.properties @@ -1,4 +1,4 @@ -MergeNodesUI.description=One new node with the same color, size and position of the main selected node is created.
    Edges are assigned to the new node.
    Each column uses the given strategy to reduce the rows values to one value.
    Hierarchy is ignored. +MergeNodesUI.description=One new node with the same color, size and position of the main selected node is created.
    Edges are assigned to the new node.
    Each column uses the given strategy to reduce the rows values to one value. MergeNodesUI.deleteMergedNodesText=Delete merged nodes MergeNodesUI.selectedRowText=Main selected row: MergeNodesUI.configurationText=Configure diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_ar.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_ca.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_ca.properties new file mode 100644 index 0000000000..7539f38694 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_ca.properties @@ -0,0 +1,13 @@ +MergeNodesUI.description=One new node with the same color, size and position of the main selected node is created.
    Edges are assigned to the new node.
    Each column uses the given strategy to reduce the rows values to one value. +MergeNodesUI.deleteMergedNodesText=Delete merged nodes +MergeNodesUI.selectedRowText=Main selected row: +MergeNodesUI.configurationText=Configura +LinkNodesUI.descriptionLabel.text=Tria el node de sortida i el tipus d'arestes.
    Si es pot, es crearan arestes entre els nodes de sortida i els altres nodes seleccionats +LinkNodesUI.directedEdge.text=Dirigit +LinkNodesUI.undirectedEdge.text=No dirigit +LinkNodesUI.sourceNodeLabel.text=Node de sortida: +LinkNodesUI.edgeTypeLabel.text=Tipus s'aresta: +MoveNodeToGroupUI.descriptionLabel.text=Nou grup: +CopyNodesUI.descriptionLabel.text=Nombre de cςpies +SetNodesSizeUI.sizeLabel.text=Nova mida dels nodes +SetNodesSizeUI.sizeText.text= diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_cs.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_cs.properties index c035988c18..d2dd480007 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_cs.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_cs.properties @@ -1,31 +1,13 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-27 14\:20+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -MergeNodesUI.description=Je vytvo\u0159en jeden nov\u00fd uzel se stejnou barvou, velikost\u00ed a um\u00edst\u011bn\u00edm z hlavn\u00edho zvolen\u00e9ho uzle.
    Hrany jsou p\u0159id\u011bleny k nov\u00e9mu uzlu.
    Ka\u017ed\u00fd sloupec pou\u017e\u00edv\u00e1 zadanou strategii pro sn\u00ed\u017een\u00ed hodnot \u0159\u00e1dk\u016f na jendu hodnotu.
    Hierarchie je ignorov\u00e1na. - -MergeNodesUI.deleteMergedNodesText=Smazat slou\u010den\u00e9 uzle - -MergeNodesUI.selectedRowText=Hlavn\u00ed vybran\u00fd \u0159\u00e1dek - -MergeNodesUI.configurationText=Nastavit - -LinkNodesUI.descriptionLabel.text=Zvolte zdrojov\u00fd uzel a typ hran.
    Hrany mezi zdrojov\u00fdm uzlem a jin\u00fdmi vybran\u00fdmi uzly jsou vytvo\u0159eny, pokud je mo\u017enost. - -LinkNodesUI.directedEdge.text=\u0158\u00edzen\u00e9 - -LinkNodesUI.undirectedEdge.text=Ne\u0159\u00edzen\u00e9 - -LinkNodesUI.sourceNodeLabel.text=Zdrojov\u00fd uzel\: - -LinkNodesUI.edgeTypeLabel.text=Typ hrany\: - -MoveNodeToGroupUI.descriptionLabel.text=Nov\u00e1 skupina\: - -CopyNodesUI.descriptionLabel.text=Po\u010det kopi\u00ed\: - -SetNodesSizeUI.sizeLabel.text=Velikost nov\u00e9ho uzle\: +MergeNodesUI.description=Je vytvo\u0159en jeden novύ uzel se stejnou barvou, velikostν a umνst\u011bnνm z hlavnνho zvolenιho uzle.
    Hrany jsou p\u0159id\u011bleny k novιmu uzlu.
    Ka\u017edύ sloupec pou\u017eνvα zadanou strategii pro snν\u017eenν hodnot \u0159αdk\u016f na jendu hodnotu.
    Hierarchie je ignorovαna. +MergeNodesUI.deleteMergedNodesText=Smazat slou\u010denι uzle +MergeNodesUI.selectedRowText=Hlavnν vybranύ \u0159αdek +MergeNodesUI.configurationText=Nastavit +LinkNodesUI.descriptionLabel.text=Zvolte zdrojovύ uzel a typ hran.
    Hrany mezi zdrojovύm uzlem a jinύmi vybranύmi uzly jsou vytvo\u0159eny, pokud je mo\u017enost. +LinkNodesUI.directedEdge.text=\u0158νzenι +LinkNodesUI.undirectedEdge.text=Ne\u0159νzenι +LinkNodesUI.sourceNodeLabel.text=Zdrojovύ uzel: +LinkNodesUI.edgeTypeLabel.text=Typ hrany: +MoveNodeToGroupUI.descriptionLabel.text=Novα skupina: +CopyNodesUI.descriptionLabel.text=Po\u010det kopiν: +SetNodesSizeUI.sizeLabel.text=Velikost novιho uzle: +SetNodesSizeUI.sizeText.text= diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_de.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_de.properties new file mode 100644 index 0000000000..8595a66182 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_de.properties @@ -0,0 +1,13 @@ +MergeNodesUI.description=Ein neuer Knoten mit der selben Farbe, Grφίe und Position des primδr selektierten Knoten wird erstellt.
    Kanten werden dem neuen Knoten zugewiesen.
    Jede Spalte verwendet die angegebene Vorgehensweise um die Werte der Reihen zu einem auf einen Wert zu reduzieren. +MergeNodesUI.deleteMergedNodesText=Verschmolzene Knoten lφschen +MergeNodesUI.selectedRowText=Primδr ausgewδhlte Reihe: +MergeNodesUI.configurationText=Konfigurieren +LinkNodesUI.descriptionLabel.text=Wδhle den Startknoten und Typ der Kanten.
    Kanten zwischen dem Startknoten und den anderen selektierten Knoten werden wenn mφglich erstellt. +LinkNodesUI.directedEdge.text=Gerichtet +LinkNodesUI.undirectedEdge.text=Ungerichtet +LinkNodesUI.sourceNodeLabel.text=Startknoten: +LinkNodesUI.edgeTypeLabel.text=Kantentyp: +MoveNodeToGroupUI.descriptionLabel.text=Neue Gruppe: +CopyNodesUI.descriptionLabel.text=Anzahl der Kopien: +SetNodesSizeUI.sizeLabel.text=Neue Knotengrφίe: +SetNodesSizeUI.sizeText.text= diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_es.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_es.properties index 80ab1c9e0a..2c18c9a6b1 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_es.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_es.properties @@ -1,33 +1,13 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011, 2012. -# FIRST AUTHOR , 2010. -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-31 12\:39+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -MergeNodesUI.description=Un nuevo nodo con el mismo color, tama\u00f1o y posici\u00f3n que el nodo principal seleccionado es creado.
    Las aristas son asignadas al nuevo nodo.
    Cada columna utiliza la estrategia proporcionada para reducir los valores de las filas a un valor.
    La jerarqu\u00eda es ignorada - -MergeNodesUI.deleteMergedNodesText=Eliminar nodos mezclados - -MergeNodesUI.selectedRowText=Fila principal seleccionada\: - +MergeNodesUI.description=Se crea un nuevo nodo con el mismo color, tama\u00F1o y posici\u00F3n del nodo principal seleccionado.
    Se asignan aristas al nuevo nodo.
    Cada columna utiliza la estrategia dada para reducir los valores de las filas a un valor. +MergeNodesUI.deleteMergedNodesText=Eliminar nodos fusionados +MergeNodesUI.selectedRowText=Fila principal seleccionada: MergeNodesUI.configurationText=Configurar - -LinkNodesUI.descriptionLabel.text=Escoge el nodo origen y el tipo de la(s) arista(s).
    Se crear\u00e1n aristas entre el nodo seleccionado y todos los dem\u00e1s nodos cuando sea posible. - +LinkNodesUI.descriptionLabel.text=Elige el nodo origen y el tipo de las aristas.
    Si es posible, se crean aristas entre el nodo origen y los dem\u00E1s nodos seleccionados. LinkNodesUI.directedEdge.text=Dirigida - LinkNodesUI.undirectedEdge.text=No dirigida - -LinkNodesUI.sourceNodeLabel.text=Nodo origen\: - -LinkNodesUI.edgeTypeLabel.text=Tipo de arista\: - -MoveNodeToGroupUI.descriptionLabel.text=Nuevo grupo\: - -CopyNodesUI.descriptionLabel.text=N\u00famero de copias\: - -SetNodesSizeUI.sizeLabel.text=Nuevo tama\u00f1o\: +LinkNodesUI.sourceNodeLabel.text=Nodo origen: +LinkNodesUI.edgeTypeLabel.text=Tipo de arista: +MoveNodeToGroupUI.descriptionLabel.text=Nuevo grupo: +CopyNodesUI.descriptionLabel.text=Nϊmero de copias: +SetNodesSizeUI.sizeLabel.text=Nuevo tamaρo: +SetNodesSizeUI.sizeText.text= diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_fr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_fr.properties index eb500b4e3c..3580df7cda 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_fr.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_fr.properties @@ -1,32 +1,13 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-07 11\:12+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -MergeNodesUI.description=Cr\u00e9\u00e9 un nouveau noeud de m\u00eame couleur, taille et position que le principal s\u00e9lectionn\u00e9.
    Chaque colonne utilise une strat\u00e9gie pour r\u00e9duire les valeurs des lignes en une seule valeur.
    Ignore la hi\u00e9rarchie. - -MergeNodesUI.deleteMergedNodesText=Supprimer les noeuds fusionn\u00e9s - -MergeNodesUI.selectedRowText=Ligne s\u00e9lectionn\u00e9e principale \: - -MergeNodesUI.configurationText=Configurer - -LinkNodesUI.descriptionLabel.text=Choisissez le noeud source.
    Les liens entre ce noeud et les autres noeuds s\u00e9lectionn\u00e9s seront cr\u00e9\u00e9s si possible. - -LinkNodesUI.directedEdge.text=Dirig\u00e9 - -LinkNodesUI.undirectedEdge.text=Non dirig\u00e9 - -LinkNodesUI.sourceNodeLabel.text=Noeud source \: - -LinkNodesUI.edgeTypeLabel.text=Type de lien \: - -MoveNodeToGroupUI.descriptionLabel.text=Choisissez le groupe ou d\u00e9placer les noeuds - -CopyNodesUI.descriptionLabel.text=Nombre de copies \: - -SetNodesSizeUI.sizeLabel.text=Nouvelle taille des noeuds \: +MergeNodesUI.description=Crιι un nouveau noeud de mκme couleur, taille et position que le principal sιlectionnι.
    Chaque colonne utilise une stratιgie pour rιduire les valeurs des lignes en une seule valeur.
    Ignore la hiιrarchie. +MergeNodesUI.deleteMergedNodesText=Supprimer les noeuds fusionnιs +MergeNodesUI.selectedRowText=Ligne sιlectionnιe principale : +MergeNodesUI.configurationText=Configurer +LinkNodesUI.descriptionLabel.text=Choisissez le noeud source.
    Les liens entre ce noeud et les autres noeuds sιlectionnιs seront crιιs si possible. +LinkNodesUI.directedEdge.text=Dirigι +LinkNodesUI.undirectedEdge.text=Non dirigι +LinkNodesUI.sourceNodeLabel.text=Noeud source : +LinkNodesUI.edgeTypeLabel.text=Type de lien : +MoveNodeToGroupUI.descriptionLabel.text=Choisissez le groupe ou dιplacer les noeuds +CopyNodesUI.descriptionLabel.text=Nombre de copies : +SetNodesSizeUI.sizeLabel.text=Nouvelle taille des noeuds : +SetNodesSizeUI.sizeText.text= diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_he.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_he.properties new file mode 100644 index 0000000000..88d8c12b5a --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_he.properties @@ -0,0 +1,13 @@ +MergeNodesUI.description=One new node with the same color, size and position of the main selected node is created.
    Edges are assigned to the new node.
    Each column uses the given strategy to reduce the rows values to one value. +MergeNodesUI.deleteMergedNodesText=Delete merged nodes +MergeNodesUI.selectedRowText=Main selected row: +MergeNodesUI.configurationText=Configure +LinkNodesUI.descriptionLabel.text=Choose the source node and type of the edges.
    Edges between source node and the other selected nodes are created if possible. +LinkNodesUI.directedEdge.text=Directed +LinkNodesUI.undirectedEdge.text=Undirected +LinkNodesUI.sourceNodeLabel.text=Source node: +LinkNodesUI.edgeTypeLabel.text=Edge type: +MoveNodeToGroupUI.descriptionLabel.text=New group: +CopyNodesUI.descriptionLabel.text=Number of copies: +SetNodesSizeUI.sizeLabel.text=New nodes size: +SetNodesSizeUI.sizeText.text= diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_hu.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_hu.properties new file mode 100644 index 0000000000..35bf774abb --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_hu.properties @@ -0,0 +1,14 @@ + + +MergeNodesUI.selectedRowText=F\u0151 kiv\u00E1lasztott sor: +MergeNodesUI.configurationText=Be\u00E1ll\u00EDt\u00E1s +LinkNodesUI.sourceNodeLabel.text=Forr\u00E1s csom\u00F3pont: +LinkNodesUI.descriptionLabel.text=V\u00E1lassza ki a forr\u00E1scsom\u00F3pontot \u00E9s az \u00E9lek t\u00EDpus\u00E1t.
    A forr\u00E1scsom\u00F3pont \u00E9s a t\u00F6bbi kiv\u00E1lasztott csom\u00F3pont k\u00F6z\u00F6tti \u00E9leket lehet\u0151s\u00E9g szerint l\u00E9trehozza. +MergeNodesUI.description=Egy \u00FAj csom\u00F3pont j\u00F6n l\u00E9tre, amely megegyezik a kiv\u00E1lasztott f\u0151 csom\u00F3pont sz\u00EDn\u00E9vel, m\u00E9ret\u00E9vel \u00E9s poz\u00EDci\u00F3j\u00E1val.
    Az \u00E9lek hozz\u00E1 vannak rendelve az \u00FAj csom\u00F3ponthoz.
    Minden oszlop a megadott strat\u00E9gi\u00E1t haszn\u00E1lja a sorok \u00E9rt\u00E9k\u00E9nek cs\u00F6kkent\u00E9s\u00E9re egy \u00E9rt\u00E9k. +LinkNodesUI.directedEdge.text=Ir\u00E1ny\u00EDtott +LinkNodesUI.edgeTypeLabel.text=\u00C9l t\u00EDpusa: +CopyNodesUI.descriptionLabel.text=M\u00E1solatok sz\u00E1ma: +SetNodesSizeUI.sizeLabel.text=\u00DAj csom\u00F3pontok m\u00E9rete: +LinkNodesUI.undirectedEdge.text=Ir\u00E1ny\u00EDtatlan +MergeNodesUI.deleteMergedNodesText=Az egyes\u00EDtett csom\u00F3pontok t\u00F6rl\u00E9se +MoveNodeToGroupUI.descriptionLabel.text=\u00DAj csoport: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_it.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_it.properties new file mode 100644 index 0000000000..3b919eb4d8 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_it.properties @@ -0,0 +1,13 @@ +MergeNodesUI.description=One new node with the same color, size and position of the main selected node is created.
    Edges are assigned to the new node.
    Each column uses the given strategy to reduce the rows values to one value. +MergeNodesUI.deleteMergedNodesText=Delete merged nodes +MergeNodesUI.selectedRowText=Main selected row: +MergeNodesUI.configurationText=Configure +LinkNodesUI.descriptionLabel.text=Choose the source node and type of the edges.
    Edges between source node and the other selected nodes are created if possible. +LinkNodesUI.directedEdge.text=Orientato +LinkNodesUI.undirectedEdge.text=Non orientato +LinkNodesUI.sourceNodeLabel.text=Source node: +LinkNodesUI.edgeTypeLabel.text=Edge type: +MoveNodeToGroupUI.descriptionLabel.text=New group: +CopyNodesUI.descriptionLabel.text=Number of copies: +SetNodesSizeUI.sizeLabel.text=New nodes size: +SetNodesSizeUI.sizeText.text= diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_ja.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_ja.properties index 071a2bc866..4e1cc3fd1a 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_ja.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_ja.properties @@ -1,31 +1,13 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-02 10\:54+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -MergeNodesUI.description=\u9078\u629e\u3055\u308c\u305f\u4e3b\u306a\u30ce\u30fc\u30c9\u306e\u540c\u3058\u8272\u3001\u30b5\u30a4\u30ba\u3001\u4f4d\u7f6e\u306e\u65b0\u305f\u306a\u30ce\u30fc\u30c9\u304c\u751f\u6210\u3055\u308c\u307e\u3059\u3002
    \u8fba\u306f\u65b0\u3057\u3044\u30ce\u30fc\u30c9\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u307e\u3059\u3002
    \u5404\u5217\u306f\u884c\u306e\u5024\u3092\uff11\u3064\u306e\u5024\u306b\u6e1b\u3089\u3059\u305f\u3081\u306e\u4e0e\u3048\u3089\u308c\u305f\u6226\u7565\u3092\u6301\u3061\u307e\u3059\u3002
    \u968e\u5c64\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002 - -MergeNodesUI.deleteMergedNodesText=\u7d71\u5408\u3057\u305f\u30ce\u30fc\u30c9\u306e\u524a\u9664 - -MergeNodesUI.selectedRowText=\u4e3b\u306a\u9078\u629e\u3057\u305f\u5217\: - -MergeNodesUI.configurationText=\u69cb\u6210 - -LinkNodesUI.descriptionLabel.text=\u30bd\u30fc\u30b9\u30fb\u30ce\u30fc\u30c9\u3068\u8fba\u306e\u30bf\u30a4\u30d7\u3092\u9078\u3093\u3067\u4e0b\u3055\u3044\u3002
    \u30bd\u30fc\u30b9\u30fb\u30ce\u30fc\u30c9\u3068\u4ed6\u306e\u9078\u629e\u3057\u305f\u30ce\u30fc\u30c9\u9593\u306e\u8fba\u306f\u53ef\u80fd\u306a\u5834\u5408\u751f\u6210\u3055\u308c\u307e\u3059\u3002 - -LinkNodesUI.directedEdge.text=\u6709\u5411 - -LinkNodesUI.undirectedEdge.text=\u7121\u5411 - -LinkNodesUI.sourceNodeLabel.text=\u30bd\u30fc\u30b9\u30fb\u30ce\u30fc\u30c9\: - -LinkNodesUI.edgeTypeLabel.text=\u8fba\u306e\u30bf\u30a4\u30d7\: - -MoveNodeToGroupUI.descriptionLabel.text=\u65b0\u898f\u30b0\u30eb\u30fc\u30d7\: - -CopyNodesUI.descriptionLabel.text=\u30b3\u30d4\u30fc\u306e\u6570\: - -SetNodesSizeUI.sizeLabel.text=\u65b0\u898f\u30ce\u30fc\u30c9\u306e\u30b5\u30a4\u30ba\: +MergeNodesUI.description=\u9078\u629e\u3055\u308c\u305f\u4e3b\u306a\u30ce\u30fc\u30c9\u306e\u540c\u3058\u8272\u3001\u30b5\u30a4\u30ba\u3001\u4f4d\u7f6e\u306e\u65b0\u305f\u306a\u30ce\u30fc\u30c9\u304c\u751f\u6210\u3055\u308c\u307e\u3059\u3002
    \u8fba\u306f\u65b0\u3057\u3044\u30ce\u30fc\u30c9\u306b\u5272\u308a\u5f53\u3066\u3089\u308c\u307e\u3059\u3002
    \u5404\u5217\u306f\u884c\u306e\u5024\u3092\uff11\u3064\u306e\u5024\u306b\u6e1b\u3089\u3059\u305f\u3081\u306e\u4e0e\u3048\u3089\u308c\u305f\u6226\u7565\u3092\u6301\u3061\u307e\u3059\u3002
    \u968e\u5c64\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002 +MergeNodesUI.deleteMergedNodesText=\u7d71\u5408\u3057\u305f\u30ce\u30fc\u30c9\u306e\u524a\u9664 +MergeNodesUI.selectedRowText=\u4e3b\u306a\u9078\u629e\u3057\u305f\u5217: +MergeNodesUI.configurationText=\u69cb\u6210 +LinkNodesUI.descriptionLabel.text=\u30bd\u30fc\u30b9\u30fb\u30ce\u30fc\u30c9\u3068\u8fba\u306e\u30bf\u30a4\u30d7\u3092\u9078\u3093\u3067\u4e0b\u3055\u3044\u3002
    \u30bd\u30fc\u30b9\u30fb\u30ce\u30fc\u30c9\u3068\u4ed6\u306e\u9078\u629e\u3057\u305f\u30ce\u30fc\u30c9\u9593\u306e\u8fba\u306f\u53ef\u80fd\u306a\u5834\u5408\u751f\u6210\u3055\u308c\u307e\u3059\u3002 +LinkNodesUI.directedEdge.text=\u6709\u5411 +LinkNodesUI.undirectedEdge.text=\u7121\u5411 +LinkNodesUI.sourceNodeLabel.text=\u30bd\u30fc\u30b9\u30fb\u30ce\u30fc\u30c9: +LinkNodesUI.edgeTypeLabel.text=\u8fba\u306e\u30bf\u30a4\u30d7: +MoveNodeToGroupUI.descriptionLabel.text=\u65b0\u898f\u30b0\u30eb\u30fc\u30d7: +CopyNodesUI.descriptionLabel.text=\u30b3\u30d4\u30fc\u306e\u6570: +SetNodesSizeUI.sizeLabel.text=\u65b0\u898f\u30ce\u30fc\u30c9\u306e\u30b5\u30a4\u30ba: +SetNodesSizeUI.sizeText.text= diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_ko.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_ko.properties new file mode 100644 index 0000000000..df782b2832 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_ko.properties @@ -0,0 +1,14 @@ + + +MergeNodesUI.selectedRowText=\uC120\uD0DD\uD55C \uAE30\uBCF8 \uD589: +MergeNodesUI.configurationText=\uAD6C\uC131 +LinkNodesUI.sourceNodeLabel.text=\uC18C\uC2A4 \uB178\uB4DC: +LinkNodesUI.descriptionLabel.text=\uC18C\uC2A4 \uB178\uB4DC\uC640 \uC5E3\uC9C0 \uC720\uD615\uC744 \uC120\uD0DD\uD558\uC138\uC694.
    \uAC00\uB2A5\uD55C \uACBD\uC6B0 \uC18C\uC2A4 \uB178\uB4DC\uC640 \uC120\uD0DD\uD55C \uB2E4\uB978 \uB178\uB4DC \uC0AC\uC774\uC758 \uC5E3\uC9C0\uAC00 \uC0DD\uC131\uB429\uB2C8\uB2E4. +MergeNodesUI.description=\uC120\uD0DD\uD55C \uC8FC \uB178\uB4DC\uC758 \uC0C9\uC0C1, \uD06C\uAE30 \uBC0F \uC704\uCE58\uAC00 \uB3D9\uC77C\uD55C \uD558\uB098\uC758 \uC0C8\uB85C\uC6B4 \uB178\uB4DC\uAC00 \uC0DD\uC131\uB429\uB2C8\uB2E4.
    \uC5E3\uC9C0\uAC00 \uC0C8 \uB178\uB4DC\uC5D0 \uD560\uB2F9\uB429\uB2C8\uB2E4.
    \uAC01 \uC5F4\uC740 \uC8FC\uC5B4\uC9C4 \uC804\uB7B5\uC744 \uC0AC\uC6A9\uD558\uC5EC \uD589 \uAC12\uB4E4\uC744 \uD558\uB098\uC758 \uAC12\uC73C\uB85C \uC904\uC785\uB2C8\uB2E4. +LinkNodesUI.directedEdge.text=\uBC29\uD5A5\uC131 +LinkNodesUI.edgeTypeLabel.text=\uC5E3\uC9C0 \uC720\uD615: +CopyNodesUI.descriptionLabel.text=\uC0AC\uBCF8 \uC218: +SetNodesSizeUI.sizeLabel.text=\uC0C8 \uB178\uB4DC \uD06C\uAE30: +LinkNodesUI.undirectedEdge.text=\uBE44\uBC29\uD5A5\uC131 +MergeNodesUI.deleteMergedNodesText=\uBCD1\uD569\uB41C \uB178\uB4DC\uB4E4 \uC0AD\uC81C +MoveNodeToGroupUI.descriptionLabel.text=\uC0C8 \uADF8\uB8F9: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_nl.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_nl.properties new file mode 100644 index 0000000000..84952dab8b --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_nl.properties @@ -0,0 +1,13 @@ +MergeNodesUI.description=One new node with the same color, size and position of the main selected node is created.
    Edges are assigned to the new node.
    Each column uses the given strategy to reduce the rows values to one value. +MergeNodesUI.deleteMergedNodesText=Delete merged nodes +MergeNodesUI.selectedRowText=Main selected row: +MergeNodesUI.configurationText=Configureren +LinkNodesUI.descriptionLabel.text=Choose the source node and type of the edges.
    Edges between source node and the other selected nodes are created if possible. +LinkNodesUI.directedEdge.text=Gericht +LinkNodesUI.undirectedEdge.text=Ongericht +LinkNodesUI.sourceNodeLabel.text=Bronknoop: +LinkNodesUI.edgeTypeLabel.text=Edge type: +MoveNodeToGroupUI.descriptionLabel.text=Nieuwe groep: +CopyNodesUI.descriptionLabel.text=Aantal kopieλn: +SetNodesSizeUI.sizeLabel.text=Grootte van nieuwe knopen: +SetNodesSizeUI.sizeText.text= diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_pt_BR.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_pt_BR.properties index 39606a00d4..7d205a1ebc 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_pt_BR.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_pt_BR.properties @@ -1,31 +1,13 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 19\:14+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -MergeNodesUI.description=Ser\u00e1 criado um novo n\u00f3 com a mesma cor, tamanho e posi\u00e7\u00e3o do n\u00f3 principal selecionado.
    Arestas ser\u00e3o atribu\u00eddas ao novo n\u00f3.
    Cada coluna utiliza a estrat\u00e9gia determinada para reduzir os valores de linhas para apenas um valor.
    A hierarquia \u00e9 ignorada. - -MergeNodesUI.deleteMergedNodesText=Excluir n\u00f3s mesclados - -MergeNodesUI.selectedRowText=Principal linha selecionada\: - -MergeNodesUI.configurationText=Configurar - -LinkNodesUI.descriptionLabel.text=Escolher o n\u00f3 de origem e o tipo das arestas.
    Ser\u00e3o criadas, se poss\u00edvel, arestas entre o n\u00f3 fonte e os outros n\u00f3s selecionados. - -LinkNodesUI.directedEdge.text=Dirigido - -LinkNodesUI.undirectedEdge.text=N\u00e3o dirigido - -LinkNodesUI.sourceNodeLabel.text=N\u00f3 origem\: - -LinkNodesUI.edgeTypeLabel.text=Tipo de aresta\: - -MoveNodeToGroupUI.descriptionLabel.text=Novo grupo\: - -CopyNodesUI.descriptionLabel.text=N\u00famero de c\u00f3pias\: - -SetNodesSizeUI.sizeLabel.text=Novo tamanho\: +MergeNodesUI.description=Serα criado um novo nσ com a mesma cor, tamanho e posiηγo do nσ principal selecionado.
    Arestas serγo atribuνdas ao novo nσ.
    Cada coluna utiliza a estratιgia determinada para reduzir os valores de linhas para apenas um valor.
    A hierarquia ι ignorada. +MergeNodesUI.deleteMergedNodesText=Excluir nσs mesclados +MergeNodesUI.selectedRowText=Principal linha selecionada: +MergeNodesUI.configurationText=Configurar +LinkNodesUI.descriptionLabel.text=Escolher o nσ de origem e o tipo das arestas.
    Serγo criadas, se possνvel, arestas entre o nσ fonte e os outros nσs selecionados. +LinkNodesUI.directedEdge.text=Dirigido +LinkNodesUI.undirectedEdge.text=Nγo dirigido +LinkNodesUI.sourceNodeLabel.text=Nσ origem: +LinkNodesUI.edgeTypeLabel.text=Tipo de aresta: +MoveNodeToGroupUI.descriptionLabel.text=Novo grupo: +CopyNodesUI.descriptionLabel.text=Nϊmero de cσpias: +SetNodesSizeUI.sizeLabel.text=Novo tamanho: +SetNodesSizeUI.sizeText.text= diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_ro.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_ro.properties new file mode 100644 index 0000000000..848e38d170 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_ro.properties @@ -0,0 +1,14 @@ + + +LinkNodesUI.descriptionLabel.text=Selecteaz\u0103 nodul surs\u0103 \u0219i tipul muchiilor.
    Vor fi create muchii \u00EEntre nodul surs\u0103 \u0219i celelalte noduri dac\u0103 este posibil. +LinkNodesUI.directedEdge.text=Orientat +LinkNodesUI.undirectedEdge.text=Neorientat +LinkNodesUI.sourceNodeLabel.text=Nod surs\u0103: +LinkNodesUI.edgeTypeLabel.text=Tipul muchiei: +MoveNodeToGroupUI.descriptionLabel.text=Grup nou: +MergeNodesUI.deleteMergedNodesText=\u0218terge nodurile \u00EEmbinate +MergeNodesUI.selectedRowText=R\u00E2ndul principal selectat: +MergeNodesUI.configurationText=Configureaz\u0103 +CopyNodesUI.descriptionLabel.text=Num\u0103r de copii: +SetNodesSizeUI.sizeLabel.text=Dimensiunea noilor noduri: +MergeNodesUI.description=Este creat un nou nod de aceea\u0219i culoare, dimensiune \u0219i pozi\u021Bie ca nodul principal selectat.
    Muchiile sunt atribuite nodului nou.
    Fiecare coloan\u0103 reduce valorile la una singur\u0103 folosind strategia dat\u0103. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_ru.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_ru.properties index 56411cf275..4de8af3981 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_ru.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_ru.properties @@ -1,32 +1,13 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -# FIRST AUTHOR , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 15\:20+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -MergeNodesUI.description=\u0411\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d \u043d\u043e\u0432\u044b\u0439 \u0443\u0437\u0435\u043b \u0441 \u0442\u0435\u043c \u0436\u0435 \u0446\u0432\u0435\u0442\u043e\u043c, \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c, \u0447\u0442\u043e \u0438 \u0443 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430.
    \u0420\u0451\u0431\u0440\u0430 \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u0443\u0437\u0435\u043b.
    \u041c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432\u0435\u0441\u043e\u0432 \u0441\u0445\u043b\u043e\u043f\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u043e\u0434\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c\u0443 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443.
    \u0418\u0435\u0440\u0430\u0440\u0445\u0438\u044f \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f. - -MergeNodesUI.deleteMergedNodesText=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u043a\u043b\u0435\u0435\u043d\u044b\u0435 \u0443\u0437\u043b\u044b - -MergeNodesUI.selectedRowText=\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430\: - -MergeNodesUI.configurationText=\u0421\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c - -LinkNodesUI.descriptionLabel.text=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0443\u0437\u0435\u043b \u0442\u0438\u043f \u0440\u0435\u0431\u0440\u0430.
    \n\u0420\u0451\u0431\u0440\u0430 \u043c\u0435\u0436\u0434\u0443 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u043c \u0443\u0437\u043b\u043e\u043c \u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u043c\u0438 \u0443\u0437\u043b\u0430\u043c\u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u044b, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. - -LinkNodesUI.directedEdge.text=\u041e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 - -LinkNodesUI.undirectedEdge.text=\u041d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 - -LinkNodesUI.sourceNodeLabel.text=\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0443\u0437\u0435\u043b\: - -LinkNodesUI.edgeTypeLabel.text=\u0422\u0438\u043f \u0440\u0435\u0431\u0440\u0430\: - -MoveNodeToGroupUI.descriptionLabel.text=\u041d\u043e\u0432\u0430\u044f \u0433\u0440\u0443\u043f\u043f\u0430\: - -CopyNodesUI.descriptionLabel.text=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043f\u0438\u0439\: - -SetNodesSizeUI.sizeLabel.text=\u0420\u0430\u0437\u043c\u0435\u0440 \u043d\u043e\u0432\u044b\u0445 \u0443\u0437\u043b\u043e\u0432\: +MergeNodesUI.description=\u0411\u0443\u0434\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u043d \u043d\u043e\u0432\u044b\u0439 \u0443\u0437\u0435\u043b \u0441 \u0442\u0435\u043c \u0436\u0435 \u0446\u0432\u0435\u0442\u043e\u043c, \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u043c \u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c, \u0447\u0442\u043e \u0438 \u0443 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430.
    \u0420\u0451\u0431\u0440\u0430 \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u043d\u0430 \u043d\u043e\u0432\u044b\u0439 \u0443\u0437\u0435\u043b.
    \u041c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432\u0435\u0441\u043e\u0432 \u0441\u0445\u043b\u043e\u043f\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u043e \u043e\u0434\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u043e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c\u0443 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443.
    \u0418\u0435\u0440\u0430\u0440\u0445\u0438\u044f \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u0435\u0442\u0441\u044f. +MergeNodesUI.deleteMergedNodesText=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u043a\u043b\u0435\u0435\u043d\u044b\u0435 \u0443\u0437\u043b\u044b +MergeNodesUI.selectedRowText=\u041e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430: +MergeNodesUI.configurationText=\u0421\u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c +LinkNodesUI.descriptionLabel.text=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0443\u0437\u0435\u043b \u0442\u0438\u043f \u0440\u0435\u0431\u0440\u0430.
    \n\u0420\u0451\u0431\u0440\u0430 \u043c\u0435\u0436\u0434\u0443 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u043c \u0443\u0437\u043b\u043e\u043c \u0438 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u043c\u0438 \u0443\u0437\u043b\u0430\u043c\u0438 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u044b, \u0435\u0441\u043b\u0438 \u044d\u0442\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e. +LinkNodesUI.directedEdge.text=\u041e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 +LinkNodesUI.undirectedEdge.text=\u041d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 +LinkNodesUI.sourceNodeLabel.text=\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0443\u0437\u0435\u043b: +LinkNodesUI.edgeTypeLabel.text=\u0422\u0438\u043f \u0440\u0435\u0431\u0440\u0430: +MoveNodeToGroupUI.descriptionLabel.text=\u041d\u043e\u0432\u0430\u044f \u0433\u0440\u0443\u043f\u043f\u0430: +CopyNodesUI.descriptionLabel.text=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u043e\u043f\u0438\u0439: +SetNodesSizeUI.sizeLabel.text=\u0420\u0430\u0437\u043c\u0435\u0440 \u043d\u043e\u0432\u044b\u0445 \u0443\u0437\u043b\u043e\u0432: +SetNodesSizeUI.sizeText.text= diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_th.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_tr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_tr.properties new file mode 100644 index 0000000000..62debf4ee3 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_tr.properties @@ -0,0 +1,13 @@ +MergeNodesUI.description=One new node with the same color, size and position of the main selected node is created.
    Edges are assigned to the new node.
    Each column uses the given strategy to reduce the rows values to one value. +MergeNodesUI.deleteMergedNodesText=Delete merged nodes +MergeNodesUI.selectedRowText=Main selected row: +MergeNodesUI.configurationText=Configure +LinkNodesUI.descriptionLabel.text=Choose the source node and type of the edges.
    Edges between source node and the other selected nodes are created if possible. +LinkNodesUI.directedEdge.text=Yφnlό +LinkNodesUI.undirectedEdge.text=Yφnsόz +LinkNodesUI.sourceNodeLabel.text=Source node: +LinkNodesUI.edgeTypeLabel.text=Edge type: +MoveNodeToGroupUI.descriptionLabel.text=New group: +CopyNodesUI.descriptionLabel.text=Number of copies: +SetNodesSizeUI.sizeLabel.text=New nodes size: +SetNodesSizeUI.sizeText.text= diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_uk.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_uk.properties new file mode 100644 index 0000000000..2e9c7312ed --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_uk.properties @@ -0,0 +1,13 @@ +MergeNodesUI.selectedRowText=\u041E\u0441\u043D\u043E\u0432\u043D\u0438\u0439 \u0432\u0438\u0431\u0440\u0430\u043D\u0438\u0439 \u0440\u044F\u0434\u043E\u043A: +MergeNodesUI.configurationText=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u0442\u0438 +LinkNodesUI.descriptionLabel.text=\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044C \u0432\u0438\u0445\u0456\u0434\u043D\u0438\u0439 \u0432\u0443\u0437\u043E\u043B \u0456 \u0442\u0438\u043F \u0440\u0435\u0431\u0435\u0440.
    \u0417\u0430 \u043C\u043E\u0436\u043B\u0438\u0432\u043E\u0441\u0442\u0456 \u0441\u0442\u0432\u043E\u0440\u044E\u044E\u0442\u044C\u0441\u044F \u0440\u0435\u0431\u0440\u0430 \u043C\u0456\u0436 \u0432\u0438\u0445\u0456\u0434\u043D\u0438\u043C \u0432\u0443\u0437\u043B\u043E\u043C \u0442\u0430 \u0456\u043D\u0448\u0438\u043C\u0438 \u0432\u0438\u0431\u0440\u0430\u043D\u0438\u043C\u0438 \u0432\u0443\u0437\u043B\u0430\u043C\u0438. +MergeNodesUI.description=\u0421\u0442\u0432\u043E\u0440\u044E\u0454\u0442\u044C\u0441\u044F \u043E\u0434\u0438\u043D \u043D\u043E\u0432\u0438\u0439 \u0432\u0443\u0437\u043E\u043B \u0437 \u0442\u0430\u043A\u0438\u043C \u0441\u0430\u043C\u0438\u043C \u043A\u043E\u043B\u044C\u043E\u0440\u043E\u043C, \u0440\u043E\u0437\u043C\u0456\u0440\u043E\u043C \u0456 \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u043D\u044F\u043C \u043E\u0441\u043D\u043E\u0432\u043D\u043E\u0433\u043E \u0432\u0438\u0431\u0440\u0430\u043D\u043E\u0433\u043E \u0432\u0443\u0437\u043B\u0430.
    \u041D\u043E\u0432\u043E\u043C\u0443 \u0432\u0443\u0437\u043B\u0443 \u043F\u0440\u0438\u0437\u043D\u0430\u0447\u0430\u044E\u0442\u044C\u0441\u044F \u0440\u0435\u0431\u0440\u0430.
    \u041A\u043E\u0436\u0435\u043D \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0454 \u0432\u043A\u0430\u0437\u0430\u043D\u0443 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0456\u044E \u0434\u043B\u044F \u0437\u043C\u0435\u043D\u0448\u0435\u043D\u043D\u044F \u0437\u043D\u0430\u0447\u0435\u043D\u044C \u0440\u044F\u0434\u043A\u0456\u0432 \u0434\u043E \u043E\u0434\u043D\u043E\u0433\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F. +MergeNodesUI.deleteMergedNodesText=\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u043E\u0431'\u0454\u0434\u043D\u0430\u043D\u0456 \u0432\u0443\u0437\u043B\u0438 +LinkNodesUI.directedEdge.text=\u0420\u0435\u0436\u0438\u0441\u0435\u0440 +LinkNodesUI.undirectedEdge.text=\u041D\u0435\u0440\u0435\u0436\u0438\u0441\u043E\u0432\u0430\u043D\u0438\u0439 +LinkNodesUI.sourceNodeLabel.text=\u0412\u0438\u0445\u0456\u0434\u043D\u0438\u0439 \u0432\u0443\u0437\u043E\u043B: +LinkNodesUI.edgeTypeLabel.text=\u0422\u0438\u043F \u043A\u0440\u0430\u044E: +MoveNodeToGroupUI.descriptionLabel.text=\u041D\u043E\u0432\u0430 \u0433\u0440\u0443\u043F\u0430: +CopyNodesUI.descriptionLabel.text=\u041A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u043A\u043E\u043F\u0456\u0439: +SetNodesSizeUI.sizeLabel.text=\u0420\u043E\u0437\u043C\u0456\u0440 \u043D\u043E\u0432\u0438\u0445 \u0432\u0443\u0437\u043B\u0456\u0432: +SetNodesSizeUI.sizeText.text=\u0420\u043E\u0437\u043C\u0456\u0440 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_zh_CN.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_zh_CN.properties index ab7c685f7e..85a5a282b4 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_zh_CN.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_zh_CN.properties @@ -1,30 +1,13 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:19+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -MergeNodesUI.description=\u521b\u5efa\u4e00\u4e2a\u65b0\u8282\u70b9\uff0c\u4e0e\u4e3b\u8981\u7684\u9009\u62e9\u8282\u70b9\u6709\u76f8\u540c\u7684\u989c\u8272\uff0c\u5927\u5c0f\u548c\u4f4d\u7f6e\u3002
    \u4e3a\u65b0\u7684\u8282\u70b9\u8bbe\u7f6e\u8fb9\u3002
    \u6bcf\u5217\u4f7f\u7528\u6240\u7ed9\u7684\u65b9\u6cd5\u6765\u51cf\u5c11\u884c\u503c\u5230\u4e00\u4e2a\u6570\u503c\u3002
    \u7b49\u7ea7\u7f3a\u7701\u3002 - +MergeNodesUI.description=\u521B\u5EFA\u4E00\u4E2A\u65B0\u8282\u70B9\uFF0C\u5176\u4E0E\u9009\u4E2D\u7684\u4E3B\u8282\u70B9\u5728\u989C\u8272\uFF0C\u5927\u5C0F\u548C\u4F4D\u7F6E\u65B9\u9762\u5747\u76F8\u540C\u3002
    \u5DF2\u5411\u65B0\u8282\u70B9\u5206\u914D\u4E86 Edge\u3002
    \u6BCF\u5217\u4F7F\u7528\u7ED9\u5B9A\u7684\u65B9\u6CD5\u6765\u51CF\u5C11\u884C\u503C\u5230\u4E00\u4E2A\u6570\u503C\u3002 MergeNodesUI.deleteMergedNodesText=\u5220\u9664\u5408\u5e76\u7684\u8282\u70b9 - MergeNodesUI.selectedRowText=\u4e3b\u8981\u7684\u9009\u62e9\u884c\uff1a - MergeNodesUI.configurationText=\u8bbe\u7f6e - LinkNodesUI.descriptionLabel.text=\u9009\u62e9\u6e90\u8282\u70b9\u548c\u8fb9\u7684\u7c7b\u578b\u3002
    \u521b\u5efa\u6e90\u8282\u70b9\u548c\u5176\u9009\u62e9\u7684\u8282\u70b9\u7684\u53ef\u80fd\u5b58\u5728\u7684\u8fb9\u3002 - LinkNodesUI.directedEdge.text=\u6709\u5411\u7684 - LinkNodesUI.undirectedEdge.text=\u65e0\u5411\u7684 - LinkNodesUI.sourceNodeLabel.text=\u6e90\u8282\u70b9\uff1a - -LinkNodesUI.edgeTypeLabel.text=\u8fb9\u7684\u7c7b\u578b\u201d - +LinkNodesUI.edgeTypeLabel.text=\u8FB9\u7C7B\u578B\uFF1A MoveNodeToGroupUI.descriptionLabel.text=\u65b0\u7ec4\uff1a - CopyNodesUI.descriptionLabel.text=\u590d\u5236\u7684\u6570\u91cf\uff1a - SetNodesSizeUI.sizeLabel.text=\u65b0\u8282\u70b9\u5927\u5c0f\uff1a +SetNodesSizeUI.sizeText.text= diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_zh_TW.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_zh_TW.properties new file mode 100644 index 0000000000..0b46656dae --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/Bundle_zh_TW.properties @@ -0,0 +1,13 @@ +MergeNodesUI.description=One new node with the same color, size and position of the main selected node is created.
    Edges are assigned to the new node.
    Each column uses the given strategy to reduce the rows values to one value. +MergeNodesUI.deleteMergedNodesText=Delete merged nodes +MergeNodesUI.selectedRowText=Main selected row: +MergeNodesUI.configurationText=Configure +LinkNodesUI.descriptionLabel.text=Choose the source node and type of the edges.
    Edges between source node and the other selected nodes are created if possible. +LinkNodesUI.directedEdge.text=\u6709\u5411\u6027 +LinkNodesUI.undirectedEdge.text=\u7121\u5411\u6027 +LinkNodesUI.sourceNodeLabel.text=Source node: +LinkNodesUI.edgeTypeLabel.text=Edge type: +MoveNodeToGroupUI.descriptionLabel.text=New group: +CopyNodesUI.descriptionLabel.text=Number of copies: +SetNodesSizeUI.sizeLabel.text=New nodes size: +SetNodesSizeUI.sizeText.text= diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/cs.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/cs.po deleted file mode 100644 index 7b8977512c..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/cs.po +++ /dev/null @@ -1,55 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-27 14:20+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "MergeNodesUI.description" -msgstr "Je vytvoΕ™en jeden novΓ½ uzel se stejnou barvou, velikostΓ­ a umΓ­stΔ›nΓ­m z hlavnΓ­ho zvolenΓ©ho uzle.
    Hrany jsou pΕ™idΔ›leny k novΓ©mu uzlu.
    KaΕΎdΓ½ sloupec pouΕΎΓ­vΓ‘ zadanou strategii pro snΓ­ΕΎenΓ­ hodnot Ε™Γ‘dkΕ― na jendu hodnotu.
    Hierarchie je ignorovΓ‘na." - -msgid "MergeNodesUI.deleteMergedNodesText" -msgstr "Smazat sloučenΓ© uzle" - -msgid "MergeNodesUI.selectedRowText" -msgstr "HlavnΓ­ vybranΓ½ Ε™Γ‘dek" - -msgid "MergeNodesUI.configurationText" -msgstr "Nastavit" - -msgid "LinkNodesUI.descriptionLabel.text" -msgstr "Zvolte zdrojovΓ½ uzel a typ hran.
    Hrany mezi zdrojovΓ½m uzlem a jinΓ½mi vybranΓ½mi uzly jsou vytvoΕ™eny, pokud je moΕΎnost." - -msgid "LinkNodesUI.directedEdge.text" -msgstr "ŘízenΓ©" - -msgid "LinkNodesUI.undirectedEdge.text" -msgstr "NeΕ™Γ­zenΓ©" - -msgid "LinkNodesUI.sourceNodeLabel.text" -msgstr "ZdrojovΓ½ uzel:" - -msgid "LinkNodesUI.edgeTypeLabel.text" -msgstr "Typ hrany:" - -msgid "MoveNodeToGroupUI.descriptionLabel.text" -msgstr "NovΓ‘ skupina:" - -msgid "CopyNodesUI.descriptionLabel.text" -msgstr "Počet kopiΓ­:" - -msgid "SetNodesSizeUI.sizeLabel.text" -msgstr "Velikost novΓ©ho uzle:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/es.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/es.po deleted file mode 100644 index 9e30421294..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/es.po +++ /dev/null @@ -1,57 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011, 2012. -# FIRST AUTHOR , 2010. -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-31 12:39+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "MergeNodesUI.description" -msgstr "Un nuevo nodo con el mismo color, tamaΓ±o y posiciΓ³n que el nodo principal seleccionado es creado.
    Las aristas son asignadas al nuevo nodo.
    Cada columna utiliza la estrategia proporcionada para reducir los valores de las filas a un valor.
    La jerarquΓ­a es ignorada" - -msgid "MergeNodesUI.deleteMergedNodesText" -msgstr "Eliminar nodos mezclados" - -msgid "MergeNodesUI.selectedRowText" -msgstr "Fila principal seleccionada:" - -msgid "MergeNodesUI.configurationText" -msgstr "Configurar" - -msgid "LinkNodesUI.descriptionLabel.text" -msgstr "Escoge el nodo origen y el tipo de la(s) arista(s).
    Se crearΓ‘n aristas entre el nodo seleccionado y todos los demΓ‘s nodos cuando sea posible." - -msgid "LinkNodesUI.directedEdge.text" -msgstr "Dirigida" - -msgid "LinkNodesUI.undirectedEdge.text" -msgstr "No dirigida" - -msgid "LinkNodesUI.sourceNodeLabel.text" -msgstr "Nodo origen:" - -msgid "LinkNodesUI.edgeTypeLabel.text" -msgstr "Tipo de arista:" - -msgid "MoveNodeToGroupUI.descriptionLabel.text" -msgstr "Nuevo grupo:" - -msgid "CopyNodesUI.descriptionLabel.text" -msgstr "NΓΊmero de copias:" - -msgid "SetNodesSizeUI.sizeLabel.text" -msgstr "Nuevo tamaΓ±o:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/fr.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/fr.po deleted file mode 100644 index a2875a085d..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/fr.po +++ /dev/null @@ -1,56 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-07 11:12+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "MergeNodesUI.description" -msgstr "Créé un nouveau noeud de mΓͺme couleur, taille et position que le principal sΓ©lectionnΓ©.
    Chaque colonne utilise une stratΓ©gie pour rΓ©duire les valeurs des lignes en une seule valeur.
    Ignore la hiΓ©rarchie." - -msgid "MergeNodesUI.deleteMergedNodesText" -msgstr "Supprimer les noeuds fusionnΓ©s" - -msgid "MergeNodesUI.selectedRowText" -msgstr "Ligne sΓ©lectionnΓ©e principale :" - -msgid "MergeNodesUI.configurationText" -msgstr "Configurer" - -msgid "LinkNodesUI.descriptionLabel.text" -msgstr "Choisissez le noeud source.
    Les liens entre ce noeud et les autres noeuds sΓ©lectionnΓ©s seront créés si possible." - -msgid "LinkNodesUI.directedEdge.text" -msgstr "DirigΓ©" - -msgid "LinkNodesUI.undirectedEdge.text" -msgstr "Non dirigΓ©" - -msgid "LinkNodesUI.sourceNodeLabel.text" -msgstr "Noeud source :" - -msgid "LinkNodesUI.edgeTypeLabel.text" -msgstr "Type de lien :" - -msgid "MoveNodeToGroupUI.descriptionLabel.text" -msgstr "Choisissez le groupe ou dΓ©placer les noeuds" - -msgid "CopyNodesUI.descriptionLabel.text" -msgstr "Nombre de copies :" - -msgid "SetNodesSizeUI.sizeLabel.text" -msgstr "Nouvelle taille des noeuds :" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/ja.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/ja.po deleted file mode 100644 index c611d7caa7..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/ja.po +++ /dev/null @@ -1,55 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-02 10:54+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "MergeNodesUI.description" -msgstr "ιΈζŠžγ•γ‚ŒγŸδΈ»γͺγƒŽγƒΌγƒ‰γεŒγ˜θ‰²γ€γ‚΅γ‚€γ‚Ίγ€δ½η½γζ–°γŸγͺγƒŽγƒΌγƒ‰γŒη”Ÿζˆγ•γ‚ŒγΎγ™γ€‚
    θΎΊγ―ζ–°γ—γ„γƒŽγƒΌγƒ‰γ«ε‰²γ‚Šε½“γ¦γ‚‰γ‚ŒγΎγ™γ€‚
    ε„εˆ—γ―θ‘Œγε€€γ‚’1぀γε€€γ«ζΈ›γ‚‰γ™γŸγ‚γδΈŽγˆγ‚‰γ‚ŒγŸζˆ¦η•₯γ‚’ζŒγ‘γΎγ™γ€‚
    ιšŽε±€γ―η„‘θ¦–γ•γ‚ŒγΎγ™γ€‚" - -msgid "MergeNodesUI.deleteMergedNodesText" -msgstr "η΅±εˆγ—γŸγƒŽγƒΌγƒ‰γε‰Šι™€" - -msgid "MergeNodesUI.selectedRowText" -msgstr "δΈ»γͺιΈζŠžγ—γŸεˆ—:" - -msgid "MergeNodesUI.configurationText" -msgstr "ζ§‹ζˆ" - -msgid "LinkNodesUI.descriptionLabel.text" -msgstr "γ‚½γƒΌγ‚Ήγƒ»γƒŽγƒΌγƒ‰γ¨θΎΊγγ‚Ώγ‚€γƒ—を選んで下さい。
    γ‚½γƒΌγ‚Ήγƒ»γƒŽγƒΌγƒ‰γ¨δ»–γιΈζŠžγ—γŸγƒŽγƒΌγƒ‰ι–“γθΎΊγ―可能γͺε ΄εˆη”Ÿζˆγ•γ‚ŒγΎγ™γ€‚" - -msgid "LinkNodesUI.directedEdge.text" -msgstr "ζœ‰ε‘" - -msgid "LinkNodesUI.undirectedEdge.text" -msgstr "焑向" - -msgid "LinkNodesUI.sourceNodeLabel.text" -msgstr "γ‚½γƒΌγ‚Ήγƒ»γƒŽγƒΌγƒ‰:" - -msgid "LinkNodesUI.edgeTypeLabel.text" -msgstr "θΎΊγγ‚Ώγ‚€γƒ—:" - -msgid "MoveNodeToGroupUI.descriptionLabel.text" -msgstr "新規グループ:" - -msgid "CopyNodesUI.descriptionLabel.text" -msgstr "コピーγζ•°:" - -msgid "SetNodesSizeUI.sizeLabel.text" -msgstr "ζ–°θ¦γƒŽγƒΌγƒ‰γγ‚΅γ‚€γ‚Ί:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/org-gephi-datalab-plugin-manipulators-nodes-ui.pot b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/org-gephi-datalab-plugin-manipulators-nodes-ui.pot deleted file mode 100644 index 37b646c966..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/org-gephi-datalab-plugin-manipulators-nodes-ui.pot +++ /dev/null @@ -1,58 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "MergeNodesUI.description" -msgstr "" -"One new node with the same color, size and position of the main " -"selected node is created.
    Edges are assigned to the new node.
    Each " -"column uses the given strategy to reduce the rows values to one value.
    Hierarchy is ignored." - -msgid "MergeNodesUI.deleteMergedNodesText" -msgstr "Delete merged nodes" - -msgid "MergeNodesUI.selectedRowText" -msgstr "Main selected row:" - -msgid "MergeNodesUI.configurationText" -msgstr "Configure" - -msgid "LinkNodesUI.descriptionLabel.text" -msgstr "" -"Choose the source node and type of the edges.
    Edges between " -"source node and the other selected nodes are created if possible." - -msgid "LinkNodesUI.directedEdge.text" -msgstr "Directed" - -msgid "LinkNodesUI.undirectedEdge.text" -msgstr "Undirected" - -msgid "LinkNodesUI.sourceNodeLabel.text" -msgstr "Source node:" - -msgid "LinkNodesUI.edgeTypeLabel.text" -msgstr "Edge type:" - -msgid "MoveNodeToGroupUI.descriptionLabel.text" -msgstr "New group:" - -msgid "CopyNodesUI.descriptionLabel.text" -msgstr "Number of copies:" - -msgid "SetNodesSizeUI.sizeLabel.text" -msgstr "New nodes size:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/pt_BR.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/pt_BR.po deleted file mode 100644 index 54b032ed0f..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/pt_BR.po +++ /dev/null @@ -1,55 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 19:14+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "MergeNodesUI.description" -msgstr "SerΓ‘ criado um novo nΓ³ com a mesma cor, tamanho e posiΓ§Γ£o do nΓ³ principal selecionado.
    Arestas serΓ£o atribuΓ­das ao novo nΓ³.
    Cada coluna utiliza a estratΓ©gia determinada para reduzir os valores de linhas para apenas um valor.
    A hierarquia Γ© ignorada." - -msgid "MergeNodesUI.deleteMergedNodesText" -msgstr "Excluir nΓ³s mesclados" - -msgid "MergeNodesUI.selectedRowText" -msgstr "Principal linha selecionada:" - -msgid "MergeNodesUI.configurationText" -msgstr "Configurar" - -msgid "LinkNodesUI.descriptionLabel.text" -msgstr "Escolher o nΓ³ de origem e o tipo das arestas.
    SerΓ£o criadas, se possΓ­vel, arestas entre o nΓ³ fonte e os outros nΓ³s selecionados." - -msgid "LinkNodesUI.directedEdge.text" -msgstr "Dirigido" - -msgid "LinkNodesUI.undirectedEdge.text" -msgstr "NΓ£o dirigido" - -msgid "LinkNodesUI.sourceNodeLabel.text" -msgstr "NΓ³ origem:" - -msgid "LinkNodesUI.edgeTypeLabel.text" -msgstr "Tipo de aresta:" - -msgid "MoveNodeToGroupUI.descriptionLabel.text" -msgstr "Novo grupo:" - -msgid "CopyNodesUI.descriptionLabel.text" -msgstr "NΓΊmero de cΓ³pias:" - -msgid "SetNodesSizeUI.sizeLabel.text" -msgstr "Novo tamanho:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/ru.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/ru.po deleted file mode 100644 index 3842a50c03..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/ru.po +++ /dev/null @@ -1,56 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -# FIRST AUTHOR , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 15:20+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "MergeNodesUI.description" -msgstr "Π‘ΡƒΠ΄Π΅Ρ‚ создан Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΠ·Π΅Π» с Ρ‚Π΅ΠΌ ΠΆΠ΅ Ρ†Π²Π΅Ρ‚ΠΎΠΌ, Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ ΠΈ ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΈ Ρƒ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°.
    Π Ρ‘Π±Ρ€Π° Π±ΡƒΠ΄ΡƒΡ‚ ΠΏΠ΅Ρ€Π΅Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ Π½Π° Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΠ·Π΅Π».
    ΠœΠ½ΠΎΠΆΠ΅ΡΡ‚Π²ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ вСсов схлопываСтся Π΄ΠΎ ΠΎΠ΄Π½ΠΎΠ³ΠΎ значСния ΠΏΠΎ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌΡƒ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ.
    Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ игнорируСтся. " - -msgid "MergeNodesUI.deleteMergedNodesText" -msgstr "Π£Π΄Π°Π»ΠΈΡ‚ΡŒ склССныС ΡƒΠ·Π»Ρ‹" - -msgid "MergeNodesUI.selectedRowText" -msgstr "Основная выбранная строка:" - -msgid "MergeNodesUI.configurationText" -msgstr "Π‘ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ" - -msgid "LinkNodesUI.descriptionLabel.text" -msgstr "Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΠ·Π΅Π» Ρ‚ΠΈΠΏ Ρ€Π΅Π±Ρ€Π°.
    \nΠ Ρ‘Π±Ρ€Π° ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΌ ΡƒΠ·Π»ΠΎΠΌ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌΠΈ ΡƒΠ·Π»Π°ΠΌΠΈ Π±ΡƒΠ΄ΡƒΡ‚ созданы, Ссли это Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ." - -msgid "LinkNodesUI.directedEdge.text" -msgstr "ΠžΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅" - -msgid "LinkNodesUI.undirectedEdge.text" -msgstr "НСориСнтированноС" - -msgid "LinkNodesUI.sourceNodeLabel.text" -msgstr "ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΠ·Π΅Π»:" - -msgid "LinkNodesUI.edgeTypeLabel.text" -msgstr "Π’ΠΈΠΏ Ρ€Π΅Π±Ρ€Π°:" - -msgid "MoveNodeToGroupUI.descriptionLabel.text" -msgstr "Новая Π³Ρ€ΡƒΠΏΠΏΠ°:" - -msgid "CopyNodesUI.descriptionLabel.text" -msgstr "ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ ΠΊΠΎΠΏΠΈΠΉ:" - -msgid "SetNodesSizeUI.sizeLabel.text" -msgstr "Π Π°Π·ΠΌΠ΅Ρ€ Π½ΠΎΠ²Ρ‹Ρ… ΡƒΠ·Π»ΠΎΠ²:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/zh_CN.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/zh_CN.po deleted file mode 100644 index 3808d54f03..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/ui/zh_CN.po +++ /dev/null @@ -1,54 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:19+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "MergeNodesUI.description" -msgstr "εˆ›ε»ΊδΈ€δΈͺζ–°θŠ‚η‚ΉοΌŒδΈŽδΈ»θ¦ηš„ι€‰ζ‹©θŠ‚η‚Ήζœ‰η›ΈεŒηš„ι’œθ‰²οΌŒε€§ε°ε’Œδ½η½γ€‚
    δΈΊζ–°ηš„θŠ‚η‚ΉθΎη½θΎΉγ€‚
    ζ―εˆ—δ½Ώη”¨ζ‰€η»™ηš„ζ–Ήζ³•ζ₯ε‡ε°‘θ‘Œε€Όεˆ°δΈ€δΈͺ数值。
    η­‰ηΊ§ηΌΊηœγ€‚" - -msgid "MergeNodesUI.deleteMergedNodesText" -msgstr "εˆ ι™€εˆεΉΆηš„θŠ‚η‚Ή" - -msgid "MergeNodesUI.selectedRowText" -msgstr "δΈ»θ¦ηš„ι€‰ζ‹©θ‘ŒοΌš" - -msgid "MergeNodesUI.configurationText" -msgstr "θΎη½" - -msgid "LinkNodesUI.descriptionLabel.text" -msgstr "ι€‰ζ‹©ζΊθŠ‚η‚Ήε’ŒθΎΉηš„η±»εž‹γ€‚
    εˆ›ε»ΊζΊθŠ‚η‚Ήε’Œε…Άι€‰ζ‹©ηš„θŠ‚η‚Ήηš„ε―θƒ½ε­˜εœ¨ηš„θΎΉγ€‚" - -msgid "LinkNodesUI.directedEdge.text" -msgstr "ζœ‰ε‘ηš„" - -msgid "LinkNodesUI.undirectedEdge.text" -msgstr "ζ— ε‘ηš„" - -msgid "LinkNodesUI.sourceNodeLabel.text" -msgstr "ζΊθŠ‚η‚ΉοΌš" - -msgid "LinkNodesUI.edgeTypeLabel.text" -msgstr "θΎΉηš„η±»εž‹β€" - -msgid "MoveNodeToGroupUI.descriptionLabel.text" -msgstr "ζ–°η»„οΌš" - -msgid "CopyNodesUI.descriptionLabel.text" -msgstr "ε€εˆΆηš„ζ•°ι‡οΌš" - -msgid "SetNodesSizeUI.sizeLabel.text" -msgstr "ζ–°θŠ‚η‚Ήε€§ε°οΌš" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/zh_CN.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/zh_CN.po deleted file mode 100644 index b21a500316..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/nodes/zh_CN.po +++ /dev/null @@ -1,138 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:18+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenInEditNodeWindow.name" -msgstr "ηΌ–θΎ‘θŠ‚η‚Ή" - -msgid "OpenInEditNodeWindow.name.multiple" -msgstr "ηΌ–θΎ‘ζ‰€ζœ‰θŠ‚η‚Ή" - -msgid "OpenInEditNodeWindow.description" -msgstr "ζ”Ήε˜ε€§ε°γ€δ½η½γ€ι’œθ‰²ε’Œε±žζ€§γ€‚" - -msgid "OpenInEditNodeWindow.description.multiple" -msgstr "ζ”Ήε˜ε€§ε°γ€δ½η½γ€ι’œθ‰²ε’Œε±žζ€§γ€‚εˆε§‹ε€ΌδΈΊη©Ίγ€‚" - -msgid "SelectOnGraph.name" -msgstr "εœ¨ζ¦‚θΏ°ι€‰ζ‹©" - -msgid "SelectNeighboursOnTable.name" -msgstr "εœ¨θ‘¨ζ Όι€‰ζ‹©δΈ΄θΏ‘θŠ‚η‚Ή" - -msgid "SelectEdgesOnTable.name" -msgstr "ι€‰ζ‹©η›Έε…³ηš„θΎΉ" - -msgid "DeleteNodes.name.single" -msgstr "εˆ ι™€" - -msgid "DeleteNodes.name.multiple" -msgstr "ε…¨ιƒ¨εˆ ι™€" - -msgid "DeleteNodes.confirmation.message" -msgstr "η‘εšεˆ ι™€θŠ‚η‚ΉοΌŸ" - -msgid "ClearNodesData.name.single" -msgstr "εˆ ι™€β€¦β€¦" - -msgid "ClearNodesData.name.multiple" -msgstr "εˆ ι™€ζ‰€ζœ‰β€¦β€¦" - -msgid "ClearNodesData.description" -msgstr "εˆ ι™€ι€‰ζ‹©θŠ‚η‚Ήηš„ζ•°ζ" - -msgid "ClearNodesData.ui.description" -msgstr "εˆ ι™€εˆ—" - -msgid "CopyNodeDataToOtherNodes.name" -msgstr "覆盖数ζεˆ°ε…Άεƒι€‰ζ‹©ηš„θŠ‚η‚Ήβ€¦β€¦" - -msgid "CopyNodeDataToOtherNodes.description" -msgstr "ε€εˆΆι€‰ζ‹©ηš„θŠ‚η‚Ήεˆ—εˆ°ι€‰ζ‹©ηš„ε…ΆεƒθŠ‚η‚Ήγ€‚" - -msgid "CopyNodeDataToOtherNodes.ui.rowDescription" -msgstr "ε€εˆΆθŠ‚η‚ΉοΌš" - -msgid "CopyNodeDataToOtherNodes.ui.columnsDescription" -msgstr "θ¦†η›–εˆ—οΌš" - -msgid "Group.name" -msgstr "η»„" - -msgid "Ungroup.name.single" -msgstr "ε–ζΆˆη»„" - -msgid "Ungroup.name.multiple" -msgstr "ε–ζΆˆι€‰ζ‹©ηš„η»„" - -msgid "UngroupRecursively.name.single" -msgstr "ι€’ε½’ηš„ε–ζΆˆη»„ηΎ€" - -msgid "UngroupRecursively.name.multiple" -msgstr "ι€’ε½’ε–ζΆˆζ‰€ι€‰ηš„η»„" - -msgid "UngroupRecursively.description" -msgstr "ε–ζΆˆζ‰€ι€‰ηš„η»„ε’Œε­jiedian" - -msgid "MoveNodeToGroup.name.single" -msgstr "η§»εŠ¨εˆ°η»„" - -msgid "MoveNodeToGroup.name.multiple" -msgstr "ε…¨ιƒ¨η§»εŠ¨εˆ°η»„" - -msgid "RemoveNodeFromGroup.name.single" -msgstr "δ»Žη»„ι‡Œη§»ι™€" - -msgid "RemoveNodeFromGroup.name.multiple" -msgstr "δ»Žη»„ι‡Œε…¨ιƒ¨η§»ι™€" - -msgid "Settle.name.single" -msgstr "η‘εš" - -msgid "Settle.name.multiple" -msgstr "全部η‘εš" - -msgid "Free.name.single" -msgstr "ι‡Šζ”Ύ" - -msgid "Free.name.multiple" -msgstr "ε…¨ιƒ¨ι‡Šζ”Ύ" - -msgid "SetNodesSize.name.single" -msgstr "θΎεšθŠ‚η‚Ήε€§ε°" - -msgid "SetNodesSize.name.multiple" -msgstr "θΎεšζ‰€ζœ‰θŠ‚η‚Ήε€§ε°" - -msgid "MergeNodes.name" -msgstr "εˆεΉΆθŠ‚η‚Ή" - -msgid "MergeNodes.description" -msgstr "ζ‰€ζœ‰θŠ‚η‚Ήθ’«εˆεΉΆδΈΊδΈ€δΈͺζ–°ηš„θŠ‚η‚ΉοΌŒη”¨δΈεŒηš„ζ–Ήζ³•εˆεΉΆθΎΉε’Œζ•°ε€Όγ€‚" - -msgid "LinkNodes.name" -msgstr "连ζŽ₯εˆ°θŠ‚η‚Ήβ€¦β€¦" - -msgid "LinkNodes.description" -msgstr "εˆ›ε»ΊθŠ‚η‚Ήε’Œζ‰€ζœ‰ι€‰ζ‹©θŠ‚η‚Ήι—΄ηš„θΎΉοΌˆζœ‰ε‘ηš„ζˆ–θ€…ζ— ε‘ηš„οΌ‰" - -msgid "CopyNodes.name.single" -msgstr "倍刢" - -msgid "CopyNodes.name.multiple" -msgstr "ε…¨ιƒ¨ε€εˆΆ" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/application-block.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/application-block.png deleted file mode 100644 index b69761479d..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/application-block.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/balance.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/balance.png deleted file mode 100644 index e213cd5b4a..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/balance.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/binocular--arrow.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/binocular--arrow.png deleted file mode 100644 index 28d9db5b04..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/binocular--arrow.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/binocular--pencil.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/binocular--pencil.png deleted file mode 100644 index a27a20e882..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/binocular--pencil.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/broom--arrow.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/broom--arrow.png deleted file mode 100644 index 5b4c962123..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/broom--arrow.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/broom.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/broom.png deleted file mode 100644 index 2c6152ef62..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/broom.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/category.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/category.png deleted file mode 100644 index 1a3f6a24ae..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/category.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/chart-up.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/chart-up.png deleted file mode 100644 index f02e909558..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/chart-up.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/chart.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/chart.png deleted file mode 100644 index d3cb71d5c5..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/chart.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/clear-data.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/clear-data.png deleted file mode 100644 index b72f940ae3..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/clear-data.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/clock-select.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/clock-select.png deleted file mode 100644 index 8c567916c8..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/clock-select.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/cross.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/cross.png deleted file mode 100644 index 6b9fa6dd36..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/cross.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/duplicate.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/duplicate.png deleted file mode 100644 index 88f1a2bbf1..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/duplicate.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/edge.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/edge.png deleted file mode 100644 index bdf68ec038..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/edge.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/edit.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/edit.png deleted file mode 100644 index 2c02169358..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/edit.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/eraser--minus.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/eraser--minus.png deleted file mode 100644 index 7107473847..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/eraser--minus.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/free.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/free.png deleted file mode 100644 index a9994ae1f6..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/free.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/frequency-list.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/frequency-list.png deleted file mode 100644 index daf0bbf0d0..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/frequency-list.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/gear.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/gear.png deleted file mode 100644 index efc599dccd..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/gear.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/group.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/group.png deleted file mode 100644 index f18a8e3edc..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/group.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/information.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/information.png deleted file mode 100644 index fa9a60b5ad..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/information.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/join.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/join.png deleted file mode 100644 index 698001b915..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/join.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/magnifier--arrow.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/magnifier--arrow.png deleted file mode 100644 index 2df6c5194e..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/magnifier--arrow.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/merge.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/merge.png deleted file mode 100644 index 698001b915..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/merge.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/minus-white.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/minus-white.png deleted file mode 100644 index 8efd5d331f..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/minus-white.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/plus-circle.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/plus-circle.png deleted file mode 100644 index 113873963c..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/plus-circle.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/plus-white.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/plus-white.png deleted file mode 100644 index c765946e03..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/plus-white.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/script-binary.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/script-binary.png deleted file mode 100644 index de79d7b471..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/script-binary.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/settle.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/settle.png deleted file mode 100644 index 3d6f96d423..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/settle.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/size.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/size.png deleted file mode 100644 index f763a16880..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/size.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/statistics.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/statistics.png deleted file mode 100644 index 96bb23aa68..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/statistics.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/table-delete-column.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/table-delete-column.png deleted file mode 100644 index a3fa27ceed..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/table-delete-column.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/table-duplicate-column.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/table-duplicate-column.png deleted file mode 100644 index 60855d4937..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/table-duplicate-column.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/table-excel.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/table-excel.png deleted file mode 100644 index 2111370eb6..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/table-excel.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/table-insert-column.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/table-insert-column.png deleted file mode 100644 index 86649bf1d1..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/table-insert-column.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/table-select-row.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/table-select-row.png deleted file mode 100644 index e96313c208..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/table-select-row.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/table-select.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/table-select.png deleted file mode 100644 index ab082a7641..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/table-select.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/ui-check-boxes.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/ui-check-boxes.png deleted file mode 100644 index 05eed23dfb..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/ui-check-boxes.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/ui-slider-050.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/ui-slider-050.png deleted file mode 100644 index b012f5ce80..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/ui-slider-050.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/ungroup.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/ungroup.png deleted file mode 100644 index b22b6285fe..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/ungroup.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/wooden-box.png b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/wooden-box.png deleted file mode 100644 index f64d761057..0000000000 Binary files a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/resources/wooden-box.png and /dev/null differ diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle.properties index 87b3e2a3d8..b3822e9e65 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle.properties @@ -10,8 +10,8 @@ FirstQuartileNumber.name=Calculate first quartile (Q1) FirstQuartileNumber.description=Calculates the first quartile (Q1) MedianNumber.name=Calculate median value MedianNumber.description=Calculates the median -ThirdQuartileNumber.name=Calculate first quartile (Q3) -ThirdQuartileNumber.description=Calculates the first quartile (Q3) +ThirdQuartileNumber.name=Calculate third quartile (Q3) +ThirdQuartileNumber.description=Calculates the third quartile (Q3) InterQuartileRangeNumber.name=Calculate interquartile range (IQR) InterQuartileRangeNumber.description=Calculates the interquartile range (IQR) SumNumbers.name=Calculate sum diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_ar.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_ca.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_ca.properties new file mode 100644 index 0000000000..b6266356c1 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_ca.properties @@ -0,0 +1,21 @@ +KeepSelectedRowValue.name=Keep main selected row value +KeepSelectedRowValue.description=Simply uses the value of the main selected row +JoinWithSeparator.name=Join values with a separator +JoinWithSeparator.description=Join values of a String or list column with a separator +SetNull.name=Set null +AverageNumber.name=Calculate average value +AverageNumber.description=Calculates the average value +FirstQuartileNumber.name=Calculate first quartile (Q1) +FirstQuartileNumber.description=Calculates the first quartile (Q1) +MedianNumber.name=Calcula el valor de la mediana +MedianNumber.description=Calcula la mediana +ThirdQuartileNumber.name=Calculate third quartile (Q3) +ThirdQuartileNumber.description=Calculates the third quartile (Q3) +InterQuartileRangeNumber.name=Calculate interquartile range (IQR) +InterQuartileRangeNumber.description=Calculates the interquartile range (IQR) +SumNumbers.name=Calculate sum +SumNumbers.description=Calculates the sum +MinimumNumber.name=Calcula el valor mνnim +MinimumNumber.description=Calcula el valor mνnim +MaximumNumber.name=Calcula el valor mΰxim +MaximumNumber.description=Calcula el valor mΰxim diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_cs.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_cs.properties index 64b1f88516..c00e4a9ba2 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_cs.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_cs.properties @@ -1,49 +1,22 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-27 14\:12+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -KeepSelectedRowValue.name=Ponechat hodnotu hlavn\u00edho zvolen\u00e9ho \u0159\u00e1dku - -KeepSelectedRowValue.description=Jendodu\u0161e pou\u017eije hodnotu hlavn\u00edho zvolen\u00e9ho \u0159\u00e1dku - -JoinWithSeparator.name=P\u0159ipojit hodnoty pomoc\u00ed odd\u011blova\u010de - -JoinWithSeparator.description=P\u0159ipojit hodnoty \u0159et\u011bzce nebo sloupce seznamu pomoc\u00ed odd\u011blova\u010de - -SetNull.name=Nastavit pr\u00e1zdn\u00e9 - -AverageNumber.name=Vypo\u010d\u00edtat pr\u016fm\u011brnou hodnotu - -AverageNumber.description=Vypo\u010d\u00edt\u00e1 pr\u016fmernou hodnotu - -FirstQuartileNumber.name=Vypo\u010d\u00edtat prvn\u00ed kvartil (Q1) - -FirstQuartileNumber.description=Vypo\u010d\u00edt\u00e1 prvn\u00ed kvartil (Q1) - -MedianNumber.name=Vypo\u010d\u00edt\u00e1 hodnotu medi\u00e1nu - -MedianNumber.description=Vypo\u010d\u00edtat medi\u00e1n - -ThirdQuartileNumber.name=Vypo\u010d\u00edtat prvn\u00ed kvartil (Q3) - -ThirdQuartileNumber.description=Vypo\u010d\u00edt\u00e1 prvn\u00ed kvartil (Q3) - -InterQuartileRangeNumber.name=Vypo\u010d\u00edtat mezikvartiln\u00ed rozsah (IQR) - -InterQuartileRangeNumber.description=Vypo\u010d\u00edt\u00e1 mezikvartiln\u00ed rozsah (IQR) - -SumNumbers.name=Vypo\u010d\u00edtat sou\u010det - -SumNumbers.description=Vypo\u010d\u00edt\u00e1 sou\u010det - -MinimumNumber.name=Vypo\u010d\u00edtat minim\u00e1ln\u00ed hodnotu - -MinimumNumber.description=Vypo\u010d\u00edt\u00e1 minim\u00e1ln\u00ed hodnotu - -MaximumNumber.name=Vypo\u010d\u00edtat maxim\u00e1ln\u00ed hodnotu - -MaximumNumber.description=Vypo\u010d\u00edt\u00e1 maxim\u00e1ln\u00ed hodnotu +KeepSelectedRowValue.name=Ponechat hodnotu hlavnνho zvolenιho \u0159αdku +KeepSelectedRowValue.description=Jendodu\u0161e pou\u017eije hodnotu hlavnνho zvolenιho \u0159αdku +JoinWithSeparator.name=P\u0159ipojit hodnoty pomocν odd\u011blova\u010de +JoinWithSeparator.description=P\u0159ipojit hodnoty \u0159et\u011bzce nebo sloupce seznamu pomocν odd\u011blova\u010de +SetNull.name=Nastavit prαzdnι + +AverageNumber.name=Vypo\u010dνtat pr\u016fm\u011brnou hodnotu +AverageNumber.description=Vypo\u010dνtα pr\u016fmernou hodnotu +FirstQuartileNumber.name=Vypo\u010dνtat prvnν kvartil (Q1) +FirstQuartileNumber.description=Vypo\u010dνtα prvnν kvartil (Q1) +MedianNumber.name=Vypo\u010dνtα hodnotu mediαnu +MedianNumber.description=Vypo\u010dνtat mediαn +# ThirdQuartileNumber.name=Calculate third quartile (Q3) +# ThirdQuartileNumber.description=Calculates the third quartile (Q3) +InterQuartileRangeNumber.name=Vypo\u010dνtat mezikvartilnν rozsah (IQR) +InterQuartileRangeNumber.description=Vypo\u010dνtα mezikvartilnν rozsah (IQR) +SumNumbers.name=Vypo\u010dνtat sou\u010det +SumNumbers.description=Vypo\u010dνtα sou\u010det +MinimumNumber.name=Vypo\u010dνtat minimαlnν hodnotu +MinimumNumber.description=Vypo\u010dνtα minimαlnν hodnotu +MaximumNumber.name=Vypo\u010dνtat maximαlnν hodnotu +MaximumNumber.description=Vypo\u010dνtα maximαlnν hodnotu diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_de.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_de.properties new file mode 100644 index 0000000000..ee82d2425e --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_de.properties @@ -0,0 +1,22 @@ +KeepSelectedRowValue.name=Primδr ausgewδhlten Zeilenwert beibehalten +KeepSelectedRowValue.description=Verwendet den primδr ausgewδhlten Zeilenwert +JoinWithSeparator.name=Werte mit einem Trenner zusammenfόgen +JoinWithSeparator.description=Fόge Werte einer String oder Listen-Spalte mit Trenner zusammen +SetNull.name=Auf Wert 'null' setzen + +AverageNumber.name=Durschnittswert berechnen +AverageNumber.description=Berechnet den Durchschnittswert +FirstQuartileNumber.name=Erstes Quartil (Q1) berechnen +FirstQuartileNumber.description=Berechnet das erste Quartil (Q1) +MedianNumber.name=Median-Wert berechnen +MedianNumber.description=Berechnet den Median-Wert +ThirdQuartileNumber.name=Drittes Quartil (Q3) berechnen +ThirdQuartileNumber.description=Berechnet das dritte Quartil (Q3) +InterQuartileRangeNumber.name=Interquartilsabstand (IQR) berechnen +InterQuartileRangeNumber.description=Berechnet den Interquartilsabstand (IQR) +SumNumbers.name=Summe berechnen +SumNumbers.description=Berechnet die Summe +MinimumNumber.name=Minimal-Wert berechnen +MinimumNumber.description=Berechnet den Minimal-Wert +MaximumNumber.name=Maximal-Wert berechnen +MaximumNumber.description=Berechnet den Maximal-Wert diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_es.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_es.properties index f00cb248ad..be5ceeb6fe 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_es.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_es.properties @@ -1,50 +1,21 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-07 22\:09+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - KeepSelectedRowValue.name=Mantener valor de la fila principal seleccionada - KeepSelectedRowValue.description=Simplemente utiliza el valor de la fila principal seleccionada - JoinWithSeparator.name=Unir valores con separador - JoinWithSeparator.description=Une los valores de una columna de tipo String o lista con un separador - SetNull.name=Utilizar valor nulo - AverageNumber.name=Calcular valor medio - -AverageNumber.description=Calcula el valor medio - +AverageNumber.description=Calcula el promedio FirstQuartileNumber.name=Calcular primer cuartil (Q1) - FirstQuartileNumber.description=Calcula el primer cuartil (Q1) - MedianNumber.name=Calcular mediana - MedianNumber.description=Calcula la mediana - ThirdQuartileNumber.name=Calcular tercer cuartil (Q3) - ThirdQuartileNumber.description=Calcula el tercer cuartil (Q3) - -InterQuartileRangeNumber.name=Calcular rango intercuart\u00edlico (IQR) - -InterQuartileRangeNumber.description=Calcula el rango intercuart\u00edlico (IQR) - +InterQuartileRangeNumber.name=Calcular rango intercuartνlico (IQR) +InterQuartileRangeNumber.description=Calcula el rango intercuart\u00EDlico (IQR) SumNumbers.name=Calcular suma - SumNumbers.description=Calcula la suma - -MinimumNumber.name=Calcular valor m\u00ednimo - -MinimumNumber.description=Calcula el valor m\u00ednimo - -MaximumNumber.name=Calcular valor m\u00e1ximo - -MaximumNumber.description=Calcula el valor m\u00e1ximo +MinimumNumber.name=Calcula el valor m\u00EDnimo +MinimumNumber.description=Calcula el valor mνnimo +MaximumNumber.name=Calcular valor mαximo +MaximumNumber.description=Calcula el valor mαximo diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_fr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_fr.properties index 502bb76362..85f6aee559 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_fr.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_fr.properties @@ -1,49 +1,21 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-07 11\:48+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -KeepSelectedRowValue.name=Garder la valeur de la ligne principale s\u00e9lectionn\u00e9e - -KeepSelectedRowValue.description=R\u00e9utiliser la valeur de la ligne principale s\u00e9lectionn\u00e9e - -JoinWithSeparator.name=Joindre les valeurs avec un s\u00e9parateur - -JoinWithSeparator.description=Joindre les valeurs d'une liste/colonne de cha\u00eenes de caract\u00e8res avec un s\u00e9parateur - +KeepSelectedRowValue.name=Garder la valeur de la ligne principale sιlectionnιe +KeepSelectedRowValue.description=Rιutiliser la valeur de la ligne principale sιlectionnιe +JoinWithSeparator.name=Joindre les valeurs avec un sιparateur +JoinWithSeparator.description=Joindre les valeurs d'une liste/colonne de chaξnes de caractθres avec un sιparateur SetNull.name=Rendre nul - -AverageNumber.name=Calculer la moyenne - -AverageNumber.description=Calculer la moyenne - +AverageNumber.name=Calculer la valeur moyenne +AverageNumber.description=Calculer la valeur moyenne FirstQuartileNumber.name=Calculer le premier quartile (Q1) - FirstQuartileNumber.description=Calculer le premier quartile (Q1) - -MedianNumber.name=Calculer la m\u00e9diane - -MedianNumber.description=Calculer la m\u00e9diane - -ThirdQuartileNumber.name=Calculer le troisi\u00e8me quartile (Q3) - -ThirdQuartileNumber.description=Calculer le troisi\u00e8me quartile (Q3) - -InterQuartileRangeNumber.name=Calculer l'\u00e9cart interquartile (EI) - -InterQuartileRangeNumber.description=Calculer l'\u00e9cart interquartile (EI) - +MedianNumber.name=Calculer la valeur m\u00E9diane +MedianNumber.description=Calculer la mιdiane +ThirdQuartileNumber.name=Calcule le troisiθme quartile (Q3) +ThirdQuartileNumber.description=Calculer le troisiθme quartile (Q3) +InterQuartileRangeNumber.name=Calculer l'\u00E9cart interquartile (EI) +InterQuartileRangeNumber.description=Calculer l'ιcart interquartile (EI) SumNumbers.name=Calculer la somme - SumNumbers.description=Calculer la somme - -MinimumNumber.name=Calculer le minimum - -MinimumNumber.description=Calculer le minimum - -MaximumNumber.name=Calculer le maximum - -MaximumNumber.description=Calculer le maximum +MinimumNumber.name=Calculer la valeur minimum +MinimumNumber.description=Calculer la valeur minimum +MaximumNumber.name=Calculer la valeur maximum +MaximumNumber.description=Calculer la valeur maximum diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_he.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_he.properties new file mode 100644 index 0000000000..ea6042f408 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_he.properties @@ -0,0 +1,21 @@ +KeepSelectedRowValue.name=Keep main selected row value +KeepSelectedRowValue.description=Simply uses the value of the main selected row +JoinWithSeparator.name=Join values with a separator +JoinWithSeparator.description=Join values of a String or list column with a separator +SetNull.name=Set null +AverageNumber.name=Calculate average value +AverageNumber.description=Calculates the average value +FirstQuartileNumber.name=Calculate first quartile (Q1) +FirstQuartileNumber.description=Calculates the first quartile (Q1) +MedianNumber.name=Calculate median value +MedianNumber.description=Calculates the median +ThirdQuartileNumber.name=Calculate third quartile (Q3) +ThirdQuartileNumber.description=Calculates the third quartile (Q3) +InterQuartileRangeNumber.name=Calculate interquartile range (IQR) +InterQuartileRangeNumber.description=Calculates the interquartile range (IQR) +SumNumbers.name=Calculate sum +SumNumbers.description=Calculates the sum +MinimumNumber.name=Calculate minimum value +MinimumNumber.description=Calculates the minimum value +MaximumNumber.name=Calculate maximum value +MaximumNumber.description=Calculates the maximum value diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_hu.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_hu.properties new file mode 100644 index 0000000000..2693657115 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_hu.properties @@ -0,0 +1,23 @@ + + +InterQuartileRangeNumber.name=Interkvartilis tartom\u00E1ny (IQR) kisz\u00E1m\u00EDt\u00E1sa +AverageNumber.description=Kisz\u00E1m\u00EDtja az \u00E1tlag\u00E9rt\u00E9ket +MaximumNumber.name=Sz\u00E1m\u00EDtsa ki a maxim\u00E1lis \u00E9rt\u00E9ket +FirstQuartileNumber.name=Az els\u0151 kvartilis kisz\u00E1m\u00EDt\u00E1sa (Q1) +InterQuartileRangeNumber.description=Kisz\u00E1m\u00EDtja az interkvartilis tartom\u00E1nyt (IQR) +MaximumNumber.description=Kisz\u00E1m\u00EDtja a maxim\u00E1lis \u00E9rt\u00E9ket +ThirdQuartileNumber.description=Kisz\u00E1m\u00EDtja a harmadik kvartilist (Q3) +MedianNumber.name=Sz\u00E1m\u00EDtsa ki a medi\u00E1n \u00E9rt\u00E9ket +MinimumNumber.name=Sz\u00E1m\u00EDtsa ki a minim\u00E1lis \u00E9rt\u00E9ket +MinimumNumber.description=Kisz\u00E1m\u00EDtja a minim\u00E1lis \u00E9rt\u00E9ket +AverageNumber.name=Sz\u00E1m\u00EDtsa ki az \u00E1tlag\u00E9rt\u00E9ket +SumNumbers.description=Kisz\u00E1molja az \u00F6sszeget +KeepSelectedRowValue.description=Egyszer\u0171en a kiv\u00E1lasztott f\u0151 sor \u00E9rt\u00E9k\u00E9t haszn\u00E1lja +SetNull.name=\u00C1ll\u00EDtsa null\u00E1ra +KeepSelectedRowValue.name=Gephi harmadik felek be\u00E9p\u00FCl\u0151 moduljai +MedianNumber.description=Kisz\u00E1m\u00EDtja a medi\u00E1nt +JoinWithSeparator.name=K\u00F6sd \u00F6ssze az \u00E9rt\u00E9keket elv\u00E1laszt\u00F3val +SumNumbers.name=Sz\u00E1m\u00EDtsa ki az \u00F6sszeget +JoinWithSeparator.description=Egy karakterl\u00E1nc vagy listaoszlop \u00E9rt\u00E9keit elv\u00E1laszt\u00F3val egyes\u00EDtse +FirstQuartileNumber.description=Kisz\u00E1m\u00EDtja az els\u0151 kvartilist (Q1) +ThirdQuartileNumber.name=Harmadik kvartilis kisz\u00E1m\u00EDt\u00E1sa (Q3) diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_it.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_it.properties new file mode 100644 index 0000000000..ea6042f408 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_it.properties @@ -0,0 +1,21 @@ +KeepSelectedRowValue.name=Keep main selected row value +KeepSelectedRowValue.description=Simply uses the value of the main selected row +JoinWithSeparator.name=Join values with a separator +JoinWithSeparator.description=Join values of a String or list column with a separator +SetNull.name=Set null +AverageNumber.name=Calculate average value +AverageNumber.description=Calculates the average value +FirstQuartileNumber.name=Calculate first quartile (Q1) +FirstQuartileNumber.description=Calculates the first quartile (Q1) +MedianNumber.name=Calculate median value +MedianNumber.description=Calculates the median +ThirdQuartileNumber.name=Calculate third quartile (Q3) +ThirdQuartileNumber.description=Calculates the third quartile (Q3) +InterQuartileRangeNumber.name=Calculate interquartile range (IQR) +InterQuartileRangeNumber.description=Calculates the interquartile range (IQR) +SumNumbers.name=Calculate sum +SumNumbers.description=Calculates the sum +MinimumNumber.name=Calculate minimum value +MinimumNumber.description=Calculates the minimum value +MaximumNumber.name=Calculate maximum value +MaximumNumber.description=Calculates the maximum value diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_ja.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_ja.properties index 65a2f58b61..9e9f6a9ad6 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_ja.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_ja.properties @@ -1,49 +1,22 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-01 17\:04+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -KeepSelectedRowValue.name=\u4e3b\u306a\u9078\u629e\u3055\u308c\u305f\u884c\u306e\u5024\u3092\u4fdd\u6301 - -KeepSelectedRowValue.description=\u5358\u7d14\u306b\u30e1\u30a4\u30f3\u9078\u629e\u3055\u308c\u305f\u884c\u306e\u5024\u3092\u4f7f\u7528\u3057\u307e\u3059 - -JoinWithSeparator.name=\u533a\u5207\u308a\u6587\u5b57\u3067\u5024\u3092\u7d50\u5408 - -JoinWithSeparator.description=\u533a\u5207\u308a\u6587\u5b57\u3067\u6587\u5b57\u5217\u307e\u305f\u306f\u30ea\u30b9\u30c8\u306e\u5217\u306e\u5024\u3092\u7d50\u5408 - -SetNull.name=null\u3092\u8a2d\u5b9a - -AverageNumber.name=\u5e73\u5747\u5024\u306e\u8a08\u7b97 - -AverageNumber.description=\u5e73\u5747\u5024\u306e\u8a08\u7b97 - -FirstQuartileNumber.name=\u7b2c\u4e00\u56db\u5206\u4f4d\u5024\u306e\u8a08\u7b97 (Q1)\u306e\u8a08\u7b97 - -FirstQuartileNumber.description=\u7b2c\u4e00\u56db\u5206\u4f4d\u5024\u306e\u8a08\u7b97 (Q1)\u306e\u8a08\u7b97 - -MedianNumber.name=\u4e2d\u592e\u5024\u306e\u8a08\u7b97 - -MedianNumber.description=\u4e2d\u592e\u5024\u306e\u8a08\u7b97 - -ThirdQuartileNumber.name=\u7b2c\u4e09\u56db\u5206\u4f4d\u5024\u306e\u8a08\u7b97 (Q3)\u306e\u8a08\u7b97 - -ThirdQuartileNumber.description=\u7b2c\u4e09\u56db\u5206\u4f4d\u5024\u306e\u8a08\u7b97 (Q3)\u306e\u8a08\u7b97 - -InterQuartileRangeNumber.name=\u56db\u5206\u4f4d\u6570\u7bc4\u56f2 (IQR)\u306e\u8a08\u7b97 - -InterQuartileRangeNumber.description=\u56db\u5206\u4f4d\u6570\u7bc4\u56f2 (IQR)\u306e\u8a08\u7b97 - -SumNumbers.name=\u5408\u8a08\u306e\u8a08\u7b97 - -SumNumbers.description=\u5408\u8a08\u306e\u8a08\u7b97 - -MinimumNumber.name=\u6700\u5c0f\u5024\u306e\u8a08\u7b97 - -MinimumNumber.description=\u6700\u5c0f\u5024\u306e\u8a08\u7b97 - -MaximumNumber.name=\u6700\u5927\u5024\u306e\u8a08\u7b97 - -MaximumNumber.description=\u6700\u5927\u5024\u306e\u8a08\u7b97 +KeepSelectedRowValue.name=\u4e3b\u306a\u9078\u629e\u3055\u308c\u305f\u884c\u306e\u5024\u3092\u4fdd\u6301 +KeepSelectedRowValue.description=\u5358\u7d14\u306b\u30e1\u30a4\u30f3\u9078\u629e\u3055\u308c\u305f\u884c\u306e\u5024\u3092\u4f7f\u7528\u3057\u307e\u3059 +JoinWithSeparator.name=\u533a\u5207\u308a\u6587\u5b57\u3067\u5024\u3092\u7d50\u5408 +JoinWithSeparator.description=\u533a\u5207\u308a\u6587\u5b57\u3067\u6587\u5b57\u5217\u307e\u305f\u306f\u30ea\u30b9\u30c8\u306e\u5217\u306e\u5024\u3092\u7d50\u5408 +SetNull.name=null\u3092\u8a2d\u5b9a + +AverageNumber.name=\u5e73\u5747\u5024\u306e\u8a08\u7b97 +AverageNumber.description=\u5e73\u5747\u5024\u306e\u8a08\u7b97 +FirstQuartileNumber.name=\u7b2c\u4e00\u56db\u5206\u4f4d\u5024\u306e\u8a08\u7b97 (Q1)\u306e\u8a08\u7b97 +FirstQuartileNumber.description=\u7b2c\u4e00\u56db\u5206\u4f4d\u5024\u306e\u8a08\u7b97 (Q1)\u306e\u8a08\u7b97 +MedianNumber.name=\u4e2d\u592e\u5024\u306e\u8a08\u7b97 +MedianNumber.description=\u4e2d\u592e\u5024\u306e\u8a08\u7b97 +# ThirdQuartileNumber.name=Calculate third quartile (Q3) +# ThirdQuartileNumber.description=Calculates the third quartile (Q3) +InterQuartileRangeNumber.name=\u56db\u5206\u4f4d\u6570\u7bc4\u56f2 (IQR)\u306e\u8a08\u7b97 +InterQuartileRangeNumber.description=\u56db\u5206\u4f4d\u6570\u7bc4\u56f2 (IQR)\u306e\u8a08\u7b97 +SumNumbers.name=\u5408\u8a08\u306e\u8a08\u7b97 +SumNumbers.description=\u5408\u8a08\u306e\u8a08\u7b97 +MinimumNumber.name=\u6700\u5c0f\u5024\u306e\u8a08\u7b97 +MinimumNumber.description=\u6700\u5c0f\u5024\u306e\u8a08\u7b97 +MaximumNumber.name=\u6700\u5927\u5024\u306e\u8a08\u7b97 +MaximumNumber.description=\u6700\u5927\u5024\u306e\u8a08\u7b97 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_nl.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_nl.properties new file mode 100644 index 0000000000..ea6042f408 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_nl.properties @@ -0,0 +1,21 @@ +KeepSelectedRowValue.name=Keep main selected row value +KeepSelectedRowValue.description=Simply uses the value of the main selected row +JoinWithSeparator.name=Join values with a separator +JoinWithSeparator.description=Join values of a String or list column with a separator +SetNull.name=Set null +AverageNumber.name=Calculate average value +AverageNumber.description=Calculates the average value +FirstQuartileNumber.name=Calculate first quartile (Q1) +FirstQuartileNumber.description=Calculates the first quartile (Q1) +MedianNumber.name=Calculate median value +MedianNumber.description=Calculates the median +ThirdQuartileNumber.name=Calculate third quartile (Q3) +ThirdQuartileNumber.description=Calculates the third quartile (Q3) +InterQuartileRangeNumber.name=Calculate interquartile range (IQR) +InterQuartileRangeNumber.description=Calculates the interquartile range (IQR) +SumNumbers.name=Calculate sum +SumNumbers.description=Calculates the sum +MinimumNumber.name=Calculate minimum value +MinimumNumber.description=Calculates the minimum value +MaximumNumber.name=Calculate maximum value +MaximumNumber.description=Calculates the maximum value diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_pl.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_pl.properties new file mode 100644 index 0000000000..6c61c666e8 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_pl.properties @@ -0,0 +1,20 @@ + + +MedianNumber.description=Oblicza median\u0119 +JoinWithSeparator.name=Po\u0142\u0105cz zmienne separatorem +SetNull.name=Ustaw jako null +AverageNumber.name=Oblicz warto\u015B\u0107 \u015Bredni\u0105 +AverageNumber.description=Oblicza \u015Bredni\u0105 +FirstQuartileNumber.name=Oblicz pierwszy kwartyl (Q1) +FirstQuartileNumber.description=Oblicza pierwszy kwartyl (Q1) +MedianNumber.name=Oblicz median\u0119 +ThirdQuartileNumber.name=Oblicz trzeci kwartyl (Q3) +ThirdQuartileNumber.description=Oblicza trzeci kwartyl (Q +InterQuartileRangeNumber.name=Oblicz rozst\u0119p mi\u0119dzykwartylowy (IQR) +InterQuartileRangeNumber.description=Oblicza rozst\u0119p mi\u0119dzykwartylowy (IQR) +SumNumbers.name=Oblicz sum\u0119 +SumNumbers.description=Oblicza sum\u0119 +MinimumNumber.name=Oblicz warto\u015B\u0107 minimaln\u0105 +MinimumNumber.description=Oblicza warto\u015B\u0107 minimaln\u0105 +MaximumNumber.name=Oblicz warto\u015B\u0107 maksymaln\u0105 +MaximumNumber.description=Oblicza warto\u015B\u0107 maksymaln\u0105 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_pt_BR.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_pt_BR.properties index 1da49db4e5..534c53468a 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_pt_BR.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_pt_BR.properties @@ -1,49 +1,22 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 01\:16+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -KeepSelectedRowValue.name=Manter valor da linha principal selecionada - -KeepSelectedRowValue.description=Simplesmente usar o valor da linha principal selecionada - -JoinWithSeparator.name=Juntar valores com um separador - -JoinWithSeparator.description=Juntar valores de uma coluna texto ou lista com um separador - -SetNull.name=Utilizar valor nulo - -AverageNumber.name=Calcular valor m\u00e9dio - -AverageNumber.description=Calcula o valor m\u00e9dio - -FirstQuartileNumber.name=Calcular primeiro quartil (Q1) - -FirstQuartileNumber.description=Calcula o primeiro quartil (Q1) - -MedianNumber.name=Calcular mediana - -MedianNumber.description=Calcula a mediana - -ThirdQuartileNumber.name=Calcular primeiro quartil (Q3) - -ThirdQuartileNumber.description=Calcula o primeiro quartil (Q3) - -InterQuartileRangeNumber.name=Calcular intervalo interquartil (IQR) - -InterQuartileRangeNumber.description=Calcula o intervalo interquartil (IQR) - -SumNumbers.name=Calcular soma - -SumNumbers.description=Calcula a soma - -MinimumNumber.name=Calcular valor m\u00ednimo - -MinimumNumber.description=Calcula o valor m\u00ednimo - -MaximumNumber.name=Calcular valor m\u00e1ximo - -MaximumNumber.description=Calcula o valor m\u00e1ximo +KeepSelectedRowValue.name=Manter valor da linha principal selecionada +KeepSelectedRowValue.description=Simplesmente usar o valor da linha principal selecionada +JoinWithSeparator.name=Juntar valores com um separador +JoinWithSeparator.description=Juntar valores de uma coluna texto ou lista com um separador +SetNull.name=Utilizar valor nulo + +AverageNumber.name=Calcular valor mιdio +AverageNumber.description=Calcula o valor mιdio +FirstQuartileNumber.name=Calcular primeiro quartil (Q1) +FirstQuartileNumber.description=Calcula o primeiro quartil (Q1) +MedianNumber.name=Calcular mediana +MedianNumber.description=Calcula a mediana +ThirdQuartileNumber.name=Calcular terceiro quartil (Q3) +ThirdQuartileNumber.description=Calcula o terceiro quartil (Q3) +InterQuartileRangeNumber.name=Calcular intervalo interquartil (IQR) +InterQuartileRangeNumber.description=Calcula o intervalo interquartil (IQR) +SumNumbers.name=Calcular soma +SumNumbers.description=Calcula a soma +MinimumNumber.name=Calcular valor mνnimo +MinimumNumber.description=Calcula o valor mνnimo +MaximumNumber.name=Calcular valor mαximo +MaximumNumber.description=Calcula o valor mαximo diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_ro.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_ro.properties new file mode 100644 index 0000000000..dc86963abf --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_ro.properties @@ -0,0 +1,23 @@ + + +SetNull.name=Seteaz\u0103 nul +MedianNumber.description=Calculeaz\u0103 mediana +SumNumbers.description=Calculeaz\u0103 suma +MinimumNumber.name=Calculeaz\u0103 valoarea minim\u0103 +JoinWithSeparator.description=Une\u0219te valorile unei coloane de tip \u0219ir de caractere sau list\u0103 cu un separator +KeepSelectedRowValue.name=P\u0103streaz\u0103 valoarea din linia principal\u0103 selectat\u0103 +KeepSelectedRowValue.description=Pur \u0219i simplu folose\u0219te valoarea de pe linia principal\u0103 selectat\u0103 +JoinWithSeparator.name=Une\u0219te valorile cu un separator +AverageNumber.description=Calculeaz\u0103 valoarea medie +AverageNumber.name=Calculeaz\u0103 valoarea medie +MedianNumber.name=Calculeaz\u0103 valoarea median\u0103 +FirstQuartileNumber.name=Calculeaz\u0103 prima cuartil\u0103 (Q1) +FirstQuartileNumber.description=Calculeaz\u0103 prima cuartil\u0103 (Q1) +ThirdQuartileNumber.name=Calculeaz\u0103 a treia cuartil\u0103 (Q3) +ThirdQuartileNumber.description=Calculeaz\u0103 a treia cuartil\u0103 (Q3) +InterQuartileRangeNumber.name=Calculeaz\u0103 intervalul dintre cuartile (IQR) +InterQuartileRangeNumber.description=Calculeaz\u0103 intervalul dintre cuartile (IQR) +SumNumbers.name=Calculeaz\u0103 suma +MinimumNumber.description=Calculeaz\u0103 valoarea minim\u0103 +MaximumNumber.name=Calculeaz\u0103 valoarea maxim\u0103 +MaximumNumber.description=Calculeaz\u0103 valoarea maxim\u0103 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_ru.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_ru.properties index e3881d6ce8..016172230d 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_ru.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_ru.properties @@ -1,49 +1,22 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-12 07\:57+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -KeepSelectedRowValue.name=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 - -KeepSelectedRowValue.description=\u041f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 - -JoinWithSeparator.name=\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c - -JoinWithSeparator.description=\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f - -SetNull.name=Null - -AverageNumber.name=\u041f\u043e\u0438\u0441\u043a \u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e - -AverageNumber.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 - -FirstQuartileNumber.name=\u0420\u0430\u0441\u0447\u0451\u0442 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044f (Q1) - -FirstQuartileNumber.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044c (Q1) - -MedianNumber.name=\u041f\u043e\u0438\u0441\u043a \u043c\u0435\u0434\u0438\u0430\u043d\u044b - -MedianNumber.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043c\u0435\u0434\u0438\u0430\u043d\u0443 - -ThirdQuartileNumber.name=\u0420\u0430\u0441\u0447\u0451\u0442 \u0442\u0440\u0435\u0442\u044c\u0435\u0433\u043e \u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044f (Q3) - -ThirdQuartileNumber.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0442\u0440\u0435\u0442\u0438\u0439 \u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044c (Q3) - -InterQuartileRangeNumber.name=\u041f\u043e\u0438\u0441\u043a \u043c\u0435\u0436\u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0430\u0445\u0430 (IQR) - -InterQuartileRangeNumber.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043c\u0435\u0436\u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0430\u0445 (IQR) - -SumNumbers.name=\u0421\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 - -SumNumbers.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0443\u043c\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 - -MinimumNumber.name=\u041f\u043e\u0438\u0441\u043a \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f - -MinimumNumber.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 - -MaximumNumber.name=\u041f\u043e\u0438\u0441\u043a \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f - -MaximumNumber.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 +KeepSelectedRowValue.name=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 +KeepSelectedRowValue.description=\u041f\u0440\u043e\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0438\u0437 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u0441\u0442\u0440\u043e\u043a\u0438 +JoinWithSeparator.name=\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c +JoinWithSeparator.description=\u041e\u0431\u044a\u0435\u0434\u0438\u043d\u0438\u0442\u044c \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0441\u043f\u0438\u0441\u043e\u043a \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044f +SetNull.name=Null + +AverageNumber.name=\u041f\u043e\u0438\u0441\u043a \u0441\u0440\u0435\u0434\u043d\u0435\u0433\u043e +AverageNumber.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0430\u0440\u0438\u0444\u043c\u0435\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 +FirstQuartileNumber.name=\u0420\u0430\u0441\u0447\u0451\u0442 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044f (Q1) +FirstQuartileNumber.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043f\u0435\u0440\u0432\u044b\u0439 \u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044c (Q1) +MedianNumber.name=\u041f\u043e\u0438\u0441\u043a \u043c\u0435\u0434\u0438\u0430\u043d\u044b +MedianNumber.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043c\u0435\u0434\u0438\u0430\u043d\u0443 +# ThirdQuartileNumber.name=Calculate third quartile (Q3) +# ThirdQuartileNumber.description=Calculates the third quartile (Q3) +InterQuartileRangeNumber.name=\u041f\u043e\u0438\u0441\u043a \u043c\u0435\u0436\u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0430\u0445\u0430 (IQR) +InterQuartileRangeNumber.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043c\u0435\u0436\u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0430\u0445 (IQR) +SumNumbers.name=\u0421\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 +SumNumbers.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0441\u0443\u043c\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 +MinimumNumber.name=\u041f\u043e\u0438\u0441\u043a \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f +MinimumNumber.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 +MaximumNumber.name=\u041f\u043e\u0438\u0441\u043a \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f +MaximumNumber.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_th.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_tr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_tr.properties new file mode 100644 index 0000000000..ea6042f408 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_tr.properties @@ -0,0 +1,21 @@ +KeepSelectedRowValue.name=Keep main selected row value +KeepSelectedRowValue.description=Simply uses the value of the main selected row +JoinWithSeparator.name=Join values with a separator +JoinWithSeparator.description=Join values of a String or list column with a separator +SetNull.name=Set null +AverageNumber.name=Calculate average value +AverageNumber.description=Calculates the average value +FirstQuartileNumber.name=Calculate first quartile (Q1) +FirstQuartileNumber.description=Calculates the first quartile (Q1) +MedianNumber.name=Calculate median value +MedianNumber.description=Calculates the median +ThirdQuartileNumber.name=Calculate third quartile (Q3) +ThirdQuartileNumber.description=Calculates the third quartile (Q3) +InterQuartileRangeNumber.name=Calculate interquartile range (IQR) +InterQuartileRangeNumber.description=Calculates the interquartile range (IQR) +SumNumbers.name=Calculate sum +SumNumbers.description=Calculates the sum +MinimumNumber.name=Calculate minimum value +MinimumNumber.description=Calculates the minimum value +MaximumNumber.name=Calculate maximum value +MaximumNumber.description=Calculates the maximum value diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_zh_CN.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_zh_CN.properties index fe6f3ab770..190bc6657f 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_zh_CN.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_zh_CN.properties @@ -1,48 +1,23 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:18+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - KeepSelectedRowValue.name=\u4fdd\u6301\u4e3b\u8981\u7684\u9009\u62e9\u884c\u503c - KeepSelectedRowValue.description=\u4ec5\u4ec5\u5e94\u7528\u4e3b\u8981\u7684\u9009\u62e9\u884c\u503c - JoinWithSeparator.name=\u5206\u9694\u7b26\u52a0\u5165\u6570\u503c - JoinWithSeparator.description=\u5206\u9694\u7b26\u52a0\u5165\u4e00\u4e32\u5b57\u7b26\u503c\u6216\u8005\u5b57\u7b26\u5217 - SetNull.name=\u7f6e\u7a7a - AverageNumber.name=\u8ba1\u7b97\u5747\u503c - AverageNumber.description=\u8ba1\u7b97\u5747\u503c - -FirstQuartileNumber.name=\u8ba1\u7b97\u7b2c\u4e00\u4e2a\u56db\u5206\u4f4d\u70b9\uff08Q1\uff09 - -FirstQuartileNumber.description=\u8ba1\u7b97\u7b2c\u4e00\u4e2a\u56db\u5206\u4f4d\u70b9\uff08Q1\uff09 - +FirstQuartileNumber.name=\u8BA1\u7B97\u7B2C\u4E00\u56DB\u5206\u4F4D\u6570\uFF08Q1\uFF09 +FirstQuartileNumber.description=\u8BA1\u7B97\u7B2C\u4E00\u56DB\u5206\u4F4D\u70B9\uFF08Q1\uFF09 MedianNumber.name=\u8ba1\u7b97\u4e2d\u4f4d\u6570 - -MedianNumber.description=\u8ba1\u7b97zhongweishu - -ThirdQuartileNumber.name=\u8ba1\u7b97\u7b2c\u4e00\u4e2a\u56db\u5206\u4f4d\u70b9\uff08Q3\uff09 - -ThirdQuartileNumber.description=\u8ba1\u7b97\u7b2c\u4e00\u4e2a\u56db\u5206\u4f4d\u70b9\uff08Q3\uff09 - -InterQuartileRangeNumber.name=\u8ba1\u7b97\u56db\u5206\u4f4d\u5dee\uff08IQR\uff09 - +MedianNumber.description=\u8BA1\u7B97\u4E2D\u4F4D\u6570 +# ThirdQuartileNumber.name=Calculate third quartile (Q3) +# ThirdQuartileNumber.description=Calculates the third quartile (Q3) +InterQuartileRangeNumber.name=\u8BA1\u7B97\u56DB\u5206\u4F4D\u5DEE\uFF08IQR\uFF09 InterQuartileRangeNumber.description=\u8ba1\u7b97\u56db\u5206\u4f4d\u5dee\uff08IQR\uff09 - SumNumbers.name=\u8ba1\u7b97\u603b\u548c - -SumNumbers.description=\u8ba1\u7b97zonghe - -MinimumNumber.name=\u8ba1\u7b97zuixiaozhi - -MinimumNumber.description=\u8ba1\u7b97zuixiaozhi - +SumNumbers.description=\u8BA1\u7B97\u603B\u548C +MinimumNumber.name=\u8BA1\u7B97\u6700\u5C0F\u503C +MinimumNumber.description=\u8BA1\u7B97\u6700\u5C0F\u503C MaximumNumber.name=\u8ba1\u7b97\u6700\u5927\u503c - -MaximumNumber.description=\u8ba1\u7b97zuidazhi +MaximumNumber.description=\u8BA1\u7B97\u6700\u5927\u503C +ThirdQuartileNumber.description=\u8BA1\u7B97\u7B2C\u4E09\u56DB\u5206\u4F4D\u6570 (Q3) +ThirdQuartileNumber.name=\u8BA1\u7B97\u7B2C\u4E09\u56DB\u5206\u4F4D\u6570\uFF08Q3\uFF09 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_zh_TW.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_zh_TW.properties new file mode 100644 index 0000000000..ea6042f408 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/Bundle_zh_TW.properties @@ -0,0 +1,21 @@ +KeepSelectedRowValue.name=Keep main selected row value +KeepSelectedRowValue.description=Simply uses the value of the main selected row +JoinWithSeparator.name=Join values with a separator +JoinWithSeparator.description=Join values of a String or list column with a separator +SetNull.name=Set null +AverageNumber.name=Calculate average value +AverageNumber.description=Calculates the average value +FirstQuartileNumber.name=Calculate first quartile (Q1) +FirstQuartileNumber.description=Calculates the first quartile (Q1) +MedianNumber.name=Calculate median value +MedianNumber.description=Calculates the median +ThirdQuartileNumber.name=Calculate third quartile (Q3) +ThirdQuartileNumber.description=Calculates the third quartile (Q3) +InterQuartileRangeNumber.name=Calculate interquartile range (IQR) +InterQuartileRangeNumber.description=Calculates the interquartile range (IQR) +SumNumbers.name=Calculate sum +SumNumbers.description=Calculates the sum +MinimumNumber.name=Calculate minimum value +MinimumNumber.description=Calculates the minimum value +MaximumNumber.name=Calculate maximum value +MaximumNumber.description=Calculates the maximum value diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/cs.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/cs.po deleted file mode 100644 index 4916e2c065..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/cs.po +++ /dev/null @@ -1,82 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-27 14:12+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "KeepSelectedRowValue.name" -msgstr "Ponechat hodnotu hlavnΓ­ho zvolenΓ©ho Ε™Γ‘dku" - -msgid "KeepSelectedRowValue.description" -msgstr "JendoduΕ‘e pouΕΎije hodnotu hlavnΓ­ho zvolenΓ©ho Ε™Γ‘dku" - -msgid "JoinWithSeparator.name" -msgstr "PΕ™ipojit hodnoty pomocΓ­ oddΔ›lovače" - -msgid "JoinWithSeparator.description" -msgstr "PΕ™ipojit hodnoty Ε™etΔ›zce nebo sloupce seznamu pomocΓ­ oddΔ›lovače" - -msgid "SetNull.name" -msgstr "Nastavit prΓ‘zdnΓ©" - -msgid "AverageNumber.name" -msgstr "Vypočítat prΕ―mΔ›rnou hodnotu" - -msgid "AverageNumber.description" -msgstr "VypočítΓ‘ prΕ―mernou hodnotu" - -msgid "FirstQuartileNumber.name" -msgstr "Vypočítat prvnΓ­ kvartil (Q1)" - -msgid "FirstQuartileNumber.description" -msgstr "VypočítΓ‘ prvnΓ­ kvartil (Q1)" - -msgid "MedianNumber.name" -msgstr "VypočítΓ‘ hodnotu mediΓ‘nu" - -msgid "MedianNumber.description" -msgstr "Vypočítat mediΓ‘n" - -msgid "ThirdQuartileNumber.name" -msgstr "Vypočítat prvnΓ­ kvartil (Q3)" - -msgid "ThirdQuartileNumber.description" -msgstr "VypočítΓ‘ prvnΓ­ kvartil (Q3)" - -msgid "InterQuartileRangeNumber.name" -msgstr "Vypočítat mezikvartilnΓ­ rozsah (IQR)" - -msgid "InterQuartileRangeNumber.description" -msgstr "VypočítΓ‘ mezikvartilnΓ­ rozsah (IQR)" - -msgid "SumNumbers.name" -msgstr "Vypočítat součet" - -msgid "SumNumbers.description" -msgstr "VypočítΓ‘ součet" - -msgid "MinimumNumber.name" -msgstr "Vypočítat minimΓ‘lnΓ­ hodnotu" - -msgid "MinimumNumber.description" -msgstr "VypočítΓ‘ minimΓ‘lnΓ­ hodnotu" - -msgid "MaximumNumber.name" -msgstr "Vypočítat maximΓ‘lnΓ­ hodnotu" - -msgid "MaximumNumber.description" -msgstr "VypočítΓ‘ maximΓ‘lnΓ­ hodnotu" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/es.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/es.po deleted file mode 100644 index 5f4e9624bd..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/es.po +++ /dev/null @@ -1,83 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-07 22:09+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "KeepSelectedRowValue.name" -msgstr "Mantener valor de la fila principal seleccionada" - -msgid "KeepSelectedRowValue.description" -msgstr "Simplemente utiliza el valor de la fila principal seleccionada" - -msgid "JoinWithSeparator.name" -msgstr "Unir valores con separador" - -msgid "JoinWithSeparator.description" -msgstr "Une los valores de una columna de tipo String o lista con un separador" - -msgid "SetNull.name" -msgstr "Utilizar valor nulo" - -msgid "AverageNumber.name" -msgstr "Calcular valor medio" - -msgid "AverageNumber.description" -msgstr "Calcula el valor medio" - -msgid "FirstQuartileNumber.name" -msgstr "Calcular primer cuartil (Q1)" - -msgid "FirstQuartileNumber.description" -msgstr "Calcula el primer cuartil (Q1)" - -msgid "MedianNumber.name" -msgstr "Calcular mediana" - -msgid "MedianNumber.description" -msgstr "Calcula la mediana" - -msgid "ThirdQuartileNumber.name" -msgstr "Calcular tercer cuartil (Q3)" - -msgid "ThirdQuartileNumber.description" -msgstr "Calcula el tercer cuartil (Q3)" - -msgid "InterQuartileRangeNumber.name" -msgstr "Calcular rango intercuartΓ­lico (IQR)" - -msgid "InterQuartileRangeNumber.description" -msgstr "Calcula el rango intercuartΓ­lico (IQR)" - -msgid "SumNumbers.name" -msgstr "Calcular suma" - -msgid "SumNumbers.description" -msgstr "Calcula la suma" - -msgid "MinimumNumber.name" -msgstr "Calcular valor mΓ­nimo" - -msgid "MinimumNumber.description" -msgstr "Calcula el valor mΓ­nimo" - -msgid "MaximumNumber.name" -msgstr "Calcular valor mΓ‘ximo" - -msgid "MaximumNumber.description" -msgstr "Calcula el valor mΓ‘ximo" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/fr.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/fr.po deleted file mode 100644 index 35c9c78cfc..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/fr.po +++ /dev/null @@ -1,82 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-07 11:48+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "KeepSelectedRowValue.name" -msgstr "Garder la valeur de la ligne principale sΓ©lectionnΓ©e" - -msgid "KeepSelectedRowValue.description" -msgstr "RΓ©utiliser la valeur de la ligne principale sΓ©lectionnΓ©e" - -msgid "JoinWithSeparator.name" -msgstr "Joindre les valeurs avec un sΓ©parateur" - -msgid "JoinWithSeparator.description" -msgstr "Joindre les valeurs d'une liste/colonne de chaΓnes de caractΓ¨res avec un sΓ©parateur" - -msgid "SetNull.name" -msgstr "Rendre nul" - -msgid "AverageNumber.name" -msgstr "Calculer la moyenne" - -msgid "AverageNumber.description" -msgstr "Calculer la moyenne" - -msgid "FirstQuartileNumber.name" -msgstr "Calculer le premier quartile (Q1)" - -msgid "FirstQuartileNumber.description" -msgstr "Calculer le premier quartile (Q1)" - -msgid "MedianNumber.name" -msgstr "Calculer la mΓ©diane" - -msgid "MedianNumber.description" -msgstr "Calculer la mΓ©diane" - -msgid "ThirdQuartileNumber.name" -msgstr "Calculer le troisiΓ¨me quartile (Q3)" - -msgid "ThirdQuartileNumber.description" -msgstr "Calculer le troisiΓ¨me quartile (Q3)" - -msgid "InterQuartileRangeNumber.name" -msgstr "Calculer l'Γ©cart interquartile (EI)" - -msgid "InterQuartileRangeNumber.description" -msgstr "Calculer l'Γ©cart interquartile (EI)" - -msgid "SumNumbers.name" -msgstr "Calculer la somme" - -msgid "SumNumbers.description" -msgstr "Calculer la somme" - -msgid "MinimumNumber.name" -msgstr "Calculer le minimum" - -msgid "MinimumNumber.description" -msgstr "Calculer le minimum" - -msgid "MaximumNumber.name" -msgstr "Calculer le maximum" - -msgid "MaximumNumber.description" -msgstr "Calculer le maximum" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ja.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ja.po deleted file mode 100644 index 64026bc356..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ja.po +++ /dev/null @@ -1,82 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-01 17:04+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "KeepSelectedRowValue.name" -msgstr "δΈ»γͺιΈζŠžγ•γ‚ŒγŸθ‘Œγε€€γ‚’δΏζŒ" - -msgid "KeepSelectedRowValue.description" -msgstr "ε˜η΄”γ«γƒ‘γ‚€γƒ³ιΈζŠžγ•γ‚ŒγŸθ‘Œγε€€γ‚’使用します" - -msgid "JoinWithSeparator.name" -msgstr "εŒΊεˆ‡γ‚Šζ–‡ε­—γ§ε€€γ‚’η΅εˆ" - -msgid "JoinWithSeparator.description" -msgstr "εŒΊεˆ‡γ‚Šζ–‡ε­—γ§ζ–‡ε­—εˆ—γΎγŸγ―γƒͺγ‚Ήγƒˆγεˆ—γε€€γ‚’η΅εˆ" - -msgid "SetNull.name" -msgstr "nullγ‚’θ¨­εš" - -msgid "AverageNumber.name" -msgstr "平均倀γθ¨ˆη—" - -msgid "AverageNumber.description" -msgstr "平均倀γθ¨ˆη—" - -msgid "FirstQuartileNumber.name" -msgstr "η¬¬δΈ€ε››εˆ†δ½ε€€γθ¨ˆη— (Q1)γθ¨ˆη—" - -msgid "FirstQuartileNumber.description" -msgstr "η¬¬δΈ€ε››εˆ†δ½ε€€γθ¨ˆη— (Q1)γθ¨ˆη—" - -msgid "MedianNumber.name" -msgstr "δΈ­ε€ε€€γθ¨ˆη—" - -msgid "MedianNumber.description" -msgstr "δΈ­ε€ε€€γθ¨ˆη—" - -msgid "ThirdQuartileNumber.name" -msgstr "η¬¬δΈ‰ε››εˆ†δ½ε€€γθ¨ˆη— (Q3)γθ¨ˆη—" - -msgid "ThirdQuartileNumber.description" -msgstr "η¬¬δΈ‰ε››εˆ†δ½ε€€γθ¨ˆη— (Q3)γθ¨ˆη—" - -msgid "InterQuartileRangeNumber.name" -msgstr "ε››εˆ†δ½ζ•°η―„ε›² (IQR)γθ¨ˆη—" - -msgid "InterQuartileRangeNumber.description" -msgstr "ε››εˆ†δ½ζ•°η―„ε›² (IQR)γθ¨ˆη—" - -msgid "SumNumbers.name" -msgstr "合計γθ¨ˆη—" - -msgid "SumNumbers.description" -msgstr "合計γθ¨ˆη—" - -msgid "MinimumNumber.name" -msgstr "ζœ€ε°ε€€γθ¨ˆη—" - -msgid "MinimumNumber.description" -msgstr "ζœ€ε°ε€€γθ¨ˆη—" - -msgid "MaximumNumber.name" -msgstr "ζœ€ε€§ε€€γθ¨ˆη—" - -msgid "MaximumNumber.description" -msgstr "ζœ€ε€§ε€€γθ¨ˆη—" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/org-gephi-datalab-plugin-manipulators-rows-merge.pot b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/org-gephi-datalab-plugin-manipulators-rows-merge.pot deleted file mode 100644 index 57b2f67781..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/org-gephi-datalab-plugin-manipulators-rows-merge.pot +++ /dev/null @@ -1,79 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "KeepSelectedRowValue.name" -msgstr "Keep main selected row value" - -msgid "KeepSelectedRowValue.description" -msgstr "Simply uses the value of the main selected row" - -msgid "JoinWithSeparator.name" -msgstr "Join values with a separator" - -msgid "JoinWithSeparator.description" -msgstr "Join values of a String or list column with a separator" - -msgid "SetNull.name" -msgstr "Set null" - -msgid "AverageNumber.name" -msgstr "Calculate average value" - -msgid "AverageNumber.description" -msgstr "Calculates the average value" - -msgid "FirstQuartileNumber.name" -msgstr "Calculate first quartile (Q1)" - -msgid "FirstQuartileNumber.description" -msgstr "Calculates the first quartile (Q1)" - -msgid "MedianNumber.name" -msgstr "Calculate median value" - -msgid "MedianNumber.description" -msgstr "Calculates the median" - -msgid "ThirdQuartileNumber.name" -msgstr "Calculate first quartile (Q3)" - -msgid "ThirdQuartileNumber.description" -msgstr "Calculates the first quartile (Q3)" - -msgid "InterQuartileRangeNumber.name" -msgstr "Calculate interquartile range (IQR)" - -msgid "InterQuartileRangeNumber.description" -msgstr "Calculates the interquartile range (IQR)" - -msgid "SumNumbers.name" -msgstr "Calculate sum" - -msgid "SumNumbers.description" -msgstr "Calculates the sum" - -msgid "MinimumNumber.name" -msgstr "Calculate minimum value" - -msgid "MinimumNumber.description" -msgstr "Calculates the minimum value" - -msgid "MaximumNumber.name" -msgstr "Calculate maximum value" - -msgid "MaximumNumber.description" -msgstr "Calculates the maximum value" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/pt_BR.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/pt_BR.po deleted file mode 100644 index 51015c8104..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/pt_BR.po +++ /dev/null @@ -1,82 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 01:16+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "KeepSelectedRowValue.name" -msgstr "Manter valor da linha principal selecionada" - -msgid "KeepSelectedRowValue.description" -msgstr "Simplesmente usar o valor da linha principal selecionada" - -msgid "JoinWithSeparator.name" -msgstr "Juntar valores com um separador" - -msgid "JoinWithSeparator.description" -msgstr "Juntar valores de uma coluna texto ou lista com um separador" - -msgid "SetNull.name" -msgstr "Utilizar valor nulo" - -msgid "AverageNumber.name" -msgstr "Calcular valor mΓ©dio" - -msgid "AverageNumber.description" -msgstr "Calcula o valor mΓ©dio" - -msgid "FirstQuartileNumber.name" -msgstr "Calcular primeiro quartil (Q1)" - -msgid "FirstQuartileNumber.description" -msgstr "Calcula o primeiro quartil (Q1)" - -msgid "MedianNumber.name" -msgstr "Calcular mediana" - -msgid "MedianNumber.description" -msgstr "Calcula a mediana" - -msgid "ThirdQuartileNumber.name" -msgstr "Calcular primeiro quartil (Q3)" - -msgid "ThirdQuartileNumber.description" -msgstr "Calcula o primeiro quartil (Q3)" - -msgid "InterQuartileRangeNumber.name" -msgstr "Calcular intervalo interquartil (IQR)" - -msgid "InterQuartileRangeNumber.description" -msgstr "Calcula o intervalo interquartil (IQR)" - -msgid "SumNumbers.name" -msgstr "Calcular soma" - -msgid "SumNumbers.description" -msgstr "Calcula a soma" - -msgid "MinimumNumber.name" -msgstr "Calcular valor mΓ­nimo" - -msgid "MinimumNumber.description" -msgstr "Calcula o valor mΓ­nimo" - -msgid "MaximumNumber.name" -msgstr "Calcular valor mΓ‘ximo" - -msgid "MaximumNumber.description" -msgstr "Calcula o valor mΓ‘ximo" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ru.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ru.po deleted file mode 100644 index bd53dc630f..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ru.po +++ /dev/null @@ -1,82 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-12 07:57+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "KeepSelectedRowValue.name" -msgstr "Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· основной Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ строки" - -msgid "KeepSelectedRowValue.description" -msgstr "ΠŸΡ€ΠΎΡΡ‚ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ· основной Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ строки" - -msgid "JoinWithSeparator.name" -msgstr "ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ значСния Ρ‡Π΅Ρ€Π΅Π· Ρ€Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ" - -msgid "JoinWithSeparator.description" -msgstr "ΠžΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ строковыС значСния ΠΈΠ»ΠΈ список с использованиСм раздСлитСля" - -msgid "SetNull.name" -msgstr "Null" - -msgid "AverageNumber.name" -msgstr "Поиск срСднСго" - -msgid "AverageNumber.description" -msgstr "РассчитываСт срСднСС арифмСтичСскоС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅" - -msgid "FirstQuartileNumber.name" -msgstr "Расчёт ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ квартиля (Q1)" - -msgid "FirstQuartileNumber.description" -msgstr "РассчитываСт ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΠ»ΡŒ (Q1)" - -msgid "MedianNumber.name" -msgstr "Поиск ΠΌΠ΅Π΄ΠΈΠ°Π½Ρ‹" - -msgid "MedianNumber.description" -msgstr "РассчитываСт ΠΌΠ΅Π΄ΠΈΠ°Π½Ρƒ" - -msgid "ThirdQuartileNumber.name" -msgstr "Расчёт Ρ‚Ρ€Π΅Ρ‚ΡŒΠ΅Π³ΠΎ квартиля (Q3)" - -msgid "ThirdQuartileNumber.description" -msgstr "РассчитываСт Ρ‚Ρ€Π΅Ρ‚ΠΈΠΉ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΠ»ΡŒ (Q3)" - -msgid "InterQuartileRangeNumber.name" -msgstr "Поиск ΠΌΠ΅ΠΆΠΊΠ²Π°Ρ€Ρ‚ΠΈΠ»ΡŒΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ°Ρ…Π° (IQR)" - -msgid "InterQuartileRangeNumber.description" -msgstr "РассчитываСт ΠΌΠ΅ΠΆΠΊΠ²Π°Ρ€Ρ‚ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ°Ρ… (IQR)" - -msgid "SumNumbers.name" -msgstr "Π‘ΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅" - -msgid "SumNumbers.description" -msgstr "РассчитываСт сумму Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ" - -msgid "MinimumNumber.name" -msgstr "Поиск минимальноС значСния" - -msgid "MinimumNumber.description" -msgstr "РассчитываСт минимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅" - -msgid "MaximumNumber.name" -msgstr "Поиск максимального значСния" - -msgid "MaximumNumber.description" -msgstr "РассчитываСт максимальноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_ar.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_ca.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_ca.properties new file mode 100644 index 0000000000..09188c5779 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_ca.properties @@ -0,0 +1 @@ +JoinWithSeparatorUI.separatorLabel.text=Separador: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_cs.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_cs.properties index 61a8fb704f..37eb78b681 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_cs.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_cs.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-27 13\:05+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -JoinWithSeparatorUI.separatorLabel.text=Odd\u011blova\u010d\: +JoinWithSeparatorUI.separatorLabel.text=Odd\u011blova\u010d: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_de.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_de.properties new file mode 100644 index 0000000000..35ca4fa029 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_de.properties @@ -0,0 +1 @@ +JoinWithSeparatorUI.separatorLabel.text=Trennzeichen: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_es.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_es.properties index fa13f5403a..09188c5779 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_es.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_es.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-07 11\:19+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -JoinWithSeparatorUI.separatorLabel.text=Separador\: +JoinWithSeparatorUI.separatorLabel.text=Separador: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_fr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_fr.properties index 6c4721e854..7bf2f7e18e 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_fr.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_fr.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-07 11\:36+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -JoinWithSeparatorUI.separatorLabel.text=S\u00e9parateur \: +JoinWithSeparatorUI.separatorLabel.text=Sιparateur : diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_he.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_he.properties new file mode 100644 index 0000000000..19b223215e --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_he.properties @@ -0,0 +1 @@ +JoinWithSeparatorUI.separatorLabel.text=Separator: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_hu.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_hu.properties new file mode 100644 index 0000000000..4eb56ac4a6 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_hu.properties @@ -0,0 +1,3 @@ + + +JoinWithSeparatorUI.separatorLabel.text=Sz\u00E9tv\u00E1laszt\u00F3: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_it.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_it.properties new file mode 100644 index 0000000000..19b223215e --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_it.properties @@ -0,0 +1 @@ +JoinWithSeparatorUI.separatorLabel.text=Separator: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_ja.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_ja.properties index 5ecb51eff7..f969d0f5c8 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_ja.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_ja.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-10 15\:26+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -JoinWithSeparatorUI.separatorLabel.text=\u30bb\u30d1\u30ec\u30fc\u30bf\: +JoinWithSeparatorUI.separatorLabel.text=\u30bb\u30d1\u30ec\u30fc\u30bf: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_ko.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_ko.properties new file mode 100644 index 0000000000..737d0206db --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_ko.properties @@ -0,0 +1,3 @@ + + +JoinWithSeparatorUI.separatorLabel.text=\uAD6C\uBD84\uC790: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_nl.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_nl.properties new file mode 100644 index 0000000000..19b223215e --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_nl.properties @@ -0,0 +1 @@ +JoinWithSeparatorUI.separatorLabel.text=Separator: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_pt.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_pt.properties new file mode 100644 index 0000000000..a4c2fe9b11 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_pt.properties @@ -0,0 +1 @@ +JoinWithSeparatorUI.separatorLabel.text=Separador: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_pt_BR.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_pt_BR.properties index df69ff3af7..09188c5779 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_pt_BR.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_pt_BR.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 23\:19+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -JoinWithSeparatorUI.separatorLabel.text=Separador\: +JoinWithSeparatorUI.separatorLabel.text=Separador: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_ro.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_ro.properties new file mode 100644 index 0000000000..c0a952dc93 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_ro.properties @@ -0,0 +1,3 @@ + + +JoinWithSeparatorUI.separatorLabel.text=Separator: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_ru.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_ru.properties index dc15db5ecb..f15c4d4a36 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_ru.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_ru.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-12 07\:40+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -JoinWithSeparatorUI.separatorLabel.text=\u0420\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c\: +JoinWithSeparatorUI.separatorLabel.text=\u0420\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_th.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_tr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_tr.properties new file mode 100644 index 0000000000..e60735d275 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_tr.properties @@ -0,0 +1 @@ +JoinWithSeparatorUI.separatorLabel.text=Ay\u0131r\u0131c\u0131: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_uk.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_uk.properties new file mode 100644 index 0000000000..d22ec8c893 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_uk.properties @@ -0,0 +1 @@ +JoinWithSeparatorUI.separatorLabel.text=\u0420\u043E\u0437\u0434\u0456\u043B\u044C\u043D\u0438\u043A: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_zh_CN.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_zh_CN.properties index cf159604ef..ed7a7f38b0 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_zh_CN.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_zh_CN.properties @@ -1,8 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:18+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -JoinWithSeparatorUI.separatorLabel.text=\u5206\u9694\u7b26\uff1a +JoinWithSeparatorUI.separatorLabel.text=\u5206\u9694\u7b26\uff1a diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_zh_TW.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_zh_TW.properties new file mode 100644 index 0000000000..19b223215e --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/Bundle_zh_TW.properties @@ -0,0 +1 @@ +JoinWithSeparatorUI.separatorLabel.text=Separator: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/cs.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/cs.po deleted file mode 100644 index 22ca85a502..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/cs.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-27 13:05+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "JoinWithSeparatorUI.separatorLabel.text" -msgstr "OddΔ›lovač:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/es.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/es.po deleted file mode 100644 index b3c3d9c747..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/es.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-07 11:19+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "JoinWithSeparatorUI.separatorLabel.text" -msgstr "Separador:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/fr.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/fr.po deleted file mode 100644 index c62c02eed4..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/fr.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-07 11:36+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "JoinWithSeparatorUI.separatorLabel.text" -msgstr "SΓ©parateur :" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/ja.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/ja.po deleted file mode 100644 index 515de84a6d..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/ja.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-10 15:26+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "JoinWithSeparatorUI.separatorLabel.text" -msgstr "セパレータ:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/org-gephi-datalab-plugin-manipulators-rows-merge-ui.pot b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/org-gephi-datalab-plugin-manipulators-rows-merge-ui.pot deleted file mode 100644 index ee7f5ddae3..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/org-gephi-datalab-plugin-manipulators-rows-merge-ui.pot +++ /dev/null @@ -1,19 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "JoinWithSeparatorUI.separatorLabel.text" -msgstr "Separator:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/pt_BR.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/pt_BR.po deleted file mode 100644 index 1f28aa8514..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/pt_BR.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 23:19+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "JoinWithSeparatorUI.separatorLabel.text" -msgstr "Separador:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/ru.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/ru.po deleted file mode 100644 index 095d3caa91..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/ru.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-12 07:40+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "JoinWithSeparatorUI.separatorLabel.text" -msgstr "Π Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/zh_CN.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/zh_CN.po deleted file mode 100644 index aaff53abaa..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/ui/zh_CN.po +++ /dev/null @@ -1,21 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:18+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "JoinWithSeparatorUI.separatorLabel.text" -msgstr "εˆ†ιš”η¬¦οΌš" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/zh_CN.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/zh_CN.po deleted file mode 100644 index f9c8e91d75..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/rows/merge/zh_CN.po +++ /dev/null @@ -1,81 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:18+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "KeepSelectedRowValue.name" -msgstr "δΏζŒδΈ»θ¦ηš„ι€‰ζ‹©θ‘Œε€Ό" - -msgid "KeepSelectedRowValue.description" -msgstr "δ»…δ»…εΊ”η”¨δΈ»θ¦ηš„ι€‰ζ‹©θ‘Œε€Ό" - -msgid "JoinWithSeparator.name" -msgstr "εˆ†ιš”η¬¦εŠ ε…₯ζ•°ε€Ό" - -msgid "JoinWithSeparator.description" -msgstr "εˆ†ιš”η¬¦εŠ ε…₯δΈ€δΈ²ε­—η¬¦ε€Όζˆ–θ€…ε­—η¬¦εˆ—" - -msgid "SetNull.name" -msgstr "η½η©Ί" - -msgid "AverageNumber.name" -msgstr "θ‘η—均值" - -msgid "AverageNumber.description" -msgstr "θ‘η—均值" - -msgid "FirstQuartileNumber.name" -msgstr "θ‘η—第一δΈͺε››εˆ†δ½η‚ΉοΌˆQ1οΌ‰" - -msgid "FirstQuartileNumber.description" -msgstr "θ‘η—第一δΈͺε››εˆ†δ½η‚ΉοΌˆQ1οΌ‰" - -msgid "MedianNumber.name" -msgstr "θ‘η—中位数" - -msgid "MedianNumber.description" -msgstr "θ‘η—zhongweishu" - -msgid "ThirdQuartileNumber.name" -msgstr "θ‘η—第一δΈͺε››εˆ†δ½η‚ΉοΌˆQ3οΌ‰" - -msgid "ThirdQuartileNumber.description" -msgstr "θ‘η—第一δΈͺε››εˆ†δ½η‚ΉοΌˆQ3οΌ‰" - -msgid "InterQuartileRangeNumber.name" -msgstr "θ‘η—ε››εˆ†δ½ε·οΌˆIQRοΌ‰" - -msgid "InterQuartileRangeNumber.description" -msgstr "θ‘η—ε››εˆ†δ½ε·οΌˆIQRοΌ‰" - -msgid "SumNumbers.name" -msgstr "θ‘η—ζ€»ε’Œ" - -msgid "SumNumbers.description" -msgstr "θ‘η—zonghe" - -msgid "MinimumNumber.name" -msgstr "θ‘η—zuixiaozhi" - -msgid "MinimumNumber.description" -msgstr "θ‘η—zuixiaozhi" - -msgid "MaximumNumber.name" -msgstr "θ‘η—ζœ€ε€§ε€Ό" - -msgid "MaximumNumber.description" -msgstr "θ‘η—zuidazhi" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_ar.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_ca.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_ca.properties new file mode 100644 index 0000000000..003d57c2c9 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_ca.properties @@ -0,0 +1,7 @@ +GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text=Configura el diagrama de caixa +GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1=Configura el diagrama de dispersiσ +GeneralNumberListStatisticsReportUI.showReportButton.text=Mostra l'informe +GeneralNumberListStatisticsReportUI.useLinesCheckBox.text=Mostra les lνnies +GeneralNumberListStatisticsReportUI.useLinearRegression.text=Show linear regression +GeneralNumberListStatisticsReportUI.configureHistogramButton.text=Configura l'Historiograma +GeneralNumberListStatisticsReportUI.divisionsLabel.text=Divisions: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_cs.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_cs.properties index 2e316ed63c..98845f5895 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_cs.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_cs.properties @@ -1,21 +1,7 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-27 16\:06+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text=Nastavit burzovn\u00ed graf - -GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1=Nastavit bodov\u00fd graf - -GeneralNumberListStatisticsReportUI.showReportButton.text=Zobrazit z\u00e1znam - -GeneralNumberListStatisticsReportUI.useLinesCheckBox.text=Zobrazit \u010d\u00e1ry - -GeneralNumberListStatisticsReportUI.useLinearRegression.text=Zobrazit line\u00e1rn\u00ed regresi - -GeneralNumberListStatisticsReportUI.configureHistogramButton.text=Nastavit histogram - -GeneralNumberListStatisticsReportUI.divisionsLabel.text=Odd\u00edly\: +GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text=Nastavit burzovnν graf +GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1=Nastavit bodovύ graf +GeneralNumberListStatisticsReportUI.showReportButton.text=Zobrazit zαznam +GeneralNumberListStatisticsReportUI.useLinesCheckBox.text=Zobrazit \u010dαry +GeneralNumberListStatisticsReportUI.useLinearRegression.text=Zobrazit lineαrnν regresi +GeneralNumberListStatisticsReportUI.configureHistogramButton.text=Nastavit histogram +GeneralNumberListStatisticsReportUI.divisionsLabel.text=Oddνly: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_de.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_de.properties new file mode 100644 index 0000000000..56864ef195 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_de.properties @@ -0,0 +1,7 @@ +GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text=Boxplot konfigurieren +GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1=Streudiagramm konfigurieren +GeneralNumberListStatisticsReportUI.showReportButton.text=Bericht anzeigen +GeneralNumberListStatisticsReportUI.useLinesCheckBox.text=Zeilen anzeigen +GeneralNumberListStatisticsReportUI.useLinearRegression.text=Lineare Regression anzeigen +GeneralNumberListStatisticsReportUI.configureHistogramButton.text=Histogramm konfigurieren +GeneralNumberListStatisticsReportUI.divisionsLabel.text=Unterteilungen: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_es.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_es.properties index d4b122a146..4e386d6cc6 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_es.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_es.properties @@ -1,21 +1,7 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:10+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text=Configurar diagrama de cajas - -GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1=Configurar diagrama de dispersi\u00f3n - -GeneralNumberListStatisticsReportUI.showReportButton.text=Mostrar informe - -GeneralNumberListStatisticsReportUI.useLinesCheckBox.text=Mostrar l\u00edneas - -GeneralNumberListStatisticsReportUI.useLinearRegression.text=Mostrar regresi\u00f3n lineal - -GeneralNumberListStatisticsReportUI.configureHistogramButton.text=Configurar histograma\: - -GeneralNumberListStatisticsReportUI.divisionsLabel.text=Divisiones\: +GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text=Configurar diagrama de cajas +GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1=Configurar diagrama de dispersiσn +GeneralNumberListStatisticsReportUI.showReportButton.text=Mostrar informe +GeneralNumberListStatisticsReportUI.useLinesCheckBox.text=Mostrar lνneas +GeneralNumberListStatisticsReportUI.useLinearRegression.text=Mostrar regresiσn lineal +GeneralNumberListStatisticsReportUI.configureHistogramButton.text=Configurar histograma: +GeneralNumberListStatisticsReportUI.divisionsLabel.text=Divisiones: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_fr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_fr.properties index 18e4cc473a..c021215987 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_fr.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_fr.properties @@ -1,21 +1,7 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:10+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text=Configurer la bo\u00eete \u00e0 moustaches - -GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1=Configurer le nuage de points - -GeneralNumberListStatisticsReportUI.showReportButton.text=Afficher le rapport - -GeneralNumberListStatisticsReportUI.useLinesCheckBox.text=Afficher les lignes - -GeneralNumberListStatisticsReportUI.useLinearRegression.text=Afficher la r\u00e9gression lin\u00e9aire - -GeneralNumberListStatisticsReportUI.configureHistogramButton.text=Configurer l'histogramme - -GeneralNumberListStatisticsReportUI.divisionsLabel.text=Divisions \: +GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text=Configurer la boξte ΰ moustaches +GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1=Configurer le nuage de points +GeneralNumberListStatisticsReportUI.showReportButton.text=Afficher le rapport +GeneralNumberListStatisticsReportUI.useLinesCheckBox.text=Afficher les lignes +GeneralNumberListStatisticsReportUI.useLinearRegression.text=Afficher la rιgression linιaire +GeneralNumberListStatisticsReportUI.configureHistogramButton.text=Configurer l'histogramme +GeneralNumberListStatisticsReportUI.divisionsLabel.text=Divisions : diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_he.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_he.properties new file mode 100644 index 0000000000..88a10cbe13 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_he.properties @@ -0,0 +1,7 @@ +GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text=\u05d4\u05e2\u05d3\u05e4\u05d5\u05ea \u05d2\u05e8\u05e3 boxplot +GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1=\u05d4\u05e2\u05d3\u05e4\u05d5\u05ea \u05d2\u05e8\u05e3 \u05e0\u05e7\u05d5\u05d3\u05d5\u05ea +GeneralNumberListStatisticsReportUI.showReportButton.text=\u05d4\u05e6\u05d2 \u05d3\u05d5\u05d7 +GeneralNumberListStatisticsReportUI.useLinesCheckBox.text=\u05d4\u05e8\u05d0\u05d4 \u05e7\u05d5\u05d9\u05dd +GeneralNumberListStatisticsReportUI.useLinearRegression.text=\u05d4\u05e6\u05d2 \u05e8\u05d2\u05e8\u05e1\u05d9\u05d4 \u05dc\u05d9\u05e0\u05d0\u05e8\u05d9\u05ea +GeneralNumberListStatisticsReportUI.configureHistogramButton.text=Configure Histogram +GeneralNumberListStatisticsReportUI.divisionsLabel.text=\u05d7\u05dc\u05d5\u05e7\u05d5\u05ea: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_hu.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_hu.properties new file mode 100644 index 0000000000..2d69bbdbfa --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_hu.properties @@ -0,0 +1,9 @@ + + +GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1=Sz\u00F3rv\u00E1nydiagram konfigur\u00E1l\u00E1sa +GeneralNumberListStatisticsReportUI.configureHistogramButton.text=Hisztogram konfigur\u00E1l\u00E1sa +GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text=Konfigur\u00E1lja a doboz diagramot +GeneralNumberListStatisticsReportUI.useLinesCheckBox.text=Vonalak megjelen\u00EDt\u00E9se +GeneralNumberListStatisticsReportUI.divisionsLabel.text=Oszt\u00E1lyok: +GeneralNumberListStatisticsReportUI.useLinearRegression.text=Line\u00E1ris regresszi\u00F3 megjelen\u00EDt\u00E9se +GeneralNumberListStatisticsReportUI.showReportButton.text=Jelent\u00E9s megjelen\u00EDt\u00E9se diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_it.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_it.properties new file mode 100644 index 0000000000..683eb6d3fe --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_it.properties @@ -0,0 +1,7 @@ +GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text=Configure box plot +GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1=Configure scatter plot +GeneralNumberListStatisticsReportUI.showReportButton.text=Show report +GeneralNumberListStatisticsReportUI.useLinesCheckBox.text=Show lines +GeneralNumberListStatisticsReportUI.useLinearRegression.text=Show linear regression +GeneralNumberListStatisticsReportUI.configureHistogramButton.text=Configure Histogram +GeneralNumberListStatisticsReportUI.divisionsLabel.text=Divisions: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_ja.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_ja.properties index d0ea867002..b0d9577a36 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_ja.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_ja.properties @@ -1,21 +1,7 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-02 10\:57+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text=\u7bb1\u9aed\u56f3\u306e\u69cb\u6210 - -GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1=\u6563\u5e03\u56f3\u306e\u69cb\u6210 - -GeneralNumberListStatisticsReportUI.showReportButton.text=\u5831\u544a\u3092\u8868\u793a - -GeneralNumberListStatisticsReportUI.useLinesCheckBox.text=\u7dda\u3092\u8868\u793a - -GeneralNumberListStatisticsReportUI.useLinearRegression.text=\u56de\u5e30\u76f4\u7dda\u3092\u8868\u793a - -GeneralNumberListStatisticsReportUI.configureHistogramButton.text=\u30d2\u30b9\u30c8\u30b0\u30e9\u30e0\u3092\u69cb\u6210 - -GeneralNumberListStatisticsReportUI.divisionsLabel.text=\u90e8\u9580\: +GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text=\u7bb1\u9aed\u56f3\u306e\u69cb\u6210 +GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1=\u6563\u5e03\u56f3\u306e\u69cb\u6210 +GeneralNumberListStatisticsReportUI.showReportButton.text=\u5831\u544a\u3092\u8868\u793a +GeneralNumberListStatisticsReportUI.useLinesCheckBox.text=\u7dda\u3092\u8868\u793a +GeneralNumberListStatisticsReportUI.useLinearRegression.text=\u56de\u5e30\u76f4\u7dda\u3092\u8868\u793a +GeneralNumberListStatisticsReportUI.configureHistogramButton.text=\u30d2\u30b9\u30c8\u30b0\u30e9\u30e0\u3092\u69cb\u6210 +GeneralNumberListStatisticsReportUI.divisionsLabel.text=\u90e8\u9580: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_ko.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_ko.properties new file mode 100644 index 0000000000..f53de0f3d3 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_ko.properties @@ -0,0 +1,9 @@ + + +GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1=\uC0B0\uD3EC\uB3C4 \uAD6C\uC131 +GeneralNumberListStatisticsReportUI.configureHistogramButton.text=\uD788\uC2A4\uD1A0\uADF8\uB7A8 \uAD6C\uC131 +GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text=\uBC15\uC2A4 \uD50C\uB86F \uAD6C\uC131 +GeneralNumberListStatisticsReportUI.useLinesCheckBox.text=\uC120 \uBCF4\uAE30 +GeneralNumberListStatisticsReportUI.divisionsLabel.text=\uAD6C\uBD84: +GeneralNumberListStatisticsReportUI.useLinearRegression.text=\uC120\uD615 \uD68C\uAE30 \uBD84\uC11D \uBCF4\uAE30 +GeneralNumberListStatisticsReportUI.showReportButton.text=\uBCF4\uACE0\uC11C \uBCF4\uAE30 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_nl.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_nl.properties new file mode 100644 index 0000000000..5f9c320d22 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_nl.properties @@ -0,0 +1,7 @@ +GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text=Configure box plot +GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1=Configure scatter plot +GeneralNumberListStatisticsReportUI.showReportButton.text=Show report +GeneralNumberListStatisticsReportUI.useLinesCheckBox.text=Show lines +GeneralNumberListStatisticsReportUI.useLinearRegression.text=Show linear regression +GeneralNumberListStatisticsReportUI.configureHistogramButton.text=Histogram configureren +GeneralNumberListStatisticsReportUI.divisionsLabel.text=Divisions: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_pt_BR.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_pt_BR.properties index b0396a0b36..d6bca59900 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_pt_BR.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_pt_BR.properties @@ -1,21 +1,7 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 19\:11+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text=Configurar gr\u00e1fico de caixa - -GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1=Configurar gr\u00e1fico de dispers\u00e3o - -GeneralNumberListStatisticsReportUI.showReportButton.text=Exibir relat\u00f3rio - -GeneralNumberListStatisticsReportUI.useLinesCheckBox.text=Exibir linhas - -GeneralNumberListStatisticsReportUI.useLinearRegression.text=Exibir regress\u00e3o linear - -GeneralNumberListStatisticsReportUI.configureHistogramButton.text=Configurar Histograma - -GeneralNumberListStatisticsReportUI.divisionsLabel.text=Divis\u00f5es\: +GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text=Configurar grαfico de caixa +GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1=Configurar grαfico de dispersγo +GeneralNumberListStatisticsReportUI.showReportButton.text=Exibir relatσrio +GeneralNumberListStatisticsReportUI.useLinesCheckBox.text=Exibir linhas +GeneralNumberListStatisticsReportUI.useLinearRegression.text=Exibir regressγo linear +GeneralNumberListStatisticsReportUI.configureHistogramButton.text=Configurar Histograma +GeneralNumberListStatisticsReportUI.divisionsLabel.text=Divisυes: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_ro.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_ro.properties new file mode 100644 index 0000000000..e21ca5ef33 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_ro.properties @@ -0,0 +1,9 @@ + + +GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text=Configureaz\u0103 diagrama boxplot +GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1=Configureaz\u0103 diagrama de dispersie +GeneralNumberListStatisticsReportUI.showReportButton.text=Afi\u0219eaz\u0103 raportul +GeneralNumberListStatisticsReportUI.useLinesCheckBox.text=Afi\u0219eaz\u0103 liniile +GeneralNumberListStatisticsReportUI.configureHistogramButton.text=Configureaz\u0103 histograma +GeneralNumberListStatisticsReportUI.divisionsLabel.text=Diviziuni: +GeneralNumberListStatisticsReportUI.useLinearRegression.text=Afi\u0219eaz\u0103 regresia liniar\u0103 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_ru.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_ru.properties index 4f20c8d2c0..be0b6a2bc1 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_ru.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_ru.properties @@ -1,22 +1,7 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -# FIRST AUTHOR , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-11 07\:56+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u043e\u0440\u043e\u0431\u0447\u0430\u0442\u0443\u044e \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0443 - -GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u043e\u0447\u0435\u0447\u043d\u0443\u044e \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0443 - -GeneralNumberListStatisticsReportUI.showReportButton.text=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0442\u0447\u0451\u0442 - -GeneralNumberListStatisticsReportUI.useLinesCheckBox.text=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043b\u0438\u043d\u0438\u0438 - -GeneralNumberListStatisticsReportUI.useLinearRegression.text=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043b\u0438\u043d\u0435\u0439\u043d\u0443\u044e \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0438\u044e - -GeneralNumberListStatisticsReportUI.configureHistogramButton.text=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u0443 - -GeneralNumberListStatisticsReportUI.divisionsLabel.text=\u0420\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u044f\: +GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043a\u043e\u0440\u043e\u0431\u0447\u0430\u0442\u0443\u044e \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0443 +GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0442\u043e\u0447\u0435\u0447\u043d\u0443\u044e \u0434\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0443 +GeneralNumberListStatisticsReportUI.showReportButton.text=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043e\u0442\u0447\u0451\u0442 +GeneralNumberListStatisticsReportUI.useLinesCheckBox.text=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043b\u0438\u043d\u0438\u0438 +GeneralNumberListStatisticsReportUI.useLinearRegression.text=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043b\u0438\u043d\u0435\u0439\u043d\u0443\u044e \u0440\u0435\u0433\u0440\u0435\u0441\u0441\u0438\u044e +GeneralNumberListStatisticsReportUI.configureHistogramButton.text=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u0443 +GeneralNumberListStatisticsReportUI.divisionsLabel.text=\u0420\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u044f: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_th.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_tr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_tr.properties new file mode 100644 index 0000000000..0de84b8967 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_tr.properties @@ -0,0 +1,7 @@ +GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text=Configure box plot +GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1=Configure scatter plot +GeneralNumberListStatisticsReportUI.showReportButton.text=Show report +GeneralNumberListStatisticsReportUI.useLinesCheckBox.text=Show lines +GeneralNumberListStatisticsReportUI.useLinearRegression.text=Do\u011frusal ba\u011flan\u0131m\u0131 (do\u011frusal regresyon) gφster +GeneralNumberListStatisticsReportUI.configureHistogramButton.text=Configure Histogram +GeneralNumberListStatisticsReportUI.divisionsLabel.text=Divisions: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_uk.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_uk.properties new file mode 100644 index 0000000000..f4f88fce6f --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_uk.properties @@ -0,0 +1,7 @@ +GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u0442\u0438 \u0434\u0456\u0430\u0433\u0440\u0430\u043C\u0443 \u043A\u043E\u0440\u043E\u0431\u043A\u0438 +GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u0442\u0438 \u0434\u0456\u0430\u0433\u0440\u0430\u043C\u0443 \u0440\u043E\u0437\u0441\u0456\u044E\u0432\u0430\u043D\u043D\u044F +GeneralNumberListStatisticsReportUI.showReportButton.text=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u0438 \u0437\u0432\u0456\u0442 +GeneralNumberListStatisticsReportUI.useLinesCheckBox.text=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u0438 \u0440\u044F\u0434\u043A\u0438 +GeneralNumberListStatisticsReportUI.useLinearRegression.text=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u0438 \u043B\u0456\u043D\u0456\u0439\u043D\u0443 \u0440\u0435\u0433\u0440\u0435\u0441\u0456\u044E +GeneralNumberListStatisticsReportUI.configureHistogramButton.text=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u0442\u0438 \u0433\u0456\u0441\u0442\u043E\u0433\u0440\u0430\u043C\u0443 +GeneralNumberListStatisticsReportUI.divisionsLabel.text=\u041F\u0456\u0434\u0440\u043E\u0437\u0434\u0456\u043B\u0438: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_zh_CN.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_zh_CN.properties index 0e04877599..ceb7d5170d 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_zh_CN.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_zh_CN.properties @@ -1,20 +1,7 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:18+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text=\u914d\u7f6e\u76d2\u578b\u56fe - -GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1=\u914d\u7f6e\u6563\u70b9\u56fe - -GeneralNumberListStatisticsReportUI.showReportButton.text=\u663e\u793a\u62a5\u544a - -GeneralNumberListStatisticsReportUI.useLinesCheckBox.text=\u663e\u793a\u7ebf - -GeneralNumberListStatisticsReportUI.useLinearRegression.text=\u663e\u793a\u7ebf\u6027\u56de\u5f52 - -GeneralNumberListStatisticsReportUI.configureHistogramButton.text=\u914d\u7f6e\u76f4\u65b9\u56fe - -GeneralNumberListStatisticsReportUI.divisionsLabel.text=\u5206\u7c7b\uff1a +GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text=\u914d\u7f6e\u76d2\u578b\u56fe +GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1=\u914d\u7f6e\u6563\u70b9\u56fe +GeneralNumberListStatisticsReportUI.showReportButton.text=\u663e\u793a\u62a5\u544a +GeneralNumberListStatisticsReportUI.useLinesCheckBox.text=\u663e\u793a\u7ebf +GeneralNumberListStatisticsReportUI.useLinearRegression.text=\u663e\u793a\u7ebf\u6027\u56de\u5f52 +GeneralNumberListStatisticsReportUI.configureHistogramButton.text=\u914d\u7f6e\u76f4\u65b9\u56fe +GeneralNumberListStatisticsReportUI.divisionsLabel.text=\u5206\u7c7b\uff1a diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_zh_TW.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_zh_TW.properties new file mode 100644 index 0000000000..683eb6d3fe --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/Bundle_zh_TW.properties @@ -0,0 +1,7 @@ +GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text=Configure box plot +GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1=Configure scatter plot +GeneralNumberListStatisticsReportUI.showReportButton.text=Show report +GeneralNumberListStatisticsReportUI.useLinesCheckBox.text=Show lines +GeneralNumberListStatisticsReportUI.useLinearRegression.text=Show linear regression +GeneralNumberListStatisticsReportUI.configureHistogramButton.text=Configure Histogram +GeneralNumberListStatisticsReportUI.divisionsLabel.text=Divisions: diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/cs.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/cs.po deleted file mode 100644 index 723de910fd..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/cs.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-27 16:06+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text" -msgstr "Nastavit burzovnΓ­ graf" - -msgid "GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1" -msgstr "Nastavit bodovΓ½ graf" - -msgid "GeneralNumberListStatisticsReportUI.showReportButton.text" -msgstr "Zobrazit zΓ‘znam" - -msgid "GeneralNumberListStatisticsReportUI.useLinesCheckBox.text" -msgstr "Zobrazit čÑry" - -msgid "GeneralNumberListStatisticsReportUI.useLinearRegression.text" -msgstr "Zobrazit lineΓ‘rnΓ­ regresi" - -msgid "GeneralNumberListStatisticsReportUI.configureHistogramButton.text" -msgstr "Nastavit histogram" - -msgid "GeneralNumberListStatisticsReportUI.divisionsLabel.text" -msgstr "OddΓ­ly:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/es.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/es.po deleted file mode 100644 index b8c72dd01b..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/es.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:10+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text" -msgstr "Configurar diagrama de cajas" - -msgid "GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1" -msgstr "Configurar diagrama de dispersiΓ³n" - -msgid "GeneralNumberListStatisticsReportUI.showReportButton.text" -msgstr "Mostrar informe" - -msgid "GeneralNumberListStatisticsReportUI.useLinesCheckBox.text" -msgstr "Mostrar lΓ­neas" - -msgid "GeneralNumberListStatisticsReportUI.useLinearRegression.text" -msgstr "Mostrar regresiΓ³n lineal" - -msgid "GeneralNumberListStatisticsReportUI.configureHistogramButton.text" -msgstr "Configurar histograma:" - -msgid "GeneralNumberListStatisticsReportUI.divisionsLabel.text" -msgstr "Divisiones:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/fr.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/fr.po deleted file mode 100644 index 45a28c2a6d..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/fr.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:10+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text" -msgstr "Configurer la boΓte Γ  moustaches" - -msgid "GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1" -msgstr "Configurer le nuage de points" - -msgid "GeneralNumberListStatisticsReportUI.showReportButton.text" -msgstr "Afficher le rapport" - -msgid "GeneralNumberListStatisticsReportUI.useLinesCheckBox.text" -msgstr "Afficher les lignes" - -msgid "GeneralNumberListStatisticsReportUI.useLinearRegression.text" -msgstr "Afficher la rΓ©gression linΓ©aire" - -msgid "GeneralNumberListStatisticsReportUI.configureHistogramButton.text" -msgstr "Configurer l'histogramme" - -msgid "GeneralNumberListStatisticsReportUI.divisionsLabel.text" -msgstr "Divisions :" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/ja.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/ja.po deleted file mode 100644 index e70808cc39..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/ja.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-02 10:57+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text" -msgstr "η±ι«­ε›³γζ§‹ζˆ" - -msgid "GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1" -msgstr "ζ•£εΈƒε›³γζ§‹ζˆ" - -msgid "GeneralNumberListStatisticsReportUI.showReportButton.text" -msgstr "ε ±ε‘Šγ‚’θ‘¨η€Ί" - -msgid "GeneralNumberListStatisticsReportUI.useLinesCheckBox.text" -msgstr "η·šγ‚’θ‘¨η€Ί" - -msgid "GeneralNumberListStatisticsReportUI.useLinearRegression.text" -msgstr "ε›žεΈ°η›΄η·šγ‚’θ‘¨η€Ί" - -msgid "GeneralNumberListStatisticsReportUI.configureHistogramButton.text" -msgstr "γƒ’γ‚Ήγƒˆγ‚°γƒ©γƒ γ‚’ζ§‹ζˆ" - -msgid "GeneralNumberListStatisticsReportUI.divisionsLabel.text" -msgstr "部門:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/org-gephi-datalab-plugin-manipulators-ui.pot b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/org-gephi-datalab-plugin-manipulators-ui.pot deleted file mode 100644 index c061965877..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/org-gephi-datalab-plugin-manipulators-ui.pot +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text" -msgstr "Configure box plot" - -msgid "GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1" -msgstr "Configure scatter plot" - -msgid "GeneralNumberListStatisticsReportUI.showReportButton.text" -msgstr "Show report" - -msgid "GeneralNumberListStatisticsReportUI.useLinesCheckBox.text" -msgstr "Show lines" - -msgid "GeneralNumberListStatisticsReportUI.useLinearRegression.text" -msgstr "Show linear regression" - -msgid "GeneralNumberListStatisticsReportUI.configureHistogramButton.text" -msgstr "Configure Histogram" - -msgid "GeneralNumberListStatisticsReportUI.divisionsLabel.text" -msgstr "Divisions:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/pt_BR.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/pt_BR.po deleted file mode 100644 index 3051d66cb0..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/pt_BR.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 19:11+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text" -msgstr "Configurar grΓ‘fico de caixa" - -msgid "GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1" -msgstr "Configurar grΓ‘fico de dispersΓ£o" - -msgid "GeneralNumberListStatisticsReportUI.showReportButton.text" -msgstr "Exibir relatΓ³rio" - -msgid "GeneralNumberListStatisticsReportUI.useLinesCheckBox.text" -msgstr "Exibir linhas" - -msgid "GeneralNumberListStatisticsReportUI.useLinearRegression.text" -msgstr "Exibir regressΓ£o linear" - -msgid "GeneralNumberListStatisticsReportUI.configureHistogramButton.text" -msgstr "Configurar Histograma" - -msgid "GeneralNumberListStatisticsReportUI.divisionsLabel.text" -msgstr "DivisΓ΅es:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/ru.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/ru.po deleted file mode 100644 index 37dd593bee..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/ru.po +++ /dev/null @@ -1,41 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -# FIRST AUTHOR , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-11 07:56+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text" -msgstr "ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΊΠΎΡ€ΠΎΠ±Ρ‡Π°Ρ‚ΡƒΡŽ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ" - -msgid "GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1" -msgstr "ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ‚ΠΎΡ‡Π΅Ρ‡Π½ΡƒΡŽ Π΄ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΡƒ" - -msgid "GeneralNumberListStatisticsReportUI.showReportButton.text" -msgstr "ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΡ‚Ρ‡Ρ‘Ρ‚" - -msgid "GeneralNumberListStatisticsReportUI.useLinesCheckBox.text" -msgstr "ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π»ΠΈΠ½ΠΈΠΈ" - -msgid "GeneralNumberListStatisticsReportUI.useLinearRegression.text" -msgstr "ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π»ΠΈΠ½Π΅ΠΉΠ½ΡƒΡŽ Ρ€Π΅Π³Ρ€Π΅ΡΡΠΈΡŽ" - -msgid "GeneralNumberListStatisticsReportUI.configureHistogramButton.text" -msgstr "ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ гистограмму" - -msgid "GeneralNumberListStatisticsReportUI.divisionsLabel.text" -msgstr "РазбиСния:" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/zh_CN.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/zh_CN.po deleted file mode 100644 index 58e20fa4d2..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/ui/zh_CN.po +++ /dev/null @@ -1,39 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:18+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "GeneralNumberListStatisticsReportUI.configureBoxPlotButton.text" -msgstr "配η½η›’εž‹ε›Ύ" - -msgid "GeneralNumberListStatisticsReportUI.configureScatterPlotButton.text_1" -msgstr "配η½ζ•£η‚Ήε›Ύ" - -msgid "GeneralNumberListStatisticsReportUI.showReportButton.text" -msgstr "显瀺ζŠ₯ε‘Š" - -msgid "GeneralNumberListStatisticsReportUI.useLinesCheckBox.text" -msgstr "显瀺线" - -msgid "GeneralNumberListStatisticsReportUI.useLinearRegression.text" -msgstr "ζ˜Ύη€ΊηΊΏζ€§ε›žε½’" - -msgid "GeneralNumberListStatisticsReportUI.configureHistogramButton.text" -msgstr "配η½η›΄ζ–Ήε›Ύ" - -msgid "GeneralNumberListStatisticsReportUI.divisionsLabel.text" -msgstr "εˆ†η±»οΌš" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_ar.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_ca.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_ca.properties new file mode 100644 index 0000000000..68e51502a7 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_ca.properties @@ -0,0 +1,3 @@ +ClearAttributeValue.name=Neteja els valors +NumberListStatisticsReport.name=Mostra les estadνstiques +NumberListStatisticsReport.description=Calculates statistics of a dynamic number or number list cell. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_cs.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_cs.properties index 427a728019..a64fc17f47 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_cs.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_cs.properties @@ -1,13 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-26 18\:24+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -ClearAttributeValue.name=Vy\u010distit hodnotu - -NumberListStatisticsReport.name=Zobrazit statistiky - -NumberListStatisticsReport.description=Vypo\u010d\u00edt\u00e1 statistiky dynamick\u00e9ho \u010d\u00edsla nebo bu\u0148ku \u010d\u00edslovan\u00e9ho seznamu. +ClearAttributeValue.name=Vy\u010distit hodnotu +NumberListStatisticsReport.name=Zobrazit statistiky +NumberListStatisticsReport.description=Vypo\u010dνtα statistiky dynamickιho \u010dνsla nebo bu\u0148ku \u010dνslovanιho seznamu. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_de.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_de.properties new file mode 100644 index 0000000000..4a50d52340 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_de.properties @@ -0,0 +1,3 @@ +ClearAttributeValue.name=Wert leeren +NumberListStatisticsReport.name=Statistik anzeigen +NumberListStatisticsReport.description=Berechnet Statistiken einer dynamischen Zahlen oder Zahlenlisten-Zelle diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_es.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_es.properties index be1f65d92a..7ead319c26 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_es.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_es.properties @@ -1,13 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:10+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -ClearAttributeValue.name=Borrar valor - -NumberListStatisticsReport.name=Mostrar informe estad\u00edstico - -NumberListStatisticsReport.description=Calcula estad\u00edsticas de celdas con n\u00fameros din\u00e1micos o listas de n\u00fameros +ClearAttributeValue.name=Borrar valor +NumberListStatisticsReport.name=Mostrar informe estadνstico +NumberListStatisticsReport.description=Calcula estadνsticas de celdas con nϊmeros dinαmicos o listas de nϊmeros diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_fr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_fr.properties index 5be698ac84..84bcd81b05 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_fr.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_fr.properties @@ -1,13 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:10+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -ClearAttributeValue.name=Vider - -NumberListStatisticsReport.name=Afficher le rapport de statistiques - -NumberListStatisticsReport.description=Calcul les statistiques d'un nombre dynamique ou d'une cellule de liste num\u00e9rique, et affiche le rapport. +ClearAttributeValue.name=Vider +NumberListStatisticsReport.name=Afficher le rapport de statistiques +NumberListStatisticsReport.description=Calcul les statistiques d'un nombre dynamique ou d'une cellule de liste numιrique, et affiche le rapport. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_he.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_he.properties new file mode 100644 index 0000000000..52ae1f1d7d --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_he.properties @@ -0,0 +1,3 @@ +ClearAttributeValue.name=Clear value +NumberListStatisticsReport.name=Show statistics +NumberListStatisticsReport.description=Calculates statistics of a dynamic number or number list cell. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_hu.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_hu.properties new file mode 100644 index 0000000000..0f45a0ae02 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_hu.properties @@ -0,0 +1,5 @@ + + +NumberListStatisticsReport.description=Kisz\u00E1m\u00EDtja egy dinamikus sz\u00E1m vagy sz\u00E1mlista cella statisztik\u00E1it. +ClearAttributeValue.name=\u00C9rt\u00E9k t\u00F6rl\u00E9se +NumberListStatisticsReport.name=Statisztik\u00E1k megjelen\u00EDt\u00E9se diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_it.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_it.properties new file mode 100644 index 0000000000..52ae1f1d7d --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_it.properties @@ -0,0 +1,3 @@ +ClearAttributeValue.name=Clear value +NumberListStatisticsReport.name=Show statistics +NumberListStatisticsReport.description=Calculates statistics of a dynamic number or number list cell. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_ja.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_ja.properties index b750056015..9517f27534 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_ja.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_ja.properties @@ -1,13 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-27 08\:28+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -ClearAttributeValue.name=\u5024\u306e\u30af\u30ea\u30a2 - -NumberListStatisticsReport.name=\u7d71\u8a08\u5024\u306e\u8868\u793a - -NumberListStatisticsReport.description=\u52d5\u7684\u306a\u6570\u5024\u307e\u305f\u306f\u6570\u5024\u306e\u30ea\u30b9\u30c8\u306e\u30bb\u30eb\u306e\u7d71\u8a08\u5024\u3092\u8a08\u7b97\u3002 +ClearAttributeValue.name=\u5024\u306e\u30af\u30ea\u30a2 +NumberListStatisticsReport.name=\u7d71\u8a08\u5024\u306e\u8868\u793a +NumberListStatisticsReport.description=\u52d5\u7684\u306a\u6570\u5024\u307e\u305f\u306f\u6570\u5024\u306e\u30ea\u30b9\u30c8\u306e\u30bb\u30eb\u306e\u7d71\u8a08\u5024\u3092\u8a08\u7b97\u3002 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_ko.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_ko.properties new file mode 100644 index 0000000000..134252c023 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_ko.properties @@ -0,0 +1,5 @@ + + +NumberListStatisticsReport.name=\uD1B5\uACC4\uCE58 \uBCF4\uC5EC \uC8FC\uAE30 +NumberListStatisticsReport.description=\uB3D9\uC801 \uC22B\uC790\uB098 \uC22B\uC790 \uB9AC\uC2A4\uD2B8 \uC140\uC758 \uD1B5\uACC4\uCE58\uB97C \uACC4\uC0B0\uD55C\uB2E4. +ClearAttributeValue.name=\uAC12 \uC9C0\uC6B0\uAE30 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_nl.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_nl.properties new file mode 100644 index 0000000000..52ae1f1d7d --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_nl.properties @@ -0,0 +1,3 @@ +ClearAttributeValue.name=Clear value +NumberListStatisticsReport.name=Show statistics +NumberListStatisticsReport.description=Calculates statistics of a dynamic number or number list cell. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_pt_BR.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_pt_BR.properties index ccf99a5cd5..031b7f2a9d 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_pt_BR.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_pt_BR.properties @@ -1,13 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 18\:11+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -ClearAttributeValue.name=Limpar valor - -NumberListStatisticsReport.name=Exibir estat\u00edsticas - -NumberListStatisticsReport.description=Calcula estat\u00edsticas de c\u00e9lulas com n\u00fameros din\u00e2micos ou listas de n\u00fameros +ClearAttributeValue.name=Limpar valor +NumberListStatisticsReport.name=Exibir estatνsticas +NumberListStatisticsReport.description=Calcula estatνsticas de cιlulas com nϊmeros dinβmicos ou listas de nϊmeros diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_ro.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_ro.properties new file mode 100644 index 0000000000..495345d5f1 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_ro.properties @@ -0,0 +1,5 @@ + + +ClearAttributeValue.name=Gole\u0219te valoarea +NumberListStatisticsReport.name=Afi\u0219eaz\u0103 statistici +NumberListStatisticsReport.description=Calculeaz\u0103 statisticile unui num\u0103r dinamic sau ale unei celule de liste de numere. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_ru.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_ru.properties index f382ca8c3a..3768be22e9 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_ru.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_ru.properties @@ -1,13 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 13\:16+0000\nLast-Translator\: gephi \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -ClearAttributeValue.name=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f - -NumberListStatisticsReport.name=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 - -NumberListStatisticsReport.description=\u041f\u043e\u0434\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0438\u043b\u0438 \u0441\u043f\u0438\u0441\u043a\u0430. +ClearAttributeValue.name=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f +NumberListStatisticsReport.name=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 +NumberListStatisticsReport.description=\u041f\u043e\u0434\u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0443 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0447\u0438\u0441\u043b\u0430 \u0438\u043b\u0438 \u0441\u043f\u0438\u0441\u043a\u0430. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_th.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_tr.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_tr.properties new file mode 100644 index 0000000000..52ae1f1d7d --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_tr.properties @@ -0,0 +1,3 @@ +ClearAttributeValue.name=Clear value +NumberListStatisticsReport.name=Show statistics +NumberListStatisticsReport.description=Calculates statistics of a dynamic number or number list cell. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_uk.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_uk.properties new file mode 100644 index 0000000000..f0a8480c49 --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_uk.properties @@ -0,0 +1,3 @@ +NumberListStatisticsReport.description=\u041E\u0431\u0447\u0438\u0441\u043B\u044E\u0454 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0443 \u0434\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u043E\u0433\u043E \u0447\u0438\u0441\u043B\u0430 \u0430\u0431\u043E \u043A\u043E\u043C\u0456\u0440\u043A\u0438 \u0441\u043F\u0438\u0441\u043A\u0443 \u043D\u043E\u043C\u0435\u0440\u0456\u0432. +ClearAttributeValue.name=\u0427\u0456\u0442\u043A\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F +NumberListStatisticsReport.name=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u0438 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0443 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_zh_CN.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_zh_CN.properties index dea5711ab2..22f3d2909c 100644 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_zh_CN.properties +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_zh_CN.properties @@ -1,12 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:18+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - ClearAttributeValue.name=\u5220\u9664\u6570\u503c - NumberListStatisticsReport.name=\u663e\u793a\u7edf\u8ba1\u5c5e\u6027 - -NumberListStatisticsReport.description=\u8ba1\u7b97\u52a8\u6001\u6570\u503c\u6216\u8005\u6570\u636e\u5217\u8868\u5355\u5143\u7684\u7edf\u8ba1\u5c5e\u6027 +NumberListStatisticsReport.description=\u8BA1\u7B97\u52A8\u6001\u6570\u503C\u6216\u8005\u6570\u5B57\u5217\u8868\u5355\u5143\u7684\u7EDF\u8BA1\u6570\u636E\u3002 diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_zh_TW.properties b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_zh_TW.properties new file mode 100644 index 0000000000..52ae1f1d7d --- /dev/null +++ b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/Bundle_zh_TW.properties @@ -0,0 +1,3 @@ +ClearAttributeValue.name=Clear value +NumberListStatisticsReport.name=Show statistics +NumberListStatisticsReport.description=Calculates statistics of a dynamic number or number list cell. diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/cs.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/cs.po deleted file mode 100644 index cc81900e73..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/cs.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-26 18:24+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "ClearAttributeValue.name" -msgstr "Vyčistit hodnotu" - -msgid "NumberListStatisticsReport.name" -msgstr "Zobrazit statistiky" - -msgid "NumberListStatisticsReport.description" -msgstr "VypočítΓ‘ statistiky dynamickΓ©ho čísla nebo buňku číslovanΓ©ho seznamu." diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/es.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/es.po deleted file mode 100644 index 0e7c6df58b..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/es.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:10+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "ClearAttributeValue.name" -msgstr "Borrar valor" - -msgid "NumberListStatisticsReport.name" -msgstr "Mostrar informe estadΓ­stico" - -msgid "NumberListStatisticsReport.description" -msgstr "Calcula estadΓ­sticas de celdas con nΓΊmeros dinΓ‘micos o listas de nΓΊmeros" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/fr.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/fr.po deleted file mode 100644 index f4722845b9..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/fr.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:10+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "ClearAttributeValue.name" -msgstr "Vider" - -msgid "NumberListStatisticsReport.name" -msgstr "Afficher le rapport de statistiques" - -msgid "NumberListStatisticsReport.description" -msgstr "Calcul les statistiques d'un nombre dynamique ou d'une cellule de liste numΓ©rique, et affiche le rapport." diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/ja.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/ja.po deleted file mode 100644 index 4704ce40a6..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/ja.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-27 08:28+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "ClearAttributeValue.name" -msgstr "ε€€γγ‚―γƒͺγ‚’" - -msgid "NumberListStatisticsReport.name" -msgstr "η΅±θ¨ˆε€€γθ‘¨η€Ί" - -msgid "NumberListStatisticsReport.description" -msgstr "ε‹•ηš„γͺζ•°ε€€γΎγŸγ―ζ•°ε€€γγƒͺγ‚Ήγƒˆγγ‚»γƒ«γη΅±θ¨ˆε€€γ‚’θ¨ˆη—。" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/org-gephi-datalab-plugin-manipulators-values.pot b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/org-gephi-datalab-plugin-manipulators-values.pot deleted file mode 100644 index 24d5fbddc8..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/org-gephi-datalab-plugin-manipulators-values.pot +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "ClearAttributeValue.name" -msgstr "Clear value" - -msgid "NumberListStatisticsReport.name" -msgstr "Show statistics" - -msgid "NumberListStatisticsReport.description" -msgstr "Calculates statistics of a dynamic number or number list cell." diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/pt_BR.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/pt_BR.po deleted file mode 100644 index fa2f4668fe..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/pt_BR.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 18:11+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "ClearAttributeValue.name" -msgstr "Limpar valor" - -msgid "NumberListStatisticsReport.name" -msgstr "Exibir estatΓ­sticas" - -msgid "NumberListStatisticsReport.description" -msgstr "Calcula estatΓ­sticas de cΓ©lulas com nΓΊmeros dinΓ’micos ou listas de nΓΊmeros" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/ru.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/ru.po deleted file mode 100644 index d2c6a69d7e..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/ru.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 13:16+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "ClearAttributeValue.name" -msgstr "ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ значСния" - -msgid "NumberListStatisticsReport.name" -msgstr "ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ статистику" - -msgid "NumberListStatisticsReport.description" -msgstr "ΠŸΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ статистику динамичСского числа ΠΈΠ»ΠΈ списка." diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/zh_CN.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/zh_CN.po deleted file mode 100644 index 15cebe53d6..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/manipulators/values/zh_CN.po +++ /dev/null @@ -1,27 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:18+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "ClearAttributeValue.name" -msgstr "εˆ ι™€ζ•°ε€Ό" - -msgid "NumberListStatisticsReport.name" -msgstr "显瀺统θ‘ε±žζ€§" - -msgid "NumberListStatisticsReport.description" -msgstr "θ‘η—εŠ¨ζ€ζ•°ε€Όζˆ–θ€…ζ•°ζεˆ—θ‘¨ε•ε…ƒηš„η»Ÿθ‘ε±žζ€§" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/org-gephi-datalab-plugin.pot b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/org-gephi-datalab-plugin.pot deleted file mode 100644 index 1391892630..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/org-gephi-datalab-plugin.pot +++ /dev/null @@ -1,19 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implementation of some Data Laboratory manipulators" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/pt_BR.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/pt_BR.po deleted file mode 100644 index 74609dbd84..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/pt_BR.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 18:10+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplementaΓ§Γ£o de alguns manipuladores para o LaboratΓ³rio de Dados" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/ru.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/ru.po deleted file mode 100644 index 46132224f6..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/ru.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 13:16+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "РСализация Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΡ… ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠ² Π›Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΈΠΈ Π”Π°Π½Π½Ρ‹Ρ…" diff --git a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/zh_CN.po b/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/zh_CN.po deleted file mode 100644 index d3d3fd33ac..0000000000 --- a/modules/DataLaboratoryPlugin/src/main/resources/org/gephi/datalab/plugin/zh_CN.po +++ /dev/null @@ -1,21 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:18+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "δΈ€δΊ›ζ•°ζεžιͺŒε€ζ“δ½œηš„ε‰θ£…启用" diff --git a/modules/DesktopAppearance/pom.xml b/modules/DesktopAppearance/pom.xml index 87cda16434..da28214b4d 100644 --- a/modules/DesktopAppearance/pom.xml +++ b/modules/DesktopAppearance/pom.xml @@ -4,13 +4,13 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi desktop-appearance - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm DesktopAppearance @@ -28,6 +28,18 @@ ${project.groupId} appearance-api + + ${project.groupId} + appearance-plugin + + + ${project.groupId} + appearance-plugin-ui + + + org.netbeans.api + org-netbeans-modules-options-api + ${project.groupId} ui-components @@ -40,10 +52,18 @@ ${project.groupId} ui-utils + + ${project.groupId} + utils + ${project.groupId} core-library-wrapper + + ${project.groupId} + desktop-icons + org.netbeans.api org-openide-awt @@ -72,15 +92,34 @@ org.netbeans.api org-openide-nodes + + org.netbeans.api + org-openide-util-ui + + + + + ${project.groupId} + graph-api + test + test-jar + + + ${project.groupId} + project-api + test-jar + test + - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin + org.gephi.desktop.appearance diff --git a/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceToolbar.java b/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceToolbar.java index b958b88670..b5a2f7194c 100644 --- a/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceToolbar.java +++ b/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceToolbar.java @@ -39,16 +39,22 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.desktop.appearance; import java.awt.Component; +import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.awt.font.TextAttribute; import java.beans.PropertyChangeEvent; import java.util.ArrayList; +import java.util.Collections; import java.util.Enumeration; -import java.util.HashSet; import java.util.LinkedHashMap; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.MissingResourceException; @@ -66,20 +72,20 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.appearance.api.Function; import org.gephi.appearance.spi.TransformerCategory; import org.gephi.appearance.spi.TransformerUI; +import org.gephi.ui.utils.UIUtils; import org.openide.util.NbBundle; /** - * * @author mbastian */ public class AppearanceToolbar implements AppearanceUIModelListener { protected final AppearanceUIController controller; - protected AppearanceUIModel model; //Toolbars private final CategoryToolbar categoryToolbar; private final TransformerToolbar transformerToolbar; private final ControlToolbar controlToolbar; + protected AppearanceUIModel model; public AppearanceToolbar(AppearanceUIController controller) { this.controller = controller; @@ -88,6 +94,11 @@ public AppearanceToolbar(AppearanceUIController controller) { controlToolbar = new ControlToolbar(); controller.addPropertyChangeListener(this); + + AppearanceUIModel uimodel = controller.getModel(); + if (uimodel != null) { + setup(uimodel); + } } public JToolBar getCategoryToolbar() { @@ -120,18 +131,9 @@ public void propertyChange(PropertyChangeEvent pce) { refreshSelectedCategory((TransformerCategory) pce.getNewValue()); } else if (pce.getPropertyName().equals(AppearanceUIModelEvent.SELECTED_FUNCTION)) { refreshSelectedFunction((Function) pce.getNewValue()); + } else if (pce.getPropertyName().equals(AppearanceUIModelEvent.SELECTED_TRANSFORMER_UI)) { + refreshSelectedTransformerUI(); } -// if (pce.getPropertyName().equals(AppearanceUIModelEvent.CURRENT_ELEMENT_TYPE)) { -// refreshSelectedElmntGroup((String) pce.getNewValue()); -// } -// if (pce.getPropertyName().equals(RankingUIModel.CURRENT_TRANSFORMER) -// || pce.getPropertyName().equals(RankingUIModel.CURRENT_ELEMENT_TYPE)) { -// refreshTransformers(); -// } -// if (pce.getPropertyName().equalsIgnoreCase(RankingUIModel.START_AUTO_TRANSFORMER) -// || pce.getPropertyName().equalsIgnoreCase(RankingUIModel.STOP_AUTO_TRANSFORMER)) { -// refreshDecoratedIcons(); -// } } private void setup(final AppearanceUIModel model) { @@ -193,6 +195,38 @@ public void run() { }); } + private void refreshSelectedTransformerUI() { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + + controlToolbar.refreshControls(); + } + }); + } + + // Workaround for JDK bug - JDK-8250953 + private void fixAquaSelectedState(JToggleButton btn) { + if (UIUtils.isAquaLookAndFeel()) { + btn.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + if (e.getStateChange() == ItemEvent.SELECTED) { + Font font = btn.getFont().deriveFont( + Collections.singletonMap( + TextAttribute.WEIGHT, TextAttribute.WEIGHT_BOLD)); + btn.setFont(font); + } else { + Font font = btn.getFont().deriveFont( + Collections.singletonMap( + TextAttribute.WEIGHT, TextAttribute.WEIGHT_REGULAR)); + btn.setFont(font); + } + } + }); + } + } + private class AbstractToolbar extends JToolBar { public AbstractToolbar() { @@ -200,6 +234,7 @@ public AbstractToolbar() { setRollover(true); Border b = (Border) UIManager.get("Nb.Editor.Toolbar.border"); //NOI18N setBorder(b); + setOpaque(true); } @Override @@ -217,9 +252,13 @@ public void run() { private class CategoryToolbar extends AbstractToolbar { - private final List buttonGroups = new ArrayList(); + private final List buttonGroups = new ArrayList<>(); + private final javax.swing.JLabel box; + private final javax.swing.ButtonGroup elementGroup; public CategoryToolbar() { + super(); + //Init components elementGroup = new javax.swing.ButtonGroup(); for (final String elmtType : AppearanceUIController.ELEMENT_CLASSES) { @@ -233,12 +272,14 @@ public CategoryToolbar() { } btn.setText(btnLabel); btn.setEnabled(false); + btn.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { controller.setSelectedElementClass(elmtType); } }); + fixAquaSelectedState(btn); elementGroup.add(btn); add(btn); } @@ -253,7 +294,7 @@ public void actionPerformed(ActionEvent e) { private void clear() { //Clear precent buttons for (ButtonGroup bg : buttonGroups) { - for (Enumeration btns = bg.getElements(); btns.hasMoreElements();) { + for (Enumeration btns = bg.getElements(); btns.hasMoreElements(); ) { AbstractButton btn = btns.nextElement(); remove(btn); } @@ -304,10 +345,10 @@ protected void refreshTransformers() { g.clearSelection(); TransformerCategory c = model.getSelectedCategory(); String selected = c.getDisplayName(); - for (Enumeration btns = g.getElements(); btns.hasMoreElements();) { + for (Enumeration btns = g.getElements(); btns.hasMoreElements(); ) { AbstractButton btn = btns.nextElement(); btn.setVisible(active); - if (btn.getName().equals(selected)) { + if (active && btn.getName().equals(selected)) { g.setSelected(btn.getModel(), true); } } @@ -329,21 +370,20 @@ protected void refreshSelectedElmntGroup() { } elementGroup.setSelected(buttonModel, true); } - private javax.swing.JLabel box; - private javax.swing.ButtonGroup elementGroup; } private class TransformerToolbar extends AbstractToolbar { - private final List buttonGroups = new ArrayList(); + private final List buttonGroups = new ArrayList<>(); public TransformerToolbar() { + super(); } private void clear() { //Clear precent buttons for (ButtonGroup bg : buttonGroups) { - for (Enumeration btns = bg.getElements(); btns.hasMoreElements();) { + for (Enumeration btns = bg.getElements(); btns.hasMoreElements(); ) { AbstractButton btn = btns.nextElement(); remove(btn); } @@ -359,7 +399,7 @@ protected void setup() { for (TransformerCategory c : controller.getCategories(elmtType)) { ButtonGroup buttonGroup = new ButtonGroup(); - Map titles = new LinkedHashMap(); + Map titles = new LinkedHashMap<>(); for (TransformerUI t : controller.getTransformerUIs(elmtType, c)) { titles.put(t.getDisplayName(), t); } @@ -378,6 +418,7 @@ public void actionPerformed(ActionEvent e) { controller.setSelectedTransformerUI(value); } }); + fixAquaSelectedState(btn); btn.setName(entry.getKey()); btn.setText(entry.getKey()); btn.setFocusPainted(false); @@ -398,14 +439,15 @@ protected void refreshTransformers() { for (TransformerCategory c : controller.getCategories(elmtType)) { ButtonGroup g = buttonGroups.get(index); - boolean active = model.getSelectedElementClass().equals(elmtType) && model.getSelectedCategory().equals(c); + boolean active = + model.getSelectedElementClass().equals(elmtType) && model.getSelectedCategory().equals(c); g.clearSelection(); TransformerUI t = model.getSelectedTransformerUI(); - for (Enumeration btns = g.getElements(); btns.hasMoreElements();) { + for (Enumeration btns = g.getElements(); btns.hasMoreElements(); ) { AbstractButton btn = btns.nextElement(); btn.setVisible(active); - if (t != null && btn.getName().equals(t.getDisplayName())) { + if (t != null && active && btn.getName().equals(t.getDisplayName())) { g.setSelected(btn.getModel(), true); } } @@ -421,34 +463,29 @@ private class ControlToolbar extends AbstractToolbar { private transient final Set rankingSouthControls; private transient final Set partitionSouthControls; private transient final Set controlButtons; - private final ButtonGroup buttonGroups = new ButtonGroup(); public ControlToolbar() { - rankingSouthControls = new HashSet(); - partitionSouthControls = new HashSet(); - controlButtons = new HashSet(); + rankingSouthControls = new LinkedHashSet<>(); + partitionSouthControls = new LinkedHashSet<>(); + controlButtons = new LinkedHashSet<>(); } public void addRankingButton(AbstractButton btn) { removeAll(); rankingSouthControls.add(btn); - if (!partitionSouthControls.contains(btn)) { - buttonGroups.add(btn); - } } public void addPartitionButton(AbstractButton btn) { removeAll(); partitionSouthControls.add(btn); - if (!rankingSouthControls.contains(btn)) { - buttonGroups.add(btn); - } } private void clear() { //Clear precent buttons - for (Enumeration btns = buttonGroups.getElements(); btns.hasMoreElements();) { - AbstractButton btn = btns.nextElement(); + for (AbstractButton btn : rankingSouthControls) { + remove(btn); + } + for (AbstractButton btn : partitionSouthControls) { remove(btn); } } @@ -463,10 +500,15 @@ private void clearControlButtons() { protected void setup() { clear(); if (model != null) { - for (Enumeration btns = buttonGroups.getElements(); btns.hasMoreElements();) { - AbstractButton btn = btns.nextElement(); + removeAll(); + for (AbstractButton btn : rankingSouthControls) { add(btn); } + for (AbstractButton btn : partitionSouthControls) { + if (!rankingSouthControls.contains(btn)) { + add(btn); + } + } JLabel box = new javax.swing.JLabel(); box.setMaximumSize(new java.awt.Dimension(32767, 32767)); addSeparator(); @@ -476,8 +518,10 @@ protected void setup() { protected void refreshControls() { if (model != null) { - for (Enumeration btns = buttonGroups.getElements(); btns.hasMoreElements();) { - AbstractButton btn = btns.nextElement(); + for (AbstractButton btn : partitionSouthControls) { + btn.setVisible(false); + } + for (AbstractButton btn : rankingSouthControls) { btn.setVisible(false); } TransformerUI u = model.getSelectedTransformerUI(); @@ -504,6 +548,7 @@ protected void refreshControls() { if (bb != null) { for (AbstractButton b : bb) { add(b); + b.setEnabled(true); controlButtons.add(b); } } @@ -511,31 +556,5 @@ protected void refreshControls() { } } } -// private void refreshDecoratedIcons() { -// SwingUtilities.invokeLater(new Runnable() { -// @Override -// public void run() { -// int index = 0; -// for (String elmtType : AppearanceUIController.ELEMENT_CLASSES) { -// ButtonGroup g = buttonGroups.get(index++); -// boolean active = model == null ? false : model.getCurrentElementType().equals(elmtType); -// if (active) { -// for (Enumeration btns = g.getElements(); btns.hasMoreElements();) { -// btns.nextElement().repaint(); -// } -// } -// } -// } -// }); -// } -// private DecoratedIcon getDecoratedIcon(Icon icon, final Transformer transformer) { -// Icon decoration = ImageUtilities.image2Icon(ImageUtilities.loadImage("org/gephi/desktop/ranking/resources/chain.png", false)); -// return new DecoratedIcon(icon, decoration, new DecoratedIcon.DecorationController() { -// @Override -// public boolean isDecorated() { -// return model != null && model.isAutoTransformer(transformer); -// } -// }); -// } } } diff --git a/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceTopComponent.form b/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceTopComponent.form index 7d38291fc6..4499237fd3 100644 --- a/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceTopComponent.form +++ b/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceTopComponent.form @@ -104,6 +104,9 @@ + + + @@ -136,13 +139,10 @@ - - - + - diff --git a/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceTopComponent.java b/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceTopComponent.java index b84990ebf2..6be71a7240 100644 --- a/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceTopComponent.java +++ b/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceTopComponent.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.appearance; import java.awt.BorderLayout; @@ -50,7 +51,6 @@ Development and Distribution License("CDDL") (collectively, the import java.beans.PropertyChangeEvent; import java.util.ArrayList; import java.util.Collections; -import java.util.Comparator; import java.util.List; import javax.swing.Box; import javax.swing.DefaultComboBoxModel; @@ -67,33 +67,54 @@ Development and Distribution License("CDDL") (collectively, the import org.netbeans.api.settings.ConvertAsProperties; import org.openide.awt.ActionID; import org.openide.awt.ActionReference; +import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.windows.TopComponent; @ConvertAsProperties(dtd = "-//org.gephi.desktop.appearance//Appearance//EN", - autostore = false) + autostore = false) @TopComponent.Description(preferredID = "AppearanceTopComponent", - iconBase = "org/gephi/desktop/appearance/resources/small.png", - persistenceType = TopComponent.PERSISTENCE_ALWAYS) -@TopComponent.Registration(mode = "rankingmode", openAtStartup = true, roles = {"overview"}) + iconBase = "DesktopAppearance/small.svg", + persistenceType = TopComponent.PERSISTENCE_ALWAYS) +@TopComponent.Registration(mode = "rankingmode", openAtStartup = true, roles = {"overview"}, position = 10) @ActionID(category = "Window", id = "org.gephi.desktop.appearance.AppearanceTopComponent") @ActionReference(path = "Menu/Window", position = 1100) @TopComponent.OpenActionRegistration(displayName = "#CTL_AppearanceAction", - preferredID = "AppearanceTopComponent") + preferredID = "AppearanceTopComponent") public class AppearanceTopComponent extends TopComponent implements Lookup.Provider, AppearanceUIModelListener { //Const - private final String NO_SELECTION = NbBundle.getMessage(AppearanceTopComponent.class, "AppearanceTopComponent.choose.text"); + private final String NO_SELECTION = + NbBundle.getMessage(AppearanceTopComponent.class, "AppearanceTopComponent.choose.text"); + private transient final AppearanceToolbar toolbar; + //Model + private transient final AppearanceUIController controller; //UI private transient JPanel transformerPanel; - private transient final AppearanceToolbar toolbar; private transient JToggleButton listButton; private transient ItemListener attributeListener; private transient SplineEditor splineEditor; - //Model - private transient final AppearanceUIController controller; private transient AppearanceUIModel model; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton applyButton; + private javax.swing.JComboBox attibuteBox; + private javax.swing.JPanel attributePanel; + private javax.swing.JToggleButton autoApplyButton; + private javax.swing.JToolBar autoApplyToolbar; + private javax.swing.JToolBar categoryToolbar; + private javax.swing.JPanel centerPanel; + private javax.swing.JPanel controlPanel; + private javax.swing.JToolBar controlToolbar; + private javax.swing.JToggleButton enableAutoButton; + private javax.swing.JToggleButton rankingLocalScaleButton; + private javax.swing.JToggleButton partitionLocalScaleButton; + private javax.swing.JToggleButton transformNullValuesButton; + private javax.swing.JPanel mainPanel; + private org.jdesktop.swingx.JXHyperlink splineButton; + private javax.swing.JToggleButton stopAutoApplyButton; + private javax.swing.JToolBar tranformerToolbar; + // End of variables declaration//GEN-END:variables public AppearanceTopComponent() { setName(NbBundle.getMessage(AppearanceTopComponent.class, "CTL_AppearanceTopComponent")); @@ -118,8 +139,8 @@ public void propertyChange(PropertyChangeEvent pce) { if (pce.getPropertyName().equals(AppearanceUIModelEvent.MODEL)) { refreshModel((AppearanceUIModel) pce.getNewValue()); } else if (pce.getPropertyName().equals(AppearanceUIModelEvent.SELECTED_CATEGORY) - || pce.getPropertyName().equals(AppearanceUIModelEvent.SELECTED_ELEMENT_CLASS) - || pce.getPropertyName().equals(AppearanceUIModelEvent.SELECTED_TRANSFORMER_UI)) { + || pce.getPropertyName().equals(AppearanceUIModelEvent.SELECTED_ELEMENT_CLASS) + || pce.getPropertyName().equals(AppearanceUIModelEvent.SELECTED_TRANSFORMER_UI)) { refreshCenterPanel(); refreshCombo(); refreshControls(); @@ -127,10 +148,19 @@ public void propertyChange(PropertyChangeEvent pce) { refreshCenterPanel(); refreshCombo(); refreshControls(); - } else if(pce.getPropertyName().equals(AppearanceUIModelEvent.SET_AUTO_APPLY)) { + } else if (pce.getPropertyName().equals(AppearanceUIModelEvent.SET_AUTO_APPLY)) { + refreshControls(); + } else if (pce.getPropertyName().equals(AppearanceUIModelEvent.START_STOP_AUTO_APPLY)) { refreshControls(); - } else if(pce.getPropertyName().equals(AppearanceUIModelEvent.START_STOP_AUTO_APPLY)) { + } else if (pce.getPropertyName().equals(AppearanceUIModelEvent.SET_LOCAL_SCALE)) { + refreshControls(); + } else if (pce.getPropertyName().equals(AppearanceUIModelEvent.ATTRIBUTE_LIST)) { + refreshCombo(); + } else if (pce.getPropertyName().equals(AppearanceUIModelEvent.REFRESH_FUNCTION)) { + refreshCenterPanel(); + } else if (pce.getPropertyName().equals(AppearanceUIModelEvent.SET_TRANSFORM_NULL_VALUES)) { refreshControls(); + refreshCenterPanel(); } // if (pce.getPropertyName().equals(RankingUIModel.LIST_VISIBLE)) { // listButton.setSelected((Boolean) pce.getNewValue()); @@ -211,10 +241,11 @@ public void run() { } if (transformerPanel != null) { - transformerPanel.setOpaque(false); + transformerPanel.setOpaque(true); centerPanel.add(transformerPanel, BorderLayout.CENTER); } + centerPanel.revalidate(); centerPanel.repaint(); //setCenterPanel @@ -227,86 +258,94 @@ public void run() { } private void refreshCombo() { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - final DefaultComboBoxModel comboBoxModel = new DefaultComboBoxModel(); - if (model != null) { - TransformerUI ui = model.getSelectedTransformerUI(); - if (ui != null && model.isAttributeTransformerUI(ui)) { + final AppearanceUIModel currentModel = model; + if (currentModel != null && currentModel.getSelectedTransformerUI() != null && + currentModel.isAttributeTransformerUI(currentModel.getSelectedTransformerUI())) { - //Ranking - Function selectedColumn = model.getSelectedFunction(); - attibuteBox.removeItemListener(attributeListener); - comboBoxModel.addElement(NO_SELECTION); - comboBoxModel.setSelectedItem(NO_SELECTION); + final List rows = new ArrayList<>(currentModel.getFunctions()); - List rows = new ArrayList(); - rows.addAll(model.getFunctions()); + Collections.sort(rows, (o1, o2) -> { + if (o1.isAttribute() && !o2.isAttribute()) { + return 1; + } else if (!o1.isAttribute() && o2.isAttribute()) { + return -1; + } + return o1.toString().compareTo(o2.toString()); + }); - Collections.sort(rows, new Comparator() { - @Override - public int compare(Function o1, Function o2) { - return o1.getUI().getDisplayName().compareTo(o2.getUI().getDisplayName()); - } - }); - for (Function r : rows) { - comboBoxModel.addElement(r); - if (selectedColumn != null && selectedColumn.equals(r)) { - comboBoxModel.setSelectedItem(r); - } - } - attributeListener = new ItemListener() { - @Override - public void itemStateChanged(ItemEvent e) { - if (model != null) { - if (!attibuteBox.getSelectedItem().equals(NO_SELECTION)) { - Function selectedItem = (Function) attibuteBox.getSelectedItem(); - controller.setSelectedFunction(selectedItem); - } else { - controller.setSelectedFunction(null); - } + SwingUtilities.invokeLater(() -> { + final DefaultComboBoxModel comboBoxModel = new DefaultComboBoxModel(); + + //Ranking + Function selectedColumn = currentModel.getSelectedFunction(); + attibuteBox.removeItemListener(attributeListener); + + comboBoxModel.addElement(NO_SELECTION); + comboBoxModel.setSelectedItem(NO_SELECTION); + + for (Function r : rows) { + comboBoxModel.addElement(r); + if (selectedColumn != null && selectedColumn.equals(r)) { + comboBoxModel.setSelectedItem(r); + } + } + attributeListener = new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + if (model != null) { + if (!attibuteBox.getSelectedItem().equals(NO_SELECTION)) { + Function selectedItem = (Function) attibuteBox.getSelectedItem(); + Function selectedFunction = model.getSelectedFunction(); + if (selectedFunction != selectedItem) { + controller.setSelectedFunction(selectedItem); } + } else { + controller.setSelectedFunction(null); } - }; - attibuteBox.addItemListener(attributeListener); + } } - } + }; + attibuteBox.addItemListener(attributeListener); + attibuteBox.setModel(comboBoxModel); - } - }); + }); + } else { + SwingUtilities.invokeLater(() -> { + attibuteBox.setModel(new DefaultComboBoxModel()); + }); + } } private void refreshControls() { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { - if (model != null) { - if (model.getSelectedFunction() != null) { - enableAutoButton.setEnabled(true); - if (model.getAutoAppyTransformer() != null) { - applyButton.setVisible(false); - enableAutoButton.setSelected(true); - AutoAppyTransformer aat = model.getAutoAppyTransformer(); - if (aat.isRunning()) { - autoApplyButton.setVisible(false); - stopAutoApplyButton.setVisible(true); - stopAutoApplyButton.setSelected(true); - } else { - autoApplyButton.setVisible(true); - autoApplyButton.setSelected(false); - stopAutoApplyButton.setVisible(false); - } - } else { + if (model != null && model.getSelectedFunction() != null) { + enableAutoButton.setEnabled(true); + if (model.getAutoApplyTransformer() != null) { + applyButton.setVisible(false); + enableAutoButton.setSelected(true); + AutoAppyTransformer aat = model.getAutoApplyTransformer(); + if (aat.isRunning()) { autoApplyButton.setVisible(false); + stopAutoApplyButton.setVisible(true); + stopAutoApplyButton.setSelected(true); + } else { + autoApplyButton.setVisible(true); + autoApplyButton.setSelected(false); stopAutoApplyButton.setVisible(false); - enableAutoButton.setSelected(false); - applyButton.setVisible(true); - applyButton.setEnabled(true); } - + } else { + autoApplyButton.setVisible(false); + stopAutoApplyButton.setVisible(false); + enableAutoButton.setSelected(false); + applyButton.setVisible(true); + applyButton.setEnabled(true); } + rankingLocalScaleButton.setSelected(model.isRankingLocalScale()); + partitionLocalScaleButton.setSelected(model.isPartitionLocalScale()); + transformNullValuesButton.setSelected(model.isTransformNullValues()); return; } //Disable @@ -321,17 +360,31 @@ public void run() { private void initControls() { //Add ranking controls - toolbar.addRankingControl(localScaleButton); toolbar.addRankingControl(splineButton); + toolbar.addRankingControl(rankingLocalScaleButton); + toolbar.addRankingControl(transformNullValuesButton); //Add partition controls - toolbar.addPartitionControl(localScaleButton); + toolbar.addPartitionControl(partitionLocalScaleButton); + toolbar.addPartitionControl(transformNullValuesButton); //Actions - localScaleButton.addActionListener(new ActionListener() { + rankingLocalScaleButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + controller.getAppearanceController().setUseRankingLocalScale(rankingLocalScaleButton.isSelected()); + } + }); + partitionLocalScaleButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - controller.getAppearanceController().setUseLocalScale(localScaleButton.isSelected()); + controller.getAppearanceController().setUsePartitionLocalScale(partitionLocalScaleButton.isSelected()); + } + }); + transformNullValuesButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + controller.getAppearanceController().setTransformNullValues(transformNullValuesButton.isSelected()); } }); splineButton.addActionListener(new ActionListener() { @@ -339,9 +392,10 @@ public void actionPerformed(ActionEvent e) { public void actionPerformed(ActionEvent e) { RankingFunction function = (RankingFunction) model.getSelectedFunction(); if (splineEditor == null) { - splineEditor = new SplineEditor(NbBundle.getMessage(AppearanceTopComponent.class, "AppearanceTopComponent.splineEditor.title")); + splineEditor = new SplineEditor( + NbBundle.getMessage(AppearanceTopComponent.class, "AppearanceTopComponent.splineEditor.title")); } - Interpolator interpolator = function.getRanking().getInterpolator(); + Interpolator interpolator = function.getInterpolator(); if (interpolator instanceof Interpolator.BezierInterpolator) { Interpolator.BezierInterpolator bezierInterpolator = (Interpolator.BezierInterpolator) interpolator; splineEditor.setControl1(bezierInterpolator.getControl1()); @@ -351,16 +405,16 @@ public void actionPerformed(ActionEvent e) { splineEditor.setControl2(new Point2D.Float(1, 1)); } splineEditor.setVisible(true); - function.getRanking().setInterpolator( - new Interpolator.BezierInterpolator( - (float) splineEditor.getControl1().getX(), (float) splineEditor.getControl1().getY(), - (float) splineEditor.getControl2().getX(), (float) splineEditor.getControl2().getY())); + function.setInterpolator( + new Interpolator.BezierInterpolator( + (float) splineEditor.getControl1().getX(), (float) splineEditor.getControl1().getY(), + (float) splineEditor.getControl2().getX(), (float) splineEditor.getControl2().getY())); } }); applyButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - controller.appearanceController.transform(model.getSelectedFunction()); + controller.transform(model.getSelectedFunction()); } }); autoApplyButton.addActionListener(new ActionListener() { @@ -382,28 +436,28 @@ public void actionPerformed(ActionEvent e) { @Override public void actionPerformed(ActionEvent e) { - controller.setAutoApply(model.getAutoAppyTransformer() == null); + controller.setAutoApply(model.getAutoApplyTransformer() == null); } }); stopAutoApplyButton.setVisible(false); autoApplyButton.setVisible(false); // listButton = new JToggleButton(); -// listButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/ranking/resources/list.png"))); // NOI18N +// listButton.setIcon(ImageUtilities.loadImageIcon("DesktopAppearance/list.png", false)); // NOI18N // listButton.setToolTipText(NbBundle.getMessage(RankingTopComponent.class, "RankingTopComponent.listButton.text")); // listButton.setEnabled(false); // listButton.setFocusable(false); // southToolbar.add(listButton); /* * barChartButton = new JToggleButton(); barChartButton.setIcon(new - * javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/ranking/resources/barchart.png"))); + * javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/ranking/resources/barchart.png", false)); * // NOI18N NbBundle.getMessage(RankingTopComponent.class, * "RankingTopComponent.barchartButton.text"); * barChartButton.setEnabled(false); barChartButton.setFocusable(false); * southToolbar.add(barChartButton); */ // localScaleButton = new JToggleButton(); -// localScaleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/ranking/resources/funnel.png"))); // NOI18N +// localScaleButton.setIcon(ImageUtilities.loadImageIcon("DesktopAppearance/funnel.svg", false)); // NOI18N // localScaleButton.setToolTipText(NbBundle.getMessage(RankingTopComponent.class, "RankingTopComponent.localScaleButton.text")); // localScaleButton.setEnabled(false); // localScaleButton.setFocusable(false); @@ -468,7 +522,9 @@ private void initComponents() { attibuteBox = new javax.swing.JComboBox(); centerPanel = new javax.swing.JPanel(); controlToolbar = toolbar.getControlToolbar(); - localScaleButton = new javax.swing.JToggleButton(); + rankingLocalScaleButton = new javax.swing.JToggleButton(); + partitionLocalScaleButton = new javax.swing.JToggleButton(); + transformNullValuesButton = new javax.swing.JToggleButton(); splineButton = new org.jdesktop.swingx.JXHyperlink(); controlPanel = new javax.swing.JPanel(); applyButton = new javax.swing.JButton(); @@ -481,10 +537,11 @@ private void initComponents() { setLayout(new java.awt.BorderLayout()); mainPanel.setLayout(new java.awt.GridBagLayout()); + mainPanel.setOpaque(true); categoryToolbar.setFloatable(false); categoryToolbar.setRollover(true); - categoryToolbar.setOpaque(false); + categoryToolbar.setOpaque(true); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; @@ -495,7 +552,7 @@ private void initComponents() { tranformerToolbar.setFloatable(false); tranformerToolbar.setRollover(true); - tranformerToolbar.setOpaque(false); + tranformerToolbar.setOpaque(true); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; @@ -504,7 +561,7 @@ private void initComponents() { gridBagConstraints.weightx = 1.0; mainPanel.add(tranformerToolbar, gridBagConstraints); - attributePanel.setOpaque(false); + attributePanel.setOpaque(true); attributePanel.setLayout(new java.awt.GridBagLayout()); gridBagConstraints = new java.awt.GridBagConstraints(); @@ -523,7 +580,7 @@ private void initComponents() { gridBagConstraints.weightx = 1.0; mainPanel.add(attributePanel, gridBagConstraints); - centerPanel.setOpaque(false); + centerPanel.setOpaque(true); centerPanel.setLayout(new java.awt.BorderLayout()); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; @@ -535,20 +592,37 @@ private void initComponents() { controlToolbar.setFloatable(false); controlToolbar.setRollover(true); - controlToolbar.setOpaque(false); - - localScaleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/appearance/resources/funnel.png"))); // NOI18N - localScaleButton.setToolTipText(org.openide.util.NbBundle.getMessage(AppearanceTopComponent.class, "AppearanceTopComponent.localScaleButton.toolTipText")); // NOI18N - localScaleButton.setFocusable(false); - controlToolbar.add(localScaleButton); - - org.openide.awt.Mnemonics.setLocalizedText(splineButton, org.openide.util.NbBundle.getMessage(AppearanceTopComponent.class, "AppearanceTopComponent.splineButton.text")); // NOI18N - splineButton.setToolTipText(org.openide.util.NbBundle.getMessage(AppearanceTopComponent.class, "AppearanceTopComponent.splineButton.toolTipText")); // NOI18N - splineButton.setClickedColor(new java.awt.Color(0, 51, 255)); + controlToolbar.setMargin(new java.awt.Insets(0, 4, 0, 0)); + controlToolbar.setOpaque(true); + + rankingLocalScaleButton.setIcon(ImageUtilities.loadImageIcon("DesktopAppearance/funnel.svg", false)); // NOI18N + rankingLocalScaleButton.setToolTipText(org.openide.util.NbBundle + .getMessage(AppearanceTopComponent.class, "AppearanceTopComponent.localScaleButton.toolTipText")); // NOI18N + rankingLocalScaleButton.setFocusable(false); + controlToolbar.add(rankingLocalScaleButton); + + partitionLocalScaleButton.setIcon(ImageUtilities.loadImageIcon("DesktopAppearance/funnel.svg", false)); // NOI18N + partitionLocalScaleButton.setToolTipText(org.openide.util.NbBundle + .getMessage(AppearanceTopComponent.class, + "AppearanceTopComponent.partitionLocalScaleButton.toolTipText")); // NOI18N + partitionLocalScaleButton.setFocusable(false); + controlToolbar.add(partitionLocalScaleButton); + + transformNullValuesButton.setIcon(ImageUtilities.loadImageIcon("DesktopAppearance/transformNull.svg", false)); // NOI18N + transformNullValuesButton.setToolTipText(org.openide.util.NbBundle + .getMessage(AppearanceTopComponent.class, + "AppearanceTopComponent.transformNullValues.toolTipText")); // NOI18N + transformNullValuesButton.setFocusable(false); + controlToolbar.add(transformNullValuesButton); + + org.openide.awt.Mnemonics.setLocalizedText(splineButton, org.openide.util.NbBundle + .getMessage(AppearanceTopComponent.class, "AppearanceTopComponent.splineButton.text")); // NOI18N + splineButton.setToolTipText(org.openide.util.NbBundle + .getMessage(AppearanceTopComponent.class, "AppearanceTopComponent.splineButton.toolTipText")); // NOI18N splineButton.setFocusPainted(false); splineButton.setFocusable(false); + splineButton.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); splineButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); - splineButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); controlToolbar.add(splineButton); gridBagConstraints = new java.awt.GridBagConstraints(); @@ -560,12 +634,14 @@ private void initComponents() { gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 3); mainPanel.add(controlToolbar, gridBagConstraints); - controlPanel.setOpaque(false); + controlPanel.setOpaque(true); controlPanel.setLayout(new java.awt.GridBagLayout()); - applyButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/appearance/resources/apply.gif"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(applyButton, org.openide.util.NbBundle.getMessage(AppearanceTopComponent.class, "AppearanceTopComponent.applyButton.text")); // NOI18N - applyButton.setToolTipText(org.openide.util.NbBundle.getMessage(AppearanceTopComponent.class, "AppearanceTopComponent.applyButton.toolTipText")); // NOI18N + applyButton.setIcon(ImageUtilities.loadImageIcon("DesktopAppearance/apply.svg", false)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(applyButton, org.openide.util.NbBundle + .getMessage(AppearanceTopComponent.class, "AppearanceTopComponent.applyButton.text")); // NOI18N + applyButton.setToolTipText(org.openide.util.NbBundle + .getMessage(AppearanceTopComponent.class, "AppearanceTopComponent.applyButton.toolTipText")); // NOI18N applyButton.setMargin(new java.awt.Insets(0, 14, 0, 14)); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 3; @@ -574,10 +650,12 @@ private void initComponents() { gridBagConstraints.insets = new java.awt.Insets(0, 18, 3, 5); controlPanel.add(applyButton, gridBagConstraints); - stopAutoApplyButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/appearance/resources/stop.png"))); // NOI18N + stopAutoApplyButton.setIcon(ImageUtilities.loadImageIcon("DesktopAppearance/stop.svg", false)); // NOI18N stopAutoApplyButton.setSelected(true); - org.openide.awt.Mnemonics.setLocalizedText(stopAutoApplyButton, org.openide.util.NbBundle.getMessage(AppearanceTopComponent.class, "AppearanceTopComponent.stopAutoApplyButton.text")); // NOI18N - stopAutoApplyButton.setToolTipText(org.openide.util.NbBundle.getMessage(AppearanceTopComponent.class, "AppearanceTopComponent.stopAutoApplyButton.toolTipText")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(stopAutoApplyButton, org.openide.util.NbBundle + .getMessage(AppearanceTopComponent.class, "AppearanceTopComponent.stopAutoApplyButton.text")); // NOI18N + stopAutoApplyButton.setToolTipText(org.openide.util.NbBundle.getMessage(AppearanceTopComponent.class, + "AppearanceTopComponent.stopAutoApplyButton.toolTipText")); // NOI18N stopAutoApplyButton.setFocusable(false); stopAutoApplyButton.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT); stopAutoApplyButton.setMargin(new java.awt.Insets(0, 7, 0, 7)); @@ -591,10 +669,11 @@ private void initComponents() { autoApplyToolbar.setFloatable(false); autoApplyToolbar.setRollover(true); - autoApplyToolbar.setOpaque(false); + autoApplyToolbar.setOpaque(true); - enableAutoButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/appearance/resources/chain.png"))); // NOI18N - enableAutoButton.setToolTipText(org.openide.util.NbBundle.getMessage(AppearanceTopComponent.class, "AppearanceTopComponent.enableAutoButton.toolTipText")); // NOI18N + enableAutoButton.setIcon(ImageUtilities.loadImageIcon("DesktopAppearance/chain.svg", false)); // NOI18N + enableAutoButton.setToolTipText(org.openide.util.NbBundle + .getMessage(AppearanceTopComponent.class, "AppearanceTopComponent.enableAutoButton.toolTipText")); // NOI18N enableAutoButton.setFocusable(false); enableAutoButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); enableAutoButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); @@ -608,9 +687,11 @@ private void initComponents() { gridBagConstraints.weightx = 1.0; controlPanel.add(autoApplyToolbar, gridBagConstraints); - autoApplyButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/appearance/resources/apply.gif"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(autoApplyButton, org.openide.util.NbBundle.getMessage(AppearanceTopComponent.class, "AppearanceTopComponent.autoApplyButton.text")); // NOI18N - autoApplyButton.setToolTipText(org.openide.util.NbBundle.getMessage(AppearanceTopComponent.class, "AppearanceTopComponent.autoApplyButton.toolTipText")); // NOI18N + autoApplyButton.setIcon(ImageUtilities.loadImageIcon("DesktopAppearance/apply.svg", false)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(autoApplyButton, org.openide.util.NbBundle + .getMessage(AppearanceTopComponent.class, "AppearanceTopComponent.autoApplyButton.text")); // NOI18N + autoApplyButton.setToolTipText(org.openide.util.NbBundle + .getMessage(AppearanceTopComponent.class, "AppearanceTopComponent.autoApplyButton.toolTipText")); // NOI18N autoApplyButton.setFocusable(false); autoApplyButton.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT); autoApplyButton.setMargin(new java.awt.Insets(0, 7, 0, 7)); @@ -631,23 +712,6 @@ private void initComponents() { add(mainPanel, java.awt.BorderLayout.CENTER); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton applyButton; - private javax.swing.JComboBox attibuteBox; - private javax.swing.JPanel attributePanel; - private javax.swing.JToggleButton autoApplyButton; - private javax.swing.JToolBar autoApplyToolbar; - private javax.swing.JToolBar categoryToolbar; - private javax.swing.JPanel centerPanel; - private javax.swing.JPanel controlPanel; - private javax.swing.JToolBar controlToolbar; - private javax.swing.JToggleButton enableAutoButton; - private javax.swing.JToggleButton localScaleButton; - private javax.swing.JPanel mainPanel; - private org.jdesktop.swingx.JXHyperlink splineButton; - private javax.swing.JToggleButton stopAutoApplyButton; - private javax.swing.JToolBar tranformerToolbar; - // End of variables declaration//GEN-END:variables void writeProperties(java.util.Properties p) { // better to version settings since initial version as advocated at diff --git a/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceUIController.java b/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceUIController.java index 5e3742eac0..277a74a4fb 100644 --- a/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceUIController.java +++ b/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceUIController.java @@ -39,27 +39,22 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.desktop.appearance; import java.util.Collection; -import java.util.Collections; import java.util.HashMap; -import java.util.HashSet; import java.util.LinkedHashMap; import java.util.LinkedHashSet; import java.util.Map; import java.util.Set; -import java.util.Timer; -import java.util.TimerTask; +import java.util.concurrent.CopyOnWriteArraySet; import org.gephi.appearance.api.AppearanceController; import org.gephi.appearance.api.AppearanceModel; import org.gephi.appearance.api.Function; import org.gephi.appearance.spi.Transformer; import org.gephi.appearance.spi.TransformerCategory; import org.gephi.appearance.spi.TransformerUI; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.attribute.api.TableObserver; -import org.gephi.graph.api.GraphController; import org.gephi.project.api.ProjectController; import org.gephi.project.api.Workspace; import org.gephi.project.api.WorkspaceListener; @@ -67,7 +62,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author mbastian */ @ServiceProvider(service = AppearanceUIController.class) @@ -81,11 +75,9 @@ public class AppearanceUIController { protected final Map>> transformers; //Architecture protected final AppearanceController appearanceController; - private final Set listeners; + private final CopyOnWriteArraySet listeners; //Model private AppearanceUIModel model; - //Observer - private ColumnObserver tableObserver; public AppearanceUIController() { final ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); @@ -101,15 +93,10 @@ public void select(Workspace workspace) { model = workspace.getLookup().lookup(AppearanceUIModel.class); if (model == null) { AppearanceModel appearanceModel = appearanceController.getModel(workspace); - model = new AppearanceUIModel(AppearanceUIController.this, appearanceModel); + model = new AppearanceUIModel(appearanceModel); workspace.add(model); } model.select(); - if (tableObserver != null) { - tableObserver.destroy(); - } - tableObserver = new ColumnObserver(workspace); - tableObserver.start(); firePropertyChangeEvent(AppearanceUIModelEvent.MODEL, oldModel, model); } @@ -130,9 +117,6 @@ public void disable() { AppearanceUIModel oldModel = model; model = null; firePropertyChangeEvent(AppearanceUIModelEvent.MODEL, oldModel, model); - if (tableObserver != null) { - tableObserver.destroy(); - } } }); @@ -140,20 +124,21 @@ public void disable() { model = pc.getCurrentWorkspace().getLookup().lookup(AppearanceUIModel.class); if (model == null) { AppearanceModel appearanceModel = appearanceController.getModel(pc.getCurrentWorkspace()); - model = new AppearanceUIModel(this, appearanceModel); + model = new AppearanceUIModel(appearanceModel); pc.getCurrentWorkspace().add(model); + model.select(); } } - listeners = Collections.synchronizedSet(new HashSet()); + listeners = new CopyOnWriteArraySet<>(); - transformers = new HashMap>>(); + transformers = new HashMap<>(); for (String ec : ELEMENT_CLASSES) { transformers.put(ec, new LinkedHashMap>()); } //Register transformers - Map tMap = new HashMap(); + Map tMap = new HashMap<>(); for (Transformer t : Lookup.getDefault().lookupAll(Transformer.class)) { tMap.put(t.getClass(), t); } @@ -162,25 +147,30 @@ public void disable() { if (t != null) { TransformerCategory c = ui.getCategory(); if (t.isNode()) { - Set uis = transformers.get(NODE_ELEMENT).get(c); - if (uis == null) { - uis = new LinkedHashSet(); - transformers.get(NODE_ELEMENT).put(c, uis); - } + Set uis = + transformers.get(NODE_ELEMENT).computeIfAbsent(c, k -> new LinkedHashSet<>()); uis.add(ui); } if (t.isEdge()) { - Set uis = transformers.get(EDGE_ELEMENT).get(c); - if (uis == null) { - uis = new LinkedHashSet(); - transformers.get(EDGE_ELEMENT).put(c, uis); - } + Set uis = + transformers.get(EDGE_ELEMENT).computeIfAbsent(c, k -> new LinkedHashSet<>()); uis.add(ui); } } } } + public void transform(Function function) { + if (model != null && function != null) { + model.saveTransformerProperties(); + appearanceController.transform(function); + TransformerUI selectedUI = model.getSelectedTransformerUI(); + if (selectedUI != null) { + selectedUI.onApply(function); + } + } + } + public Collection getCategories(String elementClass) { return transformers.get(elementClass).keySet(); } @@ -198,7 +188,7 @@ public AppearanceUIModel getModel(Workspace workspace) { if (m == null) { AppearanceController ac = Lookup.getDefault().lookup(AppearanceController.class); AppearanceModel appearanceModel = ac.getModel(workspace); - m = new AppearanceUIModel(this, appearanceModel); + m = new AppearanceUIModel(appearanceModel); workspace.add(m); } return m; @@ -212,6 +202,7 @@ public void setSelectedElementClass(String elementClass) { String oldValue = model.getSelectedElementClass(); if (!oldValue.equals(elementClass)) { model.setSelectedElementClass(elementClass); + firePropertyChangeEvent(AppearanceUIModelEvent.SELECTED_ELEMENT_CLASS, oldValue, elementClass); } } @@ -233,6 +224,7 @@ public void setSelectedTransformerUI(TransformerUI ui) { if (!oldValue.equals(ui)) { model.setAutoApply(false); model.setSelectedTransformerUI(ui); + firePropertyChangeEvent(AppearanceUIModelEvent.SELECTED_TRANSFORMER_UI, oldValue, ui); } } @@ -241,7 +233,8 @@ public void setSelectedTransformerUI(TransformerUI ui) { public void setSelectedFunction(Function function) { if (model != null) { Function oldValue = model.getSelectedFunction(); - if ((oldValue == null && function != null) || (oldValue != null && function == null) || (function != null && oldValue != null && !oldValue.equals(function))) { + if ((oldValue == null && function != null) || (oldValue != null && function == null) || + (function != null && oldValue != null && !oldValue.equals(function))) { model.setAutoApply(false); model.setSelectedFunction(function); firePropertyChangeEvent(AppearanceUIModelEvent.SELECTED_FUNCTION, oldValue, function); @@ -258,7 +251,7 @@ public void setAutoApply(boolean autoApply) { public void startAutoApply() { if (model != null) { - AutoAppyTransformer aat = model.getAutoAppyTransformer(); + AutoAppyTransformer aat = model.getAutoApplyTransformer(); if (aat != null) { aat.start(); firePropertyChangeEvent(AppearanceUIModelEvent.START_STOP_AUTO_APPLY, false, true); @@ -268,7 +261,7 @@ public void startAutoApply() { public void stopAutoApply() { if (model != null) { - AutoAppyTransformer aat = model.getAutoAppyTransformer(); + AutoAppyTransformer aat = model.getAutoApplyTransformer(); if (aat != null) { aat.stop(); firePropertyChangeEvent(AppearanceUIModelEvent.START_STOP_AUTO_APPLY, true, false); @@ -276,6 +269,22 @@ public void stopAutoApply() { } } + public void refreshColumnsList() { + if (model != null) { + Function function = model.getSelectedFunction(); + if (function != null && !function.isValid()) { + setSelectedFunction(null); + } + firePropertyChangeEvent(AppearanceUIModelEvent.ATTRIBUTE_LIST, null, null); + } + } + + public void refreshFunction() { + if (model != null) { + firePropertyChangeEvent(AppearanceUIModelEvent.REFRESH_FUNCTION, null, null); + } + } + public AppearanceController getAppearanceController() { return appearanceController; } @@ -290,9 +299,7 @@ protected TransformerUI getFirstTransformerUI(String elementClass, TransformerCa } public void addPropertyChangeListener(AppearanceUIModelListener listener) { - if (!listeners.contains(listener)) { - listeners.add(listener); - } + listeners.add(listener); } public void removePropertyChangeListener(AppearanceUIModelListener listener) { @@ -305,43 +312,4 @@ protected void firePropertyChangeEvent(String propertyName, Object oldValue, Obj listener.propertyChange(event); } } - - private class ColumnObserver extends TimerTask { - - private final GraphController gc = Lookup.getDefault().lookup(GraphController.class); - private static final int INTERVAL = 500; - private final Timer timer; - private final TableObserver nodeObserver; - private final TableObserver edgeObserver; - - public ColumnObserver(Workspace workspace) { - timer = new Timer("RankingColumnObserver", true); - nodeObserver = gc.getAttributeModel(workspace).getNodeTable().newTableObserver(); - edgeObserver = gc.getAttributeModel(workspace).getEdgeTable().newTableObserver(); - } - - @Override - public void run() { - if (nodeObserver.hasTableChanged() || edgeObserver.hasTableChanged()) { - Function oldValue = model.getSelectedFunction(); - model.refreshSelectedFunction(); - Function newValue = model.getSelectedFunction(); - firePropertyChangeEvent(AppearanceUIModelEvent.SELECTED_FUNCTION, oldValue, newValue); - } - } - - public void start() { - timer.schedule(this, INTERVAL, INTERVAL); - } - - public void stop() { - timer.cancel(); - } - - public void destroy() { - stop(); - nodeObserver.destroy(); - edgeObserver.destroy(); - } - } } diff --git a/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceUIModel.java b/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceUIModel.java index db5e0766d6..177bc33a49 100644 --- a/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceUIModel.java +++ b/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceUIModel.java @@ -39,128 +39,280 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.desktop.appearance; +import static org.gephi.desktop.appearance.AppearanceUIController.ELEMENT_CLASSES; + +import java.awt.Color; +import java.lang.reflect.Method; +import java.lang.reflect.Modifier; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.HashMap; -import java.util.HashSet; +import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import org.gephi.appearance.api.AppearanceModel; import org.gephi.appearance.api.Function; +import org.gephi.appearance.plugin.RankingElementColorTransformer; +import org.gephi.appearance.plugin.RankingLabelColorTransformer; +import org.gephi.appearance.plugin.RankingLabelSizeTransformer; +import org.gephi.appearance.plugin.RankingNodeSizeTransformer; import org.gephi.appearance.spi.PartitionTransformer; import org.gephi.appearance.spi.RankingTransformer; import org.gephi.appearance.spi.Transformer; import org.gephi.appearance.spi.TransformerCategory; import org.gephi.appearance.spi.TransformerUI; -import static org.gephi.desktop.appearance.AppearanceUIController.ELEMENT_CLASSES; +import org.gephi.desktop.appearance.options.AppearancePreferences; +import org.gephi.project.api.Workspace; +import org.gephi.ui.appearance.plugin.category.DefaultCategory; +import org.openide.util.Lookup; /** - * * @author mbastian */ public class AppearanceUIModel { - protected final AppearanceUIController controller; protected final AppearanceModel appearanceModel; protected final Map> selectedTransformerUI; protected final Map> selectedFunction; protected final Map selectedCategory; protected final Map> selectedAutoTransformer; + protected final Map> savedProperties; + protected final TableObserverExecutor tableObserverExecutor; + protected final FunctionObserverExecutor functionObserverExecutor; protected String selectedElementClass = AppearanceUIController.NODE_ELEMENT; - protected Transformer selectedTransformer; - public AppearanceUIModel(AppearanceUIController controller, AppearanceModel model) { - this.controller = controller; + public AppearanceUIModel(AppearanceModel model) { this.appearanceModel = model; //Init maps - selectedCategory = new HashMap(); - selectedTransformerUI = new HashMap>(); - selectedFunction = new HashMap>(); - selectedAutoTransformer = new HashMap>(); + selectedCategory = new HashMap<>(); + selectedTransformerUI = new HashMap<>(); + selectedFunction = new HashMap<>(); + selectedAutoTransformer = new HashMap<>(); + savedProperties = new HashMap<>(); //Init selected for (String ec : ELEMENT_CLASSES) { initSelectedTransformerUIs(ec); - refreshSelectedFunctions(ec); + } + + //Init observers + tableObserverExecutor = new TableObserverExecutor(this); + functionObserverExecutor = new FunctionObserverExecutor(this); + + //Apply preference defaults to transformers that have no saved properties yet + applyPreferenceDefaults(); + } + + private void applyPreferenceDefaults() { + float nodeMinSize = AppearancePreferences.getNodeRankingSizeMin(); + float nodeMaxSize = AppearancePreferences.getNodeRankingSizeMax(); + float labelMinSize = AppearancePreferences.getLabelRankingSizeMin(); + float labelMaxSize = AppearancePreferences.getLabelRankingSizeMax(); + Color[] elementColors = AppearancePreferences.getElementRankingColors(); + float[] elementColorPositions = AppearancePreferences.getElementRankingColorPositions(); + Color[] labelColors = AppearancePreferences.getLabelRankingColors(); + float[] labelColorPositions = AppearancePreferences.getLabelRankingColorPositions(); + + for (Function func : appearanceModel.getNodeFunctions()) { + Transformer transformer = func.getTransformer(); + if (transformer instanceof RankingNodeSizeTransformer) { + ((RankingNodeSizeTransformer) transformer).setMinSize(nodeMinSize); + ((RankingNodeSizeTransformer) transformer).setMaxSize(nodeMaxSize); + } else if (transformer instanceof RankingLabelSizeTransformer) { + ((RankingLabelSizeTransformer) transformer).setMinSize(labelMinSize); + ((RankingLabelSizeTransformer) transformer).setMaxSize(labelMaxSize); + } else if (transformer instanceof RankingLabelColorTransformer) { + ((RankingLabelColorTransformer) transformer).setColors(labelColors); + ((RankingLabelColorTransformer) transformer).setColorPositions(labelColorPositions); + } else if (transformer instanceof RankingElementColorTransformer) { + ((RankingElementColorTransformer) transformer).setColors(elementColors); + ((RankingElementColorTransformer) transformer).setColorPositions(elementColorPositions); + } } } private void initSelectedTransformerUIs(String elementClass) { - Map newMap = new HashMap(); - for (Function func : elementClass.equals(AppearanceUIController.NODE_ELEMENT) ? appearanceModel.getNodeFunctions() : appearanceModel.getEdgeFunctions()) { + selectedFunction.put(elementClass, new HashMap<>()); + selectedAutoTransformer.put(elementClass, new HashMap<>()); + selectedTransformerUI.put(elementClass, new HashMap<>()); + + for (Function func : elementClass.equals(AppearanceUIController.NODE_ELEMENT) ? + appearanceModel.getNodeFunctions() : appearanceModel.getEdgeFunctions()) { TransformerUI ui = func.getUI(); if (ui != null) { TransformerCategory cat = ui.getCategory(); - if (!newMap.containsKey(cat)) { - newMap.put(cat, ui); - } + selectedCategory.put(elementClass, cat); - if (!selectedCategory.containsKey(elementClass)) { - selectedCategory.put(elementClass, cat); + if (func.isSimple()) { + selectedTransformerUI.get(elementClass).put(cat, ui); + selectedFunction.get(elementClass).put(ui, func); } } } - selectedTransformerUI.put(elementClass, newMap); - selectedFunction.put(elementClass, new HashMap()); - selectedAutoTransformer.put(elementClass, new HashMap()); - } - private void refreshSelectedFunctions(String elementClass) { - Set functionSet = new HashSet(); - for (Function func : elementClass.equals(AppearanceUIController.NODE_ELEMENT) ? appearanceModel.getNodeFunctions() : appearanceModel.getEdgeFunctions()) { - TransformerUI ui = func.getUI(); - if (ui != null) { - functionSet.add(func); - } + //Prefer color to start + if (selectedTransformerUI.get(elementClass).containsKey(DefaultCategory.COLOR)) { + selectedCategory.put(elementClass, DefaultCategory.COLOR); } + } - for (Function func : functionSet) { - Function oldFunc = selectedFunction.get(elementClass).get(func.getUI()); - if (oldFunc == null || !functionSet.contains(oldFunc)) { - selectedFunction.get(elementClass).put(func.getUI(), func); - } - } + public void select() { + tableObserverExecutor.start(); + functionObserverExecutor.start(); + } + + public void unselect() { + tableObserverExecutor.stop(); + functionObserverExecutor.stop(); + } + + public boolean isRankingLocalScale() { + return appearanceModel.isRankingLocalScale(); + } + + public boolean isPartitionLocalScale() { + return appearanceModel.isPartitionLocalScale(); } - public boolean refreshSelectedFunction() { - Function sFunction = getSelectedFunction(); - if (sFunction != null && sFunction.isAttribute()) { - for (Function func : getSelectedElementClass().equals(AppearanceUIController.NODE_ELEMENT) ? appearanceModel.getNodeFunctions() : appearanceModel.getEdgeFunctions()) { - if (func.equals(sFunction)) { - return false; + public boolean isTransformNullValues() { + return appearanceModel.isTransformNullValues(); + } + + public void saveTransformerProperties() { + Function func = getSelectedFunction(); + if (func != null) { + Transformer transformer = func.getTransformer(); + Map props = savedProperties.computeIfAbsent(func, k -> new HashMap<>()); + + for (Map.Entry entry : getProperties(transformer).entrySet()) { + String name = entry.getKey(); + Method getMethod = entry.getValue()[0]; + try { + Object o = getMethod.invoke(transformer); + props.put(name, o); + } catch (Exception ex) { } } } - return true; - } - - public void select() { } - public void unselect() { + public void loadTransformerProperties() { + Function func = getSelectedFunction(); + if (func != null) { + Transformer transformer = func.getTransformer(); + Map props = savedProperties.get(func); + if (props != null) { + for (Map.Entry entry : getProperties(transformer).entrySet()) { + String name = entry.getKey(); + Object o = props.get(name); + if (o != null) { + Method setMethod = entry.getValue()[1]; + try { + setMethod.invoke(transformer, o); + } catch (Exception ex) { + } + } + } + } + } } public String getSelectedElementClass() { return selectedElementClass; } + protected void setSelectedElementClass(String selectedElementClass) { + saveTransformerProperties(); + this.selectedElementClass = selectedElementClass; + loadTransformerProperties(); + } + public TransformerCategory getSelectedCategory() { return selectedCategory.get(selectedElementClass); } + public String[] getElementClasses() { + return ELEMENT_CLASSES; + } + + // Used by serialization only + protected TransformerCategory getSelectedCategory(String elementClass) { + return selectedCategory.get(elementClass); + } + + // Used by serialization only + protected Set getTransformerCategories(String elementClass) { + return selectedTransformerUI.get(elementClass).keySet(); + } + + protected TransformerUI getTransformerUI(String elementClass, TransformerCategory category) { + return selectedTransformerUI.get(elementClass).get(category); + } + + protected Function getFunction(String elementClass, TransformerUI transformerUI) { + return selectedFunction.get(elementClass).get(transformerUI); + } + + // Only by serialization only + protected void setSelected(String elementClass, String categoryId, String ui, String function) { + if (ui != null) { + Optional transformerUIOptional = Lookup.getDefault().lookupAll(TransformerUI.class) + .stream().filter(ui1 -> ui1.getClass().getName().equals(ui)).findFirst(); + + if (transformerUIOptional.isPresent()) { + TransformerUI transformerUI = transformerUIOptional.get(); + selectedTransformerUI.get(elementClass).put(transformerUI.getCategory(), transformerUI); + + if (function != null) { + Arrays.stream(elementClass.equalsIgnoreCase(AppearanceUIController.NODE_ELEMENT) ? + appearanceModel.getNodeFunctions() : + appearanceModel.getEdgeFunctions()).filter(func -> func.getId().equals(function)).findFirst() + .ifPresent(func -> selectedFunction.get(elementClass).put(transformerUI, func)); + } + } + } else if (categoryId != null) { + Lookup.getDefault().lookupAll(TransformerUI.class) + .stream().map(TransformerUI::getCategory).filter(cat -> cat.getId().equals(categoryId)).findFirst() + .ifPresent(transformerCategory -> selectedCategory.put(elementClass, transformerCategory)); + } else { + this.selectedElementClass = elementClass; + } + } + + protected void setSelectedCategory(TransformerCategory category) { + saveTransformerProperties(); + selectedCategory.put(selectedElementClass, category); + loadTransformerProperties(); + } + public TransformerUI getSelectedTransformerUI() { return selectedTransformerUI.get(selectedElementClass).get(getSelectedCategory()); } + protected void setSelectedTransformerUI(TransformerUI transformerUI) { + saveTransformerProperties(); + selectedTransformerUI.get(selectedElementClass).put(getSelectedCategory(), transformerUI); + loadTransformerProperties(); + } + public Function getSelectedFunction() { return selectedFunction.get(selectedElementClass).get(getSelectedTransformerUI()); } - public AutoAppyTransformer getAutoAppyTransformer() { + protected void setSelectedFunction(Function function) { + saveTransformerProperties(); + selectedFunction.get(selectedElementClass).put(getSelectedTransformerUI(), function); + loadTransformerProperties(); + } + + public AutoAppyTransformer getAutoApplyTransformer() { String elm = getSelectedElementClass(); TransformerCategory ct = getSelectedCategory(); if (ct != null) { @@ -169,9 +321,18 @@ public AutoAppyTransformer getAutoAppyTransformer() { return null; } + public Workspace getWorkspace() { + return appearanceModel.getWorkspace(); + } + + public AppearanceModel getAppearanceModel() { + return appearanceModel; + } + public Collection getFunctions() { - List functions = new ArrayList(); - for (Function func : selectedElementClass.equalsIgnoreCase(AppearanceUIController.NODE_ELEMENT) ? appearanceModel.getNodeFunctions() : appearanceModel.getEdgeFunctions()) { + List functions = new ArrayList<>(); + for (Function func : selectedElementClass.equalsIgnoreCase(AppearanceUIController.NODE_ELEMENT) ? + appearanceModel.getNodeFunctions() : appearanceModel.getEdgeFunctions()) { TransformerUI ui = func.getUI(); if (ui != null && ui.getDisplayName().equals(getSelectedTransformerUI().getDisplayName())) { if (ui.getCategory().equals(selectedCategory.get(selectedElementClass))) { @@ -184,7 +345,7 @@ public Collection getFunctions() { protected void setAutoApply(boolean autoApply) { if (!autoApply) { - AutoAppyTransformer aat = getAutoAppyTransformer(); + AutoAppyTransformer aat = getAutoApplyTransformer(); if (aat != null) { aat.stop(); } @@ -192,7 +353,7 @@ protected void setAutoApply(boolean autoApply) { String elmt = getSelectedElementClass(); TransformerCategory cat = getSelectedCategory(); if (autoApply) { - selectedAutoTransformer.get(elmt).put(cat, new AutoAppyTransformer(controller, getSelectedFunction())); + selectedAutoTransformer.get(elmt).put(cat, new AutoAppyTransformer(getSelectedFunction())); } else { selectedAutoTransformer.get(elmt).put(cat, null); } @@ -200,87 +361,59 @@ protected void setAutoApply(boolean autoApply) { protected boolean isAttributeTransformerUI(TransformerUI ui) { Class transformerClass = ui.getTransformerClass(); - if (RankingTransformer.class.isAssignableFrom(transformerClass) || PartitionTransformer.class.isAssignableFrom(transformerClass)) { - return true; - } - return false; - } - - protected void setSelectedElementClass(String selectedElementClass) { - this.selectedElementClass = selectedElementClass; + return RankingTransformer.class.isAssignableFrom(transformerClass) || + PartitionTransformer.class.isAssignableFrom(transformerClass); } - protected void setSelectedCategory(TransformerCategory category) { - selectedCategory.put(selectedElementClass, category); - } + private Map getProperties(Transformer transformer) { + Map propertyMethods = new HashMap<>(); + + for (Method m : transformer.getClass().getMethods()) { + String name = m.getName(); + if (Modifier.isPublic(m.getModifiers())) { + String propertyName = null; + if (name.startsWith("get")) { + propertyName = name.substring(3); + } else if (name.startsWith("set")) { + propertyName = name.substring(3); + } else if (name.startsWith("is")) { + propertyName = name.substring(2); + } + Method[] ms = propertyMethods.get(propertyName); + if (ms == null) { + ms = new Method[2]; + propertyMethods.put(propertyName, ms); + } + if (name.startsWith("set")) { + ms[1] = m; + } else { + ms[0] = m; + } + } + } - protected void setSelectedTransformerUI(TransformerUI transformerUI) { - selectedTransformerUI.get(selectedElementClass).put(getSelectedCategory(), transformerUI); + for (Iterator> itr = propertyMethods.entrySet().iterator(); itr.hasNext(); ) { + Map.Entry entry = itr.next(); + Method get = entry.getValue()[0]; + Method set = entry.getValue()[1]; + if (!(get != null && set != null + && set.getParameterTypes().length == 1 && get.getParameterTypes().length == 0 + && set.getParameterTypes()[0].equals(get.getReturnType()) + && isSupportedPropertyType(get.getReturnType()))) { + itr.remove(); + } + } + return propertyMethods; } - protected void setSelectedFunction(Function function) { - selectedFunction.get(selectedElementClass).put(getSelectedTransformerUI(), function); + private boolean isSupportedPropertyType(Class type) { + if (type.isPrimitive()) { + return true; + } else if (type.isArray()) { + Class cmp = type.getComponentType(); + return cmp.isPrimitive(); + } else { + return type.equals(Color.class); + } } -// protected void setSelectedTransformerUI(TransformerUI transformerUI) { -// selectedTransformerUI.get(selectedElementClass).put(getSelectedCategory(), transformerUI); -// if (transformerUI instanceof SimpleTransformerUI) { -// if (selectedTransformer != null) { -// unsetupTransformer(selectedTransformer); -// } -// selectedTransformer = controller.appearanceController.getTransformer(transformerUI); -// setupTransformer(selectedTransformer); -// } else { -// //TODO -// } -// } -// public void setupTransformer(Transformer transformer) { -// for (Method m : transformer.getClass().getMethods()) { -// if (isSetter(m)) { -// Class paramClass = m.getParameterTypes()[0]; -// if (paramClass.isPrimitive() || Serializable.class.isAssignableFrom(paramClass)) { -// System.out.println("Setting to method " + m.getName()); -// } -// } -// } -// } -// -// public void unsetupTransformer(Transformer transformer) { -// for (Method m : transformer.getClass().getMethods()) { -// if (isGetter(m)) { -// Class returnClass = m.getReturnType(); -// if (returnClass.isPrimitive() || Serializable.class.isAssignableFrom(returnClass)) { -// try { -// Object res = m.invoke(transformer); -// if (res != null) { -// System.out.println("Extracted " + res + " from method " + m.getName()); -// } -// } catch (Exception ex) { -// ex.printStackTrace(); -// } -// } -// } -// } -// } -// -// public static boolean isGetter(Method method) { -// if (Modifier.isPublic(method.getModifiers()) -// && method.getParameterTypes().length == 0) { -// if (method.getName().matches("^get[A-Z].*") -// && !method.getReturnType().equals(void.class)) { -// return true; -// } -// if (method.getName().matches("^is[A-Z].*") -// && method.getReturnType().equals(boolean.class)) { -// return true; -// } -// } -// return false; -// } -// -// public static boolean isSetter(Method method) { -// return Modifier.isPublic(method.getModifiers()) -// && method.getReturnType().equals(void.class) -// && method.getParameterTypes().length == 1 -// && method.getName().matches("^set[A-Z].*"); -// } } diff --git a/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceUIModelEvent.java b/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceUIModelEvent.java index 5430cdd11a..1e29e6bd19 100644 --- a/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceUIModelEvent.java +++ b/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceUIModelEvent.java @@ -39,12 +39,12 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.desktop.appearance; import java.beans.PropertyChangeEvent; /** - * * @author mbastian */ public class AppearanceUIModelEvent extends PropertyChangeEvent { @@ -55,11 +55,14 @@ public class AppearanceUIModelEvent extends PropertyChangeEvent { public static String SELECTED_TRANSFORMER_UI = "selectedTransformerUI"; public static String SELECTED_FUNCTION = "selectedFunction"; public static String ATTRIBUTE_LIST = "attributeList"; + public static String REFRESH_FUNCTION = "refreshFunction"; public static String START_STOP_AUTO_APPLY = "startStopAutoApply"; public static String SET_AUTO_APPLY = "setStopAutoApply"; - + public static String SET_LOCAL_SCALE = "setLocalScale"; + public static String SET_TRANSFORM_NULL_VALUES = "transformNullValues"; + public AppearanceUIModelEvent(Object source, String propertyName, - Object oldValue, Object newValue) { + Object oldValue, Object newValue) { super(source, propertyName, oldValue, newValue); } } diff --git a/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceUIModelListener.java b/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceUIModelListener.java index 724f413e3a..43510f1e0e 100644 --- a/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceUIModelListener.java +++ b/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceUIModelListener.java @@ -39,12 +39,12 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.desktop.appearance; import java.beans.PropertyChangeListener; /** - * * @author mbastian */ public interface AppearanceUIModelListener extends PropertyChangeListener { diff --git a/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceUIModelPersistenceProvider.java b/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceUIModelPersistenceProvider.java new file mode 100644 index 0000000000..114a469881 --- /dev/null +++ b/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AppearanceUIModelPersistenceProvider.java @@ -0,0 +1,179 @@ +package org.gephi.desktop.appearance; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.stream.Stream; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; +import javax.xml.stream.XMLStreamWriter; +import javax.xml.stream.events.XMLEvent; +import org.gephi.appearance.api.AppearanceController; +import org.gephi.appearance.api.AppearanceModel; +import org.gephi.appearance.api.Function; +import org.gephi.appearance.spi.TransformerCategory; +import org.gephi.appearance.spi.TransformerUI; +import org.gephi.project.api.Workspace; +import org.gephi.project.spi.WorkspacePersistenceProvider; +import org.gephi.project.spi.WorkspaceXMLPersistenceProvider; +import org.gephi.utils.Serialization; +import org.openide.util.Lookup; +import org.openide.util.lookup.ServiceProvider; + +@ServiceProvider(service = WorkspacePersistenceProvider.class, position = 450) +public class AppearanceUIModelPersistenceProvider implements WorkspaceXMLPersistenceProvider { + + @Override + public void writeXML(XMLStreamWriter writer, Workspace workspace) { + AppearanceUIModel model = workspace.getLookup().lookup(AppearanceUIModel.class); + if (model != null) { + try { + writeXML(writer, model); + } catch (XMLStreamException ex) { + throw new RuntimeException(ex); + } + } + } + + @Override + public void readXML(XMLStreamReader reader, Workspace workspace) { + AppearanceUIModel model = workspace.getLookup().lookup(AppearanceUIModel.class); + AppearanceModel appearanceModel = workspace.getLookup().lookup(AppearanceModel.class); + if (appearanceModel == null) { + AppearanceController appearanceController = Lookup.getDefault().lookup(AppearanceController.class); + appearanceModel = appearanceController.getModel(workspace); + } + if (model == null) { + model = new AppearanceUIModel(appearanceModel); + workspace.add(model); + } + try { + readXML(reader, model); + } catch (XMLStreamException ex) { + throw new RuntimeException(ex); + } + } + + @Override + public String getIdentifier() { + return "appearanceuimodel"; + } + + protected void writeXML(XMLStreamWriter writer, AppearanceUIModel model) + throws XMLStreamException { + + writeSelected(writer, model); + + for (Map.Entry> savedProperty : model.savedProperties.entrySet()) { + writer.writeStartElement("savedproperty"); + writer.writeAttribute("function", savedProperty.getKey().getId()); + writeSavedProperty(writer, savedProperty.getValue()); + writer.writeEndElement(); + } + } + + private void writeSelected(XMLStreamWriter writer, AppearanceUIModel model) throws XMLStreamException { + // Element class + writer.writeStartElement("selected"); + writer.writeAttribute("elementClass", model.getSelectedElementClass()); + writer.writeEndElement(); + + // Category + for (String elementClass : model.getElementClasses()) { + writer.writeStartElement("selected"); + writer.writeAttribute("elementClass", elementClass); + writer.writeAttribute("category", model.getSelectedCategory(elementClass).getId()); + writer.writeEndElement(); + } + + // Transformer UI and functions + for (String elementClass : model.getElementClasses()) { + for (TransformerCategory transformerCategory : model.getTransformerCategories(elementClass)) { + TransformerUI transformerUI = model.getTransformerUI(elementClass, transformerCategory); + + writer.writeStartElement("selected"); + writer.writeAttribute("elementClass", elementClass); + writer.writeAttribute("ui", transformerUI.getClass().getName()); + + Function function = model.getFunction(elementClass, transformerUI); + if (function != null) { + writer.writeAttribute("function", function.getId()); + } + + writer.writeEndElement(); + } + } + } + + private void writeSavedProperty(XMLStreamWriter writer, Map savedProperty) + throws XMLStreamException { + for (Map.Entry entry : savedProperty.entrySet()) { + String valueTxt = Serialization.getValueAsText(entry.getValue()); + if (valueTxt != null) { + writer.writeStartElement("property"); + writer.writeAttribute("key", entry.getKey()); + writer.writeAttribute("value", Serialization.getValueAsText(entry.getValue())); + writer.writeAttribute("type", entry.getValue().getClass().getName()); + writer.writeEndElement(); + } + } + } + + public void readXML(XMLStreamReader reader, AppearanceUIModel model) throws XMLStreamException { + AppearanceModel appearanceModel = model.appearanceModel; + Function[] functions = Stream.concat(Arrays.stream(appearanceModel.getNodeFunctions()), + Arrays.stream(appearanceModel.getEdgeFunctions())) + .toArray(Function[]::new); + + Function function = null; + Map properties = null; + boolean end = false; + while (reader.hasNext() && !end) { + Integer eventType = reader.next(); + if (eventType.equals(XMLEvent.START_ELEMENT)) { + String name = reader.getLocalName(); + if ("savedproperty".equalsIgnoreCase(name)) { + String functionName = reader.getAttributeValue(null, "function"); + function = Arrays.stream(functions).filter(f -> f.getId().equals(functionName)).findFirst() + .orElse(null); + properties = new HashMap<>(); + } else if ("property".equalsIgnoreCase(name) && function != null) { + readSavedProperty(reader, properties); + } else if ("selected".equalsIgnoreCase(name)) { + readSelected(reader, model); + } + } else if (eventType.equals(XMLStreamReader.END_ELEMENT)) { + if ("savedproperty".equalsIgnoreCase(reader.getLocalName()) && function != null) { + model.savedProperties.put(function, properties); + function = null; + properties = null; + } else if (getIdentifier().equalsIgnoreCase(reader.getLocalName())) { + end = true; + } + } + } + + // Load saved properties + model.loadTransformerProperties(); + } + + private void readSelected(XMLStreamReader reader, AppearanceUIModel model) { + String elementClass = reader.getAttributeValue(null, "elementClass"); + String category = reader.getAttributeValue(null, "category"); + String ui = reader.getAttributeValue(null, "ui"); + String function = reader.getAttributeValue(null, "function"); + + model.setSelected(elementClass, category, ui, function); + } + + private void readSavedProperty(XMLStreamReader reader, Map map) throws XMLStreamException { + String key = reader.getAttributeValue(null, "key"); + String value = reader.getAttributeValue(null, "value"); + String type = reader.getAttributeValue(null, "type"); + Object val = Serialization.readValueFromText(value, type); + if (val != null) { + map.put(key, val); + } + } +} + diff --git a/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AutoAppyTransformer.java b/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AutoAppyTransformer.java index 2fb35cdc03..0673b5729a 100644 --- a/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AutoAppyTransformer.java +++ b/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/AutoAppyTransformer.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2013 Gephi Consortium. */ + package org.gephi.desktop.appearance; import java.util.concurrent.Executors; @@ -46,9 +47,9 @@ Development and Distribution License("CDDL") (collectively, the import java.util.concurrent.ThreadFactory; import java.util.concurrent.TimeUnit; import org.gephi.appearance.api.Function; +import org.openide.util.Lookup; /** - * * @author mbastian */ public class AutoAppyTransformer implements Runnable { @@ -58,19 +59,13 @@ public class AutoAppyTransformer implements Runnable { private final AppearanceUIController controller; private ScheduledExecutorService executor; - public AutoAppyTransformer(AppearanceUIController controller, Function function) { - this.controller = controller; + public AutoAppyTransformer(Function function) { + this.controller = Lookup.getDefault().lookup(AppearanceUIController.class); this.function = function; } public void start() { - executor = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() { - @Override - public Thread newThread(Runnable r) { - Thread t = new Thread(r, "Appearance Auto Transformer"); - return t; - } - }); + executor = Executors.newSingleThreadScheduledExecutor(r -> new Thread(r, "Appearance Auto Transformer")); executor.scheduleWithFixedDelay(this, 0, getDelayInMs(), TimeUnit.MILLISECONDS); } @@ -83,7 +78,7 @@ public void stop() { @Override public void run() { - controller.appearanceController.transform(function); + controller.transform(function); } public boolean isRunning() { diff --git a/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/FunctionObserverExecutor.java b/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/FunctionObserverExecutor.java new file mode 100644 index 0000000000..cdd75de490 --- /dev/null +++ b/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/FunctionObserverExecutor.java @@ -0,0 +1,53 @@ +package org.gephi.desktop.appearance; + +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.gephi.appearance.api.Function; +import org.openide.util.Lookup; + +public class FunctionObserverExecutor implements Runnable { + + private static final long DEFAULT_DELAY = 1250; //ms + private final AppearanceUIModel model; + private ScheduledExecutorService executor; + + public FunctionObserverExecutor(AppearanceUIModel model) { + this.model = model; + } + + public void start() { + executor = Executors.newSingleThreadScheduledExecutor(r -> new Thread(r, "Appearance Function Observer")); + executor.scheduleWithFixedDelay(this, getDelayInMs(), getDelayInMs(), TimeUnit.MILLISECONDS); + } + + public void stop() { + if (executor != null && !executor.isShutdown()) { + executor.shutdown(); + } + executor = null; + } + + @Override + public void run() { + try { + Function selectedFunction = model.getSelectedFunction(); + if (selectedFunction != null && selectedFunction.hasChanged()) { + Lookup.getDefault().lookup(AppearanceUIController.class).refreshFunction(); + } + } catch (Exception e) { + Logger.getLogger(TableObserverExecutor.class.getName()) + .log(Level.SEVERE, "Error while refreshing appearance's function", e); + } + } + + public boolean isRunning() { + return executor != null; + } + + private long getDelayInMs() { + return DEFAULT_DELAY; + } +} diff --git a/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/TableObserverExecutor.java b/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/TableObserverExecutor.java new file mode 100644 index 0000000000..deb9d09325 --- /dev/null +++ b/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/TableObserverExecutor.java @@ -0,0 +1,79 @@ +package org.gephi.desktop.appearance; + +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.TableObserver; +import org.openide.util.Lookup; + +public class TableObserverExecutor implements Runnable { + + private static final long DEFAULT_DELAY = 1000; //ms + private final AppearanceUIModel model; + private ScheduledExecutorService executor; + private TableObserver nodeTableObserver; + private TableObserver edgeTableObserver; + + public TableObserverExecutor(AppearanceUIModel model) { + this.model = model; + } + + public void start() { + GraphModel graphModel = model.appearanceModel.getGraphModel(); + nodeTableObserver = graphModel.getNodeTable().createTableObserver(false); + edgeTableObserver = graphModel.getEdgeTable().createTableObserver(false); + + executor = Executors.newSingleThreadScheduledExecutor(r -> new Thread(r, "Appearance Table Observer")); + executor.scheduleWithFixedDelay(this, 0, getDelayInMs(), TimeUnit.MILLISECONDS); + } + + public void stop() { + if (executor != null && !executor.isShutdown()) { + executor.shutdown(); + } + synchronized (this) { + if (nodeTableObserver != null) { + nodeTableObserver.destroy(); + nodeTableObserver = null; + } + if (edgeTableObserver != null) { + edgeTableObserver.destroy(); + edgeTableObserver = null; + } + } + executor = null; + } + + @Override + public void run() { + synchronized (this) { + try { + String selectedElementClass = model.selectedElementClass; + if (nodeTableObserver != null && selectedElementClass.equals(AppearanceUIController.NODE_ELEMENT)) { + if (nodeTableObserver.hasTableChanged()) { + Lookup.getDefault().lookup(AppearanceUIController.class).refreshColumnsList(); + } + } else if (edgeTableObserver != null && + selectedElementClass.equals(AppearanceUIController.EDGE_ELEMENT)) { + if (edgeTableObserver.hasTableChanged()) { + Lookup.getDefault().lookup(AppearanceUIController.class).refreshColumnsList(); + } + } + } catch (Exception e) { + Logger.getLogger(TableObserverExecutor.class.getName()) + .log(Level.SEVERE, "Error while refreshing appearance's column list", e); + } + } + } + + public boolean isRunning() { + return executor != null; + } + + private long getDelayInMs() { + return DEFAULT_DELAY; + } +} \ No newline at end of file diff --git a/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/options/AppearanceOptionsPanelController.java b/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/options/AppearanceOptionsPanelController.java new file mode 100644 index 0000000000..d6bea5d562 --- /dev/null +++ b/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/options/AppearanceOptionsPanelController.java @@ -0,0 +1,123 @@ +/* + Copyright 2008-2025 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2025 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2025 Gephi Consortium. + */ + +package org.gephi.desktop.appearance.options; + +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; +import javax.swing.JComponent; +import org.netbeans.spi.options.OptionsPanelController; +import org.openide.util.HelpCtx; +import org.openide.util.Lookup; + +@OptionsPanelController.SubRegistration(location = "Gephi", + displayName = "#AdvancedOption_DisplayName_Appearance", + keywords = "#AdvancedOption_Keywords_Appearance", + keywordsCategory = "Gephi/Appearance", + position = 800) +public final class AppearanceOptionsPanelController extends OptionsPanelController { + + private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); + private AppearancePanel panel; + private boolean changed; + + @Override + public void update() { + getPanel().load(); + changed = false; + } + + @Override + public void applyChanges() { + getPanel().store(); + changed = false; + } + + @Override + public void cancel() { + } + + @Override + public boolean isValid() { + return getPanel().valid(); + } + + @Override + public boolean isChanged() { + return changed; + } + + @Override + public HelpCtx getHelpCtx() { + return null; + } + + @Override + public JComponent getComponent(Lookup masterLookup) { + return getPanel(); + } + + @Override + public void addPropertyChangeListener(PropertyChangeListener l) { + pcs.addPropertyChangeListener(l); + } + + @Override + public void removePropertyChangeListener(PropertyChangeListener l) { + pcs.removePropertyChangeListener(l); + } + + private AppearancePanel getPanel() { + if (panel == null) { + panel = new AppearancePanel(this); + } + return panel; + } + + void changed() { + if (!changed) { + changed = true; + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, false, true); + } + pcs.firePropertyChange(OptionsPanelController.PROP_VALID, null, null); + } +} diff --git a/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/options/AppearancePanel.java b/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/options/AppearancePanel.java new file mode 100644 index 0000000000..d0396adb6c --- /dev/null +++ b/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/options/AppearancePanel.java @@ -0,0 +1,462 @@ +/* + Copyright 2008-2025 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2025 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2025 Gephi Consortium. + */ + +package org.gephi.desktop.appearance.options; + +import java.awt.BorderLayout; +import java.awt.geom.Point2D; +import java.beans.PropertyChangeListener; +import javax.swing.GroupLayout; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JSpinner; +import javax.swing.LayoutStyle; +import javax.swing.SpinnerNumberModel; +import javax.swing.event.ChangeListener; +import org.gephi.appearance.api.AppearanceModel; +import org.gephi.appearance.api.Interpolator; +import org.gephi.ui.components.gradientslider.GradientSlider; +import org.gephi.ui.components.gradientslider.MultiThumbSlider; +import org.gephi.ui.components.splineeditor.SplineEditor; +import org.jdesktop.swingx.JXTitledSeparator; +import org.openide.util.NbBundle; +import org.openide.util.NbPreferences; + +final class AppearancePanel extends JPanel { + + private final AppearanceOptionsPanelController controller; + + // Default appearance settings + private JXTitledSeparator defaultSettingsSeparator; + private JCheckBox rankingLocalScaleCheckBox; + private JCheckBox partitionLocalScaleCheckBox; + private JCheckBox transformNullValuesCheckBox; + // Node size + private JXTitledSeparator nodeSizeSeparator; + private JLabel nodeMinSizeLabel; + private JSpinner nodeMinSizeSpinner; + private JLabel nodeMaxSizeLabel; + private JSpinner nodeMaxSizeSpinner; + // Label size + private JXTitledSeparator labelSizeSeparator; + private JLabel labelMinSizeLabel; + private JSpinner labelMinSizeSpinner; + private JLabel labelMaxSizeLabel; + private JSpinner labelMaxSizeSpinner; + // Element (node/edge) color + private JXTitledSeparator elementColorSeparator; + private JPanel elementColorGradientPanel; + private GradientSlider elementColorGradientSlider; + // Label color + private JXTitledSeparator labelColorSeparator; + private JPanel labelColorGradientPanel; + private GradientSlider labelColorGradientSlider; + // Interpolation + private JXTitledSeparator interpolationSeparator; + private JLabel interpolationStateLabel; + private JButton configureSplineButton; + private JButton useLinearButton; + private SplineEditor splineEditor; + private Interpolator currentInterpolator = Interpolator.LINEAR; + // Reset + private JButton resetButton; + + AppearancePanel(AppearanceOptionsPanelController controller) { + this.controller = controller; + initComponents(); + addChangeListeners(); + } + + private void initComponents() { + // --- Default appearance settings --- + defaultSettingsSeparator = new JXTitledSeparator(); + defaultSettingsSeparator.setTitle( + NbBundle.getMessage(AppearancePanel.class, "AppearancePanel.defaultSettingsTitle.title")); + defaultSettingsSeparator.setFont(defaultSettingsSeparator.getFont().deriveFont(java.awt.Font.BOLD)); + + rankingLocalScaleCheckBox = new JCheckBox( + NbBundle.getMessage(AppearancePanel.class, "AppearancePanel.rankingLocalScale.text")); + partitionLocalScaleCheckBox = new JCheckBox( + NbBundle.getMessage(AppearancePanel.class, "AppearancePanel.partitionLocalScale.text")); + transformNullValuesCheckBox = new JCheckBox( + NbBundle.getMessage(AppearancePanel.class, "AppearancePanel.transformNullValues.text")); + + // --- Node size --- + nodeSizeSeparator = new JXTitledSeparator(); + nodeSizeSeparator.setTitle( + NbBundle.getMessage(AppearancePanel.class, "AppearancePanel.nodeSizeTitle.title")); + nodeSizeSeparator.setFont(nodeSizeSeparator.getFont().deriveFont(java.awt.Font.BOLD)); + + nodeMinSizeLabel = new JLabel( + NbBundle.getMessage(AppearancePanel.class, "AppearancePanel.minSize.text")); + nodeMaxSizeLabel = new JLabel( + NbBundle.getMessage(AppearancePanel.class, "AppearancePanel.maxSize.text")); + nodeMinSizeSpinner = new JSpinner(new SpinnerNumberModel( + AppearancePreferences.DEFAULT_NODE_RANKING_SIZE_MIN, 0.01f, null, 0.5f)); + nodeMaxSizeSpinner = new JSpinner(new SpinnerNumberModel( + AppearancePreferences.DEFAULT_NODE_RANKING_SIZE_MAX, 0.5f, null, 0.5f)); + + // --- Label size --- + labelSizeSeparator = new JXTitledSeparator(); + labelSizeSeparator.setTitle( + NbBundle.getMessage(AppearancePanel.class, "AppearancePanel.labelSizeTitle.title")); + labelSizeSeparator.setFont(labelSizeSeparator.getFont().deriveFont(java.awt.Font.BOLD)); + + labelMinSizeLabel = new JLabel( + NbBundle.getMessage(AppearancePanel.class, "AppearancePanel.minSize.text")); + labelMaxSizeLabel = new JLabel( + NbBundle.getMessage(AppearancePanel.class, "AppearancePanel.maxSize.text")); + labelMinSizeSpinner = new JSpinner(new SpinnerNumberModel( + AppearancePreferences.DEFAULT_LABEL_RANKING_SIZE_MIN, 0.01f, null, 0.5f)); + labelMaxSizeSpinner = new JSpinner(new SpinnerNumberModel( + AppearancePreferences.DEFAULT_LABEL_RANKING_SIZE_MAX, 0.5f, null, 0.5f)); + + // --- Element (node/edge) color --- + elementColorSeparator = new JXTitledSeparator(); + elementColorSeparator.setTitle( + NbBundle.getMessage(AppearancePanel.class, "AppearancePanel.elementColorTitle.title")); + elementColorSeparator.setFont(elementColorSeparator.getFont().deriveFont(java.awt.Font.BOLD)); + + elementColorGradientPanel = new JPanel(new BorderLayout()); + elementColorGradientPanel.setOpaque(false); + elementColorGradientSlider = new GradientSlider(GradientSlider.HORIZONTAL); + elementColorGradientPanel.add(elementColorGradientSlider, BorderLayout.CENTER); + + // --- Label color --- + labelColorSeparator = new JXTitledSeparator(); + labelColorSeparator.setTitle( + NbBundle.getMessage(AppearancePanel.class, "AppearancePanel.labelColorTitle.title")); + labelColorSeparator.setFont(labelColorSeparator.getFont().deriveFont(java.awt.Font.BOLD)); + + labelColorGradientPanel = new JPanel(new BorderLayout()); + labelColorGradientPanel.setOpaque(false); + labelColorGradientSlider = new GradientSlider(GradientSlider.HORIZONTAL); + labelColorGradientPanel.add(labelColorGradientSlider, BorderLayout.CENTER); + + // --- Interpolation --- + interpolationSeparator = new JXTitledSeparator(); + interpolationSeparator.setTitle( + NbBundle.getMessage(AppearancePanel.class, "AppearancePanel.interpolationTitle.title")); + interpolationSeparator.setFont(interpolationSeparator.getFont().deriveFont(java.awt.Font.BOLD)); + + interpolationStateLabel = new JLabel(); + + configureSplineButton = new JButton( + NbBundle.getMessage(AppearancePanel.class, "AppearancePanel.configureSplineButton.text")); + configureSplineButton.addActionListener(e -> openSplineEditor()); + + useLinearButton = new JButton( + NbBundle.getMessage(AppearancePanel.class, "AppearancePanel.useLinearButton.text")); + useLinearButton.addActionListener(e -> { + currentInterpolator = Interpolator.LINEAR; + updateInterpolationUI(); + controller.changed(); + }); + + // --- Reset button --- + resetButton = new JButton( + NbBundle.getMessage(AppearancePanel.class, "AppearancePanel.resetButton.text")); + resetButton.addActionListener(e -> resetDefaults()); + + GroupLayout layout = new GroupLayout(this); + setLayout(layout); + layout.setAutoCreateGaps(true); + layout.setAutoCreateContainerGaps(true); + + layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) + // Default appearance settings + .addComponent(defaultSettingsSeparator) + .addGroup(layout.createSequentialGroup() + .addGap(10) + .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addComponent(rankingLocalScaleCheckBox) + .addComponent(partitionLocalScaleCheckBox) + .addComponent(transformNullValuesCheckBox))) + // Node size + .addComponent(nodeSizeSeparator) + .addGroup(layout.createSequentialGroup() + .addGap(10) + .addComponent(nodeMinSizeLabel) + .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) + .addComponent(nodeMinSizeSpinner, GroupLayout.PREFERRED_SIZE, 70, + GroupLayout.PREFERRED_SIZE) + .addGap(18) + .addComponent(nodeMaxSizeLabel) + .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) + .addComponent(nodeMaxSizeSpinner, GroupLayout.PREFERRED_SIZE, 70, + GroupLayout.PREFERRED_SIZE)) + // Label size + .addComponent(labelSizeSeparator) + .addGroup(layout.createSequentialGroup() + .addGap(10) + .addComponent(labelMinSizeLabel) + .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) + .addComponent(labelMinSizeSpinner, GroupLayout.PREFERRED_SIZE, 70, + GroupLayout.PREFERRED_SIZE) + .addGap(18) + .addComponent(labelMaxSizeLabel) + .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) + .addComponent(labelMaxSizeSpinner, GroupLayout.PREFERRED_SIZE, 70, + GroupLayout.PREFERRED_SIZE)) + // Element color + .addComponent(elementColorSeparator) + .addGroup(layout.createSequentialGroup() + .addGap(10) + .addComponent(elementColorGradientPanel, 0, GroupLayout.DEFAULT_SIZE, + Short.MAX_VALUE) + .addGap(10)) + // Label color + .addComponent(labelColorSeparator) + .addGroup(layout.createSequentialGroup() + .addGap(10) + .addComponent(labelColorGradientPanel, 0, GroupLayout.DEFAULT_SIZE, + Short.MAX_VALUE) + .addGap(10)) + // Interpolation + .addComponent(interpolationSeparator) + .addGroup(layout.createSequentialGroup() + .addGap(10) + .addComponent(interpolationStateLabel, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(configureSplineButton) + .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) + .addComponent(useLinearButton)) + // Reset + .addComponent(resetButton) + ); + + layout.setVerticalGroup(layout.createSequentialGroup() + // Default appearance settings + .addComponent(defaultSettingsSeparator, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, + GroupLayout.PREFERRED_SIZE) + .addComponent(rankingLocalScaleCheckBox) + .addComponent(partitionLocalScaleCheckBox) + .addComponent(transformNullValuesCheckBox) + // Node size + .addGap(10) + .addComponent(nodeSizeSeparator, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, + GroupLayout.PREFERRED_SIZE) + .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE) + .addComponent(nodeMinSizeLabel) + .addComponent(nodeMinSizeSpinner, GroupLayout.PREFERRED_SIZE, + GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addComponent(nodeMaxSizeLabel) + .addComponent(nodeMaxSizeSpinner, GroupLayout.PREFERRED_SIZE, + GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) + // Label size + .addGap(10) + .addComponent(labelSizeSeparator, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, + GroupLayout.PREFERRED_SIZE) + .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE) + .addComponent(labelMinSizeLabel) + .addComponent(labelMinSizeSpinner, GroupLayout.PREFERRED_SIZE, + GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addComponent(labelMaxSizeLabel) + .addComponent(labelMaxSizeSpinner, GroupLayout.PREFERRED_SIZE, + GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE)) + // Element color + .addGap(10) + .addComponent(elementColorSeparator, GroupLayout.PREFERRED_SIZE, + GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addComponent(elementColorGradientPanel, 22, 22, 22) + // Label color + .addGap(10) + .addComponent(labelColorSeparator, GroupLayout.PREFERRED_SIZE, + GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addComponent(labelColorGradientPanel, 22, 22, 22) + // Interpolation + .addGap(10) + .addComponent(interpolationSeparator, GroupLayout.PREFERRED_SIZE, + GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE) + .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE) + .addComponent(interpolationStateLabel) + .addComponent(configureSplineButton) + .addComponent(useLinearButton)) + // Reset + .addGap(18) + .addComponent(resetButton) + ); + } + + private void addChangeListeners() { + rankingLocalScaleCheckBox.addActionListener(e -> controller.changed()); + partitionLocalScaleCheckBox.addActionListener(e -> controller.changed()); + transformNullValuesCheckBox.addActionListener(e -> controller.changed()); + + ChangeListener sizeChangeListener = e -> controller.changed(); + nodeMinSizeSpinner.addChangeListener(sizeChangeListener); + nodeMaxSizeSpinner.addChangeListener(sizeChangeListener); + labelMinSizeSpinner.addChangeListener(sizeChangeListener); + labelMaxSizeSpinner.addChangeListener(sizeChangeListener); + + PropertyChangeListener gradientChangeListener = evt -> { + String prop = evt.getPropertyName(); + if (MultiThumbSlider.VALUES_PROPERTY.equals(prop) || + MultiThumbSlider.ADJUST_PROPERTY.equals(prop)) { + controller.changed(); + } + }; + elementColorGradientSlider.addPropertyChangeListener(gradientChangeListener); + labelColorGradientSlider.addPropertyChangeListener(gradientChangeListener); + } + + private void openSplineEditor() { + if (splineEditor == null) { + splineEditor = new SplineEditor( + NbBundle.getMessage(AppearancePanel.class, "AppearancePanel.splineEditor.title")); + } + if (currentInterpolator instanceof Interpolator.BezierInterpolator) { + Interpolator.BezierInterpolator bi = (Interpolator.BezierInterpolator) currentInterpolator; + splineEditor.setControl1(bi.getControl1()); + splineEditor.setControl2(bi.getControl2()); + } else { + splineEditor.setControl1(new Point2D.Float(0, 0)); + splineEditor.setControl2(new Point2D.Float(1, 1)); + } + splineEditor.setVisible(true); + currentInterpolator = new Interpolator.BezierInterpolator( + (float) splineEditor.getControl1().getX(), (float) splineEditor.getControl1().getY(), + (float) splineEditor.getControl2().getX(), (float) splineEditor.getControl2().getY()); + updateInterpolationUI(); + controller.changed(); + } + + private void updateInterpolationUI() { + boolean isLinear = !(currentInterpolator instanceof Interpolator.BezierInterpolator); + if (isLinear) { + interpolationStateLabel.setText( + NbBundle.getMessage(AppearancePanel.class, "AppearancePanel.interpolation.linear")); + } else { + Interpolator.BezierInterpolator bi = (Interpolator.BezierInterpolator) currentInterpolator; + Point2D c1 = bi.getControl1(); + Point2D c2 = bi.getControl2(); + interpolationStateLabel.setText( + NbBundle.getMessage(AppearancePanel.class, "AppearancePanel.interpolation.spline", + String.format("(%.2f,%.2f)", c1.getX(), c1.getY()), + String.format("(%.2f,%.2f)", c2.getX(), c2.getY()))); + } + useLinearButton.setEnabled(!isLinear); + } + + private void resetDefaults() { + NbPreferences.forModule(AppearanceModel.class).remove(AppearancePreferences.RANKING_LOCAL_SCALE); + NbPreferences.forModule(AppearanceModel.class).remove(AppearancePreferences.PARTITION_LOCAL_SCALE); + NbPreferences.forModule(AppearanceModel.class).remove(AppearancePreferences.TRANSFORM_NULL_VALUES); + NbPreferences.forModule(AppearancePreferences.class).remove(AppearancePreferences.NODE_RANKING_SIZE_MIN); + NbPreferences.forModule(AppearancePreferences.class).remove(AppearancePreferences.NODE_RANKING_SIZE_MAX); + NbPreferences.forModule(AppearancePreferences.class).remove(AppearancePreferences.LABEL_RANKING_SIZE_MIN); + NbPreferences.forModule(AppearancePreferences.class).remove(AppearancePreferences.LABEL_RANKING_SIZE_MAX); + NbPreferences.forModule(AppearancePreferences.class).remove(AppearancePreferences.ELEMENT_RANKING_COLORS); + NbPreferences.forModule(AppearancePreferences.class) + .remove(AppearancePreferences.ELEMENT_RANKING_COLOR_POSITIONS); + NbPreferences.forModule(AppearancePreferences.class).remove(AppearancePreferences.LABEL_RANKING_COLORS); + NbPreferences.forModule(AppearancePreferences.class) + .remove(AppearancePreferences.LABEL_RANKING_COLOR_POSITIONS); + NbPreferences.forModule(Interpolator.class).remove(AppearancePreferences.DEFAULT_INTERPOLATOR); + load(); + } + + void load() { + rankingLocalScaleCheckBox.setSelected(AppearancePreferences.isRankingLocalScale()); + partitionLocalScaleCheckBox.setSelected(AppearancePreferences.isPartitionLocalScale()); + transformNullValuesCheckBox.setSelected(AppearancePreferences.isTransformNullValues()); + + nodeMinSizeSpinner.setValue(AppearancePreferences.getNodeRankingSizeMin()); + nodeMaxSizeSpinner.setValue(AppearancePreferences.getNodeRankingSizeMax()); + labelMinSizeSpinner.setValue(AppearancePreferences.getLabelRankingSizeMin()); + labelMaxSizeSpinner.setValue(AppearancePreferences.getLabelRankingSizeMax()); + + elementColorGradientSlider.setValues( + AppearancePreferences.getElementRankingColorPositions(), + AppearancePreferences.getElementRankingColors()); + labelColorGradientSlider.setValues( + AppearancePreferences.getLabelRankingColorPositions(), + AppearancePreferences.getLabelRankingColors()); + + currentInterpolator = AppearancePreferences.getDefaultInterpolator(); + updateInterpolationUI(); + } + + void store() { + NbPreferences.forModule(AppearanceModel.class) + .putBoolean(AppearancePreferences.RANKING_LOCAL_SCALE, rankingLocalScaleCheckBox.isSelected()); + NbPreferences.forModule(AppearanceModel.class) + .putBoolean(AppearancePreferences.PARTITION_LOCAL_SCALE, partitionLocalScaleCheckBox.isSelected()); + NbPreferences.forModule(AppearanceModel.class) + .putBoolean(AppearancePreferences.TRANSFORM_NULL_VALUES, transformNullValuesCheckBox.isSelected()); + + NbPreferences.forModule(AppearancePreferences.class) + .putFloat(AppearancePreferences.NODE_RANKING_SIZE_MIN, + (Float) nodeMinSizeSpinner.getValue()); + NbPreferences.forModule(AppearancePreferences.class) + .putFloat(AppearancePreferences.NODE_RANKING_SIZE_MAX, + (Float) nodeMaxSizeSpinner.getValue()); + NbPreferences.forModule(AppearancePreferences.class) + .putFloat(AppearancePreferences.LABEL_RANKING_SIZE_MIN, + (Float) labelMinSizeSpinner.getValue()); + NbPreferences.forModule(AppearancePreferences.class) + .putFloat(AppearancePreferences.LABEL_RANKING_SIZE_MAX, + (Float) labelMaxSizeSpinner.getValue()); + + NbPreferences.forModule(AppearancePreferences.class) + .put(AppearancePreferences.ELEMENT_RANKING_COLORS, + AppearancePreferences.encodeColors(elementColorGradientSlider.getColors())); + NbPreferences.forModule(AppearancePreferences.class) + .put(AppearancePreferences.ELEMENT_RANKING_COLOR_POSITIONS, + AppearancePreferences.encodePositions(elementColorGradientSlider.getThumbPositions())); + NbPreferences.forModule(AppearancePreferences.class) + .put(AppearancePreferences.LABEL_RANKING_COLORS, + AppearancePreferences.encodeColors(labelColorGradientSlider.getColors())); + NbPreferences.forModule(AppearancePreferences.class) + .put(AppearancePreferences.LABEL_RANKING_COLOR_POSITIONS, + AppearancePreferences.encodePositions(labelColorGradientSlider.getThumbPositions())); + + NbPreferences.forModule(Interpolator.class) + .put(AppearancePreferences.DEFAULT_INTERPOLATOR, currentInterpolator.toString()); + } + + boolean valid() { + return true; + } +} diff --git a/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/options/AppearancePreferences.java b/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/options/AppearancePreferences.java new file mode 100644 index 0000000000..521ff6e6df --- /dev/null +++ b/modules/DesktopAppearance/src/main/java/org/gephi/desktop/appearance/options/AppearancePreferences.java @@ -0,0 +1,216 @@ +/* + Copyright 2008-2025 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2025 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2025 Gephi Consortium. + */ + +package org.gephi.desktop.appearance.options; + +import java.awt.Color; +import java.util.Arrays; +import java.util.stream.Collectors; +import org.gephi.appearance.api.AppearanceModel; +import org.gephi.appearance.api.Interpolator; +import org.openide.util.NbPreferences; + +/** + * Appearance module preferences, storing default values for transformers. + */ +public final class AppearancePreferences { + + // Size keys + public static final String NODE_RANKING_SIZE_MIN = "Appearance.nodeRankingSizeMin"; + public static final String NODE_RANKING_SIZE_MAX = "Appearance.nodeRankingSizeMax"; + public static final String LABEL_RANKING_SIZE_MIN = "Appearance.labelRankingSizeMin"; + public static final String LABEL_RANKING_SIZE_MAX = "Appearance.labelRankingSizeMax"; + + // Color keys β€” values encoded as comma-separated hex RGB / float strings + public static final String ELEMENT_RANKING_COLORS = "Appearance.elementRankingColors"; + public static final String ELEMENT_RANKING_COLOR_POSITIONS = "Appearance.elementRankingColorPositions"; + public static final String LABEL_RANKING_COLORS = "Appearance.labelRankingColors"; + public static final String LABEL_RANKING_COLOR_POSITIONS = "Appearance.labelRankingColorPositions"; + + // Size defaults + public static final float DEFAULT_NODE_RANKING_SIZE_MIN = 1f; + public static final float DEFAULT_NODE_RANKING_SIZE_MAX = 4f; + public static final float DEFAULT_LABEL_RANKING_SIZE_MIN = 1f; + public static final float DEFAULT_LABEL_RANKING_SIZE_MAX = 4f; + + // Default appearance settings keys + public static final String RANKING_LOCAL_SCALE = "Appearance.rankingLocalScale"; + public static final String PARTITION_LOCAL_SCALE = "Appearance.partitionLocalScale"; + public static final String TRANSFORM_NULL_VALUES = "Appearance.transformNullValues"; + + // Default appearance settings defaults + public static final boolean DEFAULT_RANKING_LOCAL_SCALE = false; + public static final boolean DEFAULT_PARTITION_LOCAL_SCALE = false; + public static final boolean DEFAULT_TRANSFORM_NULL_VALUES = false; + + // Interpolator key + public static final String DEFAULT_INTERPOLATOR = "Appearance.defaultInterpolator"; + + // Color defaults β€” match RankingElementColorTransformer's hardcoded initial gradient + public static final Color[] DEFAULT_ELEMENT_RANKING_COLORS = + {new Color(0xEDF8FB), new Color(0x66C2A4), new Color(0x006D2C)}; + public static final float[] DEFAULT_COLOR_POSITIONS = {0f, 0.5f, 1f}; + + private AppearancePreferences() { + } + + // ---- Default appearance settings accessors ---- + + public static boolean isRankingLocalScale() { + return NbPreferences.forModule(AppearanceModel.class) + .getBoolean(RANKING_LOCAL_SCALE, DEFAULT_RANKING_LOCAL_SCALE); + } + + public static boolean isPartitionLocalScale() { + return NbPreferences.forModule(AppearanceModel.class) + .getBoolean(PARTITION_LOCAL_SCALE, DEFAULT_PARTITION_LOCAL_SCALE); + } + + public static boolean isTransformNullValues() { + return NbPreferences.forModule(AppearanceModel.class) + .getBoolean(TRANSFORM_NULL_VALUES, DEFAULT_TRANSFORM_NULL_VALUES); + } + + // ---- Size accessors ---- + + public static float getNodeRankingSizeMin() { + return NbPreferences.forModule(AppearancePreferences.class) + .getFloat(NODE_RANKING_SIZE_MIN, DEFAULT_NODE_RANKING_SIZE_MIN); + } + + public static float getNodeRankingSizeMax() { + return NbPreferences.forModule(AppearancePreferences.class) + .getFloat(NODE_RANKING_SIZE_MAX, DEFAULT_NODE_RANKING_SIZE_MAX); + } + + public static float getLabelRankingSizeMin() { + return NbPreferences.forModule(AppearancePreferences.class) + .getFloat(LABEL_RANKING_SIZE_MIN, DEFAULT_LABEL_RANKING_SIZE_MIN); + } + + public static float getLabelRankingSizeMax() { + return NbPreferences.forModule(AppearancePreferences.class) + .getFloat(LABEL_RANKING_SIZE_MAX, DEFAULT_LABEL_RANKING_SIZE_MAX); + } + + // ---- Color accessors ---- + + public static Color[] getElementRankingColors() { + String s = NbPreferences.forModule(AppearancePreferences.class).get(ELEMENT_RANKING_COLORS, null); + return decodeColors(s, DEFAULT_ELEMENT_RANKING_COLORS); + } + + public static float[] getElementRankingColorPositions() { + String s = + NbPreferences.forModule(AppearancePreferences.class).get(ELEMENT_RANKING_COLOR_POSITIONS, null); + return decodePositions(s, DEFAULT_COLOR_POSITIONS); + } + + public static Color[] getLabelRankingColors() { + String s = NbPreferences.forModule(AppearancePreferences.class).get(LABEL_RANKING_COLORS, null); + return decodeColors(s, DEFAULT_ELEMENT_RANKING_COLORS); + } + + public static float[] getLabelRankingColorPositions() { + String s = + NbPreferences.forModule(AppearancePreferences.class).get(LABEL_RANKING_COLOR_POSITIONS, null); + return decodePositions(s, DEFAULT_COLOR_POSITIONS); + } + + // ---- Interpolator accessors ---- + + public static Interpolator getDefaultInterpolator() { + String s = NbPreferences.forModule(Interpolator.class).get(DEFAULT_INTERPOLATOR, null); + return Interpolator.fromString(s); + } + + // ---- Encoding helpers ---- + + public static String encodeColors(Color[] colors) { + return Arrays.stream(colors) + .map(c -> String.format("#%06X", c.getRGB() & 0xFFFFFF)) + .collect(Collectors.joining(",")); + } + + public static String encodePositions(float[] positions) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < positions.length; i++) { + if (i > 0) { + sb.append(','); + } + sb.append(positions[i]); + } + return sb.toString(); + } + + private static Color[] decodeColors(String s, Color[] defaultValue) { + if (s == null || s.isEmpty()) { + return defaultValue; + } + try { + String[] parts = s.split(","); + Color[] colors = new Color[parts.length]; + for (int i = 0; i < parts.length; i++) { + colors[i] = Color.decode(parts[i].trim()); + } + return colors; + } catch (Exception e) { + return defaultValue; + } + } + + private static float[] decodePositions(String s, float[] defaultValue) { + if (s == null || s.isEmpty()) { + return defaultValue; + } + try { + String[] parts = s.split(","); + float[] positions = new float[parts.length]; + for (int i = 0; i < parts.length; i++) { + positions[i] = Float.parseFloat(parts[i].trim()); + } + return positions; + } catch (Exception e) { + return defaultValue; + } + } +} diff --git a/modules/DesktopAppearance/src/main/nbm/manifest.mf b/modules/DesktopAppearance/src/main/nbm/manifest.mf index de061425c7..22f9ed6265 100644 --- a/modules/DesktopAppearance/src/main/nbm/manifest.mf +++ b/modules/DesktopAppearance/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/desktop/appearance/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi UI +OpenIDE-Module-Name: Desktop Appearance diff --git a/modules/DesktopAppearance/src/main/nbm/module.xml b/modules/DesktopAppearance/src/main/nbm/module.xml deleted file mode 100644 index 9b58994a61..0000000000 --- a/modules/DesktopAppearance/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle.properties index b7413d5e82..6a19a17c5a 100644 --- a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle.properties +++ b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle.properties @@ -1,36 +1,24 @@ +OpenIDE-Module-Short-Description=Integrated ranking UI Actions/Window/org-gephi-desktop-appearance-AppearanceAction.instance=Appearance CTL_AppearanceAction=Appearance CTL_AppearanceTopComponent=Appearance !HINT_AppearanceTopComponent= -OpenIDE-Module-Display-Category=Gephi UI -OpenIDE-Module-Name=Desktop Appearance -OpenIDE-Module-Short-Description=Integrated ranking UI AppearanceTopComponent.choose.text=---Choose an attribute -PartitionChooser.applyButton.text=Apply - AppearanceToolbar.nodes.label = Nodes AppearanceToolbar.edges.label = Edges -PartitionChooser.groupLink.text=Group -PartitionChooser.group.label=Group -PartitionChooser.ungroup.label=Ungroup -PartitionChooser.groupLink.toolTipText=Group the partition, one group per part -PartitionChooser.pieLink.text=Show Pie -PartitionChooser.showpie.label=Show Pie -PartitionChooser.hidepie.label=Hide Pie -PartitionChooser.refreshBusyLabel.text= -PartitionChooser.refreshButton.text= -PartitionChooser.refreshButton.toolTipText=Refresh AppearanceTopComponent.applyButton.text=Apply AppearanceTopComponent.enableAutoButton.toolTipText=Enable auto transformation - applied continuously AppearanceTopComponent.splineButton.toolTipText=Configure rank interpolation AppearanceTopComponent.splineButton.text=Spline... AppearanceTopComponent.splineEditor.title=Interpolate AppearanceTopComponent.applyButton.toolTipText=Apply the current transformation to the graph -AppearanceTopComponent.localScaleButton.toolTipText=\ Use local scale. The bounds are calculated only on the visible graph instead of the complete graph. +AppearanceTopComponent.localScaleButton.toolTipText=Use local scale. The bounds are calculated only on the visible graph instead of the complete graph. +AppearanceTopComponent.partitionLocalScaleButton.toolTipText=Use visible graph instead of complete graph for partition calculations AppearanceTopComponent.stopAutoApplyButton.toolTipText=Stop auto apply AppearanceTopComponent.stopAutoApplyButton.text=Stop AppearanceTopComponent.autoApplyButton.toolTipText=Apply continuously even when the values changes AppearanceTopComponent.autoApplyButton.text=Auto Apply +AppearanceTopComponent.transformNullValues.toolTipText= Also transform missing values diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_ar.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_ca.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_ca.properties new file mode 100644 index 0000000000..130a0ab8bf --- /dev/null +++ b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_ca.properties @@ -0,0 +1,20 @@ +OpenIDE-Module-Short-Description=Integrated ranking UI +Actions/Window/org-gephi-desktop-appearance-AppearanceAction.instance=Aparenηa +CTL_AppearanceAction=Aparenηa +CTL_AppearanceTopComponent=Aparenηa +!HINT_AppearanceTopComponent= + +AppearanceTopComponent.choose.text=---Tria un atribut +AppearanceToolbar.nodes.label=Nodes +AppearanceToolbar.edges.label=Arestes +AppearanceTopComponent.applyButton.text=Aplica +AppearanceTopComponent.enableAutoButton.toolTipText=Enable auto transformation - applied continuously +AppearanceTopComponent.splineButton.toolTipText=Configure rank interpolation +AppearanceTopComponent.splineButton.text=Spline... +AppearanceTopComponent.splineEditor.title=Interpolate +AppearanceTopComponent.applyButton.toolTipText=Apply the current transformation to the graph +AppearanceTopComponent.localScaleButton.toolTipText=Use local scale. The bounds are calculated only on the visible graph instead of the complete graph. +AppearanceTopComponent.stopAutoApplyButton.toolTipText=Stop auto apply +AppearanceTopComponent.stopAutoApplyButton.text=Atura +AppearanceTopComponent.autoApplyButton.toolTipText=Apply continuously even when the values changes +AppearanceTopComponent.autoApplyButton.text=Aplica automΰticament diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_cs.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_cs.properties index b64af98291..3c793dae04 100644 --- a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_cs.properties +++ b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_cs.properties @@ -1,10 +1,23 @@ - -AppearanceTopComponent.applyButton.text=Pou\u017e\u00edt -AppearanceTopComponent.enableAutoButton.toolTipText=Povolit auto transformaci - pou\u017eiv\u00e1na nep\u0159etr\u017eit\u011b -AppearanceTopComponent.splineButton.toolTipText=Nastavit interpolaci hodnocen\u00ed -AppearanceTopComponent.splineButton.text=K\u0159ivka... -AppearanceTopComponent.applyButton.toolTipText=Pou\u017e\u00edt sou\u010dasnou transformaci na graf -AppearanceTopComponent.stopAutoApplyButton.toolTipText=Pou\u017e\u00edvat nep\u0159etr\u017eit\u011b, i kdy\u017e se hodnoty zm\u011bn\u00ed -AppearanceTopComponent.stopAutoApplyButton.text=Automaticky pou\u017e\u00edt -AppearanceTopComponent.autoApplyButton.toolTipText=Pou\u017e\u00edvat nep\u0159etr\u017eit\u011b, i kdy\u017e se hodnoty zm\u011bn\u00ed -AppearanceTopComponent.autoApplyButton.text=Automaticky pou\u017e\u00edt +OpenIDE-Module-Short-Description=Integrovanι rozhranν hodnocenν +Actions/Window/org-gephi-desktop-appearance-AppearanceAction.instance=Vzhled +CTL_AppearanceAction=Vzhled +CTL_AppearanceTopComponent=Vzhled +!HINT_AppearanceTopComponent= + +AppearanceTopComponent.choose.text=---Zvolte vlastnost + + +AppearanceToolbar.nodes.label = Uzle +AppearanceToolbar.edges.label = Hrany + +AppearanceTopComponent.applyButton.text=Pou\u017eνt +AppearanceTopComponent.enableAutoButton.toolTipText=Povolit auto transformaci - pou\u017eivαna nep\u0159etr\u017eit\u011b +AppearanceTopComponent.splineButton.toolTipText=Nastavit interpolaci hodnocenν +AppearanceTopComponent.splineButton.text=K\u0159ivka... +AppearanceTopComponent.splineEditor.title=Interpolovat +AppearanceTopComponent.applyButton.toolTipText=Pou\u017eνt sou\u010dasnou transformaci na graf +AppearanceTopComponent.localScaleButton.toolTipText= Pou\u017eνt mνstnν m\u011b\u0159νtko. Hranice budou vypo\u010dνtαny pouze ve viditelnιm grafu mνsto ϊplnιho. +AppearanceTopComponent.stopAutoApplyButton.toolTipText=Pou\u017eνvat nep\u0159etr\u017eit\u011b, i kdy\u017e se hodnoty zm\u011bnν +AppearanceTopComponent.stopAutoApplyButton.text=Automaticky pou\u017eνt +AppearanceTopComponent.autoApplyButton.toolTipText=Pou\u017eνvat nep\u0159etr\u017eit\u011b, i kdy\u017e se hodnoty zm\u011bnν +AppearanceTopComponent.autoApplyButton.text=Automaticky pou\u017eνt diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_de.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_de.properties new file mode 100644 index 0000000000..0f2d11dc9a --- /dev/null +++ b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_de.properties @@ -0,0 +1,22 @@ +OpenIDE-Module-Short-Description=Ausgestaltung +Actions/Window/org-gephi-desktop-appearance-AppearanceAction.instance=Ausgestaltung +CTL_AppearanceAction=Ausgestaltung +CTL_AppearanceTopComponent=Ausgestaltung +!HINT_AppearanceTopComponent= + +AppearanceTopComponent.choose.text=---Wδhlen Sie ein Attribut +AppearanceToolbar.nodes.label=Knoten +AppearanceToolbar.edges.label=Kanten +AppearanceTopComponent.applyButton.text=Anwenden +AppearanceTopComponent.enableAutoButton.toolTipText=Aktiviere Auto-Transformation - kontinuierlich angewendet +AppearanceTopComponent.splineButton.toolTipText=Konfiguriere Rank Interpolation +AppearanceTopComponent.splineButton.text=Spline... +AppearanceTopComponent.splineEditor.title=Interpolieren +AppearanceTopComponent.applyButton.toolTipText=Aktuelle Transformation auf Graph anwenden +AppearanceTopComponent.localScaleButton.toolTipText=Lokale Skalierung verwenden. Die Grenzen werden nur auf dem sichtbaren Graph berechnet anstatt auf dem kompletten Graphen. +AppearanceTopComponent.stopAutoApplyButton.toolTipText=Auto-Anwenden stoppen +AppearanceTopComponent.stopAutoApplyButton.text=Stop +AppearanceTopComponent.autoApplyButton.toolTipText=Kontinuierlich anwenden, auch wenn sich die Werte δndern +AppearanceTopComponent.autoApplyButton.text=Auto-Anwenden +AppearanceTopComponent.partitionLocalScaleButton.toolTipText=Verwenden Sie den sichtbaren Graphen anstelle des vollst\u00E4ndigen Graphen f\u00FCr Partitionierungsberechnungen +AppearanceTopComponent.transformNullValues.toolTipText=Transformiere ebenso fehlende Werte diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_es.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_es.properties index 0b4c0c7146..52aeadfa29 100644 --- a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_es.properties +++ b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_es.properties @@ -1,14 +1,22 @@ +OpenIDE-Module-Short-Description=UI Integrada de ranking +Actions/Window/org-gephi-desktop-appearance-AppearanceAction.instance=Apariencia +CTL_AppearanceAction=Apariencia +CTL_AppearanceTopComponent=Apariencia +!HINT_AppearanceTopComponent= -AppearanceTopComponent.enableAutoButton.toolTipText=Activar auto transformaci\u00f3n - aplicada continuamente - -AppearanceTopComponent.splineButton.toolTipText=Configurar interpolaci\u00f3n de la clasificaci\u00f3n - -AppearanceTopComponent.splineButton.text=Spline... - -AppearanceTopComponent.applyButton.toolTipText=Aplicar la transformaci\u00f3n actual al grafo - +AppearanceTopComponent.choose.text=---Escoge un atributo +AppearanceToolbar.nodes.label=Nodos +AppearanceToolbar.edges.label=Aristas AppearanceTopComponent.applyButton.text=Aplicar +AppearanceTopComponent.enableAutoButton.toolTipText=Activar auto transformaciσn - aplicada continuamente +AppearanceTopComponent.splineButton.toolTipText=Configurar interpolaciσn de la clasificaciσn +AppearanceTopComponent.splineButton.text=Spline... +AppearanceTopComponent.splineEditor.title=Interpolaciσn +AppearanceTopComponent.applyButton.toolTipText=Aplicar la transformaciσn actual al grafo +AppearanceTopComponent.localScaleButton.toolTipText=Utilizar escala local. Los l\u00EDmites se calculan s\u00F3lo en el grafo visible en lugar del grafo completo. AppearanceTopComponent.stopAutoApplyButton.toolTipText=Aplicar continuamente incluso cuando los valores cambian AppearanceTopComponent.stopAutoApplyButton.text=Auto aplicar -AppearanceTopComponent.autoApplyButton.text=Auto aplicar AppearanceTopComponent.autoApplyButton.toolTipText=Aplicar continuamente incluso cuando los valores cambian +AppearanceTopComponent.autoApplyButton.text=Auto aplicar +AppearanceTopComponent.partitionLocalScaleButton.toolTipText=Utilizar el grafo visible en lugar del grafo completo para los c\u00E1lculos de partici\u00F3n +AppearanceTopComponent.transformNullValues.toolTipText=Transformar tambi\u00E9n los valores que faltan diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_fr.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_fr.properties index b425461563..6909c230ed 100644 --- a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_fr.properties +++ b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_fr.properties @@ -1,10 +1,22 @@ +OpenIDE-Module-Short-Description=Intθgre l'interface utilisateur du module Ranking +Actions/Window/org-gephi-desktop-appearance-AppearanceAction.instance=Aspect +CTL_AppearanceAction=Aspect +CTL_AppearanceTopComponent=Aspect +!HINT_AppearanceTopComponent= +AppearanceTopComponent.choose.text=--Choisissez un attribut +AppearanceToolbar.nodes.label=Noeuds +AppearanceToolbar.edges.label=Liens AppearanceTopComponent.applyButton.text=Appliquer AppearanceTopComponent.enableAutoButton.toolTipText=Active la transformation automatique - en continu AppearanceTopComponent.splineButton.toolTipText=Configurer l'interpolation des rangs AppearanceTopComponent.splineButton.text=Spline... +AppearanceTopComponent.splineEditor.title=Interpoler AppearanceTopComponent.applyButton.toolTipText=Appliquer la transformation actuelle au graphe. -AppearanceTopComponent.stopAutoApplyButton.toolTipText=Ex\u00e9cute en continu m\u00eame si les valeurs changent -AppearanceTopComponent.stopAutoApplyButton.text=Ex\u00e9cution auto -AppearanceTopComponent.autoApplyButton.toolTipText=Ex\u00e9cute en continu m\u00eame si les valeurs changent -AppearanceTopComponent.autoApplyButton.text=Ex\u00e9cution auto +AppearanceTopComponent.localScaleButton.toolTipText=Utiliser une ιchelle locale. Les limites min et max sont calculιes seulement sur le graphe visible au lieu du graphe entier. +AppearanceTopComponent.stopAutoApplyButton.toolTipText=Exιcute en continu mκme si les valeurs changent +AppearanceTopComponent.stopAutoApplyButton.text=Exιcution auto +AppearanceTopComponent.autoApplyButton.toolTipText=Exιcute en continu mκme si les valeurs changent +AppearanceTopComponent.autoApplyButton.text=Exιcution auto +AppearanceTopComponent.partitionLocalScaleButton.toolTipText=\ Utilise le graphe visible plut\u00F4t que le graphe complet pour les calculs de partitions +AppearanceTopComponent.transformNullValues.toolTipText=Transforme aussi les valeurs manquantes diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_he.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_he.properties new file mode 100644 index 0000000000..46f49909df --- /dev/null +++ b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_he.properties @@ -0,0 +1,20 @@ +OpenIDE-Module-Short-Description=Integrated ranking UI +Actions/Window/org-gephi-desktop-appearance-AppearanceAction.instance=Appearance +CTL_AppearanceAction=Appearance +CTL_AppearanceTopComponent=Appearance +!HINT_AppearanceTopComponent= + +AppearanceTopComponent.choose.text=---Choose an attribute +AppearanceToolbar.nodes.label=Nodes +AppearanceToolbar.edges.label=Edges +AppearanceTopComponent.applyButton.text=Apply +AppearanceTopComponent.enableAutoButton.toolTipText=Enable auto transformation - applied continuously +AppearanceTopComponent.splineButton.toolTipText=Configure rank interpolation +AppearanceTopComponent.splineButton.text=Spline... +AppearanceTopComponent.splineEditor.title=Interpolate +AppearanceTopComponent.applyButton.toolTipText=Apply the current transformation to the graph +AppearanceTopComponent.localScaleButton.toolTipText=Use local scale. The bounds are calculated only on the visible graph instead of the complete graph. +AppearanceTopComponent.stopAutoApplyButton.toolTipText=Stop auto apply +AppearanceTopComponent.stopAutoApplyButton.text=Stop +AppearanceTopComponent.autoApplyButton.toolTipText=Apply continuously even when the values changes +AppearanceTopComponent.autoApplyButton.text=Auto Apply diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_hu.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_hu.properties new file mode 100644 index 0000000000..96a72ceebb --- /dev/null +++ b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_hu.properties @@ -0,0 +1,21 @@ + + +AppearanceTopComponent.applyButton.text=Alkalmaz +CTL_AppearanceAction=Kin\u00E9zet +AppearanceTopComponent.transformNullValues.toolTipText=A hi\u00E1nyz\u00F3 \u00E9rt\u00E9keket is \u00E1talak\u00EDthatja +AppearanceTopComponent.localScaleButton.toolTipText=\ Haszn\u00E1ljon helyi l\u00E9pt\u00E9ket. A korl\u00E1tok a teljes grafikon helyett csak a l\u00E1that\u00F3 grafikonon sz\u00E1m\u00EDthat\u00F3k ki. +AppearanceToolbar.nodes.label=Csom\u00F3pontok +AppearanceTopComponent.enableAutoButton.toolTipText=Automatikus \u00E1talak\u00EDt\u00E1s enged\u00E9lyez\u00E9se \u2013 folyamatosan alkalmazva +AppearanceTopComponent.stopAutoApplyButton.toolTipText=Az automatikus alkalmaz\u00E1s le\u00E1ll\u00EDt\u00E1sa +AppearanceTopComponent.applyButton.toolTipText=Alkalmazza az aktu\u00E1lis transzform\u00E1ci\u00F3t a grafikonra +AppearanceTopComponent.autoApplyButton.text=Automatikus alkalmaz\u00E1s +AppearanceTopComponent.stopAutoApplyButton.text=\u00C1llj +CTL_AppearanceTopComponent=Kin\u00E9zet +OpenIDE-Module-Short-Description=Integr\u00E1lt rangsorol\u00F3 UI +AppearanceTopComponent.splineButton.toolTipText=Konfigur\u00E1lja a ranginterpol\u00E1ci\u00F3t +Actions/Window/org-gephi-desktop-appearance-AppearanceAction.instance=Kin\u00E9zet +AppearanceTopComponent.splineEditor.title=Interpol\u00E1l +AppearanceTopComponent.partitionLocalScaleButton.toolTipText=\ A part\u00EDci\u00F3sz\u00E1m\u00EDt\u00E1shoz haszn\u00E1ljon l\u00E1that\u00F3 grafikont a teljes grafikon helyett +AppearanceTopComponent.choose.text=--- V\u00E1lasszon egy attrib\u00FAtumot +AppearanceTopComponent.autoApplyButton.toolTipText=Folyamatosan alkalmazza, m\u00E9g akkor is, ha az \u00E9rt\u00E9kek megv\u00E1ltoznak +AppearanceToolbar.edges.label=\u00C9lek diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_it.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_it.properties new file mode 100644 index 0000000000..986fa3ca6d --- /dev/null +++ b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_it.properties @@ -0,0 +1,20 @@ +OpenIDE-Module-Short-Description=Integrated ranking UI +Actions/Window/org-gephi-desktop-appearance-AppearanceAction.instance=Appearance +CTL_AppearanceAction=Appearance +CTL_AppearanceTopComponent=Appearance +!HINT_AppearanceTopComponent= + +AppearanceTopComponent.choose.text=---Choose an attribute +AppearanceToolbar.nodes.label=Nodi +AppearanceToolbar.edges.label=Archi +AppearanceTopComponent.applyButton.text=Applica +AppearanceTopComponent.enableAutoButton.toolTipText=Enable auto transformation - applied continuously +AppearanceTopComponent.splineButton.toolTipText=Configure rank interpolation +AppearanceTopComponent.splineButton.text=Spline... +AppearanceTopComponent.splineEditor.title=Interpolate +AppearanceTopComponent.applyButton.toolTipText=Apply the current transformation to the graph +AppearanceTopComponent.localScaleButton.toolTipText=Use local scale. The bounds are calculated only on the visible graph instead of the complete graph. +AppearanceTopComponent.stopAutoApplyButton.toolTipText=Stop auto apply +AppearanceTopComponent.stopAutoApplyButton.text=Stop +AppearanceTopComponent.autoApplyButton.toolTipText=Apply continuously even when the values changes +AppearanceTopComponent.autoApplyButton.text=Auto Apply diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_ja.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_ja.properties index 7e1a70283a..e20b5c4016 100644 --- a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_ja.properties +++ b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_ja.properties @@ -1,10 +1,28 @@ - -AppearanceTopComponent.applyButton.text=\u9069\u7528 -AppearanceTopComponent.enableAutoButton.toolTipText=\u81ea\u52d5\u5909\u5f62\u53ef\u80fd - \u7d99\u7d9a\u3057\u3066\u9069\u7528 -AppearanceTopComponent.splineButton.toolTipText=\u30e9\u30f3\u30af\u306e\u5185\u633f\u306e\u8a2d\u5b9a -AppearanceTopComponent.splineButton.text=\u30b9\u30d7\u30e9\u30a4\u30f3... -AppearanceTopComponent.applyButton.toolTipText=\u73fe\u5728\u306e\u5909\u5f62\u3092\u30b0\u30e9\u30d5\u306b\u9069\u7528 -AppearanceTopComponent.stopAutoApplyButton.toolTipText=\u5024\u306e\u5909\u66f4\u304c\u3042\u3063\u305f\u3068\u304d\u306f\u7d99\u7d9a\u3057\u3066\u9069\u7528 -AppearanceTopComponent.stopAutoApplyButton.text=\u81ea\u52d5\u9069\u7528 -AppearanceTopComponent.autoApplyButton.toolTipText=\u5024\u306e\u5909\u66f4\u304c\u3042\u3063\u305f\u3068\u304d\u306f\u7d99\u7d9a\u3057\u3066\u9069\u7528 -AppearanceTopComponent.autoApplyButton.text=\u81ea\u52d5\u9069\u7528 +# OpenIDE-Module-Short-Description=Integrated ranking UI +# Actions/Window/org-gephi-desktop-appearance-AppearanceAction.instance=Appearance +# CTL_AppearanceAction=Appearance +# CTL_AppearanceTopComponent=Appearance +!HINT_AppearanceTopComponent= + +# AppearanceTopComponent.choose.text=---Choose an attribute + + +# AppearanceToolbar.nodes.label = Nodes +# AppearanceToolbar.edges.label = Edges + +# PartitionChooser.groupLink.toolTipText=Group the partition, one group per part +# PartitionChooser.pieLink.text=Show Pie +# PartitionChooser.showpie.label=Show Pie +# PartitionChooser.hidepie.label=Hide Pie +# PartitionChooser.refreshButton.toolTipText=Refresh +AppearanceTopComponent.applyButton.text=\u9069\u7528 +AppearanceTopComponent.enableAutoButton.toolTipText=\u81ea\u52d5\u5909\u5f62\u53ef\u80fd - \u7d99\u7d9a\u3057\u3066\u9069\u7528 +AppearanceTopComponent.splineButton.toolTipText=\u30e9\u30f3\u30af\u306e\u5185\u633f\u306e\u8a2d\u5b9a +AppearanceTopComponent.splineButton.text=\u30b9\u30d7\u30e9\u30a4\u30f3... +# AppearanceTopComponent.splineEditor.title=Interpolate +AppearanceTopComponent.applyButton.toolTipText=\u73fe\u5728\u306e\u5909\u5f62\u3092\u30b0\u30e9\u30d5\u306b\u9069\u7528 +# AppearanceTopComponent.localScaleButton.toolTipText= Use local scale. The bounds are calculated only on the visible graph instead of the complete graph. +AppearanceTopComponent.stopAutoApplyButton.toolTipText=\u5024\u306e\u5909\u66f4\u304c\u3042\u3063\u305f\u3068\u304d\u306f\u7d99\u7d9a\u3057\u3066\u9069\u7528 +AppearanceTopComponent.stopAutoApplyButton.text=\u81ea\u52d5\u9069\u7528 +AppearanceTopComponent.autoApplyButton.toolTipText=\u5024\u306e\u5909\u66f4\u304c\u3042\u3063\u305f\u3068\u304d\u306f\u7d99\u7d9a\u3057\u3066\u9069\u7528 +AppearanceTopComponent.autoApplyButton.text=\u81ea\u52d5\u9069\u7528 diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_nl.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_nl.properties new file mode 100644 index 0000000000..2bdecadd16 --- /dev/null +++ b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_nl.properties @@ -0,0 +1,20 @@ +OpenIDE-Module-Short-Description=Integrated ranking UI +Actions/Window/org-gephi-desktop-appearance-AppearanceAction.instance=Appearance +CTL_AppearanceAction=Appearance +CTL_AppearanceTopComponent=Appearance +!HINT_AppearanceTopComponent= + +AppearanceTopComponent.choose.text=---Choose an attribute +AppearanceToolbar.nodes.label=Knopen +AppearanceToolbar.edges.label=Verbindingen +AppearanceTopComponent.applyButton.text=Toepassen +AppearanceTopComponent.enableAutoButton.toolTipText=Enable auto transformation - applied continuously +AppearanceTopComponent.splineButton.toolTipText=Ranginterpolatie configureren +AppearanceTopComponent.splineButton.text=Spline... +AppearanceTopComponent.splineEditor.title=Interpoleren +AppearanceTopComponent.applyButton.toolTipText=Huidige transformatie op de graaf toepassen +AppearanceTopComponent.localScaleButton.toolTipText=\ Use local scale. The bounds are calculated only on the visible graph instead of the complete graph. +AppearanceTopComponent.stopAutoApplyButton.toolTipText=Stoppen van automatisch toepassen +AppearanceTopComponent.stopAutoApplyButton.text=Stoppen +AppearanceTopComponent.autoApplyButton.toolTipText=Apply continuously even when the values changes +AppearanceTopComponent.autoApplyButton.text=Automatisch toepassen diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_pt_BR.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_pt_BR.properties index 7165cdeba3..d7f4a1c429 100644 --- a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_pt_BR.properties +++ b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_pt_BR.properties @@ -1,14 +1,23 @@ - -AppearanceTopComponent.enableAutoButton.toolTipText=Habilitar auto transforma\u00e7\u00e3o - aplicada continuamente - -AppearanceTopComponent.splineButton.toolTipText=Configurar interpola\u00e7\u00e3o de classifica\u00e7\u00e3o - -AppearanceTopComponent.splineButton.text=Spline... - -AppearanceTopComponent.applyButton.toolTipText=Aplicar a transforma\u00e7\u00e3o atual ao grafo - -AppearanceTopComponent.applyButton.text=Aplicar -AppearanceTopComponent.stopAutoApplyButton.toolTipText=Aplicar continuamente mesmo quando os valores mudem -AppearanceTopComponent.stopAutoApplyButton.text=Auto aplicar -AppearanceTopComponent.autoApplyButton.text=Auto aplicar -AppearanceTopComponent.autoApplyButton.toolTipText=Aplicar continuamente mesmo quando os valores mudem +OpenIDE-Module-Short-Description=UI de Ranking integrado +Actions/Window/org-gephi-desktop-appearance-AppearanceAction.instance=Aparκncia +CTL_AppearanceAction=Aparκncia +CTL_AppearanceTopComponent=Aparκncia +!HINT_AppearanceTopComponent= + +AppearanceTopComponent.choose.text=---Escolha um atributo + + +AppearanceToolbar.nodes.label = Nσs +AppearanceToolbar.edges.label = Arestas + +AppearanceTopComponent.applyButton.text=Aplicar +AppearanceTopComponent.enableAutoButton.toolTipText=Habilitar auto transformaηγo - aplicada continuamente +AppearanceTopComponent.splineButton.toolTipText=Configurar interpolaηγo de classificaηγo +AppearanceTopComponent.splineButton.text=Spline... +AppearanceTopComponent.splineEditor.title=Interpolar +AppearanceTopComponent.applyButton.toolTipText=Aplicar a transformaηγo atual ao grafo +AppearanceTopComponent.localScaleButton.toolTipText=Usar escalonamento local. Os limites nγo serγo calculados para o grafo completo, apenas para o grafo visνvel. +AppearanceTopComponent.stopAutoApplyButton.toolTipText=Aplicar continuamente mesmo quando os valores mudem +AppearanceTopComponent.stopAutoApplyButton.text=Auto aplicar +AppearanceTopComponent.autoApplyButton.toolTipText=Aplicar continuamente mesmo quando os valores mudem +AppearanceTopComponent.autoApplyButton.text=Auto aplicar diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_ro.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_ro.properties new file mode 100644 index 0000000000..fb167304f5 --- /dev/null +++ b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_ro.properties @@ -0,0 +1,22 @@ + + +OpenIDE-Module-Short-Description=Interfa\u021B\u0103 integrat\u0103 de clasificare +Actions/Window/org-gephi-desktop-appearance-AppearanceAction.instance=Aspect +AppearanceToolbar.nodes.label=Noduri +AppearanceToolbar.edges.label=Muchii +AppearanceTopComponent.applyButton.text=Aplic\u0103 +AppearanceTopComponent.enableAutoButton.toolTipText=Activeaz\u0103 transformarea automat\u0103 - aplicat\u0103 continuu +AppearanceTopComponent.splineButton.toolTipText=Configureaz\u0103 interpolarea rangurilor +AppearanceTopComponent.splineButton.text=Spline... +AppearanceTopComponent.splineEditor.title=Interpolare +AppearanceTopComponent.applyButton.toolTipText=Aplic\u0103 transformarea curent\u0103 pe graf +AppearanceTopComponent.localScaleButton.toolTipText=\ Folose\u0219te scara local\u0103. Limitele sunt calculate numai pe partea vizibil\u0103 a grafului \u00EEn locul \u00EEntregului graf. +AppearanceTopComponent.partitionLocalScaleButton.toolTipText=\ Folose\u0219te partea vizibil\u0103 a grafului \u00EEn locul \u00EEntregului graf pentru calculul parti\u021Biilor +AppearanceTopComponent.stopAutoApplyButton.toolTipText=Opre\u0219te aplicarea automat\u0103 +AppearanceTopComponent.autoApplyButton.toolTipText=Aplic\u0103 \u00EEn mod continuu, chiar \u0219i atunci c\u00E2nd valorile se modific\u0103 +AppearanceTopComponent.autoApplyButton.text=Aplicare automat\u0103 +AppearanceTopComponent.transformNullValues.toolTipText=Transform\u0103 \u0219i valorile lips\u0103 +AppearanceTopComponent.stopAutoApplyButton.text=Stop +CTL_AppearanceAction=Aspect +CTL_AppearanceTopComponent=Aspect +AppearanceTopComponent.choose.text=---Alege un atribut diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_ru.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_ru.properties index eb75342b81..c3f6ce3115 100644 --- a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_ru.properties +++ b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_ru.properties @@ -1,10 +1,31 @@ +# OpenIDE-Module-Short-Description=Integrated ranking UI +# Actions/Window/org-gephi-desktop-appearance-AppearanceAction.instance=Appearance +# CTL_AppearanceAction=Appearance +# CTL_AppearanceTopComponent=Appearance +!HINT_AppearanceTopComponent= +# AppearanceTopComponent.choose.text=---Choose an attribute + + +# AppearanceToolbar.nodes.label = Nodes +# AppearanceToolbar.edges.label = Edges + +# PartitionChooser.groupLink.toolTipText=Group the partition, one group per part +# PartitionChooser.pieLink.text=Show Pie +# PartitionChooser.showpie.label=Show Pie +# PartitionChooser.hidepie.label=Hide Pie +# PartitionChooser.refreshButton.toolTipText=Refresh AppearanceTopComponent.applyButton.text=\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c AppearanceTopComponent.enableAutoButton.toolTipText=\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0430\u0432\u0442\u043e-\u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 AppearanceTopComponent.splineButton.toolTipText=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044e \u0440\u0430\u043d\u0433\u0430 AppearanceTopComponent.splineButton.text=\u0421\u043f\u043b\u0430\u0439\u043d\u044b... +# AppearanceTopComponent.splineEditor.title=Interpolate AppearanceTopComponent.applyButton.toolTipText=\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043d\u0430\u0431\u043e\u0440 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0440\u0430\u043d\u0436\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u0433\u0440\u0430\u0444\u0443 +# AppearanceTopComponent.localScaleButton.toolTipText= Use local scale. The bounds are calculated only on the visible graph instead of the complete graph. AppearanceTopComponent.stopAutoApplyButton.toolTipText=\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 AppearanceTopComponent.stopAutoApplyButton.text=\u0410\u0432\u0442\u043e-\u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 AppearanceTopComponent.autoApplyButton.toolTipText=\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 AppearanceTopComponent.autoApplyButton.text=\u0410\u0432\u0442\u043e-\u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 +AppearanceToolbar.edges.label=\u0420\u0451\u0431\u0440\u0430 +AppearanceToolbar.nodes.label=\u0423\u0437\u043B\u044B +AppearanceTopComponent.splineEditor.title=\u0418\u043D\u0442\u0435\u0440\u043F\u043E\u043B\u0438\u0440\u043E\u0432\u0430\u0442\u044C diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_th.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_tr.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_tr.properties new file mode 100644 index 0000000000..46f49909df --- /dev/null +++ b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_tr.properties @@ -0,0 +1,20 @@ +OpenIDE-Module-Short-Description=Integrated ranking UI +Actions/Window/org-gephi-desktop-appearance-AppearanceAction.instance=Appearance +CTL_AppearanceAction=Appearance +CTL_AppearanceTopComponent=Appearance +!HINT_AppearanceTopComponent= + +AppearanceTopComponent.choose.text=---Choose an attribute +AppearanceToolbar.nodes.label=Nodes +AppearanceToolbar.edges.label=Edges +AppearanceTopComponent.applyButton.text=Apply +AppearanceTopComponent.enableAutoButton.toolTipText=Enable auto transformation - applied continuously +AppearanceTopComponent.splineButton.toolTipText=Configure rank interpolation +AppearanceTopComponent.splineButton.text=Spline... +AppearanceTopComponent.splineEditor.title=Interpolate +AppearanceTopComponent.applyButton.toolTipText=Apply the current transformation to the graph +AppearanceTopComponent.localScaleButton.toolTipText=Use local scale. The bounds are calculated only on the visible graph instead of the complete graph. +AppearanceTopComponent.stopAutoApplyButton.toolTipText=Stop auto apply +AppearanceTopComponent.stopAutoApplyButton.text=Stop +AppearanceTopComponent.autoApplyButton.toolTipText=Apply continuously even when the values changes +AppearanceTopComponent.autoApplyButton.text=Auto Apply diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_zh_CN.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_zh_CN.properties index 112145646d..525281dead 100644 --- a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_zh_CN.properties +++ b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_zh_CN.properties @@ -1,14 +1,23 @@ +OpenIDE-Module-Short-Description=\u7efc\u5408\u6392\u540d\u754c\u9762 +Actions/Window/org-gephi-desktop-appearance-AppearanceAction.instance=\u5916\u89c2 +CTL_AppearanceAction=\u5916\u89c2 +CTL_AppearanceTopComponent=\u5916\u89c2 +!HINT_AppearanceTopComponent= +AppearanceTopComponent.choose.text=---\u9009\u62e9\u4e00\u79cd\u6e32\u67d3\u65b9\u5f0f +AppearanceToolbar.nodes.label=\u8282\u70b9 +AppearanceToolbar.edges.label=\u8fb9 +AppearanceTopComponent.applyButton.text=\u5e94\u7528 AppearanceTopComponent.enableAutoButton.toolTipText=\u5f00\u542f\u81ea\u52a8\u8f6c\u6362-\u7ee7\u7eed\u5e94\u7528 - AppearanceTopComponent.splineButton.toolTipText=\u8bbe\u7f6e\u7b49\u7ea7\u63d2\u503c\u6cd5 - -AppearanceTopComponent.splineButton.text=\u6837\u6761\u66f2\u7ebf - +AppearanceTopComponent.splineButton.text=\u6837\u6761\u66F2\u7EBF\u2026 +AppearanceTopComponent.splineEditor.title=\u63d2\u5165 AppearanceTopComponent.applyButton.toolTipText=\u5e94\u7528\u73b0\u6709\u7684\u8f6c\u6362\u5230\u56fe - -AppearanceTopComponent.applyButton.text=\u5e94\u7528 +# AppearanceTopComponent.localScaleButton.toolTipText= Use local scale. The bounds are calculated only on the visible graph instead of the complete graph. AppearanceTopComponent.stopAutoApplyButton.toolTipText=\u6570\u636e\u6539\u53d8\u540e\u7ee7\u7eed\u5e94\u7528 AppearanceTopComponent.stopAutoApplyButton.text=\u81ea\u52a8\u5e94\u7528 AppearanceTopComponent.autoApplyButton.toolTipText=\u6570\u636e\u6539\u53d8\u540e\u7ee7\u7eed\u5e94\u7528 AppearanceTopComponent.autoApplyButton.text=\u81ea\u52a8\u5e94\u7528 +AppearanceTopComponent.localScaleButton.toolTipText=\u4F7F\u7528\u672C\u5730\u6807\u5EA6\u3002\u8FB9\u754C\u53EA\u5728\u53EF\u89C1\u56FE\u4E0A\u8BA1\u7B97\uFF0C\u800C\u4E0D\u662F\u5728\u5B8C\u6574\u56FE\u4E0A\u8BA1\u7B97\u3002 +AppearanceTopComponent.transformNullValues.toolTipText=\u540C\u65F6\u8F6C\u6362\u7F3A\u5931\u503C +AppearanceTopComponent.partitionLocalScaleButton.toolTipText=\u4F7F\u7528\u53EF\u89C1\u56FE\u800C\u4E0D\u662F\u5B8C\u6574\u56FE\u8FDB\u884C\u5206\u533A\u8BA1\u7B97 diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_zh_TW.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_zh_TW.properties new file mode 100644 index 0000000000..48c02c787e --- /dev/null +++ b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/Bundle_zh_TW.properties @@ -0,0 +1,23 @@ +OpenIDE-Module-Short-Description=\u6574\u5408\u5f0f\u6392\u5e8f +Actions/Window/org-gephi-desktop-appearance-AppearanceAction.instance=\u5916\u89c0 +CTL_AppearanceAction=\u5916\u89c0 +CTL_AppearanceTopComponent=\u5916\u89c0 +!HINT_AppearanceTopComponent= + +AppearanceTopComponent.choose.text=---\u9078\u53d6\u5c6c\u6027 + + +AppearanceToolbar.nodes.label = \u7bc0\u9ede +AppearanceToolbar.edges.label = \u9023\u7d50 + +AppearanceTopComponent.applyButton.text=\u5957\u7528 +AppearanceTopComponent.enableAutoButton.toolTipText=\u958b\u555f\u81ea\u52d5\u5957\u7528\u8f49\u63db\u6a21\u5f0f +AppearanceTopComponent.splineButton.toolTipText=\u8a2d\u5b9a\u6392\u5e8f\u5167\u63d2\u6cd5 +AppearanceTopComponent.splineButton.text=\u7dda\u6027\u51fd\u6578... +AppearanceTopComponent.splineEditor.title=\u5167\u63d2\u6cd5 +AppearanceTopComponent.applyButton.toolTipText=\u5957\u7528\u76ee\u524d\u8f49\u63db\u6a21\u5f0f\u81f3\u5716\u5f62\u4e2d +AppearanceTopComponent.localScaleButton.toolTipText=\u4f7f\u7528\u5340\u57df\u6578\u64da\u6bd4\u4f8b\u5c3a\u3002\u908a\u754c\u7684\u8a08\u7b97\u5c07\u6703\u9650\u5236\u5728\u53ef\u898b\u7684\u7db2\u8def\u5716\u4e2d\uff0c\u800c\u975e\u6574\u9ad4\u7db2\u8def\u5716\u3002 +AppearanceTopComponent.stopAutoApplyButton.toolTipText=\u505c\u6b62\u81ea\u52d5\u5957\u7528 +AppearanceTopComponent.stopAutoApplyButton.text=\u505c\u6b62 +AppearanceTopComponent.autoApplyButton.toolTipText=\u7576\u6578\u503c\u8b8a\u5316\u6642\u81ea\u52d5\u5957\u7528 +AppearanceTopComponent.autoApplyButton.text=\u81ea\u52d5\u5957\u7528 diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/options/Bundle.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/options/Bundle.properties new file mode 100644 index 0000000000..a724bbd845 --- /dev/null +++ b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/options/Bundle.properties @@ -0,0 +1,25 @@ +AdvancedOption_DisplayName_Appearance=Appearance +AdvancedOption_Keywords_Appearance=appearance, size, ranking, node, edge, interpolation, spline, local scale, null values +# Section titles +AppearancePanel.defaultSettingsTitle.title=Default Appearance Settings +AppearancePanel.nodeSizeTitle.title=Default Node Size (Ranking) +AppearancePanel.labelSizeTitle.title=Default Label Size (Ranking) +AppearancePanel.elementColorTitle.title=Default Node/Edge Color (Ranking) +AppearancePanel.labelColorTitle.title=Default Label Color (Ranking) +AppearancePanel.interpolationTitle.title=Default Interpolation (Ranking) +# Default appearance settings checkboxes +AppearancePanel.rankingLocalScale.text=Ranking uses visible graph (local scale) +AppearancePanel.partitionLocalScale.text=Partition uses visible graph (local scale) +AppearancePanel.transformNullValues.text=Apply transformation to null values +# Spinner labels +AppearancePanel.minSize.text=Min: +AppearancePanel.maxSize.text=Max: +# Interpolation state labels +AppearancePanel.interpolation.linear=Linear +AppearancePanel.interpolation.spline=Spline {0} \u2192 {1} +# Buttons +AppearancePanel.resetButton.text=Reset Defaults +AppearancePanel.configureSplineButton.text=Configure Spline\u2026 +AppearancePanel.useLinearButton.text=Use Linear +# Spline editor dialog title +AppearancePanel.splineEditor.title=Default Interpolation diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/options/Bundle_ar.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/options/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/options/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/options/Bundle_fr.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/options/Bundle_fr.properties new file mode 100644 index 0000000000..4e66f0566d --- /dev/null +++ b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/options/Bundle_fr.properties @@ -0,0 +1 @@ +AdvancedOption_DisplayName_Appearance=Aspect diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/options/Bundle_th.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/options/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/options/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/resources/apply.gif b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/resources/apply.gif deleted file mode 100644 index 8a35c4c259..0000000000 Binary files a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/resources/apply.gif and /dev/null differ diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/resources/chain.png b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/resources/chain.png deleted file mode 100644 index 28199c8c26..0000000000 Binary files a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/resources/chain.png and /dev/null differ diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/resources/funnel.png b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/resources/funnel.png deleted file mode 100755 index 35f1d25960..0000000000 Binary files a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/resources/funnel.png and /dev/null differ diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/resources/stop.png b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/resources/stop.png deleted file mode 100644 index fb8bbdf229..0000000000 Binary files a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/appearance/resources/stop.png and /dev/null differ diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/Bundle.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/Bundle.properties deleted file mode 100644 index d18d81d028..0000000000 --- a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/Bundle.properties +++ /dev/null @@ -1,24 +0,0 @@ -Actions/Window/org-gephi-desktop-partition-PartitionAction.instance=Partition -CTL_PartitionAction=Partition -CTL_PartitionTopComponent=Partition -!HINT_PartitionTopComponent= -OpenIDE-Module-Display-Category=Gephi UI -OpenIDE-Module-Name=Desktop Partition - -OpenIDE-Module-Short-Description=Partition UI -PartitionChooser.applyButton.text=Apply -PartitionChooser.choose.text=---Choose a partition parameter -PartitionChooser.busyMessage=Building... - -PartitionToolbar.nodes.label = Nodes -PartitionToolbar.edges.label = Edges -PartitionChooser.groupLink.text=Group -PartitionChooser.group.label=Group -PartitionChooser.ungroup.label=Ungroup -PartitionChooser.groupLink.toolTipText=Group the partition, one group per part -PartitionChooser.pieLink.text=Show Pie -PartitionChooser.showpie.label=Show Pie -PartitionChooser.hidepie.label=Hide Pie -PartitionChooser.refreshBusyLabel.text= -PartitionChooser.refreshButton.text= -PartitionChooser.refreshButton.toolTipText=Refresh diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/Bundle_cs.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/Bundle_cs.properties deleted file mode 100644 index 4aec421caa..0000000000 --- a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/Bundle_cs.properties +++ /dev/null @@ -1,41 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-26 14\:15+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -Actions/Window/org-gephi-desktop-partition-PartitionAction.instance=Odd\u00edl - -CTL_PartitionAction=Odd\u00edl - -CTL_PartitionTopComponent=Odd\u00edl - -OpenIDE-Module-Short-Description=Rozhran\u00ed odd\u00edlu - -PartitionChooser.applyButton.text=Pou\u017e\u00edt - -PartitionChooser.choose.text=---Zvolte parametr odd\u00edlu - -PartitionChooser.busyMessage=Sestavov\u00e1n\u00ed... - -PartitionToolbar.nodes.label=Uzly - -PartitionToolbar.edges.label=Hrany - -PartitionChooser.groupLink.text=Skupina - -PartitionChooser.group.label=Seskupit - -PartitionChooser.ungroup.label=Rozd\u011blit - -PartitionChooser.groupLink.toolTipText=Seskupit odd\u00edl, jedna skupina na \u010d\u00e1st - -PartitionChooser.pieLink.text=Zobrazit kol\u00e1\u010d - -PartitionChooser.showpie.label=Zobrazit kol\u00e1\u010d - -PartitionChooser.hidepie.label=Skr\u00fdt kol\u00e1\u010d - -PartitionChooser.refreshButton.toolTipText=Obnovit diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/Bundle_es.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/Bundle_es.properties deleted file mode 100644 index b968559f76..0000000000 --- a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/Bundle_es.properties +++ /dev/null @@ -1,41 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:07+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -Actions/Window/org-gephi-desktop-partition-PartitionAction.instance=Particionamiento - -CTL_PartitionAction=Particionamiento - -CTL_PartitionTopComponent=Particionamiento - -OpenIDE-Module-Short-Description=Interfaz de usuario del m\u00f3dulo Partition - -PartitionChooser.applyButton.text=Aplicar - -PartitionChooser.choose.text=---Elige un par\u00e1metro de particionamiento - -PartitionChooser.busyMessage=Construyendo... - -PartitionToolbar.nodes.label=Nodos - -PartitionToolbar.edges.label=Aristas - -PartitionChooser.groupLink.text=Agrupar - -PartitionChooser.group.label=Agrupar - -PartitionChooser.ungroup.label=Desagrupar - -PartitionChooser.groupLink.toolTipText=Agrupar las particiones, un grupo por partici\u00f3n - -PartitionChooser.pieLink.text=Mostrar gr\u00e1fica circular - -PartitionChooser.showpie.label=Mostrar gr\u00e1fica circular - -PartitionChooser.hidepie.label=Ocultar gr\u00e1fica circular - -PartitionChooser.refreshButton.toolTipText=Refrescar diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/Bundle_fr.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/Bundle_fr.properties deleted file mode 100644 index 0239b7f271..0000000000 --- a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/Bundle_fr.properties +++ /dev/null @@ -1,41 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:07+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -Actions/Window/org-gephi-desktop-partition-PartitionAction.instance=Partition - -CTL_PartitionAction=Partition - -CTL_PartitionTopComponent=Partition - -OpenIDE-Module-Short-Description=Interface utilisateur du module Partition - -PartitionChooser.applyButton.text=Appliquer - -PartitionChooser.choose.text=Choisissez un param\u00e8tre de partitionnement - -PartitionChooser.busyMessage=Construction en cours... - -PartitionToolbar.nodes.label=Noeuds - -PartitionToolbar.edges.label=Liens - -PartitionChooser.groupLink.text=Grouper - -PartitionChooser.group.label=Grouper - -PartitionChooser.ungroup.label=D\u00e9grouper - -PartitionChooser.groupLink.toolTipText=Grouper les partitions, un groupe par partition - -PartitionChooser.pieLink.text=Afficher le graphique - -PartitionChooser.showpie.label=Afficher le graphique - -PartitionChooser.hidepie.label=Masquer le graphique - -PartitionChooser.refreshButton.toolTipText=Rafraichir diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/Bundle_ja.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/Bundle_ja.properties deleted file mode 100644 index 379b4221dd..0000000000 --- a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/Bundle_ja.properties +++ /dev/null @@ -1,41 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-21 02\:40+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -Actions/Window/org-gephi-desktop-partition-PartitionAction.instance=\u30d1\u30fc\u30c6\u30a3\u30b7\u30e7\u30f3 - -CTL_PartitionAction=\u30d1\u30fc\u30c6\u30a3\u30b7\u30e7\u30f3 - -CTL_PartitionTopComponent=\u30d1\u30fc\u30c6\u30a3\u30b7\u30e7\u30f3 - -OpenIDE-Module-Short-Description=\u30d1\u30fc\u30c6\u30a3\u30b7\u30e7\u30f3UI - -PartitionChooser.applyButton.text=\u9069\u7528 - -PartitionChooser.choose.text=---\u30d1\u30fc\u30c6\u30a3\u30b7\u30e7\u30f3\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u9078\u629e - -PartitionChooser.busyMessage=\u69cb\u7bc9\u4e2d... - -PartitionToolbar.nodes.label=\u30ce\u30fc\u30c9 - -PartitionToolbar.edges.label=\u8fba - -PartitionChooser.groupLink.text=\u30b0\u30eb\u30fc\u30d7 - -PartitionChooser.group.label=\u30b0\u30eb\u30fc\u30d7\u5316 - -PartitionChooser.ungroup.label=\u30b0\u30eb\u30fc\u30d7\u5316\u89e3\u9664 - -PartitionChooser.groupLink.toolTipText=\u30d1\u30fc\u30c6\u30a3\u30b7\u30e7\u30f3\u3092\u30b0\u30eb\u30fc\u30d7\u5316\u3001\u30d1\u30fc\u30c6\u30a3\u30b7\u30e7\u30f3\u306b\u3064\u304d\uff11\u30b0\u30eb\u30fc\u30d7 - -PartitionChooser.pieLink.text=\u5186\u30b0\u30e9\u30d5\u3092\u8868\u793a - -PartitionChooser.showpie.label=\u5186\u30b0\u30e9\u30d5\u3092\u8868\u793a - -PartitionChooser.hidepie.label=\u5186\u30b0\u30e9\u30d5\u3092\u96a0\u3059 - -PartitionChooser.refreshButton.toolTipText=\u30ea\u30d5\u30ec\u30c3\u30b7\u30e5 diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/Bundle_pt_BR.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/Bundle_pt_BR.properties deleted file mode 100644 index d398ee80da..0000000000 --- a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/Bundle_pt_BR.properties +++ /dev/null @@ -1,41 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 17\:42+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -Actions/Window/org-gephi-desktop-partition-PartitionAction.instance=Parti\u00e7\u00e3o - -CTL_PartitionAction=Parti\u00e7\u00e3o - -CTL_PartitionTopComponent=Parti\u00e7\u00e3o - -OpenIDE-Module-Short-Description=Interface de usu\u00e1rio de parti\u00e7\u00e3o - -PartitionChooser.applyButton.text=Aplicar - -PartitionChooser.choose.text=--- Escolha um par\u00e2metro de parti\u00e7\u00e3o - -PartitionChooser.busyMessage=Construindo... - -PartitionToolbar.nodes.label=N\u00f3s - -PartitionToolbar.edges.label=Arestas - -PartitionChooser.groupLink.text=Agrupar - -PartitionChooser.group.label=Agrupar - -PartitionChooser.ungroup.label=Desagrupar - -PartitionChooser.groupLink.toolTipText=Agrupar as parti\u00e7\u00f5es, um grupo por parti\u00e7\u00e3o - -PartitionChooser.pieLink.text=Exibir gr\u00e1fico de pizza - -PartitionChooser.showpie.label=Exibir gr\u00e1fico de pizza - -PartitionChooser.hidepie.label=Ocultar gr\u00e1fico de pizza - -PartitionChooser.refreshButton.toolTipText=Atualizar diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/Bundle_ru.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/Bundle_ru.properties deleted file mode 100644 index 77fb1281a2..0000000000 --- a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/Bundle_ru.properties +++ /dev/null @@ -1,41 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 15\:25+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -Actions/Window/org-gephi-desktop-partition-PartitionAction.instance=\u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 - -CTL_PartitionAction=\u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 - -CTL_PartitionTopComponent=\u0420\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 - -OpenIDE-Module-Short-Description=Partition UI - -PartitionChooser.applyButton.text=\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c - -PartitionChooser.choose.text=---\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0434\u043b\u044f \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u044f - -PartitionChooser.busyMessage=\u0420\u0430\u0441\u0447\u0451\u0442... - -PartitionToolbar.nodes.label=\u0423\u0437\u043b\u044b - -PartitionToolbar.edges.label=\u0420\u0451\u0431\u0440\u0430 - -PartitionChooser.groupLink.text=\u0421\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c - -PartitionChooser.group.label=\u0421\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c - -PartitionChooser.ungroup.label=\u0420\u0430\u0437\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c - -PartitionChooser.groupLink.toolTipText=\u0421\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u0437\u043b\u044b, \u043e\u0434\u0438\u043d \u043d\u043e\u0432\u044b\u0439 \u0443\u0437\u0435\u043b \u043d\u0430 \u043a\u0430\u0436\u0434\u0443\u044e \u0442\u0435\u043a\u0443\u0449\u0443\u044e \u0433\u0440\u0443\u043f\u043f\u0443 - -PartitionChooser.pieLink.text=\u041e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c piechart - -PartitionChooser.showpie.label=\u041e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c piechart - -PartitionChooser.hidepie.label=\u0421\u043a\u0440\u044b\u0442\u044c piechart - -PartitionChooser.refreshButton.toolTipText=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/Bundle_zh_CN.properties b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/Bundle_zh_CN.properties deleted file mode 100644 index b2d9f0fe99..0000000000 --- a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/Bundle_zh_CN.properties +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:16+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -Actions/Window/org-gephi-desktop-partition-PartitionAction.instance=\u5206\u5272 - -CTL_PartitionAction=\u5206\u5272 - -CTL_PartitionTopComponent=\u5206\u5272 - -OpenIDE-Module-Short-Description=\u5206\u5272\u754c\u9762 - -PartitionChooser.applyButton.text=\u5e94\u7528 - -PartitionChooser.choose.text=---\u9009\u62e9\u4e00\u4e2a\u5206\u5272\u53c2\u6570 - -PartitionChooser.busyMessage=\u5efa\u7acb\u2026\u2026 - -PartitionToolbar.nodes.label=\u8282\u70b9 - -PartitionToolbar.edges.label=\u8fb9 - -PartitionChooser.groupLink.text=\u7ec4 - -PartitionChooser.group.label=\u7ec4 - -PartitionChooser.ungroup.label=\u53d6\u6d88\u7ec4 - -PartitionChooser.groupLink.toolTipText=\u5206\u5272\u7ed3\u679c\u8fdb\u884c\u5206\u7ec4\uff0c\u6bcf\u90e8\u5206\u4e00\u7ec4 - -PartitionChooser.pieLink.text=\u663e\u793a\u997c\u56fe - -PartitionChooser.showpie.label=\u663e\u793a\u997c\u56fe - -PartitionChooser.hidepie.label=\u9690\u85cf\u997c\u56fe - -PartitionChooser.refreshButton.toolTipText=\u5237\u65b0 diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/cs.po b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/cs.po deleted file mode 100644 index d3fb099b40..0000000000 --- a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/cs.po +++ /dev/null @@ -1,70 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-26 14:15+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "Actions/Window/org-gephi-desktop-partition-PartitionAction.instance" -msgstr "OddΓ­l" - -msgid "CTL_PartitionAction" -msgstr "OddΓ­l" - -msgid "CTL_PartitionTopComponent" -msgstr "OddΓ­l" - -msgid "OpenIDE-Module-Short-Description" -msgstr "RozhranΓ­ oddΓ­lu" - -msgid "PartitionChooser.applyButton.text" -msgstr "PouΕΎΓ­t" - -msgid "PartitionChooser.choose.text" -msgstr "---Zvolte parametr oddΓ­lu" - -msgid "PartitionChooser.busyMessage" -msgstr "SestavovΓ‘nΓ­..." - -msgid "PartitionToolbar.nodes.label" -msgstr "Uzly" - -msgid "PartitionToolbar.edges.label" -msgstr "Hrany" - -msgid "PartitionChooser.groupLink.text" -msgstr "Skupina" - -msgid "PartitionChooser.group.label" -msgstr "Seskupit" - -msgid "PartitionChooser.ungroup.label" -msgstr "RozdΔ›lit" - -msgid "PartitionChooser.groupLink.toolTipText" -msgstr "Seskupit oddΓ­l, jedna skupina na čÑst" - -msgid "PartitionChooser.pieLink.text" -msgstr "Zobrazit kolÑč" - -msgid "PartitionChooser.showpie.label" -msgstr "Zobrazit kolÑč" - -msgid "PartitionChooser.hidepie.label" -msgstr "SkrΓ½t kolÑč" - -msgid "PartitionChooser.refreshButton.toolTipText" -msgstr "Obnovit" diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/es.po b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/es.po deleted file mode 100644 index 6db8b13144..0000000000 --- a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/es.po +++ /dev/null @@ -1,70 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:07+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "Actions/Window/org-gephi-desktop-partition-PartitionAction.instance" -msgstr "Particionamiento" - -msgid "CTL_PartitionAction" -msgstr "Particionamiento" - -msgid "CTL_PartitionTopComponent" -msgstr "Particionamiento" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interfaz de usuario del mΓ³dulo Partition" - -msgid "PartitionChooser.applyButton.text" -msgstr "Aplicar" - -msgid "PartitionChooser.choose.text" -msgstr "---Elige un parΓ‘metro de particionamiento" - -msgid "PartitionChooser.busyMessage" -msgstr "Construyendo..." - -msgid "PartitionToolbar.nodes.label" -msgstr "Nodos" - -msgid "PartitionToolbar.edges.label" -msgstr "Aristas" - -msgid "PartitionChooser.groupLink.text" -msgstr "Agrupar" - -msgid "PartitionChooser.group.label" -msgstr "Agrupar" - -msgid "PartitionChooser.ungroup.label" -msgstr "Desagrupar" - -msgid "PartitionChooser.groupLink.toolTipText" -msgstr "Agrupar las particiones, un grupo por particiΓ³n" - -msgid "PartitionChooser.pieLink.text" -msgstr "Mostrar grΓ‘fica circular" - -msgid "PartitionChooser.showpie.label" -msgstr "Mostrar grΓ‘fica circular" - -msgid "PartitionChooser.hidepie.label" -msgstr "Ocultar grΓ‘fica circular" - -msgid "PartitionChooser.refreshButton.toolTipText" -msgstr "Refrescar" diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/fr.po b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/fr.po deleted file mode 100644 index d9080fc62a..0000000000 --- a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/fr.po +++ /dev/null @@ -1,70 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:07+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "Actions/Window/org-gephi-desktop-partition-PartitionAction.instance" -msgstr "Partition" - -msgid "CTL_PartitionAction" -msgstr "Partition" - -msgid "CTL_PartitionTopComponent" -msgstr "Partition" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interface utilisateur du module Partition" - -msgid "PartitionChooser.applyButton.text" -msgstr "Appliquer" - -msgid "PartitionChooser.choose.text" -msgstr "Choisissez un paramΓ¨tre de partitionnement" - -msgid "PartitionChooser.busyMessage" -msgstr "Construction en cours..." - -msgid "PartitionToolbar.nodes.label" -msgstr "Noeuds" - -msgid "PartitionToolbar.edges.label" -msgstr "Liens" - -msgid "PartitionChooser.groupLink.text" -msgstr "Grouper" - -msgid "PartitionChooser.group.label" -msgstr "Grouper" - -msgid "PartitionChooser.ungroup.label" -msgstr "DΓ©grouper" - -msgid "PartitionChooser.groupLink.toolTipText" -msgstr "Grouper les partitions, un groupe par partition" - -msgid "PartitionChooser.pieLink.text" -msgstr "Afficher le graphique" - -msgid "PartitionChooser.showpie.label" -msgstr "Afficher le graphique" - -msgid "PartitionChooser.hidepie.label" -msgstr "Masquer le graphique" - -msgid "PartitionChooser.refreshButton.toolTipText" -msgstr "Rafraichir" diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/ja.po b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/ja.po deleted file mode 100644 index 9a3c507642..0000000000 --- a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/ja.po +++ /dev/null @@ -1,70 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-21 02:40+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "Actions/Window/org-gephi-desktop-partition-PartitionAction.instance" -msgstr "パーティション" - -msgid "CTL_PartitionAction" -msgstr "パーティション" - -msgid "CTL_PartitionTopComponent" -msgstr "パーティション" - -msgid "OpenIDE-Module-Short-Description" -msgstr "パーティションUI" - -msgid "PartitionChooser.applyButton.text" -msgstr "適用" - -msgid "PartitionChooser.choose.text" -msgstr "---γƒ‘γƒΌγƒ†γ‚£γ‚·γƒ§γƒ³γƒ‘γƒ©γƒ‘γƒΌγ‚Ώγ‚’ιΈζŠž" - -msgid "PartitionChooser.busyMessage" -msgstr "ζ§‹η―‰δΈ­..." - -msgid "PartitionToolbar.nodes.label" -msgstr "γƒŽγƒΌγƒ‰" - -msgid "PartitionToolbar.edges.label" -msgstr "θΎΊ" - -msgid "PartitionChooser.groupLink.text" -msgstr "グループ" - -msgid "PartitionChooser.group.label" -msgstr "γ‚°γƒ«γƒΌγƒ—εŒ–" - -msgid "PartitionChooser.ungroup.label" -msgstr "γ‚°γƒ«γƒΌγƒ—εŒ–θ§£ι™€" - -msgid "PartitionChooser.groupLink.toolTipText" -msgstr "γƒ‘γƒΌγƒ†γ‚£γ‚·γƒ§γƒ³γ‚’γ‚°γƒ«γƒΌγƒ—εŒ–γ€γƒ‘γƒΌγƒ†γ‚£γ‚·γƒ§γƒ³γ«γ€γοΌ‘γ‚°γƒ«γƒΌγƒ—" - -msgid "PartitionChooser.pieLink.text" -msgstr "円グラフを葨瀺" - -msgid "PartitionChooser.showpie.label" -msgstr "円グラフを葨瀺" - -msgid "PartitionChooser.hidepie.label" -msgstr "ε††γ‚°γƒ©γƒ•γ‚’ιš γ™" - -msgid "PartitionChooser.refreshButton.toolTipText" -msgstr "γƒͺフレッシγƒ₯" diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/org-gephi-desktop-partition.pot b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/org-gephi-desktop-partition.pot deleted file mode 100644 index 92f5bf00b3..0000000000 --- a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/org-gephi-desktop-partition.pot +++ /dev/null @@ -1,67 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "Actions/Window/org-gephi-desktop-partition-PartitionAction.instance" -msgstr "Partition" - -msgid "CTL_PartitionAction" -msgstr "Partition" - -msgid "CTL_PartitionTopComponent" -msgstr "Partition" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Partition UI" - -msgid "PartitionChooser.applyButton.text" -msgstr "Apply" - -msgid "PartitionChooser.choose.text" -msgstr "---Choose a partition parameter" - -msgid "PartitionChooser.busyMessage" -msgstr "Building..." - -msgid "PartitionToolbar.nodes.label" -msgstr "Nodes" - -msgid "PartitionToolbar.edges.label" -msgstr "Edges" - -msgid "PartitionChooser.groupLink.text" -msgstr "Group" - -msgid "PartitionChooser.group.label" -msgstr "Group" - -msgid "PartitionChooser.ungroup.label" -msgstr "Ungroup" - -msgid "PartitionChooser.groupLink.toolTipText" -msgstr "Group the partition, one group per part" - -msgid "PartitionChooser.pieLink.text" -msgstr "Show Pie" - -msgid "PartitionChooser.showpie.label" -msgstr "Show Pie" - -msgid "PartitionChooser.hidepie.label" -msgstr "Hide Pie" - -msgid "PartitionChooser.refreshButton.toolTipText" -msgstr "Refresh" diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/pt_BR.po b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/pt_BR.po deleted file mode 100644 index d1b3fc099e..0000000000 --- a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/pt_BR.po +++ /dev/null @@ -1,70 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 17:42+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "Actions/Window/org-gephi-desktop-partition-PartitionAction.instance" -msgstr "PartiΓ§Γ£o" - -msgid "CTL_PartitionAction" -msgstr "PartiΓ§Γ£o" - -msgid "CTL_PartitionTopComponent" -msgstr "PartiΓ§Γ£o" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interface de usuΓ‘rio de partiΓ§Γ£o" - -msgid "PartitionChooser.applyButton.text" -msgstr "Aplicar" - -msgid "PartitionChooser.choose.text" -msgstr "--- Escolha um parΓ’metro de partiΓ§Γ£o" - -msgid "PartitionChooser.busyMessage" -msgstr "Construindo..." - -msgid "PartitionToolbar.nodes.label" -msgstr "NΓ³s" - -msgid "PartitionToolbar.edges.label" -msgstr "Arestas" - -msgid "PartitionChooser.groupLink.text" -msgstr "Agrupar" - -msgid "PartitionChooser.group.label" -msgstr "Agrupar" - -msgid "PartitionChooser.ungroup.label" -msgstr "Desagrupar" - -msgid "PartitionChooser.groupLink.toolTipText" -msgstr "Agrupar as partiΓ§Γ΅es, um grupo por partiΓ§Γ£o" - -msgid "PartitionChooser.pieLink.text" -msgstr "Exibir grΓ‘fico de pizza" - -msgid "PartitionChooser.showpie.label" -msgstr "Exibir grΓ‘fico de pizza" - -msgid "PartitionChooser.hidepie.label" -msgstr "Ocultar grΓ‘fico de pizza" - -msgid "PartitionChooser.refreshButton.toolTipText" -msgstr "Atualizar" diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/resources/apply.gif b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/resources/apply.gif deleted file mode 100644 index 8a35c4c259..0000000000 Binary files a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/resources/apply.gif and /dev/null differ diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/resources/cluster.png b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/resources/cluster.png deleted file mode 100644 index 9e446c5aa1..0000000000 Binary files a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/resources/cluster.png and /dev/null differ diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/resources/icon.png b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/resources/icon.png deleted file mode 100644 index 6820cf84be..0000000000 Binary files a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/resources/icon.png and /dev/null differ diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/resources/pie.png b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/resources/pie.png deleted file mode 100644 index 85c514a749..0000000000 Binary files a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/resources/pie.png and /dev/null differ diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/resources/refresh.png b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/resources/refresh.png deleted file mode 100644 index fb26ddcd6b..0000000000 Binary files a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/resources/refresh.png and /dev/null differ diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/resources/small.png b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/resources/small.png deleted file mode 100644 index adc3bc42de..0000000000 Binary files a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/resources/small.png and /dev/null differ diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/ru.po b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/ru.po deleted file mode 100644 index ab73efff8a..0000000000 --- a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/ru.po +++ /dev/null @@ -1,70 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 15:25+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "Actions/Window/org-gephi-desktop-partition-PartitionAction.instance" -msgstr "Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅" - -msgid "CTL_PartitionAction" -msgstr "Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅" - -msgid "CTL_PartitionTopComponent" -msgstr "Π Π°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Partition UI" - -msgid "PartitionChooser.applyButton.text" -msgstr "ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ" - -msgid "PartitionChooser.choose.text" -msgstr "---Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ для раздСлСния" - -msgid "PartitionChooser.busyMessage" -msgstr "Расчёт..." - -msgid "PartitionToolbar.nodes.label" -msgstr "Π£Π·Π»Ρ‹" - -msgid "PartitionToolbar.edges.label" -msgstr "Π Ρ‘Π±Ρ€Π°" - -msgid "PartitionChooser.groupLink.text" -msgstr "Π‘Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ" - -msgid "PartitionChooser.group.label" -msgstr "Π‘Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ" - -msgid "PartitionChooser.ungroup.label" -msgstr "Π Π°Π·Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ" - -msgid "PartitionChooser.groupLink.toolTipText" -msgstr "Π‘Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡƒΠ·Π»Ρ‹, ΠΎΠ΄ΠΈΠ½ Π½ΠΎΠ²Ρ‹ΠΉ ΡƒΠ·Π΅Π» Π½Π° ΠΊΠ°ΠΆΠ΄ΡƒΡŽ Ρ‚Π΅ΠΊΡƒΡ‰ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ" - -msgid "PartitionChooser.pieLink.text" -msgstr "ΠžΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ piechart" - -msgid "PartitionChooser.showpie.label" -msgstr "ΠžΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ piechart" - -msgid "PartitionChooser.hidepie.label" -msgstr "Π‘ΠΊΡ€Ρ‹Ρ‚ΡŒ piechart" - -msgid "PartitionChooser.refreshButton.toolTipText" -msgstr "ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ" diff --git a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/zh_CN.po b/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/zh_CN.po deleted file mode 100644 index 4966ebfa9f..0000000000 --- a/modules/DesktopAppearance/src/main/resources/org/gephi/desktop/partition/zh_CN.po +++ /dev/null @@ -1,69 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:16+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "Actions/Window/org-gephi-desktop-partition-PartitionAction.instance" -msgstr "εˆ†ε‰²" - -msgid "CTL_PartitionAction" -msgstr "εˆ†ε‰²" - -msgid "CTL_PartitionTopComponent" -msgstr "εˆ†ε‰²" - -msgid "OpenIDE-Module-Short-Description" -msgstr "εˆ†ε‰²η•Œι’" - -msgid "PartitionChooser.applyButton.text" -msgstr "应用" - -msgid "PartitionChooser.choose.text" -msgstr "---选择一δΈͺεˆ†ε‰²ε‚ζ•°" - -msgid "PartitionChooser.busyMessage" -msgstr "建立……" - -msgid "PartitionToolbar.nodes.label" -msgstr "θŠ‚η‚Ή" - -msgid "PartitionToolbar.edges.label" -msgstr "θΎΉ" - -msgid "PartitionChooser.groupLink.text" -msgstr "η»„" - -msgid "PartitionChooser.group.label" -msgstr "η»„" - -msgid "PartitionChooser.ungroup.label" -msgstr "ε–ζΆˆη»„" - -msgid "PartitionChooser.groupLink.toolTipText" -msgstr "εˆ†ε‰²η»“ζžœθΏ›θ‘Œεˆ†η»„οΌŒζ―ιƒ¨εˆ†δΈ€η»„" - -msgid "PartitionChooser.pieLink.text" -msgstr "显瀺ι₯Όε›Ύ" - -msgid "PartitionChooser.showpie.label" -msgstr "显瀺ι₯Όε›Ύ" - -msgid "PartitionChooser.hidepie.label" -msgstr "ιšθ—ι₯Όε›Ύ" - -msgid "PartitionChooser.refreshButton.toolTipText" -msgstr "εˆ·ζ–°" diff --git a/modules/DesktopAppearance/src/test/java/org/gephi/desktop/appearance/AppearanceUIModelTest.java b/modules/DesktopAppearance/src/test/java/org/gephi/desktop/appearance/AppearanceUIModelTest.java new file mode 100644 index 0000000000..49325316ea --- /dev/null +++ b/modules/DesktopAppearance/src/test/java/org/gephi/desktop/appearance/AppearanceUIModelTest.java @@ -0,0 +1,41 @@ +package org.gephi.desktop.appearance; + +import javax.swing.AbstractButton; +import javax.swing.Icon; +import javax.swing.ImageIcon; +import javax.swing.JPanel; +import org.gephi.appearance.AppearanceModelImpl; +import org.gephi.appearance.api.Function; +import org.gephi.appearance.api.Partition; +import org.gephi.appearance.api.Ranking; +import org.gephi.appearance.plugin.UniqueElementColorTransformer; +import org.gephi.appearance.spi.PartitionTransformer; +import org.gephi.appearance.spi.RankingTransformer; +import org.gephi.appearance.spi.SimpleTransformer; +import org.gephi.appearance.spi.Transformer; +import org.gephi.appearance.spi.TransformerCategory; +import org.gephi.appearance.spi.TransformerUI; +import org.gephi.graph.GraphGenerator; +import org.gephi.graph.api.Element; +import org.gephi.ui.appearance.plugin.category.DefaultCategory; +import org.junit.Assert; +import org.junit.Test; +import org.netbeans.junit.MockServices; +import org.openide.util.NbBundle; + +public class AppearanceUIModelTest { + + @Test + public void testDefault() { + GraphGenerator generator = GraphGenerator.build().generateTinyGraph(); + AppearanceModelImpl model = new AppearanceModelImpl(generator.getWorkspace()); + AppearanceUIModel uiModel = new AppearanceUIModel(model); + + Assert.assertSame(DefaultCategory.COLOR, uiModel.getSelectedCategory()); + Assert.assertSame(AppearanceUIController.NODE_ELEMENT, uiModel.getSelectedElementClass()); + Function selectedFunction = uiModel.getSelectedFunction(); + Assert.assertNotNull(selectedFunction); + + Assert.assertEquals(UniqueElementColorTransformer.class, selectedFunction.getTransformer().getClass()); + } +} diff --git a/modules/DesktopAppearance/src/test/java/org/gephi/desktop/appearance/PersistenceProviderTest.java b/modules/DesktopAppearance/src/test/java/org/gephi/desktop/appearance/PersistenceProviderTest.java new file mode 100644 index 0000000000..b9d878a971 --- /dev/null +++ b/modules/DesktopAppearance/src/test/java/org/gephi/desktop/appearance/PersistenceProviderTest.java @@ -0,0 +1,87 @@ +package org.gephi.desktop.appearance; + +import org.gephi.appearance.api.Function; +import org.gephi.appearance.plugin.RankingElementColorTransformer; +import org.gephi.appearance.plugin.RankingNodeSizeTransformer; +import org.gephi.appearance.plugin.UniqueElementColorTransformer; +import org.gephi.appearance.plugin.UniqueNodeSizeTransformer; +import org.gephi.desktop.appearance.utils.Utils; +import org.gephi.project.api.Workspace; +import org.gephi.project.io.utils.GephiFormat; +import org.gephi.ui.appearance.plugin.RankingElementColorTransformerUI; +import org.gephi.ui.appearance.plugin.RankingElementSizeTransformerUI; +import org.gephi.ui.appearance.plugin.category.DefaultCategory; +import org.junit.Assert; +import org.junit.Test; +import org.openide.util.Lookup; + +public class PersistenceProviderTest { + + @Test + public void testEmpty() throws Exception { + AppearanceUIModel model = Utils.newAppearanceUIModel(); + + GephiFormat + .testXMLPersistenceProvider(new AppearanceUIModelPersistenceProvider(), model.getWorkspace()); + } + + @Test + public void testUniqueColor() throws Exception { + AppearanceUIModel model = Utils.newAppearanceUIModel(); + Function function = Utils.findNodeFunction(model, UniqueElementColorTransformer.class); + model.setSelectedFunction(function); + Assert.assertNotNull(function); + Assert.assertFalse(model.savedProperties.isEmpty()); + + Workspace workspace = GephiFormat + .testXMLPersistenceProvider(new AppearanceUIModelPersistenceProvider(), model.getWorkspace()); + AppearanceUIModel readModel = workspace.getLookup().lookup(AppearanceUIModel.class); + Assert.assertEquals(model.savedProperties, readModel.savedProperties); + } + + @Test + public void testUniqueSize() throws Exception { + AppearanceUIModel model = Utils.newAppearanceUIModel(); + Function function = Utils.findNodeFunction(model, UniqueNodeSizeTransformer.class); + Assert.assertNotNull(function); + model.setSelectedCategory(DefaultCategory.SIZE); + model.setSelectedFunction(function); + model.saveTransformerProperties(); + Assert.assertTrue(model.savedProperties.containsKey(function)); + + Workspace workspace = GephiFormat + .testXMLPersistenceProvider(new AppearanceUIModelPersistenceProvider(), model.getWorkspace()); + AppearanceUIModel readModel = workspace.getLookup().lookup(AppearanceUIModel.class); + Assert.assertEquals(model.savedProperties, readModel.savedProperties); + } + + @Test + public void testRankingColor() throws Exception { + AppearanceUIModel model = Utils.newAppearanceUIModel(); + Function function = Utils.findNodeFunction(model, RankingElementColorTransformer.class); + Assert.assertNotNull(function); + model.setSelectedTransformerUI(Lookup.getDefault().lookup(RankingElementColorTransformerUI.class)); + model.setSelectedFunction(function); + model.saveTransformerProperties(); + Assert.assertTrue(model.savedProperties.containsKey(function)); + + GephiFormat + .testXMLPersistenceProvider(new AppearanceUIModelPersistenceProvider(), model.getWorkspace()); + } + + @Test + public void testRankingSize() throws Exception { + AppearanceUIModel model = Utils.newAppearanceUIModel(); + Function function = Utils.findNodeFunction(model, RankingNodeSizeTransformer.class); + Assert.assertNotNull(function); + model.setSelectedCategory(DefaultCategory.SIZE); + model.setSelectedTransformerUI(Lookup.getDefault().lookup(RankingElementSizeTransformerUI.class)); + model.setSelectedFunction(function); + Assert.assertFalse(model.savedProperties.isEmpty()); + + Workspace workspace = GephiFormat + .testXMLPersistenceProvider(new AppearanceUIModelPersistenceProvider(), model.getWorkspace()); + AppearanceUIModel readModel = workspace.getLookup().lookup(AppearanceUIModel.class); + Assert.assertEquals(model.savedProperties, readModel.savedProperties); + } +} diff --git a/modules/DesktopAppearance/src/test/java/org/gephi/desktop/appearance/utils/Utils.java b/modules/DesktopAppearance/src/test/java/org/gephi/desktop/appearance/utils/Utils.java new file mode 100644 index 0000000000..dc844808b9 --- /dev/null +++ b/modules/DesktopAppearance/src/test/java/org/gephi/desktop/appearance/utils/Utils.java @@ -0,0 +1,33 @@ +package org.gephi.desktop.appearance.utils; + +import java.util.Arrays; +import java.util.stream.Stream; +import org.gephi.appearance.AppearanceModelImpl; +import org.gephi.appearance.api.Function; +import org.gephi.appearance.spi.Transformer; +import org.gephi.desktop.appearance.AppearanceUIModel; +import org.gephi.graph.GraphGenerator; +import org.gephi.graph.api.Node; + +public class Utils { + + public static AppearanceUIModel newAppearanceUIModel() { + GraphGenerator generator = + GraphGenerator.build().generateTinyGraph(); + AppearanceModelImpl model = new AppearanceModelImpl(generator.getWorkspace()); + model.getWorkspace().add(model); + AppearanceUIModel uiModel = new AppearanceUIModel(model); + model.getWorkspace().add(uiModel); + return uiModel; + } + + public static Function findNodeFunction(AppearanceUIModel model, Class transformer) { + Function[] functions = Stream.concat(Arrays.stream(model.getAppearanceModel().getNodeFunctions()), + Arrays.stream(model.getAppearanceModel().getEdgeFunctions())) + .toArray(Function[]::new); + + return Arrays.stream(functions).filter( + f -> f.getElementClass().isAssignableFrom(Node.class) && f.getTransformer().getClass().equals(transformer)) + .findFirst().orElse(null); + } +} diff --git a/modules/DesktopAttributes/pom.xml b/modules/DesktopAttributes/pom.xml new file mode 100644 index 0000000000..7a4abd6e65 --- /dev/null +++ b/modules/DesktopAttributes/pom.xml @@ -0,0 +1,98 @@ + + + 4.0.0 + + gephi-parent + org.gephi + 0.11.3-SNAPSHOT + ../.. + + + desktop-attributes + 0.11.3-SNAPSHOT + nbm + + DesktopAttributes + + + + ${project.groupId} + project-api + + + ${project.groupId} + graph-api + + + ${project.groupId} + datalab-api + + + ${project.groupId} + ui-utils + + + ${project.groupId} + ui-library-wrapper + + + ${project.groupId} + visualization-api + + + org.netbeans.api + org-openide-util + + + org.netbeans.api + org-openide-util-lookup + + + org.netbeans.api + org-openide-util-ui + + + org.netbeans.api + org-openide-awt + + + org.netbeans.api + org-openide-windows + + + org.netbeans.api + org-openide-explorer + + + org.netbeans.api + org-netbeans-modules-options-api + + + org.netbeans.api + org-netbeans-modules-settings + + + org.netbeans.api + org-openide-nodes + + + + + + + + + + + + org.apache.netbeans.utilities + nbm-maven-plugin + + + org.gephi.desktop.attributes.api + + + + + + diff --git a/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/AttributesTopComponent.java b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/AttributesTopComponent.java new file mode 100644 index 0000000000..8ec86f161f --- /dev/null +++ b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/AttributesTopComponent.java @@ -0,0 +1,260 @@ +package org.gephi.desktop.attributes; + +import java.awt.BorderLayout; +import java.awt.CardLayout; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.beans.PropertyChangeEvent; +import java.util.List; +import javax.swing.JButton; +import javax.swing.JCheckBoxMenuItem; +import javax.swing.JMenuItem; +import javax.swing.JPanel; +import javax.swing.JPopupMenu; +import javax.swing.JToolBar; +import org.gephi.desktop.attributes.edit.EditPanel; +import org.gephi.desktop.attributes.selection.SelectionPanel; +import org.gephi.graph.api.Column; +import org.netbeans.api.settings.ConvertAsProperties; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; +import org.openide.windows.TopComponent; + +@ConvertAsProperties(dtd = "-//org.gephi.desktop.attributes//Attributes//EN", + autostore = false) +@TopComponent.Description(preferredID = "AttributesTopComponent", + iconBase = "DesktopAttributes/edit.svg", + persistenceType = TopComponent.PERSISTENCE_ALWAYS) +@TopComponent.Registration(mode = "rankingmode", openAtStartup = false, roles = {"overview", "datalab"}, position = 20) +@ActionID(category = "Window", id = "org.gephi.desktop.attributes.AttributesTopComponent") +@ActionReference(path = "Menu/Window", position = 1500) +@TopComponent.OpenActionRegistration(displayName = "#CTL_AttributesTopComponent", + preferredID = "AttributesTopComponent") +public final class AttributesTopComponent extends TopComponent implements AttributesUIModelListener { + + private static final String SELECTION_CARD = "selection"; + private static final String EDIT_CARD = "edit"; + + private final CardLayout cardLayout; + private final JPanel cardPanel; + private final EditPanel editPanel; + private final SelectionPanel selectionPanel; + private final JButton columnsButton; + + private final AttributesUIControllerImpl controller; + + // Model + private AttributesUIModelImpl model; + + public AttributesTopComponent() { + // Register + controller = Lookup.getDefault().lookup(AttributesUIControllerImpl.class); + controller.addPropertyChangeListener(this); + + setName(NbBundle.getMessage(AttributesTopComponent.class, "CTL_AttributesTopComponent")); + + putClientProperty(TopComponent.PROP_MAXIMIZATION_DISABLED, Boolean.TRUE); + + setLayout(new BorderLayout()); + + cardLayout = new CardLayout(); + cardPanel = new JPanel(cardLayout); + + selectionPanel = new SelectionPanel(); + editPanel = new EditPanel(); + + cardPanel.add(selectionPanel, SELECTION_CARD); + cardPanel.add(editPanel, EDIT_CARD); + + cardLayout.show(cardPanel, SELECTION_CARD); + + add(cardPanel, BorderLayout.CENTER); + + JToolBar toolbar = new JToolBar(); + toolbar.setFloatable(false); + toolbar.setRollover(true); + + columnsButton = new JButton( + ImageUtilities.loadImageIcon("DesktopAttributes/column.svg", false)); + columnsButton.setText( + NbBundle.getMessage(AttributesTopComponent.class, "AttributesTopComponent.columnsButton.text")); + columnsButton.setToolTipText( + NbBundle.getMessage(AttributesTopComponent.class, "AttributesTopComponent.columnsButton.tooltip")); + columnsButton.setFocusable(false); + columnsButton.addMouseListener(new MouseAdapter() { + @Override + public void mousePressed(MouseEvent e) { + showColumnsPopup(e); + } + }); + toolbar.add(columnsButton); + + add(toolbar, BorderLayout.SOUTH); + + // Init if needed + AttributesUIModelImpl model = controller.getModel(); + if (model != null) { + setup(model); + } else { + unsetup(); + } + } + + @Override + public void propertyChange(PropertyChangeEvent evt) { + if (evt.getPropertyName().equals(AttributesUIModelEvent.SELECTED_ELEMENTS) || + evt.getPropertyName().equals(AttributesUIModelEvent.HIDDEN_COLUMN_IDS) || + evt.getPropertyName().equals(AttributesUIModelEvent.SHOW_NULL_COLUMNS) || + evt.getPropertyName().equals(AttributesUIModelEvent.INCLUDE_PROPERTIES)) { + refreshSelection(); + } else if (evt.getPropertyName().equals(AttributesUIModelEvent.MODEL)) { + if (evt.getNewValue() == null) { + unsetup(); + } else { + setup((AttributesUIModelImpl) evt.getNewValue()); + } + } else if (evt.getPropertyName().equals(AttributesUIModelEvent.EDIT_MODE)) { + setup(this.model); + } + } + + private void refreshSelection() { + if (model == null) { + return; + } + if (model.isEditMode()) { + editPanel.refreshSelected(model); + } else { + selectionPanel.refreshSelectedNodes(model); + } + } + + private void setup(AttributesUIModelImpl model) { + this.model = model; + + if (model.isEditMode()) { + cardLayout.show(cardPanel, EDIT_CARD); + } else { + cardLayout.show(cardPanel, SELECTION_CARD); + } + columnsButton.setEnabled(true); + } + + private void unsetup() { + this.model = null; + + cardLayout.show(cardPanel, SELECTION_CARD); + columnsButton.setEnabled(false); + } + + private void showColumnsPopup(MouseEvent e) { + List columns = model.getEligibleColumns(); + + JPopupMenu popup = new JPopupMenu(); + + if (model.isEditMode()) { + JCheckBoxMenuItem includeProperties = new JCheckBoxMenuItem( + NbBundle.getMessage(AttributesTopComponent.class, + "AttributesTopComponent.includeProperties")); + includeProperties.setSelected(model.isIncludeProperties()); + includeProperties.addActionListener(evt -> { + model.setIncludeProperties(includeProperties.isSelected()); + controller.firePropertyChangeEvent( + AttributesUIModelEvent.INCLUDE_PROPERTIES, + !includeProperties.isSelected(), + includeProperties.isSelected()); + }); + popup.add(includeProperties); + } else { + JCheckBoxMenuItem showNullItem = new JCheckBoxMenuItem( + NbBundle.getMessage(AttributesTopComponent.class, + "AttributesTopComponent.showNullButton")); + showNullItem.setSelected(model.isShowNullColumns()); + showNullItem.addActionListener(evt -> { + model.setShowNullColumns(showNullItem.isSelected()); + controller.firePropertyChangeEvent( + AttributesUIModelEvent.SHOW_NULL_COLUMNS, + !showNullItem.isSelected(), + showNullItem.isSelected()); + }); + popup.add(showNullItem); + } + + popup.addSeparator(); + + if (columns.isEmpty()) { + JMenuItem emptyLabel = new JMenuItem( + NbBundle.getMessage(AttributesTopComponent.class, "AttributesTopComponent.noColumns")); + emptyLabel.setEnabled(false); + popup.add(emptyLabel); + } else { + boolean allVisible = columns.stream().allMatch(model::isColumnVisible); + boolean noneVisible = columns.stream().noneMatch(model::isColumnVisible); + + columns.stream() + .map(column -> { + JCheckBoxMenuItem item = new JCheckBoxMenuItem(column.getTitle()); + item.setSelected(model.isColumnVisible(column)); + item.addActionListener(evt -> { + model.setColumnHidden(column, !item.isSelected()); + controller.firePropertyChangeEvent( + AttributesUIModelEvent.HIDDEN_COLUMN_IDS, null, null); + }); + return item; + }) + .forEach(popup::add); + + popup.addSeparator(); + + JMenuItem selectAll = new JMenuItem( + NbBundle.getMessage(AttributesTopComponent.class, "AttributesTopComponent.selectAll")); + selectAll.setEnabled(!allVisible); + selectAll.addActionListener(evt -> { + columns.forEach(column -> model.setColumnHidden(column, false)); + controller.firePropertyChangeEvent( + AttributesUIModelEvent.HIDDEN_COLUMN_IDS, null, null); + }); + popup.add(selectAll); + + JMenuItem unselectAll = new JMenuItem( + NbBundle.getMessage(AttributesTopComponent.class, "AttributesTopComponent.unselectAll")); + unselectAll.setEnabled(!noneVisible); + unselectAll.addActionListener(evt -> { + columns.forEach(column -> model.setColumnHidden(column, true)); + controller.firePropertyChangeEvent( + AttributesUIModelEvent.HIDDEN_COLUMN_IDS, null, null); + }); + popup.add(unselectAll); + } + + popup.show(columnsButton, 0, -popup.getPreferredSize().height); + } + + public EditPanel getEditPanel() { + return editPanel; + } + + public SelectionPanel getSelectionPanel() { + return selectionPanel; + } + + @Override + public void componentOpened() { + } + + @Override + public void componentClosed() { + } + + void writeProperties(java.util.Properties p) { + p.setProperty("version", "1.0"); + } + + void readProperties(java.util.Properties p) { + String version = p.getProperty("version"); + } + +} diff --git a/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/AttributesUIControllerImpl.java b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/AttributesUIControllerImpl.java new file mode 100644 index 0000000000..7b6639acad --- /dev/null +++ b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/AttributesUIControllerImpl.java @@ -0,0 +1,306 @@ +/* + Copyright 2008-2010 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.attributes; + +import java.util.HashSet; +import java.util.Set; +import javax.swing.SwingUtilities; +import org.gephi.desktop.attributes.api.AttributesUIController; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Node; +import org.gephi.project.api.ProjectController; +import org.gephi.project.api.Workspace; +import org.gephi.project.api.WorkspaceListener; +import org.gephi.project.spi.Controller; +import org.openide.util.Exceptions; +import org.openide.util.Lookup; +import org.openide.util.lookup.ServiceProvider; +import org.openide.util.lookup.ServiceProviders; +import org.openide.windows.WindowManager; + +/** + * Implementation of EditWindowController interface of Tools API. + * + * @author Eduardo Ramos + */ +@ServiceProviders({ + @ServiceProvider(service = AttributesUIController.class), + @ServiceProvider(service = Controller.class)}) +public class AttributesUIControllerImpl implements AttributesUIController, Controller { + + private final Set listeners = new HashSet<>(); + + public AttributesUIControllerImpl() { + + Lookup.getDefault().lookup(ProjectController.class).addWorkspaceListener(new WorkspaceListener() { + + @Override + public void initialize(Workspace workspace) { + } + + @Override + public void select(Workspace workspace) { + AttributesUIModelImpl model = getModel(workspace); + firePropertyChangeEvent(AttributesUIModelEvent.MODEL, null, model); + } + + @Override + public void unselect(Workspace workspace) { + AttributesUIModelImpl model = getModel(workspace); + model.resetSelection(); + firePropertyChangeEvent(AttributesUIModelEvent.MODEL, null, null); + } + + @Override + public void close(Workspace workspace) { + } + + @Override + public void disable() { + closeWindow(); + } + }); + } + + @Override + public AttributesUIModelImpl newModel(Workspace workspace) { + return new AttributesUIModelImpl(workspace); + } + + @Override + public Class getModelClass() { + return AttributesUIModelImpl.class; + } + + protected static AttributesTopComponent findInstance() { + return (AttributesTopComponent) WindowManager.getDefault().findTopComponent("AttributesTopComponent"); + } + + private void resetSelection() { + AttributesUIModelImpl model = getModel(); + if (model != null) { + model.resetSelection(); + firePropertyChangeEvent(AttributesUIModelEvent.SELECTED_ELEMENTS, null, null); + } + } + + private void setEditMode(boolean editMode) { + AttributesUIModelImpl model = getModel(); + if (model == null) { + return; + } + if (model.isEditMode() != editMode) { + model.setEditMode(editMode); + if (editMode) { + model.resetSelection(); + firePropertyChangeEvent(AttributesUIModelEvent.SELECTED_ELEMENTS, null, null); + } + firePropertyChangeEvent(AttributesUIModelEvent.EDIT_MODE, !editMode, editMode); + } + } + + private void setSelectedNodes(Node[] nodes) { + AttributesUIModelImpl model = getModel(); + if (model == null) { + return; + } + if (model.getSelectedNodes() != nodes) { + model.setSelectedNodes(nodes); + firePropertyChangeEvent(AttributesUIModelEvent.SELECTED_ELEMENTS, null, nodes); + } + } + + private void setSelectedEdges(Edge[] edges) { + AttributesUIModelImpl model = getModel(); + if (model == null) { + return; + } + if (model.getSelectedEdges() != edges) { + model.setSelectedEdges(edges); + firePropertyChangeEvent(AttributesUIModelEvent.SELECTED_ELEMENTS, null, edges); + } + } + + @Override + public void openWindow() { + runAction(() -> { + AttributesTopComponent topComponent = findInstance(); + if (topComponent != null) { + topComponent.open(); + } + }); + + } + + @Override + public void openWindowAndRequestActive() { + runAction(() -> { + AttributesTopComponent topComponent = findInstance(); + if (topComponent != null) { + topComponent.open(); + topComponent.requestActive(); + } + }); + + } + + @Override + public void closeWindow() { + runAction(() -> { + resetSelection(); + AttributesTopComponent topComponent = findInstance(); + if (topComponent != null) { + topComponent.getEditPanel().disableEdit(); + topComponent.close(); + } + }); + } + + @Override + public boolean isOpen() { + IsOpenRunnable runnable = new IsOpenRunnable(); + if (SwingUtilities.isEventDispatchThread()) { + runnable.run(); + } else { + try { + SwingUtilities.invokeAndWait(runnable); + } catch (Exception ex) { + Exceptions.printStackTrace(ex); + } + } + return runnable.open; + } + + @Override + public void editNode(final Node node) { + runAction(() -> { + setEditMode(true); + setSelectedNodes(new Node[] {node}); + }); + } + + @Override + public void editNodes(final Node[] nodes) { + runAction(() -> { + setEditMode(true); + setSelectedNodes(nodes); + }); + } + + @Override + public void editEdge(final Edge edge) { + runAction(() -> { + setEditMode(true); + setSelectedEdges(new Edge[] {edge}); + }); + } + + @Override + public void editEdges(final Edge[] edges) { + runAction(() -> { + setEditMode(true); + setSelectedEdges(edges); + }); + } + + @Override + public void enableEdit() { + runAction(() -> { + setEditMode(true); + }); + } + + @Override + public void disableEdit() { + runAction(() -> { + setEditMode(false); + }); + } + + @Override + public void selectNodes(Node[] nodes) { + AttributesUIModelImpl model = getModel(); + if (model != null && !model.isEditMode()) { + runAction(() -> { + if (model == getModel()) { + setSelectedNodes(nodes); + } + }); + } + + } + + class IsOpenRunnable implements Runnable { + + boolean open = false; + + @Override + public void run() { + AttributesTopComponent topComponent = findInstance(); + open = topComponent != null && topComponent.isOpened(); + } + } + + public void addPropertyChangeListener(AttributesUIModelListener listener) { + listeners.add(listener); + } + + public void removePropertyChangeListener(AttributesUIModelListener listener) { + listeners.remove(listener); + } + + protected void firePropertyChangeEvent(String propertyName, Object oldValue, Object newValue) { + AttributesUIModelEvent event = new AttributesUIModelEvent(this, propertyName, oldValue, newValue); + for (AttributesUIModelListener listener : listeners) { + listener.propertyChange(event); + } + } + + private void runAction(Runnable runnable) { + if (SwingUtilities.isEventDispatchThread()) { + runnable.run(); + } else { + SwingUtilities.invokeLater(runnable); + } + } +} diff --git a/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/AttributesUIModelEvent.java b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/AttributesUIModelEvent.java new file mode 100644 index 0000000000..be4fba9e2e --- /dev/null +++ b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/AttributesUIModelEvent.java @@ -0,0 +1,18 @@ +package org.gephi.desktop.attributes; + +import java.beans.PropertyChangeEvent; + +public class AttributesUIModelEvent extends PropertyChangeEvent { + + public static String MODEL = "model"; + public static String EDIT_MODE = "mode"; + public static String HIDDEN_COLUMN_IDS = "hiddenColumnIds"; + public static String SELECTED_ELEMENTS = "selectedElements"; + public static String SHOW_NULL_COLUMNS = "showNullColumns"; + public static String INCLUDE_PROPERTIES = "includeProperties"; + + public AttributesUIModelEvent(Object source, String propertyName, + Object oldValue, Object newValue) { + super(source, propertyName, oldValue, newValue); + } +} diff --git a/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/AttributesUIModelImpl.java b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/AttributesUIModelImpl.java new file mode 100644 index 0000000000..0b0d6d198d --- /dev/null +++ b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/AttributesUIModelImpl.java @@ -0,0 +1,278 @@ +package org.gephi.desktop.attributes; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.StreamSupport; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; +import javax.xml.stream.XMLStreamWriter; +import javax.xml.stream.events.XMLEvent; +import org.gephi.desktop.attributes.api.AttributesUIModel; +import org.gephi.desktop.attributes.options.AttributesPreferences; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.Table; +import org.gephi.project.api.Workspace; +import org.gephi.project.spi.Model; +import org.gephi.project.spi.WorkspaceXMLPersistenceProvider; + +public class AttributesUIModelImpl implements AttributesUIModel, Model, WorkspaceXMLPersistenceProvider { + + private final Workspace workspace; + private final GraphModel graphModel; + private final Set hiddenNodeColumnIds = new HashSet<>(); + private final Set hiddenEdgeColumnIds = new HashSet<>(); + private boolean editMode = false; + private boolean showNullColumns = AttributesPreferences.isShowNullColumns(); + private boolean includeProperties = AttributesPreferences.isIncludeProperties(); + private Node[] selectedNodes = null; + private Edge[] selectedEdges = null; + + public AttributesUIModelImpl(Workspace workspace) { + this.workspace = workspace; + this.graphModel = workspace.getLookup().lookup(GraphModel.class); + + if (graphModel == null) { + return; + } + + // Hidden by default + hiddenNodeColumnIds.add(craftColumnId(graphModel.defaultColumns().nodeTimeSet())); + hiddenNodeColumnIds.add(craftColumnId(graphModel.defaultColumns().degree())); + hiddenNodeColumnIds.add(craftColumnId(graphModel.defaultColumns().inDegree())); + hiddenNodeColumnIds.add(craftColumnId(graphModel.defaultColumns().outDegree())); + hiddenEdgeColumnIds.add(craftColumnId(graphModel.defaultColumns().edgeTimeSet())); + } + + @Override + public Workspace getWorkspace() { + return workspace; + } + + + public GraphModel getGraphModel() { + return graphModel; + } + + public List getEligibleColumns() { + if (selectedEdges != null) { + return getEligibleEdgeColumns(); + } + return getEligibleNodeColumns(); + } + + public List getEligibleNodeColumns() { + Table nodeTable = graphModel.getNodeTable(); + final boolean directed = graphModel.isDirected(); + final Column nodeTimesetCol = graphModel.defaultColumns().nodeTimeSet(); + final Column nodeDegreeCol = graphModel.defaultColumns().degree(); + final Column inDegreeCol = graphModel.defaultColumns().inDegree(); + final Column outDegreeCol = graphModel.defaultColumns().outDegree(); + List cols = StreamSupport.stream(nodeTable.spliterator(), false) + .filter(column -> { + if (column == nodeTimesetCol && graphModel.isDynamic()) { + return true; + } + if (column == nodeDegreeCol) { + return !editMode; + } + return !column.isProperty(); + }).collect(Collectors.toCollection(ArrayList::new)); + if (!editMode) { + if (directed) { + cols.add(0, outDegreeCol); + cols.add(0, inDegreeCol); + } + cols.add(0, nodeDegreeCol); + } + return cols; + } + + public List getEligibleEdgeColumns() { + Table edgeTable = graphModel.getEdgeTable(); + final Column edgeTimesetCol = graphModel.defaultColumns().edgeTimeSet(); + return StreamSupport.stream(edgeTable.spliterator(), false) + .filter(column -> { + if (column == edgeTimesetCol && graphModel.isDynamic()) { + return true; + } + return !column.isProperty(); + }).collect(Collectors.toCollection(ArrayList::new)); + } + + public List getSelectedColumns() { + return getEligibleColumns().stream().filter(this::isColumnVisible).toList(); + } + + public Node[] getSelectedNodes() { + return selectedNodes; + } + + public void setSelectedNodes(Node[] selectedNodes) { + this.selectedNodes = selectedNodes; + this.selectedEdges = null; + } + + public void resetSelection() { + this.selectedNodes = null; + this.selectedEdges = null; + } + + public Edge[] getSelectedEdges() { + return selectedEdges; + } + + public void setSelectedEdges(Edge[] selectedEdges) { + this.selectedEdges = selectedEdges; + this.selectedNodes = null; + } + + public boolean isEditMode() { + return editMode; + } + + public void setEditMode(boolean editMode) { + this.editMode = editMode; + } + + public boolean isShowNullColumns() { + return showNullColumns; + } + + public void setShowNullColumns(boolean showNullColumns) { + this.showNullColumns = showNullColumns; + } + + public boolean isIncludeProperties() { + return includeProperties; + } + + public void setIncludeProperties(boolean includeProperties) { + this.includeProperties = includeProperties; + } + + public boolean isColumnVisible(Column column) { + return !getHiddenSetForColumn(column).contains(craftColumnId(column)); + } + + private Set getHiddenSetForColumn(Column column) { + if (column.getTable() == graphModel.getEdgeTable()) { + return hiddenEdgeColumnIds; + } + return hiddenNodeColumnIds; + } + + private String craftColumnId(Column column) { + String id = column.getId(); + if (column.isProperty()) { + id = "_property_" + id; + } + return id; + } + + public void setColumnHidden(Column column, boolean hidden) { + String columnId = craftColumnId(column); + Set hiddenSet = getHiddenSetForColumn(column); + if (hidden) { + hiddenSet.add(columnId); + } else { + hiddenSet.remove(columnId); + } + } + + public Set getHiddenNodeColumnIds() { + return Collections.unmodifiableSet(hiddenNodeColumnIds); + } + + public Set getHiddenEdgeColumnIds() { + return Collections.unmodifiableSet(hiddenEdgeColumnIds); + } + + @Override + public void writeXML(XMLStreamWriter writer, Workspace workspace) { + try { + writer.writeStartElement("editmode"); + writer.writeCharacters(String.valueOf(editMode)); + writer.writeEndElement(); + + writer.writeStartElement("shownullcolumns"); + writer.writeCharacters(String.valueOf(showNullColumns)); + writer.writeEndElement(); + + writer.writeStartElement("includeproperties"); + writer.writeCharacters(String.valueOf(includeProperties)); + writer.writeEndElement(); + + for (String columnId : hiddenNodeColumnIds) { + writer.writeStartElement("hiddencolumn"); + writer.writeAttribute("id", columnId); + writer.writeEndElement(); + } + + for (String columnId : hiddenEdgeColumnIds) { + writer.writeStartElement("hiddenedgecolumn"); + writer.writeAttribute("id", columnId); + writer.writeEndElement(); + } + } catch (XMLStreamException ex) { + throw new RuntimeException(ex); + } + } + + @Override + public void readXML(XMLStreamReader reader, Workspace workspace) { + try { + boolean end = false; + boolean readHiddenNodeColumns = false; + boolean readHiddenEdgeColumns = false; + while (reader.hasNext() && !end) { + int eventType = reader.next(); + if (eventType == XMLEvent.START_ELEMENT) { + String name = reader.getLocalName(); + if ("editmode".equalsIgnoreCase(name)) { + editMode = Boolean.parseBoolean(reader.getElementText()); + } else if ("shownullcolumns".equalsIgnoreCase(name)) { + showNullColumns = Boolean.parseBoolean(reader.getElementText()); + } else if ("includeproperties".equalsIgnoreCase(name)) { + includeProperties = Boolean.parseBoolean(reader.getElementText()); + } else if ("hiddencolumn".equalsIgnoreCase(name)) { + if (!readHiddenNodeColumns) { + hiddenNodeColumnIds.clear(); + readHiddenNodeColumns = true; + } + String id = reader.getAttributeValue(null, "id"); + if (id != null) { + hiddenNodeColumnIds.add(id); + } + } else if ("hiddenedgecolumn".equalsIgnoreCase(name)) { + if (!readHiddenEdgeColumns) { + hiddenEdgeColumnIds.clear(); + readHiddenEdgeColumns = true; + } + String id = reader.getAttributeValue(null, "id"); + if (id != null) { + hiddenEdgeColumnIds.add(id); + } + } + } else if (eventType == XMLEvent.END_ELEMENT) { + if (getIdentifier().equalsIgnoreCase(reader.getLocalName())) { + end = true; + } + } + } + } catch (XMLStreamException ex) { + throw new RuntimeException(ex); + } + } + + @Override + public String getIdentifier() { + return "attributesuimodel"; + } +} diff --git a/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/AttributesUIModelListener.java b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/AttributesUIModelListener.java new file mode 100644 index 0000000000..2900de7c9e --- /dev/null +++ b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/AttributesUIModelListener.java @@ -0,0 +1,6 @@ +package org.gephi.desktop.attributes; + +import java.beans.PropertyChangeListener; + +public interface AttributesUIModelListener extends PropertyChangeListener { +} diff --git a/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/api/AttributesUIController.java b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/api/AttributesUIController.java new file mode 100644 index 0000000000..154bafd33a --- /dev/null +++ b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/api/AttributesUIController.java @@ -0,0 +1,75 @@ +/* +Copyright 2008-2010 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.attributes.api; + +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Node; + +/** + * Controller API for requesting the opening and usage of edit window. + * + * @author Eduardo Ramos + */ +public interface AttributesUIController { + void openWindow(); + + void openWindowAndRequestActive(); + + void closeWindow(); + + boolean isOpen(); + + void editNode(Node node); + + void editNodes(final Node[] nodes); + + void editEdge(final Edge edge); + + void editEdges(final Edge[] edges); + + void enableEdit(); + + void disableEdit(); + + void selectNodes(final Node[] nodes); +} diff --git a/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/api/AttributesUIModel.java b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/api/AttributesUIModel.java new file mode 100644 index 0000000000..a67b3e6cc8 --- /dev/null +++ b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/api/AttributesUIModel.java @@ -0,0 +1,4 @@ +package org.gephi.desktop.attributes.api; + +public interface AttributesUIModel { +} diff --git a/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/edit/AttributeValueWrapper.java b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/edit/AttributeValueWrapper.java new file mode 100644 index 0000000000..cb74db43d6 --- /dev/null +++ b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/edit/AttributeValueWrapper.java @@ -0,0 +1,47 @@ +package org.gephi.desktop.attributes.edit; + +interface AttributeValueWrapper { + + public Byte getValueByte(); + + public void setValueByte(Byte object); + + public Short getValueShort(); + + public void setValueShort(Short object); + + public Character getValueCharacter(); + + public void setValueCharacter(Character object); + + public String getValueString(); + + public void setValueString(String object); + + public Double getValueDouble(); + + public void setValueDouble(Double object); + + public Float getValueFloat(); + + public void setValueFloat(Float object); + + public Integer getValueInteger(); + + public void setValueInteger(Integer object); + + public Boolean getValueBoolean(); + + public void setValueBoolean(Boolean object); + + public Long getValueLong(); + + public void setValueLong(Long object); + + /** + * **** Other types are not supported by property editors by default so they are used and parsed as Strings ***** + */ + public String getValueAsString(); + + public void setValueAsString(String value); +} diff --git a/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/edit/EditEdges.java b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/edit/EditEdges.java new file mode 100644 index 0000000000..f2f3dc5114 --- /dev/null +++ b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/edit/EditEdges.java @@ -0,0 +1,384 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian , Mathieu Jacomy, Julian Bilcke, Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.attributes.edit; + +import java.awt.Color; +import java.beans.PropertyEditor; +import java.beans.PropertyEditorManager; +import java.time.ZoneId; +import org.gephi.datalab.api.AttributeColumnsController; +import org.gephi.desktop.attributes.AttributesUIModelImpl; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.TextProperties; +import org.gephi.graph.api.TimeFormat; +import org.openide.nodes.AbstractNode; +import org.openide.nodes.Children; +import org.openide.nodes.PropertySupport; +import org.openide.nodes.Sheet; +import org.openide.util.Exceptions; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +/** + * PropertySheet that allows to edit one or more edges. If multiple node edition + * mode is used at first all values will be shown as blank but will change with + * the editions and all edges will be set the values that the user inputs. + * + * @author Mathieu Bastian + */ +public class EditEdges extends AbstractNode { + + private final Edge[] edges; + private final boolean multipleEdges; + private final TimeFormat currentTimeFormat; + private final ZoneId dateTimeZone; + private final AttributesUIModelImpl model; + private PropertySet[] propertySets; + + /** + * Single edge edition mode will always be enabled with this single node + * constructor + * + * @param edge + */ + public EditEdges(Edge edge) { + this(new Edge[] {edge}, null); + } + + /** + * If the edges array has more than one element, multiple edges edition mode + * will be enabled. + * + * @param edges + */ + public EditEdges(Edge[] edges) { + this(edges, null); + } + + public EditEdges(Edge[] edges, AttributesUIModelImpl model) { + super(Children.LEAF); + this.edges = edges; + this.model = model; + multipleEdges = edges.length > 1; + if (multipleEdges) { + setName(NbBundle.getMessage(EditEdges.class, "EditEdges.multiple.elements")); + } else { + setName(getLabelOrId(edges[0])); + } + + GraphController gc = Lookup.getDefault().lookup(GraphController.class); + currentTimeFormat = gc.getGraphModel().getTimeFormat(); + dateTimeZone = gc.getGraphModel().getTimeZone(); + } + + @Override + public PropertySet[] getPropertySets() { + if (model != null && !model.isIncludeProperties()) { + propertySets = new PropertySet[] {prepareEdgesAttributes()}; + } else { + propertySets = new PropertySet[] {prepareEdgesProperties(), prepareEdgesAttributes()}; + } + return propertySets; + } + + /** + * Retrieves the label of the provided edge if available. If the label is null + * or empty, the edge's ID is converted to a string and returned instead. + * + * @param edge the edge object from which the label or ID will be retrieved + * @return the label of the edge if present and non-empty; otherwise, the string representation of the edge's ID + */ + private static String getLabelOrId(Edge edge) { + String label = edge.getLabel(); + if (label == null || label.isEmpty()) { + label = edge.getId().toString(); + } + return label; + } + + /** + * Prepare set of attributes of the edges. + * + * @return Set of these attributes + */ + private Sheet.Set prepareEdgesAttributes() { + try { + AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); + Sheet.Set set = new Sheet.Set(); + set.setName("attributes"); + if (edges.length > 1) { + set.setDisplayName(NbBundle.getMessage(EditEdges.class, "EditEdges.attributes.text.multiple")); + } else { + set.setDisplayName( + NbBundle.getMessage(EditEdges.class, "EditEdges.attributes.text", getLabelOrId(edges[0]))); + } + + Edge row = edges[0]; + AttributeValueWrapper wrap; + for (Column column : row.getAttributeColumns()) { + if (model != null && !isAlwaysVisibleColumn(column) && !model.isColumnVisible(column)) { + continue; + } + if (multipleEdges) { + wrap = new MultipleRowsAttributeValueWrapper(edges, column, currentTimeFormat, dateTimeZone); + } else { + wrap = new SingleRowAttributeValueWrapper(edges[0], column, currentTimeFormat, dateTimeZone); + } + Class type = column.getTypeClass(); + Property p; + PropertyEditor propEditor = PropertyEditorManager.findEditor(type); + if (ac.canChangeColumnData(column)) { + //Editable column, provide "set" method: + if (propEditor != null && !type.isArray()) {//The type can be edited by default: + p = new PropertySupport.Reflection(wrap, type, "getValue" + type.getSimpleName(), + "setValue" + type.getSimpleName()); + } else {//Use the AttributeType as String: + p = new PropertySupport.Reflection(wrap, String.class, "getValueAsString", "setValueAsString"); + } + } else //Not editable column, do not provide "set" method: + { + if (propEditor != null) {//The type can be edited by default: + p = new PropertySupport.Reflection(wrap, type, "getValue" + type.getSimpleName(), null); + } else {//Use the AttributeType as String: + p = new PropertySupport.Reflection(wrap, String.class, "getValueAsString", null); + } + } + p.setDisplayName(column.getTitle()); + p.setName(column.getId()); + set.put(p); + } + return set; + } catch (Exception ex) { + Exceptions.printStackTrace(ex); + return null; + } + } + + /** + * Prepare set of editable properties of the node(s): size, position. + * + * @return Set of these properties + */ + private Sheet.Set prepareEdgesProperties() { + try { + if (multipleEdges) { + Sheet.Set set = new Sheet.Set(); + set.setName("properties"); + set.setDisplayName(NbBundle.getMessage(EditEdges.class, "EditEdges.properties.text.multiple")); + + Property p; + + //Color: + MultipleEdgesPropertiesWrapper edgesWrapper = new MultipleEdgesPropertiesWrapper(edges); + p = new PropertySupport.Reflection(edgesWrapper, Color.class, "getEdgesColor", "setEdgesColor"); + p.setDisplayName(NbBundle.getMessage(EditEdges.class, "EditEdges.color.text")); + p.setName("color"); + set.put(p); + + //Label color: + p = new PropertySupport.Reflection(edgesWrapper, Color.class, "getLabelsColor", "setLabelsColor"); + p.setDisplayName(NbBundle.getMessage(EditEdges.class, "EditEdges.label.color.text")); + p.setName("labelcolor"); + set.put(p); + + //Label size: + p = new PropertySupport.Reflection(edgesWrapper, Float.class, "getLabelsSize", "setLabelsSize"); + p.setDisplayName(NbBundle.getMessage(EditEdges.class, "EditEdges.label.size.text")); + p.setName("labelsize"); + set.put(p); + + //Label visible: + p = new PropertySupport.Reflection(edgesWrapper, Boolean.class, "getLabelsVisible", "setLabelsVisible"); + p.setDisplayName(NbBundle.getMessage(EditEdges.class, "EditEdges.label.visible.text")); + p.setName("labelvisible"); + set.put(p); + + return set; + } else { + Edge edge = edges[0]; + Sheet.Set set = new Sheet.Set(); + set.setName("properties"); + set.setDisplayName( + NbBundle.getMessage(EditEdges.class, "EditEdges.properties.text", getLabelOrId(edge))); + + Property p; + + //Color: + SingleEdgePropertiesWrapper edgeWrapper = new SingleEdgePropertiesWrapper(edge); + p = new PropertySupport.Reflection(edgeWrapper, Color.class, "getEdgeColor", "setEdgeColor"); + p.setDisplayName(NbBundle.getMessage(EditEdges.class, "EditEdges.color.text")); + p.setName("color"); + set.put(p); + + TextProperties textProperties = edge.getTextProperties(); + + //Label size: + p = new PropertySupport.Reflection(textProperties, Float.TYPE, "getSize", "setSize"); + p.setDisplayName(NbBundle.getMessage(EditEdges.class, "EditEdges.label.size.text")); + p.setName("labelsize"); + set.put(p); + + //Label color: + p = new PropertySupport.Reflection(edgeWrapper, Color.class, "getLabelColor", "setLabelColor"); + p.setDisplayName(NbBundle.getMessage(EditEdges.class, "EditEdges.label.color.text")); + p.setName("labelcolor"); + set.put(p); + + //Label visible: + p = new PropertySupport.Reflection(textProperties, Boolean.TYPE, "isVisible", "setVisible"); + p.setDisplayName(NbBundle.getMessage(EditEdges.class, "EditEdges.label.visible.text")); + p.setName("labelvisible"); + set.put(p); + + return set; + } + } catch (Exception ex) { + Exceptions.printStackTrace(ex); + return null; + } + } + + private static boolean isAlwaysVisibleColumn(Column column) { + return column.isProperty() && + ("id".equalsIgnoreCase(column.getId()) || "label".equalsIgnoreCase(column.getId())); + } + + public static class SingleEdgePropertiesWrapper { + + private final Edge edge; + + public SingleEdgePropertiesWrapper(Edge Edge) { + this.edge = Edge; + } + + public Color getEdgeColor() { + return edge.getColor(); + } + + public void setEdgeColor(Color c) { + if (c != null) { + edge.setColor(c); + } + } + + public Color getLabelColor() { + TextProperties textProps = edge.getTextProperties(); + + return textProps.getColor(); + } + + public void setLabelColor(Color c) { + if (c != null) { + TextProperties textProps = edge.getTextProperties(); + textProps.setColor(c); + } + } + } + + public static class MultipleEdgesPropertiesWrapper { + + Edge[] edges; + //Methods and fields for multiple edges editing: + private Color edgesColor = null; + private Color labelsColor = null; + private Float labelsSize = null; + private Boolean labelsVisible = null; + + public MultipleEdgesPropertiesWrapper(Edge[] Edges) { + this.edges = Edges; + } + + public Color getEdgesColor() { + return edgesColor; + } + + public void setEdgesColor(Color c) { + if (c != null) { + edgesColor = c; + for (Edge edge : edges) { + edge.setColor(c); + } + } + } + + public Color getLabelsColor() { + return labelsColor; + } + + public void setLabelsColor(Color c) { + if (c != null) { + labelsColor = c; + for (Edge edge : edges) { + TextProperties textProps = edge.getTextProperties(); + textProps.setColor(c); + } + } + } + + public Float getLabelsSize() { + return labelsSize; + } + + public void setLabelsSize(Float size) { + labelsSize = size; + for (Edge edge : edges) { + TextProperties textProps = edge.getTextProperties(); + textProps.setSize(size); + } + } + + public Boolean getLabelsVisible() { + return labelsVisible; + } + + public void setLabelsVisible(Boolean visible) { + labelsVisible = visible; + for (Edge edge : edges) { + TextProperties textProps = edge.getTextProperties(); + textProps.setVisible(visible); + } + } + } +} diff --git a/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/edit/EditNodes.java b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/edit/EditNodes.java new file mode 100644 index 0000000000..54bfb2068d --- /dev/null +++ b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/edit/EditNodes.java @@ -0,0 +1,466 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian , Mathieu Jacomy, Julian Bilcke, Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.attributes.edit; + +import java.awt.Color; +import java.beans.PropertyEditor; +import java.beans.PropertyEditorManager; +import java.time.ZoneId; +import org.gephi.datalab.api.AttributeColumnsController; +import org.gephi.desktop.attributes.AttributesUIModelImpl; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.TextProperties; +import org.gephi.graph.api.TimeFormat; +import org.openide.nodes.AbstractNode; +import org.openide.nodes.Children; +import org.openide.nodes.PropertySupport; +import org.openide.nodes.Sheet; +import org.openide.util.Exceptions; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +/** + * PropertySheet that allows to edit one or more nodes. If multiple node edition + * mode is used at first all values will be shown as blank but will change with + * the editions and all nodes will be set the values that the user inputs. + * + * @author Mathieu Bastian + */ +public class EditNodes extends AbstractNode { + + private final Node[] nodes; + private final boolean multipleNodes; + private final TimeFormat currentTimeFormat; + private final ZoneId dateTimeZone; + private final AttributesUIModelImpl model; + private PropertySet[] propertySets; + + /** + * Single node edition mode will always be enabled with this single node + * constructor + * + * @param node + */ + public EditNodes(Node node) { + this(new Node[] {node}, null); + } + + /** + * If the nodes array has more than one element, multiple nodes edition mode + * will be enabled. + * + * @param nodes + */ + public EditNodes(Node[] nodes) { + this(nodes, null); + } + + public EditNodes(Node[] nodes, AttributesUIModelImpl model) { + super(Children.LEAF); + this.nodes = nodes; + this.model = model; + multipleNodes = nodes.length > 1; + if (multipleNodes) { + setName(NbBundle.getMessage(EditNodes.class, "EditNodes.multiple.elements")); + } else { + setName(getLabelOrId(nodes[0])); + } + GraphController gc = Lookup.getDefault().lookup(GraphController.class); + currentTimeFormat = gc.getGraphModel().getTimeFormat(); + dateTimeZone = gc.getGraphModel().getTimeZone(); + } + + @Override + public PropertySet[] getPropertySets() { + if (model != null && !model.isIncludeProperties()) { + propertySets = new PropertySet[] {prepareNodesAttributes()}; + } else { + propertySets = new PropertySet[] {prepareNodesProperties(), prepareNodesAttributes()}; + } + return propertySets; + } + + + /** + * Retrieves the label of the given node. If the label is null or empty, + * the node's ID is returned as a string instead. + * + * @param node the node from which the label or ID should be retrieved + * @return the label of the node if it exists and is not empty; otherwise, the string representation of the node's ID + */ + private static String getLabelOrId(Node node) { + String label = node.getLabel(); + if (label == null || label.isEmpty()) { + label = node.getId().toString(); + } + return label; + } + + /** + * Prepare set of attributes of the node(s). + * + * @return Set of these attributes + */ + private Sheet.Set prepareNodesAttributes() { + try { + AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); + Sheet.Set set = new Sheet.Set(); + set.setName("attributes"); + if (nodes.length > 1) { + set.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.attributes.text.multiple")); + } else { + set.setDisplayName( + NbBundle.getMessage(EditNodes.class, "EditNodes.attributes.text", getLabelOrId(nodes[0]))); + } + + Node row = nodes[0]; + AttributeValueWrapper wrap; + for (Column column : row.getAttributeColumns()) { + if (model != null && !isAlwaysVisibleColumn(column) && !model.isColumnVisible(column)) { + continue; + } + if (multipleNodes) { + wrap = new MultipleRowsAttributeValueWrapper(nodes, column, currentTimeFormat, dateTimeZone); + } else { + wrap = new SingleRowAttributeValueWrapper(nodes[0], column, currentTimeFormat, dateTimeZone); + } + + Property p; + Class type = column.getTypeClass(); + PropertyEditor propEditor = PropertyEditorManager.findEditor(type); + if (ac.canChangeColumnData(column)) { + //Editable column, provide "set" method: + if (propEditor != null && !type.isArray()) {//The type can be edited by default: + p = new PropertySupport.Reflection(wrap, type, "getValue" + type.getSimpleName(), + "setValue" + type.getSimpleName()); + } else {//Use the AttributeType as String: + p = new PropertySupport.Reflection(wrap, String.class, "getValueAsString", "setValueAsString"); + } + } else //Not editable column, do not provide "set" method: + if (propEditor != null) {//The type can be edited by default: + p = new PropertySupport.Reflection(wrap, type, "getValue" + type.getSimpleName(), null); + } else {//Use the AttributeType as String: + p = new PropertySupport.Reflection(wrap, String.class, "getValueAsString", null); + } + p.setDisplayName(column.getTitle()); + p.setName(column.getId()); + set.put(p); + } + return set; + } catch (Exception ex) { + Exceptions.printStackTrace(ex); + return null; + } + } + + /** + * Prepare set of editable properties of the node(s): size, position. + * + * @return Set of these properties + */ + private Sheet.Set prepareNodesProperties() { + try { + if (multipleNodes) { + MultipleNodesPropertiesWrapper nodesWrapper = new MultipleNodesPropertiesWrapper(nodes); + Sheet.Set set = new Sheet.Set(); + set.setName("properties"); + set.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.properties.text.multiple")); + + Property p; + //Size: + p = new PropertySupport.Reflection(nodesWrapper, Float.class, "getNodesSize", "setNodesSize"); + p.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.size.text")); + p.setName("size"); + set.put(p); + + //All position coordinates: + set.put(buildMultipleNodesGeneralPositionProperty(nodesWrapper, "x")); + set.put(buildMultipleNodesGeneralPositionProperty(nodesWrapper, "y")); + + //Color: + p = new PropertySupport.Reflection(nodesWrapper, Color.class, "getNodesColor", "setNodesColor"); + p.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.color.text")); + p.setName("color"); + set.put(p); + + //Label color: + p = new PropertySupport.Reflection(nodesWrapper, Color.class, "getLabelsColor", "setLabelsColor"); + p.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.label.color.text")); + p.setName("labelcolor"); + set.put(p); + + //Label size: + p = new PropertySupport.Reflection(nodesWrapper, Float.class, "getLabelsSize", "setLabelsSize"); + p.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.label.size.text")); + p.setName("labelsize"); + set.put(p); + + //Label visible: + p = new PropertySupport.Reflection(nodesWrapper, Boolean.class, "getLabelsVisible", "setLabelsVisible"); + p.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.label.visible.text")); + p.setName("labelvisible"); + set.put(p); + + return set; + } else { + Node node = nodes[0]; + Sheet.Set set = new Sheet.Set(); + set.setName("properties"); + set.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.properties.text", getLabelOrId(node))); + + Property p; + //Size: + p = new PropertySupport.Reflection(node, Float.TYPE, "size", "setSize"); + p.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.size.text")); + p.setName("size"); + set.put(p); + + //All position coordinates: + set.put(buildGeneralPositionProperty(node, "x")); + set.put(buildGeneralPositionProperty(node, "y")); + + //Color: + SingleNodePropertiesWrapper nodeWrapper = new SingleNodePropertiesWrapper(node); + p = new PropertySupport.Reflection(nodeWrapper, Color.class, "getNodeColor", "setNodeColor"); + p.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.color.text")); + p.setName("color"); + set.put(p); + + TextProperties textProperties = node.getTextProperties(); + + //Label size: + p = new PropertySupport.Reflection(textProperties, Float.TYPE, "getSize", "setSize"); + p.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.label.size.text")); + p.setName("labelsize"); + set.put(p); + + //Label color: + p = new PropertySupport.Reflection(nodeWrapper, Color.class, "getLabelColor", "setLabelColor"); + p.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.label.color.text")); + p.setName("labelcolor"); + set.put(p); + + //Label visible: + p = new PropertySupport.Reflection(textProperties, Boolean.TYPE, "isVisible", "setVisible"); + p.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.label.visible.text")); + p.setName("labelvisible"); + set.put(p); + + return set; + } + } catch (Exception ex) { + Exceptions.printStackTrace(ex); + return null; + } + } + + private static boolean isAlwaysVisibleColumn(Column column) { + return column.isProperty() && + ("id".equalsIgnoreCase(column.getId()) || "label".equalsIgnoreCase(column.getId())); + } + + /** + * Used to build property for each position coordinate (x,y,z) in the same + * way. + * + * @return Property for that coordinate + */ + private Property buildGeneralPositionProperty(Node node, String coordinate) throws NoSuchMethodException { + //Position: + Property p = new PropertySupport.Reflection(node, Float.TYPE, coordinate, "set" + coordinate.toUpperCase()); + p.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.position.text", coordinate)); + p.setName(coordinate); + return p; + } + + /** + * Used to build property for each position coordinate of various nodes + * (x,y,z) in the same way. + * + * @return Property for that coordinate + */ + private Property buildMultipleNodesGeneralPositionProperty(MultipleNodesPropertiesWrapper nodesWrapper, + String coordinate) throws NoSuchMethodException { + //Position: + Property p = new PropertySupport.Reflection(nodesWrapper, Float.class, "getNodes" + coordinate.toUpperCase(), + "setNodes" + coordinate.toUpperCase()); + p.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.position.text", coordinate)); + p.setName(coordinate); + return p; + } + + public static class SingleNodePropertiesWrapper { + + private final Node node; + + public SingleNodePropertiesWrapper(Node node) { + this.node = node; + } + + public Color getNodeColor() { + return node.getColor(); + } + + public void setNodeColor(Color c) { + if (c != null) { + node.setColor(c); + } + } + + public Color getLabelColor() { + TextProperties textProps = node.getTextProperties(); + + return textProps.getColor(); + } + + public void setLabelColor(Color c) { + if (c != null) { + TextProperties textProps = node.getTextProperties(); + textProps.setColor(c); + } + } + } + + public static class MultipleNodesPropertiesWrapper { + + private final Node[] nodes; + //Methods and fields for multiple nodes editing: + private Float nodesX = null; + private Float nodesY = null; + private Float nodesSize = null; + private Color nodesColor = null; + private Color labelsColor = null; + private Float labelsSize = null; + private Boolean labelsVisible = null; + + public MultipleNodesPropertiesWrapper(Node[] nodes) { + this.nodes = nodes; + } + + public Float getNodesX() { + return nodesX; + } + + public void setNodesX(Float x) { + nodesX = x; + for (Node node : nodes) { + node.setX(x); + } + } + + public Float getNodesY() { + return nodesY; + } + + public void setNodesY(Float y) { + nodesY = y; + for (Node node : nodes) { + node.setY(y); + } + } + + public Color getNodesColor() { + return nodesColor; + } + + public void setNodesColor(Color c) { + if (c != null) { + nodesColor = c; + for (Node node : nodes) { + node.setColor(c); + } + } + } + + public Float getNodesSize() { + return nodesSize; + } + + public void setNodesSize(Float size) { + nodesSize = size; + for (Node node : nodes) { + node.setSize(size); + } + } + + public Color getLabelsColor() { + return labelsColor; + } + + public void setLabelsColor(Color c) { + if (c != null) { + labelsColor = c; + for (Node node : nodes) { + TextProperties textProps = node.getTextProperties(); + textProps.setColor(c); + } + } + } + + public Float getLabelsSize() { + return labelsSize; + } + + public void setLabelsSize(Float size) { + labelsSize = size; + for (Node node : nodes) { + TextProperties textProps = node.getTextProperties(); + textProps.setSize(size); + } + } + + public Boolean getLabelsVisible() { + return labelsVisible; + } + + public void setLabelsVisible(Boolean visible) { + labelsVisible = visible; + for (Node node : nodes) { + TextProperties textProps = node.getTextProperties(); + textProps.setVisible(visible); + } + } + } +} diff --git a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/edit/EditToolTopComponent.form b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/edit/EditPanel.form similarity index 100% rename from modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/edit/EditToolTopComponent.form rename to modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/edit/EditPanel.form diff --git a/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/edit/EditPanel.java b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/edit/EditPanel.java new file mode 100644 index 0000000000..aa07c1aa9e --- /dev/null +++ b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/edit/EditPanel.java @@ -0,0 +1,126 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. +*/ + +package org.gephi.desktop.attributes.edit; + +import javax.swing.JComponent; +import org.gephi.desktop.attributes.AttributesUIModelImpl; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Node; +import org.openide.explorer.propertysheet.PropertySheet; + +public final class EditPanel extends JComponent { + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPanel propertySheet; + // End of variables declaration//GEN-END:variables + + public EditPanel() { + initComponents(); + + ((PropertySheet) propertySheet).setDescriptionAreaVisible(false); + } + + public void setEnabled(boolean enabled) { + super.setEnabled(enabled); + ((PropertySheet) propertySheet).setEnabled(enabled); + } + + public void refreshSelected(final AttributesUIModelImpl model) { + Node[] nodes = model.getSelectedNodes(); + if (nodes != null) { + editNodes(nodes, model); + return; + } + Edge[] edges = model.getSelectedEdges(); + if (edges != null) { + editEdges(edges, model); + } + } + + public void editNodes(Node[] nodes) { + ((PropertySheet) propertySheet).setNodes(new org.openide.nodes.Node[] {new EditNodes(nodes)}); + } + + public void editNodes(Node[] nodes, AttributesUIModelImpl model) { + ((PropertySheet) propertySheet).setNodes(new org.openide.nodes.Node[] {new EditNodes(nodes, model)}); + } + + public void editEdge(Edge edge) { + ((PropertySheet) propertySheet).setNodes(new org.openide.nodes.Node[] {new EditEdges(edge)}); + } + + public void editEdges(Edge[] edges) { + ((PropertySheet) propertySheet).setNodes(new org.openide.nodes.Node[] {new EditEdges(edges)}); + } + + public void editEdges(Edge[] edges, AttributesUIModelImpl model) { + ((PropertySheet) propertySheet).setNodes(new org.openide.nodes.Node[] {new EditEdges(edges, model)}); + } + + public void disableEdit() { + ((PropertySheet) propertySheet).setNodes(new org.openide.nodes.Node[] {}); + } + + /** + * This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + java.awt.GridBagConstraints gridBagConstraints; + + propertySheet = new PropertySheet(); + + setLayout(new java.awt.GridBagLayout()); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.weighty = 1.0; + gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); + add(propertySheet, gridBagConstraints); + }// //GEN-END:initComponents +} diff --git a/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/edit/MultipleRowsAttributeValueWrapper.java b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/edit/MultipleRowsAttributeValueWrapper.java new file mode 100644 index 0000000000..3976921969 --- /dev/null +++ b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/edit/MultipleRowsAttributeValueWrapper.java @@ -0,0 +1,185 @@ +/* + Copyright 2008-2011 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.attributes.edit; + +import java.time.ZoneId; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.TimeFormat; + +/** + * @author Eduardo Ramos + */ +public class MultipleRowsAttributeValueWrapper implements AttributeValueWrapper { + + private final Element[] rows; + private final Column column; + private final TimeFormat currentTimeFormat; + private final ZoneId dateTimeZone; + private Object value; + + public MultipleRowsAttributeValueWrapper(Element[] rows, Column column, TimeFormat currentTimeFormat, + ZoneId dateTimeZone) { + this.rows = rows; + this.column = column; + this.currentTimeFormat = currentTimeFormat; + this.dateTimeZone = dateTimeZone; + this.value = null; + } + + private String convertToStringIfNotNull() { + if (value != null) { + return AttributeUtils.print(value, currentTimeFormat, dateTimeZone); + } else { + return null; + } + } + + private void setValueToAllElements(Object object) { + this.value = object; + for (Element row : rows) { + row.setAttribute(column, value); + } + } + + @Override + public Byte getValueByte() { + return (Byte) value; + } + + @Override + public void setValueByte(Byte object) { + setValueToAllElements(object); + } + + @Override + public Short getValueShort() { + return (Short) value; + } + + @Override + public void setValueShort(Short object) { + setValueToAllElements(object); + } + + @Override + public Character getValueCharacter() { + return (Character) value; + } + + @Override + public void setValueCharacter(Character object) { + setValueToAllElements(object); + } + + @Override + public String getValueString() { + return (String) value; + } + + @Override + public void setValueString(String object) { + setValueToAllElements(object); + } + + @Override + public Double getValueDouble() { + return (Double) value; + } + + @Override + public void setValueDouble(Double object) { + setValueToAllElements(object); + } + + @Override + public Float getValueFloat() { + return (Float) value; + } + + @Override + public void setValueFloat(Float object) { + setValueToAllElements(object); + } + + @Override + public Integer getValueInteger() { + return (Integer) value; + } + + @Override + public void setValueInteger(Integer object) { + setValueToAllElements(object); + } + + @Override + public Boolean getValueBoolean() { + return (Boolean) value; + } + + @Override + public void setValueBoolean(Boolean object) { + setValueToAllElements(object); + } + + @Override + public Long getValueLong() { + return (Long) value; + } + + @Override + public void setValueLong(Long object) { + setValueToAllElements(object); + } + + @Override + public String getValueAsString() { + return convertToStringIfNotNull(); + } + + @Override + public void setValueAsString(String value) { + setValueToAllElements(AttributeUtils.parse(value, column.getTypeClass())); + } +} diff --git a/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/edit/SingleRowAttributeValueWrapper.java b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/edit/SingleRowAttributeValueWrapper.java new file mode 100644 index 0000000000..12dac28b76 --- /dev/null +++ b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/edit/SingleRowAttributeValueWrapper.java @@ -0,0 +1,177 @@ +/* + Copyright 2008-2011 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.attributes.edit; + +import java.time.ZoneId; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.TimeFormat; + +/** + * @author Eduardo Ramos + */ +public class SingleRowAttributeValueWrapper implements AttributeValueWrapper { + + private final Element row; + private final Column column; + private final TimeFormat currentTimeFormat; + private final ZoneId dateTimeZone; + + public SingleRowAttributeValueWrapper(Element row, Column column, TimeFormat currentTimeFormat, + ZoneId dateTimeZone) { + this.row = row; + this.column = column; + this.currentTimeFormat = currentTimeFormat; + this.dateTimeZone = dateTimeZone; + } + + private String convertToStringIfNotNull() { + Object value = row.getAttribute(column); + if (value != null) { + return AttributeUtils.print(value, currentTimeFormat, dateTimeZone); + } else { + return null; + } + } + + @Override + public Byte getValueByte() { + return (Byte) row.getAttribute(column); + } + + @Override + public void setValueByte(Byte object) { + row.setAttribute(column, object); + } + + @Override + public Short getValueShort() { + return (Short) row.getAttribute(column); + } + + @Override + public void setValueShort(Short object) { + row.setAttribute(column, object); + } + + @Override + public Character getValueCharacter() { + return (Character) row.getAttribute(column); + } + + @Override + public void setValueCharacter(Character object) { + row.setAttribute(column, object); + } + + @Override + public String getValueString() { + return (String) row.getAttribute(column); + } + + @Override + public void setValueString(String object) { + row.setAttribute(column, object); + } + + @Override + public Double getValueDouble() { + return (Double) row.getAttribute(column); + } + + @Override + public void setValueDouble(Double object) { + row.setAttribute(column, object); + } + + @Override + public Float getValueFloat() { + return (Float) row.getAttribute(column); + } + + @Override + public void setValueFloat(Float object) { + row.setAttribute(column, object); + } + + @Override + public Integer getValueInteger() { + return (Integer) row.getAttribute(column); + } + + @Override + public void setValueInteger(Integer object) { + row.setAttribute(column, object); + } + + @Override + public Boolean getValueBoolean() { + return (Boolean) row.getAttribute(column); + } + + @Override + public void setValueBoolean(Boolean object) { + row.setAttribute(column, object); + } + + @Override + public Long getValueLong() { + return (Long) row.getAttribute(column); + } + + @Override + public void setValueLong(Long object) { + row.setAttribute(column, object); + } + + @Override + public String getValueAsString() { + return convertToStringIfNotNull(); + } + + @Override + public void setValueAsString(String value) { + row.setAttribute(column, AttributeUtils.parse(value, column.getTypeClass())); + } +} diff --git a/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/options/AttributesOptionsPanel.java b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/options/AttributesOptionsPanel.java new file mode 100644 index 0000000000..48e5d1aabc --- /dev/null +++ b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/options/AttributesOptionsPanel.java @@ -0,0 +1,119 @@ +/* + Copyright 2008-2025 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2025 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2025 Gephi Consortium. + */ + +package org.gephi.desktop.attributes.options; + +import javax.swing.GroupLayout; +import javax.swing.JCheckBox; +import javax.swing.JPanel; +import org.jdesktop.swingx.JXTitledSeparator; +import org.openide.util.NbBundle; +import org.openide.util.NbPreferences; + +final class AttributesOptionsPanel extends JPanel { + + private final AttributesOptionsPanelController controller; + + private JXTitledSeparator defaultSettingsSeparator; + private JCheckBox showNullColumnsCheckBox; + private JCheckBox includePropertiesCheckBox; + + AttributesOptionsPanel(AttributesOptionsPanelController controller) { + this.controller = controller; + initComponents(); + addChangeListeners(); + } + + private void initComponents() { + defaultSettingsSeparator = new JXTitledSeparator(); + defaultSettingsSeparator.setTitle( + NbBundle.getMessage(AttributesOptionsPanel.class, "AttributesOptionsPanel.defaultSettingsTitle.title")); + defaultSettingsSeparator.setFont(defaultSettingsSeparator.getFont().deriveFont(java.awt.Font.BOLD)); + + showNullColumnsCheckBox = new JCheckBox( + NbBundle.getMessage(AttributesOptionsPanel.class, "AttributesOptionsPanel.showNullColumns.text")); + includePropertiesCheckBox = new JCheckBox( + NbBundle.getMessage(AttributesOptionsPanel.class, "AttributesOptionsPanel.includeProperties.text")); + + GroupLayout layout = new GroupLayout(this); + setLayout(layout); + layout.setAutoCreateGaps(true); + layout.setAutoCreateContainerGaps(true); + + layout.setHorizontalGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addComponent(defaultSettingsSeparator) + .addGroup(layout.createSequentialGroup() + .addGap(10) + .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addComponent(showNullColumnsCheckBox) + .addComponent(includePropertiesCheckBox))) + ); + + layout.setVerticalGroup(layout.createSequentialGroup() + .addComponent(defaultSettingsSeparator, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, + GroupLayout.PREFERRED_SIZE) + .addComponent(showNullColumnsCheckBox) + .addComponent(includePropertiesCheckBox) + ); + } + + private void addChangeListeners() { + showNullColumnsCheckBox.addActionListener(e -> controller.changed()); + includePropertiesCheckBox.addActionListener(e -> controller.changed()); + } + + void load() { + showNullColumnsCheckBox.setSelected(AttributesPreferences.isShowNullColumns()); + includePropertiesCheckBox.setSelected(AttributesPreferences.isIncludeProperties()); + } + + void store() { + NbPreferences.forModule(AttributesPreferences.class) + .putBoolean(AttributesPreferences.SHOW_NULL_COLUMNS, showNullColumnsCheckBox.isSelected()); + NbPreferences.forModule(AttributesPreferences.class) + .putBoolean(AttributesPreferences.INCLUDE_PROPERTIES, includePropertiesCheckBox.isSelected()); + } + + boolean valid() { + return true; + } +} diff --git a/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/options/AttributesOptionsPanelController.java b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/options/AttributesOptionsPanelController.java new file mode 100644 index 0000000000..0b90e1a951 --- /dev/null +++ b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/options/AttributesOptionsPanelController.java @@ -0,0 +1,123 @@ +/* + Copyright 2008-2025 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2025 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2025 Gephi Consortium. + */ + +package org.gephi.desktop.attributes.options; + +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; +import javax.swing.JComponent; +import org.netbeans.spi.options.OptionsPanelController; +import org.openide.util.HelpCtx; +import org.openide.util.Lookup; + +@OptionsPanelController.SubRegistration(location = "Gephi", + displayName = "#AdvancedOption_DisplayName_Attributes", + keywords = "#AdvancedOption_Keywords_Attributes", + keywordsCategory = "Gephi/Attributes", + position = 900) +public final class AttributesOptionsPanelController extends OptionsPanelController { + + private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); + private AttributesOptionsPanel panel; + private boolean changed; + + @Override + public void update() { + getPanel().load(); + changed = false; + } + + @Override + public void applyChanges() { + getPanel().store(); + changed = false; + } + + @Override + public void cancel() { + } + + @Override + public boolean isValid() { + return getPanel().valid(); + } + + @Override + public boolean isChanged() { + return changed; + } + + @Override + public HelpCtx getHelpCtx() { + return null; + } + + @Override + public JComponent getComponent(Lookup masterLookup) { + return getPanel(); + } + + @Override + public void addPropertyChangeListener(PropertyChangeListener l) { + pcs.addPropertyChangeListener(l); + } + + @Override + public void removePropertyChangeListener(PropertyChangeListener l) { + pcs.removePropertyChangeListener(l); + } + + private AttributesOptionsPanel getPanel() { + if (panel == null) { + panel = new AttributesOptionsPanel(this); + } + return panel; + } + + void changed() { + if (!changed) { + changed = true; + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, false, true); + } + pcs.firePropertyChange(OptionsPanelController.PROP_VALID, null, null); + } +} diff --git a/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/options/AttributesPreferences.java b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/options/AttributesPreferences.java new file mode 100644 index 0000000000..13cdb19603 --- /dev/null +++ b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/options/AttributesPreferences.java @@ -0,0 +1,67 @@ +/* + Copyright 2008-2025 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2025 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2025 Gephi Consortium. + */ + +package org.gephi.desktop.attributes.options; + +import org.openide.util.NbPreferences; + +public final class AttributesPreferences { + + public static final String SHOW_NULL_COLUMNS = "Attributes.showNullColumns"; + public static final String INCLUDE_PROPERTIES = "Attributes.includeProperties"; + + public static final boolean DEFAULT_SHOW_NULL_COLUMNS = false; + public static final boolean DEFAULT_INCLUDE_PROPERTIES = true; + + private AttributesPreferences() { + } + + public static boolean isShowNullColumns() { + return NbPreferences.forModule(AttributesPreferences.class) + .getBoolean(SHOW_NULL_COLUMNS, DEFAULT_SHOW_NULL_COLUMNS); + } + + public static boolean isIncludeProperties() { + return NbPreferences.forModule(AttributesPreferences.class) + .getBoolean(INCLUDE_PROPERTIES, DEFAULT_INCLUDE_PROPERTIES); + } +} diff --git a/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/selection/SelectionPanel.java b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/selection/SelectionPanel.java new file mode 100644 index 0000000000..36f518ccf2 --- /dev/null +++ b/modules/DesktopAttributes/src/main/java/org/gephi/desktop/attributes/selection/SelectionPanel.java @@ -0,0 +1,267 @@ +package org.gephi.desktop.attributes.selection; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.Font; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.Insets; +import java.awt.RenderingHints; +import java.time.ZoneId; +import java.util.List; +import javax.swing.BorderFactory; +import javax.swing.Box; +import javax.swing.Icon; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JSeparator; +import javax.swing.ScrollPaneConstants; +import javax.swing.UIManager; +import org.gephi.desktop.attributes.AttributesUIModelImpl; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.DirectedGraph; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.TimeFormat; +import org.openide.util.ImageUtilities; +import org.openide.util.NbBundle; + +public class SelectionPanel extends JPanel { + + private static final int CIRCLE_SIZE = 14; + private static final int MAX_VALUE_LENGTH = 100; + + private final JPanel headerPanel; + private final JLabel headerLabel; + private final JPanel attributesPanel; + private final JLabel noSelectionLabel; + + public SelectionPanel() { + setLayout(new BorderLayout()); + + headerPanel = new JPanel(new BorderLayout()); + headerLabel = new JLabel(); + headerLabel.setFont(headerLabel.getFont().deriveFont(Font.BOLD, 14f)); + headerLabel.setIconTextGap(8); + headerLabel.setBorder(BorderFactory.createEmptyBorder(8, 10, 8, 10)); + headerPanel.add(headerLabel, BorderLayout.CENTER); + headerPanel.add(new JSeparator(), BorderLayout.SOUTH); + headerPanel.setVisible(false); + + add(headerPanel, BorderLayout.NORTH); + + attributesPanel = new JPanel(new GridBagLayout()); + JScrollPane scrollPane = new JScrollPane(attributesPanel); + scrollPane.setBorder(BorderFactory.createEmptyBorder()); + scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); + scrollPane.getVerticalScrollBar().setUnitIncrement(16); + + add(scrollPane, BorderLayout.CENTER); + + noSelectionLabel = new JLabel( + NbBundle.getMessage(SelectionPanel.class, "SelectionPanel.noSelection")); + noSelectionLabel.setForeground(UIManager.getColor("textInactiveText")); + noSelectionLabel.setHorizontalAlignment(JLabel.CENTER); + emptySelection(); + } + + public void refreshSelectedNodes(final AttributesUIModelImpl model) { + boolean showNullColumns = model.isShowNullColumns(); + Node[] nodes = model.getSelectedNodes(); + if (nodes == null || nodes.length == 0) { + emptySelection(); + return; + } + + Node node = nodes[nodes.length - 1]; + Color nodeColor = node.getColor(); + String label = node.getLabel(); + if (label == null) { + label = node.getId().toString(); + } + + Color opaqueColor = new Color(nodeColor.getRed(), nodeColor.getGreen(), nodeColor.getBlue()); + headerLabel.setIcon(new CircleIcon(opaqueColor, CIRCLE_SIZE)); + headerLabel.setText(label); + headerPanel.setVisible(true); + + attributesPanel.removeAll(); + + GraphModel graphModel = model.getGraphModel(); + TimeFormat timeFormat = graphModel.getTimeFormat(); + ZoneId timeZone = graphModel.getTimeZone(); + Graph graph = graphModel.getGraphVisible(); + Column degreeColumn = graphModel.defaultColumns().degree(); + Column inDegreeColumn = graphModel.defaultColumns().inDegree(); + Column outDegreeColumn = graphModel.defaultColumns().outDegree(); + + List selectedColumns = model.getSelectedColumns(); + if (selectedColumns.isEmpty()) { + JLabel noColumnsLabel = new JLabel( + NbBundle.getMessage(SelectionPanel.class, "SelectionPanel.noColumns")); + noColumnsLabel.setForeground(UIManager.getColor("textInactiveText")); + noColumnsLabel.setHorizontalAlignment(JLabel.CENTER); + GridBagConstraints gbc = new GridBagConstraints(); + gbc.gridx = 0; + gbc.gridy = 0; + gbc.weightx = 1.0; + gbc.weighty = 1.0; + gbc.anchor = GridBagConstraints.CENTER; + attributesPanel.add(noColumnsLabel, gbc); + } else { + String nullColumnLabel = NbBundle.getMessage(SelectionPanel.class, "SelectionPanel.nullColumn"); + int row = 0; + for (Column column : selectedColumns) { + String columnName = column.getTitle(); + String valueStr = null; + Object value = null; + if (column == degreeColumn) { + value = graph.getDegree(node); + valueStr = String.valueOf(value); + } else if (column == inDegreeColumn) { + value = ((DirectedGraph) graph).getInDegree(node); + valueStr = String.valueOf(value); + } else if (column == outDegreeColumn) { + value = ((DirectedGraph) graph).getOutDegree(node); + valueStr = String.valueOf(value); + } else { + value = node.getAttribute(column, graph.getView()); + if (value == null && !showNullColumns) { + continue; + } + + valueStr = + value == null ? nullColumnLabel : AttributeUtils.print(value, timeFormat, timeZone); + } + + Icon icon = getTypeIcon(column); + addAttributeRow(row++, icon, columnName, valueStr, value == null); + } + + GridBagConstraints filler = new GridBagConstraints(); + filler.gridx = 0; + filler.gridy = row; + filler.weighty = 1.0; + attributesPanel.add(Box.createVerticalGlue(), filler); + } + + revalidate(); + repaint(); + } + + private void addAttributeRow(int row, Icon icon, String name, String value, boolean isNull) { + GridBagConstraints gbc; + + JLabel iconLabel = new JLabel(icon); + gbc = new GridBagConstraints(); + gbc.gridx = 0; + gbc.gridy = row; + gbc.anchor = GridBagConstraints.WEST; + gbc.insets = new Insets(4, 4, 4, 4); + attributesPanel.add(iconLabel, gbc); + + JLabel nameLabel = new JLabel(name); + nameLabel.setFont(nameLabel.getFont().deriveFont(Font.BOLD)); + gbc = new GridBagConstraints(); + gbc.gridx = 1; + gbc.gridy = row; + gbc.anchor = GridBagConstraints.WEST; + gbc.insets = new Insets(4, 0, 4, 8); + attributesPanel.add(nameLabel, gbc); + + String displayValue = value; + String tooltip = null; + if (value.length() > MAX_VALUE_LENGTH) { + displayValue = value.substring(0, MAX_VALUE_LENGTH) + "\u2026"; + tooltip = "" + escapeHtml(value) + ""; + } + + JLabel valueLabel = new JLabel(displayValue); + if (isNull) { + valueLabel.setForeground(UIManager.getColor("textInactiveText")); + valueLabel.setFont(valueLabel.getFont().deriveFont(Font.ITALIC)); + } + if (tooltip != null) { + valueLabel.setToolTipText(tooltip); + } + gbc = new GridBagConstraints(); + gbc.gridx = 2; + gbc.gridy = row; + gbc.anchor = GridBagConstraints.WEST; + gbc.fill = GridBagConstraints.HORIZONTAL; + gbc.weightx = 1.0; + gbc.insets = new Insets(4, 0, 4, 10); + attributesPanel.add(valueLabel, gbc); + } + + private Icon getTypeIcon(Column column) { + if (column.isDynamicAttribute() || column.isDynamic()) { + return ImageUtilities.loadImageIcon("DesktopAttributes/dynamic.svg", false); + } else if (column.isNumber()) { + return ImageUtilities.loadImageIcon("DesktopAttributes/number.svg", false); + } else if (column.isArray()) { + return ImageUtilities.loadImageIcon("DesktopAttributes/array.svg", false); + } else if (column.getTypeClass() == Boolean.class) { + return ImageUtilities.loadImageIcon("DesktopAttributes/boolean.svg", false); + } + return ImageUtilities.loadImageIcon("DesktopAttributes/string.svg", false); + } + + private void emptySelection() { + headerPanel.setVisible(false); + attributesPanel.removeAll(); + + GridBagConstraints gbc = new GridBagConstraints(); + gbc.gridx = 0; + gbc.gridy = 0; + gbc.weightx = 1.0; + gbc.weighty = 1.0; + gbc.anchor = GridBagConstraints.CENTER; + attributesPanel.add(noSelectionLabel, gbc); + + revalidate(); + repaint(); + } + + private static String escapeHtml(String text) { + return text.replace("&", "&") + .replace("<", "<") + .replace(">", ">") + .replace("\"", """); + } + + private static class CircleIcon implements Icon { + private final Color color; + private final int size; + + CircleIcon(Color color, int size) { + this.color = color; + this.size = size; + } + + @Override + public void paintIcon(Component c, Graphics g, int x, int y) { + Graphics2D g2 = (Graphics2D) g.create(); + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); + g2.setColor(color); + g2.fillOval(x, y, size, size); + g2.dispose(); + } + + @Override + public int getIconWidth() { + return size; + } + + @Override + public int getIconHeight() { + return size; + } + } +} diff --git a/modules/DesktopAttributes/src/main/nbm/manifest.mf b/modules/DesktopAttributes/src/main/nbm/manifest.mf new file mode 100644 index 0000000000..f9f89f3656 --- /dev/null +++ b/modules/DesktopAttributes/src/main/nbm/manifest.mf @@ -0,0 +1,6 @@ +Manifest-Version: 1.0 +AutoUpdate-Essential-Module: true +OpenIDE-Module-Localizing-Bundle: org/gephi/desktop/attributes/Bundle.properties +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi UI +OpenIDE-Module-Name: Desktop Attributes \ No newline at end of file diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/Bundle.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/Bundle.properties new file mode 100644 index 0000000000..c739c12c12 --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/Bundle.properties @@ -0,0 +1,10 @@ +OpenIDE-Module-Short-Description=Attributes UI +OpenIDE-Module-Long-Description=Attributes and edition panel for selected nodes and edges +CTL_AttributesTopComponent=Attributes +AttributesTopComponent.columnsButton.text=Columns... +AttributesTopComponent.columnsButton.tooltip=Select columns to display +AttributesTopComponent.noColumns=No columns available +AttributesTopComponent.showNullButton=Show null values +AttributesTopComponent.includeProperties=Include properties +AttributesTopComponent.selectAll=Select All +AttributesTopComponent.unselectAll=Unselect All \ No newline at end of file diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/Bundle_ar.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/Bundle_th.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle.properties new file mode 100644 index 0000000000..7f61bf2eab --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle.properties @@ -0,0 +1,20 @@ +EditNodes.multiple.elements=Various nodes +EditNodes.properties.text={0} - Properties +EditNodes.attributes.text={0} - Attributes +EditNodes.properties.text.multiple=Various nodes - Properties +EditNodes.attributes.text.multiple=Various nodes - Attributes +EditNodes.size.text=Size +EditNodes.position.text=Position ({0}) +EditNodes.color.text=Color +EditEdges.multiple.elements=Various edges +EditEdges.properties.text={0} - Properties +EditEdges.attributes.text={0} - Attributes +EditEdges.properties.text.multiple=Various edges - Properties +EditEdges.attributes.text.multiple=Various edges - Attributes +EditEdges.color.text=Color +EditNodes.label.color.text=Label Color +EditNodes.label.size.text=Label Size +EditNodes.label.visible.text=Label Visible +EditEdges.label.color.text=Label Color +EditEdges.label.size.text=Label Size +EditEdges.label.visible.text=Label Visible \ No newline at end of file diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_ar.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_ca.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_ca.properties new file mode 100644 index 0000000000..b951f081b2 --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_ca.properties @@ -0,0 +1,20 @@ +EditNodes.multiple.elements=Various nodes +EditNodes.properties.text={0} - Properties +EditNodes.attributes.text={0} - Attributes +EditNodes.properties.text.multiple=Various nodes - Properties +EditNodes.attributes.text.multiple=Various nodes - Attributes +EditNodes.size.text=Mida +EditNodes.position.text=Position ({0}) +EditNodes.color.text=Color +EditEdges.multiple.elements=Various edges +EditEdges.properties.text={0} - Properties +EditEdges.attributes.text={0} - Attributes +EditEdges.properties.text.multiple=Various edges - Properties +EditEdges.attributes.text.multiple=Various edges - Attributes +EditEdges.color.text=Color +EditNodes.label.color.text=Color de l'etiqueta +EditNodes.label.size.text=Mida de l'etiqueta +EditNodes.label.visible.text=Label Visible +EditEdges.label.color.text=Color de l'etiqueta +EditEdges.label.size.text=Mida de l'etiqueta +EditEdges.label.visible.text=Label Visible diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_cs.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_cs.properties new file mode 100644 index 0000000000..66adf7e271 --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_cs.properties @@ -0,0 +1,20 @@ +EditNodes.multiple.elements=R\u016fznι uzly +EditNodes.properties.text={0} - Vlastnosti +EditNodes.attributes.text={0} - Atributy +EditNodes.properties.text.multiple=R\u016fznι uzly - Vlastnosti +EditNodes.attributes.text.multiple=R\u016fznι uzly - Atributy +EditNodes.size.text=Velikost +EditNodes.position.text=Pozice ({0}) +EditNodes.color.text=Barva +EditEdges.multiple.elements=R\u016fznι hrany +EditEdges.properties.text={0} - Vlastnosti +EditEdges.attributes.text={0} - Atributy +EditEdges.properties.text.multiple=R\u016fznι hrany - Vlastnosti +EditEdges.attributes.text.multiple=R\u016fznι hrany - Atributy +EditEdges.color.text=Barva +# EditNodes.label.color.text=Label Color +# EditNodes.label.size.text=Label Size +# EditNodes.label.visible.text=Label Visible +# EditEdges.label.color.text=Label Color +# EditEdges.label.size.text=Label Size +# EditEdges.label.visible.text=Label Visible diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_de.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_de.properties new file mode 100644 index 0000000000..5e7b8fafd0 --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_de.properties @@ -0,0 +1,20 @@ +EditNodes.multiple.elements=Verschiedene Knoten +EditNodes.properties.text={0} - Eigenschaften +EditNodes.attributes.text={0} - Attribute +EditNodes.properties.text.multiple=Verschiedene Knoten - Eigenschaften +EditNodes.attributes.text.multiple=Verschiedene Knoten - Attribute +EditNodes.size.text=Grφίe +EditNodes.position.text=Position ({0}) +EditNodes.color.text=Farbe +EditEdges.multiple.elements=Verschiedene Kanten +EditEdges.properties.text={0} - Eigenschaften +EditEdges.attributes.text={0} - Attribute +EditEdges.properties.text.multiple=Verschiedene Kanten - Eigenschaften +EditEdges.attributes.text.multiple=Verschiedene Kanten - Attribute +EditEdges.color.text=Farbe +EditNodes.label.color.text=Beschriftung Farbe +EditNodes.label.size.text=Beschriftung Grφίe +EditNodes.label.visible.text=Beschriftung sichtbar +EditEdges.label.color.text=Beschriftung Farbe +EditEdges.label.size.text=Beschriftung Grφίe +EditEdges.label.visible.text=Beschriftung sichtbar diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_es.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_es.properties new file mode 100644 index 0000000000..0777d44b9d --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_es.properties @@ -0,0 +1,20 @@ +EditNodes.multiple.elements=Varios nodos +EditNodes.properties.text={0} - Propiedades +EditNodes.attributes.text={0} - Atributos +EditNodes.properties.text.multiple=Varios nodos - Propiedades +EditNodes.attributes.text.multiple=Varios nodos - Atributos +EditNodes.size.text=Tamaρo +EditNodes.position.text=Posiciσn ({0}) +EditNodes.color.text=Color +EditEdges.multiple.elements=Varias aristas +EditEdges.properties.text={0} - Propiedades +EditEdges.attributes.text={0} - Atributos +EditEdges.properties.text.multiple=Varias aristas - Propiedades +EditEdges.attributes.text.multiple=Varias aristas - Atributos +EditEdges.color.text=Color +EditNodes.label.color.text=Color de etiqueta +EditNodes.label.size.text=Tamaρo de etiqueta +EditNodes.label.visible.text=Etiqueta visible +EditEdges.label.color.text=Color de etiqueta +EditEdges.label.size.text=Tamaρo de etiqueta +EditEdges.label.visible.text=Etiqueta visible diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_fr.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_fr.properties new file mode 100644 index 0000000000..1e941a9a1f --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_fr.properties @@ -0,0 +1,20 @@ +EditNodes.multiple.elements=Noeuds divers +EditNodes.properties.text={0} - Propriιtιs +EditNodes.attributes.text={0} - Attributs +EditNodes.properties.text.multiple=Noeuds divers - Propriιtιs +EditNodes.attributes.text.multiple=Noeuds divers - Attributs +EditNodes.size.text=Taille +EditNodes.position.text=Position ({0}) +EditNodes.color.text=Couleur +EditEdges.multiple.elements=Liens variιs +EditEdges.properties.text={0} - Propriιtιs +EditEdges.attributes.text={0} - Attributs +EditEdges.properties.text.multiple=Liens variιs - Propriιtιs +EditEdges.attributes.text.multiple=Liens variιs - Attributs +EditEdges.color.text=Couleur +EditNodes.label.color.text=Couleur du label +EditNodes.label.size.text=Taille des labels +EditNodes.label.visible.text=Visibilitι du label +EditEdges.label.color.text=Couleur du label +EditEdges.label.size.text=Taille des labels +EditEdges.label.visible.text=Visibilitι du label diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_he.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_he.properties new file mode 100644 index 0000000000..a7f84fa1c6 --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_he.properties @@ -0,0 +1,20 @@ +EditNodes.multiple.elements=Various nodes +EditNodes.properties.text={0} - Properties +EditNodes.attributes.text={0} - Attributes +EditNodes.properties.text.multiple=Various nodes - Properties +EditNodes.attributes.text.multiple=Various nodes - Attributes +EditNodes.size.text=Size +EditNodes.position.text=Position ({0}) +EditNodes.color.text=Color +EditEdges.multiple.elements=Various edges +EditEdges.properties.text={0} - Properties +EditEdges.attributes.text={0} - Attributes +EditEdges.properties.text.multiple=Various edges - Properties +EditEdges.attributes.text.multiple=Various edges - Attributes +EditEdges.color.text=Color +EditNodes.label.color.text=Label Color +EditNodes.label.size.text=Label Size +EditNodes.label.visible.text=Label Visible +EditEdges.label.color.text=Label Color +EditEdges.label.size.text=Label Size +EditEdges.label.visible.text=Label Visible diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_hu.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_hu.properties new file mode 100644 index 0000000000..69519772cb --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_hu.properties @@ -0,0 +1,22 @@ + + +EditEdges.color.text=Sz\u00EDn +EditNodes.attributes.text={0} \u2013 Attrib\u00FAtumok +EditNodes.size.text=M\u00E9ret +EditNodes.color.text=Sz\u00EDn +EditEdges.attributes.text.multiple=K\u00FCl\u00F6nf\u00E9le \u00E9lek - Attrib\u00FAtumok +EditEdges.label.size.text=C\u00EDmke m\u00E9rete +EditEdges.label.visible.text=C\u00EDmke l\u00E1that\u00F3 +EditNodes.properties.text={0} \u2013 Tulajdons\u00E1gok +EditEdges.attributes.text={0} \u2013 Attrib\u00FAtumok +EditEdges.properties.text.multiple=K\u00FCl\u00F6nf\u00E9le \u00E9lek - Tulajdons\u00E1gok +EditNodes.label.visible.text=C\u00EDmke l\u00E1that\u00F3 +EditNodes.attributes.text.multiple=K\u00FCl\u00F6nf\u00E9le csom\u00F3pontok - Attrib\u00FAtumok +EditNodes.label.size.text=C\u00EDmke m\u00E9rete +EditNodes.position.text=Poz\u00EDci\u00F3 ({0}) +EditNodes.multiple.elements=K\u00FCl\u00F6nf\u00E9le csom\u00F3pontok +EditEdges.properties.text={0} \u2013 Tulajdons\u00E1gok +EditEdges.multiple.elements=K\u00FCl\u00F6nf\u00E9le \u00E9lek +EditEdges.label.color.text=C\u00EDmke sz\u00EDne +EditNodes.properties.text.multiple=K\u00FCl\u00F6nf\u00E9le csom\u00F3pontok \u2013 Tulajdons\u00E1gok +EditNodes.label.color.text=C\u00EDmke sz\u00EDne diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_it.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_it.properties new file mode 100644 index 0000000000..a7f84fa1c6 --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_it.properties @@ -0,0 +1,20 @@ +EditNodes.multiple.elements=Various nodes +EditNodes.properties.text={0} - Properties +EditNodes.attributes.text={0} - Attributes +EditNodes.properties.text.multiple=Various nodes - Properties +EditNodes.attributes.text.multiple=Various nodes - Attributes +EditNodes.size.text=Size +EditNodes.position.text=Position ({0}) +EditNodes.color.text=Color +EditEdges.multiple.elements=Various edges +EditEdges.properties.text={0} - Properties +EditEdges.attributes.text={0} - Attributes +EditEdges.properties.text.multiple=Various edges - Properties +EditEdges.attributes.text.multiple=Various edges - Attributes +EditEdges.color.text=Color +EditNodes.label.color.text=Label Color +EditNodes.label.size.text=Label Size +EditNodes.label.visible.text=Label Visible +EditEdges.label.color.text=Label Color +EditEdges.label.size.text=Label Size +EditEdges.label.visible.text=Label Visible diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_ja.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_ja.properties new file mode 100644 index 0000000000..704bf0e9b0 --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_ja.properties @@ -0,0 +1,20 @@ +EditNodes.multiple.elements=\u69d8\u3005\u306a\u30ce\u30fc\u30c9 +EditNodes.properties.text={0} - \u30d7\u30ed\u30d1\u30c6\u30a3 +EditNodes.attributes.text={0} - \u5c5e\u6027 +EditNodes.properties.text.multiple=\u69d8\u3005\u306a\u30ce\u30fc\u30c9 - \u30d7\u30ed\u30d1\u30c6\u30a3 +EditNodes.attributes.text.multiple=\u69d8\u3005\u306a\u30ce\u30fc\u30c9 - \u5c5e\u6027 +EditNodes.size.text=\u5927\u304d\u3055 +EditNodes.position.text=\u4f4d\u7f6e({0}) +EditNodes.color.text=\u8272 +EditEdges.multiple.elements=\u69d8\u3005\u306a\u8fba +EditEdges.properties.text={0} - \u30d7\u30ed\u30d1\u30c6\u30a3 +EditEdges.attributes.text={0} - \u5c5e\u6027 +EditEdges.properties.text.multiple=\u69d8\u3005\u306a\u8fba - \u30d7\u30ed\u30d1\u30c6\u30a3 +EditEdges.attributes.text.multiple=\u69d8\u3005\u306a\u8fba - \u5c5e\u6027 +EditEdges.color.text=\u8272 +# EditNodes.label.color.text=Label Color +# EditNodes.label.size.text=Label Size +# EditNodes.label.visible.text=Label Visible +# EditEdges.label.color.text=Label Color +# EditEdges.label.size.text=Label Size +# EditEdges.label.visible.text=Label Visible diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_ko.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_ko.properties new file mode 100644 index 0000000000..a09de58a88 --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_ko.properties @@ -0,0 +1,22 @@ + + +EditEdges.attributes.text={0} - \uC18D\uC131\uAC12 +EditNodes.multiple.elements=\uB2E4\uC591\uD55C \uB178\uB4DC +EditNodes.properties.text={0} - \uC18D\uC131 +EditNodes.attributes.text={0} - \uC18D\uC131\uAC12 +EditNodes.properties.text.multiple=\uB2E4\uC591\uD55C \uB178\uB4DC - \uC18D\uC131 +EditEdges.attributes.text.multiple=\uB2E4\uC591\uD55C \uC5E3\uC9C0 - \uC18D\uC131\uAC12 +EditNodes.attributes.text.multiple=\uB2E4\uC591\uD55C \uB178\uB4DC - \uC18D\uC131\uAC12 +EditEdges.color.text=\uC0C9\uC0C1 +EditNodes.size.text=\uD06C\uAE30 +EditNodes.position.text=\uC704\uCE58 ({0}) +EditNodes.color.text=\uC0C9\uC0C1 +EditEdges.multiple.elements=\uB2E4\uC591\uD55C \uC5E3\uC9C0 +EditEdges.properties.text={0} - \uC18D\uC131 +EditEdges.properties.text.multiple=\uB2E4\uC591\uD55C \uC5E3\uC9C0 - \uC18D\uC131 +EditNodes.label.color.text=\uB808\uC774\uBE14 \uC0C9\uC0C1 +EditNodes.label.size.text=\uB808\uC774\uBE14 \uD06C\uAE30 +EditNodes.label.visible.text=\uB808\uC774\uBE14 \uC2DC\uC778\uC131 +EditEdges.label.color.text=\uB808\uC774\uBE14 \uC0C9\uC0C1 +EditEdges.label.size.text=\uB808\uC774\uBE14 \uD06C\uAE30 +EditEdges.label.visible.text=\uB808\uC774\uBE14 \uC2DC\uC778\uC131 diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_nl.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_nl.properties new file mode 100644 index 0000000000..0bb71d2251 --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_nl.properties @@ -0,0 +1,20 @@ +EditNodes.multiple.elements=Various nodes +EditNodes.properties.text={0} - Eigenschappen +EditNodes.attributes.text={0} - Attributen +EditNodes.properties.text.multiple=Various nodes - Properties +EditNodes.attributes.text.multiple=Various nodes - Attributes +EditNodes.size.text=Grootte +EditNodes.position.text=Positie ({0}) +EditNodes.color.text=Kleur +EditEdges.multiple.elements=Various edges +EditEdges.properties.text={0} - Eigenschappen +EditEdges.attributes.text={0} - Attributen +EditEdges.properties.text.multiple=Various edges - Properties +EditEdges.attributes.text.multiple=Various edges - Attributes +EditEdges.color.text=Kleur +EditNodes.label.color.text=Labelkleur +EditNodes.label.size.text=Labelgrootte +EditNodes.label.visible.text=Label Visible +EditEdges.label.color.text=Labelkleur +EditEdges.label.size.text=Labelgrootte +EditEdges.label.visible.text=Label Visible diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_pt_BR.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_pt_BR.properties new file mode 100644 index 0000000000..499c17ffff --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_pt_BR.properties @@ -0,0 +1,20 @@ +EditNodes.multiple.elements=Vαrios nσs +EditNodes.properties.text={0} - Propriedades +EditNodes.attributes.text={0} - Atributos +EditNodes.properties.text.multiple=Vαrios nσs - Propriedades +EditNodes.attributes.text.multiple=Vαrios nσs - Atributos +EditNodes.size.text=Tamanho +EditNodes.position.text=Posiηγo ({0}) +EditNodes.color.text=Cor +EditEdges.multiple.elements=Vαrias arestas +EditEdges.properties.text={0} - Propriedades +EditEdges.attributes.text={0} - Atributos +EditEdges.properties.text.multiple=Vαrias arestas - Propriedades +EditEdges.attributes.text.multiple=Vαrias arestas - Atributos +EditEdges.color.text=Cor +# EditNodes.label.color.text=Label Color +# EditNodes.label.size.text=Label Size +# EditNodes.label.visible.text=Label Visible +# EditEdges.label.color.text=Label Color +# EditEdges.label.size.text=Label Size +# EditEdges.label.visible.text=Label Visible diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_ro.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_ro.properties new file mode 100644 index 0000000000..6be0201fd0 --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_ro.properties @@ -0,0 +1,22 @@ + + +EditEdges.color.text=Culoare +EditNodes.label.color.text=Culoare etichet\u0103 +EditEdges.label.color.text=Culoare etichet\u0103 +EditNodes.multiple.elements=Diverse noduri +EditNodes.properties.text={0} - Propriet\u0103\u021Bi +EditNodes.attributes.text={0} - Atribute +EditNodes.properties.text.multiple=Diverse noduri - Propriet\u0103\u021Bi +EditNodes.attributes.text.multiple=Diverse noduri - Atribute +EditNodes.size.text=Dimensiune +EditNodes.position.text=Pozi\u021Bie ({0}) +EditNodes.color.text=Culoare +EditEdges.multiple.elements=Diverse muchii +EditEdges.properties.text={0} - Propriet\u0103\u021Bi +EditEdges.attributes.text={0} - Atribute +EditEdges.properties.text.multiple=Diverse muchii - Propriet\u0103\u021Bi +EditEdges.attributes.text.multiple=Diverse muchii - Atribute +EditNodes.label.size.text=Dimensiune etichet\u0103 +EditNodes.label.visible.text=Etichet\u0103 vizibil\u0103 +EditEdges.label.size.text=Dimensiune etichet\u0103 +EditEdges.label.visible.text=Etichet\u0103 vizibil\u0103 diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_ru.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_ru.properties new file mode 100644 index 0000000000..4bd5aa07b3 --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_ru.properties @@ -0,0 +1,20 @@ +EditNodes.multiple.elements=\u0420\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0443\u0437\u043b\u044b +EditNodes.properties.text={0} - \u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 +EditNodes.attributes.text={0} - \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b +EditNodes.properties.text.multiple=\u0420\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0443\u0437\u043b\u044b - \u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 +EditNodes.attributes.text.multiple=\u0420\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0443\u0437\u043b\u044b - \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b +EditNodes.size.text=\u0420\u0430\u0437\u043c\u0435\u0440 +EditNodes.position.text=\u041f\u043e\u0437\u0438\u0446\u0438\u044f ({0}) +EditNodes.color.text=\u0426\u0432\u0435\u0442 +EditEdges.multiple.elements=\u0420\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0440\u0451\u0431\u0440\u0430 +EditEdges.properties.text={0} - \u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 +EditEdges.attributes.text={0} - \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b +EditEdges.properties.text.multiple=\u0420\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0440\u0451\u0431\u0440\u0430 - \u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 +EditEdges.attributes.text.multiple=\u0420\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0440\u0451\u0431\u0440\u0430 - \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b +EditEdges.color.text=\u0426\u0432\u0435\u0442 +# EditNodes.label.color.text=Label Color +# EditNodes.label.size.text=Label Size +# EditNodes.label.visible.text=Label Visible +# EditEdges.label.color.text=Label Color +# EditEdges.label.size.text=Label Size +# EditEdges.label.visible.text=Label Visible diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_th.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_tr.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_tr.properties new file mode 100644 index 0000000000..a7f84fa1c6 --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_tr.properties @@ -0,0 +1,20 @@ +EditNodes.multiple.elements=Various nodes +EditNodes.properties.text={0} - Properties +EditNodes.attributes.text={0} - Attributes +EditNodes.properties.text.multiple=Various nodes - Properties +EditNodes.attributes.text.multiple=Various nodes - Attributes +EditNodes.size.text=Size +EditNodes.position.text=Position ({0}) +EditNodes.color.text=Color +EditEdges.multiple.elements=Various edges +EditEdges.properties.text={0} - Properties +EditEdges.attributes.text={0} - Attributes +EditEdges.properties.text.multiple=Various edges - Properties +EditEdges.attributes.text.multiple=Various edges - Attributes +EditEdges.color.text=Color +EditNodes.label.color.text=Label Color +EditNodes.label.size.text=Label Size +EditNodes.label.visible.text=Label Visible +EditEdges.label.color.text=Label Color +EditEdges.label.size.text=Label Size +EditEdges.label.visible.text=Label Visible diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_uk.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_uk.properties new file mode 100644 index 0000000000..29cc8449e4 --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_uk.properties @@ -0,0 +1,20 @@ +EditEdges.label.size.text=\u0420\u043E\u0437\u043C\u0456\u0440 \u0435\u0442\u0438\u043A\u0435\u0442\u043A\u0438 +EditEdges.color.text=\u041A\u043E\u043B\u0456\u0440 +EditNodes.multiple.elements=\u0420\u0456\u0437\u043D\u0456 \u0432\u0443\u0437\u043B\u0438 +EditNodes.properties.text={0} - \u0412\u043B\u0430\u0441\u0442\u0438\u0432\u043E\u0441\u0442\u0456 +EditNodes.attributes.text={0} - \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438 +EditNodes.properties.text.multiple=\u0420\u0456\u0437\u043D\u0456 \u0432\u0443\u0437\u043B\u0438 - \u0412\u043B\u0430\u0441\u0442\u0438\u0432\u043E\u0441\u0442\u0456 +EditNodes.attributes.text.multiple=\u0420\u0456\u0437\u043D\u0456 \u0432\u0443\u0437\u043B\u0438 - \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438 +EditNodes.size.text=\u0420\u043E\u0437\u043C\u0456\u0440 +EditNodes.position.text=\u041F\u043E\u0437\u0438\u0446\u0456\u044F ({0}) +EditNodes.color.text=\u041A\u043E\u043B\u0456\u0440 +EditEdges.multiple.elements=\u0420\u0456\u0437\u043D\u0456 \u043A\u0440\u043E\u043C\u043A\u0438 +EditEdges.properties.text={0} - \u0412\u043B\u0430\u0441\u0442\u0438\u0432\u043E\u0441\u0442\u0456 +EditEdges.attributes.text={0} - \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438 +EditEdges.properties.text.multiple=\u0420\u0456\u0437\u043D\u0456 \u0440\u0435\u0431\u0440\u0430 - \u0412\u043B\u0430\u0441\u0442\u0438\u0432\u043E\u0441\u0442\u0456 +EditEdges.attributes.text.multiple=\u0420\u0456\u0437\u043D\u0456 \u0440\u0435\u0431\u0440\u0430 - \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438 +EditNodes.label.color.text=\u041A\u043E\u043B\u0456\u0440 \u0435\u0442\u0438\u043A\u0435\u0442\u043A\u0438 +EditNodes.label.size.text=\u0420\u043E\u0437\u043C\u0456\u0440 \u0435\u0442\u0438\u043A\u0435\u0442\u043A\u0438 +EditEdges.label.color.text=\u041A\u043E\u043B\u0456\u0440 \u0435\u0442\u0438\u043A\u0435\u0442\u043A\u0438 +EditEdges.label.visible.text=\u041C\u0456\u0442\u043A\u0430 \u0432\u0438\u0434\u0438\u043C\u0430 +EditNodes.label.visible.text=\u041C\u0456\u0442\u043A\u0430 \u0432\u0438\u0434\u0438\u043C\u0430 diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_zh_CN.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_zh_CN.properties new file mode 100644 index 0000000000..c48a4395b8 --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_zh_CN.properties @@ -0,0 +1,20 @@ +EditNodes.multiple.elements=\u5404\u4e2a\u8282\u70b9 +EditNodes.properties.text={0} - \u5c5e\u6027 +EditNodes.attributes.text={0} - \u5c5e\u6027 +EditNodes.properties.text.multiple=\u5404\u4e2a\u8282\u70b9 - \u5c5e\u6027 +EditNodes.attributes.text.multiple=\u5404\u4e2a\u8282\u70b9 - \u5c5e\u6027 +EditNodes.size.text=\u5c3a\u5bf8 +EditNodes.position.text=\u4f4d\u7f6e({0}) +EditNodes.color.text=\u989c\u8272 +EditEdges.multiple.elements=\u5404\u4e2a\u8fb9 +EditEdges.properties.text={0} - \u5c5e\u6027 +EditEdges.attributes.text={0} - \u5c5e\u6027 +EditEdges.properties.text.multiple=\u5404\u4e2a\u8fb9-\u5c5e\u6027 +EditEdges.attributes.text.multiple=\u5404\u4e2a\u8fb9 - \u5c5e\u6027 +EditEdges.color.text=\u989c\u8272 +EditNodes.label.color.text=\u6807\u7b7e\u989c\u8272 +EditNodes.label.size.text=\u6807\u7b7e\u5c3a\u5bf8 +EditNodes.label.visible.text=\u6807\u7b7e\u53ef\u89c1 +EditEdges.label.color.text=\u6807\u7b7e\u989c\u8272 +EditEdges.label.size.text=\u6807\u7b7e\u5c3a\u5bf8 +EditEdges.label.visible.text=\u6807\u7b7e\u53ef\u89c1 diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_zh_TW.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_zh_TW.properties new file mode 100644 index 0000000000..a7f84fa1c6 --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/edit/Bundle_zh_TW.properties @@ -0,0 +1,20 @@ +EditNodes.multiple.elements=Various nodes +EditNodes.properties.text={0} - Properties +EditNodes.attributes.text={0} - Attributes +EditNodes.properties.text.multiple=Various nodes - Properties +EditNodes.attributes.text.multiple=Various nodes - Attributes +EditNodes.size.text=Size +EditNodes.position.text=Position ({0}) +EditNodes.color.text=Color +EditEdges.multiple.elements=Various edges +EditEdges.properties.text={0} - Properties +EditEdges.attributes.text={0} - Attributes +EditEdges.properties.text.multiple=Various edges - Properties +EditEdges.attributes.text.multiple=Various edges - Attributes +EditEdges.color.text=Color +EditNodes.label.color.text=Label Color +EditNodes.label.size.text=Label Size +EditNodes.label.visible.text=Label Visible +EditEdges.label.color.text=Label Color +EditEdges.label.size.text=Label Size +EditEdges.label.visible.text=Label Visible diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/options/Bundle.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/options/Bundle.properties new file mode 100644 index 0000000000..4cbeaa00f0 --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/options/Bundle.properties @@ -0,0 +1,7 @@ +AdvancedOption_DisplayName_Attributes=Attributes +AdvancedOption_Keywords_Attributes=selection, edit, columns, attributes +# Section titles +AttributesOptionsPanel.defaultSettingsTitle.title=Default Attributes Settings +# Checkboxes +AttributesOptionsPanel.showNullColumns.text=Show columns with null values +AttributesOptionsPanel.includeProperties.text=Include property columns diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/options/Bundle_ar.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/options/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/options/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/options/Bundle_fr.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/options/Bundle_fr.properties new file mode 100644 index 0000000000..abea58f78c --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/options/Bundle_fr.properties @@ -0,0 +1 @@ +AdvancedOption_DisplayName_Attributes=Attributs diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/options/Bundle_th.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/options/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/options/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/selection/Bundle.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/selection/Bundle.properties new file mode 100644 index 0000000000..8d89b9d710 --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/selection/Bundle.properties @@ -0,0 +1,3 @@ +SelectionPanel.nullColumn = +SelectionPanel.noSelection = No element selected +SelectionPanel.noColumns = No columns selected \ No newline at end of file diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/selection/Bundle_ar.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/selection/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/selection/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/selection/Bundle_fr.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/selection/Bundle_fr.properties new file mode 100644 index 0000000000..5e3b809411 --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/selection/Bundle_fr.properties @@ -0,0 +1 @@ +SelectionPanel.nullColumn= diff --git a/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/selection/Bundle_th.properties b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/selection/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopAttributes/src/main/resources/org/gephi/desktop/attributes/selection/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopBranding/pom.xml b/modules/DesktopBranding/pom.xml index 1ffe37dbfb..6c280a5bb9 100644 --- a/modules/DesktopBranding/pom.xml +++ b/modules/DesktopBranding/pom.xml @@ -4,21 +4,25 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. - org.gephi desktop-branding - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm DesktopBranding + + + false + + ${project.groupId} - desktop-progress + desktop-window ${project.groupId} @@ -36,6 +40,14 @@ ${project.groupId} core-library-wrapper + + ${project.groupId} + ui-utils + + + ${project.groupId} + desktop-icons + org.netbeans.api org-openide-util-lookup @@ -44,6 +56,10 @@ org.netbeans.api org-openide-util + + org.netbeans.api + org-openide-util-ui + org.netbeans.api org-openide-windows @@ -72,22 +88,132 @@ org.netbeans.api org-netbeans-api-progress + + org.netbeans.api + org-netbeans-api-progress-nb + org.netbeans.api org-openide-nodes + + org.netbeans.api + org-openide-io + + + org.netbeans.modules + org-netbeans-core-output2 + + + org.netbeans.api + org-openide-awt + + + org.netbeans.api + org-netbeans-modules-autoupdate-services + + + org.netbeans.api + org-netbeans-modules-options-api + + + io.sentry + sentry + + + + + src/main/resources + + org/gephi/branding/desktop/layer.xml + + + + + + maven-resources-plugin + + + + generate-bundles + generate-resources + + copy-resources + + + src/main/nbm-branding + + + src/main/resources + + core/core.jar/org/netbeans/core/startup/Bundle.properties + modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/view/ui/Bundle.properties + + true + + + + + + + + generate-autoupdate-urls + generate-resources + + copy-resources + + + ${basedir}/target/classes + + + src/main/resources + + org/gephi/branding/desktop/layer.xml + + true + + + + + + + + - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin + true - - + ${brandingToken} + ${brandingToken} + + warn + + + default-branding + package + + + + + + + deployment + + true + + + diff --git a/modules/DesktopBranding/src/main/java/org/gephi/branding/desktop/CommandLineProcessor.java b/modules/DesktopBranding/src/main/java/org/gephi/branding/desktop/CommandLineProcessor.java index dd57683779..c1df0d9acc 100644 --- a/modules/DesktopBranding/src/main/java/org/gephi/branding/desktop/CommandLineProcessor.java +++ b/modules/DesktopBranding/src/main/java/org/gephi/branding/desktop/CommandLineProcessor.java @@ -39,8 +39,10 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.branding.desktop; +import java.awt.event.ActionEvent; import java.io.File; import java.util.ArrayList; import java.util.Arrays; @@ -48,31 +50,27 @@ Development and Distribution License("CDDL") (collectively, the import java.util.List; import java.util.Map; import java.util.Set; -import org.gephi.desktop.importer.api.ImportControllerUI; -import org.gephi.desktop.project.api.ProjectControllerUI; -import org.netbeans.api.sendopts.CommandException; +import java.util.logging.Logger; import org.netbeans.spi.sendopts.Env; import org.netbeans.spi.sendopts.Option; import org.netbeans.spi.sendopts.OptionProcessor; import org.openide.DialogDisplayer; import org.openide.NotifyDescriptor; -import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileUtil; -import org.openide.util.Lookup; +import org.openide.awt.Actions; +import org.openide.util.Exceptions; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; +import org.openide.windows.WindowManager; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = OptionProcessor.class) public class CommandLineProcessor extends OptionProcessor { - private Option openOption = Option.defaultArguments(); - private Option openOption2 = Option.additionalArguments('o', "open"); + private final Option openOption = Option.defaultArguments(); + private final Option openOption2 = Option.additionalArguments('o', "open"); private final String MEMORY_ERROR; - private static final String GEPHI_EXTENSION = "gephi"; public CommandLineProcessor() { MEMORY_ERROR = NbBundle.getMessage(CommandLineProcessor.class, "CommandLineProcessor.OutOfMemoryError.message"); @@ -80,63 +78,54 @@ public CommandLineProcessor() { @Override protected Set + + + @@ -161,6 +164,9 @@ + + + diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/general/actions/MergeColumnsUI.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/general/actions/MergeColumnsUI.java index 59300ecac4..933b6ce85d 100644 --- a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/general/actions/MergeColumnsUI.java +++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/general/actions/MergeColumnsUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.datalab.general.actions; import java.awt.event.MouseAdapter; @@ -50,40 +51,52 @@ Development and Distribution License("CDDL") (collectively, the import javax.swing.JList; import javax.swing.event.ListDataEvent; import javax.swing.event.ListDataListener; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeController; -import org.gephi.data.attributes.api.AttributeTable; import org.gephi.datalab.api.DataLaboratoryHelper; import org.gephi.datalab.spi.columns.merge.AttributeColumnsMergeStrategy; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Table; import org.gephi.ui.components.richtooltip.RichTooltip; import org.netbeans.validation.api.Problems; import org.netbeans.validation.api.Validator; import org.netbeans.validation.api.ui.ValidationGroup; -import org.netbeans.validation.api.ui.ValidationPanel; +import org.netbeans.validation.api.ui.swing.ValidationPanel; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; /** * UI for choosing columns to merge and a merge strategy. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class MergeColumnsUI extends javax.swing.JPanel { + private final DefaultListModel availableColumnsModel; + private final DefaultListModel columnsToMergeModel; private JButton okButton; - - public enum Mode { - - NODES_TABLE, - EDGES_TABLE - } private Mode mode = Mode.NODES_TABLE; - private AttributeTable table; - private DefaultListModel availableColumnsModel; - private DefaultListModel columnsToMergeModel; + private Table table; private AttributeColumnsMergeStrategy[] availableMergeStrategies; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton addColumnButton; + private javax.swing.JLabel availableColumnsLabel; + private javax.swing.JList availableColumnsList; + private javax.swing.JComboBox availableStrategiesComboBox; + private javax.swing.JLabel availableStrategiesLabel; + private javax.swing.JLabel columnsToMergeLabel; + private javax.swing.JList columnsToMergeList; + private javax.swing.JLabel description; + private javax.swing.JLabel infoLabel; + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JScrollPane jScrollPane2; + private javax.swing.JButton removeColumnButton; + // End of variables declaration//GEN-END:variables - /** Creates new form MergeColumnsUI */ + /** + * Creates new form MergeColumnsUI + */ public MergeColumnsUI() { initComponents(); infoLabel.addMouseListener(new MouseAdapter() { @@ -127,36 +140,53 @@ private RichTooltip buildTooltip(AttributeColumnsMergeStrategy strategy) { columnsToMergeModel.addListDataListener(new ListDataListener() { + @Override public void intervalAdded(ListDataEvent e) { refreshAvailableMergeStrategies(); } + @Override public void intervalRemoved(ListDataEvent e) { refreshAvailableMergeStrategies(); } + @Override public void contentsChanged(ListDataEvent e) { refreshAvailableMergeStrategies(); } }); } + public static ValidationPanel createValidationPanel(MergeColumnsUI innerPanel) { + ValidationPanel validationPanel = new ValidationPanel(); + if (innerPanel == null) { + innerPanel = new MergeColumnsUI(); + } + validationPanel.setInnerComponent(innerPanel); + + ValidationGroup group = validationPanel.getValidationGroup(); + + group.add(innerPanel.availableStrategiesComboBox, new MergeStrategyValidator(innerPanel)); + + return validationPanel; + } + private void loadColumns() { availableColumnsModel.clear(); columnsToMergeModel.clear(); - AttributeController ac = Lookup.getDefault().lookup(AttributeController.class); - AttributeColumn[] columns; + GraphModel am = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); + Column[] columns; if (mode == Mode.NODES_TABLE) { - table = ac.getModel().getNodeTable(); - columns = table.getColumns(); + table = am.getNodeTable(); + columns = table.toArray(); } else { - table = ac.getModel().getEdgeTable(); - columns = table.getColumns(); + table = am.getEdgeTable(); + columns = table.toArray(); } - for (int i = 0; i < columns.length; i++) { - availableColumnsModel.addElement(new ColumnWrapper(columns[i])); + for (Column column : columns) { + availableColumnsModel.addElement(new ColumnWrapper(column)); } availableColumnsList.setModel(availableColumnsModel); @@ -169,16 +199,18 @@ private void refreshAvailableMergeStrategies() { availableStrategiesComboBox.removeAllItems(); - AttributeColumn[] columnsToMerge = getColumnsToMerge(); + Column[] columnsToMerge = getColumnsToMerge(); if (columnsToMerge.length < 1) { return; } - AttributeColumnsMergeStrategy[] strategies = DataLaboratoryHelper.getDefault().getAttributeColumnsMergeStrategies(); - ArrayList availableStrategiesList = new ArrayList(); + AttributeColumnsMergeStrategy[] strategies = + DataLaboratoryHelper.getDefault().getAttributeColumnsMergeStrategies(); + ArrayList availableStrategiesList = new ArrayList<>(); for (AttributeColumnsMergeStrategy strategy : strategies) { strategy.setup(table, columnsToMerge); - availableStrategiesList.add(strategy);//Add all but disallow executing the strategies that cannot be executed with given column + availableStrategiesList + .add(strategy);//Add all but disallow executing the strategies that cannot be executed with given column } availableMergeStrategies = availableStrategiesList.toArray(new AttributeColumnsMergeStrategy[0]); @@ -208,10 +240,10 @@ public boolean canExecuteSelectedStrategy() { return result; } - private AttributeColumn[] getColumnsToMerge() { + private Column[] getColumnsToMerge() { Object[] elements = columnsToMergeModel.toArray(); - AttributeColumn[] columns = new AttributeColumn[elements.length]; + Column[] columns = new Column[elements.length]; for (int i = 0; i < elements.length; i++) { columns[i] = ((ColumnWrapper) elements[i]).getColumn(); } @@ -239,31 +271,6 @@ public void setOkButton(JButton okButton) { refreshOkButton(); } - /** - * Class to contain a column and return its name + type with toString method. - */ - class ColumnWrapper { - - private AttributeColumn column; - - public ColumnWrapper(AttributeColumn column) { - this.column = column; - } - - public AttributeColumn getColumn() { - return column; - } - - public void setColumn(AttributeColumn column) { - this.column = column; - } - - @Override - public String toString() { - return column.getTitle() + " -- " + column.getType().getTypeString(); - } - } - private void moveElementsFromListToOtherList(JList sourceList, JList targetList) { DefaultListModel sourceModel, targetModel; sourceModel = (DefaultListModel) sourceList.getModel(); @@ -275,44 +282,8 @@ private void moveElementsFromListToOtherList(JList sourceList, JList targetList) } } - public static ValidationPanel createValidationPanel(MergeColumnsUI innerPanel) { - ValidationPanel validationPanel = new ValidationPanel(); - if (innerPanel == null) { - innerPanel = new MergeColumnsUI(); - } - validationPanel.setInnerComponent(innerPanel); - - ValidationGroup group = validationPanel.getValidationGroup(); - - group.add(innerPanel.availableStrategiesComboBox, new MergeStrategyValidator(innerPanel)); - - return validationPanel; - } - - private static class MergeStrategyValidator implements Validator { - - private MergeColumnsUI ui; - - public MergeStrategyValidator(MergeColumnsUI ui) { - this.ui = ui; - } - - public boolean validate(Problems problems, String string, ComboBoxModel t) { - if (t.getSelectedItem() != null) { - if (ui.canExecuteSelectedStrategy()) { - return true; - } else { - problems.add(NbBundle.getMessage(MergeColumnsUI.class, "MergeColumnsUI.problems.not_executable_strategy")); - return false; - } - } else { - problems.add(NbBundle.getMessage(MergeColumnsUI.class, "MergeColumnsUI.problems.less_than_2_columns_selected")); - return false; - } - } - } - - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -334,138 +305,234 @@ private void initComponents() { availableStrategiesComboBox = new javax.swing.JComboBox(); infoLabel = new javax.swing.JLabel(); + columnsToMergeList.addMouseListener(new java.awt.event.MouseAdapter() { + @Override + public void mouseClicked(java.awt.event.MouseEvent evt) { + columnsToMergeListMouseClicked(evt); + } + }); jScrollPane1.setViewportView(columnsToMergeList); description.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - description.setText(org.openide.util.NbBundle.getMessage(MergeColumnsUI.class, "MergeColumnsUI.description.text")); // NOI18N + description.setText( + org.openide.util.NbBundle.getMessage(MergeColumnsUI.class, "MergeColumnsUI.description.text")); // NOI18N - addColumnButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/datalab/resources/arrow.png"))); // NOI18N - addColumnButton.setText(org.openide.util.NbBundle.getMessage(MergeColumnsUI.class, "MergeColumnsUI.addColumnButton.text")); // NOI18N + addColumnButton.setIcon(ImageUtilities.loadImageIcon("DesktopDataLaboratory/arrow.svg", false)); // NOI18N + addColumnButton.setText(org.openide.util.NbBundle + .getMessage(MergeColumnsUI.class, "MergeColumnsUI.addColumnButton.text")); // NOI18N addColumnButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { addColumnButtonActionPerformed(evt); } }); - removeColumnButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/datalab/resources/arrow-180.png"))); // NOI18N - removeColumnButton.setText(org.openide.util.NbBundle.getMessage(MergeColumnsUI.class, "MergeColumnsUI.removeColumnButton.text")); // NOI18N + removeColumnButton.setIcon(ImageUtilities.loadImageIcon("DesktopDataLaboratory/arrow-180.svg", false)); // NOI18N + removeColumnButton.setText(org.openide.util.NbBundle + .getMessage(MergeColumnsUI.class, "MergeColumnsUI.removeColumnButton.text")); // NOI18N removeColumnButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { removeColumnButtonActionPerformed(evt); } }); + availableColumnsList.addMouseListener(new java.awt.event.MouseAdapter() { + @Override + public void mouseClicked(java.awt.event.MouseEvent evt) { + availableColumnsListMouseClicked(evt); + } + }); jScrollPane2.setViewportView(availableColumnsList); availableColumnsLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - availableColumnsLabel.setText(org.openide.util.NbBundle.getMessage(MergeColumnsUI.class, "MergeColumnsUI.availableColumnsLabel.text")); // NOI18N + availableColumnsLabel.setText(org.openide.util.NbBundle + .getMessage(MergeColumnsUI.class, "MergeColumnsUI.availableColumnsLabel.text")); // NOI18N columnsToMergeLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - columnsToMergeLabel.setText(org.openide.util.NbBundle.getMessage(MergeColumnsUI.class, "MergeColumnsUI.columnsToMergeLabel.text")); // NOI18N + columnsToMergeLabel.setText(org.openide.util.NbBundle + .getMessage(MergeColumnsUI.class, "MergeColumnsUI.columnsToMergeLabel.text")); // NOI18N availableStrategiesLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - availableStrategiesLabel.setText(org.openide.util.NbBundle.getMessage(MergeColumnsUI.class, "MergeColumnsUI.availableStrategiesLabel.text")); // NOI18N + availableStrategiesLabel.setText(org.openide.util.NbBundle + .getMessage(MergeColumnsUI.class, "MergeColumnsUI.availableStrategiesLabel.text")); // NOI18N availableStrategiesComboBox.addItemListener(new java.awt.event.ItemListener() { + @Override public void itemStateChanged(java.awt.event.ItemEvent evt) { availableStrategiesComboBoxItemStateChanged(evt); } }); infoLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - infoLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/datalab/resources/info.png"))); // NOI18N - infoLabel.setText(org.openide.util.NbBundle.getMessage(MergeColumnsUI.class, "MergeColumnsUI.infoLabel.text")); // NOI18N + infoLabel.setIcon(ImageUtilities.loadImageIcon("DesktopDataLaboratory/info.svg", false)); // NOI18N + infoLabel.setText( + org.openide.util.NbBundle.getMessage(MergeColumnsUI.class, "MergeColumnsUI.infoLabel.text")); // NOI18N infoLabel.setEnabled(false); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(description, javax.swing.GroupLayout.DEFAULT_SIZE, 394, Short.MAX_VALUE) - .addContainerGap()) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(availableColumnsLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) - .addComponent(availableStrategiesLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 152, Short.MAX_VALUE)) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGap(10, 10, 10) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(addColumnButton) - .addComponent(removeColumnButton)) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addGroup(layout.createSequentialGroup() - .addGap(14, 14, 14) - .addComponent(columnsToMergeLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 149, Short.MAX_VALUE)) - .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 153, Short.MAX_VALUE))) - .addGap(30, 30, 30)) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(availableStrategiesComboBox, 0, 218, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(infoLabel) - .addContainerGap()))))) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(description, javax.swing.GroupLayout.DEFAULT_SIZE, 394, Short.MAX_VALUE) + .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(availableColumnsLabel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) + .addComponent(availableStrategiesLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 152, + Short.MAX_VALUE)) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(10, 10, 10) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(addColumnButton) + .addComponent(removeColumnButton)) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(layout.createSequentialGroup() + .addGap(14, 14, 14) + .addComponent(columnsToMergeLabel, javax.swing.GroupLayout.DEFAULT_SIZE, + 149, Short.MAX_VALUE)) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, + layout.createSequentialGroup() + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 153, + Short.MAX_VALUE))) + .addGap(30, 30, 30)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(availableStrategiesComboBox, 0, 218, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(infoLabel) + .addContainerGap()))))) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap() - .addComponent(description, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(availableColumnsLabel) - .addComponent(columnsToMergeLabel)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 204, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(12, 12, 12)) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addComponent(addColumnButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(removeColumnButton) - .addGap(94, 94, 94))) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(availableStrategiesComboBox, javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(infoLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(availableStrategiesLabel)) - .addContainerGap()) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addComponent(description, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(availableColumnsLabel) + .addComponent(columnsToMergeLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 204, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 204, + javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(12, 12, 12)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addComponent(addColumnButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(removeColumnButton) + .addGap(94, 94, 94))) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(availableStrategiesComboBox, javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(infoLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 20, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(availableStrategiesLabel)) + .addContainerGap()) ); }// //GEN-END:initComponents - private void addColumnButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addColumnButtonActionPerformed + private void addColumnButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_addColumnButtonActionPerformed moveElementsFromListToOtherList(availableColumnsList, columnsToMergeList); }//GEN-LAST:event_addColumnButtonActionPerformed - private void removeColumnButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeColumnButtonActionPerformed + private void removeColumnButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeColumnButtonActionPerformed moveElementsFromListToOtherList(columnsToMergeList, availableColumnsList); }//GEN-LAST:event_removeColumnButtonActionPerformed - private void availableStrategiesComboBoxItemStateChanged(java.awt.event.ItemEvent evt) {//GEN-FIRST:event_availableStrategiesComboBoxItemStateChanged + private void availableStrategiesComboBoxItemStateChanged( + java.awt.event.ItemEvent evt) {//GEN-FIRST:event_availableStrategiesComboBoxItemStateChanged refreshOkButton(); infoLabel.setEnabled(availableStrategiesComboBox.getSelectedIndex() != -1); }//GEN-LAST:event_availableStrategiesComboBoxItemStateChanged - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton addColumnButton; - private javax.swing.JLabel availableColumnsLabel; - private javax.swing.JList availableColumnsList; - private javax.swing.JComboBox availableStrategiesComboBox; - private javax.swing.JLabel availableStrategiesLabel; - private javax.swing.JLabel columnsToMergeLabel; - private javax.swing.JList columnsToMergeList; - private javax.swing.JLabel description; - private javax.swing.JLabel infoLabel; - private javax.swing.JScrollPane jScrollPane1; - private javax.swing.JScrollPane jScrollPane2; - private javax.swing.JButton removeColumnButton; - // End of variables declaration//GEN-END:variables + + private void availableColumnsListMouseClicked( + java.awt.event.MouseEvent evt) {//GEN-FIRST:event_availableColumnsListMouseClicked + if (evt.getClickCount() == 2) { + int index = availableColumnsList.locationToIndex(evt.getPoint()); + availableColumnsList.setSelectedIndex(index); + moveElementsFromListToOtherList(availableColumnsList, columnsToMergeList); + } + }//GEN-LAST:event_availableColumnsListMouseClicked + + private void columnsToMergeListMouseClicked( + java.awt.event.MouseEvent evt) {//GEN-FIRST:event_columnsToMergeListMouseClicked + if (evt.getClickCount() == 2) { + int index = columnsToMergeList.locationToIndex(evt.getPoint()); + columnsToMergeList.setSelectedIndex(index); + moveElementsFromListToOtherList(columnsToMergeList, availableColumnsList); + } + }//GEN-LAST:event_columnsToMergeListMouseClicked + + public enum Mode { + + NODES_TABLE, + EDGES_TABLE + } + + private static class MergeStrategyValidator implements Validator { + + private final MergeColumnsUI ui; + + public MergeStrategyValidator(MergeColumnsUI ui) { + this.ui = ui; + } + + @Override + public Class modelType() { + return ComboBoxModel.class; + } + + @Override + public void validate(Problems problems, String string, ComboBoxModel t) { + if (t.getSelectedItem() != null) { + if (!ui.canExecuteSelectedStrategy()) { + problems.add( + NbBundle.getMessage(MergeColumnsUI.class, "MergeColumnsUI.problems.not_executable_strategy")); + } + } else { + problems.add( + NbBundle.getMessage(MergeColumnsUI.class, "MergeColumnsUI.problems.less_than_2_columns_selected")); + } + } + } + + /** + * Class to contain a column and return its name + type with toString method. + */ + class ColumnWrapper { + + private Column column; + + public ColumnWrapper(Column column) { + this.column = column; + } + + public Column getColumn() { + return column; + } + + public void setColumn(Column column) { + this.column = column; + } + + @Override + public String toString() { + return column.getTitle() + " -- " + column.getTypeClass().getSimpleName(); + } + } } diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/persistence/DataLaboratoryPersistenceProvider.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/persistence/DataLaboratoryPersistenceProvider.java index 6b15a21d48..020dbf4276 100644 --- a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/persistence/DataLaboratoryPersistenceProvider.java +++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/persistence/DataLaboratoryPersistenceProvider.java @@ -39,32 +39,34 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.datalab.persistence; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import javax.xml.stream.XMLStreamWriter; import javax.xml.stream.events.XMLEvent; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeModel; -import org.gephi.data.attributes.api.AttributeTable; import org.gephi.desktop.datalab.AvailableColumnsModel; import org.gephi.desktop.datalab.DataTablesModel; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Table; import org.gephi.project.api.Workspace; import org.gephi.project.spi.WorkspacePersistenceProvider; +import org.gephi.project.spi.WorkspaceXMLPersistenceProvider; import org.openide.util.lookup.ServiceProvider; /** - * * @author Eduardo */ @ServiceProvider(service = WorkspacePersistenceProvider.class, position = 16000) -public class DataLaboratoryPersistenceProvider implements WorkspacePersistenceProvider { +public class DataLaboratoryPersistenceProvider implements WorkspaceXMLPersistenceProvider { private static final String AVAILABLE_COLUMNS = "availablecolumns"; private static final String NODE_COLUMN = "nodecolumn"; private static final String EDGE_COLUMN = "edgecolumn"; + @Override public void writeXML(XMLStreamWriter writer, Workspace workspace) { DataTablesModel dataTablesModel = workspace.getLookup().lookup(DataTablesModel.class); if (dataTablesModel == null) { @@ -77,6 +79,7 @@ public void writeXML(XMLStreamWriter writer, Workspace workspace) { } } + @Override public void readXML(XMLStreamReader reader, Workspace workspace) { try { readDataTablesModel(reader, workspace); @@ -85,32 +88,30 @@ public void readXML(XMLStreamReader reader, Workspace workspace) { } } + @Override public String getIdentifier() { return AVAILABLE_COLUMNS; } - private void writeDataTablesModel(XMLStreamWriter writer, DataTablesModel dataTablesModel) throws XMLStreamException { - writer.writeStartElement(AVAILABLE_COLUMNS); - - for (AttributeColumn column : dataTablesModel.getNodeAvailableColumnsModel().getAvailableColumns()) { + private void writeDataTablesModel(XMLStreamWriter writer, DataTablesModel dataTablesModel) + throws XMLStreamException { + for (Column column : dataTablesModel.getNodeAvailableColumnsModel().getAvailableColumns()) { writer.writeStartElement(NODE_COLUMN); writer.writeAttribute("id", String.valueOf(column.getIndex())); writer.writeEndElement(); } - for (AttributeColumn column : dataTablesModel.getEdgeAvailableColumnsModel().getAvailableColumns()) { + for (Column column : dataTablesModel.getEdgeAvailableColumnsModel().getAvailableColumns()) { writer.writeStartElement(EDGE_COLUMN); writer.writeAttribute("id", String.valueOf(column.getIndex())); writer.writeEndElement(); } - - writer.writeEndElement(); } private void readDataTablesModel(XMLStreamReader reader, Workspace workspace) throws XMLStreamException { - AttributeModel attributeModel = workspace.getLookup().lookup(AttributeModel.class); - AttributeTable nodesTable = attributeModel.getNodeTable(); - AttributeTable edgesTable = attributeModel.getEdgeTable(); + GraphModel graphModel = workspace.getLookup().lookup(GraphModel.class); + Table nodesTable = graphModel.getNodeTable(); + Table edgesTable = graphModel.getEdgeTable(); DataTablesModel dataTablesModel = workspace.getLookup().lookup(DataTablesModel.class); if (dataTablesModel == null) { workspace.add(dataTablesModel = new DataTablesModel(workspace)); @@ -127,13 +128,13 @@ private void readDataTablesModel(XMLStreamReader reader, Workspace workspace) th String name = reader.getLocalName(); if (NODE_COLUMN.equalsIgnoreCase(name)) { Integer id = Integer.parseInt(reader.getAttributeValue(null, "id")); - AttributeColumn column = nodesTable.getColumn(id); + Column column = nodesTable.getColumn(id); if (column != null) { nodeColumns.addAvailableColumn(column); } } else if (EDGE_COLUMN.equalsIgnoreCase(name)) { Integer id = Integer.parseInt(reader.getAttributeValue(null, "id")); - AttributeColumn column = edgesTable.getColumn(id); + Column column = edgesTable.getColumn(id); if (column != null) { edgeColumns.addAvailableColumn(column); } diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/AbstractElementsDataTable.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/AbstractElementsDataTable.java new file mode 100644 index 0000000000..9099205252 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/AbstractElementsDataTable.java @@ -0,0 +1,406 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian , Mathieu Jacomy, Julian Bilcke, Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.datalab.tables; + +import java.awt.Point; +import java.awt.Rectangle; +import java.awt.event.MouseEvent; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.Objects; +import java.util.regex.PatternSyntaxException; +import javax.swing.RowFilter; +import javax.swing.UIManager; +import javax.swing.table.JTableHeader; +import javax.swing.table.TableCellRenderer; +import javax.swing.table.TableColumnModel; +import org.gephi.datalab.api.AttributeColumnsController; +import org.gephi.desktop.datalab.DataTablesModel; +import org.gephi.desktop.datalab.tables.celleditors.AttributeTypesSupportCellEditor; +import org.gephi.desktop.datalab.tables.columns.AttributeDataColumn; +import org.gephi.desktop.datalab.tables.columns.ElementDataColumn; +import org.gephi.desktop.datalab.utils.GraphModelProvider; +import org.gephi.desktop.datalab.utils.componentproviders.ArraySparklinesGraphicsComponentProvider; +import org.gephi.desktop.datalab.utils.componentproviders.IntervalMapSparklinesGraphicsComponentProvider; +import org.gephi.desktop.datalab.utils.componentproviders.IntervalSetGraphicsComponentProvider; +import org.gephi.desktop.datalab.utils.componentproviders.TimestampMapSparklinesGraphicsComponentProvider; +import org.gephi.desktop.datalab.utils.componentproviders.TimestampSetGraphicsComponentProvider; +import org.gephi.desktop.datalab.utils.stringconverters.ArrayStringConverter; +import org.gephi.desktop.datalab.utils.stringconverters.DefaultStringRepresentationConverter; +import org.gephi.desktop.datalab.utils.stringconverters.DoubleStringConverter; +import org.gephi.desktop.datalab.utils.stringconverters.TimeMapStringConverter; +import org.gephi.desktop.datalab.utils.stringconverters.TimeSetStringConverter; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Interval; +import org.gephi.graph.api.types.IntervalMap; +import org.gephi.graph.api.types.IntervalSet; +import org.gephi.graph.api.types.TimestampMap; +import org.gephi.graph.api.types.TimestampSet; +import org.gephi.ui.utils.UIUtils; +import org.jdesktop.swingx.JXTable; +import org.jdesktop.swingx.decorator.HighlighterFactory; +import org.jdesktop.swingx.renderer.DefaultTableRenderer; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +/** + * @author Mathieu Bastian + * @author Eduardo Ramos + */ +public abstract class AbstractElementsDataTable implements GraphModelProvider { + + protected final JXTable table; + protected final AttributeColumnsController attributeColumnsController; + private final DefaultTableRenderer arrayRenderer = new DefaultTableRenderer(new ArrayStringConverter()); + private final DefaultTableRenderer defaultStringRepresentationRenderer = + new DefaultTableRenderer(new DefaultStringRepresentationConverter()); + private final DefaultTableRenderer timeSetRenderer; + private final DefaultTableRenderer timeMapRenderer; + private final DefaultTableRenderer doubleRenderer = new DefaultTableRenderer(new DoubleStringConverter()); + //Graphics renderers: + private final IntervalSetGraphicsComponentProvider intervalSetGraphicsComponentProvider; + private final TimestampSetGraphicsComponentProvider timestampSetGraphicsComponentProvider; + private final DefaultTableRenderer intervalSetGraphicsRenderer; + private final DefaultTableRenderer timestampSetGraphicsRenderer; + private final DefaultTableRenderer intervalMapSparklinesGraphicsRenderer; + private final DefaultTableRenderer timestampMapSparklinesGraphicsRenderer; + private final DefaultTableRenderer arraySparklinesGraphicsRenderer; + protected String filterPattern; + protected List selectedElements; + protected boolean refreshingTable = false; + protected Column[] showingColumns = null; + protected ElementsDataTableModel model; + protected GraphModel graphModel; + //Renderers: + private boolean drawTimeIntervalGraphics = false; + private boolean drawSparklines = false; + + public AbstractElementsDataTable() { + attributeColumnsController = Lookup.getDefault().lookup(AttributeColumnsController.class); + table = new JXTable(); + table.setColumnControlVisible(false); + table.setSortable(true); + table.setAutoCreateRowSorter(true); + + if (!UIUtils.isDarkLookAndFeel()) { + table.setHighlighters(HighlighterFactory.createAlternateStriping()); + } + + intervalSetGraphicsComponentProvider = new IntervalSetGraphicsComponentProvider(this, table); + timestampSetGraphicsComponentProvider = new TimestampSetGraphicsComponentProvider(this, table); + + intervalSetGraphicsRenderer = new DefaultTableRenderer(intervalSetGraphicsComponentProvider); + timestampSetGraphicsRenderer = new DefaultTableRenderer(timestampSetGraphicsComponentProvider); + + timeSetRenderer = new DefaultTableRenderer(new TimeSetStringConverter(this)); + timeMapRenderer = new DefaultTableRenderer(new TimeMapStringConverter(this)); + + intervalMapSparklinesGraphicsRenderer = + new DefaultTableRenderer(new IntervalMapSparklinesGraphicsComponentProvider(this, table)); + timestampMapSparklinesGraphicsRenderer = + new DefaultTableRenderer(new TimestampMapSparklinesGraphicsComponentProvider(this, table)); + arraySparklinesGraphicsRenderer = + new DefaultTableRenderer(new ArraySparklinesGraphicsComponentProvider(this, table)); + + prepareCellEditors(); + prepareRenderers(); + } + + public abstract List> getFakeDataColumns(GraphModel graphModel, + DataTablesModel dataTablesModel); + + private void prepareCellEditors() { + for (Class typeClass : AttributeUtils.getSupportedTypes()) { + //For booleans we want the default cell editor that uses a checkbox + //For any other type, use our own cell editor that supports all attribute types parsing. + if (!typeClass.equals(Boolean.class) && !typeClass.equals(boolean.class)) { + table.setDefaultEditor(typeClass, new AttributeTypesSupportCellEditor(this, typeClass)); + } + } + } + + private void prepareRenderers() { + for (Class typeClass : AttributeUtils.getSupportedTypes()) { + TableCellRenderer typeRenderer = null; + + boolean isNumberType = AttributeUtils.isNumberType(typeClass); + + boolean isDynamic = AttributeUtils.isDynamicType(typeClass); + boolean isArray = typeClass.isArray(); + + if (typeClass.equals(IntervalSet.class)) { + typeRenderer = drawTimeIntervalGraphics ? intervalSetGraphicsRenderer : timeSetRenderer; + } else if (typeClass.equals(TimestampSet.class)) { + typeRenderer = drawTimeIntervalGraphics ? timestampSetGraphicsRenderer : timeSetRenderer; + } else if (drawSparklines && isNumberType && (isArray || isDynamic)) { + if (isArray) { + typeRenderer = arraySparklinesGraphicsRenderer; + } else if (IntervalMap.class.isAssignableFrom(typeClass)) { + typeRenderer = intervalMapSparklinesGraphicsRenderer; + } else if (TimestampMap.class.isAssignableFrom(typeClass)) { + typeRenderer = timestampMapSparklinesGraphicsRenderer; + } + } + + if (typeRenderer == null) { + if (isArray) { + typeRenderer = arrayRenderer; + } else if (isDynamic) { + typeRenderer = timeMapRenderer; + } else if (isNumberType) { + boolean isDecimalType = typeClass.equals(Double.class) + || typeClass.equals(double.class) + || typeClass.equals(Float.class) + || typeClass.equals(float.class); + + if (isDecimalType) { + typeRenderer = doubleRenderer; + } + } + } + + if (typeRenderer == null) { + typeRenderer = defaultStringRepresentationRenderer; + } + + //For booleans we want the default cell renderer that uses a checkbox + //For any other type, use our own cell renderer that shows the values with standard, not locale specific toString methods + if (!typeClass.equals(Boolean.class) && !typeClass.equals(boolean.class)) { + table.setDefaultRenderer(typeClass, typeRenderer); + } + } + } + + public JXTable getTable() { + return table; + } + + public boolean setFilterPattern(String regularExpr, final int column) { + try { + if (Objects.equals(filterPattern, regularExpr)) { + return true; + } + filterPattern = regularExpr; + + if (regularExpr == null || regularExpr.trim().isEmpty()) { + table.setRowFilter(null); + } else { + if (!regularExpr.startsWith("(?i)")) { //CASE_INSENSITIVE + regularExpr = "(?i)" + regularExpr; + } + List> filters = new ArrayList<>(2); + // Not null values + filters.add(new RowFilter<>() { + @Override + public boolean include(Entry entry) { + return entry.getValue(column) != null; + } + }); + filters.add(RowFilter.regexFilter(regularExpr, column)); + RowFilter rowFilter = RowFilter.andFilter(filters); + + table.setRowFilter(rowFilter); + } + } catch (PatternSyntaxException e) { + return false; + } + + return true; + } + + public String getPattern() { + return filterPattern; + } + + public void refreshModel(T[] elements, Column[] cols, GraphModel graphModel, DataTablesModel dataTablesModel) { + this.graphModel = graphModel; + + showingColumns = cols; + Interval timeBounds = graphModel.getTimeBounds(); + double min = timeBounds != null ? timeBounds.getLow() : 0; + double max = timeBounds != null ? timeBounds.getHigh() : 0; + + refreshCellRenderersConfiguration(graphModel, min, max); + + refreshingTable = true; + if (selectedElements == null) { + selectedElements = getElementsFromSelectedRows(); + } + ArrayList> columns = new ArrayList<>(); + columns.addAll(getFakeDataColumns(graphModel, dataTablesModel)); + + for (Column c : cols) { + columns.add(new AttributeDataColumn(attributeColumnsController, c)); + } + + if (model == null) { + model = new ElementsDataTableModel<>(elements, columns.toArray(new ElementDataColumn[0])); + table.setModel(model); + } else { + model.configure(elements, columns.toArray(new ElementDataColumn[0])); + } + + TableHeaderWithTooltip headerWithTooltips = new TableHeaderWithTooltip(table.getColumnModel(), columns); + table.setTableHeader(headerWithTooltips); + + setElementsSelection(selectedElements);//Keep row selection before refreshing. + selectedElements = null; + refreshingTable = false; + } + + private void refreshCellRenderersConfiguration(GraphModel graphModel, double min, double max) { + intervalSetGraphicsComponentProvider.setMinMax(min, max); + timestampSetGraphicsComponentProvider.setMinMax(min, max); + } + + @Override + public GraphModel getGraphModel() { + return graphModel; + } + + public boolean isRefreshingTable() { + return refreshingTable; + } + + /** + * @param columnIndex View index, not model index + * @return Column or null if it's a fake column + */ + public Column getColumnAtIndex(int columnIndex) { + int realColumnIndex = table.convertColumnIndexToModel(columnIndex); + return model.getColumnAtIndex(realColumnIndex); + } + + public void setElementsSelection(List elements) { + this.selectedElements = + elements;//Keep this selection request to be able to do it if the table is first refreshed later. + HashSet elementsSet = new HashSet<>(); + elementsSet.addAll(elements); + table.clearSelection(); + for (int i = 0; i < table.getRowCount(); i++) { + if (elementsSet.contains(getElementFromRow(i))) { + table.addRowSelectionInterval(i, i); + } + } + } + + public void setElementsSelection(T[] elements) { + setElementsSelection(Arrays.asList(elements)); + } + + public void scrollToFirstElementSelected() { + int row = table.getSelectedRow(); + if (row != -1) { + Rectangle rect = table.getCellRect(row, 0, true); + table.scrollRectToVisible(rect); + } + } + + public void scrollToTop() { + table.scrollRowToVisible(0); + } + + public boolean hasData() { + return table.getRowCount() > 0; + } + + public void setDrawSparklines(boolean drawSparklines) { + this.drawSparklines = drawSparklines; + prepareRenderers(); + } + + public boolean isDrawTimeIntervalGraphics() { + return drawTimeIntervalGraphics; + } + + public void setDrawTimeIntervalGraphics(boolean drawTimeIntervalGraphics) { + this.drawTimeIntervalGraphics = drawTimeIntervalGraphics; + prepareRenderers(); + } + + public T getElementFromRow(int row) { + return ((ElementsDataTableModel) table.getModel()).getElementAtRow(table.convertRowIndexToModel(row)); + } + + public List getElementsFromSelectedRows() { + int[] selectedRows = table.getSelectedRows(); + List elements = new ArrayList<>(); + + for (int i = 0; i < selectedRows.length; i++) { + elements.add(getElementFromRow(selectedRows[i])); + } + + return elements; + } + + private class TableHeaderWithTooltip extends JTableHeader { + + private final List> columns; + + public TableHeaderWithTooltip(TableColumnModel columnModel, List> columns) { + super(columnModel); + this.columns = columns; + } + + @Override + public String getToolTipText(MouseEvent e) { + Point p = e.getPoint(); + int index = columnModel.getColumnIndexAtX(p.x); + int realIndex = columnModel.getColumn(index).getModelIndex(); + + if (realIndex < columns.size() && columns.get(realIndex).getColumn() != null) { + String id = columns.get(realIndex).getColumn().getId(); + + return NbBundle + .getMessage(AbstractElementsDataTable.class, "AbstractElementsDataTable.column.tooltip", id); + } else { + return null; + } + } + } +} diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/EdgesDataTable.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/EdgesDataTable.java new file mode 100644 index 0000000000..ca66f773c0 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/EdgesDataTable.java @@ -0,0 +1,221 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian , Mathieu Jacomy, Julian Bilcke, Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.datalab.tables; + +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.util.ArrayList; +import java.util.List; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import org.gephi.datalab.api.DataLaboratoryHelper; +import org.gephi.datalab.spi.edges.EdgesManipulator; +import org.gephi.desktop.datalab.DataTablesModel; +import org.gephi.desktop.datalab.tables.columns.ElementDataColumn; +import org.gephi.desktop.datalab.tables.columns.PropertyDataColumn; +import org.gephi.desktop.datalab.tables.popup.EdgesPopupAdapter; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.GraphModel; +import org.gephi.desktop.attributes.api.AttributesUIController; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +/** + * @author Eduardo Ramos + */ +public final class EdgesDataTable extends AbstractElementsDataTable { + + private final PropertyDataColumn TYPE_COLUMN = + new PropertyDataColumn(NbBundle.getMessage(EdgesDataTable.class, "EdgeDataTable.type.column.text")) { + + @Override + public Class getColumnClass() { + return String.class; + } + + @Override + public Object getValueFor(Edge edge) { + if (edge.isDirected()) { + return NbBundle.getMessage(EdgesDataTable.class, "EdgeDataTable.type.column.directed"); + } else { + return NbBundle.getMessage(EdgesDataTable.class, "EdgeDataTable.type.column.undirected"); + } + } + }; + private final PropertyDataColumn KIND_COLUMN = + new PropertyDataColumn(NbBundle.getMessage(EdgesDataTable.class, "EdgeDataTable.kind.column.text")) { + + @Override + public Class getColumnClass() { + return String.class; + } + + @Override + public Object getValueFor(Edge edge) { + return edge.getTypeLabel() != null ? edge.getTypeLabel().toString() : null; + } + + @Override + public void setValueFor(Edge element, Object value) { + final String strValue = value != null ? value.toString() : null; + + if (strValue != null && !strValue.trim().isEmpty()) { + + int edgeType = element.getTable().getGraph().getModel().addEdgeType(strValue); + element.setType(edgeType); + } else { + // Type 0 is a special type for "no type defined" + element.setType(0); + } + + } + + @Override + public boolean isEditable() { + return true; + } + + + }; + private boolean showEdgesNodesLabels = false; + private final PropertyDataColumn SOURCE_COLUMN = + new PropertyDataColumn(NbBundle.getMessage(EdgesDataTable.class, "EdgeDataTable.source.column.text")) { + + @Override + public Class getColumnClass() { + return String.class; + } + + @Override + public Object getValueFor(Edge edge) { + if (showEdgesNodesLabels) { + return edge.getSource().getId() + " - " + edge.getSource().getLabel(); + } else { + return edge.getSource().getId(); + } + } + }; + private final PropertyDataColumn TARGET_COLUMN = + new PropertyDataColumn(NbBundle.getMessage(EdgesDataTable.class, "EdgeDataTable.target.column.text")) { + + @Override + public Class getColumnClass() { + return String.class; + } + + @Override + public Object getValueFor(Edge edge) { + if (showEdgesNodesLabels) { + return edge.getTarget().getId() + " - " + edge.getTarget().getLabel(); + } else { + return edge.getTarget().getId(); + } + } + }; + + public EdgesDataTable() { + super(); + + //Add listener of table selection to refresh edit window when the selection changes (and if the table is not being refreshed): + table.getSelectionModel().addListSelectionListener(new ListSelectionListener() { + + @Override + public void valueChanged(ListSelectionEvent e) { + if (!isRefreshingTable()) { + AttributesUIController edc = Lookup.getDefault().lookup(AttributesUIController.class); + if (edc != null && edc.isOpen()) { + if (table.getSelectedRow() != -1) { + edc.editEdges(getElementsFromSelectedRows().toArray(new Edge[0])); + } else { + edc.disableEdit(); + } + } + } + } + }); + + table.addMouseListener(new EdgesPopupAdapter(this)); + table.addKeyListener(new KeyAdapter() { + + @Override + public void keyReleased(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_DELETE) { + DataLaboratoryHelper dlh = DataLaboratoryHelper.getDefault(); + List selectedEdges = getElementsFromSelectedRows(); + if (!selectedEdges.isEmpty()) { + EdgesManipulator del = dlh.getEdgesManipulatorByName("DeleteEdges"); + if (del != null) { + del.setup(selectedEdges.toArray(new Edge[0]), null); + if (del.canExecute()) { + dlh.executeManipulator(del); + } + } + } + } + } + }); + } + + @Override + public List> getFakeDataColumns(GraphModel graphModel, + DataTablesModel dataTablesModel) { + ArrayList> propertiesColumns = new ArrayList<>(); + + propertiesColumns.add(SOURCE_COLUMN); + propertiesColumns.add(TARGET_COLUMN); + propertiesColumns.add(TYPE_COLUMN); + if (graphModel.isMultiGraph()) { + propertiesColumns.add(KIND_COLUMN); + } + + return propertiesColumns; + } + + public boolean isShowEdgesNodesLabels() { + return showEdgesNodesLabels; + } + + public void setShowEdgesNodesLabels(boolean showEdgesNodesLabels) { + this.showEdgesNodesLabels = showEdgesNodesLabels; + } +} diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/ElementsDataTableModel.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/ElementsDataTableModel.java new file mode 100644 index 0000000000..7d8bbcd983 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/ElementsDataTableModel.java @@ -0,0 +1,149 @@ +/* + Copyright 2008-2015 Gephi + Authors : Mathieu Bastian , Mathieu Jacomy, Julian Bilcke, Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2015 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2015 Gephi Consortium. + */ + +package org.gephi.desktop.datalab.tables; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; +import javax.swing.table.AbstractTableModel; +import org.gephi.desktop.datalab.tables.columns.ElementDataColumn; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; + +/** + * @author Eduardo Ramos + */ +public class ElementsDataTableModel extends AbstractTableModel { + private T[] elements; + private ElementDataColumn[] columns; + + public ElementsDataTableModel(T[] elements, ElementDataColumn[] cols) { + this.elements = elements; + this.columns = cols; + } + + @Override + public int getRowCount() { + return elements.length; + } + + @Override + public int getColumnCount() { + return columns.length; + } + + @Override + public String getColumnName(int columnIndex) { + return columns[columnIndex].getColumnName(); + } + + @Override + public Class getColumnClass(int columnIndex) { + return columns[columnIndex].getColumnClass(); + } + + @Override + public boolean isCellEditable(int rowIndex, int columnIndex) { + return columns[columnIndex].isEditable(); + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + try { + return columns[columnIndex].getValueFor(elements[rowIndex]); + } catch (Exception e) { + /** + * We need to do this because the JTable might repaint itself + * while datalab still has not detected that the column has been deleted + * (it does so by polling on graph and table observers). + * I can't find a better solution... + */ + return null; + } + } + + @Override + public void setValueAt(Object aValue, int rowIndex, int columnIndex) { + columns[columnIndex].setValueFor(elements[rowIndex], aValue); + } + + public T getElementAtRow(int row) { + return elements[row]; + } + + public ElementDataColumn[] getColumns() { + return columns; + } + + public T[] getElements() { + return elements; + } + + public void configure(T[] elements, ElementDataColumn[] columns) { + Set oldColumns = new HashSet(Arrays.asList(this.columns)); + Set newColumns = new HashSet(Arrays.asList(columns)); + + boolean columnsChanged = !oldColumns.equals(newColumns); + this.columns = columns; + this.elements = elements; + + if (columnsChanged) { + fireTableStructureChanged();//Only firing this event if columns change is useful because JXTable will not reset columns width if there is no change + } else { + fireTableDataChanged(); + } + } + + /** + * Column at index or null if it's a fake column. + * + * @return + */ + public Column getColumnAtIndex(int i) { + if (i >= 0 && i < columns.length) { + return columns[i].getColumn(); + } else { + return null; + } + } +} diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/NodesDataTable.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/NodesDataTable.java new file mode 100644 index 0000000000..ea250778f9 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/NodesDataTable.java @@ -0,0 +1,118 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian , Mathieu Jacomy, Julian Bilcke, Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.datalab.tables; + +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.util.ArrayList; +import java.util.List; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import org.gephi.datalab.api.DataLaboratoryHelper; +import org.gephi.datalab.spi.nodes.NodesManipulator; +import org.gephi.desktop.datalab.DataTablesModel; +import org.gephi.desktop.datalab.tables.columns.ElementDataColumn; +import org.gephi.desktop.datalab.tables.columns.PropertyDataColumn; +import org.gephi.desktop.datalab.tables.popup.NodesPopupAdapter; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; +import org.gephi.desktop.attributes.api.AttributesUIController; +import org.openide.util.Lookup; + +/** + * @author Eduardo Ramos + */ +public final class NodesDataTable extends AbstractElementsDataTable { + + private final List> propertiesColumns = new ArrayList<>(); + + + public NodesDataTable() { + super(); + + //Add listener of table selection to refresh edit window when the selection changes (and if the table is not being refreshed): + table.getSelectionModel().addListSelectionListener(new ListSelectionListener() { + + @Override + public void valueChanged(ListSelectionEvent e) { + if (!isRefreshingTable()) { + AttributesUIController edc = Lookup.getDefault().lookup(AttributesUIController.class); + if (edc != null && edc.isOpen()) { + if (table.getSelectedRow() != -1) { + edc.editNodes(getElementsFromSelectedRows().toArray(new Node[0])); + } else { + edc.disableEdit(); + } + } + } + } + }); + + table.addMouseListener(new NodesPopupAdapter(this)); + table.addKeyListener(new KeyAdapter() { + + @Override + public void keyReleased(KeyEvent e) { + if (e.getKeyCode() == KeyEvent.VK_DELETE) { + DataLaboratoryHelper dlh = DataLaboratoryHelper.getDefault(); + List selectedNodes = getElementsFromSelectedRows(); + if (!selectedNodes.isEmpty()) { + NodesManipulator del = dlh.getNodesManipulatorByName("DeleteNodes"); + if (del != null) { + del.setup(selectedNodes.toArray(new Node[0]), null); + if (del.canExecute()) { + dlh.executeManipulator(del); + } + } + } + } + } + }); + } + + @Override + public List> getFakeDataColumns(GraphModel graphModel, + DataTablesModel dataTablesModel) { + return propertiesColumns; + } +} diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/celleditors/AttributeTypesSupportCellEditor.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/celleditors/AttributeTypesSupportCellEditor.java new file mode 100644 index 0000000000..6e589be586 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/celleditors/AttributeTypesSupportCellEditor.java @@ -0,0 +1,148 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian , Mathieu Jacomy, Julian Bilcke, Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.datalab.tables.celleditors; + +import java.awt.Color; +import java.awt.Component; +import java.time.ZoneId; +import javax.swing.DefaultCellEditor; +import javax.swing.JTable; +import javax.swing.JTextField; +import javax.swing.border.Border; +import javax.swing.border.LineBorder; +import org.gephi.desktop.datalab.utils.GraphModelProvider; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.TimeFormat; +import org.gephi.graph.api.types.IntervalMap; +import org.gephi.graph.api.types.IntervalSet; +import org.gephi.graph.api.types.TimestampMap; +import org.gephi.graph.api.types.TimestampSet; + +/** + * @author Eduardo Ramos + */ +public class AttributeTypesSupportCellEditor extends DefaultCellEditor { + + private static final Border RED_BORDER = new LineBorder(Color.red); + + private final GraphModelProvider graphModelProvider; + + private final JTextField textField; + private final Border originalBorder; + private final Class typeClass; + private final boolean isTimestampSetType; + private final boolean isTimestampMapType; + private final boolean isIntervalSetType; + private final boolean isIntervalMapType; + private final boolean isArrayType; + private final boolean isDecimalType; + + public AttributeTypesSupportCellEditor(GraphModelProvider graphModelProvider, Class typeClass) { + super(new JTextField()); + this.graphModelProvider = graphModelProvider; + this.typeClass = typeClass; + + textField = new JTextField(); + originalBorder = textField.getBorder(); + + isTimestampSetType = TimestampSet.class.isAssignableFrom(typeClass); + isTimestampMapType = TimestampMap.class.isAssignableFrom(typeClass); + isIntervalSetType = IntervalSet.class.isAssignableFrom(typeClass); + isIntervalMapType = IntervalMap.class.isAssignableFrom(typeClass); + isArrayType = typeClass.isArray(); + isDecimalType = typeClass.equals(Double.class) + || typeClass.equals(double.class) + || typeClass.equals(Float.class) + || typeClass.equals(float.class); + } + + @Override + public boolean stopCellEditing() { + String value = getCellEditorValue().toString(); + if (!value.trim().isEmpty()) { + try { + AttributeUtils.parse(value, typeClass); + } catch (Exception e) { + textField.setBorder(RED_BORDER); + return false;//Invalid value for type + } + } + + return super.stopCellEditing(); + } + + @Override + public Object getCellEditorValue() { + return textField.getText(); + } + + @Override + public Component getTableCellEditorComponent(JTable table, + Object value, boolean isSelected, int row, int column) { + + TimeFormat timeFormat = graphModelProvider.getGraphModel().getTimeFormat(); + ZoneId timeZone = graphModelProvider.getGraphModel().getTimeZone(); + + String valueStr; + if (value == null) { + valueStr = ""; + } else if (isTimestampSetType) { + valueStr = ((TimestampSet) value).toString(timeFormat, timeZone); + } else if (isTimestampMapType) { + valueStr = ((TimestampMap) value).toString(timeFormat, timeZone); + } else if (isIntervalSetType) { + valueStr = ((IntervalSet) value).toString(timeFormat, timeZone); + } else if (isIntervalMapType) { + valueStr = ((IntervalMap) value).toString(timeFormat, timeZone); + } else if (isArrayType) { + valueStr = AttributeUtils.printArray(value); + } else { + valueStr = AttributeUtils.print(value, timeFormat, timeZone); + } + + textField.setBorder(originalBorder); + textField.setEditable(true); + textField.setText(valueStr); + return textField; + } +} diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/columns/AttributeDataColumn.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/columns/AttributeDataColumn.java new file mode 100644 index 0000000000..3e57a2b5de --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/columns/AttributeDataColumn.java @@ -0,0 +1,113 @@ +/* + Copyright 2008-2015 Gephi + Authors : Mathieu Bastian , Mathieu Jacomy, Julian Bilcke, Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2015 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2015 Gephi Consortium. + */ + +package org.gephi.desktop.datalab.tables.columns; + +import org.gephi.datalab.api.AttributeColumnsController; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; + +/** + * @author Eduardo Ramos + */ +public class AttributeDataColumn implements ElementDataColumn { + + private final AttributeColumnsController attributeColumnsController; + private final Column column; + private final Class columnClassForTable; + + public AttributeDataColumn(AttributeColumnsController attributeColumnsController, Column column) { + this.attributeColumnsController = attributeColumnsController; + this.column = column; + + this.columnClassForTable = column.getTypeClass(); + } + + @Override + public Class getColumnClass() { + return columnClassForTable; + } + + @Override + public String getColumnName() { + return column.getTitle(); + } + + @Override + public Object getValueFor(T element) { + return element.getAttribute(column); + } + + @Override + public int hashCode() { + int hash = 5; + hash = 89 * hash + (this.column != null ? this.column.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final AttributeDataColumn other = (AttributeDataColumn) obj; + return this.column == other.column || (this.column != null && this.column.equals(other.column)); + } + + @Override + public void setValueFor(T element, Object value) { + attributeColumnsController.setAttributeValue(value, element, column); + } + + @Override + public boolean isEditable() { + return attributeColumnsController.canChangeColumnData(column); + } + + @Override + public Column getColumn() { + return column; + } +} diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/columns/ElementDataColumn.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/columns/ElementDataColumn.java new file mode 100644 index 0000000000..4baa8a95d6 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/columns/ElementDataColumn.java @@ -0,0 +1,64 @@ +/* + Copyright 2008-2015 Gephi + Authors : Mathieu Bastian , Mathieu Jacomy, Julian Bilcke, Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2015 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2015 Gephi Consortium. + */ + +package org.gephi.desktop.datalab.tables.columns; + +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; + +/** + * @author Eduardo Ramos + */ +public interface ElementDataColumn { + + Class getColumnClass(); + + String getColumnName(); + + Object getValueFor(T element); + + void setValueFor(T element, Object value); + + boolean isEditable(); + + Column getColumn(); +} diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/columns/PropertyDataColumn.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/columns/PropertyDataColumn.java new file mode 100644 index 0000000000..528ea48d15 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/columns/PropertyDataColumn.java @@ -0,0 +1,83 @@ +/* + Copyright 2008-2015 Gephi + Authors : Mathieu Bastian , Mathieu Jacomy, Julian Bilcke, Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2015 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2015 Gephi Consortium. + */ + +package org.gephi.desktop.datalab.tables.columns; + +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; + +/** + * @author Eduardo Ramos + */ +public abstract class PropertyDataColumn implements ElementDataColumn { + + private final String name; + + public PropertyDataColumn(String name) { + this.name = name; + } + + @Override + public abstract Class getColumnClass(); + + @Override + public String getColumnName() { + return name; + } + + @Override + public abstract Object getValueFor(T element); + + @Override + public void setValueFor(T element, Object value) { + } + + @Override + public boolean isEditable() { + return false; + } + + @Override + public Column getColumn() { + return null; + } +} diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/popup/AbstractPopupAdapter.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/popup/AbstractPopupAdapter.java new file mode 100644 index 0000000000..2e4fc5b616 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/popup/AbstractPopupAdapter.java @@ -0,0 +1,125 @@ +/* + Copyright 2008-2015 Gephi + Authors : Mathieu Bastian , Mathieu Jacomy, Julian Bilcke, Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2015 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2015 Gephi Consortium. + */ + +package org.gephi.desktop.datalab.tables.popup; + +import java.awt.Point; +import java.awt.event.MouseEvent; +import javax.swing.JPopupMenu; +import javax.swing.SwingUtilities; +import javax.swing.event.PopupMenuEvent; +import javax.swing.event.PopupMenuListener; +import org.gephi.desktop.datalab.tables.AbstractElementsDataTable; +import org.gephi.graph.api.Element; +import org.jdesktop.swingx.JXTable; +import org.openide.awt.MouseUtils; + +/** + * @author Eduardo Ramos + */ +public abstract class AbstractPopupAdapter extends MouseUtils.PopupMouseAdapter { + + protected final AbstractElementsDataTable elementsDataTable; + protected final JXTable table; + + public AbstractPopupAdapter(AbstractElementsDataTable elementsDataTable) { + super(); + this.elementsDataTable = elementsDataTable; + this.table = elementsDataTable.getTable(); + } + + @Override + protected void showPopup(final MouseEvent e) { + int selRow = table.rowAtPoint(e.getPoint()); + + if (selRow != -1) { + if (!table.getSelectionModel().isSelectedIndex(selRow)) { + table.getSelectionModel().clearSelection(); + table.getSelectionModel().setSelectionInterval(selRow, selRow); + } + final Point p = e.getPoint(); + new Thread(new Runnable() { + + @Override + public void run() { + final JPopupMenu pop = createPopup(p); + SwingUtilities.invokeLater(new Runnable() { + + @Override + public void run() { + showPopup(p.x, p.y, pop); + } + }); + } + }).start(); + } else { + table.getSelectionModel().clearSelection(); + } + e.consume(); + + } + + private void showPopup(int xpos, int ypos, final JPopupMenu popup) { + if ((popup != null) && (popup.getSubElements().length > 0)) { + final PopupMenuListener p = new PopupMenuListener() { + + @Override + public void popupMenuWillBecomeVisible(PopupMenuEvent e) { + } + + @Override + public void popupMenuWillBecomeInvisible(PopupMenuEvent e) { + popup.removePopupMenuListener(this); + table.requestFocus(); + } + + @Override + public void popupMenuCanceled(PopupMenuEvent e) { + } + }; + popup.addPopupMenuListener(p); + popup.show(table, xpos, ypos); + } + } + + protected abstract JPopupMenu createPopup(Point p); +} diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/popup/EdgesPopupAdapter.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/popup/EdgesPopupAdapter.java new file mode 100644 index 0000000000..b035f10caf --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/popup/EdgesPopupAdapter.java @@ -0,0 +1,59 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package org.gephi.desktop.datalab.tables.popup; + +import java.awt.Point; +import java.util.List; +import javax.swing.JPopupMenu; +import org.gephi.datalab.api.DataLaboratoryHelper; +import org.gephi.datalab.spi.edges.EdgesManipulator; +import org.gephi.desktop.datalab.tables.AbstractElementsDataTable; +import org.gephi.desktop.datalab.utils.PopupMenuUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Edge; + +/** + * @author Eduardo Ramos + */ +public class EdgesPopupAdapter extends AbstractPopupAdapter { + + public EdgesPopupAdapter(AbstractElementsDataTable elementsDataTable) { + super(elementsDataTable); + } + + @Override + protected JPopupMenu createPopup(Point p) { + final List selectedElements = elementsDataTable.getElementsFromSelectedRows(); + final Edge clickedElement = elementsDataTable.getElementFromRow(table.rowAtPoint(p)); + JPopupMenu contextMenu = new JPopupMenu(); + + //First add edges manipulators items: + DataLaboratoryHelper dlh = DataLaboratoryHelper.getDefault(); + Integer lastManipulatorType = null; + for (EdgesManipulator em : dlh.getEdgesManipulators()) { + em.setup(selectedElements.toArray(new Edge[0]), clickedElement); + if (lastManipulatorType == null) { + lastManipulatorType = em.getType(); + } + if (lastManipulatorType != em.getType()) { + contextMenu.addSeparator(); + } + lastManipulatorType = em.getType(); + if (em.isAvailable()) { + contextMenu.add(PopupMenuUtils + .createMenuItemFromEdgesManipulator(em, clickedElement, selectedElements.toArray(new Edge[0]))); + } + } + + //Add AttributeValues manipulators submenu: + Column column = elementsDataTable.getColumnAtIndex(table.columnAtPoint(p)); + if (column != null) { + contextMenu.add(PopupMenuUtils.createSubMenuFromRowColumn(clickedElement, column)); + } + return contextMenu; + } +} diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/popup/NodesPopupAdapter.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/popup/NodesPopupAdapter.java new file mode 100644 index 0000000000..eeafb001cb --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/tables/popup/NodesPopupAdapter.java @@ -0,0 +1,59 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package org.gephi.desktop.datalab.tables.popup; + +import java.awt.Point; +import java.util.List; +import javax.swing.JPopupMenu; +import org.gephi.datalab.api.DataLaboratoryHelper; +import org.gephi.datalab.spi.nodes.NodesManipulator; +import org.gephi.desktop.datalab.tables.AbstractElementsDataTable; +import org.gephi.desktop.datalab.utils.PopupMenuUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Node; + +/** + * @author Eduardo Ramos + */ +public class NodesPopupAdapter extends AbstractPopupAdapter { + + public NodesPopupAdapter(AbstractElementsDataTable elementsDataTable) { + super(elementsDataTable); + } + + @Override + protected JPopupMenu createPopup(Point p) { + final List selectedElements = elementsDataTable.getElementsFromSelectedRows(); + final Node clickedElement = elementsDataTable.getElementFromRow(table.rowAtPoint(p)); + JPopupMenu contextMenu = new JPopupMenu(); + + //First add edges manipulators items: + DataLaboratoryHelper dlh = DataLaboratoryHelper.getDefault(); + Integer lastManipulatorType = null; + for (NodesManipulator em : dlh.getNodesManipulators()) { + em.setup(selectedElements.toArray(new Node[0]), clickedElement); + if (lastManipulatorType == null) { + lastManipulatorType = em.getType(); + } + if (lastManipulatorType != em.getType()) { + contextMenu.addSeparator(); + } + lastManipulatorType = em.getType(); + if (em.isAvailable()) { + contextMenu.add(PopupMenuUtils + .createMenuItemFromNodesManipulator(em, clickedElement, selectedElements.toArray(new Node[0]))); + } + } + + //Add AttributeValues manipulators submenu: + Column column = elementsDataTable.getColumnAtIndex(table.columnAtPoint(p)); + if (column != null) { + contextMenu.add(PopupMenuUtils.createSubMenuFromRowColumn(clickedElement, column)); + } + return contextMenu; + } +} diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/GraphFileExporterBuilderDecorator.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/GraphFileExporterBuilderDecorator.java new file mode 100644 index 0000000000..b4bec8aaed --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/GraphFileExporterBuilderDecorator.java @@ -0,0 +1,86 @@ +/* +Copyright 2008-2017 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2017 Gephi Consortium. + */ + +package org.gephi.desktop.datalab.utils; + +import org.gephi.io.exporter.api.FileType; +import org.gephi.io.exporter.plugin.ExporterSpreadsheet; +import org.gephi.io.exporter.spi.GraphExporter; +import org.gephi.io.exporter.spi.GraphFileExporterBuilder; + +/** + * A simple decorator to make sure the current table is initially auto-selected when exporting from Data Laboratory window. + * + * @author Eduardo Ramos + */ +public class GraphFileExporterBuilderDecorator implements GraphFileExporterBuilder { + + private final GraphFileExporterBuilder instance; + private final ExporterSpreadsheet.ExportTable initialSelectedTable; + + public GraphFileExporterBuilderDecorator(GraphFileExporterBuilder instance, + ExporterSpreadsheet.ExportTable initialSelectedTable) { + this.instance = instance; + this.initialSelectedTable = initialSelectedTable; + } + + @Override + public GraphExporter buildExporter() { + GraphExporter exporter = instance.buildExporter(); + + if (exporter instanceof ExporterSpreadsheet) { + ((ExporterSpreadsheet) exporter).setTableToExport(initialSelectedTable); + } + + return exporter; + } + + @Override + public FileType[] getFileTypes() { + return instance.getFileTypes(); + } + + @Override + public String getName() { + return instance.getName(); + } +} diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/GraphModelProvider.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/GraphModelProvider.java new file mode 100644 index 0000000000..b71e06ab1f --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/GraphModelProvider.java @@ -0,0 +1,58 @@ +/* + Copyright 2008-2010 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.datalab.utils; + +import org.gephi.graph.api.GraphModel; + +/** + * @author Eduardo Ramos + */ +public interface GraphModelProvider { + + /** + * Returns the current graph model. Cannot be null + * + * @return + */ + GraphModel getGraphModel(); +} diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/PopupMenuUtils.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/PopupMenuUtils.java index f3219d13dd..5492dc4bf9 100644 --- a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/PopupMenuUtils.java +++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/PopupMenuUtils.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.datalab.utils; import java.awt.event.ActionEvent; @@ -47,26 +48,28 @@ Development and Distribution License("CDDL") (collectively, the import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.KeyStroke; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeRow; import org.gephi.datalab.api.DataLaboratoryHelper; import org.gephi.datalab.spi.ContextMenuItemManipulator; import org.gephi.datalab.spi.Manipulator; import org.gephi.datalab.spi.edges.EdgesManipulator; import org.gephi.datalab.spi.nodes.NodesManipulator; import org.gephi.datalab.spi.values.AttributeValueManipulator; +import org.gephi.graph.api.Column; import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Element; import org.gephi.graph.api.Node; import org.openide.util.ImageUtilities; import org.openide.util.NbBundle; /** * Utils for building popup menus at right click on nodes/edges rows. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class PopupMenuUtils { - public static JMenuItem createMenuItemFromNodesManipulator(final NodesManipulator item, final Node clickedNode,final Node[] nodes) { + public static JMenuItem createMenuItemFromNodesManipulator(final NodesManipulator item, final Node clickedNode, + final Node[] nodes) { ContextMenuItemManipulator[] subItems = item.getSubItems(); if (subItems != null && item.canExecute()) { JMenu subMenu = new JMenu(); @@ -77,7 +80,7 @@ public static JMenuItem createMenuItemFromNodesManipulator(final NodesManipulato subMenu.setIcon(item.getIcon()); Integer lastItemType = null; for (ContextMenuItemManipulator subItem : subItems) { - ((NodesManipulator)subItem).setup(nodes,clickedNode); + ((NodesManipulator) subItem).setup(nodes, clickedNode); if (lastItemType == null) { lastItemType = subItem.getType(); } @@ -86,10 +89,10 @@ public static JMenuItem createMenuItemFromNodesManipulator(final NodesManipulato } lastItemType = subItem.getType(); if (subItem.isAvailable()) { - subMenu.add(createMenuItemFromNodesManipulator((NodesManipulator) subItem,clickedNode,nodes)); + subMenu.add(createMenuItemFromNodesManipulator((NodesManipulator) subItem, clickedNode, nodes)); } } - if(item.getMnemonicKey()!=null){ + if (item.getMnemonicKey() != null) { subMenu.setMnemonic(item.getMnemonicKey());//Mnemonic for opening a sub menu } return subMenu; @@ -103,6 +106,7 @@ public static JMenuItem createMenuItemFromNodesManipulator(final NodesManipulato if (item.canExecute()) { menuItem.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { new Thread() { @@ -116,15 +120,17 @@ public void run() { } else { menuItem.setEnabled(false); } - if(item.getMnemonicKey()!=null){ + if (item.getMnemonicKey() != null) { menuItem.setMnemonic(item.getMnemonicKey());//Mnemonic for executing the action - menuItem.setAccelerator(KeyStroke.getKeyStroke(item.getMnemonicKey(),KeyEvent.CTRL_DOWN_MASK));//And the same key mnemonic + ctrl for executing the action (and as a help display for the user!). + menuItem.setAccelerator(KeyStroke.getKeyStroke(item.getMnemonicKey(), + KeyEvent.CTRL_DOWN_MASK));//And the same key mnemonic + ctrl for executing the action (and as a help display for the user!). } return menuItem; } } - public static JMenuItem createMenuItemFromEdgesManipulator(final EdgesManipulator item, final Edge clickedEdge,final Edge[] edges) { + public static JMenuItem createMenuItemFromEdgesManipulator(final EdgesManipulator item, final Edge clickedEdge, + final Edge[] edges) { ContextMenuItemManipulator[] subItems = item.getSubItems(); if (subItems != null && item.canExecute()) { JMenu subMenu = new JMenu(); @@ -135,7 +141,7 @@ public static JMenuItem createMenuItemFromEdgesManipulator(final EdgesManipulato subMenu.setIcon(item.getIcon()); Integer lastItemType = null; for (ContextMenuItemManipulator subItem : subItems) { - ((EdgesManipulator)subItem).setup(edges,clickedEdge); + ((EdgesManipulator) subItem).setup(edges, clickedEdge); if (lastItemType == null) { lastItemType = subItem.getType(); } @@ -144,10 +150,10 @@ public static JMenuItem createMenuItemFromEdgesManipulator(final EdgesManipulato } lastItemType = subItem.getType(); if (subItem.isAvailable()) { - subMenu.add(createMenuItemFromEdgesManipulator((EdgesManipulator) subItem,clickedEdge,edges)); + subMenu.add(createMenuItemFromEdgesManipulator((EdgesManipulator) subItem, clickedEdge, edges)); } } - if(item.getMnemonicKey()!=null){ + if (item.getMnemonicKey() != null) { subMenu.setMnemonic(item.getMnemonicKey());//Mnemonic for opening a sub menu } return subMenu; @@ -161,6 +167,7 @@ public static JMenuItem createMenuItemFromEdgesManipulator(final EdgesManipulato if (item.canExecute()) { menuItem.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { new Thread() { @@ -174,9 +181,10 @@ public void run() { } else { menuItem.setEnabled(false); } - if(item.getMnemonicKey()!=null){ + if (item.getMnemonicKey() != null) { menuItem.setMnemonic(item.getMnemonicKey());//Mnemonic for executing the action - menuItem.setAccelerator(KeyStroke.getKeyStroke(item.getMnemonicKey(),KeyEvent.CTRL_DOWN_MASK));//And the same key mnemonic + ctrl for executing the action (and as a help display for the user!). + menuItem.setAccelerator(KeyStroke.getKeyStroke(item.getMnemonicKey(), + KeyEvent.CTRL_DOWN_MASK));//And the same key mnemonic + ctrl for executing the action (and as a help display for the user!). } return menuItem; } @@ -192,6 +200,7 @@ public static JMenuItem createMenuItemFromManipulator(final Manipulator nm) { if (nm.canExecute()) { menuItem.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { DataLaboratoryHelper dlh = DataLaboratoryHelper.getDefault(); dlh.executeManipulator(nm); @@ -203,10 +212,10 @@ public void actionPerformed(ActionEvent e) { return menuItem; } - public static JMenu createSubMenuFromRowColumn(AttributeRow row, AttributeColumn column) { + public static JMenu createSubMenuFromRowColumn(Element row, Column column) { DataLaboratoryHelper dlh = DataLaboratoryHelper.getDefault(); JMenu subMenu = new JMenu(NbBundle.getMessage(PopupMenuUtils.class, "Cell.Popup.subMenu.text")); - subMenu.setIcon(ImageUtilities.loadImageIcon("org/gephi/desktop/datalab/resources/table-select.png", true)); + subMenu.setIcon(ImageUtilities.loadImageIcon("DesktopDataLaboratory/table-select.svg", false)); Integer lastManipulatorType = null; for (AttributeValueManipulator am : dlh.getAttributeValueManipulators()) { @@ -220,7 +229,7 @@ public static JMenu createSubMenuFromRowColumn(AttributeRow row, AttributeColumn lastManipulatorType = am.getType(); subMenu.add(PopupMenuUtils.createMenuItemFromManipulator(am)); } - if(subMenu.getMenuComponentCount()==0){ + if (subMenu.getMenuComponentCount() == 0) { subMenu.setEnabled(false); } return subMenu; diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/SparkLinesRenderer.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/SparkLinesRenderer.java deleted file mode 100644 index 81d557a16b..0000000000 --- a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/SparkLinesRenderer.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Eduardo Ramos - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.desktop.datalab.utils; - -import java.awt.Color; -import java.awt.Component; -import java.awt.image.BufferedImage; -import java.util.ArrayList; -import java.util.List; -import javax.swing.ImageIcon; -import javax.swing.JLabel; -import javax.swing.JTable; -import javax.swing.table.DefaultTableCellRenderer; -import org.gephi.data.attributes.type.DynamicType; -import org.gephi.data.attributes.type.Interval; -import org.gephi.data.attributes.type.NumberList; -import org.gephi.dynamic.api.DynamicModel.TimeFormat; -import org.gephi.utils.sparklines.SparklineGraph; -import org.gephi.utils.sparklines.SparklineParameters; - -/** - * TableCellRenderer for drawing sparklines from cells that have a NumberList or DynamicNumber as their value. - * - * @author Eduardo Ramos - */ -public class SparkLinesRenderer extends DefaultTableCellRenderer { - - private static final Color SELECTED_BACKGROUND = new Color(225, 255, 255); - private static final Color UNSELECTED_BACKGROUND = Color.white; - private TimeFormat timeFormat = TimeFormat.DOUBLE; - - @Override - public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { - if (value == null) { - //Render empty string when null - return super.getTableCellRendererComponent(table, null, isSelected, hasFocus, row, column); - } - - String stringRepresentation = null; - Number[] xValues = null; - Number[] yValues = null; - if (value instanceof NumberList) { - yValues = getNumberListNumbers((NumberList) value); - stringRepresentation = value.toString(); - } else if (value instanceof DynamicType) { - //Use the intervals start time as X values - Number[][] values = getDynamicNumberNumbers((DynamicType) value); - xValues = values[0]; - yValues = values[1]; - stringRepresentation = ((DynamicType) value).toString(timeFormat == TimeFormat.DOUBLE); - } else { - throw new IllegalArgumentException("Only number lists and dynamic numbers are supported for sparklines rendering"); - } - - //If there is less than 1 element, show as a String. - if (yValues.length < 1) { - return super.getTableCellRendererComponent(table, stringRepresentation, isSelected, hasFocus, row, column); - } - - if (yValues.length == 1) { - //SparklineGraph needs at least 2 values, duplicate the only one we have to get a sparkline with a single line showing that the value does not change over time - xValues = null; - yValues = new Number[]{yValues[0], yValues[0]}; - } - - JLabel label = new JLabel(); - Color background; - if (isSelected) { - background = SELECTED_BACKGROUND; - } else { - background = UNSELECTED_BACKGROUND; - } - - //Note: Can't use interactive SparklineComponent because TableCellEditors don't receive mouse events. - final SparklineParameters sparklineParameters = new SparklineParameters(table.getColumnModel().getColumn(column).getWidth() - 1, table.getRowHeight(row) - 1, Color.BLUE, background, Color.RED, Color.GREEN, null); - final BufferedImage i = SparklineGraph.draw(xValues, yValues, sparklineParameters); - label.setIcon(new ImageIcon(i)); - label.setToolTipText(stringRepresentation);//String representation as tooltip - - return label; - } - - private Number[] getNumberListNumbers(NumberList numberList) { - ArrayList numbers = new ArrayList(); - Number n; - for (int i = 0; i < numberList.size(); i++) { - n = (Number) numberList.getItem(i); - if (n != null) { - numbers.add(n); - } - } - return numbers.toArray(new Number[0]); - } - - private Number[][] getDynamicNumberNumbers(DynamicType dynamicNumber) { - ArrayList xValues = new ArrayList(); - ArrayList yValues = new ArrayList(); - if (dynamicNumber == null) { - return new Number[2][0]; - } - - List intervals = dynamicNumber.getIntervals(); - Number n; - for (Interval interval : intervals) { - n = (Number) interval.getValue(); - if (n != null) { - xValues.add(interval.getLow()); - yValues.add(n); - } - } - return new Number[][]{xValues.toArray(new Number[0]), yValues.toArray(new Number[0])}; - } - - public TimeFormat getTimeFormat() { - return timeFormat; - } - - public void setTimeFormat(TimeFormat timeFormat) { - this.timeFormat = timeFormat; - } -} diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/TimeIntervalCellEditor.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/TimeIntervalCellEditor.java deleted file mode 100644 index fd15bbc72d..0000000000 --- a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/TimeIntervalCellEditor.java +++ /dev/null @@ -1,79 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.desktop.datalab.utils; - -import java.awt.Component; -import javax.swing.DefaultCellEditor; -import javax.swing.JTable; -import javax.swing.JTextField; -import org.gephi.data.attributes.type.TimeInterval; -import org.gephi.dynamic.api.DynamicModel.TimeFormat; - -/** - * This custom cell editor for TimeInterval is necessary to properly display a TimeInterval - * with the current TimeFormat representation (as date or double) while it is being edited in table. - * @author Eduardo Ramos - */ -public class TimeIntervalCellEditor extends DefaultCellEditor { - - private TimeFormat timeFormat = TimeFormat.DOUBLE; - - public TimeIntervalCellEditor(JTextField textField) { - super(textField); - } - - @Override - public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { - if (value != null) { - value=((TimeInterval) value).toString(timeFormat == TimeFormat.DOUBLE); - } - return super.getTableCellEditorComponent(table, value, isSelected, row, column); - } - - public TimeFormat getTimeFormat() { - return timeFormat; - } - - public void setTimeFormat(TimeFormat timeFormat) { - this.timeFormat = timeFormat; - } -} diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/TimeIntervalsRenderer.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/TimeIntervalsRenderer.java deleted file mode 100644 index f027803b68..0000000000 --- a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/TimeIntervalsRenderer.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Eduardo Ramos - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.desktop.datalab.utils; - -import java.awt.Color; -import java.awt.Component; -import java.awt.image.BufferedImage; -import java.util.List; -import javax.swing.ImageIcon; -import javax.swing.JLabel; -import javax.swing.JTable; -import javax.swing.table.DefaultTableCellRenderer; -import org.gephi.data.attributes.type.Interval; -import org.gephi.data.attributes.type.TimeInterval; -import org.gephi.dynamic.api.DynamicModel.TimeFormat; -import org.gephi.utils.TimeIntervalGraphics; - -/** - * TableCellRenderer for drawing time intervals graphics from cells that have a TimeInterval as their value. - * - * @author Eduardo Ramos - */ -public class TimeIntervalsRenderer extends DefaultTableCellRenderer { - - private static final Color SELECTED_BACKGROUND = new Color(225, 255, 255); - private static final Color UNSELECTED_BACKGROUND = Color.white; - private static final Color FILL_COLOR = new Color(153, 255, 255); - private static final Color BORDER_COLOR = new Color(2, 104, 255); - private boolean drawGraphics; - private TimeIntervalGraphics timeIntervalGraphics; - private TimeFormat timeFormat = TimeFormat.DOUBLE; - - public TimeIntervalsRenderer(double min, double max, boolean drawGraphics) { - timeIntervalGraphics = new TimeIntervalGraphics(min, max); - this.drawGraphics = drawGraphics; - } - - @Override - public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { - if (value == null) { - //Render empty string when null - return super.getTableCellRendererComponent(table, null, isSelected, hasFocus, row, column); - } - TimeInterval timeInterval = (TimeInterval) value; - String stringRepresentation = timeInterval.toString(timeFormat == TimeFormat.DOUBLE); - if (drawGraphics) { - JLabel label = new JLabel(); - Color background; - if (isSelected) { - background = SELECTED_BACKGROUND; - } else { - background = UNSELECTED_BACKGROUND; - } - - List> intervals = timeInterval.getIntervals(); - double starts[] = new double[intervals.size()]; - double ends[] = new double[intervals.size()]; - for (int i = 0; i < intervals.size(); i++) { - starts[i] = intervals.get(i).getLow(); - ends[i] = intervals.get(i).getHigh(); - } - - final BufferedImage i = timeIntervalGraphics.createTimeIntervalImage(starts, ends, table.getColumnModel().getColumn(column).getWidth() - 1, table.getRowHeight(row) - 1, FILL_COLOR, BORDER_COLOR, background); - label.setIcon(new ImageIcon(i)); - label.setToolTipText(stringRepresentation);//String representation as tooltip - return label; - } else { - return super.getTableCellRendererComponent(table, stringRepresentation, isSelected, hasFocus, row, column); - } - } - - public boolean isDrawGraphics() { - return drawGraphics; - } - - public void setDrawGraphics(boolean drawGraphics) { - this.drawGraphics = drawGraphics; - } - - public TimeFormat getTimeFormat() { - return timeFormat; - } - - public void setTimeFormat(TimeFormat timeFormat) { - this.timeFormat = timeFormat; - } - - public double getMax() { - return timeIntervalGraphics.getMax(); - } - - public void setMax(double max) { - timeIntervalGraphics.setMax(max); - } - - public double getMin() { - return timeIntervalGraphics.getMin(); - } - - public void setMin(double min) { - timeIntervalGraphics.setMin(min); - } - - public void setMinMax(double min, double max) { - timeIntervalGraphics = new TimeIntervalGraphics(min, max); - } -} diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/componentproviders/AbstractSparklinesGraphicsComponentProvider.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/componentproviders/AbstractSparklinesGraphicsComponentProvider.java new file mode 100644 index 0000000000..64733f2e16 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/componentproviders/AbstractSparklinesGraphicsComponentProvider.java @@ -0,0 +1,113 @@ +package org.gephi.desktop.datalab.utils.componentproviders; + +import java.awt.Color; +import java.awt.image.BufferedImage; +import javax.swing.JLabel; +import javax.swing.UIManager; +import org.gephi.desktop.datalab.utils.GraphModelProvider; +import org.gephi.ui.utils.UIUtils; +import org.gephi.utils.sparklines.SparklineGraph; +import org.gephi.utils.sparklines.SparklineParameters; +import org.jdesktop.swingx.JXTable; +import org.jdesktop.swingx.painter.ImagePainter; +import org.jdesktop.swingx.renderer.CellContext; +import org.jdesktop.swingx.renderer.ComponentProvider; +import org.jdesktop.swingx.renderer.JRendererLabel; + +/** + * @author Eduardo Ramos + */ +public abstract class AbstractSparklinesGraphicsComponentProvider extends ComponentProvider { + + protected static final Color SELECTED_BACKGROUND = UIManager.getColor("Table.selectionBackground"); + protected static final Color UNSELECTED_BACKGROUND = UIManager.getColor("Table.background"); + protected final Color lineColor; + + protected final GraphModelProvider graphModelProvider; + protected final JXTable table; + protected JRendererLabel rendererLabel; + + public AbstractSparklinesGraphicsComponentProvider(GraphModelProvider graphModelProvider, JXTable table) { + super(null, JLabel.LEADING); + this.graphModelProvider = graphModelProvider; + this.table = table; + + if (UIUtils.isDarkLookAndFeel()) { + lineColor = Color.LIGHT_GRAY; + } else { + lineColor = Color.BLUE; + } + } + + public abstract String getTextFromValue(Object value); + + @Override + protected void format(CellContext context) { + //Set image or text + int witdth = table.getColumnModel().getColumn(context.getColumn()).getWidth(); + int height = table.getRowHeight(context.getRow()); + + String text = getTextFromValue(context.getValue()); + + rendererLabel.setSize(witdth, height); + rendererLabel.setToolTipText(text); + rendererLabel.setBorder(null); + + setImagePainter(context.getValue(), context.isSelected()); + } + + @Override + protected void configureState(CellContext context) { + } + + @Override + protected JLabel createRendererComponent() { + return rendererLabel = new JRendererLabel(); + } + + public void setImagePainter(Object value, boolean isSelected) { + if (value == null) { + rendererLabel.setPainter(null); + return; + } + + Number[][] values = getSparklinesXAndYNumbers(value); + Number[] xValues = values[0]; + Number[] yValues = values[1]; + + //If there is less than 1 element, don't show anything. + if (yValues.length < 1) { + rendererLabel.setPainter(null); + return; + } + + if (yValues.length == 1) { + //SparklineGraph needs at least 2 values, duplicate the only one we have to get a sparkline with a single line showing that the value does not change over time + xValues = null; + yValues = new Number[] {yValues[0], yValues[0]}; + } + + Color background; + if (isSelected) { + background = SELECTED_BACKGROUND; + } else { + background = UNSELECTED_BACKGROUND; + } + + //Note: Can't use interactive SparklineComponent because TableCellEditors don't receive mouse events. + final SparklineParameters sparklineParameters = new SparklineParameters( + rendererLabel.getWidth() - 1, + rendererLabel.getHeight() - 1, + lineColor, + background, + Color.RED, + Color.GREEN, + null + ); + final BufferedImage image = SparklineGraph.draw(xValues, yValues, sparklineParameters); + + rendererLabel.setPainter(new ImagePainter(image)); + } + + public abstract Number[][] getSparklinesXAndYNumbers(Object value); +} diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/componentproviders/AbstractTimeSetGraphicsComponentProvider.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/componentproviders/AbstractTimeSetGraphicsComponentProvider.java new file mode 100644 index 0000000000..7b3cf618e5 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/componentproviders/AbstractTimeSetGraphicsComponentProvider.java @@ -0,0 +1,138 @@ +package org.gephi.desktop.datalab.utils.componentproviders; + +import java.awt.Color; +import java.awt.image.BufferedImage; +import javax.swing.JLabel; +import javax.swing.UIManager; +import org.gephi.desktop.datalab.utils.GraphModelProvider; +import org.gephi.graph.api.types.TimeSet; +import org.gephi.ui.utils.UIUtils; +import org.gephi.utils.TimeIntervalGraphics; +import org.jdesktop.swingx.JXTable; +import org.jdesktop.swingx.painter.ImagePainter; +import org.jdesktop.swingx.renderer.CellContext; +import org.jdesktop.swingx.renderer.ComponentProvider; +import org.jdesktop.swingx.renderer.JRendererLabel; + +/** + * @author Eduardo Ramos + */ +public abstract class AbstractTimeSetGraphicsComponentProvider extends ComponentProvider { + + protected static final Color SELECTED_BACKGROUND = UIManager.getColor("Table.selectionBackground"); + protected static final Color UNSELECTED_BACKGROUND = UIManager.getColor("Table.background"); + protected final Color lineColor; + protected final Color fillColor; + protected final Color borderColor; + + protected final TimeIntervalGraphics timeIntervalGraphics; + + protected final JXTable table; + protected final GraphModelProvider graphModelProvider; + protected JRendererLabel rendererLabel; + + public AbstractTimeSetGraphicsComponentProvider(GraphModelProvider graphModelProvider, JXTable table) { + super(null, JLabel.LEADING); + this.graphModelProvider = graphModelProvider; + this.table = table; + this.timeIntervalGraphics = new TimeIntervalGraphics(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); + + if (UIUtils.isDarkLookAndFeel()) { + lineColor = Color.LIGHT_GRAY; + fillColor = new Color(94, 98, 100); + borderColor = Color.LIGHT_GRAY;; + } else { + lineColor = Color.BLUE; + fillColor = new Color(153, 255, 255); + borderColor = new Color(2, 104, 255); + } + } + + private String getTextFromValue(Object value) { + TimeSet timeSet = (TimeSet) value; + String text = null; + if (timeSet != null) { + text = timeSet.toString(graphModelProvider.getGraphModel().getTimeFormat(), + graphModelProvider.getGraphModel().getTimeZone()); + } + + return text; + } + + @Override + protected void format(CellContext context) { + //Set image or text + int witdth = table.getColumnModel().getColumn(context.getColumn()).getWidth(); + int height = table.getRowHeight(context.getRow()); + + String text = getTextFromValue(context.getValue()); + + rendererLabel.setSize(witdth, height); + rendererLabel.setToolTipText(text); + rendererLabel.setBorder(null); + + setImagePainter((TimeSet) context.getValue(), context.isSelected()); + } + + @Override + protected void configureState(CellContext context) { + } + + @Override + protected JLabel createRendererComponent() { + return rendererLabel = new JRendererLabel(); + } + + public abstract TimeIntervalGraphicsParameters getTimeIntervalGraphicsParameters(TimeSet value); + + public void setImagePainter(TimeSet value, boolean isSelected) { + if (value == null) { + rendererLabel.setPainter(null); + return; + } + + Color background; + if (isSelected) { + background = SELECTED_BACKGROUND; + } else { + background = UNSELECTED_BACKGROUND; + } + + TimeIntervalGraphicsParameters params = getTimeIntervalGraphicsParameters(value); + + final BufferedImage image = timeIntervalGraphics.createTimeIntervalImage( + params.starts, + params.ends, + rendererLabel.getWidth() - 1, + rendererLabel.getHeight() - 1, + fillColor, + borderColor, + background + ); + + rendererLabel.setPainter(new ImagePainter(image)); + } + + public double getMax() { + return timeIntervalGraphics.getMax(); + } + + public double getMin() { + return timeIntervalGraphics.getMin(); + } + + public void setMinMax(double min, double max) { + timeIntervalGraphics.setMinMax(min, max); + } + + protected class TimeIntervalGraphicsParameters { + + private final double[] starts; + private final double[] ends; + + public TimeIntervalGraphicsParameters(double[] starts, double[] ends) { + this.starts = starts; + this.ends = ends; + } + } +} diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/componentproviders/ArraySparklinesGraphicsComponentProvider.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/componentproviders/ArraySparklinesGraphicsComponentProvider.java new file mode 100644 index 0000000000..734263e6ee --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/componentproviders/ArraySparklinesGraphicsComponentProvider.java @@ -0,0 +1,37 @@ +package org.gephi.desktop.datalab.utils.componentproviders; + +import java.lang.reflect.Array; +import org.gephi.desktop.datalab.utils.GraphModelProvider; +import org.gephi.graph.api.AttributeUtils; +import org.jdesktop.swingx.JXTable; + +/** + * @author Eduardo Ramos + */ +public class ArraySparklinesGraphicsComponentProvider extends AbstractSparklinesGraphicsComponentProvider { + + public ArraySparklinesGraphicsComponentProvider(GraphModelProvider graphModelProvider, JXTable table) { + super(graphModelProvider, table); + } + + @Override + public String getTextFromValue(Object value) { + if (value == null) { + return null; + } + + return AttributeUtils.printArray(value); + } + + @Override + public Number[][] getSparklinesXAndYNumbers(Object arr) { + int size = Array.getLength(arr); + + Number[] result = new Number[size]; + for (int i = 0; i < size; i++) { + result[i] = (Number) Array.get(arr, i);//This will do the auto-boxing of primitives + } + + return new Number[][] {null, result}; + } +} diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/componentproviders/IntervalMapSparklinesGraphicsComponentProvider.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/componentproviders/IntervalMapSparklinesGraphicsComponentProvider.java new file mode 100644 index 0000000000..dacaed1684 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/componentproviders/IntervalMapSparklinesGraphicsComponentProvider.java @@ -0,0 +1,55 @@ +package org.gephi.desktop.datalab.utils.componentproviders; + +import java.time.ZoneId; +import java.util.ArrayList; +import org.gephi.desktop.datalab.utils.GraphModelProvider; +import org.gephi.graph.api.Interval; +import org.gephi.graph.api.TimeFormat; +import org.gephi.graph.api.types.IntervalMap; +import org.jdesktop.swingx.JXTable; + +/** + * @author Eduardo Ramos + */ +public class IntervalMapSparklinesGraphicsComponentProvider extends AbstractSparklinesGraphicsComponentProvider { + + public IntervalMapSparklinesGraphicsComponentProvider(GraphModelProvider graphModelProvider, JXTable table) { + super(graphModelProvider, table); + } + + @Override + public String getTextFromValue(Object value) { + if (value == null) { + return null; + } + + TimeFormat timeFormat = graphModelProvider.getGraphModel().getTimeFormat(); + ZoneId timeZone = graphModelProvider.getGraphModel().getTimeZone(); + + return ((IntervalMap) value).toString(timeFormat, timeZone); + } + + @Override + public Number[][] getSparklinesXAndYNumbers(Object value) { + IntervalMap intervalMap = (IntervalMap) value; + + ArrayList xValues = new ArrayList<>(); + ArrayList yValues = new ArrayList<>(); + if (intervalMap == null) { + return new Number[2][0]; + } + + Interval[] intervals = intervalMap.toKeysArray(); + Object[] values = intervalMap.toValuesArray(); + Number n; + for (int i = 0; i < intervals.length; i++) { + n = (Number) values[i]; + if (n != null) { + xValues.add(intervals[i].getLow()); + yValues.add(n); + } + } + + return new Number[][] {xValues.toArray(new Number[0]), yValues.toArray(new Number[0])}; + } +} diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/componentproviders/IntervalSetGraphicsComponentProvider.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/componentproviders/IntervalSetGraphicsComponentProvider.java new file mode 100644 index 0000000000..c432615d7e --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/componentproviders/IntervalSetGraphicsComponentProvider.java @@ -0,0 +1,31 @@ +package org.gephi.desktop.datalab.utils.componentproviders; + +import org.gephi.desktop.datalab.utils.GraphModelProvider; +import org.gephi.graph.api.types.IntervalSet; +import org.gephi.graph.api.types.TimeSet; +import org.jdesktop.swingx.JXTable; + +/** + * @author Eduardo Ramos + */ +public class IntervalSetGraphicsComponentProvider extends AbstractTimeSetGraphicsComponentProvider { + + public IntervalSetGraphicsComponentProvider(GraphModelProvider graphModelProvider, JXTable table) { + super(graphModelProvider, table); + } + + @Override + public TimeIntervalGraphicsParameters getTimeIntervalGraphicsParameters(TimeSet value) { + IntervalSet intervalSet = (IntervalSet) value; + double[] intervals = intervalSet.getIntervals(); + + double[] starts = new double[intervals.length / 2]; + double[] ends = new double[intervals.length / 2]; + for (int i = 0, startIndex = 0; startIndex < intervals.length; i++, startIndex += 2) { + starts[i] = intervals[startIndex]; + ends[i] = intervals[startIndex + 1]; + } + + return new TimeIntervalGraphicsParameters(starts, ends); + } +} diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/componentproviders/TimestampMapSparklinesGraphicsComponentProvider.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/componentproviders/TimestampMapSparklinesGraphicsComponentProvider.java new file mode 100644 index 0000000000..8fa5391060 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/componentproviders/TimestampMapSparklinesGraphicsComponentProvider.java @@ -0,0 +1,39 @@ +package org.gephi.desktop.datalab.utils.componentproviders; + +import java.time.ZoneId; +import org.gephi.desktop.datalab.utils.GraphModelProvider; +import org.gephi.graph.api.TimeFormat; +import org.gephi.graph.api.types.TimestampMap; +import org.jdesktop.swingx.JXTable; + +/** + * @author Eduardo Ramos + */ +public class TimestampMapSparklinesGraphicsComponentProvider extends AbstractSparklinesGraphicsComponentProvider { + + public TimestampMapSparklinesGraphicsComponentProvider(GraphModelProvider graphModelProvider, JXTable table) { + super(graphModelProvider, table); + } + + @Override + public String getTextFromValue(Object value) { + if (value == null) { + return null; + } + + TimeFormat timeFormat = graphModelProvider.getGraphModel().getTimeFormat(); + ZoneId timeZone = graphModelProvider.getGraphModel().getTimeZone(); + + return ((TimestampMap) value).toString(timeFormat, timeZone); + } + + @Override + public Number[][] getSparklinesXAndYNumbers(Object value) { + TimestampMap timestampMap = (TimestampMap) value; + + Double[] timestamps = timestampMap.toKeysArray(); + Number[] values = (Number[]) timestampMap.toValuesArray(); + + return new Number[][] {timestamps, values}; + } +} diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/componentproviders/TimestampSetGraphicsComponentProvider.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/componentproviders/TimestampSetGraphicsComponentProvider.java new file mode 100644 index 0000000000..72e97a48ba --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/componentproviders/TimestampSetGraphicsComponentProvider.java @@ -0,0 +1,32 @@ +package org.gephi.desktop.datalab.utils.componentproviders; + +import org.gephi.desktop.datalab.utils.GraphModelProvider; +import org.gephi.graph.api.types.TimeSet; +import org.gephi.graph.api.types.TimestampSet; +import org.jdesktop.swingx.JXTable; + +/** + * @author Eduardo Ramos + */ +public class TimestampSetGraphicsComponentProvider extends AbstractTimeSetGraphicsComponentProvider { + + public TimestampSetGraphicsComponentProvider(GraphModelProvider graphModelProvider, JXTable table) { + super(graphModelProvider, table); + } + + @Override + public TimeIntervalGraphicsParameters getTimeIntervalGraphicsParameters(TimeSet value) { + TimestampSet timestampSet = (TimestampSet) value; + + double[] timestamps = timestampSet.toPrimitiveArray(); + + double[] starts = new double[timestamps.length]; + double[] ends = new double[timestamps.length]; + for (int i = 0; i < timestamps.length; i++) { + starts[i] = timestamps[i]; + ends[i] = timestamps[i]; + } + + return new TimeIntervalGraphicsParameters(starts, ends); + } +} diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/stringconverters/ArrayStringConverter.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/stringconverters/ArrayStringConverter.java new file mode 100644 index 0000000000..093d1d5c24 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/stringconverters/ArrayStringConverter.java @@ -0,0 +1,65 @@ +/* + Copyright 2008-2010 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.datalab.utils.stringconverters; + +import org.gephi.graph.api.AttributeUtils; +import org.jdesktop.swingx.renderer.StringValue; + +/** + * SwingX renderer for representing arrays as strings in a table. + * Only used for non-numeric arrays. Numeric arrays use the sparklines renderer. + * + * @author Eduardo Ramos + */ +public class ArrayStringConverter implements StringValue { + + @Override + public String getString(Object value) { + String str = null; + if (value != null) { + str = AttributeUtils.printArray(value); + } + + return str; + } +} diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/stringconverters/DefaultStringRepresentationConverter.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/stringconverters/DefaultStringRepresentationConverter.java new file mode 100644 index 0000000000..753f084505 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/stringconverters/DefaultStringRepresentationConverter.java @@ -0,0 +1,64 @@ +/* + Copyright 2008-2010 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.datalab.utils.stringconverters; + +import org.jdesktop.swingx.renderer.StringValue; + +/** + * SwingX renderer for representing gephi supported types always with the toString representation, independently of user language, etc. + * Only used for types that don't have any other special renderer. Used for example with primitive wrappers, String, BigDecimal and BigInteger + * + * @author Eduardo Ramos + */ +public class DefaultStringRepresentationConverter implements StringValue { + + @Override + public String getString(Object value) { + String str = null; + if (value != null) { + str = value.toString(); + } + + return str; + } +} diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/stringconverters/DoubleStringConverter.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/stringconverters/DoubleStringConverter.java new file mode 100644 index 0000000000..1b8a2dbe96 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/stringconverters/DoubleStringConverter.java @@ -0,0 +1,77 @@ +/* + Copyright 2008-2010 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.datalab.utils.stringconverters; + +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.util.Locale; +import org.jdesktop.swingx.renderer.StringValue; + +/** + * SwingX converter for representing float/doubles always with the english locale representation, and a limited precision, independently of user language, etc. + * + * @author Eduardo Ramos + */ +public class DoubleStringConverter implements StringValue { + + /** + * Formatter for limiting precision to 6 decimals, avoiding precision errors (epsilon). + */ + public static final DecimalFormat FORMAT = new DecimalFormat("0.0#####"); + + static { + DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance(Locale.ENGLISH); + symbols.setInfinity("Infinity"); + FORMAT.setDecimalFormatSymbols(symbols); + } + + @Override + public String getString(Object value) { + String str = null; + if (value != null) { + str = FORMAT.format(value); + } + + return str; + } +} diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/stringconverters/TimeMapStringConverter.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/stringconverters/TimeMapStringConverter.java new file mode 100644 index 0000000000..9997e27489 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/stringconverters/TimeMapStringConverter.java @@ -0,0 +1,74 @@ +/* + Copyright 2008-2010 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.datalab.utils.stringconverters; + +import org.gephi.desktop.datalab.utils.GraphModelProvider; +import org.gephi.graph.api.types.TimeMap; +import org.gephi.graph.api.types.TimeSet; +import org.jdesktop.swingx.renderer.StringValue; + +/** + * SwingX renderer for representing {@link TimeSet} as strings in a table. + * + * @author Eduardo Ramos + */ +public class TimeMapStringConverter implements StringValue { + + private final GraphModelProvider graphModelProvider; + + public TimeMapStringConverter(GraphModelProvider graphModelProvider) { + this.graphModelProvider = graphModelProvider; + } + + @Override + public String getString(Object value) { + String str = null; + if (value != null) { + TimeMap timeMap = (TimeMap) value; + str = timeMap.toString(graphModelProvider.getGraphModel().getTimeFormat(), + graphModelProvider.getGraphModel().getTimeZone()); + } + + return str; + } +} diff --git a/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/stringconverters/TimeSetStringConverter.java b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/stringconverters/TimeSetStringConverter.java new file mode 100644 index 0000000000..9855412244 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/java/org/gephi/desktop/datalab/utils/stringconverters/TimeSetStringConverter.java @@ -0,0 +1,73 @@ +/* + Copyright 2008-2010 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.datalab.utils.stringconverters; + +import org.gephi.desktop.datalab.utils.GraphModelProvider; +import org.gephi.graph.api.types.TimeSet; +import org.jdesktop.swingx.renderer.StringValue; + +/** + * SwingX renderer for representing {@link TimeSet} as strings in a table. + * + * @author Eduardo Ramos + */ +public class TimeSetStringConverter implements StringValue { + + private final GraphModelProvider graphModelProvider; + + public TimeSetStringConverter(GraphModelProvider graphModelProvider) { + this.graphModelProvider = graphModelProvider; + } + + @Override + public String getString(Object value) { + String str = null; + if (value != null) { + TimeSet timeSet = (TimeSet) value; + str = timeSet.toString(graphModelProvider.getGraphModel().getTimeFormat(), + graphModelProvider.getGraphModel().getTimeZone()); + } + + return str; + } +} diff --git a/modules/DesktopDataLaboratory/src/main/nbm/manifest.mf b/modules/DesktopDataLaboratory/src/main/nbm/manifest.mf index 994241408a..177b8363df 100644 --- a/modules/DesktopDataLaboratory/src/main/nbm/manifest.mf +++ b/modules/DesktopDataLaboratory/src/main/nbm/manifest.mf @@ -1,4 +1,7 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true +OpenIDE-Module-Layer: org/gephi/desktop/datalab/layer.xml OpenIDE-Module-Localizing-Bundle: org/gephi/desktop/datalab/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi UI +OpenIDE-Module-Name: Desktop Data Laboratory diff --git a/modules/DesktopDataLaboratory/src/main/nbm/module.xml b/modules/DesktopDataLaboratory/src/main/nbm/module.xml deleted file mode 100644 index 348c9bd998..0000000000 --- a/modules/DesktopDataLaboratory/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle.properties index c7f338e5f3..2826a5a339 100644 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle.properties +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle.properties @@ -1,7 +1,4 @@ -OpenIDE-Module-Display-Category=Gephi UI -OpenIDE-Module-Long-Description=\ - Data Laboratory Table component and edit panels -OpenIDE-Module-Name=Desktop Data Laboratory +OpenIDE-Module-Long-Description=Data Laboratory Table component and edit panels CTL_DataTableAction=Data Table CTL_DataTableTopComponent=Data Table @@ -29,11 +26,6 @@ OpenIDE-Module-Short-Description=Data Laboratory Table component and edit panels SettingsPanel.title={0} settings -EdgeDataTable.source.column.text=Source -EdgeDataTable.target.column.text=Target -EdgeDataTable.type.column.text=Type -EdgeDataTable.type.column.directed=Directed -EdgeDataTable.type.column.undirected=Undirected ConfigurationPanel.title=Configuration ConfigurationPanel.onlyVisibleCheckBox.text=Visible graph only ConfigurationPanel.useSparklinesCheckBox.text=Sparklines replaces number lists and dynamic numbers @@ -45,9 +37,6 @@ DataTableTopComponent.availableColumnsButton.toolTipText=Configure displayed col AvailableColumnsPanel.title=Display settings AvailableColumnsPanel.descriptionLabel.text=Choose the columns to display: AvailableColumnsPanel.maximum-available-columns.info=Maximum number of columns reached -ConfigurationPanel.timeIntervalsAsDates.text=Time intervals as dates -TableCSVExporter.dialog.success=Table exported with success -TableCSVExporter.dialog.error=An error happened when writing the file. Make sure the file is not in use and you have permissions -TableCSVExporter.dialog.error.title=Error -TableCSVExporter.filechooser.csvDescription=CSV \ No newline at end of file +ConfigurationPanel.timeFormatLabel.text=Time format +ConfigurationPanel.timeZoneLabel.text=Time zone \ No newline at end of file diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_ar.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_ca.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_ca.properties new file mode 100644 index 0000000000..de478be723 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_ca.properties @@ -0,0 +1,39 @@ +OpenIDE-Module-Long-Description=Data Laboratory Table component and edit panels +CTL_DataTableAction=Taula de dades +CTL_DataTableTopComponent=Taula de dades +!HINT_DataTableTopComponent= + +DataTableTopComponent.tableScrollPane.busyMessage=Fetching data... +DataTableTopComponent.tableScrollPane.error=An error occured while feching data... +DataTableTopComponent.labelFilter.text=Filtre: +DataTableTopComponent.edgesButton.text=Arestes +DataTableTopComponent.nodesButton.text=Nodes +DataTableTopComponent.refreshButton.text=Refresca +DataTableTopComponent.labelBanner.text=S'han actualitzat les dades. Vols refrescar la taula? +DataTableTopComponent.boxGlue.text= +DataTableTopComponent.filterTextField.text= +DataTableTopComponent.filterTextField.toolTipText=Es permeten les expressions regulars +DataTableTopComponent.attributeColumnsPanel.title=Columna d'atributs +DataTableTopComponent.RichToolTip.title.text=Descripciσ +DataTableTopComponent.addColumnButton.text=Afegeix una columna +DataTableTopComponent.mergeColumnsButton.text=Merge columns +DataTableTopComponent.dialogs.okButton.text=D'acord +DataTableTopComponent.general.actions.plugins.button.text=Mιs accions +DataTableTopComponent.general.actions.plugins.group.name=Group {0} +OpenIDE-Module-Short-Description=Data Laboratory Table component and edit panels +SettingsPanel.title={0} settings + + +ConfigurationPanel.title=Configuraciσ +ConfigurationPanel.onlyVisibleCheckBox.text=Visible graph only +ConfigurationPanel.useSparklinesCheckBox.text=Sparklines replaces number lists and dynamic numbers +ConfigurationPanel.showEdgesNodesLabelsCheckBox.text=Show label of source and target nodes +DataTableTopComponent.configurationButton.text=Configuraciσ +ConfigurationPanel.timeIntervalsGraphicsCheckBox.text=Time intervals as graphics +DataTableTopComponent.availableColumnsButton.text= +DataTableTopComponent.availableColumnsButton.toolTipText=Configura les columnes que es veuen +AvailableColumnsPanel.title=Mostra la configuraciσ +AvailableColumnsPanel.descriptionLabel.text=Tria les columnes que s'han de veure +AvailableColumnsPanel.maximum-available-columns.info=Maximum number of columns reached +ConfigurationPanel.timeFormatLabel.text=Format de temps +ConfigurationPanel.timeZoneLabel.text=Zona horΰria diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_cs.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_cs.properties index 7a77838162..5fead8942c 100644 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_cs.properties +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_cs.properties @@ -1,87 +1,42 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:14+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=Sou\u010d\u00e1st tabulky datov\u00e9 laborato\u0159e a panel\u016f \u00faprav - -CTL_DataTableAction=Tabulka dat - -CTL_DataTableTopComponent=Tabulka dat - -DataTableTopComponent.tableScrollPane.busyMessage=Z\u00edsk\u00e1v\u00e1n\u00ed dat... - -DataTableTopComponent.tableScrollPane.error=P\u0159i z\u00edsk\u00e1v\u00e1n\u00ed dat do\u0161lo k chyb\u011b... - -DataTableTopComponent.labelFilter.text=Filtr\: - -DataTableTopComponent.edgesButton.text=Hrany - -DataTableTopComponent.nodesButton.text=Uzle - -DataTableTopComponent.refreshButton.text=Obnovit - -DataTableTopComponent.labelBanner.text=Data aktualizov\u00e1na. Chcete obnovit tabulku? - -DataTableTopComponent.filterTextField.toolTipText=Regul\u00e1rn\u00ed v\u00fdraz je povolen - -DataTableTopComponent.attributeColumnsPanel.title=Sloupce vlastnost\u00ed - -DataTableTopComponent.RichToolTip.title.text=Popis - -DataTableTopComponent.addColumnButton.text=P\u0159idat sloupec - -DataTableTopComponent.mergeColumnsButton.text=Slou\u010dit sloupce - -DataTableTopComponent.dialogs.okButton.text=OK - -DataTableTopComponent.general.actions.plugins.button.text=Dal\u0161\u00ed \u010dinnosti - -DataTableTopComponent.general.actions.plugins.group.name=Skupina {0} - -OpenIDE-Module-Short-Description=Sou\u010d\u00e1st tabulky datov\u00e9 laborato\u0159e a panel\u016f \u00faprav - -SettingsPanel.title=Nastaven\u00ed {0} - -EdgeDataTable.source.column.text=Zdroj - -EdgeDataTable.target.column.text=C\u00edl - -EdgeDataTable.type.column.text=Typ - -EdgeDataTable.type.column.directed=\u0158\u00edzen\u00e9 - -EdgeDataTable.type.column.undirected=Ne\u0159\u00edzen\u00e9 - -ConfigurationPanel.title=Konfigurace - -ConfigurationPanel.onlyVisibleCheckBox.text=Pouze viditeln\u00fd graf - -ConfigurationPanel.useSparklinesCheckBox.text=Minigrafy nahrazuj\u00ed o\u010d\u00edslovan\u00e9 seznamy a dynamick\u00e1 \u010d\u00edsla - -ConfigurationPanel.showEdgesNodesLabelsCheckBox.text=Zobrazit zdrojov\u00fd \u0161t\u00edtek a c\u00edlov\u00e9 uzle - -DataTableTopComponent.configurationButton.text=Konfigurace - -ConfigurationPanel.timeIntervalsGraphicsCheckBox.text=\u010casov\u00e9 intervaly jako grafika - -DataTableTopComponent.availableColumnsButton.toolTipText=Nastavit zobrazen\u00e9 sloupce - -AvailableColumnsPanel.title=Nastaven\u00ed zobrazen\u00ed - -AvailableColumnsPanel.descriptionLabel.text=Zvolte sloupce zobrazen\u00ed\: - -AvailableColumnsPanel.maximum-available-columns.info=Dosa\u017eeno maxim\u00e1ln\u00edho po\u010dtu sloupc\u016f - -ConfigurationPanel.timeIntervalsAsDates.text=\u010casov\u00e9 intervaly jako data - -!TableCSVExporter.dialog.success= - -!TableCSVExporter.dialog.error= - -!TableCSVExporter.dialog.error.title= - -!TableCSVExporter.filechooser.csvDescription= +OpenIDE-Module-Long-Description=Sou\u010dαst tabulky datovι laborato\u0159e a panel\u016f ϊprav + +CTL_DataTableAction=Tabulka dat +CTL_DataTableTopComponent=Tabulka dat +!HINT_DataTableTopComponent= + +DataTableTopComponent.tableScrollPane.busyMessage = Zνskαvαnν dat... +DataTableTopComponent.tableScrollPane.error = P\u0159i zνskαvαnν dat do\u0161lo k chyb\u011b... +DataTableTopComponent.labelFilter.text=Filtr: +DataTableTopComponent.edgesButton.text=Hrany +DataTableTopComponent.nodesButton.text=Uzle +DataTableTopComponent.refreshButton.text=Obnovit +DataTableTopComponent.labelBanner.text=Data aktualizovαna. Chcete obnovit tabulku? +DataTableTopComponent.boxGlue.text= +DataTableTopComponent.filterTextField.text= +DataTableTopComponent.filterTextField.toolTipText=Regulαrnν vύraz je povolen +DataTableTopComponent.attributeColumnsPanel.title=Sloupce vlastnostν +DataTableTopComponent.RichToolTip.title.text=Popis +DataTableTopComponent.addColumnButton.text=P\u0159idat sloupec +DataTableTopComponent.mergeColumnsButton.text=Slou\u010dit sloupce +DataTableTopComponent.dialogs.okButton.text=OK +DataTableTopComponent.general.actions.plugins.button.text=Dal\u0161ν \u010dinnosti +DataTableTopComponent.general.actions.plugins.group.name=Skupina {0} + +OpenIDE-Module-Short-Description=Sou\u010dαst tabulky datovι laborato\u0159e a panel\u016f ϊprav +SettingsPanel.title=Nastavenν {0} + + +ConfigurationPanel.title=Konfigurace +ConfigurationPanel.onlyVisibleCheckBox.text=Pouze viditelnύ graf +ConfigurationPanel.useSparklinesCheckBox.text=Minigrafy nahrazujν o\u010dνslovanι seznamy a dynamickα \u010dνsla +ConfigurationPanel.showEdgesNodesLabelsCheckBox.text=Zobrazit zdrojovou jmenovku a cνlovι uzle +DataTableTopComponent.configurationButton.text=Konfigurace +ConfigurationPanel.timeIntervalsGraphicsCheckBox.text=\u010casovι intervaly jako grafika +DataTableTopComponent.availableColumnsButton.text= +DataTableTopComponent.availableColumnsButton.toolTipText=Nastavit zobrazenι sloupce +AvailableColumnsPanel.title=Nastavenν zobrazenν +AvailableColumnsPanel.descriptionLabel.text=Zvolte sloupce zobrazenν: +AvailableColumnsPanel.maximum-available-columns.info=Dosa\u017eeno maximαlnνho po\u010dtu sloupc\u016f + +ConfigurationPanel.timeFormatLabel.text=Formαt \u010dasu +ConfigurationPanel.timeZoneLabel.text=\u010casovι pαsmo diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_de.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_de.properties new file mode 100644 index 0000000000..9d31186180 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_de.properties @@ -0,0 +1,42 @@ +OpenIDE-Module-Long-Description=Datenlabor-Tabellen-Komponente und Editier-Dialoge + +CTL_DataTableAction=Datentabelle +CTL_DataTableTopComponent=Datentabelle +!HINT_DataTableTopComponent= + +DataTableTopComponent.tableScrollPane.busyMessage = Daten laden... +DataTableTopComponent.tableScrollPane.error = Wδhrend des Datenladens ist ein Fehler aufgetreten +DataTableTopComponent.labelFilter.text=Filter: +DataTableTopComponent.edgesButton.text=Kanten +DataTableTopComponent.nodesButton.text=Knoten +DataTableTopComponent.refreshButton.text=Aktualisieren +DataTableTopComponent.labelBanner.text=Daten aktualisiert. Mφchten Sie die Tabelle aktualisieren? +DataTableTopComponent.boxGlue.text= +DataTableTopComponent.filterTextField.text= +DataTableTopComponent.filterTextField.toolTipText=Regulδrer Ausdruck ist zulδssig +DataTableTopComponent.attributeColumnsPanel.title=Attributspalten +DataTableTopComponent.RichToolTip.title.text=Beschreibung +DataTableTopComponent.addColumnButton.text=Spalte hinzufόgen +DataTableTopComponent.mergeColumnsButton.text=Spalten verschmelzen +DataTableTopComponent.dialogs.okButton.text=OK +DataTableTopComponent.general.actions.plugins.button.text=Weitere Aktionen +DataTableTopComponent.general.actions.plugins.group.name=Gruppe {0} + +OpenIDE-Module-Short-Description=Datenlabor-Tabellen-Komponente und Editier-Dialoge +SettingsPanel.title={0} Eigenschaften + + +ConfigurationPanel.title=Konfiguration +ConfigurationPanel.onlyVisibleCheckBox.text=Nur sichtbarer Graph +ConfigurationPanel.useSparklinesCheckBox.text=Sparklines ersetzt 'number lists' und 'dynamic numbers' +ConfigurationPanel.showEdgesNodesLabelsCheckBox.text=Beschriftung des Ursprungs- und Zielknotens anzeigen +DataTableTopComponent.configurationButton.text=Konfiguration +ConfigurationPanel.timeIntervalsGraphicsCheckBox.text=Zeitintervalle als Graphiken +DataTableTopComponent.availableColumnsButton.text= +DataTableTopComponent.availableColumnsButton.toolTipText=Angezeigte Spalten bearbeiten +AvailableColumnsPanel.title=Anzeige Einstellungen +AvailableColumnsPanel.descriptionLabel.text=Anzuzeigende Spalten auswδhlen: +AvailableColumnsPanel.maximum-available-columns.info=Maximale Spaltenanzahl erreicht + +ConfigurationPanel.timeFormatLabel.text=Zeitformat +ConfigurationPanel.timeZoneLabel.text=Zeitzone diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_es.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_es.properties index 5c2cec22da..8bd38541a4 100644 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_es.properties +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_es.properties @@ -1,89 +1,39 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# , 2011. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:25+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Tabla del laboratorio de datos y paneles de edici\u00f3n - +OpenIDE-Module-Long-Description=Tabla del laboratorio de datos y paneles de ediciσn CTL_DataTableAction=Tabla de datos - CTL_DataTableTopComponent=Tabla de datos +!HINT_DataTableTopComponent= DataTableTopComponent.tableScrollPane.busyMessage=Obteniendo datos... - -DataTableTopComponent.tableScrollPane.error=Un error ocurri\u00f3 mientras se obten\u00edan los datos... - -DataTableTopComponent.labelFilter.text=Filtro\: - +DataTableTopComponent.tableScrollPane.error=Un error ocurriσ mientras se obtenνan los datos... +DataTableTopComponent.labelFilter.text=Filtro: DataTableTopComponent.edgesButton.text=Aristas - DataTableTopComponent.nodesButton.text=Nodos - DataTableTopComponent.refreshButton.text=Refrescar - -DataTableTopComponent.labelBanner.text=Los datos han sido actualizados. \u00bfQuieres refrescar la tabla? - -DataTableTopComponent.filterTextField.toolTipText=El uso de expresiones regulares est\u00e1 permitido - +DataTableTopComponent.labelBanner.text=Los datos han sido actualizados. ΏQuieres refrescar la tabla? +DataTableTopComponent.boxGlue.text= +DataTableTopComponent.filterTextField.text= +DataTableTopComponent.filterTextField.toolTipText=El uso de expresiones regulares estα permitido DataTableTopComponent.attributeColumnsPanel.title=Columnas de atributos - -DataTableTopComponent.RichToolTip.title.text=Descripci\u00f3n - -DataTableTopComponent.addColumnButton.text=A\u00f1adir nueva columna - -DataTableTopComponent.mergeColumnsButton.text=Mezclar columnas - +DataTableTopComponent.RichToolTip.title.text=Descripciσn +DataTableTopComponent.addColumnButton.text=Aρadir nueva columna +DataTableTopComponent.mergeColumnsButton.text=Fusionar columnas DataTableTopComponent.dialogs.okButton.text=Ok - -DataTableTopComponent.general.actions.plugins.button.text=M\u00e1s acciones - +DataTableTopComponent.general.actions.plugins.button.text=Mαs acciones DataTableTopComponent.general.actions.plugins.group.name=Grupo {0} +OpenIDE-Module-Short-Description=Tabla del laboratorio de datos y paneles de ediciσn +SettingsPanel.title=Parαmetros de {0} -OpenIDE-Module-Short-Description=Tabla del laboratorio de datos y paneles de edici\u00f3n - -SettingsPanel.title=Par\u00e1metros de {0} - -EdgeDataTable.source.column.text=Origen - -EdgeDataTable.target.column.text=Destino - -EdgeDataTable.type.column.text=Tipo - -EdgeDataTable.type.column.directed=Dirigida - -EdgeDataTable.type.column.undirected=No dirigida - -ConfigurationPanel.title=Configuraci\u00f3n - -ConfigurationPanel.onlyVisibleCheckBox.text=Grafo visible s\u00f3lamente - -ConfigurationPanel.useSparklinesCheckBox.text=Mostrar listas de n\u00fameros y n\u00fameros din\u00e1micos como sparklines +ConfigurationPanel.title=Configuraciσn +ConfigurationPanel.onlyVisibleCheckBox.text=Grafo visible sσlamente +ConfigurationPanel.useSparklinesCheckBox.text=Mostrar listas de nϊmeros y nϊmeros dinαmicos como sparklines ConfigurationPanel.showEdgesNodesLabelsCheckBox.text=Mostrar etiqueta de los nodos origen y destino de las aristas - -DataTableTopComponent.configurationButton.text=Configuraci\u00f3n - -ConfigurationPanel.timeIntervalsGraphicsCheckBox.text=Mostrar gr\u00e1ficos de los int\u00e9rvalos temporales - +DataTableTopComponent.configurationButton.text=Configuraciσn +ConfigurationPanel.timeIntervalsGraphicsCheckBox.text=Mostrar grαficos de los intιrvalos temporales +DataTableTopComponent.availableColumnsButton.text= DataTableTopComponent.availableColumnsButton.toolTipText=Configurar columnas disponibles - AvailableColumnsPanel.title=Columnas disponibles - -AvailableColumnsPanel.descriptionLabel.text=Escoge las columnas que deber\u00edan estar disponibles\: - -AvailableColumnsPanel.maximum-available-columns.info=N\u00famero m\u00e1ximo de columnas disponibles alcanzado - -ConfigurationPanel.timeIntervalsAsDates.text=Intervalos temporales como fechas - -TableCSVExporter.dialog.success=Tabla exportada con \u00e9xito - -TableCSVExporter.dialog.error=Un error ocurri\u00f3 mientras al escribir el fichero. Aseg\u00farate de que el archivo no est\u00e1 en uso y tienes los permisos necesarios - -TableCSVExporter.dialog.error.title=Error - -TableCSVExporter.filechooser.csvDescription=CSV +AvailableColumnsPanel.descriptionLabel.text=Escoge las columnas que deberνan estar disponibles: +AvailableColumnsPanel.maximum-available-columns.info=Nϊmero mαximo de columnas disponibles alcanzado +ConfigurationPanel.timeFormatLabel.text=Formato temporal +ConfigurationPanel.timeZoneLabel.text=Zona horaria diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_fr.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_fr.properties index 0ba341cf5f..4b3292df64 100644 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_fr.properties +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_fr.properties @@ -1,88 +1,42 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:14+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Laboratoire de donn\u00e9es\: composant Table et panneaux d'\u00e9dition - -CTL_DataTableAction=Tableau de donn\u00e9es - -CTL_DataTableTopComponent=Tableau de donn\u00e9es - -DataTableTopComponent.tableScrollPane.busyMessage=R\u00e9cup\u00e9ration des donn\u00e9es... - -DataTableTopComponent.tableScrollPane.error=Une erreur est survenue lors de la r\u00e9cup\u00e9ration des donn\u00e9es. - -DataTableTopComponent.labelFilter.text=Filtre \: - -DataTableTopComponent.edgesButton.text=Liens - -DataTableTopComponent.nodesButton.text=Noeuds - -DataTableTopComponent.refreshButton.text=Rafraichir - -DataTableTopComponent.labelBanner.text=Donn\u00e9es mises \u00e0 jour. Souhaitez-vous r\u00e9-actualiser le tableau ? - -DataTableTopComponent.filterTextField.toolTipText=Usage des expressions rationnelles autoris\u00e9 - -DataTableTopComponent.attributeColumnsPanel.title=Colonnes d'attribut - -DataTableTopComponent.RichToolTip.title.text=Description - -DataTableTopComponent.addColumnButton.text=Ajouter une colonne - -DataTableTopComponent.mergeColumnsButton.text=Fusionner les colonnes - -DataTableTopComponent.dialogs.okButton.text=OK - -DataTableTopComponent.general.actions.plugins.button.text=Plus - -DataTableTopComponent.general.actions.plugins.group.name=Groupe {0} - -OpenIDE-Module-Short-Description=Tableau du laboratoire de donn\u00e9es - -SettingsPanel.title={0} - Param\u00e8tres - -EdgeDataTable.source.column.text=Source - -EdgeDataTable.target.column.text=Destination - -EdgeDataTable.type.column.text=Type - -EdgeDataTable.type.column.directed=Orient\u00e9 - -EdgeDataTable.type.column.undirected=Non orient\u00e9 - -ConfigurationPanel.title=Configuration - -ConfigurationPanel.onlyVisibleCheckBox.text=Graphe visible uniquement - -ConfigurationPanel.useSparklinesCheckBox.text=Voir les listes de nombres et les nombres dynamiques avec des sparklines. - -ConfigurationPanel.showEdgesNodesLabelsCheckBox.text=Afficher les labels des noeuds sources et destinations - -DataTableTopComponent.configurationButton.text=Configuration - -ConfigurationPanel.timeIntervalsGraphicsCheckBox.text=Afficher les graphiques des intervalles temporels - -DataTableTopComponent.availableColumnsButton.toolTipText=Configurer les colonnes disponibles - -AvailableColumnsPanel.title=Param\u00e8tres des colonnes disponibles - -AvailableColumnsPanel.descriptionLabel.text=Choisir les colonnes disponibles \: - -AvailableColumnsPanel.maximum-available-columns.info=Nombre maximum de colonnes atteint - -ConfigurationPanel.timeIntervalsAsDates.text=Intervalles temporelles comme dates - -!TableCSVExporter.dialog.success= - -!TableCSVExporter.dialog.error= - -!TableCSVExporter.dialog.error.title= - -!TableCSVExporter.filechooser.csvDescription= +OpenIDE-Module-Long-Description=Laboratoire de donnιes: composant Table et panneaux d'ιdition + +CTL_DataTableAction=Tableau de donnιes +CTL_DataTableTopComponent=Tableau de donnιes +!HINT_DataTableTopComponent= + +DataTableTopComponent.tableScrollPane.busyMessage = Rιcupιration des donnιes... +DataTableTopComponent.tableScrollPane.error = Une erreur est survenue lors de la rιcupιration des donnιes. +DataTableTopComponent.labelFilter.text=Filtre : +DataTableTopComponent.edgesButton.text=Liens +DataTableTopComponent.nodesButton.text=Noeuds +DataTableTopComponent.refreshButton.text=Rafraichir +DataTableTopComponent.labelBanner.text=Donnιes mises ΰ jour. Souhaitez-vous rι-actualiser le tableau ? +DataTableTopComponent.boxGlue.text= +DataTableTopComponent.filterTextField.text= +DataTableTopComponent.filterTextField.toolTipText=Usage des expressions rationnelles autorisι +DataTableTopComponent.attributeColumnsPanel.title=Colonnes d'attribut +DataTableTopComponent.RichToolTip.title.text=Description +DataTableTopComponent.addColumnButton.text=Ajouter une colonne +DataTableTopComponent.mergeColumnsButton.text=Fusionner les colonnes +DataTableTopComponent.dialogs.okButton.text=OK +DataTableTopComponent.general.actions.plugins.button.text=Plus +DataTableTopComponent.general.actions.plugins.group.name=Groupe {0} + +OpenIDE-Module-Short-Description=Tableau du laboratoire de donnιes +SettingsPanel.title={0} - Paramθtres + + +ConfigurationPanel.title=Configuration +ConfigurationPanel.onlyVisibleCheckBox.text=Graphe visible uniquement +ConfigurationPanel.useSparklinesCheckBox.text=Voir les listes de nombres et les nombres dynamiques avec des sparklines. +ConfigurationPanel.showEdgesNodesLabelsCheckBox.text=Afficher les labels des noeuds sources et destinations +DataTableTopComponent.configurationButton.text=Configuration +ConfigurationPanel.timeIntervalsGraphicsCheckBox.text=Afficher les graphiques des intervalles temporels +DataTableTopComponent.availableColumnsButton.text= +DataTableTopComponent.availableColumnsButton.toolTipText=Configurer les colonnes disponibles +AvailableColumnsPanel.title=Paramθtres des colonnes disponibles +AvailableColumnsPanel.descriptionLabel.text=Choisir les colonnes disponibles : +AvailableColumnsPanel.maximum-available-columns.info=Nombre maximum de colonnes atteint + +ConfigurationPanel.timeFormatLabel.text=Format de date +ConfigurationPanel.timeZoneLabel.text=Fuseau horaire diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_he.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_he.properties new file mode 100644 index 0000000000..ad977560bb --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_he.properties @@ -0,0 +1,39 @@ +OpenIDE-Module-Long-Description=Data Laboratory Table component and edit panels +CTL_DataTableAction=Data Table +CTL_DataTableTopComponent=Data Table +!HINT_DataTableTopComponent= + +DataTableTopComponent.tableScrollPane.busyMessage=Fetching data... +DataTableTopComponent.tableScrollPane.error=An error occured while feching data... +DataTableTopComponent.labelFilter.text=Filter: +DataTableTopComponent.edgesButton.text=Edges +DataTableTopComponent.nodesButton.text=Nodes +DataTableTopComponent.refreshButton.text=Refresh +DataTableTopComponent.labelBanner.text=Data updated. Do you want to refresh the table? +DataTableTopComponent.boxGlue.text= +DataTableTopComponent.filterTextField.text= +DataTableTopComponent.filterTextField.toolTipText=Regular expression is permitted +DataTableTopComponent.attributeColumnsPanel.title=Attribute columns +DataTableTopComponent.RichToolTip.title.text=Description +DataTableTopComponent.addColumnButton.text=Add column +DataTableTopComponent.mergeColumnsButton.text=Merge columns +DataTableTopComponent.dialogs.okButton.text=OK +DataTableTopComponent.general.actions.plugins.button.text=More actions +DataTableTopComponent.general.actions.plugins.group.name=Group {0} +OpenIDE-Module-Short-Description=Data Laboratory Table component and edit panels +SettingsPanel.title={0} settings + + +ConfigurationPanel.title=Configuration +ConfigurationPanel.onlyVisibleCheckBox.text=Visible graph only +ConfigurationPanel.useSparklinesCheckBox.text=Sparklines replaces number lists and dynamic numbers +ConfigurationPanel.showEdgesNodesLabelsCheckBox.text=Show label of source and target nodes +DataTableTopComponent.configurationButton.text=Configuration +ConfigurationPanel.timeIntervalsGraphicsCheckBox.text=Time intervals as graphics +DataTableTopComponent.availableColumnsButton.text= +DataTableTopComponent.availableColumnsButton.toolTipText=Configure displayed columns +AvailableColumnsPanel.title=Display settings +AvailableColumnsPanel.descriptionLabel.text=Choose the columns to display: +AvailableColumnsPanel.maximum-available-columns.info=Maximum number of columns reached +ConfigurationPanel.timeFormatLabel.text=Time format +ConfigurationPanel.timeZoneLabel.text=Time zone diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_hu.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_hu.properties new file mode 100644 index 0000000000..0920ed9f80 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_hu.properties @@ -0,0 +1,36 @@ + + +DataTableTopComponent.general.actions.plugins.button.text=Tov\u00E1bbi m\u0171veletek +ConfigurationPanel.showEdgesNodesLabelsCheckBox.text=Forr\u00E1s- \u00E9s c\u00E9lcsom\u00F3pontok c\u00EDmk\u00E9j\u00E9nek megjelen\u00EDt\u00E9se +DataTableTopComponent.addColumnButton.text=Oszlop hozz\u00E1ad\u00E1sa +DataTableTopComponent.labelFilter.text=Sz\u0171r\u0151: +DataTableTopComponent.edgesButton.text=\u00C9lek +AvailableColumnsPanel.maximum-available-columns.info=El\u00E9rte az oszlopok maxim\u00E1lis sz\u00E1m\u00E1t +ConfigurationPanel.onlyVisibleCheckBox.text=Csak l\u00E1that\u00F3 grafikon +DataTableTopComponent.filterTextField.toolTipText=A regul\u00E1ris kifejez\u00E9s megengedett +DataTableTopComponent.configurationButton.text=Konfigur\u00E1ci\u00F3 +ConfigurationPanel.timeFormatLabel.text=Id\u0151 form\u00E1tum +DataTableTopComponent.labelBanner.text=Adatok friss\u00EDtve. Szeretn\u00E9 felfriss\u00EDteni az t\u00E1bl\u00E1zatot? +DataTableTopComponent.refreshButton.text=Friss\u00EDt\u00E9s +DataTableTopComponent.RichToolTip.title.text=Le\u00EDr\u00E1s +ConfigurationPanel.useSparklinesCheckBox.text=A Sparklines helyettes\u00EDti a sz\u00E1mlist\u00E1kat \u00E9s a dinamikus sz\u00E1mokat +ConfigurationPanel.timeZoneLabel.text=Id\u0151z\u00F3na +CTL_DataTableAction=Adatt\u00E1bla +DataTableTopComponent.availableColumnsButton.toolTipText=Konfigur\u00E1lja a megjelen\u00EDtett oszlopokat +ConfigurationPanel.timeIntervalsGraphicsCheckBox.text=Id\u0151intervallumok grafikak\u00E9nt +DataTableTopComponent.dialogs.okButton.text=OK +SettingsPanel.title={0} be\u00E1ll\u00EDt\u00E1sai +DataTableTopComponent.tableScrollPane.error=Hiba t\u00F6rt\u00E9nt az adatok lek\u00E9r\u00E9se k\u00F6zben... +CTL_DataTableTopComponent=Adatt\u00E1bla +DataTableTopComponent.nodesButton.text=Csom\u00F3pontok +AvailableColumnsPanel.descriptionLabel.text=V\u00E1lassza ki a megjelen\u00EDteni k\u00EDv\u00E1nt oszlopokat: +OpenIDE-Module-Short-Description=Data Laboratory Table \u00F6sszetev\u0151 \u00E9s szerkeszt\u0151panelek +OpenIDE-Module-Long-Description=Data Laboratory Table \u00F6sszetev\u0151 \u00E9s szerkeszt\u0151panelek +AvailableColumnsPanel.title=Megjelen\u00EDt\u00E9si be\u00E1ll\u00EDt\u00E1sok + + +ConfigurationPanel.title=Konfigur\u00E1ci\u00F3 +DataTableTopComponent.tableScrollPane.busyMessage=Adatok bevitele... +DataTableTopComponent.attributeColumnsPanel.title=Attrib\u00FAtum oszlopok +DataTableTopComponent.general.actions.plugins.group.name=Csoport {0} +DataTableTopComponent.mergeColumnsButton.text=Oszlopok egyes\u00EDt\u00E9se diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_it.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_it.properties new file mode 100644 index 0000000000..ebc4b83e86 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_it.properties @@ -0,0 +1,39 @@ +OpenIDE-Module-Long-Description=Data Laboratory Table component and edit panels +CTL_DataTableAction=Data Table +CTL_DataTableTopComponent=Data Table +!HINT_DataTableTopComponent= + +DataTableTopComponent.tableScrollPane.busyMessage=Fetching data... +DataTableTopComponent.tableScrollPane.error=An error occured while feching data... +DataTableTopComponent.labelFilter.text=Filter: +DataTableTopComponent.edgesButton.text=Archi +DataTableTopComponent.nodesButton.text=Nodi +DataTableTopComponent.refreshButton.text=Aggiorna +DataTableTopComponent.labelBanner.text=Data updated. Do you want to refresh the table? +DataTableTopComponent.boxGlue.text= +DataTableTopComponent.filterTextField.text= +DataTableTopComponent.filterTextField.toolTipText=Regular expression is permitted +DataTableTopComponent.attributeColumnsPanel.title=Attribute columns +DataTableTopComponent.RichToolTip.title.text=Description +DataTableTopComponent.addColumnButton.text=Add column +DataTableTopComponent.mergeColumnsButton.text=Merge columns +DataTableTopComponent.dialogs.okButton.text=OK +DataTableTopComponent.general.actions.plugins.button.text=More actions +DataTableTopComponent.general.actions.plugins.group.name=Group {0} +OpenIDE-Module-Short-Description=Data Laboratory Table component and edit panels +SettingsPanel.title={0} impostazioni + + +ConfigurationPanel.title=Configuration +ConfigurationPanel.onlyVisibleCheckBox.text=Visible graph only +ConfigurationPanel.useSparklinesCheckBox.text=Sparklines replaces number lists and dynamic numbers +ConfigurationPanel.showEdgesNodesLabelsCheckBox.text=Show label of source and target nodes +DataTableTopComponent.configurationButton.text=Configuration +ConfigurationPanel.timeIntervalsGraphicsCheckBox.text=Time intervals as graphics +DataTableTopComponent.availableColumnsButton.text= +DataTableTopComponent.availableColumnsButton.toolTipText=Configure displayed columns +AvailableColumnsPanel.title=Display settings +AvailableColumnsPanel.descriptionLabel.text=Choose the columns to display: +AvailableColumnsPanel.maximum-available-columns.info=Maximum number of columns reached +ConfigurationPanel.timeFormatLabel.text=Time format +ConfigurationPanel.timeZoneLabel.text=Time zone diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_ja.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_ja.properties index 43b69c31b2..28f93232e7 100644 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_ja.properties +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_ja.properties @@ -1,87 +1,44 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:14+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u30c7\u30fc\u30bf\u5de5\u623f\u306e\u30c6\u30fc\u30d6\u30eb\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3068\u7de8\u96c6\u30d1\u30cd\u30eb - -CTL_DataTableAction=\u30c7\u30fc\u30bf\u30fb\u30c6\u30fc\u30d6\u30eb - -CTL_DataTableTopComponent=\u30c7\u30fc\u30bf\u30fb\u30c6\u30fc\u30d6\u30eb - -DataTableTopComponent.tableScrollPane.busyMessage=\u30c7\u30fc\u30bf\u306e\u53d6\u5f97... - -DataTableTopComponent.tableScrollPane.error=\u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f... - -DataTableTopComponent.labelFilter.text=\u30d5\u30a3\u30eb\u30bf\: - -DataTableTopComponent.edgesButton.text=\u8fba - -DataTableTopComponent.nodesButton.text=\u30ce\u30fc\u30c9 - -DataTableTopComponent.refreshButton.text=\u30ea\u30d5\u30ec\u30c3\u30b7\u30e5 - -DataTableTopComponent.labelBanner.text=\u30c7\u30fc\u30bf\u3092\u66f4\u65b0\u3057\u307e\u3057\u305f\u3002\u30c6\u30fc\u30d6\u30eb\u3092\u66f4\u65b0\u3057\u307e\u3059\u304b\uff1f - -DataTableTopComponent.filterTextField.toolTipText=\u6b63\u898f\u8868\u73fe\u304c\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u3059 - -DataTableTopComponent.attributeColumnsPanel.title=\u5c5e\u6027\u5217 - -DataTableTopComponent.RichToolTip.title.text=\u8aac\u660e - -DataTableTopComponent.addColumnButton.text=\u5217\u3092\u8ffd\u52a0 - -DataTableTopComponent.mergeColumnsButton.text=\u5217\u3092\u7d71\u5408 - -DataTableTopComponent.dialogs.okButton.text=OK - -DataTableTopComponent.general.actions.plugins.button.text=\u4f5c\u696d\u3092\u7d99\u7d9a - -DataTableTopComponent.general.actions.plugins.group.name=\u30b0\u30eb\u30fc\u30d7{0} - -OpenIDE-Module-Short-Description=\u30c7\u30fc\u30bf\u30e9\u30dc\u30e9\u30c8\u30ea\u30fc\u306e\u30c6\u30fc\u30d6\u30eb\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3068\u7de8\u96c6\u30d1\u30cd\u30eb - -SettingsPanel.title={0}\u8a2d\u5b9a - -EdgeDataTable.source.column.text=\u30bd\u30fc\u30b9 - -EdgeDataTable.target.column.text=\u30bf\u30fc\u30b2\u30c3\u30c8 - -EdgeDataTable.type.column.text=\u30bf\u30a4\u30d7 - -EdgeDataTable.type.column.directed=\u6709\u5411 - -EdgeDataTable.type.column.undirected=\u7121\u5411 - -ConfigurationPanel.title=\u69cb\u6210 - -ConfigurationPanel.onlyVisibleCheckBox.text=\u53ef\u8996\u30b0\u30e9\u30d5\u306e\u307f - -ConfigurationPanel.useSparklinesCheckBox.text=\u30b9\u30d1\u30fc\u30af\u30e9\u30a4\u30f3\u306f\u3001\u6570\u5b57\u30ea\u30b9\u30c8\u304a\u3088\u3073\u52d5\u7684\u306a\u6570\u5b57\u3092\u7f6e\u63db\u3057\u307e\u3059 - -ConfigurationPanel.showEdgesNodesLabelsCheckBox.text=\u30bd\u30fc\u30b9\u3068\u30bf\u30fc\u30b2\u30c3\u30c8\u30ce\u30fc\u30c9\u306e\u30e9\u30d9\u30eb\u3092\u8868\u793a - -DataTableTopComponent.configurationButton.text=\u8a2d\u5b9a - -ConfigurationPanel.timeIntervalsGraphicsCheckBox.text=\u30b0\u30e9\u30d5\u30a3\u30c3\u30af\u30b9\u3068\u3057\u3066\u306e\u6642\u9593\u9593\u9694 - -DataTableTopComponent.availableColumnsButton.toolTipText=\u8868\u793a\u3055\u308c\u308b\u5217\u3092\u69cb\u6210 - -AvailableColumnsPanel.title=\u30c7\u30a3\u30b9\u30d7\u30ec\u30a4\u306e\u8a2d\u5b9a - -AvailableColumnsPanel.descriptionLabel.text=\u8868\u793a\u3059\u308b\u5217\u3092\u9078\u629e\: - -AvailableColumnsPanel.maximum-available-columns.info=\u5217\u306e\u6700\u5927\u6570\u306b\u9054\u3057\u307e\u3057\u305f\u3002 - -ConfigurationPanel.timeIntervalsAsDates.text=\u65e5\u4ed8\u3068\u3057\u3066\u306e\u6642\u9593\u9593\u9694 - -!TableCSVExporter.dialog.success= - -!TableCSVExporter.dialog.error= - -!TableCSVExporter.dialog.error.title= - -!TableCSVExporter.filechooser.csvDescription= +OpenIDE-Module-Long-Description=\u30c7\u30fc\u30bf\u5de5\u623f\u306e\u30c6\u30fc\u30d6\u30eb\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3068\u7de8\u96c6\u30d1\u30cd\u30eb + +CTL_DataTableAction=\u30c7\u30fc\u30bf\u30fb\u30c6\u30fc\u30d6\u30eb +CTL_DataTableTopComponent=\u30c7\u30fc\u30bf\u30fb\u30c6\u30fc\u30d6\u30eb +!HINT_DataTableTopComponent= + +DataTableTopComponent.tableScrollPane.busyMessage = \u30c7\u30fc\u30bf\u306e\u53d6\u5f97... +DataTableTopComponent.tableScrollPane.error = \u30c7\u30fc\u30bf\u3092\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u304c\u767a\u751f\u3057\u307e\u3057\u305f... +DataTableTopComponent.labelFilter.text=\u30d5\u30a3\u30eb\u30bf: +DataTableTopComponent.edgesButton.text=\u8fba +DataTableTopComponent.nodesButton.text=\u30ce\u30fc\u30c9 +DataTableTopComponent.refreshButton.text=\u30ea\u30d5\u30ec\u30c3\u30b7\u30e5 +DataTableTopComponent.labelBanner.text=\u30c7\u30fc\u30bf\u3092\u66f4\u65b0\u3057\u307e\u3057\u305f\u3002\u30c6\u30fc\u30d6\u30eb\u3092\u66f4\u65b0\u3057\u307e\u3059\u304b\uff1f +DataTableTopComponent.boxGlue.text= +DataTableTopComponent.filterTextField.text= +DataTableTopComponent.filterTextField.toolTipText=\u6b63\u898f\u8868\u73fe\u304c\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u3059 +DataTableTopComponent.attributeColumnsPanel.title=\u5c5e\u6027\u5217 +DataTableTopComponent.RichToolTip.title.text=\u8aac\u660e +DataTableTopComponent.addColumnButton.text=\u5217\u3092\u8ffd\u52a0 +DataTableTopComponent.mergeColumnsButton.text=\u5217\u3092\u7d71\u5408 +DataTableTopComponent.dialogs.okButton.text=OK +DataTableTopComponent.general.actions.plugins.button.text=\u4f5c\u696d\u3092\u7d99\u7d9a +DataTableTopComponent.general.actions.plugins.group.name=\u30b0\u30eb\u30fc\u30d7{0} + +OpenIDE-Module-Short-Description=\u30c7\u30fc\u30bf\u30e9\u30dc\u30e9\u30c8\u30ea\u30fc\u306e\u30c6\u30fc\u30d6\u30eb\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3068\u7de8\u96c6\u30d1\u30cd\u30eb +SettingsPanel.title={0}\u8a2d\u5b9a + + +ConfigurationPanel.title=\u69cb\u6210 +ConfigurationPanel.onlyVisibleCheckBox.text=\u53ef\u8996\u30b0\u30e9\u30d5\u306e\u307f +ConfigurationPanel.useSparklinesCheckBox.text=\u30b9\u30d1\u30fc\u30af\u30e9\u30a4\u30f3\u306f\u3001\u6570\u5b57\u30ea\u30b9\u30c8\u304a\u3088\u3073\u52d5\u7684\u306a\u6570\u5b57\u3092\u7f6e\u63db\u3057\u307e\u3059 +ConfigurationPanel.showEdgesNodesLabelsCheckBox.text=\u30bd\u30fc\u30b9\u3068\u30bf\u30fc\u30b2\u30c3\u30c8\u30ce\u30fc\u30c9\u306e\u30e9\u30d9\u30eb\u3092\u8868\u793a +DataTableTopComponent.configurationButton.text=\u8a2d\u5b9a +ConfigurationPanel.timeIntervalsGraphicsCheckBox.text=\u30b0\u30e9\u30d5\u30a3\u30c3\u30af\u30b9\u3068\u3057\u3066\u306e\u6642\u9593\u9593\u9694 +DataTableTopComponent.availableColumnsButton.text= +DataTableTopComponent.availableColumnsButton.toolTipText=\u8868\u793a\u3055\u308c\u308b\u5217\u3092\u69cb\u6210 +AvailableColumnsPanel.title=\u30c7\u30a3\u30b9\u30d7\u30ec\u30a4\u306e\u8a2d\u5b9a +AvailableColumnsPanel.descriptionLabel.text=\u8868\u793a\u3059\u308b\u5217\u3092\u9078\u629e: +AvailableColumnsPanel.maximum-available-columns.info=\u5217\u306e\u6700\u5927\u6570\u306b\u9054\u3057\u307e\u3057\u305f\u3002 + +# ConfigurationPanel.timeFormatLabel.text=Time format +# ConfigurationPanel.timeZoneLabel.text=Time zone +# ConfigurationPanel.timeRepresentationLabel.text=Time representation +# ConfigurationPanel.timeRepresentation.disabled.tooltip=Time representation can only be changed when the graph is empty diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_ko.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_ko.properties new file mode 100644 index 0000000000..8b9c596f79 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_ko.properties @@ -0,0 +1,36 @@ + + +DataTableTopComponent.general.actions.plugins.button.text=\uCD94\uAC00 \uC791\uC5C5 +ConfigurationPanel.showEdgesNodesLabelsCheckBox.text=\uC18C\uC2A4 \uBC0F \uD0C0\uAC9F \uB178\uB4DC\uC758 \uB77C\uBCA8 \uBCF4\uC774\uAE30 +DataTableTopComponent.addColumnButton.text=\uC5F4 \uCD94\uAC00 +DataTableTopComponent.labelFilter.text=\uD544\uD130: +DataTableTopComponent.edgesButton.text=\uC5E3\uC9C0 +AvailableColumnsPanel.maximum-available-columns.info=\uB3C4\uB2EC\uD55C \uCD5C\uB300 \uC5F4 \uC218 +ConfigurationPanel.onlyVisibleCheckBox.text=\uD45C\uC2DC \uADF8\uB798\uD504\uB9CC +DataTableTopComponent.filterTextField.toolTipText=\uC815\uADDC\uC2DD\uC774 \uD5C8\uC6A9\uB429\uB2C8\uB2E4 +DataTableTopComponent.configurationButton.text=\uAD6C\uC131 +ConfigurationPanel.timeFormatLabel.text=\uC2DC\uAC04 \uD3EC\uB9F7 +DataTableTopComponent.labelBanner.text=\uB370\uC774\uD130\uAC00 \uC5C5\uB370\uC774\uD2B8\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uD14C\uC774\uBE14\uC744 \uC0C8\uB85C \uACE0\uCE58\uC2DC\uACA0\uC2B5\uB2C8\uAE4C? +DataTableTopComponent.refreshButton.text=\uC0C8\uB85C \uACE0\uCE68 +DataTableTopComponent.RichToolTip.title.text=\uC124\uBA85 +ConfigurationPanel.useSparklinesCheckBox.text=\uC2A4\uD30C\uD06C\uB77C\uC778\uC740 \uC22B\uC790 \uBAA9\uB85D\uACFC \uB3D9\uC801\uC778 \uC22B\uC790\uB97C \uB300\uCCB4\uD569\uB2C8\uB2E4 +ConfigurationPanel.timeZoneLabel.text=\uC2DC\uAC04\uB300 +CTL_DataTableAction=\uB370\uC774\uD130 \uD14C\uC774\uBE14 +DataTableTopComponent.availableColumnsButton.toolTipText=\uD45C\uC2DC\uB41C \uC5F4 \uAD6C\uC131 +ConfigurationPanel.timeIntervalsGraphicsCheckBox.text=\uADF8\uB798\uD504\uB85C \uD45C\uC2DC\uB41C \uC2DC\uAC04 \uAC04\uACA9 +DataTableTopComponent.dialogs.okButton.text=OK +SettingsPanel.title={0} \uC124\uC815 +DataTableTopComponent.tableScrollPane.error=\uB370\uC774\uD130\uB97C \uAC00\uC838 \uC624\uB294 \uB3D9\uC548 \uC624\uB958 \uBC1C\uC0DD... +CTL_DataTableTopComponent=\uB370\uC774\uD130 \uD14C\uC774\uBE14 +DataTableTopComponent.nodesButton.text=\uB178\uB4DC +AvailableColumnsPanel.descriptionLabel.text=\uD45C\uC2DC\uD560 \uC5F4 \uC120\uD0DD: +OpenIDE-Module-Short-Description=\uB370\uC774\uD130 \uC2E4\uD5D8\uC2E4 \uD14C\uC774\uBE14 \uAD6C\uC131 \uC694\uC18C \uBC0F \uD3B8\uC9D1 \uD328\uB110 +OpenIDE-Module-Long-Description=\uB370\uC774\uD130 \uC2E4\uD5D8\uC2E4 \uD14C\uC774\uBE14 \uAD6C\uC131 \uC694\uC18C \uBC0F \uD3B8\uC9D1 \uD328\uB110 +AvailableColumnsPanel.title=\uD45C\uC2DC \uC124\uC815 + + +ConfigurationPanel.title=\uAD6C\uC131 +DataTableTopComponent.tableScrollPane.busyMessage=\uB370\uC774\uD130\uB97C \uAC00\uC838 \uC624\uB294 \uC911... +DataTableTopComponent.attributeColumnsPanel.title=\uC18D\uC131 \uC5F4 +DataTableTopComponent.general.actions.plugins.group.name={0} \uADF8\uB8F9 +DataTableTopComponent.mergeColumnsButton.text=\uC5F4 \uBCD1\uD569 diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_nl.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_nl.properties new file mode 100644 index 0000000000..6a7ed819b7 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_nl.properties @@ -0,0 +1,39 @@ +OpenIDE-Module-Long-Description=Data Laboratory Table component and edit panels +CTL_DataTableAction=Gegevenstabel +CTL_DataTableTopComponent=Gegevenstabel +!HINT_DataTableTopComponent= + +DataTableTopComponent.tableScrollPane.busyMessage=Gegevens ophalen... +DataTableTopComponent.tableScrollPane.error=Er is een fout opgetreden bij het ophalen van de gegevens... +DataTableTopComponent.labelFilter.text=Filter: +DataTableTopComponent.edgesButton.text=Verbindingen +DataTableTopComponent.nodesButton.text=Knopen +DataTableTopComponent.refreshButton.text=Vernieuwen +DataTableTopComponent.labelBanner.text=Gegevens bijgewerkt. Wil je de tabel vernieuwen? +DataTableTopComponent.boxGlue.text= +DataTableTopComponent.filterTextField.text= +DataTableTopComponent.filterTextField.toolTipText=Regular expression is permitted +DataTableTopComponent.attributeColumnsPanel.title=Attribuutkolommen +DataTableTopComponent.RichToolTip.title.text=Beschrijving +DataTableTopComponent.addColumnButton.text=Kolom toevoegen +DataTableTopComponent.mergeColumnsButton.text=Kolommen samenvoegen +DataTableTopComponent.dialogs.okButton.text=OK +DataTableTopComponent.general.actions.plugins.button.text=More actions +DataTableTopComponent.general.actions.plugins.group.name=Groep {0} +OpenIDE-Module-Short-Description=Data Laboratory Table component and edit panels +SettingsPanel.title={0} settings + + +ConfigurationPanel.title=Configuratie +ConfigurationPanel.onlyVisibleCheckBox.text=Alleen zichtbare graaf +ConfigurationPanel.useSparklinesCheckBox.text=Sparklines replaces number lists and dynamic numbers +ConfigurationPanel.showEdgesNodesLabelsCheckBox.text=Label van bron- en doelknopen tonen +DataTableTopComponent.configurationButton.text=Configuratie +ConfigurationPanel.timeIntervalsGraphicsCheckBox.text=Time intervals as graphics +DataTableTopComponent.availableColumnsButton.text= +DataTableTopComponent.availableColumnsButton.toolTipText=Weergegeven kolommen configureren +AvailableColumnsPanel.title=Display settings +AvailableColumnsPanel.descriptionLabel.text=Choose the columns to display: +AvailableColumnsPanel.maximum-available-columns.info=Maximum number of columns reached +ConfigurationPanel.timeFormatLabel.text=Time format +ConfigurationPanel.timeZoneLabel.text=Tijdzone diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_pt_BR.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_pt_BR.properties index 07b74bef6b..e09e1404b1 100644 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_pt_BR.properties +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_pt_BR.properties @@ -1,87 +1,42 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:14+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Tabela do Laborat\u00f3rio de Dados e pain\u00e9is de edi\u00e7\u00e3o - -CTL_DataTableAction=Tabela de dados - -CTL_DataTableTopComponent=Tabela de dados - -DataTableTopComponent.tableScrollPane.busyMessage=Buscando dados... - -DataTableTopComponent.tableScrollPane.error=Ocorreu um erro durante a busca de dados... - -DataTableTopComponent.labelFilter.text=Filtro\: - -DataTableTopComponent.edgesButton.text=Arestas - -DataTableTopComponent.nodesButton.text=N\u00f3s - -DataTableTopComponent.refreshButton.text=Atualizar - -DataTableTopComponent.labelBanner.text=Dados atualizados. Deseja atualizar a tabela? - -DataTableTopComponent.filterTextField.toolTipText=S\u00e3o permitidas express\u00f5es regulares - -DataTableTopComponent.attributeColumnsPanel.title=Colunas de atributo - -DataTableTopComponent.RichToolTip.title.text=Descri\u00e7\u00e3o - -DataTableTopComponent.addColumnButton.text=Adicionar coluna - -DataTableTopComponent.mergeColumnsButton.text=Mesclar colunas - -DataTableTopComponent.dialogs.okButton.text=OK - -DataTableTopComponent.general.actions.plugins.button.text=Mais a\u00e7\u00f5es - -DataTableTopComponent.general.actions.plugins.group.name=Grupo {0} - -OpenIDE-Module-Short-Description=Tabela do Laborat\u00f3rio de Dados e pain\u00e9is de edi\u00e7\u00e3o - -SettingsPanel.title={0} configura\u00e7\u00f5es - -EdgeDataTable.source.column.text=Origem - -EdgeDataTable.target.column.text=Destino - -EdgeDataTable.type.column.text=Tipo - -EdgeDataTable.type.column.directed=Dirigido - -EdgeDataTable.type.column.undirected=N\u00e3o dirigido - -ConfigurationPanel.title=Configura\u00e7\u00e3o - -ConfigurationPanel.onlyVisibleCheckBox.text=Apenas grafo vis\u00edvel - -ConfigurationPanel.useSparklinesCheckBox.text=Mostrar listas de n\u00fameros e n\u00fameros din\u00e2micos como sparklines - -ConfigurationPanel.showEdgesNodesLabelsCheckBox.text=Mostrar r\u00f3tulos de n\u00f3s de origem e destino - -DataTableTopComponent.configurationButton.text=Configura\u00e7\u00e3o - -ConfigurationPanel.timeIntervalsGraphicsCheckBox.text=Intervalos de tempo como gr\u00e1ficos - -DataTableTopComponent.availableColumnsButton.toolTipText=Configurar colunas exibidas - -AvailableColumnsPanel.title=Configura\u00e7\u00f5es de exibi\u00e7\u00e3o - -AvailableColumnsPanel.descriptionLabel.text=Escolha as colunas para exibir\: - -AvailableColumnsPanel.maximum-available-columns.info=N\u00famero m\u00e1ximo de colunas dispon\u00edveis alcan\u00e7ado - -ConfigurationPanel.timeIntervalsAsDates.text=Intervalos de tempo como datas - -!TableCSVExporter.dialog.success= - -!TableCSVExporter.dialog.error= - -!TableCSVExporter.dialog.error.title= - -!TableCSVExporter.filechooser.csvDescription= +OpenIDE-Module-Long-Description=Tabela do Laboratσrio de Dados e painιis de ediηγo + +CTL_DataTableAction=Tabela de dados +CTL_DataTableTopComponent=Tabela de dados +!HINT_DataTableTopComponent= + +DataTableTopComponent.tableScrollPane.busyMessage = Buscando dados... +DataTableTopComponent.tableScrollPane.error = Ocorreu um erro durante a busca de dados... +DataTableTopComponent.labelFilter.text=Filtro: +DataTableTopComponent.edgesButton.text=Arestas +DataTableTopComponent.nodesButton.text=Nσs +DataTableTopComponent.refreshButton.text=Atualizar +DataTableTopComponent.labelBanner.text=Dados atualizados. Deseja atualizar a tabela? +DataTableTopComponent.boxGlue.text= +DataTableTopComponent.filterTextField.text= +DataTableTopComponent.filterTextField.toolTipText=Sγo permitidas expressυes regulares +DataTableTopComponent.attributeColumnsPanel.title=Colunas de atributo +DataTableTopComponent.RichToolTip.title.text=Descriηγo +DataTableTopComponent.addColumnButton.text=Adicionar coluna +DataTableTopComponent.mergeColumnsButton.text=Mesclar colunas +DataTableTopComponent.dialogs.okButton.text=OK +DataTableTopComponent.general.actions.plugins.button.text=Mais aηυes +DataTableTopComponent.general.actions.plugins.group.name=Grupo {0} + +OpenIDE-Module-Short-Description=Tabela do Laboratσrio de Dados e painιis de ediηγo +SettingsPanel.title={0} configuraηυes + + +ConfigurationPanel.title=Configuraηγo +ConfigurationPanel.onlyVisibleCheckBox.text=Apenas grafo visνvel +ConfigurationPanel.useSparklinesCheckBox.text=Mostrar listas de nϊmeros e nϊmeros dinβmicos como sparklines +ConfigurationPanel.showEdgesNodesLabelsCheckBox.text=Mostrar rσtulos de nσs de origem e destino +DataTableTopComponent.configurationButton.text=Configuraηγo +ConfigurationPanel.timeIntervalsGraphicsCheckBox.text=Intervalos de tempo como grαficos +DataTableTopComponent.availableColumnsButton.text= +DataTableTopComponent.availableColumnsButton.toolTipText=Configurar colunas exibidas +AvailableColumnsPanel.title=Configuraηυes de exibiηγo +AvailableColumnsPanel.descriptionLabel.text=Escolha as colunas para exibir: +AvailableColumnsPanel.maximum-available-columns.info=Nϊmero mαximo de colunas disponνveis alcanηado + +ConfigurationPanel.timeFormatLabel.text=Formato de data/hora +ConfigurationPanel.timeZoneLabel.text=Fuso horαrio diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_ro.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_ro.properties new file mode 100644 index 0000000000..098d5a3188 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_ro.properties @@ -0,0 +1,36 @@ + + +DataTableTopComponent.mergeColumnsButton.text=\u00CEmbin\u0103 coloane +CTL_DataTableAction=Tabel de date +SettingsPanel.title={0} set\u0103ri +CTL_DataTableTopComponent=Tabel de date +DataTableTopComponent.RichToolTip.title.text=Descriere +DataTableTopComponent.addColumnButton.text=Adaug\u0103 coloan\u0103 +DataTableTopComponent.dialogs.okButton.text=OK +ConfigurationPanel.onlyVisibleCheckBox.text=Doar graful vizibil +OpenIDE-Module-Long-Description=Componenta de tabele din laboratorul de date \u0219i panourile de editare +DataTableTopComponent.refreshButton.text=Re\u00EEmprosp\u0103tare +DataTableTopComponent.tableScrollPane.busyMessage=Preluarea datelor... +DataTableTopComponent.labelFilter.text=Filtru: +DataTableTopComponent.tableScrollPane.error=A ap\u0103rut o eroare la preluarea datelor... +DataTableTopComponent.edgesButton.text=Muchii +DataTableTopComponent.nodesButton.text=Noduri +DataTableTopComponent.labelBanner.text=Date actualizate. Vrei s\u0103 re\u00EEmprosp\u0103tezi tabelul? +DataTableTopComponent.filterTextField.toolTipText=Sunt permise expresiile regulate +DataTableTopComponent.attributeColumnsPanel.title=Coloane de atribute +AvailableColumnsPanel.maximum-available-columns.info=Num\u0103r maxim de coloane atins +ConfigurationPanel.timeFormatLabel.text=Format de timp +DataTableTopComponent.configurationButton.text=Configurare +DataTableTopComponent.availableColumnsButton.toolTipText=Configureaz\u0103 coloanele afi\u0219ate +DataTableTopComponent.general.actions.plugins.button.text=Mai multe ac\u021Biuni +DataTableTopComponent.general.actions.plugins.group.name=Grupeaz\u0103 {0} +OpenIDE-Module-Short-Description=Componenta de tabele din laboratorul de date \u0219i panourile de editare + + +ConfigurationPanel.title=Configurare +ConfigurationPanel.useSparklinesCheckBox.text=Diagramele Sparkline \u00EEnlocuiesc listele de numere \u0219i numerele dinamice +ConfigurationPanel.showEdgesNodesLabelsCheckBox.text=Afi\u0219eaz\u0103 etichetele nodurilor surs\u0103 \u0219i tint\u0103 +ConfigurationPanel.timeIntervalsGraphicsCheckBox.text=Intervale de timp sub form\u0103 de grafice +AvailableColumnsPanel.title=Set\u0103ri de afi\u0219are +AvailableColumnsPanel.descriptionLabel.text=Alege coloanele de afi\u0219at: +ConfigurationPanel.timeZoneLabel.text=Fus orar diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_ru.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_ru.properties index 1e993a171d..edd53cfeb2 100644 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_ru.properties +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_ru.properties @@ -1,88 +1,44 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -# FIRST AUTHOR , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:14+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u041b\u0430\u0431\u0430\u0440\u0430\u0442\u043e\u0440\u0438\u0438 \u0414\u0430\u043d\u043d\u044b\u0445 \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043d\u0435\u043b\u0435\u0439 - -CTL_DataTableAction=\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0414\u0430\u043d\u043d\u044b\u0445 - -CTL_DataTableTopComponent=\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0414\u0430\u043d\u043d\u044b\u0445 - -DataTableTopComponent.tableScrollPane.busyMessage=\u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445... - -DataTableTopComponent.tableScrollPane.error=\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430... - -DataTableTopComponent.labelFilter.text=\u0424\u0438\u043b\u044c\u0442\u0440\: - -DataTableTopComponent.edgesButton.text=\u0420\u0451\u0431\u0440\u0430 - -DataTableTopComponent.nodesButton.text=\u0423\u0437\u043b\u044b - -DataTableTopComponent.refreshButton.text=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c - -DataTableTopComponent.labelBanner.text=\u0414\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u044b. \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443? - -DataTableTopComponent.filterTextField.toolTipText=\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u044b - -DataTableTopComponent.attributeColumnsPanel.title=\u0421\u0442\u043e\u043b\u0431\u0446\u044b \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 - -DataTableTopComponent.RichToolTip.title.text=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 - -DataTableTopComponent.addColumnButton.text=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 - -DataTableTopComponent.mergeColumnsButton.text=\u041e\u0431\u044a\u0435\u0434\u0435\u043d\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0446\u044b - -DataTableTopComponent.dialogs.okButton.text=\u041e\u041a - -DataTableTopComponent.general.actions.plugins.button.text=\u0414\u0440\u0443\u0433\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f - -DataTableTopComponent.general.actions.plugins.group.name=\u0413\u0440\u0443\u043f\u043f\u0430 {0} - -OpenIDE-Module-Short-Description=\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u041b\u0430\u0431\u0430\u0440\u0430\u0442\u043e\u0440\u0438\u0438 \u0414\u0430\u043d\u043d\u044b\u0445 \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043d\u0435\u043b\u0435\u0439 - -SettingsPanel.title={0} \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 - -EdgeDataTable.source.column.text=\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a - -EdgeDataTable.target.column.text=\u041f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c - -EdgeDataTable.type.column.text=\u0422\u0438\u043f - -EdgeDataTable.type.column.directed=\u041e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 - -EdgeDataTable.type.column.undirected=\u041d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 - -ConfigurationPanel.title=\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f - -ConfigurationPanel.onlyVisibleCheckBox.text=\u0422\u043e\u043b\u044c\u043a\u043e \u0432\u0438\u0434\u0438\u043c\u044b\u0439 \u0433\u0440\u0430\u0444 - -ConfigurationPanel.useSparklinesCheckBox.text=\u0421\u043f\u0430\u0440\u043a\u043b\u0430\u0439\u043d\u044b \u0437\u0430\u043c\u0435\u043d\u044f\u044e\u0442 \u043b\u0438\u0441\u0442\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f - -ConfigurationPanel.showEdgesNodesLabelsCheckBox.text=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0445 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 - -DataTableTopComponent.configurationButton.text=\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f - -ConfigurationPanel.timeIntervalsGraphicsCheckBox.text=\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b \u0432 \u0432\u0438\u0434\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 - -DataTableTopComponent.availableColumnsButton.toolTipText=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 - -AvailableColumnsPanel.title=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 - -AvailableColumnsPanel.descriptionLabel.text=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f - -AvailableColumnsPanel.maximum-available-columns.info=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442\u043e - -ConfigurationPanel.timeIntervalsAsDates.text=\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b - -!TableCSVExporter.dialog.success= - -!TableCSVExporter.dialog.error= - -!TableCSVExporter.dialog.error.title= - -!TableCSVExporter.filechooser.csvDescription= +OpenIDE-Module-Long-Description=\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u041b\u0430\u0431\u0430\u0440\u0430\u0442\u043e\u0440\u0438\u0438 \u0414\u0430\u043d\u043d\u044b\u0445 \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043d\u0435\u043b\u0435\u0439 + +CTL_DataTableAction=\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0414\u0430\u043d\u043d\u044b\u0445 +CTL_DataTableTopComponent=\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0414\u0430\u043d\u043d\u044b\u0445 +!HINT_DataTableTopComponent= + +DataTableTopComponent.tableScrollPane.busyMessage = \u0418\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445... +DataTableTopComponent.tableScrollPane.error = \u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u0437\u0432\u043b\u0435\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430... +DataTableTopComponent.labelFilter.text=\u0424\u0438\u043b\u044c\u0442\u0440: +DataTableTopComponent.edgesButton.text=\u0420\u0451\u0431\u0440\u0430 +DataTableTopComponent.nodesButton.text=\u0423\u0437\u043b\u044b +DataTableTopComponent.refreshButton.text=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c +DataTableTopComponent.labelBanner.text=\u0414\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u044b. \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u0430\u0431\u043b\u0438\u0446\u0443? +DataTableTopComponent.boxGlue.text= +DataTableTopComponent.filterTextField.text= +DataTableTopComponent.filterTextField.toolTipText=\u0420\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u0435 \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u044b +DataTableTopComponent.attributeColumnsPanel.title=\u0421\u0442\u043e\u043b\u0431\u0446\u044b \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 +DataTableTopComponent.RichToolTip.title.text=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 +DataTableTopComponent.addColumnButton.text=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 +DataTableTopComponent.mergeColumnsButton.text=\u041e\u0431\u044a\u0435\u0434\u0435\u043d\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0446\u044b +DataTableTopComponent.dialogs.okButton.text=\u041e\u041a +DataTableTopComponent.general.actions.plugins.button.text=\u0414\u0440\u0443\u0433\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f +DataTableTopComponent.general.actions.plugins.group.name=\u0413\u0440\u0443\u043f\u043f\u0430 {0} + +OpenIDE-Module-Short-Description=\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u041b\u0430\u0431\u0430\u0440\u0430\u0442\u043e\u0440\u0438\u0438 \u0414\u0430\u043d\u043d\u044b\u0445 \u0438 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043d\u0435\u043b\u0435\u0439 +SettingsPanel.title={0} \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 + + +ConfigurationPanel.title=\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f +ConfigurationPanel.onlyVisibleCheckBox.text=\u0422\u043e\u043b\u044c\u043a\u043e \u0432\u0438\u0434\u0438\u043c\u044b\u0439 \u0433\u0440\u0430\u0444 +ConfigurationPanel.useSparklinesCheckBox.text=\u0421\u043f\u0430\u0440\u043a\u043b\u0430\u0439\u043d\u044b \u0437\u0430\u043c\u0435\u043d\u044f\u044e\u0442 \u043b\u0438\u0441\u0442\u044b \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f +ConfigurationPanel.showEdgesNodesLabelsCheckBox.text=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0445 \u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 +DataTableTopComponent.configurationButton.text=\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f +ConfigurationPanel.timeIntervalsGraphicsCheckBox.text=\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u044b \u0432 \u0432\u0438\u0434\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432 +DataTableTopComponent.availableColumnsButton.text= +DataTableTopComponent.availableColumnsButton.toolTipText=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u044b\u0445 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 +AvailableColumnsPanel.title=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 +AvailableColumnsPanel.descriptionLabel.text=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f +AvailableColumnsPanel.maximum-available-columns.info=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u0434\u043e\u0441\u0442\u0438\u0433\u043d\u0443\u0442\u043e + +# ConfigurationPanel.timeFormatLabel.text=Time format +# ConfigurationPanel.timeZoneLabel.text=Time zone +# ConfigurationPanel.timeRepresentationLabel.text=Time representation +# ConfigurationPanel.timeRepresentation.disabled.tooltip=Time representation can only be changed when the graph is empty diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_th.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_tr.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_tr.properties new file mode 100644 index 0000000000..0383139ebe --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_tr.properties @@ -0,0 +1,39 @@ +OpenIDE-Module-Long-Description=Data Laboratory Table component and edit panels +CTL_DataTableAction=Data Table +CTL_DataTableTopComponent=Data Table +!HINT_DataTableTopComponent= + +DataTableTopComponent.tableScrollPane.busyMessage=Fetching data... +DataTableTopComponent.tableScrollPane.error=An error occured while feching data... +DataTableTopComponent.labelFilter.text=Filter: +DataTableTopComponent.edgesButton.text=Edges +DataTableTopComponent.nodesButton.text=Nodes +DataTableTopComponent.refreshButton.text=Refresh +DataTableTopComponent.labelBanner.text=Data updated. Do you want to refresh the table? +DataTableTopComponent.boxGlue.text= +DataTableTopComponent.filterTextField.text= +DataTableTopComponent.filterTextField.toolTipText=Regular expression is permitted +DataTableTopComponent.attributeColumnsPanel.title=Attribute columns +DataTableTopComponent.RichToolTip.title.text=Aη\u0131klama +DataTableTopComponent.addColumnButton.text=Add column +DataTableTopComponent.mergeColumnsButton.text=Merge columns +DataTableTopComponent.dialogs.okButton.text=OK +DataTableTopComponent.general.actions.plugins.button.text=More actions +DataTableTopComponent.general.actions.plugins.group.name=Group {0} +OpenIDE-Module-Short-Description=Data Laboratory Table component and edit panels +SettingsPanel.title={0} settings + + +ConfigurationPanel.title=Configuration +ConfigurationPanel.onlyVisibleCheckBox.text=Visible graph only +ConfigurationPanel.useSparklinesCheckBox.text=Sparklines replaces number lists and dynamic numbers +ConfigurationPanel.showEdgesNodesLabelsCheckBox.text=Show label of source and target nodes +DataTableTopComponent.configurationButton.text=Configuration +ConfigurationPanel.timeIntervalsGraphicsCheckBox.text=Time intervals as graphics +DataTableTopComponent.availableColumnsButton.text= +DataTableTopComponent.availableColumnsButton.toolTipText=Configure displayed columns +AvailableColumnsPanel.title=Display settings +AvailableColumnsPanel.descriptionLabel.text=Choose the columns to display: +AvailableColumnsPanel.maximum-available-columns.info=Maximum number of columns reached +ConfigurationPanel.timeFormatLabel.text=Time format +ConfigurationPanel.timeZoneLabel.text=Time zone diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_uk.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_uk.properties new file mode 100644 index 0000000000..1fd2706df4 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_uk.properties @@ -0,0 +1,35 @@ +AvailableColumnsPanel.descriptionLabel.text=\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044C \u0441\u0442\u043E\u0432\u043F\u0446\u0456 \u0434\u043B\u044F \u0432\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F: +DataTableTopComponent.availableColumnsButton.toolTipText=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u0442\u0438 \u0432\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0443\u0432\u0430\u043D\u0456 \u0441\u0442\u043E\u0432\u043F\u0446\u0456 +DataTableTopComponent.availableColumnsButton.text=\u0406 +DataTableTopComponent.labelFilter.text=\u0424\u0456\u043B\u044C\u0442\u0440: +OpenIDE-Module-Long-Description=\u041A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442 Data Laboratory Table \u0456 \u043F\u0430\u043D\u0435\u043B\u0456 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043D\u043D\u044F +CTL_DataTableAction=\u0422\u0430\u0431\u043B\u0438\u0446\u044F \u0434\u0430\u043D\u0438\u0445 +CTL_DataTableTopComponent=\u0422\u0430\u0431\u043B\u0438\u0446\u044F \u0434\u0430\u043D\u0438\u0445 +DataTableTopComponent.tableScrollPane.busyMessage=\u041E\u0442\u0440\u0438\u043C\u0430\u043D\u043D\u044F \u0434\u0430\u043D\u0438\u0445... +DataTableTopComponent.tableScrollPane.error=\u041F\u0456\u0434 \u0447\u0430\u0441 \u043E\u0442\u0440\u0438\u043C\u0430\u043D\u043D\u044F \u0434\u0430\u043D\u0438\u0445 \u0441\u0442\u0430\u043B\u0430\u0441\u044F \u043F\u043E\u043C\u0438\u043B\u043A\u0430... +DataTableTopComponent.edgesButton.text=\u041A\u0440\u0430\u0457 +DataTableTopComponent.nodesButton.text=\u0412\u0443\u0437\u043B\u0438 +DataTableTopComponent.refreshButton.text=\u041E\u043D\u043E\u0432\u0438\u0442\u0438 +DataTableTopComponent.labelBanner.text=\u0414\u0430\u043D\u0456 \u043E\u043D\u043E\u0432\u043B\u0435\u043D\u043E. \u0425\u043E\u0447\u0435\u0448 \u043E\u043D\u043E\u0432\u0438\u0442\u0438 \u0441\u0442\u0456\u043B? +DataTableTopComponent.boxGlue.text=\u0406 +DataTableTopComponent.filterTextField.text=\u0406 +DataTableTopComponent.filterTextField.toolTipText=\u0420\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u0438\u0439 \u0432\u0438\u0440\u0430\u0437 \u0434\u043E\u0437\u0432\u043E\u043B\u0435\u043D\u043E +DataTableTopComponent.attributeColumnsPanel.title=\u0421\u0442\u043E\u0432\u043F\u0446\u0456 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0456\u0432 +DataTableTopComponent.RichToolTip.title.text=\u041E\u043F\u0438\u0441 +DataTableTopComponent.addColumnButton.text=\u0414\u043E\u0434\u0430\u0442\u0438 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C +DataTableTopComponent.mergeColumnsButton.text=\u041E\u0431\u2019\u0454\u0434\u043D\u0430\u0442\u0438 \u0441\u0442\u043E\u0432\u043F\u0446\u0456 +DataTableTopComponent.dialogs.okButton.text=OK +DataTableTopComponent.general.actions.plugins.button.text=\u0411\u0456\u043B\u044C\u0448\u0435 \u0434\u0456\u0439 +DataTableTopComponent.general.actions.plugins.group.name=\u0413\u0440\u0443\u043F\u0430 {0} +OpenIDE-Module-Short-Description=\u041A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442 Data Laboratory Table \u0456 \u043F\u0430\u043D\u0435\u043B\u0456 \u0440\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u043D\u043D\u044F +SettingsPanel.title={0} \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F +ConfigurationPanel.title=\u041A\u043E\u043D\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u044F +ConfigurationPanel.onlyVisibleCheckBox.text=\u041B\u0438\u0448\u0435 \u0432\u0438\u0434\u0438\u043C\u0438\u0439 \u0433\u0440\u0430\u0444\u0456\u043A +ConfigurationPanel.useSparklinesCheckBox.text=\u0421\u043F\u0430\u0440\u043A\u043B\u0430\u0439\u043D\u0438 \u0437\u0430\u043C\u0456\u043D\u044E\u044E\u0442\u044C \u0441\u043F\u0438\u0441\u043A\u0438 \u0447\u0438\u0441\u0435\u043B \u0456 \u0434\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0456 \u0447\u0438\u0441\u043B\u0430 +ConfigurationPanel.showEdgesNodesLabelsCheckBox.text=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u0438 \u043C\u0456\u0442\u043A\u0443 \u0432\u0438\u0445\u0456\u0434\u043D\u043E\u0433\u043E \u0442\u0430 \u0446\u0456\u043B\u044C\u043E\u0432\u043E\u0433\u043E \u0432\u0443\u0437\u043B\u0456\u0432 +DataTableTopComponent.configurationButton.text=\u041A\u043E\u043D\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u044F +ConfigurationPanel.timeIntervalsGraphicsCheckBox.text=\u0406\u043D\u0442\u0435\u0440\u0432\u0430\u043B\u0438 \u0447\u0430\u0441\u0443 \u044F\u043A \u0433\u0440\u0430\u0444\u0456\u043A\u0438 +AvailableColumnsPanel.title=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u0434\u0438\u0441\u043F\u043B\u0435\u044F +ConfigurationPanel.timeFormatLabel.text=\u0424\u043E\u0440\u043C\u0430\u0442 \u0447\u0430\u0441\u0443 +ConfigurationPanel.timeZoneLabel.text=\u0427\u0430\u0441\u043E\u0432\u0438\u0439 \u043F\u043E\u044F\u0441 +AvailableColumnsPanel.maximum-available-columns.info=\u0414\u043E\u0441\u044F\u0433\u043D\u0443\u0442\u043E \u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u0457 \u043A\u0456\u043B\u044C\u043A\u043E\u0441\u0442\u0456 \u0441\u0442\u043E\u0432\u043F\u0446\u0456\u0432 diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_zh_CN.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_zh_CN.properties index 293b8a9f9d..c34bae2cda 100644 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_zh_CN.properties +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_zh_CN.properties @@ -1,86 +1,42 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:14+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u5b9e\u9a8c\u6570\u636e\u8868\u683c\u6210\u5206\u548c\u7f16\u8f91\u9762\u677f - -CTL_DataTableAction=\u6570\u636e\u8868\u683c - -CTL_DataTableTopComponent=\u6570\u636e\u8868\u683c - -DataTableTopComponent.tableScrollPane.busyMessage=\u6b63\u53d1\u6570\u636e\u2026\u2026 - -DataTableTopComponent.tableScrollPane.error=\u53d1\u9001\u6570\u636e\u65f6\u51fa\u9519\u2026\u2026 - -DataTableTopComponent.labelFilter.text=\u8fc7\u6ee4\uff1a - -DataTableTopComponent.edgesButton.text=\u8fb9 - -DataTableTopComponent.nodesButton.text=\u8282\u70b9 - -DataTableTopComponent.refreshButton.text=shuaxin - -DataTableTopComponent.labelBanner.text=\u6570\u636e\u66f4\u65b0\u3002\u60f3\u66f4\u65b0\u6570\u636e\u8868\u683c\u5417\uff1f - -DataTableTopComponent.filterTextField.toolTipText=\u6b63\u5219\u8868\u8fbe\u5f0f\u6388\u6743 - -DataTableTopComponent.attributeColumnsPanel.title=\u5c5e\u6027\u5217 - -DataTableTopComponent.RichToolTip.title.text=\u63cf\u8ff0 - -DataTableTopComponent.addColumnButton.text=\u6dfb\u52a0\u5217 - -DataTableTopComponent.mergeColumnsButton.text=\u548c\u5e76\u5217 - -DataTableTopComponent.dialogs.okButton.text=\u597d - -DataTableTopComponent.general.actions.plugins.button.text=\u66f4\u591a\u529f\u80fd - -DataTableTopComponent.general.actions.plugins.group.name=\u7ec4{0} - -OpenIDE-Module-Short-Description=\u5b9e\u9a8c\u6570\u636e\u8868\u683c\u6210\u5206\u548c\u7f16\u8f91\u9762\u677f - -SettingsPanel.title={0}\u8bbe\u7f6e - -EdgeDataTable.source.column.text=\u6e90 - -EdgeDataTable.target.column.text=\u76ee\u6807 - -EdgeDataTable.type.column.text=\u7c7b\u578b - -EdgeDataTable.type.column.directed=\u6709\u5411\u7684 - -EdgeDataTable.type.column.undirected=\u65e0\u5411\u7684 - -ConfigurationPanel.title=\u914d\u7f6e - -ConfigurationPanel.onlyVisibleCheckBox.text=\u53ef\u89c1\u7684\u56fe\u5f62 - -ConfigurationPanel.useSparklinesCheckBox.text=\u6ce2\u5f62\u56fe\u66ff\u6362\u6570\u636e\u5217\u8868\u548c\u52a8\u6001\u6570\u636e - -ConfigurationPanel.showEdgesNodesLabelsCheckBox.text=\u663e\u793a\u6e90\u8282\u70b9\u548c\u76ee\u6807\u8282\u70b9\u7684\u6807\u8bb0 - -DataTableTopComponent.configurationButton.text=\u914d\u7f6e - -ConfigurationPanel.timeIntervalsGraphicsCheckBox.text=\u65f6\u95f4\u95f4\u9694\u4e3aGraphics - -DataTableTopComponent.availableColumnsButton.toolTipText=\u914d\u7f6e\u73b0\u5b9e\u7684\u5217 - -AvailableColumnsPanel.title=\u663e\u793a\u8bbe\u7f6e - -AvailableColumnsPanel.descriptionLabel.text=\u9009\u62e9\u73b0\u5b9e\u7684\u5217\uff1a - -AvailableColumnsPanel.maximum-available-columns.info=\u5217\u7684\u6700\u5927\u503c - -ConfigurationPanel.timeIntervalsAsDates.text=\u65f6\u95f4\u95f4\u9694\u4e3adates - -!TableCSVExporter.dialog.success= - -!TableCSVExporter.dialog.error= - -!TableCSVExporter.dialog.error.title= - -!TableCSVExporter.filechooser.csvDescription= +OpenIDE-Module-Long-Description=\u5b9e\u9a8c\u6570\u636e\u8868\u683c\u6210\u5206\u548c\u7f16\u8f91\u9762\u677f + +CTL_DataTableAction=\u6570\u636e\u8868\u683c +CTL_DataTableTopComponent=\u6570\u636e\u8868\u683c +!HINT_DataTableTopComponent= + +DataTableTopComponent.tableScrollPane.busyMessage = \u6b63\u53d1\u6570\u636e\u2026\u2026 +DataTableTopComponent.tableScrollPane.error = \u53d1\u9001\u6570\u636e\u65f6\u51fa\u9519\u2026\u2026 +DataTableTopComponent.labelFilter.text=\u8fc7\u6ee4\uff1a +DataTableTopComponent.edgesButton.text=\u8fb9 +DataTableTopComponent.nodesButton.text=\u8282\u70b9 +DataTableTopComponent.refreshButton.text=shuaxin +DataTableTopComponent.labelBanner.text=\u6570\u636e\u66f4\u65b0\u3002\u60f3\u66f4\u65b0\u6570\u636e\u8868\u683c\u5417\uff1f +DataTableTopComponent.boxGlue.text= +DataTableTopComponent.filterTextField.text= +DataTableTopComponent.filterTextField.toolTipText=\u6b63\u5219\u8868\u8fbe\u5f0f\u6388\u6743 +DataTableTopComponent.attributeColumnsPanel.title=\u5c5e\u6027\u5217 +DataTableTopComponent.RichToolTip.title.text=\u63cf\u8ff0 +DataTableTopComponent.addColumnButton.text=\u6dfb\u52a0\u5217 +DataTableTopComponent.mergeColumnsButton.text=\u548c\u5e76\u5217 +DataTableTopComponent.dialogs.okButton.text=\u597d +DataTableTopComponent.general.actions.plugins.button.text=\u66f4\u591a\u529f\u80fd +DataTableTopComponent.general.actions.plugins.group.name=\u7ec4{0} + +OpenIDE-Module-Short-Description=\u5b9e\u9a8c\u6570\u636e\u8868\u683c\u6210\u5206\u548c\u7f16\u8f91\u9762\u677f +SettingsPanel.title={0}\u8bbe\u7f6e + + +ConfigurationPanel.title=\u914d\u7f6e +ConfigurationPanel.onlyVisibleCheckBox.text=\u53ef\u89c1\u7684\u56fe\u5f62 +ConfigurationPanel.useSparklinesCheckBox.text=\u6ce2\u5f62\u56fe\u66ff\u6362\u6570\u636e\u5217\u8868\u548c\u52a8\u6001\u6570\u636e +ConfigurationPanel.showEdgesNodesLabelsCheckBox.text=\u663e\u793a\u6e90\u8282\u70b9\u548c\u76ee\u6807\u8282\u70b9\u7684\u6807\u8bb0 +DataTableTopComponent.configurationButton.text=\u914d\u7f6e +ConfigurationPanel.timeIntervalsGraphicsCheckBox.text=\u65f6\u95f4\u95f4\u9694\u4e3aGraphics +DataTableTopComponent.availableColumnsButton.text= +DataTableTopComponent.availableColumnsButton.toolTipText=\u914d\u7f6e\u73b0\u5b9e\u7684\u5217 +AvailableColumnsPanel.title=\u663e\u793a\u8bbe\u7f6e +AvailableColumnsPanel.descriptionLabel.text=\u9009\u62e9\u73b0\u5b9e\u7684\u5217\uff1a +AvailableColumnsPanel.maximum-available-columns.info=\u5217\u7684\u6700\u5927\u503c + +ConfigurationPanel.timeFormatLabel.text=\u65f6\u95f4\u683c\u5f0f +ConfigurationPanel.timeZoneLabel.text=\u65f6\u95f4\u5e27 diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_zh_TW.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_zh_TW.properties new file mode 100644 index 0000000000..bca6fee5a5 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/Bundle_zh_TW.properties @@ -0,0 +1,39 @@ +OpenIDE-Module-Long-Description=Data Laboratory Table component and edit panels +CTL_DataTableAction=Data Table +CTL_DataTableTopComponent=Data Table +!HINT_DataTableTopComponent= + +DataTableTopComponent.tableScrollPane.busyMessage=Fetching data... +DataTableTopComponent.tableScrollPane.error=An error occured while feching data... +DataTableTopComponent.labelFilter.text=Filter: +DataTableTopComponent.edgesButton.text=\u9023\u7d50 +DataTableTopComponent.nodesButton.text=\u7bc0\u9ede +DataTableTopComponent.refreshButton.text=\u66f4\u65b0 +DataTableTopComponent.labelBanner.text=Data updated. Do you want to refresh the table? +DataTableTopComponent.boxGlue.text= +DataTableTopComponent.filterTextField.text= +DataTableTopComponent.filterTextField.toolTipText=Regular expression is permitted +DataTableTopComponent.attributeColumnsPanel.title=Attribute columns +DataTableTopComponent.RichToolTip.title.text=Description +DataTableTopComponent.addColumnButton.text=Add column +DataTableTopComponent.mergeColumnsButton.text=Merge columns +DataTableTopComponent.dialogs.okButton.text=OK +DataTableTopComponent.general.actions.plugins.button.text=More actions +DataTableTopComponent.general.actions.plugins.group.name=Group {0} +OpenIDE-Module-Short-Description=Data Laboratory Table component and edit panels +SettingsPanel.title={0} settings + + +ConfigurationPanel.title=Configuration +ConfigurationPanel.onlyVisibleCheckBox.text=Visible graph only +ConfigurationPanel.useSparklinesCheckBox.text=Sparklines replaces number lists and dynamic numbers +ConfigurationPanel.showEdgesNodesLabelsCheckBox.text=Show label of source and target nodes +DataTableTopComponent.configurationButton.text=Configuration +ConfigurationPanel.timeIntervalsGraphicsCheckBox.text=Time intervals as graphics +DataTableTopComponent.availableColumnsButton.text= +DataTableTopComponent.availableColumnsButton.toolTipText=Configure displayed columns +AvailableColumnsPanel.title=Display settings +AvailableColumnsPanel.descriptionLabel.text=Choose the columns to display: +AvailableColumnsPanel.maximum-available-columns.info=Maximum number of columns reached +ConfigurationPanel.timeFormatLabel.text=Time format +ConfigurationPanel.timeZoneLabel.text=Time zone diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle.properties new file mode 100644 index 0000000000..1c529eca57 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle.properties @@ -0,0 +1 @@ +CTL_ImportSpreadsheet=Import spreadsheet... \ No newline at end of file diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_ar.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_ca.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_ca.properties new file mode 100644 index 0000000000..fa87f0e7c7 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_ca.properties @@ -0,0 +1 @@ +CTL_ImportSpreadsheet=Importa un full de cΰlcul diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_cs.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_cs.properties new file mode 100644 index 0000000000..f196483458 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_cs.properties @@ -0,0 +1 @@ +CTL_ImportSpreadsheet=Importovat tabulky... diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_de.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_de.properties new file mode 100644 index 0000000000..c287ecba5e --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_de.properties @@ -0,0 +1 @@ +CTL_ImportSpreadsheet=Tabelle importieren... diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_es.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_es.properties new file mode 100644 index 0000000000..ba9d14eb54 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_es.properties @@ -0,0 +1 @@ +CTL_ImportSpreadsheet=Importar hoja de cαlculo... diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_fr.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_fr.properties new file mode 100644 index 0000000000..e2d182e56f --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_fr.properties @@ -0,0 +1 @@ +CTL_ImportSpreadsheet=Importer feuille de calcul... diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_he.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_he.properties new file mode 100644 index 0000000000..55fa9cd115 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_he.properties @@ -0,0 +1 @@ +CTL_ImportSpreadsheet=Import spreadsheet... diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_hu.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_hu.properties new file mode 100644 index 0000000000..670fd85681 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_hu.properties @@ -0,0 +1,3 @@ + + +CTL_ImportSpreadsheet=T\u00E1bl\u00E1zat import\u00E1l\u00E1sa... diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_it.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_it.properties new file mode 100644 index 0000000000..55fa9cd115 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_it.properties @@ -0,0 +1 @@ +CTL_ImportSpreadsheet=Import spreadsheet... diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_ja.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_ja.properties new file mode 100644 index 0000000000..1fec593bca --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_ja.properties @@ -0,0 +1 @@ +# CTL_ImportSpreadsheet=Import spreadsheet... diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_ko.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_ko.properties new file mode 100644 index 0000000000..dc9631605d --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_ko.properties @@ -0,0 +1,3 @@ + + +CTL_ImportSpreadsheet=\uC2A4\uD504\uB808\uB4DC\uC2DC\uD2B8 \uBD88\uB7EC\uC624\uAE30... diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_nl.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_nl.properties new file mode 100644 index 0000000000..be99337a9d --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_nl.properties @@ -0,0 +1 @@ +CTL_ImportSpreadsheet=Spreadsheet importeren... diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_pt_BR.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_pt_BR.properties new file mode 100644 index 0000000000..eb9dce6f8e --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_pt_BR.properties @@ -0,0 +1 @@ +CTL_ImportSpreadsheet=Importar planilha diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_ro.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_ro.properties new file mode 100644 index 0000000000..67d8094fe7 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_ro.properties @@ -0,0 +1,3 @@ + + +CTL_ImportSpreadsheet=Import\u0103 foaie de calcul... diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_ru.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_ru.properties new file mode 100644 index 0000000000..4c668e055f --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_ru.properties @@ -0,0 +1,3 @@ +# CTL_ImportSpreadsheet=Import spreadsheet... + +CTL_ImportSpreadsheet=\u0418\u043C\u043F\u043E\u0440\u0442 \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0439 \u0442\u0430\u0431\u043B\u0438\u0446\u044B... diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_th.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_tr.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_tr.properties new file mode 100644 index 0000000000..55fa9cd115 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_tr.properties @@ -0,0 +1 @@ +CTL_ImportSpreadsheet=Import spreadsheet... diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_uk.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_uk.properties new file mode 100644 index 0000000000..39c8208080 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_uk.properties @@ -0,0 +1 @@ +CTL_ImportSpreadsheet=\u0406\u043C\u043F\u043E\u0440\u0442 \u0435\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0457 \u0442\u0430\u0431\u043B\u0438\u0446\u0456... diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_zh_CN.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_zh_CN.properties new file mode 100644 index 0000000000..66f1bc9d7a --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_zh_CN.properties @@ -0,0 +1 @@ +CTL_ImportSpreadsheet=\u5BFC\u5165\u7535\u5B50\u8868\u683C\u2026 diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_zh_TW.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_zh_TW.properties new file mode 100644 index 0000000000..55fa9cd115 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/actions/Bundle_zh_TW.properties @@ -0,0 +1 @@ +CTL_ImportSpreadsheet=Import spreadsheet... diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/cs.po b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/cs.po deleted file mode 100644 index 9cd019271c..0000000000 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/cs.po +++ /dev/null @@ -1,139 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:14+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "SoučÑst tabulky datovΓ© laboratoΕ™e a panelΕ― ΓΊprav" - -msgid "CTL_DataTableAction" -msgstr "Tabulka dat" - -msgid "CTL_DataTableTopComponent" -msgstr "Tabulka dat" - -msgid "DataTableTopComponent.tableScrollPane.busyMessage" -msgstr "ZΓ­skΓ‘vΓ‘nΓ­ dat..." - -msgid "DataTableTopComponent.tableScrollPane.error" -msgstr "PΕ™i zΓ­skΓ‘vΓ‘nΓ­ dat doΕ‘lo k chybΔ›..." - -msgid "DataTableTopComponent.labelFilter.text" -msgstr "Filtr:" - -msgid "DataTableTopComponent.edgesButton.text" -msgstr "Hrany" - -msgid "DataTableTopComponent.nodesButton.text" -msgstr "Uzle" - -msgid "DataTableTopComponent.refreshButton.text" -msgstr "Obnovit" - -msgid "DataTableTopComponent.labelBanner.text" -msgstr "Data aktualizovΓ‘na. Chcete obnovit tabulku?" - -msgid "DataTableTopComponent.filterTextField.toolTipText" -msgstr "RegulΓ‘rnΓ­ vΓ½raz je povolen" - -msgid "DataTableTopComponent.attributeColumnsPanel.title" -msgstr "Sloupce vlastnostΓ­" - -msgid "DataTableTopComponent.RichToolTip.title.text" -msgstr "Popis" - -msgid "DataTableTopComponent.addColumnButton.text" -msgstr "PΕ™idat sloupec" - -msgid "DataTableTopComponent.mergeColumnsButton.text" -msgstr "Sloučit sloupce" - -msgid "DataTableTopComponent.dialogs.okButton.text" -msgstr "OK" - -msgid "DataTableTopComponent.general.actions.plugins.button.text" -msgstr "DalΕ‘Γ­ činnosti" - -msgid "DataTableTopComponent.general.actions.plugins.group.name" -msgstr "Skupina {0}" - -msgid "OpenIDE-Module-Short-Description" -msgstr "SoučÑst tabulky datovΓ© laboratoΕ™e a panelΕ― ΓΊprav" - -msgid "SettingsPanel.title" -msgstr "NastavenΓ­ {0}" - -msgid "EdgeDataTable.source.column.text" -msgstr "Zdroj" - -msgid "EdgeDataTable.target.column.text" -msgstr "CΓ­l" - -msgid "EdgeDataTable.type.column.text" -msgstr "Typ" - -msgid "EdgeDataTable.type.column.directed" -msgstr "ŘízenΓ©" - -msgid "EdgeDataTable.type.column.undirected" -msgstr "NeΕ™Γ­zenΓ©" - -msgid "ConfigurationPanel.title" -msgstr "Konfigurace" - -msgid "ConfigurationPanel.onlyVisibleCheckBox.text" -msgstr "Pouze viditelnΓ½ graf" - -msgid "ConfigurationPanel.useSparklinesCheckBox.text" -msgstr "Minigrafy nahrazujΓ­ očíslovanΓ© seznamy a dynamickΓ‘ čísla" - -msgid "ConfigurationPanel.showEdgesNodesLabelsCheckBox.text" -msgstr "Zobrazit zdrojovΓ½ Ε‘tΓ­tek a cΓ­lovΓ© uzle" - -msgid "DataTableTopComponent.configurationButton.text" -msgstr "Konfigurace" - -msgid "ConfigurationPanel.timeIntervalsGraphicsCheckBox.text" -msgstr "ČasovΓ© intervaly jako grafika" - -msgid "DataTableTopComponent.availableColumnsButton.toolTipText" -msgstr "Nastavit zobrazenΓ© sloupce" - -msgid "AvailableColumnsPanel.title" -msgstr "NastavenΓ­ zobrazenΓ­" - -msgid "AvailableColumnsPanel.descriptionLabel.text" -msgstr "Zvolte sloupce zobrazenΓ­:" - -msgid "AvailableColumnsPanel.maximum-available-columns.info" -msgstr "DosaΕΎeno maximΓ‘lnΓ­ho počtu sloupcΕ―" - -msgid "ConfigurationPanel.timeIntervalsAsDates.text" -msgstr "ČasovΓ© intervaly jako data" - -msgid "TableCSVExporter.dialog.success" -msgstr "" - -msgid "TableCSVExporter.dialog.error" -msgstr "" - -msgid "TableCSVExporter.dialog.error.title" -msgstr "" - -msgid "TableCSVExporter.filechooser.csvDescription" -msgstr "" diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/es.po b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/es.po deleted file mode 100644 index 6187320de2..0000000000 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/es.po +++ /dev/null @@ -1,141 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# , 2011. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:25+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Tabla del laboratorio de datos y paneles de ediciΓ³n" - -msgid "CTL_DataTableAction" -msgstr "Tabla de datos" - -msgid "CTL_DataTableTopComponent" -msgstr "Tabla de datos" - -msgid "DataTableTopComponent.tableScrollPane.busyMessage" -msgstr "Obteniendo datos..." - -msgid "DataTableTopComponent.tableScrollPane.error" -msgstr "Un error ocurriΓ³ mientras se obtenΓ­an los datos..." - -msgid "DataTableTopComponent.labelFilter.text" -msgstr "Filtro:" - -msgid "DataTableTopComponent.edgesButton.text" -msgstr "Aristas" - -msgid "DataTableTopComponent.nodesButton.text" -msgstr "Nodos" - -msgid "DataTableTopComponent.refreshButton.text" -msgstr "Refrescar" - -msgid "DataTableTopComponent.labelBanner.text" -msgstr "Los datos han sido actualizados. ΒΏQuieres refrescar la tabla?" - -msgid "DataTableTopComponent.filterTextField.toolTipText" -msgstr "El uso de expresiones regulares estΓ‘ permitido" - -msgid "DataTableTopComponent.attributeColumnsPanel.title" -msgstr "Columnas de atributos" - -msgid "DataTableTopComponent.RichToolTip.title.text" -msgstr "DescripciΓ³n" - -msgid "DataTableTopComponent.addColumnButton.text" -msgstr "AΓ±adir nueva columna" - -msgid "DataTableTopComponent.mergeColumnsButton.text" -msgstr "Mezclar columnas" - -msgid "DataTableTopComponent.dialogs.okButton.text" -msgstr "Ok" - -msgid "DataTableTopComponent.general.actions.plugins.button.text" -msgstr "MΓ‘s acciones" - -msgid "DataTableTopComponent.general.actions.plugins.group.name" -msgstr "Grupo {0}" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Tabla del laboratorio de datos y paneles de ediciΓ³n" - -msgid "SettingsPanel.title" -msgstr "ParΓ‘metros de {0}" - -msgid "EdgeDataTable.source.column.text" -msgstr "Origen" - -msgid "EdgeDataTable.target.column.text" -msgstr "Destino" - -msgid "EdgeDataTable.type.column.text" -msgstr "Tipo" - -msgid "EdgeDataTable.type.column.directed" -msgstr "Dirigida" - -msgid "EdgeDataTable.type.column.undirected" -msgstr "No dirigida" - -msgid "ConfigurationPanel.title" -msgstr "ConfiguraciΓ³n" - -msgid "ConfigurationPanel.onlyVisibleCheckBox.text" -msgstr "Grafo visible sΓ³lamente" - -msgid "ConfigurationPanel.useSparklinesCheckBox.text" -msgstr "Mostrar listas de nΓΊmeros y nΓΊmeros dinΓ‘micos como sparklines" - -msgid "ConfigurationPanel.showEdgesNodesLabelsCheckBox.text" -msgstr "Mostrar etiqueta de los nodos origen y destino de las aristas" - -msgid "DataTableTopComponent.configurationButton.text" -msgstr "ConfiguraciΓ³n" - -msgid "ConfigurationPanel.timeIntervalsGraphicsCheckBox.text" -msgstr "Mostrar grΓ‘ficos de los intΓ©rvalos temporales" - -msgid "DataTableTopComponent.availableColumnsButton.toolTipText" -msgstr "Configurar columnas disponibles" - -msgid "AvailableColumnsPanel.title" -msgstr "Columnas disponibles" - -msgid "AvailableColumnsPanel.descriptionLabel.text" -msgstr "Escoge las columnas que deberΓ­an estar disponibles:" - -msgid "AvailableColumnsPanel.maximum-available-columns.info" -msgstr "NΓΊmero mΓ‘ximo de columnas disponibles alcanzado" - -msgid "ConfigurationPanel.timeIntervalsAsDates.text" -msgstr "Intervalos temporales como fechas" - -msgid "TableCSVExporter.dialog.success" -msgstr "Tabla exportada con Γ©xito" - -msgid "TableCSVExporter.dialog.error" -msgstr "Un error ocurriΓ³ mientras al escribir el fichero. AsegΓΊrate de que el archivo no estΓ‘ en uso y tienes los permisos necesarios" - -msgid "TableCSVExporter.dialog.error.title" -msgstr "Error" - -msgid "TableCSVExporter.filechooser.csvDescription" -msgstr "CSV" diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/fr.po b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/fr.po deleted file mode 100644 index 2523e7d6b3..0000000000 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/fr.po +++ /dev/null @@ -1,140 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:14+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Laboratoire de donnΓ©es: composant Table et panneaux d'Γ©dition" - -msgid "CTL_DataTableAction" -msgstr "Tableau de donnΓ©es" - -msgid "CTL_DataTableTopComponent" -msgstr "Tableau de donnΓ©es" - -msgid "DataTableTopComponent.tableScrollPane.busyMessage" -msgstr "RΓ©cupΓ©ration des donnΓ©es..." - -msgid "DataTableTopComponent.tableScrollPane.error" -msgstr "Une erreur est survenue lors de la rΓ©cupΓ©ration des donnΓ©es." - -msgid "DataTableTopComponent.labelFilter.text" -msgstr "Filtre :" - -msgid "DataTableTopComponent.edgesButton.text" -msgstr "Liens" - -msgid "DataTableTopComponent.nodesButton.text" -msgstr "Noeuds" - -msgid "DataTableTopComponent.refreshButton.text" -msgstr "Rafraichir" - -msgid "DataTableTopComponent.labelBanner.text" -msgstr "DonnΓ©es mises Γ  jour. Souhaitez-vous rΓ©-actualiser le tableau ?" - -msgid "DataTableTopComponent.filterTextField.toolTipText" -msgstr "Usage des expressions rationnelles autorisΓ©" - -msgid "DataTableTopComponent.attributeColumnsPanel.title" -msgstr "Colonnes d'attribut" - -msgid "DataTableTopComponent.RichToolTip.title.text" -msgstr "Description" - -msgid "DataTableTopComponent.addColumnButton.text" -msgstr "Ajouter une colonne" - -msgid "DataTableTopComponent.mergeColumnsButton.text" -msgstr "Fusionner les colonnes" - -msgid "DataTableTopComponent.dialogs.okButton.text" -msgstr "OK" - -msgid "DataTableTopComponent.general.actions.plugins.button.text" -msgstr "Plus" - -msgid "DataTableTopComponent.general.actions.plugins.group.name" -msgstr "Groupe {0}" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Tableau du laboratoire de donnΓ©es" - -msgid "SettingsPanel.title" -msgstr "{0} - ParamΓ¨tres" - -msgid "EdgeDataTable.source.column.text" -msgstr "Source" - -msgid "EdgeDataTable.target.column.text" -msgstr "Destination" - -msgid "EdgeDataTable.type.column.text" -msgstr "Type" - -msgid "EdgeDataTable.type.column.directed" -msgstr "OrientΓ©" - -msgid "EdgeDataTable.type.column.undirected" -msgstr "Non orientΓ©" - -msgid "ConfigurationPanel.title" -msgstr "Configuration" - -msgid "ConfigurationPanel.onlyVisibleCheckBox.text" -msgstr "Graphe visible uniquement" - -msgid "ConfigurationPanel.useSparklinesCheckBox.text" -msgstr "Voir les listes de nombres et les nombres dynamiques avec des sparklines." - -msgid "ConfigurationPanel.showEdgesNodesLabelsCheckBox.text" -msgstr "Afficher les labels des noeuds sources et destinations" - -msgid "DataTableTopComponent.configurationButton.text" -msgstr "Configuration" - -msgid "ConfigurationPanel.timeIntervalsGraphicsCheckBox.text" -msgstr "Afficher les graphiques des intervalles temporels" - -msgid "DataTableTopComponent.availableColumnsButton.toolTipText" -msgstr "Configurer les colonnes disponibles" - -msgid "AvailableColumnsPanel.title" -msgstr "ParamΓ¨tres des colonnes disponibles" - -msgid "AvailableColumnsPanel.descriptionLabel.text" -msgstr "Choisir les colonnes disponibles :" - -msgid "AvailableColumnsPanel.maximum-available-columns.info" -msgstr "Nombre maximum de colonnes atteint" - -msgid "ConfigurationPanel.timeIntervalsAsDates.text" -msgstr "Intervalles temporelles comme dates" - -msgid "TableCSVExporter.dialog.success" -msgstr "" - -msgid "TableCSVExporter.dialog.error" -msgstr "" - -msgid "TableCSVExporter.dialog.error.title" -msgstr "" - -msgid "TableCSVExporter.filechooser.csvDescription" -msgstr "" diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle.properties index 1c021f6437..0ceccfc80f 100644 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle.properties +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle.properties @@ -15,11 +15,3 @@ MergeColumnsUI.problems.less_than_2_columns_selected=At least one column must be MergeColumnsUI.problems.not_executable_strategy=This merge strategy cannot be executed to the given columns. #HINT_LayoutTopComponent= MergeColumnsUI.infoLabel.text= -CSVExportUI.title=Export table to CSV file -CSVExportUI.separatorLabel.text=Separator: -CSVExportUI.comma=Comma -CSVExportUI.semicolon=Semicolon -CSVExportUI.space=Space -CSVExportUI.tab=Tab -CSVExportUI.columnsLabel.text=Columns: -CSVExportUI.charsetLabel.text=Charset: diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_ar.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_ca.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_ca.properties new file mode 100644 index 0000000000..56763b832c --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_ca.properties @@ -0,0 +1,17 @@ +AddColumnUI.title=Add column - Settings +AddColumnUI.descriptionLabel.text.nodes=Afegeix columnes als nodes +AddColumnUI.descriptionLabel.text.edges=Afegeix columnes a les arestes +AddColumnUI.typeLabel.text=Tipus: +AddColumnUI.titleTextField.text= +AddColumnUI.titleLabel.text=Tνtol: +MergeColumnsUI.title=Merge columns +MergeColumnsUI.addColumnButton.text= +MergeColumnsUI.removeColumnButton.text= +MergeColumnsUI.availableColumnsLabel.text=Columnes disponibles: +MergeColumnsUI.columnsToMergeLabel.text=Columns to merge: +MergeColumnsUI.availableStrategiesLabel.text=Merge strategy: +MergeColumnsUI.description.text=Choose the columns to merge and a merge strategy. +MergeColumnsUI.problems.less_than_2_columns_selected=S'ha de seleccionar com a mνnim una columna +MergeColumnsUI.problems.not_executable_strategy=This merge strategy cannot be executed to the given columns. +#HINT_LayoutTopComponent= +MergeColumnsUI.infoLabel.text= diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_cs.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_cs.properties index 627379a6ed..431cc088de 100644 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_cs.properties +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_cs.properties @@ -1,47 +1,17 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-26 18\:19+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -AddColumnUI.title=P\u0159idat sloupec - Nastaven\u00ed - -AddColumnUI.descriptionLabel.text.nodes=P\u0159idat sloupec k uzl\u016fm - -AddColumnUI.descriptionLabel.text.edges=P\u0159idat sloupec k hran\u00e1m - -AddColumnUI.typeLabel.text=Typ\: - -AddColumnUI.titleLabel.text=N\u00e1zev\: - -MergeColumnsUI.title=Slou\u010dit sloupce - -MergeColumnsUI.availableColumnsLabel.text=Dostupn\u00e9 sloupce\: - -MergeColumnsUI.columnsToMergeLabel.text=Sloupce ke slou\u010den\u00ed\: - -MergeColumnsUI.availableStrategiesLabel.text=Strategie slou\u010den\u00ed\: - -MergeColumnsUI.description.text=Zvolte sloupce ke slou\u010den\u00ed a jeho strategii. - -MergeColumnsUI.problems.less_than_2_columns_selected=Mus\u00ed b\u00fdt zvolen alespo\u0148 jeden sloupec. - -MergeColumnsUI.problems.not_executable_strategy=Tato strategie slou\u010den\u00ed nem\u016f\u017ee b\u00fdt pou\u017eita na zvolen\u00e9 sloupce. - -CSVExportUI.title=Exportovat tabulku do souboru CSV - -CSVExportUI.separatorLabel.text=Odd\u011blova\u010d\: - -CSVExportUI.comma=\u010c\u00e1rka - -CSVExportUI.semicolon=St\u0159edn\u00edk - -CSVExportUI.space=Mezera - -CSVExportUI.tab=Tabul\u00e1tor - -CSVExportUI.columnsLabel.text=Sloupce\: - -CSVExportUI.charsetLabel.text=Znakov\u00e1 sada\: +AddColumnUI.title=P\u0159idat sloupec - Nastavenν +AddColumnUI.descriptionLabel.text.nodes=P\u0159idat sloupec k uzl\u016fm +AddColumnUI.descriptionLabel.text.edges=P\u0159idat sloupec k hranαm +AddColumnUI.typeLabel.text=Typ: +AddColumnUI.titleTextField.text= +AddColumnUI.titleLabel.text=Nαzev: +MergeColumnsUI.title=Slou\u010dit sloupce +MergeColumnsUI.addColumnButton.text= +MergeColumnsUI.removeColumnButton.text= +MergeColumnsUI.availableColumnsLabel.text=Dostupnι sloupce: +MergeColumnsUI.columnsToMergeLabel.text=Sloupce ke slou\u010denν: +MergeColumnsUI.availableStrategiesLabel.text=Strategie slou\u010denν: +MergeColumnsUI.description.text=Zvolte sloupce ke slou\u010denν a jeho strategii. +MergeColumnsUI.problems.less_than_2_columns_selected=Musν bύt zvolen alespo\u0148 jeden sloupec. +MergeColumnsUI.problems.not_executable_strategy=Tato strategie slou\u010denν nem\u016f\u017ee bύt pou\u017eita na zvolenι sloupce. +#HINT_LayoutTopComponent= +MergeColumnsUI.infoLabel.text= diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_de.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_de.properties new file mode 100644 index 0000000000..fcb8d32e12 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_de.properties @@ -0,0 +1,17 @@ +AddColumnUI.title=Spalte hinzufόgen - Einstellungen +AddColumnUI.descriptionLabel.text.nodes=Fόge Spalte zu Knoten hinzu +AddColumnUI.descriptionLabel.text.edges=Fόge Spalte zu Kanten hinzu +AddColumnUI.typeLabel.text=Type: +AddColumnUI.titleTextField.text= +AddColumnUI.titleLabel.text=Titel: +MergeColumnsUI.title=Spalten verschmelzen +MergeColumnsUI.addColumnButton.text= +MergeColumnsUI.removeColumnButton.text= +MergeColumnsUI.availableColumnsLabel.text=Verfόgbare Spalten: +MergeColumnsUI.columnsToMergeLabel.text=Zu verschmelzende Spalten: +MergeColumnsUI.availableStrategiesLabel.text=Verschmelzungs-Strategie +MergeColumnsUI.description.text=Wδhlen Sie die zu verschmelzenden Spalten und eine Verschmelzungs-Strategie. +MergeColumnsUI.problems.less_than_2_columns_selected=Mindestens eine Spalte muss ausgewδhlt sein. +MergeColumnsUI.problems.not_executable_strategy=Die Verschmelzungs-Strategie kann nicht auf den ausgewδhlten Spalten ausgefόhrt werden. +#HINT_LayoutTopComponent= +MergeColumnsUI.infoLabel.text= diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_es.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_es.properties index 49b60c445e..5a0b01fcd4 100644 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_es.properties +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_es.properties @@ -1,47 +1,17 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:09+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -AddColumnUI.title=A\u00f1adir nueva columna - Par\u00e1metros - -AddColumnUI.descriptionLabel.text.nodes=A\u00f1adir nueva columna a la tabla de nodos - -AddColumnUI.descriptionLabel.text.edges=A\u00f1adir nueva columna a la tabla de aristas - -AddColumnUI.typeLabel.text=Tipo de la columna\: - -AddColumnUI.titleLabel.text=T\u00edtulo de la columna - -MergeColumnsUI.title=Mezclar columnas - -MergeColumnsUI.availableColumnsLabel.text=Columnas disponibles\: - -MergeColumnsUI.columnsToMergeLabel.text=Columnas a mezclar\: - -MergeColumnsUI.availableStrategiesLabel.text=Estrategias de mezclado disponibles\: - -MergeColumnsUI.description.text=Elige las columnas a mezclar y una estrategia de mezclado - -MergeColumnsUI.problems.less_than_2_columns_selected=Al menos 1 columna debe ser seleccionada para mezclar - -MergeColumnsUI.problems.not_executable_strategy=La estrategia seleccionada no puede ser ejecutada con las columnas escogidas para mezclar - -CSVExportUI.title=Exportar tabla a CSV - -CSVExportUI.separatorLabel.text=Separador\: - -CSVExportUI.comma=Coma - -CSVExportUI.semicolon=Punto y coma - -CSVExportUI.space=Espacio - -CSVExportUI.tab=Tabulador - -CSVExportUI.columnsLabel.text=Columnas a exportar\: - -CSVExportUI.charsetLabel.text=Conjunto de caracteres\: +AddColumnUI.title=Aρadir nueva columna - Parαmetros +AddColumnUI.descriptionLabel.text.nodes=Aρadir nueva columna a la tabla de nodos +AddColumnUI.descriptionLabel.text.edges=Aρadir nueva columna a la tabla de aristas +AddColumnUI.typeLabel.text=Tipo de la columna: +AddColumnUI.titleTextField.text= +AddColumnUI.titleLabel.text=T\u00EDtulo: +MergeColumnsUI.title=Fusionar columnas +MergeColumnsUI.addColumnButton.text= +MergeColumnsUI.removeColumnButton.text= +MergeColumnsUI.availableColumnsLabel.text=Columnas disponibles: +MergeColumnsUI.columnsToMergeLabel.text=Columnas a fusionar: +MergeColumnsUI.availableStrategiesLabel.text=Estrategia de fusi\u00F3n: +MergeColumnsUI.description.text=Elige las columnas a fusionar y una estrategia de fusi\u00F3n. +MergeColumnsUI.problems.less_than_2_columns_selected=Al menos una columna debe estar seleccionada. +MergeColumnsUI.problems.not_executable_strategy=Este m\u00E9todo de combinaci\u00F3n no se puede ejecutar para la columna especificada. +#HINT_LayoutTopComponent= +MergeColumnsUI.infoLabel.text= diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_fr.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_fr.properties index 6ca0796cee..ca9f91cdac 100644 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_fr.properties +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_fr.properties @@ -1,47 +1,17 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:09+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -AddColumnUI.title=Ajouter une colonne - Param\u00e8tres - -AddColumnUI.descriptionLabel.text.nodes=Ajouter une colonne aux noeuds - -AddColumnUI.descriptionLabel.text.edges=Ajouter une colonne aux liens - -AddColumnUI.typeLabel.text=Type de colonne \: - -AddColumnUI.titleLabel.text=Titre de colonne \: - -MergeColumnsUI.title=Fusionner les colonnes - -MergeColumnsUI.availableColumnsLabel.text=Colonnes disponibles \: - -MergeColumnsUI.columnsToMergeLabel.text=Colonnes \u00e0 fusionner \: - -MergeColumnsUI.availableStrategiesLabel.text=Strat\u00e9gies de fusion possibles \: - -MergeColumnsUI.description.text=Choisissez les colonnes \u00e0 fusionner et la strat\u00e9gie de fusion - -MergeColumnsUI.problems.less_than_2_columns_selected=Au moins une colonne doit \u00eatre s\u00e9lectionn\u00e9e - -MergeColumnsUI.problems.not_executable_strategy=Cette strat\u00e9gie ne peut \u00eatre ex\u00e9cut\u00e9e sur ces colonnes - -CSVExportUI.title=Exporter la table en CSV - -CSVExportUI.separatorLabel.text=S\u00e9parateur \: - -CSVExportUI.comma=Virgule - -CSVExportUI.semicolon=Point-virgule - -CSVExportUI.space=Espace - -CSVExportUI.tab=Tabulation - -CSVExportUI.columnsLabel.text=Colonnes \u00e0 exporter \: - -CSVExportUI.charsetLabel.text=Encodage \: +AddColumnUI.title=Ajouter une colonne - Paramθtres +AddColumnUI.descriptionLabel.text.nodes=Ajouter une colonne aux noeuds +AddColumnUI.descriptionLabel.text.edges=Ajouter une colonne aux liens +AddColumnUI.typeLabel.text=Type de colonne : +AddColumnUI.titleTextField.text= +AddColumnUI.titleLabel.text=Titre de colonne : +MergeColumnsUI.title=Fusionner les colonnes +MergeColumnsUI.addColumnButton.text= +MergeColumnsUI.removeColumnButton.text= +MergeColumnsUI.availableColumnsLabel.text=Colonnes disponibles : +MergeColumnsUI.columnsToMergeLabel.text=Colonnes ΰ fusionner : +MergeColumnsUI.availableStrategiesLabel.text=Stratιgies de fusion possibles : +MergeColumnsUI.description.text=Choisissez les colonnes ΰ fusionner et la stratιgie de fusion +MergeColumnsUI.problems.less_than_2_columns_selected=Au moins une colonne doit κtre sιlectionnιe +MergeColumnsUI.problems.not_executable_strategy=Cette stratιgie ne peut κtre exιcutιe sur ces colonnes +#HINT_LayoutTopComponent= +MergeColumnsUI.infoLabel.text= diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_he.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_he.properties new file mode 100644 index 0000000000..25efc6d1bb --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_he.properties @@ -0,0 +1,17 @@ +AddColumnUI.title=Add column - Settings +AddColumnUI.descriptionLabel.text.nodes=Add column to nodes +AddColumnUI.descriptionLabel.text.edges=Add column to edges +AddColumnUI.typeLabel.text=\u05e1\u05d5\u05d2: +AddColumnUI.titleTextField.text= +AddColumnUI.titleLabel.text=\u05db\u05d5\u05ea\u05e8\u05ea: +MergeColumnsUI.title=Merge columns +MergeColumnsUI.addColumnButton.text= +MergeColumnsUI.removeColumnButton.text= +MergeColumnsUI.availableColumnsLabel.text=Available columns: +MergeColumnsUI.columnsToMergeLabel.text=Columns to merge: +MergeColumnsUI.availableStrategiesLabel.text=Merge strategy: +MergeColumnsUI.description.text=Choose the columns to merge and a merge strategy. +MergeColumnsUI.problems.less_than_2_columns_selected=At least one column must be selected. +MergeColumnsUI.problems.not_executable_strategy=This merge strategy cannot be executed to the given columns. +#HINT_LayoutTopComponent= +MergeColumnsUI.infoLabel.text= diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_hu.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_hu.properties new file mode 100644 index 0000000000..555aec42a9 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_hu.properties @@ -0,0 +1,14 @@ + + +AddColumnUI.title=Oszlop hozz\u00E1ad\u00E1sa \u2013 Be\u00E1ll\u00EDt\u00E1sok +MergeColumnsUI.problems.not_executable_strategy=Ez az \u00F6sszevon\u00E1si strat\u00E9gia nem hajthat\u00F3 v\u00E9gre a megadott oszlopokra. +MergeColumnsUI.problems.less_than_2_columns_selected=Legal\u00E1bb egy oszlopot ki kell v\u00E1lasztani. +MergeColumnsUI.columnsToMergeLabel.text=\u00D6sszevonand\u00F3 oszlopok: +AddColumnUI.typeLabel.text=T\u00EDpus: +MergeColumnsUI.description.text=V\u00E1lassza ki az egyes\u00EDteni k\u00EDv\u00E1nt oszlopokat \u00E9s az egyes\u00EDt\u00E9si strat\u00E9gi\u00E1t. +AddColumnUI.descriptionLabel.text.nodes=Oszlop hozz\u00E1ad\u00E1sa a csom\u00F3pontokhoz +MergeColumnsUI.availableStrategiesLabel.text=Egyes\u00EDt\u00E9si strat\u00E9gia: +MergeColumnsUI.title=Oszlopok egyes\u00EDt\u00E9se +AddColumnUI.descriptionLabel.text.edges=Oszlop hozz\u00E1ad\u00E1sa az \u00E9lekhez +MergeColumnsUI.availableColumnsLabel.text=El\u00E9rhet\u0151 oszlopok: +AddColumnUI.titleLabel.text=C\u00EDm: diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_it.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_it.properties new file mode 100644 index 0000000000..0ceccfc80f --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_it.properties @@ -0,0 +1,17 @@ +AddColumnUI.title=Add column - Settings +AddColumnUI.descriptionLabel.text.nodes=Add column to nodes +AddColumnUI.descriptionLabel.text.edges=Add column to edges +AddColumnUI.typeLabel.text=Type: +AddColumnUI.titleTextField.text= +AddColumnUI.titleLabel.text=Title: +MergeColumnsUI.title=Merge columns +MergeColumnsUI.addColumnButton.text= +MergeColumnsUI.removeColumnButton.text= +MergeColumnsUI.availableColumnsLabel.text=Available columns: +MergeColumnsUI.columnsToMergeLabel.text=Columns to merge: +MergeColumnsUI.availableStrategiesLabel.text=Merge strategy: +MergeColumnsUI.description.text=Choose the columns to merge and a merge strategy. +MergeColumnsUI.problems.less_than_2_columns_selected=At least one column must be selected. +MergeColumnsUI.problems.not_executable_strategy=This merge strategy cannot be executed to the given columns. +#HINT_LayoutTopComponent= +MergeColumnsUI.infoLabel.text= diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_ja.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_ja.properties index 3fbaccf05f..cada0d80f9 100644 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_ja.properties +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_ja.properties @@ -1,47 +1,17 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-20 06\:35+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -AddColumnUI.title=\u5217\u3092\u8ffd\u52a0 - \u8a2d\u5b9a - -AddColumnUI.descriptionLabel.text.nodes=\u30ce\u30fc\u30c9\u306b\u5217\u3092\u8ffd\u52a0 - -AddColumnUI.descriptionLabel.text.edges=\u8fba\u306b\u5217\u3092\u8ffd\u52a0 - -AddColumnUI.typeLabel.text=\u7a2e\u985e\: - -AddColumnUI.titleLabel.text=\u30bf\u30a4\u30c8\u30eb\: - -MergeColumnsUI.title=\u5217\u3092\u4f75\u5408 - -MergeColumnsUI.availableColumnsLabel.text=\u5229\u7528\u53ef\u80fd\u306a\u5217\: - -MergeColumnsUI.columnsToMergeLabel.text=\u4f75\u5408\u3059\u308b\u5217\: - -MergeColumnsUI.availableStrategiesLabel.text=\u4f75\u5408\u6226\u7565\: - -MergeColumnsUI.description.text=\u4f75\u5408\u3059\u308b\u5217\u3068\u4f75\u5408\u6226\u7565\u3092\u9078\u629e\u3002 - -MergeColumnsUI.problems.less_than_2_columns_selected=\u5c11\u306a\u304f\u3068\u3082\u4e00\u3064\u306e\u5217\u3092\u9078\u629e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 - -MergeColumnsUI.problems.not_executable_strategy=\u3053\u306e\u4f75\u5408\u6226\u7565\u306f\u4e0e\u3048\u3089\u308c\u305f\u5217\u306b\u5b9f\u884c\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 - -CSVExportUI.title=\u8868\u3092CSV\u30d5\u30a1\u30a4\u30eb\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 - -CSVExportUI.separatorLabel.text=\u30bb\u30d1\u30ec\u30fc\u30bf\: - -CSVExportUI.comma=\u30b3\u30f3\u30de - -CSVExportUI.semicolon=\u30bb\u30df\u30b3\u30ed\u30f3 - -CSVExportUI.space=\u30b9\u30da\u30fc\u30b9 - -CSVExportUI.tab=\u30bf\u30d6 - -CSVExportUI.columnsLabel.text=\u5217\: - -CSVExportUI.charsetLabel.text=\u6587\u5b57\u30bb\u30c3\u30c8\: +AddColumnUI.title=\u5217\u3092\u8ffd\u52a0 - \u8a2d\u5b9a +AddColumnUI.descriptionLabel.text.nodes=\u30ce\u30fc\u30c9\u306b\u5217\u3092\u8ffd\u52a0 +AddColumnUI.descriptionLabel.text.edges=\u8fba\u306b\u5217\u3092\u8ffd\u52a0 +AddColumnUI.typeLabel.text=\u7a2e\u985e: +AddColumnUI.titleTextField.text= +AddColumnUI.titleLabel.text=\u30bf\u30a4\u30c8\u30eb: +MergeColumnsUI.title=\u5217\u3092\u4f75\u5408 +MergeColumnsUI.addColumnButton.text= +MergeColumnsUI.removeColumnButton.text= +MergeColumnsUI.availableColumnsLabel.text=\u5229\u7528\u53ef\u80fd\u306a\u5217: +MergeColumnsUI.columnsToMergeLabel.text=\u4f75\u5408\u3059\u308b\u5217: +MergeColumnsUI.availableStrategiesLabel.text=\u4f75\u5408\u6226\u7565: +MergeColumnsUI.description.text=\u4f75\u5408\u3059\u308b\u5217\u3068\u4f75\u5408\u6226\u7565\u3092\u9078\u629e\u3002 +MergeColumnsUI.problems.less_than_2_columns_selected=\u5c11\u306a\u304f\u3068\u3082\u4e00\u3064\u306e\u5217\u3092\u9078\u629e\u3059\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 +MergeColumnsUI.problems.not_executable_strategy=\u3053\u306e\u4f75\u5408\u6226\u7565\u306f\u4e0e\u3048\u3089\u308c\u305f\u5217\u306b\u5b9f\u884c\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 +#HINT_LayoutTopComponent= +MergeColumnsUI.infoLabel.text= diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_ko.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_ko.properties new file mode 100644 index 0000000000..7ff3806720 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_ko.properties @@ -0,0 +1,14 @@ + + +AddColumnUI.descriptionLabel.text.edges=\uC5E3\uC9C0\uC5D0 \uC5F4 \uCD94\uAC00\uD558\uAE30 +AddColumnUI.typeLabel.text=\uD0C0\uC785: +MergeColumnsUI.title=\uC5F4 \uBCD1\uD569\uD558\uAE30 +AddColumnUI.title=\uC5F4 \uCD94\uAC00 - \uC124\uC815 +MergeColumnsUI.availableColumnsLabel.text=\uC0AC\uC6A9 \uAC00\uB2A5\uD55C \uC5F4: +AddColumnUI.descriptionLabel.text.nodes=\uB178\uB4DC\uC5D0 \uC5F4 \uCD94\uAC00\uD558\uAE30 +AddColumnUI.titleLabel.text=\uC81C\uBAA9: +MergeColumnsUI.columnsToMergeLabel.text=\uBCD1\uD569\uD560 \uC5F4: +MergeColumnsUI.availableStrategiesLabel.text=\uBCD1\uD569 \uBC29\uBC95: +MergeColumnsUI.problems.not_executable_strategy=\uC774 \uBCD1\uD569 \uBC29\uBC95\uC740 \uC9C0\uC815\uB41C \uC5F4\uC5D0 \uB300\uD574 \uC2E4\uD589\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. +MergeColumnsUI.description.text=\uBCD1\uD569\uD560 \uC5F4\uACFC \uBCD1\uD569 \uBC29\uBC95\uC744 \uC120\uD0DD\uD558\uC138\uC694. +MergeColumnsUI.problems.less_than_2_columns_selected=\uC801\uC5B4\uB3C4 \uD558\uB098\uC758 \uC5F4\uC740 \uC120\uD0DD\uD574\uC57C \uD569\uB2C8\uB2E4. diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_nl.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_nl.properties new file mode 100644 index 0000000000..818a90ecf3 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_nl.properties @@ -0,0 +1,17 @@ +AddColumnUI.title=Kolom toevoegen - Instellingen +AddColumnUI.descriptionLabel.text.nodes=Kolom aan knopen toevoegen +AddColumnUI.descriptionLabel.text.edges=Add column to edges +AddColumnUI.typeLabel.text=Type: +AddColumnUI.titleTextField.text= +AddColumnUI.titleLabel.text=Titel: +MergeColumnsUI.title=Kolommen samenvoegen +MergeColumnsUI.addColumnButton.text= +MergeColumnsUI.removeColumnButton.text= +MergeColumnsUI.availableColumnsLabel.text=Beschikbare kolommen: +MergeColumnsUI.columnsToMergeLabel.text=Samen te voegen kolommen: +MergeColumnsUI.availableStrategiesLabel.text=Merge strategy: +MergeColumnsUI.description.text=Choose the columns to merge and a merge strategy. +MergeColumnsUI.problems.less_than_2_columns_selected=At least one column must be selected. +MergeColumnsUI.problems.not_executable_strategy=This merge strategy cannot be executed to the given columns. +#HINT_LayoutTopComponent= +MergeColumnsUI.infoLabel.text= diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_pt_BR.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_pt_BR.properties index 8f4d85bbdd..70b3a22e90 100644 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_pt_BR.properties +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_pt_BR.properties @@ -1,47 +1,17 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 11\:43+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -AddColumnUI.title=Adicionar coluna - Configura\u00e7\u00f5es - -AddColumnUI.descriptionLabel.text.nodes=Adicionar coluna \u00e0 tabela de n\u00f3s - -AddColumnUI.descriptionLabel.text.edges=Adicionar coluna \u00e0 tabela de arestas - -AddColumnUI.typeLabel.text=Tipo\: - -AddColumnUI.titleLabel.text=T\u00edtulo\: - -MergeColumnsUI.title=Mesclar colunas - -MergeColumnsUI.availableColumnsLabel.text=Colunas dispon\u00edveis\: - -MergeColumnsUI.columnsToMergeLabel.text=Colunas para mesclar\: - -MergeColumnsUI.availableStrategiesLabel.text=Estrat\u00e9gia de mesclagem\: - -MergeColumnsUI.description.text= Escolha as colunas para mesclar e uma estrat\u00e9gia de mesclagem. - -MergeColumnsUI.problems.less_than_2_columns_selected=Pelo menos uma coluna deve ser selecionada. - -MergeColumnsUI.problems.not_executable_strategy=Esta estrat\u00e9gia de mesclagem n\u00e3o pode ser executada para as colunas selecionadas. - -CSVExportUI.title=Exportar tabela para arquivo CSV - -CSVExportUI.separatorLabel.text=Separador\: - -CSVExportUI.comma=V\u00edrgula - -CSVExportUI.semicolon=Ponto e v\u00edrgula - -CSVExportUI.space=Espa\u00e7o - -CSVExportUI.tab=Tabula\u00e7\u00e3o - -CSVExportUI.columnsLabel.text=Colunas\: - -CSVExportUI.charsetLabel.text=Codifica\u00e7\u00e3o de caracteres\: +AddColumnUI.title=Adicionar coluna - Configuraηυes +AddColumnUI.descriptionLabel.text.nodes=Adicionar coluna ΰ tabela de nσs +AddColumnUI.descriptionLabel.text.edges=Adicionar coluna ΰ tabela de arestas +AddColumnUI.typeLabel.text=Tipo: +AddColumnUI.titleTextField.text= +AddColumnUI.titleLabel.text=Tνtulo: +MergeColumnsUI.title=Mesclar colunas +MergeColumnsUI.addColumnButton.text= +MergeColumnsUI.removeColumnButton.text= +MergeColumnsUI.availableColumnsLabel.text=Colunas disponνveis: +MergeColumnsUI.columnsToMergeLabel.text=Colunas para mesclar: +MergeColumnsUI.availableStrategiesLabel.text=Estratιgia de mesclagem: +MergeColumnsUI.description.text= Escolha as colunas para mesclar e uma estratιgia de mesclagem. +MergeColumnsUI.problems.less_than_2_columns_selected=Pelo menos uma coluna deve ser selecionada. +MergeColumnsUI.problems.not_executable_strategy=Esta estratιgia de mesclagem nγo pode ser executada para as colunas selecionadas. +#HINT_LayoutTopComponent= +MergeColumnsUI.infoLabel.text= diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_ro.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_ro.properties new file mode 100644 index 0000000000..4e6d244b13 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_ro.properties @@ -0,0 +1,14 @@ + + +AddColumnUI.title=Adaug\u0103 coloan\u0103 - Set\u0103ri +AddColumnUI.descriptionLabel.text.nodes=Adaug\u0103 coloan\u0103 nodurilor +AddColumnUI.typeLabel.text=Tip: +AddColumnUI.titleLabel.text=Titlu: +MergeColumnsUI.availableStrategiesLabel.text=Strategie de \u00EEmbinare: +AddColumnUI.descriptionLabel.text.edges=Adaug\u0103 coloan\u0103 muchiilor +MergeColumnsUI.availableColumnsLabel.text=Coloane disponibile: +MergeColumnsUI.columnsToMergeLabel.text=Coloane de \u00EEmbinat: +MergeColumnsUI.title=\u00CEmbin\u0103 coloane +MergeColumnsUI.description.text=Alege coloanele de \u00EEmbinat \u0219i o strategie de \u00EEmbinare. +MergeColumnsUI.problems.less_than_2_columns_selected=Trebuie selectat\u0103 cel pu\u021Bin o coloan\u0103. +MergeColumnsUI.problems.not_executable_strategy=Aceast\u0103 strategie de \u00EEmbinare nu poate fi executat\u0103 pe coloanele date. diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_ru.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_ru.properties index c1b923e0bd..306a2cf138 100644 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_ru.properties +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_ru.properties @@ -1,47 +1,17 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-11-18 07\:16+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - AddColumnUI.title=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 - \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 - AddColumnUI.descriptionLabel.text.nodes=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u043a \u0443\u0437\u043b\u0430\u043c - AddColumnUI.descriptionLabel.text.edges=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u043a \u0440\u0451\u0431\u0440\u0430\u043c - -AddColumnUI.typeLabel.text=\u0422\u0438\u043f\: - -AddColumnUI.titleLabel.text=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\: - -MergeColumnsUI.title=\u0421\u043a\u043b\u0435\u0438\u0442\u044c \u0441\u0442\u043e\u043b\u0431\u0446\u044b - -MergeColumnsUI.availableColumnsLabel.text=\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b\: - -MergeColumnsUI.columnsToMergeLabel.text=\u0421\u0442\u043e\u043b\u0431\u0446\u044b \u0434\u043b\u044f \u0441\u043a\u043b\u0435\u0439\u043a\u0438\: - -MergeColumnsUI.availableStrategiesLabel.text=\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u043a\u043b\u0435\u0439\u043a\u0438\: - -MergeColumnsUI.description.text=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b \u0434\u043b\u044f \u0441\u043a\u043b\u0435\u0439\u043a\u0438 \u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u043a\u043b\u0435\u0439\u043a\u0438. - +AddColumnUI.typeLabel.text=\u0422\u0438\u043f: +AddColumnUI.titleTextField.text= +AddColumnUI.titleLabel.text=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435: +MergeColumnsUI.title=\u041E\u0431\u044A\u0435\u0434\u0438\u043D\u0438\u0442\u044C \u0441\u0442\u043E\u043B\u0431\u0446\u044B +MergeColumnsUI.addColumnButton.text= +MergeColumnsUI.removeColumnButton.text= +MergeColumnsUI.availableColumnsLabel.text=\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u044b: +MergeColumnsUI.columnsToMergeLabel.text=\u0421\u0442\u043E\u043B\u0431\u0446\u044B \u0434\u043B\u044F \u043E\u0431\u044A\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F: +MergeColumnsUI.availableStrategiesLabel.text=\u0410\u043B\u0433\u043E\u0440\u0438\u0442\u043C \u043E\u0431\u044A\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F: +MergeColumnsUI.description.text=\u0412\u044B\u0431\u0435\u0440\u0438\u0442\u0435 \u0441\u0442\u043E\u043B\u0431\u0446\u044B \u0434\u043B\u044F \u043E\u0431\u044A\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F \u0438 \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C \u043E\u0431\u044A\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F. MergeColumnsUI.problems.less_than_2_columns_selected=\u0414\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u043e\u0434\u0438\u043d \u0441\u0442\u043e\u043b\u0431\u0435\u0446. - -MergeColumnsUI.problems.not_executable_strategy=\u042d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0441\u043a\u043b\u0435\u0439\u043a\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d \u043a \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u043c \u0441\u0442\u043e\u043b\u0431\u0446\u0430\u043c. - -CSVExportUI.title=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 CSV-\u0444\u0430\u0439\u043b - -CSVExportUI.separatorLabel.text=\u0420\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u0435\u043b\u044c\: - -CSVExportUI.comma=\u0437\u0430\u043f\u044f\u0442\u0430\u044f - -CSVExportUI.semicolon=\u0442\u043e\u0447\u043a\u0430 \u0441 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 - -CSVExportUI.space=\u043f\u0440\u043e\u0431\u0435\u043b - -CSVExportUI.tab=\u0442\u0430\u0431\u0443\u043b\u044f\u0446\u0438\u044f - -CSVExportUI.columnsLabel.text=\u0421\u0442\u043e\u043b\u0431\u0446\u044b\: - -CSVExportUI.charsetLabel.text=\u041a\u043e\u0434\u0438\u0440\u043e\u0432\u043a\u0430\: +MergeColumnsUI.problems.not_executable_strategy=\u042D\u0442\u043E\u0442 \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C \u043E\u0431\u044A\u0435\u0434\u0438\u043D\u0435\u043D\u0438\u044F \u043D\u0435 \u043C\u043E\u0436\u0435\u0442 \u0431\u044B\u0442\u044C \u043F\u0440\u0438\u043C\u0435\u043D\u0435\u043D \u043A \u0432\u044B\u0431\u0440\u0430\u043D\u043D\u044B\u043C \u0441\u0442\u043E\u043B\u0431\u0446\u0430\u043C. +#HINT_LayoutTopComponent= +MergeColumnsUI.infoLabel.text= diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_th.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_tr.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_tr.properties new file mode 100644 index 0000000000..b17fa5d1ca --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_tr.properties @@ -0,0 +1,17 @@ +AddColumnUI.title=Add column - Settings +AddColumnUI.descriptionLabel.text.nodes=Add column to nodes +AddColumnUI.descriptionLabel.text.edges=Add column to edges +AddColumnUI.typeLabel.text=Type: +AddColumnUI.titleTextField.text= +AddColumnUI.titleLabel.text=Ba\u015fl\u0131k: +MergeColumnsUI.title=Merge columns +MergeColumnsUI.addColumnButton.text= +MergeColumnsUI.removeColumnButton.text= +MergeColumnsUI.availableColumnsLabel.text=Available columns: +MergeColumnsUI.columnsToMergeLabel.text=Columns to merge: +MergeColumnsUI.availableStrategiesLabel.text=Merge strategy: +MergeColumnsUI.description.text=Choose the columns to merge and a merge strategy. +MergeColumnsUI.problems.less_than_2_columns_selected=At least one column must be selected. +MergeColumnsUI.problems.not_executable_strategy=This merge strategy cannot be executed to the given columns. +#HINT_LayoutTopComponent= +MergeColumnsUI.infoLabel.text= diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_uk.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_uk.properties new file mode 100644 index 0000000000..1a0c1cb380 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_uk.properties @@ -0,0 +1,16 @@ +MergeColumnsUI.removeColumnButton.text=\u0406 +MergeColumnsUI.availableColumnsLabel.text=\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u0456 \u0441\u0442\u043E\u0432\u043F\u0446\u0456: +AddColumnUI.titleLabel.text=\u041D\u0430\u0437\u0432\u0430: +MergeColumnsUI.title=\u041E\u0431\u2019\u0454\u0434\u043D\u0430\u0442\u0438 \u0441\u0442\u043E\u0432\u043F\u0446\u0456 +MergeColumnsUI.addColumnButton.text=\u0406 +AddColumnUI.typeLabel.text=\u0422\u0438\u043F: +AddColumnUI.descriptionLabel.text.edges=\u0414\u043E\u0434\u0430\u0442\u0438 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C \u0434\u043E \u043A\u0440\u0430\u0457\u0432 +AddColumnUI.titleTextField.text=\u0406 +MergeColumnsUI.problems.less_than_2_columns_selected=\u041D\u0435\u043E\u0431\u0445\u0456\u0434\u043D\u043E \u0432\u0438\u0431\u0440\u0430\u0442\u0438 \u043F\u0440\u0438\u043D\u0430\u0439\u043C\u043D\u0456 \u043E\u0434\u0438\u043D \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C. +MergeColumnsUI.problems.not_executable_strategy=\u0426\u044E \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0456\u044E \u043E\u0431\u2019\u0454\u0434\u043D\u0430\u043D\u043D\u044F \u043D\u0435\u043C\u043E\u0436\u043B\u0438\u0432\u043E \u0432\u0438\u043A\u043E\u043D\u0430\u0442\u0438 \u0434\u043B\u044F \u0432\u043A\u0430\u0437\u0430\u043D\u0438\u0445 \u0441\u0442\u043E\u0432\u043F\u0446\u0456\u0432. +AddColumnUI.title=\u0414\u043E\u0434\u0430\u0442\u0438 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C - \u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F +AddColumnUI.descriptionLabel.text.nodes=\u0414\u043E\u0434\u0430\u0442\u0438 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C \u0434\u043E \u0432\u0443\u0437\u043B\u0456\u0432 +MergeColumnsUI.columnsToMergeLabel.text=\u0421\u0442\u043E\u0432\u043F\u0446\u0456 \u0434\u043B\u044F \u043E\u0431\u2019\u0454\u0434\u043D\u0430\u043D\u043D\u044F: +MergeColumnsUI.availableStrategiesLabel.text=\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0456\u044F \u0437\u043B\u0438\u0442\u0442\u044F: +MergeColumnsUI.description.text=\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044C \u0441\u0442\u043E\u0432\u043F\u0446\u0456 \u0434\u043B\u044F \u043E\u0431\u2019\u0454\u0434\u043D\u0430\u043D\u043D\u044F \u0442\u0430 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0456\u044E \u043E\u0431\u2019\u0454\u0434\u043D\u0430\u043D\u043D\u044F. +MergeColumnsUI.infoLabel.text=\u0406 diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_zh_CN.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_zh_CN.properties index ce18eea09c..24485851cf 100644 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_zh_CN.properties +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_zh_CN.properties @@ -1,46 +1,17 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:17+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - AddColumnUI.title=\u6dfb\u52a0\u5217-\u8bbe\u7f6e - AddColumnUI.descriptionLabel.text.nodes=\u6dfb\u52a0\u8282\u70b9\u5217 - AddColumnUI.descriptionLabel.text.edges=\u6dfb\u52a0\u8fb9 - AddColumnUI.typeLabel.text=\u7c7b\u578b\uff1a - +AddColumnUI.titleTextField.text= AddColumnUI.titleLabel.text=\u6807\u9898\uff1a - -MergeColumnsUI.title=\u5408\u5e76\u5217\uff1a - +MergeColumnsUI.title=\u5408\u5E76\u5217 +MergeColumnsUI.addColumnButton.text= +MergeColumnsUI.removeColumnButton.text= MergeColumnsUI.availableColumnsLabel.text=\u53ef\u80fd\u7684\u5217\uff1a - MergeColumnsUI.columnsToMergeLabel.text=\u8981\u5408\u5e76\u7684\u5217\uff1a - MergeColumnsUI.availableStrategiesLabel.text=\u5408\u5e76\u65b9\u6cd5\uff1a - MergeColumnsUI.description.text=\u9009\u62e9\u5408\u5e76\u7684\u5217\u548c\u5408\u5e76\u65b9\u6cd5\u3002 - MergeColumnsUI.problems.less_than_2_columns_selected=\u81f3\u5c11\u9009\u62e9\u4e00\u5217\u3002 - MergeColumnsUI.problems.not_executable_strategy=\u8fd9\u4e2a\u5408\u5e76\u65b9\u6cd5\u4e0d\u80fd\u6267\u884c\u3002 - -CSVExportUI.title=\u8f93\u51fa\u8868\u683c\u5230CSV\u6587\u4ef6\u3002 - -CSVExportUI.separatorLabel.text=\u5206\u9694\u7b26\uff1a - -CSVExportUI.comma=\u9017\u53f7 - -CSVExportUI.semicolon=\u5206\u53f7 - -CSVExportUI.space=\u7a7a\u683c - -CSVExportUI.tab=\u5236\u8868\u7b26Tab - -CSVExportUI.columnsLabel.text=\u5217\uff1a - -CSVExportUI.charsetLabel.text=\u5b57\u7b26\u96c6\uff1a +#HINT_LayoutTopComponent= +MergeColumnsUI.infoLabel.text= diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_zh_TW.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_zh_TW.properties new file mode 100644 index 0000000000..0ceccfc80f --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/Bundle_zh_TW.properties @@ -0,0 +1,17 @@ +AddColumnUI.title=Add column - Settings +AddColumnUI.descriptionLabel.text.nodes=Add column to nodes +AddColumnUI.descriptionLabel.text.edges=Add column to edges +AddColumnUI.typeLabel.text=Type: +AddColumnUI.titleTextField.text= +AddColumnUI.titleLabel.text=Title: +MergeColumnsUI.title=Merge columns +MergeColumnsUI.addColumnButton.text= +MergeColumnsUI.removeColumnButton.text= +MergeColumnsUI.availableColumnsLabel.text=Available columns: +MergeColumnsUI.columnsToMergeLabel.text=Columns to merge: +MergeColumnsUI.availableStrategiesLabel.text=Merge strategy: +MergeColumnsUI.description.text=Choose the columns to merge and a merge strategy. +MergeColumnsUI.problems.less_than_2_columns_selected=At least one column must be selected. +MergeColumnsUI.problems.not_executable_strategy=This merge strategy cannot be executed to the given columns. +#HINT_LayoutTopComponent= +MergeColumnsUI.infoLabel.text= diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/cs.po b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/cs.po deleted file mode 100644 index 40f0d20876..0000000000 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/cs.po +++ /dev/null @@ -1,79 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-26 18:19+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "AddColumnUI.title" -msgstr "PΕ™idat sloupec - NastavenΓ­" - -msgid "AddColumnUI.descriptionLabel.text.nodes" -msgstr "PΕ™idat sloupec k uzlΕ―m" - -msgid "AddColumnUI.descriptionLabel.text.edges" -msgstr "PΕ™idat sloupec k hranΓ‘m" - -msgid "AddColumnUI.typeLabel.text" -msgstr "Typ:" - -msgid "AddColumnUI.titleLabel.text" -msgstr "NΓ‘zev:" - -msgid "MergeColumnsUI.title" -msgstr "Sloučit sloupce" - -msgid "MergeColumnsUI.availableColumnsLabel.text" -msgstr "DostupnΓ© sloupce:" - -msgid "MergeColumnsUI.columnsToMergeLabel.text" -msgstr "Sloupce ke sloučenΓ­:" - -msgid "MergeColumnsUI.availableStrategiesLabel.text" -msgstr "Strategie sloučenΓ­:" - -msgid "MergeColumnsUI.description.text" -msgstr "Zvolte sloupce ke sloučenΓ­ a jeho strategii." - -msgid "MergeColumnsUI.problems.less_than_2_columns_selected" -msgstr "MusΓ­ bΓ½t zvolen alespoň jeden sloupec." - -msgid "MergeColumnsUI.problems.not_executable_strategy" -msgstr "Tato strategie sloučenΓ­ nemΕ―ΕΎe bΓ½t pouΕΎita na zvolenΓ© sloupce." - -msgid "CSVExportUI.title" -msgstr "Exportovat tabulku do souboru CSV" - -msgid "CSVExportUI.separatorLabel.text" -msgstr "OddΔ›lovač:" - -msgid "CSVExportUI.comma" -msgstr "ČÑrka" - -msgid "CSVExportUI.semicolon" -msgstr "StΕ™ednΓ­k" - -msgid "CSVExportUI.space" -msgstr "Mezera" - -msgid "CSVExportUI.tab" -msgstr "TabulΓ‘tor" - -msgid "CSVExportUI.columnsLabel.text" -msgstr "Sloupce:" - -msgid "CSVExportUI.charsetLabel.text" -msgstr "ZnakovΓ‘ sada:" diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/es.po b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/es.po deleted file mode 100644 index 68b947c03c..0000000000 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/es.po +++ /dev/null @@ -1,79 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:09+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "AddColumnUI.title" -msgstr "AΓ±adir nueva columna - ParΓ‘metros" - -msgid "AddColumnUI.descriptionLabel.text.nodes" -msgstr "AΓ±adir nueva columna a la tabla de nodos" - -msgid "AddColumnUI.descriptionLabel.text.edges" -msgstr "AΓ±adir nueva columna a la tabla de aristas" - -msgid "AddColumnUI.typeLabel.text" -msgstr "Tipo de la columna:" - -msgid "AddColumnUI.titleLabel.text" -msgstr "TΓ­tulo de la columna" - -msgid "MergeColumnsUI.title" -msgstr "Mezclar columnas" - -msgid "MergeColumnsUI.availableColumnsLabel.text" -msgstr "Columnas disponibles:" - -msgid "MergeColumnsUI.columnsToMergeLabel.text" -msgstr "Columnas a mezclar:" - -msgid "MergeColumnsUI.availableStrategiesLabel.text" -msgstr "Estrategias de mezclado disponibles:" - -msgid "MergeColumnsUI.description.text" -msgstr "Elige las columnas a mezclar y una estrategia de mezclado" - -msgid "MergeColumnsUI.problems.less_than_2_columns_selected" -msgstr "Al menos 1 columna debe ser seleccionada para mezclar" - -msgid "MergeColumnsUI.problems.not_executable_strategy" -msgstr "La estrategia seleccionada no puede ser ejecutada con las columnas escogidas para mezclar" - -msgid "CSVExportUI.title" -msgstr "Exportar tabla a CSV" - -msgid "CSVExportUI.separatorLabel.text" -msgstr "Separador:" - -msgid "CSVExportUI.comma" -msgstr "Coma" - -msgid "CSVExportUI.semicolon" -msgstr "Punto y coma" - -msgid "CSVExportUI.space" -msgstr "Espacio" - -msgid "CSVExportUI.tab" -msgstr "Tabulador" - -msgid "CSVExportUI.columnsLabel.text" -msgstr "Columnas a exportar:" - -msgid "CSVExportUI.charsetLabel.text" -msgstr "Conjunto de caracteres:" diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/fr.po b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/fr.po deleted file mode 100644 index 3a539438ce..0000000000 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/fr.po +++ /dev/null @@ -1,79 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:09+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "AddColumnUI.title" -msgstr "Ajouter une colonne - ParamΓ¨tres" - -msgid "AddColumnUI.descriptionLabel.text.nodes" -msgstr "Ajouter une colonne aux noeuds" - -msgid "AddColumnUI.descriptionLabel.text.edges" -msgstr "Ajouter une colonne aux liens" - -msgid "AddColumnUI.typeLabel.text" -msgstr "Type de colonne :" - -msgid "AddColumnUI.titleLabel.text" -msgstr "Titre de colonne :" - -msgid "MergeColumnsUI.title" -msgstr "Fusionner les colonnes" - -msgid "MergeColumnsUI.availableColumnsLabel.text" -msgstr "Colonnes disponibles :" - -msgid "MergeColumnsUI.columnsToMergeLabel.text" -msgstr "Colonnes Γ  fusionner :" - -msgid "MergeColumnsUI.availableStrategiesLabel.text" -msgstr "StratΓ©gies de fusion possibles :" - -msgid "MergeColumnsUI.description.text" -msgstr "Choisissez les colonnes Γ  fusionner et la stratΓ©gie de fusion" - -msgid "MergeColumnsUI.problems.less_than_2_columns_selected" -msgstr "Au moins une colonne doit Γͺtre sΓ©lectionnΓ©e" - -msgid "MergeColumnsUI.problems.not_executable_strategy" -msgstr "Cette stratΓ©gie ne peut Γͺtre exΓ©cutΓ©e sur ces colonnes" - -msgid "CSVExportUI.title" -msgstr "Exporter la table en CSV" - -msgid "CSVExportUI.separatorLabel.text" -msgstr "SΓ©parateur :" - -msgid "CSVExportUI.comma" -msgstr "Virgule" - -msgid "CSVExportUI.semicolon" -msgstr "Point-virgule" - -msgid "CSVExportUI.space" -msgstr "Espace" - -msgid "CSVExportUI.tab" -msgstr "Tabulation" - -msgid "CSVExportUI.columnsLabel.text" -msgstr "Colonnes Γ  exporter :" - -msgid "CSVExportUI.charsetLabel.text" -msgstr "Encodage :" diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/ja.po b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/ja.po deleted file mode 100644 index 8cc931e18d..0000000000 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/ja.po +++ /dev/null @@ -1,79 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-20 06:35+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "AddColumnUI.title" -msgstr "εˆ—γ‚’θΏ½εŠ  - θ¨­εš" - -msgid "AddColumnUI.descriptionLabel.text.nodes" -msgstr "γƒŽγƒΌγƒ‰γ«εˆ—γ‚’θΏ½εŠ " - -msgid "AddColumnUI.descriptionLabel.text.edges" -msgstr "θΎΊγ«εˆ—γ‚’θΏ½εŠ " - -msgid "AddColumnUI.typeLabel.text" -msgstr "η¨ι‘ž:" - -msgid "AddColumnUI.titleLabel.text" -msgstr "γ‚Ώγ‚€γƒˆγƒ«:" - -msgid "MergeColumnsUI.title" -msgstr "εˆ—γ‚’δ½΅εˆ" - -msgid "MergeColumnsUI.availableColumnsLabel.text" -msgstr "εˆ©η”¨ε―θƒ½γͺεˆ—:" - -msgid "MergeColumnsUI.columnsToMergeLabel.text" -msgstr "δ½΅εˆγ™γ‚‹εˆ—:" - -msgid "MergeColumnsUI.availableStrategiesLabel.text" -msgstr "佡合戦η•₯:" - -msgid "MergeColumnsUI.description.text" -msgstr "δ½΅εˆγ™γ‚‹εˆ—γ¨δ½΅εˆζˆ¦η•₯γ‚’ιΈζŠžγ€‚" - -msgid "MergeColumnsUI.problems.less_than_2_columns_selected" -msgstr "ε°‘γͺくとも一぀γεˆ—γ‚’ιΈζŠžγ™γ‚‹εΏ…θ¦γŒγ‚γ‚ŠγΎγ™γ€‚" - -msgid "MergeColumnsUI.problems.not_executable_strategy" -msgstr "こγδ½΅εˆζˆ¦η•₯γ―δΈŽγˆγ‚‰γ‚ŒγŸεˆ—γ«εŸθ‘Œγ™γ‚‹γ“とはできません。" - -msgid "CSVExportUI.title" -msgstr "葨をCSVγƒ•γ‚‘γ‚€γƒ«γ«γ‚¨γ‚―γ‚ΉγƒγƒΌγƒˆ" - -msgid "CSVExportUI.separatorLabel.text" -msgstr "セパレータ:" - -msgid "CSVExportUI.comma" -msgstr "γ‚³γƒ³γƒž" - -msgid "CSVExportUI.semicolon" -msgstr "γ‚»γƒŸγ‚³γƒ­γƒ³" - -msgid "CSVExportUI.space" -msgstr "γ‚ΉγƒšγƒΌγ‚Ή" - -msgid "CSVExportUI.tab" -msgstr "γ‚Ώγƒ–" - -msgid "CSVExportUI.columnsLabel.text" -msgstr "εˆ—:" - -msgid "CSVExportUI.charsetLabel.text" -msgstr "ζ–‡ε­—γ‚»γƒƒγƒˆ:" diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/org-gephi-desktop-datalab-general-actions.pot b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/org-gephi-desktop-datalab-general-actions.pot deleted file mode 100644 index 44ae4e2964..0000000000 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/org-gephi-desktop-datalab-general-actions.pot +++ /dev/null @@ -1,76 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "AddColumnUI.title" -msgstr "Add column - Settings" - -msgid "AddColumnUI.descriptionLabel.text.nodes" -msgstr "Add column to nodes" - -msgid "AddColumnUI.descriptionLabel.text.edges" -msgstr "Add column to edges" - -msgid "AddColumnUI.typeLabel.text" -msgstr "Type:" - -msgid "AddColumnUI.titleLabel.text" -msgstr "Title:" - -msgid "MergeColumnsUI.title" -msgstr "Merge columns" - -msgid "MergeColumnsUI.availableColumnsLabel.text" -msgstr "Available columns:" - -msgid "MergeColumnsUI.columnsToMergeLabel.text" -msgstr "Columns to merge:" - -msgid "MergeColumnsUI.availableStrategiesLabel.text" -msgstr "Merge strategy:" - -msgid "MergeColumnsUI.description.text" -msgstr "Choose the columns to merge and a merge strategy." - -msgid "MergeColumnsUI.problems.less_than_2_columns_selected" -msgstr "At least one column must be selected." - -msgid "MergeColumnsUI.problems.not_executable_strategy" -msgstr "This merge strategy cannot be executed to the given columns." - -msgid "CSVExportUI.title" -msgstr "Export table to CSV file" - -msgid "CSVExportUI.separatorLabel.text" -msgstr "Separator:" - -msgid "CSVExportUI.comma" -msgstr "Comma" - -msgid "CSVExportUI.semicolon" -msgstr "Semicolon" - -msgid "CSVExportUI.space" -msgstr "Space" - -msgid "CSVExportUI.tab" -msgstr "Tab" - -msgid "CSVExportUI.columnsLabel.text" -msgstr "Columns:" - -msgid "CSVExportUI.charsetLabel.text" -msgstr "Charset:" diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/pt_BR.po b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/pt_BR.po deleted file mode 100644 index 3b7b790b8c..0000000000 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/pt_BR.po +++ /dev/null @@ -1,79 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 11:43+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "AddColumnUI.title" -msgstr "Adicionar coluna - ConfiguraΓ§Γ΅es" - -msgid "AddColumnUI.descriptionLabel.text.nodes" -msgstr "Adicionar coluna Γ  tabela de nΓ³s" - -msgid "AddColumnUI.descriptionLabel.text.edges" -msgstr "Adicionar coluna Γ  tabela de arestas" - -msgid "AddColumnUI.typeLabel.text" -msgstr "Tipo:" - -msgid "AddColumnUI.titleLabel.text" -msgstr "TΓ­tulo:" - -msgid "MergeColumnsUI.title" -msgstr "Mesclar colunas" - -msgid "MergeColumnsUI.availableColumnsLabel.text" -msgstr "Colunas disponΓ­veis:" - -msgid "MergeColumnsUI.columnsToMergeLabel.text" -msgstr "Colunas para mesclar:" - -msgid "MergeColumnsUI.availableStrategiesLabel.text" -msgstr "EstratΓ©gia de mesclagem:" - -msgid "MergeColumnsUI.description.text" -msgstr " Escolha as colunas para mesclar e uma estratΓ©gia de mesclagem. " - -msgid "MergeColumnsUI.problems.less_than_2_columns_selected" -msgstr "Pelo menos uma coluna deve ser selecionada." - -msgid "MergeColumnsUI.problems.not_executable_strategy" -msgstr "Esta estratΓ©gia de mesclagem nΓ£o pode ser executada para as colunas selecionadas." - -msgid "CSVExportUI.title" -msgstr "Exportar tabela para arquivo CSV" - -msgid "CSVExportUI.separatorLabel.text" -msgstr "Separador:" - -msgid "CSVExportUI.comma" -msgstr "VΓ­rgula" - -msgid "CSVExportUI.semicolon" -msgstr "Ponto e vΓ­rgula" - -msgid "CSVExportUI.space" -msgstr "EspaΓ§o" - -msgid "CSVExportUI.tab" -msgstr "TabulaΓ§Γ£o" - -msgid "CSVExportUI.columnsLabel.text" -msgstr "Colunas:" - -msgid "CSVExportUI.charsetLabel.text" -msgstr "CodificaΓ§Γ£o de caracteres:" diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/ru.po b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/ru.po deleted file mode 100644 index c48f0d3d52..0000000000 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/ru.po +++ /dev/null @@ -1,79 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-11-18 07:16+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "AddColumnUI.title" -msgstr "Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ столбСц - Настройки" - -msgid "AddColumnUI.descriptionLabel.text.nodes" -msgstr "Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ столбСц ΠΊ ΡƒΠ·Π»Π°ΠΌ" - -msgid "AddColumnUI.descriptionLabel.text.edges" -msgstr "Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ столбСц ΠΊ Ρ€Ρ‘Π±Ρ€Π°ΠΌ" - -msgid "AddColumnUI.typeLabel.text" -msgstr "Π’ΠΈΠΏ:" - -msgid "AddColumnUI.titleLabel.text" -msgstr "НазваниС:" - -msgid "MergeColumnsUI.title" -msgstr "Π‘ΠΊΠ»Π΅ΠΈΡ‚ΡŒ столбцы" - -msgid "MergeColumnsUI.availableColumnsLabel.text" -msgstr "ДоступныС столбцы:" - -msgid "MergeColumnsUI.columnsToMergeLabel.text" -msgstr "Π‘Ρ‚ΠΎΠ»Π±Ρ†Ρ‹ для склСйки:" - -msgid "MergeColumnsUI.availableStrategiesLabel.text" -msgstr "Алгоритм склСйки:" - -msgid "MergeColumnsUI.description.text" -msgstr "Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ столбцы для склСйки ΠΈ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ склСйки." - -msgid "MergeColumnsUI.problems.less_than_2_columns_selected" -msgstr "Π”ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½ ΠΊΠ°ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ ΠΎΠ΄ΠΈΠ½ столбСц." - -msgid "MergeColumnsUI.problems.not_executable_strategy" -msgstr "Π­Ρ‚ΠΎΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ склСйки Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ ΠΊ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌ столбцам." - -msgid "CSVExportUI.title" -msgstr "Π­ΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² CSV-Ρ„Π°ΠΉΠ»" - -msgid "CSVExportUI.separatorLabel.text" -msgstr "Π Π°Π·Π΄Π΅Π»ΠΈΡ‚Π΅Π»ΡŒ:" - -msgid "CSVExportUI.comma" -msgstr "запятая" - -msgid "CSVExportUI.semicolon" -msgstr "Ρ‚ΠΎΡ‡ΠΊΠ° с запятой" - -msgid "CSVExportUI.space" -msgstr "ΠΏΡ€ΠΎΠ±Π΅Π»" - -msgid "CSVExportUI.tab" -msgstr "табуляция" - -msgid "CSVExportUI.columnsLabel.text" -msgstr "Π‘Ρ‚ΠΎΠ»Π±Ρ†Ρ‹:" - -msgid "CSVExportUI.charsetLabel.text" -msgstr "ΠšΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠ°:" diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/zh_CN.po b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/zh_CN.po deleted file mode 100644 index 8e28c11a05..0000000000 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/general/actions/zh_CN.po +++ /dev/null @@ -1,78 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:17+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "AddColumnUI.title" -msgstr "ζ·»εŠ εˆ—-θΎη½" - -msgid "AddColumnUI.descriptionLabel.text.nodes" -msgstr "ζ·»εŠ θŠ‚η‚Ήεˆ—" - -msgid "AddColumnUI.descriptionLabel.text.edges" -msgstr "添加边" - -msgid "AddColumnUI.typeLabel.text" -msgstr "η±»εž‹οΌš" - -msgid "AddColumnUI.titleLabel.text" -msgstr "ζ ‡ι’˜οΌš" - -msgid "MergeColumnsUI.title" -msgstr "εˆεΉΆεˆ—οΌš" - -msgid "MergeColumnsUI.availableColumnsLabel.text" -msgstr "ε―θƒ½ηš„εˆ—οΌš" - -msgid "MergeColumnsUI.columnsToMergeLabel.text" -msgstr "θ¦εˆεΉΆηš„εˆ—οΌš" - -msgid "MergeColumnsUI.availableStrategiesLabel.text" -msgstr "εˆεΉΆζ–Ήζ³•οΌš" - -msgid "MergeColumnsUI.description.text" -msgstr "ι€‰ζ‹©εˆεΉΆηš„εˆ—ε’ŒεˆεΉΆζ–Ήζ³•γ€‚" - -msgid "MergeColumnsUI.problems.less_than_2_columns_selected" -msgstr "θ‡³ε°‘ι€‰ζ‹©δΈ€εˆ—γ€‚" - -msgid "MergeColumnsUI.problems.not_executable_strategy" -msgstr "θΏ™δΈͺεˆεΉΆζ–Ήζ³•δΈθƒ½ζ‰§θ‘Œγ€‚" - -msgid "CSVExportUI.title" -msgstr "θΎ“ε‡Ίθ‘¨ζ Όεˆ°CSV文仢。" - -msgid "CSVExportUI.separatorLabel.text" -msgstr "εˆ†ιš”η¬¦οΌš" - -msgid "CSVExportUI.comma" -msgstr "逗号" - -msgid "CSVExportUI.semicolon" -msgstr "εˆ†ε·" - -msgid "CSVExportUI.space" -msgstr "η©Ίζ Ό" - -msgid "CSVExportUI.tab" -msgstr "刢葨符Tab" - -msgid "CSVExportUI.columnsLabel.text" -msgstr "εˆ—οΌš" - -msgid "CSVExportUI.charsetLabel.text" -msgstr "ε­—η¬¦ι›†οΌš" diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/ja.po b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/ja.po deleted file mode 100644 index 69634e0fa2..0000000000 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/ja.po +++ /dev/null @@ -1,139 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:14+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "データε·₯房γγƒ†γƒΌγƒ–γƒ«γ‚³γƒ³γƒγƒΌγƒγƒ³γƒˆγ¨η·¨ι›†γƒ‘γƒγƒ«" - -msgid "CTL_DataTableAction" -msgstr "データ・テーブル" - -msgid "CTL_DataTableTopComponent" -msgstr "データ・テーブル" - -msgid "DataTableTopComponent.tableScrollPane.busyMessage" -msgstr "データγε–εΎ—..." - -msgid "DataTableTopComponent.tableScrollPane.error" -msgstr "γƒ‡γƒΌγ‚Ώγ‚’ε–εΎ—δΈ­γ«γ‚¨γƒ©γƒΌγŒη™Ίη”Ÿγ—γΎγ—γŸ..." - -msgid "DataTableTopComponent.labelFilter.text" -msgstr "フィルタ:" - -msgid "DataTableTopComponent.edgesButton.text" -msgstr "θΎΊ" - -msgid "DataTableTopComponent.nodesButton.text" -msgstr "γƒŽγƒΌγƒ‰" - -msgid "DataTableTopComponent.refreshButton.text" -msgstr "γƒͺフレッシγƒ₯" - -msgid "DataTableTopComponent.labelBanner.text" -msgstr "γƒ‡γƒΌγ‚Ώγ‚’ζ›΄ζ–°γ—γΎγ—γŸγ€‚γƒ†γƒΌγƒ–γƒ«γ‚’ζ›΄ζ–°γ—γΎγ™γ‹οΌŸ" - -msgid "DataTableTopComponent.filterTextField.toolTipText" -msgstr "ζ­£θ¦θ‘¨ηΎγŒθ¨±ε―γ•γ‚Œγ¦γ„γΎγ™" - -msgid "DataTableTopComponent.attributeColumnsPanel.title" -msgstr "ε±žζ€§εˆ—" - -msgid "DataTableTopComponent.RichToolTip.title.text" -msgstr "θͺ¬ζ˜Ž" - -msgid "DataTableTopComponent.addColumnButton.text" -msgstr "εˆ—γ‚’θΏ½εŠ " - -msgid "DataTableTopComponent.mergeColumnsButton.text" -msgstr "εˆ—γ‚’η΅±εˆ" - -msgid "DataTableTopComponent.dialogs.okButton.text" -msgstr "OK" - -msgid "DataTableTopComponent.general.actions.plugins.button.text" -msgstr "作ζ₯­γ‚’ηΆ™ηΆš" - -msgid "DataTableTopComponent.general.actions.plugins.group.name" -msgstr "グループ{0}" - -msgid "OpenIDE-Module-Short-Description" -msgstr "γƒ‡γƒΌγ‚Ώγƒ©γƒœγƒ©γƒˆγƒͺγƒΌγγƒ†γƒΌγƒ–γƒ«γ‚³γƒ³γƒγƒΌγƒγƒ³γƒˆγ¨η·¨ι›†γƒ‘γƒγƒ«" - -msgid "SettingsPanel.title" -msgstr "{0}θ¨­εš" - -msgid "EdgeDataTable.source.column.text" -msgstr "γ‚½γƒΌγ‚Ή" - -msgid "EdgeDataTable.target.column.text" -msgstr "γ‚ΏγƒΌγ‚²γƒƒγƒˆ" - -msgid "EdgeDataTable.type.column.text" -msgstr "γ‚Ώγ‚€γƒ—" - -msgid "EdgeDataTable.type.column.directed" -msgstr "ζœ‰ε‘" - -msgid "EdgeDataTable.type.column.undirected" -msgstr "焑向" - -msgid "ConfigurationPanel.title" -msgstr "ζ§‹ζˆ" - -msgid "ConfigurationPanel.onlyVisibleCheckBox.text" -msgstr "可視グラフγγΏ" - -msgid "ConfigurationPanel.useSparklinesCheckBox.text" -msgstr "スパークラむンは、数字γƒͺγ‚ΉγƒˆγŠγ‚ˆγ³ε‹•ηš„γͺζ•°ε­—γ‚’η½ζ›γ—ます" - -msgid "ConfigurationPanel.showEdgesNodesLabelsCheckBox.text" -msgstr "γ‚½γƒΌγ‚Ήγ¨γ‚ΏγƒΌγ‚²γƒƒγƒˆγƒŽγƒΌγƒ‰γγƒ©γƒ™γƒ«γ‚’葨瀺" - -msgid "DataTableTopComponent.configurationButton.text" -msgstr "θ¨­εš" - -msgid "ConfigurationPanel.timeIntervalsGraphicsCheckBox.text" -msgstr "グラフィックスとしてγζ™‚ι–“ι–“ιš”" - -msgid "DataTableTopComponent.availableColumnsButton.toolTipText" -msgstr "θ‘¨η€Ίγ•γ‚Œγ‚‹εˆ—γ‚’ζ§‹ζˆ" - -msgid "AvailableColumnsPanel.title" -msgstr "ディスプレむγθ¨­εš" - -msgid "AvailableColumnsPanel.descriptionLabel.text" -msgstr "θ‘¨η€Ίγ™γ‚‹εˆ—γ‚’ιΈζŠž:" - -msgid "AvailableColumnsPanel.maximum-available-columns.info" -msgstr "εˆ—γζœ€ε€§ζ•°γ«ι”γ—γΎγ—γŸγ€‚" - -msgid "ConfigurationPanel.timeIntervalsAsDates.text" -msgstr "ζ—₯δ»˜γ¨γ—γ¦γζ™‚ι–“ι–“ιš”" - -msgid "TableCSVExporter.dialog.success" -msgstr "" - -msgid "TableCSVExporter.dialog.error" -msgstr "" - -msgid "TableCSVExporter.dialog.error.title" -msgstr "" - -msgid "TableCSVExporter.filechooser.csvDescription" -msgstr "" diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/layer.xml b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/layer.xml new file mode 100644 index 0000000000..916fa46775 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/layer.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/org-gephi-desktop-datalab.pot b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/org-gephi-desktop-datalab.pot deleted file mode 100644 index 2ba526324d..0000000000 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/org-gephi-desktop-datalab.pot +++ /dev/null @@ -1,138 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Data Laboratory Table component and edit panels" - -msgid "CTL_DataTableAction" -msgstr "Data Table" - -msgid "CTL_DataTableTopComponent" -msgstr "Data Table" - -msgid "DataTableTopComponent.tableScrollPane.busyMessage" -msgstr "Fetching data..." - -msgid "DataTableTopComponent.tableScrollPane.error" -msgstr "An error occured while feching data..." - -msgid "DataTableTopComponent.labelFilter.text" -msgstr "Filter:" - -msgid "DataTableTopComponent.edgesButton.text" -msgstr "Edges" - -msgid "DataTableTopComponent.nodesButton.text" -msgstr "Nodes" - -msgid "DataTableTopComponent.refreshButton.text" -msgstr "Refresh" - -msgid "DataTableTopComponent.labelBanner.text" -msgstr "Data updated. Do you want to refresh the table?" - -msgid "DataTableTopComponent.filterTextField.toolTipText" -msgstr "Regular expression is permitted" - -msgid "DataTableTopComponent.attributeColumnsPanel.title" -msgstr "Attribute columns" - -msgid "DataTableTopComponent.RichToolTip.title.text" -msgstr "Description" - -msgid "DataTableTopComponent.addColumnButton.text" -msgstr "Add column" - -msgid "DataTableTopComponent.mergeColumnsButton.text" -msgstr "Merge columns" - -msgid "DataTableTopComponent.dialogs.okButton.text" -msgstr "OK" - -msgid "DataTableTopComponent.general.actions.plugins.button.text" -msgstr "More actions" - -msgid "DataTableTopComponent.general.actions.plugins.group.name" -msgstr "Group {0}" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Data Laboratory Table component and edit panels" - -msgid "SettingsPanel.title" -msgstr "{0} settings" - -msgid "EdgeDataTable.source.column.text" -msgstr "Source" - -msgid "EdgeDataTable.target.column.text" -msgstr "Target" - -msgid "EdgeDataTable.type.column.text" -msgstr "Type" - -msgid "EdgeDataTable.type.column.directed" -msgstr "Directed" - -msgid "EdgeDataTable.type.column.undirected" -msgstr "Undirected" - -msgid "ConfigurationPanel.title" -msgstr "Configuration" - -msgid "ConfigurationPanel.onlyVisibleCheckBox.text" -msgstr "Visible graph only" - -msgid "ConfigurationPanel.useSparklinesCheckBox.text" -msgstr "Sparklines replaces number lists and dynamic numbers" - -msgid "ConfigurationPanel.showEdgesNodesLabelsCheckBox.text" -msgstr "Show label of source and target nodes" - -msgid "DataTableTopComponent.configurationButton.text" -msgstr "Configuration" - -msgid "ConfigurationPanel.timeIntervalsGraphicsCheckBox.text" -msgstr "Time intervals as graphics" - -msgid "DataTableTopComponent.availableColumnsButton.toolTipText" -msgstr "Configure displayed columns" - -msgid "AvailableColumnsPanel.title" -msgstr "Display settings" - -msgid "AvailableColumnsPanel.descriptionLabel.text" -msgstr "Choose the columns to display:" - -msgid "AvailableColumnsPanel.maximum-available-columns.info" -msgstr "Maximum number of columns reached" - -msgid "ConfigurationPanel.timeIntervalsAsDates.text" -msgstr "Time intervals as dates" - -msgid "TableCSVExporter.dialog.success" -msgstr "Table exported with success" - -msgid "TableCSVExporter.dialog.error" -msgstr "" -"An error happened when writing the file. Make sure the file is not in use " -"and you have permissions" - -msgid "TableCSVExporter.dialog.error.title" -msgstr "Error" - -msgid "TableCSVExporter.filechooser.csvDescription" -msgstr "CSV" diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/pt_BR.po b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/pt_BR.po deleted file mode 100644 index f7aadc866c..0000000000 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/pt_BR.po +++ /dev/null @@ -1,139 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:14+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Tabela do LaboratΓ³rio de Dados e painΓ©is de ediΓ§Γ£o" - -msgid "CTL_DataTableAction" -msgstr "Tabela de dados" - -msgid "CTL_DataTableTopComponent" -msgstr "Tabela de dados" - -msgid "DataTableTopComponent.tableScrollPane.busyMessage" -msgstr "Buscando dados..." - -msgid "DataTableTopComponent.tableScrollPane.error" -msgstr "Ocorreu um erro durante a busca de dados..." - -msgid "DataTableTopComponent.labelFilter.text" -msgstr "Filtro:" - -msgid "DataTableTopComponent.edgesButton.text" -msgstr "Arestas" - -msgid "DataTableTopComponent.nodesButton.text" -msgstr "NΓ³s" - -msgid "DataTableTopComponent.refreshButton.text" -msgstr "Atualizar" - -msgid "DataTableTopComponent.labelBanner.text" -msgstr "Dados atualizados. Deseja atualizar a tabela?" - -msgid "DataTableTopComponent.filterTextField.toolTipText" -msgstr "SΓ£o permitidas expressΓ΅es regulares" - -msgid "DataTableTopComponent.attributeColumnsPanel.title" -msgstr "Colunas de atributo" - -msgid "DataTableTopComponent.RichToolTip.title.text" -msgstr "DescriΓ§Γ£o" - -msgid "DataTableTopComponent.addColumnButton.text" -msgstr "Adicionar coluna" - -msgid "DataTableTopComponent.mergeColumnsButton.text" -msgstr "Mesclar colunas" - -msgid "DataTableTopComponent.dialogs.okButton.text" -msgstr "OK" - -msgid "DataTableTopComponent.general.actions.plugins.button.text" -msgstr "Mais aΓ§Γ΅es" - -msgid "DataTableTopComponent.general.actions.plugins.group.name" -msgstr "Grupo {0}" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Tabela do LaboratΓ³rio de Dados e painΓ©is de ediΓ§Γ£o" - -msgid "SettingsPanel.title" -msgstr "{0} configuraΓ§Γ΅es" - -msgid "EdgeDataTable.source.column.text" -msgstr "Origem" - -msgid "EdgeDataTable.target.column.text" -msgstr "Destino" - -msgid "EdgeDataTable.type.column.text" -msgstr "Tipo" - -msgid "EdgeDataTable.type.column.directed" -msgstr "Dirigido" - -msgid "EdgeDataTable.type.column.undirected" -msgstr "NΓ£o dirigido" - -msgid "ConfigurationPanel.title" -msgstr "ConfiguraΓ§Γ£o" - -msgid "ConfigurationPanel.onlyVisibleCheckBox.text" -msgstr "Apenas grafo visΓ­vel" - -msgid "ConfigurationPanel.useSparklinesCheckBox.text" -msgstr "Mostrar listas de nΓΊmeros e nΓΊmeros dinΓ’micos como sparklines" - -msgid "ConfigurationPanel.showEdgesNodesLabelsCheckBox.text" -msgstr "Mostrar rΓ³tulos de nΓ³s de origem e destino" - -msgid "DataTableTopComponent.configurationButton.text" -msgstr "ConfiguraΓ§Γ£o" - -msgid "ConfigurationPanel.timeIntervalsGraphicsCheckBox.text" -msgstr "Intervalos de tempo como grΓ‘ficos" - -msgid "DataTableTopComponent.availableColumnsButton.toolTipText" -msgstr "Configurar colunas exibidas" - -msgid "AvailableColumnsPanel.title" -msgstr "ConfiguraΓ§Γ΅es de exibiΓ§Γ£o" - -msgid "AvailableColumnsPanel.descriptionLabel.text" -msgstr "Escolha as colunas para exibir:" - -msgid "AvailableColumnsPanel.maximum-available-columns.info" -msgstr "NΓΊmero mΓ‘ximo de colunas disponΓ­veis alcanΓ§ado" - -msgid "ConfigurationPanel.timeIntervalsAsDates.text" -msgstr "Intervalos de tempo como datas" - -msgid "TableCSVExporter.dialog.success" -msgstr "" - -msgid "TableCSVExporter.dialog.error" -msgstr "" - -msgid "TableCSVExporter.dialog.error.title" -msgstr "" - -msgid "TableCSVExporter.filechooser.csvDescription" -msgstr "" diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/arrow-180.png b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/arrow-180.png deleted file mode 100644 index fc1355503a..0000000000 Binary files a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/arrow-180.png and /dev/null differ diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/arrow.png b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/arrow.png deleted file mode 100644 index 977b9e509f..0000000000 Binary files a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/arrow.png and /dev/null differ diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/column.png b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/column.png deleted file mode 100644 index 2a2a412ff6..0000000000 Binary files a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/column.png and /dev/null differ diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/diamond.png b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/diamond.png deleted file mode 100644 index 477d70b502..0000000000 Binary files a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/diamond.png and /dev/null differ diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/gear-small.png b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/gear-small.png deleted file mode 100644 index 9f58d4fa20..0000000000 Binary files a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/gear-small.png and /dev/null differ diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/icon.png b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/icon.png deleted file mode 100644 index b0cd69fc5d..0000000000 Binary files a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/icon.png and /dev/null differ diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/info.png b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/info.png deleted file mode 100644 index 0cf1ec1771..0000000000 Binary files a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/info.png and /dev/null differ diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/light-bulb--plus.png b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/light-bulb--plus.png deleted file mode 100644 index ab3993f1fe..0000000000 Binary files a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/light-bulb--plus.png and /dev/null differ diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/light-bulb.png b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/light-bulb.png deleted file mode 100644 index 845e11070a..0000000000 Binary files a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/light-bulb.png and /dev/null differ diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/merge.png b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/merge.png deleted file mode 100644 index 698001b915..0000000000 Binary files a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/merge.png and /dev/null differ diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/puzzle--arrow.png b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/puzzle--arrow.png deleted file mode 100644 index 16d2ef5891..0000000000 Binary files a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/puzzle--arrow.png and /dev/null differ diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/small.png b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/small.png deleted file mode 100644 index 47e3a60da9..0000000000 Binary files a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/small.png and /dev/null differ diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/table-insert-column.png b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/table-insert-column.png deleted file mode 100644 index 86649bf1d1..0000000000 Binary files a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/table-insert-column.png and /dev/null differ diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/table-select.png b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/table-select.png deleted file mode 100644 index ab082a7641..0000000000 Binary files a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/resources/table-select.png and /dev/null differ diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/ru.po b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/ru.po deleted file mode 100644 index 75151abc5e..0000000000 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/ru.po +++ /dev/null @@ -1,140 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -# FIRST AUTHOR , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:14+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π›Π°Π±Π°Ρ€Π°Ρ‚ΠΎΡ€ΠΈΠΈ Π”Π°Π½Π½Ρ‹Ρ… ΠΈ рСдактирования ΠΏΠ°Π½Π΅Π»Π΅ΠΉ" - -msgid "CTL_DataTableAction" -msgstr "Π’Π°Π±Π»ΠΈΡ†Π° Π”Π°Π½Π½Ρ‹Ρ…" - -msgid "CTL_DataTableTopComponent" -msgstr "Π’Π°Π±Π»ΠΈΡ†Π° Π”Π°Π½Π½Ρ‹Ρ…" - -msgid "DataTableTopComponent.tableScrollPane.busyMessage" -msgstr "Π˜Π·Π²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ Π΄Π°Π½Π½Ρ‹Ρ…..." - -msgid "DataTableTopComponent.tableScrollPane.error" -msgstr "Π’ΠΎ врСмя извлСчСния Π΄Π°Π½Π½Ρ‹Ρ… Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ошибка..." - -msgid "DataTableTopComponent.labelFilter.text" -msgstr "Π€ΠΈΠ»ΡŒΡ‚Ρ€:" - -msgid "DataTableTopComponent.edgesButton.text" -msgstr "Π Ρ‘Π±Ρ€Π°" - -msgid "DataTableTopComponent.nodesButton.text" -msgstr "Π£Π·Π»Ρ‹" - -msgid "DataTableTopComponent.refreshButton.text" -msgstr "ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ" - -msgid "DataTableTopComponent.labelBanner.text" -msgstr "Π”Π°Π½Π½Ρ‹Π΅ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Ρ‹. Π’Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ?" - -msgid "DataTableTopComponent.filterTextField.toolTipText" -msgstr "РСгулярныС выраТСния Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Ρ‹" - -msgid "DataTableTopComponent.attributeColumnsPanel.title" -msgstr "Π‘Ρ‚ΠΎΠ»Π±Ρ†Ρ‹ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ²" - -msgid "DataTableTopComponent.RichToolTip.title.text" -msgstr "ОписаниС" - -msgid "DataTableTopComponent.addColumnButton.text" -msgstr "Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ столбСц" - -msgid "DataTableTopComponent.mergeColumnsButton.text" -msgstr "ΠžΠ±ΡŠΠ΅Π΄Π΅Π½ΠΈΡ‚ΡŒ столбцы" - -msgid "DataTableTopComponent.dialogs.okButton.text" -msgstr "ОК" - -msgid "DataTableTopComponent.general.actions.plugins.button.text" -msgstr "Π”Ρ€ΡƒΠ³ΠΈΠ΅ дСйствия" - -msgid "DataTableTopComponent.general.actions.plugins.group.name" -msgstr "Π“Ρ€ΡƒΠΏΠΏΠ° {0}" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹ Π›Π°Π±Π°Ρ€Π°Ρ‚ΠΎΡ€ΠΈΠΈ Π”Π°Π½Π½Ρ‹Ρ… ΠΈ рСдактирования ΠΏΠ°Π½Π΅Π»Π΅ΠΉ" - -msgid "SettingsPanel.title" -msgstr "{0} настройки" - -msgid "EdgeDataTable.source.column.text" -msgstr "Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ" - -msgid "EdgeDataTable.target.column.text" -msgstr "ΠŸΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ" - -msgid "EdgeDataTable.type.column.text" -msgstr "Π’ΠΈΠΏ" - -msgid "EdgeDataTable.type.column.directed" -msgstr "ΠžΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ΅" - -msgid "EdgeDataTable.type.column.undirected" -msgstr "НСориСнтированноС" - -msgid "ConfigurationPanel.title" -msgstr "ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ" - -msgid "ConfigurationPanel.onlyVisibleCheckBox.text" -msgstr "Волько Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΉ Π³Ρ€Π°Ρ„" - -msgid "ConfigurationPanel.useSparklinesCheckBox.text" -msgstr "Π‘ΠΏΠ°Ρ€ΠΊΠ»Π°ΠΉΠ½Ρ‹ Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ листы Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΈ динамичСскиС значСния" - -msgid "ConfigurationPanel.showEdgesNodesLabelsCheckBox.text" -msgstr "ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ названия Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… ΠΈ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… ΡƒΠ·Π»ΠΎΠ²" - -msgid "DataTableTopComponent.configurationButton.text" -msgstr "ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ" - -msgid "ConfigurationPanel.timeIntervalsGraphicsCheckBox.text" -msgstr "Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹ Π² Π²ΠΈΠ΄Π΅ Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ²" - -msgid "DataTableTopComponent.availableColumnsButton.toolTipText" -msgstr "Настройка ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΡ‹Ρ… столбцов" - -msgid "AvailableColumnsPanel.title" -msgstr "ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ настройки" - -msgid "AvailableColumnsPanel.descriptionLabel.text" -msgstr "Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ столбцы для отобраТСния" - -msgid "AvailableColumnsPanel.maximum-available-columns.info" -msgstr "МаксимальноС число столбцов достигнуто" - -msgid "ConfigurationPanel.timeIntervalsAsDates.text" -msgstr "Π’Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Ρ‹" - -msgid "TableCSVExporter.dialog.success" -msgstr "" - -msgid "TableCSVExporter.dialog.error" -msgstr "" - -msgid "TableCSVExporter.dialog.error.title" -msgstr "" - -msgid "TableCSVExporter.filechooser.csvDescription" -msgstr "" diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle.properties new file mode 100644 index 0000000000..137f442a34 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle.properties @@ -0,0 +1,8 @@ +EdgeDataTable.source.column.text=Source +EdgeDataTable.target.column.text=Target +EdgeDataTable.type.column.text=Type +EdgeDataTable.type.column.directed=Directed +EdgeDataTable.type.column.undirected=Undirected +EdgeDataTable.kind.column.text=Kind + +AbstractElementsDataTable.column.tooltip=Column id: ''{0}'' \ No newline at end of file diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_ar.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_ar.properties new file mode 100644 index 0000000000..70f0533fde --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_ar.properties @@ -0,0 +1 @@ +EdgeDataTable.source.column.text=\u0645\u0635\u062F\u0631 diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_ca.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_ca.properties new file mode 100644 index 0000000000..ed05a2da34 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_ca.properties @@ -0,0 +1,7 @@ +EdgeDataTable.source.column.text=Source +EdgeDataTable.target.column.text=Target +EdgeDataTable.type.column.text=Tipus +EdgeDataTable.type.column.directed=Dirigit +EdgeDataTable.type.column.undirected=No dirigit +EdgeDataTable.kind.column.text=Kind +AbstractElementsDataTable.column.tooltip=Column id: ''{0}'' diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_cs.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_cs.properties new file mode 100644 index 0000000000..71ab4db607 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_cs.properties @@ -0,0 +1,8 @@ +EdgeDataTable.source.column.text=Zdroj +EdgeDataTable.target.column.text=Cνl +EdgeDataTable.type.column.text=Typ +EdgeDataTable.type.column.directed=\u0158νzenι +EdgeDataTable.type.column.undirected=Ne\u0159νzenι +EdgeDataTable.kind.column.text=Druh + +# AbstractElementsDataTable.column.tooltip=Column id: ''{0}'' diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_de.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_de.properties new file mode 100644 index 0000000000..172778c8fb --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_de.properties @@ -0,0 +1,7 @@ +EdgeDataTable.source.column.text=Ursprung +EdgeDataTable.target.column.text=Ziel +EdgeDataTable.type.column.text=Typ +EdgeDataTable.type.column.directed=Gerichtet +EdgeDataTable.type.column.undirected=Ungerichtet +EdgeDataTable.kind.column.text=Kind +AbstractElementsDataTable.column.tooltip=Spalten id: ''{0}'' diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_es.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_es.properties new file mode 100644 index 0000000000..2aa56538d4 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_es.properties @@ -0,0 +1,7 @@ +EdgeDataTable.source.column.text=Fuente +EdgeDataTable.target.column.text=Destino +EdgeDataTable.type.column.text=Tipo +EdgeDataTable.type.column.directed=Dirigida +EdgeDataTable.type.column.undirected=No dirigida +EdgeDataTable.kind.column.text=Clase +AbstractElementsDataTable.column.tooltip=Id de la columna: ''{0}'' diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_fr.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_fr.properties new file mode 100644 index 0000000000..b988f22ca7 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_fr.properties @@ -0,0 +1,8 @@ +EdgeDataTable.source.column.text=Source +EdgeDataTable.target.column.text=Destination +EdgeDataTable.type.column.text=Type +EdgeDataTable.type.column.directed=Dirigι +EdgeDataTable.type.column.undirected=Non dirigι +EdgeDataTable.kind.column.text=Prιdicat + +AbstractElementsDataTable.column.tooltip=Colonne id: ''{0}'' diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_he.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_he.properties new file mode 100644 index 0000000000..71ee40a45f --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_he.properties @@ -0,0 +1,7 @@ +EdgeDataTable.source.column.text=Source +EdgeDataTable.target.column.text=Target +EdgeDataTable.type.column.text=\u05e1\u05d5\u05d2 +EdgeDataTable.type.column.directed=Directed +EdgeDataTable.type.column.undirected=Undirected +EdgeDataTable.kind.column.text=Kind +AbstractElementsDataTable.column.tooltip=Column id: ''{0}'' diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_hu.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_hu.properties new file mode 100644 index 0000000000..e20dc2536c --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_hu.properties @@ -0,0 +1,8 @@ + + +EdgeDataTable.type.column.directed=Ir\u00E1ny\u00EDtott +EdgeDataTable.type.column.text=T\u00EDpus +EdgeDataTable.target.column.text=C\u00E9l +AbstractElementsDataTable.column.tooltip=Oszlopazonos\u00EDt\u00F3: ''{0}'' +EdgeDataTable.source.column.text=Forr\u00E1s +EdgeDataTable.type.column.undirected=Ir\u00E1ny\u00EDtatlan diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_it.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_it.properties new file mode 100644 index 0000000000..065541c334 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_it.properties @@ -0,0 +1,7 @@ +EdgeDataTable.source.column.text=Sorgente +EdgeDataTable.target.column.text=Destinazione +EdgeDataTable.type.column.text=Tipo +EdgeDataTable.type.column.directed=Orientato +EdgeDataTable.type.column.undirected=Non orientato +EdgeDataTable.kind.column.text=Kind +AbstractElementsDataTable.column.tooltip=Column id: ''{0}'' diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_ja.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_ja.properties new file mode 100644 index 0000000000..b495739ff6 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_ja.properties @@ -0,0 +1,8 @@ +# EdgeDataTable.source.column.text=Source +# EdgeDataTable.target.column.text=Target +# EdgeDataTable.type.column.text=Type +EdgeDataTable.type.column.directed=\u6709\u5411 +EdgeDataTable.type.column.undirected=\u7121\u5411 +# EdgeDataTable.kind.column.text=Kind + +# AbstractElementsDataTable.column.tooltip=Column id: ''{0}'' diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_nl.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_nl.properties new file mode 100644 index 0000000000..7cec80f8b1 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_nl.properties @@ -0,0 +1,7 @@ +EdgeDataTable.source.column.text=Bron +EdgeDataTable.target.column.text=Doel +EdgeDataTable.type.column.text=Type +EdgeDataTable.type.column.directed=Gericht +EdgeDataTable.type.column.undirected=Ongericht +EdgeDataTable.kind.column.text=Kind +AbstractElementsDataTable.column.tooltip=Column id: ''{0}'' diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_pt_BR.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_pt_BR.properties new file mode 100644 index 0000000000..52a7db9378 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_pt_BR.properties @@ -0,0 +1,8 @@ +EdgeDataTable.source.column.text=Origem +EdgeDataTable.target.column.text=Destino +EdgeDataTable.type.column.text=Tipo +EdgeDataTable.type.column.directed=Dirigido +EdgeDataTable.type.column.undirected=Nγo dirigido +EdgeDataTable.kind.column.text=Tipo + +# AbstractElementsDataTable.column.tooltip=Column id: ''{0}'' diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_ro.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_ro.properties new file mode 100644 index 0000000000..70dac9fc2b --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_ro.properties @@ -0,0 +1,9 @@ + + +EdgeDataTable.source.column.text=Surs\u0103 +EdgeDataTable.target.column.text=\u021Aint\u0103 +EdgeDataTable.type.column.text=Tip +EdgeDataTable.type.column.directed=Orientat +EdgeDataTable.type.column.undirected=Neorientat +EdgeDataTable.kind.column.text=Fel +AbstractElementsDataTable.column.tooltip=Coloan\u0103 id: ''{0}'' diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_ru.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_ru.properties new file mode 100644 index 0000000000..a96908b808 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_ru.properties @@ -0,0 +1,8 @@ +# EdgeDataTable.source.column.text=Source +# EdgeDataTable.target.column.text=Target +# EdgeDataTable.type.column.text=Type +EdgeDataTable.type.column.directed=\u041e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 +EdgeDataTable.type.column.undirected=\u041d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 +# EdgeDataTable.kind.column.text=Kind + +# AbstractElementsDataTable.column.tooltip=Column id: ''{0}'' diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_th.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_tr.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_tr.properties new file mode 100644 index 0000000000..d55a104823 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_tr.properties @@ -0,0 +1,7 @@ +EdgeDataTable.source.column.text=Source +EdgeDataTable.target.column.text=Target +EdgeDataTable.type.column.text=Tόr +EdgeDataTable.type.column.directed=Yφnlό +EdgeDataTable.type.column.undirected=Yφnsόz +EdgeDataTable.kind.column.text=Kind +AbstractElementsDataTable.column.tooltip=Column id: ''{0}'' diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_uk.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_uk.properties new file mode 100644 index 0000000000..07bceaf654 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_uk.properties @@ -0,0 +1,7 @@ +EdgeDataTable.kind.column.text=\u0414\u043E\u0431\u0440\u0438\u0439 +EdgeDataTable.source.column.text=\u0414\u0436\u0435\u0440\u0435\u043B\u043E +EdgeDataTable.target.column.text=\u0426\u0456\u043B\u044C\u043E\u0432\u0430 +EdgeDataTable.type.column.text=\u0422\u0438\u043F +EdgeDataTable.type.column.directed=\u0420\u0435\u0436\u0438\u0441\u0435\u0440 +EdgeDataTable.type.column.undirected=\u041D\u0435\u0440\u0435\u0436\u0438\u0441\u043E\u0432\u0430\u043D\u0438\u0439 +AbstractElementsDataTable.column.tooltip=\u0406\u0434\u0435\u043D\u0442\u0438\u0444\u0456\u043A\u0430\u0442\u043E\u0440 \u0441\u0442\u043E\u0432\u043F\u0446\u044F: ''{0}'' diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_zh_CN.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_zh_CN.properties new file mode 100644 index 0000000000..1bf70b237c --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_zh_CN.properties @@ -0,0 +1,10 @@ +EdgeDataTable.source.column.text=\u6e90 +EdgeDataTable.target.column.text=\u76ee\u6807 +EdgeDataTable.type.column.text=\u7c7b\u578b +EdgeDataTable.type.column.directed=\u6709\u5411\u7684 +EdgeDataTable.type.column.undirected=\u65e0\u5411\u7684 +EdgeDataTable.kind.column.text=\u79cd\u7c7b + +# AbstractElementsDataTable.column.tooltip=Column id: ''{0}'' + +AbstractElementsDataTable.column.tooltip=\u5217\u7F16\u53F7: ''{0}'' diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_zh_TW.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_zh_TW.properties new file mode 100644 index 0000000000..1eca21c958 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/tables/Bundle_zh_TW.properties @@ -0,0 +1,7 @@ +EdgeDataTable.source.column.text=\u4f86\u6e90 +EdgeDataTable.target.column.text=\u76ee\u6a19 +EdgeDataTable.type.column.text=\u985e\u578b +EdgeDataTable.type.column.directed=\u6709\u5411\u6027 +EdgeDataTable.type.column.undirected=\u7121\u5411\u6027 +EdgeDataTable.kind.column.text=\u6027\u8cea +AbstractElementsDataTable.column.tooltip=Column id: ''{0}'' diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_ar.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_ca.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_ca.properties new file mode 100644 index 0000000000..79852c8952 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_ca.properties @@ -0,0 +1 @@ +Cell.Popup.subMenu.text=Cel·la diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_cs.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_cs.properties index a69f2e7f77..aea4a1aaea 100644 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_cs.properties +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_cs.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-26 18\:07+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -Cell.Popup.subMenu.text=Bu\u0148ka +Cell.Popup.subMenu.text=Bu\u0148ka diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_de.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_de.properties new file mode 100644 index 0000000000..56be356ed4 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_de.properties @@ -0,0 +1 @@ +Cell.Popup.subMenu.text=Zelle diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_el.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_el.properties new file mode 100644 index 0000000000..ff1a565bb7 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_el.properties @@ -0,0 +1,3 @@ + + +Cell.Popup.subMenu.text=\u039A\u03B5\u03BB\u03AF diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_es.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_es.properties index 491fc68ce8..b3dbbfa7ca 100644 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_es.properties +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_es.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:09+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -Cell.Popup.subMenu.text=Celda +Cell.Popup.subMenu.text=Celda diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_fr.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_fr.properties index 88c45fb116..3d0f328f82 100644 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_fr.properties +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_fr.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:09+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -Cell.Popup.subMenu.text=Cellule +Cell.Popup.subMenu.text=Cellule diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_he.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_he.properties new file mode 100644 index 0000000000..5553454cb5 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_he.properties @@ -0,0 +1 @@ +Cell.Popup.subMenu.text=Cell diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_hu.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_hu.properties new file mode 100644 index 0000000000..ab92405c4c --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_hu.properties @@ -0,0 +1,3 @@ + + +Cell.Popup.subMenu.text=Sejt diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_it.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_it.properties new file mode 100644 index 0000000000..5553454cb5 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_it.properties @@ -0,0 +1 @@ +Cell.Popup.subMenu.text=Cell diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_ja.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_ja.properties index b77fde5907..43a6c56fbf 100644 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_ja.properties +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_ja.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-13 12\:39+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -Cell.Popup.subMenu.text=\u30bb\u30eb +Cell.Popup.subMenu.text=\u30bb\u30eb diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_ko.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_ko.properties new file mode 100644 index 0000000000..a2344552f1 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_ko.properties @@ -0,0 +1,3 @@ + + +Cell.Popup.subMenu.text=\uC140 diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_nl.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_nl.properties new file mode 100644 index 0000000000..5553454cb5 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_nl.properties @@ -0,0 +1 @@ +Cell.Popup.subMenu.text=Cell diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_pt_BR.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_pt_BR.properties index 813bbb5382..a16006a9cf 100644 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_pt_BR.properties +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_pt_BR.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 18\:06+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -Cell.Popup.subMenu.text=C\u00e9lula +Cell.Popup.subMenu.text=Cιlula diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_ro.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_ro.properties new file mode 100644 index 0000000000..459b83729d --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_ro.properties @@ -0,0 +1,3 @@ + + +Cell.Popup.subMenu.text=Celul\u0103 diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_ru.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_ru.properties index 3ec687e060..f58be7c031 100644 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_ru.properties +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_ru.properties @@ -1,10 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -# FIRST AUTHOR , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-11-18 07\:17+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -Cell.Popup.subMenu.text=\u042f\u0447\u0435\u0439\u043a\u0430 +Cell.Popup.subMenu.text=\u042f\u0447\u0435\u0439\u043a\u0430 diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_th.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_tr.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_tr.properties new file mode 100644 index 0000000000..5553454cb5 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_tr.properties @@ -0,0 +1 @@ +Cell.Popup.subMenu.text=Cell diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_zh_CN.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_zh_CN.properties index 217dd701a0..5cdadad263 100644 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_zh_CN.properties +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_zh_CN.properties @@ -1,8 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:17+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -Cell.Popup.subMenu.text=\u5355\u5143 +Cell.Popup.subMenu.text=\u5355\u5143 diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_zh_TW.properties b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_zh_TW.properties new file mode 100644 index 0000000000..5553454cb5 --- /dev/null +++ b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/Bundle_zh_TW.properties @@ -0,0 +1 @@ +Cell.Popup.subMenu.text=Cell diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/cs.po b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/cs.po deleted file mode 100644 index 8eb0fdcd4f..0000000000 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/cs.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-26 18:07+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "Cell.Popup.subMenu.text" -msgstr "Buňka" diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/es.po b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/es.po deleted file mode 100644 index aa56287fb0..0000000000 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/es.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:09+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "Cell.Popup.subMenu.text" -msgstr "Celda" diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/fr.po b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/fr.po deleted file mode 100644 index 208debc91d..0000000000 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/fr.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:09+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "Cell.Popup.subMenu.text" -msgstr "Cellule" diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/ja.po b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/ja.po deleted file mode 100644 index 14bc666284..0000000000 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/ja.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-13 12:39+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "Cell.Popup.subMenu.text" -msgstr "セル" diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/org-gephi-desktop-datalab-utils.pot b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/org-gephi-desktop-datalab-utils.pot deleted file mode 100644 index 6817ad9703..0000000000 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/org-gephi-desktop-datalab-utils.pot +++ /dev/null @@ -1,19 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "Cell.Popup.subMenu.text" -msgstr "Cell" diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/pt_BR.po b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/pt_BR.po deleted file mode 100644 index 9d6e5c07d8..0000000000 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/pt_BR.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 18:06+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "Cell.Popup.subMenu.text" -msgstr "CΓ©lula" diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/ru.po b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/ru.po deleted file mode 100644 index eca92df067..0000000000 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/ru.po +++ /dev/null @@ -1,23 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -# FIRST AUTHOR , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-11-18 07:17+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "Cell.Popup.subMenu.text" -msgstr "Π―Ρ‡Π΅ΠΉΠΊΠ°" diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/zh_CN.po b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/zh_CN.po deleted file mode 100644 index 8888c0241e..0000000000 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/utils/zh_CN.po +++ /dev/null @@ -1,21 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:17+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "Cell.Popup.subMenu.text" -msgstr "单元" diff --git a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/zh_CN.po b/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/zh_CN.po deleted file mode 100644 index 33a7ddb691..0000000000 --- a/modules/DesktopDataLaboratory/src/main/resources/org/gephi/desktop/datalab/zh_CN.po +++ /dev/null @@ -1,138 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:14+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "εžιͺŒζ•°ζθ‘¨ζ Όζˆεˆ†ε’ŒηΌ–辑青板" - -msgid "CTL_DataTableAction" -msgstr "ζ•°ζθ‘¨ζ Ό" - -msgid "CTL_DataTableTopComponent" -msgstr "ζ•°ζθ‘¨ζ Ό" - -msgid "DataTableTopComponent.tableScrollPane.busyMessage" -msgstr "正发数ζβ€¦β€¦" - -msgid "DataTableTopComponent.tableScrollPane.error" -msgstr "发送数ζζ—Άε‡Ίι”™β€¦β€¦" - -msgid "DataTableTopComponent.labelFilter.text" -msgstr "θΏ‡ζ»€οΌš" - -msgid "DataTableTopComponent.edgesButton.text" -msgstr "θΎΉ" - -msgid "DataTableTopComponent.nodesButton.text" -msgstr "θŠ‚η‚Ή" - -msgid "DataTableTopComponent.refreshButton.text" -msgstr "shuaxin" - -msgid "DataTableTopComponent.labelBanner.text" -msgstr "ζ•°ζζ›΄ζ–°γ€‚想更新数ζθ‘¨ζ Όε—οΌŸ" - -msgid "DataTableTopComponent.filterTextField.toolTipText" -msgstr "ζ­£εˆ™θ‘¨θΎΎεΌζŽˆζƒ" - -msgid "DataTableTopComponent.attributeColumnsPanel.title" -msgstr "ε±žζ€§εˆ—" - -msgid "DataTableTopComponent.RichToolTip.title.text" -msgstr "描述" - -msgid "DataTableTopComponent.addColumnButton.text" -msgstr "ζ·»εŠ εˆ—" - -msgid "DataTableTopComponent.mergeColumnsButton.text" -msgstr "ε’ŒεΉΆεˆ—" - -msgid "DataTableTopComponent.dialogs.okButton.text" -msgstr "ε₯½" - -msgid "DataTableTopComponent.general.actions.plugins.button.text" -msgstr "ζ›΄ε€šεŠŸθƒ½" - -msgid "DataTableTopComponent.general.actions.plugins.group.name" -msgstr "η»„{0}" - -msgid "OpenIDE-Module-Short-Description" -msgstr "εžιͺŒζ•°ζθ‘¨ζ Όζˆεˆ†ε’ŒηΌ–辑青板" - -msgid "SettingsPanel.title" -msgstr "{0}θΎη½" - -msgid "EdgeDataTable.source.column.text" -msgstr "源" - -msgid "EdgeDataTable.target.column.text" -msgstr "η›ζ ‡" - -msgid "EdgeDataTable.type.column.text" -msgstr "η±»εž‹" - -msgid "EdgeDataTable.type.column.directed" -msgstr "ζœ‰ε‘ηš„" - -msgid "EdgeDataTable.type.column.undirected" -msgstr "ζ— ε‘ηš„" - -msgid "ConfigurationPanel.title" -msgstr "配η½" - -msgid "ConfigurationPanel.onlyVisibleCheckBox.text" -msgstr "ε―θ§ηš„ε›Ύε½’" - -msgid "ConfigurationPanel.useSparklinesCheckBox.text" -msgstr "泒归图替捒数ζεˆ—θ‘¨ε’ŒεŠ¨ζ€ζ•°ζ" - -msgid "ConfigurationPanel.showEdgesNodesLabelsCheckBox.text" -msgstr "ζ˜Ύη€ΊζΊθŠ‚η‚Ήε’Œη›ζ ‡θŠ‚η‚Ήηš„ζ ‡θ°" - -msgid "DataTableTopComponent.configurationButton.text" -msgstr "配η½" - -msgid "ConfigurationPanel.timeIntervalsGraphicsCheckBox.text" -msgstr "ζ—Άι—΄ι—΄ιš”δΈΊGraphics" - -msgid "DataTableTopComponent.availableColumnsButton.toolTipText" -msgstr "配η½ηްεžηš„εˆ—" - -msgid "AvailableColumnsPanel.title" -msgstr "显瀺θΎη½" - -msgid "AvailableColumnsPanel.descriptionLabel.text" -msgstr "ι€‰ζ‹©ηŽ°εžηš„εˆ—οΌš" - -msgid "AvailableColumnsPanel.maximum-available-columns.info" -msgstr "εˆ—ηš„ζœ€ε€§ε€Ό" - -msgid "ConfigurationPanel.timeIntervalsAsDates.text" -msgstr "ζ—Άι—΄ι—΄ιš”δΈΊdates" - -msgid "TableCSVExporter.dialog.success" -msgstr "" - -msgid "TableCSVExporter.dialog.error" -msgstr "" - -msgid "TableCSVExporter.dialog.error.title" -msgstr "" - -msgid "TableCSVExporter.filechooser.csvDescription" -msgstr "" diff --git a/modules/DesktopExport/pom.xml b/modules/DesktopExport/pom.xml index 3a3339e4b9..c5c1297d3a 100644 --- a/modules/DesktopExport/pom.xml +++ b/modules/DesktopExport/pom.xml @@ -4,13 +4,12 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. - org.gephi desktop-io-export - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm DesktopExport @@ -44,6 +43,10 @@ org.netbeans.api org-openide-util + + org.netbeans.api + org-openide-util-ui + org.netbeans.api org-openide-dialogs @@ -57,11 +60,10 @@ - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin - org.gephi.desktop.io.export.api org.gephi.desktop.io.export.spi diff --git a/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/AbstractExporterUI.java b/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/AbstractExporterUI.java new file mode 100644 index 0000000000..997c434f0e --- /dev/null +++ b/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/AbstractExporterUI.java @@ -0,0 +1,344 @@ +package org.gephi.desktop.io.export; + +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.HeadlessException; +import java.awt.Insets; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.io.File; +import java.io.IOException; +import java.util.Collection; +import javax.swing.BorderFactory; +import javax.swing.JButton; +import javax.swing.JCheckBox; +import javax.swing.JComponent; +import javax.swing.JDialog; +import javax.swing.JFileChooser; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import org.gephi.io.exporter.api.FileType; +import org.gephi.io.exporter.spi.Exporter; +import org.gephi.io.exporter.spi.ExporterUI; +import org.gephi.io.exporter.spi.FileExporterBuilder; +import org.gephi.io.exporter.spi.GraphExporter; +import org.gephi.io.exporter.spi.GraphFileExporterBuilder; +import org.gephi.project.api.ProjectController; +import org.gephi.project.api.Workspace; +import org.gephi.ui.utils.DialogFileFilter; +import org.openide.DialogDescriptor; +import org.openide.DialogDisplayer; +import org.openide.NotifyDescriptor; +import org.openide.filesystems.FileObject; +import org.openide.filesystems.FileUtil; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; +import org.openide.util.NbPreferences; + +public class AbstractExporterUI { + + private FileExporterBuilder selectedBuilder; + private Exporter selectedExporter; + private File selectedFile; + private boolean visibleOnlyGraph = false; + private boolean exportAll = false; + private JDialog dialog; + + private final Class builderClass; + private final String preferencesPrefix; + + public AbstractExporterUI(String preferencesPrefix, Class builderClass) { + this.builderClass = builderClass; + this.preferencesPrefix = preferencesPrefix; + } + + public void action() { + action(Lookup.getDefault().lookupAll(builderClass)); + } + + public void action(final Collection exporterBuilders) { + final String LAST_PATH = preferencesPrefix + "_Last_Path"; + final String LAST_PATH_DEFAULT = preferencesPrefix + "_Last_Path_Default"; + final String LAST_FILE_FILTER = preferencesPrefix + "_Last_File_Filter"; + + final DesktopExportController exportController = Lookup.getDefault().lookup(DesktopExportController.class); + if (exportController == null) { + return; + } + + //Get last directory + String lastPathDefault = NbPreferences.forModule(AbstractExporterUI.class).get(LAST_PATH_DEFAULT, null); + String lastPath = NbPreferences.forModule(AbstractExporterUI.class).get(LAST_PATH, lastPathDefault); + String lastFileFilterString = NbPreferences.forModule(AbstractExporterUI.class).get(LAST_FILE_FILTER, null); + + //Get last directory as a file + File lastPathDir = null; + if (lastPath != null) { + lastPathDir = new File(lastPath); + while (lastPathDir != null && (lastPathDir.isFile() || !lastPathDir.exists())) { + lastPathDir = lastPathDir.getParentFile(); + } + } + + //Options button (that shows the dialog) + final JButton optionsButton = + new JButton(NbBundle.getMessage(AbstractExporterUI.class, "AbstractExporterUI.optionsButton.name")); + optionsButton.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + ExporterUI exporterUI = exportController.getExportController().getUI(selectedExporter); + if (exporterUI != null) { + JPanel panel = exporterUI.getPanel(); + exporterUI.setup(selectedExporter); + + DialogDescriptor dd = new DialogDescriptor(panel, NbBundle + .getMessage(AbstractExporterUI.class, "AbstractExporterUI.optionsDialog.title", + selectedBuilder.getName())); + TopDialog topDialog = new TopDialog(dialog, dd.getTitle(), dd.isModal(), dd, dd.getClosingOptions(), + dd.getButtonListener()); + topDialog.setVisible(true); + Object result = (dd.getValue() != null) ? dd.getValue() : NotifyDescriptor.CLOSED_OPTION; +// Object result = DialogDisplayer.getDefault().notify(dd); + exporterUI.unsetup(result == NotifyDescriptor.OK_OPTION); + } + } + }); + + // Settings panel + JPanel optionsPanel = new JPanel(new BorderLayout()); + optionsPanel.add(optionsButton, BorderLayout.EAST); + optionsPanel.setBorder(BorderFactory.createEmptyBorder(0, 0, 6, 0)); + + //Graph Settings Panel + final JPanel southPanel = new JPanel(new BorderLayout()); + southPanel.add(optionsPanel, BorderLayout.NORTH); + + GraphFileExporterUIPanel graphSettings = new GraphFileExporterUIPanel(); + graphSettings.setVisibleOnlyGraph(visibleOnlyGraph); + if (GraphFileExporterBuilder.class.isAssignableFrom(builderClass)) { + // Only needed for the graph exporters + southPanel.add(graphSettings, BorderLayout.CENTER); + } + + //Optionable file chooser + final JFileChooser chooser = new JFileChooser(lastPathDir) { + + @Override + protected JDialog createDialog(Component parent) throws HeadlessException { + dialog = super.createDialog(parent); + dialog.setSize(640, 480); + dialog.setResizable(true); + Component c = dialog.getContentPane().getComponent(0); + if (c != null && c instanceof JComponent) { + Insets insets = ((JComponent) c).getInsets(); + southPanel.setBorder( + BorderFactory.createEmptyBorder(insets.top, insets.left, insets.bottom, insets.right)); + } + dialog.getContentPane().add(southPanel, BorderLayout.SOUTH); + + return dialog; + } + + @Override + public void approveSelection() { + if (canExport(this)) { + super.approveSelection(); + } + } + }; + chooser.setFileSelectionMode(exportAll ? JFileChooser.DIRECTORIES_ONLY : JFileChooser.FILES_ONLY); + chooser.setDialogTitle(NbBundle.getMessage(AbstractExporterUI.class, "AbstractExporterUI.filechooser.title")); + chooser.addPropertyChangeListener(JFileChooser.FILE_FILTER_CHANGED_PROPERTY, new PropertyChangeListener() { + + @Override + public void propertyChange(PropertyChangeEvent evt) { + DialogFileFilter fileFilter = (DialogFileFilter) evt.getNewValue(); + + //Save last file filter + NbPreferences.forModule(AbstractExporterUI.class) + .put(LAST_FILE_FILTER, fileFilter.getExtensions().toString()); + + //Options panel enabling + selectedBuilder = getExporter(exporterBuilders, fileFilter); + if (selectedBuilder != null) { + selectedExporter = selectedBuilder.buildExporter(); + + Workspace workspace = Lookup.getDefault().lookup(ProjectController.class).getCurrentWorkspace(); + selectedExporter.setWorkspace(workspace); + + ExporterUI ui = exportController.getExportController().getUI(selectedExporter); + if (ui != null) { + // Load saved values into exporter + ui.setup(selectedExporter); + optionsButton.setEnabled(true); + } else { + optionsButton.setEnabled(false); + } + } else { + optionsButton.setEnabled(false); + } + + //Selected file extension change + if (selectedFile != null && !exportAll) { + String fileName = selectedFile.getName(); + String directoryPath = chooser.getCurrentDirectory().getAbsolutePath(); + if (fileName.lastIndexOf(".") != -1) { + fileName = fileName.substring(0, fileName.lastIndexOf(".")); + fileName = fileName.concat(fileFilter.getExtensions().get(0)); + selectedFile = new File(directoryPath, fileName); + chooser.setSelectedFile(selectedFile); + } + } + } + }); + chooser.addPropertyChangeListener(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY, new PropertyChangeListener() { + + @Override + public void propertyChange(PropertyChangeEvent evt) { + if (evt.getNewValue() != null) { + selectedFile = (File) evt.getNewValue(); + } + } + }); + + //Export all checkbox + JCheckBox exportAllCheckBox = + new JCheckBox(NbBundle.getMessage(AbstractExporterUI.class, "AbstractExporterUI.exportAllCheckBox.text")); + exportAllCheckBox.setSelected(exportAll); + exportAllCheckBox.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + exportAll = exportAllCheckBox.isSelected(); + chooser.setFileSelectionMode(exportAll ? JFileChooser.DIRECTORIES_ONLY : JFileChooser.FILES_ONLY); + } + }); + optionsPanel.add(exportAllCheckBox, BorderLayout.WEST); + + //File filters + DialogFileFilter defaultFileFilter = null; + DialogFileFilter lastFileFilter = null; + + for (FileExporterBuilder graphFileExporter : exporterBuilders) { + for (FileType fileType : graphFileExporter.getFileTypes()) { + DialogFileFilter dialogFileFilter = new DialogFileFilter(fileType.getName()); + dialogFileFilter.addExtensions(fileType.getExtensions()); + if (defaultFileFilter == null) { + defaultFileFilter = dialogFileFilter; + } + + if (lastFileFilterString != null) { + if (dialogFileFilter.getExtensions().toString().equals(lastFileFilterString)) { + lastFileFilter = dialogFileFilter; + } + } + + chooser.addChoosableFileFilter(dialogFileFilter); + } + } + + chooser.setAcceptAllFileFilterUsed(false); + + if (lastFileFilter != null) { + defaultFileFilter = lastFileFilter; + } + + chooser.setFileFilter(defaultFileFilter); + + if (exportAll) { + selectedFile = chooser.getCurrentDirectory(); + } else if (lastPathDir != null && lastPathDir.exists() && lastPathDir.isDirectory()) { + selectedFile = new File(lastPath); + } else { + selectedFile = new File(chooser.getCurrentDirectory(), + NbBundle.getMessage(AbstractExporterUI.class, "AbstractExporterUI.untitledFileName") + + defaultFileFilter.getExtensions().get(0)); + } + chooser.setSelectedFile(selectedFile); + + //Show + int returnFile = chooser.showSaveDialog(null); + if (returnFile == JFileChooser.APPROVE_OPTION) { + File file = chooser.getSelectedFile(); + file = FileUtil.normalizeFile(file); + FileObject fileObject = FileUtil.toFileObject(file); + + //Save last path + NbPreferences.forModule(AbstractExporterUI.class).put(LAST_PATH, file.getAbsolutePath()); + + //Save variable + visibleOnlyGraph = graphSettings.isVisibleOnlyGraph(); + + //Do + if (selectedExporter instanceof GraphExporter) { + ((GraphExporter) selectedExporter).setExportVisible(visibleOnlyGraph); + } + + if (exportAll) { + String extension = selectedBuilder.getFileTypes()[0].getExtension(); + exportController.exportFiles(fileObject, selectedExporter, extension); + } else { + exportController.exportFile(fileObject, selectedExporter); + } + } + dialog = null; + } + + private boolean canExport(JFileChooser chooser) { + if (exportAll) { + // TODO: Warning if directory is not empty + return true; + } + File file = chooser.getSelectedFile(); + String defaultExtension = selectedBuilder.getFileTypes()[0].getExtension(); + + try { + if (!file.getPath().endsWith(defaultExtension)) { + file = new File(file.getPath() + defaultExtension); + selectedFile = file; + chooser.setSelectedFile(file); + } + if (!file.exists()) { + if (!file.createNewFile()) { + String failMsg = NbBundle.getMessage(AbstractExporterUI.class, "AbstractExporterUI.SaveFailed", + new Object[] {file.getPath()}); + JOptionPane.showMessageDialog(chooser, failMsg); + return false; + } + } else { + String overwriteMsg = NbBundle + .getMessage(AbstractExporterUI.class, "AbstractExporterUI.overwriteDialog.message", + new Object[] {file.getPath()}); + if (JOptionPane.showConfirmDialog(chooser, overwriteMsg, + NbBundle.getMessage(AbstractExporterUI.class, "AbstractExporterUI.overwriteDialog.title"), + JOptionPane.YES_NO_OPTION) != JOptionPane.YES_OPTION) { + return false; + } + } + } catch (IOException ex) { + NotifyDescriptor.Message msg = + new NotifyDescriptor.Message(ex.getMessage(), NotifyDescriptor.WARNING_MESSAGE); + DialogDisplayer.getDefault().notifyLater(msg); + return false; + } + + return true; + } + + private FileExporterBuilder getExporter(Collection exporterBuilders, + DialogFileFilter fileFilter) { + //Find fileFilter + for (FileExporterBuilder graphFileExporter : exporterBuilders) { + for (FileType fileType : graphFileExporter.getFileTypes()) { + DialogFileFilter tempFilter = new DialogFileFilter(fileType.getName()); + tempFilter.addExtensions(fileType.getExtensions()); + if (tempFilter.equals(fileFilter)) { + return graphFileExporter; + } + } + } + return null; + } +} diff --git a/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/DesktopExportController.java b/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/DesktopExportController.java index a706f53f09..e8c0b7b563 100644 --- a/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/DesktopExportController.java +++ b/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/DesktopExportController.java @@ -39,26 +39,30 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.io.export; +import java.io.IOException; +import java.util.Collection; import org.gephi.io.exporter.api.ExportController; import org.gephi.io.exporter.spi.Exporter; - - -import org.gephi.utils.longtask.spi.LongTask; +import org.gephi.project.api.Project; +import org.gephi.project.api.ProjectController; +import org.gephi.project.api.Workspace; import org.gephi.utils.longtask.api.LongTaskErrorHandler; import org.gephi.utils.longtask.api.LongTaskExecutor; -import org.openide.DialogDisplayer; -import org.openide.NotifyDescriptor; +import org.gephi.utils.longtask.spi.LongTask; +import org.gephi.utils.progress.Progress; +import org.gephi.utils.progress.ProgressTicket; import org.openide.awt.StatusDisplayer; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileUtil; +import org.openide.util.Exceptions; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = ExportControllerUI.class) @@ -72,37 +76,43 @@ public DesktopExportController() { controller = Lookup.getDefault().lookup(ExportController.class); errorHandler = new LongTaskErrorHandler() { + @Override public void fatalError(Throwable t) { - t.printStackTrace(); - String message = t.getCause().getMessage(); - if (message == null || message.isEmpty()) { - message = t.getMessage(); - } - NotifyDescriptor.Message msg = new NotifyDescriptor.Message(message, NotifyDescriptor.WARNING_MESSAGE); - DialogDisplayer.getDefault().notify(msg); - //Logger.getLogger("").log(Level.WARNING, "", t.getCause()); + Exceptions.printStackTrace(t); } }; executor = new LongTaskExecutor(true, "Exporter", 10); } + @Override + public void exportFiles(FileObject folder, Exporter exporter, final String extension) { + checkExporter(exporter); + + MultipleWorkspacesExporter task = new MultipleWorkspacesExporter(exporter, folder, extension); + executor.execute(task, task); + } + + @Override public void exportFile(final FileObject fileObject, final Exporter exporter) { - if (exporter == null) { - throw new RuntimeException(NbBundle.getMessage(getClass(), "error_no_matching_file_exporter")); - } + checkExporter(exporter); + //Export Task LongTask task = null; if (exporter instanceof LongTask) { task = (LongTask) exporter; } - String taskmsg = NbBundle.getMessage(DesktopExportController.class, "DesktopExportController.exportTaskName", fileObject.getNameExt()); + String taskmsg = NbBundle.getMessage(DesktopExportController.class, "DesktopExportController.exportTaskName", + fileObject.getNameExt()); executor.execute(task, new Runnable() { + @Override public void run() { try { controller.exportFile(FileUtil.toFile(fileObject), exporter); - StatusDisplayer.getDefault().setStatusText(NbBundle.getMessage(DesktopExportController.class, "DesktopExportController.status.exportSuccess", fileObject.getNameExt())); + StatusDisplayer.getDefault().setStatusText(NbBundle + .getMessage(DesktopExportController.class, "DesktopExportController.status.exportSuccess", + fileObject.getNameExt())); } catch (Exception ex) { throw new RuntimeException(ex); } @@ -110,7 +120,81 @@ public void run() { }, taskmsg, errorHandler); } + @Override public ExportController getExportController() { return controller; } + + private void checkExporter(Exporter exporter) { + if (exporter == null) { + throw new RuntimeException(NbBundle.getMessage(getClass(), "error_no_matching_file_exporter")); + } + } + + private class MultipleWorkspacesExporter implements Runnable, LongTask { + + private final Exporter exporter; + private final FileObject folder; + private final String extension; + private boolean cancel = false; + private ProgressTicket progressTicket; + + public MultipleWorkspacesExporter(Exporter exporter, FileObject folder, String extension) { + this.exporter = exporter; + this.folder = folder; + this.extension = extension.replace(".", ""); + } + + @Override + public void run() { + Project project = Lookup.getDefault().lookup(ProjectController.class).getCurrentProject(); + if (project != null) { + Collection workspaceCollection = project.getWorkspaces(); + Progress.start(progressTicket, workspaceCollection.size()); + + for(Workspace workspace :workspaceCollection) { + if (cancel) { + break; + } + try { + FileObject file; + String workspaceName = workspace.getName().replaceAll("[\\\\/:*?\"<>|]", "_"); + if (folder.getFileObject(workspaceName, extension) == null) { + file = folder.createData(workspaceName, extension); + } else { + // Overwrite + file = folder.getFileObject(workspaceName, extension); + } + String taskmsg = NbBundle.getMessage(DesktopExportController.class, "DesktopExportController.exportTaskName", + file.getNameExt()); + Progress.setDisplayName(progressTicket, taskmsg); + + exporter.setWorkspace(workspace); + controller.exportFile(FileUtil.toFile(file), exporter); + Progress.progress(progressTicket); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + Progress.finish(progressTicket); + + if(!cancel) { + StatusDisplayer.getDefault().setStatusText(NbBundle + .getMessage(DesktopExportController.class, "DesktopExportController.status.exportAllSuccess", + workspaceCollection.size(), folder.getPath())); + } + } + } + + @Override + public boolean cancel() { + cancel = true; + return true; + } + + @Override + public void setProgressTicket(ProgressTicket progressTicket) { + this.progressTicket = progressTicket; + } + } } diff --git a/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/Export.java b/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/Export.java index 2e0cf1ddf2..3826cca635 100644 --- a/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/Export.java +++ b/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/Export.java @@ -39,76 +39,71 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.io.export; import java.awt.event.ActionEvent; +import java.util.ArrayList; +import java.util.List; import javax.swing.AbstractAction; +import javax.swing.JComponent; import javax.swing.JMenu; import javax.swing.JMenuItem; import org.gephi.desktop.io.export.spi.ExporterClassUI; import org.gephi.project.api.ProjectController; import org.gephi.project.api.Workspace; import org.gephi.project.api.WorkspaceListener; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionRegistration; +import org.openide.awt.Actions; +import org.openide.awt.DynamicMenuContent; import org.openide.util.HelpCtx; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.actions.CallableSystemAction; -/** - * - * @author Mathieu Bastian - */ -public class Export extends CallableSystemAction { +@ActionID(id = "org.gephi.desktop.project.actions.Export", category = "File") +@ActionRegistration(displayName = "#CTL_Export", lazy = false) +@ActionReference(path = "Menu/File", position = 1200, separatorBefore = 1190) +public class Export extends AbstractAction implements DynamicMenuContent { - private JMenu menu; public Export() { - menu = new JMenu(NbBundle.getMessage(Export.class, "CTL_Export")); - - Lookup.getDefault().lookup(ProjectController.class).addWorkspaceListener(new WorkspaceListener() { - - public void initialize(Workspace workspace) { - } - - public void select(Workspace workspace) { - menu.setEnabled(true); - } - - public void unselect(Workspace workspace) { - } - - public void close(Workspace workspace) { - } - - public void disable() { - menu.setEnabled(false); - } - }); - boolean enabled = Lookup.getDefault().lookup(ProjectController.class).getCurrentWorkspace()!=null; - menu.setEnabled(enabled); + super(NbBundle.getMessage(Export.class, "CTL_Export")); } @Override - public void performAction() { - throw new UnsupportedOperationException("Not supported yet."); + public void actionPerformed(ActionEvent e) { + // does nothing, this is a popup menu } @Override - public String getName() { - return "export"; + public JComponent[] getMenuPresenters() { + return createMenu(); } @Override - public HelpCtx getHelpCtx() { - return null; + public JComponent[] synchMenuPresenters(JComponent[] items) { + return createMenu(); } - @Override - public JMenuItem getMenuPresenter() { + private JComponent[] createMenu() { + JMenu menu = new JMenu(NbBundle.getMessage(Export.class, "CTL_Export")); + menu.setEnabled(Lookup.getDefault().lookup(ProjectController.class).hasCurrentProject()); + + // Graph and image + menu.add(new JMenuItem( + Actions.forID("File", "org.gephi.desktop.io.export.ExportGraph"))); + menu.add(new JMenuItem( + Actions.forID("File", "org.gephi.desktop.io.export.ExportImage"))); + + // Others for (final ExporterClassUI ui : Lookup.getDefault().lookupAll(ExporterClassUI.class)) { String menuName = ui.getName(); JMenuItem menuItem = new JMenuItem(new AbstractAction(menuName) { + @Override public void actionPerformed(ActionEvent e) { ui.action(); } @@ -116,6 +111,6 @@ public void actionPerformed(ActionEvent e) { menu.add(menuItem); menuItem.setEnabled(ui.isEnable()); } - return menu; + return new JComponent[] {menu}; } } \ No newline at end of file diff --git a/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/ExportControllerUI.java b/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/ExportControllerUI.java index bc5a5312fb..15f9f9ae76 100644 --- a/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/ExportControllerUI.java +++ b/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/ExportControllerUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.io.export; import org.gephi.io.exporter.api.ExportController; @@ -46,12 +47,13 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.filesystems.FileObject; /** - * * @author Mathieu Bastian */ public interface ExportControllerUI { - public void exportFile(final FileObject fileObject, final Exporter exporter); + void exportFile(final FileObject fileObject, final Exporter exporter); + + void exportFiles(final FileObject folder, final Exporter exporter, final String extension); - public ExportController getExportController(); + ExportController getExportController(); } diff --git a/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/GraphFileAction.java b/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/GraphFileAction.java new file mode 100644 index 0000000000..6d8381d0cd --- /dev/null +++ b/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/GraphFileAction.java @@ -0,0 +1,31 @@ +package org.gephi.desktop.io.export; + +import java.awt.event.ActionEvent; +import java.util.Arrays; +import javax.swing.AbstractAction; +import org.gephi.io.exporter.spi.GraphFileExporterBuilder; +import org.openide.awt.ActionID; +import org.openide.awt.ActionRegistration; +import org.openide.util.NbBundle; + +@ActionID(id = "org.gephi.desktop.io.export.ExportGraph", category = "File") +@ActionRegistration(displayName = "#CTL_ExportGraphAction", lazy = false) +public class GraphFileAction extends AbstractAction { + + private final AbstractExporterUI exporterUI; + + public GraphFileAction() { + super(NbBundle.getMessage(GraphFileAction.class, "CTL_ExportGraphAction")); + + exporterUI = new AbstractExporterUI<>("GraphFileExporterUI", GraphFileExporterBuilder.class); + } + + @Override + public void actionPerformed(ActionEvent e) { + if(e.getSource() instanceof GraphFileExporterBuilder[]) { + exporterUI.action(Arrays.asList((GraphFileExporterBuilder[]) e.getSource())); + } else { + exporterUI.action(); + } + } +} diff --git a/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/GraphFileExporterUIPanel.java b/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/GraphFileExporterUIPanel.java index b6423fc795..d24d58cf58 100644 --- a/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/GraphFileExporterUIPanel.java +++ b/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/GraphFileExporterUIPanel.java @@ -43,25 +43,36 @@ Development and Distribution License("CDDL") (collectively, the package org.gephi.desktop.io.export; /** - * * @author Mathieu Bastian */ public class GraphFileExporterUIPanel extends javax.swing.JPanel { - /** Creates new form GraphFileExporterUIPanel */ + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JRadioButton fullGraphRadio; + private javax.swing.ButtonGroup graphButtonGroup; + private javax.swing.JLabel labelFullgraph; + private javax.swing.JLabel labelGraph; + private javax.swing.JLabel labelVisibleOnly; + private javax.swing.JRadioButton visibleOnlyRadio; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form GraphFileExporterUIPanel + */ public GraphFileExporterUIPanel() { initComponents(); } - public void setVisibleOnlyGraph(boolean value) { - graphButtonGroup.setSelected((value?visibleOnlyRadio.getModel():fullGraphRadio.getModel()), true); - } - public boolean isVisibleOnlyGraph() { return graphButtonGroup.isSelected(visibleOnlyRadio.getModel()); } - /** This method is called from within the constructor to + public void setVisibleOnlyGraph(boolean value) { + graphButtonGroup.setSelected((value ? visibleOnlyRadio.getModel() : fullGraphRadio.getModel()), true); + } + + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -79,66 +90,61 @@ private void initComponents() { setBorder(javax.swing.BorderFactory.createEtchedBorder()); - labelGraph.setText(org.openide.util.NbBundle.getMessage(GraphFileExporterUIPanel.class, "GraphFileExporterUIPanel.labelGraph.text")); // NOI18N + labelGraph.setText(org.openide.util.NbBundle + .getMessage(GraphFileExporterUIPanel.class, "GraphFileExporterUIPanel.labelGraph.text")); // NOI18N graphButtonGroup.add(fullGraphRadio); fullGraphRadio.setSelected(true); - fullGraphRadio.setText(org.openide.util.NbBundle.getMessage(GraphFileExporterUIPanel.class, "GraphFileExporterUIPanel.fullGraphRadio.text")); // NOI18N + fullGraphRadio.setText(org.openide.util.NbBundle + .getMessage(GraphFileExporterUIPanel.class, "GraphFileExporterUIPanel.fullGraphRadio.text")); // NOI18N graphButtonGroup.add(visibleOnlyRadio); - visibleOnlyRadio.setText(org.openide.util.NbBundle.getMessage(GraphFileExporterUIPanel.class, "GraphFileExporterUIPanel.visibleOnlyRadio.text")); // NOI18N + visibleOnlyRadio.setText(org.openide.util.NbBundle + .getMessage(GraphFileExporterUIPanel.class, "GraphFileExporterUIPanel.visibleOnlyRadio.text")); // NOI18N labelFullgraph.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N labelFullgraph.setForeground(new java.awt.Color(102, 102, 102)); - labelFullgraph.setText(org.openide.util.NbBundle.getMessage(GraphFileExporterUIPanel.class, "GraphFileExporterUIPanel.labelFullgraph.text")); // NOI18N + labelFullgraph.setText(org.openide.util.NbBundle + .getMessage(GraphFileExporterUIPanel.class, "GraphFileExporterUIPanel.labelFullgraph.text")); // NOI18N labelVisibleOnly.setFont(new java.awt.Font("Tahoma", 0, 10)); labelVisibleOnly.setForeground(new java.awt.Color(102, 102, 102)); - labelVisibleOnly.setText(org.openide.util.NbBundle.getMessage(GraphFileExporterUIPanel.class, "GraphFileExporterUIPanel.labelVisibleOnly.text")); // NOI18N + labelVisibleOnly.setText(org.openide.util.NbBundle + .getMessage(GraphFileExporterUIPanel.class, "GraphFileExporterUIPanel.labelVisibleOnly.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(labelGraph) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(visibleOnlyRadio) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(labelVisibleOnly)) - .addGroup(layout.createSequentialGroup() - .addComponent(fullGraphRadio) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(labelFullgraph))) - .addContainerGap(21, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(labelGraph) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(visibleOnlyRadio) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(labelVisibleOnly)) + .addGroup(layout.createSequentialGroup() + .addComponent(fullGraphRadio) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(labelFullgraph))) + .addContainerGap(21, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(labelGraph) - .addComponent(fullGraphRadio) - .addComponent(labelFullgraph)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(visibleOnlyRadio) - .addComponent(labelVisibleOnly)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelGraph) + .addComponent(fullGraphRadio) + .addComponent(labelFullgraph)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(visibleOnlyRadio) + .addComponent(labelVisibleOnly)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JRadioButton fullGraphRadio; - private javax.swing.ButtonGroup graphButtonGroup; - private javax.swing.JLabel labelFullgraph; - private javax.swing.JLabel labelGraph; - private javax.swing.JLabel labelVisibleOnly; - private javax.swing.JRadioButton visibleOnlyRadio; - // End of variables declaration//GEN-END:variables - } diff --git a/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/ImageFileAction.java b/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/ImageFileAction.java new file mode 100644 index 0000000000..d6ac5fa086 --- /dev/null +++ b/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/ImageFileAction.java @@ -0,0 +1,26 @@ +package org.gephi.desktop.io.export; + +import java.awt.event.ActionEvent; +import javax.swing.AbstractAction; +import org.gephi.io.exporter.spi.VectorFileExporterBuilder; +import org.openide.awt.ActionID; +import org.openide.awt.ActionRegistration; +import org.openide.util.NbBundle; + +@ActionID(id = "org.gephi.desktop.io.export.ExportImage", category = "File") +@ActionRegistration(displayName = "#CTL_ExportImageAction", lazy = false) +public class ImageFileAction extends AbstractAction { + + private final AbstractExporterUI exporterUI; + + public ImageFileAction() { + super(NbBundle.getMessage(ImageFileAction.class, "CTL_ExportImageAction")); + + exporterUI = new AbstractExporterUI<>("VectorialFileExporterUI", VectorFileExporterBuilder.class); + } + + @Override + public void actionPerformed(ActionEvent e) { + exporterUI.action(); + } +} diff --git a/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/api/TopDialog.java b/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/TopDialog.java similarity index 88% rename from modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/api/TopDialog.java rename to modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/TopDialog.java index d1703ae00f..9314629c94 100644 --- a/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/api/TopDialog.java +++ b/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/TopDialog.java @@ -40,7 +40,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ -package org.gephi.desktop.io.export.api; +package org.gephi.desktop.io.export; import java.awt.BorderLayout; import java.awt.Color; @@ -79,27 +79,27 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.Utilities; /** - * * @author mbastian */ class TopDialog extends JDialog { + private static final int MSG_TYPE_ERROR = 1; + private static final int MSG_TYPE_WARNING = 2; + private static final int MSG_TYPE_INFO = 3; final NotifyDescriptor nd; - private Component messageComponent; private final JPanel buttonPanel; private final Object[] closingOptions; private final ActionListener buttonListener; + private Component messageComponent; private boolean haveFinalValue = false; private Color nbErrorForeground; private Color nbWarningForeground; private Color nbInfoForeground; private JLabel notificationLine; - private static final int MSG_TYPE_ERROR = 1; - private static final int MSG_TYPE_WARNING = 2; - private static final int MSG_TYPE_INFO = 3; protected TopDialog(JDialog parent, - String title, boolean modal, NotifyDescriptor nd, Object[] closingOptions, ActionListener buttonListener) { + String title, boolean modal, NotifyDescriptor nd, Object[] closingOptions, + ActionListener buttonListener) { super(parent, title, modal); this.nd = nd; this.closingOptions = closingOptions; @@ -118,6 +118,7 @@ protected TopDialog(JDialog parent, Action cancelAction = new AbstractAction() { + @Override public void actionPerformed(ActionEvent ev) { cancel(); } @@ -125,14 +126,15 @@ public void actionPerformed(ActionEvent ev) { getRootPane().getActionMap().put(actionKey, cancelAction); addWindowListener( - new WindowAdapter() { + new WindowAdapter() { - public void windowClosing(WindowEvent ev) { - if (!haveFinalValue) { - TopDialog.this.nd.setValue(NotifyDescriptor.CLOSED_OPTION); - } + @Override + public void windowClosing(WindowEvent ev) { + if (!haveFinalValue) { + TopDialog.this.nd.setValue(NotifyDescriptor.CLOSED_OPTION); } - }); + } + }); pack(); Rectangle r = Utilities.getUsableScreenBounds(); @@ -144,6 +146,132 @@ public void windowClosing(WindowEvent ev) { setBounds(Utilities.findCenterBounds(d)); } + private static void updateNotificationLine(TopDialog dialog, int msgType, Object o) { + String msg = o == null ? null : o.toString(); + if (msg != null && msg.trim().length() > 0) { + switch (msgType) { + case TopDialog.MSG_TYPE_ERROR: + prepareMessage(dialog.notificationLine, + ImageUtilities.loadImageIcon("org/netbeans/modules/dialogs/error.gif", false), + dialog.nbErrorForeground); + break; + case TopDialog.MSG_TYPE_WARNING: + prepareMessage(dialog.notificationLine, + ImageUtilities.loadImageIcon("org/netbeans/modules/dialogs/warning.gif", false), + dialog.nbWarningForeground); + break; + case TopDialog.MSG_TYPE_INFO: + prepareMessage(dialog.notificationLine, + ImageUtilities.loadImageIcon("org/netbeans/modules/dialogs/info.png", false), + dialog.nbInfoForeground); + break; + default: + } + dialog.notificationLine.setToolTipText(msg); + } else { + prepareMessage(dialog.notificationLine, null, null); + dialog.notificationLine.setToolTipText(null); + } + dialog.notificationLine.setText(msg); + } + + private static void prepareMessage(JLabel label, ImageIcon icon, Color fgColor) { + label.setIcon(icon); + label.setForeground(fgColor); + } + + /** + * Given a message object, create a displayable component from it. + */ + private static Component message2Component(Object message) { + if (message instanceof Component) { + return (Component) message; + } else if (message instanceof Object[]) { + Object[] sub = (Object[]) message; + JPanel panel = new JPanel(); + panel.setLayout(new FlowLayout()); + + for (int i = 0; i < sub.length; i++) { + panel.add(message2Component(sub[i])); + } + + return panel; + } else if (message instanceof Icon) { + return new JLabel((Icon) message); + } else { + // bugfix #35742, used JTextArea to correctly word-wrapping + String text = message.toString(); + JTextArea area = new JTextArea(text); + Color c = UIManager.getColor("Label.background"); // NOI18N + + if (c != null) { + area.setBackground(c); + } + + area.setLineWrap(true); + area.setWrapStyleWord(true); + area.setEditable(false); + area.setTabSize(4); // looks better for module sys messages than 8 + + area.setColumns(40); + + if (text.indexOf('\n') != -1) { + // Complex multiline message. + return new JScrollPane(area); + } else { + // Simple message. + return area; + } + } + } + + private static Component option2Button(Object option, NotifyDescriptor nd, ActionListener l, JRootPane rp) { + if (option instanceof AbstractButton) { + AbstractButton b = (AbstractButton) option; + b.addActionListener(l); + + return b; + } else if (option instanceof Component) { + return (Component) option; + } else if (option instanceof Icon) { + return new JLabel((Icon) option); + } else { + String text; + boolean defcap; + + if (option == NotifyDescriptor.OK_OPTION) { + text = "OK"; // XXX I18N + defcap = true; + } else if (option == NotifyDescriptor.CANCEL_OPTION) { + text = "Cancel"; // XXX I18N + defcap = false; + } else if (option == NotifyDescriptor.YES_OPTION) { + text = "Yes"; // XXX I18N + defcap = true; + } else if (option == NotifyDescriptor.NO_OPTION) { + text = "No"; // XXX I18N + defcap = false; + } else if (option == NotifyDescriptor.CLOSED_OPTION) { + throw new IllegalArgumentException(); + } else { + text = option.toString(); + defcap = false; + } + + JButton b = new JButton(text); + + if (defcap && (rp.getDefaultButton() == null)) { + rp.setDefaultButton(b); + } + + // added a simple accessible name to buttons + b.getAccessibleContext().setAccessibleName(text); + b.addActionListener(l); + + return b; + } + } + private void cancel() { nd.setValue(NotifyDescriptor.CANCEL_OPTION); haveFinalValue = true; @@ -193,25 +321,25 @@ public void updateMessage() { } public void updateOptions() { - Set addedOptions = new HashSet(5); + Set addedOptions = new HashSet<>(5); Object[] options = nd.getOptions(); if (options == null) { switch (nd.getOptionType()) { case NotifyDescriptor.DEFAULT_OPTION: case NotifyDescriptor.OK_CANCEL_OPTION: - options = new Object[]{NotifyDescriptor.OK_OPTION, NotifyDescriptor.CANCEL_OPTION,}; + options = new Object[] {NotifyDescriptor.OK_OPTION, NotifyDescriptor.CANCEL_OPTION,}; break; case NotifyDescriptor.YES_NO_OPTION: - options = new Object[]{NotifyDescriptor.YES_OPTION, NotifyDescriptor.NO_OPTION,}; + options = new Object[] {NotifyDescriptor.YES_OPTION, NotifyDescriptor.NO_OPTION,}; break; case NotifyDescriptor.YES_NO_CANCEL_OPTION: - options = new Object[]{ - NotifyDescriptor.YES_OPTION, NotifyDescriptor.NO_OPTION, NotifyDescriptor.CANCEL_OPTION,}; + options = new Object[] { + NotifyDescriptor.YES_OPTION, NotifyDescriptor.NO_OPTION, NotifyDescriptor.CANCEL_OPTION,}; break; @@ -262,7 +390,7 @@ private void attachActionListener(Object comp, ActionListener l) { java.lang.reflect.Method m; try { - m = comp.getClass().getMethod("addActionListener", new Class[]{ActionListener.class}); // NOI18N + m = comp.getClass().getMethod("addActionListener", ActionListener.class); // NOI18N try { m.setAccessible(true); @@ -277,7 +405,7 @@ private void attachActionListener(Object comp, ActionListener l) { if (m != null) { try { - m.invoke(comp, new Object[]{l}); + m.invoke(comp, l); } catch (Exception e) { // not succeeded, so give up } @@ -288,6 +416,7 @@ private void attachActionListener(Object comp, ActionListener l) { private ActionListener makeListener(final Object option) { return new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { //System.err.println("actionPerformed: " + option); nd.setValue(option); @@ -295,7 +424,7 @@ public void actionPerformed(ActionEvent e) { if (buttonListener != null) { // #34485: some listeners expect that the action source is the option, not the button ActionEvent e2 = new ActionEvent( - option, e.getID(), e.getActionCommand(), e.getWhen(), e.getModifiers()); + option, e.getID(), e.getActionCommand(), e.getWhen(), e.getModifiers()); buttonListener.actionPerformed(e2); } @@ -307,37 +436,6 @@ public void actionPerformed(ActionEvent e) { }; } - private static void updateNotificationLine(TopDialog dialog, int msgType, Object o) { - String msg = o == null ? null : o.toString(); - if (msg != null && msg.trim().length() > 0) { - switch (msgType) { - case TopDialog.MSG_TYPE_ERROR: - prepareMessage(dialog.notificationLine, ImageUtilities.loadImageIcon("org/netbeans/modules/dialogs/error.gif", false), - dialog.nbErrorForeground); - break; - case TopDialog.MSG_TYPE_WARNING: - prepareMessage(dialog.notificationLine, ImageUtilities.loadImageIcon("org/netbeans/modules/dialogs/warning.gif", false), - dialog.nbWarningForeground); - break; - case TopDialog.MSG_TYPE_INFO: - prepareMessage(dialog.notificationLine, ImageUtilities.loadImageIcon("org/netbeans/modules/dialogs/info.png", false), - dialog.nbInfoForeground); - break; - default: - } - dialog.notificationLine.setToolTipText(msg); - } else { - prepareMessage(dialog.notificationLine, null, null); - dialog.notificationLine.setToolTipText(null); - } - dialog.notificationLine.setText(msg); - } - - private static void prepareMessage(JLabel label, ImageIcon icon, Color fgColor) { - label.setIcon(icon); - label.setForeground(fgColor); - } - private static final class FixedHeightLabel extends JLabel { private static final int ESTIMATED_HEIGHT = 16; @@ -349,101 +447,11 @@ public FixedHeightLabel() { @Override public Dimension getPreferredSize() { Dimension preferredSize = super.getPreferredSize(); - assert ESTIMATED_HEIGHT == ImageUtilities.loadImage("org/netbeans/modules/dialogs/warning.gif").getHeight(null) : "Use only 16px icon."; + assert ESTIMATED_HEIGHT == + ImageUtilities.loadImage("org/netbeans/modules/dialogs/warning.gif").getHeight(null) : + "Use only 16px icon."; preferredSize.height = Math.max(ESTIMATED_HEIGHT, preferredSize.height); return preferredSize; } } - - /** - * Given a message object, create a displayable component from it. - */ - private static Component message2Component(Object message) { - if (message instanceof Component) { - return (Component) message; - } else if (message instanceof Object[]) { - Object[] sub = (Object[]) message; - JPanel panel = new JPanel(); - panel.setLayout(new FlowLayout()); - - for (int i = 0; i < sub.length; i++) { - panel.add(message2Component(sub[i])); - } - - return panel; - } else if (message instanceof Icon) { - return new JLabel((Icon) message); - } else { - // bugfix #35742, used JTextArea to correctly word-wrapping - String text = message.toString(); - JTextArea area = new JTextArea(text); - Color c = UIManager.getColor("Label.background"); // NOI18N - - if (c != null) { - area.setBackground(c); - } - - area.setLineWrap(true); - area.setWrapStyleWord(true); - area.setEditable(false); - area.setTabSize(4); // looks better for module sys messages than 8 - - area.setColumns(40); - - if (text.indexOf('\n') != -1) { - // Complex multiline message. - return new JScrollPane(area); - } else { - // Simple message. - return area; - } - } - } - - private static Component option2Button(Object option, NotifyDescriptor nd, ActionListener l, JRootPane rp) { - if (option instanceof AbstractButton) { - AbstractButton b = (AbstractButton) option; - b.addActionListener(l); - - return b; - } else if (option instanceof Component) { - return (Component) option; - } else if (option instanceof Icon) { - return new JLabel((Icon) option); - } else { - String text; - boolean defcap; - - if (option == NotifyDescriptor.OK_OPTION) { - text = "OK"; // XXX I18N - defcap = true; - } else if (option == NotifyDescriptor.CANCEL_OPTION) { - text = "Cancel"; // XXX I18N - defcap = false; - } else if (option == NotifyDescriptor.YES_OPTION) { - text = "Yes"; // XXX I18N - defcap = true; - } else if (option == NotifyDescriptor.NO_OPTION) { - text = "No"; // XXX I18N - defcap = false; - } else if (option == NotifyDescriptor.CLOSED_OPTION) { - throw new IllegalArgumentException(); - } else { - text = option.toString(); - defcap = false; - } - - JButton b = new JButton(text); - - if (defcap && (rp.getDefaultButton() == null)) { - rp.setDefaultButton(b); - } - - // added a simple accessible name to buttons - b.getAccessibleContext().setAccessibleName(text); - b.addActionListener(l); - - return b; - } - } } diff --git a/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/api/GraphFileExporterUI.java b/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/api/GraphFileExporterUI.java deleted file mode 100644 index 42daabdd5d..0000000000 --- a/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/api/GraphFileExporterUI.java +++ /dev/null @@ -1,289 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.desktop.io.export.api; - -import java.awt.BorderLayout; -import java.awt.Component; -import java.awt.FlowLayout; -import java.awt.HeadlessException; -import java.awt.Insets; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.io.File; -import java.io.IOException; -import javax.swing.BorderFactory; -import javax.swing.JButton; -import javax.swing.JComponent; -import javax.swing.JDialog; -import javax.swing.JFileChooser; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import org.gephi.desktop.io.export.ExportControllerUI; -import org.gephi.desktop.io.export.GraphFileExporterUIPanel; -import org.gephi.desktop.io.export.spi.ExporterClassUI; -import org.gephi.io.exporter.api.FileType; -import org.gephi.io.exporter.spi.ExporterUI; -import org.gephi.io.exporter.spi.GraphExporter; -import org.gephi.io.exporter.spi.GraphFileExporterBuilder; -import org.gephi.ui.utils.DialogFileFilter; -import org.openide.DialogDescriptor; -import org.openide.DialogDisplayer; -import org.openide.NotifyDescriptor; -import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileUtil; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; -import org.openide.util.NbPreferences; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = ExporterClassUI.class) -public final class GraphFileExporterUI implements ExporterClassUI { - - private GraphFileExporterBuilder selectedBuilder; - private GraphExporter selectedExporter; - private File selectedFile; - private boolean visibleOnlyGraph = false; - private JDialog dialog; - - public String getName() { - return NbBundle.getMessage(GraphFileExporterUI.class, "GraphFileExporterUI_title"); - } - - public boolean isEnable() { - return true; - } - - public void action() { - final String LAST_PATH = "GraphFileExporterUI_Last_Path"; - final String LAST_PATH_DEFAULT = "GraphFileExporterUI_Last_Path_Default"; - - final ExportControllerUI exportController = Lookup.getDefault().lookup(ExportControllerUI.class); - if (exportController == null) { - return; - } - - //Get last directory - String lastPathDefault = NbPreferences.forModule(GraphFileExporterUI.class).get(LAST_PATH_DEFAULT, null); - String lastPath = NbPreferences.forModule(GraphFileExporterUI.class).get(LAST_PATH, lastPathDefault); - - //Options panel - FlowLayout layout = new FlowLayout(FlowLayout.RIGHT); - JPanel optionsPanel = new JPanel(layout); - final JButton optionsButton = new JButton(NbBundle.getMessage(GraphFileExporterUI.class, "GraphFileExporterUI_optionsButton_name")); - optionsPanel.add(optionsButton); - optionsButton.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - ExporterUI exporterUI = exportController.getExportController().getUI(selectedExporter); - if (exporterUI != null) { - JPanel panel = exporterUI.getPanel(); - exporterUI.setup(selectedExporter); - - DialogDescriptor dd = new DialogDescriptor(panel, NbBundle.getMessage(GraphFileExporterUI.class, "GraphFileExporterUI_optionsDialog_title", selectedBuilder.getName())); - TopDialog topDialog = new TopDialog(dialog, dd.getTitle(), dd.isModal(), dd, dd.getClosingOptions(), dd.getButtonListener()); - topDialog.setVisible(true); - Object result = (dd.getValue() != null) ? dd.getValue() : NotifyDescriptor.CLOSED_OPTION; -// Object result = DialogDisplayer.getDefault().notify(dd); - exporterUI.unsetup(result == NotifyDescriptor.OK_OPTION); - } - } - }); - - //Graph Settings Panel - final JPanel southPanel = new JPanel(new BorderLayout()); - southPanel.add(optionsPanel, BorderLayout.NORTH); - GraphFileExporterUIPanel graphSettings = new GraphFileExporterUIPanel(); - graphSettings.setVisibleOnlyGraph(visibleOnlyGraph); - southPanel.add(graphSettings, BorderLayout.CENTER); - - //Optionable file chooser - final JFileChooser chooser = new JFileChooser(lastPath) { - - @Override - protected JDialog createDialog(Component parent) throws HeadlessException { - dialog = super.createDialog(parent); - dialog.setSize(640, 480); - dialog.setResizable(true); - Component c = dialog.getContentPane().getComponent(0); - if (c != null && c instanceof JComponent) { - Insets insets = ((JComponent) c).getInsets(); - southPanel.setBorder(BorderFactory.createEmptyBorder(insets.top, insets.left, insets.bottom, insets.right)); - } - dialog.getContentPane().add(southPanel, BorderLayout.SOUTH); - - return dialog; - } - - @Override - public void approveSelection() { - if (canExport(this)) { - super.approveSelection(); - } - } - }; - chooser.setDialogTitle(NbBundle.getMessage(GraphFileExporterUI.class, "GraphFileExporterUI_filechooser_title")); - chooser.addPropertyChangeListener(JFileChooser.FILE_FILTER_CHANGED_PROPERTY, new PropertyChangeListener() { - - public void propertyChange(PropertyChangeEvent evt) { - DialogFileFilter fileFilter = (DialogFileFilter) evt.getNewValue(); - - //Options panel enabling - selectedBuilder = getExporter(fileFilter); - if (selectedBuilder != null) { - selectedExporter = selectedBuilder.buildExporter(); - } - if (selectedBuilder != null && exportController.getExportController().getUI(selectedExporter) != null) { - optionsButton.setEnabled(true); - } else { - optionsButton.setEnabled(false); - } - - //Selected file extension change - if (selectedFile != null && fileFilter != null) { - String fileName = selectedFile.getName(); - String directoryPath = chooser.getCurrentDirectory().getAbsolutePath(); - if (fileName.lastIndexOf(".") != -1) { - fileName = fileName.substring(0, fileName.lastIndexOf(".")); - fileName = fileName.concat(fileFilter.getExtensions().get(0)); - selectedFile = new File(directoryPath, fileName); - chooser.setSelectedFile(selectedFile); - } - } - } - }); - chooser.addPropertyChangeListener(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY, new PropertyChangeListener() { - - public void propertyChange(PropertyChangeEvent evt) { - if (evt.getNewValue() != null) { - selectedFile = (File) evt.getNewValue(); - } - } - }); - - //File filters - DialogFileFilter defaultFilter = null; - for (GraphFileExporterBuilder graphFileExporter : Lookup.getDefault().lookupAll(GraphFileExporterBuilder.class)) { - for (FileType fileType : graphFileExporter.getFileTypes()) { - DialogFileFilter dialogFileFilter = new DialogFileFilter(fileType.getName()); - dialogFileFilter.addExtensions(fileType.getExtensions()); - if (defaultFilter == null) { - defaultFilter = dialogFileFilter; - } - chooser.addChoosableFileFilter(dialogFileFilter); - } - } - chooser.setAcceptAllFileFilterUsed(false); - chooser.setFileFilter(defaultFilter); - selectedFile = new File(chooser.getCurrentDirectory(), "Untitled" + defaultFilter.getExtensions().get(0)); - chooser.setSelectedFile(selectedFile); - - //Show - int returnFile = chooser.showSaveDialog(null); - if (returnFile == JFileChooser.APPROVE_OPTION) { - File file = chooser.getSelectedFile(); - file = FileUtil.normalizeFile(file); - FileObject fileObject = FileUtil.toFileObject(file); - - //Save last path - NbPreferences.forModule(GraphFileExporterUI.class).put(LAST_PATH, file.getAbsolutePath()); - - //Save variable - visibleOnlyGraph = graphSettings.isVisibleOnlyGraph(); - - //Do - selectedExporter.setExportVisible(visibleOnlyGraph); - exportController.exportFile(fileObject, selectedExporter); - } - dialog = null; - } - - private boolean canExport(JFileChooser chooser) { - File file = chooser.getSelectedFile(); - String defaultExtention = selectedBuilder.getFileTypes()[0].getExtension(); - - try { - if (!file.getPath().endsWith(defaultExtention)) { - file = new File(file.getPath() + defaultExtention); - selectedFile = file; - chooser.setSelectedFile(file); - } - if (!file.exists()) { - if (!file.createNewFile()) { - String failMsg = NbBundle.getMessage(GraphFileExporterUI.class, "GraphFileExporterUI_SaveFailed", new Object[]{file.getPath()}); - JOptionPane.showMessageDialog(null, failMsg); - return false; - } - } else { - String overwriteMsg = NbBundle.getMessage(GraphFileExporterUI.class, "GraphFileExporterUI_overwriteDialog_message", new Object[]{file.getPath()}); - if (JOptionPane.showConfirmDialog(null, overwriteMsg, NbBundle.getMessage(GraphFileExporterUI.class, "GraphFileExporterUI_overwriteDialog_title"), JOptionPane.YES_NO_OPTION) != JOptionPane.YES_OPTION) { - return false; - } - } - } catch (IOException ex) { - NotifyDescriptor.Message msg = new NotifyDescriptor.Message(ex.getMessage(), NotifyDescriptor.WARNING_MESSAGE); - DialogDisplayer.getDefault().notifyLater(msg); - return false; - } - - return true; - } - - private GraphFileExporterBuilder getExporter(DialogFileFilter fileFilter) { - //Find fileFilter - for (GraphFileExporterBuilder graphFileExporter : Lookup.getDefault().lookupAll(GraphFileExporterBuilder.class)) { - for (FileType fileType : graphFileExporter.getFileTypes()) { - DialogFileFilter tempFilter = new DialogFileFilter(fileType.getName()); - tempFilter.addExtensions(fileType.getExtensions()); - if (tempFilter.equals(fileFilter)) { - return graphFileExporter; - } - } - } - return null; - } -} diff --git a/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/api/VectorialFileExporterUI.java b/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/api/VectorialFileExporterUI.java deleted file mode 100644 index 2f39483f27..0000000000 --- a/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/api/VectorialFileExporterUI.java +++ /dev/null @@ -1,275 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.desktop.io.export.api; - -import java.awt.BorderLayout; -import java.awt.Component; -import java.awt.FlowLayout; -import java.awt.HeadlessException; -import java.awt.Insets; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.io.File; -import java.io.IOException; -import javax.swing.BorderFactory; -import javax.swing.JButton; -import javax.swing.JComponent; -import javax.swing.JDialog; -import javax.swing.JFileChooser; -import javax.swing.JOptionPane; -import javax.swing.JPanel; -import org.gephi.desktop.io.export.ExportControllerUI; -import org.gephi.desktop.io.export.spi.ExporterClassUI; -import org.gephi.io.exporter.api.FileType; -import org.gephi.io.exporter.spi.ExporterUI; -import org.gephi.io.exporter.spi.VectorExporter; -import org.gephi.io.exporter.spi.VectorFileExporterBuilder; -import org.gephi.ui.utils.DialogFileFilter; -import org.openide.DialogDescriptor; -import org.openide.DialogDisplayer; -import org.openide.NotifyDescriptor; -import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileUtil; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; -import org.openide.util.NbPreferences; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = ExporterClassUI.class) -public final class VectorialFileExporterUI implements ExporterClassUI { - - private VectorFileExporterBuilder selectedBuilder; - private VectorExporter selectedExporter; - private File selectedFile; - private JDialog dialog; - - public String getName() { - return NbBundle.getMessage(VectorialFileExporterUI.class, "VectorialFileExporterUI_title"); - } - - public boolean isEnable() { - return true; - } - - public void action() { - final String LAST_PATH = "VectorialFileExporterUI_Last_Path"; - final String LAST_PATH_DEFAULT = "VectorialFileExporterUI_Last_Path_Default"; - - final ExportControllerUI exportController = Lookup.getDefault().lookup(ExportControllerUI.class); - if (exportController == null) { - return; - } - - //Get last directory - String lastPathDefault = NbPreferences.forModule(VectorialFileExporterUI.class).get(LAST_PATH_DEFAULT, null); - String lastPath = NbPreferences.forModule(VectorialFileExporterUI.class).get(LAST_PATH, lastPathDefault); - - //Options panel - FlowLayout layout = new FlowLayout(FlowLayout.RIGHT); - JPanel optionsPanel = new JPanel(layout); - final JButton optionsButton = new JButton(NbBundle.getMessage(VectorialFileExporterUI.class, "VectorialFileExporterUI_optionsButton_name")); - optionsPanel.add(optionsButton); - optionsButton.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - ExporterUI exporterUI = exportController.getExportController().getUI(selectedExporter); - if (exporterUI != null) { - JPanel panel = exporterUI.getPanel(); - exporterUI.setup(selectedExporter); - DialogDescriptor dd = new DialogDescriptor(panel, NbBundle.getMessage(VectorialFileExporterUI.class, "VectorialFileExporterUI_optionsDialog_title", selectedBuilder.getName())); - TopDialog topDialog = new TopDialog(dialog, dd.getTitle(), dd.isModal(), dd, dd.getClosingOptions(), dd.getButtonListener()); - topDialog.setVisible(true); - Object result = (dd.getValue() != null) ? dd.getValue() : NotifyDescriptor.CLOSED_OPTION; -// Object result = DialogDisplayer.getDefault().notify(dd); - exporterUI.unsetup(result == NotifyDescriptor.OK_OPTION); - } - } - }); - - //Graph Settings Panel - final JPanel southPanel = new JPanel(new BorderLayout()); - southPanel.add(optionsPanel, BorderLayout.NORTH); - - //Optionable file chooser - final JFileChooser chooser = new JFileChooser(lastPath) { - - @Override - protected JDialog createDialog(Component parent) throws HeadlessException { - dialog = super.createDialog(parent); - Component c = dialog.getContentPane().getComponent(0); - if (c != null && c instanceof JComponent) { - Insets insets = ((JComponent) c).getInsets(); - southPanel.setBorder(BorderFactory.createEmptyBorder(insets.top, insets.left, insets.bottom, insets.right)); - } - dialog.getContentPane().add(southPanel, BorderLayout.SOUTH); - - return dialog; - } - - @Override - public void approveSelection() { - if (canExport(this)) { - super.approveSelection(); - } - } - }; - chooser.setDialogTitle(NbBundle.getMessage(VectorialFileExporterUI.class, "VectorialFileExporterUI_filechooser_title")); - chooser.addPropertyChangeListener(JFileChooser.FILE_FILTER_CHANGED_PROPERTY, new PropertyChangeListener() { - - public void propertyChange(PropertyChangeEvent evt) { - DialogFileFilter fileFilter = (DialogFileFilter) evt.getNewValue(); - - //Options panel enabling - selectedBuilder = getExporter(fileFilter); - if (selectedBuilder != null) { - selectedExporter = selectedBuilder.buildExporter(); - } - if (selectedExporter != null && exportController.getExportController().getUI(selectedExporter) != null) { - optionsButton.setEnabled(true); - } else { - optionsButton.setEnabled(false); - } - - //Selected file extension change - if (selectedFile != null && fileFilter != null) { - String fileName = selectedFile.getName(); - String directoryPath = chooser.getCurrentDirectory().getAbsolutePath(); - if (fileName.lastIndexOf(".") != -1) { - fileName = fileName.substring(0, fileName.lastIndexOf(".")); - fileName = fileName.concat(fileFilter.getExtensions().get(0)); - selectedFile = new File(directoryPath, fileName); - chooser.setSelectedFile(selectedFile); - } - } - } - }); - chooser.addPropertyChangeListener(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY, new PropertyChangeListener() { - - public void propertyChange(PropertyChangeEvent evt) { - if (evt.getNewValue() != null) { - selectedFile = (File) evt.getNewValue(); - } - } - }); - - //File filters - DialogFileFilter defaultFilter = null; - for (VectorFileExporterBuilder vectorFileExporter : Lookup.getDefault().lookupAll(VectorFileExporterBuilder.class)) { - for (FileType fileType : vectorFileExporter.getFileTypes()) { - DialogFileFilter dialogFileFilter = new DialogFileFilter(fileType.getName()); - dialogFileFilter.addExtensions(fileType.getExtensions()); - if (defaultFilter == null) { - defaultFilter = dialogFileFilter; - } - chooser.addChoosableFileFilter(dialogFileFilter); - } - } - chooser.setAcceptAllFileFilterUsed(false); - chooser.setFileFilter(defaultFilter); - selectedFile = new File(chooser.getCurrentDirectory(), "Untitled" + defaultFilter.getExtensions().get(0)); - chooser.setSelectedFile(selectedFile); - - //Show - int returnFile = chooser.showSaveDialog(null); - if (returnFile == JFileChooser.APPROVE_OPTION) { - File file = chooser.getSelectedFile(); - file = FileUtil.normalizeFile(file); - FileObject fileObject = FileUtil.toFileObject(file); - - //Save last path - NbPreferences.forModule(VectorialFileExporterUI.class).put(LAST_PATH, file.getAbsolutePath()); - - //Do - exportController.exportFile(fileObject, selectedExporter); - } - dialog = null; - } - - private boolean canExport(JFileChooser chooser) { - File file = chooser.getSelectedFile(); - String defaultExtention = selectedBuilder.getFileTypes()[0].getExtension(); - - try { - if (!file.getPath().endsWith(defaultExtention)) { - file = new File(file.getPath() + defaultExtention); - chooser.setSelectedFile(file); - } - if (!file.exists()) { - if (!file.createNewFile()) { - String failMsg = NbBundle.getMessage(VectorialFileExporterUI.class, "VectorialFileExporterUI_SaveFailed", new Object[]{file.getPath()}); - JOptionPane.showMessageDialog(null, failMsg); - return false; - } - } else { - String overwriteMsg = NbBundle.getMessage(VectorialFileExporterUI.class, "VectorialFileExporterUI_overwriteDialog_message", new Object[]{file.getPath()}); - if (JOptionPane.showConfirmDialog(null, overwriteMsg, NbBundle.getMessage(VectorialFileExporterUI.class, "VectorialFileExporterUI_overwriteDialog_title"), JOptionPane.YES_NO_OPTION) != JOptionPane.YES_OPTION) { - return false; - } - } - } catch (IOException ex) { - NotifyDescriptor.Message msg = new NotifyDescriptor.Message(ex.getMessage(), NotifyDescriptor.WARNING_MESSAGE); - DialogDisplayer.getDefault().notifyLater(msg); - return false; - } - return true; - } - - private VectorFileExporterBuilder getExporter(DialogFileFilter fileFilter) { - //Find fileFilter - for (VectorFileExporterBuilder graphFileExporter : Lookup.getDefault().lookupAll(VectorFileExporterBuilder.class)) { - for (FileType fileType : graphFileExporter.getFileTypes()) { - DialogFileFilter tempFilter = new DialogFileFilter(fileType.getName()); - tempFilter.addExtensions(fileType.getExtensions()); - if (tempFilter.equals(fileFilter)) { - return graphFileExporter; - } - } - } - return null; - } -} diff --git a/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/spi/ExporterClassUI.java b/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/spi/ExporterClassUI.java index a097003723..12dea27d4e 100644 --- a/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/spi/ExporterClassUI.java +++ b/modules/DesktopExport/src/main/java/org/gephi/desktop/io/export/spi/ExporterClassUI.java @@ -39,17 +39,17 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.io.export.spi; /** - * * @author Mathieu Bastian */ public interface ExporterClassUI { - public String getName(); + String getName(); - public boolean isEnable(); + boolean isEnable(); - public void action(); + void action(); } diff --git a/modules/DesktopExport/src/main/nbm/manifest.mf b/modules/DesktopExport/src/main/nbm/manifest.mf index ce65842954..0e75ac31b3 100644 --- a/modules/DesktopExport/src/main/nbm/manifest.mf +++ b/modules/DesktopExport/src/main/nbm/manifest.mf @@ -1,5 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true -OpenIDE-Module-Layer: org/gephi/desktop/io/export/layer.xml OpenIDE-Module-Localizing-Bundle: org/gephi/desktop/io/export/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi UI +OpenIDE-Module-Name: Desktop Export diff --git a/modules/DesktopExport/src/main/nbm/module.xml b/modules/DesktopExport/src/main/nbm/module.xml deleted file mode 100644 index 3230170935..0000000000 --- a/modules/DesktopExport/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle.properties index cfe32dee5d..b35a40dcde 100644 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle.properties +++ b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle.properties @@ -1,17 +1,18 @@ -OpenIDE-Module-Display-Category=Gephi UI -OpenIDE-Module-Long-Description=\ - Integrate and manage export features in UI. - OpenIDE-Module-Name=Desktop Export +OpenIDE-Module-Long-Description=Integrate and manage export features in UI. OpenIDE-Module-Short-Description=Integrate export - CTL_Export = Export CTL_ExportGraphAction = Graph file... +CTL_ExportImageAction = SVG/PDF/PNG file... - -error_missing_document_instance_factory = Impossible to obtain an instance of DocumentBuilder -error_transformer = Impossible to write XML file due to Tranformer problem. -error_io = Impossible to write text file. +AbstractExporterUI.filechooser.title = Export +AbstractExporterUI.optionsButton.name = Options... +AbstractExporterUI.optionsDialog.title = Options {0} +AbstractExporterUI.SaveFailed = Could not write to file {0} +AbstractExporterUI.overwriteDialog.message={0} exists. Overwrite? +AbstractExporterUI.overwriteDialog.title=Confirm +AbstractExporterUI.untitledFileName=Untitled +AbstractExporterUI.exportAllCheckBox.text=Export all workspaces GraphFileExporterUIPanel.labelVisibleOnly.text=Only the current visualized graph is exported GraphFileExporterUIPanel.labelFullgraph.text=The complete graph is exported @@ -21,5 +22,6 @@ GraphFileExporterUIPanel.labelGraph.text=Graph: DesktopExportController.exportTaskName = Export to {0} DesktopExportController.status.exportSuccess = {0} successfully exported +DesktopExportController.status.exportAllSuccess = {0} workpaces successfully exported to {1} diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_ar.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_ca.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_ca.properties new file mode 100644 index 0000000000..59fd4dd85e --- /dev/null +++ b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_ca.properties @@ -0,0 +1,25 @@ +OpenIDE-Module-Long-Description=Integrate and manage export features in UI. +OpenIDE-Module-Short-Description=Integrate export + +CTL_Export=Exporta +CTL_ExportGraphAction=Fitxer del graf... +CTL_ExportImageAction = Fitxer SVG/PDF/PNG... + +AbstractExporterUI.filechooser.title = Exporta +AbstractExporterUI.optionsButton.name = Opcions... +AbstractExporterUI.optionsDialog.title = Opcions {0} +AbstractExporterUI.SaveFailed = No s'ha pogut escriure el fitxer {0} +AbstractExporterUI.overwriteDialog.message={0} ja existeix. Els vols sobreescriure? +AbstractExporterUI.overwriteDialog.title=Confirma + +GraphFileExporterUIPanel.labelVisibleOnly.text=Only the current visualized graph is exported +GraphFileExporterUIPanel.labelFullgraph.text=S'ha exportat tot el graf +GraphFileExporterUIPanel.visibleOnlyRadio.text=Nomιs visible +GraphFileExporterUIPanel.fullGraphRadio.text=Ple +GraphFileExporterUIPanel.labelGraph.text=Graf: + +DesktopExportController.exportTaskName=Exporta a {0} +DesktopExportController.status.exportSuccess={0} s'ha exportat amb θxit + + + diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_cs.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_cs.properties index e2a788019f..2decb19ed1 100644 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_cs.properties +++ b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_cs.properties @@ -1,35 +1,24 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-26 16\:54+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=Za\u010dlenit a spravovat funkce exportu v rozhran\u00ed. - -OpenIDE-Module-Short-Description=Za\u010dlenit export - -CTL_Export=Exportovat - -CTL_ExportGraphAction=Soubor grafu... - -error_missing_document_instance_factory=Nelze z\u00edskat instanci DocumentBuilder - -error_transformer=Nelze zapsat XML kv\u016fli probl\u00e9mu transform\u00e1toru. - -error_io=Nelze zapisovat do textov\u00e9ho souboru. - -GraphFileExporterUIPanel.labelVisibleOnly.text=Exportov\u00e1n je pouze graf v sou\u010dasnosti vizualizovan\u00fd graf - -GraphFileExporterUIPanel.labelFullgraph.text=Cel\u00fd graf je exportov\u00e1n - -GraphFileExporterUIPanel.visibleOnlyRadio.text=Pouze viditeln\u00e9 - -GraphFileExporterUIPanel.fullGraphRadio.text=\u00dapln\u00e9 - -GraphFileExporterUIPanel.labelGraph.text=Graf\: - -DesktopExportController.exportTaskName=Exportovat do {0} - -DesktopExportController.status.exportSuccess={0} \u00fasp\u011b\u0161n\u011b exportov\u00e1no +OpenIDE-Module-Long-Description=Za\u010dlenit a spravovat funkce exportu v rozhranν. +OpenIDE-Module-Short-Description=Za\u010dlenit export + +CTL_Export = Exportovat +CTL_ExportGraphAction = Soubor grafu... +CTL_ExportImageAction = Soubor SVG/PDF/PNG... + +AbstractExporterUI.filechooser.title = Exportovat +AbstractExporterUI.optionsButton.name = Volby... +AbstractExporterUI.optionsDialog.title = Volby {0} +AbstractExporterUI.SaveFailed = Nelze zapisovat do souboru {0} +AbstractExporterUI.overwriteDialog.message={0} existuje. P\u0159epsat? +AbstractExporterUI.overwriteDialog.title=Potvrdit + +GraphFileExporterUIPanel.labelVisibleOnly.text=Exportovαn je pouze graf v sou\u010dasnosti vizualizovanύ graf +GraphFileExporterUIPanel.labelFullgraph.text=Celύ graf je exportovαn +GraphFileExporterUIPanel.visibleOnlyRadio.text=Pouze viditelnι +GraphFileExporterUIPanel.fullGraphRadio.text=Ϊplnι +GraphFileExporterUIPanel.labelGraph.text=Graf: + +DesktopExportController.exportTaskName = Exportovat do {0} +DesktopExportController.status.exportSuccess = {0} ϊsp\u011b\u0161n\u011b exportovαno + + diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_de.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_de.properties new file mode 100644 index 0000000000..7006a05745 --- /dev/null +++ b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_de.properties @@ -0,0 +1,24 @@ +OpenIDE-Module-Long-Description=Integriere und verwalte Export-Funktionen in UI +OpenIDE-Module-Short-Description=Integriere Export + +CTL_Export=Export +CTL_ExportGraphAction=Graph Datei... +CTL_ExportImageAction = SVG/PDF/PNG Datei.... + +AbstractExporterUI.filechooser.title = Export +AbstractExporterUI.optionsButton.name = Optionen... +AbstractExporterUI.optionsDialog.title = Optionen {0} +AbstractExporterUI.SaveFailed = Konnte Datei {0} nicht schreiben +AbstractExporterUI.overwriteDialog.message={0} existiert. άberschreiben? +AbstractExporterUI.overwriteDialog.title=Bestδtigen + +GraphFileExporterUIPanel.labelVisibleOnly.text=Nur der aktuell dargestellte Graph wird exportiert +GraphFileExporterUIPanel.labelFullgraph.text=Der vollstδndige Graph wird exportiert +GraphFileExporterUIPanel.visibleOnlyRadio.text=Nur sichtbar +GraphFileExporterUIPanel.fullGraphRadio.text=Vollstδndig +GraphFileExporterUIPanel.labelGraph.text=Graph: +DesktopExportController.exportTaskName=Exportiere nach {0} +DesktopExportController.status.exportSuccess={0} erfolgreich exportiert + + + diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_es.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_es.properties index 2de0cb489c..59f00267f8 100644 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_es.properties +++ b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_es.properties @@ -1,35 +1,24 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:08+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Integrar y administrar las caracter\u00edsticas de exportaci\u00f3n en la interfaz de usuario. - -OpenIDE-Module-Short-Description=Integrar exportaci\u00f3n - +OpenIDE-Module-Long-Description=Integrar y administrar las caracterνsticas de exportaciσn en la interfaz de usuario. +OpenIDE-Module-Short-Description=Integrar exportaciσn CTL_Export=Exportar - CTL_ExportGraphAction=Archivo de grafo... - -error_missing_document_instance_factory=Imposible obtener una entidad de DocumentBuilder - -error_transformer=Imposible escribir archivo XML debido a un problema de Transformer. - -error_io=Imposible escribir archivo de texto. - +CTL_ExportImageAction=Archivo SVG/PDF/PNG... +AbstractExporterUI.filechooser.title=Exportar +AbstractExporterUI.optionsButton.name=Opciones... +AbstractExporterUI.optionsDialog.title=Opciones {0} +AbstractExporterUI.SaveFailed=Imposible escribir en el archivo {0} +AbstractExporterUI.overwriteDialog.message={0} ya existe. ΏSobreescribir? +AbstractExporterUI.overwriteDialog.title=Confirmar GraphFileExporterUIPanel.labelVisibleOnly.text=Exportar solamente el grafo visualizado actualmente - GraphFileExporterUIPanel.labelFullgraph.text=Exportar el grafo completo - GraphFileExporterUIPanel.visibleOnlyRadio.text=Visible solo - GraphFileExporterUIPanel.fullGraphRadio.text=Completo +GraphFileExporterUIPanel.labelGraph.text=Grafo: +DesktopExportController.exportTaskName=Exportar a {0} +DesktopExportController.status.exportSuccess={0} exportado con ιxito -GraphFileExporterUIPanel.labelGraph.text=Grafo\: -DesktopExportController.exportTaskName=Exportar a {0} -DesktopExportController.status.exportSuccess={0} exportado con \u00e9xito +AbstractExporterUI.untitledFileName=Sin t\u00EDtulo +DesktopExportController.status.exportAllSuccess={0} espacios de trabajo exportados con \u00E9xito a {1} +AbstractExporterUI.exportAllCheckBox.text=Exportar todos los espacios de trabajo diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_fr.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_fr.properties index 26adf3b28b..c4845d6e0a 100644 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_fr.properties +++ b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_fr.properties @@ -1,35 +1,24 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:08+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Int\u00e8gre et g\u00e8re les fonctionnalit\u00e9s d'export dans l'interface utilisateur. - -OpenIDE-Module-Short-Description=Int\u00e8gre l'export. - -CTL_Export=Export - -CTL_ExportGraphAction=Fichier de graphe... - -error_missing_document_instance_factory=Impossible d'obtenir une instance de DocumentBuilder - -error_transformer=Impossible d'\u00e9crire le fichier XML \u00e0 cause d'un probl\u00e8me de Tranformer - -error_io=Impossible d'\u00e9crire le fichier texte. - -GraphFileExporterUIPanel.labelVisibleOnly.text=Seul le graphe visible est export\u00e9 - -GraphFileExporterUIPanel.labelFullgraph.text=Le graphe complet est export\u00e9 - -GraphFileExporterUIPanel.visibleOnlyRadio.text=Visible - -GraphFileExporterUIPanel.fullGraphRadio.text=Complet - -GraphFileExporterUIPanel.labelGraph.text=Graphe\: - -DesktopExportController.exportTaskName=Exporter vers {0} - -DesktopExportController.status.exportSuccess={0} export\u00e9 avec succ\u00e8s +OpenIDE-Module-Long-Description=Intθgre et gθre les fonctionnalitιs d'export dans l'interface utilisateur. +OpenIDE-Module-Short-Description=Intθgre l'export. + +CTL_Export = Export +CTL_ExportGraphAction = Fichier de graphe... +CTL_ExportImageAction = Fichier SVG/PDF/PNG... + +AbstractExporterUI.filechooser.title = Export +AbstractExporterUI.optionsButton.name = Options... +AbstractExporterUI.optionsDialog.title = Options {0} +AbstractExporterUI.SaveFailed = Impossible d'ιcrire le fichier {0}. +AbstractExporterUI.overwriteDialog.message={0} existe. Ιcraser ? +AbstractExporterUI.overwriteDialog.title=Confirmer + +GraphFileExporterUIPanel.labelVisibleOnly.text=Seul le graphe visible est exportι +GraphFileExporterUIPanel.labelFullgraph.text=Le graphe complet est exportι +GraphFileExporterUIPanel.visibleOnlyRadio.text=Visible +GraphFileExporterUIPanel.fullGraphRadio.text=Complet +GraphFileExporterUIPanel.labelGraph.text=Graphe: + +DesktopExportController.exportTaskName = Exporter vers {0} +DesktopExportController.status.exportSuccess = {0} exportι avec succθs + + diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_he.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_he.properties new file mode 100644 index 0000000000..1fec3333fd --- /dev/null +++ b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_he.properties @@ -0,0 +1,16 @@ +OpenIDE-Module-Long-Description=Integrate and manage export features in UI. +OpenIDE-Module-Short-Description=Integrate export + +CTL_Export=Export +CTL_ExportGraphAction=Graph file... + +GraphFileExporterUIPanel.labelVisibleOnly.text=Only the current visualized graph is exported +GraphFileExporterUIPanel.labelFullgraph.text=The complete graph is exported +GraphFileExporterUIPanel.visibleOnlyRadio.text=Visible only +GraphFileExporterUIPanel.fullGraphRadio.text=Full +GraphFileExporterUIPanel.labelGraph.text=Graph: +DesktopExportController.exportTaskName=Export to {0} +DesktopExportController.status.exportSuccess={0} successfully exported + + + diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_hu.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_hu.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_hu.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_it.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_it.properties new file mode 100644 index 0000000000..79fa7c11cd --- /dev/null +++ b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_it.properties @@ -0,0 +1,25 @@ +OpenIDE-Module-Long-Description=Integrate and manage export features in UI. +OpenIDE-Module-Short-Description=Integrate export + + +CTL_Export=Esporta +CTL_ExportGraphAction=Graph file... +CTL_ExportImageAction = File SVG/PDF/PNG... + +AbstractExporterUI.filechooser.title=Esporta +AbstractExporterUI.optionsButton.name=Opzioni... +AbstractExporterUI.optionsDialog.title=Opzioni {0} +AbstractExporterUI.SaveFailed=Could not write to file {0} +AbstractExporterUI.overwriteDialog.message={0} esiste giΰ. Sovrascrivere? +AbstractExporterUI.overwriteDialog.title=Conferma + +GraphFileExporterUIPanel.labelVisibleOnly.text=Only the current visualized graph is exported +GraphFileExporterUIPanel.labelFullgraph.text=The complete graph is exported +GraphFileExporterUIPanel.visibleOnlyRadio.text=Visible only +GraphFileExporterUIPanel.fullGraphRadio.text=Full +GraphFileExporterUIPanel.labelGraph.text=Graph: +DesktopExportController.exportTaskName=Export to {0} +DesktopExportController.status.exportSuccess={0} successfully exported + + + diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_ja.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_ja.properties index 79f276b4c3..fe68a3c85c 100644 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_ja.properties +++ b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_ja.properties @@ -1,35 +1,25 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-03 02\:42+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=UI\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u6a5f\u80fd\u3092\u7d71\u5408\u53ca\u3073\u7ba1\u7406 - -OpenIDE-Module-Short-Description=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3092\u7d71\u5408 - -CTL_Export=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 - -CTL_ExportGraphAction=\u30b0\u30e9\u30d5\u30d5\u30a1\u30a4\u30eb... - -error_missing_document_instance_factory=DocumentBuilder\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u53d6\u5f97\u4e0d\u80fd - -error_transformer=Tranformer\u306e\u554f\u984c\u306b\u8d77\u56e0\u3059\u308bXML\u30d5\u30a1\u30a4\u30eb\u51fa\u529b\u4e0d\u80fd\u3002 - -error_io=\u30c6\u30ad\u30b9\u30c8\u30d5\u200b\u200b\u30a1\u30a4\u30eb\u306b\u66f8\u304d\u8fbc\u307f\u3067\u304d\u307e\u305b\u3093\u3002 - -GraphFileExporterUIPanel.labelVisibleOnly.text=\u73fe\u5728\u8868\u793a\u4e2d\u30b0\u30e9\u30d5\u304c\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3055\u308c\u307e\u3059 - -GraphFileExporterUIPanel.labelFullgraph.text=\u5b8c\u5168\u306a\u30b0\u30e9\u30d5\u304c\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3055\u308c\u307e\u3059 - -GraphFileExporterUIPanel.visibleOnlyRadio.text=\u53ef\u8996\u306e\u307f - -GraphFileExporterUIPanel.fullGraphRadio.text=\u6700\u5927\u9650 - -GraphFileExporterUIPanel.labelGraph.text=\u30b0\u30e9\u30d5\: - -DesktopExportController.exportTaskName={0}\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 - -DesktopExportController.status.exportSuccess={0}\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u6210\u529f +OpenIDE-Module-Long-Description=UI\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u6a5f\u80fd\u3092\u7d71\u5408\u53ca\u3073\u7ba1\u7406 +OpenIDE-Module-Short-Description=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3092\u7d71\u5408 + + +CTL_Export = \u30a8\u30af\u30b9\u30dd\u30fc\u30c8 +CTL_ExportGraphAction = \u30b0\u30e9\u30d5\u30d5\u30a1\u30a4\u30eb... +CTL_ExportImageAction = SVG/PDF/PNG\u30d5\u30a1\u30a4\u30eb... + +AbstractExporterUI.filechooser.title = \u30a8\u30af\u30b9\u30dd\u30fc\u30c8 +AbstractExporterUI.optionsButton.name = \u30aa\u30d7\u30b7\u30e7\u30f3... +AbstractExporterUI.optionsDialog.title = \u30aa\u30d7\u30b7\u30e7\u30f3{0} +AbstractExporterUI.SaveFailed = \u30d5\u30a1\u30a4\u30eb{0}\u306b\u66f8\u304d\u8fbc\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f +AbstractExporterUI.overwriteDialog.message={0} \u306f\u3059\u3067\u306b\u3042\u308a\u307e\u3059\u3002 \u4e0a\u66f8\u304d\u3057\u307e\u3059\u304b\uff1f +AbstractExporterUI.overwriteDialog.title=\u78ba\u8a8d + +GraphFileExporterUIPanel.labelVisibleOnly.text=\u73fe\u5728\u8868\u793a\u4e2d\u30b0\u30e9\u30d5\u304c\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3055\u308c\u307e\u3059 +GraphFileExporterUIPanel.labelFullgraph.text=\u5b8c\u5168\u306a\u30b0\u30e9\u30d5\u304c\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u3055\u308c\u307e\u3059 +GraphFileExporterUIPanel.visibleOnlyRadio.text=\u53ef\u8996\u306e\u307f +GraphFileExporterUIPanel.fullGraphRadio.text=\u6700\u5927\u9650 +GraphFileExporterUIPanel.labelGraph.text=\u30b0\u30e9\u30d5: + +DesktopExportController.exportTaskName = {0}\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 +DesktopExportController.status.exportSuccess = {0}\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\u6210\u529f + + diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_ko.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_ko.properties new file mode 100644 index 0000000000..ee5a7ec254 --- /dev/null +++ b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_ko.properties @@ -0,0 +1,23 @@ + + +GraphFileExporterUIPanel.visibleOnlyRadio.text=\uD45C\uC2DC\uB41C \uBD80\uBD84\uB9CC +CTL_ExportImageAction=SVG/PDF/PNG \uD30C\uC77C... +AbstractExporterUI.optionsButton.name=\uC635\uC158... +GraphFileExporterUIPanel.labelGraph.text=\uADF8\uB798\uD504: +DesktopExportController.exportTaskName={0}(\uC73C)\uB85C \uB0B4\uBCF4\uB0B4\uAE30 +CTL_Export=\uB0B4\uBCF4\uB0B4\uAE30 +GraphFileExporterUIPanel.labelFullgraph.text=\uC644\uC804 \uADF8\uB798\uD504\uAC00 \uB0B4\uBCF4\uB0B4\uC84C\uC2B5\uB2C8\uB2E4 +GraphFileExporterUIPanel.labelVisibleOnly.text=\uD604\uC7AC \uC2DC\uAC01\uD654\uB41C \uADF8\uB798\uD504\uB9CC \uB0B4\uBCF4\uB0C5\uB2C8\uB2E4 +AbstractExporterUI.overwriteDialog.title=\uD655\uC778 +AbstractExporterUI.overwriteDialog.message={0}\uAC00 \uC874\uC7AC\uD569\uB2C8\uB2E4. \uB36E\uC5B4\uC4F8\uAE4C\uC694? +AbstractExporterUI.exportAllCheckBox.text=\uBAA8\uB4E0 \uC791\uC5C5 \uACF5\uAC04 \uB0B4\uBCF4\uB0B4\uAE30 +GraphFileExporterUIPanel.fullGraphRadio.text=\uC804\uCCB4 +CTL_ExportGraphAction=\uADF8\uB798\uD504 \uD30C\uC77C... +AbstractExporterUI.SaveFailed={0} \uD30C\uC77C\uC5D0 \uC4F8 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 +AbstractExporterUI.optionsDialog.title={0} \uC635\uC158 +DesktopExportController.status.exportAllSuccess={0} \uAC1C \uC791\uC5C5 \uACF5\uAC04\uC774 {1}\uC5D0 \uC131\uACF5\uC801\uC73C\uB85C \uB0B4\uBCF4\uB0B4\uC84C\uC2B5\uB2C8\uB2E4 +OpenIDE-Module-Short-Description=\uB0B4\uBCF4\uB0B4\uAE30 \uD1B5\uD569 +OpenIDE-Module-Long-Description=UI\uC5D0\uC11C \uB0B4\uBCF4\uB0B4\uAE30 \uAE30\uB2A5\uC744 \uD1B5\uD569\uD558\uACE0 \uAD00\uB9AC\uD569\uB2C8\uB2E4. +DesktopExportController.status.exportSuccess={0}\uC5D0 \uC131\uACF5\uC801\uC73C\uB85C \uB0B4\uBCF4\uB0C8\uC2B5\uB2C8\uB2E4 +AbstractExporterUI.untitledFileName=\uC81C\uBAA9 \uC5C6\uC74C +AbstractExporterUI.filechooser.title=\uB0B4\uBCF4\uB0B4\uAE30 diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_nl.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_nl.properties new file mode 100644 index 0000000000..ac023c5a99 --- /dev/null +++ b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_nl.properties @@ -0,0 +1,24 @@ +OpenIDE-Module-Long-Description=Integrate and manage export features in UI. +OpenIDE-Module-Short-Description=Integrate export + + +CTL_Export=Export +CTL_ExportGraphAction=Graafbestand... + +AbstractExporterUI.filechooser.title=Export +AbstractExporterUI.optionsButton.name=Options... +AbstractExporterUI.optionsDialog.title=Options {0} +AbstractExporterUI.SaveFailed=Could not write to file {0} +AbstractExporterUI.overwriteDialog.message={0} exists. Overwrite? +AbstractExporterUI.overwriteDialog.title=Confirm + +GraphFileExporterUIPanel.labelVisibleOnly.text=Alleen de huidige zichtbare graaf wordt geλxporteerd +GraphFileExporterUIPanel.labelFullgraph.text=De volledige graaf is geλxporteerd +GraphFileExporterUIPanel.visibleOnlyRadio.text=Visible only +GraphFileExporterUIPanel.fullGraphRadio.text=Full +GraphFileExporterUIPanel.labelGraph.text=Graaf: +DesktopExportController.exportTaskName=Export to {0} +DesktopExportController.status.exportSuccess={0} successfully exported + + + diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_pt_BR.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_pt_BR.properties index a52fbd5a5b..b5e7578bef 100644 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_pt_BR.properties +++ b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_pt_BR.properties @@ -1,35 +1,25 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 18\:22+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Integrar e administrar os recursos de exportac\u00e3o pela interface de usu\u00e1rio. - -OpenIDE-Module-Short-Description=Integrar exporta\u00e7\u00e3o - -CTL_Export=Exportar - -CTL_ExportGraphAction=Arquivo de grafo... - -error_missing_document_instance_factory=Imposs\u00edvel obter uma inst\u00e2ncia da classe DocumentBuilder - -error_transformer=Imposs\u00edvel escrever arquivo XML devido a um problema no Transformador. - -error_io=Imposs\u00edvel escrever arquivo de texto. - -GraphFileExporterUIPanel.labelVisibleOnly.text=Apenas o grafo atualmente vis\u00edvel ser\u00e1 exportado - -GraphFileExporterUIPanel.labelFullgraph.text=O grafo completo ser\u00e1 exportado - -GraphFileExporterUIPanel.visibleOnlyRadio.text=Vis\u00edveis apenas - -GraphFileExporterUIPanel.fullGraphRadio.text=Completo - -GraphFileExporterUIPanel.labelGraph.text=Grafo\: - -DesktopExportController.exportTaskName=Exportar para {0} - -DesktopExportController.status.exportSuccess={0} exportado com sucesso +OpenIDE-Module-Long-Description=Integrar e administrar os recursos de exportacγo pela interface de usuαrio. +OpenIDE-Module-Short-Description=Integrar exportaηγo + + +CTL_Export = Exportar +CTL_ExportGraphAction = Arquivo de grafo... +CTL_ExportImageAction = Arquivo SVG/PDF/PNG... + +AbstractExporterUI.filechooser.title = Exportar +AbstractExporterUI.optionsButton.name = Opηυes... +AbstractExporterUI.optionsDialog.title = Opηυes {0} +AbstractExporterUI.SaveFailed = Nγo foi possνvel escrever no arquivo {0} +AbstractExporterUI.overwriteDialog.message={0} jα existe. Sobrescrever? +AbstractExporterUI.overwriteDialog.title=Confirmar + +GraphFileExporterUIPanel.labelVisibleOnly.text=Apenas o grafo atualmente visνvel serα exportado +GraphFileExporterUIPanel.labelFullgraph.text=O grafo completo serα exportado +GraphFileExporterUIPanel.visibleOnlyRadio.text=Visνveis apenas +GraphFileExporterUIPanel.fullGraphRadio.text=Completo +GraphFileExporterUIPanel.labelGraph.text=Grafo: + +DesktopExportController.exportTaskName = Exportar para {0} +DesktopExportController.status.exportSuccess = {0} exportado com sucesso + + diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_ro.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_ro.properties new file mode 100644 index 0000000000..fe8ef1d63c --- /dev/null +++ b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_ro.properties @@ -0,0 +1,23 @@ + + +OpenIDE-Module-Long-Description=Integreaz\u0103 \u0219i gestioneaz\u0103 func\u021Biile de export \u00EEn interfa\u021B\u0103. +OpenIDE-Module-Short-Description=Integreaz\u0103 exportul + +CTL_Export=Export +CTL_ExportGraphAction=Fi\u0219ier graf... +CTL_ExportImageAction = Fi\u0219ier SVG/PDF/PNG... + +AbstractExporterUI.optionsButton.name=Op\u021Biuni... +AbstractExporterUI.filechooser.title=Export +AbstractExporterUI.optionsDialog.title=Op\u021Biuni {0} +AbstractExporterUI.SaveFailed=Nu s-a putut scrie \u00EEn fi\u0219ierul {0} +AbstractExporterUI.overwriteDialog.message={0} exist\u0103. Suprascrie? +AbstractExporterUI.overwriteDialog.title=Confirm\u0103 + +GraphFileExporterUIPanel.labelVisibleOnly.text=Se export\u0103 doar graful vizualizat curent +GraphFileExporterUIPanel.labelFullgraph.text=Este exportat graful complet +GraphFileExporterUIPanel.visibleOnlyRadio.text=Numai vizibil +GraphFileExporterUIPanel.fullGraphRadio.text=Complet +GraphFileExporterUIPanel.labelGraph.text=Graf: +DesktopExportController.exportTaskName=Export\u0103 \u00EEn {0} +DesktopExportController.status.exportSuccess={0} a fost exportat cu succes diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_ru.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_ru.properties index 89838a9284..4d979ac38c 100644 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_ru.properties +++ b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_ru.properties @@ -1,35 +1,25 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-28 19\:14+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - OpenIDE-Module-Long-Description=Integrate and manage export features in UI. - OpenIDE-Module-Short-Description=Integrate export -CTL_Export=\u042d\u043a\u0441\u043f\u043e\u0440\u0442 +CTL_Export=\u042d\u043a\u0441\u043f\u043e\u0440\u0442 CTL_ExportGraphAction=\u0424\u0430\u0439\u043b \u0441 \u0433\u0440\u0430\u0444\u043e\u043c... +CTL_ExportImageAction = SVG/PDF/PNG \u0444\u0430\u0439\u043b... -error_missing_document_instance_factory=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 DocumentBuilder - -error_transformer=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c XML-\u0444\u0430\u0439\u043b \u0438\u0437-\u0437\u0430 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 Tranformer - -error_io=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0444\u0430\u0439\u043b +AbstractExporterUI.filechooser.title = \u042d\u043a\u0441\u043f\u043e\u0440\u0442 +AbstractExporterUI.optionsButton.name = \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438... +AbstractExporterUI.optionsDialog.title = \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 {0} +AbstractExporterUI.SaveFailed = \u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0444\u0430\u0439\u043b {0} +AbstractExporterUI.overwriteDialog.message={0} \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c? +AbstractExporterUI.overwriteDialog.title=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 GraphFileExporterUIPanel.labelVisibleOnly.text=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0432\u0438\u0434\u0438\u043c\u044b\u0439 \u0433\u0440\u0430\u0444 - GraphFileExporterUIPanel.labelFullgraph.text=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u043b\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 - GraphFileExporterUIPanel.visibleOnlyRadio.text=\u0422\u043e\u043b\u044c\u043a\u043e \u0432\u0438\u0434\u0438\u043c\u044b\u0439 - GraphFileExporterUIPanel.fullGraphRadio.text=\u041f\u043e\u043b\u043d\u044b\u0439 +GraphFileExporterUIPanel.labelGraph.text=\u0413\u0440\u0430\u0444: +DesktopExportController.exportTaskName=\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0432 {0} +DesktopExportController.status.exportSuccess={0} \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d -GraphFileExporterUIPanel.labelGraph.text=\u0413\u0440\u0430\u0444\: -DesktopExportController.exportTaskName=\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0432 {0} -DesktopExportController.status.exportSuccess={0} \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_th.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_tr.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_tr.properties new file mode 100644 index 0000000000..7638166fd3 --- /dev/null +++ b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_tr.properties @@ -0,0 +1,17 @@ +OpenIDE-Module-Long-Description=Integrate and manage export features in UI. +OpenIDE-Module-Short-Description=Integrate export + + +CTL_Export=Export +CTL_ExportGraphAction=Graph file... + +GraphFileExporterUIPanel.labelVisibleOnly.text=Only the current visualized graph is exported +GraphFileExporterUIPanel.labelFullgraph.text=The complete graph is exported +GraphFileExporterUIPanel.visibleOnlyRadio.text=Visible only +GraphFileExporterUIPanel.fullGraphRadio.text=Full +GraphFileExporterUIPanel.labelGraph.text=Graph: +DesktopExportController.exportTaskName=Export to {0} +DesktopExportController.status.exportSuccess={0} successfully exported + + + diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_uk.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_uk.properties new file mode 100644 index 0000000000..18c61cfba9 --- /dev/null +++ b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_uk.properties @@ -0,0 +1,21 @@ +AbstractExporterUI.exportAllCheckBox.text=\u0415\u043A\u0441\u043F\u043E\u0440\u0442\u0443\u0439\u0442\u0435 \u0432\u0441\u0456 \u0440\u043E\u0431\u043E\u0447\u0456 \u043E\u0431\u043B\u0430\u0441\u0442\u0456 +AbstractExporterUI.SaveFailed=\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u0437\u0430\u043F\u0438\u0441\u0430\u0442\u0438 \u0443 \u0444\u0430\u0439\u043B {0} +AbstractExporterUI.overwriteDialog.title=\u041F\u0456\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0438 +OpenIDE-Module-Long-Description=\u0406\u043D\u0442\u0435\u0433\u0440\u0443\u0439\u0442\u0435 \u0444\u0443\u043D\u043A\u0446\u0456\u0457 \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u0443 \u0442\u0430 \u043A\u0435\u0440\u0443\u0439\u0442\u0435 \u043D\u0438\u043C\u0438 \u0432 \u0456\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0456 \u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430. +CTL_Export=\u0415\u043A\u0441\u043F\u043E\u0440\u0442 +CTL_ExportGraphAction=\u0413\u0440\u0430\u0444\u0456\u0447\u043D\u0438\u0439 \u0444\u0430\u0439\u043B... +CTL_ExportImageAction=\u0424\u0430\u0439\u043B SVG/PDF/PNG... +AbstractExporterUI.filechooser.title=\u0415\u043A\u0441\u043F\u043E\u0440\u0442 +AbstractExporterUI.optionsButton.name=\u041E\u043F\u0446\u0456\u0457... +AbstractExporterUI.optionsDialog.title=\u041E\u043F\u0446\u0456\u0457 {0} +GraphFileExporterUIPanel.labelVisibleOnly.text=\u0415\u043A\u0441\u043F\u043E\u0440\u0442\u0443\u0454\u0442\u044C\u0441\u044F \u043B\u0438\u0448\u0435 \u043F\u043E\u0442\u043E\u0447\u043D\u0438\u0439 \u0432\u0456\u0437\u0443\u0430\u043B\u0456\u0437\u043E\u0432\u0430\u043D\u0438\u0439 \u0433\u0440\u0430\u0444\u0456\u043A +GraphFileExporterUIPanel.labelFullgraph.text=\u041F\u043E\u0432\u043D\u0438\u0439 \u0433\u0440\u0430\u0444\u0456\u043A \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u0443\u0454\u0442\u044C\u0441\u044F +GraphFileExporterUIPanel.visibleOnlyRadio.text=\u041B\u0438\u0448\u0435 \u0432\u0438\u0434\u0438\u043C\u0456 +GraphFileExporterUIPanel.fullGraphRadio.text=\u041F\u043E\u0432\u043D\u0438\u0439 +GraphFileExporterUIPanel.labelGraph.text=\u0413\u0440\u0430\u0444\u0456\u043A: +DesktopExportController.exportTaskName=\u0415\u043A\u0441\u043F\u043E\u0440\u0442 \u0434\u043E {0} +DesktopExportController.status.exportSuccess={0} \u0443\u0441\u043F\u0456\u0448\u043D\u043E \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u043E\u0432\u0430\u043D\u043E +DesktopExportController.status.exportAllSuccess={0} \u0440\u043E\u0431\u043E\u0447\u0438\u0445 \u043E\u0431\u043B\u0430\u0441\u0442\u0435\u0439 \u0443\u0441\u043F\u0456\u0448\u043D\u043E \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u043E\u0432\u0430\u043D\u043E \u0432 {1} +OpenIDE-Module-Short-Description=\u0406\u043D\u0442\u0435\u0433\u0440\u0443\u0432\u0430\u0442\u0438 \u0435\u043A\u0441\u043F\u043E\u0440\u0442 +AbstractExporterUI.overwriteDialog.message={0} \u0456\u0441\u043D\u0443\u0454. \u041F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u0430\u0442\u0438? +AbstractExporterUI.untitledFileName=\u0411\u0435\u0437 \u043D\u0430\u0437\u0432\u0438 diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_zh_CN.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_zh_CN.properties index 239b1f2cef..12549654e1 100644 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_zh_CN.properties +++ b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_zh_CN.properties @@ -1,34 +1,25 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:17+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - OpenIDE-Module-Long-Description=\u5728\u7528\u6237\u754c\u9762\u91cc\u6574\u5408\u548c\u7ba1\u7406\u8f93\u51fa\u7279\u5f81\u3002 - OpenIDE-Module-Short-Description=\u6574\u5408\u8f93\u51fa -CTL_Export=\u8f93\u51fa - -CTL_ExportGraphAction=\u56fe\u6587\u4ef6 -error_missing_document_instance_factory=\u65e0\u6cd5\u627e\u5230\u6587\u6863\u751f\u6210\u5668\u7684\u5b9e\u4f8b - -error_transformer=\u7531\u4e8e\u8f6c\u5316\u5668\u95ee\u9898\uff0c\u4e0d\u80fd\u5199\u51faXML\u6587\u4ef6\u3002 +CTL_Export=\u8f93\u51fa +CTL_ExportGraphAction=\u56FE\u8868\u6587\u4EF6\u2026 +CTL_ExportImageAction = SVG/PDF/PNG \u6587\u4EF6\u2026 -error_io=\u4e0d\u80fd\u5199\u51fa\u6587\u672c\u6587\u6863\u3002 +AbstractExporterUI.filechooser.title=\u8f93\u51fa +AbstractExporterUI.optionsButton.name=\u9009\u9879\u2026\u2026 +AbstractExporterUI.optionsDialog.title=\u9009\u9879{0} +AbstractExporterUI.SaveFailed=\u4e0d\u80fd\u5199\u5165\u5230\u6587\u4ef6{0} +AbstractExporterUI.overwriteDialog.message={0}\u4e0d\u5b58\u5728\u3002||\u8986\u76d6\uff1f +AbstractExporterUI.overwriteDialog.title=\u786e\u8ba4 GraphFileExporterUIPanel.labelVisibleOnly.text=\u53ea\u8f93\u51fa\u5f53\u524d\u53ef\u89c6\u7684\u56fe - GraphFileExporterUIPanel.labelFullgraph.text=\u8f93\u51fa\u5b8c\u6574\u7684\u56fe - GraphFileExporterUIPanel.visibleOnlyRadio.text=\u4ec5\u53ef\u89c1\u7684 - GraphFileExporterUIPanel.fullGraphRadio.text=\u5168\u90e8\u7684 - GraphFileExporterUIPanel.labelGraph.text=\u56fe\uff1a - DesktopExportController.exportTaskName=\u8f93\u51fa\u5230{0} - DesktopExportController.status.exportSuccess={0}\u6210\u529f\u8f93\u51fa + + + diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_zh_TW.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_zh_TW.properties new file mode 100644 index 0000000000..2a67f8e93a --- /dev/null +++ b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Bundle_zh_TW.properties @@ -0,0 +1,19 @@ +OpenIDE-Module-Long-Description=Integrate and manage export features in UI. +OpenIDE-Module-Short-Description=Integrate export + +CTL_Export=Export +CTL_ExportGraphAction=Graph file... + +AbstractExporterUI.SaveFailed=\u7121\u6cd5\u5132\u5b58\u81f3\u6a94\u6848 {0} +AbstractExporterUI.overwriteDialog.message=\u6a94\u6848 {0} \u5df2\u5b58\u5728\u3002\u9032\u884c\u8986\u5beb\uff1f + +GraphFileExporterUIPanel.labelVisibleOnly.text=Only the current visualized graph is exported +GraphFileExporterUIPanel.labelFullgraph.text=The complete graph is exported +GraphFileExporterUIPanel.visibleOnlyRadio.text=Visible only +GraphFileExporterUIPanel.fullGraphRadio.text=Full +GraphFileExporterUIPanel.labelGraph.text=Graph: +DesktopExportController.exportTaskName=Export to {0} +DesktopExportController.status.exportSuccess={0} successfully exported + + + diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Separator.instance b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/Separator.instance deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/Bundle.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/Bundle.properties deleted file mode 100644 index f2d86ec342..0000000000 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/Bundle.properties +++ /dev/null @@ -1,15 +0,0 @@ -VectorialFileExporterUI_title = SVG/PDF/PNG file... -VectorialFileExporterUI_filechooser_title = Export -VectorialFileExporterUI_optionsButton_name = Options... -VectorialFileExporterUI_optionsDialog_title = Options {0} -VectorialFileExporterUI_SaveFailed = Could not write to file {0} -VectorialFileExporterUI_overwriteDialog_message={0} exists. Overwrite? -VectorialFileExporterUI_overwriteDialog_title=Confirm - -GraphFileExporterUI_title = Graph file... -GraphFileExporterUI_filechooser_title = Export -GraphFileExporterUI_optionsButton_name = Options... -GraphFileExporterUI_optionsDialog_title = Options {0} -GraphFileExporterUI_SaveFailed = Could not write to file {0} -GraphFileExporterUI_overwriteDialog_message={0} exists. Overwrite? -GraphFileExporterUI_overwriteDialog_title=Confirm \ No newline at end of file diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/Bundle_cs.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/Bundle_cs.properties deleted file mode 100644 index b9c259157e..0000000000 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/Bundle_cs.properties +++ /dev/null @@ -1,35 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-26 17\:03+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -VectorialFileExporterUI_title=Soubor SVG/PDF/PNG... - -VectorialFileExporterUI_filechooser_title=Exportovat - -VectorialFileExporterUI_optionsButton_name=Volby... - -VectorialFileExporterUI_optionsDialog_title=Volby {0} - -VectorialFileExporterUI_SaveFailed=Nelze zapisovat do souboru {0} - -VectorialFileExporterUI_overwriteDialog_message={0} existuje. P\u0159epsat? - -VectorialFileExporterUI_overwriteDialog_title=Potvrdit - -GraphFileExporterUI_title=Soubor grafu... - -GraphFileExporterUI_filechooser_title=Exportovat - -GraphFileExporterUI_optionsButton_name=Volby... - -GraphFileExporterUI_optionsDialog_title=Volby {0} - -GraphFileExporterUI_SaveFailed=Nelze zapisovat do souboru {0} - -GraphFileExporterUI_overwriteDialog_message={0} existuje. P\u0159epsat? - -GraphFileExporterUI_overwriteDialog_title=Potvrdit diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/Bundle_es.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/Bundle_es.properties deleted file mode 100644 index d460ebe0b3..0000000000 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/Bundle_es.properties +++ /dev/null @@ -1,36 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:42+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -VectorialFileExporterUI_title=Archivo SVG/PDF/PNG... - -VectorialFileExporterUI_filechooser_title=Exportar - -VectorialFileExporterUI_optionsButton_name=Opciones... - -VectorialFileExporterUI_optionsDialog_title=Opciones {0} - -VectorialFileExporterUI_SaveFailed=Imposible escribir en el archivo {0} - -VectorialFileExporterUI_overwriteDialog_message={0} ya existe. \u00bfSobreescribir? - -VectorialFileExporterUI_overwriteDialog_title=Confirmar - -GraphFileExporterUI_title=Archivo de grafo... - -GraphFileExporterUI_filechooser_title=Exportar - -GraphFileExporterUI_optionsButton_name=Opciones... - -GraphFileExporterUI_optionsDialog_title=Opciones {0} - -GraphFileExporterUI_SaveFailed=Imposible escribir en el archivo {0} - -GraphFileExporterUI_overwriteDialog_message={0} ya existe. \u00bfSobreescribir? - -GraphFileExporterUI_overwriteDialog_title=Confirmar diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/Bundle_fr.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/Bundle_fr.properties deleted file mode 100644 index eff354ce0d..0000000000 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/Bundle_fr.properties +++ /dev/null @@ -1,36 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 14\:42+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -VectorialFileExporterUI_title=Fichier SVG/PDF/PNG... - -VectorialFileExporterUI_filechooser_title=Export - -VectorialFileExporterUI_optionsButton_name=Options... - -VectorialFileExporterUI_optionsDialog_title=Options {0} - -VectorialFileExporterUI_SaveFailed=Impossible d'\u00e9crire le fichier {0}. - -VectorialFileExporterUI_overwriteDialog_message={0} existe. \u00c9craser ? - -VectorialFileExporterUI_overwriteDialog_title=Confirmer - -GraphFileExporterUI_title=Fichier de graphe... - -GraphFileExporterUI_filechooser_title=Export - -GraphFileExporterUI_optionsButton_name=Options... - -GraphFileExporterUI_optionsDialog_title=Options {0} - -GraphFileExporterUI_SaveFailed=Impossible d'\u00e9crire le fichier {0}. - -GraphFileExporterUI_overwriteDialog_message={0} existe. \u00c9craser ? - -GraphFileExporterUI_overwriteDialog_title=Confirmer diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/Bundle_ja.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/Bundle_ja.properties deleted file mode 100644 index da682c755a..0000000000 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/Bundle_ja.properties +++ /dev/null @@ -1,35 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-03 02\:43+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -VectorialFileExporterUI_title=SVG/PDF/PNG\u30d5\u30a1\u30a4\u30eb... - -VectorialFileExporterUI_filechooser_title=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 - -VectorialFileExporterUI_optionsButton_name=\u30aa\u30d7\u30b7\u30e7\u30f3... - -VectorialFileExporterUI_optionsDialog_title=\u30aa\u30d7\u30b7\u30e7\u30f3{0} - -VectorialFileExporterUI_SaveFailed=\u30d5\u30a1\u30a4\u30eb{0}\u306b\u66f8\u304d\u8fbc\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f - -VectorialFileExporterUI_overwriteDialog_message={0} \u306f\u3059\u3067\u306b\u3042\u308a\u307e\u3059\u3002 \u4e0a\u66f8\u304d\u3057\u307e\u3059\u304b\uff1f - -VectorialFileExporterUI_overwriteDialog_title=\u78ba\u8a8d - -GraphFileExporterUI_title=\u30b0\u30e9\u30d5\u30d5\u30a1\u30a4\u30eb... - -GraphFileExporterUI_filechooser_title=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 - -GraphFileExporterUI_optionsButton_name=\u30aa\u30d7\u30b7\u30e7\u30f3... - -GraphFileExporterUI_optionsDialog_title=\u30aa\u30d7\u30b7\u30e7\u30f3{0} - -GraphFileExporterUI_SaveFailed=\u30d5\u30a1\u30a4\u30eb{0}\u306b\u66f8\u304d\u8fbc\u3080\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f - -GraphFileExporterUI_overwriteDialog_message={0} \u306f\u3059\u3067\u306b\u3042\u308a\u307e\u3059\u3002 \u4e0a\u66f8\u304d\u3057\u307e\u3059\u304b\uff1f - -GraphFileExporterUI_overwriteDialog_title=\u78ba\u8a8d diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/Bundle_pt_BR.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/Bundle_pt_BR.properties deleted file mode 100644 index 3ddeac229b..0000000000 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/Bundle_pt_BR.properties +++ /dev/null @@ -1,35 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-07 00\:26+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -VectorialFileExporterUI_title=Arquivo SVG/PDF/PNG... - -VectorialFileExporterUI_filechooser_title=Exportar - -VectorialFileExporterUI_optionsButton_name=Op\u00e7\u00f5es... - -VectorialFileExporterUI_optionsDialog_title=Op\u00e7\u00f5es {0} - -VectorialFileExporterUI_SaveFailed=N\u00e3o foi poss\u00edvel escrever no arquivo {0} - -VectorialFileExporterUI_overwriteDialog_message={0} j\u00e1 existe. Sobrescrever? - -VectorialFileExporterUI_overwriteDialog_title=Confirmar - -GraphFileExporterUI_title=Arquivo de grafo... - -GraphFileExporterUI_filechooser_title=Exportar - -GraphFileExporterUI_optionsButton_name=Op\u00e7\u00f5es... - -GraphFileExporterUI_optionsDialog_title=Op\u00e7\u00f5es {0} - -GraphFileExporterUI_SaveFailed=N\u00e3o foi poss\u00edvel escrever no arquivo {0} - -GraphFileExporterUI_overwriteDialog_message={0} j\u00e1 existe. Sobrescrever? - -GraphFileExporterUI_overwriteDialog_title=Confirmar diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/Bundle_ru.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/Bundle_ru.properties deleted file mode 100644 index db68fccfff..0000000000 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/Bundle_ru.properties +++ /dev/null @@ -1,35 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-28 19\:04+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -VectorialFileExporterUI_title=SVG/PDF/PNG \u0444\u0430\u0439\u043b... - -VectorialFileExporterUI_filechooser_title=\u042d\u043a\u0441\u043f\u043e\u0440\u0442 - -VectorialFileExporterUI_optionsButton_name=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438... - -VectorialFileExporterUI_optionsDialog_title=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 {0} - -VectorialFileExporterUI_SaveFailed=\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0444\u0430\u0439\u043b {0} - -VectorialFileExporterUI_overwriteDialog_message={0} \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c? - -VectorialFileExporterUI_overwriteDialog_title=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 - -GraphFileExporterUI_title=\u0424\u0430\u0439\u043b \u0441 \u0433\u0440\u0430\u0444\u043e\u043c... - -GraphFileExporterUI_filechooser_title=\u042d\u043a\u0441\u043f\u043e\u0440\u0442 - -GraphFileExporterUI_optionsButton_name=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438... - -GraphFileExporterUI_optionsDialog_title=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 {0} - -GraphFileExporterUI_SaveFailed=\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0444\u0430\u0439\u043b {0} - -GraphFileExporterUI_overwriteDialog_message={0} \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c? - -GraphFileExporterUI_overwriteDialog_title=\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043d\u0438\u0435 diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/Bundle_zh_CN.properties b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/Bundle_zh_CN.properties deleted file mode 100644 index 2575aed291..0000000000 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/Bundle_zh_CN.properties +++ /dev/null @@ -1,34 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:17+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -VectorialFileExporterUI_title=SVG/PDF/PNG\u6587\u4ef6 - -VectorialFileExporterUI_filechooser_title=\u8f93\u51fa - -VectorialFileExporterUI_optionsButton_name=\u9009\u9879\u2026\u2026 - -VectorialFileExporterUI_optionsDialog_title=\u9009\u9879{0} - -VectorialFileExporterUI_SaveFailed=\u4e0d\u80fd\u5199\u5165\u5230\u6587\u4ef6{0} - -VectorialFileExporterUI_overwriteDialog_message={0}\u4e0d\u5b58\u5728\u3002||\u8986\u76d6\uff1f - -VectorialFileExporterUI_overwriteDialog_title=\u786e\u8ba4 - -GraphFileExporterUI_title=\u56fe\u6587\u4ef6\u2026\u2026 - -GraphFileExporterUI_filechooser_title=\u8f93\u51fa - -GraphFileExporterUI_optionsButton_name=\u9009\u9879\u2026\u2026 - -GraphFileExporterUI_optionsDialog_title=\u9009\u9879{0} - -GraphFileExporterUI_SaveFailed=\u4e0d\u80fd\u5199\u5165\u5230\u6587\u4ef6{0} - -GraphFileExporterUI_overwriteDialog_message={0}\u4e0d\u5b58\u5728\u3002||\u8986\u76d6\uff1f - -GraphFileExporterUI_overwriteDialog_title=\u786e\u8ba4 diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/cs.po b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/cs.po deleted file mode 100644 index 22e8f574c8..0000000000 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/cs.po +++ /dev/null @@ -1,61 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-26 17:03+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "VectorialFileExporterUI_title" -msgstr "Soubor SVG/PDF/PNG..." - -msgid "VectorialFileExporterUI_filechooser_title" -msgstr "Exportovat" - -msgid "VectorialFileExporterUI_optionsButton_name" -msgstr "Volby..." - -msgid "VectorialFileExporterUI_optionsDialog_title" -msgstr "Volby {0}" - -msgid "VectorialFileExporterUI_SaveFailed" -msgstr "Nelze zapisovat do souboru {0}" - -msgid "VectorialFileExporterUI_overwriteDialog_message" -msgstr "{0} existuje. PΕ™epsat?" - -msgid "VectorialFileExporterUI_overwriteDialog_title" -msgstr "Potvrdit" - -msgid "GraphFileExporterUI_title" -msgstr "Soubor grafu..." - -msgid "GraphFileExporterUI_filechooser_title" -msgstr "Exportovat" - -msgid "GraphFileExporterUI_optionsButton_name" -msgstr "Volby..." - -msgid "GraphFileExporterUI_optionsDialog_title" -msgstr "Volby {0}" - -msgid "GraphFileExporterUI_SaveFailed" -msgstr "Nelze zapisovat do souboru {0}" - -msgid "GraphFileExporterUI_overwriteDialog_message" -msgstr "{0} existuje. PΕ™epsat?" - -msgid "GraphFileExporterUI_overwriteDialog_title" -msgstr "Potvrdit" diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/es.po b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/es.po deleted file mode 100644 index b7de269716..0000000000 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/es.po +++ /dev/null @@ -1,62 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:42+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "VectorialFileExporterUI_title" -msgstr "Archivo SVG/PDF/PNG..." - -msgid "VectorialFileExporterUI_filechooser_title" -msgstr "Exportar" - -msgid "VectorialFileExporterUI_optionsButton_name" -msgstr "Opciones..." - -msgid "VectorialFileExporterUI_optionsDialog_title" -msgstr "Opciones {0}" - -msgid "VectorialFileExporterUI_SaveFailed" -msgstr "Imposible escribir en el archivo {0}" - -msgid "VectorialFileExporterUI_overwriteDialog_message" -msgstr "{0} ya existe. ΒΏSobreescribir?" - -msgid "VectorialFileExporterUI_overwriteDialog_title" -msgstr "Confirmar" - -msgid "GraphFileExporterUI_title" -msgstr "Archivo de grafo..." - -msgid "GraphFileExporterUI_filechooser_title" -msgstr "Exportar" - -msgid "GraphFileExporterUI_optionsButton_name" -msgstr "Opciones..." - -msgid "GraphFileExporterUI_optionsDialog_title" -msgstr "Opciones {0}" - -msgid "GraphFileExporterUI_SaveFailed" -msgstr "Imposible escribir en el archivo {0}" - -msgid "GraphFileExporterUI_overwriteDialog_message" -msgstr "{0} ya existe. ΒΏSobreescribir?" - -msgid "GraphFileExporterUI_overwriteDialog_title" -msgstr "Confirmar" diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/fr.po b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/fr.po deleted file mode 100644 index 0d75379217..0000000000 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/fr.po +++ /dev/null @@ -1,62 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 14:42+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "VectorialFileExporterUI_title" -msgstr "Fichier SVG/PDF/PNG..." - -msgid "VectorialFileExporterUI_filechooser_title" -msgstr "Export" - -msgid "VectorialFileExporterUI_optionsButton_name" -msgstr "Options..." - -msgid "VectorialFileExporterUI_optionsDialog_title" -msgstr "Options {0}" - -msgid "VectorialFileExporterUI_SaveFailed" -msgstr "Impossible d'Γ©crire le fichier {0}." - -msgid "VectorialFileExporterUI_overwriteDialog_message" -msgstr "{0} existe. Γ‰craser ?" - -msgid "VectorialFileExporterUI_overwriteDialog_title" -msgstr "Confirmer" - -msgid "GraphFileExporterUI_title" -msgstr "Fichier de graphe..." - -msgid "GraphFileExporterUI_filechooser_title" -msgstr "Export" - -msgid "GraphFileExporterUI_optionsButton_name" -msgstr "Options..." - -msgid "GraphFileExporterUI_optionsDialog_title" -msgstr "Options {0}" - -msgid "GraphFileExporterUI_SaveFailed" -msgstr "Impossible d'Γ©crire le fichier {0}." - -msgid "GraphFileExporterUI_overwriteDialog_message" -msgstr "{0} existe. Γ‰craser ?" - -msgid "GraphFileExporterUI_overwriteDialog_title" -msgstr "Confirmer" diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/ja.po b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/ja.po deleted file mode 100644 index 47382085ae..0000000000 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/ja.po +++ /dev/null @@ -1,61 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-03 02:43+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "VectorialFileExporterUI_title" -msgstr "SVG/PDF/PNGフゑむル..." - -msgid "VectorialFileExporterUI_filechooser_title" -msgstr "γ‚¨γ‚―γ‚ΉγƒγƒΌγƒˆ" - -msgid "VectorialFileExporterUI_optionsButton_name" -msgstr "γ‚ͺプション..." - -msgid "VectorialFileExporterUI_optionsDialog_title" -msgstr "γ‚ͺプション{0}" - -msgid "VectorialFileExporterUI_SaveFailed" -msgstr "フゑむル{0}γ«ζ›ΈγθΎΌγ‚€γ“γ¨γŒγ§γγΎγ›γ‚“γ§γ—γŸ" - -msgid "VectorialFileExporterUI_overwriteDialog_message" -msgstr "{0} γ―γ™γ§γ«γ‚γ‚ŠγΎγ™γ€‚ δΈŠζ›Έγγ—γΎγ™γ‹οΌŸ" - -msgid "VectorialFileExporterUI_overwriteDialog_title" -msgstr "η’Ίθͺ" - -msgid "GraphFileExporterUI_title" -msgstr "グラフフゑむル..." - -msgid "GraphFileExporterUI_filechooser_title" -msgstr "γ‚¨γ‚―γ‚ΉγƒγƒΌγƒˆ" - -msgid "GraphFileExporterUI_optionsButton_name" -msgstr "γ‚ͺプション..." - -msgid "GraphFileExporterUI_optionsDialog_title" -msgstr "γ‚ͺプション{0}" - -msgid "GraphFileExporterUI_SaveFailed" -msgstr "フゑむル{0}γ«ζ›ΈγθΎΌγ‚€γ“γ¨γŒγ§γγΎγ›γ‚“γ§γ—γŸ" - -msgid "GraphFileExporterUI_overwriteDialog_message" -msgstr "{0} γ―γ™γ§γ«γ‚γ‚ŠγΎγ™γ€‚ δΈŠζ›Έγγ—γΎγ™γ‹οΌŸ" - -msgid "GraphFileExporterUI_overwriteDialog_title" -msgstr "η’Ίθͺ" diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/org-gephi-desktop-io-export-api.pot b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/org-gephi-desktop-io-export-api.pot deleted file mode 100644 index dfc5f3656d..0000000000 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/org-gephi-desktop-io-export-api.pot +++ /dev/null @@ -1,58 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "VectorialFileExporterUI_title" -msgstr "SVG/PDF/PNG file..." - -msgid "VectorialFileExporterUI_filechooser_title" -msgstr "Export" - -msgid "VectorialFileExporterUI_optionsButton_name" -msgstr "Options..." - -msgid "VectorialFileExporterUI_optionsDialog_title" -msgstr "Options {0}" - -msgid "VectorialFileExporterUI_SaveFailed" -msgstr "Could not write to file {0}" - -msgid "VectorialFileExporterUI_overwriteDialog_message" -msgstr "{0} exists. Overwrite?" - -msgid "VectorialFileExporterUI_overwriteDialog_title" -msgstr "Confirm" - -msgid "GraphFileExporterUI_title" -msgstr "Graph file..." - -msgid "GraphFileExporterUI_filechooser_title" -msgstr "Export" - -msgid "GraphFileExporterUI_optionsButton_name" -msgstr "Options..." - -msgid "GraphFileExporterUI_optionsDialog_title" -msgstr "Options {0}" - -msgid "GraphFileExporterUI_SaveFailed" -msgstr "Could not write to file {0}" - -msgid "GraphFileExporterUI_overwriteDialog_message" -msgstr "{0} exists. Overwrite?" - -msgid "GraphFileExporterUI_overwriteDialog_title" -msgstr "Confirm" diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/pt_BR.po b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/pt_BR.po deleted file mode 100644 index 9d2bbb5109..0000000000 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/pt_BR.po +++ /dev/null @@ -1,61 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-07 00:26+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "VectorialFileExporterUI_title" -msgstr "Arquivo SVG/PDF/PNG..." - -msgid "VectorialFileExporterUI_filechooser_title" -msgstr "Exportar" - -msgid "VectorialFileExporterUI_optionsButton_name" -msgstr "OpΓ§Γ΅es..." - -msgid "VectorialFileExporterUI_optionsDialog_title" -msgstr "OpΓ§Γ΅es {0}" - -msgid "VectorialFileExporterUI_SaveFailed" -msgstr "NΓ£o foi possΓ­vel escrever no arquivo {0}" - -msgid "VectorialFileExporterUI_overwriteDialog_message" -msgstr "{0} jΓ‘ existe. Sobrescrever?" - -msgid "VectorialFileExporterUI_overwriteDialog_title" -msgstr "Confirmar" - -msgid "GraphFileExporterUI_title" -msgstr "Arquivo de grafo..." - -msgid "GraphFileExporterUI_filechooser_title" -msgstr "Exportar" - -msgid "GraphFileExporterUI_optionsButton_name" -msgstr "OpΓ§Γ΅es..." - -msgid "GraphFileExporterUI_optionsDialog_title" -msgstr "OpΓ§Γ΅es {0}" - -msgid "GraphFileExporterUI_SaveFailed" -msgstr "NΓ£o foi possΓ­vel escrever no arquivo {0}" - -msgid "GraphFileExporterUI_overwriteDialog_message" -msgstr "{0} jΓ‘ existe. Sobrescrever?" - -msgid "GraphFileExporterUI_overwriteDialog_title" -msgstr "Confirmar" diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/ru.po b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/ru.po deleted file mode 100644 index dbdd7e7570..0000000000 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/ru.po +++ /dev/null @@ -1,61 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-28 19:04+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "VectorialFileExporterUI_title" -msgstr "SVG/PDF/PNG Ρ„Π°ΠΉΠ»..." - -msgid "VectorialFileExporterUI_filechooser_title" -msgstr "Экспорт" - -msgid "VectorialFileExporterUI_optionsButton_name" -msgstr "Настройки..." - -msgid "VectorialFileExporterUI_optionsDialog_title" -msgstr "Настройки {0}" - -msgid "VectorialFileExporterUI_SaveFailed" -msgstr "НСт доступа Π½Π° запись Π² Ρ„Π°ΠΉΠ» {0}" - -msgid "VectorialFileExporterUI_overwriteDialog_message" -msgstr "{0} ΡƒΠΆΠ΅ сущСствуСт. ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ?" - -msgid "VectorialFileExporterUI_overwriteDialog_title" -msgstr "ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅" - -msgid "GraphFileExporterUI_title" -msgstr "Π€Π°ΠΉΠ» с Π³Ρ€Π°Ρ„ΠΎΠΌ..." - -msgid "GraphFileExporterUI_filechooser_title" -msgstr "Экспорт" - -msgid "GraphFileExporterUI_optionsButton_name" -msgstr "Настройки..." - -msgid "GraphFileExporterUI_optionsDialog_title" -msgstr "Настройки {0}" - -msgid "GraphFileExporterUI_SaveFailed" -msgstr "НСт доступа Π½Π° запись Π² Ρ„Π°ΠΉΠ» {0}" - -msgid "GraphFileExporterUI_overwriteDialog_message" -msgstr "{0} ΡƒΠΆΠ΅ сущСствуСт. ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ?" - -msgid "GraphFileExporterUI_overwriteDialog_title" -msgstr "ΠŸΠΎΠ΄Ρ‚Π²Π΅Ρ€ΠΆΠ΄Π΅Π½ΠΈΠ΅" diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/zh_CN.po b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/zh_CN.po deleted file mode 100644 index eae633202c..0000000000 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/api/zh_CN.po +++ /dev/null @@ -1,60 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:17+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "VectorialFileExporterUI_title" -msgstr "SVG/PDF/PNGζ–‡δ»Ά" - -msgid "VectorialFileExporterUI_filechooser_title" -msgstr "θΎ“ε‡Ί" - -msgid "VectorialFileExporterUI_optionsButton_name" -msgstr "选鑹……" - -msgid "VectorialFileExporterUI_optionsDialog_title" -msgstr "选鑹{0}" - -msgid "VectorialFileExporterUI_SaveFailed" -msgstr "不能写ε…₯εˆ°ζ–‡δ»Ά{0}" - -msgid "VectorialFileExporterUI_overwriteDialog_message" -msgstr "{0}δΈε­˜εœ¨γ€‚||θ¦†η›–οΌŸ" - -msgid "VectorialFileExporterUI_overwriteDialog_title" -msgstr "η‘θ€" - -msgid "GraphFileExporterUI_title" -msgstr "图文仢……" - -msgid "GraphFileExporterUI_filechooser_title" -msgstr "θΎ“ε‡Ί" - -msgid "GraphFileExporterUI_optionsButton_name" -msgstr "选鑹……" - -msgid "GraphFileExporterUI_optionsDialog_title" -msgstr "选鑹{0}" - -msgid "GraphFileExporterUI_SaveFailed" -msgstr "不能写ε…₯εˆ°ζ–‡δ»Ά{0}" - -msgid "GraphFileExporterUI_overwriteDialog_message" -msgstr "{0}δΈε­˜εœ¨γ€‚||θ¦†η›–οΌŸ" - -msgid "GraphFileExporterUI_overwriteDialog_title" -msgstr "η‘θ€" diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/cs.po b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/cs.po deleted file mode 100644 index de083ccc05..0000000000 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/cs.po +++ /dev/null @@ -1,61 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-26 16:54+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Začlenit a spravovat funkce exportu v rozhranΓ­." - -msgid "OpenIDE-Module-Short-Description" -msgstr "Začlenit export" - -msgid "CTL_Export" -msgstr "Exportovat" - -msgid "CTL_ExportGraphAction" -msgstr "Soubor grafu..." - -msgid "error_missing_document_instance_factory" -msgstr "Nelze zΓ­skat instanci DocumentBuilder" - -msgid "error_transformer" -msgstr "Nelze zapsat XML kvΕ―li problΓ©mu transformΓ‘toru." - -msgid "error_io" -msgstr "Nelze zapisovat do textovΓ©ho souboru." - -msgid "GraphFileExporterUIPanel.labelVisibleOnly.text" -msgstr "ExportovΓ‘n je pouze graf v současnosti vizualizovanΓ½ graf" - -msgid "GraphFileExporterUIPanel.labelFullgraph.text" -msgstr "CelΓ½ graf je exportovΓ‘n" - -msgid "GraphFileExporterUIPanel.visibleOnlyRadio.text" -msgstr "Pouze viditelnΓ©" - -msgid "GraphFileExporterUIPanel.fullGraphRadio.text" -msgstr "ÚplnΓ©" - -msgid "GraphFileExporterUIPanel.labelGraph.text" -msgstr "Graf:" - -msgid "DesktopExportController.exportTaskName" -msgstr "Exportovat do {0}" - -msgid "DesktopExportController.status.exportSuccess" -msgstr "{0} ΓΊspΔ›Ε‘nΔ› exportovΓ‘no" diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/es.po b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/es.po deleted file mode 100644 index 61a27b5831..0000000000 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/es.po +++ /dev/null @@ -1,61 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:08+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Integrar y administrar las caracterΓ­sticas de exportaciΓ³n en la interfaz de usuario." - -msgid "OpenIDE-Module-Short-Description" -msgstr "Integrar exportaciΓ³n" - -msgid "CTL_Export" -msgstr "Exportar" - -msgid "CTL_ExportGraphAction" -msgstr "Archivo de grafo..." - -msgid "error_missing_document_instance_factory" -msgstr "Imposible obtener una entidad de DocumentBuilder" - -msgid "error_transformer" -msgstr "Imposible escribir archivo XML debido a un problema de Transformer." - -msgid "error_io" -msgstr "Imposible escribir archivo de texto." - -msgid "GraphFileExporterUIPanel.labelVisibleOnly.text" -msgstr "Exportar solamente el grafo visualizado actualmente" - -msgid "GraphFileExporterUIPanel.labelFullgraph.text" -msgstr "Exportar el grafo completo" - -msgid "GraphFileExporterUIPanel.visibleOnlyRadio.text" -msgstr "Visible solo" - -msgid "GraphFileExporterUIPanel.fullGraphRadio.text" -msgstr "Completo" - -msgid "GraphFileExporterUIPanel.labelGraph.text" -msgstr "Grafo:" - -msgid "DesktopExportController.exportTaskName" -msgstr "Exportar a {0}" - -msgid "DesktopExportController.status.exportSuccess" -msgstr "{0} exportado con Γ©xito" diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/fr.po b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/fr.po deleted file mode 100644 index fd72754696..0000000000 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/fr.po +++ /dev/null @@ -1,61 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:08+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "IntΓ¨gre et gΓ¨re les fonctionnalitΓ©s d'export dans l'interface utilisateur." - -msgid "OpenIDE-Module-Short-Description" -msgstr "IntΓ¨gre l'export." - -msgid "CTL_Export" -msgstr "Export" - -msgid "CTL_ExportGraphAction" -msgstr "Fichier de graphe..." - -msgid "error_missing_document_instance_factory" -msgstr "Impossible d'obtenir une instance de DocumentBuilder" - -msgid "error_transformer" -msgstr "Impossible d'Γ©crire le fichier XML Γ  cause d'un problΓ¨me de Tranformer" - -msgid "error_io" -msgstr "Impossible d'Γ©crire le fichier texte." - -msgid "GraphFileExporterUIPanel.labelVisibleOnly.text" -msgstr "Seul le graphe visible est exportΓ©" - -msgid "GraphFileExporterUIPanel.labelFullgraph.text" -msgstr "Le graphe complet est exportΓ©" - -msgid "GraphFileExporterUIPanel.visibleOnlyRadio.text" -msgstr "Visible" - -msgid "GraphFileExporterUIPanel.fullGraphRadio.text" -msgstr "Complet" - -msgid "GraphFileExporterUIPanel.labelGraph.text" -msgstr "Graphe:" - -msgid "DesktopExportController.exportTaskName" -msgstr "Exporter vers {0}" - -msgid "DesktopExportController.status.exportSuccess" -msgstr "{0} exportΓ© avec succΓ¨s" diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/ja.po b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/ja.po deleted file mode 100644 index 01cffcefa0..0000000000 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/ja.po +++ /dev/null @@ -1,61 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-03 02:42+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "UIγγ‚¨γ‚―γ‚ΉγƒγƒΌγƒˆζ©Ÿθƒ½γ‚’η΅±εˆεŠγ³η‘理" - -msgid "OpenIDE-Module-Short-Description" -msgstr "γ‚¨γ‚―γ‚ΉγƒγƒΌγƒˆγ‚’η΅±εˆ" - -msgid "CTL_Export" -msgstr "γ‚¨γ‚―γ‚ΉγƒγƒΌγƒˆ" - -msgid "CTL_ExportGraphAction" -msgstr "グラフフゑむル..." - -msgid "error_missing_document_instance_factory" -msgstr "DocumentBuilderγγ‚€γƒ³γ‚Ήγ‚Ώγƒ³γ‚Ήγ‚’取得不能" - -msgid "error_transformer" -msgstr "Tranformerγε•ι‘Œγ«θ΅·ε› γ™γ‚‹XMLγƒ•γ‚‘γ‚€γƒ«ε‡ΊεŠ›δΈθƒ½γ€‚" - -msgid "error_io" -msgstr "γƒ†γ‚­γ‚Ήγƒˆγƒ•β€‹β€‹γ‚‘γ‚€γƒ«γ«ζ›ΈγθΎΌγΏγ§γγΎγ›γ‚“γ€‚" - -msgid "GraphFileExporterUIPanel.labelVisibleOnly.text" -msgstr "ηΎεœ¨θ‘¨η€ΊδΈ­γ‚°γƒ©γƒ•γŒγ‚¨γ‚―γ‚ΉγƒγƒΌγƒˆγ•γ‚ŒγΎγ™" - -msgid "GraphFileExporterUIPanel.labelFullgraph.text" -msgstr "εŒε…¨γͺγ‚°γƒ©γƒ•γŒγ‚¨γ‚―γ‚ΉγƒγƒΌγƒˆγ•γ‚ŒγΎγ™" - -msgid "GraphFileExporterUIPanel.visibleOnlyRadio.text" -msgstr "可視γγΏ" - -msgid "GraphFileExporterUIPanel.fullGraphRadio.text" -msgstr "ζœ€ε€§ι™" - -msgid "GraphFileExporterUIPanel.labelGraph.text" -msgstr "グラフ:" - -msgid "DesktopExportController.exportTaskName" -msgstr "{0}γ«γ‚¨γ‚―γ‚ΉγƒγƒΌγƒˆ" - -msgid "DesktopExportController.status.exportSuccess" -msgstr "{0}γ«γ‚¨γ‚―γ‚ΉγƒγƒΌγƒˆζˆεŠŸ" diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/layer.xml b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/layer.xml deleted file mode 100644 index 75c4b72e1f..0000000000 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/layer.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/org-gephi-desktop-io-export.pot b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/org-gephi-desktop-io-export.pot deleted file mode 100644 index 6945a7e8a3..0000000000 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/org-gephi-desktop-io-export.pot +++ /dev/null @@ -1,58 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Integrate and manage export features in UI." - -msgid "OpenIDE-Module-Short-Description" -msgstr "Integrate export" - -msgid "CTL_Export" -msgstr "Export" - -msgid "CTL_ExportGraphAction" -msgstr "Graph file..." - -msgid "error_missing_document_instance_factory" -msgstr "Impossible to obtain an instance of DocumentBuilder" - -msgid "error_transformer" -msgstr "Impossible to write XML file due to Tranformer problem." - -msgid "error_io" -msgstr "Impossible to write text file." - -msgid "GraphFileExporterUIPanel.labelVisibleOnly.text" -msgstr "Only the current visualized graph is exported" - -msgid "GraphFileExporterUIPanel.labelFullgraph.text" -msgstr "The complete graph is exported" - -msgid "GraphFileExporterUIPanel.visibleOnlyRadio.text" -msgstr "Visible only" - -msgid "GraphFileExporterUIPanel.fullGraphRadio.text" -msgstr "Full" - -msgid "GraphFileExporterUIPanel.labelGraph.text" -msgstr "Graph:" - -msgid "DesktopExportController.exportTaskName" -msgstr "Export to {0}" - -msgid "DesktopExportController.status.exportSuccess" -msgstr "{0} successfully exported" diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/pt_BR.po b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/pt_BR.po deleted file mode 100644 index a7fac52120..0000000000 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/pt_BR.po +++ /dev/null @@ -1,61 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 18:22+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Integrar e administrar os recursos de exportacΓ£o pela interface de usuΓ‘rio. " - -msgid "OpenIDE-Module-Short-Description" -msgstr "Integrar exportaΓ§Γ£o" - -msgid "CTL_Export" -msgstr "Exportar" - -msgid "CTL_ExportGraphAction" -msgstr "Arquivo de grafo..." - -msgid "error_missing_document_instance_factory" -msgstr "ImpossΓ­vel obter uma instΓ’ncia da classe DocumentBuilder" - -msgid "error_transformer" -msgstr "ImpossΓ­vel escrever arquivo XML devido a um problema no Transformador." - -msgid "error_io" -msgstr "ImpossΓ­vel escrever arquivo de texto." - -msgid "GraphFileExporterUIPanel.labelVisibleOnly.text" -msgstr "Apenas o grafo atualmente visΓ­vel serΓ‘ exportado" - -msgid "GraphFileExporterUIPanel.labelFullgraph.text" -msgstr "O grafo completo serΓ‘ exportado" - -msgid "GraphFileExporterUIPanel.visibleOnlyRadio.text" -msgstr "VisΓ­veis apenas" - -msgid "GraphFileExporterUIPanel.fullGraphRadio.text" -msgstr "Completo" - -msgid "GraphFileExporterUIPanel.labelGraph.text" -msgstr "Grafo:" - -msgid "DesktopExportController.exportTaskName" -msgstr "Exportar para {0}" - -msgid "DesktopExportController.status.exportSuccess" -msgstr "{0} exportado com sucesso" diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/ru.po b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/ru.po deleted file mode 100644 index e4066c45d7..0000000000 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/ru.po +++ /dev/null @@ -1,61 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-28 19:14+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Integrate and manage export features in UI." - -msgid "OpenIDE-Module-Short-Description" -msgstr "Integrate export" - -msgid "CTL_Export" -msgstr "Экспорт" - -msgid "CTL_ExportGraphAction" -msgstr "Π€Π°ΠΉΠ» с Π³Ρ€Π°Ρ„ΠΎΠΌ..." - -msgid "error_missing_document_instance_factory" -msgstr "НСвозмоТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр DocumentBuilder" - -msgid "error_transformer" -msgstr "НСвозмоТно Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ XML-Ρ„Π°ΠΉΠ» ΠΈΠ·-Π·Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ с Tranformer" - -msgid "error_io" -msgstr "НСвозмоТно Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ тСкстовый Ρ„Π°ΠΉΠ»" - -msgid "GraphFileExporterUIPanel.labelVisibleOnly.text" -msgstr "ЭкспортируСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΉ Π³Ρ€Π°Ρ„" - -msgid "GraphFileExporterUIPanel.labelFullgraph.text" -msgstr "ЭкспортируСтся ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π³Ρ€Π°Ρ„" - -msgid "GraphFileExporterUIPanel.visibleOnlyRadio.text" -msgstr "Волько Π²ΠΈΠ΄ΠΈΠΌΡ‹ΠΉ" - -msgid "GraphFileExporterUIPanel.fullGraphRadio.text" -msgstr "ΠŸΠΎΠ»Π½Ρ‹ΠΉ" - -msgid "GraphFileExporterUIPanel.labelGraph.text" -msgstr "Π“Ρ€Π°Ρ„:" - -msgid "DesktopExportController.exportTaskName" -msgstr "Экспорт Π² {0}" - -msgid "DesktopExportController.status.exportSuccess" -msgstr "{0} ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ экспортирован" diff --git a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/zh_CN.po b/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/zh_CN.po deleted file mode 100644 index 75d9d31434..0000000000 --- a/modules/DesktopExport/src/main/resources/org/gephi/desktop/io/export/zh_CN.po +++ /dev/null @@ -1,60 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:17+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "εœ¨η”¨ζˆ·η•Œι’ι‡Œζ•΄εˆε’Œη‘理输出特征。" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζ•΄εˆθΎ“ε‡Ί" - -msgid "CTL_Export" -msgstr "θΎ“ε‡Ί" - -msgid "CTL_ExportGraphAction" -msgstr "ε›Ύζ–‡δ»Ά" - -msgid "error_missing_document_instance_factory" -msgstr "ζ— ζ³•ζ‰Ύεˆ°ζ–‡ζ‘£η”Ÿζˆε™¨ηš„εžδΎ‹" - -msgid "error_transformer" -msgstr "η”±δΊŽθ½¬εŒ–ε™¨ι—ι’˜οΌŒδΈθƒ½ε†™ε‡ΊXML文仢。" - -msgid "error_io" -msgstr "δΈθƒ½ε†™ε‡Ίζ–‡ζœ¬ζ–‡ζ‘£γ€‚" - -msgid "GraphFileExporterUIPanel.labelVisibleOnly.text" -msgstr "εͺθΎ“ε‡Ίε½“ε‰ε―θ§†ηš„ε›Ύ" - -msgid "GraphFileExporterUIPanel.labelFullgraph.text" -msgstr "θΎ“ε‡ΊεŒζ•΄ηš„ε›Ύ" - -msgid "GraphFileExporterUIPanel.visibleOnlyRadio.text" -msgstr "δ»…ε―θ§ηš„" - -msgid "GraphFileExporterUIPanel.fullGraphRadio.text" -msgstr "ε…¨ιƒ¨ηš„" - -msgid "GraphFileExporterUIPanel.labelGraph.text" -msgstr "ε›ΎοΌš" - -msgid "DesktopExportController.exportTaskName" -msgstr "θΎ“ε‡Ίεˆ°{0}" - -msgid "DesktopExportController.status.exportSuccess" -msgstr "{0}ζˆεŠŸθΎ“ε‡Ί" diff --git a/modules/DesktopFilters/pom.xml b/modules/DesktopFilters/pom.xml index 366b8e711c..1bbff87bc7 100644 --- a/modules/DesktopFilters/pom.xml +++ b/modules/DesktopFilters/pom.xml @@ -4,13 +4,13 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi desktop-filters - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm DesktopFilters @@ -20,6 +20,10 @@ ${project.groupId} filters-api + + ${project.groupId} + graph-api + ${project.groupId} project-api @@ -28,6 +32,10 @@ ${project.groupId} ui-utils + + ${project.groupId} + desktop-icons + org.netbeans.api org-openide-awt @@ -64,12 +72,16 @@ org.netbeans.api org-netbeans-modules-settings + + org.netbeans.api + org-openide-util-ui + - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/FilterPanelPanel.java b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/FilterPanelPanel.java index 3e9d91d308..8d47436924 100644 --- a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/FilterPanelPanel.java +++ b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/FilterPanelPanel.java @@ -38,10 +38,13 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.desktop.filters; import java.awt.BorderLayout; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.swing.JPanel; import javax.swing.SwingUtilities; import javax.swing.UIManager; @@ -55,13 +58,12 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class FilterPanelPanel extends JPanel implements ChangeListener { - private Query selectedQuery; private final String settingsString; + private Query selectedQuery; private FilterUIModel uiModel; public FilterPanelPanel() { @@ -72,6 +74,7 @@ public FilterPanelPanel() { } } + @Override public void stateChanged(ChangeEvent e) { refreshModel(); } @@ -106,6 +109,7 @@ public void unsetup() { private void setQuery(final Query query) { SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { //UI update removeAll(); @@ -118,10 +122,11 @@ public void run() { if (panel != null) { add(panel, BorderLayout.CENTER); panel.setOpaque(false); - setBorder(javax.swing.BorderFactory.createTitledBorder(query.getFilter().getName() + " " + settingsString)); + setBorder(javax.swing.BorderFactory + .createTitledBorder(query.getFilter().getName() + " " + settingsString)); } } catch (Exception e) { - e.printStackTrace(); + Logger.getLogger("").log(Level.SEVERE, "Error while setting query", e); } } diff --git a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/FilterUIModel.java b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/FilterUIModel.java index 578ba93058..eb1ed0164a 100644 --- a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/FilterUIModel.java +++ b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/FilterUIModel.java @@ -38,7 +38,8 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.desktop.filters; import java.util.ArrayList; @@ -47,31 +48,41 @@ Development and Distribution License("CDDL") (collectively, the import javax.swing.event.ChangeListener; import org.gephi.filters.api.Query; import org.gephi.filters.spi.Category; -import org.gephi.filters.spi.Filter; +import org.gephi.project.api.Workspace; /** - * * @author Mathieu Bastian */ public final class FilterUIModel { + private final Workspace workspace; + private final List expandedQueryNodes; + private final List expandedParametersNodes; + private final List expandedCategoryNodes; + private final List listeners; private Query selectedQuery; - private List expandedQueryNodes; - private List expandedParametersNodes; - private List expandedCategoryNodes; - private List listeners; - - public FilterUIModel() { - listeners = new ArrayList(); - expandedQueryNodes = new ArrayList(); - expandedCategoryNodes = new ArrayList(); - expandedParametersNodes = new ArrayList(); + + public FilterUIModel(Workspace workspace) { + this.workspace = workspace; + listeners = new ArrayList<>(); + expandedQueryNodes = new ArrayList<>(); + expandedCategoryNodes = new ArrayList<>(); + expandedParametersNodes = new ArrayList<>(); + } + + public Workspace getWorkspace() { + return workspace; } public Query getSelectedQuery() { return selectedQuery; } + public void setSelectedQuery(Query query) { + selectedQuery = query; + fireChangeEvent(); + } + public Query getSelectedRoot() { if (selectedQuery != null) { Query root = selectedQuery; @@ -83,11 +94,6 @@ public Query getSelectedRoot() { return null; } - public void setSelectedQuery(Query query) { - selectedQuery = query; - fireChangeEvent(); - } - public void setExpand(Query query, boolean expanded, boolean parametersExpanded) { if (expanded && !expandedQueryNodes.contains(query)) { expandedQueryNodes.add(query); diff --git a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/FiltersPanel.form b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/FiltersPanel.form index 506364070a..cec58f27a4 100644 --- a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/FiltersPanel.form +++ b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/FiltersPanel.form @@ -1,4 +1,4 @@ - +
    @@ -192,6 +192,20 @@ + + + + + + + + + + + + + + diff --git a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/FiltersPanel.java b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/FiltersPanel.java index 046d2a734d..d9f8e98c9d 100644 --- a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/FiltersPanel.java +++ b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/FiltersPanel.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.filters; import java.awt.BorderLayout; @@ -56,27 +57,50 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.filters.api.FilterController; import org.gephi.filters.api.FilterModel; import org.gephi.filters.api.Query; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; import org.gephi.ui.utils.UIUtils; import org.openide.DialogDisplayer; import org.openide.NotifyDescriptor; import org.openide.explorer.ExplorerManager; +import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class FiltersPanel extends javax.swing.JPanel implements ExplorerManager.Provider, ChangeListener { - private ExplorerManager manager = new ExplorerManager(); + private final ExplorerManager manager = new ExplorerManager(); + //Components + private final FilterPanelPanel filterPanelPanel; + private final QueriesPanel queriesPanel; //Models private FilterModel filterModel; private FilterUIModel uiModel; - //Components - private FilterPanelPanel filterPanelPanel; private QueryExplorer queriesExplorer; - private QueriesPanel queriesPanel; + private javax.swing.JButton resetLabelVisibleButton; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPanel buttonsPanel; + private javax.swing.JButton exportColumnButton; + private javax.swing.JButton exportLabelVisible; + private javax.swing.JButton exportWorkspaceButton; + private javax.swing.JToggleButton filterButton; + private javax.swing.JPanel filtersUIPanel; + private javax.swing.JScrollPane libraryTree; + private javax.swing.JButton resetButton; + private javax.swing.JToggleButton selectButton; + private javax.swing.JToolBar.Separator separator; + private javax.swing.JPanel southPanel; + private javax.swing.JToolBar southToolbar; + private javax.swing.JSplitPane splitPane; + private javax.swing.JToggleButton stopButton; + private javax.swing.JToolBar toolbar; + // End of variables declaration//GEN-END:variables public FiltersPanel() { initComponents(); @@ -88,6 +112,14 @@ public FiltersPanel() { setBackground(UIManager.getColor("NbExplorerView.background")); } + resetLabelVisibleButton = new javax.swing.JButton(); + resetLabelVisibleButton.setIcon(ImageUtilities.loadImageIcon("DesktopFilters/resetLabelVisible.svg", false)); + resetLabelVisibleButton.setToolTipText(NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.resetLabelVisible.toolTipText")); + resetLabelVisibleButton.setFocusable(false); + resetLabelVisibleButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); + resetLabelVisibleButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); + toolbar.add(resetLabelVisibleButton); + //Components queriesPanel = new QueriesPanel(); southPanel.add(queriesPanel, BorderLayout.CENTER); @@ -100,6 +132,7 @@ public FiltersPanel() { private void initEvents() { resetButton.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { FilterController controller = Lookup.getDefault().lookup(FilterController.class); for (Query query : filterModel.getQueries()) { @@ -109,42 +142,58 @@ public void actionPerformed(ActionEvent e) { controller.selectVisible(null); controller.filterVisible(null); ((FiltersExplorer) libraryTree).setup(manager, filterModel, uiModel); + stopButton.setVisible(false); + filterButton.setVisible(true); } }); filterButton.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { //selectButton.setSelected(false); - if (uiModel.getSelectedQuery() != null && filterButton.isSelected()) { + if (uiModel.getSelectedQuery() != null) { FilterController controller = Lookup.getDefault().lookup(FilterController.class); controller.filterVisible(uiModel.getSelectedRoot()); - } else { - FilterController controller = Lookup.getDefault().lookup(FilterController.class); - controller.filterVisible(null); + stopButton.setSelected(false); + stopButton.setVisible(true); + filterButton.setVisible(false); } } }); + stopButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + FilterController controller = Lookup.getDefault().lookup(FilterController.class); + controller.filterVisible(null); + controller.selectVisible(null); + stopButton.setVisible(false); + filterButton.setSelected(true); + filterButton.setVisible(true); + } + }); selectButton.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { - //filterButton.setSelected(false); - if (uiModel.getSelectedQuery() != null && selectButton.isSelected()) { - FilterController controller = Lookup.getDefault().lookup(FilterController.class); - controller.selectVisible(uiModel.getSelectedRoot()); - } else { - FilterController controller = Lookup.getDefault().lookup(FilterController.class); + FilterController controller = Lookup.getDefault().lookup(FilterController.class); + if (controller.getModel().isSelecting()) { controller.selectVisible(null); + } else { + if (uiModel.getSelectedQuery() != null) { + controller.selectVisible(uiModel.getSelectedRoot()); + } } } }); exportColumnButton.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { if (uiModel.getSelectedQuery() != null) { FilterController controller = Lookup.getDefault().lookup(FilterController.class); NotifyDescriptor.InputLine question = new NotifyDescriptor.InputLine( - NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.exportColumn.input"), - NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.exportColumn.input.title")); + NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.exportColumn.input"), + NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.exportColumn.input.title")); if (DialogDisplayer.getDefault().notify(question) == NotifyDescriptor.OK_OPTION) { String input = question.getInputText(); if (input != null && !input.isEmpty()) { @@ -156,6 +205,7 @@ public void actionPerformed(ActionEvent e) { }); exportWorkspaceButton.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { if (uiModel.getSelectedQuery() != null) { FilterController controller = Lookup.getDefault().lookup(FilterController.class); @@ -165,6 +215,7 @@ public void actionPerformed(ActionEvent e) { }); exportLabelVisible.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { if (uiModel.getSelectedQuery() != null) { FilterController controller = Lookup.getDefault().lookup(FilterController.class); @@ -172,15 +223,22 @@ public void actionPerformed(ActionEvent e) { } } }); - /*autoRefreshButton.addActionListener(new ActionListener() { + resetLabelVisibleButton.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + GraphController gc = Lookup.getDefault().lookup(GraphController.class); + GraphModel gm = gc.getGraphModel(); + Graph graph = gm.getGraphVisible(); + for (Node n : graph.getNodes()) { + n.getTextProperties().setVisible(true); + } + for (Edge edge : graph.getEdges()) { + edge.getTextProperties().setVisible(true); + } + } + }); - public void actionPerformed(ActionEvent e) { - if (filterModel.isAutoRefresh() != autoRefreshButton.isSelected()) { - FilterController controller = Lookup.getDefault().lookup(FilterController.class); - controller.setAutoRefresh(autoRefreshButton.isSelected()); - } - } - });*/ updateEnabled(false); } @@ -201,32 +259,27 @@ public void refreshModel(FilterModel filterModel, FilterUIModel uiModel) { updateControls(); } - private class QueriesPanel extends JPanel implements ExplorerManager.Provider { - - private ExplorerManager manager = new ExplorerManager(); - - public QueriesPanel() { - super(new BorderLayout()); - queriesExplorer = new QueryExplorer(); - add(queriesExplorer, BorderLayout.CENTER); - } - - public ExplorerManager getExplorerManager() { - return manager; - } - } - private void updateEnabled(final boolean enabled) { + final FilterUIModel currentUiModel = uiModel; + final FilterModel currentFilterModel = filterModel; SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { resetButton.setEnabled(enabled); - selectButton.setEnabled(enabled); - filterButton.setEnabled(enabled); + resetLabelVisibleButton.setEnabled(enabled); + selectButton.setEnabled(enabled && currentUiModel != null && currentUiModel.getSelectedQuery() != null); + filterButton.setEnabled(enabled && currentUiModel != null && currentUiModel.getSelectedQuery() != null); /*autoRefreshButton.setEnabled(enabled);*/ - exportColumnButton.setEnabled(enabled && uiModel.getSelectedQuery() != null && filterModel.getCurrentQuery() != null); - exportWorkspaceButton.setEnabled(enabled && uiModel.getSelectedQuery() != null && filterModel.getCurrentQuery() != null); - exportLabelVisible.setEnabled(enabled && uiModel.getSelectedQuery() != null && filterModel.getCurrentQuery() != null); + exportColumnButton + .setEnabled(enabled && currentUiModel != null && currentUiModel.getSelectedQuery() != null + && currentFilterModel != null && currentFilterModel.getCurrentQuery() != null); + exportWorkspaceButton + .setEnabled(enabled && currentUiModel != null && currentUiModel.getSelectedQuery() != null + && currentFilterModel != null && currentFilterModel.getCurrentQuery() != null); + exportLabelVisible + .setEnabled(enabled && currentUiModel != null && currentUiModel.getSelectedQuery() != null + && currentFilterModel != null && currentFilterModel.getCurrentQuery() != null); } }); } @@ -234,24 +287,35 @@ public void run() { private void updateControls() { SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { if (filterModel != null) { - filterButton.setSelected(filterModel.isFiltering()); + if (filterModel.isFiltering()) { + stopButton.setVisible(true); + stopButton.setSelected(false); + filterButton.setVisible(false); + } else { + stopButton.setVisible(false); + filterButton.setSelected(false); + filterButton.setVisible(true); + } + selectButton.setSelected(filterModel.isSelecting()); - /*autoRefreshButton.setSelected(filterModel.isAutoRefresh());*/ } else { + stopButton.setVisible(false); + filterButton.setVisible(true); filterButton.setSelected(false); selectButton.setSelected(false); - /*autoRefreshButton.setSelected(false);*/ } } }); } + @Override public void stateChanged(ChangeEvent e) { if (e.getSource() instanceof FilterUIModel) { - if (uiModel.getSelectedQuery() != null && filterButton.isSelected()) { + if (uiModel.getSelectedQuery() != null && stopButton.isVisible()) { FilterController controller = Lookup.getDefault().lookup(FilterController.class); controller.filterVisible(uiModel.getSelectedRoot()); } else if (uiModel.getSelectedQuery() != null && selectButton.isSelected()) { @@ -261,12 +325,12 @@ public void stateChanged(ChangeEvent e) { } else if (e.getSource() instanceof FilterModel) { if (uiModel.getSelectedQuery() != null && filterModel.getCurrentQuery() == null) { //Remove case - if(!Arrays.asList(filterModel.getQueries()).contains(uiModel.getSelectedRoot())) { + if (!Arrays.asList(filterModel.getQueries()).contains(uiModel.getSelectedRoot())) { uiModel.setSelectedQuery(null); } } else if (filterModel.getCurrentQuery() != null - && filterModel.getCurrentQuery() != uiModel.getSelectedQuery() - && filterModel.getCurrentQuery() != uiModel.getSelectedRoot()) { + && filterModel.getCurrentQuery() != uiModel.getSelectedQuery() + && filterModel.getCurrentQuery() != uiModel.getSelectedRoot()) { uiModel.setSelectedQuery(filterModel.getCurrentQuery()); } } @@ -292,10 +356,10 @@ private void setup() { } } - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents @@ -316,37 +380,45 @@ private void initComponents() { buttonsPanel = new javax.swing.JPanel(); selectButton = new javax.swing.JToggleButton(); filterButton = new javax.swing.JToggleButton(); + stopButton = new javax.swing.JToggleButton(); setLayout(new java.awt.GridBagLayout()); toolbar.setFloatable(false); toolbar.setRollover(true); - resetButton.setText(org.openide.util.NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.resetButton.text")); // NOI18N + resetButton.setText( + org.openide.util.NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.resetButton.text")); // NOI18N resetButton.setFocusable(false); resetButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); resetButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); toolbar.add(resetButton); toolbar.add(separator); - exportColumnButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/filters/resources/table_export.png"))); // NOI18N - exportColumnButton.setText(org.openide.util.NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.exportColumnButton.text")); // NOI18N - exportColumnButton.setToolTipText(org.openide.util.NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.exportColumnButton.toolTipText")); // NOI18N + exportColumnButton.setIcon( + ImageUtilities.loadImageIcon("DesktopFilters/table_export.svg", false)); // NOI18N + exportColumnButton.setText( + org.openide.util.NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.exportColumnButton.text")); // NOI18N + exportColumnButton.setToolTipText(org.openide.util.NbBundle + .getMessage(FiltersPanel.class, "FiltersPanel.exportColumnButton.toolTipText")); // NOI18N exportColumnButton.setFocusable(false); exportColumnButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); exportColumnButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); toolbar.add(exportColumnButton); - exportWorkspaceButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/filters/resources/workspace_export.png"))); // NOI18N - exportWorkspaceButton.setText(org.openide.util.NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.exportWorkspaceButton.text")); // NOI18N - exportWorkspaceButton.setToolTipText(org.openide.util.NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.exportWorkspaceButton.toolTipText")); // NOI18N + exportWorkspaceButton.setIcon(ImageUtilities.loadImageIcon("DesktopFilters/workspace_export.svg", false)); // NOI18N + exportWorkspaceButton.setText(org.openide.util.NbBundle + .getMessage(FiltersPanel.class, "FiltersPanel.exportWorkspaceButton.text")); // NOI18N + exportWorkspaceButton.setToolTipText(org.openide.util.NbBundle + .getMessage(FiltersPanel.class, "FiltersPanel.exportWorkspaceButton.toolTipText")); // NOI18N exportWorkspaceButton.setFocusable(false); exportWorkspaceButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); exportWorkspaceButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); toolbar.add(exportWorkspaceButton); - exportLabelVisible.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/filters/resources/labelvisible_export.png"))); // NOI18N - exportLabelVisible.setToolTipText(org.openide.util.NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.exportLabelVisible.toolTipText")); // NOI18N + exportLabelVisible.setIcon(ImageUtilities.loadImageIcon("DesktopFilters/labelvisible_export.svg", false)); // NOI18N + exportLabelVisible.setToolTipText(org.openide.util.NbBundle + .getMessage(FiltersPanel.class, "FiltersPanel.exportLabelVisible.toolTipText")); // NOI18N exportLabelVisible.setFocusable(false); exportLabelVisible.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); exportLabelVisible.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); @@ -407,39 +479,48 @@ private void initComponents() { buttonsPanel.setOpaque(false); buttonsPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 4, 4)); - selectButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/filters/resources/select.png"))); // NOI18N - selectButton.setText(org.openide.util.NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.selectButton.text")); // NOI18N + selectButton.setIcon(ImageUtilities.loadImageIcon("DesktopFilters/select.svg", false)); // NOI18N + selectButton.setText( + org.openide.util.NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.selectButton.text")); // NOI18N selectButton.setMargin(new java.awt.Insets(2, 7, 2, 14)); buttonsPanel.add(selectButton); - filterButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/filters/resources/filter.png"))); // NOI18N - filterButton.setText(org.openide.util.NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.filterButton.text")); // NOI18N + filterButton.setIcon(ImageUtilities.loadImageIcon("DesktopFilters/filter.svg", false)); // NOI18N + filterButton.setText( + org.openide.util.NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.filterButton.text")); // NOI18N filterButton.setMargin(new java.awt.Insets(2, 7, 2, 14)); buttonsPanel.add(filterButton); + stopButton.setIcon(ImageUtilities.loadImageIcon("DesktopFilters/stop.svg", false)); // NOI18N + stopButton.setText( + org.openide.util.NbBundle.getMessage(FiltersPanel.class, "FiltersPanel.stopButton.text")); // NOI18N + stopButton.setMargin(new java.awt.Insets(2, 7, 2, 14)); + buttonsPanel.add(stopButton); + gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 4; add(buttonsPanel, gridBagConstraints); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JPanel buttonsPanel; - private javax.swing.JButton exportColumnButton; - private javax.swing.JButton exportLabelVisible; - private javax.swing.JButton exportWorkspaceButton; - private javax.swing.JToggleButton filterButton; - private javax.swing.JPanel filtersUIPanel; - private javax.swing.JScrollPane libraryTree; - private javax.swing.JButton resetButton; - private javax.swing.JToggleButton selectButton; - private javax.swing.JToolBar.Separator separator; - private javax.swing.JPanel southPanel; - private javax.swing.JToolBar southToolbar; - private javax.swing.JSplitPane splitPane; - private javax.swing.JToolBar toolbar; - // End of variables declaration//GEN-END:variables + @Override public ExplorerManager getExplorerManager() { return manager; } + + private class QueriesPanel extends JPanel implements ExplorerManager.Provider { + + private final ExplorerManager manager = new ExplorerManager(); + + public QueriesPanel() { + super(new BorderLayout()); + queriesExplorer = new QueryExplorer(); + add(queriesExplorer, BorderLayout.CENTER); + } + + @Override + public ExplorerManager getExplorerManager() { + return manager; + } + } } diff --git a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/FiltersTopComponent.java b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/FiltersTopComponent.java index 7efa6fe6c0..7a2daa9137 100644 --- a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/FiltersTopComponent.java +++ b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/FiltersTopComponent.java @@ -39,10 +39,12 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.filters; import java.awt.BorderLayout; -import org.gephi.filters.api.FilterController; +import java.util.TimerTask; +import javax.swing.SwingUtilities; import org.gephi.filters.api.FilterModel; import org.gephi.project.api.ProjectController; import org.gephi.project.api.Workspace; @@ -56,77 +58,91 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.windows.TopComponent; @ConvertAsProperties(dtd = "-//org.gephi.desktop.filters//Filters//EN", -autostore = false) + autostore = false) @TopComponent.Description(preferredID = "FiltersTopComponent", -iconBase = "org/gephi/desktop/filters/resources/small.png", -persistenceType = TopComponent.PERSISTENCE_ALWAYS) + iconBase = "DesktopFilters/small.svg", + persistenceType = TopComponent.PERSISTENCE_ALWAYS) @TopComponent.Registration(mode = "filtersmode", openAtStartup = true, roles = {"overview"}) @ActionID(category = "Window", id = "org.gephi.desktop.filters.FiltersTopComponent") @ActionReference(path = "Menu/Window", position = 400) @TopComponent.OpenActionRegistration(displayName = "#CTL_FiltersTopComponent", -preferredID = "FiltersTopComponent") + preferredID = "FiltersTopComponent") public final class FiltersTopComponent extends TopComponent { - private static FiltersTopComponent instance; - static final String ICON_PATH = "org/gephi/desktop/filters/resources/small.png"; - private static final String PREFERRED_ID = "FiltersTopComponent"; + private static final long AUTO_REFRESH_RATE_MILLISECONDS = 3000; //Panel - private FiltersPanel panel; + private final FiltersPanel panel; //Models private FilterModel filterModel; + private WorkspaceColumnsObservers observers; private FilterUIModel uiModel; + private java.util.Timer observersTimer; public FiltersTopComponent() { initComponents(); setName(NbBundle.getMessage(FiltersTopComponent.class, "CTL_FiltersTopComponent")); -// setToolTipText(NbBundle.getMessage(FiltersTopComponent.class, "HINT_FiltersTopComponent")); - setIcon(ImageUtilities.loadImage(ICON_PATH, true)); putClientProperty(TopComponent.PROP_MAXIMIZATION_DISABLED, Boolean.TRUE); panel = new FiltersPanel(); add(panel, BorderLayout.CENTER); //Model management - FilterController controller = Lookup.getDefault().lookup(FilterController.class); ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); pc.addWorkspaceListener(new WorkspaceListener() { + @Override public void initialize(Workspace workspace) { - workspace.add(new FilterUIModel()); + workspace.add(new FilterUIModel(workspace)); } + @Override public void select(Workspace workspace) { - filterModel = workspace.getLookup().lookup(FilterModel.class); - uiModel = workspace.getLookup().lookup(FilterUIModel.class); - if (uiModel == null) { - uiModel = new FilterUIModel(); - workspace.add(uiModel); - } - refreshModel(); + activateWorkspace(workspace); + SwingUtilities.invokeLater(() -> refreshModel()); } + @Override public void unselect(Workspace workspace) { + if (observers != null) { + observers.destroy(); + } } + @Override public void close(Workspace workspace) { } + @Override public void disable() { filterModel = null; uiModel = null; - refreshModel(); + observers = null; + SwingUtilities.invokeLater(() -> refreshModel()); } }); + if (pc.getCurrentWorkspace() != null) { Workspace workspace = pc.getCurrentWorkspace(); - filterModel = workspace.getLookup().lookup(FilterModel.class); - uiModel = workspace.getLookup().lookup(FilterUIModel.class); - if (uiModel == null) { - uiModel = new FilterUIModel(); - workspace.add(uiModel); - } + activateWorkspace(workspace); } refreshModel(); + + initEvents(); + } + + private void activateWorkspace(Workspace workspace) { + filterModel = workspace.getLookup().lookup(FilterModel.class); + uiModel = workspace.getLookup().lookup(FilterUIModel.class); + if (uiModel == null) { + uiModel = new FilterUIModel(workspace); + workspace.add(uiModel); + } + + observers = workspace.getLookup().lookup(WorkspaceColumnsObservers.class); + if (observers == null) { + workspace.add(observers = new WorkspaceColumnsObservers(workspace)); + } + observers.initialize(); } private void refreshModel() { @@ -137,10 +153,24 @@ public FilterUIModel getUiModel() { return uiModel; } + private void initEvents() { + observersTimer = new java.util.Timer("DataLaboratoryGraphObservers"); + observersTimer.schedule(new TimerTask() { + + @Override + public void run() { + if (observers != null) { + if (observers.hasChanges()) { + refreshModel(); + } + } + } + } + , 0, AUTO_REFRESH_RATE_MILLISECONDS);//Check graph and tables for changes every 100 ms + } + /** - * This method is called from within the constructor to initialize the form. - * WARNING: Do NOT modify this code. The content of this method is always - * regenerated by the Form Editor. + * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The content of this method is always regenerated by the Form Editor. */ // //GEN-BEGIN:initComponents private void initComponents() { diff --git a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/WorkspaceColumnsObservers.java b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/WorkspaceColumnsObservers.java new file mode 100644 index 0000000000..faf01a5304 --- /dev/null +++ b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/WorkspaceColumnsObservers.java @@ -0,0 +1,102 @@ +/* +Copyright 2008-2017 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2017 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2017 Gephi Consortium. + */ + +package org.gephi.desktop.filters; + +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.TableObserver; +import org.gephi.project.api.Workspace; +import org.openide.util.Lookup; + +/** + * Class for managing observers of a workspace to automatically refresh filters library. + * + * @author Eduardo Ramos + */ +public class WorkspaceColumnsObservers { + + private final GraphModel graphModel; + + private TableObserver nodesTableObserver; + private TableObserver edgesTableObserver; + + public WorkspaceColumnsObservers(Workspace workspace) { + this.graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(workspace); + } + + public synchronized void initialize() { + if (nodesTableObserver != null) { + return; + } + + nodesTableObserver = graphModel.getNodeTable().createTableObserver(true); + edgesTableObserver = graphModel.getEdgeTable().createTableObserver(true); + } + + public synchronized void destroy() { + if (nodesTableObserver != null) { + nodesTableObserver.destroy(); + nodesTableObserver = null; + } + if (edgesTableObserver != null) { + edgesTableObserver.destroy(); + edgesTableObserver = null; + } + } + + public boolean hasChanges() { + if (nodesTableObserver == null) { + return false;//Not initialized + } + + boolean hasChanges = false; + hasChanges = processTableObseverChanges(nodesTableObserver) || hasChanges; + hasChanges = processTableObseverChanges(edgesTableObserver) || hasChanges; + + return hasChanges; + } + + private boolean processTableObseverChanges(TableObserver observer) { + return observer.hasTableChanged(); + } +} diff --git a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/library/CategoryChildFactory.java b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/library/CategoryChildFactory.java index 1708ea46bd..56e76e076f 100644 --- a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/library/CategoryChildFactory.java +++ b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/library/CategoryChildFactory.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.filters.library; import java.util.Arrays; @@ -51,13 +52,12 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.nodes.Node; /** - * * @author Mathieu Bastian */ public class CategoryChildFactory extends ChildFactory { - private Category category; - private FiltersExplorer.Utils utils; + private final Category category; + private final FiltersExplorer.Utils utils; public CategoryChildFactory(FiltersExplorer.Utils utils, Category category) { this.utils = utils; @@ -69,6 +69,7 @@ protected boolean createKeys(List toPopulate) { Object[] children = utils.getChildren(category); Arrays.sort(children, new Comparator() { + @Override public int compare(Object o1, Object o2) { String s1; String s2; @@ -99,11 +100,11 @@ public int compare(Object o1, Object o2) { @Override protected Node[] createNodesForKey(Object key) { if (key instanceof Category) { - return new Node[]{new CategoryNode(utils, (Category) key)}; + return new Node[] {new CategoryNode(utils, (Category) key)}; } else if (key instanceof FilterBuilder) { - return new Node[]{new FilterBuilderNode((FilterBuilder) key)}; + return new Node[] {new FilterBuilderNode((FilterBuilder) key)}; } else { - return new Node[]{new SavedQueryNode((Query) key)}; + return new Node[] {new SavedQueryNode((Query) key)}; } } } diff --git a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/library/CategoryNode.java b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/library/CategoryNode.java index 5410a6411f..f38e83f72b 100644 --- a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/library/CategoryNode.java +++ b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/library/CategoryNode.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.filters.library; import java.awt.Image; @@ -60,15 +61,15 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.datatransfer.PasteType; /** - * * @author Mathieu Bastian */ public class CategoryNode extends AbstractNode { - private Category category; + private final Category category; public CategoryNode(FiltersExplorer.Utils utils, Category category) { - super(utils.isLeaf(category) ? Children.LEAF : Children.create(new CategoryChildFactory(utils, category), true)); + super( + utils.isLeaf(category) ? Children.LEAF : Children.create(new CategoryChildFactory(utils, category), true)); this.category = category; if (category != null) { setName(category.getName()); @@ -86,9 +87,9 @@ public Image getIcon(int type) { } catch (Exception e) { } if (category == null) { - return ImageUtilities.loadImage("org/gephi/desktop/filters/library/resources/library.png"); + return ImageUtilities.loadImage("DesktopFilters/library.svg", false); } else { - return ImageUtilities.loadImage("org/gephi/desktop/filters/library/resources/folder.png"); + return ImageUtilities.loadImage("DesktopFilters/folder.svg", false); } } diff --git a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/library/FilterBuilderNode.java b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/library/FilterBuilderNode.java index 16736840a7..88802174f8 100644 --- a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/library/FilterBuilderNode.java +++ b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/library/FilterBuilderNode.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.filters.library; import java.awt.Image; @@ -53,13 +54,13 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.ImageUtilities; /** - * * @author Mathieu Bastian */ public class FilterBuilderNode extends AbstractNode { - private FilterBuilder filterBuilder; - private FilterTransferable transferable; + public static final DataFlavor DATA_FLAVOR = new DataFlavor(FilterBuilder.class, "filterbuilder"); + private final FilterBuilder filterBuilder; + private final FilterTransferable transferable; public FilterBuilderNode(FilterBuilder filterBuilder) { super(Children.LEAF); @@ -84,7 +85,7 @@ public Image getIcon(int type) { } } catch (Exception e) { } - return ImageUtilities.loadImage("org/gephi/desktop/filters/library/resources/filter.png"); + return ImageUtilities.loadImage("DesktopFilters/funnel.svg", false); } @Override @@ -105,19 +106,26 @@ public FilterBuilder getBuilder() { public Transferable drag() throws IOException { return transferable; } - public static final DataFlavor DATA_FLAVOR = new DataFlavor(FilterBuilder.class, "filterbuilder"); + + @Override + public Action[] getActions(boolean context) { + return new Action[0]; + } private class FilterTransferable implements Transferable { + @Override public DataFlavor[] getTransferDataFlavors() { - return new DataFlavor[]{DATA_FLAVOR}; + return new DataFlavor[] {DATA_FLAVOR}; } + @Override public boolean isDataFlavorSupported(DataFlavor flavor) { return flavor == DATA_FLAVOR; } + @Override public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException, IOException { if (flavor == DATA_FLAVOR) { return filterBuilder; @@ -126,9 +134,4 @@ public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorExcepti } } } - - @Override - public Action[] getActions(boolean context) { - return new Action[0]; - } } diff --git a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/library/FilterBuilderNodeDefaultAction.java b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/library/FilterBuilderNodeDefaultAction.java index 16f1e995a3..0bc398d402 100644 --- a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/library/FilterBuilderNodeDefaultAction.java +++ b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/library/FilterBuilderNodeDefaultAction.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.filters.library; import java.awt.event.ActionEvent; @@ -50,7 +51,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.actions.SystemAction; /** - * * @author Mathieu Bastian */ public class FilterBuilderNodeDefaultAction extends SystemAction { @@ -72,7 +72,7 @@ public void actionPerformed(ActionEvent ev) { FilterBuilderNode node = (FilterBuilderNode) ev.getSource(); FilterBuilder builder = node.getBuilder(); FilterController filterController = Lookup.getDefault().lookup(FilterController.class); - Query function = filterController.createQuery(builder.getFilter()); + Query function = filterController.createQuery(builder); filterController.add(function); } } diff --git a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/library/FiltersExplorer.java b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/library/FiltersExplorer.java index 8d8c80a832..60fae04a4a 100644 --- a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/library/FiltersExplorer.java +++ b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/library/FiltersExplorer.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.filters.library; import java.util.HashSet; @@ -64,11 +65,18 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class FiltersExplorer extends BeanTreeView { + public static final Category QUERIES = new Category( + NbBundle.getMessage(FiltersExplorer.class, "FiltersExplorer.Queries"), + null, + null); + private final Category UNSORTED = new Category( + NbBundle.getMessage(FiltersExplorer.class, "FiltersExplorer.UnsortedCategory"), + null, + null); private ExplorerManager manager; private FilterLibrary filterLibrary; private FilterUIModel uiModel; @@ -84,14 +92,18 @@ public void setup(final ExplorerManager manager, FilterModel model, FilterUIMode this.filterLibrary = model.getLibrary(); SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { - manager.setRootContext(new CategoryNode(new Utils(), null)); + if (filterLibrary != null) { + manager.setRootContext(new CategoryNode(new Utils(), null)); + } } }); } else { this.filterLibrary = null; SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { manager.setRootContext(new AbstractNode(Children.LEAF) { @@ -106,10 +118,47 @@ public Action[] getActions(boolean context) { updateEnabled(model != null); } + private void updateEnabled(final boolean enabled) { + SwingUtilities.invokeLater(new Runnable() { + + @Override + public void run() { + setRootVisible(enabled); + setEnabled(enabled); + } + }); + } + + private void loadExpandStatus(CategoryNode node) { + if (uiModel == null) { + return; + } + if (uiModel.isExpanded(node.getCategory())) { + expandNode(node); + } + for (Node n : node.getChildren().getNodes()) { + if (n instanceof CategoryNode) { + loadExpandStatus((CategoryNode) n); + } + } + } + + private void saveExpandStatus(CategoryNode node) { + if (uiModel == null) { + return; + } + uiModel.setExpand(node.getCategory(), isExpanded(node)); + for (Node n : node.getChildren().getNodes()) { + if (n instanceof CategoryNode) { + saveExpandStatus((CategoryNode) n); + } + } + } + protected class Utils implements LookupListener { - private Lookup.Result lookupResult; - private Lookup.Result lookupResult2; + private final Lookup.Result lookupResult; + private final Lookup.Result lookupResult2; public Utils() { lookupResult = filterLibrary.getLookup().lookupResult(FilterBuilder.class); @@ -118,6 +167,7 @@ public Utils() { lookupResult2.addLookupListener(this); } + @Override public void resultChanged(LookupEvent ev) { saveExpandStatus((CategoryNode) manager.getRootContext()); manager.setRootContext(new CategoryNode(this, null)); @@ -135,7 +185,8 @@ public boolean isLeaf(Category category) { if (fb.getCategory() == null && category.equals(UNSORTED)) { return false; } - if (fb.getCategory() != null && fb.getCategory().getParent() != null && fb.getCategory().getParent().equals(category)) { + if (fb.getCategory() != null && fb.getCategory().getParent() != null && + fb.getCategory().getParent().equals(category)) { return false; } if (fb.getCategory() != null && fb.getCategory().equals(category)) { @@ -154,7 +205,7 @@ public boolean isLeaf(Category category) { } public Object[] getChildren(Category category) { - Set cats = new HashSet(); + Set cats = new HashSet<>(); if (category != null && category.equals(QUERIES)) { for (Query q : filterLibrary.getLookup().lookupAll(Query.class)) { @@ -188,10 +239,11 @@ public Object[] getChildren(Category category) { for (CategoryBuilder cb : filterLibrary.getLookup().lookupAll(CategoryBuilder.class)) { if (cb.getCategory().getParent() == category) { cats.add(cb.getCategory()); - } else if (cb.getCategory().getParent() != null && cb.getCategory().getParent().getParent() == category) { + } else if (cb.getCategory().getParent() != null && + cb.getCategory().getParent().getParent() == category) { cats.add(cb.getCategory().getParent()); } else if (cb.getCategory() == category) { - for (FilterBuilder fb : cb.getBuilders()) { + for (FilterBuilder fb : cb.getBuilders(uiModel.getWorkspace())) { cats.add(fb); } } @@ -209,48 +261,4 @@ public boolean isValid(Category category) { return true; } } - private final Category UNSORTED = new Category( - NbBundle.getMessage(FiltersExplorer.class, "FiltersExplorer.UnsortedCategory"), - null, - null); - public static final Category QUERIES = new Category( - NbBundle.getMessage(FiltersExplorer.class, "FiltersExplorer.Queries"), - null, - null); - - private void updateEnabled(final boolean enabled) { - SwingUtilities.invokeLater(new Runnable() { - - public void run() { - setRootVisible(enabled); - setEnabled(enabled); - } - }); - } - - private void loadExpandStatus(CategoryNode node) { - if (uiModel == null) { - return; - } - if (uiModel.isExpanded(node.getCategory())) { - expandNode(node); - } - for (Node n : node.getChildren().getNodes()) { - if (n instanceof CategoryNode) { - loadExpandStatus((CategoryNode) n); - } - } - } - - private void saveExpandStatus(CategoryNode node) { - if (uiModel == null) { - return; - } - uiModel.setExpand(node.getCategory(), isExpanded(node)); - for (Node n : node.getChildren().getNodes()) { - if (n instanceof CategoryNode) { - saveExpandStatus((CategoryNode) n); - } - } - } } diff --git a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/library/SavedQueryNode.java b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/library/SavedQueryNode.java index e157117a05..7e79a371ce 100644 --- a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/library/SavedQueryNode.java +++ b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/library/SavedQueryNode.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.filters.library; import java.awt.event.ActionEvent; @@ -53,12 +54,11 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class SavedQueryNode extends AbstractNode { - private Query query; + private final Query query; public SavedQueryNode(Query query) { super(Children.LEAF); @@ -68,7 +68,7 @@ public SavedQueryNode(Query query) { @Override public Action[] getActions(boolean context) { - return new Action[]{new RemoveAction()}; + return new Action[] {new RemoveAction()}; } @Override @@ -113,6 +113,7 @@ public RemoveAction() { super(NbBundle.getMessage(SavedQueryNode.class, "SavedQueryNode.actions.remove")); } + @Override public void actionPerformed(ActionEvent e) { FilterController filterController = Lookup.getDefault().lookup(FilterController.class); FilterLibrary filterLibrary = filterController.getModel().getLibrary(); diff --git a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/library/SavedQueryNodeDefaultAction.java b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/library/SavedQueryNodeDefaultAction.java index 37a2c2be3d..c781032ad4 100644 --- a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/library/SavedQueryNodeDefaultAction.java +++ b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/library/SavedQueryNodeDefaultAction.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.filters.library; @@ -49,7 +50,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.actions.SystemAction; /** - * * @author Mathieu Bastian */ public class SavedQueryNodeDefaultAction extends SystemAction { diff --git a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/FilterNode.java b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/FilterNode.java index 33806533d6..bd5e4dbc74 100644 --- a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/FilterNode.java +++ b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/FilterNode.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.filters.query; import javax.swing.Action; @@ -47,7 +48,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.nodes.Children; /** - * * @author Mathieu Bastian */ public class FilterNode extends AbstractNode { diff --git a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/ParameterChildren.java b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/ParameterChildren.java index 59abf54e02..2137a468a3 100644 --- a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/ParameterChildren.java +++ b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/ParameterChildren.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.filters.query; import org.gephi.filters.api.Query; @@ -46,12 +47,11 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.nodes.Node; /** - * * @author Mathieu Bastian */ public class ParameterChildren extends Children.Keys { - private Query function; + private final Query function; public ParameterChildren(Query function) { this.function = function; @@ -64,6 +64,6 @@ public ParameterChildren(Query function) { @Override protected Node[] createNodes(Integer key) { - return new Node[]{new ParameterNode(function.getPropertyName(key), function.getPropertyValue(key))}; + return new Node[] {new ParameterNode(function.getPropertyName(key), function.getPropertyValue(key))}; } } diff --git a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/ParameterNode.java b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/ParameterNode.java index 89d7847dc8..8e96dd54ca 100644 --- a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/ParameterNode.java +++ b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/ParameterNode.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.filters.query; import javax.swing.Action; @@ -48,7 +49,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class ParameterNode extends AbstractNode { @@ -57,13 +57,13 @@ public ParameterNode(String key, Object value) { super(Children.LEAF); String valStr = value == null ? "null" : value.toString(); setName(key + ": " + valStr); - setIconBaseWithExtension("org/gephi/desktop/filters/query/resources/parameter.png"); + setIconBaseWithExtension("DesktopFilters/parameter.svg"); } public ParameterNode(Query function) { super(new ParameterChildren(function)); setName(NbBundle.getMessage(ParameterNode.class, "ParametersNode.name")); - setIconBaseWithExtension("org/gephi/desktop/filters/query/resources/parameters.png"); + setIconBaseWithExtension("DesktopFilters/parameters.svg"); } @Override diff --git a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/QueryChildren.java b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/QueryChildren.java index 9e4cd92307..e67f7aaa3e 100644 --- a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/QueryChildren.java +++ b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/QueryChildren.java @@ -38,11 +38,11 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.desktop.filters.query; import java.awt.datatransfer.Transferable; -import java.awt.datatransfer.UnsupportedFlavorException; import java.io.IOException; import java.util.ArrayList; import java.util.Collection; @@ -54,12 +54,12 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.nodes.AbstractNode; import org.openide.nodes.Children; import org.openide.nodes.Node; +import org.openide.util.Exceptions; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.datatransfer.PasteType; /** - * * @author Mathieu Bastian */ public class QueryChildren extends Children.Array { @@ -79,12 +79,12 @@ public QueryChildren(Query[] topQuery) { //Only for root node @Override protected Collection initCollection() { - Collection nodesChildren = new ArrayList(); + Collection nodesChildren = new ArrayList<>(); if (query == null && topQuery == null) { nodesChildren.add(new HelpNode()); } else { Query[] children = topQuery != null ? topQuery : query.getChildren(); - boolean hasParameters = query == null ? false : query.getPropertiesCount() > 0; + boolean hasParameters = query != null && query.getPropertiesCount() > 0; int slots = topQuery != null ? topQuery.length : query.getChildrenSlotsCount(); if (slots == Integer.MAX_VALUE) { @@ -109,7 +109,7 @@ private static class HelpNode extends AbstractNode { public HelpNode() { super(Children.LEAF); - setIconBaseWithExtension("org/gephi/desktop/filters/query/resources/drop.png"); + setIconBaseWithExtension("DesktopFilters/drop.svg"); } @Override @@ -127,15 +127,13 @@ public PasteType getDropType(Transferable t, int action, int index) { @Override public Transferable paste() throws IOException { FilterController filterController = Lookup.getDefault().lookup(FilterController.class); - Query f = filterController.createQuery(fb.getFilter()); + Query f = filterController.createQuery(fb); filterController.add(f); return null; } }; - } catch (UnsupportedFlavorException ex) { - ex.printStackTrace(); - } catch (IOException ex) { - ex.printStackTrace(); + } catch (Exception ex) { + Exceptions.printStackTrace(ex); } } return null; diff --git a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/QueryExplorer.java b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/QueryExplorer.java index 538cebe4f7..b93801dadb 100644 --- a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/QueryExplorer.java +++ b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/QueryExplorer.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.filters.query; import java.beans.PropertyChangeEvent; @@ -60,7 +61,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.Lookup; /** - * * @author Mathieu Bastian */ public class QueryExplorer extends BeanTreeView implements PropertyChangeListener, ChangeListener { @@ -93,6 +93,7 @@ public void setup(final ExplorerManager manager, final FilterModel model, Filter model.addChangeListener(this); SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { manager.setRootContext(new RootNode(new QueryChildren(model.getQueries()))); } @@ -100,6 +101,7 @@ public void run() { } else { SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { manager.setRootContext(new AbstractNode(Children.LEAF) { @@ -119,6 +121,7 @@ public Action[] getActions(boolean context) { } } + @Override public void propertyChange(PropertyChangeEvent evt) { if (evt.getPropertyName().equals(ExplorerManager.PROP_SELECTED_NODES)) { if (uiModel == null) { @@ -144,6 +147,7 @@ public void propertyChange(PropertyChangeEvent evt) { final Query query = queryNode.getQuery(); new Thread(new Runnable() { + @Override public void run() { uiModel.setSelectedQuery(query); model.removeChangeListener(QueryExplorer.this); @@ -155,14 +159,17 @@ public void run() { } } + @Override public void stateChanged(ChangeEvent e) { //System.out.println("model updated"); SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { //uiModel.setSelectedQuery(model.getCurrentQuery()); saveExpandStatus(QueryExplorer.this.manager.getRootContext()); - QueryExplorer.this.manager.setRootContext(new RootNode(new QueryChildren(QueryExplorer.this.model.getQueries()))); + QueryExplorer.this.manager + .setRootContext(new RootNode(new QueryChildren(QueryExplorer.this.model.getQueries()))); loadExpandStatus(QueryExplorer.this.manager.getRootContext()); } }); @@ -171,6 +178,7 @@ public void run() { private void updateEnabled(final boolean enabled) { SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { setRootVisible(enabled); setEnabled(enabled); diff --git a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/QueryNode.java b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/QueryNode.java index bb3d1b873a..89eab10268 100644 --- a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/QueryNode.java +++ b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/QueryNode.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.filters.query; import java.awt.event.ActionEvent; @@ -48,6 +49,9 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.filters.api.FilterLibrary; import org.gephi.filters.api.FilterModel; import org.gephi.filters.api.Query; +import org.gephi.filters.spi.Filter; +import org.gephi.filters.spi.FilterBuilder; +import org.gephi.filters.spi.FilterProperty; import org.openide.DialogDisplayer; import org.openide.NotifyDescriptor; import org.openide.nodes.AbstractNode; @@ -55,18 +59,17 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class QueryNode extends AbstractNode { - private Query query; + private final Query query; public QueryNode(Query query) { super(new QueryChildren(query)); this.query = query; //setName(query.getName()); - setIconBaseWithExtension("org/gephi/desktop/filters/query/resources/query.png"); + setIconBaseWithExtension("DesktopFilters/query.svg"); } @Override @@ -115,7 +118,7 @@ public Transferable paste() throws IOException { @Override public Action[] getActions(boolean context) { //System.out.println("getActions " + context); - return new Action[]{new RemoveAction(), new RenameAction(), new SaveAction(), new DuplicateAction()}; + return new Action[] {new RemoveAction(), new RenameAction(), new SaveAction(), new DuplicateAction()}; } public Query getQuery() { @@ -128,6 +131,7 @@ public RemoveAction() { super(NbBundle.getMessage(QueryNode.class, "QueryNode.actions.remove")); } + @Override public void actionPerformed(ActionEvent e) { FilterController filterController = Lookup.getDefault().lookup(FilterController.class); if (query.getParent() == null) { @@ -144,11 +148,12 @@ public RenameAction() { super(NbBundle.getMessage(QueryNode.class, "QueryNode.actions.rename")); } + @Override public void actionPerformed(ActionEvent e) { FilterController filterController = Lookup.getDefault().lookup(FilterController.class); NotifyDescriptor.InputLine question = new NotifyDescriptor.InputLine( - NbBundle.getMessage(QueryNode.class, "QueryNode.actions.rename.text"), - NbBundle.getMessage(QueryNode.class, "QueryNode.actions.rename.title")); + NbBundle.getMessage(QueryNode.class, "QueryNode.actions.rename.text"), + NbBundle.getMessage(QueryNode.class, "QueryNode.actions.rename.title")); question.setInputText(query.getName()); if (DialogDisplayer.getDefault().notify(question) == NotifyDescriptor.OK_OPTION) { String input = question.getInputText(); @@ -165,6 +170,7 @@ public SaveAction() { super(NbBundle.getMessage(QueryNode.class, "QueryNode.actions.save")); } + @Override public void actionPerformed(ActionEvent e) { FilterController filterController = Lookup.getDefault().lookup(FilterController.class); FilterLibrary filterLibrary = filterController.getModel().getLibrary(); @@ -182,6 +188,7 @@ public DuplicateAction() { super(NbBundle.getMessage(QueryNode.class, "QueryNode.actions.duplicate")); } + @Override public void actionPerformed(ActionEvent e) { FilterController filterController = Lookup.getDefault().lookup(FilterController.class); Query ancestor = query; @@ -189,11 +196,24 @@ public void actionPerformed(ActionEvent e) { ancestor = ancestor.getParent(); } duplicateQuery(filterController, null, ancestor); - } private void duplicateQuery(FilterController filterController, Query parent, Query child) { - Query childQuery = filterController.createQuery(child.getFilter()); + Filter filter = child.getFilter(); + FilterBuilder builder = filterController.getModel().getLibrary().getBuilder(filter); + + Query childQuery = filterController.createQuery(builder); + childQuery.setName(child.getName()); + + Filter filterCopy = childQuery.getFilter(); + FilterProperty[] filterProperties = filter.getProperties(); + FilterProperty[] filterCopyProperties = filterCopy.getProperties(); + if (filterProperties != null && filterCopyProperties != null) { + for (int i = 0; i < filterProperties.length; i++) { + filterCopyProperties[i].setValue(filterProperties[i].getValue()); + } + } + if (parent == null) { filterController.add(childQuery); } else { diff --git a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/RootNode.java b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/RootNode.java index 3db311806c..d8219442ca 100644 --- a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/RootNode.java +++ b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/RootNode.java @@ -39,10 +39,10 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.filters.query; import java.awt.datatransfer.Transferable; -import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.dnd.DnDConstants; import java.io.IOException; import javax.swing.Action; @@ -55,12 +55,12 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.nodes.Children; import org.openide.nodes.Node; import org.openide.nodes.NodeTransfer; +import org.openide.util.Exceptions; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.datatransfer.PasteType; /** - * * @author Mathieu Bastian */ public class RootNode extends AbstractNode { @@ -68,7 +68,7 @@ public class RootNode extends AbstractNode { public RootNode(Children children) { super(children); setName(NbBundle.getMessage(RootNode.class, "RootNode.name")); - setIconBaseWithExtension("org/gephi/desktop/filters/query/resources/queries.png"); + setIconBaseWithExtension("DesktopFilters/queries.svg"); } @Override @@ -83,15 +83,13 @@ public PasteType getDropType(Transferable t, int action, int index) { @Override public Transferable paste() throws IOException { FilterController filterController = Lookup.getDefault().lookup(FilterController.class); - Query f = filterController.createQuery(fb.getFilter()); + Query f = filterController.createQuery(fb); filterController.add(f); return null; } }; - } catch (UnsupportedFlavorException ex) { - ex.printStackTrace(); - } catch (IOException ex) { - ex.printStackTrace(); + } catch (Exception ex) { + Exceptions.printStackTrace(ex); } } else if (dropNode != null && dropNode instanceof SavedQueryNode) { return new PasteType() { @@ -104,7 +102,8 @@ public Transferable paste() throws IOException { return null; } }; - } else if (dropNode != null && dropNode instanceof QueryNode && ((QueryNode) dropNode).getQuery().getParent() != null) { + } else if (dropNode != null && dropNode instanceof QueryNode && + ((QueryNode) dropNode).getQuery().getParent() != null) { return new PasteType() { @Override diff --git a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/SlotNode.java b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/SlotNode.java index e5b3f5fe36..e4e2b0123e 100644 --- a/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/SlotNode.java +++ b/modules/DesktopFilters/src/main/java/org/gephi/desktop/filters/query/SlotNode.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.filters.query; import java.awt.datatransfer.Transferable; @@ -61,17 +62,16 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.datatransfer.PasteType; /** - * * @author Mathieu Bastian */ public class SlotNode extends AbstractNode { - private Query parent; + private final Query parent; public SlotNode(Query parent) { super(Children.LEAF); this.parent = parent; - setIconBaseWithExtension("org/gephi/desktop/filters/query/resources/drop.png"); + setIconBaseWithExtension("DesktopFilters/drop.svg"); setShortDescription(NbBundle.getMessage(SlotNode.class, "SlotNode.description")); } @@ -110,7 +110,7 @@ public Transferable paste() throws IOException { try { FilterBuilder builder = (FilterBuilder) t.getTransferData(FilterBuilderNode.DATA_FLAVOR); FilterController filterController = Lookup.getDefault().lookup(FilterController.class); - Query query = filterController.createQuery(builder.getFilter()); + Query query = filterController.createQuery(builder); filterController.setSubQuery(parent, query); } catch (UnsupportedFlavorException ex) { Exceptions.printStackTrace(ex); diff --git a/modules/DesktopFilters/src/main/nbm/manifest.mf b/modules/DesktopFilters/src/main/nbm/manifest.mf index fde7e0a530..d0e67442e6 100644 --- a/modules/DesktopFilters/src/main/nbm/manifest.mf +++ b/modules/DesktopFilters/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/desktop/filters/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi UI +OpenIDE-Module-Name: Desktop Filters diff --git a/modules/DesktopFilters/src/main/nbm/module.xml b/modules/DesktopFilters/src/main/nbm/module.xml deleted file mode 100644 index df83b4edd5..0000000000 --- a/modules/DesktopFilters/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle.properties index 5a68843e41..be5da64f60 100644 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle.properties +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle.properties @@ -1,8 +1,6 @@ CTL_FiltersAction=Filters CTL_FiltersTopComponent=Filters !HINT_FiltersTopComponent= -OpenIDE-Module-Display-Category=Gephi UI -OpenIDE-Module-Name=Desktop Filters FiltersPanel.resetButton.text=Reset @@ -18,3 +16,5 @@ FiltersPanel.exportWorkspaceButton.text= FiltersPanel.exportColumn.input = Column title FiltersPanel.exportColumn.input.title = Export to Column FiltersPanel.exportLabelVisible.toolTipText=Hide nodes/edges labels if not in filtered graph +FiltersPanel.resetLabelVisible.toolTipText=Reset all nodes/edges labels to visible +FiltersPanel.stopButton.text=Stop diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_ar.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_ar.properties new file mode 100644 index 0000000000..a07b3f622b --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_ar.properties @@ -0,0 +1 @@ +CTL_FiltersAction=\u0627\u0644\u0641\u0644\u0627\u062A\u0631 diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_ca.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_ca.properties new file mode 100644 index 0000000000..7e5257083f --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_ca.properties @@ -0,0 +1,17 @@ +CTL_FiltersAction=Filtres +CTL_FiltersTopComponent=Filtres +!HINT_FiltersTopComponent= + +FiltersPanel.resetButton.text=Reinicia +FilterPanelPanel.settings=Configuraciσ +OpenIDE-Module-Short-Description=Integrate Filters UI +FiltersPanel.selectButton.text=Selecciona +FiltersPanel.filterButton.text=Filtra +FiltersPanel.exportColumnButton.toolTipText=Export filtered graph as a true/false data column +FiltersPanel.exportColumnButton.text= +FiltersPanel.exportWorkspaceButton.toolTipText=Exporta els grafs filtrats a un nou banc de treball +FiltersPanel.exportWorkspaceButton.text= +FiltersPanel.exportColumn.input=Tνtol de la columna +FiltersPanel.exportColumn.input.title=Exporta a la columna +FiltersPanel.exportLabelVisible.toolTipText=Hide nodes/edges labels if not in filtered graph +FiltersPanel.stopButton.text=Atura diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_cs.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_cs.properties index c51695cf6c..6083024ca4 100644 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_cs.properties +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_cs.properties @@ -1,31 +1,19 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-26 16\:01+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -CTL_FiltersAction=Filtry - -CTL_FiltersTopComponent=Filtry - -FiltersPanel.resetButton.text=Resetovat - -FilterPanelPanel.settings=Nastaven\u00ed - -OpenIDE-Module-Short-Description=Zav\u00e9st rozhran\u00ed filtr\u016f - -FiltersPanel.selectButton.text=Vybrat - -FiltersPanel.filterButton.text=Filtr - -FiltersPanel.exportColumnButton.toolTipText=Exportovat filtrovan\u00fd graf jako sloupec dat pravda/nepravda - -FiltersPanel.exportWorkspaceButton.toolTipText=Exportovat filtrovan\u00fd graf do nov\u00e9ho pracovn\u00edho prostoru - -FiltersPanel.exportColumn.input=N\u00e1zev sloupce - -FiltersPanel.exportColumn.input.title=Exportovat do sloupce - -FiltersPanel.exportLabelVisible.toolTipText=Skr\u00fdt \u0161t\u00edtky uzl\u016f/hran, pokud nejsou ve filtrovan\u00e9m grafu +CTL_FiltersAction=Filtry +CTL_FiltersTopComponent=Filtry +!HINT_FiltersTopComponent= + +FiltersPanel.resetButton.text=Resetovat + +FilterPanelPanel.settings = Nastavenν +OpenIDE-Module-Short-Description=Zavιst rozhranν filtr\u016f +FiltersPanel.selectButton.text=Vybrat +FiltersPanel.filterButton.text=Filtr +FiltersPanel.exportColumnButton.toolTipText=Exportovat filtrovanύ graf jako sloupec dat pravda/nepravda +FiltersPanel.exportColumnButton.text= +FiltersPanel.exportWorkspaceButton.toolTipText=Exportovat filtrovanύ graf do novιho pracovnνho prostoru +FiltersPanel.exportWorkspaceButton.text= + +FiltersPanel.exportColumn.input = Nαzev sloupce +FiltersPanel.exportColumn.input.title = Exportovat do sloupce +FiltersPanel.exportLabelVisible.toolTipText=Skrύt jmenovky uzl\u016f/hran, pokud nejsou ve filtrovanιm grafu +FiltersPanel.stopButton.text=Automaticky pou\u017eνt diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_de.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_de.properties new file mode 100644 index 0000000000..a149ef8911 --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_de.properties @@ -0,0 +1,19 @@ +CTL_FiltersAction=Filter +CTL_FiltersTopComponent=Filter +!HINT_FiltersTopComponent= + +FiltersPanel.resetButton.text=Zurόcksetzen + +FilterPanelPanel.settings = Einstellungen +OpenIDE-Module-Short-Description=Integriere Filter UI +FiltersPanel.selectButton.text=Auswδhlen +FiltersPanel.filterButton.text=Filter +FiltersPanel.exportColumnButton.toolTipText=Exportiere gefilterten Graph als wahr/falsch Datenspalte +FiltersPanel.exportColumnButton.text= +FiltersPanel.exportWorkspaceButton.toolTipText=Exportiere gefilterten Graph in neuen Arbeitsbereich +FiltersPanel.exportWorkspaceButton.text= + +FiltersPanel.exportColumn.input = Spaltentitel +FiltersPanel.exportColumn.input.title = Exportiere zu Spalte +FiltersPanel.exportLabelVisible.toolTipText=Verberge Knoten-/Kantenbeschriftungen wenn nicht im gefilterten Graph +FiltersPanel.stopButton.text=Stop diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_es.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_es.properties index abc7d9e6ed..b9ede1e420 100644 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_es.properties +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_es.properties @@ -1,31 +1,19 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:08+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -CTL_FiltersAction=Filtros - -CTL_FiltersTopComponent=Filtros - -FiltersPanel.resetButton.text=Restaurar - -FilterPanelPanel.settings=Configuraci\u00f3n - -OpenIDE-Module-Short-Description=Integrar la interfaz de usuario para los filtros - -FiltersPanel.selectButton.text=Seleccionar - -FiltersPanel.filterButton.text=Filtrar - -FiltersPanel.exportColumnButton.toolTipText=Exportar el grafo filtrado como columna con valores verdadero/falso - -FiltersPanel.exportWorkspaceButton.toolTipText=Exportar el grafo filtrado en un nuevo espacio de trabajo - -FiltersPanel.exportColumn.input=T\u00edtulo de la columna - -FiltersPanel.exportColumn.input.title=Exportar como columna - -FiltersPanel.exportLabelVisible.toolTipText=Esconder etiquetas de los nodos/aristas si no est\u00e1n en el grafo filtrado +CTL_FiltersAction=Filtros +CTL_FiltersTopComponent=Filtros +!HINT_FiltersTopComponent= + +FiltersPanel.resetButton.text=Restaurar + +FilterPanelPanel.settings = Configuraciσn +OpenIDE-Module-Short-Description=Integrar la interfaz de usuario para los filtros +FiltersPanel.selectButton.text=Seleccionar +FiltersPanel.filterButton.text=Filtrar +FiltersPanel.exportColumnButton.toolTipText=Exportar el grafo filtrado como columna con valores verdadero/falso +FiltersPanel.exportColumnButton.text= +FiltersPanel.exportWorkspaceButton.toolTipText=Exportar el grafo filtrado en un nuevo espacio de trabajo +FiltersPanel.exportWorkspaceButton.text= + +FiltersPanel.exportColumn.input = Tνtulo de la columna +FiltersPanel.exportColumn.input.title = Exportar como columna +FiltersPanel.exportLabelVisible.toolTipText=Esconder etiquetas de los nodos/aristas si no estαn en el grafo filtrado +FiltersPanel.stopButton.text=Auto aplicar diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_fr.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_fr.properties index e779781f01..b30d75e04d 100644 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_fr.properties +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_fr.properties @@ -1,31 +1,19 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:08+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -CTL_FiltersAction=Filtres - -CTL_FiltersTopComponent=Filtres - -FiltersPanel.resetButton.text=R\u00e9initialiser - -FilterPanelPanel.settings=Configuration - -OpenIDE-Module-Short-Description=Int\u00e8gre l'interface utilisateur des filtres - -FiltersPanel.selectButton.text=S\u00e9lectionner - -FiltersPanel.filterButton.text=Filtrer - -FiltersPanel.exportColumnButton.toolTipText=Exporter le graphe filtr\u00e9 en tant que colonne de donn\u00e9es vrai/faux - -FiltersPanel.exportWorkspaceButton.toolTipText=Exporter le graphe filtr\u00e9 dans un nouvel espace de travail - -FiltersPanel.exportColumn.input=Titre de colonne - -FiltersPanel.exportColumn.input.title=Exporter comme colonne - -FiltersPanel.exportLabelVisible.toolTipText=Masquer les labels des noeuds/liens hors du graphe filtr\u00e9 +CTL_FiltersAction=Filtres +CTL_FiltersTopComponent=Filtres +!HINT_FiltersTopComponent= + +FiltersPanel.resetButton.text=Rιinitialiser + +FilterPanelPanel.settings = Configuration +OpenIDE-Module-Short-Description=Intθgre l'interface utilisateur des filtres +FiltersPanel.selectButton.text=Sιlectionner +FiltersPanel.filterButton.text=Filtrer +FiltersPanel.exportColumnButton.toolTipText=Exporter le graphe filtrι en tant que colonne de donnιes vrai/faux +FiltersPanel.exportColumnButton.text= +FiltersPanel.exportWorkspaceButton.toolTipText=Exporter le graphe filtrι dans un nouvel espace de travail +FiltersPanel.exportWorkspaceButton.text= + +FiltersPanel.exportColumn.input = Titre de colonne +FiltersPanel.exportColumn.input.title = Exporter comme colonne +FiltersPanel.exportLabelVisible.toolTipText=Masquer les labels des noeuds/liens hors du graphe filtrι +FiltersPanel.stopButton.text=Exιcution auto diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_he.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_he.properties new file mode 100644 index 0000000000..5dcdf5cec9 --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_he.properties @@ -0,0 +1,17 @@ +CTL_FiltersAction=Filters +CTL_FiltersTopComponent=Filters +!HINT_FiltersTopComponent= + +FiltersPanel.resetButton.text=Reset +FilterPanelPanel.settings=Settings +OpenIDE-Module-Short-Description=Integrate Filters UI +FiltersPanel.selectButton.text=Select +FiltersPanel.filterButton.text=Filter +FiltersPanel.exportColumnButton.toolTipText=Export filtered graph as a true/false data column +FiltersPanel.exportColumnButton.text= +FiltersPanel.exportWorkspaceButton.toolTipText=Export filtered graph to a new workspace +FiltersPanel.exportWorkspaceButton.text= +FiltersPanel.exportColumn.input=Column title +FiltersPanel.exportColumn.input.title=Export to Column +FiltersPanel.exportLabelVisible.toolTipText=Hide nodes/edges labels if not in filtered graph +FiltersPanel.stopButton.text=Stop diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_hu.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_hu.properties new file mode 100644 index 0000000000..109615487f --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_hu.properties @@ -0,0 +1,15 @@ + + +FiltersPanel.exportWorkspaceButton.toolTipText=Sz\u0171rt grafikon export\u00E1l\u00E1sa \u00FAj munkater\u00FCletre +CTL_FiltersAction=Sz\u0171r\u0151k +FiltersPanel.stopButton.text=\u00C1llj +FiltersPanel.exportLabelVisible.toolTipText=A csom\u00F3pontok/\u00E9lek c\u00EDmk\u00E9inek elrejt\u00E9se, ha nem a sz\u0171rt grafikonon +CTL_FiltersTopComponent=Sz\u0171r\u0151k +FiltersPanel.exportColumn.input=Oszlop c\u00EDme +FiltersPanel.resetButton.text=Vissza\u00E1ll\u00EDt\u00E1s +FiltersPanel.exportColumn.input.title=Export\u00E1l\u00E1s oszlopba +FiltersPanel.exportColumnButton.toolTipText=A sz\u0171rt grafikon export\u00E1l\u00E1sa igaz/hamis adatoszlopk\u00E9nt +OpenIDE-Module-Short-Description=Integr\u00E1lja a sz\u0171r\u0151k felhaszn\u00E1l\u00F3i fel\u00FClet\u00E9t +FiltersPanel.selectButton.text=V\u00E1lasszon +FiltersPanel.filterButton.text=Sz\u0171r\u0151 +FilterPanelPanel.settings=Be\u00E1ll\u00EDt\u00E1sok diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_it.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_it.properties new file mode 100644 index 0000000000..4d559ec9c5 --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_it.properties @@ -0,0 +1,18 @@ +CTL_FiltersAction=Filters +CTL_FiltersTopComponent=Filters +!HINT_FiltersTopComponent= + +FiltersPanel.resetButton.text=Reset +FilterPanelPanel.settings=Impostazioni +OpenIDE-Module-Short-Description=Integrate Filters UI +FiltersPanel.selectButton.text=Select +FiltersPanel.filterButton.text=Filter +FiltersPanel.exportColumnButton.toolTipText=Export filtered graph as a true/false data column +FiltersPanel.exportColumnButton.text= +FiltersPanel.exportWorkspaceButton.toolTipText=Export filtered graph to a new workspace +FiltersPanel.exportWorkspaceButton.text= +FiltersPanel.exportColumn.input=Column title +FiltersPanel.exportColumn.input.title=Export to Column +FiltersPanel.exportLabelVisible.toolTipText=Hide nodes/edges labels if not in filtered graph +FiltersPanel.stopButton.text=Stop +FiltersPanel.resetLabelVisible.toolTipText=Reimposta tutte le etichette come visibili diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_ja.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_ja.properties index 9731981be8..9f9eccef8d 100644 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_ja.properties +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_ja.properties @@ -1,31 +1,19 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-04 05\:52+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -CTL_FiltersAction=\u30d5\u30a3\u30eb\u30bf - -CTL_FiltersTopComponent=\u30d5\u30a3\u30eb\u30bf - -FiltersPanel.resetButton.text=\u30ea\u30bb\u30c3\u30c8 - -FilterPanelPanel.settings=\u8a2d\u5b9a - -OpenIDE-Module-Short-Description=\u30d5\u30a3\u30eb\u30bf\u7d71\u5408UI - -FiltersPanel.selectButton.text=\u9078\u629e - -FiltersPanel.filterButton.text=\u30d5\u30a3\u30eb\u30bf - -FiltersPanel.exportColumnButton.toolTipText=\u771f/\u507d\u306e\u30c7\u30fc\u30bf\u5217\u3068\u3057\u3066\u30d5\u30a3\u30eb\u30bf\u30b0\u30e9\u30d5\u3092\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 - -FiltersPanel.exportWorkspaceButton.toolTipText=\u65b0\u898f\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306b\u30d5\u30a3\u30eb\u30bf\u30b0\u30e9\u30d5\u3092\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 - -FiltersPanel.exportColumn.input=\u5217\u30bf\u30a4\u30c8\u30eb - -FiltersPanel.exportColumn.input.title=\u5217\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 - -FiltersPanel.exportLabelVisible.toolTipText=\u30d5\u30a3\u30eb\u30bf\u30b0\u30e9\u30d5\u306e\u4e2d\u3067\u306a\u3051\u308c\u3070\u30ce\u30fc\u30c9/\u8fba\u306e\u30e9\u30d9\u30eb\u3092\u975e\u8868\u793a\u306b\u3059\u308b +CTL_FiltersAction=\u30d5\u30a3\u30eb\u30bf +CTL_FiltersTopComponent=\u30d5\u30a3\u30eb\u30bf +!HINT_FiltersTopComponent= + +FiltersPanel.resetButton.text=\u30ea\u30bb\u30c3\u30c8 + +FilterPanelPanel.settings = \u8a2d\u5b9a +OpenIDE-Module-Short-Description=\u30d5\u30a3\u30eb\u30bf\u7d71\u5408UI +FiltersPanel.selectButton.text=\u9078\u629e +FiltersPanel.filterButton.text=\u30d5\u30a3\u30eb\u30bf +FiltersPanel.exportColumnButton.toolTipText=\u771f/\u507d\u306e\u30c7\u30fc\u30bf\u5217\u3068\u3057\u3066\u30d5\u30a3\u30eb\u30bf\u30b0\u30e9\u30d5\u3092\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 +FiltersPanel.exportColumnButton.text= +FiltersPanel.exportWorkspaceButton.toolTipText=\u65b0\u898f\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306b\u30d5\u30a3\u30eb\u30bf\u30b0\u30e9\u30d5\u3092\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 +FiltersPanel.exportWorkspaceButton.text= + +FiltersPanel.exportColumn.input = \u5217\u30bf\u30a4\u30c8\u30eb +FiltersPanel.exportColumn.input.title = \u5217\u306b\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 +FiltersPanel.exportLabelVisible.toolTipText=\u30d5\u30a3\u30eb\u30bf\u30b0\u30e9\u30d5\u306e\u4e2d\u3067\u306a\u3051\u308c\u3070\u30ce\u30fc\u30c9/\u8fba\u306e\u30e9\u30d9\u30eb\u3092\u975e\u8868\u793a\u306b\u3059\u308b +FiltersPanel.stopButton.text=\u81ea\u52d5\u9069\u7528 diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_ko.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_ko.properties new file mode 100644 index 0000000000..22a927982a --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_ko.properties @@ -0,0 +1,15 @@ + + +FiltersPanel.exportWorkspaceButton.toolTipText=\uD544\uD130\uB9C1\uB41C \uADF8\uB798\uD504\uB97C \uC0C8 \uC791\uC5C5 \uC601\uC5ED\uC73C\uB85C \uB0B4\uBCF4\uB0B4\uAE30 +CTL_FiltersAction=\uD544\uD130 +FiltersPanel.stopButton.text=\uBA48\uCDA4 +FiltersPanel.exportLabelVisible.toolTipText=\uD544\uD130\uB9C1\uB41C \uADF8\uB798\uD504\uC5D0 \uC5C6\uC73C\uBA74 \uB178\uB4DC/\uC5E3\uC9C0 \uB77C\uBCA8\uC744 \uC228\uAE30\uAE30 +CTL_FiltersTopComponent=\uD544\uD130 +FiltersPanel.exportColumn.input=\uC5F4 \uC81C\uBAA9 +FiltersPanel.resetButton.text=\uCD08\uAE30\uD654 +FiltersPanel.exportColumn.input.title=\uC5F4\uB85C \uB0B4\uBCF4\uB0B4\uAE30 +FiltersPanel.exportColumnButton.toolTipText=\uD544\uD130\uB9C1\uB41C \uADF8\uB798\uD504\uB97C \uCC38/\uAC70\uC9D3 \uB370\uC774\uD130 \uC5F4\uB85C \uB0B4\uBCF4\uB0B4\uAE30 +OpenIDE-Module-Short-Description=\uD544\uD130 UI \uD1B5\uD569 +FiltersPanel.selectButton.text=\uC120\uD0DD +FiltersPanel.filterButton.text=\uD544\uD130 +FilterPanelPanel.settings=\uC124\uC815 diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_nl.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_nl.properties new file mode 100644 index 0000000000..227266e6b8 --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_nl.properties @@ -0,0 +1,17 @@ +CTL_FiltersAction=Filters +CTL_FiltersTopComponent=Filters +!HINT_FiltersTopComponent= + +FiltersPanel.resetButton.text=Reset +FilterPanelPanel.settings=Instellingen +OpenIDE-Module-Short-Description=Integrate Filters UI +FiltersPanel.selectButton.text=Selecteren +FiltersPanel.filterButton.text=Filter +FiltersPanel.exportColumnButton.toolTipText=Export filtered graph as a true/false data column +FiltersPanel.exportColumnButton.text= +FiltersPanel.exportWorkspaceButton.toolTipText=Gefilterde graaf naar een nieuwe werkruimte exporteren +FiltersPanel.exportWorkspaceButton.text= +FiltersPanel.exportColumn.input=Kolomtitel +FiltersPanel.exportColumn.input.title=Exporteren naar kolom +FiltersPanel.exportLabelVisible.toolTipText=Hide nodes/edges labels if not in filtered graph +FiltersPanel.stopButton.text=Stoppen diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_pt_BR.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_pt_BR.properties index 49d225262f..a7c0ab9361 100644 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_pt_BR.properties +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_pt_BR.properties @@ -1,31 +1,19 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 17\:52+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -CTL_FiltersAction=Filtros - -CTL_FiltersTopComponent=Filtros - -FiltersPanel.resetButton.text=Restaurar - -FilterPanelPanel.settings=Configura\u00e7\u00f5es - -OpenIDE-Module-Short-Description=Integrar interface de usu\u00e1rio de filtros - -FiltersPanel.selectButton.text=Selecionar - -FiltersPanel.filterButton.text=Filtrar - -FiltersPanel.exportColumnButton.toolTipText=Exportar o grafo filtrado como coluna com valores verdadeiro/falso - -FiltersPanel.exportWorkspaceButton.toolTipText=Exportar grafo filtrado para uma nova \u00c1rea de Trabalho - -FiltersPanel.exportColumn.input=T\u00edtulo da coluna - -FiltersPanel.exportColumn.input.title=Exportar para Coluna - -FiltersPanel.exportLabelVisible.toolTipText=Ocultar etiquetas dos n\u00f3s/arestas se n\u00e3o estiverem no grafo filtrado +CTL_FiltersAction=Filtros +CTL_FiltersTopComponent=Filtros +!HINT_FiltersTopComponent= + +FiltersPanel.resetButton.text=Restaurar + +FilterPanelPanel.settings = Configuraηυes +OpenIDE-Module-Short-Description=Integrar interface de usuαrio de filtros +FiltersPanel.selectButton.text=Selecionar +FiltersPanel.filterButton.text=Filtrar +FiltersPanel.exportColumnButton.toolTipText=Exportar o grafo filtrado como coluna com valores verdadeiro/falso +FiltersPanel.exportColumnButton.text= +FiltersPanel.exportWorkspaceButton.toolTipText=Exportar grafo filtrado para uma nova Αrea de Trabalho +FiltersPanel.exportWorkspaceButton.text= + +FiltersPanel.exportColumn.input = Tνtulo da coluna +FiltersPanel.exportColumn.input.title = Exportar para Coluna +FiltersPanel.exportLabelVisible.toolTipText=Ocultar etiquetas dos nσs/arestas se nγo estiverem no grafo filtrado +FiltersPanel.stopButton.text=Auto aplicar diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_ro.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_ro.properties new file mode 100644 index 0000000000..2295ca13e7 --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_ro.properties @@ -0,0 +1,15 @@ + + +CTL_FiltersAction=Filtre +CTL_FiltersTopComponent=Filtre +OpenIDE-Module-Short-Description=Integreaz\u0103 interfa\u021Ba filtrelor +FiltersPanel.selectButton.text=Selecteaz\u0103 +FiltersPanel.filterButton.text=Filtreaz\u0103 +FiltersPanel.resetButton.text=Reseteaz\u0103 +FilterPanelPanel.settings=Set\u0103ri +FiltersPanel.exportColumnButton.toolTipText=Export\u0103 graful filtrat ca o coloan\u0103 de date true/false +FiltersPanel.exportWorkspaceButton.toolTipText=Export\u0103 graful filtrat \u00EEntr-un spa\u021Biu de lucru nou +FiltersPanel.exportColumn.input=Titlul coloanei +FiltersPanel.exportColumn.input.title=Export\u0103 \u00EEn coloan\u0103 +FiltersPanel.exportLabelVisible.toolTipText=Ascunde etichetele nodurilor/muchiilor dac\u0103 nu apar \u00EEn graful filtrat +FiltersPanel.stopButton.text=Stop diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_ru.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_ru.properties index 21795185ea..565592efd5 100644 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_ru.properties +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_ru.properties @@ -1,31 +1,17 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-28 19\:01+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - CTL_FiltersAction=\u0424\u0438\u043b\u044c\u0442\u0440\u044b - CTL_FiltersTopComponent=\u0424\u0438\u043b\u044c\u0442\u0440\u044b +!HINT_FiltersTopComponent= FiltersPanel.resetButton.text=\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c - FilterPanelPanel.settings=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 - OpenIDE-Module-Short-Description=Integrate Filters UI - FiltersPanel.selectButton.text=\u0412\u044b\u0431\u0440\u0430\u0442\u044c - FiltersPanel.filterButton.text=\u041e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u0442\u044c - FiltersPanel.exportColumnButton.toolTipText=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u043a\u0430\u043a \u043a\u043e\u043b\u043e\u043d\u043a\u0443 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 true/false - +FiltersPanel.exportColumnButton.text= FiltersPanel.exportWorkspaceButton.toolTipText=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 \u043d\u0430 \u043d\u043e\u0432\u0443\u044e \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c - +FiltersPanel.exportWorkspaceButton.text= FiltersPanel.exportColumn.input=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u043a\u043e\u043b\u043e\u043d\u043a\u0438 - FiltersPanel.exportColumn.input.title=\u042d\u043a\u0441\u043f\u043e\u0440\u0442 \u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0443 - FiltersPanel.exportLabelVisible.toolTipText=\u0421\u043a\u0440\u044b\u0442\u044c \u0443\u0437\u043b\u044b \u0438 \u0440\u0451\u0431\u0440\u0430, \u043d\u0435 \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0435 \u043e\u0442\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c\u0443 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0443 +FiltersPanel.stopButton.text=\u0410\u0432\u0442\u043e-\u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_th.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_tr.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_tr.properties new file mode 100644 index 0000000000..5dcdf5cec9 --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_tr.properties @@ -0,0 +1,17 @@ +CTL_FiltersAction=Filters +CTL_FiltersTopComponent=Filters +!HINT_FiltersTopComponent= + +FiltersPanel.resetButton.text=Reset +FilterPanelPanel.settings=Settings +OpenIDE-Module-Short-Description=Integrate Filters UI +FiltersPanel.selectButton.text=Select +FiltersPanel.filterButton.text=Filter +FiltersPanel.exportColumnButton.toolTipText=Export filtered graph as a true/false data column +FiltersPanel.exportColumnButton.text= +FiltersPanel.exportWorkspaceButton.toolTipText=Export filtered graph to a new workspace +FiltersPanel.exportWorkspaceButton.text= +FiltersPanel.exportColumn.input=Column title +FiltersPanel.exportColumn.input.title=Export to Column +FiltersPanel.exportLabelVisible.toolTipText=Hide nodes/edges labels if not in filtered graph +FiltersPanel.stopButton.text=Stop diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_uk.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_uk.properties new file mode 100644 index 0000000000..0f22335913 --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_uk.properties @@ -0,0 +1,15 @@ +FilterPanelPanel.settings=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F +CTL_FiltersAction=\u0424\u0456\u043B\u044C\u0442\u0440\u0438 +CTL_FiltersTopComponent=\u0424\u0456\u043B\u044C\u0442\u0440\u0438 +FiltersPanel.filterButton.text=\u0424\u0456\u043B\u044C\u0442\u0440 +FiltersPanel.selectButton.text=\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044C +FiltersPanel.resetButton.text=\u0421\u043A\u0438\u043D\u0443\u0442\u0438 +OpenIDE-Module-Short-Description=\u0406\u043D\u0442\u0435\u0433\u0440\u0443\u0432\u0430\u0442\u0438 \u0456\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0444\u0456\u043B\u044C\u0442\u0440\u0456\u0432 +FiltersPanel.exportColumnButton.toolTipText=\u0415\u043A\u0441\u043F\u043E\u0440\u0442\u0443\u0432\u0430\u0442\u0438 \u0432\u0456\u0434\u0444\u0456\u043B\u044C\u0442\u0440\u043E\u0432\u0430\u043D\u0438\u0439 \u0433\u0440\u0430\u0444\u0456\u043A \u044F\u043A \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C \u0456\u0437 \u0434\u0430\u043D\u0438\u043C\u0438 true/false +FiltersPanel.exportColumnButton.text=\u0406 +FiltersPanel.exportWorkspaceButton.toolTipText=\u0415\u043A\u0441\u043F\u043E\u0440\u0442\u0443\u0439\u0442\u0435 \u0432\u0456\u0434\u0444\u0456\u043B\u044C\u0442\u0440\u043E\u0432\u0430\u043D\u0438\u0439 \u0433\u0440\u0430\u0444\u0456\u043A \u0434\u043E \u043D\u043E\u0432\u043E\u0457 \u0440\u043E\u0431\u043E\u0447\u043E\u0457 \u043E\u0431\u043B\u0430\u0441\u0442\u0456 +FiltersPanel.exportWorkspaceButton.text=\u0406 +FiltersPanel.exportColumn.input=\u041D\u0430\u0437\u0432\u0430 \u043A\u043E\u043B\u043E\u043D\u043A\u0438 +FiltersPanel.exportColumn.input.title=\u0415\u043A\u0441\u043F\u043E\u0440\u0442\u0443\u0432\u0430\u0442\u0438 \u0432 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C +FiltersPanel.exportLabelVisible.toolTipText=\u041F\u0440\u0438\u0445\u043E\u0432\u0430\u0442\u0438 \u043C\u0456\u0442\u043A\u0438 \u0432\u0443\u0437\u043B\u0456\u0432/\u043A\u0440\u0430\u0457\u0432, \u044F\u043A\u0449\u043E \u0432\u043E\u043D\u0438 \u043D\u0435 \u0432\u0456\u0434\u0444\u0456\u043B\u044C\u0442\u0440\u043E\u0432\u0430\u043D\u0456 \u043D\u0430 \u0433\u0440\u0430\u0444\u0456\u043A\u0443 +FiltersPanel.stopButton.text=\u0421\u0442\u043E\u043F diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_zh_CN.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_zh_CN.properties index 2d735813b2..409fd2dfb7 100644 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_zh_CN.properties +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_zh_CN.properties @@ -1,30 +1,19 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:16+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -CTL_FiltersAction=\u6ee4\u6ce2 - -CTL_FiltersTopComponent=\u6ee4\u6ce2 - -FiltersPanel.resetButton.text=\u91cd\u7f6e - -FilterPanelPanel.settings=\u8bbe\u7f6e - -OpenIDE-Module-Short-Description=\u96c6\u6210\u6ee4\u6ce2\u5668UI - -FiltersPanel.selectButton.text=\u9009\u62e9 - -FiltersPanel.filterButton.text=\u6ee4\u6ce2 - -FiltersPanel.exportColumnButton.toolTipText=\u8f93\u51fa\u6ee4\u6ce2\u56fe\u50cf\u4e3a\u4e00\u4e2a\u662f/\u5426\u6570\u636e\u5217 - -FiltersPanel.exportWorkspaceButton.toolTipText=\u8f93\u51fa\u6ee4\u6ce2\u56fe\u50cf\u5230\u4e00\u4e2a\u65b0\u7684\u5de5\u4f5c\u95f4 - -FiltersPanel.exportColumn.input=\u5217\u6807\u9898 - -FiltersPanel.exportColumn.input.title=\u8f93\u51fa\u5230\u5217 - -FiltersPanel.exportLabelVisible.toolTipText=\u9690\u85cf\u8282\u70b9/\u8fb9 +CTL_FiltersAction=\u8fc7\u6ee4 +CTL_FiltersTopComponent=\u8fc7\u6ee4 +!HINT_FiltersTopComponent= + +FiltersPanel.resetButton.text=\u91cd\u7f6e + +FilterPanelPanel.settings = \u8bbe\u7f6e +OpenIDE-Module-Short-Description=\u96c6\u6210\u6ee4\u6ce2\u5668UI +FiltersPanel.selectButton.text=\u9009\u62e9 +FiltersPanel.filterButton.text=\u8fc7\u6ee4 +FiltersPanel.exportColumnButton.toolTipText=\u8f93\u51fa\u8fc7\u6ee4\u56fe\u50cf\u4e3a\u4e00\u4e2a\u662f/\u5426\u6570\u636e\u5217 +FiltersPanel.exportColumnButton.text= +FiltersPanel.exportWorkspaceButton.toolTipText=\u8f93\u51fa\u8fc7\u6ee4\u56fe\u50cf\u5230\u4e00\u4e2a\u65b0\u7684\u5de5\u4f5c\u95f4 +FiltersPanel.exportWorkspaceButton.text= + +FiltersPanel.exportColumn.input = \u5217\u6807\u9898 +FiltersPanel.exportColumn.input.title = \u8f93\u51fa\u5230\u5217 +FiltersPanel.exportLabelVisible.toolTipText=\u9690\u85cf\u8282\u70b9/\u8fb9 +FiltersPanel.stopButton.text=\u81ea\u52a8\u5e94\u7528 diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_zh_TW.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_zh_TW.properties new file mode 100644 index 0000000000..0f3f10a423 --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/Bundle_zh_TW.properties @@ -0,0 +1,17 @@ +CTL_FiltersAction=Filters +CTL_FiltersTopComponent=Filters +!HINT_FiltersTopComponent= + +FiltersPanel.resetButton.text=Reset +FilterPanelPanel.settings=Settings +OpenIDE-Module-Short-Description=Integrate Filters UI +FiltersPanel.selectButton.text=Select +FiltersPanel.filterButton.text=Filter +FiltersPanel.exportColumnButton.toolTipText=Export filtered graph as a true/false data column +FiltersPanel.exportColumnButton.text= +FiltersPanel.exportWorkspaceButton.toolTipText=Export filtered graph to a new workspace +FiltersPanel.exportWorkspaceButton.text= +FiltersPanel.exportColumn.input=Column title +FiltersPanel.exportColumn.input.title=Export to Column +FiltersPanel.exportLabelVisible.toolTipText=Hide nodes/edges labels if not in filtered graph +FiltersPanel.stopButton.text=\u505c\u6b62 diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/cs.po b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/cs.po deleted file mode 100644 index ff3bb47e5a..0000000000 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/cs.po +++ /dev/null @@ -1,55 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-26 16:01+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "CTL_FiltersAction" -msgstr "Filtry" - -msgid "CTL_FiltersTopComponent" -msgstr "Filtry" - -msgid "FiltersPanel.resetButton.text" -msgstr "Resetovat" - -msgid "FilterPanelPanel.settings" -msgstr "NastavenΓ­" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ZavΓ©st rozhranΓ­ filtrΕ―" - -msgid "FiltersPanel.selectButton.text" -msgstr "Vybrat" - -msgid "FiltersPanel.filterButton.text" -msgstr "Filtr" - -msgid "FiltersPanel.exportColumnButton.toolTipText" -msgstr "Exportovat filtrovanΓ½ graf jako sloupec dat pravda/nepravda" - -msgid "FiltersPanel.exportWorkspaceButton.toolTipText" -msgstr "Exportovat filtrovanΓ½ graf do novΓ©ho pracovnΓ­ho prostoru" - -msgid "FiltersPanel.exportColumn.input" -msgstr "NΓ‘zev sloupce" - -msgid "FiltersPanel.exportColumn.input.title" -msgstr "Exportovat do sloupce" - -msgid "FiltersPanel.exportLabelVisible.toolTipText" -msgstr "SkrΓ½t Ε‘tΓ­tky uzlΕ―/hran, pokud nejsou ve filtrovanΓ©m grafu " diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/es.po b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/es.po deleted file mode 100644 index 761100d61a..0000000000 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/es.po +++ /dev/null @@ -1,55 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:08+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "CTL_FiltersAction" -msgstr "Filtros" - -msgid "CTL_FiltersTopComponent" -msgstr "Filtros" - -msgid "FiltersPanel.resetButton.text" -msgstr "Restaurar" - -msgid "FilterPanelPanel.settings" -msgstr "ConfiguraciΓ³n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Integrar la interfaz de usuario para los filtros" - -msgid "FiltersPanel.selectButton.text" -msgstr "Seleccionar" - -msgid "FiltersPanel.filterButton.text" -msgstr "Filtrar" - -msgid "FiltersPanel.exportColumnButton.toolTipText" -msgstr "Exportar el grafo filtrado como columna con valores verdadero/falso" - -msgid "FiltersPanel.exportWorkspaceButton.toolTipText" -msgstr "Exportar el grafo filtrado en un nuevo espacio de trabajo" - -msgid "FiltersPanel.exportColumn.input" -msgstr "TΓ­tulo de la columna" - -msgid "FiltersPanel.exportColumn.input.title" -msgstr "Exportar como columna" - -msgid "FiltersPanel.exportLabelVisible.toolTipText" -msgstr "Esconder etiquetas de los nodos/aristas si no estΓ‘n en el grafo filtrado" diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/fr.po b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/fr.po deleted file mode 100644 index 7037c8adf5..0000000000 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/fr.po +++ /dev/null @@ -1,55 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:08+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "CTL_FiltersAction" -msgstr "Filtres" - -msgid "CTL_FiltersTopComponent" -msgstr "Filtres" - -msgid "FiltersPanel.resetButton.text" -msgstr "RΓ©initialiser" - -msgid "FilterPanelPanel.settings" -msgstr "Configuration" - -msgid "OpenIDE-Module-Short-Description" -msgstr "IntΓ¨gre l'interface utilisateur des filtres" - -msgid "FiltersPanel.selectButton.text" -msgstr "SΓ©lectionner" - -msgid "FiltersPanel.filterButton.text" -msgstr "Filtrer" - -msgid "FiltersPanel.exportColumnButton.toolTipText" -msgstr "Exporter le graphe filtrΓ© en tant que colonne de donnΓ©es vrai/faux" - -msgid "FiltersPanel.exportWorkspaceButton.toolTipText" -msgstr "Exporter le graphe filtrΓ© dans un nouvel espace de travail" - -msgid "FiltersPanel.exportColumn.input" -msgstr "Titre de colonne" - -msgid "FiltersPanel.exportColumn.input.title" -msgstr "Exporter comme colonne" - -msgid "FiltersPanel.exportLabelVisible.toolTipText" -msgstr "Masquer les labels des noeuds/liens hors du graphe filtrΓ©" diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/ja.po b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/ja.po deleted file mode 100644 index a90726bbb9..0000000000 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/ja.po +++ /dev/null @@ -1,55 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-04 05:52+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "CTL_FiltersAction" -msgstr "フィルタ" - -msgid "CTL_FiltersTopComponent" -msgstr "フィルタ" - -msgid "FiltersPanel.resetButton.text" -msgstr "γƒͺγ‚»γƒƒγƒˆ" - -msgid "FilterPanelPanel.settings" -msgstr "θ¨­εš" - -msgid "OpenIDE-Module-Short-Description" -msgstr "γƒ•γ‚£γƒ«γ‚Ώη΅±εˆUI" - -msgid "FiltersPanel.selectButton.text" -msgstr "選択" - -msgid "FiltersPanel.filterButton.text" -msgstr "フィルタ" - -msgid "FiltersPanel.exportColumnButton.toolTipText" -msgstr "真/偽γγƒ‡γƒΌγ‚Ώεˆ—γ¨γ—γ¦γƒ•γ‚£γƒ«γ‚Ώγ‚°γƒ©γƒ•γ‚’γ‚¨γ‚―γ‚ΉγƒγƒΌγƒˆ" - -msgid "FiltersPanel.exportWorkspaceButton.toolTipText" -msgstr "ζ–°θ¦γƒ―γƒΌγ‚―γ‚ΉγƒšγƒΌγ‚Ήγ«γƒ•γ‚£γƒ«γ‚Ώγ‚°γƒ©γƒ•γ‚’γ‚¨γ‚―γ‚ΉγƒγƒΌγƒˆ" - -msgid "FiltersPanel.exportColumn.input" -msgstr "εˆ—γ‚Ώγ‚€γƒˆγƒ«" - -msgid "FiltersPanel.exportColumn.input.title" -msgstr "εˆ—γ«γ‚¨γ‚―γ‚ΉγƒγƒΌγƒˆ" - -msgid "FiltersPanel.exportLabelVisible.toolTipText" -msgstr "フィルタグラフγδΈ­γ§γͺγ‘γ‚Œγ°γƒŽγƒΌγƒ‰/θΎΊγγƒ©γƒ™γƒ«γ‚’ιžθ‘¨η€Ίγ«γ™γ‚‹" diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_ar.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_ca.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_ca.properties new file mode 100644 index 0000000000..05cd0cf2a0 --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_ca.properties @@ -0,0 +1,4 @@ +FiltersExplorer.UnsortedCategory=Unsorted +FiltersExplorer.Queries=Saved queries +RootNode.name=Biblioteca +SavedQueryNode.actions.remove=Elimina diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_cs.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_cs.properties index e94675603a..ab26f71b27 100644 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_cs.properties +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_cs.properties @@ -1,15 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-29 20\:00+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -FiltersExplorer.UnsortedCategory=Net\u0159\u00edd\u011bn\u00e9 - -FiltersExplorer.Queries=Ulo\u017een\u00e9 dotazy - -RootNode.name=Knihovna - -SavedQueryNode.actions.remove=Odstranit +FiltersExplorer.UnsortedCategory = Net\u0159νd\u011bnι +FiltersExplorer.Queries = Ulo\u017eenι dotazy + +RootNode.name = Knihovna +SavedQueryNode.actions.remove = Odstranit diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_de.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_de.properties new file mode 100644 index 0000000000..7550ab3bde --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_de.properties @@ -0,0 +1,5 @@ +FiltersExplorer.UnsortedCategory = Unsortiert +FiltersExplorer.Queries = Gespeicherte Abfragen + +RootNode.name = Bibliothek +SavedQueryNode.actions.remove = Entfernen diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_es.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_es.properties index c3632945ce..27b9c24077 100644 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_es.properties +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_es.properties @@ -1,15 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:08+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -FiltersExplorer.UnsortedCategory=No ordenada - -FiltersExplorer.Queries=Consultas guardadas - -RootNode.name=Biblioteca - -SavedQueryNode.actions.remove=Eliminar +FiltersExplorer.UnsortedCategory = No ordenada +FiltersExplorer.Queries = Consultas guardadas + +RootNode.name = Biblioteca +SavedQueryNode.actions.remove = Eliminar diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_fr.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_fr.properties index 51bda3b2e7..1b9f26bfa4 100644 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_fr.properties +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_fr.properties @@ -1,16 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 09\:21+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -FiltersExplorer.UnsortedCategory=Non tri\u00e9 - -FiltersExplorer.Queries=Requ\u00eates sauvegard\u00e9es - -RootNode.name=Biblioth\u00e8que - -SavedQueryNode.actions.remove=Supprimer +FiltersExplorer.UnsortedCategory = Non triι +FiltersExplorer.Queries = Requκtes sauvegardιes + +RootNode.name = Bibliothθque +SavedQueryNode.actions.remove = Supprimer diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_he.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_he.properties new file mode 100644 index 0000000000..a681f1e46b --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_he.properties @@ -0,0 +1,4 @@ +FiltersExplorer.UnsortedCategory=Unsorted +FiltersExplorer.Queries=Saved queries +RootNode.name=Library +SavedQueryNode.actions.remove=Remove diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_hu.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_hu.properties new file mode 100644 index 0000000000..caa918cb13 --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_hu.properties @@ -0,0 +1,6 @@ + + +RootNode.name=K\u00F6nyvt\u00E1r +SavedQueryNode.actions.remove=T\u00E1vol\u00EDtsa el +FiltersExplorer.Queries=Mentett lek\u00E9rdez\u00E9sek +FiltersExplorer.UnsortedCategory=Rendezetlen diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_it.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_it.properties new file mode 100644 index 0000000000..a5a805a3d1 --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_it.properties @@ -0,0 +1,5 @@ +FiltersExplorer.UnsortedCategory = Non ordinato +FiltersExplorer.Queries = Query salvate + +RootNode.name = Libreria +SavedQueryNode.actions.remove = Rimuovi diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_ja.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_ja.properties index aa08269803..969005c05e 100644 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_ja.properties +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_ja.properties @@ -1,15 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-19 07\:33+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -FiltersExplorer.UnsortedCategory=\u672a\u30bd\u30fc\u30c8 - -FiltersExplorer.Queries=\u4fdd\u5b58\u3055\u308c\u305f\u30af\u30a8\u30ea - -RootNode.name=\u30e9\u30a4\u30d6\u30e9\u30ea - -SavedQueryNode.actions.remove=\u524a\u9664 +FiltersExplorer.UnsortedCategory = \u672a\u30bd\u30fc\u30c8 +FiltersExplorer.Queries = \u4fdd\u5b58\u3055\u308c\u305f\u30af\u30a8\u30ea + +RootNode.name = \u30e9\u30a4\u30d6\u30e9\u30ea +SavedQueryNode.actions.remove = \u524a\u9664 diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_ko.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_ko.properties new file mode 100644 index 0000000000..a403a562fe --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_ko.properties @@ -0,0 +1,6 @@ + + +FiltersExplorer.UnsortedCategory=\uBD84\uB958\uB418\uC9C0 \uC54A\uC740 +FiltersExplorer.Queries=\uC800\uC7A5\uB41C \uC9C8\uC758\uC5B4 +RootNode.name=\uB77C\uC774\uBE0C\uB7EC\uB9AC +SavedQueryNode.actions.remove=\uC0AD\uC81C\uD558\uAE30 diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_nl.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_nl.properties new file mode 100644 index 0000000000..a681f1e46b --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_nl.properties @@ -0,0 +1,4 @@ +FiltersExplorer.UnsortedCategory=Unsorted +FiltersExplorer.Queries=Saved queries +RootNode.name=Library +SavedQueryNode.actions.remove=Remove diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_oc.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_oc.properties index 927cde1342..d1608727c9 100644 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_oc.properties +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_oc.properties @@ -1,12 +1,4 @@ -# Occitan (post 1500) translation for gephi -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the gephi package. -# FIRST AUTHOR , 2010. -# -!=Project-Id-Version\: gephi\nReport-Msgid-Bugs-To\: FULL NAME \nPOT-Creation-Date\: 2010-04-07 13\:16+0200\nPO-Revision-Date\: 2010-10-21 13\:36+0000\nLast-Translator\: C\u00e9dric VALMARY (Tot en \u00f2c) \nLanguage-Team\: Occitan (post 1500) \nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nX-Launchpad-Export-Date\: 2011-03-13 04\:46+0000\nX-Generator\: Launchpad (build 12559)\n - FiltersExplorer.UnsortedCategory=Pas triat - -FiltersExplorer.Queries=Requ\u00e8stas salvadas - -RootNode.name=Bibliot\u00e8ca +FiltersExplorer.Queries=Requθstas salvadas +RootNode.name=Bibliotθca +SavedQueryNode.actions.remove=Remove diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_pt_BR.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_pt_BR.properties index 50966ffa41..f0f5869f8f 100644 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_pt_BR.properties +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_pt_BR.properties @@ -1,15 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 18\:05+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -FiltersExplorer.UnsortedCategory=N\u00e3o ordenado - -FiltersExplorer.Queries=Consultas salvas - -RootNode.name=Biblioteca - -SavedQueryNode.actions.remove=Excluir +FiltersExplorer.UnsortedCategory = Nγo ordenado +FiltersExplorer.Queries = Consultas salvas + +RootNode.name = Biblioteca +SavedQueryNode.actions.remove = Excluir diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_ro.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_ro.properties new file mode 100644 index 0000000000..a22371e5b6 --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_ro.properties @@ -0,0 +1,6 @@ + + +FiltersExplorer.UnsortedCategory=Nesortate +FiltersExplorer.Queries=Interog\u0103ri salvate +RootNode.name=Bibliotec\u0103 +SavedQueryNode.actions.remove=Elimin\u0103 diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_ru.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_ru.properties index 8364e3da5a..4d1b4f8ea6 100644 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_ru.properties +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_ru.properties @@ -1,15 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-13 21\:47+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -FiltersExplorer.UnsortedCategory=\u041d\u0435\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 - -FiltersExplorer.Queries=\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b - -RootNode.name=\u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 - -SavedQueryNode.actions.remove=\u0423\u0434\u0430\u043b\u0438\u0442\u044c +FiltersExplorer.UnsortedCategory = \u041d\u0435\u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 +FiltersExplorer.Queries = \u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u044b + +RootNode.name = \u0411\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 +SavedQueryNode.actions.remove = \u0423\u0434\u0430\u043b\u0438\u0442\u044c diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_th.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_tr.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_tr.properties new file mode 100644 index 0000000000..a681f1e46b --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_tr.properties @@ -0,0 +1,4 @@ +FiltersExplorer.UnsortedCategory=Unsorted +FiltersExplorer.Queries=Saved queries +RootNode.name=Library +SavedQueryNode.actions.remove=Remove diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_zh_CN.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_zh_CN.properties index b58028717f..edf73367a3 100644 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_zh_CN.properties +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_zh_CN.properties @@ -1,14 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:17+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -FiltersExplorer.UnsortedCategory=\u672a\u6392\u5e8f\u7684 - -FiltersExplorer.Queries=\u4fdd\u5b58\u67e5\u8be2 - -RootNode.name=\u5e93 - -SavedQueryNode.actions.remove=\u5220\u9664 +FiltersExplorer.UnsortedCategory = \u672a\u6392\u5e8f\u7684 +FiltersExplorer.Queries = \u4fdd\u5b58\u67e5\u8be2 + +RootNode.name = \u5e93 +SavedQueryNode.actions.remove = \u5220\u9664 diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_zh_TW.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_zh_TW.properties new file mode 100644 index 0000000000..9259d6a1ae --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/Bundle_zh_TW.properties @@ -0,0 +1,5 @@ +FiltersExplorer.UnsortedCategory = \u672a\u6392\u5e8f +FiltersExplorer.Queries = \u5df2\u5132\u5b58\u6aa2\u7d22 + +RootNode.name = \u529f\u80fd\u5eab +SavedQueryNode.actions.remove = \u79fb\u9664 diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/cs.po b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/cs.po deleted file mode 100644 index 675c5ec890..0000000000 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/cs.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-29 20:00+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "FiltersExplorer.UnsortedCategory" -msgstr "NetΕ™Γ­dΔ›nΓ©" - -msgid "FiltersExplorer.Queries" -msgstr "UloΕΎenΓ© dotazy" - -msgid "RootNode.name" -msgstr "Knihovna" - -msgid "SavedQueryNode.actions.remove" -msgstr "Odstranit" diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/es.po b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/es.po deleted file mode 100644 index 5e5176bba5..0000000000 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/es.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:08+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "FiltersExplorer.UnsortedCategory" -msgstr "No ordenada" - -msgid "FiltersExplorer.Queries" -msgstr "Consultas guardadas" - -msgid "RootNode.name" -msgstr "Biblioteca" - -msgid "SavedQueryNode.actions.remove" -msgstr "Eliminar" diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/fr.po b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/fr.po deleted file mode 100644 index 1e9d9f405a..0000000000 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/fr.po +++ /dev/null @@ -1,32 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 09:21+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "FiltersExplorer.UnsortedCategory" -msgstr "Non triΓ©" - -msgid "FiltersExplorer.Queries" -msgstr "RequΓͺtes sauvegardΓ©es" - -msgid "RootNode.name" -msgstr "BibliothΓ¨que" - -msgid "SavedQueryNode.actions.remove" -msgstr "Supprimer" diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/ja.po b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/ja.po deleted file mode 100644 index effc57c3a8..0000000000 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/ja.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-19 07:33+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "FiltersExplorer.UnsortedCategory" -msgstr "ζœͺγ‚½γƒΌγƒˆ" - -msgid "FiltersExplorer.Queries" -msgstr "δΏε­˜γ•γ‚ŒγŸγ‚―γ‚¨γƒͺ" - -msgid "RootNode.name" -msgstr "ラむブラγƒͺ" - -msgid "SavedQueryNode.actions.remove" -msgstr "ε‰Šι™€" diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/org-gephi-desktop-filters-library.pot b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/org-gephi-desktop-filters-library.pot deleted file mode 100644 index 47acc954dd..0000000000 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/org-gephi-desktop-filters-library.pot +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "FiltersExplorer.UnsortedCategory" -msgstr "Unsorted" - -msgid "FiltersExplorer.Queries" -msgstr "Saved queries" - -msgid "RootNode.name" -msgstr "Library" - -msgid "SavedQueryNode.actions.remove" -msgstr "Remove" diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/pt_BR.po b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/pt_BR.po deleted file mode 100644 index b80fadcdae..0000000000 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/pt_BR.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 18:05+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "FiltersExplorer.UnsortedCategory" -msgstr "NΓ£o ordenado" - -msgid "FiltersExplorer.Queries" -msgstr "Consultas salvas" - -msgid "RootNode.name" -msgstr "Biblioteca" - -msgid "SavedQueryNode.actions.remove" -msgstr "Excluir" diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/resources/filter.png b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/resources/filter.png deleted file mode 100644 index 96e9e28f25..0000000000 Binary files a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/resources/filter.png and /dev/null differ diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/resources/folder.png b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/resources/folder.png deleted file mode 100644 index c7216917b7..0000000000 Binary files a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/resources/folder.png and /dev/null differ diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/resources/library.png b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/resources/library.png deleted file mode 100644 index 260b4157a8..0000000000 Binary files a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/resources/library.png and /dev/null differ diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/ru.po b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/ru.po deleted file mode 100644 index 1a3bf2e294..0000000000 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/ru.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-13 21:47+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "FiltersExplorer.UnsortedCategory" -msgstr "НСсортированноС" - -msgid "FiltersExplorer.Queries" -msgstr "Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½Π½Ρ‹Π΅ запросы" - -msgid "RootNode.name" -msgstr "Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°" - -msgid "SavedQueryNode.actions.remove" -msgstr "Π£Π΄Π°Π»ΠΈΡ‚ΡŒ" diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/zh_CN.po b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/zh_CN.po deleted file mode 100644 index 5cda4baa5b..0000000000 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/library/zh_CN.po +++ /dev/null @@ -1,30 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:17+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "FiltersExplorer.UnsortedCategory" -msgstr "ζœͺζŽ’εΊηš„" - -msgid "FiltersExplorer.Queries" -msgstr "保存ζŸ₯θ―’" - -msgid "RootNode.name" -msgstr "εΊ“" - -msgid "SavedQueryNode.actions.remove" -msgstr "εˆ ι™€" diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/org-gephi-desktop-filters.pot b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/org-gephi-desktop-filters.pot deleted file mode 100644 index 76c5854970..0000000000 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/org-gephi-desktop-filters.pot +++ /dev/null @@ -1,52 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "CTL_FiltersAction" -msgstr "Filters" - -msgid "CTL_FiltersTopComponent" -msgstr "Filters" - -msgid "FiltersPanel.resetButton.text" -msgstr "Reset" - -msgid "FilterPanelPanel.settings" -msgstr "Settings" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Integrate Filters UI" - -msgid "FiltersPanel.selectButton.text" -msgstr "Select" - -msgid "FiltersPanel.filterButton.text" -msgstr "Filter" - -msgid "FiltersPanel.exportColumnButton.toolTipText" -msgstr "Export filtered graph as a true/false data column" - -msgid "FiltersPanel.exportWorkspaceButton.toolTipText" -msgstr "Export filtered graph to a new workspace" - -msgid "FiltersPanel.exportColumn.input" -msgstr "Column title" - -msgid "FiltersPanel.exportColumn.input.title" -msgstr "Export to Column" - -msgid "FiltersPanel.exportLabelVisible.toolTipText" -msgstr "Hide nodes/edges labels if not in filtered graph" diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/pt_BR.po b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/pt_BR.po deleted file mode 100644 index e507970776..0000000000 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/pt_BR.po +++ /dev/null @@ -1,55 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 17:52+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "CTL_FiltersAction" -msgstr "Filtros" - -msgid "CTL_FiltersTopComponent" -msgstr "Filtros" - -msgid "FiltersPanel.resetButton.text" -msgstr "Restaurar" - -msgid "FilterPanelPanel.settings" -msgstr "ConfiguraΓ§Γ΅es" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Integrar interface de usuΓ‘rio de filtros" - -msgid "FiltersPanel.selectButton.text" -msgstr "Selecionar" - -msgid "FiltersPanel.filterButton.text" -msgstr "Filtrar" - -msgid "FiltersPanel.exportColumnButton.toolTipText" -msgstr "Exportar o grafo filtrado como coluna com valores verdadeiro/falso" - -msgid "FiltersPanel.exportWorkspaceButton.toolTipText" -msgstr "Exportar grafo filtrado para uma nova Área de Trabalho" - -msgid "FiltersPanel.exportColumn.input" -msgstr "TΓ­tulo da coluna" - -msgid "FiltersPanel.exportColumn.input.title" -msgstr "Exportar para Coluna" - -msgid "FiltersPanel.exportLabelVisible.toolTipText" -msgstr "Ocultar etiquetas dos nΓ³s/arestas se nΓ£o estiverem no grafo filtrado" diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_ar.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_ca.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_ca.properties new file mode 100644 index 0000000000..204beb5db4 --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_ca.properties @@ -0,0 +1,11 @@ +QueryNode.actions.rename=Reanomena +QueryNode.actions.rename.text=Reanomena la consulta +QueryNode.actions.rename.title=Reanomena +QueryNode.actions.remove=Elimina +QueryNode.actions.save=Desa +QueryNode.actions.duplicate=Duplica +RootNode.name=Consultes +SlotNode.name=Drag subfilter here +SlotNode.description=Subfilters are executed before their parent node +HelpNode.name=Drag filter here +ParametersNode.name=Parΰmetres diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_cs.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_cs.properties index dde8774326..9964ada5a7 100644 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_cs.properties +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_cs.properties @@ -1,29 +1,12 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-26 16\:04+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -QueryNode.actions.rename=P\u0159ejmenovat - -QueryNode.actions.rename.text=P\u0159ejmenovat dotaz - -QueryNode.actions.rename.title=P\u0159ejmenovat - -QueryNode.actions.remove=Odstranit - -QueryNode.actions.save=Ulo\u017eit - -QueryNode.actions.duplicate=Kop\u00edrovat - -RootNode.name=Dotazy - -SlotNode.name=Zde p\u0159et\u00e1hn\u011bte podfiltr - -SlotNode.description=Podfiltry jsou spu\u0161t\u011bny p\u0159ed jejich nad\u0159azen\u00fdm uzlem - -HelpNode.name=Zde p\u0159et\u00e1hn\u011bte filtr - -ParametersNode.name=Parametry +QueryNode.actions.rename = P\u0159ejmenovat +QueryNode.actions.rename.text = P\u0159ejmenovat dotaz +QueryNode.actions.rename.title = P\u0159ejmenovat +QueryNode.actions.remove = Odstranit +QueryNode.actions.save = Ulo\u017eit +QueryNode.actions.duplicate = Kopνrovat + +RootNode.name = Dotazy +SlotNode.name = Zde p\u0159etαhn\u011bte podfiltr +SlotNode.description = Podfiltry jsou spu\u0161t\u011bny p\u0159ed jejich nad\u0159azenύm uzlem +HelpNode.name = Zde p\u0159etαhn\u011bte filtr +ParametersNode.name = Parametry diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_de.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_de.properties new file mode 100644 index 0000000000..9d6dbbeddb --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_de.properties @@ -0,0 +1,12 @@ +QueryNode.actions.rename = Umbenennen +QueryNode.actions.rename.text = Abfrage umbenennen +QueryNode.actions.rename.title = Umbenennen +QueryNode.actions.remove = Entfernen +QueryNode.actions.save = Speichern +QueryNode.actions.duplicate = Duplizieren + +RootNode.name = Abfragen +SlotNode.name = Unterfilter hierhin ziehen +SlotNode.description = Unterfilter werden vor ihrem Elternknoten ausgefόhrt +HelpNode.name = Filter hierher ziehen +ParametersNode.name = Parameter diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_es.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_es.properties index 26ef738d0d..085aa67aac 100644 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_es.properties +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_es.properties @@ -1,30 +1,12 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-07 11\:31+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -QueryNode.actions.rename=Renombrar - -QueryNode.actions.rename.text=Renombrar consulta - -QueryNode.actions.rename.title=Renombrar - -QueryNode.actions.remove=Suprimir - -QueryNode.actions.save=Guardar - -QueryNode.actions.duplicate=Duplicar - -RootNode.name=Consultas - -SlotNode.name=Arrastrar subfiltro aqu\u00ed - -SlotNode.description=Los subfiltros son ejecutados antes que su nodo padre - -HelpNode.name=Arrastrar filtro aqu\u00ed - -ParametersNode.name=Par\u00e1metros +QueryNode.actions.rename = Renombrar +QueryNode.actions.rename.text = Renombrar consulta +QueryNode.actions.rename.title = Renombrar +QueryNode.actions.remove = Suprimir +QueryNode.actions.save = Guardar +QueryNode.actions.duplicate = Duplicar + +RootNode.name = Consultas +SlotNode.name = Arrastrar subfiltro aquν +SlotNode.description = Los subfiltros son ejecutados antes que su nodo padre +HelpNode.name = Arrastrar filtro aquν +ParametersNode.name = Parαmetros diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_fr.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_fr.properties index c6359d9674..93d622be5b 100644 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_fr.properties +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_fr.properties @@ -1,30 +1,12 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-07 11\:17+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -QueryNode.actions.rename=Renommer - -QueryNode.actions.rename.text=Renommer la requ\u00eate - -QueryNode.actions.rename.title=Renommer - -QueryNode.actions.remove=Supprimer - -QueryNode.actions.save=Sauvegarder - -QueryNode.actions.duplicate=Dupliquer - -RootNode.name=Requ\u00eates - -SlotNode.name=Glissez le sous-filtre ici - -SlotNode.description=SlotNode.description - -HelpNode.name=Glissez le filtre ici - -ParametersNode.name=Param\u00e8tres +QueryNode.actions.rename = Renommer +QueryNode.actions.rename.text = Renommer la requκte +QueryNode.actions.rename.title = Renommer +QueryNode.actions.remove = Supprimer +QueryNode.actions.save = Sauvegarder +QueryNode.actions.duplicate = Dupliquer + +RootNode.name = Requκtes +SlotNode.name = Glissez le sous-filtre ici +SlotNode.description = SlotNode.description +HelpNode.name = Glissez le filtre ici +ParametersNode.name = Paramθtres diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_he.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_he.properties new file mode 100644 index 0000000000..bc7e586c37 --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_he.properties @@ -0,0 +1,11 @@ +QueryNode.actions.rename=\u05e9\u05e0\u05d4 \u05e9\u05dd +QueryNode.actions.rename.text=Rename query +QueryNode.actions.rename.title=\u05e9\u05e0\u05d4 \u05e9\u05dd +QueryNode.actions.remove=Remove +QueryNode.actions.save=\u05e9\u05de\u05d5\u05e8 +QueryNode.actions.duplicate=\u05e9\u05db\u05e4\u05dc +RootNode.name=Queries +SlotNode.name=Drag subfilter here +SlotNode.description=Subfilters are executed before their parent node +HelpNode.name=Drag filter here +ParametersNode.name=Parameters diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_hu.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_hu.properties new file mode 100644 index 0000000000..7ff30711ce --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_hu.properties @@ -0,0 +1,13 @@ + + +SlotNode.name=H\u00FAzza ide az alsz\u0171r\u0151t +QueryNode.actions.rename.text=Lek\u00E9rdez\u00E9s \u00E1tnevez\u00E9se +HelpNode.name=H\u00FAzza ide a sz\u0171r\u0151t +QueryNode.actions.rename.title=\u00C1tnevez\u00E9s +QueryNode.actions.duplicate=M\u00E1solat +RootNode.name=Lek\u00E9rdez\u00E9s +ParametersNode.name=Param\u00E9terek +QueryNode.actions.remove=T\u00E1vol\u00EDtsa el +QueryNode.actions.rename=\u00C1tnevez\u00E9s +QueryNode.actions.save=Ment\u00E9s +SlotNode.description=Az alsz\u0171r\u0151k a sz\u00FCl\u0151csom\u00F3pontjuk el\u0151tt ker\u00FClnek v\u00E9grehajt\u00E1sra diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_it.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_it.properties new file mode 100644 index 0000000000..b2111dbe99 --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_it.properties @@ -0,0 +1,12 @@ +QueryNode.actions.rename = Rinomina +QueryNode.actions.rename.text = Rinomina query +QueryNode.actions.rename.title = Rinomina +QueryNode.actions.remove = Rimuovi +QueryNode.actions.save = Salva +QueryNode.actions.duplicate = Duplica + +RootNode.name = Query +SlotNode.name = Trascina un sotto filtro qui +SlotNode.description = I sotto filtri vengono eseguiti prima del loro nodo padre +HelpNode.name = Trascina un filtro qui +ParametersNode.name = Parametri diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_ja.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_ja.properties index f1e6fecb9c..1bf26d18b8 100644 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_ja.properties +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_ja.properties @@ -1,29 +1,12 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-01 16\:32+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -QueryNode.actions.rename=\u540d\u524d\u3092\u5909\u66f4 - -QueryNode.actions.rename.text=\u30af\u30a8\u30ea\u30fc\u540d\u3092\u5909\u66f4 - -QueryNode.actions.rename.title=\u540d\u524d\u3092\u5909\u66f4 - -QueryNode.actions.remove=\u6d88\u53bb - -QueryNode.actions.save=\u4fdd\u5b58 - -QueryNode.actions.duplicate=\u8907\u5199 - -RootNode.name=\u30af\u30a8\u30ea\u30fc - -SlotNode.name=\u3053\u3053\u306b\u30b5\u30d6\u30d5\u30a3\u30eb\u30bf\u3092\u30c9\u30e9\u30c3\u30b0 - -SlotNode.description=\u30b5\u30d6\u30d5\u30a3\u30eb\u30bf\u306f\u89aa\u30ce\u30fc\u30c9\u306e\u524d\u306b\u5b9f\u884c\u3055\u308c\u307e\u3059 - -HelpNode.name=\u3053\u3053\u306b\u30d5\u30a3\u30eb\u30bf\u3092\u30c9\u30e9\u30c3\u30b0 - -ParametersNode.name=\u30d1\u30e9\u30e1\u30fc\u30bf +QueryNode.actions.rename = \u540d\u524d\u3092\u5909\u66f4 +QueryNode.actions.rename.text = \u30af\u30a8\u30ea\u30fc\u540d\u3092\u5909\u66f4 +QueryNode.actions.rename.title = \u540d\u524d\u3092\u5909\u66f4 +QueryNode.actions.remove = \u6d88\u53bb +QueryNode.actions.save = \u4fdd\u5b58 +QueryNode.actions.duplicate = \u8907\u5199 + +RootNode.name = \u30af\u30a8\u30ea\u30fc +SlotNode.name = \u3053\u3053\u306b\u30b5\u30d6\u30d5\u30a3\u30eb\u30bf\u3092\u30c9\u30e9\u30c3\u30b0 +SlotNode.description = \u30b5\u30d6\u30d5\u30a3\u30eb\u30bf\u306f\u89aa\u30ce\u30fc\u30c9\u306e\u524d\u306b\u5b9f\u884c\u3055\u308c\u307e\u3059 +HelpNode.name = \u3053\u3053\u306b\u30d5\u30a3\u30eb\u30bf\u3092\u30c9\u30e9\u30c3\u30b0 +ParametersNode.name = \u30d1\u30e9\u30e1\u30fc\u30bf diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_ko.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_ko.properties new file mode 100644 index 0000000000..5617c2f1b4 --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_ko.properties @@ -0,0 +1,13 @@ + + +QueryNode.actions.rename=\uC774\uB984 \uBCC0\uACBD\uD558\uAE30 +QueryNode.actions.rename.text=\uC9C8\uC758\uC5B4 \uBCC0\uACBD\uD558\uAE30 +QueryNode.actions.rename.title=\uC774\uB984 \uBCC0\uACBD\uD558\uAE30 +QueryNode.actions.remove=\uC0AD\uC81C\uD558\uAE30 +QueryNode.actions.save=\uC800\uC7A5\uD558\uAE30 +QueryNode.actions.duplicate=\uBCF5\uC81C\uD558\uAE30 +RootNode.name=\uC9C8\uC758\uC5B4 +SlotNode.name=\uC774\uACF3\uC73C\uB85C \uC11C\uBE0C \uD544\uD130\uB97C \uB4DC\uB798\uADF8\uD558\uC138\uC694. +SlotNode.description=\uC11C\uBE0C \uD544\uD130\uAC00 \uBD80\uBAA8 \uB178\uB4DC\uBCF4\uB2E4 \uC55E\uC11C \uC2E4\uD589\uB410\uC2B5\uB2C8\uB2E4 +HelpNode.name=\uC774\uACF3\uC73C\uB85C \uD544\uD130\uB97C \uB4DC\uB798\uADF8\uD558\uC138\uC694. +ParametersNode.name=\uB9E4\uAC1C\uBCC0\uC218 diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_nl.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_nl.properties new file mode 100644 index 0000000000..dc45d14457 --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_nl.properties @@ -0,0 +1,11 @@ +QueryNode.actions.rename=Rename +QueryNode.actions.rename.text=Rename query +QueryNode.actions.rename.title=Rename +QueryNode.actions.remove=Verwijderen +QueryNode.actions.save=Opslaan +QueryNode.actions.duplicate=Dupliceren +RootNode.name=Queries +SlotNode.name=Drag subfilter here +SlotNode.description=Subfilters are executed before their parent node +HelpNode.name=Drag filter here +ParametersNode.name=Parameters diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_pt_BR.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_pt_BR.properties index ec387426f5..838883af78 100644 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_pt_BR.properties +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_pt_BR.properties @@ -1,29 +1,12 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 17\:53+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -QueryNode.actions.rename=Renomear - -QueryNode.actions.rename.text=Renomear consulta - -QueryNode.actions.rename.title=Renomear - -QueryNode.actions.remove=Excluir - -QueryNode.actions.save=Salvar - -QueryNode.actions.duplicate=Duplicado - -RootNode.name=Consultas - -SlotNode.name= Arraste o subfiltro aqui - -SlotNode.description=Subfiltros s\u00e3o executados antes de seu n\u00f3 pai - -HelpNode.name= Arraste o filtro aqui - -ParametersNode.name=Par\u00e2metros +QueryNode.actions.rename = Renomear +QueryNode.actions.rename.text = Renomear consulta +QueryNode.actions.rename.title = Renomear +QueryNode.actions.remove = Excluir +QueryNode.actions.save = Salvar +QueryNode.actions.duplicate = Duplicado + +RootNode.name = Consultas +SlotNode.name = Arraste o subfiltro aqui +SlotNode.description = Subfiltros sγo executados antes de seu nσ pai +HelpNode.name = Arraste o filtro aqui +ParametersNode.name = Parβmetros diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_ro.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_ro.properties new file mode 100644 index 0000000000..2d56bc7039 --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_ro.properties @@ -0,0 +1,13 @@ + + +QueryNode.actions.rename.title=Redenume\u0219te +QueryNode.actions.rename=Redenume\u0219te +QueryNode.actions.remove=Elimin\u0103 +QueryNode.actions.save=Salveaz\u0103 +RootNode.name=Interog\u0103ri +SlotNode.name=Trage subfiltrul aici +SlotNode.description=Subfiltrele sunt executate \u00EEnaintea nodului lor p\u0103rinte +HelpNode.name=Trage filtrul aici +ParametersNode.name=Parametri +QueryNode.actions.rename.text=Redenume\u0219te interogarea +QueryNode.actions.duplicate=Duplic\u0103 diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_ru.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_ru.properties index 9454da12f2..670910e142 100644 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_ru.properties +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_ru.properties @@ -1,29 +1,12 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-28 19\:09+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -QueryNode.actions.rename=\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c - -QueryNode.actions.rename.text=\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 - -QueryNode.actions.rename.title=\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c - -QueryNode.actions.remove=\u0423\u0434\u0430\u043b\u0438\u0442\u044c - -QueryNode.actions.save=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c - -QueryNode.actions.duplicate=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043f\u0438\u044e - -RootNode.name=\u041d\u0430\u0431\u043e\u0440\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 - -SlotNode.name=\u041f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u043f\u043e\u0434\u0444\u0438\u043b\u044c\u0442\u0440 \u0441\u044e\u0434\u0430 - -SlotNode.description=\u041f\u043e\u0434\u0444\u0438\u043b\u044c\u0442\u0440\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 - -HelpNode.name=\u041f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0444\u0438\u043b\u044c\u0442\u0440 \u0441\u044e\u0434\u0430 - -ParametersNode.name=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b +QueryNode.actions.rename = \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c +QueryNode.actions.rename.text = \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 +QueryNode.actions.rename.title = \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c +QueryNode.actions.remove = \u0423\u0434\u0430\u043b\u0438\u0442\u044c +QueryNode.actions.save = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c +QueryNode.actions.duplicate = \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043f\u0438\u044e + +RootNode.name = \u041d\u0430\u0431\u043e\u0440\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 +SlotNode.name = \u041f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u043f\u043e\u0434\u0444\u0438\u043b\u044c\u0442\u0440 \u0441\u044e\u0434\u0430 +SlotNode.description = \u041f\u043e\u0434\u0444\u0438\u043b\u044c\u0442\u0440\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e\u0442\u0441\u044f \u0434\u043e \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 +HelpNode.name = \u041f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u0435 \u0444\u0438\u043b\u044c\u0442\u0440 \u0441\u044e\u0434\u0430 +ParametersNode.name = \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_th.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_tr.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_tr.properties new file mode 100644 index 0000000000..715df090d3 --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_tr.properties @@ -0,0 +1,11 @@ +QueryNode.actions.rename=Yeniden Adland\u0131r +QueryNode.actions.rename.text=Rename query +QueryNode.actions.rename.title=Yeniden Adland\u0131r +QueryNode.actions.remove=Remove +QueryNode.actions.save=Kaydet +QueryNode.actions.duplicate=Suretini Η\u0131kar +RootNode.name=Queries +SlotNode.name=Drag subfilter here +SlotNode.description=Subfilters are executed before their parent node +HelpNode.name=Drag filter here +ParametersNode.name=Parameters diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_uk.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_uk.properties new file mode 100644 index 0000000000..6e2b6376ae --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_uk.properties @@ -0,0 +1,11 @@ +HelpNode.name=\u041F\u0435\u0440\u0435\u0442\u044F\u0433\u043D\u0456\u0442\u044C \u0444\u0456\u043B\u044C\u0442\u0440 \u0441\u044E\u0434\u0438 +QueryNode.actions.rename=\u041F\u0435\u0440\u0435\u0439\u043C\u0435\u043D\u0443\u0432\u0430\u0442\u0438 +QueryNode.actions.rename.title=\u041F\u0435\u0440\u0435\u0439\u043C\u0435\u043D\u0443\u0432\u0430\u0442\u0438 +QueryNode.actions.rename.text=\u041F\u0435\u0440\u0435\u0439\u043C\u0435\u043D\u0443\u0432\u0430\u0442\u0438 \u0437\u0430\u043F\u0438\u0442 +SlotNode.name=\u041F\u0435\u0440\u0435\u0442\u044F\u0433\u043D\u0456\u0442\u044C \u043F\u0456\u0434\u0444\u0456\u043B\u044C\u0442\u0440 \u0441\u044E\u0434\u0438 +QueryNode.actions.remove=\u0412\u0438\u043B\u0443\u0447\u0438\u0442\u0438 +QueryNode.actions.save=\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 +QueryNode.actions.duplicate=\u0414\u0443\u0431\u043B\u044E\u0432\u0430\u0442\u0438 +RootNode.name=\u0417\u0430\u043F\u0438\u0442\u0438 +SlotNode.description=\u041F\u0456\u0434\u0444\u0456\u043B\u044C\u0442\u0440\u0438 \u0432\u0438\u043A\u043E\u043D\u0443\u044E\u0442\u044C\u0441\u044F \u043F\u0435\u0440\u0435\u0434 \u0457\u0445\u043D\u0456\u043C \u0431\u0430\u0442\u044C\u043A\u0456\u0432\u0441\u044C\u043A\u0438\u043C \u0432\u0443\u0437\u043B\u043E\u043C +ParametersNode.name=\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0438 diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_zh_CN.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_zh_CN.properties index e54d2d3d94..10d2d49974 100644 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_zh_CN.properties +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_zh_CN.properties @@ -1,28 +1,11 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:17+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - QueryNode.actions.rename=\u91cd\u547d\u540d - QueryNode.actions.rename.text=\u91cd\u547d\u540d\u67e5\u8be2 - QueryNode.actions.rename.title=\u91cd\u547d\u540d - QueryNode.actions.remove=\u79fb\u9664 - QueryNode.actions.save=\u4fdd\u5b58 - QueryNode.actions.duplicate=\u590d\u5236 - RootNode.name=\u67e5\u8be2 - -SlotNode.name=\u5728\u8fd9\u91cc\u62d6\u5b50\u6ee4\u6ce2\u5668 - +SlotNode.name=\u5C06\u5B50\u7B5B\u9009\u5668\u62D6\u52A8\u5230\u6B64\u5904 SlotNode.description=\u5728\u6bcd\u8282\u70b9\u524d\u6267\u884c\u5b50\u6ee4\u6ce2\u5668 - -HelpNode.name=\u5728\u8fd9\u91cc\u62d6\u5b50\u6ee4\u6ce2\u5668 - +HelpNode.name=\u5C06\u5B50\u6EE4\u6CE2\u5668\u62D6\u52A8\u5230\u6B64\u5904 ParametersNode.name=\u53c2\u6570 diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_zh_TW.properties b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_zh_TW.properties new file mode 100644 index 0000000000..bd8fa5abb1 --- /dev/null +++ b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/Bundle_zh_TW.properties @@ -0,0 +1,12 @@ +QueryNode.actions.rename = \u91cd\u65b0\u547d\u540d +QueryNode.actions.rename.text = \u91cd\u65b0\u547d\u540d\u6aa2\u7d22 +QueryNode.actions.rename.title = \u91cd\u65b0\u547d\u540d +QueryNode.actions.remove = \u79fb\u9664 +QueryNode.actions.save = \u5132\u5b58 +QueryNode.actions.duplicate = \u8907\u88fd + +RootNode.name = \u6aa2\u7d22 +SlotNode.name = \u62d6\u66f3\u5b50\u7be9\u9078\u5668\u81f3\u6b64 +SlotNode.description = \u5b50\u7be9\u9078\u5668\u5c07\u6703\u5148\u65bc\u7236\u7be9\u9078\u5668\u88ab\u57f7\u884c +HelpNode.name = \u62d6\u66f3\u7be9\u9078\u5668\u81f3\u6b64 +ParametersNode.name = \u53c3\u6578 diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/cs.po b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/cs.po deleted file mode 100644 index 325141206a..0000000000 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/cs.po +++ /dev/null @@ -1,52 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-26 16:04+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "QueryNode.actions.rename" -msgstr "PΕ™ejmenovat" - -msgid "QueryNode.actions.rename.text" -msgstr "PΕ™ejmenovat dotaz" - -msgid "QueryNode.actions.rename.title" -msgstr "PΕ™ejmenovat" - -msgid "QueryNode.actions.remove" -msgstr "Odstranit" - -msgid "QueryNode.actions.save" -msgstr "UloΕΎit" - -msgid "QueryNode.actions.duplicate" -msgstr "KopΓ­rovat" - -msgid "RootNode.name" -msgstr "Dotazy" - -msgid "SlotNode.name" -msgstr "Zde pΕ™etΓ‘hnΔ›te podfiltr" - -msgid "SlotNode.description" -msgstr "Podfiltry jsou spuΕ‘tΔ›ny pΕ™ed jejich nadΕ™azenΓ½m uzlem" - -msgid "HelpNode.name" -msgstr "Zde pΕ™etΓ‘hnΔ›te filtr" - -msgid "ParametersNode.name" -msgstr "Parametry" diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/es.po b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/es.po deleted file mode 100644 index 43c9da801c..0000000000 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/es.po +++ /dev/null @@ -1,53 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-07 11:31+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "QueryNode.actions.rename" -msgstr "Renombrar" - -msgid "QueryNode.actions.rename.text" -msgstr "Renombrar consulta" - -msgid "QueryNode.actions.rename.title" -msgstr "Renombrar" - -msgid "QueryNode.actions.remove" -msgstr "Suprimir" - -msgid "QueryNode.actions.save" -msgstr "Guardar" - -msgid "QueryNode.actions.duplicate" -msgstr "Duplicar" - -msgid "RootNode.name" -msgstr "Consultas" - -msgid "SlotNode.name" -msgstr "Arrastrar subfiltro aquΓ­" - -msgid "SlotNode.description" -msgstr "Los subfiltros son ejecutados antes que su nodo padre" - -msgid "HelpNode.name" -msgstr "Arrastrar filtro aquΓ­" - -msgid "ParametersNode.name" -msgstr "ParΓ‘metros" diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/fr.po b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/fr.po deleted file mode 100644 index 1e32ecdf7b..0000000000 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/fr.po +++ /dev/null @@ -1,53 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-07 11:17+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "QueryNode.actions.rename" -msgstr "Renommer" - -msgid "QueryNode.actions.rename.text" -msgstr "Renommer la requΓͺte" - -msgid "QueryNode.actions.rename.title" -msgstr "Renommer" - -msgid "QueryNode.actions.remove" -msgstr "Supprimer" - -msgid "QueryNode.actions.save" -msgstr "Sauvegarder" - -msgid "QueryNode.actions.duplicate" -msgstr "Dupliquer" - -msgid "RootNode.name" -msgstr "RequΓͺtes" - -msgid "SlotNode.name" -msgstr "Glissez le sous-filtre ici" - -msgid "SlotNode.description" -msgstr "SlotNode.description" - -msgid "HelpNode.name" -msgstr "Glissez le filtre ici" - -msgid "ParametersNode.name" -msgstr "ParamΓ¨tres" diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/ja.po b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/ja.po deleted file mode 100644 index f1ae882a13..0000000000 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/ja.po +++ /dev/null @@ -1,52 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-01 16:32+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "QueryNode.actions.rename" -msgstr "名前を倉更" - -msgid "QueryNode.actions.rename.text" -msgstr "クエγƒͺー名を倉更" - -msgid "QueryNode.actions.rename.title" -msgstr "名前を倉更" - -msgid "QueryNode.actions.remove" -msgstr "梈去" - -msgid "QueryNode.actions.save" -msgstr "保存" - -msgid "QueryNode.actions.duplicate" -msgstr "耇写" - -msgid "RootNode.name" -msgstr "クエγƒͺγƒΌ" - -msgid "SlotNode.name" -msgstr "ここにァブフィルタをドラッグ" - -msgid "SlotNode.description" -msgstr "ァブフィルタはθ¦ͺγƒŽγƒΌγƒ‰γε‰γ«εŸθ‘Œγ•γ‚ŒγΎγ™" - -msgid "HelpNode.name" -msgstr "ここにフィルタをドラッグ" - -msgid "ParametersNode.name" -msgstr "パラパータ" diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/org-gephi-desktop-filters-query.pot b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/org-gephi-desktop-filters-query.pot deleted file mode 100644 index 03b1ca8dd3..0000000000 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/org-gephi-desktop-filters-query.pot +++ /dev/null @@ -1,49 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "QueryNode.actions.rename" -msgstr "Rename" - -msgid "QueryNode.actions.rename.text" -msgstr "Rename query" - -msgid "QueryNode.actions.rename.title" -msgstr "Rename" - -msgid "QueryNode.actions.remove" -msgstr "Remove" - -msgid "QueryNode.actions.save" -msgstr "Save" - -msgid "QueryNode.actions.duplicate" -msgstr "Duplicate" - -msgid "RootNode.name" -msgstr "Queries" - -msgid "SlotNode.name" -msgstr "Drag subfilter here" - -msgid "SlotNode.description" -msgstr "Subfilters are executed before their parent node" - -msgid "HelpNode.name" -msgstr "Drag filter here" - -msgid "ParametersNode.name" -msgstr "Parameters" diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/pt_BR.po b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/pt_BR.po deleted file mode 100644 index be0619250d..0000000000 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/pt_BR.po +++ /dev/null @@ -1,52 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 17:53+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "QueryNode.actions.rename" -msgstr "Renomear" - -msgid "QueryNode.actions.rename.text" -msgstr "Renomear consulta" - -msgid "QueryNode.actions.rename.title" -msgstr "Renomear" - -msgid "QueryNode.actions.remove" -msgstr "Excluir" - -msgid "QueryNode.actions.save" -msgstr "Salvar" - -msgid "QueryNode.actions.duplicate" -msgstr "Duplicado" - -msgid "RootNode.name" -msgstr "Consultas" - -msgid "SlotNode.name" -msgstr " Arraste o subfiltro aqui " - -msgid "SlotNode.description" -msgstr "Subfiltros sΓ£o executados antes de seu nΓ³ pai" - -msgid "HelpNode.name" -msgstr " Arraste o filtro aqui " - -msgid "ParametersNode.name" -msgstr "ParΓ’metros" diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/resources/drop.png b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/resources/drop.png deleted file mode 100644 index 56643cde76..0000000000 Binary files a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/resources/drop.png and /dev/null differ diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/resources/parameter.png b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/resources/parameter.png deleted file mode 100644 index 0356d68feb..0000000000 Binary files a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/resources/parameter.png and /dev/null differ diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/resources/parameters.png b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/resources/parameters.png deleted file mode 100644 index 479e1e6481..0000000000 Binary files a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/resources/parameters.png and /dev/null differ diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/resources/queries.png b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/resources/queries.png deleted file mode 100644 index 1f69604528..0000000000 Binary files a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/resources/queries.png and /dev/null differ diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/resources/query.png b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/resources/query.png deleted file mode 100644 index 96e9e28f25..0000000000 Binary files a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/resources/query.png and /dev/null differ diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/ru.po b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/ru.po deleted file mode 100644 index 07833d47b6..0000000000 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/ru.po +++ /dev/null @@ -1,52 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-28 19:09+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "QueryNode.actions.rename" -msgstr "ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ" - -msgid "QueryNode.actions.rename.text" -msgstr "ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²" - -msgid "QueryNode.actions.rename.title" -msgstr "ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ" - -msgid "QueryNode.actions.remove" -msgstr "Π£Π΄Π°Π»ΠΈΡ‚ΡŒ" - -msgid "QueryNode.actions.save" -msgstr "Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ" - -msgid "QueryNode.actions.duplicate" -msgstr "Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ копию" - -msgid "RootNode.name" -msgstr "Наборы Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²" - -msgid "SlotNode.name" -msgstr "ΠŸΠ΅Ρ€Π΅Ρ‚Π°Ρ‰ΠΈΡ‚Π΅ ΠΏΠΎΠ΄Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ сюда" - -msgid "SlotNode.description" -msgstr "ΠŸΠΎΠ΄Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ примСняСтся Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€" - -msgid "HelpNode.name" -msgstr "ΠŸΠ΅Ρ€Π΅Ρ‚Π°Ρ‰ΠΈΡ‚Π΅ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ сюда" - -msgid "ParametersNode.name" -msgstr "ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹" diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/zh_CN.po b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/zh_CN.po deleted file mode 100644 index febaf5af5d..0000000000 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/query/zh_CN.po +++ /dev/null @@ -1,51 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:17+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "QueryNode.actions.rename" -msgstr "重命名" - -msgid "QueryNode.actions.rename.text" -msgstr "重命名ζŸ₯θ―’" - -msgid "QueryNode.actions.rename.title" -msgstr "重命名" - -msgid "QueryNode.actions.remove" -msgstr "移陀" - -msgid "QueryNode.actions.save" -msgstr "保存" - -msgid "QueryNode.actions.duplicate" -msgstr "倍刢" - -msgid "RootNode.name" -msgstr "ζŸ₯θ―’" - -msgid "SlotNode.name" -msgstr "εœ¨θΏ™ι‡Œζ‹–ε­ζ»€ζ³’ε™¨" - -msgid "SlotNode.description" -msgstr "εœ¨ζ―θŠ‚η‚Ήε‰ζ‰§θ‘Œε­ζ»€ζ³’ε™¨" - -msgid "HelpNode.name" -msgstr "εœ¨θΏ™ι‡Œζ‹–ε­ζ»€ζ³’ε™¨" - -msgid "ParametersNode.name" -msgstr "参数" diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/resources/autorefresh.png b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/resources/autorefresh.png deleted file mode 100644 index 48350331c3..0000000000 Binary files a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/resources/autorefresh.png and /dev/null differ diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/resources/filter.png b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/resources/filter.png deleted file mode 100644 index ce2d77a344..0000000000 Binary files a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/resources/filter.png and /dev/null differ diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/resources/icon.png b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/resources/icon.png deleted file mode 100644 index 1f69604528..0000000000 Binary files a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/resources/icon.png and /dev/null differ diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/resources/labelvisible_export.png b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/resources/labelvisible_export.png deleted file mode 100644 index 9c3c28fba2..0000000000 Binary files a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/resources/labelvisible_export.png and /dev/null differ diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/resources/select.png b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/resources/select.png deleted file mode 100644 index 8b6cf1cc23..0000000000 Binary files a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/resources/select.png and /dev/null differ diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/resources/small.png b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/resources/small.png deleted file mode 100644 index 96e9e28f25..0000000000 Binary files a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/resources/small.png and /dev/null differ diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/resources/table_export.png b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/resources/table_export.png deleted file mode 100644 index f582fb8a10..0000000000 Binary files a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/resources/table_export.png and /dev/null differ diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/resources/workspace_export.png b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/resources/workspace_export.png deleted file mode 100644 index 555887a28d..0000000000 Binary files a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/resources/workspace_export.png and /dev/null differ diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/ru.po b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/ru.po deleted file mode 100644 index 30f8b19ac3..0000000000 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/ru.po +++ /dev/null @@ -1,55 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-28 19:01+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "CTL_FiltersAction" -msgstr "Π€ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹" - -msgid "CTL_FiltersTopComponent" -msgstr "Π€ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹" - -msgid "FiltersPanel.resetButton.text" -msgstr "Π‘Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ" - -msgid "FilterPanelPanel.settings" -msgstr "Настройки" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Integrate Filters UI" - -msgid "FiltersPanel.selectButton.text" -msgstr "Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ" - -msgid "FiltersPanel.filterButton.text" -msgstr "ΠžΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ" - -msgid "FiltersPanel.exportColumnButton.toolTipText" -msgstr "Π­ΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΊΠ°ΠΊ ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ со значСниями true/false" - -msgid "FiltersPanel.exportWorkspaceButton.toolTipText" -msgstr "Π­ΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ Π½Π° Π½ΠΎΠ²ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ" - -msgid "FiltersPanel.exportColumn.input" -msgstr "Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ" - -msgid "FiltersPanel.exportColumn.input.title" -msgstr "Экспорт Π² ΠΊΠΎΠ»ΠΎΠ½ΠΊΡƒ" - -msgid "FiltersPanel.exportLabelVisible.toolTipText" -msgstr "Π‘ΠΊΡ€Ρ‹Ρ‚ΡŒ ΡƒΠ·Π»Ρ‹ ΠΈ Ρ€Ρ‘Π±Ρ€Π°, Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠ΅ ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρƒ" diff --git a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/zh_CN.po b/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/zh_CN.po deleted file mode 100644 index 5a002573a9..0000000000 --- a/modules/DesktopFilters/src/main/resources/org/gephi/desktop/filters/zh_CN.po +++ /dev/null @@ -1,54 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:16+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "CTL_FiltersAction" -msgstr "滀泒" - -msgid "CTL_FiltersTopComponent" -msgstr "滀泒" - -msgid "FiltersPanel.resetButton.text" -msgstr "重η½" - -msgid "FilterPanelPanel.settings" -msgstr "θΎη½" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ι›†ζˆζ»€ζ³’ε™¨UI" - -msgid "FiltersPanel.selectButton.text" -msgstr "选择" - -msgid "FiltersPanel.filterButton.text" -msgstr "滀泒" - -msgid "FiltersPanel.exportColumnButton.toolTipText" -msgstr "输出滀泒图像为一δΈͺ是/否数ζεˆ—" - -msgid "FiltersPanel.exportWorkspaceButton.toolTipText" -msgstr "θΎ“ε‡Ίζ»€ζ³’ε›Ύεƒεˆ°δΈ€δΈͺζ–°ηš„ε·₯δ½œι—΄" - -msgid "FiltersPanel.exportColumn.input" -msgstr "εˆ—ζ ‡ι’˜" - -msgid "FiltersPanel.exportColumn.input.title" -msgstr "θΎ“ε‡Ίεˆ°εˆ—" - -msgid "FiltersPanel.exportLabelVisible.toolTipText" -msgstr "ιšθ—θŠ‚η‚Ή/θΎΉ" diff --git a/modules/DesktopGenerate/pom.xml b/modules/DesktopGenerate/pom.xml index 47bfa616b0..2c90589592 100644 --- a/modules/DesktopGenerate/pom.xml +++ b/modules/DesktopGenerate/pom.xml @@ -4,13 +4,12 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. - org.gephi desktop-generate - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm DesktopGenerate @@ -30,7 +29,7 @@ ${project.groupId} - io-processor-plugin + io-importer-plugin ${project.groupId} @@ -38,7 +37,7 @@ ${project.groupId} - lib.validation + ui-utils ${project.groupId} @@ -52,16 +51,24 @@ org.netbeans.api org-openide-util + + org.netbeans.api + org-openide-util-ui + org.netbeans.api org-openide-dialogs + + ${project.groupId} + ui-library-wrapper + - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/DesktopGenerate/src/main/java/org/gephi/desktop/generate/DesktopGeneratorController.java b/modules/DesktopGenerate/src/main/java/org/gephi/desktop/generate/DesktopGeneratorController.java index 070726abb9..966725eb97 100644 --- a/modules/DesktopGenerate/src/main/java/org/gephi/desktop/generate/DesktopGeneratorController.java +++ b/modules/DesktopGenerate/src/main/java/org/gephi/desktop/generate/DesktopGeneratorController.java @@ -39,50 +39,46 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.generate; -import java.util.logging.Level; -import java.util.logging.Logger; import javax.swing.JPanel; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import org.gephi.desktop.project.api.ProjectControllerUI; import org.gephi.io.generator.api.GeneratorController; import org.gephi.io.generator.spi.Generator; import org.gephi.io.generator.spi.GeneratorUI; import org.gephi.io.importer.api.Container; -import org.gephi.io.importer.api.ContainerFactory; +import org.gephi.io.importer.api.ContainerUnloader; import org.gephi.io.importer.api.Report; import org.gephi.io.processor.plugin.DefaultProcessor; -import org.gephi.project.api.ProjectController; +import org.gephi.lib.validation.DialogDescriptorWithValidation; import org.gephi.utils.longtask.api.LongTaskErrorHandler; import org.gephi.utils.longtask.api.LongTaskExecutor; -import org.gephi.project.api.Workspace; -import org.netbeans.validation.api.ui.ValidationPanel; import org.openide.DialogDescriptor; import org.openide.DialogDisplayer; import org.openide.NotifyDescriptor; +import org.openide.util.Exceptions; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = GeneratorController.class) public class DesktopGeneratorController implements GeneratorController { - private LongTaskExecutor executor; + private final LongTaskExecutor executor; public DesktopGeneratorController() { executor = new LongTaskExecutor(true, "Generator"); } + @Override public Generator[] getGenerators() { return Lookup.getDefault().lookupAll(Generator.class).toArray(new Generator[0]); } + @Override public void generate(final Generator generator) { String title = generator.getName(); @@ -90,16 +86,7 @@ public void generate(final Generator generator) { if (ui != null) { ui.setup(generator); JPanel panel = ui.getPanel(); - final DialogDescriptor dd = new DialogDescriptor(panel, title); - if (panel instanceof ValidationPanel) { - ValidationPanel vp = (ValidationPanel) panel; - vp.addChangeListener(new ChangeListener() { - - public void stateChanged(ChangeEvent e) { - dd.setValid(!((ValidationPanel) e.getSource()).isProblem()); - } - }); - } + final DialogDescriptor dd = DialogDescriptorWithValidation.dialog(panel, title); Object result = DialogDisplayer.getDefault().notify(dd); if (result != NotifyDescriptor.OK_OPTION) { return; @@ -107,22 +94,25 @@ public void stateChanged(ChangeEvent e) { ui.unsetup(); } - final Container container = Lookup.getDefault().lookup(ContainerFactory.class).newContainer(); - container.setSource("" + generator.getName()); + final Container container = Lookup.getDefault().lookup(Container.Factory.class).newContainer(); + container.setSource(generator.getName()); container.setReport(new Report()); - String taskname = NbBundle.getMessage(DesktopGeneratorController.class, "DesktopGeneratorController.taskname", generator.getName()); + String taskname = NbBundle + .getMessage(DesktopGeneratorController.class, "DesktopGeneratorController.taskname", generator.getName()); //Error handler LongTaskErrorHandler errorHandler = new LongTaskErrorHandler() { + @Override public void fatalError(Throwable t) { - Logger.getLogger("").log(Level.WARNING, "", t.getCause() != null ? t.getCause() : t); + Exceptions.printStackTrace(t); } }; //Execute executor.execute(generator, new Runnable() { + @Override public void run() { generator.generate(container.getLoader()); finishGenerate(container); @@ -131,30 +121,10 @@ public void run() { } private void finishGenerate(Container container) { - - ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); - ProjectControllerUI pcui = Lookup.getDefault().lookup(ProjectControllerUI.class); - Workspace workspace; - if (pc.getCurrentProject() == null) { - pcui.newProject(); - workspace = pc.getCurrentWorkspace(); - } else { - if (pc.getCurrentWorkspace() == null) { - workspace = pc.newWorkspace(pc.getCurrentProject()); - pc.openWorkspace(workspace); - } else { - workspace = pc.getCurrentWorkspace(); - } - } - if (container.getSource() != null) { - pc.setSource(workspace, container.getSource()); - } - container.closeLoader(); DefaultProcessor defaultProcessor = new DefaultProcessor(); - defaultProcessor.setContainer(container.getUnloader()); - defaultProcessor.setWorkspace(workspace); + defaultProcessor.setContainers(new ContainerUnloader[] {container.getUnloader()}); defaultProcessor.process(); } } diff --git a/modules/DesktopGenerate/src/main/java/org/gephi/desktop/generate/Generate.java b/modules/DesktopGenerate/src/main/java/org/gephi/desktop/generate/Generate.java index 6fa754cb84..df9d9406c4 100644 --- a/modules/DesktopGenerate/src/main/java/org/gephi/desktop/generate/Generate.java +++ b/modules/DesktopGenerate/src/main/java/org/gephi/desktop/generate/Generate.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.generate; import java.awt.event.ActionEvent; @@ -53,7 +54,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.actions.CallableSystemAction; /** - * * @author Mathieu Bastian */ public class Generate extends CallableSystemAction { @@ -83,6 +83,7 @@ public JMenuItem getMenuPresenter() { String menuName = gen.getName() + "..."; JMenuItem menuItem = new JMenuItem(new AbstractAction(menuName) { + @Override public void actionPerformed(ActionEvent e) { generatorController.generate(gen); } diff --git a/modules/DesktopGenerate/src/main/nbm/manifest.mf b/modules/DesktopGenerate/src/main/nbm/manifest.mf index ffd8b6726d..980996876c 100644 --- a/modules/DesktopGenerate/src/main/nbm/manifest.mf +++ b/modules/DesktopGenerate/src/main/nbm/manifest.mf @@ -2,4 +2,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Layer: org/gephi/desktop/generate/layer.xml OpenIDE-Module-Localizing-Bundle: org/gephi/desktop/generate/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi UI +OpenIDE-Module-Name: Desktop Generate \ No newline at end of file diff --git a/modules/DesktopGenerate/src/main/nbm/module.xml b/modules/DesktopGenerate/src/main/nbm/module.xml deleted file mode 100644 index 01016cbfce..0000000000 --- a/modules/DesktopGenerate/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle.properties b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle.properties index af162087f0..d75572bf81 100644 --- a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle.properties +++ b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle.properties @@ -1,6 +1,4 @@ -OpenIDE-Module-Display-Category=Gephi UI -OpenIDE-Module-Name=Desktop Generate -CTL_Generate = Generate OpenIDE-Module-Short-Description=Integrate generators in UI +CTL_Generate = Generate DesktopGeneratorController.taskname = Generate {0} \ No newline at end of file diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_ar.properties b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_ca.properties b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_ca.properties new file mode 100644 index 0000000000..62c3226c2a --- /dev/null +++ b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_ca.properties @@ -0,0 +1,3 @@ +OpenIDE-Module-Short-Description=Integrate generators in UI +CTL_Generate=Genera +DesktopGeneratorController.taskname=Genera {0} diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_cs.properties b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_cs.properties index ca6bacdfc7..dd7ae380e7 100644 --- a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_cs.properties +++ b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_cs.properties @@ -1,13 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-29 20\:00+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -CTL_Generate=Vytvo\u0159it - -OpenIDE-Module-Short-Description=Zav\u00e9st gener\u00e1tory v rozhran\u00ed - -DesktopGeneratorController.taskname=Vytvo\u0159it {0} +OpenIDE-Module-Short-Description=Zavιst generαtory v rozhranν +CTL_Generate = Vytvo\u0159it + +DesktopGeneratorController.taskname = Vytvo\u0159it {0} diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_de.properties b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_de.properties new file mode 100644 index 0000000000..49503bf3d2 --- /dev/null +++ b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_de.properties @@ -0,0 +1,4 @@ +OpenIDE-Module-Short-Description=Integriere Generatoren in UI +CTL_Generate = Generieren + +DesktopGeneratorController.taskname = Generiere {0} diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_es.properties b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_es.properties index a73547feaa..1e4067fb33 100644 --- a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_es.properties +++ b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_es.properties @@ -1,13 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:08+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -CTL_Generate=Generar - -OpenIDE-Module-Short-Description=Integrar generadores en la interfaz de usuario - -DesktopGeneratorController.taskname=Generar {0} +OpenIDE-Module-Short-Description=Integrar generadores en la interfaz de usuario +CTL_Generate = Generar + +DesktopGeneratorController.taskname = Generar {0} diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_fr.properties b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_fr.properties index ab0601c645..b309ed2759 100644 --- a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_fr.properties +++ b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_fr.properties @@ -1,13 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:08+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -CTL_Generate=G\u00e9n\u00e9rer - -OpenIDE-Module-Short-Description=Int\u00e8gre les g\u00e9n\u00e9rateurs dans l'interface utilisateur - -DesktopGeneratorController.taskname=G\u00e9n\u00e9rer {0} +OpenIDE-Module-Short-Description=Intθgre les gιnιrateurs dans l'interface utilisateur +CTL_Generate = Gιnιrer + +DesktopGeneratorController.taskname = Gιnιrer {0} diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_he.properties b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_he.properties new file mode 100644 index 0000000000..f304e2dc0e --- /dev/null +++ b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_he.properties @@ -0,0 +1,3 @@ +OpenIDE-Module-Short-Description=Integrate generators in UI +CTL_Generate=Generate +DesktopGeneratorController.taskname=Generate {0} diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_hu.properties b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_hu.properties new file mode 100644 index 0000000000..4262111a8e --- /dev/null +++ b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_hu.properties @@ -0,0 +1,5 @@ + + +CTL_Generate=gener\u00E1l +OpenIDE-Module-Short-Description=Integr\u00E1lja a gener\u00E1torokat a felhaszn\u00E1l\u00F3i fel\u00FCleten +DesktopGeneratorController.taskname={0} gener\u00E1l\u00E1sa diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_it.properties b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_it.properties new file mode 100644 index 0000000000..f304e2dc0e --- /dev/null +++ b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_it.properties @@ -0,0 +1,3 @@ +OpenIDE-Module-Short-Description=Integrate generators in UI +CTL_Generate=Generate +DesktopGeneratorController.taskname=Generate {0} diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_ja.properties b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_ja.properties index 40b7cc1eaa..38a84f80ea 100644 --- a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_ja.properties +++ b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_ja.properties @@ -1,13 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-03 10\:58+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -CTL_Generate=\u751f\u6210\u3059\u308b - -OpenIDE-Module-Short-Description=UI\u306b\u304a\u3051\u308b\u7d71\u5408\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf - -DesktopGeneratorController.taskname=\u751f\u6210\u3059\u308b {0} +OpenIDE-Module-Short-Description=UI\u306b\u304a\u3051\u308b\u7d71\u5408\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf +CTL_Generate = \u751f\u6210\u3059\u308b + +DesktopGeneratorController.taskname = \u751f\u6210\u3059\u308b {0} diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_ko.properties b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_ko.properties new file mode 100644 index 0000000000..8011d7f6b2 --- /dev/null +++ b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_ko.properties @@ -0,0 +1,5 @@ + + +OpenIDE-Module-Short-Description=UI\uC5D0 \uC0DD\uC131\uAE30 \uD1B5\uD569\uD558\uAE30 +CTL_Generate=\uC0DD\uC131\uD558\uAE30 +DesktopGeneratorController.taskname={0}\uC744 \uC0DD\uC131\uD558\uAE30 diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_nl.properties b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_nl.properties new file mode 100644 index 0000000000..f304e2dc0e --- /dev/null +++ b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_nl.properties @@ -0,0 +1,3 @@ +OpenIDE-Module-Short-Description=Integrate generators in UI +CTL_Generate=Generate +DesktopGeneratorController.taskname=Generate {0} diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_oc.properties b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_oc.properties index 0a2acd2785..0a40cdd08b 100644 --- a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_oc.properties +++ b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_oc.properties @@ -1,12 +1,3 @@ -# Occitan (post 1500) translation for gephi -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the gephi package. -# FIRST AUTHOR , 2010. -# -!=Project-Id-Version\: gephi\nReport-Msgid-Bugs-To\: FULL NAME \nPOT-Creation-Date\: 2010-04-07 13\:16+0200\nPO-Revision-Date\: 2010-10-21 13\:36+0000\nLast-Translator\: C\u00e9dric VALMARY (Tot en \u00f2c) \nLanguage-Team\: Occitan (post 1500) \nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nX-Launchpad-Export-Date\: 2011-03-13 04\:46+0000\nX-Generator\: Launchpad (build 12559)\n - +OpenIDE-Module-Short-Description=Intθgra los generadors dins l'interfΰcia d'utilizaire CTL_Generate=Generar - -OpenIDE-Module-Short-Description=Int\u00e8gra los generadors dins l'interf\u00e0cia d'utilizaire - -!DesktopGeneratorController.taskname= +DesktopGeneratorController.taskname=Generate {0} diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_pt_BR.properties b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_pt_BR.properties index e00440ff0b..ec4ee540b2 100644 --- a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_pt_BR.properties +++ b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_pt_BR.properties @@ -1,13 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 18\:03+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -CTL_Generate=Gerar - -OpenIDE-Module-Short-Description=Integrar geradores \u00e0 interface de usu\u00e1rio - -DesktopGeneratorController.taskname=Gerar {0} +OpenIDE-Module-Short-Description=Integrar geradores ΰ interface de usuαrio +CTL_Generate = Gerar + +DesktopGeneratorController.taskname = Gerar {0} diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_ro.properties b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_ro.properties new file mode 100644 index 0000000000..d1cbf20451 --- /dev/null +++ b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_ro.properties @@ -0,0 +1,5 @@ + + +OpenIDE-Module-Short-Description=Integreaz\u0103 generatorii \u00EEn interfa\u021B\u0103 +CTL_Generate=Genereaz\u0103 +DesktopGeneratorController.taskname=Genereaz\u0103 {0} diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_ru.properties b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_ru.properties index a25354acd4..546d92ce0a 100644 --- a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_ru.properties +++ b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_ru.properties @@ -1,13 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-23 07\:06+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -CTL_Generate=\u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c - -OpenIDE-Module-Short-Description=\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0432 UI - -DesktopGeneratorController.taskname=\u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c {0} +OpenIDE-Module-Short-Description=\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 \u0432 UI +CTL_Generate = \u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c + +DesktopGeneratorController.taskname = \u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c {0} diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_th.properties b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_tr.properties b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_tr.properties new file mode 100644 index 0000000000..08d60d42eb --- /dev/null +++ b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_tr.properties @@ -0,0 +1,3 @@ +OpenIDE-Module-Short-Description=Integrate generators in UI +CTL_Generate=άret +DesktopGeneratorController.taskname=Generate {0} diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_uk.properties b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_uk.properties new file mode 100644 index 0000000000..dd0d211cfe --- /dev/null +++ b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_uk.properties @@ -0,0 +1,3 @@ +OpenIDE-Module-Short-Description=\u0406\u043D\u0442\u0435\u0433\u0440\u0443\u0439\u0442\u0435 \u0433\u0435\u043D\u0435\u0440\u0430\u0442\u043E\u0440\u0438 \u0432 UI +CTL_Generate=\u0413\u0435\u043D\u0435\u0440\u0443\u0432\u0430\u0442\u0438 +DesktopGeneratorController.taskname=\u0413\u0435\u043D\u0435\u0440\u0443\u0432\u0430\u0442\u0438 {0} diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_zh_CN.properties b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_zh_CN.properties index 8a21170e8b..1bd82aeace 100644 --- a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_zh_CN.properties +++ b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_zh_CN.properties @@ -1,12 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:16+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -CTL_Generate=\u751f\u6210 - -OpenIDE-Module-Short-Description=\u5728\u7528\u6237\u754c\u9762\u96c6\u6210\u751f\u6210\u5668 - -DesktopGeneratorController.taskname=\u751f\u6210{0} +OpenIDE-Module-Short-Description=\u5728\u7528\u6237\u754c\u9762\u96c6\u6210\u751f\u6210\u5668 +CTL_Generate = \u751f\u6210 + +DesktopGeneratorController.taskname = \u751f\u6210{0} diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_zh_TW.properties b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_zh_TW.properties new file mode 100644 index 0000000000..f304e2dc0e --- /dev/null +++ b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/Bundle_zh_TW.properties @@ -0,0 +1,3 @@ +OpenIDE-Module-Short-Description=Integrate generators in UI +CTL_Generate=Generate +DesktopGeneratorController.taskname=Generate {0} diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/cs.po b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/cs.po deleted file mode 100644 index 3981d7996a..0000000000 --- a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/cs.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-29 20:00+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "CTL_Generate" -msgstr "VytvoΕ™it" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ZavΓ©st generΓ‘tory v rozhranΓ­" - -msgid "DesktopGeneratorController.taskname" -msgstr "VytvoΕ™it {0}" diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/es.po b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/es.po deleted file mode 100644 index 3a874a10a4..0000000000 --- a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/es.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:08+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "CTL_Generate" -msgstr "Generar" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Integrar generadores en la interfaz de usuario" - -msgid "DesktopGeneratorController.taskname" -msgstr "Generar {0}" diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/fr.po b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/fr.po deleted file mode 100644 index 32e28dc847..0000000000 --- a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/fr.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:08+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "CTL_Generate" -msgstr "GΓ©nΓ©rer" - -msgid "OpenIDE-Module-Short-Description" -msgstr "IntΓ¨gre les gΓ©nΓ©rateurs dans l'interface utilisateur" - -msgid "DesktopGeneratorController.taskname" -msgstr "GΓ©nΓ©rer {0}" diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/ja.po b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/ja.po deleted file mode 100644 index 375777713f..0000000000 --- a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/ja.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-03 10:58+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "CTL_Generate" -msgstr "η”Ÿζˆγ™γ‚‹" - -msgid "OpenIDE-Module-Short-Description" -msgstr "UIγ«γŠγ‘γ‚‹η΅±εˆγ‚Έγ‚§γƒγƒ¬γƒΌγ‚Ώ" - -msgid "DesktopGeneratorController.taskname" -msgstr "η”Ÿζˆγ™γ‚‹ {0}" diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/org-gephi-desktop-generate.pot b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/org-gephi-desktop-generate.pot deleted file mode 100644 index 993582fc1c..0000000000 --- a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/org-gephi-desktop-generate.pot +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "CTL_Generate" -msgstr "Generate" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Integrate generators in UI" - -msgid "DesktopGeneratorController.taskname" -msgstr "Generate {0}" diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/pt_BR.po b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/pt_BR.po deleted file mode 100644 index c1341d348d..0000000000 --- a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/pt_BR.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 18:03+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "CTL_Generate" -msgstr "Gerar" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Integrar geradores Γ  interface de usuΓ‘rio" - -msgid "DesktopGeneratorController.taskname" -msgstr "Gerar {0}" diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/ru.po b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/ru.po deleted file mode 100644 index f6fc416cdc..0000000000 --- a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/ru.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-23 07:06+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "CTL_Generate" -msgstr "Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² Π² UI" - -msgid "DesktopGeneratorController.taskname" -msgstr "Π‘Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ {0}" diff --git a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/zh_CN.po b/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/zh_CN.po deleted file mode 100644 index 6c22eb8377..0000000000 --- a/modules/DesktopGenerate/src/main/resources/org/gephi/desktop/generate/zh_CN.po +++ /dev/null @@ -1,27 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:16+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "CTL_Generate" -msgstr "η”Ÿζˆ" - -msgid "OpenIDE-Module-Short-Description" -msgstr "εœ¨η”¨ζˆ·η•Œι’ι›†ζˆη”Ÿζˆε™¨" - -msgid "DesktopGeneratorController.taskname" -msgstr "η”Ÿζˆ{0}" diff --git a/modules/DesktopHierarchy/pom.xml b/modules/DesktopHierarchy/pom.xml deleted file mode 100644 index d35e5d82b2..0000000000 --- a/modules/DesktopHierarchy/pom.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - 4.0.0 - - gephi-parent - org.gephi - 0.9-SNAPSHOT - ../.. - - - org.gephi - desktop-hierarchy - 0.9-SNAPSHOT - nbm - - DesktopHierarchy - - - - org.netbeans.api - org-netbeans-api-annotations-common - - - ${project.groupId} - graph-api - - - ${project.groupId} - ui-components - - - ${project.groupId} - ui-library-wrapper - - - ${project.groupId} - ui-utils - - - ${project.groupId} - visualization - - - org.netbeans.api - org-openide-awt - - - org.netbeans.api - org-openide-util-lookup - - - org.netbeans.api - org-openide-util - - - org.netbeans.api - org-openide-windows - - - org.netbeans.api - org-netbeans-modules-settings - - - org.netbeans.api - org-openide-filesystems - - - org.netbeans.api - org-openide-nodes - - - - - - - org.codehaus.mojo - nbm-maven-plugin - - - - - - - - diff --git a/modules/DesktopHierarchy/src/main/java/org/gephi/desktop/hierarchy/Dendrogram.java b/modules/DesktopHierarchy/src/main/java/org/gephi/desktop/hierarchy/Dendrogram.java deleted file mode 100644 index 246fb95f3b..0000000000 --- a/modules/DesktopHierarchy/src/main/java/org/gephi/desktop/hierarchy/Dendrogram.java +++ /dev/null @@ -1,312 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.desktop.hierarchy; - -import java.awt.Color; -import java.awt.Graphics; -import java.util.ArrayList; -import javax.swing.JPanel; -import org.gephi.graph.api.HierarchicalGraph; -import org.gephi.graph.api.Node; - -public class Dendrogram extends JPanel { - - //Graph - private HierarchicalGraph graph; - - //Internal - private static final int MARGIN = 10; - private int numObjects; - private double maxDistance; - private double minDistance; - private int maxX; - private int maxY; - private int count; - private Color color = Color.BLACK; - private DendrogramNode root; - - //Settings - private int maxHeight = 0; - - public Dendrogram() { - } - - public void refresh(HierarchicalGraph graph) { - this.graph = graph; - if (graph != null) { - numObjects = graph.getNodeCount(); - maxHeight = Math.min(graph.getHeight() + 1, maxHeight); - root = buildTree(); - - //MinMaxDistance - minDistance = Double.POSITIVE_INFINITY; - maxDistance = Double.NEGATIVE_INFINITY; - findMinMaxDistance(root); - } else { - root = null; - } - } - - public int getMaxHeight() { - return maxHeight; - } - - public void setMaxHeight(int maxHeight) { - this.maxHeight = maxHeight; - } - - private DendrogramNode buildTree() { - DendrogramNode rootNode = new DendrogramNode(new DendrogramNode[0]); - Node[] topNodes = graph.getTopNodes().toArray(); - if (topNodes.length == 1) { - rootNode = traverseTree(topNodes[0]); - } else if (topNodes.length > 1) { - DendrogramNode[] children = new DendrogramNode[topNodes.length]; - for (int i = 0; i < topNodes.length; i++) { - children[i] = traverseTree(topNodes[i]); - } - rootNode = new DendrogramNode(children); - } - return rootNode; - } - - private DendrogramNode traverseTree(Node node) { - Node[] nodeChildren = graph.getChildren(node).toArray(); - DendrogramNode[] children = new DendrogramNode[nodeChildren.length]; - int height = 0; - for (int i = 0; i < nodeChildren.length; i++) { - children[i] = traverseTree(nodeChildren[i]); - height = Math.max(height, children[i].getHeight()); - } - DendrogramNode dendrogramNode = new DendrogramNode(children); - if (children.length == 0) { - dendrogramNode.setHeight(0); - } else { - dendrogramNode.setHeight(height + 1); - } - if (graph.isInView(node)) { - dendrogramNode.setRed(true); - } - return dendrogramNode; - } - - private void findMinMaxDistance(DendrogramNode node) { - double distance = node.getDistance(); - maxDistance = Math.max(maxDistance, distance); - minDistance = Math.min(minDistance, distance); - - for (DendrogramNode subNode : node.getChildren()) { - if (subNode != null) { - findMinMaxDistance(subNode); - } - } - } - - private void drawLine(int x1, int y1, int x2, int y2, Graphics g) { - g.drawLine(x1, y1, x2, y2); - } - - @Override - protected void paintComponent(Graphics g) { - super.paintComponent(g); - - /*if ((minDistance == maxDistance) || (Double.isNaN(minDistance)) || (Double.isInfinite(minDistance)) || - (Double.isNaN(maxDistance)) || (Double.isInfinite(maxDistance))) { - g.drawString("Dendrogram not available for this cluster model. Use an agglomerative clusterer.", MARGIN, MARGIN + 15); - return; - }*/ - - this.maxX = getWidth() - 2 * MARGIN; - this.maxY = getHeight() - 2 * MARGIN; - - g.setColor(Color.WHITE); - g.fillRect(0, 0, getWidth(), getHeight()); - - Graphics translated = g.create(); - translated.translate(MARGIN, MARGIN); - - count = 0; - - if (root != null) { - paintRecursively(root, root.getDistance(), translated); - } - } - - private int weightToYPos(double weight) { - return (int) Math.round(maxY * (((maxDistance - weight) - minDistance) / ((maxDistance - minDistance)))); - } - - private int countToXPos(int count) { - return (int) Math.round((((double) count) / ((double) numObjects)) * ((double) maxX)); - } - - private int paintRecursively(DendrogramNode node, double baseDistance, Graphics g) { - int leftPos = -1; - int rightPos = -1; - // doing recursive descent - for (DendrogramNode subNode : node.getChildren()) { - if (subNode != null) { - if (subNode.getChildren().length > 0) { - int currentPos = paintRecursively(subNode, node.getDistance(), g); - if (leftPos == -1) { - leftPos = currentPos; - } - rightPos = currentPos; - } - } - - } - g.setColor(color); - // drawing vertical cluster lines of one elemental clusters - for (DendrogramNode subNode : node.getChildren()) { - if (subNode != null) { - if (subNode.getChildren().length == 0) { - int currentPos = countToXPos(count); - if (subNode.isRed()) { - g.setColor(Color.RED); - } - drawLine(currentPos, weightToYPos(node.getDistance()), currentPos, weightToYPos(minDistance), g); - g.setColor(color); - if (leftPos == -1) { - leftPos = currentPos; - } - rightPos = currentPos; - count++; - } - } - } - - int middlePos = (rightPos + leftPos) / 2; - if (node.isRed()) { - g.setColor(Color.RED); - } - // painting vertical connections of merged clusters to next cluster - drawLine(middlePos, weightToYPos(baseDistance), middlePos, weightToYPos(node.getDistance()), g); - // painting horizontal connections of merged clusters - - drawLine(leftPos, weightToYPos(node.getDistance()), rightPos, weightToYPos(node.getDistance()), g); - return middlePos; - } - - public void prepareRendering() { - } - - public void finishRendering() { - } - - public int getRenderHeight(int preferredHeight) { - int height = getHeight(); - if (height < 1) { - height = preferredHeight; - } - return height; - } - - public int getRenderWidth(int preferredWidth) { - int width = getWidth(); - if (width < 1) { - width = preferredWidth; - } - return width; - } - - public void render(Graphics graphics, int width, int height) { - setSize(width, height); - paint(graphics); - } - - private class DendrogramNode { - - private DendrogramNode[] children; - private double distance; - private boolean red = false; - private int height; - - public DendrogramNode(DendrogramNode[] children) { - this.children = children; - distance = children.length; - for (int i = 0; i < children.length; i++) { - DendrogramNode child = children[i]; - if (child.height < maxHeight) { - distance -= child.distance; - this.children[i] = null; - numObjects--; - distance--; - } else { - distance += child.distance; - } - } - if (distance == 0 && children.length > 0) { - this.children = new DendrogramNode[0]; - } - } - - public void removeChildren(int index) { - distance -= children[index].distance; - children[index] = null; - } - - public void setHeight(int height) { - this.height = height; - } - - public int getHeight() { - return height; - } - - public DendrogramNode[] getChildren() { - return children; - } - - public double getDistance() { - return distance; - } - - public boolean isRed() { - return red; - } - - public void setRed(boolean red) { - this.red = red; - } - } -} diff --git a/modules/DesktopHierarchy/src/main/java/org/gephi/desktop/hierarchy/HierarchyControlPanel.form b/modules/DesktopHierarchy/src/main/java/org/gephi/desktop/hierarchy/HierarchyControlPanel.form deleted file mode 100644 index 2d808911d6..0000000000 --- a/modules/DesktopHierarchy/src/main/java/org/gephi/desktop/hierarchy/HierarchyControlPanel.form +++ /dev/null @@ -1,256 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/DesktopHierarchy/src/main/java/org/gephi/desktop/hierarchy/HierarchyControlPanel.java b/modules/DesktopHierarchy/src/main/java/org/gephi/desktop/hierarchy/HierarchyControlPanel.java deleted file mode 100644 index c86cda1e0d..0000000000 --- a/modules/DesktopHierarchy/src/main/java/org/gephi/desktop/hierarchy/HierarchyControlPanel.java +++ /dev/null @@ -1,432 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.desktop.hierarchy; - -import java.awt.Cursor; -import java.awt.GridBagConstraints; -import java.awt.GridLayout; -import java.awt.Insets; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.GraphModel; -import org.gephi.graph.api.GraphSettings; -import org.gephi.graph.api.HierarchicalGraph; -import org.gephi.ui.components.richtooltip.RichTooltip; -import org.jdesktop.swingx.JXHyperlink; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; -import org.openide.windows.TopComponent; -import org.openide.windows.WindowManager; - -/** - * - * @author Mathieu Bastian - */ -public class HierarchyControlPanel extends javax.swing.JPanel { - - public HierarchyControlPanel() { - initComponents(); - initEvents(); - showTreeLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - } - - private void initEvents() { - autoMetaEdgeCheckbox.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - GraphModel model = Lookup.getDefault().lookup(GraphController.class).getModel(); - boolean sel = autoMetaEdgeCheckbox.isSelected(); - model.settings().putClientProperty(GraphSettings.AUTO_META_EDGES, sel); - sumRadio.setEnabled(sel); - avgRadio.setEnabled(sel); - labelWeight.setEnabled(sel); - } - }); - - showTreeLabel.addMouseListener(new MouseAdapter() { - - @Override - public void mouseClicked(MouseEvent e) { - TopComponent tc = WindowManager.getDefault().findTopComponent("HierarchyTopComponent"); - if (tc != null) { - tc.open(); - tc.requestActive(); - HierarchyTopComponent hierarchyTopComponent = (HierarchyTopComponent) tc; - hierarchyTopComponent.refresh(); - } - } - }); - - metaEdgeInfoLabel.addMouseListener(new MouseAdapter() { - - RichTooltip richTooltip; - - @Override - public void mouseEntered(MouseEvent e) { - String description = NbBundle.getMessage(HierarchyControlPanel.class, "HierarchyControlPanel.info.description"); - String title = NbBundle.getMessage(HierarchyControlPanel.class, "HierarchyControlPanel.info.title"); - richTooltip = new RichTooltip(title, description); - richTooltip.showTooltip(metaEdgeInfoLabel); - } - - @Override - public void mouseExited(MouseEvent e) { - if (richTooltip != null) { - richTooltip.hideTooltip(); - richTooltip = null; - } - } - }); - - metaWeightInfoLabel.addMouseListener(new MouseAdapter() { - - RichTooltip richTooltip; - - @Override - public void mouseEntered(MouseEvent e) { - String description = NbBundle.getMessage(HierarchyControlPanel.class, "HierarchyControlPanel.weightinfo.description"); - String title = NbBundle.getMessage(HierarchyControlPanel.class, "HierarchyControlPanel.weightinfo.title"); - richTooltip = new RichTooltip(title, description); - richTooltip.showTooltip(metaWeightInfoLabel); - } - - @Override - public void mouseExited(MouseEvent e) { - if (richTooltip != null) { - richTooltip.hideTooltip(); - richTooltip = null; - } - } - }); - - ActionListener radioListener = new ActionListener() { - - public void actionPerformed(ActionEvent e) { - GraphModel model = Lookup.getDefault().lookup(GraphController.class).getModel(); - GraphSettings settings = model.settings(); - settings.putClientProperty(GraphSettings.METAEDGE_BUILDER, e.getActionCommand()); - } - }; - sumRadio.setActionCommand("sum"); - avgRadio.setActionCommand("average"); - sumRadio.addActionListener(radioListener); - avgRadio.addActionListener(radioListener); - } - - public void setup() { - GraphModel model = Lookup.getDefault().lookup(GraphController.class).getModel(); - HierarchicalGraph graph = model.getHierarchicalGraphVisible(); - initLevelsLinks(graph); - - //Init status - GraphSettings settings = model.settings(); - boolean enabled = (Boolean) settings.getClientProperty(GraphSettings.AUTO_META_EDGES); - autoMetaEdgeCheckbox.setSelected(enabled); - - sumRadio.setEnabled(enabled); - avgRadio.setEnabled(enabled); - labelWeight.setEnabled(enabled); - - //Weight - String builder = (String) settings.getClientProperty(GraphSettings.METAEDGE_BUILDER); - if (builder.equalsIgnoreCase("sum")) { - sumRadio.setSelected(true); - } else if (builder.equalsIgnoreCase("average")) { - avgRadio.setSelected(true); - } else { - sumRadio.setEnabled(false); - avgRadio.setEnabled(false); - } - - //Stats - heightLabel.setText("" + (graph.getHeight() + 1)); - } - - private void initLevelsLinks(HierarchicalGraph graph) { - - levelViewPanel.removeAll(); - String levelStr = NbBundle.getMessage(HierarchyControlPanel.class, "HierarchyControlPanel.linkLevel"); - String nodesStr = NbBundle.getMessage(HierarchyControlPanel.class, "HierarchyControlPanel.linkLevel.nodes"); - String leavesStr = NbBundle.getMessage(HierarchyControlPanel.class, "HierarchyControlPanel.linkLevel.leaves"); - - int[] levelSize; - graph.readLock(); - int height = graph.getHeight(); - levelSize = new int[height + 1]; - for (int i = 0; i < height + 1; i++) { - levelSize[i] = graph.getLevelSize(i); - } - graph.readUnlock(); - - //Level links - for (int i = 0; i < levelSize.length; i++) { - - JXHyperlink link = new JXHyperlink(); - link.setClickedColor(new java.awt.Color(0, 51, 255)); - link.setText(levelStr + " " + i + " (" + levelSize[i] + " " + nodesStr + ")"); - link.setHorizontalAlignment(javax.swing.SwingConstants.LEADING); - final int lvl = i; - link.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - GraphModel model = Lookup.getDefault().lookup(GraphController.class).getModel(); - HierarchicalGraph graph = model.getHierarchicalGraphVisible(); - graph.resetViewToLevel(lvl); - } - }); - GridBagConstraints gdc = new GridBagConstraints(0, i, 1, 1, 1, 0, GridBagConstraints.PAGE_START, GridBagConstraints.HORIZONTAL, new Insets(0, 4, 0, 0), 0, 0); - levelViewPanel.add(link, gdc); - } - - //Leaves - JXHyperlink link = new JXHyperlink(); - link.setClickedColor(new java.awt.Color(0, 51, 255)); - link.setText(leavesStr); - link.setHorizontalAlignment(javax.swing.SwingConstants.LEADING); - link.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - GraphModel model = Lookup.getDefault().lookup(GraphController.class).getModel(); - HierarchicalGraph graph = model.getHierarchicalGraphVisible(); - graph.resetViewToLeaves(); - } - }); - GridBagConstraints gdc = new GridBagConstraints(0, height + 1, 1, 1, 1, 1, GridBagConstraints.PAGE_START, GridBagConstraints.HORIZONTAL, new Insets(0, 4, 0, 0), 0, 0); - levelViewPanel.add(link, gdc); - } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // //GEN-BEGIN:initComponents - private void initComponents() { - java.awt.GridBagConstraints gridBagConstraints; - - weightGroup = new javax.swing.ButtonGroup(); - showTreeLabel = new javax.swing.JLabel(); - labelHeight = new javax.swing.JLabel(); - heightLabel = new javax.swing.JLabel(); - separator1 = new javax.swing.JSeparator(); - settingsPanel = new javax.swing.JPanel(); - labelAuto = new javax.swing.JLabel(); - metaEdgeInfoLabel = new javax.swing.JLabel(); - autoMetaEdgeCheckbox = new javax.swing.JCheckBox(); - labelWeight = new javax.swing.JLabel(); - sumRadio = new javax.swing.JRadioButton(); - avgRadio = new javax.swing.JRadioButton(); - jLabel2 = new javax.swing.JLabel(); - metaWeightInfoLabel = new javax.swing.JLabel(); - labelView = new javax.swing.JLabel(); - levelViewPanel = new javax.swing.JPanel(); - jSeparator1 = new javax.swing.JSeparator(); - - setPreferredSize(new java.awt.Dimension(214, 300)); - - showTreeLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/hierarchy/resources/tree.png"))); // NOI18N - showTreeLabel.setText(org.openide.util.NbBundle.getMessage(HierarchyControlPanel.class, "HierarchyControlPanel.showTreeLabel.text")); // NOI18N - showTreeLabel.setToolTipText(org.openide.util.NbBundle.getMessage(HierarchyControlPanel.class, "HierarchyControlPanel.showTreeLabel.toolTipText")); // NOI18N - showTreeLabel.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED)); - - labelHeight.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N - labelHeight.setText(org.openide.util.NbBundle.getMessage(HierarchyControlPanel.class, "HierarchyControlPanel.labelHeight.text")); // NOI18N - - heightLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N - heightLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); - heightLabel.setText(org.openide.util.NbBundle.getMessage(HierarchyControlPanel.class, "HierarchyControlPanel.heightLabel.text")); // NOI18N - heightLabel.setToolTipText(org.openide.util.NbBundle.getMessage(HierarchyControlPanel.class, "HierarchyControlPanel.heightLabel.toolTipText")); // NOI18N - - settingsPanel.setLayout(new java.awt.GridBagLayout()); - - labelAuto.setText(org.openide.util.NbBundle.getMessage(HierarchyControlPanel.class, "HierarchyControlPanel.labelAuto.text")); // NOI18N - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 0; - gridBagConstraints.gridwidth = 2; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 1.0; - settingsPanel.add(labelAuto, gridBagConstraints); - - metaEdgeInfoLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/hierarchy/resources/information-small.png"))); // NOI18N - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 0; - gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; - gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 5); - settingsPanel.add(metaEdgeInfoLabel, gridBagConstraints); - - autoMetaEdgeCheckbox.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 2; - gridBagConstraints.gridy = 0; - gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; - gridBagConstraints.weightx = 0.1; - settingsPanel.add(autoMetaEdgeCheckbox, gridBagConstraints); - - labelWeight.setText(org.openide.util.NbBundle.getMessage(HierarchyControlPanel.class, "HierarchyControlPanel.labelWeight.text")); // NOI18N - labelWeight.setToolTipText(""); // NOI18N - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 1; - gridBagConstraints.gridwidth = 2; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.insets = new java.awt.Insets(7, 0, 0, 0); - settingsPanel.add(labelWeight, gridBagConstraints); - - weightGroup.add(sumRadio); - sumRadio.setToolTipText(org.openide.util.NbBundle.getMessage(HierarchyControlPanel.class, "HierarchyControlPanel.sumRadio.toolTipText")); // NOI18N - sumRadio.setLabel(org.openide.util.NbBundle.getMessage(HierarchyControlPanel.class, "HierarchyControlPanel.sumRadio.label")); // NOI18N - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 2; - gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.insets = new java.awt.Insets(3, 0, 0, 0); - settingsPanel.add(sumRadio, gridBagConstraints); - - weightGroup.add(avgRadio); - avgRadio.setToolTipText(org.openide.util.NbBundle.getMessage(HierarchyControlPanel.class, "HierarchyControlPanel.avgRadio.toolTipText")); // NOI18N - avgRadio.setLabel(org.openide.util.NbBundle.getMessage(HierarchyControlPanel.class, "HierarchyControlPanel.avgRadio.label")); // NOI18N - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 2; - gridBagConstraints.gridy = 2; - gridBagConstraints.gridwidth = 2; - gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; - gridBagConstraints.insets = new java.awt.Insets(3, 0, 0, 0); - settingsPanel.add(avgRadio, gridBagConstraints); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 3; - gridBagConstraints.gridwidth = 4; - gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL; - gridBagConstraints.weighty = 1.0; - settingsPanel.add(jLabel2, gridBagConstraints); - - metaWeightInfoLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/hierarchy/resources/information-small.png"))); // NOI18N - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 1; - gridBagConstraints.insets = new java.awt.Insets(6, 0, 0, 5); - settingsPanel.add(metaWeightInfoLabel, gridBagConstraints); - - labelView.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N - labelView.setText(org.openide.util.NbBundle.getMessage(HierarchyControlPanel.class, "HierarchyControlPanel.labelView.text")); // NOI18N - - levelViewPanel.setLayout(new java.awt.GridBagLayout()); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(showTreeLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(separator1, javax.swing.GroupLayout.DEFAULT_SIZE, 198, Short.MAX_VALUE) - .addContainerGap()) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(settingsPanel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 198, Short.MAX_VALUE) - .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() - .addComponent(labelHeight) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(heightLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addContainerGap()) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(jSeparator1, javax.swing.GroupLayout.DEFAULT_SIZE, 198, Short.MAX_VALUE) - .addContainerGap()) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(labelView) - .addContainerGap(179, Short.MAX_VALUE)) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(levelViewPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 198, Short.MAX_VALUE) - .addContainerGap()) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(showTreeLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 43, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(9, 9, 9) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(labelHeight) - .addComponent(heightLabel)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(separator1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(9, 9, 9) - .addComponent(settingsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 72, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, 10, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(labelView) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(levelViewPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 199, Short.MAX_VALUE)) - ); - }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JCheckBox autoMetaEdgeCheckbox; - private javax.swing.JRadioButton avgRadio; - private javax.swing.JLabel heightLabel; - private javax.swing.JLabel jLabel2; - private javax.swing.JSeparator jSeparator1; - private javax.swing.JLabel labelAuto; - private javax.swing.JLabel labelHeight; - private javax.swing.JLabel labelView; - private javax.swing.JLabel labelWeight; - private javax.swing.JPanel levelViewPanel; - private javax.swing.JLabel metaEdgeInfoLabel; - private javax.swing.JLabel metaWeightInfoLabel; - private javax.swing.JSeparator separator1; - private javax.swing.JPanel settingsPanel; - private javax.swing.JLabel showTreeLabel; - private javax.swing.JRadioButton sumRadio; - private javax.swing.ButtonGroup weightGroup; - // End of variables declaration//GEN-END:variables -} diff --git a/modules/DesktopHierarchy/src/main/java/org/gephi/desktop/hierarchy/HierarchyPropertyBarAddon.java b/modules/DesktopHierarchy/src/main/java/org/gephi/desktop/hierarchy/HierarchyPropertyBarAddon.java deleted file mode 100644 index 4ebdc03aae..0000000000 --- a/modules/DesktopHierarchy/src/main/java/org/gephi/desktop/hierarchy/HierarchyPropertyBarAddon.java +++ /dev/null @@ -1,118 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.desktop.hierarchy; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Cursor; -import java.awt.Dimension; -import java.awt.FlowLayout; -import java.awt.Insets; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import javax.swing.JButton; -import javax.swing.JComponent; -import javax.swing.JPanel; -import javax.swing.JPopupMenu; -import javax.swing.SwingUtilities; -import org.gephi.visualization.apiimpl.PropertiesBarAddon; -import org.openide.util.NbBundle; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Mathieu Bastian - */ -@ServiceProvider(service=PropertiesBarAddon.class) -public class HierarchyPropertyBarAddon implements PropertiesBarAddon { - - public JComponent getComponent() { - JPanel panel = new JPanel(new FlowLayout(FlowLayout.RIGHT, 0, 0)) { - - @Override - public void setEnabled(final boolean enabled) { - SwingUtilities.invokeLater(new Runnable() { - - public void run() { - for (Component c : getComponents()) { - c.setEnabled(enabled); - } - } - }); - setOpaque(enabled); - } - }; - panel.add(new HierarchyAddonButton()); - panel.setBackground(Color.WHITE); - return panel; - } - - private static class HierarchyAddonButton extends JButton { - - public HierarchyAddonButton() { - super(NbBundle.getMessage(HierarchyPropertyBarAddon.class, "HierarchyAddonButton.title")); - setOpaque(false); - setMargin(new Insets(0, 10, 0, 10)); - setFocusPainted(false); - setPreferredSize(new Dimension(95, 28)); - setContentAreaFilled(false); - setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/hierarchy/resources/bulb.png"))); // NOI18N - setBorder(null); - addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - JPopupMenu menu = createPopup(); - menu.show(HierarchyAddonButton.this, HierarchyAddonButton.this.getWidth() - menu.getPreferredSize().width, HierarchyAddonButton.this.getHeight()); - } - }); - } - - private JPopupMenu createPopup() { - HierarchyControlPanel controlPanel = new HierarchyControlPanel(); - controlPanel.setup(); - JPopupMenu menu = new JPopupMenu(); - menu.add(controlPanel); - return menu; - } - } -} diff --git a/modules/DesktopHierarchy/src/main/java/org/gephi/desktop/hierarchy/HierarchyTopComponent.form b/modules/DesktopHierarchy/src/main/java/org/gephi/desktop/hierarchy/HierarchyTopComponent.form deleted file mode 100644 index 58f14728b5..0000000000 --- a/modules/DesktopHierarchy/src/main/java/org/gephi/desktop/hierarchy/HierarchyTopComponent.form +++ /dev/null @@ -1,83 +0,0 @@ - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/DesktopHierarchy/src/main/java/org/gephi/desktop/hierarchy/HierarchyTopComponent.java b/modules/DesktopHierarchy/src/main/java/org/gephi/desktop/hierarchy/HierarchyTopComponent.java deleted file mode 100644 index 46e56a6170..0000000000 --- a/modules/DesktopHierarchy/src/main/java/org/gephi/desktop/hierarchy/HierarchyTopComponent.java +++ /dev/null @@ -1,206 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.desktop.hierarchy; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import javax.swing.DefaultComboBoxModel; -import javax.swing.SwingUtilities; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.GraphModel; -import org.gephi.graph.api.HierarchicalGraph; -import org.gephi.ui.components.BusyUtils; -import org.gephi.ui.components.BusyUtils.BusyLabel; -import org.netbeans.api.settings.ConvertAsProperties; -import org.openide.awt.ActionID; -import org.openide.awt.ActionReference; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; -import org.openide.windows.TopComponent; - -@ConvertAsProperties(dtd = "-//org.gephi.desktop.hierarchy//Hierarchy//EN", -autostore = false) -@TopComponent.Description(preferredID = "HierarchyTopComponent", -persistenceType = TopComponent.PERSISTENCE_ALWAYS) -@TopComponent.Registration(mode = "graphmode", openAtStartup = false, roles = {"overview"}) -@ActionID(category = "Window", id = "org.gephi.desktop.datalab.HierarchyTopComponent") -@ActionReference(path = "Menu/Window", position = 600) -@TopComponent.OpenActionRegistration(displayName = "#CTL_HierarchyTopComponent", -preferredID = "HierarchyTopComponent") -public class HierarchyTopComponent extends TopComponent { - - //Dendrogram - private Dendrogram dendrogram; - - private HierarchyTopComponent() { - initComponents(); - setName(NbBundle.getMessage(HierarchyTopComponent.class, "CTL_HierarchyTopComponent")); - - initToolbar(); - dendrogram = new Dendrogram(); - } - - private void initToolbar() { - refreshButton.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - refresh(); - } - }); - - levelLimitCombo.addItemListener(new ItemListener() { - - public void itemStateChanged(ItemEvent e) { - int lvl = levelLimitCombo.getSelectedIndex(); - if (lvl != dendrogram.getMaxHeight()) { - dendrogram.setMaxHeight(lvl); - refresh(); - } - } - }); - } - - private void refreshLevelLimit(HierarchicalGraph graph) { - int h = graph.getHeight(); - DefaultComboBoxModel comboBoxModel = new DefaultComboBoxModel(); - comboBoxModel.addElement(NbBundle.getMessage(HierarchyTopComponent.class, "HierarchyTopComponent.bar.levelmax")); - String levelStr = NbBundle.getMessage(HierarchyTopComponent.class, "HierarchyTopComponent.bar.level"); - for (int i = 1; i <= h; i++) { - comboBoxModel.addElement(levelStr + " " + i); - } - levelLimitCombo.setModel(comboBoxModel); - levelLimitCombo.setSelectedIndex(Math.min(h, dendrogram.getMaxHeight())); - } - - public void refresh() { - final GraphModel model = Lookup.getDefault().lookup(GraphController.class).getModel(); - if (model != null) { - Thread thread = new Thread(new Runnable() { - - public void run() { - BusyLabel busyLabel = BusyUtils.createCenteredBusyLabel(centerScrollPane, NbBundle.getMessage(HierarchyTopComponent.class, "HierarchyTopComponent.busyLabel.text"), dendrogram); - busyLabel.setBusy(true); - final HierarchicalGraph graph = model.getHierarchicalGraph(); - SwingUtilities.invokeLater(new Runnable() { - - public void run() { - refreshLevelLimit(graph); - } - }); - dendrogram.refresh(graph); - busyLabel.setBusy(false); - } - }, "Dendrogram refresh"); - thread.start(); - } - } - - /** - * This method is called from within the constructor to initialize the form. - * WARNING: Do NOT modify this code. The content of this method is always - * regenerated by the Form Editor. - */ - // //GEN-BEGIN:initComponents - private void initComponents() { - java.awt.GridBagConstraints gridBagConstraints; - - toolPanel = new javax.swing.JPanel(); - labelLevelLimit = new javax.swing.JLabel(); - levelLimitCombo = new javax.swing.JComboBox(); - refreshButton = new javax.swing.JButton(); - centerScrollPane = new javax.swing.JScrollPane(); - - setLayout(new java.awt.BorderLayout()); - - toolPanel.setLayout(new java.awt.GridBagLayout()); - - org.openide.awt.Mnemonics.setLocalizedText(labelLevelLimit, org.openide.util.NbBundle.getMessage(HierarchyTopComponent.class, "HierarchyTopComponent.labelLevelLimit.text")); // NOI18N - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 0; - gridBagConstraints.insets = new java.awt.Insets(2, 4, 0, 0); - toolPanel.add(labelLevelLimit, gridBagConstraints); - - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 0; - gridBagConstraints.insets = new java.awt.Insets(0, 4, 0, 0); - toolPanel.add(levelLimitCombo, gridBagConstraints); - - org.openide.awt.Mnemonics.setLocalizedText(refreshButton, org.openide.util.NbBundle.getMessage(HierarchyTopComponent.class, "HierarchyTopComponent.refreshButton.text")); // NOI18N - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 2; - gridBagConstraints.gridy = 0; - gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.insets = new java.awt.Insets(2, 0, 0, 4); - toolPanel.add(refreshButton, gridBagConstraints); - - add(toolPanel, java.awt.BorderLayout.PAGE_START); - - centerScrollPane.setBorder(null); - centerScrollPane.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); - centerScrollPane.setVerticalScrollBarPolicy(javax.swing.ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER); - add(centerScrollPane, java.awt.BorderLayout.CENTER); - }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JScrollPane centerScrollPane; - private javax.swing.JLabel labelLevelLimit; - private javax.swing.JComboBox levelLimitCombo; - private javax.swing.JButton refreshButton; - private javax.swing.JPanel toolPanel; - // End of variables declaration//GEN-END:variables - - void writeProperties(java.util.Properties p) { - // better to version settings since initial version as advocated at - // http://wiki.apidesign.org/wiki/PropertyFiles - p.setProperty("version", "1.0"); - // TODO store your settings - } - - void readProperties(java.util.Properties p) { - String version = p.getProperty("version"); - // TODO read your settings according to their version - } -} diff --git a/modules/DesktopHierarchy/src/main/nbm/manifest.mf b/modules/DesktopHierarchy/src/main/nbm/manifest.mf deleted file mode 100644 index ffa79e38e0..0000000000 --- a/modules/DesktopHierarchy/src/main/nbm/manifest.mf +++ /dev/null @@ -1,4 +0,0 @@ -Manifest-Version: 1.0 -AutoUpdate-Essential-Module: true -OpenIDE-Module-Localizing-Bundle: org/gephi/desktop/hierarchy/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file diff --git a/modules/DesktopHierarchy/src/main/nbm/module.xml b/modules/DesktopHierarchy/src/main/nbm/module.xml deleted file mode 100644 index 833b6bd28c..0000000000 --- a/modules/DesktopHierarchy/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/Bundle.properties b/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/Bundle.properties deleted file mode 100644 index 61a311aae8..0000000000 --- a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/Bundle.properties +++ /dev/null @@ -1,38 +0,0 @@ -Actions/Window/org-gephi-desktop-hierarchy-HierarchyAction.instance=Hierarchy -CTL_HierarchyAction=Hierarchy -CTL_HierarchyTopComponent=Hierarchy -!HINT_HierarchyTopComponent= -OpenIDE-Module-Display-Category=Gephi UI -OpenIDE-Module-Name=Desktop Hierarchy -OpenIDE-Module-Short-Description=Visualization addon for hierarchy navigation - -HierarchyAddonButton.title = Hierarchy -HierarchyControlPanel.showTreeLabel.toolTipText=Show Tree -HierarchyControlPanel.showTreeLabel.text= -HierarchyControlPanel.labelView.text=View: - -HierarchyControlPanel.linkLevel = Level -HierarchyControlPanel.linkLevel.nodes = nodes -HierarchyControlPanel.linkLevel.leaves = Leaves... -HierarchyTopComponent.refreshButton.text=Refresh -HierarchyTopComponent.busyLabel.text=Refreshing... -HierarchyTopComponent.labelLevelLimit.text=Cut leaves: -HierarchyTopComponent.bar.level = Level -HierarchyTopComponent.bar.levelmax = None -HierarchyControlPanel.labelHeight.text=Height: -HierarchyControlPanel.heightLabel.text=0 -HierarchyControlPanel.metaEdgesSettings.title=Meta-edges settings - -HierarchyControlPanel.info.title=Meta-edges -HierarchyControlPanel.info.description=Meta edges are edges between a group and a node or between two groups. They represents proper edges between groups' descendants. -HierarchyControlPanel.weightinfo.title=Meta-edges weight -HierarchyControlPanel.weightinfo.description=Meta-edges are created from the aggregation of regular edges, the weight of meta edges can be the sum or the average of the edges' weight. Note the weight is not changed on existing edges if you change the parameter. - - -HierarchyControlPanel.labelAuto.text=Auto meta-edges creation -HierarchyControlPanel.labelWeight.text=Meta-Edges weight: -HierarchyControlPanel.sumRadio.label=Sum -HierarchyControlPanel.avgRadio.label=Average -HierarchyControlPanel.sumRadio.toolTipText=Sum of edges weight -HierarchyControlPanel.avgRadio.toolTipText=Average of edge weight -HierarchyControlPanel.heightLabel.toolTipText=The height of the hierarchy. Values greater than 'one' means the graph is hierarchical. diff --git a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/Bundle_cs.properties b/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/Bundle_cs.properties deleted file mode 100644 index f53e9dcaba..0000000000 --- a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/Bundle_cs.properties +++ /dev/null @@ -1,65 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-26 15\:58+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -Actions/Window/org-gephi-desktop-hierarchy-HierarchyAction.instance=Hierarchie - -CTL_HierarchyAction=Hierarchie - -CTL_HierarchyTopComponent=Hierarchie - -OpenIDE-Module-Short-Description=Dopln\u011bk vizualizace pro navigaci hierarchie - -HierarchyAddonButton.title=Hierarchie - -HierarchyControlPanel.showTreeLabel.toolTipText=Zobrazit strom - -HierarchyControlPanel.labelView.text=Zobrazn\u00ed\: - -HierarchyControlPanel.linkLevel=\u00darove\u0148 - -HierarchyControlPanel.linkLevel.nodes=uzly - -HierarchyControlPanel.linkLevel.leaves=Listy... - -HierarchyTopComponent.refreshButton.text=Obnovit - -HierarchyTopComponent.busyLabel.text=Obnovov\u00e1n\u00ed... - -HierarchyTopComponent.labelLevelLimit.text=O\u0159\u00edznout listy\: - -HierarchyTopComponent.bar.level=\u00darove\u0148 - -HierarchyTopComponent.bar.levelmax=\u017d\u00e1dn\u00e9 - -HierarchyControlPanel.labelHeight.text=V\u00fd\u0161ka\: - -HierarchyControlPanel.heightLabel.text=0 - -HierarchyControlPanel.metaEdgesSettings.title=Nastaven\u00ed meta-hran - -HierarchyControlPanel.info.title=Meta-hrany - -HierarchyControlPanel.info.description=Meta hrany jsou hrany mezi skupinou a uzlem nebo mezi dv\u011bma skupinami. P\u0159edstavuj\u00ed \u0159\u00e1dn\u00e9 hrany mezi pod\u0159azen\u00fdmi skupin. - -HierarchyControlPanel.weightinfo.title=V\u00e1ha meta-hran - -HierarchyControlPanel.weightinfo.description=Meta-hrany jsou vytvo\u0159eny sou\u010dtem norm\u00e1ln\u00edch hran,jejich v\u00e1ha m\u016f\u017ee b\u00fdt suma nebo pr\u016fm\u011br v\u00e1hy hran. Nezapome\u0148te, \u017ee p\u0159i zm\u011bn\u011b parametru se v\u00e1ha v existuj\u00edc\u00edch hran\u00e1ch nezm\u011bn\u00ed. - -HierarchyControlPanel.labelAuto.text=Automatick\u00e9 vytvo\u0159en\u00ed meta-hran - -HierarchyControlPanel.labelWeight.text=V\u00e1ha meta-hran\: - -HierarchyControlPanel.sumRadio.label=Suma - -HierarchyControlPanel.avgRadio.label=Pr\u016fm\u011br - -HierarchyControlPanel.sumRadio.toolTipText=Suma v\u00e1hy hran - -HierarchyControlPanel.avgRadio.toolTipText=Pr\u016fm\u011br v\u00e1hy hran - -HierarchyControlPanel.heightLabel.toolTipText=V\u00fd\u0161ka hierarchie. Hodnoty v\u011bt\u0161\u00ed ne\u017e 'one' znamenaj\u00ed, \u017ee graf je hierarchick\u00fd. diff --git a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/Bundle_es.properties b/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/Bundle_es.properties deleted file mode 100644 index a86358ab27..0000000000 --- a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/Bundle_es.properties +++ /dev/null @@ -1,65 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:08+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -Actions/Window/org-gephi-desktop-hierarchy-HierarchyAction.instance=Jerarqu\u00eda - -CTL_HierarchyAction=Jerarqu\u00eda - -CTL_HierarchyTopComponent=Jerarqu\u00eda - -OpenIDE-Module-Short-Description=Addon de Visualizaci\u00f3n para la navegaci\u00f3n jer\u00e1rquica - -HierarchyAddonButton.title=Jerarqu\u00eda - -HierarchyControlPanel.showTreeLabel.toolTipText=Mostrar arbol - -HierarchyControlPanel.labelView.text=Ver\: - -HierarchyControlPanel.linkLevel=Nivel - -HierarchyControlPanel.linkLevel.nodes=nodos - -HierarchyControlPanel.linkLevel.leaves=Hojas - -HierarchyTopComponent.refreshButton.text=Refrescar - -HierarchyTopComponent.busyLabel.text=Refrescando... - -HierarchyTopComponent.labelLevelLimit.text=Cortar hojas\: - -HierarchyTopComponent.bar.level=Nivel - -HierarchyTopComponent.bar.levelmax=Ninguno - -HierarchyControlPanel.labelHeight.text=Altura\: - -HierarchyControlPanel.heightLabel.text=0 - -HierarchyControlPanel.metaEdgesSettings.title=Par\u00e1metros de las meta-aristas - -HierarchyControlPanel.info.title=Meta-aristas - -HierarchyControlPanel.info.description=Las meta-aristas con aristas entre un grupo de nodos y un nodo o entre 2 grupos. Representan las aristas adecuadas entre los descendientes de los grupos. - -HierarchyControlPanel.weightinfo.title=Peso de las meta-aristas - -HierarchyControlPanel.weightinfo.description=Las meta-aristas son creadas a partir de la agregaci\u00f3n de aristas normales, el peso de las meta-aristas puede ser la suma o el valor medio de los pesos de las aristas. Notar que el peso no ser\u00e1 cambiado en aristas ya existentes si cambias el par\u00e1metro. - -HierarchyControlPanel.labelAuto.text=Auto creaci\u00f3n de meta-aristas - -HierarchyControlPanel.labelWeight.text=Peso de las meta-aristas - -HierarchyControlPanel.sumRadio.label=Suma - -HierarchyControlPanel.avgRadio.label=Valor medio - -HierarchyControlPanel.sumRadio.toolTipText=Suma de los pesos de las aristas - -HierarchyControlPanel.avgRadio.toolTipText=Valor medio de los pesos de las aristas - -HierarchyControlPanel.heightLabel.toolTipText=La altura de la jerarqu\u00eda. Valores mayores que 1 significan que el grafo es jer\u00e1rquico diff --git a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/Bundle_fr.properties b/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/Bundle_fr.properties deleted file mode 100644 index a6d8d6dd97..0000000000 --- a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/Bundle_fr.properties +++ /dev/null @@ -1,65 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:08+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -Actions/Window/org-gephi-desktop-hierarchy-HierarchyAction.instance=Hi\u00e9rarchie - -CTL_HierarchyAction=Hi\u00e9rarchie - -CTL_HierarchyTopComponent=Hi\u00e9rarchie - -OpenIDE-Module-Short-Description=Greffon de visualisation pour la navigation hi\u00e9rarchique - -HierarchyAddonButton.title=Hi\u00e9rarchie - -HierarchyControlPanel.showTreeLabel.toolTipText=Afficher l'arbre - -HierarchyControlPanel.labelView.text=Voir\: - -HierarchyControlPanel.linkLevel=Niveau - -HierarchyControlPanel.linkLevel.nodes=noeuds - -HierarchyControlPanel.linkLevel.leaves=Feuilles... - -HierarchyTopComponent.refreshButton.text=Rafraichir - -HierarchyTopComponent.busyLabel.text=Rafraichissement... - -HierarchyTopComponent.labelLevelLimit.text=Couper les feuilles\: - -HierarchyTopComponent.bar.level=Niveau - -HierarchyTopComponent.bar.levelmax=Aucune - -HierarchyControlPanel.labelHeight.text=Hauteur\: - -HierarchyControlPanel.heightLabel.text=0 - -HierarchyControlPanel.metaEdgesSettings.title=Param\u00e8tres des m\u00e9ta-liens - -HierarchyControlPanel.info.title=M\u00e9ta-liens - -HierarchyControlPanel.info.description=Les m\u00e9ta-liens sont des liens entre un groupe et un noeud, ou entre deux groupes. Les repr\u00e9sentent les liens entre descendants des groupes. - -HierarchyControlPanel.weightinfo.title=Poids des m\u00e9ta-liens - -HierarchyControlPanel.weightinfo.description=Les m\u00e9ta-liens sont cr\u00e9\u00e9s par agr\u00e9gation de liens. Leur poids peut \u00eatre la somme ou la moyenne du poids de ces liens. Notez que le poids des liens n'en est pas affect\u00e9. - -HierarchyControlPanel.labelAuto.text=Cr\u00e9ation auto des m\u00e9ta-liens - -HierarchyControlPanel.labelWeight.text=Poids des m\u00e9ta-liens \: - -HierarchyControlPanel.sumRadio.label=Somme - -HierarchyControlPanel.avgRadio.label=Moyenne - -HierarchyControlPanel.sumRadio.toolTipText=Somme du poids des liens - -HierarchyControlPanel.avgRadio.toolTipText=Moyenne du poids des liens - -HierarchyControlPanel.heightLabel.toolTipText=Hauteur de la hi\u00e9rarchie. Un graphe est hi\u00e9rarchique lorsque sa valeur est sup\u00e9rieure \u00e0 un. diff --git a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/Bundle_ja.properties b/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/Bundle_ja.properties deleted file mode 100644 index 6a1ed15ac0..0000000000 --- a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/Bundle_ja.properties +++ /dev/null @@ -1,65 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-04 10\:57+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -Actions/Window/org-gephi-desktop-hierarchy-HierarchyAction.instance=\u968e\u5c64 - -CTL_HierarchyAction=\u968e\u5c64 - -CTL_HierarchyTopComponent=\u968e\u5c64 - -OpenIDE-Module-Short-Description=\u968e\u5c64\u63a2\u67fb\u306e\u305f\u3081\u306e\u8996\u899a\u5316\u30a2\u30c9\u30aa\u30f3 - -HierarchyAddonButton.title=\u968e\u5c64 - -HierarchyControlPanel.showTreeLabel.toolTipText=\u6a39\u5f62\u56f3\u3092\u8868\u793a - -HierarchyControlPanel.labelView.text=\u95b2\u89a7\: - -HierarchyControlPanel.linkLevel=\u30ec\u30d9\u30eb - -HierarchyControlPanel.linkLevel.nodes=\u30ce\u30fc\u30c9 - -HierarchyControlPanel.linkLevel.leaves=\u8449... - -HierarchyTopComponent.refreshButton.text=\u66f4\u65b0 - -HierarchyTopComponent.busyLabel.text=\u66f4\u65b0... - -HierarchyTopComponent.labelLevelLimit.text=\u8449\u3092\u30ab\u30c3\u30c8\: - -HierarchyTopComponent.bar.level=\u30ec\u30d9\u30eb - -HierarchyTopComponent.bar.levelmax=\u306a\u3057 - -HierarchyControlPanel.labelHeight.text=\u9ad8\u3055\: - -HierarchyControlPanel.heightLabel.text=0 - -HierarchyControlPanel.metaEdgesSettings.title=\u30e1\u30bf\u8fba\u306e\u8a2d\u5b9a - -HierarchyControlPanel.info.title=\u30e1\u30bf\u8fba - -HierarchyControlPanel.info.description=\u30e1\u30bf\u8fba\u306f\u3001\u30b0\u30eb\u30fc\u30d7\u3068\u30ce\u30fc\u30c9\u9593\u307e\u305f\u306f2\u3064\u306e\u30b0\u30eb\u30fc\u30d7\u9593\u306e\u8fba\u3067\u3059\u3002\u5f7c\u3089\u306f\u305d\u306e\u30b0\u30eb\u30fc\u30d7\u306e\u5b50\u5b6b\u3068\u306e\u9593\u306e\u9069\u5207\u306a\u8fba\u3092\u8868\u3057\u307e\u3059\u3002 - -HierarchyControlPanel.weightinfo.title=\u30e1\u30bf\u8fba\u306e\u91cd\u307f - -HierarchyControlPanel.weightinfo.description=\u30e1\u30bf\u8fba\u306f\u6b63\u898f\u306e\u8fba\u306e\u96c6\u307e\u308a\u304b\u3089\u751f\u6210\u3055\u308c\u3001\u30e1\u30bf\u8fba\u306e\u91cd\u307f\u306f\u8fba\u306e\u91cd\u307f\u306e\u5408\u8a08\u304b\u5e73\u5747\u3067\u3059\u3002\u91cd\u307f\u306f\u5b58\u5728\u3059\u308b\u8fba\u4e0a\u3067\u306f\u3042\u306a\u305f\u304c\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u5909\u3048\u3066\u3082\u5909\u308f\u3089\u306a\u3044\u3053\u3068\u306b\u6ce8\u610f\u3057\u3066\u4e0b\u3055\u3044\u3002 - -HierarchyControlPanel.labelAuto.text=\u81ea\u52d5\u30e1\u30bf\u8fba\u751f\u6210 - -HierarchyControlPanel.labelWeight.text=\u30e1\u30bf\u8fba\u306e\u91cd\u307f\: - -HierarchyControlPanel.sumRadio.label=\u5408\u8a08 - -HierarchyControlPanel.avgRadio.label=\u5e73\u5747 - -HierarchyControlPanel.sumRadio.toolTipText=\u8fba\u306e\u91cd\u307f\u306e\u5408\u8a08 - -HierarchyControlPanel.avgRadio.toolTipText=\u8fba\u306e\u91cd\u307f\u306e\u5e73\u5747 - -HierarchyControlPanel.heightLabel.toolTipText=\u968e\u5c64\u306e\u9ad8\u3055\u3002 '\uff11'\u3088\u308a\u5927\u304d\u3044\u5024\u306f\u3001\u30b0\u30e9\u30d5\u304c\u968e\u5c64\u7684\u3067\u3042\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002 diff --git a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/Bundle_pt_BR.properties b/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/Bundle_pt_BR.properties deleted file mode 100644 index bbe5deaa11..0000000000 --- a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/Bundle_pt_BR.properties +++ /dev/null @@ -1,65 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-07 13\:20+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -Actions/Window/org-gephi-desktop-hierarchy-HierarchyAction.instance=Hierarquia - -CTL_HierarchyAction=Hierarquia - -CTL_HierarchyTopComponent=Hierarquia - -OpenIDE-Module-Short-Description=Add-on de visualiza\u00e7\u00e3o para navega\u00e7\u00e3o hier\u00e1rquica - -HierarchyAddonButton.title=Hierarquia - -HierarchyControlPanel.showTreeLabel.toolTipText=Exibir \u00e1rvore - -HierarchyControlPanel.labelView.text=Ver\: - -HierarchyControlPanel.linkLevel=N\u00edvel - -HierarchyControlPanel.linkLevel.nodes=n\u00f3s - -HierarchyControlPanel.linkLevel.leaves=Folhas... - -HierarchyTopComponent.refreshButton.text=Atualizar - -HierarchyTopComponent.busyLabel.text=Atualizando... - -HierarchyTopComponent.labelLevelLimit.text=Cortar folhas\: - -HierarchyTopComponent.bar.level=N\u00edvel - -HierarchyTopComponent.bar.levelmax=Nenhum - -HierarchyControlPanel.labelHeight.text=Altura\: - -HierarchyControlPanel.heightLabel.text=0 - -HierarchyControlPanel.metaEdgesSettings.title=Configura\u00e7\u00f5es de meta-arestas - -HierarchyControlPanel.info.title=Meta-arestas - -HierarchyControlPanel.info.description=Meta-arestas s\u00e3o arestas entre um grupo e um n\u00f3 ou entre dois grupos. Representam as arestas adequadas entre os descendentes dos grupos. - -HierarchyControlPanel.weightinfo.title=Peso das meta-arestas - -HierarchyControlPanel.weightinfo.description=Meta-arestas s\u00e3o criadas a partir da agrega\u00e7\u00e3o de arestas normais. O peso das meta-arestas pode ser a soma ou o valor m\u00e9dio dos pesos das arestas. Note que o peso n\u00e3o ser\u00e1 alterado nas arestas j\u00e1 existentes se o par\u00e2metro for alterado. - -HierarchyControlPanel.labelAuto.text=Cria\u00e7\u00e3o autom\u00e1tica de meta-arestas - -HierarchyControlPanel.labelWeight.text=Peso das meta-arestas\: - -HierarchyControlPanel.sumRadio.label=Soma - -HierarchyControlPanel.avgRadio.label=M\u00e9dia - -HierarchyControlPanel.sumRadio.toolTipText=Soma do peso das arestas - -HierarchyControlPanel.avgRadio.toolTipText=M\u00e9dia do peso das arestas - -HierarchyControlPanel.heightLabel.toolTipText=Altura da hierarquia. Valores maiores do que 'um' significam que o grafo \u00e9 hier\u00e1rquico. diff --git a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/Bundle_ru.properties b/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/Bundle_ru.properties deleted file mode 100644 index e39f6cdbd3..0000000000 --- a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/Bundle_ru.properties +++ /dev/null @@ -1,65 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-13 20\:49+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -Actions/Window/org-gephi-desktop-hierarchy-HierarchyAction.instance=\u0418\u0435\u0440\u0430\u0440\u0445\u0438\u044f - -CTL_HierarchyAction=\u0418\u0435\u0440\u0430\u0440\u0445\u0438\u044f - -CTL_HierarchyTopComponent=\u0418\u0435\u0440\u0430\u0440\u0445\u0438\u044f - -OpenIDE-Module-Short-Description=\u041d\u0430\u0434\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0434\u043b\u044f \u0432\u0438\u0437\u0443\u0430\u043b\u044c\u043d\u043e\u0439 \u043d\u0430\u0432\u0438\u0433\u0430\u0446\u0438\u0438 \u043f\u043e \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 - -HierarchyAddonButton.title=\u0418\u0435\u0440\u0430\u0440\u0445\u0438\u044f - -HierarchyControlPanel.showTreeLabel.toolTipText=\u041e\u0442\u043e\u0431\u0440\u0430\u0437\u0438\u0442\u044c \u0434\u0435\u0440\u0435\u0432\u043e - -HierarchyControlPanel.labelView.text=\u0412\u0438\u0434\: - -HierarchyControlPanel.linkLevel=\u0423\u0440\u043e\u0432\u0435\u043d\u044c - -HierarchyControlPanel.linkLevel.nodes=\u0443\u0437\u043b\u043e\u0432 - -HierarchyControlPanel.linkLevel.leaves=\u041b\u0438\u0441\u0442\u044c\u044f... - -HierarchyTopComponent.refreshButton.text=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c - -HierarchyTopComponent.busyLabel.text=\u041e\u0431\u043d\u043e\u0432\u043b\u044f\u0435\u0442\u0441\u044f... - -HierarchyTopComponent.labelLevelLimit.text=\u041e\u0442\u0440\u0435\u0437\u0430\u0442\u044c \u043b\u0438\u0441\u0442\u044c\u044f\: - -HierarchyTopComponent.bar.level=\u0423\u0440\u043e\u0432\u0435\u043d\u044c - -HierarchyTopComponent.bar.levelmax=\u041d\u0435\u0442 - -HierarchyControlPanel.labelHeight.text=\u0412\u044b\u0441\u043e\u0442\u0430\: - -HierarchyControlPanel.heightLabel.text=0 - -HierarchyControlPanel.metaEdgesSettings.title=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043c\u0435\u0442\u0430-\u0440\u0451\u0431\u0435\u0440 - -HierarchyControlPanel.info.title=\u041c\u0435\u0442\u0430-\u0440\u0451\u0431\u0440\u0430 - -HierarchyControlPanel.info.description=\u041c\u0435\u0442\u0430-\u0440\u0451\u0431\u0440\u0430 -- \u044d\u0442\u043e \u0440\u0451\u0431\u0440\u0430 \u043c\u0435\u0436\u0434\u0443 \u0443\u0437\u043b\u043e\u043c \u0438 \u0433\u0440\u0443\u043f\u043f\u043e\u0439 \u0438\u043b\u0438 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0433\u0440\u0443\u043f\u043f\u0430\u043c\u0438. \u041e\u043d\u0438 \u043e\u0442\u0440\u0430\u0436\u0430\u044e\u0442 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u0441\u0432\u044f\u0437\u0435\u0439 \u043c\u0435\u0436\u0434\u0443 \u0443\u0437\u043b\u0430\u043c\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u0433\u0440\u0443\u043f\u043f. - -HierarchyControlPanel.weightinfo.title=\u0412\u0435\u0441 \u043c\u0435\u0442\u0430-\u0440\u0451\u0431\u0435\u0440 - -HierarchyControlPanel.weightinfo.description=\u041c\u0435\u0442\u0430-\u0440\u0451\u0431\u0440\u0430 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u0443\u0442\u0451\u043c \u0430\u0433\u0440\u0435\u0433\u0430\u0446\u0438\u0438 \u043e\u0431\u044b\u0447\u043d\u044b\u0445 \u0440\u0451\u0431\u0435\u0440, \u0432\u0435\u0441 \u043c\u0435\u0442\u0430-\u0440\u0451\u0431\u0435\u0440 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u0443\u043c\u043c\u043e\u0439 \u0438\u043b\u0438 \u0441\u0440\u0435\u0434\u043d\u0438\u043c \u043f\u043e \u0432\u0435\u0441\u0430\u043c \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0440\u0451\u0431\u0435\u0440. \u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u0432\u0435\u0441\u0430 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0440\u0435\u0431\u0451\u0440 \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0441\u043c\u0435\u043d\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430. - -HierarchyControlPanel.labelAuto.text=\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043c\u0435\u0442\u0430-\u0440\u0451\u0431\u0435\u0440 - -HierarchyControlPanel.labelWeight.text=\u0412\u0435\u0441 \u043c\u0435\u0442\u0430-\u0440\u0451\u0431\u0435\u0440\: - -HierarchyControlPanel.sumRadio.label=\u0421\u0443\u043c\u043c\u0430 - -HierarchyControlPanel.avgRadio.label=\u0421\u0440\u0435\u0434\u043d\u0435\u0435 - -HierarchyControlPanel.sumRadio.toolTipText=\u0421\u0443\u043c\u043c\u0430 \u0432\u0435\u0441\u043e\u0432 \u0440\u0451\u0431\u0435\u0440 - -HierarchyControlPanel.avgRadio.toolTipText=\u0421\u0440\u0435\u0434\u043d\u0435\u0435 \u043f\u043e \u0432\u0435\u0441\u0430\u043c \u0440\u0451\u0431\u0435\u0440 - -HierarchyControlPanel.heightLabel.toolTipText=\u0412\u044b\u0441\u043e\u0442\u0430 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0431\u043e\u043b\u044c\u0448\u0438\u0435 \u0435\u0434\u0438\u043d\u0438\u0446\u044b, \u043e\u0437\u043d\u0430\u0447\u0430\u044e\u0442, \u0447\u0442\u043e \u0433\u0440\u0430\u0444 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0447\u0435\u0441\u043a\u0438\u0439. diff --git a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/Bundle_zh_CN.properties b/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/Bundle_zh_CN.properties deleted file mode 100644 index 00cb22f626..0000000000 --- a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/Bundle_zh_CN.properties +++ /dev/null @@ -1,64 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:16+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -Actions/Window/org-gephi-desktop-hierarchy-HierarchyAction.instance=\u7b49\u7ea7 - -CTL_HierarchyAction=\u7b49\u7ea7 - -CTL_HierarchyTopComponent=\u7b49\u7ea7 - -OpenIDE-Module-Short-Description=\u7b49\u7ea7\u5bfc\u822a\u7684\u53ef\u89c6\u5316\u63d2\u4ef6 - -HierarchyAddonButton.title=\u7b49\u7ea7 - -HierarchyControlPanel.showTreeLabel.toolTipText=\u663e\u793a\u6811\u5f62\u56fe - -HierarchyControlPanel.labelView.text=\u6d4f\u89c8\uff1a - -HierarchyControlPanel.linkLevel=\u6c34\u5e73 - -HierarchyControlPanel.linkLevel.nodes=\u8282\u70b9 - -HierarchyControlPanel.linkLevel.leaves=\u5206\u652f\u2026\u2026 - -HierarchyTopComponent.refreshButton.text=\u5237\u65b0 - -HierarchyTopComponent.busyLabel.text=\u5237\u65b0\u4e2d\u2026\u2026 - -HierarchyTopComponent.labelLevelLimit.text=\u5207\u9664\u5206\u652f - -HierarchyTopComponent.bar.level=\u6c34\u5e73 - -HierarchyTopComponent.bar.levelmax=\u65e0 - -HierarchyControlPanel.labelHeight.text=\u9ad8\u5ea6\uff1a - -HierarchyControlPanel.heightLabel.text=0 - -HierarchyControlPanel.metaEdgesSettings.title=Meta\u8fb9\u8bbe\u7f6e - -HierarchyControlPanel.info.title=Meta\u8fb9 - -HierarchyControlPanel.info.description=Meta\u8fb9\u662f\u7ec4\u548c\u4e00\u4e2a\u8282\u70b9\u6216\u8005\u4e24\u7ec4\u95f4\u7684\u8fb9\u3002\u5b83\u4eec\u4ee3\u8868\u7ec4\u95f4\u5b50\u8282\u70b9\u7684\u9002\u5f53\u7684\u8fb9\u7f18\u3002 - -HierarchyControlPanel.weightinfo.title=Meta\u8fb9\u6743\u91cd - -HierarchyControlPanel.weightinfo.description=meta\u8fb9\u4ece\u5e38\u89c4\u7684\u8fb9\u805a\u5408\u751f\u6210\uff0cmeta\u8fb9\u7684\u6743\u91cd\u53ef\u4ee5\u662f\u8fb9\u7684\u6743\u91cd\u7684\u603b\u548c\u6216\u8005\u5747\u503c\u3002\u6ce8\u610f\u5982\u679c\u4f60\u6539\u53d8\u53c2\u6570\uff0c\u73b0\u6709\u8fb9\u7684\u6743\u91cd\u4e0d\u4f1a\u6539\u53d8\u3002 - -HierarchyControlPanel.labelAuto.text=\u81ea\u52a8\u7684Meta\u8fb9\u751f\u6210 - -HierarchyControlPanel.labelWeight.text=meta\u8fb9\u6743\u91cd - -HierarchyControlPanel.sumRadio.label=\u603b\u548c - -HierarchyControlPanel.avgRadio.label=\u5e73\u5747 - -HierarchyControlPanel.sumRadio.toolTipText=\u8fb9\u6743\u91cd\u7684\u603b\u548c - -HierarchyControlPanel.avgRadio.toolTipText=\u8fb9\u6743\u91cd\u7684\u5e73\u5747 - -HierarchyControlPanel.heightLabel.toolTipText=\u7b49\u7ea7\u7684\u9ad8\u5ea6\u3002\u5927\u4e8e\u201c1\u201d\u7684\u503c\u8868\u793a\u56fe\u8bba\u662f\u5206\u7b49\u7ea7\u7684\u3002 diff --git a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/cs.po b/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/cs.po deleted file mode 100644 index d86e2a8c1b..0000000000 --- a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/cs.po +++ /dev/null @@ -1,106 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-26 15:58+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "Actions/Window/org-gephi-desktop-hierarchy-HierarchyAction.instance" -msgstr "Hierarchie" - -msgid "CTL_HierarchyAction" -msgstr "Hierarchie" - -msgid "CTL_HierarchyTopComponent" -msgstr "Hierarchie" - -msgid "OpenIDE-Module-Short-Description" -msgstr "DoplnΔ›k vizualizace pro navigaci hierarchie" - -msgid "HierarchyAddonButton.title" -msgstr "Hierarchie" - -msgid "HierarchyControlPanel.showTreeLabel.toolTipText" -msgstr "Zobrazit strom" - -msgid "HierarchyControlPanel.labelView.text" -msgstr "ZobraznΓ­:" - -msgid "HierarchyControlPanel.linkLevel" -msgstr "Úroveň" - -msgid "HierarchyControlPanel.linkLevel.nodes" -msgstr "uzly" - -msgid "HierarchyControlPanel.linkLevel.leaves" -msgstr "Listy..." - -msgid "HierarchyTopComponent.refreshButton.text" -msgstr "Obnovit" - -msgid "HierarchyTopComponent.busyLabel.text" -msgstr "ObnovovΓ‘nΓ­..." - -msgid "HierarchyTopComponent.labelLevelLimit.text" -msgstr "OΕ™Γ­znout listy:" - -msgid "HierarchyTopComponent.bar.level" -msgstr "Úroveň" - -msgid "HierarchyTopComponent.bar.levelmax" -msgstr "Ε½Γ‘dnΓ©" - -msgid "HierarchyControlPanel.labelHeight.text" -msgstr "VΓ½Ε‘ka:" - -msgid "HierarchyControlPanel.heightLabel.text" -msgstr "0" - -msgid "HierarchyControlPanel.metaEdgesSettings.title" -msgstr "NastavenΓ­ meta-hran" - -msgid "HierarchyControlPanel.info.title" -msgstr "Meta-hrany" - -msgid "HierarchyControlPanel.info.description" -msgstr "Meta hrany jsou hrany mezi skupinou a uzlem nebo mezi dvΔ›ma skupinami. PΕ™edstavujΓ­ Ε™Γ‘dnΓ© hrany mezi podΕ™azenΓ½mi skupin." - -msgid "HierarchyControlPanel.weightinfo.title" -msgstr "VΓ‘ha meta-hran" - -msgid "HierarchyControlPanel.weightinfo.description" -msgstr "Meta-hrany jsou vytvoΕ™eny součtem normΓ‘lnΓ­ch hran,jejich vΓ‘ha mΕ―ΕΎe bΓ½t suma nebo prΕ―mΔ›r vΓ‘hy hran. Nezapomeňte, ΕΎe pΕ™i zmΔ›nΔ› parametru se vΓ‘ha v existujΓ­cΓ­ch hranΓ‘ch nezmΔ›nΓ­." - -msgid "HierarchyControlPanel.labelAuto.text" -msgstr "AutomatickΓ© vytvoΕ™enΓ­ meta-hran" - -msgid "HierarchyControlPanel.labelWeight.text" -msgstr "VΓ‘ha meta-hran:" - -msgid "HierarchyControlPanel.sumRadio.label" -msgstr "Suma" - -msgid "HierarchyControlPanel.avgRadio.label" -msgstr "PrΕ―mΔ›r" - -msgid "HierarchyControlPanel.sumRadio.toolTipText" -msgstr "Suma vΓ‘hy hran" - -msgid "HierarchyControlPanel.avgRadio.toolTipText" -msgstr "PrΕ―mΔ›r vΓ‘hy hran" - -msgid "HierarchyControlPanel.heightLabel.toolTipText" -msgstr "VΓ½Ε‘ka hierarchie. Hodnoty vΔ›tΕ‘Γ­ neΕΎ 'one' znamenajΓ­, ΕΎe graf je hierarchickΓ½." diff --git a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/es.po b/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/es.po deleted file mode 100644 index ddb58fa11b..0000000000 --- a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/es.po +++ /dev/null @@ -1,106 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:08+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "Actions/Window/org-gephi-desktop-hierarchy-HierarchyAction.instance" -msgstr "JerarquΓ­a" - -msgid "CTL_HierarchyAction" -msgstr "JerarquΓ­a" - -msgid "CTL_HierarchyTopComponent" -msgstr "JerarquΓ­a" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Addon de VisualizaciΓ³n para la navegaciΓ³n jerΓ‘rquica" - -msgid "HierarchyAddonButton.title" -msgstr "JerarquΓ­a" - -msgid "HierarchyControlPanel.showTreeLabel.toolTipText" -msgstr "Mostrar arbol" - -msgid "HierarchyControlPanel.labelView.text" -msgstr "Ver:" - -msgid "HierarchyControlPanel.linkLevel" -msgstr "Nivel" - -msgid "HierarchyControlPanel.linkLevel.nodes" -msgstr "nodos" - -msgid "HierarchyControlPanel.linkLevel.leaves" -msgstr "Hojas" - -msgid "HierarchyTopComponent.refreshButton.text" -msgstr "Refrescar" - -msgid "HierarchyTopComponent.busyLabel.text" -msgstr "Refrescando..." - -msgid "HierarchyTopComponent.labelLevelLimit.text" -msgstr "Cortar hojas:" - -msgid "HierarchyTopComponent.bar.level" -msgstr "Nivel" - -msgid "HierarchyTopComponent.bar.levelmax" -msgstr "Ninguno" - -msgid "HierarchyControlPanel.labelHeight.text" -msgstr "Altura:" - -msgid "HierarchyControlPanel.heightLabel.text" -msgstr "0" - -msgid "HierarchyControlPanel.metaEdgesSettings.title" -msgstr "ParΓ‘metros de las meta-aristas" - -msgid "HierarchyControlPanel.info.title" -msgstr "Meta-aristas" - -msgid "HierarchyControlPanel.info.description" -msgstr "Las meta-aristas con aristas entre un grupo de nodos y un nodo o entre 2 grupos. Representan las aristas adecuadas entre los descendientes de los grupos." - -msgid "HierarchyControlPanel.weightinfo.title" -msgstr "Peso de las meta-aristas" - -msgid "HierarchyControlPanel.weightinfo.description" -msgstr "Las meta-aristas son creadas a partir de la agregaciΓ³n de aristas normales, el peso de las meta-aristas puede ser la suma o el valor medio de los pesos de las aristas. Notar que el peso no serΓ‘ cambiado en aristas ya existentes si cambias el parΓ‘metro." - -msgid "HierarchyControlPanel.labelAuto.text" -msgstr "Auto creaciΓ³n de meta-aristas" - -msgid "HierarchyControlPanel.labelWeight.text" -msgstr "Peso de las meta-aristas" - -msgid "HierarchyControlPanel.sumRadio.label" -msgstr "Suma" - -msgid "HierarchyControlPanel.avgRadio.label" -msgstr "Valor medio" - -msgid "HierarchyControlPanel.sumRadio.toolTipText" -msgstr "Suma de los pesos de las aristas" - -msgid "HierarchyControlPanel.avgRadio.toolTipText" -msgstr "Valor medio de los pesos de las aristas" - -msgid "HierarchyControlPanel.heightLabel.toolTipText" -msgstr "La altura de la jerarquΓ­a. Valores mayores que 1 significan que el grafo es jerΓ‘rquico" diff --git a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/fr.po b/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/fr.po deleted file mode 100644 index 2c4a5a1431..0000000000 --- a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/fr.po +++ /dev/null @@ -1,106 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:08+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "Actions/Window/org-gephi-desktop-hierarchy-HierarchyAction.instance" -msgstr "HiΓ©rarchie" - -msgid "CTL_HierarchyAction" -msgstr "HiΓ©rarchie" - -msgid "CTL_HierarchyTopComponent" -msgstr "HiΓ©rarchie" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Greffon de visualisation pour la navigation hiΓ©rarchique" - -msgid "HierarchyAddonButton.title" -msgstr "HiΓ©rarchie" - -msgid "HierarchyControlPanel.showTreeLabel.toolTipText" -msgstr "Afficher l'arbre" - -msgid "HierarchyControlPanel.labelView.text" -msgstr "Voir:" - -msgid "HierarchyControlPanel.linkLevel" -msgstr "Niveau" - -msgid "HierarchyControlPanel.linkLevel.nodes" -msgstr "noeuds" - -msgid "HierarchyControlPanel.linkLevel.leaves" -msgstr "Feuilles..." - -msgid "HierarchyTopComponent.refreshButton.text" -msgstr "Rafraichir" - -msgid "HierarchyTopComponent.busyLabel.text" -msgstr "Rafraichissement..." - -msgid "HierarchyTopComponent.labelLevelLimit.text" -msgstr "Couper les feuilles:" - -msgid "HierarchyTopComponent.bar.level" -msgstr "Niveau" - -msgid "HierarchyTopComponent.bar.levelmax" -msgstr "Aucune" - -msgid "HierarchyControlPanel.labelHeight.text" -msgstr "Hauteur:" - -msgid "HierarchyControlPanel.heightLabel.text" -msgstr "0" - -msgid "HierarchyControlPanel.metaEdgesSettings.title" -msgstr "ParamΓ¨tres des mΓ©ta-liens" - -msgid "HierarchyControlPanel.info.title" -msgstr "MΓ©ta-liens" - -msgid "HierarchyControlPanel.info.description" -msgstr "Les mΓ©ta-liens sont des liens entre un groupe et un noeud, ou entre deux groupes. Les reprΓ©sentent les liens entre descendants des groupes." - -msgid "HierarchyControlPanel.weightinfo.title" -msgstr "Poids des mΓ©ta-liens" - -msgid "HierarchyControlPanel.weightinfo.description" -msgstr "Les mΓ©ta-liens sont créés par agrΓ©gation de liens. Leur poids peut Γͺtre la somme ou la moyenne du poids de ces liens. Notez que le poids des liens n'en est pas affectΓ©." - -msgid "HierarchyControlPanel.labelAuto.text" -msgstr "CrΓ©ation auto des mΓ©ta-liens" - -msgid "HierarchyControlPanel.labelWeight.text" -msgstr "Poids des mΓ©ta-liens :" - -msgid "HierarchyControlPanel.sumRadio.label" -msgstr "Somme" - -msgid "HierarchyControlPanel.avgRadio.label" -msgstr "Moyenne" - -msgid "HierarchyControlPanel.sumRadio.toolTipText" -msgstr "Somme du poids des liens" - -msgid "HierarchyControlPanel.avgRadio.toolTipText" -msgstr "Moyenne du poids des liens" - -msgid "HierarchyControlPanel.heightLabel.toolTipText" -msgstr "Hauteur de la hiΓ©rarchie. Un graphe est hiΓ©rarchique lorsque sa valeur est supΓ©rieure Γ  un." diff --git a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/ja.po b/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/ja.po deleted file mode 100644 index 74b45bd173..0000000000 --- a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/ja.po +++ /dev/null @@ -1,106 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-04 10:57+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "Actions/Window/org-gephi-desktop-hierarchy-HierarchyAction.instance" -msgstr "階局" - -msgid "CTL_HierarchyAction" -msgstr "階局" - -msgid "CTL_HierarchyTopComponent" -msgstr "階局" - -msgid "OpenIDE-Module-Short-Description" -msgstr "階局排査γγŸγ‚γθ¦–θ¦šεŒ–γ‚’ドγ‚ͺン" - -msgid "HierarchyAddonButton.title" -msgstr "階局" - -msgid "HierarchyControlPanel.showTreeLabel.toolTipText" -msgstr "樹归図を葨瀺" - -msgid "HierarchyControlPanel.labelView.text" -msgstr "閲覧:" - -msgid "HierarchyControlPanel.linkLevel" -msgstr "レベル" - -msgid "HierarchyControlPanel.linkLevel.nodes" -msgstr "γƒŽγƒΌγƒ‰" - -msgid "HierarchyControlPanel.linkLevel.leaves" -msgstr "葉..." - -msgid "HierarchyTopComponent.refreshButton.text" -msgstr "ζ›΄ζ–°" - -msgid "HierarchyTopComponent.busyLabel.text" -msgstr "ζ›΄ζ–°..." - -msgid "HierarchyTopComponent.labelLevelLimit.text" -msgstr "θ‘‰γ‚’γ‚«γƒƒγƒˆ:" - -msgid "HierarchyTopComponent.bar.level" -msgstr "レベル" - -msgid "HierarchyTopComponent.bar.levelmax" -msgstr "γͺし" - -msgid "HierarchyControlPanel.labelHeight.text" -msgstr "ι«˜γ•:" - -msgid "HierarchyControlPanel.heightLabel.text" -msgstr "0" - -msgid "HierarchyControlPanel.metaEdgesSettings.title" -msgstr "パタ辺γθ¨­εš" - -msgid "HierarchyControlPanel.info.title" -msgstr "パタ辺" - -msgid "HierarchyControlPanel.info.description" -msgstr "γƒ‘γ‚ΏθΎΊγ―γ€γ‚°γƒ«γƒΌγƒ—γ¨γƒŽγƒΌγƒ‰ι–“γΎγŸγ―2぀γγ‚°γƒ«γƒΌγƒ—ι–“γθΎΊγ§γ™γ€‚彼らはそγγ‚°γƒ«γƒΌγƒ—γε­ε­«γ¨γι–“γι©εˆ‡γͺ辺を葨します。" - -msgid "HierarchyControlPanel.weightinfo.title" -msgstr "パタ辺γι‡γΏ" - -msgid "HierarchyControlPanel.weightinfo.description" -msgstr "パタ辺は正規γθΎΊγι›†γΎγ‚Šγ‹γ‚‰η”Ÿζˆγ•γ‚Œγ€γƒ‘γ‚ΏθΎΊγι‡γΏγ―θΎΊγι‡γΏγεˆθ¨ˆγ‹εΉ³ε‡γ§γ™γ€‚ι‡γΏγ―ε­˜εœ¨γ™γ‚‹θΎΊδΈŠγ§γ―γ‚γͺγŸγŒγƒ‘γƒ©γƒ‘γƒΌγ‚Ώγ‚’ε€‰γˆγ¦γ‚‚ε€‰γ‚γ‚‰γͺいことに注意して下さい。" - -msgid "HierarchyControlPanel.labelAuto.text" -msgstr "θ‡ͺε‹•γƒ‘γ‚ΏθΎΊη”Ÿζˆ" - -msgid "HierarchyControlPanel.labelWeight.text" -msgstr "パタ辺γι‡γΏ:" - -msgid "HierarchyControlPanel.sumRadio.label" -msgstr "合計" - -msgid "HierarchyControlPanel.avgRadio.label" -msgstr "平均" - -msgid "HierarchyControlPanel.sumRadio.toolTipText" -msgstr "θΎΊγι‡γΏγεˆθ¨ˆ" - -msgid "HierarchyControlPanel.avgRadio.toolTipText" -msgstr "θΎΊγι‡γΏγεΉ³ε‡" - -msgid "HierarchyControlPanel.heightLabel.toolTipText" -msgstr "階局γι«˜γ•。 'οΌ‘'γ‚ˆγ‚Šε€§γγ„ε€€γ―γ€γ‚°γƒ©γƒ•γŒιšŽε±€ηš„γ§γ‚γ‚‹γ“γ¨γ‚’ζ„ε‘³γ—γΎγ™γ€‚" diff --git a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/org-gephi-desktop-hierarchy.pot b/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/org-gephi-desktop-hierarchy.pot deleted file mode 100644 index 7d6d9018bc..0000000000 --- a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/org-gephi-desktop-hierarchy.pot +++ /dev/null @@ -1,110 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "Actions/Window/org-gephi-desktop-hierarchy-HierarchyAction.instance" -msgstr "Hierarchy" - -msgid "CTL_HierarchyAction" -msgstr "Hierarchy" - -msgid "CTL_HierarchyTopComponent" -msgstr "Hierarchy" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Visualization addon for hierarchy navigation" - -msgid "HierarchyAddonButton.title" -msgstr "Hierarchy" - -msgid "HierarchyControlPanel.showTreeLabel.toolTipText" -msgstr "Show Tree" - -msgid "HierarchyControlPanel.labelView.text" -msgstr "View:" - -msgid "HierarchyControlPanel.linkLevel" -msgstr "Level" - -msgid "HierarchyControlPanel.linkLevel.nodes" -msgstr "nodes" - -msgid "HierarchyControlPanel.linkLevel.leaves" -msgstr "Leaves..." - -msgid "HierarchyTopComponent.refreshButton.text" -msgstr "Refresh" - -msgid "HierarchyTopComponent.busyLabel.text" -msgstr "Refreshing..." - -msgid "HierarchyTopComponent.labelLevelLimit.text" -msgstr "Cut leaves:" - -msgid "HierarchyTopComponent.bar.level" -msgstr "Level" - -msgid "HierarchyTopComponent.bar.levelmax" -msgstr "None" - -msgid "HierarchyControlPanel.labelHeight.text" -msgstr "Height:" - -msgid "HierarchyControlPanel.heightLabel.text" -msgstr "0" - -msgid "HierarchyControlPanel.metaEdgesSettings.title" -msgstr "Meta-edges settings" - -msgid "HierarchyControlPanel.info.title" -msgstr "Meta-edges" - -msgid "HierarchyControlPanel.info.description" -msgstr "" -"Meta edges are edges between a group and a node or between two groups. They " -"represents proper edges between groups' descendants." - -msgid "HierarchyControlPanel.weightinfo.title" -msgstr "Meta-edges weight" - -msgid "HierarchyControlPanel.weightinfo.description" -msgstr "" -"Meta-edges are created from the aggregation of regular edges, the weight of " -"meta edges can be the sum or the average of the edges' weight. Note the " -"weight is not changed on existing edges if you change the parameter." - -msgid "HierarchyControlPanel.labelAuto.text" -msgstr "Auto meta-edges creation" - -msgid "HierarchyControlPanel.labelWeight.text" -msgstr "Meta-Edges weight:" - -msgid "HierarchyControlPanel.sumRadio.label" -msgstr "Sum" - -msgid "HierarchyControlPanel.avgRadio.label" -msgstr "Average" - -msgid "HierarchyControlPanel.sumRadio.toolTipText" -msgstr "Sum of edges weight" - -msgid "HierarchyControlPanel.avgRadio.toolTipText" -msgstr "Average of edge weight" - -msgid "HierarchyControlPanel.heightLabel.toolTipText" -msgstr "" -"The height of the hierarchy. Values greater than 'one' means the graph is " -"hierarchical." diff --git a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/pt_BR.po b/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/pt_BR.po deleted file mode 100644 index 5640f9c92f..0000000000 --- a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/pt_BR.po +++ /dev/null @@ -1,106 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-07 13:20+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "Actions/Window/org-gephi-desktop-hierarchy-HierarchyAction.instance" -msgstr "Hierarquia" - -msgid "CTL_HierarchyAction" -msgstr "Hierarquia" - -msgid "CTL_HierarchyTopComponent" -msgstr "Hierarquia" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Add-on de visualizaΓ§Γ£o para navegaΓ§Γ£o hierΓ‘rquica" - -msgid "HierarchyAddonButton.title" -msgstr "Hierarquia" - -msgid "HierarchyControlPanel.showTreeLabel.toolTipText" -msgstr "Exibir Γ‘rvore" - -msgid "HierarchyControlPanel.labelView.text" -msgstr "Ver:" - -msgid "HierarchyControlPanel.linkLevel" -msgstr "NΓ­vel" - -msgid "HierarchyControlPanel.linkLevel.nodes" -msgstr "nΓ³s" - -msgid "HierarchyControlPanel.linkLevel.leaves" -msgstr "Folhas..." - -msgid "HierarchyTopComponent.refreshButton.text" -msgstr "Atualizar" - -msgid "HierarchyTopComponent.busyLabel.text" -msgstr "Atualizando..." - -msgid "HierarchyTopComponent.labelLevelLimit.text" -msgstr "Cortar folhas:" - -msgid "HierarchyTopComponent.bar.level" -msgstr "NΓ­vel" - -msgid "HierarchyTopComponent.bar.levelmax" -msgstr "Nenhum" - -msgid "HierarchyControlPanel.labelHeight.text" -msgstr "Altura:" - -msgid "HierarchyControlPanel.heightLabel.text" -msgstr "0" - -msgid "HierarchyControlPanel.metaEdgesSettings.title" -msgstr "ConfiguraΓ§Γ΅es de meta-arestas" - -msgid "HierarchyControlPanel.info.title" -msgstr "Meta-arestas" - -msgid "HierarchyControlPanel.info.description" -msgstr "Meta-arestas sΓ£o arestas entre um grupo e um nΓ³ ou entre dois grupos. Representam as arestas adequadas entre os descendentes dos grupos." - -msgid "HierarchyControlPanel.weightinfo.title" -msgstr "Peso das meta-arestas" - -msgid "HierarchyControlPanel.weightinfo.description" -msgstr "Meta-arestas sΓ£o criadas a partir da agregaΓ§Γ£o de arestas normais. O peso das meta-arestas pode ser a soma ou o valor mΓ©dio dos pesos das arestas. Note que o peso nΓ£o serΓ‘ alterado nas arestas jΓ‘ existentes se o parΓ’metro for alterado." - -msgid "HierarchyControlPanel.labelAuto.text" -msgstr "CriaΓ§Γ£o automΓ‘tica de meta-arestas" - -msgid "HierarchyControlPanel.labelWeight.text" -msgstr "Peso das meta-arestas:" - -msgid "HierarchyControlPanel.sumRadio.label" -msgstr "Soma" - -msgid "HierarchyControlPanel.avgRadio.label" -msgstr "MΓ©dia" - -msgid "HierarchyControlPanel.sumRadio.toolTipText" -msgstr "Soma do peso das arestas" - -msgid "HierarchyControlPanel.avgRadio.toolTipText" -msgstr "MΓ©dia do peso das arestas" - -msgid "HierarchyControlPanel.heightLabel.toolTipText" -msgstr "Altura da hierarquia. Valores maiores do que 'um' significam que o grafo Γ© hierΓ‘rquico." diff --git a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/resources/bulb.png b/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/resources/bulb.png deleted file mode 100644 index beb0732344..0000000000 Binary files a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/resources/bulb.png and /dev/null differ diff --git a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/resources/information-small.png b/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/resources/information-small.png deleted file mode 100644 index ace0fc6f84..0000000000 Binary files a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/resources/information-small.png and /dev/null differ diff --git a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/resources/tree.png b/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/resources/tree.png deleted file mode 100644 index 2f871a0e42..0000000000 Binary files a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/resources/tree.png and /dev/null differ diff --git a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/ru.po b/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/ru.po deleted file mode 100644 index b0da6caeb3..0000000000 --- a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/ru.po +++ /dev/null @@ -1,106 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-13 20:49+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "Actions/Window/org-gephi-desktop-hierarchy-HierarchyAction.instance" -msgstr "Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ" - -msgid "CTL_HierarchyAction" -msgstr "Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ" - -msgid "CTL_HierarchyTopComponent" -msgstr "Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Надстройка для Π²ΠΈΠ·ΡƒΠ°Π»ΡŒΠ½ΠΎΠΉ Π½Π°Π²ΠΈΠ³Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ" - -msgid "HierarchyAddonButton.title" -msgstr "Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ" - -msgid "HierarchyControlPanel.showTreeLabel.toolTipText" -msgstr "ΠžΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π΄Π΅Ρ€Π΅Π²ΠΎ" - -msgid "HierarchyControlPanel.labelView.text" -msgstr "Π’ΠΈΠ΄:" - -msgid "HierarchyControlPanel.linkLevel" -msgstr "Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ" - -msgid "HierarchyControlPanel.linkLevel.nodes" -msgstr "ΡƒΠ·Π»ΠΎΠ²" - -msgid "HierarchyControlPanel.linkLevel.leaves" -msgstr "Π›ΠΈΡΡ‚ΡŒΡ..." - -msgid "HierarchyTopComponent.refreshButton.text" -msgstr "ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ" - -msgid "HierarchyTopComponent.busyLabel.text" -msgstr "ΠžΠ±Π½ΠΎΠ²Π»ΡΠ΅Ρ‚ΡΡ..." - -msgid "HierarchyTopComponent.labelLevelLimit.text" -msgstr "ΠžΡ‚Ρ€Π΅Π·Π°Ρ‚ΡŒ Π»ΠΈΡΡ‚ΡŒΡ:" - -msgid "HierarchyTopComponent.bar.level" -msgstr "Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ" - -msgid "HierarchyTopComponent.bar.levelmax" -msgstr "НСт" - -msgid "HierarchyControlPanel.labelHeight.text" -msgstr "Высота:" - -msgid "HierarchyControlPanel.heightLabel.text" -msgstr "0" - -msgid "HierarchyControlPanel.metaEdgesSettings.title" -msgstr "Настройки ΠΌΠ΅Ρ‚Π°-Ρ€Ρ‘Π±Π΅Ρ€" - -msgid "HierarchyControlPanel.info.title" -msgstr "ΠœΠ΅Ρ‚Π°-Ρ€Ρ‘Π±Ρ€Π°" - -msgid "HierarchyControlPanel.info.description" -msgstr "ΠœΠ΅Ρ‚Π°-Ρ€Ρ‘Π±Ρ€Π° -- это Ρ€Ρ‘Π±Ρ€Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΡƒΠ·Π»ΠΎΠΌ ΠΈ Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ ΠΈΠ»ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя Π³Ρ€ΡƒΠΏΠΏΠ°ΠΌΠΈ. Они ΠΎΡ‚Ρ€Π°ΠΆΠ°ΡŽΡ‚ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ связСй ΠΌΠ΅ΠΆΠ΄Ρƒ ΡƒΠ·Π»Π°ΠΌΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… Π³Ρ€ΡƒΠΏΠΏ." - -msgid "HierarchyControlPanel.weightinfo.title" -msgstr "ВСс ΠΌΠ΅Ρ‚Π°-Ρ€Ρ‘Π±Π΅Ρ€" - -msgid "HierarchyControlPanel.weightinfo.description" -msgstr "ΠœΠ΅Ρ‚Π°-Ρ€Ρ‘Π±Ρ€Π° ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ ΠΏΡƒΡ‚Ρ‘ΠΌ Π°Π³Ρ€Π΅Π³Π°Ρ†ΠΈΠΈ ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹Ρ… Ρ€Ρ‘Π±Π΅Ρ€, вСс ΠΌΠ΅Ρ‚Π°-Ρ€Ρ‘Π±Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ суммой ΠΈΠ»ΠΈ срСдним ΠΏΠΎ вСсам Π°Π³Ρ€Π΅Π³ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… Ρ€Ρ‘Π±Π΅Ρ€. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅, Ρ‡Ρ‚ΠΎ вСса ΡƒΠΆΠ΅ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Ρ€Π΅Π±Ρ‘Ρ€ Π½Π΅ измСняСтся ΠΏΡ€ΠΈ смСнС значСния Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°." - -msgid "HierarchyControlPanel.labelAuto.text" -msgstr "АвтоматичСскоС созданиС ΠΌΠ΅Ρ‚Π°-Ρ€Ρ‘Π±Π΅Ρ€" - -msgid "HierarchyControlPanel.labelWeight.text" -msgstr "ВСс ΠΌΠ΅Ρ‚Π°-Ρ€Ρ‘Π±Π΅Ρ€:" - -msgid "HierarchyControlPanel.sumRadio.label" -msgstr "Π‘ΡƒΠΌΠΌΠ°" - -msgid "HierarchyControlPanel.avgRadio.label" -msgstr "Π‘Ρ€Π΅Π΄Π½Π΅Π΅" - -msgid "HierarchyControlPanel.sumRadio.toolTipText" -msgstr "Π‘ΡƒΠΌΠΌΠ° вСсов Ρ€Ρ‘Π±Π΅Ρ€" - -msgid "HierarchyControlPanel.avgRadio.toolTipText" -msgstr "Π‘Ρ€Π΅Π΄Π½Π΅Π΅ ΠΏΠΎ вСсам Ρ€Ρ‘Π±Π΅Ρ€" - -msgid "HierarchyControlPanel.heightLabel.toolTipText" -msgstr "Высота ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ. ЗначСния, большиС Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹, ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‚, Ρ‡Ρ‚ΠΎ Π³Ρ€Π°Ρ„ иСрархичСский." diff --git a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/zh_CN.po b/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/zh_CN.po deleted file mode 100644 index 33dd017ef5..0000000000 --- a/modules/DesktopHierarchy/src/main/resources/org/gephi/desktop/hierarchy/zh_CN.po +++ /dev/null @@ -1,105 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:16+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "Actions/Window/org-gephi-desktop-hierarchy-HierarchyAction.instance" -msgstr "η­‰ηΊ§" - -msgid "CTL_HierarchyAction" -msgstr "η­‰ηΊ§" - -msgid "CTL_HierarchyTopComponent" -msgstr "η­‰ηΊ§" - -msgid "OpenIDE-Module-Short-Description" -msgstr "η­‰ηΊ§ε―Όθˆͺηš„ε―θ§†εŒ–ζ’δ»Ά" - -msgid "HierarchyAddonButton.title" -msgstr "η­‰ηΊ§" - -msgid "HierarchyControlPanel.showTreeLabel.toolTipText" -msgstr "ζ˜Ύη€Ίζ ‘ε½’ε›Ύ" - -msgid "HierarchyControlPanel.labelView.text" -msgstr "桏览:" - -msgid "HierarchyControlPanel.linkLevel" -msgstr "ζ°΄εΉ³" - -msgid "HierarchyControlPanel.linkLevel.nodes" -msgstr "θŠ‚η‚Ή" - -msgid "HierarchyControlPanel.linkLevel.leaves" -msgstr "εˆ†ζ”―β€¦β€¦" - -msgid "HierarchyTopComponent.refreshButton.text" -msgstr "εˆ·ζ–°" - -msgid "HierarchyTopComponent.busyLabel.text" -msgstr "εˆ·ζ–°δΈ­β€¦β€¦" - -msgid "HierarchyTopComponent.labelLevelLimit.text" -msgstr "εˆ‡ι™€εˆ†ζ”―" - -msgid "HierarchyTopComponent.bar.level" -msgstr "ζ°΄εΉ³" - -msgid "HierarchyTopComponent.bar.levelmax" -msgstr "ζ— " - -msgid "HierarchyControlPanel.labelHeight.text" -msgstr "高度:" - -msgid "HierarchyControlPanel.heightLabel.text" -msgstr "0" - -msgid "HierarchyControlPanel.metaEdgesSettings.title" -msgstr "MetaθΎΉθΎη½" - -msgid "HierarchyControlPanel.info.title" -msgstr "MetaθΎΉ" - -msgid "HierarchyControlPanel.info.description" -msgstr "MetaθΎΉζ˜―η»„ε’ŒδΈ€δΈͺθŠ‚η‚Ήζˆ–θ€…δΈ€η»„ι—΄ηš„θΎΉγ€‚εƒδ»¬δ»£θ‘¨η»„ι—΄ε­θŠ‚η‚Ήηš„ι€‚ε½“ηš„θΎΉηΌ˜γ€‚" - -msgid "HierarchyControlPanel.weightinfo.title" -msgstr "Meta边权重" - -msgid "HierarchyControlPanel.weightinfo.description" -msgstr "metaθΎΉδ»ŽεΈΈθ§„ηš„θΎΉθšεˆη”ŸζˆοΌŒmetaθΎΉηš„ζƒι‡ε―δ»₯ζ˜―θΎΉηš„ζƒι‡ηš„ζ€»ε’Œζˆ–θ€…ε‡ε€Όγ€‚ζ³¨ζ„ε¦‚ζžœδ½ ζ”Ήε˜ε‚ζ•°οΌŒηŽ°ζœ‰θΎΉηš„ζƒι‡δΈδΌšζ”Ήε˜γ€‚" - -msgid "HierarchyControlPanel.labelAuto.text" -msgstr "θ‡ͺεŠ¨ηš„MetaθΎΉη”Ÿζˆ" - -msgid "HierarchyControlPanel.labelWeight.text" -msgstr "meta边权重" - -msgid "HierarchyControlPanel.sumRadio.label" -msgstr "ζ€»ε’Œ" - -msgid "HierarchyControlPanel.avgRadio.label" -msgstr "平均" - -msgid "HierarchyControlPanel.sumRadio.toolTipText" -msgstr "θΎΉζƒι‡ηš„ζ€»ε’Œ" - -msgid "HierarchyControlPanel.avgRadio.toolTipText" -msgstr "θΎΉζƒι‡ηš„εΉ³ε‡" - -msgid "HierarchyControlPanel.heightLabel.toolTipText" -msgstr "η­‰ηΊ§ηš„ι«˜εΊ¦γ€‚ε€§δΊŽβ€œ1β€ηš„ε€Όθ‘¨η€Ίε›ΎθΊζ˜―εˆ†η­‰ηΊ§ηš„γ€‚" diff --git a/modules/DesktopIcons/pom.xml b/modules/DesktopIcons/pom.xml new file mode 100644 index 0000000000..2681419ebb --- /dev/null +++ b/modules/DesktopIcons/pom.xml @@ -0,0 +1,33 @@ + + + 4.0.0 + + gephi-parent + org.gephi + 0.11.3-SNAPSHOT + ../.. + + + org.gephi + desktop-icons + 0.11.3-SNAPSHOT + nbm + + DesktopIcons + + + + + + + org.apache.netbeans.utilities + nbm-maven-plugin + + + + + + + + + diff --git a/modules/DesktopIcons/src/main/nbm/manifest.mf b/modules/DesktopIcons/src/main/nbm/manifest.mf new file mode 100644 index 0000000000..3ca1b2ef5a --- /dev/null +++ b/modules/DesktopIcons/src/main/nbm/manifest.mf @@ -0,0 +1,6 @@ +Manifest-Version: 1.0 +AutoUpdate-Essential-Module: true +OpenIDE-Module-Localizing-Bundle: Bundle.properties +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi UI +OpenIDE-Module-Name: Desktop Icons diff --git a/modules/DesktopIcons/src/main/resources/AppearancePluginUI/color-swatch.svg b/modules/DesktopIcons/src/main/resources/AppearancePluginUI/color-swatch.svg new file mode 100644 index 0000000000..9965ddc851 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/AppearancePluginUI/color-swatch.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/AppearancePluginUI/color-swatch_dark.svg b/modules/DesktopIcons/src/main/resources/AppearancePluginUI/color-swatch_dark.svg new file mode 100644 index 0000000000..35c0ea3dca --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/AppearancePluginUI/color-swatch_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/AppearancePluginUI/color.svg b/modules/DesktopIcons/src/main/resources/AppearancePluginUI/color.svg new file mode 100644 index 0000000000..f895f07f9f --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/AppearancePluginUI/color.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/AppearancePluginUI/color_dark.svg b/modules/DesktopIcons/src/main/resources/AppearancePluginUI/color_dark.svg new file mode 100644 index 0000000000..0cb1ae4f9d --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/AppearancePluginUI/color_dark.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/AppearancePluginUI/labelcolor.svg b/modules/DesktopIcons/src/main/resources/AppearancePluginUI/labelcolor.svg new file mode 100644 index 0000000000..a87f1d4a87 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/AppearancePluginUI/labelcolor.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/AppearancePluginUI/labelcolor_dark.svg b/modules/DesktopIcons/src/main/resources/AppearancePluginUI/labelcolor_dark.svg new file mode 100644 index 0000000000..1b97706b79 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/AppearancePluginUI/labelcolor_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/AppearancePluginUI/labelsize.svg b/modules/DesktopIcons/src/main/resources/AppearancePluginUI/labelsize.svg new file mode 100644 index 0000000000..c36fdf61fa --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/AppearancePluginUI/labelsize.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/AppearancePluginUI/labelsize_dark.svg b/modules/DesktopIcons/src/main/resources/AppearancePluginUI/labelsize_dark.svg new file mode 100644 index 0000000000..fd43d7868a --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/AppearancePluginUI/labelsize_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/AppearancePluginUI/randomize.svg b/modules/DesktopIcons/src/main/resources/AppearancePluginUI/randomize.svg new file mode 100644 index 0000000000..a88659aaa9 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/AppearancePluginUI/randomize.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/AppearancePluginUI/randomize_dark.svg b/modules/DesktopIcons/src/main/resources/AppearancePluginUI/randomize_dark.svg new file mode 100644 index 0000000000..776d080497 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/AppearancePluginUI/randomize_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/AppearancePluginUI/size.svg b/modules/DesktopIcons/src/main/resources/AppearancePluginUI/size.svg new file mode 100644 index 0000000000..0f07d8308c --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/AppearancePluginUI/size.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/AppearancePluginUI/size_dark.svg b/modules/DesktopIcons/src/main/resources/AppearancePluginUI/size_dark.svg new file mode 100644 index 0000000000..df13f8308a --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/AppearancePluginUI/size_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/Bundle.properties b/modules/DesktopIcons/src/main/resources/Bundle.properties new file mode 100644 index 0000000000..340e0eb0a7 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/Bundle.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Short-Description=Gephi Icons +OpenIDE-Module-Long-Description=Gephi Icons \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/application-block.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/application-block.svg new file mode 100644 index 0000000000..896c5cb275 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/application-block.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/application-block_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/application-block_dark.svg new file mode 100644 index 0000000000..b74a3e6a2e --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/application-block_dark.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/balance.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/balance.svg new file mode 100644 index 0000000000..37c3d34509 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/balance.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/balance_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/balance_dark.svg new file mode 100644 index 0000000000..8f272002e0 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/balance_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/binocular--arrow.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/binocular--arrow.svg new file mode 100644 index 0000000000..a02c7de83f --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/binocular--arrow.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/binocular--arrow_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/binocular--arrow_dark.svg new file mode 100644 index 0000000000..e6919b4bcc --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/binocular--arrow_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/binocular--pencil.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/binocular--pencil.svg new file mode 100644 index 0000000000..3dc0d27750 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/binocular--pencil.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/binocular--pencil_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/binocular--pencil_dark.svg new file mode 100644 index 0000000000..3cb741c9cf --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/binocular--pencil_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/broom--arrow.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/broom--arrow.svg new file mode 100644 index 0000000000..26c92b6096 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/broom--arrow.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/broom--arrow_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/broom--arrow_dark.svg new file mode 100644 index 0000000000..9382524266 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/broom--arrow_dark.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/broom.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/broom.svg new file mode 100644 index 0000000000..26c92b6096 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/broom.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/broom_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/broom_dark.svg new file mode 100644 index 0000000000..9382524266 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/broom_dark.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/category.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/category.svg new file mode 100644 index 0000000000..69ec764ef4 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/category.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/category_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/category_dark.svg new file mode 100644 index 0000000000..a763aebb01 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/category_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/chart-up.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/chart-up.svg new file mode 100644 index 0000000000..cb9740b8dd --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/chart-up.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/chart-up_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/chart-up_dark.svg new file mode 100644 index 0000000000..27b14edb31 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/chart-up_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/chart.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/chart.svg new file mode 100644 index 0000000000..077eea4d7a --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/chart.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/chart_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/chart_dark.svg new file mode 100644 index 0000000000..ccdd577599 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/chart_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/clear-data.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/clear-data.svg new file mode 100644 index 0000000000..26c92b6096 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/clear-data.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/clear-data_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/clear-data_dark.svg new file mode 100644 index 0000000000..9382524266 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/clear-data_dark.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/clock-select.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/clock-select.svg new file mode 100644 index 0000000000..8db8acda72 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/clock-select.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/clock-select_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/clock-select_dark.svg new file mode 100644 index 0000000000..e068b6abb8 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/clock-select_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/cross.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/cross.svg new file mode 100644 index 0000000000..cfe5a61c82 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/cross.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/cross_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/cross_dark.svg new file mode 100644 index 0000000000..331dd9ef63 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/cross_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/duplicate.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/duplicate.svg new file mode 100644 index 0000000000..e76bbf5665 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/duplicate.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/duplicate_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/duplicate_dark.svg new file mode 100644 index 0000000000..37724af1ea --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/duplicate_dark.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/edge.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/edge.svg new file mode 100644 index 0000000000..dcde5a47a9 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/edge.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/edge_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/edge_dark.svg new file mode 100644 index 0000000000..4f641fe0f8 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/edge_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/edit.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/edit.svg new file mode 100644 index 0000000000..7cc5e194b1 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/edit.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/edit_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/edit_dark.svg new file mode 100644 index 0000000000..6505373ee9 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/edit_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/eraser--minus.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/eraser--minus.svg new file mode 100644 index 0000000000..67c82fbe20 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/eraser--minus.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/eraser--minus_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/eraser--minus_dark.svg new file mode 100644 index 0000000000..0acfaab42c --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/eraser--minus_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/free.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/free.svg new file mode 100644 index 0000000000..afa015459b --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/free.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/free_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/free_dark.svg new file mode 100644 index 0000000000..14b91c8d16 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/free_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/frequency-list.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/frequency-list.svg new file mode 100644 index 0000000000..c17ab21a2b --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/frequency-list.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/frequency-list_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/frequency-list_dark.svg new file mode 100644 index 0000000000..f056fcc324 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/frequency-list_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/gear.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/gear.svg new file mode 100644 index 0000000000..230ef88ba6 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/gear.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/gear_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/gear_dark.svg new file mode 100644 index 0000000000..d8aed28a0b --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/gear_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/group.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/group.svg new file mode 100644 index 0000000000..49ebec24c1 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/group.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/group_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/group_dark.svg new file mode 100644 index 0000000000..7baf9918c6 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/group_dark.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/join.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/join.svg new file mode 100644 index 0000000000..75a432b781 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/join.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/join_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/join_dark.svg new file mode 100644 index 0000000000..a7312de9c0 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/join_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/magnifier--arrow.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/magnifier--arrow.svg new file mode 100644 index 0000000000..38ec2e2509 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/magnifier--arrow.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/magnifier--arrow_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/magnifier--arrow_dark.svg new file mode 100644 index 0000000000..3bf1dc077a --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/magnifier--arrow_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/merge.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/merge.svg new file mode 100644 index 0000000000..bf53721a4c --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/merge.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/merge_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/merge_dark.svg new file mode 100644 index 0000000000..37ff0f8f04 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/merge_dark.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/minus-white.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/minus-white.svg new file mode 100644 index 0000000000..1667b00121 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/minus-white.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/minus-white_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/minus-white_dark.svg new file mode 100644 index 0000000000..a7d97c480e --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/minus-white_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/plus-circle.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/plus-circle.svg new file mode 100644 index 0000000000..42d764d269 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/plus-circle.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/plus-circle_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/plus-circle_dark.svg new file mode 100644 index 0000000000..9ca58c3ca9 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/plus-circle_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/plus-white.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/plus-white.svg new file mode 100644 index 0000000000..1458e71994 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/plus-white.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/plus-white_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/plus-white_dark.svg new file mode 100644 index 0000000000..d92b45945c --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/plus-white_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/script-binary.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/script-binary.svg new file mode 100644 index 0000000000..c347ed099b --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/script-binary.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/script-binary_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/script-binary_dark.svg new file mode 100644 index 0000000000..ef43390498 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/script-binary_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/settle.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/settle.svg new file mode 100644 index 0000000000..217d6a2804 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/settle.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/settle_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/settle_dark.svg new file mode 100644 index 0000000000..ee53c78b0d --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/settle_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/size.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/size.svg new file mode 100644 index 0000000000..616eed3638 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/size.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/size_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/size_dark.svg new file mode 100644 index 0000000000..fd3ec916ed --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/size_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/statistics.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/statistics.svg new file mode 100644 index 0000000000..e240244c0f --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/statistics.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/statistics_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/statistics_dark.svg new file mode 100644 index 0000000000..f09cbc3ffa --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/statistics_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-clear-column.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-clear-column.svg new file mode 100644 index 0000000000..2e0689d87e --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-clear-column.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-clear-column_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-clear-column_dark.svg new file mode 100644 index 0000000000..29750b1022 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-clear-column_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-convert-dynamic-column.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-convert-dynamic-column.svg new file mode 100644 index 0000000000..0bcfa7dc7d --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-convert-dynamic-column.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-convert-dynamic-column_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-convert-dynamic-column_dark.svg new file mode 100644 index 0000000000..1a42bd72b3 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-convert-dynamic-column_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-copy-data-to-other-column.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-copy-data-to-other-column.svg new file mode 100644 index 0000000000..f728520cae --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-copy-data-to-other-column.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-copy-data-to-other-column_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-copy-data-to-other-column_dark.svg new file mode 100644 index 0000000000..60b82d4e3c --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-copy-data-to-other-column_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-create-boolean-column.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-create-boolean-column.svg new file mode 100644 index 0000000000..9122e3c573 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-create-boolean-column.svg @@ -0,0 +1,18 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-create-boolean-column_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-create-boolean-column_dark.svg new file mode 100644 index 0000000000..3b502fda5e --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-create-boolean-column_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-create-list-column-matching-groups.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-create-list-column-matching-groups.svg new file mode 100644 index 0000000000..548335560d --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-create-list-column-matching-groups.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-create-list-column-matching-groups_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-create-list-column-matching-groups_dark.svg new file mode 100644 index 0000000000..93fc395e62 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-create-list-column-matching-groups_dark.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-delete-column.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-delete-column.svg new file mode 100644 index 0000000000..509065705e --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-delete-column.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-delete-column_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-delete-column_dark.svg new file mode 100644 index 0000000000..8f7d1c0a91 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-delete-column_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-duplicate-column.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-duplicate-column.svg new file mode 100644 index 0000000000..0b12ea22e8 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-duplicate-column.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-duplicate-column_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-duplicate-column_dark.svg new file mode 100644 index 0000000000..46dacf7e1f --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-duplicate-column_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-excel.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-excel.svg new file mode 100644 index 0000000000..3a8eeb7a4c --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-excel.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-excel_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-excel_dark.svg new file mode 100644 index 0000000000..34b043d2d2 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-excel_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-fill-column.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-fill-column.svg new file mode 100644 index 0000000000..e5389c0507 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-fill-column.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-fill-column_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-fill-column_dark.svg new file mode 100644 index 0000000000..d1508163fb --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-fill-column_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-insert-column.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-insert-column.svg new file mode 100644 index 0000000000..4264597175 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-insert-column.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-insert-column_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-insert-column_dark.svg new file mode 100644 index 0000000000..bbb9814e3e --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-insert-column_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-negate-boolean-column.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-negate-boolean-column.svg new file mode 100644 index 0000000000..ab74a92d1d --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-negate-boolean-column.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-negate-boolean-column_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-negate-boolean-column_dark.svg new file mode 100644 index 0000000000..e65e20addf --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-negate-boolean-column_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-select-row.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-select-row.svg new file mode 100644 index 0000000000..93956983c0 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-select-row.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-select-row_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-select-row_dark.svg new file mode 100644 index 0000000000..1032a6b908 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-select-row_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-select.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-select.svg new file mode 100644 index 0000000000..156a077b4b --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-select.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-select_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-select_dark.svg new file mode 100644 index 0000000000..d13b8b277a --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/table-select_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/ui-check-boxes.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/ui-check-boxes.svg new file mode 100644 index 0000000000..d9244b1be5 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/ui-check-boxes.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/ui-check-boxes_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/ui-check-boxes_dark.svg new file mode 100644 index 0000000000..fc54b0bb1e --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/ui-check-boxes_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/ui-slider-050.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/ui-slider-050.svg new file mode 100644 index 0000000000..02a9969c64 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/ui-slider-050.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/ui-slider-050_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/ui-slider-050_dark.svg new file mode 100644 index 0000000000..a46422de54 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/ui-slider-050_dark.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/ungroup.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/ungroup.svg new file mode 100644 index 0000000000..a0ed4dbc06 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/ungroup.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/ungroup_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/ungroup_dark.svg new file mode 100644 index 0000000000..afdef206bc --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/ungroup_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/wooden-box.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/wooden-box.svg new file mode 100644 index 0000000000..7e70fce106 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/wooden-box.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/wooden-box_dark.svg b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/wooden-box_dark.svg new file mode 100644 index 0000000000..b59838dfd0 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DataLaboratoryPlugin/wooden-box_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopAppearance/apply.svg b/modules/DesktopIcons/src/main/resources/DesktopAppearance/apply.svg new file mode 100644 index 0000000000..ed64cbfaec --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopAppearance/apply.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopAppearance/apply_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopAppearance/apply_dark.svg new file mode 100644 index 0000000000..ffc12ec6f2 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopAppearance/apply_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopAppearance/chain.svg b/modules/DesktopIcons/src/main/resources/DesktopAppearance/chain.svg new file mode 100644 index 0000000000..e610601bfa --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopAppearance/chain.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopAppearance/chain_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopAppearance/chain_dark.svg new file mode 100644 index 0000000000..5499ee33da --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopAppearance/chain_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopAppearance/funnel.svg b/modules/DesktopIcons/src/main/resources/DesktopAppearance/funnel.svg new file mode 100644 index 0000000000..1cfc616150 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopAppearance/funnel.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopAppearance/funnel_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopAppearance/funnel_dark.svg new file mode 100644 index 0000000000..9319f0f73f --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopAppearance/funnel_dark.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopAppearance/small.svg b/modules/DesktopIcons/src/main/resources/DesktopAppearance/small.svg new file mode 100644 index 0000000000..f895f07f9f --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopAppearance/small.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopAppearance/small_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopAppearance/small_dark.svg new file mode 100644 index 0000000000..0cb1ae4f9d --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopAppearance/small_dark.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopAppearance/stop.svg b/modules/DesktopIcons/src/main/resources/DesktopAppearance/stop.svg new file mode 100644 index 0000000000..de86d93c67 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopAppearance/stop.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopAppearance/stop_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopAppearance/stop_dark.svg new file mode 100644 index 0000000000..3ce4846416 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopAppearance/stop_dark.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopAppearance/transformNull.svg b/modules/DesktopIcons/src/main/resources/DesktopAppearance/transformNull.svg new file mode 100644 index 0000000000..310a4b6faa --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopAppearance/transformNull.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopAppearance/transformNull_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopAppearance/transformNull_dark.svg new file mode 100644 index 0000000000..804a8bcad3 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopAppearance/transformNull_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopAttributes/array.svg b/modules/DesktopIcons/src/main/resources/DesktopAttributes/array.svg new file mode 100644 index 0000000000..47f7efef80 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopAttributes/array.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopAttributes/array_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopAttributes/array_dark.svg new file mode 100644 index 0000000000..19d3cb6b39 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopAttributes/array_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopAttributes/boolean.svg b/modules/DesktopIcons/src/main/resources/DesktopAttributes/boolean.svg new file mode 100644 index 0000000000..e1b002ecf2 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopAttributes/boolean.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopAttributes/boolean_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopAttributes/boolean_dark.svg new file mode 100644 index 0000000000..6257ca96b4 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopAttributes/boolean_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopAttributes/column.svg b/modules/DesktopIcons/src/main/resources/DesktopAttributes/column.svg new file mode 100644 index 0000000000..230ef88ba6 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopAttributes/column.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopAttributes/column_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopAttributes/column_dark.svg new file mode 100644 index 0000000000..d8aed28a0b --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopAttributes/column_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopAttributes/dynamic.svg b/modules/DesktopIcons/src/main/resources/DesktopAttributes/dynamic.svg new file mode 100644 index 0000000000..c4b60177ca --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopAttributes/dynamic.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopAttributes/dynamic_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopAttributes/dynamic_dark.svg new file mode 100644 index 0000000000..93721a318b --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopAttributes/dynamic_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopAttributes/edit.svg b/modules/DesktopIcons/src/main/resources/DesktopAttributes/edit.svg new file mode 100644 index 0000000000..69a13c3b08 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopAttributes/edit.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopAttributes/edit_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopAttributes/edit_dark.svg new file mode 100644 index 0000000000..9e9fb3c050 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopAttributes/edit_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopAttributes/number.svg b/modules/DesktopIcons/src/main/resources/DesktopAttributes/number.svg new file mode 100644 index 0000000000..7b6a248a3a --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopAttributes/number.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopAttributes/number_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopAttributes/number_dark.svg new file mode 100644 index 0000000000..dd513255c6 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopAttributes/number_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopAttributes/string.svg b/modules/DesktopIcons/src/main/resources/DesktopAttributes/string.svg new file mode 100644 index 0000000000..272a0e83f3 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopAttributes/string.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopAttributes/string_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopAttributes/string_dark.svg new file mode 100644 index 0000000000..f64470ff0b --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopAttributes/string_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopBranding/cs.svg b/modules/DesktopIcons/src/main/resources/DesktopBranding/cs.svg new file mode 100644 index 0000000000..b23e83fdb3 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopBranding/cs.svg @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopBranding/de.svg b/modules/DesktopIcons/src/main/resources/DesktopBranding/de.svg new file mode 100644 index 0000000000..16fbee9f61 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopBranding/de.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopBranding/el_GR.svg b/modules/DesktopIcons/src/main/resources/DesktopBranding/el_GR.svg new file mode 100644 index 0000000000..fc9d82c2a0 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopBranding/el_GR.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/modules/DesktopIcons/src/main/resources/DesktopBranding/en.svg b/modules/DesktopIcons/src/main/resources/DesktopBranding/en.svg new file mode 100644 index 0000000000..73be063f7e --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopBranding/en.svg @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopBranding/es.svg b/modules/DesktopIcons/src/main/resources/DesktopBranding/es.svg new file mode 100644 index 0000000000..6729446166 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopBranding/es.svg @@ -0,0 +1,567 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopBranding/fr.svg b/modules/DesktopIcons/src/main/resources/DesktopBranding/fr.svg new file mode 100644 index 0000000000..6e89592935 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopBranding/fr.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopBranding/hu_HU.svg b/modules/DesktopIcons/src/main/resources/DesktopBranding/hu_HU.svg new file mode 100644 index 0000000000..ac2f3ad416 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopBranding/hu_HU.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/modules/DesktopIcons/src/main/resources/DesktopBranding/ja.svg b/modules/DesktopIcons/src/main/resources/DesktopBranding/ja.svg new file mode 100644 index 0000000000..938ff8098c --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopBranding/ja.svg @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopBranding/ko_KR.svg b/modules/DesktopIcons/src/main/resources/DesktopBranding/ko_KR.svg new file mode 100644 index 0000000000..03473a5078 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopBranding/ko_KR.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/DesktopIcons/src/main/resources/DesktopBranding/pt_BR.svg b/modules/DesktopIcons/src/main/resources/DesktopBranding/pt_BR.svg new file mode 100644 index 0000000000..8f9ab6c3fa --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopBranding/pt_BR.svg @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopBranding/ro.svg b/modules/DesktopIcons/src/main/resources/DesktopBranding/ro.svg new file mode 100644 index 0000000000..f2f01678cf --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopBranding/ro.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopBranding/ru.svg b/modules/DesktopIcons/src/main/resources/DesktopBranding/ru.svg new file mode 100644 index 0000000000..7fabc127aa --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopBranding/ru.svg @@ -0,0 +1,29 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopBranding/sv_SE.svg b/modules/DesktopIcons/src/main/resources/DesktopBranding/sv_SE.svg new file mode 100644 index 0000000000..9d15dfb815 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopBranding/sv_SE.svg @@ -0,0 +1,4 @@ + + + + diff --git a/modules/DesktopIcons/src/main/resources/DesktopBranding/uk_UA.svg b/modules/DesktopIcons/src/main/resources/DesktopBranding/uk_UA.svg new file mode 100644 index 0000000000..690851ccc2 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopBranding/uk_UA.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/modules/DesktopIcons/src/main/resources/DesktopBranding/zh_CN.svg b/modules/DesktopIcons/src/main/resources/DesktopBranding/zh_CN.svg new file mode 100644 index 0000000000..3730ccfc8c --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopBranding/zh_CN.svg @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/arrow-180.svg b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/arrow-180.svg new file mode 100644 index 0000000000..0feceaf96f --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/arrow-180.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/arrow-180_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/arrow-180_dark.svg new file mode 100644 index 0000000000..81dfe71638 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/arrow-180_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/arrow.svg b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/arrow.svg new file mode 100644 index 0000000000..4f5473c062 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/arrow.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/arrow_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/arrow_dark.svg new file mode 100644 index 0000000000..1a2e7bb9f2 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/arrow_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/column.svg b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/column.svg new file mode 100644 index 0000000000..76702794dd --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/column.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/column_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/column_dark.svg new file mode 100644 index 0000000000..a8dbcd47b1 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/column_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/diamond.svg b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/diamond.svg new file mode 100644 index 0000000000..96e27815a6 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/diamond.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/diamond_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/diamond_dark.svg new file mode 100644 index 0000000000..fe1e843d21 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/diamond_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/gear-small.svg b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/gear-small.svg new file mode 100644 index 0000000000..230ef88ba6 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/gear-small.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/gear-small_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/gear-small_dark.svg new file mode 100644 index 0000000000..4352f12b35 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/gear-small_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/icon.svg b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/icon.svg new file mode 100644 index 0000000000..10dd815a67 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/icon.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/icon_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/icon_dark.svg new file mode 100644 index 0000000000..576844640f --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/icon_dark.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/info.svg b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/info.svg new file mode 100644 index 0000000000..3f3ad54aa3 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/info.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/info_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/info_dark.svg new file mode 100644 index 0000000000..4d1e485583 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/info_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/light-bulb--plus.svg b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/light-bulb--plus.svg new file mode 100644 index 0000000000..af7c967870 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/light-bulb--plus.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/light-bulb--plus_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/light-bulb--plus_dark.svg new file mode 100644 index 0000000000..ea6f8844e4 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/light-bulb--plus_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/light-bulb.svg b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/light-bulb.svg new file mode 100644 index 0000000000..bbd5400fe5 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/light-bulb.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/light-bulb_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/light-bulb_dark.svg new file mode 100644 index 0000000000..bfd703b6ac --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/light-bulb_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/merge.svg b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/merge.svg new file mode 100644 index 0000000000..fb821867ac --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/merge.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/merge_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/merge_dark.svg new file mode 100644 index 0000000000..e8bc0b00e5 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/merge_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/puzzle--arrow.svg b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/puzzle--arrow.svg new file mode 100644 index 0000000000..f80d518e72 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/puzzle--arrow.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/puzzle--arrow_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/puzzle--arrow_dark.svg new file mode 100644 index 0000000000..3d4eefcbc5 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/puzzle--arrow_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/small.svg b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/small.svg new file mode 100644 index 0000000000..e76938f3e5 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/small.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/small_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/small_dark.svg new file mode 100644 index 0000000000..e0b2ac7fe1 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/small_dark.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/table-insert-column.svg b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/table-insert-column.svg new file mode 100644 index 0000000000..4264597175 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/table-insert-column.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/table-insert-column_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/table-insert-column_dark.svg new file mode 100644 index 0000000000..bbb9814e3e --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/table-insert-column_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/table-select.svg b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/table-select.svg new file mode 100644 index 0000000000..156a077b4b --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/table-select.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/table-select_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/table-select_dark.svg new file mode 100644 index 0000000000..d13b8b277a --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopDataLaboratory/table-select_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/autorefresh.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/autorefresh.svg new file mode 100644 index 0000000000..76ece1c529 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/autorefresh.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/autorefresh_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/autorefresh_dark.svg new file mode 100644 index 0000000000..cfafe23068 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/autorefresh_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/drop.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/drop.svg new file mode 100644 index 0000000000..27a2e8f7a1 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/drop.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/drop_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/drop_dark.svg new file mode 100644 index 0000000000..9538e9e643 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/drop_dark.svg @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/filter.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/filter.svg new file mode 100644 index 0000000000..b73e4451a5 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/filter.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/filter_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/filter_dark.svg new file mode 100644 index 0000000000..7da5e35f04 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/filter_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/folder.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/folder.svg new file mode 100644 index 0000000000..80fea9a517 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/folder.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/folder_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/folder_dark.svg new file mode 100644 index 0000000000..fe3f3d2403 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/folder_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/funnel.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/funnel.svg new file mode 100644 index 0000000000..1d387ff590 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/funnel.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/funnel_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/funnel_dark.svg new file mode 100644 index 0000000000..73568eb2d0 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/funnel_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/icon.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/icon.svg new file mode 100644 index 0000000000..1d387ff590 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/icon.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/icon_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/icon_dark.svg new file mode 100644 index 0000000000..73568eb2d0 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/icon_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/labelvisible_export.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/labelvisible_export.svg new file mode 100644 index 0000000000..8dc07fb4c7 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/labelvisible_export.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/labelvisible_export_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/labelvisible_export_dark.svg new file mode 100644 index 0000000000..8efd1221b8 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/labelvisible_export_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/library.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/library.svg new file mode 100644 index 0000000000..1319cd0be1 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/library.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/library_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/library_dark.svg new file mode 100644 index 0000000000..a892450299 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/library_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/parameter.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/parameter.svg new file mode 100644 index 0000000000..501e550457 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/parameter.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/parameter_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/parameter_dark.svg new file mode 100644 index 0000000000..3cc2730dec --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/parameter_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/parameters.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/parameters.svg new file mode 100644 index 0000000000..74c442e9b8 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/parameters.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/parameters_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/parameters_dark.svg new file mode 100644 index 0000000000..7671011bc7 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/parameters_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/queries.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/queries.svg new file mode 100644 index 0000000000..3a8e9f0c5a --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/queries.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/queries_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/queries_dark.svg new file mode 100644 index 0000000000..dde81fe29e --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/queries_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/query.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/query.svg new file mode 100644 index 0000000000..1d387ff590 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/query.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/query_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/query_dark.svg new file mode 100644 index 0000000000..73568eb2d0 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/query_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/resetLabelVisible.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/resetLabelVisible.svg new file mode 100644 index 0000000000..3c4f640767 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/resetLabelVisible.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/resetLabelVisible_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/resetLabelVisible_dark.svg new file mode 100644 index 0000000000..c20615eab7 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/resetLabelVisible_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/select.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/select.svg new file mode 100644 index 0000000000..69d6015091 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/select.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/select_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/select_dark.svg new file mode 100644 index 0000000000..9f882430f8 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/select_dark.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/small.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/small.svg new file mode 100644 index 0000000000..3a8e9f0c5a --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/small.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/small_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/small_dark.svg new file mode 100644 index 0000000000..dde81fe29e --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/small_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/stop.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/stop.svg new file mode 100644 index 0000000000..93656467dd --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/stop.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/stop_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/stop_dark.svg new file mode 100644 index 0000000000..4f5dcda03e --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/stop_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/table_export.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/table_export.svg new file mode 100644 index 0000000000..4264597175 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/table_export.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/table_export_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/table_export_dark.svg new file mode 100644 index 0000000000..bbb9814e3e --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/table_export_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/workspace_export.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/workspace_export.svg new file mode 100644 index 0000000000..4e022fcc90 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/workspace_export.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopFilters/workspace_export_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopFilters/workspace_export_dark.svg new file mode 100644 index 0000000000..d7c44f0826 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopFilters/workspace_export_dark.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopImport/critical.svg b/modules/DesktopIcons/src/main/resources/DesktopImport/critical.svg new file mode 100644 index 0000000000..46fafae701 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopImport/critical.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopImport/critical_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopImport/critical_dark.svg new file mode 100644 index 0000000000..34aafe1269 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopImport/critical_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopImport/info.svg b/modules/DesktopIcons/src/main/resources/DesktopImport/info.svg new file mode 100644 index 0000000000..3aa2e9d25c --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopImport/info.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopImport/info_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopImport/info_dark.svg new file mode 100644 index 0000000000..d199ffc373 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopImport/info_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopImport/severe.svg b/modules/DesktopIcons/src/main/resources/DesktopImport/severe.svg new file mode 100644 index 0000000000..fc780da5f4 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopImport/severe.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopImport/severe_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopImport/severe_dark.svg new file mode 100644 index 0000000000..3696e71b92 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopImport/severe_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopImport/warning.svg b/modules/DesktopIcons/src/main/resources/DesktopImport/warning.svg new file mode 100644 index 0000000000..eb7707ac9e --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopImport/warning.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopImport/warning_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopImport/warning_dark.svg new file mode 100644 index 0000000000..c0cb2cb457 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopImport/warning_dark.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/grey.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/grey.svg new file mode 100644 index 0000000000..d4ae36be4d --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/grey.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/grey_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/grey_dark.svg new file mode 100644 index 0000000000..d57c78d778 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/grey_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/icon.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/icon.svg new file mode 100644 index 0000000000..60dcf6dc3d --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/icon.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/icon_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/icon_dark.svg new file mode 100644 index 0000000000..7cc2a46e1c --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/icon_dark.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/layoutInfo.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/layoutInfo.svg new file mode 100644 index 0000000000..3f3ad54aa3 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/layoutInfo.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/layoutInfo_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/layoutInfo_dark.svg new file mode 100644 index 0000000000..4d1e485583 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/layoutInfo_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/pause.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/pause.svg new file mode 100644 index 0000000000..0f07611b96 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/pause.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/pause_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/pause_dark.svg new file mode 100644 index 0000000000..a0fe154375 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/pause_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/preset.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/preset.svg new file mode 100644 index 0000000000..25fcff9966 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/preset.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/preset_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/preset_dark.svg new file mode 100644 index 0000000000..7f7068f91c --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/preset_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/run.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/run.svg new file mode 100644 index 0000000000..b73e4451a5 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/run.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/run_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/run_dark.svg new file mode 100644 index 0000000000..7da5e35f04 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/run_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/small.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/small.svg new file mode 100644 index 0000000000..60dcf6dc3d --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/small.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/small_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/small_dark.svg new file mode 100644 index 0000000000..7cc2a46e1c --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/small_dark.svg @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/stop.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/stop.svg new file mode 100644 index 0000000000..93656467dd --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/stop.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/stop_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/stop_dark.svg new file mode 100644 index 0000000000..4f5dcda03e --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/stop_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/mirror_xaxis.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/mirror_xaxis.svg new file mode 100644 index 0000000000..d52b22027e --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/mirror_xaxis.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/mirror_xaxis_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/mirror_xaxis_dark.svg new file mode 100644 index 0000000000..1cfd8a8051 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/mirror_xaxis_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/mirror_yaxis.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/mirror_yaxis.svg new file mode 100644 index 0000000000..55dc764343 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/mirror_yaxis.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/mirror_yaxis_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/mirror_yaxis_dark.svg new file mode 100644 index 0000000000..b5f21d9724 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/mirror_yaxis_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/rotate_left_1deg.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/rotate_left_1deg.svg new file mode 100644 index 0000000000..9f69550f4c --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/rotate_left_1deg.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/rotate_left_1deg_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/rotate_left_1deg_dark.svg new file mode 100644 index 0000000000..025bd9951d --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/rotate_left_1deg_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/rotate_left_45deg.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/rotate_left_45deg.svg new file mode 100644 index 0000000000..3ba49968e5 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/rotate_left_45deg.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/rotate_left_45deg_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/rotate_left_45deg_dark.svg new file mode 100644 index 0000000000..b68a9c2cf5 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/rotate_left_45deg_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/rotate_right_1deg.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/rotate_right_1deg.svg new file mode 100644 index 0000000000..fc5494f5a7 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/rotate_right_1deg.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/rotate_right_1deg_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/rotate_right_1deg_dark.svg new file mode 100644 index 0000000000..bb9acc090f --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/rotate_right_1deg_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/rotate_right_45deg.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/rotate_right_45deg.svg new file mode 100644 index 0000000000..de6dcec993 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/rotate_right_45deg.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/rotate_right_45deg_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/rotate_right_45deg_dark.svg new file mode 100644 index 0000000000..f9a99c8ace --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/rotate_right_45deg_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/scale_expand.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/scale_expand.svg new file mode 100644 index 0000000000..9105bb7565 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/scale_expand.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/scale_expand_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/scale_expand_dark.svg new file mode 100644 index 0000000000..6cd81f64fa --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/scale_expand_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/scale_reduce.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/scale_reduce.svg new file mode 100644 index 0000000000..c859bf7ea7 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/scale_reduce.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/scale_reduce_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/scale_reduce_dark.svg new file mode 100644 index 0000000000..f300581e7d --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/transformations/scale_reduce_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/yellow.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/yellow.svg new file mode 100644 index 0000000000..ddff38af9e --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/yellow.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopLayout/yellow_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopLayout/yellow_dark.svg new file mode 100644 index 0000000000..52d7c9d5a8 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopLayout/yellow_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopPreview/down.svg b/modules/DesktopIcons/src/main/resources/DesktopPreview/down.svg new file mode 100644 index 0000000000..bd4d1f6288 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopPreview/down.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopPreview/down_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopPreview/down_dark.svg new file mode 100644 index 0000000000..26ebac4111 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopPreview/down_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopPreview/globalCanvasSize.svg b/modules/DesktopIcons/src/main/resources/DesktopPreview/globalCanvasSize.svg new file mode 100644 index 0000000000..48f0aeba83 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopPreview/globalCanvasSize.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopPreview/globalCanvasSize_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopPreview/globalCanvasSize_dark.svg new file mode 100644 index 0000000000..2cc739bffb --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopPreview/globalCanvasSize_dark.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopPreview/info.svg b/modules/DesktopIcons/src/main/resources/DesktopPreview/info.svg new file mode 100644 index 0000000000..3aa2e9d25c --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopPreview/info.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopPreview/info_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopPreview/info_dark.svg new file mode 100644 index 0000000000..d199ffc373 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopPreview/info_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopPreview/preset.svg b/modules/DesktopIcons/src/main/resources/DesktopPreview/preset.svg new file mode 100644 index 0000000000..e48b2292a7 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopPreview/preset.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopPreview/preset_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopPreview/preset_dark.svg new file mode 100644 index 0000000000..3c17d33fae --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopPreview/preset_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopPreview/preview.svg b/modules/DesktopIcons/src/main/resources/DesktopPreview/preview.svg new file mode 100644 index 0000000000..b1c0eaf3d9 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopPreview/preview.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopPreview/preview_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopPreview/preview_dark.svg new file mode 100644 index 0000000000..a4cf278291 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopPreview/preview_dark.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopPreview/refresh.svg b/modules/DesktopIcons/src/main/resources/DesktopPreview/refresh.svg new file mode 100644 index 0000000000..9a6f29c4e1 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopPreview/refresh.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopPreview/refresh_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopPreview/refresh_dark.svg new file mode 100644 index 0000000000..658af81843 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopPreview/refresh_dark.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopPreview/remove.svg b/modules/DesktopIcons/src/main/resources/DesktopPreview/remove.svg new file mode 100644 index 0000000000..5a0acc26c2 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopPreview/remove.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopPreview/remove_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopPreview/remove_dark.svg new file mode 100644 index 0000000000..7c7bc9984b --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopPreview/remove_dark.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopPreview/save.svg b/modules/DesktopIcons/src/main/resources/DesktopPreview/save.svg new file mode 100644 index 0000000000..cbac33cc81 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopPreview/save.svg @@ -0,0 +1,183 @@ + + + + diff --git a/modules/DesktopIcons/src/main/resources/DesktopPreview/save_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopPreview/save_dark.svg new file mode 100644 index 0000000000..4115b497fe --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopPreview/save_dark.svg @@ -0,0 +1,182 @@ + + + + diff --git a/modules/DesktopIcons/src/main/resources/DesktopPreview/settings.svg b/modules/DesktopIcons/src/main/resources/DesktopPreview/settings.svg new file mode 100644 index 0000000000..230ef88ba6 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopPreview/settings.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopPreview/settings_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopPreview/settings_dark.svg new file mode 100644 index 0000000000..d8aed28a0b --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopPreview/settings_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopPreview/ui-check-box-uncheck.svg b/modules/DesktopIcons/src/main/resources/DesktopPreview/ui-check-box-uncheck.svg new file mode 100644 index 0000000000..4eb323a128 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopPreview/ui-check-box-uncheck.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopPreview/ui-check-box-uncheck_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopPreview/ui-check-box-uncheck_dark.svg new file mode 100644 index 0000000000..d67e0cc3ed --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopPreview/ui-check-box-uncheck_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopPreview/ui-check-box.svg b/modules/DesktopIcons/src/main/resources/DesktopPreview/ui-check-box.svg new file mode 100644 index 0000000000..45072f8f99 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopPreview/ui-check-box.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopPreview/ui-check-box_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopPreview/ui-check-box_dark.svg new file mode 100644 index 0000000000..0a14880a7f --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopPreview/ui-check-box_dark.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopPreview/up.svg b/modules/DesktopIcons/src/main/resources/DesktopPreview/up.svg new file mode 100644 index 0000000000..2eb254a945 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopPreview/up.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopPreview/up_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopPreview/up_dark.svg new file mode 100644 index 0000000000..972c58fcae --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopPreview/up_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopProject/deleteWorkspace.svg b/modules/DesktopIcons/src/main/resources/DesktopProject/deleteWorkspace.svg new file mode 100644 index 0000000000..fec3ad35b9 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopProject/deleteWorkspace.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopProject/deleteWorkspace_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopProject/deleteWorkspace_dark.svg new file mode 100644 index 0000000000..cf6d4e9f0c --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopProject/deleteWorkspace_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopProject/duplicateWorkspace.svg b/modules/DesktopIcons/src/main/resources/DesktopProject/duplicateWorkspace.svg new file mode 100644 index 0000000000..aff712990b --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopProject/duplicateWorkspace.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopProject/duplicateWorkspace_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopProject/duplicateWorkspace_dark.svg new file mode 100644 index 0000000000..20b5db7f34 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopProject/duplicateWorkspace_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopProject/newProject.svg b/modules/DesktopIcons/src/main/resources/DesktopProject/newProject.svg new file mode 100644 index 0000000000..6e554b205c --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopProject/newProject.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopProject/newProject_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopProject/newProject_dark.svg new file mode 100644 index 0000000000..78114dedc6 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopProject/newProject_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopProject/newWorkspace.svg b/modules/DesktopIcons/src/main/resources/DesktopProject/newWorkspace.svg new file mode 100644 index 0000000000..9e1ac1b452 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopProject/newWorkspace.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopProject/newWorkspace_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopProject/newWorkspace_dark.svg new file mode 100644 index 0000000000..74a2195c6f --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopProject/newWorkspace_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopProject/openProject.svg b/modules/DesktopIcons/src/main/resources/DesktopProject/openProject.svg new file mode 100644 index 0000000000..69b7623bc8 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopProject/openProject.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopProject/openProject_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopProject/openProject_dark.svg new file mode 100644 index 0000000000..3d570c19ce --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopProject/openProject_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopProject/projectProperties.svg b/modules/DesktopIcons/src/main/resources/DesktopProject/projectProperties.svg new file mode 100644 index 0000000000..3f4f6036a3 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopProject/projectProperties.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopProject/projectProperties_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopProject/projectProperties_dark.svg new file mode 100644 index 0000000000..edf20d9110 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopProject/projectProperties_dark.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopProject/renameWorkspace.svg b/modules/DesktopIcons/src/main/resources/DesktopProject/renameWorkspace.svg new file mode 100644 index 0000000000..6ef446d327 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopProject/renameWorkspace.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopProject/renameWorkspace_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopProject/renameWorkspace_dark.svg new file mode 100644 index 0000000000..e27a7e14cc --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopProject/renameWorkspace_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopProject/saveProject.svg b/modules/DesktopIcons/src/main/resources/DesktopProject/saveProject.svg new file mode 100644 index 0000000000..287e22fe8b --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopProject/saveProject.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopProject/saveProject_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopProject/saveProject_dark.svg new file mode 100644 index 0000000000..98ed1f9c7d --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopProject/saveProject_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopProject/workspaceProperties.svg b/modules/DesktopIcons/src/main/resources/DesktopProject/workspaceProperties.svg new file mode 100644 index 0000000000..e204e1c589 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopProject/workspaceProperties.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopProject/workspaceProperties_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopProject/workspaceProperties_dark.svg new file mode 100644 index 0000000000..a504ff874b --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopProject/workspaceProperties_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopSearch/attribute.svg b/modules/DesktopIcons/src/main/resources/DesktopSearch/attribute.svg new file mode 100644 index 0000000000..5160118870 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopSearch/attribute.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopSearch/attribute_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopSearch/attribute_dark.svg new file mode 100644 index 0000000000..a62aa8d273 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopSearch/attribute_dark.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopSearch/attribute_old.svg b/modules/DesktopIcons/src/main/resources/DesktopSearch/attribute_old.svg new file mode 100644 index 0000000000..fa19ccc639 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopSearch/attribute_old.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopSearch/column.svg b/modules/DesktopIcons/src/main/resources/DesktopSearch/column.svg new file mode 100644 index 0000000000..76702794dd --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopSearch/column.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopSearch/column_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopSearch/column_dark.svg new file mode 100644 index 0000000000..a8dbcd47b1 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopSearch/column_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopSearch/column_old.svg b/modules/DesktopIcons/src/main/resources/DesktopSearch/column_old.svg new file mode 100644 index 0000000000..7b0ef0db53 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopSearch/column_old.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopSearch/edge.svg b/modules/DesktopIcons/src/main/resources/DesktopSearch/edge.svg new file mode 100644 index 0000000000..dcde5a47a9 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopSearch/edge.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopSearch/edge_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopSearch/edge_dark.svg new file mode 100644 index 0000000000..4f641fe0f8 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopSearch/edge_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopSearch/edge_old.svg b/modules/DesktopIcons/src/main/resources/DesktopSearch/edge_old.svg new file mode 100644 index 0000000000..190a4f9d77 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopSearch/edge_old.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopSearch/filter.svg b/modules/DesktopIcons/src/main/resources/DesktopSearch/filter.svg new file mode 100644 index 0000000000..1d387ff590 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopSearch/filter.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopSearch/filter_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopSearch/filter_dark.svg new file mode 100644 index 0000000000..73568eb2d0 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopSearch/filter_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopSearch/node.svg b/modules/DesktopIcons/src/main/resources/DesktopSearch/node.svg new file mode 100644 index 0000000000..944fb202ec --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopSearch/node.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopSearch/node_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopSearch/node_dark.svg new file mode 100644 index 0000000000..b80d2b90bf --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopSearch/node_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopSearch/node_old.svg b/modules/DesktopIcons/src/main/resources/DesktopSearch/node_old.svg new file mode 100644 index 0000000000..6895b78453 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopSearch/node_old.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopSearch/search.svg b/modules/DesktopIcons/src/main/resources/DesktopSearch/search.svg new file mode 100644 index 0000000000..38ec2e2509 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopSearch/search.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopSearch/search_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopSearch/search_dark.svg new file mode 100644 index 0000000000..3bf1dc077a --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopSearch/search_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopSearch/source.txt b/modules/DesktopIcons/src/main/resources/DesktopSearch/source.txt new file mode 100644 index 0000000000..74d46a2312 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopSearch/source.txt @@ -0,0 +1 @@ +https://iconplanet.app/package/alphabet--248?locale=en \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopStatistics/info.svg b/modules/DesktopIcons/src/main/resources/DesktopStatistics/info.svg new file mode 100644 index 0000000000..3aa2e9d25c --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopStatistics/info.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopStatistics/info_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopStatistics/info_dark.svg new file mode 100644 index 0000000000..d199ffc373 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopStatistics/info_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/resources/infolabel_details.png b/modules/DesktopIcons/src/main/resources/DesktopStatistics/infolabel_details.png similarity index 100% rename from modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/resources/infolabel_details.png rename to modules/DesktopIcons/src/main/resources/DesktopStatistics/infolabel_details.png diff --git a/modules/DesktopIcons/src/main/resources/DesktopStatistics/report.svg b/modules/DesktopIcons/src/main/resources/DesktopStatistics/report.svg new file mode 100644 index 0000000000..676d890a53 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopStatistics/report.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopStatistics/report_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopStatistics/report_dark.svg new file mode 100644 index 0000000000..f4bccbe49d --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopStatistics/report_dark.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopStatistics/run.svg b/modules/DesktopIcons/src/main/resources/DesktopStatistics/run.svg new file mode 100644 index 0000000000..171a75dea2 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopStatistics/run.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopStatistics/run_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopStatistics/run_dark.svg new file mode 100644 index 0000000000..7da5e35f04 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopStatistics/run_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopStatistics/small.svg b/modules/DesktopIcons/src/main/resources/DesktopStatistics/small.svg new file mode 100644 index 0000000000..c1c1a1b610 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopStatistics/small.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopStatistics/small_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopStatistics/small_dark.svg new file mode 100644 index 0000000000..15b54752c5 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopStatistics/small_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopStatistics/stop.svg b/modules/DesktopIcons/src/main/resources/DesktopStatistics/stop.svg new file mode 100644 index 0000000000..5b735f962d --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopStatistics/stop.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopStatistics/stop_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopStatistics/stop_dark.svg new file mode 100644 index 0000000000..315b19172c --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopStatistics/stop_dark.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/activate.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/activate.svg new file mode 100644 index 0000000000..b4e5593d8b --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/activate.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/activate_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/activate_dark.svg new file mode 100644 index 0000000000..d3a44c2c81 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/activate_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/animation_settings.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/animation_settings.svg new file mode 100644 index 0000000000..168ba25582 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/animation_settings.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/animation_settings_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/animation_settings_dark.svg new file mode 100644 index 0000000000..d57fa75af7 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/animation_settings_dark.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/chart.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/chart.svg new file mode 100644 index 0000000000..ca90af6770 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/chart.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/chart_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/chart_dark.svg new file mode 100644 index 0000000000..095b80e6dc --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/chart_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/cross.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/cross.svg new file mode 100644 index 0000000000..d061e77686 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/cross.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/cross_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/cross_dark.svg new file mode 100644 index 0000000000..48f4f0743c --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/cross_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/custom_bounds.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/custom_bounds.svg new file mode 100644 index 0000000000..6f75d7bc66 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/custom_bounds.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/custom_bounds_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/custom_bounds_dark.svg new file mode 100644 index 0000000000..407a1aafaa --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/custom_bounds_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/disabled.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/disabled.svg new file mode 100644 index 0000000000..2936ef3221 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/disabled.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/disabled_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/disabled_dark.svg new file mode 100644 index 0000000000..be8060184f --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/disabled_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/enabled.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/enabled.svg new file mode 100644 index 0000000000..7b8087f1e4 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/enabled.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/enabled_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/enabled_dark.svg new file mode 100644 index 0000000000..9383b945cd --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/enabled_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/icon.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/icon.svg new file mode 100644 index 0000000000..aebe75f975 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/icon.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/icon_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/icon_dark.svg new file mode 100644 index 0000000000..6e2526254a --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/icon_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/info.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/info.svg new file mode 100644 index 0000000000..765fee70e1 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/info.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/info_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/info_dark.svg new file mode 100644 index 0000000000..132059612a --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/info_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/playback_pause.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/playback_pause.svg new file mode 100644 index 0000000000..7b8087f1e4 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/playback_pause.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/playback_pause_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/playback_pause_dark.svg new file mode 100644 index 0000000000..9383b945cd --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/playback_pause_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/playback_play.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/playback_play.svg new file mode 100644 index 0000000000..2936ef3221 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/playback_play.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/playback_play_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/playback_play_dark.svg new file mode 100644 index 0000000000..be8060184f --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/playback_play_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/reset_icon.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/reset_icon.svg new file mode 100644 index 0000000000..f38606f6dc --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/reset_icon.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/reset_icon_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/reset_icon_dark.svg new file mode 100644 index 0000000000..301f3a605b --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/reset_icon_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/settings.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/settings.svg new file mode 100644 index 0000000000..230ef88ba6 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/settings.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/settings_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/settings_dark.svg new file mode 100644 index 0000000000..d8aed28a0b --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/settings_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/time_format.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/time_format.svg new file mode 100644 index 0000000000..0d6a0a6b34 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/time_format.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/time_format_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/time_format_dark.svg new file mode 100644 index 0000000000..4a247ec430 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/time_format_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/time_format_small.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/time_format_small.svg new file mode 100644 index 0000000000..0d6a0a6b34 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/time_format_small.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopTimeline/time_format_small_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopTimeline/time_format_small_dark.svg new file mode 100644 index 0000000000..4a247ec430 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopTimeline/time_format_small_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopWindow/laboratory.svg b/modules/DesktopIcons/src/main/resources/DesktopWindow/laboratory.svg new file mode 100644 index 0000000000..10dd815a67 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopWindow/laboratory.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopWindow/laboratory_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopWindow/laboratory_dark.svg new file mode 100644 index 0000000000..576844640f --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopWindow/laboratory_dark.svg @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopWindow/options_gephi.svg b/modules/DesktopIcons/src/main/resources/DesktopWindow/options_gephi.svg new file mode 100644 index 0000000000..80cf321531 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopWindow/options_gephi.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopWindow/options_gephi_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopWindow/options_gephi_dark.svg new file mode 100644 index 0000000000..fa54a1b632 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopWindow/options_gephi_dark.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopWindow/overview.svg b/modules/DesktopIcons/src/main/resources/DesktopWindow/overview.svg new file mode 100644 index 0000000000..1018fa00ea --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopWindow/overview.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopWindow/overview_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopWindow/overview_dark.svg new file mode 100644 index 0000000000..5193257972 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopWindow/overview_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopWindow/preview.svg b/modules/DesktopIcons/src/main/resources/DesktopWindow/preview.svg new file mode 100644 index 0000000000..b1c0eaf3d9 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopWindow/preview.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/DesktopWindow/preview_dark.svg b/modules/DesktopIcons/src/main/resources/DesktopWindow/preview_dark.svg new file mode 100644 index 0000000000..a4cf278291 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/DesktopWindow/preview_dark.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/ImportPluginUI/remove_config.svg b/modules/DesktopIcons/src/main/resources/ImportPluginUI/remove_config.svg new file mode 100644 index 0000000000..cfe5a61c82 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/ImportPluginUI/remove_config.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/ImportPluginUI/remove_config_dark.svg b/modules/DesktopIcons/src/main/resources/ImportPluginUI/remove_config_dark.svg new file mode 100644 index 0000000000..331dd9ef63 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/ImportPluginUI/remove_config_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/ImportPluginUI/test_connection.svg b/modules/DesktopIcons/src/main/resources/ImportPluginUI/test_connection.svg new file mode 100644 index 0000000000..23c0c5c385 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/ImportPluginUI/test_connection.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/ImportPluginUI/test_connection_dark.svg b/modules/DesktopIcons/src/main/resources/ImportPluginUI/test_connection_dark.svg new file mode 100644 index 0000000000..0957f92aa3 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/ImportPluginUI/test_connection_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/README.md b/modules/DesktopIcons/src/main/resources/README.md new file mode 100644 index 0000000000..3c93d41066 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/README.md @@ -0,0 +1,33 @@ +# Info + +Get icons from IBM Icons... + +https://www.ibm.com/design/language/iconography/ui-icons/library + +...and alternatively, Phosphor Icons. + +https://phosphoricons.com/?q=poly + + +### Colors + +Default color for light mode: #555555 + +Default colors for dark mode: #aaaaaa + + +# Glitches + +For the implementation to work, the ```svg``` element needs to have attributes ```width``` and ```height```, which tools like Illustrator don't (automatically) do. So you may have to add it manually to the SVGs you add. + +Then, a weird bug overrides size 16 into a different size specifically, so it is also needed to modify with or height equal to 16 to something else like 15.999: + +``` + width="15.999999" height="15.999999" +``` + + +# Credentials + +Ready-made icons by IBM or PhosphorIcons +Custom icons by CΓ΄me Broas and Mathieu Jacomy \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/ToolsPlugin/brush.svg b/modules/DesktopIcons/src/main/resources/ToolsPlugin/brush.svg new file mode 100644 index 0000000000..c37bed83d9 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/ToolsPlugin/brush.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/ToolsPlugin/brush_dark.svg b/modules/DesktopIcons/src/main/resources/ToolsPlugin/brush_dark.svg new file mode 100644 index 0000000000..98b6997614 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/ToolsPlugin/brush_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/ToolsPlugin/edgepencil.svg b/modules/DesktopIcons/src/main/resources/ToolsPlugin/edgepencil.svg new file mode 100644 index 0000000000..90196b92df --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/ToolsPlugin/edgepencil.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/ToolsPlugin/edgepencil_dark.svg b/modules/DesktopIcons/src/main/resources/ToolsPlugin/edgepencil_dark.svg new file mode 100644 index 0000000000..4e420cd218 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/ToolsPlugin/edgepencil_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/ToolsPlugin/edit.svg b/modules/DesktopIcons/src/main/resources/ToolsPlugin/edit.svg new file mode 100644 index 0000000000..446bc0a680 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/ToolsPlugin/edit.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/ToolsPlugin/edit_dark.svg b/modules/DesktopIcons/src/main/resources/ToolsPlugin/edit_dark.svg new file mode 100644 index 0000000000..14ec88b087 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/ToolsPlugin/edit_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/ToolsPlugin/hand.svg b/modules/DesktopIcons/src/main/resources/ToolsPlugin/hand.svg new file mode 100644 index 0000000000..8ef5490445 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/ToolsPlugin/hand.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/ToolsPlugin/hand_dark.svg b/modules/DesktopIcons/src/main/resources/ToolsPlugin/hand_dark.svg new file mode 100644 index 0000000000..8bfb879c23 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/ToolsPlugin/hand_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/ToolsPlugin/heatmap.svg b/modules/DesktopIcons/src/main/resources/ToolsPlugin/heatmap.svg new file mode 100644 index 0000000000..4a43c49576 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/ToolsPlugin/heatmap.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/ToolsPlugin/heatmap_dark.svg b/modules/DesktopIcons/src/main/resources/ToolsPlugin/heatmap_dark.svg new file mode 100644 index 0000000000..d415a2feca --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/ToolsPlugin/heatmap_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/ToolsPlugin/nodepencil.svg b/modules/DesktopIcons/src/main/resources/ToolsPlugin/nodepencil.svg new file mode 100644 index 0000000000..5ee6656f16 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/ToolsPlugin/nodepencil.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/ToolsPlugin/nodepencil_dark.svg b/modules/DesktopIcons/src/main/resources/ToolsPlugin/nodepencil_dark.svg new file mode 100644 index 0000000000..c477fbec52 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/ToolsPlugin/nodepencil_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/ToolsPlugin/painter.svg b/modules/DesktopIcons/src/main/resources/ToolsPlugin/painter.svg new file mode 100644 index 0000000000..53d41e134a --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/ToolsPlugin/painter.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/ToolsPlugin/painter_dark.svg b/modules/DesktopIcons/src/main/resources/ToolsPlugin/painter_dark.svg new file mode 100644 index 0000000000..bb107ce672 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/ToolsPlugin/painter_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/ToolsPlugin/shortestpath.svg b/modules/DesktopIcons/src/main/resources/ToolsPlugin/shortestpath.svg new file mode 100644 index 0000000000..4e9574ed24 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/ToolsPlugin/shortestpath.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/ToolsPlugin/shortestpath_dark.svg b/modules/DesktopIcons/src/main/resources/ToolsPlugin/shortestpath_dark.svg new file mode 100644 index 0000000000..9721e448d4 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/ToolsPlugin/shortestpath_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/ToolsPlugin/sizer.svg b/modules/DesktopIcons/src/main/resources/ToolsPlugin/sizer.svg new file mode 100644 index 0000000000..d3d872d4a6 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/ToolsPlugin/sizer.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/ToolsPlugin/sizer_dark.svg b/modules/DesktopIcons/src/main/resources/ToolsPlugin/sizer_dark.svg new file mode 100644 index 0000000000..97b02fc68c --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/ToolsPlugin/sizer_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/images/templates/0.00-0.00-1.00-0.00.png b/modules/DesktopIcons/src/main/resources/UIComponents/0.00-0.00-1.00-0.00.png similarity index 100% rename from modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/images/templates/0.00-0.00-1.00-0.00.png rename to modules/DesktopIcons/src/main/resources/UIComponents/0.00-0.00-1.00-0.00.png diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/images/templates/0.00-0.00-1.00-1.00.png b/modules/DesktopIcons/src/main/resources/UIComponents/0.00-0.00-1.00-1.00.png similarity index 100% rename from modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/images/templates/0.00-0.00-1.00-1.00.png rename to modules/DesktopIcons/src/main/resources/UIComponents/0.00-0.00-1.00-1.00.png diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/images/templates/0.00-1.00-0.00-1.00.png b/modules/DesktopIcons/src/main/resources/UIComponents/0.00-1.00-0.00-1.00.png similarity index 100% rename from modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/images/templates/0.00-1.00-0.00-1.00.png rename to modules/DesktopIcons/src/main/resources/UIComponents/0.00-1.00-0.00-1.00.png diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/images/templates/0.00-1.00-1.00-0.00.png b/modules/DesktopIcons/src/main/resources/UIComponents/0.00-1.00-1.00-0.00.png similarity index 100% rename from modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/images/templates/0.00-1.00-1.00-0.00.png rename to modules/DesktopIcons/src/main/resources/UIComponents/0.00-1.00-1.00-0.00.png diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/images/templates/0.00-1.00-1.00-1.00.png b/modules/DesktopIcons/src/main/resources/UIComponents/0.00-1.00-1.00-1.00.png similarity index 100% rename from modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/images/templates/0.00-1.00-1.00-1.00.png rename to modules/DesktopIcons/src/main/resources/UIComponents/0.00-1.00-1.00-1.00.png diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/images/templates/1.00-0.00-0.00-1.00.png b/modules/DesktopIcons/src/main/resources/UIComponents/1.00-0.00-0.00-1.00.png similarity index 100% rename from modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/images/templates/1.00-0.00-0.00-1.00.png rename to modules/DesktopIcons/src/main/resources/UIComponents/1.00-0.00-0.00-1.00.png diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/images/templates/1.00-0.00-1.00-0.00.png b/modules/DesktopIcons/src/main/resources/UIComponents/1.00-0.00-1.00-0.00.png similarity index 100% rename from modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/images/templates/1.00-0.00-1.00-0.00.png rename to modules/DesktopIcons/src/main/resources/UIComponents/1.00-0.00-1.00-0.00.png diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/images/templates/1.00-0.00-1.00-1.00.png b/modules/DesktopIcons/src/main/resources/UIComponents/1.00-0.00-1.00-1.00.png similarity index 100% rename from modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/images/templates/1.00-0.00-1.00-1.00.png rename to modules/DesktopIcons/src/main/resources/UIComponents/1.00-0.00-1.00-1.00.png diff --git a/modules/DesktopIcons/src/main/resources/UIComponents/arrow.svg b/modules/DesktopIcons/src/main/resources/UIComponents/arrow.svg new file mode 100644 index 0000000000..3ed6439deb --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/UIComponents/arrow.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/UIComponents/arrow_dark.svg b/modules/DesktopIcons/src/main/resources/UIComponents/arrow_dark.svg new file mode 100644 index 0000000000..455d7159b3 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/UIComponents/arrow_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/UIComponents/collapsedSnippet.svg b/modules/DesktopIcons/src/main/resources/UIComponents/collapsedSnippet.svg new file mode 100644 index 0000000000..13c5b260f4 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/UIComponents/collapsedSnippet.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/UIComponents/collapsedSnippet_dark.svg b/modules/DesktopIcons/src/main/resources/UIComponents/collapsedSnippet_dark.svg new file mode 100644 index 0000000000..4e11da40c9 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/UIComponents/collapsedSnippet_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/UIComponents/copy.svg b/modules/DesktopIcons/src/main/resources/UIComponents/copy.svg new file mode 100644 index 0000000000..d37aae443b --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/UIComponents/copy.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/UIComponents/copy_dark.svg b/modules/DesktopIcons/src/main/resources/UIComponents/copy_dark.svg new file mode 100644 index 0000000000..0375593308 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/UIComponents/copy_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/UIComponents/expandedSnippet.svg b/modules/DesktopIcons/src/main/resources/UIComponents/expandedSnippet.svg new file mode 100644 index 0000000000..eb04f54505 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/UIComponents/expandedSnippet.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/UIComponents/expandedSnippet_dark.svg b/modules/DesktopIcons/src/main/resources/UIComponents/expandedSnippet_dark.svg new file mode 100644 index 0000000000..84e37b6d82 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/UIComponents/expandedSnippet_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/gtk_bigclose_enabled.png b/modules/DesktopIcons/src/main/resources/UIComponents/gtk_bigclose_enabled.png similarity index 100% rename from modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/gtk_bigclose_enabled.png rename to modules/DesktopIcons/src/main/resources/UIComponents/gtk_bigclose_enabled.png diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/gtk_bigclose_pressed.png b/modules/DesktopIcons/src/main/resources/UIComponents/gtk_bigclose_pressed.png similarity index 100% rename from modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/gtk_bigclose_pressed.png rename to modules/DesktopIcons/src/main/resources/UIComponents/gtk_bigclose_pressed.png diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/gtk_bigclose_rollover.png b/modules/DesktopIcons/src/main/resources/UIComponents/gtk_bigclose_rollover.png similarity index 100% rename from modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/gtk_bigclose_rollover.png rename to modules/DesktopIcons/src/main/resources/UIComponents/gtk_bigclose_rollover.png diff --git a/modules/DesktopIcons/src/main/resources/UIComponents/leftArrow.svg b/modules/DesktopIcons/src/main/resources/UIComponents/leftArrow.svg new file mode 100644 index 0000000000..8c85530926 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/UIComponents/leftArrow.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/UIComponents/leftArrow_dark.svg b/modules/DesktopIcons/src/main/resources/UIComponents/leftArrow_dark.svg new file mode 100644 index 0000000000..811757a764 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/UIComponents/leftArrow_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/UIComponents/light-bulb-off.svg b/modules/DesktopIcons/src/main/resources/UIComponents/light-bulb-off.svg new file mode 100644 index 0000000000..fc0e67e1a3 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/UIComponents/light-bulb-off.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/UIComponents/light-bulb-off_dark.svg b/modules/DesktopIcons/src/main/resources/UIComponents/light-bulb-off_dark.svg new file mode 100644 index 0000000000..0f96a59b7c --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/UIComponents/light-bulb-off_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/UIComponents/light-bulb.svg b/modules/DesktopIcons/src/main/resources/UIComponents/light-bulb.svg new file mode 100644 index 0000000000..08d70d45fb --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/UIComponents/light-bulb.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/UIComponents/light-bulb_dark.svg b/modules/DesktopIcons/src/main/resources/UIComponents/light-bulb_dark.svg new file mode 100644 index 0000000000..b5cd4f1839 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/UIComponents/light-bulb_dark.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/mac_bigclose_enabled.png b/modules/DesktopIcons/src/main/resources/UIComponents/mac_bigclose_enabled.png similarity index 100% rename from modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/mac_bigclose_enabled.png rename to modules/DesktopIcons/src/main/resources/UIComponents/mac_bigclose_enabled.png diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/mac_bigclose_pressed.png b/modules/DesktopIcons/src/main/resources/UIComponents/mac_bigclose_pressed.png similarity index 100% rename from modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/mac_bigclose_pressed.png rename to modules/DesktopIcons/src/main/resources/UIComponents/mac_bigclose_pressed.png diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/mac_bigclose_rollover.png b/modules/DesktopIcons/src/main/resources/UIComponents/mac_bigclose_rollover.png similarity index 100% rename from modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/mac_bigclose_rollover.png rename to modules/DesktopIcons/src/main/resources/UIComponents/mac_bigclose_rollover.png diff --git a/modules/DesktopIcons/src/main/resources/UIComponents/magnifier--minus.svg b/modules/DesktopIcons/src/main/resources/UIComponents/magnifier--minus.svg new file mode 100644 index 0000000000..62c4216cbe --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/UIComponents/magnifier--minus.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/UIComponents/magnifier--minus_dark.svg b/modules/DesktopIcons/src/main/resources/UIComponents/magnifier--minus_dark.svg new file mode 100644 index 0000000000..5ef405f095 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/UIComponents/magnifier--minus_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/UIComponents/magnifier--plus.svg b/modules/DesktopIcons/src/main/resources/UIComponents/magnifier--plus.svg new file mode 100644 index 0000000000..10e58d1de0 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/UIComponents/magnifier--plus.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/UIComponents/magnifier--plus_dark.svg b/modules/DesktopIcons/src/main/resources/UIComponents/magnifier--plus_dark.svg new file mode 100644 index 0000000000..ca52f931f0 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/UIComponents/magnifier--plus_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/UIComponents/magnifier-history.svg b/modules/DesktopIcons/src/main/resources/UIComponents/magnifier-history.svg new file mode 100644 index 0000000000..34bf910b32 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/UIComponents/magnifier-history.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/UIComponents/magnifier-history_dark.svg b/modules/DesktopIcons/src/main/resources/UIComponents/magnifier-history_dark.svg new file mode 100644 index 0000000000..f281d6b431 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/UIComponents/magnifier-history_dark.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/metal_bigclose_enabled.png b/modules/DesktopIcons/src/main/resources/UIComponents/metal_bigclose_enabled.png similarity index 100% rename from modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/metal_bigclose_enabled.png rename to modules/DesktopIcons/src/main/resources/UIComponents/metal_bigclose_enabled.png diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/metal_bigclose_pressed.png b/modules/DesktopIcons/src/main/resources/UIComponents/metal_bigclose_pressed.png similarity index 100% rename from modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/metal_bigclose_pressed.png rename to modules/DesktopIcons/src/main/resources/UIComponents/metal_bigclose_pressed.png diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/metal_bigclose_rollover.png b/modules/DesktopIcons/src/main/resources/UIComponents/metal_bigclose_rollover.png similarity index 100% rename from modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/metal_bigclose_rollover.png rename to modules/DesktopIcons/src/main/resources/UIComponents/metal_bigclose_rollover.png diff --git a/modules/DesktopIcons/src/main/resources/UIComponents/print.svg b/modules/DesktopIcons/src/main/resources/UIComponents/print.svg new file mode 100644 index 0000000000..660d1ea7f1 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/UIComponents/print.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/UIComponents/print_dark.svg b/modules/DesktopIcons/src/main/resources/UIComponents/print_dark.svg new file mode 100644 index 0000000000..7f7e9e86c6 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/UIComponents/print_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/UIComponents/rightArrow.svg b/modules/DesktopIcons/src/main/resources/UIComponents/rightArrow.svg new file mode 100644 index 0000000000..12e9bef3b5 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/UIComponents/rightArrow.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/UIComponents/rightArrow_dark.svg b/modules/DesktopIcons/src/main/resources/UIComponents/rightArrow_dark.svg new file mode 100644 index 0000000000..a3c3bdf361 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/UIComponents/rightArrow_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/UIComponents/save.svg b/modules/DesktopIcons/src/main/resources/UIComponents/save.svg new file mode 100644 index 0000000000..287e22fe8b --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/UIComponents/save.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/UIComponents/save_dark.svg b/modules/DesktopIcons/src/main/resources/UIComponents/save_dark.svg new file mode 100644 index 0000000000..98ed1f9c7d --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/UIComponents/save_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/UIComponents/simulator.svg b/modules/DesktopIcons/src/main/resources/UIComponents/simulator.svg new file mode 100644 index 0000000000..051d7d1d83 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/UIComponents/simulator.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/UIComponents/simulator_dark.svg b/modules/DesktopIcons/src/main/resources/UIComponents/simulator_dark.svg new file mode 100644 index 0000000000..e6fd6999df --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/UIComponents/simulator_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/vista_bigclose_enabled.png b/modules/DesktopIcons/src/main/resources/UIComponents/vista_bigclose_enabled.png similarity index 100% rename from modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/vista_bigclose_enabled.png rename to modules/DesktopIcons/src/main/resources/UIComponents/vista_bigclose_enabled.png diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/vista_bigclose_pressed.png b/modules/DesktopIcons/src/main/resources/UIComponents/vista_bigclose_pressed.png similarity index 100% rename from modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/vista_bigclose_pressed.png rename to modules/DesktopIcons/src/main/resources/UIComponents/vista_bigclose_pressed.png diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/vista_bigclose_rollover.png b/modules/DesktopIcons/src/main/resources/UIComponents/vista_bigclose_rollover.png similarity index 100% rename from modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/vista_bigclose_rollover.png rename to modules/DesktopIcons/src/main/resources/UIComponents/vista_bigclose_rollover.png diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/win_bigclose_enabled.png b/modules/DesktopIcons/src/main/resources/UIComponents/win_bigclose_enabled.png similarity index 100% rename from modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/win_bigclose_enabled.png rename to modules/DesktopIcons/src/main/resources/UIComponents/win_bigclose_enabled.png diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/win_bigclose_pressed.png b/modules/DesktopIcons/src/main/resources/UIComponents/win_bigclose_pressed.png similarity index 100% rename from modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/win_bigclose_pressed.png rename to modules/DesktopIcons/src/main/resources/UIComponents/win_bigclose_pressed.png diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/win_bigclose_rollover.png b/modules/DesktopIcons/src/main/resources/UIComponents/win_bigclose_rollover.png similarity index 100% rename from modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/win_bigclose_rollover.png rename to modules/DesktopIcons/src/main/resources/UIComponents/win_bigclose_rollover.png diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/xp_bigclose_enabled.png b/modules/DesktopIcons/src/main/resources/UIComponents/xp_bigclose_enabled.png similarity index 100% rename from modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/xp_bigclose_enabled.png rename to modules/DesktopIcons/src/main/resources/UIComponents/xp_bigclose_enabled.png diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/xp_bigclose_pressed.png b/modules/DesktopIcons/src/main/resources/UIComponents/xp_bigclose_pressed.png similarity index 100% rename from modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/xp_bigclose_pressed.png rename to modules/DesktopIcons/src/main/resources/UIComponents/xp_bigclose_pressed.png diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/xp_bigclose_rollover.png b/modules/DesktopIcons/src/main/resources/UIComponents/xp_bigclose_rollover.png similarity index 100% rename from modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/xp_bigclose_rollover.png rename to modules/DesktopIcons/src/main/resources/UIComponents/xp_bigclose_rollover.png diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/EdgeColorMode_MIXED.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/EdgeColorMode_MIXED.svg new file mode 100644 index 0000000000..c708727f53 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/EdgeColorMode_MIXED.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/EdgeColorMode_MIXED_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/EdgeColorMode_MIXED_dark.svg new file mode 100644 index 0000000000..97cd5d21f6 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/EdgeColorMode_MIXED_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/EdgeColorMode_SELF.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/EdgeColorMode_SELF.svg new file mode 100644 index 0000000000..2794c61545 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/EdgeColorMode_SELF.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/EdgeColorMode_SELF_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/EdgeColorMode_SELF_dark.svg new file mode 100644 index 0000000000..c7f6724668 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/EdgeColorMode_SELF_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/EdgeColorMode_SOURCE.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/EdgeColorMode_SOURCE.svg new file mode 100644 index 0000000000..cf2f71f24f --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/EdgeColorMode_SOURCE.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/EdgeColorMode_SOURCE_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/EdgeColorMode_SOURCE_dark.svg new file mode 100644 index 0000000000..b50d3cb41b --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/EdgeColorMode_SOURCE_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/EdgeColorMode_TARGET.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/EdgeColorMode_TARGET.svg new file mode 100644 index 0000000000..8facacdab6 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/EdgeColorMode_TARGET.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/EdgeColorMode_TARGET_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/EdgeColorMode_TARGET_dark.svg new file mode 100644 index 0000000000..9f79714eeb --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/EdgeColorMode_TARGET_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/LabelColorMode_OBJECT.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/LabelColorMode_OBJECT.svg new file mode 100644 index 0000000000..d4ae36be4d --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/LabelColorMode_OBJECT.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/LabelColorMode_OBJECT_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/LabelColorMode_OBJECT_dark.svg new file mode 100644 index 0000000000..d57c78d778 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/LabelColorMode_OBJECT_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/LabelColorMode_SELF.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/LabelColorMode_SELF.svg new file mode 100644 index 0000000000..f895f07f9f --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/LabelColorMode_SELF.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/LabelColorMode_SELF_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/LabelColorMode_SELF_dark.svg new file mode 100644 index 0000000000..0cb1ae4f9d --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/LabelColorMode_SELF_dark.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/LabelSizeMode_SCREEN.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/LabelSizeMode_SCREEN.svg new file mode 100644 index 0000000000..1bbf492029 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/LabelSizeMode_SCREEN.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/LabelSizeMode_SCREEN_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/LabelSizeMode_SCREEN_dark.svg new file mode 100644 index 0000000000..fb90fbad81 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/LabelSizeMode_SCREEN_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/LabelSizeMode_ZOOM.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/LabelSizeMode_ZOOM.svg new file mode 100644 index 0000000000..55b7ff4553 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/LabelSizeMode_ZOOM.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/LabelSizeMode_ZOOM_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/LabelSizeMode_ZOOM_dark.svg new file mode 100644 index 0000000000..b79215cac3 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/LabelSizeMode_ZOOM_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/arrowDown.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/arrowDown.svg new file mode 100644 index 0000000000..3ed6439deb --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/arrowDown.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/arrowDown_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/arrowDown_dark.svg new file mode 100644 index 0000000000..455d7159b3 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/arrowDown_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/arrowDown_rollover.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/arrowDown_rollover.svg new file mode 100644 index 0000000000..eeaf3257cc --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/arrowDown_rollover.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/arrowDown_rollover_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/arrowDown_rollover_dark.svg new file mode 100644 index 0000000000..45bcad5934 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/arrowDown_rollover_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/arrowUp.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/arrowUp.svg new file mode 100644 index 0000000000..3a751feffa --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/arrowUp.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/arrowUp_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/arrowUp_dark.svg new file mode 100644 index 0000000000..5ff5c733b9 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/arrowUp_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/arrowUp_rollover.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/arrowUp_rollover.svg new file mode 100644 index 0000000000..beee1d821e --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/arrowUp_rollover.svg @@ -0,0 +1,15 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/arrowUp_rollover_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/arrowUp_rollover_dark.svg new file mode 100644 index 0000000000..0066c567d9 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/arrowUp_rollover_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/avoidOverlap.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/avoidOverlap.svg new file mode 100644 index 0000000000..0e39552118 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/avoidOverlap.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/avoidOverlap_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/avoidOverlap_dark.svg new file mode 100644 index 0000000000..0908a657a6 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/avoidOverlap_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/bottomPanelClose.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/bottomPanelClose.svg new file mode 100644 index 0000000000..54a0f5e09e --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/bottomPanelClose.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/bottomPanelClose_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/bottomPanelClose_dark.svg new file mode 100644 index 0000000000..d999770dac --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/bottomPanelClose_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/bottomPanelOpen.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/bottomPanelOpen.svg new file mode 100644 index 0000000000..c84470bce6 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/bottomPanelOpen.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/bottomPanelOpen_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/bottomPanelOpen_dark.svg new file mode 100644 index 0000000000..6f1b5746cb --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/bottomPanelOpen_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/centerOnGraph.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/centerOnGraph.svg new file mode 100644 index 0000000000..7b3409f0a0 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/centerOnGraph.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/centerOnGraph_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/centerOnGraph_dark.svg new file mode 100644 index 0000000000..572552a778 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/centerOnGraph_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/centerOnZero.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/centerOnZero.svg new file mode 100644 index 0000000000..00f4f779ad --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/centerOnZero.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/centerOnZero_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/centerOnZero_dark.svg new file mode 100644 index 0000000000..54d829fde9 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/centerOnZero_dark.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/configureLabels.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/configureLabels.svg new file mode 100644 index 0000000000..1008187ddd --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/configureLabels.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/configureLabels_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/configureLabels_dark.svg new file mode 100644 index 0000000000..ba925f1c23 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/configureLabels_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/contract.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/contract.svg new file mode 100644 index 0000000000..8b3299c316 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/contract.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/contract_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/contract_dark.svg new file mode 100644 index 0000000000..d9a3eb9961 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/contract_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/delete.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/delete.svg new file mode 100644 index 0000000000..5a0acc26c2 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/delete.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/delete_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/delete_dark.svg new file mode 100644 index 0000000000..7c7bc9984b --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/delete_dark.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/drag.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/drag.svg new file mode 100644 index 0000000000..8ef5490445 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/drag.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/drag_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/drag_dark.svg new file mode 100644 index 0000000000..8bfb879c23 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/drag_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/edgeColorMode.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/edgeColorMode.svg new file mode 100644 index 0000000000..f895f07f9f --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/edgeColorMode.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/edgeColorMode_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/edgeColorMode_dark.svg new file mode 100644 index 0000000000..0cb1ae4f9d --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/edgeColorMode_dark.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/edit.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/edit.svg new file mode 100644 index 0000000000..446bc0a680 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/edit.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/edit_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/edit_dark.svg new file mode 100644 index 0000000000..14ec88b087 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/edit_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/expand.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/expand.svg new file mode 100644 index 0000000000..20d716d69f --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/expand.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/expand_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/expand_dark.svg new file mode 100644 index 0000000000..6ed2e1f02d --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/expand_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/fitToNodeSize.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/fitToNodeSize.svg new file mode 100644 index 0000000000..022c5b909c --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/fitToNodeSize.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/fitToNodeSize_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/fitToNodeSize_dark.svg new file mode 100644 index 0000000000..ec38a31879 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/fitToNodeSize_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/free.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/free.svg new file mode 100644 index 0000000000..7b554ab36e --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/free.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/free_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/free_dark.svg new file mode 100644 index 0000000000..d6bc9968f8 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/free_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/graph.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/graph.svg new file mode 100644 index 0000000000..1018fa00ea --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/graph.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/graph_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/graph_dark.svg new file mode 100644 index 0000000000..5193257972 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/graph_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/group.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/group.svg new file mode 100644 index 0000000000..49ebec24c1 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/group.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/group_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/group_dark.svg new file mode 100644 index 0000000000..7baf9918c6 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/group_dark.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/labelColorMode.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/labelColorMode.svg new file mode 100644 index 0000000000..a87f1d4a87 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/labelColorMode.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/labelColorMode_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/labelColorMode_dark.svg new file mode 100644 index 0000000000..1b97706b79 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/labelColorMode_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/labelSizeMode.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/labelSizeMode.svg new file mode 100644 index 0000000000..c36fdf61fa --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/labelSizeMode.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/labelSizeMode_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/labelSizeMode_dark.svg new file mode 100644 index 0000000000..fd43d7868a --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/labelSizeMode_dark.svg @@ -0,0 +1,18 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/mouse.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/mouse.svg new file mode 100644 index 0000000000..cf4da8c624 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/mouse.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/mouse_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/mouse_dark.svg new file mode 100644 index 0000000000..f894932e5c --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/mouse_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/new-workspace.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/new-workspace.svg new file mode 100644 index 0000000000..9e1ac1b452 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/new-workspace.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/new-workspace_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/new-workspace_dark.svg new file mode 100644 index 0000000000..74a2195c6f --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/new-workspace_dark.svg @@ -0,0 +1,21 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/on.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/on.svg new file mode 100644 index 0000000000..1dec84ff04 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/on.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/on_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/on_dark.svg new file mode 100644 index 0000000000..2a54f7a88a --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/on_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/optionDialog_viz_name.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/optionDialog_viz_name.svg new file mode 100644 index 0000000000..c2a58c28d3 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/optionDialog_viz_name.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/optionDialog_viz_name_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/optionDialog_viz_name_dark.svg new file mode 100644 index 0000000000..10ea1dd0c2 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/optionDialog_viz_name_dark.svg @@ -0,0 +1,20 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/pan.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/pan.svg new file mode 100644 index 0000000000..f171351571 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/pan.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/pan_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/pan_dark.svg new file mode 100644 index 0000000000..b7da71e42a --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/pan_dark.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/rectangle.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/rectangle.svg new file mode 100644 index 0000000000..9f859b5688 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/rectangle.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/rectangle_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/rectangle_dark.svg new file mode 100644 index 0000000000..5bae0e5bee --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/rectangle_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/resetLabelColor.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/resetLabelColor.svg new file mode 100644 index 0000000000..1f2696c7ca --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/resetLabelColor.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/resetLabelColor_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/resetLabelColor_dark.svg new file mode 100644 index 0000000000..104e282b96 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/resetLabelColor_dark.svg @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/screenshot.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/screenshot.svg new file mode 100644 index 0000000000..155725e701 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/screenshot.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/screenshot_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/screenshot_dark.svg new file mode 100644 index 0000000000..65241cf1ec --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/screenshot_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/settle.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/settle.svg new file mode 100644 index 0000000000..217d6a2804 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/settle.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/settle_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/settle_dark.svg new file mode 100644 index 0000000000..ee53c78b0d --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/settle_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/showEdgeLabels.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/showEdgeLabels.svg new file mode 100644 index 0000000000..82134668b6 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/showEdgeLabels.svg @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/showEdgeLabels_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/showEdgeLabels_dark.svg new file mode 100644 index 0000000000..a05034e012 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/showEdgeLabels_dark.svg @@ -0,0 +1,14 @@ + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/showEdges.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/showEdges.svg new file mode 100644 index 0000000000..dcde5a47a9 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/showEdges.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/showEdges_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/showEdges_dark.svg new file mode 100644 index 0000000000..4f641fe0f8 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/showEdges_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/showHulls.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/showHulls.svg new file mode 100644 index 0000000000..8df7602142 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/showHulls.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/showHulls_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/showHulls_dark.svg new file mode 100644 index 0000000000..825aa6687a --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/showHulls_dark.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/showNodeLabels.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/showNodeLabels.svg new file mode 100644 index 0000000000..4e8ee9bd8d --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/showNodeLabels.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/showNodeLabels_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/showNodeLabels_dark.svg new file mode 100644 index 0000000000..ba66e48945 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/showNodeLabels_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/table-select.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/table-select.svg new file mode 100644 index 0000000000..156a077b4b --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/table-select.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/table-select_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/table-select_dark.svg new file mode 100644 index 0000000000..d13b8b277a --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/table-select_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/tool.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/tool.svg new file mode 100644 index 0000000000..d936183dbf --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/tool.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/tool_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/tool_dark.svg new file mode 100644 index 0000000000..b7d038b590 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/tool_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/ungroup.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/ungroup.svg new file mode 100644 index 0000000000..a0ed4dbc06 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/ungroup.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/VisualizationImpl/ungroup_dark.svg b/modules/DesktopIcons/src/main/resources/VisualizationImpl/ungroup_dark.svg new file mode 100644 index 0000000000..afdef206bc --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/VisualizationImpl/ungroup_dark.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/WelcomeScreen/gephifile20.svg b/modules/DesktopIcons/src/main/resources/WelcomeScreen/gephifile20.svg new file mode 100644 index 0000000000..7181419802 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/WelcomeScreen/gephifile20.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/WelcomeScreen/gephifile20_dark.svg b/modules/DesktopIcons/src/main/resources/WelcomeScreen/gephifile20_dark.svg new file mode 100644 index 0000000000..8e6278694c --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/WelcomeScreen/gephifile20_dark.svg @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/WelcomeScreen/logo_transparent_small.svg b/modules/DesktopIcons/src/main/resources/WelcomeScreen/logo_transparent_small.svg new file mode 100644 index 0000000000..efd62c6407 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/WelcomeScreen/logo_transparent_small.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopIcons/src/main/resources/WelcomeScreen/logo_transparent_small_dark.svg b/modules/DesktopIcons/src/main/resources/WelcomeScreen/logo_transparent_small_dark.svg new file mode 100644 index 0000000000..e5b9d7b665 --- /dev/null +++ b/modules/DesktopIcons/src/main/resources/WelcomeScreen/logo_transparent_small_dark.svg @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DesktopImport/pom.xml b/modules/DesktopImport/pom.xml index 634350f8f6..50cd52b9a5 100644 --- a/modules/DesktopImport/pom.xml +++ b/modules/DesktopImport/pom.xml @@ -4,13 +4,12 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. - org.gephi desktop-import - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm DesktopImport @@ -34,7 +33,7 @@ ${project.groupId} - lib.validation + ui-utils ${project.groupId} @@ -44,6 +43,14 @@ ${project.groupId} utils-longtask + + ${project.groupId} + utils + + + ${project.groupId} + desktop-icons + org.netbeans.api org-openide-awt @@ -56,6 +63,10 @@ org.netbeans.api org-openide-util + + org.netbeans.api + org-openide-util-ui + org.netbeans.api org-openide-dialogs @@ -81,7 +92,7 @@ - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/DesktopImportControllerUI.java b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/DesktopImportControllerUI.java index d75ff86f97..3b3416fa39 100644 --- a/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/DesktopImportControllerUI.java +++ b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/DesktopImportControllerUI.java @@ -39,57 +39,71 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.importer; +import java.awt.Dialog; import java.io.File; -import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.Reader; +import java.lang.reflect.Array; import java.lang.reflect.InvocationTargetException; -import java.nio.ByteBuffer; +import java.text.MessageFormat; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; -import java.util.zip.GZIPInputStream; import javax.swing.JPanel; import javax.swing.SwingUtilities; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import org.apache.commons.compress.compressors.bzip2.BZip2CompressorInputStream; import org.gephi.desktop.importer.api.ImportControllerUI; import org.gephi.desktop.mrufiles.api.MostRecentFiles; -import org.gephi.desktop.project.api.ProjectControllerUI; import org.gephi.io.importer.api.Container; import org.gephi.io.importer.api.Database; import org.gephi.io.importer.api.ImportController; +import org.gephi.io.importer.api.ImportException; +import org.gephi.io.importer.api.ImportUtils; +import org.gephi.io.importer.api.Issue; import org.gephi.io.importer.api.Report; import org.gephi.io.importer.spi.DatabaseImporter; import org.gephi.io.importer.spi.FileImporter; import org.gephi.io.importer.spi.ImporterUI; import org.gephi.io.importer.spi.ImporterWizardUI; -import org.gephi.io.importer.spi.SpigotImporter; +import org.gephi.io.importer.spi.WizardImporter; import org.gephi.io.processor.spi.Processor; +import org.gephi.io.processor.spi.ProcessorConfigurationException; import org.gephi.io.processor.spi.ProcessorUI; +import org.gephi.lib.validation.DialogDescriptorWithValidation; +import org.gephi.project.api.Project; import org.gephi.project.api.ProjectController; import org.gephi.project.api.Workspace; +import org.gephi.utils.CharsetToolkit; +import org.gephi.utils.TempDirUtils; import org.gephi.utils.longtask.api.LongTaskErrorHandler; import org.gephi.utils.longtask.api.LongTaskExecutor; import org.gephi.utils.longtask.spi.LongTask; -import org.netbeans.validation.api.ui.ValidationPanel; +import org.gephi.utils.progress.Progress; +import org.gephi.utils.progress.ProgressTicket; import org.openide.DialogDescriptor; import org.openide.DialogDisplayer; import org.openide.NotifyDescriptor; +import org.openide.WizardDescriptor; import org.openide.awt.StatusDisplayer; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileUtil; import org.openide.util.Exceptions; import org.openide.util.Lookup; import org.openide.util.NbBundle; +import org.openide.util.io.ReaderInputStream; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian * @author Sebastien Heymann */ @@ -97,26 +111,18 @@ Development and Distribution License("CDDL") (collectively, the public class DesktopImportControllerUI implements ImportControllerUI { private final LongTaskExecutor executor; - private final LongTaskErrorHandler errorHandler; + private final LongTaskErrorHandler defaultErrorHandler; private final ImportController controller; public DesktopImportControllerUI() { controller = Lookup.getDefault().lookup(ImportController.class); - errorHandler = new LongTaskErrorHandler() { + defaultErrorHandler = new LongTaskErrorHandler() { @Override public void fatalError(Throwable t) { if (t instanceof OutOfMemoryError) { return; } -// t.printStackTrace(); -// String message = t.getCause().getMessage(); -// if (message == null || message.isEmpty()) { -// message = t.getMessage(); -// } -// NotifyDescriptor.Message msg = new NotifyDescriptor.Message(message, NotifyDescriptor.WARNING_MESSAGE); -// DialogDisplayer.getDefault().notify(msg); Exceptions.printStackTrace(t); - t.printStackTrace(); } }; executor = new LongTaskExecutor(true, "Importer", 10); @@ -124,198 +130,266 @@ public void fatalError(Throwable t) { @Override public void importFile(FileObject fileObject) { - try { - final FileImporter importer = controller.getFileImporter(FileUtil.toFile(fileObject)); - if (importer == null) { - NotifyDescriptor.Message msg = new NotifyDescriptor.Message(NbBundle.getMessage(getClass(), "DesktopImportControllerUI.error_no_matching_file_importer"), NotifyDescriptor.WARNING_MESSAGE); - DialogDisplayer.getDefault().notify(msg); - return; - } + importFiles(new FileObject[] {fileObject}); + } - //MRU - MostRecentFiles mostRecentFiles = Lookup.getDefault().lookup(MostRecentFiles.class); - mostRecentFiles.addFile(fileObject.getPath()); + @Override + public void importFiles(FileObject[] fileObjects) { + MostRecentFiles mostRecentFiles = Lookup.getDefault().lookup(MostRecentFiles.class); - ImporterUI ui = controller.getUI(importer); - if (ui != null) { - String title = NbBundle.getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.file.ui.dialog.title", ui.getDisplayName()); - JPanel panel = ui.getPanel(); - ui.setup(importer); - final DialogDescriptor dd = new DialogDescriptor(panel, title); - if (panel instanceof ValidationPanel) { - ValidationPanel vp = (ValidationPanel) panel; - vp.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - dd.setValid(!((ValidationPanel) e.getSource()).isProblem()); - } - }); + fileObjects = Arrays.copyOf(fileObjects, fileObjects.length); + + //Extract files if they are zipped: + for (int i = 0; i < fileObjects.length; i++) { + fileObjects[i] = ImportUtils.getArchivedFile(fileObjects[i]); + if (FileUtil.isArchiveArtifact(fileObjects[i])) { + try { + //Copy the archived file so we never have problems converting it to a simple File during import: + File tempDir = TempDirUtils.createTempDirectory(); + fileObjects[i] = + FileUtil.copyFile(fileObjects[i], FileUtil.toFileObject(tempDir), fileObjects[i].getName()); + } catch (IOException ex) { + Exceptions.printStackTrace(ex); } + } + } - Object result = DialogDisplayer.getDefault().notify(dd); - if (!result.equals(NotifyDescriptor.OK_OPTION)) { - ui.unsetup(false); + Reader[] readers = new Reader[fileObjects.length]; + FileImporter[] importers = new FileImporter[fileObjects.length]; + try { + for (int i = 0; i < fileObjects.length; i++) { + FileObject fileObject = fileObjects[i]; + importers[i] = controller.getFileImporter(fileObject); + + if (importers[i] == null) { + NotifyDescriptor.Message msg = new NotifyDescriptor.Message( + NbBundle.getMessage(getClass(), "DesktopImportControllerUI.error_no_matching_file_importer"), + NotifyDescriptor.WARNING_MESSAGE); + DialogDisplayer.getDefault().notify(msg); return; } - ui.unsetup(true); - } - LongTask task = null; - if (importer instanceof LongTask) { - task = (LongTask) importer; - } + readers[i] = ImportUtils.getTextReader(fileObject); - //Execute task - fileObject = getArchivedFile(fileObject); - final String containerSource = fileObject.getNameExt(); - final InputStream stream = fileObject.getInputStream(); - String taskName = NbBundle.getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.taskName", containerSource); - executor.execute(task, new Runnable() { - @Override - public void run() { - try { - Container container = controller.importFile(stream, importer); - if (container != null) { - container.setSource(containerSource); - finishImport(container); - } - } catch (Exception ex) { - throw new RuntimeException(ex); - } - } - }, taskName, errorHandler); - if (fileObject.getPath().startsWith(System.getProperty("java.io.tmpdir"))) { - try { - fileObject.delete(); - } catch (IOException ex) { - Exceptions.printStackTrace(ex); - } + //MRU + mostRecentFiles.addFile(fileObject.getPath()); } - } catch (Exception ex) { - Logger.getLogger("").log(Level.WARNING, "", ex); + + importFiles(readers, importers, fileObjects, null); + } catch (IOException ex) { + throw new RuntimeException(ex); } } @Override public void importStream(final InputStream stream, String importerName) { + importStream(stream, null, importerName); + } + + @Override + public void importStream(final InputStream stream, String streamName, String importerName) { + final FileImporter importer = controller.getFileImporter(importerName); + if (importer == null) { + NotifyDescriptor.Message msg = new NotifyDescriptor.Message( + NbBundle.getMessage(getClass(), "DesktopImportControllerUI.error_no_matching_file_importer"), + NotifyDescriptor.WARNING_MESSAGE); + DialogDisplayer.getDefault().notify(msg); + return; + } + try { - final FileImporter importer = controller.getFileImporter(importerName); - if (importer == null) { - NotifyDescriptor.Message msg = new NotifyDescriptor.Message(NbBundle.getMessage(getClass(), "DesktopImportControllerUI.error_no_matching_file_importer"), NotifyDescriptor.WARNING_MESSAGE); - DialogDisplayer.getDefault().notify(msg); - return; + Reader reader = ImportUtils.getTextReader(stream); + importFile(reader, streamName, importer); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + + @Override + public void importFile(final Reader reader, String importerName) { + importFile(reader, null, importerName); + } + + @Override + public void importFile(final Reader reader, String fileName, String importerName) { + final FileImporter importer = controller.getFileImporter(importerName); + if (importer == null) { + NotifyDescriptor.Message msg = new NotifyDescriptor.Message( + NbBundle.getMessage(getClass(), "DesktopImportControllerUI.error_no_matching_file_importer"), + NotifyDescriptor.WARNING_MESSAGE); + DialogDisplayer.getDefault().notify(msg); + return; + } + + importFile(reader, fileName, importer); + } + + private void importFile(final Reader reader, final String fileName, final FileImporter importer) { + importFiles(new Reader[] {reader}, new FileImporter[] {importer}, new String[] {fileName}); + } + + private void importFiles(final Reader[] readers, final FileImporter[] importers, final String[] names) { + importFiles(readers, importers, null, names); + } + + private void importFiles(final Reader[] readers, final FileImporter[] importers, FileObject[] fileObjects, String[] names) { + try { + File[] files = new File[readers.length]; + + Map> importerUIs = new HashMap<>(); + for (int i = 0; i < importers.length; i++) { + FileImporter importer = importers[i]; + ImporterUI ui = controller.getUI(importer); + if (ui != null) { + List l = importerUIs.get(ui); + if (l == null) { + l = new ArrayList<>(); + importerUIs.put(ui, l); + } + l.add(importer); + } + + if (importer instanceof FileImporter.FileAware) { + try (Reader reader = readers[i]) { + File file = null; + if (fileObjects != null) { + file = FileUtil.toFile(fileObjects[i]); + } + + if (file == null) { + //There is no source file but the importer needs it, create temporary copy: + String fileName = "tmp_file" + 1; + String charset = "UTF-8"; + if (fileObjects != null && + fileObjects[i] != null) {//Netbeans FileUtil.toFile bug returning null?? Try to recover: + fileName = fileObjects[i].getNameExt(); + CharsetToolkit charsetToolkit = new CharsetToolkit(fileObjects[i].getInputStream()); + charset = charsetToolkit.getCharset().name(); + } + + file = TempDirUtils.createTempDir().createFile(fileName); + try (FileOutputStream fos = new FileOutputStream(file)) { + FileUtil.copy(new ReaderInputStream(reader, charset), fos); + } + } + + files[i] = file; + ((FileImporter.FileAware) importer).setFile(file); + } + } } - ImporterUI ui = controller.getUI(importer); - if (ui != null) { - String title = NbBundle.getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.file.ui.dialog.title", ui.getDisplayName()); + for (Map.Entry> entry : importerUIs.entrySet()) { + ImporterUI ui = entry.getKey(); + String title = NbBundle + .getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.file.ui.dialog.title", + ui.getDisplayName()); JPanel panel = ui.getPanel(); - ui.setup(importer); - final DialogDescriptor dd = new DialogDescriptor(panel, title); - if (panel instanceof ValidationPanel) { - ValidationPanel vp = (ValidationPanel) panel; - vp.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - dd.setValid(!((ValidationPanel) e.getSource()).isProblem()); - } - }); + + FileImporter[] fi = entry.getValue() + .toArray((FileImporter[]) Array.newInstance(entry.getValue().get(0).getClass(), 0)); + ui.setup(fi); + + if (panel != null) { + final DialogDescriptor dd = DialogDescriptorWithValidation.dialog(panel, title); + Object result = DialogDisplayer.getDefault().notify(dd); + if (!result.equals(NotifyDescriptor.OK_OPTION)) { + ui.unsetup(false); + return; + } } - Object result = DialogDisplayer.getDefault().notify(dd); - if (!result.equals(NotifyDescriptor.OK_OPTION)) { - ui.unsetup(false); - return; + if (ui instanceof ImporterUI.WithWizard) { + boolean finishedOk = showWizard(ui, ((ImporterUI.WithWizard) ui).getWizardDescriptor()); + if (!finishedOk) { + ui.unsetup(false); + return; + } } + ui.unsetup(true); } - LongTask task = null; - if (importer instanceof LongTask) { - task = (LongTask) importer; + ImportErrorHandler errorHandler = new ImportErrorHandler(); + final List results = new ArrayList<>(); + for (int i = 0; i < importers.length; i++) { + doImport(results, readers[i], names != null ? names[0] : null, fileObjects != null ? fileObjects[i] : null, files[i], importers[i], + errorHandler); } - //Execute task - final String containerSource = NbBundle.getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.streamSource", importerName); - String taskName = NbBundle.getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.taskName", containerSource); - executor.execute(task, new Runnable() { - @Override - public void run() { - try { - Container container = controller.importFile(stream, importer); - if (container != null) { - container.setSource(containerSource); - finishImport(container); - } - } catch (Exception ex) { - throw new RuntimeException(ex); - } - } - }, taskName, errorHandler); + String taskName = null; + if (importers.length == 1) { + taskName = NbBundle + .getMessage(DesktopImportControllerUI.class, + "DesktopImportControllerUI.finishingImport", + fileObjects != null ? fileObjects[0].getNameExt() : (names != null ? names[0] : null)); + } else { + taskName = NbBundle + .getMessage(DesktopImportControllerUI.class, + "DesktopImportControllerUI.multiImport.finishingImport", + importers.length); + } + FinishImport finishImport = new FinishImport(results, errorHandler); + executor.execute(finishImport, finishImport, taskName, defaultErrorHandler); } catch (Exception ex) { - Logger.getLogger("").log(Level.WARNING, "", ex); + Exceptions.printStackTrace(ex); } } - @Override - public void importFile(final Reader reader, String importerName) { - try { - final FileImporter importer = controller.getFileImporter(importerName); - if (importer == null) { - NotifyDescriptor.Message msg = new NotifyDescriptor.Message(NbBundle.getMessage(getClass(), "DesktopImportControllerUI.error_no_matching_file_importer"), NotifyDescriptor.WARNING_MESSAGE); - DialogDisplayer.getDefault().notify(msg); - return; - } + private void doImport(final List results, final Reader reader, final String containerName, final FileObject fileObject, + final File file, + final FileImporter importer, + final ImportErrorHandler errorHandler) { + LongTask task = null; + if (importer instanceof LongTask) { + task = (LongTask) importer; + } - ImporterUI ui = controller.getUI(importer); - if (ui != null) { - ui.setup(importer); - String title = NbBundle.getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.file.ui.dialog.title", ui.getDisplayName()); - JPanel panel = ui.getPanel(); - final DialogDescriptor dd = new DialogDescriptor(panel, title); - if (panel instanceof ValidationPanel) { - ValidationPanel vp = (ValidationPanel) panel; - vp.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - dd.setValid(!((ValidationPanel) e.getSource()).isProblem()); - } - }); - } + if (file == null && reader == null) { + throw new NullPointerException("Null file and reader!"); + } - Object result = DialogDisplayer.getDefault().notify(dd); - if (!result.equals(NotifyDescriptor.OK_OPTION)) { - ui.unsetup(false); - return; + if (importer == null) { + throw new NullPointerException("Null importer!"); + } + + //Execute task + final String containerSource = fileObject != null ? fileObject.getNameExt() : (containerName != null ? containerName : NbBundle + .getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.streamSource", + importer.getClass().getSimpleName())); + String taskName = + NbBundle.getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.taskName", containerSource); + executor.execute(task, () -> { + try { + Container container; + if (importer instanceof FileImporter.FileAware && file != null) { + container = controller.importFile(file, importer); + } else { + container = controller.importFile(reader, importer); } - ui.unsetup(true); - } - LongTask task = null; - if (importer instanceof LongTask) { - task = (LongTask) importer; + if (container != null) { + container.setSource(containerSource); + results.add(container); + } + } catch (Exception ex) { + throw new RuntimeException(ex); } + }, taskName, errorHandler.createHandler(containerSource)); + } - //Execute task - final String containerSource = NbBundle.getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.streamSource", importerName); - String taskName = NbBundle.getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.taskName", containerSource); - executor.execute(task, new Runnable() { - @Override - public void run() { - try { - Container container = controller.importFile(reader, importer); - if (container != null) { - container.setSource(containerSource); - finishImport(container); - } - } catch (Exception ex) { - throw new RuntimeException(ex); - } - } - }, taskName, errorHandler); - } catch (Exception ex) { - Logger.getLogger("").log(Level.WARNING, "", ex); + private boolean showWizard(ImporterUI importer, WizardDescriptor wizardDescriptor) { + if (wizardDescriptor == null) { + return true;//Nothing to show } + + wizardDescriptor.setTitleFormat(new MessageFormat("{0} ({1})")); + wizardDescriptor.setTitle(importer.getDisplayName()); + Dialog dialog = DialogDisplayer.getDefault().createDialog(wizardDescriptor); + dialog.setVisible(true); + dialog.toFront(); + + return wizardDescriptor.getValue() == WizardDescriptor.FINISH_OPTION; } @Override @@ -327,26 +401,20 @@ public void importDatabase(DatabaseImporter importer) { public void importDatabase(Database database, final DatabaseImporter importer) { try { if (importer == null) { - NotifyDescriptor.Message msg = new NotifyDescriptor.Message(NbBundle.getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.error_no_matching_db_importer"), NotifyDescriptor.WARNING_MESSAGE); + NotifyDescriptor.Message msg = new NotifyDescriptor.Message(NbBundle + .getMessage(DesktopImportControllerUI.class, + "DesktopImportControllerUI.error_no_matching_db_importer"), NotifyDescriptor.WARNING_MESSAGE); DialogDisplayer.getDefault().notify(msg); return; } ImporterUI ui = controller.getUI(importer); if (ui != null) { - String title = NbBundle.getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.database.ui.dialog.title"); + String title = NbBundle + .getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.database.ui.dialog.title"); JPanel panel = ui.getPanel(); - ui.setup(importer); - final DialogDescriptor dd = new DialogDescriptor(panel, title); - if (panel instanceof ValidationPanel) { - ValidationPanel vp = (ValidationPanel) panel; - vp.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - dd.setValid(!((ValidationPanel) e.getSource()).isProblem()); - } - }); - } + ui.setup(new DatabaseImporter[] {importer}); + final DialogDescriptor dd = DialogDescriptorWithValidation.dialog(panel, title); Object result = DialogDisplayer.getDefault().notify(dd); if (result.equals(NotifyDescriptor.CANCEL_OPTION) || result.equals(NotifyDescriptor.CLOSED_OPTION)) { @@ -365,9 +433,11 @@ public void stateChanged(ChangeEvent e) { } //Execute task - final String containerSource = database != null ? database.getName() : (ui != null ? ui.getDisplayName() : importer.getClass().getSimpleName()); + final String containerSource = database != null ? database.getName() : + (ui != null ? ui.getDisplayName() : importer.getClass().getSimpleName()); final Database db = database; - String taskName = NbBundle.getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.taskName", containerSource); + String taskName = NbBundle + .getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.taskName", containerSource); executor.execute(task, new Runnable() { @Override public void run() { @@ -375,44 +445,39 @@ public void run() { Container container = controller.importDatabase(db, importer); if (container != null) { container.setSource(containerSource); - finishImport(container); + new FinishImport(Collections.singletonList(container), null).run(); } } catch (Exception ex) { throw new RuntimeException(ex); } } - }, taskName, errorHandler); + }, taskName, defaultErrorHandler); } catch (Exception ex) { - Logger.getLogger("").log(Level.WARNING, "", ex); + Logger.getLogger("").log(Level.SEVERE, "", ex); } } @Override - public void importSpigot(final SpigotImporter importer) { + public void importWizard(final WizardImporter importer) { try { if (importer == null) { - NotifyDescriptor.Message msg = new NotifyDescriptor.Message(NbBundle.getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.error_no_matching_db_importer"), NotifyDescriptor.WARNING_MESSAGE); + NotifyDescriptor.Message msg = new NotifyDescriptor.Message(NbBundle + .getMessage(DesktopImportControllerUI.class, + "DesktopImportControllerUI.error_no_matching_db_importer"), NotifyDescriptor.WARNING_MESSAGE); DialogDisplayer.getDefault().notify(msg); return; } - String containerSource = NbBundle.getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.spigotSource", ""); + String containerSource = + NbBundle.getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.wizardSource", ""); ImporterUI ui = controller.getUI(importer); if (ui != null) { - String title = NbBundle.getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.spigot.ui.dialog.title", ui.getDisplayName()); + String title = NbBundle + .getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.wizard.ui.dialog.title", + ui.getDisplayName()); JPanel panel = ui.getPanel(); - ui.setup(importer); - final DialogDescriptor dd = new DialogDescriptor(panel, title); - if (panel instanceof ValidationPanel) { - ValidationPanel vp = (ValidationPanel) panel; - vp.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - dd.setValid(!((ValidationPanel) e.getSource()).isProblem()); - } - }); - } - + ui.setup(new WizardImporter[] {importer}); + final DialogDescriptor dd = DialogDescriptorWithValidation.dialog(panel, title); Object result = DialogDisplayer.getDefault().notify(dd); if (result.equals(NotifyDescriptor.CANCEL_OPTION) || result.equals(NotifyDescriptor.CLOSED_OPTION)) { ui.unsetup(false); @@ -433,169 +498,38 @@ public void stateChanged(ChangeEvent e) { //Execute task final String source = containerSource; - String taskName = NbBundle.getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.taskName", containerSource); + String taskName = NbBundle + .getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.taskName", containerSource); executor.execute(task, new Runnable() { @Override public void run() { try { - Container container = controller.importSpigot(importer); + Container container = controller.importWizard(importer); if (container != null) { container.setSource(source); - finishImport(container); + new FinishImport(Collections.singletonList(container), null).run(); } } catch (Exception ex) { throw new RuntimeException(ex); } } - }, taskName, errorHandler); + }, taskName, defaultErrorHandler); } catch (Exception ex) { Logger.getLogger("").log(Level.WARNING, "", ex); } } - private void finishImport(Container container) { - if (container.verify()) { - Report report = container.getReport(); + private void showProcessorIssues(Report report) { + ProcessorIssuesReportPanel issuesReport = new ProcessorIssuesReportPanel(); + issuesReport.setData(report); - //Report panel - ReportPanel reportPanel = new ReportPanel(); - reportPanel.setData(report, container); - DialogDescriptor dd = new DialogDescriptor(reportPanel, NbBundle.getMessage(DesktopImportControllerUI.class, "ReportPanel.title")); - if (!DialogDisplayer.getDefault().notify(dd).equals(NotifyDescriptor.OK_OPTION)) { - reportPanel.destroy(); - return; - } - reportPanel.destroy(); - final Processor processor = reportPanel.getProcessor(); - - //Project - Workspace workspace = null; - ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); - ProjectControllerUI pcui = Lookup.getDefault().lookup(ProjectControllerUI.class); - if (pc.getCurrentProject() == null) { - pcui.newProject(); - workspace = pc.getCurrentWorkspace(); - } + DialogDescriptor dd = new DialogDescriptor(issuesReport, + NbBundle.getMessage(DesktopImportControllerUI.class, "ProcessorIssuesReportPanel.title")); + dd.setOptions( + new Object[] {NbBundle.getMessage(DesktopImportControllerUI.class, "ProcessorIssuesReportPanel.close")}); - //Process - final ProcessorUI pui = getProcessorUI(processor); - final ValidResult validResult = new ValidResult(); - if (pui != null) { - if (pui != null) { - try { - SwingUtilities.invokeAndWait(new Runnable() { - @Override - public void run() { - String title = NbBundle.getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.processor.ui.dialog.title"); - JPanel panel = pui.getPanel(); - pui.setup(processor); - final DialogDescriptor dd2 = new DialogDescriptor(panel, title); - if (panel instanceof ValidationPanel) { - ValidationPanel vp = (ValidationPanel) panel; - vp.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - dd2.setValid(!((ValidationPanel) e.getSource()).isProblem()); - } - }); - dd2.setValid(!vp.isProblem()); - } - Object result = DialogDisplayer.getDefault().notify(dd2); - if (result.equals(NotifyDescriptor.CANCEL_OPTION) || result.equals(NotifyDescriptor.CLOSED_OPTION)) { - validResult.setResult(false); - } else { - pui.unsetup(); //true - validResult.setResult(true); - } - } - }); - } catch (InterruptedException ex) { - Exceptions.printStackTrace(ex); - } catch (InvocationTargetException ex) { - Exceptions.printStackTrace(ex); - } - } - } - if (validResult.isResult()) { - controller.process(container, processor, workspace); - - //StatusLine notify - String source = container.getSource(); - if (source.isEmpty()) { - source = NbBundle.getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.status.importSuccess.default"); - } - StatusDisplayer.getDefault().setStatusText(NbBundle.getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.status.importSuccess", source)); - } - } else { - System.err.println("Bad container"); - } - } - - private static class ValidResult { - - private boolean result = true; - - public void setResult(boolean result) { - this.result = result; - } - - public boolean isResult() { - return result; - } - } - - private FileObject getArchivedFile(FileObject fileObject) { - // ZIP and JAR archives - if (FileUtil.isArchiveFile(fileObject)) { - try { - fileObject = FileUtil.getArchiveRoot(fileObject).getChildren()[0]; - } catch (Exception e) { - throw new RuntimeException("The archive can't be opened, be sure it has no password and contains a single file, without folders"); - } - } else { // GZ or BZIP2 archives - boolean isGz = fileObject.getExt().equalsIgnoreCase("gz"); - boolean isBzip = fileObject.getExt().equalsIgnoreCase("bz2"); - if (isGz || isBzip) { - try { - String[] splittedFileName = fileObject.getName().split("\\."); - if (splittedFileName.length < 2) { - return fileObject; - } - - String fileExt1 = splittedFileName[splittedFileName.length - 1]; - String fileExt2 = splittedFileName[splittedFileName.length - 2]; - - File tempFile = null; - if (fileExt1.equalsIgnoreCase("tar")) { - String fname = fileObject.getName().replaceAll("\\.tar$", ""); - fname = fname.replace(fileExt2, ""); - tempFile = File.createTempFile(fname, "." + fileExt2); - // Untar & unzip - if (isGz) { - tempFile = getGzFile(fileObject, tempFile, true); - } else { - tempFile = getBzipFile(fileObject, tempFile, true); - } - } else { - String fname = fileObject.getName(); - fname = fname.replace(fileExt1, ""); - tempFile = File.createTempFile(fname, "." + fileExt1); - // Unzip - if (isGz) { - tempFile = getGzFile(fileObject, tempFile, false); - } else { - tempFile = getBzipFile(fileObject, tempFile, false); - } - } - tempFile.deleteOnExit(); - tempFile = FileUtil.normalizeFile(tempFile); - fileObject = FileUtil.toFileObject(tempFile); - } catch (IOException ex) { - Exceptions.printStackTrace(ex); - } - } - } - return fileObject; + DialogDisplayer.getDefault().notify(dd); + issuesReport.destroy(); } @Override @@ -612,156 +546,198 @@ private ProcessorUI getProcessorUI(Processor processor) { return null; } - /** - * Uncompress a Bzip2 file. - */ - private static File getBzipFile(FileObject in, File out, boolean isTar) throws IOException { + private static class ImportErrorHandler { + private final Report errorReport = new Report("temperrorhandler"); + private final AtomicInteger count = new AtomicInteger(); - // Stream buffer - final int BUFF_SIZE = 8192; - final byte[] buffer = new byte[BUFF_SIZE]; + public LongTaskErrorHandler createHandler(String source) { + return new LongTaskErrorHandler() { + @Override + public void fatalError(Throwable t) { + handleError(source, t); + } + }; + } - BZip2CompressorInputStream inputStream = null; - FileOutputStream outStream = null; + public void handleError(String source, Throwable t) { + if (t instanceof OutOfMemoryError) { + return; + } + count.incrementAndGet(); + + // Known import failure: surface the localized message via the issues report panel, + // without raising the developer-facing "Unexpected Exception" dialog. + ImportException known = findImportException(t); + if (known != null) { + String msg = NbBundle + .getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.errorHandler.critical", + source, known.getMessage()); + errorReport.logIssue(new Issue(msg, Issue.Level.SEVERE)); + return; + } - try { - FileInputStream is = new FileInputStream(in.getPath()); - inputStream = new BZip2CompressorInputStream(is); - outStream = new FileOutputStream(out.getAbsolutePath()); - - if (isTar) { - // Read Tar header - int remainingBytes = readTarHeader(inputStream); - - // Read content - ByteBuffer bb = ByteBuffer.allocateDirect(4 * BUFF_SIZE); - byte[] tmpCache = new byte[BUFF_SIZE]; - int nRead, nGet; - while ((nRead = inputStream.read(tmpCache)) != -1) { - if (nRead == 0) { - continue; - } - bb.put(tmpCache); - bb.position(0); - bb.limit(nRead); - while (bb.hasRemaining() && remainingBytes > 0) { - nGet = Math.min(bb.remaining(), BUFF_SIZE); - nGet = Math.min(nGet, remainingBytes); - bb.get(buffer, 0, nGet); - outStream.write(buffer, 0, nGet); - remainingBytes -= nGet; - } - bb.clear(); + String msg = + NbBundle.getMessage(DesktopImportControllerUI.class, "DesktopImportControllerUI.errorHandler.critical", + source, t.getMessage()); + errorReport.logIssue(new Issue(msg, Issue.Level.SEVERE, t)); + Exceptions.printStackTrace(t); + } + + private static ImportException findImportException(Throwable t) { + Throwable current = t; + while (current != null) { + if (current instanceof ImportException) { + return (ImportException) current; } - } else { - int len; - while ((len = inputStream.read(buffer)) > 0) { - outStream.write(buffer, 0, len); + if (current.getCause() == current) { + break; } + current = current.getCause(); } - } catch (IOException ex) { - Exceptions.printStackTrace(ex); - } finally { - if (inputStream != null) { - inputStream.close(); - } - if (outStream != null) { - outStream.close(); - } + return null; + } + + public int countErrors() { + return count.get(); } - return out; + public Report closeAndGetReport() { + errorReport.close(); + return errorReport; + } } - /** - * Uncompress a GZIP file. - */ - private static File getGzFile(FileObject in, File out, boolean isTar) throws IOException { + private static class ValidResult { - // Stream buffer - final int BUFF_SIZE = 8192; - final byte[] buffer = new byte[BUFF_SIZE]; + private boolean result = true; - GZIPInputStream inputStream = null; - FileOutputStream outStream = null; + public boolean isResult() { + return result; + } - try { - inputStream = new GZIPInputStream(new FileInputStream(in.getPath())); - outStream = new FileOutputStream(out); - - if (isTar) { - // Read Tar header - int remainingBytes = readTarHeader(inputStream); - - // Read content - ByteBuffer bb = ByteBuffer.allocateDirect(4 * BUFF_SIZE); - byte[] tmpCache = new byte[BUFF_SIZE]; - int nRead, nGet; - while ((nRead = inputStream.read(tmpCache)) != -1) { - if (nRead == 0) { - continue; - } - bb.put(tmpCache); - bb.position(0); - bb.limit(nRead); - while (bb.hasRemaining() && remainingBytes > 0) { - nGet = Math.min(bb.remaining(), BUFF_SIZE); - nGet = Math.min(nGet, remainingBytes); - bb.get(buffer, 0, nGet); - outStream.write(buffer, 0, nGet); - remainingBytes -= nGet; - } - bb.clear(); - } - } else { - int len; - while ((len = inputStream.read(buffer)) > 0) { - outStream.write(buffer, 0, len); + public void setResult(boolean result) { + this.result = result; + } + } + + private class FinishImport implements LongTask, Runnable { + + private final List containers; + private final ImportErrorHandler errorHandler; + private ProgressTicket progressTicket; + + public FinishImport(List containers, ImportErrorHandler errorHandler) { + this.containers = containers; + this.errorHandler = errorHandler; + } + + @Override + public void run() { + // If exceptions were thrown we show them in the processor panel + if (errorHandler != null) { + Report errorReport = errorHandler.closeAndGetReport(); + if (errorHandler.countErrors() > 0) { + showProcessorIssues(errorReport); + return; } } - } catch (IOException ex) { - Exceptions.printStackTrace(ex); - } finally { - if (inputStream != null) { - inputStream.close(); - } - if (outStream != null) { - outStream.close(); - } - } - return out; - } + Report finalReport = new Report(); + for (Container container : containers) { + if (container.verify()) { + Report report = container.getReport(); + report.close(); + finalReport.append(report); + } else { + //TODO + } + } + finalReport.close(); - private static int readTarHeader(InputStream inputStream) throws IOException { - // Tar bytes - final int FILE_SIZE_OFFSET = 124; - final int FILE_SIZE_LENGTH = 12; - final int HEADER_LENGTH = 512; + //Report panel + if (!containers.isEmpty()) { + ReportPanel reportPanel = new ReportPanel(); + reportPanel.setData(finalReport, containers.toArray(new Container[0])); + DialogDescriptor dd = new DialogDescriptor(reportPanel, + NbBundle.getMessage(DesktopImportControllerUI.class, "ReportPanel.title")); + Object response = DialogDisplayer.getDefault().notify(dd); + reportPanel.destroy(); + finalReport.clean(); + for (Container c : containers) { + c.getReport().clean(); + } + if (!response.equals(NotifyDescriptor.OK_OPTION)) { + return; + } + final Processor processor = reportPanel.getProcessor(); + processor.setProgressTicket(progressTicket); - ignoreBytes(inputStream, FILE_SIZE_OFFSET); - String fileSizeLengthOctalString = readString(inputStream, FILE_SIZE_LENGTH).trim(); - final int fileSize = Integer.parseInt(fileSizeLengthOctalString, 8); + //Process + final ProcessorUI pui = getProcessorUI(processor); + final ValidResult validResult = new ValidResult(); + if (pui != null) { + try { + final JPanel panel = pui.getPanel(); + if (panel != null) { + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + String title = NbBundle.getMessage(DesktopImportControllerUI.class, + "DesktopImportControllerUI.processor.ui.dialog.title"); + + pui.setup(processor); + final DialogDescriptor dd2 = DialogDescriptorWithValidation.dialog(panel, title); + Object result = DialogDisplayer.getDefault().notify(dd2); + if (result.equals(NotifyDescriptor.CANCEL_OPTION) || + result.equals(NotifyDescriptor.CLOSED_OPTION)) { + validResult.setResult(false); + } else { + pui.unsetup(); //true + validResult.setResult(true); + } + } + }); + } + } catch (InterruptedException | InvocationTargetException ex) { + Exceptions.printStackTrace(ex); + } + } - ignoreBytes(inputStream, HEADER_LENGTH - (FILE_SIZE_OFFSET + FILE_SIZE_LENGTH)); + if (validResult.isResult()) { + // We don't pre-create the workspace + // This is now required because GraphModel's configuration needs to be final + // at the time of creation, and therefore if we were to create a workspace now + // it could have conflicting configuration + try { + controller.process(containers.toArray(new Container[0]), processor, null); + } catch (ProcessorConfigurationException e) { + // Configuration mismatch is already captured as a SEVERE issue in the processor report + } finally { + Progress.finish(progressTicket); + } - return fileSize; - } + Report report = processor.getReport(); + if (report != null && !report.isEmpty()) { + showProcessorIssues(report); + } - private static void ignoreBytes(InputStream inputStream, int numberOfBytes) throws IOException { - for (int counter = 0; counter < numberOfBytes; counter++) { - inputStream.read(); + //StatusLine notify + StatusDisplayer.getDefault().setStatusText(NbBundle + .getMessage(DesktopImportControllerUI.class, + "DesktopImportControllerUI.status.multiImportSuccess", + containers.size())); + } + } } - } - private static String readString(InputStream inputStream, int numberOfBytes) throws IOException { - return new String(readBytes(inputStream, numberOfBytes)); - } - - private static byte[] readBytes(InputStream inputStream, int numberOfBytes) throws IOException { - byte[] readBytes = new byte[numberOfBytes]; - inputStream.read(readBytes); + @Override + public boolean cancel() { + return false; + } - return readBytes; + @Override + public void setProgressTicket(ProgressTicket progressTicket) { + this.progressTicket = progressTicket; + } } } diff --git a/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/EdgesMergeStrategyWrapper.java b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/EdgesMergeStrategyWrapper.java new file mode 100644 index 0000000000..36e9ef8da5 --- /dev/null +++ b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/EdgesMergeStrategyWrapper.java @@ -0,0 +1,91 @@ +/* +Copyright 2008-2017 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2017 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2017 Gephi Consortium. + */ + +package org.gephi.desktop.importer; + +import java.util.Locale; +import java.util.Objects; +import org.gephi.io.importer.api.EdgeMergeStrategy; +import org.openide.util.NbBundle; + +/** + * @author Eduardo Ramos + */ +public class EdgesMergeStrategyWrapper { + private final EdgeMergeStrategy instance; + + public EdgesMergeStrategyWrapper(EdgeMergeStrategy instance) { + this.instance = instance; + } + + public EdgeMergeStrategy getInstance() { + return instance; + } + + @Override + public int hashCode() { + int hash = 7; + hash = 31 * hash + Objects.hashCode(this.instance); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final EdgesMergeStrategyWrapper other = (EdgesMergeStrategyWrapper) obj; + return this.instance == other.instance; + } + + @Override + public String toString() { + return NbBundle.getMessage(ReportPanel.class, "ReportPanel.mergeStrategy." + instance.name().toLowerCase( + Locale.US)); + } +} diff --git a/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/ImportDB.java b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/ImportDB.java index ead42b501e..443efc7bd2 100644 --- a/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/ImportDB.java +++ b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/ImportDB.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.importer; import java.awt.event.ActionEvent; @@ -54,7 +55,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.actions.CallableSystemAction; /** - * * @author Mathieu */ public class ImportDB extends CallableSystemAction { diff --git a/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/ImportWizard.java b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/ImportWizard.java new file mode 100755 index 0000000000..b22a454239 --- /dev/null +++ b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/ImportWizard.java @@ -0,0 +1,106 @@ +/* +Copyright 2008-2010 Gephi +Authors : Yi Du + Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.importer; + +import java.awt.Dialog; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.text.MessageFormat; +import org.gephi.desktop.importer.api.ImportControllerUI; +import org.gephi.io.importer.spi.ImporterWizardUI; +import org.gephi.io.importer.spi.WizardImporter; +import org.gephi.io.importer.spi.WizardImporterBuilder; +import org.openide.DialogDisplayer; +import org.openide.NotifyDescriptor; +import org.openide.WizardDescriptor; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionRegistration; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +@ActionID(id = "org.gephi.desktop.importer.ImportWizard", category = "File") +@ActionRegistration(displayName = "#CTL_ImportWizard", iconInMenu = true) +@ActionReference(path = "Menu/File", position = 675) +public final class ImportWizard implements ActionListener { + + @Override + public void actionPerformed(ActionEvent e) { + WizardIterator wizardIterator = new WizardIterator(); + WizardDescriptor wizardDescriptor = new WizardDescriptor(wizardIterator); + wizardDescriptor.setTitleFormat(new MessageFormat("{0} ({1})")); + wizardDescriptor.setTitle(NbBundle.getMessage(getClass(), "ImportWizard.wizard.title")); + Dialog dialog = DialogDisplayer.getDefault().createDialog(wizardDescriptor); + dialog.setVisible(true); + dialog.toFront(); + + boolean cancelled = wizardDescriptor.getValue() != WizardDescriptor.FINISH_OPTION; + if (!cancelled) { + ImporterWizardUI wizardUI = wizardIterator.getCurrentWizardUI(); + + //Get Importer + WizardImporter importer = null; + for (WizardImporterBuilder wizardBuilder : Lookup.getDefault().lookupAll(WizardImporterBuilder.class)) { + WizardImporter im = wizardBuilder.buildImporter(); + if (wizardUI.isUIForImporter(im)) { + importer = im; + } + } + + if (importer == null) { + NotifyDescriptor.Message msg = new NotifyDescriptor.Message( + NbBundle.getMessage(getClass(), "ImportWizard.error_no_matching_importer"), + NotifyDescriptor.WARNING_MESSAGE); + DialogDisplayer.getDefault().notify(msg); + return; + } + + //Unsetup + wizardIterator.unsetupPanels(importer); + + ImportControllerUI importControllerUI = Lookup.getDefault().lookup(ImportControllerUI.class); + importControllerUI.importWizard(importer); + } + } +} diff --git a/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/ProcessorIssuesReportPanel.form b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/ProcessorIssuesReportPanel.form new file mode 100644 index 0000000000..d03bc36783 --- /dev/null +++ b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/ProcessorIssuesReportPanel.form @@ -0,0 +1,88 @@ + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/ProcessorIssuesReportPanel.java b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/ProcessorIssuesReportPanel.java new file mode 100644 index 0000000000..79a93bfdf1 --- /dev/null +++ b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/ProcessorIssuesReportPanel.java @@ -0,0 +1,391 @@ +/* + Copyright 2008-2017 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2017 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2017 Gephi Consortium. + */ + +package org.gephi.desktop.importer; + +import java.awt.Color; +import java.awt.Toolkit; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.StringSelection; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import javax.swing.Icon; +import javax.swing.ImageIcon; +import javax.swing.JLabel; +import javax.swing.JMenuItem; +import javax.swing.JPopupMenu; +import javax.swing.SwingConstants; +import javax.swing.SwingUtilities; +import javax.swing.event.TreeModelListener; +import javax.swing.tree.TreeModel; +import javax.swing.tree.TreePath; +import org.gephi.io.importer.api.Issue; +import org.gephi.io.importer.api.Report; +import org.gephi.ui.components.BusyUtils; +import org.netbeans.swing.outline.DefaultOutlineModel; +import org.netbeans.swing.outline.OutlineModel; +import org.netbeans.swing.outline.RenderDataProvider; +import org.netbeans.swing.outline.RowModel; +import org.openide.util.Exceptions; +import org.openide.util.ImageUtilities; +import org.openide.util.NbBundle; +import org.openide.util.NbPreferences; + +/** + * @author Eduardo Ramos + */ +public class ProcessorIssuesReportPanel extends javax.swing.JPanel { + + //Preferences + private final static String SHOW_ISSUES = "ProcessorIssuesReportPanel_Show_Issues"; + private final static String SHOW_REPORT = "ProcessorIssuesReportPanel_Show_Report"; + private final static int ISSUES_LIMIT = 5000; + private final ThreadGroup fillingThreads; + //Icons + private ImageIcon infoIcon; + private ImageIcon warningIcon; + private ImageIcon severeIcon; + private ImageIcon criticalIcon; + // Variables declaration - do not modify//GEN-BEGIN:variables + private org.netbeans.swing.outline.Outline issuesOutline; + private javax.swing.JEditorPane reportEditor; + private javax.swing.JScrollPane tab1ScrollPane; + private javax.swing.JScrollPane tab2ScrollPane; + private javax.swing.JTabbedPane tabbedPane; + // End of variables declaration//GEN-END:variables + + public ProcessorIssuesReportPanel() { + try { + SwingUtilities.invokeAndWait(new Runnable() { + @Override + public void run() { + initComponents(); + initIcons(); + } + }); + } catch (InterruptedException ex) { + Exceptions.printStackTrace(ex); + } catch (InvocationTargetException ex) { + Exceptions.printStackTrace(ex); + } + + fillingThreads = new ThreadGroup("Report Panel Issues"); + + reportEditor.addMouseListener(new MouseAdapter() { + + @Override + public void mouseClicked(MouseEvent e) { + if (SwingUtilities.isRightMouseButton(e)) { + JPopupMenu contextMenu = new JPopupMenu(); + JMenuItem menuItem = new JMenuItem(); + menuItem + .setText(NbBundle.getMessage(ProcessorIssuesReportPanel.class, "ReportPanel.reportCopy.text")); + menuItem.setToolTipText( + NbBundle.getMessage(ProcessorIssuesReportPanel.class, "ReportPanel.reportCopy.description")); + menuItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + Clipboard clpbrd = Toolkit.getDefaultToolkit().getSystemClipboard(); + clpbrd.setContents(new StringSelection(reportEditor.getText()), null); + } + }); + contextMenu.add(menuItem); + contextMenu.show(reportEditor, e.getX(), e.getY()); + } + } + }); + } + + public void initIcons() { + infoIcon = ImageUtilities.loadImageIcon("DesktopImport/info.svg", false); + warningIcon = + ImageUtilities.loadImageIcon("DesktopImport/warning.svg", false); + severeIcon = + ImageUtilities.loadImageIcon("DesktopImport/severe.svg", false); + criticalIcon = + ImageUtilities.loadImageIcon("DesktopImport/critical.svg", false); + } + + public void setData(Report report) { + fillIssues(report); + fillReport(report); + } + + private void fillIssues(Report report) { + final List issues = new ArrayList<>(); + Iterator itr = report.getIssues(ISSUES_LIMIT); + while (itr.hasNext()) { + issues.add(itr.next()); + } + if (issues.isEmpty()) { + JLabel label = new JLabel(NbBundle.getMessage(getClass(), "ReportPanel.noIssues")); + label.setHorizontalAlignment(SwingConstants.CENTER); + tab1ScrollPane.setViewportView(label); + } else { + //Busy label + final BusyUtils.BusyLabel busyLabel = + BusyUtils.createCenteredBusyLabel(tab1ScrollPane, "Retrieving issues...", issuesOutline); + + //Thread + Thread thread = new Thread(fillingThreads, new Runnable() { + @Override + public void run() { + busyLabel.setBusy(true); + final TreeModel treeMdl = new IssueTreeModel(issues); + final OutlineModel mdl = DefaultOutlineModel.createOutlineModel(treeMdl, new IssueRowModel(), true); + + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + issuesOutline.setRootVisible(false); + issuesOutline.setRenderDataProvider(new IssueRenderer()); + issuesOutline.setModel(mdl); + busyLabel.setBusy(false); + } + }); + } + }, "Report Panel Issues Outline"); + if (NbPreferences.forModule(ProcessorIssuesReportPanel.class).getBoolean(SHOW_ISSUES, true)) { + thread.start(); + } + } + } + + private void fillReport(final Report report) { + Thread thread = new Thread(fillingThreads, new Runnable() { + @Override + public void run() { + final String str = report.getText(true); + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + reportEditor.setText(str); + } + }); + } + }, "Report Panel Issues Report"); + if (NbPreferences.forModule(ProcessorIssuesReportPanel.class).getBoolean(SHOW_REPORT, true)) { + thread.start(); + } + } + + public void destroy() { + fillingThreads.interrupt(); + } + + /** + * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The content of this method is always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + tabbedPane = new javax.swing.JTabbedPane(); + tab1ScrollPane = new javax.swing.JScrollPane(); + issuesOutline = new org.netbeans.swing.outline.Outline(); + tab2ScrollPane = new javax.swing.JScrollPane(); + reportEditor = new javax.swing.JEditorPane(); + + tab1ScrollPane.setViewportView(issuesOutline); + + tabbedPane.addTab(org.openide.util.NbBundle.getMessage(ProcessorIssuesReportPanel.class, + "ProcessorIssuesReportPanel.tab1ScrollPane.TabConstraints.tabTitle"), tab1ScrollPane); // NOI18N + + reportEditor.setEditable(false); + reportEditor.setFocusable(false); + tab2ScrollPane.setViewportView(reportEditor); + + tabbedPane.addTab(org.openide.util.NbBundle.getMessage(ProcessorIssuesReportPanel.class, + "ProcessorIssuesReportPanel.tab2ScrollPane.TabConstraints.tabTitle"), tab2ScrollPane); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(tabbedPane, javax.swing.GroupLayout.DEFAULT_SIZE, 557, Short.MAX_VALUE) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(tabbedPane, javax.swing.GroupLayout.PREFERRED_SIZE, 270, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + }// //GEN-END:initComponents + + private class IssueTreeModel implements TreeModel { + + private final List issues; + + public IssueTreeModel(List issues) { + this.issues = issues; + } + + @Override + public Object getRoot() { + return "root"; + } + + @Override + public Object getChild(Object parent, int index) { + return issues.get(index); + } + + @Override + public int getChildCount(Object parent) { + return issues.size(); + } + + @Override + public boolean isLeaf(Object node) { + return node instanceof Issue; + } + + @Override + public void valueForPathChanged(TreePath path, Object newValue) { + } + + @Override + public int getIndexOfChild(Object parent, Object child) { + return issues.indexOf(child); + } + + @Override + public void addTreeModelListener(TreeModelListener l) { + } + + @Override + public void removeTreeModelListener(TreeModelListener l) { + } + } + + private class IssueRowModel implements RowModel { + + @Override + public int getColumnCount() { + return 1; + } + + @Override + public Object getValueFor(Object node, int column) { + if (node instanceof Issue) { + Issue issue = (Issue) node; + return issue.getLevel().toString(); + } + return ""; + } + + @Override + public Class getColumnClass(int column) { + return String.class; + } + + @Override + public boolean isCellEditable(Object node, int column) { + return false; + } + + @Override + public void setValueFor(Object node, int column, Object value) { + } + + @Override + public String getColumnName(int column) { + return NbBundle.getMessage(ProcessorIssuesReportPanel.class, "ReportPanel.issueTable.issues"); + } + } + + private class IssueRenderer implements RenderDataProvider { + + @Override + public String getDisplayName(Object o) { + Issue issue = (Issue) o; + return issue.getMessage(); + } + + @Override + public boolean isHtmlDisplayName(Object o) { + return false; + } + + @Override + public Color getBackground(Object o) { + return null; + } + + @Override + public Color getForeground(Object o) { + return null; + } + + @Override + public String getTooltipText(Object o) { + return ""; + } + + @Override + public Icon getIcon(Object o) { + Issue issue = (Issue) o; + switch (issue.getLevel()) { + case INFO: + return infoIcon; + case WARNING: + return warningIcon; + case SEVERE: + return severeIcon; + case CRITICAL: + return criticalIcon; + } + return null; + } + } +} diff --git a/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/ReportPanel.form b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/ReportPanel.form index b4412b5da0..0787fd2424 100644 --- a/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/ReportPanel.form +++ b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/ReportPanel.form @@ -20,38 +20,28 @@ - + - + + - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + - @@ -65,7 +55,7 @@ - + @@ -74,11 +64,11 @@ - + - - - + + + @@ -140,6 +130,10 @@ + + + +
    @@ -152,8 +146,6 @@ - - @@ -175,7 +167,7 @@ - + @@ -192,7 +184,7 @@ - + @@ -207,7 +199,7 @@ - + @@ -222,7 +214,7 @@ - + @@ -234,7 +226,7 @@ - + @@ -246,38 +238,50 @@ - + - + - + - + - + - + - + - + - + + + + + + + + + + + + + @@ -286,42 +290,40 @@ - + + + + + + - + - + - + + + + - + - + - - - - - - - - - - @@ -331,87 +333,76 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -419,8 +410,23 @@ + + + + + + + + + + + + + + + diff --git a/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/ReportPanel.java b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/ReportPanel.java index 5b15effea6..750ba25492 100644 --- a/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/ReportPanel.java +++ b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/ReportPanel.java @@ -39,17 +39,25 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.importer; import java.awt.Color; import java.awt.GridBagConstraints; import java.awt.Insets; +import java.awt.Toolkit; +import java.awt.datatransfer.Clipboard; +import java.awt.datatransfer.StringSelection; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; import java.util.Enumeration; +import java.util.Iterator; import java.util.List; import javax.swing.AbstractButton; import javax.swing.ButtonGroup; @@ -58,6 +66,8 @@ Development and Distribution License("CDDL") (collectively, the import javax.swing.ImageIcon; import javax.swing.JDialog; import javax.swing.JLabel; +import javax.swing.JMenuItem; +import javax.swing.JPopupMenu; import javax.swing.JRadioButton; import javax.swing.JRootPane; import javax.swing.SwingConstants; @@ -66,9 +76,8 @@ Development and Distribution License("CDDL") (collectively, the import javax.swing.tree.TreeModel; import javax.swing.tree.TreePath; import org.gephi.io.importer.api.Container; -import org.gephi.io.importer.api.ContainerUnloader; import org.gephi.io.importer.api.EdgeDirectionDefault; -import org.gephi.io.importer.api.EdgeWeightMergeStrategy; +import org.gephi.io.importer.api.EdgeMergeStrategy; import org.gephi.io.importer.api.Issue; import org.gephi.io.importer.api.Report; import org.gephi.io.processor.spi.Processor; @@ -79,12 +88,12 @@ Development and Distribution License("CDDL") (collectively, the import org.netbeans.swing.outline.RenderDataProvider; import org.netbeans.swing.outline.RowModel; import org.openide.util.Exceptions; +import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.NbPreferences; /** - * * @author Mathieu Bastian */ public class ReportPanel extends javax.swing.JPanel { @@ -93,16 +102,57 @@ public class ReportPanel extends javax.swing.JPanel { private final static String SHOW_ISSUES = "ReportPanel_Show_Issues"; private final static String SHOW_REPORT = "ReportPanel_Show_Report"; private final static int ISSUES_LIMIT = 5000; - private ThreadGroup fillingThreads; + //Preferences: + private static final String PREF_MORE_OPTIONS_PANEL_VISIBLE = "ReportPanel_moreOptionsPanelVisible"; + private static final String PREF_EDGE_MERGE_STRATEGY = "ReportPanel_edgeMergeStrategy"; + private static final String PREF_AUTOSCALE = "ReportPanel_autoscale"; + private static final String PREF_CREATE_MISSING_NODES = "ReportPanel_createMissingNodes"; + private static final String PREF_SELF_LOOP = "ReportPanel_selfLoops"; + private static final Object PROCESSOR_KEY = new Object(); + private final ThreadGroup fillingThreads; + //UI + private final ButtonGroup processorGroup = new ButtonGroup(); //Icons private ImageIcon infoIcon; private ImageIcon warningIcon; private ImageIcon severeIcon; private ImageIcon criticalIcon; //Container - private Container container; - //UI - private ButtonGroup processorGroup = new ButtonGroup(); + private Container[] containers; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JCheckBox autoscaleCheckbox; + private javax.swing.JCheckBox createMissingNodesCheckbox; + private javax.swing.JLabel dynamicAttsLabel; + private javax.swing.JLabel dynamicLabel; + private javax.swing.JLabel edgeCountLabel; + private javax.swing.JComboBox edgesMergeStrategyCombo; + private javax.swing.JLabel graphCountLabel; + private javax.swing.JComboBox graphTypeCombo; + private org.netbeans.swing.outline.Outline issuesOutline; + private javax.swing.JLabel labelDynamic; + private javax.swing.JLabel labelDynamicAtts; + private javax.swing.JLabel labelEdgeCount; + private javax.swing.JLabel labelGraphCount; + private javax.swing.JLabel labelGraphType; + private javax.swing.JLabel labelMultiGraph; + private javax.swing.JLabel labelNodeCount; + private javax.swing.JLabel labelParallelEdgesMergeStrategy; + private javax.swing.JLabel labelSrc; + private javax.swing.JPanel moreOptionsLeftPanel; + private org.jdesktop.swingx.JXHyperlink moreOptionsLink; + private javax.swing.JPanel moreOptionsPanel; + private javax.swing.JLabel multigraphLabel; + private javax.swing.JLabel nodeCountLabel; + private javax.swing.JPanel processorPanel; + private javax.swing.ButtonGroup processorStrategyRadio; + private javax.swing.JEditorPane reportEditor; + private javax.swing.JCheckBox selfLoopCheckBox; + private javax.swing.JLabel sourceLabel; + private javax.swing.JPanel statsPanel; + private javax.swing.JScrollPane tab1ScrollPane; + private javax.swing.JScrollPane tab2ScrollPane; + private javax.swing.JTabbedPane tabbedPane; + // End of variables declaration//GEN-END:variables public ReportPanel() { try { @@ -112,7 +162,6 @@ public void run() { initComponents(); initIcons(); initProcessors(); - initProcessorsUI(); initMoreOptionsPanel(); initMergeStrategyCombo(); } @@ -128,8 +177,10 @@ public void run() { autoscaleCheckbox.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { - if (autoscaleCheckbox.isSelected() != container.getUnloader().isAutoScale()) { - container.getLoader().setAutoScale(autoscaleCheckbox.isSelected()); + boolean s = autoscaleCheckbox.isSelected(); + NbPreferences.forModule(ReportPanel.class).putBoolean(PREF_AUTOSCALE, s); + for (Container container : containers) { + container.getLoader().setAutoScale(s); } } }); @@ -137,8 +188,10 @@ public void itemStateChanged(ItemEvent e) { createMissingNodesCheckbox.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { - if (createMissingNodesCheckbox.isSelected() != container.getUnloader().allowAutoNode()) { - container.getLoader().setAllowAutoNode(createMissingNodesCheckbox.isSelected()); + boolean s = createMissingNodesCheckbox.isSelected(); + NbPreferences.forModule(ReportPanel.class).putBoolean(PREF_CREATE_MISSING_NODES, s); + for (Container container : containers) { + container.getLoader().setAllowAutoNode(s); } } }); @@ -147,6 +200,8 @@ public void itemStateChanged(ItemEvent e) { @Override public void actionPerformed(ActionEvent e) { moreOptionsPanel.setVisible(!moreOptionsPanel.isVisible()); + NbPreferences.forModule(ReportPanel.class) + .putBoolean(PREF_MORE_OPTIONS_PANEL_VISIBLE, moreOptionsPanel.isVisible()); JRootPane rootPane = SwingUtilities.getRootPane(ReportPanel.this); ((JDialog) rootPane.getParent()).pack(); } @@ -155,20 +210,11 @@ public void actionPerformed(ActionEvent e) { edgesMergeStrategyCombo.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { - int g = edgesMergeStrategyCombo.getSelectedIndex(); - switch (g) { - case 0: - container.getLoader().setEdgesMergeStrategy(EdgeWeightMergeStrategy.SUM); - break; - case 1: - container.getLoader().setEdgesMergeStrategy(EdgeWeightMergeStrategy.AVG); - break; - case 2: - container.getLoader().setEdgesMergeStrategy(EdgeWeightMergeStrategy.MIN); - break; - case 3: - container.getLoader().setEdgesMergeStrategy(EdgeWeightMergeStrategy.MAX); - break; + EdgeMergeStrategy strategy = + ((EdgesMergeStrategyWrapper) edgesMergeStrategyCombo.getSelectedItem()).getInstance(); + NbPreferences.forModule(ReportPanel.class).put(PREF_EDGE_MERGE_STRATEGY, strategy.name()); + for (Container container : containers) { + container.getLoader().setEdgesMergeStrategy(strategy); } } }); @@ -176,30 +222,59 @@ public void itemStateChanged(ItemEvent e) { selfLoopCheckBox.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { - if (selfLoopCheckBox.isSelected() != container.getUnloader().allowSelfLoop()) { - container.getLoader().setAllowSelfLoop(selfLoopCheckBox.isSelected()); + boolean s = selfLoopCheckBox.isSelected(); + NbPreferences.forModule(ReportPanel.class).putBoolean(PREF_SELF_LOOP, s); + for (Container container : containers) { + container.getLoader().setAllowSelfLoop(s); + } + } + }); + + reportEditor.addMouseListener(new MouseAdapter() { + + @Override + public void mouseClicked(MouseEvent e) { + if (SwingUtilities.isRightMouseButton(e)) { + JPopupMenu contextMenu = new JPopupMenu(); + JMenuItem menuItem = new JMenuItem(); + menuItem.setText(NbBundle.getMessage(ReportPanel.class, "ReportPanel.reportCopy.text")); + menuItem + .setToolTipText(NbBundle.getMessage(ReportPanel.class, "ReportPanel.reportCopy.description")); + menuItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + Clipboard clpbrd = Toolkit.getDefaultToolkit().getSystemClipboard(); + clpbrd.setContents(new StringSelection(reportEditor.getText()), null); + } + }); + contextMenu.add(menuItem); + contextMenu.show(reportEditor, e.getX(), e.getY()); } } }); } public void initIcons() { - infoIcon = new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/importer/resources/info.png")); - warningIcon = new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/importer/resources/warning.gif")); - severeIcon = new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/importer/resources/severe.png")); - criticalIcon = new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/importer/resources/critical.png")); + infoIcon = ImageUtilities.loadImageIcon("DesktopImport/info.svg", false); + warningIcon = + ImageUtilities.loadImageIcon("DesktopImport/warning.svg", false); + severeIcon = + ImageUtilities.loadImageIcon("DesktopImport/severe.svg", false); + criticalIcon = + ImageUtilities.loadImageIcon("DesktopImport/critical.svg", false); } - public void setData(Report report, Container container) { - this.container = container; - initGraphTypeCombo(container); + public void setData(Report report, Container[] containers) { + this.containers = containers; + initGraphTypeCombo(containers); + + initProcessorsUI(); - report.pruneReport(ISSUES_LIMIT); fillIssues(report); fillReport(report); - fillStats(container); - fillParameters(container); + fillStats(containers); + fillParameters(containers); } private void removeTabbedPane() { @@ -207,43 +282,67 @@ private void removeTabbedPane() { } private void initMergeStrategyCombo() { - DefaultComboBoxModel mergeStrategryModel = new DefaultComboBoxModel(new String[]{ - NbBundle.getMessage(ReportPanel.class, "ReportPanel.mergeStrategy.sum"), - NbBundle.getMessage(ReportPanel.class, "ReportPanel.mergeStrategy.avg"), - NbBundle.getMessage(ReportPanel.class, "ReportPanel.mergeStrategy.min"), - NbBundle.getMessage(ReportPanel.class, "ReportPanel.mergeStrategy.max")}); + DefaultComboBoxModel mergeStrategryModel = new DefaultComboBoxModel(new EdgesMergeStrategyWrapper[] { + new EdgesMergeStrategyWrapper(EdgeMergeStrategy.SUM), + new EdgesMergeStrategyWrapper(EdgeMergeStrategy.AVG), + new EdgesMergeStrategyWrapper(EdgeMergeStrategy.MIN), + new EdgesMergeStrategyWrapper(EdgeMergeStrategy.MAX), + new EdgesMergeStrategyWrapper(EdgeMergeStrategy.FIRST), + new EdgesMergeStrategyWrapper(EdgeMergeStrategy.LAST), + new EdgesMergeStrategyWrapper(EdgeMergeStrategy.NO_MERGE) + }); edgesMergeStrategyCombo.setModel(mergeStrategryModel); } private void initMoreOptionsPanel() { - moreOptionsPanel.setVisible(false); + boolean moreOptionsPanelVisible = + NbPreferences.forModule(ReportPanel.class).getBoolean(PREF_MORE_OPTIONS_PANEL_VISIBLE, false); + if (!moreOptionsPanelVisible) { + moreOptionsPanel.setVisible(false); + } } - private void initGraphTypeCombo(final Container container) { + private void initGraphTypeCombo(final Container[] containers) { + final String directedStr = NbBundle.getMessage(ReportPanel.class, "ReportPanel.graphType.directed"); + final String undirectedStr = NbBundle.getMessage(ReportPanel.class, "ReportPanel.graphType.undirected"); + final String mixedStr = NbBundle.getMessage(ReportPanel.class, "ReportPanel.graphType.mixed"); + + EdgeDirectionDefault edd = null; + for (Container container : containers) { + EdgeDirectionDefault d = container.getUnloader().getEdgeDefault(); + if (edd == null) { + edd = d; + } else if (d.equals(EdgeDirectionDefault.UNDIRECTED) && !edd.equals(EdgeDirectionDefault.UNDIRECTED)) { + edd = EdgeDirectionDefault.MIXED; + } else if (d.equals(EdgeDirectionDefault.DIRECTED) && !edd.equals(EdgeDirectionDefault.DIRECTED)) { + edd = EdgeDirectionDefault.MIXED; + } + } + final EdgeDirectionDefault dir = edd; + SwingUtilities.invokeLater(new Runnable() { @Override public void run() { - String directedStr = NbBundle.getMessage(ReportPanel.class, "ReportPanel.graphType.directed"); - String undirectedStr = NbBundle.getMessage(ReportPanel.class, "ReportPanel.graphType.undirected"); - String mixedStr = NbBundle.getMessage(ReportPanel.class, "ReportPanel.graphType.mixed"); DefaultComboBoxModel comboModel = new DefaultComboBoxModel(); - EdgeDirectionDefault dir = container.getUnloader().getEdgeDefault(); switch (dir) { case DIRECTED: comboModel.addElement(directedStr); comboModel.addElement(undirectedStr); comboModel.addElement(mixedStr); + comboModel.setSelectedItem(directedStr); break; case UNDIRECTED: comboModel.addElement(undirectedStr); comboModel.addElement(mixedStr); + comboModel.setSelectedItem(undirectedStr); break; case MIXED: comboModel.addElement(directedStr); comboModel.addElement(undirectedStr); comboModel.addElement(mixedStr); + comboModel.setSelectedItem(mixedStr); break; } @@ -253,44 +352,43 @@ public void run() { graphTypeCombo.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { - int g = graphTypeCombo.getSelectedIndex(); - EdgeDirectionDefault dir = container.getUnloader().getEdgeDefault(); - if (dir.equals(EdgeDirectionDefault.UNDIRECTED)) { - switch (g) { - case 0: - container.getLoader().setEdgeDefault(EdgeDirectionDefault.UNDIRECTED); - break; - case 1: - container.getLoader().setEdgeDefault(EdgeDirectionDefault.MIXED); - break; - } - } else { - switch (g) { - case 0: + if (e.getStateChange() == ItemEvent.SELECTED) { + Object g = e.getItem(); + if (g.equals(directedStr)) { + for (Container container : containers) { container.getLoader().setEdgeDefault(EdgeDirectionDefault.DIRECTED); - break; - case 1: + } + } else if (g.equals(undirectedStr)) { + for (Container container : containers) { container.getLoader().setEdgeDefault(EdgeDirectionDefault.UNDIRECTED); - break; - case 2: + } + } else if (g.equals(mixedStr)) { + for (Container container : containers) { container.getLoader().setEdgeDefault(EdgeDirectionDefault.MIXED); - break; + } } - } + // Refresh stats + fillStats(containers); + } } }); } private void fillIssues(Report report) { - final List issues = report.getIssues(); + final List issues = new ArrayList<>(); + Iterator itr = report.getIssues(ISSUES_LIMIT); + while (itr.hasNext()) { + issues.add(itr.next()); + } if (issues.isEmpty()) { JLabel label = new JLabel(NbBundle.getMessage(getClass(), "ReportPanel.noIssues")); label.setHorizontalAlignment(SwingConstants.CENTER); tab1ScrollPane.setViewportView(label); } else { //Busy label - final BusyUtils.BusyLabel busyLabel = BusyUtils.createCenteredBusyLabel(tab1ScrollPane, "Retrieving issues...", issuesOutline); + final BusyUtils.BusyLabel busyLabel = + BusyUtils.createCenteredBusyLabel(tab1ScrollPane, "Retrieving issues...", issuesOutline); //Thread Thread thread = new Thread(fillingThreads, new Runnable() { @@ -335,99 +433,144 @@ public void run() { } } - private void fillParameters(final Container container) { + private void fillParameters(final Container[] containers) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { - //Autoscale - autoscaleCheckbox.setSelected(container.getUnloader().isAutoScale()); - selfLoopCheckBox.setSelected(container.getUnloader().allowSelfLoop()); - createMissingNodesCheckbox.setSelected(container.getUnloader().allowAutoNode()); - - switch (container.getUnloader().getEdgeDefault()) { - case DIRECTED: - graphTypeCombo.setSelectedIndex(0); - break; - case UNDIRECTED: - graphTypeCombo.setSelectedIndex(1); - break; - case MIXED: - graphTypeCombo.setSelectedIndex(2); - break; + boolean autoscalePref = NbPreferences.forModule(ReportPanel.class) + .getBoolean(PREF_AUTOSCALE, containers[0].getUnloader().isAutoScale()); + boolean selfLoopPref = NbPreferences.forModule(ReportPanel.class) + .getBoolean(PREF_SELF_LOOP, containers[0].getUnloader().allowSelfLoop()); + boolean createMissingNodesPref = NbPreferences.forModule(ReportPanel.class) + .getBoolean(PREF_CREATE_MISSING_NODES, containers[0].getUnloader().allowAutoNode()); + EdgeMergeStrategy strategyPref = containers[0].getUnloader().getEdgesMergeStrategy(); + try { + strategyPref = EdgeMergeStrategy.valueOf( + NbPreferences.forModule(ReportPanel.class).get(PREF_EDGE_MERGE_STRATEGY, strategyPref.name())); + } catch (Exception e) { + //NOOP } - switch (container.getUnloader().getEdgesMergeStrategy()) { - case SUM: - edgesMergeStrategyCombo.setSelectedIndex(0); - break; - case AVG: - edgesMergeStrategyCombo.setSelectedIndex(1); - break; - case MIN: - edgesMergeStrategyCombo.setSelectedIndex(2); - break; - case MAX: - edgesMergeStrategyCombo.setSelectedIndex(3); - break; + // Make sure containers have the right parameter values + for (Container container : containers) { + container.getLoader().setAllowSelfLoop(selfLoopPref); + container.getLoader().setAutoScale(autoscalePref); + container.getLoader().setAllowAutoNode(createMissingNodesPref); + container.getLoader().setEdgesMergeStrategy(strategyPref); } + + // Create Missing Nodes Checkbox should be disabled if no missing nodes found + createMissingNodesCheckbox.setEnabled(containers[0].getUnloader().containsAutoNodes()); + + // Self-Loop Checkbox should be disabled if no self loops found + selfLoopCheckBox.setEnabled(containers[0].hasSelfLoops()); + + autoscaleCheckbox.setSelected(autoscalePref); + selfLoopCheckBox.setSelected(selfLoopPref); + createMissingNodesCheckbox.setSelected(createMissingNodesPref); + edgesMergeStrategyCombo.setSelectedItem(new EdgesMergeStrategyWrapper(strategyPref)); } }); } - private void fillStats(final Container container) { + private void fillStats(final Container[] containers) { SwingUtilities.invokeLater(new Runnable() { @Override public void run() { //Source - String source = container.getSource(); - String[] label = source.split("\\."); - if (label.length > 2 && label[label.length - 2].matches("\\d+")) { //case of temp file - source = source.replaceFirst("." + label[label.length - 2], ""); + String source; + if (containers.length == 1) { + source = containers[0].getSource(); + String[] label = source.split("\\."); + if (label.length > 2 && label[label.length - 2].matches("\\d+")) { //case of temp file + source = source.replaceFirst("." + label[label.length - 2], ""); + } + } else { + source = NbBundle.getMessage(ReportPanel.class, "ReportPanel.multiSourceLabel.text"); } - sourceLabel.setText(source); - ContainerUnloader unloader = container.getUnloader(); - //Node & Edge count - int nodeCount = unloader.getNodeCount(); - int edgeCount = unloader.getEdgeCount(); + int nodeCount = 0, edgeCount = 0; + boolean dynamic = false, dynamicAtts = false, multiGraph = false; + for (Container container : containers) { + nodeCount += container.getUnloader().getNodeCount(); + edgeCount += container.getUnloader().getEdgeCount(); + if (container.getUnloader().getEdgeDefault().equals(EdgeDirectionDefault.UNDIRECTED)) { + // Discount mutual edges as they will be discarded + edgeCount -= container.getUnloader().getMutualEdgeCount(); + } + dynamic |= container.isDynamicGraph(); + dynamicAtts |= container.hasDynamicAttributes(); + multiGraph |= container.isMultiGraph(); + } + graphCountLabel.setText("" + containers.length); nodeCountLabel.setText("" + nodeCount); edgeCountLabel.setText("" + edgeCount); - //Dynamic & Hierarchical graph + //Dynamic graph String yes = NbBundle.getMessage(getClass(), "ReportPanel.yes"); String no = NbBundle.getMessage(getClass(), "ReportPanel.no"); - dynamicLabel.setText(container.isDynamicGraph() ? yes : no); - dynamicAttsLabel.setText(container.hasDynamicAttributes() ? yes : no); - multigraphLabel.setText(container.isMultiGraph() ? yes : no); + dynamicLabel.setText(dynamic ? yes : no); + dynamicAttsLabel.setText(dynamicAtts ? yes : no); + multigraphLabel.setText(multiGraph ? yes : no); + + //Multi sources + if (containers.length == 1) { + graphCountLabel.setVisible(false); + labelGraphCount.setVisible(false); + } } }); } - private static final Object PROCESSOR_KEY = new Object(); private void initProcessors() { int i = 0; for (Processor processor : Lookup.getDefault().lookupAll(Processor.class)) { JRadioButton radio = new JRadioButton(processor.getDisplayName()); - radio.setSelected(i == 0); + radio.setToolTipText(processor.getDisplayName()); radio.putClientProperty(PROCESSOR_KEY, processor); processorGroup.add(radio); - GridBagConstraints constraints = new GridBagConstraints(0, i++, 1, 1, 0, 0, GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 0, 0, 0), 0, 0); - processorPanel.add(radio, constraints); } } private void initProcessorsUI() { - for (Enumeration enumeration = processorGroup.getElements(); enumeration.hasMoreElements();) { - AbstractButton radioButton = enumeration.nextElement(); - Processor p = (Processor) radioButton.getClientProperty(PROCESSOR_KEY); - //Enabled - ProcessorUI pui = getProcessorUI(p); - if (pui != null) { - radioButton.setEnabled(pui.isValid(container)); + SwingUtilities.invokeLater(new Runnable() { + + @Override + public void run() { + + List validButtons = new ArrayList<>(); + for (Enumeration enumeration = processorGroup.getElements(); + enumeration.hasMoreElements(); ) { + AbstractButton radioButton = enumeration.nextElement(); + Processor p = (Processor) radioButton.getClientProperty(PROCESSOR_KEY); + //Enabled + ProcessorUI pui = getProcessorUI(p); + if (pui != null) { + boolean isValid = pui.isValid(containers); + if (isValid) { + validButtons.add(radioButton); + } + } + } + + int i = 0; + for (AbstractButton radio : validButtons) { + radio.setSelected(i == 0); + GridBagConstraints constraints = new GridBagConstraints( + 0, i++,//gridx, gridy + 1, 1, //gridwidth, gridheight + 1, (i == validButtons.size() ? 1.0 : 0.0),//weightx, weighty + GridBagConstraints.NORTHWEST,//anchor + GridBagConstraints.HORIZONTAL,//fill + new Insets(0, 0, 0, 0),//insets + 0, 0//ipadx, ipady + ); + processorPanel.add(radio, constraints); + } } - } + }); } public void destroy() { @@ -435,7 +578,7 @@ public void destroy() { } public Processor getProcessor() { - for (Enumeration enumeration = processorGroup.getElements(); enumeration.hasMoreElements();) { + for (Enumeration enumeration = processorGroup.getElements(); enumeration.hasMoreElements(); ) { AbstractButton radioButton = enumeration.nextElement(); if (radioButton.isSelected()) { return (Processor) radioButton.getClientProperty(PROCESSOR_KEY); @@ -454,9 +597,7 @@ private ProcessorUI getProcessorUI(Processor processor) { } /** - * This method is called from within the constructor to initialize the form. - * WARNING: Do NOT modify this code. The content of this method is always - * regenerated by the Form Editor. + * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The content of this method is always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents @@ -472,7 +613,6 @@ private void initComponents() { tab2ScrollPane = new javax.swing.JScrollPane(); reportEditor = new javax.swing.JEditorPane(); labelGraphType = new javax.swing.JLabel(); - graphTypeCombo = new javax.swing.JComboBox(); processorPanel = new javax.swing.JPanel(); statsPanel = new javax.swing.JPanel(); labelNodeCount = new javax.swing.JLabel(); @@ -481,18 +621,21 @@ private void initComponents() { edgeCountLabel = new javax.swing.JLabel(); dynamicLabel = new javax.swing.JLabel(); labelDynamic = new javax.swing.JLabel(); - jLabel1 = new javax.swing.JLabel(); labelMultiGraph = new javax.swing.JLabel(); multigraphLabel = new javax.swing.JLabel(); labelDynamicAtts = new javax.swing.JLabel(); dynamicAttsLabel = new javax.swing.JLabel(); - moreOptionsLink = new org.jdesktop.swingx.JXHyperlink(); + labelGraphCount = new javax.swing.JLabel(); + graphCountLabel = new javax.swing.JLabel(); moreOptionsPanel = new javax.swing.JPanel(); + moreOptionsLeftPanel = new javax.swing.JPanel(); autoscaleCheckbox = new javax.swing.JCheckBox(); createMissingNodesCheckbox = new javax.swing.JCheckBox(); selfLoopCheckBox = new javax.swing.JCheckBox(); labelParallelEdgesMergeStrategy = new javax.swing.JLabel(); edgesMergeStrategyCombo = new javax.swing.JComboBox(); + graphTypeCombo = new javax.swing.JComboBox(); + moreOptionsLink = new org.jdesktop.swingx.JXHyperlink(); labelSrc.setText(org.openide.util.NbBundle.getMessage(ReportPanel.class, "ReportPanel.labelSrc.text")); // NOI18N @@ -502,6 +645,8 @@ private void initComponents() { tabbedPane.addTab(org.openide.util.NbBundle.getMessage(ReportPanel.class, "ReportPanel.tab1ScrollPane.TabConstraints.tabTitle"), tab1ScrollPane); // NOI18N + reportEditor.setEditable(false); + reportEditor.setFocusable(false); tab2ScrollPane.setViewportView(reportEditor); tabbedPane.addTab(org.openide.util.NbBundle.getMessage(ReportPanel.class, "ReportPanel.tab2ScrollPane.TabConstraints.tabTitle"), tab2ScrollPane); // NOI18N @@ -516,35 +661,35 @@ private void initComponents() { labelNodeCount.setText(org.openide.util.NbBundle.getMessage(ReportPanel.class, "ReportPanel.labelNodeCount.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 0; + gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; - gridBagConstraints.insets = new java.awt.Insets(10, 0, 6, 0); + gridBagConstraints.insets = new java.awt.Insets(0, 2, 6, 0); statsPanel.add(labelNodeCount, gridBagConstraints); labelEdgeCount.setFont(labelEdgeCount.getFont().deriveFont(labelEdgeCount.getFont().getStyle() | java.awt.Font.BOLD)); labelEdgeCount.setText(org.openide.util.NbBundle.getMessage(ReportPanel.class, "ReportPanel.labelEdgeCount.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 1; + gridBagConstraints.gridy = 2; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; - gridBagConstraints.insets = new java.awt.Insets(0, 0, 10, 0); + gridBagConstraints.insets = new java.awt.Insets(0, 2, 10, 0); statsPanel.add(labelEdgeCount, gridBagConstraints); nodeCountLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N nodeCountLabel.setText(org.openide.util.NbBundle.getMessage(ReportPanel.class, "ReportPanel.nodeCountLabel.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 0; + gridBagConstraints.gridy = 1; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 1.0; - gridBagConstraints.insets = new java.awt.Insets(10, 10, 6, 0); + gridBagConstraints.insets = new java.awt.Insets(0, 10, 6, 0); statsPanel.add(nodeCountLabel, gridBagConstraints); edgeCountLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N edgeCountLabel.setText(org.openide.util.NbBundle.getMessage(ReportPanel.class, "ReportPanel.edgeCountLabel.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 1; + gridBagConstraints.gridy = 2; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(0, 10, 10, 0); @@ -553,7 +698,7 @@ private void initComponents() { dynamicLabel.setText(org.openide.util.NbBundle.getMessage(ReportPanel.class, "ReportPanel.dynamicLabel.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 2; + gridBagConstraints.gridy = 3; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(0, 10, 6, 0); @@ -562,32 +707,23 @@ private void initComponents() { labelDynamic.setText(org.openide.util.NbBundle.getMessage(ReportPanel.class, "ReportPanel.labelDynamic.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 2; + gridBagConstraints.gridy = 3; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; - gridBagConstraints.insets = new java.awt.Insets(0, 0, 6, 0); + gridBagConstraints.insets = new java.awt.Insets(0, 2, 6, 0); statsPanel.add(labelDynamic, gridBagConstraints); - jLabel1.setText(org.openide.util.NbBundle.getMessage(ReportPanel.class, "ReportPanel.jLabel1.text")); // NOI18N - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 5; - gridBagConstraints.gridwidth = 2; - gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; - gridBagConstraints.weighty = 1.0; - statsPanel.add(jLabel1, gridBagConstraints); - labelMultiGraph.setText(org.openide.util.NbBundle.getMessage(ReportPanel.class, "ReportPanel.labelMultiGraph.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 4; + gridBagConstraints.gridy = 5; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; - gridBagConstraints.insets = new java.awt.Insets(0, 0, 6, 0); + gridBagConstraints.insets = new java.awt.Insets(0, 2, 6, 0); statsPanel.add(labelMultiGraph, gridBagConstraints); multigraphLabel.setText(org.openide.util.NbBundle.getMessage(ReportPanel.class, "ReportPanel.multigraphLabel.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 4; + gridBagConstraints.gridy = 5; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(0, 10, 6, 0); @@ -596,71 +732,101 @@ private void initComponents() { labelDynamicAtts.setText(org.openide.util.NbBundle.getMessage(ReportPanel.class, "ReportPanel.labelDynamicAtts.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 3; + gridBagConstraints.gridy = 4; gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; - gridBagConstraints.insets = new java.awt.Insets(0, 0, 6, 0); + gridBagConstraints.insets = new java.awt.Insets(0, 2, 6, 0); statsPanel.add(labelDynamicAtts, gridBagConstraints); dynamicAttsLabel.setText(org.openide.util.NbBundle.getMessage(ReportPanel.class, "ReportPanel.dynamicAttsLabel.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 3; + gridBagConstraints.gridy = 4; gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; gridBagConstraints.weightx = 1.0; gridBagConstraints.insets = new java.awt.Insets(0, 10, 6, 0); statsPanel.add(dynamicAttsLabel, gridBagConstraints); - moreOptionsLink.setText(org.openide.util.NbBundle.getMessage(ReportPanel.class, "ReportPanel.moreOptionsLink.text")); // NOI18N - moreOptionsLink.setClickedColor(new java.awt.Color(0, 51, 255)); + labelGraphCount.setFont(labelGraphCount.getFont().deriveFont(labelGraphCount.getFont().getStyle() | java.awt.Font.BOLD)); + labelGraphCount.setText(org.openide.util.NbBundle.getMessage(ReportPanel.class, "ReportPanel.labelGraphCount.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(6, 2, 6, 0); + statsPanel.add(labelGraphCount, gridBagConstraints); + + graphCountLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N + graphCountLabel.setText(org.openide.util.NbBundle.getMessage(ReportPanel.class, "ReportPanel.graphCountLabel.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 0; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.insets = new java.awt.Insets(6, 10, 6, 0); + statsPanel.add(graphCountLabel, gridBagConstraints); moreOptionsPanel.setBorder(javax.swing.BorderFactory.createEtchedBorder()); + moreOptionsPanel.setLayout(new java.awt.GridBagLayout()); + + moreOptionsLeftPanel.setLayout(new java.awt.GridBagLayout()); autoscaleCheckbox.setText(org.openide.util.NbBundle.getMessage(ReportPanel.class, "ReportPanel.autoscaleCheckbox.text")); // NOI18N autoscaleCheckbox.setToolTipText(org.openide.util.NbBundle.getMessage(ReportPanel.class, "ReportPanel.autoscaleCheckbox.toolTipText")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.insets = new java.awt.Insets(0, 6, 0, 0); + moreOptionsLeftPanel.add(autoscaleCheckbox, gridBagConstraints); createMissingNodesCheckbox.setText(org.openide.util.NbBundle.getMessage(ReportPanel.class, "ReportPanel.createMissingNodesCheckbox.text")); // NOI18N createMissingNodesCheckbox.setToolTipText(org.openide.util.NbBundle.getMessage(ReportPanel.class, "ReportPanel.createMissingNodesCheckbox.toolTipText")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 1; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.insets = new java.awt.Insets(6, 6, 0, 0); + moreOptionsLeftPanel.add(createMissingNodesCheckbox, gridBagConstraints); selfLoopCheckBox.setText(org.openide.util.NbBundle.getMessage(ReportPanel.class, "ReportPanel.selfLoopCheckBox.text")); // NOI18N selfLoopCheckBox.setToolTipText(org.openide.util.NbBundle.getMessage(ReportPanel.class, "ReportPanel.selfLoopCheckBox.toolTipText")); // NOI18N selfLoopCheckBox.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 2; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.insets = new java.awt.Insets(6, 6, 0, 0); + moreOptionsLeftPanel.add(selfLoopCheckBox, gridBagConstraints); + + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.weightx = 1.0; + moreOptionsPanel.add(moreOptionsLeftPanel, gridBagConstraints); labelParallelEdgesMergeStrategy.setText(org.openide.util.NbBundle.getMessage(ReportPanel.class, "ReportPanel.labelParallelEdgesMergeStrategy.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 0; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; + gridBagConstraints.insets = new java.awt.Insets(6, 0, 0, 0); + moreOptionsPanel.add(labelParallelEdgesMergeStrategy, gridBagConstraints); - javax.swing.GroupLayout moreOptionsPanelLayout = new javax.swing.GroupLayout(moreOptionsPanel); - moreOptionsPanel.setLayout(moreOptionsPanelLayout); - moreOptionsPanelLayout.setHorizontalGroup( - moreOptionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(moreOptionsPanelLayout.createSequentialGroup() - .addContainerGap() - .addGroup(moreOptionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(moreOptionsPanelLayout.createSequentialGroup() - .addComponent(autoscaleCheckbox, javax.swing.GroupLayout.PREFERRED_SIZE, 168, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(labelParallelEdgesMergeStrategy) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(edgesMergeStrategyCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 111, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGroup(moreOptionsPanelLayout.createSequentialGroup() - .addGroup(moreOptionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(createMissingNodesCheckbox) - .addComponent(selfLoopCheckBox)) - .addGap(0, 0, Short.MAX_VALUE))) - .addContainerGap()) - ); - moreOptionsPanelLayout.setVerticalGroup( - moreOptionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(moreOptionsPanelLayout.createSequentialGroup() - .addContainerGap() - .addGroup(moreOptionsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(labelParallelEdgesMergeStrategy) - .addComponent(edgesMergeStrategyCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(autoscaleCheckbox)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(createMissingNodesCheckbox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(selfLoopCheckBox) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 2; + gridBagConstraints.gridy = 0; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; + gridBagConstraints.insets = new java.awt.Insets(2, 0, 0, 0); + moreOptionsPanel.add(edgesMergeStrategyCombo, gridBagConstraints); + + moreOptionsLink.setText(org.openide.util.NbBundle.getMessage(ReportPanel.class, "ReportPanel.moreOptionsLink.text")); // NOI18N + moreOptionsLink.setFocusPainted(false); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); @@ -669,28 +835,22 @@ private void initComponents() { .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(tabbedPane, javax.swing.GroupLayout.DEFAULT_SIZE, 600, Short.MAX_VALUE) + .addComponent(tabbedPane, javax.swing.GroupLayout.DEFAULT_SIZE, 625, Short.MAX_VALUE) + .addComponent(moreOptionsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addComponent(labelSrc) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(sourceLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(labelGraphType) - .addGap(18, 18, 18) - .addComponent(graphTypeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 152, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(0, 0, Short.MAX_VALUE)) - .addComponent(statsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(moreOptionsLink, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(8, 8, 8)) - .addGroup(layout.createSequentialGroup() - .addGap(18, 18, 18) - .addComponent(processorPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 173, javax.swing.GroupLayout.PREFERRED_SIZE)))) - .addComponent(moreOptionsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addComponent(statsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 329, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(processorPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addComponent(labelGraphType) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(graphTypeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 152, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(moreOptionsLink, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap()) ); layout.setVerticalGroup( @@ -700,7 +860,7 @@ private void initComponents() { .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(labelSrc) .addComponent(sourceLabel)) - .addGap(18, 18, 18) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(tabbedPane, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) @@ -708,49 +868,17 @@ private void initComponents() { .addComponent(graphTypeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(moreOptionsLink, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(moreOptionsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(moreOptionsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 94, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(statsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 122, Short.MAX_VALUE) - .addComponent(processorPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(processorPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 145, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(statsPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JCheckBox autoscaleCheckbox; - private javax.swing.JCheckBox createMissingNodesCheckbox; - private javax.swing.JLabel dynamicAttsLabel; - private javax.swing.JLabel dynamicLabel; - private javax.swing.JLabel edgeCountLabel; - private javax.swing.JComboBox edgesMergeStrategyCombo; - private javax.swing.JComboBox graphTypeCombo; - private org.netbeans.swing.outline.Outline issuesOutline; - private javax.swing.JLabel jLabel1; - private javax.swing.JLabel labelDynamic; - private javax.swing.JLabel labelDynamicAtts; - private javax.swing.JLabel labelEdgeCount; - private javax.swing.JLabel labelGraphType; - private javax.swing.JLabel labelMultiGraph; - private javax.swing.JLabel labelNodeCount; - private javax.swing.JLabel labelParallelEdgesMergeStrategy; - private javax.swing.JLabel labelSrc; - private org.jdesktop.swingx.JXHyperlink moreOptionsLink; - private javax.swing.JPanel moreOptionsPanel; - private javax.swing.JLabel multigraphLabel; - private javax.swing.JLabel nodeCountLabel; - private javax.swing.JPanel processorPanel; - private javax.swing.ButtonGroup processorStrategyRadio; - private javax.swing.JEditorPane reportEditor; - private javax.swing.JCheckBox selfLoopCheckBox; - private javax.swing.JLabel sourceLabel; - private javax.swing.JPanel statsPanel; - private javax.swing.JScrollPane tab1ScrollPane; - private javax.swing.JScrollPane tab2ScrollPane; - private javax.swing.JTabbedPane tabbedPane; - // End of variables declaration//GEN-END:variables private class IssueTreeModel implements TreeModel { - private List issues; + private final List issues; public IssueTreeModel(List issues) { this.issues = issues; @@ -773,10 +901,7 @@ public int getChildCount(Object parent) { @Override public boolean isLeaf(Object node) { - if (node instanceof Issue) { - return true; - } - return false; + return node instanceof Issue; } @Override diff --git a/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/WizardIterator.java b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/WizardIterator.java new file mode 100755 index 0000000000..bb4642a315 --- /dev/null +++ b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/WizardIterator.java @@ -0,0 +1,206 @@ +/* +Copyright 2008-2010 Gephi +Authors : Yi Du +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.importer; + +import java.awt.Component; +import java.util.NoSuchElementException; +import javax.swing.JComponent; +import javax.swing.event.ChangeListener; +import org.gephi.io.importer.spi.ImporterWizardUI; +import org.gephi.io.importer.spi.WizardImporter; +import org.openide.WizardDescriptor; +import org.openide.util.Lookup; + +public class WizardIterator implements WizardDescriptor.Iterator { + + private int index; + private WizardDescriptor.Panel[] originalPanels; + private WizardDescriptor.Panel[] panels; + private ImporterWizardUI currentWizardUI; + + /** + * Initialize panels representing individual wizard's steps and sets various + * properties for them influencing wizard appearance. + */ + private WizardDescriptor.Panel[] getPanels() { + if (panels == null) { + panels = new WizardDescriptor.Panel[] { + new WizardPanel1(), + new WizardPanel2() + }; + String[] steps = new String[panels.length]; + for (int i = 0; i < panels.length; i++) { + Component c = panels[i].getComponent(); + // Default step name to component name of panel. + steps[i] = c.getName(); + if (c instanceof JComponent) { // assume Swing components + JComponent jc = (JComponent) c; + // Sets step number of a component + // TODO if using org.openide.dialogs >= 7.8, can use WizardDescriptor.PROP_*: + jc.putClientProperty(WizardDescriptor.PROP_CONTENT_SELECTED_INDEX, i); + // Sets steps names for a panel + jc.putClientProperty("WizardPanel_contentData", steps); + // Turn on subtitle creation on each step + jc.putClientProperty("WizardPanel_autoWizardStyle", Boolean.TRUE); + // Show steps on the left side with the image on the background + jc.putClientProperty("WizardPanel_contentDisplayed", Boolean.TRUE); + // Turn on numbering of all steps + jc.putClientProperty("WizardPanel_contentNumbered", Boolean.TRUE); + } + } + originalPanels = panels; + } + return panels; + } + + @Override + public WizardDescriptor.Panel current() { + WizardDescriptor.Panel p = getPanels()[index]; +// if(p.getComponent() instanceof SetupablePanel){ +// ((SetupablePanel)(p.getComponent())).setup +// (currentSpigotSupport.generateImporter()); +// } + return p; + } + + @Override + public String name() { + return index + 1 + ". from " + getPanels().length; + } + + @Override + public boolean hasNext() { + return index < getPanels().length - 1; + } + + @Override + public boolean hasPrevious() { + return index > 0; + } + + @Override + public void nextPanel() { + if (!hasNext()) { + throw new NoSuchElementException(); + } + //change panel if the current is the first panel + if (index == 0) { + for (ImporterWizardUI wizardUi : Lookup.getDefault().lookupAll(ImporterWizardUI.class)) { + WizardVisualPanel1 visual1 = ((WizardVisualPanel1) current().getComponent()); + if (visual1.getCurrentCategory().equals(wizardUi.getCategory()) + && visual1.getCurrentWizard().equals(wizardUi.getDisplayName())) { + WizardDescriptor.Panel[] wizardPanels = wizardUi.getPanels(); + WizardDescriptor.Panel tempFirstPanel = panels[0]; + panels = new WizardDescriptor.Panel[wizardPanels.length + 1]; + panels[0] = tempFirstPanel; + for (int i = 0; i < wizardPanels.length; i++) { + panels[i + 1] = wizardPanels[i]; + wizardUi.setup(wizardPanels[i]); + } + currentWizardUI = wizardUi; + } + } + // + repaintLeftComponent(); + } + index++; + } + + /** + * ? might used for repainting + */ + private void repaintLeftComponent() { + String[] steps = new String[panels.length]; + for (int i = 0; i < panels.length; i++) { + Component c = panels[i].getComponent(); + // Default step name to component name of panel. + steps[i] = c.getName(); + if (c instanceof JComponent) { // assume Swing components + JComponent jc = (JComponent) c; + // Sets step number of a component + // TODO if using org.openide.dialogs >= 7.8, can use WizardDescriptor.PROP_*: + jc.putClientProperty(WizardDescriptor.PROP_CONTENT_SELECTED_INDEX, i); + // Sets steps names for a panel + jc.putClientProperty("WizardPanel_contentData", steps); + // Turn on subtitle creation on each step + jc.putClientProperty("WizardPanel_autoWizardStyle", Boolean.TRUE); + // Show steps on the left side with the image on the background + jc.putClientProperty("WizardPanel_contentDisplayed", Boolean.TRUE); + // Turn on numbering of all steps + jc.putClientProperty("WizardPanel_contentNumbered", Boolean.TRUE); + } + } + } + + @Override + public void previousPanel() { + //change panel if the previous panel is the first + if (!hasPrevious()) { + throw new NoSuchElementException(); + } + if (index == 1) { + panels = originalPanels; + repaintLeftComponent(); + } + index--; + } + + // If nothing unusual changes in the middle of the wizard, simply: + @Override + public void addChangeListener(ChangeListener l) { + } + + @Override + public void removeChangeListener(ChangeListener l) { + } + + public ImporterWizardUI getCurrentWizardUI() { + return currentWizardUI; + } + + void unsetupPanels(WizardImporter importer) { + for (int i = 1; i < panels.length; i++) { + currentWizardUI.unsetup(importer, panels[i]); + } + } +} diff --git a/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/WizardPanel1.java b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/WizardPanel1.java new file mode 100755 index 0000000000..5f68262155 --- /dev/null +++ b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/WizardPanel1.java @@ -0,0 +1,145 @@ +/* +Copyright 2008-2010 Gephi +Authors : Yi Du +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.importer; + +import java.awt.Component; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import org.openide.WizardDescriptor; +import org.openide.WizardValidationException; +import org.openide.util.HelpCtx; + +public class WizardPanel1 implements WizardDescriptor.ValidatingPanel { + + // public final void addChangeListener(ChangeListener l) { +// } +// +// public final void removeChangeListener(ChangeListener l) { +// } + private final Set listeners = new HashSet<>(1); // or can use ChangeSupport in NB 6.0 + /** + * The visual component that displays this panel. If you need to access the + * component from this class, just use getComponent(). + */ + private Component component; + + // Get the visual component for the panel. In this template, the component + // is kept separate. This can be more efficient: if the wizard is created + // but never displayed, or not all panels are displayed, it is better to + // create only those which really need to be visible. + @Override + public Component getComponent() { + if (component == null) { + component = new WizardVisualPanel1(); + this.addChangeListener((ChangeListener) component); + } + return component; + } + + @Override + public HelpCtx getHelp() { + // Show no Help button for this panel: + return HelpCtx.DEFAULT_HELP; + // If you have context help: + // return new HelpCtx(SampleWizardPanel1.class); + } + + @Override + public boolean isValid() { + WizardVisualPanel1 panel = (WizardVisualPanel1) getComponent(); + return !panel.emptyList(); + // If it is always OK to press Next or Finish, then: +// If it depends on some condition (form filled out...), then: + // return someCondition(); + // and when this condition changes (last form field filled in...) then: + // fireChangeEvent(); + // and uncomment the complicated stuff below. + } + + @Override + public final void addChangeListener(ChangeListener l) { + synchronized (listeners) { + listeners.add(l); + } + } + + @Override + public final void removeChangeListener(ChangeListener l) { + synchronized (listeners) { + listeners.remove(l); + } + } + + protected final void fireChangeEvent() { + Iterator it; + synchronized (listeners) { + it = new HashSet<>(listeners).iterator(); + } + ChangeEvent ev = new ChangeEvent(this); + while (it.hasNext()) { + it.next().stateChanged(ev); + } + } + + // You can use a settings object to keep track of state. Normally the + // settings object will be the WizardDescriptor, so you can use + // WizardDescriptor.getProperty & putProperty to store information entered + // by the user. + @Override + public void readSettings(Object settings) { + } + + @Override + public void storeSettings(Object settings) { + } + + @Override + public void validate() throws WizardValidationException { + if (!isValid()) { + throw new WizardValidationException(null, "Can't be empty.", null); + } + } +} diff --git a/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/WizardPanel2.java b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/WizardPanel2.java new file mode 100755 index 0000000000..378753c3ce --- /dev/null +++ b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/WizardPanel2.java @@ -0,0 +1,136 @@ +/* +Copyright 2008-2010 Gephi +Authors : Yi Du +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.importer; + +import java.awt.Component; +import javax.swing.event.ChangeListener; +import org.openide.WizardDescriptor; +import org.openide.util.HelpCtx; + +public class WizardPanel2 implements WizardDescriptor.Panel { + + /** + * The visual component that displays this panel. If you need to access the + * component from this class, just use getComponent(). + */ + private Component component; + + public WizardPanel2() { + super(); + } + + // Get the visual component for the panel. In this template, the component + // is kept separate. This can be more efficient: if the wizard is created + // but never displayed, or not all panels are displayed, it is better to + // create only those which really need to be visible. + @Override + public Component getComponent() { + if (component == null) { + component = new WizardVisualPanel2(); + } + return component; + } + + @Override + public HelpCtx getHelp() { + // Show no Help button for this panel: + return HelpCtx.DEFAULT_HELP; + // If you have context help: + // return new HelpCtx(SampleWizardPanel1.class); + } + + @Override + public boolean isValid() { + // If it is always OK to press Next or Finish, then: + return true; + // If it depends on some condition (form filled out...), then: + // return someCondition(); + // and when this condition changes (last form field filled in...) then: + // fireChangeEvent(); + // and uncomment the complicated stuff below. + } + + @Override + public final void addChangeListener(ChangeListener l) { + } + + @Override + public final void removeChangeListener(ChangeListener l) { + } + + /* + private final Set listeners = new HashSet(1); // or can use ChangeSupport in NB 6.0 + public final void addChangeListener(ChangeListener l) { + synchronized (listeners) { + listeners.add(l); + } + } + public final void removeChangeListener(ChangeListener l) { + synchronized (listeners) { + listeners.remove(l); + } + } + protected final void fireChangeEvent() { + Iterator it; + synchronized (listeners) { + it = new HashSet(listeners).iterator(); + } + ChangeEvent ev = new ChangeEvent(this); + while (it.hasNext()) { + it.next().stateChanged(ev); + } + } + */ + + // You can use a settings object to keep track of state. Normally the + // settings object will be the WizardDescriptor, so you can use + // WizardDescriptor.getProperty & putProperty to store information entered + // by the user. + @Override + public void readSettings(Object settings) { + } + + @Override + public void storeSettings(Object settings) { + } +} diff --git a/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/WizardVisualPanel1.form b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/WizardVisualPanel1.form new file mode 100755 index 0000000000..c7d49eeee0 --- /dev/null +++ b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/WizardVisualPanel1.form @@ -0,0 +1,154 @@ + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/WizardVisualPanel1.java b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/WizardVisualPanel1.java new file mode 100755 index 0000000000..79fbb88940 --- /dev/null +++ b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/WizardVisualPanel1.java @@ -0,0 +1,253 @@ +/* +Copyright 2008-2010 Gephi +Authors : Yi Du +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.importer; + +import javax.swing.DefaultListModel; +import javax.swing.JPanel; +import javax.swing.ListModel; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import org.gephi.io.importer.spi.ImporterWizardUI; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +public final class WizardVisualPanel1 extends JPanel implements ChangeListener { + + private final DefaultListModel subTypeModel = new DefaultListModel(); + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JList categoryList; + private javax.swing.JTextArea descriptionArea; + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JScrollPane jScrollPane2; + private javax.swing.JScrollPane jScrollPane3; + private javax.swing.JLabel labelCategory; + private javax.swing.JLabel labelDescription; + private javax.swing.JLabel labelWizard; + private javax.swing.JList wizardList; + // End of variables declaration//GEN-END:variables + + public WizardVisualPanel1() { + initComponents(); + reloadDescription(); + } + + @Override + public String getName() { + return NbBundle.getMessage(WizardVisualPanel1.class, "WizardVisualPanel1.title"); + } + + /** + * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The content of this method is always regenerated by the Form Editor. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + + labelCategory = new javax.swing.JLabel(); + labelWizard = new javax.swing.JLabel(); + jScrollPane1 = new javax.swing.JScrollPane(); + categoryList = new javax.swing.JList(); + jScrollPane2 = new javax.swing.JScrollPane(); + wizardList = new javax.swing.JList(); + labelDescription = new javax.swing.JLabel(); + jScrollPane3 = new javax.swing.JScrollPane(); + descriptionArea = new javax.swing.JTextArea(); + + setMaximumSize(new java.awt.Dimension(500, 360)); + setPreferredSize(new java.awt.Dimension(500, 360)); + + org.openide.awt.Mnemonics.setLocalizedText(labelCategory, org.openide.util.NbBundle + .getMessage(WizardVisualPanel1.class, "WizardVisualPanel1.labelCategory.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(labelWizard, org.openide.util.NbBundle + .getMessage(WizardVisualPanel1.class, "WizardVisualPanel1.labelWizard.text")); // NOI18N + + categoryList.setModel(getCategoryListModel()); + categoryList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); + categoryList.setSelectedIndex(0); + categoryList.addListSelectionListener(new javax.swing.event.ListSelectionListener() { + public void valueChanged(javax.swing.event.ListSelectionEvent evt) { + categoryListValueChanged(evt); + } + }); + jScrollPane1.setViewportView(categoryList); + + wizardList.setModel(reloadSubType()); + wizardList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); + wizardList.setSelectedIndex(0); + wizardList.addListSelectionListener(new javax.swing.event.ListSelectionListener() { + public void valueChanged(javax.swing.event.ListSelectionEvent evt) { + wizardListValueChanged(evt); + } + }); + jScrollPane2.setViewportView(wizardList); + + org.openide.awt.Mnemonics.setLocalizedText(labelDescription, org.openide.util.NbBundle + .getMessage(WizardVisualPanel1.class, "WizardVisualPanel1.labelDescription.text")); // NOI18N + + descriptionArea.setColumns(20); + descriptionArea.setRows(5); + jScrollPane3.setViewportView(descriptionArea); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jScrollPane3) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(labelCategory, javax.swing.GroupLayout.PREFERRED_SIZE, 107, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 199, + javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(55, 55, 55) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(labelWizard) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 0, + Short.MAX_VALUE))) + .addComponent(labelDescription)) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelCategory) + .addComponent(labelWizard)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 207, Short.MAX_VALUE) + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 207, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(labelDescription) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap()) + ); + }// //GEN-END:initComponents + + private void categoryListValueChanged( + javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_categoryListValueChanged + reloadSubType(); + if (wizardList.getSelectedValue() == null) { + descriptionArea.setText(""); + } + wizardList.setSelectedIndex(0); + }//GEN-LAST:event_categoryListValueChanged + + private void wizardListValueChanged( + javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_wizardListValueChanged + reloadDescription(); + }//GEN-LAST:event_wizardListValueChanged + + public String getCurrentCategory() { + return categoryList.getSelectedValue().toString(); + } + + public String getCurrentWizard() { + return wizardList.getSelectedValue().toString(); + } + + private ListModel getCategoryListModel() { + DefaultListModel model = new DefaultListModel(); + for (ImporterWizardUI wizardUi : Lookup.getDefault().lookupAll(ImporterWizardUI.class)) { + if (!model.contains(wizardUi.getCategory())) { + model.addElement(wizardUi.getCategory()); + } + } + return model; + } + + private ListModel reloadSubType() { + subTypeModel.clear(); + if (categoryList.getSelectedValue() == null) { + return subTypeModel; + } + String category = categoryList.getSelectedValue().toString(); + + for (ImporterWizardUI wizardUi : Lookup.getDefault().lookupAll(ImporterWizardUI.class)) { + if (category.equals(wizardUi.getCategory())) { + subTypeModel.addElement(wizardUi.getDisplayName()); + descriptionArea.setText(wizardUi.getDescription()); + } + } + return subTypeModel; + } + + private void reloadDescription() { + String description = ""; + if (emptyList()) { + description = + NbBundle.getMessage(WizardPanel1.class, "ImportWizard.description_no_plugin_importers_installed"); + } else { + String category = categoryList.getSelectedValue().toString(); + String wizard = wizardList.getSelectedValue().toString(); + + for (ImporterWizardUI wizardUi : Lookup.getDefault().lookupAll(ImporterWizardUI.class)) { + if (category.equals(wizardUi.getCategory()) && wizard.equals(wizardUi.getDisplayName())) { + description = wizardUi.getDescription(); + break; + } + } + } + + descriptionArea.setText(description); + } + + boolean emptyList() { + return categoryList.getSelectedValue() == null + || wizardList.getSelectedValue() == null; + } + + @Override + public void stateChanged(ChangeEvent e) { + throw new UnsupportedOperationException("Not supported yet."); + } +} diff --git a/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/WizardVisualPanel2.form b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/WizardVisualPanel2.form new file mode 100755 index 0000000000..d3a7a1dcdc --- /dev/null +++ b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/WizardVisualPanel2.form @@ -0,0 +1,28 @@ + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/WizardVisualPanel2.java b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/WizardVisualPanel2.java new file mode 100755 index 0000000000..8e33080e5a --- /dev/null +++ b/modules/DesktopImport/src/main/java/org/gephi/desktop/importer/WizardVisualPanel2.java @@ -0,0 +1,80 @@ +/* +Copyright 2008-2010 Gephi +Authors : Yi Du +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.importer; + +import javax.swing.JPanel; + +public final class WizardVisualPanel2 extends JPanel { + + public WizardVisualPanel2() { + initComponents(); + } + + @Override + public String getName() { + return "..."; + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 500, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 360, Short.MAX_VALUE) + ); + }// //GEN-END:initComponents + + // Variables declaration - do not modify//GEN-BEGIN:variables + // End of variables declaration//GEN-END:variables +} diff --git a/modules/DesktopImport/src/main/nbm/manifest.mf b/modules/DesktopImport/src/main/nbm/manifest.mf index 3aa0f7b27b..1b1639f11e 100644 --- a/modules/DesktopImport/src/main/nbm/manifest.mf +++ b/modules/DesktopImport/src/main/nbm/manifest.mf @@ -2,4 +2,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Layer: org/gephi/desktop/importer/layer.xml OpenIDE-Module-Localizing-Bundle: org/gephi/desktop/importer/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi UI +OpenIDE-Module-Name: Desktop Import \ No newline at end of file diff --git a/modules/DesktopImport/src/main/nbm/module.xml b/modules/DesktopImport/src/main/nbm/module.xml deleted file mode 100644 index 111ec8ea4f..0000000000 --- a/modules/DesktopImport/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle.properties b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle.properties index 49fcc86ee4..ac65b35da7 100644 --- a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle.properties +++ b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle.properties @@ -1,5 +1,3 @@ -OpenIDE-Module-Display-Category=Gephi UI -OpenIDE-Module-Name=Desktop Import OpenIDE-Module-Short-Description=Integrate import features in UI CTL_ImportDB = Import Database @@ -25,21 +23,27 @@ ReportPanel.graphType.directed=Directed ReportPanel.graphType.undirected=Undirected ReportPanel.graphType.mixed=Mixed ReportPanel.issueTable.issues=Issues +ReportPanel.reportCopy.text=Copy +ReportPanel.reportCopy.description=Copy content to clipboard -DesktopImportControllerUI.spigotSource = Spigot {0} +DesktopImportControllerUI.wizardSource = Wizard {0} DesktopImportControllerUI.streamSource = Stream {0} DesktopImportControllerUI.taskName = Import {0} +DesktopImportControllerUI.finishingImport = Processing {0} +DesktopImportControllerUI.multiImport.finishingImport = Processing {0} sources + DesktopImportControllerUI.database.ui.dialog.title = Database settings DesktopImportControllerUI.status.importSuccess = {0} successfully imported DesktopImportControllerUI.status.importSuccess.default = Data +DesktopImportControllerUI.status.multiImportSuccess = {0} sources successfully imported DesktopImportControllerUI.error_no_matching_file_importer = Impossible to find a compatible Importer.\nThe file format is not supported. Check file's extension. DesktopImportControllerUI.error_no_matching_stream_importer = Impossible to find a compatible Importer.\nThe stream is not supported. DesktopImportControllerUI.error_no_matching_db_importer = Impossible to find a compatible Importer.\nThe database is not supported. DesktopImportControllerUI.file.ui.dialog.title = {0} settings -DesktopImportControllerUI.spigot.ui.dialog.title = {0} settings +DesktopImportControllerUI.wizard.ui.dialog.title = {0} settings DesktopImportControllerUI.processor.ui.dialog.title = Processor settings ReportPanel.createMissingNodesCheckbox.text=Create missing nodes @@ -52,8 +56,31 @@ ReportPanel.mergeStrategy.sum=Sum ReportPanel.mergeStrategy.avg=Average ReportPanel.mergeStrategy.min=Minimum ReportPanel.mergeStrategy.max=Maximum -ReportPanel.jLabel1.text= +ReportPanel.mergeStrategy.first=First +ReportPanel.mergeStrategy.last=Last +ReportPanel.mergeStrategy.no_merge=Don't merge ReportPanel.labelMultiGraph.text=Multi Graph: ReportPanel.multigraphLabel.text= ReportPanel.labelDynamicAtts.text=Dynamic Attributes: ReportPanel.dynamicAttsLabel.text= +ReportPanel.labelGraphCount.text=# of Graphs: +ReportPanel.graphCountLabel.text= +ReportPanel.multiSourceLabel.text=Multiple sources + +CTL_ImportWizard=Import... + +ImportWizard.wizard.title = Import Wizard +ImportWizard.error_no_matching_importer = No importer can be found for this type of Wizard +ImportWizard.description_no_plugin_importers_installed = No plugin importers installed + +WizardVisualPanel1.title = Select Wizard +WizardVisualPanel1.labelCategory.text=Category: +WizardVisualPanel1.labelWizard.text=Wizard Type: +WizardVisualPanel1.labelDescription.text=Description: + +ProcessorIssuesReportPanel.title=Issues after import process +ProcessorIssuesReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Report +ProcessorIssuesReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Issues +ProcessorIssuesReportPanel.close=Close + +DesktopImportControllerUI.errorHandler.critical={0} failed to import due to the following error: {1} \ No newline at end of file diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_ar.properties b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_ca.properties b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_ca.properties new file mode 100644 index 0000000000..b1134ba249 --- /dev/null +++ b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_ca.properties @@ -0,0 +1,70 @@ +OpenIDE-Module-Short-Description=Integrate import features in UI +CTL_ImportDB=Importa la base de dades +ReportPanel.title=Importa l'informe +ReportPanel.labelSrc.text=Source: +ReportPanel.sourceLabel.text= +ReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Issues +ReportPanel.nodeCountLabel.text= +ReportPanel.edgeCountLabel.text= +ReportPanel.labelEdgeCount.text=# d'arestes: +ReportPanel.labelNodeCount.text=# de nodes: +ReportPanel.labelDynamic.text=Graf dinΰmic +ReportPanel.dynamicLabel.text= +ReportPanel.labelGraphType.text=Tipus de graf: +ReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Informe +ReportPanel.autoscaleCheckbox.toolTipText=Scale node size, node position and edge weight to fill the space in an optimized way +ReportPanel.autoscaleCheckbox.text=Escala automΰticament +ReportPanel.noIssues=No issue found during import +ReportPanel.yes=sν +ReportPanel.no=no +ReportPanel.graphType.directed=Dirigit +ReportPanel.graphType.undirected=No dirigit +ReportPanel.graphType.mixed=Mixed +ReportPanel.issueTable.issues=Issues +ReportPanel.reportCopy.text=Copia +ReportPanel.reportCopy.description=Copia el contingut al porta-retalls +DesktopImportControllerUI.wizardSource=Wizard {0} +DesktopImportControllerUI.streamSource=Stream {0} +DesktopImportControllerUI.taskName=Importa {0} +DesktopImportControllerUI.database.ui.dialog.title=Configuraciσ de la base de dades +DesktopImportControllerUI.status.importSuccess={0} s'ha importat amb θxit +DesktopImportControllerUI.status.importSuccess.default=Dades +DesktopImportControllerUI.status.multiImportSuccess={0} sources successfully imported +DesktopImportControllerUI.error_no_matching_file_importer=Impossible to find a compatible Importer.\nThe file format is not supported. Check file's extension. +DesktopImportControllerUI.error_no_matching_stream_importer=Impossible to find a compatible Importer.\nThe stream is not supported. +DesktopImportControllerUI.error_no_matching_db_importer=Impossible to find a compatible Importer.\nThe database is not supported. +DesktopImportControllerUI.file.ui.dialog.title={0} settings +DesktopImportControllerUI.wizard.ui.dialog.title={0} settings +DesktopImportControllerUI.processor.ui.dialog.title=Processor settings +ReportPanel.createMissingNodesCheckbox.text=Create missing nodes +ReportPanel.createMissingNodesCheckbox.toolTipText=Create missing nodes found as edges' source or target +ReportPanel.moreOptionsLink.text=Mιs opcions +ReportPanel.selfLoopCheckBox.text=Self-loops +ReportPanel.selfLoopCheckBox.toolTipText=Allow self-loops on nodes +ReportPanel.labelParallelEdgesMergeStrategy.text=Edges merge strategy: +ReportPanel.mergeStrategy.sum=Sum +ReportPanel.mergeStrategy.avg=Mitjana +ReportPanel.mergeStrategy.min=Mνnim +ReportPanel.mergeStrategy.max=Mΰxim +ReportPanel.mergeStrategy.first=First +ReportPanel.mergeStrategy.last=Last +ReportPanel.mergeStrategy.no_merge=Don't merge +ReportPanel.labelMultiGraph.text=Multi Graph: +ReportPanel.multigraphLabel.text= +ReportPanel.labelDynamicAtts.text=Dynamic Attributes: +ReportPanel.dynamicAttsLabel.text= +ReportPanel.labelGraphCount.text=# de grafs +ReportPanel.graphCountLabel.text= +ReportPanel.multiSourceLabel.text=Multiple sources +CTL_ImportWizard=Import... +ImportWizard.wizard.title=Import Wizard +ImportWizard.error_no_matching_importer=No importer can be found for this type of Wizard +ImportWizard.description_no_plugin_importers_installed=No plugin importers installed +WizardVisualPanel1.title=Select Wizard +WizardVisualPanel1.labelCategory.text=Categoria: +WizardVisualPanel1.labelWizard.text=Wizard Type: +WizardVisualPanel1.labelDescription.text=Description: +ProcessorIssuesReportPanel.title=Issues after import process +ProcessorIssuesReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Report +ProcessorIssuesReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Issues +ProcessorIssuesReportPanel.close=Close diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_cs.properties b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_cs.properties index 118cae9dd4..8bfaba69e7 100644 --- a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_cs.properties +++ b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_cs.properties @@ -1,65 +1,81 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-26 15\:25+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Short-Description=Zav\u00e9st funkce importu v rozhran\u00ed - -CTL_ImportDB=Importovat datab\u00e1zi - -ReportPanel.title=Importovat z\u00e1znam - -ReportPanel.labelSrc.text=Zdroj\: - -ReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Probl\u00e9my - -ReportPanel.labelEdgeCount.text=P\u010d. hran\: - -ReportPanel.labelNodeCount.text=P\u010d. uzl\u016f\: - -ReportPanel.labelDynamic.text=Dynamick\u00fd graf\: - -ReportPanel.dynamicLabel.text=NaN - -ReportPanel.labelGraphType.text=Typ grafu\: - -ReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Z\u00e1znam - -ReportPanel.autoscaleCheckbox.toolTipText=Zm\u011bnit velikost uzlu, jeho um\u00edst\u011bn\u00ed a v\u00e1hu hrany, aby byl prostor vypln\u011bn optimalizovan\u00fdm zp\u016fsobem - -ReportPanel.autoscaleCheckbox.text=Auto-p\u0159izp\u016fsobit - -ReportPanel.noIssues=B\u011bhem importu nedo\u0161lo k probl\u00e9m\u016fm - -ReportPanel.yes=ano - -ReportPanel.no=ne - -DesktopImportControllerUI.spigotSource=\u010cep {0} - -DesktopImportControllerUI.streamSource=Proud {0} - -DesktopImportControllerUI.taskName=Importovat {0} - -DesktopImportControllerUI.database.ui.dialog.title=Nastaven\u00ed datab\u00e1ze - -DesktopImportControllerUI.status.importSuccess={0} \u00fasp\u011b\u0161n\u011b importov\u00e1no - -DesktopImportControllerUI.status.importSuccess.default=Data - -DesktopImportControllerUI.error_no_matching_file_importer=Nelze naj\u00edt kompatibiln\u00edho import\u00e9ra.\nForm\u00e1t souboru nen\u00ed podporov\u00e1n. Zkontrolujte p\u0159\u00edponu souboru. - -DesktopImportControllerUI.error_no_matching_stream_importer=Nelze naj\u00edt kompatibiln\u00edho import\u00e9ra.\nProud nen\u00ed podporov\u00e1n. - -DesktopImportControllerUI.error_no_matching_db_importer=Nelze naj\u00edt kompatibiln\u00edho import\u00e9ra.\nDatab\u00e1ze nen\u00ed podporov\u00e1na. - -DesktopImportControllerUI.file.ui.dialog.title=Nastaven\u00ed {0} - -DesktopImportControllerUI.spigot.ui.dialog.title=Nastaven\u00ed {0} - -DesktopImportControllerUI.processor.ui.dialog.title=Nastaven\u00ed procesoru - -ReportPanel.createMissingNodesCheckbox.text=Vytvo\u0159it chyb\u011bj\u00edc\u00ed uzly +OpenIDE-Module-Short-Description=Zavιst funkce importu v rozhranν + +CTL_ImportDB = Importovat databαzi + +ReportPanel.title = Importovat zαznam +ReportPanel.labelSrc.text=Zdroj: +ReportPanel.sourceLabel.text= +ReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Problιmy +ReportPanel.nodeCountLabel.text= +ReportPanel.edgeCountLabel.text= +ReportPanel.labelEdgeCount.text=P\u010d. hran: +ReportPanel.labelNodeCount.text=P\u010d. uzl\u016f: +ReportPanel.labelDynamic.text=Dynamickύ graf: +ReportPanel.dynamicLabel.text= +ReportPanel.labelGraphType.text=Typ grafu: +ReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Zαznam +ReportPanel.autoscaleCheckbox.toolTipText=Zm\u011bnit velikost uzlu, jeho umνst\u011bnν a vαhu hrany, aby byl prostor vypln\u011bn optimalizovanύm zp\u016fsobem +ReportPanel.autoscaleCheckbox.text=Auto-p\u0159izp\u016fsobit +ReportPanel.noIssues=B\u011bhem importu nedo\u0161lo k problιm\u016fm +ReportPanel.yes=ano +ReportPanel.no=ne +ReportPanel.graphType.directed=\u0158νzenι +ReportPanel.graphType.undirected=Ne\u0159νzenι +ReportPanel.graphType.mixed=Smν\u0161enι +ReportPanel.issueTable.issues=Problιmy +ReportPanel.reportCopy.text=Kopνrovat +ReportPanel.reportCopy.description=Zkopνrovat obsah do schrαnky + +# DesktopImportControllerUI.wizardSource = Wizard {0} +DesktopImportControllerUI.streamSource = Proud {0} +DesktopImportControllerUI.taskName = Importovat {0} + +DesktopImportControllerUI.database.ui.dialog.title = Nastavenν databαze +DesktopImportControllerUI.status.importSuccess = {0} ϊsp\u011b\u0161n\u011b importovαno +DesktopImportControllerUI.status.importSuccess.default = Data +DesktopImportControllerUI.status.multiImportSuccess = {0} zdroj\u016f ϊsp\u011b\u0161n\u011b importovαno + +# DesktopImportControllerUI.error_no_matching_file_importer = Impossible to find a compatible Importer.\nThe file format is not supported. Check file's extension. +# DesktopImportControllerUI.error_no_matching_stream_importer = Impossible to find a compatible Importer.\nThe stream is not supported. +# DesktopImportControllerUI.error_no_matching_db_importer = Impossible to find a compatible Importer.\nThe database is not supported. + +DesktopImportControllerUI.file.ui.dialog.title = Nastavenν {0} +# DesktopImportControllerUI.wizard.ui.dialog.title = {0} settings +DesktopImportControllerUI.processor.ui.dialog.title = Nastavenν procesoru + +ReportPanel.createMissingNodesCheckbox.text=Vytvo\u0159it chyb\u011bjνcν uzly +ReportPanel.createMissingNodesCheckbox.toolTipText=Vytvo\u0159it chyb\u011bjνcν uzle, kterι byly nalezeny jako zdroje hran nebo cνle +ReportPanel.moreOptionsLink.text=Dal\u0161ν volby... +ReportPanel.selfLoopCheckBox.text=Vlastnν smy\u010dky +ReportPanel.selfLoopCheckBox.toolTipText=Povolit vlastnν smy\u010dky na uzlech +ReportPanel.labelParallelEdgesMergeStrategy.text=Strategie slu\u010dovαnν hran: +ReportPanel.mergeStrategy.sum=Suma +ReportPanel.mergeStrategy.avg=Pr\u016fm\u011br +ReportPanel.mergeStrategy.min=Minimum +ReportPanel.mergeStrategy.max=Maximum +# ReportPanel.mergeStrategy.first=First +# ReportPanel.mergeStrategy.last=Last +# ReportPanel.mergeStrategy.no_merge=Don't merge +ReportPanel.labelMultiGraph.text=Vνcenαsobnύ graf: +ReportPanel.multigraphLabel.text= +ReportPanel.labelDynamicAtts.text=Dynamickι vlastnosti: +ReportPanel.dynamicAttsLabel.text= +ReportPanel.labelGraphCount.text=P\u010d. uzl\u016f: +ReportPanel.graphCountLabel.text= +ReportPanel.multiSourceLabel.text=Vνce zdroj\u016f + +# CTL_ImportWizard=Import... + +# ImportWizard.wizard.title = Import Wizard +# ImportWizard.error_no_matching_importer = No importer can be found for this type of Wizard +# ImportWizard.description_no_plugin_importers_installed = No plugin importers installed + +# WizardVisualPanel1.title = Select Wizard +# WizardVisualPanel1.labelCategory.text=Category: +# WizardVisualPanel1.labelWizard.text=Wizard Type: +# WizardVisualPanel1.labelDescription.text=Description: + +# ProcessorIssuesReportPanel.title=Issues after import process +# ProcessorIssuesReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Report +# ProcessorIssuesReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Issues +# ProcessorIssuesReportPanel.close=Close diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_de.properties b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_de.properties new file mode 100644 index 0000000000..41fe0249a1 --- /dev/null +++ b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_de.properties @@ -0,0 +1,81 @@ +OpenIDE-Module-Short-Description=Integriert Import-Funktionen in Bedienoberflδche + +CTL_ImportDB = Importiere Datenbank + +ReportPanel.title = Import-Bericht +ReportPanel.labelSrc.text=Quelle: +ReportPanel.sourceLabel.text= +ReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Probleme +ReportPanel.nodeCountLabel.text= +ReportPanel.edgeCountLabel.text= +ReportPanel.labelEdgeCount.text=Anzahl Kanten: +ReportPanel.labelNodeCount.text=Anzahl Knoten: +ReportPanel.labelDynamic.text=Dynamischer Graph: +ReportPanel.dynamicLabel.text= +ReportPanel.labelGraphType.text=Graphen-Typ: +ReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Bericht +ReportPanel.autoscaleCheckbox.toolTipText=Skaliere Knotengrφίe, Knotenposition und Kantengewicht um verfόgbaren Platz in optimaler Weise auszufόllen +ReportPanel.autoscaleCheckbox.text=Auto-Skalieren +ReportPanel.noIssues=Keine Probleme wδhrend des Imports +ReportPanel.yes=Ja +ReportPanel.no=Nein +ReportPanel.graphType.directed=Gerichtet +ReportPanel.graphType.undirected=Ungerichtet +ReportPanel.graphType.mixed=Gemischt +ReportPanel.issueTable.issues=Probleme +ReportPanel.reportCopy.text=Kopieren +ReportPanel.reportCopy.description=Kopiere Inhalt in Zwischenablage + +DesktopImportControllerUI.wizardSource = Assistent {0} +DesktopImportControllerUI.streamSource = Datenstrom {0} +DesktopImportControllerUI.taskName = Importiere {0} + +DesktopImportControllerUI.database.ui.dialog.title = Datenbank-Einstellungen +DesktopImportControllerUI.status.importSuccess = {0} erfolgreich importiert +DesktopImportControllerUI.status.importSuccess.default = Daten +DesktopImportControllerUI.status.multiImportSuccess = {0} Quellen erfolgreich importiert + +# DesktopImportControllerUI.error_no_matching_file_importer = Impossible to find a compatible Importer.\nThe file format is not supported. Check file's extension. +# DesktopImportControllerUI.error_no_matching_stream_importer = Impossible to find a compatible Importer.\nThe stream is not supported. +# DesktopImportControllerUI.error_no_matching_db_importer = Impossible to find a compatible Importer.\nThe database is not supported. + +DesktopImportControllerUI.file.ui.dialog.title = {0} Eigenschaften +DesktopImportControllerUI.wizard.ui.dialog.title = {0} Einstellungen +DesktopImportControllerUI.processor.ui.dialog.title = Prozessor Einstellungen + +ReportPanel.createMissingNodesCheckbox.text=Erstelle fehlende Knoten +ReportPanel.createMissingNodesCheckbox.toolTipText=Erzeuge fehlende Knoten, die als Kantenursprung oder -ziel gefunden werden +ReportPanel.moreOptionsLink.text=Weitere Optionen... +ReportPanel.selfLoopCheckBox.text=Schleife +ReportPanel.selfLoopCheckBox.toolTipText=Erlauben Schleifen, die Knoten mit sich selbst verbinden +ReportPanel.labelParallelEdgesMergeStrategy.text=Strategie zur Kanten-Verschmelzung: +ReportPanel.mergeStrategy.sum=Summe +ReportPanel.mergeStrategy.avg=Durchschnitt +ReportPanel.mergeStrategy.min=Minimum +ReportPanel.mergeStrategy.max=Maximum +# ReportPanel.mergeStrategy.first=First +# ReportPanel.mergeStrategy.last=Last +# ReportPanel.mergeStrategy.no_merge=Don't merge +ReportPanel.labelMultiGraph.text=Multi-Graph: +ReportPanel.multigraphLabel.text= +ReportPanel.labelDynamicAtts.text=Dynamische Attribute: +ReportPanel.dynamicAttsLabel.text= +ReportPanel.labelGraphCount.text=Anzahl Graphen: +ReportPanel.graphCountLabel.text= +ReportPanel.multiSourceLabel.text=Mehrere Quellen + +CTL_ImportWizard=Importieren... + +ImportWizard.wizard.title = Import-Assistent +ImportWizard.error_no_matching_importer = Kein Importer fόr diesen Assistententyp gefunden +# ImportWizard.description_no_plugin_importers_installed = No plugin importers installed + +WizardVisualPanel1.title = Wδhle Assistent +WizardVisualPanel1.labelCategory.text=Kategorie: +WizardVisualPanel1.labelWizard.text=Typ des Assistenten: +WizardVisualPanel1.labelDescription.text=Beschreibung: + +# ProcessorIssuesReportPanel.title=Issues after import process +# ProcessorIssuesReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Report +# ProcessorIssuesReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Issues +# ProcessorIssuesReportPanel.close=Close diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_es.properties b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_es.properties index d61e199e48..9356a1bc57 100644 --- a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_es.properties +++ b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_es.properties @@ -1,66 +1,73 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-31 12\:40+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Short-Description=Integrar caracter\u00edsticas de importaci\u00f3n en la interfaz de usuario - +OpenIDE-Module-Short-Description=Integrar caracterνsticas de importaciσn en la interfaz de usuario CTL_ImportDB=Importar base de datos - -ReportPanel.title=Informe de importaci\u00f3n - -ReportPanel.labelSrc.text=Fuente\: - +ReportPanel.title=Informe de importaciσn +ReportPanel.labelSrc.text=Fuente: +ReportPanel.sourceLabel.text= ReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Notificaciones - -ReportPanel.labelEdgeCount.text=\# de aristas\: - -ReportPanel.labelNodeCount.text=\# de nodos\: - -ReportPanel.labelDynamic.text=Grafo din\u00e1mico\: - -ReportPanel.dynamicLabel.text=NaN - -ReportPanel.labelGraphType.text=Tipo de grafo\: - +ReportPanel.nodeCountLabel.text= +ReportPanel.edgeCountLabel.text= +ReportPanel.labelEdgeCount.text=# de aristas: +ReportPanel.labelNodeCount.text=# de nodos: +ReportPanel.labelDynamic.text=Grafo dinαmico: +ReportPanel.dynamicLabel.text= +ReportPanel.labelGraphType.text=Tipo de grafo: ReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Informe - -ReportPanel.autoscaleCheckbox.toolTipText=Escalar el tama\u00f1o y posici\u00f3n de los nodos y peso de las aristas para llenar el espacio de forma \u00f3ptima. - +ReportPanel.autoscaleCheckbox.toolTipText=Escala el tama\u00F1o de los nodos, su posici\u00F3n y el peso de las aristas para llenar el espacio de forma optimizada ReportPanel.autoscaleCheckbox.text=Auto-escalar - -ReportPanel.noIssues=No se encontraron problemas durante la importaci\u00f3n - +ReportPanel.noIssues=No se encontraron problemas durante la importaciσn ReportPanel.yes=si - ReportPanel.no=no - -DesktopImportControllerUI.spigotSource=Spigot {0} - -DesktopImportControllerUI.streamSource=Stream {0} - -DesktopImportControllerUI.taskName=Importaci\u00f3n {0} - -DesktopImportControllerUI.database.ui.dialog.title=Configuraci\u00f3n de la base de datos - -DesktopImportControllerUI.status.importSuccess={0} importados con \u00e9xito - +ReportPanel.graphType.directed=Dirigido +ReportPanel.graphType.undirected=No dirigido +ReportPanel.graphType.mixed=Mixto +ReportPanel.issueTable.issues=Notificaciones +ReportPanel.reportCopy.text=Copiar +ReportPanel.reportCopy.description=Copiar contenido al portapapeles +DesktopImportControllerUI.wizardSource=Asistente {0} +DesktopImportControllerUI.streamSource=Flujo {0} +DesktopImportControllerUI.taskName=Importaciσn {0} +DesktopImportControllerUI.database.ui.dialog.title=Configuraciσn de la base de datos +DesktopImportControllerUI.status.importSuccess={0} importados con ιxito DesktopImportControllerUI.status.importSuccess.default=Datos - -DesktopImportControllerUI.error_no_matching_file_importer=Imposible encontrar un importador compatible.\nEl formato de archivo no est\u00e1 soportado. Comprueba la extensi\u00f3n del archivo. - -DesktopImportControllerUI.error_no_matching_stream_importer=Imposible encontrar un importador compatible.\nEl flujo no est\u00e1 soportado. - -DesktopImportControllerUI.error_no_matching_db_importer=Imposible encontrar un importador compatible.\nLa base de datos no est\u00e1 soportada. - +DesktopImportControllerUI.status.multiImportSuccess={0} fuentes importadas con ιxito +DesktopImportControllerUI.error_no_matching_file_importer=Imposible encontrar un importador compatible.\nEl formato del archivo no estα soportado. Comprueba la extensiσn del archivo. +DesktopImportControllerUI.error_no_matching_stream_importer=Imposible encontrar un importador compatible.\nEl flujo no estα soportado. +DesktopImportControllerUI.error_no_matching_db_importer=Imposible encontrar un importador compatible.\nLa base de datos no estα soportada. DesktopImportControllerUI.file.ui.dialog.title={0} preferencias - -DesktopImportControllerUI.spigot.ui.dialog.title={0} preferencias - +DesktopImportControllerUI.wizard.ui.dialog.title=Ajustes de {0} DesktopImportControllerUI.processor.ui.dialog.title=Preferencias del procesador - ReportPanel.createMissingNodesCheckbox.text=Crear nodos faltantes +ReportPanel.createMissingNodesCheckbox.toolTipText=Crear nodos faltantes encontrados como origen o destino de aristas +ReportPanel.moreOptionsLink.text=Mαs opciones... +ReportPanel.selfLoopCheckBox.text=Bucles +ReportPanel.selfLoopCheckBox.toolTipText=Permitir bucles en nodos +ReportPanel.labelParallelEdgesMergeStrategy.text=Estrategia para combinar aristas: +ReportPanel.mergeStrategy.sum=Suma +ReportPanel.mergeStrategy.avg=Promedio +ReportPanel.mergeStrategy.min=Mνnimo +ReportPanel.mergeStrategy.max=Mαximo +ReportPanel.mergeStrategy.first=Primero +ReportPanel.mergeStrategy.last=Ϊltimo +ReportPanel.mergeStrategy.no_merge=No fusionar +ReportPanel.labelMultiGraph.text=Muiti grafo: +ReportPanel.multigraphLabel.text= +ReportPanel.labelDynamicAtts.text=Attributos dinαmicos: +ReportPanel.dynamicAttsLabel.text= +ReportPanel.labelGraphCount.text=# de nodos: +ReportPanel.graphCountLabel.text= +ReportPanel.multiSourceLabel.text=Mϊltiples fuentes +CTL_ImportWizard=Importar... +ImportWizard.wizard.title=Asistente de importaciσn +ImportWizard.error_no_matching_importer=No se pudo encontrar un importador para este tipo de asistente +ImportWizard.description_no_plugin_importers_installed=Ningϊn complemento de importaciσn instalado +WizardVisualPanel1.title=Seleccionar asistente +WizardVisualPanel1.labelCategory.text=Categorνa: +WizardVisualPanel1.labelWizard.text=Tipo de asistente: +WizardVisualPanel1.labelDescription.text=Descripciσn: +ProcessorIssuesReportPanel.title=Problemas tras el proceso de importaciσn +ProcessorIssuesReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Informe +ProcessorIssuesReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Notificaciones +ProcessorIssuesReportPanel.close=Cerrar +DesktopImportControllerUI.finishingImport=Procesando {0} +DesktopImportControllerUI.multiImport.finishingImport=Procesando {0} fuentes +DesktopImportControllerUI.errorHandler.critical={0} no se ha podido importar debido al siguiente error: {1} diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_fr.properties b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_fr.properties index a922ec476e..90835bb427 100644 --- a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_fr.properties +++ b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_fr.properties @@ -1,66 +1,73 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-31 12\:54+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Int\u00e8gre les fonctionnalit\u00e9s d'import dans l'interface utilisateur - -CTL_ImportDB=Import de base de donn\u00e9es - +OpenIDE-Module-Short-Description=Intθgre les fonctionnalitιs d'import dans l'interface utilisateur +CTL_ImportDB=Import de base de donnιes ReportPanel.title=Rapport d'import - -ReportPanel.labelSrc.text=Source\: - +ReportPanel.labelSrc.text=Source: +ReportPanel.sourceLabel.text= ReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Notifications - -ReportPanel.labelEdgeCount.text=\# de liens\: - -ReportPanel.labelNodeCount.text=\# de noeuds\: - -ReportPanel.labelDynamic.text=Graphe dynamique\: - -ReportPanel.dynamicLabel.text=NaN - -ReportPanel.labelGraphType.text=Type du graphe\: - +ReportPanel.nodeCountLabel.text= +ReportPanel.edgeCountLabel.text= +ReportPanel.labelEdgeCount.text=# de liens: +ReportPanel.labelNodeCount.text=# de noeuds: +ReportPanel.labelDynamic.text=Graphe dynamique: +ReportPanel.dynamicLabel.text= +ReportPanel.labelGraphType.text=Type du graphe: ReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Rapport - -ReportPanel.autoscaleCheckbox.toolTipText=Mettre \u00e0 l'\u00e9chelle la taille et la position des noeuds, ainsi que le poids des liens pour remplir efficacement l'espace. - -ReportPanel.autoscaleCheckbox.text=\u00c9chelle auto - +ReportPanel.autoscaleCheckbox.toolTipText=Mettre ΰ l'ιchelle la taille et la position des noeuds, ainsi que le poids des liens pour remplir efficacement l'espace. +ReportPanel.autoscaleCheckbox.text=Ιchelle auto ReportPanel.noIssues=Aucune erreur durant l'import - ReportPanel.yes=oui - ReportPanel.no=non - -DesktopImportControllerUI.spigotSource=Tuyaux {0} - +ReportPanel.graphType.directed=Dirigι +ReportPanel.graphType.undirected=Non dirigι +ReportPanel.graphType.mixed=Mιlangιe +ReportPanel.issueTable.issues=Notifications +ReportPanel.reportCopy.text=Copier +ReportPanel.reportCopy.description=Copier le contenu vers le presse-papier +DesktopImportControllerUI.wizardSource=Assistant {0} DesktopImportControllerUI.streamSource=Flux {0} - DesktopImportControllerUI.taskName=Import {0} - -DesktopImportControllerUI.database.ui.dialog.title=Param\u00e8tres de base de donn\u00e9es - -DesktopImportControllerUI.status.importSuccess={0} import\u00e9 avec succ\u00e8s - -DesktopImportControllerUI.status.importSuccess.default=Donn\u00e9es - -DesktopImportControllerUI.error_no_matching_file_importer=Impossible de trouver un importeur compatible.\nLe format de fichier n'est pas support\u00e9. Veuillez v\u00e9rifier son extension. - -DesktopImportControllerUI.error_no_matching_stream_importer=Impossible de trouver un importeur compatible.\nLe flux n'est pas support\u00e9. - -DesktopImportControllerUI.error_no_matching_db_importer=Impossible de trouver un importeur compatible.\nLa base de donn\u00e9es n'est pas support\u00e9e. - -DesktopImportControllerUI.file.ui.dialog.title=Param\u00e8tres {0} - -DesktopImportControllerUI.spigot.ui.dialog.title=Param\u00e8tres {0} - -DesktopImportControllerUI.processor.ui.dialog.title=Param\u00e8tres du processeur - -ReportPanel.createMissingNodesCheckbox.text=Cr\u00e9er les noeuds manquants +DesktopImportControllerUI.database.ui.dialog.title=Paramθtres de base de donnιes +DesktopImportControllerUI.status.importSuccess={0} importι avec succθs +DesktopImportControllerUI.status.importSuccess.default=Donnιes +DesktopImportControllerUI.status.multiImportSuccess={0} sources importι avec succθs +DesktopImportControllerUI.error_no_matching_file_importer=Impossible de trouver un importeur compatible.\nLe format de fichier n'est pas supportι. Veuillez vιrifier son extension. +DesktopImportControllerUI.error_no_matching_stream_importer=Impossible de trouver un importeur compatible.\nLe flux n'est pas supportι. +DesktopImportControllerUI.error_no_matching_db_importer=Impossible de trouver un importeur compatible.\nLa base de donnιes n'est pas supportιe. +DesktopImportControllerUI.file.ui.dialog.title=Paramθtres {0} +DesktopImportControllerUI.wizard.ui.dialog.title={0} paramθtres +DesktopImportControllerUI.processor.ui.dialog.title=Paramθtres du processeur +ReportPanel.createMissingNodesCheckbox.text=Crιer les noeuds manquants +ReportPanel.createMissingNodesCheckbox.toolTipText=Crιer les noeuds manquants comme source ou destination des liens +ReportPanel.moreOptionsLink.text=Plus d'options... +ReportPanel.selfLoopCheckBox.text=Boucle +ReportPanel.selfLoopCheckBox.toolTipText=Autoriser les boucles sur les noeuds +ReportPanel.labelParallelEdgesMergeStrategy.text=Stratιgies de fusion des liens possibles : +ReportPanel.mergeStrategy.sum=Somme +ReportPanel.mergeStrategy.avg=Moyenne +ReportPanel.mergeStrategy.min=Minimum +ReportPanel.mergeStrategy.max=Maximum +ReportPanel.mergeStrategy.first=Premier +ReportPanel.mergeStrategy.last=Dernier +ReportPanel.mergeStrategy.no_merge=Ne pas fusionner +ReportPanel.labelMultiGraph.text=Multi-Graphe: +ReportPanel.multigraphLabel.text= +ReportPanel.labelDynamicAtts.text=Attributs dynamiques: +ReportPanel.dynamicAttsLabel.text= +ReportPanel.labelGraphCount.text=# de noeuds: +ReportPanel.graphCountLabel.text= +ReportPanel.multiSourceLabel.text=Sources multiples +CTL_ImportWizard=Importer... +ImportWizard.wizard.title=Connecteur d'import +ImportWizard.error_no_matching_importer=Aucun import n'a pu κtre trouvι pour ce type de connecteur. +ImportWizard.description_no_plugin_importers_installed=Aucun plugin d'importeur installι +WizardVisualPanel1.title=Sιlectionner le connecteur +WizardVisualPanel1.labelCategory.text=Catιgorie : +WizardVisualPanel1.labelWizard.text=Type de connecteur : +WizardVisualPanel1.labelDescription.text=Description : +ProcessorIssuesReportPanel.title=Problθmes aprθs import +ProcessorIssuesReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Rapport +ProcessorIssuesReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Problθmes : +ProcessorIssuesReportPanel.close=Fermer +DesktopImportControllerUI.finishingImport=Traitement {0} +DesktopImportControllerUI.multiImport.finishingImport=Traitement de {0} sources +DesktopImportControllerUI.errorHandler.critical=L'importation de {0} a \u00E9chou\u00E9 \u00E0 cause de l'erreur suivante : {1} diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_he.properties b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_he.properties new file mode 100644 index 0000000000..4a83588412 --- /dev/null +++ b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_he.properties @@ -0,0 +1,70 @@ +OpenIDE-Module-Short-Description=Integrate import features in UI +CTL_ImportDB=Import Database +ReportPanel.title=Import report +ReportPanel.labelSrc.text=Source: +ReportPanel.sourceLabel.text= +ReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Issues +ReportPanel.nodeCountLabel.text= +ReportPanel.edgeCountLabel.text= +ReportPanel.labelEdgeCount.text=# of Edges: +ReportPanel.labelNodeCount.text=# of Nodes: +ReportPanel.labelDynamic.text=Dynamic Graph: +ReportPanel.dynamicLabel.text= +ReportPanel.labelGraphType.text=Graph Type: +ReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Report +ReportPanel.autoscaleCheckbox.toolTipText=Scale node size, node position and edge weight to fill the space in an optimized way +ReportPanel.autoscaleCheckbox.text=Auto-scale +ReportPanel.noIssues=No issue found during import +ReportPanel.yes=yes +ReportPanel.no=no +ReportPanel.graphType.directed=Directed +ReportPanel.graphType.undirected=Undirected +ReportPanel.graphType.mixed=Mixed +ReportPanel.issueTable.issues=Issues +ReportPanel.reportCopy.text=Copy +ReportPanel.reportCopy.description=Copy content to clipboard +DesktopImportControllerUI.wizardSource=Wizard {0} +DesktopImportControllerUI.streamSource=Stream {0} +DesktopImportControllerUI.taskName=Import {0} +DesktopImportControllerUI.database.ui.dialog.title=Database settings +DesktopImportControllerUI.status.importSuccess={0} successfully imported +DesktopImportControllerUI.status.importSuccess.default=Data +DesktopImportControllerUI.status.multiImportSuccess={0} sources successfully imported +DesktopImportControllerUI.error_no_matching_file_importer=Impossible to find a compatible Importer.\nThe file format is not supported. Check file's extension. +DesktopImportControllerUI.error_no_matching_stream_importer=Impossible to find a compatible Importer.\nThe stream is not supported. +DesktopImportControllerUI.error_no_matching_db_importer=Impossible to find a compatible Importer.\nThe database is not supported. +DesktopImportControllerUI.file.ui.dialog.title={0} settings +DesktopImportControllerUI.wizard.ui.dialog.title={0} settings +DesktopImportControllerUI.processor.ui.dialog.title=Processor settings +ReportPanel.createMissingNodesCheckbox.text=Create missing nodes +ReportPanel.createMissingNodesCheckbox.toolTipText=Create missing nodes found as edges' source or target +ReportPanel.moreOptionsLink.text=More options... +ReportPanel.selfLoopCheckBox.text=Self-loops +ReportPanel.selfLoopCheckBox.toolTipText=Allow self-loops on nodes +ReportPanel.labelParallelEdgesMergeStrategy.text=Edges merge strategy: +ReportPanel.mergeStrategy.sum=Sum +ReportPanel.mergeStrategy.avg=Average +ReportPanel.mergeStrategy.min=Minimum +ReportPanel.mergeStrategy.max=Maximum +ReportPanel.mergeStrategy.first=First +ReportPanel.mergeStrategy.last=Last +ReportPanel.mergeStrategy.no_merge=Don't merge +ReportPanel.labelMultiGraph.text=Multi Graph: +ReportPanel.multigraphLabel.text= +ReportPanel.labelDynamicAtts.text=Dynamic Attributes: +ReportPanel.dynamicAttsLabel.text= +ReportPanel.labelGraphCount.text=# of Graphs: +ReportPanel.graphCountLabel.text= +ReportPanel.multiSourceLabel.text=Multiple sources +CTL_ImportWizard=Import... +ImportWizard.wizard.title=Import Wizard +ImportWizard.error_no_matching_importer=No importer can be found for this type of Wizard +ImportWizard.description_no_plugin_importers_installed=No plugin importers installed +WizardVisualPanel1.title=Select Wizard +WizardVisualPanel1.labelCategory.text=Category: +WizardVisualPanel1.labelWizard.text=Wizard Type: +WizardVisualPanel1.labelDescription.text=Description: +ProcessorIssuesReportPanel.title=Issues after import process +ProcessorIssuesReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Report +ProcessorIssuesReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Issues +ProcessorIssuesReportPanel.close=Close diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_hu.properties b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_hu.properties new file mode 100644 index 0000000000..b66033c538 --- /dev/null +++ b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_hu.properties @@ -0,0 +1,68 @@ + + +ReportPanel.mergeStrategy.avg=\u00C1tlagos +DesktopImportControllerUI.multiImport.finishingImport={0} forr\u00E1s feldolgoz\u00E1sa +ProcessorIssuesReportPanel.close=Bez\u00E1r +ImportWizard.description_no_plugin_importers_installed=Nincs telep\u00EDtve plugin import\u0151r +ReportPanel.noIssues=Nem tal\u00E1ltunk hib\u00E1t az import\u00E1l\u00E1s sor\u00E1n +ReportPanel.mergeStrategy.last=Utols\u00F3 +ReportPanel.autoscaleCheckbox.text=Automatikus m\u00E9retez\u00E9s +DesktopImportControllerUI.error_no_matching_file_importer=Nem lehet kompatibilis import\u0151rt tal\u00E1lni.\nA f\u00E1jlform\u00E1tum nem t\u00E1mogatott. Ellen\u0151rizze a f\u00E1jl kiterjeszt\u00E9s\u00E9t. +DesktopImportControllerUI.status.importSuccess={0} sikeresen import\u00E1lva +DesktopImportControllerUI.processor.ui.dialog.title=Processzor be\u00E1ll\u00EDt\u00E1sok +DesktopImportControllerUI.database.ui.dialog.title=Adatb\u00E1zis be\u00E1ll\u00EDt\u00E1sok +ReportPanel.selfLoopCheckBox.toolTipText=\u00D6nhurkok enged\u00E9lyez\u00E9se a csom\u00F3pontokon +DesktopImportControllerUI.status.multiImportSuccess={0} forr\u00E1s sikeresen import\u00E1lva +ReportPanel.multiSourceLabel.text=T\u00F6bb forr\u00E1s +ReportPanel.labelNodeCount.text=# csom\u00F3pontok sz\u00E1ma: +DesktopImportControllerUI.wizard.ui.dialog.title={0} be\u00E1ll\u00EDt\u00E1sai +ImportWizard.error_no_matching_importer=Az ilyen t\u00EDpus\u00FA var\u00E1zsl\u00F3hoz nem tal\u00E1lhat\u00F3 import\u0151r +DesktopImportControllerUI.taskName={0} import\u00E1l\u00E1sa +DesktopImportControllerUI.error_no_matching_stream_importer=Nem lehet kompatibilis import\u0151rt tal\u00E1lni.\nAz adatfolyam nem t\u00E1mogatott. +ReportPanel.labelSrc.text=Forr\u00E1s: +ReportPanel.labelMultiGraph.text=T\u00F6bb grafikon: +ReportPanel.title=Import jelent\u00E9s +ReportPanel.mergeStrategy.no_merge=Ne egyes\u00FClj\u00F6n +ReportPanel.labelDynamic.text=Dinamikus grafikon: +ReportPanel.labelEdgeCount.text=# \u00E9lek sz\u00E1ma: +DesktopImportControllerUI.wizardSource=Var\u00E1zsl\u00F3 {0} +ReportPanel.createMissingNodesCheckbox.toolTipText=Hozzon l\u00E9tre hi\u00E1nyz\u00F3 csom\u00F3pontokat az \u00E9lek forr\u00E1sak\u00E9nt vagy c\u00E9lk\u00E9nt +ReportPanel.reportCopy.text=M\u00E1sol\u00E1s +ReportPanel.moreOptionsLink.text=T\u00F6bb lehet\u0151s\u00E9g... +ReportPanel.mergeStrategy.max=Maxim\u00E1lis +ReportPanel.reportCopy.description=Tartalom m\u00E1sol\u00E1sa a v\u00E1g\u00F3lapra +ReportPanel.mergeStrategy.sum=\u00D6sszeg +CTL_ImportWizard=Import\u00E1l\u00E1s... +ReportPanel.mergeStrategy.min=Minimum +WizardVisualPanel1.labelWizard.text=Var\u00E1zsl\u00F3 t\u00EDpusa: +ProcessorIssuesReportPanel.title=Az import\u00E1l\u00E1si folyamat ut\u00E1ni probl\u00E9m\u00E1k +ReportPanel.no=nem +ReportPanel.issueTable.issues=Probl\u00E9m\u00E1k +DesktopImportControllerUI.status.importSuccess.default=Adatok +ReportPanel.autoscaleCheckbox.toolTipText=M\u00E9retezze a csom\u00F3pont m\u00E9ret\u00E9t, poz\u00EDci\u00F3j\u00E1t \u00E9s \u00E9ls\u00FAly\u00E1t, hogy optimaliz\u00E1lt m\u00F3don t\u00F6ltse ki a helyet +ReportPanel.selfLoopCheckBox.text=\u00D6nhurkok +ReportPanel.createMissingNodesCheckbox.text=Hozzon l\u00E9tre hi\u00E1nyz\u00F3 csom\u00F3pontokat +ReportPanel.mergeStrategy.first=Els\u0151 +ProcessorIssuesReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Probl\u00E9m\u00E1k +DesktopImportControllerUI.file.ui.dialog.title={0} be\u00E1ll\u00EDt\u00E1sai +ReportPanel.graphType.mixed=Vegyes +CTL_ImportDB=Import adatb\u00E1zis +WizardVisualPanel1.labelCategory.text=Kateg\u00F3ria: +ProcessorIssuesReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Jelent\u00E9s +OpenIDE-Module-Short-Description=Integr\u00E1lja az import\u00E1l\u00E1si funkci\u00F3kat a felhaszn\u00E1l\u00F3i fel\u00FCleten +DesktopImportControllerUI.errorHandler.critical=A(z) {0} import\u00E1l\u00E1sa nem siker\u00FClt a k\u00F6vetkez\u0151 hiba miatt: {1} +WizardVisualPanel1.labelDescription.text=Le\u00EDr\u00E1s: +ReportPanel.graphType.directed=Ir\u00E1ny\u00EDtott +ReportPanel.yes=igen +ReportPanel.labelGraphCount.text=Grafikonok sz\u00E1ma: +ReportPanel.graphType.undirected=Ir\u00E1ny\u00EDtatlan +ReportPanel.labelDynamicAtts.text=Dinamikus tulajdons\u00E1gok: +DesktopImportControllerUI.error_no_matching_db_importer=Nem lehet kompatibilis import\u0151rt tal\u00E1lni.\nAz adatb\u00E1zis nem t\u00E1mogatott. +DesktopImportControllerUI.streamSource={0} adatfolyam +ReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Jelent\u00E9s +DesktopImportControllerUI.finishingImport={0} feldolgoz\u00E1sa +ReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Probl\u00E9m\u00E1k +WizardVisualPanel1.title=V\u00E1lassza a Var\u00E1zsl\u00F3 lehet\u0151s\u00E9get +ImportWizard.wizard.title=Import var\u00E1zsl\u00F3 +ReportPanel.labelParallelEdgesMergeStrategy.text=\u00C9lek egyes\u00EDt\u00E9si strat\u00E9gi\u00E1ja: +ReportPanel.labelGraphType.text=Grafikon t\u00EDpusa: diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_it.properties b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_it.properties new file mode 100644 index 0000000000..833fd3ed78 --- /dev/null +++ b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_it.properties @@ -0,0 +1,70 @@ +OpenIDE-Module-Short-Description=Integrate import features in UI +CTL_ImportDB=Import Database +ReportPanel.title=Import report +ReportPanel.labelSrc.text=Source: +ReportPanel.sourceLabel.text= +ReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Issues +ReportPanel.nodeCountLabel.text= +ReportPanel.edgeCountLabel.text= +ReportPanel.labelEdgeCount.text=# of Edges: +ReportPanel.labelNodeCount.text=# of Nodes: +ReportPanel.labelDynamic.text=Dynamic Graph: +ReportPanel.dynamicLabel.text= +ReportPanel.labelGraphType.text=Graph Type: +ReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Report +ReportPanel.autoscaleCheckbox.toolTipText=Scale node size, node position and edge weight to fill the space in an optimized way +ReportPanel.autoscaleCheckbox.text=Auto-scale +ReportPanel.noIssues=No issue found during import +ReportPanel.yes=yes +ReportPanel.no=no +ReportPanel.graphType.directed=Orientato +ReportPanel.graphType.undirected=Non orientato +ReportPanel.graphType.mixed=Mixed +ReportPanel.issueTable.issues=Issues +ReportPanel.reportCopy.text=Copy +ReportPanel.reportCopy.description=Copy content to clipboard +DesktopImportControllerUI.wizardSource=Wizard {0} +DesktopImportControllerUI.streamSource=Stream {0} +DesktopImportControllerUI.taskName=Import {0} +DesktopImportControllerUI.database.ui.dialog.title=Database settings +DesktopImportControllerUI.status.importSuccess={0} successfully imported +DesktopImportControllerUI.status.importSuccess.default=Data +DesktopImportControllerUI.status.multiImportSuccess={0} sources successfully imported +DesktopImportControllerUI.error_no_matching_file_importer=Impossible to find a compatible Importer.\nThe file format is not supported. Check file's extension. +DesktopImportControllerUI.error_no_matching_stream_importer=Impossible to find a compatible Importer.\nThe stream is not supported. +DesktopImportControllerUI.error_no_matching_db_importer=Impossible to find a compatible Importer.\nThe database is not supported. +DesktopImportControllerUI.file.ui.dialog.title={0} impostazioni +DesktopImportControllerUI.wizard.ui.dialog.title={0} impostazioni +DesktopImportControllerUI.processor.ui.dialog.title=Processor settings +ReportPanel.createMissingNodesCheckbox.text=Create missing nodes +ReportPanel.createMissingNodesCheckbox.toolTipText=Create missing nodes found as edges' source or target +ReportPanel.moreOptionsLink.text=More options... +ReportPanel.selfLoopCheckBox.text=Self-loops +ReportPanel.selfLoopCheckBox.toolTipText=Allow self-loops on nodes +ReportPanel.labelParallelEdgesMergeStrategy.text=Edges merge strategy: +ReportPanel.mergeStrategy.sum=Sum +ReportPanel.mergeStrategy.avg=Average +ReportPanel.mergeStrategy.min=Minimo +ReportPanel.mergeStrategy.max=Maximum +ReportPanel.mergeStrategy.first=First +ReportPanel.mergeStrategy.last=Last +ReportPanel.mergeStrategy.no_merge=Don't merge +ReportPanel.labelMultiGraph.text=Multi Graph: +ReportPanel.multigraphLabel.text= +ReportPanel.labelDynamicAtts.text=Dynamic Attributes: +ReportPanel.dynamicAttsLabel.text= +ReportPanel.labelGraphCount.text=# of Graphs: +ReportPanel.graphCountLabel.text= +ReportPanel.multiSourceLabel.text=Multiple sources +CTL_ImportWizard=Import... +ImportWizard.wizard.title=Import Wizard +ImportWizard.error_no_matching_importer=No importer can be found for this type of Wizard +ImportWizard.description_no_plugin_importers_installed=No plugin importers installed +WizardVisualPanel1.title=Select Wizard +WizardVisualPanel1.labelCategory.text=Category: +WizardVisualPanel1.labelWizard.text=Wizard Type: +WizardVisualPanel1.labelDescription.text=Description: +ProcessorIssuesReportPanel.title=Issues after import process +ProcessorIssuesReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Report +ProcessorIssuesReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Issues +ProcessorIssuesReportPanel.close=Close diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_ja.properties b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_ja.properties index 197813eb05..ae1231a72e 100644 --- a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_ja.properties +++ b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_ja.properties @@ -1,65 +1,81 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-03 03\:06+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=UI\u306e\u30a4\u30f3\u30dd\u30fc\u30c8\u6a5f\u80fd\u3092\u7d71\u5408 - -CTL_ImportDB=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u30a4\u30f3\u30dd\u30fc\u30c8 - -ReportPanel.title=\u5831\u544a\u3092\u30a4\u30f3\u30dd\u30fc\u30c8 - -ReportPanel.labelSrc.text=\u30bd\u30fc\u30b9\: - -ReportPanel.tab1ScrollPane.TabConstraints.tabTitle=\u554f\u984c\u70b9 - -ReportPanel.labelEdgeCount.text=\u8fba\u306e\u6570\: - -ReportPanel.labelNodeCount.text=\u30ce\u30fc\u30c9\u6570\: - -ReportPanel.labelDynamic.text=\u30c0\u30a4\u30ca\u30df\u30c3\u30af\u30b0\u30e9\u30d5\: - -ReportPanel.dynamicLabel.text=NaN - -ReportPanel.labelGraphType.text=\u30b0\u30e9\u30d5\u306e\u7a2e\u985e\: - -ReportPanel.tab2ScrollPane.TabConstraints.tabTitle=\u5831\u544a - -ReportPanel.autoscaleCheckbox.toolTipText=\u6700\u9069\u306a\u65b9\u6cd5\u3067\u7a7a\u767d\u3092\u57cb\u3081\u308b\u305f\u3081\u306b\u898f\u6a21\u306e\u30ce\u30fc\u30c9\u306e\u30b5\u30a4\u30ba\u3001\u30ce\u30fc\u30c9\u306e\u4f4d\u7f6e\u3068\u8fba\u306e\u91cd\u307f\u3092\u898b\u7a4d\u3082\u308b - -ReportPanel.autoscaleCheckbox.text=\u81ea\u52d5\u30b9\u30b1\u30fc\u30eb - -ReportPanel.noIssues=\u30a4\u30f3\u30dd\u30fc\u30c8\u4e2d\u306b\u554f\u984c\u70b9\u306f\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f - -ReportPanel.yes=\u306f\u3044 - -ReportPanel.no=\u3044\u3044\u3048 - -DesktopImportControllerUI.spigotSource=\u30b9\u30d4\u30b4\u30c3\u30c8{0} - -DesktopImportControllerUI.streamSource=\u30b9\u30c8\u30ea\u30fc\u30e0{0} - -DesktopImportControllerUI.taskName=\u30a4\u30f3\u30dd\u30fc\u30c8{0} - -DesktopImportControllerUI.database.ui.dialog.title=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u5b9a - -DesktopImportControllerUI.status.importSuccess={0} \u30a4\u30f3\u30dd\u30fc\u30c8\u6210\u529f - -DesktopImportControllerUI.status.importSuccess.default=\u30c7\u30fc\u30bf - -DesktopImportControllerUI.error_no_matching_file_importer=\u4e92\u63db\u6027\u306e\u3042\u308b\u30a4\u30f3\u30dd\u30fc\u30bf\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002\u305d\u306e\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30d5\u30a1\u30a4\u30eb\u306e\u62e1\u5f35\u5b50\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 - -DesktopImportControllerUI.error_no_matching_stream_importer=\u4e92\u63db\u6027\u306e\u3042\u308b\u30a4\u30f3\u30dd\u30fc\u30bf\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002\u305d\u306e\u30b9\u30c8\u30ea\u30fc\u30e0\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 - -DesktopImportControllerUI.error_no_matching_db_importer=\u4e92\u63db\u6027\u306e\u3042\u308b\u30a4\u30f3\u30dd\u30fc\u30bf\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002\u305d\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 - -DesktopImportControllerUI.file.ui.dialog.title={0} \u8a2d\u5b9a - -DesktopImportControllerUI.spigot.ui.dialog.title={0} \u8a2d\u5b9a - -DesktopImportControllerUI.processor.ui.dialog.title=\u30d7\u30ed\u30bb\u30c3\u30b5\u8a2d\u5b9a - -ReportPanel.createMissingNodesCheckbox.text=\u6b20\u843d\u30ce\u30fc\u30c9\u3092\u751f\u6210 +OpenIDE-Module-Short-Description=UI\u306e\u30a4\u30f3\u30dd\u30fc\u30c8\u6a5f\u80fd\u3092\u7d71\u5408 + +CTL_ImportDB = \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3092\u30a4\u30f3\u30dd\u30fc\u30c8 + +ReportPanel.title = \u5831\u544a\u3092\u30a4\u30f3\u30dd\u30fc\u30c8 +ReportPanel.labelSrc.text=\u30bd\u30fc\u30b9: +ReportPanel.sourceLabel.text= +ReportPanel.tab1ScrollPane.TabConstraints.tabTitle=\u554f\u984c\u70b9 +ReportPanel.nodeCountLabel.text= +ReportPanel.edgeCountLabel.text= +ReportPanel.labelEdgeCount.text=\u8fba\u306e\u6570: +ReportPanel.labelNodeCount.text=\u30ce\u30fc\u30c9\u6570: +ReportPanel.labelDynamic.text=\u30c0\u30a4\u30ca\u30df\u30c3\u30af\u30b0\u30e9\u30d5: +ReportPanel.dynamicLabel.text= +ReportPanel.labelGraphType.text=\u30b0\u30e9\u30d5\u306e\u7a2e\u985e: +ReportPanel.tab2ScrollPane.TabConstraints.tabTitle=\u5831\u544a +ReportPanel.autoscaleCheckbox.toolTipText=\u6700\u9069\u306a\u65b9\u6cd5\u3067\u7a7a\u767d\u3092\u57cb\u3081\u308b\u305f\u3081\u306b\u898f\u6a21\u306e\u30ce\u30fc\u30c9\u306e\u30b5\u30a4\u30ba\u3001\u30ce\u30fc\u30c9\u306e\u4f4d\u7f6e\u3068\u8fba\u306e\u91cd\u307f\u3092\u898b\u7a4d\u3082\u308b +ReportPanel.autoscaleCheckbox.text=\u81ea\u52d5\u30b9\u30b1\u30fc\u30eb +ReportPanel.noIssues=\u30a4\u30f3\u30dd\u30fc\u30c8\u4e2d\u306b\u554f\u984c\u70b9\u306f\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f +ReportPanel.yes=\u306f\u3044 +ReportPanel.no=\u3044\u3044\u3048 +ReportPanel.graphType.directed=\u6709\u5411 +ReportPanel.graphType.undirected=\u7121\u5411 +# ReportPanel.graphType.mixed=Mixed +ReportPanel.issueTable.issues=\u554f\u984c\u70b9 +# ReportPanel.reportCopy.text=Copy +# ReportPanel.reportCopy.description=Copy content to clipboard + +# DesktopImportControllerUI.wizardSource = Wizard {0} +DesktopImportControllerUI.streamSource = \u30b9\u30c8\u30ea\u30fc\u30e0{0} +DesktopImportControllerUI.taskName = \u30a4\u30f3\u30dd\u30fc\u30c8{0} + +DesktopImportControllerUI.database.ui.dialog.title = \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u8a2d\u5b9a +DesktopImportControllerUI.status.importSuccess = {0} \u30a4\u30f3\u30dd\u30fc\u30c8\u6210\u529f +DesktopImportControllerUI.status.importSuccess.default = \u30c7\u30fc\u30bf +# DesktopImportControllerUI.status.multiImportSuccess = {0} sources successfully imported + +# DesktopImportControllerUI.error_no_matching_file_importer = Impossible to find a compatible Importer.\nThe file format is not supported. Check file's extension. +# DesktopImportControllerUI.error_no_matching_stream_importer = Impossible to find a compatible Importer.\nThe stream is not supported. +# DesktopImportControllerUI.error_no_matching_db_importer = Impossible to find a compatible Importer.\nThe database is not supported. + +DesktopImportControllerUI.file.ui.dialog.title = {0} \u8a2d\u5b9a +# DesktopImportControllerUI.wizard.ui.dialog.title = {0} settings +DesktopImportControllerUI.processor.ui.dialog.title = \u30d7\u30ed\u30bb\u30c3\u30b5\u8a2d\u5b9a + +ReportPanel.createMissingNodesCheckbox.text=\u6b20\u843d\u30ce\u30fc\u30c9\u3092\u751f\u6210 +# ReportPanel.createMissingNodesCheckbox.toolTipText=Create missing nodes found as edges' source or target +# ReportPanel.moreOptionsLink.text=More options... +# ReportPanel.selfLoopCheckBox.text=Self-loops +# ReportPanel.selfLoopCheckBox.toolTipText=Allow self-loops on nodes +# ReportPanel.labelParallelEdgesMergeStrategy.text=Edges merge strategy: +# ReportPanel.mergeStrategy.sum=Sum +# ReportPanel.mergeStrategy.avg=Average +# ReportPanel.mergeStrategy.min=Minimum +# ReportPanel.mergeStrategy.max=Maximum +# ReportPanel.mergeStrategy.first=First +# ReportPanel.mergeStrategy.last=Last +# ReportPanel.mergeStrategy.no_merge=Don't merge +# ReportPanel.labelMultiGraph.text=Multi Graph: +ReportPanel.multigraphLabel.text= +# ReportPanel.labelDynamicAtts.text=Dynamic Attributes: +ReportPanel.dynamicAttsLabel.text= +ReportPanel.labelGraphCount.text=\u30ce\u30fc\u30c9\u6570: +ReportPanel.graphCountLabel.text= +# ReportPanel.multiSourceLabel.text=Multiple sources + +# CTL_ImportWizard=Import... + +# ImportWizard.wizard.title = Import Wizard +# ImportWizard.error_no_matching_importer = No importer can be found for this type of Wizard +# ImportWizard.description_no_plugin_importers_installed = No plugin importers installed + +# WizardVisualPanel1.title = Select Wizard +# WizardVisualPanel1.labelCategory.text=Category: +# WizardVisualPanel1.labelWizard.text=Wizard Type: +# WizardVisualPanel1.labelDescription.text=Description: + +# ProcessorIssuesReportPanel.title=Issues after import process +# ProcessorIssuesReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Report +# ProcessorIssuesReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Issues +# ProcessorIssuesReportPanel.close=Close diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_ko.properties b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_ko.properties new file mode 100644 index 0000000000..5b3bd48610 --- /dev/null +++ b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_ko.properties @@ -0,0 +1,68 @@ + + +ReportPanel.mergeStrategy.avg=\uD3C9\uADE0 +DesktopImportControllerUI.multiImport.finishingImport={0} \uC18C\uC2A4 \uCC98\uB9AC \uC911 +ProcessorIssuesReportPanel.close=\uB2EB\uAE30 +ImportWizard.description_no_plugin_importers_installed=\uD50C\uB7EC\uADF8\uC778 \uBD88\uB7EC\uC624\uAE30 \uB3C4\uAD6C\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4 +ReportPanel.noIssues=\uBD88\uB7EC\uC624\uAE30 \uD558\uB294 \uB3D9\uC548 \uBB38\uC81C\uAC00 \uBC1C\uACAC\uB418\uC9C0 \uC54A\uC558\uC2B5\uB2C8\uB2E4 +ReportPanel.mergeStrategy.last=\uB9C8\uC9C0\uB9C9 +ReportPanel.autoscaleCheckbox.text=\uC790\uB3D9 \uD06C\uAE30 \uC870\uC815 +DesktopImportControllerUI.error_no_matching_file_importer=\uD638\uD658 \uAC00\uB2A5\uD55C \uBD88\uB7EC\uC624\uAE30 \uB3C4\uAD6C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\n\uD30C\uC77C \uD3EC\uB9F7\uC774 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uD30C\uC77C \uD655\uC7A5\uC790\uB97C \uD655\uC778\uD574 \uC8FC\uC138\uC694. +DesktopImportControllerUI.status.importSuccess={0} \uBD88\uB7EC\uC624\uAE30\uAC00 \uC131\uACF5\uD588\uC2B5\uB2C8\uB2E4 +DesktopImportControllerUI.processor.ui.dialog.title=\uD504\uB85C\uC138\uC11C \uC124\uC815 +DesktopImportControllerUI.database.ui.dialog.title=\uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uC124\uC815 +ReportPanel.selfLoopCheckBox.toolTipText=\uB178\uB4DC\uC5D0 \uC790\uAE30 \uC21C\uD658 \uD5C8\uC6A9 +DesktopImportControllerUI.status.multiImportSuccess={0} \uC18C\uC2A4 \uBD88\uB7EC\uC624\uAE30\uAC00 \uC131\uACF5\uD588\uC2B5\uB2C8\uB2E4 +ReportPanel.multiSourceLabel.text=\uB2E4\uC911 \uC18C\uC2A4 +ReportPanel.labelNodeCount.text=\uB178\uB4DC \uC218: +DesktopImportControllerUI.wizard.ui.dialog.title={0} \uC124\uC815 +ImportWizard.error_no_matching_importer=\uD574\uB2F9 \uC720\uD615\uC758 \uB9C8\uBC95\uC0AC\uC5D0 \uB300\uD55C \uBD88\uB7EC\uC624\uAE30 \uB3C4\uAD6C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 +DesktopImportControllerUI.taskName={0} \uBD88\uB7EC\uC624\uAE30 +DesktopImportControllerUI.error_no_matching_stream_importer=\uD638\uD658 \uAC00\uB2A5\uD55C \uBD88\uB7EC\uC624\uAE30 \uB3C4\uAD6C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\n\uD574\uB2F9 \uC2A4\uD2B8\uB9BC\uC740 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. +ReportPanel.labelSrc.text=\uC18C\uC2A4: +ReportPanel.labelMultiGraph.text=\uB2E4\uC911 \uADF8\uB798\uD504: +ReportPanel.title=\uBCF4\uACE0\uC11C \uAC00\uC838\uC624\uAE30 +ReportPanel.mergeStrategy.no_merge=\uBCD1\uD569 \uAE08\uC9C0 +ReportPanel.labelDynamic.text=\uB3D9\uC801 \uADF8\uB798\uD504: +ReportPanel.labelEdgeCount.text=\uC5E3\uC9C0 \uC218: +DesktopImportControllerUI.wizardSource={0} \uB9C8\uBC95\uC0AC +ReportPanel.createMissingNodesCheckbox.toolTipText=\uC5E3\uC9C0\uB4E4\uC758 \uC18C\uC2A4\uB098 \uD0C0\uAC9F\uC73C\uB85C \uBC1C\uACAC\uB41C \uB204\uB77D \uB178\uB4DC\uB97C \uC0DD\uC131 +ReportPanel.reportCopy.text=\uBCF5\uC0AC +ReportPanel.moreOptionsLink.text=\uCD94\uAC00 \uC635\uC158... +ReportPanel.mergeStrategy.max=\uCD5C\uB300\uD55C +ReportPanel.reportCopy.description=\uB0B4\uC6A9\uC744 \uD074\uB9BD\uBCF4\uB4DC\uC5D0 \uBCF5\uC0AC +ReportPanel.mergeStrategy.sum=\uD569 +CTL_ImportWizard=\uBD88\uB7EC\uC624\uAE30... +ReportPanel.mergeStrategy.min=\uCD5C\uC18C\uD55C +WizardVisualPanel1.labelWizard.text=\uB9C8\uBC95\uC0AC \uC720\uD615: +ProcessorIssuesReportPanel.title=\uBD88\uB7EC\uC624\uAE30 \uACFC\uC815 \uC774\uD6C4 \uBB38\uC81C\uC810 +ReportPanel.no=\uC544\uB2C8\uC624 +ReportPanel.issueTable.issues=\uBB38\uC81C\uC810 +DesktopImportControllerUI.status.importSuccess.default=\uB370\uC774\uD130 +ReportPanel.autoscaleCheckbox.toolTipText=\uCD5C\uC801\uD654\uB41C \uBC29\uC2DD\uC73C\uB85C \uACF5\uAC04\uC744 \uCC44\uC6B0\uAE30 \uC704\uD574 \uB178\uB4DC \uD06C\uAE30, \uB178\uB4DC \uC704\uCE58 \uBC0F \uC5E3\uC9C0 \uAC00\uC911\uCE58\uB97C \uC870\uC815\uD558\uC2ED\uC2DC\uC624 +ReportPanel.selfLoopCheckBox.text=\uC790\uAE30 \uC21C\uD658 +ReportPanel.createMissingNodesCheckbox.text=\uB204\uB77D\uB41C \uB178\uB4DC \uC0DD\uC131 +ReportPanel.mergeStrategy.first=\uCC98\uC74C +ProcessorIssuesReportPanel.tab1ScrollPane.TabConstraints.tabTitle=\uBB38\uC81C\uC810 +DesktopImportControllerUI.file.ui.dialog.title={0} \uC124\uC815 +ReportPanel.graphType.mixed=\uD63C\uD569\uD615 +CTL_ImportDB=\uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uAC00\uC838\uC624\uAE30 +WizardVisualPanel1.labelCategory.text=\uBC94\uC8FC: +ProcessorIssuesReportPanel.tab2ScrollPane.TabConstraints.tabTitle=\uBCF4\uACE0\uC11C +OpenIDE-Module-Short-Description=UI\uC5D0 \uAC00\uC838\uC624\uAE30 \uAE30\uB2A5 \uD1B5\uD569 +DesktopImportControllerUI.errorHandler.critical=\uB2E4\uC74C \uC624\uB958 \uB54C\uBB38\uC5D0 {0} \uBD88\uB7EC\uC624\uAE30\uAC00 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4: {1} +WizardVisualPanel1.labelDescription.text=\uC124\uBA85: +ReportPanel.graphType.directed=\uBC29\uD5A5\uC131 +ReportPanel.yes=\uC608 +ReportPanel.labelGraphCount.text=\uADF8\uB798\uD504 \uC218: +ReportPanel.graphType.undirected=\uBE44\uBC29\uD5A5\uC131 +ReportPanel.labelDynamicAtts.text=\uB3D9\uC801 \uC18D\uC131: +DesktopImportControllerUI.error_no_matching_db_importer=\uD638\uD658 \uAC00\uB2A5\uD55C \uBD88\uB7EC\uC624\uAE30 \uB3C4\uAD6C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\n\uD574\uB2F9 \uB370\uC774\uD130\uBCA0\uC774\uC2A4\uB294 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. +DesktopImportControllerUI.streamSource={0} \uC2A4\uD2B8\uB9BC +ReportPanel.tab2ScrollPane.TabConstraints.tabTitle=\uBCF4\uACE0\uC11C +DesktopImportControllerUI.finishingImport={0} \uCC98\uB9AC \uC911 +ReportPanel.tab1ScrollPane.TabConstraints.tabTitle=\uC774\uC288 +WizardVisualPanel1.title=\uB9C8\uBC95\uC0AC \uC120\uD0DD +ImportWizard.wizard.title=\uBD88\uB7EC\uC624\uAE30 \uB9C8\uBC95\uC0AC +ReportPanel.labelParallelEdgesMergeStrategy.text=\uC5E3\uC9C0 \uBCD1\uD569 \uC804\uB7B5: +ReportPanel.labelGraphType.text=\uADF8\uB798\uD504 \uC720\uD615: diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_nl.properties b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_nl.properties new file mode 100644 index 0000000000..3084cc034d --- /dev/null +++ b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_nl.properties @@ -0,0 +1,70 @@ +OpenIDE-Module-Short-Description=Importeerfuncties in gebruikersinterface integreren +CTL_ImportDB=Database importeren +ReportPanel.title=Rapport importeren +ReportPanel.labelSrc.text=Bron: +ReportPanel.sourceLabel.text= +ReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Problemen +ReportPanel.nodeCountLabel.text= +ReportPanel.edgeCountLabel.text= +ReportPanel.labelEdgeCount.text=# of Edges: +ReportPanel.labelNodeCount.text=Aantal knopen: +ReportPanel.labelDynamic.text=Dynamische graaf: +ReportPanel.dynamicLabel.text= +ReportPanel.labelGraphType.text=Graph Type: +ReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Report +ReportPanel.autoscaleCheckbox.toolTipText=Scale node size, node position and edge weight to fill the space in an optimized way +ReportPanel.autoscaleCheckbox.text=Automatisch schalen +ReportPanel.noIssues=Geen problemen gevonden tijdens het importeren +ReportPanel.yes=ja +ReportPanel.no=nee +ReportPanel.graphType.directed=Gericht +ReportPanel.graphType.undirected=Ongericht +ReportPanel.graphType.mixed=Gemengd +ReportPanel.issueTable.issues=Problemen +ReportPanel.reportCopy.text=Kopiλren +ReportPanel.reportCopy.description=Copy content to clipboard +DesktopImportControllerUI.wizardSource=Wizard {0} +DesktopImportControllerUI.streamSource=Stream {0} +DesktopImportControllerUI.taskName=Import {0} +DesktopImportControllerUI.database.ui.dialog.title=Database-instellingen +DesktopImportControllerUI.status.importSuccess={0} successfully imported +DesktopImportControllerUI.status.importSuccess.default=Data +DesktopImportControllerUI.status.multiImportSuccess={0} bronnen succesvol geοmporteerd +DesktopImportControllerUI.error_no_matching_file_importer=Impossible to find a compatible Importer.\nThe file format is not supported. Check file's extension. +DesktopImportControllerUI.error_no_matching_stream_importer=Impossible to find a compatible Importer.\nThe stream is not supported. +DesktopImportControllerUI.error_no_matching_db_importer=Impossible to find a compatible Importer.\nThe database is not supported. +DesktopImportControllerUI.file.ui.dialog.title={0} settings +DesktopImportControllerUI.wizard.ui.dialog.title={0} settings +DesktopImportControllerUI.processor.ui.dialog.title=Processorinstellingen +ReportPanel.createMissingNodesCheckbox.text=Ontbrekende knopen maken +ReportPanel.createMissingNodesCheckbox.toolTipText=Create missing nodes found as edges' source or target +ReportPanel.moreOptionsLink.text=Meer opties... +ReportPanel.selfLoopCheckBox.text=Self-loops +ReportPanel.selfLoopCheckBox.toolTipText=Allow self-loops on nodes +ReportPanel.labelParallelEdgesMergeStrategy.text=Edges merge strategy: +ReportPanel.mergeStrategy.sum=Som +ReportPanel.mergeStrategy.avg=Gemiddelde +ReportPanel.mergeStrategy.min=Minimum +ReportPanel.mergeStrategy.max=Maximum +ReportPanel.mergeStrategy.first=Eerste +ReportPanel.mergeStrategy.last=Laatste +ReportPanel.mergeStrategy.no_merge=Niet samenvoegen +ReportPanel.labelMultiGraph.text=Multi Graph: +ReportPanel.multigraphLabel.text= +ReportPanel.labelDynamicAtts.text=Dynamische attributen: +ReportPanel.dynamicAttsLabel.text= +ReportPanel.labelGraphCount.text=# of Graphs: +ReportPanel.graphCountLabel.text= +ReportPanel.multiSourceLabel.text=Meerdere bronnen +CTL_ImportWizard=Importeren... +ImportWizard.wizard.title=Import Wizard +ImportWizard.error_no_matching_importer=No importer can be found for this type of Wizard +ImportWizard.description_no_plugin_importers_installed=No plugin importers installed +WizardVisualPanel1.title=Select Wizard +WizardVisualPanel1.labelCategory.text=Categorie: +WizardVisualPanel1.labelWizard.text=Wizard Type: +WizardVisualPanel1.labelDescription.text=Beschrijving: +ProcessorIssuesReportPanel.title=Problemen na importeerproces +ProcessorIssuesReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Report +ProcessorIssuesReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Problemen +ProcessorIssuesReportPanel.close=Sluiten diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_pt.properties b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_pt.properties new file mode 100644 index 0000000000..f8fec05364 --- /dev/null +++ b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_pt.properties @@ -0,0 +1,60 @@ +DesktopImportControllerUI.status.importSuccess={0} importado com sucesso +OpenIDE-Module-Short-Description=Integrar recursos de importa\u00E7\u00E3o \u00E0 interface de utilizador +CTL_ImportDB=Importar banco de dados +ReportPanel.title=Relat\u00F3rio de importa\u00E7\u00E3o +ReportPanel.labelSrc.text=Fonte: +ReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Notifica\u00E7\u00F5es +ReportPanel.labelEdgeCount.text=N\u00BA de arestas: +ReportPanel.labelNodeCount.text=N\u00BA de n\u00F3s: +ReportPanel.labelDynamic.text=Grafo din\u00E2mico: +ReportPanel.labelGraphType.text=Tipo de grafo: +ReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Relat\u00F3rio +ReportPanel.autoscaleCheckbox.toolTipText=Escalar o tamanho do n\u00F3 e a sua posi\u00E7\u00E3o e o peso da aresta para preencher o espa\u00E7o de forma otimizada +ReportPanel.autoscaleCheckbox.text=Escala autom\u00E1tica +ReportPanel.noIssues=Nenhum problema encontrado durante a importa\u00E7\u00E3o +ReportPanel.yes=sim +ReportPanel.no=n\u00E3o +ReportPanel.graphType.directed=Dirigido +ReportPanel.graphType.undirected=N\u00E3o dirigido +ReportPanel.graphType.mixed=Misturado +ReportPanel.issueTable.issues=Notifica\u00E7\u00F5es +ReportPanel.reportCopy.text=Copiar +ReportPanel.reportCopy.description=Copiar conte\u00FAdo para a \u00E1rea de transfer\u00EAncia +DesktopImportControllerUI.streamSource=Fluxo {0} +DesktopImportControllerUI.taskName=Importar {0} +DesktopImportControllerUI.database.ui.dialog.title=Configura\u00E7\u00F5es do banco de dados +DesktopImportControllerUI.status.importSuccess.default=Dados +DesktopImportControllerUI.status.multiImportSuccess={0} fontes importadas com \u00EAxito +DesktopImportControllerUI.file.ui.dialog.title={0} configura\u00E7\u00F5es +DesktopImportControllerUI.wizard.ui.dialog.title={0} configura\u00E7\u00F5es +DesktopImportControllerUI.processor.ui.dialog.title=Configura\u00E7\u00F5es do processador +ReportPanel.createMissingNodesCheckbox.text=Criar n\u00F3s faltantes +ReportPanel.createMissingNodesCheckbox.toolTipText=Criar n\u00F3s faltantes como arestas de origem ou destino +ReportPanel.moreOptionsLink.text=Mais op\u00E7\u00F5es... +ReportPanel.selfLoopCheckBox.text=Auto-loops +ReportPanel.selfLoopCheckBox.toolTipText=Permitir auto-loops em n\u00F3s +ReportPanel.mergeStrategy.sum=Soma +ReportPanel.mergeStrategy.avg=M\u00E9dia +ReportPanel.mergeStrategy.min=M\u00EDnimo +ReportPanel.mergeStrategy.max=M\u00E1ximo +ReportPanel.labelGraphCount.text=N\u00BA de grafos: +ReportPanel.multiSourceLabel.text=M\u00FAltiplas Fontes +CTL_ImportWizard=Importar ... +WizardVisualPanel1.labelCategory.text=Categoria: +WizardVisualPanel1.labelDescription.text=Descri\u00E7\u00E3o: +ReportPanel.labelParallelEdgesMergeStrategy.text=Estrat\u00E9gia de mesclagem para arestas: +ReportPanel.mergeStrategy.first=Primeiro +ReportPanel.labelDynamicAtts.text=Atributos din\u00E2micos: +ImportWizard.wizard.title=Assistente de importa\u00E7\u00E3o +ImportWizard.description_no_plugin_importers_installed=Nenhum importador de plugin instalado +WizardVisualPanel1.title=Selecione o assistente +WizardVisualPanel1.labelWizard.text=Tipo do assistente: +ProcessorIssuesReportPanel.title=Problemas ap\u00F3s o processo de importa\u00E7\u00E3o +ReportPanel.mergeStrategy.last=\u00DAltimo +ReportPanel.mergeStrategy.no_merge=N\u00E3o mesclar +ReportPanel.labelMultiGraph.text=Multigrafo: +ImportWizard.error_no_matching_importer=Nenhum importador pode ser encontrado para este tipo de assistente +ProcessorIssuesReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Reportar +ProcessorIssuesReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Problemas +ProcessorIssuesReportPanel.close=Fechar +DesktopImportControllerUI.errorHandler.critical={0} n\u00E3o importou devido ao seguinte erro: {1} diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_pt_BR.properties b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_pt_BR.properties index c52c4d4dff..9c23f7e417 100644 --- a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_pt_BR.properties +++ b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_pt_BR.properties @@ -1,65 +1,81 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 17\:44+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Integrar recursos de importa\u00e7\u00e3o \u00e0 interface de usu\u00e1rio - -CTL_ImportDB=Importar banco de dados - -ReportPanel.title=Relat\u00f3rio de importa\u00e7\u00e3o - -ReportPanel.labelSrc.text=Fonte\: - -ReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Notifica\u00e7\u00f5es - -ReportPanel.labelEdgeCount.text=N\u00ba de arestas\: - -ReportPanel.labelNodeCount.text=N\u00ba de n\u00f3s\: - -ReportPanel.labelDynamic.text=Grafo din\u00e2mico\: - -ReportPanel.dynamicLabel.text=NaN - -ReportPanel.labelGraphType.text=Tipo de grafo\: - -ReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Relat\u00f3rio - -ReportPanel.autoscaleCheckbox.toolTipText=Escalonar o tamanho do n\u00f3 e sua posi\u00e7\u00e3o e o peso da aresta para preencher o espa\u00e7o de forma otimizada - -ReportPanel.autoscaleCheckbox.text=Escala autom\u00e1tica - -ReportPanel.noIssues=Nenhum problema encontrado durante a importa\u00e7\u00e3o - -ReportPanel.yes=sim - -ReportPanel.no=n\u00e3o - -DesktopImportControllerUI.spigotSource=Spigot {0} - -DesktopImportControllerUI.streamSource=Fluxo {0} - -DesktopImportControllerUI.taskName=Importar {0} - -DesktopImportControllerUI.database.ui.dialog.title=Configura\u00e7\u00f5es do banco de dados - -DesktopImportControllerUI.status.importSuccess={0} importado com sucesso - -DesktopImportControllerUI.status.importSuccess.default=Dados - -DesktopImportControllerUI.error_no_matching_file_importer=Imposs\u00edvel encontrar um Importador compat\u00edvel. O formato de arquivo n\u00e3o \u00e9 suportado. Verificar a extens\u00e3o do arquivo. - -DesktopImportControllerUI.error_no_matching_stream_importer=Imposs\u00edvel encontrar um Importador compat\u00edvel. O fluxo n\u00e3o \u00e9 suportado. Verificar a extens\u00e3o do arquivo. - -DesktopImportControllerUI.error_no_matching_db_importer=Imposs\u00edvel encontrar um Importador compat\u00edvel. O banco de dados n\u00e3o \u00e9 suportado. - -DesktopImportControllerUI.file.ui.dialog.title={0} configura\u00e7\u00f5es - -DesktopImportControllerUI.spigot.ui.dialog.title={0} configura\u00e7\u00f5es - -DesktopImportControllerUI.processor.ui.dialog.title=Configura\u00e7\u00f5es do processador - -ReportPanel.createMissingNodesCheckbox.text=Criar n\u00f3s faltantes +OpenIDE-Module-Short-Description=Integrar recursos de importaηγo ΰ interface de usuαrio + +CTL_ImportDB = Importar banco de dados + +ReportPanel.title = Relatσrio de importaηγo +ReportPanel.labelSrc.text=Fonte: +ReportPanel.sourceLabel.text= +ReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Notificaηυes +ReportPanel.nodeCountLabel.text= +ReportPanel.edgeCountLabel.text= +ReportPanel.labelEdgeCount.text=NΊ de arestas: +ReportPanel.labelNodeCount.text=NΊ de nσs: +ReportPanel.labelDynamic.text=Grafo dinβmico: +ReportPanel.dynamicLabel.text= +ReportPanel.labelGraphType.text=Tipo de grafo: +ReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Relatσrio +ReportPanel.autoscaleCheckbox.toolTipText=Escalonar o tamanho do nσ e sua posiηγo e o peso da aresta para preencher o espaηo de forma otimizada +ReportPanel.autoscaleCheckbox.text=Escala automαtica +ReportPanel.noIssues=Nenhum problema encontrado durante a importaηγo +ReportPanel.yes=sim +ReportPanel.no=nγo +ReportPanel.graphType.directed=Dirigido +ReportPanel.graphType.undirected=Nγo dirigido +ReportPanel.graphType.mixed=Misturado +ReportPanel.issueTable.issues=Notificaηυes +ReportPanel.reportCopy.text=Copiar +ReportPanel.reportCopy.description=Copiar conteϊdo para a αrea de transferκncia + +# DesktopImportControllerUI.wizardSource = Wizard {0} +DesktopImportControllerUI.streamSource = Fluxo {0} +DesktopImportControllerUI.taskName = Importar {0} + +DesktopImportControllerUI.database.ui.dialog.title = Configuraηυes do banco de dados +DesktopImportControllerUI.status.importSuccess = {0} importado com sucesso +DesktopImportControllerUI.status.importSuccess.default = Dados +DesktopImportControllerUI.status.multiImportSuccess = {0} fontes importadas com κxito + +# DesktopImportControllerUI.error_no_matching_file_importer = Impossible to find a compatible Importer.\nThe file format is not supported. Check file's extension. +# DesktopImportControllerUI.error_no_matching_stream_importer = Impossible to find a compatible Importer.\nThe stream is not supported. +# DesktopImportControllerUI.error_no_matching_db_importer = Impossible to find a compatible Importer.\nThe database is not supported. + +DesktopImportControllerUI.file.ui.dialog.title = {0} configuraηυes +DesktopImportControllerUI.wizard.ui.dialog.title = {0} configuraηυes +DesktopImportControllerUI.processor.ui.dialog.title = Configuraηυes do processador + +ReportPanel.createMissingNodesCheckbox.text=Criar nσs faltantes +ReportPanel.createMissingNodesCheckbox.toolTipText=Criar nσs faltantes como arestas de origem ou destino +ReportPanel.moreOptionsLink.text=Mais opηυes... +ReportPanel.selfLoopCheckBox.text=Auto-loops +ReportPanel.selfLoopCheckBox.toolTipText=Permitir auto-loops nos nσs +ReportPanel.labelParallelEdgesMergeStrategy.text=Estratιgia de mesclagem para arestas +ReportPanel.mergeStrategy.sum=Soma +ReportPanel.mergeStrategy.avg=Mιdia +ReportPanel.mergeStrategy.min=Mνnimo +ReportPanel.mergeStrategy.max=Mαximo +# ReportPanel.mergeStrategy.first=First +# ReportPanel.mergeStrategy.last=Last +# ReportPanel.mergeStrategy.no_merge=Don't merge +ReportPanel.labelMultiGraph.text=Multigrafo +ReportPanel.multigraphLabel.text= +ReportPanel.labelDynamicAtts.text=Atributos Dinβmicos +ReportPanel.dynamicAttsLabel.text= +ReportPanel.labelGraphCount.text=NΊ de grafos: +ReportPanel.graphCountLabel.text= +ReportPanel.multiSourceLabel.text=Mϊltiplas Fontes + +CTL_ImportWizard=Importar ... + +# ImportWizard.wizard.title = Import Wizard +# ImportWizard.error_no_matching_importer = No importer can be found for this type of Wizard +# ImportWizard.description_no_plugin_importers_installed = No plugin importers installed + +# WizardVisualPanel1.title = Select Wizard +WizardVisualPanel1.labelCategory.text=Categoria: +# WizardVisualPanel1.labelWizard.text=Wizard Type: +WizardVisualPanel1.labelDescription.text=Descriηγo: + +# ProcessorIssuesReportPanel.title=Issues after import process +# ProcessorIssuesReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Report +# ProcessorIssuesReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Issues +# ProcessorIssuesReportPanel.close=Close diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_ro.properties b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_ro.properties new file mode 100644 index 0000000000..c4378fa000 --- /dev/null +++ b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_ro.properties @@ -0,0 +1,68 @@ + + +ReportPanel.mergeStrategy.avg=Media +CTL_ImportDB=Import\u0103 baza de date +ReportPanel.title=Raport de importare +ReportPanel.labelSrc.text=Sursa: +ReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Probleme +ReportPanel.labelEdgeCount.text=# de muchii: +ReportPanel.labelNodeCount.text=# de noduri: +ReportPanel.labelDynamic.text=Graf dinamic: +ReportPanel.labelGraphType.text=Tipul grafului: +ReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Raport +OpenIDE-Module-Short-Description=Integreaz\u0103 func\u021Biile de importare \u00EEn interfa\u021B\u0103 +ReportPanel.autoscaleCheckbox.text=Scalare automat\u0103 +ReportPanel.noIssues=Nicio problem\u0103 la importare +ReportPanel.no=nu +ReportPanel.graphType.directed=Orientat +ReportPanel.graphType.undirected=Neorientat +ReportPanel.graphType.mixed=Mixt +ReportPanel.issueTable.issues=Probleme +ReportPanel.reportCopy.text=Copiaz\u0103 +ReportPanel.reportCopy.description=Copiaz\u0103 con\u021Binutul \u00EEn clipboard +DesktopImportControllerUI.wizardSource=Expert {0} +DesktopImportControllerUI.database.ui.dialog.title=Set\u0103rile bazei de date +DesktopImportControllerUI.status.importSuccess={0} a fost importat cu succes +DesktopImportControllerUI.error_no_matching_stream_importer=Imposibil de g\u0103sit un importator compatibil.\nFluxul de date nu este acceptat. +DesktopImportControllerUI.taskName=Importare {0} +ReportPanel.selfLoopCheckBox.toolTipText=Permite noduri cu bucle +ReportPanel.labelParallelEdgesMergeStrategy.text=Strategia de \u00EEmbinare a muchiilor: +ReportPanel.mergeStrategy.sum=Suma +ReportPanel.mergeStrategy.min=Minim +ReportPanel.mergeStrategy.max=Maxim +ReportPanel.mergeStrategy.first=Prima +ReportPanel.mergeStrategy.last=Ultima +ReportPanel.mergeStrategy.no_merge=Nu \u00EEmbina +ReportPanel.labelMultiGraph.text=Multigraf: +ReportPanel.labelGraphCount.text=# de grafuri: +ReportPanel.multiSourceLabel.text=Surse multiple +CTL_ImportWizard=Import\u0103... +ImportWizard.error_no_matching_importer=Nu poate fi g\u0103sit niciun importator pentru acest tip de Expert +ImportWizard.wizard.title=Expert de importare +DesktopImportControllerUI.error_no_matching_db_importer=Imposibil de g\u0103sit un importator compatibil.\nBaza de date nu este acceptat\u0103. +WizardVisualPanel1.title=Selecteaz\u0103 Expert +WizardVisualPanel1.labelCategory.text=Categorie: +WizardVisualPanel1.labelWizard.text=Tip Expert: +ProcessorIssuesReportPanel.title=Probleme dup\u0103 procesul de importare +ProcessorIssuesReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Raport +ProcessorIssuesReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Probleme +ProcessorIssuesReportPanel.close=\u00CEnchide +ReportPanel.autoscaleCheckbox.toolTipText=Scaleaz\u0103 dimensiunea \u0219i pozi\u021Bia nodurilor, \u0219i ponderea muchiilor pentru a umple spa\u021Biul \u00EEntr-un mod optimizat +DesktopImportControllerUI.streamSource=Flux {0} +ReportPanel.yes=da +DesktopImportControllerUI.status.importSuccess.default=Date +DesktopImportControllerUI.processor.ui.dialog.title=Set\u0103rile procesorului +ReportPanel.createMissingNodesCheckbox.toolTipText=Creaz\u0103 nodurile lips\u0103 g\u0103site ca surs\u0103 sau \u021Bint\u0103 a unor muchii +DesktopImportControllerUI.file.ui.dialog.title={0} set\u0103ri +ReportPanel.createMissingNodesCheckbox.text=Creaz\u0103 nodurile lips\u0103 +DesktopImportControllerUI.status.multiImportSuccess={0} surse importate cu succes +DesktopImportControllerUI.error_no_matching_file_importer=Imposibil de g\u0103sit un importator compatibil.\nFormatul de fi\u0219ier nu este acceptat. Verific\u0103 extensia fi\u0219ierului. +ReportPanel.moreOptionsLink.text=Mai multe op\u021Biuni... +DesktopImportControllerUI.wizard.ui.dialog.title={0} set\u0103ri +ReportPanel.selfLoopCheckBox.text=Bucle +ReportPanel.labelDynamicAtts.text=Atribute dinamice: +ImportWizard.description_no_plugin_importers_installed=Nu exist\u0103 pluginuri de importare instalate +WizardVisualPanel1.labelDescription.text=Descriere: +DesktopImportControllerUI.finishingImport=Se proceseaz\u0103 {0} +DesktopImportControllerUI.multiImport.finishingImport=Se proceseaz\u0103 {0} surse +DesktopImportControllerUI.errorHandler.critical={0} nu a putut fi importat din cauza urm\u0103toarei erori: {1} diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_ru.properties b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_ru.properties index 3e0f6d40bc..fd225115e8 100644 --- a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_ru.properties +++ b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_ru.properties @@ -1,65 +1,78 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-07 12\:06+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - OpenIDE-Module-Short-Description=Integrate import features in UI - CTL_ImportDB=\u0418\u043c\u043f\u043e\u0440\u0442 \u0421\u0423\u0411\u0414 - ReportPanel.title=\u041e\u0442\u0447\u0451\u0442 \u043e\u0431 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 - -ReportPanel.labelSrc.text=\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\: - +ReportPanel.labelSrc.text=\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a: +ReportPanel.sourceLabel.text= ReportPanel.tab1ScrollPane.TabConstraints.tabTitle=\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b - -ReportPanel.labelEdgeCount.text=\# \u0440\u0451\u0431\u0435\u0440\: - -ReportPanel.labelNodeCount.text=\# \u0443\u0437\u043b\u043e\u0432\: - -ReportPanel.labelDynamic.text=\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0433\u0440\u0430\u0444\: - -ReportPanel.dynamicLabel.text=NaN - -ReportPanel.labelGraphType.text=\u0422\u0438\u043f \u0433\u0440\u0430\u0444\u0430\: - +ReportPanel.nodeCountLabel.text= +ReportPanel.edgeCountLabel.text= +ReportPanel.labelEdgeCount.text=# \u0440\u0451\u0431\u0435\u0440: +ReportPanel.labelNodeCount.text=# \u0443\u0437\u043b\u043e\u0432: +ReportPanel.labelDynamic.text=\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0433\u0440\u0430\u0444: +ReportPanel.dynamicLabel.text= +ReportPanel.labelGraphType.text=\u0422\u0438\u043f \u0433\u0440\u0430\u0444\u0430: ReportPanel.tab2ScrollPane.TabConstraints.tabTitle=\u041e\u0442\u0447\u0451\u0442 - ReportPanel.autoscaleCheckbox.toolTipText=\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0443\u0437\u043b\u043e\u0432, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0432\u0435\u0441\u0430 \u0440\u0451\u0431\u0435\u0440 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0443\u043a\u043b\u0430\u0434\u043a\u0438 - ReportPanel.autoscaleCheckbox.text=\u0410\u0432\u0442\u043e-\u043c\u0430\u0441\u0448\u0442\u0430\u0431 - ReportPanel.noIssues=\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u043e \u043f\u0440\u043e\u0431\u043b\u0435\u043c - ReportPanel.yes=\u0434\u0430 - ReportPanel.no=\u043d\u0435\u0442 - -DesktopImportControllerUI.spigotSource=\u0422\u0438\u043f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 {0} - +ReportPanel.graphType.directed=\u041e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 +ReportPanel.graphType.undirected=\u041d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0435 +# ReportPanel.graphType.mixed=Mixed +ReportPanel.issueTable.issues=\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u044b +# ReportPanel.reportCopy.text=Copy +# ReportPanel.reportCopy.description=Copy content to clipboard + +# DesktopImportControllerUI.wizardSource = Wizard {0} DesktopImportControllerUI.streamSource=\u041f\u043e\u0442\u043e\u043a {0} - DesktopImportControllerUI.taskName=\u0418\u043c\u043f\u043e\u0440\u0442 {0} - DesktopImportControllerUI.database.ui.dialog.title=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0421\u0423\u0411\u0414 - DesktopImportControllerUI.status.importSuccess=\u0418\u043c\u043f\u043e\u0440\u0442 {0} \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0437\u0430\u0432\u0435\u0440\u0448\u0451\u043d - DesktopImportControllerUI.status.importSuccess.default=\u0414\u0430\u043d\u043d\u044b\u0435 +# DesktopImportControllerUI.status.multiImportSuccess = {0} sources successfully imported -DesktopImportControllerUI.error_no_matching_file_importer=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0418\u043c\u043f\u043e\u0440\u0442\u0430.\n\u0424\u043e\u0440\u043c\u0430\u0442 \u0444\u0430\u0439\u043b\u0430 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430. - -DesktopImportControllerUI.error_no_matching_stream_importer=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0418\u043c\u043f\u043e\u0440\u0442\u0430.\n\u041f\u043e\u0442\u043e\u043a \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f. - -DesktopImportControllerUI.error_no_matching_db_importer=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u0418\u043c\u043f\u043e\u0440\u0442\u0430.\n\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f. +# DesktopImportControllerUI.error_no_matching_file_importer = Impossible to find a compatible Importer.\nThe file format is not supported. Check file's extension. +# DesktopImportControllerUI.error_no_matching_stream_importer = Impossible to find a compatible Importer.\nThe stream is not supported. +# DesktopImportControllerUI.error_no_matching_db_importer = Impossible to find a compatible Importer.\nThe database is not supported. DesktopImportControllerUI.file.ui.dialog.title={0} \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 - -DesktopImportControllerUI.spigot.ui.dialog.title={0} \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 - +# DesktopImportControllerUI.wizard.ui.dialog.title = {0} settings DesktopImportControllerUI.processor.ui.dialog.title=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0438\u043d\u0433\u0430 - ReportPanel.createMissingNodesCheckbox.text=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0443\u0437\u043b\u044b +# ReportPanel.createMissingNodesCheckbox.toolTipText=Create missing nodes found as edges' source or target +# ReportPanel.moreOptionsLink.text=More options... +# ReportPanel.selfLoopCheckBox.text=Self-loops +# ReportPanel.selfLoopCheckBox.toolTipText=Allow self-loops on nodes +# ReportPanel.labelParallelEdgesMergeStrategy.text=Edges merge strategy: +# ReportPanel.mergeStrategy.sum=Sum +# ReportPanel.mergeStrategy.avg=Average +# ReportPanel.mergeStrategy.min=Minimum +# ReportPanel.mergeStrategy.max=Maximum +# ReportPanel.mergeStrategy.first=First +# ReportPanel.mergeStrategy.last=Last +# ReportPanel.mergeStrategy.no_merge=Don't merge +# ReportPanel.labelMultiGraph.text=Multi Graph: +ReportPanel.multigraphLabel.text= +# ReportPanel.labelDynamicAtts.text=Dynamic Attributes: +ReportPanel.dynamicAttsLabel.text= +ReportPanel.labelGraphCount.text=# \u0443\u0437\u043b\u043e\u0432: +ReportPanel.graphCountLabel.text= +# ReportPanel.multiSourceLabel.text=Multiple sources + +# CTL_ImportWizard=Import... + +# ImportWizard.wizard.title = Import Wizard +# ImportWizard.error_no_matching_importer = No importer can be found for this type of Wizard +# ImportWizard.description_no_plugin_importers_installed = No plugin importers installed + +# WizardVisualPanel1.title = Select Wizard +# WizardVisualPanel1.labelCategory.text=Category: +# WizardVisualPanel1.labelWizard.text=Wizard Type: +# WizardVisualPanel1.labelDescription.text=Description: + +# ProcessorIssuesReportPanel.title=Issues after import process +# ProcessorIssuesReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Report +# ProcessorIssuesReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Issues +# ProcessorIssuesReportPanel.close=Close + diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_th.properties b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_tr.properties b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_tr.properties new file mode 100644 index 0000000000..abe7c3d6f9 --- /dev/null +++ b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_tr.properties @@ -0,0 +1,70 @@ +OpenIDE-Module-Short-Description=Integrate import features in UI +CTL_ImportDB=Import Database +ReportPanel.title=Import report +ReportPanel.labelSrc.text=Source: +ReportPanel.sourceLabel.text= +ReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Issues +ReportPanel.nodeCountLabel.text= +ReportPanel.edgeCountLabel.text= +ReportPanel.labelEdgeCount.text=# of Edges: +ReportPanel.labelNodeCount.text=# of Nodes: +ReportPanel.labelDynamic.text=Dynamic Graph: +ReportPanel.dynamicLabel.text= +ReportPanel.labelGraphType.text=Graph Type: +ReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Report +ReportPanel.autoscaleCheckbox.toolTipText=Scale node size, node position and edge weight to fill the space in an optimized way +ReportPanel.autoscaleCheckbox.text=Auto-scale +ReportPanel.noIssues=No issue found during import +ReportPanel.yes=yes +ReportPanel.no=no +ReportPanel.graphType.directed=Yφnlό +ReportPanel.graphType.undirected=Yφnsόz +ReportPanel.graphType.mixed=Mixed +ReportPanel.issueTable.issues=Issues +ReportPanel.reportCopy.text=Copy +ReportPanel.reportCopy.description=Copy content to clipboard +DesktopImportControllerUI.wizardSource=Wizard {0} +DesktopImportControllerUI.streamSource=Stream {0} +DesktopImportControllerUI.taskName=Import {0} +DesktopImportControllerUI.database.ui.dialog.title=Database settings +DesktopImportControllerUI.status.importSuccess={0} successfully imported +DesktopImportControllerUI.status.importSuccess.default=Data +DesktopImportControllerUI.status.multiImportSuccess={0} sources successfully imported +DesktopImportControllerUI.error_no_matching_file_importer=Impossible to find a compatible Importer.\nThe file format is not supported. Check file's extension. +DesktopImportControllerUI.error_no_matching_stream_importer=Impossible to find a compatible Importer.\nThe stream is not supported. +DesktopImportControllerUI.error_no_matching_db_importer=Impossible to find a compatible Importer.\nThe database is not supported. +DesktopImportControllerUI.file.ui.dialog.title={0} settings +DesktopImportControllerUI.wizard.ui.dialog.title={0} settings +DesktopImportControllerUI.processor.ui.dialog.title=Processor settings +ReportPanel.createMissingNodesCheckbox.text=Create missing nodes +ReportPanel.createMissingNodesCheckbox.toolTipText=Create missing nodes found as edges' source or target +ReportPanel.moreOptionsLink.text=More options... +ReportPanel.selfLoopCheckBox.text=Self-loops +ReportPanel.selfLoopCheckBox.toolTipText=Allow self-loops on nodes +ReportPanel.labelParallelEdgesMergeStrategy.text=Edges merge strategy: +ReportPanel.mergeStrategy.sum=Toplam +ReportPanel.mergeStrategy.avg=Ortalama +ReportPanel.mergeStrategy.min=Minimum +ReportPanel.mergeStrategy.max=Maksimum +ReportPanel.mergeStrategy.first=First +ReportPanel.mergeStrategy.last=Last +ReportPanel.mergeStrategy.no_merge=Don't merge +ReportPanel.labelMultiGraph.text=Multi Graph: +ReportPanel.multigraphLabel.text= +ReportPanel.labelDynamicAtts.text=Dynamic Attributes: +ReportPanel.dynamicAttsLabel.text= +ReportPanel.labelGraphCount.text=# of Graphs: +ReportPanel.graphCountLabel.text= +ReportPanel.multiSourceLabel.text=Multiple sources +CTL_ImportWizard=Import... +ImportWizard.wizard.title=Import Wizard +ImportWizard.error_no_matching_importer=No importer can be found for this type of Wizard +ImportWizard.description_no_plugin_importers_installed=No plugin importers installed +WizardVisualPanel1.title=Select Wizard +WizardVisualPanel1.labelCategory.text=Category: +WizardVisualPanel1.labelWizard.text=Wizard Type: +WizardVisualPanel1.labelDescription.text=Description: +ProcessorIssuesReportPanel.title=Issues after import process +ProcessorIssuesReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Report +ProcessorIssuesReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Issues +ProcessorIssuesReportPanel.close=Close diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_uk.properties b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_uk.properties new file mode 100644 index 0000000000..f6991e5166 --- /dev/null +++ b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_uk.properties @@ -0,0 +1,73 @@ +WizardVisualPanel1.labelWizard.text=\u0422\u0438\u043F \u043C\u0430\u0439\u0441\u0442\u0440\u0430: +ReportPanel.multiSourceLabel.text=\u041A\u0456\u043B\u044C\u043A\u0430 \u0434\u0436\u0435\u0440\u0435\u043B +ImportWizard.wizard.title=\u041C\u0430\u0439\u0441\u0442\u0435\u0440 \u0456\u043C\u043F\u043E\u0440\u0442\u0443 +ReportPanel.createMissingNodesCheckbox.text=\u0421\u0442\u0432\u043E\u0440\u0456\u0442\u044C \u0432\u0456\u0434\u0441\u0443\u0442\u043D\u0456 \u0432\u0443\u0437\u043B\u0438 +ReportPanel.nodeCountLabel.text=\u0406 +DesktopImportControllerUI.wizard.ui.dialog.title={0} \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F +ReportPanel.graphType.mixed=\u0417\u043C\u0456\u0448\u0430\u043D\u0438\u0439 +DesktopImportControllerUI.wizardSource=\u041C\u0430\u0439\u0441\u0442\u0435\u0440 {0} +DesktopImportControllerUI.finishingImport=\u041E\u0431\u0440\u043E\u0431\u043A\u0430 {0} +DesktopImportControllerUI.database.ui.dialog.title=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u0431\u0430\u0437\u0438 \u0434\u0430\u043D\u0438\u0445 +ReportPanel.mergeStrategy.first=\u041F\u0435\u0440\u0448\u0435 +OpenIDE-Module-Short-Description=\u0406\u043D\u0442\u0435\u0433\u0440\u0443\u0439\u0442\u0435 \u0444\u0443\u043D\u043A\u0446\u0456\u0457 \u0456\u043C\u043F\u043E\u0440\u0442\u0443 \u0432 \u0456\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430 +DesktopImportControllerUI.error_no_matching_file_importer=\u041D\u0435\u043C\u043E\u0436\u043B\u0438\u0432\u043E \u0437\u043D\u0430\u0439\u0442\u0438 \u0441\u0443\u043C\u0456\u0441\u043D\u0438\u0439 \u0456\u043C\u043F\u043E\u0440\u0442\u0435\u0440.\n\u0424\u043E\u0440\u043C\u0430\u0442 \u0444\u0430\u0439\u043B\u0443 \u043D\u0435 \u043F\u0456\u0434\u0442\u0440\u0438\u043C\u0443\u0454\u0442\u044C\u0441\u044F. \u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0442\u0435 \u0440\u043E\u0437\u0448\u0438\u0440\u0435\u043D\u043D\u044F \u0444\u0430\u0439\u043B\u0443. +CTL_ImportDB=\u0406\u043C\u043F\u043E\u0440\u0442 \u0431\u0430\u0437\u0438 \u0434\u0430\u043D\u0438\u0445 +WizardVisualPanel1.labelCategory.text=\u041A\u0430\u0442\u0435\u0433\u043E\u0440\u0456\u044F: +ReportPanel.title=\u0417\u0432\u0456\u0442 \u043F\u0440\u043E \u0456\u043C\u043F\u043E\u0440\u0442 +ReportPanel.issueTable.issues=\u041F\u0438\u0442\u0430\u043D\u043D\u044F +ReportPanel.moreOptionsLink.text=\u0411\u0456\u043B\u044C\u0448\u0435 \u043E\u043F\u0446\u0456\u0439... +ReportPanel.mergeStrategy.last=\u041E\u0441\u0442\u0430\u043D\u043D\u0456\u0439 +ReportPanel.graphType.undirected=\u041D\u0435\u0440\u0435\u0436\u0438\u0441\u043E\u0432\u0430\u043D\u0438\u0439 +DesktopImportControllerUI.error_no_matching_db_importer=\u041D\u0435\u043C\u043E\u0436\u043B\u0438\u0432\u043E \u0437\u043D\u0430\u0439\u0442\u0438 \u0441\u0443\u043C\u0456\u0441\u043D\u0438\u0439 \u0456\u043C\u043F\u043E\u0440\u0442\u0435\u0440.\n\u0411\u0430\u0437\u0430 \u0434\u0430\u043D\u0438\u0445 \u043D\u0435 \u043F\u0456\u0434\u0442\u0440\u0438\u043C\u0443\u0454\u0442\u044C\u0441\u044F. +ReportPanel.reportCopy.description=\u041A\u043E\u043F\u0456\u044E\u0432\u0430\u0442\u0438 \u0432\u043C\u0456\u0441\u0442 \u0443 \u0431\u0443\u0444\u0435\u0440 \u043E\u0431\u043C\u0456\u043D\u0443 +DesktopImportControllerUI.file.ui.dialog.title={0} \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F +DesktopImportControllerUI.taskName=\u0406\u043C\u043F\u043E\u0440\u0442 {0} +DesktopImportControllerUI.status.multiImportSuccess={0} \u0434\u0436\u0435\u0440\u0435\u043B \u0443\u0441\u043F\u0456\u0448\u043D\u043E \u0456\u043C\u043F\u043E\u0440\u0442\u043E\u0432\u0430\u043D\u043E +WizardVisualPanel1.title=\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044C \u041C\u0430\u0439\u0441\u0442\u0435\u0440 +DesktopImportControllerUI.processor.ui.dialog.title=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u043F\u0440\u043E\u0446\u0435\u0441\u043E\u0440\u0430 +ReportPanel.mergeStrategy.max=\u041C\u0430\u043A\u0441\u0438\u043C\u0443\u043C +ProcessorIssuesReportPanel.tab2ScrollPane.TabConstraints.tabTitle=\u0417\u0432\u0456\u0442 +ReportPanel.createMissingNodesCheckbox.toolTipText=\u0421\u0442\u0432\u043E\u0440\u0456\u0442\u044C \u0432\u0456\u0434\u0441\u0443\u0442\u043D\u0456 \u0432\u0443\u0437\u043B\u0438, \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u0456 \u044F\u043A \u0434\u0436\u0435\u0440\u0435\u043B\u043E \u0430\u0431\u043E \u0446\u0456\u043B\u044C \u043A\u0440\u0430\u0457\u0432 +ReportPanel.dynamicAttsLabel.text=\u0406 +ImportWizard.description_no_plugin_importers_installed=\u0406\u043C\u043F\u043E\u0440\u0442\u0435\u0440 \u043F\u043B\u0430\u0433\u0456\u043D\u0456\u0432 \u043D\u0435 \u0432\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E +WizardVisualPanel1.labelDescription.text=\u041E\u043F\u0438\u0441: +ProcessorIssuesReportPanel.tab1ScrollPane.TabConstraints.tabTitle=\u041F\u0438\u0442\u0430\u043D\u043D\u044F +DesktopImportControllerUI.multiImport.finishingImport=\u041E\u0431\u0440\u043E\u0431\u043A\u0430 {0} \u0434\u0436\u0435\u0440\u0435\u043B +ReportPanel.labelDynamicAtts.text=\u0414\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0456 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0438: +ReportPanel.mergeStrategy.no_merge=\u041D\u0435 \u0437\u043B\u0438\u0432\u0430\u0439\u0442\u0435 +ReportPanel.graphType.directed=\u0420\u0435\u0436\u0438\u0441\u0435\u0440 +ReportPanel.selfLoopCheckBox.text=\u0421\u0430\u043C\u043E\u0441\u0442\u0456\u0439\u043D\u0456 \u043F\u0435\u0442\u043B\u0456 +ImportWizard.error_no_matching_importer=\u0414\u043B\u044F \u0446\u044C\u043E\u0433\u043E \u0442\u0438\u043F\u0443 \u043C\u0430\u0439\u0441\u0442\u0440\u0430 \u043D\u0435 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E \u0456\u043C\u043F\u043E\u0440\u0442\u0435\u0440\u0430 +ReportPanel.no=\u043D\u0456 +DesktopImportControllerUI.status.importSuccess.default=\u0414\u0430\u043D\u0456 +ReportPanel.multigraphLabel.text=\u0406 +ReportPanel.labelSrc.text=\u0414\u0436\u0435\u0440\u0435\u043B\u043E: +ReportPanel.edgeCountLabel.text=\u0406 +ReportPanel.labelEdgeCount.text=\u041A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u0440\u0435\u0431\u0435\u0440: +ReportPanel.labelNodeCount.text=\u041A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u0432\u0443\u0437\u043B\u0456\u0432: +ReportPanel.labelDynamic.text=\u0414\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0438\u0439 \u0433\u0440\u0430\u0444\u0456\u043A: +ReportPanel.dynamicLabel.text=\u0406 +ReportPanel.labelGraphType.text=\u0422\u0438\u043F \u0433\u0440\u0430\u0444\u0456\u043A\u0430: +ReportPanel.tab2ScrollPane.TabConstraints.tabTitle=\u0417\u0432\u0456\u0442 +ReportPanel.autoscaleCheckbox.toolTipText=\u041C\u0430\u0441\u0448\u0442\u0430\u0431\u0443\u0439\u0442\u0435 \u0440\u043E\u0437\u043C\u0456\u0440 \u0432\u0443\u0437\u043B\u0430, \u043F\u043E\u043B\u043E\u0436\u0435\u043D\u043D\u044F \u0432\u0443\u0437\u043B\u0430 \u0442\u0430 \u0432\u0430\u0433\u0443 \u0440\u0435\u0431\u0440\u0430, \u0449\u043E\u0431 \u043E\u043F\u0442\u0438\u043C\u0456\u0437\u0443\u0432\u0430\u0442\u0438 \u043F\u0440\u043E\u0441\u0442\u0456\u0440 +ReportPanel.autoscaleCheckbox.text=\u0421\u0430\u043C\u043E\u043C\u0430\u0441\u0448\u0442\u0430\u0431 +ReportPanel.noIssues=\u041F\u0456\u0434 \u0447\u0430\u0441 \u0456\u043C\u043F\u043E\u0440\u0442\u0443 \u043F\u0440\u043E\u0431\u043B\u0435\u043C \u043D\u0435 \u0432\u0438\u044F\u0432\u043B\u0435\u043D\u043E +ReportPanel.yes=\u0442\u0430\u043A +ReportPanel.reportCopy.text=\u041A\u043E\u043F\u0456\u044E\u0432\u0430\u0442\u0438 +DesktopImportControllerUI.streamSource=\u041F\u043E\u0442\u0456\u043A {0} +DesktopImportControllerUI.error_no_matching_stream_importer=\u041D\u0435\u043C\u043E\u0436\u043B\u0438\u0432\u043E \u0437\u043D\u0430\u0439\u0442\u0438 \u0441\u0443\u043C\u0456\u0441\u043D\u0438\u0439 \u0456\u043C\u043F\u043E\u0440\u0442\u0435\u0440.\n\u041F\u043E\u0442\u0456\u043A \u043D\u0435 \u043F\u0456\u0434\u0442\u0440\u0438\u043C\u0443\u0454\u0442\u044C\u0441\u044F. +ReportPanel.selfLoopCheckBox.toolTipText=\u0414\u043E\u0437\u0432\u043E\u043B\u0438\u0442\u0438 \u0441\u0430\u043C\u043E\u0446\u0438\u043A\u043B\u0438 \u043D\u0430 \u0432\u0443\u0437\u043B\u0430\u0445 +ReportPanel.labelParallelEdgesMergeStrategy.text=\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0456\u044F \u0437\u043B\u0438\u0442\u0442\u044F \u043A\u0440\u0430\u0457\u0432: +ReportPanel.mergeStrategy.sum=\u0421\u0443\u043C\u0430 +ReportPanel.mergeStrategy.avg=\u0421\u0435\u0440\u0435\u0434\u043D\u0456\u0439 +ReportPanel.mergeStrategy.min=\u041C\u0456\u043D\u0456\u043C\u0443\u043C +ReportPanel.labelMultiGraph.text=\u041C\u0443\u043B\u044C\u0442\u0438\u0433\u0440\u0430\u0444: +ReportPanel.labelGraphCount.text=\u041A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u0433\u0440\u0430\u0444\u0456\u043A\u0456\u0432: +ReportPanel.graphCountLabel.text=\u0406 +CTL_ImportWizard=\u0406\u043C\u043F\u043E\u0440\u0442... +ProcessorIssuesReportPanel.title=\u041F\u0440\u043E\u0431\u043B\u0435\u043C\u0438 \u043F\u0456\u0441\u043B\u044F \u043F\u0440\u043E\u0446\u0435\u0441\u0443 \u0456\u043C\u043F\u043E\u0440\u0442\u0443 +ProcessorIssuesReportPanel.close=\u0417\u0430\u043A\u0440\u0438\u0442\u0438 +DesktopImportControllerUI.errorHandler.critical={0} \u043D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u0456\u043C\u043F\u043E\u0440\u0442\u0443\u0432\u0430\u0442\u0438 \u0447\u0435\u0440\u0435\u0437 \u0442\u0430\u043A\u0443 \u043F\u043E\u043C\u0438\u043B\u043A\u0443: {1} +ReportPanel.sourceLabel.text=\u0406 +ReportPanel.tab1ScrollPane.TabConstraints.tabTitle=\u041F\u0438\u0442\u0430\u043D\u043D\u044F +DesktopImportControllerUI.status.importSuccess={0} \u0443\u0441\u043F\u0456\u0448\u043D\u043E \u0456\u043C\u043F\u043E\u0440\u0442\u043E\u0432\u0430\u043D\u043E diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_zh_CN.properties b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_zh_CN.properties index 44a612ea13..d790119e86 100644 --- a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_zh_CN.properties +++ b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_zh_CN.properties @@ -1,64 +1,75 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:16+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - OpenIDE-Module-Short-Description=\u5728\u7528\u6237\u754c\u9762\u4e2d\u6574\u5408\u8f93\u5165\u7279\u6027 - CTL_ImportDB=\u8f93\u5165\u6570\u636e - ReportPanel.title=\u8f93\u5165\u62a5\u544a - ReportPanel.labelSrc.text=\u6e90\uff1a - +ReportPanel.sourceLabel.text= ReportPanel.tab1ScrollPane.TabConstraints.tabTitle=\u95ee\u9898 - -ReportPanel.labelEdgeCount.text=\#\u8fb9\uff1a - -ReportPanel.labelNodeCount.text=\#\u8282\u70b9\uff1a - +ReportPanel.nodeCountLabel.text= +ReportPanel.edgeCountLabel.text= +ReportPanel.labelEdgeCount.text=#\u8fb9\uff1a +ReportPanel.labelNodeCount.text=#\u8282\u70b9\uff1a ReportPanel.labelDynamic.text=\u52a8\u6001\u56fe\uff1a - -ReportPanel.dynamicLabel.text=NaN - +ReportPanel.dynamicLabel.text= ReportPanel.labelGraphType.text=\u56fe\u7684\u7c7b\u578b\uff1a - ReportPanel.tab2ScrollPane.TabConstraints.tabTitle=\u62a5\u544a - ReportPanel.autoscaleCheckbox.toolTipText=\u4ee5\u5408\u9002\u6bd4\u4f8b\u8c03\u6574\u8282\u70b9\u5927\u5c0f\u3001\u8282\u70b9\u4f4d\u7f6e\u548c\u8fb9\u7684\u6743\u91cd - ReportPanel.autoscaleCheckbox.text=\u81ea\u52a8\u8c03\u8282 - ReportPanel.noIssues=\u8f93\u5165\u65f6\u4e00\u5207\u6b63\u5e38 - ReportPanel.yes=\u662f - ReportPanel.no=\u5426 - -DesktopImportControllerUI.spigotSource=\u63a5\u53e3{0} - +ReportPanel.graphType.directed=\u6709\u5411\u7684 +ReportPanel.graphType.undirected=\u65e0\u5411\u7684 +ReportPanel.graphType.mixed=\u6df7\u5408\u7684 +ReportPanel.issueTable.issues=\u95ee\u9898 +ReportPanel.reportCopy.text=\u590d\u5236 +ReportPanel.reportCopy.description=\u590d\u5236\u5185\u5bb9\u5230\u526a\u8d34\u677f +DesktopImportControllerUI.wizardSource=\u5411\u5bfc {0} DesktopImportControllerUI.streamSource=\u6570\u636e\u6d41{0} - DesktopImportControllerUI.taskName=\u8f93\u5165{0} - DesktopImportControllerUI.database.ui.dialog.title=\u6570\u636e\u8bbe\u7f6e - DesktopImportControllerUI.status.importSuccess=\u6210\u529f\u8f93\u5165{0} - DesktopImportControllerUI.status.importSuccess.default=\u6570\u636e +DesktopImportControllerUI.status.multiImportSuccess=\u6210\u529f\u8f93\u5165{0} -DesktopImportControllerUI.error_no_matching_file_importer=\u6ca1\u627e\u5230\u517c\u5bb9\u7684\u8f93\u5165\u5668\u3002\u4e0d\u652f\u6301\u8f93\u5165\u7684\u6587\u4ef6\u683c\u5f0f\u3002\u68c0\u67e5\u6587\u4ef6\u7684\u6269\u5c55\u540d\u3002 - -DesktopImportControllerUI.error_no_matching_stream_importer=\u6ca1\u627e\u5230\u517c\u5bb9\u7684\u8f93\u5165\u5668\u3002\u4e0d\u652f\u6301\u6570\u636e\u6d41\u3002 - -DesktopImportControllerUI.error_no_matching_db_importer=\u6ca1\u627e\u5230\u517c\u5bb9\u7684\u8f93\u5165\u5668\u3002\u4e0d\u652f\u6301\u6570\u636e\u5e93\u3002 +# DesktopImportControllerUI.error_no_matching_file_importer = Impossible to find a compatible Importer.\nThe file format is not supported. Check file's extension. +# DesktopImportControllerUI.error_no_matching_stream_importer = Impossible to find a compatible Importer.\nThe stream is not supported. +# DesktopImportControllerUI.error_no_matching_db_importer = Impossible to find a compatible Importer.\nThe database is not supported. DesktopImportControllerUI.file.ui.dialog.title={0}\u8bbe\u7f6e - -DesktopImportControllerUI.spigot.ui.dialog.title={0}\u8bbe\u7f6e - +DesktopImportControllerUI.wizard.ui.dialog.title={0}\u8bbe\u7f6e DesktopImportControllerUI.processor.ui.dialog.title=\u5904\u7406\u5668\u8bbe\u7f6e - ReportPanel.createMissingNodesCheckbox.text=\u521b\u5efa\u4e22\u5931\u7684\u8282\u70b9 +ReportPanel.createMissingNodesCheckbox.toolTipText=\u521b\u5efa\u8fb9\u53d1\u73b0\u7f3a\u5c11\u6e90\u8282\u70b9\u6216\u76ee\u6807\u8282\u70b9 +ReportPanel.moreOptionsLink.text=\u9009\u9879\u2026\u2026 +ReportPanel.selfLoopCheckBox.text=\u81ea\u73af +ReportPanel.selfLoopCheckBox.toolTipText=\u5141\u8bb8\u8282\u70b9\u81ea\u73af +ReportPanel.labelParallelEdgesMergeStrategy.text=\u8FB9\u5408\u5E76\u7B56\u7565\uFF1A +ReportPanel.mergeStrategy.sum=\u603b\u548c +ReportPanel.mergeStrategy.avg=\u5e73\u5747 +ReportPanel.mergeStrategy.min=\u6700\u5C0F\u503C +ReportPanel.mergeStrategy.max=\u6700\u5927\u503C +# ReportPanel.mergeStrategy.first=First +# ReportPanel.mergeStrategy.last=Last +# ReportPanel.mergeStrategy.no_merge=Don't merge +ReportPanel.labelMultiGraph.text=\u591A\u56FE\uFF1A +ReportPanel.multigraphLabel.text= +ReportPanel.labelDynamicAtts.text=\u52A8\u6001\u5C5E\u6027\uFF1A +ReportPanel.dynamicAttsLabel.text= +ReportPanel.labelGraphCount.text=#\u8282\u70b9\uff1a +ReportPanel.graphCountLabel.text= +ReportPanel.multiSourceLabel.text=\u591a\u4e2a\u6e90 +CTL_ImportWizard=\u5BFC\u5165\u2026 +ImportWizard.wizard.title=\u5bfc\u5165\u5411\u5bfc +ImportWizard.error_no_matching_importer=\u6ca1\u6709\u627e\u5230\u8fd9\u79cd\u7c7b\u578b\u7684\u5411\u5bfc +# ImportWizard.description_no_plugin_importers_installed = No plugin importers installed + +WizardVisualPanel1.title=\u5bfc\u5165\u5411\u5bfc +WizardVisualPanel1.labelCategory.text=\u5206\u7c7b\uff1a +WizardVisualPanel1.labelWizard.text=\u5411\u5BFC\u7C7B\u578B\uFF1A +WizardVisualPanel1.labelDescription.text=\u8bf4\u660e\uff1a + +# ProcessorIssuesReportPanel.title=Issues after import process +# ProcessorIssuesReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Report +# ProcessorIssuesReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Issues +# ProcessorIssuesReportPanel.close=Close + diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_zh_TW.properties b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_zh_TW.properties new file mode 100644 index 0000000000..023732c214 --- /dev/null +++ b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/Bundle_zh_TW.properties @@ -0,0 +1,70 @@ +OpenIDE-Module-Short-Description=Integrate import features in UI +CTL_ImportDB=Import Database +ReportPanel.title=Import report +ReportPanel.labelSrc.text=Source: +ReportPanel.sourceLabel.text= +ReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Issues +ReportPanel.nodeCountLabel.text= +ReportPanel.edgeCountLabel.text= +ReportPanel.labelEdgeCount.text=# of Edges: +ReportPanel.labelNodeCount.text=# of Nodes: +ReportPanel.labelDynamic.text=Dynamic Graph: +ReportPanel.dynamicLabel.text= +ReportPanel.labelGraphType.text=Graph Type: +ReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Report +ReportPanel.autoscaleCheckbox.toolTipText=Scale node size, node position and edge weight to fill the space in an optimized way +ReportPanel.autoscaleCheckbox.text=Auto-scale +ReportPanel.noIssues=No issue found during import +ReportPanel.yes=yes +ReportPanel.no=no +ReportPanel.graphType.directed=\u6709\u5411\u6027 +ReportPanel.graphType.undirected=\u7121\u5411\u6027 +ReportPanel.graphType.mixed=Mixed +ReportPanel.issueTable.issues=Issues +ReportPanel.reportCopy.text=Copy +ReportPanel.reportCopy.description=Copy content to clipboard +DesktopImportControllerUI.wizardSource=Wizard {0} +DesktopImportControllerUI.streamSource=Stream {0} +DesktopImportControllerUI.taskName=Import {0} +DesktopImportControllerUI.database.ui.dialog.title=Database settings +DesktopImportControllerUI.status.importSuccess={0} successfully imported +DesktopImportControllerUI.status.importSuccess.default=Data +DesktopImportControllerUI.status.multiImportSuccess={0} sources successfully imported +DesktopImportControllerUI.error_no_matching_file_importer=Impossible to find a compatible Importer.\nThe file format is not supported. Check file's extension. +DesktopImportControllerUI.error_no_matching_stream_importer=Impossible to find a compatible Importer.\nThe stream is not supported. +DesktopImportControllerUI.error_no_matching_db_importer=Impossible to find a compatible Importer.\nThe database is not supported. +DesktopImportControllerUI.file.ui.dialog.title={0} settings +DesktopImportControllerUI.wizard.ui.dialog.title={0} settings +DesktopImportControllerUI.processor.ui.dialog.title=Processor settings +ReportPanel.createMissingNodesCheckbox.text=Create missing nodes +ReportPanel.createMissingNodesCheckbox.toolTipText=Create missing nodes found as edges' source or target +ReportPanel.moreOptionsLink.text=More options... +ReportPanel.selfLoopCheckBox.text=Self-loops +ReportPanel.selfLoopCheckBox.toolTipText=Allow self-loops on nodes +ReportPanel.labelParallelEdgesMergeStrategy.text=Edges merge strategy: +ReportPanel.mergeStrategy.sum=Sum +ReportPanel.mergeStrategy.avg=Average +ReportPanel.mergeStrategy.min=Minimum +ReportPanel.mergeStrategy.max=Maximum +ReportPanel.mergeStrategy.first=First +ReportPanel.mergeStrategy.last=Last +ReportPanel.mergeStrategy.no_merge=Don't merge +ReportPanel.labelMultiGraph.text=Multi Graph: +ReportPanel.multigraphLabel.text= +ReportPanel.labelDynamicAtts.text=Dynamic Attributes: +ReportPanel.dynamicAttsLabel.text= +ReportPanel.labelGraphCount.text=# of Graphs: +ReportPanel.graphCountLabel.text= +ReportPanel.multiSourceLabel.text=Multiple sources +CTL_ImportWizard=Import... +ImportWizard.wizard.title=Import Wizard +ImportWizard.error_no_matching_importer=No importer can be found for this type of Wizard +ImportWizard.description_no_plugin_importers_installed=No plugin importers installed +WizardVisualPanel1.title=Select Wizard +WizardVisualPanel1.labelCategory.text=Category: +WizardVisualPanel1.labelWizard.text=Wizard Type: +WizardVisualPanel1.labelDescription.text=Description: +ProcessorIssuesReportPanel.title=Issues after import process +ProcessorIssuesReportPanel.tab2ScrollPane.TabConstraints.tabTitle=Report +ProcessorIssuesReportPanel.tab1ScrollPane.TabConstraints.tabTitle=Issues +ProcessorIssuesReportPanel.close=Close diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/cs.po b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/cs.po deleted file mode 100644 index ac95c59d43..0000000000 --- a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/cs.po +++ /dev/null @@ -1,112 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-26 15:25+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ZavΓ©st funkce importu v rozhranΓ­" - -msgid "CTL_ImportDB" -msgstr "Importovat databΓ‘zi" - -msgid "ReportPanel.title" -msgstr "Importovat zΓ‘znam" - -msgid "ReportPanel.labelSrc.text" -msgstr "Zdroj:" - -msgid "ReportPanel.tab1ScrollPane.TabConstraints.tabTitle" -msgstr "ProblΓ©my" - -msgid "ReportPanel.labelEdgeCount.text" -msgstr "Pč. hran:" - -msgid "ReportPanel.labelNodeCount.text" -msgstr "Pč. uzlΕ―:" - -msgid "ReportPanel.labelDynamic.text" -msgstr "DynamickΓ½ graf:" - -msgid "ReportPanel.labelHierarchical.text" -msgstr "HierarchickΓ½ graf:" - -msgid "ReportPanel.dynamicLabel.text" -msgstr "NaN" - -msgid "ReportPanel.hierarchicalLabel.text" -msgstr "NaN" - -msgid "ReportPanel.labelGraphType.text" -msgstr "Typ grafu:" - -msgid "ReportPanel.tab2ScrollPane.TabConstraints.tabTitle" -msgstr "ZΓ‘znam" - -msgid "ReportPanel.autoscaleCheckbox.toolTipText" -msgstr "ZmΔ›nit velikost uzlu, jeho umΓ­stΔ›nΓ­ a vΓ‘hu hrany, aby byl prostor vyplnΔ›n optimalizovanΓ½m zpΕ―sobem" - -msgid "ReportPanel.autoscaleCheckbox.text" -msgstr "Auto-pΕ™izpΕ―sobit" - -msgid "ReportPanel.noIssues" -msgstr "BΔ›hem importu nedoΕ‘lo k problΓ©mΕ―m" - -msgid "ReportPanel.yes" -msgstr "ano" - -msgid "ReportPanel.no" -msgstr "ne" - -msgid "DesktopImportControllerUI.spigotSource" -msgstr "Čep {0}" - -msgid "DesktopImportControllerUI.streamSource" -msgstr "Proud {0}" - -msgid "DesktopImportControllerUI.taskName" -msgstr "Importovat {0}" - -msgid "DesktopImportControllerUI.database.ui.dialog.title" -msgstr "NastavenΓ­ databΓ‘ze" - -msgid "DesktopImportControllerUI.status.importSuccess" -msgstr "{0} ΓΊspΔ›Ε‘nΔ› importovΓ‘no" - -msgid "DesktopImportControllerUI.status.importSuccess.default" -msgstr "Data" - -msgid "DesktopImportControllerUI.error_no_matching_file_importer" -msgstr "Nelze najΓ­t kompatibilnΓ­ho importΓ©ra.\nFormΓ‘t souboru nenΓ­ podporovΓ‘n. Zkontrolujte pΕ™Γ­ponu souboru." - -msgid "DesktopImportControllerUI.error_no_matching_stream_importer" -msgstr "Nelze najΓ­t kompatibilnΓ­ho importΓ©ra.\nProud nenΓ­ podporovΓ‘n." - -msgid "DesktopImportControllerUI.error_no_matching_db_importer" -msgstr "Nelze najΓ­t kompatibilnΓ­ho importΓ©ra.\nDatabΓ‘ze nenΓ­ podporovΓ‘na." - -msgid "DesktopImportControllerUI.file.ui.dialog.title" -msgstr "NastavenΓ­ {0}" - -msgid "DesktopImportControllerUI.spigot.ui.dialog.title" -msgstr "NastavenΓ­ {0}" - -msgid "DesktopImportControllerUI.processor.ui.dialog.title" -msgstr "NastavenΓ­ procesoru" - -msgid "ReportPanel.createMissingNodesCheckbox.text" -msgstr "VytvoΕ™it chybΔ›jΓ­cΓ­ uzly" diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/es.po b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/es.po deleted file mode 100644 index 0ff34874af..0000000000 --- a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/es.po +++ /dev/null @@ -1,113 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-31 12:40+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Integrar caracterΓ­sticas de importaciΓ³n en la interfaz de usuario" - -msgid "CTL_ImportDB" -msgstr "Importar base de datos" - -msgid "ReportPanel.title" -msgstr "Informe de importaciΓ³n" - -msgid "ReportPanel.labelSrc.text" -msgstr "Fuente:" - -msgid "ReportPanel.tab1ScrollPane.TabConstraints.tabTitle" -msgstr "Notificaciones" - -msgid "ReportPanel.labelEdgeCount.text" -msgstr "# de aristas:" - -msgid "ReportPanel.labelNodeCount.text" -msgstr "# de nodos:" - -msgid "ReportPanel.labelDynamic.text" -msgstr "Grafo dinΓ‘mico:" - -msgid "ReportPanel.labelHierarchical.text" -msgstr "Grafo jerΓ‘rquico:" - -msgid "ReportPanel.dynamicLabel.text" -msgstr "NaN" - -msgid "ReportPanel.hierarchicalLabel.text" -msgstr "NaN" - -msgid "ReportPanel.labelGraphType.text" -msgstr "Tipo de grafo:" - -msgid "ReportPanel.tab2ScrollPane.TabConstraints.tabTitle" -msgstr "Informe" - -msgid "ReportPanel.autoscaleCheckbox.toolTipText" -msgstr "Escalar el tamaΓ±o y posiciΓ³n de los nodos y peso de las aristas para llenar el espacio de forma Γ³ptima." - -msgid "ReportPanel.autoscaleCheckbox.text" -msgstr "Auto-escalar" - -msgid "ReportPanel.noIssues" -msgstr "No se encontraron problemas durante la importaciΓ³n" - -msgid "ReportPanel.yes" -msgstr "si" - -msgid "ReportPanel.no" -msgstr "no" - -msgid "DesktopImportControllerUI.spigotSource" -msgstr "Spigot {0}" - -msgid "DesktopImportControllerUI.streamSource" -msgstr "Stream {0}" - -msgid "DesktopImportControllerUI.taskName" -msgstr "ImportaciΓ³n {0}" - -msgid "DesktopImportControllerUI.database.ui.dialog.title" -msgstr "ConfiguraciΓ³n de la base de datos" - -msgid "DesktopImportControllerUI.status.importSuccess" -msgstr "{0} importados con Γ©xito" - -msgid "DesktopImportControllerUI.status.importSuccess.default" -msgstr "Datos" - -msgid "DesktopImportControllerUI.error_no_matching_file_importer" -msgstr "Imposible encontrar un importador compatible.\nEl formato de archivo no estΓ‘ soportado. Comprueba la extensiΓ³n del archivo." - -msgid "DesktopImportControllerUI.error_no_matching_stream_importer" -msgstr "Imposible encontrar un importador compatible.\nEl flujo no estΓ‘ soportado." - -msgid "DesktopImportControllerUI.error_no_matching_db_importer" -msgstr "Imposible encontrar un importador compatible.\nLa base de datos no estΓ‘ soportada." - -msgid "DesktopImportControllerUI.file.ui.dialog.title" -msgstr "{0} preferencias" - -msgid "DesktopImportControllerUI.spigot.ui.dialog.title" -msgstr "{0} preferencias" - -msgid "DesktopImportControllerUI.processor.ui.dialog.title" -msgstr "Preferencias del procesador" - -msgid "ReportPanel.createMissingNodesCheckbox.text" -msgstr "Crear nodos faltantes" diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/fr.po b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/fr.po deleted file mode 100644 index 18798afea2..0000000000 --- a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/fr.po +++ /dev/null @@ -1,113 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-31 12:54+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "IntΓ¨gre les fonctionnalitΓ©s d'import dans l'interface utilisateur" - -msgid "CTL_ImportDB" -msgstr "Import de base de donnΓ©es" - -msgid "ReportPanel.title" -msgstr "Rapport d'import" - -msgid "ReportPanel.labelSrc.text" -msgstr "Source:" - -msgid "ReportPanel.tab1ScrollPane.TabConstraints.tabTitle" -msgstr "Notifications" - -msgid "ReportPanel.labelEdgeCount.text" -msgstr "# de liens:" - -msgid "ReportPanel.labelNodeCount.text" -msgstr "# de noeuds:" - -msgid "ReportPanel.labelDynamic.text" -msgstr "Graphe dynamique:" - -msgid "ReportPanel.labelHierarchical.text" -msgstr "Graphe hiΓ©rarchique:" - -msgid "ReportPanel.dynamicLabel.text" -msgstr "NaN" - -msgid "ReportPanel.hierarchicalLabel.text" -msgstr "NaN" - -msgid "ReportPanel.labelGraphType.text" -msgstr "Type du graphe:" - -msgid "ReportPanel.tab2ScrollPane.TabConstraints.tabTitle" -msgstr "Rapport" - -msgid "ReportPanel.autoscaleCheckbox.toolTipText" -msgstr "Mettre Γ  l'Γ©chelle la taille et la position des noeuds, ainsi que le poids des liens pour remplir efficacement l'espace." - -msgid "ReportPanel.autoscaleCheckbox.text" -msgstr "Γ‰chelle auto" - -msgid "ReportPanel.noIssues" -msgstr "Aucune erreur durant l'import" - -msgid "ReportPanel.yes" -msgstr "oui" - -msgid "ReportPanel.no" -msgstr "non" - -msgid "DesktopImportControllerUI.spigotSource" -msgstr "Tuyaux {0}" - -msgid "DesktopImportControllerUI.streamSource" -msgstr "Flux {0}" - -msgid "DesktopImportControllerUI.taskName" -msgstr "Import {0}" - -msgid "DesktopImportControllerUI.database.ui.dialog.title" -msgstr "ParamΓ¨tres de base de donnΓ©es" - -msgid "DesktopImportControllerUI.status.importSuccess" -msgstr "{0} importΓ© avec succΓ¨s" - -msgid "DesktopImportControllerUI.status.importSuccess.default" -msgstr "DonnΓ©es" - -msgid "DesktopImportControllerUI.error_no_matching_file_importer" -msgstr "Impossible de trouver un importeur compatible.\nLe format de fichier n'est pas supportΓ©. Veuillez vΓ©rifier son extension." - -msgid "DesktopImportControllerUI.error_no_matching_stream_importer" -msgstr "Impossible de trouver un importeur compatible.\nLe flux n'est pas supportΓ©." - -msgid "DesktopImportControllerUI.error_no_matching_db_importer" -msgstr "Impossible de trouver un importeur compatible.\nLa base de donnΓ©es n'est pas supportΓ©e." - -msgid "DesktopImportControllerUI.file.ui.dialog.title" -msgstr "ParamΓ¨tres {0}" - -msgid "DesktopImportControllerUI.spigot.ui.dialog.title" -msgstr "ParamΓ¨tres {0}" - -msgid "DesktopImportControllerUI.processor.ui.dialog.title" -msgstr "ParamΓ¨tres du processeur" - -msgid "ReportPanel.createMissingNodesCheckbox.text" -msgstr "CrΓ©er les noeuds manquants" diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/ja.po b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/ja.po deleted file mode 100644 index 3e8dc71acb..0000000000 --- a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/ja.po +++ /dev/null @@ -1,112 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-03 03:06+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "UIγγ‚€γƒ³γƒγƒΌγƒˆζ©Ÿθƒ½γ‚’η΅±εˆ" - -msgid "CTL_ImportDB" -msgstr "γƒ‡γƒΌγ‚Ώγƒ™γƒΌγ‚Ήγ‚’γ‚€γƒ³γƒγƒΌγƒˆ" - -msgid "ReportPanel.title" -msgstr "ε ±ε‘Šγ‚’γ‚€γƒ³γƒγƒΌγƒˆ" - -msgid "ReportPanel.labelSrc.text" -msgstr "γ‚½γƒΌγ‚Ή:" - -msgid "ReportPanel.tab1ScrollPane.TabConstraints.tabTitle" -msgstr "ε•ι‘Œη‚Ή" - -msgid "ReportPanel.labelEdgeCount.text" -msgstr "θΎΊγζ•°:" - -msgid "ReportPanel.labelNodeCount.text" -msgstr "γƒŽγƒΌγƒ‰ζ•°:" - -msgid "ReportPanel.labelDynamic.text" -msgstr "γƒ€γ‚€γƒŠγƒŸγƒƒγ‚―γ‚°γƒ©γƒ•:" - -msgid "ReportPanel.labelHierarchical.text" -msgstr "ιšŽε±€γ‚°γƒ©γƒ•:" - -msgid "ReportPanel.dynamicLabel.text" -msgstr "NaN" - -msgid "ReportPanel.hierarchicalLabel.text" -msgstr "NaN" - -msgid "ReportPanel.labelGraphType.text" -msgstr "グラフγη¨ι‘ž:" - -msgid "ReportPanel.tab2ScrollPane.TabConstraints.tabTitle" -msgstr "ε ±ε‘Š" - -msgid "ReportPanel.autoscaleCheckbox.toolTipText" -msgstr "ζœ€ι©γͺζ–Ήζ³•γ§η©Ίη™½γ‚’εŸ‹γ‚γ‚‹γŸγ‚γ«θ¦ζ¨‘γγƒŽγƒΌγƒ‰γγ‚΅γ‚€γ‚Ίγ€γƒŽγƒΌγƒ‰γδ½η½γ¨θΎΊγι‡γΏγ‚’見積もる" - -msgid "ReportPanel.autoscaleCheckbox.text" -msgstr "θ‡ͺ動スケール" - -msgid "ReportPanel.noIssues" -msgstr "γ‚€γƒ³γƒγƒΌγƒˆδΈ­γ«ε•ι‘Œη‚Ήγ―θ¦‹γ€γ‹γ‚ŠγΎγ›γ‚“γ§γ—γŸ" - -msgid "ReportPanel.yes" -msgstr "はい" - -msgid "ReportPanel.no" -msgstr "γ„γ„γˆ" - -msgid "DesktopImportControllerUI.spigotSource" -msgstr "γ‚Ήγƒ”γ‚΄γƒƒγƒˆ{0}" - -msgid "DesktopImportControllerUI.streamSource" -msgstr "γ‚ΉγƒˆγƒͺγƒΌγƒ {0}" - -msgid "DesktopImportControllerUI.taskName" -msgstr "γ‚€γƒ³γƒγƒΌγƒˆ{0}" - -msgid "DesktopImportControllerUI.database.ui.dialog.title" -msgstr "データベース設εš" - -msgid "DesktopImportControllerUI.status.importSuccess" -msgstr "{0} γ‚€γƒ³γƒγƒΌγƒˆζˆεŠŸ" - -msgid "DesktopImportControllerUI.status.importSuccess.default" -msgstr "データ" - -msgid "DesktopImportControllerUI.error_no_matching_file_importer" -msgstr "互換性γγ‚γ‚‹γ‚€γƒ³γƒγƒΌγ‚ΏγŒθ¦‹γ€γ‹γ‚ŠγΎγ›γ‚“γ€‚γγγƒ•γ‚‘γ‚€γƒ«ε½’εΌγ―γ‚΅γƒγƒΌγƒˆγ•γ‚Œγ¦γ„γΎγ›γ‚“γ€‚γƒ•γ‚‘γ‚€γƒ«γζ‹‘弡子を璺θͺγ—てください。" - -msgid "DesktopImportControllerUI.error_no_matching_stream_importer" -msgstr "互換性γγ‚γ‚‹γ‚€γƒ³γƒγƒΌγ‚ΏγŒθ¦‹γ€γ‹γ‚ŠγΎγ›γ‚“γ€‚γγγ‚ΉγƒˆγƒͺγƒΌγƒ γ―γ‚΅γƒγƒΌγƒˆγ•γ‚Œγ¦γ„γΎγ›γ‚“γ€‚" - -msgid "DesktopImportControllerUI.error_no_matching_db_importer" -msgstr "互換性γγ‚γ‚‹γ‚€γƒ³γƒγƒΌγ‚ΏγŒθ¦‹γ€γ‹γ‚ŠγΎγ›γ‚“γ€‚γγγƒ‡γƒΌγ‚Ώγƒ™γƒΌγ‚Ήγ―γ‚΅γƒγƒΌγƒˆγ•γ‚Œγ¦γ„γΎγ›γ‚“γ€‚" - -msgid "DesktopImportControllerUI.file.ui.dialog.title" -msgstr "{0} θ¨­εš" - -msgid "DesktopImportControllerUI.spigot.ui.dialog.title" -msgstr "{0} θ¨­εš" - -msgid "DesktopImportControllerUI.processor.ui.dialog.title" -msgstr "プロセッァ設εš" - -msgid "ReportPanel.createMissingNodesCheckbox.text" -msgstr "ζ¬ θ½γƒŽγƒΌγƒ‰γ‚’η”Ÿζˆ" diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/org-gephi-desktop-importer.pot b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/org-gephi-desktop-importer.pot deleted file mode 100644 index 29786ed656..0000000000 --- a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/org-gephi-desktop-importer.pot +++ /dev/null @@ -1,117 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Integrate import features in UI" - -msgid "CTL_ImportDB" -msgstr "Import Database" - -msgid "ReportPanel.title" -msgstr "Import report" - -msgid "ReportPanel.labelSrc.text" -msgstr "Source:" - -msgid "ReportPanel.tab1ScrollPane.TabConstraints.tabTitle" -msgstr "Issues" - -msgid "ReportPanel.labelEdgeCount.text" -msgstr "# of Edges:" - -msgid "ReportPanel.labelNodeCount.text" -msgstr "# of Nodes:" - -msgid "ReportPanel.labelDynamic.text" -msgstr "Dynamic Graph:" - -msgid "ReportPanel.labelHierarchical.text" -msgstr "Hierarchical Graph:" - -msgid "ReportPanel.dynamicLabel.text" -msgstr "NaN" - -msgid "ReportPanel.hierarchicalLabel.text" -msgstr "NaN" - -msgid "ReportPanel.labelGraphType.text" -msgstr "Graph Type:" - -msgid "ReportPanel.tab2ScrollPane.TabConstraints.tabTitle" -msgstr "Report" - -msgid "ReportPanel.autoscaleCheckbox.toolTipText" -msgstr "" -"Scale node size, node position and edge weight to fill the space in an " -"optimized way" - -msgid "ReportPanel.autoscaleCheckbox.text" -msgstr "Auto-scale" - -msgid "ReportPanel.noIssues" -msgstr "No issue found during import" - -msgid "ReportPanel.yes" -msgstr "yes" - -msgid "ReportPanel.no" -msgstr "no" - -msgid "DesktopImportControllerUI.spigotSource" -msgstr "Spigot {0}" - -msgid "DesktopImportControllerUI.streamSource" -msgstr "Stream {0}" - -msgid "DesktopImportControllerUI.taskName" -msgstr "Import {0}" - -msgid "DesktopImportControllerUI.database.ui.dialog.title" -msgstr "Database settings" - -msgid "DesktopImportControllerUI.status.importSuccess" -msgstr "{0} successfully imported" - -msgid "DesktopImportControllerUI.status.importSuccess.default" -msgstr "Data" - -msgid "DesktopImportControllerUI.error_no_matching_file_importer" -msgstr "" -"Impossible to find a compatible Importer.\n" -"The file format is not supported. Check file's extension." - -msgid "DesktopImportControllerUI.error_no_matching_stream_importer" -msgstr "" -"Impossible to find a compatible Importer.\n" -"The stream is not supported." - -msgid "DesktopImportControllerUI.error_no_matching_db_importer" -msgstr "" -"Impossible to find a compatible Importer.\n" -"The database is not supported." - -msgid "DesktopImportControllerUI.file.ui.dialog.title" -msgstr "{0} settings" - -msgid "DesktopImportControllerUI.spigot.ui.dialog.title" -msgstr "{0} settings" - -msgid "DesktopImportControllerUI.processor.ui.dialog.title" -msgstr "Processor settings" - -msgid "ReportPanel.createMissingNodesCheckbox.text" -msgstr "Create missing nodes" diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/pt_BR.po b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/pt_BR.po deleted file mode 100644 index 04c045d08b..0000000000 --- a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/pt_BR.po +++ /dev/null @@ -1,112 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 17:44+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Integrar recursos de importaΓ§Γ£o Γ  interface de usuΓ‘rio" - -msgid "CTL_ImportDB" -msgstr "Importar banco de dados" - -msgid "ReportPanel.title" -msgstr "RelatΓ³rio de importaΓ§Γ£o" - -msgid "ReportPanel.labelSrc.text" -msgstr "Fonte:" - -msgid "ReportPanel.tab1ScrollPane.TabConstraints.tabTitle" -msgstr "NotificaΓ§Γ΅es" - -msgid "ReportPanel.labelEdgeCount.text" -msgstr "NΒΊ de arestas:" - -msgid "ReportPanel.labelNodeCount.text" -msgstr "NΒΊ de nΓ³s:" - -msgid "ReportPanel.labelDynamic.text" -msgstr "Grafo dinΓ’mico:" - -msgid "ReportPanel.labelHierarchical.text" -msgstr "Grafo hierΓ‘rquico:" - -msgid "ReportPanel.dynamicLabel.text" -msgstr "NaN" - -msgid "ReportPanel.hierarchicalLabel.text" -msgstr "NaN" - -msgid "ReportPanel.labelGraphType.text" -msgstr "Tipo de grafo:" - -msgid "ReportPanel.tab2ScrollPane.TabConstraints.tabTitle" -msgstr "RelatΓ³rio" - -msgid "ReportPanel.autoscaleCheckbox.toolTipText" -msgstr "Escalonar o tamanho do nΓ³ e sua posiΓ§Γ£o e o peso da aresta para preencher o espaΓ§o de forma otimizada" - -msgid "ReportPanel.autoscaleCheckbox.text" -msgstr "Escala automΓ‘tica" - -msgid "ReportPanel.noIssues" -msgstr "Nenhum problema encontrado durante a importaΓ§Γ£o" - -msgid "ReportPanel.yes" -msgstr "sim" - -msgid "ReportPanel.no" -msgstr "nΓ£o" - -msgid "DesktopImportControllerUI.spigotSource" -msgstr "Spigot {0}" - -msgid "DesktopImportControllerUI.streamSource" -msgstr "Fluxo {0}" - -msgid "DesktopImportControllerUI.taskName" -msgstr "Importar {0}" - -msgid "DesktopImportControllerUI.database.ui.dialog.title" -msgstr "ConfiguraΓ§Γ΅es do banco de dados" - -msgid "DesktopImportControllerUI.status.importSuccess" -msgstr "{0} importado com sucesso" - -msgid "DesktopImportControllerUI.status.importSuccess.default" -msgstr "Dados" - -msgid "DesktopImportControllerUI.error_no_matching_file_importer" -msgstr "ImpossΓ­vel encontrar um Importador compatΓ­vel. O formato de arquivo nΓ£o Γ© suportado. Verificar a extensΓ£o do arquivo." - -msgid "DesktopImportControllerUI.error_no_matching_stream_importer" -msgstr "ImpossΓ­vel encontrar um Importador compatΓ­vel. O fluxo nΓ£o Γ© suportado. Verificar a extensΓ£o do arquivo." - -msgid "DesktopImportControllerUI.error_no_matching_db_importer" -msgstr "ImpossΓ­vel encontrar um Importador compatΓ­vel. O banco de dados nΓ£o Γ© suportado." - -msgid "DesktopImportControllerUI.file.ui.dialog.title" -msgstr "{0} configuraΓ§Γ΅es " - -msgid "DesktopImportControllerUI.spigot.ui.dialog.title" -msgstr "{0} configuraΓ§Γ΅es " - -msgid "DesktopImportControllerUI.processor.ui.dialog.title" -msgstr "ConfiguraΓ§Γ΅es do processador" - -msgid "ReportPanel.createMissingNodesCheckbox.text" -msgstr "Criar nΓ³s faltantes" diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/resources/critical.png b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/resources/critical.png deleted file mode 100644 index 3bbbb4a0d3..0000000000 Binary files a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/resources/critical.png and /dev/null differ diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/resources/info.png b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/resources/info.png deleted file mode 100644 index 09d6d4a166..0000000000 Binary files a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/resources/info.png and /dev/null differ diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/resources/severe.png b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/resources/severe.png deleted file mode 100644 index e6bafc0fb3..0000000000 Binary files a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/resources/severe.png and /dev/null differ diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/resources/warning.gif b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/resources/warning.gif deleted file mode 100644 index 518bc52784..0000000000 Binary files a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/resources/warning.gif and /dev/null differ diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/ru.po b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/ru.po deleted file mode 100644 index a473dcd5aa..0000000000 --- a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/ru.po +++ /dev/null @@ -1,112 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-07 12:06+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Integrate import features in UI" - -msgid "CTL_ImportDB" -msgstr "Π˜ΠΌΠΏΠΎΡ€Ρ‚ Π‘Π£Π‘Π”" - -msgid "ReportPanel.title" -msgstr "ΠžΡ‚Ρ‡Ρ‘Ρ‚ ΠΎΠ± ΠΈΠΌΠΏΠΎΡ€Ρ‚Π΅" - -msgid "ReportPanel.labelSrc.text" -msgstr "Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ:" - -msgid "ReportPanel.tab1ScrollPane.TabConstraints.tabTitle" -msgstr "ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹" - -msgid "ReportPanel.labelEdgeCount.text" -msgstr "# Ρ€Ρ‘Π±Π΅Ρ€:" - -msgid "ReportPanel.labelNodeCount.text" -msgstr "# ΡƒΠ·Π»ΠΎΠ²:" - -msgid "ReportPanel.labelDynamic.text" -msgstr "ДинамичСский Π³Ρ€Π°Ρ„:" - -msgid "ReportPanel.labelHierarchical.text" -msgstr "Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ‡Π΅ΡΠΊΠΈΠΉ Π³Ρ€Π°Ρ„:" - -msgid "ReportPanel.dynamicLabel.text" -msgstr "NaN" - -msgid "ReportPanel.hierarchicalLabel.text" -msgstr "NaN" - -msgid "ReportPanel.labelGraphType.text" -msgstr "Π’ΠΈΠΏ Π³Ρ€Π°Ρ„Π°:" - -msgid "ReportPanel.tab2ScrollPane.TabConstraints.tabTitle" -msgstr "ΠžΡ‚Ρ‡Ρ‘Ρ‚" - -msgid "ReportPanel.autoscaleCheckbox.toolTipText" -msgstr "ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹ ΠΈ полоТСния ΡƒΠ·Π»ΠΎΠ², Π° Ρ‚Π°ΠΊΠΆΠ΅ вСса Ρ€Ρ‘Π±Π΅Ρ€ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ ΡƒΠΊΠ»Π°Π΄ΠΊΠΈ" - -msgid "ReportPanel.autoscaleCheckbox.text" -msgstr "Авто-ΠΌΠ°ΡΡˆΡ‚Π°Π±" - -msgid "ReportPanel.noIssues" -msgstr "Π’ΠΎ врСмя импортирования Π½Π΅ Π²ΠΎΠ·Π½ΠΈΠΊΠ»ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ" - -msgid "ReportPanel.yes" -msgstr "Π΄Π°" - -msgid "ReportPanel.no" -msgstr "Π½Π΅Ρ‚" - -msgid "DesktopImportControllerUI.spigotSource" -msgstr "Π’ΠΈΠΏ источника {0}" - -msgid "DesktopImportControllerUI.streamSource" -msgstr "ΠŸΠΎΡ‚ΠΎΠΊ {0}" - -msgid "DesktopImportControllerUI.taskName" -msgstr "Π˜ΠΌΠΏΠΎΡ€Ρ‚ {0}" - -msgid "DesktopImportControllerUI.database.ui.dialog.title" -msgstr "Настройки Π‘Π£Π‘Π”" - -msgid "DesktopImportControllerUI.status.importSuccess" -msgstr "Π˜ΠΌΠΏΠΎΡ€Ρ‚ {0} ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΡ‘Π½" - -msgid "DesktopImportControllerUI.status.importSuccess.default" -msgstr "Π”Π°Π½Π½Ρ‹Π΅" - -msgid "DesktopImportControllerUI.error_no_matching_file_importer" -msgstr "НС ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π½Π°ΠΉΡ‚ΠΈ совмСстимый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π˜ΠΌΠΏΠΎΡ€Ρ‚Π°.\nΠ€ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„Π°ΠΉΠ»Π° Π½Π΅ поддСрТиваСтся. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°." - -msgid "DesktopImportControllerUI.error_no_matching_stream_importer" -msgstr "НС ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π½Π°ΠΉΡ‚ΠΈ совмСстимый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π˜ΠΌΠΏΠΎΡ€Ρ‚Π°.\nΠŸΠΎΡ‚ΠΎΠΊ Π½Π΅ поддСрТиваСтся." - -msgid "DesktopImportControllerUI.error_no_matching_db_importer" -msgstr "НС ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π½Π°ΠΉΡ‚ΠΈ совмСстимый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π˜ΠΌΠΏΠΎΡ€Ρ‚Π°.\nΠ‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ поддСрТиваСтся." - -msgid "DesktopImportControllerUI.file.ui.dialog.title" -msgstr "{0} настройки" - -msgid "DesktopImportControllerUI.spigot.ui.dialog.title" -msgstr "{0} настройки" - -msgid "DesktopImportControllerUI.processor.ui.dialog.title" -msgstr "Настройки процСссинга" - -msgid "ReportPanel.createMissingNodesCheckbox.text" -msgstr "Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΡƒΠ·Π»Ρ‹" diff --git a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/zh_CN.po b/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/zh_CN.po deleted file mode 100644 index d636834968..0000000000 --- a/modules/DesktopImport/src/main/resources/org/gephi/desktop/importer/zh_CN.po +++ /dev/null @@ -1,111 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:16+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "εœ¨η”¨ζˆ·η•Œι’δΈ­ζ•΄εˆθΎ“ε…₯η‰Ήζ€§" - -msgid "CTL_ImportDB" -msgstr "θΎ“ε…₯ζ•°ζ" - -msgid "ReportPanel.title" -msgstr "θΎ“ε…₯ζŠ₯ε‘Š" - -msgid "ReportPanel.labelSrc.text" -msgstr "源:" - -msgid "ReportPanel.tab1ScrollPane.TabConstraints.tabTitle" -msgstr "ι—ι’˜" - -msgid "ReportPanel.labelEdgeCount.text" -msgstr "#边:" - -msgid "ReportPanel.labelNodeCount.text" -msgstr "#θŠ‚η‚ΉοΌš" - -msgid "ReportPanel.labelDynamic.text" -msgstr "εŠ¨ζ€ε›ΎοΌš" - -msgid "ReportPanel.labelHierarchical.text" -msgstr "εˆ†ηΊ§ε›ΎοΌš" - -msgid "ReportPanel.dynamicLabel.text" -msgstr "NaN" - -msgid "ReportPanel.hierarchicalLabel.text" -msgstr "NaN" - -msgid "ReportPanel.labelGraphType.text" -msgstr "ε›Ύηš„η±»εž‹οΌš" - -msgid "ReportPanel.tab2ScrollPane.TabConstraints.tabTitle" -msgstr "ζŠ₯ε‘Š" - -msgid "ReportPanel.autoscaleCheckbox.toolTipText" -msgstr "δ»₯εˆι€‚ζ―”δΎ‹θ°ƒζ•΄θŠ‚η‚Ήε€§ε°γ€θŠ‚η‚Ήδ½η½ε’ŒθΎΉηš„权重" - -msgid "ReportPanel.autoscaleCheckbox.text" -msgstr "θ‡ͺεŠ¨θ°ƒθŠ‚" - -msgid "ReportPanel.noIssues" -msgstr "θΎ“ε…₯ζ—ΆδΈ€εˆ‡ζ­£εΈΈ" - -msgid "ReportPanel.yes" -msgstr "是" - -msgid "ReportPanel.no" -msgstr "否" - -msgid "DesktopImportControllerUI.spigotSource" -msgstr "ζŽ₯口{0}" - -msgid "DesktopImportControllerUI.streamSource" -msgstr "ζ•°ζζ΅{0}" - -msgid "DesktopImportControllerUI.taskName" -msgstr "θΎ“ε…₯{0}" - -msgid "DesktopImportControllerUI.database.ui.dialog.title" -msgstr "ζ•°ζθΎη½" - -msgid "DesktopImportControllerUI.status.importSuccess" -msgstr "ζˆεŠŸθΎ“ε…₯{0}" - -msgid "DesktopImportControllerUI.status.importSuccess.default" -msgstr "ζ•°ζ" - -msgid "DesktopImportControllerUI.error_no_matching_file_importer" -msgstr "ζ²‘ζ‰Ύεˆ°ε…ΌεΉηš„θΎ“ε…₯ε™¨γ€‚δΈζ”―ζŒθΎ“ε…₯ηš„ζ–‡δ»Άζ ΌεΌγ€‚ζ£€ζŸ₯ζ–‡δ»Άηš„ζ‰©ε±•εγ€‚" - -msgid "DesktopImportControllerUI.error_no_matching_stream_importer" -msgstr "ζ²‘ζ‰Ύεˆ°ε…ΌεΉηš„θΎ“ε…₯ε™¨γ€‚δΈζ”―ζŒζ•°ζζ΅γ€‚" - -msgid "DesktopImportControllerUI.error_no_matching_db_importer" -msgstr "ζ²‘ζ‰Ύεˆ°ε…ΌεΉηš„θΎ“ε…₯ε™¨γ€‚δΈζ”―ζŒζ•°ζεΊ“。" - -msgid "DesktopImportControllerUI.file.ui.dialog.title" -msgstr "{0}θΎη½" - -msgid "DesktopImportControllerUI.spigot.ui.dialog.title" -msgstr "{0}θΎη½" - -msgid "DesktopImportControllerUI.processor.ui.dialog.title" -msgstr "倄理器θΎη½" - -msgid "ReportPanel.createMissingNodesCheckbox.text" -msgstr "εˆ›ε»ΊδΈ’ε€±ηš„θŠ‚η‚Ή" diff --git a/modules/DesktopLayout/pom.xml b/modules/DesktopLayout/pom.xml index 2bbb2e481a..3f1be6a765 100644 --- a/modules/DesktopLayout/pom.xml +++ b/modules/DesktopLayout/pom.xml @@ -4,13 +4,13 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi desktop-layout - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm DesktopLayout @@ -36,6 +36,22 @@ ${project.groupId} ui-utils
    + + ${project.groupId} + layout-plugin + + + ${project.groupId} + graph-api + + + ${project.groupId} + desktop-icons + + + org.netbeans.api + org-netbeans-modules-options-api + org.netbeans.api org-openide-awt @@ -48,6 +64,10 @@ org.netbeans.api org-openide-util + + org.netbeans.api + org-openide-util-ui + org.netbeans.api org-openide-dialogs @@ -72,12 +92,19 @@ org.netbeans.api org-netbeans-modules-settings + + + + org.netbeans.modules + org-netbeans-modules-masterfs + test + - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/LayoutNode.java b/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/LayoutNode.java index 1fd62b79ef..3a1c632b08 100644 --- a/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/LayoutNode.java +++ b/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/LayoutNode.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.layout; import java.util.HashMap; @@ -47,17 +48,15 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.layout.spi.LayoutProperty; import org.openide.nodes.AbstractNode; import org.openide.nodes.Children; -import org.openide.nodes.Node.PropertySet; import org.openide.nodes.Sheet; import org.openide.util.Exceptions; /** - * * @author Mathieu Bastian */ public class LayoutNode extends AbstractNode { - private Layout layout; + private final Layout layout; private PropertySet[] propertySets; public LayoutNode(Layout layout) { @@ -70,7 +69,7 @@ public LayoutNode(Layout layout) { public PropertySet[] getPropertySets() { if (propertySets == null) { try { - Map sheetMap = new HashMap(); + Map sheetMap = new HashMap<>(); for (LayoutProperty layoutProperty : layout.getProperties()) { Sheet.Set set = sheetMap.get(layoutProperty.getCategory()); if (set == null) { diff --git a/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/LayoutPanel.form b/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/LayoutPanel.form index c183153756..856212bfa5 100644 --- a/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/LayoutPanel.form +++ b/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/LayoutPanel.form @@ -89,7 +89,7 @@ - + diff --git a/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/LayoutPanel.java b/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/LayoutPanel.java index 6858fa4dff..8f10e31f82 100644 --- a/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/LayoutPanel.java +++ b/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/LayoutPanel.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.layout; import java.awt.Color; @@ -58,13 +59,15 @@ Development and Distribution License("CDDL") (collectively, the import java.util.Comparator; import java.util.List; import javax.swing.DefaultComboBoxModel; +import javax.swing.JCheckBoxMenuItem; +import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JSeparator; -import org.gephi.desktop.layout.LayoutPresetPersistence.Preset; import org.gephi.layout.api.LayoutController; import org.gephi.layout.api.LayoutModel; +import org.gephi.layout.spi.Layout; import org.gephi.layout.spi.LayoutBuilder; import org.gephi.layout.spi.LayoutUI; import org.gephi.ui.components.richtooltip.RichTooltip; @@ -80,10 +83,22 @@ Development and Distribution License("CDDL") (collectively, the public class LayoutPanel extends javax.swing.JPanel implements PropertyChangeListener { + public static final String DEFAULT_LAYOUT_PREF = "LayoutPanel.defaultLayout"; + private final String NO_SELECTION; private LayoutModel model; - private LayoutController controller; - private LayoutPresetPersistence layoutPresetPersistence; + private final LayoutController controller; + private final LayoutPresetPersistence layoutPresetPersistence; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel infoLabel; + private javax.swing.JComboBox layoutCombobox; + private javax.swing.JPanel layoutProvidedPanel; + private javax.swing.JToolBar layoutToolbar; + private javax.swing.JButton presetsButton; + private javax.swing.JPanel propertySheet; + private javax.swing.JButton resetButton; + private javax.swing.JButton runButton; + // End of variables declaration//GEN-END:variables public LayoutPanel() { NO_SELECTION = NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.choose.text"); @@ -100,7 +115,8 @@ public void itemStateChanged(ItemEvent e) { if (layoutCombobox.getSelectedItem().equals(NO_SELECTION) && model.getSelectedLayout() != null) { setSelectedLayout(null); } else if (layoutCombobox.getSelectedItem() instanceof LayoutBuilderWrapper) { - LayoutBuilder builder = ((LayoutBuilderWrapper) layoutCombobox.getSelectedItem()).getLayoutBuilder(); + LayoutBuilder builder = + ((LayoutBuilderWrapper) layoutCombobox.getSelectedItem()).getLayoutBuilder(); if (model.getSelectedLayout() == null || model.getSelectedBuilder() != builder) { setSelectedLayout(builder); } @@ -130,43 +146,113 @@ public void mouseExited(MouseEvent e) { }); - presetsButton.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { JPopupMenu menu = new JPopupMenu(); List presets = layoutPresetPersistence.getPresets(model.getSelectedLayout()); if (presets != null && !presets.isEmpty()) { + // One item per present to apply for (final Preset p : presets) { JMenuItem item = new JMenuItem(p.toString()); item.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - layoutPresetPersistence.loadPreset(p, model.getSelectedLayout()); + Preset appliedPreset = layoutPresetPersistence.loadPreset(p, model.getSelectedLayout()); refreshProperties(); - StatusDisplayer.getDefault().setStatusText(NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.status.loadPreset", model.getSelectedBuilder().getName(), p.toString())); + if (appliedPreset != null) { + StatusDisplayer.getDefault().setStatusText(NbBundle + .getMessage(LayoutPanel.class, "LayoutPanel.status.loadPreset", + model.getSelectedBuilder().getName(), p.toString())); + } } }); menu.add(item); } + + JMenu setDefault = new JMenu(NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.presetsButton.setDefault")); + if (layoutPresetPersistence.hasDefaultPreset(model.getSelectedLayout())) { + JMenuItem item = new JMenuItem(NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.presetsButton.setDefault.remove")); + item.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + layoutPresetPersistence.setDefaultPresent(null, model.getSelectedLayout()); + StatusDisplayer.getDefault().setStatusText(NbBundle + .getMessage(LayoutPanel.class, "LayoutPanel.status.removeDefaultPreset", + model.getSelectedBuilder().getName())); + } + }); + setDefault.add(item); + } + for (final Preset p : presets) { + boolean isDefault = layoutPresetPersistence.isDefaultPreset(p.toString(), model.getSelectedLayout()); + JCheckBoxMenuItem item = new JCheckBoxMenuItem(p.toString(), isDefault); + item.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + layoutPresetPersistence.setDefaultPresent(p.toString(), model.getSelectedLayout()); + StatusDisplayer.getDefault().setStatusText(NbBundle + .getMessage(LayoutPanel.class, "LayoutPanel.status.setDefaultPreset", + model.getSelectedBuilder().getName(), p.toString())); + } + }); + setDefault.add(item); + } + menu.add(new JSeparator()); + menu.add(setDefault); + + JMenu deletePresets = new JMenu(NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.presetsButton.deletePresets")); + for (final Preset p : presets) { + JMenuItem item = new JMenuItem(p.toString()); + item.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + layoutPresetPersistence.deletePreset(p); + StatusDisplayer.getDefault().setStatusText(NbBundle + .getMessage(LayoutPanel.class, "LayoutPanel.status.deletePreset", + model.getSelectedBuilder().getName(), p.toString())); + } + }); + deletePresets.add(item); + } + menu.add(new JSeparator()); + menu.add(deletePresets); } else { - menu.add("" + NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.presetsButton.nopreset") + ""); + menu.add( + "" + NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.presetsButton.nopreset") + + ""); } - JMenuItem saveItem = new JMenuItem(NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.presetsButton.savePreset")); + JMenuItem saveItem = + new JMenuItem(NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.presetsButton.savePreset")); saveItem.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - String lastPresetName = NbPreferences.forModule(LayoutPanel.class).get("LayoutPanel.lastPresetName", ""); + String lastPresetName = + NbPreferences.forModule(LayoutPanel.class).get("LayoutPanel.lastPresetName", ""); NotifyDescriptor.InputLine question = new NotifyDescriptor.InputLine( - NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.presetsButton.savePreset.input"), - NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.presetsButton.savePreset.input.name")); + NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.presetsButton.savePreset.input"), + NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.presetsButton.savePreset.input.name")); question.setInputText(lastPresetName); if (DialogDisplayer.getDefault().notify(question) == NotifyDescriptor.OK_OPTION) { String input = question.getInputText(); if (input != null && !input.isEmpty()) { + if (layoutPresetPersistence.hasPreset(input, model.getSelectedLayout().getClass().getName())) { + String message = + NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.presetsButton.savePresetReplace.text"); + String title = NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.presetsButton.savePresetReplace.title"); + NotifyDescriptor dd = new NotifyDescriptor(message, title, + NotifyDescriptor.YES_NO_OPTION, + NotifyDescriptor.QUESTION_MESSAGE, null, null); + Object retType = DialogDisplayer.getDefault().notify(dd); + if (retType == NotifyDescriptor.NO_OPTION) { + return; + } + } layoutPresetPersistence.savePreset(input, model.getSelectedLayout()); - StatusDisplayer.getDefault().setStatusText(NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.status.savePreset", model.getSelectedBuilder().getName(), input)); + StatusDisplayer.getDefault().setStatusText(NbBundle + .getMessage(LayoutPanel.class, "LayoutPanel.status.savePreset", + model.getSelectedBuilder().getName(), input)); NbPreferences.forModule(LayoutPanel.class).put("LayoutPanel.lastPresetName", input); } } @@ -183,18 +269,48 @@ public void refreshModel(LayoutModel layoutModel) { this.model = layoutModel; if (model != null) { model.addPropertyChangeListener(this); + if (model.getSelectedLayout() == null) { + applyDefaultLayout(); + } } refreshEnable(); refreshModel(); } + private void applyDefaultLayout() { + String defaultBuilderClass = NbPreferences.forModule(LayoutPanel.class).get(DEFAULT_LAYOUT_PREF, ""); + if (!defaultBuilderClass.isEmpty()) { + for (LayoutBuilder builder : Lookup.getDefault().lookupAll(LayoutBuilder.class)) { + if (builder.getClass().getName().equals(defaultBuilderClass)) { + controller.setLayout(builder.buildLayout()); + break; + } + } + } + } + @Override public void propertyChange(PropertyChangeEvent evt) { if (evt.getPropertyName().equals(LayoutModel.SELECTED_LAYOUT)) { refreshModel(); } else if (evt.getPropertyName().equals(LayoutModel.RUNNING)) { refreshModel(); + } else if (evt.getPropertyName().equals(LayoutModel.DEFAULTS_APPLIED)) { + loadDefaultProperties(); + } + } + + private void loadDefaultProperties() { + Layout layout = model.getSelectedLayout(); + if (layout != null) { + Preset appliedPreset = layoutPresetPersistence.loadDefaultPreset(layout); + if (appliedPreset != null) { + StatusDisplayer.getDefault().setStatusText(NbBundle + .getMessage(LayoutPanel.class, "LayoutPanel.status.loadPreset", + model.getSelectedBuilder().getName(), appliedPreset.toString())); + } + refreshProperties(); } } @@ -204,11 +320,11 @@ private void refreshModel() { if (model == null || !model.isRunning()) { runButton.setText(NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.runButton.text")); - runButton.setIcon(ImageUtilities.loadImageIcon("org/gephi/desktop/layout/resources/run.gif", false)); + runButton.setIcon(ImageUtilities.loadImageIcon("DesktopLayout/run.svg", false)); runButton.setToolTipText(NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.runButton.tooltip")); } else if (model.isRunning()) { runButton.setText(NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.stopButton.text")); - runButton.setIcon(ImageUtilities.loadImageIcon("org/gephi/desktop/layout/resources/stop.png", false)); + runButton.setIcon(ImageUtilities.loadImageIcon("DesktopLayout/stop.svg", false)); runButton.setToolTipText(NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.stopButton.tooltip")); } @@ -225,7 +341,7 @@ private void refreshChooser() { comboBoxModel.addElement(NO_SELECTION); comboBoxModel.setSelectedItem(NO_SELECTION); if (model != null) { - List builders = new ArrayList(Lookup.getDefault().lookupAll(LayoutBuilder.class)); + List builders = new ArrayList<>(Lookup.getDefault().lookupAll(LayoutBuilder.class)); Collections.sort(builders, new Comparator() { @Override public int compare(Object o1, Object o2) { @@ -274,7 +390,7 @@ private void refreshProperties() { layoutProvidedPanel.removeAll(); } - ((PropertySheet) propertySheet).setNodes(new Node[]{layoutNode}); + ((PropertySheet) propertySheet).setNodes(new Node[] {layoutNode}); } } @@ -288,13 +404,17 @@ private void refreshEnable() { } private void setSelectedLayout(LayoutBuilder builder) { - controller.setLayout(builder != null ? model.getLayout(builder) : null); + Layout layout = builder != null ? builder.buildLayout() : null; + controller.setLayout(layout); } private void reset() { if (model.getSelectedLayout() != null) { - model.getSelectedLayout().resetPropertiesValues(); + layoutPresetPersistence.loadDefaultPreset(model.getSelectedLayout()); refreshProperties(); + StatusDisplayer.getDefault().setStatusText(NbBundle + .getMessage(LayoutPanel.class, "LayoutPanel.status.reset", + model.getSelectedBuilder().getName())); } } @@ -339,8 +459,9 @@ private void initComponents() { add(layoutCombobox, gridBagConstraints); infoLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); - infoLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/layout/resources/layoutInfo.png"))); // NOI18N - infoLabel.setText(org.openide.util.NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.infoLabel.text")); // NOI18N + infoLabel.setIcon(ImageUtilities.loadImageIcon("DesktopLayout/layoutInfo.svg", false)); // NOI18N + infoLabel + .setText(org.openide.util.NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.infoLabel.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; @@ -348,11 +469,14 @@ private void initComponents() { gridBagConstraints.insets = new java.awt.Insets(2, 7, 0, 0); add(infoLabel, gridBagConstraints); - runButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/layout/resources/run.gif"))); // NOI18N - runButton.setText(org.openide.util.NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.runButton.text")); // NOI18N + runButton.setIcon( + ImageUtilities.loadImageIcon("DesktopLayout/run.svg", false)); // NOI18N + runButton + .setText(org.openide.util.NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.runButton.text")); // NOI18N runButton.setIconTextGap(5); runButton.setMargin(new java.awt.Insets(2, 7, 2, 14)); runButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { runButtonActionPerformed(evt); } @@ -368,14 +492,17 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { layoutToolbar.setRollover(true); layoutToolbar.setOpaque(false); - presetsButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/layout/resources/preset.png"))); // NOI18N - presetsButton.setText(org.openide.util.NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.presetsButton.text")); // NOI18N + presetsButton.setIcon(ImageUtilities.loadImageIcon("DesktopLayout/preset.svg", false)); // NOI18N + presetsButton.setText( + org.openide.util.NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.presetsButton.text")); // NOI18N presetsButton.setFocusable(false); - presetsButton.setIconTextGap(0); + presetsButton.setIconTextGap(4); layoutToolbar.add(presetsButton); - resetButton.setText(org.openide.util.NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.resetButton.text")); // NOI18N + resetButton + .setText(org.openide.util.NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.resetButton.text")); // NOI18N resetButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { resetButtonActionPerformed(evt); } @@ -413,7 +540,8 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { add(propertySheet, gridBagConstraints); }// //GEN-END:initComponents - private void resetButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_resetButtonActionPerformed + private void resetButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_resetButtonActionPerformed reset(); }//GEN-LAST:event_resetButtonActionPerformed @@ -424,34 +552,6 @@ private void runButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIR run(); } }//GEN-LAST:event_runButtonActionPerformed - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JLabel infoLabel; - private javax.swing.JComboBox layoutCombobox; - private javax.swing.JPanel layoutProvidedPanel; - private javax.swing.JToolBar layoutToolbar; - private javax.swing.JButton presetsButton; - private javax.swing.JPanel propertySheet; - private javax.swing.JButton resetButton; - private javax.swing.JButton runButton; - // End of variables declaration//GEN-END:variables - - private static class LayoutBuilderWrapper { - - private LayoutBuilder layoutBuilder; - - public LayoutBuilderWrapper(LayoutBuilder layoutBuilder) { - this.layoutBuilder = layoutBuilder; - } - - public LayoutBuilder getLayoutBuilder() { - return layoutBuilder; - } - - @Override - public String toString() { - return layoutBuilder.getName(); - } - } private RichTooltip buildTooltip(LayoutBuilder builder) { String description = ""; @@ -476,6 +576,24 @@ private RichTooltip buildTooltip(LayoutBuilder builder) { return richTooltip; } + public static class LayoutBuilderWrapper { + + private final LayoutBuilder layoutBuilder; + + public LayoutBuilderWrapper(LayoutBuilder layoutBuilder) { + this.layoutBuilder = layoutBuilder; + } + + public LayoutBuilder getLayoutBuilder() { + return layoutBuilder; + } + + @Override + public String toString() { + return layoutBuilder.getName(); + } + } + private static class LayoutDescriptionImage { private static final int STAR_WIDTH = 16; @@ -485,18 +603,17 @@ private static class LayoutDescriptionImage { private static final int LINE_GAP = 4; private static final int Y_BEGIN = 10; private static final int IMAGE_RIGHT_MARIN = 10; - private Image greenIcon; - private Image grayIcon; - private Graphics g; - private String qualityStr; - private String speedStr; + private final Image greenIcon; + private final Image grayIcon; + private final String qualityStr; + private final String speedStr; private int textMaxSize; - private LayoutUI layoutUI; + private final LayoutUI layoutUI; public LayoutDescriptionImage(LayoutUI layoutUI) { this.layoutUI = layoutUI; - greenIcon = ImageUtilities.loadImage("org/gephi/desktop/layout/resources/yellow.png"); - grayIcon = ImageUtilities.loadImage("org/gephi/desktop/layout/resources/grey.png"); + greenIcon = ImageUtilities.loadImage("DesktopLayout/yellow.svg", false); + grayIcon = ImageUtilities.loadImage("DesktopLayout/grey.svg", false); qualityStr = NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.tooltip.quality"); speedStr = NbBundle.getMessage(LayoutPanel.class, "LayoutPanel.tooltip.speed"); } @@ -506,7 +623,8 @@ public void paint(Graphics g) { g.drawString(qualityStr, 0, STAR_HEIGHT + Y_BEGIN - 2); paintStarPanel(g, textMaxSize + TEXT_GAP, Y_BEGIN, STAR_MAX, layoutUI.getQualityRank()); g.drawString(speedStr, 0, STAR_HEIGHT * 2 + LINE_GAP + Y_BEGIN - 2); - paintStarPanel(g, textMaxSize + TEXT_GAP, STAR_HEIGHT + LINE_GAP + Y_BEGIN, STAR_MAX, layoutUI.getSpeedRank()); + paintStarPanel(g, textMaxSize + TEXT_GAP, STAR_HEIGHT + LINE_GAP + Y_BEGIN, STAR_MAX, + layoutUI.getSpeedRank()); } public Image getImage() { @@ -519,7 +637,7 @@ public Image getImage() { //Paint BufferedImage img = new BufferedImage(imageWidth, 100, BufferedImage.TYPE_INT_ARGB); - this.g = img.getGraphics(); + Graphics g = img.getGraphics(); paint(g); return img; } diff --git a/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/LayoutPresetPersistence.java b/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/LayoutPresetPersistence.java index c77ebe5ec4..4fc0e9f8fc 100644 --- a/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/LayoutPresetPersistence.java +++ b/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/LayoutPresetPersistence.java @@ -39,13 +39,21 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.layout; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; import java.io.InputStream; +import java.io.OutputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Optional; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; @@ -59,33 +67,76 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.layout.spi.LayoutProperty; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileUtil; +import org.openide.util.NbPreferences; import org.w3c.dom.Document; -import org.w3c.dom.Element; -import org.w3c.dom.Node; -import org.w3c.dom.NodeList; /** - * * @author Mathieu Bastian */ public class LayoutPresetPersistence { - private Map> presets = new HashMap>(); + private final Map> presets = new HashMap<>(); + private final Map defaultPresets = new HashMap<>(); public LayoutPresetPersistence() { loadPresets(); + + // Load defaults from preferences + for(String layoutClassName : presets.keySet()) { + String defaultPreset = NbPreferences.forModule(LayoutPresetPersistence.class).get("LayoutPresetPersistence_defaultPreset_"+layoutClassName, null); + if (defaultPreset != null && hasPreset(defaultPreset, layoutClassName)) { + defaultPresets.put(layoutClassName, defaultPreset); + Logger.getLogger(LayoutPresetPersistence.class.getName()).log(Level.INFO, "Default preset for {0} loaded: {1}", new Object[]{layoutClassName, defaultPreset}); + } + } + } + + public boolean hasPreset(String name, String layoutClassName) { + List layoutPresets = presets.get(layoutClassName); + return layoutPresets != null && layoutPresets.stream().anyMatch(p -> p.name.equals(name)); + } + + public Preset getPreset(String name, Layout layout) { + List layoutPresets = presets.get(layout.getClass().getName()); + if (layoutPresets == null) { + return null; + } + Optional preset = layoutPresets.stream() + .filter(p -> p.name.equals(name)) + .findFirst(); + return preset.orElse(null); + } + + public void setDefaultPresent(String name, Layout layout) { + if (name == null) { + defaultPresets.remove(layout.getClass().getName()); + NbPreferences.forModule(LayoutPresetPersistence.class).remove("LayoutPresetPersistence_defaultPreset_"+layout.getClass().getName()); + } else { + defaultPresets.put(layout.getClass().getName(), name); + NbPreferences.forModule(LayoutPresetPersistence.class).put("LayoutPresetPersistence_defaultPreset_"+layout.getClass().getName(), name); + } + } + + public boolean hasDefaultPreset(Layout layout) { + return defaultPresets.containsKey(layout.getClass().getName()); + } + + public boolean isDefaultPreset(String name, Layout layout) { + String defaultPreset = defaultPresets.get(layout.getClass().getName()); + return defaultPreset != null && defaultPreset.equals(name); } public void savePreset(String name, Layout layout) { Preset preset = addPreset(new Preset(name, layout)); + FileOutputStream fos = null; try { //Create file if dont exist FileObject folder = FileUtil.getConfigFile("layoutpresets"); if (folder == null) { folder = FileUtil.getConfigRoot().createFolder("layoutpresets"); } - FileObject presetFile = folder.getFileObject(name, "xml"); + FileObject presetFile = folder.getFileObject(name + ".xml"); if (presetFile == null) { presetFile = folder.createData(name, "xml"); } @@ -101,30 +152,67 @@ public void savePreset(String name, Layout layout) { preset.writeXML(document); //Write XML file - Source source = new DOMSource(document); - Result result = new StreamResult(FileUtil.toFile(presetFile)); - Transformer transformer = TransformerFactory.newInstance().newTransformer(); - transformer.setOutputProperty(OutputKeys.INDENT, "yes"); - transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); - transformer.transform(source, result); + try (OutputStream outputStream = presetFile.getOutputStream()) { + Source source = new DOMSource(document); + Result result = new StreamResult(outputStream); + Transformer transformer = TransformerFactory.newInstance().newTransformer(); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); + transformer.transform(source, result); + } } catch (Exception e) { - e.printStackTrace(); + Logger.getLogger(LayoutPresetPersistence.class.getName()).log(Level.SEVERE, "Error while writing preset file", e); } } - public void loadPreset(Preset preset, Layout layout) { + public void deletePreset(Preset preset) { + // Remove default preset if needed + if (defaultPresets.containsKey(preset.layoutClassName) && defaultPresets.get(preset.layoutClassName).equals(preset.name)) { + defaultPresets.remove(preset.layoutClassName); + } + List layoutPresets = presets.get(preset.layoutClassName); + layoutPresets.remove(preset); + FileObject folder = FileUtil.getConfigFile("layoutpresets"); + if (folder != null) { + FileObject file = folder.getFileObject(preset.name + ".xml"); + if (file != null) { + try { + file.delete(); + } catch (IOException ex) { + Logger.getLogger(LayoutPresetPersistence.class.getName()).log(Level.SEVERE, "Error while deleting preset file", ex); + } + } + } + } + + public Preset loadDefaultPreset(Layout layout) { + String defaultPreset = defaultPresets.get(layout.getClass().getName()); + if (defaultPreset != null) { + Preset preset = getPreset(defaultPreset, layout); + if (preset != null) { + return loadPreset(preset, layout); + } + } else { + layout.resetPropertiesValues(); + } + return null; + } + + public Preset loadPreset(Preset preset, Layout layout) { for (LayoutProperty p : layout.getProperties()) { for (int i = 0; i < preset.propertyNames.size(); i++) { if (p.getCanonicalName().equalsIgnoreCase(preset.propertyNames.get(i)) - || p.getProperty().getName().equalsIgnoreCase(preset.propertyNames.get(i))) {//Also compare with property name to maintain compatibility with old presets + || p.getProperty().getName().equalsIgnoreCase(preset.propertyNames + .get(i))) {//Also compare with property name to maintain compatibility with old presets try { p.getProperty().setValue(preset.propertyValues.get(i)); - } catch (Exception ex) { - ex.printStackTrace(); + } catch (Exception e) { + Logger.getLogger(LayoutPresetPersistence.class.getName()).log(Level.SEVERE, "Error while setting preset property", e); } } } } + return preset; } public List getPresets(Layout layout) { @@ -143,8 +231,8 @@ private void loadPresets() { Document document = builder.parse(stream); Preset preset = new Preset(document); addPreset(preset); - } catch (Exception ex) { - ex.printStackTrace(); + } catch (Exception e) { + Logger.getLogger(LayoutPresetPersistence.class.getName()).log(Level.SEVERE, "Error while reading preset file", e); } } } @@ -152,142 +240,22 @@ private void loadPresets() { } private Preset addPreset(Preset preset) { - List layoutPresets = presets.get(preset.layoutClassName); - if (layoutPresets == null) { - layoutPresets = new ArrayList(); - presets.put(preset.layoutClassName, layoutPresets); - } - for (Preset p : layoutPresets) { - if (p.equals(preset)) { - return p; + List layoutPresets = presets.computeIfAbsent(preset.layoutClassName, k -> new ArrayList<>()); + for (int i = 0; i < layoutPresets.size(); i++) { + if (layoutPresets.get(i).equals(preset)) { + layoutPresets.set(i, preset); + return preset; } } layoutPresets.add(preset); return preset; } - protected static class Preset { - - private List propertyNames = new ArrayList(); - private List propertyValues = new ArrayList(); - private String layoutClassName; - private String name; - - private Preset(String name, Layout layout) { - this.name = name; - this.layoutClassName = layout.getClass().getName(); - for (LayoutProperty p : layout.getProperties()) { - try { - Object value = p.getProperty().getValue(); - if (value != null) { - propertyNames.add(p.getCanonicalName()); - propertyValues.add(value); - } - } catch (Exception e) { - } + protected void reset() { + for(String layoutClassName : presets.keySet()) { + for(Preset preset : presets.get(layoutClassName).toArray(new Preset[0])) { + deletePreset(preset); } } - - private Preset(Document document) { - readXML(document); - } - - public void readXML(Document document) { - NodeList propertiesList = document.getDocumentElement().getElementsByTagName("properties"); - if (propertiesList.getLength() > 0) { - for (int j = 0; j < propertiesList.getLength(); j++) { - Node m = propertiesList.item(j); - if (m.getNodeType() == Node.ELEMENT_NODE) { - Element propertiesE = (Element) m; - layoutClassName = propertiesE.getAttribute("layoutClassName"); - name = propertiesE.getAttribute("name"); - NodeList propertyList = propertiesE.getElementsByTagName("property"); - for (int i = 0; i < propertyList.getLength(); i++) { - Node n = propertyList.item(i); - if (n.getNodeType() == Node.ELEMENT_NODE) { - Element propertyE = (Element) n; - String propStr = propertyE.getAttribute("property"); - String classStr = propertyE.getAttribute("class"); - String valStr = propertyE.getTextContent(); - Object value = parse(classStr, valStr); - if (value != null) { - propertyNames.add(propStr); - propertyValues.add(value); - } - } - } - break; - } - } - } - } - - private Object parse(String classStr, String str) { - try { - Class c = Class.forName(classStr); - if (c.equals(Boolean.class)) { - return new Boolean(str); - } else if (c.equals(Integer.class)) { - return new Integer(str); - } else if (c.equals(Float.class)) { - return new Float(str); - } else if (c.equals(Double.class)) { - return new Double(str); - } else if (c.equals(Long.class)) { - return new Long(str); - } else if (c.equals(String.class)) { - return str; - } - } catch (ClassNotFoundException ex) { - return null; - } - return null; - } - - public void writeXML(Document document) { - Element rootE = document.createElement("layoutproperties"); - - //Properties - Element propertiesE = document.createElement("properties"); - propertiesE.setAttribute("layoutClassName", layoutClassName); - propertiesE.setAttribute("name", name); - propertiesE.setAttribute("version", "0.7"); - for (int i = 0; i < propertyNames.size(); i++) { - Element propertyE = document.createElement("property"); - propertyE.setAttribute("property", propertyNames.get(i)); - propertyE.setAttribute("class", propertyValues.get(i).getClass().getName()); - propertyE.setTextContent(propertyValues.get(i).toString()); - propertiesE.appendChild(propertyE); - } - rootE.appendChild(propertiesE); - document.appendChild(rootE); - } - - @Override - public String toString() { - return name; - } - - @Override - public boolean equals(Object obj) { - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final Preset other = (Preset) obj; - if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) { - return false; - } - return true; - } - - @Override - public int hashCode() { - int hash = 3; - hash = 37 * hash + (this.name != null ? this.name.hashCode() : 0); - return hash; - } } } diff --git a/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/LayoutTopComponent.java b/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/LayoutTopComponent.java index c7de7cd43b..48def8f218 100644 --- a/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/LayoutTopComponent.java +++ b/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/LayoutTopComponent.java @@ -39,9 +39,11 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.layout; import java.awt.BorderLayout; +import javax.swing.SwingUtilities; import javax.swing.UIManager; import org.gephi.layout.api.LayoutModel; import org.gephi.project.api.ProjectController; @@ -56,18 +58,19 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.windows.TopComponent; @ConvertAsProperties(dtd = "-//org.gephi.desktop.layout//Layout//EN", - autostore = false) + autostore = false) @TopComponent.Description(preferredID = "LayoutTopComponent", - iconBase = "org/gephi/desktop/layout/resources/small.png", - persistenceType = TopComponent.PERSISTENCE_ALWAYS) + iconBase = "DesktopLayout/small.svg", + persistenceType = TopComponent.PERSISTENCE_ALWAYS) @TopComponent.Registration(mode = "layoutmode", openAtStartup = true, roles = {"overview"}) @ActionID(category = "Window", id = "org.gephi.desktop.layout.LayoutTopComponent") @ActionReference(path = "Menu/Window", position = 700) @TopComponent.OpenActionRegistration(displayName = "#CTL_LayoutTopComponent", - preferredID = "LayoutTopComponent") + preferredID = "LayoutTopComponent") public final class LayoutTopComponent extends TopComponent { - private LayoutPanel layoutPanel; + private final LayoutPanel layoutPanel; + private final TransformationPanel transformationPanel; private LayoutModel model; public LayoutTopComponent() { @@ -77,9 +80,11 @@ public LayoutTopComponent() { putClientProperty(TopComponent.PROP_MAXIMIZATION_DISABLED, Boolean.TRUE); layoutPanel = new LayoutPanel(); + transformationPanel = new TransformationPanel(); if (UIUtils.isAquaLookAndFeel()) { layoutPanel.setBackground(UIManager.getColor("NbExplorerView.background")); } + add(transformationPanel,BorderLayout.PAGE_START); add(layoutPanel, BorderLayout.CENTER); Lookup.getDefault().lookup(ProjectController.class).addWorkspaceListener(new WorkspaceListener() { @@ -90,7 +95,7 @@ public void initialize(Workspace workspace) { @Override public void select(Workspace workspace) { model = workspace.getLookup().lookup(LayoutModel.class); - refreshModel(); + SwingUtilities.invokeLater(() -> refreshModel()); } @Override @@ -107,7 +112,7 @@ public void close(Workspace workspace) { @Override public void disable() { model = null; - refreshModel(); + SwingUtilities.invokeLater(() -> refreshModel()); } }); diff --git a/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/Preset.java b/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/Preset.java new file mode 100644 index 0000000000..afd3318f16 --- /dev/null +++ b/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/Preset.java @@ -0,0 +1,134 @@ +package org.gephi.desktop.layout; + +import java.util.ArrayList; +import java.util.List; +import org.gephi.layout.spi.Layout; +import org.gephi.layout.spi.LayoutProperty; +import org.openide.util.Exceptions; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.Node; +import org.w3c.dom.NodeList; + +public class Preset { + + protected final List propertyNames = new ArrayList<>(); + protected final List propertyValues = new ArrayList<>(); + protected String layoutClassName; + protected String name; + + Preset(String name, Layout layout) { + this.name = name; + this.layoutClassName = layout.getClass().getName(); + for (LayoutProperty p : layout.getProperties()) { + try { + Object value = p.getProperty().getValue(); + if (value != null) { + propertyNames.add(p.getCanonicalName()); + propertyValues.add(value); + } + } catch (Exception e) { + Exceptions.printStackTrace(e); + } + } + } + + Preset(Document document) { + readXML(document); + } + + public void readXML(Document document) { + NodeList propertiesList = document.getDocumentElement().getElementsByTagName("properties"); + if (propertiesList.getLength() > 0) { + for (int j = 0; j < propertiesList.getLength(); j++) { + Node m = propertiesList.item(j); + if (m.getNodeType() == Node.ELEMENT_NODE) { + Element propertiesE = (Element) m; + layoutClassName = propertiesE.getAttribute("layoutClassName"); + name = propertiesE.getAttribute("name"); + NodeList propertyList = propertiesE.getElementsByTagName("property"); + for (int i = 0; i < propertyList.getLength(); i++) { + Node n = propertyList.item(i); + if (n.getNodeType() == Node.ELEMENT_NODE) { + Element propertyE = (Element) n; + String propStr = propertyE.getAttribute("property"); + String classStr = propertyE.getAttribute("class"); + String valStr = propertyE.getTextContent(); + Object value = parse(classStr, valStr); + if (value != null) { + propertyNames.add(propStr); + propertyValues.add(value); + } + } + } + break; + } + } + } + } + + private Object parse(String classStr, String str) { + try { + Class c = Class.forName(classStr); + if (c.equals(Boolean.class)) { + return Boolean.parseBoolean(str); + } else if (c.equals(Integer.class)) { + return Integer.parseInt(str); + } else if (c.equals(Float.class)) { + return Float.parseFloat(str); + } else if (c.equals(Double.class)) { + return Double.parseDouble(str); + } else if (c.equals(Long.class)) { + return Long.parseLong(str); + } else if (c.equals(String.class)) { + return str; + } + } catch (ClassNotFoundException ex) { + return null; + } + return null; + } + + public void writeXML(Document document) { + Element rootE = document.createElement("layoutproperties"); + + //Properties + Element propertiesE = document.createElement("properties"); + propertiesE.setAttribute("layoutClassName", layoutClassName); + propertiesE.setAttribute("name", name); + propertiesE.setAttribute("version", "0.7"); + for (int i = 0; i < propertyNames.size(); i++) { + Element propertyE = document.createElement("property"); + propertyE.setAttribute("property", propertyNames.get(i)); + propertyE.setAttribute("class", propertyValues.get(i).getClass().getName()); + propertyE.setTextContent(propertyValues.get(i).toString()); + propertiesE.appendChild(propertyE); + } + rootE.appendChild(propertiesE); + document.appendChild(rootE); + } + + @Override + public String toString() { + return name; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Preset other = (Preset) obj; + return (this.name == null) ? (other.name == null) : this.name.equals(other.name); + } + + @Override + public int hashCode() { + int hash = 3; + hash = 37 * hash + (this.name != null ? this.name.hashCode() : 0); + return hash; + } +} diff --git a/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/TransformationPanel.form b/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/TransformationPanel.form new file mode 100644 index 0000000000..9e21c6f643 --- /dev/null +++ b/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/TransformationPanel.form @@ -0,0 +1,146 @@ + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/TransformationPanel.java b/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/TransformationPanel.java new file mode 100644 index 0000000000..b4de83b715 --- /dev/null +++ b/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/TransformationPanel.java @@ -0,0 +1,234 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.layout; + +import javax.swing.ImageIcon; +import org.openide.util.ImageUtilities; + + +public class TransformationPanel extends javax.swing.JPanel { + private final TransformationUIController transformationUIController; + + public TransformationPanel() { + initComponents(); + transformationUIController = new TransformationUIController(); + } + + private final ImageIcon iconMirrorY = ImageUtilities.loadImageIcon( + "DesktopLayout/transformations/mirror_yaxis.svg", false); + private final ImageIcon iconMirrorX = ImageUtilities.loadImageIcon( + "DesktopLayout/transformations/mirror_xaxis.svg", false); + + private final ImageIcon iconRotateRight1deg = + ImageUtilities.loadImageIcon("DesktopLayout/transformations/rotate_right_1deg.svg", false); + private final ImageIcon iconRotateLeft1deg = + ImageUtilities.loadImageIcon("DesktopLayout/transformations/rotate_left_1deg.svg", false); + + private final ImageIcon iconRotateRight45deg = + ImageUtilities.loadImageIcon("DesktopLayout/transformations/rotate_right_45deg.svg", false); + private final ImageIcon iconRotateLeft45deg = + ImageUtilities.loadImageIcon("DesktopLayout/transformations/rotate_left_45deg.svg", false); + + private final ImageIcon iconScaleExpand = + ImageUtilities.loadImageIcon("DesktopLayout/transformations/scale_expand.svg", false); + private final ImageIcon iconScaleReduce = + ImageUtilities.loadImageIcon("DesktopLayout/transformations/scale_reduce.svg", false); + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton buttonExpand; + private javax.swing.JButton buttonMirrorX; + private javax.swing.JButton buttonMirrorY; + private javax.swing.JButton buttonReduce; + private javax.swing.JButton buttonRotateLeft1deg; + private javax.swing.JButton buttonRotateLeft45deg; + private javax.swing.JButton buttonRotateRight1deg; + private javax.swing.JButton buttonRotateRight45deg; + private javax.swing.JSeparator jSeparator1; + private javax.swing.JSeparator jSeparator2; + // End of variables declaration//GEN-END:variables + + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + buttonMirrorY = new javax.swing.JButton(this.iconMirrorY); + buttonMirrorX = new javax.swing.JButton(this.iconMirrorX); + jSeparator1 = new javax.swing.JSeparator(); + buttonRotateLeft45deg = new javax.swing.JButton(this.iconRotateLeft45deg); + buttonRotateLeft1deg = new javax.swing.JButton(this.iconRotateLeft1deg); + buttonRotateRight1deg = new javax.swing.JButton(this.iconRotateRight1deg); + buttonRotateRight45deg = new javax.swing.JButton(this.iconRotateRight45deg); + jSeparator2 = new javax.swing.JSeparator(); + buttonExpand = new javax.swing.JButton(this.iconScaleExpand); + buttonReduce = new javax.swing.JButton(this.iconScaleReduce); + + buttonMirrorY.setToolTipText(org.openide.util.NbBundle.getMessage(TransformationPanel.class, + "TransformationPanel.buttonMirrorY.toolTipText")); // NOI18N + buttonMirrorY.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonMirrorYActionPerformed(evt); + } + }); + add(buttonMirrorY); + + buttonMirrorX.setToolTipText(org.openide.util.NbBundle.getMessage(TransformationPanel.class, + "TransformationPanel.buttonMirrorX.toolTipText")); // NOI18N + buttonMirrorX.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonMirrorXActionPerformed(evt); + } + }); + add(buttonMirrorX); + + jSeparator1.setOrientation(javax.swing.SwingConstants.VERTICAL); + jSeparator1.setMinimumSize(new java.awt.Dimension(8, 16)); + jSeparator1.setPreferredSize(new java.awt.Dimension(8, 16)); + add(jSeparator1); + + buttonRotateLeft45deg.setToolTipText(org.openide.util.NbBundle.getMessage(TransformationPanel.class, + "TransformationPanel.buttonRotateLeft45deg.toolTipText")); // NOI18N + buttonRotateLeft45deg.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonRotateLeft45degActionPerformed(evt); + } + }); + add(buttonRotateLeft45deg); + + buttonRotateLeft1deg.setToolTipText(org.openide.util.NbBundle.getMessage(TransformationPanel.class, + "TransformationPanel.buttonRotateLeft1deg.toolTipText")); // NOI18N + buttonRotateLeft1deg.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonRotateLeft1degActionPerformed(evt); + } + }); + add(buttonRotateLeft1deg); + + buttonRotateRight1deg.setToolTipText(org.openide.util.NbBundle.getMessage(TransformationPanel.class, + "TransformationPanel.buttonRotateRight1deg.toolTipText")); // NOI18N + buttonRotateRight1deg.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonRotateRight1degActionPerformed(evt); + } + }); + add(buttonRotateRight1deg); + + buttonRotateRight45deg.setToolTipText(org.openide.util.NbBundle.getMessage(TransformationPanel.class, + "TransformationPanel.buttonRotateRight45deg.toolTipText")); // NOI18N + buttonRotateRight45deg.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonRotateRight45degActionPerformed(evt); + } + }); + add(buttonRotateRight45deg); + + jSeparator2.setOrientation(javax.swing.SwingConstants.VERTICAL); + jSeparator2.setMinimumSize(new java.awt.Dimension(8, 16)); + jSeparator2.setPreferredSize(new java.awt.Dimension(8, 16)); + add(jSeparator2); + + buttonExpand.setToolTipText(org.openide.util.NbBundle.getMessage(TransformationPanel.class, + "TransformationPanel.buttonExpand.toolTipText")); // NOI18N + buttonExpand.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonExpandActionPerformed(evt); + } + }); + add(buttonExpand); + + buttonReduce.setToolTipText(org.openide.util.NbBundle.getMessage(TransformationPanel.class, + "TransformationPanel.buttonReduce.toolTipText")); // NOI18N + buttonReduce.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + buttonReduceActionPerformed(evt); + } + }); + add(buttonReduce); + }// //GEN-END:initComponents + + private void buttonMirrorYActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonMirrorYActionPerformed + transformationUIController.mirrorYAxis(); + }//GEN-LAST:event_buttonMirrorYActionPerformed + + private void buttonMirrorXActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonMirrorXActionPerformed + transformationUIController.mirrorXAxis(); + }//GEN-LAST:event_buttonMirrorXActionPerformed + + private void buttonRotateLeft45degActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonRotateLeft45degActionPerformed + transformationUIController.rotateLeft45Deg(); + }//GEN-LAST:event_buttonRotateLeft45degActionPerformed + + private void buttonRotateLeft1degActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonRotateLeft1degActionPerformed + transformationUIController.rotateLeft1Deg(); + }//GEN-LAST:event_buttonRotateLeft1degActionPerformed + + private void buttonRotateRight1degActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonRotateRight1degActionPerformed + transformationUIController.rotateRight1Deg(); + }//GEN-LAST:event_buttonRotateRight1degActionPerformed + + private void buttonRotateRight45degActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonRotateRight45degActionPerformed + transformationUIController.rotateRight45Deg(); + }//GEN-LAST:event_buttonRotateRight45degActionPerformed + + private void buttonExpandActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonExpandActionPerformed + transformationUIController.expand(); + }//GEN-LAST:event_buttonExpandActionPerformed + + private void buttonReduceActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_buttonReduceActionPerformed + transformationUIController.reduce(); + }//GEN-LAST:event_buttonReduceActionPerformed + +} diff --git a/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/TransformationUIController.java b/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/TransformationUIController.java new file mode 100644 index 0000000000..1aec913d06 --- /dev/null +++ b/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/TransformationUIController.java @@ -0,0 +1,96 @@ +package org.gephi.desktop.layout; + +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.layout.api.LayoutController; +import org.gephi.layout.plugin.mirror.Mirror; +import org.gephi.layout.plugin.mirror.MirrorLayout; +import org.gephi.layout.plugin.rotate.Rotate; +import org.gephi.layout.plugin.rotate.RotateLayout; +import org.gephi.layout.plugin.scale.AbstractScaleLayout; +import org.gephi.layout.plugin.scale.Expand; +import org.openide.util.Lookup; + + +public class TransformationUIController { + + private final MirrorLayout mirrorLayout; + private final RotateLayout rotateLayout; + private final AbstractScaleLayout scaleLayout; + + private final LayoutController layoutController; + + public TransformationUIController() { + + mirrorLayout = Lookup.getDefault().lookup(Mirror.class).buildLayout(); + rotateLayout = Lookup.getDefault().lookup(Rotate.class).buildLayout(); + scaleLayout = Lookup.getDefault().lookup(Expand.class).buildLayout(); + + layoutController = Lookup.getDefault().lookup(LayoutController.class); + + } + + private GraphModel getGraph() { + GraphController graphController = Lookup.getDefault().lookup(GraphController.class); + + return graphController.getGraphModel(); + + } + + // Current implementation is not ok. Should use a controller to run the layout but + // right now there is only one instance of the LayoutController that will modify also the + // Layout part if we use it. + // Need to find a way to create a new instance of the Layout controller + + public void mirrorXAxis() { + + mirrorLayout.setyAxis(false); + mirrorLayout.setxAxis(true); + layoutController.executeLayout(mirrorLayout); + } + + + public void mirrorYAxis() { + + mirrorLayout.setyAxis(true); + mirrorLayout.setxAxis(false); + layoutController.executeLayout(mirrorLayout); + } + + + public void rotateRight1Deg() { + + rotateLayout.setAngle(1.f); + layoutController.executeLayout(rotateLayout); + } + + + public void rotateRight45Deg() { + rotateLayout.setAngle(45.f); + layoutController.executeLayout(rotateLayout); + } + + + public void rotateLeft1Deg() { + rotateLayout.setAngle(-1.f); + layoutController.executeLayout(rotateLayout); + } + + + public void rotateLeft45Deg() { + rotateLayout.setAngle(-45.f); + layoutController.executeLayout(rotateLayout); + } + + + public void expand() { + scaleLayout.setScale(1.1f); + layoutController.executeLayout(scaleLayout); + } + + + public void reduce() { + scaleLayout.setScale(0.9f); + layoutController.executeLayout(scaleLayout); + } +} diff --git a/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/options/LayoutOptionsPanel.java b/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/options/LayoutOptionsPanel.java new file mode 100644 index 0000000000..e8ba4b74c9 --- /dev/null +++ b/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/options/LayoutOptionsPanel.java @@ -0,0 +1,173 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.layout.options; + +import java.awt.Font; +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import javax.swing.DefaultComboBoxModel; +import javax.swing.GroupLayout; +import javax.swing.JComboBox; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JSeparator; +import javax.swing.LayoutStyle; +import org.gephi.desktop.layout.LayoutPanel; +import org.gephi.desktop.layout.LayoutPanel.LayoutBuilderWrapper; +import org.gephi.layout.spi.LayoutBuilder; +import org.openide.awt.Mnemonics; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; +import org.openide.util.NbPreferences; + +final class LayoutOptionsPanel extends JPanel { + + private final LayoutOptionsPanelController controller; + + private JComboBox defaultLayoutCombobox; + + LayoutOptionsPanel(LayoutOptionsPanelController controller) { + this.controller = controller; + initComponents(); + } + + private void initComponents() { + JLabel titleDefaultSettings = new JLabel(); + JSeparator titleSeparator = new JSeparator(); + JLabel labelDefaultLayout = new JLabel(); + defaultLayoutCombobox = new JComboBox<>(); + + Font boldFont = titleDefaultSettings.getFont().deriveFont(Font.BOLD); + titleDefaultSettings.setFont(boldFont); + titleDefaultSettings.setText( + NbBundle.getMessage(LayoutOptionsPanel.class, "LayoutOptionsPanel.titleDefaultSettings.text")); + + Mnemonics.setLocalizedText(labelDefaultLayout, + NbBundle.getMessage(LayoutOptionsPanel.class, "LayoutOptionsPanel.labelDefaultLayout.text")); + + populateLayoutCombobox(); + defaultLayoutCombobox.addActionListener(e -> controller.changed()); + + GroupLayout layout = new GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(titleDefaultSettings) + .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) + .addComponent(titleSeparator)) + .addGroup(layout.createSequentialGroup() + .addGap(10, 10, 10) + .addComponent(labelDefaultLayout) + .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(defaultLayoutCombobox, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(GroupLayout.Alignment.CENTER) + .addComponent(titleDefaultSettings) + .addComponent(titleSeparator, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, + GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE) + .addComponent(labelDefaultLayout) + .addComponent(defaultLayoutCombobox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, + GroupLayout.PREFERRED_SIZE)) + .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + } + + private void populateLayoutCombobox() { + DefaultComboBoxModel model = new DefaultComboBoxModel<>(); + model.addElement(NbBundle.getMessage(LayoutOptionsPanel.class, "LayoutOptionsPanel.noLayout.text")); + + List builders = new ArrayList<>(Lookup.getDefault().lookupAll(LayoutBuilder.class)); + builders.sort(Comparator.comparing(LayoutBuilder::getName)); + for (LayoutBuilder builder : builders) { + model.addElement(new LayoutBuilderWrapper(builder)); + } + defaultLayoutCombobox.setModel(model); + } + + void load() { + String defaultBuilderClass = + NbPreferences.forModule(LayoutPanel.class).get(LayoutPanel.DEFAULT_LAYOUT_PREF, ""); + + if (defaultBuilderClass.isEmpty()) { + defaultLayoutCombobox.setSelectedIndex(0); + } else { + boolean found = false; + for (int i = 1; i < defaultLayoutCombobox.getItemCount(); i++) { + Object item = defaultLayoutCombobox.getItemAt(i); + if (item instanceof LayoutBuilderWrapper && + ((LayoutBuilderWrapper) item).getLayoutBuilder().getClass().getName() + .equals(defaultBuilderClass)) { + defaultLayoutCombobox.setSelectedIndex(i); + found = true; + break; + } + } + if (!found) { + defaultLayoutCombobox.setSelectedIndex(0); + } + } + } + + void store() { + Object selected = defaultLayoutCombobox.getSelectedItem(); + if (selected instanceof LayoutBuilderWrapper) { + NbPreferences.forModule(LayoutPanel.class) + .put(LayoutPanel.DEFAULT_LAYOUT_PREF, + ((LayoutBuilderWrapper) selected).getLayoutBuilder().getClass().getName()); + } else { + NbPreferences.forModule(LayoutPanel.class).put(LayoutPanel.DEFAULT_LAYOUT_PREF, ""); + } + } +} diff --git a/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/options/LayoutOptionsPanelController.java b/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/options/LayoutOptionsPanelController.java new file mode 100644 index 0000000000..1c33023b7c --- /dev/null +++ b/modules/DesktopLayout/src/main/java/org/gephi/desktop/layout/options/LayoutOptionsPanelController.java @@ -0,0 +1,123 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.layout.options; + +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; +import javax.swing.JComponent; +import org.netbeans.spi.options.OptionsPanelController; +import org.openide.util.HelpCtx; +import org.openide.util.Lookup; + +@OptionsPanelController.SubRegistration(location = "Gephi", + displayName = "#AdvancedOption_DisplayName_Layout", + keywords = "#AdvancedOption_Keywords_Layout", + keywordsCategory = "Gephi/Layout", + position = 600) +public final class LayoutOptionsPanelController extends OptionsPanelController { + + private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); + private LayoutOptionsPanel panel; + private boolean changed; + + @Override + public void update() { + getPanel().load(); + changed = false; + } + + @Override + public void applyChanges() { + getPanel().store(); + changed = false; + } + + @Override + public void cancel() { + } + + @Override + public boolean isValid() { + return true; + } + + @Override + public boolean isChanged() { + return changed; + } + + @Override + public HelpCtx getHelpCtx() { + return null; + } + + @Override + public JComponent getComponent(Lookup masterLookup) { + return getPanel(); + } + + @Override + public void addPropertyChangeListener(PropertyChangeListener l) { + pcs.addPropertyChangeListener(l); + } + + @Override + public void removePropertyChangeListener(PropertyChangeListener l) { + pcs.removePropertyChangeListener(l); + } + + private LayoutOptionsPanel getPanel() { + if (panel == null) { + panel = new LayoutOptionsPanel(this); + } + return panel; + } + + void changed() { + if (!changed) { + changed = true; + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, false, true); + } + pcs.firePropertyChange(OptionsPanelController.PROP_VALID, null, null); + } +} diff --git a/modules/DesktopLayout/src/main/nbm/manifest.mf b/modules/DesktopLayout/src/main/nbm/manifest.mf index c61a749ab2..9889576504 100644 --- a/modules/DesktopLayout/src/main/nbm/manifest.mf +++ b/modules/DesktopLayout/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/desktop/layout/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi UI +OpenIDE-Module-Name: Desktop Layout \ No newline at end of file diff --git a/modules/DesktopLayout/src/main/nbm/module.xml b/modules/DesktopLayout/src/main/nbm/module.xml deleted file mode 100644 index 9155d54860..0000000000 --- a/modules/DesktopLayout/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle.properties b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle.properties index a398ab7fba..e328f544bc 100644 --- a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle.properties +++ b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle.properties @@ -1,5 +1,3 @@ -OpenIDE-Module-Display-Category=Gephi UI -OpenIDE-Module-Name=Desktop Layout OpenIDE-Module-Short-Description=Integrate layout UI CTL_LayoutAction=Layout @@ -22,7 +20,24 @@ LayoutPanel.presetsButton.text=Presets... LayoutPanel.presetsButton.savePreset=Save preset... LayoutPanel.presetsButton.savePreset.input = Name LayoutPanel.presetsButton.savePreset.input.name = Preset name +LayoutPanel.presetsButton.savePresetReplace.title = Preset exists +LayoutPanel.presetsButton.savePresetReplace.text = A preset with the same name already exists. Do you want to replace it? LayoutPanel.presetsButton.nopreset=No preset +LayoutPanel.presetsButton.deletePresets=Delete presets... +LayoutPanel.presetsButton.setDefault=Set default... +LayoutPanel.presetsButton.setDefault.remove=Remove default LayoutPanel.status.savePreset= {0} preset "{1}" saved LayoutPanel.status.loadPreset= {0} preset "{1}" loaded +LayoutPanel.status.reset=Defaults reloaded for {0} +LayoutPanel.status.deletePreset= {0} preset "{1}" deleted +LayoutPanel.status.setDefaultPreset=Default preset for {0} set to "{1}" +LayoutPanel.status.removeDefaultPreset=Default preset for {0} removed, Gephi default will be used +TransformationPanel.buttonMirrorY.toolTipText=Mirror on Y Axis +TransformationPanel.buttonMirrorX.toolTipText=Mirror on X Axis +TransformationPanel.buttonRotateLeft45deg.toolTipText=Rotate 45\u00b0 left +TransformationPanel.buttonRotateLeft1deg.toolTipText=Rotate 1\u00b0 left +TransformationPanel.buttonRotateRight1deg.toolTipText=Rotate 1\u00b0 right +TransformationPanel.buttonRotateRight45deg.toolTipText=Rotate 45\u00b0 right +TransformationPanel.buttonExpand.toolTipText=Expand +TransformationPanel.buttonReduce.toolTipText=Reduce diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_ar.properties b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_ca.properties b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_ca.properties new file mode 100644 index 0000000000..56b53d5015 --- /dev/null +++ b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_ca.properties @@ -0,0 +1,23 @@ +OpenIDE-Module-Short-Description=Integra el disseny d'IU +CTL_LayoutAction=Disseny +CTL_LayoutTopComponent=Disseny +!HINT_LayoutTopComponent= + +LayoutPanel.infoLabel.text= +LayoutPanel.choose.text=---Tria un disseny +LayoutPanel.runButton.text=Executa +LayoutPanel.runButton.tooltip=Run the layout algorithm +LayoutPanel.stopButton.text=Atura +LayoutPanel.stopButton.tooltip=Stop the algorithm, could take a moment as it waits the pass to finish +LayoutPanel.resetButton.text=Reinicia +LayoutPanel.tooltip.speed=Velocitat +LayoutPanel.tooltip.quality=Qualitat + + +LayoutPanel.presetsButton.text=Presets... +LayoutPanel.presetsButton.savePreset=Save preset... +LayoutPanel.presetsButton.savePreset.input=Nom +LayoutPanel.presetsButton.savePreset.input.name=Preset name +LayoutPanel.presetsButton.nopreset=No preset +LayoutPanel.status.savePreset={0} preset "{1}" saved +LayoutPanel.status.loadPreset={0} preset "{1}" loaded diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_cs.properties b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_cs.properties index 80ca47b684..caaaacd919 100644 --- a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_cs.properties +++ b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_cs.properties @@ -1,43 +1,26 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-26 14\:41+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Short-Description=Za\u010dlenit rozhran\u00ed rozvr\u017een\u00ed - -CTL_LayoutAction=Rozlo\u017een\u00ed - -CTL_LayoutTopComponent=Rozlo\u017een\u00ed - -LayoutPanel.choose.text=---Zvolte rozlo\u017een\u00ed - -LayoutPanel.runButton.text=Spustit - -LayoutPanel.runButton.tooltip=Spustit algoritmus rozlo\u017een\u00ed - -LayoutPanel.stopButton.text=Zastavit - -LayoutPanel.stopButton.tooltip=Zastavit algoritmus, kdy\u017e se bude \u010dekat na dokon\u010den\u00ed pr\u016fchodu, toto m\u016f\u017ee chv\u00edli trvat - -LayoutPanel.resetButton.text=Resetovat - -LayoutPanel.tooltip.speed=Rychlost - -LayoutPanel.tooltip.quality=Kvalita - -LayoutPanel.presetsButton.text=P\u0159edvolby... - -LayoutPanel.presetsButton.savePreset=Ulo\u017eit p\u0159edvolbu... - -LayoutPanel.presetsButton.savePreset.input=N\u00e1zev - -LayoutPanel.presetsButton.savePreset.input.name=N\u00e1zev p\u0159edvolby - -LayoutPanel.presetsButton.nopreset=Bez n\u00e1zvu - -LayoutPanel.status.savePreset=p\u0159edvolba {0} "{1}" ulo\u017eena - -LayoutPanel.status.loadPreset=p\u0159edvolba {0} "{1}" na\u010dtena +OpenIDE-Module-Short-Description=Za\u010dlenit rozhranν rozvr\u017eenν + +CTL_LayoutAction=Rozlo\u017eenν +CTL_LayoutTopComponent=Rozlo\u017eenν +!HINT_LayoutTopComponent= + +LayoutPanel.infoLabel.text= +LayoutPanel.choose.text=---Zvolte rozlo\u017eenν +LayoutPanel.runButton.text=Spustit +LayoutPanel.runButton.tooltip=Spustit algoritmus rozlo\u017eenν +LayoutPanel.stopButton.text=Zastavit +LayoutPanel.stopButton.tooltip=Zastavit algoritmus, kdy\u017e se bude \u010dekat na dokon\u010denν pr\u016fchodu, toto m\u016f\u017ee chvνli trvat +LayoutPanel.resetButton.text=Resetovat + +LayoutPanel.tooltip.speed = Rychlost +LayoutPanel.tooltip.quality = Kvalita + + +LayoutPanel.presetsButton.text=P\u0159edvolby... +LayoutPanel.presetsButton.savePreset=Ulo\u017eit p\u0159edvolbu... +LayoutPanel.presetsButton.savePreset.input = Nαzev +LayoutPanel.presetsButton.savePreset.input.name = Nαzev p\u0159edvolby +LayoutPanel.presetsButton.nopreset=Bez nαzvu + +LayoutPanel.status.savePreset= p\u0159edvolba {0} "{1}" ulo\u017eena +LayoutPanel.status.loadPreset= p\u0159edvolba {0} "{1}" na\u010dtena diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_de.properties b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_de.properties new file mode 100644 index 0000000000..2fd0a06fb7 --- /dev/null +++ b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_de.properties @@ -0,0 +1,40 @@ +OpenIDE-Module-Short-Description=Integriert Layout-Bedienoberflδche +CTL_LayoutAction=Layout +CTL_LayoutTopComponent=Layout +!HINT_LayoutTopComponent= + +LayoutPanel.infoLabel.text= +LayoutPanel.choose.text=--Layout auswδhlen +LayoutPanel.runButton.text=Starten +LayoutPanel.runButton.tooltip=Starte den Layout Algorithmus +LayoutPanel.stopButton.text=Stop +LayoutPanel.stopButton.tooltip=Stoppe den Algorithmus. Dies kann einen Moment dauern, da eine Iteration abgeschlossen wird +LayoutPanel.resetButton.text=Zurόcksetzen +LayoutPanel.tooltip.speed=Geschwindigkeit +LayoutPanel.tooltip.quality=Qualitδt + + +LayoutPanel.presetsButton.text=Voreinstellungen... +LayoutPanel.presetsButton.savePreset=Speichere Voreinstellungen... +LayoutPanel.presetsButton.savePreset.input=Name +LayoutPanel.presetsButton.savePreset.input.name=Voreinstellungs-Name +LayoutPanel.presetsButton.nopreset=Keine Voreinstellung +LayoutPanel.status.savePreset={0} Voreinstellung "{1}" gespeichert +LayoutPanel.status.loadPreset={0} Voreinstellung "{1}" geladen +TransformationPanel.buttonReduce.toolTipText=Verkleinern +TransformationPanel.buttonExpand.toolTipText=Erweitern +LayoutPanel.presetsButton.deletePresets=L\u00F6sche Voreinstellungen... +LayoutPanel.presetsButton.savePresetReplace.title=Voreinstellung existiert +TransformationPanel.buttonMirrorY.toolTipText=Auf der Y-Achse spiegeln +TransformationPanel.buttonMirrorX.toolTipText=Auf der X-Achse spiegeln +TransformationPanel.buttonRotateLeft45deg.toolTipText=Um 45\u00B0 nach links drehen +TransformationPanel.buttonRotateRight45deg.toolTipText=Um 45\u00B0 nach rechts drehen +TransformationPanel.buttonRotateLeft1deg.toolTipText=Um 1\u00B0 nach links drehen +TransformationPanel.buttonRotateRight1deg.toolTipText=Um 1\u00B0 nach rechts drehen +LayoutPanel.presetsButton.savePresetReplace.text=Eine Voreinstellung mit demselben Namen existiert bereits. Wollen Sie diese ersetzen? +LayoutPanel.presetsButton.setDefault=Setze Standardeinstellung... +LayoutPanel.presetsButton.setDefault.remove=Entferne Standardeinstellung +LayoutPanel.status.reset=Standardeinstellungen f\u00FCr {0} neu geladen +LayoutPanel.status.deletePreset={0} Voreinstellung "{1}" gel\u00F6scht +LayoutPanel.status.setDefaultPreset=Standard-Voreinstellung f\u00FCr {0} auf "{1}" gesetzt +LayoutPanel.status.removeDefaultPreset=Standard-Voreinstellung f\u00FCr {0} entfernt. Gephi-Standard wird benutzt diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_es.properties b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_es.properties index 28e2803753..23d9807871 100644 --- a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_es.properties +++ b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_es.properties @@ -1,43 +1,32 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:08+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Short-Description=Integrar la interfaz de usuario del m\u00f3dulo Layout - -CTL_LayoutAction=Distribuci\u00f3n - -CTL_LayoutTopComponent=Distribuci\u00f3n - -LayoutPanel.choose.text=---Elige una distribuci\u00f3n +OpenIDE-Module-Short-Description=Integrar la interfaz de usuario del mσdulo Layout +CTL_LayoutAction=Distribuciσn +CTL_LayoutTopComponent=Distribuciσn +!HINT_LayoutTopComponent= +LayoutPanel.infoLabel.text= +LayoutPanel.choose.text=---Elige una distribuciσn LayoutPanel.runButton.text=Ejecutar - -LayoutPanel.runButton.tooltip=Ejecutar el algoritmo de distribuci\u00f3n - +LayoutPanel.runButton.tooltip=Ejecutar el algoritmo de distribuciσn LayoutPanel.stopButton.text=Parar - -LayoutPanel.stopButton.tooltip=Parar el algoritmo, podr\u00eda tomar un momento mientras se espera a que el paso finalize. - +LayoutPanel.stopButton.tooltip=Detener el algoritmo, podr\u00EDa tardar un momento mientras espera a que termine el pase LayoutPanel.resetButton.text=Restaurar - LayoutPanel.tooltip.speed=Velocidad - LayoutPanel.tooltip.quality=Calidad -LayoutPanel.presetsButton.text=Configuraciones predefinidas... - -LayoutPanel.presetsButton.savePreset=Guardar configuraci\u00f3n predefinida... +LayoutPanel.presetsButton.text=Configuraciones predefinidas... +LayoutPanel.presetsButton.savePreset=Guardar configuraciσn predefinida... LayoutPanel.presetsButton.savePreset.input=Nombre - -LayoutPanel.presetsButton.savePreset.input.name=Nombre de configuraci\u00f3n predefinida - +LayoutPanel.presetsButton.savePreset.input.name=Nombre de configuraciσn predefinida LayoutPanel.presetsButton.nopreset=Sin configuraciones predefinidas - -LayoutPanel.status.savePreset=Configuraci\u00f3n predefinida "{1}" para {0} guardada - -LayoutPanel.status.loadPreset=Configuraci\u00f3n predefinida "{1}" para {0} cargada +LayoutPanel.status.savePreset=Configuraciσn predefinida "{1}" para {0} guardada +LayoutPanel.status.loadPreset=Configuraciσn predefinida "{1}" para {0} cargada +LayoutPanel.presetsButton.savePresetReplace.title=Existe una preconfiguraci\u00F3n +LayoutPanel.presetsButton.savePresetReplace.text=Ya existe un preajuste con el mismo nombre. \u00BFDesea reemplazarlo? +LayoutPanel.presetsButton.deletePresets=Eliminar ajustes preestablecidos... +LayoutPanel.presetsButton.setDefault=Establecer predeterminado... +LayoutPanel.presetsButton.setDefault.remove=Eliminar predeterminado +LayoutPanel.status.reset=Por defecto recargado para {0} +LayoutPanel.status.deletePreset={0} preajuste "{1}" borrado +LayoutPanel.status.setDefaultPreset=Preajuste por defecto para {0} ajustado a "{1}" +LayoutPanel.status.removeDefaultPreset=Preajuste predeterminado para {0} eliminado, se utilizar\u00E1 el predeterminado de Gephi diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_fr.properties b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_fr.properties index 6cf3fcd9cf..614a72d488 100644 --- a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_fr.properties +++ b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_fr.properties @@ -1,43 +1,26 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:07+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Int\u00e8gre l'interface utilisateur du module Layout - -CTL_LayoutAction=Spatialisation - -CTL_LayoutTopComponent=Spatialisation - -LayoutPanel.choose.text=Choisir une spatialisation - -LayoutPanel.runButton.text=Ex\u00e9cuter - -LayoutPanel.runButton.tooltip=Ex\u00e9cuter l'algorithme de spatialisation - -LayoutPanel.stopButton.text=Arr\u00eater - -LayoutPanel.stopButton.tooltip=Arr\u00eater l'algorithme. La fin de la passe peut durer un certain temps. - -LayoutPanel.resetButton.text=R\u00e9initialiser - -LayoutPanel.tooltip.speed=Vitesse - -LayoutPanel.tooltip.quality=Qualit\u00e9 - -LayoutPanel.presetsButton.text=R\u00e9glages... - -LayoutPanel.presetsButton.savePreset=Enregistrer le r\u00e9glage... - -LayoutPanel.presetsButton.savePreset.input=Nom - -LayoutPanel.presetsButton.savePreset.input.name=Nom du r\u00e9glage - -LayoutPanel.presetsButton.nopreset=Aucun r\u00e9glage - -LayoutPanel.status.savePreset={0} r\u00e9glage "{1}" enregistr\u00e9 - -LayoutPanel.status.loadPreset={0} r\u00e9glage "{1}" charg\u00e9 +OpenIDE-Module-Short-Description=Intθgre l'interface utilisateur du module Layout + +CTL_LayoutAction=Spatialisation +CTL_LayoutTopComponent=Spatialisation +!HINT_LayoutTopComponent= + +LayoutPanel.infoLabel.text= +LayoutPanel.choose.text=Choisir une spatialisation +LayoutPanel.runButton.text=Exιcuter +LayoutPanel.runButton.tooltip=Exιcuter l'algorithme de spatialisation +LayoutPanel.stopButton.text=Arrκter +LayoutPanel.stopButton.tooltip=Arrκter l'algorithme. La fin de la passe peut durer un certain temps. +LayoutPanel.resetButton.text=Rιinitialiser + +LayoutPanel.tooltip.speed = Vitesse +LayoutPanel.tooltip.quality = Qualitι + + +LayoutPanel.presetsButton.text=Rιglages... +LayoutPanel.presetsButton.savePreset=Enregistrer le rιglage... +LayoutPanel.presetsButton.savePreset.input = Nom +LayoutPanel.presetsButton.savePreset.input.name = Nom du rιglage +LayoutPanel.presetsButton.nopreset=Aucun rιglage + +LayoutPanel.status.savePreset= {0} rιglage "{1}" enregistrι +LayoutPanel.status.loadPreset= {0} rιglage "{1}" chargι diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_he.properties b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_he.properties new file mode 100644 index 0000000000..f9f11d37f0 --- /dev/null +++ b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_he.properties @@ -0,0 +1,23 @@ +OpenIDE-Module-Short-Description=Integrate layout UI +CTL_LayoutAction=Layout +CTL_LayoutTopComponent=Layout +!HINT_LayoutTopComponent= + +LayoutPanel.infoLabel.text= +LayoutPanel.choose.text=---Choose a layout +LayoutPanel.runButton.text=Run +LayoutPanel.runButton.tooltip=Run the layout algorithm +LayoutPanel.stopButton.text=Stop +LayoutPanel.stopButton.tooltip=Stop the algorithm, could take a moment as it waits the pass to finish +LayoutPanel.resetButton.text=Reset +LayoutPanel.tooltip.speed=Speed +LayoutPanel.tooltip.quality=Quality + + +LayoutPanel.presetsButton.text=Presets... +LayoutPanel.presetsButton.savePreset=Save preset... +LayoutPanel.presetsButton.savePreset.input=Name +LayoutPanel.presetsButton.savePreset.input.name=Preset name +LayoutPanel.presetsButton.nopreset=No preset +LayoutPanel.status.savePreset={0} preset "{1}" saved +LayoutPanel.status.loadPreset={0} preset "{1}" loaded diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_hu.properties b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_hu.properties new file mode 100644 index 0000000000..b6f658d26d --- /dev/null +++ b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_hu.properties @@ -0,0 +1,22 @@ + + +LayoutPanel.resetButton.text=Vissza\u00E1ll\u00EDt\u00E1s +LayoutPanel.stopButton.text=\u00C1llj +LayoutPanel.status.loadPreset={0} el\u0151re be\u00E1ll\u00EDtott "{1}" bet\u00F6ltve +LayoutPanel.choose.text=---V\u00E1lasszon elrendez\u00E9st +LayoutPanel.presetsButton.savePreset=El\u0151be\u00E1ll\u00EDt\u00E1s ment\u00E9se +LayoutPanel.runButton.text=Futtat +LayoutPanel.runButton.tooltip=Futtassa az elrendez\u00E9s algoritmus\u00E1t +LayoutPanel.tooltip.quality=Min\u0151s\u00E9g +LayoutPanel.presetsButton.savePreset.input.name=El\u0151re be\u00E1ll\u00EDtott n\u00E9v +LayoutPanel.presetsButton.nopreset=Nincs el\u0151zm\u00E9ny +LayoutPanel.stopButton.tooltip=\u00C1ll\u00EDtsa le az algoritmust, eltarthat egy pillanatig, am\u00EDg az \u00E1thalad\u00E1sra v\u00E1r +CTL_LayoutTopComponent=Elrendez\u00E9s +LayoutPanel.tooltip.speed=Sebess\u00E9g +LayoutPanel.presetsButton.savePreset.input=N\u00E9v +OpenIDE-Module-Short-Description=Integr\u00E1lja az elrendez\u00E9si felhaszn\u00E1l\u00F3i fel\u00FCletet +LayoutPanel.status.savePreset={0} el\u0151re be\u00E1ll\u00EDtott "{1}" mentve + + +LayoutPanel.presetsButton.text=El\u0151be\u00E1ll\u00EDt\u00E1sok... +CTL_LayoutAction=Elrendez\u00E9s diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_it.properties b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_it.properties new file mode 100644 index 0000000000..22d11011b7 --- /dev/null +++ b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_it.properties @@ -0,0 +1,23 @@ +OpenIDE-Module-Short-Description=Integrate layout UI +CTL_LayoutAction=Layout +CTL_LayoutTopComponent=Layout +!HINT_LayoutTopComponent= + +LayoutPanel.infoLabel.text= +LayoutPanel.choose.text=---Choose a layout +LayoutPanel.runButton.text=Esegui +LayoutPanel.runButton.tooltip=Run the layout algorithm +LayoutPanel.stopButton.text=Stop +LayoutPanel.stopButton.tooltip=Stop the algorithm, could take a moment as it waits the pass to finish +LayoutPanel.resetButton.text=Reset +LayoutPanel.tooltip.speed=Speed +LayoutPanel.tooltip.quality=Quality + + +LayoutPanel.presetsButton.text=Presets... +LayoutPanel.presetsButton.savePreset=Save preset... +LayoutPanel.presetsButton.savePreset.input=Nome +LayoutPanel.presetsButton.savePreset.input.name=Preset name +LayoutPanel.presetsButton.nopreset=No preset +LayoutPanel.status.savePreset={0} preset "{1}" saved +LayoutPanel.status.loadPreset={0} preset "{1}" loaded diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_ja.properties b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_ja.properties index e18c43bf8c..753e519e66 100644 --- a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_ja.properties +++ b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_ja.properties @@ -1,43 +1,26 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-29 18\:24+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u7d71\u5408\u30ec\u30a4\u30a2\u30a6\u30c8UI - -CTL_LayoutAction=\u30ec\u30a4\u30a2\u30a6\u30c8 - -CTL_LayoutTopComponent=\u30ec\u30a4\u30a2\u30a6\u30c8 - -LayoutPanel.choose.text=---\u30ec\u30a4\u30a2\u30a6\u30c8\u3092\u9078\u629e - -LayoutPanel.runButton.text=\u5b9f\u884c - -LayoutPanel.runButton.tooltip=\u30ec\u30a4\u30a2\u30a6\u30c8\u30fb\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u5b9f\u884c - -LayoutPanel.stopButton.text=\u4e2d\u6b62 - -LayoutPanel.stopButton.tooltip=\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u4e2d\u6b62\u3001\u7d42\u4e86\u307e\u3067\u306b\u3057\u3070\u3089\u304f\u8981\u3059\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093 - -LayoutPanel.resetButton.text=\u30ea\u30bb\u30c3\u30c8 - -LayoutPanel.tooltip.speed=\u901f\u5ea6 - -LayoutPanel.tooltip.quality=\u54c1\u8cea - -LayoutPanel.presetsButton.text=\u30d7\u30ea\u30bb\u30c3\u30c8... - -LayoutPanel.presetsButton.savePreset=\u30d7\u30ea\u30bb\u30c3\u30c8\u3092\u4fdd\u5b58... - -LayoutPanel.presetsButton.savePreset.input=\u540d\u524d - -LayoutPanel.presetsButton.savePreset.input.name=\u30d7\u30ea\u30bb\u30c3\u30c8\u306e\u540d\u524d - -LayoutPanel.presetsButton.nopreset=\u30d7\u30ea\u30bb\u30c3\u30c8\u306a\u3057 - -LayoutPanel.status.savePreset={0}\u30d7\u30ea\u30bb\u30c3\u30c8 "{1}" \u4fdd\u5b58 - -LayoutPanel.status.loadPreset={0}\u30d7\u30ea\u30bb\u30c3\u30c8 "{1}" \u8aad\u307f\u8fbc\u307f +OpenIDE-Module-Short-Description=\u7d71\u5408\u30ec\u30a4\u30a2\u30a6\u30c8UI + +CTL_LayoutAction=\u30ec\u30a4\u30a2\u30a6\u30c8 +CTL_LayoutTopComponent=\u30ec\u30a4\u30a2\u30a6\u30c8 +!HINT_LayoutTopComponent= + +LayoutPanel.infoLabel.text= +LayoutPanel.choose.text=---\u30ec\u30a4\u30a2\u30a6\u30c8\u3092\u9078\u629e +LayoutPanel.runButton.text=\u5b9f\u884c +LayoutPanel.runButton.tooltip=\u30ec\u30a4\u30a2\u30a6\u30c8\u30fb\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u5b9f\u884c +LayoutPanel.stopButton.text=\u4e2d\u6b62 +LayoutPanel.stopButton.tooltip=\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306e\u4e2d\u6b62\u3001\u7d42\u4e86\u307e\u3067\u306b\u3057\u3070\u3089\u304f\u8981\u3059\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093 +LayoutPanel.resetButton.text=\u30ea\u30bb\u30c3\u30c8 + +LayoutPanel.tooltip.speed = \u901f\u5ea6 +LayoutPanel.tooltip.quality = \u54c1\u8cea + + +LayoutPanel.presetsButton.text=\u30d7\u30ea\u30bb\u30c3\u30c8... +LayoutPanel.presetsButton.savePreset=\u30d7\u30ea\u30bb\u30c3\u30c8\u3092\u4fdd\u5b58... +LayoutPanel.presetsButton.savePreset.input = \u540d\u524d +LayoutPanel.presetsButton.savePreset.input.name = \u30d7\u30ea\u30bb\u30c3\u30c8\u306e\u540d\u524d +LayoutPanel.presetsButton.nopreset=\u30d7\u30ea\u30bb\u30c3\u30c8\u306a\u3057 + +LayoutPanel.status.savePreset= {0}\u30d7\u30ea\u30bb\u30c3\u30c8 "{1}" \u4fdd\u5b58 +LayoutPanel.status.loadPreset= {0}\u30d7\u30ea\u30bb\u30c3\u30c8 "{1}" \u8aad\u307f\u8fbc\u307f diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_nl.properties b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_nl.properties new file mode 100644 index 0000000000..6637d49b52 --- /dev/null +++ b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_nl.properties @@ -0,0 +1,23 @@ +OpenIDE-Module-Short-Description=Integrate layout UI +CTL_LayoutAction=Layout +CTL_LayoutTopComponent=Layout +!HINT_LayoutTopComponent= + +LayoutPanel.infoLabel.text= +LayoutPanel.choose.text=---Choose a layout +LayoutPanel.runButton.text=Run +LayoutPanel.runButton.tooltip=Run the layout algorithm +LayoutPanel.stopButton.text=Stoppen +LayoutPanel.stopButton.tooltip=Stop the algorithm, could take a moment as it waits the pass to finish +LayoutPanel.resetButton.text=Reset +LayoutPanel.tooltip.speed=Speed +LayoutPanel.tooltip.quality=Quality + + +LayoutPanel.presetsButton.text=Presets... +LayoutPanel.presetsButton.savePreset=Save preset... +LayoutPanel.presetsButton.savePreset.input=Name +LayoutPanel.presetsButton.savePreset.input.name=Preset name +LayoutPanel.presetsButton.nopreset=No preset +LayoutPanel.status.savePreset={0} preset "{1}" saved +LayoutPanel.status.loadPreset={0} preset "{1}" loaded diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_pt.properties b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_pt.properties new file mode 100644 index 0000000000..e75907a97d --- /dev/null +++ b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_pt.properties @@ -0,0 +1,13 @@ + + +LayoutPanel.stopButton.text=Parar +LayoutPanel.presetsButton.savePreset.input=Nome +LayoutPanel.presetsButton.savePresetReplace.text=Uma predefini\u00E7\u00E3o com o mesmo nome j\u00E1 existe. Voc\u00EA gostaria de substitu\u00ED-la? +LayoutPanel.presetsButton.deletePresets=Apagar predefini\u00E7\u00F5es... +LayoutPanel.runButton.text=Executar +LayoutPanel.tooltip.speed=Velocidade +LayoutPanel.tooltip.quality=Qualidade +LayoutPanel.presetsButton.text=predefini\u00E7\u00F5es... +LayoutPanel.presetsButton.savePreset=Salvar predefini\u00E7\u00E3o... +LayoutPanel.presetsButton.savePreset.input.name=Nome da predefini\u00E7\u00E3o +LayoutPanel.resetButton.text=Reiniciar diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_pt_BR.properties b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_pt_BR.properties index 4c7f7a1252..e501bf621e 100644 --- a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_pt_BR.properties +++ b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_pt_BR.properties @@ -1,43 +1,25 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 17\:43+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Integrar a interface de usu\u00e1rio do m\u00f3dulo distribui\u00e7\u00e3o - -CTL_LayoutAction=Distribui\u00e7\u00e3o - -CTL_LayoutTopComponent=Distribui\u00e7\u00e3o - -LayoutPanel.choose.text=--- Escolha uma distribui\u00e7\u00e3o +OpenIDE-Module-Short-Description=Integrar a interface de usuαrio do mσdulo distribuiηγo +CTL_LayoutAction=Distribuiηγo +CTL_LayoutTopComponent=Distribuiηγo +!HINT_LayoutTopComponent= +LayoutPanel.infoLabel.text= +LayoutPanel.choose.text=--- Escolha uma distribuiηγo LayoutPanel.runButton.text=Executar - -LayoutPanel.runButton.tooltip=Executar o algoritmo de distribui\u00e7\u00e3o - +LayoutPanel.runButton.tooltip=Executar o algoritmo de distribuiηγo LayoutPanel.stopButton.text=Parar - LayoutPanel.stopButton.tooltip=Parar o algoritmo, pode demorar um pouco enquanto espera o passo atual terminar - LayoutPanel.resetButton.text=Restaurar - LayoutPanel.tooltip.speed=Velocidade - LayoutPanel.tooltip.quality=Qualidade -LayoutPanel.presetsButton.text=Configura\u00e7\u00e3o pr\u00e9-definida... - -LayoutPanel.presetsButton.savePreset=Salvar configura\u00e7\u00e3o pr\u00e9-definida... +LayoutPanel.presetsButton.text=Configuraηγo prι-definida... +LayoutPanel.presetsButton.savePreset=Salvar configuraηγo prι-definida... LayoutPanel.presetsButton.savePreset.input=Nome - -LayoutPanel.presetsButton.savePreset.input.name=Nome da configura\u00e7\u00e3o pr\u00e9-definida - -LayoutPanel.presetsButton.nopreset=Sem configura\u00e7\u00f5es pr\u00e9-definidas - -LayoutPanel.status.savePreset=Configura\u00e7\u00e3o pr\u00e9-definida "{1}" para {0} salva - -LayoutPanel.status.loadPreset=Configura\u00e7\u00e3o pr\u00e9-definida "{1}" para {0} carregada +LayoutPanel.presetsButton.savePreset.input.name=Nome da configuraηγo prι-definida +LayoutPanel.presetsButton.nopreset=Sem configuraηυes prι-definidas +LayoutPanel.status.savePreset=Configuraηγo prι-definida "{1}" para {0} salva +LayoutPanel.status.loadPreset=Configuraηγo prι-definida "{1}" para {0} carregada +LayoutPanel.presetsButton.savePresetReplace.text=Uma predefini\u00E7\u00E3o com o mesmo nome j\u00E1 existe. Voc\u00EA gostaria de substitu\u00ED-la? +LayoutPanel.presetsButton.deletePresets=Apagar predefini\u00E7\u00F5es... diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_ro.properties b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_ro.properties new file mode 100644 index 0000000000..a94d1fab21 --- /dev/null +++ b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_ro.properties @@ -0,0 +1,22 @@ + + +OpenIDE-Module-Short-Description=Integreaz\u0103 interfa\u021Ba de dispunere +CTL_LayoutAction=Dispunere +CTL_LayoutTopComponent=Dispunere +LayoutPanel.choose.text=---Alege o dispunere +LayoutPanel.runButton.text=Ruleaz\u0103 +LayoutPanel.runButton.tooltip=Ruleaz\u0103 algoritmul de dispunere a grafului +LayoutPanel.stopButton.text=Stop +LayoutPanel.stopButton.tooltip=Opri\u021Bi algoritmul, poate dura un moment deoarece a\u0219teapt\u0103 terminarea itera\u021Biei +LayoutPanel.resetButton.text=Reseteaz\u0103 +LayoutPanel.tooltip.speed=Vitez\u0103 +LayoutPanel.tooltip.quality=Calitate + + +LayoutPanel.presetsButton.text=Preset\u0103ri... +LayoutPanel.presetsButton.savePreset=Salveaz\u0103 presetare... +LayoutPanel.presetsButton.savePreset.input=Nume +LayoutPanel.presetsButton.savePreset.input.name=Nume presetare +LayoutPanel.presetsButton.nopreset=Nicio presetare +LayoutPanel.status.savePreset=Presetarea "{1}" de {0} salvat\u0103 +LayoutPanel.status.loadPreset=Presetarea "{1}" de {0} \u00EEnc\u0103rcat\u0103 diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_ru.properties b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_ru.properties index e81cc0584d..bd2ce11f4a 100644 --- a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_ru.properties +++ b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_ru.properties @@ -1,43 +1,23 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-29 06\:45+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - OpenIDE-Module-Short-Description=Integrate layout UI - CTL_LayoutAction=\u0423\u043a\u043b\u0430\u0434\u043a\u0430 - CTL_LayoutTopComponent=\u0423\u043a\u043b\u0430\u0434\u043a\u0430 +!HINT_LayoutTopComponent= +LayoutPanel.infoLabel.text= LayoutPanel.choose.text=---\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c - LayoutPanel.runButton.text=\u041f\u0443\u0441\u043a - LayoutPanel.runButton.tooltip=\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0443\u043a\u043b\u0430\u0434\u043a\u0438 - LayoutPanel.stopButton.text=\u0421\u0442\u043e\u043f - LayoutPanel.stopButton.tooltip=\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0443\u043a\u043b\u0430\u0434\u043a\u0438 (\u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0443 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0442\u0440\u0435\u0431\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0432\u0440\u0435\u043c\u044f, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u043a\u043e\u043d\u0447\u0438\u0442\u044c \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u0443\u044e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044e) - LayoutPanel.resetButton.text=\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 - LayoutPanel.tooltip.speed=\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c - LayoutPanel.tooltip.quality=\u041a\u0430\u0447\u0435\u0441\u0442\u0432\u043e -LayoutPanel.presetsButton.text=\u041f\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438... +LayoutPanel.presetsButton.text=\u041f\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438... LayoutPanel.presetsButton.savePreset=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0443... - LayoutPanel.presetsButton.savePreset.input=\u0418\u043c\u044f - LayoutPanel.presetsButton.savePreset.input.name=\u0418\u043c\u044f \u043f\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 - LayoutPanel.presetsButton.nopreset=\u041d\u0435\u0442 \u043f\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043e\u043a - LayoutPanel.status.savePreset=\u041f\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 "{1}" \u0434\u043b\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 {0} \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0430 - LayoutPanel.status.loadPreset=\u041f\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 "{1}" \u0434\u043b\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 {0} \u0437\u0430\u0433\u0440\u0443\u0436\u0435\u043d\u0430 diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_th.properties b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_tr.properties b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_tr.properties new file mode 100644 index 0000000000..a9e76222ba --- /dev/null +++ b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_tr.properties @@ -0,0 +1,23 @@ +OpenIDE-Module-Short-Description=Integrate layout UI +CTL_LayoutAction=Layout +CTL_LayoutTopComponent=Layout +!HINT_LayoutTopComponent= + +LayoutPanel.infoLabel.text= +LayoutPanel.choose.text=---Choose a layout +LayoutPanel.runButton.text=Run +LayoutPanel.runButton.tooltip=Run the layout algorithm +LayoutPanel.stopButton.text=Stop +LayoutPanel.stopButton.tooltip=Stop the algorithm, could take a moment as it waits the pass to finish +LayoutPanel.resetButton.text=Reset +LayoutPanel.tooltip.speed=H\u0131z +LayoutPanel.tooltip.quality=Quality + + +LayoutPanel.presetsButton.text=Presets... +LayoutPanel.presetsButton.savePreset=Save preset... +LayoutPanel.presetsButton.savePreset.input=Name +LayoutPanel.presetsButton.savePreset.input.name=Preset name +LayoutPanel.presetsButton.nopreset=No preset +LayoutPanel.status.savePreset={0} preset "{1}" saved +LayoutPanel.status.loadPreset={0} preset "{1}" loaded diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_uk.properties b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_uk.properties new file mode 100644 index 0000000000..dbc295d7f1 --- /dev/null +++ b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_uk.properties @@ -0,0 +1,36 @@ +LayoutPanel.status.deletePreset={0} \u0441\u0442\u0438\u043B\u044C "{1}" \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043E +LayoutPanel.presetsButton.deletePresets=\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u043F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u0456 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F... +LayoutPanel.presetsButton.savePreset.input.name=\u041F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u044F \u043D\u0430\u0437\u0432\u0430 +LayoutPanel.status.reset=\u041F\u0435\u0440\u0435\u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043E \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0456 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0438 \u0434\u043B\u044F {0} +LayoutPanel.status.removeDefaultPreset=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0456 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u0434\u043B\u044F {0} \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043E, \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0432\u0430\u0442\u0438\u043C\u0435\u0442\u044C\u0441\u044F \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0435 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F Gephi +LayoutPanel.presetsButton.nopreset=\u041D\u0435\u043C\u0430\u0454 \u043F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u044C\u043E\u0433\u043E \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F +OpenIDE-Module-Short-Description=\u0406\u043D\u0442\u0435\u0433\u0440\u0430\u0446\u0456\u044F \u0456\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u043C\u0430\u043A\u0435\u0442\u0430 +CTL_LayoutAction=\u041C\u0430\u043A\u0435\u0442 +CTL_LayoutTopComponent=\u041C\u0430\u043A\u0435\u0442 +LayoutPanel.infoLabel.text=\u0406 +LayoutPanel.choose.text=---\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044C \u043C\u0430\u043A\u0435\u0442 +LayoutPanel.runButton.text=\u0417\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u0438 +LayoutPanel.runButton.tooltip=\u0417\u0430\u043F\u0443\u0441\u0442\u0456\u0442\u044C \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C \u0432\u0435\u0440\u0441\u0442\u043A\u0438 +LayoutPanel.stopButton.text=\u0421\u0442\u043E\u043F +LayoutPanel.stopButton.tooltip=\u0417\u0443\u043F\u0438\u043D\u0456\u0442\u044C \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C, \u043C\u043E\u0436\u0435 \u0437\u043D\u0430\u0434\u043E\u0431\u0438\u0442\u0438\u0441\u044F \u0434\u0435\u044F\u043A\u0438\u0439 \u0447\u0430\u0441, \u043F\u043E\u043A\u0438 \u0432\u0456\u043D \u043E\u0447\u0456\u043A\u0443\u0454 \u0437\u0430\u043A\u0456\u043D\u0447\u0435\u043D\u043D\u044F \u043F\u0440\u043E\u0445\u043E\u0434\u0443 +LayoutPanel.resetButton.text=\u0421\u043A\u0438\u043D\u0443\u0442\u0438 +LayoutPanel.tooltip.speed=\u0428\u0432\u0438\u0434\u043A\u0456\u0441\u0442\u044C +LayoutPanel.tooltip.quality=\u042F\u043A\u0456\u0441\u0442\u044C +LayoutPanel.presetsButton.text=\u041F\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0438... +LayoutPanel.presetsButton.savePreset=\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u043F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u0456 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F... +LayoutPanel.presetsButton.savePreset.input=\u0406\u043C'\u044F +LayoutPanel.presetsButton.savePresetReplace.title=\u041F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u0454 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u0456\u0441\u043D\u0443\u0454 +LayoutPanel.presetsButton.setDefault=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0438 \u0437\u0430 \u0443\u043C\u043E\u0432\u0447\u0430\u043D\u043D\u044F\u043C... +LayoutPanel.presetsButton.setDefault.remove=\u0412\u0438\u043B\u0443\u0447\u0438\u0442\u0438 \u0437\u0430 \u0437\u0430\u043C\u043E\u0432\u0447\u0443\u0432\u0430\u043D\u043D\u044F\u043C +LayoutPanel.status.savePreset={0} \u0441\u0442\u0438\u043B\u044C "{1}" \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043D\u043E +LayoutPanel.status.loadPreset={0} \u0441\u0442\u0438\u043B\u044C "{1}" \u0437\u0430\u0432\u0430\u043D\u0442\u0430\u0436\u0435\u043D\u043E +LayoutPanel.status.setDefaultPreset=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0435 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u0434\u043B\u044F {0} \u0432\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E \u043D\u0430 "{1}" +LayoutPanel.presetsButton.savePresetReplace.text=\u0421\u0442\u0438\u043B\u0456 \u0437 \u0442\u0430\u043A\u043E\u044E \u043D\u0430\u0437\u0432\u043E\u044E \u0432\u0436\u0435 \u0456\u0441\u043D\u0443\u044E\u0442\u044C. \u0412\u0438 \u0445\u043E\u0447\u0435\u0442\u0435 \u0439\u043E\u0433\u043E \u0437\u0430\u043C\u0456\u043D\u0438\u0442\u0438? +TransformationPanel.buttonMirrorY.toolTipText=\u0414\u0437\u0435\u0440\u043A\u0430\u043B\u043E \u043D\u0430 \u043E\u0441\u0456 Y +TransformationPanel.buttonMirrorX.toolTipText=\u0414\u0437\u0435\u0440\u043A\u0430\u043B\u043E \u043D\u0430 \u043E\u0441\u0456 X +TransformationPanel.buttonRotateLeft45deg.toolTipText=\u041F\u043E\u0432\u0435\u0440\u043D\u0443\u0442\u0438 \u043D\u0430 45\u00B0 \u043B\u0456\u0432\u043E\u0440\u0443\u0447 +TransformationPanel.buttonRotateLeft1deg.toolTipText=\u041F\u043E\u0432\u0435\u0440\u043D\u0443\u0442\u0438 \u043D\u0430 1\u00B0 \u043B\u0456\u0432\u043E\u0440\u0443\u0447 +TransformationPanel.buttonRotateRight1deg.toolTipText=\u041F\u043E\u0432\u0435\u0440\u043D\u0443\u0442\u0438 \u043D\u0430 1\u00B0 \u043F\u0440\u0430\u0432\u043E\u0440\u0443\u0447 +TransformationPanel.buttonRotateRight45deg.toolTipText=\u041F\u043E\u0432\u0435\u0440\u043D\u0443\u0442\u0438 \u043D\u0430 45\u00B0 \u043F\u0440\u0430\u0432\u043E\u0440\u0443\u0447 +TransformationPanel.buttonExpand.toolTipText=\u0420\u043E\u0437\u0433\u043E\u0440\u043D\u0443\u0442\u0438 +TransformationPanel.buttonReduce.toolTipText=\u0417\u043C\u0435\u043D\u0448\u0438\u0442\u0438 diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_zh_CN.properties b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_zh_CN.properties index 9baf63962e..9de80ab805 100644 --- a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_zh_CN.properties +++ b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_zh_CN.properties @@ -1,42 +1,26 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:16+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u6574\u5408\u6d41\u7a0b\u754c\u9762 - -CTL_LayoutAction=\u6d41\u7a0b - -CTL_LayoutTopComponent=\u6d41\u7a0b - -LayoutPanel.choose.text=---\u9009\u62e9\u4e00\u4e2a\u6d41\u7a0b - -LayoutPanel.runButton.text=\u8fd0\u884c - -LayoutPanel.runButton.tooltip=\u8fd0\u884c\u6d41\u7a0b\u7b97\u6cd5 - -LayoutPanel.stopButton.text=\u505c\u6b62 - -LayoutPanel.stopButton.tooltip=\u505c\u6b62\u7b97\u6cd5\uff0c\u53ef\u80fd\u8981\u7b49\u5f85\u51e0\u5206\u949f - -LayoutPanel.resetButton.text=\u91cd\u65b0\u8bbe\u7f6e - -LayoutPanel.tooltip.speed=\u901f\u5ea6 - -LayoutPanel.tooltip.quality=\u8d28\u91cf - -LayoutPanel.presetsButton.text=\u9884\u8bbe\u2026\u2026 - -LayoutPanel.presetsButton.savePreset=\u4fdd\u5b58\u9884\u8bbe\u2026\u2026 - -LayoutPanel.presetsButton.savePreset.input=\u540d\u5b57 - -LayoutPanel.presetsButton.savePreset.input.name=\u9884\u8bbe\u540d\u5b57 - -LayoutPanel.presetsButton.nopreset=\u65e0\u9884\u8bbe - -LayoutPanel.status.savePreset={0}\u9884\u8bbe\u201c{1}\u201d\u4fdd\u5b58 - -LayoutPanel.status.loadPreset={0}\u9884\u8bbe\u201c{1}\u201d\u52a0\u8f7d +OpenIDE-Module-Short-Description=\u6574\u5408\u5e03\u5c40\u754c\u9762 + +CTL_LayoutAction=\u5e03\u5c40 +CTL_LayoutTopComponent=\u5e03\u5c40 +!HINT_LayoutTopComponent= + +LayoutPanel.infoLabel.text= +LayoutPanel.choose.text=---\u9009\u62e9\u4e00\u4e2a\u5e03\u5c40 +LayoutPanel.runButton.text=\u8fd0\u884c +LayoutPanel.runButton.tooltip=\u8fd0\u884c\u5e03\u5c40\u7b97\u6cd5 +LayoutPanel.stopButton.text=\u505c\u6b62 +LayoutPanel.stopButton.tooltip=\u505c\u6b62\u7b97\u6cd5\uff0c\u53ef\u80fd\u8981\u7b49\u5f85\u51e0\u5206\u949f +LayoutPanel.resetButton.text=\u91cd\u65b0\u8bbe\u7f6e + +LayoutPanel.tooltip.speed = \u901f\u5ea6 +LayoutPanel.tooltip.quality = \u8d28\u91cf + + +LayoutPanel.presetsButton.text=\u9884\u8bbe\u2026\u2026 +LayoutPanel.presetsButton.savePreset=\u4fdd\u5b58\u9884\u8bbe\u2026\u2026 +LayoutPanel.presetsButton.savePreset.input = \u540d\u5b57 +LayoutPanel.presetsButton.savePreset.input.name = \u9884\u8bbe\u540d\u5b57 +LayoutPanel.presetsButton.nopreset=\u65e0\u9884\u8bbe + +LayoutPanel.status.savePreset= {0}\u9884\u8bbe\u201c{1}\u201d\u4fdd\u5b58 +LayoutPanel.status.loadPreset= {0}\u9884\u8bbe\u201c{1}\u201d\u52a0\u8f7d diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_zh_TW.properties b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_zh_TW.properties new file mode 100644 index 0000000000..74cc1cd3c0 --- /dev/null +++ b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/Bundle_zh_TW.properties @@ -0,0 +1,23 @@ +OpenIDE-Module-Short-Description=Integrate layout UI +CTL_LayoutAction=Layout +CTL_LayoutTopComponent=Layout +!HINT_LayoutTopComponent= + +LayoutPanel.infoLabel.text= +LayoutPanel.choose.text=---Choose a layout +LayoutPanel.runButton.text=Run +LayoutPanel.runButton.tooltip=Run the layout algorithm +LayoutPanel.stopButton.text=\u505c\u6b62 +LayoutPanel.stopButton.tooltip=Stop the algorithm, could take a moment as it waits the pass to finish +LayoutPanel.resetButton.text=Reset +LayoutPanel.tooltip.speed=Speed +LayoutPanel.tooltip.quality=Quality + + +LayoutPanel.presetsButton.text=Presets... +LayoutPanel.presetsButton.savePreset=Save preset... +LayoutPanel.presetsButton.savePreset.input=Name +LayoutPanel.presetsButton.savePreset.input.name=Preset name +LayoutPanel.presetsButton.nopreset=No preset +LayoutPanel.status.savePreset={0} preset "{1}" saved +LayoutPanel.status.loadPreset={0} preset "{1}" loaded diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/cs.po b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/cs.po deleted file mode 100644 index d262ba45fa..0000000000 --- a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/cs.po +++ /dev/null @@ -1,73 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-26 14:41+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Začlenit rozhranΓ­ rozvrΕΎenΓ­" - -msgid "CTL_LayoutAction" -msgstr "RozloΕΎenΓ­" - -msgid "CTL_LayoutTopComponent" -msgstr "RozloΕΎenΓ­" - -msgid "LayoutPanel.choose.text" -msgstr "---Zvolte rozloΕΎenΓ­" - -msgid "LayoutPanel.runButton.text" -msgstr "Spustit" - -msgid "LayoutPanel.runButton.tooltip" -msgstr "Spustit algoritmus rozloΕΎenΓ­" - -msgid "LayoutPanel.stopButton.text" -msgstr "Zastavit" - -msgid "LayoutPanel.stopButton.tooltip" -msgstr "Zastavit algoritmus, kdyΕΎ se bude čekat na dokončenΓ­ prΕ―chodu, toto mΕ―ΕΎe chvΓ­li trvat" - -msgid "LayoutPanel.resetButton.text" -msgstr "Resetovat" - -msgid "LayoutPanel.tooltip.speed" -msgstr "Rychlost" - -msgid "LayoutPanel.tooltip.quality" -msgstr "Kvalita" - -msgid "LayoutPanel.presetsButton.text" -msgstr "PΕ™edvolby..." - -msgid "LayoutPanel.presetsButton.savePreset" -msgstr "UloΕΎit pΕ™edvolbu..." - -msgid "LayoutPanel.presetsButton.savePreset.input" -msgstr "NΓ‘zev" - -msgid "LayoutPanel.presetsButton.savePreset.input.name" -msgstr "NΓ‘zev pΕ™edvolby" - -msgid "LayoutPanel.presetsButton.nopreset" -msgstr "Bez nΓ‘zvu" - -msgid "LayoutPanel.status.savePreset" -msgstr "pΕ™edvolba {0} \"{1}\" uloΕΎena" - -msgid "LayoutPanel.status.loadPreset" -msgstr "pΕ™edvolba {0} \"{1}\" načtena" diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/es.po b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/es.po deleted file mode 100644 index f6cca6440a..0000000000 --- a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/es.po +++ /dev/null @@ -1,73 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:08+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Integrar la interfaz de usuario del mΓ³dulo Layout" - -msgid "CTL_LayoutAction" -msgstr "DistribuciΓ³n" - -msgid "CTL_LayoutTopComponent" -msgstr "DistribuciΓ³n" - -msgid "LayoutPanel.choose.text" -msgstr "---Elige una distribuciΓ³n" - -msgid "LayoutPanel.runButton.text" -msgstr "Ejecutar" - -msgid "LayoutPanel.runButton.tooltip" -msgstr "Ejecutar el algoritmo de distribuciΓ³n" - -msgid "LayoutPanel.stopButton.text" -msgstr "Parar" - -msgid "LayoutPanel.stopButton.tooltip" -msgstr "Parar el algoritmo, podrΓ­a tomar un momento mientras se espera a que el paso finalize." - -msgid "LayoutPanel.resetButton.text" -msgstr "Restaurar" - -msgid "LayoutPanel.tooltip.speed" -msgstr "Velocidad" - -msgid "LayoutPanel.tooltip.quality" -msgstr "Calidad" - -msgid "LayoutPanel.presetsButton.text" -msgstr "Configuraciones predefinidas..." - -msgid "LayoutPanel.presetsButton.savePreset" -msgstr "Guardar configuraciΓ³n predefinida..." - -msgid "LayoutPanel.presetsButton.savePreset.input" -msgstr "Nombre" - -msgid "LayoutPanel.presetsButton.savePreset.input.name" -msgstr "Nombre de configuraciΓ³n predefinida" - -msgid "LayoutPanel.presetsButton.nopreset" -msgstr "Sin configuraciones predefinidas" - -msgid "LayoutPanel.status.savePreset" -msgstr "ConfiguraciΓ³n predefinida \"{1}\" para {0} guardada" - -msgid "LayoutPanel.status.loadPreset" -msgstr "ConfiguraciΓ³n predefinida \"{1}\" para {0} cargada" diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/fr.po b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/fr.po deleted file mode 100644 index 35236a9f03..0000000000 --- a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/fr.po +++ /dev/null @@ -1,73 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:07+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "IntΓ¨gre l'interface utilisateur du module Layout" - -msgid "CTL_LayoutAction" -msgstr "Spatialisation" - -msgid "CTL_LayoutTopComponent" -msgstr "Spatialisation" - -msgid "LayoutPanel.choose.text" -msgstr "Choisir une spatialisation" - -msgid "LayoutPanel.runButton.text" -msgstr "ExΓ©cuter" - -msgid "LayoutPanel.runButton.tooltip" -msgstr "ExΓ©cuter l'algorithme de spatialisation" - -msgid "LayoutPanel.stopButton.text" -msgstr "ArrΓͺter" - -msgid "LayoutPanel.stopButton.tooltip" -msgstr "ArrΓͺter l'algorithme. La fin de la passe peut durer un certain temps." - -msgid "LayoutPanel.resetButton.text" -msgstr "RΓ©initialiser" - -msgid "LayoutPanel.tooltip.speed" -msgstr "Vitesse" - -msgid "LayoutPanel.tooltip.quality" -msgstr "QualitΓ©" - -msgid "LayoutPanel.presetsButton.text" -msgstr "RΓ©glages..." - -msgid "LayoutPanel.presetsButton.savePreset" -msgstr "Enregistrer le rΓ©glage..." - -msgid "LayoutPanel.presetsButton.savePreset.input" -msgstr "Nom" - -msgid "LayoutPanel.presetsButton.savePreset.input.name" -msgstr "Nom du rΓ©glage" - -msgid "LayoutPanel.presetsButton.nopreset" -msgstr "Aucun rΓ©glage" - -msgid "LayoutPanel.status.savePreset" -msgstr "{0} rΓ©glage \"{1}\" enregistrΓ©" - -msgid "LayoutPanel.status.loadPreset" -msgstr "{0} rΓ©glage \"{1}\" chargΓ©" diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/ja.po b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/ja.po deleted file mode 100644 index d859e5a299..0000000000 --- a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/ja.po +++ /dev/null @@ -1,73 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-29 18:24+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "η΅±εˆγƒ¬γ‚€γ‚’γ‚¦γƒˆUI" - -msgid "CTL_LayoutAction" -msgstr "γƒ¬γ‚€γ‚’γ‚¦γƒˆ" - -msgid "CTL_LayoutTopComponent" -msgstr "γƒ¬γ‚€γ‚’γ‚¦γƒˆ" - -msgid "LayoutPanel.choose.text" -msgstr "---γƒ¬γ‚€γ‚’γ‚¦γƒˆγ‚’ιΈζŠž" - -msgid "LayoutPanel.runButton.text" -msgstr "εŸθ‘Œ" - -msgid "LayoutPanel.runButton.tooltip" -msgstr "γƒ¬γ‚€γ‚’γ‚¦γƒˆγƒ»γ‚’γƒ«γ‚΄γƒͺγ‚Ίγƒ γ‚’εŸθ‘Œ" - -msgid "LayoutPanel.stopButton.text" -msgstr "δΈ­ζ­’" - -msgid "LayoutPanel.stopButton.tooltip" -msgstr "をルゴγƒͺγ‚Ίγƒ γδΈ­ζ­’γ€η΅‚δΊ†γΎγ§γ«γ—γ°γ‚‰γθ¦γ™γ‚‹γ‹γ‚‚γ—γ‚ŒγΎγ›γ‚“" - -msgid "LayoutPanel.resetButton.text" -msgstr "γƒͺγ‚»γƒƒγƒˆ" - -msgid "LayoutPanel.tooltip.speed" -msgstr "ι€ŸεΊ¦" - -msgid "LayoutPanel.tooltip.quality" -msgstr "品θ³ͺ" - -msgid "LayoutPanel.presetsButton.text" -msgstr "γƒ—γƒͺγ‚»γƒƒγƒˆ..." - -msgid "LayoutPanel.presetsButton.savePreset" -msgstr "γƒ—γƒͺγ‚»γƒƒγƒˆγ‚’δΏε­˜..." - -msgid "LayoutPanel.presetsButton.savePreset.input" -msgstr "名前" - -msgid "LayoutPanel.presetsButton.savePreset.input.name" -msgstr "γƒ—γƒͺγ‚»γƒƒγƒˆγεε‰" - -msgid "LayoutPanel.presetsButton.nopreset" -msgstr "γƒ—γƒͺγ‚»γƒƒγƒˆγͺし" - -msgid "LayoutPanel.status.savePreset" -msgstr "{0}γƒ—γƒͺγ‚»γƒƒγƒˆ \"{1}\" 保存" - -msgid "LayoutPanel.status.loadPreset" -msgstr "{0}γƒ—γƒͺγ‚»γƒƒγƒˆ \"{1}\" θͺ­γΏθΎΌγΏ" diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/options/Bundle.properties b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/options/Bundle.properties new file mode 100644 index 0000000000..7ea6467801 --- /dev/null +++ b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/options/Bundle.properties @@ -0,0 +1,5 @@ +AdvancedOption_DisplayName_Layout=Layout +AdvancedOption_Keywords_Layout=layout, algorithm, default +LayoutOptionsPanel.titleDefaultSettings.text=Default Settings +LayoutOptionsPanel.labelDefaultLayout.text=Default layout: +LayoutOptionsPanel.noLayout.text=--- No default layout diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/options/Bundle_ar.properties b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/options/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/options/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/options/Bundle_fr.properties b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/options/Bundle_fr.properties new file mode 100644 index 0000000000..5ef10d427c --- /dev/null +++ b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/options/Bundle_fr.properties @@ -0,0 +1 @@ +AdvancedOption_DisplayName_Layout=Spatialisation diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/options/Bundle_th.properties b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/options/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/options/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/org-gephi-desktop-layout.pot b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/org-gephi-desktop-layout.pot deleted file mode 100644 index f20c11aa9b..0000000000 --- a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/org-gephi-desktop-layout.pot +++ /dev/null @@ -1,70 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Integrate layout UI" - -msgid "CTL_LayoutAction" -msgstr "Layout" - -msgid "CTL_LayoutTopComponent" -msgstr "Layout" - -msgid "LayoutPanel.choose.text" -msgstr "---Choose a layout" - -msgid "LayoutPanel.runButton.text" -msgstr "Run" - -msgid "LayoutPanel.runButton.tooltip" -msgstr "Run the layout algorithm" - -msgid "LayoutPanel.stopButton.text" -msgstr "Stop" - -msgid "LayoutPanel.stopButton.tooltip" -msgstr "Stop the algorithm, could take a moment as it waits the pass to finish" - -msgid "LayoutPanel.resetButton.text" -msgstr "Reset" - -msgid "LayoutPanel.tooltip.speed" -msgstr "Speed" - -msgid "LayoutPanel.tooltip.quality" -msgstr "Quality" - -msgid "LayoutPanel.presetsButton.text" -msgstr "Presets..." - -msgid "LayoutPanel.presetsButton.savePreset" -msgstr "Save preset..." - -msgid "LayoutPanel.presetsButton.savePreset.input" -msgstr "Name" - -msgid "LayoutPanel.presetsButton.savePreset.input.name" -msgstr "Preset name" - -msgid "LayoutPanel.presetsButton.nopreset" -msgstr "No preset" - -msgid "LayoutPanel.status.savePreset" -msgstr "{0} preset \"{1}\" saved" - -msgid "LayoutPanel.status.loadPreset" -msgstr "{0} preset \"{1}\" loaded" diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/pt_BR.po b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/pt_BR.po deleted file mode 100644 index 1bebcc68f7..0000000000 --- a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/pt_BR.po +++ /dev/null @@ -1,73 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 17:43+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Integrar a interface de usuΓ‘rio do mΓ³dulo distribuiΓ§Γ£o" - -msgid "CTL_LayoutAction" -msgstr "DistribuiΓ§Γ£o" - -msgid "CTL_LayoutTopComponent" -msgstr "DistribuiΓ§Γ£o" - -msgid "LayoutPanel.choose.text" -msgstr "--- Escolha uma distribuiΓ§Γ£o" - -msgid "LayoutPanel.runButton.text" -msgstr "Executar" - -msgid "LayoutPanel.runButton.tooltip" -msgstr "Executar o algoritmo de distribuiΓ§Γ£o" - -msgid "LayoutPanel.stopButton.text" -msgstr "Parar" - -msgid "LayoutPanel.stopButton.tooltip" -msgstr "Parar o algoritmo, pode demorar um pouco enquanto espera o passo atual terminar" - -msgid "LayoutPanel.resetButton.text" -msgstr "Restaurar" - -msgid "LayoutPanel.tooltip.speed" -msgstr "Velocidade" - -msgid "LayoutPanel.tooltip.quality" -msgstr "Qualidade" - -msgid "LayoutPanel.presetsButton.text" -msgstr "ConfiguraΓ§Γ£o prΓ©-definida..." - -msgid "LayoutPanel.presetsButton.savePreset" -msgstr "Salvar configuraΓ§Γ£o prΓ©-definida..." - -msgid "LayoutPanel.presetsButton.savePreset.input" -msgstr "Nome" - -msgid "LayoutPanel.presetsButton.savePreset.input.name" -msgstr "Nome da configuraΓ§Γ£o prΓ©-definida" - -msgid "LayoutPanel.presetsButton.nopreset" -msgstr "Sem configuraΓ§Γ΅es prΓ©-definidas" - -msgid "LayoutPanel.status.savePreset" -msgstr "ConfiguraΓ§Γ£o prΓ©-definida \"{1}\" para {0} salva" - -msgid "LayoutPanel.status.loadPreset" -msgstr "ConfiguraΓ§Γ£o prΓ©-definida \"{1}\" para {0} carregada" diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/resources/grey.png b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/resources/grey.png deleted file mode 100644 index 6d464abd1a..0000000000 Binary files a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/resources/grey.png and /dev/null differ diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/resources/icon.png b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/resources/icon.png deleted file mode 100644 index 0bad54e53a..0000000000 Binary files a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/resources/icon.png and /dev/null differ diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/resources/layoutInfo.png b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/resources/layoutInfo.png deleted file mode 100644 index 0cf1ec1771..0000000000 Binary files a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/resources/layoutInfo.png and /dev/null differ diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/resources/pause.png b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/resources/pause.png deleted file mode 100644 index 998bfbe644..0000000000 Binary files a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/resources/pause.png and /dev/null differ diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/resources/preset.png b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/resources/preset.png deleted file mode 100644 index f3cdeaeb8c..0000000000 Binary files a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/resources/preset.png and /dev/null differ diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/resources/run.gif b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/resources/run.gif deleted file mode 100644 index 8a35c4c259..0000000000 Binary files a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/resources/run.gif and /dev/null differ diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/resources/small.png b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/resources/small.png deleted file mode 100644 index 9d5f0f00a7..0000000000 Binary files a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/resources/small.png and /dev/null differ diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/resources/stop.png b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/resources/stop.png deleted file mode 100644 index fb8bbdf229..0000000000 Binary files a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/resources/stop.png and /dev/null differ diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/resources/yellow.png b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/resources/yellow.png deleted file mode 100644 index a912e7e5ef..0000000000 Binary files a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/resources/yellow.png and /dev/null differ diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/ru.po b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/ru.po deleted file mode 100644 index 89636c2363..0000000000 --- a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/ru.po +++ /dev/null @@ -1,73 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-29 06:45+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Integrate layout UI" - -msgid "CTL_LayoutAction" -msgstr "Π£ΠΊΠ»Π°Π΄ΠΊΠ°" - -msgid "CTL_LayoutTopComponent" -msgstr "Π£ΠΊΠ»Π°Π΄ΠΊΠ°" - -msgid "LayoutPanel.choose.text" -msgstr "---Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ" - -msgid "LayoutPanel.runButton.text" -msgstr "ΠŸΡƒΡΠΊ" - -msgid "LayoutPanel.runButton.tooltip" -msgstr "Π—Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΉ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΡƒΠΊΠ»Π°Π΄ΠΊΠΈ" - -msgid "LayoutPanel.stopButton.text" -msgstr "Π‘Ρ‚ΠΎΠΏ" - -msgid "LayoutPanel.stopButton.tooltip" -msgstr "ΠžΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ процСсс ΡƒΠΊΠ»Π°Π΄ΠΊΠΈ (Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ врСмя, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒ ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΡƒΡŽ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ)" - -msgid "LayoutPanel.resetButton.text" -msgstr "Π‘Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ настройки" - -msgid "LayoutPanel.tooltip.speed" -msgstr "Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ" - -msgid "LayoutPanel.tooltip.quality" -msgstr "ΠšΠ°Ρ‡Π΅ΡΡ‚Π²ΠΎ" - -msgid "LayoutPanel.presetsButton.text" -msgstr "ΠŸΡ€Π΅Π΄ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΊΠΈ..." - -msgid "LayoutPanel.presetsButton.savePreset" -msgstr "Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ прСдустановку..." - -msgid "LayoutPanel.presetsButton.savePreset.input" -msgstr "Имя" - -msgid "LayoutPanel.presetsButton.savePreset.input.name" -msgstr "Имя прСдустановки" - -msgid "LayoutPanel.presetsButton.nopreset" -msgstr "НСт прСдустановок" - -msgid "LayoutPanel.status.savePreset" -msgstr "ΠŸΡ€Π΅Π΄ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² \"{1}\" для Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° {0} сохранСна" - -msgid "LayoutPanel.status.loadPreset" -msgstr "ΠŸΡ€Π΅Π΄ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΊΠ° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ² \"{1}\" для Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° {0} Π·Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π°" diff --git a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/zh_CN.po b/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/zh_CN.po deleted file mode 100644 index 5cfe4eeb17..0000000000 --- a/modules/DesktopLayout/src/main/resources/org/gephi/desktop/layout/zh_CN.po +++ /dev/null @@ -1,72 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:16+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζ•΄εˆζ΅η¨‹η•Œι’" - -msgid "CTL_LayoutAction" -msgstr "桁程" - -msgid "CTL_LayoutTopComponent" -msgstr "桁程" - -msgid "LayoutPanel.choose.text" -msgstr "---选择一δΈͺ桁程" - -msgid "LayoutPanel.runButton.text" -msgstr "运葌" - -msgid "LayoutPanel.runButton.tooltip" -msgstr "θΏθ‘Œζ΅η¨‹η—法" - -msgid "LayoutPanel.stopButton.text" -msgstr "停歒" - -msgid "LayoutPanel.stopButton.tooltip" -msgstr "停歒η—ζ³•οΌŒε―θƒ½θ¦η­‰εΎ…ε‡ εˆ†ι’Ÿ" - -msgid "LayoutPanel.resetButton.text" -msgstr "重新θΎη½" - -msgid "LayoutPanel.tooltip.speed" -msgstr "ι€ŸεΊ¦" - -msgid "LayoutPanel.tooltip.quality" -msgstr "质量" - -msgid "LayoutPanel.presetsButton.text" -msgstr "ι’„θΎβ€¦β€¦" - -msgid "LayoutPanel.presetsButton.savePreset" -msgstr "δΏε­˜ι’„θΎβ€¦β€¦" - -msgid "LayoutPanel.presetsButton.savePreset.input" -msgstr "名字" - -msgid "LayoutPanel.presetsButton.savePreset.input.name" -msgstr "ι’„θΎεε­—" - -msgid "LayoutPanel.presetsButton.nopreset" -msgstr "ζ— ι’„θΎ" - -msgid "LayoutPanel.status.savePreset" -msgstr "{0}ι’„θΎβ€œ{1}β€δΏε­˜" - -msgid "LayoutPanel.status.loadPreset" -msgstr "{0}ι’„θΎβ€œ{1}β€εŠ θ½½" diff --git a/modules/DesktopLayout/src/test/java/org/gephi/desktop/layout/LayoutPresetPersistenceTest.java b/modules/DesktopLayout/src/test/java/org/gephi/desktop/layout/LayoutPresetPersistenceTest.java new file mode 100644 index 0000000000..0ef2911f55 --- /dev/null +++ b/modules/DesktopLayout/src/test/java/org/gephi/desktop/layout/LayoutPresetPersistenceTest.java @@ -0,0 +1,75 @@ +package org.gephi.desktop.layout; + +import org.gephi.layout.plugin.scale.Contract; +import org.gephi.layout.plugin.scale.ContractLayout; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +public class LayoutPresetPersistenceTest { + + private static final Contract BUILDER = new Contract(); + private LayoutPresetPersistence persistence; + + @Before + public void setUp() { + persistence = new LayoutPresetPersistence(); + } + + @After + public void tearDown() { + persistence.reset(); + } + + @Test + public void testEmpty() { + Assert.assertNull(persistence.getPresets(BUILDER.buildLayout())); + } + + @Test + public void testSave() { + persistence.savePreset("preset1", BUILDER.buildLayout()); + Assert.assertEquals(1, persistence.getPresets(BUILDER.buildLayout()).size()); + Assert.assertTrue(persistence.hasPreset("preset1", BUILDER.buildLayout().getClass().getName())); + } + + @Test + public void testSaveMultiple() { + persistence.savePreset("preset1", BUILDER.buildLayout()); + persistence.savePreset("preset2", BUILDER.buildLayout()); + Assert.assertEquals(2, persistence.getPresets(BUILDER.buildLayout()).size()); + Assert.assertTrue(persistence.hasPreset("preset2", BUILDER.buildLayout().getClass().getName())); + } + + @Test + public void testLoad() { + ContractLayout layout = BUILDER.buildLayout(); + layout.setScale(42.0f); + persistence.savePreset("42", layout); + + layout.resetPropertiesValues(); + Preset preset = persistence.getPreset("42", layout); + Assert.assertNotNull(preset); + persistence.loadPreset(preset, layout); + Assert.assertEquals(42.0, layout.getScale(), 0.0001); + } + + @Test + public void testOverwrite() { + ContractLayout layout = BUILDER.buildLayout(); + layout.setScale(42.0f); + persistence.savePreset("mypreset", layout); + + layout.setScale(99.0f); + persistence.savePreset("mypreset", layout); + + Assert.assertEquals(1, persistence.getPresets(BUILDER.buildLayout()).size()); + + ContractLayout loadTarget = BUILDER.buildLayout(); + Preset preset = persistence.getPreset("mypreset", loadTarget); + Assert.assertNotNull(preset); + persistence.loadPreset(preset, loadTarget); + Assert.assertEquals(99.0, loadTarget.getScale(), 0.0001); + } +} \ No newline at end of file diff --git a/modules/DesktopPerspective/pom.xml b/modules/DesktopPerspective/pom.xml deleted file mode 100644 index 64757734d6..0000000000 --- a/modules/DesktopPerspective/pom.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - 4.0.0 - - gephi-parent - org.gephi - 0.9-SNAPSHOT - ../.. - - - org.gephi - desktop-perspective - 0.9-SNAPSHOT - nbm - - DesktopPerspective - - - - ${project.groupId} - ui-utils - - - ${project.groupId} - perspective-api - - - org.netbeans.api - org-openide-modules - - - org.netbeans.api - org-openide-util-lookup - - - org.netbeans.api - org-openide-util - - - org.netbeans.api - org-openide-windows - - - org.netbeans.api - org-openide-filesystems - - - org.netbeans.api - org-openide-nodes - - - - - - - org.codehaus.mojo - nbm-maven-plugin - - - org.gephi.desktop.perspective.plugin - org.gephi.desktop.perspective.spi - - - - - - diff --git a/modules/DesktopPerspective/src/main/java/org/gephi/desktop/perspective/BannerComponent.form b/modules/DesktopPerspective/src/main/java/org/gephi/desktop/perspective/BannerComponent.form deleted file mode 100644 index 37bda86ddb..0000000000 --- a/modules/DesktopPerspective/src/main/java/org/gephi/desktop/perspective/BannerComponent.form +++ /dev/null @@ -1,127 +0,0 @@ - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/DesktopPerspective/src/main/java/org/gephi/desktop/perspective/BannerComponent.java b/modules/DesktopPerspective/src/main/java/org/gephi/desktop/perspective/BannerComponent.java deleted file mode 100644 index e1c890f8b7..0000000000 --- a/modules/DesktopPerspective/src/main/java/org/gephi/desktop/perspective/BannerComponent.java +++ /dev/null @@ -1,261 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.desktop.perspective; - -import java.awt.Cursor; -import java.awt.Dimension; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import javax.swing.Icon; -import javax.swing.JToggleButton; -import org.gephi.perspective.api.PerspectiveController; -import org.gephi.perspective.spi.Perspective; -import org.gephi.ui.utils.UIUtils; -import org.openide.util.ImageUtilities; -import org.openide.util.Lookup; - -/** - * - * @author Mathieu Bastian - */ -public class BannerComponent extends javax.swing.JPanel { - - private transient JToggleButton[] buttons; - private transient PerspectiveController perspectiveController; - - public BannerComponent() { - initComponents(); - - //Init perspective controller - perspectiveController = Lookup.getDefault().lookup(PerspectiveController.class); - - addGroupTabs(); - - logoButton.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - java.awt.Desktop desktop = java.awt.Desktop.getDesktop(); - - if (desktop.isSupported(java.awt.Desktop.Action.BROWSE)) { - try { - java.net.URI uri = new java.net.URI("http://gephi.org"); - desktop.browse(uri); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - - } - }); - - //This defines the height of the banner bar - with an extra height on MacOS X - setPreferredSize(new Dimension(100, 35 + (UIUtils.isAquaLookAndFeel() ? 10 : 0))); - } - - private void addGroupTabs() { - buttons = new JPerspectiveButton[perspectiveController.getPerspectives().length]; - int i = 0; - - //Add tabs - for (final Perspective perspective : perspectiveController.getPerspectives()) { - JPerspectiveButton toggleButton = new JPerspectiveButton(perspective.getDisplayName(), perspective.getIcon()); - toggleButton.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - perspectiveController.selectPerspective(perspective); - } - }); - perspectivesButtonGroup.add(toggleButton); - buttonsPanel.add(toggleButton); - buttons[i++] = toggleButton; - } - - //Set currently selected button - perspectivesButtonGroup.setSelected(buttons[getSelectedPerspectiveIndex()].getModel(), true); - } - - public int getSelectedPerspectiveIndex() { - int i = 0; - for (Perspective p : perspectiveController.getPerspectives()) { - if (p.equals(perspectiveController.getSelectedPerspective())) { - return i; - } - i++; - } - return -1; - } - - //Not working - /*public void reset() { - refreshSelectedPerspective(); - for (final Perspective group : Lookup.getDefault().lookupAll(Perspective.class).toArray(new Perspective[0])) { - TopComponentGroup tpg = WindowManager.getDefault().findTopComponentGroup(group.getName()); - if (group.getName().equals(selectedPerspective)) { - tpg.open(); - } else { - tpg.close(); - } - } - }*/ - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // //GEN-BEGIN:initComponents - private void initComponents() { - java.awt.GridBagConstraints gridBagConstraints; - - perspectivesButtonGroup = new javax.swing.ButtonGroup(); - mainPanel = new javax.swing.JPanel(); - logoButton = new javax.swing.JButton(); - groupsPanel = new javax.swing.JPanel(); - buttonsPanel = new javax.swing.JPanel(); - bannerBackground = new javax.swing.JLabel(); - - setBackground(new java.awt.Color(255, 255, 255)); - setLayout(new java.awt.BorderLayout()); - - mainPanel.setBackground(new java.awt.Color(255, 255, 255)); - mainPanel.setLayout(new java.awt.GridBagLayout()); - - logoButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/perspective/resources/logo_std.png"))); // NOI18N - logoButton.setToolTipText(org.openide.util.NbBundle.getMessage(BannerComponent.class, "BannerComponent.logoButton.toolTipText")); // NOI18N - logoButton.setBorder(null); - logoButton.setBorderPainted(false); - logoButton.setContentAreaFilled(false); - logoButton.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - logoButton.setFocusPainted(false); - logoButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); - logoButton.setPressedIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/perspective/resources/logo_glow.png"))); // NOI18N - logoButton.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/perspective/resources/logo_glow.png"))); // NOI18N - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 0; - mainPanel.add(logoButton, gridBagConstraints); - - groupsPanel.setBackground(new java.awt.Color(255, 255, 255)); - groupsPanel.setLayout(new java.awt.GridBagLayout()); - - buttonsPanel.setBackground(new java.awt.Color(255, 255, 255)); - buttonsPanel.setCursor(new java.awt.Cursor(java.awt.Cursor.DEFAULT_CURSOR)); - buttonsPanel.setOpaque(false); - buttonsPanel.setPreferredSize(new java.awt.Dimension(10, 25)); - buttonsPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 0; - gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; - gridBagConstraints.anchor = java.awt.GridBagConstraints.FIRST_LINE_START; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.weighty = 1.0; - groupsPanel.add(buttonsPanel, gridBagConstraints); - - bannerBackground.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/perspective/resources/bannerback.png"))); // NOI18N - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 0; - gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; - gridBagConstraints.anchor = java.awt.GridBagConstraints.FIRST_LINE_START; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.weighty = 1.0; - groupsPanel.add(bannerBackground, gridBagConstraints); - - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 0; - gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; - gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.weighty = 1.0; - mainPanel.add(groupsPanel, gridBagConstraints); - - add(mainPanel, java.awt.BorderLayout.CENTER); - }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JLabel bannerBackground; - private javax.swing.JPanel buttonsPanel; - private javax.swing.JPanel groupsPanel; - private javax.swing.JButton logoButton; - private javax.swing.JPanel mainPanel; - private javax.swing.ButtonGroup perspectivesButtonGroup; - // End of variables declaration//GEN-END:variables - - private static class JPerspectiveButton extends JToggleButton { - - public JPerspectiveButton(String text, Icon icon) { - setText(text); - setBorder(null); - setBorderPainted(false); - setContentAreaFilled(false); - setFocusPainted(false); - setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); - - if (UIUtils.isWindowsLookAndFeel()) { - setIcon(ImageUtilities.image2Icon(ImageUtilities.mergeImages(ImageUtilities.loadImage("org/gephi/desktop/perspective/resources/vista-enabled.png"), - ImageUtilities.icon2Image(icon), 6, 3))); - setRolloverIcon(ImageUtilities.image2Icon(ImageUtilities.mergeImages(ImageUtilities.loadImage("org/gephi/desktop/perspective/resources/vista-mousover.png"), - ImageUtilities.icon2Image(icon), 6, 3))); - setSelectedIcon(ImageUtilities.image2Icon(ImageUtilities.mergeImages(ImageUtilities.loadImage("org/gephi/desktop/perspective/resources/vista-selected.png"), - ImageUtilities.icon2Image(icon), 6, 3))); - } else if (UIUtils.isAquaLookAndFeel()) { - setIcon(ImageUtilities.image2Icon(ImageUtilities.mergeImages(ImageUtilities.loadImage("org/gephi/desktop/perspective/resources/aqua-enabled.png"), - ImageUtilities.icon2Image(icon), 6, 3))); - setRolloverIcon(ImageUtilities.image2Icon(ImageUtilities.mergeImages(ImageUtilities.loadImage("org/gephi/desktop/perspective/resources/aqua-mouseover.png"), - ImageUtilities.icon2Image(icon), 6, 3))); - setSelectedIcon(ImageUtilities.image2Icon(ImageUtilities.mergeImages(ImageUtilities.loadImage("org/gephi/desktop/perspective/resources/aqua-selected.png"), - ImageUtilities.icon2Image(icon), 6, 3))); - } else { - setIcon(ImageUtilities.image2Icon(ImageUtilities.mergeImages(ImageUtilities.loadImage("org/gephi/desktop/perspective/resources/nimbus-enabled.png"), - ImageUtilities.icon2Image(icon), 6, 3))); - setRolloverIcon(ImageUtilities.image2Icon(ImageUtilities.mergeImages(ImageUtilities.loadImage("org/gephi/desktop/perspective/resources/nimbus-mouseover.png"), - ImageUtilities.icon2Image(icon), 6, 3))); - setSelectedIcon(ImageUtilities.image2Icon(ImageUtilities.mergeImages(ImageUtilities.loadImage("org/gephi/desktop/perspective/resources/nimbus-selected.png"), - ImageUtilities.icon2Image(icon), 6, 3))); - } - } - } -} diff --git a/modules/DesktopPerspective/src/main/java/org/gephi/desktop/perspective/BannerRootPanelLayout.java b/modules/DesktopPerspective/src/main/java/org/gephi/desktop/perspective/BannerRootPanelLayout.java deleted file mode 100644 index e743ea876e..0000000000 --- a/modules/DesktopPerspective/src/main/java/org/gephi/desktop/perspective/BannerRootPanelLayout.java +++ /dev/null @@ -1,203 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.desktop.perspective; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Container; -import java.awt.Dimension; -import java.awt.Insets; -import java.awt.LayoutManager2; -import java.awt.Rectangle; -import javax.swing.JComponent; -import javax.swing.JMenuBar; -import javax.swing.JRootPane; - -//Author Chris from pinkmatter - RibbonRootPaneLayout -class BannerRootPanelLayout implements LayoutManager2 { - - private JComponent _toolbar; - - public BannerRootPanelLayout(JComponent toolbar) { - _toolbar = toolbar; - } - - @Override - public Dimension preferredLayoutSize(Container parent) { - int contentWidth = 0; - int menuWidth = 0; - int height = 0; - - JRootPane rootPane = (JRootPane) parent; -// hideMenu(rootPane); - - Insets insets = parent.getInsets(); - height += insets.top + insets.bottom; - - Dimension contentSize; - if (rootPane.getContentPane() != null) { - contentSize = rootPane.getContentPane().getPreferredSize(); - } else { - contentSize = rootPane.getSize(); - } - contentWidth = contentSize.width; - height += contentSize.height; - - if (rootPane.getJMenuBar() != null && rootPane.getJMenuBar().isVisible()) { - Dimension menuSize = rootPane.getJMenuBar().getPreferredSize(); - height += menuSize.height; - menuWidth = menuSize.width; - } - - return new Dimension(Math.max(contentWidth, menuWidth) + insets.left + insets.right, height); - } - - @Override - public Dimension minimumLayoutSize(Container parent) { - int contentWidth = 0; - int menuWidth = 0; - int height = 0; - - Insets insets = parent.getInsets(); - height += insets.top + insets.bottom; - - JRootPane rootPane = (JRootPane) parent; - - Dimension contentSize; - if (rootPane.getContentPane() != null) { - contentSize = rootPane.getContentPane().getMinimumSize(); - } else { - contentSize = rootPane.getSize(); - } - contentWidth = contentSize.width; - height += contentSize.height; - - if (rootPane.getJMenuBar() != null && rootPane.getJMenuBar().isVisible()) { - Dimension menuSize = rootPane.getJMenuBar().getMinimumSize(); - height += menuSize.height; - menuWidth = menuSize.width; - } - - return new Dimension(Math.max(contentWidth, menuWidth) + insets.left + insets.right, height); - } - - @Override - public Dimension maximumLayoutSize(Container target) { - return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE); - } - - @Override - public void layoutContainer(Container parent) { - JRootPane rootPane = (JRootPane) parent; -// hideMenu(rootPane); - Rectangle bounds = rootPane.getBounds(); - Insets insets = rootPane.getInsets(); - int y = insets.top; - int x = insets.left; - int w = bounds.width - insets.right - insets.left; - int h = bounds.height - insets.top - insets.bottom; - - if (rootPane.getLayeredPane() != null) { - rootPane.getLayeredPane().setBounds(x, y, w, h); - } - - if (rootPane.getGlassPane() != null) { - rootPane.getGlassPane().setBounds(x, y, w, h); - } - - if (rootPane.getJMenuBar() != null && rootPane.getJMenuBar().isVisible()) { - JMenuBar menu = rootPane.getJMenuBar(); - Dimension size = menu.getPreferredSize(); - menu.setBounds(x, y, w, size.height); - y += size.height; - } - - - if (_toolbar != null) { - Dimension size = _toolbar.getPreferredSize(); - _toolbar.setBounds(x, y, w, size.height); - y += size.height; - } - - if (rootPane.getContentPane() != null) { - int height = h - y; - if (height < 0) { - height = 0; - } - rootPane.getContentPane().setBounds(x, y, w, height); - } - } - - @Override - public void addLayoutComponent(String name, Component comp) { - } - - @Override - public void removeLayoutComponent(Component comp) { - } - - @Override - public void addLayoutComponent(Component comp, Object constraints) { - System.out.println(comp); - } - - @Override - public float getLayoutAlignmentX(Container target) { - return 0.0f; - } - - @Override - public float getLayoutAlignmentY(Container target) { - return 0.0f; - } - - @Override - public void invalidateLayout(Container target) { - } - - private static void hideMenu(JRootPane rootPane) { - JMenuBar menu = rootPane.getJMenuBar(); - if (menu != null) { - menu.setVisible(false); - } - } -} diff --git a/modules/DesktopPerspective/src/main/java/org/gephi/desktop/perspective/Installer.java b/modules/DesktopPerspective/src/main/java/org/gephi/desktop/perspective/Installer.java deleted file mode 100644 index 4e4920375a..0000000000 --- a/modules/DesktopPerspective/src/main/java/org/gephi/desktop/perspective/Installer.java +++ /dev/null @@ -1,116 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.desktop.perspective; - -import java.awt.BorderLayout; -import java.awt.Component; -import javax.swing.*; -import org.gephi.desktop.perspective.spi.BottomComponent; -import org.gephi.perspective.api.PerspectiveController; -import org.openide.modules.ModuleInstall; -import org.openide.util.Lookup; -import org.openide.windows.WindowManager; - -public class Installer extends ModuleInstall { - - @Override - public void restored() { - //Initialize the perspective controller - Lookup.getDefault().lookup(PerspectiveController.class); - - // Init Banner - initBanner(); - } - - private void initBanner() { - //This would be too late: - //WindowManager.getDefault().invokeWhenUIReady(new Runnable() {}); - //Therefore use this: - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - //Get the main window of the NetBeans Platform: - JFrame frame = (JFrame) WindowManager.getDefault().getMainWindow(); - //Get our custom main toolbar: - JComponent toolbar = new BannerComponent(); - - //Set the new layout of our root pane: - frame.getRootPane().setLayout(new BannerRootPanelLayout(toolbar)); - //Install a new toolbar component into the layered pane - //of the main frame on layer 0: - toolbar.putClientProperty(JLayeredPane.LAYER_PROPERTY, 0); - frame.getRootPane().getLayeredPane().add(toolbar, 0); - } - }); - - WindowManager.getDefault().invokeWhenUIReady(new Runnable() { - @Override - public void run() { - JFrame frame = (JFrame) WindowManager.getDefault().getMainWindow(); - - //Get the bottom component - BottomComponent bottomComponentImpl = Lookup.getDefault().lookup(BottomComponent.class); - JComponent bottomComponent = bottomComponentImpl != null ? bottomComponentImpl.getComponent() : null; - - //Replace the content pane with our creation - JComponent statusLinePanel = null; - for (Component cpnt : frame.getContentPane().getComponents()) { - if (cpnt.getName() != null && cpnt.getName().equals("statusLine")) { - statusLinePanel = (JComponent) cpnt; - } - } - if (statusLinePanel != null) { - frame.getContentPane().remove(statusLinePanel); - JPanel southPanel = new JPanel(new BorderLayout()); - southPanel.add(statusLinePanel, BorderLayout.SOUTH); - if (bottomComponent != null) { - bottomComponent.setVisible(false); - southPanel.add(bottomComponent, BorderLayout.CENTER); - } - frame.getContentPane().add(southPanel, BorderLayout.SOUTH); - } -// System.err.println(frame.getContentPane().getClass()); -// System.err.println(frame.getContentPane().getLayout().getClass()); - } - }); - } -} diff --git a/modules/DesktopPerspective/src/main/nbm/manifest.mf b/modules/DesktopPerspective/src/main/nbm/manifest.mf deleted file mode 100644 index 65424ad99b..0000000000 --- a/modules/DesktopPerspective/src/main/nbm/manifest.mf +++ /dev/null @@ -1,5 +0,0 @@ -Manifest-Version: 1.0 -AutoUpdate-Essential-Module: true -OpenIDE-Module-Install: org/gephi/desktop/perspective/Installer.class -OpenIDE-Module-Localizing-Bundle: org/gephi/desktop/perspective/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file diff --git a/modules/DesktopPerspective/src/main/nbm/module.xml b/modules/DesktopPerspective/src/main/nbm/module.xml deleted file mode 100644 index 81e4a3de77..0000000000 --- a/modules/DesktopPerspective/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/Bundle.properties b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/Bundle.properties deleted file mode 100644 index 312cc01d51..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/Bundle.properties +++ /dev/null @@ -1,7 +0,0 @@ -OpenIDE-Module-Display-Category=Gephi UI -OpenIDE-Module-Long-Description=\ - Implementations of default perspectives and banner panel -OpenIDE-Module-Name=Desktop Perspective -OpenIDE-Module-Short-Description=Implementations of default perspectives and banner panel - -BannerComponent.logoButton.toolTipText=Go on Gephi website www.gephi.org diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/Bundle_cs.properties b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/Bundle_cs.properties deleted file mode 100644 index 9275ca1e97..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/Bundle_cs.properties +++ /dev/null @@ -1,13 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-24 12\:15+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=Zaveden\u00ed v\u00fdchoz\u00edch perspektiv a panelu li\u0161ty - -OpenIDE-Module-Short-Description=Zaveden\u00ed v\u00fdchoz\u00edch perspektiv a panelu li\u0161ty - -BannerComponent.logoButton.toolTipText=P\u0159ej\u00edt na str\u00e1nku Gephi www.gephi.org diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/Bundle_es.properties b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/Bundle_es.properties deleted file mode 100644 index 3aaf7f160d..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/Bundle_es.properties +++ /dev/null @@ -1,15 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 18\:23+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Implementaciones de perspectivas por defecto y panel de banner - -OpenIDE-Module-Short-Description=Implementaciones de perspectivas por defecto y panel de banner - -BannerComponent.logoButton.toolTipText=Ir al sitio web de Gephi diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/Bundle_fr.properties b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/Bundle_fr.properties deleted file mode 100644 index 301abef32f..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/Bundle_fr.properties +++ /dev/null @@ -1,14 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 18\:17+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Desktop Perspective - -OpenIDE-Module-Short-Description=SPI des perspectives et de la gestion de TopComponent - -BannerComponent.logoButton.toolTipText=Aller sur le site web de Gephi www.gephi.org diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/Bundle_ja.properties b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/Bundle_ja.properties deleted file mode 100644 index d1378335fb..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/Bundle_ja.properties +++ /dev/null @@ -1,13 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 18\:17+0000\nLast-Translator\: gephi \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u8996\u70b9\u3084\u30c8\u30c3\u30d7\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u7ba1\u7406\u306e\u305f\u3081\u306eSPI - -OpenIDE-Module-Short-Description=\u8996\u70b9\u3084\u30c8\u30c3\u30d7\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u7ba1\u7406\u306e\u305f\u3081\u306eSPI - -BannerComponent.logoButton.toolTipText=Gephi\u306e\u30a6\u30a7\u30d6\u30b5\u30a4\u30c8\u306ewww.gephi.org\u306b\u884c\u304f diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/Bundle_pt_BR.properties b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/Bundle_pt_BR.properties deleted file mode 100644 index 87419412a9..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/Bundle_pt_BR.properties +++ /dev/null @@ -1,14 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -# C\u00e9lio Faria Jr. , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-17 12\:30+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Implementa\u00e7\u00f5es de perspectivas padr\u00e3o e painel de banner - -OpenIDE-Module-Short-Description=Implementa\u00e7\u00f5es de perspectivas padr\u00e3o e painel de banner - -BannerComponent.logoButton.toolTipText=Website do Gephi www.gephi.org diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/Bundle_ru.properties b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/Bundle_ru.properties deleted file mode 100644 index 1c912f6af0..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/Bundle_ru.properties +++ /dev/null @@ -1,13 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 18\:17+0000\nLast-Translator\: gephi \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=SPI for perspectives and TopComponent management - -OpenIDE-Module-Short-Description=SPI for perspectives and TopComponent management - -BannerComponent.logoButton.toolTipText=\u041f\u0435\u0440\u0435\u0439\u0434\u0438\u0442\u0435 \u043d\u0430 \u0441\u0430\u0439\u0442 Gephi\: www.gephi.org diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/Bundle_zh_CN.properties b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/Bundle_zh_CN.properties deleted file mode 100644 index 64457cc6fa..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/Bundle_zh_CN.properties +++ /dev/null @@ -1,12 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 18\:17+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u5355\u4e2a\u7a0b\u5e8f\u542f\u52a8\u548c\u7ec4\u4ef6\u7ba1\u7406 - -OpenIDE-Module-Short-Description=\u5355\u4e2a\u7a0b\u5e8f\u542f\u52a8\u548c\u7ec4\u4ef6\u7ba1\u7406 - -BannerComponent.logoButton.toolTipText=\u7ee7\u7eedGephi\u7f51\u7ad9www.gephi.org diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/cs.po b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/cs.po deleted file mode 100644 index 77d2c3ed30..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/cs.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-24 12:15+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ZavedenΓ­ vΓ½chozΓ­ch perspektiv a panelu liΕ‘ty" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ZavedenΓ­ vΓ½chozΓ­ch perspektiv a panelu liΕ‘ty" - -msgid "BannerComponent.logoButton.toolTipText" -msgstr "PΕ™ejΓ­t na strΓ‘nku Gephi www.gephi.org" diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/es.po b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/es.po deleted file mode 100644 index c28f512631..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/es.po +++ /dev/null @@ -1,30 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 18:23+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Implementaciones de perspectivas por defecto y panel de banner" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implementaciones de perspectivas por defecto y panel de banner" - -msgid "BannerComponent.logoButton.toolTipText" -msgstr "Ir al sitio web de Gephi" diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/fr.po b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/fr.po deleted file mode 100644 index 4e2563dac2..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/fr.po +++ /dev/null @@ -1,29 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 18:17+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Desktop Perspective" - -msgid "OpenIDE-Module-Short-Description" -msgstr "SPI des perspectives et de la gestion de TopComponent" - -msgid "BannerComponent.logoButton.toolTipText" -msgstr "Aller sur le site web de Gephi www.gephi.org" diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/ja.po b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/ja.po deleted file mode 100644 index fbd0d52b6c..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/ja.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 18:17+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "θ¦–η‚Ήγ‚„γƒˆγƒƒγƒ—γ‚³γƒ³γƒγƒΌγƒγƒ³γƒˆη‘理γγŸγ‚γSPI" - -msgid "OpenIDE-Module-Short-Description" -msgstr "θ¦–η‚Ήγ‚„γƒˆγƒƒγƒ—γ‚³γƒ³γƒγƒΌγƒγƒ³γƒˆη‘理γγŸγ‚γSPI" - -msgid "BannerComponent.logoButton.toolTipText" -msgstr "Gephiγγ‚¦γ‚§γƒ–γ‚΅γ‚€γƒˆγwww.gephi.orgに葌く" diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/org-gephi-desktop-perspective.pot b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/org-gephi-desktop-perspective.pot deleted file mode 100644 index 15fbc5a743..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/org-gephi-desktop-perspective.pot +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Implementations of default perspectives and banner panel" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implementations of default perspectives and banner panel" - -msgid "BannerComponent.logoButton.toolTipText" -msgstr "Go on Gephi website www.gephi.org" diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/Bundle_cs.properties b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/Bundle_cs.properties deleted file mode 100644 index 6251750e14..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/Bundle_cs.properties +++ /dev/null @@ -1,13 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-24 12\:16+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OverviewPerspective.name=P\u0159ehled - -LaboratoryPerspective.name=Laborato\u0159 dat - -PreviewPerspective.name=N\u00e1hled diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/Bundle_es.properties b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/Bundle_es.properties deleted file mode 100644 index e815961e05..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/Bundle_es.properties +++ /dev/null @@ -1,13 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:07+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OverviewPerspective.name=Vista general - -LaboratoryPerspective.name=Laboratorio de datos - -PreviewPerspective.name=Previsualizaci\u00f3n diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/Bundle_fr.properties b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/Bundle_fr.properties deleted file mode 100644 index ad0edd1c00..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/Bundle_fr.properties +++ /dev/null @@ -1,13 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:07+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OverviewPerspective.name=Vue d'ensemble - -LaboratoryPerspective.name=Laboratoire de donn\u00e9es - -PreviewPerspective.name=Pr\u00e9visualisation diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/Bundle_ja.properties b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/Bundle_ja.properties deleted file mode 100644 index f87ca4df25..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/Bundle_ja.properties +++ /dev/null @@ -1,13 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-14 08\:43+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OverviewPerspective.name=\u6982\u89b3 - -LaboratoryPerspective.name=\u30c7\u30fc\u30bf\u5de5\u623f - -PreviewPerspective.name=\u30d7\u30ec\u30d3\u30e5\u30fc diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/Bundle_pt_BR.properties b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/Bundle_pt_BR.properties deleted file mode 100644 index bb7e88cf3c..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/Bundle_pt_BR.properties +++ /dev/null @@ -1,13 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 17\:41+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OverviewPerspective.name=Vis\u00e3o geral - -LaboratoryPerspective.name=Laborat\u00f3rio de dados - -PreviewPerspective.name=Visualiza\u00e7\u00e3o diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/Bundle_ru.properties b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/Bundle_ru.properties deleted file mode 100644 index 92badb534d..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/Bundle_ru.properties +++ /dev/null @@ -1,13 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-23 07\:04+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OverviewPerspective.name=\u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 - -LaboratoryPerspective.name=\u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 - -PreviewPerspective.name=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/Bundle_zh_CN.properties b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/Bundle_zh_CN.properties deleted file mode 100644 index dd2cb2ec53..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/Bundle_zh_CN.properties +++ /dev/null @@ -1,12 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:16+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OverviewPerspective.name=\u6982\u89c8 - -LaboratoryPerspective.name=\u6570\u636e\u8d44\u6599 - -PreviewPerspective.name=\u9884\u89c8 diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/cs.po b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/cs.po deleted file mode 100644 index 781b78cc8f..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/cs.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-24 12:16+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OverviewPerspective.name" -msgstr "PΕ™ehled" - -msgid "LaboratoryPerspective.name" -msgstr "LaboratoΕ™ dat" - -msgid "PreviewPerspective.name" -msgstr "NΓ‘hled" diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/es.po b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/es.po deleted file mode 100644 index 38fa14b51d..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/es.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:07+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OverviewPerspective.name" -msgstr "Vista general" - -msgid "LaboratoryPerspective.name" -msgstr "Laboratorio de datos" - -msgid "PreviewPerspective.name" -msgstr "PrevisualizaciΓ³n" diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/fr.po b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/fr.po deleted file mode 100644 index d5ba78809f..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/fr.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:07+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OverviewPerspective.name" -msgstr "Vue d'ensemble" - -msgid "LaboratoryPerspective.name" -msgstr "Laboratoire de donnΓ©es" - -msgid "PreviewPerspective.name" -msgstr "PrΓ©visualisation" diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/ja.po b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/ja.po deleted file mode 100644 index 3bd9f344a7..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/ja.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-14 08:43+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OverviewPerspective.name" -msgstr "概観" - -msgid "LaboratoryPerspective.name" -msgstr "データε·₯房" - -msgid "PreviewPerspective.name" -msgstr "プレビγƒ₯γƒΌ" diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/org-gephi-desktop-perspective-plugin.pot b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/org-gephi-desktop-perspective-plugin.pot deleted file mode 100644 index bf6f622712..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/org-gephi-desktop-perspective-plugin.pot +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OverviewPerspective.name" -msgstr "Overview" - -msgid "LaboratoryPerspective.name" -msgstr "Data Laboratory" - -msgid "PreviewPerspective.name" -msgstr "Preview" diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/pt_BR.po b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/pt_BR.po deleted file mode 100644 index cf7ab7852c..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/pt_BR.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 17:41+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OverviewPerspective.name" -msgstr "VisΓ£o geral" - -msgid "LaboratoryPerspective.name" -msgstr "LaboratΓ³rio de dados" - -msgid "PreviewPerspective.name" -msgstr "VisualizaΓ§Γ£o" diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/resources/laboratory.png b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/resources/laboratory.png deleted file mode 100644 index f1c53f2b57..0000000000 Binary files a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/resources/laboratory.png and /dev/null differ diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/resources/overview.png b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/resources/overview.png deleted file mode 100644 index c375eca20d..0000000000 Binary files a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/resources/overview.png and /dev/null differ diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/resources/preview.png b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/resources/preview.png deleted file mode 100644 index 4f3408dc6c..0000000000 Binary files a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/resources/preview.png and /dev/null differ diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/ru.po b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/ru.po deleted file mode 100644 index 3a6e7a983a..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/ru.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-23 07:04+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OverviewPerspective.name" -msgstr "ΠžΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°" - -msgid "LaboratoryPerspective.name" -msgstr "Лаборатория Π΄Π°Π½Π½Ρ‹Ρ…" - -msgid "PreviewPerspective.name" -msgstr "ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€" diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/zh_CN.po b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/zh_CN.po deleted file mode 100644 index c13a826ccb..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/zh_CN.po +++ /dev/null @@ -1,27 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:16+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OverviewPerspective.name" -msgstr "ζ¦‚θ§ˆ" - -msgid "LaboratoryPerspective.name" -msgstr "ζ•°ζθ΅„ζ–™" - -msgid "PreviewPerspective.name" -msgstr "ι’„θ§ˆ" diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/pt_BR.po b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/pt_BR.po deleted file mode 100644 index 6edd0ecaaf..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/pt_BR.po +++ /dev/null @@ -1,29 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -# CΓ©lio Faria Jr. , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-17 12:30+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ImplementaΓ§Γ΅es de perspectivas padrΓ£o e painel de banner" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplementaΓ§Γ΅es de perspectivas padrΓ£o e painel de banner" - -msgid "BannerComponent.logoButton.toolTipText" -msgstr "Website do Gephi www.gephi.org" diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/aqua-enabled.png b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/aqua-enabled.png deleted file mode 100644 index 46e0b4cf63..0000000000 Binary files a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/aqua-enabled.png and /dev/null differ diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/aqua-mouseover.png b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/aqua-mouseover.png deleted file mode 100644 index 54ba67cc0a..0000000000 Binary files a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/aqua-mouseover.png and /dev/null differ diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/aqua-selected.png b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/aqua-selected.png deleted file mode 100644 index e2683c906e..0000000000 Binary files a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/aqua-selected.png and /dev/null differ diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/bannerback.png b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/bannerback.png deleted file mode 100644 index 5e857561cd..0000000000 Binary files a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/bannerback.png and /dev/null differ diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/logo_glow.png b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/logo_glow.png deleted file mode 100644 index ab5cbb7465..0000000000 Binary files a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/logo_glow.png and /dev/null differ diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/logo_std.png b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/logo_std.png deleted file mode 100644 index be81eeaf20..0000000000 Binary files a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/logo_std.png and /dev/null differ diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/nimbus-enabled.png b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/nimbus-enabled.png deleted file mode 100644 index 89ded58933..0000000000 Binary files a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/nimbus-enabled.png and /dev/null differ diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/nimbus-mouseover.png b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/nimbus-mouseover.png deleted file mode 100644 index a6821afb52..0000000000 Binary files a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/nimbus-mouseover.png and /dev/null differ diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/nimbus-selected.png b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/nimbus-selected.png deleted file mode 100644 index 6cebf92ee7..0000000000 Binary files a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/nimbus-selected.png and /dev/null differ diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/vista-enabled.png b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/vista-enabled.png deleted file mode 100644 index 893fca0849..0000000000 Binary files a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/vista-enabled.png and /dev/null differ diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/vista-mousover.png b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/vista-mousover.png deleted file mode 100644 index 55bd382b42..0000000000 Binary files a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/vista-mousover.png and /dev/null differ diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/vista-selected.png b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/vista-selected.png deleted file mode 100644 index 8fdaa4a3c5..0000000000 Binary files a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/resources/vista-selected.png and /dev/null differ diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/ru.po b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/ru.po deleted file mode 100644 index 3603362a87..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/ru.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 18:17+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "SPI for perspectives and TopComponent management" - -msgid "OpenIDE-Module-Short-Description" -msgstr "SPI for perspectives and TopComponent management" - -msgid "BannerComponent.logoButton.toolTipText" -msgstr "ΠŸΠ΅Ρ€Π΅ΠΉΠ΄ΠΈΡ‚Π΅ Π½Π° сайт Gephi: www.gephi.org" diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/zh_CN.po b/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/zh_CN.po deleted file mode 100644 index 03a900723a..0000000000 --- a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/zh_CN.po +++ /dev/null @@ -1,27 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 18:17+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "单δΈͺη¨‹εΊε―εŠ¨ε’Œη»„δ»Άη‘理" - -msgid "OpenIDE-Module-Short-Description" -msgstr "单δΈͺη¨‹εΊε―εŠ¨ε’Œη»„δ»Άη‘理" - -msgid "BannerComponent.logoButton.toolTipText" -msgstr "η»§η»­Gephi网站www.gephi.org" diff --git a/modules/DesktopPreview/pom.xml b/modules/DesktopPreview/pom.xml index 79687890f4..3210a5cf03 100644 --- a/modules/DesktopPreview/pom.xml +++ b/modules/DesktopPreview/pom.xml @@ -1,101 +1,143 @@ - - - 4.0.0 - - gephi-parent - org.gephi - 0.9-SNAPSHOT - ../.. - - - org.gephi - desktop-preview - 0.9-SNAPSHOT - nbm - - DesktopPreview - - - - ${project.groupId} - desktop-io-export - - - ${project.groupId} - graph-api - - - ${project.groupId} - project-api - - - ${project.groupId} - preview-api - - - ${project.groupId} - ui-components - - - ${project.groupId} - core-library-wrapper - - - ${project.groupId} - ui-library-wrapper - - - ${project.groupId} - ui-utils - - - org.netbeans.api - org-openide-awt - - - org.netbeans.api - org-openide-util-lookup - - - org.netbeans.api - org-openide-util - - - org.netbeans.api - org-openide-dialogs - - - org.netbeans.api - org-openide-explorer - - - org.netbeans.api - org-openide-filesystems - - - org.netbeans.api - org-openide-nodes - - - org.netbeans.api - org-openide-windows - - - org.netbeans.api - org-netbeans-modules-settings - - - - - - - org.codehaus.mojo - nbm-maven-plugin - - - - - - - - + + + 4.0.0 + + gephi-parent + org.gephi + 0.11.3-SNAPSHOT + ../.. + + + org.gephi + desktop-preview + 0.11.3-SNAPSHOT + nbm + + DesktopPreview + + + + ${project.groupId} + desktop-io-export + + + ${project.groupId} + graph-api + + + ${project.groupId} + project-api + + + ${project.groupId} + preview-api + + + ${project.groupId} + ui-components + + + ${project.groupId} + core-library-wrapper + + + ${project.groupId} + ui-library-wrapper + + + ${project.groupId} + ui-utils + + + ${project.groupId} + desktop-icons + + + org.netbeans.api + org-netbeans-modules-options-api + + + org.netbeans.api + org-openide-awt + + + org.netbeans.api + org-openide-util-lookup + + + org.netbeans.api + org-openide-util + + + org.netbeans.api + org-openide-util-ui + + + org.netbeans.api + org-openide-dialogs + + + org.netbeans.api + org-openide-explorer + + + org.netbeans.api + org-openide-filesystems + + + org.netbeans.api + org-openide-nodes + + + org.netbeans.api + org-openide-windows + + + org.netbeans.api + org-netbeans-modules-settings + + + org.netbeans.modules + org-netbeans-core + + + + ${project.groupId} + project-api + test-jar + test + + + org.netbeans.modules + org-netbeans-modules-masterfs + test + + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + --add-opens=java.base/java.net=ALL-UNNAMED + + + + + org.apache.netbeans.utilities + nbm-maven-plugin + + + + + org.netbeans.modules:org-netbeans-core + impl + + + + + + + diff --git a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PresetUtils.java b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PresetUtils.java index c288d3b4ba..c962eab8db 100644 --- a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PresetUtils.java +++ b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PresetUtils.java @@ -39,9 +39,11 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.preview; import java.io.InputStream; +import java.io.OutputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -56,25 +58,45 @@ Development and Distribution License("CDDL") (collectively, the import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; +import org.apache.commons.codec.digest.DigestUtils; import org.gephi.preview.api.PreviewPreset; import org.gephi.preview.api.PreviewProperties; import org.gephi.preview.presets.DefaultPreset; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileUtil; +import org.openide.util.Exceptions; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /** - * * @author Mathieu Bastian */ public class PresetUtils { private List presets; + public void removePreset(PreviewPreset preset) { + getPresets(); + presets.remove(preset); + + try { + FileObject folder = FileUtil.getConfigFile("previewpresets"); + if (folder != null) { + String filename = DigestUtils.sha1Hex(preset.getName()); + FileObject presetFile = folder.getFileObject(filename, "xml"); + if (presetFile != null) { + presetFile.delete(); + } + } + } catch (Exception ex) { + Exceptions.printStackTrace(ex); + } + } + public void savePreset(PreviewPreset preset) { + getPresets(); int exist = -1; for (int i = 0; i < presets.size(); i++) { PreviewPreset p = presets.get(i); @@ -95,9 +117,12 @@ public void savePreset(PreviewPreset preset) { if (folder == null) { folder = FileUtil.getConfigRoot().createFolder("previewpresets"); } - FileObject presetFile = folder.getFileObject(preset.getName(), "xml"); + + String filename = DigestUtils.sha1Hex(preset.getName());//Safe filename + + FileObject presetFile = folder.getFileObject(filename, "xml"); if (presetFile == null) { - presetFile = folder.createData(preset.getName(), "xml"); + presetFile = folder.createData(filename, "xml"); } //Create doc @@ -111,39 +136,49 @@ public void savePreset(PreviewPreset preset) { writeXML(document, preset); //Write XML file - Source source = new DOMSource(document); - Result result = new StreamResult(FileUtil.toFile(presetFile)); - Transformer transformer = TransformerFactory.newInstance().newTransformer(); - transformer.setOutputProperty(OutputKeys.INDENT, "yes"); - transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); - transformer.transform(source, result); - } catch (Exception e) { - e.printStackTrace(); + try (OutputStream outputStream = presetFile.getOutputStream()) { + Source source = new DOMSource(document); + Result result = new StreamResult(outputStream); + Transformer transformer = TransformerFactory.newInstance().newTransformer(); + transformer.setOutputProperty(OutputKeys.INDENT, "yes"); + transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); + transformer.transform(source, result); + } + } catch (Exception ex) { + Exceptions.printStackTrace(ex); } } public PreviewPreset[] getPresets() { if (presets == null) { - presets = new ArrayList(); + presets = new ArrayList<>(); loadPresets(); } return presets.toArray(new PreviewPreset[0]); } + public boolean hasPreset(String name) { + for (PreviewPreset preset : presets) { + if (preset.getName().equals(name)) { + return true; + } + } + return false; + } + private void loadPresets() { FileObject folder = FileUtil.getConfigFile("previewpresets"); if (folder != null) { for (FileObject child : folder.getChildren()) { if (child.isValid() && child.hasExt("xml")) { - try { - InputStream stream = child.getInputStream(); + try (InputStream stream = child.getInputStream()) { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = factory.newDocumentBuilder(); Document document = builder.parse(stream); PreviewPreset preset = readXML(document); addPreset(preset); } catch (Exception ex) { - ex.printStackTrace(); + Exceptions.printStackTrace(ex); } } } @@ -169,18 +204,19 @@ private void writeXML(Document doc, PreviewPreset preset) { presetE.appendChild(propertyE); } } - } catch (Exception e) { - e.printStackTrace(); + } catch (Exception ex) { + Exceptions.printStackTrace(ex); } } doc.appendChild(presetE); } private PreviewPreset readXML(Document document) { - DefaultPreset defaultPreset = new DefaultPreset();//For retrieving property class if it is not in the xml (old serialization) + DefaultPreset defaultPreset = + new DefaultPreset();//For retrieving property class if it is not in the xml (old serialization) Element presetE = document.getDocumentElement(); - Map propertiesMap = new HashMap(); + Map propertiesMap = new HashMap<>(); String presetName = presetE.getAttribute("name"); NodeList propertyList = presetE.getElementsByTagName("previewproperty"); @@ -195,8 +231,8 @@ private PreviewPreset readXML(Document document) { if (valueClassName != null) { try { valueClass = Class.forName(valueClassName); - } catch (ClassNotFoundException e) { - e.printStackTrace(); + } catch (ClassNotFoundException ex) { + Exceptions.printStackTrace(ex); } } else { Object defaultValue = defaultPreset.getProperties().get(name); @@ -215,7 +251,7 @@ private PreviewPreset readXML(Document document) { return new PreviewPreset(presetName, propertiesMap); } - private void addPreset(PreviewPreset preset) { + protected void addPreset(PreviewPreset preset) { presets.add(preset); } } diff --git a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewNode.java b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewNode.java index 6766617d83..40b79243af 100644 --- a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewNode.java +++ b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewNode.java @@ -41,14 +41,22 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.preview; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.lang.reflect.InvocationTargetException; -import java.util.*; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; import javax.swing.SwingUtilities; -import org.gephi.preview.api.*; +import org.gephi.preview.api.ManagedRenderer; +import org.gephi.preview.api.PreviewController; +import org.gephi.preview.api.PreviewModel; +import org.gephi.preview.api.PreviewProperties; +import org.gephi.preview.api.PreviewProperty; import org.gephi.preview.spi.Renderer; import org.openide.explorer.propertysheet.PropertySheet; import org.openide.nodes.AbstractNode; @@ -66,7 +74,7 @@ Development and Distribution License("CDDL") (collectively, the */ public class PreviewNode extends AbstractNode implements PropertyChangeListener { - private PropertySheet propertySheet; + private final PropertySheet propertySheet; public PreviewNode(PropertySheet propertySheet) { super(Children.LEAF); @@ -80,8 +88,8 @@ protected Sheet createSheet() { PreviewController controller = Lookup.getDefault().lookup(PreviewController.class); Set enabledRenderers = null; - if (controller.getModel()!=null && controller.getModel().getManagedRenderers() != null) { - enabledRenderers = new HashSet(); + if (controller.getModel() != null && controller.getModel().getManagedRenderers() != null) { + enabledRenderers = new HashSet<>(); for (ManagedRenderer mr : controller.getModel().getManagedRenderers()) { if (mr.isEnabled()) { enabledRenderers.add(mr.getRenderer()); @@ -93,7 +101,7 @@ protected Sheet createSheet() { if (model != null) { PreviewProperties properties = model.getProperties(); - Map sheetSets = new HashMap(); + Map sheetSets = new HashMap<>(); for (PreviewProperty property : properties.getProperties()) { Object source = property.getSource(); boolean propertyEnabled = true; @@ -109,16 +117,10 @@ protected Sheet createSheet() { sheetSet.setDisplayName(category); sheetSet.setName(category); } - Node.Property nodeProperty = null; + Node.Property nodeProperty; PreviewProperty[] parents = properties.getParentProperties(property); PreviewProperty[] children = properties.getChildProperties(property); - if (parents.length > 0) { - nodeProperty = new ChildPreviewPropertyWrapper(property, parents); - } else if (children.length > 0) { - nodeProperty = new ParentPreviewPropertyWrapper(property, children); - } else { - nodeProperty = new PreviewPropertyWrapper(property); - } + nodeProperty = new PreviewPropertyWrapper(property, parents, children); sheetSet.put(nodeProperty); sheetSets.put(category, sheetSet); @@ -153,35 +155,37 @@ protected Sheet createSheet() { return sheet; } - private static class PreviewPropertyWrapper extends PropertySupport.ReadWrite { - - private final PreviewProperty property; - - public PreviewPropertyWrapper(PreviewProperty previewProperty) { - super(previewProperty.getName(), previewProperty.getType(), previewProperty.getDisplayName(), previewProperty.getDescription()); - this.property = previewProperty; - } - - @Override - public Object getValue() throws IllegalAccessException, InvocationTargetException { - return property.getValue(); - } + /** + * default method for PropertyChangeListener, it is necessary to fire property change to update propertyEditor, which will refresh at runtime if a property value has been passively updated. + * + * @param pce a PropertyChangeEvent from a PreviewProperty object. + */ + @Override + public void propertyChange(PropertyChangeEvent pce) { + firePropertyChange(pce.getPropertyName(), pce.getOldValue(), pce.getNewValue()); + SwingUtilities.invokeLater(new Runnable() { - @Override - public void setValue(Object t) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException { - property.setValue(t); - } + @Override + public void run() { + propertySheet.updateUI(); + } + }); } - private static class ChildPreviewPropertyWrapper extends PropertySupport.ReadWrite { + private class PreviewPropertyWrapper extends PropertySupport.ReadWrite { private final PreviewProperty property; private final PreviewProperty[] parents; + private final PreviewProperty[] children; - public ChildPreviewPropertyWrapper(PreviewProperty previewProperty, PreviewProperty[] parents) { - super(previewProperty.getName(), previewProperty.getType(), previewProperty.getDisplayName(), previewProperty.getDescription()); + public PreviewPropertyWrapper(PreviewProperty previewProperty, + PreviewProperty[] parents, + PreviewProperty[] children) { + super(previewProperty.getName(), previewProperty.getType(), previewProperty.getDisplayName(), + previewProperty.getDescription()); this.property = previewProperty; this.parents = parents; + this.children = children; } @Override @@ -190,8 +194,12 @@ public Object getValue() throws IllegalAccessException, InvocationTargetExceptio } @Override - public void setValue(Object t) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException { + public void setValue(Object t) + throws IllegalAccessException, IllegalArgumentException, InvocationTargetException { property.setValue(t); + for (PreviewProperty child : children) { + propertyChange(new PropertyChangeEvent(this, child.getName(), child.getValue(), child.getValue())); + } } @Override @@ -204,46 +212,4 @@ public boolean canWrite() { return true; } } - - private class ParentPreviewPropertyWrapper extends PropertySupport.ReadWrite { - - private final PreviewProperty property; - private final PreviewProperty[] children; - - public ParentPreviewPropertyWrapper(PreviewProperty previewProperty, PreviewProperty[] children) { - super(previewProperty.getName(), previewProperty.getType(), previewProperty.getDisplayName(), previewProperty.getDescription()); - this.property = previewProperty; - this.children = children; - } - - @Override - public Object getValue() throws IllegalAccessException, InvocationTargetException { - return property.getValue(); - } - - @Override - public void setValue(Object t) throws IllegalAccessException, IllegalArgumentException, InvocationTargetException { - property.setValue(t); - for (PreviewProperty p : children) { - propertyChange(new PropertyChangeEvent(this, p.getName(), p.getValue(), p.getValue())); - } - } - } - - /** - * default method for PropertyChangeListener, it is necessary to fire property change to update propertyEditor, which will refresh at runtime if a property value has been passively updated. - * - * @param pce a PropertyChangeEvent from a PreviewProperty object. - */ - @Override - public void propertyChange(PropertyChangeEvent pce) { - firePropertyChange(pce.getPropertyName(), pce.getOldValue(), pce.getNewValue()); - SwingUtilities.invokeLater(new Runnable() { - - @Override - public void run() { - propertySheet.updateUI(); - } - }); - } } diff --git a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewSettingsTopComponent.form b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewSettingsTopComponent.form index af069f9dda..332bc4a07f 100644 --- a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewSettingsTopComponent.form +++ b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewSettingsTopComponent.form @@ -57,7 +57,6 @@ - @@ -98,6 +97,18 @@ + + + + + + + + + + + + @@ -194,7 +205,6 @@ - diff --git a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewSettingsTopComponent.java b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewSettingsTopComponent.java index e9a5cddc29..5760d1f17e 100644 --- a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewSettingsTopComponent.java +++ b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewSettingsTopComponent.java @@ -39,9 +39,11 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.preview; import java.awt.BorderLayout; +import java.awt.Component; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; @@ -49,13 +51,18 @@ Development and Distribution License("CDDL") (collectively, the import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.text.NumberFormat; +import java.util.Objects; import javax.swing.DefaultComboBoxModel; +import javax.swing.JLabel; +import javax.swing.JList; import javax.swing.JPanel; +import javax.swing.JSeparator; import javax.swing.JTabbedPane; +import javax.swing.ListCellRenderer; import javax.swing.UIManager; +import javax.swing.border.EmptyBorder; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import org.gephi.desktop.io.export.api.VectorialFileExporterUI; import org.gephi.desktop.preview.api.PreviewUIController; import org.gephi.desktop.preview.api.PreviewUIModel; import org.gephi.preview.api.PreviewController; @@ -68,36 +75,55 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.NotifyDescriptor; import org.openide.awt.ActionID; import org.openide.awt.ActionReference; +import org.openide.awt.Actions; import org.openide.awt.StatusDisplayer; import org.openide.explorer.propertysheet.PropertySheet; import org.openide.nodes.Node; +import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.windows.TopComponent; /** - * * @author JΓ©rΓ©my Subtil, Mathieu Bastian */ @ConvertAsProperties(dtd = "-//org.gephi.desktop.preview//PreviewSettings//EN", -autostore = false) + autostore = false) @TopComponent.Description(preferredID = "PreviewSettingsTopComponent", -iconBase = "org/gephi/desktop/preview/resources/settings.png", -persistenceType = TopComponent.PERSISTENCE_ALWAYS) + iconBase = "DesktopPreview/settings.svg", + persistenceType = TopComponent.PERSISTENCE_NEVER) @TopComponent.Registration(mode = "layoutmode", openAtStartup = true, roles = {"preview"}) @ActionID(category = "Window", id = "org.gephi.desktop.preview.PreviewSettingsTopComponent") @ActionReference(path = "Menu/Window", position = 1000) @TopComponent.OpenActionRegistration(displayName = "#CTL_PreviewSettingsTopComponent", -preferredID = "PreviewSettingsTopComponent") + preferredID = "PreviewSettingsTopComponent") public final class PreviewSettingsTopComponent extends TopComponent implements PropertyChangeListener { private final String NO_SELECTION = "---"; //Component - private transient PropertySheet propertySheet; - private transient RendererManager rendererManager; - private transient JTabbedPane tabbedPane; + private final transient PropertySheet propertySheet; + private final transient RendererManager rendererManager; + private final transient JTabbedPane tabbedPane; //State private int defaultPresetLimit; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel box; + private javax.swing.JLabel labelExport; + private javax.swing.JLabel labelPreset; + private javax.swing.JLabel labelRatio; + private javax.swing.JPanel mainPanel; + private javax.swing.JComboBox presetComboBox; + private javax.swing.JPanel presetPanel; + private javax.swing.JToolBar presetToolbar; + private javax.swing.JPanel propertiesPanel; + private javax.swing.JLabel ratioLabel; + private javax.swing.JSlider ratioSlider; + private javax.swing.JButton refreshButton; + private javax.swing.JButton removeButton; + private javax.swing.JButton saveButton; + private javax.swing.JToolBar southToolbar; + private javax.swing.JButton svgExportButton; + // End of variables declaration//GEN-END:variables public PreviewSettingsTopComponent() { initComponents(); @@ -107,50 +133,43 @@ public PreviewSettingsTopComponent() { mainPanel.setBackground(UIManager.getColor("NbExplorerView.background")); } - PreviewController previewController = Lookup.getDefault().lookup(PreviewController.class); - // property sheet propertySheet = new PropertySheet(); - propertySheet.setNodes(new Node[]{new PreviewNode(propertySheet)}); + propertySheet.setNodes(new Node[] {new PreviewNode(propertySheet)}); propertySheet.setDescriptionAreaVisible(false); - // renderer manager - show only if at least 1 plugin renderer exists - if (previewController.isAnyPluginRendererRegistered()) { - rendererManager = new RendererManager(); - } + rendererManager = new RendererManager(); + //Tabs for property sheet, manager and preview UI + tabbedPane = new JTabbedPane(); + tabbedPane.addTab( + NbBundle.getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.propertySheetTab"), + propertySheet); + tabbedPane.addTab( + NbBundle.getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.rendererManagerTab"), + rendererManager); + propertiesPanel.add(tabbedPane, BorderLayout.CENTER); - if (rendererManager != null || Lookup.getDefault().lookupAll(PreviewUI.class).size() > 0) { - //Tabs for property sheet, manager and preview UI - tabbedPane = new JTabbedPane(); - tabbedPane.addTab(NbBundle.getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.propertySheetTab"), propertySheet); - if (rendererManager != null) { - tabbedPane.addTab(NbBundle.getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.rendererManagerTab"), rendererManager); - } - propertiesPanel.add(tabbedPane, BorderLayout.CENTER); + tabbedPane.addChangeListener(new ChangeListener() { - tabbedPane.addChangeListener(new ChangeListener() { - - @Override - public void stateChanged(ChangeEvent e) { - if (tabbedPane.getSelectedComponent() == propertySheet) { - propertySheet.setNodes(new Node[]{new PreviewNode(propertySheet)}); - } + @Override + public void stateChanged(ChangeEvent e) { + if (tabbedPane.getSelectedComponent() == propertySheet) { + propertySheet.setNodes(new Node[] {new PreviewNode(propertySheet)}); } - }); - } else { - propertiesPanel.add(propertySheet, BorderLayout.CENTER); - } + } + }); //Ratio ratioSlider.addChangeListener(new ChangeListener() { - NumberFormat formatter = NumberFormat.getPercentInstance(); + final NumberFormat formatter = NumberFormat.getPercentInstance(); @Override public void stateChanged(ChangeEvent e) { float val = ratioSlider.getValue() / 100f; if (val == 0f) { - ratioLabel.setText(NbBundle.getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.ratio.minimum")); + ratioLabel.setText(NbBundle + .getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.ratio.minimum")); } else { ratioLabel.setText(formatter.format(val)); } @@ -169,21 +188,19 @@ public void itemStateChanged(ItemEvent e) { if (previewModel != null && presetComboBox.getSelectedItem() instanceof PreviewPreset) { if (previewModel.getCurrentPreset() != presetComboBox.getSelectedItem()) { pc.setCurrentPreset((PreviewPreset) presetComboBox.getSelectedItem()); - propertySheet.setNodes(new Node[]{new PreviewNode(propertySheet)}); + propertySheet.setNodes(new Node[] {new PreviewNode(propertySheet)}); + enableRemoveButtonIfNeeded(); + saveButton.setEnabled(true); } + } else { + removeButton.setEnabled(false); + saveButton.setEnabled(false); } } }); //Export - svgExportButton.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - VectorialFileExporterUI ui = Lookup.getDefault().lookup(VectorialFileExporterUI.class); - ui.action(); - } - }); + svgExportButton.addActionListener(Actions.forID("File", "org.gephi.desktop.io.export.ExportImage")); setup(null); PreviewUIController controller = Lookup.getDefault().lookup(PreviewUIController.class); @@ -218,7 +235,7 @@ public void propertyChange(PropertyChangeEvent evt) { } public void setup(PreviewUIModel previewModel) { - propertySheet.setNodes(new Node[]{new PreviewNode(propertySheet)}); + propertySheet.setNodes(new Node[] {new PreviewNode(propertySheet)}); PreviewUIController previewUIController = Lookup.getDefault().lookup(PreviewUIController.class); if (previewModel != null) { ratioSlider.setValue((int) (previewModel.getVisibilityRatio() * 100)); @@ -227,9 +244,10 @@ public void setup(PreviewUIModel previewModel) { //Presets if (previewModel == null) { saveButton.setEnabled(false); + removeButton.setEnabled(false); labelPreset.setEnabled(false); presetComboBox.setEnabled(false); - presetComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[]{"---"})); + presetComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] {NO_SELECTION})); } else { saveButton.setEnabled(true); labelPreset.setEnabled(true); @@ -247,34 +265,32 @@ public void setup(PreviewUIModel previewModel) { comboBoxModel.addElement(preset); } } - presetComboBox.setSelectedItem(previewModel.getCurrentPreset()); + comboBoxModel.setSelectedItem(previewModel.getCurrentPreset()); presetComboBox.setModel(comboBoxModel); } //Refresh tabs - if (tabbedPane != null) { - int tabCount = tabbedPane.getTabCount(); - for (int i = (rendererManager == null ? 1 : 2); i < tabCount; i++) { - tabbedPane.removeTabAt(i); - } + int tabCount = tabbedPane.getTabCount(); + for (int i = 2; i < tabCount; i++) {//Start at 2, not removing settings and renderer manager tabs + tabbedPane.removeTabAt(i); + } + for (PreviewUI pui : Lookup.getDefault().lookupAll(PreviewUI.class)) { + pui.unsetup(); + } + if (previewModel != null) { + PreviewController previewController = Lookup.getDefault().lookup(PreviewController.class); + PreviewModel pModel = previewController.getModel(); + //Add new tabs for (PreviewUI pui : Lookup.getDefault().lookupAll(PreviewUI.class)) { - pui.unsetup(); - } - if (previewModel != null) { - PreviewController previewController = Lookup.getDefault().lookup(PreviewController.class); - PreviewModel pModel = previewController.getModel(); - //Add new tabs - for (PreviewUI pui : Lookup.getDefault().lookupAll(PreviewUI.class)) { - pui.setup(pModel); - JPanel pluginPanel = pui.getPanel(); - if (UIUtils.isAquaLookAndFeel()) { - pluginPanel.setBackground(UIManager.getColor("NbExplorerView.background")); - } - if (pui.getIcon() != null) { - tabbedPane.addTab(pui.getPanelTitle(), pui.getIcon(), pluginPanel); - } else { - tabbedPane.addTab(pui.getPanelTitle(), pluginPanel); - } + pui.setup(pModel); + JPanel pluginPanel = pui.getPanel(); + if (UIUtils.isAquaLookAndFeel()) { + pluginPanel.setBackground(UIManager.getColor("NbExplorerView.background")); + } + if (pui.getIcon() != null) { + tabbedPane.addTab(pui.getPanelTitle(), pui.getIcon(), pluginPanel); + } else { + tabbedPane.addTab(pui.getPanelTitle(), pluginPanel); } } } @@ -289,7 +305,7 @@ public void unsetup() { * @return the graph visibility ratio */ public float getVisibilityRatio() { - float value = (Integer) ratioSlider.getValue(); + float value = ratioSlider.getValue(); if (value < 0) { value = 0; @@ -302,8 +318,6 @@ public float getVisibilityRatio() { /** * Enables the refresh button. - * - * @see PreviewUIController#enableRefresh() */ public void enableRefreshButton() { refreshButton.setEnabled(true); @@ -314,10 +328,18 @@ public void enableRefreshButton() { svgExportButton.setEnabled(true); } + public void enableRemoveButtonIfNeeded() { + if (Objects.equals(presetComboBox.getSelectedItem(), NO_SELECTION)) { + removeButton.setEnabled(false); + return; + } + PreviewUIController previewController = Lookup.getDefault().lookup(PreviewUIController.class); + PreviewPreset preset = previewController.getModel().getCurrentPreset(); + removeButton.setEnabled(!isDefaultPreset(preset)); + } + /** * Disables the refresh button. - * - * @see PreviewUIController#disableRefresh() */ public void disableRefreshButton() { refreshButton.setEnabled(false); @@ -329,7 +351,7 @@ public void disableRefreshButton() { } private boolean isDefaultPreset(PreviewPreset preset) { - int i = 0; + int i; for (i = 0; i < presetComboBox.getItemCount(); i++) { if (presetComboBox.getModel().getElementAt(i).equals(preset)) { break; @@ -351,6 +373,7 @@ private void initComponents() { presetToolbar = new javax.swing.JToolBar(); box = new javax.swing.JLabel(); saveButton = new javax.swing.JButton(); + removeButton = new javax.swing.JButton(); labelPreset = new javax.swing.JLabel(); refreshButton = new javax.swing.JButton(); propertiesPanel = new javax.swing.JPanel(); @@ -368,8 +391,9 @@ private void initComponents() { presetPanel.setOpaque(false); presetPanel.setLayout(new java.awt.GridBagLayout()); - presetComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "---" })); + presetComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] {NO_SELECTION})); presetComboBox.setEnabled(false); + presetComboBox.setRenderer(new ComboBoxRenderer()); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; @@ -385,17 +409,37 @@ private void initComponents() { presetToolbar.setRollover(true); presetToolbar.setOpaque(false); - org.openide.awt.Mnemonics.setLocalizedText(box, org.openide.util.NbBundle.getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.box.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(box, org.openide.util.NbBundle + .getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.box.text")); // NOI18N box.setMaximumSize(new java.awt.Dimension(32767, 32767)); presetToolbar.add(box); - saveButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/preview/resources/save.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(saveButton, org.openide.util.NbBundle.getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.saveButton.text")); // NOI18N - saveButton.setToolTipText(org.openide.util.NbBundle.getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.saveButton.toolTipText")); // NOI18N + removeButton.setIcon(ImageUtilities.loadImageIcon("DesktopPreview/remove.png", false)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(removeButton, org.openide.util.NbBundle + .getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.removeButton.text")); // NOI18N + removeButton.setToolTipText(org.openide.util.NbBundle.getMessage(PreviewSettingsTopComponent.class, + "PreviewSettingsTopComponent.removeButton.toolTipText")); // NOI18N + removeButton.setEnabled(false); + removeButton.setFocusable(false); + removeButton.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); + removeButton.addActionListener(new java.awt.event.ActionListener() { + @Override + public void actionPerformed(java.awt.event.ActionEvent evt) { + removeButtonActionPerformed(evt); + } + }); + presetToolbar.add(removeButton); + + saveButton.setIcon(ImageUtilities.loadImageIcon("DesktopPreview/save.svg", false)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(saveButton, org.openide.util.NbBundle + .getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.saveButton.text")); // NOI18N + saveButton.setToolTipText(org.openide.util.NbBundle.getMessage(PreviewSettingsTopComponent.class, + "PreviewSettingsTopComponent.saveButton.toolTipText")); // NOI18N saveButton.setEnabled(false); saveButton.setFocusable(false); saveButton.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); saveButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { saveButtonActionPerformed(evt); } @@ -409,8 +453,9 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { gridBagConstraints.insets = new java.awt.Insets(3, 5, 0, 5); presetPanel.add(presetToolbar, gridBagConstraints); - labelPreset.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/preview/resources/preset.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(labelPreset, org.openide.util.NbBundle.getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.labelPreset.text")); // NOI18N + labelPreset.setIcon(ImageUtilities.loadImageIcon("DesktopPreview/preset.svg", false)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(labelPreset, org.openide.util.NbBundle + .getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.labelPreset.text")); // NOI18N labelPreset.setEnabled(false); labelPreset.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT); gridBagConstraints = new java.awt.GridBagConstraints(); @@ -426,11 +471,13 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; mainPanel.add(presetPanel, gridBagConstraints); - refreshButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/preview/resources/refresh.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(refreshButton, org.openide.util.NbBundle.getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.refreshButton.text")); // NOI18N + refreshButton.setIcon(ImageUtilities.loadImageIcon("DesktopPreview/refresh.svg", false)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(refreshButton, org.openide.util.NbBundle + .getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.refreshButton.text")); // NOI18N refreshButton.setEnabled(false); refreshButton.setMargin(new java.awt.Insets(10, 14, 10, 14)); refreshButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { refreshButtonActionPerformed(evt); } @@ -454,7 +501,8 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { gridBagConstraints.weighty = 1.0; mainPanel.add(propertiesPanel, gridBagConstraints); - org.openide.awt.Mnemonics.setLocalizedText(labelRatio, org.openide.util.NbBundle.getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.labelRatio.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(labelRatio, org.openide.util.NbBundle + .getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.labelRatio.text")); // NOI18N labelRatio.setEnabled(false); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; @@ -463,7 +511,8 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { gridBagConstraints.insets = new java.awt.Insets(5, 7, 3, 5); mainPanel.add(labelRatio, gridBagConstraints); - org.openide.awt.Mnemonics.setLocalizedText(ratioLabel, org.openide.util.NbBundle.getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.ratioLabel.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(ratioLabel, org.openide.util.NbBundle + .getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.ratioLabel.text")); // NOI18N ratioLabel.setEnabled(false); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; @@ -490,12 +539,16 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { southToolbar.setOpaque(false); labelExport.setFont(new java.awt.Font("Tahoma", 0, 10)); - org.openide.awt.Mnemonics.setLocalizedText(labelExport, org.openide.util.NbBundle.getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.labelExport.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(labelExport, org.openide.util.NbBundle + .getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.labelExport.text")); // NOI18N labelExport.setEnabled(false); southToolbar.add(labelExport); - org.openide.awt.Mnemonics.setLocalizedText(svgExportButton, org.openide.util.NbBundle.getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.svgExportButton.text")); // NOI18N - svgExportButton.setToolTipText(org.openide.util.NbBundle.getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.svgExportButton.toolTipText")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(svgExportButton, org.openide.util.NbBundle + .getMessage(PreviewSettingsTopComponent.class, + "PreviewSettingsTopComponent.svgExportButton.text")); // NOI18N + svgExportButton.setToolTipText(org.openide.util.NbBundle.getMessage(PreviewSettingsTopComponent.class, + "PreviewSettingsTopComponent.svgExportButton.toolTipText")); // NOI18N svgExportButton.setEnabled(false); svgExportButton.setFocusable(false); svgExportButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); @@ -515,9 +568,35 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { add(mainPanel, java.awt.BorderLayout.CENTER); }// //GEN-END:initComponents - private void refreshButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_refreshButtonActionPerformed + private void refreshButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_refreshButtonActionPerformed Lookup.getDefault().lookup(PreviewUIController.class).refreshPreview(); -}//GEN-LAST:event_refreshButtonActionPerformed + }//GEN-LAST:event_refreshButtonActionPerformed + + private void removeButtonActionPerformed(java.awt.event.ActionEvent evt) { + PreviewUIController previewController = Lookup.getDefault().lookup(PreviewUIController.class); + PreviewPreset preset = previewController.getModel().getCurrentPreset(); + + String message = + NbBundle.getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.removePreset.text", preset.getName()); + String title = NbBundle.getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.removePreset.title"); + NotifyDescriptor dd = new NotifyDescriptor(message, title, + NotifyDescriptor.YES_NO_OPTION, + NotifyDescriptor.QUESTION_MESSAGE, null, null); + Object retType = DialogDisplayer.getDefault().notify(dd); + if (retType == NotifyDescriptor.YES_OPTION) { + previewController.removePreset(preset); + + // Refresh combo + DefaultComboBoxModel model = (DefaultComboBoxModel)presetComboBox.getModel(); + model.removeElement(preset); + presetComboBox.setSelectedIndex(0); + + StatusDisplayer.getDefault().setStatusText(NbBundle + .getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.removePreset.status", + preset.getName())); + } + } private void saveButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveButtonActionPerformed PreviewUIController previewController = Lookup.getDefault().lookup(PreviewUIController.class); @@ -525,20 +604,38 @@ private void saveButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FI boolean saved = false; if (isDefaultPreset(preset)) { NotifyDescriptor.InputLine question = new NotifyDescriptor.InputLine( - NbBundle.getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.savePreset.input"), - NbBundle.getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.savePreset.input.title")); + NbBundle.getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.savePreset.input"), + NbBundle.getMessage(PreviewSettingsTopComponent.class, + "PreviewSettingsTopComponent.savePreset.input.title")); if (DialogDisplayer.getDefault().notify(question) == NotifyDescriptor.OK_OPTION) { String input = question.getInputText(); if (input != null && !input.isEmpty()) { + // Check if already exists + if (previewController.hasPreset(input)) { + String message = + NbBundle.getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.savePresetReplace.text"); + String title = NbBundle.getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.savePresetReplace.title"); + NotifyDescriptor dd = new NotifyDescriptor(message, title, + NotifyDescriptor.YES_NO_OPTION, + NotifyDescriptor.QUESTION_MESSAGE, null, null); + Object retType = DialogDisplayer.getDefault().notify(dd); + if (retType == NotifyDescriptor.NO_OPTION) { + return; + } + } previewController.savePreset(input); saved = true; - StatusDisplayer.getDefault().setStatusText(NbBundle.getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.savePreset.status", input)); + StatusDisplayer.getDefault().setStatusText(NbBundle + .getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.savePreset.status", + input)); } } } else { previewController.savePreset(preset.getName()); saved = true; - StatusDisplayer.getDefault().setStatusText(NbBundle.getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.savePreset.status", preset.getName())); + StatusDisplayer.getDefault().setStatusText(NbBundle + .getMessage(PreviewSettingsTopComponent.class, "PreviewSettingsTopComponent.savePreset.status", + preset.getName())); } if (saved) { @@ -560,23 +657,34 @@ private void saveButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FI presetComboBox.setModel(comboBoxModel); } }//GEN-LAST:event_saveButtonActionPerformed - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JLabel box; - private javax.swing.JLabel labelExport; - private javax.swing.JLabel labelPreset; - private javax.swing.JLabel labelRatio; - private javax.swing.JPanel mainPanel; - private javax.swing.JComboBox presetComboBox; - private javax.swing.JPanel presetPanel; - private javax.swing.JToolBar presetToolbar; - private javax.swing.JPanel propertiesPanel; - private javax.swing.JLabel ratioLabel; - private javax.swing.JSlider ratioSlider; - private javax.swing.JButton refreshButton; - private javax.swing.JButton saveButton; - private javax.swing.JToolBar southToolbar; - private javax.swing.JButton svgExportButton; - // End of variables declaration//GEN-END:variables + + private class ComboBoxRenderer extends JLabel implements ListCellRenderer { + JSeparator separator; + + public ComboBoxRenderer() { + setOpaque(true); + setBorder(new EmptyBorder(1, 1, 1, 1)); + separator = new JSeparator(JSeparator.HORIZONTAL); + } + + public Component getListCellRendererComponent(JList list, Object value, + int index, boolean isSelected, boolean cellHasFocus) { + String str = (value == null) ? "" : value.toString(); + if (NO_SELECTION.equals(str)) { + return separator; + } + if (isSelected) { + setBackground(list.getSelectionBackground()); + setForeground(list.getSelectionForeground()); + } else { + setBackground(list.getBackground()); + setForeground(list.getForeground()); + } + setFont(list.getFont()); + setText(str); + return this; + } + } void writeProperties(java.util.Properties p) { // better to version settings since initial version as advocated at diff --git a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewSketch.java b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewSketch.java index 6716981dff..1ea9c41563 100644 --- a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewSketch.java +++ b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewSketch.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.preview; import java.awt.Graphics; @@ -52,14 +53,13 @@ Development and Distribution License("CDDL") (collectively, the import java.util.concurrent.atomic.AtomicBoolean; import javax.swing.JPanel; import javax.swing.SwingUtilities; +import org.gephi.preview.api.G2DTarget; import org.gephi.preview.api.PreviewController; import org.gephi.preview.api.PreviewMouseEvent; -import org.gephi.preview.api.G2DTarget; import org.gephi.preview.api.Vector; import org.openide.util.Lookup; /** - * * @author mbastian */ public class PreviewSketch extends JPanel implements MouseListener, MouseWheelListener, MouseMotionListener { @@ -73,12 +73,14 @@ public class PreviewSketch extends JPanel implements MouseListener, MouseWheelLi private final Vector lastMove = new Vector(); //Utils private final RefreshLoop refreshLoop = new RefreshLoop(); + private final float scaleFactor; private Timer wheelTimer; private boolean inited; public PreviewSketch(G2DTarget target) { this.target = target; previewController = Lookup.getDefault().lookup(PreviewController.class); + scaleFactor = PreviewTopComponent.getScaleFactor(); } @Override @@ -93,11 +95,14 @@ protected void paintComponent(Graphics g) { inited = true; } - if (target.getWidth() != getWidth() || target.getHeight() != getHeight()) { - target.resize(getWidth(), getHeight()); + int width = (int) (getWidth() * scaleFactor); + int height = (int) (getHeight() * scaleFactor); + + if (target.getWidth() != width || target.getHeight() != height) { + target.resize(width, height); } - g.drawImage(target.getImage(), 0, 0, this); + g.drawImage(target.getImage(), 0, 0, getWidth(), getHeight(), this); } public void setMoving(boolean moving) { @@ -115,6 +120,7 @@ public void mouseClicked(MouseEvent e) { public void mousePressed(MouseEvent e) { previewController.sendMouseEvent(buildPreviewMouseEvent(e, PreviewMouseEvent.Type.PRESSED)); ref.set(e.getX(), e.getY()); + lastMove.set(target.getTranslate()); refreshLoop.refreshSketch(); } @@ -122,7 +128,6 @@ public void mousePressed(MouseEvent e) { @Override public void mouseReleased(MouseEvent e) { if (!previewController.sendMouseEvent(buildPreviewMouseEvent(e, PreviewMouseEvent.Type.RELEASED))) { - lastMove.set(target.getTranslate()); setMoving(false); } @@ -168,6 +173,7 @@ public void mouseDragged(MouseEvent e) { Vector trans = target.getTranslate(); trans.set(e.getX(), e.getY()); trans.sub(ref); + trans.mult(scaleFactor); trans.div(target.getScaling()); // ensure const. moving speed whatever the zoom is trans.add(lastMove); @@ -201,6 +207,7 @@ private Vector screenPositionToModelPosition(Vector screenPos) { Vector modelPos = new Vector(screenPos.x, screenPos.y); modelPos.sub(scaledTrans); + modelPos.mult(scaleFactor); modelPos.div(target.getScaling()); modelPos.sub(target.getTranslate()); return modelPos; diff --git a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewTopComponent.form b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewTopComponent.form index de87560117..ce5ff6e130 100644 --- a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewTopComponent.form +++ b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewTopComponent.form @@ -42,38 +42,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -86,9 +54,6 @@ - - - @@ -135,7 +100,6 @@ - @@ -189,6 +153,29 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewTopComponent.java b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewTopComponent.java index c1b8ee5a06..c0a18046fd 100644 --- a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewTopComponent.java +++ b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewTopComponent.java @@ -39,16 +39,22 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.preview; import java.awt.BorderLayout; import java.awt.CardLayout; import java.awt.Color; import java.awt.Dimension; +import java.awt.GraphicsConfiguration; +import java.awt.GraphicsDevice; +import java.awt.GraphicsEnvironment; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.geom.AffineTransform; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; +import java.lang.reflect.Field; import javax.swing.BorderFactory; import javax.swing.SwingUtilities; import javax.swing.UIManager; @@ -56,6 +62,8 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.desktop.preview.api.PreviewUIModel; import org.gephi.preview.api.G2DTarget; import org.gephi.preview.api.PreviewController; +import org.gephi.preview.api.PreviewModel; +import org.gephi.preview.api.PreviewProperties; import org.gephi.preview.api.PreviewProperty; import org.gephi.preview.api.RenderTarget; import org.gephi.ui.components.JColorButton; @@ -64,31 +72,45 @@ Development and Distribution License("CDDL") (collectively, the import org.netbeans.api.settings.ConvertAsProperties; import org.openide.awt.ActionID; import org.openide.awt.ActionReference; +import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.windows.TopComponent; /** - * * @author JΓ©rΓ©my Subtil, Mathieu Bastian */ @ConvertAsProperties(dtd = "-//org.gephi.desktop.preview//Preview//EN", - autostore = false) + autostore = false) @TopComponent.Description(preferredID = "PreviewTopComponent", - iconBase = "org/gephi/desktop/preview/resources/preview.png", - persistenceType = TopComponent.PERSISTENCE_ALWAYS) + iconBase = "DesktopPreview/preview.svg", + persistenceType = TopComponent.PERSISTENCE_NEVER) @TopComponent.Registration(mode = "editor", openAtStartup = true, roles = {"preview"}) @ActionID(category = "Window", id = "org.gephi.desktop.preview.PreviewTopComponent") @ActionReference(path = "Menu/Window", position = 900) @TopComponent.OpenActionRegistration(displayName = "#CTL_PreviewTopComponent", - preferredID = "PreviewTopComponent") + preferredID = "PreviewTopComponent") public final class PreviewTopComponent extends TopComponent implements PropertyChangeListener { - private final transient ProcessingListener processingListener = new ProcessingListener(); //Data private transient PreviewUIModel model; private transient G2DTarget target; private transient PreviewSketch sketch; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton backgroundButton; + private javax.swing.JPanel bannerPanel; + private javax.swing.JLabel busyLabel; + private javax.swing.Box.Filler filler1; + private javax.swing.JToggleButton globalCanvasSizeButton; + private javax.swing.JButton minusButton; + private javax.swing.JButton plusButton; + private javax.swing.JPanel previewPanel; + private javax.swing.JPanel refreshPanel; + private javax.swing.JButton resetZoomButton; + private javax.swing.JPanel sketchPanel; + private javax.swing.JLabel southBusyLabel; + private javax.swing.JToolBar southToolbar; + // End of variables declaration//GEN-END:variables public PreviewTopComponent() { initComponents(); @@ -101,18 +123,24 @@ public PreviewTopComponent() { southToolbar.setBackground(UIManager.getColor("NbExplorerView.background")); } + //TODO: Remove banner panel completely bannerPanel.setVisible(false); //background color - ((JColorButton) backgroundButton).addPropertyChangeListener(JColorButton.EVENT_COLOR, new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - PreviewController previewController = Lookup.getDefault().lookup(PreviewController.class); - previewController.getModel().getProperties().putValue(PreviewProperty.BACKGROUND_COLOR, (Color) evt.getNewValue()); - PreviewUIController previewUIController = Lookup.getDefault().lookup(PreviewUIController.class); - previewUIController.refreshPreview(); - } - }); + backgroundButton + .addPropertyChangeListener(JColorButton.EVENT_COLOR, new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + PreviewController previewController = Lookup.getDefault().lookup(PreviewController.class); + PreviewProperties properties = previewController.getModel().getProperties(); + Color oldColor = properties.getColorValue(PreviewProperty.BACKGROUND_COLOR); + if (oldColor == null || !oldColor.equals(evt.getNewValue())) { + properties.putValue(PreviewProperty.BACKGROUND_COLOR, evt.getNewValue()); + PreviewUIController previewUIController = Lookup.getDefault().lookup(PreviewUIController.class); + previewUIController.refreshPreview(); + } + } + }); southBusyLabel.setVisible(false); resetZoomButton.addActionListener(new ActionListener() { @Override @@ -132,15 +160,45 @@ public void actionPerformed(ActionEvent e) { sketch.zoomMinus(); } }); + globalCanvasSizeButton.addActionListener(e -> { + PreviewController previewController = Lookup.getDefault().lookup(PreviewController.class); + previewController.setGlobalCanvasSize(globalCanvasSizeButton.isSelected()); + }); PreviewUIController controller = Lookup.getDefault().lookup(PreviewUIController.class); controller.addPropertyChangeListener(this); PreviewUIModel m = controller.getModel(); - if (m != null) { - this.model = m; - initTarget(model); + this.model = m; + initTarget(model); + } + + /** + * Returns true if the default screen is in retina display (high dpi). + * + * @return true if retina, false otherwise + */ + protected static float getScaleFactor() { + + try { + GraphicsDevice graphicsDevice = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); + GraphicsConfiguration graphicsConfiguration = graphicsDevice.getDefaultConfiguration(); + AffineTransform tx = graphicsConfiguration.getDefaultTransform(); + return (float)tx.getScaleX(); + } catch (Exception e) { + //Ignore + e.printStackTrace(); + } + return 1f; + } + + protected static Field retrieveField(GraphicsDevice graphicsDevice, String name) { + try { + return graphicsDevice.getClass().getDeclaredField(name); + } catch (Exception e) { + //Ignore } + return null; } @Override @@ -153,15 +211,20 @@ public void propertyChange(PropertyChangeEvent evt) { @Override public void run() { target.refresh(); + refreshBackgroundColorButton(); } }); } else if (evt.getPropertyName().equals(PreviewUIController.REFRESHING)) { setRefresh((Boolean) evt.getNewValue()); - } else if (evt.getPropertyName().equals(PreviewUIController.GRAPH_CHANGED)) { - if ((Boolean) evt.getNewValue()) { - showBannerPanel(); - } else { - hideBannerPanel(); + } + } + + private void refreshBackgroundColorButton() { + if (model != null) { + PreviewModel previewModel = model.getPreviewModel(); + Color background = previewModel.getProperties().getColorValue(PreviewProperty.BACKGROUND_COLOR); + if (background != null && !background.equals(((JColorButton) backgroundButton).getColor())) { + setBackgroundColor(background); } } } @@ -177,81 +240,70 @@ public void run() { }); } + protected Dimension getSketchDimensions() { + int width = sketchPanel.getWidth(); + int height = sketchPanel.getHeight(); + if (width > 1 && height > 1) { + float scaleFactor = getScaleFactor(); + if (scaleFactor > 1f) { + width = (int) (width * scaleFactor); + height = (int) (height * scaleFactor); + } + return new Dimension(width, height); + } + return new Dimension(1, 1); + } + public void initTarget(PreviewUIModel previewUIModel) { // inits the preview applet - if (previewUIModel != null && target == null) { + if (previewUIModel != null) { PreviewController previewController = Lookup.getDefault().lookup(PreviewController.class); - Color background = previewController.getModel().getProperties().getColorValue(PreviewProperty.BACKGROUND_COLOR); + PreviewModel previewModel = previewUIModel.getPreviewModel(); + + Color background = previewModel.getProperties().getColorValue(PreviewProperty.BACKGROUND_COLOR); if (background != null) { setBackgroundColor(background); } + Dimension dimensions = getSketchDimensions(); + previewModel.getProperties().putValue("width", (int) dimensions.getWidth()); + previewModel.getProperties().putValue("height", (int) dimensions.getHeight()); + + if (sketch != null) { + sketchPanel.remove(sketch); + sketch = null; + } + target = (G2DTarget) previewController.getRenderTarget(RenderTarget.G2D_TARGET); if (target != null) { sketch = new PreviewSketch(target); sketchPanel.add(sketch, BorderLayout.CENTER); } - } else if (previewUIModel == null) { - sketchPanel.remove(sketch); + plusButton.setEnabled(true); + minusButton.setEnabled(true); + backgroundButton.setEnabled(true); + resetZoomButton.setEnabled(true); + globalCanvasSizeButton.setEnabled(true); + globalCanvasSizeButton.setSelected(previewModel.isGlobalCanvasSize()); + } else { + if (sketch != null) { + sketchPanel.remove(sketch); + sketch = null; + } target = null; + plusButton.setEnabled(false); + minusButton.setEnabled(false); + backgroundButton.setEnabled(false); + resetZoomButton.setEnabled(false); + globalCanvasSizeButton.setEnabled(false); + globalCanvasSizeButton.setSelected(false); } } - public class ProcessingListener { - - public void post() { -// final boolean isRedraw = target.isRedrawn(); -// SwingUtilities.invokeLater(new Runnable() { -// public void run() { -// southBusyLabel.setVisible(isRedraw); -// ((JXBusyLabel) southBusyLabel).setBusy(isRedraw); -// } -// }); - } - - public void pre() { -// final boolean isRedraw = target.isRedrawn(); -// SwingUtilities.invokeLater(new Runnable() { -// public void run() { -// southBusyLabel.setVisible(isRedraw); -// ((JXBusyLabel) southBusyLabel).setBusy(isRedraw); -// } -// }); - } - } - - /** - * Shows the banner panel. - * - * @see PreviewUIController#showRefreshNotification() - */ - public void showBannerPanel() { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - bannerPanel.setVisible(true); - } - }); - } - public void setBackgroundColor(Color color) { ((JColorButton) backgroundButton).setColor(color); } - /** - * Hides the banner panel. - * - * @see PreviewUIController#hideRefreshNotification() - */ - public void hideBannerPanel() { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - bannerPanel.setVisible(false); - } - }); - } - /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always @@ -263,8 +315,6 @@ private void initComponents() { southBusyLabel = new JXBusyLabel(new Dimension(14,14)); bannerPanel = new javax.swing.JPanel(); - bannerLabel = new javax.swing.JLabel(); - refreshButton = new javax.swing.JButton(); previewPanel = new javax.swing.JPanel(); sketchPanel = new javax.swing.JPanel(); refreshPanel = new javax.swing.JPanel(); @@ -274,6 +324,8 @@ private void initComponents() { resetZoomButton = new javax.swing.JButton(); minusButton = new javax.swing.JButton(); plusButton = new javax.swing.JButton(); + filler1 = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(32767, 0)); + globalCanvasSizeButton = new javax.swing.JToggleButton(); setLayout(new java.awt.GridBagLayout()); gridBagConstraints = new java.awt.GridBagConstraints(); @@ -286,31 +338,6 @@ private void initComponents() { bannerPanel.setBackground(new java.awt.Color(178, 223, 240)); bannerPanel.setBorder(BorderFactory.createMatteBorder(0, 0, 1, 0, Color.BLACK)); bannerPanel.setLayout(new java.awt.GridBagLayout()); - - bannerLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/preview/resources/info.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(bannerLabel, org.openide.util.NbBundle.getMessage(PreviewTopComponent.class, "PreviewTopComponent.bannerLabel.text")); // NOI18N - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 0; - gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.insets = new java.awt.Insets(2, 5, 2, 5); - bannerPanel.add(bannerLabel, gridBagConstraints); - - org.openide.awt.Mnemonics.setLocalizedText(refreshButton, org.openide.util.NbBundle.getMessage(PreviewTopComponent.class, "PreviewTopComponent.refreshButton.text")); // NOI18N - refreshButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - refreshButtonActionPerformed(evt); - } - }); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 0; - gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.insets = new java.awt.Insets(1, 0, 1, 1); - bannerPanel.add(refreshButton, gridBagConstraints); - gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; @@ -320,7 +347,6 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { previewPanel.setLayout(new java.awt.CardLayout()); - sketchPanel.setBackground(new java.awt.Color(255, 255, 255)); sketchPanel.setPreferredSize(new java.awt.Dimension(500, 500)); sketchPanel.setLayout(new java.awt.BorderLayout()); previewPanel.add(sketchPanel, "previewCard"); @@ -346,7 +372,6 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { gridBagConstraints.weighty = 1.0; add(previewPanel, gridBagConstraints); - southToolbar.setFloatable(false); southToolbar.setRollover(true); org.openide.awt.Mnemonics.setLocalizedText(backgroundButton, org.openide.util.NbBundle.getMessage(PreviewTopComponent.class, "PreviewTopComponent.backgroundButton.text")); // NOI18N @@ -372,6 +397,15 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { plusButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); plusButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); southToolbar.add(plusButton); + southToolbar.add(filler1); + + globalCanvasSizeButton.setIcon(ImageUtilities.loadImageIcon("DesktopPreview/globalCanvasSize.svg", false) + ); + globalCanvasSizeButton.setToolTipText(org.openide.util.NbBundle.getMessage(PreviewTopComponent.class, "PreviewTopComponent.globalCanvasSizeButton.toolTipText")); // NOI18N + globalCanvasSizeButton.setFocusable(false); + globalCanvasSizeButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); + globalCanvasSizeButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); + southToolbar.add(globalCanvasSizeButton); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; @@ -381,25 +415,6 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { add(southToolbar, gridBagConstraints); }// //GEN-END:initComponents - private void refreshButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_refreshButtonActionPerformed - Lookup.getDefault().lookup(PreviewUIController.class).refreshPreview(); - }//GEN-LAST:event_refreshButtonActionPerformed - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton backgroundButton; - private javax.swing.JLabel bannerLabel; - private javax.swing.JPanel bannerPanel; - private javax.swing.JLabel busyLabel; - private javax.swing.JButton minusButton; - private javax.swing.JButton plusButton; - private javax.swing.JPanel previewPanel; - private javax.swing.JButton refreshButton; - private javax.swing.JPanel refreshPanel; - private javax.swing.JButton resetZoomButton; - private javax.swing.JPanel sketchPanel; - private javax.swing.JLabel southBusyLabel; - private javax.swing.JToolBar southToolbar; - // End of variables declaration//GEN-END:variables - void writeProperties(java.util.Properties p) { // better to version settings since initial version as advocated at // http://wiki.apidesign.org/wiki/PropertyFiles diff --git a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewUIControllerImpl.java b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewUIControllerImpl.java index 1d5c49b0fa..e9b87409b3 100644 --- a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewUIControllerImpl.java +++ b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewUIControllerImpl.java @@ -39,8 +39,10 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.preview; +import java.awt.Font; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.beans.PropertyEditorManager; @@ -55,9 +57,8 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.desktop.preview.api.PreviewUIModel; import org.gephi.desktop.preview.propertyeditors.DependantColorPropertyEditor; import org.gephi.desktop.preview.propertyeditors.DependantOriginalColorPropertyEditor; +import org.gephi.desktop.preview.propertyeditors.DisabledAwareFontEditor; import org.gephi.desktop.preview.propertyeditors.EdgeColorPropertyEditor; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.GraphModel; import org.gephi.preview.api.PreviewController; import org.gephi.preview.api.PreviewModel; import org.gephi.preview.api.PreviewPreset; @@ -75,59 +76,60 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.project.api.ProjectController; import org.gephi.project.api.Workspace; import org.gephi.project.api.WorkspaceListener; +import org.gephi.project.spi.Controller; import org.openide.util.Lookup; import org.openide.util.lookup.ServiceProvider; +import org.openide.util.lookup.ServiceProviders; import org.openide.windows.WindowManager; /** * Controller implementation of the preview UI. * + *

    Implements the {@link Controller} SPI so that a {@link PreviewUIModelImpl} is created in + * every workspace's lookup automatically by {@code WorkspaceImpl.initModels()}. This keeps the + * controller stateless and side-effect free at construction time, which avoids EDT stalls during + * lazy lookup of the singleton (see GEPHI-5KZ). + * * @author JΓ©rΓ©my Subtil, Mathieu Bastian */ -@ServiceProvider(service = PreviewUIController.class) -public class PreviewUIControllerImpl implements PreviewUIController { +@ServiceProviders({ + @ServiceProvider(service = PreviewUIController.class), + @ServiceProvider(service = Controller.class, position = 2000)}) +public class PreviewUIControllerImpl implements PreviewUIController, Controller { - private final List listeners; - private final PreviewController previewController; - private final GraphController graphController; + private final List listeners = new ArrayList<>(); private final PresetUtils presetUtils = new PresetUtils(); - private PreviewUIModelImpl model = null; - private GraphModel graphModel = null; + private final PreviewController previewController; public PreviewUIControllerImpl() { previewController = Lookup.getDefault().lookup(PreviewController.class); - listeners = new ArrayList(); + ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); - graphController = Lookup.getDefault().lookup(GraphController.class); pc.addWorkspaceListener(new WorkspaceListener() { @Override public void initialize(Workspace workspace) { - workspace.add(new PreviewUIModelImpl()); enableRefresh(); } @Override public void select(Workspace workspace) { - graphModel = graphController.getGraphModel(workspace); - - model = workspace.getLookup().lookup(PreviewUIModelImpl.class); - if (model == null) { - model = new PreviewUIModelImpl(); - workspace.add(model); - } - Float visibilityRatio = previewController.getModel().getProperties().getFloatValue(PreviewProperty.VISIBILITY_RATIO); - if (visibilityRatio != null) { - ((PreviewUIModelImpl) model).setVisibilityRatio(visibilityRatio); + PreviewUIModelImpl model = getModel(workspace); + if (model != null) { + PreviewModel previewModel = model.getPreviewModel(); + if (previewModel != null) { + Float visibilityRatio = + previewModel.getProperties().getFloatValue(PreviewProperty.VISIBILITY_RATIO); + if (visibilityRatio != null) { + model.setVisibilityRatio(visibilityRatio); + } + } } fireEvent(SELECT, model); } @Override public void unselect(Workspace workspace) { - if (graphModel != null) { - graphModel = null; - } - fireEvent(UNSELECT, model); + fireEvent(UNSELECT, getModel(workspace)); } @Override @@ -136,68 +138,54 @@ public void close(Workspace workspace) { @Override public void disable() { - if (graphModel != null) { - graphModel = null; - } fireEvent(SELECT, null); - model = null; } }); - if (pc.getCurrentWorkspace() != null) { - model = pc.getCurrentWorkspace().getLookup().lookup(PreviewUIModelImpl.class); - if (model == null) { - model = new PreviewUIModelImpl(); - pc.getCurrentWorkspace().add(model); - } - Float visibilityRatio = previewController.getModel().getProperties().getFloatValue(PreviewProperty.VISIBILITY_RATIO); - if (visibilityRatio != null) { - ((PreviewUIModelImpl) model).setVisibilityRatio(visibilityRatio); - } - graphModel = graphController.getGraphModel(pc.getCurrentWorkspace()); - } //Register editors //Overriding default Preview API basic editors that don't support CustomEditor PropertyEditorManager.registerEditor(EdgeColor.class, EdgeColorPropertyEditor.class); PropertyEditorManager.registerEditor(DependantOriginalColor.class, DependantOriginalColorPropertyEditor.class); PropertyEditorManager.registerEditor(DependantColor.class, DependantColorPropertyEditor.class); + + // Overriding Netbeans font editor to support disabled state, #3105 + PropertyEditorManager.registerEditor(Font.class, DisabledAwareFontEditor.class); + } + + @Override + public PreviewUIModelImpl newModel(Workspace workspace) { + return new PreviewUIModelImpl(workspace, this); + } + + @Override + public Class getModelClass() { + return PreviewUIModelImpl.class; + } + + @Override + public PreviewUIModelImpl getModel() { + return Controller.super.getModel(); } - /** - * Shows the refresh notification when the structure of the workspace graph - * has changed. - * - * @param event - * @see GraphListener#graphChanged(org.gephi.graph.api.GraphEvent) - */ -// public void graphChanged(GraphEvent event) { -// boolean previous = model.isWorkspaceBarVisible(); -// model.setWorkspaceBarVisible(true); -// if (!previous) { -// fireEvent(GRAPH_CHANGED, true); -// } -// } /** * Refreshes the preview applet. */ @Override public void refreshPreview() { + final PreviewUIModelImpl model = getModel(); if (model != null) { - Thread refreshThread = new Thread(new Runnable() { - @Override - public void run() { - model.setRefreshing(true); - fireEvent(REFRESHING, true); + Thread refreshThread = new Thread(() -> { + model.setRefreshing(true); + fireEvent(REFRESHING, true); - previewController.getModel().getProperties().putValue(PreviewProperty.VISIBILITY_RATIO, model.getVisibilityRatio()); - previewController.refreshPreview(); + previewController.getModel().getProperties() + .putValue(PreviewProperty.VISIBILITY_RATIO, model.getVisibilityRatio()); + previewController.refreshPreview(); - fireEvent(REFRESHED, model); + fireEvent(REFRESHED, model); - model.setRefreshing(false); - fireEvent(REFRESHING, false); - fireEvent(GRAPH_CHANGED, false); - } + model.setRefreshing(false); + fireEvent(REFRESHING, false); }, "Refresh Preview"); refreshThread.start(); } @@ -207,10 +195,10 @@ public void run() { * Enables the preview refresh action. */ private void enableRefresh() { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - PreviewSettingsTopComponent pstc = (PreviewSettingsTopComponent) WindowManager.getDefault().findTopComponent("PreviewSettingsTopComponent"); + SwingUtilities.invokeLater(() -> { + PreviewSettingsTopComponent pstc = (PreviewSettingsTopComponent) WindowManager.getDefault() + .findTopComponent("PreviewSettingsTopComponent"); + if (pstc != null) { pstc.enableRefreshButton(); } }); @@ -218,19 +206,16 @@ public void run() { @Override public void setVisibilityRatio(float visibilityRatio) { + PreviewUIModelImpl model = getModel(); if (model != null) { model.setVisibilityRatio(visibilityRatio); } } - @Override - public PreviewUIModel getModel() { - return model; - } - @Override public PreviewPreset[] getDefaultPresets() { - return new PreviewPreset[]{new DefaultPreset(), new DefaultCurved(), new DefaultStraight(), new TextOutline(), new BlackBackground(), new EdgesCustomColor(), new TagCloud()}; + return new PreviewPreset[] {new DefaultPreset(), new DefaultCurved(), new DefaultStraight(), new TextOutline(), + new BlackBackground(), new EdgesCustomColor(), new TagCloud()}; } @Override @@ -242,10 +227,13 @@ public PreviewPreset[] getUserPresets() { @Override public void setCurrentPreset(PreviewPreset preset) { + PreviewUIModelImpl model = getModel(); if (model != null) { model.setCurrentPreset(preset); PreviewModel previewModel = previewController.getModel(); - previewModel.getProperties().applyPreset(preset); + if (previewModel != null) { + previewModel.getProperties().applyPreset(preset); + } } } @@ -254,11 +242,22 @@ public void addPreset(PreviewPreset preset) { presetUtils.savePreset(preset); } + @Override + public void removePreset(PreviewPreset preset) { + presetUtils.removePreset(preset); + } + + @Override + public boolean hasPreset(String name) { + return presetUtils.hasPreset(name); + } + @Override public void savePreset(String name) { + PreviewUIModelImpl model = getModel(); if (model != null) { PreviewModel previewModel = previewController.getModel(); - Map map = new HashMap(); + Map map = new HashMap<>(); for (PreviewProperty p : previewModel.getProperties().getProperties()) { map.put(p.getName(), p.getValue()); } diff --git a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewUIModelImpl.java b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewUIModelImpl.java index 8bd8f5d918..babb764e8f 100644 --- a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewUIModelImpl.java +++ b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewUIModelImpl.java @@ -39,26 +39,86 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.preview; +import java.util.Arrays; +import java.util.Optional; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; +import javax.xml.stream.XMLStreamWriter; +import org.gephi.desktop.preview.api.PreviewUIController; import org.gephi.desktop.preview.api.PreviewUIModel; +import org.gephi.preview.api.PreviewModel; import org.gephi.preview.api.PreviewPreset; +import org.gephi.preview.presets.BlackBackground; import org.gephi.preview.presets.DefaultPreset; +import org.gephi.project.api.Workspace; +import org.gephi.project.spi.Model; +import org.gephi.ui.utils.UIUtils; +import org.openide.util.NbPreferences; /** - * * @author Mathieu Bastian */ -public class PreviewUIModelImpl implements PreviewUIModel { +public class PreviewUIModelImpl implements PreviewUIModel, Model { + + public static final String DEFAULT_PRESET_CLASS = "PreviewOptions.defaultPresetClass"; + public static final String DEFAULT_PRESET_NAME = "PreviewOptions.defaultPresetName"; + private final Workspace workspace; + private final PreviewUIController controller; //Data private float visibilityRatio = 1f; private PreviewPreset currentPreset; private boolean refreshing; - private boolean workspaceBarVisible; - public PreviewUIModelImpl() { - currentPreset = new DefaultPreset(); + public PreviewUIModelImpl(Workspace workspace, PreviewUIController controller) { + this.workspace = workspace; + this.controller = controller; + currentPreset = resolveDefaultPreset(); + // PreviewModel is owned by PreviewController and may not yet be present in the workspace + // lookup (depends on Controller iteration order in WorkspaceImpl.initModels). Apply the + // default preset only if it is already there; otherwise the preset will be applied lazily + // via setCurrentPreset or when the user/persistence triggers a refresh. + PreviewModel previewModel = getPreviewModel(); + if (previewModel != null) { + previewModel.getProperties().applyPreset(currentPreset); + } + } + + private PreviewPreset resolveDefaultPreset() { + String presetClass = NbPreferences.forModule(PreviewUIModelImpl.class).get(DEFAULT_PRESET_CLASS, ""); + String presetName = NbPreferences.forModule(PreviewUIModelImpl.class).get(DEFAULT_PRESET_NAME, ""); + + if (!presetClass.isEmpty()) { + Optional found = Arrays.stream(controller.getDefaultPresets()) + .filter(p -> p.getClass().getName().equals(presetClass)) + .findFirst(); + if (found.isPresent()) { + return found.get(); + } + } else if (!presetName.isEmpty()) { + Optional found = Arrays.stream(controller.getUserPresets()) + .filter(p -> p.getName().equals(presetName)) + .findFirst(); + if (found.isPresent()) { + return found.get(); + } + } + + // Fall back to dark mode auto-selection + return UIUtils.isDarkLookAndFeel() ? new BlackBackground() : new DefaultPreset(); + } + + @Override + public PreviewModel getPreviewModel() { + return workspace.getLookup().lookup(PreviewModel.class); + } + + @Override + public Workspace getWorkspace() { + return workspace; } @Override @@ -66,6 +126,10 @@ public PreviewPreset getCurrentPreset() { return currentPreset; } + public void setCurrentPreset(PreviewPreset preset) { + currentPreset = preset; + } + @Override public float getVisibilityRatio() { return visibilityRatio; @@ -75,25 +139,68 @@ public void setVisibilityRatio(float visibilityRatio) { this.visibilityRatio = visibilityRatio; } - public void setCurrentPreset(PreviewPreset preset) { - currentPreset = preset; - } - @Override public boolean isRefreshing() { return refreshing; } - @Override - public boolean isWorkspaceBarVisible() { - return workspaceBarVisible; - } - public void setRefreshing(boolean refreshing) { this.refreshing = refreshing; } - public void setWorkspaceBarVisible(boolean workspaceBarVisible) { - this.workspaceBarVisible = workspaceBarVisible; + private void setCurrentPresetBasedOnString(String className, String displayName) { + Optional preset = + Arrays.stream(controller.getDefaultPresets()) + .filter(p -> p.getClass().getName().equals(className)) + .findFirst(); + if (preset.isPresent()) { + setCurrentPreset(preset.get()); + } else { + preset = Arrays.stream(controller.getUserPresets()) + .filter(p -> p.getName().equals(displayName)) + .findFirst(); + preset.ifPresent(this::setCurrentPreset); + } + } + + protected void writeXML(XMLStreamWriter writer) throws XMLStreamException { + if (currentPreset != null) { + writer.writeStartElement("currentpreset"); + writer.writeAttribute("class", currentPreset.getClass().getName()); + writer.writeAttribute("name", currentPreset.getName()); + writer.writeEndElement(); + } + writer.writeStartElement("visibilityratio"); + writer.writeAttribute("value", visibilityRatio + ""); + writer.writeEndElement(); + } + + protected void readXML(XMLStreamReader reader) throws XMLStreamException { + boolean end = false; + while (reader.hasNext() && !end) { + int type = reader.next(); + + switch (type) { + case XMLStreamReader.START_ELEMENT: + String name = reader.getLocalName(); + if ("currentpreset".equalsIgnoreCase(name)) { + String presetClass = reader.getAttributeValue(null, "class"); + String presetName = reader.getAttributeValue(null, "name"); + + setCurrentPresetBasedOnString(presetClass, presetName); + } else if ("visibilityratio".equalsIgnoreCase(name)) { + String value = reader.getAttributeValue(null, "value"); + visibilityRatio = Float.parseFloat(value); + } + break; + case XMLStreamReader.CHARACTERS: + break; + case XMLStreamReader.END_ELEMENT: + if ("previewuimodel".equalsIgnoreCase(reader.getLocalName())) { + end = true; + } + break; + } + } } } diff --git a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewUIPersistenceProvider.java b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewUIPersistenceProvider.java new file mode 100644 index 0000000000..a32ebb435a --- /dev/null +++ b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/PreviewUIPersistenceProvider.java @@ -0,0 +1,50 @@ +package org.gephi.desktop.preview; + +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; +import javax.xml.stream.XMLStreamWriter; +import org.gephi.desktop.preview.api.PreviewUIController; +import org.gephi.project.api.Workspace; +import org.gephi.project.spi.WorkspacePersistenceProvider; +import org.gephi.project.spi.WorkspaceXMLPersistenceProvider; +import org.openide.util.Lookup; +import org.openide.util.lookup.ServiceProvider; + +@ServiceProvider(service = WorkspacePersistenceProvider.class, position = 460) +public class PreviewUIPersistenceProvider implements WorkspaceXMLPersistenceProvider { + + @Override + public void writeXML(XMLStreamWriter writer, Workspace workspace) { + PreviewUIModelImpl model = workspace.getLookup().lookup(PreviewUIModelImpl.class); + if (model != null) { + try { + model.writeXML(writer); + } catch (XMLStreamException ex) { + throw new RuntimeException(ex); + } + } + } + + @Override + public void readXML(XMLStreamReader reader, Workspace workspace) { + PreviewUIModelImpl model = workspace.getLookup().lookup(PreviewUIModelImpl.class); + if (model == null) { + // The model is normally created by WorkspaceImpl.initModels() via the Controller SPI. + // This branch only triggers if the workspace was constructed without initializing + // models; create one defensively so legacy/edge-case load paths still work. + PreviewUIController previewUIController = Lookup.getDefault().lookup(PreviewUIController.class); + model = new PreviewUIModelImpl(workspace, previewUIController); + workspace.add(model); + } + try { + model.readXML(reader); + } catch (XMLStreamException ex) { + throw new RuntimeException(ex); + } + } + + @Override + public String getIdentifier() { + return "previewuimodel"; + } +} diff --git a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/RendererManager.java b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/RendererManager.java index dd431050e0..dfff12ffd8 100644 --- a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/RendererManager.java +++ b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/RendererManager.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.preview; import java.awt.Insets; @@ -71,12 +72,24 @@ Development and Distribution License("CDDL") (collectively, the /** * UI for managing preview renderers enabled state and execution order. * - * @author Eduardo Ramos + * @author Eduardo Ramos */ public class RendererManager extends javax.swing.JPanel implements PropertyChangeListener { - private ArrayList renderersList = new ArrayList(); - private PreviewController previewController; + private final ArrayList renderersList = new ArrayList<>(); + private final PreviewController previewController; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.Box.Filler fill; + private javax.swing.Box.Filler glue; + private javax.swing.JLabel infoLabel; + private javax.swing.JToolBar.Separator jSeparator1; + private javax.swing.JPanel panel; + private javax.swing.JButton restoreOrderButton; + private javax.swing.JScrollPane scroll; + private javax.swing.JButton selectAllButton; + private javax.swing.JToolBar toolBar; + private javax.swing.JButton unselectAllButon; + // End of variables declaration//GEN-END:variables /** * Creates new form RendererManagerPanel @@ -100,7 +113,8 @@ public RendererManager() { private void buildTooltip() { final RichTooltip richTooltip = new RichTooltip(); - richTooltip.setTitle(NbBundle.getMessage(RendererManager.class, "PreviewSettingsTopComponent.rendererManagerTab")); + richTooltip + .setTitle(NbBundle.getMessage(RendererManager.class, "PreviewSettingsTopComponent.rendererManagerTab")); richTooltip.addDescriptionSection(NbBundle.getMessage(RendererManager.class, "RendererManager.description1")); richTooltip.addDescriptionSection(NbBundle.getMessage(RendererManager.class, "RendererManager.description2")); infoLabel.addMouseListener(new MouseAdapter() { @@ -119,7 +133,8 @@ public void mouseExited(MouseEvent e) { @Override public void propertyChange(PropertyChangeEvent evt) { - if (evt.getPropertyName().equals(PreviewUIController.SELECT) || evt.getPropertyName().equals(PreviewUIController.UNSELECT)) { + if (evt.getPropertyName().equals(PreviewUIController.SELECT) || + evt.getPropertyName().equals(PreviewUIController.UNSELECT)) { setup(); } } @@ -137,7 +152,7 @@ private void restoreRenderersList() { PreviewModel model = previewController.getModel(); Set enabledRenderers = null; if (model != null && model.getManagedRenderers() != null) { - enabledRenderers = new HashSet(); + enabledRenderers = new HashSet<>(); enabledRenderers.addAll(Arrays.asList(model.getManagedEnabledRenderers())); } renderersList.clear(); @@ -151,7 +166,7 @@ private void refresh() { panel.removeAll(); loadModelManagedRenderers(); //Show renderers in inverse execution order to make it intuitive for users (last executed renderers remain on top of the image) - for (int i = renderersList.size()-1; i >=0; i--) { + for (int i = renderersList.size() - 1; i >= 0; i--) { JToolBar bar = new JToolBar(); bar.setFloatable(false); if (UIUtils.isAquaLookAndFeel()) { @@ -188,7 +203,7 @@ private void loadModelManagedRenderers() { private void updateModelManagedRenderers() { PreviewModel model = previewController.getModel(); if (model != null) { - ArrayList managedRenderers = new ArrayList(); + ArrayList managedRenderers = new ArrayList<>(); for (RendererCheckBox rendererCheckBox : renderersList) { managedRenderers.add(new ManagedRenderer(rendererCheckBox.renderer, rendererCheckBox.isSelected())); } @@ -209,65 +224,6 @@ private void setControlsEnabled(boolean enabled) { restoreOrderButton.setEnabled(enabled); } - class RendererCheckBox extends JCheckBox implements ActionListener { - - private Renderer renderer; - - public RendererCheckBox(Renderer renderer, boolean selected) { - this.renderer = renderer; - setSelected(selected); - prepareName(); - addActionListener(this); - } - - private void prepareName() { - setText(renderer.getDisplayName()); - setToolTipText(renderer.getClass().getName()); - } - - public Renderer getRenderer() { - return renderer; - } - - @Override - public void actionPerformed(ActionEvent e) { - updateModelManagedRenderers(); - } - } - - class MoveRendererButton extends JButton implements ActionListener { - - private int index;//Original index in renderers list - private boolean up;//Move up or move down - - public MoveRendererButton(int index, boolean up) { - super(ImageUtilities.loadImageIcon("org/gephi/desktop/preview/resources/" + (up ? "up" : "down") + ".png", false)); - setMargin(new Insets(1, 1, 1, 1));//Small margin for icon-only buttons - this.index = index; - this.up = up; - - if (up) { - setEnabled(index < renderersList.size() - 1); - } else { - setEnabled(index > 0); - } - addActionListener(this); - } - - @Override - public void actionPerformed(ActionEvent e) { - int newIndex = up ? index + 1 : index - 1; - RendererCheckBox oldItem = renderersList.get(newIndex); - RendererCheckBox item = renderersList.get(index); - - //Move and update UI - renderersList.set(newIndex, item); - renderersList.set(index, oldItem); - updateModelManagedRenderers(); - refresh(); - } - } - /** * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The content of this method is always regenerated by the Form Editor. */ @@ -281,9 +237,11 @@ private void initComponents() { jSeparator1 = new javax.swing.JToolBar.Separator(); selectAllButton = new javax.swing.JButton(); unselectAllButon = new javax.swing.JButton(); - glue = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), new java.awt.Dimension(32767, 0)); + glue = new javax.swing.Box.Filler(new java.awt.Dimension(0, 0), new java.awt.Dimension(0, 0), + new java.awt.Dimension(32767, 0)); infoLabel = new javax.swing.JLabel(); - fill = new javax.swing.Box.Filler(new java.awt.Dimension(5, 0), new java.awt.Dimension(5, 0), new java.awt.Dimension(5, 32767)); + fill = new javax.swing.Box.Filler(new java.awt.Dimension(5, 0), new java.awt.Dimension(5, 0), + new java.awt.Dimension(5, 32767)); scroll = new javax.swing.JScrollPane(); panel = new javax.swing.JPanel(); @@ -292,11 +250,13 @@ private void initComponents() { toolBar.setFloatable(false); toolBar.setRollover(true); - restoreOrderButton.setText(org.openide.util.NbBundle.getMessage(RendererManager.class, "RendererManager.restoreOrderButton.text")); // NOI18N + restoreOrderButton.setText(org.openide.util.NbBundle + .getMessage(RendererManager.class, "RendererManager.restoreOrderButton.text")); // NOI18N restoreOrderButton.setFocusable(false); restoreOrderButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); restoreOrderButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); restoreOrderButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { restoreOrderButtonActionPerformed(evt); } @@ -304,22 +264,26 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { toolBar.add(restoreOrderButton); toolBar.add(jSeparator1); - selectAllButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/preview/resources/ui-check-box.png"))); // NOI18N - selectAllButton.setText(org.openide.util.NbBundle.getMessage(RendererManager.class, "RendererManager.selectAllButton.text")); // NOI18N + selectAllButton.setIcon(ImageUtilities.loadImageIcon("DesktopPreview/ui-check-box.svg", false)); // NOI18N + selectAllButton.setText(org.openide.util.NbBundle + .getMessage(RendererManager.class, "RendererManager.selectAllButton.text")); // NOI18N selectAllButton.setFocusable(false); selectAllButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); selectAllButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { selectAllButtonActionPerformed(evt); } }); toolBar.add(selectAllButton); - unselectAllButon.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/preview/resources/ui-check-box-uncheck.png"))); // NOI18N - unselectAllButon.setText(org.openide.util.NbBundle.getMessage(RendererManager.class, "RendererManager.unselectAllButon.text")); // NOI18N + unselectAllButon.setIcon(ImageUtilities.loadImageIcon("DesktopPreview/ui-check-box-uncheck.svg", false)); // NOI18N + unselectAllButon.setText(org.openide.util.NbBundle + .getMessage(RendererManager.class, "RendererManager.unselectAllButon.text")); // NOI18N unselectAllButon.setFocusable(false); unselectAllButon.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); unselectAllButon.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { unselectAllButonActionPerformed(evt); } @@ -327,8 +291,9 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { toolBar.add(unselectAllButon); toolBar.add(glue); - infoLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/preview/resources/info.png"))); // NOI18N - infoLabel.setText(org.openide.util.NbBundle.getMessage(RendererManager.class, "RendererManager.infoLabel.text")); // NOI18N + infoLabel.setIcon(ImageUtilities.loadImageIcon("DesktopPreview/info.svg", false)); // NOI18N + infoLabel.setText( + org.openide.util.NbBundle.getMessage(RendererManager.class, "RendererManager.infoLabel.text")); // NOI18N toolBar.add(infoLabel); toolBar.add(fill); @@ -345,11 +310,11 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { panel.setLayout(panelLayout); panelLayout.setHorizontalGroup( panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 398, Short.MAX_VALUE) + .addGap(0, 398, Short.MAX_VALUE) ); panelLayout.setVerticalGroup( panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 274, Short.MAX_VALUE) + .addGap(0, 274, Short.MAX_VALUE) ); scroll.setViewportView(panel); @@ -363,28 +328,79 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { add(scroll, gridBagConstraints); }// //GEN-END:initComponents - private void selectAllButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectAllButtonActionPerformed + private void selectAllButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_selectAllButtonActionPerformed setAllSelected(true); }//GEN-LAST:event_selectAllButtonActionPerformed - private void unselectAllButonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_unselectAllButonActionPerformed + private void unselectAllButonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_unselectAllButonActionPerformed setAllSelected(false); }//GEN-LAST:event_unselectAllButonActionPerformed - private void restoreOrderButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_restoreOrderButtonActionPerformed + private void restoreOrderButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_restoreOrderButtonActionPerformed restoreRenderersList(); refresh(); }//GEN-LAST:event_restoreOrderButtonActionPerformed - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.Box.Filler fill; - private javax.swing.Box.Filler glue; - private javax.swing.JLabel infoLabel; - private javax.swing.JToolBar.Separator jSeparator1; - private javax.swing.JPanel panel; - private javax.swing.JButton restoreOrderButton; - private javax.swing.JScrollPane scroll; - private javax.swing.JButton selectAllButton; - private javax.swing.JToolBar toolBar; - private javax.swing.JButton unselectAllButon; - // End of variables declaration//GEN-END:variables + + class RendererCheckBox extends JCheckBox implements ActionListener { + + private final Renderer renderer; + + public RendererCheckBox(Renderer renderer, boolean selected) { + this.renderer = renderer; + setSelected(selected); + prepareName(); + addActionListener(this); + } + + private void prepareName() { + setText(renderer.getDisplayName()); + setToolTipText(renderer.getClass().getName()); + } + + public Renderer getRenderer() { + return renderer; + } + + @Override + public void actionPerformed(ActionEvent e) { + updateModelManagedRenderers(); + } + } + + class MoveRendererButton extends JButton implements ActionListener { + + private final int index;//Original index in renderers list + private final boolean up;//Move up or move down + + public MoveRendererButton(int index, boolean up) { + super(ImageUtilities + .loadImageIcon("DesktopPreview/" + (up ? "up" : "down") + ".svg", false)); + setMargin(new Insets(1, 1, 1, 1));//Small margin for icon-only buttons + this.index = index; + this.up = up; + + if (up) { + setEnabled(index < renderersList.size() - 1); + } else { + setEnabled(index > 0); + } + addActionListener(this); + } + + @Override + public void actionPerformed(ActionEvent e) { + int newIndex = up ? index + 1 : index - 1; + RendererCheckBox oldItem = renderersList.get(newIndex); + RendererCheckBox item = renderersList.get(index); + + //Move and update UI + renderersList.set(newIndex, item); + renderersList.set(index, oldItem); + updateModelManagedRenderers(); + refresh(); + } + } } diff --git a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/api/PreviewUIController.java b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/api/PreviewUIController.java index 6036dab3e5..2792bd7baf 100644 --- a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/api/PreviewUIController.java +++ b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/api/PreviewUIController.java @@ -39,41 +39,44 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.preview.api; import java.beans.PropertyChangeListener; import org.gephi.preview.api.PreviewPreset; /** - * * @author Mathieu Bastian */ public interface PreviewUIController { //Property - public static final String SELECT = "select"; - public static final String UNSELECT = "unselect"; - public static final String REFRESHED = "refreshed"; - public static final String REFRESHING = "refreshing"; - public static final String GRAPH_CHANGED = "graph_changed"; + String SELECT = "select"; + String UNSELECT = "unselect"; + String REFRESHED = "refreshed"; + String REFRESHING = "refreshing"; + + void refreshPreview(); + + void setCurrentPreset(PreviewPreset preset); - public void refreshPreview(); + void setVisibilityRatio(float visibilityRatio); - public void setCurrentPreset(PreviewPreset preset); + PreviewPreset[] getDefaultPresets(); - public void setVisibilityRatio(float visibilityRatio); + PreviewPreset[] getUserPresets(); - public PreviewPreset[] getDefaultPresets(); + void addPreset(PreviewPreset preset); - public PreviewPreset[] getUserPresets(); + void removePreset(PreviewPreset preset); - public void addPreset(PreviewPreset preset); + boolean hasPreset(String name); - public void savePreset(String name); + void savePreset(String name); - public PreviewUIModel getModel(); + PreviewUIModel getModel(); - public void addPropertyChangeListener(PropertyChangeListener listener); + void addPropertyChangeListener(PropertyChangeListener listener); - public void removePropertyChangeListener(PropertyChangeListener listener); + void removePropertyChangeListener(PropertyChangeListener listener); } diff --git a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/api/PreviewUIModel.java b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/api/PreviewUIModel.java index 9b3379f6a0..7776dace49 100644 --- a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/api/PreviewUIModel.java +++ b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/api/PreviewUIModel.java @@ -39,21 +39,25 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.preview.api; +import org.gephi.preview.api.PreviewModel; import org.gephi.preview.api.PreviewPreset; +import org.gephi.project.api.Workspace; /** - * * @author Mathieu Bastian */ public interface PreviewUIModel { - public PreviewPreset getCurrentPreset(); + PreviewModel getPreviewModel(); + + PreviewPreset getCurrentPreset(); + + float getVisibilityRatio(); + + boolean isRefreshing(); - public float getVisibilityRatio(); - - public boolean isRefreshing(); - - public boolean isWorkspaceBarVisible(); + Workspace getWorkspace(); } diff --git a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/options/PreviewOptionsPanel.java b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/options/PreviewOptionsPanel.java new file mode 100644 index 0000000000..cb9c807451 --- /dev/null +++ b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/options/PreviewOptionsPanel.java @@ -0,0 +1,224 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.preview.options; + +import java.awt.Component; +import java.awt.Font; +import javax.swing.DefaultComboBoxModel; +import javax.swing.DefaultListCellRenderer; +import javax.swing.GroupLayout; +import javax.swing.JComboBox; +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.JPanel; +import javax.swing.JSeparator; +import javax.swing.LayoutStyle; +import javax.swing.border.EmptyBorder; +import org.gephi.desktop.preview.PreviewUIModelImpl; +import org.gephi.desktop.preview.api.PreviewUIController; +import org.gephi.preview.api.PreviewPreset; +import org.openide.awt.Mnemonics; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; +import org.openide.util.NbPreferences; + +final class PreviewOptionsPanel extends JPanel { + + // Sentinel string rendered as a horizontal separator in the combobox dropdown + private static final String SEPARATOR = "---"; + + private final PreviewOptionsPanelController controller; + + private JLabel titleDefaultSettings; + private JSeparator titleSeparator; + private JLabel labelDefaultPreset; + private JComboBox defaultPresetCombobox; + + PreviewOptionsPanel(PreviewOptionsPanelController controller) { + this.controller = controller; + initComponents(); + } + + private void initComponents() { + titleDefaultSettings = new JLabel(); + titleSeparator = new JSeparator(); + labelDefaultPreset = new JLabel(); + defaultPresetCombobox = new JComboBox<>(); + + Font boldFont = titleDefaultSettings.getFont().deriveFont(Font.BOLD); + titleDefaultSettings.setFont(boldFont); + titleDefaultSettings.setText( + NbBundle.getMessage(PreviewOptionsPanel.class, "PreviewOptionsPanel.titleDefaultSettings.text")); + + Mnemonics.setLocalizedText(labelDefaultPreset, + NbBundle.getMessage(PreviewOptionsPanel.class, "PreviewOptionsPanel.labelDefaultPreset.text")); + + defaultPresetCombobox.setRenderer(new PresetComboBoxRenderer()); + populatePresetCombobox(); + defaultPresetCombobox.addActionListener(e -> { + // Do not fire changed when a separator is selected; revert to previous valid item + Object selected = defaultPresetCombobox.getSelectedItem(); + if (SEPARATOR.equals(selected)) { + defaultPresetCombobox.setSelectedIndex(0); + return; + } + controller.changed(); + }); + + GroupLayout layout = new GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(titleDefaultSettings) + .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) + .addComponent(titleSeparator)) + .addGroup(layout.createSequentialGroup() + .addGap(10, 10, 10) + .addComponent(labelDefaultPreset) + .addPreferredGap(LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(defaultPresetCombobox, 0, GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(GroupLayout.Alignment.CENTER) + .addComponent(titleDefaultSettings) + .addComponent(titleSeparator, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, + GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(GroupLayout.Alignment.BASELINE) + .addComponent(labelDefaultPreset) + .addComponent(defaultPresetCombobox, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, + GroupLayout.PREFERRED_SIZE)) + .addContainerGap(GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + } + + private void populatePresetCombobox() { + DefaultComboBoxModel model = new DefaultComboBoxModel<>(); + + PreviewUIController controller = Lookup.getDefault().lookup(PreviewUIController.class); + if (controller != null) { + for (PreviewPreset preset : controller.getDefaultPresets()) { + model.addElement(preset); + } + PreviewPreset[] userPresets = controller.getUserPresets(); + if (userPresets.length > 0) { + model.addElement(SEPARATOR); + for (PreviewPreset preset : userPresets) { + model.addElement(preset); + } + } + } + defaultPresetCombobox.setModel(model); + } + + void load() { + String presetClass = + NbPreferences.forModule(PreviewUIModelImpl.class).get(PreviewUIModelImpl.DEFAULT_PRESET_CLASS, ""); + String presetName = + NbPreferences.forModule(PreviewUIModelImpl.class).get(PreviewUIModelImpl.DEFAULT_PRESET_NAME, ""); + + if (presetClass.isEmpty() && presetName.isEmpty()) { + defaultPresetCombobox.setSelectedIndex(0); + return; + } + + for (int i = 0; i < defaultPresetCombobox.getItemCount(); i++) { + Object item = defaultPresetCombobox.getItemAt(i); + if (item instanceof PreviewPreset) { + PreviewPreset preset = (PreviewPreset) item; + boolean matches = !presetClass.isEmpty() + ? preset.getClass().getName().equals(presetClass) + : preset.getName().equals(presetName); + if (matches) { + defaultPresetCombobox.setSelectedIndex(i); + return; + } + } + } + + // Preset not found (e.g. user preset was deleted) β€” fall back to Gephi default + defaultPresetCombobox.setSelectedIndex(0); + } + + void store() { + Object selected = defaultPresetCombobox.getSelectedItem(); + if (selected instanceof PreviewPreset) { + PreviewPreset preset = (PreviewPreset) selected; + // Distinguish built-in presets (have a specific class) from user presets (base PreviewPreset class) + boolean isBuiltIn = preset.getClass() != PreviewPreset.class; + NbPreferences.forModule(PreviewUIModelImpl.class) + .put(PreviewUIModelImpl.DEFAULT_PRESET_CLASS, isBuiltIn ? preset.getClass().getName() : ""); + NbPreferences.forModule(PreviewUIModelImpl.class) + .put(PreviewUIModelImpl.DEFAULT_PRESET_NAME, isBuiltIn ? "" : preset.getName()); + } else { + // No valid preset selected (empty combobox) β€” clear stored preference + NbPreferences.forModule(PreviewUIModelImpl.class).put(PreviewUIModelImpl.DEFAULT_PRESET_CLASS, ""); + NbPreferences.forModule(PreviewUIModelImpl.class).put(PreviewUIModelImpl.DEFAULT_PRESET_NAME, ""); + } + } + + private class PresetComboBoxRenderer extends DefaultListCellRenderer { + + private final JSeparator separator = new JSeparator(JSeparator.HORIZONTAL); + + @Override + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, + boolean cellHasFocus) { + if (SEPARATOR.equals(value)) { + return separator; + } + JLabel label = + (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + label.setBorder(new EmptyBorder(1, 1, 1, 1)); + return label; + } + } +} diff --git a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/options/PreviewOptionsPanelController.java b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/options/PreviewOptionsPanelController.java new file mode 100644 index 0000000000..264577fd0d --- /dev/null +++ b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/options/PreviewOptionsPanelController.java @@ -0,0 +1,123 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.preview.options; + +import java.beans.PropertyChangeListener; +import java.beans.PropertyChangeSupport; +import javax.swing.JComponent; +import org.netbeans.spi.options.OptionsPanelController; +import org.openide.util.HelpCtx; +import org.openide.util.Lookup; + +@OptionsPanelController.SubRegistration(location = "Gephi", + displayName = "#AdvancedOption_DisplayName_Preview", + keywords = "#AdvancedOption_Keywords_Preview", + keywordsCategory = "Gephi/Preview", + position = 700) +public final class PreviewOptionsPanelController extends OptionsPanelController { + + private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); + private PreviewOptionsPanel panel; + private boolean changed; + + @Override + public void update() { + getPanel().load(); + changed = false; + } + + @Override + public void applyChanges() { + getPanel().store(); + changed = false; + } + + @Override + public void cancel() { + } + + @Override + public boolean isValid() { + return true; + } + + @Override + public boolean isChanged() { + return changed; + } + + @Override + public HelpCtx getHelpCtx() { + return null; + } + + @Override + public JComponent getComponent(Lookup masterLookup) { + return getPanel(); + } + + @Override + public void addPropertyChangeListener(PropertyChangeListener l) { + pcs.addPropertyChangeListener(l); + } + + @Override + public void removePropertyChangeListener(PropertyChangeListener l) { + pcs.removePropertyChangeListener(l); + } + + private PreviewOptionsPanel getPanel() { + if (panel == null) { + panel = new PreviewOptionsPanel(this); + } + return panel; + } + + void changed() { + if (!changed) { + changed = true; + pcs.firePropertyChange(OptionsPanelController.PROP_CHANGED, false, true); + } + pcs.firePropertyChange(OptionsPanelController.PROP_VALID, null, null); + } +} diff --git a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/DependantColorPanel.form b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/DependantColorPanel.form index e8fb4a7130..66375fcfac 100644 --- a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/DependantColorPanel.form +++ b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/DependantColorPanel.form @@ -20,18 +20,20 @@ - - + + + + - + @@ -42,11 +44,15 @@ + + + + - - + + - + @@ -77,6 +83,16 @@ + + + + + + + + + + @@ -87,5 +103,15 @@ + + + + + + + + + + diff --git a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/DependantColorPanel.java b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/DependantColorPanel.java index 1222ffdf8c..5a30c65ae4 100644 --- a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/DependantColorPanel.java +++ b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/DependantColorPanel.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.preview.propertyeditors; import java.awt.Color; @@ -50,12 +51,24 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.ui.components.JColorButton; /** - * * @author Mathieu Bastian */ public class DependantColorPanel extends javax.swing.JPanel implements ItemListener { - /** Creates new form DependantColorPanel */ + private DependantColorPropertyEditor propertyEditor; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.ButtonGroup buttonGroup1; + private javax.swing.JButton colorButton; + private javax.swing.JRadioButton customRadio; + private javax.swing.JRadioButton darkerButton; + private org.jdesktop.swingx.JXHeader jXHeader1; + private javax.swing.JRadioButton lighterButton; + private javax.swing.JRadioButton parentRadio; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form DependantColorPanel + */ public DependantColorPanel() { initComponents(); colorButton.addPropertyChangeListener(JColorButton.EVENT_COLOR, new PropertyChangeListener() { @@ -69,37 +82,52 @@ public void propertyChange(PropertyChangeEvent evt) { parentRadio.addItemListener(this); customRadio.addItemListener(this); + darkerButton.addItemListener(this); + lighterButton.addItemListener(this); } @Override public void itemStateChanged(ItemEvent e) { - if (customRadio.isSelected()) { - colorButton.setEnabled(true); - } else { - colorButton.setEnabled(false); - } - DependantColor.Mode selectedMode = null; - if (parentRadio.isSelected()) { - selectedMode = DependantColor.Mode.PARENT; - } else if (customRadio.isSelected()) { - selectedMode = DependantColor.Mode.CUSTOM; + if(e.getStateChange() == ItemEvent.SELECTED) { + colorButton.setEnabled(customRadio.isSelected()); + DependantColor.Mode selectedMode = null; + if (parentRadio.isSelected()) { + selectedMode = DependantColor.Mode.PARENT; + } else if (customRadio.isSelected()) { + selectedMode = DependantColor.Mode.CUSTOM; + } else if (darkerButton.isSelected()) { + selectedMode = DependantColor.Mode.DARKER; + } else if (lighterButton.isSelected()) { + selectedMode = DependantColor.Mode.LIGHTER; + } + propertyEditor.setValue(new DependantColor(selectedMode)); } - propertyEditor.setValue(new DependantColor(selectedMode)); } - private DependantColorPropertyEditor propertyEditor; public void setup(DependantColorPropertyEditor propertyEditor) { this.propertyEditor = propertyEditor; DependantColor dependantColor = (DependantColor) propertyEditor.getValue(); - if (dependantColor.getMode().equals(DependantColor.Mode.CUSTOM)) { - customRadio.setSelected(true); - ((JColorButton) colorButton).setColor(dependantColor.getCustomColor()); - } else if (dependantColor.getMode().equals(DependantColor.Mode.PARENT)) { - parentRadio.setSelected(true); + switch (dependantColor.getMode()) { + case CUSTOM: + customRadio.setSelected(true); + ((JColorButton) colorButton).setColor(dependantColor.getCustomColor()); + break; + case PARENT: + parentRadio.setSelected(true); + break; + case DARKER: + darkerButton.setSelected(true); + break; + case LIGHTER: + lighterButton.setSelected(true); + break; + default: + break; } } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -112,7 +140,9 @@ private void initComponents() { colorButton = new JColorButton(Color.BLACK); customRadio = new javax.swing.JRadioButton(); parentRadio = new javax.swing.JRadioButton(); + darkerButton = new javax.swing.JRadioButton(); jXHeader1 = new org.jdesktop.swingx.JXHeader(); + lighterButton = new javax.swing.JRadioButton(); buttonGroup1.add(customRadio); customRadio.setText(org.openide.util.NbBundle.getMessage(DependantColorPanel.class, "DependantColorPanel.customRadio.text")); // NOI18N @@ -120,23 +150,31 @@ private void initComponents() { buttonGroup1.add(parentRadio); parentRadio.setText(org.openide.util.NbBundle.getMessage(DependantColorPanel.class, "DependantColorPanel.parentRadio.text")); // NOI18N + buttonGroup1.add(darkerButton); + darkerButton.setText(org.openide.util.NbBundle.getMessage(DependantColorPanel.class, "DependantColorPanel.darkerButton.text")); // NOI18N + jXHeader1.setDescription(org.openide.util.NbBundle.getMessage(DependantColorPanel.class, "DependantColorPanel.jXHeader1.description")); // NOI18N jXHeader1.setTitle(org.openide.util.NbBundle.getMessage(DependantColorPanel.class, "DependantColorPanel.jXHeader1.title")); // NOI18N + buttonGroup1.add(lighterButton); + lighterButton.setText(org.openide.util.NbBundle.getMessage(DependantColorPanel.class, "DependantColorPanel.lighterButton.text")); // NOI18N + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jXHeader1, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE) + .addComponent(jXHeader1, javax.swing.GroupLayout.PREFERRED_SIZE, 457, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(parentRadio) + .addComponent(darkerButton) + .addComponent(lighterButton) .addGroup(layout.createSequentialGroup() .addComponent(customRadio) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(colorButton))) - .addGap(221, 221, 221)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -145,17 +183,14 @@ private void initComponents() { .addGap(18, 18, 18) .addComponent(parentRadio) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(darkerButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(lighterButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(customRadio) .addComponent(colorButton)) - .addContainerGap(43, Short.MAX_VALUE)) + .addContainerGap(26, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.ButtonGroup buttonGroup1; - private javax.swing.JButton colorButton; - private javax.swing.JRadioButton customRadio; - private org.jdesktop.swingx.JXHeader jXHeader1; - private javax.swing.JRadioButton parentRadio; - // End of variables declaration//GEN-END:variables } diff --git a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/DependantColorPropertyEditor.java b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/DependantColorPropertyEditor.java index a7ad22137d..c179e90781 100644 --- a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/DependantColorPropertyEditor.java +++ b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/DependantColorPropertyEditor.java @@ -39,17 +39,31 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.preview.propertyeditors; +import java.awt.Color; import java.awt.Component; -import org.gephi.preview.types.propertyeditors.BasicDependantColorPropertyEditor; +import org.gephi.preview.types.DependantColor; +import org.gephi.preview.types.editors.BasicDependantColorPropertyEditor; +import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class DependantColorPropertyEditor extends BasicDependantColorPropertyEditor { + @Override + public String getAsText() { + DependantColor c = (DependantColor) getValue(); + if (c.getMode().equals(DependantColor.Mode.CUSTOM)) { + String localizedCustom = NbBundle.getMessage(DependantColorPropertyEditor.class, "DependantColorPropertyEditor.custom.text"); + return toText(localizedCustom, c.getCustomColor() == null ? Color.BLACK : c.getCustomColor()); + } else { + return NbBundle.getMessage(DependantColorPropertyEditor.class, "DependantColorPropertyEditor."+c.getMode().name().toLowerCase()+".text"); + } + } + @Override public Component getCustomEditor() { DependantColorPanel dependantColorPanel = new DependantColorPanel(); diff --git a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/DependantOriginalColorPanel.form b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/DependantOriginalColorPanel.form index 1b25da7fba..cef99c45dc 100644 --- a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/DependantOriginalColorPanel.form +++ b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/DependantOriginalColorPanel.form @@ -1,4 +1,4 @@ - +
    @@ -20,23 +20,19 @@ - - - - - - - - - - - - + + - - - - + + + + + + + + + + @@ -71,7 +67,7 @@ - + diff --git a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/DependantOriginalColorPanel.java b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/DependantOriginalColorPanel.java index 59c19eee12..79bd51e5c0 100644 --- a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/DependantOriginalColorPanel.java +++ b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/DependantOriginalColorPanel.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.preview.propertyeditors; import java.awt.Color; @@ -50,12 +51,23 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.ui.components.JColorButton; /** - * * @author Mathieu Bastian */ public class DependantOriginalColorPanel extends javax.swing.JPanel implements ItemListener { - /** Creates new form DependantOriginalColorPanel */ + private DependantOriginalColorPropertyEditor propertyEditor; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.ButtonGroup buttonGroup1; + private javax.swing.JButton colorButton; + private javax.swing.JRadioButton customRadio; + private org.jdesktop.swingx.JXHeader jXHeader1; + private javax.swing.JRadioButton originalRadio; + private javax.swing.JRadioButton parentRadio; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form DependantOriginalColorPanel + */ public DependantOriginalColorPanel() { initComponents(); colorButton.addPropertyChangeListener(JColorButton.EVENT_COLOR, new PropertyChangeListener() { @@ -74,22 +86,19 @@ public void propertyChange(PropertyChangeEvent evt) { @Override public void itemStateChanged(ItemEvent e) { - if (customRadio.isSelected()) { - colorButton.setEnabled(true); - } else { - colorButton.setEnabled(false); - } - DependantOriginalColor.Mode selectedMode = null; - if (originalRadio.isSelected()) { - selectedMode = DependantOriginalColor.Mode.ORIGINAL; - } else if (parentRadio.isSelected()) { - selectedMode = DependantOriginalColor.Mode.PARENT; - } else if (customRadio.isSelected()) { - selectedMode = DependantOriginalColor.Mode.CUSTOM; + if(e.getStateChange() == ItemEvent.SELECTED) { + colorButton.setEnabled(customRadio.isSelected()); + DependantOriginalColor.Mode selectedMode = null; + if (originalRadio.isSelected()) { + selectedMode = DependantOriginalColor.Mode.ORIGINAL; + } else if (parentRadio.isSelected()) { + selectedMode = DependantOriginalColor.Mode.PARENT; + } else if (customRadio.isSelected()) { + selectedMode = DependantOriginalColor.Mode.CUSTOM; + } + propertyEditor.setValue(new DependantOriginalColor(selectedMode)); } - propertyEditor.setValue(new DependantOriginalColor(selectedMode)); } - private DependantOriginalColorPropertyEditor propertyEditor; public void setup(DependantOriginalColorPropertyEditor propertyEditor) { this.propertyEditor = propertyEditor; @@ -104,7 +113,8 @@ public void setup(DependantOriginalColorPropertyEditor propertyEditor) { } } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -115,7 +125,7 @@ private void initComponents() { buttonGroup1 = new javax.swing.ButtonGroup(); jXHeader1 = new org.jdesktop.swingx.JXHeader(); - colorButton = new JColorButton(Color.BLACK); + colorButton = new JColorButton(Color.BLACK, false, true); customRadio = new javax.swing.JRadioButton(); originalRadio = new javax.swing.JRadioButton(); parentRadio = new javax.swing.JRadioButton(); @@ -136,21 +146,17 @@ private void initComponents() { this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jXHeader1, javax.swing.GroupLayout.DEFAULT_SIZE, 478, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addContainerGap() - .addComponent(originalRadio) - .addContainerGap(360, Short.MAX_VALUE)) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(parentRadio) - .addContainerGap(365, Short.MAX_VALUE)) - .addComponent(jXHeader1, javax.swing.GroupLayout.DEFAULT_SIZE, 435, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(customRadio) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(colorButton) - .addContainerGap(326, Short.MAX_VALUE)) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(originalRadio) + .addComponent(parentRadio) + .addGroup(layout.createSequentialGroup() + .addComponent(customRadio) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(colorButton))) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) @@ -167,12 +173,4 @@ private void initComponents() { .addGap(47, 47, 47)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.ButtonGroup buttonGroup1; - private javax.swing.JButton colorButton; - private javax.swing.JRadioButton customRadio; - private org.jdesktop.swingx.JXHeader jXHeader1; - private javax.swing.JRadioButton originalRadio; - private javax.swing.JRadioButton parentRadio; - // End of variables declaration//GEN-END:variables } diff --git a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/DependantOriginalColorPropertyEditor.java b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/DependantOriginalColorPropertyEditor.java index ac9446e56f..79bc40110c 100644 --- a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/DependantOriginalColorPropertyEditor.java +++ b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/DependantOriginalColorPropertyEditor.java @@ -39,17 +39,33 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.preview.propertyeditors; +import java.awt.Color; import java.awt.Component; -import org.gephi.preview.types.propertyeditors.BasicDependantOriginalColorPropertyEditor; +import java.util.Locale; +import org.gephi.preview.types.DependantColor; +import org.gephi.preview.types.DependantOriginalColor; +import org.gephi.preview.types.editors.BasicDependantOriginalColorPropertyEditor; +import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class DependantOriginalColorPropertyEditor extends BasicDependantOriginalColorPropertyEditor { + @Override + public String getAsText() { + DependantOriginalColor c = (DependantOriginalColor) getValue(); + if (c.getMode().equals(DependantOriginalColor.Mode.CUSTOM)) { + String localizedCustom = NbBundle.getMessage(DependantOriginalColorPropertyEditor.class, "DependantOriginalColorPropertyEditor.custom.text"); + return toText(localizedCustom, c.getCustomColor() == null ? Color.BLACK : c.getCustomColor()); + } else { + return NbBundle.getMessage(DependantOriginalColorPropertyEditor.class, "DependantOriginalColorPropertyEditor."+c.getMode().name().toLowerCase(Locale.ROOT)+".text"); + } + } + @Override public Component getCustomEditor() { DependantOriginalColorPanel dependantOriginalColorPanel = new DependantOriginalColorPanel(); diff --git a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/DisabledAwareFontEditor.java b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/DisabledAwareFontEditor.java new file mode 100644 index 0000000000..3c5324c9e9 --- /dev/null +++ b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/DisabledAwareFontEditor.java @@ -0,0 +1,93 @@ +/* +Copyright 2008-2011 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.preview.propertyeditors; + +import java.awt.AlphaComposite; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.Rectangle; +import org.netbeans.beaninfo.editors.FontEditor; +import org.openide.explorer.propertysheet.ExPropertyEditor; +import org.openide.explorer.propertysheet.PropertyEnv; +import org.openide.nodes.Node; + +/** + * A custom FontEditor that renders disabled (non-writable) properties with reduced opacity. + *

    + * The default NetBeans FontEditor doesn't grey out the text when the property is disabled. + * This editor extends it and implements ExPropertyEditor to access the PropertyEnv, + * which allows checking if the property is writable. + * + * @author Mathieu Bastian + */ +public class DisabledAwareFontEditor extends FontEditor implements ExPropertyEditor { + + private PropertyEnv env; + + @Override + public void attachEnv(PropertyEnv env) { + this.env = env; + } + + @Override + public void paintValue(Graphics g, Rectangle rectangle) { + boolean disabled = false; + + if (env != null && env.getFeatureDescriptor() instanceof Node.Property) { + Node.Property prop = (Node.Property) env.getFeatureDescriptor(); + disabled = !prop.canWrite(); + } + + if (disabled) { + Graphics2D g2 = (Graphics2D) g.create(); + g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.4f)); + super.paintValue(g2, rectangle); + g2.dispose(); + } else { + Graphics2D g2 = (Graphics2D) g.create(); + g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f)); + super.paintValue(g, rectangle); + } + } +} + diff --git a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/EdgeColorPanel.form b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/EdgeColorPanel.form index e8d748f8a0..b6e449bed9 100644 --- a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/EdgeColorPanel.form +++ b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/EdgeColorPanel.form @@ -1,4 +1,4 @@ - + @@ -123,7 +123,7 @@ - + diff --git a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/EdgeColorPanel.java b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/EdgeColorPanel.java index 6c53a288cc..65b1cee9a5 100644 --- a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/EdgeColorPanel.java +++ b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/EdgeColorPanel.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.preview.propertyeditors; import java.awt.Color; @@ -50,12 +51,25 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.ui.components.JColorButton; /** - * * @author Mathieu Bastian */ public class EdgeColorPanel extends javax.swing.JPanel implements ItemListener { - /** Creates new form EdgeColorPanel */ + private EdgeColorPropertyEditor propertyEditor; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.ButtonGroup buttonGroup1; + private javax.swing.JButton colorButton; + private javax.swing.JRadioButton customRadio; + private org.jdesktop.swingx.JXHeader jXHeader1; + private javax.swing.JRadioButton mixedRadio; + private javax.swing.JRadioButton originalRadio; + private javax.swing.JRadioButton sourceRadio; + private javax.swing.JRadioButton targetRadio; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form EdgeColorPanel + */ public EdgeColorPanel() { initComponents(); @@ -77,26 +91,23 @@ public void propertyChange(PropertyChangeEvent evt) { @Override public void itemStateChanged(ItemEvent e) { - if (customRadio.isSelected()) { - colorButton.setEnabled(true); - } else { - colorButton.setEnabled(false); - } - EdgeColor.Mode selectedMode = null; - if (originalRadio.isSelected()) { - selectedMode = EdgeColor.Mode.ORIGINAL; - } else if (mixedRadio.isSelected()) { - selectedMode = EdgeColor.Mode.MIXED; - } else if (sourceRadio.isSelected()) { - selectedMode = EdgeColor.Mode.SOURCE; - } else if (targetRadio.isSelected()) { - selectedMode = EdgeColor.Mode.TARGET; - } else if (customRadio.isSelected()) { - selectedMode = EdgeColor.Mode.CUSTOM; + if(e.getStateChange() == ItemEvent.SELECTED) { + colorButton.setEnabled(customRadio.isSelected()); + EdgeColor.Mode selectedMode = null; + if (originalRadio.isSelected()) { + selectedMode = EdgeColor.Mode.ORIGINAL; + } else if (mixedRadio.isSelected()) { + selectedMode = EdgeColor.Mode.MIXED; + } else if (sourceRadio.isSelected()) { + selectedMode = EdgeColor.Mode.SOURCE; + } else if (targetRadio.isSelected()) { + selectedMode = EdgeColor.Mode.TARGET; + } else if (customRadio.isSelected()) { + selectedMode = EdgeColor.Mode.CUSTOM; + } + propertyEditor.setValue(new EdgeColor(selectedMode)); } - propertyEditor.setValue(new EdgeColor(selectedMode)); } - private EdgeColorPropertyEditor propertyEditor; public void setup(EdgeColorPropertyEditor propertyEditor) { this.propertyEditor = propertyEditor; @@ -115,7 +126,8 @@ public void setup(EdgeColorPropertyEditor propertyEditor) { } } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -131,7 +143,7 @@ private void initComponents() { sourceRadio = new javax.swing.JRadioButton(); targetRadio = new javax.swing.JRadioButton(); customRadio = new javax.swing.JRadioButton(); - colorButton = new JColorButton(Color.BLACK); + colorButton = new JColorButton(Color.BLACK, false, true); jXHeader1.setDescription(org.openide.util.NbBundle.getMessage(EdgeColorPanel.class, "EdgeColorPanel.jXHeader1.description")); // NOI18N jXHeader1.setTitle(org.openide.util.NbBundle.getMessage(EdgeColorPanel.class, "EdgeColorPanel.jXHeader1.title")); // NOI18N @@ -188,14 +200,4 @@ private void initComponents() { .addContainerGap(7, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.ButtonGroup buttonGroup1; - private javax.swing.JButton colorButton; - private javax.swing.JRadioButton customRadio; - private org.jdesktop.swingx.JXHeader jXHeader1; - private javax.swing.JRadioButton mixedRadio; - private javax.swing.JRadioButton originalRadio; - private javax.swing.JRadioButton sourceRadio; - private javax.swing.JRadioButton targetRadio; - // End of variables declaration//GEN-END:variables } diff --git a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/EdgeColorPropertyEditor.java b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/EdgeColorPropertyEditor.java index c86a478819..16737b50fe 100644 --- a/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/EdgeColorPropertyEditor.java +++ b/modules/DesktopPreview/src/main/java/org/gephi/desktop/preview/propertyeditors/EdgeColorPropertyEditor.java @@ -39,17 +39,32 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.preview.propertyeditors; +import java.awt.Color; import java.awt.Component; -import org.gephi.preview.types.propertyeditors.BasicEdgeColorPropertyEditor; +import java.util.Locale; +import org.gephi.preview.types.EdgeColor; +import org.gephi.preview.types.editors.BasicEdgeColorPropertyEditor; +import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class EdgeColorPropertyEditor extends BasicEdgeColorPropertyEditor { + @Override + public String getAsText() { + EdgeColor c = (EdgeColor) getValue(); + if (c.getMode().equals(EdgeColor.Mode.CUSTOM)) { + String localizedCustom = NbBundle.getMessage(EdgeColorPropertyEditor.class, "EdgeColorPropertyEditor.custom.text"); + return toText(localizedCustom, c.getCustomColor() == null ? Color.BLACK : c.getCustomColor()); + } else { + return NbBundle.getMessage(EdgeColorPropertyEditor.class, "EdgeColorPropertyEditor."+c.getMode().name().toLowerCase(Locale.ROOT)+".text"); + } + } + @Override public Component getCustomEditor() { EdgeColorPanel edgeColorPanel = new EdgeColorPanel(); diff --git a/modules/DesktopPreview/src/main/nbm/manifest.mf b/modules/DesktopPreview/src/main/nbm/manifest.mf index 7a382a716c..194e10fbad 100644 --- a/modules/DesktopPreview/src/main/nbm/manifest.mf +++ b/modules/DesktopPreview/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/desktop/preview/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi UI +OpenIDE-Module-Name: Desktop Preview \ No newline at end of file diff --git a/modules/DesktopPreview/src/main/nbm/module.xml b/modules/DesktopPreview/src/main/nbm/module.xml deleted file mode 100644 index 0158b4a1b8..0000000000 --- a/modules/DesktopPreview/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle.properties index 7c315055cf..73eb3efde1 100644 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle.properties +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle.properties @@ -1,6 +1,3 @@ -OpenIDE-Module-Display-Category=Gephi UI -OpenIDE-Module-Name=Desktop Preview - CTL_PreviewAction=Preview CTL_PreviewSettingsAction=Preview Settings CTL_PreviewSettingsTopComponent=Preview Settings @@ -16,8 +13,8 @@ PreviewNode.displayName = Preview Settings PreviewSettingsTopComponent.savePreset.input = Name PreviewSettingsTopComponent.savePreset.input.title = Preset PreviewSettingsTopComponent.savePreset.status = Preset {0} saved -PreviewTopComponent.bannerLabel.text=Workspace has been updated. Do you want to refresh the preview? -PreviewTopComponent.refreshButton.text=Refresh +PreviewSettingsTopComponent.savePresetReplace.text = A preset with the same name already exists. Do you want to replace it? +PreviewSettingsTopComponent.savePresetReplace.title = Preset exists PreviewTopComponent.busyLabel.text=Refreshing... PreviewSettingsTopComponent.box.text= PreviewSettingsTopComponent.saveButton.toolTipText=Save preset @@ -42,3 +39,9 @@ RendererManager.restoreOrderButton.text=Restore renderers order RendererManager.infoLabel.text= RendererManager.description1=Allows you to enable/disable preview renderers and configure their order of execution. RendererManager.description2=Normally you should not need to do this unless your list of plugin renderers is very long. +PreviewTopComponent.globalCanvasSizeButton.toolTipText=Set canvas boundaries based on the full graph, the default is just the visible graph +PreviewSettingsTopComponent.removeButton.text= +PreviewSettingsTopComponent.removeButton.toolTipText=Remove Preset +PreviewSettingsTopComponent.removePreset.text=Are you sure you want to remove the {0} preset? +PreviewSettingsTopComponent.removePreset.title=Remove Preset +PreviewSettingsTopComponent.removePreset.status=Preset {0} removed \ No newline at end of file diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_ar.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_ca.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_ca.properties new file mode 100644 index 0000000000..260c1e58eb --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_ca.properties @@ -0,0 +1,36 @@ +CTL_PreviewAction=Previsualitza +CTL_PreviewSettingsAction=Configura la previsualitzaciσ +CTL_PreviewSettingsTopComponent=Configura la previsualitzaciσ +CTL_PreviewTopComponent=Previsualitza +!HINT_PreviewSettingsTopComponent=Preview Settings +!HINT_PreviewTopComponent=Preview +OpenIDE-Module-Short-Description=Preview and Preview settings components +GenericColorizerPanel.CustomColorRadioButton.text=Custom Color +PreviewNode.displayName=Preview Settings +PreviewSettingsTopComponent.savePreset.input=Nom +PreviewSettingsTopComponent.savePreset.input.title=Preset +PreviewSettingsTopComponent.savePreset.status=Preset {0} saved +PreviewTopComponent.busyLabel.text=Refrescant... +PreviewSettingsTopComponent.box.text= +PreviewSettingsTopComponent.saveButton.toolTipText=Save preset +PreviewSettingsTopComponent.saveButton.text= +PreviewSettingsTopComponent.ratioLabel.text=0 +PreviewSettingsTopComponent.labelRatio.text=Preview ratio: +PreviewSettingsTopComponent.refreshButton.text=Refresca +PreviewSettingsTopComponent.labelPreset.text=Presets +PreviewSettingsTopComponent.ratio.minimum=Mνnim +PreviewSettingsTopComponent.propertySheetTab=Configuraciσ +PreviewSettingsTopComponent.rendererManagerTab=Manage renderers +PreviewTopComponent.backgroundButton.text=Fons +PreviewTopComponent.resetZoomButton.text=Reset zoom +PreviewSettingsTopComponent.svgExportButton.text=SVG/PDF/PNG +PreviewSettingsTopComponent.labelExport.text=Exporta: +PreviewSettingsTopComponent.svgExportButton.toolTipText=Exporta com a SVG o PDF +PreviewTopComponent.plusButton.toolTipText=Mιs zoom +PreviewTopComponent.minusButton.toolTipText=Menys zoom +RendererManager.selectAllButton.text=Selecciona-ho tot +RendererManager.unselectAllButon.text=Unselect All +RendererManager.restoreOrderButton.text=Restore renderers order +RendererManager.infoLabel.text= +RendererManager.description1=Allows you to enable/disable preview renderers and configure their order of execution. +RendererManager.description2=Normally you should not need to do this unless your list of plugin renderers is very long. diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_cs.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_cs.properties index 1055f9bf82..ac3fb0c508 100644 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_cs.properties +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_cs.properties @@ -1,77 +1,39 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-12 13\:00+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -CTL_PreviewAction=N\u00e1hled - -CTL_PreviewSettingsAction=Nastaven\u00ed n\u00e1hledu - -CTL_PreviewSettingsTopComponent=Nastaven\u00ed n\u00e1hledu - -CTL_PreviewTopComponent=N\u00e1hled - -HINT_PreviewSettingsTopComponent=Nastaven\u00ed n\u00e1hledu - -HINT_PreviewTopComponent=N\u00e1hled - -OpenIDE-Module-Short-Description=N\u00e1hled a \u010d\u00e1sti nastaven\u00ed n\u00e1hledu - -GenericColorizerPanel.CustomColorRadioButton.text=Vlastn\u00ed barva - -PreviewNode.displayName=Nastaven\u00ed n\u00e1hledu - -PreviewSettingsTopComponent.savePreset.input=N\u00e1zev - -PreviewSettingsTopComponent.savePreset.input.title=P\u0159edvolba - -PreviewSettingsTopComponent.savePreset.status=P\u0159edvolba {0} ulo\u017eena - -PreviewTopComponent.bannerLabel.text=Pracovn\u00ed prostor byl aktualizov\u00e1n. Chcete n\u00e1hled obnovit? - -PreviewTopComponent.refreshButton.text=Obnovit - -PreviewTopComponent.busyLabel.text=Obnovov\u00e1n\u00ed... - -PreviewSettingsTopComponent.saveButton.toolTipText=Ulo\u017eit p\u0159edvolbu - -PreviewSettingsTopComponent.ratioLabel.text=0 - -PreviewSettingsTopComponent.labelRatio.text=Pom\u011br n\u00e1hledu\: - -PreviewSettingsTopComponent.refreshButton.text=Obnovit - -PreviewSettingsTopComponent.labelPreset.text=P\u0159edvolby - -PreviewSettingsTopComponent.ratio.minimum=Minimum - -PreviewSettingsTopComponent.propertySheetTab=Nastaven\u00ed - -PreviewSettingsTopComponent.rendererManagerTab=Spravovat vykreslova\u010de - -PreviewTopComponent.backgroundButton.text=Pozad\u00ed - -PreviewTopComponent.resetZoomButton.text=Resetovat p\u0159ibl\u00ed\u017een\u00ed - -PreviewSettingsTopComponent.svgExportButton.text=SVG/PDF/PNG - -PreviewSettingsTopComponent.labelExport.text=Export\: - -PreviewSettingsTopComponent.svgExportButton.toolTipText=Exportovat jako form\u00e1t SVG nebo PDF - -PreviewTopComponent.plusButton.toolTipText=P\u0159ibl\u00ed\u017eit v\u00edce - -PreviewTopComponent.minusButton.toolTipText=P\u0159ibl\u00ed\u017eit m\u00e9n\u011b - -RendererManager.selectAllButton.text=Ozna\u010dit v\u0161e - -RendererManager.unselectAllButon.text=Odzna\u010dit v\u0161e - -RendererManager.restoreOrderButton.text=Obnovit po\u0159ad\u00ed vykreslova\u010d\u016f - -RendererManager.description1=Umo\u017e\u0148ure V\u00e1m povolit/zak\u00e1zat vykreslova\u010de n\u00e1hledu a nastavit jejich po\u0159ad\u00ed spu\u0161t\u011bn\u00ed. - -RendererManager.description2=Toto byste norm\u00e1ln\u011b nemuseli prov\u00e9st, pokud V\u00e1\u0161 seznam z\u00e1suvn\u00fdch modul\u016f nen\u00ed velmi dlouh\u00fd. +CTL_PreviewAction=Nαhled +CTL_PreviewSettingsAction=Nastavenν nαhledu +CTL_PreviewSettingsTopComponent=Nastavenν nαhledu +CTL_PreviewTopComponent=Nαhled +!HINT_PreviewSettingsTopComponent=Preview Settings +!HINT_PreviewTopComponent=Preview +OpenIDE-Module-Short-Description=Nαhled a \u010dαsti nastavenν nαhledu + +GenericColorizerPanel.CustomColorRadioButton.text=Vlastnν barva + +PreviewNode.displayName = Nastavenν nαhledu + +PreviewSettingsTopComponent.savePreset.input = Nαzev +PreviewSettingsTopComponent.savePreset.input.title = P\u0159edvolba +PreviewSettingsTopComponent.savePreset.status = P\u0159edvolba {0} ulo\u017eena +PreviewTopComponent.busyLabel.text=Obnovovαnν... +PreviewSettingsTopComponent.box.text= +PreviewSettingsTopComponent.saveButton.toolTipText=Ulo\u017eit p\u0159edvolbu +PreviewSettingsTopComponent.saveButton.text= +PreviewSettingsTopComponent.ratioLabel.text=0 +PreviewSettingsTopComponent.labelRatio.text=Pom\u011br nαhledu: +PreviewSettingsTopComponent.refreshButton.text=Obnovit +PreviewSettingsTopComponent.labelPreset.text=P\u0159edvolby +PreviewSettingsTopComponent.ratio.minimum = Minimum +PreviewSettingsTopComponent.propertySheetTab = Nastavenν +PreviewSettingsTopComponent.rendererManagerTab = Spravovat vykreslova\u010de +PreviewTopComponent.backgroundButton.text=Pozadν +PreviewTopComponent.resetZoomButton.text=Resetovat p\u0159iblν\u017eenν +PreviewSettingsTopComponent.svgExportButton.text=SVG/PDF/PNG +PreviewSettingsTopComponent.labelExport.text=Export: +PreviewSettingsTopComponent.svgExportButton.toolTipText=Exportovat jako formαt SVG nebo PDF +PreviewTopComponent.plusButton.toolTipText=P\u0159iblν\u017eit vνce +PreviewTopComponent.minusButton.toolTipText=P\u0159iblν\u017eit mιn\u011b +RendererManager.selectAllButton.text=Ozna\u010dit v\u0161e +RendererManager.unselectAllButon.text=Odzna\u010dit v\u0161e +RendererManager.restoreOrderButton.text=Obnovit po\u0159adν vykreslova\u010d\u016f +RendererManager.infoLabel.text= +RendererManager.description1=Umo\u017e\u0148ure Vαm povolit/zakαzat vykreslova\u010de nαhledu a nastavit jejich po\u0159adν spu\u0161t\u011bnν. +RendererManager.description2=Toto byste normαln\u011b nemuseli provιst, pokud Vα\u0161 seznam zαsuvnύch modul\u016f nenν velmi dlouhύ. diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_de.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_de.properties new file mode 100644 index 0000000000..e0e30583c1 --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_de.properties @@ -0,0 +1,38 @@ +CTL_PreviewAction=Vorschau +CTL_PreviewSettingsAction=Vorschaueinstellungen +CTL_PreviewSettingsTopComponent=Vorschaueinstellungen +CTL_PreviewTopComponent=Vorschau +!HINT_PreviewSettingsTopComponent=Preview Settings +!HINT_PreviewTopComponent=Preview +OpenIDE-Module-Short-Description=Komponenten der Vorschau und Vorschaueinstellungen +GenericColorizerPanel.CustomColorRadioButton.text=Eigene Farbfestlegung +PreviewNode.displayName=Vorschaueinstellungen +PreviewSettingsTopComponent.savePreset.input=Name +PreviewSettingsTopComponent.savePreset.input.title=Voreinstellung +PreviewSettingsTopComponent.savePreset.status=Voreinstellung {0} gespeichert +PreviewTopComponent.busyLabel.text=Aktualisieren... +PreviewSettingsTopComponent.box.text= +PreviewSettingsTopComponent.saveButton.toolTipText=Voreinstellung speichern +PreviewSettingsTopComponent.saveButton.text= +PreviewSettingsTopComponent.ratioLabel.text=0 +PreviewSettingsTopComponent.labelRatio.text=Vorschauverhδltnis: +PreviewSettingsTopComponent.refreshButton.text=Aktualisieren +PreviewSettingsTopComponent.labelPreset.text=Voreinstellungen +PreviewSettingsTopComponent.ratio.minimum=Minimum +PreviewSettingsTopComponent.propertySheetTab=Einstellungen +PreviewSettingsTopComponent.rendererManagerTab=Renderer verwalten +PreviewTopComponent.backgroundButton.text=Hintergrund +PreviewTopComponent.resetZoomButton.text=Zoomeinstellung zurόcksetzen +PreviewSettingsTopComponent.svgExportButton.text=SVG/PDF/PNG +PreviewSettingsTopComponent.labelExport.text=Export: +PreviewSettingsTopComponent.svgExportButton.toolTipText=Exportieren im SVG- oder PDF-Format +PreviewTopComponent.plusButton.toolTipText=Hinein zoomen +PreviewTopComponent.minusButton.toolTipText=Heraus zoomen +RendererManager.selectAllButton.text=Alles Auswδhlen +RendererManager.unselectAllButon.text=Alles Abwδhlen +RendererManager.restoreOrderButton.text=Reihenfolge der Renderer wiederherstellen +RendererManager.infoLabel.text= +RendererManager.description1=Erlaubt Ihnen das Aktivieren und Deaktivieren der Vorschau Renderer sowie das Konfigurieren der Ausfόhrungsreihenfolge +RendererManager.description2=Normalerweise brauchen Sie das nicht zu tun, es sei denn, die Liste ihrer Renderer-Plugins ist sehr lang. +PreviewSettingsTopComponent.savePresetReplace.text=Eine Vorlage mit demselben Namen existiert bereits. M\u00F6chten Sie sie ersetzen? +PreviewSettingsTopComponent.savePresetReplace.title=Vorlage existiert bereits diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_es.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_es.properties index 3cde5d083c..9429fa0bc6 100644 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_es.properties +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_es.properties @@ -1,78 +1,43 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011, 2012. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-10 22\:04+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -CTL_PreviewAction=Previsualizaci\u00f3n - -CTL_PreviewSettingsAction=Configuraci\u00f3n de previsualizaci\u00f3n - -CTL_PreviewSettingsTopComponent=Configuraci\u00f3n de previsualizaci\u00f3n - -CTL_PreviewTopComponent=Previsualizaci\u00f3n - -HINT_PreviewSettingsTopComponent=Configuraci\u00f3n de previsualizaci\u00f3n - -HINT_PreviewTopComponent=Previsualizaci\u00f3n - -OpenIDE-Module-Short-Description=Componentes de previsualizaci\u00f3n y su configuraci\u00f3n - +CTL_PreviewAction=Previsualizaciσn +CTL_PreviewSettingsAction=Configuraciσn de previsualizaciσn +CTL_PreviewSettingsTopComponent=Configuraciσn de previsualizaciσn +CTL_PreviewTopComponent=Previsualizaciσn +!HINT_PreviewSettingsTopComponent=Preview Settings +!HINT_PreviewTopComponent=Preview +OpenIDE-Module-Short-Description=Componentes de previsualizaciσn y su configuraciσn GenericColorizerPanel.CustomColorRadioButton.text=Color personalizado - -PreviewNode.displayName=Par\u00e1metros de previsualizaci\u00f3n - +PreviewNode.displayName=Parαmetros de previsualizaciσn PreviewSettingsTopComponent.savePreset.input=Nombre - -PreviewSettingsTopComponent.savePreset.input.title=Configuraci\u00f3n predefinida - -PreviewSettingsTopComponent.savePreset.status=Configuraci\u00f3n predefinida {0} guardada - -PreviewTopComponent.bannerLabel.text=El espacio de trabajo ha sido actualizado. \u00bfQuieres refrescar la previsualizaci\u00f3n? - -PreviewTopComponent.refreshButton.text=Refrescar - +PreviewSettingsTopComponent.savePreset.input.title=Configuraciσn predefinida +PreviewSettingsTopComponent.savePreset.status=Configuraciσn predefinida {0} guardada PreviewTopComponent.busyLabel.text=Refrescando... - -PreviewSettingsTopComponent.saveButton.toolTipText=Guardar configuraci\u00f3n predefinida - +PreviewSettingsTopComponent.box.text= +PreviewSettingsTopComponent.saveButton.toolTipText=Guardar configuraciσn predefinida +PreviewSettingsTopComponent.saveButton.text= PreviewSettingsTopComponent.ratioLabel.text=0 - -PreviewSettingsTopComponent.labelRatio.text=Proporci\u00f3n de previsualizaci\u00f3n\: - +PreviewSettingsTopComponent.labelRatio.text=Proporciσn de previsualizaciσn: PreviewSettingsTopComponent.refreshButton.text=Refrescar - PreviewSettingsTopComponent.labelPreset.text=Configuraciones predefinidas - -PreviewSettingsTopComponent.ratio.minimum=M\u00ednimo - -PreviewSettingsTopComponent.propertySheetTab=Par\u00e1metros - +PreviewSettingsTopComponent.ratio.minimum=Mνnimo +PreviewSettingsTopComponent.propertySheetTab=Parαmetros PreviewSettingsTopComponent.rendererManagerTab=Gestionar renderers - PreviewTopComponent.backgroundButton.text=Fondo - PreviewTopComponent.resetZoomButton.text=Restaurar zoom - PreviewSettingsTopComponent.svgExportButton.text=SVG/PDF/PNG - -PreviewSettingsTopComponent.labelExport.text=Exportar\: - +PreviewSettingsTopComponent.labelExport.text=Exportar: PreviewSettingsTopComponent.svgExportButton.toolTipText=Exportar como formato SVG o PDF - PreviewTopComponent.plusButton.toolTipText=Acercar - PreviewTopComponent.minusButton.toolTipText=Alejar - RendererManager.selectAllButton.text=Marcar todos - RendererManager.unselectAllButon.text=Desmarcar todos - RendererManager.restoreOrderButton.text=Restaurar orden de los renderers - -RendererManager.description1=Permite activar/desactivar renderers de previsualizaci\u00f3n y configurar su orden de ejecuci\u00f3n. - -RendererManager.description2=Normalmente no deber\u00eda ser necesario hacer esto a no ser que tu lista de plugins de renderers de previsualizaci\u00f3n sea muy larga. +RendererManager.infoLabel.text= +RendererManager.description1=Permite activar/desactivar renderers de previsualizaciσn y configurar su orden de ejecuciσn. +RendererManager.description2=Normalmente no deberνa ser necesario hacer esto a no ser que tu lista de plugins de renderers de previsualizaciσn sea muy larga. +PreviewTopComponent.globalCanvasSizeButton.toolTipText=Establece los l\u00EDmites del lienzo bas\u00E1ndose en el grafo completo, por defecto es s\u00F3lo el grafo visible +PreviewSettingsTopComponent.savePresetReplace.text=Ya existe un preajuste con el mismo nombre. \u00BFDesea sustituirlo? +PreviewSettingsTopComponent.removePreset.status=Preajuste {0} eliminado +PreviewSettingsTopComponent.removePreset.text=\u00BFEst\u00E1s seguro de que quieres eliminar el preajuste {0}? +PreviewSettingsTopComponent.removePreset.title=Eliminar ajuste preestablecido +PreviewSettingsTopComponent.savePresetReplace.title=El ajuste preestablecido ya existe +PreviewSettingsTopComponent.removeButton.toolTipText=Eliminar ajuste preestablecido diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_fr.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_fr.properties index 6914cee758..ba127ef275 100644 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_fr.properties +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_fr.properties @@ -1,78 +1,39 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-15 13\:56+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -CTL_PreviewAction=Aper\u00e7u - -CTL_PreviewSettingsAction=Param\u00e8tres d'aper\u00e7u - -CTL_PreviewSettingsTopComponent=Param\u00e8tres d'aper\u00e7u - -CTL_PreviewTopComponent=Aper\u00e7u - -HINT_PreviewSettingsTopComponent=Param\u00e8tres d'aper\u00e7u - -HINT_PreviewTopComponent=Aper\u00e7u - -OpenIDE-Module-Short-Description=Aper\u00e7u et param\u00e9trages - -GenericColorizerPanel.CustomColorRadioButton.text=Couleur personnalis\u00e9e - -PreviewNode.displayName=Param\u00e8tres d'aper\u00e7u - -PreviewSettingsTopComponent.savePreset.input=Nom - -PreviewSettingsTopComponent.savePreset.input.title=R\u00e9glages - -PreviewSettingsTopComponent.savePreset.status=R\u00e9glages {0} enregistr\u00e9s - -PreviewTopComponent.bannerLabel.text=Espace de travail mis \u00e0 jour. Rafra\u00eechir la pr\u00e9visualisation ? - -PreviewTopComponent.refreshButton.text=Rafra\u00eechir - -PreviewTopComponent.busyLabel.text=Rafra\u00eechissement en cours... - -PreviewSettingsTopComponent.saveButton.toolTipText=Enregistrer les r\u00e9glages - -PreviewSettingsTopComponent.ratioLabel.text=0 - -PreviewSettingsTopComponent.labelRatio.text=Ratio \: - -PreviewSettingsTopComponent.refreshButton.text=Rafra\u00eechir - -PreviewSettingsTopComponent.labelPreset.text=R\u00e9glages - -PreviewSettingsTopComponent.ratio.minimum=Minimum - -PreviewSettingsTopComponent.propertySheetTab=Param\u00e8tres - -PreviewSettingsTopComponent.rendererManagerTab=G\u00e9rer les renderers - -PreviewTopComponent.backgroundButton.text=Arri\u00e8re-plan - -PreviewTopComponent.resetZoomButton.text=R\u00e9initialiser le zoom - -PreviewSettingsTopComponent.svgExportButton.text=SVG/PDF/PNG - -PreviewSettingsTopComponent.labelExport.text=Export \: - -PreviewSettingsTopComponent.svgExportButton.toolTipText=Exporter au format SVG, PNG ou PDF - -PreviewTopComponent.plusButton.toolTipText=Plus de zoom - -PreviewTopComponent.minusButton.toolTipText=Moins de zoom - -RendererManager.selectAllButton.text=Tout s\u00e9lectionner - -RendererManager.unselectAllButon.text=Tout d\u00e9s\u00e9lectionner - -RendererManager.restoreOrderButton.text=Restaurer l'ordre des renderers - -RendererManager.description1=Autorise l'activation/d\u00e9sactivation de la pr\u00e9visualisation et configure leur ordre d'ex\u00e9cute. - -RendererManager.description2=Vous de devriez rien changer normalement \u00e0 moins que votre liste soit tr\u00e8s longue. +CTL_PreviewAction=Aperηu +CTL_PreviewSettingsAction=Paramθtres d'aperηu +CTL_PreviewSettingsTopComponent=Paramθtres d'aperηu +CTL_PreviewTopComponent=Aperηu +!HINT_PreviewSettingsTopComponent=Preview Settings +!HINT_PreviewTopComponent=Preview +OpenIDE-Module-Short-Description=Aperηu et paramιtrages + +GenericColorizerPanel.CustomColorRadioButton.text=Couleur personnalisιe + +PreviewNode.displayName = Paramθtres d'aperηu + +PreviewSettingsTopComponent.savePreset.input = Nom +PreviewSettingsTopComponent.savePreset.input.title = Rιglages +PreviewSettingsTopComponent.savePreset.status = Rιglages {0} enregistrιs +PreviewTopComponent.busyLabel.text=Rafraξchissement en cours... +PreviewSettingsTopComponent.box.text= +PreviewSettingsTopComponent.saveButton.toolTipText=Enregistrer les rιglages +PreviewSettingsTopComponent.saveButton.text= +PreviewSettingsTopComponent.ratioLabel.text=0 +PreviewSettingsTopComponent.labelRatio.text=Ratio : +PreviewSettingsTopComponent.refreshButton.text=Rafraξchir +PreviewSettingsTopComponent.labelPreset.text=Rιglages +PreviewSettingsTopComponent.ratio.minimum = Minimum +PreviewSettingsTopComponent.propertySheetTab = Paramθtres +PreviewSettingsTopComponent.rendererManagerTab = Gιrer les renderers +PreviewTopComponent.backgroundButton.text=Arriθre-plan +PreviewTopComponent.resetZoomButton.text=Rιinitialiser le zoom +PreviewSettingsTopComponent.svgExportButton.text=SVG/PDF/PNG +PreviewSettingsTopComponent.labelExport.text=Export : +PreviewSettingsTopComponent.svgExportButton.toolTipText=Exporter au format SVG, PNG ou PDF +PreviewTopComponent.plusButton.toolTipText=Plus de zoom +PreviewTopComponent.minusButton.toolTipText=Moins de zoom +RendererManager.selectAllButton.text=Tout sιlectionner +RendererManager.unselectAllButon.text=Tout dιsιlectionner +RendererManager.restoreOrderButton.text=Restaurer l'ordre des renderers +RendererManager.infoLabel.text= +RendererManager.description1=Autorise l'activation/dιsactivation de la prιvisualisation et configure leur ordre d'exιcute. +RendererManager.description2=Vous de devriez rien changer normalement ΰ moins que votre liste soit trθs longue. diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_he.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_he.properties new file mode 100644 index 0000000000..ef40f98b7d --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_he.properties @@ -0,0 +1,36 @@ +CTL_PreviewAction=Preview +CTL_PreviewSettingsAction=Preview Settings +CTL_PreviewSettingsTopComponent=Preview Settings +CTL_PreviewTopComponent=Preview +!HINT_PreviewSettingsTopComponent=Preview Settings +!HINT_PreviewTopComponent=Preview +OpenIDE-Module-Short-Description=Preview and Preview settings components +GenericColorizerPanel.CustomColorRadioButton.text=Custom Color +PreviewNode.displayName=Preview Settings +PreviewSettingsTopComponent.savePreset.input=Name +PreviewSettingsTopComponent.savePreset.input.title=Preset +PreviewSettingsTopComponent.savePreset.status=Preset {0} saved +PreviewTopComponent.busyLabel.text=Refreshing... +PreviewSettingsTopComponent.box.text= +PreviewSettingsTopComponent.saveButton.toolTipText=Save preset +PreviewSettingsTopComponent.saveButton.text= +PreviewSettingsTopComponent.ratioLabel.text=0 +PreviewSettingsTopComponent.labelRatio.text=Preview ratio: +PreviewSettingsTopComponent.refreshButton.text=Refresh +PreviewSettingsTopComponent.labelPreset.text=Presets +PreviewSettingsTopComponent.ratio.minimum=Minimum +PreviewSettingsTopComponent.propertySheetTab=Settings +PreviewSettingsTopComponent.rendererManagerTab=Manage renderers +PreviewTopComponent.backgroundButton.text=Background +PreviewTopComponent.resetZoomButton.text=Reset zoom +PreviewSettingsTopComponent.svgExportButton.text=SVG/PDF/PNG +PreviewSettingsTopComponent.labelExport.text=Export: +PreviewSettingsTopComponent.svgExportButton.toolTipText=Export as SVG of PDF format +PreviewTopComponent.plusButton.toolTipText=More zoom +PreviewTopComponent.minusButton.toolTipText=Less zoom +RendererManager.selectAllButton.text=Select All +RendererManager.unselectAllButon.text=Unselect All +RendererManager.restoreOrderButton.text=Restore renderers order +RendererManager.infoLabel.text= +RendererManager.description1=Allows you to enable/disable preview renderers and configure their order of execution. +RendererManager.description2=Normally you should not need to do this unless your list of plugin renderers is very long. diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_hu.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_hu.properties new file mode 100644 index 0000000000..72a0f53635 --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_hu.properties @@ -0,0 +1,36 @@ + + +PreviewSettingsTopComponent.labelPreset.text=El\u0151be\u00E1ll\u00EDt\u00E1sok +PreviewNode.displayName=El\u0151n\u00E9zeti be\u00E1ll\u00EDt\u00E1sok +PreviewTopComponent.minusButton.toolTipText=Kevesebb zoom +PreviewSettingsTopComponent.rendererManagerTab=Renderel\u0151k kezel\u00E9se +PreviewSettingsTopComponent.labelRatio.text=El\u0151n\u00E9zeti ar\u00E1ny: +PreviewTopComponent.busyLabel.text=Friss\u00EDt\u00E9s. +RendererManager.selectAllButton.text=Mindet kiv\u00E1laszt +RendererManager.description1=Lehet\u0151v\u00E9 teszi az el\u0151n\u00E9zeti megjelen\u00EDt\u0151k enged\u00E9lyez\u00E9s\u00E9t/letilt\u00E1s\u00E1t, valamint a v\u00E9grehajt\u00E1si sorrendj\u00FCk konfigur\u00E1l\u00E1s\u00E1t. +PreviewTopComponent.plusButton.toolTipText=Tov\u00E1bbi zoom +PreviewTopComponent.globalCanvasSizeButton.toolTipText=\u00C1ll\u00EDtsa be a v\u00E1szon hat\u00E1rait a teljes grafikon alapj\u00E1n, az alap\u00E9rtelmezett csak a l\u00E1that\u00F3 grafikon +PreviewSettingsTopComponent.svgExportButton.text=SVG/PDF/PNG +PreviewSettingsTopComponent.saveButton.toolTipText=El\u0151be\u00E1ll\u00EDt\u00E1s ment\u00E9se +GenericColorizerPanel.CustomColorRadioButton.text=Egyedi sz\u00EDn +PreviewSettingsTopComponent.ratio.minimum=Minimum +PreviewSettingsTopComponent.refreshButton.text=Friss\u00EDt\u00E9s +PreviewSettingsTopComponent.savePreset.status=El\u0151re be\u00E1ll\u00EDtott {0} mentve +PreviewTopComponent.backgroundButton.text=H\u00E1tt\u00E9r +PreviewSettingsTopComponent.propertySheetTab=Be\u00E1ll\u00EDt\u00E1sok +PreviewSettingsTopComponent.ratioLabel.text=0 0 +PreviewSettingsTopComponent.labelExport.text=Export: +CTL_PreviewAction=El\u0151n\u00E9zet +PreviewSettingsTopComponent.savePreset.input.title=El\u0151re be\u00E1ll\u00EDtott +RendererManager.description2=\u00C1ltal\u00E1ban ezt nem kell megtennie, hacsak nem nagyon hossz\u00FA a be\u00E9p\u00FCl\u0151 modulok megjelen\u00EDt\u0151inek list\u00E1ja. +!HINT_PreviewSettingsTopComponent=Preview Settings +!HINT_PreviewTopComponent=Preview +OpenIDE-Module-Short-Description=El\u0151n\u00E9zet \u00E9s el\u0151n\u00E9zeti be\u00E1ll\u00EDt\u00E1sok \u00F6sszetev\u0151i +PreviewSettingsTopComponent.savePreset.input=N\u00E9v +CTL_PreviewTopComponent=El\u0151n\u00E9zet +RendererManager.unselectAllButon.text=Minden kijel\u00F6l\u00E9s megsz\u00FCntet\u00E9se +CTL_PreviewSettingsTopComponent=El\u0151n\u00E9zeti be\u00E1ll\u00EDt\u00E1sok +PreviewTopComponent.resetZoomButton.text=Zoom vissza\u00E1ll\u00EDt\u00E1sa +RendererManager.restoreOrderButton.text=A megjelen\u00EDt\u0151k sorrendj\u00E9nek vissza\u00E1ll\u00EDt\u00E1sa +CTL_PreviewSettingsAction=El\u0151n\u00E9zeti be\u00E1ll\u00EDt\u00E1sok +PreviewSettingsTopComponent.svgExportButton.toolTipText=Export\u00E1l\u00E1s PDF form\u00E1tum\u00FA SVG-k\u00E9nt diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_it.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_it.properties new file mode 100644 index 0000000000..4f1e85a7cc --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_it.properties @@ -0,0 +1,36 @@ +CTL_PreviewAction=Preview +CTL_PreviewSettingsAction=Preview Settings +CTL_PreviewSettingsTopComponent=Preview Settings +CTL_PreviewTopComponent=Preview +!HINT_PreviewSettingsTopComponent=Preview Settings +!HINT_PreviewTopComponent=Preview +OpenIDE-Module-Short-Description=Preview and Preview settings components +GenericColorizerPanel.CustomColorRadioButton.text=Custom Color +PreviewNode.displayName=Preview Settings +PreviewSettingsTopComponent.savePreset.input=Nome +PreviewSettingsTopComponent.savePreset.input.title=Preset +PreviewSettingsTopComponent.savePreset.status=Preset {0} saved +PreviewTopComponent.busyLabel.text=Refreshing... +PreviewSettingsTopComponent.box.text= +PreviewSettingsTopComponent.saveButton.toolTipText=Save preset +PreviewSettingsTopComponent.saveButton.text= +PreviewSettingsTopComponent.ratioLabel.text=0 +PreviewSettingsTopComponent.labelRatio.text=Preview ratio: +PreviewSettingsTopComponent.refreshButton.text=Aggiorna +PreviewSettingsTopComponent.labelPreset.text=Presets +PreviewSettingsTopComponent.ratio.minimum=Minimo +PreviewSettingsTopComponent.propertySheetTab=Impostazioni +PreviewSettingsTopComponent.rendererManagerTab=Manage renderers +PreviewTopComponent.backgroundButton.text=Sfondo +PreviewTopComponent.resetZoomButton.text=Reimposta zoom +PreviewSettingsTopComponent.svgExportButton.text=SVG / PDF / PNG +PreviewSettingsTopComponent.labelExport.text=Esporta: +PreviewSettingsTopComponent.svgExportButton.toolTipText=Export as SVG of PDF format +PreviewTopComponent.plusButton.toolTipText=Ingrandisci +PreviewTopComponent.minusButton.toolTipText=Less zoom +RendererManager.selectAllButton.text=Seleziona tutto +RendererManager.unselectAllButon.text=Deseleziona tutto +RendererManager.restoreOrderButton.text=Restore renderers order +RendererManager.infoLabel.text= +RendererManager.description1=Allows you to enable/disable preview renderers and configure their order of execution. +RendererManager.description2=Normally you should not need to do this unless your list of plugin renderers is very long. diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_ja.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_ja.properties index 5c9f126d14..2c8e401202 100644 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_ja.properties +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_ja.properties @@ -1,77 +1,39 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-15 09\:18+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -CTL_PreviewAction=\u30d7\u30ec\u30d3\u30e5\u30fc - -CTL_PreviewSettingsAction=\u30d7\u30ec\u30d3\u30e5\u30fc\u8a2d\u5b9a - -CTL_PreviewSettingsTopComponent=\u30d7\u30ec\u30d3\u30e5\u30fc\u8a2d\u5b9a - -CTL_PreviewTopComponent=\u30d7\u30ec\u30d3\u30e5\u30fc - -HINT_PreviewSettingsTopComponent=\u30d7\u30ec\u30d3\u30e5\u30fc\u8a2d\u5b9a - -HINT_PreviewTopComponent=\u30d7\u30ec\u30d3\u30e5\u30fc - -OpenIDE-Module-Short-Description=\u30d7\u30ec\u30d3\u30e5\u30fc\u53ca\u3073\u30d7\u30ec\u30d3\u30e5\u30fc\u8a2d\u5b9a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8 - -GenericColorizerPanel.CustomColorRadioButton.text=\u30ab\u30b9\u30bf\u30e0\u30fb\u30ab\u30e9\u30fc - -PreviewNode.displayName=\u30d7\u30ec\u30d3\u30e5\u30fc\u8a2d\u5b9a - -PreviewSettingsTopComponent.savePreset.input=\u540d\u524d - -PreviewSettingsTopComponent.savePreset.input.title=\u30d7\u30ea\u30bb\u30c3\u30c8 - -PreviewSettingsTopComponent.savePreset.status=\u30d7\u30ea\u30bb\u30c3\u30c8 {0} \u4fdd\u5b58 - -PreviewTopComponent.bannerLabel.text=\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u304c\u66f4\u65b0\u3055\u308c\u307e\u3057\u305f\u3002\u3042\u306a\u305f\u306f\u3001\u30d7\u30ec\u30d3\u30e5\u30fc\u3092\u66f4\u65b0\u3057\u307e\u3059\u304b\uff1f - -PreviewTopComponent.refreshButton.text=\u66f4\u65b0 - -PreviewTopComponent.busyLabel.text=\u66f4\u65b0\u4e2d... - -PreviewSettingsTopComponent.saveButton.toolTipText=\u30d7\u30ea\u30bb\u30c3\u30c8\u3092\u4fdd\u5b58 - -PreviewSettingsTopComponent.ratioLabel.text=0 - -PreviewSettingsTopComponent.labelRatio.text=\u30d7\u30ec\u30d3\u30e5\u30fc\u6bd4\: - -PreviewSettingsTopComponent.refreshButton.text=\u66f4\u65b0 - -PreviewSettingsTopComponent.labelPreset.text=\u30d7\u30ea\u30bb\u30c3\u30c8 - -PreviewSettingsTopComponent.ratio.minimum=\u6700\u5c0f - -PreviewSettingsTopComponent.propertySheetTab=\u8a2d\u5b9a - -PreviewSettingsTopComponent.rendererManagerTab=\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u30a8\u30f3\u30b8\u30f3\u3092\u64cd\u4f5c - -PreviewTopComponent.backgroundButton.text=\u80cc\u666f - -PreviewTopComponent.resetZoomButton.text=\u62e1\u5927\u3092\u30ea\u30bb\u30c3\u30c8 - -PreviewSettingsTopComponent.svgExportButton.text=SVG/PDF/PNG - -PreviewSettingsTopComponent.labelExport.text=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\: - -PreviewSettingsTopComponent.svgExportButton.toolTipText=PDF\u5f62\u5f0f\u306eSVG\u3068\u3057\u3066\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 - -PreviewTopComponent.plusButton.toolTipText=\u62e1\u5927 - -PreviewTopComponent.minusButton.toolTipText=\u7e2e\u5c0f - -RendererManager.selectAllButton.text=\u3059\u3079\u3066\u3092\u9078\u629e - -RendererManager.unselectAllButon.text=\u3059\u3079\u3066\u3092\u9078\u629e\u306e\u89e3\u9664 - -RendererManager.restoreOrderButton.text=\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u30a8\u30f3\u30b8\u30f3\u306e\u547d\u4ee4\u3092\u5fa9\u5143 - -RendererManager.description1=\u30d7\u30ec\u30d3\u30e5\u30fc\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u30a8\u30f3\u30b8\u30f3\u306e\u6709\u52b9/\u7121\u52b9\u3092\u5207\u308a\u66ff\u3048\u3001\u5b9f\u884c\u547d\u4ee4\u306e\u8a2d\u5b9a\u3092\u53ef\u80fd\u306b\u3059\u308b\u3002 - -RendererManager.description2=\u901a\u5e38\u30d7\u30e9\u30b0\u30a4\u30f3\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u30a8\u30f3\u30b8\u30f3\u306e\u30ea\u30b9\u30c8\u304c\u305d\u308c\u307b\u3069\u9577\u304f\u306a\u3051\u308c\u3070\u3001\u3053\u306e\u64cd\u4f5c\u306f\u4e0d\u8981\u3067\u3059\u3002 +CTL_PreviewAction=\u30d7\u30ec\u30d3\u30e5\u30fc +CTL_PreviewSettingsAction=\u30d7\u30ec\u30d3\u30e5\u30fc\u8a2d\u5b9a +CTL_PreviewSettingsTopComponent=\u30d7\u30ec\u30d3\u30e5\u30fc\u8a2d\u5b9a +CTL_PreviewTopComponent=\u30d7\u30ec\u30d3\u30e5\u30fc +!HINT_PreviewSettingsTopComponent=Preview Settings +!HINT_PreviewTopComponent=Preview +OpenIDE-Module-Short-Description=\u30d7\u30ec\u30d3\u30e5\u30fc\u53ca\u3073\u30d7\u30ec\u30d3\u30e5\u30fc\u8a2d\u5b9a\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8 + +GenericColorizerPanel.CustomColorRadioButton.text=\u30ab\u30b9\u30bf\u30e0\u30fb\u30ab\u30e9\u30fc + +PreviewNode.displayName = \u30d7\u30ec\u30d3\u30e5\u30fc\u8a2d\u5b9a + +PreviewSettingsTopComponent.savePreset.input = \u540d\u524d +PreviewSettingsTopComponent.savePreset.input.title = \u30d7\u30ea\u30bb\u30c3\u30c8 +PreviewSettingsTopComponent.savePreset.status = \u30d7\u30ea\u30bb\u30c3\u30c8 {0} \u4fdd\u5b58 +PreviewTopComponent.busyLabel.text=\u66f4\u65b0\u4e2d... +PreviewSettingsTopComponent.box.text= +PreviewSettingsTopComponent.saveButton.toolTipText=\u30d7\u30ea\u30bb\u30c3\u30c8\u3092\u4fdd\u5b58 +PreviewSettingsTopComponent.saveButton.text= +PreviewSettingsTopComponent.ratioLabel.text=0 +PreviewSettingsTopComponent.labelRatio.text=\u30d7\u30ec\u30d3\u30e5\u30fc\u6bd4: +PreviewSettingsTopComponent.refreshButton.text=\u66f4\u65b0 +PreviewSettingsTopComponent.labelPreset.text=\u30d7\u30ea\u30bb\u30c3\u30c8 +PreviewSettingsTopComponent.ratio.minimum = \u6700\u5c0f +PreviewSettingsTopComponent.propertySheetTab = \u8a2d\u5b9a +PreviewSettingsTopComponent.rendererManagerTab = \u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u30a8\u30f3\u30b8\u30f3\u3092\u64cd\u4f5c +PreviewTopComponent.backgroundButton.text=\u80cc\u666f +PreviewTopComponent.resetZoomButton.text=\u62e1\u5927\u3092\u30ea\u30bb\u30c3\u30c8 +PreviewSettingsTopComponent.svgExportButton.text=SVG/PDF/PNG +PreviewSettingsTopComponent.labelExport.text=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8: +PreviewSettingsTopComponent.svgExportButton.toolTipText=PDF\u5f62\u5f0f\u306eSVG\u3068\u3057\u3066\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 +PreviewTopComponent.plusButton.toolTipText=\u62e1\u5927 +PreviewTopComponent.minusButton.toolTipText=\u7e2e\u5c0f +RendererManager.selectAllButton.text=\u3059\u3079\u3066\u3092\u9078\u629e +RendererManager.unselectAllButon.text=\u3059\u3079\u3066\u3092\u9078\u629e\u306e\u89e3\u9664 +RendererManager.restoreOrderButton.text=\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u30a8\u30f3\u30b8\u30f3\u306e\u547d\u4ee4\u3092\u5fa9\u5143 +RendererManager.infoLabel.text= +RendererManager.description1=\u30d7\u30ec\u30d3\u30e5\u30fc\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u30a8\u30f3\u30b8\u30f3\u306e\u6709\u52b9/\u7121\u52b9\u3092\u5207\u308a\u66ff\u3048\u3001\u5b9f\u884c\u547d\u4ee4\u306e\u8a2d\u5b9a\u3092\u53ef\u80fd\u306b\u3059\u308b\u3002 +RendererManager.description2=\u901a\u5e38\u30d7\u30e9\u30b0\u30a4\u30f3\u30ec\u30f3\u30c0\u30ea\u30f3\u30b0\u30a8\u30f3\u30b8\u30f3\u306e\u30ea\u30b9\u30c8\u304c\u305d\u308c\u307b\u3069\u9577\u304f\u306a\u3051\u308c\u3070\u3001\u3053\u306e\u64cd\u4f5c\u306f\u4e0d\u8981\u3067\u3059\u3002 diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_ko.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_ko.properties new file mode 100644 index 0000000000..56dcaffe42 --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_ko.properties @@ -0,0 +1,42 @@ + + +PreviewSettingsTopComponent.labelPreset.text=\uD504\uB9AC\uC14B +PreviewNode.displayName=\uBBF8\uB9AC\uBCF4\uAE30 \uC124\uC815 +PreviewTopComponent.minusButton.toolTipText=\uCD95\uC18C +PreviewSettingsTopComponent.rendererManagerTab=\uB80C\uB354\uB7EC \uAD00\uB9AC +PreviewSettingsTopComponent.labelRatio.text=\uBBF8\uB9AC\uBCF4\uAE30 \uBE44\uC728: +PreviewTopComponent.busyLabel.text=\uC0C8\uB85C\uACE0\uCE68... +RendererManager.selectAllButton.text=\uC804\uCCB4 \uC120\uD0DD +RendererManager.description1=\uBBF8\uB9AC\uBCF4\uAE30 \uB80C\uB354\uB7EC\uB97C \uD65C\uC131\uD654/\uBE44\uD65C\uC131\uD654\uD558\uACE0 \uC2E4\uD589 \uC21C\uC11C\uB97C \uAD6C\uC131\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. +PreviewTopComponent.plusButton.toolTipText=\uD655\uB300 +PreviewTopComponent.globalCanvasSizeButton.toolTipText=\uC644\uC804\uD55C \uADF8\uB798\uD504\uB97C \uAE30\uC900\uC73C\uB85C \uCE94\uBC84\uC2A4 \uACBD\uACC4\uB97C \uC124\uC815\uD569\uB2C8\uB2E4. \uAE30\uBCF8\uAC12\uC740 \uBCF4\uC774\uB294 \uADF8\uB798\uD504\uC77C \uBFD0\uC785\uB2C8\uB2E4 +PreviewSettingsTopComponent.svgExportButton.text=SVG/PDF/PNG +PreviewSettingsTopComponent.saveButton.toolTipText=\uC0AC\uC804\uC124\uC815 \uC800\uC7A5 +GenericColorizerPanel.CustomColorRadioButton.text=\uC0AC\uC6A9\uC790 \uC9C0\uC815 \uC0C9\uC0C1 +PreviewSettingsTopComponent.ratio.minimum=\uCD5C\uC18C\uAC12 +PreviewSettingsTopComponent.refreshButton.text=\uC0C8\uB85C\uACE0\uCE68 +PreviewSettingsTopComponent.savePreset.status={0} \uD504\uB9AC\uC14B\uC774 \uC800\uC7A5\uB418\uC5C8\uC2B5\uB2C8\uB2E4 +PreviewTopComponent.backgroundButton.text=\uBC30\uACBD +PreviewSettingsTopComponent.propertySheetTab=\uC124\uC815 +PreviewSettingsTopComponent.ratioLabel.text=0 +PreviewSettingsTopComponent.labelExport.text=\uB0B4\uBCF4\uB0B4\uAE30: +CTL_PreviewAction=\uBBF8\uB9AC\uBCF4\uAE30 +PreviewSettingsTopComponent.savePreset.input.title=\uD504\uB9AC\uC14B +RendererManager.description2=\uC77C\uBC18\uC801\uC73C\uB85C \uD50C\uB7EC\uADF8\uC778 \uB80C\uB354\uB7EC \uBAA9\uB85D\uC774 \uB9E4\uC6B0 \uAE34 \uACBD\uC6B0\uAC00 \uC544\uB2C8\uB77C\uBA74 \uC774 \uC791\uC5C5\uC744 \uC218\uD589\uD560 \uD544\uC694\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. +!HINT_PreviewSettingsTopComponent=Preview Settings +!HINT_PreviewTopComponent=Preview +OpenIDE-Module-Short-Description=\uBBF8\uB9AC\uBCF4\uAE30 \uBC0F \uBBF8\uB9AC\uBCF4\uAE30 \uC124\uC815 \uAD6C\uC131 \uC694\uC18C +PreviewSettingsTopComponent.savePreset.input=\uC774\uB984 +CTL_PreviewTopComponent=\uBBF8\uB9AC\uBCF4\uAE30 +RendererManager.unselectAllButon.text=\uBAA8\uB450 \uC120\uD0DD \uD574\uC81C +CTL_PreviewSettingsTopComponent=\uBBF8\uB9AC\uBCF4\uAE30 \uC124\uC815 +PreviewTopComponent.resetZoomButton.text=\uD655\uB300/\uCD95\uC18C \uC7AC\uC124\uC815 +RendererManager.restoreOrderButton.text=\uB80C\uB354\uB7EC \uC21C\uC11C \uBCF5\uC6D0 +CTL_PreviewSettingsAction=\uBBF8\uB9AC\uBCF4\uAE30 \uC124\uC815 +PreviewSettingsTopComponent.svgExportButton.toolTipText=PDF \uD615\uC2DD\uC758 SVG\uB85C \uB0B4\uBCF4\uB0B4\uAE30 +PreviewSettingsTopComponent.savePresetReplace.text=\uC774\uBBF8 \uAC19\uC740 \uC774\uB984\uC758 \uD504\uB9AC\uC14B\uC774 \uC788\uC2B5\uB2C8\uB2E4. \uB36E\uC5B4\uC4F0\uC2DC\uACA0\uC2B5\uB2C8\uAE4C? +PreviewSettingsTopComponent.savePresetReplace.title=\uD504\uB9AC\uC14B\uC774 \uC874\uC7AC\uD569\uB2C8\uB2E4 +PreviewSettingsTopComponent.removeButton.toolTipText=\uD504\uB9AC\uC14B \uC0AD\uC81C +PreviewSettingsTopComponent.removePreset.text={0} \uD504\uB9AC\uC14B\uC744 \uC815\uB9D0\uB85C \uC0AD\uC81C\uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C? +PreviewSettingsTopComponent.removePreset.title=\uD504\uB9AC\uC14B \uC0AD\uC81C +PreviewSettingsTopComponent.removePreset.status={0} \uD504\uB9AC\uC14B\uC774 \uC0AD\uC81C\uB418\uC5C8\uC2B5\uB2C8\uB2E4 diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_nl.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_nl.properties new file mode 100644 index 0000000000..dd8aa9219b --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_nl.properties @@ -0,0 +1,36 @@ +CTL_PreviewAction=Voorbeeld +CTL_PreviewSettingsAction=Voorbeeldinstellingen +CTL_PreviewSettingsTopComponent=Voorbeeldinstellingen +CTL_PreviewTopComponent=Voorbeeld +!HINT_PreviewSettingsTopComponent=Preview Settings +!HINT_PreviewTopComponent=Preview +OpenIDE-Module-Short-Description=Preview and Preview settings components +GenericColorizerPanel.CustomColorRadioButton.text=Aangepaste kleur +PreviewNode.displayName=Voorbeeldinstellingen +PreviewSettingsTopComponent.savePreset.input=Naam +PreviewSettingsTopComponent.savePreset.input.title=Preset +PreviewSettingsTopComponent.savePreset.status=Preset {0} saved +PreviewTopComponent.busyLabel.text=Vernieuwen... +PreviewSettingsTopComponent.box.text= +PreviewSettingsTopComponent.saveButton.toolTipText=Save preset +PreviewSettingsTopComponent.saveButton.text= +PreviewSettingsTopComponent.ratioLabel.text=0 +PreviewSettingsTopComponent.labelRatio.text=Preview ratio: +PreviewSettingsTopComponent.refreshButton.text=Vernieuwen +PreviewSettingsTopComponent.labelPreset.text=Presets +PreviewSettingsTopComponent.ratio.minimum=Minimum +PreviewSettingsTopComponent.propertySheetTab=Instellingen +PreviewSettingsTopComponent.rendererManagerTab=Manage renderers +PreviewTopComponent.backgroundButton.text=Achtergrond +PreviewTopComponent.resetZoomButton.text=Reset zoom +PreviewSettingsTopComponent.svgExportButton.text=SVG/PDF/PNG +PreviewSettingsTopComponent.labelExport.text=Exporteren: +PreviewSettingsTopComponent.svgExportButton.toolTipText=Export as SVG of PDF format +PreviewTopComponent.plusButton.toolTipText=More zoom +PreviewTopComponent.minusButton.toolTipText=Less zoom +RendererManager.selectAllButton.text=Alles selecteren +RendererManager.unselectAllButon.text=Unselect All +RendererManager.restoreOrderButton.text=Restore renderers order +RendererManager.infoLabel.text= +RendererManager.description1=Allows you to enable/disable preview renderers and configure their order of execution. +RendererManager.description2=Normally you should not need to do this unless your list of plugin renderers is very long. diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_pt_BR.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_pt_BR.properties index 882472dbba..cd884a30cd 100644 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_pt_BR.properties +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_pt_BR.properties @@ -1,78 +1,39 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -# C\u00e9lio Faria Jr. , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-12 12\:44+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -CTL_PreviewAction=Visualiza\u00e7\u00e3o - -CTL_PreviewSettingsAction=Configura\u00e7\u00f5es de visualiza\u00e7\u00e3o - -CTL_PreviewSettingsTopComponent=Configura\u00e7\u00f5es de visualiza\u00e7\u00e3o - -CTL_PreviewTopComponent=Visualiza\u00e7\u00e3o - -HINT_PreviewSettingsTopComponent=Configura\u00e7\u00f5es de visualiza\u00e7\u00e3o - -HINT_PreviewTopComponent=Visualiza\u00e7\u00e3o - -OpenIDE-Module-Short-Description=Visualiza\u00e7\u00e3o e configura\u00e7\u00f5es de componentes de visualiza\u00e7\u00e3o - -GenericColorizerPanel.CustomColorRadioButton.text=Cor Personalizada - -PreviewNode.displayName=Configura\u00e7\u00f5es de visualiza\u00e7\u00e3o - -PreviewSettingsTopComponent.savePreset.input=Nome - -PreviewSettingsTopComponent.savePreset.input.title=Configura\u00e7\u00e3o pr\u00e9-definida - -PreviewSettingsTopComponent.savePreset.status=Configura\u00e7\u00e3o pr\u00e9-definida {0} salva - -PreviewTopComponent.bannerLabel.text=A \u00c1rea de Trabalho foi atualizada. Deseja atualizar a visualiza\u00e7\u00e3o? - -PreviewTopComponent.refreshButton.text=Atualizar - -PreviewTopComponent.busyLabel.text=Atualizando... - -PreviewSettingsTopComponent.saveButton.toolTipText=Salvar configura\u00e7\u00e3o pr\u00e9-definida - -PreviewSettingsTopComponent.ratioLabel.text=0 - -PreviewSettingsTopComponent.labelRatio.text=Rela\u00e7\u00e3o de previs\u00e3o\: - -PreviewSettingsTopComponent.refreshButton.text=Atualizar - -PreviewSettingsTopComponent.labelPreset.text=Configura\u00e7\u00e3o pr\u00e9-definida - -PreviewSettingsTopComponent.ratio.minimum=M\u00ednimo - -PreviewSettingsTopComponent.propertySheetTab=Configura\u00e7\u00f5es - -PreviewSettingsTopComponent.rendererManagerTab=Gerenciar renderizadores - -PreviewTopComponent.backgroundButton.text=Fundo - -PreviewTopComponent.resetZoomButton.text=Restaurar zoom - -PreviewSettingsTopComponent.svgExportButton.text=SVG/PDF/PNG - -PreviewSettingsTopComponent.labelExport.text=Exporta\u00e7\u00e3o\: - -PreviewSettingsTopComponent.svgExportButton.toolTipText=Exportar como SVG ou PDF - -PreviewTopComponent.plusButton.toolTipText=Aumentar zoom - -PreviewTopComponent.minusButton.toolTipText=Diminuir zoom - -RendererManager.selectAllButton.text=Selecionar todos - -RendererManager.unselectAllButon.text=Deselecionar todos - -RendererManager.restoreOrderButton.text=Restaurar ordem de renderizadores - -RendererManager.description1=Permite habilitar e desabilitar os renderizadores de pr\u00e9-visualiza\u00e7\u00e3o e configurar sua ordem de execu\u00e7\u00e3o - -RendererManager.description2=Normalmente n\u00e3o \u00e9 necess\u00e1rio fazer isto a menos que sua lista de plugins de renderiza\u00e7\u00e3o seja muito longa +CTL_PreviewAction=Visualizaηγo +CTL_PreviewSettingsAction=Configuraηυes de visualizaηγo +CTL_PreviewSettingsTopComponent=Configuraηυes de visualizaηγo +CTL_PreviewTopComponent=Visualizaηγo +!HINT_PreviewSettingsTopComponent=Preview Settings +!HINT_PreviewTopComponent=Preview +OpenIDE-Module-Short-Description=Visualizaηγo e configuraηυes de componentes de visualizaηγo + +GenericColorizerPanel.CustomColorRadioButton.text=Cor Personalizada + +PreviewNode.displayName = Configuraηυes de visualizaηγo + +PreviewSettingsTopComponent.savePreset.input = Nome +PreviewSettingsTopComponent.savePreset.input.title = Configuraηγo prι-definida +PreviewSettingsTopComponent.savePreset.status = Configuraηγo prι-definida {0} salva +PreviewTopComponent.busyLabel.text=Atualizando... +PreviewSettingsTopComponent.box.text= +PreviewSettingsTopComponent.saveButton.toolTipText=Salvar configuraηγo prι-definida +PreviewSettingsTopComponent.saveButton.text= +PreviewSettingsTopComponent.ratioLabel.text=0 +PreviewSettingsTopComponent.labelRatio.text=Relaηγo de previsγo: +PreviewSettingsTopComponent.refreshButton.text=Atualizar +PreviewSettingsTopComponent.labelPreset.text=Configuraηγo prι-definida +PreviewSettingsTopComponent.ratio.minimum = Mνnimo +PreviewSettingsTopComponent.propertySheetTab = Configuraηυes +PreviewSettingsTopComponent.rendererManagerTab = Gerenciar renderizadores +PreviewTopComponent.backgroundButton.text=Fundo +PreviewTopComponent.resetZoomButton.text=Restaurar zoom +PreviewSettingsTopComponent.svgExportButton.text=SVG/PDF/PNG +PreviewSettingsTopComponent.labelExport.text=Exportaηγo: +PreviewSettingsTopComponent.svgExportButton.toolTipText=Exportar como SVG ou PDF +PreviewTopComponent.plusButton.toolTipText=Aumentar zoom +PreviewTopComponent.minusButton.toolTipText=Diminuir zoom +RendererManager.selectAllButton.text=Selecionar todos +RendererManager.unselectAllButon.text=Deselecionar todos +RendererManager.restoreOrderButton.text=Restaurar ordem de renderizadores +RendererManager.infoLabel.text= +RendererManager.description1=Permite habilitar e desabilitar os renderizadores de prι-visualizaηγo e configurar sua ordem de execuηγo +RendererManager.description2=Normalmente nγo ι necessαrio fazer isto a menos que sua lista de plugins de renderizaηγo seja muito longa diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_ro.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_ro.properties new file mode 100644 index 0000000000..2df05d8c99 --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_ro.properties @@ -0,0 +1,35 @@ + + +GenericColorizerPanel.CustomColorRadioButton.text=Culoare personalizat\u0103 +!HINT_PreviewSettingsTopComponent=Preview Settings +!HINT_PreviewTopComponent=Preview +OpenIDE-Module-Short-Description=Componente de previzualizare \u0219i set\u0103rile aferente +CTL_PreviewSettingsAction=Set\u0103ri de previzualizare +CTL_PreviewTopComponent=Previzualizare +CTL_PreviewAction=Previzualizare +PreviewTopComponent.busyLabel.text=Se re\u00EEmprosp\u0103teaz\u0103... +PreviewSettingsTopComponent.saveButton.toolTipText=Salveaz\u0103 presetare +PreviewSettingsTopComponent.ratioLabel.text=0 +PreviewSettingsTopComponent.labelRatio.text=Raport de previzualizare: +PreviewSettingsTopComponent.refreshButton.text=Re\u00EEmprosp\u0103tare +PreviewSettingsTopComponent.ratio.minimum=Minim +PreviewSettingsTopComponent.labelPreset.text=Preset\u0103ri +PreviewSettingsTopComponent.propertySheetTab=Set\u0103ri +RendererManager.description2=\u00CEn mod normal acest lucru nu este necesar dec\u00E2t dac\u0103 lista de pluginuri de randare este foarte lung\u0103. +PreviewNode.displayName=Set\u0103ri de previzualizare +PreviewSettingsTopComponent.savePreset.input.title=Presetare +PreviewSettingsTopComponent.rendererManagerTab=Gestioneaz\u0103 rand\u0103rile +PreviewTopComponent.resetZoomButton.text=Reseteaz\u0103 zoom +PreviewTopComponent.minusButton.toolTipText=Mai pu\u021Bin zoom +CTL_PreviewSettingsTopComponent=Set\u0103ri de previzualizare +PreviewSettingsTopComponent.svgExportButton.text=SVG/PDF/PNG +PreviewSettingsTopComponent.savePreset.input=Nume +PreviewSettingsTopComponent.savePreset.status=Presetarea {0} a fost salvat\u0103 +PreviewTopComponent.backgroundButton.text=Fundal +PreviewSettingsTopComponent.labelExport.text=Export\u0103: +PreviewSettingsTopComponent.svgExportButton.toolTipText=Export\u0103 ca SVG \u00EEn format PDF +RendererManager.selectAllButton.text=Selecteaz\u0103 tot +PreviewTopComponent.plusButton.toolTipText=Mai mult zoom +RendererManager.unselectAllButon.text=Deselecteaz\u0103 tot +RendererManager.restoreOrderButton.text=Restabile\u0219te ordinea rand\u0103rilor +RendererManager.description1=Permite activarea/dezactivarea rand\u0103rilor \u00EEn previzualizare \u0219i configurarea ordinii lor de execu\u021Bie. diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_ru.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_ru.properties index c04a731ab8..b462bb6068 100644 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_ru.properties +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_ru.properties @@ -1,77 +1,39 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-14 06\:31+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -CTL_PreviewAction=\u041f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 - -CTL_PreviewSettingsAction=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 - -CTL_PreviewSettingsTopComponent=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 - -CTL_PreviewTopComponent=\u041f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 - -HINT_PreviewSettingsTopComponent=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 - -HINT_PreviewTopComponent=\u041f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 - -OpenIDE-Module-Short-Description=\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0438 \u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a - -GenericColorizerPanel.CustomColorRadioButton.text=\u0420\u0443\u0447\u043d\u043e\u0439 \u0432\u044b\u0431\u043e\u0440 \u0446\u0432\u0435\u0442\u0430 - -PreviewNode.displayName=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 - -PreviewSettingsTopComponent.savePreset.input=\u0418\u043c\u044f - -PreviewSettingsTopComponent.savePreset.input.title=\u041d\u0430\u0431\u043e\u0440 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a - -PreviewSettingsTopComponent.savePreset.status=\u041d\u0430\u0431\u043e\u0440 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a {0} \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d - -PreviewTopComponent.bannerLabel.text=\u0420\u0430\u0431\u043e\u0447\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u0431\u044b\u043b\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0430. \u0425\u043e\u0442\u0438\u0442\u0435 \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u044c \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430? - -PreviewTopComponent.refreshButton.text=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c - -PreviewTopComponent.busyLabel.text=\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435... - -PreviewSettingsTopComponent.saveButton.toolTipText=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a - -PreviewSettingsTopComponent.ratioLabel.text=0 - -PreviewSettingsTopComponent.labelRatio.text=\u0414\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430\: - -PreviewSettingsTopComponent.refreshButton.text=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c - -PreviewSettingsTopComponent.labelPreset.text=\u041d\u0430\u0431\u043e\u0440\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a - -PreviewSettingsTopComponent.ratio.minimum=\u041c\u0438\u043d\u0438\u043c\u0443\u043c - -PreviewSettingsTopComponent.propertySheetTab=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 - -PreviewSettingsTopComponent.rendererManagerTab=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0449\u0438\u043a\u0430\u043c\u0438 - -PreviewTopComponent.backgroundButton.text=\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430 - -PreviewTopComponent.resetZoomButton.text=\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043c\u0430\u0441\u0448\u0442\u0430\u0431 - -PreviewSettingsTopComponent.svgExportButton.text=SVG/PDF/PNG - -PreviewSettingsTopComponent.labelExport.text=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\: - -PreviewSettingsTopComponent.svgExportButton.toolTipText=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 SVG \u0438\u043b\u0438 PDF - -PreviewTopComponent.plusButton.toolTipText=\u041f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c - -PreviewTopComponent.minusButton.toolTipText=\u041e\u0442\u0434\u0430\u043b\u0438\u0442\u044c - -RendererManager.selectAllButton.text=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435 - -RendererManager.unselectAllButon.text=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0432\u044b\u0431\u043e\u0440 - -RendererManager.restoreOrderButton.text=\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0449\u0438\u043a\u043e\u0432 - -RendererManager.description1=\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c/\u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0449\u0438\u043a\u0438 \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c \u0438\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. - -RendererManager.description2=\u0414\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u0430\u0434\u0441\u0442\u0440\u043e\u0435\u043a \u0441 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0449\u0438\u043a\u0430\u043c\u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0432\u044b\u0440\u043e\u0441. +CTL_PreviewAction=\u041f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 +CTL_PreviewSettingsAction=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 +CTL_PreviewSettingsTopComponent=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 +CTL_PreviewTopComponent=\u041f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 +!HINT_PreviewSettingsTopComponent=Preview Settings +!HINT_PreviewTopComponent=Preview +OpenIDE-Module-Short-Description=\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0438 \u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a + +GenericColorizerPanel.CustomColorRadioButton.text=\u0420\u0443\u0447\u043d\u043e\u0439 \u0432\u044b\u0431\u043e\u0440 \u0446\u0432\u0435\u0442\u0430 + +PreviewNode.displayName = \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 + +PreviewSettingsTopComponent.savePreset.input = \u0418\u043c\u044f +PreviewSettingsTopComponent.savePreset.input.title = \u041d\u0430\u0431\u043e\u0440 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a +PreviewSettingsTopComponent.savePreset.status = \u041d\u0430\u0431\u043e\u0440 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a {0} \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d +PreviewTopComponent.busyLabel.text=\u041e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435... +PreviewSettingsTopComponent.box.text= +PreviewSettingsTopComponent.saveButton.toolTipText=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a +PreviewSettingsTopComponent.saveButton.text= +PreviewSettingsTopComponent.ratioLabel.text=0 +PreviewSettingsTopComponent.labelRatio.text=\u0414\u0435\u0442\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430: +PreviewSettingsTopComponent.refreshButton.text=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c +PreviewSettingsTopComponent.labelPreset.text=\u041d\u0430\u0431\u043e\u0440\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a +PreviewSettingsTopComponent.ratio.minimum = \u041c\u0438\u043d\u0438\u043c\u0443\u043c +PreviewSettingsTopComponent.propertySheetTab = \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 +PreviewSettingsTopComponent.rendererManagerTab = \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0449\u0438\u043a\u0430\u043c\u0438 +PreviewTopComponent.backgroundButton.text=\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430 +PreviewTopComponent.resetZoomButton.text=\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043c\u0430\u0441\u0448\u0442\u0430\u0431 +PreviewSettingsTopComponent.svgExportButton.text=SVG/PDF/PNG +PreviewSettingsTopComponent.labelExport.text=\u042d\u043a\u0441\u043f\u043e\u0440\u0442: +PreviewSettingsTopComponent.svgExportButton.toolTipText=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 SVG \u0438\u043b\u0438 PDF +PreviewTopComponent.plusButton.toolTipText=\u041f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c +PreviewTopComponent.minusButton.toolTipText=\u041e\u0442\u0434\u0430\u043b\u0438\u0442\u044c +RendererManager.selectAllButton.text=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0435 +RendererManager.unselectAllButon.text=\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0432\u044b\u0431\u043e\u0440 +RendererManager.restoreOrderButton.text=\u0412\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0449\u0438\u043a\u043e\u0432 +RendererManager.infoLabel.text= +RendererManager.description1=\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c/\u0432\u044b\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0449\u0438\u043a\u0438 \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u0440\u044f\u0434\u043a\u043e\u043c \u0438\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. +RendererManager.description2=\u0414\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u043a\u043e\u0433\u0434\u0430 \u0441\u043f\u0438\u0441\u043e\u043a \u043d\u0430\u0434\u0441\u0442\u0440\u043e\u0435\u043a \u0441 \u043e\u0442\u0440\u0438\u0441\u043e\u0432\u0449\u0438\u043a\u0430\u043c\u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0432\u044b\u0440\u043e\u0441. diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_th.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_tr.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_tr.properties new file mode 100644 index 0000000000..4f052c59f2 --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_tr.properties @@ -0,0 +1,36 @@ +CTL_PreviewAction=Preview +CTL_PreviewSettingsAction=Preview Settings +CTL_PreviewSettingsTopComponent=Preview Settings +CTL_PreviewTopComponent=Preview +!HINT_PreviewSettingsTopComponent=Preview Settings +!HINT_PreviewTopComponent=Preview +OpenIDE-Module-Short-Description=Preview and Preview settings components +GenericColorizerPanel.CustomColorRadioButton.text=Custom Color +PreviewNode.displayName=Preview Settings +PreviewSettingsTopComponent.savePreset.input=Name +PreviewSettingsTopComponent.savePreset.input.title=Preset +PreviewSettingsTopComponent.savePreset.status=Preset {0} saved +PreviewTopComponent.busyLabel.text=Refreshing... +PreviewSettingsTopComponent.box.text= +PreviewSettingsTopComponent.saveButton.toolTipText=Save preset +PreviewSettingsTopComponent.saveButton.text= +PreviewSettingsTopComponent.ratioLabel.text=0 +PreviewSettingsTopComponent.labelRatio.text=Preview ratio: +PreviewSettingsTopComponent.refreshButton.text=Refresh +PreviewSettingsTopComponent.labelPreset.text=Φn ayarlar +PreviewSettingsTopComponent.ratio.minimum=Minimum +PreviewSettingsTopComponent.propertySheetTab=Settings +PreviewSettingsTopComponent.rendererManagerTab=Manage renderers +PreviewTopComponent.backgroundButton.text=Background +PreviewTopComponent.resetZoomButton.text=Reset zoom +PreviewSettingsTopComponent.svgExportButton.text=SVG/PDF/PNG +PreviewSettingsTopComponent.labelExport.text=Export: +PreviewSettingsTopComponent.svgExportButton.toolTipText=Export as SVG of PDF format +PreviewTopComponent.plusButton.toolTipText=More zoom +PreviewTopComponent.minusButton.toolTipText=Less zoom +RendererManager.selectAllButton.text=Select All +RendererManager.unselectAllButon.text=Unselect All +RendererManager.restoreOrderButton.text=Restore renderers order +RendererManager.infoLabel.text= +RendererManager.description1=Allows you to enable/disable preview renderers and configure their order of execution. +RendererManager.description2=Normally you should not need to do this unless your list of plugin renderers is very long. diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_uk.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_uk.properties new file mode 100644 index 0000000000..c716eb3721 --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_uk.properties @@ -0,0 +1,42 @@ +CTL_PreviewSettingsAction=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u043F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u044C\u043E\u0433\u043E \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u0434\u0443 +CTL_PreviewSettingsTopComponent=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u043F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u044C\u043E\u0433\u043E \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u0434\u0443 +RendererManager.unselectAllButon.text=\u0421\u043A\u0430\u0441\u0443\u0432\u0430\u0442\u0438 \u0432\u0438\u0431\u0456\u0440 \u0443\u0441\u0456\u0445 +GenericColorizerPanel.CustomColorRadioButton.text=\u0421\u043F\u0435\u0446\u0456\u0430\u043B\u044C\u043D\u0438\u0439 \u043A\u043E\u043B\u0456\u0440 +PreviewSettingsTopComponent.labelRatio.text=\u041A\u043E\u0435\u0444\u0456\u0446\u0456\u0454\u043D\u0442 \u043F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u044C\u043E\u0433\u043E \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u0434\u0443: +CTL_PreviewAction=\u041F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u0456\u0439 \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u0434 +PreviewSettingsTopComponent.svgExportButton.text=SVG/PDF/PNG +PreviewSettingsTopComponent.box.text=\u0406 +PreviewSettingsTopComponent.refreshButton.text=\u041E\u043D\u043E\u0432\u0438\u0442\u0438 +PreviewSettingsTopComponent.labelPreset.text=\u041F\u0440\u0435\u0434\u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043A\u0438 +RendererManager.restoreOrderButton.text=\u0412\u0456\u0434\u043D\u043E\u0432\u0438\u0442\u0438 \u043F\u043E\u0440\u044F\u0434\u043E\u043A \u0440\u0435\u043D\u0434\u0435\u0440\u0456\u0432 +PreviewSettingsTopComponent.saveButton.toolTipText=\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u043F\u0440\u0435\u0441\u0435\u0442 +RendererManager.description1=\u0414\u043E\u0437\u0432\u043E\u043B\u044F\u0454 \u0432\u043C\u0438\u043A\u0430\u0442\u0438/\u0432\u0438\u043C\u0438\u043A\u0430\u0442\u0438 \u0440\u0435\u043D\u0434\u0435\u0440\u0435\u0440\u0438 \u043F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u044C\u043E\u0433\u043E \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u0434\u0443 \u0442\u0430 \u043D\u0430\u043B\u0430\u0448\u0442\u043E\u0432\u0443\u0432\u0430\u0442\u0438 \u0457\u0445 \u043F\u043E\u0440\u044F\u0434\u043E\u043A \u0432\u0438\u043A\u043E\u043D\u0430\u043D\u043D\u044F. +CTL_PreviewTopComponent=\u041F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u0456\u0439 \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u0434 +PreviewSettingsTopComponent.savePreset.input=\u0406\u043C'\u044F +PreviewSettingsTopComponent.savePresetReplace.text=\u0421\u0442\u0438\u043B\u0456 \u0437 \u0442\u0430\u043A\u043E\u044E \u043D\u0430\u0437\u0432\u043E\u044E \u0432\u0436\u0435 \u0456\u0441\u043D\u0443\u044E\u0442\u044C. \u0412\u0438 \u0445\u043E\u0447\u0435\u0442\u0435 \u0439\u043E\u0433\u043E \u0437\u0430\u043C\u0456\u043D\u0438\u0442\u0438? +PreviewSettingsTopComponent.savePresetReplace.title=\u041F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u0454 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u0456\u0441\u043D\u0443\u0454 +PreviewTopComponent.busyLabel.text=\u041E\u0441\u0432\u0456\u0436\u0430\u044E\u0447\u0438\u0439... +PreviewSettingsTopComponent.propertySheetTab=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F +PreviewSettingsTopComponent.rendererManagerTab=\u041A\u0435\u0440\u0443\u0439\u0442\u0435 \u0440\u0435\u043D\u0434\u0435\u0440\u0435\u0440\u0430\u043C\u0438 +PreviewTopComponent.backgroundButton.text=\u0424\u043E\u043D +PreviewTopComponent.minusButton.toolTipText=\u041C\u0435\u043D\u0448\u0435 \u043C\u0430\u0441\u0448\u0442\u0430\u0431\u0443\u0432\u0430\u043D\u043D\u044F +RendererManager.selectAllButton.text=\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044C \u0443\u0441\u0456 +RendererManager.infoLabel.text=\u0406 +RendererManager.description2=\u0417\u0430\u0437\u0432\u0438\u0447\u0430\u0439 \u0432\u0430\u043C \u043D\u0435 \u043F\u043E\u0442\u0440\u0456\u0431\u043D\u043E \u0446\u044C\u043E\u0433\u043E \u0440\u043E\u0431\u0438\u0442\u0438, \u044F\u043A\u0449\u043E \u0432\u0430\u0448 \u0441\u043F\u0438\u0441\u043E\u043A \u043F\u043B\u0430\u0433\u0456\u043D\u0456\u0432 \u043D\u0435 \u0434\u0443\u0436\u0435 \u0434\u043E\u0432\u0433\u0438\u0439. +PreviewTopComponent.globalCanvasSizeButton.toolTipText=\u0412\u0441\u0442\u0430\u043D\u043E\u0432\u0456\u0442\u044C \u043C\u0435\u0436\u0456 \u043F\u043E\u043B\u043E\u0442\u043D\u0430 \u043D\u0430 \u043E\u0441\u043D\u043E\u0432\u0456 \u043F\u043E\u0432\u043D\u043E\u0433\u043E \u0433\u0440\u0430\u0444\u0456\u043A\u0430, \u0437\u0430 \u0437\u0430\u043C\u043E\u0432\u0447\u0443\u0432\u0430\u043D\u043D\u044F\u043C \u2013 \u043B\u0438\u0448\u0435 \u0432\u0438\u0434\u0438\u043C\u0438\u0439 \u0433\u0440\u0430\u0444\u0456\u043A +PreviewSettingsTopComponent.removePreset.text=\u0412\u0438 \u0432\u043F\u0435\u0432\u043D\u0435\u043D\u0456, \u0449\u043E \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0432\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u0441\u0442\u0438\u043B\u044C {0}? +PreviewSettingsTopComponent.removePreset.title=\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u043F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u0456 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F +PreviewSettingsTopComponent.removePreset.status=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F {0} \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043E +PreviewNode.displayName=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u043F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u044C\u043E\u0433\u043E \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u0434\u0443 +OpenIDE-Module-Short-Description=\u041A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0438 Preview \u0456 Preview settings +PreviewSettingsTopComponent.savePreset.input.title=\u041F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u0454 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F +PreviewSettingsTopComponent.savePreset.status=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F {0} \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043D\u043E +PreviewSettingsTopComponent.saveButton.text=\u0406 +PreviewSettingsTopComponent.ratio.minimum=\u041C\u0456\u043D\u0456\u043C\u0443\u043C +PreviewSettingsTopComponent.ratioLabel.text=0 +PreviewTopComponent.plusButton.toolTipText=\u0411\u0456\u043B\u044C\u0448\u0435 \u0437\u0431\u0456\u043B\u044C\u0448\u0435\u043D\u043D\u044F +PreviewTopComponent.resetZoomButton.text=\u0421\u043A\u0438\u043D\u0443\u0442\u0438 \u043C\u0430\u0441\u0448\u0442\u0430\u0431 +PreviewSettingsTopComponent.labelExport.text=\u0415\u043A\u0441\u043F\u043E\u0440\u0442: +PreviewSettingsTopComponent.removeButton.toolTipText=\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u043F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u0456 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F +PreviewSettingsTopComponent.svgExportButton.toolTipText=\u0415\u043A\u0441\u043F\u043E\u0440\u0442\u0443\u0432\u0430\u0442\u0438 \u044F\u043A SVG \u0443 \u0444\u043E\u0440\u043C\u0430\u0442 PDF +PreviewSettingsTopComponent.removeButton.text=\u0406 diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_zh_CN.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_zh_CN.properties index 97ef95526c..0b144f1a01 100644 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_zh_CN.properties +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_zh_CN.properties @@ -1,77 +1,36 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-15 09\:26+0000\nLast-Translator\: Xi-Nian Zuo \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - CTL_PreviewAction=\u9884\u89c8 - CTL_PreviewSettingsAction=\u9884\u89c8\u8bbe\u7f6e - CTL_PreviewSettingsTopComponent=\u9884\u89c8\u8bbe\u7f6e - CTL_PreviewTopComponent=\u9884\u89c8 - -HINT_PreviewSettingsTopComponent=\u9884\u89c8\u8bbe\u7f6e - -HINT_PreviewTopComponent=\u9884\u89c8 - +!HINT_PreviewSettingsTopComponent=Preview Settings +!HINT_PreviewTopComponent=Preview OpenIDE-Module-Short-Description=\u9884\u89c8\u548c\u9884\u89c8\u8bbe\u7f6e\u6210\u5206 - GenericColorizerPanel.CustomColorRadioButton.text=\u81ea\u5b9a\u4e49\u989c\u8272 - PreviewNode.displayName=\u9884\u89c8\u8bbe\u7f6e - PreviewSettingsTopComponent.savePreset.input=\u547d\u540d - PreviewSettingsTopComponent.savePreset.input.title=\u9884\u8bbe - PreviewSettingsTopComponent.savePreset.status=\u9884\u8bbe{0}\u4fdd\u5b58 - -PreviewTopComponent.bannerLabel.text=\u5df2\u66f4\u65b0\u5de5\u4f5c\u95f4\u3002\u60f3\u66f4\u65b0\u9884\u89c8\u5417\uff1f - -PreviewTopComponent.refreshButton.text=\u66f4\u65b0 - PreviewTopComponent.busyLabel.text=\u6b63\u5728\u66f4\u65b0\u2026\u2026 - +PreviewSettingsTopComponent.box.text= PreviewSettingsTopComponent.saveButton.toolTipText=\u4fdd\u5b58\u9884\u8bbe - +PreviewSettingsTopComponent.saveButton.text= PreviewSettingsTopComponent.ratioLabel.text=0 - PreviewSettingsTopComponent.labelRatio.text=\u9884\u89c8\u6bd4\u4f8b\uff1a - PreviewSettingsTopComponent.refreshButton.text=\u5237\u65b0 - PreviewSettingsTopComponent.labelPreset.text=\u9884\u8bbe\u7f6e - PreviewSettingsTopComponent.ratio.minimum=\u6700\u5c0f\u503c - PreviewSettingsTopComponent.propertySheetTab=\u8bbe\u7f6e - PreviewSettingsTopComponent.rendererManagerTab=\u7ba1\u7406\u6e32\u67d3\u5668 - PreviewTopComponent.backgroundButton.text=\u80cc\u666f - PreviewTopComponent.resetZoomButton.text=\u9884\u8bbe\u7f29\u653e - PreviewSettingsTopComponent.svgExportButton.text=SVG/PDF/PNG - -PreviewSettingsTopComponent.labelExport.text=\u8f93\u51fa - +PreviewSettingsTopComponent.labelExport.text=\u5BFC\u51FA\uFF1A PreviewSettingsTopComponent.svgExportButton.toolTipText=\u8f93\u51fa\u4e3aPDF\u683c\u5f0f\u7684SVG - PreviewTopComponent.plusButton.toolTipText=\u653e\u5927 - PreviewTopComponent.minusButton.toolTipText=\u7f29\u5c0f - RendererManager.selectAllButton.text=\u5168\u9009 - RendererManager.unselectAllButon.text=\u64a4\u9500\u5168\u9009 - RendererManager.restoreOrderButton.text=\u6062\u590d\u6e32\u67d3\u5668\u987a\u5e8f - -RendererManager.description1=\u5141\u8bb8\u4f60\u5f00\u542f/\u5173\u95ed\u9884\u89c8\u6e32\u67d3\u5668\u548c\u914d\u7f6e\u4ed6\u4eec\u7684\u6267\u884c\u987a\u5e8f - -RendererManager.description2=\u901a\u5e38\u4e0d\u9700\u8981\u8fd9\u4e2a\u9664\u975e\u4f60\u6e32\u67d3\u5668\u63d2\u4ef6\u7279\u522b\u7684\u591a +RendererManager.infoLabel.text= +RendererManager.description1=\u5141\u8BB8\u4F60\u5F00\u542F/\u5173\u95ED\u9884\u89C8\u6E32\u67D3\u5668\u5E76\u914D\u7F6E\u5B83\u4EEC\u7684\u6267\u884C\u987A\u5E8F\u3002 +RendererManager.description2=\u901A\u5E38\u4F60\u4E0D\u9700\u8981\u8FD9\u4E48\u505A\uFF0C\u9664\u975E\u4F60\u7684\u63D2\u4EF6\u6E32\u67D3\u5668\u5217\u8868\u5F88\u957F\u3002 diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_zh_TW.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_zh_TW.properties new file mode 100644 index 0000000000..0573cb5a84 --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/Bundle_zh_TW.properties @@ -0,0 +1,36 @@ +CTL_PreviewAction=Preview +CTL_PreviewSettingsAction=Preview Settings +CTL_PreviewSettingsTopComponent=Preview Settings +CTL_PreviewTopComponent=Preview +!HINT_PreviewSettingsTopComponent=Preview Settings +!HINT_PreviewTopComponent=Preview +OpenIDE-Module-Short-Description=Preview and Preview settings components +GenericColorizerPanel.CustomColorRadioButton.text=Custom Color +PreviewNode.displayName=Preview Settings +PreviewSettingsTopComponent.savePreset.input=Name +PreviewSettingsTopComponent.savePreset.input.title=Preset +PreviewSettingsTopComponent.savePreset.status=Preset {0} saved +PreviewTopComponent.busyLabel.text=Refreshing... +PreviewSettingsTopComponent.box.text= +PreviewSettingsTopComponent.saveButton.toolTipText=Save preset +PreviewSettingsTopComponent.saveButton.text= +PreviewSettingsTopComponent.ratioLabel.text=0 +PreviewSettingsTopComponent.labelRatio.text=Preview ratio: +PreviewSettingsTopComponent.refreshButton.text=\u66f4\u65b0 +PreviewSettingsTopComponent.labelPreset.text=Presets +PreviewSettingsTopComponent.ratio.minimum=Minimum +PreviewSettingsTopComponent.propertySheetTab=Settings +PreviewSettingsTopComponent.rendererManagerTab=Manage renderers +PreviewTopComponent.backgroundButton.text=Background +PreviewTopComponent.resetZoomButton.text=Reset zoom +PreviewSettingsTopComponent.svgExportButton.text=SVG/PDF/PNG +PreviewSettingsTopComponent.labelExport.text=Export: +PreviewSettingsTopComponent.svgExportButton.toolTipText=Export as SVG of PDF format +PreviewTopComponent.plusButton.toolTipText=More zoom +PreviewTopComponent.minusButton.toolTipText=Less zoom +RendererManager.selectAllButton.text=Select All +RendererManager.unselectAllButon.text=Unselect All +RendererManager.restoreOrderButton.text=Restore renderers order +RendererManager.infoLabel.text= +RendererManager.description1=Allows you to enable/disable preview renderers and configure their order of execution. +RendererManager.description2=Normally you should not need to do this unless your list of plugin renderers is very long. diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/cs.po b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/cs.po deleted file mode 100644 index 72ee890ee7..0000000000 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/cs.po +++ /dev/null @@ -1,124 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-12 13:00+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "CTL_PreviewAction" -msgstr "NΓ‘hled" - -msgid "CTL_PreviewSettingsAction" -msgstr "NastavenΓ­ nΓ‘hledu" - -msgid "CTL_PreviewSettingsTopComponent" -msgstr "NastavenΓ­ nΓ‘hledu" - -msgid "CTL_PreviewTopComponent" -msgstr "NΓ‘hled" - -msgid "HINT_PreviewSettingsTopComponent" -msgstr "NastavenΓ­ nΓ‘hledu" - -msgid "HINT_PreviewTopComponent" -msgstr "NΓ‘hled" - -msgid "OpenIDE-Module-Short-Description" -msgstr "NΓ‘hled a čÑsti nastavenΓ­ nΓ‘hledu" - -msgid "GenericColorizerPanel.CustomColorRadioButton.text" -msgstr "VlastnΓ­ barva" - -msgid "PreviewNode.displayName" -msgstr "NastavenΓ­ nΓ‘hledu" - -msgid "PreviewSettingsTopComponent.savePreset.input" -msgstr "NΓ‘zev" - -msgid "PreviewSettingsTopComponent.savePreset.input.title" -msgstr "PΕ™edvolba" - -msgid "PreviewSettingsTopComponent.savePreset.status" -msgstr "PΕ™edvolba {0} uloΕΎena" - -msgid "PreviewTopComponent.bannerLabel.text" -msgstr "PracovnΓ­ prostor byl aktualizovΓ‘n. Chcete nΓ‘hled obnovit?" - -msgid "PreviewTopComponent.refreshButton.text" -msgstr "Obnovit" - -msgid "PreviewTopComponent.busyLabel.text" -msgstr "ObnovovΓ‘nΓ­..." - -msgid "PreviewSettingsTopComponent.saveButton.toolTipText" -msgstr "UloΕΎit pΕ™edvolbu" - -msgid "PreviewSettingsTopComponent.ratioLabel.text" -msgstr "0" - -msgid "PreviewSettingsTopComponent.labelRatio.text" -msgstr "PomΔ›r nΓ‘hledu:" - -msgid "PreviewSettingsTopComponent.refreshButton.text" -msgstr "Obnovit" - -msgid "PreviewSettingsTopComponent.labelPreset.text" -msgstr "PΕ™edvolby" - -msgid "PreviewSettingsTopComponent.ratio.minimum" -msgstr "Minimum" - -msgid "PreviewSettingsTopComponent.propertySheetTab" -msgstr "NastavenΓ­" - -msgid "PreviewSettingsTopComponent.rendererManagerTab" -msgstr "Spravovat vykreslovače" - -msgid "PreviewTopComponent.backgroundButton.text" -msgstr "PozadΓ­" - -msgid "PreviewTopComponent.resetZoomButton.text" -msgstr "Resetovat pΕ™iblΓ­ΕΎenΓ­" - -msgid "PreviewSettingsTopComponent.svgExportButton.text" -msgstr "SVG/PDF/PNG" - -msgid "PreviewSettingsTopComponent.labelExport.text" -msgstr "Export:" - -msgid "PreviewSettingsTopComponent.svgExportButton.toolTipText" -msgstr "Exportovat jako formΓ‘t SVG nebo PDF" - -msgid "PreviewTopComponent.plusButton.toolTipText" -msgstr "PΕ™iblΓ­ΕΎit vΓ­ce" - -msgid "PreviewTopComponent.minusButton.toolTipText" -msgstr "PΕ™iblΓ­ΕΎit mΓ©nΔ›" - -msgid "RendererManager.selectAllButton.text" -msgstr "Označit vΕ‘e" - -msgid "RendererManager.unselectAllButon.text" -msgstr "Odznačit vΕ‘e" - -msgid "RendererManager.restoreOrderButton.text" -msgstr "Obnovit poΕ™adΓ­ vykreslovačů" - -msgid "RendererManager.description1" -msgstr "Umožňure VΓ‘m povolit/zakΓ‘zat vykreslovače nΓ‘hledu a nastavit jejich poΕ™adΓ­ spuΕ‘tΔ›nΓ­." - -msgid "RendererManager.description2" -msgstr "Toto byste normΓ‘lnΔ› nemuseli provΓ©st, pokud VΓ‘Ε‘ seznam zΓ‘suvnΓ½ch modulΕ― nenΓ­ velmi dlouhΓ½." diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/es.po b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/es.po deleted file mode 100644 index 92c0caaa51..0000000000 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/es.po +++ /dev/null @@ -1,125 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011, 2012. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-10 22:04+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "CTL_PreviewAction" -msgstr "PrevisualizaciΓ³n" - -msgid "CTL_PreviewSettingsAction" -msgstr "ConfiguraciΓ³n de previsualizaciΓ³n" - -msgid "CTL_PreviewSettingsTopComponent" -msgstr "ConfiguraciΓ³n de previsualizaciΓ³n" - -msgid "CTL_PreviewTopComponent" -msgstr "PrevisualizaciΓ³n" - -msgid "HINT_PreviewSettingsTopComponent" -msgstr "ConfiguraciΓ³n de previsualizaciΓ³n" - -msgid "HINT_PreviewTopComponent" -msgstr "PrevisualizaciΓ³n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Componentes de previsualizaciΓ³n y su configuraciΓ³n" - -msgid "GenericColorizerPanel.CustomColorRadioButton.text" -msgstr "Color personalizado" - -msgid "PreviewNode.displayName" -msgstr "ParΓ‘metros de previsualizaciΓ³n" - -msgid "PreviewSettingsTopComponent.savePreset.input" -msgstr "Nombre" - -msgid "PreviewSettingsTopComponent.savePreset.input.title" -msgstr "ConfiguraciΓ³n predefinida" - -msgid "PreviewSettingsTopComponent.savePreset.status" -msgstr "ConfiguraciΓ³n predefinida {0} guardada" - -msgid "PreviewTopComponent.bannerLabel.text" -msgstr "El espacio de trabajo ha sido actualizado. ΒΏQuieres refrescar la previsualizaciΓ³n?" - -msgid "PreviewTopComponent.refreshButton.text" -msgstr "Refrescar" - -msgid "PreviewTopComponent.busyLabel.text" -msgstr "Refrescando..." - -msgid "PreviewSettingsTopComponent.saveButton.toolTipText" -msgstr "Guardar configuraciΓ³n predefinida" - -msgid "PreviewSettingsTopComponent.ratioLabel.text" -msgstr "0" - -msgid "PreviewSettingsTopComponent.labelRatio.text" -msgstr "ProporciΓ³n de previsualizaciΓ³n:" - -msgid "PreviewSettingsTopComponent.refreshButton.text" -msgstr "Refrescar" - -msgid "PreviewSettingsTopComponent.labelPreset.text" -msgstr "Configuraciones predefinidas" - -msgid "PreviewSettingsTopComponent.ratio.minimum" -msgstr "MΓ­nimo" - -msgid "PreviewSettingsTopComponent.propertySheetTab" -msgstr "ParΓ‘metros" - -msgid "PreviewSettingsTopComponent.rendererManagerTab" -msgstr "Gestionar renderers" - -msgid "PreviewTopComponent.backgroundButton.text" -msgstr "Fondo" - -msgid "PreviewTopComponent.resetZoomButton.text" -msgstr "Restaurar zoom" - -msgid "PreviewSettingsTopComponent.svgExportButton.text" -msgstr "SVG/PDF/PNG" - -msgid "PreviewSettingsTopComponent.labelExport.text" -msgstr "Exportar:" - -msgid "PreviewSettingsTopComponent.svgExportButton.toolTipText" -msgstr "Exportar como formato SVG o PDF" - -msgid "PreviewTopComponent.plusButton.toolTipText" -msgstr "Acercar" - -msgid "PreviewTopComponent.minusButton.toolTipText" -msgstr "Alejar" - -msgid "RendererManager.selectAllButton.text" -msgstr "Marcar todos" - -msgid "RendererManager.unselectAllButon.text" -msgstr "Desmarcar todos" - -msgid "RendererManager.restoreOrderButton.text" -msgstr "Restaurar orden de los renderers" - -msgid "RendererManager.description1" -msgstr "Permite activar/desactivar renderers de previsualizaciΓ³n y configurar su orden de ejecuciΓ³n." - -msgid "RendererManager.description2" -msgstr "Normalmente no deberΓ­a ser necesario hacer esto a no ser que tu lista de plugins de renderers de previsualizaciΓ³n sea muy larga. " diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/fr.po b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/fr.po deleted file mode 100644 index b9a7bf4b91..0000000000 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/fr.po +++ /dev/null @@ -1,125 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-15 13:56+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "CTL_PreviewAction" -msgstr "AperΓ§u" - -msgid "CTL_PreviewSettingsAction" -msgstr "ParamΓ¨tres d'aperΓ§u" - -msgid "CTL_PreviewSettingsTopComponent" -msgstr "ParamΓ¨tres d'aperΓ§u" - -msgid "CTL_PreviewTopComponent" -msgstr "AperΓ§u" - -msgid "HINT_PreviewSettingsTopComponent" -msgstr "ParamΓ¨tres d'aperΓ§u" - -msgid "HINT_PreviewTopComponent" -msgstr "AperΓ§u" - -msgid "OpenIDE-Module-Short-Description" -msgstr "AperΓ§u et paramΓ©trages" - -msgid "GenericColorizerPanel.CustomColorRadioButton.text" -msgstr "Couleur personnalisΓ©e" - -msgid "PreviewNode.displayName" -msgstr "ParamΓ¨tres d'aperΓ§u" - -msgid "PreviewSettingsTopComponent.savePreset.input" -msgstr "Nom" - -msgid "PreviewSettingsTopComponent.savePreset.input.title" -msgstr "RΓ©glages" - -msgid "PreviewSettingsTopComponent.savePreset.status" -msgstr "RΓ©glages {0} enregistrΓ©s" - -msgid "PreviewTopComponent.bannerLabel.text" -msgstr "Espace de travail mis Γ  jour. RafraΓchir la prΓ©visualisation ?" - -msgid "PreviewTopComponent.refreshButton.text" -msgstr "RafraΓchir" - -msgid "PreviewTopComponent.busyLabel.text" -msgstr "RafraΓchissement en cours..." - -msgid "PreviewSettingsTopComponent.saveButton.toolTipText" -msgstr "Enregistrer les rΓ©glages" - -msgid "PreviewSettingsTopComponent.ratioLabel.text" -msgstr "0" - -msgid "PreviewSettingsTopComponent.labelRatio.text" -msgstr "Ratio :" - -msgid "PreviewSettingsTopComponent.refreshButton.text" -msgstr "RafraΓchir" - -msgid "PreviewSettingsTopComponent.labelPreset.text" -msgstr "RΓ©glages" - -msgid "PreviewSettingsTopComponent.ratio.minimum" -msgstr "Minimum" - -msgid "PreviewSettingsTopComponent.propertySheetTab" -msgstr "ParamΓ¨tres" - -msgid "PreviewSettingsTopComponent.rendererManagerTab" -msgstr "GΓ©rer les renderers" - -msgid "PreviewTopComponent.backgroundButton.text" -msgstr "ArriΓ¨re-plan" - -msgid "PreviewTopComponent.resetZoomButton.text" -msgstr "RΓ©initialiser le zoom" - -msgid "PreviewSettingsTopComponent.svgExportButton.text" -msgstr "SVG/PDF/PNG" - -msgid "PreviewSettingsTopComponent.labelExport.text" -msgstr "Export :" - -msgid "PreviewSettingsTopComponent.svgExportButton.toolTipText" -msgstr "Exporter au format SVG, PNG ou PDF" - -msgid "PreviewTopComponent.plusButton.toolTipText" -msgstr "Plus de zoom" - -msgid "PreviewTopComponent.minusButton.toolTipText" -msgstr "Moins de zoom" - -msgid "RendererManager.selectAllButton.text" -msgstr "Tout sΓ©lectionner" - -msgid "RendererManager.unselectAllButon.text" -msgstr "Tout dΓ©sΓ©lectionner" - -msgid "RendererManager.restoreOrderButton.text" -msgstr "Restaurer l'ordre des renderers" - -msgid "RendererManager.description1" -msgstr "Autorise l'activation/dΓ©sactivation de la prΓ©visualisation et configure leur ordre d'exΓ©cute." - -msgid "RendererManager.description2" -msgstr "Vous de devriez rien changer normalement Γ  moins que votre liste soit trΓ¨s longue." diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/ja.po b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/ja.po deleted file mode 100644 index 45317b9267..0000000000 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/ja.po +++ /dev/null @@ -1,124 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-15 09:18+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "CTL_PreviewAction" -msgstr "プレビγƒ₯γƒΌ" - -msgid "CTL_PreviewSettingsAction" -msgstr "プレビγƒ₯γƒΌθ¨­εš" - -msgid "CTL_PreviewSettingsTopComponent" -msgstr "プレビγƒ₯γƒΌθ¨­εš" - -msgid "CTL_PreviewTopComponent" -msgstr "プレビγƒ₯γƒΌ" - -msgid "HINT_PreviewSettingsTopComponent" -msgstr "プレビγƒ₯γƒΌθ¨­εš" - -msgid "HINT_PreviewTopComponent" -msgstr "プレビγƒ₯γƒΌ" - -msgid "OpenIDE-Module-Short-Description" -msgstr "プレビγƒ₯γƒΌεŠγ³γƒ—γƒ¬γƒ“γƒ₯γƒΌθ¨­εšγ‚³γƒ³γƒγƒΌγƒγƒ³γƒˆ" - -msgid "GenericColorizerPanel.CustomColorRadioButton.text" -msgstr "カスタム・カラー" - -msgid "PreviewNode.displayName" -msgstr "プレビγƒ₯γƒΌθ¨­εš" - -msgid "PreviewSettingsTopComponent.savePreset.input" -msgstr "名前" - -msgid "PreviewSettingsTopComponent.savePreset.input.title" -msgstr "γƒ—γƒͺγ‚»γƒƒγƒˆ" - -msgid "PreviewSettingsTopComponent.savePreset.status" -msgstr "γƒ—γƒͺγ‚»γƒƒγƒˆ {0} 保存" - -msgid "PreviewTopComponent.bannerLabel.text" -msgstr "γƒ―γƒΌγ‚―γ‚ΉγƒšγƒΌγ‚ΉγŒζ›΄ζ–°γ•γ‚ŒγΎγ—γŸγ€‚γ‚γͺγŸγ―γ€γƒ—γƒ¬γƒ“γƒ₯γƒΌγ‚’ζ›΄ζ–°γ—γΎγ™γ‹οΌŸ" - -msgid "PreviewTopComponent.refreshButton.text" -msgstr "ζ›΄ζ–°" - -msgid "PreviewTopComponent.busyLabel.text" -msgstr "ζ›΄ζ–°δΈ­..." - -msgid "PreviewSettingsTopComponent.saveButton.toolTipText" -msgstr "γƒ—γƒͺγ‚»γƒƒγƒˆγ‚’δΏε­˜" - -msgid "PreviewSettingsTopComponent.ratioLabel.text" -msgstr "0" - -msgid "PreviewSettingsTopComponent.labelRatio.text" -msgstr "プレビγƒ₯γƒΌζ―”:" - -msgid "PreviewSettingsTopComponent.refreshButton.text" -msgstr "ζ›΄ζ–°" - -msgid "PreviewSettingsTopComponent.labelPreset.text" -msgstr "γƒ—γƒͺγ‚»γƒƒγƒˆ" - -msgid "PreviewSettingsTopComponent.ratio.minimum" -msgstr "ζœ€ε°" - -msgid "PreviewSettingsTopComponent.propertySheetTab" -msgstr "θ¨­εš" - -msgid "PreviewSettingsTopComponent.rendererManagerTab" -msgstr "レンダγƒͺγƒ³γ‚°γ‚¨γƒ³γ‚Έγƒ³γ‚’ζ“δ½œ" - -msgid "PreviewTopComponent.backgroundButton.text" -msgstr "θƒŒζ™―" - -msgid "PreviewTopComponent.resetZoomButton.text" -msgstr "ζ‹‘ε€§γ‚’γƒͺγ‚»γƒƒγƒˆ" - -msgid "PreviewSettingsTopComponent.svgExportButton.text" -msgstr "SVG/PDF/PNG" - -msgid "PreviewSettingsTopComponent.labelExport.text" -msgstr "γ‚¨γ‚―γ‚ΉγƒγƒΌγƒˆ:" - -msgid "PreviewSettingsTopComponent.svgExportButton.toolTipText" -msgstr "PDF归式γSVGγ¨γ—γ¦γ‚¨γ‚―γ‚ΉγƒγƒΌγƒˆ" - -msgid "PreviewTopComponent.plusButton.toolTipText" -msgstr "ζ‹‘ε€§" - -msgid "PreviewTopComponent.minusButton.toolTipText" -msgstr "ηΈε°" - -msgid "RendererManager.selectAllButton.text" -msgstr "γ™γΉγ¦γ‚’ιΈζŠž" - -msgid "RendererManager.unselectAllButon.text" -msgstr "γ™γΉγ¦γ‚’ιΈζŠžγθ§£ι™€" - -msgid "RendererManager.restoreOrderButton.text" -msgstr "レンダγƒͺングエンジンγε‘½δ»€γ‚’εΎ©ε…ƒ" - -msgid "RendererManager.description1" -msgstr "プレビγƒ₯ーレンダγƒͺングエンジンγζœ‰εŠΉ/η„‘εŠΉγ‚’εˆ‡γ‚Šζ›Ώγˆγ€εŸθ‘Œε‘½δ»€γθ¨­εšγ‚’可能にする。" - -msgid "RendererManager.description2" -msgstr "ι€šεΈΈγƒ—γƒ©γ‚°γ‚€γƒ³γƒ¬γƒ³γƒ€γƒͺングエンジンγγƒͺγ‚ΉγƒˆγŒγγ‚Œγ»γ©ι•·γγͺγ‘γ‚Œγ°γ€γ“γζ“δ½œγ―不要です。" diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/options/Bundle.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/options/Bundle.properties new file mode 100644 index 0000000000..2c7e6e7308 --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/options/Bundle.properties @@ -0,0 +1,4 @@ +AdvancedOption_DisplayName_Preview=Preview +AdvancedOption_Keywords_Preview=preview, preset, default +PreviewOptionsPanel.titleDefaultSettings.text=Default Settings +PreviewOptionsPanel.labelDefaultPreset.text=Default preset: \ No newline at end of file diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/options/Bundle_ar.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/options/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/options/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/options/Bundle_fr.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/options/Bundle_fr.properties new file mode 100644 index 0000000000..dc35f78edd --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/options/Bundle_fr.properties @@ -0,0 +1 @@ +AdvancedOption_DisplayName_Preview=Prιvisualisation diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/options/Bundle_th.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/options/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/options/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/org-gephi-desktop-preview.pot b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/org-gephi-desktop-preview.pot deleted file mode 100644 index 83adf522f4..0000000000 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/org-gephi-desktop-preview.pot +++ /dev/null @@ -1,127 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "CTL_PreviewAction" -msgstr "Preview" - -msgid "CTL_PreviewSettingsAction" -msgstr "Preview Settings" - -msgid "CTL_PreviewSettingsTopComponent" -msgstr "Preview Settings" - -msgid "CTL_PreviewTopComponent" -msgstr "Preview" - -#, fuzzy -msgid "HINT_PreviewSettingsTopComponent" -msgstr "Preview Settings" - -#, fuzzy -msgid "HINT_PreviewTopComponent" -msgstr "Preview" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Preview and Preview settings components" - -msgid "GenericColorizerPanel.CustomColorRadioButton.text" -msgstr "Custom Color" - -msgid "PreviewNode.displayName" -msgstr "Preview Settings" - -msgid "PreviewSettingsTopComponent.savePreset.input" -msgstr "Name" - -msgid "PreviewSettingsTopComponent.savePreset.input.title" -msgstr "Preset" - -msgid "PreviewSettingsTopComponent.savePreset.status" -msgstr "Preset {0} saved" - -msgid "PreviewTopComponent.bannerLabel.text" -msgstr "Workspace has been updated. Do you want to refresh the preview?" - -msgid "PreviewTopComponent.refreshButton.text" -msgstr "Refresh" - -msgid "PreviewTopComponent.busyLabel.text" -msgstr "Refreshing..." - -msgid "PreviewSettingsTopComponent.saveButton.toolTipText" -msgstr "Save preset" - -msgid "PreviewSettingsTopComponent.ratioLabel.text" -msgstr "0" - -msgid "PreviewSettingsTopComponent.labelRatio.text" -msgstr "Preview ratio:" - -msgid "PreviewSettingsTopComponent.refreshButton.text" -msgstr "Refresh" - -msgid "PreviewSettingsTopComponent.labelPreset.text" -msgstr "Presets" - -msgid "PreviewSettingsTopComponent.ratio.minimum" -msgstr "Minimum" - -msgid "PreviewSettingsTopComponent.propertySheetTab" -msgstr "Settings" - -msgid "PreviewSettingsTopComponent.rendererManagerTab" -msgstr "Manage renderers" - -msgid "PreviewTopComponent.backgroundButton.text" -msgstr "Background" - -msgid "PreviewTopComponent.resetZoomButton.text" -msgstr "Reset zoom" - -msgid "PreviewSettingsTopComponent.svgExportButton.text" -msgstr "SVG/PDF/PNG" - -msgid "PreviewSettingsTopComponent.labelExport.text" -msgstr "Export:" - -msgid "PreviewSettingsTopComponent.svgExportButton.toolTipText" -msgstr "Export as SVG of PDF format" - -msgid "PreviewTopComponent.plusButton.toolTipText" -msgstr "More zoom" - -msgid "PreviewTopComponent.minusButton.toolTipText" -msgstr "Less zoom" - -msgid "RendererManager.selectAllButton.text" -msgstr "Select All" - -msgid "RendererManager.unselectAllButon.text" -msgstr "Unselect All" - -msgid "RendererManager.restoreOrderButton.text" -msgstr "Restore renderers order" - -msgid "RendererManager.description1" -msgstr "" -"Allows you to enable/disable preview renderers and configure their order of " -"execution." - -msgid "RendererManager.description2" -msgstr "" -"Normally you should not need to do this unless your list of plugin renderers " -"is very long." diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle.properties index f5c0140887..07c8934ad4 100644 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle.properties +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle.properties @@ -1,23 +1,30 @@ -# To change this template, choose Tools | Templates -# and open the template in the editor. - EdgeColorPanel.jXHeader1.title=Edge Color -EdgeColorPanel.jXHeader1.description=Configures the color of the edges. Edges can either a color on their own (original) or uses incident nodes color. -EdgeColorPanel.originalRadio.text=Original +EdgeColorPanel.jXHeader1.description=Configures the color of the edges. Edges can have either a color on their own (self) or use incident nodes color. +EdgeColorPanel.originalRadio.text=Self EdgeColorPanel.mixedRadio.text=Mixed EdgeColorPanel.sourceRadio.text=Source EdgeColorPanel.targetRadio.text=Target EdgeColorPanel.customRadio.text=Custom -DependantOriginalColorPanel.jXHeader1.description=Configures the color of the label. It can have a color of it's own (original), a custom color or it's node/edge color. -DependantOriginalColorPanel.originalRadio.text=Original +DependantOriginalColorPanel.jXHeader1.description=Configures the color of the label. It can have a color of its own (self), a custom color or the node's or edge's color. +DependantOriginalColorPanel.originalRadio.text=Self DependantOriginalColorPanel.customRadio.text=Custom -# To change this template, choose Tools | Templates -# and open the template in the editor. DependantOriginalColorPanel.jXHeader1.title=Label Color DependantOriginalColorPanel.parentRadio.text=Parent DependantColorPanel.customRadio.text=Custom -# To change this template, choose Tools | Templates -# and open the template in the editor. DependantColorPanel.jXHeader1.title=Border Color -DependantColorPanel.jXHeader1.description=Configures the border color with either the color of the node or a custom color. -DependantColorPanel.parentRadio.text=Parent +DependantColorPanel.jXHeader1.description=Configures the border color with either a custom color, the node's color or a darker/lighter node color (similar to Overview) +DependantColorPanel.parentRadio.text=Node +DependantColorPanel.darkerButton.text=Node (Darker) +DependantColorPanel.lighterButton.text=Node (Lighter) +DependantColorPropertyEditor.custom.text=custom +DependantColorPropertyEditor.parent.text=parent +DependantColorPropertyEditor.darker.text=darker +DependantColorPropertyEditor.lighter.text=lighter +DependantOriginalColorPropertyEditor.custom.text=custom +DependantOriginalColorPropertyEditor.original.text=self +DependantOriginalColorPropertyEditor.parent.text=parent +EdgeColorPropertyEditor.custom.text=custom +EdgeColorPropertyEditor.mixed.text=mixed +EdgeColorPropertyEditor.original.text=self +EdgeColorPropertyEditor.source.text=source +EdgeColorPropertyEditor.target.text=target \ No newline at end of file diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_ar.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_ca.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_ca.properties new file mode 100644 index 0000000000..3e48e2f67a --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_ca.properties @@ -0,0 +1,23 @@ +# To change this template, choose Tools | Templates +# and open the template in the editor. + +EdgeColorPanel.jXHeader1.title=Color de la aresta +EdgeColorPanel.jXHeader1.description=Configures the color of the edges. Edges can have either a color on their own (original) or use incident nodes color. +EdgeColorPanel.originalRadio.text=Original +EdgeColorPanel.mixedRadio.text=Mixed +EdgeColorPanel.sourceRadio.text=Source +EdgeColorPanel.targetRadio.text=Target +EdgeColorPanel.customRadio.text=Custom +DependantOriginalColorPanel.jXHeader1.description=Configures the color of the label. It can have a color of it's own (original), a custom color or it's node/edge color. +DependantOriginalColorPanel.originalRadio.text=Original +DependantOriginalColorPanel.customRadio.text=Custom +# To change this template, choose Tools | Templates +# and open the template in the editor. +DependantOriginalColorPanel.jXHeader1.title=Color de l'etiqueta +DependantOriginalColorPanel.parentRadio.text=Parent +DependantColorPanel.customRadio.text=Custom +# To change this template, choose Tools | Templates +# and open the template in the editor. +DependantColorPanel.jXHeader1.title=Color de la vora +DependantColorPanel.jXHeader1.description=Configures the border color with either the color of the node or a custom color. +DependantColorPanel.parentRadio.text=Parent diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_cs.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_cs.properties index 25b59e74d3..60cfa06d1c 100644 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_cs.properties +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_cs.properties @@ -1,45 +1,23 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-29 19\:36+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - # To change this template, choose Tools | Templates # and open the template in the editor. -EdgeColorPanel.jXHeader1.title=Barva hrany - -EdgeColorPanel.jXHeader1.description=Nastav\u00ed barvu hrany. Hrany mohou m\u00edt vlastn\u00ed barvu (p\u016fvodn\u00ed) nebo pou\u017e\u00edvaj\u00ed barvu uzlu nehody. - -EdgeColorPanel.originalRadio.text=P\u016fvodn\u00ed - -EdgeColorPanel.mixedRadio.text=Sm\u00ed\u0161en\u00e9 +EdgeColorPanel.jXHeader1.title=Barva hrany +# EdgeColorPanel.jXHeader1.description=Configures the color of the edges. Edges can have either a color on their own (original) or use incident nodes color. +EdgeColorPanel.originalRadio.text=P\u016Fvodnν +EdgeColorPanel.mixedRadio.text=Smν\u0161enι EdgeColorPanel.sourceRadio.text=Zdroj - -EdgeColorPanel.targetRadio.text=C\u00edl - -EdgeColorPanel.customRadio.text=Vlastn\u00ed - -DependantOriginalColorPanel.jXHeader1.description=Nastav\u00ed barvu \u0161t\u00edtku. M\u016f\u017ee m\u00edt svoj\u00ed vlastn\u00ed barvu (p\u016fvodn\u00ed), vlastn\u00ed barvu nebo barvu hrany/uzle. - -DependantOriginalColorPanel.originalRadio.text=P\u016fvodn\u00ed - -DependantOriginalColorPanel.customRadio.text=Vlastn\u00ed - +EdgeColorPanel.targetRadio.text=Cνl +EdgeColorPanel.customRadio.text=Vlastnν +DependantOriginalColorPanel.jXHeader1.description=Nastavν barvu jmenovky. M\u016F\u017Ee mνt svojν vlastnν barvu (p\u016Fvodnν), vlastnν barvu nebo barvu hrany/uzle. +DependantOriginalColorPanel.originalRadio.text=P\u016Fvodnν +DependantOriginalColorPanel.customRadio.text=Vlastnν # To change this template, choose Tools | Templates # and open the template in the editor. -DependantOriginalColorPanel.jXHeader1.title=Barva \u0161t\u00edtku - -DependantOriginalColorPanel.parentRadio.text=Nad\u0159azen\u00fd - -DependantColorPanel.customRadio.text=Vlastn\u00ed - +DependantOriginalColorPanel.jXHeader1.title=Barva jmenovky +DependantOriginalColorPanel.parentRadio.text=Nad\u0159azenύ +DependantColorPanel.customRadio.text=Vlastnν # To change this template, choose Tools | Templates # and open the template in the editor. -DependantColorPanel.jXHeader1.title=Barva ohrani\u010den\u00ed - -DependantColorPanel.jXHeader1.description=Nastav\u00ed barvu ohrani\u010den\u00ed bu\u010f barvou uzle nebo vlastn\u00ed barvou. - -DependantColorPanel.parentRadio.text=Nad\u0159azen\u00fd +DependantColorPanel.jXHeader1.title=Barva ohrani\u010denν +DependantColorPanel.jXHeader1.description=Nastavν barvu ohrani\u010Denν bu\u010F barvou uzle nebo vlastnν barvou. +DependantColorPanel.parentRadio.text=Nad\u0159azenύ diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_de.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_de.properties new file mode 100644 index 0000000000..2fb857cabb --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_de.properties @@ -0,0 +1,37 @@ +# To change this template, choose Tools | Templates +# and open the template in the editor. + +EdgeColorPanel.jXHeader1.title=Kantenfarbe +EdgeColorPanel.jXHeader1.description=Legt die Farbe der Kanten fest. Kanten kφnnen entweder eine eigene Farbe haben (original) oder die Farbe benachbarter Knoten nutzen. +EdgeColorPanel.originalRadio.text=Original +EdgeColorPanel.mixedRadio.text=Gemischt +EdgeColorPanel.sourceRadio.text=Ursprung +EdgeColorPanel.targetRadio.text=Ziel +EdgeColorPanel.customRadio.text=Benutzerdefiniert +DependantOriginalColorPanel.jXHeader1.description=Legt die Farbe der Beschriftung fest. Sie kann entweder eine eigene Farbe haben (original), eine benutzerdefinierte Farbe oder die Farbe ihres Knotens/ihrer Kante. +DependantOriginalColorPanel.originalRadio.text=Original +DependantOriginalColorPanel.customRadio.text=Benutzerdefiniert +# To change this template, choose Tools | Templates +# and open the template in the editor. +DependantOriginalColorPanel.jXHeader1.title=Beschriftungsfarbe +DependantOriginalColorPanel.parentRadio.text=Eltern +DependantColorPanel.customRadio.text=Benutzerdefiniert +# To change this template, choose Tools | Templates +# and open the template in the editor. +DependantColorPanel.jXHeader1.title=Rahmenfarbe +DependantColorPanel.jXHeader1.description=Konfiguriert die Rahmenfarbe entweder mit der Knotenfarbe oder einer benutzerdefinierten Farbe. +DependantColorPanel.parentRadio.text=Knoten +EdgeColorPropertyEditor.target.text=Ziel +EdgeColorPropertyEditor.source.text=Quelle +EdgeColorPropertyEditor.mixed.text=Gemischt +DependantOriginalColorPropertyEditor.parent.text=Eltern +DependantColorPropertyEditor.lighter.text=Heller +DependantColorPropertyEditor.darker.text=Dunkler +DependantColorPanel.darkerButton.text=Knoten (Dunkler) +DependantColorPanel.lighterButton.text=Knoten (Heller) +DependantColorPropertyEditor.custom.text=Benutzerdefiniert +DependantColorPropertyEditor.parent.text=Eltern +DependantOriginalColorPropertyEditor.custom.text=Benutzerdefiniert +DependantOriginalColorPropertyEditor.original.text=Original +EdgeColorPropertyEditor.custom.text=Benutzerdefiniert +EdgeColorPropertyEditor.original.text=Original diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_el.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_el.properties new file mode 100644 index 0000000000..5ab4a8a4b0 --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_el.properties @@ -0,0 +1,23 @@ + + +DependantOriginalColorPanel.originalRadio.text=\u0391\u03C1\u03C7\u03B9\u03BA\u03CC +# To change this template, choose Tools | Templates +# and open the template in the editor. +DependantColorPanel.jXHeader1.title=\u03A7\u03C1\u03CE\u03BC\u03B1 \u03C0\u03B5\u03C1\u03B9\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2 +DependantColorPanel.customRadio.text=\u03A0\u03C1\u03BF\u03C3\u03B1\u03C1\u03BC\u03BF\u03C3\u03BC\u03AD\u03BD\u03BF +DependantColorPanel.jXHeader1.description=\u039F\u03C1\u03AF\u03B6\u03B5\u03B9 \u03C4\u03BF \u03C7\u03C1\u03CE\u03BC\u03B1 \u03C4\u03BF\u03C5 \u03C0\u03B5\u03C1\u03B9\u03B3\u03C1\u03AC\u03BC\u03BC\u03B1\u03C4\u03BF\u03C2 \u03B5\u03AF\u03C4\u03B5 \u03C9\u03C2 \u03C0\u03C1\u03BF\u03C3\u03B1\u03C1\u03BC\u03BF\u03C3\u03BC\u03AD\u03BD\u03BF \u03C7\u03C1\u03CE\u03BC\u03B1, \u03B5\u03AF\u03C4\u03B5 \u03C9\u03C2 \u03C4\u03BF \u03C7\u03C1\u03CE\u03BC\u03B1 \u03C4\u03BF\u03C5 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5 \u03AE \u03BC\u03B9\u03B1 \u03C3\u03BA\u03BF\u03CD\u03C1\u03B1 \u03B5\u03BA\u03B4\u03BF\u03C7\u03AE \u03C4\u03BF\u03C5 \u03C7\u03C1\u03CE\u03BC\u03B1\u03C4\u03BF\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5 (\u03CC\u03BC\u03BF\u03B9\u03B1 \u03BC\u03B5 \u03C4\u03B7\u03BD \u03A0\u03C1\u03BF\u03B5\u03C0\u03B9\u03C3\u03BA\u03CC\u03C0\u03B7\u03C3\u03B7) +EdgeColorPanel.customRadio.text=\u03A0\u03C1\u03BF\u03C3\u03B1\u03C1\u03BC\u03BF\u03C3\u03BC\u03AD\u03BD\u03BF +EdgeColorPanel.targetRadio.text=\u03A0\u03C1\u03BF\u03BF\u03C1\u03B9\u03C3\u03BC\u03BF\u03CD +DependantOriginalColorPanel.parentRadio.text=\u0393\u03BF\u03BD\u03AD\u03B1\u03C2 +DependantColorPanel.darkerButton.text=\u0393\u03BF\u03BD\u03AD\u03B1\u03C2 (\u03C0\u03B9\u03BF \u03C3\u03BA\u03BF\u03CD\u03C1\u03BF) +EdgeColorPanel.jXHeader1.description=\u039F\u03C1\u03AF\u03B6\u03B5\u03B9 \u03C4\u03BF \u03C7\u03C1\u03CE\u03BC\u03B1 \u03C4\u03C9\u03BD \u03B1\u03BA\u03BC\u03CE\u03BD. \u039F\u03B9 \u03B1\u03BA\u03BC\u03AD\u03C2 \u03BC\u03C0\u03BF\u03C1\u03BF\u03CD\u03BD \u03BD\u03B1 \u03AD\u03C7\u03BF\u03C5\u03BD \u03B5\u03AF\u03C4\u03B5 \u03B4\u03B9\u03BA\u03CC \u03C4\u03BF\u03C5\u03C2 \u03C7\u03C1\u03CE\u03BC\u03B1 (\u03B1\u03C1\u03C7\u03B9\u03BA\u03CC) \u03B5\u03AF\u03C4\u03B5 \u03BD\u03B1 \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03BF\u03C5\u03BD \u03C4\u03BF \u03C7\u03C1\u03CE\u03BC\u03B1 \u03C4\u03C9\u03BD \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD \u03C0\u03BF\u03C5 \u03C3\u03C5\u03BD\u03B4\u03AD\u03BF\u03C5\u03BD. +EdgeColorPanel.originalRadio.text=\u0391\u03C1\u03C7\u03B9\u03BA\u03CC +DependantOriginalColorPanel.customRadio.text=\u03A0\u03C1\u03BF\u03C3\u03B1\u03C1\u03BC\u03BF\u03C3\u03BC\u03AD\u03BD\u03BF +EdgeColorPanel.jXHeader1.title=\u03A7\u03C1\u03CE\u03BC\u03B1 \u03B1\u03BA\u03BC\u03CE\u03BD +# To change this template, choose Tools | Templates +# and open the template in the editor. +DependantOriginalColorPanel.jXHeader1.title=\u03A7\u03C1\u03CE\u03BC\u03B1 \u03B5\u03C4\u03B9\u03BA\u03AD\u03C4\u03B1\u03C2 +DependantOriginalColorPanel.jXHeader1.description=\u039F\u03C1\u03AF\u03B6\u03B5\u03B9 \u03C4\u03BF \u03C7\u03C1\u03CE\u03BC\u03B1 \u03C4\u03B7\u03C2 \u03B5\u03C4\u03B9\u03BA\u03AD\u03C4\u03B1\u03C2. \u039C\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03AD\u03C7\u03B5\u03B9 \u03B4\u03B9\u03BA\u03CC \u03C4\u03B7\u03C2 \u03C7\u03C1\u03CE\u03BC\u03B1 (\u03B1\u03C1\u03C7\u03B9\u03BA\u03CC), \u03AD\u03BD\u03B1 \u03C0\u03C1\u03BF\u03C3\u03B1\u03C1\u03BC\u03BF\u03C3\u03BC\u03AD\u03BD\u03BF \u03C7\u03C1\u03CE\u03BC\u03B1 \u03AE \u03C4\u03BF \u03C7\u03C1\u03CE\u03BC\u03B1 \u03C4\u03BF\u03C5 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5/\u03C4\u03B7\u03C2 \u03B1\u03BA\u03BC\u03AE\u03C2 \u03CC\u03C0\u03BF\u03C5 \u03B1\u03BD\u03C4\u03B9\u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF. +EdgeColorPanel.mixedRadio.text=\u039C\u03B9\u03BA\u03C4\u03CC +EdgeColorPanel.sourceRadio.text=\u03A0\u03B7\u03B3\u03B1\u03AF\u03BF +DependantColorPanel.parentRadio.text=\u039A\u03CC\u03BC\u03B2\u03BF\u03C2 diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_es.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_es.properties index 6535d6641b..61c9231e41 100644 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_es.properties +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_es.properties @@ -1,44 +1,24 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-03 14\:37+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - # To change this template, choose Tools | Templates # and open the template in the editor. -EdgeColorPanel.jXHeader1.title=Color de aristas - -EdgeColorPanel.jXHeader1.description=Configura el color de las aristas. Pueden tener color propio (original) o usar los colores de los nodos incidentes. +EdgeColorPanel.jXHeader1.title=Color de arista +EdgeColorPanel.jXHeader1.description=Configura el color de las aristas. Las aristas pueden tener un color propio (original) o utilizar el color de los nodos incidentes. EdgeColorPanel.originalRadio.text=Original - EdgeColorPanel.mixedRadio.text=Mezclado - -EdgeColorPanel.sourceRadio.text=Origen - -EdgeColorPanel.targetRadio.text=Destino - -EdgeColorPanel.customRadio.text=Espec\u00edfico - -DependantOriginalColorPanel.jXHeader1.description=Configura el color de la etiqueta. Puede tener color propio (original), un color espec\u00edfico o el color de su nodo/arista. - +EdgeColorPanel.sourceRadio.text=Fuente +EdgeColorPanel.targetRadio.text=Objetivo +EdgeColorPanel.customRadio.text=Personalizado +DependantOriginalColorPanel.jXHeader1.description=Configura el color de la etiqueta. Puede tener un color propio (original), un color personalizado o el color de su nodo/arista. DependantOriginalColorPanel.originalRadio.text=Original - -DependantOriginalColorPanel.customRadio.text=Espec\u00edfico - +DependantOriginalColorPanel.customRadio.text=Personalizado # To change this template, choose Tools | Templates # and open the template in the editor. -DependantOriginalColorPanel.jXHeader1.title=Color de etiqueta - -DependantOriginalColorPanel.parentRadio.text=Padre - -DependantColorPanel.customRadio.text=Espec\u00edfico - +DependantOriginalColorPanel.jXHeader1.title=Color de la etiqueta +DependantOriginalColorPanel.parentRadio.text=Padres +DependantColorPanel.customRadio.text=Personalizado # To change this template, choose Tools | Templates # and open the template in the editor. -DependantColorPanel.jXHeader1.title=Color de borde - -DependantColorPanel.jXHeader1.description=Configura el color de borde con el color del nodo o un color espec\u00edfico - -DependantColorPanel.parentRadio.text=Padre +DependantColorPanel.jXHeader1.title=Color de los bordes +DependantColorPanel.jXHeader1.description=Configura el color del borde con un color personalizado, el color del nodo o un color de nodo mαs oscuro (similar a la Vista general) +DependantColorPanel.parentRadio.text=Padres +DependantColorPanel.darkerButton.text=Padre (oscuro) diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_fr.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_fr.properties index 1e464c6cbd..618e36cde6 100644 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_fr.properties +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_fr.properties @@ -1,44 +1,24 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-03 14\:37+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - # To change this template, choose Tools | Templates # and open the template in the editor. -EdgeColorPanel.jXHeader1.title=Couleur du lien - -EdgeColorPanel.jXHeader1.description=Configure la couleur des liens. Un lien peut avoir sa propre couleur (originale) ou prendre la couleur d'un des noeuds incidents. +EdgeColorPanel.jXHeader1.title=Couleur du lien +EdgeColorPanel.jXHeader1.description=Configure la couleur des liens. Un lien peut avoir sa propre couleur (originale) ou prendre la couleur d'un des n\u0153uds incidents. EdgeColorPanel.originalRadio.text=Originale - -EdgeColorPanel.mixedRadio.text=M\u00e9lang\u00e9e - +EdgeColorPanel.mixedRadio.text=Mιlangιe EdgeColorPanel.sourceRadio.text=Source - EdgeColorPanel.targetRadio.text=Destination - -EdgeColorPanel.customRadio.text=Personnalis\u00e9 - -DependantOriginalColorPanel.jXHeader1.description=Configure la couleur des labels. Un label peut avoir sa propre couleur (originale) ou une couleur personnalis\u00e9e, ou prendre la couleur de son noeud. - +EdgeColorPanel.customRadio.text=Personnalisι +DependantOriginalColorPanel.jXHeader1.description=Configure la couleur des labels. Un label peut avoir sa propre couleur (originale) ou une couleur personnalisιe, ou prendre la couleur de son noeud. DependantOriginalColorPanel.originalRadio.text=Originale - -DependantOriginalColorPanel.customRadio.text=Personnalis\u00e9 - +DependantOriginalColorPanel.customRadio.text=Personnalisι # To change this template, choose Tools | Templates # and open the template in the editor. DependantOriginalColorPanel.jXHeader1.title=Couleur du label - DependantOriginalColorPanel.parentRadio.text=Parent - -DependantColorPanel.customRadio.text=Personnalis\u00e9 - +DependantColorPanel.customRadio.text=Personnalisι # To change this template, choose Tools | Templates # and open the template in the editor. DependantColorPanel.jXHeader1.title=Couleur de la bordure - -DependantColorPanel.jXHeader1.description=Configure la couleur de bordure avec soit la couleur du noeud, soit une couleur personnalis\u00e9e. - +DependantColorPanel.jXHeader1.description=Configure la couleur de bordure avec soit la couleur du n\u0153ud, une couleur personnalisιe ou la couleur du n\u0153ud assombrie (similaire ΰ la Vue d'Ensemble) DependantColorPanel.parentRadio.text=Parent +DependantColorPanel.darkerButton.text=Parent (Sombre) diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_he.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_he.properties new file mode 100644 index 0000000000..dd5137fa49 --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_he.properties @@ -0,0 +1,23 @@ +# To change this template, choose Tools | Templates +# and open the template in the editor. + +EdgeColorPanel.jXHeader1.title=Edge Color +EdgeColorPanel.jXHeader1.description=Configures the color of the edges. Edges can have either a color on their own (original) or use incident nodes color. +EdgeColorPanel.originalRadio.text=Original +EdgeColorPanel.mixedRadio.text=Mixed +EdgeColorPanel.sourceRadio.text=Source +EdgeColorPanel.targetRadio.text=Target +EdgeColorPanel.customRadio.text=Custom +DependantOriginalColorPanel.jXHeader1.description=Configures the color of the label. It can have a color of it's own (original), a custom color or it's node/edge color. +DependantOriginalColorPanel.originalRadio.text=Original +DependantOriginalColorPanel.customRadio.text=Custom +# To change this template, choose Tools | Templates +# and open the template in the editor. +DependantOriginalColorPanel.jXHeader1.title=Label Color +DependantOriginalColorPanel.parentRadio.text=Parent +DependantColorPanel.customRadio.text=Custom +# To change this template, choose Tools | Templates +# and open the template in the editor. +DependantColorPanel.jXHeader1.title=Border Color +DependantColorPanel.jXHeader1.description=Configures the border color with either the color of the node or a custom color. +DependantColorPanel.parentRadio.text=Parent diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_hu.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_hu.properties new file mode 100644 index 0000000000..f6e954d3ac --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_hu.properties @@ -0,0 +1,23 @@ + + +DependantOriginalColorPanel.originalRadio.text=Eredeti +# To change this template, choose Tools | Templates +# and open the template in the editor. +DependantColorPanel.jXHeader1.title=Szeg\u00E9ly sz\u00EDne +DependantColorPanel.customRadio.text=Egyedi +DependantColorPanel.jXHeader1.description=A szegιlyszνnt egyιni szνnnel, csomσpontszνnnel vagy sφtιtebb csomσpontszνnnel konfigurαlja (hasonlσan az Αttekintιshez) +EdgeColorPanel.customRadio.text=Egyedi +EdgeColorPanel.targetRadio.text=C\u00E9l +DependantOriginalColorPanel.parentRadio.text=Sz\u00FCl\u0151 +DependantColorPanel.darkerButton.text=Szόl\u0151 (sφtιt) +EdgeColorPanel.jXHeader1.description=Konfigurαlja az ιlek szνnιt. Az ιleknek lehet sajαt szνnόk (eredeti), vagy hasznαlhatjαk az incidens csomσpontok szνnιt. +EdgeColorPanel.originalRadio.text=Eredeti +DependantOriginalColorPanel.customRadio.text=Egyedi +EdgeColorPanel.jXHeader1.title=\u00C9lsz\u00EDn +# To change this template, choose Tools | Templates +# and open the template in the editor. +DependantOriginalColorPanel.jXHeader1.title=C\u00EDmke sz\u00EDne +DependantOriginalColorPanel.jXHeader1.description=Beαllνtja a cνmke szνnιt. Lehet sajαt szνne (eredeti), egyedi szνne vagy csomσpont/ιlszνne. +EdgeColorPanel.mixedRadio.text=Vegyes +EdgeColorPanel.sourceRadio.text=Forr\u00E1s +DependantColorPanel.parentRadio.text=Szόl\u0151 diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_it.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_it.properties new file mode 100644 index 0000000000..5e61b3edeb --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_it.properties @@ -0,0 +1,23 @@ +# To change this template, choose Tools | Templates +# and open the template in the editor. + +EdgeColorPanel.jXHeader1.title=Edge Color +EdgeColorPanel.jXHeader1.description=Configures the color of the edges. Edges can have either a color on their own (original) or use incident nodes color. +EdgeColorPanel.originalRadio.text=Original +EdgeColorPanel.mixedRadio.text=Mixed +EdgeColorPanel.sourceRadio.text=Sorgente +EdgeColorPanel.targetRadio.text=Destinazione +EdgeColorPanel.customRadio.text=Custom +DependantOriginalColorPanel.jXHeader1.description=Configures the color of the label. It can have a color of it's own (original), a custom color or it's node/edge color. +DependantOriginalColorPanel.originalRadio.text=Original +DependantOriginalColorPanel.customRadio.text=Custom +# To change this template, choose Tools | Templates +# and open the template in the editor. +DependantOriginalColorPanel.jXHeader1.title=Label Color +DependantOriginalColorPanel.parentRadio.text=Parent +DependantColorPanel.customRadio.text=Custom +# To change this template, choose Tools | Templates +# and open the template in the editor. +DependantColorPanel.jXHeader1.title=Border Color +DependantColorPanel.jXHeader1.description=Configures the border color with either the color of the node or a custom color. +DependantColorPanel.parentRadio.text=Parent diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_ja.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_ja.properties index 0e19f3ebf4..bdf5d4efbb 100644 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_ja.properties +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_ja.properties @@ -1,44 +1,23 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-03 14\:37+0000\nLast-Translator\: gephi \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - # To change this template, choose Tools | Templates # and open the template in the editor. -EdgeColorPanel.jXHeader1.title=\u8fba\u306e\u8272 - -EdgeColorPanel.jXHeader1.description=\u8fba\u306e\u8272\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u8fba\u306f\u81ea\u5206\u81ea\u8eab\u306e\u8272(\u30aa\u30ea\u30b8\u30ca\u30eb)\u304b\u4ed8\u968f\u3057\u305f\u30ce\u30fc\u30c9\u306e\u8272\u304b\u306e\u3044\u305a\u308c\u304b\u3092\u4f7f\u7528\u3067\u304d\u307e\u3059\u3002 - -EdgeColorPanel.originalRadio.text=\u539f\u578b +EdgeColorPanel.jXHeader1.title=\u8fba\u306e\u8272 +# EdgeColorPanel.jXHeader1.description=Configures the color of the edges. Edges can have either a color on their own (original) or use incident nodes color. +EdgeColorPanel.originalRadio.text=\u539F\u578B EdgeColorPanel.mixedRadio.text=\u6df7\u5408 - EdgeColorPanel.sourceRadio.text=\u30bd\u30fc\u30b9 - EdgeColorPanel.targetRadio.text=\u30bf\u30fc\u30b2\u30c3\u30c8 - EdgeColorPanel.customRadio.text=\u30ab\u30b9\u30bf\u30e0 - -DependantOriginalColorPanel.jXHeader1.description=\u30e9\u30d9\u30eb\u306e\u8272\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u305d\u308c\u306f\u81ea\u5206\u306e(\u30aa\u30ea\u30b8\u30ca\u30eb)\u3001\u30ab\u30b9\u30bf\u30e0\u30ab\u30e9\u30fc\u307e\u305f\u306f\u305d\u308c\u306e\u30ce\u30fc\u30c9/\u8fba\u306e\u8272\u3092\u4ed8\u3051\u3089\u308c\u307e\u3059\u3002 - -DependantOriginalColorPanel.originalRadio.text=\u539f\u578b - +DependantOriginalColorPanel.jXHeader1.description=\u30E9\u30D9\u30EB\u306E\u8272\u3092\u8A2D\u5B9A\u3057\u307E\u3059\u3002\u305D\u308C\u306F\u81EA\u5206\u306E(\u30AA\u30EA\u30B8\u30CA\u30EB)\u3001\u30AB\u30B9\u30BF\u30E0\u30AB\u30E9\u30FC\u307E\u305F\u306F\u305D\u308C\u306E\u30CE\u30FC\u30C9/\u8FBA\u306E\u8272\u3092\u4ED8\u3051\u3089\u308C\u307E\u3059\u3002 +DependantOriginalColorPanel.originalRadio.text=\u539F\u578B DependantOriginalColorPanel.customRadio.text=\u30ab\u30b9\u30bf\u30e0 - # To change this template, choose Tools | Templates # and open the template in the editor. DependantOriginalColorPanel.jXHeader1.title=\u30e9\u30d9\u30eb\u306e\u8272 - DependantOriginalColorPanel.parentRadio.text=\u89aa - DependantColorPanel.customRadio.text=\u30ab\u30b9\u30bf\u30e0 - # To change this template, choose Tools | Templates # and open the template in the editor. DependantColorPanel.jXHeader1.title=\u5883\u754c\u306e\u8272 - -DependantColorPanel.jXHeader1.description=\u30ce\u30fc\u30c9\u306e\u8272\u307e\u305f\u306f\u30ab\u30b9\u30bf\u30e0\u30ab\u30e9\u30fc\u306e\u3044\u305a\u308c\u304b\u3067\u5883\u754c\u7dda\u306e\u8272\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002 - -DependantColorPanel.parentRadio.text=\u89aa +DependantColorPanel.jXHeader1.description=\u30CE\u30FC\u30C9\u306E\u8272\u307E\u305F\u306F\u30AB\u30B9\u30BF\u30E0\u30AB\u30E9\u30FC\u306E\u3044\u305A\u308C\u304B\u3067\u5883\u754C\u7DDA\u306E\u8272\u3092\u8A2D\u5B9A\u3057\u307E\u3059\u3002 +DependantColorPanel.parentRadio.text=\u89AA diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_ko.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_ko.properties new file mode 100644 index 0000000000..534706932f --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_ko.properties @@ -0,0 +1,23 @@ + + +DependantOriginalColorPanel.originalRadio.text=\uC6D0\uB798 +# To change this template, choose Tools | Templates +# and open the template in the editor. +DependantColorPanel.jXHeader1.title=\uACBD\uACC4 \uC0C9\uC0C1 +DependantColorPanel.customRadio.text=\uC0AC\uC6A9\uC790 \uC9C0\uC815 +DependantColorPanel.jXHeader1.description=\uC0AC\uC6A9\uC790 \uC9C0\uC815 \uC0C9\uC774\uB098, \uB178\uB4DC \uC0C9\uC0C1 \uD639\uC740 \uB354 \uC5B4\uB450\uC6B4 \uB178\uB4DC \uC0C9\uC0C1\uC73C\uB85C \uACBD\uACC4 \uC0C9\uC0C1\uC744 \uAD6C\uC131\uD569\uB2C8\uB2E4. (\uAC1C\uC694\uC640 \uC720\uC0AC\uD568) +EdgeColorPanel.customRadio.text=\uC0AC\uC6A9\uC790 \uC9C0\uC815 +EdgeColorPanel.targetRadio.text=\uD0C0\uAC9F +DependantOriginalColorPanel.parentRadio.text=\uC0C1\uC704(\uBD80\uBAA8) +DependantColorPanel.darkerButton.text=\uC0C1\uC704(\uBD80\uBAA8) \uC0C9\uC0C1 (\uC5B4\uB450\uC6B4) +EdgeColorPanel.jXHeader1.description=\uC5E3\uC9C0\uC758 \uC0C9\uC0C1\uC744 \uAD6C\uC131\uD569\uB2C8\uB2E4. \uC5E3\uC9C0\uB294 \uACE0\uC720(\uC6D0\uB798) \uC0C9\uC0C1\uC774\uB098 \uC5F0\uACB0 \uB178\uB4DC\uB4E4\uC758 \uC0C9\uC0C1\uC744 \uC0AC\uC6A9\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. +EdgeColorPanel.originalRadio.text=\uC6D0\uB798 +DependantOriginalColorPanel.customRadio.text=\uC0AC\uC6A9\uC790 \uC9C0\uC815 +EdgeColorPanel.jXHeader1.title=\uC5E3\uC9C0 \uC0C9\uC0C1 +# To change this template, choose Tools | Templates +# and open the template in the editor. +DependantOriginalColorPanel.jXHeader1.title=\uB77C\uBCA8 \uC0C9\uC0C1 +DependantOriginalColorPanel.jXHeader1.description=\uB77C\uBCA8\uC758 \uC0C9\uC0C1\uC744 \uAD6C\uC131\uD569\uB2C8\uB2E4. \uACE0\uC720(\uC6D0\uB798) \uC0C9\uC0C1\uC774\uB098, \uC0AC\uC6A9\uC790 \uC9C0\uC815 \uC0C9\uC0C1 \uD639\uC740 \uB178\uB4DC/\uC5E3\uC9C0 \uC0C9\uC0C1\uC744 \uC0AC\uC6A9\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4. +EdgeColorPanel.mixedRadio.text=\uD63C\uD569 +EdgeColorPanel.sourceRadio.text=\uC18C\uC2A4 +DependantColorPanel.parentRadio.text=\uC0C1\uC704(\uBD80\uBAA8) \uC0C9\uC0C1 diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_nl.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_nl.properties new file mode 100644 index 0000000000..592968a7d9 --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_nl.properties @@ -0,0 +1,23 @@ +# To change this template, choose Tools | Templates +# and open the template in the editor. + +EdgeColorPanel.jXHeader1.title=Edge Color +EdgeColorPanel.jXHeader1.description=Configures the color of the edges. Edges can have either a color on their own (original) or use incident nodes color. +EdgeColorPanel.originalRadio.text=Original +EdgeColorPanel.mixedRadio.text=Gemengd +EdgeColorPanel.sourceRadio.text=Bron +EdgeColorPanel.targetRadio.text=Doel +EdgeColorPanel.customRadio.text=Aangepast +DependantOriginalColorPanel.jXHeader1.description=Configures the color of the label. It can have a color of it's own (original), a custom color or it's node/edge color. +DependantOriginalColorPanel.originalRadio.text=Original +DependantOriginalColorPanel.customRadio.text=Aangepast +# To change this template, choose Tools | Templates +# and open the template in the editor. +DependantOriginalColorPanel.jXHeader1.title=Label Color +DependantOriginalColorPanel.parentRadio.text=Parent +DependantColorPanel.customRadio.text=Aangepast +# To change this template, choose Tools | Templates +# and open the template in the editor. +DependantColorPanel.jXHeader1.title=Border Color +DependantColorPanel.jXHeader1.description=Configures the border color with either the color of the node or a custom color. +DependantColorPanel.parentRadio.text=Parent diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_pt_BR.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_pt_BR.properties index 68e438cb41..ef04330299 100644 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_pt_BR.properties +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_pt_BR.properties @@ -1,44 +1,23 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-03 14\:37+0000\nLast-Translator\: gephi \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - # To change this template, choose Tools | Templates # and open the template in the editor. -EdgeColorPanel.jXHeader1.title=Cor da aresta - -EdgeColorPanel.jXHeader1.description=Configura a cor das arestas. As arestas podem possuir uma cor pr\u00f3pria (original) ou usar a cor de seus n\u00f3s. +EdgeColorPanel.jXHeader1.title=Cor da aresta +EdgeColorPanel.jXHeader1.description=Configura a cor das arestas. As arestas podem possuir uma cor prσpria (original) ou usar a cor dos nσs incidentes. EdgeColorPanel.originalRadio.text=Original - EdgeColorPanel.mixedRadio.text=Misturado - EdgeColorPanel.sourceRadio.text=Origem - EdgeColorPanel.targetRadio.text=Destino - EdgeColorPanel.customRadio.text=Personalizado - -DependantOriginalColorPanel.jXHeader1.description=Configura a cor do r\u00f3tulo. Os r\u00f3tulos podem possuir uma cor pr\u00f3pria (original), personalizada ou a cor do n\u00f3/aresta a que se referem. - +DependantOriginalColorPanel.jXHeader1.description=Configura a cor do rσtulo. Os rσtulos podem possuir uma cor prσpria (original), personalizada ou a cor do nσ/aresta a que se referem. DependantOriginalColorPanel.originalRadio.text=Original - DependantOriginalColorPanel.customRadio.text=Personalizado - # To change this template, choose Tools | Templates # and open the template in the editor. -DependantOriginalColorPanel.jXHeader1.title=Cor do r\u00f3tulo - +DependantOriginalColorPanel.jXHeader1.title=Cor do rσtulo DependantOriginalColorPanel.parentRadio.text=Pai - DependantColorPanel.customRadio.text=Personalizado - # To change this template, choose Tools | Templates # and open the template in the editor. DependantColorPanel.jXHeader1.title=Cor da borda - -DependantColorPanel.jXHeader1.description=Configura a cor da borda com a cor do n\u00f3 ou uma cor personalizada. - +DependantColorPanel.jXHeader1.description=Configura a cor da borda com a cor do nσ ou uma cor personalizada. DependantColorPanel.parentRadio.text=Pai diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_ro.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_ro.properties new file mode 100644 index 0000000000..de64469336 --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_ro.properties @@ -0,0 +1,23 @@ + + +EdgeColorPanel.jXHeader1.description=Configureaz\u0103 culoarea muchiilor. Muchiile pot avea fie o culoare proprie (original\u0103), fie pot folosi culoarea nodurilor incidente. +EdgeColorPanel.jXHeader1.title=Culoare muchii +EdgeColorPanel.originalRadio.text=Original\u0103 +EdgeColorPanel.mixedRadio.text=Mixt\u0103 +EdgeColorPanel.sourceRadio.text=Surs\u0103 +# To change this template, choose Tools | Templates +# and open the template in the editor. +DependantOriginalColorPanel.jXHeader1.title=Culoare etichet\u0103 +EdgeColorPanel.targetRadio.text=\u021Aint\u0103 +DependantOriginalColorPanel.originalRadio.text=Original\u0103 +DependantOriginalColorPanel.parentRadio.text=P\u0103rinte +EdgeColorPanel.customRadio.text=Personalizat\u0103 +DependantOriginalColorPanel.jXHeader1.description=Configureaz\u0103 culoarea etichetei. Aceasta poate avea o culoare proprie (original\u0103), o culoare personalizat\u0103 sau culoarea nodului/muchiei sale. +DependantOriginalColorPanel.customRadio.text=Personalizat\u0103 +DependantColorPanel.customRadio.text=Personalizat\u0103 +# To change this template, choose Tools | Templates +# and open the template in the editor. +DependantColorPanel.jXHeader1.title=Culoare bordur\u0103 +DependantColorPanel.jXHeader1.description=Configureaz\u0103 culoarea bordurii fie cu o culoare personalizat\u0103, fie folosind culoarea nodului sau o culoare mai ξntunecat\u0103 a nodului (similar cu prezentarea general\u0103) +DependantColorPanel.parentRadio.text=P\u0103rinte +DependantColorPanel.darkerButton.text=P\u0103rinte (ξntunecat) diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_ru.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_ru.properties index f10e395efe..67b45c76dd 100644 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_ru.properties +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_ru.properties @@ -1,45 +1,23 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 15\:26+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - # To change this template, choose Tools | Templates # and open the template in the editor. -EdgeColorPanel.jXHeader1.title=\u0426\u0432\u0435\u0442 \u0440\u0451\u0431\u0435\u0440 - -EdgeColorPanel.jXHeader1.description=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0446\u0432\u0435\u0442\u0430 \u0440\u0451\u0431\u0435\u0440. \u0420\u0451\u0431\u0440\u0430 \u043c\u043e\u0433\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0446\u0432\u0435\u0442 \u0438\u043b\u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043e\u0442 \u0441\u043c\u0435\u0436\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432. - -EdgeColorPanel.originalRadio.text=\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 +EdgeColorPanel.jXHeader1.title=\u0426\u0432\u0435\u0442 \u0440\u0451\u0431\u0435\u0440 +# EdgeColorPanel.jXHeader1.description=Configures the color of the edges. Edges can have either a color on their own (original) or use incident nodes color. +EdgeColorPanel.originalRadio.text=\u0421\u043E\u0431\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439 EdgeColorPanel.mixedRadio.text=\u0421\u043c\u0435\u0448\u0430\u043d\u043d\u044b\u0439 - EdgeColorPanel.sourceRadio.text=\u0426\u0432\u0435\u0442 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 - EdgeColorPanel.targetRadio.text=\u0426\u0432\u0435\u0442 \u0446\u0435\u043b\u0435\u0432\u043e\u0433\u043e \u0443\u0437\u043b\u0430 - EdgeColorPanel.customRadio.text=\u0420\u0443\u0447\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 - -DependantOriginalColorPanel.jXHeader1.description=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0446\u0432\u0435\u0442\u0430 \u043c\u0435\u0442\u043e\u043a. \u041c\u0435\u0442\u043a\u0438 \u043c\u043e\u0433\u0443\u0442 \u0438\u043c\u0435\u0442\u044c \u0441\u0432\u043e\u0439 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0446\u0432\u0435\u0442 \u0438\u043b\u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043e\u0442 \u0443\u0437\u043b\u0430 \u0438\u043b\u0438 \u0440\u0435\u0431\u0440\u0430. - -DependantOriginalColorPanel.originalRadio.text=\u0421\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 - +DependantOriginalColorPanel.jXHeader1.description=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0446\u0432\u0435\u0442\u0430 \u043C\u0435\u0442\u043E\u043A. \u041C\u0435\u0442\u043A\u0438 \u043C\u043E\u0433\u0443\u0442 \u0438\u043C\u0435\u0442\u044C \u0441\u0432\u043E\u0439 \u0441\u043E\u0431\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439 \u0446\u0432\u0435\u0442 \u0438\u043B\u0438 \u043D\u0430\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u044C \u0435\u0433\u043E \u043E\u0442 \u0443\u0437\u043B\u0430 \u0438\u043B\u0438 \u0440\u0435\u0431\u0440\u0430. +DependantOriginalColorPanel.originalRadio.text=\u0421\u043E\u0431\u0441\u0442\u0432\u0435\u043D\u043D\u044B\u0439 DependantOriginalColorPanel.customRadio.text=\u0420\u0443\u0447\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 - # To change this template, choose Tools | Templates # and open the template in the editor. DependantOriginalColorPanel.jXHeader1.title=\u0426\u0432\u0435\u0442 \u043c\u0435\u0442\u043e\u043a - DependantOriginalColorPanel.parentRadio.text=\u041d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c - DependantColorPanel.customRadio.text=\u0420\u0443\u0447\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 - # To change this template, choose Tools | Templates # and open the template in the editor. DependantColorPanel.jXHeader1.title=\u0426\u0432\u0435\u0442 \u0440\u0430\u043c\u043e\u043a \u043c\u0435\u0442\u043e\u043a - -DependantColorPanel.jXHeader1.description=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0446\u0432\u0435\u0442\u0430 \u0440\u0430\u043c\u043e\u043a \u043c\u0435\u0442\u043e\u043a -- \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u044c \u043e\u0442 \u0443\u0437\u043b\u0430 \u0438\u043b\u0438 \u0437\u0430\u0434\u0430\u0442\u044c \u0432\u0440\u0443\u0447\u043d\u0443\u044e. - -DependantColorPanel.parentRadio.text=\u0420\u0443\u0447\u043d\u0430\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 +DependantColorPanel.jXHeader1.description=\u041D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0438 \u0446\u0432\u0435\u0442\u0430 \u0440\u0430\u043C\u043E\u043A \u043C\u0435\u0442\u043E\u043A -- \u043C\u043E\u0436\u043D\u043E \u043D\u0430\u0441\u043B\u0435\u0434\u043E\u0432\u0430\u0442\u044C \u043E\u0442 \u0443\u0437\u043B\u0430 \u0438\u043B\u0438 \u0437\u0430\u0434\u0430\u0442\u044C \u0432\u0440\u0443\u0447\u043D\u0443\u044E. +DependantColorPanel.parentRadio.text=\u0420\u0443\u0447\u043D\u0430\u044F \u043D\u0430\u0441\u0442\u0440\u043E\u0439\u043A\u0430 diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_th.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_tr.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_tr.properties new file mode 100644 index 0000000000..38ec6e178b --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_tr.properties @@ -0,0 +1,23 @@ +# To change this template, choose Tools | Templates +# and open the template in the editor. + +EdgeColorPanel.jXHeader1.title=Edge Color +EdgeColorPanel.jXHeader1.description=Configures the color of the edges. Edges can have either a color on their own (original) or use incident nodes color. +EdgeColorPanel.originalRadio.text=Original +EdgeColorPanel.mixedRadio.text=Mixed +EdgeColorPanel.sourceRadio.text=Source +EdgeColorPanel.targetRadio.text=Target +EdgeColorPanel.customRadio.text=Custom +DependantOriginalColorPanel.jXHeader1.description=Configures the color of the label. It can have a color of it's own (original), a custom color or it's node/edge color. +DependantOriginalColorPanel.originalRadio.text=Original +DependantOriginalColorPanel.customRadio.text=Custom +# To change this template, choose Tools | Templates +# and open the template in the editor. +DependantOriginalColorPanel.jXHeader1.title=Etiket Rengi +DependantOriginalColorPanel.parentRadio.text=Parent +DependantColorPanel.customRadio.text=Custom +# To change this template, choose Tools | Templates +# and open the template in the editor. +DependantColorPanel.jXHeader1.title=Border Color +DependantColorPanel.jXHeader1.description=Configures the border color with either the color of the node or a custom color. +DependantColorPanel.parentRadio.text=Parent diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_uk.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_uk.properties new file mode 100644 index 0000000000..dfab0345bd --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_uk.properties @@ -0,0 +1,30 @@ +DependantOriginalColorPanel.originalRadio.text=\u0421\u0430\u043C +EdgeColorPanel.jXHeader1.title=\u041A\u043E\u043B\u0456\u0440 \u043A\u0440\u0430\u044E +DependantColorPanel.customRadio.text=\u0421\u043F\u0435\u0446\u0456\u0430\u043B\u044C\u043D\u0456 +DependantColorPanel.parentRadio.text=\u0412\u0443\u0437\u043E\u043B +DependantColorPanel.darkerButton.text=\u0412\u0443\u0437\u043E\u043B (\u0442\u0435\u043C\u043D\u0456\u0448\u0438\u0439) +EdgeColorPanel.targetRadio.text=\u0426\u0456\u043B\u044C\u043E\u0432\u0430 +EdgeColorPanel.mixedRadio.text=\u0417\u043C\u0456\u0448\u0430\u043D\u0438\u0439 +DependantOriginalColorPanel.jXHeader1.description=\u041D\u0430\u043B\u0430\u0448\u0442\u043E\u0432\u0443\u0454 \u043A\u043E\u043B\u0456\u0440 \u043C\u0456\u0442\u043A\u0438. \u0412\u043E\u043D\u0430 \u043C\u043E\u0436\u0435 \u043C\u0430\u0442\u0438 \u0432\u043B\u0430\u0441\u043D\u0438\u0439 \u043A\u043E\u043B\u0456\u0440, \u0432\u043B\u0430\u0441\u043D\u0438\u0439 \u043A\u043E\u043B\u0456\u0440 \u0430\u0431\u043E \u043A\u043E\u043B\u0456\u0440 \u0432\u0443\u0437\u043B\u0430 \u0447\u0438 \u0440\u0435\u0431\u0440\u0430. +DependantOriginalColorPanel.customRadio.text=\u0421\u043F\u0435\u0446\u0456\u0430\u043B\u044C\u043D\u0456 +DependantOriginalColorPanel.jXHeader1.title=\u041A\u043E\u043B\u0456\u0440 \u0435\u0442\u0438\u043A\u0435\u0442\u043A\u0438 +DependantOriginalColorPanel.parentRadio.text=\u0411\u0430\u0442\u044C\u043A\u043E +DependantColorPanel.jXHeader1.title=\u041A\u043E\u043B\u0456\u0440 \u0440\u0430\u043C\u043A\u0438 +EdgeColorPanel.jXHeader1.description=\u041D\u0430\u043B\u0430\u0448\u0442\u043E\u0432\u0443\u0454 \u043A\u043E\u043B\u0456\u0440 \u0440\u0435\u0431\u0435\u0440. \u0420\u0435\u0431\u0440\u0430 \u043C\u043E\u0436\u0443\u0442\u044C \u043C\u0430\u0442\u0438 \u0430\u0431\u043E \u043E\u043A\u0440\u0435\u043C\u0438\u0439 \u043A\u043E\u043B\u0456\u0440 (self), \u0430\u0431\u043E \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0432\u0430\u0442\u0438 \u043A\u043E\u043B\u0456\u0440 \u0456\u043D\u0446\u0438\u0434\u0435\u043D\u0442\u043D\u0438\u0445 \u0432\u0443\u0437\u043B\u0456\u0432. +EdgeColorPanel.originalRadio.text=\u0421\u0430\u043C +EdgeColorPanel.sourceRadio.text=\u0414\u0436\u0435\u0440\u0435\u043B\u043E +EdgeColorPanel.customRadio.text=\u0421\u043F\u0435\u0446\u0456\u0430\u043B\u044C\u043D\u0456 +DependantColorPanel.jXHeader1.description=\u041D\u0430\u043B\u0430\u0448\u0442\u043E\u0432\u0443\u0454 \u043A\u043E\u043B\u0456\u0440 \u043C\u0435\u0436\u0456, \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u044E\u0447\u0438 \u0432\u043B\u0430\u0441\u043D\u0438\u0439 \u043A\u043E\u043B\u0456\u0440, \u043A\u043E\u043B\u0456\u0440 \u0432\u0443\u0437\u043B\u0430 \u0430\u0431\u043E \u0442\u0435\u043C\u043D\u0456\u0448\u0438\u0439/\u0441\u0432\u0456\u0442\u043B\u0456\u0448\u0438\u0439 \u043A\u043E\u043B\u0456\u0440 \u0432\u0443\u0437\u043B\u0430 (\u043F\u043E\u0434\u0456\u0431\u043D\u043E \u0434\u043E \u041E\u0433\u043B\u044F\u0434\u0443) +DependantColorPanel.lighterButton.text=\u0412\u0443\u0437\u043E\u043B (\u043B\u0435\u0433\u0448\u0438\u0439) +DependantColorPropertyEditor.custom.text=\u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0446\u044C\u043A\u0438\u0439 +DependantColorPropertyEditor.parent.text=\u0431\u0430\u0442\u044C\u043A\u043E +DependantColorPropertyEditor.darker.text=\u0442\u0435\u043C\u043D\u0456\u0448\u0438\u0439 +DependantColorPropertyEditor.lighter.text=\u0437\u0430\u043F\u0430\u043B\u044C\u043D\u0438\u0447\u043A\u0430 +DependantOriginalColorPropertyEditor.custom.text=\u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0446\u044C\u043A\u0438\u0439 +DependantOriginalColorPropertyEditor.original.text=\u0441\u0435\u0431\u0435 +DependantOriginalColorPropertyEditor.parent.text=\u0431\u0430\u0442\u044C\u043A\u043E +EdgeColorPropertyEditor.custom.text=\u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0446\u044C\u043A\u0438\u0439 +EdgeColorPropertyEditor.mixed.text=\u0437\u043C\u0456\u0448\u0430\u043D\u0438\u0439 +EdgeColorPropertyEditor.original.text=\u0441\u0435\u0431\u0435 +EdgeColorPropertyEditor.source.text=\u0434\u0436\u0435\u0440\u0435\u043B\u043E +EdgeColorPropertyEditor.target.text=\u0446\u0456\u043B\u044C diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_zh_CN.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_zh_CN.properties index c7024b79a4..0ef0069f8f 100644 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_zh_CN.properties +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_zh_CN.properties @@ -1,44 +1,23 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:21+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - # To change this template, choose Tools | Templates # and open the template in the editor. -EdgeColorPanel.jXHeader1.title=\u8fb9\u989c\u8272 - -EdgeColorPanel.jXHeader1.description=\u8bbe\u7f6e\u8fb9\u7684\u989c\u8272\u3002\u8fb9\u53ef\u4ee5\u4f7f\u7528\u5b83\u4eec\u539f\u59cb\u7684\u989c\u8272\u6216\u8005\u5bf9\u5e94\u8282\u70b9\u7684\u989c\u8272\u3002 - -EdgeColorPanel.originalRadio.text=\u539f\u59cb\u7684 +EdgeColorPanel.jXHeader1.title=\u8fb9\u989c\u8272 +EdgeColorPanel.jXHeader1.description=\u8BBE\u7F6E\u8FB9\u7684\u989C\u8272\u3002\u8FB9\u53EF\u4EE5\u4F7F\u7528\u81EA\u5DF1\u539F\u6765\u7684\u989C\u8272\u6216\u8005\u4F7F\u7528\u8282\u70B9\u7684\u989C\u8272\u3002 +EdgeColorPanel.originalRadio.text=\u539F\u59CB\u7684 EdgeColorPanel.mixedRadio.text=\u6df7\u5408\u7684 - EdgeColorPanel.sourceRadio.text=\u6e90 - EdgeColorPanel.targetRadio.text=\u76ee\u6807 - EdgeColorPanel.customRadio.text=\u81ea\u5b9a\u4e49 - -DependantOriginalColorPanel.jXHeader1.description=\u914d\u7f6e\u6807\u53f7\u989c\u8272\u3002\u53ef\u4ee5\u662f\u5b83\u81ea\u5df1\u539f\u59cb\u7684\u989c\u8272\uff0c\u81ea\u5b9a\u4e49\u989c\u8272\u6216\u8005\u5b83\u7684\u8282\u70b9/\u8fb9\u7684\u989c\u8272\u3002 - -DependantOriginalColorPanel.originalRadio.text=\u539f\u59cb\u7684 - +DependantOriginalColorPanel.jXHeader1.description=\u914D\u7F6E\u6807\u53F7\u989C\u8272\u3002\u53EF\u4EE5\u662F\u5B83\u81EA\u5DF1\u539F\u59CB\u7684\u989C\u8272\uFF0C\u81EA\u5B9A\u4E49\u989C\u8272\u6216\u8005\u5B83\u7684\u8282\u70B9/\u8FB9\u7684\u989C\u8272\u3002 +DependantOriginalColorPanel.originalRadio.text=\u539F\u59CB\u7684 DependantOriginalColorPanel.customRadio.text=\u81ea\u5b9a\u4e49 - # To change this template, choose Tools | Templates # and open the template in the editor. DependantOriginalColorPanel.jXHeader1.title=\u6807\u53f7\u989c\u8272 - DependantOriginalColorPanel.parentRadio.text=\u7236\u5bf9\u8c61 - DependantColorPanel.customRadio.text=\u81ea\u5b9a\u4e49 - # To change this template, choose Tools | Templates # and open the template in the editor. DependantColorPanel.jXHeader1.title=\u8fb9\u754c\u989c\u8272 - -DependantColorPanel.jXHeader1.description=\u914d\u7f6e\u8fb9\u754c\u989c\u8272\u4e3a\u8282\u70b9\u989c\u8272\u6216\u8005\u81ea\u5b9a\u4e49\u3002 - -DependantColorPanel.parentRadio.text=\u7236\u5bf9\u8c61 +DependantColorPanel.jXHeader1.description=\u4F7F\u7528\u81EA\u5B9A\u4E49\u989C\u8272\u3001\u8282\u70B9\u989C\u8272\u6216\u8F83\u6697\u7684\u8282\u70B9\u989C\u8272\u914D\u7F6E\u8FB9\u6846\u989C\u8272\uFF08\u7C7B\u4F3C\u4E8E\u6982\u8FF0\uFF09 +DependantColorPanel.parentRadio.text=\u7236\u5BF9\u8C61 diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_zh_TW.properties b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_zh_TW.properties new file mode 100644 index 0000000000..fb3b7d2f75 --- /dev/null +++ b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/Bundle_zh_TW.properties @@ -0,0 +1,23 @@ +# To change this template, choose Tools | Templates +# and open the template in the editor. + +EdgeColorPanel.jXHeader1.title=Edge Color +EdgeColorPanel.jXHeader1.description=Configures the color of the edges. Edges can have either a color on their own (original) or use incident nodes color. +EdgeColorPanel.originalRadio.text=Original +EdgeColorPanel.mixedRadio.text=Mixed +EdgeColorPanel.sourceRadio.text=\u4f86\u6e90\u7bc0\u9ede +EdgeColorPanel.targetRadio.text=\u76ee\u6a19\u7bc0\u9ede +EdgeColorPanel.customRadio.text=Custom +DependantOriginalColorPanel.jXHeader1.description=Configures the color of the label. It can have a color of it's own (original), a custom color or it's node/edge color. +DependantOriginalColorPanel.originalRadio.text=Original +DependantOriginalColorPanel.customRadio.text=Custom +# To change this template, choose Tools | Templates +# and open the template in the editor. +DependantOriginalColorPanel.jXHeader1.title=Label Color +DependantOriginalColorPanel.parentRadio.text=Parent +DependantColorPanel.customRadio.text=Custom +# To change this template, choose Tools | Templates +# and open the template in the editor. +DependantColorPanel.jXHeader1.title=Border Color +DependantColorPanel.jXHeader1.description=Configures the border color with either the color of the node or a custom color. +DependantColorPanel.parentRadio.text=Parent diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/cs.po b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/cs.po deleted file mode 100644 index 2879cbf814..0000000000 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/cs.po +++ /dev/null @@ -1,73 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-29 19:36+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -# To change this template, choose Tools | Templates -# and open the template in the editor. -msgid "EdgeColorPanel.jXHeader1.title" -msgstr "Barva hrany" - -msgid "EdgeColorPanel.jXHeader1.description" -msgstr "NastavΓ­ barvu hrany. Hrany mohou mΓ­t vlastnΓ­ barvu (pΕ―vodnΓ­) nebo pouΕΎΓ­vajΓ­ barvu uzlu nehody." - -msgid "EdgeColorPanel.originalRadio.text" -msgstr "PΕ―vodnΓ­" - -msgid "EdgeColorPanel.mixedRadio.text" -msgstr "SmΓ­Ε‘enΓ©" - -msgid "EdgeColorPanel.sourceRadio.text" -msgstr "Zdroj" - -msgid "EdgeColorPanel.targetRadio.text" -msgstr "CΓ­l" - -msgid "EdgeColorPanel.customRadio.text" -msgstr "VlastnΓ­" - -msgid "DependantOriginalColorPanel.jXHeader1.description" -msgstr "NastavΓ­ barvu Ε‘tΓ­tku. MΕ―ΕΎe mΓ­t svojΓ­ vlastnΓ­ barvu (pΕ―vodnΓ­), vlastnΓ­ barvu nebo barvu hrany/uzle." - -msgid "DependantOriginalColorPanel.originalRadio.text" -msgstr "PΕ―vodnΓ­" - -msgid "DependantOriginalColorPanel.customRadio.text" -msgstr "VlastnΓ­" - -# To change this template, choose Tools | Templates -# and open the template in the editor. -msgid "DependantOriginalColorPanel.jXHeader1.title" -msgstr "Barva Ε‘tΓ­tku" - -msgid "DependantOriginalColorPanel.parentRadio.text" -msgstr "NadΕ™azenΓ½" - -msgid "DependantColorPanel.customRadio.text" -msgstr "VlastnΓ­" - -# To change this template, choose Tools | Templates -# and open the template in the editor. -msgid "DependantColorPanel.jXHeader1.title" -msgstr "Barva ohraničenΓ­" - -msgid "DependantColorPanel.jXHeader1.description" -msgstr "NastavΓ­ barvu ohraničenΓ­ buď barvou uzle nebo vlastnΓ­ barvou." - -msgid "DependantColorPanel.parentRadio.text" -msgstr "NadΕ™azenΓ½" diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/es.po b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/es.po deleted file mode 100644 index 3079703090..0000000000 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/es.po +++ /dev/null @@ -1,72 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-03 14:37+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -# To change this template, choose Tools | Templates -# and open the template in the editor. -msgid "EdgeColorPanel.jXHeader1.title" -msgstr "Color de aristas" - -msgid "EdgeColorPanel.jXHeader1.description" -msgstr "Configura el color de las aristas. Pueden tener color propio (original) o usar los colores de los nodos incidentes." - -msgid "EdgeColorPanel.originalRadio.text" -msgstr "Original" - -msgid "EdgeColorPanel.mixedRadio.text" -msgstr "Mezclado" - -msgid "EdgeColorPanel.sourceRadio.text" -msgstr "Origen" - -msgid "EdgeColorPanel.targetRadio.text" -msgstr "Destino" - -msgid "EdgeColorPanel.customRadio.text" -msgstr "EspecΓ­fico" - -msgid "DependantOriginalColorPanel.jXHeader1.description" -msgstr "Configura el color de la etiqueta. Puede tener color propio (original), un color especΓ­fico o el color de su nodo/arista." - -msgid "DependantOriginalColorPanel.originalRadio.text" -msgstr "Original" - -msgid "DependantOriginalColorPanel.customRadio.text" -msgstr "EspecΓ­fico" - -# To change this template, choose Tools | Templates -# and open the template in the editor. -msgid "DependantOriginalColorPanel.jXHeader1.title" -msgstr "Color de etiqueta" - -msgid "DependantOriginalColorPanel.parentRadio.text" -msgstr "Padre" - -msgid "DependantColorPanel.customRadio.text" -msgstr "EspecΓ­fico" - -# To change this template, choose Tools | Templates -# and open the template in the editor. -msgid "DependantColorPanel.jXHeader1.title" -msgstr "Color de borde" - -msgid "DependantColorPanel.jXHeader1.description" -msgstr "Configura el color de borde con el color del nodo o un color especΓ­fico" - -msgid "DependantColorPanel.parentRadio.text" -msgstr "Padre" diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/fr.po b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/fr.po deleted file mode 100644 index e8f2a51ae7..0000000000 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/fr.po +++ /dev/null @@ -1,72 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-03 14:37+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -# To change this template, choose Tools | Templates -# and open the template in the editor. -msgid "EdgeColorPanel.jXHeader1.title" -msgstr "Couleur du lien" - -msgid "EdgeColorPanel.jXHeader1.description" -msgstr "Configure la couleur des liens. Un lien peut avoir sa propre couleur (originale) ou prendre la couleur d'un des noeuds incidents." - -msgid "EdgeColorPanel.originalRadio.text" -msgstr "Originale" - -msgid "EdgeColorPanel.mixedRadio.text" -msgstr "MΓ©langΓ©e" - -msgid "EdgeColorPanel.sourceRadio.text" -msgstr "Source" - -msgid "EdgeColorPanel.targetRadio.text" -msgstr "Destination" - -msgid "EdgeColorPanel.customRadio.text" -msgstr "PersonnalisΓ©" - -msgid "DependantOriginalColorPanel.jXHeader1.description" -msgstr "Configure la couleur des labels. Un label peut avoir sa propre couleur (originale) ou une couleur personnalisΓ©e, ou prendre la couleur de son noeud." - -msgid "DependantOriginalColorPanel.originalRadio.text" -msgstr "Originale" - -msgid "DependantOriginalColorPanel.customRadio.text" -msgstr "PersonnalisΓ©" - -# To change this template, choose Tools | Templates -# and open the template in the editor. -msgid "DependantOriginalColorPanel.jXHeader1.title" -msgstr "Couleur du label" - -msgid "DependantOriginalColorPanel.parentRadio.text" -msgstr "Parent" - -msgid "DependantColorPanel.customRadio.text" -msgstr "PersonnalisΓ©" - -# To change this template, choose Tools | Templates -# and open the template in the editor. -msgid "DependantColorPanel.jXHeader1.title" -msgstr "Couleur de la bordure" - -msgid "DependantColorPanel.jXHeader1.description" -msgstr "Configure la couleur de bordure avec soit la couleur du noeud, soit une couleur personnalisΓ©e." - -msgid "DependantColorPanel.parentRadio.text" -msgstr "Parent" diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/ja.po b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/ja.po deleted file mode 100644 index 1d1ac44ac8..0000000000 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/ja.po +++ /dev/null @@ -1,72 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-03 14:37+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -# To change this template, choose Tools | Templates -# and open the template in the editor. -msgid "EdgeColorPanel.jXHeader1.title" -msgstr "θΎΊγθ‰²" - -msgid "EdgeColorPanel.jXHeader1.description" -msgstr "θΎΊγθ‰²γ‚’θ¨­εšγ—ます。辺はθ‡ͺεˆ†θ‡ͺθΊ«γθ‰²(γ‚ͺγƒͺγ‚ΈγƒŠγƒ«)γ‹δ»˜ιšγ—γŸγƒŽγƒΌγƒ‰γθ‰²γ‹γγ„γšγ‚Œγ‹γ‚’δ½Ώη”¨γ§γγΎγ™γ€‚" - -msgid "EdgeColorPanel.originalRadio.text" -msgstr "εŽŸεž‹" - -msgid "EdgeColorPanel.mixedRadio.text" -msgstr "混合" - -msgid "EdgeColorPanel.sourceRadio.text" -msgstr "γ‚½γƒΌγ‚Ή" - -msgid "EdgeColorPanel.targetRadio.text" -msgstr "γ‚ΏγƒΌγ‚²γƒƒγƒˆ" - -msgid "EdgeColorPanel.customRadio.text" -msgstr "γ‚«γ‚Ήγ‚Ώγƒ " - -msgid "DependantOriginalColorPanel.jXHeader1.description" -msgstr "ラベルγθ‰²γ‚’θ¨­εšγ—γΎγ™γ€‚γγ‚Œγ―θ‡ͺεˆ†γ(γ‚ͺγƒͺγ‚ΈγƒŠγƒ«)γ€γ‚«γ‚Ήγ‚Ώγƒ γ‚«γƒ©γƒΌγΎγŸγ―γγ‚ŒγγƒŽγƒΌγƒ‰/θΎΊγθ‰²γ‚’δ»˜γ‘γ‚‰γ‚ŒγΎγ™γ€‚" - -msgid "DependantOriginalColorPanel.originalRadio.text" -msgstr "εŽŸεž‹" - -msgid "DependantOriginalColorPanel.customRadio.text" -msgstr "γ‚«γ‚Ήγ‚Ώγƒ " - -# To change this template, choose Tools | Templates -# and open the template in the editor. -msgid "DependantOriginalColorPanel.jXHeader1.title" -msgstr "ラベルγθ‰²" - -msgid "DependantOriginalColorPanel.parentRadio.text" -msgstr "θ¦ͺ" - -msgid "DependantColorPanel.customRadio.text" -msgstr "γ‚«γ‚Ήγ‚Ώγƒ " - -# To change this template, choose Tools | Templates -# and open the template in the editor. -msgid "DependantColorPanel.jXHeader1.title" -msgstr "ε’ƒη•Œγθ‰²" - -msgid "DependantColorPanel.jXHeader1.description" -msgstr "γƒŽγƒΌγƒ‰γθ‰²γΎγŸγ―カスタムカラーγγ„γšγ‚Œγ‹γ§ε’ƒη•Œη·šγθ‰²γ‚’θ¨­εšγ—ます。" - -msgid "DependantColorPanel.parentRadio.text" -msgstr "θ¦ͺ" diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/org-gephi-desktop-preview-propertyeditors.pot b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/org-gephi-desktop-preview-propertyeditors.pot deleted file mode 100644 index 52ac235c76..0000000000 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/org-gephi-desktop-preview-propertyeditors.pot +++ /dev/null @@ -1,76 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -# To change this template, choose Tools | Templates -# and open the template in the editor. -msgid "EdgeColorPanel.jXHeader1.title" -msgstr "Edge Color" - -msgid "EdgeColorPanel.jXHeader1.description" -msgstr "" -"Configures the color of the edges. Edges can either a color on their own " -"(original) or uses incident nodes color." - -msgid "EdgeColorPanel.originalRadio.text" -msgstr "Original" - -msgid "EdgeColorPanel.mixedRadio.text" -msgstr "Mixed" - -msgid "EdgeColorPanel.sourceRadio.text" -msgstr "Source" - -msgid "EdgeColorPanel.targetRadio.text" -msgstr "Target" - -msgid "EdgeColorPanel.customRadio.text" -msgstr "Custom" - -msgid "DependantOriginalColorPanel.jXHeader1.description" -msgstr "" -"Configures the color of the label. It can have a color of it's own " -"(original), a custom color or it's node/edge color." - -msgid "DependantOriginalColorPanel.originalRadio.text" -msgstr "Original" - -msgid "DependantOriginalColorPanel.customRadio.text" -msgstr "Custom" - -# To change this template, choose Tools | Templates -# and open the template in the editor. -msgid "DependantOriginalColorPanel.jXHeader1.title" -msgstr "Label Color" - -msgid "DependantOriginalColorPanel.parentRadio.text" -msgstr "Parent" - -msgid "DependantColorPanel.customRadio.text" -msgstr "Custom" - -# To change this template, choose Tools | Templates -# and open the template in the editor. -msgid "DependantColorPanel.jXHeader1.title" -msgstr "Border Color" - -msgid "DependantColorPanel.jXHeader1.description" -msgstr "" -"Configures the border color with either the color of the node or a custom " -"color." - -msgid "DependantColorPanel.parentRadio.text" -msgstr "Parent" diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/pt_BR.po b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/pt_BR.po deleted file mode 100644 index 0272d7b7f9..0000000000 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/pt_BR.po +++ /dev/null @@ -1,72 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-03 14:37+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -# To change this template, choose Tools | Templates -# and open the template in the editor. -msgid "EdgeColorPanel.jXHeader1.title" -msgstr "Cor da aresta" - -msgid "EdgeColorPanel.jXHeader1.description" -msgstr "Configura a cor das arestas. As arestas podem possuir uma cor prΓ³pria (original) ou usar a cor de seus nΓ³s." - -msgid "EdgeColorPanel.originalRadio.text" -msgstr "Original" - -msgid "EdgeColorPanel.mixedRadio.text" -msgstr "Misturado" - -msgid "EdgeColorPanel.sourceRadio.text" -msgstr "Origem" - -msgid "EdgeColorPanel.targetRadio.text" -msgstr "Destino" - -msgid "EdgeColorPanel.customRadio.text" -msgstr "Personalizado" - -msgid "DependantOriginalColorPanel.jXHeader1.description" -msgstr "Configura a cor do rΓ³tulo. Os rΓ³tulos podem possuir uma cor prΓ³pria (original), personalizada ou a cor do nΓ³/aresta a que se referem." - -msgid "DependantOriginalColorPanel.originalRadio.text" -msgstr "Original" - -msgid "DependantOriginalColorPanel.customRadio.text" -msgstr "Personalizado" - -# To change this template, choose Tools | Templates -# and open the template in the editor. -msgid "DependantOriginalColorPanel.jXHeader1.title" -msgstr "Cor do rΓ³tulo" - -msgid "DependantOriginalColorPanel.parentRadio.text" -msgstr "Pai" - -msgid "DependantColorPanel.customRadio.text" -msgstr "Personalizado" - -# To change this template, choose Tools | Templates -# and open the template in the editor. -msgid "DependantColorPanel.jXHeader1.title" -msgstr "Cor da borda" - -msgid "DependantColorPanel.jXHeader1.description" -msgstr "Configura a cor da borda com a cor do nΓ³ ou uma cor personalizada." - -msgid "DependantColorPanel.parentRadio.text" -msgstr "Pai" diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/ru.po b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/ru.po deleted file mode 100644 index ce5214e4ed..0000000000 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/ru.po +++ /dev/null @@ -1,73 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 15:26+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -# To change this template, choose Tools | Templates -# and open the template in the editor. -msgid "EdgeColorPanel.jXHeader1.title" -msgstr "Π¦Π²Π΅Ρ‚ Ρ€Ρ‘Π±Π΅Ρ€" - -msgid "EdgeColorPanel.jXHeader1.description" -msgstr "Настройки Ρ†Π²Π΅Ρ‚Π° Ρ€Ρ‘Π±Π΅Ρ€. Π Ρ‘Π±Ρ€Π° ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ свой собствСнный Ρ†Π²Π΅Ρ‚ ΠΈΠ»ΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΎΡ‚ смСТных ΡƒΠ·Π»ΠΎΠ²." - -msgid "EdgeColorPanel.originalRadio.text" -msgstr "БобствСнный" - -msgid "EdgeColorPanel.mixedRadio.text" -msgstr "Π‘ΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹ΠΉ" - -msgid "EdgeColorPanel.sourceRadio.text" -msgstr "Π¦Π²Π΅Ρ‚ источника" - -msgid "EdgeColorPanel.targetRadio.text" -msgstr "Π¦Π²Π΅Ρ‚ Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°" - -msgid "EdgeColorPanel.customRadio.text" -msgstr "Ручная настройка" - -msgid "DependantOriginalColorPanel.jXHeader1.description" -msgstr "Настройки Ρ†Π²Π΅Ρ‚Π° ΠΌΠ΅Ρ‚ΠΎΠΊ. ΠœΠ΅Ρ‚ΠΊΠΈ ΠΌΠΎΠ³ΡƒΡ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ свой собствСнный Ρ†Π²Π΅Ρ‚ ΠΈΠ»ΠΈ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ ΠΎΡ‚ ΡƒΠ·Π»Π° ΠΈΠ»ΠΈ Ρ€Π΅Π±Ρ€Π°." - -msgid "DependantOriginalColorPanel.originalRadio.text" -msgstr "БобствСнный" - -msgid "DependantOriginalColorPanel.customRadio.text" -msgstr "Ручная настройка" - -# To change this template, choose Tools | Templates -# and open the template in the editor. -msgid "DependantOriginalColorPanel.jXHeader1.title" -msgstr "Π¦Π²Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΎΠΊ" - -msgid "DependantOriginalColorPanel.parentRadio.text" -msgstr "ΠΠ°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ" - -msgid "DependantColorPanel.customRadio.text" -msgstr "Ручная настройка" - -# To change this template, choose Tools | Templates -# and open the template in the editor. -msgid "DependantColorPanel.jXHeader1.title" -msgstr "Π¦Π²Π΅Ρ‚ Ρ€Π°ΠΌΠΎΠΊ ΠΌΠ΅Ρ‚ΠΎΠΊ" - -msgid "DependantColorPanel.jXHeader1.description" -msgstr "Настройки Ρ†Π²Π΅Ρ‚Π° Ρ€Π°ΠΌΠΎΠΊ ΠΌΠ΅Ρ‚ΠΎΠΊ -- ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΡ‚ ΡƒΠ·Π»Π° ΠΈΠ»ΠΈ Π·Π°Π΄Π°Ρ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ." - -msgid "DependantColorPanel.parentRadio.text" -msgstr "Ручная настройка" diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/zh_CN.po b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/zh_CN.po deleted file mode 100644 index 344b842054..0000000000 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/propertyeditors/zh_CN.po +++ /dev/null @@ -1,72 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:21+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -# To change this template, choose Tools | Templates -# and open the template in the editor. -msgid "EdgeColorPanel.jXHeader1.title" -msgstr "θΎΉι’œθ‰²" - -msgid "EdgeColorPanel.jXHeader1.description" -msgstr "θΎη½θΎΉηš„ι’œθ‰²γ€‚θΎΉε―δ»₯使用εƒδ»¬εŽŸε§‹ηš„ι’œθ‰²ζˆ–θ€…ε―ΉεΊ”θŠ‚η‚Ήηš„ι’œθ‰²γ€‚" - -msgid "EdgeColorPanel.originalRadio.text" -msgstr "εŽŸε§‹ηš„" - -msgid "EdgeColorPanel.mixedRadio.text" -msgstr "ζ··εˆηš„" - -msgid "EdgeColorPanel.sourceRadio.text" -msgstr "源" - -msgid "EdgeColorPanel.targetRadio.text" -msgstr "η›ζ ‡" - -msgid "EdgeColorPanel.customRadio.text" -msgstr "θ‡ͺεšδΉ‰" - -msgid "DependantOriginalColorPanel.jXHeader1.description" -msgstr "配η½ζ ‡ε·ι’œθ‰²γ€‚可δ»₯是εƒθ‡ͺε·±εŽŸε§‹ηš„ι’œθ‰²οΌŒθ‡ͺεšδΉ‰ι’œθ‰²ζˆ–θ€…εƒηš„θŠ‚η‚Ή/θΎΉηš„ι’œθ‰²γ€‚" - -msgid "DependantOriginalColorPanel.originalRadio.text" -msgstr "εŽŸε§‹ηš„" - -msgid "DependantOriginalColorPanel.customRadio.text" -msgstr "θ‡ͺεšδΉ‰" - -# To change this template, choose Tools | Templates -# and open the template in the editor. -msgid "DependantOriginalColorPanel.jXHeader1.title" -msgstr "ζ ‡ε·ι’œθ‰²" - -msgid "DependantOriginalColorPanel.parentRadio.text" -msgstr "爢对豑" - -msgid "DependantColorPanel.customRadio.text" -msgstr "θ‡ͺεšδΉ‰" - -# To change this template, choose Tools | Templates -# and open the template in the editor. -msgid "DependantColorPanel.jXHeader1.title" -msgstr "θΎΉη•Œι’œθ‰²" - -msgid "DependantColorPanel.jXHeader1.description" -msgstr "配η½θΎΉη•Œι’œθ‰²δΈΊθŠ‚η‚Ήι’œθ‰²ζˆ–θ€…θ‡ͺεšδΉ‰γ€‚" - -msgid "DependantColorPanel.parentRadio.text" -msgstr "爢对豑" diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/pt_BR.po b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/pt_BR.po deleted file mode 100644 index 04580f8831..0000000000 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/pt_BR.po +++ /dev/null @@ -1,125 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -# CΓ©lio Faria Jr. , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-12 12:44+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "CTL_PreviewAction" -msgstr "VisualizaΓ§Γ£o" - -msgid "CTL_PreviewSettingsAction" -msgstr "ConfiguraΓ§Γ΅es de visualizaΓ§Γ£o" - -msgid "CTL_PreviewSettingsTopComponent" -msgstr "ConfiguraΓ§Γ΅es de visualizaΓ§Γ£o" - -msgid "CTL_PreviewTopComponent" -msgstr "VisualizaΓ§Γ£o" - -msgid "HINT_PreviewSettingsTopComponent" -msgstr "ConfiguraΓ§Γ΅es de visualizaΓ§Γ£o" - -msgid "HINT_PreviewTopComponent" -msgstr "VisualizaΓ§Γ£o" - -msgid "OpenIDE-Module-Short-Description" -msgstr "VisualizaΓ§Γ£o e configuraΓ§Γ΅es de componentes de visualizaΓ§Γ£o" - -msgid "GenericColorizerPanel.CustomColorRadioButton.text" -msgstr "Cor Personalizada" - -msgid "PreviewNode.displayName" -msgstr "ConfiguraΓ§Γ΅es de visualizaΓ§Γ£o" - -msgid "PreviewSettingsTopComponent.savePreset.input" -msgstr "Nome" - -msgid "PreviewSettingsTopComponent.savePreset.input.title" -msgstr "ConfiguraΓ§Γ£o prΓ©-definida" - -msgid "PreviewSettingsTopComponent.savePreset.status" -msgstr "ConfiguraΓ§Γ£o prΓ©-definida {0} salva" - -msgid "PreviewTopComponent.bannerLabel.text" -msgstr "A Área de Trabalho foi atualizada. Deseja atualizar a visualizaΓ§Γ£o?" - -msgid "PreviewTopComponent.refreshButton.text" -msgstr "Atualizar" - -msgid "PreviewTopComponent.busyLabel.text" -msgstr "Atualizando..." - -msgid "PreviewSettingsTopComponent.saveButton.toolTipText" -msgstr "Salvar configuraΓ§Γ£o prΓ©-definida" - -msgid "PreviewSettingsTopComponent.ratioLabel.text" -msgstr "0" - -msgid "PreviewSettingsTopComponent.labelRatio.text" -msgstr "RelaΓ§Γ£o de previsΓ£o:" - -msgid "PreviewSettingsTopComponent.refreshButton.text" -msgstr "Atualizar" - -msgid "PreviewSettingsTopComponent.labelPreset.text" -msgstr "ConfiguraΓ§Γ£o prΓ©-definida" - -msgid "PreviewSettingsTopComponent.ratio.minimum" -msgstr "MΓ­nimo" - -msgid "PreviewSettingsTopComponent.propertySheetTab" -msgstr "ConfiguraΓ§Γ΅es" - -msgid "PreviewSettingsTopComponent.rendererManagerTab" -msgstr "Gerenciar renderizadores" - -msgid "PreviewTopComponent.backgroundButton.text" -msgstr "Fundo" - -msgid "PreviewTopComponent.resetZoomButton.text" -msgstr "Restaurar zoom" - -msgid "PreviewSettingsTopComponent.svgExportButton.text" -msgstr "SVG/PDF/PNG" - -msgid "PreviewSettingsTopComponent.labelExport.text" -msgstr "ExportaΓ§Γ£o:" - -msgid "PreviewSettingsTopComponent.svgExportButton.toolTipText" -msgstr "Exportar como SVG ou PDF" - -msgid "PreviewTopComponent.plusButton.toolTipText" -msgstr "Aumentar zoom" - -msgid "PreviewTopComponent.minusButton.toolTipText" -msgstr "Diminuir zoom" - -msgid "RendererManager.selectAllButton.text" -msgstr "Selecionar todos" - -msgid "RendererManager.unselectAllButon.text" -msgstr "Deselecionar todos" - -msgid "RendererManager.restoreOrderButton.text" -msgstr "Restaurar ordem de renderizadores" - -msgid "RendererManager.description1" -msgstr "Permite habilitar e desabilitar os renderizadores de prΓ©-visualizaΓ§Γ£o e configurar sua ordem de execuΓ§Γ£o" - -msgid "RendererManager.description2" -msgstr "Normalmente nΓ£o Γ© necessΓ‘rio fazer isto a menos que sua lista de plugins de renderizaΓ§Γ£o seja muito longa" diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/down.png b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/down.png deleted file mode 100755 index 377400ec01..0000000000 Binary files a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/down.png and /dev/null differ diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/info.png b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/info.png deleted file mode 100644 index 0cf1ec1771..0000000000 Binary files a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/info.png and /dev/null differ diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/preset.png b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/preset.png deleted file mode 100644 index fab14b4f5a..0000000000 Binary files a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/preset.png and /dev/null differ diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/preview.png b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/preview.png deleted file mode 100644 index e62feb043d..0000000000 Binary files a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/preview.png and /dev/null differ diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/refresh.png b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/refresh.png deleted file mode 100644 index fb26ddcd6b..0000000000 Binary files a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/refresh.png and /dev/null differ diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/save.png b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/save.png deleted file mode 100644 index 00f64e7052..0000000000 Binary files a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/save.png and /dev/null differ diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/settings.png b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/settings.png deleted file mode 100644 index 9f58d4fa20..0000000000 Binary files a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/settings.png and /dev/null differ diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/ui-check-box-uncheck.png b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/ui-check-box-uncheck.png deleted file mode 100644 index ba447358cc..0000000000 Binary files a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/ui-check-box-uncheck.png and /dev/null differ diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/ui-check-box.png b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/ui-check-box.png deleted file mode 100644 index 07f3522a9c..0000000000 Binary files a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/ui-check-box.png and /dev/null differ diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/up.png b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/up.png deleted file mode 100755 index b2a251bb3b..0000000000 Binary files a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/resources/up.png and /dev/null differ diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/ru.po b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/ru.po deleted file mode 100644 index b98335a913..0000000000 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/ru.po +++ /dev/null @@ -1,124 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-14 06:31+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "CTL_PreviewAction" -msgstr "ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€" - -msgid "CTL_PreviewSettingsAction" -msgstr "Настройки прСдпросмотра" - -msgid "CTL_PreviewSettingsTopComponent" -msgstr "Настройки прСдпросмотра" - -msgid "CTL_PreviewTopComponent" -msgstr "ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€" - -msgid "HINT_PreviewSettingsTopComponent" -msgstr "Настройки прСдпросмотра" - -msgid "HINT_PreviewTopComponent" -msgstr "ΠŸΡ€Π΅Π΄ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ прСдпросмотра ΠΈ Π΅Π³ΠΎ настроСк" - -msgid "GenericColorizerPanel.CustomColorRadioButton.text" -msgstr "Π ΡƒΡ‡Π½ΠΎΠΉ Π²Ρ‹Π±ΠΎΡ€ Ρ†Π²Π΅Ρ‚Π°" - -msgid "PreviewNode.displayName" -msgstr "Настройки прСдпросмотра" - -msgid "PreviewSettingsTopComponent.savePreset.input" -msgstr "Имя" - -msgid "PreviewSettingsTopComponent.savePreset.input.title" -msgstr "Набор настроСк" - -msgid "PreviewSettingsTopComponent.savePreset.status" -msgstr "Набор настроСк {0} сохранён" - -msgid "PreviewTopComponent.bannerLabel.text" -msgstr "Рабочая ΠΎΠ±Π»Π°ΡΡ‚ΡŒ Π±Ρ‹Π»Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½Π°. Π₯ΠΎΡ‚ΠΈΡ‚Π΅ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ прСдпросмотра?" - -msgid "PreviewTopComponent.refreshButton.text" -msgstr "ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ" - -msgid "PreviewTopComponent.busyLabel.text" -msgstr "ОбновлСниС..." - -msgid "PreviewSettingsTopComponent.saveButton.toolTipText" -msgstr "Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π½Π°Π±ΠΎΡ€ настроСк" - -msgid "PreviewSettingsTopComponent.ratioLabel.text" -msgstr "0" - -msgid "PreviewSettingsTopComponent.labelRatio.text" -msgstr "Π”Π΅Ρ‚Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ прСдпросмотра:" - -msgid "PreviewSettingsTopComponent.refreshButton.text" -msgstr "ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ" - -msgid "PreviewSettingsTopComponent.labelPreset.text" -msgstr "Наборы настроСк" - -msgid "PreviewSettingsTopComponent.ratio.minimum" -msgstr "ΠœΠΈΠ½ΠΈΠΌΡƒΠΌ" - -msgid "PreviewSettingsTopComponent.propertySheetTab" -msgstr "Настройки" - -msgid "PreviewSettingsTopComponent.rendererManagerTab" -msgstr "Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ отрисовщиками" - -msgid "PreviewTopComponent.backgroundButton.text" -msgstr "Π¦Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π°" - -msgid "PreviewTopComponent.resetZoomButton.text" -msgstr "Π‘Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΌΠ°ΡΡˆΡ‚Π°Π±" - -msgid "PreviewSettingsTopComponent.svgExportButton.text" -msgstr "SVG/PDF/PNG" - -msgid "PreviewSettingsTopComponent.labelExport.text" -msgstr "Экспорт:" - -msgid "PreviewSettingsTopComponent.svgExportButton.toolTipText" -msgstr "Π­ΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ SVG ΠΈΠ»ΠΈ PDF" - -msgid "PreviewTopComponent.plusButton.toolTipText" -msgstr "ΠŸΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚ΡŒ" - -msgid "PreviewTopComponent.minusButton.toolTipText" -msgstr "ΠžΡ‚Π΄Π°Π»ΠΈΡ‚ΡŒ" - -msgid "RendererManager.selectAllButton.text" -msgstr "Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ всС" - -msgid "RendererManager.unselectAllButon.text" -msgstr "ΠžΡ‡ΠΈΡΡ‚ΠΈΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€" - -msgid "RendererManager.restoreOrderButton.text" -msgstr "Π’ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ порядок отрисовщиков" - -msgid "RendererManager.description1" -msgstr "ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ/Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Ρ‚ΡŒ отрисовщики прСдпросмотра ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ порядком ΠΈΡ… выполнСния." - -msgid "RendererManager.description2" -msgstr "Π”Π°Π½Π½Ρ‹Π΅ настройки рСкомСндуСтся ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚ΠΎΠΌ случаС, ΠΊΠΎΠ³Π΄Π° список надстроСк с отрисовщиками слишком вырос." diff --git a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/zh_CN.po b/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/zh_CN.po deleted file mode 100644 index 204b35d4b2..0000000000 --- a/modules/DesktopPreview/src/main/resources/org/gephi/desktop/preview/zh_CN.po +++ /dev/null @@ -1,124 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-15 09:26+0000\n" -"Last-Translator: Xi-Nian Zuo \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "CTL_PreviewAction" -msgstr "ι’„θ§ˆ" - -msgid "CTL_PreviewSettingsAction" -msgstr "ι’„θ§ˆθΎη½" - -msgid "CTL_PreviewSettingsTopComponent" -msgstr "ι’„θ§ˆθΎη½" - -msgid "CTL_PreviewTopComponent" -msgstr "ι’„θ§ˆ" - -msgid "HINT_PreviewSettingsTopComponent" -msgstr "ι’„θ§ˆθΎη½" - -msgid "HINT_PreviewTopComponent" -msgstr "ι’„θ§ˆ" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ι’„θ§ˆε’Œι’„θ§ˆθΎη½ζˆεˆ†" - -msgid "GenericColorizerPanel.CustomColorRadioButton.text" -msgstr "θ‡ͺεšδΉ‰ι’œθ‰²" - -msgid "PreviewNode.displayName" -msgstr "ι’„θ§ˆθΎη½" - -msgid "PreviewSettingsTopComponent.savePreset.input" -msgstr "命名" - -msgid "PreviewSettingsTopComponent.savePreset.input.title" -msgstr "ι’„θΎ" - -msgid "PreviewSettingsTopComponent.savePreset.status" -msgstr "ι’„θΎ{0}保存" - -msgid "PreviewTopComponent.bannerLabel.text" -msgstr "ε·²ζ›΄ζ–°ε·₯δ½œι—΄γ€‚ζƒ³ζ›΄ζ–°ι’„θ§ˆε—οΌŸ" - -msgid "PreviewTopComponent.refreshButton.text" -msgstr "ζ›΄ζ–°" - -msgid "PreviewTopComponent.busyLabel.text" -msgstr "ζ­£εœ¨ζ›΄ζ–°β€¦β€¦" - -msgid "PreviewSettingsTopComponent.saveButton.toolTipText" -msgstr "δΏε­˜ι’„θΎ" - -msgid "PreviewSettingsTopComponent.ratioLabel.text" -msgstr "0" - -msgid "PreviewSettingsTopComponent.labelRatio.text" -msgstr "ι’„θ§ˆζ―”δΎ‹οΌš" - -msgid "PreviewSettingsTopComponent.refreshButton.text" -msgstr "εˆ·ζ–°" - -msgid "PreviewSettingsTopComponent.labelPreset.text" -msgstr "ι’„θΎη½" - -msgid "PreviewSettingsTopComponent.ratio.minimum" -msgstr "ζœ€ε°ε€Ό" - -msgid "PreviewSettingsTopComponent.propertySheetTab" -msgstr "θΎη½" - -msgid "PreviewSettingsTopComponent.rendererManagerTab" -msgstr "η‘η†ζΈ²ζŸ“ε™¨" - -msgid "PreviewTopComponent.backgroundButton.text" -msgstr "θƒŒζ™―" - -msgid "PreviewTopComponent.resetZoomButton.text" -msgstr "ι’„θΎηΌ©ζ”Ύ" - -msgid "PreviewSettingsTopComponent.svgExportButton.text" -msgstr "SVG/PDF/PNG" - -msgid "PreviewSettingsTopComponent.labelExport.text" -msgstr "θΎ“ε‡Ί" - -msgid "PreviewSettingsTopComponent.svgExportButton.toolTipText" -msgstr "θΎ“ε‡ΊδΈΊPDFζ ΌεΌηš„SVG" - -msgid "PreviewTopComponent.plusButton.toolTipText" -msgstr "ζ”Ύε€§" - -msgid "PreviewTopComponent.minusButton.toolTipText" -msgstr "缩小" - -msgid "RendererManager.selectAllButton.text" -msgstr "全选" - -msgid "RendererManager.unselectAllButon.text" -msgstr "撀销全选" - -msgid "RendererManager.restoreOrderButton.text" -msgstr "ζ’ε€ζΈ²ζŸ“ε™¨ι‘ΊεΊ" - -msgid "RendererManager.description1" -msgstr "允θΈδ½ εΌ€ε―/ε…³ι—­ι’„θ§ˆζΈ²ζŸ“ε™¨ε’Œι…η½δ»–δ»¬ηš„ζ‰§θ‘Œι‘ΊεΊ" - -msgid "RendererManager.description2" -msgstr "ι€šεΈΈδΈιœ€θ¦θΏ™δΈͺι™€ιžδ½ ζΈ²ζŸ“ε™¨ζ’δ»Άη‰Ήεˆ«ηš„ε€š" diff --git a/modules/DesktopPreview/src/test/java/org/gephi/desktop/preview/PersistenceProviderTest.java b/modules/DesktopPreview/src/test/java/org/gephi/desktop/preview/PersistenceProviderTest.java new file mode 100644 index 0000000000..2677cd7f9d --- /dev/null +++ b/modules/DesktopPreview/src/test/java/org/gephi/desktop/preview/PersistenceProviderTest.java @@ -0,0 +1,63 @@ +package org.gephi.desktop.preview; + +import org.gephi.desktop.preview.api.PreviewUIController; +import org.gephi.desktop.preview.utils.Utils; +import org.gephi.preview.api.PreviewPreset; +import org.gephi.preview.presets.DefaultCurved; +import org.gephi.project.api.Workspace; +import org.gephi.project.io.utils.GephiFormat; +import org.junit.After; +import org.junit.Assert; +import org.junit.Test; +import org.openide.util.Lookup; + +public class PersistenceProviderTest { + + private PreviewPreset savedPreset; + + @After + public void tearDown() { + if (savedPreset != null) { + PreviewUIController controller = Lookup.getDefault().lookup(PreviewUIController.class); + if (controller != null) { + controller.removePreset(savedPreset); + } + savedPreset = null; + } + } + + @Test + public void testDefaultPreset() throws Exception { + PreviewUIModelImpl previewUIModel = Utils.newPreviewUIModel(); + GephiFormat.testXMLPersistenceProvider(new PreviewUIPersistenceProvider(), previewUIModel.getWorkspace()); + } + + @Test + public void testOtherPreset() throws Exception { + PreviewUIModelImpl previewUIModel = Utils.newPreviewUIModel(); + previewUIModel.setCurrentPreset(new DefaultCurved()); + GephiFormat.testXMLPersistenceProvider(new PreviewUIPersistenceProvider(), previewUIModel.getWorkspace()); + } + + @Test + public void testUserPreset() throws Exception { + savedPreset = new PreviewPreset("Foo"); + PreviewUIController controller = Lookup.getDefault().lookup(PreviewUIController.class); + controller.addPreset(savedPreset); + + PreviewUIModelImpl previewUIModel = Utils.newPreviewUIModel(); + previewUIModel.setCurrentPreset(savedPreset); + GephiFormat.testXMLPersistenceProvider(new PreviewUIPersistenceProvider(), previewUIModel.getWorkspace()); + } + + @Test + public void testVisibilityRatio() throws Exception { + PreviewUIModelImpl previewUIModel = Utils.newPreviewUIModel(); + previewUIModel.setVisibilityRatio(0.5f); + + Workspace workspace = + GephiFormat.testXMLPersistenceProvider(new PreviewUIPersistenceProvider(), previewUIModel.getWorkspace()); + PreviewUIModelImpl newModel = workspace.getLookup().lookup(PreviewUIModelImpl.class); + Assert.assertEquals(previewUIModel.getVisibilityRatio(), newModel.getVisibilityRatio(), 0.0001f); + } +} diff --git a/modules/DesktopPreview/src/test/java/org/gephi/desktop/preview/utils/Utils.java b/modules/DesktopPreview/src/test/java/org/gephi/desktop/preview/utils/Utils.java new file mode 100644 index 0000000000..140376fc19 --- /dev/null +++ b/modules/DesktopPreview/src/test/java/org/gephi/desktop/preview/utils/Utils.java @@ -0,0 +1,14 @@ +package org.gephi.desktop.preview.utils; + +import org.gephi.desktop.preview.PreviewUIModelImpl; +import org.gephi.project.impl.WorkspaceImpl; + +public class Utils { + + public static PreviewUIModelImpl newPreviewUIModel() { + // WorkspaceImpl.initModels() auto-creates both PreviewModelImpl and PreviewUIModelImpl + // via the registered Controller SPI implementations. + WorkspaceImpl workspace = new WorkspaceImpl(null, 0); + return workspace.getLookup().lookup(PreviewUIModelImpl.class); + } +} diff --git a/modules/DesktopProgress/pom.xml b/modules/DesktopProgress/pom.xml deleted file mode 100644 index 7f89c63bb7..0000000000 --- a/modules/DesktopProgress/pom.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - 4.0.0 - - gephi-parent - org.gephi - 0.9-SNAPSHOT - ../.. - - - org.gephi - desktop-progress - 0.9-SNAPSHOT - nbm - - DesktopProgress - - - - ${project.groupId} - utils-longtask - - - org.netbeans.api - org-openide-awt - - - org.netbeans.api - org-openide-util-lookup - - - org.netbeans.api - org-openide-util - - - org.netbeans.api - org-netbeans-api-progress - - - org.netbeans.api - org-openide-filesystems - - - - - - - org.codehaus.mojo - nbm-maven-plugin - - - - - - - - diff --git a/modules/DesktopProgress/src/main/nbm/manifest.mf b/modules/DesktopProgress/src/main/nbm/manifest.mf deleted file mode 100644 index 974722e0ed..0000000000 --- a/modules/DesktopProgress/src/main/nbm/manifest.mf +++ /dev/null @@ -1,4 +0,0 @@ -Manifest-Version: 1.0 -OpenIDE-Module-Localizing-Bundle: org/gephi/desktop/progress/Bundle.properties -AutoUpdate-Essential-Module: true -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file diff --git a/modules/DesktopProgress/src/main/nbm/module.xml b/modules/DesktopProgress/src/main/nbm/module.xml deleted file mode 100644 index e4ece8bed9..0000000000 --- a/modules/DesktopProgress/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/Bundle.properties b/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/Bundle.properties deleted file mode 100644 index d330136c0c..0000000000 --- a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/Bundle.properties +++ /dev/null @@ -1,3 +0,0 @@ -OpenIDE-Module-Display-Category=Gephi UI -OpenIDE-Module-Name=Desktop Progress -OpenIDE-Module-Short-Description=Implement Progress Management and Netbeans bridge diff --git a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/Bundle_cs.properties b/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/Bundle_cs.properties deleted file mode 100644 index 94bdc5b45d..0000000000 --- a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/Bundle_cs.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-24 11\:31+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Short-Description=Zav\u00e9st spr\u00e1vu postupu a most Netbeans diff --git a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/Bundle_es.properties b/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/Bundle_es.properties deleted file mode 100644 index 60fbf6c1d2..0000000000 --- a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/Bundle_es.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:07+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Short-Description=Implementar la gesti\u00f3n de la barra de progreso y el puente para Netbeans diff --git a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/Bundle_fr.properties b/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/Bundle_fr.properties deleted file mode 100644 index 6c180e6359..0000000000 --- a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/Bundle_fr.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:07+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Impl\u00e9mente la gestion de la barre de progression et le pont vers NetBeans diff --git a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/Bundle_ja.properties b/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/Bundle_ja.properties deleted file mode 100644 index c6a7970f4c..0000000000 --- a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/Bundle_ja.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-19 08\:12+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u9032\u6357\u7ba1\u7406\u3068Netbeans\u306e\u30d6\u30ea\u30c3\u30b8\u3092\u5b9f\u88c5 diff --git a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/Bundle_pt_BR.properties b/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/Bundle_pt_BR.properties deleted file mode 100644 index 9f57ee3e5e..0000000000 --- a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/Bundle_pt_BR.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 17\:38+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Implementar gerenciamento de barra de progresso e liga\u00e7\u00e3o com o Netbeans diff --git a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/Bundle_ru.properties b/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/Bundle_ru.properties deleted file mode 100644 index 088bc31e3d..0000000000 --- a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/Bundle_ru.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-21 22\:43+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430 \u0438 \u0441\u0432\u044f\u0437\u0438 \u0441 Netbeans diff --git a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/Bundle_zh_CN.properties b/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/Bundle_zh_CN.properties deleted file mode 100644 index fc9a610f13..0000000000 --- a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/Bundle_zh_CN.properties +++ /dev/null @@ -1,8 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:15+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u5b9e\u65bd\u8fdb\u5ea6\u7ba1\u7406\u548cNetbeans\u6865\u63a5 diff --git a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/cs.po b/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/cs.po deleted file mode 100644 index 433aa016ba..0000000000 --- a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/cs.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-24 11:31+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ZavΓ©st sprΓ‘vu postupu a most Netbeans" diff --git a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/es.po b/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/es.po deleted file mode 100644 index a291f7fd61..0000000000 --- a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/es.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:07+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implementar la gestiΓ³n de la barra de progreso y el puente para Netbeans" diff --git a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/fr.po b/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/fr.po deleted file mode 100644 index 202260730c..0000000000 --- a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/fr.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:07+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplΓ©mente la gestion de la barre de progression et le pont vers NetBeans" diff --git a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/ja.po b/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/ja.po deleted file mode 100644 index 2ca86c8797..0000000000 --- a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/ja.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-19 08:12+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "進捗η‘理とNetbeansγγƒ–γƒͺッジをεŸθ£…" diff --git a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/org-gephi-desktop-progress.pot b/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/org-gephi-desktop-progress.pot deleted file mode 100644 index faa19a060d..0000000000 --- a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/org-gephi-desktop-progress.pot +++ /dev/null @@ -1,19 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implement Progress Management and Netbeans bridge" diff --git a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/pt_BR.po b/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/pt_BR.po deleted file mode 100644 index 94f3c535bc..0000000000 --- a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/pt_BR.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 17:38+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implementar gerenciamento de barra de progresso e ligaΓ§Γ£o com o Netbeans" diff --git a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/ru.po b/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/ru.po deleted file mode 100644 index 1aa305497b..0000000000 --- a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/ru.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-21 22:43+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "РСализация отобраТСния прогрСсса ΠΈ связи с Netbeans" diff --git a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/zh_CN.po b/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/zh_CN.po deleted file mode 100644 index 0ff1105faa..0000000000 --- a/modules/DesktopProgress/src/main/resources/org/gephi/desktop/progress/zh_CN.po +++ /dev/null @@ -1,21 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:15+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "εžζ–½θΏ›εΊ¦η‘η†ε’ŒNetbeansζ‘₯ζŽ₯" diff --git a/modules/DesktopProject/pom.xml b/modules/DesktopProject/pom.xml index 67b4eb8abc..9e5c1e98e1 100644 --- a/modules/DesktopProject/pom.xml +++ b/modules/DesktopProject/pom.xml @@ -4,13 +4,12 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. - org.gephi desktop-project - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm DesktopProject @@ -28,14 +27,26 @@ ${project.groupId} project-api + + ${project.groupId} + graph-api + ${project.groupId} ui-utils + + ${project.groupId} + ui-library-wrapper + ${project.groupId} utils-longtask + + ${project.groupId} + desktop-icons + org.netbeans.api org-openide-awt @@ -53,28 +64,36 @@ org-openide-windows - org-openide-util org.netbeans.api + org-openide-util - org-openide-util-lookup org.netbeans.api + org-openide-util-lookup org.netbeans.api org-openide-nodes + + org.netbeans.api + org-openide-modules + + + org.netbeans.api + org-openide-util-ui + - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin org.gephi.desktop.importer.api - org.gephi.desktop.project.api + org.gephi.desktop.project.actions diff --git a/modules/DesktopProject/src/main/java/org/gephi/desktop/importer/api/ImportControllerUI.java b/modules/DesktopProject/src/main/java/org/gephi/desktop/importer/api/ImportControllerUI.java index 64b9d3eeaf..0452813f23 100644 --- a/modules/DesktopProject/src/main/java/org/gephi/desktop/importer/api/ImportControllerUI.java +++ b/modules/DesktopProject/src/main/java/org/gephi/desktop/importer/api/ImportControllerUI.java @@ -38,7 +38,8 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.desktop.importer.api; import java.io.InputStream; @@ -46,26 +47,31 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.io.importer.api.Database; import org.gephi.io.importer.api.ImportController; import org.gephi.io.importer.spi.DatabaseImporter; -import org.gephi.io.importer.spi.SpigotImporter; +import org.gephi.io.importer.spi.WizardImporter; import org.openide.filesystems.FileObject; /** - * * @author Mathieu Bastian */ public interface ImportControllerUI { - public void importFile(FileObject fileObject); + void importFile(FileObject fileObject); + + void importFiles(FileObject[] fileObjects); + + void importStream(InputStream stream, String importerName); + + void importStream(InputStream stream, String streamName, String importerName); - public void importStream(InputStream stream, String importerName); + void importFile(Reader reader, String importerName); - public void importFile(Reader reader, String importerName); + void importFile(Reader reader, String fileName, String importerName); - public void importDatabase(Database database, DatabaseImporter importer); + void importDatabase(Database database, DatabaseImporter importer); - public void importDatabase(DatabaseImporter importer); + void importDatabase(DatabaseImporter importer); - public void importSpigot(SpigotImporter importer); + void importWizard(WizardImporter importer); - public ImportController getImportController(); + ImportController getImportController(); } diff --git a/modules/DesktopProject/src/main/java/org/gephi/desktop/project/Installer.java b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/Installer.java new file mode 100644 index 0000000000..1b7fc54ff0 --- /dev/null +++ b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/Installer.java @@ -0,0 +1,34 @@ +package org.gephi.desktop.project; + +import javax.swing.JOptionPane; +import org.gephi.project.api.ProjectController; +import org.openide.awt.Actions; +import org.openide.modules.ModuleInstall; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; +import org.openide.windows.WindowManager; + +public class Installer extends ModuleInstall { + + @Override + public void restored() { + ProjectControllerUIImpl projectControllerUI = Lookup.getDefault().lookup(ProjectControllerUIImpl.class); + projectControllerUI.loadProjects(); + } + + @Override + public boolean closing() { + ProjectControllerUIImpl projectControllerUI = Lookup.getDefault().lookup(ProjectControllerUIImpl.class); + + if (Lookup.getDefault().lookup(ProjectController.class).getCurrentProject() == null) { + //Close directly if no project open + projectControllerUI.saveProjects(); + return true; + } + boolean res = projectControllerUI.closeCurrentProject(); + if (res) { + projectControllerUI.saveProjects(); + } + return res; + } +} diff --git a/modules/DesktopProject/src/main/java/org/gephi/desktop/project/ProjectControllerUIImpl.java b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/ProjectControllerUIImpl.java index d77f1bbe99..b5828deea8 100644 --- a/modules/DesktopProject/src/main/java/org/gephi/desktop/project/ProjectControllerUIImpl.java +++ b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/ProjectControllerUIImpl.java @@ -39,37 +39,47 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.project; import java.io.File; -import java.util.logging.Level; -import java.util.logging.Logger; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JOptionPane; -import javax.swing.JPanel; import javax.swing.SwingUtilities; +import javax.swing.filechooser.FileFilter; import org.gephi.desktop.importer.api.ImportControllerUI; -import org.gephi.desktop.mrufiles.api.MostRecentFiles; -import org.gephi.desktop.project.api.ProjectControllerUI; import org.gephi.io.importer.api.FileType; +import org.gephi.io.importer.spi.FileImporterBuilder; +import org.gephi.lib.validation.DialogDescriptorWithValidation; +import org.gephi.project.api.GephiFormatException; +import org.gephi.project.api.LegacyGephiFormatException; import org.gephi.project.api.Project; import org.gephi.project.api.ProjectController; -import org.gephi.project.api.ProjectInformation; +import org.gephi.project.api.ProjectListener; import org.gephi.project.api.Workspace; -import org.gephi.project.api.WorkspaceProvider; -import org.gephi.project.spi.ProjectPropertiesUI; +import org.gephi.ui.project.NewWorkspace; +import org.gephi.ui.project.ProjectList; +import org.gephi.ui.project.ProjectPropertiesEditor; +import org.gephi.ui.project.WorkspacePropertiesEditor; import org.gephi.ui.utils.DialogFileFilter; -import org.gephi.utils.longtask.api.LongTaskErrorHandler; import org.gephi.utils.longtask.api.LongTaskExecutor; -import org.gephi.utils.longtask.api.LongTaskListener; -import org.gephi.utils.longtask.spi.LongTask; import org.openide.DialogDescriptor; import org.openide.DialogDisplayer; import org.openide.NotifyDescriptor; import org.openide.awt.StatusDisplayer; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileUtil; +import org.openide.modules.Places; +import org.openide.util.Exceptions; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.NbPreferences; @@ -77,12 +87,20 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.windows.WindowManager; /** - * * @author Mathieu Bastian */ -@ServiceProvider(service = ProjectControllerUI.class) -public class ProjectControllerUIImpl implements ProjectControllerUI { +@ServiceProvider(service = ProjectListener.class) +public class ProjectControllerUIImpl implements ProjectListener { + public static final String PROJECTS_PERSISTENCE_ENABLED = "ProjectsPersistence_Enabled"; + private static final boolean DEFAULT_PROJECTS_PERSISTENCE_ENABLED = true; + private static final String PROJECTS_FOLDER = "projects"; + private static final String PROJECTS_FILE= "projects.xml"; + //Project + private final ProjectController controller; + private final ImportControllerUI importControllerUI; + //Utilities + private final LongTaskExecutor longTaskExecutor; //Actions private boolean openProject = true; private boolean newProject = true; @@ -93,238 +111,298 @@ public class ProjectControllerUIImpl implements ProjectControllerUI { private boolean closeProject = false; private boolean newWorkspace = false; private boolean deleteWorkspace = false; - private boolean cleanWorkspace = false; private boolean duplicateWorkspace = false; - //Project - private ProjectController controller; - //Utilities - private final LongTaskExecutor longTaskExecutor; + private boolean renameWorkspace = false; public ProjectControllerUIImpl() { controller = Lookup.getDefault().lookup(ProjectController.class); + importControllerUI = Lookup.getDefault().lookup(ImportControllerUI.class); //Project IO executor longTaskExecutor = new LongTaskExecutor(true, "Project IO"); - longTaskExecutor.setDefaultErrorHandler(new LongTaskErrorHandler() { - public void fatalError(Throwable t) { - unlockProjectActions(); -// String txt = NbBundle.getMessage(ProjectControllerUIImpl.class, "ProjectControllerUI.error.open"); -// String message = txt + "\n\n" + t.getMessage(); -// if (t.getCause() != null) { -// message = txt + "\n\n" + t.getCause().getClass().getSimpleName() + " - " + t.getCause().getMessage(); -// } -// NotifyDescriptor.Message msg = new NotifyDescriptor.Message(message, NotifyDescriptor.WARNING_MESSAGE); -// DialogDisplayer.getDefault().notify(msg); - - Logger.getLogger("").log(Level.SEVERE, "", t.getCause()); + longTaskExecutor.setDefaultErrorHandler(t -> { + unlockProjectActions(); + + if (t instanceof LegacyGephiFormatException || t instanceof GephiFormatException) { + NotifyDescriptor.Message msg = + new NotifyDescriptor.Message(t.getLocalizedMessage(), NotifyDescriptor.WARNING_MESSAGE); + DialogDisplayer.getDefault().notify(msg); } - }); - longTaskExecutor.setLongTaskListener(new LongTaskListener() { - public void taskFinished(LongTask task) { - unlockProjectActions(); + + if (!(t instanceof LegacyGephiFormatException)) { + Exceptions.printStackTrace(t); } }); + longTaskExecutor.setLongTaskListener(task -> unlockProjectActions()); } - private void saveProject(Project project, File file) { + @Override + public void lock() { lockProjectActions(); + } - final Runnable saveTask = controller.saveProject(project, file); - final String fileName = file.getName(); - Runnable saveRunnable = new Runnable() { - public void run() { - saveTask.run(); - //Status line - StatusDisplayer.getDefault().setStatusText(NbBundle.getMessage(ProjectControllerUIImpl.class, "ProjectControllerUI.status.saved", fileName)); - } - }; - if (saveTask instanceof LongTask) { - longTaskExecutor.execute((LongTask) saveTask, saveRunnable); - } else { - longTaskExecutor.execute(null, saveRunnable); + @Override + public void unlock() { + unlockProjectActions(); + } + + @Override + public void saved(Project project) { + SwingUtilities.invokeLater(() -> { + //Status line + StatusDisplayer.getDefault().setStatusText( + NbBundle.getMessage(ProjectControllerUIImpl.class, "ProjectControllerUI.status.saved", + project.getFileName())); + }); + unlockProjectActions(); + updateTitleBar(project); + + //Persist projects so the last opened is refreshed + saveProjects(); + } + + @Override + public void error(Project project, Throwable t) { + unlockProjectActions(); + +// Exceptions.printStackTrace(throwable); +// NotifyDescriptor.Message msg = new NotifyDescriptor.Message( +// NbBundle.getMessage(ProjectControllerUIImpl.class, "OpenProject.defaulterror"), +// NotifyDescriptor.WARNING_MESSAGE); +// DialogDisplayer.getDefault().notify(msg); + + if (t instanceof LegacyGephiFormatException || t instanceof GephiFormatException) { + NotifyDescriptor.Message msg = + new NotifyDescriptor.Message(t.getLocalizedMessage(), NotifyDescriptor.WARNING_MESSAGE); + DialogDisplayer.getDefault().notify(msg); } - //Save MRU - MostRecentFiles mostRecentFiles = Lookup.getDefault().lookup(MostRecentFiles.class); - mostRecentFiles.addFile(file.getAbsolutePath()); + if (!(t instanceof LegacyGephiFormatException)) { + Exceptions.printStackTrace(t); + } + updateTitleBar(project); } - public void saveProject() { + @Override + public void opened(Project project) { + SwingUtilities.invokeLater(() -> { + //Status line + StatusDisplayer.getDefault().setStatusText( + NbBundle.getMessage(ProjectControllerUIImpl.class, "ProjectControllerUI.status.opened", + !project.getFileName().isEmpty() ? project.getFileName() : project.getName())); + }); + unlockProjectActions(); + updateTitleBar(project); + + //Persist projects so the last opened is refreshed + saveProjects(); + } + + @Override + public void closed(Project project) { + unlockProjectActions(); + updateTitleBar(project); + } + + @Override + public void changed(Project project) { + unlockProjectActions(); + updateTitleBar(project); + } + + private void updateTitleBar(Project project) { + //Modifying Title bar + SwingUtilities.invokeLater(() -> { + JFrame frame = (JFrame) WindowManager.getDefault().getMainWindow(); + String title; + if (project == null || project.isClosed()) { + title = getCurrentVersion(); + } else { + title = getCurrentVersion() + " - " + project.getName(); + } + if (!frame.getTitle().equals(title)) { + frame.setTitle(title); + } + }); + } + + private Future saveProject(Project project, File file) { + + + return longTaskExecutor.execute(null, new Callable() { + @Override + public Void call() throws Exception { + controller.saveProject(project, file); + return null; + } + }); + } + + public Future saveProject() { Project project = controller.getCurrentProject(); - if (project.getLookup().lookup(ProjectInformation.class).hasFile()) { - File file = project.getLookup().lookup(ProjectInformation.class).getFile(); - saveProject(project, file); + if (project.hasFile()) { + return saveProject(project, project.getFile()); } else { - saveAsProject(); + return saveAsProject(); } } - public void saveAsProject() { + public Future saveAsProject() { final String LAST_PATH = "SaveAsProject_Last_Path"; final String LAST_PATH_DEFAULT = "SaveAsProject_Last_Path_Default"; - DialogFileFilter filter = new DialogFileFilter(NbBundle.getMessage(ProjectControllerUIImpl.class, "SaveAsProject_filechooser_filter")); + DialogFileFilter filter = new DialogFileFilter( + NbBundle.getMessage(ProjectControllerUIImpl.class, "SaveAsProject_filechooser_filter")); filter.addExtension(".gephi"); //Get last directory String lastPathDefault = NbPreferences.forModule(ProjectControllerUIImpl.class).get(LAST_PATH_DEFAULT, null); String lastPath = NbPreferences.forModule(ProjectControllerUIImpl.class).get(LAST_PATH, lastPathDefault); + File lastPathDir = null; + if (lastPath != null) { + lastPathDir = new File(lastPath).getParentFile(); + while (lastPathDir != null && !lastPathDir.exists()) { + lastPathDir = lastPathDir.getParentFile(); + } + } + //File chooser - final JFileChooser chooser = new JFileChooser(lastPath); + final JFileChooser chooser = new JFileChooser(lastPathDir) { + @Override + public void approveSelection() { + if (canExport(this)) { + super.approveSelection(); + } + } + }; chooser.addChoosableFileFilter(filter); + + if (lastPathDir != null && lastPathDir.exists() && lastPathDir.isDirectory()) { + chooser.setSelectedFile(new File(lastPath)); + } + int returnFile = chooser.showSaveDialog(null); if (returnFile == JFileChooser.APPROVE_OPTION) { File file = chooser.getSelectedFile(); + file = FileUtil.normalizeFile(file); - //Save last path + // Save last path NbPreferences.forModule(ProjectControllerUIImpl.class).put(LAST_PATH, file.getAbsolutePath()); - //File management - try { - if (!file.getPath().endsWith(".gephi")) { - file = new File(file.getPath() + ".gephi"); + // Save file + return saveProject(controller.getCurrentProject(), file); + } + return CompletableFuture.completedFuture(null); + } + + private boolean canExport(JFileChooser chooser) { + File file = chooser.getSelectedFile(); + + if (!file.getPath().endsWith(".gephi")) { + file = new File(file.getPath() + ".gephi"); + chooser.setSelectedFile(file); + } + + try { + if (!file.exists()) { + if (!file.createNewFile()) { + String failMsg = NbBundle.getMessage( + ProjectControllerUIImpl.class, + "SaveAsProject_SaveFailed", new Object[] {file.getPath()}); + JOptionPane.showMessageDialog(null, failMsg); + return false; } - if (!file.exists()) { - if (!file.createNewFile()) { - String failMsg = NbBundle.getMessage( - ProjectControllerUIImpl.class, - "SaveAsProject_SaveFailed", new Object[]{file.getPath()}); - JOptionPane.showMessageDialog(null, failMsg); - return; - } - } else { - String overwriteMsg = NbBundle.getMessage( - ProjectControllerUIImpl.class, - "SaveAsProject_Overwrite", new Object[]{file.getPath()}); - if (JOptionPane.showConfirmDialog(null, overwriteMsg) != JOptionPane.OK_OPTION) { - return; - } + } else { + String overwriteMsg = NbBundle.getMessage( + ProjectControllerUIImpl.class, + "SaveAsProject_Overwrite", new Object[] {file.getPath()}); + if (JOptionPane.showConfirmDialog(chooser, overwriteMsg) != JOptionPane.OK_OPTION) { + return false; } - file = FileUtil.normalizeFile(file); - final String SaveAsFileName = file.getName(); - //File exist now, Save project - Project project = controller.getCurrentProject(); - saveProject(project, file); - - //Modifying Title bar - SwingUtilities.invokeLater(new Runnable() { - public void run() { - JFrame frame = (JFrame) WindowManager.getDefault().getMainWindow(); - String title = frame.getTitle(); - title = title.substring(0, title.indexOf('-') - 1) + " - " + SaveAsFileName; - frame.setTitle(title); - } - }); - - } catch (Exception e) { - Logger.getLogger("").log(Level.WARNING, "", e); } + } catch (IOException ex) { + NotifyDescriptor.Message msg = + new NotifyDescriptor.Message(ex.getMessage(), NotifyDescriptor.WARNING_MESSAGE); + DialogDisplayer.getDefault().notifyLater(msg); + return false; } + + return true; } public boolean closeCurrentProject() { if (controller.getCurrentProject() != null) { - //Save ? String messageBundle = NbBundle.getMessage(ProjectControllerUIImpl.class, "CloseProject_confirm_message"); String titleBundle = NbBundle.getMessage(ProjectControllerUIImpl.class, "CloseProject_confirm_title"); String saveBundle = NbBundle.getMessage(ProjectControllerUIImpl.class, "CloseProject_confirm_save"); - String doNotSaveBundle = NbBundle.getMessage(ProjectControllerUIImpl.class, "CloseProject_confirm_doNotSave"); + String doNotSaveBundle = + NbBundle.getMessage(ProjectControllerUIImpl.class, "CloseProject_confirm_doNotSave"); String cancelBundle = NbBundle.getMessage(ProjectControllerUIImpl.class, "CloseProject_confirm_cancel"); NotifyDescriptor msg = new NotifyDescriptor(messageBundle, titleBundle, - NotifyDescriptor.YES_NO_CANCEL_OPTION, - NotifyDescriptor.INFORMATION_MESSAGE, - new Object[]{saveBundle, doNotSaveBundle, cancelBundle}, saveBundle); + NotifyDescriptor.YES_NO_CANCEL_OPTION, + NotifyDescriptor.INFORMATION_MESSAGE, + new Object[] {saveBundle, doNotSaveBundle, cancelBundle}, saveBundle); Object result = DialogDisplayer.getDefault().notify(msg); if (result == saveBundle) { - saveProject(); + Future saveTask = saveProject(); + if(saveTask !=null){ + try { + saveTask.get(); + } catch (InterruptedException | ExecutionException ex) { + Exceptions.printStackTrace(ex); + } + } } else if (result == cancelBundle) { return false; } controller.closeCurrentProject(); - - //Actions - saveProject = false; - saveAsProject = false; - projectProperties = false; - closeProject = false; - newWorkspace = false; - deleteWorkspace = false; - cleanWorkspace = false; - duplicateWorkspace = false; - - //Title bar - SwingUtilities.invokeLater(new Runnable() { - public void run() { - JFrame frame = (JFrame) WindowManager.getDefault().getMainWindow(); - String title = frame.getTitle(); - title = title.substring(0, title.indexOf('-') - 1); - frame.setTitle(title); - } - }); } return true; } - public void openProject(File file) { - if (controller.getCurrentProject() != null) { - if (!closeCurrentProject()) { - return; - } + public void openProject(Project project) { + if (!project.hasFile()) { + NotifyDescriptor.Message msg = new NotifyDescriptor.Message( + NbBundle.getMessage(ProjectControllerUIImpl.class, + "ProjectControllerUI.error.noFileAssociated", project.getName()), + NotifyDescriptor.WARNING_MESSAGE); + DialogDisplayer.getDefault().notify(msg); + return; } - loadProject(file); - } - - private void loadProject(File file) { - lockProjectActions(); - - final Runnable loadTask = controller.openProject(file); - final String fileName = file.getName(); - Runnable loadRunnable = new Runnable() { - public void run() { - loadTask.run(); - SwingUtilities.invokeLater(new Runnable() { - public void run() { - JFrame frame = (JFrame) WindowManager.getDefault().getMainWindow(); - String title = frame.getTitle() + " - " + fileName; - frame.setTitle(title); - } - }); - //Status line - StatusDisplayer.getDefault().setStatusText(NbBundle.getMessage(ProjectControllerUIImpl.class, "ProjectControllerUI.status.opened", fileName)); + longTaskExecutor.execute(null, () -> { + if (controller.getCurrentProject() != null) { + if (!closeCurrentProject()) { + return; + } } - }; - if (loadTask instanceof LongTask) { - longTaskExecutor.execute((LongTask) loadTask, loadRunnable); - } else { - longTaskExecutor.execute(null, loadRunnable); - } - - //Save MRU - MostRecentFiles mostRecentFiles = Lookup.getDefault().lookup(MostRecentFiles.class); - mostRecentFiles.addFile(file.getAbsolutePath()); + controller.openProject(project); + }); } - public void renameProject(final String name) { - controller.renameProject(controller.getCurrentProject(), name); - - //Title bar - SwingUtilities.invokeLater(new Runnable() { - public void run() { - JFrame frame = (JFrame) WindowManager.getDefault().getMainWindow(); - String title = frame.getTitle(); - title = title.substring(0, title.indexOf('-') - 1); - title += " - " + name; - frame.setTitle(title); + public void openProject(File file) { + longTaskExecutor.execute(null, () -> { + if (controller.getCurrentProject() != null) { + if (!closeCurrentProject()) { + return; + } } + controller.openProject(file); }); } - public boolean canCleanWorkspace() { - return cleanWorkspace; + public void removeProject(Project project) { + longTaskExecutor.execute(null, () -> { + if (controller.getCurrentProject() == project) { + if (!closeCurrentProject()) { + return; + } + } + controller.removeProject(project); + }); } public boolean canCloseProject() { @@ -347,6 +425,10 @@ public boolean canDuplicateWorkspace() { return duplicateWorkspace; } + public boolean canRenameWorkspace() { + return renameWorkspace; + } + public boolean canOpenFile() { return openFile; } @@ -372,8 +454,9 @@ private void lockProjectActions() { openFile = false; newWorkspace = false; deleteWorkspace = false; - cleanWorkspace = false; duplicateWorkspace = false; + renameWorkspace = false; + projectProperties = false; } private void unlockProjectActions() { @@ -383,10 +466,10 @@ private void unlockProjectActions() { closeProject = true; newWorkspace = true; projectProperties = true; - if (controller.getCurrentProject().getLookup().lookup(WorkspaceProvider.class).hasCurrentWorkspace()) { + if (controller.getCurrentProject().hasCurrentWorkspace()) { deleteWorkspace = true; - cleanWorkspace = true; duplicateWorkspace = true; + renameWorkspace = true; } } openProject = true; @@ -396,19 +479,85 @@ private void unlockProjectActions() { public void projectProperties() { Project project = controller.getCurrentProject(); - ProjectPropertiesUI ui = Lookup.getDefault().lookup(ProjectPropertiesUI.class); - if (ui != null) { - JPanel panel = ui.getPanel(); - ui.setup(project); - DialogDescriptor dd = new DialogDescriptor(panel, NbBundle.getMessage(ProjectControllerUIImpl.class, "ProjectProperties_dialog_title")); - Object result = DialogDisplayer.getDefault().notify(dd); - if (result == NotifyDescriptor.OK_OPTION) { - ui.unsetup(project); - } + ProjectPropertiesEditor panel = new ProjectPropertiesEditor(); + panel.load(project); + + DialogDescriptor dd = DialogDescriptorWithValidation.dialog(ProjectPropertiesEditor.createValidationPanel(panel), + NbBundle.getMessage(ProjectControllerUIImpl.class, "ProjectProperties_dialog_title")) ; + Object result = DialogDisplayer.getDefault().notify(dd); + if (result == NotifyDescriptor.OK_OPTION) { + panel.save(project); + } + } + + public void workspaceProperties() { + Workspace workspace = controller.getCurrentWorkspace(); + WorkspacePropertiesEditor panel = new WorkspacePropertiesEditor(); + panel.setup(workspace); + + DialogDescriptor dd = DialogDescriptorWithValidation + .dialog(WorkspacePropertiesEditor.createValidationPanel(panel), + NbBundle.getMessage(ProjectControllerUIImpl.class, "WorkspaceProperties_dialog_title")); + Object result = DialogDisplayer.getDefault().notify(dd); + if (result == NotifyDescriptor.OK_OPTION) { + panel.unsetup(workspace); } } + public void manageProjects() { + ProjectList panel = new ProjectList(); + DialogDescriptor dd = new DialogDescriptor(panel, + NbBundle.getMessage(ProjectControllerUIImpl.class, "ManageProjects_dialog_title")); + dd.setOptions(new Object[] {NotifyDescriptor.CLOSED_OPTION}); + DialogDisplayer.getDefault().notify(dd); + } + public void openFile() { + openFile(null); + } + + public void openFile(FileImporterBuilder[] builders) { + List filters = new ArrayList<>(); + + DialogFileFilter graphFilter = + new DialogFileFilter(NbBundle.getMessage(getClass(), "OpenFile_filechooser_graphfilter")); + + List fileTypes; + if (builders != null) { + fileTypes = new ArrayList<>(); + + for (FileImporterBuilder builder : builders) { + fileTypes.addAll(Arrays.asList(builder.getFileTypes())); + } + } else { + DialogFileFilter gephiFilter = new DialogFileFilter( + NbBundle.getMessage(ProjectControllerUIImpl.class, "OpenProject_filechooser_filter")); + gephiFilter.addExtension(".gephi"); + + filters.add(gephiFilter); + + graphFilter.addExtension(".gephi"); + fileTypes = Arrays.asList(importControllerUI.getImportController().getFileTypes()); + } + + for (FileType fileType : fileTypes) { + DialogFileFilter dialogFileFilter = new DialogFileFilter(fileType.getName()); + dialogFileFilter.addExtensions(fileType.getExtensions()); + filters.add(dialogFileFilter); + + graphFilter.addExtensions(fileType.getExtensions()); + } + DialogFileFilter zipFileFilter = + new DialogFileFilter(NbBundle.getMessage(getClass(), "OpenFile_filechooser_zipfilter")); + zipFileFilter.addExtensions(new String[] {".zip", ".gz", ".bz2"}); + + filters.add(graphFilter); + filters.add(zipFileFilter); + + openFile(filters.toArray(new FileFilter[0]), null); + } + + private void openFile(FileFilter[] fileFilters, FileFilter initialFilter) { final String LAST_PATH = "OpenFile_Last_Path"; final String LAST_PATH_DEFAULT = "OpenFile_Last_Path_Default"; @@ -418,123 +567,183 @@ public void openFile() { //Init dialog final JFileChooser chooser = new JFileChooser(lastPath); - DialogFileFilter gephiFilter = new DialogFileFilter(NbBundle.getMessage(ProjectControllerUIImpl.class, "OpenProject_filechooser_filter")); - gephiFilter.addExtension(".gephi"); + chooser.setMultiSelectionEnabled(true); - DialogFileFilter graphFilter = new DialogFileFilter(NbBundle.getMessage(getClass(), "OpenFile_filechooser_graphfilter")); - graphFilter.addExtension(".gephi"); - - ImportControllerUI importController = Lookup.getDefault().lookup(ImportControllerUI.class); - for (FileType fileType : importController.getImportController().getFileTypes()) { - DialogFileFilter dialogFileFilter = new DialogFileFilter(fileType.getName()); - dialogFileFilter.addExtensions(fileType.getExtensions()); - chooser.addChoosableFileFilter(dialogFileFilter); + for (FileFilter fileFilter : fileFilters) { + chooser.addChoosableFileFilter(fileFilter); + } - graphFilter.addExtensions(fileType.getExtensions()); + if (initialFilter != null) { + chooser.setFileFilter(initialFilter); } - DialogFileFilter zipFileFilter = new DialogFileFilter(NbBundle.getMessage(getClass(), "OpenFile_filechooser_zipfilter")); - zipFileFilter.addExtensions(new String[]{".zip", ".gz", ".bz2"}); - chooser.addChoosableFileFilter(zipFileFilter); - chooser.addChoosableFileFilter(gephiFilter); - chooser.addChoosableFileFilter(graphFilter); //Open dialog int returnFile = chooser.showOpenDialog(null); if (returnFile == JFileChooser.APPROVE_OPTION) { - File file = chooser.getSelectedFile(); - file = FileUtil.normalizeFile(file); - FileObject fileObject = FileUtil.toFileObject(file); + File[] files = chooser.getSelectedFiles(); + List fileObjects = new ArrayList<>(); - //Save last path - NbPreferences.forModule(ProjectControllerUIImpl.class).put(LAST_PATH, file.getAbsolutePath()); + File gephiFile = null; + for (File file : files) { + file = FileUtil.normalizeFile(file); + FileObject fileObject = FileUtil.toFileObject(file); - if (fileObject.getExt().equalsIgnoreCase("gephi")) { - //Project - if (controller.getCurrentProject() != null) { - if (!closeCurrentProject()) { + if (fileObject == null) { + NotifyDescriptor.Message msg = new NotifyDescriptor.Message(NbBundle + .getMessage(ProjectControllerUIImpl.class, "ProjectControllerUI.error.fileNotAccessible", + file.getName()), NotifyDescriptor.ERROR_MESSAGE); + DialogDisplayer.getDefault().notify(msg); + return; + } + + fileObjects.add(fileObject); + + if (fileObject.getExt().equalsIgnoreCase("gephi")) { + if (gephiFile != null) { + NotifyDescriptor.Message msg = new NotifyDescriptor.Message(NbBundle + .getMessage(ProjectControllerUIImpl.class, "ProjectControllerUI.error.multipleGephi"), + NotifyDescriptor.ERROR_MESSAGE); + DialogDisplayer.getDefault().notify(msg); return; + } else { + gephiFile = file; } } - try { - loadProject(file); - } catch (Exception ew) { - ew.printStackTrace(); - NotifyDescriptor.Message msg = new NotifyDescriptor.Message(NbBundle.getMessage(ProjectControllerUIImpl.class, "OpenProject.defaulterror"), NotifyDescriptor.WARNING_MESSAGE); - DialogDisplayer.getDefault().notify(msg); - } + //Save last path + NbPreferences.forModule(ProjectControllerUIImpl.class).put(LAST_PATH, file.getAbsolutePath()); + } + + + if (gephiFile != null) { + //Project + File finalGephiFile = gephiFile; + longTaskExecutor.execute(null, () -> { + if (controller.getCurrentProject() != null) { + if (!closeCurrentProject()) { + return; + } + } + controller.openProject(finalGephiFile); + }); } else { //Import - importController.importFile(fileObject); + importControllerUI.importFiles(fileObjects.toArray(new FileObject[0])); } } } + public Project getCurrentProject() { + return controller.getCurrentProject(); + } + public Project newProject() { if (closeCurrentProject()) { - controller.newProject(); - final Project project = controller.getCurrentProject(); - - SwingUtilities.invokeLater(new Runnable() { - public void run() { - JFrame frame = (JFrame) WindowManager.getDefault().getMainWindow(); - String title = frame.getTitle() + " - " + project.getLookup().lookup(ProjectInformation.class).getName(); - frame.setTitle(title); - } - }); - - unlockProjectActions(); - return project; + return controller.newProject(); } return null; } public void closeProject() { - if (closeCurrentProject()) { - controller.closeCurrentProject(); - } + closeCurrentProject(); } public Workspace newWorkspace() { return controller.newWorkspace(controller.getCurrentProject()); } - public void cleanWorkspace() { - controller.cleanWorkspace(controller.getCurrentWorkspace()); + public void newWorkspaceWithSettings() { + NewWorkspace panel = new NewWorkspace(); + panel.setup(); + + DialogDescriptor dd = DialogDescriptorWithValidation + .dialog(NewWorkspace.createValidationPanel(panel), + NbBundle.getMessage(ProjectControllerUIImpl.class, "NewWorkspace_dialog_title")); + Object result = DialogDisplayer.getDefault().notify(dd); + if (result == NotifyDescriptor.OK_OPTION) { + panel.unsetup(); + } } public void deleteWorkspace() { - if (controller.getCurrentProject().getLookup().lookup(WorkspaceProvider.class).getWorkspaces().length == 1) { - //Close project - //Actions - saveProject = false; - saveAsProject = false; - projectProperties = false; - closeProject = false; - newWorkspace = false; - deleteWorkspace = false; - cleanWorkspace = false; - duplicateWorkspace = false; - - //Title bar - SwingUtilities.invokeLater(new Runnable() { - public void run() { - JFrame frame = (JFrame) WindowManager.getDefault().getMainWindow(); - String title = frame.getTitle(); - title = title.substring(0, title.indexOf('-') - 1); - frame.setTitle(title); - } - }); + deleteWorkspace(controller.getCurrentWorkspace()); + } + + public void deleteWorkspace(Workspace workspace) { + String message = + NbBundle.getMessage(ProjectControllerUIImpl.class, "DeleteWorkspace_confirm_message"); + String title = NbBundle.getMessage(ProjectControllerUIImpl.class, "DeleteWorkspace_confirm_title"); + NotifyDescriptor dd = new NotifyDescriptor(message, title, + NotifyDescriptor.YES_NO_OPTION, + NotifyDescriptor.QUESTION_MESSAGE, null, null); + Object retType = DialogDisplayer.getDefault().notify(dd); + if (retType == NotifyDescriptor.YES_OPTION) { + controller.deleteWorkspace(workspace); + } + } + + public void deleteWorkspaces(List workspaces) { + String message = + NbBundle.getMessage(ProjectControllerUIImpl.class, "DeleteWorkspaces_confirm_message", workspaces.size()); + String title = NbBundle.getMessage(ProjectControllerUIImpl.class, "DeleteWorkspaces_confirm_title"); + NotifyDescriptor dd = new NotifyDescriptor(message, title, + NotifyDescriptor.YES_NO_OPTION, + NotifyDescriptor.QUESTION_MESSAGE, null, null); + Object retType = DialogDisplayer.getDefault().notify(dd); + if (retType == NotifyDescriptor.YES_OPTION) { + for (Workspace workspace : workspaces) { + controller.deleteWorkspace(workspace); + } } - controller.deleteWorkspace(controller.getCurrentWorkspace()); } public void renameWorkspace(String name) { controller.renameWorkspace(controller.getCurrentWorkspace(), name); } - public Workspace duplicateWorkspace() { - return controller.duplicateWorkspace(controller.getCurrentWorkspace()); + public void duplicateWorkspace() { + longTaskExecutor.execute(null, () -> { + controller.duplicateWorkspace(controller.getCurrentWorkspace()); + }); + } + + private String getCurrentVersion() { + return NbBundle.getBundle("org.netbeans.core.startup.Bundle").getString("currentVersion") + .replaceAll("( [0-9]{12})$", ""); + } + + private File getProjectsFile() { + File folder = new File(Places.getUserDirectory(), PROJECTS_FOLDER); + if (!folder.exists()) { + folder.mkdirs(); + } + return new File(folder, PROJECTS_FILE); + } + + public void loadProjects() { + if(NbPreferences.forModule(Installer.class).getBoolean(PROJECTS_PERSISTENCE_ENABLED, DEFAULT_PROJECTS_PERSISTENCE_ENABLED)) { + File file = getProjectsFile(); + if (file.exists()) { + ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); + try { + pc.getProjects().loadProjects(file); + } catch (IOException e) { + Exceptions.printStackTrace(e); + } + } + } + } + + public void saveProjects() { + if(NbPreferences.forModule(Installer.class).getBoolean(PROJECTS_PERSISTENCE_ENABLED, DEFAULT_PROJECTS_PERSISTENCE_ENABLED)) { + File file = getProjectsFile(); + ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); + try { + pc.getProjects().saveProjects(file); + } catch (IOException e) { + Exceptions.printStackTrace(e); + } + } } } diff --git a/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/CloseProject.java b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/CloseProject.java new file mode 100644 index 0000000000..fc2d427124 --- /dev/null +++ b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/CloseProject.java @@ -0,0 +1,74 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. +*/ + +package org.gephi.desktop.project.actions; + +import java.awt.event.ActionEvent; +import javax.swing.AbstractAction; +import org.gephi.desktop.project.ProjectControllerUIImpl; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionRegistration; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +@ActionID(id = "org.gephi.desktop.project.actions.CloseProject", category = "File") +@ActionRegistration(displayName = "#CTL_CloseProject", lazy = false) +@ActionReference(path = "Menu/File", position = 400) +public final class CloseProject extends AbstractAction { + + CloseProject() { + super(NbBundle.getMessage(CloseProject.class, "CTL_CloseProject")); + } + + @Override + public void actionPerformed(ActionEvent e) { + if (isEnabled()) { + Lookup.getDefault().lookup(ProjectControllerUIImpl.class).closeProject(); + } + } + + @Override + public boolean isEnabled() { + return Lookup.getDefault().lookup(ProjectControllerUIImpl.class).canCloseProject(); + } +} diff --git a/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/DeleteOtherWorkspaces.java b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/DeleteOtherWorkspaces.java new file mode 100644 index 0000000000..ac7e84c79c --- /dev/null +++ b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/DeleteOtherWorkspaces.java @@ -0,0 +1,90 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. +*/ + +package org.gephi.desktop.project.actions; + +import java.awt.event.ActionEvent; +import java.util.ArrayList; +import java.util.List; +import javax.swing.AbstractAction; +import org.gephi.desktop.project.ProjectControllerUIImpl; +import org.gephi.project.api.Workspace; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionRegistration; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +@ActionID(id = "org.gephi.desktop.project.actions.DeleteOtherWorkspaces", category = "Workspace") +@ActionRegistration(displayName = "#CTL_DeleteOtherWorkspaces", lazy = false) +public final class DeleteOtherWorkspaces extends AbstractAction { + + DeleteOtherWorkspaces() { + super(NbBundle.getMessage(DeleteOtherWorkspaces.class, "CTL_DeleteOtherWorkspaces")); + } + + @Override + public void actionPerformed(ActionEvent ev) { + if (isEnabled()) { + ProjectControllerUIImpl cui = Lookup.getDefault().lookup(ProjectControllerUIImpl.class); + Workspace workspace; + if (ev.getSource() != null && ev.getSource() instanceof Workspace) { + workspace = (Workspace) ev.getSource(); + } else { + workspace = cui.getCurrentProject().getCurrentWorkspace(); + } + if (workspace != null) { + List workspaces = new ArrayList<>(cui.getCurrentProject().getWorkspaces()); + workspaces.remove(workspace); + if (!workspaces.isEmpty()) { + cui.deleteWorkspaces(workspaces); + } + } + } + } + + @Override + public boolean isEnabled() { + return Lookup.getDefault().lookup(ProjectControllerUIImpl.class).canDeleteWorkspace(); + } +} diff --git a/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/DeleteWorkspace.java b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/DeleteWorkspace.java new file mode 100644 index 0000000000..4ced900574 --- /dev/null +++ b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/DeleteWorkspace.java @@ -0,0 +1,86 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. +*/ + +package org.gephi.desktop.project.actions; + +import java.awt.event.ActionEvent; +import java.io.File; +import javax.swing.AbstractAction; +import org.gephi.desktop.project.ProjectControllerUIImpl; +import org.gephi.project.api.Workspace; +import org.openide.DialogDisplayer; +import org.openide.NotifyDescriptor; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionRegistration; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +@ActionID(id = "org.gephi.desktop.project.actions.DeleteWorkspace", category = "Workspace") +@ActionRegistration(displayName = "#CTL_DeleteWorkspace", lazy = false) +@ActionReference(path = "Menu/Workspace", position = 2600, separatorAfter = 2605) +public final class DeleteWorkspace extends AbstractAction { + + DeleteWorkspace() { + super(NbBundle.getMessage(DeleteWorkspace.class, "CTL_DeleteWorkspace"), + ImageUtilities.loadImageIcon("DesktopProject/deleteWorkspace.svg", false)); + } + + @Override + public void actionPerformed(ActionEvent ev) { + if (isEnabled()) { + ProjectControllerUIImpl cui = Lookup.getDefault().lookup(ProjectControllerUIImpl.class); + if (ev.getSource() != null && ev.getSource() instanceof Workspace) { + Workspace workspace = (Workspace) ev.getSource(); + cui.deleteWorkspace(workspace); + } else { + cui.deleteWorkspace(); + } + } + } + + @Override + public boolean isEnabled() { + return Lookup.getDefault().lookup(ProjectControllerUIImpl.class).canDeleteWorkspace(); + } +} diff --git a/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/DuplicateWorkspace.java b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/DuplicateWorkspace.java new file mode 100644 index 0000000000..d3600554b8 --- /dev/null +++ b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/DuplicateWorkspace.java @@ -0,0 +1,37 @@ +package org.gephi.desktop.project.actions; + +import java.awt.event.ActionEvent; +import javax.swing.AbstractAction; +import org.gephi.desktop.project.ProjectControllerUIImpl; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionReferences; +import org.openide.awt.ActionRegistration; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +@ActionID(id = "org.gephi.desktop.project.actions.DuplicateWorkspace", category = "Workspace") +@ActionRegistration(displayName = "#CTL_DuplicateWorkspace", lazy = false) +@ActionReferences({ + @ActionReference(path = "Menu/Workspace", position = 2700) +}) +public final class DuplicateWorkspace extends AbstractAction { + + DuplicateWorkspace() { + super(NbBundle.getMessage(DuplicateWorkspace.class, "CTL_DuplicateWorkspace"), + ImageUtilities.loadImageIcon("DesktopProject/duplicateWorkspace.svg", false)); + } + + @Override + public void actionPerformed(ActionEvent e) { + if (isEnabled()) { + Lookup.getDefault().lookup(ProjectControllerUIImpl.class).duplicateWorkspace(); + } + } + + @Override + public boolean isEnabled() { + return Lookup.getDefault().lookup(ProjectControllerUIImpl.class).canDuplicateWorkspace(); + } +} \ No newline at end of file diff --git a/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/ManageProjects.java b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/ManageProjects.java new file mode 100644 index 0000000000..06d54a8b1d --- /dev/null +++ b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/ManageProjects.java @@ -0,0 +1,32 @@ +package org.gephi.desktop.project.actions; + +import java.awt.event.ActionEvent; +import javax.swing.AbstractAction; +import org.gephi.desktop.project.ProjectControllerUIImpl; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionRegistration; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +@ActionID(id = "org.gephi.desktop.project.actions.ManageProjects", category = "File") +@ActionRegistration(displayName = "#CTL_ManageProjects", lazy = false) +public final class ManageProjects extends AbstractAction { + + ManageProjects() { + super(NbBundle.getMessage(ManageProjects.class, "CTL_ManageProjects")); + } + + @Override + public boolean isEnabled() { + return true; + } + + @Override + public void actionPerformed(ActionEvent ev) { + if (isEnabled()) { + Lookup.getDefault().lookup(ProjectControllerUIImpl.class).manageProjects(); + } + } +} diff --git a/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/NewProject.java b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/NewProject.java new file mode 100644 index 0000000000..6826e3d744 --- /dev/null +++ b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/NewProject.java @@ -0,0 +1,80 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. +*/ + +package org.gephi.desktop.project.actions; + +import java.awt.event.ActionEvent; +import javax.swing.AbstractAction; +import org.gephi.desktop.project.ProjectControllerUIImpl; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionReferences; +import org.openide.awt.ActionRegistration; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +@ActionID(id = "org.gephi.desktop.project.actions.NewProject", category = "File") +@ActionRegistration(displayName = "#CTL_NewProject", lazy = false) +@ActionReferences({ + @ActionReference(path = "Menu/File", position = 100), + @ActionReference(path = "Shortcuts", name = "D-N") +}) +public final class NewProject extends AbstractAction { + + NewProject() { + super(NbBundle.getMessage(NewProject.class, "CTL_NewProject"), + ImageUtilities.loadImageIcon("DesktopProject/newProject.svg", false)); + } + + @Override + public void actionPerformed(ActionEvent e) { + if (isEnabled()) { + Lookup.getDefault().lookup(ProjectControllerUIImpl.class).newProject(); + } + } + + @Override + public boolean isEnabled() { + return Lookup.getDefault().lookup(ProjectControllerUIImpl.class).canNewProject(); + } +} diff --git a/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/NewWorkspace.java b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/NewWorkspace.java new file mode 100644 index 0000000000..88b95db8d5 --- /dev/null +++ b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/NewWorkspace.java @@ -0,0 +1,80 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. +*/ + +package org.gephi.desktop.project.actions; + +import java.awt.event.ActionEvent; +import javax.swing.AbstractAction; +import org.gephi.desktop.project.ProjectControllerUIImpl; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionReferences; +import org.openide.awt.ActionRegistration; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +@ActionID(id = "org.gephi.desktop.project.actions.NewWorkspace", category = "Workspace") +@ActionRegistration(displayName = "#CTL_NewWorkspace", lazy = false) +@ActionReferences({ + @ActionReference(path = "Menu/Workspace", position = 2500), + @ActionReference(path = "Shortcuts", name = "D-N") +}) +public final class NewWorkspace extends AbstractAction { + + NewWorkspace() { + super(NbBundle.getMessage(NewWorkspace.class, "CTL_NewWorkspace"), + ImageUtilities.loadImageIcon("DesktopProject/newWorkspace.svg", false)); + } + + @Override + public void actionPerformed(ActionEvent e) { + if (isEnabled()) { + Lookup.getDefault().lookup(ProjectControllerUIImpl.class).newWorkspace(); + } + } + + @Override + public boolean isEnabled() { + return Lookup.getDefault().lookup(ProjectControllerUIImpl.class).canNewWorkspace(); + } +} \ No newline at end of file diff --git a/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/NewWorkspaceWithSettings.java b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/NewWorkspaceWithSettings.java new file mode 100644 index 0000000000..0f0e8c8e52 --- /dev/null +++ b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/NewWorkspaceWithSettings.java @@ -0,0 +1,76 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. +*/ + +package org.gephi.desktop.project.actions; + +import java.awt.event.ActionEvent; +import javax.swing.AbstractAction; +import org.gephi.desktop.project.ProjectControllerUIImpl; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionRegistration; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +@ActionID(id = "org.gephi.desktop.project.actions.NewWorkspaceWithSettings", category = "Workspace") +@ActionRegistration(displayName = "#CTL_NewWorkspaceWithSettings", lazy = false) +@ActionReference(path = "Menu/Workspace", position = 2510) +public final class NewWorkspaceWithSettings extends AbstractAction { + + NewWorkspaceWithSettings() { + super(NbBundle.getMessage(NewWorkspaceWithSettings.class, "CTL_NewWorkspaceWithSettings"), + ImageUtilities.loadImageIcon("DesktopProject/newWorkspace.svg", false)); + } + + @Override + public boolean isEnabled() { + return Lookup.getDefault().lookup(ProjectControllerUIImpl.class).canNewWorkspace(); + } + + @Override + public void actionPerformed(ActionEvent ev) { + if (isEnabled()) { + Lookup.getDefault().lookup(ProjectControllerUIImpl.class).newWorkspaceWithSettings(); + } + } +} diff --git a/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/OpenFile.java b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/OpenFile.java new file mode 100644 index 0000000000..c326083c36 --- /dev/null +++ b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/OpenFile.java @@ -0,0 +1,121 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. +*/ + +package org.gephi.desktop.project.actions; + +import java.awt.event.ActionEvent; +import java.io.File; +import javax.swing.AbstractAction; +import org.gephi.desktop.importer.api.ImportControllerUI; +import org.gephi.desktop.project.ProjectControllerUIImpl; +import org.gephi.io.importer.spi.FileImporterBuilder; +import org.gephi.project.api.Project; +import org.openide.DialogDisplayer; +import org.openide.NotifyDescriptor; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionReferences; +import org.openide.awt.ActionRegistration; +import org.openide.filesystems.FileObject; +import org.openide.filesystems.FileUtil; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +@ActionID(id = "org.gephi.desktop.project.actions.OpenFile", category = "File") +@ActionRegistration(displayName = "#CTL_OpenFile", lazy = false) +@ActionReference(path = "Menu/File", position = 300) +@ActionReferences({ + @ActionReference(path = "Menu/File", position = 300), + @ActionReference(path = "Shortcuts", name = "D-O") +}) +public final class OpenFile extends AbstractAction { + + private static final String GEPHI_EXTENSION = "gephi"; + + OpenFile() { + super(NbBundle.getMessage(OpenFile.class, "CTL_OpenFile"), + ImageUtilities.loadImageIcon("DesktopProject/openProject.svg", false)); + } + + @Override + public boolean isEnabled() { + return Lookup.getDefault().lookup(ProjectControllerUIImpl.class).canOpenFile(); + } + + @Override + public void actionPerformed(ActionEvent ev) { + if (isEnabled()) { + if (ev != null && ev.getSource() != null && ev.getSource() instanceof File) { + File sourceFile = (File) ev.getSource(); + FileObject fileObject = FileUtil.toFileObject(sourceFile); + if (fileObject == null) { + NotifyDescriptor.Message msg = new NotifyDescriptor.Message(NbBundle + .getMessage(OpenFile.class, "OpenFile.fileNotAccessible", sourceFile.getName()), + NotifyDescriptor.ERROR_MESSAGE); + DialogDisplayer.getDefault().notify(msg); + return; + } + if (fileObject.hasExt(GEPHI_EXTENSION)) { + Lookup.getDefault().lookup(ProjectControllerUIImpl.class).openProject(FileUtil.toFile(fileObject)); + } else { + ImportControllerUI importController = Lookup.getDefault().lookup(ImportControllerUI.class); + if (importController.getImportController().isFileSupported(FileUtil.toFile(fileObject))) { + importController.importFile(fileObject); + } else { + NotifyDescriptor.Message msg = new NotifyDescriptor.Message( + NbBundle.getMessage(OpenFile.class, "OpenFile.fileNotSupported"), + NotifyDescriptor.WARNING_MESSAGE); + DialogDisplayer.getDefault().notify(msg); + } + } + } else if (ev != null && ev.getSource() != null && ev.getSource() instanceof FileImporterBuilder[]) { + Lookup.getDefault().lookup(ProjectControllerUIImpl.class) + .openFile((FileImporterBuilder[]) ev.getSource()); + } else if (ev != null && ev.getSource() != null && ev.getSource() instanceof Project) { + Lookup.getDefault().lookup(ProjectControllerUIImpl.class).openProject((Project) ev.getSource()); + } else { + Lookup.getDefault().lookup(ProjectControllerUIImpl.class).openFile(); + } + } + } +} diff --git a/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/ProjectProperties.java b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/ProjectProperties.java new file mode 100644 index 0000000000..840dd4a4cd --- /dev/null +++ b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/ProjectProperties.java @@ -0,0 +1,76 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. +*/ + +package org.gephi.desktop.project.actions; + +import java.awt.event.ActionEvent; +import javax.swing.AbstractAction; +import org.gephi.desktop.project.ProjectControllerUIImpl; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionRegistration; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +@ActionID(id = "org.gephi.desktop.project.actions.ProjectProperties", category = "File") +@ActionRegistration(displayName = "#CTL_ProjectProperties", lazy = false) +@ActionReference(path = "Menu/File", position = 500) +public final class ProjectProperties extends AbstractAction { + + ProjectProperties() { + super(NbBundle.getMessage(ProjectProperties.class, "CTL_ProjectProperties"), + ImageUtilities.loadImageIcon("DesktopProject/projectProperties.svg", false)); + } + + @Override + public boolean isEnabled() { + return Lookup.getDefault().lookup(ProjectControllerUIImpl.class).canProjectProperties(); + } + + @Override + public void actionPerformed(ActionEvent ev) { + if (isEnabled()) { + Lookup.getDefault().lookup(ProjectControllerUIImpl.class).projectProperties(); + } + } +} diff --git a/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/RecentFiles.java b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/RecentFiles.java new file mode 100644 index 0000000000..1898f82740 --- /dev/null +++ b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/RecentFiles.java @@ -0,0 +1,172 @@ +/* +Copyright 2008-2010 Gephi +Authors : SΓ©bastien Heymann +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.project.actions; + +import java.awt.event.ActionEvent; +import java.io.File; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import javax.swing.AbstractAction; +import javax.swing.JComponent; +import javax.swing.JMenu; +import javax.swing.JMenuItem; +import javax.swing.JSeparator; +import org.gephi.desktop.importer.api.ImportControllerUI; +import org.gephi.desktop.mrufiles.api.MostRecentFiles; +import org.gephi.project.api.Project; +import org.gephi.project.api.ProjectController; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionRegistration; +import org.openide.awt.Actions; +import org.openide.awt.DynamicMenuContent; +import org.openide.filesystems.FileObject; +import org.openide.filesystems.FileUtil; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +@ActionID(id = "org.gephi.desktop.project.actions.RecentFiles", category = "File") +@ActionRegistration(displayName = "#CTL_OpenRecentFiles", lazy = false) +@ActionReference(path = "Menu/File", position = 350) +public class RecentFiles extends AbstractAction implements DynamicMenuContent { + + RecentFiles() { + super(NbBundle.getMessage(RecentFiles.class, "CTL_OpenRecentFiles")); + } + + @Override + public void actionPerformed(ActionEvent e) { + // does nothing, this is a popup menu + } + + @Override + public JComponent[] getMenuPresenters() { + return createMenu(); + } + + @Override + public JComponent[] synchMenuPresenters(JComponent[] items) { + return createMenu(); + } + + private JComponent[] createMenu() { + JMenu menu = new JMenu(NbBundle.getMessage(RecentFiles.class, "CTL_OpenRecentFiles")); + JComponent[] menuItems = createSubMenus(); + for (JComponent item : menuItems) { + menu.add(item); + } + return new JComponent[] {menu}; + } + + private JComponent[] createSubMenus() { + // Projects + List projectsItems = new ArrayList<>(); + ProjectController projectController = Lookup.getDefault().lookup(ProjectController.class); + for (Project project : projectController.getAllProjects()) { + if (project.hasFile()) { + JMenuItem menuItem = new JMenuItem(new OpenProjectAction(project)); + projectsItems.add(menuItem); + } + } + + // Files + MostRecentFiles mru = Lookup.getDefault().lookup(MostRecentFiles.class); + List filesItems = mru.getMRUFileList().stream().map(File::new).filter(File::exists) + .map(f -> new JMenuItem(new OpenFileAction(f))).collect( + Collectors.toList()); + + // Add to menu, with separator if needed + List items = new ArrayList<>(projectsItems); + if (!projectsItems.isEmpty() && !filesItems.isEmpty()) { + items.add(new JSeparator()); + } + items.addAll(filesItems); + + // Manage projects + items.add(new JSeparator()); + items.add(new JMenuItem(Actions.forID("File", "org.gephi.desktop.project.actions.ManageProjects"))); + + return items.toArray(new JComponent[0]); + } + + private static class OpenFileAction extends AbstractAction { + + private final File file; + + public OpenFileAction(File file) { + super(file.getName()); + this.file = file; + } + + @Override + public void actionPerformed(ActionEvent e) { + FileObject fileObject = FileUtil.toFileObject(file); + ImportControllerUI importController = Lookup.getDefault().lookup(ImportControllerUI.class); + if (importController.getImportController().isFileSupported(file)) { + importController.importFile(fileObject); + } + } + } + + private static class OpenProjectAction extends AbstractAction { + + private final Project project; + + public OpenProjectAction(Project project) { + super(getActionName(project)); + this.project = project; + } + + private static String getActionName(Project project) { + return project.getName() + " (" + project.getFileName() + ")"; + } + + @Override + public void actionPerformed(ActionEvent e) { + File file = project.getFile(); + Actions.forID("File", "org.gephi.desktop.project.actions.OpenFile").actionPerformed( + new ActionEvent(file, 0, null)); + } + } +} diff --git a/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/RenameWorkspace.java b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/RenameWorkspace.java new file mode 100644 index 0000000000..9827ee0039 --- /dev/null +++ b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/RenameWorkspace.java @@ -0,0 +1,89 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.project.actions; + +import java.awt.event.ActionEvent; +import javax.swing.AbstractAction; +import org.gephi.desktop.project.ProjectControllerUIImpl; +import org.gephi.project.api.ProjectController; +import org.gephi.project.api.WorkspaceInformation; +import org.openide.DialogDescriptor; +import org.openide.DialogDisplayer; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionRegistration; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +@ActionID(id = "org.gephi.desktop.project.actions.RenameWorkspace", category = "Workspace") +@ActionRegistration(displayName = "#CTL_RenameWorkspace", lazy = false) +@ActionReference(path = "Menu/Workspace", position = 2800) +public final class RenameWorkspace extends AbstractAction { + + RenameWorkspace() { + super(NbBundle.getMessage(DeleteWorkspace.class, "CTL_RenameWorkspace"), + ImageUtilities.loadImageIcon("DesktopProject/renameWorkspace.svg", false)); + } + + @Override + public void actionPerformed(ActionEvent e) { + if (isEnabled()) { + String name = ""; + ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); + name = pc.getCurrentWorkspace().getLookup().lookup(WorkspaceInformation.class).getName(); + DialogDescriptor.InputLine dd = new DialogDescriptor.InputLine("", + NbBundle.getMessage(RenameWorkspace.class, "RenameWorkspace.dialog.title")); + dd.setInputText(name); + if (DialogDisplayer.getDefault().notify(dd).equals(DialogDescriptor.OK_OPTION) && + !dd.getInputText().isEmpty()) { + Lookup.getDefault().lookup(ProjectControllerUIImpl.class).renameWorkspace(dd.getInputText()); + } + } + } + + @Override + public boolean isEnabled() { + return Lookup.getDefault().lookup(ProjectControllerUIImpl.class).canRenameWorkspace(); + } +} diff --git a/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/SaveAsProject.java b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/SaveAsProject.java new file mode 100644 index 0000000000..f5641b4a1e --- /dev/null +++ b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/SaveAsProject.java @@ -0,0 +1,74 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. +*/ + +package org.gephi.desktop.project.actions; + +import java.awt.event.ActionEvent; +import javax.swing.AbstractAction; +import org.gephi.desktop.project.ProjectControllerUIImpl; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionRegistration; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +@ActionID(id = "org.gephi.desktop.project.actions.SaveAsProject", category = "File") +@ActionRegistration(displayName = "#CTL_SaveAsProject", lazy = false) +@ActionReference(path = "Menu/File", position = 1100) +public final class SaveAsProject extends AbstractAction { + + SaveAsProject() { + super(NbBundle.getMessage(ProjectProperties.class, "CTL_SaveAsProject")); + } + + @Override + public boolean isEnabled() { + return Lookup.getDefault().lookup(ProjectControllerUIImpl.class).canSaveAs(); + } + + @Override + public void actionPerformed(ActionEvent ev) { + if (isEnabled()) { + Lookup.getDefault().lookup(ProjectControllerUIImpl.class).saveAsProject(); + } + } +} diff --git a/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/SaveProject.java b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/SaveProject.java new file mode 100644 index 0000000000..2d5c065822 --- /dev/null +++ b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/SaveProject.java @@ -0,0 +1,80 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. +*/ + +package org.gephi.desktop.project.actions; + +import java.awt.event.ActionEvent; +import javax.swing.AbstractAction; +import org.gephi.desktop.project.ProjectControllerUIImpl; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionReferences; +import org.openide.awt.ActionRegistration; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +@ActionID(id = "org.gephi.desktop.project.actions.SaveProject", category = "File") +@ActionRegistration(displayName = "#CTL_SaveProject", lazy = false) +@ActionReferences({ + @ActionReference(path = "Menu/File", position = 750), + @ActionReference(path = "Shortcuts", name = "D-S") +}) +public final class SaveProject extends AbstractAction { + + SaveProject() { + super(NbBundle.getMessage(ProjectProperties.class, "CTL_SaveProject"), + ImageUtilities.loadImageIcon("DesktopProject/saveProject.svg", false)); + } + + @Override + public boolean isEnabled() { + return Lookup.getDefault().lookup(ProjectControllerUIImpl.class).canSave(); + } + + @Override + public void actionPerformed(ActionEvent ev) { + if (isEnabled()) { + Lookup.getDefault().lookup(ProjectControllerUIImpl.class).saveProject(); + } + } +} diff --git a/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/WorkspaceProperties.java b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/WorkspaceProperties.java new file mode 100644 index 0000000000..8a091024cb --- /dev/null +++ b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/actions/WorkspaceProperties.java @@ -0,0 +1,76 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. +*/ + +package org.gephi.desktop.project.actions; + +import java.awt.event.ActionEvent; +import javax.swing.AbstractAction; +import org.gephi.desktop.project.ProjectControllerUIImpl; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionRegistration; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +@ActionID(id = "org.gephi.desktop.project.actions.WorkspaceProperties", category = "Workspace") +@ActionRegistration(displayName = "#CTL_WorkspaceProperties", lazy = false) +@ActionReference(path = "Menu/Workspace", position = 2900) +public final class WorkspaceProperties extends AbstractAction { + + WorkspaceProperties() { + super(NbBundle.getMessage(WorkspaceProperties.class, "CTL_WorkspaceProperties"), + ImageUtilities.loadImageIcon("DesktopProject/workspaceProperties.svg", false)); + } + + @Override + public boolean isEnabled() { + return Lookup.getDefault().lookup(ProjectControllerUIImpl.class).canRenameWorkspace(); + } + + @Override + public void actionPerformed(ActionEvent ev) { + if (isEnabled()) { + Lookup.getDefault().lookup(ProjectControllerUIImpl.class).workspaceProperties(); + } + } +} diff --git a/modules/DesktopProject/src/main/java/org/gephi/desktop/project/api/ProjectControllerUI.java b/modules/DesktopProject/src/main/java/org/gephi/desktop/project/api/ProjectControllerUI.java deleted file mode 100644 index 16028f12d1..0000000000 --- a/modules/DesktopProject/src/main/java/org/gephi/desktop/project/api/ProjectControllerUI.java +++ /dev/null @@ -1,99 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.desktop.project.api; - -import java.io.File; -import org.gephi.project.api.Project; -import org.gephi.project.api.Workspace; - -/** - * - * @author Mathieu Bastian - */ -public interface ProjectControllerUI { - - public void saveProject(); - - public void saveAsProject(); - - public void openProject(File file); - - public void renameProject(final String name); - - public void projectProperties(); - - public void openFile(); - - public Workspace newWorkspace(); - - public Workspace duplicateWorkspace(); - - public Project newProject(); - - public void deleteWorkspace(); - - public void closeProject(); - - public void cleanWorkspace(); - - public void renameWorkspace(final String name); - - public boolean canNewProject(); - - public boolean canCloseProject(); - - public boolean canOpenFile(); - - public boolean canSave(); - - public boolean canSaveAs(); - - public boolean canNewWorkspace(); - - public boolean canDuplicateWorkspace(); - - public boolean canDeleteWorkspace(); - - public boolean canCleanWorkspace(); - - public boolean canProjectProperties(); -} diff --git a/modules/DesktopProject/src/main/java/org/gephi/ui/project/NewWorkspace.form b/modules/DesktopProject/src/main/java/org/gephi/ui/project/NewWorkspace.form new file mode 100644 index 0000000000..292acdede1 --- /dev/null +++ b/modules/DesktopProject/src/main/java/org/gephi/ui/project/NewWorkspace.form @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/DesktopProject/src/main/java/org/gephi/ui/project/NewWorkspace.java b/modules/DesktopProject/src/main/java/org/gephi/ui/project/NewWorkspace.java new file mode 100644 index 0000000000..3332ff0dc4 --- /dev/null +++ b/modules/DesktopProject/src/main/java/org/gephi/ui/project/NewWorkspace.java @@ -0,0 +1,205 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. +*/ + +package org.gephi.ui.project; + +import org.gephi.graph.api.Configuration; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.TimeRepresentation; +import org.gephi.project.api.Project; +import org.gephi.project.api.ProjectController; +import org.gephi.project.api.Workspace; +import org.gephi.project.api.WorkspaceProvider; +import org.gephi.ui.utils.TimeRepresentationWrapper; +import org.netbeans.validation.api.builtin.stringvalidation.StringValidators; +import org.netbeans.validation.api.ui.ValidationGroup; +import org.netbeans.validation.api.ui.swing.ValidationPanel; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; +import org.openide.util.NbPreferences; + +/** + * + * @author mathieu.bastian + */ +public class NewWorkspace extends javax.swing.JPanel { + + private static final String TIME_REPRESENTATION_SAVED_PREFERENCES = "NewWorkspace_timerepresentation"; + + /** + * Creates new form NewWorkspace + */ + public NewWorkspace() { + initComponents(); + + for (TimeRepresentation tr : TimeRepresentation.values()) { + timeRepresentationComboBox.addItem(new TimeRepresentationWrapper(tr)); + } + } + + public void setup() { + GraphController graphController = Lookup.getDefault().lookup(GraphController.class); + Configuration defaultConfig = graphController.getDefaultConfigurationBuilder().build(); + + // Load preference + int savedPreference = NbPreferences.forModule(NewWorkspace.class).getInt(TIME_REPRESENTATION_SAVED_PREFERENCES, -1); + if (savedPreference != -1) { + timeRepresentationComboBox.setSelectedIndex(savedPreference); + } else { + timeRepresentationComboBox + .setSelectedItem(new TimeRepresentationWrapper(defaultConfig.getTimeRepresentation())); + } + + ProjectController controller = Lookup.getDefault().lookup(ProjectController.class); + WorkspaceProvider workspaceProvider = controller.getCurrentProject().getLookup().lookup(WorkspaceProvider.class); + String prefix = NbBundle.getMessage(NewWorkspace.class, "NewWorkspace.default.prefix"); + + nameTextField.setText(prefix+" "+workspaceProvider.getNextWorkspaceId()); + } + + public void unsetup() { + GraphController graphController = Lookup.getDefault().lookup(GraphController.class); + Configuration.Builder defaultConfig = graphController.getDefaultConfigurationBuilder(); + TimeRepresentation selected = ((TimeRepresentationWrapper)timeRepresentationComboBox.getSelectedItem()).getTimeRepresentation(); + + Configuration configuration = defaultConfig.timeRepresentation(selected).build(); + + ProjectController controller = Lookup.getDefault().lookup(ProjectController.class); + Workspace workspace = controller.newWorkspace(controller.getCurrentProject(), configuration); + controller.renameWorkspace(workspace, nameTextField.getText()); + + // Save preference + NbPreferences.forModule(NewWorkspace.class) + .putInt(TIME_REPRESENTATION_SAVED_PREFERENCES, timeRepresentationComboBox.getSelectedIndex()); + } + + public static ValidationPanel createValidationPanel(NewWorkspace innerPanel) { + ValidationPanel validationPanel = new ValidationPanel(); + validationPanel.setInnerComponent(innerPanel); + ValidationGroup group = validationPanel.getValidationGroup(); + + //Make sure components have names + innerPanel.nameTextField.setName(innerPanel.labelName.getText().replace(":", "")); + + group.add(innerPanel.nameTextField, StringValidators.REQUIRE_NON_EMPTY_STRING); + + return validationPanel; + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + nameTextField = new javax.swing.JTextField(); + labelName = new javax.swing.JLabel(); + innerPanel = new javax.swing.JPanel(); + labelTimeRepresentation = new javax.swing.JLabel(); + timeRepresentationComboBox = new javax.swing.JComboBox<>(); + + org.openide.awt.Mnemonics.setLocalizedText(labelName, org.openide.util.NbBundle.getMessage(NewWorkspace.class, "NewWorkspace.labelName.text")); // NOI18N + + innerPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(NewWorkspace.class, "NewWorkspace.innerPanel.border.title"))); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(labelTimeRepresentation, org.openide.util.NbBundle.getMessage(NewWorkspace.class, "NewWorkspace.labelTimeRepresentation.text")); // NOI18N + + javax.swing.GroupLayout innerPanelLayout = new javax.swing.GroupLayout(innerPanel); + innerPanel.setLayout(innerPanelLayout); + innerPanelLayout.setHorizontalGroup( + innerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(innerPanelLayout.createSequentialGroup() + .addContainerGap() + .addComponent(labelTimeRepresentation) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(timeRepresentationComboBox, 0, 200, Short.MAX_VALUE) + .addContainerGap()) + ); + innerPanelLayout.setVerticalGroup( + innerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(innerPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(innerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelTimeRepresentation) + .addComponent(timeRepresentationComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(19, Short.MAX_VALUE)) + ); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(innerPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addComponent(labelName) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(nameTextField))) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(nameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(labelName)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 28, Short.MAX_VALUE) + .addComponent(innerPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap()) + ); + }// //GEN-END:initComponents + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPanel innerPanel; + private javax.swing.JLabel labelName; + private javax.swing.JLabel labelTimeRepresentation; + private javax.swing.JTextField nameTextField; + private javax.swing.JComboBox timeRepresentationComboBox; + // End of variables declaration//GEN-END:variables +} diff --git a/modules/DesktopProject/src/main/java/org/gephi/ui/project/ProjectList.form b/modules/DesktopProject/src/main/java/org/gephi/ui/project/ProjectList.form new file mode 100644 index 0000000000..0964c91323 --- /dev/null +++ b/modules/DesktopProject/src/main/java/org/gephi/ui/project/ProjectList.form @@ -0,0 +1,87 @@ + + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/modules/DesktopProject/src/main/java/org/gephi/ui/project/ProjectList.java b/modules/DesktopProject/src/main/java/org/gephi/ui/project/ProjectList.java new file mode 100644 index 0000000000..410035e09a --- /dev/null +++ b/modules/DesktopProject/src/main/java/org/gephi/ui/project/ProjectList.java @@ -0,0 +1,149 @@ +package org.gephi.ui.project; + +import java.awt.Component; +import java.awt.Font; +import java.awt.event.ActionEvent; +import javax.swing.DefaultListCellRenderer; +import javax.swing.DefaultListModel; +import javax.swing.JLabel; +import javax.swing.JList; +import org.gephi.desktop.project.ProjectControllerUIImpl; +import org.gephi.project.api.Project; +import org.gephi.project.api.ProjectController; +import org.openide.awt.Actions; +import org.openide.util.Lookup; + +public class ProjectList extends javax.swing.JPanel { + + /** + * Creates new form ProjectList + */ + public ProjectList() { + initComponents(); + + openProjectButton.setEnabled(false); + removeProjectButton.setEnabled(false); + projectList.setCellRenderer(new ProjectCellRenderer()); + projectList.addListSelectionListener(evt -> { + if (!evt.getValueIsAdjusting()) { + Project project = null; + if (projectList.getSelectedIndex() != -1) { + project = projectList.getModel().getElementAt(projectList.getSelectedIndex()); + } + openProjectButton.setEnabled(project != null && project.isClosed()); + removeProjectButton.setEnabled(project != null); + } + }); + + openProjectButton.addActionListener(evt -> { + Project project = projectList.getModel().getElementAt(projectList.getSelectedIndex()); + Actions.forID("File", "org.gephi.desktop.project.actions.OpenFile").actionPerformed( + new ActionEvent(project, 0, null)); + }); + + removeProjectButton.addActionListener(evt -> { + Project project = projectList.getModel().getElementAt(projectList.getSelectedIndex()); + Lookup.getDefault().lookup(ProjectControllerUIImpl.class).removeProject(project); + ((DefaultListModel)projectList.getModel()).removeElement(project); + }); + + setup(); + } + + private void setup() { + // Project list + ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); + DefaultListModel model = new DefaultListModel<>(); + for (Project p : pc.getAllProjects()) { + model.addElement(p); + } + projectList.setModel(model); + } + + static class ProjectCellRenderer extends DefaultListCellRenderer { + + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, + boolean cellHasFocus) { + JLabel c = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + + Project p = (Project) value; + if (p.isOpen()) { + c.setFont(c.getFont().deriveFont(Font.BOLD)); + } else { + c.setFont(c.getFont().deriveFont(Font.PLAIN)); + } + String name = p.getName(); + if (p.getFileName() != null) { + name += " (" + p.getFileName() + ")"; + } + c.setText(name); + return c; + } + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + jScrollPane2 = new javax.swing.JScrollPane(); + projectList = new javax.swing.JList<>(); + openProjectButton = new javax.swing.JButton(); + removeProjectButton = new javax.swing.JButton(); + + projectList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); + jScrollPane2.setViewportView(projectList); + + org.openide.awt.Mnemonics.setLocalizedText(openProjectButton, + org.openide.util.NbBundle.getMessage(ProjectList.class, "ProjectList.openProjectButton.text")); // NOI18N + openProjectButton.setToolTipText(org.openide.util.NbBundle.getMessage(ProjectList.class, + "ProjectList.openProjectButton.toolTipText")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(removeProjectButton, + org.openide.util.NbBundle.getMessage(ProjectList.class, "ProjectList.removeProjectButton.text")); // NOI18N + removeProjectButton.setToolTipText(org.openide.util.NbBundle.getMessage(ProjectList.class, + "ProjectList.removeProjectButton.toolTipText")); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, 243, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(openProjectButton, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(removeProjectButton, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(openProjectButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(removeProjectButton)) + .addComponent(jScrollPane2, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap()) + ); + }// //GEN-END:initComponents + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JScrollPane jScrollPane2; + private javax.swing.JButton openProjectButton; + private javax.swing.JList projectList; + private javax.swing.JButton removeProjectButton; + // End of variables declaration//GEN-END:variables +} diff --git a/modules/ProjectUI/src/main/java/org/gephi/ui/project/ProjectPropertiesEditor.form b/modules/DesktopProject/src/main/java/org/gephi/ui/project/ProjectPropertiesEditor.form similarity index 100% rename from modules/ProjectUI/src/main/java/org/gephi/ui/project/ProjectPropertiesEditor.form rename to modules/DesktopProject/src/main/java/org/gephi/ui/project/ProjectPropertiesEditor.form diff --git a/modules/DesktopProject/src/main/java/org/gephi/ui/project/ProjectPropertiesEditor.java b/modules/DesktopProject/src/main/java/org/gephi/ui/project/ProjectPropertiesEditor.java new file mode 100644 index 0000000000..14b9ddf577 --- /dev/null +++ b/modules/DesktopProject/src/main/java/org/gephi/ui/project/ProjectPropertiesEditor.java @@ -0,0 +1,280 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. +*/ + +package org.gephi.ui.project; + +import org.gephi.project.api.Project; +import org.gephi.project.api.ProjectController; +import org.gephi.project.api.ProjectInformation; +import org.gephi.project.api.ProjectMetaData; +import org.netbeans.validation.api.builtin.stringvalidation.StringValidators; +import org.netbeans.validation.api.ui.ValidationGroup; +import org.netbeans.validation.api.ui.swing.ValidationPanel; +import org.openide.util.Lookup; + +/** + * @author Mathieu Bastian + */ +public class ProjectPropertiesEditor extends javax.swing.JPanel { + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JTextField authorTextField; + private javax.swing.JPanel descriptionPanel; + private javax.swing.JScrollPane descriptionScrollPane; + private javax.swing.JTextArea descriptionTextArea; + private javax.swing.JLabel fileLabel; + private javax.swing.JTextField keywordsTextField; + private javax.swing.JLabel labelAuthor; + private javax.swing.JLabel labelDescription; + private javax.swing.JLabel labelFile; + private javax.swing.JLabel labelKeywords; + private javax.swing.JLabel labelName; + private javax.swing.JLabel labelTitle; + private javax.swing.JTextField nameTextField; + private javax.swing.JTextField titleTextField; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form ProjectPropertiesEditor + */ + public ProjectPropertiesEditor() { + initComponents(); + } + + public static ValidationPanel createValidationPanel(ProjectPropertiesEditor innerPanel) { + ValidationPanel validationPanel = new ValidationPanel(); + validationPanel.setInnerComponent(innerPanel); + ValidationGroup group = validationPanel.getValidationGroup(); + + //Make sure components have names + innerPanel.nameTextField.setName(innerPanel.labelName.getText().replace(":", "")); + + group.add(innerPanel.nameTextField, StringValidators.REQUIRE_NON_EMPTY_STRING); + + return validationPanel; + } + + public void load(Project project) { + ProjectInformation info = project.getLookup().lookup(ProjectInformation.class); + if (info != null) { + nameTextField.setText(info.getName()); + if (info.getFile() != null) { + fileLabel.setText(info.getFile().getName()); + } + } + + ProjectMetaData metaData = project.getLookup().lookup(ProjectMetaData.class); + if (metaData != null) { + titleTextField.setText(metaData.getTitle()); + authorTextField.setText(metaData.getAuthor()); + keywordsTextField.setText(metaData.getKeywords()); + descriptionTextArea.setText(metaData.getDescription()); + } + } + + public void save(Project project) { + ProjectInformation info = project.getLookup().lookup(ProjectInformation.class); + if (info != null) { + if (!nameTextField.getText().isEmpty() && !nameTextField.getText().equals(info.getName())) { + ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); + pc.renameProject(project, nameTextField.getText()); + } + } + ProjectMetaData metaData = project.getLookup().lookup(ProjectMetaData.class); + if (metaData != null) { + metaData.setTitle(titleTextField.getText()); + + metaData.setAuthor(authorTextField.getText()); + metaData.setKeywords(keywordsTextField.getText()); + metaData.setDescription(descriptionTextArea.getText()); + } + } + + /** + * This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + descriptionPanel = new javax.swing.JPanel(); + descriptionScrollPane = new javax.swing.JScrollPane(); + descriptionTextArea = new javax.swing.JTextArea(); + labelDescription = new javax.swing.JLabel(); + labelKeywords = new javax.swing.JLabel(); + keywordsTextField = new javax.swing.JTextField(); + authorTextField = new javax.swing.JTextField(); + labelAuthor = new javax.swing.JLabel(); + labelName = new javax.swing.JLabel(); + nameTextField = new javax.swing.JTextField(); + fileLabel = new javax.swing.JLabel(); + labelFile = new javax.swing.JLabel(); + labelTitle = new javax.swing.JLabel(); + titleTextField = new javax.swing.JTextField(); + + descriptionPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle + .getMessage(ProjectPropertiesEditor.class, + "ProjectPropertiesEditor.descriptionPanel.border.title"))); // NOI18N + + descriptionTextArea.setColumns(20); + descriptionTextArea.setRows(3); + descriptionScrollPane.setViewportView(descriptionTextArea); + + labelDescription.setText(org.openide.util.NbBundle + .getMessage(ProjectPropertiesEditor.class, "ProjectPropertiesEditor.labelDescription.text")); // NOI18N + + labelKeywords.setText(org.openide.util.NbBundle + .getMessage(ProjectPropertiesEditor.class, "ProjectPropertiesEditor.labelKeywords.text")); // NOI18N + + keywordsTextField.setText(org.openide.util.NbBundle + .getMessage(ProjectPropertiesEditor.class, "ProjectPropertiesEditor.keywordsTextField.text")); // NOI18N + + authorTextField.setText(org.openide.util.NbBundle + .getMessage(ProjectPropertiesEditor.class, "ProjectPropertiesEditor.authorTextField.text")); // NOI18N + + labelAuthor.setText(org.openide.util.NbBundle + .getMessage(ProjectPropertiesEditor.class, "ProjectPropertiesEditor.labelAuthor.text")); // NOI18N + + labelName.setText(org.openide.util.NbBundle + .getMessage(ProjectPropertiesEditor.class, "ProjectPropertiesEditor.labelName.text")); // NOI18N + + nameTextField.setText(org.openide.util.NbBundle + .getMessage(ProjectPropertiesEditor.class, "ProjectPropertiesEditor.nameTextField.text")); // NOI18N + + fileLabel.setText(org.openide.util.NbBundle + .getMessage(ProjectPropertiesEditor.class, "ProjectPropertiesEditor.fileLabel.text")); // NOI18N + + labelFile.setText(org.openide.util.NbBundle + .getMessage(ProjectPropertiesEditor.class, "ProjectPropertiesEditor.labelFile.text")); // NOI18N + + labelTitle.setText(org.openide.util.NbBundle + .getMessage(ProjectPropertiesEditor.class, "ProjectPropertiesEditor.labelTitle.text")); // NOI18N + + titleTextField.setText(org.openide.util.NbBundle + .getMessage(ProjectPropertiesEditor.class, "ProjectPropertiesEditor.titleTextField.text")); // NOI18N + + javax.swing.GroupLayout descriptionPanelLayout = new javax.swing.GroupLayout(descriptionPanel); + descriptionPanel.setLayout(descriptionPanelLayout); + descriptionPanelLayout.setHorizontalGroup( + descriptionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(descriptionPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(descriptionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(labelTitle) + .addComponent(labelAuthor) + .addComponent(labelFile) + .addComponent(labelName) + .addComponent(labelKeywords) + .addComponent(labelDescription)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(descriptionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(descriptionScrollPane, javax.swing.GroupLayout.Alignment.LEADING, + javax.swing.GroupLayout.DEFAULT_SIZE, 377, Short.MAX_VALUE) + .addComponent(fileLabel, javax.swing.GroupLayout.Alignment.LEADING, + javax.swing.GroupLayout.DEFAULT_SIZE, 377, Short.MAX_VALUE) + .addComponent(nameTextField, javax.swing.GroupLayout.Alignment.LEADING, + javax.swing.GroupLayout.DEFAULT_SIZE, 377, Short.MAX_VALUE) + .addComponent(keywordsTextField, javax.swing.GroupLayout.Alignment.LEADING, + javax.swing.GroupLayout.DEFAULT_SIZE, 377, Short.MAX_VALUE) + .addComponent(authorTextField, javax.swing.GroupLayout.Alignment.LEADING, + javax.swing.GroupLayout.DEFAULT_SIZE, 377, Short.MAX_VALUE) + .addComponent(titleTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 377, Short.MAX_VALUE)) + .addContainerGap()) + ); + descriptionPanelLayout.setVerticalGroup( + descriptionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(descriptionPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(descriptionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(fileLabel) + .addComponent(labelFile)) + .addGap(12, 12, 12) + .addGroup(descriptionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(nameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(labelName)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(descriptionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelTitle) + .addComponent(titleTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(descriptionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelAuthor) + .addComponent(authorTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(descriptionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(keywordsTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(labelKeywords)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(descriptionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(labelDescription) + .addComponent(descriptionScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(24, Short.MAX_VALUE)) + ); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(descriptionPanel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(descriptionPanel, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(148, Short.MAX_VALUE)) + ); + }// //GEN-END:initComponents +} diff --git a/modules/DesktopProject/src/main/java/org/gephi/ui/project/WorkspacePropertiesEditor.form b/modules/DesktopProject/src/main/java/org/gephi/ui/project/WorkspacePropertiesEditor.form new file mode 100644 index 0000000000..596a79ea02 --- /dev/null +++ b/modules/DesktopProject/src/main/java/org/gephi/ui/project/WorkspacePropertiesEditor.form @@ -0,0 +1,148 @@ + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/modules/DesktopProject/src/main/java/org/gephi/ui/project/WorkspacePropertiesEditor.java b/modules/DesktopProject/src/main/java/org/gephi/ui/project/WorkspacePropertiesEditor.java new file mode 100644 index 0000000000..c1020f0d17 --- /dev/null +++ b/modules/DesktopProject/src/main/java/org/gephi/ui/project/WorkspacePropertiesEditor.java @@ -0,0 +1,176 @@ +package org.gephi.ui.project; + +import org.gephi.desktop.project.ProjectControllerUIImpl; +import org.gephi.project.api.Workspace; +import org.gephi.project.api.WorkspaceMetaData; +import org.netbeans.validation.api.builtin.stringvalidation.StringValidators; +import org.netbeans.validation.api.ui.ValidationGroup; +import org.netbeans.validation.api.ui.swing.ValidationPanel; +import org.openide.util.Lookup; + +public class WorkspacePropertiesEditor extends javax.swing.JPanel { + + /** + * Creates new form WorkspacePropertiesEditor + */ + public WorkspacePropertiesEditor() { + initComponents(); + } + + public static ValidationPanel createValidationPanel(WorkspacePropertiesEditor innerPanel) { + ValidationPanel validationPanel = new ValidationPanel(); + validationPanel.setInnerComponent(innerPanel); + ValidationGroup group = validationPanel.getValidationGroup(); + + //Make sure components have names + innerPanel.nameTextField.setName(innerPanel.labelName.getText().replace(":", "")); + + group.add(innerPanel.nameTextField, StringValidators.REQUIRE_NON_EMPTY_STRING); + + return validationPanel; + } + + public void setup(Workspace workspace) { + WorkspaceMetaData info = workspace.getWorkspaceMetadata(); + descriptionTextArea.setText(info.getDescription()); + titleTextField.setText(info.getTitle()); + nameTextField.setText(workspace.getName()); + } + + public void unsetup(Workspace workspace) { + WorkspaceMetaData info = workspace.getWorkspaceMetadata(); + if (!descriptionTextArea.getText().isEmpty() && !descriptionTextArea.getText().equals(info.getDescription())) { + info.setDescription(descriptionTextArea.getText()); + } + + if (!nameTextField.getText().isEmpty() && !nameTextField.getText().equals(workspace.getName())) { + Lookup.getDefault().lookup(ProjectControllerUIImpl.class).renameWorkspace(nameTextField.getText()); + } + + if (!titleTextField.getText().isEmpty() && !titleTextField.getText().equals(info.getTitle())) { + info.setTitle(titleTextField.getText()); + } + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + innerPanel = new javax.swing.JPanel(); + nameTextField = new javax.swing.JTextField(); + descriptionScrollPane = new javax.swing.JScrollPane(); + descriptionTextArea = new javax.swing.JTextArea(); + labelName = new javax.swing.JLabel(); + labelDescription = new javax.swing.JLabel(); + labelTitle = new javax.swing.JLabel(); + titleTextField = new javax.swing.JTextField(); + + innerPanel.setBorder(javax.swing.BorderFactory.createTitledBorder( + org.openide.util.NbBundle.getMessage(WorkspacePropertiesEditor.class, + "WorkspacePropertiesEditor.innerPanel.border.title"))); // NOI18N + + descriptionTextArea.setColumns(20); + descriptionTextArea.setRows(3); + descriptionScrollPane.setViewportView(descriptionTextArea); + + labelName.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); + org.openide.awt.Mnemonics.setLocalizedText(labelName, + org.openide.util.NbBundle.getMessage(WorkspacePropertiesEditor.class, + "WorkspacePropertiesEditor.labelName.text")); // NOI18N + + labelDescription.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); + org.openide.awt.Mnemonics.setLocalizedText(labelDescription, + org.openide.util.NbBundle.getMessage(WorkspacePropertiesEditor.class, + "WorkspacePropertiesEditor.labelDescription.text")); // NOI18N + + labelTitle.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); + org.openide.awt.Mnemonics.setLocalizedText(labelTitle, + org.openide.util.NbBundle.getMessage(WorkspacePropertiesEditor.class, + "WorkspacePropertiesEditor.labelTitle.text")); // NOI18N + + javax.swing.GroupLayout innerPanelLayout = new javax.swing.GroupLayout(innerPanel); + innerPanel.setLayout(innerPanelLayout); + innerPanelLayout.setHorizontalGroup( + innerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(innerPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(innerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(innerPanelLayout.createSequentialGroup() + .addComponent(labelName, javax.swing.GroupLayout.PREFERRED_SIZE, 82, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(nameTextField)) + .addGroup(innerPanelLayout.createSequentialGroup() + .addGroup( + innerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addComponent(labelDescription, javax.swing.GroupLayout.DEFAULT_SIZE, 82, + Short.MAX_VALUE) + .addComponent(labelTitle, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(innerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(titleTextField) + .addComponent(descriptionScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 235, + Short.MAX_VALUE)))) + .addContainerGap()) + ); + innerPanelLayout.setVerticalGroup( + innerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(innerPanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(innerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(nameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(labelName)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(innerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelTitle) + .addComponent(titleTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(innerPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(innerPanelLayout.createSequentialGroup() + .addComponent(labelDescription) + .addGap(0, 0, Short.MAX_VALUE)) + .addComponent(descriptionScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 150, + Short.MAX_VALUE)) + .addGap(17, 17, 17)) + ); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(innerPanel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(innerPanel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addContainerGap()) + ); + }// //GEN-END:initComponents + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JScrollPane descriptionScrollPane; + private javax.swing.JTextArea descriptionTextArea; + private javax.swing.JPanel innerPanel; + private javax.swing.JLabel labelDescription; + private javax.swing.JLabel labelName; + private javax.swing.JLabel labelTitle; + private javax.swing.JTextField nameTextField; + private javax.swing.JTextField titleTextField; + // End of variables declaration//GEN-END:variables +} diff --git a/modules/DesktopProject/src/main/nbm/manifest.mf b/modules/DesktopProject/src/main/nbm/manifest.mf index 84e1f552dc..df14d2d706 100644 --- a/modules/DesktopProject/src/main/nbm/manifest.mf +++ b/modules/DesktopProject/src/main/nbm/manifest.mf @@ -1,4 +1,8 @@ Manifest-Version: 1.0 +OpenIDE-Module-Layer: org/gephi/desktop/project/layer.xml OpenIDE-Module-Localizing-Bundle: org/gephi/desktop/project/Bundle.properties AutoUpdate-Essential-Module: true -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Install: org/gephi/desktop/project/Installer.class +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi UI +OpenIDE-Module-Name: Desktop Project diff --git a/modules/DesktopProject/src/main/nbm/module.xml b/modules/DesktopProject/src/main/nbm/module.xml deleted file mode 100644 index 5e65756ab1..0000000000 --- a/modules/DesktopProject/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle.properties index 28923c349b..845609997d 100644 --- a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle.properties +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle.properties @@ -1,29 +1,32 @@ -OpenIDE-Module-Display-Category=Gephi UI -OpenIDE-Module-Long-Description=\ - Project management actions and user interaction -OpenIDE-Module-Name=Desktop Project - -CloseProject_confirm_title = "Close Project" -CloseProject_confirm_message=Do you want to save your project?\ -
    Modifications will be lost if you don't save them. -CloseProject_confirm_save = Save -CloseProject_confirm_doNotSave = Do not save -CloseProject_confirm_cancel = Cancel -OpenIDE-Module-Short-Description=Project management actions and user interaction -SaveAsProject_filechooser_filter=Gephi Files -SaveAsProject_SaveFailed=Could not write to file {0} -SaveAsProject_Overwrite={0} exists. Overwrite? - -ProjectControllerUI.status.opened = {0} opened -ProjectControllerUI.status.saved = {0} saved - -OpenProject_filechooser_filter=Gephi Files -OpenProject.defaulterror=Impossible to open this file. It must he a compatible '.gephi' file. - -ProjectProperties_dialog_title=Project Properties - - -OpenFile_filechooser_graphfilter=Graph Files -OpenFile_filechooser_zipfilter=Archived Files - -ProjectControllerUI.error.open=The project file couldn't be opened. Please check the file has .gephi extension. \ No newline at end of file +OpenIDE-Module-Long-Description=Project management actions and user interaction +CloseProject_confirm_title=Close Project +CloseProject_confirm_message=Do you want to save your project?
    Modifications will be lost if you don't save them. +CloseProject_confirm_save=Save +CloseProject_confirm_doNotSave=Do not save +CloseProject_confirm_cancel=Cancel +OpenIDE-Module-Short-Description=Project management actions and user interaction +SaveAsProject_filechooser_filter=Gephi Files +SaveAsProject_SaveFailed=Could not write to file {0} +SaveAsProject_Overwrite={0} exists. Overwrite? +ProjectControllerUI.status.opened={0} opened +ProjectControllerUI.status.saved={0} saved +OpenProject_filechooser_filter=Gephi Files +OpenProject.defaulterror=Impossible to open this file. It must be a compatible '.gephi' file. +ProjectProperties_dialog_title=Project Properties +ManageProjects_dialog_title=Manage Projects +WorkspaceProperties_dialog_title=Workspace Properties +NewWorkspace_dialog_title=New Workspace +Menu/Workspace=Workspace + +OpenFile_filechooser_graphfilter=Graph Files +OpenFile_filechooser_zipfilter=Archived Files +ProjectControllerUI.error.open=The project file couldn't be opened. Please check the file has .gephi extension. +ProjectControllerUI.error.multipleGephi=Please select a unique .gephi project file +ProjectControllerUI.error.noFileAssociated=The project file for "{0}" cannot be found. The project may not have been saved to disk. +ProjectControllerUI.error.fileNotAccessible=The file "{0}" cannot be accessed. It may have been moved, deleted, or is on an unavailable drive. + +DeleteWorkspace_confirm_message=Are you sure do you want to delete this workspace ? +DeleteWorkspace_confirm_title=Close workspace + +DeleteWorkspaces_confirm_message=Are you sure do you want to delete {0} workspaces ? +DeleteWorkspaces_confirm_title=Close multiple workspaces \ No newline at end of file diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_ar.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_ca.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_ca.properties new file mode 100644 index 0000000000..ea5a1e1801 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_ca.properties @@ -0,0 +1,29 @@ +OpenIDE-Module-Long-Description=Accions de la gestiσ de projectes i interacciσ de les persones usuΰries + +CloseProject_confirm_title = "Tanca el projecte" +CloseProject_confirm_message=Segur que vols desar el projecte?
    Els canvis es perdran si no els guardes +CloseProject_confirm_save = Desa +CloseProject_confirm_doNotSave = No ho desis +CloseProject_confirm_cancel = Cancel·la +OpenIDE-Module-Short-Description=Accions de la gestiσ de projectes i interacciσ amb les persones usuΰries +SaveAsProject_filechooser_filter=Fitxers de Gephi +SaveAsProject_SaveFailed=No s'ha pogut escriure el fitxer {0} +SaveAsProject_Overwrite={0} ja existeix. Vols sobreescriure'l? + +ProjectControllerUI.status.opened = {0} obert +ProjectControllerUI.status.saved = {0} desat + +OpenProject_filechooser_filter=Fitxers de Gephi +OpenProject.defaulterror=No s'ha pogut obrir aquest fitxer: ha de ser compatible amb .gephi + +ProjectProperties_dialog_title=Propietats del projecte + + +OpenFile_filechooser_graphfilter=Fitxers de Gephi +OpenFile_filechooser_zipfilter=Fitxers arxivats + +ProjectControllerUI.error.open=No s'ha pogut obrir el fitxer. Si us plau, controla que tingui l'extensiσ .gephi +ProjectControllerUI.error.multipleGephi=Si us plau, selecciona un ϊnic fitxer .gephi + +DeleteWorkspace_confirm_message=Segur que vols esborrar aquest banc de treball? +DeleteWorkspace_confirm_title=Tanca el banc de treball diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_cs.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_cs.properties index e2a3ca9bad..2ddaff035a 100644 --- a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_cs.properties +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_cs.properties @@ -1,43 +1,25 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-24 11\:31+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=\u010cinnosti spr\u00e1vy projektu a interakce s u\u017eivatelem - -CloseProject_confirm_title="Uzav\u0159\u00edt projekt" - -CloseProject_confirm_message=Chcete V\u00e1\u0161 projekt ulo\u017eit?
    Pokud zm\u011bny neulo\u017e\u00edte, budou ztraceny. - +OpenIDE-Module-Long-Description=\u010cinnosti sprαvy projektu a interakce s u\u017eivatelem +CloseProject_confirm_title="Uzav\u0159νt projekt" +CloseProject_confirm_message=Chcete Vα\u0161 projekt ulo\u017eit?
    Pokud zm\u011bny neulo\u017eνte, budou ztraceny. CloseProject_confirm_save=Ulo\u017eit - CloseProject_confirm_doNotSave=Neulo\u017eit - CloseProject_confirm_cancel=Zru\u0161it - -OpenIDE-Module-Short-Description=\u010cinnosti spr\u00e1vy projektu a interakce s u\u017eivatelem - +OpenIDE-Module-Short-Description=\u010cinnosti sprαvy projektu a interakce s u\u017eivatelem SaveAsProject_filechooser_filter=Soubory Gephi - SaveAsProject_SaveFailed=Nelze zapisovat do souboru {0} - -SaveAsProject_Overwrite={0} existuje. P\u0159epsat? - +SaveAsProject_Overwrite={0} existuje. P\u0159epsat? ProjectControllerUI.status.opened={0} otev\u0159eno - ProjectControllerUI.status.saved={0} ulo\u017eeno - OpenProject_filechooser_filter=Soubory Gephi - -OpenProject.defaulterror=Nelze otev\u0159\u00edt soubor. Mus\u00ed b\u00fdt kompatibiln\u00ed soubor '.gephi'. +# OpenProject.defaulterror=Impossible to open this file. It must be a compatible '.gephi' file. ProjectProperties_dialog_title=Vlastnosti projektu -OpenFile_filechooser_graphfilter=Soubory Gephi -OpenFile_filechooser_zipfilter=Archivovan\u00e9 soubory +OpenFile_filechooser_graphfilter=Soubory Gephi +OpenFile_filechooser_zipfilter=Archivovanι soubory +ProjectControllerUI.error.open=Soubor projektu nemohl bύt otev\u0159en. Zkontrolujte prosνm, zda soubor mα p\u0159νponu .gephi. +ProjectControllerUI.error.multipleGephi=Zvolte prosνm jedine\u010dnύ soubor projektu s p\u0159νponou .gephi -ProjectControllerUI.error.open=Soubor projektu nemohl b\u00fdt otev\u0159en. Zkontrolujte pros\u00edm, zda soubor m\u00e1 p\u0159\u00edponu .gephi. +DeleteWorkspace_confirm_message=Jste si jisti, \u017ee chcete tento pracovnν prostor smazat ? +DeleteWorkspace_confirm_title=Zav\u0159νt pracovnν prostor diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_de.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_de.properties new file mode 100644 index 0000000000..650fd5b41c --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_de.properties @@ -0,0 +1,29 @@ +OpenIDE-Module-Long-Description=Projektverwaltungs-Aktionen und Benutzer-Interaktion + +CloseProject_confirm_title = "Projekt schlieίen" +CloseProject_confirm_message=Mφchten Sie Ihr Projekt speichern?
    Δnderungen gehen verloren, falls Sie sie nicht speichern +CloseProject_confirm_save = Speichern +CloseProject_confirm_doNotSave = Nicht speichern +CloseProject_confirm_cancel = Abbrechen +OpenIDE-Module-Short-Description=Projektverwaltungs-Aktionen und Benutzer-Interaktion +SaveAsProject_filechooser_filter=Gephi Dateien +SaveAsProject_SaveFailed=Konnte Datei {0} nicht schreiben +SaveAsProject_Overwrite={0} existiert. άberschreiben? + +ProjectControllerUI.status.opened = {0} geφffnet +ProjectControllerUI.status.saved = {0} gespeichert + +OpenProject_filechooser_filter=Gephi Dateien +OpenProject.defaulterror=Kann Datei nicht φfnen. Es muss eine kompatible '.gephi'-Datei sein. + +ProjectProperties_dialog_title=Projekt-Eigenschaften + + +OpenFile_filechooser_graphfilter=Graph Datei +OpenFile_filechooser_zipfilter=Archivierte Dateien + +ProjectControllerUI.error.open=Die Projektdatei konnte nicht geφffnet werden. Bitte stellen Sie sicher, dass die Dateiendung .gephi lautet. +ProjectControllerUI.error.multipleGephi=Bitte wδhlen Sie genau eine .gephi Projekt-Datei aus. + +DeleteWorkspace_confirm_message=Mφchten Sie diesen Arbeitsbereich wirklich lφschen? +DeleteWorkspace_confirm_title=Arbeitsbereich schlieίen diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_el.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_el.properties new file mode 100644 index 0000000000..d2027042d3 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_el.properties @@ -0,0 +1,30 @@ + + +CloseProject_confirm_title=\u039A\u03BB\u03B5\u03AF\u03C3\u03B9\u03BC\u03BF \u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1\u03C2 +CloseProject_confirm_save=\u0391\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7 +SaveAsProject_SaveFailed=\u0394\u03B5\u03BD \u03AE\u03C4\u03B1\u03BD \u03B4\u03C5\u03BD\u03B1\u03C4\u03AE \u03B7 \u03B5\u03B3\u03B3\u03C1\u03B1\u03C6\u03AE \u03C3\u03C4\u03BF {0} +CloseProject_confirm_doNotSave=\u03A7\u03C9\u03C1\u03AF\u03C2 \u03B1\u03C0\u03BF\u03B8\u03AE\u03BA\u03B5\u03C5\u03C3\u03B7 +ProjectControllerUI.status.opened=\u03A4\u03BF {0} \u03AC\u03BD\u03BF\u03B9\u03BE\u03B5 +SaveAsProject_Overwrite={0} \u03C5\u03C0\u03AC\u03C1\u03C7\u03B5\u03B9 \u03AE\u03B4\u03B7. \u039D\u03B1 \u03B1\u03BD\u03C4\u03B9\u03BA\u03B1\u03C4\u03B1\u03C3\u03C4\u03B1\u03B8\u03B5\u03AF; +ProjectControllerUI.status.saved=\u03A4\u03BF {0} \u03B1\u03C0\u03BF\u03B8\u03B7\u03BA\u03B5\u03CD\u03C4\u03B7\u03BA\u03B5 +ProjectProperties_dialog_title=\u0399\u03B4\u03B9\u03CC\u03C4\u03B7\u03C4\u03B5\u03C2 \u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1\u03C2 + + +OpenFile_filechooser_graphfilter=\u0391\u03C1\u03C7\u03B5\u03AF\u03B1 \u03B3\u03C1\u03B1\u03C6\u03B7\u03BC\u03AC\u03C4\u03C9\u03BD +ProjectControllerUI.error.open=\u0394\u03B5\u03BD \u03AE\u03C4\u03B1\u03BD \u03B4\u03C5\u03BD\u03B1\u03C4\u03CC \u03C4\u03BF \u03AC\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1 \u03C4\u03B7\u03C2 \u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1\u03C2. \u0395\u03BB\u03AD\u03B3\u03BE\u03C4\u03B5 \u03CC\u03C4\u03B9 \u03C4\u03BF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF \u03AD\u03C7\u03B5\u03B9 \u03B5\u03C0\u03AD\u03BA\u03C4\u03B1\u03C3\u03B7 .gephi. +ProjectControllerUI.error.multipleGephi=\u03A0\u03B1\u03C1\u03B1\u03BA\u03B1\u03BB\u03CE \u03B5\u03C0\u03B9\u03BB\u03AD\u03BE\u03C4\u03B5 \u03AD\u03BD\u03B1 \u03BC\u03BF\u03BD\u03B1\u03B4\u03B9\u03BA\u03CC \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF .gephi +OpenFile_filechooser_zipfilter=\u0391\u03C1\u03C7\u03B5\u03B9\u03BF\u03B8\u03B5\u03C4\u03B7\u03BC\u03AD\u03BD\u03B1 \u03B1\u03C1\u03C7\u03B5\u03AF\u03B1 +OpenProject.defaulterror=\u0389\u03C4\u03B1\u03BD \u03B1\u03B4\u03CD\u03BD\u03B1\u03C4\u03BF \u03C4\u03BF \u03AC\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1 \u03B1\u03C5\u03C4\u03BF\u03CD \u03C4\u03BF\u03C5 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5. \u03A0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03AD\u03BD\u03B1 \u03C3\u03C5\u03BC\u03B2\u03B1\u03C4\u03CC \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF '.gephi' . +SaveAsProject_filechooser_filter=\u0391\u03C1\u03C7\u03B5\u03AF\u03B1 Gephi +OpenProject_filechooser_filter=\u0391\u03C1\u03C7\u03B5\u03AF\u03B1 Gephi +CloseProject_confirm_message=\u0398\u03AD\u03BB\u03B5\u03C4\u03B5 \u03BD\u03B1 \u03B1\u03C0\u03BF\u03B8\u03B7\u03BA\u03B5\u03CD\u03C3\u03B5\u03C4\u03B5 \u03C4\u03B7\u03BD \u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 \u03C3\u03B1\u03C2;
    \u039F\u03B9 \u03B1\u03BB\u03BB\u03B1\u03B3\u03AD\u03C2 \u03C0\u03BF\u03C5 \u03BA\u03AC\u03BD\u03B1\u03C4\u03B5, \u03B8\u03B1 \u03C7\u03B1\u03B8\u03BF\u03CD\u03BD \u03B1\u03BD \u03B4\u03B5\u03BD \u03C4\u03B9\u03C2 \u03B1\u03C0\u03BF\u03B8\u03B7\u03BA\u03B5\u03CD\u03C3\u03B5\u03C4\u03B5. +CloseProject_confirm_cancel=\u0391\u03BA\u03CD\u03C1\u03C9\u03C3\u03B7 +OpenIDE-Module-Short-Description=\u0395\u03BD\u03AD\u03C1\u03B3\u03B5\u03B9\u03B5\u03C2 \u03B4\u03B9\u03B1\u03C7\u03B5\u03AF\u03C1\u03B9\u03C3\u03B7\u03C2 \u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1\u03C2 \u03BA\u03B1\u03B9 \u03B1\u03BB\u03BB\u03B7\u03BB\u03B5\u03C0\u03AF\u03B4\u03C1\u03B1\u03C3\u03B7 \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7 +OpenIDE-Module-Long-Description=\u0395\u03BD\u03AD\u03C1\u03B3\u03B5\u03B9\u03B5\u03C2 \u03B4\u03B9\u03B1\u03C7\u03B5\u03AF\u03C1\u03B9\u03C3\u03B7\u03C2 \u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1\u03C2 \u03BA\u03B1\u03B9 \u03B1\u03BB\u03BB\u03B7\u03BB\u03B5\u03C0\u03AF\u03B4\u03C1\u03B1\u03C3\u03B7\u03C2 \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7 +DeleteWorkspaces_confirm_title=\u039A\u03BB\u03B5\u03AF\u03C3\u03B9\u03BC\u03BF \u03C0\u03BF\u03BB\u03BB\u03B1\u03C0\u03BB\u03CE\u03BD \u03C7\u03CE\u03C1\u03C9\u03BD \u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1\u03C2 +WorkspaceProperties_dialog_title=\u03A1\u03C5\u03B8\u03BC\u03AF\u03C3\u03B5\u03B9\u03C2 \u03C7\u03CE\u03C1\u03BF\u03C5 \u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1\u03C2 +DeleteWorkspaces_confirm_message=\u03A3\u03AF\u03B3\u03BF\u03C5\u03C1\u03B1 \u03B8\u03AD\u03BB\u03B5\u03C4\u03B5 \u03BD\u03B1 \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03C8\u03B5\u03C4\u03B5 {0} \u03C7\u03CE\u03C1\u03BF\u03C5\u03C2 \u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1\u03C2; +Menu/Workspace=\u03A7\u03CE\u03C1\u03BF\u03C2 \u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1\u03C2 +DeleteWorkspace_confirm_title=\u039A\u03BB\u03B5\u03AF\u03C3\u03B9\u03BC\u03BF \u03C7\u03CE\u03C1\u03BF\u03C5 \u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1\u03C2 +DeleteWorkspace_confirm_message=\u03A3\u03AF\u03B3\u03BF\u03C5\u03C1\u03B1 \u03B8\u03AD\u03BB\u03B5\u03C4\u03B5 \u03BD\u03B1 \u03B4\u03B9\u03B1\u03B3\u03C1\u03AC\u03C8\u03B5\u03C4\u03B5 \u03B1\u03C5\u03C4\u03CC\u03BD \u03C4\u03BF \u03C7\u03CE\u03C1\u03BF \u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1\u03C2; +ManageProjects_dialog_title=\u0394\u03B9\u03B1\u03C7\u03B5\u03AF\u03C1\u03B9\u03C3\u03B7 \u03B5\u03C1\u03B3\u03B1\u03C3\u03B9\u03CE\u03BD diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_es.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_es.properties index 6511d54dbc..40cdc5ba4d 100644 --- a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_es.properties +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_es.properties @@ -1,43 +1,29 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:07+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Acciones de gesti\u00f3n del proyecto e interacci\u00f3n con el usuario - -CloseProject_confirm_title=Cerrar proyecto - -CloseProject_confirm_message=\u00bfQuieres guardar el proyecto?
    Las modificaciones se perder\u00e1n si no las guardas - +OpenIDE-Module-Long-Description=Acciones de gestiσn del proyecto e interacciσn con el usuario +CloseProject_confirm_title=Cerrar el proyecto +CloseProject_confirm_message=ΏQuieres guardar el proyecto?
    Las modificaciones se perderαn si no las guardas CloseProject_confirm_save=Guardar - CloseProject_confirm_doNotSave=No guardar - CloseProject_confirm_cancel=Cancelar - -OpenIDE-Module-Short-Description=Acciones de gesti\u00f3n del proyecto e interacci\u00f3n con el usuario - +OpenIDE-Module-Short-Description=Acciones de gestiσn del proyecto e interacciσn con el usuario SaveAsProject_filechooser_filter=Archivos Gephi - SaveAsProject_SaveFailed=Imposible escribir en el archivo {0} - -SaveAsProject_Overwrite={0} ya existe. \u00bfSobreescribir? - +SaveAsProject_Overwrite={0} existe. \u00BFSobrescribir? ProjectControllerUI.status.opened={0} abierto - ProjectControllerUI.status.saved={0} guardado - OpenProject_filechooser_filter=Archivos Gephi - OpenProject.defaulterror=Imposible abrir este archivo. Debe ser un archivo '.gephi' compatible. - ProjectProperties_dialog_title=Propiedades del proyecto -OpenFile_filechooser_graphfilter=Archivos de grafo +OpenFile_filechooser_graphfilter=Archivos de grafo OpenFile_filechooser_zipfilter=Ficheros archivados en ZIP - -ProjectControllerUI.error.open=El proyecto no puedo ser abierto. Por favor comprueba que el archivo tiene extensi\u00f3n .gephi. +ProjectControllerUI.error.open=El proyecto no puedo ser abierto. Por favor comprueba que el archivo tiene extensiσn .gephi. +ProjectControllerUI.error.multipleGephi=Por favor selecciona un ϊnico archivo de proyecto .gephi +DeleteWorkspace_confirm_message=Estαs seguro de que deseas eliminar este espacio de trabajo? +DeleteWorkspace_confirm_title=Cerrar espacio de trabajo +ManageProjects_dialog_title=Gestionar los proyectos +WorkspaceProperties_dialog_title=Propiedades del espacio de trabajo +Menu/Workspace=\u00C1rea de trabajo +DeleteWorkspaces_confirm_title=Cerrar varios espacios de trabajo +DeleteWorkspaces_confirm_message=\u00BFEst\u00E1 seguro de que deseas eliminar {0} espacios de trabajo? +NewWorkspace_dialog_title=Nuevo espacio de trabajo diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_fa.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_fa.properties new file mode 100644 index 0000000000..35620c58c6 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_fa.properties @@ -0,0 +1,27 @@ +OpenIDE-Module-Long-Description=\u0627\u0639\u0645\u0627\u0644 \u0645\u062F\u06CC\u0631\u06CC\u062A \u067E\u0631\u0648\u0698\u0647 \u0648 \u062A\u0639\u0627\u0645\u0644 \u0628\u0627 \u06A9\u0627\u0631\u0628\u0631 +CloseProject_confirm_title=\u0628\u0633\u062A\u0646 \u067E\u0631\u0648\u0698\u0647 +CloseProject_confirm_message=\u0622\u06CC\u0627 \u0645\u0627\u06CC\u0644\u06CC\u062F \u067E\u0631\u0648\u0698\u0647 \u0631\u0627 \u0630\u062E\u06CC\u0631\u0647 \u06A9\u0646\u06CC\u062F\u061F
    \u0686\u0646\u0627\u0646\u0686\u0647 \u067E\u0631\u0648\u0698\u0647 \u0631\u0627 \u0630\u062E\u06CC\u0631\u0647 \u0646\u06A9\u0646\u06CC\u062F\u060C \u062A\u063A\u06CC\u06CC\u0631\u0627\u062A \u0634\u0645\u0627 \u0627\u0632 \u062F\u0633\u062A \u062E\u0648\u0627\u0647\u062F \u0631\u0641\u062A. +CloseProject_confirm_save=\u0630\u062E\u06CC\u0631\u0647\u200C\u0633\u0627\u0632\u06CC +CloseProject_confirm_doNotSave=\u0639\u062F\u0645 \u0630\u062E\u06CC\u0631\u0647\u200C\u0633\u0627\u0632\u06CC +CloseProject_confirm_cancel=\u0644\u063A\u0648 +OpenIDE-Module-Short-Description=\u0627\u0639\u0645\u0627\u0644 \u0645\u062F\u06CC\u0631\u06CC\u062A \u067E\u0631\u0648\u0698\u0647 \u0648 \u062A\u0639\u0627\u0645\u0644 \u0628\u0627 \u06A9\u0627\u0631\u0628\u0631 +SaveAsProject_filechooser_filter=\u067E\u0631\u0648\u0646\u062F\u0647\u200C\u0647\u0627\u06CC \u06AF\u0641\u06CC +SaveAsProject_SaveFailed=\u0646\u0648\u0634\u062A\u0646 \u062F\u0631 {0} \u0646\u0627\u0645\u0648\u0641\u0642 \u0628\u0648\u062F +SaveAsProject_Overwrite={0} \u0648\u062C\u0648\u062F \u062F\u0627\u0631\u062F. \u0622\u06CC\u0627 \u0628\u0627\u0632\u0646\u0648\u06CC\u0633\u06CC \u0634\u0648\u062F\u061F +ProjectControllerUI.status.opened={0} \u06AF\u0634\u0648\u062F\u0647 \u0634\u062F +ProjectControllerUI.status.saved={0} \u0630\u062E\u06CC\u0631\u0647 \u0634\u062F +OpenProject_filechooser_filter=\u067E\u0631\u0648\u0646\u062F\u0647\u200C\u0647\u0627\u06CC \u06AF\u0641\u06CC +OpenProject.defaulterror=\u06AF\u0634\u0648\u062F\u0646 \u067E\u0631\u0648\u0646\u062F\u0647 \u0645\u0645\u06A9\u0646 \u0646\u0628\u0648\u062F. \u067E\u0631\u0648\u0646\u062F\u0647 \u0628\u0627\u06CC\u062F \u067E\u0633\u0648\u0646\u062F \u00AB.gephi\u00BB \u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F. +ProjectProperties_dialog_title=\u0648\u06CC\u0698\u06AF\u06CC\u200C\u0647\u0627\u06CC \u067E\u0631\u0648\u0698\u0647 +ManageProjects_dialog_title=\u0645\u062F\u06CC\u0631\u06CC\u062A \u067E\u0631\u0648\u0698\u0647\u200C\u0647\u0627 +WorkspaceProperties_dialog_title=\u0648\u06CC\u0698\u06AF\u06CC\u200C\u0647\u0627\u06CC \u0641\u0636\u0627\u06CC \u06A9\u0627\u0631 +NewWorkspace_dialog_title=\u0641\u0636\u0627\u06CC \u06A9\u0627\u0631 \u062C\u062F\u06CC\u062F +Menu/Workspace=\u0641\u0636\u0627\u06CC \u06A9\u0627\u0631 +OpenFile_filechooser_graphfilter=\u067E\u0631\u0648\u0646\u062F\u0647\u200C\u0647\u0627\u06CC \u06AF\u0631\u0627\u0641 +OpenFile_filechooser_zipfilter=\u067E\u0631\u0648\u0646\u062F\u0647\u200C\u0647\u0627\u06CC \u0641\u0634\u0631\u062F\u0647 +ProjectControllerUI.error.open=\u06AF\u0634\u0648\u062F\u0646 \u067E\u0631\u0648\u0698\u0647 \u0645\u0645\u06A9\u0646 \u0646\u0628\u0648\u062F. \u0627\u0637\u0645\u06CC\u0646\u0627\u0646 \u062D\u0627\u0635\u0644 \u06A9\u0646\u06CC\u062F \u067E\u0631\u0648\u0646\u062F\u0647 \u067E\u0633\u0648\u0646\u062F \u00AB.gephi\u00BB \u062F\u0627\u0634\u062A\u0647 \u0628\u0627\u0634\u062F. +ProjectControllerUI.error.multipleGephi=\u0644\u0637\u0641\u0627\u064B \u067E\u0631\u0648\u0698\u0647\u200C\u0627\u06CC \u06CC\u06A9\u062A\u0627 \u0628\u0627 \u067E\u0633\u0648\u0646\u062F \u00AB.gephi\u00BB \u0627\u0646\u062A\u062E\u0627\u0628 \u06A9\u0646\u06CC\u062F +DeleteWorkspace_confirm_message=\u0622\u06CC\u0627 \u0627\u0632 \u062D\u0630\u0641 \u0627\u06CC\u0646 \u0641\u0636\u0627\u06CC \u06A9\u0627\u0631 \u0627\u0637\u0645\u06CC\u0646\u0627\u0646 \u062F\u0627\u0631\u06CC\u062F\u061F +DeleteWorkspace_confirm_title=\u0628\u0633\u062A\u0646 \u0641\u0636\u0627\u06CC \u06A9\u0627\u0631 +DeleteWorkspaces_confirm_message=\u0622\u06CC\u0627 \u0627\u0632 \u062D\u0630\u0641 {0} \u0641\u0636\u0627\u06CC \u06A9\u0627\u0631 \u0627\u0637\u0645\u06CC\u0646\u0627\u0646 \u062F\u0627\u0631\u06CC\u062F\u061F +DeleteWorkspaces_confirm_title=\u0628\u0633\u062A\u0646 \u0686\u0646\u062F\u06CC\u0646 \u0641\u0636\u0627\u06CC \u06A9\u0627\u0631 diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_fr.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_fr.properties index 3f961db515..b2c688a045 100644 --- a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_fr.properties +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_fr.properties @@ -1,43 +1,29 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:07+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - OpenIDE-Module-Long-Description=Actions de gestion de projet et interface utilisateur - CloseProject_confirm_title=Fermer le projet - -CloseProject_confirm_message=Sauvegarder le projet ?
    Les changements seront perdus sinon. - +CloseProject_confirm_message=Sauvegarder le projet ?
    Les changements seront perdus sinon. CloseProject_confirm_save=Enregistrer - CloseProject_confirm_doNotSave=Ne pas enregistrer - CloseProject_confirm_cancel=Annuler - OpenIDE-Module-Short-Description=Actions de gestion de projet et interface utilisateur - SaveAsProject_filechooser_filter=Fichiers Gephi - -SaveAsProject_SaveFailed=Impossible d'\u00e9crire le fichier {0}. - -SaveAsProject_Overwrite={0} existe. \u00c9craser ? - +SaveAsProject_SaveFailed=Impossible d'\u00E9crire le fichier {0} +SaveAsProject_Overwrite={0} existe. \u00C9craser ? ProjectControllerUI.status.opened={0} ouvert - -ProjectControllerUI.status.saved={0} enregistr\u00e9 - +ProjectControllerUI.status.saved={0} enregistrι OpenProject_filechooser_filter=Fichiers Gephi +OpenProject.defaulterror=Impossible d'ouvrir ce fichier. Il doit κtre compatible avec une extension de fichier '.gephi'. +ProjectProperties_dialog_title=Propriιtιs du projet -OpenProject.defaulterror=Impossible d'ouvrir ce fichier. Ce doit \u00eatre un .gephi compatible. - -ProjectProperties_dialog_title=Propri\u00e9t\u00e9s du projet OpenFile_filechooser_graphfilter=Fichiers de graphe - OpenFile_filechooser_zipfilter=Fichiers d'archives ZIP - -ProjectControllerUI.error.open=Le fichier projet n'a pas pu \u00eatre ouvert. V\u00e9rifiez que le fichier a l'extension '.gephi'. +ProjectControllerUI.error.open=Le fichier projet n'a pas pu κtre ouvert. Vιrifiez que le fichier a l'extension '.gephi'. +ProjectControllerUI.error.multipleGephi=Veuillez sιlectionner un seul fichier de projet .gephi +DeleteWorkspace_confirm_message=Souhaitez-vous vraiment supprimer cet espace de travail ? +DeleteWorkspace_confirm_title=Fermer l'espace de travail +WorkspaceProperties_dialog_title=Propri\u00E9t\u00E9s de l'espace de travail +Menu/Workspace=Espace de travail +ManageProjects_dialog_title=G\u00E9rer les projets +NewWorkspace_dialog_title=Nouvel espace de travail +DeleteWorkspaces_confirm_message=Κtes-vous sϋr de vouloir supprimer {0} espaces de travail\u202F? +DeleteWorkspaces_confirm_title=Fermer plusieurs espaces de travail diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_he.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_he.properties new file mode 100644 index 0000000000..d72e3e1ad2 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_he.properties @@ -0,0 +1,24 @@ +OpenIDE-Module-Long-Description=Project management actions and user interaction +CloseProject_confirm_title="Close Project" +CloseProject_confirm_message=Do you want to save your project?
    Modifications will be lost if you don't save them. +CloseProject_confirm_save=\u05e9\u05de\u05d5\u05e8 +CloseProject_confirm_doNotSave=Do not save +CloseProject_confirm_cancel=\u05d1\u05d8\u05dc +OpenIDE-Module-Short-Description=Project management actions and user interaction +SaveAsProject_filechooser_filter=Gephi Files +SaveAsProject_SaveFailed=Could not write to file {0} +SaveAsProject_Overwrite={0} exists. Overwrite? +ProjectControllerUI.status.opened={0} opened +ProjectControllerUI.status.saved={0} saved +OpenProject_filechooser_filter=Gephi Files +OpenProject.defaulterror=Impossible to open this file. It must be a compatible '.gephi' file. +ProjectProperties_dialog_title=Project Properties + + +OpenFile_filechooser_graphfilter=Graph Files +OpenFile_filechooser_zipfilter=Archived Files +ProjectControllerUI.error.open=The project file couldn't be opened. Please check the file has .gephi extension. +ProjectControllerUI.error.multipleGephi=Please select a unique .gephi project file + +DeleteWorkspace_confirm_message=Are you sure do you want to delete this workspace ? +DeleteWorkspace_confirm_title=Close workspace diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_hu.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_hu.properties new file mode 100644 index 0000000000..84b22c2974 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_hu.properties @@ -0,0 +1,28 @@ + + +OpenProject_filechooser_filter=Gephi f\u00E1jlok +ProjectControllerUI.status.saved={0} mentve +CloseProject_confirm_message=Akarja menteni a projektet?
    A m\u00F3dos\u00EDt\u00E1sok elvesznek, ha nem menti \u0151ket. +ProjectControllerUI.status.opened={0} megnyitva +OpenProject.defaulterror=Ezt a f\u00E1jlt nem lehet megnyitni. Kompatibilis ".gephi" f\u00E1jlnak kell lennie. +CloseProject_confirm_title=Projekt bez\u00E1r\u00E1sa +CloseProject_confirm_save=Ment\u00E9s +OpenFile_filechooser_graphfilter=Grafikon f\u00E1jlok +ProjectControllerUI.error.open=A projektf\u00E1jlt nem lehetett megnyitni. K\u00E9rj\u00FCk, ellen\u0151rizze, hogy a f\u00E1jl kiterjeszt\u00E9se .gephi. +CloseProject_confirm_cancel=Megsz\u00FCnteti +SaveAsProject_SaveFailed=Nem siker\u00FClt \u00EDrni a(z) {0} f\u00E1jlba +SaveAsProject_filechooser_filter=Gephi f\u00E1jlok +DeleteWorkspaces_confirm_title=Z\u00E1rjon be t\u00F6bb munkater\u00FCletet +WorkspaceProperties_dialog_title=Munkater\u00FClet tulajdons\u00E1gai +CloseProject_confirm_doNotSave=Ne mentse el +OpenFile_filechooser_zipfilter=Archiv\u00E1lt f\u00E1jlok +ProjectProperties_dialog_title=Projekt tulajdons\u00E1gai +DeleteWorkspaces_confirm_message=Biztos benne, hogy t\u00F6r\u00F6lni szeretne {0} munkater\u00FCletet? +Menu/Workspace=Munkater\u00FClet +DeleteWorkspace_confirm_title=Z\u00E1rja be a munkater\u00FCletet +OpenIDE-Module-Short-Description=Projektmenedzsment m\u0171veletek \u00E9s felhaszn\u00E1l\u00F3i interakci\u00F3 +OpenIDE-Module-Long-Description=Projektmenedzsment m\u0171veletek \u00E9s felhaszn\u00E1l\u00F3i interakci\u00F3 +DeleteWorkspace_confirm_message=Biztosan szeretn\u00E9 t\u00F6r\u00F6lni ezt a munkater\u00FCletet? +ProjectControllerUI.error.multipleGephi=K\u00E9rj\u00FCk, v\u00E1lasszon egy egyedi .gephi projektf\u00E1jlt +ManageProjects_dialog_title=Projektek kezel\u00E9se +SaveAsProject_Overwrite={0} l\u00E9tezik. \u00C1t\u00EDrja? diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_it.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_it.properties new file mode 100644 index 0000000000..50e322506d --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_it.properties @@ -0,0 +1,27 @@ +OpenIDE-Module-Long-Description=Azioni per la gestione del progetto e interazioni con l'utente +CloseProject_confirm_title="Chiudi Progetto" +CloseProject_confirm_message=Vuoi salvare il progetto?
    Se non salvi perderai le modifiche. +CloseProject_confirm_save=Salva +CloseProject_confirm_doNotSave=Non salvare +CloseProject_confirm_cancel=Annulla +OpenIDE-Module-Short-Description=Azioni per la gestione del progetto e interazioni con l'utente +SaveAsProject_filechooser_filter=Gephi Files +SaveAsProject_SaveFailed=Impossibile scrivere nel file {0} +SaveAsProject_Overwrite={0} esiste giΰ. Sovrascrivere? +ProjectControllerUI.status.opened={0} aperto +ProjectControllerUI.status.saved={0} salvato +OpenProject_filechooser_filter=Gephi Files +OpenProject.defaulterror=Impossibile aprire questo file. Deve essere un file compatibile '.gephi'. +ProjectProperties_dialog_title=Project Properties + + +OpenFile_filechooser_graphfilter=File grafo +OpenFile_filechooser_zipfilter=File Archiviati +ProjectControllerUI.error.open=Impossibile aprire il file di progetto. Si prega di controllare se il file ha l'estensione .gephi. +ProjectControllerUI.error.multipleGephi=Si prega di selezionare un unico file di progetto .gephi +DeleteWorkspace_confirm_message=Are you sure do you want to delete this workspace ? +DeleteWorkspace_confirm_title=Close workspace +ManageProjects_dialog_title=Gestisci progetti +WorkspaceProperties_dialog_title=Proprietΰ dell\u2019area di lavoro +NewWorkspace_dialog_title=Nuovo spazio di lavoro +Menu/Workspace=Spazio di lavoro diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_ja.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_ja.properties index d4f531aab0..4bfd3aeed3 100644 --- a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_ja.properties +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_ja.properties @@ -1,43 +1,29 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-20 02\:05+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7ba1\u7406\u52d5\u4f5c\u3068UI - -CloseProject_confirm_title="\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u9589\u3058\u308b" - -CloseProject_confirm_message=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4fdd\u5b58\u3057\u307e\u3059\u304b\uff1f
    \u4fdd\u5b58\u3057\u306a\u3051\u308c\u3070\u5909\u66f4\u306f\u5931\u308f\u308c\u307e\u3059\u3002 - -CloseProject_confirm_save=\u4fdd\u5b58 - -CloseProject_confirm_doNotSave=\u4fdd\u5b58\u3057\u306a\u3044 - -CloseProject_confirm_cancel=\u30ad\u30e3\u30f3\u30bb\u30eb - -OpenIDE-Module-Short-Description=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7ba1\u7406\u52d5\u4f5c\u3068UI - -SaveAsProject_filechooser_filter=Gephi\u30d5\u30a1\u30a4\u30eb - -SaveAsProject_SaveFailed=\u30d5\u30a1\u30a4\u30eb{0}\u306b\u66f8\u304d\u8fbc\u307f\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f - -SaveAsProject_Overwrite={0}\u304c\u5b58\u5728\u3057\u307e\u3059\u3002\u4e0a\u66f8\u304d\u3057\u307e\u3059\u304b\uff1f - -ProjectControllerUI.status.opened={0}\u958b\u3044\u305f - -ProjectControllerUI.status.saved={0}\u4fdd\u5b58\u3057\u305f - -OpenProject_filechooser_filter=Gephi\u30d5\u30a1\u30a4\u30eb - -OpenProject.defaulterror=\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002\u305d\u308c\u306f\u5f7c\u306e\u4e92\u63db\u6027\u306e\u3042\u308b'.gephi'\u30d5\u30a1\u30a4\u30eb\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 - -ProjectProperties_dialog_title=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30fb\u30d7\u30ed\u30d1\u30c6\u30a3 - -OpenFile_filechooser_graphfilter=\u30b0\u30e9\u30d5\u30d5\u30a1\u30a4\u30eb - -OpenFile_filechooser_zipfilter=\u30a2\u30fc\u30ab\u30a4\u30d6\u30d5\u30a1\u30a4\u30eb - -ProjectControllerUI.error.open=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u30d5\u30a1\u30a4\u30eb\u306bgephi\u62e1\u5f35\u5b50\u304c\u3042\u308b\u304b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +OpenIDE-Module-Long-Description=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7ba1\u7406\u52d5\u4f5c\u3068UI + +CloseProject_confirm_title = "\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u9589\u3058\u308b" +CloseProject_confirm_message=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u4fdd\u5b58\u3057\u307e\u3059\u304b\uff1f
    \u4fdd\u5b58\u3057\u306a\u3051\u308c\u3070\u5909\u66f4\u306f\u5931\u308f\u308c\u307e\u3059\u3002 +CloseProject_confirm_save = \u4fdd\u5b58 +CloseProject_confirm_doNotSave = \u4fdd\u5b58\u3057\u306a\u3044 +CloseProject_confirm_cancel = \u30ad\u30e3\u30f3\u30bb\u30eb +OpenIDE-Module-Short-Description=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7ba1\u7406\u52d5\u4f5c\u3068UI +SaveAsProject_filechooser_filter=Gephi\u30d5\u30a1\u30a4\u30eb +SaveAsProject_SaveFailed=\u30d5\u30a1\u30a4\u30eb{0}\u306b\u66f8\u304d\u8fbc\u307f\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f +SaveAsProject_Overwrite={0}\u304c\u5b58\u5728\u3057\u307e\u3059\u3002\u4e0a\u66f8\u304d\u3057\u307e\u3059\u304b\uff1f + +ProjectControllerUI.status.opened = {0}\u958b\u3044\u305f +ProjectControllerUI.status.saved = {0}\u4fdd\u5b58\u3057\u305f + +OpenProject_filechooser_filter=Gephi\u30d5\u30a1\u30a4\u30eb +# OpenProject.defaulterror=Impossible to open this file. It must be a compatible '.gephi' file. + +ProjectProperties_dialog_title=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30fb\u30d7\u30ed\u30d1\u30c6\u30a3 + + +OpenFile_filechooser_graphfilter=\u30b0\u30e9\u30d5\u30d5\u30a1\u30a4\u30eb +OpenFile_filechooser_zipfilter=\u30a2\u30fc\u30ab\u30a4\u30d6\u30d5\u30a1\u30a4\u30eb + +ProjectControllerUI.error.open=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u30d5\u30a1\u30a4\u30eb\u306bgephi\u62e1\u5f35\u5b50\u304c\u3042\u308b\u304b\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +# ProjectControllerUI.error.multipleGephi=Please select a unique .gephi project file + +DeleteWorkspace_confirm_message=Are you sure do you want to delete this workspace ? +DeleteWorkspace_confirm_title=Close workspace diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_ko.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_ko.properties new file mode 100644 index 0000000000..9498cc2dad --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_ko.properties @@ -0,0 +1,29 @@ + + +OpenIDE-Module-Long-Description=\uD504\uB85C\uC81D\uD2B8 \uAD00\uB9AC \uC870\uC791\uACFC \uC0AC\uC6A9\uC790 \uC0C1\uD638 \uC791\uC6A9 +CloseProject_confirm_title=\uD504\uB85C\uC81D\uD2B8 \uB2EB\uAE30 +CloseProject_confirm_message=\uD504\uB85C\uC81D\uD2B8\uB97C \uC800\uC7A5\uD560\uAE4C\uC694?
    \uC800\uC7A5\uD558\uC9C0 \uC54A\uC73C\uBA74 \uC218\uC815 \uC0AC\uD56D\uC774 \uBAA8\uB450 \uC0AC\uB77C\uC9D1\uB2C8\uB2E4. +CloseProject_confirm_doNotSave=\uC800\uC7A5\uD558\uC9C0 \uC54A\uC74C +CloseProject_confirm_save=\uC800\uC7A5\uD568 +CloseProject_confirm_cancel=\uCDE8\uC18C +OpenIDE-Module-Short-Description=\uD504\uB85C\uC81D\uD2B8 \uAD00\uB9AC \uC870\uC791\uACFC \uC0AC\uC6A9\uC790 \uC0C1\uD638 \uC791\uC6A9 +SaveAsProject_Overwrite={0}\uC774 \uC874\uC7AC\uD569\uB2C8\uB2E4. \uB36E\uC5B4\uC4F8\uAE4C\uC694? +ProjectControllerUI.status.opened={0}\uC774 \uC5F4\uB824 \uC788\uC74C +ProjectControllerUI.status.saved={0}\uC774 \uC800\uC7A5\uB428 +OpenProject_filechooser_filter=Gephi \uD30C\uC77C\uB4E4 +ProjectProperties_dialog_title=\uD504\uB85C\uC81D\uD2B8 \uD2B9\uC131 +ManageProjects_dialog_title=\uD504\uB85C\uC81D\uD2B8 \uAD00\uB9AC\uD558\uAE30 +WorkspaceProperties_dialog_title=\uC791\uC5C5 \uACF5\uAC04 \uD2B9\uC131 +Menu/Workspace=\uC791\uC5C5 \uACF5\uAC04 +OpenFile_filechooser_graphfilter=\uADF8\uB798\uD504 \uD30C\uC77C\uB4E4 +OpenFile_filechooser_zipfilter=\uBCF4\uAD00\uB41C \uD30C\uC77C\uB4E4 +ProjectControllerUI.error.multipleGephi=\uD558\uB098\uC758 .gephi \uD504\uB85C\uC81D\uD2B8 \uD30C\uC77C\uC744 \uC120\uD0DD\uD558\uC138\uC694 +DeleteWorkspace_confirm_message=\uC791\uC5C5 \uACF5\uAC04\uC744 \uC815\uB9D0 \uC0AD\uC81C\uD560\uAE4C\uC694? +DeleteWorkspace_confirm_title=\uC791\uC5C5 \uACF5\uAC04 \uB2EB\uAE30 +DeleteWorkspaces_confirm_message={0} \uC791\uC5C5 \uACF5\uAC04\uC744 \uC815\uB9D0 \uC0AD\uC81C\uD560\uAE4C\uC694? +DeleteWorkspaces_confirm_title=\uC5EC\uB7EC \uC791\uC5C5 \uACF5\uAC04\uC744 \uB2EB\uAE30 +SaveAsProject_filechooser_filter=Gephi \uD30C\uC77C\uB4E4 +OpenProject.defaulterror=\uD30C\uC77C\uC744 \uC5F4 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. '.gephi' \uD638\uD658 \uD30C\uC77C\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4. +SaveAsProject_SaveFailed={0} \uD30C\uC77C\uC5D0 \uC4F8 \uC218\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4 +ProjectControllerUI.error.open=\uD504\uB85C\uC81D\uD2B8 \uD30C\uC77C\uC744 \uC5F4 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. .gephi \uD30C\uC77C\uC774 \uB9DE\uB294\uC9C0 \uD655\uC778\uD558\uC138\uC694. +NewWorkspace_dialog_title=\uC0C8\uB85C\uC6B4 \uC791\uC5C5\uACF5\uAC04 diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_nb_NO.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_nb_NO.properties new file mode 100644 index 0000000000..6f5f0e6cec --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_nb_NO.properties @@ -0,0 +1,23 @@ + + +CloseProject_confirm_title=\u00ABLukk prosjekt\u00BB +CloseProject_confirm_save=Lagre +CloseProject_confirm_doNotSave=Ikke lagre +CloseProject_confirm_cancel=Avbryt +OpenIDE-Module-Short-Description=Prosjekth\u00E5ndteringsvalg og brukerinteraksjon +SaveAsProject_filechooser_filter=Gephi-filer +SaveAsProject_SaveFailed=Kunne ikke skrive til {0}-filen +OpenIDE-Module-Long-Description=Prosjekth\u00E5ndteringsvalg og brukerinteraksjon +CloseProject_confirm_message=Lagre prosjektet?
    Endringer g\u00E5r tapt hvis du ikke lagrer dem. +SaveAsProject_Overwrite={0} finnes. Overskriv? +ProjectControllerUI.status.opened={0} \u00E5pnet +ProjectControllerUI.status.saved={0} lagret +OpenProject_filechooser_filter=Gephi-filer +ProjectProperties_dialog_title=Prosjektegenskaper + + +OpenFile_filechooser_graphfilter=Graf-filer +OpenFile_filechooser_zipfilter=Arkiverte filer +ProjectControllerUI.error.open=Kunne ikke \u00E5pne prosjektfilen. Sjekk om filen har en .gephi-utvidelse. +ProjectControllerUI.error.multipleGephi=Velg en unik .gephi-prosjektfil +OpenProject.defaulterror=Kan ikke \u00E5pne denne filen. Det m\u00E5 v\u00E6re en kompatibel \u00AB.gephi\u00BB-fil. diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_nl.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_nl.properties new file mode 100644 index 0000000000..6d593cdb8c --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_nl.properties @@ -0,0 +1,24 @@ +OpenIDE-Module-Long-Description=Project management actions and user interaction +CloseProject_confirm_title="Project sluiten" +CloseProject_confirm_message=Do you want to save your project?
    Modifications will be lost if you don't save them. +CloseProject_confirm_save=Opslaan +CloseProject_confirm_doNotSave=Niet opslaan +CloseProject_confirm_cancel=Annuleren +OpenIDE-Module-Short-Description=Project management actions and user interaction +SaveAsProject_filechooser_filter=Gephi-bestanden +SaveAsProject_SaveFailed=Could not write to file {0} +SaveAsProject_Overwrite={0} bestaat al. Overschrijven? +ProjectControllerUI.status.opened={0} geopend +ProjectControllerUI.status.saved={0} opgeslagen +OpenProject_filechooser_filter=Gephi-bestanden +OpenProject.defaulterror=Kan dit bestand niet openen. Het moet een compatibel '.gephi'-bestand zijn. +ProjectProperties_dialog_title=Projecteigenschappen + + +OpenFile_filechooser_graphfilter=Graafbestanden +OpenFile_filechooser_zipfilter=Gearchiveerde bestanden +ProjectControllerUI.error.open=Het project kan niet worden geopend. Controleer of het bestand de .gephi-extensie heeft. +ProjectControllerUI.error.multipleGephi=Selecteer een uniek .gephi-projectbestand + +DeleteWorkspace_confirm_message=Are you sure do you want to delete this workspace ? +DeleteWorkspace_confirm_title=Werkruimte sluiten diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_pl.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_pl.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_pl.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_pt_BR.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_pt_BR.properties index be06491cde..275d0cf1d6 100644 --- a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_pt_BR.properties +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_pt_BR.properties @@ -1,43 +1,24 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 17\:38+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=A\u00e7\u00f5es de gerenciamento de projeto e intera\u00e7\u00e3o com o usu\u00e1rio - -CloseProject_confirm_title="Fechar projeto" - -CloseProject_confirm_message=Deseja salvar seu projeto?
    As modifica\u00e7\u00f5es ser\u00e3o perdidas se voc\u00ea n\u00e3o salv\u00e1-las. - +OpenIDE-Module-Long-Description=Aηυes de gerenciamento de projeto e interaηγo com o usuαrio +CloseProject_confirm_title=Fechar Projeto +CloseProject_confirm_message=Deseja salvar seu projeto?
    As modificaηυes serγo perdidas se vocκ nγo salvα-las. CloseProject_confirm_save=Salvar - -CloseProject_confirm_doNotSave=N\u00e3o salvar - +CloseProject_confirm_doNotSave=Nγo salvar CloseProject_confirm_cancel=Cancelar - -OpenIDE-Module-Short-Description=A\u00e7\u00f5es de gerenciamento de projeto e intera\u00e7\u00e3o com o usu\u00e1rio - +OpenIDE-Module-Short-Description=Aηυes de gerenciamento de projeto e interaηγo com o usuαrio SaveAsProject_filechooser_filter=Arquivos Gephi - -SaveAsProject_SaveFailed=N\u00e3o foi poss\u00edvel escrever no arquivo {0} - -SaveAsProject_Overwrite={0} j\u00e1 existe. Substituir? - +SaveAsProject_SaveFailed=Nγo foi possνvel escrever no arquivo {0} +SaveAsProject_Overwrite={0} jα existe. Substituir? ProjectControllerUI.status.opened={0} aberto - ProjectControllerUI.status.saved={0} salvo - OpenProject_filechooser_filter=Arquivos Gephi - -OpenProject.defaulterror=Imposs\u00edvel abrir este arquivo. O arquivo deve ser um arquivo compat\u00edvel com o formato '.gephi '. +# OpenProject.defaulterror=Impossible to open this file. It must be a compatible '.gephi' file. ProjectProperties_dialog_title=Propriedades do projeto -OpenFile_filechooser_graphfilter=Arquivos de grafo +OpenFile_filechooser_graphfilter=Arquivos de grafo OpenFile_filechooser_zipfilter=Arquivos compactados em formato ZIP - -ProjectControllerUI.error.open=O projeto n\u00e3o pode ser aberto. Por favor verifique se o arquivo possui extens\u00e3o '.gephi'. +ProjectControllerUI.error.open=O projeto nγo pode ser aberto. Por favor verifique se o arquivo possui extensγo '.gephi'. +ProjectControllerUI.error.multipleGephi=Por gentileza selecione um ϊnico arquivo de projeto .gephi +DeleteWorkspace_confirm_message=Deseja realmente excluir esta Αrea de Trabalho? +DeleteWorkspace_confirm_title=Fechar Αrea de Trabalho diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_ro.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_ro.properties new file mode 100644 index 0000000000..dfe35b1500 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_ro.properties @@ -0,0 +1,26 @@ + + +OpenIDE-Module-Long-Description=Gestionarea proiectului \u0219i interac\u021Biunea cu utilizatorul +CloseProject_confirm_title="\u00CEnchide proiectul" +CloseProject_confirm_message=Vrei s\u0103 salvezi proiectul?
    Modific\u0103rile vor fi pierdute dac\u0103 nu le salvezi. +CloseProject_confirm_save=Salveaz\u0103 +CloseProject_confirm_doNotSave=Nu salva +CloseProject_confirm_cancel=Anuleaz\u0103 +OpenIDE-Module-Short-Description=Gestionarea proiectului \u0219i interac\u021Biunea cu utilizatorul +SaveAsProject_filechooser_filter=Fi\u0219iere Gephi +SaveAsProject_SaveFailed=Nu s-a putut scrie \u00EEn fi\u0219ierul {0} +SaveAsProject_Overwrite={0} exist\u0103. Suprascrie? +ProjectControllerUI.status.opened={0} deschis +ProjectControllerUI.status.saved={0} salvat +OpenProject_filechooser_filter=Fi\u0219iere Gephi +OpenProject.defaulterror=Imposibil de deschis acest fi\u0219ier. Trebuie s\u0103 fie un fi\u0219ier compatibil ".gephi". +ProjectProperties_dialog_title=Propriet\u0103\u021Bile proiectului + + +OpenFile_filechooser_graphfilter=Fi\u0219iere graf +OpenFile_filechooser_zipfilter=Fi\u0219iere arhivate +ProjectControllerUI.error.open=Fi\u0219ierul de proiect nu a putut fi deschis. Verific\u0103 dac\u0103 fi\u0219ierul are extensia .gephi. +ProjectControllerUI.error.multipleGephi=Selecteaz\u0103 un fi\u0219ier unic de proiect .gephi + +DeleteWorkspace_confirm_message=Sigur vrei s\u0103 \u0219tergi acest spa\u021Biu de lucru ? +DeleteWorkspace_confirm_title=\u00CEnchide spa\u021Biul de lucru diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_ru.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_ru.properties index b30d7138c6..21d6cf01d3 100644 --- a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_ru.properties +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_ru.properties @@ -1,43 +1,23 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-05 20\:23+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - OpenIDE-Module-Long-Description=\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438 \u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044e \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c - CloseProject_confirm_title="\u0417\u0430\u043a\u0440\u044b\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442" - -CloseProject_confirm_message=\u0425\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442?
    \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0443\u0442\u0435\u0440\u044f\u043d\u044b, \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0445 \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435. - +CloseProject_confirm_message=\u0425\u043e\u0442\u0438\u0442\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u043f\u0440\u043e\u0435\u043a\u0442?
    \u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0431\u0443\u0434\u0443\u0442 \u0443\u0442\u0435\u0440\u044f\u043d\u044b, \u0435\u0441\u043b\u0438 \u0432\u044b \u0438\u0445 \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435. CloseProject_confirm_save=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c - CloseProject_confirm_doNotSave=\u041d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c - CloseProject_confirm_cancel=\u041e\u0442\u043c\u0435\u043d\u0430 - OpenIDE-Module-Short-Description=\u041e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u043f\u043e \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438 \u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044e \u0441 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u043c - SaveAsProject_filechooser_filter=\u0424\u0430\u0439\u043b\u044b Gephi - SaveAsProject_SaveFailed=\u041d\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043d\u0430 \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0444\u0430\u0439\u043b {0} - -SaveAsProject_Overwrite={0} \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c? - +SaveAsProject_Overwrite={0} \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u041F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u0430\u0442\u044C? ProjectControllerUI.status.opened={0} \u043e\u0442\u043a\u0440\u044b\u0442 - ProjectControllerUI.status.saved={0} \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d - OpenProject_filechooser_filter=\u0424\u0430\u0439\u043b\u044b Gephi - -OpenProject.defaulterror=\u041d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b. \u0424\u0430\u0439\u043b \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435, \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u043c \u0441 '.gephi'. +# OpenProject.defaulterror=Impossible to open this file. It must be a compatible '.gephi' file. ProjectProperties_dialog_title=\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 -OpenFile_filechooser_graphfilter=\u0424\u0430\u0439\u043b\u044b Gephi +OpenFile_filechooser_graphfilter=\u0424\u0430\u0439\u043b\u044b Gephi OpenFile_filechooser_zipfilter=\u0410\u0440\u0445\u0438\u0432\u043d\u044b\u0435 \u0444\u0430\u0439\u043b\u044b - ProjectControllerUI.error.open=\u041d\u0435 \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b. \u0423\u0431\u0435\u0434\u0438\u0442\u0435\u0441\u044c, \u0447\u0442\u043e \u0444\u0430\u0439\u043b \u0438\u043c\u0435\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 '.gephi'. +# ProjectControllerUI.error.multipleGephi=Please select a unique .gephi project file + diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_sv.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_sv.properties new file mode 100644 index 0000000000..8e2abec34a --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_sv.properties @@ -0,0 +1,29 @@ + + +OpenProject_filechooser_filter=Gephi filer +ProjectControllerUI.status.saved={0} sparad +CloseProject_confirm_message=Vill du spara ditt projekt?
    \u00C4ndringar kommer att g\u00E5 f\u00F6rlorade om du inte sparar dem. +ProjectControllerUI.status.opened={0} \u00F6ppnad +OpenProject.defaulterror=Om\u00F6jligt att \u00F6ppna denna fil. Det m\u00E5ste vara en kompatibel '.gephi'-fil. +CloseProject_confirm_title=St\u00E4ng projekt +CloseProject_confirm_save=Spara +OpenFile_filechooser_graphfilter=Graffiler +ProjectControllerUI.error.open=Projektfilen kunde inte \u00F6ppnas. Kontrollera att filen har filtill\u00E4gget .gephi. +CloseProject_confirm_cancel=Avbryt +SaveAsProject_SaveFailed=Kunde inte skriva till fil {0} +SaveAsProject_filechooser_filter=Gephi filer +DeleteWorkspaces_confirm_title=St\u00E4ng multipla arbetsytor +WorkspaceProperties_dialog_title=Egenskaper f\u00F6r arbetsyta +CloseProject_confirm_doNotSave=Spara inte +OpenFile_filechooser_zipfilter=Arkiverade filer +ProjectProperties_dialog_title=Projektegenskaper +DeleteWorkspaces_confirm_message=\u00C4r du s\u00E4ker p\u00E5 att du vill radera {0} arbetsytor? +Menu/Workspace=Arbetsyta +DeleteWorkspace_confirm_title=St\u00E4ng arbetsyta +OpenIDE-Module-Short-Description=Projektlednings\u00E5tg\u00E4rder och anv\u00E4ndarinteraktion +OpenIDE-Module-Long-Description=Projektlednings\u00E5tg\u00E4rder och anv\u00E4ndarinteraktion +DeleteWorkspace_confirm_message=\u00C4r du s\u00E4ker p\u00E5 att du vill radera den h\u00E4r arbetsytan? +ProjectControllerUI.error.multipleGephi=V\u00E4nligen v\u00E4lj en unik .gephi projektfil +ManageProjects_dialog_title=Hantera projekt +SaveAsProject_Overwrite={0} existerar. skriv \u00F6ver? +NewWorkspace_dialog_title=Ny arbetsyta diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_th.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_tr.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_tr.properties new file mode 100644 index 0000000000..eb941e5461 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_tr.properties @@ -0,0 +1,21 @@ +OpenIDE-Module-Long-Description=Proje y\u00F6netimi eylemleri ve kullan\u0131c\u0131 etkile\u015Fimi +CloseProject_confirm_title="Projeyi Kapat" +CloseProject_confirm_message=Projenizi kaydetmek istiyor musunuz?
    E\u011Fer kay\u0131t etmezseniz yapm\u0131\u015F oldu\u011Funuz de\u011Fi\u015Fiklikleri kaybedeceksiniz. +CloseProject_confirm_save=Kaydet +CloseProject_confirm_doNotSave=Kaydetme +CloseProject_confirm_cancel=\u0130ptal +OpenIDE-Module-Short-Description=Project management actions and user interaction +SaveAsProject_filechooser_filter=Gephi Files +SaveAsProject_SaveFailed=Could not write to file {0} +SaveAsProject_Overwrite={0} exists. Overwrite? +ProjectControllerUI.status.opened={0} opened +ProjectControllerUI.status.saved={0} saved +OpenProject_filechooser_filter=Gephi Files +OpenProject.defaulterror=Impossible to open this file. It must be a compatible '.gephi' file. +ProjectProperties_dialog_title=Project Properties + + +OpenFile_filechooser_graphfilter=Graph Files +OpenFile_filechooser_zipfilter=Archived Files +ProjectControllerUI.error.open=The project file couldn't be opened. Please check the file has .gephi extension. +ProjectControllerUI.error.multipleGephi=Please select a unique .gephi project file diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_uk.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_uk.properties new file mode 100644 index 0000000000..0d3da92140 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_uk.properties @@ -0,0 +1,27 @@ +DeleteWorkspaces_confirm_message=\u0412\u0438 \u0432\u043F\u0435\u0432\u043D\u0435\u043D\u0456, \u0449\u043E \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0432\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u0440\u043E\u0431\u043E\u0447\u0456 \u043E\u0431\u043B\u0430\u0441\u0442\u0456 ({0})? +WorkspaceProperties_dialog_title=\u0412\u043B\u0430\u0441\u0442\u0438\u0432\u043E\u0441\u0442\u0456 \u0440\u043E\u0431\u043E\u0447\u043E\u0457 \u043E\u0431\u043B\u0430\u0441\u0442\u0456 +ProjectControllerUI.error.open=\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u0444\u0430\u0439\u043B \u043F\u0440\u043E\u0435\u043A\u0442\u0443. \u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0442\u0435, \u0447\u0438 \u0444\u0430\u0439\u043B \u043C\u0430\u0454 \u0440\u043E\u0437\u0448\u0438\u0440\u0435\u043D\u043D\u044F .gephi. +OpenProject_filechooser_filter=\u0424\u0430\u0439\u043B\u0438 Gephi +OpenProject.defaulterror=\u041D\u0435\u043C\u043E\u0436\u043B\u0438\u0432\u043E \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u0446\u0435\u0439 \u0444\u0430\u0439\u043B. \u0426\u0435 \u043C\u0430\u0454 \u0431\u0443\u0442\u0438 \u0441\u0443\u043C\u0456\u0441\u043D\u0438\u0439 \u0444\u0430\u0439\u043B \u00AB.gephi\u00BB. +OpenFile_filechooser_graphfilter=\u0413\u0440\u0430\u0444\u0456\u0447\u043D\u0456 \u0444\u0430\u0439\u043B\u0438 +OpenFile_filechooser_zipfilter=\u0410\u0440\u0445\u0456\u0432\u043E\u0432\u0430\u043D\u0456 \u0444\u0430\u0439\u043B\u0438 +DeleteWorkspace_confirm_message=\u0412\u0438 \u0432\u043F\u0435\u0432\u043D\u0435\u043D\u0456, \u0449\u043E \u0431\u0430\u0436\u0430\u0454\u0442\u0435 \u0432\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u0446\u044E \u0440\u043E\u0431\u043E\u0447\u0443 \u043E\u0431\u043B\u0430\u0441\u0442\u044C? +DeleteWorkspace_confirm_title=\u0417\u0430\u043A\u0440\u0438\u0442\u0438 \u0440\u043E\u0431\u043E\u0447\u0443 \u043E\u0431\u043B\u0430\u0441\u0442\u044C +DeleteWorkspaces_confirm_title=\u0417\u0430\u043A\u0440\u0438\u0439\u0442\u0435 \u043A\u0456\u043B\u044C\u043A\u0430 \u0440\u043E\u0431\u043E\u0447\u0438\u0445 \u043E\u0431\u043B\u0430\u0441\u0442\u0435\u0439 +CloseProject_confirm_save=\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 +CloseProject_confirm_doNotSave=\u041D\u0435 \u0437\u0431\u0435\u0440\u0456\u0433\u0430\u0442\u0438 +SaveAsProject_filechooser_filter=\u0424\u0430\u0439\u043B\u0438 Gephi +ProjectProperties_dialog_title=\u0412\u043B\u0430\u0441\u0442\u0438\u0432\u043E\u0441\u0442\u0456 \u043F\u0440\u043E\u0435\u043A\u0442\u0443 +ManageProjects_dialog_title=\u0423\u043F\u0440\u0430\u0432\u043B\u0456\u043D\u043D\u044F \u043F\u0440\u043E\u0435\u043A\u0442\u0430\u043C\u0438 +SaveAsProject_Overwrite={0} \u0456\u0441\u043D\u0443\u0454. \u041F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u0430\u0442\u0438? +ProjectControllerUI.status.saved={0} \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043D\u043E +OpenIDE-Module-Long-Description=\u0414\u0456\u0457 \u0437 \u0443\u043F\u0440\u0430\u0432\u043B\u0456\u043D\u043D\u044F \u043F\u0440\u043E\u0435\u043A\u0442\u043E\u043C \u0456 \u0432\u0437\u0430\u0454\u043C\u043E\u0434\u0456\u044F \u0437 \u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0435\u043C +CloseProject_confirm_message=\u0412\u0438 \u0445\u043E\u0447\u0435\u0442\u0435 \u0437\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u0441\u0432\u0456\u0439 \u043F\u0440\u043E\u0435\u043A\u0442?
    \u0417\u043C\u0456\u043D\u0438 \u0431\u0443\u0434\u0435 \u0432\u0442\u0440\u0430\u0447\u0435\u043D\u043E, \u044F\u043A\u0449\u043E \u0432\u0438 \u0457\u0445 \u043D\u0435 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u0442\u0435. +Menu/Workspace=\u0420\u043E\u0431\u043E\u0447\u0430 \u043E\u0431\u043B\u0430\u0441\u0442\u044C +ProjectControllerUI.status.opened={0} \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u043E +CloseProject_confirm_cancel=\u0421\u043A\u0430\u0441\u0443\u0432\u0430\u0442\u0438 +NewWorkspace_dialog_title=\u041D\u043E\u0432\u0430 \u0440\u043E\u0431\u043E\u0447\u0430 \u043E\u0431\u043B\u0430\u0441\u0442\u044C +SaveAsProject_SaveFailed=\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u0437\u0430\u043F\u0438\u0441\u0430\u0442\u0438 \u0443 \u0444\u0430\u0439\u043B {0} +ProjectControllerUI.error.multipleGephi=\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044C \u0443\u043D\u0456\u043A\u0430\u043B\u044C\u043D\u0438\u0439 \u0444\u0430\u0439\u043B \u043F\u0440\u043E\u0435\u043A\u0442\u0443 .gephi +OpenIDE-Module-Short-Description=\u0414\u0456\u0457 \u0437 \u0443\u043F\u0440\u0430\u0432\u043B\u0456\u043D\u043D\u044F \u043F\u0440\u043E\u0435\u043A\u0442\u043E\u043C \u0456 \u0432\u0437\u0430\u0454\u043C\u043E\u0434\u0456\u044F \u0437 \u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0435\u043C +CloseProject_confirm_title=\u0417\u0430\u043A\u0440\u0438\u0442\u0438 \u043F\u0440\u043E\u0435\u043A\u0442 diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_zh_CN.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_zh_CN.properties index a2f89ba146..6d683fc351 100644 --- a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_zh_CN.properties +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_zh_CN.properties @@ -1,42 +1,28 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:15+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - OpenIDE-Module-Long-Description=\u7a0b\u5e8f\u7ba1\u7406\u6267\u884c\u548c\u7528\u6237\u4ea4\u4e92 - -CloseProject_confirm_title=\u201c\u5173\u95ed\u7a0b\u5e8f\u201d - -CloseProject_confirm_message=\u60f3\u4fdd\u5b58\u7a0b\u5e8f\u5417\uff1f
    <\u5b57\u4f53\u5927\u5c0f\="-2">\u5982\u679c\u4e0d\u4fdd\u5b58\u4fee\u6539\uff0c\u4fe1\u606f\u5c06\u4f1a\u4e22\u5931\u3002 - +CloseProject_confirm_title=\u5173\u95ED\u9879\u76EE +CloseProject_confirm_message=\u662F\u5426\u4FDD\u5B58\u9879\u76EE\uFF1F
    \u5982\u679C\u4E0D\u4FDD\u5B58\u4FEE\u6539\uFF0C\u4FE1\u606F\u5C06\u4F1A\u4E22\u5931\u3002 CloseProject_confirm_save=\u4fdd\u5b58 - -CloseProject_confirm_doNotSave=bubaocun - +CloseProject_confirm_doNotSave=\u4E0D\u4FDD\u5B58 CloseProject_confirm_cancel=\u53d6\u6d88 - OpenIDE-Module-Short-Description=\u7a0b\u5e8f\u7ba1\u7406\u6267\u884c\u548c\u7528\u6237\u4ea4\u4e92 - SaveAsProject_filechooser_filter=Gephi\u6587\u4ef6 - SaveAsProject_SaveFailed=\u4e0d\u80fd\u5199\u5230{0} - -SaveAsProject_Overwrite={0}\u7ee7\u7eed\u5b58\u5728\u3002||\u8986\u76d6\uff1f - -ProjectControllerUI.status.opened={0}\u6253\u5f00 - -ProjectControllerUI.status.saved={0}\u4fdd\u5b58 - +SaveAsProject_Overwrite={0}\u5DF2\u5B58\u5728\uFF0C\u662F\u5426\u8986\u76D6\uFF1F +ProjectControllerUI.status.opened={0}\u5DF2\u6253\u5F00 +ProjectControllerUI.status.saved={0}\u5DF2\u4FDD\u5B58 OpenProject_filechooser_filter=Gephi\u6587\u4ef6 - -OpenProject.defaulterror=\u4e0d\u80fd\u6253\u5f00\u6b64\u6587\u4ef6\u3002\u5b83\u4e0d\u662f\u4e00\u4e2a\u517c\u5bb9\u7684\u2018.gephi\u2019\u6587\u4ef6\u3002 - +OpenProject.defaulterror=\u65e0\u6cd5\u6253\u5f00\u6b64\u6587\u4ef6\u3002\u5b83\u5fc5\u987b\u662f\u4e00\u4e2a\u517c\u5bb9\u7684'.gephi'\u6587\u4ef6\u3002 ProjectProperties_dialog_title=\u7a0b\u5e8f\u5c5e\u6027 -OpenFile_filechooser_graphfilter=\u56fe\u6587\u4ef6 +OpenFile_filechooser_graphfilter=\u56fe\u6587\u4ef6 OpenFile_filechooser_zipfilter=\u5b58\u6863\u6587\u4ef6 - -ProjectControllerUI.error.open=\u7a0b\u5e8f\u6587\u4ef6\u6253\u4e0d\u5f00\u3002\u8bf7\u68c0\u67e5\u6587\u4ef6\u7684\u6269\u5c55\u540d\u4e3a.gephi\u3002 +ProjectControllerUI.error.open=\u9879\u76EE\u6587\u4EF6\u65E0\u6CD5\u6253\u5F00\u3002\u8BF7\u68C0\u67E5\u6587\u4EF6\u7684\u6269\u5C55\u540D\u4E3A\u662F\u5426\u4E3A.gephi\u3002 +ProjectControllerUI.error.multipleGephi=\u8bf7\u9009\u62e9\u4e00\u4e2a\u552f\u4e00\u7684 .gephi \u9879\u76ee\u6587\u4ef6 +DeleteWorkspace_confirm_message=\u662F\u5426\u9700\u8981\u5220\u9664\u6B64\u5DE5\u4F5C\u7A7A\u95F4\uFF1F +DeleteWorkspace_confirm_title=\u5173\u95ed\u5de5\u4f5c\u7a7a\u95f4 +ManageProjects_dialog_title=\u7BA1\u7406\u9879\u76EE +WorkspaceProperties_dialog_title=\u5DE5\u4F5C\u533A\u5C5E\u6027 +Menu/Workspace=\u5DE5\u4F5C\u533A +DeleteWorkspaces_confirm_message=\u4F60\u786E\u5B9A\u4F60\u8981\u5220\u9664 {0} \u5DE5\u4F5C\u7A7A\u95F4\u5417\uFF1F +DeleteWorkspaces_confirm_title=\u5173\u95ED\u591A\u4E2A\u5DE5\u4F5C\u533A diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_zh_TW.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_zh_TW.properties new file mode 100644 index 0000000000..f0a7fc1371 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/Bundle_zh_TW.properties @@ -0,0 +1,26 @@ +OpenIDE-Module-Long-Description=\u5c08\u6848\u7ba1\u7406\u53ca\u4f7f\u7528\u8005\u4e92\u52d5 + +CloseProject_confirm_title = \u201c\u95dc\u9589\u5c08\u6848\u201d +CloseProject_confirm_message=\u8acb\u554f\u662f\u5426\u8981\u5132\u5b58\u60a8\u7684\u5c08\u6848\uff1f
    \u82e5\u4e0d\u5132\u5b58\u7684\u8a71\u5148\u524d\u8b8a\u66f4\u5c07\u6703\u907a\u5931 +CloseProject_confirm_save = \u5132\u5b58 +CloseProject_confirm_doNotSave = \u4e0d\u5132\u5b58 +CloseProject_confirm_cancel = \u53d6\u6d88 +OpenIDE-Module-Short-Description=\u5c08\u6848\u7ba1\u7406\u53ca\u4f7f\u7528\u8005\u4e92\u52d5 +SaveAsProject_filechooser_filter=Gephi \u6a94\u6848 +SaveAsProject_SaveFailed=\u7121\u6cd5\u5132\u5b58\u81f3\u6a94\u6848 {0} +SaveAsProject_Overwrite=\u6a94\u6848 {0} \u5df2\u5b58\u5728\u3002\u9032\u884c\u8986\u5beb\uff1f + +ProjectControllerUI.status.opened = \u6a94\u6848 {0} \u5df2\u958b\u555f +ProjectControllerUI.status.saved = \u6a94\u6848 {0} \u5df2\u5132\u5b58 + +OpenProject_filechooser_filter=Gephi \u6a94\u6848 +OpenProject.defaulterror=\u7121\u6cd5\u958b\u555f\u6a94\u6848\u3002\u5fc5\u9808\u70ba\u76f8\u5bb9\u65bc '.gephi' \u985e\u578b\u7684\u6a94\u6848\u3002 + +ProjectProperties_dialog_title=\u5c08\u6848\u5c6c\u6027\u8a2d\u5b9a + + +OpenFile_filechooser_graphfilter=\u5716\u5f62\u6a94\u6848 +OpenFile_filechooser_zipfilter=\u5df2\u5c01\u5b58\u6a94\u6848 + +ProjectControllerUI.error.open=\u5c08\u6848\u7121\u6cd5\u88ab\u958b\u555f\u3002\u8acb\u78ba\u8a8d\u6a94\u6848\u985e\u578b\u662f\u5426\u5c6c\u65bc .gaphi \u3002 +ProjectControllerUI.error.multipleGephi=\u8acb\u9078\u64c7\u4e00\u500b\u540d\u7a31\u4e0d\u91cd\u8907\u7684 .gephi \u5c08\u6848\u6a94\u6848 diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle.properties new file mode 100644 index 0000000000..31c10b0c12 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle.properties @@ -0,0 +1,20 @@ +CTL_NewProject=New Project +CTL_OpenProject=Open Project... +CTL_SaveProject=Save +CTL_SaveAsProject=Save As... +CTL_OpenFile=Open... +CTL_CloseProject=Close Project +CTL_ProjectProperties=Properties... +CTL_NewWorkspace=New +CTL_NewWorkspaceWithSettings=New... +CTL_DuplicateWorkspace=Duplicate +CTL_DeleteWorkspace=Delete +CTL_DeleteOtherWorkspaces=Delete Other Workspaces +CTL_RenameWorkspace=Rename +CTL_ManageProjects=Manage Projects... +CTL_WorkspaceProperties=Properties... +CTL_OpenOnlineDoc=Online docs and support +RenameWorkspace.dialog.title = Rename Workspace +CTL_OpenRecentFiles=Open Recent... +OpenFile.fileNotSupported=The file format is not supported +OpenFile.fileNotAccessible=The file "{0}" cannot be accessed. It may have been moved, deleted, or is on an unavailable drive. \ No newline at end of file diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_ar.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_ca.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_ca.properties new file mode 100644 index 0000000000..7c65f0d7b9 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_ca.properties @@ -0,0 +1,14 @@ +CTL_NewProject=Nou projecte +CTL_OpenProject=Obre el projecte +CTL_SaveProject=Desa +CTL_SaveAsProject=Desa com a... +CTL_OpenFile=Obre ... +CTL_CloseProject=Tanca el projecte +CTL_ProjectProperties=Propietats +CTL_NewWorkspace=Nou +CTL_DuplicateWorkspace=Duplica +CTL_DeleteWorkspace=Elimina +CTL_RenameWorkspace=Reanomena +CTL_OpenOnlineDoc=Ajuda i documentaciσ en lνnia +RenameWorkspace.dialog.title = Reanomena el banc de treball +CTL_OpenRecentFiles=Obert recentment diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_cs.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_cs.properties new file mode 100644 index 0000000000..ac0b432e3a --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_cs.properties @@ -0,0 +1,14 @@ +CTL_NewProject=Novύ projekt +CTL_OpenProject=Otev\u0159νt projekt... +CTL_SaveProject=Ulo\u017eit +CTL_SaveAsProject=Ulo\u017eit jako... +CTL_OpenFile=Otev\u0159νt... +CTL_CloseProject=Zav\u0159νt projekt +CTL_ProjectProperties=Vlastnosti... +CTL_NewWorkspace=Novύ +CTL_DuplicateWorkspace=Kopνrovat +CTL_DeleteWorkspace=Smazat +CTL_RenameWorkspace=P\u0159ejmenovat +CTL_OpenOnlineDoc=Online dokumentace a podpora +RenameWorkspace.dialog.title = P\u0159ejmenovat pracovnν prostor +CTL_OpenRecentFiles=Otev\u0159\u00edt ned\u00e1vn\u00e9... diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_de.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_de.properties new file mode 100644 index 0000000000..ae68c28d27 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_de.properties @@ -0,0 +1,14 @@ +CTL_NewProject=Neues Projekt anlegen +CTL_OpenProject=Projekt φffnen... +CTL_SaveProject=Speichern +CTL_SaveAsProject=Speichern unter... +CTL_OpenFile=Φffnen... +CTL_CloseProject=Projekt schlieίen +CTL_ProjectProperties=Eigenschaften... +CTL_NewWorkspace=Neu +CTL_DuplicateWorkspace=Duplizieren +CTL_DeleteWorkspace=Lφschen +CTL_RenameWorkspace=Umbenennen +CTL_OpenOnlineDoc=Online Dokumentation und Support +RenameWorkspace.dialog.title = Arbeitsbereich umbenennen +CTL_OpenRecentFiles=K\u00fcrzlich ge\u00f6ffnet... diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_es.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_es.properties new file mode 100644 index 0000000000..259da5348f --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_es.properties @@ -0,0 +1,14 @@ +CTL_NewProject=Nuevo proyecto +CTL_OpenProject=Abrir proyecto +CTL_SaveProject=Guardar +CTL_SaveAsProject=Guardar como... +CTL_OpenFile=Abrir... +CTL_CloseProject=Cerrar proyecto +CTL_ProjectProperties=Propiedades... +CTL_NewWorkspace=Nuevo +CTL_DuplicateWorkspace=Duplicar +CTL_DeleteWorkspace=Eliminar +CTL_RenameWorkspace=Renombrar +CTL_OpenOnlineDoc=Documentaciσn online y soporte +RenameWorkspace.dialog.title = Renombrar espacio de trabajo +CTL_OpenRecentFiles=Abrir recientes... diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_fr.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_fr.properties new file mode 100644 index 0000000000..c9aa100bd7 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_fr.properties @@ -0,0 +1,19 @@ +CTL_NewProject=Nouveau projet +CTL_OpenProject=Ouvrir un projet... +CTL_SaveProject=Enregistrer +CTL_SaveAsProject=Enregistrer sous... +CTL_OpenFile=Ouvrir... +CTL_CloseProject=Fermer le projet +CTL_ProjectProperties=Propriιtιs... +CTL_NewWorkspace=Nouvel espace de travail +CTL_DuplicateWorkspace=Dupliquer l'espace de travail +CTL_DeleteWorkspace=Supprimer l'espace de travail +CTL_RenameWorkspace=Renommer l'espace de travail +CTL_OpenOnlineDoc=Docs en ligne et support +RenameWorkspace.dialog.title=Renommer +CTL_OpenRecentFiles=R\u00e9cemment ouverts... +CTL_NewWorkspaceWithSettings=Nouvel espace de travail... +CTL_DeleteOtherWorkspaces=Supprimer les autres espaces de travail +CTL_ManageProjects=Gιrer les projets... +CTL_WorkspaceProperties=Propriιtιs... +OpenFile.fileNotSupported=Ce format de fichier n'est pas supportι diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_he.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_he.properties new file mode 100644 index 0000000000..8221f913ae --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_he.properties @@ -0,0 +1,14 @@ +CTL_NewProject=\u05e4\u05e8\u05d5\u05d9\u05e7\u05d8 \u05d7\u05d3\u05e9 +CTL_OpenProject=\u05e4\u05ea\u05d7 \u05e4\u05e8\u05d5\u05d9\u05e7\u05d8... +CTL_SaveProject=\u05e9\u05de\u05d5\u05e8 +CTL_SaveAsProject=\u05e9\u05de\u05d5\u05e8 \u05d1\u05e9\u05dd... +CTL_OpenFile=\u05e4\u05ea\u05d7... +CTL_CloseProject=\u05e1\u05d2\u05d5\u05e8 \u05d4\u05e4\u05e8\u05d5\u05d9\u05e7\u05d8 +CTL_ProjectProperties=\u05de\u05d0\u05e4\u05d9\u05d9\u05e0\u05d9\u05dd... +CTL_NewWorkspace=\u05d7\u05d3\u05e9 +CTL_DuplicateWorkspace=\u05e9\u05db\u05e4\u05dc +CTL_DeleteWorkspace=\u05de\u05d7\u05e7 +CTL_RenameWorkspace=\u05e9\u05e0\u05d4 \u05e9\u05dd +CTL_OpenOnlineDoc=\u05ea\u05de\u05d9\u05db\u05d4 \u05d5\u05de\u05e1\u05de\u05db\u05d9\u05dd \u05de\u05e7\u05d5\u05d5\u05e0\u05d9\u05dd +RenameWorkspace.dialog.title = \u05e9\u05e0\u05d4 \u05e9\u05dd \u05dc\u05e1\u05d1\u05d9\u05d1\u05ea \u05d4\u05e2\u05d1\u05d5\u05d3\u05d4 +CTL_OpenRecentFiles=Open Recent... diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_it.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_it.properties new file mode 100644 index 0000000000..e249b7e586 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_it.properties @@ -0,0 +1,14 @@ +CTL_NewProject=Nuovo Progetto +CTL_OpenProject=Apri Progetto +CTL_SaveProject=Salva +CTL_SaveAsProject=Salva Come +CTL_OpenFile=Apri... +CTL_CloseProject=Chiudi Progetto +CTL_ProjectProperties=Proprietΰ +CTL_NewWorkspace=Nuovo +CTL_DuplicateWorkspace=Duplica +CTL_DeleteWorkspace=Cancella +CTL_RenameWorkspace=Rinomina +CTL_OpenOnlineDoc=Supporto e documentazione online +RenameWorkspace.dialog.title = Rinomina Workspace +CTL_OpenRecentFiles=Open Recent... diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_ja.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_ja.properties new file mode 100644 index 0000000000..fc36338c77 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_ja.properties @@ -0,0 +1,14 @@ +CTL_NewProject=\u65b0\u898f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8 +CTL_OpenProject=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u958b\u304f... +CTL_SaveProject=\u4fdd\u5b58 +CTL_SaveAsProject=\u540d\u524d\u3092\u4ed8\u3051\u3066\u4fdd\u5b58... +CTL_OpenFile=\u958b\u304f... +CTL_CloseProject=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u9589\u3058\u308b +CTL_ProjectProperties=\u30d7\u30ed\u30d1\u30c6\u30a3\u2026 +CTL_NewWorkspace=\u65b0\u898f +CTL_DuplicateWorkspace=\u8907\u5199 +CTL_DeleteWorkspace=\u6d88\u53bb +CTL_RenameWorkspace=\u540d\u524d\u3092\u5909\u66f4 +CTL_OpenOnlineDoc=\u30aa\u30f3\u30e9\u30a4\u30f3\u30c9\u30ad\u30e5\u30e1\u30f3\u30c8\u3068\u30b5\u30dd\u30fc\u30c8 +RenameWorkspace.dialog.title = \u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u306e\u540d\u524d\u3092\u5909\u66f4 +CTL_OpenRecentFiles=\u6700\u8fd1\u4f7f\u3063\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f... diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_nl.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_nl.properties new file mode 100644 index 0000000000..20cc030570 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_nl.properties @@ -0,0 +1,14 @@ +CTL_NewProject=Nieuw project +CTL_OpenProject=Project openen... +CTL_SaveProject=Opslaan +CTL_SaveAsProject=Opslaan als... +CTL_OpenFile=Open... +CTL_CloseProject=Project sluiten +CTL_ProjectProperties=Properties... +CTL_NewWorkspace=New +CTL_DuplicateWorkspace=Duplicate +CTL_DeleteWorkspace=Delete +CTL_RenameWorkspace=Rename +CTL_OpenOnlineDoc=Online docs and support +RenameWorkspace.dialog.title=Werkruimte hernoemen +CTL_OpenRecentFiles=Open Recent... diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_oc.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_oc.properties new file mode 100644 index 0000000000..f3a0b1f777 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_oc.properties @@ -0,0 +1,14 @@ +CTL_NewProject=Projθcte novθl +CTL_OpenProject=Dobrir un projθcte +CTL_SaveProject=Enregistrar +CTL_SaveAsProject=Enregistrar jos... +CTL_OpenFile=Dobrir... +CTL_CloseProject=Tampar lo projθcte +CTL_ProjectProperties=Proprietats... +CTL_NewWorkspace=Espaci de trabalh novθl +CTL_DuplicateWorkspace=Duplicate +CTL_DeleteWorkspace=Suprimir l'espaci de trabalh +CTL_RenameWorkspace=Rename +CTL_OpenOnlineDoc=Online docs and support +RenameWorkspace.dialog.title=Rename Workspace +CTL_OpenRecentFiles=Open Recent... diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_pt_BR.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_pt_BR.properties new file mode 100644 index 0000000000..7e0528bb9c --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_pt_BR.properties @@ -0,0 +1,14 @@ +CTL_NewProject=Novo projeto +CTL_OpenProject=Abrir projeto... +CTL_SaveProject=Salvar +CTL_SaveAsProject=Salvar como... +CTL_OpenFile=Abrir ... +CTL_CloseProject=Fechar projeto +CTL_ProjectProperties=Propriedades... +CTL_NewWorkspace=Novo +CTL_DuplicateWorkspace=Duplicar +CTL_DeleteWorkspace=Excluir +CTL_RenameWorkspace=Renomear +CTL_OpenOnlineDoc=Suporte e documentaηγo online +RenameWorkspace.dialog.title = Renomear Αrea de Trabalho +CTL_OpenRecentFiles=Abrir arquivos usados \u200b\u200brecentemente diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_ro.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_ro.properties new file mode 100644 index 0000000000..21e1c7b8f6 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_ro.properties @@ -0,0 +1,16 @@ + + +CTL_ProjectProperties=Propriet\u0103\u021Bi... +CTL_SaveAsProject=Salveaz\u0103 ca... +CTL_NewWorkspace=Nou +CTL_DuplicateWorkspace=Duplicat +CTL_RenameWorkspace=Redenume\u0219te +RenameWorkspace.dialog.title=Redenume\u0219te Spa\u021Biu de lucru +CTL_NewProject=Proiect nou +CTL_OpenProject=Deschide Proiect... +CTL_SaveProject=Salveaz\u0103 +CTL_OpenFile=Deschide... +CTL_CloseProject=\u00CEnchide Proiect +CTL_DeleteWorkspace=\u0218terge +CTL_OpenOnlineDoc=Documenta\u021Bie \u0219i asisten\u021B\u0103 online +CTL_OpenRecentFiles=Deschide recente... diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_ru.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_ru.properties new file mode 100644 index 0000000000..82c3d27be8 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_ru.properties @@ -0,0 +1,14 @@ +CTL_NewProject=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 +CTL_OpenProject=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 +CTL_SaveProject=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 +CTL_SaveAsProject=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 \u043a\u0430\u043a... +CTL_OpenFile=\u041e\u0442\u043a\u0440\u044b\u0442\u044c... +CTL_CloseProject=\u0417\u0430\u043a\u0440\u044b\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442 +CTL_ProjectProperties=\u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 +CTL_NewWorkspace=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c +CTL_DuplicateWorkspace=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0434\u0443\u0431\u043b\u0438\u043a\u0430\u0442 +CTL_DeleteWorkspace=\u0423\u0434\u0430\u043b\u0438\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c +CTL_RenameWorkspace=\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c +CTL_OpenOnlineDoc=\u041e\u043d\u043b\u0430\u0439\u043d-\u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 +RenameWorkspace.dialog.title = \u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0447\u0435\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 +CTL_OpenRecentFiles=\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043b\u0438\u0441\u044c... diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_th.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_tr.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_tr.properties new file mode 100644 index 0000000000..28d6f3baa2 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_tr.properties @@ -0,0 +1,14 @@ +CTL_NewProject=Yeni Proje +CTL_OpenProject=Proje Aη... +CTL_SaveProject=Kaydet +CTL_SaveAsProject=Farkl\u0131 kaydet... +CTL_OpenFile=Aη... +CTL_CloseProject=Projeyi Kapat +CTL_ProjectProperties=Φzellikler... +CTL_NewWorkspace=Yeni +CTL_DuplicateWorkspace=Suretini Η\u0131kar +CTL_DeleteWorkspace=Sil +CTL_RenameWorkspace=Yeniden Adland\u0131r +CTL_OpenOnlineDoc=Ηevrimiηi belgeler ve destek +RenameWorkspace.dialog.title = Ηal\u0131\u015fma Alan\u0131n\u0131 Adland\u0131r +CTL_OpenRecentFiles=Open Recent... diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_zh_CN.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_zh_CN.properties new file mode 100644 index 0000000000..4d843abc4b --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_zh_CN.properties @@ -0,0 +1,14 @@ +CTL_NewProject=\u65b0\u5efa\u9879\u76ee +CTL_OpenProject=\u6253\u5f00\u9879\u76ee... +CTL_SaveProject=\u4fdd\u5b58 +CTL_SaveAsProject=\u53e6\u5b58\u4e3a... +CTL_OpenFile=\u6253\u5f00... +CTL_CloseProject=\u5173\u95ed\u9879\u76ee +CTL_ProjectProperties=\u5c5e\u6027... +CTL_NewWorkspace=\u65b0 +CTL_DuplicateWorkspace=\u91cd\u590d +CTL_DeleteWorkspace=\u5220\u9664 +CTL_RenameWorkspace=\u91cd\u547d\u540d +CTL_OpenOnlineDoc=\u5728\u7ebf\u6587\u6863\u548c\u652f\u6301 +RenameWorkspace.dialog.title = \u91cd\u547d\u540d\u5de5\u4f5c\u533a +CTL_OpenRecentFiles=\u6253\u5f00\u6700\u8fd1\u7684\u2026\u2026 diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_zh_TW.properties b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_zh_TW.properties new file mode 100644 index 0000000000..fe5bda5d8b --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/actions/Bundle_zh_TW.properties @@ -0,0 +1,14 @@ +CTL_NewProject=\u958b\u65b0\u5c08\u6848 +CTL_OpenProject=\u958b\u555f\u5c08\u6848... +CTL_SaveProject=\u5132\u5b58 +CTL_SaveAsProject=\u53e6\u5b58\u65b0\u6a94 +CTL_OpenFile=\u958b\u555f... +CTL_CloseProject=\u95dc\u9589\u5c08\u6848 +CTL_ProjectProperties=\u5c6c\u6027\u8a2d\u5b9a... +CTL_NewWorkspace=\u958b\u65b0\u6a94\u6848 +CTL_DuplicateWorkspace=\u8907\u88fd +CTL_DeleteWorkspace=\u522a\u9664 +CTL_RenameWorkspace=\u91cd\u65b0\u547d\u540d +CTL_OpenOnlineDoc=\u7dda\u4e0a\u6587\u4ef6\u53ca\u652f\u63f4 +RenameWorkspace.dialog.title = \u91cd\u65b0\u547d\u540d\u5de5\u4f5c\u5340 +CTL_OpenRecentFiles=Open Recent... diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/cs.po b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/cs.po deleted file mode 100644 index 0a5704987d..0000000000 --- a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/cs.po +++ /dev/null @@ -1,73 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-24 11:31+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Činnosti sprΓ‘vy projektu a interakce s uΕΎivatelem" - -msgid "CloseProject_confirm_title" -msgstr "\"UzavΕ™Γ­t projekt\"" - -msgid "CloseProject_confirm_message" -msgstr "Chcete VΓ‘Ε‘ projekt uloΕΎit?
    Pokud zmΔ›ny neuloΕΎΓ­te, budou ztraceny." - -msgid "CloseProject_confirm_save" -msgstr "UloΕΎit" - -msgid "CloseProject_confirm_doNotSave" -msgstr "NeuloΕΎit" - -msgid "CloseProject_confirm_cancel" -msgstr "ZruΕ‘it" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Činnosti sprΓ‘vy projektu a interakce s uΕΎivatelem" - -msgid "SaveAsProject_filechooser_filter" -msgstr "Soubory Gephi" - -msgid "SaveAsProject_SaveFailed" -msgstr "Nelze zapisovat do souboru {0}" - -msgid "SaveAsProject_Overwrite" -msgstr "{0} existuje. PΕ™epsat?" - -msgid "ProjectControllerUI.status.opened" -msgstr "{0} otevΕ™eno" - -msgid "ProjectControllerUI.status.saved" -msgstr "{0} uloΕΎeno" - -msgid "OpenProject_filechooser_filter" -msgstr "Soubory Gephi" - -msgid "OpenProject.defaulterror" -msgstr "Nelze otevΕ™Γ­t soubor. MusΓ­ bΓ½t kompatibilnΓ­ soubor '.gephi'." - -msgid "ProjectProperties_dialog_title" -msgstr "Vlastnosti projektu" - -msgid "OpenFile_filechooser_graphfilter" -msgstr "Soubory Gephi" - -msgid "OpenFile_filechooser_zipfilter" -msgstr "ArchivovanΓ© soubory" - -msgid "ProjectControllerUI.error.open" -msgstr "Soubor projektu nemohl bΓ½t otevΕ™en. Zkontrolujte prosΓ­m, zda soubor mΓ‘ pΕ™Γ­ponu .gephi." diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/es.po b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/es.po deleted file mode 100644 index 3170969895..0000000000 --- a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/es.po +++ /dev/null @@ -1,73 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:07+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Acciones de gestiΓ³n del proyecto e interacciΓ³n con el usuario" - -msgid "CloseProject_confirm_title" -msgstr "Cerrar proyecto" - -msgid "CloseProject_confirm_message" -msgstr "ΒΏQuieres guardar el proyecto?
    Las modificaciones se perderΓ‘n si no las guardas" - -msgid "CloseProject_confirm_save" -msgstr "Guardar" - -msgid "CloseProject_confirm_doNotSave" -msgstr "No guardar" - -msgid "CloseProject_confirm_cancel" -msgstr "Cancelar" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Acciones de gestiΓ³n del proyecto e interacciΓ³n con el usuario" - -msgid "SaveAsProject_filechooser_filter" -msgstr "Archivos Gephi" - -msgid "SaveAsProject_SaveFailed" -msgstr "Imposible escribir en el archivo {0}" - -msgid "SaveAsProject_Overwrite" -msgstr "{0} ya existe. ΒΏSobreescribir?" - -msgid "ProjectControllerUI.status.opened" -msgstr "{0} abierto" - -msgid "ProjectControllerUI.status.saved" -msgstr "{0} guardado" - -msgid "OpenProject_filechooser_filter" -msgstr "Archivos Gephi" - -msgid "OpenProject.defaulterror" -msgstr "Imposible abrir este archivo. Debe ser un archivo '.gephi' compatible." - -msgid "ProjectProperties_dialog_title" -msgstr "Propiedades del proyecto" - -msgid "OpenFile_filechooser_graphfilter" -msgstr "Archivos de grafo" - -msgid "OpenFile_filechooser_zipfilter" -msgstr "Ficheros archivados en ZIP" - -msgid "ProjectControllerUI.error.open" -msgstr "El proyecto no puedo ser abierto. Por favor comprueba que el archivo tiene extensiΓ³n .gephi." diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/fr.po b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/fr.po deleted file mode 100644 index 7501319eab..0000000000 --- a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/fr.po +++ /dev/null @@ -1,73 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:07+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Actions de gestion de projet et interface utilisateur" - -msgid "CloseProject_confirm_title" -msgstr "Fermer le projet" - -msgid "CloseProject_confirm_message" -msgstr "Sauvegarder le projet ?
    Les changements seront perdus sinon." - -msgid "CloseProject_confirm_save" -msgstr "Enregistrer" - -msgid "CloseProject_confirm_doNotSave" -msgstr "Ne pas enregistrer" - -msgid "CloseProject_confirm_cancel" -msgstr "Annuler" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Actions de gestion de projet et interface utilisateur" - -msgid "SaveAsProject_filechooser_filter" -msgstr "Fichiers Gephi" - -msgid "SaveAsProject_SaveFailed" -msgstr "Impossible d'Γ©crire le fichier {0}." - -msgid "SaveAsProject_Overwrite" -msgstr "{0} existe. Γ‰craser ?" - -msgid "ProjectControllerUI.status.opened" -msgstr "{0} ouvert" - -msgid "ProjectControllerUI.status.saved" -msgstr "{0} enregistrΓ©" - -msgid "OpenProject_filechooser_filter" -msgstr "Fichiers Gephi" - -msgid "OpenProject.defaulterror" -msgstr "Impossible d'ouvrir ce fichier. Ce doit Γͺtre un .gephi compatible." - -msgid "ProjectProperties_dialog_title" -msgstr "PropriΓ©tΓ©s du projet" - -msgid "OpenFile_filechooser_graphfilter" -msgstr "Fichiers de graphe" - -msgid "OpenFile_filechooser_zipfilter" -msgstr "Fichiers d'archives ZIP" - -msgid "ProjectControllerUI.error.open" -msgstr "Le fichier projet n'a pas pu Γͺtre ouvert. VΓ©rifiez que le fichier a l'extension '.gephi'." diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/ja.po b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/ja.po deleted file mode 100644 index 4aba08b38f..0000000000 --- a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/ja.po +++ /dev/null @@ -1,73 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-20 02:05+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "γƒ—γƒ­γ‚Έγ‚§γ‚―γƒˆη‘η†ε‹•δ½œγ¨UI" - -msgid "CloseProject_confirm_title" -msgstr "\"γƒ—γƒ­γ‚Έγ‚§γ‚―γƒˆγ‚’ι–‰γ˜γ‚‹\"" - -msgid "CloseProject_confirm_message" -msgstr "γƒ—γƒ­γ‚Έγ‚§γ‚―γƒˆγ‚’δΏε­˜γ—γΎγ™γ‹οΌŸ
    δΏε­˜γ—γͺγ‘γ‚Œγ°ε€‰ζ›΄γ―ε€±γ‚γ‚ŒγΎγ™γ€‚" - -msgid "CloseProject_confirm_save" -msgstr "保存" - -msgid "CloseProject_confirm_doNotSave" -msgstr "δΏε­˜γ—γͺい" - -msgid "CloseProject_confirm_cancel" -msgstr "キャンセル" - -msgid "OpenIDE-Module-Short-Description" -msgstr "γƒ—γƒ­γ‚Έγ‚§γ‚―γƒˆη‘η†ε‹•δ½œγ¨UI" - -msgid "SaveAsProject_filechooser_filter" -msgstr "Gephiフゑむル" - -msgid "SaveAsProject_SaveFailed" -msgstr "フゑむル{0}γ«ζ›ΈγθΎΌγΏγ§γγΎγ›γ‚“γ§γ—γŸ" - -msgid "SaveAsProject_Overwrite" -msgstr "{0}γŒε­˜εœ¨γ—γΎγ™γ€‚δΈŠζ›Έγγ—γΎγ™γ‹οΌŸ" - -msgid "ProjectControllerUI.status.opened" -msgstr "{0}ι–‹γ„γŸ" - -msgid "ProjectControllerUI.status.saved" -msgstr "{0}δΏε­˜γ—γŸ" - -msgid "OpenProject_filechooser_filter" -msgstr "Gephiフゑむル" - -msgid "OpenProject.defaulterror" -msgstr "こγγƒ•γ‚‘γ‚€γƒ«γ‚’ι–‹γγ“γ¨γ―γ§γγΎγ›γ‚“γ€‚γγ‚Œγ―ε½ΌγδΊ’換性γγ‚γ‚‹'.gephi'γƒ•γ‚‘γ‚€γƒ«γ§γ‚γ‚‹εΏ…θ¦γŒγ‚γ‚ŠγΎγ™γ€‚" - -msgid "ProjectProperties_dialog_title" -msgstr "γƒ—γƒ­γ‚Έγ‚§γ‚―γƒˆγƒ»γƒ—γƒ­γƒ‘γƒ†γ‚£" - -msgid "OpenFile_filechooser_graphfilter" -msgstr "グラフフゑむル" - -msgid "OpenFile_filechooser_zipfilter" -msgstr "をーカむブフゑむル" - -msgid "ProjectControllerUI.error.open" -msgstr "γƒ—γƒ­γ‚Έγ‚§γ‚―γƒˆγƒ•γ‚‘γ‚€γƒ«γ‚’ι–‹γγ“γ¨γŒγ§γγΎγ›γ‚“γ§γ—γŸγ€‚γƒ•γ‚‘γ‚€γƒ«γ«gephiζ‹‘εΌ΅ε­γŒγ‚γ‚‹γ‹η’Ίθͺγ—てください。" diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/layer.xml b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/layer.xml new file mode 100644 index 0000000000..8f18767d53 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/layer.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/org-gephi-desktop-project.pot b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/org-gephi-desktop-project.pot deleted file mode 100644 index 9db24cf79f..0000000000 --- a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/org-gephi-desktop-project.pot +++ /dev/null @@ -1,74 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Project management actions and user interaction" - -msgid "CloseProject_confirm_title" -msgstr "\"Close Project\"" - -msgid "CloseProject_confirm_message" -msgstr "" -"Do you want to save your project?
    Modifications will be lost if you don't save them." - -msgid "CloseProject_confirm_save" -msgstr "Save" - -msgid "CloseProject_confirm_doNotSave" -msgstr "Do not save" - -msgid "CloseProject_confirm_cancel" -msgstr "Cancel" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Project management actions and user interaction" - -msgid "SaveAsProject_filechooser_filter" -msgstr "Gephi Files" - -msgid "SaveAsProject_SaveFailed" -msgstr "Could not write to file {0}" - -msgid "SaveAsProject_Overwrite" -msgstr "{0} exists. Overwrite?" - -msgid "ProjectControllerUI.status.opened" -msgstr "{0} opened" - -msgid "ProjectControllerUI.status.saved" -msgstr "{0} saved" - -msgid "OpenProject_filechooser_filter" -msgstr "Gephi Files" - -msgid "OpenProject.defaulterror" -msgstr "Impossible to open this file. It must he a compatible '.gephi' file." - -msgid "ProjectProperties_dialog_title" -msgstr "Project Properties" - -msgid "OpenFile_filechooser_graphfilter" -msgstr "Graph Files" - -msgid "OpenFile_filechooser_zipfilter" -msgstr "Archived Files" - -msgid "ProjectControllerUI.error.open" -msgstr "" -"The project file couldn't be opened. Please check the file has .gephi " -"extension." diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/pt_BR.po b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/pt_BR.po deleted file mode 100644 index 964c678c55..0000000000 --- a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/pt_BR.po +++ /dev/null @@ -1,73 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 17:38+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "AΓ§Γ΅es de gerenciamento de projeto e interaΓ§Γ£o com o usuΓ‘rio" - -msgid "CloseProject_confirm_title" -msgstr "\"Fechar projeto\"" - -msgid "CloseProject_confirm_message" -msgstr "Deseja salvar seu projeto?
    As modificaΓ§Γ΅es serΓ£o perdidas se vocΓͺ nΓ£o salvΓ‘-las." - -msgid "CloseProject_confirm_save" -msgstr "Salvar" - -msgid "CloseProject_confirm_doNotSave" -msgstr "NΓ£o salvar" - -msgid "CloseProject_confirm_cancel" -msgstr "Cancelar" - -msgid "OpenIDE-Module-Short-Description" -msgstr "AΓ§Γ΅es de gerenciamento de projeto e interaΓ§Γ£o com o usuΓ‘rio" - -msgid "SaveAsProject_filechooser_filter" -msgstr "Arquivos Gephi" - -msgid "SaveAsProject_SaveFailed" -msgstr "NΓ£o foi possΓ­vel escrever no arquivo {0}" - -msgid "SaveAsProject_Overwrite" -msgstr "{0} jΓ‘ existe. Substituir?" - -msgid "ProjectControllerUI.status.opened" -msgstr "{0} aberto" - -msgid "ProjectControllerUI.status.saved" -msgstr "{0} salvo" - -msgid "OpenProject_filechooser_filter" -msgstr "Arquivos Gephi" - -msgid "OpenProject.defaulterror" -msgstr "ImpossΓ­vel abrir este arquivo. O arquivo deve ser um arquivo compatΓ­vel com o formato '.gephi '." - -msgid "ProjectProperties_dialog_title" -msgstr "Propriedades do projeto" - -msgid "OpenFile_filechooser_graphfilter" -msgstr "Arquivos de grafo" - -msgid "OpenFile_filechooser_zipfilter" -msgstr "Arquivos compactados em formato ZIP" - -msgid "ProjectControllerUI.error.open" -msgstr "O projeto nΓ£o pode ser aberto. Por favor verifique se o arquivo possui extensΓ£o '.gephi'." diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/ru.po b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/ru.po deleted file mode 100644 index 33e5571a72..0000000000 --- a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/ru.po +++ /dev/null @@ -1,73 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-05 20:23+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ" - -msgid "CloseProject_confirm_title" -msgstr "\"Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚\"" - -msgid "CloseProject_confirm_message" -msgstr "Π₯ΠΎΡ‚ΠΈΡ‚Π΅ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ свой ΠΏΡ€ΠΎΠ΅ΠΊΡ‚?
    ПослСдниС измСнСния Π±ΡƒΠ΄ΡƒΡ‚ утСряны, Ссли Π²Ρ‹ ΠΈΡ… Π½Π΅ сохранитС." - -msgid "CloseProject_confirm_save" -msgstr "Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ" - -msgid "CloseProject_confirm_doNotSave" -msgstr "НС ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ" - -msgid "CloseProject_confirm_cancel" -msgstr "ΠžΡ‚ΠΌΠ΅Π½Π°" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ ΠΏΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡ‚Π²ΠΈΡŽ с ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ" - -msgid "SaveAsProject_filechooser_filter" -msgstr "Π€Π°ΠΉΠ»Ρ‹ Gephi" - -msgid "SaveAsProject_SaveFailed" -msgstr "НСт доступа Π½Π° запись Π² Ρ„Π°ΠΉΠ» {0}" - -msgid "SaveAsProject_Overwrite" -msgstr "{0} сущСствуСт. ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ?" - -msgid "ProjectControllerUI.status.opened" -msgstr "{0} ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚" - -msgid "ProjectControllerUI.status.saved" -msgstr "{0} сохранён" - -msgid "OpenProject_filechooser_filter" -msgstr "Π€Π°ΠΉΠ»Ρ‹ Gephi" - -msgid "OpenProject.defaulterror" -msgstr "НС получаСтся ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π€Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅, совмСстимом с '.gephi'." - -msgid "ProjectProperties_dialog_title" -msgstr "Бвойства ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°" - -msgid "OpenFile_filechooser_graphfilter" -msgstr "Π€Π°ΠΉΠ»Ρ‹ Gephi" - -msgid "OpenFile_filechooser_zipfilter" -msgstr "АрхивныС Ρ„Π°ΠΉΠ»Ρ‹" - -msgid "ProjectControllerUI.error.open" -msgstr "НС получаСтся ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π£Π±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ, Ρ‡Ρ‚ΠΎ Ρ„Π°ΠΉΠ» ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ '.gephi'." diff --git a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/zh_CN.po b/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/zh_CN.po deleted file mode 100644 index 6d97cf1682..0000000000 --- a/modules/DesktopProject/src/main/resources/org/gephi/desktop/project/zh_CN.po +++ /dev/null @@ -1,72 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:15+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "程序η‘η†ζ‰§θ‘Œε’Œη”¨ζˆ·δΊ€δΊ’" - -msgid "CloseProject_confirm_title" -msgstr "β€œε…³ι—­η¨‹εΊβ€" - -msgid "CloseProject_confirm_message" -msgstr "ζƒ³δΏε­˜η¨‹εΊε—οΌŸ
    <字体倧小=\"-2\">ε¦‚ζžœδΈδΏε­˜δΏζ”ΉοΌŒδΏ‘ζ―ε°†δΌšδΈ’ε€±γ€‚" - -msgid "CloseProject_confirm_save" -msgstr "保存" - -msgid "CloseProject_confirm_doNotSave" -msgstr "bubaocun" - -msgid "CloseProject_confirm_cancel" -msgstr "ε–ζΆˆ" - -msgid "OpenIDE-Module-Short-Description" -msgstr "程序η‘η†ζ‰§θ‘Œε’Œη”¨ζˆ·δΊ€δΊ’" - -msgid "SaveAsProject_filechooser_filter" -msgstr "Gephiζ–‡δ»Ά" - -msgid "SaveAsProject_SaveFailed" -msgstr "δΈθƒ½ε†™εˆ°{0}" - -msgid "SaveAsProject_Overwrite" -msgstr "{0}η»§η»­ε­˜εœ¨γ€‚||θ¦†η›–οΌŸ" - -msgid "ProjectControllerUI.status.opened" -msgstr "{0}打开" - -msgid "ProjectControllerUI.status.saved" -msgstr "{0}保存" - -msgid "OpenProject_filechooser_filter" -msgstr "Gephiζ–‡δ»Ά" - -msgid "OpenProject.defaulterror" -msgstr "不能打开歀文仢。εƒδΈζ˜―δΈ€δΈͺε…ΌεΉηš„β€˜.gephi’文仢。" - -msgid "ProjectProperties_dialog_title" -msgstr "η¨‹εΊε±žζ€§" - -msgid "OpenFile_filechooser_graphfilter" -msgstr "ε›Ύζ–‡δ»Ά" - -msgid "OpenFile_filechooser_zipfilter" -msgstr "ε­˜ζ‘£ζ–‡δ»Ά" - -msgid "ProjectControllerUI.error.open" -msgstr "程序文仢打不开。请检ζŸ₯ζ–‡δ»Άηš„ζ‰©ε±•εδΈΊ.gephi。" diff --git a/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle.properties b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle.properties new file mode 100644 index 0000000000..1e1bbdfdbf --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle.properties @@ -0,0 +1,26 @@ +ProjectPropertiesEditor.labelName.text=Name: +ProjectPropertiesEditor.labelAuthor.text=Author: +ProjectPropertiesEditor.authorTextField.text= +ProjectPropertiesEditor.keywordsTextField.text= +ProjectPropertiesEditor.labelKeywords.text=Keywords: +ProjectPropertiesEditor.titleTextField.text= +ProjectPropertiesEditor.labelDescription.text=Description: +ProjectPropertiesEditor.labelTitle.text=Title: +ProjectPropertiesEditor.nameTextField.text= +ProjectPropertiesEditor.descriptionPanel.border.title=Description + +ProjectPropertiesEditor.fileLabel.text= + +ProjectPropertiesEditor.labelFile.text=File: +ProjectList.removeProjectButton.text=Remove Project +ProjectList.openProjectButton.text=Open Project +ProjectList.removeProjectButton.toolTipText=Remove the project from the list of active projects. Does not remove any underlying .gephi files. +ProjectList.openProjectButton.toolTipText=Close the current project and open this project +WorkspacePropertiesEditor.innerPanel.border.title=Workspace +WorkspacePropertiesEditor.labelName.text=Name: +WorkspacePropertiesEditor.labelDescription.text=Description: +WorkspacePropertiesEditor.labelTitle.text=Title: +NewWorkspace.labelName.text=Name: +NewWorkspace.innerPanel.border.title=Settings +NewWorkspace.labelTimeRepresentation.text=Time representation: +NewWorkspace.default.prefix=Workspace diff --git a/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_ar.properties b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_ca.properties b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_ca.properties new file mode 100644 index 0000000000..2796a6067a --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_ca.properties @@ -0,0 +1,14 @@ +ProjectPropertiesEditor.labelName.text=Nom: +ProjectPropertiesEditor.labelAuthor.text=Persona autora: +ProjectPropertiesEditor.authorTextField.text= +ProjectPropertiesEditor.keywordsTextField.text= +ProjectPropertiesEditor.labelKeywords.text=Paraules clau: +ProjectPropertiesEditor.titleTextField.text= +ProjectPropertiesEditor.labelDescription.text=Descripci\u00f3: +ProjectPropertiesEditor.labelTitle.text=T\u00edtol: +ProjectPropertiesEditor.nameTextField.text= +ProjectPropertiesEditor.descriptionPanel.border.title=Descripci\u00f3: + +ProjectPropertiesEditor.fileLabel.text= + +ProjectPropertiesEditor.labelFile.text=Fitxer: diff --git a/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_cs.properties b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_cs.properties new file mode 100644 index 0000000000..4624081267 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_cs.properties @@ -0,0 +1,14 @@ +ProjectPropertiesEditor.labelName.text=Jm\u00e9no: +ProjectPropertiesEditor.labelAuthor.text=Autor: +ProjectPropertiesEditor.authorTextField.text= +ProjectPropertiesEditor.keywordsTextField.text= +ProjectPropertiesEditor.labelKeywords.text=Kl\u00ed\u010dov\u00e1 slova: +ProjectPropertiesEditor.titleTextField.text= +ProjectPropertiesEditor.labelDescription.text=Popis: +ProjectPropertiesEditor.labelTitle.text=N\u00e1zev: +ProjectPropertiesEditor.nameTextField.text= +ProjectPropertiesEditor.descriptionPanel.border.title=Popis + +ProjectPropertiesEditor.fileLabel.text= + +ProjectPropertiesEditor.labelFile.text=Soubor: diff --git a/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_de.properties b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_de.properties new file mode 100644 index 0000000000..729f4c0750 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_de.properties @@ -0,0 +1,14 @@ +ProjectPropertiesEditor.labelName.text=Name: +ProjectPropertiesEditor.labelAuthor.text=Author: +ProjectPropertiesEditor.authorTextField.text= +ProjectPropertiesEditor.keywordsTextField.text= +ProjectPropertiesEditor.labelKeywords.text=Schl\u00fcsselworte: +ProjectPropertiesEditor.titleTextField.text= +ProjectPropertiesEditor.labelDescription.text=Beschreibung: +ProjectPropertiesEditor.labelTitle.text=Titel: +ProjectPropertiesEditor.nameTextField.text= +ProjectPropertiesEditor.descriptionPanel.border.title=Beschreibung + +ProjectPropertiesEditor.fileLabel.text= + +ProjectPropertiesEditor.labelFile.text=Datei: diff --git a/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_es.properties b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_es.properties new file mode 100644 index 0000000000..1056b8cb33 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_es.properties @@ -0,0 +1,24 @@ +ProjectPropertiesEditor.labelName.text=Nombre: +ProjectPropertiesEditor.labelAuthor.text=Autor: +ProjectPropertiesEditor.authorTextField.text= +ProjectPropertiesEditor.keywordsTextField.text= +ProjectPropertiesEditor.labelKeywords.text=Palabras clave: +ProjectPropertiesEditor.titleTextField.text= +ProjectPropertiesEditor.labelDescription.text=Descripci\u00f3n: +ProjectPropertiesEditor.labelTitle.text=T\u00edtulo: +ProjectPropertiesEditor.nameTextField.text= +ProjectPropertiesEditor.descriptionPanel.border.title=Descripci\u00f3n +ProjectPropertiesEditor.fileLabel.text= +ProjectPropertiesEditor.labelFile.text=Archivo: +WorkspacePropertiesEditor.innerPanel.border.title=Espacio de trabajo +ProjectList.openProjectButton.toolTipText=Cerrar el proyecto actual y abrir este proyecto +WorkspacePropertiesEditor.labelName.text=Nombre: +ProjectList.removeProjectButton.text=Eliminar proyecto +WorkspacePropertiesEditor.labelDescription.text=Descripci\u00F3n: +ProjectList.openProjectButton.text=Proyecto abierto +ProjectList.removeProjectButton.toolTipText=Elimina el proyecto de la lista de proyectos activos. No elimina ning\u00FAn archivo .gephi subyacente. +WorkspacePropertiesEditor.labelTitle.text=T\u00EDtulo: +NewWorkspace.labelName.text=Nombre: +NewWorkspace.innerPanel.border.title=Ajustes +NewWorkspace.labelTimeRepresentation.text=Representaci\u00F3n horaria: +NewWorkspace.default.prefix=Espacio de trabajo diff --git a/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_fr.properties b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_fr.properties new file mode 100644 index 0000000000..0621944936 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_fr.properties @@ -0,0 +1,14 @@ +ProjectPropertiesEditor.labelName.text=Nom : +ProjectPropertiesEditor.labelAuthor.text=Auteur : +ProjectPropertiesEditor.authorTextField.text= +ProjectPropertiesEditor.keywordsTextField.text= +ProjectPropertiesEditor.labelKeywords.text=Mots cl\u00e9s : +ProjectPropertiesEditor.titleTextField.text= +ProjectPropertiesEditor.labelDescription.text=Description : +ProjectPropertiesEditor.labelTitle.text=Titre : +ProjectPropertiesEditor.nameTextField.text= +ProjectPropertiesEditor.descriptionPanel.border.title=Description + +ProjectPropertiesEditor.fileLabel.text= + +ProjectPropertiesEditor.labelFile.text=Fichier : diff --git a/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_he.properties b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_he.properties new file mode 100644 index 0000000000..dd95dea091 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_he.properties @@ -0,0 +1,12 @@ +ProjectPropertiesEditor.labelName.text=Name: +ProjectPropertiesEditor.labelAuthor.text=Author: +ProjectPropertiesEditor.authorTextField.text= +ProjectPropertiesEditor.keywordsTextField.text= +ProjectPropertiesEditor.labelKeywords.text=Keywords: +ProjectPropertiesEditor.titleTextField.text= +ProjectPropertiesEditor.labelDescription.text=Description: +ProjectPropertiesEditor.labelTitle.text=\u05db\u05d5\u05ea\u05e8\u05ea: +ProjectPropertiesEditor.nameTextField.text= +ProjectPropertiesEditor.descriptionPanel.border.title=Description +ProjectPropertiesEditor.fileLabel.text= +ProjectPropertiesEditor.labelFile.text=File: diff --git a/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_hu.properties b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_hu.properties new file mode 100644 index 0000000000..8e9d061a94 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_hu.properties @@ -0,0 +1,17 @@ + + +ProjectPropertiesEditor.labelAuthor.text=Szerz\u0151: +ProjectPropertiesEditor.labelTitle.text=C\u00EDm: +ProjectPropertiesEditor.labelFile.text=F\u00E1jl: +ProjectPropertiesEditor.labelKeywords.text=Kulcsszavak: +WorkspacePropertiesEditor.innerPanel.border.title=Munkater\u00FClet +ProjectList.openProjectButton.toolTipText=Z\u00E1rja be az aktu\u00E1lis projektet, \u00E9s nyissa meg ezt a projektet +ProjectPropertiesEditor.labelDescription.text=Le\u00EDr\u00E1s: +WorkspacePropertiesEditor.labelName.text=N\u00E9v +ProjectPropertiesEditor.descriptionPanel.border.title=Le\u00EDr\u00E1s: +ProjectList.removeProjectButton.text=A projekt elt\u00E1vol\u00EDt\u00E1sa +WorkspacePropertiesEditor.labelDescription.text=Le\u00EDr\u00E1s: +ProjectPropertiesEditor.labelName.text=N\u00E9v: +ProjectList.openProjectButton.text=Nyitott projekt +ProjectList.removeProjectButton.toolTipText=T\u00E1vol\u00EDtsa el a projektet az akt\u00EDv projektek list\u00E1j\u00E1r\u00F3l. Nem t\u00E1vol\u00EDt el semmilyen m\u00F6g\u00F6ttes .gephi f\u00E1jlt. +WorkspacePropertiesEditor.labelTitle.text=C\u00EDm: diff --git a/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_it.properties b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_it.properties new file mode 100644 index 0000000000..5ff98a3c7e --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_it.properties @@ -0,0 +1,12 @@ +ProjectPropertiesEditor.labelName.text=Name: +ProjectPropertiesEditor.labelAuthor.text=Author: +ProjectPropertiesEditor.authorTextField.text= +ProjectPropertiesEditor.keywordsTextField.text= +ProjectPropertiesEditor.labelKeywords.text=Keywords: +ProjectPropertiesEditor.titleTextField.text= +ProjectPropertiesEditor.labelDescription.text=Description: +ProjectPropertiesEditor.labelTitle.text=Title: +ProjectPropertiesEditor.nameTextField.text= +ProjectPropertiesEditor.descriptionPanel.border.title=Description +ProjectPropertiesEditor.fileLabel.text= +ProjectPropertiesEditor.labelFile.text=File: diff --git a/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_ja.properties b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_ja.properties new file mode 100644 index 0000000000..fe98124a34 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_ja.properties @@ -0,0 +1,14 @@ +ProjectPropertiesEditor.labelName.text=\u540d\u524d: +ProjectPropertiesEditor.labelAuthor.text=\u5236\u4f5c\u8005: +ProjectPropertiesEditor.authorTextField.text= +ProjectPropertiesEditor.keywordsTextField.text= +ProjectPropertiesEditor.labelKeywords.text=\u30ad\u30fc\u30ef\u30fc\u30c9: +ProjectPropertiesEditor.titleTextField.text= +ProjectPropertiesEditor.labelDescription.text=\u8a18\u8ff0: +ProjectPropertiesEditor.labelTitle.text=\u30bf\u30a4\u30c8\u30eb: +ProjectPropertiesEditor.nameTextField.text= +ProjectPropertiesEditor.descriptionPanel.border.title=\u8a18\u8ff0 + +ProjectPropertiesEditor.fileLabel.text= + +ProjectPropertiesEditor.labelFile.text=\u30d5\u30a1\u30a4\u30eb: diff --git a/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_ko.properties b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_ko.properties new file mode 100644 index 0000000000..a3511e69fe --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_ko.properties @@ -0,0 +1,23 @@ + + +ProjectPropertiesEditor.labelAuthor.text=\uC800\uC790: +ProjectPropertiesEditor.labelTitle.text=\uC81C\uBAA9: +ProjectPropertiesEditor.labelFile.text=\uD30C\uC77C: +ProjectPropertiesEditor.labelKeywords.text=\uD575\uC2EC\uC5B4: +WorkspacePropertiesEditor.innerPanel.border.title=\uC791\uC5C5 \uC601\uC5ED +ProjectList.openProjectButton.toolTipText=\uD604\uC7AC \uD504\uB85C\uC81D\uD2B8\uB97C \uB2EB\uACE0 \uC774 \uD504\uB85C\uC81D\uD2B8\uB97C \uC5FD\uB2C8\uB2E4 +ProjectPropertiesEditor.labelDescription.text=\uC124\uBA85: +WorkspacePropertiesEditor.labelName.text=\uC774\uB984: +ProjectPropertiesEditor.descriptionPanel.border.title=\uC124\uBA85 +ProjectList.removeProjectButton.text=\uD504\uB85C\uC81D\uD2B8 \uC0AD\uC81C +WorkspacePropertiesEditor.labelDescription.text=\uC124\uBA85: +ProjectPropertiesEditor.labelName.text=\uC774\uB984: +ProjectList.openProjectButton.text=\uD504\uB85C\uC81D\uD2B8 \uC5F4\uAE30 +ProjectList.removeProjectButton.toolTipText=\uD65C\uC131 \uD504\uB85C\uC81D\uD2B8 \uBAA9\uB85D\uC5D0\uC11C \uD504\uB85C\uC81D\uD2B8\uB97C \uC0AD\uC81C\uD569\uB2C8\uB2E4. \uAE30\uBCF8 .gehpi \uD30C\uC77C\uC740 \uC81C\uAC70\uD558\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. +WorkspacePropertiesEditor.labelTitle.text=\uC81C\uBAA9: +ProjectPropertiesEditor.authorTextField.text=\u00AD +ProjectPropertiesEditor.nameTextField.text=- +NewWorkspace.labelName.text=\uC774\uB984: +NewWorkspace.innerPanel.border.title=\uC124\uC815 +NewWorkspace.labelTimeRepresentation.text=\uC2DC\uAC04 \uD45C\uC2DC \uBC29\uC2DD: +NewWorkspace.default.prefix=\uC791\uC5C5\uACF5\uAC04 diff --git a/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_nl.properties b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_nl.properties new file mode 100644 index 0000000000..f67f7a7864 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_nl.properties @@ -0,0 +1,14 @@ +ProjectPropertiesEditor.labelName.text=Naam: +ProjectPropertiesEditor.labelAuthor.text=Auteur: +ProjectPropertiesEditor.authorTextField.text= +ProjectPropertiesEditor.keywordsTextField.text= +ProjectPropertiesEditor.labelKeywords.text=Trefwoorden: +ProjectPropertiesEditor.titleTextField.text= +ProjectPropertiesEditor.labelDescription.text=Beschrijving: +ProjectPropertiesEditor.labelTitle.text=Titel: +ProjectPropertiesEditor.nameTextField.text= +ProjectPropertiesEditor.descriptionPanel.border.title=Beschrijving + +ProjectPropertiesEditor.fileLabel.text= + +ProjectPropertiesEditor.labelFile.text=Bestand: diff --git a/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_pt_BR.properties b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_pt_BR.properties new file mode 100644 index 0000000000..4ef283cf7a --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_pt_BR.properties @@ -0,0 +1,14 @@ +ProjectPropertiesEditor.labelName.text=Nome: +ProjectPropertiesEditor.labelAuthor.text=Autor: +ProjectPropertiesEditor.authorTextField.text= +ProjectPropertiesEditor.keywordsTextField.text= +ProjectPropertiesEditor.labelKeywords.text=Palavras-chave: +ProjectPropertiesEditor.titleTextField.text= +ProjectPropertiesEditor.labelDescription.text=Descri\u00e7\u00e3o: +ProjectPropertiesEditor.labelTitle.text=T\u00edtulo: +ProjectPropertiesEditor.nameTextField.text= +ProjectPropertiesEditor.descriptionPanel.border.title=Descri\u00e7\u00e3o + +ProjectPropertiesEditor.fileLabel.text= + +ProjectPropertiesEditor.labelFile.text=Arquivo: diff --git a/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_ro.properties b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_ro.properties new file mode 100644 index 0000000000..b7a42e9ec5 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_ro.properties @@ -0,0 +1,9 @@ + + +ProjectPropertiesEditor.labelAuthor.text=Autor: +ProjectPropertiesEditor.labelName.text=Nume: +ProjectPropertiesEditor.labelKeywords.text=Cuvinte-cheie: +ProjectPropertiesEditor.labelTitle.text=Titlu: +ProjectPropertiesEditor.labelFile.text=Fi\u015Fier: +ProjectPropertiesEditor.labelDescription.text=Descriere: +ProjectPropertiesEditor.descriptionPanel.border.title=Descriere diff --git a/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_ru.properties b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_ru.properties new file mode 100644 index 0000000000..a7ba608b24 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_ru.properties @@ -0,0 +1,14 @@ +ProjectPropertiesEditor.labelName.text=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435: +ProjectPropertiesEditor.labelAuthor.text=\u0410\u0432\u0442\u043e\u0440: +ProjectPropertiesEditor.authorTextField.text= +ProjectPropertiesEditor.keywordsTextField.text= +ProjectPropertiesEditor.labelKeywords.text=\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430: +ProjectPropertiesEditor.titleTextField.text= +ProjectPropertiesEditor.labelDescription.text=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435: +ProjectPropertiesEditor.labelTitle.text=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a: +ProjectPropertiesEditor.nameTextField.text= +ProjectPropertiesEditor.descriptionPanel.border.title=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 + +ProjectPropertiesEditor.fileLabel.text= + +ProjectPropertiesEditor.labelFile.text=\u0424\u0430\u0439\u043b: diff --git a/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_th.properties b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_tr.properties b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_tr.properties new file mode 100644 index 0000000000..686a15aa7f --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_tr.properties @@ -0,0 +1,14 @@ +ProjectPropertiesEditor.labelName.text=Ad: +ProjectPropertiesEditor.labelAuthor.text=Yazar: +ProjectPropertiesEditor.authorTextField.text= +ProjectPropertiesEditor.keywordsTextField.text= +ProjectPropertiesEditor.labelKeywords.text=Anahtar Kelime: +ProjectPropertiesEditor.titleTextField.text= +ProjectPropertiesEditor.labelDescription.text=A\u00e7\u0131klama: +ProjectPropertiesEditor.labelTitle.text=Ba\u015fl\u0131k: +ProjectPropertiesEditor.nameTextField.text= +ProjectPropertiesEditor.descriptionPanel.border.title=A\u00e7\u0131klama + +ProjectPropertiesEditor.fileLabel.text= + +ProjectPropertiesEditor.labelFile.text=Dosya: diff --git a/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_uk.properties b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_uk.properties new file mode 100644 index 0000000000..421cfea841 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_uk.properties @@ -0,0 +1,24 @@ +ProjectPropertiesEditor.labelName.text=\u0406\u043C'\u044F: +ProjectPropertiesEditor.authorTextField.text=\u0406 +NewWorkspace.labelName.text=\u0406\u043C'\u044F: +ProjectPropertiesEditor.labelAuthor.text=\u0410\u0432\u0442\u043E\u0440: +ProjectPropertiesEditor.keywordsTextField.text=\u0406 +ProjectPropertiesEditor.labelDescription.text=\u041E\u043F\u0438\u0441: +ProjectPropertiesEditor.labelTitle.text=\u041D\u0430\u0437\u0432\u0430: +ProjectPropertiesEditor.nameTextField.text=\u0406 +ProjectPropertiesEditor.fileLabel.text=\u0406 +ProjectPropertiesEditor.labelFile.text=\u0424\u0430\u0439\u043B: +ProjectList.removeProjectButton.text=\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u043F\u0440\u043E\u0435\u043A\u0442 +WorkspacePropertiesEditor.labelName.text=\u0406\u043C'\u044F: +WorkspacePropertiesEditor.labelDescription.text=\u041E\u043F\u0438\u0441: +WorkspacePropertiesEditor.labelTitle.text=\u041D\u0430\u0437\u0432\u0430: +NewWorkspace.innerPanel.border.title=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F +NewWorkspace.default.prefix=\u0420\u043E\u0431\u043E\u0447\u0430 \u043E\u0431\u043B\u0430\u0441\u0442\u044C +ProjectList.openProjectButton.text=\u0412\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u043F\u0440\u043E\u0435\u043A\u0442 +ProjectPropertiesEditor.descriptionPanel.border.title=\u041E\u043F\u0438\u0441 +ProjectList.removeProjectButton.toolTipText=\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u043F\u0440\u043E\u0435\u043A\u0442 \u0437\u0456 \u0441\u043F\u0438\u0441\u043A\u0443 \u0430\u043A\u0442\u0438\u0432\u043D\u0438\u0445 \u043F\u0440\u043E\u0435\u043A\u0442\u0456\u0432. \u041D\u0435 \u0432\u0438\u0434\u0430\u043B\u044F\u0454 \u0431\u0430\u0437\u043E\u0432\u0456 \u0444\u0430\u0439\u043B\u0438 .gephi. +ProjectList.openProjectButton.toolTipText=\u0417\u0430\u043A\u0440\u0438\u0439\u0442\u0435 \u043F\u043E\u0442\u043E\u0447\u043D\u0438\u0439 \u043F\u0440\u043E\u0435\u043A\u0442 \u0456 \u0432\u0456\u0434\u043A\u0440\u0438\u0439\u0442\u0435 \u0446\u0435\u0439 \u043F\u0440\u043E\u0435\u043A\u0442 +WorkspacePropertiesEditor.innerPanel.border.title=\u0420\u043E\u0431\u043E\u0447\u0430 \u043E\u0431\u043B\u0430\u0441\u0442\u044C +NewWorkspace.labelTimeRepresentation.text=\u041F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u043D\u044F \u0447\u0430\u0441\u0443: +ProjectPropertiesEditor.titleTextField.text=\u0406 +ProjectPropertiesEditor.labelKeywords.text=\u041A\u043B\u044E\u0447\u043E\u0432\u0456 \u0441\u043B\u043E\u0432\u0430: diff --git a/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_zh_CN.properties b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_zh_CN.properties new file mode 100644 index 0000000000..b1c71a1aa7 --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_zh_CN.properties @@ -0,0 +1,20 @@ +ProjectPropertiesEditor.labelName.text=\u540D\u79F0\uFF1A +ProjectPropertiesEditor.labelAuthor.text=\u4f5c\u8005: +ProjectPropertiesEditor.authorTextField.text= +ProjectPropertiesEditor.keywordsTextField.text= +ProjectPropertiesEditor.labelKeywords.text=\u5173\u952e\u8bcd: +ProjectPropertiesEditor.titleTextField.text= +ProjectPropertiesEditor.labelDescription.text=\u63CF\u8FF0\uFF1A +ProjectPropertiesEditor.labelTitle.text=\u6807\u9898: +ProjectPropertiesEditor.nameTextField.text= +ProjectPropertiesEditor.descriptionPanel.border.title=\u63CF\u8FF0 +ProjectPropertiesEditor.fileLabel.text= +ProjectPropertiesEditor.labelFile.text=\u6587\u4ef6: +WorkspacePropertiesEditor.labelTitle.text=\u6807\u9898\uFF1A +ProjectList.openProjectButton.toolTipText=\u5173\u95ED\u5F53\u524D\u9879\u76EE\u5E76\u6253\u5F00\u6307\u5B9A\u7684\u9879\u76EE +WorkspacePropertiesEditor.innerPanel.border.title=\u5DE5\u4F5C\u533A +ProjectList.openProjectButton.text=\u6253\u5F00\u9879\u76EE +ProjectList.removeProjectButton.text=\u79FB\u9664\u9879\u76EE +ProjectList.removeProjectButton.toolTipText=\u5C06\u9879\u76EE\u4ECE\u6FC0\u6D3B\u7684\u9879\u76EE\u5217\u8868\u4E2D\u79FB\u9664\u3002\u8BE5\u64CD\u4F5C\u4E0D\u4F1A\u79FB\u9664\u4EFB\u4F55 .gephi\u6587\u4EF6\u3002 +WorkspacePropertiesEditor.labelName.text=\u540D\u79F0\uFF1A +WorkspacePropertiesEditor.labelDescription.text=\u63CF\u8FF0\uFF1A diff --git a/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_zh_TW.properties b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_zh_TW.properties new file mode 100644 index 0000000000..5ff98a3c7e --- /dev/null +++ b/modules/DesktopProject/src/main/resources/org/gephi/ui/project/Bundle_zh_TW.properties @@ -0,0 +1,12 @@ +ProjectPropertiesEditor.labelName.text=Name: +ProjectPropertiesEditor.labelAuthor.text=Author: +ProjectPropertiesEditor.authorTextField.text= +ProjectPropertiesEditor.keywordsTextField.text= +ProjectPropertiesEditor.labelKeywords.text=Keywords: +ProjectPropertiesEditor.titleTextField.text= +ProjectPropertiesEditor.labelDescription.text=Description: +ProjectPropertiesEditor.labelTitle.text=Title: +ProjectPropertiesEditor.nameTextField.text= +ProjectPropertiesEditor.descriptionPanel.border.title=Description +ProjectPropertiesEditor.fileLabel.text= +ProjectPropertiesEditor.labelFile.text=File: diff --git a/modules/DesktopRanking/pom.xml b/modules/DesktopRanking/pom.xml deleted file mode 100644 index 5ddd143c34..0000000000 --- a/modules/DesktopRanking/pom.xml +++ /dev/null @@ -1,93 +0,0 @@ - - - 4.0.0 - - gephi-parent - org.gephi - 0.9-SNAPSHOT - ../.. - - - org.gephi - desktop-ranking - 0.9-SNAPSHOT - nbm - - DesktopRanking - - - - ${project.groupId} - graph-api - - - ${project.groupId} - project-api - - - ${project.groupId} - ranking-api - - - ${project.groupId} - ranking-plugin - - - ${project.groupId} - ui-components - - - ${project.groupId} - ui-library-wrapper - - - ${project.groupId} - ui-utils - - - org.netbeans.api - org-openide-windows - - - org.netbeans.api - org-openide-util-lookup - - - org.netbeans.api - org-openide-util - - - org.netbeans.api - org-openide-awt - - - org.netbeans.api - org-netbeans-modules-settings - - - ${project.groupId} - spline-editor - - - org.netbeans.api - org-openide-filesystems - - - org.netbeans.api - org-openide-nodes - - - - - - - org.codehaus.mojo - nbm-maven-plugin - - - - - - - - diff --git a/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/BarChartPanel.java b/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/BarChartPanel.java deleted file mode 100644 index f471a6527e..0000000000 --- a/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/BarChartPanel.java +++ /dev/null @@ -1,56 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.desktop.ranking; - -import javax.swing.JLabel; -import javax.swing.JPanel; - -/** - * - * @author Mathieu Bastian - */ -public class BarChartPanel extends JPanel { - - public BarChartPanel() { - add(new JLabel("RankingBarChartPanel")); - } -} diff --git a/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/RankingChooser.form b/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/RankingChooser.form deleted file mode 100644 index 7ecc240e3f..0000000000 --- a/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/RankingChooser.form +++ /dev/null @@ -1,165 +0,0 @@ - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/RankingChooser.java b/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/RankingChooser.java deleted file mode 100644 index 94d99566d3..0000000000 --- a/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/RankingChooser.java +++ /dev/null @@ -1,452 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.desktop.ranking; - -import java.awt.Component; -import java.beans.PropertyChangeEvent; -import javax.swing.JList; -import org.gephi.ranking.spi.TransformerUI; -import java.awt.BorderLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.beans.PropertyChangeListener; -import java.util.Arrays; -import java.util.Comparator; -import javax.swing.BorderFactory; -import javax.swing.Box; -import javax.swing.DefaultComboBoxModel; -import javax.swing.DefaultListCellRenderer; -import javax.swing.JPanel; -import javax.swing.SwingUtilities; -import org.gephi.ranking.api.Interpolator; -import org.gephi.ranking.api.Ranking; -import org.gephi.ranking.api.RankingController; -import org.gephi.ranking.api.Transformer; -import org.gephi.ui.components.SplineEditor.SplineEditor; -import org.openide.util.ImageUtilities; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; - -/** - * - * @author Mathieu Bastian - */ -public class RankingChooser extends javax.swing.JPanel implements PropertyChangeListener { - - private final String NO_SELECTION; - private final ItemListener rankingItemListener; - private final RankingUIController controller; - private RankingUIModel model; - private JPanel centerPanel; - //Spline - private SplineEditor splineEditor; - private Interpolator interpolator; - - public RankingChooser(RankingUIController controller) { - NO_SELECTION = NbBundle.getMessage(RankingChooser.class, "RankingChooser.choose.text"); - this.controller = controller; - initComponents(); - initControls(); - - rankingItemListener = new ItemListener() { - - @Override - public void itemStateChanged(ItemEvent e) { - if (model != null) { - if (!rankingComboBox.getSelectedItem().equals(NO_SELECTION)) { - model.setCurrentRanking((Ranking) rankingComboBox.getSelectedItem()); - } else { - model.setCurrentRanking(null); - } - } - } - }; - rankingComboBox.setRenderer(new RankingListCellRenderer()); - } - - public void refreshModel(RankingUIModel model) { - if (this.model != null) { - this.model.removePropertyChangeListener(this); - } - this.model = model; - if (model != null) { - model.addPropertyChangeListener(this); - } - - refreshModel(); - } - - private void refreshModel() { - //CenterPanel - if (centerPanel != null) { - remove(centerPanel); - } - applyButton.setVisible(false); - autoApplyButton.setVisible(false); - enableAutoButton.setVisible(false); - splineButton.setVisible(false); - - if (model != null) { - - //Ranking - Ranking selectedRanking = refreshCombo(); - - if (selectedRanking != null) { - refreshTransformerPanel(selectedRanking); - } - } - - revalidate(); - repaint(); - } - - @Override - public void propertyChange(PropertyChangeEvent pce) { - if (pce.getPropertyName().equals(RankingUIModel.CURRENT_ELEMENT_TYPE)) { - refreshModel(); - } else if (pce.getPropertyName().equals(RankingUIModel.CURRENT_RANKING) - || pce.getPropertyName().equals(RankingUIModel.CURRENT_TRANSFORMER)) { - - final Ranking selectedRanking = model.getCurrentRanking(); - //CenterPanel - if (centerPanel != null) { - remove(centerPanel); - } - applyButton.setVisible(false); - autoApplyButton.setVisible(false); - enableAutoButton.setVisible(false); - splineButton.setVisible(false); - - if (selectedRanking != null) { - refreshTransformerPanel(selectedRanking); - if (rankingComboBox.getSelectedItem() != selectedRanking) { - refreshCombo(); - } - } - - revalidate(); - repaint(); - } else if (pce.getPropertyName().equals(RankingUIModel.RANKINGS)) { - refreshCombo(); - } - } - - private void refreshTransformerPanel(Ranking selectedRanking) { - Transformer transformer = model.getCurrentTransformer(); - boolean autoTransformer = model.isAutoTransformer(transformer); - TransformerUI transformerUI = controller.getUI(transformer); - if (!Double.isNaN(selectedRanking.getMinimumValue().doubleValue()) - && !Double.isNaN(selectedRanking.getMaximumValue().doubleValue()) - && selectedRanking.getMinimumValue() != selectedRanking.getMaximumValue()) { - applyButton.setEnabled(true); - } else { - applyButton.setEnabled(false); - } - centerPanel = transformerUI.getPanel(transformer, selectedRanking); - centerPanel.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEmptyBorder(5, 5, 0, 5), BorderFactory.createEtchedBorder())); - centerPanel.setOpaque(false); - add(centerPanel, BorderLayout.CENTER); - splineButton.setVisible(true); - if (autoTransformer) { - autoApplyButton.setVisible(true); - enableAutoButton.setSelected(true); - setAutoApplySelected(true); - autoApplyButton.setSelected(true); - } else { - applyButton.setVisible(true); - enableAutoButton.setSelected(false); - } - enableAutoButton.setVisible(true); - } - - private Ranking refreshCombo() { - //Ranking - Ranking selectedRanking = model.getCurrentRanking(); - rankingComboBox.removeItemListener(rankingItemListener); - final DefaultComboBoxModel comboBoxModel = new DefaultComboBoxModel(); - comboBoxModel.addElement(NO_SELECTION); - comboBoxModel.setSelectedItem(NO_SELECTION); - Ranking[] rankings = model.getRankings(); - Arrays.sort(rankings, new Comparator() { - - @Override - public int compare(Object o1, Object o2) { - return ((Ranking) o1).getDisplayName().compareTo(((Ranking) o2).getDisplayName()); - } - }); - for (Ranking r : rankings) { - comboBoxModel.addElement(r); - if (selectedRanking != null && selectedRanking.getName().equals(r.getName())) { - comboBoxModel.setSelectedItem(r); - } - } - selectedRanking = model.getCurrentRanking(); //May have been refresh by the model - rankingComboBox.addItemListener(rankingItemListener); - SwingUtilities.invokeLater(new Runnable() { - - @Override - public void run() { - rankingComboBox.setModel(comboBoxModel); - } - }); - return selectedRanking; - } - - private void initControls() { - applyButton.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - Transformer transformer = model.getCurrentTransformer(); - if (transformer != null) { - RankingController rankingController = Lookup.getDefault().lookup(RankingController.class); - if (interpolator != null) { - rankingController.setInterpolator(new org.gephi.ranking.api.Interpolator() { - - @Override - public float interpolate(float x) { - return interpolator.interpolate(x); - } - }); - } - rankingController.transform(model.getCurrentRanking(), transformer); - } - } - }); - - splineButton.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - if (splineEditor == null) { - splineEditor = new SplineEditor(NbBundle.getMessage(RankingChooser.class, "RankingChooser.splineEditor.title")); - } - splineEditor.setVisible(true); - interpolator = splineEditor.getCurrentInterpolator(); - RankingController rankingController = Lookup.getDefault().lookup(RankingController.class); - rankingController.setInterpolator(new org.gephi.ranking.api.Interpolator() { - - @Override - public float interpolate(float x) { - return interpolator.interpolate(x); - } - }); - } - }); - autoApplyButton.setVisible(false); - enableAutoButton.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent ae) { - if (enableAutoButton.isSelected()) { - autoApplyButton.setVisible(true); - setAutoApplySelected(false); - autoApplyButton.setSelected(false); - applyButton.setVisible(false); - } else { - autoApplyButton.setVisible(false); - applyButton.setVisible(true); - model.setAutoTransformer(model.getCurrentTransformer(), false); - } - - } - }); - autoApplyButton.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent ae) { - if (interpolator != null) { - RankingController rankingController = Lookup.getDefault().lookup(RankingController.class); - rankingController.setInterpolator(new org.gephi.ranking.api.Interpolator() { - - @Override - public float interpolate(float x) { - return interpolator.interpolate(x); - } - }); - } - model.setAutoTransformer(model.getCurrentTransformer(), autoApplyButton.isSelected()); - setAutoApplySelected(autoApplyButton.isSelected()); - } - }); - } - - @Override - public void setEnabled(boolean enabled) { - applyButton.setEnabled(enabled); - rankingComboBox.setEnabled(enabled); - splineButton.setEnabled(enabled); - autoApplyButton.setEnabled(enabled); - autoApplyToolbar.setEnabled(enabled); - } - - private void setAutoApplySelected(boolean selected) { - if (!selected) { - autoApplyButton.setIcon(ImageUtilities.loadImageIcon("org/gephi/desktop/ranking/resources/apply.gif", false)); - autoApplyButton.setToolTipText(NbBundle.getMessage(RankingChooser.class, "RankingChooser.autoApplyButton.toolTipText")); - } else { - autoApplyButton.setIcon(ImageUtilities.loadImageIcon("org/gephi/desktop/layout/resources/stop.png", false)); - autoApplyButton.setToolTipText(NbBundle.getMessage(RankingChooser.class, "RankingChooser.autoApplyButton.stop.toolTipText")); - } - } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // //GEN-BEGIN:initComponents - private void initComponents() { - java.awt.GridBagConstraints gridBagConstraints; - - chooserPanel = new javax.swing.JPanel(); - rankingComboBox = new javax.swing.JComboBox(); - controlPanel = new javax.swing.JPanel(); - applyButton = new javax.swing.JButton(); - splineButton = new org.jdesktop.swingx.JXHyperlink(); - autoApplyButton = new javax.swing.JToggleButton(); - autoApplyToolbar = new javax.swing.JToolBar(); - enableAutoButton = new javax.swing.JToggleButton(); - - setOpaque(false); - setLayout(new java.awt.BorderLayout()); - - chooserPanel.setOpaque(false); - chooserPanel.setLayout(new java.awt.GridBagLayout()); - - rankingComboBox.setToolTipText(org.openide.util.NbBundle.getMessage(RankingChooser.class, "RankingChooser.rankingComboBox.toolTipText")); // NOI18N - rankingComboBox.setPreferredSize(new java.awt.Dimension(56, 25)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 0; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); - chooserPanel.add(rankingComboBox, gridBagConstraints); - - add(chooserPanel, java.awt.BorderLayout.PAGE_START); - - controlPanel.setOpaque(false); - controlPanel.setLayout(new java.awt.GridBagLayout()); - - applyButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/ranking/resources/apply.gif"))); // NOI18N - applyButton.setText(org.openide.util.NbBundle.getMessage(RankingChooser.class, "RankingChooser.applyButton.text")); // NOI18N - applyButton.setToolTipText(org.openide.util.NbBundle.getMessage(RankingChooser.class, "RankingChooser.applyButton.toolTipText")); // NOI18N - applyButton.setMargin(new java.awt.Insets(0, 14, 0, 14)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 3; - gridBagConstraints.gridy = 0; - gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHEAST; - gridBagConstraints.insets = new java.awt.Insets(0, 18, 3, 5); - controlPanel.add(applyButton, gridBagConstraints); - - splineButton.setClickedColor(new java.awt.Color(0, 51, 255)); - splineButton.setText(org.openide.util.NbBundle.getMessage(RankingChooser.class, "RankingChooser.splineButton.text")); // NOI18N - splineButton.setToolTipText(org.openide.util.NbBundle.getMessage(RankingChooser.class, "RankingChooser.splineButton.toolTipText")); // NOI18N - splineButton.setFocusPainted(false); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 0; - gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 0); - controlPanel.add(splineButton, gridBagConstraints); - - autoApplyButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/ranking/resources/apply.gif"))); // NOI18N - autoApplyButton.setText(org.openide.util.NbBundle.getMessage(RankingChooser.class, "RankingChooser.autoApplyButton.text")); // NOI18N - autoApplyButton.setToolTipText(org.openide.util.NbBundle.getMessage(RankingChooser.class, "RankingChooser.autoApplyButton.toolTipText")); // NOI18N - autoApplyButton.setFocusable(false); - autoApplyButton.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT); - autoApplyButton.setMargin(new java.awt.Insets(0, 7, 0, 7)); - autoApplyButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 2; - gridBagConstraints.gridy = 0; - gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTHEAST; - gridBagConstraints.insets = new java.awt.Insets(0, 3, 3, 5); - controlPanel.add(autoApplyButton, gridBagConstraints); - - autoApplyToolbar.setFloatable(false); - autoApplyToolbar.setRollover(true); - autoApplyToolbar.setOpaque(false); - - enableAutoButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/ranking/resources/chain.png"))); // NOI18N - enableAutoButton.setToolTipText(org.openide.util.NbBundle.getMessage(RankingChooser.class, "RankingChooser.enableAutoButton.toolTipText")); // NOI18N - enableAutoButton.setFocusable(false); - enableAutoButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); - enableAutoButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - autoApplyToolbar.add(Box.createHorizontalGlue()); - autoApplyToolbar.add(enableAutoButton); - - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 0; - gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; - gridBagConstraints.weightx = 1.0; - controlPanel.add(autoApplyToolbar, gridBagConstraints); - - add(controlPanel, java.awt.BorderLayout.PAGE_END); - }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton applyButton; - private javax.swing.JToggleButton autoApplyButton; - private javax.swing.JToolBar autoApplyToolbar; - private javax.swing.JPanel chooserPanel; - private javax.swing.JPanel controlPanel; - private javax.swing.JToggleButton enableAutoButton; - private javax.swing.JComboBox rankingComboBox; - private org.jdesktop.swingx.JXHyperlink splineButton; - // End of variables declaration//GEN-END:variables - - private class RankingListCellRenderer extends DefaultListCellRenderer { - - @Override - public Component getListCellRendererComponent(JList jlist, Object o, int i, boolean bln, boolean bln1) { - if (o instanceof Ranking) { - return super.getListCellRendererComponent(jlist, ((Ranking) o).getDisplayName(), i, bln, bln1); - } else { - return super.getListCellRendererComponent(jlist, o, i, bln, bln1); - } - } - } -} diff --git a/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/RankingPersistenceProvider.java b/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/RankingPersistenceProvider.java deleted file mode 100644 index d3297099a3..0000000000 --- a/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/RankingPersistenceProvider.java +++ /dev/null @@ -1,199 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian, Mathieu Jacomy, Julian Bilcke -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.desktop.ranking; - -import java.beans.XMLDecoder; -import java.beans.XMLEncoder; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.Serializable; -import java.util.LinkedHashMap; -import java.util.Map.Entry; -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamReader; -import javax.xml.stream.XMLStreamWriter; -import javax.xml.stream.events.XMLEvent; -import org.gephi.project.api.Workspace; -import org.gephi.project.spi.WorkspacePersistenceProvider; -import org.gephi.ranking.api.Ranking; -import org.gephi.ranking.api.Transformer; -import org.openide.util.Lookup; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author mbastian - */ -@ServiceProvider(service = WorkspacePersistenceProvider.class) -public class RankingPersistenceProvider implements WorkspacePersistenceProvider { - - @Override - public void writeXML(XMLStreamWriter writer, Workspace workspace) { - RankingUIModel rankingUIModel = workspace.getLookup().lookup(RankingUIModel.class); - if (rankingUIModel != null) { - try { - writeXML(rankingUIModel, writer); - } catch (XMLStreamException ex) { - throw new RuntimeException(ex); - } - } - } - - @Override - public void readXML(XMLStreamReader reader, Workspace workspace) { - RankingUIController ruic = Lookup.getDefault().lookup(RankingUIController.class); - RankingUIModel ruiModel = ruic.getModel(workspace); - try { - readXML(ruiModel, reader); - } catch (XMLStreamException ex) { - throw new RuntimeException(ex); - } - } - - @Override - public String getIdentifier() { - return "rankinguimodel"; - } - private static String TRANSFORMERS = "transformers"; - private static String ELEMENT_TYPE = "element_type"; - private static String TRANSFORMER = "transformer"; - private static String TRANSFORMER_CURRENT = "currenttransformer"; - private static String RANKING_CURRENT = "ranking_current"; - private static String ELEMENT_TYPE_CURRENT = "current_element_type"; - - //Model - public void writeXML(RankingUIModel model, XMLStreamWriter writer) throws XMLStreamException { - //Model - writer.writeStartElement(getIdentifier()); - - //Element type - writer.writeAttribute(ELEMENT_TYPE_CURRENT, model.currentElementType); - - //Transformers - writer.writeStartElement(TRANSFORMERS); - for (Entry> entry : model.transformers.entrySet()) { - for (Entry t : entry.getValue().entrySet()) { - Transformer transformer = t.getValue(); - if (transformer instanceof Serializable) { - writer.writeStartElement(TRANSFORMER); - writer.writeAttribute("name", t.getKey()); - writer.writeAttribute(ELEMENT_TYPE, entry.getKey()); - if (model.currentTransformer.get(entry.getKey()).equals(transformer)) { - writer.writeAttribute(TRANSFORMER_CURRENT, "true"); - } - - //Serialize transformer - ByteArrayOutputStream stream = new ByteArrayOutputStream(); - XMLEncoder xmlEncoder = new XMLEncoder(stream); - xmlEncoder.writeObject(transformer); - xmlEncoder.close(); - - writer.writeAttribute("data", stream.toString()); - - writer.writeEndElement(); - } - } - } - writer.writeEndElement(); - - //Rankings - for (Entry r : model.currentRanking.entrySet()) { - writer.writeStartElement(RANKING_CURRENT); - writer.writeAttribute(ELEMENT_TYPE, r.getKey()); - writer.writeAttribute("name", r.getValue().getName()); - writer.writeEndElement(); - } - - writer.writeEndElement(); - } - - public void readXML(RankingUIModel model, XMLStreamReader reader) throws XMLStreamException { - if (reader.getAttributeValue(null, ELEMENT_TYPE_CURRENT) != null) { - //Element type - model.currentElementType = reader.getAttributeValue(null, ELEMENT_TYPE_CURRENT); - - //Transformers - boolean end = false; - while (reader.hasNext() && !end) { - Integer eventType = reader.next(); - if (eventType.equals(XMLEvent.START_ELEMENT)) { - String name = reader.getLocalName(); - if (TRANSFORMER.equalsIgnoreCase(name)) { - String elmtType = reader.getAttributeValue(null, ELEMENT_TYPE); - String transformerName = reader.getAttributeValue(null, "name"); - boolean current = false; - if (reader.getAttributeValue(null, TRANSFORMER_CURRENT) != null) { - current = true; - } - LinkedHashMap transMap = model.transformers.get(elmtType); - Transformer t = transMap.get(transformerName); - if (t != null && t instanceof Serializable) { - - //Unserialize transformer - String valueXML = reader.getAttributeValue(null, "data"); - XMLDecoder xmlDecoder = new XMLDecoder(new ByteArrayInputStream(valueXML.getBytes())); - t = (Transformer) xmlDecoder.readObject(); - transMap.put(transformerName, t); - - if (current) { - model.currentTransformer.put(elmtType, t); - } - } - } else if (RANKING_CURRENT.equalsIgnoreCase(name)) { - String elmtType = reader.getAttributeValue(null, ELEMENT_TYPE); - String rankingName = reader.getAttributeValue(null, "name"); - for (Ranking r : model.getRankings(elmtType)) { - if (r.getName().equals(rankingName)) { - model.currentRanking.put(elmtType, r); - break; - } - } - } - } else if (eventType.equals(XMLStreamReader.END_ELEMENT)) { - if (getIdentifier().equalsIgnoreCase(reader.getLocalName())) { - end = true; - } - } - } - } - } -} diff --git a/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/RankingToolbar.java b/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/RankingToolbar.java deleted file mode 100644 index 99f43e49ec..0000000000 --- a/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/RankingToolbar.java +++ /dev/null @@ -1,277 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.desktop.ranking; - -import java.awt.Component; -import org.gephi.ranking.spi.TransformerUI; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.util.ArrayList; -import java.util.Enumeration; -import java.util.List; -import java.util.MissingResourceException; -import javax.swing.AbstractButton; -import javax.swing.ButtonGroup; -import javax.swing.ButtonModel; -import javax.swing.Icon; -import javax.swing.JToggleButton; -import javax.swing.JToolBar; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.border.Border; -import org.gephi.ranking.api.Transformer; -import org.gephi.ui.components.DecoratedIcon; -import org.openide.util.ImageUtilities; -import org.openide.util.NbBundle; - -/** - * - * @author Mathieu Bastian - */ -public class RankingToolbar extends JToolBar implements PropertyChangeListener { - - private final RankingUIController controller; - private RankingUIModel model; - private final List buttonGroups = new ArrayList(); - - public RankingToolbar(RankingUIController controller) { - this.controller = controller; - initComponents(); - } - - public void refreshModel(RankingUIModel model) { - if (this.model != null) { - this.model.removePropertyChangeListener(this); - } - this.model = model; - if (model != null) { - model.addPropertyChangeListener(this); - } - - SwingUtilities.invokeLater(new Runnable() { - - @Override - public void run() { - initTransformersUI(); - - if (RankingToolbar.this.model != null) { - refreshTransformers(); - - //Select the right element group - refreshSelectedElmntGroup(RankingToolbar.this.model.getCurrentElementType()); - } else { - elementGroup.clearSelection(); - } - } - }); - } - - @Override - public void propertyChange(PropertyChangeEvent pce) { - if (pce.getPropertyName().equals(RankingUIModel.CURRENT_ELEMENT_TYPE)) { - refreshSelectedElmntGroup((String) pce.getNewValue()); - } - if (pce.getPropertyName().equals(RankingUIModel.CURRENT_TRANSFORMER) - || pce.getPropertyName().equals(RankingUIModel.CURRENT_ELEMENT_TYPE)) { - refreshTransformers(); - } - if (pce.getPropertyName().equalsIgnoreCase(RankingUIModel.START_AUTO_TRANSFORMER) - || pce.getPropertyName().equalsIgnoreCase(RankingUIModel.STOP_AUTO_TRANSFORMER)) { - refreshDecoratedIcons(); - } - } - - private void refreshTransformers() { - //Select the right transformer - int index = 0; - for (String elmtType : controller.getElementTypes()) { - ButtonGroup g = buttonGroups.get(index); - boolean active = model == null ? false : model.getCurrentElementType().equals(elmtType); - g.clearSelection(); - Transformer t = model.getCurrentTransformer(elmtType); - String selected = model == null ? "" : controller.getUI(t).getDisplayName(); - for (Enumeration btns = g.getElements(); btns.hasMoreElements();) { - AbstractButton btn = btns.nextElement(); - btn.setVisible(active); - if (btn.getName().equals(selected)) { - g.setSelected(btn.getModel(), true); - } - } - index++; - } - } - - private void refreshDecoratedIcons() { - SwingUtilities.invokeLater(new Runnable() { - - @Override - public void run() { - int index = 0; - for (String elmtType : controller.getElementTypes()) { - ButtonGroup g = buttonGroups.get(index++); - boolean active = model == null ? false : model.getCurrentElementType().equals(elmtType); - if (active) { - for (Enumeration btns = g.getElements(); btns.hasMoreElements();) { - btns.nextElement().repaint(); - } - } - } - } - }); - } - - private void refreshSelectedElmntGroup(String selected) { - ButtonModel buttonModel = null; - Enumeration en = elementGroup.getElements(); - for (String elmtType : controller.getElementTypes()) { - if (elmtType.equals(selected)) { - buttonModel = en.nextElement().getModel(); - break; - } - en.nextElement(); - } - elementGroup.setSelected(buttonModel, true); - } - - private void initTransformersUI() { - //Clear precent buttons - for (ButtonGroup bg : buttonGroups) { - for (Enumeration btns = bg.getElements(); btns.hasMoreElements();) { - AbstractButton btn = btns.nextElement(); - remove(btn); - } - } - buttonGroups.clear(); - if (model != null) { - //Add transformers buttons, separate them by element group - for (String elmtType : controller.getElementTypes()) { - ButtonGroup buttonGroup = new ButtonGroup(); - for (final Transformer t : model.getTransformers(elmtType)) { - TransformerUI u = controller.getUI(t); - if (u != null) { - //Build button - Icon icon = u.getIcon(); - DecoratedIcon decoratedIcon = getDecoratedIcon(icon, t); - JToggleButton btn = new JToggleButton(decoratedIcon); - btn.setToolTipText(u.getDisplayName()); - btn.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - model.setCurrentTransformer(t); - } - }); - btn.setName(u.getDisplayName()); - btn.setFocusPainted(false); - buttonGroup.add(btn); - add(btn); - } - } - buttonGroups.add(buttonGroup); - } - } - } - - private void initComponents() { - elementGroup = new javax.swing.ButtonGroup(); - for (final String elmtType : controller.getElementTypes()) { - - JToggleButton btn = new JToggleButton(); - btn.setFocusPainted(false); - String btnLabel = elmtType; - try { - btnLabel = NbBundle.getMessage(RankingToolbar.class, "RankingToolbar." + elmtType + ".label"); - } catch (MissingResourceException e) { - } - btn.setText(btnLabel); - btn.setEnabled(false); - btn.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - model.setCurrentElementType(elmtType); - } - }); - elementGroup.add(btn); - add(btn); - } - box = new javax.swing.JLabel(); - - setFloatable(false); - setRollover(true); - Border b = (Border) UIManager.get("Nb.Editor.Toolbar.border"); //NOI18N - setBorder(b); - - addSeparator(); - - box.setMaximumSize(new java.awt.Dimension(32767, 32767)); - add(box); - } - - @Override - public void setEnabled(final boolean enabled) { - SwingUtilities.invokeLater(new Runnable() { - - @Override - public void run() { - for (Component c : getComponents()) { - c.setEnabled(enabled); - } - } - }); - } - private javax.swing.JLabel box; - private javax.swing.ButtonGroup elementGroup; - - private DecoratedIcon getDecoratedIcon(Icon icon, final Transformer transformer) { - Icon decoration = ImageUtilities.image2Icon(ImageUtilities.loadImage("org/gephi/desktop/ranking/resources/chain.png", false)); - return new DecoratedIcon(icon, decoration, new DecoratedIcon.DecorationController() { - - @Override - public boolean isDecorated() { - return model != null && model.isAutoTransformer(transformer); - } - }); - } -} diff --git a/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/RankingTopComponent.form b/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/RankingTopComponent.form deleted file mode 100644 index 2c7b15ffc9..0000000000 --- a/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/RankingTopComponent.form +++ /dev/null @@ -1,106 +0,0 @@ - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/RankingTopComponent.java b/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/RankingTopComponent.java deleted file mode 100644 index ff5a13900a..0000000000 --- a/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/RankingTopComponent.java +++ /dev/null @@ -1,317 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.desktop.ranking; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import javax.swing.JToggleButton; -import javax.swing.UIManager; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import org.gephi.ui.utils.UIUtils; -import org.netbeans.api.settings.ConvertAsProperties; -import org.openide.awt.ActionID; -import org.openide.awt.ActionReference; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; -import org.openide.windows.TopComponent; - -@ConvertAsProperties(dtd = "-//org.gephi.desktop.ranking//Ranking//EN", -autostore = false) -@TopComponent.Description(preferredID = "RankingTopComponent", -iconBase = "org/gephi/desktop/ranking/resources/small.png", -persistenceType = TopComponent.PERSISTENCE_ALWAYS) -@TopComponent.Registration(mode = "rankingmode", openAtStartup = true, roles = {"overview"}) -@ActionID(category = "Window", id = "org.gephi.desktop.ranking.RankingTopComponent") -@ActionReference(path = "Menu/Window", position = 1100) -@TopComponent.OpenActionRegistration(displayName = "#CTL_RankingAction", -preferredID = "RankingTopComponent") -public class RankingTopComponent extends TopComponent implements Lookup.Provider, PropertyChangeListener { - - //UI - private transient JToggleButton listButton; - private transient JToggleButton localScaleButton; - //Model - private transient RankingUIController controller; - private transient RankingUIModel model; - private transient ChangeListener modelChangeListener; - - public RankingTopComponent() { - setName(NbBundle.getMessage(RankingTopComponent.class, "CTL_RankingTopComponent")); - - modelChangeListener = new ChangeListener() { - - @Override - public void stateChanged(ChangeEvent ce) { - refreshModel(ce == null ? null : (RankingUIModel) ce.getSource()); - } - }; - controller = Lookup.getDefault().lookup(RankingUIController.class); - controller.setModelChangeListener(modelChangeListener); - model = controller.getModel(); - - initComponents(); - initSouth(); - if (UIUtils.isAquaLookAndFeel()) { - mainPanel.setBackground(UIManager.getColor("NbExplorerView.background")); - } - - refreshModel(model); - } - - public void refreshModel(RankingUIModel model) { - if (this.model != null) { - this.model.removePropertyChangeListener(this); - } - this.model = model; - if (model != null) { - model.addPropertyChangeListener(this); - } - refreshEnable(); - - //South visible - /* - * if (barChartPanel.isVisible() != model.isBarChartVisible()) { - * barChartPanel.setVisible(model.isBarChartVisible()); revalidate(); - * repaint(); } - */ - ((ResultListPanel) listResultPanel).unselect(); - if (model != null) { - ((ResultListPanel) listResultPanel).select(model); - if (listResultPanel.isVisible() != model.isListVisible()) { - listResultPanel.setVisible(model.isListVisible()); - revalidate(); - repaint(); - } - - //barChartButton.setSelected(model.isBarChartVisible()); - listButton.setSelected(model.isListVisible()); - localScaleButton.setSelected(model.isLocalScale()); - } else { - listResultPanel.setVisible(false); - listButton.setSelected(false); - localScaleButton.setSelected(false); - } - - - //Chooser - ((RankingChooser) rankingChooser).refreshModel(model); - - //Toolbar - ((RankingToolbar) rankingToolbar).refreshModel(model); - } - - @Override - public void propertyChange(PropertyChangeEvent pce) { - if (pce.getPropertyName().equals(RankingUIModel.LIST_VISIBLE)) { - listButton.setSelected((Boolean) pce.getNewValue()); - if (listResultPanel.isVisible() != model.isListVisible()) { - listResultPanel.setVisible(model.isListVisible()); - revalidate(); - repaint(); - } - } else if (pce.getPropertyName().equals(RankingUIModel.BARCHART_VISIBLE)) { - //barChartButton.setSelected((Boolean)pce.getNewValue()); - } else if (pce.getPropertyName().equals(RankingUIModel.LOCAL_SCALE)) { - localScaleButton.setSelected((Boolean) pce.getNewValue()); - } else if (pce.getPropertyName().equals(RankingUIModel.LOCAL_SCALE_ENABLED)) { - localScaleButton.setEnabled((Boolean) pce.getNewValue()); - } - } - - private void initSouth() { - listButton = new JToggleButton(); - listButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/ranking/resources/list.png"))); // NOI18N - listButton.setToolTipText(NbBundle.getMessage(RankingTopComponent.class, "RankingTopComponent.listButton.text")); - listButton.setEnabled(false); - listButton.setFocusable(false); - southToolbar.add(listButton); - /* - * barChartButton = new JToggleButton(); barChartButton.setIcon(new - * javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/ranking/resources/barchart.png"))); - * // NOI18N NbBundle.getMessage(RankingTopComponent.class, - * "RankingTopComponent.barchartButton.text"); - * barChartButton.setEnabled(false); barChartButton.setFocusable(false); - * southToolbar.add(barChartButton); - */ - - localScaleButton = new JToggleButton(); - localScaleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/ranking/resources/funnel.png"))); // NOI18N - localScaleButton.setToolTipText(NbBundle.getMessage(RankingTopComponent.class, "RankingTopComponent.localScaleButton.text")); - localScaleButton.setEnabled(false); - localScaleButton.setFocusable(false); - southToolbar.add(localScaleButton); - - //Local scale enabled - localScaleButton.setEnabled(model != null ? model.isLocalScaleEnabled() : false); - - //BarChartPanel & ListPanel - listResultPanel.setVisible(false); - - listButton.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - model.setListVisible(listButton.isSelected()); - } - }); - - localScaleButton.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - model.setLocalScale(localScaleButton.isSelected()); - } - }); - - /* - * barChartButton.addActionListener(new ActionListener() { - * - * public void actionPerformed(ActionEvent e) { - * model.setBarChartVisible(barChartButton.isSelected()); } }); - */ - } - - private void refreshEnable() { - boolean modelEnabled = isModelEnabled(); - - //barChartButton.setEnabled(modelEnabled); - listButton.setEnabled(modelEnabled); - localScaleButton.setEnabled(modelEnabled && model.isLocalScaleEnabled()); - rankingChooser.setEnabled(modelEnabled); - rankingToolbar.setEnabled(modelEnabled); - listResultPanel.setEnabled(modelEnabled); - } - - private boolean isModelEnabled() { - return model != null; - } - - /** - * This method is called from within the constructor to initialize the form. - * WARNING: Do NOT modify this code. The content of this method is always - * regenerated by the Form Editor. - */ - // //GEN-BEGIN:initComponents - private void initComponents() { - java.awt.GridBagConstraints gridBagConstraints; - - mainPanel = new javax.swing.JPanel(); - rankingToolbar = new RankingToolbar(controller); - rankingChooser = new RankingChooser(controller); - listResultContainerPanel = new javax.swing.JPanel(); - listResultPanel = new ResultListPanel(); - southToolbar = new javax.swing.JToolBar(); - - setOpaque(true); - setLayout(new java.awt.BorderLayout()); - - mainPanel.setLayout(new java.awt.GridBagLayout()); - - rankingToolbar.setFloatable(false); - rankingToolbar.setRollover(true); - rankingToolbar.setOpaque(false); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 0; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; - gridBagConstraints.weightx = 1.0; - mainPanel.add(rankingToolbar, gridBagConstraints); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 1; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 1.0; - mainPanel.add(rankingChooser, gridBagConstraints); - - listResultContainerPanel.setOpaque(false); - listResultContainerPanel.setLayout(new java.awt.GridLayout(1, 0)); - - listResultPanel.setBorder(null); - listResultContainerPanel.add(listResultPanel); - - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 2; - gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.weighty = 1.0; - gridBagConstraints.insets = new java.awt.Insets(2, 5, 1, 5); - mainPanel.add(listResultContainerPanel, gridBagConstraints); - - southToolbar.setFloatable(false); - southToolbar.setRollover(true); - southToolbar.setOpaque(false); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 3; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.LAST_LINE_END; - gridBagConstraints.weightx = 1.0; - mainPanel.add(southToolbar, gridBagConstraints); - - add(mainPanel, java.awt.BorderLayout.CENTER); - }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JPanel listResultContainerPanel; - private javax.swing.JScrollPane listResultPanel; - private javax.swing.JPanel mainPanel; - private javax.swing.JPanel rankingChooser; - private javax.swing.JToolBar rankingToolbar; - private javax.swing.JToolBar southToolbar; - // End of variables declaration//GEN-END:variables - - void writeProperties(java.util.Properties p) { - // better to version settings since initial version as advocated at - // http://wiki.apidesign.org/wiki/PropertyFiles - p.setProperty("version", "1.0"); - // TODO store your settings - } - - void readProperties(java.util.Properties p) { - String version = p.getProperty("version"); - // TODO read your settings according to their version - } -} diff --git a/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/RankingUIController.java b/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/RankingUIController.java deleted file mode 100644 index 75c018d87d..0000000000 --- a/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/RankingUIController.java +++ /dev/null @@ -1,149 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.desktop.ranking; - -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import org.gephi.project.api.ProjectController; -import org.gephi.project.api.Workspace; -import org.gephi.project.api.WorkspaceListener; -import org.gephi.ranking.api.Ranking; -import org.gephi.ranking.api.RankingController; -import org.gephi.ranking.api.RankingModel; -import org.gephi.ranking.api.Transformer; -import org.gephi.ranking.spi.TransformerUI; -import org.openide.util.Lookup; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = RankingUIController.class) -public class RankingUIController { - - private final String[] elementTypes = new String[]{Ranking.NODE_ELEMENT, Ranking.EDGE_ELEMENT}; - private RankingUIModel model; - private ChangeListener modelChangeListener; - - public RankingUIController() { - final ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); - final RankingController rc = Lookup.getDefault().lookup(RankingController.class); - pc.addWorkspaceListener(new WorkspaceListener() { - @Override - public void initialize(Workspace workspace) { - } - - @Override - public void select(Workspace workspace) { - model = workspace.getLookup().lookup(RankingUIModel.class); - if (model == null) { - RankingModel rankingModel = rc.getModel(workspace); - model = new RankingUIModel(RankingUIController.this, rankingModel); - workspace.add(model); - } - if (modelChangeListener != null) { - modelChangeListener.stateChanged(new ChangeEvent(model)); - } - } - - @Override - public void unselect(Workspace workspace) { - if (model != null) { - } - } - - @Override - public void close(Workspace workspace) { - } - - @Override - public void disable() { - model = null; - if (modelChangeListener != null) { - modelChangeListener.stateChanged(null); - } - } - }); - - if (pc.getCurrentWorkspace() != null) { - model = pc.getCurrentWorkspace().getLookup().lookup(RankingUIModel.class); - if (model == null) { - RankingModel rankingModel = rc.getModel(pc.getCurrentWorkspace()); - model = new RankingUIModel(this, rankingModel); - pc.getCurrentWorkspace().add(model); - } - } - } - - public void setModelChangeListener(ChangeListener modelChangeListener) { - this.modelChangeListener = modelChangeListener; - } - - public RankingUIModel getModel() { - return model; - } - - public RankingUIModel getModel(Workspace workspace) { - final RankingController rc = Lookup.getDefault().lookup(RankingController.class); - RankingUIModel m = workspace.getLookup().lookup(RankingUIModel.class); - if (m == null) { - RankingModel rankingModel = rc.getModel(workspace); - m = new RankingUIModel(RankingUIController.this, rankingModel); - workspace.add(m); - } - return m; - } - - public TransformerUI getUI(Transformer transformer) { - for (TransformerUI ui : Lookup.getDefault().lookupAll(TransformerUI.class)) { - if (ui.isUIForTransformer(transformer)) { - return ui; - } - } - return null; - } - - public String[] getElementTypes() { - return elementTypes; - } -} diff --git a/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/RankingUIModel.java b/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/RankingUIModel.java deleted file mode 100644 index 4926c11569..0000000000 --- a/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/RankingUIModel.java +++ /dev/null @@ -1,312 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.desktop.ranking; - -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.GraphModel; -import org.gephi.graph.api.GraphView; -import org.gephi.ranking.api.Ranking; -import org.gephi.ranking.api.RankingController; -import org.gephi.ranking.api.RankingEvent; -import org.gephi.ranking.api.RankingListener; -import org.gephi.ranking.api.RankingModel; -import org.gephi.ranking.api.Transformer; -import org.gephi.ranking.spi.TransformerBuilder; -import org.openide.util.Lookup; - -/** - * - * @author Mathieu Bastian - */ -public class RankingUIModel implements RankingListener { - //Const - - public static final String CURRENT_TRANSFORMER = "currentTransformer"; - public static final String CURRENT_RANKING = "currentRanking"; - public static final String LIST_VISIBLE = "listVisible"; - public static final String BARCHART_VISIBLE = "barChartVisible"; - public static final String CURRENT_ELEMENT_TYPE = "currentElementType"; - public static final String RANKINGS = "rankings"; - public static final String APPLY_TRANSFORMER = "applyTransformer"; - public static final String START_AUTO_TRANSFORMER = "startAutoTransformer"; - public static final String STOP_AUTO_TRANSFORMER = "stopAutoTransformer"; - public static final String LOCAL_SCALE = "localScale"; - public static final String LOCAL_SCALE_ENABLED = "localScaleEnabled"; - //Current model - protected final Map> transformers; - protected String currentElementType; - protected final Map currentRanking; - protected final Map currentTransformer; - protected boolean barChartVisible; - protected boolean listVisible; - protected boolean localScaleEnabled; - //Architecture - private final List listeners; - private RankingUIController controller; - private final RankingModel model; - - public RankingUIModel(RankingUIController rankingUIController, RankingModel rankingModel) { - transformers = new HashMap>(); - listeners = new ArrayList(); - currentRanking = new HashMap(); - currentTransformer = new HashMap(); - model = rankingModel; - controller = rankingUIController; - currentElementType = Ranking.NODE_ELEMENT; - listVisible = false; - localScaleEnabled = !Lookup.getDefault().lookup(GraphController.class).getGraphModel(rankingModel.getWorkspace()).getVisibleView().isMainView(); - - initTransformers(); - - //Set default transformer - the first - for (String elementType : controller.getElementTypes()) { - currentTransformer.put(elementType, getTransformers(elementType)[0]); - } - - model.addRankingListener(this); - } - - @Override - public void rankingChanged(RankingEvent event) { - if (event.is(RankingEvent.EventType.REFRESH_RANKING)) { - firePropertyChangeEvent(RANKINGS, null, null); - } else if (event.is(RankingEvent.EventType.APPLY_TRANSFORMER)) { - firePropertyChangeEvent(APPLY_TRANSFORMER, null, null); - } else if (event.is(RankingEvent.EventType.REFRESH_VIEW)) { - RankingModel rankingModel = event.getSource(); - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(rankingModel.getWorkspace()); - boolean localScale = shouldLocalScaleEnabled(graphModel.getVisibleView()); - setLocalScaleEnabled(localScale); - } - } - - private boolean shouldLocalScaleEnabled(GraphView view) { - boolean filteredView = view != null && !view.isMainView(); - return filteredView; - } - - private void setLocalScaleEnabled(boolean enabled) { - if (enabled != localScaleEnabled) { - boolean oldValue = localScaleEnabled; - localScaleEnabled = enabled; - if (!enabled) { - setLocalScale(false); - } - firePropertyChangeEvent(LOCAL_SCALE_ENABLED, oldValue, enabled); - } - } - - public void setCurrentTransformer(Transformer transformer) { - if (currentTransformer.get(currentElementType) == transformer) { - return; - } - Transformer oldValue = currentTransformer.get(currentElementType); - currentTransformer.put(currentElementType, transformer); - if (model.getAutoTransformerRanking(transformer) != null) { - setCurrentRanking(model.getAutoTransformerRanking(transformer)); - } - firePropertyChangeEvent(CURRENT_TRANSFORMER, oldValue, transformer); - } - - public void setCurrentRanking(Ranking ranking) { - if ((currentRanking.get(currentElementType) == null && ranking == null) - || (currentRanking.get(currentElementType) != null && currentRanking.get(currentElementType) == ranking)) { - return; - } - Ranking oldValue = currentRanking.get(currentElementType); - currentRanking.put(currentElementType, ranking); - firePropertyChangeEvent(CURRENT_RANKING, oldValue, ranking); - - //If selected ranking is dynamic we might want to enable local scale - setLocalScaleEnabled(shouldLocalScaleEnabled(null)); - } - - public void setListVisible(boolean listVisible) { - if (this.listVisible == listVisible) { - return; - } - boolean oldValue = this.listVisible; - this.listVisible = listVisible; - firePropertyChangeEvent(LIST_VISIBLE, oldValue, listVisible); - } - - public void setBarChartVisible(boolean barChartVisible) { - if (this.barChartVisible == barChartVisible) { - return; - } - boolean oldValue = this.barChartVisible; - this.barChartVisible = barChartVisible; - firePropertyChangeEvent(BARCHART_VISIBLE, oldValue, barChartVisible); - } - - public void setLocalScale(boolean localScale) { - if (model.useLocalScale() == localScale) { - return; - } - boolean oldValue = model.useLocalScale(); - Lookup.getDefault().lookup(RankingController.class).setUseLocalScale(localScale); - firePropertyChangeEvent(LOCAL_SCALE, oldValue, localScale); - } - - public void setCurrentElementType(String elementType) { - if (this.currentElementType.equals(elementType)) { - return; - } - String oldValue = this.currentElementType; - this.currentElementType = elementType; - firePropertyChangeEvent(CURRENT_ELEMENT_TYPE, oldValue, elementType); - } - - public Ranking getCurrentRanking() { - return currentRanking.get(currentElementType); - } - - public Transformer getCurrentTransformer() { - return currentTransformer.get(currentElementType); - } - - public Transformer getCurrentTransformer(String elementType) { - return currentTransformer.get(elementType); - } - - public String getCurrentElementType() { - return currentElementType; - } - - public boolean isBarChartVisible() { - return barChartVisible; - } - - public boolean isLocalScale() { - return model.useLocalScale(); - } - - public boolean isLocalScaleEnabled() { - return localScaleEnabled; - } - - public boolean isListVisible() { - return listVisible; - } - - public Ranking[] getRankings(String elmType) { - Ranking[] rankings = model.getRankings(elmType); - Ranking current = getCurrentRanking(); - if (current != null) { - //Update selectedRanking with latest version - for (Ranking r : rankings) { - if (r.getName().equals(current.getName())) { - currentRanking.put(elmType, r); - break; - } - } - } - return rankings; - } - - public Ranking[] getRankings() { - return getRankings(currentElementType); - } - - public boolean isAutoTransformer(Transformer transformer) { - return model.getAutoTransformerRanking(transformer) != null; - } - - public void setAutoTransformer(Transformer transformer, boolean enable) { - RankingController rankingController = Lookup.getDefault().lookup(RankingController.class); - if (enable) { - rankingController.startAutoTransform(getCurrentRanking(), transformer); - firePropertyChangeEvent(START_AUTO_TRANSFORMER, null, transformer); - } else { - rankingController.stopAutoTransform(transformer); - firePropertyChangeEvent(STOP_AUTO_TRANSFORMER, null, transformer); - } - } - - private void initTransformers() { - for (String elementType : controller.getElementTypes()) { - LinkedHashMap elmtTransformers = new LinkedHashMap(); - transformers.put(elementType, elmtTransformers); - } - - for (TransformerBuilder builder : Lookup.getDefault().lookupAll(TransformerBuilder.class)) { - for (String elementType : controller.getElementTypes()) { - Map elmtTransformers = transformers.get(elementType); - if (builder.isTransformerForElement(elementType)) { - elmtTransformers.put(builder.getName(), builder.buildTransformer()); - } - } - } - } - - public Transformer[] getTransformers(String elementType) { - return transformers.get(elementType).values().toArray(new Transformer[0]); - } - - public Transformer[] getTransformers() { - return getTransformers(currentElementType); - } - - public void addPropertyChangeListener(PropertyChangeListener listener) { - if (!listeners.contains(listener)) { - listeners.add(listener); - } - } - - public void removePropertyChangeListener(PropertyChangeListener listener) { - listeners.remove(listener); - } - - private void firePropertyChangeEvent(String propertyName, Object beforeValue, Object afterValue) { - PropertyChangeEvent event = new PropertyChangeEvent(this, propertyName, beforeValue, afterValue); - for (PropertyChangeListener listener : listeners) { - listener.propertyChange(event); - } - } -} diff --git a/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/ResultListPanel.java b/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/ResultListPanel.java deleted file mode 100644 index b1c2175cb6..0000000000 --- a/modules/DesktopRanking/src/main/java/org/gephi/desktop/ranking/ResultListPanel.java +++ /dev/null @@ -1,474 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.desktop.ranking; - -import java.awt.Color; -import java.awt.Component; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.image.BufferedImage; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.io.File; -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; -import javax.imageio.ImageIO; -import javax.swing.JFileChooser; -import javax.swing.JLabel; -import javax.swing.JMenuItem; -import javax.swing.JOptionPane; -import javax.swing.JPopupMenu; -import javax.swing.JScrollPane; -import javax.swing.JTable; -import javax.swing.RowSorter; -import javax.swing.SortOrder; -import javax.swing.SwingConstants; -import javax.swing.SwingUtilities; -import javax.swing.event.TableModelListener; -import javax.swing.table.DefaultTableCellRenderer; -import javax.swing.table.TableModel; -import javax.swing.table.TableRowSorter; -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.Graph; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.Node; -import org.gephi.ranking.api.Ranking; -import org.gephi.ranking.api.Transformer; -import org.gephi.ranking.plugin.transformer.AbstractColorTransformer; -import org.gephi.ranking.plugin.transformer.AbstractSizeTransformer; -import org.gephi.ui.utils.DialogFileFilter; -import org.gephi.ui.utils.UIUtils; -import org.jdesktop.swingx.JXTable; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; -import org.openide.util.NbPreferences; -import org.openide.windows.WindowManager; - -/** - * - * @author Mathieu Bastian - */ -public class ResultListPanel extends JScrollPane { - - //Const - private final String LAST_PATH = "ResultListPanel_TableScreenshot_Last_Path"; - private final String LAST_PATH_DEFAULT = "ResultListPanel_TableScreenshot_Last_Path_Default"; - //Variable - private JXTable table; - private JPopupMenu popupMenu; - private RankingUIModel model; - private PropertyChangeListener rankingUiModelListener; - - public ResultListPanel() { - initTable(); - initTablePopup(); - } - - public void select(RankingUIModel model) { - this.model = model; - - refreshTable(); - - rankingUiModelListener = new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent pce) { - if (pce.getPropertyName().equals(RankingUIModel.APPLY_TRANSFORMER)) { - refreshTable(); - } - } - }; - model.addPropertyChangeListener(rankingUiModelListener); - } - - public void unselect() { - if (model != null) { - if (rankingUiModelListener != null) { - model.removePropertyChangeListener(rankingUiModelListener); - } - } - rankingUiModelListener = null; - model = null; - } - - private void refreshTable() { - Ranking ranking = model.getCurrentRanking(); - Transformer transformer = model.getCurrentTransformer(); - - if (model.isListVisible()) { - fetchTable(ranking, transformer); - } else { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - table.setModel(new ResultListTableModel(new RankCell[0])); - } - }); - } - } - - private void initTable() { - table = new JXTable(); - table.putClientProperty(JXTable.USE_DTCR_COLORMEMORY_HACK, Boolean.FALSE); //Disable strange hack that overwrite JLabel's setBackground() by a Highlighter color - table.setColumnControlVisible(false); - table.setEditable(false); - table.setSortable(false); - table.setRolloverEnabled(false); - table.setShowHorizontalLines(false); - table.setShowVerticalLines(false); - table.setRowSelectionAllowed(false); - table.setColumnSelectionAllowed(false); - table.setCellSelectionEnabled(false); - //table.setHighlighters(HighlighterFactory.createAlternateStriping()); - - table.getTableHeader().setReorderingAllowed(false); - table.getTableHeader().setResizingAllowed(true); - - setViewportView(table); - } - - private void initTablePopup() { - popupMenu = new JPopupMenu(); - JMenuItem screenshotItem = new JMenuItem(NbBundle.getMessage(ResultListPanel.class, "ResultListPanel.action.tablescreenshot")); - screenshotItem.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - try { - BufferedImage image = UIUtils.createComponentScreenshot(table); - writeImage(image); - } catch (Exception ex) { - String msg = NbBundle.getMessage(ResultListPanel.class, "ResultListPanel.tablescreenshot.error", new Object[]{ex.getClass().getSimpleName(), ex.getLocalizedMessage(), ex.getStackTrace()[0].getClassName(), ex.getStackTrace()[0].getLineNumber()}); - JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(), msg, NbBundle.getMessage(ResultListPanel.class, "ResultListPanel.tablescreenshot.error.title"), JOptionPane.ERROR_MESSAGE); - } - } - }); - popupMenu.add(screenshotItem); - - table.addMouseListener(new MouseAdapter() { - @Override - public void mousePressed(MouseEvent e) { - showPopup(e); - } - - @Override - public void mouseReleased(MouseEvent e) { - showPopup(e); - } - - private void showPopup(MouseEvent e) { - if (e.isPopupTrigger()) { - popupMenu.show(e.getComponent(), e.getX(), e.getY()); - } - } - }); - } - - private void writeImage(BufferedImage image) throws Exception { - //Get last directory - String lastPathDefault = NbPreferences.forModule(ResultListPanel.class).get(LAST_PATH_DEFAULT, null); - String lastPath = NbPreferences.forModule(ResultListPanel.class).get(LAST_PATH, lastPathDefault); - final JFileChooser chooser = new JFileChooser(lastPath); - chooser.setAcceptAllFileFilterUsed(false); - chooser.setDialogTitle(NbBundle.getMessage(ResultListPanel.class, "ResultListPanel.tablescreenshot.filechooser.title")); - DialogFileFilter dialogFileFilter = new DialogFileFilter(NbBundle.getMessage(ResultListPanel.class, "ResultListPanel.tablescreenshot.filechooser.pngDescription")); - dialogFileFilter.addExtension("png"); - chooser.addChoosableFileFilter(dialogFileFilter); - File selectedFile = new File(chooser.getCurrentDirectory(), "rank_table.png"); - chooser.setSelectedFile(selectedFile); - int returnFile = chooser.showSaveDialog(null); - if (returnFile != JFileChooser.APPROVE_OPTION) { - return; - } - selectedFile = chooser.getSelectedFile(); - - if (!selectedFile.getPath().endsWith(".png")) { - selectedFile = new File(selectedFile.getPath() + ".png"); - } - - //Save last path - String defaultDirectory = selectedFile.getParentFile().getAbsolutePath(); - NbPreferences.forModule(ResultListPanel.class).put(LAST_PATH, defaultDirectory); - - - String format = "png"; - if (!ImageIO.write(image, format, selectedFile)) { - throw new IOException("Unsupported file format"); - } - } - - private void fetchTable(Ranking ranking, Transformer transformer) { - final List cells = new ArrayList(); - - if (ranking.getElementType().equals(Ranking.NODE_ELEMENT)) { - GraphController graphController = Lookup.getDefault().lookup(GraphController.class); - Graph graph = graphController.getGraphModel().getGraphVisible(); - for (Node n : graph.getNodes()) { - Number rank = ranking.getValue(n); - if (transformer instanceof AbstractColorTransformer) { - Color c = n.getColor(); - RankCellColor rankCellColor = new RankCellColor(c, rank, n.getLabel()); - cells.add(rankCellColor); - } else if (transformer instanceof AbstractSizeTransformer) { - float size = n.size(); - RankCellSize rankCellSize = new RankCellSize(size, rank, n.getLabel()); - cells.add(rankCellSize); - } - } - - } else if (ranking.getElementType().equals(Ranking.EDGE_ELEMENT)) { - GraphController graphController = Lookup.getDefault().lookup(GraphController.class); - Graph graph = graphController.getGraphModel().getGraphVisible(); - for (Edge e : graph.getEdges()) { - Number rank = ranking.getValue(e); - if (transformer instanceof AbstractColorTransformer) { - Color c = e.getColor(); - RankCellColor rankCellColor = new RankCellColor(c, rank, e.getLabel()); - cells.add(rankCellColor); - } else if (transformer instanceof AbstractSizeTransformer) { - float size = (float) e.getWeight(); - RankCellSize rankCellSize = new RankCellSize(size, rank, e.getLabel()); - cells.add(rankCellSize); - } - } - } - - Collections.sort(cells); - - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - ResultListTableModel m = new ResultListTableModel(cells.toArray(new RankCell[0])); - table.setDefaultRenderer(RankCell.class, new RankCellRenderer()); - TableRowSorter tableRowSorter = new TableRowSorter(m); - tableRowSorter.setComparator(0, new Comparator() { - @Override - public int compare(RankCell t, RankCell t1) { - return t.compareTo(t1); - } - }); - List sortKeys = new ArrayList(); - sortKeys.add(new RowSorter.SortKey(0, SortOrder.ASCENDING)); - tableRowSorter.setSortKeys(sortKeys); - - table.setRowSorter(tableRowSorter); - table.setModel(m); - } - }); - } - - private class ResultListTableModel implements TableModel { - - private RankCell[] ranks; - - public ResultListTableModel(RankCell[] ranks) { - this.ranks = ranks; - } - - @Override - public int getRowCount() { - return ranks.length; - } - - @Override - public int getColumnCount() { - return 2; - } - - @Override - public String getColumnName(int columnIndex) { - if (columnIndex == 0) { - return NbBundle.getMessage(ResultListPanel.class, "ResultListPanel.column.rank"); - } else { - return NbBundle.getMessage(ResultListPanel.class, "ResultListPanel.column.label"); - } - } - - @Override - public Class getColumnClass(int columnIndex) { - if (columnIndex == 0) { - return RankCell.class; - } else { - return String.class; - } - } - - @Override - public boolean isCellEditable(int rowIndex, int columnIndex) { - return false; - } - - @Override - public Object getValueAt(int rowIndex, int columnIndex) { - if (columnIndex == 0) { - return ranks[rowIndex]; - } else { - return ranks[rowIndex].getLabel(); - } - } - - @Override - public void setValueAt(Object aValue, int rowIndex, int columnIndex) { - if (columnIndex == 0) { - ranks[rowIndex] = (RankCell) aValue; - } else { - ranks[rowIndex].setLabel((String) aValue); - } - } - - @Override - public void addTableModelListener(TableModelListener l) { - } - - @Override - public void removeTableModelListener(TableModelListener l) { - } - } - - private static interface RankCell extends Comparable { - - public void render(JLabel label); - - public String getLabel(); - - public void setLabel(String label); - } - - private static class RankCellColor implements RankCell { - - private final Color color; - private final Number rank; - private String label; - - public RankCellColor(Color color, Number rank, String label) { - this.color = color; - this.rank = rank; - this.label = label; - } - - @Override - public void render(JLabel label) { - label.setBackground(color); - label.setForeground(UIUtils.getForegroundColorForBackground(color)); - label.setText(rank.toString()); - } - - @Override - public int compareTo(RankCell t) { - double d2 = rank.doubleValue(); - double d1 = ((RankCellColor) t).rank.doubleValue(); - if (d1 < d2) { - return -1; - } else if (d1 > d2) { - return 1; - } - return 0; - } - - @Override - public String getLabel() { - return label; - } - - @Override - public void setLabel(String label) { - this.label = label; - } - } - - private static class RankCellSize implements RankCell { - - private final Float size; - private final Number rank; - private String label; - - public RankCellSize(Float size, Number rank, String label) { - this.size = size; - this.rank = rank; - this.label = label; - } - - @Override - public void render(JLabel label) { - label.setText(rank.toString()); - } - - @Override - public int compareTo(RankCell t) { - double d2 = rank.doubleValue(); - double d1 = ((RankCellSize) t).rank.doubleValue(); - if (d1 < d2) { - return -1; - } else if (d1 > d2) { - return 1; - } - return 0; - } - - @Override - public String getLabel() { - return label; - } - - @Override - public void setLabel(String label) { - this.label = label; - } - } - - private static class RankCellRenderer extends DefaultTableCellRenderer { - - public RankCellRenderer() { - setHorizontalAlignment(SwingConstants.RIGHT); - } - - @Override - public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) { - RankCell rankCell = (RankCell) value; - rankCell.render(this); - return this; - } - } -} diff --git a/modules/DesktopRanking/src/main/nbm/manifest.mf b/modules/DesktopRanking/src/main/nbm/manifest.mf deleted file mode 100644 index a2e764c4fb..0000000000 --- a/modules/DesktopRanking/src/main/nbm/manifest.mf +++ /dev/null @@ -1,4 +0,0 @@ -Manifest-Version: 1.0 -AutoUpdate-Essential-Module: true -OpenIDE-Module-Localizing-Bundle: org/gephi/desktop/ranking/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file diff --git a/modules/DesktopRanking/src/main/nbm/module.xml b/modules/DesktopRanking/src/main/nbm/module.xml deleted file mode 100644 index 171574ab3d..0000000000 --- a/modules/DesktopRanking/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/Bundle.properties b/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/Bundle.properties deleted file mode 100644 index 15e04bd0de..0000000000 --- a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/Bundle.properties +++ /dev/null @@ -1,35 +0,0 @@ -Actions/Window/org-gephi-desktop-ranking-RankingAction.instance=Ranking -CTL_RankingAction=Ranking -CTL_RankingTopComponent=Ranking -!HINT_RankingTopComponent= -OpenIDE-Module-Display-Category=Gephi UI -OpenIDE-Module-Name=Desktop Ranking -OpenIDE-Module-Short-Description=Integrated ranking UI - - -RankingTopComponent.listButton.text = Result list -RankingTopComponent.barchartButton.text = Value chart -RankingTopComponent.localScaleButton.text = Use local scale. The bounds are calculated only on the visible graph instead of the complete graph. -RankingChooser.rankingComboBox.toolTipText=Choose rank -RankingChooser.applyButton.toolTipText=Apply the current transformation to the graph -RankingChooser.applyButton.text=Apply -RankingChooser.splineButton.toolTipText=Configure rank interpolation -RankingChooser.splineButton.text=Spline... - -RankingToolbar.nodes.label = Nodes -RankingToolbar.edges.label = Edges - -ResultListPanel.action.tablescreenshot = Take screenshot -ResultListPanel.tablescreenshot.filechooser.title = Save As... -ResultListPanel.tablescreenshot.filechooser.pngDescription = PNG -ResultListPanel.tablescreenshot.error = An error occured while taking screenshot.\n\nException: {0}: {1}\nFile: {2}\nLine: {3} -ResultListPanel.tablescreenshot.error.title = Error -ResultListPanel.column.rank = Rank -ResultListPanel.column.label = Label - -RankingChooser.choose.text=---Choose a rank parameter -RankingChooser.splineEditor.title=Interpolate -RankingChooser.autoApplyButton.text=Auto Apply -RankingChooser.autoApplyButton.toolTipText=Apply continuously even when the values changes -RankingChooser.autoApplyButton.stop.toolTipText=Stop applying this transformation -RankingChooser.enableAutoButton.toolTipText=Enable auto transformation - applied continuously diff --git a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/Bundle_cs.properties b/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/Bundle_cs.properties deleted file mode 100644 index e96902afa0..0000000000 --- a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/Bundle_cs.properties +++ /dev/null @@ -1,61 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-06 18\:50+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -Actions/Window/org-gephi-desktop-ranking-RankingAction.instance=Hodnocen\u00ed - -CTL_RankingAction=Hodnocen\u00ed - -CTL_RankingTopComponent=Hodnocen\u00ed - -OpenIDE-Module-Short-Description=Integrovan\u00e9 rozhran\u00ed hodnocen\u00ed - -RankingTopComponent.listButton.text=Seznam v\u00fdsledk\u016f - -RankingTopComponent.barchartButton.text=Tabulka hodnot - -RankingTopComponent.localScaleButton.text=Pou\u017e\u00edt m\u00edstn\u00ed m\u011b\u0159\u00edtko. Hranice budou vypo\u010d\u00edt\u00e1ny pouze ve viditeln\u00e9m grafu m\u00edsto \u00fapln\u00e9ho. - -RankingChooser.rankingComboBox.toolTipText=Zvolit hodnost - -RankingChooser.applyButton.toolTipText=Pou\u017e\u00edt sou\u010dasnou transformaci na graf - -RankingChooser.applyButton.text=Pou\u017e\u00edt - -RankingChooser.splineButton.toolTipText=Nastavit interpolaci hodnocen\u00ed - -RankingChooser.splineButton.text=K\u0159ivka... - -RankingToolbar.nodes.label=Uzle - -RankingToolbar.edges.label=Hrany - -ResultListPanel.action.tablescreenshot=Po\u0159\u00eddit sn\u00edmek - -ResultListPanel.tablescreenshot.filechooser.title=Ulo\u017eit jako... - -ResultListPanel.tablescreenshot.filechooser.pngDescription=PNG - -ResultListPanel.tablescreenshot.error=P\u0159i po\u0159izov\u00e1n\u00ed sm\u00ednku do\u0161lo k chyb\u011b.\n\nV\u00fdjimka\: {0}\: {1}\nSoubor\: {2}\n\u0158\u00e1dek\: {3} - -ResultListPanel.tablescreenshot.error.title=Chyba - -ResultListPanel.column.rank=Hodnost - -ResultListPanel.column.label=\u0160t\u00edtek - -RankingChooser.choose.text=---Zvolit parametr hodnocen\u00ed - -RankingChooser.splineEditor.title=Interpolovat - -RankingChooser.autoApplyButton.text=Automaticky pou\u017e\u00edt - -RankingChooser.autoApplyButton.toolTipText=Pou\u017e\u00edvat nep\u0159etr\u017eit\u011b, i kdy\u017e se hodnoty zm\u011bn\u00ed - -RankingChooser.autoApplyButton.stop.toolTipText=P\u0159estat pou\u017e\u00edvat tuto transformaci - -RankingChooser.enableAutoButton.toolTipText=Povolit auto transformaci - pou\u017eiv\u00e1na nep\u0159etr\u017eit\u011b diff --git a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/Bundle_es.properties b/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/Bundle_es.properties deleted file mode 100644 index a049abd8e2..0000000000 --- a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/Bundle_es.properties +++ /dev/null @@ -1,63 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011, 2012. -# FIRST AUTHOR , 2010. -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-31 12\:42+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -Actions/Window/org-gephi-desktop-ranking-RankingAction.instance=Clasificaci\u00f3n - -CTL_RankingAction=Clasificaci\u00f3n - -CTL_RankingTopComponent=Clasificaci\u00f3n - -OpenIDE-Module-Short-Description=Integrar la interfaz de usuario del m\u00f3dulo Ranking - -RankingTopComponent.listButton.text=Lista de resultados - -RankingTopComponent.barchartButton.text=Gr\u00e1fica de valores - -RankingTopComponent.localScaleButton.text=Utilizar escala local. Los l\u00edmites son calculados s\u00f3lo para el grafo visible en lugar del grafo completo. - -RankingChooser.rankingComboBox.toolTipText=Elige clasificaci\u00f3n - -RankingChooser.applyButton.toolTipText=Aplicar la transformaci\u00f3n actual al grafo - -RankingChooser.applyButton.text=Aplicar - -RankingChooser.splineButton.toolTipText=Configurar interpolaci\u00f3n de la clasificaci\u00f3n - -RankingChooser.splineButton.text=Spline... - -RankingToolbar.nodes.label=Nodos - -RankingToolbar.edges.label=Aristas - -ResultListPanel.action.tablescreenshot=Captura de pantalla - -ResultListPanel.tablescreenshot.filechooser.title=Guardar como... - -ResultListPanel.tablescreenshot.filechooser.pngDescription=PNG - -ResultListPanel.tablescreenshot.error=Un error ha ocurrido mientras se capturaba la pantalla.\n\nExcepci\u00f3n\: {0}\: {1}\nArchivo\: {2}\nL\u00ednea\: {3} - -ResultListPanel.tablescreenshot.error.title=Error - -ResultListPanel.column.rank=Clasificaci\u00f3n - -ResultListPanel.column.label=Etiqueta - -RankingChooser.choose.text=---Elige un par\u00e1metro de clasificaci\u00f3n - -RankingChooser.splineEditor.title=Interpolar - -RankingChooser.autoApplyButton.text=Auto aplicar - -RankingChooser.autoApplyButton.toolTipText=Aplicar continuamente incluso cuando los valores cambian - -RankingChooser.autoApplyButton.stop.toolTipText=Para de aplicar esta transformaci\u00f3n - -RankingChooser.enableAutoButton.toolTipText=Activar auto transformaci\u00f3n - aplicada continuamente diff --git a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/Bundle_fr.properties b/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/Bundle_fr.properties deleted file mode 100644 index 5bff201091..0000000000 --- a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/Bundle_fr.properties +++ /dev/null @@ -1,62 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-31 12\:58+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -Actions/Window/org-gephi-desktop-ranking-RankingAction.instance=Classement - -CTL_RankingAction=Classement - -CTL_RankingTopComponent=Classement - -OpenIDE-Module-Short-Description=Int\u00e8gre l'interface utilisateur du module Ranking - -RankingTopComponent.listButton.text=Liste de r\u00e9sultats - -RankingTopComponent.barchartButton.text=Graphique des valeurs - -RankingTopComponent.localScaleButton.text=Utiliser une \u00e9chelle locale. Les limites min et max sont calcul\u00e9es seulement sur le graphe visible au lieu du graphe entier. - -RankingChooser.rankingComboBox.toolTipText=Choisir un rang - -RankingChooser.applyButton.toolTipText=Appliquer la transformation actuelle au graphe. - -RankingChooser.applyButton.text=Appliquer - -RankingChooser.splineButton.toolTipText=Configurer l'interpolation des rangs - -RankingChooser.splineButton.text=Spline... - -RankingToolbar.nodes.label=Noeuds - -RankingToolbar.edges.label=Liens - -ResultListPanel.action.tablescreenshot=Capture d'\u00e9cran - -ResultListPanel.tablescreenshot.filechooser.title=Enregistrer sous... - -ResultListPanel.tablescreenshot.filechooser.pngDescription=PNG - -ResultListPanel.tablescreenshot.error=Une erreur est survenue lors de la prise de la capture d'\u00e9cran.\n\nException\: {0}\: {1}\nFichier\: {2}\nLigne\: {3} - -ResultListPanel.tablescreenshot.error.title=Erreur - -ResultListPanel.column.rank=Rang - -ResultListPanel.column.label=Label - -RankingChooser.choose.text=Choisir un param\u00e8tre de classement - -RankingChooser.splineEditor.title=Interpoler - -RankingChooser.autoApplyButton.text=Ex\u00e9cution auto - -RankingChooser.autoApplyButton.toolTipText=Ex\u00e9cute en continu m\u00eame si les valeurs changent - -RankingChooser.autoApplyButton.stop.toolTipText=Arr\u00eate d'ex\u00e9cuter cette transformation - -RankingChooser.enableAutoButton.toolTipText=Active la transformation automatique - en continu diff --git a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/Bundle_ja.properties b/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/Bundle_ja.properties deleted file mode 100644 index a41a5ff598..0000000000 --- a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/Bundle_ja.properties +++ /dev/null @@ -1,61 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-15 10\:56+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -Actions/Window/org-gephi-desktop-ranking-RankingAction.instance=\u30e9\u30f3\u30ad\u30f3\u30b0 - -CTL_RankingAction=\u30e9\u30f3\u30ad\u30f3\u30b0 - -CTL_RankingTopComponent=\u30e9\u30f3\u30ad\u30f3\u30b0 - -OpenIDE-Module-Short-Description=\u7d71\u5408\u30e9\u30f3\u30ad\u30f3\u30b0UI - -RankingTopComponent.listButton.text=\u7d50\u679c\u30ea\u30b9\u30c8 - -RankingTopComponent.barchartButton.text=\u5024\u30c1\u30e3\u30fc\u30c8 - -RankingTopComponent.localScaleButton.text=\u30ed\u30fc\u30ab\u30eb\u30b9\u30b1\u30fc\u30eb\u3092\u4f7f\u3063\u3066\u4e0b\u3055\u3044\u3002\u7bc4\u56f2\u306f\u5b8c\u5168\u30b0\u30e9\u30d5\u306e\u4ee3\u308f\u308a\u306b\u53ef\u8996\u30b0\u30e9\u30d5\u306e\u307f\u306b\u57fa\u3065\u3044\u3066\u8a08\u7b97\u3055\u308c\u307e\u3059\u3002 - -RankingChooser.rankingComboBox.toolTipText=\u30e9\u30f3\u30af\u3092\u9078\u629e - -RankingChooser.applyButton.toolTipText=\u73fe\u5728\u306e\u5909\u5f62\u3092\u30b0\u30e9\u30d5\u306b\u9069\u7528 - -RankingChooser.applyButton.text=\u9069\u7528 - -RankingChooser.splineButton.toolTipText=\u30e9\u30f3\u30af\u306e\u5185\u633f\u306e\u8a2d\u5b9a - -RankingChooser.splineButton.text=\u30b9\u30d7\u30e9\u30a4\u30f3... - -RankingToolbar.nodes.label=\u30ce\u30fc\u30c9 - -RankingToolbar.edges.label=\u8fba - -ResultListPanel.action.tablescreenshot=\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u3092\u64ae\u308b - -ResultListPanel.tablescreenshot.filechooser.title=\u540d\u524d\u3092\u4ed8\u3051\u3066\u4fdd\u5b58... - -ResultListPanel.tablescreenshot.filechooser.pngDescription=PNG - -ResultListPanel.tablescreenshot.error=\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u53d6\u5f97\u4e2d\u306b\u30a8\u30e9\u30fc\u767a\u751f\n\n\u4f8b\u5916\: {0}\: {1}\n\u30d5\u30a1\u30a4\u30eb\: {2}\n\u884c\: {3} - -ResultListPanel.tablescreenshot.error.title=\u30a8\u30e9\u30fc - -ResultListPanel.column.rank=\u30e9\u30f3\u30af - -ResultListPanel.column.label=\u30e9\u30d9\u30eb - -RankingChooser.choose.text=---\u30e9\u30f3\u30af\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u9078\u629e - -RankingChooser.splineEditor.title=\u5185\u633f - -RankingChooser.autoApplyButton.text=\u81ea\u52d5\u9069\u7528 - -RankingChooser.autoApplyButton.toolTipText=\u5024\u306e\u5909\u66f4\u304c\u3042\u3063\u305f\u3068\u304d\u306f\u7d99\u7d9a\u3057\u3066\u9069\u7528 - -RankingChooser.autoApplyButton.stop.toolTipText=\u3053\u306e\u5909\u5f62\u306e\u9069\u7528\u306e\u4e2d\u6b62 - -RankingChooser.enableAutoButton.toolTipText=\u81ea\u52d5\u5909\u5f62\u53ef\u80fd - \u7d99\u7d9a\u3057\u3066\u9069\u7528 diff --git a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/Bundle_pt_BR.properties b/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/Bundle_pt_BR.properties deleted file mode 100644 index 5e03c3e301..0000000000 --- a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/Bundle_pt_BR.properties +++ /dev/null @@ -1,62 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -# C\u00e9lio Faria Jr. , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-12 12\:33+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -Actions/Window/org-gephi-desktop-ranking-RankingAction.instance=Classifica\u00e7\u00e3o - -CTL_RankingAction=Classifica\u00e7\u00e3o - -CTL_RankingTopComponent=Classifica\u00e7\u00e3o - -OpenIDE-Module-Short-Description=Interface de usu\u00e1rio de classifica\u00e7\u00e3o integrada - -RankingTopComponent.listButton.text=Lista de resultados - -RankingTopComponent.barchartButton.text=Gr\u00e1fico de valores - -RankingTopComponent.localScaleButton.text=Usar escalonamento local. Os limites n\u00e3o ser\u00e3o calculados para o grafo completo, apenas para o grafo vis\u00edvel. - -RankingChooser.rankingComboBox.toolTipText=Escolha classifica\u00e7\u00e3o - -RankingChooser.applyButton.toolTipText=Aplicar a transforma\u00e7\u00e3o atual ao grafo - -RankingChooser.applyButton.text=Aplicar - -RankingChooser.splineButton.toolTipText=Configurar interpola\u00e7\u00e3o de classifica\u00e7\u00e3o - -RankingChooser.splineButton.text=Spline... - -RankingToolbar.nodes.label=N\u00f3s - -RankingToolbar.edges.label=Arestas - -ResultListPanel.action.tablescreenshot=Capturar tela - -ResultListPanel.tablescreenshot.filechooser.title=Salvar como... - -ResultListPanel.tablescreenshot.filechooser.pngDescription=PNG - -ResultListPanel.tablescreenshot.error=Ocorreu um erro durante a captura de tela.\n\nExce\u00e7\u00e3o\: {0}\: {1}\nArquivo\: {2}\nLinha\: {3} - -ResultListPanel.tablescreenshot.error.title=Erro - -ResultListPanel.column.rank=Classificar - -ResultListPanel.column.label=R\u00f3tulo - -RankingChooser.choose.text=--- Escolha um par\u00e2metro de classifica\u00e7\u00e3o - -RankingChooser.splineEditor.title=Interpolar - -RankingChooser.autoApplyButton.text=Auto aplicar - -RankingChooser.autoApplyButton.toolTipText=Aplicar continuamente mesmo quando os valores mudem - -RankingChooser.autoApplyButton.stop.toolTipText=Parar a aplica\u00e7\u00e3o desta transforma\u00e7\u00e3o - -RankingChooser.enableAutoButton.toolTipText=Habilitar auto transforma\u00e7\u00e3o - aplicada continuamente diff --git a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/Bundle_ru.properties b/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/Bundle_ru.properties deleted file mode 100644 index cab6c0619a..0000000000 --- a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/Bundle_ru.properties +++ /dev/null @@ -1,61 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-12 21\:40+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -Actions/Window/org-gephi-desktop-ranking-RankingAction.instance=\u0420\u0430\u043d\u0436\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 - -CTL_RankingAction=\u0420\u0430\u043d\u0436\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 - -CTL_RankingTopComponent=\u0420\u0430\u043d\u0436\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 - -OpenIDE-Module-Short-Description=Integrated ranking UI - -RankingTopComponent.listButton.text=\u0421\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 - -RankingTopComponent.barchartButton.text=\u0414\u0438\u0430\u0433\u0440\u0430\u043c\u043c\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 - -RankingTopComponent.localScaleButton.text=\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0439 \u043c\u0430\u0441\u0448\u0442\u0430\u0431. \u0413\u0440\u0430\u043d\u0438\u0446\u044b \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u044e\u0442\u0441\u044f \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0432\u0438\u0434\u0438\u043c\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0430, \u0430 \u043d\u0435 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043f\u043e\u043b\u043d\u043e\u0433\u043e. - -RankingChooser.rankingComboBox.toolTipText=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0440\u0430\u043d\u0433 - -RankingChooser.applyButton.toolTipText=\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u043d\u0430\u0431\u043e\u0440 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0440\u0430\u043d\u0436\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a \u0433\u0440\u0430\u0444\u0443 - -RankingChooser.applyButton.text=\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c - -RankingChooser.splineButton.toolTipText=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044e \u0440\u0430\u043d\u0433\u0430 - -RankingChooser.splineButton.text=\u0421\u043f\u043b\u0430\u0439\u043d\u044b... - -RankingToolbar.nodes.label=\u0423\u0437\u043b\u044b - -RankingToolbar.edges.label=\u0420\u0451\u0431\u0440\u0430 - -ResultListPanel.action.tablescreenshot=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0441\u043d\u0438\u043c\u043e\u043a \u044d\u043a\u0440\u0430\u043d\u0430 - -ResultListPanel.tablescreenshot.filechooser.title=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u043a... - -ResultListPanel.tablescreenshot.filechooser.pngDescription=PNG - -ResultListPanel.tablescreenshot.error=\u0412\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043d\u0438\u043c\u043a\u0430 \u044d\u043a\u0440\u0430\u043d\u0430 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430.\n\n\u0418\u0441\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\: {0}\: {1}\n\u0424\u0430\u0439\u043b\: {2}\n\u0421\u0442\u0440\u043e\u043a\u0430\: {3} - -ResultListPanel.tablescreenshot.error.title=\u041e\u0448\u0438\u0431\u043a\u0430 - -ResultListPanel.column.rank=\u0420\u0430\u043d\u0433 - -ResultListPanel.column.label=\u041c\u0435\u0442\u043a\u0430 - -RankingChooser.choose.text=---\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0434\u043b\u044f \u0440\u0430\u043d\u0436\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f - -RankingChooser.splineEditor.title=\u0418\u043d\u0442\u0435\u0440\u043f\u043e\u043b\u044f\u0446\u0438\u044f - -RankingChooser.autoApplyButton.text=\u0410\u0432\u0442\u043e-\u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 - -RankingChooser.autoApplyButton.toolTipText=\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 - -RankingChooser.autoApplyButton.stop.toolTipText=\u041f\u0440\u0435\u043a\u0440\u0430\u0442\u0438\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c - -RankingChooser.enableAutoButton.toolTipText=\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0430\u0432\u0442\u043e-\u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u0435 diff --git a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/Bundle_zh_CN.properties b/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/Bundle_zh_CN.properties deleted file mode 100644 index f4f99a0712..0000000000 --- a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/Bundle_zh_CN.properties +++ /dev/null @@ -1,61 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-15 01\:27+0000\nLast-Translator\: Xi-Nian Zuo \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -Actions/Window/org-gephi-desktop-ranking-RankingAction.instance=\u6392\u5e8f - -CTL_RankingAction=\u6392\u5e8f - -CTL_RankingTopComponent=\u6392\u5e8f - -OpenIDE-Module-Short-Description=\u7efc\u5408\u6392\u5e8f\u7528\u6237\u754c\u9762 - -RankingTopComponent.listButton.text=\u7ed3\u679c\u5217\u8868 - -RankingTopComponent.barchartButton.text=\u6570\u503c\u56fe\u8868 - -RankingTopComponent.localScaleButton.text=\u4f7f\u7528\u5c40\u90e8\u5c3a\u5ea6. \u53ea\u6839\u636e\u53ef\u89c1\u56fe\u800c\u4e0d\u662f\u5168\u56fe\u8ba1\u7b97\u8fb9\u6846. - -RankingChooser.rankingComboBox.toolTipText=\u9009\u62e9\u961f\u5217 - -RankingChooser.applyButton.toolTipText=\u5e94\u7528\u73b0\u6709\u7684\u8f6c\u6362\u5230\u56fe - -RankingChooser.applyButton.text=\u5e94\u7528 - -RankingChooser.splineButton.toolTipText=\u8bbe\u7f6e\u7b49\u7ea7\u63d2\u503c\u6cd5 - -RankingChooser.splineButton.text=\u6837\u6761\u66f2\u7ebf - -RankingToolbar.nodes.label=\u8282\u70b9 - -RankingToolbar.edges.label=\u8fb9 - -ResultListPanel.action.tablescreenshot=\u5c4f\u5e55\u622a\u56fe - -ResultListPanel.tablescreenshot.filechooser.title=\u53e6\u5b58\u4e3a\u2026\u2026 - -ResultListPanel.tablescreenshot.filechooser.pngDescription=PNG - -ResultListPanel.tablescreenshot.error=\u622a\u56fe\u65f6\u62a5\u9519\u3002\n\u5f02\u5e38\uff1a{0}\:{1}\n\u6587\u4ef6\uff1a{2}\n\u884c\:{3} - -ResultListPanel.tablescreenshot.error.title=\u9519\u8bef - -ResultListPanel.column.rank=\u7b49\u7ea7 - -ResultListPanel.column.label=\u6807\u8bb0 - -RankingChooser.choose.text=--\u9009\u62e9\u4e00\u4e2a\u7b49\u7ea7\u53c2\u6570 - -RankingChooser.splineEditor.title=\u63d2\u503c - -RankingChooser.autoApplyButton.text=\u81ea\u52a8\u5e94\u7528 - -RankingChooser.autoApplyButton.toolTipText=\u6570\u636e\u6539\u53d8\u540e\u7ee7\u7eed\u5e94\u7528 - -RankingChooser.autoApplyButton.stop.toolTipText=\u505c\u6b62\u5e94\u7528\u6b64\u8f6c\u6362 - -RankingChooser.enableAutoButton.toolTipText=\u5f00\u542f\u81ea\u52a8\u8f6c\u6362-\u7ee7\u7eed\u5e94\u7528 diff --git a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/cs.po b/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/cs.po deleted file mode 100644 index 941c00ad0b..0000000000 --- a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/cs.po +++ /dev/null @@ -1,100 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-06 18:50+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "Actions/Window/org-gephi-desktop-ranking-RankingAction.instance" -msgstr "HodnocenΓ­" - -msgid "CTL_RankingAction" -msgstr "HodnocenΓ­" - -msgid "CTL_RankingTopComponent" -msgstr "HodnocenΓ­" - -msgid "OpenIDE-Module-Short-Description" -msgstr "IntegrovanΓ© rozhranΓ­ hodnocenΓ­" - -msgid "RankingTopComponent.listButton.text" -msgstr "Seznam vΓ½sledkΕ―" - -msgid "RankingTopComponent.barchartButton.text" -msgstr "Tabulka hodnot" - -msgid "RankingTopComponent.localScaleButton.text" -msgstr "PouΕΎΓ­t mΓ­stnΓ­ mΔ›Ε™Γ­tko. Hranice budou vypočítΓ‘ny pouze ve viditelnΓ©m grafu mΓ­sto ΓΊplnΓ©ho." - -msgid "RankingChooser.rankingComboBox.toolTipText" -msgstr "Zvolit hodnost" - -msgid "RankingChooser.applyButton.toolTipText" -msgstr "PouΕΎΓ­t současnou transformaci na graf" - -msgid "RankingChooser.applyButton.text" -msgstr "PouΕΎΓ­t" - -msgid "RankingChooser.splineButton.toolTipText" -msgstr "Nastavit interpolaci hodnocenΓ­" - -msgid "RankingChooser.splineButton.text" -msgstr "KΕ™ivka..." - -msgid "RankingToolbar.nodes.label" -msgstr "Uzle" - -msgid "RankingToolbar.edges.label" -msgstr "Hrany" - -msgid "ResultListPanel.action.tablescreenshot" -msgstr "PoΕ™Γ­dit snΓ­mek" - -msgid "ResultListPanel.tablescreenshot.filechooser.title" -msgstr "UloΕΎit jako..." - -msgid "ResultListPanel.tablescreenshot.filechooser.pngDescription" -msgstr "PNG" - -msgid "ResultListPanel.tablescreenshot.error" -msgstr "PΕ™i poΕ™izovΓ‘nΓ­ smΓ­nku doΕ‘lo k chybΔ›.\n\nVΓ½jimka: {0}: {1}\nSoubor: {2}\nŘÑdek: {3}" - -msgid "ResultListPanel.tablescreenshot.error.title" -msgstr "Chyba" - -msgid "ResultListPanel.column.rank" -msgstr "Hodnost" - -msgid "ResultListPanel.column.label" -msgstr "Ε tΓ­tek" - -msgid "RankingChooser.choose.text" -msgstr "---Zvolit parametr hodnocenΓ­" - -msgid "RankingChooser.splineEditor.title" -msgstr "Interpolovat" - -msgid "RankingChooser.autoApplyButton.text" -msgstr "Automaticky pouΕΎΓ­t" - -msgid "RankingChooser.autoApplyButton.toolTipText" -msgstr "PouΕΎΓ­vat nepΕ™etrΕΎitΔ›, i kdyΕΎ se hodnoty zmΔ›nΓ­" - -msgid "RankingChooser.autoApplyButton.stop.toolTipText" -msgstr "PΕ™estat pouΕΎΓ­vat tuto transformaci" - -msgid "RankingChooser.enableAutoButton.toolTipText" -msgstr "Povolit auto transformaci - pouΕΎivΓ‘na nepΕ™etrΕΎitΔ›" diff --git a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/es.po b/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/es.po deleted file mode 100644 index 176b2901d4..0000000000 --- a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/es.po +++ /dev/null @@ -1,102 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011, 2012. -# FIRST AUTHOR , 2010. -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-31 12:42+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "Actions/Window/org-gephi-desktop-ranking-RankingAction.instance" -msgstr "ClasificaciΓ³n" - -msgid "CTL_RankingAction" -msgstr "ClasificaciΓ³n" - -msgid "CTL_RankingTopComponent" -msgstr "ClasificaciΓ³n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Integrar la interfaz de usuario del mΓ³dulo Ranking" - -msgid "RankingTopComponent.listButton.text" -msgstr "Lista de resultados" - -msgid "RankingTopComponent.barchartButton.text" -msgstr "GrΓ‘fica de valores" - -msgid "RankingTopComponent.localScaleButton.text" -msgstr "Utilizar escala local. Los lΓ­mites son calculados sΓ³lo para el grafo visible en lugar del grafo completo." - -msgid "RankingChooser.rankingComboBox.toolTipText" -msgstr "Elige clasificaciΓ³n" - -msgid "RankingChooser.applyButton.toolTipText" -msgstr "Aplicar la transformaciΓ³n actual al grafo" - -msgid "RankingChooser.applyButton.text" -msgstr "Aplicar" - -msgid "RankingChooser.splineButton.toolTipText" -msgstr "Configurar interpolaciΓ³n de la clasificaciΓ³n" - -msgid "RankingChooser.splineButton.text" -msgstr "Spline..." - -msgid "RankingToolbar.nodes.label" -msgstr "Nodos" - -msgid "RankingToolbar.edges.label" -msgstr "Aristas" - -msgid "ResultListPanel.action.tablescreenshot" -msgstr "Captura de pantalla" - -msgid "ResultListPanel.tablescreenshot.filechooser.title" -msgstr "Guardar como..." - -msgid "ResultListPanel.tablescreenshot.filechooser.pngDescription" -msgstr "PNG" - -msgid "ResultListPanel.tablescreenshot.error" -msgstr "Un error ha ocurrido mientras se capturaba la pantalla.\n\nExcepciΓ³n: {0}: {1}\nArchivo: {2}\nLΓ­nea: {3}" - -msgid "ResultListPanel.tablescreenshot.error.title" -msgstr "Error" - -msgid "ResultListPanel.column.rank" -msgstr "ClasificaciΓ³n" - -msgid "ResultListPanel.column.label" -msgstr "Etiqueta" - -msgid "RankingChooser.choose.text" -msgstr "---Elige un parΓ‘metro de clasificaciΓ³n" - -msgid "RankingChooser.splineEditor.title" -msgstr "Interpolar" - -msgid "RankingChooser.autoApplyButton.text" -msgstr "Auto aplicar" - -msgid "RankingChooser.autoApplyButton.toolTipText" -msgstr "Aplicar continuamente incluso cuando los valores cambian" - -msgid "RankingChooser.autoApplyButton.stop.toolTipText" -msgstr "Para de aplicar esta transformaciΓ³n" - -msgid "RankingChooser.enableAutoButton.toolTipText" -msgstr "Activar auto transformaciΓ³n - aplicada continuamente" diff --git a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/fr.po b/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/fr.po deleted file mode 100644 index 3914016305..0000000000 --- a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/fr.po +++ /dev/null @@ -1,101 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-31 12:58+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "Actions/Window/org-gephi-desktop-ranking-RankingAction.instance" -msgstr "Classement" - -msgid "CTL_RankingAction" -msgstr "Classement" - -msgid "CTL_RankingTopComponent" -msgstr "Classement" - -msgid "OpenIDE-Module-Short-Description" -msgstr "IntΓ¨gre l'interface utilisateur du module Ranking" - -msgid "RankingTopComponent.listButton.text" -msgstr "Liste de rΓ©sultats" - -msgid "RankingTopComponent.barchartButton.text" -msgstr "Graphique des valeurs" - -msgid "RankingTopComponent.localScaleButton.text" -msgstr "Utiliser une Γ©chelle locale. Les limites min et max sont calculΓ©es seulement sur le graphe visible au lieu du graphe entier." - -msgid "RankingChooser.rankingComboBox.toolTipText" -msgstr "Choisir un rang" - -msgid "RankingChooser.applyButton.toolTipText" -msgstr "Appliquer la transformation actuelle au graphe." - -msgid "RankingChooser.applyButton.text" -msgstr "Appliquer" - -msgid "RankingChooser.splineButton.toolTipText" -msgstr "Configurer l'interpolation des rangs" - -msgid "RankingChooser.splineButton.text" -msgstr "Spline..." - -msgid "RankingToolbar.nodes.label" -msgstr "Noeuds" - -msgid "RankingToolbar.edges.label" -msgstr "Liens" - -msgid "ResultListPanel.action.tablescreenshot" -msgstr "Capture d'Γ©cran" - -msgid "ResultListPanel.tablescreenshot.filechooser.title" -msgstr "Enregistrer sous..." - -msgid "ResultListPanel.tablescreenshot.filechooser.pngDescription" -msgstr "PNG" - -msgid "ResultListPanel.tablescreenshot.error" -msgstr "Une erreur est survenue lors de la prise de la capture d'Γ©cran.\n\nException: {0}: {1}\nFichier: {2}\nLigne: {3}" - -msgid "ResultListPanel.tablescreenshot.error.title" -msgstr "Erreur" - -msgid "ResultListPanel.column.rank" -msgstr "Rang" - -msgid "ResultListPanel.column.label" -msgstr "Label" - -msgid "RankingChooser.choose.text" -msgstr "Choisir un paramΓ¨tre de classement" - -msgid "RankingChooser.splineEditor.title" -msgstr "Interpoler" - -msgid "RankingChooser.autoApplyButton.text" -msgstr "ExΓ©cution auto" - -msgid "RankingChooser.autoApplyButton.toolTipText" -msgstr "ExΓ©cute en continu mΓͺme si les valeurs changent" - -msgid "RankingChooser.autoApplyButton.stop.toolTipText" -msgstr "ArrΓͺte d'exΓ©cuter cette transformation" - -msgid "RankingChooser.enableAutoButton.toolTipText" -msgstr "Active la transformation automatique - en continu" diff --git a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/ja.po b/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/ja.po deleted file mode 100644 index e6e2fb2d00..0000000000 --- a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/ja.po +++ /dev/null @@ -1,100 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-15 10:56+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "Actions/Window/org-gephi-desktop-ranking-RankingAction.instance" -msgstr "ランキング" - -msgid "CTL_RankingAction" -msgstr "ランキング" - -msgid "CTL_RankingTopComponent" -msgstr "ランキング" - -msgid "OpenIDE-Module-Short-Description" -msgstr "η΅±εˆγƒ©γƒ³γ‚­γƒ³γ‚°UI" - -msgid "RankingTopComponent.listButton.text" -msgstr "硐果γƒͺγ‚Ήγƒˆ" - -msgid "RankingTopComponent.barchartButton.text" -msgstr "ε€€γƒγƒ£γƒΌγƒˆ" - -msgid "RankingTopComponent.localScaleButton.text" -msgstr "ローカルスケールを使って下さい。範囲はεŒε…¨γ‚°γƒ©γƒ•γδ»£γ‚γ‚Šγ«ε―視グラフγγΏγ«εŸΊγ₯γ„γ¦θ¨ˆη—γ•γ‚ŒγΎγ™γ€‚" - -msgid "RankingChooser.rankingComboBox.toolTipText" -msgstr "γƒ©γƒ³γ‚―γ‚’ιΈζŠž" - -msgid "RankingChooser.applyButton.toolTipText" -msgstr "現在γε€‰ε½’をグラフに適用" - -msgid "RankingChooser.applyButton.text" -msgstr "適用" - -msgid "RankingChooser.splineButton.toolTipText" -msgstr "ランクγε†…ζŒΏγθ¨­εš" - -msgid "RankingChooser.splineButton.text" -msgstr "スプラむン..." - -msgid "RankingToolbar.nodes.label" -msgstr "γƒŽγƒΌγƒ‰" - -msgid "RankingToolbar.edges.label" -msgstr "θΎΊ" - -msgid "ResultListPanel.action.tablescreenshot" -msgstr "γ‚Ήγ‚―γƒͺγƒΌγƒ³γ‚·γƒ§γƒƒγƒˆγ‚’ζ’γ‚‹" - -msgid "ResultListPanel.tablescreenshot.filechooser.title" -msgstr "εε‰γ‚’δ»˜γ‘γ¦δΏε­˜..." - -msgid "ResultListPanel.tablescreenshot.filechooser.pngDescription" -msgstr "PNG" - -msgid "ResultListPanel.tablescreenshot.error" -msgstr "γ‚Ήγ‚―γƒͺγƒΌγƒ³γ‚·γƒ§γƒƒγƒˆε–εΎ—δΈ­γ«γ‚¨γƒ©γƒΌη™Ίη”Ÿ\n\nδΎ‹ε€–: {0}: {1}\nフゑむル: {2}\n葌: {3}" - -msgid "ResultListPanel.tablescreenshot.error.title" -msgstr "エラー" - -msgid "ResultListPanel.column.rank" -msgstr "ランク" - -msgid "ResultListPanel.column.label" -msgstr "ラベル" - -msgid "RankingChooser.choose.text" -msgstr "---γƒ©γƒ³γ‚―γƒ‘γƒ©γƒ‘γƒΌγ‚Ώγ‚’ιΈζŠž" - -msgid "RankingChooser.splineEditor.title" -msgstr "ε†…ζŒΏ" - -msgid "RankingChooser.autoApplyButton.text" -msgstr "θ‡ͺ動適用" - -msgid "RankingChooser.autoApplyButton.toolTipText" -msgstr "ε€€γε€‰ζ›΄γŒγ‚γ£γŸγ¨γγ―ηΆ™ηΆšγ—γ¦ι©η”¨" - -msgid "RankingChooser.autoApplyButton.stop.toolTipText" -msgstr "こγε€‰ε½’γι©η”¨γδΈ­ζ­’" - -msgid "RankingChooser.enableAutoButton.toolTipText" -msgstr "θ‡ͺ動倉归可能 - ηΆ™ηΆšγ—γ¦ι©η”¨" diff --git a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/org-gephi-desktop-ranking.pot b/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/org-gephi-desktop-ranking.pot deleted file mode 100644 index 6cb5f72e4a..0000000000 --- a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/org-gephi-desktop-ranking.pot +++ /dev/null @@ -1,104 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "Actions/Window/org-gephi-desktop-ranking-RankingAction.instance" -msgstr "Ranking" - -msgid "CTL_RankingAction" -msgstr "Ranking" - -msgid "CTL_RankingTopComponent" -msgstr "Ranking" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Integrated ranking UI" - -msgid "RankingTopComponent.listButton.text" -msgstr "Result list" - -msgid "RankingTopComponent.barchartButton.text" -msgstr "Value chart" - -msgid "RankingTopComponent.localScaleButton.text" -msgstr "" -"Use local scale. The bounds are calculated only on the visible graph instead " -"of the complete graph." - -msgid "RankingChooser.rankingComboBox.toolTipText" -msgstr "Choose rank" - -msgid "RankingChooser.applyButton.toolTipText" -msgstr "Apply the current transformation to the graph" - -msgid "RankingChooser.applyButton.text" -msgstr "Apply" - -msgid "RankingChooser.splineButton.toolTipText" -msgstr "Configure rank interpolation" - -msgid "RankingChooser.splineButton.text" -msgstr "Spline..." - -msgid "RankingToolbar.nodes.label" -msgstr "Nodes" - -msgid "RankingToolbar.edges.label" -msgstr "Edges" - -msgid "ResultListPanel.action.tablescreenshot" -msgstr "Take screenshot" - -msgid "ResultListPanel.tablescreenshot.filechooser.title" -msgstr "Save As..." - -msgid "ResultListPanel.tablescreenshot.filechooser.pngDescription" -msgstr "PNG" - -msgid "ResultListPanel.tablescreenshot.error" -msgstr "" -"An error occured while taking screenshot.\n" -"\n" -"Exception: {0}: {1}\n" -"File: {2}\n" -"Line: {3}" - -msgid "ResultListPanel.tablescreenshot.error.title" -msgstr "Error" - -msgid "ResultListPanel.column.rank" -msgstr "Rank" - -msgid "ResultListPanel.column.label" -msgstr "Label" - -msgid "RankingChooser.choose.text" -msgstr "---Choose a rank parameter" - -msgid "RankingChooser.splineEditor.title" -msgstr "Interpolate" - -msgid "RankingChooser.autoApplyButton.text" -msgstr "Auto Apply" - -msgid "RankingChooser.autoApplyButton.toolTipText" -msgstr "Apply continuously even when the values changes" - -msgid "RankingChooser.autoApplyButton.stop.toolTipText" -msgstr "Stop applying this transformation" - -msgid "RankingChooser.enableAutoButton.toolTipText" -msgstr "Enable auto transformation - applied continuously" diff --git a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/pt_BR.po b/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/pt_BR.po deleted file mode 100644 index ec2f9ba09e..0000000000 --- a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/pt_BR.po +++ /dev/null @@ -1,101 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -# CΓ©lio Faria Jr. , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-12 12:33+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "Actions/Window/org-gephi-desktop-ranking-RankingAction.instance" -msgstr "ClassificaΓ§Γ£o" - -msgid "CTL_RankingAction" -msgstr "ClassificaΓ§Γ£o" - -msgid "CTL_RankingTopComponent" -msgstr "ClassificaΓ§Γ£o" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interface de usuΓ‘rio de classificaΓ§Γ£o integrada" - -msgid "RankingTopComponent.listButton.text" -msgstr "Lista de resultados" - -msgid "RankingTopComponent.barchartButton.text" -msgstr "GrΓ‘fico de valores" - -msgid "RankingTopComponent.localScaleButton.text" -msgstr "Usar escalonamento local. Os limites nΓ£o serΓ£o calculados para o grafo completo, apenas para o grafo visΓ­vel." - -msgid "RankingChooser.rankingComboBox.toolTipText" -msgstr "Escolha classificaΓ§Γ£o" - -msgid "RankingChooser.applyButton.toolTipText" -msgstr "Aplicar a transformaΓ§Γ£o atual ao grafo" - -msgid "RankingChooser.applyButton.text" -msgstr "Aplicar" - -msgid "RankingChooser.splineButton.toolTipText" -msgstr "Configurar interpolaΓ§Γ£o de classificaΓ§Γ£o" - -msgid "RankingChooser.splineButton.text" -msgstr "Spline..." - -msgid "RankingToolbar.nodes.label" -msgstr "NΓ³s" - -msgid "RankingToolbar.edges.label" -msgstr "Arestas" - -msgid "ResultListPanel.action.tablescreenshot" -msgstr "Capturar tela" - -msgid "ResultListPanel.tablescreenshot.filechooser.title" -msgstr "Salvar como..." - -msgid "ResultListPanel.tablescreenshot.filechooser.pngDescription" -msgstr "PNG" - -msgid "ResultListPanel.tablescreenshot.error" -msgstr "Ocorreu um erro durante a captura de tela.\n\nExceΓ§Γ£o: {0}: {1}\nArquivo: {2}\nLinha: {3}" - -msgid "ResultListPanel.tablescreenshot.error.title" -msgstr "Erro" - -msgid "ResultListPanel.column.rank" -msgstr "Classificar" - -msgid "ResultListPanel.column.label" -msgstr "RΓ³tulo" - -msgid "RankingChooser.choose.text" -msgstr "--- Escolha um parΓ’metro de classificaΓ§Γ£o" - -msgid "RankingChooser.splineEditor.title" -msgstr "Interpolar" - -msgid "RankingChooser.autoApplyButton.text" -msgstr "Auto aplicar" - -msgid "RankingChooser.autoApplyButton.toolTipText" -msgstr "Aplicar continuamente mesmo quando os valores mudem" - -msgid "RankingChooser.autoApplyButton.stop.toolTipText" -msgstr "Parar a aplicaΓ§Γ£o desta transformaΓ§Γ£o" - -msgid "RankingChooser.enableAutoButton.toolTipText" -msgstr "Habilitar auto transformaΓ§Γ£o - aplicada continuamente" diff --git a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/resources/apply.gif b/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/resources/apply.gif deleted file mode 100644 index 8a35c4c259..0000000000 Binary files a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/resources/apply.gif and /dev/null differ diff --git a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/resources/barchart.png b/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/resources/barchart.png deleted file mode 100644 index 2bfc410bf5..0000000000 Binary files a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/resources/barchart.png and /dev/null differ diff --git a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/resources/chain.png b/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/resources/chain.png deleted file mode 100644 index 28199c8c26..0000000000 Binary files a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/resources/chain.png and /dev/null differ diff --git a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/resources/funnel.png b/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/resources/funnel.png deleted file mode 100755 index 35f1d25960..0000000000 Binary files a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/resources/funnel.png and /dev/null differ diff --git a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/resources/icon.png b/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/resources/icon.png deleted file mode 100644 index ed7ec0e972..0000000000 Binary files a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/resources/icon.png and /dev/null differ diff --git a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/resources/list.png b/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/resources/list.png deleted file mode 100644 index c210002052..0000000000 Binary files a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/resources/list.png and /dev/null differ diff --git a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/resources/small.png b/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/resources/small.png deleted file mode 100644 index 7cc52813cd..0000000000 Binary files a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/resources/small.png and /dev/null differ diff --git a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/resources/stop.png b/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/resources/stop.png deleted file mode 100644 index fb8bbdf229..0000000000 Binary files a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/resources/stop.png and /dev/null differ diff --git a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/ru.po b/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/ru.po deleted file mode 100644 index 55c4fe822e..0000000000 --- a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/ru.po +++ /dev/null @@ -1,100 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-12 21:40+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "Actions/Window/org-gephi-desktop-ranking-RankingAction.instance" -msgstr "Π Π°Π½ΠΆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅" - -msgid "CTL_RankingAction" -msgstr "Π Π°Π½ΠΆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅" - -msgid "CTL_RankingTopComponent" -msgstr "Π Π°Π½ΠΆΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Integrated ranking UI" - -msgid "RankingTopComponent.listButton.text" -msgstr "Бписок Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ΠΎΠ²" - -msgid "RankingTopComponent.barchartButton.text" -msgstr "Π”ΠΈΠ°Π³Ρ€Π°ΠΌΠΌΠ° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ" - -msgid "RankingTopComponent.localScaleButton.text" -msgstr "Π›ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΌΠ°ΡΡˆΡ‚Π°Π±. Π“Ρ€Π°Π½ΠΈΡ†Ρ‹ Π²Ρ‹Ρ‡ΠΈΡΠ»ΡΡŽΡ‚ΡΡ Π½Π° основС Π²ΠΈΠ΄ΠΈΠΌΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„Π°, Π° Π½Π΅ Π½Π° основС ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ." - -msgid "RankingChooser.rankingComboBox.toolTipText" -msgstr "Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Ρ€Π°Π½Π³" - -msgid "RankingChooser.applyButton.toolTipText" -msgstr "ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π½Π°Π±ΠΎΡ€ настроСк ранТирования ΠΊ Π³Ρ€Π°Ρ„Ρƒ" - -msgid "RankingChooser.applyButton.text" -msgstr "ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ" - -msgid "RankingChooser.splineButton.toolTipText" -msgstr "ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΡΡ†ΠΈΡŽ Ρ€Π°Π½Π³Π°" - -msgid "RankingChooser.splineButton.text" -msgstr "Π‘ΠΏΠ»Π°ΠΉΠ½Ρ‹..." - -msgid "RankingToolbar.nodes.label" -msgstr "Π£Π·Π»Ρ‹" - -msgid "RankingToolbar.edges.label" -msgstr "Π Ρ‘Π±Ρ€Π°" - -msgid "ResultListPanel.action.tablescreenshot" -msgstr "Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ снимок экрана" - -msgid "ResultListPanel.tablescreenshot.filechooser.title" -msgstr "Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ..." - -msgid "ResultListPanel.tablescreenshot.filechooser.pngDescription" -msgstr "PNG" - -msgid "ResultListPanel.tablescreenshot.error" -msgstr "Π’ΠΎ врСмя создания снимка экрана Π²ΠΎΠ·Π½ΠΈΠΊΠ»Π° ошибка.\n\nΠ˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅: {0}: {1}\nΠ€Π°ΠΉΠ»: {2}\nΠ‘Ρ‚Ρ€ΠΎΠΊΠ°: {3}" - -msgid "ResultListPanel.tablescreenshot.error.title" -msgstr "Ошибка" - -msgid "ResultListPanel.column.rank" -msgstr "Π Π°Π½Π³" - -msgid "ResultListPanel.column.label" -msgstr "ΠœΠ΅Ρ‚ΠΊΠ°" - -msgid "RankingChooser.choose.text" -msgstr "---Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ для ранТирования" - -msgid "RankingChooser.splineEditor.title" -msgstr "Π˜Π½Ρ‚Π΅Ρ€ΠΏΠΎΠ»ΡΡ†ΠΈΡ" - -msgid "RankingChooser.autoApplyButton.text" -msgstr "Авто-ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅" - -msgid "RankingChooser.autoApplyButton.toolTipText" -msgstr "АвтоматичСски ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ" - -msgid "RankingChooser.autoApplyButton.stop.toolTipText" -msgstr "ΠŸΡ€Π΅ΠΊΡ€Π°Ρ‚ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ " - -msgid "RankingChooser.enableAutoButton.toolTipText" -msgstr "ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎ-ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅" diff --git a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/zh_CN.po b/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/zh_CN.po deleted file mode 100644 index db7cd72600..0000000000 --- a/modules/DesktopRanking/src/main/resources/org/gephi/desktop/ranking/zh_CN.po +++ /dev/null @@ -1,100 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-15 01:27+0000\n" -"Last-Translator: Xi-Nian Zuo \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "Actions/Window/org-gephi-desktop-ranking-RankingAction.instance" -msgstr "ζŽ’εΊ" - -msgid "CTL_RankingAction" -msgstr "ζŽ’εΊ" - -msgid "CTL_RankingTopComponent" -msgstr "ζŽ’εΊ" - -msgid "OpenIDE-Module-Short-Description" -msgstr "η»ΌεˆζŽ’εΊη”¨ζˆ·η•Œι’" - -msgid "RankingTopComponent.listButton.text" -msgstr "η»“ζžœεˆ—θ‘¨" - -msgid "RankingTopComponent.barchartButton.text" -msgstr "数值图葨" - -msgid "RankingTopComponent.localScaleButton.text" -msgstr "使用局部尺度. εͺζ Ήζε―θ§ε›Ύθ€ŒδΈζ˜―ε…¨ε›Ύθ‘η—边摆." - -msgid "RankingChooser.rankingComboBox.toolTipText" -msgstr "ι€‰ζ‹©ι˜Ÿεˆ—" - -msgid "RankingChooser.applyButton.toolTipText" -msgstr "εΊ”η”¨ηŽ°ζœ‰ηš„θ½¬ζ’εˆ°ε›Ύ" - -msgid "RankingChooser.applyButton.text" -msgstr "应用" - -msgid "RankingChooser.splineButton.toolTipText" -msgstr "θΎη½η­‰ηΊ§ζ’值法" - -msgid "RankingChooser.splineButton.text" -msgstr "样村曲线" - -msgid "RankingToolbar.nodes.label" -msgstr "θŠ‚η‚Ή" - -msgid "RankingToolbar.edges.label" -msgstr "θΎΉ" - -msgid "ResultListPanel.action.tablescreenshot" -msgstr "屏幕ζˆͺε›Ύ" - -msgid "ResultListPanel.tablescreenshot.filechooser.title" -msgstr "ε¦ε­˜δΈΊβ€¦β€¦" - -msgid "ResultListPanel.tablescreenshot.filechooser.pngDescription" -msgstr "PNG" - -msgid "ResultListPanel.tablescreenshot.error" -msgstr "ζˆͺε›Ύζ—ΆζŠ₯错。\nεΌ‚εΈΈοΌš{0}:{1}\nζ–‡δ»ΆοΌš{2}\n葌:{3}" - -msgid "ResultListPanel.tablescreenshot.error.title" -msgstr "ι”™θ――" - -msgid "ResultListPanel.column.rank" -msgstr "η­‰ηΊ§" - -msgid "ResultListPanel.column.label" -msgstr "ζ ‡θ°" - -msgid "RankingChooser.choose.text" -msgstr "--选择一δΈͺ等级参数" - -msgid "RankingChooser.splineEditor.title" -msgstr "插值" - -msgid "RankingChooser.autoApplyButton.text" -msgstr "θ‡ͺεŠ¨εΊ”η”¨" - -msgid "RankingChooser.autoApplyButton.toolTipText" -msgstr "ζ•°ζζ”Ήε˜εŽη»§η»­εΊ”用" - -msgid "RankingChooser.autoApplyButton.stop.toolTipText" -msgstr "εœζ­’εΊ”η”¨ζ­€θ½¬ζ’" - -msgid "RankingChooser.enableAutoButton.toolTipText" -msgstr "开启θ‡ͺ动转捒-继续应用" diff --git a/modules/DesktopRecentFiles/pom.xml b/modules/DesktopRecentFiles/pom.xml deleted file mode 100644 index 59c4ae9065..0000000000 --- a/modules/DesktopRecentFiles/pom.xml +++ /dev/null @@ -1,57 +0,0 @@ - - - 4.0.0 - - gephi-parent - org.gephi - 0.9-SNAPSHOT - ../.. - - - org.gephi - desktop-recent-files - 0.9-SNAPSHOT - nbm - - DesktopRecentFiles - - - - ${project.groupId} - mostrecentfiles-api - - - ${project.groupId} - io-importer-api - - - ${project.groupId} - desktop-project - - - org.netbeans.api - org-openide-filesystems - - - org.netbeans.api - org-openide-util-lookup - - - org.netbeans.api - org-openide-util - - - - - - - org.codehaus.mojo - nbm-maven-plugin - - - - - - - - diff --git a/modules/DesktopRecentFiles/src/main/java/org/gephi/desktop/recentfiles/RecentFiles.java b/modules/DesktopRecentFiles/src/main/java/org/gephi/desktop/recentfiles/RecentFiles.java deleted file mode 100644 index 6c8aded8c5..0000000000 --- a/modules/DesktopRecentFiles/src/main/java/org/gephi/desktop/recentfiles/RecentFiles.java +++ /dev/null @@ -1,117 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : SΓ©bastien Heymann -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.desktop.recentfiles; - -import java.awt.event.ActionEvent; -import java.io.File; -import javax.swing.AbstractAction; -import javax.swing.JMenu; -import javax.swing.JMenuItem; -import org.gephi.desktop.importer.api.ImportControllerUI; -import org.gephi.desktop.mrufiles.api.MostRecentFiles; -import org.gephi.desktop.project.api.ProjectControllerUI; -import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileUtil; -import org.openide.util.Exceptions; -import org.openide.util.HelpCtx; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; -import org.openide.util.actions.CallableSystemAction; - -/** - * - * @author SΓ©bastien Heymann - */ -public class RecentFiles extends CallableSystemAction { - - private static final String GEPHI_EXTENSION = "gephi"; - - @Override - public void performAction() { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public String getName() { - return "recentfiles"; - } - - @Override - public HelpCtx getHelpCtx() { - return null; - } - - @Override - public JMenuItem getMenuPresenter() { - JMenu menu = new JMenu(NbBundle.getMessage(RecentFiles.class, "CTL_OpenRecentFiles")); - - MostRecentFiles mru = Lookup.getDefault().lookup(MostRecentFiles.class); - for (String filePath : mru.getMRUFileList()) { - final File file = new File(filePath); - if (file.exists()) { - final String fileName = file.getName(); - JMenuItem menuItem = new JMenuItem(new AbstractAction(fileName) { - - @Override - public void actionPerformed(ActionEvent e) { - FileObject fileObject = FileUtil.toFileObject(file); - if (fileObject.hasExt(GEPHI_EXTENSION)) { - ProjectControllerUI pc = Lookup.getDefault().lookup(ProjectControllerUI.class); - try { - pc.openProject(file); - } catch (Exception ex) { - Exceptions.printStackTrace(ex); - } - } else { - ImportControllerUI importController = Lookup.getDefault().lookup(ImportControllerUI.class); - if (importController.getImportController().isFileSupported(file)) { - importController.importFile(fileObject); - } - } - } - }); - menu.add(menuItem); - } - } - return menu; - } -} diff --git a/modules/DesktopRecentFiles/src/main/nbm/manifest.mf b/modules/DesktopRecentFiles/src/main/nbm/manifest.mf deleted file mode 100644 index 5438c4a92f..0000000000 --- a/modules/DesktopRecentFiles/src/main/nbm/manifest.mf +++ /dev/null @@ -1,5 +0,0 @@ -Manifest-Version: 1.0 -OpenIDE-Module-Layer: org/gephi/desktop/recentfiles/layer.xml -OpenIDE-Module-Localizing-Bundle: org/gephi/desktop/recentfiles/Bundle.properties -AutoUpdate-Essential-Module: true -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file diff --git a/modules/DesktopRecentFiles/src/main/nbm/module.xml b/modules/DesktopRecentFiles/src/main/nbm/module.xml deleted file mode 100644 index 6e4063116f..0000000000 --- a/modules/DesktopRecentFiles/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/Bundle.properties b/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/Bundle.properties deleted file mode 100644 index e247774f91..0000000000 --- a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/Bundle.properties +++ /dev/null @@ -1,6 +0,0 @@ -OpenIDE-Module-Display-Category=Gephi UI -OpenIDE-Module-Long-Description=\ - Menu in File for recently used files -OpenIDE-Module-Name=Desktop RecentFiles -CTL_OpenRecentFiles=Open Recent... -OpenIDE-Module-Short-Description=Menu in File for recently used files diff --git a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/Bundle_cs.properties b/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/Bundle_cs.properties deleted file mode 100644 index ea409538a7..0000000000 --- a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/Bundle_cs.properties +++ /dev/null @@ -1,13 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-23 10\:46+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=Menu v Soubor pro ned\u00e1vno pou\u017eit\u00e9 soubory - -CTL_OpenRecentFiles=Otev\u0159\u00edt ned\u00e1vn\u00e9... - -OpenIDE-Module-Short-Description=Menu v Soubor pro ned\u00e1vno pou\u017eit\u00e9 soubory diff --git a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/Bundle_es.properties b/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/Bundle_es.properties deleted file mode 100644 index 747b37e609..0000000000 --- a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/Bundle_es.properties +++ /dev/null @@ -1,13 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:07+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Menu en archivo para los archivos recientemente utilizados - -CTL_OpenRecentFiles=Abrir recientes... - -OpenIDE-Module-Short-Description=Menu en archivo para los archivos recientemente utilizados diff --git a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/Bundle_fr.properties b/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/Bundle_fr.properties deleted file mode 100644 index 1a54d193dd..0000000000 --- a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/Bundle_fr.properties +++ /dev/null @@ -1,14 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2011. -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-07 11\:30+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Entr\u00e9e dans le menu Fichier pour les fichiers r\u00e9cemment ouverts. - -CTL_OpenRecentFiles=R\u00e9cemment ouverts - -OpenIDE-Module-Short-Description=Entr\u00e9e dans le menu Fichier pour les fichiers r\u00e9cemment ouverts. diff --git a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/Bundle_ja.properties b/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/Bundle_ja.properties deleted file mode 100644 index 64d634fbc3..0000000000 --- a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/Bundle_ja.properties +++ /dev/null @@ -1,13 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-18 05\:41+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u6700\u8fd1\u4f7f\u3063\u305f\u30d5\u30a1\u30a4\u30eb\u306e\u305f\u3081\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u30e1\u30cb\u30e5\u30fc - -CTL_OpenRecentFiles=\u6700\u8fd1\u4f7f\u3063\u305f\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f... - -OpenIDE-Module-Short-Description=\u6700\u8fd1\u4f7f\u3063\u305f\u30d5\u30a1\u30a4\u30eb\u306e\u305f\u3081\u306e\u30d5\u30a1\u30a4\u30eb\u306e\u30e1\u30cb\u30e5\u30fc diff --git a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/Bundle_pt_BR.properties b/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/Bundle_pt_BR.properties deleted file mode 100644 index ef1882fe88..0000000000 --- a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/Bundle_pt_BR.properties +++ /dev/null @@ -1,13 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 17\:58+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Menu (sob a op\u00e7\u00e3o Arquivo) para arquivos usados \u200b\u200brecentemente - -CTL_OpenRecentFiles=Abrir arquivos usados \u200b\u200brecentemente - -OpenIDE-Module-Short-Description=Menu (sob a op\u00e7\u00e3o Arquivo) para arquivos usados \u200b\u200brecentemente diff --git a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/Bundle_ru.properties b/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/Bundle_ru.properties deleted file mode 100644 index 6d78265c3d..0000000000 --- a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/Bundle_ru.properties +++ /dev/null @@ -1,13 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-27 07\:40+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 - -CTL_OpenRecentFiles=\u041d\u0435\u0434\u0430\u0432\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u043b\u0438\u0441\u044c... - -OpenIDE-Module-Short-Description=\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 diff --git a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/Bundle_zh_CN.properties b/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/Bundle_zh_CN.properties deleted file mode 100644 index 69eb9532fb..0000000000 --- a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/Bundle_zh_CN.properties +++ /dev/null @@ -1,12 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:15+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u6700\u8fd1\u4f7f\u7528\u7684\u6587\u4ef6\u7684\u83dc\u5355 - -CTL_OpenRecentFiles=\u6253\u5f00\u6700\u8fd1\u7684\u2026\u2026 - -OpenIDE-Module-Short-Description=\u6b63\u5728\u4f7f\u7528\u7684\u6587\u4ef6\u7684\u83dc\u5355 diff --git a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/cs.po b/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/cs.po deleted file mode 100644 index 8ca36afd6c..0000000000 --- a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/cs.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-23 10:46+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Menu v Soubor pro nedΓ‘vno pouΕΎitΓ© soubory" - -msgid "CTL_OpenRecentFiles" -msgstr "OtevΕ™Γ­t nedΓ‘vnΓ©..." - -msgid "OpenIDE-Module-Short-Description" -msgstr "Menu v Soubor pro nedΓ‘vno pouΕΎitΓ© soubory" diff --git a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/es.po b/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/es.po deleted file mode 100644 index 854032b8bd..0000000000 --- a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/es.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:07+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Menu en archivo para los archivos recientemente utilizados" - -msgid "CTL_OpenRecentFiles" -msgstr "Abrir recientes..." - -msgid "OpenIDE-Module-Short-Description" -msgstr "Menu en archivo para los archivos recientemente utilizados" diff --git a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/fr.po b/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/fr.po deleted file mode 100644 index 25376c1010..0000000000 --- a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/fr.po +++ /dev/null @@ -1,29 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2011. -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-07 11:30+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "EntrΓ©e dans le menu Fichier pour les fichiers rΓ©cemment ouverts." - -msgid "CTL_OpenRecentFiles" -msgstr "RΓ©cemment ouverts" - -msgid "OpenIDE-Module-Short-Description" -msgstr "EntrΓ©e dans le menu Fichier pour les fichiers rΓ©cemment ouverts." diff --git a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/ja.po b/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/ja.po deleted file mode 100644 index e9651a2f59..0000000000 --- a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/ja.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-18 05:41+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ζœ€θΏ‘δ½Ώγ£γŸγƒ•γ‚‘γ‚€γƒ«γγŸγ‚γγƒ•γ‚‘むルγγƒ‘ニγƒ₯γƒΌ" - -msgid "CTL_OpenRecentFiles" -msgstr "ζœ€θΏ‘δ½Ώγ£γŸγƒ•γ‚‘γ‚€γƒ«γ‚’ι–‹γ..." - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζœ€θΏ‘δ½Ώγ£γŸγƒ•γ‚‘γ‚€γƒ«γγŸγ‚γγƒ•γ‚‘むルγγƒ‘ニγƒ₯γƒΌ" diff --git a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/layer.xml b/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/layer.xml deleted file mode 100644 index 73e037bfdb..0000000000 --- a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/layer.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - - diff --git a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/org-gephi-desktop-recentfiles.pot b/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/org-gephi-desktop-recentfiles.pot deleted file mode 100644 index 56bd5d1223..0000000000 --- a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/org-gephi-desktop-recentfiles.pot +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Menu in File for recently used files" - -msgid "CTL_OpenRecentFiles" -msgstr "Open Recent..." - -msgid "OpenIDE-Module-Short-Description" -msgstr "Menu in File for recently used files" diff --git a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/pt_BR.po b/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/pt_BR.po deleted file mode 100644 index d3cbf8d3c1..0000000000 --- a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/pt_BR.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 17:58+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Menu (sob a opΓ§Γ£o Arquivo) para arquivos usados ​​recentemente" - -msgid "CTL_OpenRecentFiles" -msgstr "Abrir arquivos usados ​​recentemente" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Menu (sob a opΓ§Γ£o Arquivo) para arquivos usados ​​recentemente" diff --git a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/ru.po b/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/ru.po deleted file mode 100644 index 674de238aa..0000000000 --- a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/ru.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-27 07:40+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Бписок послСдних ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²" - -msgid "CTL_OpenRecentFiles" -msgstr "НСдавно ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π»ΠΈΡΡŒ..." - -msgid "OpenIDE-Module-Short-Description" -msgstr "Бписок послСдних ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ²" diff --git a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/zh_CN.po b/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/zh_CN.po deleted file mode 100644 index 5a2ffebe2e..0000000000 --- a/modules/DesktopRecentFiles/src/main/resources/org/gephi/desktop/recentfiles/zh_CN.po +++ /dev/null @@ -1,27 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:15+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ζœ€θΏ‘δ½Ώη”¨ηš„ζ–‡δ»Άηš„θœε•" - -msgid "CTL_OpenRecentFiles" -msgstr "ζ‰“εΌ€ζœ€θΏ‘ηš„β€¦β€¦" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζ­£εœ¨δ½Ώη”¨ηš„ζ–‡δ»Άηš„θœε•" diff --git a/modules/DesktopSearch/pom.xml b/modules/DesktopSearch/pom.xml new file mode 100644 index 0000000000..f33cbdcf2d --- /dev/null +++ b/modules/DesktopSearch/pom.xml @@ -0,0 +1,129 @@ + + + 4.0.0 + + gephi-parent + org.gephi + 0.11.3-SNAPSHOT + ../.. + + + desktop-search + 0.11.3-SNAPSHOT + nbm + + DesktopSearch + + + + ${project.groupId} + project-api + + + ${project.groupId} + graph-api + + + ${project.groupId} + visualization-api + + + ${project.groupId} + datalab-api + + + ${project.groupId} + desktop-datalab + + + ${project.groupId} + desktop-project + + + + + ${project.groupId} + datalab-plugin + + + ${project.groupId} + desktop-project + + + + + ${project.groupId} + tools-api + + + ${project.groupId} + filters-api + + + org.netbeans.api + org-openide-util-lookup + + + ${project.groupId} + desktop-icons + + + org.netbeans.api + org-openide-util + + + org.netbeans.api + org-openide-util-ui + + + org.netbeans.api + org-openide-awt + + + org.netbeans.api + org-openide-windows + + + + + org.mockito + mockito-core + test + + + org.awaitility + awaitility + test + + + ${project.groupId} + filters-impl + test + + + ${project.groupId} + graph-api + test + test-jar + + + ${project.groupId} + project-api + test-jar + test + + + + + + + org.apache.netbeans.utilities + nbm-maven-plugin + + + + + + + + diff --git a/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/SearchAction.java b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/SearchAction.java new file mode 100644 index 0000000000..583398aa14 --- /dev/null +++ b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/SearchAction.java @@ -0,0 +1,82 @@ +package org.gephi.desktop.search; + +import java.awt.event.ActionEvent; +import java.awt.event.KeyEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import javax.swing.AbstractAction; +import javax.swing.JComponent; +import javax.swing.JDialog; +import javax.swing.KeyStroke; +import javax.swing.SwingUtilities; +import org.gephi.project.api.ProjectController; +import org.openide.awt.ActionID; +import org.openide.awt.ActionReference; +import org.openide.awt.ActionReferences; +import org.openide.awt.ActionRegistration; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; +import org.openide.windows.WindowManager; + +@ActionID(id = "org.gephi.desktop.search.actions.Search", category = "Tools") +@ActionRegistration(displayName = "#CTL_Search", lazy = false) +@ActionReferences({ + @ActionReference(path = "Menu/Tools", position = 400), + @ActionReference(path = "Shortcuts", name = "D-F") +}) +public final class SearchAction extends AbstractAction { + + // Singleton so it persists when the dialog is closed + private final SearchUIModel uiModel; + + SearchAction() { + super(NbBundle.getMessage(SearchAction.class, "CTL_Search"), + ImageUtilities.loadImageIcon("DesktopSearch/search.svg", false)); + + uiModel = new SearchUIModel(); + } + + @Override + public void actionPerformed(ActionEvent ae) { + if (isEnabled()) { + SearchDialog panel = new SearchDialog(uiModel); + JDialog dialog = new JDialog(WindowManager.getDefault().getMainWindow(), + NbBundle.getMessage(SearchAction.class, "SearchDialog.title"), false); + + // Close behavior + dialog.getRootPane().registerKeyboardAction(e -> { + closeDialog(panel, dialog); + }, KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), JComponent.WHEN_IN_FOCUSED_WINDOW); + dialog.addWindowFocusListener(new WindowAdapter() { + + @Override + public void windowLostFocus(WindowEvent e) { + closeDialog(panel, dialog); + } + }); + + // Drag behavior + panel.instrumentDragListener(dialog); + + // Show dialog + dialog.setUndecorated(true); + dialog.getContentPane().add(panel); + dialog.setBounds(212, 237, 679, 378); + dialog.setVisible(true); + } + } + + private void closeDialog(SearchDialog panel, JDialog dialog) { + SwingUtilities.invokeLater(() -> { + panel.unsetup(); + dialog.dispose(); + }); + } + + @Override + public boolean isEnabled() { + return Lookup.getDefault().lookup(ProjectController.class).hasCurrentProject(); + } +} + diff --git a/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/SearchDialog.form b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/SearchDialog.form new file mode 100644 index 0000000000..de9d0d3de0 --- /dev/null +++ b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/SearchDialog.form @@ -0,0 +1,111 @@ + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/SearchDialog.java b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/SearchDialog.java new file mode 100644 index 0000000000..1924d0ec76 --- /dev/null +++ b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/SearchDialog.java @@ -0,0 +1,475 @@ +package org.gephi.desktop.search; + +import java.awt.Color; +import java.awt.Component; +import java.awt.Point; +import java.awt.event.ActionListener; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import java.util.Collections; +import java.util.List; +import java.util.stream.Collectors; +import javax.swing.AbstractListModel; +import javax.swing.ButtonGroup; +import javax.swing.DefaultListCellRenderer; +import javax.swing.ImageIcon; +import javax.swing.JDialog; +import javax.swing.JLabel; +import javax.swing.JList; +import javax.swing.JToggleButton; +import javax.swing.KeyStroke; +import javax.swing.ListCellRenderer; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import javax.swing.event.ListSelectionEvent; +import javax.swing.event.ListSelectionListener; +import javax.swing.event.MouseInputAdapter; +import org.gephi.datalab.api.datatables.DataTablesController; +import org.gephi.desktop.search.api.SearchController; +import org.gephi.desktop.search.api.SearchListener; +import org.gephi.desktop.search.api.SearchRequest; +import org.gephi.desktop.search.api.SearchResult; +import org.gephi.desktop.search.filter.SearchFilterBuilder; +import org.gephi.desktop.search.impl.SearchCategoryImpl; +import org.gephi.desktop.search.popup.ActionPopup; +import org.gephi.filters.api.FilterController; +import org.gephi.filters.api.Query; +import org.gephi.filters.spi.FilterBuilder; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Node; +import org.gephi.visualization.api.VisualizationController; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.windows.TopComponent; +import org.openide.windows.WindowManager; + +/** + * @author mathieu.bastian + */ +public class SearchDialog extends javax.swing.JPanel implements SearchListener { + + private final SearchUIModel uiModel; + private final ButtonGroup categoryGroup; + + public SearchDialog(SearchUIModel uiModel) { + this.uiModel = uiModel; + categoryGroup = new ButtonGroup(); + initComponents(); + setup(); + } + + protected void setup() { + // Tabs + allCategoriesButton.addActionListener(e -> { + uiModel.setCategory(null); + search(); + }); + allCategoriesButton.putClientProperty("JButton.buttonType", "square"); + allCategoriesButton.setSelected(true); + categoryGroup.add(allCategoriesButton); + uiModel.getCategories().forEach(category -> { + JToggleButton toggleButton = new JToggleButton(); + toggleButton.setText(category.getDisplayName()); + toggleButton.setFocusable(false); + toggleButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); + toggleButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); + toggleButton.putClientProperty("JButton.buttonType", "square"); + categoryToolbar.add(toggleButton); + categoryGroup.add(toggleButton); + toggleButton.addActionListener(e -> { + uiModel.setCategory(category); + search(); + }); + if (uiModel.category == category) { + toggleButton.setSelected(true); + } + }); + + // Results list + resultsList.setFocusable(false); + resultsList.setCellRenderer(new ResultRenderer()); + resultsList.addMouseListener(new ActionPopup(resultsList)); + resultsList.addMouseListener(new MouseAdapter() { + @Override + public void mouseClicked(MouseEvent e) { + if (e.getClickCount() == 2) { + click(); + } + } + }); + resultsList.addListSelectionListener(new ListSelectionListener() { + @Override + public void valueChanged(ListSelectionEvent e) { + if (!e.getValueIsAdjusting()) { + select(); + } + } + }); + + // Search + searchField.setText(uiModel.query); + searchField.getDocument().addDocumentListener((SimpleDocumentListener) e -> { + search(); + }); + searchField.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_UP, 0), "none"); + searchField.getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0), "none"); + searchField.addKeyListener(new KeyAdapter() { + @Override + public void keyPressed(KeyEvent evt) { + if (evt.getKeyCode() == KeyEvent.VK_UP) { + resultsList.setSelectedIndex(Math.max(0, resultsList.getSelectedIndex() - 1)); + } else if (evt.getKeyCode() == KeyEvent.VK_DOWN) { + resultsList.setSelectedIndex(resultsList.getSelectedIndex() + 1); + } else if (evt.getKeyCode() == KeyEvent.VK_ENTER) { + click(); + } + } + }); + + // Filter button + filterButton.setEnabled(false); + + // Search if query isn't empty + if (!uiModel.query.isEmpty()) { + search(); + } + + // Focus - defer until the dialog is actually displayable, otherwise + // requestFocusInWindow() is a no-op and the search field starts unfocused. + SwingUtilities.invokeLater(this::refocusSearchField); + } + + protected void unsetup() { + resetSelection(); + } + + protected void refocusSearchField() { + searchField.requestFocusInWindow(); + } + + protected void search() { + String query = searchField.getText(); + uiModel.query = query; + if (query != null && !query.trim().isEmpty()) { + SearchRequest request = SearchRequest.builder().query(query.trim()).category(uiModel.category).build(); + SearchController searchController = Lookup.getDefault().lookup(SearchController.class); + searchController.search(request, this); + } else { + resultsList.setModel(new ResultsListModel(Collections.emptyList())); + filterButton.setEnabled(false); + } + } + + protected void click() { + SearchResult result = resultsList.getSelectedValue(); + if (result != null) { + Object val = result.getResult(); + if (isGraphOpened()) { + VisualizationController visualizationController = + Lookup.getDefault().lookup(VisualizationController.class); + if (visualizationController != null) { + if (val instanceof Node) { + visualizationController.resetSelection(); + visualizationController.selectNodes(new Node[] {(Node) val}); + visualizationController.centerOnNode((Node) val); + } else if (val instanceof Edge) { + visualizationController.resetSelection(); + visualizationController.selectEdges(new Edge[] {(Edge) val}); + visualizationController.centerOnEdge((Edge) val); + } + } + } + if (isDataLabOpened()) { + DataTablesController dataTablesController = Lookup.getDefault().lookup(DataTablesController.class); + if (dataTablesController != null) { + if (val instanceof Node) { + dataTablesController.selectNodesTable(); + dataTablesController.setNodeTableSelection(new Node[] {(Node) val}); + } else if (val instanceof Edge) { + dataTablesController.selectEdgesTable(); + dataTablesController.setEdgeTableSelection(new Edge[] {(Edge) val}); + } + } + } + } + } + + protected void select() { + // NOTE: Do NOT call into VisualizationController.selectNodes/selectEdges here. + // That switches the engine to custom-selection mode, which calls + // disableMouseHandler() -> AttributesUIController.closeWindow() -> + // TopComponent.close(). Closing a TopComponent triggers NetBeans focus events + // that dismiss this undecorated search popup on the very first keystroke when + // a graph is open. Graph selection + centering only happens on commit (Enter + // or double-click) via click(). Live preview into the data lab table is still + // safe and useful, so we keep it here. + SearchResult result = resultsList.getSelectedValue(); + if (result != null) { + Object val = result.getResult(); + if (isDataLabOpened()) { + DataTablesController dataTablesController = Lookup.getDefault().lookup(DataTablesController.class); + if (dataTablesController != null) { + if (val instanceof Node && dataTablesController.isNodeTableMode()) { + dataTablesController.setNodeTableSelection(new Node[] {(Node) val}); + } else if (val instanceof Edge && dataTablesController.isEdgeTableMode()) { + dataTablesController.setEdgeTableSelection(new Edge[] {(Edge) val}); + } + } + } + } else { + resetSelection(); + } + } + + protected void filter(String type) { + String query = searchField.getText(); + if (query != null && !query.trim().isEmpty()) { + FilterController filterController = Lookup.getDefault().lookup(FilterController.class); + if (filterController != null) { + FilterBuilder filterBuilder = Lookup.getDefault().lookup(SearchFilterBuilder.class); + Query filterQuery = filterController.createQuery(filterBuilder); + ((SearchFilterBuilder.SearchFilter) filterQuery.getFilter()).setQuery(query); + ((SearchFilterBuilder.SearchFilter) filterQuery.getFilter()).setType(type); + filterController.add(filterQuery); + } + } + } + + private void resetSelection() { + if (isGraphOpened()) { + VisualizationController visualizationController = + Lookup.getDefault().lookup(VisualizationController.class); + if (visualizationController != null) { + visualizationController.resetSelection(); + } + } + if (isDataLabOpened()) { + DataTablesController dataTablesController = Lookup.getDefault().lookup(DataTablesController.class); + if (dataTablesController != null) { + dataTablesController.clearSelection(); + } + } + } + + protected void instrumentDragListener(JDialog dialog) { + DragListener dragListener = new DragListener(dialog); + categoryToolbar.addMouseListener(dragListener); + categoryToolbar.addMouseMotionListener(dragListener); + } + + @Override + public void started(SearchRequest request) { + + } + + @Override + public void cancelled() { + + } + + @Override + public void finished(SearchRequest request, List results) { + SwingUtilities.invokeLater(() -> { + resultsList.setModel(new ResultsListModel(results)); + resultsList.setSelectedIndex(0); + enableFilterButton(results); + }); + } + + private synchronized void enableFilterButton(List results) { + ActionListener[] listeners = filterButton.getActionListeners(); + for (ActionListener listener : listeners) { + filterButton.removeActionListener(listener); + } + List types = results.stream() + .map(r -> r.getResult().getClass()).distinct().collect(Collectors.toUnmodifiableList()); + boolean enabled = types.size() == 1 && + (Node.class.isAssignableFrom(types.get(0)) || Edge.class.isAssignableFrom(types.get(0))); + filterButton.setEnabled(enabled); + if (enabled) { + if (Node.class.isAssignableFrom(types.get(0))) { + filterButton.addActionListener(e -> filter(SearchCategoryImpl.NODES().getId())); + } else if (Edge.class.isAssignableFrom(types.get(0))) { + filterButton.addActionListener(e -> filter(SearchCategoryImpl.EDGES().getId())); + } + } + } + + private static class ResultRenderer implements ListCellRenderer { + + protected final DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer(); + + // Icons + private final ImageIcon nodeIcon = ImageUtilities.loadImageIcon("DesktopSearch/node.svg", false); + private final ImageIcon edgeIcon = ImageUtilities.loadImageIcon("DesktopSearch/edge.svg", false); + + private final Color selectionBackground = UIManager.getColor("List.selectionBackground"); + private final Color selectionForeground = UIManager.getColor("List.selectionForeground"); + + @Override + public Component getListCellRendererComponent(JList list, SearchResult value, int index, + boolean isSelected, boolean cellHasFocus) { + JLabel renderer = (JLabel) defaultRenderer.getListCellRendererComponent(list, value, index, + isSelected, isSelected); + + // So it looks like if the list had focus + if (isSelected) { + renderer.setBackground(selectionBackground); + renderer.setForeground(selectionForeground); + } + + Object val = value.getResult(); + if (val instanceof Node) { + renderer.setIcon(nodeIcon); + } else if (val instanceof Edge) { + renderer.setIcon(edgeIcon); + } + + return renderer; + } + } + + private static class ResultsListModel extends AbstractListModel { + + private final List results; + + public ResultsListModel(List results) { + this.results = results; + } + + @Override + public int getSize() { + return results.size(); + } + + @Override + public SearchResult getElementAt(int index) { + return results.get(index); + } + } + + @FunctionalInterface + public interface SimpleDocumentListener extends DocumentListener { + void update(DocumentEvent e); + + @Override + default void insertUpdate(DocumentEvent e) { + update(e); + } + + @Override + default void removeUpdate(DocumentEvent e) { + update(e); + } + + @Override + default void changedUpdate(DocumentEvent e) { + update(e); + } + } + + /** + * Dialog that can be dragged by clicking anywhere on it. + */ + private class DragListener extends MouseInputAdapter { + Point location; + MouseEvent pressed; + Component componentToMove; + + public DragListener(JDialog dialog) { + componentToMove = dialog; + } + + public void mousePressed(MouseEvent me) { + pressed = me; + } + + public void mouseDragged(MouseEvent me) { + location = componentToMove.getLocation(location); + int x = location.x - pressed.getX() + me.getX(); + int y = location.y - pressed.getY() + me.getY(); + componentToMove.setLocation(x, y); + } + } + + public static boolean isGraphOpened() { + return TopComponent.getRegistry().getOpened().stream() + .map(tc -> WindowManager.getDefault().findTopComponentID(tc)) + .anyMatch(id -> id.equals("GraphTopComponent")); + } + + public static boolean isDataLabOpened() { + return TopComponent.getRegistry().getOpened().stream() + .map(tc -> WindowManager.getDefault().findTopComponentID(tc)) + .anyMatch(id -> id.equals("DataTableTopComponent")); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + topPanel = new javax.swing.JPanel(); + optionToolbar = new javax.swing.JToolBar(); + filterButton = new javax.swing.JButton(); + searchField = new javax.swing.JTextField(); + categoryToolbar = new javax.swing.JToolBar(); + allCategoriesButton = new javax.swing.JToggleButton(); + resultsList = new javax.swing.JList<>(); + + setBorder(javax.swing.BorderFactory.createLineBorder(javax.swing.UIManager.getDefaults().getColor("Button.borderColor"))); + setLayout(new java.awt.BorderLayout()); + + topPanel.setLayout(new java.awt.BorderLayout()); + + optionToolbar.setRollover(true); + + filterButton.setIcon(ImageUtilities.loadImageIcon("DesktopSearch/filter.svg", false) + ); + filterButton.setToolTipText(org.openide.util.NbBundle.getMessage(SearchDialog.class, + "SearchDialog.filterButton.toolTipText")); // NOI18N + filterButton.setFocusable(false); + filterButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); + filterButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); + optionToolbar.add(filterButton); + + topPanel.add(optionToolbar, java.awt.BorderLayout.EAST); + topPanel.add(searchField, java.awt.BorderLayout.SOUTH); + + categoryToolbar.setRollover(true); + + org.openide.awt.Mnemonics.setLocalizedText(allCategoriesButton, + org.openide.util.NbBundle.getMessage(SearchDialog.class, + "SearchDialog.allCategoriesButton.text")); // NOI18N + allCategoriesButton.setFocusable(false); + allCategoriesButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); + allCategoriesButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); + categoryToolbar.add(allCategoriesButton); + + topPanel.add(categoryToolbar, java.awt.BorderLayout.CENTER); + + add(topPanel, java.awt.BorderLayout.NORTH); + + resultsList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); + add(resultsList, java.awt.BorderLayout.CENTER); + }// //GEN-END:initComponents + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JToggleButton allCategoriesButton; + private javax.swing.JToolBar categoryToolbar; + private javax.swing.JButton filterButton; + private javax.swing.JToolBar optionToolbar; + private javax.swing.JList resultsList; + private javax.swing.JTextField searchField; + private javax.swing.JPanel topPanel; + // End of variables declaration//GEN-END:variables +} diff --git a/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/SearchUIModel.java b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/SearchUIModel.java new file mode 100644 index 0000000000..9b545427fd --- /dev/null +++ b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/SearchUIModel.java @@ -0,0 +1,20 @@ +package org.gephi.desktop.search; + +import java.util.Collection; +import org.gephi.desktop.search.api.SearchCategory; +import org.openide.util.Lookup; + +public class SearchUIModel { + + protected String query = ""; + + protected SearchCategory category; + + public void setCategory(SearchCategory category) { + this.category = category; + } + + protected Collection getCategories() { + return Lookup.getDefault().lookupAll(SearchCategory.class); + } +} diff --git a/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/api/SearchCategory.java b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/api/SearchCategory.java new file mode 100644 index 0000000000..ed2985a1e4 --- /dev/null +++ b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/api/SearchCategory.java @@ -0,0 +1,31 @@ +package org.gephi.desktop.search.api; + +import org.openide.util.Lookup; + +public interface SearchCategory { + + /** + * Return the unique identifier of this category. + * + * @return the unique identifier of this category + */ + String getId(); + + /** + * Return the display name of this category. + * + * @return the display name of this category + */ + String getDisplayName(); + + /** + * Find the category by its unique identifier. + * + * @param id the unique identifier of the category + * @return the category or null if not found + */ + static SearchCategory findById(String id) { + return Lookup.getDefault().lookupAll(SearchCategory.class).stream() + .filter(c -> c.getId().equals(id)).findFirst().orElse(null); + } +} diff --git a/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/api/SearchController.java b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/api/SearchController.java new file mode 100644 index 0000000000..08c379eb5f --- /dev/null +++ b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/api/SearchController.java @@ -0,0 +1,34 @@ +package org.gephi.desktop.search.api; + +import java.util.List; + +/** + * Main entry point for search in the graph. + *

    + * This controller is a singleton and can therefore be found in Lookup: + *

    SearchController sc = Lookup.getDefault().lookup(SearchController.class);
    + */ +public interface SearchController { + + /** + * Search using the provided request. The search can only return homogeneous result types so that's why the type has to be provided. + *

    + * For instance, if the request is to search for nodes, the type has to be Node.class. + * + * @param request the search request + * @param typeFilter the type of the results + * @param the type of the results + * @return the search results + */ + List> search(SearchRequest request, Class typeFilter); + + /** + * Asynchronous search using the provided request. When the search is completed it would call the provided listener. + *

    + * Only one search can be running at a time. If a search is already running, it would be cancelled and its listener notified. + * + * @param request the search request + * @param listener the search listener + */ + void search(SearchRequest request, SearchListener listener); +} diff --git a/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/api/SearchListener.java b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/api/SearchListener.java new file mode 100644 index 0000000000..963dcfef23 --- /dev/null +++ b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/api/SearchListener.java @@ -0,0 +1,29 @@ +package org.gephi.desktop.search.api; + +import java.util.List; + +/** + * A listener for search results. + */ +public interface SearchListener { + + /** + * Called when the search is started. + * + * @param request the search request + */ + void started(SearchRequest request); + + /** + * Called when a search is cancelled. This usually happens when a new search has started afterwards. + */ + void cancelled(); + + /** + * Called when a search is finished. + * + * @param request the search request + * @param results the search results + */ + void finished(SearchRequest request, List results); +} diff --git a/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/api/SearchRequest.java b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/api/SearchRequest.java new file mode 100644 index 0000000000..9a060d3065 --- /dev/null +++ b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/api/SearchRequest.java @@ -0,0 +1,195 @@ +package org.gephi.desktop.search.api; + +import java.util.HashSet; +import java.util.Set; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphController; +import org.openide.util.Lookup; + +/** + * Encapsulate a search request. + *

    + * To build a search query, call the

    SearchRequest.builder()
    to get a builder. + */ +public interface SearchRequest { + + /** + * Return the search's query. + * + * @return the search's query + */ + String getQuery(); + + /** + * Return the graph to search in. + * + * @return the graph to search in + */ + Graph getGraph(); + + /** + * Return the categories to search in. If empty, all categories are searched. + *

    + * The returned set is immutable. + * + * @return the categories to search in + */ + Set getCategoryFilters(); + + /** + * Return true if the search is executed using multiple threads. + * + * @return true if parallel search, false otherwise + */ + boolean inParallel(); + + /** + * Return true if the search has a limit on the number of results. + * + * @return true if results are limited, false otherwise + */ + boolean isLimitResults(); + + /** + * Return true if the provided category is in the category filters. If not categories are set, it returns true. + * + * @param category the category to check + * @return true if the category is in the category filters, false otherwise + */ + default boolean isCategoryIncluded(SearchCategory category) { + Set categories = getCategoryFilters(); + return categories == null || categories.contains(category); + } + + /** + * Return a search request builder. + * + * @return a search request builder + */ + static Builder builder() { + return new Builder(); + } + + /** + * Builder for a search request. + *

    + * When configured, call the build() method to get the search request. + */ + class Builder { + + private String query; + private Graph graph; + private boolean parallel = true; + private boolean limitResults = true; + + private Set categories; + + private Builder() { + } + + /** + * Adds the provided category to the category filters. + * + * @param category the category to add + * @return this builder + */ + public Builder category(SearchCategory category) { + if (category == null) { + return this; + } + if (categories == null) { + categories = new HashSet<>(); + } + categories.add(category); + return this; + } + + /** + * Sets the query. + * + * @param query the query + * @return this builder + */ + public Builder query(String query) { + this.query = query; + return this; + } + + /** + * Sets the graph. If no graph is provided, it uses the graph from the current workspace. + * + * @param graph the graph + * @return this builder + */ + public Builder graph(Graph graph) { + this.graph = graph; + return this; + } + + /** + * Sets the parallel flag. It controls whether the search is executed using multiple threads. + * + * @param parallel true if parallel search, false otherwise + * @return this builder + */ + public Builder parallel(boolean parallel) { + this.parallel = parallel; + return this; + } + + /** + * Sets the limit results flag. It controls whether the search has a limit on the number of results. + * + * @param limitResults true if results are limited, false otherwise + * @return this builder + */ + public Builder limitResults(boolean limitResults) { + this.limitResults = limitResults; + return this; + } + + /** + * Builds the search request. + * + * @return the search request + */ + public SearchRequest build() { + if (query == null || query.trim().isEmpty()) { + throw new IllegalArgumentException("Query cannot be null or empty"); + } + if (graph == null) { + GraphController gc = Lookup.getDefault().lookup(GraphController.class); + if (gc.getGraphModel() == null) { + throw new IllegalStateException("Workspace cannot be null if there is no current project"); + } + graph = gc.getGraphModel().getGraph(); + } + return new SearchRequest() { + @Override + public String getQuery() { + return query; + } + + @Override + public Graph getGraph() { + return graph; + } + + @Override + public Set getCategoryFilters() { + return categories; + } + + @Override + public boolean inParallel() { + return parallel; + } + + @Override + public boolean isLimitResults() { + return limitResults; + } + }; + } + } +} diff --git a/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/api/SearchResult.java b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/api/SearchResult.java new file mode 100644 index 0000000000..d93f935230 --- /dev/null +++ b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/api/SearchResult.java @@ -0,0 +1,20 @@ +package org.gephi.desktop.search.api; + +public interface SearchResult { + + /** + * Return the search result object. + * + * @return the search result object + */ + T getResult(); + + /** + * Return the HTML display of the search result. + * + * @return the HTML display of the search result + */ + String getHtmlDisplay(); + + String getMatchLocation(); +} diff --git a/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/filter/SearchFilterBuilder.java b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/filter/SearchFilterBuilder.java new file mode 100644 index 0000000000..fb3ab36c45 --- /dev/null +++ b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/filter/SearchFilterBuilder.java @@ -0,0 +1,129 @@ +package org.gephi.desktop.search.filter; + +import java.util.List; +import java.util.stream.Collectors; +import javax.swing.Icon; +import javax.swing.JPanel; +import org.gephi.desktop.search.api.SearchController; +import org.gephi.desktop.search.api.SearchRequest; +import org.gephi.desktop.search.api.SearchResult; +import org.gephi.desktop.search.impl.SearchCategoryImpl; +import org.gephi.filters.api.FilterLibrary; +import org.gephi.filters.spi.Category; +import org.gephi.filters.spi.ComplexFilter; +import org.gephi.filters.spi.Filter; +import org.gephi.filters.spi.FilterBuilder; +import org.gephi.filters.spi.FilterProperty; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.Subgraph; +import org.gephi.project.api.Workspace; +import org.openide.util.Exceptions; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +@ServiceProvider(service = FilterBuilder.class) +public class SearchFilterBuilder implements FilterBuilder { + + @Override + public Category getCategory() { + return FilterLibrary.ATTRIBUTES; + } + + @Override + public String getName() { + return NbBundle.getMessage(SearchFilterBuilder.class, "SearchFilterBuilder.name"); + } + + @Override + public Icon getIcon() { + return ImageUtilities.loadImageIcon("DesktopSearch/search.svg", false); + } + + @Override + public String getDescription() { + return NbBundle.getMessage(SearchFilterBuilder.class, "SearchFilterBuilder.description"); + } + + @Override + public Filter getFilter(Workspace workspace) { + return new SearchFilter(); + } + + @Override + public JPanel getPanel(Filter filter) { + SearchPanel panel = new SearchPanel(); + panel.setup((SearchFilter) filter); + return panel; + } + + @Override + public void destroy(Filter filter) { + + } + + public static class SearchFilter implements ComplexFilter { + + private String query; + private String type; + + public SearchFilter() { + type = SearchCategoryImpl.NODES().getId(); + } + + @Override + public Graph filter(Graph graph) { + if (query == null || query.isEmpty()) { + return graph; + } + SearchRequest request = + SearchRequest.builder().query(query).graph(graph).parallel(false).limitResults(false).build(); + SearchController searchController = Lookup.getDefault().lookup(SearchController.class); + Subgraph subgraph = graph.getModel().getGraph(graph.getView()); + if (type.equalsIgnoreCase(SearchCategoryImpl.NODES().getId())) { + List nodes = searchController.search(request, Node.class).stream() + .map(SearchResult::getResult).collect(Collectors.toList()); + subgraph.retainNodes(nodes); + } else if (type.equalsIgnoreCase(SearchCategoryImpl.EDGES().getId())) { + List edges = searchController.search(request, Edge.class).stream() + .map(SearchResult::getResult).collect(Collectors.toList()); + subgraph.retainEdges(edges); + } + return subgraph; + } + + public String getName() { + return NbBundle.getMessage(SearchFilterBuilder.class, "SearchFilter.name"); + } + + public FilterProperty[] getProperties() { + try { + return new FilterProperty[] { + FilterProperty.createProperty(this, String.class, "query"), + FilterProperty.createProperty(this, String.class, "type")}; + } catch (NoSuchMethodException ex) { + Exceptions.printStackTrace(ex); + } + return new FilterProperty[0]; + } + + public String getQuery() { + return query; + } + + public void setQuery(String query) { + this.query = query; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + } +} diff --git a/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/filter/SearchPanel.form b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/filter/SearchPanel.form new file mode 100644 index 0000000000..d9063f4e29 --- /dev/null +++ b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/filter/SearchPanel.form @@ -0,0 +1,83 @@ + + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/filter/SearchPanel.java b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/filter/SearchPanel.java new file mode 100644 index 0000000000..9316eb9145 --- /dev/null +++ b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/filter/SearchPanel.java @@ -0,0 +1,91 @@ +package org.gephi.desktop.search.filter; + +import javax.swing.DefaultComboBoxModel; +import org.gephi.desktop.search.api.SearchCategory; +import org.gephi.desktop.search.impl.SearchCategoryImpl; + +public class SearchPanel extends javax.swing.JPanel { + + public SearchPanel() { + initComponents(); + + // Combo + DefaultComboBoxModel comboBoxModel = new DefaultComboBoxModel<>(); + comboBoxModel.addElement(SearchCategoryImpl.NODES()); + comboBoxModel.addElement(SearchCategoryImpl.EDGES()); + ; + typeCombo.setModel(comboBoxModel); + typeCombo.setSelectedIndex(0); + } + + public void setup(SearchFilterBuilder.SearchFilter filter) { + searchField.setText(filter.getQuery()); + typeCombo.setSelectedItem(SearchCategory.findById(filter.getType())); + searchButton.addActionListener(evt -> { + filter.getProperties()[0].setValue(searchField.getText()); + filter.getProperties()[1].setValue(((SearchCategory) typeCombo.getSelectedItem()).getId()); + }); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + searchField = new javax.swing.JTextField(); + typeCombo = new javax.swing.JComboBox<>(); + searchButton = new javax.swing.JButton(); + searchInLabel = new javax.swing.JLabel(); + + org.openide.awt.Mnemonics.setLocalizedText(searchButton, + org.openide.util.NbBundle.getMessage(SearchPanel.class, "SearchPanel.searchButton.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(searchInLabel, + org.openide.util.NbBundle.getMessage(SearchPanel.class, "SearchPanel.searchInLabel.text")); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(searchInLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(typeCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addComponent(searchField, javax.swing.GroupLayout.DEFAULT_SIZE, 161, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(searchButton))) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(searchInLabel) + .addComponent(typeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(searchField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(searchButton)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + }// //GEN-END:initComponents + + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton searchButton; + private javax.swing.JTextField searchField; + private javax.swing.JLabel searchInLabel; + private javax.swing.JComboBox typeCombo; + // End of variables declaration//GEN-END:variables +} diff --git a/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/impl/SearchCategoryImpl.java b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/impl/SearchCategoryImpl.java new file mode 100644 index 0000000000..f3d71c2a4d --- /dev/null +++ b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/impl/SearchCategoryImpl.java @@ -0,0 +1,72 @@ +package org.gephi.desktop.search.impl; + +import org.gephi.desktop.search.api.SearchCategory; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +public abstract class SearchCategoryImpl implements SearchCategory { + + private static final String NODE_ID = "Nodes"; + private static final String EDGE_ID = "Edges"; + + @ServiceProvider(service = SearchCategory.class, position = 100) + public static final class NodeSearchCategoryImpl extends SearchCategoryImpl { + + @Override + public String getId() { + return NODE_ID; + } + } + + @ServiceProvider(service = SearchCategory.class, position = 200) + public static final class EdgeSearchCategoryImpl extends SearchCategoryImpl { + + @Override + public String getId() { + return EDGE_ID; + } + } + + public static SearchCategory NODES() { + return Lookup.getDefault().lookupAll(SearchCategory.class).stream() + .filter(c -> c.getId().equals(NODE_ID)).findFirst().orElse(null); + } + + public static SearchCategory EDGES() { + return Lookup.getDefault().lookupAll(SearchCategory.class).stream() + .filter(c -> c.getId().equals(EDGE_ID)).findFirst().orElse(null); + } + + @Override + public abstract String getId(); + + @Override + public String getDisplayName() { + return NbBundle.getMessage(SearchCategoryImpl.class, "Category." + getId() + ".displayName"); + } + + @Override + public String toString() { + return getDisplayName(); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof SearchCategoryImpl)) { + return false; + } + + SearchCategory that = (SearchCategory) o; + + return getId().equals(that.getId()); + } + + @Override + public int hashCode() { + return getId().hashCode(); + } +} diff --git a/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/impl/SearchControllerImpl.java b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/impl/SearchControllerImpl.java new file mode 100644 index 0000000000..123b0b2fca --- /dev/null +++ b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/impl/SearchControllerImpl.java @@ -0,0 +1,189 @@ +package org.gephi.desktop.search.impl; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Queue; +import java.util.Set; +import java.util.concurrent.CancellationException; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.ForkJoinPool; +import java.util.concurrent.ForkJoinTask; +import java.util.concurrent.Future; +import java.util.stream.Collectors; +import org.gephi.desktop.search.api.SearchController; +import org.gephi.desktop.search.api.SearchListener; +import org.gephi.desktop.search.api.SearchRequest; +import org.gephi.desktop.search.api.SearchResult; +import org.gephi.desktop.search.spi.SearchProvider; +import org.openide.util.Lookup; +import org.openide.util.lookup.ServiceProvider; + +@ServiceProvider(service = SearchController.class) +public class SearchControllerImpl implements SearchController { + + private final ExecutorService pool; + private final List> currentSearch = new ArrayList<>(); + private SearchSession currentSession; + private SearchListener currentListener; + private final static int MAX_RESULTS = 10; + + public SearchControllerImpl() { + pool = Executors.newCachedThreadPool(); + } + + protected void shutdown() { + pool.shutdown(); + } + + @Override + public List> search(SearchRequest request, Class typeFilter) { + SearchSession session = new SearchSession<>(request, Collections.singleton(typeFilter)); + + if (request.inParallel()) { + ForkJoinPool commonPool = ForkJoinPool.commonPool(); + getProviderTasks(request, session).stream().map(commonPool::submit).forEach(ForkJoinTask::join); + } else { + getProviderTasks(request, session).forEach(Runnable::run); + } + + return session.getResults(); + } + + @Override + public void search(SearchRequest request, SearchListener listener) { + synchronized (currentSearch) { + // Cancel current search if exists + currentSearch.forEach(f -> f.cancel(false)); + currentSearch.clear(); + if (currentSession != null) { + if (currentSession.markObsolete()) { + currentListener.cancelled(); + } + } + + // Create new search + currentSession = new SearchSession<>(request); + currentListener = listener; + currentListener.started(request); + + // Submit provider tasks + getProviderTasks(request, currentSession).stream() + .map(r -> pool.submit((Runnable) r)).forEach(f -> currentSearch.add((Future) f)); + + // Join task + final List> providerTasks = currentSearch; + final SearchSession session = currentSession; + pool.submit(() -> { + for (Future f : providerTasks) { + try { + f.get(); + } catch (CancellationException | InterruptedException ex) { + // ignore + } catch (ExecutionException ex) { + throw new RuntimeException(ex); + } + } + // Synchronize with cancellation logic to avoid race condition + synchronized (currentSearch) { + if (!session.isObsolete()) { + session.markFinished(); + listener.finished(session.request, session.getResults()); + } + } + }); + } + } + + protected List getProviderTasks(SearchRequest request, SearchSession session) { + List tasks = new ArrayList<>(); + int position = 0; + for (SearchProvider provider : Lookup.getDefault().lookupAll(SearchProvider.class)) { + final int providerPosition = position++; + tasks.add(() -> { + SearchResultsBuilderImpl resultsBuilder = + new SearchResultsBuilderImpl<>(provider, providerPosition, + request.isLimitResults() ? MAX_RESULTS : Integer.MAX_VALUE); + session.addBuilder(resultsBuilder); + provider.search(request, resultsBuilder); + + session.addResult(resultsBuilder.getResults()); + }); + } + return tasks; + } + + private static class SearchSession { + + final SearchRequest request; + final Set> classFilters; + final Map> resultSet; + final Queue> builders; + volatile boolean obsolete; + volatile boolean finished; + + public SearchSession(SearchRequest request) { + this(request, Collections.emptySet()); + } + + public SearchSession(SearchRequest request, Set> classFilters) { + this.request = request; + this.classFilters = classFilters; + this.resultSet = new ConcurrentHashMap<>(); + this.builders = new ConcurrentLinkedQueue<>(); + } + + protected void addBuilder(SearchResultsBuilderImpl builder) { + builders.add(builder); + } + + protected boolean markObsolete() { + this.obsolete = true; + SearchResultsBuilderImpl builder; + while ((builder = builders.poll()) != null) { + builder.markObsolete(); + } + return !finished; + } + + protected void markFinished() { + this.finished = true; + } + + public boolean isObsolete() { + return obsolete; + } + + protected void addResult(List> results) { + results.stream().filter(r -> passClassFilters(r.getResult())) + .forEach(key -> resultSet.merge(key.getResult(), key, (oldValue, newValue) -> { + if (newValue.getPosition() < oldValue.getPosition()) { + return newValue; + } else { + return oldValue; + } + })); + } + + protected List> getResults() { + return resultSet.values().stream().sorted().collect(Collectors.toList()); + } + + protected boolean passClassFilters(T result) { + if (classFilters.isEmpty()) { + return true; + } + for (Class cls : classFilters) { + if (cls.isAssignableFrom(result.getClass())) { + return true; + } + } + return false; + } + } +} diff --git a/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/impl/SearchResultImpl.java b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/impl/SearchResultImpl.java new file mode 100644 index 0000000000..516c6847d9 --- /dev/null +++ b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/impl/SearchResultImpl.java @@ -0,0 +1,75 @@ +package org.gephi.desktop.search.impl; + +import org.gephi.desktop.search.api.SearchResult; +import org.gephi.desktop.search.spi.SearchProvider; + +public class SearchResultImpl implements SearchResult, Comparable> { + + private final T result; + private final SearchProvider provider; + private final int position; + private final String htmlDisplay; + + private final String matchLocation; + + public SearchResultImpl(SearchProvider provider, int position, T result, String htmlDisplay, + String matchLocation) { + this.provider = provider; + this.position = position; + this.result = result; + this.htmlDisplay = htmlDisplay; + this.matchLocation = matchLocation; + } + + @Override + public T getResult() { + return result; + } + + protected SearchProvider getProvider() { + return provider; + } + + @Override + public String getHtmlDisplay() { + return htmlDisplay; + } + + @Override + public String getMatchLocation() { + return matchLocation; + } + + public int getPosition() { + return position; + } + + @Override + public String toString() { + return "" + getHtmlDisplay() + " " + getMatchLocation() + ""; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + SearchResultImpl that = (SearchResultImpl) o; + + return result.equals(that.result); + } + + @Override + public int hashCode() { + return result.hashCode(); + } + + @Override + public int compareTo(SearchResultImpl o) { + return Integer.compare(position, o.position); + } +} diff --git a/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/impl/SearchResultsBuilderImpl.java b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/impl/SearchResultsBuilderImpl.java new file mode 100644 index 0000000000..7de7f9c21f --- /dev/null +++ b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/impl/SearchResultsBuilderImpl.java @@ -0,0 +1,44 @@ +package org.gephi.desktop.search.impl; + +import java.util.ArrayList; +import java.util.List; +import org.gephi.desktop.search.spi.SearchProvider; +import org.gephi.desktop.search.spi.SearchResultsBuilder; + +public class SearchResultsBuilderImpl implements SearchResultsBuilder { + + private boolean obsolete = false; + private final int maxResults; + private final List> resultsList; + private final SearchProvider provider; + private int position; + + public SearchResultsBuilderImpl(SearchProvider provider, int position, int maxResults) { + this.provider = provider; + this.position = position; + this.maxResults = maxResults; + this.resultsList = new ArrayList<>(); + } + + @Override + public synchronized boolean addResult(T result, String htmlDisplayText, String matchLocation) { + if (result == null) { + throw new NullPointerException("Result cannot be null"); + } + resultsList.add(new SearchResultImpl<>(provider, position, result, htmlDisplayText, matchLocation)); + return !obsolete && resultsList.size() < maxResults; + } + + @Override + public boolean isObsolete() { + return obsolete; + } + + protected List> getResults() { + return resultsList; + } + + protected void markObsolete() { + this.obsolete = true; + } +} diff --git a/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/plugin/EdgeIdSearchProvider.java b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/plugin/EdgeIdSearchProvider.java new file mode 100644 index 0000000000..f79b38c1bd --- /dev/null +++ b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/plugin/EdgeIdSearchProvider.java @@ -0,0 +1,30 @@ +package org.gephi.desktop.search.plugin; + +import org.gephi.desktop.search.api.SearchRequest; +import org.gephi.desktop.search.impl.SearchCategoryImpl; +import org.gephi.desktop.search.spi.SearchProvider; +import org.gephi.desktop.search.spi.SearchResultsBuilder; +import org.gephi.graph.api.Edge; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +@ServiceProvider(service = SearchProvider.class, position = 110) +public class EdgeIdSearchProvider implements SearchProvider { + + @Override + public void search(SearchRequest request, SearchResultsBuilder resultsBuilder) { + if (request.isCategoryIncluded(SearchCategoryImpl.EDGES())) { + Edge edge = request.getGraph().getEdge(request.getQuery()); + + if (edge != null) { + resultsBuilder.addResult(edge, toHtmlDisplay(edge), NbBundle.getMessage(EdgeIdSearchProvider.class, + "EdgeIdSearchProvider.match")); + } + } + } + + private String toHtmlDisplay(Edge edge) { + return NbBundle.getMessage(EdgeIdSearchProvider.class, + "EdgeIdSearchProvider.result", edge.getId()); + } +} diff --git a/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/plugin/ElementLabelSearchProvider.java b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/plugin/ElementLabelSearchProvider.java new file mode 100644 index 0000000000..757380776b --- /dev/null +++ b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/plugin/ElementLabelSearchProvider.java @@ -0,0 +1,63 @@ +package org.gephi.desktop.search.plugin; + +import org.gephi.desktop.search.api.SearchRequest; +import org.gephi.desktop.search.impl.SearchCategoryImpl; +import org.gephi.desktop.search.spi.SearchProvider; +import org.gephi.desktop.search.spi.SearchResultsBuilder; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.ElementIterable; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +@ServiceProvider(service = SearchProvider.class, position = 120) +public class ElementLabelSearchProvider implements SearchProvider { + + @Override + public void search(SearchRequest request, SearchResultsBuilder resultsBuilder) { + + String query = request.getQuery(); + + // Exact node label + if (request.isCategoryIncluded(SearchCategoryImpl.NODES())) { + matchElementLabel(request.getGraph().getNodes(), query, resultsBuilder); + } + + + // Exact edge label + if (request.isCategoryIncluded(SearchCategoryImpl.EDGES())) { + matchElementLabel(request.getGraph().getEdges(), query, resultsBuilder); + } + } + + protected void matchElementLabel(ElementIterable iterable, String query, + SearchResultsBuilder resultsBuilder) { + final String matchLocation = toMatchLocation(); + + // Exact Node label + for (Element element : iterable) { + if (match(element, query)) { + if (!resultsBuilder.addResult(element, toHtmlDisplay(element, query), matchLocation)) { + iterable.doBreak(); + break; + } + } + if (resultsBuilder.isObsolete()) { + iterable.doBreak(); + break; + } + } + } + + protected boolean match(Element element, String query) { + return element.getLabel() != null && element.getLabel().equalsIgnoreCase(query); + } + + protected String toMatchLocation() { + return NbBundle.getMessage(ElementLabelSearchProvider.class, "ElementLabelSearchProvider.match"); + } + + protected String toHtmlDisplay(Element element, String query) { + return NbBundle.getMessage(ElementLabelSearchProvider.class, + "ElementLabelSearchProvider.result", element.getLabel()); + } +} diff --git a/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/plugin/FuzzyElementLabelSearchProvider.java b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/plugin/FuzzyElementLabelSearchProvider.java new file mode 100644 index 0000000000..89499f269c --- /dev/null +++ b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/plugin/FuzzyElementLabelSearchProvider.java @@ -0,0 +1,36 @@ +package org.gephi.desktop.search.plugin; + +import org.gephi.desktop.search.spi.SearchProvider; +import org.gephi.graph.api.Element; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + + +@ServiceProvider(service = SearchProvider.class, position = 140) +public class FuzzyElementLabelSearchProvider extends ElementLabelSearchProvider { + + @Override + protected boolean match(Element element, String query) { + return element.getLabel() != null && element.getLabel().toLowerCase().contains(query.toLowerCase()) && + !super.match(element, query); + } + + @Override + protected String toMatchLocation() { + return NbBundle.getMessage(FuzzyElementLabelSearchProvider.class, "FuzzyElementLabelSearchProvider.match"); + } + + @Override + protected String toHtmlDisplay(Element element, String query) { + String label = element.getLabel(); + + int index = label.toLowerCase().indexOf(query.toLowerCase()); + String before = label.substring(0, index); + String match = label.substring(index, index + query.length()); + String after = label.substring(index + query.length()); + return NbBundle.getMessage(FuzzyElementLabelSearchProvider.class, + "FuzzyElementLabelSearchProvider.result", + before, match, after); + } +} + diff --git a/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/plugin/NodeIdSearchProvider.java b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/plugin/NodeIdSearchProvider.java new file mode 100644 index 0000000000..be57200bf5 --- /dev/null +++ b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/plugin/NodeIdSearchProvider.java @@ -0,0 +1,30 @@ +package org.gephi.desktop.search.plugin; + +import org.gephi.desktop.search.api.SearchRequest; +import org.gephi.desktop.search.impl.SearchCategoryImpl; +import org.gephi.desktop.search.spi.SearchProvider; +import org.gephi.desktop.search.spi.SearchResultsBuilder; +import org.gephi.graph.api.Node; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +@ServiceProvider(service = SearchProvider.class, position = 100) +public class NodeIdSearchProvider implements SearchProvider { + + @Override + public void search(SearchRequest request, SearchResultsBuilder resultsBuilder) { + if (request.isCategoryIncluded(SearchCategoryImpl.NODES())) { + Node node = request.getGraph().getNode(request.getQuery()); + + if (node != null) { + resultsBuilder.addResult(node, toHtmlDisplay(node), NbBundle.getMessage(NodeIdSearchProvider.class, + "NodeIdSearchProvider.match")); + } + } + } + + public static String toHtmlDisplay(Node node) { + return NbBundle.getMessage(NodeIdSearchProvider.class, + "NodeIdSearchProvider.result", node.getId()); + } +} diff --git a/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/plugin/StartWithElementLabelSearchProvider.java b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/plugin/StartWithElementLabelSearchProvider.java new file mode 100644 index 0000000000..7c21cf1e28 --- /dev/null +++ b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/plugin/StartWithElementLabelSearchProvider.java @@ -0,0 +1,35 @@ +package org.gephi.desktop.search.plugin; + +import org.gephi.desktop.search.spi.SearchProvider; +import org.gephi.graph.api.Element; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + + +@ServiceProvider(service = SearchProvider.class, position = 130) +public class StartWithElementLabelSearchProvider extends ElementLabelSearchProvider { + + @Override + protected boolean match(Element element, String query) { + return element.getLabel() != null && element.getLabel().toLowerCase().startsWith(query.toLowerCase()) && + !super.match(element, query); + } + + @Override + protected String toMatchLocation() { + return NbBundle.getMessage(StartWithElementLabelSearchProvider.class, + "StartWithElementLabelSearchProvider.match"); + } + + @Override + protected String toHtmlDisplay(Element element, String query) { + String label = element.getLabel(); + + String match = label.substring(0, query.length()); + String after = label.substring(query.length()); + return NbBundle.getMessage(StartWithElementLabelSearchProvider.class, + "StartWithElementLabelSearchProvider.result", + match, after); + } +} + diff --git a/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/popup/ActionPopup.java b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/popup/ActionPopup.java new file mode 100644 index 0000000000..7f6d174674 --- /dev/null +++ b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/popup/ActionPopup.java @@ -0,0 +1,63 @@ +package org.gephi.desktop.search.popup; + +import java.awt.Point; +import java.awt.event.MouseAdapter; +import java.awt.event.MouseEvent; +import javax.swing.JList; +import javax.swing.JPopupMenu; +import javax.swing.SwingUtilities; +import org.gephi.desktop.search.api.SearchResult; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Node; + +public class ActionPopup extends MouseAdapter { + + private final JList list; + + public ActionPopup(JList list) { + super(); + this.list = list; + } + + @Override + public void mousePressed(MouseEvent e) { + maybePopup(e); + } + + @Override + public void mouseReleased(MouseEvent e) { + maybePopup(e); + } + + private void maybePopup(MouseEvent e) { + if (e.isPopupTrigger()) { + SwingUtilities.invokeLater(() -> { + final Point p = e.getPoint(); + int row = list.locationToIndex(e.getPoint()); + list.setSelectedIndex(row); + final JPopupMenu pop = createPopup(p); + if (pop != null) { + showPopup(p.x, p.y, pop); + } + }); + } + } + + protected JPopupMenu createPopup(Point p) { + SearchResult result = list.getSelectedValue(); + if (result != null) { + if (result.getResult() instanceof Node) { + return NodePopup.createPopup((Node) result.getResult()); + } else if (result.getResult() instanceof Edge) { + return EdgePopup.createPopup((Edge) result.getResult()); + } + } + return null; + } + + private void showPopup(int xpos, int ypos, final JPopupMenu popup) { + if ((popup != null) && (popup.getSubElements().length > 0)) { + popup.show(list, xpos, ypos); + } + } +} diff --git a/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/popup/EdgePopup.java b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/popup/EdgePopup.java new file mode 100644 index 0000000000..9f1d0c769a --- /dev/null +++ b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/popup/EdgePopup.java @@ -0,0 +1,64 @@ +package org.gephi.desktop.search.popup; + +import java.util.List; +import java.util.Set; +import javax.swing.JPopupMenu; +import org.gephi.datalab.api.DataLaboratoryHelper; +import org.gephi.datalab.plugin.manipulators.edges.CopyEdgeDataToOtherEdges; +import org.gephi.datalab.plugin.manipulators.edges.SelectNodesOnTable; +import org.gephi.datalab.plugin.manipulators.edges.SelectOnGraph; +import org.gephi.datalab.plugin.manipulators.edges.SelectSourceOnGraph; +import org.gephi.datalab.plugin.manipulators.edges.SelectTargetOnGraph; +import org.gephi.datalab.spi.Manipulator; +import org.gephi.datalab.spi.edges.EdgesManipulator; +import org.gephi.desktop.datalab.utils.PopupMenuUtils; +import org.gephi.desktop.search.SearchDialog; +import org.gephi.graph.api.Edge; + +public class EdgePopup { + + protected static final Set> excludedManipulators = Set.copyOf(List.of( + CopyEdgeDataToOtherEdges.class)); + + protected static final Set> graphManipulators = Set.copyOf(List.of( + SelectOnGraph.class, + SelectSourceOnGraph.class, + SelectTargetOnGraph.class)); + + protected static final Set> datalabManipulators = Set.copyOf(List.of( + SelectNodesOnTable.class)); + + protected static JPopupMenu createPopup(Edge selectedElement) { + boolean graphOpened = SearchDialog.isGraphOpened(); + boolean datalabOpened = SearchDialog.isDataLabOpened(); + + JPopupMenu contextMenu = new JPopupMenu(); + + DataLaboratoryHelper dlh = DataLaboratoryHelper.getDefault(); + Integer lastManipulatorType = null; + for (EdgesManipulator em : dlh.getEdgesManipulators()) { + if (!excludedManipulators.contains(em.getClass())) { + if (!graphOpened && graphManipulators.contains(em.getClass())) { + continue; + } + if (!datalabOpened && datalabManipulators.contains(em.getClass())) { + continue; + } + em.setup(new Edge[] {selectedElement}, selectedElement); + if (lastManipulatorType == null) { + lastManipulatorType = em.getType(); + } + if (lastManipulatorType != em.getType()) { + contextMenu.addSeparator(); + } + lastManipulatorType = em.getType(); + if (em.isAvailable()) { + contextMenu.add(PopupMenuUtils + .createMenuItemFromEdgesManipulator(em, selectedElement, new Edge[] {selectedElement})); + } + } + } + + return contextMenu; + } +} diff --git a/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/popup/NodePopup.java b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/popup/NodePopup.java new file mode 100644 index 0000000000..9e3a9db269 --- /dev/null +++ b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/popup/NodePopup.java @@ -0,0 +1,66 @@ +package org.gephi.desktop.search.popup; + +import java.util.List; +import java.util.Set; +import javax.swing.JPopupMenu; +import org.gephi.datalab.api.DataLaboratoryHelper; +import org.gephi.datalab.plugin.manipulators.nodes.CopyNodeDataToOtherNodes; +import org.gephi.datalab.plugin.manipulators.nodes.LinkNodes; +import org.gephi.datalab.plugin.manipulators.nodes.MergeNodes; +import org.gephi.datalab.plugin.manipulators.nodes.SelectEdgesOnTable; +import org.gephi.datalab.plugin.manipulators.nodes.SelectNeighboursOnTable; +import org.gephi.datalab.plugin.manipulators.nodes.SelectOnGraph; +import org.gephi.datalab.spi.Manipulator; +import org.gephi.datalab.spi.nodes.NodesManipulator; +import org.gephi.desktop.datalab.utils.PopupMenuUtils; +import org.gephi.desktop.search.SearchDialog; +import org.gephi.graph.api.Node; + +public class NodePopup { + + protected static final Set> excludedManipulators = Set.copyOf(List.of( + MergeNodes.class, + LinkNodes.class, + CopyNodeDataToOtherNodes.class)); + + protected static final Set> graphManipulators = Set.copyOf(List.of( + SelectOnGraph.class)); + + protected static final Set> datalabManipulators = Set.copyOf(List.of( + SelectNeighboursOnTable.class, + SelectEdgesOnTable.class)); + + protected static JPopupMenu createPopup(Node selectedElement) { + boolean graphOpened = SearchDialog.isGraphOpened(); + boolean datalabOpened = SearchDialog.isDataLabOpened(); + + JPopupMenu contextMenu = new JPopupMenu(); + + DataLaboratoryHelper dlh = DataLaboratoryHelper.getDefault(); + Integer lastManipulatorType = null; + for (NodesManipulator em : dlh.getNodesManipulators()) { + if (!excludedManipulators.contains(em.getClass())) { + if (!graphOpened && graphManipulators.contains(em.getClass())) { + continue; + } + if (!datalabOpened && datalabManipulators.contains(em.getClass())) { + continue; + } + em.setup(new Node[] {selectedElement}, selectedElement); + if (lastManipulatorType == null) { + lastManipulatorType = em.getType(); + } + if (lastManipulatorType != em.getType()) { + contextMenu.addSeparator(); + } + lastManipulatorType = em.getType(); + if (em.isAvailable()) { + contextMenu.add(PopupMenuUtils + .createMenuItemFromNodesManipulator(em, selectedElement, new Node[] {selectedElement})); + } + } + } + + return contextMenu; + } +} diff --git a/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/spi/SearchProvider.java b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/spi/SearchProvider.java new file mode 100644 index 0000000000..53a39fdd82 --- /dev/null +++ b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/spi/SearchProvider.java @@ -0,0 +1,25 @@ +package org.gephi.desktop.search.spi; + +import org.gephi.desktop.search.api.SearchRequest; + +/** + * Search providers are responsible for searching in the graph and append the results to the search results builder. + *

    + * It's expected that multiple search providers are called in parallel and search differently. For instance, one provider + * could search for nodes based on labels and another one could search for edges based on identifiers. + *

    + * A search provider can only return homogeneous results. For instance, it cannot mix nodes and edges in the same search. + * Two different search providers should be used for that. + * + * @param the type of the results + */ +public interface SearchProvider { + + /** + * Execute a search. The search results need to be added to the search results builder. + * + * @param request the search request + * @param resultsBuilder the search results builder to append the results to + */ + void search(SearchRequest request, SearchResultsBuilder resultsBuilder); +} diff --git a/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/spi/SearchResultsBuilder.java b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/spi/SearchResultsBuilder.java new file mode 100644 index 0000000000..4f25a3d049 --- /dev/null +++ b/modules/DesktopSearch/src/main/java/org/gephi/desktop/search/spi/SearchResultsBuilder.java @@ -0,0 +1,28 @@ +package org.gephi.desktop.search.spi; + +/** + * Used by {@link SearchProvider} to append search results to. + * + * @param the type of the results + */ +public interface SearchResultsBuilder { + + /** + * Add a search result. + *

    + * Return false if the search is obsolete or if the maximum number of results has been reached. + * + * @param result the search result + * @param htmlDisplayText the HTML display text + * @param matchLocation the match location + * @return true if the result was added, false if the result was not added + */ + boolean addResult(T result, String htmlDisplayText, String matchLocation); + + /** + * Return true if the search has been already cancelled. + * + * @return true if the search has been already cancelled + */ + boolean isObsolete(); +} diff --git a/modules/DesktopSearch/src/main/nbm/manifest.mf b/modules/DesktopSearch/src/main/nbm/manifest.mf new file mode 100644 index 0000000000..b4637cde8a --- /dev/null +++ b/modules/DesktopSearch/src/main/nbm/manifest.mf @@ -0,0 +1,6 @@ +Manifest-Version: 1.0 +OpenIDE-Module-Localizing-Bundle: org/gephi/desktop/search/Bundle.properties +AutoUpdate-Essential-Module: true +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi UI +OpenIDE-Module-Name: Desktop Search diff --git a/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/Bundle.properties b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/Bundle.properties new file mode 100644 index 0000000000..2075cf0bb8 --- /dev/null +++ b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/Bundle.properties @@ -0,0 +1,7 @@ +OpenIDE-Module-Long-Description=Provide graph search functionality and its related UI +OpenIDE-Module-Short-Description=Search within the graph + +CTL_Search=Search... +SearchDialog.title=Search +SearchDialog.allCategoriesButton.text=All +SearchDialog.filterButton.toolTipText=Create Filter with the current query (only active when all the results are nodes or edges) diff --git a/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/Bundle_ar.properties b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/Bundle_th.properties b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/filter/Bundle.properties b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/filter/Bundle.properties new file mode 100644 index 0000000000..e38dc39f3a --- /dev/null +++ b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/filter/Bundle.properties @@ -0,0 +1,5 @@ +SearchFilterBuilder.name=Search +SearchFilterBuilder.description=Custom filter created from the Search window +SearchFilter.name=Search +SearchPanel.searchButton.text=Update +SearchPanel.searchInLabel.text=Search in: diff --git a/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/filter/Bundle_ar.properties b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/filter/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/filter/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/filter/Bundle_fr.properties b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/filter/Bundle_fr.properties new file mode 100644 index 0000000000..26855d2137 --- /dev/null +++ b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/filter/Bundle_fr.properties @@ -0,0 +1,5 @@ +SearchFilterBuilder.name=Recherche +SearchFilter.name=Recherche +SearchPanel.searchButton.text=Mise ΰ jour +SearchPanel.searchInLabel.text=Recherche dans : +SearchFilterBuilder.description=Filtre personnalisι crιι ΰ partir de la fenκtre Recherche diff --git a/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/filter/Bundle_th.properties b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/filter/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/filter/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/impl/Bundle.properties b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/impl/Bundle.properties new file mode 100644 index 0000000000..fec428c67d --- /dev/null +++ b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/impl/Bundle.properties @@ -0,0 +1,2 @@ +Category.Nodes.displayName=Nodes +Category.Edges.displayName=Edges \ No newline at end of file diff --git a/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/impl/Bundle_ar.properties b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/impl/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/impl/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/impl/Bundle_fr.properties b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/impl/Bundle_fr.properties new file mode 100644 index 0000000000..d6bb37c67c --- /dev/null +++ b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/impl/Bundle_fr.properties @@ -0,0 +1,2 @@ +Category.Nodes.displayName=Noeuds +Category.Edges.displayName=Liens diff --git a/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/impl/Bundle_th.properties b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/impl/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/impl/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/plugin/Bundle.properties b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/plugin/Bundle.properties new file mode 100644 index 0000000000..252c40635c --- /dev/null +++ b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/plugin/Bundle.properties @@ -0,0 +1,13 @@ +NodeIdSearchProvider.result={0} +NodeIdSearchProvider.match=Id +EdgeIdSearchProvider.result={0} +EdgeIdSearchProvider.match=Id + +ElementLabelSearchProvider.result={0} +ElementLabelSearchProvider.match=Label + +FuzzyElementLabelSearchProvider.result={0}{1}{2} +FuzzyElementLabelSearchProvider.match=Label + +StartWithElementLabelSearchProvider.result={0}{1} +StartWithElementLabelSearchProvider.match=Label \ No newline at end of file diff --git a/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/plugin/Bundle_ar.properties b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/plugin/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/plugin/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/plugin/Bundle_fr.properties b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/plugin/Bundle_fr.properties new file mode 100644 index 0000000000..b6fbc8fbc6 --- /dev/null +++ b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/plugin/Bundle_fr.properties @@ -0,0 +1,3 @@ +FuzzyElementLabelSearchProvider.match=Label +StartWithElementLabelSearchProvider.match=Label +ElementLabelSearchProvider.match=Label diff --git a/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/plugin/Bundle_th.properties b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/plugin/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopSearch/src/main/resources/org/gephi/desktop/search/plugin/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopSearch/src/test/java/org/gephi/desktop/search/filter/SearchFilterTest.java b/modules/DesktopSearch/src/test/java/org/gephi/desktop/search/filter/SearchFilterTest.java new file mode 100644 index 0000000000..03f0cefb82 --- /dev/null +++ b/modules/DesktopSearch/src/test/java/org/gephi/desktop/search/filter/SearchFilterTest.java @@ -0,0 +1,72 @@ +package org.gephi.desktop.search.filter; + +import org.gephi.desktop.search.impl.SearchCategoryImpl; +import org.gephi.filters.api.FilterController; +import org.gephi.filters.api.Query; +import org.gephi.filters.spi.FilterBuilder; +import org.gephi.graph.GraphGenerator; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphView; +import org.gephi.graph.api.Subgraph; +import org.gephi.project.api.Project; +import org.gephi.project.api.ProjectController; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.openide.util.Lookup; + +public class SearchFilterTest { + + private Project project; + private FilterController filterController; + + @Before + public void setUp() { + filterController = Lookup.getDefault().lookup(FilterController.class); + ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); + project = pc.newProject(); + } + + @After + public void cleanUp() { + ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); + pc.closeCurrentProject(); + project = null; + } + + @Test + public void testNodeFilter() { + GraphGenerator graphGenerator = + GraphGenerator.build(project.getCurrentWorkspace()).generateTinyGraph(); + Graph graph = graphGenerator.getGraph(); + + FilterBuilder filterBuilder = Lookup.getDefault().lookup(SearchFilterBuilder.class); + Assert.assertNotNull(filterBuilder); + + Query query = filterController.createQuery(filterBuilder); + SearchFilterBuilder.SearchFilter filter = (SearchFilterBuilder.SearchFilter) query.getFilter(); + filter.setQuery(GraphGenerator.FIRST_NODE); + GraphView view = filterController.filter(query); + Subgraph subgraph = graph.getModel().getGraph(view); + Assert.assertTrue(subgraph.contains(graph.getNode(GraphGenerator.FIRST_NODE))); + Assert.assertEquals(1, subgraph.getNodeCount()); + } + + @Test + public void testEdgeFilter() { + GraphGenerator graphGenerator = + GraphGenerator.build(project.getCurrentWorkspace()).generateTinyMultiGraph(); + Graph graph = graphGenerator.getGraph(); + + Query query = filterController.createQuery(Lookup.getDefault().lookup(SearchFilterBuilder.class)); + SearchFilterBuilder.SearchFilter filter = (SearchFilterBuilder.SearchFilter) query.getFilter(); + filter.setType(SearchCategoryImpl.EDGES().getId()); + filter.setQuery(GraphGenerator.FIRST_EDGE); + + GraphView view = filterController.filter(query); + Subgraph subgraph = graph.getModel().getGraph(view); + Assert.assertTrue(subgraph.contains(graph.getEdge(GraphGenerator.FIRST_EDGE))); + Assert.assertEquals(1, subgraph.getEdgeCount()); + } +} diff --git a/modules/DesktopSearch/src/test/java/org/gephi/desktop/search/impl/SearchControllerImplTest.java b/modules/DesktopSearch/src/test/java/org/gephi/desktop/search/impl/SearchControllerImplTest.java new file mode 100644 index 0000000000..32d3acc5cc --- /dev/null +++ b/modules/DesktopSearch/src/test/java/org/gephi/desktop/search/impl/SearchControllerImplTest.java @@ -0,0 +1,201 @@ +package org.gephi.desktop.search.impl; + +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; +import org.awaitility.Awaitility; +import org.gephi.desktop.search.api.SearchCategory; +import org.gephi.desktop.search.api.SearchListener; +import org.gephi.desktop.search.api.SearchRequest; +import org.gephi.desktop.search.api.SearchResult; +import org.gephi.desktop.search.plugin.NodeIdSearchProvider; +import org.gephi.desktop.search.spi.SearchProvider; +import org.gephi.desktop.search.spi.SearchResultsBuilder; +import org.gephi.graph.GraphGenerator; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.Node; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnitRunner; +import org.netbeans.junit.MockServices; + +@RunWith(MockitoJUnitRunner.class) +public class SearchControllerImplTest { + + private SearchControllerImpl controller; + + @Mock + private SearchListener searchListener; + + @Before + public void setUp() { + controller = new SearchControllerImpl(); + } + + @After + public void cleanUp() { + controller.shutdown(); + } + + @Test + public void testNodeId() { + GraphGenerator generator = GraphGenerator.build().generateTinyGraph(); + + SearchRequest request = buildRequest(GraphGenerator.FIRST_NODE, generator); + Collection> results = controller.search(request, Node.class); + + Assert.assertEquals(1, results.size()); + Assert.assertEquals(GraphGenerator.FIRST_NODE, results.iterator().next().getResult().getId()); + } + + @Test + public void testNodeLabel() { + GraphGenerator generator = GraphGenerator.build().generateTinyGraph(); + + generator.getGraph().getNode(GraphGenerator.FIRST_NODE).setLabel("foo"); + + SearchRequest request = buildRequest("foo", generator); + Collection> results = controller.search(request, Node.class); + + Assert.assertEquals(1, results.size()); + SearchResult result = results.iterator().next(); + Assert.assertEquals(GraphGenerator.FIRST_NODE, result.getResult().getId()); + + } + + @Test + public void testUniqueNode() { + GraphGenerator generator = GraphGenerator.build().generateTinyGraph(); + + generator.getGraph().getNode(GraphGenerator.FIRST_NODE).setLabel(GraphGenerator.FIRST_NODE); + + SearchRequest request = buildRequest(GraphGenerator.FIRST_NODE, generator); + Collection> results = controller.search(request, Node.class); + + Assert.assertEquals(1, results.size()); + SearchResult result = results.iterator().next(); + Assert.assertEquals(GraphGenerator.FIRST_NODE, result.getResult().getId()); + Assert.assertEquals(NodeIdSearchProvider.toHtmlDisplay(result.getResult()), result.getHtmlDisplay()); + } + + @Test + public void testElement() { + GraphGenerator generator = GraphGenerator.build().generateTinyGraph(); + + SearchRequest request = buildRequest(GraphGenerator.FIRST_NODE, generator); + List results = toList(controller.search(request, Element.class)); + + Assert.assertEquals(2, results.size()); + Assert.assertSame(generator.getGraph().getNode(GraphGenerator.FIRST_NODE), results.get(0)); + Assert.assertSame(generator.getGraph().getEdge(GraphGenerator.FIRST_EDGE), results.get(1)); + } + + @Test + public void testFuzzyLabel() { + GraphGenerator generator = GraphGenerator.build().generateTinyGraph(); + + Node node = generator.getGraph().getNode(GraphGenerator.FIRST_NODE); + node.setLabel("foobar"); + + List r1 = toList(controller.search(buildRequest("foo", generator), Element.class)); + List r2 = toList(controller.search(buildRequest("bar", generator), Element.class)); + List r3 = toList(controller.search(buildRequest("oo", generator), Element.class)); + + Assert.assertEquals(List.of(node), r1); + Assert.assertEquals(List.of(node), r2); + Assert.assertEquals(List.of(node), r3); + } + + @Test + public void testAsync() { + GraphGenerator generator = GraphGenerator.build().generateTinyGraph(); + + SearchRequest request = buildRequest(GraphGenerator.FIRST_NODE, generator); + controller.search(request, searchListener); + + Awaitility.await().untilAsserted(() -> { + Mockito.verify(searchListener).started(request); + Mockito.verify(searchListener).finished(Mockito.eq(request), Mockito.argThat(list -> list.size() == 2)); + }); + } + + @Test + public void testAsyncCancel() { + MockServices.setServices(SleepProvider.class); + GraphGenerator generator = GraphGenerator.build(); + + SearchRequest request1 = buildRequest("sleep", generator); + SearchRequest request2 = buildRequest("bar", generator); + controller.search(request1, searchListener); + controller.search(request2, searchListener); + + Awaitility.await().untilAsserted(() -> { + Mockito.verify(searchListener).started(request1); + Mockito.verify(searchListener).started(request2); + Mockito.verify(searchListener).cancelled(); + Mockito.verify(searchListener).finished(Mockito.eq(request2), Mockito.any()); + }); + } + + @Test + public void testCategoryFilter() { + GraphGenerator generator = GraphGenerator.build().generateTinyGraph(); + + SearchRequest request = buildRequest(GraphGenerator.FIRST_NODE, generator, SearchCategoryImpl.NODES()); + Assert.assertFalse(toList(controller.search(request, Element.class)).isEmpty()); + } + + @Test + public void testFakeCategoryFilter() { + GraphGenerator generator = GraphGenerator.build().generateTinyGraph(); + + SearchRequest request = buildRequest(GraphGenerator.FIRST_NODE, generator, new FakeCategory()); + Assert.assertTrue(toList(controller.search(request, Element.class)).isEmpty()); + } + + // Utility + + public static class SleepProvider implements SearchProvider { + + @Override + public void search(SearchRequest request, SearchResultsBuilder resultsBuilder) { + if (request.getQuery().equals("sleep")) { + try { + Thread.sleep(150); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + } + + private static class FakeCategory implements SearchCategory { + + @Override + public String getDisplayName() { + return "fake"; + } + + @Override + public String getId() { + return "fake"; + } + } + + private List toList(Collection> results) { + return results.stream().map(SearchResult::getResult).collect(Collectors.toList()); + } + + private SearchRequest buildRequest(String query, GraphGenerator generator) { + return SearchRequest.builder().query(query).graph(generator.getGraph()).build(); + } + + private SearchRequest buildRequest(String query, GraphGenerator generator, SearchCategory category) { + return SearchRequest.builder().query(query).graph(generator.getGraph()).category(category).build(); + } +} diff --git a/modules/DesktopSearch/src/test/java/org/gephi/desktop/search/plugin/FuzzyElementLabelSearchProviderTest.java b/modules/DesktopSearch/src/test/java/org/gephi/desktop/search/plugin/FuzzyElementLabelSearchProviderTest.java new file mode 100644 index 0000000000..6b77f4f2d0 --- /dev/null +++ b/modules/DesktopSearch/src/test/java/org/gephi/desktop/search/plugin/FuzzyElementLabelSearchProviderTest.java @@ -0,0 +1,52 @@ +package org.gephi.desktop.search.plugin; + +import org.gephi.desktop.search.plugin.FuzzyElementLabelSearchProvider; +import org.gephi.graph.api.Node; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnitRunner; + +@RunWith(MockitoJUnitRunner.class) +public class FuzzyElementLabelSearchProviderTest { + + @Mock + private Node node; + + @Test + public void testHtmlFirst() { + Mockito.when(node.getLabel()).thenReturn("foobar"); + Assert.assertTrue( + new FuzzyElementLabelSearchProvider().toHtmlDisplay(node, "foo").contains("foobar")); + } + + @Test + public void testHtmlLast() { + Mockito.when(node.getLabel()).thenReturn("foobar"); + Assert.assertTrue( + new FuzzyElementLabelSearchProvider().toHtmlDisplay(node, "bar").contains("foobar")); + } + + @Test + public void testHtmlMiddle() { + Mockito.when(node.getLabel()).thenReturn("foobar"); + Assert.assertTrue( + new FuzzyElementLabelSearchProvider().toHtmlDisplay(node, "oo").contains("foobar")); + } + + @Test + public void testFirstOnly() { + Mockito.when(node.getLabel()).thenReturn("foobarfoo"); + Assert.assertTrue( + new FuzzyElementLabelSearchProvider().toHtmlDisplay(node, "oo").contains("foobarfoo")); + } + + @Test + public void testLowerCase() { + Mockito.when(node.getLabel()).thenReturn("FooBar"); + Assert.assertTrue( + new FuzzyElementLabelSearchProvider().toHtmlDisplay(node, "Foo").contains("FooBar")); + } +} diff --git a/modules/DesktopSpigot/pom.xml b/modules/DesktopSpigot/pom.xml deleted file mode 100644 index 5eebda6fa2..0000000000 --- a/modules/DesktopSpigot/pom.xml +++ /dev/null @@ -1,61 +0,0 @@ - - - 4.0.0 - - gephi-parent - org.gephi - 0.9-SNAPSHOT - ../.. - - - org.gephi - desktop-spigot - 0.9-SNAPSHOT - nbm - - DesktopSpigot - - - - ${project.groupId} - io-importer-api - - - ${project.groupId} - desktop-project - - - org.netbeans.api - org-openide-dialogs - - - org.netbeans.api - org-openide-awt - - - org.netbeans.api - org-openide-util-lookup - - - org.netbeans.api - org-openide-util - - - org.netbeans.api - org-openide-filesystems - - - - - - - org.codehaus.mojo - nbm-maven-plugin - - - - - - - - diff --git a/modules/DesktopSpigot/src/main/java/org/gephi/desktop/spigot/ImportSpigot.java b/modules/DesktopSpigot/src/main/java/org/gephi/desktop/spigot/ImportSpigot.java deleted file mode 100644 index 99de2bead2..0000000000 --- a/modules/DesktopSpigot/src/main/java/org/gephi/desktop/spigot/ImportSpigot.java +++ /dev/null @@ -1,96 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du - Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.desktop.spigot; - -import java.awt.Dialog; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.text.MessageFormat; -import org.gephi.desktop.importer.api.ImportControllerUI; -import org.gephi.io.importer.spi.ImporterWizardUI; -import org.gephi.io.importer.spi.SpigotImporter; -import org.gephi.io.importer.spi.SpigotImporterBuilder; -import org.openide.DialogDisplayer; -import org.openide.NotifyDescriptor; -import org.openide.WizardDescriptor; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; - -public final class ImportSpigot implements ActionListener { - - public void actionPerformed(ActionEvent e) { - SpigotWizardIterator wizardIterator = new SpigotWizardIterator(); - WizardDescriptor wizardDescriptor = new WizardDescriptor(wizardIterator); - wizardDescriptor.setTitleFormat(new MessageFormat("{0} ({1})")); - wizardDescriptor.setTitle(NbBundle.getMessage(getClass(), "ImportSpigot.wizard.title")); - Dialog dialog = DialogDisplayer.getDefault().createDialog(wizardDescriptor); - dialog.setVisible(true); - dialog.toFront(); - - boolean cancelled = wizardDescriptor.getValue() != WizardDescriptor.FINISH_OPTION; - if (!cancelled) { - ImporterWizardUI wizardUI = wizardIterator.getCurrentWizardUI(); - - //Get Importer - SpigotImporter importer = null; - for (SpigotImporterBuilder spigotBuilder : Lookup.getDefault().lookupAll(SpigotImporterBuilder.class)) { - SpigotImporter im = spigotBuilder.buildImporter(); - if (wizardUI.isUIForImporter(im)) { - importer = im; - } - } - - if (importer == null) { - NotifyDescriptor.Message msg = new NotifyDescriptor.Message(NbBundle.getMessage(getClass(), "ImportSpigot.error_no_matching_importer"), NotifyDescriptor.WARNING_MESSAGE); - DialogDisplayer.getDefault().notify(msg); - return; - } - - //Unsetup - wizardIterator.unsetupPanels(importer); - - ImportControllerUI importControllerUI = Lookup.getDefault().lookup(ImportControllerUI.class); - importControllerUI.importSpigot(importer); - } - } -} diff --git a/modules/DesktopSpigot/src/main/java/org/gephi/desktop/spigot/SpigotVisualPanel1.form b/modules/DesktopSpigot/src/main/java/org/gephi/desktop/spigot/SpigotVisualPanel1.form deleted file mode 100644 index 3486ff71e4..0000000000 --- a/modules/DesktopSpigot/src/main/java/org/gephi/desktop/spigot/SpigotVisualPanel1.form +++ /dev/null @@ -1,157 +0,0 @@ - - -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    diff --git a/modules/DesktopSpigot/src/main/java/org/gephi/desktop/spigot/SpigotVisualPanel1.java b/modules/DesktopSpigot/src/main/java/org/gephi/desktop/spigot/SpigotVisualPanel1.java deleted file mode 100644 index 4dea1e791d..0000000000 --- a/modules/DesktopSpigot/src/main/java/org/gephi/desktop/spigot/SpigotVisualPanel1.java +++ /dev/null @@ -1,242 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.desktop.spigot; - -import javax.swing.DefaultListModel; -import javax.swing.JPanel; -import javax.swing.ListModel; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import org.gephi.io.importer.spi.ImporterWizardUI; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; - -public final class SpigotVisualPanel1 extends JPanel implements ChangeListener { - - private DefaultListModel subTypeModel = new DefaultListModel(); - - public SpigotVisualPanel1() { - initComponents(); - reloadDescription(); - } - - @Override - public String getName() { - return NbBundle.getMessage(SpigotVisualPanel1.class, "SpigotVisualPanel1.title"); - } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - // //GEN-BEGIN:initComponents - private void initComponents() { - - labelCategory = new javax.swing.JLabel(); - labelSpigot = new javax.swing.JLabel(); - jScrollPane1 = new javax.swing.JScrollPane(); - categoryList = new javax.swing.JList(); - jScrollPane2 = new javax.swing.JScrollPane(); - spigotList = new javax.swing.JList(); - labelDescription = new javax.swing.JLabel(); - jScrollPane3 = new javax.swing.JScrollPane(); - descriptionArea = new javax.swing.JTextArea(); - - setMaximumSize(new java.awt.Dimension(500, 360)); - setMinimumSize(new java.awt.Dimension(500, 360)); - setPreferredSize(new java.awt.Dimension(500, 360)); - - org.openide.awt.Mnemonics.setLocalizedText(labelCategory, org.openide.util.NbBundle.getMessage(SpigotVisualPanel1.class, "SpigotVisualPanel1.labelCategory.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(labelSpigot, org.openide.util.NbBundle.getMessage(SpigotVisualPanel1.class, "SpigotVisualPanel1.labelSpigot.text")); // NOI18N - - categoryList.setModel(getCategoryListModel()); - categoryList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); - categoryList.setSelectedIndex(0); - categoryList.addListSelectionListener(new javax.swing.event.ListSelectionListener() { - public void valueChanged(javax.swing.event.ListSelectionEvent evt) { - categoryListValueChanged(evt); - } - }); - jScrollPane1.setViewportView(categoryList); - - spigotList.setModel(reloadSubType()); - spigotList.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); - spigotList.setSelectedIndex(0); - spigotList.addListSelectionListener(new javax.swing.event.ListSelectionListener() { - public void valueChanged(javax.swing.event.ListSelectionEvent evt) { - spigotListValueChanged(evt); - } - }); - jScrollPane2.setViewportView(spigotList); - - org.openide.awt.Mnemonics.setLocalizedText(labelDescription, org.openide.util.NbBundle.getMessage(SpigotVisualPanel1.class, "SpigotVisualPanel1.labelDescription.text")); // NOI18N - - descriptionArea.setColumns(20); - descriptionArea.setRows(5); - jScrollPane3.setViewportView(descriptionArea); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jScrollPane3, javax.swing.GroupLayout.DEFAULT_SIZE, 490, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(labelCategory, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 199, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(55, 55, 55) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(labelSpigot) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 175, Short.MAX_VALUE)) - .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 236, Short.MAX_VALUE))) - .addComponent(labelDescription)) - .addContainerGap()) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(labelCategory) - .addComponent(labelSpigot)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jScrollPane2, javax.swing.GroupLayout.DEFAULT_SIZE, 196, Short.MAX_VALUE) - .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 196, Short.MAX_VALUE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(labelDescription) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jScrollPane3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap()) - ); - }// //GEN-END:initComponents - - private void categoryListValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_categoryListValueChanged - reloadSubType(); - if (spigotList.getSelectedValue() == null) { - descriptionArea.setText(""); - } - spigotList.setSelectedIndex(0); - }//GEN-LAST:event_categoryListValueChanged - - private void spigotListValueChanged(javax.swing.event.ListSelectionEvent evt) {//GEN-FIRST:event_spigotListValueChanged - reloadDescription(); - }//GEN-LAST:event_spigotListValueChanged - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JList categoryList; - private javax.swing.JTextArea descriptionArea; - private javax.swing.JScrollPane jScrollPane1; - private javax.swing.JScrollPane jScrollPane2; - private javax.swing.JScrollPane jScrollPane3; - private javax.swing.JLabel labelCategory; - private javax.swing.JLabel labelDescription; - private javax.swing.JLabel labelSpigot; - private javax.swing.JList spigotList; - // End of variables declaration//GEN-END:variables - - public String getCurrentCategory() { - return categoryList.getSelectedValue().toString(); - } - - public String getCurrentSpigot() { - return spigotList.getSelectedValue().toString(); - } - - private ListModel getCategoryListModel() { - DefaultListModel model = new DefaultListModel(); - for (ImporterWizardUI wizardUi : Lookup.getDefault().lookupAll(ImporterWizardUI.class)) { - if (!model.contains(wizardUi.getCategory())) { - model.addElement(wizardUi.getCategory()); - } - } - return model; - } - - private ListModel reloadSubType() { - subTypeModel.clear(); - if (categoryList.getSelectedValue() == null) { - return subTypeModel; - } - String category = categoryList.getSelectedValue().toString(); - - for (ImporterWizardUI wizardUi : Lookup.getDefault().lookupAll(ImporterWizardUI.class)) { - if (category.equals(wizardUi.getCategory())) { - subTypeModel.addElement(wizardUi.getDisplayName()); - descriptionArea.setText(wizardUi.getDescription()); - } - } - return subTypeModel; - } - - private void reloadDescription() { - if (emptyList()) { - return; - } - String category = categoryList.getSelectedValue().toString(); - String spigot = spigotList.getSelectedValue().toString(); - - for (ImporterWizardUI wizardUi : Lookup.getDefault().lookupAll(ImporterWizardUI.class)) { - if (category.equals(wizardUi.getCategory()) && spigot.equals(wizardUi.getDisplayName())) { - descriptionArea.setText(wizardUi.getDescription()); - } - } - } - - boolean emptyList() { - if (categoryList.getSelectedValue() == null - || spigotList.getSelectedValue() == null) { - return true; - } else { - return false; - } - } - - public void stateChanged(ChangeEvent e) { - throw new UnsupportedOperationException("Not supported yet."); - } -} diff --git a/modules/DesktopSpigot/src/main/java/org/gephi/desktop/spigot/SpigotVisualPanel2.form b/modules/DesktopSpigot/src/main/java/org/gephi/desktop/spigot/SpigotVisualPanel2.form deleted file mode 100644 index 0fa40b1e9c..0000000000 --- a/modules/DesktopSpigot/src/main/java/org/gephi/desktop/spigot/SpigotVisualPanel2.form +++ /dev/null @@ -1,28 +0,0 @@ - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    diff --git a/modules/DesktopSpigot/src/main/java/org/gephi/desktop/spigot/SpigotVisualPanel2.java b/modules/DesktopSpigot/src/main/java/org/gephi/desktop/spigot/SpigotVisualPanel2.java deleted file mode 100644 index e7ece93edd..0000000000 --- a/modules/DesktopSpigot/src/main/java/org/gephi/desktop/spigot/SpigotVisualPanel2.java +++ /dev/null @@ -1,80 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.desktop.spigot; - -import javax.swing.JPanel; - -public final class SpigotVisualPanel2 extends JPanel { - - /** Creates new form SpigotVisualPanel2 */ - public SpigotVisualPanel2() { - initComponents(); - } - - @Override - public String getName() { - return "..."; - } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - // //GEN-BEGIN:initComponents - private void initComponents() { - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 500, Short.MAX_VALUE) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 360, Short.MAX_VALUE) - ); - }// //GEN-END:initComponents - - // Variables declaration - do not modify//GEN-BEGIN:variables - // End of variables declaration//GEN-END:variables -} diff --git a/modules/DesktopSpigot/src/main/java/org/gephi/desktop/spigot/SpigotWizardIterator.java b/modules/DesktopSpigot/src/main/java/org/gephi/desktop/spigot/SpigotWizardIterator.java deleted file mode 100644 index 7b1c33c61d..0000000000 --- a/modules/DesktopSpigot/src/main/java/org/gephi/desktop/spigot/SpigotWizardIterator.java +++ /dev/null @@ -1,197 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.desktop.spigot; - -import java.awt.Component; -import java.util.NoSuchElementException; -import javax.swing.JComponent; -import javax.swing.event.ChangeListener; -import org.gephi.io.importer.spi.ImporterWizardUI; -import org.gephi.io.importer.spi.SpigotImporter; -import org.openide.WizardDescriptor; -import org.openide.util.Lookup; - -public class SpigotWizardIterator implements WizardDescriptor.Iterator { - - private int index; - private WizardDescriptor.Panel[] originalPanels; - private WizardDescriptor.Panel[] panels; - private ImporterWizardUI currentWizardUI; - - /** - * Initialize panels representing individual wizard's steps and sets - * various properties for them influencing wizard appearance. - */ - private WizardDescriptor.Panel[] getPanels() { - if (panels == null) { - panels = new WizardDescriptor.Panel[]{ - new SpigotWizardPanel1(), - new SpigotWizardPanel2() - }; - String[] steps = new String[panels.length]; - for (int i = 0; i < panels.length; i++) { - Component c = panels[i].getComponent(); - // Default step name to component name of panel. - steps[i] = c.getName(); - if (c instanceof JComponent) { // assume Swing components - JComponent jc = (JComponent) c; - // Sets step number of a component - // TODO if using org.openide.dialogs >= 7.8, can use WizardDescriptor.PROP_*: - jc.putClientProperty(WizardDescriptor.PROP_CONTENT_SELECTED_INDEX, new Integer(i)); - // Sets steps names for a panel - jc.putClientProperty("WizardPanel_contentData", steps); - // Turn on subtitle creation on each step - jc.putClientProperty("WizardPanel_autoWizardStyle", Boolean.TRUE); - // Show steps on the left side with the image on the background - jc.putClientProperty("WizardPanel_contentDisplayed", Boolean.TRUE); - // Turn on numbering of all steps - jc.putClientProperty("WizardPanel_contentNumbered", Boolean.TRUE); - } - } - originalPanels = panels; - } - return panels; - } - - public WizardDescriptor.Panel current() { - WizardDescriptor.Panel p = getPanels()[index]; -// if(p.getComponent() instanceof SetupablePanel){ -// ((SetupablePanel)(p.getComponent())).setup -// (currentSpigotSupport.generateImporter()); -// } - return p; - } - - public String name() { - return index + 1 + ". from " + getPanels().length; - } - - public boolean hasNext() { - return index < getPanels().length - 1; - } - - public boolean hasPrevious() { - return index > 0; - } - - public void nextPanel() { - if (!hasNext()) { - throw new NoSuchElementException(); - } - //change panel if the current is the first panel - if (index == 0) { - for (ImporterWizardUI wizardUi : Lookup.getDefault().lookupAll(ImporterWizardUI.class)) { - SpigotVisualPanel1 visual1 = ((SpigotVisualPanel1) current().getComponent()); - if (visual1.getCurrentCategory().equals(wizardUi.getCategory()) - && visual1.getCurrentSpigot().equals(wizardUi.getDisplayName())) { - WizardDescriptor.Panel[] spigotPanels = wizardUi.getPanels(); - WizardDescriptor.Panel tempFirstPanel = panels[0]; - panels = new WizardDescriptor.Panel[spigotPanels.length + 1]; - panels[0] = tempFirstPanel; - for (int i = 0; i < spigotPanels.length; i++) { - panels[i + 1] = spigotPanels[i]; - wizardUi.setup(spigotPanels[i]); - } - currentWizardUI = wizardUi; - } - } - // - repaintLeftComponent(); - } - index++; - } - - /** - * ? might used for repainting - */ - private void repaintLeftComponent() { - String[] steps = new String[panels.length]; - for (int i = 0; i < panels.length; i++) { - Component c = panels[i].getComponent(); - // Default step name to component name of panel. - steps[i] = c.getName(); - if (c instanceof JComponent) { // assume Swing components - JComponent jc = (JComponent) c; - // Sets step number of a component - // TODO if using org.openide.dialogs >= 7.8, can use WizardDescriptor.PROP_*: - jc.putClientProperty(WizardDescriptor.PROP_CONTENT_SELECTED_INDEX, new Integer(i)); - // Sets steps names for a panel - jc.putClientProperty("WizardPanel_contentData", steps); - // Turn on subtitle creation on each step - jc.putClientProperty("WizardPanel_autoWizardStyle", Boolean.TRUE); - // Show steps on the left side with the image on the background - jc.putClientProperty("WizardPanel_contentDisplayed", Boolean.TRUE); - // Turn on numbering of all steps - jc.putClientProperty("WizardPanel_contentNumbered", Boolean.TRUE); - } - } - } - - public void previousPanel() { - //change panel if the previous panel is the first - if (!hasPrevious()) { - throw new NoSuchElementException(); - } - if (index == 1) { - panels = originalPanels; - repaintLeftComponent(); - } - index--; - } - - // If nothing unusual changes in the middle of the wizard, simply: - public void addChangeListener(ChangeListener l) { - } - - public void removeChangeListener(ChangeListener l) { - } - - public ImporterWizardUI getCurrentWizardUI() { - return currentWizardUI; - } - - void unsetupPanels(SpigotImporter importer) { - for (int i = 1; i < panels.length; i++) { - currentWizardUI.unsetup(importer, panels[i]); - } - } -} diff --git a/modules/DesktopSpigot/src/main/java/org/gephi/desktop/spigot/SpigotWizardPanel1.java b/modules/DesktopSpigot/src/main/java/org/gephi/desktop/spigot/SpigotWizardPanel1.java deleted file mode 100644 index 7db8caff57..0000000000 --- a/modules/DesktopSpigot/src/main/java/org/gephi/desktop/spigot/SpigotWizardPanel1.java +++ /dev/null @@ -1,139 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.desktop.spigot; - -import java.awt.Component; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Set; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import org.openide.WizardDescriptor; -import org.openide.WizardValidationException; -import org.openide.util.HelpCtx; - -public class SpigotWizardPanel1 implements WizardDescriptor.ValidatingPanel { - - /** - * The visual component that displays this panel. If you need to access the - * component from this class, just use getComponent(). - */ - private Component component; - - // Get the visual component for the panel. In this template, the component - // is kept separate. This can be more efficient: if the wizard is created - // but never displayed, or not all panels are displayed, it is better to - // create only those which really need to be visible. - public Component getComponent() { - if (component == null) { - component = new SpigotVisualPanel1(); - this.addChangeListener((ChangeListener) component); - } - return component; - } - - public HelpCtx getHelp() { - // Show no Help button for this panel: - return HelpCtx.DEFAULT_HELP; - // If you have context help: - // return new HelpCtx(SampleWizardPanel1.class); - } - - public boolean isValid() { - SpigotVisualPanel1 panel = (SpigotVisualPanel1) getComponent(); - if (panel.emptyList()) { - return false; - } - // If it is always OK to press Next or Finish, then: - return true; - // If it depends on some condition (form filled out...), then: - // return someCondition(); - // and when this condition changes (last form field filled in...) then: - // fireChangeEvent(); - // and uncomment the complicated stuff below. - } -// public final void addChangeListener(ChangeListener l) { -// } -// -// public final void removeChangeListener(ChangeListener l) { -// } - private final Set listeners = new HashSet(1); // or can use ChangeSupport in NB 6.0 - - public final void addChangeListener(ChangeListener l) { - synchronized (listeners) { - listeners.add(l); - } - } - - public final void removeChangeListener(ChangeListener l) { - synchronized (listeners) { - listeners.remove(l); - } - } - - protected final void fireChangeEvent() { - Iterator it; - synchronized (listeners) { - it = new HashSet(listeners).iterator(); - } - ChangeEvent ev = new ChangeEvent(this); - while (it.hasNext()) { - it.next().stateChanged(ev); - } - } - - // You can use a settings object to keep track of state. Normally the - // settings object will be the WizardDescriptor, so you can use - // WizardDescriptor.getProperty & putProperty to store information entered - // by the user. - public void readSettings(Object settings) { - } - - public void storeSettings(Object settings) { - } - - public void validate() throws WizardValidationException { - if (!isValid()) { - throw new WizardValidationException(null, "Can't be empty.", null); - } - } -} diff --git a/modules/DesktopSpigot/src/main/java/org/gephi/desktop/spigot/SpigotWizardPanel2.java b/modules/DesktopSpigot/src/main/java/org/gephi/desktop/spigot/SpigotWizardPanel2.java deleted file mode 100644 index d8d485e0e0..0000000000 --- a/modules/DesktopSpigot/src/main/java/org/gephi/desktop/spigot/SpigotWizardPanel2.java +++ /dev/null @@ -1,127 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.desktop.spigot; - -import java.awt.Component; -import javax.swing.event.ChangeListener; -import org.openide.WizardDescriptor; -import org.openide.util.HelpCtx; - -public class SpigotWizardPanel2 implements WizardDescriptor.Panel { - - /** - * The visual component that displays this panel. If you need to access the - * component from this class, just use getComponent(). - */ - private Component component; - - public SpigotWizardPanel2() { - super(); - } - - // Get the visual component for the panel. In this template, the component - // is kept separate. This can be more efficient: if the wizard is created - // but never displayed, or not all panels are displayed, it is better to - // create only those which really need to be visible. - public Component getComponent() { - if (component == null) { - component = new SpigotVisualPanel2(); - } - return component; - } - - public HelpCtx getHelp() { - // Show no Help button for this panel: - return HelpCtx.DEFAULT_HELP; - // If you have context help: - // return new HelpCtx(SampleWizardPanel1.class); - } - - public boolean isValid() { - // If it is always OK to press Next or Finish, then: - return true; - // If it depends on some condition (form filled out...), then: - // return someCondition(); - // and when this condition changes (last form field filled in...) then: - // fireChangeEvent(); - // and uncomment the complicated stuff below. - } - - public final void addChangeListener(ChangeListener l) { - } - - public final void removeChangeListener(ChangeListener l) { - } - /* - private final Set listeners = new HashSet(1); // or can use ChangeSupport in NB 6.0 - public final void addChangeListener(ChangeListener l) { - synchronized (listeners) { - listeners.add(l); - } - } - public final void removeChangeListener(ChangeListener l) { - synchronized (listeners) { - listeners.remove(l); - } - } - protected final void fireChangeEvent() { - Iterator it; - synchronized (listeners) { - it = new HashSet(listeners).iterator(); - } - ChangeEvent ev = new ChangeEvent(this); - while (it.hasNext()) { - it.next().stateChanged(ev); - } - } - */ - - // You can use a settings object to keep track of state. Normally the - // settings object will be the WizardDescriptor, so you can use - // WizardDescriptor.getProperty & putProperty to store information entered - // by the user. - public void readSettings(Object settings) { - } - - public void storeSettings(Object settings) { - } -} diff --git a/modules/DesktopSpigot/src/main/nbm/manifest.mf b/modules/DesktopSpigot/src/main/nbm/manifest.mf deleted file mode 100644 index 866e89843a..0000000000 --- a/modules/DesktopSpigot/src/main/nbm/manifest.mf +++ /dev/null @@ -1,5 +0,0 @@ -Manifest-Version: 1.0 -AutoUpdate-Essential-Module: true -OpenIDE-Module-Layer: org/gephi/desktop/spigot/layer.xml -OpenIDE-Module-Localizing-Bundle: org/gephi/desktop/spigot/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file diff --git a/modules/DesktopSpigot/src/main/nbm/module.xml b/modules/DesktopSpigot/src/main/nbm/module.xml deleted file mode 100644 index 3cf44617ee..0000000000 --- a/modules/DesktopSpigot/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/Bundle.properties b/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/Bundle.properties deleted file mode 100644 index b5ae0811a8..0000000000 --- a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/Bundle.properties +++ /dev/null @@ -1,16 +0,0 @@ -OpenIDE-Module-Display-Category=Gephi UI -OpenIDE-Module-Long-Description=\ - Import Spigot action with Wizard -OpenIDE-Module-Name=Desktop Spigot - -CTL_ImportSpigot=Import Spigot... - -ImportSpigot.wizard.title = Import Spigots -ImportSpigot.error_no_matching_importer = No importer can be found for this type of Spigot - - -OpenIDE-Module-Short-Description=Spigot integration with Wizard -SpigotVisualPanel1.title = Select Spigot -SpigotVisualPanel1.labelCategory.text=Category: -SpigotVisualPanel1.labelSpigot.text=Spigot Type: -SpigotVisualPanel1.labelDescription.text=Description: diff --git a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/Bundle_cs.properties b/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/Bundle_cs.properties deleted file mode 100644 index 0866551b1c..0000000000 --- a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/Bundle_cs.properties +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-23 10\:45+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=\u010cinnost import \u010depu pomoc\u00ed pr\u016fvodce - -CTL_ImportSpigot=Importovat \u010dep... - -ImportSpigot.wizard.title=Importovat \u010depy - -ImportSpigot.error_no_matching_importer=Nem\u016f\u017ee b\u00fdt nalezen \u017e\u00e1dn\u00fd import\u00e9r pro tento typ \u010depu - -OpenIDE-Module-Short-Description=Zaveden\u00ed \u010depu pomoc\u00ed pr\u016fvodce - -SpigotVisualPanel1.title=Vybrat \u010dep - -SpigotVisualPanel1.labelCategory.text=Kategorie\: - -SpigotVisualPanel1.labelSpigot.text=Typ \u010depu\: - -SpigotVisualPanel1.labelDescription.text=Popis\: diff --git a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/Bundle_es.properties b/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/Bundle_es.properties deleted file mode 100644 index 412893d13b..0000000000 --- a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/Bundle_es.properties +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:07+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Acci\u00f3n para importar desde un conector (Spigot) con asistente - -CTL_ImportSpigot=Importar conector... - -ImportSpigot.wizard.title=Importar conector - -ImportSpigot.error_no_matching_importer=No se pudo encontrar un importador para este tipo de conector - -OpenIDE-Module-Short-Description=Integraci\u00f3n de conectores (Spigot) con asistente - -SpigotVisualPanel1.title=Selecciona un conector - -SpigotVisualPanel1.labelCategory.text=Categor\u00eda\: - -SpigotVisualPanel1.labelSpigot.text=Tipo de conector\: - -SpigotVisualPanel1.labelDescription.text=Descripci\u00f3n\: diff --git a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/Bundle_fr.properties b/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/Bundle_fr.properties deleted file mode 100644 index 5cf61f75a8..0000000000 --- a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/Bundle_fr.properties +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:07+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Import Connecteur (Spigot) avec assistant - -CTL_ImportSpigot=Import Connecteur... - -ImportSpigot.wizard.title=Import Connecteur - -ImportSpigot.error_no_matching_importer=Aucun import n'a pu \u00eatre trouv\u00e9 pour ce type de connecteur. - -OpenIDE-Module-Short-Description=Import Connecteur (Spigot) avec assistant - -SpigotVisualPanel1.title=S\u00e9lection du connecteur - -SpigotVisualPanel1.labelCategory.text=Cat\u00e9gorie \: - -SpigotVisualPanel1.labelSpigot.text=Type \: - -SpigotVisualPanel1.labelDescription.text=Description \: diff --git a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/Bundle_ja.properties b/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/Bundle_ja.properties deleted file mode 100644 index 5f7f907168..0000000000 --- a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/Bundle_ja.properties +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-04 06\:11+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u30a6\u30a3\u30b6\u30fc\u30c9\u3067\u30b9\u30d4\u30b4\u30c3\u30c8\u30a2\u30af\u30b7\u30e7\u30f3\u3092\u30a4\u30f3\u30dd\u30fc\u30c8 - -CTL_ImportSpigot=\u30b9\u30d4\u30b4\u30c3\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8... - -ImportSpigot.wizard.title=\u30b9\u30d4\u30b4\u30c3\u30c8\u3092\u30a4\u30f3\u30dd\u30fc\u30c8 - -ImportSpigot.error_no_matching_importer=\u30b9\u30d4\u30b4\u30c3\u30c8\u578b\u7528\u306b\u30a4\u30f3\u30dd\u30fc\u30bf\u306f\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002 - -OpenIDE-Module-Short-Description=\u30a6\u30a3\u30b6\u30fc\u30c9\u3067\u30b9\u30d4\u30b4\u30c3\u30c8\u306e\u7d71\u5408 - -SpigotVisualPanel1.title=\u30b9\u30d4\u30b4\u30c3\u30c8\u3092\u9078\u629e - -SpigotVisualPanel1.labelCategory.text=\u30ab\u30c6\u30b4\u30ea\: - -SpigotVisualPanel1.labelSpigot.text=\u30b9\u30d4\u30b4\u30c3\u30c8\u306e\u578b\: - -SpigotVisualPanel1.labelDescription.text=\u8aac\u660e\: diff --git a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/Bundle_pt_BR.properties b/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/Bundle_pt_BR.properties deleted file mode 100644 index 3f4cfad70b..0000000000 --- a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/Bundle_pt_BR.properties +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 17\:36+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Importar a\u00e7\u00e3o Spigot com o Assistente - -CTL_ImportSpigot=Importar spigot... - -ImportSpigot.wizard.title=Importar spigots - -ImportSpigot.error_no_matching_importer=Nenhum importador foi encontrado para este tipo de spigot - -OpenIDE-Module-Short-Description=Integra\u00e7\u00e3o spigot com o Assistente - -SpigotVisualPanel1.title=Selecionar spigot - -SpigotVisualPanel1.labelCategory.text=Categoria\: - -SpigotVisualPanel1.labelSpigot.text=Tipo de spigot\: - -SpigotVisualPanel1.labelDescription.text=Descri\u00e7\u00e3o\: diff --git a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/Bundle_ru.properties b/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/Bundle_ru.properties deleted file mode 100644 index 164b4c6dd0..0000000000 --- a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/Bundle_ru.properties +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-27 06\:54+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=\u041c\u0430\u0441\u0442\u0435\u0440 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u0447\u0435\u0440\u0435\u0437 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 - -CTL_ImportSpigot=\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0430... - -ImportSpigot.wizard.title=\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0430 - -ImportSpigot.error_no_matching_importer=\u0414\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d \u0438\u043c\u043f\u043e\u0440\u0442\u0451\u0440 - -OpenIDE-Module-Short-Description=\u0418\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0441 \u043c\u0430\u0441\u0442\u0435\u0440\u043e\u043c - -SpigotVisualPanel1.title=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0430... - -SpigotVisualPanel1.labelCategory.text=\u041a\u0430\u0442\u0435\u0433\u043e\u0440\u0438\u044f\: - -SpigotVisualPanel1.labelSpigot.text=\u0422\u0438\u043f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\: - -SpigotVisualPanel1.labelDescription.text=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\: diff --git a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/Bundle_zh_CN.properties b/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/Bundle_zh_CN.properties deleted file mode 100644 index 34f9dc06cf..0000000000 --- a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/Bundle_zh_CN.properties +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:15+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u7528\u5411\u5bfc\u5bfc\u5165\u63d2\u53e3\u9009\u9879 - -CTL_ImportSpigot=\u5bfc\u5165\u63d2\u53e3\u2026\u2026 - -ImportSpigot.wizard.title=\u5bfc\u5165\u63d2\u53e3 - -ImportSpigot.error_no_matching_importer=\u6ca1\u627e\u5230\u8fd9\u79cd\u7c7b\u578b\u7684\u63d2\u53e3 - -OpenIDE-Module-Short-Description=\u63d2\u53e3\u6574\u5408\u5411\u5bfc - -SpigotVisualPanel1.title=\u9009\u62e9\u63d2\u53e3 - -SpigotVisualPanel1.labelCategory.text=\u5206\u7c7b\uff1a - -SpigotVisualPanel1.labelSpigot.text=\u63d2\u53e3\u7c7b\u578b\uff1a - -SpigotVisualPanel1.labelDescription.text=\u8bf4\u660e\uff1a diff --git a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/cs.po b/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/cs.po deleted file mode 100644 index e149195f19..0000000000 --- a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/cs.po +++ /dev/null @@ -1,46 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-23 10:45+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Činnost import čepu pomocΓ­ prΕ―vodce" - -msgid "CTL_ImportSpigot" -msgstr "Importovat čep..." - -msgid "ImportSpigot.wizard.title" -msgstr "Importovat čepy" - -msgid "ImportSpigot.error_no_matching_importer" -msgstr "NemΕ―ΕΎe bΓ½t nalezen ΕΎΓ‘dnΓ½ importΓ©r pro tento typ čepu" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ZavedenΓ­ čepu pomocΓ­ prΕ―vodce" - -msgid "SpigotVisualPanel1.title" -msgstr "Vybrat čep" - -msgid "SpigotVisualPanel1.labelCategory.text" -msgstr "Kategorie:" - -msgid "SpigotVisualPanel1.labelSpigot.text" -msgstr "Typ čepu:" - -msgid "SpigotVisualPanel1.labelDescription.text" -msgstr "Popis:" diff --git a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/es.po b/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/es.po deleted file mode 100644 index 78d53e402a..0000000000 --- a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/es.po +++ /dev/null @@ -1,46 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:07+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "AcciΓ³n para importar desde un conector (Spigot) con asistente" - -msgid "CTL_ImportSpigot" -msgstr "Importar conector..." - -msgid "ImportSpigot.wizard.title" -msgstr "Importar conector" - -msgid "ImportSpigot.error_no_matching_importer" -msgstr "No se pudo encontrar un importador para este tipo de conector" - -msgid "OpenIDE-Module-Short-Description" -msgstr "IntegraciΓ³n de conectores (Spigot) con asistente" - -msgid "SpigotVisualPanel1.title" -msgstr "Selecciona un conector" - -msgid "SpigotVisualPanel1.labelCategory.text" -msgstr "CategorΓ­a:" - -msgid "SpigotVisualPanel1.labelSpigot.text" -msgstr "Tipo de conector:" - -msgid "SpigotVisualPanel1.labelDescription.text" -msgstr "DescripciΓ³n:" diff --git a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/fr.po b/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/fr.po deleted file mode 100644 index 25effbcd5f..0000000000 --- a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/fr.po +++ /dev/null @@ -1,46 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:07+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Import Connecteur (Spigot) avec assistant" - -msgid "CTL_ImportSpigot" -msgstr "Import Connecteur..." - -msgid "ImportSpigot.wizard.title" -msgstr "Import Connecteur" - -msgid "ImportSpigot.error_no_matching_importer" -msgstr "Aucun import n'a pu Γͺtre trouvΓ© pour ce type de connecteur." - -msgid "OpenIDE-Module-Short-Description" -msgstr "Import Connecteur (Spigot) avec assistant" - -msgid "SpigotVisualPanel1.title" -msgstr "SΓ©lection du connecteur" - -msgid "SpigotVisualPanel1.labelCategory.text" -msgstr "CatΓ©gorie :" - -msgid "SpigotVisualPanel1.labelSpigot.text" -msgstr "Type :" - -msgid "SpigotVisualPanel1.labelDescription.text" -msgstr "Description :" diff --git a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/ja.po b/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/ja.po deleted file mode 100644 index fe9ea5d1af..0000000000 --- a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/ja.po +++ /dev/null @@ -1,46 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-04 06:11+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "γ‚¦γ‚£γ‚ΆγƒΌγƒ‰γ§γ‚Ήγƒ”γ‚΄γƒƒγƒˆγ‚’γ‚―γ‚·γƒ§γƒ³γ‚’γ‚€γƒ³γƒγƒΌγƒˆ" - -msgid "CTL_ImportSpigot" -msgstr "γ‚Ήγƒ”γ‚΄γƒƒγƒˆγ‚’γ‚€γƒ³γƒγƒΌγƒˆ..." - -msgid "ImportSpigot.wizard.title" -msgstr "γ‚Ήγƒ”γ‚΄γƒƒγƒˆγ‚’γ‚€γƒ³γƒγƒΌγƒˆ" - -msgid "ImportSpigot.error_no_matching_importer" -msgstr "γ‚Ήγƒ”γ‚΄γƒƒγƒˆεž‹η”¨γ«γ‚€γƒ³γƒγƒΌγ‚Ώγ―θ¦‹γ€γ‹γ‚ŠγΎγ›γ‚“γ€‚" - -msgid "OpenIDE-Module-Short-Description" -msgstr "γ‚¦γ‚£γ‚ΆγƒΌγƒ‰γ§γ‚Ήγƒ”γ‚΄γƒƒγƒˆγη΅±εˆ" - -msgid "SpigotVisualPanel1.title" -msgstr "γ‚Ήγƒ”γ‚΄γƒƒγƒˆγ‚’ιΈζŠž" - -msgid "SpigotVisualPanel1.labelCategory.text" -msgstr "カテゴγƒͺ:" - -msgid "SpigotVisualPanel1.labelSpigot.text" -msgstr "γ‚Ήγƒ”γ‚΄γƒƒγƒˆγεž‹:" - -msgid "SpigotVisualPanel1.labelDescription.text" -msgstr "θͺ¬ζ˜Ž:" diff --git a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/layer.xml b/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/layer.xml deleted file mode 100644 index 463aedafdb..0000000000 --- a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/layer.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/org-gephi-desktop-spigot.pot b/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/org-gephi-desktop-spigot.pot deleted file mode 100644 index 2feffda90b..0000000000 --- a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/org-gephi-desktop-spigot.pot +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Import Spigot action with Wizard" - -msgid "CTL_ImportSpigot" -msgstr "Import Spigot..." - -msgid "ImportSpigot.wizard.title" -msgstr "Import Spigots" - -msgid "ImportSpigot.error_no_matching_importer" -msgstr "No importer can be found for this type of Spigot" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Spigot integration with Wizard" - -msgid "SpigotVisualPanel1.title" -msgstr "Select Spigot" - -msgid "SpigotVisualPanel1.labelCategory.text" -msgstr "Category:" - -msgid "SpigotVisualPanel1.labelSpigot.text" -msgstr "Spigot Type:" - -msgid "SpigotVisualPanel1.labelDescription.text" -msgstr "Description:" diff --git a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/pt_BR.po b/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/pt_BR.po deleted file mode 100644 index 990428e042..0000000000 --- a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/pt_BR.po +++ /dev/null @@ -1,46 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 17:36+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Importar aΓ§Γ£o Spigot com o Assistente" - -msgid "CTL_ImportSpigot" -msgstr "Importar spigot..." - -msgid "ImportSpigot.wizard.title" -msgstr "Importar spigots" - -msgid "ImportSpigot.error_no_matching_importer" -msgstr "Nenhum importador foi encontrado para este tipo de spigot" - -msgid "OpenIDE-Module-Short-Description" -msgstr "IntegraΓ§Γ£o spigot com o Assistente" - -msgid "SpigotVisualPanel1.title" -msgstr "Selecionar spigot" - -msgid "SpigotVisualPanel1.labelCategory.text" -msgstr "Categoria:" - -msgid "SpigotVisualPanel1.labelSpigot.text" -msgstr "Tipo de spigot:" - -msgid "SpigotVisualPanel1.labelDescription.text" -msgstr "DescriΓ§Γ£o:" diff --git a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/ru.po b/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/ru.po deleted file mode 100644 index 10437e10c4..0000000000 --- a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/ru.po +++ /dev/null @@ -1,46 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-27 06:54+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ΠœΠ°ΡΡ‚Π΅Ρ€ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Ρ‡Π΅Ρ€Π΅Π· Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°" - -msgid "CTL_ImportSpigot" -msgstr "Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°..." - -msgid "ImportSpigot.wizard.title" -msgstr "Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°" - -msgid "ImportSpigot.error_no_matching_importer" -msgstr "Для Π΄Π°Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ ΠΈΠΌΠΏΠΎΡ€Ρ‚Ρ‘Ρ€" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Π˜Π½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΡ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ с мастСром" - -msgid "SpigotVisualPanel1.title" -msgstr "Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚Π°..." - -msgid "SpigotVisualPanel1.labelCategory.text" -msgstr "ΠšΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΡ:" - -msgid "SpigotVisualPanel1.labelSpigot.text" -msgstr "Π’ΠΈΠΏ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΡ:" - -msgid "SpigotVisualPanel1.labelDescription.text" -msgstr "ОписаниС:" diff --git a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/zh_CN.po b/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/zh_CN.po deleted file mode 100644 index 159dcad403..0000000000 --- a/modules/DesktopSpigot/src/main/resources/org/gephi/desktop/spigot/zh_CN.po +++ /dev/null @@ -1,45 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:15+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "用向导导ε…₯插口选鑹" - -msgid "CTL_ImportSpigot" -msgstr "ε―Όε…₯插口……" - -msgid "ImportSpigot.wizard.title" -msgstr "ε―Όε…₯插口" - -msgid "ImportSpigot.error_no_matching_importer" -msgstr "ζ²‘ζ‰Ύεˆ°θΏ™η§η±»εž‹ηš„ζ’ε£" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζ’ε£ζ•΄εˆε‘ε―Ό" - -msgid "SpigotVisualPanel1.title" -msgstr "选择插口" - -msgid "SpigotVisualPanel1.labelCategory.text" -msgstr "εˆ†η±»οΌš" - -msgid "SpigotVisualPanel1.labelSpigot.text" -msgstr "ζ’ε£η±»εž‹οΌš" - -msgid "SpigotVisualPanel1.labelDescription.text" -msgstr "说明:" diff --git a/modules/DesktopStatistics/pom.xml b/modules/DesktopStatistics/pom.xml index 0fdcb9e058..58f00f4748 100644 --- a/modules/DesktopStatistics/pom.xml +++ b/modules/DesktopStatistics/pom.xml @@ -4,13 +4,12 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. - org.gephi desktop-statistics - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm DesktopStatistics @@ -20,14 +19,6 @@ ${project.groupId} graph-api - - ${project.groupId} - dynamic-api - - - ${project.groupId} - lib.validation - ${project.groupId} project-api @@ -44,6 +35,10 @@ ${project.groupId} utils-longtask + + ${project.groupId} + desktop-icons + org.netbeans.api org-openide-dialogs @@ -60,6 +55,10 @@ org.netbeans.api org-openide-util + + org.netbeans.api + org-openide-util-ui + org.netbeans.api org-openide-awt @@ -89,7 +88,7 @@ - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/AvailableStatisticsChooser.java b/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/AvailableStatisticsChooser.java index 745381ada0..f36f8830c6 100644 --- a/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/AvailableStatisticsChooser.java +++ b/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/AvailableStatisticsChooser.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.statistics; import java.awt.BorderLayout; @@ -59,13 +60,15 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.Lookup; /** - * * @author Mathieu Bastian */ public class AvailableStatisticsChooser extends javax.swing.JPanel { private final JSqueezeBoxPanel squeezeBoxPanel = new JSqueezeBoxPanel(); - private final Map uiMap = new HashMap(); + private final Map uiMap = new HashMap<>(); + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPanel metricsPanel; + // End of variables declaration//GEN-END:variables public AvailableStatisticsChooser() { initComponents(); @@ -77,6 +80,7 @@ public void setup(StatisticsModelUI model, StatisticsCategory[] categories) { //Sort categories by position Arrays.sort(categories, new Comparator() { + @Override public int compare(Object o1, Object o2) { Integer p1 = ((StatisticsCategory) o1).getPosition(); Integer p2 = ((StatisticsCategory) o2).getPosition(); @@ -94,7 +98,7 @@ public int compare(Object o1, Object o2) { JPanel innerPanel = new JPanel(migLayout); //Find uis in this category - List uis = new ArrayList(); + List uis = new ArrayList<>(); for (StatisticsUI sui : statisticsUIs) { if (sui.getCategory().equals(category.getName())) { uis.add(sui); @@ -104,6 +108,7 @@ public int compare(Object o1, Object o2) { //Sort it by position Collections.sort(uis, new Comparator() { + @Override public int compare(Object o1, Object o2) { Integer p1 = ((StatisticsUI) o1).getPosition(); Integer p2 = ((StatisticsUI) o2).getPosition(); @@ -134,7 +139,8 @@ public void unsetup() { } } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -153,22 +159,19 @@ private void initComponents() { this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(metricsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 396, Short.MAX_VALUE) - .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(metricsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 396, Short.MAX_VALUE) + .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap() - .addComponent(metricsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 433, Short.MAX_VALUE) - .addContainerGap()) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addComponent(metricsPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 433, Short.MAX_VALUE) + .addContainerGap()) ); add(metricsPanel, java.awt.BorderLayout.CENTER); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JPanel metricsPanel; - // End of variables declaration//GEN-END:variables } diff --git a/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/DynamicSettingsPanel.java b/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/DynamicSettingsPanel.java index 29de108259..a8c55b8f41 100644 --- a/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/DynamicSettingsPanel.java +++ b/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/DynamicSettingsPanel.java @@ -39,9 +39,11 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.statistics; import java.awt.Image; +import java.awt.Point; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.MouseAdapter; @@ -50,36 +52,52 @@ Development and Distribution License("CDDL") (collectively, the import javax.swing.ComboBoxModel; import javax.swing.DefaultComboBoxModel; import javax.swing.JPanel; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.attribute.api.TimeFormat; -import org.gephi.attribute.time.Interval; -import org.gephi.dynamic.DynamicUtilities; -import org.gephi.dynamic.api.DynamicController; -import org.gephi.dynamic.api.DynamicModel; import org.gephi.graph.api.GraphController; import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.GraphView; +import org.gephi.graph.api.Interval; +import org.gephi.graph.api.TimeFormat; import org.gephi.lib.validation.PositiveNumberValidator; import org.gephi.statistics.spi.DynamicStatistics; import org.gephi.ui.components.richtooltip.RichTooltip; import org.netbeans.validation.api.Problems; import org.netbeans.validation.api.Validator; -import org.netbeans.validation.api.builtin.Validators; +import org.netbeans.validation.api.builtin.stringvalidation.StringValidators; import org.netbeans.validation.api.ui.ValidationGroup; -import org.netbeans.validation.api.ui.ValidationPanel; +import org.netbeans.validation.api.ui.swing.ValidationPanel; import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.NbPreferences; /** - * * @author Mathieu Bastian */ public class DynamicSettingsPanel extends javax.swing.JPanel { + private final String DAYS = NbBundle.getMessage(DynamicSettingsPanel.class, "DynamicSettingsPanel.TimeUnit.DAYS"); + private final String HOURS = NbBundle.getMessage(DynamicSettingsPanel.class, "DynamicSettingsPanel.TimeUnit.HOURS"); + private final String MILLISECONDS = + NbBundle.getMessage(DynamicSettingsPanel.class, "DynamicSettingsPanel.TimeUnit.MILLISECONDS"); + private final String MINUTES = + NbBundle.getMessage(DynamicSettingsPanel.class, "DynamicSettingsPanel.TimeUnit.MINUTES"); + private final String SECONDS = + NbBundle.getMessage(DynamicSettingsPanel.class, "DynamicSettingsPanel.TimeUnit.SECONDS"); private TimeUnit windowTimeUnit = TimeUnit.DAYS; private TimeUnit tickTimeUnit = TimeUnit.DAYS; private Interval bounds = null; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel currentIntervalLabel; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel2; + private javax.swing.JPanel jPanel1; + private javax.swing.JLabel labelCurrentTimeline; + private javax.swing.JTextField tickTextField; + private javax.swing.JComboBox tickTimeUnitCombo; + private javax.swing.JLabel windowInfoLabel; + private javax.swing.JTextField windowTextField; + private javax.swing.JComboBox windowTimeUnitCombo; + // End of variables declaration//GEN-END:variables public DynamicSettingsPanel() { initComponents(); @@ -97,7 +115,9 @@ public DynamicSettingsPanel() { public void mouseEntered(MouseEvent e) { if (windowInfoLabel.isEnabled()) { richTooltip = buildTooltip(); - richTooltip.showTooltip(windowInfoLabel, e.getLocationOnScreen()); + Point screenLocation = + new Point(e.getLocationOnScreen().x, e.getLocationOnScreen().y + windowInfoLabel.getHeight()); + richTooltip.showTooltip(windowInfoLabel, screenLocation); } } @@ -111,19 +131,53 @@ public void mouseExited(MouseEvent e) { } }); } - + + public static JPanel createCounpoundPanel(DynamicSettingsPanel dynamicPanel, JPanel innerPanel) { + JPanel result = new JPanel(); + + java.awt.GridBagConstraints gridBagConstraints; + + result.setLayout(new java.awt.GridBagLayout()); + + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 1; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 1.0; + result.add(dynamicPanel, gridBagConstraints); + + if (innerPanel != null) { + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.weighty = 1.0; + result.add(innerPanel, gridBagConstraints); + } + + //Validation + ValidationPanel validationPanel = new ValidationPanel(); + validationPanel.setInnerComponent(result); + ValidationGroup group = validationPanel.getValidationGroup(); + dynamicPanel.createValidation(group); + + return validationPanel; + } + public void setup(DynamicStatistics dynamicStatistics) { GraphController graphController = Lookup.getDefault().lookup(GraphController.class); GraphModel graphModel = graphController.getGraphModel(); - AttributeModel attributeModel = graphController.getAttributeModel(); - TimeFormat timeFormat = attributeModel.getTimeFormat(); + TimeFormat timeFormat = graphModel.getTimeFormat(); //Bounds - bounds = dynamicStatistics.getBounds(); - if (bounds == null) { - bounds = graphModel.getTimeBoundsVisible(); + GraphView currentView = graphModel.getVisibleView(); + if (currentView.isMainView()) { + bounds = graphModel.getTimeBounds(); + } else { + bounds = currentView.getTimeInterval(); } - String boundsStr = timeFormat.print(bounds.getLow())+" - "+timeFormat.print(bounds.getHigh()); + String boundsStr = timeFormat.print(bounds.getLow()) + " - " + timeFormat.print(bounds.getHigh()); currentIntervalLabel.setText(boundsStr); //TimeUnit @@ -139,7 +193,7 @@ public void setup(DynamicStatistics dynamicStatistics) { //Window and tick double initValue = 0.; - if(bounds.getHigh() - bounds.getLow() > 1) { + if (bounds.getHigh() - bounds.getLow() > 1) { initValue = 1.; } if (timeFormat.equals(TimeFormat.DOUBLE)) { @@ -173,15 +227,16 @@ public void itemStateChanged(ItemEvent e) { } public void unsetup(DynamicStatistics dynamicStatistics) { - DynamicController dynamicController = Lookup.getDefault().lookup(DynamicController.class); - DynamicModel model = dynamicController.getModel(); + GraphController graphController = Lookup.getDefault().lookup(GraphController.class); + GraphModel graphModel = graphController.getGraphModel(); + TimeFormat timeFormat = graphModel.getTimeFormat(); //Bounds is the same dynamicStatistics.setBounds(bounds); //Window - double window = 0.; - if (model.getTimeFormat().equals(DynamicModel.TimeFormat.DOUBLE)) { + double window; + if (timeFormat == TimeFormat.DOUBLE) { window = Double.parseDouble(windowTextField.getText()); } else { TimeUnit timeUnit = getSelectedTimeUnit(windowTimeUnitCombo.getModel()); @@ -190,8 +245,8 @@ public void unsetup(DynamicStatistics dynamicStatistics) { dynamicStatistics.setWindow(window); //Tick - double tick = 0.; - if (model.getTimeFormat().equals(DynamicModel.TimeFormat.DOUBLE)) { + double tick; + if (timeFormat == TimeFormat.DOUBLE) { tick = Double.parseDouble(tickTextField.getText()); } else { TimeUnit timeUnit = getSelectedTimeUnit(tickTimeUnitCombo.getModel()); @@ -200,38 +255,35 @@ public void unsetup(DynamicStatistics dynamicStatistics) { dynamicStatistics.setTick(tick); //Save latest selected item - if (!model.getTimeFormat().equals(DynamicModel.TimeFormat.DOUBLE)) { + if (timeFormat != TimeFormat.DOUBLE) { saveDefaultTimeUnits(); } } public void createValidation(ValidationGroup group) { - DynamicController dynamicController = Lookup.getDefault().lookup(DynamicController.class); - DynamicModel model = dynamicController.getModel(); - if (model.getTimeFormat().equals(DynamicModel.TimeFormat.DOUBLE)) { - group.add(windowTextField, Validators.REQUIRE_NON_EMPTY_STRING, - Validators.numberRange(Double.MIN_VALUE, (bounds.getHigh() - bounds.getLow()))); - group.add(tickTextField, Validators.REQUIRE_NON_EMPTY_STRING, - Validators.numberRange(Double.MIN_VALUE, (bounds.getHigh() - bounds.getLow()))); + GraphController graphController = Lookup.getDefault().lookup(GraphController.class); + GraphModel graphModel = graphController.getGraphModel(); + TimeFormat timeFormat = graphModel.getTimeFormat(); + + if (timeFormat == TimeFormat.DOUBLE) { + group.add(windowTextField, StringValidators.REQUIRE_NON_EMPTY_STRING, + StringValidators.numberRange(Double.MIN_VALUE, (bounds.getHigh() - bounds.getLow()))); + group.add(tickTextField, StringValidators.REQUIRE_NON_EMPTY_STRING, + StringValidators.numberRange(Double.MIN_VALUE, (bounds.getHigh() - bounds.getLow()))); } else { //TODO validation with dates - group.add(windowTextField, Validators.REQUIRE_NON_EMPTY_STRING, - new PositiveNumberValidator(), - new DateRangeValidator(windowTimeUnitCombo.getModel())); - group.add(tickTextField, Validators.REQUIRE_NON_EMPTY_STRING, - new PositiveNumberValidator(), - new DateRangeValidator(tickTimeUnitCombo.getModel()), - new TickUnderWindowValidator(!model.getTimeFormat().equals(DynamicModel.TimeFormat.DOUBLE))); + group.add(windowTextField, StringValidators.REQUIRE_NON_EMPTY_STRING, + new PositiveNumberValidator(), + new DateRangeValidator(windowTimeUnitCombo.getModel())); + group.add(tickTextField, StringValidators.REQUIRE_NON_EMPTY_STRING, + new PositiveNumberValidator(), + new DateRangeValidator(tickTimeUnitCombo.getModel()), + new TickUnderWindowValidator(timeFormat != TimeFormat.DOUBLE)); } } - private final String DAYS = NbBundle.getMessage(DynamicSettingsPanel.class, "DynamicSettingsPanel.TimeUnit.DAYS"); - private final String HOURS = NbBundle.getMessage(DynamicSettingsPanel.class, "DynamicSettingsPanel.TimeUnit.HOURS"); - private final String MILLISECONDS = NbBundle.getMessage(DynamicSettingsPanel.class, "DynamicSettingsPanel.TimeUnit.MILLISECONDS"); - private final String MINUTES = NbBundle.getMessage(DynamicSettingsPanel.class, "DynamicSettingsPanel.TimeUnit.MINUTES"); - private final String SECONDS = NbBundle.getMessage(DynamicSettingsPanel.class, "DynamicSettingsPanel.TimeUnit.SECONDS"); private ComboBoxModel getTimeUnitModel() { - return new DefaultComboBoxModel(new String[]{DAYS, HOURS, MILLISECONDS, MINUTES, SECONDS}); + return new DefaultComboBoxModel(new String[] {DAYS, HOURS, MILLISECONDS, MINUTES, SECONDS}); } private TimeUnit getSelectedTimeUnit(ComboBoxModel comboBoxModel) { @@ -277,17 +329,21 @@ private void refreshTickTimeUnit() { } private void loadDefaultTimeUnits() { - String windowDuration = NbPreferences.forModule(DynamicSettingsPanel.class).get("DynamicSettingsPanel_window_timeunit", windowTimeUnit.name()); + String windowDuration = NbPreferences.forModule(DynamicSettingsPanel.class) + .get("DynamicSettingsPanel_window_timeunit", windowTimeUnit.name()); windowTimeUnit = TimeUnit.valueOf(windowDuration); - String tickDuration = NbPreferences.forModule(DynamicSettingsPanel.class).get("DynamicSettingsPanel_tick_timeunit", tickTimeUnit.name()); + String tickDuration = NbPreferences.forModule(DynamicSettingsPanel.class) + .get("DynamicSettingsPanel_tick_timeunit", tickTimeUnit.name()); tickTimeUnit = TimeUnit.valueOf(tickDuration); windowTimeUnitCombo.setSelectedItem(getTimeUnit(windowTimeUnit)); tickTimeUnitCombo.setSelectedItem(getTimeUnit(tickTimeUnit)); } private void saveDefaultTimeUnits() { - NbPreferences.forModule(DynamicSettingsPanel.class).put("DynamicSettingsPanel_window_timeunit", windowTimeUnit.name()); - NbPreferences.forModule(DynamicSettingsPanel.class).put("DynamicSettingsPanel_tick_timeunit", tickTimeUnit.name()); + NbPreferences.forModule(DynamicSettingsPanel.class) + .put("DynamicSettingsPanel_window_timeunit", windowTimeUnit.name()); + NbPreferences.forModule(DynamicSettingsPanel.class) + .put("DynamicSettingsPanel_tick_timeunit", tickTimeUnit.name()); } private String getTimeUnit(TimeUnit timeUnit) { @@ -307,18 +363,19 @@ private String getTimeUnit(TimeUnit timeUnit) { private RichTooltip buildTooltip() { String name = NbBundle.getMessage(DynamicSettingsPanel.class, "DynamicSettingsPanel.infoLabel.name"); - String description = NbBundle.getMessage(DynamicSettingsPanel.class, "DynamicSettingsPanel.infoLabel.description"); + String description = + NbBundle.getMessage(DynamicSettingsPanel.class, "DynamicSettingsPanel.infoLabel.description"); RichTooltip richTooltip = new RichTooltip(name, description); - Image image = ImageUtilities.loadImage("org/gephi/desktop/statistics/resources/infolabel_details.png"); + Image image = ImageUtilities.loadImage("DesktopStatistics/infolabel_details.png", false); richTooltip.setMainImage(image); return richTooltip; } - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents @@ -338,68 +395,83 @@ private void initComponents() { setLayout(new java.awt.GridBagLayout()); - jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(DynamicSettingsPanel.class, "DynamicSettingsPanel.jPanel1.border.title"))); // NOI18N + jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle + .getMessage(DynamicSettingsPanel.class, "DynamicSettingsPanel.jPanel1.border.title"))); // NOI18N - labelCurrentTimeline.setText(org.openide.util.NbBundle.getMessage(DynamicSettingsPanel.class, "DynamicSettingsPanel.labelCurrentTimeline.text")); // NOI18N + labelCurrentTimeline.setText(org.openide.util.NbBundle + .getMessage(DynamicSettingsPanel.class, "DynamicSettingsPanel.labelCurrentTimeline.text")); // NOI18N - jLabel1.setText(org.openide.util.NbBundle.getMessage(DynamicSettingsPanel.class, "DynamicSettingsPanel.jLabel1.text")); // NOI18N + jLabel1.setText(org.openide.util.NbBundle + .getMessage(DynamicSettingsPanel.class, "DynamicSettingsPanel.jLabel1.text")); // NOI18N - jLabel2.setText(org.openide.util.NbBundle.getMessage(DynamicSettingsPanel.class, "DynamicSettingsPanel.jLabel2.text")); // NOI18N + jLabel2.setText(org.openide.util.NbBundle + .getMessage(DynamicSettingsPanel.class, "DynamicSettingsPanel.jLabel2.text")); // NOI18N tickTextField.setName("tick"); // NOI18N windowTextField.setName("window"); // NOI18N - windowInfoLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/statistics/resources/info.png"))); // NOI18N + windowInfoLabel.setIcon(ImageUtilities.loadImageIcon("DesktopStatistics/info.svg", false)); // NOI18N javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel1Layout.createSequentialGroup() - .addContainerGap() - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel1Layout.createSequentialGroup() - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jLabel1) - .addComponent(jLabel2)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(tickTextField) - .addComponent(windowTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 89, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(tickTimeUnitCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(windowTimeUnitCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 109, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addGroup(jPanel1Layout.createSequentialGroup() - .addComponent(labelCurrentTimeline) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(currentIntervalLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 199, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 61, Short.MAX_VALUE) - .addComponent(windowInfoLabel))) - .addContainerGap()) + .addGroup(jPanel1Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel1) + .addComponent(jLabel2)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(tickTextField) + .addComponent(windowTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 89, + javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup( + jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(tickTimeUnitCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, + Short.MAX_VALUE) + .addComponent(windowTimeUnitCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 109, + javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGroup(jPanel1Layout.createSequentialGroup() + .addComponent(labelCurrentTimeline) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(currentIntervalLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 199, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 61, Short.MAX_VALUE) + .addComponent(windowInfoLabel))) + .addContainerGap()) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel1Layout.createSequentialGroup() - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel1Layout.createSequentialGroup() - .addGap(6, 6, 6) - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(labelCurrentTimeline) - .addComponent(currentIntervalLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 16, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(jLabel1) - .addComponent(windowTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(windowTimeUnitCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(jLabel2) - .addComponent(tickTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(tickTimeUnitCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addComponent(windowInfoLabel)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(jPanel1Layout.createSequentialGroup() + .addGap(6, 6, 6) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(labelCurrentTimeline) + .addComponent(currentIntervalLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 16, + javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel1) + .addComponent(windowTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(windowTimeUnitCombo, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(jLabel2) + .addComponent(tickTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(tickTimeUnitCombo, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addComponent(windowInfoLabel)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); gridBagConstraints = new java.awt.GridBagConstraints(); @@ -411,56 +483,48 @@ private void initComponents() { gridBagConstraints.insets = new java.awt.Insets(8, 8, 8, 8); add(jPanel1, gridBagConstraints); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JLabel currentIntervalLabel; - private javax.swing.JLabel jLabel1; - private javax.swing.JLabel jLabel2; - private javax.swing.JPanel jPanel1; - private javax.swing.JLabel labelCurrentTimeline; - private javax.swing.JTextField tickTextField; - private javax.swing.JComboBox tickTimeUnitCombo; - private javax.swing.JLabel windowInfoLabel; - private javax.swing.JTextField windowTextField; - private javax.swing.JComboBox windowTimeUnitCombo; - // End of variables declaration//GEN-END:variables private class DateRangeValidator implements Validator { - private ComboBoxModel combo; + private final ComboBoxModel combo; public DateRangeValidator(ComboBoxModel comboBoxModel) { this.combo = comboBoxModel; } - public boolean validate(Problems prblms, String string, String t) { + @Override + public void validate(Problems prblms, String string, String t) { Integer i = 0; try { i = Integer.parseInt(t); } catch (NumberFormatException e) { - return false; + prblms.add("Number can't be parsed"); } TimeUnit tu = getSelectedTimeUnit(combo); long timeInMilli = (long) getTimeInMilliseconds(t, tu); long limit = (long) (bounds.getHigh() - bounds.getLow()); if (i < 1 || timeInMilli > limit) { String message = NbBundle.getMessage(DynamicSettingsPanel.class, - "DateRangeValidator.NotInRange", i, 1, tu.convert(limit, TimeUnit.MILLISECONDS)); + "DateRangeValidator.NotInRange", i, 1, tu.convert(limit, TimeUnit.MILLISECONDS)); prblms.add(message); - return false; } - return true; + } + + public Class modelType() { + return String.class; } } private class TickUnderWindowValidator implements Validator { - private boolean dates; + private final boolean dates; public TickUnderWindowValidator(boolean dates) { this.dates = dates; } - public boolean validate(Problems prblms, String string, String t) { + @Override + public void validate(Problems prblms, String string, String t) { if (dates) { Integer tick = 0; Integer window = 0; @@ -468,7 +532,7 @@ public boolean validate(Problems prblms, String string, String t) { tick = Integer.parseInt(t); window = Integer.parseInt(windowTextField.getText()); } catch (NumberFormatException e) { - return false; + prblms.add("Number can't be parsed"); } TimeUnit tu = getSelectedTimeUnit(tickTimeUnitCombo.getModel()); long tickInMilli = (long) getTimeInMilliseconds(t, tu); @@ -476,9 +540,8 @@ public boolean validate(Problems prblms, String string, String t) { long windowInMilli = (long) getTimeInMilliseconds(windowTextField.getText(), tu); if (tickInMilli > windowInMilli) { String message = NbBundle.getMessage(DynamicSettingsPanel.class, - "TickUnderWindowValidator.OverWindow"); + "TickUnderWindowValidator.OverWindow"); prblms.add(message); - return false; } } else { Double tick = 0.; @@ -487,49 +550,19 @@ public boolean validate(Problems prblms, String string, String t) { tick = Double.parseDouble(t); window = Double.parseDouble(windowTextField.getText()); } catch (NumberFormatException e) { - return false; + prblms.add("Number can't be parsed"); } if (tick > window) { String message = NbBundle.getMessage(DynamicSettingsPanel.class, - "TickUnderWindowValidator.OverWindow"); + "TickUnderWindowValidator.OverWindow"); prblms.add(message); - return false; } } - return true; } - } - - public static JPanel createCounpoundPanel(DynamicSettingsPanel dynamicPanel, JPanel innerPanel) { - JPanel result = new JPanel(); - - java.awt.GridBagConstraints gridBagConstraints; - - result.setLayout(new java.awt.GridBagLayout()); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 1; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 1.0; - result.add(dynamicPanel, gridBagConstraints); - - if (innerPanel != null) { - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 0; - gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.weighty = 1.0; - result.add(innerPanel, gridBagConstraints); + @Override + public Class modelType() { + return String.class; } - - //Validation - ValidationPanel validationPanel = new ValidationPanel(); - validationPanel.setInnerComponent(result); - ValidationGroup group = validationPanel.getValidationGroup(); - dynamicPanel.createValidation(group); - - return validationPanel; } } diff --git a/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsCategory.java b/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsCategory.java index f68d37359c..3ab845f6d4 100644 --- a/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsCategory.java +++ b/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsCategory.java @@ -39,11 +39,11 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.statistics; /** - * * @author Patick J. McSweeney */ public class StatisticsCategory { diff --git a/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsControllerUIImpl.java b/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsControllerUIImpl.java index dfea7be17c..89b2075ca1 100644 --- a/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsControllerUIImpl.java +++ b/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsControllerUIImpl.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.statistics; import java.util.ArrayList; @@ -52,13 +53,12 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = StatisticsControllerUI.class) public class StatisticsControllerUIImpl implements StatisticsControllerUI { -// private final DynamicModelListener dynamicModelListener; + // private final DynamicModelListener dynamicModelListener; private StatisticsModelUIImpl model; public StatisticsControllerUIImpl() { @@ -78,7 +78,7 @@ public StatisticsControllerUIImpl() { } public void setup(StatisticsModelUIImpl model) { - if(this.model == model) { + if (this.model == model) { return; } this.model = model; @@ -107,6 +107,7 @@ public void unsetup() { } } + @Override public void execute(final Statistics statistics) { StatisticsController controller = Lookup.getDefault().lookup(StatisticsController.class); final StatisticsUI[] uis = getUI(statistics); @@ -114,10 +115,14 @@ public void execute(final Statistics statistics) { for (StatisticsUI s : uis) { s.setup(statistics); } + if (model == null) { + return; + } model.setRunning(statistics, true); controller.execute(statistics, new LongTaskListener() { + @Override public void taskFinished(LongTask task) { model.setRunning(statistics, false); for (StatisticsUI s : uis) { @@ -128,6 +133,7 @@ public void taskFinished(LongTask task) { }); } + @Override public void execute(final Statistics statistics, final LongTaskListener listener) { StatisticsController controller = Lookup.getDefault().lookup(StatisticsController.class); final StatisticsUI[] uis = getUI(statistics); @@ -135,10 +141,14 @@ public void execute(final Statistics statistics, final LongTaskListener listener for (StatisticsUI s : uis) { s.setup(statistics); } + if (model == null) { + return; + } model.setRunning(statistics, true); controller.execute(statistics, new LongTaskListener() { + @Override public void taskFinished(LongTask task) { model.setRunning(statistics, false); for (StatisticsUI s : uis) { @@ -153,16 +163,19 @@ public void taskFinished(LongTask task) { } public StatisticsUI[] getUI(Statistics statistics) { - boolean dynamic = false; - ArrayList list = new ArrayList(); + if (statistics == null) { + return new StatisticsUI[0]; + } + ArrayList list = new ArrayList<>(); for (StatisticsUI sui : Lookup.getDefault().lookupAll(StatisticsUI.class)) { - if (sui.getStatisticsClass().equals(statistics.getClass())) { + if (statistics.getClass().equals(sui.getStatisticsClass())) { list.add(sui); } } return list.toArray(new StatisticsUI[0]); } + @Override public void setStatisticsUIVisible(StatisticsUI ui, boolean visible) { if (model != null) { model.setVisible(ui, visible); diff --git a/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsFrontEnd.form b/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsFrontEnd.form index 9c06e635f1..858fa468c2 100644 --- a/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsFrontEnd.form +++ b/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsFrontEnd.form @@ -1,4 +1,4 @@ - +
    diff --git a/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsFrontEnd.java b/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsFrontEnd.java index a596ed47e3..8e8aa8a075 100644 --- a/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsFrontEnd.java +++ b/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsFrontEnd.java @@ -40,6 +40,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.statistics; import java.awt.Dimension; @@ -52,15 +53,18 @@ Development and Distribution License("CDDL") (collectively, the import javax.swing.event.ChangeListener; import org.gephi.desktop.statistics.api.StatisticsControllerUI; import org.gephi.desktop.statistics.api.StatisticsModelUI; -import org.gephi.statistics.spi.Statistics; -import org.gephi.statistics.spi.StatisticsBuilder; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.lib.validation.DialogDescriptorWithValidation; import org.gephi.statistics.api.StatisticsController; import org.gephi.statistics.spi.DynamicStatistics; +import org.gephi.statistics.spi.Statistics; +import org.gephi.statistics.spi.StatisticsBuilder; import org.gephi.statistics.spi.StatisticsUI; import org.gephi.ui.components.SimpleHTMLReport; -import org.gephi.utils.longtask.spi.LongTask; import org.gephi.utils.longtask.api.LongTaskListener; -import org.netbeans.validation.api.ui.ValidationPanel; +import org.gephi.utils.longtask.spi.LongTask; +import org.netbeans.validation.api.ui.swing.ValidationPanel; import org.openide.DialogDescriptor; import org.openide.DialogDisplayer; import org.openide.NotifyDescriptor; @@ -70,22 +74,28 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.windows.WindowManager; /** - * * @author Mathieu Bastian * @author Patick J. McSweeney */ public class StatisticsFrontEnd extends javax.swing.JPanel { - private StatisticsUI statisticsUI; private final String RUN; private final String CANCEL; private final ImageIcon RUN_ICON; private final ImageIcon STOP_ICON; + private StatisticsUI statisticsUI; private Statistics currentStatistics; private StatisticsModelUI currentModel; //Img - ; + // Variables declaration - do not modify//GEN-BEGIN:variables + private org.jdesktop.swingx.JXBusyLabel busyLabel; + private javax.swing.JLabel displayLabel; + private javax.swing.JButton reportButton; + private javax.swing.JLabel resultLabel; + private javax.swing.JButton runButton; + private javax.swing.JToolBar toolbar; + // End of variables declaration//GEN-END:variables public StatisticsFrontEnd(StatisticsUI ui) { initComponents(); @@ -95,6 +105,7 @@ public StatisticsFrontEnd(StatisticsUI ui) { runButton.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { if (runButton.getText().equals(RUN)) { run(); @@ -106,13 +117,14 @@ public void actionPerformed(ActionEvent e) { reportButton.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { showReport(); } }); - RUN_ICON = ImageUtilities.loadImageIcon("org/gephi/desktop/statistics/resources/run.png", false); - STOP_ICON = ImageUtilities.loadImageIcon("org/gephi/desktop/statistics/resources/stop.png", false); + RUN_ICON = ImageUtilities.loadImageIcon("DesktopStatistics/run.svg", false); + STOP_ICON = ImageUtilities.loadImageIcon("DesktopStatistics/stop.svg", false); } private void initUI(StatisticsUI ui) { @@ -175,14 +187,25 @@ private void refreshResult(StatisticsModelUI model) { } private void run() { + GraphController graphController = Lookup.getDefault().lookup(GraphController.class); + GraphModel graphModel = graphController.getGraphModel(); + //Create Statistics StatisticsController controller = Lookup.getDefault().lookup(StatisticsController.class); StatisticsControllerUI controllerUI = Lookup.getDefault().lookup(StatisticsControllerUI.class); StatisticsBuilder builder = controller.getBuilder(statisticsUI.getStatisticsClass()); currentStatistics = builder.getStatistics(); if (currentStatistics != null) { + if (currentStatistics instanceof DynamicStatistics && !graphModel.isDynamic()) { + DialogDisplayer.getDefault().notifyLater(new NotifyDescriptor.Message( + NbBundle.getMessage(StatisticsFrontEnd.class, "StatisticsFrontEnd.notDynamicGraph"), + NotifyDescriptor.WARNING_MESSAGE)); + return; + } + LongTaskListener listener = new LongTaskListener() { + @Override public void taskFinished(LongTask task) { showReport(); } @@ -192,46 +215,28 @@ public void taskFinished(LongTask task) { DynamicSettingsPanel dynamicPanel = new DynamicSettingsPanel(); statisticsUI.setup(currentStatistics); dynamicPanel.setup((DynamicStatistics) currentStatistics); - - JPanel dynamicSettingsPanel = DynamicSettingsPanel.createCounpoundPanel(dynamicPanel, settingsPanel); - final DialogDescriptor dd = new DialogDescriptor(dynamicSettingsPanel, NbBundle.getMessage(StatisticsTopComponent.class, "StatisticsFrontEnd.settingsPanel.title", builder.getName())); - if (dynamicSettingsPanel instanceof ValidationPanel) { - ValidationPanel vp = (ValidationPanel) dynamicSettingsPanel; - vp.addChangeListener(new ChangeListener() { - - public void stateChanged(ChangeEvent e) { - dd.setValid(!((ValidationPanel) e.getSource()).isProblem()); - } - }); - } + JPanel dynamicSettingsPanel = DynamicSettingsPanel.createCounpoundPanel(dynamicPanel, settingsPanel); + final DialogDescriptor dd = DialogDescriptorWithValidation.dialog(dynamicSettingsPanel, NbBundle + .getMessage(StatisticsTopComponent.class, "StatisticsFrontEnd.settingsPanel.title", + builder.getName())); if (DialogDisplayer.getDefault().notify(dd).equals(NotifyDescriptor.OK_OPTION)) { dynamicPanel.unsetup((DynamicStatistics) currentStatistics); statisticsUI.unsetup(); controllerUI.execute(currentStatistics, listener); } - } else { - if (settingsPanel != null) { - statisticsUI.setup(currentStatistics); - - final DialogDescriptor dd = new DialogDescriptor(settingsPanel, NbBundle.getMessage(StatisticsTopComponent.class, "StatisticsFrontEnd.settingsPanel.title", builder.getName())); - if (settingsPanel instanceof ValidationPanel) { - ValidationPanel vp = (ValidationPanel) settingsPanel; - vp.addChangeListener(new ChangeListener() { - - public void stateChanged(ChangeEvent e) { - dd.setValid(!((ValidationPanel) e.getSource()).isProblem()); - } - }); - } - if (DialogDisplayer.getDefault().notify(dd).equals(NotifyDescriptor.OK_OPTION)) { - statisticsUI.unsetup(); - controllerUI.execute(currentStatistics, listener); - } - } else { - statisticsUI.setup(currentStatistics); + } else if (settingsPanel != null) { + statisticsUI.setup(currentStatistics); + final DialogDescriptor dd = DialogDescriptorWithValidation.dialog(settingsPanel, NbBundle + .getMessage(StatisticsTopComponent.class, "StatisticsFrontEnd.settingsPanel.title", + builder.getName())); + if (DialogDisplayer.getDefault().notify(dd).equals(NotifyDescriptor.OK_OPTION)) { + statisticsUI.unsetup(); controllerUI.execute(currentStatistics, listener); } + } else { + statisticsUI.setup(currentStatistics); + controllerUI.execute(currentStatistics, listener); } } } @@ -248,6 +253,7 @@ private void showReport() { if (report != null) { SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { SimpleHTMLReport dialog = new SimpleHTMLReport(WindowManager.getDefault().getMainWindow(), report); } @@ -255,10 +261,10 @@ public void run() { } } - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents @@ -275,7 +281,8 @@ private void initComponents() { setOpaque(false); setLayout(new java.awt.GridBagLayout()); - busyLabel.setText(org.openide.util.NbBundle.getMessage(StatisticsFrontEnd.class, "StatisticsFrontEnd.busyLabel.text")); // NOI18N + busyLabel.setText(org.openide.util.NbBundle + .getMessage(StatisticsFrontEnd.class, "StatisticsFrontEnd.busyLabel.text")); // NOI18N busyLabel.setMinimumSize(new java.awt.Dimension(16, 16)); busyLabel.setPreferredSize(new java.awt.Dimension(16, 16)); gridBagConstraints = new java.awt.GridBagConstraints(); @@ -284,7 +291,8 @@ private void initComponents() { gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; add(busyLabel, gridBagConstraints); - displayLabel.setText(org.openide.util.NbBundle.getMessage(StatisticsFrontEnd.class, "StatisticsFrontEnd.displayLabel.text")); // NOI18N + displayLabel.setText(org.openide.util.NbBundle + .getMessage(StatisticsFrontEnd.class, "StatisticsFrontEnd.displayLabel.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; @@ -293,7 +301,8 @@ private void initComponents() { gridBagConstraints.insets = new java.awt.Insets(0, 4, 0, 0); add(displayLabel, gridBagConstraints); - resultLabel.setText(org.openide.util.NbBundle.getMessage(StatisticsFrontEnd.class, "StatisticsFrontEnd.resultLabel.text")); // NOI18N + resultLabel.setText(org.openide.util.NbBundle + .getMessage(StatisticsFrontEnd.class, "StatisticsFrontEnd.resultLabel.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 0; @@ -304,15 +313,17 @@ private void initComponents() { toolbar.setRollover(true); toolbar.setOpaque(false); - runButton.setText(org.openide.util.NbBundle.getMessage(StatisticsFrontEnd.class, "StatisticsFrontEnd.runButton.text")); // NOI18N + runButton.setText(org.openide.util.NbBundle + .getMessage(StatisticsFrontEnd.class, "StatisticsFrontEnd.runButton.text")); // NOI18N runButton.setFocusable(false); runButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); runButton.setMargin(new java.awt.Insets(1, 2, 1, 2)); runButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); toolbar.add(runButton); - reportButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/statistics/resources/report.png"))); // NOI18N - reportButton.setToolTipText(org.openide.util.NbBundle.getMessage(StatisticsFrontEnd.class, "StatisticsFrontEnd.reportButton.toolTipText")); // NOI18N + reportButton.setIcon(ImageUtilities.loadImageIcon("DesktopStatistics/report.svg", false)); // NOI18N + reportButton.setToolTipText(org.openide.util.NbBundle + .getMessage(StatisticsFrontEnd.class, "StatisticsFrontEnd.reportButton.toolTipText")); // NOI18N reportButton.setFocusable(false); reportButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); reportButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); @@ -324,12 +335,4 @@ private void initComponents() { gridBagConstraints.anchor = java.awt.GridBagConstraints.EAST; add(toolbar, gridBagConstraints); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private org.jdesktop.swingx.JXBusyLabel busyLabel; - private javax.swing.JLabel displayLabel; - private javax.swing.JButton reportButton; - private javax.swing.JLabel resultLabel; - private javax.swing.JButton runButton; - private javax.swing.JToolBar toolbar; - // End of variables declaration//GEN-END:variables } diff --git a/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsModelUIImpl.java b/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsModelUIImpl.java index 12210c9eef..a48e021b16 100644 --- a/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsModelUIImpl.java +++ b/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsModelUIImpl.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.statistics; import java.util.ArrayList; @@ -60,7 +61,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.Lookup; /** - * * @author Mathieu Bastian */ public class StatisticsModelUIImpl implements StatisticsModelUI { @@ -75,9 +75,9 @@ public class StatisticsModelUIImpl implements StatisticsModelUI { public StatisticsModelUIImpl(Workspace workspace) { this.workspace = workspace; runningList = Collections.synchronizedList(new ArrayList()); - invisibleList = new ArrayList(); - resultMap = new HashMap(); - listeners = new ArrayList(); + invisibleList = new ArrayList<>(); + resultMap = new HashMap<>(); + listeners = new ArrayList<>(); } public void addResult(StatisticsUI ui) { @@ -89,19 +89,23 @@ public void addResult(StatisticsUI ui) { fireChangeEvent(); } + @Override public String getResult(StatisticsUI statisticsUI) { return resultMap.get(statisticsUI); } + @Override public String getReport(Class statistics) { StatisticsController controller = Lookup.getDefault().lookup(StatisticsController.class); return controller.getModel(workspace).getReport(statistics); } + @Override public boolean isStatisticsUIVisible(StatisticsUI statisticsUI) { return !invisibleList.contains(statisticsUI); } + @Override public boolean isRunning(StatisticsUI statisticsUI) { for (Statistics s : runningList.toArray(new Statistics[0])) { if (statisticsUI.getStatisticsClass().equals(s.getClass())) { @@ -122,6 +126,7 @@ public void setRunning(Statistics statistics, boolean running) { } } + @Override public Statistics getRunning(StatisticsUI statisticsUI) { for (Statistics s : runningList.toArray(new Statistics[0])) { if (statisticsUI.getStatisticsClass().equals(s)) { @@ -142,12 +147,14 @@ public void setVisible(StatisticsUI statisticsUI, boolean visible) { } } + @Override public void addChangeListener(ChangeListener changeListener) { if (!listeners.contains(changeListener)) { listeners.add(changeListener); } } + @Override public void removeChangeListener(ChangeListener changeListener) { listeners.remove(changeListener); } @@ -165,7 +172,6 @@ public Workspace getWorkspace() { //PERSISTENCE public void writeXML(XMLStreamWriter writer) throws XMLStreamException { - writer.writeStartElement("statisticsmodelui"); writer.writeStartElement("results"); for (Map.Entry entry : resultMap.entrySet()) { @@ -177,8 +183,6 @@ public void writeXML(XMLStreamWriter writer) throws XMLStreamException { } } writer.writeEndElement(); - - writer.writeEndElement(); } public void readXML(XMLStreamReader reader) throws XMLStreamException { diff --git a/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsPanel.java b/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsPanel.java index 06e2ccdfd7..308a95c5f7 100644 --- a/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsPanel.java +++ b/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsPanel.java @@ -40,6 +40,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.statistics; import java.awt.BorderLayout; @@ -57,7 +58,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.Lookup; /** - * * @author Mathieu Bastian * @author Patick J. McSweeney */ @@ -96,7 +96,7 @@ private void refreshFrontEnd() { squeezeBoxPanel.cleanPanels(); for (StatisticsCategory category : categories) { //Find uis in this category - List uis = new ArrayList(); + List uis = new ArrayList<>(); for (UIFrontEnd uife : frontEnds) { if (uife.getCategory().equals(category) && uife.isVisible()) { uis.add(uife); @@ -107,6 +107,7 @@ private void refreshFrontEnd() { //Sort it by position Collections.sort(uis, new Comparator() { + @Override public int compare(Object o1, Object o2) { Integer p1 = ((UIFrontEnd) o1).getStatisticsUI().getPosition(); Integer p2 = ((UIFrontEnd) o2).getStatisticsUI().getPosition(); @@ -131,11 +132,11 @@ public int compare(Object o1, Object o2) { private void initFrontEnds() { StatisticsUI[] statisticsUIs = Lookup.getDefault().lookupAll(StatisticsUI.class).toArray(new StatisticsUI[0]); - frontEnds = new ArrayList(); + frontEnds = new ArrayList<>(); for (StatisticsCategory category : categories) { //Find uis in this category - List uis = new ArrayList(); + List uis = new ArrayList<>(); for (StatisticsUI sui : statisticsUIs) { if (sui.getCategory().equals(category.getName())) { uis.add(sui); @@ -146,6 +147,7 @@ private void initFrontEnds() { //Sort it by position Collections.sort(uis, new Comparator() { + @Override public int compare(Object o1, Object o2) { Integer p1 = ((StatisticsUI) o1).getPosition(); Integer p2 = ((StatisticsUI) o2).getPosition(); @@ -171,12 +173,15 @@ public int compare(Object o1, Object o2) { } private void initCategories() { - Map cats = new LinkedHashMap(); - cats.put(StatisticsUI.CATEGORY_NETWORK_OVERVIEW, new StatisticsCategory(StatisticsUI.CATEGORY_NETWORK_OVERVIEW, 100)); + Map cats = new LinkedHashMap<>(); + cats.put(StatisticsUI.CATEGORY_NETWORK_OVERVIEW, + new StatisticsCategory(StatisticsUI.CATEGORY_NETWORK_OVERVIEW, 100)); + cats.put(StatisticsUI.CATEGORY_COMMUNITY_DETECTION, + new StatisticsCategory(StatisticsUI.CATEGORY_COMMUNITY_DETECTION, 150)); cats.put(StatisticsUI.CATEGORY_NODE_OVERVIEW, new StatisticsCategory(StatisticsUI.CATEGORY_NODE_OVERVIEW, 200)); cats.put(StatisticsUI.CATEGORY_EDGE_OVERVIEW, new StatisticsCategory(StatisticsUI.CATEGORY_EDGE_OVERVIEW, 300)); cats.put(StatisticsUI.CATEGORY_DYNAMIC, new StatisticsCategory(StatisticsUI.CATEGORY_DYNAMIC, 400)); - + int position = 500; for (StatisticsUI uis : Lookup.getDefault().lookupAll(StatisticsUI.class)) { String category = uis.getCategory(); @@ -201,9 +206,9 @@ public StatisticsCategory[] getCategories() { private static class UIFrontEnd { - private StatisticsUI statisticsUI; - private StatisticsFrontEnd frontEnd; - private StatisticsCategory category; + private final StatisticsUI statisticsUI; + private final StatisticsFrontEnd frontEnd; + private final StatisticsCategory category; private boolean visible; public UIFrontEnd(StatisticsUI statisticsUI, StatisticsFrontEnd frontEnd, StatisticsCategory category) { diff --git a/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsTopComponent.java b/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsTopComponent.java index 20b2b6a7ce..a039ffb845 100644 --- a/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsTopComponent.java +++ b/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsTopComponent.java @@ -40,10 +40,12 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.statistics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import javax.swing.SwingUtilities; import javax.swing.UIManager; import javax.swing.border.Border; import javax.swing.event.ChangeEvent; @@ -64,24 +66,28 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.windows.TopComponent; /** - * * @author Mathieu Bastian * @author Patick J. McSweeney */ @ConvertAsProperties(dtd = "-//org.gephi.desktop.statistics//Statistics//EN", - autostore = false) + autostore = false) @TopComponent.Description(preferredID = "StatisticsTopComponent", - iconBase = "org/gephi/desktop/statistics/resources/small.png", - persistenceType = TopComponent.PERSISTENCE_ALWAYS) + iconBase = "DesktopStatistics/small.svg", + persistenceType = TopComponent.PERSISTENCE_ALWAYS) @TopComponent.Registration(mode = "filtersmode", openAtStartup = true, roles = {"overview"}) @ActionID(category = "Window", id = "org.gephi.desktop.statistics.StatisticsTopComponent") @ActionReference(path = "Menu/Window", position = 1200) @TopComponent.OpenActionRegistration(displayName = "#CTL_StatisticsTopComponent", - preferredID = "StatisticsTopComponent") + preferredID = "StatisticsTopComponent") public final class StatisticsTopComponent extends TopComponent implements ChangeListener { //Model private transient StatisticsModelUIImpl model; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton settingsButton; + private javax.swing.JPanel statisticsPanel; + private javax.swing.JToolBar toolbar; + // End of variables declaration//GEN-END:variables public StatisticsTopComponent() { initComponents(); @@ -95,26 +101,32 @@ public StatisticsTopComponent() { ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); pc.addWorkspaceListener(new WorkspaceListener() { + @Override public void initialize(Workspace workspace) { } + @Override public void select(Workspace workspace) { - StatisticsModelUIImpl model = workspace.getLookup().lookup(StatisticsModelUIImpl.class); - if (model == null) { - model = new StatisticsModelUIImpl(workspace); - workspace.add(model); + StatisticsModelUIImpl m = workspace.getLookup().lookup(StatisticsModelUIImpl.class); + if (m == null) { + m = new StatisticsModelUIImpl(workspace); + workspace.add(m); } - refreshModel(model); + final StatisticsModelUIImpl selected = m; + SwingUtilities.invokeLater(() -> refreshModel(selected)); } + @Override public void unselect(Workspace workspace) { } + @Override public void close(Workspace workspace) { } + @Override public void disable() { - refreshModel(null); + SwingUtilities.invokeLater(() -> refreshModel(null)); } }); @@ -132,10 +144,12 @@ public void disable() { //Settings settingsButton.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { AvailableStatisticsChooser chooser = new AvailableStatisticsChooser(); chooser.setup(model, ((StatisticsPanel) statisticsPanel).getCategories()); - DialogDescriptor dd = new DialogDescriptor(chooser, NbBundle.getMessage(StatisticsTopComponent.class, "AvailableStatisticsChooser.title")); + DialogDescriptor dd = new DialogDescriptor(chooser, + NbBundle.getMessage(StatisticsTopComponent.class, "AvailableStatisticsChooser.title")); if (DialogDisplayer.getDefault().notify(dd).equals(NotifyDescriptor.OK_OPTION)) { chooser.unsetup(); } @@ -156,6 +170,7 @@ private void refreshModel(StatisticsModelUIImpl model) { ((StatisticsPanel) statisticsPanel).refreshModel(model); } + @Override public void stateChanged(ChangeEvent e) { refreshModel(model); } @@ -192,7 +207,8 @@ private void initComponents() { toolbar.setFloatable(false); toolbar.setRollover(true); - org.openide.awt.Mnemonics.setLocalizedText(settingsButton, org.openide.util.NbBundle.getMessage(StatisticsTopComponent.class, "StatisticsTopComponent.settingsButton.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(settingsButton, org.openide.util.NbBundle + .getMessage(StatisticsTopComponent.class, "StatisticsTopComponent.settingsButton.text")); // NOI18N settingsButton.setFocusable(false); settingsButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); settingsButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); @@ -213,11 +229,6 @@ private void initComponents() { gridBagConstraints.weighty = 1.0; add(statisticsPanel, gridBagConstraints); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton settingsButton; - private javax.swing.JPanel statisticsPanel; - private javax.swing.JToolBar toolbar; - // End of variables declaration//GEN-END:variables void writeProperties(java.util.Properties p) { // better to version settings since initial version as advocated at diff --git a/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsUIPersistenceProvider.java b/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsUIPersistenceProvider.java index aa0b696e4d..7cff2bc832 100644 --- a/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsUIPersistenceProvider.java +++ b/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/StatisticsUIPersistenceProvider.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.statistics; import javax.xml.stream.XMLStreamException; @@ -46,15 +47,16 @@ Development and Distribution License("CDDL") (collectively, the import javax.xml.stream.XMLStreamWriter; import org.gephi.project.api.Workspace; import org.gephi.project.spi.WorkspacePersistenceProvider; +import org.gephi.project.spi.WorkspaceXMLPersistenceProvider; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = WorkspacePersistenceProvider.class) -public class StatisticsUIPersistenceProvider implements WorkspacePersistenceProvider { +public class StatisticsUIPersistenceProvider implements WorkspaceXMLPersistenceProvider { + @Override public void writeXML(XMLStreamWriter writer, Workspace workspace) { StatisticsModelUIImpl statModel = workspace.getLookup().lookup(StatisticsModelUIImpl.class); if (statModel != null) { @@ -66,6 +68,7 @@ public void writeXML(XMLStreamWriter writer, Workspace workspace) { } } + @Override public void readXML(XMLStreamReader reader, Workspace workspace) { StatisticsModelUIImpl statModel = workspace.getLookup().lookup(StatisticsModelUIImpl.class); if (statModel == null) { @@ -79,6 +82,7 @@ public void readXML(XMLStreamReader reader, Workspace workspace) { } } + @Override public String getIdentifier() { return "statisticsmodelui"; } diff --git a/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/api/StatisticsControllerUI.java b/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/api/StatisticsControllerUI.java index 4c8880e18f..6ed3650c12 100644 --- a/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/api/StatisticsControllerUI.java +++ b/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/api/StatisticsControllerUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.statistics.api; import org.gephi.statistics.spi.Statistics; @@ -51,7 +52,7 @@ Development and Distribution License("CDDL") (collectively, the *

    * This controller is a service and can therefore be found in Lookup: *

    StatisticsControllerUI sc = Lookup.getDefault().lookup(StatisticsControllerUI.class);
    - * + * * @author Mathieu Bastian */ public interface StatisticsControllerUI { @@ -59,22 +60,25 @@ public interface StatisticsControllerUI { /** * Execute the statistics in a background thread. * The statistics should implement {@link LongTask}. - * @param statistics the statistics algorithm instance + * + * @param statistics the statistics algorithm instance */ - public void execute(Statistics statistics); - + void execute(Statistics statistics); + /** * Execute the statistics in a background thread an call the listener when finished. * The statistics should implement {@link LongTask}. - * @param statistics the statistics algorithm instance - * @param listener a listener that is notified when execution finished + * + * @param statistics the statistics algorithm instance + * @param listener a listener that is notified when execution finished */ - public void execute(Statistics statistics, LongTaskListener listener); + void execute(Statistics statistics, LongTaskListener listener); /** * Sets the visible state for a given StatisticsUI. - * @param ui the UI instance - * @param visible true to display the front-end + * + * @param ui the UI instance + * @param visible true to display the front-end */ - public void setStatisticsUIVisible(StatisticsUI ui, boolean visible); + void setStatisticsUIVisible(StatisticsUI ui, boolean visible); } diff --git a/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/api/StatisticsModelUI.java b/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/api/StatisticsModelUI.java index 804c861a76..f0127a9f79 100644 --- a/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/api/StatisticsModelUI.java +++ b/modules/DesktopStatistics/src/main/java/org/gephi/desktop/statistics/api/StatisticsModelUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.statistics.api; import javax.swing.event.ChangeListener; @@ -46,7 +47,6 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.statistics.spi.StatisticsUI; /** - * * @author Mathieu Bastian */ public interface StatisticsModelUI { @@ -54,48 +54,53 @@ public interface StatisticsModelUI { /** * Returns the result string for the given StatisticsUI class or * null if no result string exists for this statistics. - * @param statisticsUI a statisticsUI class - * @return the result or null if not found + * + * @param statisticsUI a statisticsUI class + * @return the result or null if not found */ - public String getResult(StatisticsUI statisticsUI); + String getResult(StatisticsUI statisticsUI); /** * Returns true if the statistics front-end is visible, * false otherwise. - * @param statisticsUI an UI instance - * @return true if the statistics front-end - * is visible, false otherwise + * + * @param statisticsUI an UI instance + * @return true if the statistics front-end + * is visible, false otherwise */ - public boolean isStatisticsUIVisible(StatisticsUI statisticsUI); + boolean isStatisticsUIVisible(StatisticsUI statisticsUI); /** * Returns true if the UI is in running state, false * otherwise. - * @param statisticsUI an UI instance - * @return true if the statistics is running, - * false otherwise + * + * @param statisticsUI an UI instance + * @return true if the statistics is running, + * false otherwise */ - public boolean isRunning(StatisticsUI statisticsUI); + boolean isRunning(StatisticsUI statisticsUI); /** * Returns the Statistics instance currently running for the * particular StatisticsUI registered or null if * the statistics is not running. - * @param statisticsUI an UI instance - * @return the statistics instance if it is running, or - * null if not running + * + * @param statisticsUI an UI instance + * @return the statistics instance if it is running, or + * null if not running */ - public Statistics getRunning(StatisticsUI statisticsUI); - + Statistics getRunning(StatisticsUI statisticsUI); + /** * Returns the report for the given statistics class or null if no report * exists for this statistics. - * @param statistics a statistics class - * @return the report or null if not found + * + * @param statistics a statistics class + * @return the report or null if not found */ - public String getReport(Class statistics); + String getReport(Class statistics); - public void addChangeListener(ChangeListener changeListener); + void addChangeListener(ChangeListener changeListener); - public void removeChangeListener(ChangeListener changeListener); + void removeChangeListener(ChangeListener changeListener); } diff --git a/modules/DesktopStatistics/src/main/nbm/manifest.mf b/modules/DesktopStatistics/src/main/nbm/manifest.mf index 85b79e8813..0f7b591cc2 100644 --- a/modules/DesktopStatistics/src/main/nbm/manifest.mf +++ b/modules/DesktopStatistics/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/desktop/statistics/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi UI +OpenIDE-Module-Name: Desktop Statistics diff --git a/modules/DesktopStatistics/src/main/nbm/module.xml b/modules/DesktopStatistics/src/main/nbm/module.xml deleted file mode 100644 index 551843e709..0000000000 --- a/modules/DesktopStatistics/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle.properties b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle.properties index ff96634040..4c12ab91d8 100644 --- a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle.properties +++ b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle.properties @@ -1,9 +1,7 @@ -OpenIDE-Module-Display-Category=Gephi UI OpenIDE-Module-Short-Description=Statistics and metrics UI CTL_StatisticsAction=Statistics CTL_StatisticsTopComponent=Statistics !HINT_StatisticsTopComponent= -OpenIDE-Module-Name=Desktop Statistics StatisticsTopComponent.settingsButton.text=Settings AvailableStatisticsChooser.title = Available Metrics StatisticsDisplayPanel.jXBusyLabel1.text= @@ -21,6 +19,8 @@ StatisticsFrontEnd.settingsPanel.title = {0} settings StatisticsFrontEnd.reportButton.toolTipText=View report StatisticsFrontEnd.runButton.text=Run +StatisticsFrontEnd.notDynamicGraph=Can't run a dynamic statistic if the graph isn't dynamic + DynamicSettingsPanel.TimeUnit.DAYS=DAYS DynamicSettingsPanel.TimeUnit.HOURS=HOURS DynamicSettingsPanel.TimeUnit.MILLISECONDS=MILLISECONDS diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_ar.properties b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_ca.properties b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_ca.properties new file mode 100644 index 0000000000..fd3bc83cb0 --- /dev/null +++ b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_ca.properties @@ -0,0 +1,33 @@ +OpenIDE-Module-Short-Description=Statistics and metrics UI +CTL_StatisticsAction=Estadνstiques +CTL_StatisticsTopComponent=Estadνstiques +!HINT_StatisticsTopComponent= +StatisticsTopComponent.settingsButton.text=Configuraciσ +AvailableStatisticsChooser.title=Mθtriques disponibles +StatisticsDisplayPanel.jXBusyLabel1.text= +StatisticsDisplayPanel.reportButton.text=Mostra +StatisticsDisplayPanel.runButton.text=Executa +StatisticsDisplayPanel.icon.text= +StatisticsDisplayPanel.name.text=nom +StatisticsFrontEnd.displayLabel.text=Nom a mostrar +StatisticsFrontEnd.busyLabel.text= +StatisticsFrontEnd.runStatus.run=Executa +StatisticsFrontEnd.runStatus.cancel=Cancel·la +StatisticsFrontEnd.resultLabel.text=Resultat +StatisticsFrontEnd.settingsPanel.title={0} configuraciσ +StatisticsFrontEnd.reportButton.toolTipText=Mostra l'informe +StatisticsFrontEnd.runButton.text=Executa +StatisticsFrontEnd.notDynamicGraph=Can't run a dynamic statistic if the graph isn't dynamic +DynamicSettingsPanel.TimeUnit.DAYS=DIES +DynamicSettingsPanel.TimeUnit.HOURS=HORES +DynamicSettingsPanel.TimeUnit.MILLISECONDS=MILLISECONDS +DynamicSettingsPanel.TimeUnit.MINUTES=MINUTS +DynamicSettingsPanel.TimeUnit.SECONDS=SEGONS +DateRangeValidator.NotInRange={0} hauria d'estar entre {1} i {2} +TickUnderWindowValidator.OverWindow=Tick should be less or equal than window +DynamicSettingsPanel.jPanel1.border.title=Format de temps +DynamicSettingsPanel.jLabel2.text=Tick: +DynamicSettingsPanel.jLabel1.text=Mida de la finestra: +DynamicSettingsPanel.labelCurrentTimeline.text=Interval actual de la lνnia de temps: +DynamicSettingsPanel.infoLabel.name=Sliding window and tick +DynamicSettingsPanel.infoLabel.description=The metric is computed within the timeline interval. The time window set the size of the union of graph snapshots or the union of nodes and edges in a continuous time. The window is moved of the length of the tick, so that the metric is computed at that moments. It starts at the beginning of the timeline interval, and ends when it cannot reach another tick. Both time window and tick are defined as a duration: float/integer in the case of snapshots, or dates in the case of continuous time. diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_cs.properties b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_cs.properties index 638ca29d97..5368b24152 100644 --- a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_cs.properties +++ b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_cs.properties @@ -1,63 +1,38 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-23 10\:32+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Short-Description=Rozhran\u00ed statistik a metrik - -CTL_StatisticsAction=Statistiky - -CTL_StatisticsTopComponent=Statistiky - -StatisticsTopComponent.settingsButton.text=Nastaven\u00ed - -AvailableStatisticsChooser.title=Dostupn\u00e9 metriky - -StatisticsDisplayPanel.reportButton.text=Zobrazen\u00ed - -StatisticsDisplayPanel.runButton.text=Spustit - -StatisticsDisplayPanel.name.text=n\u00e1zev - -StatisticsFrontEnd.displayLabel.text=Zobrazen\u00fd n\u00e1zev - -StatisticsFrontEnd.runStatus.run=Spustit - -StatisticsFrontEnd.runStatus.cancel=Zru\u0161it - -StatisticsFrontEnd.resultLabel.text=V\u00fdsledek - -StatisticsFrontEnd.settingsPanel.title=Nastaven\u00ed {0} - -StatisticsFrontEnd.reportButton.toolTipText=Zobrazit z\u00e1znam - -StatisticsFrontEnd.runButton.text=Spustit - -DynamicSettingsPanel.TimeUnit.DAYS=DN\u00cd - -DynamicSettingsPanel.TimeUnit.HOURS=HODIN - -DynamicSettingsPanel.TimeUnit.MILLISECONDS=MILISEKUND - -DynamicSettingsPanel.TimeUnit.MINUTES=MINUT - -DynamicSettingsPanel.TimeUnit.SECONDS=SEKUND - -DateRangeValidator.NotInRange={0} by m\u011blo b\u00fdt mezi {1} a {2} - -TickUnderWindowValidator.OverWindow=Tik by m\u011bl b\u00fdt men\u0161\u00ed ne\u017e nebo roven oknu - -DynamicSettingsPanel.jPanel1.border.title=Nastaven\u00ed \u010dasu - -DynamicSettingsPanel.jLabel2.text=Tik\: - -DynamicSettingsPanel.jLabel1.text=Velikost okna\: - -DynamicSettingsPanel.labelCurrentTimeline.text=Sou\u010dasn\u00fd interval \u010dasov\u00e9 osy - -DynamicSettingsPanel.infoLabel.name=Posuvn\u00e9 okno a tik - -DynamicSettingsPanel.infoLabel.description=Metrika je vypo\u010d\u00edt\u00e1na v intervalu \u010dasov\u00e9 osy. \u010casov\u00e9 okno nastav\u00ed velikost spojen\u00ed sn\u00edmk\u016f graf\u016f nebo spojen\u00ed uzl\u016f a hran ve spojit\u00e9m \u010dase. Okno je p\u0159esunuto na d\u00e9lku tiku, aby byla v t\u011bchto chv\u00edl\u00edch metrika vypo\u010d\u00edt\u00e1na. Za\u010d\u00edn\u00e1 po\u010d\u00e1tkem \u010dasov\u00e9ho intervalu a kon\u010d\u00ed kdy\u017e ji\u017e nelze dos\u00e1hnout dal\u0161\u00edho tiku. Jak \u010dasov\u00e9 okno, tak tik jsou zavedeny jako trv\u00e1n\u00ed\: desetin\u00e9\u00e9/cel\u00e9 \u010d\u00edslo v p\u0159\u00edpad\u011b sn\u00edmk\u016f, nebo data v p\u0159\u00edpad\u011b spojit\u00e9ho \u010dasu. +OpenIDE-Module-Short-Description=Rozhranν statistik a metrik +CTL_StatisticsAction=Statistiky +CTL_StatisticsTopComponent=Statistiky +!HINT_StatisticsTopComponent= +StatisticsTopComponent.settingsButton.text=Nastavenν +AvailableStatisticsChooser.title = Dostupnι metriky +StatisticsDisplayPanel.jXBusyLabel1.text= +StatisticsDisplayPanel.reportButton.text=Zobrazenν +StatisticsDisplayPanel.runButton.text=Spustit +StatisticsDisplayPanel.icon.text= +StatisticsDisplayPanel.name.text=nαzev +StatisticsFrontEnd.displayLabel.text=Zobrazenύ nαzev +StatisticsFrontEnd.busyLabel.text= + +StatisticsFrontEnd.runStatus.run = Spustit +StatisticsFrontEnd.runStatus.cancel = Zru\u0161it +StatisticsFrontEnd.resultLabel.text=Vύsledek +StatisticsFrontEnd.settingsPanel.title = Nastavenν {0} +StatisticsFrontEnd.reportButton.toolTipText=Zobrazit zαznam +StatisticsFrontEnd.runButton.text=Spustit + +StatisticsFrontEnd.notDynamicGraph=Nelze provιst dynamickou statistiku kdy\u017e graf nenν dynamickύ + +DynamicSettingsPanel.TimeUnit.DAYS=DNΝ +DynamicSettingsPanel.TimeUnit.HOURS=HODIN +DynamicSettingsPanel.TimeUnit.MILLISECONDS=MILISEKUND +DynamicSettingsPanel.TimeUnit.MINUTES=MINUT +DynamicSettingsPanel.TimeUnit.SECONDS=SEKUND + +DateRangeValidator.NotInRange = {0} by m\u011blo bύt mezi {1} a {2} +TickUnderWindowValidator.OverWindow = Tik by m\u011bl bύt men\u0161ν ne\u017e nebo roven oknu +DynamicSettingsPanel.jPanel1.border.title=Nastavenν \u010dasu +DynamicSettingsPanel.jLabel2.text=Tik: +DynamicSettingsPanel.jLabel1.text=Velikost okna: +DynamicSettingsPanel.labelCurrentTimeline.text=Sou\u010dasnύ interval \u010dasovι osy + +DynamicSettingsPanel.infoLabel.name = Posuvnι okno a tik +DynamicSettingsPanel.infoLabel.description = Metrika je vypo\u010dνtαna v intervalu \u010dasovι osy. \u010casovι okno nastavν velikost spojenν snνmk\u016f graf\u016f nebo spojenν uzl\u016f a hran ve spojitιm \u010dase. Okno je p\u0159esunuto na dιlku tiku, aby byla v t\u011bchto chvνlνch metrika vypo\u010dνtαna. Za\u010dνnα po\u010dαtkem \u010dasovιho intervalu a kon\u010dν kdy\u017e ji\u017e nelze dosαhnout dal\u0161νho tiku. Jak \u010dasovι okno, tak tik jsou zavedeny jako trvαnν: desetinιι/celι \u010dνslo v p\u0159νpad\u011b snνmk\u016f, nebo data v p\u0159νpad\u011b spojitιho \u010dasu. diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_de.properties b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_de.properties new file mode 100644 index 0000000000..a8a076eef3 --- /dev/null +++ b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_de.properties @@ -0,0 +1,33 @@ +OpenIDE-Module-Short-Description=Statistik und Metrik UI +CTL_StatisticsAction=Statistiken +CTL_StatisticsTopComponent=Statistiken +!HINT_StatisticsTopComponent= +StatisticsTopComponent.settingsButton.text=Einstellungen +AvailableStatisticsChooser.title=Verfόgbare Metriken +StatisticsDisplayPanel.jXBusyLabel1.text= +StatisticsDisplayPanel.reportButton.text=Ansicht +StatisticsDisplayPanel.runButton.text=Starten +StatisticsDisplayPanel.icon.text= +StatisticsDisplayPanel.name.text=Name +StatisticsFrontEnd.displayLabel.text=Anzeigename +StatisticsFrontEnd.busyLabel.text= +StatisticsFrontEnd.runStatus.run=Starten +StatisticsFrontEnd.runStatus.cancel=Abbrechen +StatisticsFrontEnd.resultLabel.text=Ergebnis +StatisticsFrontEnd.settingsPanel.title={0} Eigenschaften +StatisticsFrontEnd.reportButton.toolTipText=Report anzeigen +StatisticsFrontEnd.runButton.text=Starten +StatisticsFrontEnd.notDynamicGraph=Kann keine dynamische Statistiken ausfόhren, wenn Graph nicht dynamisch ist +DynamicSettingsPanel.TimeUnit.DAYS=TAGE +DynamicSettingsPanel.TimeUnit.HOURS=STUNDEN +DynamicSettingsPanel.TimeUnit.MILLISECONDS=MILLISEKUNDEN +DynamicSettingsPanel.TimeUnit.MINUTES=MINUTEN +DynamicSettingsPanel.TimeUnit.SECONDS=SEKUNDEN +DateRangeValidator.NotInRange={0} sollte zwischen {1} und {2} sein +TickUnderWindowValidator.OverWindow=Tick sollte kleiner oder gleich dem Fenster sein +DynamicSettingsPanel.jPanel1.border.title=Zeit-Einstellungen +DynamicSettingsPanel.jLabel2.text=Tick: +DynamicSettingsPanel.jLabel1.text=Fenstergrφίe: +DynamicSettingsPanel.labelCurrentTimeline.text=Aktuelles Zeitleisten-Intervall: +DynamicSettingsPanel.infoLabel.name=Schiebefenster und Zeitschritt +DynamicSettingsPanel.infoLabel.description=Die Metrik wird innerhalb des Zeitleisten-Intervals berechnet. Das Zeitfenster definiert den Umfang der vereinigten Graph-Schnappschόsse oder Vereinigungen der Knoten und Kanten όber eine kontinuierliche Zeit. Das Zeitfenster wird um die Dauer einer Zeiteinheit fortbewegt, so dass die Metrik zu diesen Zeitpunkten berechnet wird. Sie beginnt am Anfang des Zeitintervalls und endet, wenn Sie keinen anderen Zeitpunkt erreichen kann. Sowohl Zeitfenster als auch Zeitpunkt sind als Dauer definiert: float/integer im Falle eines Snapshots, "date" im Falle kontinuierlicher Zeit. diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_es.properties b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_es.properties index 78bd606671..eca0ab6489 100644 --- a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_es.properties +++ b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_es.properties @@ -1,64 +1,33 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 21\:40+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Short-Description=Interfaz de usuario para las estad\u00edsticas y m\u00e9tricas - -CTL_StatisticsAction=Estad\u00edsticas - -CTL_StatisticsTopComponent=Estad\u00edsticas - -StatisticsTopComponent.settingsButton.text=Configuraci\u00f3n - -AvailableStatisticsChooser.title=M\u00e9tricas disponibles - +OpenIDE-Module-Short-Description=Interfaz de usuario para las estadνsticas y mιtricas +CTL_StatisticsAction=Estadνsticas +CTL_StatisticsTopComponent=Estadνsticas +!HINT_StatisticsTopComponent= +StatisticsTopComponent.settingsButton.text=Ajustes +AvailableStatisticsChooser.title=Mιtricas disponibles +StatisticsDisplayPanel.jXBusyLabel1.text= StatisticsDisplayPanel.reportButton.text=Ver - StatisticsDisplayPanel.runButton.text=Ejecutar - +StatisticsDisplayPanel.icon.text= StatisticsDisplayPanel.name.text=Nombre - StatisticsFrontEnd.displayLabel.text=Mostrar nombre - +StatisticsFrontEnd.busyLabel.text= StatisticsFrontEnd.runStatus.run=Ejecutar - StatisticsFrontEnd.runStatus.cancel=Cancelar - StatisticsFrontEnd.resultLabel.text=Resultado - -StatisticsFrontEnd.settingsPanel.title=Par\u00e1metros de {0} - +StatisticsFrontEnd.settingsPanel.title=Parαmetros de {0} StatisticsFrontEnd.reportButton.toolTipText=Ver informe - StatisticsFrontEnd.runButton.text=Ejecutar - -DynamicSettingsPanel.TimeUnit.DAYS=D\u00cdAS - +StatisticsFrontEnd.notDynamicGraph=No se puede ejecutar una estadνstica dinαmica si el grafo no es dinαmico +DynamicSettingsPanel.TimeUnit.DAYS=DΝAS DynamicSettingsPanel.TimeUnit.HOURS=HORAS - DynamicSettingsPanel.TimeUnit.MILLISECONDS=MILISEGUNDOS - DynamicSettingsPanel.TimeUnit.MINUTES=MINUTOS - DynamicSettingsPanel.TimeUnit.SECONDS=SEGUNDOS - -DateRangeValidator.NotInRange={0} deber\u00eda estar entre {1} y {2} - -TickUnderWindowValidator.OverWindow=El paso deber\u00eda ser menor o igual que la ventana - -DynamicSettingsPanel.jPanel1.border.title=Par\u00e1metros de tiempo - -DynamicSettingsPanel.jLabel2.text=Paso\: - -DynamicSettingsPanel.jLabel1.text=Tama\u00f1o de ventana\: - -DynamicSettingsPanel.labelCurrentTimeline.text=Int\u00e9rvalo temporal actual\: - +DateRangeValidator.NotInRange={0} deberνa estar entre {1} y {2} +TickUnderWindowValidator.OverWindow=El paso deberνa ser menor o igual que la ventana +DynamicSettingsPanel.jPanel1.border.title=Parαmetros de tiempo +DynamicSettingsPanel.jLabel2.text=Paso: +DynamicSettingsPanel.jLabel1.text=Tamaρo de ventana: +DynamicSettingsPanel.labelCurrentTimeline.text=Intιrvalo temporal actual: DynamicSettingsPanel.infoLabel.name=Ventana deslizante y paso - -DynamicSettingsPanel.infoLabel.description=La m\u00e9trica es calculada para el int\u00e9rvalo temporal. La ventana temporal define el tama\u00f1o de uni\u00f3n de instant\u00e1neas del grafo, o la union de nodos y aristas en tiempo cont\u00ednuo. La ventana se desplaza la longitud del paso, de forma que la m\u00e9trica es calculada en esos momentos. Empieza al prinicipio del int\u00e9rvalo temporal y finaliza cuando no puede alcanzar otro paso. Tanto la ventana como el paso son definidos como una duraci\u00f3n\: float/integer en el caso de instant\u00e1neas, o fechas en el caso de tiempo cont\u00ednuo. +DynamicSettingsPanel.infoLabel.description=La mιtrica es calculada para el intιrvalo temporal. La ventana temporal define el tamaρo de uniσn de instantαneas del grafo, o la union de nodos y aristas en tiempo contνnuo. La ventana se desplaza la longitud del paso, de forma que la mιtrica es calculada en esos momentos. Empieza al prinicipio del intιrvalo temporal y finaliza cuando no puede alcanzar otro paso. Tanto la ventana como el paso son definidos como una duraciσn: float/integer en el caso de instantαneas, o fechas en el caso de tiempo contνnuo. diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_fr.properties b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_fr.properties index a1cb1c3c13..c8095acb91 100644 --- a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_fr.properties +++ b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_fr.properties @@ -1,64 +1,38 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 11\:41+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Interface utilisateur des statistiques et des m\u00e9triques - -CTL_StatisticsAction=Statistiques - -CTL_StatisticsTopComponent=Statistiques - -StatisticsTopComponent.settingsButton.text=Param\u00e8tres - -AvailableStatisticsChooser.title=M\u00e9triques disponibles - -StatisticsDisplayPanel.reportButton.text=Voir - -StatisticsDisplayPanel.runButton.text=Ex\u00e9cuter - -StatisticsDisplayPanel.name.text=nom - -StatisticsFrontEnd.displayLabel.text=Afficher le nom - -StatisticsFrontEnd.runStatus.run=Ex\u00e9cuter - -StatisticsFrontEnd.runStatus.cancel=Annuler - -StatisticsFrontEnd.resultLabel.text=R\u00e9sultats - -StatisticsFrontEnd.settingsPanel.title=Param\u00e8tres de {0} - -StatisticsFrontEnd.reportButton.toolTipText=Voir le rapport - -StatisticsFrontEnd.runButton.text=Ex\u00e9cuter - -DynamicSettingsPanel.TimeUnit.DAYS=JOURS - -DynamicSettingsPanel.TimeUnit.HOURS=HEURES - -DynamicSettingsPanel.TimeUnit.MILLISECONDS=MILLISECONDES - -DynamicSettingsPanel.TimeUnit.MINUTES=MINUTES - -DynamicSettingsPanel.TimeUnit.SECONDS=SECONDES - -DateRangeValidator.NotInRange={0} devrait \u00eatre compris entre {1} et {2} - -TickUnderWindowValidator.OverWindow=Le tic devrait \u00eatre inf\u00e9rieur ou \u00e9gal \u00e0 la fen\u00eatre temporelle - -DynamicSettingsPanel.jPanel1.border.title=Param\u00e8tres du temps - -DynamicSettingsPanel.jLabel2.text=Tic \: - -DynamicSettingsPanel.jLabel1.text=Taille de fen\u00eatre \: - -DynamicSettingsPanel.labelCurrentTimeline.text=Intervalle actuel de la timeline \: - -DynamicSettingsPanel.infoLabel.name=Fen\u00eatre glissante et tic - -DynamicSettingsPanel.infoLabel.description=La m\u00e9trique est calcul\u00e9e dans l'intervalle temporel de la timeline. La fen\u00eatre temporelle donne la taille de l'union des snapshots de graphe ou l'union des noeuds et des liens en temps continu. La fen\u00eatre se d\u00e9place de la longueur d'un tic de temps, ainsi la m\u00e9trique est calcul\u00e9e \u00e0 ces moments. La fen\u00eatre d\u00e9marre au d\u00e9but de l'intervalle, et termine quand aucun nouveau tic ne peut \u00eatre atteint. La fen\u00eatre et le tic sont d\u00e9finis par leur dur\u00e9e \: flottant/entier dans le cas de snapshots, ou dates en temps continu. +OpenIDE-Module-Short-Description=Interface utilisateur des statistiques et des mιtriques +CTL_StatisticsAction=Statistiques +CTL_StatisticsTopComponent=Statistiques +!HINT_StatisticsTopComponent= +StatisticsTopComponent.settingsButton.text=Paramθtres +AvailableStatisticsChooser.title = Mιtriques disponibles +StatisticsDisplayPanel.jXBusyLabel1.text= +StatisticsDisplayPanel.reportButton.text=Voir +StatisticsDisplayPanel.runButton.text=Exιcuter +StatisticsDisplayPanel.icon.text= +StatisticsDisplayPanel.name.text=nom +StatisticsFrontEnd.displayLabel.text=Afficher le nom +StatisticsFrontEnd.busyLabel.text= + +StatisticsFrontEnd.runStatus.run = Exιcuter +StatisticsFrontEnd.runStatus.cancel = Annuler +StatisticsFrontEnd.resultLabel.text=Rιsultats +StatisticsFrontEnd.settingsPanel.title = Paramθtres de {0} +StatisticsFrontEnd.reportButton.toolTipText=Voir le rapport +StatisticsFrontEnd.runButton.text=Exιcuter + +StatisticsFrontEnd.notDynamicGraph=Impossible de calculer une statistique dynamique si le graphe n'est pas dynamique + +DynamicSettingsPanel.TimeUnit.DAYS=JOURS +DynamicSettingsPanel.TimeUnit.HOURS=HEURES +DynamicSettingsPanel.TimeUnit.MILLISECONDS=MILLISECONDES +DynamicSettingsPanel.TimeUnit.MINUTES=MINUTES +DynamicSettingsPanel.TimeUnit.SECONDS=SECONDES + +DateRangeValidator.NotInRange = {0} devrait κtre compris entre {1} et {2} +TickUnderWindowValidator.OverWindow = Le tic devrait κtre infιrieur ou ιgal ΰ la fenκtre temporelle +DynamicSettingsPanel.jPanel1.border.title=Paramθtres du temps +DynamicSettingsPanel.jLabel2.text=Tic : +DynamicSettingsPanel.jLabel1.text=Taille de fenκtre : +DynamicSettingsPanel.labelCurrentTimeline.text=Intervalle actuel de la timeline : + +DynamicSettingsPanel.infoLabel.name = Fenκtre glissante et tic +DynamicSettingsPanel.infoLabel.description = La mιtrique est calculιe dans l'intervalle temporel de la timeline. La fenκtre temporelle donne la taille de l'union des snapshots de graphe ou l'union des noeuds et des liens en temps continu. La fenκtre se dιplace de la longueur d'un tic de temps, ainsi la mιtrique est calculιe ΰ ces moments. La fenκtre dιmarre au dιbut de l'intervalle, et termine quand aucun nouveau tic ne peut κtre atteint. La fenκtre et le tic sont dιfinis par leur durιe : flottant/entier dans le cas de snapshots, ou dates en temps continu. diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_he.properties b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_he.properties new file mode 100644 index 0000000000..6f010b8c79 --- /dev/null +++ b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_he.properties @@ -0,0 +1,33 @@ +OpenIDE-Module-Short-Description=Statistics and metrics UI +CTL_StatisticsAction=Statistics +CTL_StatisticsTopComponent=Statistics +!HINT_StatisticsTopComponent= +StatisticsTopComponent.settingsButton.text=Settings +AvailableStatisticsChooser.title=Available Metrics +StatisticsDisplayPanel.jXBusyLabel1.text= +StatisticsDisplayPanel.reportButton.text=View +StatisticsDisplayPanel.runButton.text=Run +StatisticsDisplayPanel.icon.text= +StatisticsDisplayPanel.name.text=name +StatisticsFrontEnd.displayLabel.text=Display Name +StatisticsFrontEnd.busyLabel.text= +StatisticsFrontEnd.runStatus.run=Run +StatisticsFrontEnd.runStatus.cancel=\u05d1\u05d8\u05dc +StatisticsFrontEnd.resultLabel.text=Result +StatisticsFrontEnd.settingsPanel.title={0} settings +StatisticsFrontEnd.reportButton.toolTipText=View report +StatisticsFrontEnd.runButton.text=Run +StatisticsFrontEnd.notDynamicGraph=Can't run a dynamic statistic if the graph isn't dynamic +DynamicSettingsPanel.TimeUnit.DAYS=DAYS +DynamicSettingsPanel.TimeUnit.HOURS=HOURS +DynamicSettingsPanel.TimeUnit.MILLISECONDS=MILLISECONDS +DynamicSettingsPanel.TimeUnit.MINUTES=MINUTES +DynamicSettingsPanel.TimeUnit.SECONDS=SECONDS +DateRangeValidator.NotInRange={0} should be between {1} and {2} +TickUnderWindowValidator.OverWindow=Tick should be less or equal than window +DynamicSettingsPanel.jPanel1.border.title=Time Settings +DynamicSettingsPanel.jLabel2.text=Tick: +DynamicSettingsPanel.jLabel1.text=Window size: +DynamicSettingsPanel.labelCurrentTimeline.text=Current timeline interval: +DynamicSettingsPanel.infoLabel.name=Sliding window and tick +DynamicSettingsPanel.infoLabel.description=The metric is computed within the timeline interval. The time window set the size of the union of graph snapshots or the union of nodes and edges in a continuous time. The window is moved of the length of the tick, so that the metric is computed at that moments. It starts at the beginning of the timeline interval, and ends when it cannot reach another tick. Both time window and tick are defined as a duration: float/integer in the case of snapshots, or dates in the case of continuous time. diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_hu.properties b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_hu.properties new file mode 100644 index 0000000000..760a6a2c10 --- /dev/null +++ b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_hu.properties @@ -0,0 +1,30 @@ + + +DynamicSettingsPanel.labelCurrentTimeline.text=Jelenlegi id\u0151intervallum: +DynamicSettingsPanel.jLabel2.text=Ketyeg\u00E9s: +StatisticsFrontEnd.runButton.text=Futtat +StatisticsFrontEnd.settingsPanel.title={0} be\u00E1ll\u00EDt\u00E1sai +AvailableStatisticsChooser.title=El\u00E9rhet\u0151 m\u00E9r\u0151sz\u00E1mok +DynamicSettingsPanel.jPanel1.border.title=Id\u0151be\u00E1ll\u00EDt\u00E1sok +DynamicSettingsPanel.TimeUnit.HOURS=\u00D3r\u00E1k +StatisticsFrontEnd.runStatus.run=Futtat +DynamicSettingsPanel.TimeUnit.MILLISECONDS=EZREDM\u00C1SODPERC +StatisticsDisplayPanel.name.text=n\u00E9v +StatisticsDisplayPanel.runButton.text=Futtat +DynamicSettingsPanel.jLabel1.text=Ablak m\u00E9rete: +CTL_StatisticsAction=Statisztika +StatisticsFrontEnd.runStatus.cancel=Megsz\u00FCnteti +!HINT_StatisticsTopComponent= +StatisticsTopComponent.settingsButton.text=Be\u00E1ll\u00EDt\u00E1sok +DateRangeValidator.NotInRange=A {0} \u00E9rt\u00E9knek {1} \u00E9s {2} k\u00F6z\u00F6tt kell lennie +CTL_StatisticsTopComponent=Statisztika +StatisticsFrontEnd.notDynamicGraph=Nem futtathat\u00F3 dinamikus statisztika, ha a grafikon nem dinamikus +DynamicSettingsPanel.TimeUnit.DAYS=NAPOK +StatisticsDisplayPanel.reportButton.text=N\u00E9zetek +DynamicSettingsPanel.infoLabel.description=A metrika az id\u0151vonal intervallum\u00E1n bel\u00FCl ker\u00FCl kisz\u00E1m\u00EDt\u00E1sra. Az id\u0151ablak be\u00E1ll\u00EDtja a gr\u00E1f pillanatk\u00E9peinek uni\u00F3j\u00E1nak vagy a csom\u00F3pontok \u00E9s \u00E9lek uni\u00F3j\u00E1nak m\u00E9ret\u00E9t egy folyamatos id\u0151ben. Az ablakot a pipa hossz\u00E1nak megfelel\u0151en mozgatjuk, \u00EDgy a metrika az adott pillanatban ker\u00FCl kisz\u00E1m\u00EDt\u00E1sra. Az id\u0151vonal intervallum\u00E1nak elej\u00E9n kezd\u0151dik, \u00E9s akkor \u00E9r v\u00E9get, amikor nem \u00E9r el egy m\u00E1sik ticket. Mind az id\u0151ablak, mind a tick id\u0151tartamk\u00E9nt van defini\u00E1lva: lebeg\u00E9s/eg\u00E9sz sz\u00E1m pillanatk\u00E9pek eset\u00E9n, vagy d\u00E1tum folyamatos id\u0151 eset\u00E9n. +DynamicSettingsPanel.TimeUnit.MINUTES=PERCEK +OpenIDE-Module-Short-Description=Statisztik\u00E1k \u00E9s metrik\u00E1k felhaszn\u00E1l\u00F3i fel\u00FClet +StatisticsFrontEnd.displayLabel.text=Kijelz\u0151 neve +StatisticsFrontEnd.resultLabel.text=Eredm\u00E9ny +StatisticsFrontEnd.reportButton.toolTipText=Jelent\u00E9s megtekint\u00E9se +DynamicSettingsPanel.TimeUnit.SECONDS=M\u00C1SODPERC diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_it.properties b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_it.properties new file mode 100644 index 0000000000..bc4bd9d83f --- /dev/null +++ b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_it.properties @@ -0,0 +1,33 @@ +OpenIDE-Module-Short-Description=Interfaccia utente metriche e statistiche +CTL_StatisticsAction=Statistics +CTL_StatisticsTopComponent=Statistics +!HINT_StatisticsTopComponent= +StatisticsTopComponent.settingsButton.text=Impostazioni +AvailableStatisticsChooser.title=Available Metrics +StatisticsDisplayPanel.jXBusyLabel1.text= +StatisticsDisplayPanel.reportButton.text=View +StatisticsDisplayPanel.runButton.text=Esegui +StatisticsDisplayPanel.icon.text= +StatisticsDisplayPanel.name.text=nome +StatisticsFrontEnd.displayLabel.text=Visualizza nome +StatisticsFrontEnd.busyLabel.text= +StatisticsFrontEnd.runStatus.run=Esegui +StatisticsFrontEnd.runStatus.cancel=Annulla +StatisticsFrontEnd.resultLabel.text=Risultato +StatisticsFrontEnd.settingsPanel.title={0} impostazioni +StatisticsFrontEnd.reportButton.toolTipText=View report +StatisticsFrontEnd.runButton.text=Esegui +StatisticsFrontEnd.notDynamicGraph=Can't run a dynamic statistic if the graph isn't dynamic +DynamicSettingsPanel.TimeUnit.DAYS=GIORNI +DynamicSettingsPanel.TimeUnit.HOURS=ORE +DynamicSettingsPanel.TimeUnit.MILLISECONDS=MILLISECONDI +DynamicSettingsPanel.TimeUnit.MINUTES=MINUTI +DynamicSettingsPanel.TimeUnit.SECONDS=SECONDI +DateRangeValidator.NotInRange={0} should be between {1} and {2} +TickUnderWindowValidator.OverWindow=Tick should be less or equal than window +DynamicSettingsPanel.jPanel1.border.title=Impostazioni temporali +DynamicSettingsPanel.jLabel2.text=Tick: +DynamicSettingsPanel.jLabel1.text=Dimensione finestra: +DynamicSettingsPanel.labelCurrentTimeline.text=Current timeline interval: +DynamicSettingsPanel.infoLabel.name=Sliding window and tick +DynamicSettingsPanel.infoLabel.description=The metric is computed within the timeline interval. The time window set the size of the union of graph snapshots or the union of nodes and edges in a continuous time. The window is moved of the length of the tick, so that the metric is computed at that moments. It starts at the beginning of the timeline interval, and ends when it cannot reach another tick. Both time window and tick are defined as a duration: float/integer in the case of snapshots, or dates in the case of continuous time. diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_ja.properties b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_ja.properties index 49e400b5bd..c62af32e0f 100644 --- a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_ja.properties +++ b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_ja.properties @@ -1,63 +1,38 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-23 10\:02+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u7d71\u8a08\u3068\u8a08\u91cf\u306eUI - -CTL_StatisticsAction=\u7d71\u8a08 - -CTL_StatisticsTopComponent=\u7d71\u8a08 - -StatisticsTopComponent.settingsButton.text=\u8a2d\u5b9a - -AvailableStatisticsChooser.title=\u5229\u7528\u53ef\u80fd\u306a\u8a08\u91cf - -StatisticsDisplayPanel.reportButton.text=\u30d3\u30e5\u30fc - -StatisticsDisplayPanel.runButton.text=\u5b9f\u884c - -StatisticsDisplayPanel.name.text=\u540d\u524d - -StatisticsFrontEnd.displayLabel.text=\u540d\u524d\u3092\u8868\u793a - -StatisticsFrontEnd.runStatus.run=\u5b9f\u884c - -StatisticsFrontEnd.runStatus.cancel=\u30ad\u30e3\u30f3\u30bb\u30eb - -StatisticsFrontEnd.resultLabel.text=\u7d50\u679c - -StatisticsFrontEnd.settingsPanel.title={0}\u8a2d\u5b9a - -StatisticsFrontEnd.reportButton.toolTipText=\u5831\u544a\u3092\u95b2\u89a7 - -StatisticsFrontEnd.runButton.text=\u5b9f\u884c - -DynamicSettingsPanel.TimeUnit.DAYS=\u65e5\u6570 - -DynamicSettingsPanel.TimeUnit.HOURS=\u6642\u9593\u6570 - -DynamicSettingsPanel.TimeUnit.MILLISECONDS=\u30df\u30ea\u79d2\u6570 - -DynamicSettingsPanel.TimeUnit.MINUTES=\u5206\u6570 - -DynamicSettingsPanel.TimeUnit.SECONDS=\u79d2\u6570 - -DateRangeValidator.NotInRange={0} \u306f {1}\u3068 {2}\u306e\u9593\u306b\u3042\u308b\u3079\u304d\u3067\u3059\u3002 - -TickUnderWindowValidator.OverWindow=\u76ee\u76db\u308a\u306f\u30a6\u30a3\u30f3\u30c9\u30a6\u4ee5\u4e0b\u3067\u3042\u308b\u3079\u304d\u3067\u3059\u3002 - -DynamicSettingsPanel.jPanel1.border.title=\u6642\u9593\u8a2d\u5b9a - -DynamicSettingsPanel.jLabel2.text=\u76ee\u76db\u308a\: - -DynamicSettingsPanel.jLabel1.text=\u30a6\u30a3\u30f3\u30c9\u30a6\u30b5\u30a4\u30ba\: - -DynamicSettingsPanel.labelCurrentTimeline.text=\u73fe\u5728\u306e\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3\u306e\u9593\u9694\: - -DynamicSettingsPanel.infoLabel.name=\u30b9\u30e9\u30a4\u30c7\u30a3\u30f3\u30b0\u30a6\u30a3\u30f3\u30c9\u30a6\u3068\u76ee\u76db\u308a - -DynamicSettingsPanel.infoLabel.description=\u8a08\u91cf\u306f\u3001\u6642\u9593\u8ef8\u306e\u533a\u9593\u5185\u3067\u8a08\u7b97\u3055\u308c\u307e\u3059\u3002\u6642\u9593\u30a6\u30a3\u30f3\u30c9\u30a6\u306f\u3001\u30b0\u30e9\u30d5\u306e\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u307e\u305f\u306f\u9023\u7d9a\u7684\u306a\u6642\u9593\u5185\u306e\u30ce\u30fc\u30c9\u3068\u8fba\u306e\u7d44\u5408\u306e\u30b5\u30a4\u30ba\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u30a6\u30a3\u30f3\u30c9\u30a6\u306f\u3001\u8a08\u91cf\u304c\u305d\u306e\u77ac\u9593\u3067\u8a08\u7b97\u3055\u308c\u308b\u3088\u3046\u306b\u3001\u76ee\u76db\u308a\u306e\u9577\u3055\u306b\u79fb\u52d5\u3059\u308b\u3002\u305d\u308c\u306f\u3001\u6642\u9593\u8ef8\u306e\u533a\u9593\u306e\u958b\u59cb\u6642\u306b\u958b\u59cb\u3057\u3001\u5225\u306e\u76ee\u76db\u308a\u306b\u5230\u9054\u3067\u304d\u306a\u3044\u3068\u304d\u306b\u7d42\u4e86\u3059\u308b\u3002\u6642\u9593\u30a6\u30a3\u30f3\u30c9\u30a6\u3068\u76ee\u76db\u308a\u306e\u4e21\u65b9\u306f\u3001\u6301\u7d9a\u6642\u9593\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b\: \u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u306e\u5834\u5408\u306f\u6d6e\u52d5\u5c0f\u6570\u70b9/\u6574\u6570\u3001\u307e\u305f\u306f\u9023\u7d9a\u6642\u9593\u306e\u5834\u5408\u306f\u65e5\u4ed8\u3002 +OpenIDE-Module-Short-Description=\u7d71\u8a08\u3068\u8a08\u91cf\u306eUI +CTL_StatisticsAction=\u7d71\u8a08 +CTL_StatisticsTopComponent=\u7d71\u8a08 +!HINT_StatisticsTopComponent= +StatisticsTopComponent.settingsButton.text=\u8a2d\u5b9a +AvailableStatisticsChooser.title = \u5229\u7528\u53ef\u80fd\u306a\u8a08\u91cf +StatisticsDisplayPanel.jXBusyLabel1.text= +StatisticsDisplayPanel.reportButton.text=\u30d3\u30e5\u30fc +StatisticsDisplayPanel.runButton.text=\u5b9f\u884c +StatisticsDisplayPanel.icon.text= +StatisticsDisplayPanel.name.text=\u540d\u524d +StatisticsFrontEnd.displayLabel.text=\u540d\u524d\u3092\u8868\u793a +StatisticsFrontEnd.busyLabel.text= + +StatisticsFrontEnd.runStatus.run = \u5b9f\u884c +StatisticsFrontEnd.runStatus.cancel = \u30ad\u30e3\u30f3\u30bb\u30eb +StatisticsFrontEnd.resultLabel.text=\u7d50\u679c +StatisticsFrontEnd.settingsPanel.title = {0}\u8a2d\u5b9a +StatisticsFrontEnd.reportButton.toolTipText=\u5831\u544a\u3092\u95b2\u89a7 +StatisticsFrontEnd.runButton.text=\u5b9f\u884c + +# StatisticsFrontEnd.notDynamicGraph=Can't run a dynamic statistic if the graph isn't dynamic + +DynamicSettingsPanel.TimeUnit.DAYS=\u65e5\u6570 +DynamicSettingsPanel.TimeUnit.HOURS=\u6642\u9593\u6570 +DynamicSettingsPanel.TimeUnit.MILLISECONDS=\u30df\u30ea\u79d2\u6570 +DynamicSettingsPanel.TimeUnit.MINUTES=\u5206\u6570 +DynamicSettingsPanel.TimeUnit.SECONDS=\u79d2\u6570 + +DateRangeValidator.NotInRange = {0} \u306f {1}\u3068 {2}\u306e\u9593\u306b\u3042\u308b\u3079\u304d\u3067\u3059\u3002 +TickUnderWindowValidator.OverWindow = \u76ee\u76db\u308a\u306f\u30a6\u30a3\u30f3\u30c9\u30a6\u4ee5\u4e0b\u3067\u3042\u308b\u3079\u304d\u3067\u3059\u3002 +DynamicSettingsPanel.jPanel1.border.title=\u6642\u9593\u8a2d\u5b9a +DynamicSettingsPanel.jLabel2.text=\u76ee\u76db\u308a: +DynamicSettingsPanel.jLabel1.text=\u30a6\u30a3\u30f3\u30c9\u30a6\u30b5\u30a4\u30ba: +DynamicSettingsPanel.labelCurrentTimeline.text=\u73fe\u5728\u306e\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3\u306e\u9593\u9694: + +DynamicSettingsPanel.infoLabel.name = \u30b9\u30e9\u30a4\u30c7\u30a3\u30f3\u30b0\u30a6\u30a3\u30f3\u30c9\u30a6\u3068\u76ee\u76db\u308a +DynamicSettingsPanel.infoLabel.description = \u8a08\u91cf\u306f\u3001\u6642\u9593\u8ef8\u306e\u533a\u9593\u5185\u3067\u8a08\u7b97\u3055\u308c\u307e\u3059\u3002\u6642\u9593\u30a6\u30a3\u30f3\u30c9\u30a6\u306f\u3001\u30b0\u30e9\u30d5\u306e\u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u307e\u305f\u306f\u9023\u7d9a\u7684\u306a\u6642\u9593\u5185\u306e\u30ce\u30fc\u30c9\u3068\u8fba\u306e\u7d44\u5408\u306e\u30b5\u30a4\u30ba\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u30a6\u30a3\u30f3\u30c9\u30a6\u306f\u3001\u8a08\u91cf\u304c\u305d\u306e\u77ac\u9593\u3067\u8a08\u7b97\u3055\u308c\u308b\u3088\u3046\u306b\u3001\u76ee\u76db\u308a\u306e\u9577\u3055\u306b\u79fb\u52d5\u3059\u308b\u3002\u305d\u308c\u306f\u3001\u6642\u9593\u8ef8\u306e\u533a\u9593\u306e\u958b\u59cb\u6642\u306b\u958b\u59cb\u3057\u3001\u5225\u306e\u76ee\u76db\u308a\u306b\u5230\u9054\u3067\u304d\u306a\u3044\u3068\u304d\u306b\u7d42\u4e86\u3059\u308b\u3002\u6642\u9593\u30a6\u30a3\u30f3\u30c9\u30a6\u3068\u76ee\u76db\u308a\u306e\u4e21\u65b9\u306f\u3001\u6301\u7d9a\u6642\u9593\u3068\u3057\u3066\u5b9a\u7fa9\u3055\u308c\u3066\u3044\u308b: \u30b9\u30ca\u30c3\u30d7\u30b7\u30e7\u30c3\u30c8\u306e\u5834\u5408\u306f\u6d6e\u52d5\u5c0f\u6570\u70b9/\u6574\u6570\u3001\u307e\u305f\u306f\u9023\u7d9a\u6642\u9593\u306e\u5834\u5408\u306f\u65e5\u4ed8\u3002 diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_ko.properties b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_ko.properties new file mode 100644 index 0000000000..c02b2e5691 --- /dev/null +++ b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_ko.properties @@ -0,0 +1,32 @@ + + +DynamicSettingsPanel.labelCurrentTimeline.text=\uD604\uC7AC \uC2DC\uAC04 \uCD95 \uAC04\uACA9: +DynamicSettingsPanel.jLabel2.text=\uD2F1(Tick): +StatisticsFrontEnd.runButton.text=\uC2E4\uD589 +TickUnderWindowValidator.OverWindow=\uD2F1\uC740 \uC708\uB3C4\uC6B0\uBCF4\uB2E4 \uC791\uAC70\uB098 \uAC19\uC544\uC57C \uD569\uB2C8\uB2E4 +StatisticsFrontEnd.settingsPanel.title={0} \uAC1C \uC124\uC815 +AvailableStatisticsChooser.title=\uAC00\uB2A5\uD55C \uBA54\uD2B8\uB9AD +DynamicSettingsPanel.infoLabel.name=\uC2AC\uB77C\uC774\uB529 \uC708\uB3C4\uC6B0\uC640 \uD2F1 +DynamicSettingsPanel.jPanel1.border.title=\uC2DC\uAC04 \uC124\uC815 +DynamicSettingsPanel.TimeUnit.HOURS=\uC2DC\uAC04 +StatisticsFrontEnd.runStatus.run=\uC2E4\uD589 +DynamicSettingsPanel.TimeUnit.MILLISECONDS=\uBC00\uB9AC\uCD08 +StatisticsDisplayPanel.name.text=\uC774\uB984 +StatisticsDisplayPanel.runButton.text=\uC2E4\uD589 +DynamicSettingsPanel.jLabel1.text=\uC708\uB3C4\uC6B0 \uD06C\uAE30: +CTL_StatisticsAction=\uD1B5\uACC4 +StatisticsFrontEnd.runStatus.cancel=\uCDE8\uC18C +!HINT_StatisticsTopComponent= +StatisticsTopComponent.settingsButton.text=\uC124\uC815 +DateRangeValidator.NotInRange={0}\uB294 {1}\uC640 {2} \uC0AC\uC774\uC5D0 \uC788\uC5B4\uC57C \uD569\uB2C8\uB2E4 +CTL_StatisticsTopComponent=\uD1B5\uACC4 +StatisticsFrontEnd.notDynamicGraph=\uADF8\uB798\uD504\uAC00 \uB3D9\uC801\uC774\uC9C0 \uC54A\uC73C\uBA74 \uB3D9\uC801 \uD1B5\uACC4\uB97C \uC2E4\uD589\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 +DynamicSettingsPanel.TimeUnit.DAYS=\uB0A0\uC9DC +StatisticsDisplayPanel.reportButton.text=\uBCF4\uAE30 +DynamicSettingsPanel.infoLabel.description=\uBA54\uD2B8\uB9AD\uC740 \uC2DC\uAC04 \uCD95 \uAC04\uACA9 \uB0B4\uC5D0\uC11C \uACC4\uC0B0\uB429\uB2C8\uB2E4. \uC2DC\uAC04 \uC708\uB3C4\uC6B0\uB294 \uC5F0\uC18D\uC801\uC778 \uC2DC\uAC04\uC5D0\uC11C \uADF8\uB798\uD504 \uC2A4\uB0C5\uC0F7\uC758 \uC870\uD569 \uB610\uB294 \uB178\uB4DC\uC640 \uC5E3\uC9C0 \uC870\uD569\uC758 \uD06C\uAE30\uB97C \uC124\uC815\uD569\uB2C8\uB2E4. \uC708\uB3C4\uC6B0\uB294 \uD2F1\uC758 \uAE38\uC774\uB9CC\uD07C \uC774\uB3D9\uB418\uACE0 \uD574\uB2F9 \uC21C\uAC04 \uBA54\uD2B8\uB9AD\uC774 \uACC4\uC0B0\uB429\uB2C8\uB2E4. \uC2DC\uAC04 \uCD95 \uAC04\uACA9\uC758 \uC2DC\uC791 \uBD80\uBD84\uC5D0\uC11C \uC2DC\uC791\uD558\uC5EC \uB2E4\uB978 \uD2F1\uC5D0 \uB3C4\uB2EC\uD560 \uC218 \uC5C6\uC744 \uB54C \uB05D\uB0A9\uB2C8\uB2E4. \uC2DC\uAC04 \uC708\uB3C4\uC6B0\uC640 \uD2F1 \uBAA8\uB450 \uC9C0\uC18D \uC2DC\uAC04(\uC2A4\uB0C5\uC0F7\uC758 \uACBD\uC6B0 \uD50C\uB85C\uD305/\uC815\uC218, \uC5F0\uC18D\uC801\uC778 \uC2DC\uAC04\uC758 \uACBD\uC6B0 \uB0A0\uC9DC)\uC73C\uB85C \uC815\uC758\uB429\uB2C8\uB2E4. +DynamicSettingsPanel.TimeUnit.MINUTES=\uBD84 +OpenIDE-Module-Short-Description=\uD1B5\uACC4\uC640 \uCE21\uC815\uCE58 UI +StatisticsFrontEnd.displayLabel.text=\uD45C\uC2DC \uC774\uB984 +StatisticsFrontEnd.resultLabel.text=\uACB0\uACFC +StatisticsFrontEnd.reportButton.toolTipText=\uBCF4\uACE0\uC11C \uBCF4\uAE30 +DynamicSettingsPanel.TimeUnit.SECONDS=\uCD08 diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_nl.properties b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_nl.properties new file mode 100644 index 0000000000..18c03508b1 --- /dev/null +++ b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_nl.properties @@ -0,0 +1,33 @@ +OpenIDE-Module-Short-Description=Statistics and metrics UI +CTL_StatisticsAction=Statistieken +CTL_StatisticsTopComponent=Statistieken +!HINT_StatisticsTopComponent= +StatisticsTopComponent.settingsButton.text=Instellingen +AvailableStatisticsChooser.title=Available Metrics +StatisticsDisplayPanel.jXBusyLabel1.text= +StatisticsDisplayPanel.reportButton.text=Weergeven +StatisticsDisplayPanel.runButton.text=Uitvoeren +StatisticsDisplayPanel.icon.text= +StatisticsDisplayPanel.name.text=naam +StatisticsFrontEnd.displayLabel.text=Weergavenaam +StatisticsFrontEnd.busyLabel.text= +StatisticsFrontEnd.runStatus.run=Uitvoeren +StatisticsFrontEnd.runStatus.cancel=Annuleren +StatisticsFrontEnd.resultLabel.text=Resultaat +StatisticsFrontEnd.settingsPanel.title={0} settings +StatisticsFrontEnd.reportButton.toolTipText=Rapport weergeven +StatisticsFrontEnd.runButton.text=Uitvoeren +StatisticsFrontEnd.notDynamicGraph=Kan geen dynamische statistiek uitvoeren als de graaf niet dynamisch is +DynamicSettingsPanel.TimeUnit.DAYS=DAGEN +DynamicSettingsPanel.TimeUnit.HOURS=UUR +DynamicSettingsPanel.TimeUnit.MILLISECONDS=MILLISECONDEN +DynamicSettingsPanel.TimeUnit.MINUTES=MINUTEN +DynamicSettingsPanel.TimeUnit.SECONDS=SECONDEN +DateRangeValidator.NotInRange={0} should be between {1} and {2} +TickUnderWindowValidator.OverWindow=Tick should be less or equal than window +DynamicSettingsPanel.jPanel1.border.title=Time Settings +DynamicSettingsPanel.jLabel2.text=Tick: +DynamicSettingsPanel.jLabel1.text=Venstergrootte: +DynamicSettingsPanel.labelCurrentTimeline.text=Huidig tijdlijninterval: +DynamicSettingsPanel.infoLabel.name=Sliding window and tick +DynamicSettingsPanel.infoLabel.description=The metric is computed within the timeline interval. The time window set the size of the union of graph snapshots or the union of nodes and edges in a continuous time. The window is moved of the length of the tick, so that the metric is computed at that moments. It starts at the beginning of the timeline interval, and ends when it cannot reach another tick. Both time window and tick are defined as a duration: float/integer in the case of snapshots, or dates in the case of continuous time. diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_pt_BR.properties b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_pt_BR.properties index 863747c32c..b898377af6 100644 --- a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_pt_BR.properties +++ b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_pt_BR.properties @@ -1,64 +1,38 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -# C\u00e9lio Faria Jr. , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 12\:25+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Interface de usu\u00e1rio de estat\u00edsticas e m\u00e9tricas - -CTL_StatisticsAction=Estat\u00edsticas - -CTL_StatisticsTopComponent=Estat\u00edsticas - -StatisticsTopComponent.settingsButton.text=Configura\u00e7\u00f5es - -AvailableStatisticsChooser.title=M\u00e9tricas dispon\u00edveis - -StatisticsDisplayPanel.reportButton.text=Visualizar - -StatisticsDisplayPanel.runButton.text=Executar - -StatisticsDisplayPanel.name.text=nome - -StatisticsFrontEnd.displayLabel.text=Nome para exibi\u00e7\u00e3o - -StatisticsFrontEnd.runStatus.run=Executar - -StatisticsFrontEnd.runStatus.cancel=Cancelar - -StatisticsFrontEnd.resultLabel.text=Resultado - -StatisticsFrontEnd.settingsPanel.title={0} configura\u00e7\u00f5es - -StatisticsFrontEnd.reportButton.toolTipText=Visualizar relat\u00f3rio - -StatisticsFrontEnd.runButton.text=Executar - -DynamicSettingsPanel.TimeUnit.DAYS=DIAS - -DynamicSettingsPanel.TimeUnit.HOURS=HORAS - -DynamicSettingsPanel.TimeUnit.MILLISECONDS=MILISEGUNDOS - -DynamicSettingsPanel.TimeUnit.MINUTES=MINUTOS - -DynamicSettingsPanel.TimeUnit.SECONDS=SEGUNDOS - -DateRangeValidator.NotInRange={0} deve estar entre {1} e {2} - -TickUnderWindowValidator.OverWindow=O instante deve ser menor ou igual \u00e0 janela - -DynamicSettingsPanel.jPanel1.border.title=Configura\u00e7\u00f5es de tempo - -DynamicSettingsPanel.jLabel2.text=Instante\: - -DynamicSettingsPanel.jLabel1.text=Tamanho da janela\: - -DynamicSettingsPanel.labelCurrentTimeline.text=Intervalo de tempo atual\: - -DynamicSettingsPanel.infoLabel.name=Janela deslizante e instante - -DynamicSettingsPanel.infoLabel.description=A m\u00e9trica \u00e9 calculada dentro do intervalo de tempo. A janela de tempo define o tamanho da uni\u00e3o de snapshots de grafos ou de n\u00f3s e arestas em um tempo cont\u00ednuo. A janela \u00e9 movida por um comprimento de instante, de modo que a m\u00e9trica seja calculada nestes momentos. O c\u00e1lculo come\u00e7a no in\u00edcio do intervalo de tempo e termina quando n\u00e3o \u00e9 poss\u00edvel calcular inteiramente outro instante. Tanto a janela de tempo quanto o instante s\u00e3o definidos como dura\u00e7\u00f5es\: float/inteiro (no caso de snapshots) ou datas (no caso de tempo cont\u00ednuo). +OpenIDE-Module-Short-Description=Interface de usuαrio de estatνsticas e mιtricas +CTL_StatisticsAction=Estatνsticas +CTL_StatisticsTopComponent=Estatνsticas +!HINT_StatisticsTopComponent= +StatisticsTopComponent.settingsButton.text=Configuraηυes +AvailableStatisticsChooser.title = Mιtricas disponνveis +StatisticsDisplayPanel.jXBusyLabel1.text= +StatisticsDisplayPanel.reportButton.text=Visualizar +StatisticsDisplayPanel.runButton.text=Executar +StatisticsDisplayPanel.icon.text= +StatisticsDisplayPanel.name.text=nome +StatisticsFrontEnd.displayLabel.text=Nome para exibiηγo +StatisticsFrontEnd.busyLabel.text= + +StatisticsFrontEnd.runStatus.run = Executar +StatisticsFrontEnd.runStatus.cancel = Cancelar +StatisticsFrontEnd.resultLabel.text=Resultado +StatisticsFrontEnd.settingsPanel.title = {0} configuraηυes +StatisticsFrontEnd.reportButton.toolTipText=Visualizar relatσrio +StatisticsFrontEnd.runButton.text=Executar + +StatisticsFrontEnd.notDynamicGraph=Nγo ι possνvel obter uma estatνstica dinβmica se o grafo nγo for dinβmico + +DynamicSettingsPanel.TimeUnit.DAYS=DIAS +DynamicSettingsPanel.TimeUnit.HOURS=HORAS +DynamicSettingsPanel.TimeUnit.MILLISECONDS=MILISEGUNDOS +DynamicSettingsPanel.TimeUnit.MINUTES=MINUTOS +DynamicSettingsPanel.TimeUnit.SECONDS=SEGUNDOS + +DateRangeValidator.NotInRange = {0} deve estar entre {1} e {2} +TickUnderWindowValidator.OverWindow = O instante deve ser menor ou igual ΰ janela +DynamicSettingsPanel.jPanel1.border.title=Configuraηυes de tempo +DynamicSettingsPanel.jLabel2.text=Instante: +DynamicSettingsPanel.jLabel1.text=Tamanho da janela: +DynamicSettingsPanel.labelCurrentTimeline.text=Intervalo de tempo atual: + +DynamicSettingsPanel.infoLabel.name = Janela deslizante e instante +DynamicSettingsPanel.infoLabel.description = A mιtrica ι calculada dentro do intervalo de tempo. A janela de tempo define o tamanho da uniγo de snapshots de grafos ou de nσs e arestas em um tempo contνnuo. A janela ι movida por um comprimento de instante, de modo que a mιtrica seja calculada nestes momentos. O cαlculo comeηa no inνcio do intervalo de tempo e termina quando nγo ι possνvel calcular inteiramente outro instante. Tanto a janela de tempo quanto o instante sγo definidos como duraηυes: float/inteiro (no caso de snapshots) ou datas (no caso de tempo contνnuo). diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_ro.properties b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_ro.properties new file mode 100644 index 0000000000..bd690a03c3 --- /dev/null +++ b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_ro.properties @@ -0,0 +1,32 @@ + + +CTL_StatisticsAction=Statistici +CTL_StatisticsTopComponent=Statistici +AvailableStatisticsChooser.title=Metrici disponibile +StatisticsDisplayPanel.runButton.text=Ruleaz\u0103 +StatisticsDisplayPanel.name.text=nume +StatisticsFrontEnd.settingsPanel.title={0} set\u0103ri +StatisticsFrontEnd.runButton.text=Ruleaz\u0103 +DynamicSettingsPanel.TimeUnit.DAYS=ZILE +DynamicSettingsPanel.TimeUnit.HOURS=ORE +DynamicSettingsPanel.TimeUnit.MILLISECONDS=MILISECUNDE +DynamicSettingsPanel.jPanel1.border.title=Set\u0103ri de timp +DynamicSettingsPanel.jLabel1.text=Dimensiunea ferestrei: +DynamicSettingsPanel.jLabel2.text=Pas: +DynamicSettingsPanel.labelCurrentTimeline.text=Interval de timp curent: +DynamicSettingsPanel.infoLabel.name=Mi\u0219carea ferestrei \u0219i pasul +OpenIDE-Module-Short-Description=Interfa\u021B\u0103 pentru statistici \u0219i metrici +!HINT_StatisticsTopComponent= +StatisticsTopComponent.settingsButton.text=Set\u0103ri +StatisticsDisplayPanel.reportButton.text=Vizualizare +DynamicSettingsPanel.TimeUnit.SECONDS=SECUNDE +DateRangeValidator.NotInRange={0} ar trebui s\u0103 fie \u00EEntre {1} \u0219i {2} +DynamicSettingsPanel.TimeUnit.MINUTES=MINUTE +StatisticsFrontEnd.displayLabel.text=Numele afi\u0219at +StatisticsFrontEnd.runStatus.run=Ruleaz\u0103 +StatisticsFrontEnd.runStatus.cancel=Anuleaz\u0103 +StatisticsFrontEnd.resultLabel.text=Rezultat +StatisticsFrontEnd.reportButton.toolTipText=Vizualizare raport +StatisticsFrontEnd.notDynamicGraph=Nu se poate rula o statistic\u0103 dinamic\u0103 dac\u0103 graful nu este dinamic +TickUnderWindowValidator.OverWindow=Pasul ar trebui s\u0103 fie mai mic sau egal ca fereastra +DynamicSettingsPanel.infoLabel.description=Metrica este calculat\u0103 \u00EEn intervalul de timp. Fereastra de timp stabile\u0219te dimensiunea uniunii instantaneelor de graf sau a uniunii nodurilor \u0219i muchiilor \u00EEntr-un timp continuu. Fereastra este deplasat\u0103 cu lungimea pasului, astfel \u00EEnc\u00E2t metrica este calculat\u0103 la momentul respectiv. Ea \u00EEncepe la \u00EEnceputul intervalului de timp \u0219i se termin\u0103 atunci c\u00E2nd nu mai poate ajunge la un alt pas. At\u00E2t fereastra de timp, c\u00E2t \u0219i pasul sunt definite ca durat\u0103: zecimal/\u00EEntreg \u00EEn cazul instantaneelor sau date \u00EEn cazul timpului continuu. diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_ru.properties b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_ru.properties index 886574e1d1..b48b8c600e 100644 --- a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_ru.properties +++ b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_ru.properties @@ -1,63 +1,35 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 15\:28+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - OpenIDE-Module-Short-Description=Statistics and metrics UI - CTL_StatisticsAction=\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 - CTL_StatisticsTopComponent=\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 - +!HINT_StatisticsTopComponent= StatisticsTopComponent.settingsButton.text=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 - AvailableStatisticsChooser.title=\u0414\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 - +StatisticsDisplayPanel.jXBusyLabel1.text= StatisticsDisplayPanel.reportButton.text=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 - StatisticsDisplayPanel.runButton.text=\u0417\u0430\u043f\u0443\u0441\u043a - +StatisticsDisplayPanel.icon.text= StatisticsDisplayPanel.name.text=\u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 - StatisticsFrontEnd.displayLabel.text=\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0435 \u0438\u043c\u044f - +StatisticsFrontEnd.busyLabel.text= StatisticsFrontEnd.runStatus.run=\u0417\u0430\u043f\u0443\u0441\u043a - StatisticsFrontEnd.runStatus.cancel=\u041e\u0442\u043c\u0435\u043d\u0430 - StatisticsFrontEnd.resultLabel.text=\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 - StatisticsFrontEnd.settingsPanel.title=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 {0} - StatisticsFrontEnd.reportButton.toolTipText=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 \u043e\u0442\u0447\u0451\u0442\u0430 - StatisticsFrontEnd.runButton.text=\u0417\u0430\u043f\u0443\u0441\u043a -DynamicSettingsPanel.TimeUnit.DAYS=\u0414\u041d\u0418 +# StatisticsFrontEnd.notDynamicGraph=Can't run a dynamic statistic if the graph isn't dynamic +DynamicSettingsPanel.TimeUnit.DAYS=\u0414\u041d\u0418 DynamicSettingsPanel.TimeUnit.HOURS=\u0427\u0410\u0421\u042b - DynamicSettingsPanel.TimeUnit.MILLISECONDS=\u041c\u0418\u041b\u041b\u0418\u0421\u0415\u041a\u0423\u041d\u0414\u042b - DynamicSettingsPanel.TimeUnit.MINUTES=\u041c\u0418\u041d\u0423\u0422\u042b - DynamicSettingsPanel.TimeUnit.SECONDS=\u0421\u0415\u041a\u0423\u041d\u0414\u042b - DateRangeValidator.NotInRange=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {0} \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043c\u0435\u0436\u0434\u0443 {1} \u0438 {2} - TickUnderWindowValidator.OverWindow=\u041a\u0432\u0430\u043d\u0442 \u0441\u0434\u0432\u0438\u0433\u0430 \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u043f\u0440\u0435\u0432\u044b\u0448\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u043a\u043d\u0430 - DynamicSettingsPanel.jPanel1.border.title=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 - -DynamicSettingsPanel.jLabel2.text=\u041a\u0432\u0430\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0434\u0432\u0438\u0433\u0430\: - -DynamicSettingsPanel.jLabel1.text=\u0420\u0430\u0437\u043c\u0435\u0440 \u043e\u043a\u043d\u0430\: - -DynamicSettingsPanel.labelCurrentTimeline.text=\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\: - +DynamicSettingsPanel.jLabel2.text=\u041a\u0432\u0430\u043d\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0434\u0432\u0438\u0433\u0430: +DynamicSettingsPanel.jLabel1.text=\u0420\u0430\u0437\u043c\u0435\u0440 \u043e\u043a\u043d\u0430: +DynamicSettingsPanel.labelCurrentTimeline.text=\u0422\u0435\u043a\u0443\u0449\u0438\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d: DynamicSettingsPanel.infoLabel.name=\u0421\u043a\u043e\u043b\u044c\u0437\u044f\u0449\u0435\u0435 \u043e\u043a\u043d\u043e \u0438 \u043a\u0432\u0430\u043d\u0442 \u0441\u0434\u0432\u0438\u0433\u0430 - -DynamicSettingsPanel.infoLabel.description=\u041c\u0435\u0442\u0440\u0438\u043a\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430. \u0420\u0430\u0437\u043c\u0435\u0440 \u043e\u043a\u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0440\u0435\u0437\u043e\u0432 \u0438\u043b\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0443\u0437\u043b\u043e\u0432 \u0438 \u0440\u0451\u0431\u0435\u0440 \u0432 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435. \u041e\u043a\u043d\u043e \u0434\u0432\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0432\u0430\u043d\u0442\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0434\u0432\u0438\u0433\u0430, \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u0440\u0438\u043a\u0430. \u0420\u0430\u0441\u0447\u0451\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0441\u0434\u0432\u0438\u0433 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d. \u0418 \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u043a\u043d\u0430, \u0438 \u043a\u0432\u0430\u043d\u0442 \u0441\u0434\u0432\u0438\u0433\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u0438\: float/integer \u0432 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u043b\u0438 dates \u0432 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435. +DynamicSettingsPanel.infoLabel.description=\u041c\u0435\u0442\u0440\u0438\u043a\u0430 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430. \u0420\u0430\u0437\u043c\u0435\u0440 \u043e\u043a\u043d\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0441\u0440\u0435\u0437\u043e\u0432 \u0438\u043b\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0443\u0437\u043b\u043e\u0432 \u0438 \u0440\u0451\u0431\u0435\u0440 \u0432 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435. \u041e\u043a\u043d\u043e \u0434\u0432\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u043d\u0430 \u0440\u0430\u0437\u043c\u0435\u0440 \u043a\u0432\u0430\u043d\u0442\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0441\u0434\u0432\u0438\u0433\u0430, \u043d\u0430 \u043a\u0430\u0436\u0434\u043e\u043c \u0448\u0430\u0433\u0435 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u0440\u0438\u043a\u0430. \u0420\u0430\u0441\u0447\u0451\u0442 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0441\u044f \u0441 \u043d\u0430\u0447\u0430\u043b\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 \u0438 \u0437\u0430\u0432\u0435\u0440\u0448\u0430\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 \u0441\u0434\u0432\u0438\u0433 \u043d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u0435\u043d. \u0418 \u0440\u0430\u0437\u043c\u0435\u0440 \u043e\u043a\u043d\u0430, \u0438 \u043a\u0432\u0430\u043d\u0442 \u0441\u0434\u0432\u0438\u0433\u0430 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u0438: float/integer \u0432 \u0434\u0438\u0441\u043a\u0440\u0435\u0442\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0438\u043b\u0438 dates \u0432 \u043d\u0435\u043f\u0440\u0435\u0440\u044b\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435. diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_th.properties b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_tr.properties b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_tr.properties new file mode 100644 index 0000000000..c8069f11da --- /dev/null +++ b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_tr.properties @@ -0,0 +1,33 @@ +OpenIDE-Module-Short-Description=Kullan\u0131c\u0131 aray\u00FCz\u00FCnde istatistikler ve metrikler +CTL_StatisticsAction=Statistics +CTL_StatisticsTopComponent=Statistics +!HINT_StatisticsTopComponent= +StatisticsTopComponent.settingsButton.text=Settings +AvailableStatisticsChooser.title=Available Metrics +StatisticsDisplayPanel.jXBusyLabel1.text= +StatisticsDisplayPanel.reportButton.text=View +StatisticsDisplayPanel.runButton.text=Run +StatisticsDisplayPanel.icon.text= +StatisticsDisplayPanel.name.text=name +StatisticsFrontEnd.displayLabel.text=Display Name +StatisticsFrontEnd.busyLabel.text= +StatisticsFrontEnd.runStatus.run=Run +StatisticsFrontEnd.runStatus.cancel=\u0130ptal +StatisticsFrontEnd.resultLabel.text=Result +StatisticsFrontEnd.settingsPanel.title={0} settings +StatisticsFrontEnd.reportButton.toolTipText=View report +StatisticsFrontEnd.runButton.text=Run +StatisticsFrontEnd.notDynamicGraph=Can't run a dynamic statistic if the graph isn't dynamic +DynamicSettingsPanel.TimeUnit.DAYS=DAYS +DynamicSettingsPanel.TimeUnit.HOURS=HOURS +DynamicSettingsPanel.TimeUnit.MILLISECONDS=MILLISECONDS +DynamicSettingsPanel.TimeUnit.MINUTES=MINUTES +DynamicSettingsPanel.TimeUnit.SECONDS=SECONDS +DateRangeValidator.NotInRange={0} should be between {1} and {2} +TickUnderWindowValidator.OverWindow=Tick should be less or equal than window +DynamicSettingsPanel.jPanel1.border.title=Time Settings +DynamicSettingsPanel.jLabel2.text=Tick: +DynamicSettingsPanel.jLabel1.text=Window size: +DynamicSettingsPanel.labelCurrentTimeline.text=Current timeline interval: +DynamicSettingsPanel.infoLabel.name=Sliding window and tick +DynamicSettingsPanel.infoLabel.description=The metric is computed within the timeline interval. The time window set the size of the union of graph snapshots or the union of nodes and edges in a continuous time. The window is moved of the length of the tick, so that the metric is computed at that moments. It starts at the beginning of the timeline interval, and ends when it cannot reach another tick. Both time window and tick are defined as a duration: float/integer in the case of snapshots, or dates in the case of continuous time. diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_zh_CN.properties b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_zh_CN.properties index 86f03ec0e6..4c2ed3553c 100644 --- a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_zh_CN.properties +++ b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_zh_CN.properties @@ -1,62 +1,33 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:15+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - OpenIDE-Module-Short-Description=\u7edf\u8ba1\u6570\u636e\u548c\u6307\u6807\u7684\u7528\u6237\u754c\u9762 - CTL_StatisticsAction=\u7edf\u8ba1 - CTL_StatisticsTopComponent=\u7edf\u8ba1 - +!HINT_StatisticsTopComponent= StatisticsTopComponent.settingsButton.text=\u8bbe\u7f6e - AvailableStatisticsChooser.title=\u53ef\u7528\u7684\u5ea6\u91cf - +StatisticsDisplayPanel.jXBusyLabel1.text= StatisticsDisplayPanel.reportButton.text=\u67e5\u770b - StatisticsDisplayPanel.runButton.text=\u8fd0\u884c - +StatisticsDisplayPanel.icon.text= StatisticsDisplayPanel.name.text=\u540d\u79f0 - StatisticsFrontEnd.displayLabel.text=\u663e\u793a\u540d\u79f0 - +StatisticsFrontEnd.busyLabel.text= StatisticsFrontEnd.runStatus.run=\u8fd0\u884c - StatisticsFrontEnd.runStatus.cancel=\u53d6\u6d88 - StatisticsFrontEnd.resultLabel.text=\u7ed3\u679c - StatisticsFrontEnd.settingsPanel.title={0}\u8bbe\u7f6e - StatisticsFrontEnd.reportButton.toolTipText=\u67e5\u770b\u62a5\u544a - StatisticsFrontEnd.runButton.text=\u8fd0\u884c - +StatisticsFrontEnd.notDynamicGraph=\u5982\u679C\u56FE\u5F62\u4E0D\u662F\u52A8\u6001\u7684\uFF0C\u5C31\u4E0D\u80FD\u8FD0\u884C\u52A8\u6001\u7EDF\u8BA1 DynamicSettingsPanel.TimeUnit.DAYS=\u5929 - DynamicSettingsPanel.TimeUnit.HOURS=\u5c0f\u65f6 - DynamicSettingsPanel.TimeUnit.MILLISECONDS=\u6beb\u79d2 - DynamicSettingsPanel.TimeUnit.MINUTES=\u5206\u949f - DynamicSettingsPanel.TimeUnit.SECONDS=\u79d2 - DateRangeValidator.NotInRange={0}\u5e94\u5728 {1}\u548c{2}\u4e4b\u95f4 - TickUnderWindowValidator.OverWindow=\u523b\u5ea6\u5e94\u5c0f\u4e8e\u6216\u7b49\u4e8e\u7a97\u53e3\u5927\u5c0f - DynamicSettingsPanel.jPanel1.border.title=\u65f6\u95f4\u8bbe\u5b9a - DynamicSettingsPanel.jLabel2.text=\u523b\u5ea6\uff1a - DynamicSettingsPanel.jLabel1.text=\u7a97\u53e3\u5927\u5c0f\uff1a - DynamicSettingsPanel.labelCurrentTimeline.text=\u5f53\u524d\u65f6\u95f4\u8f74\u95f4\u9694\uff1a - DynamicSettingsPanel.infoLabel.name=\u6ed1\u52a8\u7a97\u53e3\u548c\u523b\u5ea6 - DynamicSettingsPanel.infoLabel.description=\u5ea6\u91cf\u662f\u65f6\u95f4\u8f74\u7684\u65f6\u95f4\u95f4\u9694\u5185\u8ba1\u7b97\u3002\u65f6\u95f4\u7a97\u53e3\u8bbe\u7f6e\u56fe\u5feb\u7167\u96c6\u5408\u7684\u5927\u5c0f\u6216\u5728\u4e00\u4e2a\u8fde\u7eed\u7684\u65f6\u95f4\u5185\u6240\u6709\u8282\u70b9\u548c\u8fb9\u7684\u5927\u5c0f\u3002\u7a97\u53e3\u88ab\u79fb\u52a8\u4e3a\u523b\u5ea6\u7684\u957f\u5ea6\uff0c\u4f7f\u5ea6\u91cf\u662f\u8ba1\u7b97\u5728\u90a3\u4e2a\u65f6\u523b\u3002\u5b83\u5f00\u59cb\u5728\u65f6\u95f4\u8f74\u7684\u65f6\u95f4\u95f4\u9694\u5f00\u59cb\uff0c\u7ed3\u675f\u65f6\u5b83\u4e0d\u80fd\u8fbe\u5230\u53e6\u4e00\u4e2a\u523b\u5ea6\u3002\u65f6\u95f4\u7a97\u53e3\u548c\u523b\u5ea6\u88ab\u5b9a\u4e49\u4e3a\u4e00\u4e2a\u65f6\u95f4\uff1a\u5feb\u7167\u65f6\u4e3a\u6d6e\u70b9\u6216\u8005\u6574\u6570\u578b\uff0c\u6216\u5728\u8fde\u7eed\u65f6\u95f4\u7684\u60c5\u51b5\u4e0b\u4e3a\u65e5\u671f\u3002 diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_zh_TW.properties b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_zh_TW.properties new file mode 100644 index 0000000000..f0034718c0 --- /dev/null +++ b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/Bundle_zh_TW.properties @@ -0,0 +1,33 @@ +OpenIDE-Module-Short-Description=Statistics and metrics UI +CTL_StatisticsAction=Statistics +CTL_StatisticsTopComponent=Statistics +!HINT_StatisticsTopComponent= +StatisticsTopComponent.settingsButton.text=Settings +AvailableStatisticsChooser.title=Available Metrics +StatisticsDisplayPanel.jXBusyLabel1.text= +StatisticsDisplayPanel.reportButton.text=View +StatisticsDisplayPanel.runButton.text=Run +StatisticsDisplayPanel.icon.text= +StatisticsDisplayPanel.name.text=name +StatisticsFrontEnd.displayLabel.text=Display Name +StatisticsFrontEnd.busyLabel.text= +StatisticsFrontEnd.runStatus.run=Run +StatisticsFrontEnd.runStatus.cancel=\u53d6\u6d88 +StatisticsFrontEnd.resultLabel.text=Result +StatisticsFrontEnd.settingsPanel.title={0} settings +StatisticsFrontEnd.reportButton.toolTipText=View report +StatisticsFrontEnd.runButton.text=Run +StatisticsFrontEnd.notDynamicGraph=Can't run a dynamic statistic if the graph isn't dynamic +DynamicSettingsPanel.TimeUnit.DAYS=DAYS +DynamicSettingsPanel.TimeUnit.HOURS=HOURS +DynamicSettingsPanel.TimeUnit.MILLISECONDS=MILLISECONDS +DynamicSettingsPanel.TimeUnit.MINUTES=MINUTES +DynamicSettingsPanel.TimeUnit.SECONDS=SECONDS +DateRangeValidator.NotInRange={0} should be between {1} and {2} +TickUnderWindowValidator.OverWindow=Tick should be less or equal than window +DynamicSettingsPanel.jPanel1.border.title=Time Settings +DynamicSettingsPanel.jLabel2.text=Tick: +DynamicSettingsPanel.jLabel1.text=Window size: +DynamicSettingsPanel.labelCurrentTimeline.text=Current timeline interval: +DynamicSettingsPanel.infoLabel.name=Sliding window and tick +DynamicSettingsPanel.infoLabel.description=The metric is computed within the timeline interval. The time window set the size of the union of graph snapshots or the union of nodes and edges in a continuous time. The window is moved of the length of the tick, so that the metric is computed at that moments. It starts at the beginning of the timeline interval, and ends when it cannot reach another tick. Both time window and tick are defined as a duration: float/integer in the case of snapshots, or dates in the case of continuous time. diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/cs.po b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/cs.po deleted file mode 100644 index 79009628ca..0000000000 --- a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/cs.po +++ /dev/null @@ -1,103 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-23 10:32+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "RozhranΓ­ statistik a metrik" - -msgid "CTL_StatisticsAction" -msgstr "Statistiky" - -msgid "CTL_StatisticsTopComponent" -msgstr "Statistiky" - -msgid "StatisticsTopComponent.settingsButton.text" -msgstr "NastavenΓ­" - -msgid "AvailableStatisticsChooser.title" -msgstr "DostupnΓ© metriky" - -msgid "StatisticsDisplayPanel.reportButton.text" -msgstr "ZobrazenΓ­" - -msgid "StatisticsDisplayPanel.runButton.text" -msgstr "Spustit" - -msgid "StatisticsDisplayPanel.name.text" -msgstr "nΓ‘zev" - -msgid "StatisticsFrontEnd.displayLabel.text" -msgstr "ZobrazenΓ½ nΓ‘zev" - -msgid "StatisticsFrontEnd.runStatus.run" -msgstr "Spustit" - -msgid "StatisticsFrontEnd.runStatus.cancel" -msgstr "ZruΕ‘it" - -msgid "StatisticsFrontEnd.resultLabel.text" -msgstr "VΓ½sledek" - -msgid "StatisticsFrontEnd.settingsPanel.title" -msgstr "NastavenΓ­ {0}" - -msgid "StatisticsFrontEnd.reportButton.toolTipText" -msgstr "Zobrazit zΓ‘znam" - -msgid "StatisticsFrontEnd.runButton.text" -msgstr "Spustit" - -msgid "DynamicSettingsPanel.TimeUnit.DAYS" -msgstr "DNÍ" - -msgid "DynamicSettingsPanel.TimeUnit.HOURS" -msgstr "HODIN" - -msgid "DynamicSettingsPanel.TimeUnit.MILLISECONDS" -msgstr "MILISEKUND" - -msgid "DynamicSettingsPanel.TimeUnit.MINUTES" -msgstr "MINUT" - -msgid "DynamicSettingsPanel.TimeUnit.SECONDS" -msgstr "SEKUND" - -msgid "DateRangeValidator.NotInRange" -msgstr "{0} by mΔ›lo bΓ½t mezi {1} a {2}" - -msgid "TickUnderWindowValidator.OverWindow" -msgstr "Tik by mΔ›l bΓ½t menΕ‘Γ­ neΕΎ nebo roven oknu" - -msgid "DynamicSettingsPanel.jPanel1.border.title" -msgstr "NastavenΓ­ času" - -msgid "DynamicSettingsPanel.jLabel2.text" -msgstr "Tik:" - -msgid "DynamicSettingsPanel.jLabel1.text" -msgstr "Velikost okna:" - -msgid "DynamicSettingsPanel.labelCurrentTimeline.text" -msgstr "SoučasnΓ½ interval časovΓ© osy" - -msgid "DynamicSettingsPanel.infoLabel.name" -msgstr "PosuvnΓ© okno a tik" - -msgid "DynamicSettingsPanel.infoLabel.description" -msgstr "Metrika je vypočítΓ‘na v intervalu časovΓ© osy. ČasovΓ© okno nastavΓ­ velikost spojenΓ­ snΓ­mkΕ― grafΕ― nebo spojenΓ­ uzlΕ― a hran ve spojitΓ©m čase. Okno je pΕ™esunuto na dΓ©lku tiku, aby byla v tΔ›chto chvΓ­lΓ­ch metrika vypočítΓ‘na. ZačínΓ‘ počÑtkem časovΓ©ho intervalu a končí kdyΕΎ jiΕΎ nelze dosΓ‘hnout dalΕ‘Γ­ho tiku. Jak časovΓ© okno, tak tik jsou zavedeny jako trvΓ‘nΓ­: desetinéé/celΓ© číslo v pΕ™Γ­padΔ› snΓ­mkΕ―, nebo data v pΕ™Γ­padΔ› spojitΓ©ho času." diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/es.po b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/es.po deleted file mode 100644 index 14a3ddc35d..0000000000 --- a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/es.po +++ /dev/null @@ -1,104 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 21:40+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interfaz de usuario para las estadΓ­sticas y mΓ©tricas" - -msgid "CTL_StatisticsAction" -msgstr "EstadΓ­sticas" - -msgid "CTL_StatisticsTopComponent" -msgstr "EstadΓ­sticas" - -msgid "StatisticsTopComponent.settingsButton.text" -msgstr "ConfiguraciΓ³n" - -msgid "AvailableStatisticsChooser.title" -msgstr "MΓ©tricas disponibles" - -msgid "StatisticsDisplayPanel.reportButton.text" -msgstr "Ver" - -msgid "StatisticsDisplayPanel.runButton.text" -msgstr "Ejecutar" - -msgid "StatisticsDisplayPanel.name.text" -msgstr "Nombre" - -msgid "StatisticsFrontEnd.displayLabel.text" -msgstr "Mostrar nombre" - -msgid "StatisticsFrontEnd.runStatus.run" -msgstr "Ejecutar" - -msgid "StatisticsFrontEnd.runStatus.cancel" -msgstr "Cancelar" - -msgid "StatisticsFrontEnd.resultLabel.text" -msgstr "Resultado" - -msgid "StatisticsFrontEnd.settingsPanel.title" -msgstr "ParΓ‘metros de {0}" - -msgid "StatisticsFrontEnd.reportButton.toolTipText" -msgstr "Ver informe" - -msgid "StatisticsFrontEnd.runButton.text" -msgstr "Ejecutar" - -msgid "DynamicSettingsPanel.TimeUnit.DAYS" -msgstr "DÍAS" - -msgid "DynamicSettingsPanel.TimeUnit.HOURS" -msgstr "HORAS" - -msgid "DynamicSettingsPanel.TimeUnit.MILLISECONDS" -msgstr "MILISEGUNDOS" - -msgid "DynamicSettingsPanel.TimeUnit.MINUTES" -msgstr "MINUTOS" - -msgid "DynamicSettingsPanel.TimeUnit.SECONDS" -msgstr "SEGUNDOS" - -msgid "DateRangeValidator.NotInRange" -msgstr "{0} deberΓ­a estar entre {1} y {2}" - -msgid "TickUnderWindowValidator.OverWindow" -msgstr "El paso deberΓ­a ser menor o igual que la ventana" - -msgid "DynamicSettingsPanel.jPanel1.border.title" -msgstr "ParΓ‘metros de tiempo" - -msgid "DynamicSettingsPanel.jLabel2.text" -msgstr "Paso:" - -msgid "DynamicSettingsPanel.jLabel1.text" -msgstr "TamaΓ±o de ventana:" - -msgid "DynamicSettingsPanel.labelCurrentTimeline.text" -msgstr "IntΓ©rvalo temporal actual:" - -msgid "DynamicSettingsPanel.infoLabel.name" -msgstr "Ventana deslizante y paso" - -msgid "DynamicSettingsPanel.infoLabel.description" -msgstr "La mΓ©trica es calculada para el intΓ©rvalo temporal. La ventana temporal define el tamaΓ±o de uniΓ³n de instantΓ‘neas del grafo, o la union de nodos y aristas en tiempo contΓ­nuo. La ventana se desplaza la longitud del paso, de forma que la mΓ©trica es calculada en esos momentos. Empieza al prinicipio del intΓ©rvalo temporal y finaliza cuando no puede alcanzar otro paso. Tanto la ventana como el paso son definidos como una duraciΓ³n: float/integer en el caso de instantΓ‘neas, o fechas en el caso de tiempo contΓ­nuo." diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/fr.po b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/fr.po deleted file mode 100644 index 1f017d6324..0000000000 --- a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/fr.po +++ /dev/null @@ -1,104 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 11:41+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interface utilisateur des statistiques et des mΓ©triques" - -msgid "CTL_StatisticsAction" -msgstr "Statistiques" - -msgid "CTL_StatisticsTopComponent" -msgstr "Statistiques" - -msgid "StatisticsTopComponent.settingsButton.text" -msgstr "ParamΓ¨tres" - -msgid "AvailableStatisticsChooser.title" -msgstr "MΓ©triques disponibles" - -msgid "StatisticsDisplayPanel.reportButton.text" -msgstr "Voir" - -msgid "StatisticsDisplayPanel.runButton.text" -msgstr "ExΓ©cuter" - -msgid "StatisticsDisplayPanel.name.text" -msgstr "nom" - -msgid "StatisticsFrontEnd.displayLabel.text" -msgstr "Afficher le nom" - -msgid "StatisticsFrontEnd.runStatus.run" -msgstr "ExΓ©cuter" - -msgid "StatisticsFrontEnd.runStatus.cancel" -msgstr "Annuler" - -msgid "StatisticsFrontEnd.resultLabel.text" -msgstr "RΓ©sultats" - -msgid "StatisticsFrontEnd.settingsPanel.title" -msgstr "ParamΓ¨tres de {0}" - -msgid "StatisticsFrontEnd.reportButton.toolTipText" -msgstr "Voir le rapport" - -msgid "StatisticsFrontEnd.runButton.text" -msgstr "ExΓ©cuter" - -msgid "DynamicSettingsPanel.TimeUnit.DAYS" -msgstr "JOURS" - -msgid "DynamicSettingsPanel.TimeUnit.HOURS" -msgstr "HEURES" - -msgid "DynamicSettingsPanel.TimeUnit.MILLISECONDS" -msgstr "MILLISECONDES" - -msgid "DynamicSettingsPanel.TimeUnit.MINUTES" -msgstr "MINUTES" - -msgid "DynamicSettingsPanel.TimeUnit.SECONDS" -msgstr "SECONDES" - -msgid "DateRangeValidator.NotInRange" -msgstr "{0} devrait Γͺtre compris entre {1} et {2}" - -msgid "TickUnderWindowValidator.OverWindow" -msgstr "Le tic devrait Γͺtre infΓ©rieur ou Γ©gal Γ  la fenΓͺtre temporelle" - -msgid "DynamicSettingsPanel.jPanel1.border.title" -msgstr "ParamΓ¨tres du temps" - -msgid "DynamicSettingsPanel.jLabel2.text" -msgstr "Tic :" - -msgid "DynamicSettingsPanel.jLabel1.text" -msgstr "Taille de fenΓͺtre :" - -msgid "DynamicSettingsPanel.labelCurrentTimeline.text" -msgstr "Intervalle actuel de la timeline :" - -msgid "DynamicSettingsPanel.infoLabel.name" -msgstr "FenΓͺtre glissante et tic" - -msgid "DynamicSettingsPanel.infoLabel.description" -msgstr "La mΓ©trique est calculΓ©e dans l'intervalle temporel de la timeline. La fenΓͺtre temporelle donne la taille de l'union des snapshots de graphe ou l'union des noeuds et des liens en temps continu. La fenΓͺtre se dΓ©place de la longueur d'un tic de temps, ainsi la mΓ©trique est calculΓ©e Γ  ces moments. La fenΓͺtre dΓ©marre au dΓ©but de l'intervalle, et termine quand aucun nouveau tic ne peut Γͺtre atteint. La fenΓͺtre et le tic sont dΓ©finis par leur durΓ©e : flottant/entier dans le cas de snapshots, ou dates en temps continu." diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/ja.po b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/ja.po deleted file mode 100644 index 34b5e816e6..0000000000 --- a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/ja.po +++ /dev/null @@ -1,103 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-23 10:02+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "η΅±θ¨ˆγ¨θ¨ˆι‡γUI" - -msgid "CTL_StatisticsAction" -msgstr "硱計" - -msgid "CTL_StatisticsTopComponent" -msgstr "硱計" - -msgid "StatisticsTopComponent.settingsButton.text" -msgstr "θ¨­εš" - -msgid "AvailableStatisticsChooser.title" -msgstr "εˆ©η”¨ε―θƒ½γͺθ¨ˆι‡" - -msgid "StatisticsDisplayPanel.reportButton.text" -msgstr "ビγƒ₯γƒΌ" - -msgid "StatisticsDisplayPanel.runButton.text" -msgstr "εŸθ‘Œ" - -msgid "StatisticsDisplayPanel.name.text" -msgstr "名前" - -msgid "StatisticsFrontEnd.displayLabel.text" -msgstr "名前を葨瀺" - -msgid "StatisticsFrontEnd.runStatus.run" -msgstr "εŸθ‘Œ" - -msgid "StatisticsFrontEnd.runStatus.cancel" -msgstr "キャンセル" - -msgid "StatisticsFrontEnd.resultLabel.text" -msgstr "硐果" - -msgid "StatisticsFrontEnd.settingsPanel.title" -msgstr "{0}θ¨­εš" - -msgid "StatisticsFrontEnd.reportButton.toolTipText" -msgstr "ε ±ε‘Šγ‚’ι–²θ¦§" - -msgid "StatisticsFrontEnd.runButton.text" -msgstr "εŸθ‘Œ" - -msgid "DynamicSettingsPanel.TimeUnit.DAYS" -msgstr "ζ—₯ζ•°" - -msgid "DynamicSettingsPanel.TimeUnit.HOURS" -msgstr "ζ™‚ι–“ζ•°" - -msgid "DynamicSettingsPanel.TimeUnit.MILLISECONDS" -msgstr "γƒŸγƒͺη§’ζ•°" - -msgid "DynamicSettingsPanel.TimeUnit.MINUTES" -msgstr "εˆ†ζ•°" - -msgid "DynamicSettingsPanel.TimeUnit.SECONDS" -msgstr "η§’ζ•°" - -msgid "DateRangeValidator.NotInRange" -msgstr "{0} は {1}と {2}γι–“にあるべきです。" - -msgid "TickUnderWindowValidator.OverWindow" -msgstr "η›η››γ‚Šγ―ウィンドウδ»₯下であるべきです。" - -msgid "DynamicSettingsPanel.jPanel1.border.title" -msgstr "ζ™‚ι–“θ¨­εš" - -msgid "DynamicSettingsPanel.jLabel2.text" -msgstr "η›η››γ‚Š:" - -msgid "DynamicSettingsPanel.jLabel1.text" -msgstr "ウィンドウァむズ:" - -msgid "DynamicSettingsPanel.labelCurrentTimeline.text" -msgstr "現在γγ‚Ώγ‚€γƒ γƒ©γ‚€γƒ³γι–“ιš”:" - -msgid "DynamicSettingsPanel.infoLabel.name" -msgstr "スラむディングウィンドウとη›η››γ‚Š" - -msgid "DynamicSettingsPanel.infoLabel.description" -msgstr "θ¨ˆι‡γ―γ€ζ™‚ι–“θ»ΈγεŒΊι–“ε†…γ§θ¨ˆη—γ•γ‚ŒγΎγ™γ€‚ζ™‚ι–“γ‚¦γ‚£γƒ³γƒ‰γ‚¦γ―、グラフγγ‚ΉγƒŠγƒƒγƒ—γ‚·γƒ§γƒƒγƒˆγΎγŸγ―ι€£ηΆšηš„γͺζ™‚ι–“ε†…γγƒŽγƒΌγƒ‰γ¨θΎΊγη΅„εˆγγ‚΅γ‚€γ‚Ίγ‚’θ¨­εšγ—γΎγ™γ€‚γ‚¦γ‚£γƒ³γƒ‰γ‚¦γ―γ€θ¨ˆι‡γŒγγηž¬ι–“γ§θ¨ˆη—γ•γ‚Œγ‚‹γ‚ˆγ†γ«γ€η›η››γ‚Šγι•·γ•γ«η§»ε‹•γ™γ‚‹γ€‚γγ‚Œγ―、時間軸γεŒΊι–“γι–‹ε§‹ζ™‚に開始し、εˆ₯γη›η››γ‚Šγ«εˆ°ι”できγͺいときに硂了する。時間ウィンドウとη›η››γ‚ŠγδΈ‘ζ–Ήγ―γ€ζŒηΆšζ™‚ι–“γ¨γ—γ¦εšηΎ©γ•γ‚Œγ¦γ„γ‚‹: γ‚ΉγƒŠγƒƒγƒ—γ‚·γƒ§γƒƒγƒˆγε ΄εˆγ―ζ΅ε‹•小数点/ζ•΄ζ•°γ€γΎγŸγ―ι€£ηΆšζ™‚ι–“γε ΄εˆγ―ζ—₯δ»˜γ€‚" diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/org-gephi-desktop-statistics.pot b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/org-gephi-desktop-statistics.pot deleted file mode 100644 index 2b3d3b7223..0000000000 --- a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/org-gephi-desktop-statistics.pot +++ /dev/null @@ -1,107 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Statistics and metrics UI" - -msgid "CTL_StatisticsAction" -msgstr "Statistics" - -msgid "CTL_StatisticsTopComponent" -msgstr "Statistics" - -msgid "StatisticsTopComponent.settingsButton.text" -msgstr "Settings" - -msgid "AvailableStatisticsChooser.title" -msgstr "Available Metrics" - -msgid "StatisticsDisplayPanel.reportButton.text" -msgstr "View" - -msgid "StatisticsDisplayPanel.runButton.text" -msgstr "Run" - -msgid "StatisticsDisplayPanel.name.text" -msgstr "name" - -msgid "StatisticsFrontEnd.displayLabel.text" -msgstr "Display Name" - -msgid "StatisticsFrontEnd.runStatus.run" -msgstr "Run" - -msgid "StatisticsFrontEnd.runStatus.cancel" -msgstr "Cancel" - -msgid "StatisticsFrontEnd.resultLabel.text" -msgstr "Result" - -msgid "StatisticsFrontEnd.settingsPanel.title" -msgstr "{0} settings" - -msgid "StatisticsFrontEnd.reportButton.toolTipText" -msgstr "View report" - -msgid "StatisticsFrontEnd.runButton.text" -msgstr "Run" - -msgid "DynamicSettingsPanel.TimeUnit.DAYS" -msgstr "DAYS" - -msgid "DynamicSettingsPanel.TimeUnit.HOURS" -msgstr "HOURS" - -msgid "DynamicSettingsPanel.TimeUnit.MILLISECONDS" -msgstr "MILLISECONDS" - -msgid "DynamicSettingsPanel.TimeUnit.MINUTES" -msgstr "MINUTES" - -msgid "DynamicSettingsPanel.TimeUnit.SECONDS" -msgstr "SECONDS" - -msgid "DateRangeValidator.NotInRange" -msgstr "{0} should be between {1} and {2}" - -msgid "TickUnderWindowValidator.OverWindow" -msgstr "Tick should be less or equal than window" - -msgid "DynamicSettingsPanel.jPanel1.border.title" -msgstr "Time Settings" - -msgid "DynamicSettingsPanel.jLabel2.text" -msgstr "Tick:" - -msgid "DynamicSettingsPanel.jLabel1.text" -msgstr "Window size:" - -msgid "DynamicSettingsPanel.labelCurrentTimeline.text" -msgstr "Current timeline interval:" - -msgid "DynamicSettingsPanel.infoLabel.name" -msgstr "Sliding window and tick" - -msgid "DynamicSettingsPanel.infoLabel.description" -msgstr "" -"The metric is computed within the timeline interval. The time window set the " -"size of the union of graph snapshots or the union of nodes and edges in a " -"continuous time. The window is moved of the length of the tick, so that the " -"metric is computed at that moments. It starts at the beginning of the " -"timeline interval, and ends when it cannot reach another tick. Both time " -"window and tick are defined as a duration: float/integer in the case of " -"snapshots, or dates in the case of continuous time." diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/pt_BR.po b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/pt_BR.po deleted file mode 100644 index 72e01e88ad..0000000000 --- a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/pt_BR.po +++ /dev/null @@ -1,104 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -# CΓ©lio Faria Jr. , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 12:25+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interface de usuΓ‘rio de estatΓ­sticas e mΓ©tricas" - -msgid "CTL_StatisticsAction" -msgstr "EstatΓ­sticas" - -msgid "CTL_StatisticsTopComponent" -msgstr "EstatΓ­sticas" - -msgid "StatisticsTopComponent.settingsButton.text" -msgstr "ConfiguraΓ§Γ΅es" - -msgid "AvailableStatisticsChooser.title" -msgstr "MΓ©tricas disponΓ­veis" - -msgid "StatisticsDisplayPanel.reportButton.text" -msgstr "Visualizar" - -msgid "StatisticsDisplayPanel.runButton.text" -msgstr "Executar" - -msgid "StatisticsDisplayPanel.name.text" -msgstr "nome" - -msgid "StatisticsFrontEnd.displayLabel.text" -msgstr "Nome para exibiΓ§Γ£o" - -msgid "StatisticsFrontEnd.runStatus.run" -msgstr "Executar" - -msgid "StatisticsFrontEnd.runStatus.cancel" -msgstr "Cancelar" - -msgid "StatisticsFrontEnd.resultLabel.text" -msgstr "Resultado" - -msgid "StatisticsFrontEnd.settingsPanel.title" -msgstr "{0} configuraΓ§Γ΅es" - -msgid "StatisticsFrontEnd.reportButton.toolTipText" -msgstr "Visualizar relatΓ³rio" - -msgid "StatisticsFrontEnd.runButton.text" -msgstr "Executar" - -msgid "DynamicSettingsPanel.TimeUnit.DAYS" -msgstr "DIAS" - -msgid "DynamicSettingsPanel.TimeUnit.HOURS" -msgstr "HORAS" - -msgid "DynamicSettingsPanel.TimeUnit.MILLISECONDS" -msgstr "MILISEGUNDOS" - -msgid "DynamicSettingsPanel.TimeUnit.MINUTES" -msgstr "MINUTOS" - -msgid "DynamicSettingsPanel.TimeUnit.SECONDS" -msgstr "SEGUNDOS" - -msgid "DateRangeValidator.NotInRange" -msgstr "{0} deve estar entre {1} e {2}" - -msgid "TickUnderWindowValidator.OverWindow" -msgstr "O instante deve ser menor ou igual Γ  janela" - -msgid "DynamicSettingsPanel.jPanel1.border.title" -msgstr "ConfiguraΓ§Γ΅es de tempo" - -msgid "DynamicSettingsPanel.jLabel2.text" -msgstr "Instante:" - -msgid "DynamicSettingsPanel.jLabel1.text" -msgstr "Tamanho da janela:" - -msgid "DynamicSettingsPanel.labelCurrentTimeline.text" -msgstr "Intervalo de tempo atual:" - -msgid "DynamicSettingsPanel.infoLabel.name" -msgstr "Janela deslizante e instante" - -msgid "DynamicSettingsPanel.infoLabel.description" -msgstr "A mΓ©trica Γ© calculada dentro do intervalo de tempo. A janela de tempo define o tamanho da uniΓ£o de snapshots de grafos ou de nΓ³s e arestas em um tempo contΓ­nuo. A janela Γ© movida por um comprimento de instante, de modo que a mΓ©trica seja calculada nestes momentos. O cΓ‘lculo comeΓ§a no inΓ­cio do intervalo de tempo e termina quando nΓ£o Γ© possΓ­vel calcular inteiramente outro instante. Tanto a janela de tempo quanto o instante sΓ£o definidos como duraΓ§Γ΅es: float/inteiro (no caso de snapshots) ou datas (no caso de tempo contΓ­nuo)." diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/resources/icon.png b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/resources/icon.png deleted file mode 100644 index 96bb23aa68..0000000000 Binary files a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/resources/icon.png and /dev/null differ diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/resources/info.png b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/resources/info.png deleted file mode 100644 index 0cf1ec1771..0000000000 Binary files a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/resources/info.png and /dev/null differ diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/resources/report.png b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/resources/report.png deleted file mode 100644 index 6d3d97203b..0000000000 Binary files a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/resources/report.png and /dev/null differ diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/resources/run.png b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/resources/run.png deleted file mode 100644 index 195a9d707b..0000000000 Binary files a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/resources/run.png and /dev/null differ diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/resources/small.png b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/resources/small.png deleted file mode 100644 index 96bb23aa68..0000000000 Binary files a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/resources/small.png and /dev/null differ diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/resources/stop.png b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/resources/stop.png deleted file mode 100644 index 5f6492b43a..0000000000 Binary files a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/resources/stop.png and /dev/null differ diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/ru.po b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/ru.po deleted file mode 100644 index 5aaea8e072..0000000000 --- a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/ru.po +++ /dev/null @@ -1,103 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 15:28+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Statistics and metrics UI" - -msgid "CTL_StatisticsAction" -msgstr "Бтатистики" - -msgid "CTL_StatisticsTopComponent" -msgstr "Бтатистики" - -msgid "StatisticsTopComponent.settingsButton.text" -msgstr "Настройки" - -msgid "AvailableStatisticsChooser.title" -msgstr "ДоступныС ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠΈ" - -msgid "StatisticsDisplayPanel.reportButton.text" -msgstr "ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€" - -msgid "StatisticsDisplayPanel.runButton.text" -msgstr "Запуск" - -msgid "StatisticsDisplayPanel.name.text" -msgstr "Π½Π°Π·Π²Π°Π½ΠΈΠ΅" - -msgid "StatisticsFrontEnd.displayLabel.text" -msgstr "ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠ΅ имя" - -msgid "StatisticsFrontEnd.runStatus.run" -msgstr "Запуск" - -msgid "StatisticsFrontEnd.runStatus.cancel" -msgstr "ΠžΡ‚ΠΌΠ΅Π½Π°" - -msgid "StatisticsFrontEnd.resultLabel.text" -msgstr "Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚" - -msgid "StatisticsFrontEnd.settingsPanel.title" -msgstr "Настройки {0}" - -msgid "StatisticsFrontEnd.reportButton.toolTipText" -msgstr "ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ ΠΎΡ‚Ρ‡Ρ‘Ρ‚Π°" - -msgid "StatisticsFrontEnd.runButton.text" -msgstr "Запуск" - -msgid "DynamicSettingsPanel.TimeUnit.DAYS" -msgstr "Π”ΠΠ˜" - -msgid "DynamicSettingsPanel.TimeUnit.HOURS" -msgstr "ЧАБЫ" - -msgid "DynamicSettingsPanel.TimeUnit.MILLISECONDS" -msgstr "ΠœΠ˜Π›Π›Π˜Π‘Π•ΠšΠ£ΠΠ”Π«" - -msgid "DynamicSettingsPanel.TimeUnit.MINUTES" -msgstr "МИНУВЫ" - -msgid "DynamicSettingsPanel.TimeUnit.SECONDS" -msgstr "Π‘Π•ΠšΠ£ΠΠ”Π«" - -msgid "DateRangeValidator.NotInRange" -msgstr "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ {0} Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΌΠ΅ΠΆΠ΄Ρƒ {1} ΠΈ {2}" - -msgid "TickUnderWindowValidator.OverWindow" -msgstr "ΠšΠ²Π°Π½Ρ‚ сдвига Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠΊΠ½Π°" - -msgid "DynamicSettingsPanel.jPanel1.border.title" -msgstr "Настройки Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ" - -msgid "DynamicSettingsPanel.jLabel2.text" -msgstr "ΠšΠ²Π°Π½Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ сдвига:" - -msgid "DynamicSettingsPanel.jLabel1.text" -msgstr "Π Π°Π·ΠΌΠ΅Ρ€ ΠΎΠΊΠ½Π°:" - -msgid "DynamicSettingsPanel.labelCurrentTimeline.text" -msgstr "Π’Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½:" - -msgid "DynamicSettingsPanel.infoLabel.name" -msgstr "Π‘ΠΊΠΎΠ»ΡŒΠ·ΡΡ‰Π΅Π΅ ΠΎΠΊΠ½ΠΎ ΠΈ ΠΊΠ²Π°Π½Ρ‚ сдвига" - -msgid "DynamicSettingsPanel.infoLabel.description" -msgstr "ΠœΠ΅Ρ‚Ρ€ΠΈΠΊΠ° вычисляСтся Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°. Π Π°Π·ΠΌΠ΅Ρ€ ΠΎΠΊΠ½Π° опрСдСляСт мноТСство срСзов ΠΈΠ»ΠΈ мноТСство ΡƒΠ·Π»ΠΎΠ² ΠΈ Ρ€Ρ‘Π±Π΅Ρ€ Π² Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΌ случаС. Окно двигаСтся Π½Π° Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠ²Π°Π½Ρ‚Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ сдвига, Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΌ шагС вычисляСтся ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊΠ°. Расчёт начинаСтся с Π½Π°Ρ‡Π°Π»Π° Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ сдвиг Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½. И Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΎΠΊΠ½Π°, ΠΈ ΠΊΠ²Π°Π½Ρ‚ сдвига опрСдСляСтся ΠΊΠ°ΠΊ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ: float/integer Π² дискрСтном случаС ΠΈΠ»ΠΈ dates Π² Π½Π΅ΠΏΡ€Π΅Ρ€Ρ‹Π²Π½ΠΎΠΌ случаС." diff --git a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/zh_CN.po b/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/zh_CN.po deleted file mode 100644 index 42275117ad..0000000000 --- a/modules/DesktopStatistics/src/main/resources/org/gephi/desktop/statistics/zh_CN.po +++ /dev/null @@ -1,102 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:15+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "统θ‘ζ•°ζε’ŒζŒ‡ζ ‡ηš„η”¨ζˆ·η•Œι’" - -msgid "CTL_StatisticsAction" -msgstr "统θ‘" - -msgid "CTL_StatisticsTopComponent" -msgstr "统θ‘" - -msgid "StatisticsTopComponent.settingsButton.text" -msgstr "θΎη½" - -msgid "AvailableStatisticsChooser.title" -msgstr "ε―η”¨ηš„εΊ¦ι‡" - -msgid "StatisticsDisplayPanel.reportButton.text" -msgstr "ζŸ₯ηœ‹" - -msgid "StatisticsDisplayPanel.runButton.text" -msgstr "运葌" - -msgid "StatisticsDisplayPanel.name.text" -msgstr "名称" - -msgid "StatisticsFrontEnd.displayLabel.text" -msgstr "显瀺名称" - -msgid "StatisticsFrontEnd.runStatus.run" -msgstr "运葌" - -msgid "StatisticsFrontEnd.runStatus.cancel" -msgstr "ε–ζΆˆ" - -msgid "StatisticsFrontEnd.resultLabel.text" -msgstr "η»“ζžœ" - -msgid "StatisticsFrontEnd.settingsPanel.title" -msgstr "{0}θΎη½" - -msgid "StatisticsFrontEnd.reportButton.toolTipText" -msgstr "ζŸ₯ηœ‹ζŠ₯ε‘Š" - -msgid "StatisticsFrontEnd.runButton.text" -msgstr "运葌" - -msgid "DynamicSettingsPanel.TimeUnit.DAYS" -msgstr "倩" - -msgid "DynamicSettingsPanel.TimeUnit.HOURS" -msgstr "小既" - -msgid "DynamicSettingsPanel.TimeUnit.MILLISECONDS" -msgstr "ζ―«η§’" - -msgid "DynamicSettingsPanel.TimeUnit.MINUTES" -msgstr "εˆ†ι’Ÿ" - -msgid "DynamicSettingsPanel.TimeUnit.SECONDS" -msgstr "η§’" - -msgid "DateRangeValidator.NotInRange" -msgstr "{0}εΊ”εœ¨ {1}ε’Œ{2}δΉ‹ι—΄" - -msgid "TickUnderWindowValidator.OverWindow" -msgstr "εˆ»εΊ¦εΊ”ε°δΊŽζˆ–η­‰δΊŽηͺ—口倧小" - -msgid "DynamicSettingsPanel.jPanel1.border.title" -msgstr "ζ—Άι—΄θΎεš" - -msgid "DynamicSettingsPanel.jLabel2.text" -msgstr "刻度:" - -msgid "DynamicSettingsPanel.jLabel1.text" -msgstr "ηͺ—ε£ε€§ε°οΌš" - -msgid "DynamicSettingsPanel.labelCurrentTimeline.text" -msgstr "ε½“ε‰ζ—Άι—΄θ½΄ι—΄ιš”οΌš" - -msgid "DynamicSettingsPanel.infoLabel.name" -msgstr "ζ»‘εŠ¨ηͺ—ε£ε’Œεˆ»εΊ¦" - -msgid "DynamicSettingsPanel.infoLabel.description" -msgstr "εΊ¦ι‡ζ˜―ζ—Άι—΄θ½΄ηš„ζ—Άι—΄ι—΄ιš”ε†…θ‘η—。既间ηͺ—口θΎη½ε›ΎεΏ«η…§ι›†εˆηš„ε€§ε°ζˆ–εœ¨δΈ€δΈͺθΏžη»­ηš„ζ—Άι—΄ε†…ζ‰€ζœ‰θŠ‚η‚Ήε’ŒθΎΉηš„ε€§ε°γ€‚ηͺ—ε£θ’«η§»εŠ¨δΈΊεˆ»εΊ¦ηš„ι•ΏεΊ¦οΌŒδ½ΏεΊ¦ι‡ζ˜―θ‘η—εœ¨ι‚£δΈͺζ—Άεˆ»γ€‚εƒεΌ€ε§‹εœ¨ζ—Άι—΄θ½΄ηš„ζ—Άι—΄ι—΄ιš”εΌ€ε§‹οΌŒη»“ζŸζ—ΆεƒδΈθƒ½θΎΎεˆ°ε¦δΈ€δΈͺεˆ»εΊ¦γ€‚ζ—Άι—΄ηͺ—ε£ε’Œεˆ»εΊ¦θ’«εšδΉ‰δΈΊδΈ€δΈͺζ—Άι—΄οΌšεΏ«η…§ζ—ΆδΈΊζ΅η‚Ήζˆ–θ€…ζ•΄ζ•°εž‹οΌŒζˆ–εœ¨θΏžη»­ζ—Άι—΄ηš„ζƒ…ε†΅δΈ‹δΈΊζ—₯ζœŸγ€‚" diff --git a/modules/DesktopTimeline/pom.xml b/modules/DesktopTimeline/pom.xml index 1b3ec2828e..106b0ac203 100644 --- a/modules/DesktopTimeline/pom.xml +++ b/modules/DesktopTimeline/pom.xml @@ -4,13 +4,12 @@ gephi-parent org.gephi - 0.9-SNAPSHOT - ../.. + 0.11.3-SNAPSHOT + ../.. - org.gephi desktop-timeline - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm DesktopTimeline @@ -22,23 +21,19 @@ ${project.groupId} - data-attributes-api + desktop-window ${project.groupId} - desktop-perspective + graph-api ${project.groupId} - dynamic-api + timeline-api ${project.groupId} - lib.validation - - - ${project.groupId} - timeline + visualization ${project.groupId} @@ -60,6 +55,14 @@ ${project.groupId} ui-library-wrapper + + ${project.groupId} + desktop-icons + + + org.netbeans.api + org-openide-util-ui + org.netbeans.api org-openide-dialogs @@ -93,7 +96,7 @@ - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/BottomComponentImpl.java b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/BottomComponentImpl.java index 5da4f7a7d7..5182f8727b 100644 --- a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/BottomComponentImpl.java +++ b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/BottomComponentImpl.java @@ -39,30 +39,33 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.timeline; import javax.swing.JComponent; -import org.gephi.desktop.perspective.spi.BottomComponent; +import org.gephi.desktop.banner.perspective.spi.BottomComponent; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ -@ServiceProvider(service=BottomComponent.class) +@ServiceProvider(service = BottomComponent.class) public class BottomComponentImpl implements BottomComponent { - private TimelineTopComponent timelineTopComponent = new TimelineTopComponent(); - + private final TimelineTopComponent timelineTopComponent = new TimelineTopComponent(); + + @Override public JComponent getComponent() { return timelineTopComponent; } - public void setVisible(boolean visible) { - timelineTopComponent.setTimeLineVisible(visible); - } - + @Override public boolean isVisible() { return timelineTopComponent.isVisible(); } + + @Override + public void setVisible(boolean visible) { + timelineTopComponent.setTimeLineVisible(visible); + } } diff --git a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/CustomBoundsDialog.java b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/CustomBoundsDialog.java index 68fca04261..e79870241c 100644 --- a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/CustomBoundsDialog.java +++ b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/CustomBoundsDialog.java @@ -39,80 +39,95 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.timeline; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.NumberFormat; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; import java.util.Locale; import javax.swing.JTextField; -import org.gephi.dynamic.DynamicUtilities; -import org.gephi.dynamic.api.DynamicModel.TimeFormat; +import javax.swing.event.DocumentEvent; +import javax.swing.event.DocumentListener; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.TimeFormat; import org.gephi.timeline.api.TimelineController; import org.gephi.timeline.api.TimelineModel; import org.netbeans.validation.api.Problems; import org.netbeans.validation.api.Validator; -import org.netbeans.validation.api.builtin.Validators; +import org.netbeans.validation.api.builtin.stringvalidation.StringValidators; import org.netbeans.validation.api.ui.ValidationGroup; -import org.netbeans.validation.api.ui.ValidationPanel; -import org.openide.util.Exceptions; +import org.netbeans.validation.api.ui.swing.ValidationPanel; +import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; /** - * * @author mbastian */ public class CustomBoundsDialog extends javax.swing.JPanel { - private final SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd"); - private final SimpleDateFormat DATETIME_FORMAT = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SS"); + private static final String DATE_TIME_FORMAT_HELP_TEXT = "ISO 8601"; private TimelineModel model; private TimelineController controller; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JTextField endTextField; + private javax.swing.JLabel labelBounds; + private javax.swing.JLabel labelEndDate; + private javax.swing.JLabel labelIntervalDate; + private javax.swing.JLabel labelMaxDate; + private javax.swing.JLabel labelMinDate; + private javax.swing.JLabel labelStartDate; + private javax.swing.JTextField maxTextField; + private javax.swing.JTextField minTextField; + private javax.swing.JButton resetDefaultsDate; + private javax.swing.JTextField startTextField; + private org.jdesktop.swingx.JXHeader titleHeader; + // End of variables declaration//GEN-END:variables public CustomBoundsDialog() { initComponents(); resetDefaultsDate.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { setDefaults(); } }); } + public static ValidationPanel createValidationPanel(CustomBoundsDialog panel) { + ValidationPanel validationPanel = new ValidationPanel(); + validationPanel.setInnerComponent(panel); + ValidationGroup group = validationPanel.getValidationGroup(); + panel.createValidation(group, validationPanel); + return validationPanel; + } + public void setDefaults() { - if (model.getTimeFormat().equals(TimeFormat.DATE)) { - Date min = DynamicUtilities.getDateFromDouble(model.getMin()); - Date max = DynamicUtilities.getDateFromDouble(model.getMax()); - Date from = DynamicUtilities.getDateFromDouble(model.getMin()); - Date to = DynamicUtilities.getDateFromDouble(model.getMax()); - - minTextField.setText(DATE_FORMAT.format(min)); - maxTextField.setText(DATE_FORMAT.format(max)); - startTextField.setText(DATE_FORMAT.format(from)); - endTextField.setText(DATE_FORMAT.format(to)); - } else if (model.getTimeFormat().equals(TimeFormat.DATETIME)) { - Date min = DynamicUtilities.getDateFromDouble(model.getMin()); - Date max = DynamicUtilities.getDateFromDouble(model.getMax()); - Date from = DynamicUtilities.getDateFromDouble(model.getMin()); - Date to = DynamicUtilities.getDateFromDouble(model.getMax()); - - minTextField.setText(DATETIME_FORMAT.format(min)); - maxTextField.setText(DATETIME_FORMAT.format(max)); - startTextField.setText(DATETIME_FORMAT.format(from)); - endTextField.setText(DATETIME_FORMAT.format(to)); - } else { - NumberFormat f = NumberFormat.getInstance(Locale.ENGLISH); - f.setGroupingUsed(false); - f.setMaximumFractionDigits(20); - minTextField.setText(f.format(model.getMin())); - maxTextField.setText(f.format(model.getMax())); - startTextField.setText(f.format(model.getMin())); - endTextField.setText(f.format(model.getMax())); + switch (model.getTimeFormat()) { + case DATE: + minTextField.setText(AttributeUtils.printDateTime(model.getMin())); + maxTextField.setText(AttributeUtils.printDateTime(model.getMax())); + startTextField.setText(AttributeUtils.printDateTime(model.getMin())); + endTextField.setText(AttributeUtils.printDateTime(model.getMax())); + break; + case DATETIME: + minTextField.setText(AttributeUtils.printDateTime(model.getMin())); + maxTextField.setText(AttributeUtils.printDateTime(model.getMax())); + startTextField.setText(AttributeUtils.printDateTime(model.getMin())); + endTextField.setText(AttributeUtils.printDateTime(model.getMax())); + break; + default: + NumberFormat f = NumberFormat.getInstance(Locale.ENGLISH); + f.setGroupingUsed(false); + f.setMaximumFractionDigits(20); + minTextField.setText(f.format(model.getMin())); + maxTextField.setText(f.format(model.getMax())); + startTextField.setText(f.format(model.getMin())); + endTextField.setText(f.format(model.getMax())); + break; } } @@ -120,65 +135,44 @@ public void setup(TimelineModel timelineModel) { this.model = timelineModel; this.controller = Lookup.getDefault().lookup(TimelineController.class); setDefaults(); - - if (model.getTimeFormat().equals(TimeFormat.DATE)) { - Date min = DynamicUtilities.getDateFromDouble(model.getCustomMin()); - Date max = DynamicUtilities.getDateFromDouble(model.getCustomMax()); - Date from = DynamicUtilities.getDateFromDouble(model.getIntervalStart()); - Date to = DynamicUtilities.getDateFromDouble(model.getIntervalEnd()); - - minTextField.setText(DATE_FORMAT.format(min)); - maxTextField.setText(DATE_FORMAT.format(max)); - startTextField.setText(DATE_FORMAT.format(from)); - endTextField.setText(DATE_FORMAT.format(to)); - } else if (model.getTimeFormat().equals(TimeFormat.DATETIME)) { - Date min = DynamicUtilities.getDateFromDouble(model.getCustomMin()); - Date max = DynamicUtilities.getDateFromDouble(model.getCustomMax()); - Date from = DynamicUtilities.getDateFromDouble(model.getIntervalStart()); - Date to = DynamicUtilities.getDateFromDouble(model.getIntervalEnd()); - - minTextField.setText(DATETIME_FORMAT.format(min)); - maxTextField.setText(DATETIME_FORMAT.format(max)); - startTextField.setText(DATETIME_FORMAT.format(from)); - endTextField.setText(DATETIME_FORMAT.format(to)); - } else { - NumberFormat f = NumberFormat.getInstance(Locale.ENGLISH); - f.setGroupingUsed(false); - f.setMaximumFractionDigits(20); - minTextField.setText(f.format(model.getCustomMin())); - maxTextField.setText(f.format(model.getCustomMax())); - startTextField.setText(f.format(model.getIntervalStart())); - endTextField.setText(f.format(model.getIntervalEnd())); + + switch (model.getTimeFormat()) { + case DATE: + //Note: we can't just print a date or we might go below the minimum timestamp due to resolution loss + //and the user would face a validation error without having changed anything + minTextField.setText(AttributeUtils.printDateTime(model.getCustomMin())); + maxTextField.setText(AttributeUtils.printDateTime(model.getCustomMax())); + startTextField.setText(AttributeUtils.printDateTime(model.getIntervalStart())); + endTextField.setText(AttributeUtils.printDateTime(model.getIntervalEnd())); + break; + case DATETIME: + minTextField.setText(AttributeUtils.printDateTime(model.getCustomMin())); + maxTextField.setText(AttributeUtils.printDateTime(model.getCustomMax())); + startTextField.setText(AttributeUtils.printDateTime(model.getIntervalStart())); + endTextField.setText(AttributeUtils.printDateTime(model.getIntervalEnd())); + break; + default: + NumberFormat f = NumberFormat.getInstance(Locale.ENGLISH); + f.setGroupingUsed(false); + f.setMaximumFractionDigits(20); + minTextField.setText(f.format(model.getCustomMin())); + maxTextField.setText(f.format(model.getCustomMax())); + startTextField.setText(f.format(model.getIntervalStart())); + endTextField.setText(f.format(model.getIntervalEnd())); + break; } } public void unsetup() { - if (model.getTimeFormat().equals(TimeFormat.DATE)) { - try { - double min = DynamicUtilities.getDoubleFromDate(DATE_FORMAT.parse(minTextField.getText())); - double max = DynamicUtilities.getDoubleFromDate(DATE_FORMAT.parse(maxTextField.getText())); - double start = DynamicUtilities.getDoubleFromDate(DATE_FORMAT.parse(startTextField.getText())); - double end = DynamicUtilities.getDoubleFromDate(DATE_FORMAT.parse(endTextField.getText())); - start = Math.max(min, start); - end = Math.min(max, end); - controller.setCustomBounds(min, max); - controller.setInterval(start, end); - } catch (ParseException ex) { - Exceptions.printStackTrace(ex); - } - } else if (model.getTimeFormat().equals(TimeFormat.DATETIME)) { - try { - double min = DynamicUtilities.getDoubleFromDate(DATETIME_FORMAT.parse(minTextField.getText())); - double max = DynamicUtilities.getDoubleFromDate(DATETIME_FORMAT.parse(maxTextField.getText())); - double start = DynamicUtilities.getDoubleFromDate(DATETIME_FORMAT.parse(startTextField.getText())); - double end = DynamicUtilities.getDoubleFromDate(DATETIME_FORMAT.parse(endTextField.getText())); - start = Math.max(min, start); - end = Math.min(max, end); - controller.setCustomBounds(min, max); - controller.setInterval(start, end); - } catch (ParseException ex) { - Exceptions.printStackTrace(ex); - } + if (model.getTimeFormat().equals(TimeFormat.DATE) || model.getTimeFormat().equals(TimeFormat.DATETIME)) { + double min = AttributeUtils.parseDateTime(minTextField.getText()); + double max = AttributeUtils.parseDateTime(maxTextField.getText()); + double start = AttributeUtils.parseDateTime(startTextField.getText()); + double end = AttributeUtils.parseDateTime(endTextField.getText()); + start = Math.max(min, start); + end = Math.min(max, end); + controller.setCustomBounds(min, max); + controller.setInterval(start, end); } else { double min = Double.parseDouble(minTextField.getText()); double max = Double.parseDouble(maxTextField.getText()); @@ -192,261 +186,315 @@ public void unsetup() { } public void createValidation(ValidationGroup group, ValidationPanel panel) { - group.add(minTextField, Validators.REQUIRE_NON_EMPTY_STRING, - new FormatValidator(), new TimeValidator(maxTextField, false)); - group.add(maxTextField, Validators.REQUIRE_NON_EMPTY_STRING, - new FormatValidator(), new TimeValidator(minTextField, true)); - group.add(startTextField, Validators.REQUIRE_NON_EMPTY_STRING, - new FormatValidator(), new TimeValidator(endTextField, false)); - group.add(endTextField, Validators.REQUIRE_NON_EMPTY_STRING, - new FormatValidator(), new TimeValidator(startTextField, true)); - } + group.add(minTextField, StringValidators.REQUIRE_NON_EMPTY_STRING, + new FormatValidator(), new TimeValidator(maxTextField, false)); + group.add(maxTextField, StringValidators.REQUIRE_NON_EMPTY_STRING, + new FormatValidator(), new TimeValidator(minTextField, true)); + group.add(startTextField, StringValidators.REQUIRE_NON_EMPTY_STRING, + new FormatValidator(), new TimeValidator(endTextField, false), + new IntervalBoundsValidator(minTextField, false)); + group.add(endTextField, StringValidators.REQUIRE_NON_EMPTY_STRING, + new FormatValidator(), new TimeValidator(startTextField, true), + new IntervalBoundsValidator(maxTextField, true)); + + // Trigger re-validation of all fields when any field changes, so that + // cross-field constraints (e.g. start < end) are properly re-evaluated + // even when only the paired field was edited. + DocumentListener revalidateListener = new DocumentListener() { + @Override + public void insertUpdate(DocumentEvent e) { + group.performValidation(); + } - public static ValidationPanel createValidationPanel(CustomBoundsDialog panel) { - ValidationPanel validationPanel = new ValidationPanel(); - validationPanel.setInnerComponent(panel); - ValidationGroup group = validationPanel.getValidationGroup(); - panel.createValidation(group, validationPanel); - return validationPanel; + @Override + public void removeUpdate(DocumentEvent e) { + group.performValidation(); + } + + @Override + public void changedUpdate(DocumentEvent e) { + group.performValidation(); + } + }; + minTextField.getDocument().addDocumentListener(revalidateListener); + maxTextField.getDocument().addDocumentListener(revalidateListener); + startTextField.getDocument().addDocumentListener(revalidateListener); + endTextField.getDocument().addDocumentListener(revalidateListener); } + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + titleHeader = new org.jdesktop.swingx.JXHeader(); + labelBounds = new javax.swing.JLabel(); + labelMinDate = new javax.swing.JLabel(); + labelMaxDate = new javax.swing.JLabel(); + labelIntervalDate = new javax.swing.JLabel(); + labelStartDate = new javax.swing.JLabel(); + labelEndDate = new javax.swing.JLabel(); + resetDefaultsDate = new javax.swing.JButton(); + minTextField = new javax.swing.JTextField(); + maxTextField = new javax.swing.JTextField(); + startTextField = new javax.swing.JTextField(); + endTextField = new javax.swing.JTextField(); + + titleHeader.setDescription( + NbBundle.getMessage(TimelineTopComponent.class, "CustomBoundsDialog.titleHeader.description")); // NOI18N + titleHeader.setIcon( + ImageUtilities.loadImageIcon("DesktopTimeline/custom_bounds.svg", false)); // NOI18N + titleHeader.setTitle( + NbBundle.getMessage(TimelineTopComponent.class, "CustomBoundsDialog.titleHeader.title")); // NOI18N + + labelBounds.setFont(labelBounds.getFont().deriveFont(labelBounds.getFont().getStyle() | java.awt.Font.BOLD)); + labelBounds + .setText(NbBundle.getMessage(TimelineTopComponent.class, "CustomBoundsDialog.labelBounds.text")); // NOI18N + + labelMinDate + .setText(NbBundle.getMessage(TimelineTopComponent.class, "CustomBoundsDialog.labelMinDate.text")); // NOI18N + + labelMaxDate + .setText(NbBundle.getMessage(TimelineTopComponent.class, "CustomBoundsDialog.labelMaxDate.text")); // NOI18N + + labelIntervalDate.setFont( + labelIntervalDate.getFont().deriveFont(labelIntervalDate.getFont().getStyle() | java.awt.Font.BOLD)); + labelIntervalDate.setText( + NbBundle.getMessage(TimelineTopComponent.class, "CustomBoundsDialog.labelIntervalDate.text")); // NOI18N + + labelStartDate.setText( + NbBundle.getMessage(TimelineTopComponent.class, "CustomBoundsDialog.labelStartDate.text")); // NOI18N + + labelEndDate + .setText(NbBundle.getMessage(TimelineTopComponent.class, "CustomBoundsDialog.labelEndDate.text")); // NOI18N + + resetDefaultsDate.setText( + NbBundle.getMessage(TimelineTopComponent.class, "CustomBoundsDialog.resetDefaultsDate.text")); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(titleHeader, javax.swing.GroupLayout.DEFAULT_SIZE, 564, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(resetDefaultsDate)) + .addGroup(layout.createSequentialGroup() + .addGap(25, 25, 25) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(6, 6, 6) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(labelMinDate) + .addComponent(labelStartDate)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addGroup(layout.createSequentialGroup() + .addComponent(minTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 162, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(47, 47, 47) + .addComponent(labelMaxDate)) + .addGroup(layout.createSequentialGroup() + .addComponent(startTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + 162, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(labelEndDate))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(maxTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 162, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(endTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 162, + javax.swing.GroupLayout.PREFERRED_SIZE))) + .addComponent(labelIntervalDate) + .addComponent(labelBounds)))) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(titleHeader, javax.swing.GroupLayout.PREFERRED_SIZE, 83, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addComponent(labelBounds) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelMinDate) + .addComponent(minTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(labelMaxDate) + .addComponent(maxTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addComponent(labelIntervalDate) + .addGap(10, 10, 10) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(startTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(labelStartDate) + .addComponent(labelEndDate) + .addComponent(endTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addComponent(resetDefaultsDate) + .addContainerGap(43, Short.MAX_VALUE)) + ); + }// //GEN-END:initComponents + private class TimeValidator implements Validator { private final JTextField other; - private boolean max; + private final boolean max; public TimeValidator(JTextField other, boolean max) { this.other = other; this.max = max; } - public boolean validate(Problems prblms, String string, String t) { + @Override + public void validate(Problems prblms, String string, String t) { double thisDate; double otherDate; - if (model.getTimeFormat().equals(TimeFormat.DATE)) { + if (model.getTimeFormat().equals(TimeFormat.DATE) || model.getTimeFormat().equals(TimeFormat.DATETIME)) { try { - thisDate = DynamicUtilities.getDoubleFromDate(DATE_FORMAT.parse(t)); - otherDate = DynamicUtilities.getDoubleFromDate(DATE_FORMAT.parse(other.getText())); + thisDate = AttributeUtils.parseDateTime(t); + otherDate = AttributeUtils.parseDateTime(other.getText()); double minDate = max ? otherDate : thisDate; double maxDate = max ? thisDate : otherDate; - if(minDate < model.getMin()) { - prblms.add(NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.TimeValidator.min")); - return false; + if (minDate < model.getMin()) { + prblms + .add(NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.TimeValidator.min")); } - if(maxDate > model.getMax()) { - prblms.add(NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.TimeValidator.max")); - return false; + if (maxDate > model.getMax()) { + prblms + .add(NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.TimeValidator.max")); } if (minDate >= maxDate) { prblms.add(NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.TimeValidator")); - return false; - } else if (maxDate <= minDate) { - prblms.add(NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.TimeValidator")); - return false; } - } catch (ParseException ex) { - prblms.add(NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.FormatValidator.date", DATE_FORMAT.toPattern())); - return false; - } - } else if (model.getTimeFormat().equals(TimeFormat.DATETIME)) { - try { - thisDate = DynamicUtilities.getDoubleFromDate(DATETIME_FORMAT.parse(t)); - otherDate = DynamicUtilities.getDoubleFromDate(DATETIME_FORMAT.parse(other.getText())); - double minDate = max ? otherDate : thisDate; - double maxDate = max ? thisDate : otherDate; - if(minDate < model.getMin()) { - prblms.add(NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.TimeValidator.min")); - return false; - } - if(maxDate > model.getMax()) { - prblms.add(NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.TimeValidator.max")); - return false; - } - if (minDate >= maxDate) { - prblms.add(NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.TimeValidator")); - return false; - } else if (maxDate <= minDate) { - prblms.add(NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.TimeValidator")); - return false; - } - } catch (ParseException ex) { - prblms.add(NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.FormatValidator.date", DATETIME_FORMAT.toPattern())); - return false; + } catch (Exception ex) { + prblms.add(NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.FormatValidator.date", + DATE_TIME_FORMAT_HELP_TEXT)); } + } else { try { thisDate = Double.parseDouble(t); otherDate = Double.parseDouble(other.getText()); double minDate = max ? otherDate : thisDate; double maxDate = max ? thisDate : otherDate; - if(minDate < model.getMin()) { - prblms.add(NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.TimeValidator.min")); - return false; + if (minDate < model.getMin()) { + prblms + .add(NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.TimeValidator.min")); } - if(maxDate > model.getMax()) { - prblms.add(NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.TimeValidator.max")); - return false; + if (maxDate > model.getMax()) { + prblms + .add(NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.TimeValidator.max")); } if (minDate >= maxDate) { prblms.add(NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.TimeValidator")); - return false; - } else if (maxDate <= minDate) { - prblms.add(NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.TimeValidator")); - return false; } } catch (Exception e) { - prblms.add(NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.FormatValidator.double")); - return false; + prblms.add( + NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.FormatValidator.double")); + } + } + } + + @Override + public Class modelType() { + return String.class; + } + } + + private class IntervalBoundsValidator implements Validator { + + private final JTextField boundField; + private final boolean upper; + + /** + * Validates that the interval value does not exceed the custom bounds. + * + * @param boundField the min or max bounds text field to validate against + * @param upper if true, validates value <= boundField (for end); if false, validates value >= boundField (for start) + */ + public IntervalBoundsValidator(JTextField boundField, boolean upper) { + this.boundField = boundField; + this.upper = upper; + } + + @Override + public void validate(Problems prblms, String string, String t) { + double thisValue; + double boundValue; + if (model.getTimeFormat().equals(TimeFormat.DATE) || model.getTimeFormat().equals(TimeFormat.DATETIME)) { + try { + thisValue = AttributeUtils.parseDateTime(t); + boundValue = AttributeUtils.parseDateTime(boundField.getText()); + } catch (Exception ex) { + return; // Format errors are handled by FormatValidator + } + } else { + try { + thisValue = Double.parseDouble(t); + boundValue = Double.parseDouble(boundField.getText()); + } catch (Exception e) { + return; // Format errors are handled by FormatValidator } } - return true; + if (upper && thisValue > boundValue) { + prblms.add(NbBundle + .getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.IntervalBoundsValidator.upper")); + } else if (!upper && thisValue < boundValue) { + prblms.add(NbBundle + .getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.IntervalBoundsValidator.lower")); + } + } + + @Override + public Class modelType() { + return String.class; } } private class FormatValidator implements Validator { - public boolean validate(Problems prblms, String string, String t) { + @Override + public void validate(Problems prblms, String string, String t) { if (model.getTimeFormat().equals(TimeFormat.DATE)) { try { - DATE_FORMAT.parse(t); - } catch (ParseException ex) { - prblms.add(NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.FormatValidator.date", DATE_FORMAT.toPattern())); - return false; + AttributeUtils.parseDateTime(t); + } catch (Exception ex) { + prblms.add(NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.FormatValidator.date", + DATE_TIME_FORMAT_HELP_TEXT)); } } else if (model.getTimeFormat().equals(TimeFormat.DATETIME)) { try { - DATETIME_FORMAT.parse(t); - } catch (ParseException ex) { - prblms.add(NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.FormatValidator.date", DATETIME_FORMAT.toPattern())); - return false; + AttributeUtils.parseDateTime(t); + } catch (Exception ex) { + prblms.add(NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.FormatValidator.date", + DATE_TIME_FORMAT_HELP_TEXT)); } } else { try { Double.parseDouble(t); } catch (Exception e) { - prblms.add(NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.FormatValidator.double")); - return false; + prblms.add( + NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.FormatValidator.double")); } } - return true; } - } - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // //GEN-BEGIN:initComponents - private void initComponents() { - - titleHeader = new org.jdesktop.swingx.JXHeader(); - labelBounds = new javax.swing.JLabel(); - labelMinDate = new javax.swing.JLabel(); - labelMaxDate = new javax.swing.JLabel(); - labelIntervalDate = new javax.swing.JLabel(); - labelStartDate = new javax.swing.JLabel(); - labelEndDate = new javax.swing.JLabel(); - resetDefaultsDate = new javax.swing.JButton(); - minTextField = new javax.swing.JTextField(); - maxTextField = new javax.swing.JTextField(); - startTextField = new javax.swing.JTextField(); - endTextField = new javax.swing.JTextField(); - - titleHeader.setDescription(NbBundle.getMessage (TimelineTopComponent.class, "CustomBoundsDialog.titleHeader.description")); // NOI18N - titleHeader.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/timeline/resources/custom_bounds.png"))); // NOI18N - titleHeader.setTitle(NbBundle.getMessage (TimelineTopComponent.class, "CustomBoundsDialog.titleHeader.title")); // NOI18N - - labelBounds.setFont(labelBounds.getFont().deriveFont(labelBounds.getFont().getStyle() | java.awt.Font.BOLD)); - labelBounds.setText(NbBundle.getMessage (TimelineTopComponent.class, "CustomBoundsDialog.labelBounds.text")); // NOI18N - - labelMinDate.setText(NbBundle.getMessage (TimelineTopComponent.class, "CustomBoundsDialog.labelMinDate.text")); // NOI18N - - labelMaxDate.setText(NbBundle.getMessage (TimelineTopComponent.class, "CustomBoundsDialog.labelMaxDate.text")); // NOI18N - - labelIntervalDate.setFont(labelIntervalDate.getFont().deriveFont(labelIntervalDate.getFont().getStyle() | java.awt.Font.BOLD)); - labelIntervalDate.setText(NbBundle.getMessage (TimelineTopComponent.class, "CustomBoundsDialog.labelIntervalDate.text")); // NOI18N - - labelStartDate.setText(NbBundle.getMessage (TimelineTopComponent.class, "CustomBoundsDialog.labelStartDate.text")); // NOI18N - - labelEndDate.setText(NbBundle.getMessage (TimelineTopComponent.class, "CustomBoundsDialog.labelEndDate.text")); // NOI18N - - resetDefaultsDate.setText(NbBundle.getMessage (TimelineTopComponent.class, "CustomBoundsDialog.resetDefaultsDate.text")); // NOI18N - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(titleHeader, javax.swing.GroupLayout.DEFAULT_SIZE, 564, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(resetDefaultsDate)) - .addGroup(layout.createSequentialGroup() - .addGap(25, 25, 25) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGap(6, 6, 6) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(labelMinDate) - .addComponent(labelStartDate)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addGroup(layout.createSequentialGroup() - .addComponent(minTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 162, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(47, 47, 47) - .addComponent(labelMaxDate)) - .addGroup(layout.createSequentialGroup() - .addComponent(startTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 162, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(labelEndDate))) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(maxTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 162, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(endTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 162, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addComponent(labelIntervalDate) - .addComponent(labelBounds)))) - .addContainerGap()) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(titleHeader, javax.swing.GroupLayout.PREFERRED_SIZE, 83, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(labelBounds) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(labelMinDate) - .addComponent(minTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelMaxDate) - .addComponent(maxTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(18, 18, 18) - .addComponent(labelIntervalDate) - .addGap(10, 10, 10) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(startTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelStartDate) - .addComponent(labelEndDate) - .addComponent(endTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(18, 18, 18) - .addComponent(resetDefaultsDate) - .addContainerGap(43, Short.MAX_VALUE)) - ); - }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JTextField endTextField; - private javax.swing.JLabel labelBounds; - private javax.swing.JLabel labelEndDate; - private javax.swing.JLabel labelIntervalDate; - private javax.swing.JLabel labelMaxDate; - private javax.swing.JLabel labelMinDate; - private javax.swing.JLabel labelStartDate; - private javax.swing.JTextField maxTextField; - private javax.swing.JTextField minTextField; - private javax.swing.JButton resetDefaultsDate; - private javax.swing.JTextField startTextField; - private org.jdesktop.swingx.JXHeader titleHeader; - // End of variables declaration//GEN-END:variables + @Override + public Class modelType() { + return String.class; + } + } } diff --git a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/DateTick.java b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/DateTick.java index c9316bbda6..eaf5da3f8d 100644 --- a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/DateTick.java +++ b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/DateTick.java @@ -39,164 +39,170 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.timeline; -import org.gephi.dynamic.DynamicUtilities; -import org.joda.time.DateTime; -import org.joda.time.DateTimeFieldType; -import org.joda.time.DurationFieldType; -import org.joda.time.Interval; -import org.joda.time.Period; -import org.joda.time.PeriodType; +import java.time.Duration; +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.temporal.ChronoUnit; +import java.util.ArrayList; +import java.util.List; /** - * - * @author Mathieu Bastian + * Author: Mathieu Bastian */ public class DateTick { - //Consts + // Consts protected final static int MIN_PIXELS = 10; - //Fields - private final DateTime min; - private final DateTime max; + // Fields + private final Instant min; + private final Instant max; private final TickPeriod[] tickPeriods; - public DateTick(DateTime min, DateTime max, DateTimeFieldType[] types) { + public DateTick(Instant min, Instant max, ChronoUnit[] units) { this.min = min; this.max = max; - this.tickPeriods = new TickPeriod[types.length]; - for (int i = 0; i < types.length; i++) { - this.tickPeriods[i] = new TickPeriod(min, max, types[i]); + this.tickPeriods = new TickPeriod[units.length]; + for (int i = 0; i < units.length; i++) { + this.tickPeriods[i] = new TickPeriod(min, max, units[i]); } } - public int getTypeCount() { - return tickPeriods.length; - } - - public Interval[] getIntervals(int type) { - return tickPeriods[type].getIntervals(); - } - - public String getTickValue(int type, DateTime dateTime) { - return tickPeriods[type].getTickValue(dateTime); - } - - public DurationFieldType getDurationType(int type) { - return tickPeriods[type].getDurationType(); - } - - public int getTickPixelPosition(long ms, int width) { - long minMs = min.getMillis(); - long maxMs = max.getMillis(); - long duration = maxMs - minMs; - return (int) ((ms - minMs) * width / duration); - } - public static DateTick create(double min, double max, int width) { - - DateTime minDate = new DateTime((long) min); - DateTime maxDate = new DateTime((long) max); - - Period period = new Period(minDate, maxDate, PeriodType.yearMonthDayTime());; - int years = period.getYears(); - int months = period.getMonths(); - int days = period.getDays(); - int hours = period.getHours(); - int minutes = period.getMinutes(); - int seconds = period.getSeconds(); - - //Top type - DateTimeFieldType topType; - if (years > 0) { - topType = DateTimeFieldType.year(); - } else if (months > 0) { - topType = DateTimeFieldType.monthOfYear(); - } else if (days > 0) { - topType = DateTimeFieldType.dayOfMonth(); + Instant minInstant = Instant.ofEpochMilli((long) min); + Instant maxInstant = Instant.ofEpochMilli((long) max); + + Duration duration = Duration.between(minInstant, maxInstant); + long days = duration.toDays(); + long hours = duration.toHours(); + long minutes = duration.toMinutes(); + long seconds = duration.getSeconds(); + + // Top unit + ChronoUnit topUnit; + if (days > 0) { + topUnit = ChronoUnit.DAYS; } else if (hours > 0) { - topType = DateTimeFieldType.hourOfDay(); + topUnit = ChronoUnit.HOURS; } else if (minutes > 0) { - topType = DateTimeFieldType.minuteOfHour(); + topUnit = ChronoUnit.MINUTES; } else if (seconds > 0) { - topType = DateTimeFieldType.secondOfMinute(); + topUnit = ChronoUnit.SECONDS; } else { - topType = DateTimeFieldType.millisOfSecond(); + topUnit = ChronoUnit.MILLIS; } - //Bottom type - if (topType != DateTimeFieldType.millisOfSecond()) { - DateTimeFieldType bottomType; - if (topType.equals(DateTimeFieldType.year())) { - bottomType = DateTimeFieldType.monthOfYear(); - } else if (topType.equals(DateTimeFieldType.monthOfYear())) { - bottomType = DateTimeFieldType.dayOfMonth(); - } else if (topType.equals(DateTimeFieldType.dayOfMonth())) { - bottomType = DateTimeFieldType.hourOfDay(); - } else if (topType.equals(DateTimeFieldType.hourOfDay())) { - bottomType = DateTimeFieldType.minuteOfHour(); - } else if (topType.equals(DateTimeFieldType.minuteOfHour())) { - bottomType = DateTimeFieldType.secondOfMinute(); + // Bottom unit + if (topUnit != ChronoUnit.MILLIS) { + ChronoUnit bottomUnit; + if (topUnit == ChronoUnit.DAYS) { + bottomUnit = ChronoUnit.HOURS; + } else if (topUnit == ChronoUnit.HOURS) { + bottomUnit = ChronoUnit.MINUTES; + } else if (topUnit == ChronoUnit.MINUTES) { + bottomUnit = ChronoUnit.SECONDS; } else { - bottomType = DateTimeFieldType.millisOfSecond(); + bottomUnit = ChronoUnit.MILLIS; } - //Number of ticks - Period p = new Period(minDate, maxDate, PeriodType.forFields(new DurationFieldType[]{bottomType.getDurationType()})); - int intervals = p.get(bottomType.getDurationType()); + // Number of ticks + long intervals = duration.toMillis() / bottomUnit.getDuration().toMillis(); if (intervals > 0) { - int intervalSize = width / intervals; + int intervalSize = width / (int) intervals; if (intervalSize >= MIN_PIXELS) { - return new DateTick(minDate, maxDate, new DateTimeFieldType[]{topType, bottomType}); + return new DateTick(minInstant, maxInstant, new ChronoUnit[] { topUnit, bottomUnit }); } } } - return new DateTick(minDate, maxDate, new DateTimeFieldType[]{topType}); + return new DateTick(minInstant, maxInstant, new ChronoUnit[] { topUnit }); + } + + public int getTypeCount() { + return tickPeriods.length; + } + + public List getIntervals(int type) { + return tickPeriods[type].getIntervals(); + } + + public String getTickValue(int type, Instant instant) { + return tickPeriods[type].getTickValue(instant); + } + + public ChronoUnit getDurationType(int type) { + return tickPeriods[type].getDurationType(); + } + + public int getTickPixelPosition(long ms, int width) { + long minMs = min.toEpochMilli(); + long maxMs = max.toEpochMilli(); + long duration = maxMs - minMs; + return (int) ((ms - minMs) * width / duration); } private static class TickPeriod { - protected final DateTime min; - protected final DateTime max; - protected final Period period; - protected final Interval interval; - protected final DateTimeFieldType type; + protected final Instant min; + protected final Instant max; + protected final Duration period; + protected final Instant interval; + protected final ChronoUnit unit; - public TickPeriod(DateTime min, DateTime max, DateTimeFieldType type) { + public TickPeriod(Instant min, Instant max, ChronoUnit unit) { this.min = min; this.max = max; - this.period = new Period(min, max, PeriodType.forFields(new DurationFieldType[]{type.getDurationType()})); - this.interval = new Interval(min, max); - this.type = type; + this.period = Duration.between(min, max); + this.interval = min; + this.unit = unit; } - public Interval[] getIntervals() { - int totalIntervals = period.get(type.getDurationType()) + 2; - Interval[] intervals = new Interval[totalIntervals]; + public List getIntervals() { + long totalIntervals = period.toMillis() / unit.getDuration().toMillis() + 2; + List intervals = new ArrayList<>(); for (int i = 0; i < totalIntervals; i++) { - Interval currentInterval; + Instant currentInterval; if (i == 0) { - currentInterval = min.property(type).toInterval();; + currentInterval = min; } else { - currentInterval = min.property(type).addToCopy(i).property(type).toInterval(); + currentInterval = min.plus(i, unit); } - intervals[i] = currentInterval; + intervals.add(new Interval(currentInterval, currentInterval.plus(1, unit))); } return intervals; } public int getIntervalCount() { - return period.get(type.getDurationType()); + return (int) (period.toMillis() / unit.getDuration().toMillis()); + } + + public String getTickValue(Instant instant) { + return instant.toString(); + } + + public ChronoUnit getDurationType() { + return unit; + } + } + + public static class Interval { + private final Instant start; + private final Instant end; + + public Interval(Instant start, Instant end) { + this.start = start; + this.end = end; } - public String getTickValue(DateTime dateTime) { - return dateTime.property(type).getAsShortText(); + public Instant getStart() { + return start; } - public DurationFieldType getDurationType() { - return type.getDurationType(); + public Instant getEnd() { + return end; } } -} +} \ No newline at end of file diff --git a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/DrawerSettings.java b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/DrawerSettings.java index 0b21a09f3f..9814c14986 100644 --- a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/DrawerSettings.java +++ b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/DrawerSettings.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.timeline; import java.awt.BasicStroke; @@ -55,33 +56,10 @@ Development and Distribution License("CDDL") (collectively, the import javax.swing.UIManager; /** - * * @author Julian Bilcke */ public class DrawerSettings { - public class Background { - - public Color top; - public Color bottom; - public Paint paint; - } - - public class SelectionBox { - - public Color top; - public Color bottom; - public Paint paint; - public int visibleHookWidth; // the "visible hook" (mouse hook, to move the selection box) - public int invisibleHookMargin; // let the "invisible hook" be a bit larger on the left.. - public int minimalWidth; - public Color mouseOverTopColor; - public Color activatedTopColor; - public Color mouseOverBottomColor; - public Color activatedBottomColor; - public Paint mouseOverPaint; - public Paint activatedPaint; - } public Background background = new Background(); public SelectionBox selection = new SelectionBox(); public Stroke defaultStroke; @@ -91,24 +69,11 @@ public class SelectionBox { public RenderingHints renderingHints; public Kernel convolutionKernel; public ConvolveOp blurOperator; - private int lastWidth = 0; - private int lastHeight = 0; public int tmMarginTop; public int tmMarginBottom; public int topChartMargin; - - void update(int width, int height) { - if (lastWidth == width && lastHeight == height) { - return; - } - lastWidth = width; - lastHeight = height; - -// background.paint = new GradientPaint(0, 0, background.top, 0, height, background.bottom, true); - selection.paint = new GradientPaint(0, 0, selection.top, 0, height, selection.bottom, true); - selection.mouseOverPaint = new GradientPaint(0, 0, selection.mouseOverTopColor, 0, height, selection.mouseOverBottomColor, true); - selection.activatedPaint = new GradientPaint(0, 0, selection.activatedTopColor, 0, height, selection.activatedBottomColor, true); - } + private int lastWidth = 0; + private int lastHeight = 0; public DrawerSettings() { /* DEFINE THEME HERE */ @@ -133,8 +98,10 @@ public DrawerSettings() { selection.activatedTopColor = new Color(188, 118, 114, 50); selection.mouseOverBottomColor = new Color(60, 143, 96, 50); selection.activatedBottomColor = new Color(151, 79, 79, 50); - selection.mouseOverPaint = new GradientPaint(0, 0, selection.mouseOverTopColor, 0, 20, selection.mouseOverBottomColor, true); - selection.activatedPaint = new GradientPaint(0, 0, selection.activatedTopColor, 0, 20, selection.activatedBottomColor, true); + selection.mouseOverPaint = + new GradientPaint(0, 0, selection.mouseOverTopColor, 0, 20, selection.mouseOverBottomColor, true); + selection.activatedPaint = + new GradientPaint(0, 0, selection.activatedTopColor, 0, 20, selection.activatedBottomColor, true); shadowColor = new Color(35, 35, 35, 105); @@ -148,21 +115,21 @@ public DrawerSettings() { tmMarginBottom = 0; topChartMargin = 16; - + //System.out.println("Generating filters for " + this); // filters - Map map = new HashMap(); + Map map = new HashMap<>(); // bilinear map.put(RenderingHints.KEY_INTERPOLATION, - RenderingHints.VALUE_INTERPOLATION_BILINEAR); + RenderingHints.VALUE_INTERPOLATION_BILINEAR); map.put(RenderingHints.KEY_RENDERING, - RenderingHints.VALUE_RENDER_QUALITY); + RenderingHints.VALUE_RENDER_QUALITY); // Antialiasing (text and image) map.put(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); + RenderingHints.VALUE_ANTIALIAS_ON); map.put(RenderingHints.KEY_TEXT_ANTIALIASING, - RenderingHints.VALUE_TEXT_ANTIALIAS_ON); + RenderingHints.VALUE_TEXT_ANTIALIAS_ON); renderingHints = new RenderingHints(map); @@ -173,4 +140,42 @@ public DrawerSettings() { // blurOperator = new ConvolveOp(convolutionKernel, ConvolveOp.EDGE_NO_OP, // renderingHints); } + + void update(int width, int height) { + if (lastWidth == width && lastHeight == height) { + return; + } + lastWidth = width; + lastHeight = height; + +// background.paint = new GradientPaint(0, 0, background.top, 0, height, background.bottom, true); + selection.paint = new GradientPaint(0, 0, selection.top, 0, height, selection.bottom, true); + selection.mouseOverPaint = + new GradientPaint(0, 0, selection.mouseOverTopColor, 0, height, selection.mouseOverBottomColor, true); + selection.activatedPaint = + new GradientPaint(0, 0, selection.activatedTopColor, 0, height, selection.activatedBottomColor, true); + } + + public class Background { + + public Color top; + public Color bottom; + public Paint paint; + } + + public class SelectionBox { + + public Color top; + public Color bottom; + public Paint paint; + public int visibleHookWidth; // the "visible hook" (mouse hook, to move the selection box) + public int invisibleHookMargin; // let the "invisible hook" be a bit larger on the left.. + public int minimalWidth; + public Color mouseOverTopColor; + public Color activatedTopColor; + public Color mouseOverBottomColor; + public Color activatedBottomColor; + public Paint mouseOverPaint; + public Paint activatedPaint; + } } diff --git a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/PlaySettingsDialog.java b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/PlaySettingsDialog.java index bdadb631c4..226c790f8e 100644 --- a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/PlaySettingsDialog.java +++ b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/PlaySettingsDialog.java @@ -39,24 +39,38 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.timeline; import javax.swing.SpinnerNumberModel; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; import org.gephi.timeline.api.TimelineController; import org.gephi.timeline.api.TimelineModel; +import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class PlaySettingsDialog extends javax.swing.JPanel { private TimelineModel model; private TimelineController controller; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JCheckBox backwardCheckbox; + private javax.swing.JSpinner delaySpinner; + private org.jdesktop.swingx.JXHeader headerTitle; + private javax.swing.JLabel labelDelay; + private javax.swing.JLabel labelMode; + private javax.swing.JLabel labelMs; + private javax.swing.JLabel labelPerc; + private javax.swing.JLabel labelSpeed; + private javax.swing.JLabel labelStepSize; + private javax.swing.ButtonGroup modeButtonGroup; + private javax.swing.JRadioButton oneBoundRadio; + private javax.swing.JSpinner stepSizeSpinner; + private javax.swing.JRadioButton twoBoundsRadio; + // End of variables declaration//GEN-END:variables public PlaySettingsDialog() { initComponents(); @@ -100,7 +114,8 @@ public void unsetup() { } } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -123,105 +138,109 @@ private void initComponents() { twoBoundsRadio = new javax.swing.JRadioButton(); backwardCheckbox = new javax.swing.JCheckBox(); - headerTitle.setDescription(NbBundle.getMessage (TimelineTopComponent.class, "PlaySettingsDialog.headerTitle.description")); // NOI18N - headerTitle.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/timeline/resources/enabled.png"))); // NOI18N - headerTitle.setTitle(NbBundle.getMessage (TimelineTopComponent.class, "PlaySettingsDialog.headerTitle.title")); // NOI18N + headerTitle.setDescription( + NbBundle.getMessage(TimelineTopComponent.class, "PlaySettingsDialog.headerTitle.description")); // NOI18N + headerTitle.setIcon(ImageUtilities.loadImageIcon("DesktopTimeline/enabled.svg", false)); // NOI18N + headerTitle.setTitle( + NbBundle.getMessage(TimelineTopComponent.class, "PlaySettingsDialog.headerTitle.title")); // NOI18N labelSpeed.setFont(labelSpeed.getFont().deriveFont(labelSpeed.getFont().getStyle() | java.awt.Font.BOLD)); - labelSpeed.setText(NbBundle.getMessage (TimelineTopComponent.class, "PlaySettingsDialog.labelSpeed.text")); // NOI18N + labelSpeed + .setText(NbBundle.getMessage(TimelineTopComponent.class, "PlaySettingsDialog.labelSpeed.text")); // NOI18N - labelDelay.setText(NbBundle.getMessage (TimelineTopComponent.class, "PlaySettingsDialog.labelDelay.text")); // NOI18N + labelDelay + .setText(NbBundle.getMessage(TimelineTopComponent.class, "PlaySettingsDialog.labelDelay.text")); // NOI18N - labelMs.setText(NbBundle.getMessage (TimelineTopComponent.class, "PlaySettingsDialog.labelMs.text")); // NOI18N + labelMs.setText(NbBundle.getMessage(TimelineTopComponent.class, "PlaySettingsDialog.labelMs.text")); // NOI18N - labelStepSize.setText(NbBundle.getMessage (TimelineTopComponent.class, "PlaySettingsDialog.labelStepSize.text")); // NOI18N + labelStepSize.setText( + NbBundle.getMessage(TimelineTopComponent.class, "PlaySettingsDialog.labelStepSize.text")); // NOI18N - labelPerc.setText(NbBundle.getMessage (TimelineTopComponent.class, "PlaySettingsDialog.labelPerc.text")); // NOI18N + labelPerc + .setText(NbBundle.getMessage(TimelineTopComponent.class, "PlaySettingsDialog.labelPerc.text")); // NOI18N labelMode.setFont(labelMode.getFont().deriveFont(labelMode.getFont().getStyle() | java.awt.Font.BOLD)); - labelMode.setText(NbBundle.getMessage (TimelineTopComponent.class, "PlaySettingsDialog.labelMode.text")); // NOI18N + labelMode + .setText(NbBundle.getMessage(TimelineTopComponent.class, "PlaySettingsDialog.labelMode.text")); // NOI18N modeButtonGroup.add(oneBoundRadio); - oneBoundRadio.setText(NbBundle.getMessage (TimelineTopComponent.class, "PlaySettingsDialog.oneBoundRadio.text")); // NOI18N + oneBoundRadio.setText( + NbBundle.getMessage(TimelineTopComponent.class, "PlaySettingsDialog.oneBoundRadio.text")); // NOI18N modeButtonGroup.add(twoBoundsRadio); - twoBoundsRadio.setText(NbBundle.getMessage (TimelineTopComponent.class, "PlaySettingsDialog.twoBoundsRadio.text")); // NOI18N + twoBoundsRadio.setText( + NbBundle.getMessage(TimelineTopComponent.class, "PlaySettingsDialog.twoBoundsRadio.text")); // NOI18N - backwardCheckbox.setText(NbBundle.getMessage (TimelineTopComponent.class, "PlaySettingsDialog.backwardCheckbox.text")); // NOI18N + backwardCheckbox.setText( + NbBundle.getMessage(TimelineTopComponent.class, "PlaySettingsDialog.backwardCheckbox.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(headerTitle, javax.swing.GroupLayout.DEFAULT_SIZE, 436, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addGap(35, 35, 35) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(labelMode) - .addGroup(layout.createSequentialGroup() - .addGap(21, 21, 21) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(backwardCheckbox) - .addGroup(layout.createSequentialGroup() - .addComponent(oneBoundRadio) - .addGap(18, 18, 18) - .addComponent(twoBoundsRadio)))) - .addComponent(labelSpeed) - .addGroup(layout.createSequentialGroup() - .addGap(39, 39, 39) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(labelDelay) - .addComponent(labelStepSize)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(stepSizeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 81, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(delaySpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 81, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(labelMs) - .addComponent(labelPerc)))) - .addContainerGap()) + .addComponent(headerTitle, javax.swing.GroupLayout.DEFAULT_SIZE, 436, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addGap(35, 35, 35) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(labelMode) + .addGroup(layout.createSequentialGroup() + .addGap(21, 21, 21) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(backwardCheckbox) + .addGroup(layout.createSequentialGroup() + .addComponent(oneBoundRadio) + .addGap(18, 18, 18) + .addComponent(twoBoundsRadio)))) + .addComponent(labelSpeed) + .addGroup(layout.createSequentialGroup() + .addGap(39, 39, 39) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(labelDelay) + .addComponent(labelStepSize)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(stepSizeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 81, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(delaySpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 81, + javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(labelMs) + .addComponent(labelPerc)))) + .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(headerTitle, javax.swing.GroupLayout.PREFERRED_SIZE, 69, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(labelSpeed) - .addGap(14, 14, 14) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(labelDelay, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelMs, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(delaySpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(labelPerc, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelStepSize, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(stepSizeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(18, 18, 18) - .addComponent(labelMode) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(oneBoundRadio) - .addComponent(twoBoundsRadio)) - .addGap(18, 18, 18) - .addComponent(backwardCheckbox) - .addContainerGap(39, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addComponent(headerTitle, javax.swing.GroupLayout.PREFERRED_SIZE, 69, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(labelSpeed) + .addGap(14, 14, 14) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(labelDelay, javax.swing.GroupLayout.PREFERRED_SIZE, 31, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(labelMs, javax.swing.GroupLayout.Alignment.TRAILING, + javax.swing.GroupLayout.PREFERRED_SIZE, 31, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(delaySpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 31, + javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(labelPerc, javax.swing.GroupLayout.PREFERRED_SIZE, 31, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(labelStepSize, javax.swing.GroupLayout.PREFERRED_SIZE, 31, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(stepSizeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 31, + javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addComponent(labelMode) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(oneBoundRadio) + .addComponent(twoBoundsRadio)) + .addGap(18, 18, 18) + .addComponent(backwardCheckbox) + .addContainerGap(39, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JCheckBox backwardCheckbox; - private javax.swing.JSpinner delaySpinner; - private org.jdesktop.swingx.JXHeader headerTitle; - private javax.swing.JLabel labelDelay; - private javax.swing.JLabel labelMode; - private javax.swing.JLabel labelMs; - private javax.swing.JLabel labelPerc; - private javax.swing.JLabel labelSpeed; - private javax.swing.JLabel labelStepSize; - private javax.swing.ButtonGroup modeButtonGroup; - private javax.swing.JRadioButton oneBoundRadio; - private javax.swing.JSpinner stepSizeSpinner; - private javax.swing.JRadioButton twoBoundsRadio; - // End of variables declaration//GEN-END:variables } diff --git a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/RealTick.java b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/RealTick.java index 6d17bebecd..05ca70f949 100644 --- a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/RealTick.java +++ b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/RealTick.java @@ -39,13 +39,13 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.timeline; import java.math.RoundingMode; import java.text.DecimalFormat; /** - * * @author Mathieu Bastian */ public class RealTick { @@ -109,7 +109,7 @@ public double getTickPosition(int index) { } /** - * Return 2 if multiple of 10, 1 if multiple of 5, 0 otherwise + * Return 2 if multiple of 10, 1 if multiple of 5, 0 otherwise */ public int getTickRank(int index) { double t = minTick + (index * tick); diff --git a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/Sparkline.java b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/Sparkline.java index f95a4f91c7..b3f3e5cd27 100644 --- a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/Sparkline.java +++ b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/Sparkline.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.timeline; import java.awt.Graphics; @@ -49,7 +50,6 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.utils.sparklines.SparklineParameters; /** - * * @author Mathieu Bastian */ public class Sparkline { @@ -65,7 +65,7 @@ public BufferedImage getImage(TimelineModel model, int width, int height) { double newMax = model.getCustomMax(); TimelineChart newChart = model.getChart(); if (chart == null || newMax != max || newMin != min || image.getWidth() != width || image.getHeight() != height - || newChart != chart) { + || newChart != chart) { min = newMin; max = newMax; chart = newChart; @@ -93,7 +93,8 @@ public BufferedImage getImage(TimelineModel model, int width, int height) { } private BufferedImage draw() { - BufferedImage img = SparklineGraph.draw(chart.getX(), chart.getY(), chart.getMinY(), chart.getMaxY(), parameters); + BufferedImage img = + SparklineGraph.draw(chart.getX(), chart.getY(), chart.getMinY(), chart.getMaxY(), parameters); return img; } } diff --git a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/StartEndTick.java b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/StartEndTick.java index 60a3d71d89..bad8cdd12f 100644 --- a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/StartEndTick.java +++ b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/StartEndTick.java @@ -39,13 +39,13 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.timeline; import java.math.RoundingMode; import java.text.DecimalFormat; /** - * * @author Mathieu Bastian */ public class StartEndTick { diff --git a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TickGraph.java b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TickGraph.java index 64423ff6d7..faf22e415d 100644 --- a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TickGraph.java +++ b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TickGraph.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.timeline; import java.awt.Font; @@ -46,16 +47,16 @@ Development and Distribution License("CDDL") (collectively, the import java.awt.Graphics2D; import java.awt.RenderingHints; import java.awt.image.BufferedImage; -import org.gephi.dynamic.api.DynamicModel.TimeFormat; +import java.util.List; +import org.gephi.graph.api.TimeFormat; import org.gephi.timeline.api.TimelineModel; -import org.joda.time.Interval; /** - * * @author Mathieu Bastian */ public class TickGraph { + private static final int MIN_PIXEL_MARGIN_BETWEEN_TICKS = 5; private double min; private double max; private TickParameters parameters; @@ -64,8 +65,11 @@ public class TickGraph { public BufferedImage getImage(TimelineModel model, int width, int height) { double newMin = model.getCustomMin(); double newMax = model.getCustomMax(); - TickParameters.TickType timeFormat = model.getTimeFormat().equals(TimeFormat.DOUBLE) ? TickParameters.TickType.DOUBLE : TickParameters.TickType.DATE; - if (parameters == null || newMax != max || newMin != min || parameters.getWidth() != width || parameters.getHeight() != height || !parameters.getType().equals(timeFormat)) { + TickParameters.TickType timeFormat = + model.getTimeFormat().equals(TimeFormat.DOUBLE) ? TickParameters.TickType.DOUBLE : + TickParameters.TickType.DATE; + if (parameters == null || newMax != max || newMin != min || parameters.getWidth() != width || + parameters.getHeight() != height || !parameters.getType().equals(timeFormat)) { min = newMin; max = newMax; parameters = new TickParameters(timeFormat); @@ -77,10 +81,10 @@ public BufferedImage getImage(TimelineModel model, int width, int height) { } private BufferedImage draw() { + final BufferedImage img = + new BufferedImage(parameters.getWidth(), parameters.getHeight(), BufferedImage.TYPE_INT_ARGB); - final BufferedImage image = new BufferedImage(parameters.getWidth(), parameters.getHeight(), BufferedImage.TYPE_INT_ARGB); - - final Graphics2D g = image.createGraphics(); + final Graphics2D g = img.createGraphics(); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); if (parameters.getType().equals(TickParameters.TickType.DATE)) { @@ -89,7 +93,7 @@ private BufferedImage draw() { drawReal(g); } - return image; + return img; } private void drawDate(Graphics2D g) { @@ -98,11 +102,12 @@ private void drawDate(Graphics2D g) { //Font int fontSize = Math.min(parameters.getFontSize(), (int) (height / 4.)); - fontSize = fontSize > parameters.getFontSize() / 4 && fontSize <= parameters.getFontSize() / 2 ? parameters.getFontSize() / 2 : fontSize; + fontSize = fontSize > parameters.getFontSize() / 4 && fontSize <= parameters.getFontSize() / 2 ? + parameters.getFontSize() / 2 : fontSize; FontMetrics smallMetrics = null; Font smallFont = parameters.getFont(); Font bigFont; - FontMetrics bigMetrics; + FontMetrics bigMetrics = null; if (smallFont != null && fontSize > parameters.getFontSize() / 4) { smallFont = smallFont.deriveFont(Font.PLAIN, fontSize); smallMetrics = g.getFontMetrics(smallFont); @@ -115,7 +120,6 @@ private void drawDate(Graphics2D g) { DateTick dateTick = DateTick.create(min, max, width); - int TOP_TICK = 0; int LOWER_TICK = 1; @@ -123,68 +127,70 @@ private void drawDate(Graphics2D g) { if (dateTick.getTypeCount() > 1) { g.setFont(smallFont); g.setColor(parameters.getDateColor(LOWER_TICK)); - Interval[] intervals = dateTick.getIntervals(LOWER_TICK); + List intervals = dateTick.getIntervals(LOWER_TICK); + int previousXLabelEnd = Integer.MIN_VALUE; + int labelWidth = smallMetrics != null ? smallMetrics.stringWidth("0000") : 0; - for (Interval interval : intervals) { - long ms = interval.getStartMillis(); + for (DateTick.Interval interval : intervals) { + long ms = interval.getStart().toEpochMilli(); int x = dateTick.getTickPixelPosition(ms, width); if (x >= 0) { - g.setColor(parameters.getDateColor(LOWER_TICK)); - //Height - int h = (int) (Math.min(40, (int) (height / 15.0))); + int h = Math.min(40, (int) (height / 15.0)); + + boolean noTickOverlap = x >= previousXLabelEnd + MIN_PIXEL_MARGIN_BETWEEN_TICKS; - //Draw line - g.drawLine(x, 0, x, h); + if (noTickOverlap) { + //Draw line + g.setColor(parameters.getDateColor(LOWER_TICK)); + g.drawLine(x, 0, x, h); - //Label - if (smallFont != null && width / intervals.length > labelWidth) { - String label = dateTick.getTickValue(LOWER_TICK, interval.getStart()); - int xLabel = x + 4; - g.setColor(parameters.getDateColor(1)); - int y = (int) (fontSize * 1.2); + //Label + if (smallFont != null && width / intervals.size() > labelWidth) { + String label = dateTick.getTickValue(LOWER_TICK, interval.getStart()); + int xLabel = x + 4; + int yLabel = (int) (fontSize * 1.2); - g.drawString(label, xLabel, y); + g.setColor(parameters.getDateColor(TOP_TICK)); + g.drawString(label, xLabel, yLabel); + previousXLabelEnd = x + smallMetrics.stringWidth(label); + } } } } } //Top tick - if (dateTick.getTypeCount() > 0) { + if (dateTick.getTypeCount() > 0 && bigFont != null) { g.setFont(bigFont); g.setColor(parameters.getDateColor(TOP_TICK)); - Interval[] intervals = dateTick.getIntervals(TOP_TICK); - for (Interval interval : intervals) { - long ms = interval.getStartMillis(); - int x = dateTick.getTickPixelPosition(ms, width); - if (x >= 0) { - g.setColor(parameters.getDateColor(TOP_TICK)); + List intervals = dateTick.getIntervals(TOP_TICK); + int previousXLabelEnd = Integer.MIN_VALUE; - //Height - int h = height; - - //Draw Line - g.drawLine(x, 0, x, h); + for (DateTick.Interval interval : intervals) { + long ms = interval.getStart().toEpochMilli(); + int x = dateTick.getTickPixelPosition(ms, width); - //Label - if (bigFont != null) { - String label = dateTick.getTickValue(TOP_TICK, interval.getStart()); - int xLabel = x + 4; - g.setColor(parameters.getDateColor(TOP_TICK)); - int y = (int) (fontSize * 4); + String label = dateTick.getTickValue(TOP_TICK, interval.getStart()); - g.drawString(label, xLabel, y); - } - } else if (x > ((dateTick.getTickPixelPosition(interval.getEndMillis(), width) - x) / -2)) { + //Draw Line + boolean noTickOverlap = x >= previousXLabelEnd + MIN_PIXEL_MARGIN_BETWEEN_TICKS; + if (noTickOverlap && x >= 0) { + g.drawLine(x, 0, x, height); + } - if (bigFont != null) { - String label = dateTick.getTickValue(TOP_TICK, interval.getStart()); - g.setColor(parameters.getDateColor(TOP_TICK)); - int y = (int) (fontSize * 4); + int xLabel = -1; + int yLabel = fontSize * 4; + if (x >= 0) { + xLabel = x + 4; + } else if (x > ((dateTick.getTickPixelPosition(interval.getEnd().toEpochMilli(), width) - x) / -2)) { + xLabel = 4; + } - g.drawString(label, 4, y); - } + if (xLabel >= 0 + && noTickOverlap) { + g.drawString(label, xLabel, yLabel); + previousXLabelEnd = x + bigMetrics.stringWidth(label); } } } @@ -198,7 +204,8 @@ private void drawStartEnd(Graphics2D g) { Font font = parameters.getFont(); FontMetrics fontMetrics = null; int fontSize = Math.min(parameters.getFontSize(), (int) (height / 4.)); - fontSize = fontSize > parameters.getFontSize() / 4 && fontSize <= parameters.getFontSize() / 2 ? parameters.getFontSize() / 2 : fontSize; + fontSize = fontSize > parameters.getFontSize() / 4 && fontSize <= parameters.getFontSize() / 2 ? + parameters.getFontSize() / 2 : fontSize; if (font != null && fontSize > parameters.getFontSize() / 4) { font = font.deriveFont(Font.PLAIN, fontSize); fontMetrics = g.getFontMetrics(font); @@ -227,7 +234,9 @@ private void drawReal(Graphics2D g) { FontMetrics fontMetrics = null; double factor = parameters.getFontFactor(); int fontSize = Math.min(parameters.getFontSize(), (int) (height / factor)); - fontSize = fontSize > parameters.getFontSize() / (factor * 2) && fontSize <= parameters.getFontSize() / (factor / 4) ? (int) (parameters.getFontSize() / (factor / 4)) : fontSize; + fontSize = + fontSize > parameters.getFontSize() / (factor * 2) && fontSize <= parameters.getFontSize() / (factor / 4) ? + (int) (parameters.getFontSize() / (factor / 4)) : fontSize; if (font != null && fontSize > parameters.getFontSize() / (factor / 2)) { font = font.deriveFont(Font.PLAIN, fontSize); fontMetrics = g.getFontMetrics(font); @@ -240,14 +249,13 @@ private void drawReal(Graphics2D g) { // int fifty = (int) ((50 - min) * (width / (max - min))); // g.setColor(Color.BLUE); // g.drawLine(fifty, 0, fifty, height); - RealTick graduation = RealTick.create(min, max, width); int numberTicks = graduation.getNumberTicks(); for (int i = 0; i <= numberTicks; i++) { int x = graduation.getTickPixelPosition(i, width); int rank = graduation.getTickRank(i); int h = Math.min(40, (int) (height / 15.0)); - h = rank == 2 ? (int) (h + h) : rank == 1 ? (int) (h + h / 2.) : h; + h = rank == 2 ? (h + h) : rank == 1 ? (int) (h + h / 2.) : h; if (x > 0) { g.setColor(parameters.getRealColor(rank)); g.drawLine(x, 0, x, h); diff --git a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TickParameters.java b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TickParameters.java index fb4ea05754..9661c99cd0 100644 --- a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TickParameters.java +++ b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TickParameters.java @@ -39,28 +39,24 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.timeline; import java.awt.Color; import java.awt.Font; /** - * * @author Mathieu Bastian */ public class TickParameters { - public enum TickType { - - DATE, DOUBLE, START_END - }; private final TickType type; + private final Color[] realColors = new Color[] {new Color(0xB4B4B4), new Color(0x5A5A5A), new Color(0x1E1E1E)}; + private final Color[] dateColors = new Color[] {new Color(0xB4B4B4), new Color(0x5A5A5A)}; private int width, height; private int fontSize = 12; + private final Font font = new Font("Helvetica", Font.PLAIN, fontSize); private double fontFactor = 6.; - private Font font = new Font("Helvetica", Font.PLAIN, fontSize); - private Color[] realColors = new Color[]{new Color(0xB4B4B4), new Color(0x5A5A5A), new Color(0x1E1E1E)}; - private Color[] dateColors = new Color[]{new Color(0xB4B4B4), new Color(0x5A5A5A)}; public TickParameters(TickType type) { this.type = type; @@ -74,14 +70,14 @@ public int getWidth() { return width; } - public int getHeight() { - return height; - } - public void setWidth(int width) { this.width = width; } + public int getHeight() { + return height; + } + public void setHeight(int height) { this.height = height; } @@ -121,4 +117,9 @@ public double getFontFactor() { public void setFontFactor(double fontFactor) { this.fontFactor = fontFactor; } + + public enum TickType { + + DATE, DOUBLE, START_END + } } diff --git a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimeFormatDialog.form b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimeFormatDialog.form index 5275b67eb7..f14b5147f1 100644 --- a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimeFormatDialog.form +++ b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimeFormatDialog.form @@ -20,11 +20,13 @@ - + - + - + + + @@ -38,6 +40,7 @@ + @@ -78,5 +81,15 @@
    + + + + + + + + + +
    diff --git a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimeFormatDialog.java b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimeFormatDialog.java index 9d3dcf05aa..8935000faf 100644 --- a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimeFormatDialog.java +++ b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimeFormatDialog.java @@ -39,21 +39,29 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.timeline; -import org.gephi.dynamic.api.DynamicController; -import org.gephi.dynamic.api.DynamicModel; +import org.gephi.graph.api.TimeFormat; +import org.gephi.timeline.api.TimelineController; import org.gephi.timeline.api.TimelineModel; +import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; /** - * * @author SΓ©bastien Heymann */ public class TimeFormatDialog extends javax.swing.JPanel { - private DynamicController dynamicController; + private TimelineController timelineController; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.ButtonGroup buttonGroup; + private javax.swing.JRadioButton dateRadio; + private javax.swing.JRadioButton dateTimeRadio; + private org.jdesktop.swingx.JXHeader headerTitle; + private javax.swing.JRadioButton numericRadio; + // End of variables declaration//GEN-END:variables /** * Creates new form DateFormatDialog @@ -63,17 +71,30 @@ public TimeFormatDialog() { } public void setup(TimelineModel model) { - this.dynamicController = Lookup.getDefault().lookup(DynamicController.class); - - if (dynamicController.getModel().getTimeFormat().equals(DynamicModel.TimeFormat.DOUBLE)) { - numericRadio.setSelected(true); - } else { - dateRadio.setSelected(true); + this.timelineController = Lookup.getDefault().lookup(TimelineController.class); + + TimeFormat timeFormat = model.getTimeFormat(); + switch (timeFormat) { + case DATE: + dateRadio.setSelected(true); + break; + case DATETIME: + dateTimeRadio.setSelected(true); + break; + case DOUBLE: + numericRadio.setSelected(true); + break; } } public void unsetup() { - dynamicController.setTimeFormat(dateRadio.isSelected() ? DynamicModel.TimeFormat.DATE : DynamicModel.TimeFormat.DOUBLE); + if (dateRadio.isSelected()) { + timelineController.setTimeFormat(TimeFormat.DATE); + } else if (dateTimeRadio.isSelected()) { + timelineController.setTimeFormat(TimeFormat.DATETIME); + } else { + timelineController.setTimeFormat(TimeFormat.DOUBLE); + } } /** @@ -89,44 +110,50 @@ private void initComponents() { headerTitle = new org.jdesktop.swingx.JXHeader(); dateRadio = new javax.swing.JRadioButton(); numericRadio = new javax.swing.JRadioButton(); + dateTimeRadio = new javax.swing.JRadioButton(); - headerTitle.setDescription(NbBundle.getMessage (TimelineTopComponent.class, "TimeFormatDialog.headerTitle.description")); // NOI18N - headerTitle.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/timeline/resources/time_format.png"))); // NOI18N - headerTitle.setTitle(NbBundle.getMessage (TimelineTopComponent.class, "TimeFormatDialog.headerTitle.title")); // NOI18N + headerTitle.setDescription( + NbBundle.getMessage(TimelineTopComponent.class, "TimeFormatDialog.headerTitle.description")); // NOI18N + headerTitle.setIcon(ImageUtilities.loadImageIcon("DesktopTimeline/time_format.svg", false)); // NOI18N + headerTitle + .setTitle(NbBundle.getMessage(TimelineTopComponent.class, "TimeFormatDialog.headerTitle.title")); // NOI18N buttonGroup.add(dateRadio); - dateRadio.setText(NbBundle.getMessage (TimelineTopComponent.class, "TimeFormatDialog.dateRadio.text")); // NOI18N + dateRadio.setText(NbBundle.getMessage(TimelineTopComponent.class, "TimeFormatDialog.dateRadio.text")); // NOI18N buttonGroup.add(numericRadio); - numericRadio.setText(NbBundle.getMessage (TimelineTopComponent.class, "TimeFormatDialog.numericRadio.text")); // NOI18N + numericRadio + .setText(NbBundle.getMessage(TimelineTopComponent.class, "TimeFormatDialog.numericRadio.text")); // NOI18N + + buttonGroup.add(dateTimeRadio); + dateTimeRadio.setText(org.openide.util.NbBundle + .getMessage(TimeFormatDialog.class, "TimeFormatDialog.dateTimeRadio.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(headerTitle, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addGap(126, 126, 126) - .addComponent(numericRadio) - .addGap(18, 18, 18) - .addComponent(dateRadio) - .addContainerGap()) + .addComponent(headerTitle, javax.swing.GroupLayout.DEFAULT_SIZE, 422, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addGap(23, 23, 23) + .addComponent(numericRadio) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(dateTimeRadio) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(dateRadio) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(headerTitle, javax.swing.GroupLayout.PREFERRED_SIZE, 69, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(numericRadio) - .addComponent(dateRadio)) - .addGap(0, 22, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addComponent(headerTitle, javax.swing.GroupLayout.PREFERRED_SIZE, 69, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(numericRadio) + .addComponent(dateRadio) + .addComponent(dateTimeRadio)) + .addGap(0, 22, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.ButtonGroup buttonGroup; - private javax.swing.JRadioButton dateRadio; - private org.jdesktop.swingx.JXHeader headerTitle; - private javax.swing.JRadioButton numericRadio; - // End of variables declaration//GEN-END:variables } diff --git a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimelineDrawer.form b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimelineDrawer.form index c63592c05f..919063bb61 100644 --- a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimelineDrawer.form +++ b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimelineDrawer.form @@ -1,4 +1,4 @@ - +
    diff --git a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimelineDrawer.java b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimelineDrawer.java index b858e6d148..1ee093a4b1 100644 --- a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimelineDrawer.java +++ b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimelineDrawer.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.timeline; import java.awt.Cursor; @@ -48,68 +49,46 @@ Development and Distribution License("CDDL") (collectively, the import java.awt.event.MouseListener; import java.awt.event.MouseMotionListener; import java.awt.image.BufferedImage; -import java.util.Locale; import javax.swing.JPanel; -import javax.swing.Timer; -import org.gephi.timeline.api.TimelineChart; import org.gephi.timeline.api.TimelineController; import org.gephi.timeline.api.TimelineModel; import org.gephi.timeline.api.TimelineModelEvent; -import org.openide.util.Lookup; /** - * * @author Julian Bilcke, Daniel Bernardes */ public class TimelineDrawer extends JPanel implements MouseListener, MouseMotionListener { //Consts - private static Cursor CURSOR_DEFAULT = new Cursor(Cursor.DEFAULT_CURSOR); - private static Cursor CURSOR_LEFT_HOOK = new Cursor(Cursor.E_RESIZE_CURSOR); - private static Cursor CURSOR_CENTRAL_HOOK = new Cursor(Cursor.MOVE_CURSOR); - private static Cursor CURSOR_RIGHT_HOOK = new Cursor(Cursor.W_RESIZE_CURSOR); + private static final Cursor CURSOR_DEFAULT = new Cursor(Cursor.DEFAULT_CURSOR); + private static final Cursor CURSOR_LEFT_HOOK = new Cursor(Cursor.E_RESIZE_CURSOR); + private static final Cursor CURSOR_CENTRAL_HOOK = new Cursor(Cursor.MOVE_CURSOR); + private static final Cursor CURSOR_RIGHT_HOOK = new Cursor(Cursor.W_RESIZE_CURSOR); private static final int LOC_RESIZE_FROM = 1; private static final int LOC_RESIZE_TO = 2; private static final int LOC_RESIZE_CENTER = 3; private static final int LOC_RESIZE_UNKNOWN = -1; - private static Locale LOCALE = Locale.ENGLISH; //Settings - private DrawerSettings settings = new DrawerSettings(); - //Flags - private Integer latestMousePositionX = null; - private int currentMousePositionX = 0; - private Timer viewToModelSync = null; - private Timer modelToViewSync = null; - private boolean mouseInside = false; - //Model - private TimelineModel model; - private TimelineController controller; + private final DrawerSettings settings = new DrawerSettings(); //Ticks - private TickGraph tickGraph = new TickGraph(); + private final TickGraph tickGraph = new TickGraph(); //Sparkline - private Sparkline sparkline = new Sparkline(); + private final Sparkline sparkline = new Sparkline(); //Tooltip - private TimelineTooltip tooltip = new TimelineTooltip(); - - public enum TimelineState { - - IDLE, - MOVING, - RESIZE_FROM, - RESIZE_TO - } + private final TimelineTooltip tooltip = new TimelineTooltip(); TimelineState currentState = TimelineState.IDLE; - - public enum HighlightedComponent { - - NONE, - LEFT_HOOK, - RIGHT_HOOK, - CENTER_HOOK - } HighlightedComponent highlightedComponent = HighlightedComponent.NONE; + //Flags + private Integer latestMousePositionX = null; + private int currentMousePositionX = 0; + private boolean mouseInside = false; + //Model + private final TimelineModel model; + private final TimelineController controller; - public TimelineDrawer() { + public TimelineDrawer(TimelineController controller, TimelineModel model) { + this.controller = controller; + this.model = model; addMouseMotionListener(this); addMouseListener(this); // viewToModelSync = new Timer(150, updateModelAction); @@ -122,54 +101,12 @@ public TimelineDrawer() { public void consumeEvent(TimelineModelEvent event) { switch (event.getEventType()) { - case INTERVAL: - double[] data = (double[]) event.getData(); - setInterval(data[0], data[1]); + case INTERVAL, CUSTOM_BOUNDS, MIN_MAX, CHART: + repaint(); break; - case CUSTOM_BOUNDS: - double[] data2 = (double[]) event.getData(); - setCustomBounds(data2[0], data2[1]); - break; - case MIN_MAX: - double[] data3 = (double[]) event.getData(); - setMinMax(data3[0], data3[1]); - break; - case CHART: - setChart((TimelineChart) event.getData()); - break; - } - } - - public void setModel(TimelineModel model) { - this.controller = Lookup.getDefault().lookup(TimelineController.class); - this.model = model; - if (model != null) { - setMinMax(model.getMin(), model.getMax()); - if (model.hasCustomBounds()) { - setCustomBounds(model.getCustomMin(), model.getCustomMax()); - } - setInterval(model.getIntervalStart(), model.getIntervalEnd()); - } else { - repaint(); } } - public void setChart(TimelineChart chart) { - repaint(); - } - - public void setMinMax(double min, double max) { - repaint(); - } - - public void setCustomBounds(double min, double max) { - repaint(); - } - - public void setInterval(double from, double to) { - repaint(); - } - public int getPixelPosition(double val, double duration, double min, int width) { return (int) ((val - min) * (width / duration)); } @@ -178,7 +115,8 @@ public double getReal(int pixel, double duration, double min, int width) { return pixel * (duration / width) + min; } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -190,8 +128,6 @@ private void initComponents() { setMinimumSize(new java.awt.Dimension(300, 28)); setLayout(new java.awt.BorderLayout()); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - // End of variables declaration//GEN-END:variables @Override public void paintComponent(Graphics g) { @@ -206,7 +142,7 @@ public void paintComponent(Graphics g) { int innerWidth = width - 1; int innerHeight = height - settings.tmMarginBottom - 2; int innerY = settings.tmMarginTop + 1; - if(settings.background.top != null) { + if (settings.background.top != null) { g2d.setColor(settings.background.top); g2d.fillRect(0, innerY, innerWidth, innerHeight); } @@ -252,50 +188,50 @@ public void paintComponent(Graphics g) { switch (highlightedComponent) { case LEFT_HOOK: g2d.fillRect( - intervalStartPixel, - settings.tmMarginTop, - vhw, - height - settings.tmMarginBottom - 1); + intervalStartPixel, + settings.tmMarginTop, + vhw, + height - settings.tmMarginBottom - 1); g2d.setPaint(settings.selection.paint); g2d.fillRect( - intervalStartPixel + vhw, - settings.tmMarginTop, - sw - vhw, - height - settings.tmMarginBottom - 1); + intervalStartPixel + vhw, + settings.tmMarginTop, + sw - vhw, + height - settings.tmMarginBottom - 1); break; case CENTER_HOOK: g2d.setPaint(settings.selection.paint); g2d.fillRect( - intervalStartPixel, - settings.tmMarginTop, - vhw, - height - settings.tmMarginBottom - 1); + intervalStartPixel, + settings.tmMarginTop, + vhw, + height - settings.tmMarginBottom - 1); g2d.setPaint(settings.selection.mouseOverPaint); g2d.fillRect( - intervalStartPixel + vhw, - settings.tmMarginTop, - sw - vhw * 2, - height - settings.tmMarginBottom - 1); + intervalStartPixel + vhw, + settings.tmMarginTop, + sw - vhw * 2, + height - settings.tmMarginBottom - 1); g2d.setPaint(settings.selection.paint); g2d.fillRect( - intervalEndPixel - vhw, - settings.tmMarginTop, - vhw, - height - settings.tmMarginBottom - 1); + intervalEndPixel - vhw, + settings.tmMarginTop, + vhw, + height - settings.tmMarginBottom - 1); break; case RIGHT_HOOK: g2d.setPaint(settings.selection.paint); g2d.fillRect( - intervalStartPixel, - settings.tmMarginTop, - sw - vhw, - height - settings.tmMarginBottom - 1); + intervalStartPixel, + settings.tmMarginTop, + sw - vhw, + height - settings.tmMarginBottom - 1); g2d.setPaint(settings.selection.mouseOverPaint); g2d.fillRect( - intervalEndPixel - vhw, - settings.tmMarginTop, - vhw, - height - settings.tmMarginBottom - 1); + intervalEndPixel - vhw, + settings.tmMarginTop, + vhw, + height - settings.tmMarginBottom - 1); break; } } else { @@ -312,26 +248,29 @@ public void paintComponent(Graphics g) { private boolean inRange(int x, int a, int b) { return (a < x && x < b); } + // Variables declaration - do not modify//GEN-BEGIN:variables + // End of variables declaration//GEN-END:variables /** * Position of current x. + * * @param x current location * @param r width of slider * @return LOC_RESIZE_* */ private int inPosition(int x, int r, int sf, int st) { - boolean resizeFrom = inRange(x, (int) sf - 1, (int) sf + r + 1); - boolean resizeTo = inRange(x, (int) st - r - 1, (int) st + 1); + boolean resizeFrom = inRange(x, sf - 1, sf + r + 1); + boolean resizeTo = inRange(x, st - r - 1, st + 1); if (resizeFrom && resizeTo) { - if (inRange(x, (int) sf - 1, (int) (sf + st) / 2)) { + if (inRange(x, sf - 1, (sf + st) / 2)) { return LOC_RESIZE_FROM; - } else if (inRange(x, (int) (sf + st) / 2, (int) st + 1)) { + } else if (inRange(x, (sf + st) / 2, st + 1)) { return LOC_RESIZE_TO; } } if (resizeFrom) { return LOC_RESIZE_FROM; - } else if (inRange(x, (int) sf + r, (int) st - r)) { + } else if (inRange(x, sf + r, st - r)) { return LOC_RESIZE_CENTER; } else if (resizeTo) { return LOC_RESIZE_TO; @@ -341,11 +280,43 @@ private int inPosition(int x, int r, int sf, int st) { } + @Override public void mouseClicked(MouseEvent e) { latestMousePositionX = e.getX(); currentMousePositionX = latestMousePositionX; + + //On double click in a left/right handle, set the interval to the min/max + if (e.getClickCount() == 2) { + int x = e.getX(); + int r = settings.selection.visibleHookWidth + settings.selection.invisibleHookMargin; + + int width = getWidth(); + double min = model.getCustomMin(); + double max = model.getCustomMax(); + double intervalStart = model.getIntervalStart(); + double intervalEnd = model.getIntervalEnd(); + + int sf = Math.max(0, getPixelPosition(intervalStart, max - min, min, width)); + int st = Math.min(width, getPixelPosition(intervalEnd, max - min, min, width)); + + int position = inPosition(x, r, sf, st); + switch (position) { + case LOC_RESIZE_FROM: + controller.setInterval(min, intervalEnd); + break; + case LOC_RESIZE_CENTER: + controller.setInterval(min, max); + break; + case LOC_RESIZE_TO: + controller.setInterval(intervalStart, max); + break; + } + + repaint(); + } } + @Override public void mousePressed(MouseEvent e) { if (model == null) { return; @@ -356,7 +327,7 @@ public void mousePressed(MouseEvent e) { int r = settings.selection.visibleHookWidth + settings.selection.invisibleHookMargin; tooltip.stop(); - + int width = getWidth(); double min = model.getCustomMin(); double max = model.getCustomMax(); @@ -389,9 +360,10 @@ public void mousePressed(MouseEvent e) { // System.out.println("popup!"); // MetricPopup.setLocation(e.getX(), e.getY()); // MetricPopup.setVisible(true); -// } +// } } + @Override public void mouseEntered(MouseEvent e) { //throw new UnsupportedOperationException("Not supported yet."); if (currentState == TimelineState.IDLE) { @@ -401,6 +373,7 @@ public void mouseEntered(MouseEvent e) { mouseInside = true; } + @Override public void mouseExited(MouseEvent e) { //throw new UnsupportedOperationException("Not supported yet."); if (currentState == TimelineState.IDLE) { @@ -413,6 +386,7 @@ public void mouseExited(MouseEvent e) { repaint(); } + @Override public void mouseReleased(MouseEvent evt) { latestMousePositionX = evt.getX(); @@ -422,6 +396,7 @@ public void mouseReleased(MouseEvent evt) { this.getParent().repaint(); // so it will repaint upper and bottom panes } + @Override public void mouseMoved(MouseEvent evt) { if (model == null) { return; @@ -441,7 +416,6 @@ public void mouseMoved(MouseEvent evt) { int sf = Math.max(0, getPixelPosition(intervalStart, max - min, min, width)); int st = Math.min(width, getPixelPosition(intervalEnd, max - min, min, width)); - //Tooltip double pos = getReal(currentMousePositionX, max - min, min, width); tooltip.setModel(model); @@ -449,12 +423,10 @@ public void mouseMoved(MouseEvent evt) { // SELECTED ZONE BEGIN POSITION, IN PIXELS // int sf = (int) (model.getFromFloat() * (double) w); - // SELECTED ZONE END POSITION, IN PIXELS //int st = (int) (model.getToFloat() * (double) w); - HighlightedComponent old = highlightedComponent; - Cursor newCursor = null; + Cursor newCursor; int a = 0;//settings.selection.invisibleHookMargin; @@ -489,8 +461,8 @@ public void mouseMoved(MouseEvent evt) { } + @Override public void mouseDragged(MouseEvent evt) { - if (model == null) { return; } @@ -515,10 +487,8 @@ public void mouseDragged(MouseEvent evt) { // SELECTED ZONE BEGIN POSITION, IN PIXELS // sf = (model.getFromFloat() * w); - // SELECTED ZONE END POSITION, IN PIXELS //st = (model.getToFloat() * w); - if (currentState == TimelineState.IDLE) { int position = inPosition(x, r, sf, st); switch (position) { @@ -538,64 +508,66 @@ public void mouseDragged(MouseEvent evt) { break; } } - double delta = 0; + int deltaPx = 0; if (latestMousePositionX != null) { - delta = x - latestMousePositionX; + deltaPx = x - latestMousePositionX; } latestMousePositionX = x; - // minimal selection zone width (a security to not crush it!) - int s = settings.selection.minimalWidth; + double deltaTimestamp = getReal(deltaPx, max - min, 0, width); + double newFrom = intervalStart; + double newTo = intervalEnd; switch (currentState) { case RESIZE_FROM: - //problem: moving the left part will crush the security zone - if ((sf + delta) >= (st - s)) { - sf = st - s; - } else { - if (sf + delta <= 0) { - sf = 0; - } else { - sf += delta; - } - } + newFrom += deltaTimestamp; break; case RESIZE_TO: - if ((st + delta) <= (sf + s)) { - st = sf + s; - } else { - if ((st + delta >= width)) { - st = width; - } else { - st += delta; - } - } + newTo += deltaTimestamp; break; case MOVING: - // collision on the left.. - if ((sf + delta) < 0) { - st = (st - sf); - sf = 0; + if ((sf + deltaPx) < 0) { + newTo = (newTo - newFrom); + newFrom = min; // .. or the right - } else if ((st + delta) >= width) { - sf = width - (st - sf); - st = width; + } else if ((st + deltaPx) >= width) { + newFrom = max - (newTo - newFrom); + newTo = max; } else { - sf += delta; - st += delta; + newFrom += deltaTimestamp; + newTo += deltaTimestamp; } break; } - if (width != 0) { - double from = getReal(sf, max - min, min, width); - double to = getReal(st, max - min, min, width); - from = Math.max(from, model.getCustomMin()); - to = Math.min(to, model.getCustomMax()); - if (from < to) { - controller.setInterval(from, to); + // minimal selection zone width (a security to not crush it!) + int s = settings.selection.minimalWidth; + + int sfNew = Math.max(0, getPixelPosition(newFrom, max - min, min, width)); + int stNew = Math.min(width, getPixelPosition(newTo, max - min, min, width)); + if (width != 0 && stNew - sfNew >= s) { + newFrom = Math.max(newFrom, model.getCustomMin()); + newTo = Math.min(newTo, model.getCustomMax()); + if (newFrom < newTo) { + controller.setInterval(newFrom, newTo); } } } + + public enum TimelineState { + + IDLE, + MOVING, + RESIZE_FROM, + RESIZE_TO + } + + public enum HighlightedComponent { + + NONE, + LEFT_HOOK, + RIGHT_HOOK, + CENTER_HOOK + } } diff --git a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimelineTooltip.java b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimelineTooltip.java index 1e952a752e..8e04b1db2a 100644 --- a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimelineTooltip.java +++ b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimelineTooltip.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.timeline; import java.awt.Point; @@ -49,18 +50,17 @@ Development and Distribution License("CDDL") (collectively, the import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; import javax.swing.JComponent; -import org.gephi.dynamic.api.DynamicModel.TimeFormat; import org.gephi.timeline.api.TimelineChart; import org.gephi.timeline.api.TimelineModel; import org.gephi.ui.components.richtooltip.RichTooltip; -import org.joda.time.DateTime; -import org.joda.time.format.DateTimeFormatter; -import org.joda.time.format.ISODateTimeFormat; import org.openide.util.ImageUtilities; import org.openide.util.NbBundle; +import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; +import java.time.format.DateTimeFormatter; /** - * * @author Mathieu Bastian */ public class TimelineTooltip { @@ -73,7 +73,7 @@ public class TimelineTooltip { private String y; private Timer timer; private RichTooltip tooltip; - private Lock lock = new ReentrantLock(); + private final Lock lock = new ReentrantLock(); public void setModel(TimelineModel model) { this.model = model; @@ -121,40 +121,42 @@ public void stop() { } private void buildData(double currentPosition) { - if (model.getTimeFormat().equals(TimeFormat.DOUBLE)) { - int exponentMin = (int) Math.round(Math.log10(model.getCustomMin())); - - DecimalFormat decimalFormat = new DecimalFormat(); - decimalFormat.setRoundingMode(RoundingMode.HALF_EVEN); - - if (exponentMin > 0) { - min = String.valueOf(model.getCustomMin()); - max = String.valueOf(model.getCustomMax()); - position = String.valueOf(currentPosition); - } else { - decimalFormat.setMaximumFractionDigits(Math.abs(exponentMin) + 2); - min = decimalFormat.format(model.getCustomMin()); - max = decimalFormat.format(model.getCustomMax()); - position = decimalFormat.format(currentPosition); + switch (model.getTimeFormat()) { + case DOUBLE: + int exponentMin = (int) Math.round(Math.log10(model.getCustomMin())); + DecimalFormat decimalFormat = new DecimalFormat(); + decimalFormat.setRoundingMode(RoundingMode.HALF_EVEN); + if (exponentMin > 0) { + min = String.valueOf(model.getCustomMin()); + max = String.valueOf(model.getCustomMax()); + position = String.valueOf(currentPosition); + } else { + decimalFormat.setMaximumFractionDigits(Math.abs(exponentMin) + 2); + min = decimalFormat.format(model.getCustomMin()); + max = decimalFormat.format(model.getCustomMax()); + position = decimalFormat.format(currentPosition); + } + break; + case DATE: { + LocalDateTime minDate = Instant.ofEpochMilli((long) model.getCustomMin()).atZone(ZoneId.systemDefault()).toLocalDateTime(); + LocalDateTime maxDate = Instant.ofEpochMilli((long) model.getCustomMax()).atZone(ZoneId.systemDefault()).toLocalDateTime(); + LocalDateTime posDate = Instant.ofEpochMilli((long) currentPosition).atZone(ZoneId.systemDefault()).toLocalDateTime(); + DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE; + min = formatter.format(minDate); + max = formatter.format(maxDate); + position = formatter.format(posDate); + break; + } + default: { + LocalDateTime minDate = Instant.ofEpochMilli((long) model.getCustomMin()).atZone(ZoneId.systemDefault()).toLocalDateTime(); + LocalDateTime maxDate = Instant.ofEpochMilli((long) model.getCustomMax()).atZone(ZoneId.systemDefault()).toLocalDateTime(); + LocalDateTime posDate = Instant.ofEpochMilli((long) currentPosition).atZone(ZoneId.systemDefault()).toLocalDateTime(); + DateTimeFormatter formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME; + min = formatter.format(minDate); + max = formatter.format(maxDate); + position = formatter.format(posDate); + break; } - } else if (model.getTimeFormat().equals(TimeFormat.DATE)) { - DateTime minDate = new DateTime((long) model.getCustomMin()); - DateTime maxDate = new DateTime((long) model.getCustomMax()); - DateTime posDate = new DateTime((long) currentPosition); - - DateTimeFormatter formatter = ISODateTimeFormat.date(); - min = formatter.print(minDate); - max = formatter.print(maxDate); - position = formatter.print(posDate); - } else { - DateTime minDate = new DateTime((long) model.getCustomMin()); - DateTime maxDate = new DateTime((long) model.getCustomMax()); - DateTime posDate = new DateTime((long) currentPosition); - - DateTimeFormatter formatter = ISODateTimeFormat.dateTime(); - min = formatter.print(minDate); - max = formatter.print(maxDate); - position = formatter.print(posDate); } if (model.getChart() != null) { @@ -170,24 +172,27 @@ private RichTooltip buildTooltip() { RichTooltip richTooltip = new RichTooltip(); //Min - richTooltip.addDescriptionSection(NbBundle.getMessage(TimelineTooltip.class, "TimelineTooltip.min") + ": " + getMin()); + richTooltip + .addDescriptionSection(NbBundle.getMessage(TimelineTooltip.class, "TimelineTooltip.min") + ": " + getMin()); //Max - richTooltip.addDescriptionSection(NbBundle.getMessage(TimelineTooltip.class, "TimelineTooltip.max") + ": " + getMax()); + richTooltip + .addDescriptionSection(NbBundle.getMessage(TimelineTooltip.class, "TimelineTooltip.max") + ": " + getMax()); //Title - richTooltip.setTitle(NbBundle.getMessage(TimelineTooltip.class, "TimelineTooltip.position") + ": " + getPosition()); + richTooltip.setTitle(getPosition()); //Img - richTooltip.setMainImage(ImageUtilities.loadImage("org/gephi/desktop/timeline/resources/info.png")); + richTooltip.setMainImage(ImageUtilities.loadImage("DesktopTimeline/info.svg", false)); //Chart if (getY() != null) { - richTooltip.addFooterSection(model.getChart().getColumn().getTitle()); - richTooltip.addFooterSection(NbBundle.getMessage(TimelineTooltip.class, "TimelineTooltip.chart") + ": " + getY()); + richTooltip.addFooterSection(model.getChart().getColumn()); + richTooltip + .addFooterSection(NbBundle.getMessage(TimelineTooltip.class, "TimelineTooltip.chart") + ": " + getY()); //Img - richTooltip.setFooterImage(ImageUtilities.loadImage("org/gephi/desktop/timeline/resources/chart.png")); + richTooltip.setFooterImage(ImageUtilities.loadImage("DesktopTimeline/chart.svg", false)); } return richTooltip; diff --git a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimelineTopComponent.form b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimelineTopComponent.form index 5c4b53285f..8829d781ec 100644 --- a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimelineTopComponent.form +++ b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimelineTopComponent.form @@ -210,19 +210,6 @@ - - - - - - - - - - - - - diff --git a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimelineTopComponent.java b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimelineTopComponent.java index a964966452..af6bdf3d90 100644 --- a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimelineTopComponent.java +++ b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimelineTopComponent.java @@ -39,23 +39,33 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.timeline; import java.awt.CardLayout; -import java.awt.Image; +import java.awt.GridBagConstraints; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import javax.swing.*; +import java.util.Objects; +import javax.swing.Icon; +import javax.swing.JMenuItem; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JPopupMenu; +import javax.swing.JRadioButtonMenuItem; +import javax.swing.JSeparator; +import javax.swing.JToolBar; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; -import org.gephi.data.attributes.api.AttributeColumn; import org.gephi.timeline.api.TimelineController; import org.gephi.timeline.api.TimelineModel; import org.gephi.timeline.api.TimelineModelEvent; import org.gephi.timeline.api.TimelineModelListener; import org.gephi.ui.components.CloseButton; import org.gephi.ui.utils.UIUtils; -import org.netbeans.validation.api.ui.ValidationPanel; +import org.netbeans.validation.api.ui.swing.ValidationPanel; import org.openide.DialogDescriptor; import org.openide.DialogDisplayer; import org.openide.NotifyDescriptor; @@ -69,21 +79,26 @@ Development and Distribution License("CDDL") (collectively, the * * @author Julian Bilcke, Daniel Bernardes */ -//@ConvertAsProperties(dtd = "-//org.gephi.desktop.timeline//Timeline//EN", -//autostore = false) -//@TopComponent.Description(preferredID = "TimelineTopComponent", -//iconBase = "org/gephi/desktop/timeline/resources/icon.png", -//persistenceType = TopComponent.PERSISTENCE_ALWAYS) -//@TopComponent.Registration(mode = "timeline,ode", openAtStartup = false) -//@ActionID(category = "Window", id = "org.gephi.desktop.timeline.TimelineTopComponent") -//@ActionReference(path = "Menu/Window", position = 1200) -//@TopComponent.OpenActionRegistration(displayName = "#CTL_TimelineTopComponent", -//preferredID = "TimelineTopComponent") public final class TimelineTopComponent extends JPanel implements TimelineModelListener { private transient TimelineDrawer drawer; - private transient TimelineModel model; - private transient TimelineController controller; + private final transient TimelineController controller; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton closeButton; + private javax.swing.JButton columnsButton; + private javax.swing.JPanel containerPanel; + private javax.swing.JPanel controlPanel; + private javax.swing.JButton disableButon; + private javax.swing.JPanel disabledTimeline; + private javax.swing.JLabel disabledTimelineLabel; + private javax.swing.JPanel enablePanel; + private javax.swing.JButton enableTimelineButton; + private javax.swing.JPanel innerPanel; + private javax.swing.JToolBar innerToolbar; + private javax.swing.JToggleButton playButton; + private javax.swing.JButton settingsButton; + private javax.swing.JToolBar toolbarEnable; + // End of variables declaration//GEN-END:variables public TimelineTopComponent() { initComponents(); @@ -94,7 +109,6 @@ public TimelineTopComponent() { controlPanel.setBackground(UIManager.getColor("NbExplorerView.background")); innerPanel.setBackground(UIManager.getColor("NbTabControl.editorTabBackground")); } - this.drawer = (TimelineDrawer) timelinePanel; //TopComponent setName(NbBundle.getMessage(TimelineTopComponent.class, "CTL_TimelineTopComponent")); @@ -109,6 +123,7 @@ public TimelineTopComponent() { //Close button closeButton.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { controller.setEnabled(false); setTimeLineVisible(false); @@ -117,6 +132,7 @@ public void actionPerformed(ActionEvent e) { disableButon.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { controller.setEnabled(false); } @@ -125,145 +141,181 @@ public void actionPerformed(ActionEvent e) { //Enable button enableTimelineButton.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { + TimelineModel model = controller.getModel(); if (model != null) { controller.setEnabled(true); } } }); - columnsButton.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { - //Create popup - JPopupMenu menu = new JPopupMenu(); + TimelineModel model = controller.getModel(); + if (model != null) { - //Add columns - AttributeColumn selectedColumn = model.getChart() != null ? model.getChart().getColumn() : null; + //Create popup + JPopupMenu menu = new JPopupMenu(); - //Dynamic columns - AttributeColumn[] columns = controller.getDynamicGraphColumns(); + //Add columns + String selectedColumn = model.getChart() != null ? model.getChart().getColumn() : null; - for (final AttributeColumn col : columns) { - boolean selected = col == selectedColumn; - JRadioButtonMenuItem item = new JRadioButtonMenuItem(col.getTitle(), selected); - item.addActionListener(new ActionListener() { + //Dynamic columns + String[] columns = controller.getDynamicGraphColumns(); - public void actionPerformed(ActionEvent e) { - controller.selectColumn(col); - } - }); - menu.add(item); - } + for (final String col : columns) { + boolean selected = (Objects.equals(col, selectedColumn)); + JRadioButtonMenuItem item = new JRadioButtonMenuItem(col, selected); + item.addActionListener(new ActionListener() { - //No columns message - if (columns.length == 0) { - menu.add("" + NbBundle.getMessage(TimelineTopComponent.class, "TimelineTopComponent.charts.empty") + ""); - } + @Override + public void actionPerformed(ActionEvent e) { + controller.selectColumn(col); + } + }); + menu.add(item); + } - //Separator - menu.add(new JSeparator()); + //No columns message + if (columns.length == 0) { + menu.add("" + + NbBundle.getMessage(TimelineTopComponent.class, "TimelineTopComponent.charts.empty") + + ""); + } - //Disable - if (columns.length > 0) { - JMenuItem disableItem = new JMenuItem(NbBundle.getMessage(TimelineTopComponent.class, "TimelineTopComponent.charts.disable")); - disableItem.addActionListener(new ActionListener() { + //Separator + menu.add(new JSeparator()); - public void actionPerformed(ActionEvent e) { - controller.selectColumn(null); - } - }); + //Disable + if (columns.length > 0) { + JMenuItem disableItem = new JMenuItem( + NbBundle.getMessage(TimelineTopComponent.class, "TimelineTopComponent.charts.disable")); + disableItem.addActionListener(new ActionListener() { - menu.add(disableItem); - if(selectedColumn == null) { - disableItem.setEnabled(false); + @Override + public void actionPerformed(ActionEvent e) { + controller.selectColumn(null); + } + }); + + menu.add(disableItem); + if (selectedColumn == null) { + disableItem.setEnabled(false); + } } - } - menu.show(columnsButton, 0, -menu.getPreferredSize().height); + menu.show(columnsButton, 0, -menu.getPreferredSize().height); + } } }); settingsButton.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { - //Create popup - JPopupMenu menu = new JPopupMenu(); - - //Custom bounds - Image customBoundsIcon = ImageUtilities.loadImage("org/gephi/desktop/timeline/resources/custom_bounds.png", false); - JMenuItem customBoundsItem = new JMenuItem(NbBundle.getMessage(TimelineTopComponent.class, "TimelineTopComponent.settings.setCustomBounds"), - ImageUtilities.image2Icon(customBoundsIcon)); - customBoundsItem.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - CustomBoundsDialog d = new CustomBoundsDialog(); - d.setup(model); - ValidationPanel validationPanel = CustomBoundsDialog.createValidationPanel(d); - String title = NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.title"); - final DialogDescriptor descriptor = new DialogDescriptor(validationPanel, title); - validationPanel.addChangeListener(new ChangeListener() { - - public void stateChanged(ChangeEvent e) { - descriptor.setValid(!((ValidationPanel) e.getSource()).isProblem()); + TimelineModel model = controller.getModel(); + if (model != null) { + //Create popup + JPopupMenu menu = new JPopupMenu(); + + //Custom bounds + Icon customBoundsIcon = + ImageUtilities.loadImageIcon("DesktopTimeline/custom_bounds.svg", false); + JMenuItem customBoundsItem = new JMenuItem( + NbBundle.getMessage(TimelineTopComponent.class, + "TimelineTopComponent.settings.setCustomBounds"), + customBoundsIcon); + customBoundsItem.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + CustomBoundsDialog d = new CustomBoundsDialog(); + d.setup(model); + ValidationPanel validationPanel = CustomBoundsDialog.createValidationPanel(d); + String title = NbBundle.getMessage(CustomBoundsDialog.class, "CustomBoundsDialog.title"); + final DialogDescriptor descriptor = new DialogDescriptor(validationPanel, title); + validationPanel.addChangeListener(new ChangeListener() { + + @Override + public void stateChanged(ChangeEvent e) { + descriptor.setValid(!((ValidationPanel) e.getSource()).isFatalProblem()); + } + }); + Object result = DialogDisplayer.getDefault().notify(descriptor); + if (result == NotifyDescriptor.OK_OPTION) { + d.unsetup(); } - }); - Object result = DialogDisplayer.getDefault().notify(descriptor); - if (result == NotifyDescriptor.OK_OPTION) { - d.unsetup(); } - } - }); - menu.add(customBoundsItem); - - //Animation - Image animationIcon = ImageUtilities.loadImage("org/gephi/desktop/timeline/resources/animation_settings.png", false); - JMenuItem animationItem = new JMenuItem(NbBundle.getMessage(TimelineTopComponent.class, "TimelineTopComponent.settings.setPlaySettings"), - ImageUtilities.image2Icon(animationIcon)); - animationItem.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - PlaySettingsDialog d = new PlaySettingsDialog(); - d.setup(model); - String title = NbBundle.getMessage(CustomBoundsDialog.class, "PlaySettingsDialog.title"); - final DialogDescriptor descriptor = new DialogDescriptor(d, title); - Object result = DialogDisplayer.getDefault().notify(descriptor); - if (result == NotifyDescriptor.OK_OPTION) { - d.unsetup(); + }); + menu.add(customBoundsItem); + + //Animation + Icon animationIcon = + ImageUtilities.loadImageIcon("DesktopTimeline/animation_settings.svg", false); + JMenuItem animationItem = new JMenuItem( + NbBundle.getMessage(TimelineTopComponent.class, + "TimelineTopComponent.settings.setPlaySettings"), + animationIcon); + animationItem.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + PlaySettingsDialog d = new PlaySettingsDialog(); + d.setup(model); + String title = NbBundle.getMessage(CustomBoundsDialog.class, "PlaySettingsDialog.title"); + final DialogDescriptor descriptor = new DialogDescriptor(d, title); + Object result = DialogDisplayer.getDefault().notify(descriptor); + if (result == NotifyDescriptor.OK_OPTION) { + d.unsetup(); + } } - } - }); - menu.add(animationItem); - - //Date format - Image dateFormatIcon = ImageUtilities.loadImage("org/gephi/desktop/timeline/resources/time_format_small.png", false); - JMenuItem dateFormatItem = new JMenuItem(NbBundle.getMessage(TimelineTopComponent.class, "TimelineTopComponent.settings.setTimeFormat"), - ImageUtilities.image2Icon(dateFormatIcon)); - dateFormatItem.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - TimeFormatDialog d = new TimeFormatDialog(); - d.setup(model); - String title = NbBundle.getMessage(TimeFormatDialog.class, "TimeFormatDialog.title"); - final DialogDescriptor descriptor = new DialogDescriptor(d, title); - Object result = DialogDisplayer.getDefault().notify(descriptor); - if (result == NotifyDescriptor.OK_OPTION) { - d.unsetup(); + }); + menu.add(animationItem); + + //Date format + Icon dateFormatIcon = + ImageUtilities.loadImageIcon("DesktopTimeline/time_format_small.svg", false); + JMenuItem dateFormatItem = new JMenuItem( + NbBundle.getMessage(TimelineTopComponent.class, "TimelineTopComponent.settings.setTimeFormat"), + dateFormatIcon); + dateFormatItem.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + TimeFormatDialog d = new TimeFormatDialog(); + d.setup(model); + String title = NbBundle.getMessage(TimeFormatDialog.class, "TimeFormatDialog.title"); + final DialogDescriptor descriptor = new DialogDescriptor(d, title); + Object result = DialogDisplayer.getDefault().notify(descriptor); + if (result == NotifyDescriptor.OK_OPTION) { + d.unsetup(); + } } - } - }); - menu.add(dateFormatItem); + }); + menu.add(dateFormatItem); - - menu.show(settingsButton, 0, -menu.getPreferredSize().height); + menu.show(settingsButton, 0, -menu.getPreferredSize().height); + } } }); playButton.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { + TimelineModel model = controller.getModel(); if (model != null) { + //Bounds not set? Cannot play + if (model.getMin() == model.getIntervalStart() + && model.getMax() == model.getIntervalEnd()) { + String helpMessage = NbBundle + .getMessage(TimelineTopComponent.class, "TimelineTopComponent.playButton.intevalNotSet"); + JOptionPane.showMessageDialog(null, helpMessage, helpMessage, JOptionPane.WARNING_MESSAGE); + } + if (model.isPlaying() && !playButton.isSelected()) { controller.stopPlay(); } else if (!model.isPlaying() && playButton.isSelected()) { @@ -275,39 +327,60 @@ public void actionPerformed(ActionEvent e) { } private void setup(TimelineModel model) { - this.model = model; + if (drawer != null) { + innerPanel.remove(drawer); + drawer = null; + } if (model != null) { SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { - drawer.setModel(TimelineTopComponent.this.model); - enableTimeline(TimelineTopComponent.this.model); + // Add Drawer + drawer = new TimelineDrawer(controller, model); + GridBagConstraints gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 2; + gridBagConstraints.gridy = 0; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.weighty = 1.0; + gridBagConstraints.insets = new java.awt.Insets(1, 0, 1, 0); + innerPanel.add(drawer, gridBagConstraints); + + enableTimeline(model); } }); } else { SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { - drawer.setModel(TimelineTopComponent.this.model); + if (drawer != null) { + innerPanel.remove(drawer); + } + drawer = null; enableTimeline(null); } }); } } + @Override public void timelineModelChanged(TimelineModelEvent event) { if (event.getEventType().equals(TimelineModelEvent.EventType.MODEL)) { setup(event.getSource()); } else if (event.getEventType().equals(TimelineModelEvent.EventType.ENABLED)) { - enableTimeline(event.getSource()); + SwingUtilities.invokeLater(() -> enableTimeline(event.getSource())); } else if (event.getEventType().equals(TimelineModelEvent.EventType.VALID_BOUNDS)) { - enableTimeline(event.getSource()); + SwingUtilities.invokeLater(() -> enableTimeline(event.getSource())); } else if (event.getEventType().equals(TimelineModelEvent.EventType.PLAY_START)) { setPlaying(true); } else if (event.getEventType().equals(TimelineModelEvent.EventType.PLAY_STOP)) { setPlaying(false); } - drawer.consumeEvent(event); + if (drawer != null) { + drawer.consumeEvent(event); + } } private void enableTimeline(TimelineModel model) { @@ -331,6 +404,7 @@ private void enableTimeline(TimelineModel model) { private void setPlaying(final boolean playing) { SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { playButton.setSelected(playing); } @@ -339,7 +413,7 @@ public void run() { public void setTimeLineVisible(final boolean visible) { SwingUtilities.invokeLater(new Runnable() { - + @Override public void run() { if (visible != TimelineTopComponent.this.isVisible()) { TimelineTopComponent.this.setVisible(visible); @@ -370,7 +444,6 @@ private void initComponents() { disableButon = new javax.swing.JButton(); columnsButton = new javax.swing.JButton(); settingsButton = new javax.swing.JButton(); - timelinePanel = new org.gephi.desktop.timeline.TimelineDrawer(); closeButton = new CloseButton(); setMaximumSize(new java.awt.Dimension(32767, 68)); @@ -386,9 +459,11 @@ private void initComponents() { toolbarEnable.setRollover(true); toolbarEnable.setOpaque(false); - enableTimelineButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/timeline/resources/activate.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(enableTimelineButton, NbBundle.getMessage (TimelineTopComponent.class, "TimelineTopComponent.enableTimelineButton.text")); // NOI18N - enableTimelineButton.setToolTipText(org.openide.util.NbBundle.getMessage(TimelineTopComponent.class, "TimelineTopComponent.enableTimelineButton.toolTipText")); // NOI18N + enableTimelineButton.setIcon(ImageUtilities.loadImageIcon("DesktopTimeline/activate.svg", false)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(enableTimelineButton, NbBundle + .getMessage(TimelineTopComponent.class, "TimelineTopComponent.enableTimelineButton.text")); // NOI18N + enableTimelineButton.setToolTipText(org.openide.util.NbBundle + .getMessage(TimelineTopComponent.class, "TimelineTopComponent.enableTimelineButton.toolTipText")); // NOI18N enableTimelineButton.setFocusable(false); enableTimelineButton.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT); enableTimelineButton.setMargin(new java.awt.Insets(4, 6, 4, 6)); @@ -405,8 +480,9 @@ private void initComponents() { disabledTimeline.setLayout(new java.awt.GridBagLayout()); - disabledTimelineLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/timeline/resources/activate.png"))); // NOI18N - org.openide.awt.Mnemonics.setLocalizedText(disabledTimelineLabel, NbBundle.getMessage (TimelineTopComponent.class, "TimelineTopComponent.disabledTimelineLabel.text")); // NOI18N + disabledTimelineLabel.setIcon(ImageUtilities.loadImageIcon("DesktopTimeline/activate.svg", false)); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(disabledTimelineLabel, NbBundle + .getMessage(TimelineTopComponent.class, "TimelineTopComponent.disabledTimelineLabel.text")); // NOI18N disabledTimelineLabel.setEnabled(false); disabledTimeline.add(disabledTimelineLabel, new java.awt.GridBagConstraints()); @@ -416,13 +492,14 @@ private void initComponents() { controlPanel.setLayout(new java.awt.GridBagLayout()); - playButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/timeline/resources/disabled.png"))); // NOI18N - playButton.setToolTipText(org.openide.util.NbBundle.getMessage(TimelineTopComponent.class, "TimelineTopComponent.playButton.toolTipText")); // NOI18N - playButton.setDisabledIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/timeline/resources/disabled.png"))); // NOI18N + playButton.setIcon(ImageUtilities.loadImageIcon("DesktopTimeline/disabled.svg", false)); // NOI18N + playButton.setToolTipText(org.openide.util.NbBundle + .getMessage(TimelineTopComponent.class, "TimelineTopComponent.playButton.toolTipText")); // NOI18N + playButton.setDisabledIcon(ImageUtilities.loadImageIcon("DesktopTimeline/disabled.svg", false)); // NOI18N playButton.setFocusable(false); playButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); playButton.setRequestFocusEnabled(false); - playButton.setSelectedIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/timeline/resources/enabled.png"))); // NOI18N + playButton.setSelectedIcon(ImageUtilities.loadImageIcon("DesktopTimeline/enabled.svg", false)); // NOI18N playButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; @@ -435,21 +512,22 @@ private void initComponents() { innerToolbar.setRollover(true); innerToolbar.setOpaque(false); - disableButon.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/timeline/resources/cross.png"))); // NOI18N - disableButon.setToolTipText(org.openide.util.NbBundle.getMessage(TimelineTopComponent.class, "TimelineTopComponent.disableButon.toolTipText")); // NOI18N + disableButon.setIcon(ImageUtilities.loadImageIcon("DesktopTimeline/cross.svg", false)); // NOI18N + disableButon.setToolTipText(org.openide.util.NbBundle + .getMessage(TimelineTopComponent.class, "TimelineTopComponent.disableButon.toolTipText")); // NOI18N disableButon.setFocusable(false); disableButon.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); disableButon.setIconTextGap(0); disableButon.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); innerToolbar.add(disableButon); - columnsButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/timeline/resources/chart.png"))); // NOI18N + columnsButton.setIcon(ImageUtilities.loadImageIcon("DesktopTimeline/chart.svg", false)); // NOI18N columnsButton.setFocusable(false); columnsButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); columnsButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); innerToolbar.add(columnsButton); - settingsButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/timeline/resources/settings.png"))); // NOI18N + settingsButton.setIcon(ImageUtilities.loadImageIcon("DesktopTimeline/settings.svg", false)); // NOI18N settingsButton.setFocusable(false); settingsButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); settingsButton.setIconTextGap(0); @@ -470,14 +548,6 @@ private void initComponents() { gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; innerPanel.add(controlPanel, gridBagConstraints); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 2; - gridBagConstraints.gridy = 0; - gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.weighty = 1.0; - gridBagConstraints.insets = new java.awt.Insets(1, 0, 1, 0); - innerPanel.add(timelinePanel, gridBagConstraints); containerPanel.add(innerPanel, "bottom"); @@ -489,7 +559,8 @@ private void initComponents() { gridBagConstraints.weighty = 1.0; add(containerPanel, gridBagConstraints); - closeButton.setToolTipText(org.openide.util.NbBundle.getMessage(TimelineTopComponent.class, "TimelineTopComponent.closeButton.toolTipText")); // NOI18N + closeButton.setToolTipText(org.openide.util.NbBundle + .getMessage(TimelineTopComponent.class, "TimelineTopComponent.closeButton.toolTipText")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; @@ -497,33 +568,4 @@ private void initComponents() { gridBagConstraints.insets = new java.awt.Insets(4, 4, 4, 4); add(closeButton, gridBagConstraints); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton closeButton; - private javax.swing.JButton columnsButton; - private javax.swing.JPanel containerPanel; - private javax.swing.JPanel controlPanel; - private javax.swing.JButton disableButon; - private javax.swing.JPanel disabledTimeline; - private javax.swing.JLabel disabledTimelineLabel; - private javax.swing.JPanel enablePanel; - private javax.swing.JButton enableTimelineButton; - private javax.swing.JPanel innerPanel; - private javax.swing.JToolBar innerToolbar; - private javax.swing.JToggleButton playButton; - private javax.swing.JButton settingsButton; - private transient javax.swing.JPanel timelinePanel; - private javax.swing.JToolBar toolbarEnable; - // End of variables declaration//GEN-END:variables - - void writeProperties(java.util.Properties p) { - // better to version settings since initial version as advocated at - // http://wiki.apidesign.org/wiki/PropertyFiles - p.setProperty("version", "1.0"); - // TODO store your settings - } - - void readProperties(java.util.Properties p) { - String version = p.getProperty("version"); - // TODO read your settings according to their version - } } diff --git a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimelineWindowAction.java b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimelineWindowAction.java index e739c62601..98d2276967 100644 --- a/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimelineWindowAction.java +++ b/modules/DesktopTimeline/src/main/java/org/gephi/desktop/timeline/TimelineWindowAction.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.timeline; import java.awt.event.ActionEvent; @@ -46,7 +47,8 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.Lookup; public final class TimelineWindowAction implements ActionListener { - + + @Override public void actionPerformed(ActionEvent e) { BottomComponentImpl bottomComponent = Lookup.getDefault().lookup(BottomComponentImpl.class); if (bottomComponent != null) { diff --git a/modules/DesktopTimeline/src/main/nbm/manifest.mf b/modules/DesktopTimeline/src/main/nbm/manifest.mf index e7b9248900..b26547ba37 100644 --- a/modules/DesktopTimeline/src/main/nbm/manifest.mf +++ b/modules/DesktopTimeline/src/main/nbm/manifest.mf @@ -2,4 +2,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Layer: org/gephi/desktop/timeline/layer.xml OpenIDE-Module-Localizing-Bundle: org/gephi/desktop/timeline/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi UI +OpenIDE-Module-Name: Desktop Timeline \ No newline at end of file diff --git a/modules/DesktopTimeline/src/main/nbm/module.xml b/modules/DesktopTimeline/src/main/nbm/module.xml deleted file mode 100644 index 75cc8a1f69..0000000000 --- a/modules/DesktopTimeline/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle.properties b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle.properties index 86b48164ef..d2c5330e53 100644 --- a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle.properties +++ b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle.properties @@ -1,14 +1,13 @@ +OpenIDE-Module-Short-Description=Timeline UI CTL_TimelineAction=Timeline CTL_TimelineTopComponent=Timeline CTL_TimelineWindowAction=Timeline !HINT_TimelineTopComponent= -OpenIDE-Module-Display-Category=Gephi UI -OpenIDE-Module-Short-Description=Timeline UI -OpenIDE-Module-Name=Desktop Timeline TimelineTopComponent.enableButton.text= TimelineTopComponent.closeButton.toolTipText=Close the Timeline TimelineTopComponent.enableTimelineButton.text=Enable Timeline TimelineTopComponent.playButton.toolTipText=Play +TimelineTopComponent.playButton.intevalNotSet=Cannot animate timeline without an animation interval. Set one before clicking play button CustomBoundsDialog.labelStartDate.text=Start: CustomBoundsDialog.labelIntervalDate.text=Interval CustomBoundsDialog.labelMinDate.text=Minimum: @@ -24,6 +23,8 @@ CustomBoundsDialog.FormatValidator.double = Not a valid double number CustomBoundsDialog.TimeValidator = Lower bound can't be after upper bound CustomBoundsDialog.TimeValidator.min = Value needs to be at least the minimum CustomBoundsDialog.TimeValidator.max = Value can't be more than the maximum +CustomBoundsDialog.IntervalBoundsValidator.lower = Interval start can't be before the lower bound +CustomBoundsDialog.IntervalBoundsValidator.upper = Interval end can't be after the upper bound TimelineTopComponent.charts.disable = Disable TimelineTopComponent.settings.setCustomBounds = Set custom bounds... TimelineTopComponent.charts.empty = No charts... @@ -53,3 +54,4 @@ TimeFormatDialog.headerTitle.title=Time format settings TimeFormatDialog.headerTitle.description=Set up the time format TimeFormatDialog.numericRadio.text=Numeric TimeFormatDialog.dateRadio.text=Date +TimeFormatDialog.dateTimeRadio.text=Datetime diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_ar.properties b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_ca.properties b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_ca.properties new file mode 100644 index 0000000000..6a7fec1f29 --- /dev/null +++ b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_ca.properties @@ -0,0 +1,55 @@ +OpenIDE-Module-Short-Description=Interfνcie de la lνnia de temps +CTL_TimelineAction=Lνnia de temps +CTL_TimelineTopComponent=Lνnia de temps +CTL_TimelineWindowAction=Lνnia de temps +!HINT_TimelineTopComponent= +TimelineTopComponent.enableButton.text= +TimelineTopComponent.closeButton.toolTipText=Tanca la lνnia de Temps +TimelineTopComponent.enableTimelineButton.text=Activa la lνnia de temps +TimelineTopComponent.playButton.toolTipText=Play +TimelineTopComponent.playButton.intevalNotSet=Cannot animate timeline without an animation interval. Set one before clicking play button +CustomBoundsDialog.labelStartDate.text=Start: +CustomBoundsDialog.labelIntervalDate.text=Interval +CustomBoundsDialog.labelMinDate.text=Mνnim: +CustomBoundsDialog.labelMaxDate.text=Mΰxim: +CustomBoundsDialog.resetDefaultsDate.text=Reset defaults +CustomBoundsDialog.labelEndDate.text=End: +CustomBoundsDialog.labelBounds.text=Bounds +CustomBoundsDialog.titleHeader.title=Custom time bounds & interval +CustomBoundsDialog.titleHeader.description=Customize the timeline bounds or interval. The bounds are the minimum and maximum values. The interval is the currently selected time window. +CustomBoundsDialog.title=Custom time bounds & interval +CustomBoundsDialog.FormatValidator.date=Date must be formatted {0} +CustomBoundsDialog.FormatValidator.double=Not a valid double number +CustomBoundsDialog.TimeValidator=Lower bound can't be after upper bound +CustomBoundsDialog.TimeValidator.min=El valor ha de ser igual o superior al mνnim +CustomBoundsDialog.TimeValidator.max=El valor no pot ser superior al mΰxim +TimelineTopComponent.charts.disable=Disable +TimelineTopComponent.settings.setCustomBounds=Set custom bounds... +TimelineTopComponent.charts.empty=Sense diagrames... +TimelineTopComponent.disabledTimelineLabel.text=Timeline disabled. The graph is not dynamic. +PlaySettingsDialog.headerTitle.title=Animation settings +PlaySettingsDialog.headerTitle.description=Set up animation speed and step +PlaySettingsDialog.labelDelay.text=Delay: +PlaySettingsDialog.labelStepSize.text=Step size: +PlaySettingsDialog.labelPerc.text=% +PlaySettingsDialog.labelMs.text=ms +PlaySettingsDialog.labelMode.text=Mode +PlaySettingsDialog.oneBoundRadio.text=One bound +PlaySettingsDialog.twoBoundsRadio.text=Two bounds +PlaySettingsDialog.labelSpeed.text=Velocitat +PlaySettingsDialog.backwardCheckbox.text=Backward +PlaySettingsDialog.title=Animation settings +TimelineTopComponent.settings.setPlaySettings=Set play settings... +TimelineTooltip.min=Inicia +TimelineTooltip.max=Finalitza +TimelineTooltip.position=La posiciσ actual ιs: +TimelineTooltip.chart=El valor actual ιs: +TimelineTopComponent.settings.setTimeFormat=Estableix el format de temps +TimeFormatDialog.title=Format de temps +TimelineTopComponent.enableTimelineButton.toolTipText=Enable timeline for time-based filtering +TimelineTopComponent.disableButon.toolTipText=Deshabilita la lνnia de temps +TimeFormatDialog.headerTitle.title=Opcions del format de temps +TimeFormatDialog.headerTitle.description=Set up the time format +TimeFormatDialog.numericRadio.text=Nombre +TimeFormatDialog.dateRadio.text=Data +TimeFormatDialog.dateTimeRadio.text=Dia i hora diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_cs.properties b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_cs.properties index 3abb9a0d48..6252ffcb33 100644 --- a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_cs.properties +++ b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_cs.properties @@ -1,109 +1,55 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-17 06\:46+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -CTL_TimelineAction=\u010casov\u00e1 osa - -CTL_TimelineTopComponent=\u010casov\u00e1 osa - -CTL_TimelineWindowAction=\u010casov\u00e1 osa - -OpenIDE-Module-Short-Description=Rozhran\u00ed \u010dasov\u00e9 osy - -TimelineTopComponent.closeButton.toolTipText=Zav\u0159\u00edt \u010dasovou osu - +OpenIDE-Module-Short-Description=Rozhranν \u010dasovι osy +CTL_TimelineAction=\u010casovα osa +CTL_TimelineTopComponent=\u010casovα osa +CTL_TimelineWindowAction=\u010casovα osa +!HINT_TimelineTopComponent= +TimelineTopComponent.enableButton.text= +TimelineTopComponent.closeButton.toolTipText=Zav\u0159νt \u010dasovou osu TimelineTopComponent.enableTimelineButton.text=Povolit \u010dasovou osu - -TimelineTopComponent.playButton.toolTipText=P\u0159ehr\u00e1t - -CustomBoundsDialog.labelStartDate.text=Za\u010d\u00e1tek\: - +TimelineTopComponent.playButton.toolTipText=P\u0159ehrαt +# TimelineTopComponent.playButton.intevalNotSet=Cannot animate timeline without an animation interval. Set one before clicking play button +CustomBoundsDialog.labelStartDate.text=Za\u010dαtek: CustomBoundsDialog.labelIntervalDate.text=Interval - -CustomBoundsDialog.labelMinDate.text=Minimum\: - -CustomBoundsDialog.labelMaxDate.text=Maximum\: - -CustomBoundsDialog.resetDefaultsDate.text=Resetovat v\u00fdchoz\u00ed - -CustomBoundsDialog.labelEndDate.text=Konec\: - +CustomBoundsDialog.labelMinDate.text=Minimum: +CustomBoundsDialog.labelMaxDate.text=Maximum: +CustomBoundsDialog.resetDefaultsDate.text=Resetovat vύchozν +CustomBoundsDialog.labelEndDate.text=Konec: CustomBoundsDialog.labelBounds.text=Hranice - -CustomBoundsDialog.titleHeader.title=Vlastn\u00ed \u010dasov\u00e9 hranice a interval - -CustomBoundsDialog.titleHeader.description=P\u0159izp\u016fsobte si \u010dasov\u00e9 hranice nebo interval. Hranice jsou minim\u00e1ln\u00ed a maxim\u00e1ln\u00ed hodnoty. Interval je aktu\u00e1ln\u011b zvolen\u00e9 \u010dasov\u00e9 okno. - -CustomBoundsDialog.title=Vlastn\u00ed \u010dasov\u00e9 hranice a interval - -CustomBoundsDialog.FormatValidator.date=Datum mus\u00ed m\u00edt form\u00e1t {0} - -CustomBoundsDialog.FormatValidator.double=Nen\u00ed platn\u00e9 \u010d\u00edslo s dvojitou p\u0159esnost\u00ed - -CustomBoundsDialog.TimeValidator=Doln\u00ed hranice nem\u016f\u017ee b\u00fdt po horn\u00ed hranici - -CustomBoundsDialog.TimeValidator.min=Hodnota mus\u00ed b\u00fdt alespo\u0148 minimum - -CustomBoundsDialog.TimeValidator.max=Hodnota nem\u016f\u017ee b\u00fdt v\u00edce ne\u017e maximum - -TimelineTopComponent.charts.disable=Zak\u00e1zat - -TimelineTopComponent.settings.setCustomBounds=Nastavit vlastn\u00ed hranice... - -TimelineTopComponent.charts.empty=\u017d\u00e1dn\u00e9 tabulky... - -TimelineTopComponent.disabledTimelineLabel.text=\u010casov\u00e1 osa zak\u00e1z\u00e1na. Graf nen\u00ed dynamick\u00fd. - -PlaySettingsDialog.headerTitle.title=Nastaven\u00ed animace - +CustomBoundsDialog.titleHeader.title=Vlastnν \u010dasovι hranice a interval +CustomBoundsDialog.titleHeader.description=P\u0159izp\u016fsobte si \u010dasovι hranice nebo interval. Hranice jsou minimαlnν a maximαlnν hodnoty. Interval je aktuαln\u011b zvolenι \u010dasovι okno. +CustomBoundsDialog.title=Vlastnν \u010dasovι hranice a interval +CustomBoundsDialog.FormatValidator.date=Datum musν mνt formαt {0} +CustomBoundsDialog.FormatValidator.double=Nenν platnι \u010dνslo s dvojitou p\u0159esnostν +CustomBoundsDialog.TimeValidator=Dolnν hranice nem\u016f\u017ee bύt po hornν hranici +CustomBoundsDialog.TimeValidator.min=Hodnota musν bύt alespo\u0148 minimum +CustomBoundsDialog.TimeValidator.max=Hodnota nem\u016f\u017ee bύt vνce ne\u017e maximum +TimelineTopComponent.charts.disable=Zakαzat +TimelineTopComponent.settings.setCustomBounds=Nastavit vlastnν hranice... +TimelineTopComponent.charts.empty=\u017dαdnι tabulky... +TimelineTopComponent.disabledTimelineLabel.text=\u010casovα osa zakαzαna. Graf nenν dynamickύ. +PlaySettingsDialog.headerTitle.title=Nastavenν animace PlaySettingsDialog.headerTitle.description=Nastavit rychlost animace a kroku - -PlaySettingsDialog.labelDelay.text=Zpo\u017ed\u011bn\u00ed\: - -PlaySettingsDialog.labelStepSize.text=Velikost kroku\: - +PlaySettingsDialog.labelDelay.text=Zpo\u017ed\u011bnν: +PlaySettingsDialog.labelStepSize.text=Velikost kroku: PlaySettingsDialog.labelPerc.text=% - PlaySettingsDialog.labelMs.text=ms - PlaySettingsDialog.labelMode.text=Re\u017eim - PlaySettingsDialog.oneBoundRadio.text=Jedna hranice - PlaySettingsDialog.twoBoundsRadio.text=Dv\u011b hranice - PlaySettingsDialog.labelSpeed.text=Rychlost - -PlaySettingsDialog.backwardCheckbox.text=Pozp\u00e1tku - -PlaySettingsDialog.title=Nastaven\u00ed animace - -TimelineTopComponent.settings.setPlaySettings=Nastavit volby p\u0159ehr\u00e1v\u00e1n\u00ed... - -TimelineTooltip.min=Za\u010d\u00e1tek - +PlaySettingsDialog.backwardCheckbox.text=Pozpαtku +PlaySettingsDialog.title=Nastavenν animace +TimelineTopComponent.settings.setPlaySettings=Nastavit volby p\u0159ehrαvαnν... +TimelineTooltip.min=Za\u010dαtek TimelineTooltip.max=Konec - -TimelineTooltip.position=Sou\u010dasn\u00e1 pozice je - -TimelineTooltip.chart=Sou\u010dasn\u00e1 hodnota je - -TimelineTopComponent.settings.setTimeFormat=Nastavit form\u00e1t \u010dasu... - -TimeFormatDialog.title=Form\u00e1t \u010dasu - -TimelineTopComponent.enableTimelineButton.toolTipText=Povolit \u010dasovou osu pro filtrov\u00e1n\u00ed na z\u00e1klad\u011b \u010dasu - -TimelineTopComponent.disableButon.toolTipText=Zak\u00e1zat \u010dasovou osu - -TimeFormatDialog.headerTitle.title=Nastaven\u00ed form\u00e1tu \u010dasu - -TimeFormatDialog.headerTitle.description=Nastavit form\u00e1t \u010dasu - -TimeFormatDialog.numericRadio.text=\u010c\u00edseln\u00fd - +TimelineTooltip.position=Sou\u010dasnα pozice je +TimelineTooltip.chart=Sou\u010dasnα hodnota je +TimelineTopComponent.settings.setTimeFormat=Nastavit formαt \u010dasu... +TimeFormatDialog.title=Formαt \u010dasu +TimelineTopComponent.enableTimelineButton.toolTipText=Povolit \u010dasovou osu pro filtrovαnν na zαklad\u011b \u010dasu +TimelineTopComponent.disableButon.toolTipText=Zakαzat \u010dasovou osu +TimeFormatDialog.headerTitle.title=Nastavenν formαtu \u010dasu +TimeFormatDialog.headerTitle.description=Nastavit formαt \u010dasu +TimeFormatDialog.numericRadio.text=\u010cνselnύ TimeFormatDialog.dateRadio.text=Datum +TimeFormatDialog.dateTimeRadio.text=Datum a \u010das diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_de.properties b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_de.properties new file mode 100644 index 0000000000..df195f3c54 --- /dev/null +++ b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_de.properties @@ -0,0 +1,55 @@ +OpenIDE-Module-Short-Description=Zeitleisten UI +CTL_TimelineAction=Zeitleiste +CTL_TimelineTopComponent=Zeitleiste +CTL_TimelineWindowAction=Zeitleiste +!HINT_TimelineTopComponent= +TimelineTopComponent.enableButton.text= +TimelineTopComponent.closeButton.toolTipText=Zeitleiste schlieίen +TimelineTopComponent.enableTimelineButton.text=Zeitleiste aktivieren +TimelineTopComponent.playButton.toolTipText=Abspielen +# TimelineTopComponent.playButton.intevalNotSet=Cannot animate timeline without an animation interval. Set one before clicking play button +CustomBoundsDialog.labelStartDate.text=Start: +CustomBoundsDialog.labelIntervalDate.text=Intervall: +CustomBoundsDialog.labelMinDate.text=Minimum: +CustomBoundsDialog.labelMaxDate.text=Maximum: +CustomBoundsDialog.resetDefaultsDate.text=Standard wiederherstellen +CustomBoundsDialog.labelEndDate.text=Ende: +CustomBoundsDialog.labelBounds.text=Grenzen +CustomBoundsDialog.titleHeader.title=Benutzerdefinierte Z +CustomBoundsDialog.titleHeader.description=Zeitleisten-Grenzen oder Interval benutzerdefiniert festlegen. Die Grenzen sind Minimal- und Maximalwerte. Das Interval ist das aktuell ausgewδhlte Zeitfenster. +CustomBoundsDialog.title=Benutzerdefinierte Z +CustomBoundsDialog.FormatValidator.date=Datum muss wie folgt formatiert sein: {0} +CustomBoundsDialog.FormatValidator.double=Keine gόltige Zahl vom Typ double +CustomBoundsDialog.TimeValidator=Untere Grenze kann nicht grφίer sein als obere Grenze +CustomBoundsDialog.TimeValidator.min=Wert muss mindestens dem Minimalwert sein +CustomBoundsDialog.TimeValidator.max=Wert kann nicht grφίer als Maximalwert sein +TimelineTopComponent.charts.disable=Deaktivieren +TimelineTopComponent.settings.setCustomBounds=Setze benutzerdefinierte Grenzen... +TimelineTopComponent.charts.empty=Keine Diagramme... +TimelineTopComponent.disabledTimelineLabel.text=Zeitleiste deaktiviert. Der Graph ist nicht dynamisch. +PlaySettingsDialog.headerTitle.title=Animations-Einstellungen +PlaySettingsDialog.headerTitle.description=Passe Animationsgeschwindigkeit und Schrittweite an +PlaySettingsDialog.labelDelay.text=Verzφgerung: +PlaySettingsDialog.labelStepSize.text=Schrittgrφίe: +PlaySettingsDialog.labelPerc.text=% +PlaySettingsDialog.labelMs.text=ms +PlaySettingsDialog.labelMode.text=Modus +PlaySettingsDialog.oneBoundRadio.text=Eine Grenze +PlaySettingsDialog.twoBoundsRadio.text=Zwei Grenzen +PlaySettingsDialog.labelSpeed.text=Geschwindigkeit +PlaySettingsDialog.backwardCheckbox.text=Rόckwδrts +PlaySettingsDialog.title=Animations-Einstellungen +TimelineTopComponent.settings.setPlaySettings=Setze Abspiel-Einstellungen... +TimelineTooltip.min=Start +TimelineTooltip.max=Ende +TimelineTooltip.position=Aktuelle Position ist +TimelineTooltip.chart=Aktueller Wert ist +TimelineTopComponent.settings.setTimeFormat=Setze Zeitformat... +TimeFormatDialog.title=Zeitformat +TimelineTopComponent.enableTimelineButton.toolTipText=Zeitleiste aktivieren zur zeitbasierten Filterung. +TimelineTopComponent.disableButon.toolTipText=Zeitleiste deaktivieren +TimeFormatDialog.headerTitle.title=Zeitformat-Einstellungen +TimeFormatDialog.headerTitle.description=Zeitformat einrichten +TimeFormatDialog.numericRadio.text=Numerisch +TimeFormatDialog.dateRadio.text=Datum +TimeFormatDialog.dateTimeRadio.text=Datetime diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_es.properties b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_es.properties index 66f069a1ee..6a036f7d59 100644 --- a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_es.properties +++ b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_es.properties @@ -1,110 +1,55 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:28+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -CTL_TimelineAction=L\u00ednea temporal - -CTL_TimelineTopComponent=L\u00ednea temporal - -CTL_TimelineWindowAction=L\u00ednea temporal - -OpenIDE-Module-Short-Description=Interfaz de usuario para el m\u00f3dulo Timeline - -TimelineTopComponent.closeButton.toolTipText=Cerrar la l\u00ednea temporal - -TimelineTopComponent.enableTimelineButton.text=Activar l\u00ednea temporal - +OpenIDE-Module-Short-Description=Interfaz de usuario para el mσdulo Timeline +CTL_TimelineAction=Lνnea temporal +CTL_TimelineTopComponent=Lνnea temporal +CTL_TimelineWindowAction=Lνnea temporal +!HINT_TimelineTopComponent= +TimelineTopComponent.enableButton.text= +TimelineTopComponent.closeButton.toolTipText=Cerrar la lνnea temporal +TimelineTopComponent.enableTimelineButton.text=Activar lνnea temporal TimelineTopComponent.playButton.toolTipText=Animar - -CustomBoundsDialog.labelStartDate.text=Comienzo\: - -CustomBoundsDialog.labelIntervalDate.text=Int\u00e9rvalo - -CustomBoundsDialog.labelMinDate.text=M\u00ednimo\: - -CustomBoundsDialog.labelMaxDate.text=M\u00e1ximo\: - +TimelineTopComponent.playButton.intevalNotSet=No es posible animar la linea temporal sin un intervalo de animaciσn. Establece uno antes de pulsar el botσn de animar +CustomBoundsDialog.labelStartDate.text=Comienzo: +CustomBoundsDialog.labelIntervalDate.text=Intιrvalo +CustomBoundsDialog.labelMinDate.text=Mνnimo: +CustomBoundsDialog.labelMaxDate.text=Mαximo: CustomBoundsDialog.resetDefaultsDate.text=Restaurar valores iniciales - -CustomBoundsDialog.labelEndDate.text=Final\: - -CustomBoundsDialog.labelBounds.text=L\u00edmites\: - -CustomBoundsDialog.titleHeader.title=Limites temporales e int\u00e9rvalo personalizados - -CustomBoundsDialog.titleHeader.description=Personalizar los l\u00edmites de la l\u00ednea temporal o el int\u00e9rvalo. Los l\u00edmites son el valor m\u00ednimo y m\u00e1ximo. El int\u00e9rvalo es la ventana temporal actualmente seleccionada. - -CustomBoundsDialog.title=Limites temporales e int\u00e9rvalo personalizados - +CustomBoundsDialog.labelEndDate.text=Final: +CustomBoundsDialog.labelBounds.text=L\u00EDmites +CustomBoundsDialog.titleHeader.title=Limites temporales e intιrvalo personalizados +CustomBoundsDialog.titleHeader.description=Personalizar los lνmites de la lνnea temporal o el intιrvalo. Los lνmites son el valor mνnimo y mαximo. El intιrvalo es la ventana temporal actualmente seleccionada. +CustomBoundsDialog.title=Limites temporales e intιrvalo personalizados CustomBoundsDialog.FormatValidator.date=La fecha debe estar formateada de la forma {0} - -CustomBoundsDialog.FormatValidator.double=No es un n\u00famero double v\u00e1lido - -CustomBoundsDialog.TimeValidator=El l\u00edmite inferior no puede estar despu\u00e9s del l\u00edmite superior - -CustomBoundsDialog.TimeValidator.min=El valor debe ser al menos el m\u00ednimo - -CustomBoundsDialog.TimeValidator.max=El valor no puede ser mayor que el m\u00e1ximo - +CustomBoundsDialog.FormatValidator.double=No es un nϊmero double vαlido +CustomBoundsDialog.TimeValidator=El lνmite inferior no puede estar despuιs del lνmite superior +CustomBoundsDialog.TimeValidator.min=El valor debe ser al menos el mνnimo +CustomBoundsDialog.TimeValidator.max=El valor no puede ser mayor que el mαximo TimelineTopComponent.charts.disable=Desactivar - -TimelineTopComponent.settings.setCustomBounds=Configurar l\u00edmites personalizados... - -TimelineTopComponent.charts.empty=No gr\u00e1ficos... - -TimelineTopComponent.disabledTimelineLabel.text=L\u00ednea temporal desactivada. El grafo no es din\u00e1mico. - -PlaySettingsDialog.headerTitle.title=Par\u00e1metros de animaci\u00f3n - -PlaySettingsDialog.headerTitle.description=Configurar velocidad y paso de animaci\u00f3n - -PlaySettingsDialog.labelDelay.text=Retraso\: - -PlaySettingsDialog.labelStepSize.text=Tama\u00f1o del paso\: - +TimelineTopComponent.settings.setCustomBounds=Configurar lνmites personalizados... +TimelineTopComponent.charts.empty=No grαficos... +TimelineTopComponent.disabledTimelineLabel.text=Lνnea temporal desactivada. El grafo no es dinαmico. +PlaySettingsDialog.headerTitle.title=Parαmetros de animaciσn +PlaySettingsDialog.headerTitle.description=Configurar velocidad y paso de animaciσn +PlaySettingsDialog.labelDelay.text=Retraso: +PlaySettingsDialog.labelStepSize.text=Tamaρo del paso: PlaySettingsDialog.labelPerc.text=% - PlaySettingsDialog.labelMs.text=ms - PlaySettingsDialog.labelMode.text=Modo - -PlaySettingsDialog.oneBoundRadio.text=Un l\u00edmite - -PlaySettingsDialog.twoBoundsRadio.text=Dos l\u00edmites - +PlaySettingsDialog.oneBoundRadio.text=Un lνmite +PlaySettingsDialog.twoBoundsRadio.text=Dos lνmites PlaySettingsDialog.labelSpeed.text=Velocidad - -PlaySettingsDialog.backwardCheckbox.text=Hacia atr\u00e1s - -PlaySettingsDialog.title=Par\u00e1metros de animaci\u00f3n - -TimelineTopComponent.settings.setPlaySettings=Configurar los par\u00e1metros de animaci\u00f3n... - +PlaySettingsDialog.backwardCheckbox.text=Hacia atrαs +PlaySettingsDialog.title=Parαmetros de animaciσn +TimelineTopComponent.settings.setPlaySettings=Configurar los parαmetros de animaciσn... TimelineTooltip.min=Comienzo - TimelineTooltip.max=Final - -TimelineTooltip.position=La posici\u00f3n actual es - -TimelineTooltip.chart=El valor actual es - +TimelineTooltip.position=La posiciσn actual es +TimelineTooltip.chart=El valor actual es TimelineTopComponent.settings.setTimeFormat=Ver formato temporal... - TimeFormatDialog.title=Formato temporal - -TimelineTopComponent.enableTimelineButton.toolTipText=Activar l\u00ednea temporal para filtrado basado en el tiempo - -TimelineTopComponent.disableButon.toolTipText=Desactivar la l\u00ednea temporal - +TimelineTopComponent.enableTimelineButton.toolTipText=Activar lνnea temporal para filtrado basado en el tiempo +TimelineTopComponent.disableButon.toolTipText=Desactivar la lνnea temporal TimeFormatDialog.headerTitle.title=Ajustes de formato temporal - TimeFormatDialog.headerTitle.description=Configurar el formato temporal - -TimeFormatDialog.numericRadio.text=Num\u00e9rico - +TimeFormatDialog.numericRadio.text=Numιrico TimeFormatDialog.dateRadio.text=Fecha +TimeFormatDialog.dateTimeRadio.text=Fecha y hora diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_fr.properties b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_fr.properties index 68680b8022..111822205a 100644 --- a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_fr.properties +++ b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_fr.properties @@ -1,110 +1,55 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:35+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - +OpenIDE-Module-Short-Description=Interface utilisateur du module Timeline CTL_TimelineAction=Timeline - CTL_TimelineTopComponent=Timeline - CTL_TimelineWindowAction=Chronologie - -OpenIDE-Module-Short-Description=Interface utilisateur du module Timeline - +!HINT_TimelineTopComponent= +TimelineTopComponent.enableButton.text= TimelineTopComponent.closeButton.toolTipText=Fermer la timeline - TimelineTopComponent.enableTimelineButton.text=Activer la Chronologie - TimelineTopComponent.playButton.toolTipText=Jouer - -CustomBoundsDialog.labelStartDate.text=D\u00e9but \: - +TimelineTopComponent.playButton.intevalNotSet=Impossible d'animer la timeline sans intervalle d'animation. Dιfinissez en un avant de cliquer sur le bouton de lecture +CustomBoundsDialog.labelStartDate.text=Dιbut : CustomBoundsDialog.labelIntervalDate.text=Intervalle - -CustomBoundsDialog.labelMinDate.text=Minimum\: - -CustomBoundsDialog.labelMaxDate.text=Maximum\: - -CustomBoundsDialog.resetDefaultsDate.text=R\u00e9initialiser - -CustomBoundsDialog.labelEndDate.text=Fin \: - +CustomBoundsDialog.labelMinDate.text=Minimum: +CustomBoundsDialog.labelMaxDate.text=Maximum: +CustomBoundsDialog.resetDefaultsDate.text=Rιinitialiser +CustomBoundsDialog.labelEndDate.text=Fin : CustomBoundsDialog.labelBounds.text=Bornes - -CustomBoundsDialog.titleHeader.title=Bornes et intervalle temporel personnalis\u00e9s - -CustomBoundsDialog.titleHeader.description=Personnaliser les bornes de la chronologie ou son intervalle visible. Les bornes sont les valeurs min et max. L'intervalle est la fen\u00eatre temporelle actuellement s\u00e9lectionn\u00e9e. - -CustomBoundsDialog.title=Bornes et intervalle temporel personnalis\u00e9s - -CustomBoundsDialog.FormatValidator.date=La date doit \u00eatre format\u00e9e {0} - +CustomBoundsDialog.titleHeader.title=Bornes et intervalle temporel personnalisιs +CustomBoundsDialog.titleHeader.description=Personnaliser les bornes de la chronologie ou son intervalle visible. Les bornes sont les valeurs min et max. L'intervalle est la fenκtre temporelle actuellement sιlectionnιe. +CustomBoundsDialog.title=Bornes et intervalle temporel personnalisιs +CustomBoundsDialog.FormatValidator.date=La date doit κtre formatιe {0} CustomBoundsDialog.FormatValidator.double=Nombre de type double invalide - -CustomBoundsDialog.TimeValidator=La borne basse ne peux pas \u00eatre sup\u00e9rieure \u00e0 la borne haute - -CustomBoundsDialog.TimeValidator.min=La valeur doit \u00eatre au moins \u00e9gale au minimum - -CustomBoundsDialog.TimeValidator.max=La valeur ne peux pas \u00eatre sup\u00e9rieure au maximum - -TimelineTopComponent.charts.disable=D\u00e9sactiver - -TimelineTopComponent.settings.setCustomBounds=R\u00e9gler les bornes personnalis\u00e9es... - +CustomBoundsDialog.TimeValidator=La borne basse ne peux pas κtre supιrieure ΰ la borne haute +CustomBoundsDialog.TimeValidator.min=La valeur doit κtre au moins ιgale au minimum +CustomBoundsDialog.TimeValidator.max=La valeur ne peux pas κtre supιrieure au maximum +TimelineTopComponent.charts.disable=Dιsactiver +TimelineTopComponent.settings.setCustomBounds=Rιgler les bornes personnalisιes... TimelineTopComponent.charts.empty=Aucun graphique... - -TimelineTopComponent.disabledTimelineLabel.text=Chronologie d\u00e9sactiv\u00e9e. Le graphe n'est pas dynamique. - -PlaySettingsDialog.headerTitle.title=Param\u00e8tres d'animation - +TimelineTopComponent.disabledTimelineLabel.text=Chronologie dιsactivιe. Le graphe n'est pas dynamique. +PlaySettingsDialog.headerTitle.title=Paramθtres d'animation PlaySettingsDialog.headerTitle.description=Configurer la vitesse d'animation et le pas de temps - -PlaySettingsDialog.labelDelay.text=D\u00e9lai \: - -PlaySettingsDialog.labelStepSize.text=Pas de temps \: - +PlaySettingsDialog.labelDelay.text=Dιlai : +PlaySettingsDialog.labelStepSize.text=Pas de temps : PlaySettingsDialog.labelPerc.text=% - PlaySettingsDialog.labelMs.text=ms - PlaySettingsDialog.labelMode.text=Mode - PlaySettingsDialog.oneBoundRadio.text=Une borne - PlaySettingsDialog.twoBoundsRadio.text=Deux bornes - PlaySettingsDialog.labelSpeed.text=Vitesse - -PlaySettingsDialog.backwardCheckbox.text=En arri\u00e8re - -PlaySettingsDialog.title=Param\u00e8tres d'animation - -TimelineTopComponent.settings.setPlaySettings=R\u00e9gler les param\u00e8tres d'animation... - -TimelineTooltip.min=D\u00e9but - +PlaySettingsDialog.backwardCheckbox.text=En arriθre +PlaySettingsDialog.title=Paramθtres d'animation +TimelineTopComponent.settings.setPlaySettings=Rιgler les paramθtres d'animation... +TimelineTooltip.min=Dιbut TimelineTooltip.max=Fin - TimelineTooltip.position=La position actuelle est - -TimelineTooltip.chart=La valeur actuelle est - -!TimelineTopComponent.settings.setTimeFormat= - -!TimeFormatDialog.title= - -TimelineTopComponent.enableTimelineButton.toolTipText=Activer la timeline pour filtrer par p\u00e9riode de temps - -TimelineTopComponent.disableButon.toolTipText=D\u00e9sactiver la timeline - -!TimeFormatDialog.headerTitle.title= - -!TimeFormatDialog.headerTitle.description= - -!TimeFormatDialog.numericRadio.text= - -!TimeFormatDialog.dateRadio.text= +TimelineTooltip.chart=La valeur actuelle est +TimelineTopComponent.settings.setTimeFormat=Dιfinir le format de date... +TimeFormatDialog.title=Format de date +TimelineTopComponent.enableTimelineButton.toolTipText=Activer la timeline pour filtrer par pιriode de temps +TimelineTopComponent.disableButon.toolTipText=Dιsactiver la timeline +TimeFormatDialog.headerTitle.title=Paramθtres du format de date +TimeFormatDialog.headerTitle.description=Appliquer le format de date +TimeFormatDialog.numericRadio.text=Numιrique +TimeFormatDialog.dateRadio.text=Date +TimeFormatDialog.dateTimeRadio.text=Datetime diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_he.properties b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_he.properties new file mode 100644 index 0000000000..b2ef140175 --- /dev/null +++ b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_he.properties @@ -0,0 +1,55 @@ +OpenIDE-Module-Short-Description=Timeline UI +CTL_TimelineAction=Timeline +CTL_TimelineTopComponent=Timeline +CTL_TimelineWindowAction=Timeline +!HINT_TimelineTopComponent= +TimelineTopComponent.enableButton.text= +TimelineTopComponent.closeButton.toolTipText=Close the Timeline +TimelineTopComponent.enableTimelineButton.text=Enable Timeline +TimelineTopComponent.playButton.toolTipText=Play +TimelineTopComponent.playButton.intevalNotSet=Cannot animate timeline without an animation interval. Set one before clicking play button +CustomBoundsDialog.labelStartDate.text=Start: +CustomBoundsDialog.labelIntervalDate.text=Interval +CustomBoundsDialog.labelMinDate.text=Minimum: +CustomBoundsDialog.labelMaxDate.text=Maximum: +CustomBoundsDialog.resetDefaultsDate.text=\u05d0\u05e4\u05e1 \u05d1\u05e8\u05d9\u05e8\u05d5\u05ea \u05d4\u05de\u05d7\u05d3\u05dc +CustomBoundsDialog.labelEndDate.text=End: +CustomBoundsDialog.labelBounds.text=Bounds +CustomBoundsDialog.titleHeader.title=Custom time bounds & interval +CustomBoundsDialog.titleHeader.description=Customize the timeline bounds or interval. The bounds are the minimum and maximum values. The interval is the currently selected time window. +CustomBoundsDialog.title=Custom time bounds & interval +CustomBoundsDialog.FormatValidator.date=Date must be formatted {0} +CustomBoundsDialog.FormatValidator.double=Not a valid double number +CustomBoundsDialog.TimeValidator=Lower bound can't be after upper bound +CustomBoundsDialog.TimeValidator.min=Value needs to be at least the minimum +CustomBoundsDialog.TimeValidator.max=Value can't be more than the maximum +TimelineTopComponent.charts.disable=Disable +TimelineTopComponent.settings.setCustomBounds=Set custom bounds... +TimelineTopComponent.charts.empty=No charts... +TimelineTopComponent.disabledTimelineLabel.text=Timeline disabled. The graph is not dynamic. +PlaySettingsDialog.headerTitle.title=Animation settings +PlaySettingsDialog.headerTitle.description=Set up animation speed and step +PlaySettingsDialog.labelDelay.text=Delay: +PlaySettingsDialog.labelStepSize.text=Step size: +PlaySettingsDialog.labelPerc.text=% +PlaySettingsDialog.labelMs.text=ms +PlaySettingsDialog.labelMode.text=Mode +PlaySettingsDialog.oneBoundRadio.text=One bound +PlaySettingsDialog.twoBoundsRadio.text=Two bounds +PlaySettingsDialog.labelSpeed.text=Speed +PlaySettingsDialog.backwardCheckbox.text=Backward +PlaySettingsDialog.title=Animation settings +TimelineTopComponent.settings.setPlaySettings=Set play settings... +TimelineTooltip.min=Start +TimelineTooltip.max=End +TimelineTooltip.position=Current position is +TimelineTooltip.chart=Current value is +TimelineTopComponent.settings.setTimeFormat=Set time format... +TimeFormatDialog.title=Time format +TimelineTopComponent.enableTimelineButton.toolTipText=Enable timeline for time-based filtering +TimelineTopComponent.disableButon.toolTipText=Disable the timeline +TimeFormatDialog.headerTitle.title=Time format settings +TimeFormatDialog.headerTitle.description=Set up the time format +TimeFormatDialog.numericRadio.text=Numeric +TimeFormatDialog.dateRadio.text=Date +TimeFormatDialog.dateTimeRadio.text=Datetime diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_hu.properties b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_hu.properties new file mode 100644 index 0000000000..ab89c78087 --- /dev/null +++ b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_hu.properties @@ -0,0 +1,55 @@ + + +PlaySettingsDialog.labelSpeed.text=Sebess\u00E9g +CustomBoundsDialog.FormatValidator.date=A d\u00E1tumot a k\u00F6vetkez\u0151re kell form\u00E1zni: {0} +CustomBoundsDialog.titleHeader.title=Egyedi id\u0151hat\u00E1rok \u00E9s intervallumok +PlaySettingsDialog.oneBoundRadio.text=Egy hat\u00E1r +CTL_TimelineAction=Id\u0151vonal +TimeFormatDialog.numericRadio.text=Numerikus +PlaySettingsDialog.backwardCheckbox.text=H\u00E1trafel\u00E9 +CustomBoundsDialog.FormatValidator.double=Nem \u00E9rv\u00E9nyes dupla sz\u00E1m +CustomBoundsDialog.labelMaxDate.text=Maximum: +TimeFormatDialog.headerTitle.description=\u00C1ll\u00EDtsa be az id\u0151 form\u00E1tumot +PlaySettingsDialog.headerTitle.description=\u00C1ll\u00EDtsa be az anim\u00E1ci\u00F3s sebess\u00E9get \u00E9s l\u00E9p\u00E9st +PlaySettingsDialog.labelMs.text=ms +PlaySettingsDialog.labelMode.text=M\u00F3d: +CustomBoundsDialog.labelStartDate.text=Kezd\u0151lap: +TimelineTooltip.position=Jelenlegi poz\u00EDci\u00F3 +CustomBoundsDialog.TimeValidator=Az als\u00F3 korl\u00E1t nem lehet a fels\u0151 korl\u00E1t ut\u00E1n +PlaySettingsDialog.headerTitle.title=Anim\u00E1ci\u00F3s be\u00E1ll\u00EDt\u00E1sok +TimeFormatDialog.title=Id\u0151 form\u00E1tum +CustomBoundsDialog.labelIntervalDate.text=Intervallumok +TimelineTopComponent.charts.empty=Nincsenek diagramok... +TimeFormatDialog.headerTitle.title=Id\u0151 form\u00E1tum be\u00E1ll\u00EDt\u00E1sok +PlaySettingsDialog.labelPerc.text=% +CustomBoundsDialog.labelBounds.text=Hat\u00E1rok +TimelineTopComponent.settings.setTimeFormat=\u00C1ll\u00EDtsa be az id\u0151 form\u00E1tumot... +CustomBoundsDialog.TimeValidator.min=Az \u00E9rt\u00E9knek legal\u00E1bb a minimumnak kell lennie +CustomBoundsDialog.title=Egyedi id\u0151hat\u00E1rok \u00E9s intervallumok +PlaySettingsDialog.twoBoundsRadio.text=K\u00E9t hat\u00E1r +CustomBoundsDialog.labelMinDate.text=Minimum: +TimelineTopComponent.disableButon.toolTipText=Az id\u0151vonal letilt\u00E1sa +CTL_TimelineTopComponent=Id\u0151vonal +TimelineTopComponent.settings.setPlaySettings=Lej\u00E1tsz\u00E1si be\u00E1ll\u00EDt\u00E1sok megad\u00E1sa... +TimelineTopComponent.playButton.intevalNotSet=Anim\u00E1ci\u00F3s intervallum n\u00E9lk\u00FCl nem lehet anim\u00E1lni az id\u0151vonalat. A lej\u00E1tsz\u00E1s gombra kattint\u00E1s el\u0151tt \u00E1ll\u00EDtson be egyet +TimelineTopComponent.charts.disable=Letilt\u00E1s +TimelineTopComponent.settings.setCustomBounds=\u00C1ll\u00EDtson be egy\u00E9ni hat\u00E1rokat... +CustomBoundsDialog.titleHeader.description=Az id\u0151vonal hat\u00E1rainak vagy intervallum\u00E1nak testreszab\u00E1sa. A korl\u00E1tok a minim\u00E1lis \u00E9s maxim\u00E1lis \u00E9rt\u00E9kek. Az intervallum az aktu\u00E1lisan kiv\u00E1lasztott id\u0151ablak. +PlaySettingsDialog.labelDelay.text=K\u00E9sleltet\u00E9s: +TimelineTooltip.max=V\u00E9g +CTL_TimelineWindowAction=Id\u0151vonal +TimelineTooltip.min=Kezd\u0151lap +CustomBoundsDialog.resetDefaultsDate.text=Vissza\u00E1ll\u00EDt\u00E1s alap\u00E9rtelmezettre +CustomBoundsDialog.TimeValidator.max=Az \u00E9rt\u00E9k nem lehet nagyobb a maximumn\u00E1l +PlaySettingsDialog.title=Anim\u00E1ci\u00F3s be\u00E1ll\u00EDt\u00E1sok +TimelineTooltip.chart=Jelenlegi \u00E9rt\u00E9k +TimelineTopComponent.enableTimelineButton.text=Id\u0151vonal enged\u00E9lyez\u00E9se +OpenIDE-Module-Short-Description=Id\u0151vonal felhaszn\u00E1l\u00F3i fel\u00FClet +TimelineTopComponent.disabledTimelineLabel.text=Az id\u0151vonal letiltva. A grafikon nem dinamikus. +TimelineTopComponent.closeButton.toolTipText=Z\u00E1rja be az id\u0151vonalat +PlaySettingsDialog.labelStepSize.text=L\u00E9p\u00E9sm\u00E9ret: +TimelineTopComponent.enableTimelineButton.toolTipText=Az id\u0151vonal enged\u00E9lyez\u00E9se az id\u0151alap\u00FA sz\u0171r\u00E9shez +CustomBoundsDialog.labelEndDate.text=V\u00E9g: +TimelineTopComponent.playButton.toolTipText=Lej\u00E1tsz\u00E1s +TimeFormatDialog.dateTimeRadio.text=Id\u0151 +TimeFormatDialog.dateRadio.text=D\u00E1tum diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_it.properties b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_it.properties new file mode 100644 index 0000000000..e68af05bee --- /dev/null +++ b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_it.properties @@ -0,0 +1,55 @@ +OpenIDE-Module-Short-Description=Timeline UI +CTL_TimelineAction=Timeline +CTL_TimelineTopComponent=Timeline +CTL_TimelineWindowAction=Timeline +!HINT_TimelineTopComponent= +TimelineTopComponent.enableButton.text= +TimelineTopComponent.closeButton.toolTipText=Close the Timeline +TimelineTopComponent.enableTimelineButton.text=Enable Timeline +TimelineTopComponent.playButton.toolTipText=Play +TimelineTopComponent.playButton.intevalNotSet=Cannot animate timeline without an animation interval. Set one before clicking play button +CustomBoundsDialog.labelStartDate.text=Start: +CustomBoundsDialog.labelIntervalDate.text=Interval +CustomBoundsDialog.labelMinDate.text=Minimum: +CustomBoundsDialog.labelMaxDate.text=Maximum: +CustomBoundsDialog.resetDefaultsDate.text=Reset defaults +CustomBoundsDialog.labelEndDate.text=End: +CustomBoundsDialog.labelBounds.text=Bounds +CustomBoundsDialog.titleHeader.title=Custom time bounds & interval +CustomBoundsDialog.titleHeader.description=Customize the timeline bounds or interval. The bounds are the minimum and maximum values. The interval is the currently selected time window. +CustomBoundsDialog.title=Custom time bounds & interval +CustomBoundsDialog.FormatValidator.date=Date must be formatted {0} +CustomBoundsDialog.FormatValidator.double=Not a valid double number +CustomBoundsDialog.TimeValidator=Lower bound can't be after upper bound +CustomBoundsDialog.TimeValidator.min=Value needs to be at least the minimum +CustomBoundsDialog.TimeValidator.max=Value can't be more than the maximum +TimelineTopComponent.charts.disable=Disable +TimelineTopComponent.settings.setCustomBounds=Set custom bounds... +TimelineTopComponent.charts.empty=No charts... +TimelineTopComponent.disabledTimelineLabel.text=Timeline disabled. The graph is not dynamic. +PlaySettingsDialog.headerTitle.title=Animation settings +PlaySettingsDialog.headerTitle.description=Set up animation speed and step +PlaySettingsDialog.labelDelay.text=Delay: +PlaySettingsDialog.labelStepSize.text=Step size: +PlaySettingsDialog.labelPerc.text=% +PlaySettingsDialog.labelMs.text=ms +PlaySettingsDialog.labelMode.text=Mode +PlaySettingsDialog.oneBoundRadio.text=One bound +PlaySettingsDialog.twoBoundsRadio.text=Two bounds +PlaySettingsDialog.labelSpeed.text=Speed +PlaySettingsDialog.backwardCheckbox.text=Backward +PlaySettingsDialog.title=Animation settings +TimelineTopComponent.settings.setPlaySettings=Set play settings... +TimelineTooltip.min=Start +TimelineTooltip.max=End +TimelineTooltip.position=Current position is +TimelineTooltip.chart=Current value is +TimelineTopComponent.settings.setTimeFormat=Set time format... +TimeFormatDialog.title=Time format +TimelineTopComponent.enableTimelineButton.toolTipText=Enable timeline for time-based filtering +TimelineTopComponent.disableButon.toolTipText=Disable the timeline +TimeFormatDialog.headerTitle.title=Time format settings +TimeFormatDialog.headerTitle.description=Set up the time format +TimeFormatDialog.numericRadio.text=Numeric +TimeFormatDialog.dateRadio.text=Date +TimeFormatDialog.dateTimeRadio.text=Datetime diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_ja.properties b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_ja.properties index d9b5cb1018..66004a41b6 100644 --- a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_ja.properties +++ b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_ja.properties @@ -1,109 +1,55 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011-2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-12 10\:05+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -CTL_TimelineAction=\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3 - -CTL_TimelineTopComponent=\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3 - -CTL_TimelineWindowAction=\u6642\u7cfb\u5217 - -OpenIDE-Module-Short-Description=\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3UI - -TimelineTopComponent.closeButton.toolTipText=\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3\u3092\u9589\u3058\u308b - -TimelineTopComponent.enableTimelineButton.text=\u6642\u7cfb\u5217\u3092\u6709\u52b9\u5316 - -TimelineTopComponent.playButton.toolTipText=\u30d7\u30ec\u30a4 - -CustomBoundsDialog.labelStartDate.text=\u958b\u59cb\: - -CustomBoundsDialog.labelIntervalDate.text=\u9593\u9694 - -CustomBoundsDialog.labelMinDate.text=\u6700\u5c0f\: - -CustomBoundsDialog.labelMaxDate.text=\u6700\u5927\: - -CustomBoundsDialog.resetDefaultsDate.text=\u898f\u5b9a\u5024\u306b\u623b\u3059 - -CustomBoundsDialog.labelEndDate.text=\u7d42\u4e86\: - -CustomBoundsDialog.labelBounds.text=\u7bc4\u56f2 - -CustomBoundsDialog.titleHeader.title=\u6642\u9593\u306e\u7bc4\u56f2\u3068\u9593\u9694\u3092\u5909\u66f4 - -CustomBoundsDialog.titleHeader.description=\u6642\u7cfb\u5217\u306e\u7bc4\u56f2\u3084\u9593\u9694\u3092\u8a2d\u5b9a\u3059\u308b\u3002\u7bc4\u56f2\u306f\u4e0a\u9650\u53ca\u3073\u4e0b\u9650\u306e\u5024\u3067\u3059\u3002\u9593\u9694\u306f\u73fe\u5728\u9078\u629e\u3055\u308c\u3066\u3044\u308b\u6642\u9593\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u3059\u3002 - -CustomBoundsDialog.title=\u6642\u9593\u306e\u7bc4\u56f2\u3068\u9593\u9694\u3092\u5909\u66f4 - -CustomBoundsDialog.FormatValidator.date=\u65e5\u4ed8\u306f{0}\u3068\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3055\u308c\u3066\u3044\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 - -CustomBoundsDialog.FormatValidator.double=\u6709\u52b9\u306a\u500d\u7cbe\u5ea6\u6d6e\u52d5\u5c0f\u6570\u70b9\u6570\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 - -CustomBoundsDialog.TimeValidator=\u4e0b\u9650\u306f\u4e0a\u9650\u3092\u8d85\u3048\u308b\u3053\u3068\u306f\u3042\u308a\u307e\u305b\u3093\u3002 - -CustomBoundsDialog.TimeValidator.min=\u5024\u306f\u5c11\u306a\u304f\u3068\u3082\u4e0b\u9650\u4ee5\u4e0a\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 - -CustomBoundsDialog.TimeValidator.max=\u5024\u306f\u4e0a\u9650\u3092\u8d85\u3048\u308b\u3053\u3068\u306f\u3042\u308a\u307e\u305b\u3093\u3002 - -TimelineTopComponent.charts.disable=\u7121\u52b9\u5316 - -TimelineTopComponent.settings.setCustomBounds=\u7bc4\u56f2\u306e\u8a2d\u5b9a... - -TimelineTopComponent.charts.empty=\u56f3\u8868\u306a\u3057... - -TimelineTopComponent.disabledTimelineLabel.text=\u6642\u7cfb\u5217\u3092\u7121\u52b9\u5316\u3002\u30b0\u30e9\u30d5\u306f\u52d5\u7684\u3067\u3042\u308a\u307e\u305b\u3093\u3002 - -PlaySettingsDialog.headerTitle.title=\u52d5\u753b\u8a2d\u5b9a - -PlaySettingsDialog.headerTitle.description=\u52d5\u753b\u306e\u901f\u5ea6\u3068\u30b9\u30c6\u30c3\u30d7\u3092\u8a2d\u5b9a - -PlaySettingsDialog.labelDelay.text=\u9045\u5ef6\: - -PlaySettingsDialog.labelStepSize.text=\u30b9\u30c6\u30c3\u30d7\u30b5\u30a4\u30ba\: - -PlaySettingsDialog.labelPerc.text=% - -PlaySettingsDialog.labelMs.text=ms - -PlaySettingsDialog.labelMode.text=\u30e2\u30fc\u30c9 - -PlaySettingsDialog.oneBoundRadio.text=\u7247\u5074\u7bc4\u56f2 - -PlaySettingsDialog.twoBoundsRadio.text=\u4e21\u5074\u7bc4\u56f2 - -PlaySettingsDialog.labelSpeed.text=\u901f\u5ea6 - -PlaySettingsDialog.backwardCheckbox.text=\u9006\u65b9\u5411 - -PlaySettingsDialog.title=\u52d5\u753b\u8a2d\u5b9a - -TimelineTopComponent.settings.setPlaySettings=\u518d\u751f\u306e\u8a2d\u5b9a... - -TimelineTooltip.min=\u958b\u59cb - -TimelineTooltip.max=\u7d42\u4e86 - -TimelineTooltip.position=\u73fe\u5728\u306e\u4f4d\u7f6e\u306f - -TimelineTooltip.chart=\u73fe\u5728\u306e\u5024\u306f - -TimelineTopComponent.settings.setTimeFormat=\u6642\u9593\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u8a2d\u5b9a... - -TimeFormatDialog.title=\u6642\u9593\u30d5\u30a9\u30fc\u30de\u30c3\u30c8 - -TimelineTopComponent.enableTimelineButton.toolTipText=\u6642\u9593\u5225\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u306e\u305f\u3081\u6642\u7cfb\u5217\u3092\u6709\u52b9\u5316 - -TimelineTopComponent.disableButon.toolTipText=\u6642\u7cfb\u5217\u3092\u7121\u52b9\u5316 - -TimeFormatDialog.headerTitle.title=\u6642\u9593\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u8a2d\u5b9a - -TimeFormatDialog.headerTitle.description=\u6642\u9593\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u8a2d\u5b9a\u3059\u308b - -TimeFormatDialog.numericRadio.text=\u6570\u5024 - -TimeFormatDialog.dateRadio.text=\u65e5\u4ed8 +OpenIDE-Module-Short-Description=\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3UI +CTL_TimelineAction=\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3 +CTL_TimelineTopComponent=\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3 +CTL_TimelineWindowAction=\u6642\u7cfb\u5217 +!HINT_TimelineTopComponent= +TimelineTopComponent.enableButton.text= +TimelineTopComponent.closeButton.toolTipText=\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3\u3092\u9589\u3058\u308b +TimelineTopComponent.enableTimelineButton.text=\u6642\u7cfb\u5217\u3092\u6709\u52b9\u5316 +TimelineTopComponent.playButton.toolTipText=\u30d7\u30ec\u30a4 +# TimelineTopComponent.playButton.intevalNotSet=Cannot animate timeline without an animation interval. Set one before clicking play button +CustomBoundsDialog.labelStartDate.text=\u958b\u59cb: +CustomBoundsDialog.labelIntervalDate.text=\u9593\u9694 +CustomBoundsDialog.labelMinDate.text=\u6700\u5c0f: +CustomBoundsDialog.labelMaxDate.text=\u6700\u5927: +CustomBoundsDialog.resetDefaultsDate.text=\u898f\u5b9a\u5024\u306b\u623b\u3059 +CustomBoundsDialog.labelEndDate.text=\u7d42\u4e86: +CustomBoundsDialog.labelBounds.text=\u7bc4\u56f2 +CustomBoundsDialog.titleHeader.title=\u6642\u9593\u306e\u7bc4\u56f2\u3068\u9593\u9694\u3092\u5909\u66f4 +CustomBoundsDialog.titleHeader.description=\u6642\u7cfb\u5217\u306e\u7bc4\u56f2\u3084\u9593\u9694\u3092\u8a2d\u5b9a\u3059\u308b\u3002\u7bc4\u56f2\u306f\u4e0a\u9650\u53ca\u3073\u4e0b\u9650\u306e\u5024\u3067\u3059\u3002\u9593\u9694\u306f\u73fe\u5728\u9078\u629e\u3055\u308c\u3066\u3044\u308b\u6642\u9593\u30a6\u30a3\u30f3\u30c9\u30a6\u3067\u3059\u3002 +CustomBoundsDialog.title = \u6642\u9593\u306e\u7bc4\u56f2\u3068\u9593\u9694\u3092\u5909\u66f4 +CustomBoundsDialog.FormatValidator.date = \u65e5\u4ed8\u306f{0}\u3068\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3055\u308c\u3066\u3044\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 +CustomBoundsDialog.FormatValidator.double = \u6709\u52b9\u306a\u500d\u7cbe\u5ea6\u6d6e\u52d5\u5c0f\u6570\u70b9\u6570\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +CustomBoundsDialog.TimeValidator = \u4e0b\u9650\u306f\u4e0a\u9650\u3092\u8d85\u3048\u308b\u3053\u3068\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +CustomBoundsDialog.TimeValidator.min = \u5024\u306f\u5c11\u306a\u304f\u3068\u3082\u4e0b\u9650\u4ee5\u4e0a\u3067\u3042\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 +CustomBoundsDialog.TimeValidator.max = \u5024\u306f\u4e0a\u9650\u3092\u8d85\u3048\u308b\u3053\u3068\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +TimelineTopComponent.charts.disable = \u7121\u52b9\u5316 +TimelineTopComponent.settings.setCustomBounds = \u7bc4\u56f2\u306e\u8a2d\u5b9a... +TimelineTopComponent.charts.empty = \u56f3\u8868\u306a\u3057... +TimelineTopComponent.disabledTimelineLabel.text=\u6642\u7cfb\u5217\u3092\u7121\u52b9\u5316\u3002\u30b0\u30e9\u30d5\u306f\u52d5\u7684\u3067\u3042\u308a\u307e\u305b\u3093\u3002 +PlaySettingsDialog.headerTitle.title=\u52d5\u753b\u8a2d\u5b9a +PlaySettingsDialog.headerTitle.description=\u52d5\u753b\u306e\u901f\u5ea6\u3068\u30b9\u30c6\u30c3\u30d7\u3092\u8a2d\u5b9a +PlaySettingsDialog.labelDelay.text=\u9045\u5ef6: +PlaySettingsDialog.labelStepSize.text=\u30b9\u30c6\u30c3\u30d7\u30b5\u30a4\u30ba: +PlaySettingsDialog.labelPerc.text=% +PlaySettingsDialog.labelMs.text=ms +PlaySettingsDialog.labelMode.text=\u30e2\u30fc\u30c9 +PlaySettingsDialog.oneBoundRadio.text=\u7247\u5074\u7bc4\u56f2 +PlaySettingsDialog.twoBoundsRadio.text=\u4e21\u5074\u7bc4\u56f2 +PlaySettingsDialog.labelSpeed.text=\u901f\u5ea6 +PlaySettingsDialog.backwardCheckbox.text=\u9006\u65b9\u5411 +PlaySettingsDialog.title = \u52d5\u753b\u8a2d\u5b9a +TimelineTopComponent.settings.setPlaySettings = \u518d\u751f\u306e\u8a2d\u5b9a... +TimelineTooltip.min = \u958b\u59cb +TimelineTooltip.max = \u7d42\u4e86 +TimelineTooltip.position = \u73fe\u5728\u306e\u4f4d\u7f6e\u306f +TimelineTooltip.chart = \u73fe\u5728\u306e\u5024\u306f +TimelineTopComponent.settings.setTimeFormat = \u6642\u9593\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u8a2d\u5b9a... +TimeFormatDialog.title = \u6642\u9593\u30d5\u30a9\u30fc\u30de\u30c3\u30c8 +TimelineTopComponent.enableTimelineButton.toolTipText=\u6642\u9593\u5225\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u306e\u305f\u3081\u6642\u7cfb\u5217\u3092\u6709\u52b9\u5316 +TimelineTopComponent.disableButon.toolTipText=\u6642\u7cfb\u5217\u3092\u7121\u52b9\u5316 +TimeFormatDialog.headerTitle.title=\u6642\u9593\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u8a2d\u5b9a +TimeFormatDialog.headerTitle.description=\u6642\u9593\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3092\u8a2d\u5b9a\u3059\u308b +TimeFormatDialog.numericRadio.text=\u6570\u5024 +TimeFormatDialog.dateRadio.text=\u65e5\u4ed8 +# TimeFormatDialog.dateTimeRadio.text=Datetime diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_ko.properties b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_ko.properties new file mode 100644 index 0000000000..62a0946bc4 --- /dev/null +++ b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_ko.properties @@ -0,0 +1,55 @@ + + +PlaySettingsDialog.labelSpeed.text=\uC18D\uB3C4 +CustomBoundsDialog.FormatValidator.date=\uB0A0\uC9DC\uB294 {0} \uD615\uD0DC\uC785\uB2C8\uB2E4 +CustomBoundsDialog.titleHeader.title=\uC0AC\uC6A9\uC790 \uC815\uC758 \uC2DC\uAC04 \uACBD\uACC4 \uBC0F \uAC04\uACA9 +PlaySettingsDialog.oneBoundRadio.text=\uD55C \uACBD\uACC4 +CTL_TimelineAction=\uD0C0\uC784\uB77C\uC778 +TimeFormatDialog.numericRadio.text=\uC22B\uC790 +PlaySettingsDialog.backwardCheckbox.text=\uD6C4\uD5A5 +CustomBoundsDialog.FormatValidator.double=\uC720\uD6A8\uD55C \uB354\uBE14\uD615 \uC218\uAC00 \uC544\uB2D9\uB2C8\uB2E4 +CustomBoundsDialog.labelMaxDate.text=\uCD5C\uB313\uAC12: +TimeFormatDialog.headerTitle.description=\uC2DC\uAC04 \uD615\uC2DD \uC124\uC815 +PlaySettingsDialog.headerTitle.description=\uC560\uB2C8\uBA54\uC774\uC158 \uC18D\uB3C4\uC640 \uB2E8\uACC4 \uC124\uC815 +PlaySettingsDialog.labelMs.text=ms +PlaySettingsDialog.labelMode.text=\uBAA8\uB4DC +CustomBoundsDialog.labelStartDate.text=\uC2DC\uC791: +TimelineTooltip.position=\uD604\uC7AC \uC704\uCE58\uB294 +CustomBoundsDialog.TimeValidator=\uD558\uD55C\uAC12\uC740 \uC0C1\uD55C\uAC12 \uB4A4\uC5D0 \uC62C \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 +PlaySettingsDialog.headerTitle.title=\uC560\uB2C8\uBA54\uC774\uC158 \uC124\uC815 +TimeFormatDialog.title=\uC2DC\uAC04 \uD615\uC2DD +CustomBoundsDialog.labelIntervalDate.text=\uAC04\uACA9 +TimelineTopComponent.charts.empty=\uCC28\uD2B8 \uC5C6\uC74C... +TimeFormatDialog.headerTitle.title=\uC2DC\uAC04 \uD615\uC2DD \uC124\uC815 +PlaySettingsDialog.labelPerc.text=% +CustomBoundsDialog.labelBounds.text=\uAD6C\uAC04 \uACBD\uACC4 +TimelineTopComponent.settings.setTimeFormat=\uC2DC\uAC04 \uD615\uC2DD \uC124\uC815... +CustomBoundsDialog.TimeValidator.min=\uAC12\uC740 \uCD5C\uC19F\uAC12 \uC774\uC0C1\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4 +CustomBoundsDialog.title=\uC0AC\uC6A9\uC790 \uC815\uC758 \uC2DC\uAC04 \uACBD\uACC4 \uBC0F \uAC04\uACA9 +PlaySettingsDialog.twoBoundsRadio.text=\uB450 \uACBD\uACC4 +CustomBoundsDialog.labelMinDate.text=\uCD5C\uC19F\uAC12: +TimelineTopComponent.disableButon.toolTipText=\uD0C0\uC784\uB77C\uC778 \uBE44\uD65C\uC131\uD654 +CTL_TimelineTopComponent=\uD0C0\uC784\uB77C\uC778 +TimelineTopComponent.settings.setPlaySettings=\uC7AC\uC0DD \uC124\uC815... +TimelineTopComponent.playButton.intevalNotSet=\uC560\uB2C8\uBA54\uC774\uC158 \uAC04\uACA9\uC774 \uC5C6\uC73C\uBA74 \uD0C0\uC784\uB77C\uC778\uC744 \uC560\uB2C8\uBA54\uC774\uC158 \uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC7AC\uC0DD \uBC84\uD2BC\uC744 \uD074\uB9AD\uD558\uAE30 \uC804\uC5D0 \uC124\uC815\uD558\uC2ED\uC2DC\uC624 +TimelineTopComponent.charts.disable=\uBE44\uD65C\uC131\uD654 +TimelineTopComponent.settings.setCustomBounds=\uC0AC\uC6A9\uC790 \uACBD\uACC4 \uC124\uC815... +CustomBoundsDialog.titleHeader.description=\uD0C0\uC784\uB77C\uC778 \uACBD\uACC4 \uB610\uB294 \uAC04\uACA9\uC744 \uC9C0\uC815\uD569\uB2C8\uB2E4. \uAD6C\uAC04 \uACBD\uACC4\uB294 \uCD5C\uC19F\uAC12\uACFC \uCD5C\uB313\uAC12\uC785\uB2C8\uB2E4. \uAC04\uACA9\uC740 \uD604\uC7AC \uC120\uD0DD\uB41C \uC2DC\uAC04 \uCC3D\uC785\uB2C8\uB2E4. +PlaySettingsDialog.labelDelay.text=\uC9C0\uC5F0: +TimelineTooltip.max=\uB05D +CTL_TimelineWindowAction=\uD0C0\uC784\uB77C\uC778 +TimelineTooltip.min=\uC2DC\uC791 +CustomBoundsDialog.resetDefaultsDate.text=\uAE30\uBCF8\uAC12 \uC7AC\uC124\uC815 +CustomBoundsDialog.TimeValidator.max=\uAC12\uC740 \uCD5C\uB313\uAC12 \uC774\uC0C1\uC77C \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 +PlaySettingsDialog.title=\uC560\uB2C8\uBA54\uC774\uC158 \uC124\uC815 +TimelineTooltip.chart=\uD604\uC7AC \uAC12\uC740 +TimelineTopComponent.enableTimelineButton.text=\uD0C0\uC784\uB77C\uC778 \uD65C\uC131\uD654 +OpenIDE-Module-Short-Description=\uD0C0\uC784\uB77C\uC778 UI +TimelineTopComponent.disabledTimelineLabel.text=\uD0C0\uC784\uB77C\uC778 \uBE44\uD65C\uC131\uD654\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uADF8\uB798\uD504\uAC00 \uB3D9\uC801\uC774\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. +TimelineTopComponent.closeButton.toolTipText=\uD0C0\uC784\uB77C\uC778 \uB2EB\uAE30 +PlaySettingsDialog.labelStepSize.text=\uB2E8\uACC4 \uD06C\uAE30: +TimelineTopComponent.enableTimelineButton.toolTipText=\uC2DC\uAC04 \uAE30\uBC18 \uD544\uD130\uB9C1\uC744 \uC704\uD55C \uD0C0\uC784\uB77C\uC778 \uD65C\uC131\uD654 +CustomBoundsDialog.labelEndDate.text=\uB05D: +TimelineTopComponent.playButton.toolTipText=\uC7AC\uC0DD +TimeFormatDialog.dateTimeRadio.text=\uB0A0\uC9DC \uC2DC\uAC04 +TimeFormatDialog.dateRadio.text=\uB0A0\uC9DC diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_nl.properties b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_nl.properties new file mode 100644 index 0000000000..44ad96ac59 --- /dev/null +++ b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_nl.properties @@ -0,0 +1,55 @@ +OpenIDE-Module-Short-Description=Gebruikersinterface tijdlijn +CTL_TimelineAction=Tijdlijn +CTL_TimelineTopComponent=Tijdlijn +CTL_TimelineWindowAction=Tijdlijn +!HINT_TimelineTopComponent= +TimelineTopComponent.enableButton.text= +TimelineTopComponent.closeButton.toolTipText=Tijdlijn sluiten +TimelineTopComponent.enableTimelineButton.text=Tijdlijn inschakelen +TimelineTopComponent.playButton.toolTipText=Afspelen +TimelineTopComponent.playButton.intevalNotSet=Cannot animate timeline without an animation interval. Set one before clicking play button +CustomBoundsDialog.labelStartDate.text=Start: +CustomBoundsDialog.labelIntervalDate.text=Interval +CustomBoundsDialog.labelMinDate.text=Minimum: +CustomBoundsDialog.labelMaxDate.text=Maximum: +CustomBoundsDialog.resetDefaultsDate.text=Standaardwaarden herstellen +CustomBoundsDialog.labelEndDate.text=End: +CustomBoundsDialog.labelBounds.text=Grenzen +CustomBoundsDialog.titleHeader.title=Custom time bounds & interval +CustomBoundsDialog.titleHeader.description=Customize the timeline bounds or interval. The bounds are the minimum and maximum values. The interval is the currently selected time window. +CustomBoundsDialog.title=Custom time bounds & interval +CustomBoundsDialog.FormatValidator.date=Datum moet geformatteerd zijn {0} +CustomBoundsDialog.FormatValidator.double=Not a valid double number +CustomBoundsDialog.TimeValidator=Lower bound can't be after upper bound +CustomBoundsDialog.TimeValidator.min=Waarde moet ten minste het minimum zijn +CustomBoundsDialog.TimeValidator.max=Waarde kan niet hoger dan het maximum zijn +TimelineTopComponent.charts.disable=Uitschakelen +TimelineTopComponent.settings.setCustomBounds=Aangepaste grenzen instellen... +TimelineTopComponent.charts.empty=No charts... +TimelineTopComponent.disabledTimelineLabel.text=Tijdlijn uitgeschakeld. De graaf is niet dynamisch. +PlaySettingsDialog.headerTitle.title=Animatie-instellingen +PlaySettingsDialog.headerTitle.description=Set up animation speed and step +PlaySettingsDialog.labelDelay.text=Vertraging: +PlaySettingsDialog.labelStepSize.text=Stapgrootte: +PlaySettingsDialog.labelPerc.text=% +PlaySettingsDialog.labelMs.text=ms +PlaySettingsDialog.labelMode.text=Modus +PlaySettingsDialog.oneBoundRadio.text=One bound +PlaySettingsDialog.twoBoundsRadio.text=Two bounds +PlaySettingsDialog.labelSpeed.text=Snelheid +PlaySettingsDialog.backwardCheckbox.text=Backward +PlaySettingsDialog.title=Animatie-instellingen +TimelineTopComponent.settings.setPlaySettings=Afspeelinstellingen instellen... +TimelineTooltip.min=Start +TimelineTooltip.max=End +TimelineTooltip.position=Huidige positie is +TimelineTooltip.chart=Huidige waarde is +TimelineTopComponent.settings.setTimeFormat=Tijdnotatie instellen... +TimeFormatDialog.title=Tijdnotatie +TimelineTopComponent.enableTimelineButton.toolTipText=Enable timeline for time-based filtering +TimelineTopComponent.disableButon.toolTipText=Tijdlijn uitschakelen +TimeFormatDialog.headerTitle.title=Time format settings +TimeFormatDialog.headerTitle.description=Set up the time format +TimeFormatDialog.numericRadio.text=Numeriek +TimeFormatDialog.dateRadio.text=Datum +TimeFormatDialog.dateTimeRadio.text=Datum en tijd diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_oc.properties b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_oc.properties index 148df6b14c..e68af05bee 100644 --- a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_oc.properties +++ b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_oc.properties @@ -1,14 +1,55 @@ -# Occitan (post 1500) translation for gephi -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the gephi package. -# FIRST AUTHOR , 2010. -# -!=Project-Id-Version\: gephi\nReport-Msgid-Bugs-To\: FULL NAME \nPOT-Creation-Date\: 2010-04-07 13\:16+0200\nPO-Revision-Date\: 2010-10-21 13\:41+0000\nLast-Translator\: C\u00e9dric VALMARY (Tot en \u00f2c) \nLanguage-Team\: Occitan (post 1500) \nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nX-Launchpad-Export-Date\: 2011-03-13 04\:47+0000\nX-Generator\: Launchpad (build 12559)\n - +OpenIDE-Module-Short-Description=Timeline UI CTL_TimelineAction=Timeline - CTL_TimelineTopComponent=Timeline - -!OpenIDE-Module-Short-Description= - -!TimelineTopComponent.closeButton.toolTipText= +CTL_TimelineWindowAction=Timeline +!HINT_TimelineTopComponent= +TimelineTopComponent.enableButton.text= +TimelineTopComponent.closeButton.toolTipText=Close the Timeline +TimelineTopComponent.enableTimelineButton.text=Enable Timeline +TimelineTopComponent.playButton.toolTipText=Play +TimelineTopComponent.playButton.intevalNotSet=Cannot animate timeline without an animation interval. Set one before clicking play button +CustomBoundsDialog.labelStartDate.text=Start: +CustomBoundsDialog.labelIntervalDate.text=Interval +CustomBoundsDialog.labelMinDate.text=Minimum: +CustomBoundsDialog.labelMaxDate.text=Maximum: +CustomBoundsDialog.resetDefaultsDate.text=Reset defaults +CustomBoundsDialog.labelEndDate.text=End: +CustomBoundsDialog.labelBounds.text=Bounds +CustomBoundsDialog.titleHeader.title=Custom time bounds & interval +CustomBoundsDialog.titleHeader.description=Customize the timeline bounds or interval. The bounds are the minimum and maximum values. The interval is the currently selected time window. +CustomBoundsDialog.title=Custom time bounds & interval +CustomBoundsDialog.FormatValidator.date=Date must be formatted {0} +CustomBoundsDialog.FormatValidator.double=Not a valid double number +CustomBoundsDialog.TimeValidator=Lower bound can't be after upper bound +CustomBoundsDialog.TimeValidator.min=Value needs to be at least the minimum +CustomBoundsDialog.TimeValidator.max=Value can't be more than the maximum +TimelineTopComponent.charts.disable=Disable +TimelineTopComponent.settings.setCustomBounds=Set custom bounds... +TimelineTopComponent.charts.empty=No charts... +TimelineTopComponent.disabledTimelineLabel.text=Timeline disabled. The graph is not dynamic. +PlaySettingsDialog.headerTitle.title=Animation settings +PlaySettingsDialog.headerTitle.description=Set up animation speed and step +PlaySettingsDialog.labelDelay.text=Delay: +PlaySettingsDialog.labelStepSize.text=Step size: +PlaySettingsDialog.labelPerc.text=% +PlaySettingsDialog.labelMs.text=ms +PlaySettingsDialog.labelMode.text=Mode +PlaySettingsDialog.oneBoundRadio.text=One bound +PlaySettingsDialog.twoBoundsRadio.text=Two bounds +PlaySettingsDialog.labelSpeed.text=Speed +PlaySettingsDialog.backwardCheckbox.text=Backward +PlaySettingsDialog.title=Animation settings +TimelineTopComponent.settings.setPlaySettings=Set play settings... +TimelineTooltip.min=Start +TimelineTooltip.max=End +TimelineTooltip.position=Current position is +TimelineTooltip.chart=Current value is +TimelineTopComponent.settings.setTimeFormat=Set time format... +TimeFormatDialog.title=Time format +TimelineTopComponent.enableTimelineButton.toolTipText=Enable timeline for time-based filtering +TimelineTopComponent.disableButon.toolTipText=Disable the timeline +TimeFormatDialog.headerTitle.title=Time format settings +TimeFormatDialog.headerTitle.description=Set up the time format +TimeFormatDialog.numericRadio.text=Numeric +TimeFormatDialog.dateRadio.text=Date +TimeFormatDialog.dateTimeRadio.text=Datetime diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_pt.properties b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_pt.properties new file mode 100644 index 0000000000..d6d417f134 --- /dev/null +++ b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_pt.properties @@ -0,0 +1,51 @@ +CustomBoundsDialog.labelEndDate.text=Fim: +TimelineTooltip.chart=O valor atual \u00E9 +TimeFormatDialog.dateTimeRadio.text=Data e hora +OpenIDE-Module-Short-Description=Interface de utilizador da Linha do Tempo +CTL_TimelineAction=Linha do Tempo +CTL_TimelineTopComponent=Linha do Tempo +CTL_TimelineWindowAction=Linha do tempo +TimelineTopComponent.closeButton.toolTipText=Fechar a Linha do Tempo +TimelineTopComponent.enableTimelineButton.text=Ativar linha do tempo +TimelineTopComponent.playButton.toolTipText=Reproduzir +CustomBoundsDialog.labelStartDate.text=In\u00EDcio: +CustomBoundsDialog.labelIntervalDate.text=Intervalo +CustomBoundsDialog.labelMinDate.text=M\u00EDnimo: +CustomBoundsDialog.labelMaxDate.text=M\u00E1ximo: +CustomBoundsDialog.resetDefaultsDate.text=Retornar \u00E0s configura\u00E7\u00F5es padr\u00E3o +CustomBoundsDialog.labelBounds.text=Limites +CustomBoundsDialog.titleHeader.title=Limites de tempo e intervalo personalizados +CustomBoundsDialog.title=Limites de tempo e intervalo personalizados +CustomBoundsDialog.FormatValidator.date=A data deve ser formatada como {0} +CustomBoundsDialog.FormatValidator.double=N\u00E3o \u00E9 um n\u00FAmero (double) v\u00E1lido +CustomBoundsDialog.TimeValidator=O limite inferior n\u00E3o pode ser maior que o limite superior +CustomBoundsDialog.TimeValidator.min=O valor deve ser pelo menos igual ao m\u00EDnimo +CustomBoundsDialog.TimeValidator.max=O valor n\u00E3o pode ser maior do que o m\u00E1ximo +TimelineTopComponent.charts.disable=Desativar +TimelineTopComponent.settings.setCustomBounds=Configurar limites personalizados... +TimelineTopComponent.charts.empty=Sem gr\u00E1ficos... +TimelineTopComponent.disabledTimelineLabel.text=Linha do tempo desativada. O grafo n\u00E3o \u00E9 din\u00E2mico. +PlaySettingsDialog.headerTitle.title=Configura\u00E7\u00F5es de anima\u00E7\u00E3o +PlaySettingsDialog.headerTitle.description=Configurar velocidade e passo da anima\u00E7\u00E3o +PlaySettingsDialog.labelDelay.text=Atraso: +PlaySettingsDialog.labelStepSize.text=Tamanho do passo: +PlaySettingsDialog.labelPerc.text=% +PlaySettingsDialog.labelMs.text=ms +PlaySettingsDialog.labelMode.text=Modo +PlaySettingsDialog.oneBoundRadio.text=Um limite +PlaySettingsDialog.twoBoundsRadio.text=Dois limites +PlaySettingsDialog.labelSpeed.text=Velocidade +PlaySettingsDialog.backwardCheckbox.text=Para tr\u00E1s +PlaySettingsDialog.title=Configura\u00E7\u00F5es de anima\u00E7\u00E3o +TimelineTopComponent.settings.setPlaySettings=Configurar reprodu\u00E7\u00E3o... +TimelineTooltip.min=In\u00EDcio +TimelineTooltip.max=Fim +TimelineTooltip.position=A posi\u00E7\u00E3o atual \u00E9 +TimelineTopComponent.settings.setTimeFormat=Configurar formato de data/hora... +TimeFormatDialog.title=Formato de data/hora +TimelineTopComponent.enableTimelineButton.toolTipText=Ativar linha do tempo para filtro temporal +TimelineTopComponent.disableButon.toolTipText=Desativar a linha do tempo +TimeFormatDialog.headerTitle.title=Configura\u00E7\u00F5es de formato de data/hora +TimeFormatDialog.headerTitle.description=Configurar formato de data/hora +TimeFormatDialog.numericRadio.text=Num\u00E9rico +TimeFormatDialog.dateRadio.text=Data diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_pt_BR.properties b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_pt_BR.properties index d39d55c887..f34e0d9b80 100644 --- a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_pt_BR.properties +++ b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_pt_BR.properties @@ -1,110 +1,55 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -# C\u00e9lio Faria Jr. , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-18 11\:15+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -CTL_TimelineAction=Linha do Tempo - -CTL_TimelineTopComponent=Linha do Tempo - -CTL_TimelineWindowAction=Linha do tempo - -OpenIDE-Module-Short-Description=Interface de usu\u00e1rio da Linha do Tempo - -TimelineTopComponent.closeButton.toolTipText=Fechar a Linha do Tempo - -TimelineTopComponent.enableTimelineButton.text=Habilitar linha do tempo - -TimelineTopComponent.playButton.toolTipText=Reproduzir - -CustomBoundsDialog.labelStartDate.text=In\u00edcio\: - -CustomBoundsDialog.labelIntervalDate.text=Intervalo - -CustomBoundsDialog.labelMinDate.text=M\u00ednimo\: - -CustomBoundsDialog.labelMaxDate.text=M\u00e1ximo\: - -CustomBoundsDialog.resetDefaultsDate.text=Retornar \u00e0s configura\u00e7\u00f5es padr\u00e3o - -CustomBoundsDialog.labelEndDate.text=Fim\: - -CustomBoundsDialog.labelBounds.text=Limites - -CustomBoundsDialog.titleHeader.title=Limites de tempo e intervalo personalizados - -CustomBoundsDialog.titleHeader.description=Personalizar os limites de tempo e intervalo - -CustomBoundsDialog.title=Limites de tempo e intervalo personalizados - -CustomBoundsDialog.FormatValidator.date=A data deve ser formatada como {0} - -CustomBoundsDialog.FormatValidator.double=N\u00e3o \u00e9 um n\u00famero (double) v\u00e1lido - -CustomBoundsDialog.TimeValidator=O limite inferior n\u00e3o pode ser maior que o limite superior - -CustomBoundsDialog.TimeValidator.min=O valor deve ser pelo menos igual ao m\u00ednimo - -CustomBoundsDialog.TimeValidator.max=O valor n\u00e3o pode ser maior do que o m\u00e1ximo - -TimelineTopComponent.charts.disable=Desabilitar - -TimelineTopComponent.settings.setCustomBounds=Configurar limites personalizados... - -TimelineTopComponent.charts.empty=Sem gr\u00e1ficos... - -TimelineTopComponent.disabledTimelineLabel.text=Linha do tempo desabilitada. O grafo n\u00e3o \u00e9 din\u00e2mico. - -PlaySettingsDialog.headerTitle.title=Configura\u00e7\u00f5es de anima\u00e7\u00e3o - -PlaySettingsDialog.headerTitle.description=Configurar velocidade e passo da anima\u00e7\u00e3o - -PlaySettingsDialog.labelDelay.text=Atraso\: - -PlaySettingsDialog.labelStepSize.text=Tamanho do passo\: - -PlaySettingsDialog.labelPerc.text=% - -PlaySettingsDialog.labelMs.text=ms - -PlaySettingsDialog.labelMode.text=Modo - -PlaySettingsDialog.oneBoundRadio.text=Um limite - -PlaySettingsDialog.twoBoundsRadio.text=Dois limites - -PlaySettingsDialog.labelSpeed.text=Velocidade - -PlaySettingsDialog.backwardCheckbox.text=Para tr\u00e1s - -PlaySettingsDialog.title=Configura\u00e7\u00f5es de anima\u00e7\u00e3o - -TimelineTopComponent.settings.setPlaySettings=Configurar reprodu\u00e7\u00e3o... - -TimelineTooltip.min=In\u00edcio - -TimelineTooltip.max=Fim - -TimelineTooltip.position=A posi\u00e7\u00e3o atual \u00e9 - -TimelineTooltip.chart=O valor atual \u00e9 - -TimelineTopComponent.settings.setTimeFormat=Configurar formato de data/hora... - -TimeFormatDialog.title=Formato de data/hora - -TimelineTopComponent.enableTimelineButton.toolTipText=Habilitar linha do tempo para filtro temporal - -TimelineTopComponent.disableButon.toolTipText=Desabilitar a linha do tempo - -TimeFormatDialog.headerTitle.title=Configura\u00e7\u00f5es de formato de data/hora - -TimeFormatDialog.headerTitle.description=Configurar formato de data/hora - -TimeFormatDialog.numericRadio.text=Num\u00e9rico - -TimeFormatDialog.dateRadio.text=Data +OpenIDE-Module-Short-Description=Interface de usuαrio da Linha do Tempo +CTL_TimelineAction=Linha do Tempo +CTL_TimelineTopComponent=Linha do Tempo +CTL_TimelineWindowAction=Linha do tempo +!HINT_TimelineTopComponent= +TimelineTopComponent.enableButton.text= +TimelineTopComponent.closeButton.toolTipText=Fechar a Linha do Tempo +TimelineTopComponent.enableTimelineButton.text=Habilitar linha do tempo +TimelineTopComponent.playButton.toolTipText=Reproduzir +# TimelineTopComponent.playButton.intevalNotSet=Cannot animate timeline without an animation interval. Set one before clicking play button +CustomBoundsDialog.labelStartDate.text=Inνcio: +CustomBoundsDialog.labelIntervalDate.text=Intervalo +CustomBoundsDialog.labelMinDate.text=Mνnimo: +CustomBoundsDialog.labelMaxDate.text=Mαximo: +CustomBoundsDialog.resetDefaultsDate.text=Retornar ΰs configuraηυes padrγo +CustomBoundsDialog.labelEndDate.text=Fim: +CustomBoundsDialog.labelBounds.text=Limites +CustomBoundsDialog.titleHeader.title=Limites de tempo e intervalo personalizados +CustomBoundsDialog.titleHeader.description=Personalizar os limites de tempo e intervalo +CustomBoundsDialog.title = Limites de tempo e intervalo personalizados +CustomBoundsDialog.FormatValidator.date = A data deve ser formatada como {0} +CustomBoundsDialog.FormatValidator.double = Nγo ι um nϊmero (double) vαlido +CustomBoundsDialog.TimeValidator = O limite inferior nγo pode ser maior que o limite superior +CustomBoundsDialog.TimeValidator.min = O valor deve ser pelo menos igual ao mνnimo +CustomBoundsDialog.TimeValidator.max = O valor nγo pode ser maior do que o mαximo +TimelineTopComponent.charts.disable = Desabilitar +TimelineTopComponent.settings.setCustomBounds = Configurar limites personalizados... +TimelineTopComponent.charts.empty = Sem grαficos... +TimelineTopComponent.disabledTimelineLabel.text=Linha do tempo desabilitada. O grafo nγo ι dinβmico. +PlaySettingsDialog.headerTitle.title=Configuraηυes de animaηγo +PlaySettingsDialog.headerTitle.description=Configurar velocidade e passo da animaηγo +PlaySettingsDialog.labelDelay.text=Atraso: +PlaySettingsDialog.labelStepSize.text=Tamanho do passo: +PlaySettingsDialog.labelPerc.text=% +PlaySettingsDialog.labelMs.text=ms +PlaySettingsDialog.labelMode.text=Modo +PlaySettingsDialog.oneBoundRadio.text=Um limite +PlaySettingsDialog.twoBoundsRadio.text=Dois limites +PlaySettingsDialog.labelSpeed.text=Velocidade +PlaySettingsDialog.backwardCheckbox.text=Para trαs +PlaySettingsDialog.title = Configuraηυes de animaηγo +TimelineTopComponent.settings.setPlaySettings = Configurar reproduηγo... +TimelineTooltip.min = Inνcio +TimelineTooltip.max = Fim +TimelineTooltip.position = A posiηγo atual ι +TimelineTooltip.chart = O valor atual ι +TimelineTopComponent.settings.setTimeFormat = Configurar formato de data/hora... +TimeFormatDialog.title = Formato de data/hora +TimelineTopComponent.enableTimelineButton.toolTipText=Habilitar linha do tempo para filtro temporal +TimelineTopComponent.disableButon.toolTipText=Desabilitar a linha do tempo +TimeFormatDialog.headerTitle.title=Configuraηυes de formato de data/hora +TimeFormatDialog.headerTitle.description=Configurar formato de data/hora +TimeFormatDialog.numericRadio.text=Numιrico +TimeFormatDialog.dateRadio.text=Data +TimeFormatDialog.dateTimeRadio.text=Data e hora diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_ro.properties b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_ro.properties new file mode 100644 index 0000000000..57cb9b4979 --- /dev/null +++ b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_ro.properties @@ -0,0 +1,55 @@ + + +CustomBoundsDialog.TimeValidator.min=Valoarea trebuie s\u0103 fie cel pu\u021Bin egal\u0103 cu minimul +CTL_TimelineWindowAction=Cronologie +OpenIDE-Module-Short-Description=Interfata cronologie +CTL_TimelineAction=Cronologie +CTL_TimelineTopComponent=Cronologie +TimelineTopComponent.closeButton.toolTipText=\u00CEnchide cronologia +TimelineTopComponent.playButton.toolTipText=Redare +CustomBoundsDialog.labelStartDate.text=\u00CEnceput: +CustomBoundsDialog.labelBounds.text=Limite +CustomBoundsDialog.titleHeader.title=Limit\u0103 de timp \u0219i interval personalizate +CustomBoundsDialog.FormatValidator.date=Data trebuie formatat\u0103 {0} +CustomBoundsDialog.TimeValidator.max=Valoarea nu poate fi mai mare dec\u00E2t maximul +TimeFormatDialog.dateRadio.text=Dat\u0103 +TimeFormatDialog.dateTimeRadio.text=Dat\u0103 \u0219i or\u0103 +TimelineTopComponent.enableTimelineButton.text=Activeaz\u0103 cronologia +CustomBoundsDialog.labelEndDate.text=Sf\u00E2r\u0219it: +CustomBoundsDialog.TimeValidator=Limita inferioar\u0103 nu poate fi dup\u0103 limita superioar\u0103 +CustomBoundsDialog.labelIntervalDate.text=Interval +CustomBoundsDialog.labelMinDate.text=Minim: +CustomBoundsDialog.resetDefaultsDate.text=Reseteaz\u0103 la valorile implicite +CustomBoundsDialog.titleHeader.description=Personalizeaz\u0103 limitele de timp sau intervalul. Limitele sunt valorile minime \u0219i maxime. Intervalul este fereastra de timp selectat\u0103. +TimelineTopComponent.playButton.intevalNotSet=Nu se poate anima cronologia f\u0103r\u0103 un interval de anima\u021Bie. Seteaz\u0103 unul \u00EEnainte de a face click pe butonul de redare +CustomBoundsDialog.labelMaxDate.text=Maxim: +CustomBoundsDialog.title=Limit\u0103 de timp \u0219i interval personalizate +CustomBoundsDialog.FormatValidator.double=Nu este un num\u0103r "double" valid +TimelineTopComponent.settings.setCustomBounds=Seteaz\u0103 limite personalizate... +TimelineTooltip.chart=Valoarea curent\u0103 este +TimelineTopComponent.charts.disable=Dezactiveaz\u0103 +TimelineTopComponent.charts.empty=Nicio diagram\u0103... +TimelineTopComponent.disabledTimelineLabel.text=Cronologie dezactivat\u0103. Graful nu este dinamic. +PlaySettingsDialog.headerTitle.description=Seteaz\u0103 viteza \u0219i pasul anima\u021Biei +PlaySettingsDialog.labelDelay.text=\u00CEnt\u00E2rziere: +PlaySettingsDialog.labelStepSize.text=Dimensiune pas: +PlaySettingsDialog.labelPerc.text=% +PlaySettingsDialog.labelMs.text=ms +PlaySettingsDialog.twoBoundsRadio.text=Dou\u0103 limite +PlaySettingsDialog.title=Set\u0103ri de anima\u021Bie +TimelineTopComponent.settings.setTimeFormat=Seteaz\u0103 formatul de timp... +TimelineTopComponent.disableButon.toolTipText=Dezactiveaz\u0103 cronologia +TimeFormatDialog.numericRadio.text=Numeric +PlaySettingsDialog.headerTitle.title=Set\u0103ri de anima\u021Bie +PlaySettingsDialog.labelMode.text=Mod +PlaySettingsDialog.oneBoundRadio.text=O limit\u0103 +PlaySettingsDialog.labelSpeed.text=Vitez\u0103 +PlaySettingsDialog.backwardCheckbox.text=\u00CEnapoi +TimelineTopComponent.settings.setPlaySettings=Seteaz\u0103 op\u021Biunile de redare... +TimelineTooltip.min=\u00CEnceput +TimelineTooltip.position=Pozi\u021Bia curent\u0103 este +TimelineTopComponent.enableTimelineButton.toolTipText=Activeaz\u0103 cronologia pentru filtrare temporal\u0103 +TimelineTooltip.max=Sf\u00E2r\u0219it +TimeFormatDialog.title=Format de timp +TimeFormatDialog.headerTitle.title=Set\u0103ri pentru formatul de timp +TimeFormatDialog.headerTitle.description=Configureaz\u0103 formatul de timp diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_ru.properties b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_ru.properties index f35d98f5f4..d3bb6df2b7 100644 --- a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_ru.properties +++ b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_ru.properties @@ -1,109 +1,55 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:35+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -CTL_TimelineAction=\u0428\u043a\u0430\u043b\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 - -CTL_TimelineTopComponent=\u0428\u043a\u0430\u043b\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 - -CTL_TimelineWindowAction=\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0448\u043a\u0430\u043b\u0430 - -OpenIDE-Module-Short-Description=UI \u0448\u043a\u0430\u043b\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u0438 - -TimelineTopComponent.closeButton.toolTipText=\u0417\u0430\u043a\u0440\u044b\u0442\u044c \u0448\u043a\u0430\u043b\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 - -TimelineTopComponent.enableTimelineButton.text=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0448\u043a\u0430\u043b\u0443 - -TimelineTopComponent.playButton.toolTipText=\u041f\u0440\u043e\u0438\u0433\u0440\u0430\u0442\u044c - -CustomBoundsDialog.labelStartDate.text=\u0421\u0442\u0430\u0440\u0442\: - -CustomBoundsDialog.labelIntervalDate.text=\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b - -CustomBoundsDialog.labelMinDate.text=\u041c\u0438\u043d\u0438\u043c\u0443\u043c\: - -CustomBoundsDialog.labelMaxDate.text=\u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c\: - -CustomBoundsDialog.resetDefaultsDate.text=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e - -CustomBoundsDialog.labelEndDate.text=\u0421\u0442\u043e\u043f\: - -CustomBoundsDialog.labelBounds.text=\u0413\u0440\u0430\u043d\u0438\u0446\u044b - -CustomBoundsDialog.titleHeader.title=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0438 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b - -CustomBoundsDialog.titleHeader.description=\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0438 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b. \u0413\u0440\u0430\u043d\u0438\u0446\u044b -- \u044d\u0442\u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b -- \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u043e\u043a\u043d\u043e. - -CustomBoundsDialog.title=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0438 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b - -CustomBoundsDialog.FormatValidator.date=\u0414\u0430\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430 {0} - -CustomBoundsDialog.FormatValidator.double=\u041d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0441 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e - -CustomBoundsDialog.TimeValidator=\u041d\u0438\u0436\u043d\u044f\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u0432\u0435\u0440\u0445\u043d\u044f\u044f. - -CustomBoundsDialog.TimeValidator.min=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0430 - -CustomBoundsDialog.TimeValidator.max=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c\u0430 - -TimelineTopComponent.charts.disable=\u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c - -TimelineTopComponent.settings.setCustomBounds=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u044b... - -TimelineTopComponent.charts.empty=\u0411\u0435\u0437 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432... - -TimelineTopComponent.disabledTimelineLabel.text=\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0448\u043a\u0430\u043b\u0430 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430. \u0413\u0440\u0430\u0444 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u043c. - -PlaySettingsDialog.headerTitle.title=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 - -PlaySettingsDialog.headerTitle.description=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438 \u0448\u0430\u0433\u0430 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 - -PlaySettingsDialog.labelDelay.text=\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430\: - -PlaySettingsDialog.labelStepSize.text=\u0420\u0430\u0437\u043c\u0435\u0440 \u0448\u0430\u0433\u0430\: - -PlaySettingsDialog.labelPerc.text=% - -PlaySettingsDialog.labelMs.text=\u043c\u0441 - -PlaySettingsDialog.labelMode.text=\u0420\u0435\u0436\u0438\u043c - -PlaySettingsDialog.oneBoundRadio.text=\u041e\u0434\u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0430 - -PlaySettingsDialog.twoBoundsRadio.text=\u0414\u0432\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b - -PlaySettingsDialog.labelSpeed.text=\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c - -PlaySettingsDialog.backwardCheckbox.text=\u041d\u0430\u0437\u0430\u0434 - -PlaySettingsDialog.title=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 - -TimelineTopComponent.settings.setPlaySettings=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f... - -TimelineTooltip.min=\u0421\u0442\u0430\u0440\u0442 - -TimelineTooltip.max=\u0421\u0442\u043e\u043f - -TimelineTooltip.position=\u0422\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0440\u0430\u0432\u043d\u0430 - -TimelineTooltip.chart=\u0422\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0432\u043d\u043e - -!TimelineTopComponent.settings.setTimeFormat= - -!TimeFormatDialog.title= - -TimelineTopComponent.enableTimelineButton.toolTipText=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0448\u043a\u0430\u043b\u044b \u0434\u043b\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 - -TimelineTopComponent.disableButon.toolTipText=\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0448\u043a\u0430\u043b\u044b - -!TimeFormatDialog.headerTitle.title= - -!TimeFormatDialog.headerTitle.description= - -!TimeFormatDialog.numericRadio.text= - -!TimeFormatDialog.dateRadio.text= +OpenIDE-Module-Short-Description=UI \u0448\u043a\u0430\u043b\u044b \u0432\u0440\u0435\u043c\u0435\u043d\u0438 +CTL_TimelineAction=\u0428\u043a\u0430\u043b\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 +CTL_TimelineTopComponent=\u0428\u043a\u0430\u043b\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 +CTL_TimelineWindowAction=\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0448\u043a\u0430\u043b\u0430 +!HINT_TimelineTopComponent= +TimelineTopComponent.enableButton.text= +TimelineTopComponent.closeButton.toolTipText=\u0417\u0430\u043a\u0440\u044b\u0442\u044c \u0448\u043a\u0430\u043b\u0443 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 +TimelineTopComponent.enableTimelineButton.text=\u0412\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0448\u043a\u0430\u043b\u0443 +TimelineTopComponent.playButton.toolTipText=\u041f\u0440\u043e\u0438\u0433\u0440\u0430\u0442\u044c +# TimelineTopComponent.playButton.intevalNotSet=Cannot animate timeline without an animation interval. Set one before clicking play button +CustomBoundsDialog.labelStartDate.text=\u0421\u0442\u0430\u0440\u0442: +CustomBoundsDialog.labelIntervalDate.text=\u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b +CustomBoundsDialog.labelMinDate.text=\u041c\u0438\u043d\u0438\u043c\u0443\u043c: +CustomBoundsDialog.labelMaxDate.text=\u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c: +CustomBoundsDialog.resetDefaultsDate.text=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e +CustomBoundsDialog.labelEndDate.text=\u0421\u0442\u043e\u043f: +CustomBoundsDialog.labelBounds.text=\u0413\u0440\u0430\u043d\u0438\u0446\u044b +CustomBoundsDialog.titleHeader.title=\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0438 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b +CustomBoundsDialog.titleHeader.description=\u041f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u044b\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0438 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b. \u0413\u0440\u0430\u043d\u0438\u0446\u044b -- \u044d\u0442\u043e \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0438 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0418\u043d\u0442\u0435\u0440\u0432\u0430\u043b -- \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0435 \u043e\u043a\u043d\u043e. +CustomBoundsDialog.title = \u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b \u0438 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b +CustomBoundsDialog.FormatValidator.date = \u0414\u0430\u0442\u0430 \u0434\u043e\u043b\u0436\u043d\u0430 \u0431\u044b\u0442\u044c \u043e\u0442\u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0430 {0} +CustomBoundsDialog.FormatValidator.double = \u041d\u0435\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e\u0435 \u0434\u0440\u043e\u0431\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0441 \u0434\u0432\u043e\u0439\u043d\u043e\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u044c\u044e +CustomBoundsDialog.TimeValidator = \u041d\u0438\u0436\u043d\u044f\u044f \u0433\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0431\u043e\u043b\u044c\u0448\u0435 \u0447\u0435\u043c \u0432\u0435\u0440\u0445\u043d\u044f\u044f. +CustomBoundsDialog.TimeValidator.min = \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u0430 +CustomBoundsDialog.TimeValidator.max = \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043d\u0435 \u0431\u043e\u043b\u0435\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0443\u043c\u0430 +TimelineTopComponent.charts.disable = \u041e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u044c +TimelineTopComponent.settings.setCustomBounds = \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0433\u0440\u0430\u043d\u0438\u0446\u044b... +TimelineTopComponent.charts.empty = \u0411\u0435\u0437 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432... +TimelineTopComponent.disabledTimelineLabel.text=\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0448\u043a\u0430\u043b\u0430 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0430. \u0413\u0440\u0430\u0444 \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u043c. +PlaySettingsDialog.headerTitle.title=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 +PlaySettingsDialog.headerTitle.description=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0438 \u0448\u0430\u0433\u0430 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 +PlaySettingsDialog.labelDelay.text=\u0417\u0430\u0434\u0435\u0440\u0436\u043a\u0430: +PlaySettingsDialog.labelStepSize.text=\u0420\u0430\u0437\u043c\u0435\u0440 \u0448\u0430\u0433\u0430: +PlaySettingsDialog.labelPerc.text=% +PlaySettingsDialog.labelMs.text=\u043c\u0441 +PlaySettingsDialog.labelMode.text=\u0420\u0435\u0436\u0438\u043c +PlaySettingsDialog.oneBoundRadio.text=\u041e\u0434\u043d\u0430 \u0433\u0440\u0430\u043d\u0438\u0446\u0430 +PlaySettingsDialog.twoBoundsRadio.text=\u0414\u0432\u0435 \u0433\u0440\u0430\u043d\u0438\u0446\u044b +PlaySettingsDialog.labelSpeed.text=\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c +PlaySettingsDialog.backwardCheckbox.text=\u041d\u0430\u0437\u0430\u0434 +PlaySettingsDialog.title = \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438 +TimelineTopComponent.settings.setPlaySettings = \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0432\u043e\u0441\u043f\u0440\u043e\u0438\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f... +TimelineTooltip.min = \u0421\u0442\u0430\u0440\u0442 +TimelineTooltip.max = \u0421\u0442\u043e\u043f +TimelineTooltip.position = \u0422\u0435\u043a\u0443\u0449\u0430\u044f \u043f\u043e\u0437\u0438\u0446\u0438\u044f \u0440\u0430\u0432\u043d\u0430 +TimelineTooltip.chart = \u0422\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0440\u0430\u0432\u043d\u043e +# TimelineTopComponent.settings.setTimeFormat = Set time format... +# TimeFormatDialog.title = Time format +TimelineTopComponent.enableTimelineButton.toolTipText=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0448\u043a\u0430\u043b\u044b \u0434\u043b\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u0446\u0438\u0438 +TimelineTopComponent.disableButon.toolTipText=\u041e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0448\u043a\u0430\u043b\u044b +# TimeFormatDialog.headerTitle.title=Time format settings +# TimeFormatDialog.headerTitle.description=Set up the time format +# TimeFormatDialog.numericRadio.text=Numeric +# TimeFormatDialog.dateRadio.text=Date +# TimeFormatDialog.dateTimeRadio.text=Datetime diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_th.properties b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_tr.properties b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_tr.properties new file mode 100644 index 0000000000..f920234464 --- /dev/null +++ b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_tr.properties @@ -0,0 +1,55 @@ +OpenIDE-Module-Short-Description=Timeline UI +CTL_TimelineAction=Timeline +CTL_TimelineTopComponent=Timeline +CTL_TimelineWindowAction=Timeline +!HINT_TimelineTopComponent= +TimelineTopComponent.enableButton.text= +TimelineTopComponent.closeButton.toolTipText=Close the Timeline +TimelineTopComponent.enableTimelineButton.text=Enable Timeline +TimelineTopComponent.playButton.toolTipText=Play +TimelineTopComponent.playButton.intevalNotSet=Cannot animate timeline without an animation interval. Set one before clicking play button +CustomBoundsDialog.labelStartDate.text=Start: +CustomBoundsDialog.labelIntervalDate.text=Interval +CustomBoundsDialog.labelMinDate.text=Minimum: +CustomBoundsDialog.labelMaxDate.text=Maximum: +CustomBoundsDialog.resetDefaultsDate.text=Reset defaults +CustomBoundsDialog.labelEndDate.text=End: +CustomBoundsDialog.labelBounds.text=Bounds +CustomBoundsDialog.titleHeader.title=Custom time bounds & interval +CustomBoundsDialog.titleHeader.description=Customize the timeline bounds or interval. The bounds are the minimum and maximum values. The interval is the currently selected time window. +CustomBoundsDialog.title=Custom time bounds & interval +CustomBoundsDialog.FormatValidator.date=Date must be formatted {0} +CustomBoundsDialog.FormatValidator.double=Not a valid double number +CustomBoundsDialog.TimeValidator=Lower bound can't be after upper bound +CustomBoundsDialog.TimeValidator.min=Value needs to be at least the minimum +CustomBoundsDialog.TimeValidator.max=Value can't be more than the maximum +TimelineTopComponent.charts.disable=Disable +TimelineTopComponent.settings.setCustomBounds=Set custom bounds... +TimelineTopComponent.charts.empty=No charts... +TimelineTopComponent.disabledTimelineLabel.text=Timeline disabled. The graph is not dynamic. +PlaySettingsDialog.headerTitle.title=Animation settings +PlaySettingsDialog.headerTitle.description=Set up animation speed and step +PlaySettingsDialog.labelDelay.text=Delay: +PlaySettingsDialog.labelStepSize.text=Step size: +PlaySettingsDialog.labelPerc.text=% +PlaySettingsDialog.labelMs.text=ms +PlaySettingsDialog.labelMode.text=Mode +PlaySettingsDialog.oneBoundRadio.text=One bound +PlaySettingsDialog.twoBoundsRadio.text=Two bounds +PlaySettingsDialog.labelSpeed.text=H\u0131z +PlaySettingsDialog.backwardCheckbox.text=Backward +PlaySettingsDialog.title=Animation settings +TimelineTopComponent.settings.setPlaySettings=Set play settings... +TimelineTooltip.min=Start +TimelineTooltip.max=End +TimelineTooltip.position=Current position is +TimelineTooltip.chart=Current value is +TimelineTopComponent.settings.setTimeFormat=Set time format... +TimeFormatDialog.title=Time format +TimelineTopComponent.enableTimelineButton.toolTipText=Enable timeline for time-based filtering +TimelineTopComponent.disableButon.toolTipText=Disable the timeline +TimeFormatDialog.headerTitle.title=Time format settings +TimeFormatDialog.headerTitle.description=Set up the time format +TimeFormatDialog.numericRadio.text=Numeric +TimeFormatDialog.dateRadio.text=Date +TimeFormatDialog.dateTimeRadio.text=Datetime diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_uk.properties b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_uk.properties new file mode 100644 index 0000000000..d68ea0b0e5 --- /dev/null +++ b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_uk.properties @@ -0,0 +1,54 @@ +CustomBoundsDialog.labelMaxDate.text=\u041C\u0430\u043A\u0441\u0438\u043C\u0443\u043C: +CustomBoundsDialog.TimeValidator.min=\u0417\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u043C\u0430\u0454 \u0431\u0443\u0442\u0438 \u043F\u0440\u0438\u043D\u0430\u0439\u043C\u043D\u0456 \u043C\u0456\u043D\u0456\u043C\u0430\u043B\u044C\u043D\u0438\u043C +TimelineTopComponent.settings.setTimeFormat=\u0412\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0438 \u0444\u043E\u0440\u043C\u0430\u0442 \u0447\u0430\u0441\u0443... +CustomBoundsDialog.title=\u0421\u043F\u0435\u0446\u0456\u0430\u043B\u044C\u043D\u0456 \u0447\u0430\u0441\u043E\u0432\u0456 \u0440\u0430\u043C\u043A\u0438 \u0442\u0430 \u0456\u043D\u0442\u0435\u0440\u0432\u0430\u043B +CustomBoundsDialog.FormatValidator.double=\u041D\u0435\u0434\u0456\u0439\u0441\u043D\u0435 \u043F\u043E\u0434\u0432\u0456\u0439\u043D\u0435 \u0447\u0438\u0441\u043B\u043E +TimelineTooltip.chart=\u041F\u043E\u0442\u043E\u0447\u043D\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u044C +CustomBoundsDialog.FormatValidator.date=\u0414\u0430\u0442\u0430 \u043C\u0430\u0454 \u0431\u0443\u0442\u0438 \u0443 \u0444\u043E\u0440\u043C\u0430\u0442\u0456 {0} +TimelineTopComponent.charts.disable=\u0412\u0438\u043C\u043A\u043D\u0443\u0442\u0438 +CustomBoundsDialog.labelMinDate.text=\u041C\u0456\u043D\u0456\u043C\u0443\u043C: +CustomBoundsDialog.labelEndDate.text=\u041A\u0456\u043D\u0435\u0446\u044C: +CustomBoundsDialog.TimeValidator.max=\u0417\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u043D\u0435 \u043C\u043E\u0436\u0435 \u043F\u0435\u0440\u0435\u0432\u0438\u0449\u0443\u0432\u0430\u0442\u0438 \u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0435 +TimelineTooltip.position=\u041F\u043E\u0442\u043E\u0447\u043D\u0430 \u043F\u043E\u0437\u0438\u0446\u0456\u044F +OpenIDE-Module-Short-Description=\u0406\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0448\u043A\u0430\u043B\u0438 \u0447\u0430\u0441\u0443 +CTL_TimelineAction=\u0428\u043A\u0430\u043B\u0430 \u0447\u0430\u0441\u0443 +CTL_TimelineTopComponent=\u0428\u043A\u0430\u043B\u0430 \u0447\u0430\u0441\u0443 +CTL_TimelineWindowAction=\u0428\u043A\u0430\u043B\u0430 \u0447\u0430\u0441\u0443 +TimelineTopComponent.enableButton.text=\u0406 +TimelineTopComponent.closeButton.toolTipText=\u0417\u0430\u043A\u0440\u0438\u0439\u0442\u0435 \u0447\u0430\u0441\u043E\u0432\u0443 \u0448\u043A\u0430\u043B\u0443 +TimelineTopComponent.enableTimelineButton.text=\u0423\u0432\u0456\u043C\u043A\u043D\u0443\u0442\u0438 \u0448\u043A\u0430\u043B\u0443 \u0447\u0430\u0441\u0443 +TimelineTopComponent.playButton.toolTipText=\u0412\u0456\u0434\u0432\u043E\u0440\u0438\u0442\u0438 +TimelineTopComponent.playButton.intevalNotSet=\u041D\u0435\u043C\u043E\u0436\u043B\u0438\u0432\u043E \u0430\u043D\u0456\u043C\u0443\u0432\u0430\u0442\u0438 \u0447\u0430\u0441\u043E\u0432\u0443 \u0448\u043A\u0430\u043B\u0443 \u0431\u0435\u0437 \u0456\u043D\u0442\u0435\u0440\u0432\u0430\u043B\u0443 \u0430\u043D\u0456\u043C\u0430\u0446\u0456\u0457. \u0412\u0441\u0442\u0430\u043D\u043E\u0432\u0456\u0442\u044C \u043E\u0434\u0438\u043D, \u043F\u0435\u0440\u0448 \u043D\u0456\u0436 \u043D\u0430\u0442\u0438\u0441\u043D\u0443\u0442\u0438 \u043A\u043D\u043E\u043F\u043A\u0443 \u0432\u0456\u0434\u0442\u0432\u043E\u0440\u0435\u043D\u043D\u044F +CustomBoundsDialog.labelStartDate.text=\u0421\u0442\u0430\u0440\u0442: +CustomBoundsDialog.labelIntervalDate.text=\u0406\u043D\u0442\u0435\u0440\u0432\u0430\u043B +CustomBoundsDialog.labelBounds.text=\u041C\u0435\u0436\u0456 +CustomBoundsDialog.titleHeader.title=\u0421\u043F\u0435\u0446\u0456\u0430\u043B\u044C\u043D\u0456 \u0447\u0430\u0441\u043E\u0432\u0456 \u043C\u0435\u0436\u0456 \u0442\u0430 \u0456\u043D\u0442\u0435\u0440\u0432\u0430\u043B +CustomBoundsDialog.titleHeader.description=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0439\u0442\u0435 \u0447\u0430\u0441\u043E\u0432\u0443 \u0448\u043A\u0430\u043B\u0443 \u0430\u0431\u043E \u0456\u043D\u0442\u0435\u0440\u0432\u0430\u043B. \u041C\u0435\u0436\u0430\u043C\u0438 \u0454 \u043C\u0456\u043D\u0456\u043C\u0430\u043B\u044C\u043D\u0435 \u0442\u0430 \u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F. \u0406\u043D\u0442\u0435\u0440\u0432\u0430\u043B \u2013 \u0446\u0435 \u043F\u043E\u0442\u043E\u0447\u043D\u0435 \u0432\u0438\u0431\u0440\u0430\u043D\u0435 \u0447\u0430\u0441\u043E\u0432\u0435 \u0432\u0456\u043A\u043D\u043E. +TimelineTopComponent.charts.empty=\u041D\u0435\u043C\u0430\u0454 \u0434\u0456\u0430\u0433\u0440\u0430\u043C... +PlaySettingsDialog.headerTitle.title=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u0430\u043D\u0456\u043C\u0430\u0446\u0456\u0457 +PlaySettingsDialog.headerTitle.description=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0439\u0442\u0435 \u0448\u0432\u0438\u0434\u043A\u0456\u0441\u0442\u044C \u0456 \u043A\u0440\u043E\u043A \u0430\u043D\u0456\u043C\u0430\u0446\u0456\u0457 +PlaySettingsDialog.labelDelay.text=\u0417\u0430\u0442\u0440\u0438\u043C\u043A\u0430: +PlaySettingsDialog.labelStepSize.text=\u0420\u043E\u0437\u043C\u0456\u0440 \u043A\u0440\u043E\u043A\u0443: +PlaySettingsDialog.labelPerc.text=% +PlaySettingsDialog.labelMs.text=\u043C\u0441 +PlaySettingsDialog.labelMode.text=\u0420\u0435\u0436\u0438\u043C +PlaySettingsDialog.oneBoundRadio.text=\u041E\u0434\u0438\u043D \u043F\u043E\u0432'\u044F\u0437\u0430\u043D\u0438\u0439 +PlaySettingsDialog.twoBoundsRadio.text=\u0414\u0432\u0456 \u043C\u0435\u0436\u0456 +PlaySettingsDialog.labelSpeed.text=\u0428\u0432\u0438\u0434\u043A\u0456\u0441\u0442\u044C +PlaySettingsDialog.backwardCheckbox.text=\u041D\u0430\u0437\u0430\u0434 +PlaySettingsDialog.title=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u0430\u043D\u0456\u043C\u0430\u0446\u0456\u0457 +TimelineTopComponent.settings.setPlaySettings=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0438 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u0432\u0456\u0434\u0442\u0432\u043E\u0440\u0435\u043D\u043D\u044F... +TimelineTooltip.min=\u0421\u0442\u0430\u0440\u0442 +TimelineTooltip.max=\u041A\u0456\u043D\u0435\u0446\u044C +TimeFormatDialog.title=\u0424\u043E\u0440\u043C\u0430\u0442 \u0447\u0430\u0441\u0443 +TimelineTopComponent.enableTimelineButton.toolTipText=\u0423\u0432\u0456\u043C\u043A\u043D\u0456\u0442\u044C \u0447\u0430\u0441\u043E\u0432\u0443 \u0448\u043A\u0430\u043B\u0443 \u0434\u043B\u044F \u0444\u0456\u043B\u044C\u0442\u0440\u0430\u0446\u0456\u0457 \u0437\u0430 \u0447\u0430\u0441\u043E\u043C +TimelineTopComponent.disableButon.toolTipText=\u0412\u0438\u043C\u043A\u043D\u0456\u0442\u044C \u0448\u043A\u0430\u043B\u0443 \u0447\u0430\u0441\u0443 +TimeFormatDialog.headerTitle.title=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u0444\u043E\u0440\u043C\u0430\u0442\u0443 \u0447\u0430\u0441\u0443 +TimeFormatDialog.headerTitle.description=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0439\u0442\u0435 \u0444\u043E\u0440\u043C\u0430\u0442 \u0447\u0430\u0441\u0443 +TimeFormatDialog.numericRadio.text=\u0427\u0438\u0441\u043B\u043E\u0432\u0438\u0439 +TimeFormatDialog.dateRadio.text=\u0414\u0430\u0442\u0430 +TimeFormatDialog.dateTimeRadio.text=\u0414\u0430\u0442\u0430 \u0456 \u0447\u0430\u0441 +CustomBoundsDialog.resetDefaultsDate.text=\u0421\u043A\u0438\u043D\u0443\u0442\u0438 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u0437\u0430 \u0437\u0430\u043C\u043E\u0432\u0447\u0443\u0432\u0430\u043D\u043D\u044F\u043C +CustomBoundsDialog.TimeValidator=\u041D\u0438\u0436\u043D\u044F \u043C\u0435\u0436\u0430 \u043D\u0435 \u043C\u043E\u0436\u0435 \u0431\u0443\u0442\u0438 \u043F\u0456\u0441\u043B\u044F \u0432\u0435\u0440\u0445\u043D\u044C\u043E\u0457 +TimelineTopComponent.settings.setCustomBounds=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0438 \u0441\u043F\u0435\u0446\u0456\u0430\u043B\u044C\u043D\u0456 \u043C\u0435\u0436\u0456... +TimelineTopComponent.disabledTimelineLabel.text=\u0425\u0440\u043E\u043D\u043E\u043B\u043E\u0433\u0456\u0447\u043D\u0430 \u0448\u043A\u0430\u043B\u0430 \u0432\u0438\u043C\u043A\u043D\u0435\u043D\u0430. \u0413\u0440\u0430\u0444\u0456\u043A \u043D\u0435 \u0434\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0438\u0439. diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_zh_CN.properties b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_zh_CN.properties index 50ec6dfa68..52387facd4 100644 --- a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_zh_CN.properties +++ b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_zh_CN.properties @@ -1,109 +1,56 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:35+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - +OpenIDE-Module-Short-Description=\u65f6\u95f4\u8f74\u7684\u7528\u6237\u754c\u9762 CTL_TimelineAction=\u65f6\u95f4\u8f74 - CTL_TimelineTopComponent=\u65f6\u95f4\u8f74 - CTL_TimelineWindowAction=\u65f6\u95f4\u7ebf - -OpenIDE-Module-Short-Description=\u65f6\u95f4\u8f74\u7684\u7528\u6237\u754c\u9762 - +!HINT_TimelineTopComponent= +TimelineTopComponent.enableButton.text= TimelineTopComponent.closeButton.toolTipText=\u5173\u95ed\u65f6\u95f4\u8f74 - TimelineTopComponent.enableTimelineButton.text=\u542f\u7528\u65f6\u95f4\u7ebf - TimelineTopComponent.playButton.toolTipText=\u64ad\u653e - -CustomBoundsDialog.labelStartDate.text=\u8d77\u70b9\: - +# TimelineTopComponent.playButton.intevalNotSet=Cannot animate timeline without an animation interval. Set one before clicking play button +CustomBoundsDialog.labelStartDate.text=\u8d77\u70b9: CustomBoundsDialog.labelIntervalDate.text=\u95f4\u9694 - -CustomBoundsDialog.labelMinDate.text=\u6700\u5c0f\: - -CustomBoundsDialog.labelMaxDate.text=\u6700\u5927\: - +CustomBoundsDialog.labelMinDate.text=\u6700\u5c0f: +CustomBoundsDialog.labelMaxDate.text=\u6700\u5927: CustomBoundsDialog.resetDefaultsDate.text=\u91cd\u7f6e\u7f3a\u7701 - -CustomBoundsDialog.labelEndDate.text=\u7ec8\u70b9\: - +CustomBoundsDialog.labelEndDate.text=\u7ec8\u70b9: CustomBoundsDialog.labelBounds.text=\u8fb9\u754c - CustomBoundsDialog.titleHeader.title=\u81ea\u5b9a\u4e49\u65f6\u95f4\u8fb9\u754c & \u95f4\u9694 - CustomBoundsDialog.titleHeader.description=\u81ea\u5b9a\u4e49\u65f6\u95f4\u7ebf\u8fb9\u754c\u6216\u95f4\u9694. \u8fb9\u754c\u662f\u6700\u5c0f\u548c\u6700\u5927\u503c. \u95f4\u9694\u662f\u5f53\u524d\u9009\u62e9\u7684\u65f6\u95f4\u7a97. - CustomBoundsDialog.title=\u81ea\u5b9a\u4e49\u65f6\u95f4\u8fb9\u754c & \u95f4\u9694 - CustomBoundsDialog.FormatValidator.date=\u65e5\u671f\u5fc5\u987b\u7b26\u5408\u683c\u5f0f {0} - CustomBoundsDialog.FormatValidator.double=\u975e\u6709\u6548\u53cc\u7cbe\u5ea6\u6570\u5b57 - CustomBoundsDialog.TimeValidator=\u4e0b\u8fb9\u754c\u4e0d\u80fd\u5728\u4e0a\u8fb9\u754c\u4e4b\u540e - CustomBoundsDialog.TimeValidator.min=\u6570\u503c\u4e0d\u80fd\u5c0f\u4e8e\u6700\u5c0f\u503c - CustomBoundsDialog.TimeValidator.max=\u6570\u503c\u4e0d\u80fd\u8d85\u8fc7\u6700\u5927\u503c - TimelineTopComponent.charts.disable=\u7981\u7528 - TimelineTopComponent.settings.setCustomBounds=\u8bbe\u5b9a\u81ea\u5b9a\u8fb9\u754c... - TimelineTopComponent.charts.empty=\u65e0\u56fe\u8868... - TimelineTopComponent.disabledTimelineLabel.text=\u65f6\u95f4\u7ebf\u88ab\u7981\u7528. \u6b64\u56fe\u975e\u52a8\u6001\u56fe. - PlaySettingsDialog.headerTitle.title=\u52a8\u753b\u8bbe\u5b9a - PlaySettingsDialog.headerTitle.description=\u8bbe\u5b9a\u52a8\u753b\u901f\u5ea6\u548c\u6b65\u957f - -PlaySettingsDialog.labelDelay.text=\u5ef6\u8fdf\: - -PlaySettingsDialog.labelStepSize.text=\u6b65\u957f\u5927\u5c0f\: - +PlaySettingsDialog.labelDelay.text=\u5ef6\u8fdf: +PlaySettingsDialog.labelStepSize.text=\u6b65\u957f\u5927\u5c0f: PlaySettingsDialog.labelPerc.text=% - PlaySettingsDialog.labelMs.text=\u6beb\u79d2 - PlaySettingsDialog.labelMode.text=\u6a21\u5f0f - PlaySettingsDialog.oneBoundRadio.text=\u4e00\u4e2a\u8fb9\u754c - PlaySettingsDialog.twoBoundsRadio.text=\u4e24\u4e2a\u8fb9\u754c - PlaySettingsDialog.labelSpeed.text=\u901f\u5ea6 - PlaySettingsDialog.backwardCheckbox.text=\u540e\u9000 - PlaySettingsDialog.title=\u52a8\u753b\u8bbe\u5b9a - -TimelineTopComponent.settings.setPlaySettings=\u8bbe\u5b9a\u64ad\u653e\u8bbe\u7f6e - +TimelineTopComponent.settings.setPlaySettings=\u8BBE\u5B9A\u64AD\u653E\u8BBE\u7F6E\u2026 TimelineTooltip.min=\u8d77\u70b9 - TimelineTooltip.max=\u7ec8\u70b9 - TimelineTooltip.position=\u5f53\u524d\u4f4d\u7f6e\u662f - -TimelineTooltip.chart=\u5f53\u524d\u503c\u662f - -!TimelineTopComponent.settings.setTimeFormat= - -!TimeFormatDialog.title= - +TimelineTooltip.chart=\u5F53\u524D\u503C\u662F +TimelineTopComponent.settings.setTimeFormat=\u8BBE\u5B9A\u65F6\u95F4\u683C\u5F0F\u2026 +TimeFormatDialog.title=\u65f6\u95f4\u683c\u5f0f TimelineTopComponent.enableTimelineButton.toolTipText=\u4e3a\u57fa\u4e8e\u65f6\u95f4\u7684\u6ee4\u6ce2\u542f\u7528\u65f6\u95f4\u7ebf - TimelineTopComponent.disableButon.toolTipText=\u7981\u7528\u65f6\u95f4\u7ebf - -!TimeFormatDialog.headerTitle.title= - -!TimeFormatDialog.headerTitle.description= - -!TimeFormatDialog.numericRadio.text= - -!TimeFormatDialog.dateRadio.text= +TimeFormatDialog.headerTitle.title=\u65f6\u95f4\u683c\u5f0f\u8bbe\u5b9a +TimeFormatDialog.headerTitle.description=\u8bbe\u5b9a\u65f6\u95f4\u683c\u5f0f +TimeFormatDialog.numericRadio.text=\u6570\u5b57 +TimeFormatDialog.dateRadio.text=\u65e5\u671f +TimeFormatDialog.dateTimeRadio.text=\u65e5\u671f\u65f6\u95f4 +TimelineTopComponent.playButton.intevalNotSet=\u4E0D\u80FD\u5728\u6CA1\u6709\u52A8\u753B\u95F4\u9694\u7684\u60C5\u51B5\u4E0B\u5BF9\u65F6\u95F4\u8F74\u8FDB\u884C\u52A8\u753B\u3002\u70B9\u51FB\u64AD\u653E\u6309\u94AE\u524D\u8BBE\u7F6E\u4E00\u4E2A diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_zh_TW.properties b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_zh_TW.properties new file mode 100644 index 0000000000..e68af05bee --- /dev/null +++ b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/Bundle_zh_TW.properties @@ -0,0 +1,55 @@ +OpenIDE-Module-Short-Description=Timeline UI +CTL_TimelineAction=Timeline +CTL_TimelineTopComponent=Timeline +CTL_TimelineWindowAction=Timeline +!HINT_TimelineTopComponent= +TimelineTopComponent.enableButton.text= +TimelineTopComponent.closeButton.toolTipText=Close the Timeline +TimelineTopComponent.enableTimelineButton.text=Enable Timeline +TimelineTopComponent.playButton.toolTipText=Play +TimelineTopComponent.playButton.intevalNotSet=Cannot animate timeline without an animation interval. Set one before clicking play button +CustomBoundsDialog.labelStartDate.text=Start: +CustomBoundsDialog.labelIntervalDate.text=Interval +CustomBoundsDialog.labelMinDate.text=Minimum: +CustomBoundsDialog.labelMaxDate.text=Maximum: +CustomBoundsDialog.resetDefaultsDate.text=Reset defaults +CustomBoundsDialog.labelEndDate.text=End: +CustomBoundsDialog.labelBounds.text=Bounds +CustomBoundsDialog.titleHeader.title=Custom time bounds & interval +CustomBoundsDialog.titleHeader.description=Customize the timeline bounds or interval. The bounds are the minimum and maximum values. The interval is the currently selected time window. +CustomBoundsDialog.title=Custom time bounds & interval +CustomBoundsDialog.FormatValidator.date=Date must be formatted {0} +CustomBoundsDialog.FormatValidator.double=Not a valid double number +CustomBoundsDialog.TimeValidator=Lower bound can't be after upper bound +CustomBoundsDialog.TimeValidator.min=Value needs to be at least the minimum +CustomBoundsDialog.TimeValidator.max=Value can't be more than the maximum +TimelineTopComponent.charts.disable=Disable +TimelineTopComponent.settings.setCustomBounds=Set custom bounds... +TimelineTopComponent.charts.empty=No charts... +TimelineTopComponent.disabledTimelineLabel.text=Timeline disabled. The graph is not dynamic. +PlaySettingsDialog.headerTitle.title=Animation settings +PlaySettingsDialog.headerTitle.description=Set up animation speed and step +PlaySettingsDialog.labelDelay.text=Delay: +PlaySettingsDialog.labelStepSize.text=Step size: +PlaySettingsDialog.labelPerc.text=% +PlaySettingsDialog.labelMs.text=ms +PlaySettingsDialog.labelMode.text=Mode +PlaySettingsDialog.oneBoundRadio.text=One bound +PlaySettingsDialog.twoBoundsRadio.text=Two bounds +PlaySettingsDialog.labelSpeed.text=Speed +PlaySettingsDialog.backwardCheckbox.text=Backward +PlaySettingsDialog.title=Animation settings +TimelineTopComponent.settings.setPlaySettings=Set play settings... +TimelineTooltip.min=Start +TimelineTooltip.max=End +TimelineTooltip.position=Current position is +TimelineTooltip.chart=Current value is +TimelineTopComponent.settings.setTimeFormat=Set time format... +TimeFormatDialog.title=Time format +TimelineTopComponent.enableTimelineButton.toolTipText=Enable timeline for time-based filtering +TimelineTopComponent.disableButon.toolTipText=Disable the timeline +TimeFormatDialog.headerTitle.title=Time format settings +TimeFormatDialog.headerTitle.description=Set up the time format +TimeFormatDialog.numericRadio.text=Numeric +TimeFormatDialog.dateRadio.text=Date +TimeFormatDialog.dateTimeRadio.text=Datetime diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/cs.po b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/cs.po deleted file mode 100644 index d391a02fb1..0000000000 --- a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/cs.po +++ /dev/null @@ -1,172 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-17 06:46+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "CTL_TimelineAction" -msgstr "ČasovΓ‘ osa" - -msgid "CTL_TimelineTopComponent" -msgstr "ČasovΓ‘ osa" - -msgid "CTL_TimelineWindowAction" -msgstr "ČasovΓ‘ osa" - -msgid "OpenIDE-Module-Short-Description" -msgstr "RozhranΓ­ časovΓ© osy" - -msgid "TimelineTopComponent.closeButton.toolTipText" -msgstr "ZavΕ™Γ­t časovou osu" - -msgid "TimelineTopComponent.enableTimelineButton.text" -msgstr "Povolit časovou osu" - -msgid "TimelineTopComponent.playButton.toolTipText" -msgstr "PΕ™ehrΓ‘t" - -msgid "CustomBoundsDialog.labelStartDate.text" -msgstr "ZačÑtek:" - -msgid "CustomBoundsDialog.labelIntervalDate.text" -msgstr "Interval" - -msgid "CustomBoundsDialog.labelMinDate.text" -msgstr "Minimum:" - -msgid "CustomBoundsDialog.labelMaxDate.text" -msgstr "Maximum:" - -msgid "CustomBoundsDialog.resetDefaultsDate.text" -msgstr "Resetovat vΓ½chozΓ­" - -msgid "CustomBoundsDialog.labelEndDate.text" -msgstr "Konec:" - -msgid "CustomBoundsDialog.labelBounds.text" -msgstr "Hranice" - -msgid "CustomBoundsDialog.titleHeader.title" -msgstr "VlastnΓ­ časovΓ© hranice a interval" - -msgid "CustomBoundsDialog.titleHeader.description" -msgstr "PΕ™izpΕ―sobte si časovΓ© hranice nebo interval. Hranice jsou minimΓ‘lnΓ­ a maximΓ‘lnΓ­ hodnoty. Interval je aktuΓ‘lnΔ› zvolenΓ© časovΓ© okno." - -msgid "CustomBoundsDialog.title" -msgstr "VlastnΓ­ časovΓ© hranice a interval" - -msgid "CustomBoundsDialog.FormatValidator.date" -msgstr "Datum musΓ­ mΓ­t formΓ‘t {0}" - -msgid "CustomBoundsDialog.FormatValidator.double" -msgstr "NenΓ­ platnΓ© číslo s dvojitou pΕ™esnostΓ­" - -msgid "CustomBoundsDialog.TimeValidator" -msgstr "DolnΓ­ hranice nemΕ―ΕΎe bΓ½t po hornΓ­ hranici" - -msgid "CustomBoundsDialog.TimeValidator.min" -msgstr "Hodnota musΓ­ bΓ½t alespoň minimum" - -msgid "CustomBoundsDialog.TimeValidator.max" -msgstr "Hodnota nemΕ―ΕΎe bΓ½t vΓ­ce neΕΎ maximum" - -msgid "TimelineTopComponent.charts.disable" -msgstr "ZakΓ‘zat" - -msgid "TimelineTopComponent.settings.setCustomBounds" -msgstr "Nastavit vlastnΓ­ hranice..." - -msgid "TimelineTopComponent.charts.empty" -msgstr "Ε½Γ‘dnΓ© tabulky..." - -msgid "TimelineTopComponent.disabledTimelineLabel.text" -msgstr "ČasovΓ‘ osa zakΓ‘zΓ‘na. Graf nenΓ­ dynamickΓ½." - -msgid "PlaySettingsDialog.headerTitle.title" -msgstr "NastavenΓ­ animace" - -msgid "PlaySettingsDialog.headerTitle.description" -msgstr "Nastavit rychlost animace a kroku" - -msgid "PlaySettingsDialog.labelDelay.text" -msgstr "ZpoΕΎdΔ›nΓ­:" - -msgid "PlaySettingsDialog.labelStepSize.text" -msgstr "Velikost kroku:" - -msgid "PlaySettingsDialog.labelPerc.text" -msgstr "%" - -msgid "PlaySettingsDialog.labelMs.text" -msgstr "ms" - -msgid "PlaySettingsDialog.labelMode.text" -msgstr "ReΕΎim" - -msgid "PlaySettingsDialog.oneBoundRadio.text" -msgstr "Jedna hranice" - -msgid "PlaySettingsDialog.twoBoundsRadio.text" -msgstr "DvΔ› hranice" - -msgid "PlaySettingsDialog.labelSpeed.text" -msgstr "Rychlost" - -msgid "PlaySettingsDialog.backwardCheckbox.text" -msgstr "PozpΓ‘tku" - -msgid "PlaySettingsDialog.title" -msgstr "NastavenΓ­ animace" - -msgid "TimelineTopComponent.settings.setPlaySettings" -msgstr "Nastavit volby pΕ™ehrΓ‘vΓ‘nΓ­..." - -msgid "TimelineTooltip.min" -msgstr "ZačÑtek" - -msgid "TimelineTooltip.max" -msgstr "Konec" - -msgid "TimelineTooltip.position" -msgstr "SoučasnΓ‘ pozice je" - -msgid "TimelineTooltip.chart" -msgstr "SoučasnΓ‘ hodnota je " - -msgid "TimelineTopComponent.settings.setTimeFormat" -msgstr "Nastavit formΓ‘t času..." - -msgid "TimeFormatDialog.title" -msgstr "FormΓ‘t času" - -msgid "TimelineTopComponent.enableTimelineButton.toolTipText" -msgstr "Povolit časovou osu pro filtrovΓ‘nΓ­ na zΓ‘kladΔ› času" - -msgid "TimelineTopComponent.disableButon.toolTipText" -msgstr "ZakΓ‘zat časovou osu" - -msgid "TimeFormatDialog.headerTitle.title" -msgstr "NastavenΓ­ formΓ‘tu času" - -msgid "TimeFormatDialog.headerTitle.description" -msgstr "Nastavit formΓ‘t času" - -msgid "TimeFormatDialog.numericRadio.text" -msgstr "ČíselnΓ½" - -msgid "TimeFormatDialog.dateRadio.text" -msgstr "Datum" diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/es.po b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/es.po deleted file mode 100644 index e663696a22..0000000000 --- a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/es.po +++ /dev/null @@ -1,173 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:28+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "CTL_TimelineAction" -msgstr "LΓ­nea temporal" - -msgid "CTL_TimelineTopComponent" -msgstr "LΓ­nea temporal" - -msgid "CTL_TimelineWindowAction" -msgstr "LΓ­nea temporal" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interfaz de usuario para el mΓ³dulo Timeline" - -msgid "TimelineTopComponent.closeButton.toolTipText" -msgstr "Cerrar la lΓ­nea temporal" - -msgid "TimelineTopComponent.enableTimelineButton.text" -msgstr "Activar lΓ­nea temporal" - -msgid "TimelineTopComponent.playButton.toolTipText" -msgstr "Animar" - -msgid "CustomBoundsDialog.labelStartDate.text" -msgstr "Comienzo:" - -msgid "CustomBoundsDialog.labelIntervalDate.text" -msgstr "IntΓ©rvalo" - -msgid "CustomBoundsDialog.labelMinDate.text" -msgstr "MΓ­nimo:" - -msgid "CustomBoundsDialog.labelMaxDate.text" -msgstr "MΓ‘ximo:" - -msgid "CustomBoundsDialog.resetDefaultsDate.text" -msgstr "Restaurar valores iniciales" - -msgid "CustomBoundsDialog.labelEndDate.text" -msgstr "Final:" - -msgid "CustomBoundsDialog.labelBounds.text" -msgstr "LΓ­mites:" - -msgid "CustomBoundsDialog.titleHeader.title" -msgstr "Limites temporales e intΓ©rvalo personalizados" - -msgid "CustomBoundsDialog.titleHeader.description" -msgstr "Personalizar los lΓ­mites de la lΓ­nea temporal o el intΓ©rvalo. Los lΓ­mites son el valor mΓ­nimo y mΓ‘ximo. El intΓ©rvalo es la ventana temporal actualmente seleccionada." - -msgid "CustomBoundsDialog.title" -msgstr "Limites temporales e intΓ©rvalo personalizados" - -msgid "CustomBoundsDialog.FormatValidator.date" -msgstr "La fecha debe estar formateada de la forma {0}" - -msgid "CustomBoundsDialog.FormatValidator.double" -msgstr "No es un nΓΊmero double vΓ‘lido" - -msgid "CustomBoundsDialog.TimeValidator" -msgstr "El lΓ­mite inferior no puede estar despuΓ©s del lΓ­mite superior" - -msgid "CustomBoundsDialog.TimeValidator.min" -msgstr "El valor debe ser al menos el mΓ­nimo" - -msgid "CustomBoundsDialog.TimeValidator.max" -msgstr "El valor no puede ser mayor que el mΓ‘ximo" - -msgid "TimelineTopComponent.charts.disable" -msgstr "Desactivar" - -msgid "TimelineTopComponent.settings.setCustomBounds" -msgstr "Configurar lΓ­mites personalizados..." - -msgid "TimelineTopComponent.charts.empty" -msgstr "No grΓ‘ficos..." - -msgid "TimelineTopComponent.disabledTimelineLabel.text" -msgstr "LΓ­nea temporal desactivada. El grafo no es dinΓ‘mico." - -msgid "PlaySettingsDialog.headerTitle.title" -msgstr "ParΓ‘metros de animaciΓ³n" - -msgid "PlaySettingsDialog.headerTitle.description" -msgstr "Configurar velocidad y paso de animaciΓ³n" - -msgid "PlaySettingsDialog.labelDelay.text" -msgstr "Retraso:" - -msgid "PlaySettingsDialog.labelStepSize.text" -msgstr "TamaΓ±o del paso:" - -msgid "PlaySettingsDialog.labelPerc.text" -msgstr "%" - -msgid "PlaySettingsDialog.labelMs.text" -msgstr "ms" - -msgid "PlaySettingsDialog.labelMode.text" -msgstr "Modo" - -msgid "PlaySettingsDialog.oneBoundRadio.text" -msgstr "Un lΓ­mite" - -msgid "PlaySettingsDialog.twoBoundsRadio.text" -msgstr "Dos lΓ­mites" - -msgid "PlaySettingsDialog.labelSpeed.text" -msgstr "Velocidad" - -msgid "PlaySettingsDialog.backwardCheckbox.text" -msgstr "Hacia atrΓ‘s" - -msgid "PlaySettingsDialog.title" -msgstr "ParΓ‘metros de animaciΓ³n" - -msgid "TimelineTopComponent.settings.setPlaySettings" -msgstr "Configurar los parΓ‘metros de animaciΓ³n..." - -msgid "TimelineTooltip.min" -msgstr "Comienzo" - -msgid "TimelineTooltip.max" -msgstr "Final" - -msgid "TimelineTooltip.position" -msgstr "La posiciΓ³n actual es" - -msgid "TimelineTooltip.chart" -msgstr "El valor actual es" - -msgid "TimelineTopComponent.settings.setTimeFormat" -msgstr "Ver formato temporal..." - -msgid "TimeFormatDialog.title" -msgstr "Formato temporal" - -msgid "TimelineTopComponent.enableTimelineButton.toolTipText" -msgstr "Activar lΓ­nea temporal para filtrado basado en el tiempo" - -msgid "TimelineTopComponent.disableButon.toolTipText" -msgstr "Desactivar la lΓ­nea temporal" - -msgid "TimeFormatDialog.headerTitle.title" -msgstr "Ajustes de formato temporal" - -msgid "TimeFormatDialog.headerTitle.description" -msgstr "Configurar el formato temporal" - -msgid "TimeFormatDialog.numericRadio.text" -msgstr "NumΓ©rico" - -msgid "TimeFormatDialog.dateRadio.text" -msgstr "Fecha" diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/fr.po b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/fr.po deleted file mode 100644 index 71281f899c..0000000000 --- a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/fr.po +++ /dev/null @@ -1,173 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:35+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "CTL_TimelineAction" -msgstr "Timeline" - -msgid "CTL_TimelineTopComponent" -msgstr "Timeline" - -msgid "CTL_TimelineWindowAction" -msgstr "Chronologie" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interface utilisateur du module Timeline" - -msgid "TimelineTopComponent.closeButton.toolTipText" -msgstr "Fermer la timeline" - -msgid "TimelineTopComponent.enableTimelineButton.text" -msgstr "Activer la Chronologie" - -msgid "TimelineTopComponent.playButton.toolTipText" -msgstr "Jouer" - -msgid "CustomBoundsDialog.labelStartDate.text" -msgstr "DΓ©but :" - -msgid "CustomBoundsDialog.labelIntervalDate.text" -msgstr "Intervalle" - -msgid "CustomBoundsDialog.labelMinDate.text" -msgstr "Minimum:" - -msgid "CustomBoundsDialog.labelMaxDate.text" -msgstr "Maximum:" - -msgid "CustomBoundsDialog.resetDefaultsDate.text" -msgstr "RΓ©initialiser" - -msgid "CustomBoundsDialog.labelEndDate.text" -msgstr "Fin :" - -msgid "CustomBoundsDialog.labelBounds.text" -msgstr "Bornes" - -msgid "CustomBoundsDialog.titleHeader.title" -msgstr "Bornes et intervalle temporel personnalisΓ©s" - -msgid "CustomBoundsDialog.titleHeader.description" -msgstr "Personnaliser les bornes de la chronologie ou son intervalle visible. Les bornes sont les valeurs min et max. L'intervalle est la fenΓͺtre temporelle actuellement sΓ©lectionnΓ©e." - -msgid "CustomBoundsDialog.title" -msgstr "Bornes et intervalle temporel personnalisΓ©s" - -msgid "CustomBoundsDialog.FormatValidator.date" -msgstr "La date doit Γͺtre formatΓ©e {0}" - -msgid "CustomBoundsDialog.FormatValidator.double" -msgstr "Nombre de type double invalide" - -msgid "CustomBoundsDialog.TimeValidator" -msgstr "La borne basse ne peux pas Γͺtre supΓ©rieure Γ  la borne haute" - -msgid "CustomBoundsDialog.TimeValidator.min" -msgstr "La valeur doit Γͺtre au moins Γ©gale au minimum" - -msgid "CustomBoundsDialog.TimeValidator.max" -msgstr "La valeur ne peux pas Γͺtre supΓ©rieure au maximum" - -msgid "TimelineTopComponent.charts.disable" -msgstr "DΓ©sactiver" - -msgid "TimelineTopComponent.settings.setCustomBounds" -msgstr "RΓ©gler les bornes personnalisΓ©es..." - -msgid "TimelineTopComponent.charts.empty" -msgstr "Aucun graphique..." - -msgid "TimelineTopComponent.disabledTimelineLabel.text" -msgstr "Chronologie dΓ©sactivΓ©e. Le graphe n'est pas dynamique." - -msgid "PlaySettingsDialog.headerTitle.title" -msgstr "ParamΓ¨tres d'animation" - -msgid "PlaySettingsDialog.headerTitle.description" -msgstr "Configurer la vitesse d'animation et le pas de temps" - -msgid "PlaySettingsDialog.labelDelay.text" -msgstr "DΓ©lai :" - -msgid "PlaySettingsDialog.labelStepSize.text" -msgstr "Pas de temps :" - -msgid "PlaySettingsDialog.labelPerc.text" -msgstr "%" - -msgid "PlaySettingsDialog.labelMs.text" -msgstr "ms" - -msgid "PlaySettingsDialog.labelMode.text" -msgstr "Mode" - -msgid "PlaySettingsDialog.oneBoundRadio.text" -msgstr "Une borne" - -msgid "PlaySettingsDialog.twoBoundsRadio.text" -msgstr "Deux bornes" - -msgid "PlaySettingsDialog.labelSpeed.text" -msgstr "Vitesse" - -msgid "PlaySettingsDialog.backwardCheckbox.text" -msgstr "En arriΓ¨re" - -msgid "PlaySettingsDialog.title" -msgstr "ParamΓ¨tres d'animation" - -msgid "TimelineTopComponent.settings.setPlaySettings" -msgstr "RΓ©gler les paramΓ¨tres d'animation..." - -msgid "TimelineTooltip.min" -msgstr "DΓ©but" - -msgid "TimelineTooltip.max" -msgstr "Fin" - -msgid "TimelineTooltip.position" -msgstr "La position actuelle est" - -msgid "TimelineTooltip.chart" -msgstr "La valeur actuelle est " - -msgid "TimelineTopComponent.settings.setTimeFormat" -msgstr "" - -msgid "TimeFormatDialog.title" -msgstr "" - -msgid "TimelineTopComponent.enableTimelineButton.toolTipText" -msgstr "Activer la timeline pour filtrer par pΓ©riode de temps" - -msgid "TimelineTopComponent.disableButon.toolTipText" -msgstr "DΓ©sactiver la timeline" - -msgid "TimeFormatDialog.headerTitle.title" -msgstr "" - -msgid "TimeFormatDialog.headerTitle.description" -msgstr "" - -msgid "TimeFormatDialog.numericRadio.text" -msgstr "" - -msgid "TimeFormatDialog.dateRadio.text" -msgstr "" diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/ja.po b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/ja.po deleted file mode 100644 index 81fb32c898..0000000000 --- a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/ja.po +++ /dev/null @@ -1,172 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011-2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-12 10:05+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "CTL_TimelineAction" -msgstr "タむムラむン" - -msgid "CTL_TimelineTopComponent" -msgstr "タむムラむン" - -msgid "CTL_TimelineWindowAction" -msgstr "ζ™‚η³»εˆ—" - -msgid "OpenIDE-Module-Short-Description" -msgstr "タむムラむンUI" - -msgid "TimelineTopComponent.closeButton.toolTipText" -msgstr "γ‚Ώγ‚€γƒ γƒ©γ‚€γƒ³γ‚’ι–‰γ˜γ‚‹" - -msgid "TimelineTopComponent.enableTimelineButton.text" -msgstr "ζ™‚η³»εˆ—γ‚’ζœ‰εŠΉεŒ–" - -msgid "TimelineTopComponent.playButton.toolTipText" -msgstr "プレむ" - -msgid "CustomBoundsDialog.labelStartDate.text" -msgstr "ι–‹ε§‹:" - -msgid "CustomBoundsDialog.labelIntervalDate.text" -msgstr "ι–“ιš”" - -msgid "CustomBoundsDialog.labelMinDate.text" -msgstr "ζœ€ε°:" - -msgid "CustomBoundsDialog.labelMaxDate.text" -msgstr "ζœ€ε€§:" - -msgid "CustomBoundsDialog.resetDefaultsDate.text" -msgstr "規εšε€€γ«ζˆ»γ™" - -msgid "CustomBoundsDialog.labelEndDate.text" -msgstr "η΅‚δΊ†:" - -msgid "CustomBoundsDialog.labelBounds.text" -msgstr "η―„ε›²" - -msgid "CustomBoundsDialog.titleHeader.title" -msgstr "ζ™‚ι–“γη―„ε›²γ¨ι–“ιš”γ‚’ε€‰ζ›΄" - -msgid "CustomBoundsDialog.titleHeader.description" -msgstr "ζ™‚η³»εˆ—γη―„ε›²γ‚„ι–“ιš”γ‚’θ¨­εšγ™γ‚‹γ€‚η―„ε›²γ―δΈŠι™εŠγ³δΈ‹ι™γε€€γ§γ™γ€‚ι–“ιš”γ―ηΎεœ¨ιΈζŠžγ•γ‚Œγ¦γ„γ‚‹ζ™‚ι–“γ‚¦γ‚£γƒ³γƒ‰γ‚¦γ§γ™γ€‚" - -msgid "CustomBoundsDialog.title" -msgstr "ζ™‚ι–“γη―„ε›²γ¨ι–“ιš”γ‚’ε€‰ζ›΄" - -msgid "CustomBoundsDialog.FormatValidator.date" -msgstr "ζ—₯付は{0}γ¨γƒ•γ‚©γƒΌγƒžγƒƒγƒˆγ•γ‚Œγ¦γ„γͺγ‘γ‚Œγ°γͺγ‚ŠγΎγ›γ‚“γ€‚" - -msgid "CustomBoundsDialog.FormatValidator.double" -msgstr "ζœ‰εŠΉγͺ倍精度ζ΅ε‹•ε°ζ•°η‚Ήζ•°γ§γ―γ‚γ‚ŠγΎγ›γ‚“γ€‚" - -msgid "CustomBoundsDialog.TimeValidator" -msgstr "δΈ‹ι™γ―δΈŠι™γ‚’θΆ…γˆγ‚‹γ“γ¨γ―γ‚γ‚ŠγΎγ›γ‚“γ€‚" - -msgid "CustomBoundsDialog.TimeValidator.min" -msgstr "倀は少γͺくとも下限δ»₯δΈŠγ§γ‚γ‚‹εΏ…θ¦γŒγ‚γ‚ŠγΎγ™γ€‚" - -msgid "CustomBoundsDialog.TimeValidator.max" -msgstr "ε€€γ―δΈŠι™γ‚’θΆ…γˆγ‚‹γ“γ¨γ―γ‚γ‚ŠγΎγ›γ‚“γ€‚" - -msgid "TimelineTopComponent.charts.disable" -msgstr "η„‘εŠΉεŒ–" - -msgid "TimelineTopComponent.settings.setCustomBounds" -msgstr "η―„ε›²γθ¨­εš..." - -msgid "TimelineTopComponent.charts.empty" -msgstr "図葨γͺし..." - -msgid "TimelineTopComponent.disabledTimelineLabel.text" -msgstr "ζ™‚η³»εˆ—γ‚’η„‘εŠΉεŒ–γ€‚γ‚°γƒ©γƒ•γ―ε‹•ηš„γ§γ‚γ‚ŠγΎγ›γ‚“γ€‚" - -msgid "PlaySettingsDialog.headerTitle.title" -msgstr "ε‹•η”»θ¨­εš" - -msgid "PlaySettingsDialog.headerTitle.description" -msgstr "ε‹•η”»γι€ŸεΊ¦γ¨γ‚Ήγƒ†γƒƒγƒ—γ‚’θ¨­εš" - -msgid "PlaySettingsDialog.labelDelay.text" -msgstr "遅廢:" - -msgid "PlaySettingsDialog.labelStepSize.text" -msgstr "ステップァむズ:" - -msgid "PlaySettingsDialog.labelPerc.text" -msgstr "%" - -msgid "PlaySettingsDialog.labelMs.text" -msgstr "ms" - -msgid "PlaySettingsDialog.labelMode.text" -msgstr "ヒード" - -msgid "PlaySettingsDialog.oneBoundRadio.text" -msgstr "片側範囲" - -msgid "PlaySettingsDialog.twoBoundsRadio.text" -msgstr "丑側範囲" - -msgid "PlaySettingsDialog.labelSpeed.text" -msgstr "ι€ŸεΊ¦" - -msgid "PlaySettingsDialog.backwardCheckbox.text" -msgstr "逆方向" - -msgid "PlaySettingsDialog.title" -msgstr "ε‹•η”»θ¨­εš" - -msgid "TimelineTopComponent.settings.setPlaySettings" -msgstr "ε†η”Ÿγθ¨­εš..." - -msgid "TimelineTooltip.min" -msgstr "ι–‹ε§‹" - -msgid "TimelineTooltip.max" -msgstr "η΅‚δΊ†" - -msgid "TimelineTooltip.position" -msgstr "現在γδ½η½γ―" - -msgid "TimelineTooltip.chart" -msgstr "現在γε€€γ―" - -msgid "TimelineTopComponent.settings.setTimeFormat" -msgstr "ζ™‚ι–“γƒ•γ‚©γƒΌγƒžγƒƒγƒˆγθ¨­εš..." - -msgid "TimeFormatDialog.title" -msgstr "ζ™‚ι–“γƒ•γ‚©γƒΌγƒžγƒƒγƒˆ" - -msgid "TimelineTopComponent.enableTimelineButton.toolTipText" -msgstr "ζ™‚ι–“εˆ₯フィルタγƒͺングγγŸγ‚ζ™‚η³»εˆ—γ‚’ζœ‰εŠΉεŒ–" - -msgid "TimelineTopComponent.disableButon.toolTipText" -msgstr "ζ™‚η³»εˆ—γ‚’η„‘εŠΉεŒ–" - -msgid "TimeFormatDialog.headerTitle.title" -msgstr "ζ™‚ι–“γƒ•γ‚©γƒΌγƒžγƒƒγƒˆγθ¨­εš" - -msgid "TimeFormatDialog.headerTitle.description" -msgstr "ζ™‚ι–“γƒ•γ‚©γƒΌγƒžγƒƒγƒˆγ‚’θ¨­εšγ™γ‚‹" - -msgid "TimeFormatDialog.numericRadio.text" -msgstr "ζ•°ε€€" - -msgid "TimeFormatDialog.dateRadio.text" -msgstr "ζ—₯付" diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/org-gephi-desktop-timeline.pot b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/org-gephi-desktop-timeline.pot deleted file mode 100644 index 1a760183b0..0000000000 --- a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/org-gephi-desktop-timeline.pot +++ /dev/null @@ -1,171 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "CTL_TimelineAction" -msgstr "Timeline" - -msgid "CTL_TimelineTopComponent" -msgstr "Timeline" - -msgid "CTL_TimelineWindowAction" -msgstr "Timeline" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Timeline UI" - -msgid "TimelineTopComponent.closeButton.toolTipText" -msgstr "Close the Timeline" - -msgid "TimelineTopComponent.enableTimelineButton.text" -msgstr "Enable Timeline" - -msgid "TimelineTopComponent.playButton.toolTipText" -msgstr "Play" - -msgid "CustomBoundsDialog.labelStartDate.text" -msgstr "Start:" - -msgid "CustomBoundsDialog.labelIntervalDate.text" -msgstr "Interval" - -msgid "CustomBoundsDialog.labelMinDate.text" -msgstr "Minimum:" - -msgid "CustomBoundsDialog.labelMaxDate.text" -msgstr "Maximum:" - -msgid "CustomBoundsDialog.resetDefaultsDate.text" -msgstr "Reset defaults" - -msgid "CustomBoundsDialog.labelEndDate.text" -msgstr "End:" - -msgid "CustomBoundsDialog.labelBounds.text" -msgstr "Bounds" - -msgid "CustomBoundsDialog.titleHeader.title" -msgstr "Custom time bounds & interval" - -msgid "CustomBoundsDialog.titleHeader.description" -msgstr "" -"Customize the timeline bounds or interval. The bounds are the minimum and " -"maximum values. The interval is the currently selected time window." - -msgid "CustomBoundsDialog.title" -msgstr "Custom time bounds & interval" - -msgid "CustomBoundsDialog.FormatValidator.date" -msgstr "Date must be formatted {0}" - -msgid "CustomBoundsDialog.FormatValidator.double" -msgstr "Not a valid double number" - -msgid "CustomBoundsDialog.TimeValidator" -msgstr "Lower bound can't be after upper bound" - -msgid "CustomBoundsDialog.TimeValidator.min" -msgstr "Value needs to be at least the minimum" - -msgid "CustomBoundsDialog.TimeValidator.max" -msgstr "Value can't be more than the maximum" - -msgid "TimelineTopComponent.charts.disable" -msgstr "Disable" - -msgid "TimelineTopComponent.settings.setCustomBounds" -msgstr "Set custom bounds..." - -msgid "TimelineTopComponent.charts.empty" -msgstr "No charts..." - -msgid "TimelineTopComponent.disabledTimelineLabel.text" -msgstr "Timeline disabled. The graph is not dynamic." - -msgid "PlaySettingsDialog.headerTitle.title" -msgstr "Animation settings" - -msgid "PlaySettingsDialog.headerTitle.description" -msgstr "Set up animation speed and step" - -msgid "PlaySettingsDialog.labelDelay.text" -msgstr "Delay:" - -msgid "PlaySettingsDialog.labelStepSize.text" -msgstr "Step size:" - -msgid "PlaySettingsDialog.labelPerc.text" -msgstr "%" - -msgid "PlaySettingsDialog.labelMs.text" -msgstr "ms" - -msgid "PlaySettingsDialog.labelMode.text" -msgstr "Mode" - -msgid "PlaySettingsDialog.oneBoundRadio.text" -msgstr "One bound" - -msgid "PlaySettingsDialog.twoBoundsRadio.text" -msgstr "Two bounds" - -msgid "PlaySettingsDialog.labelSpeed.text" -msgstr "Speed" - -msgid "PlaySettingsDialog.backwardCheckbox.text" -msgstr "Backward" - -msgid "PlaySettingsDialog.title" -msgstr "Animation settings" - -msgid "TimelineTopComponent.settings.setPlaySettings" -msgstr "Set play settings..." - -msgid "TimelineTooltip.min" -msgstr "Start" - -msgid "TimelineTooltip.max" -msgstr "End" - -msgid "TimelineTooltip.position" -msgstr "Current position is" - -msgid "TimelineTooltip.chart" -msgstr "Current value is " - -msgid "TimelineTopComponent.settings.setTimeFormat" -msgstr "Set time format..." - -msgid "TimeFormatDialog.title" -msgstr "Time format" - -msgid "TimelineTopComponent.enableTimelineButton.toolTipText" -msgstr "Enable timeline for time-based filtering" - -msgid "TimelineTopComponent.disableButon.toolTipText" -msgstr "Disable the timeline" - -msgid "TimeFormatDialog.headerTitle.title" -msgstr "Time format settings" - -msgid "TimeFormatDialog.headerTitle.description" -msgstr "Set up the time format" - -msgid "TimeFormatDialog.numericRadio.text" -msgstr "Numeric" - -msgid "TimeFormatDialog.dateRadio.text" -msgstr "Date" diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/pt_BR.po b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/pt_BR.po deleted file mode 100644 index ce8dc6318a..0000000000 --- a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/pt_BR.po +++ /dev/null @@ -1,173 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -# CΓ©lio Faria Jr. , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-18 11:15+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "CTL_TimelineAction" -msgstr "Linha do Tempo" - -msgid "CTL_TimelineTopComponent" -msgstr "Linha do Tempo" - -msgid "CTL_TimelineWindowAction" -msgstr "Linha do tempo" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interface de usuΓ‘rio da Linha do Tempo" - -msgid "TimelineTopComponent.closeButton.toolTipText" -msgstr "Fechar a Linha do Tempo" - -msgid "TimelineTopComponent.enableTimelineButton.text" -msgstr "Habilitar linha do tempo" - -msgid "TimelineTopComponent.playButton.toolTipText" -msgstr "Reproduzir" - -msgid "CustomBoundsDialog.labelStartDate.text" -msgstr "InΓ­cio:" - -msgid "CustomBoundsDialog.labelIntervalDate.text" -msgstr "Intervalo" - -msgid "CustomBoundsDialog.labelMinDate.text" -msgstr "MΓ­nimo:" - -msgid "CustomBoundsDialog.labelMaxDate.text" -msgstr "MΓ‘ximo:" - -msgid "CustomBoundsDialog.resetDefaultsDate.text" -msgstr "Retornar Γ s configuraΓ§Γ΅es padrΓ£o" - -msgid "CustomBoundsDialog.labelEndDate.text" -msgstr "Fim:" - -msgid "CustomBoundsDialog.labelBounds.text" -msgstr "Limites" - -msgid "CustomBoundsDialog.titleHeader.title" -msgstr "Limites de tempo e intervalo personalizados" - -msgid "CustomBoundsDialog.titleHeader.description" -msgstr "Personalizar os limites de tempo e intervalo" - -msgid "CustomBoundsDialog.title" -msgstr "Limites de tempo e intervalo personalizados" - -msgid "CustomBoundsDialog.FormatValidator.date" -msgstr "A data deve ser formatada como {0}" - -msgid "CustomBoundsDialog.FormatValidator.double" -msgstr "NΓ£o Γ© um nΓΊmero (double) vΓ‘lido" - -msgid "CustomBoundsDialog.TimeValidator" -msgstr "O limite inferior nΓ£o pode ser maior que o limite superior" - -msgid "CustomBoundsDialog.TimeValidator.min" -msgstr "O valor deve ser pelo menos igual ao mΓ­nimo" - -msgid "CustomBoundsDialog.TimeValidator.max" -msgstr "O valor nΓ£o pode ser maior do que o mΓ‘ximo" - -msgid "TimelineTopComponent.charts.disable" -msgstr "Desabilitar" - -msgid "TimelineTopComponent.settings.setCustomBounds" -msgstr "Configurar limites personalizados..." - -msgid "TimelineTopComponent.charts.empty" -msgstr "Sem grΓ‘ficos..." - -msgid "TimelineTopComponent.disabledTimelineLabel.text" -msgstr "Linha do tempo desabilitada. O grafo nΓ£o Γ© dinΓ’mico." - -msgid "PlaySettingsDialog.headerTitle.title" -msgstr "ConfiguraΓ§Γ΅es de animaΓ§Γ£o" - -msgid "PlaySettingsDialog.headerTitle.description" -msgstr "Configurar velocidade e passo da animaΓ§Γ£o" - -msgid "PlaySettingsDialog.labelDelay.text" -msgstr "Atraso:" - -msgid "PlaySettingsDialog.labelStepSize.text" -msgstr "Tamanho do passo:" - -msgid "PlaySettingsDialog.labelPerc.text" -msgstr "%" - -msgid "PlaySettingsDialog.labelMs.text" -msgstr "ms" - -msgid "PlaySettingsDialog.labelMode.text" -msgstr "Modo" - -msgid "PlaySettingsDialog.oneBoundRadio.text" -msgstr "Um limite" - -msgid "PlaySettingsDialog.twoBoundsRadio.text" -msgstr "Dois limites" - -msgid "PlaySettingsDialog.labelSpeed.text" -msgstr "Velocidade" - -msgid "PlaySettingsDialog.backwardCheckbox.text" -msgstr "Para trΓ‘s" - -msgid "PlaySettingsDialog.title" -msgstr "ConfiguraΓ§Γ΅es de animaΓ§Γ£o" - -msgid "TimelineTopComponent.settings.setPlaySettings" -msgstr "Configurar reproduΓ§Γ£o..." - -msgid "TimelineTooltip.min" -msgstr "InΓ­cio" - -msgid "TimelineTooltip.max" -msgstr "Fim" - -msgid "TimelineTooltip.position" -msgstr "A posiΓ§Γ£o atual Γ©" - -msgid "TimelineTooltip.chart" -msgstr "O valor atual Γ© " - -msgid "TimelineTopComponent.settings.setTimeFormat" -msgstr "Configurar formato de data/hora..." - -msgid "TimeFormatDialog.title" -msgstr "Formato de data/hora" - -msgid "TimelineTopComponent.enableTimelineButton.toolTipText" -msgstr "Habilitar linha do tempo para filtro temporal" - -msgid "TimelineTopComponent.disableButon.toolTipText" -msgstr "Desabilitar a linha do tempo" - -msgid "TimeFormatDialog.headerTitle.title" -msgstr "ConfiguraΓ§Γ΅es de formato de data/hora" - -msgid "TimeFormatDialog.headerTitle.description" -msgstr "Configurar formato de data/hora" - -msgid "TimeFormatDialog.numericRadio.text" -msgstr "NumΓ©rico" - -msgid "TimeFormatDialog.dateRadio.text" -msgstr "Data" diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/activate.png b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/activate.png deleted file mode 100755 index 49746a115d..0000000000 Binary files a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/activate.png and /dev/null differ diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/animation_settings.png b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/animation_settings.png deleted file mode 100755 index a3d299a6bf..0000000000 Binary files a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/animation_settings.png and /dev/null differ diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/chart.png b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/chart.png deleted file mode 100755 index b3d1b39bd9..0000000000 Binary files a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/chart.png and /dev/null differ diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/cross.png b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/cross.png deleted file mode 100644 index 6b9fa6dd36..0000000000 Binary files a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/cross.png and /dev/null differ diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/custom_bounds.png b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/custom_bounds.png deleted file mode 100644 index a6b7373f9a..0000000000 Binary files a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/custom_bounds.png and /dev/null differ diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/disabled.png b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/disabled.png deleted file mode 100644 index 66f32d89b5..0000000000 Binary files a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/disabled.png and /dev/null differ diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/enabled.png b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/enabled.png deleted file mode 100644 index 894fa06782..0000000000 Binary files a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/enabled.png and /dev/null differ diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/icon.png b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/icon.png deleted file mode 100644 index 5b6849530f..0000000000 Binary files a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/icon.png and /dev/null differ diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/info.png b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/info.png deleted file mode 100755 index af075e654d..0000000000 Binary files a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/info.png and /dev/null differ diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/playback_pause.png b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/playback_pause.png deleted file mode 100644 index 748ee920c2..0000000000 Binary files a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/playback_pause.png and /dev/null differ diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/playback_play.png b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/playback_play.png deleted file mode 100644 index 5cb56ab0a9..0000000000 Binary files a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/playback_play.png and /dev/null differ diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/reset_icon.png b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/reset_icon.png deleted file mode 100644 index b8f0cc9c12..0000000000 Binary files a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/reset_icon.png and /dev/null differ diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/settings.png b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/settings.png deleted file mode 100644 index 9f58d4fa20..0000000000 Binary files a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/settings.png and /dev/null differ diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/time_format.png b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/time_format.png deleted file mode 100644 index 58c4762530..0000000000 Binary files a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/time_format.png and /dev/null differ diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/time_format_small.png b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/time_format_small.png deleted file mode 100644 index d11d0da6eb..0000000000 Binary files a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/resources/time_format_small.png and /dev/null differ diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/ru.po b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/ru.po deleted file mode 100644 index 7c79da60fe..0000000000 --- a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/ru.po +++ /dev/null @@ -1,172 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:35+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "CTL_TimelineAction" -msgstr "Π¨ΠΊΠ°Π»Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ" - -msgid "CTL_TimelineTopComponent" -msgstr "Π¨ΠΊΠ°Π»Π° Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ" - -msgid "CTL_TimelineWindowAction" -msgstr "ВрСмСнная шкала" - -msgid "OpenIDE-Module-Short-Description" -msgstr "UI ΡˆΠΊΠ°Π»Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ" - -msgid "TimelineTopComponent.closeButton.toolTipText" -msgstr "Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΡˆΠΊΠ°Π»Ρƒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ" - -msgid "TimelineTopComponent.enableTimelineButton.text" -msgstr "Π’ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΡˆΠΊΠ°Π»Ρƒ" - -msgid "TimelineTopComponent.playButton.toolTipText" -msgstr "ΠŸΡ€ΠΎΠΈΠ³Ρ€Π°Ρ‚ΡŒ" - -msgid "CustomBoundsDialog.labelStartDate.text" -msgstr "Π‘Ρ‚Π°Ρ€Ρ‚:" - -msgid "CustomBoundsDialog.labelIntervalDate.text" -msgstr "Π˜Π½Ρ‚Π΅Ρ€Π²Π°Π»" - -msgid "CustomBoundsDialog.labelMinDate.text" -msgstr "ΠœΠΈΠ½ΠΈΠΌΡƒΠΌ:" - -msgid "CustomBoundsDialog.labelMaxDate.text" -msgstr "ΠœΠ°ΠΊΡΠΈΠΌΡƒΠΌ:" - -msgid "CustomBoundsDialog.resetDefaultsDate.text" -msgstr "Настройки ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ" - -msgid "CustomBoundsDialog.labelEndDate.text" -msgstr "Π‘Ρ‚ΠΎΠΏ:" - -msgid "CustomBoundsDialog.labelBounds.text" -msgstr "Π“Ρ€Π°Π½ΠΈΡ†Ρ‹" - -msgid "CustomBoundsDialog.titleHeader.title" -msgstr "ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»" - -msgid "CustomBoundsDialog.titleHeader.description" -msgstr "ΠŸΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ‚ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π». Π“Ρ€Π°Π½ΠΈΡ†Ρ‹ -- это минимальноС ΠΈ максимально Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. Π˜Π½Ρ‚Π΅Ρ€Π²Π°Π» -- Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π΅ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ." - -msgid "CustomBoundsDialog.title" -msgstr "ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»" - -msgid "CustomBoundsDialog.FormatValidator.date" -msgstr "Π”Π°Ρ‚Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π° {0}" - -msgid "CustomBoundsDialog.FormatValidator.double" -msgstr "НСкоррСктноС Π΄Ρ€ΠΎΠ±Π½ΠΎΠ΅ число с Π΄Π²ΠΎΠΉΠ½ΠΎΠΉ Ρ‚ΠΎΡ‡Π½ΠΎΡΡ‚ΡŒΡŽ" - -msgid "CustomBoundsDialog.TimeValidator" -msgstr "НиТняя Π³Ρ€Π°Π½ΠΈΡ†Π° Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ большС Ρ‡Π΅ΠΌ вСрхняя." - -msgid "CustomBoundsDialog.TimeValidator.min" -msgstr "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠ°" - -msgid "CustomBoundsDialog.TimeValidator.max" -msgstr "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π½Π΅ Π±ΠΎΠ»Π΅Π΅ максимума" - -msgid "TimelineTopComponent.charts.disable" -msgstr "ΠžΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ" - -msgid "TimelineTopComponent.settings.setCustomBounds" -msgstr "Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹..." - -msgid "TimelineTopComponent.charts.empty" -msgstr "Π‘Π΅Π· Π³Ρ€Π°Ρ„ΠΈΠΊΠΎΠ²..." - -msgid "TimelineTopComponent.disabledTimelineLabel.text" -msgstr "ВрСмСнная шкала ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½Π°. Π“Ρ€Π°Ρ„ Π½Π΅ являСтся динамичСским." - -msgid "PlaySettingsDialog.headerTitle.title" -msgstr "Настройки Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ" - -msgid "PlaySettingsDialog.headerTitle.description" -msgstr "Установка скорости ΠΈ шага Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ" - -msgid "PlaySettingsDialog.labelDelay.text" -msgstr "Π—Π°Π΄Π΅Ρ€ΠΆΠΊΠ°:" - -msgid "PlaySettingsDialog.labelStepSize.text" -msgstr "Π Π°Π·ΠΌΠ΅Ρ€ шага:" - -msgid "PlaySettingsDialog.labelPerc.text" -msgstr "%" - -msgid "PlaySettingsDialog.labelMs.text" -msgstr "мс" - -msgid "PlaySettingsDialog.labelMode.text" -msgstr "Π Π΅ΠΆΠΈΠΌ" - -msgid "PlaySettingsDialog.oneBoundRadio.text" -msgstr "Одна Π³Ρ€Π°Π½ΠΈΡ†Π°" - -msgid "PlaySettingsDialog.twoBoundsRadio.text" -msgstr "Π”Π²Π΅ Π³Ρ€Π°Π½ΠΈΡ†Ρ‹" - -msgid "PlaySettingsDialog.labelSpeed.text" -msgstr "Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ" - -msgid "PlaySettingsDialog.backwardCheckbox.text" -msgstr "Назад" - -msgid "PlaySettingsDialog.title" -msgstr "Настройки Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ" - -msgid "TimelineTopComponent.settings.setPlaySettings" -msgstr "Установка настроСк воспроизвСдСния..." - -msgid "TimelineTooltip.min" -msgstr "Π‘Ρ‚Π°Ρ€Ρ‚" - -msgid "TimelineTooltip.max" -msgstr "Π‘Ρ‚ΠΎΠΏ" - -msgid "TimelineTooltip.position" -msgstr "ВСкущая позиция Ρ€Π°Π²Π½Π°" - -msgid "TimelineTooltip.chart" -msgstr "Π’Π΅ΠΊΡƒΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Ρ€Π°Π²Π½ΠΎ" - -msgid "TimelineTopComponent.settings.setTimeFormat" -msgstr "" - -msgid "TimeFormatDialog.title" -msgstr "" - -msgid "TimelineTopComponent.enableTimelineButton.toolTipText" -msgstr "ИспользованиС Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡˆΠΊΠ°Π»Ρ‹ для динамичСской Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠΈ" - -msgid "TimelineTopComponent.disableButon.toolTipText" -msgstr "ΠžΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡˆΠΊΠ°Π»Ρ‹" - -msgid "TimeFormatDialog.headerTitle.title" -msgstr "" - -msgid "TimeFormatDialog.headerTitle.description" -msgstr "" - -msgid "TimeFormatDialog.numericRadio.text" -msgstr "" - -msgid "TimeFormatDialog.dateRadio.text" -msgstr "" diff --git a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/zh_CN.po b/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/zh_CN.po deleted file mode 100644 index 8881549796..0000000000 --- a/modules/DesktopTimeline/src/main/resources/org/gephi/desktop/timeline/zh_CN.po +++ /dev/null @@ -1,172 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:35+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "CTL_TimelineAction" -msgstr "既间轴" - -msgid "CTL_TimelineTopComponent" -msgstr "既间轴" - -msgid "CTL_TimelineWindowAction" -msgstr "ζ—Άι—΄ηΊΏ" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζ—Άι—΄θ½΄ηš„η”¨ζˆ·η•Œι’" - -msgid "TimelineTopComponent.closeButton.toolTipText" -msgstr "关闭既间轴" - -msgid "TimelineTopComponent.enableTimelineButton.text" -msgstr "启用既间线" - -msgid "TimelineTopComponent.playButton.toolTipText" -msgstr "ζ’­ζ”Ύ" - -msgid "CustomBoundsDialog.labelStartDate.text" -msgstr "θ΅·η‚Ή:" - -msgid "CustomBoundsDialog.labelIntervalDate.text" -msgstr "ι—΄ιš”" - -msgid "CustomBoundsDialog.labelMinDate.text" -msgstr "ζœ€ε°:" - -msgid "CustomBoundsDialog.labelMaxDate.text" -msgstr "ζœ€ε€§:" - -msgid "CustomBoundsDialog.resetDefaultsDate.text" -msgstr "重η½ηΌΊηœ" - -msgid "CustomBoundsDialog.labelEndDate.text" -msgstr "η»ˆη‚Ή:" - -msgid "CustomBoundsDialog.labelBounds.text" -msgstr "θΎΉη•Œ" - -msgid "CustomBoundsDialog.titleHeader.title" -msgstr "θ‡ͺεšδΉ‰ζ—Άι—΄θΎΉη•Œ & ι—΄ιš”" - -msgid "CustomBoundsDialog.titleHeader.description" -msgstr "θ‡ͺεšδΉ‰ζ—Άι—΄ηΊΏθΎΉη•Œζˆ–ι—΄ιš”. θΎΉη•Œζ˜―ζœ€ε°ε’Œζœ€ε€§ε€Ό. ι—΄ιš”ζ˜―ε½“ε‰ι€‰ζ‹©ηš„ζ—Άι—΄ηͺ—." - -msgid "CustomBoundsDialog.title" -msgstr "θ‡ͺεšδΉ‰ζ—Άι—΄θΎΉη•Œ & ι—΄ιš”" - -msgid "CustomBoundsDialog.FormatValidator.date" -msgstr "ζ—₯ζœŸεΏ…ι‘»η¬¦εˆζ ΌεΌ {0}" - -msgid "CustomBoundsDialog.FormatValidator.double" -msgstr "ιžζœ‰ζ•ˆεŒη²ΎεΊ¦ζ•°ε­—" - -msgid "CustomBoundsDialog.TimeValidator" -msgstr "δΈ‹θΎΉη•ŒδΈθƒ½εœ¨δΈŠθΎΉη•ŒδΉ‹εŽ" - -msgid "CustomBoundsDialog.TimeValidator.min" -msgstr "ζ•°ε€ΌδΈθƒ½ε°δΊŽζœ€ε°ε€Ό" - -msgid "CustomBoundsDialog.TimeValidator.max" -msgstr "ζ•°ε€ΌδΈθƒ½θΆ…θΏ‡ζœ€ε€§ε€Ό" - -msgid "TimelineTopComponent.charts.disable" -msgstr "禁用" - -msgid "TimelineTopComponent.settings.setCustomBounds" -msgstr "θΎεšθ‡ͺεšθΎΉη•Œ..." - -msgid "TimelineTopComponent.charts.empty" -msgstr "无图葨..." - -msgid "TimelineTopComponent.disabledTimelineLabel.text" -msgstr "既间线蒫禁用. ζ­€ε›ΎιžεŠ¨ζ€ε›Ύ." - -msgid "PlaySettingsDialog.headerTitle.title" -msgstr "εŠ¨η”»θΎεš" - -msgid "PlaySettingsDialog.headerTitle.description" -msgstr "θΎεšεŠ¨η”»ι€ŸεΊ¦ε’Œζ­₯ι•Ώ" - -msgid "PlaySettingsDialog.labelDelay.text" -msgstr "廢迟:" - -msgid "PlaySettingsDialog.labelStepSize.text" -msgstr "ζ­₯长倧小:" - -msgid "PlaySettingsDialog.labelPerc.text" -msgstr "%" - -msgid "PlaySettingsDialog.labelMs.text" -msgstr "ζ―«η§’" - -msgid "PlaySettingsDialog.labelMode.text" -msgstr "樑式" - -msgid "PlaySettingsDialog.oneBoundRadio.text" -msgstr "δΈ€δΈͺθΎΉη•Œ" - -msgid "PlaySettingsDialog.twoBoundsRadio.text" -msgstr "δΈ€δΈͺθΎΉη•Œ" - -msgid "PlaySettingsDialog.labelSpeed.text" -msgstr "ι€ŸεΊ¦" - -msgid "PlaySettingsDialog.backwardCheckbox.text" -msgstr "εŽι€€" - -msgid "PlaySettingsDialog.title" -msgstr "εŠ¨η”»θΎεš" - -msgid "TimelineTopComponent.settings.setPlaySettings" -msgstr "θΎεšζ’­ζ”ΎθΎη½" - -msgid "TimelineTooltip.min" -msgstr "θ΅·η‚Ή" - -msgid "TimelineTooltip.max" -msgstr "η»ˆη‚Ή" - -msgid "TimelineTooltip.position" -msgstr "当前位η½ζ˜―" - -msgid "TimelineTooltip.chart" -msgstr "ε½“ε‰ε€Όζ˜― " - -msgid "TimelineTopComponent.settings.setTimeFormat" -msgstr "" - -msgid "TimeFormatDialog.title" -msgstr "" - -msgid "TimelineTopComponent.enableTimelineButton.toolTipText" -msgstr "δΈΊεŸΊδΊŽζ—Άι—΄ηš„ζ»€ζ³’ε―η”¨ζ—Άι—΄ηΊΏ" - -msgid "TimelineTopComponent.disableButon.toolTipText" -msgstr "禁用既间线" - -msgid "TimeFormatDialog.headerTitle.title" -msgstr "" - -msgid "TimeFormatDialog.headerTitle.description" -msgstr "" - -msgid "TimeFormatDialog.numericRadio.text" -msgstr "" - -msgid "TimeFormatDialog.dateRadio.text" -msgstr "" diff --git a/modules/DesktopTools/pom.xml b/modules/DesktopTools/pom.xml deleted file mode 100644 index 6957f965db..0000000000 --- a/modules/DesktopTools/pom.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - 4.0.0 - - gephi-parent - org.gephi - 0.9-SNAPSHOT - ../.. - - - org.gephi - desktop-tools - 0.9-SNAPSHOT - nbm - - DesktopTools - - - - ${project.groupId} - graph-api - - - ${project.groupId} - tools-api - - - ${project.groupId} - ui-utils - - - ${project.groupId} - ui-components - - - ${project.groupId} - ui-library-wrapper - - - org.netbeans.api - org-openide-util-lookup - - - org.netbeans.api - org-openide-util - - - ${project.groupId} - visualization - - - - - - - org.codehaus.mojo - nbm-maven-plugin - - - - - - - - diff --git a/modules/DesktopTools/src/main/java/org/gephi/desktop/tools/DesktopToolController.java b/modules/DesktopTools/src/main/java/org/gephi/desktop/tools/DesktopToolController.java deleted file mode 100644 index 30ebf777f1..0000000000 --- a/modules/DesktopTools/src/main/java/org/gephi/desktop/tools/DesktopToolController.java +++ /dev/null @@ -1,405 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.desktop.tools; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.HashMap; -import java.util.List; -import javax.swing.ImageIcon; -import javax.swing.JComponent; -import javax.swing.JToggleButton; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import org.gephi.graph.api.Node; -import org.gephi.tools.spi.MouseClickEventListener; -import org.gephi.tools.spi.NodeClickEventListener; -import org.gephi.tools.spi.NodePressingEventListener; -import org.gephi.tools.spi.Tool; -import org.gephi.tools.api.ToolController; -import org.gephi.tools.spi.NodePressAndDraggingEventListener; -import org.gephi.tools.spi.ToolEventListener; -import org.gephi.tools.spi.ToolSelectionType; -import org.gephi.tools.spi.ToolUI; -import org.gephi.tools.spi.UnselectToolException; -import org.gephi.visualization.VizController; -import org.gephi.visualization.apiimpl.VizEvent; -import org.gephi.visualization.apiimpl.VizEvent.Type; -import org.gephi.visualization.apiimpl.VizEventListener; -import org.gephi.visualization.api.selection.SelectionManager; -import org.openide.util.Lookup; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = ToolController.class) -public class DesktopToolController implements ToolController { - - //Architecture - private Tool[] tools; - private PropertiesBar propertiesBar; - //Current tool - private Tool currentTool; - private ToolEventHandler[] currentHandlers; - - public DesktopToolController() { - //Init tools - tools = Lookup.getDefault().lookupAll(Tool.class).toArray(new Tool[0]); - } - - public void select(Tool tool) { - unselect(); - if (tool == null) { - return; - } - - //Connect events - ArrayList handlers = new ArrayList(); - for (ToolEventListener toolListener : tool.getListeners()) { - if (toolListener instanceof NodeClickEventListener) { - NodeClickEventHandler h = new NodeClickEventHandler(toolListener); - h.select(); - handlers.add(h); - } else if (toolListener instanceof NodePressingEventListener) { - NodePressingEventHandler h = new NodePressingEventHandler(toolListener); - h.select(); - handlers.add(h); - } else if (toolListener instanceof MouseClickEventListener) { - MouseClickEventHandler h = new MouseClickEventHandler(toolListener); - h.select(); - handlers.add(h); - } else if (toolListener instanceof NodePressAndDraggingEventListener) { - NodePressAndDraggingEventHandler h = new NodePressAndDraggingEventHandler(toolListener); - h.select(); - handlers.add(h); - - } else { - throw new RuntimeException("The ToolEventListener " + toolListener.getClass().getSimpleName() + " cannot be recognized"); - } - } - currentHandlers = handlers.toArray(new ToolEventHandler[0]); - switch (tool.getSelectionType()) { - case NONE: - VizController.getInstance().getSelectionManager().disableSelection(); - break; - case SELECTION: - VizController.getInstance().getSelectionManager().blockSelection(true); - VizController.getInstance().getSelectionManager().setDraggingEnable(false); - break; - case SELECTION_AND_DRAGGING: - VizController.getInstance().getSelectionManager().blockSelection(true); - VizController.getInstance().getSelectionManager().setDraggingEnable(true); - break; - } - currentTool = tool; - currentTool.select(); - } - - public void unselect() { - - if (currentTool != null) { - //Disconnect events - for (ToolEventHandler handler : currentHandlers) { - handler.unselect(); - } - currentTool.unselect(); - currentHandlers = null; - currentTool = null; - if (propertiesBar != null) { - propertiesBar.unselect(); - } - } - } - - public JComponent getToolbar() { - - //Get tools ui - HashMap toolMap = new HashMap(); - List toolsUI = new ArrayList(); - for (Tool tool : tools) { - ToolUI ui = tool.getUI(); - if (ui != null) { - toolsUI.add(ui); - toolMap.put(ui, tool); - } - - } - //Sort by priority - Collections.sort(toolsUI, new Comparator() { - - public int compare(Object o1, Object o2) { - Integer p1 = ((ToolUI) o1).getPosition(); - Integer p2 = ((ToolUI) o2).getPosition(); - return p1.compareTo(p2); - } - }); - - //Create toolbar - final Toolbar toolbar = new Toolbar(); - for (final ToolUI toolUI : toolsUI) { - final Tool tool = toolMap.get(toolUI); - JToggleButton btn; - if (toolUI.getIcon() != null) { - btn = new JToggleButton(toolUI.getIcon()); - } else { - btn = new JToggleButton(new ImageIcon(getClass().getResource("/org/gephi/desktop/tools/tool.png"))); - } - btn.setToolTipText(toolUI.getName() + " - " + toolUI.getDescription()); - btn.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - //Let the user unselect a tool (by clicking on it again) without having to select other tool: - if (tool == currentTool) { - toolbar.clearSelection(); - unselect(); - } else { - try { - select(tool); - propertiesBar.select(toolUI.getPropertiesBar(tool)); - } - catch (UnselectToolException unselectToolException) { - toolbar.clearSelection(); - unselect(); - } - } - } - }); - toolbar.add(btn); - } - - //SelectionManager events - VizController.getInstance().getSelectionManager().addChangeListener(new ChangeListener() { - - public void stateChanged(ChangeEvent e) { - SelectionManager selectionManager = VizController.getInstance().getSelectionManager(); - - if (selectionManager.isRectangleSelection() && currentTool != null) { - toolbar.clearSelection(); - unselect(); - } else if (selectionManager.isSelectionEnabled() && currentTool != null && currentTool.getSelectionType() == ToolSelectionType.NONE) { - toolbar.clearSelection(); - unselect(); - } else if (selectionManager.isDraggingEnabled() && currentTool != null) { - toolbar.clearSelection(); - unselect(); - } - } - }); - - return toolbar; - } - - public JComponent getPropertiesBar() { - propertiesBar = new PropertiesBar(); - return propertiesBar; - } - - //Event handlers classes - private static interface ToolEventHandler { - - public void select(); - - public void unselect(); - } - - //HANDLERS - private static class NodeClickEventHandler implements ToolEventHandler { - - private NodeClickEventListener toolEventListener; - private VizEventListener currentListener; - - public NodeClickEventHandler(ToolEventListener toolListener) { - this.toolEventListener = (NodeClickEventListener) toolListener; - } - - public void select() { - currentListener = new VizEventListener() { - - public void handleEvent(VizEvent event) { - toolEventListener.clickNodes((Node[]) event.getData()); - } - - public Type getType() { - return VizEvent.Type.NODE_LEFT_CLICK; - } - }; - VizController.getInstance().getVizEventManager().addListener(currentListener); - } - - public void unselect() { - VizController.getInstance().getVizEventManager().removeListener(currentListener); - currentListener = null; - toolEventListener = null; - } - } - - private static class NodePressingEventHandler implements ToolEventHandler { - - private NodePressingEventListener toolEventListener; - private VizEventListener[] currentListeners; - - public NodePressingEventHandler(ToolEventListener toolListener) { - this.toolEventListener = (NodePressingEventListener) toolListener; - } - - public void select() { - currentListeners = new VizEventListener[2]; - currentListeners[0] = new VizEventListener() { - - public void handleEvent(VizEvent event) { - toolEventListener.pressingNodes((Node[]) event.getData()); - } - - public Type getType() { - return VizEvent.Type.NODE_LEFT_PRESSING; - } - }; - currentListeners[1] = new VizEventListener() { - - public void handleEvent(VizEvent event) { - toolEventListener.released(); - } - - public Type getType() { - return VizEvent.Type.MOUSE_RELEASED; - } - }; - VizController.getInstance().getVizEventManager().addListener(currentListeners); - } - - public void unselect() { - VizController.getInstance().getVizEventManager().removeListener(currentListeners); - toolEventListener = null; - currentListeners = null; - } - } - - private static class NodePressAndDraggingEventHandler implements ToolEventHandler { - - private NodePressAndDraggingEventListener toolEventListener; - private VizEventListener[] currentListeners; - - public NodePressAndDraggingEventHandler(ToolEventListener toolListener) { - this.toolEventListener = (NodePressAndDraggingEventListener) toolListener; - } - - public void select() { - currentListeners = new VizEventListener[3]; - currentListeners[0] = new VizEventListener() { - - public void handleEvent(VizEvent event) { - toolEventListener.pressNodes((Node[]) event.getData()); - } - - public Type getType() { - return VizEvent.Type.NODE_LEFT_PRESS; - } - }; - currentListeners[1] = new VizEventListener() { - - public void handleEvent(VizEvent event) { - float[] mouseDrag = (float[]) event.getData(); - toolEventListener.drag(mouseDrag[0], mouseDrag[1]); - } - - public Type getType() { - return VizEvent.Type.DRAG; - } - }; - currentListeners[2] = new VizEventListener() { - - public void handleEvent(VizEvent event) { - toolEventListener.released(); - } - - public Type getType() { - return VizEvent.Type.MOUSE_RELEASED; - } - }; - VizController.getInstance().getVizEventManager().addListener(currentListeners); - } - - public void unselect() { - VizController.getInstance().getVizEventManager().removeListener(currentListeners); - toolEventListener = null; - currentListeners = null; - } - } - - private static class MouseClickEventHandler implements ToolEventHandler { - - private MouseClickEventListener toolEventListener; - private VizEventListener currentListener; - - public MouseClickEventHandler(ToolEventListener toolListener) { - this.toolEventListener = (MouseClickEventListener) toolListener; - } - - public void select() { - currentListener = new VizEventListener() { - - public void handleEvent(VizEvent event) { - float[] data = (float[]) event.getData(); - int[] viewport = new int[]{(int) data[0], (int) data[1]}; - float[] threed = new float[]{data[2], data[3]}; - toolEventListener.mouseClick(viewport, threed); - } - - public Type getType() { - return VizEvent.Type.MOUSE_LEFT_CLICK; - } - }; - VizController.getInstance().getVizEventManager().addListener(currentListener); - } - - public void unselect() { - VizController.getInstance().getVizEventManager().removeListener(currentListener); - toolEventListener = null; - currentListener = null; - } - } -} diff --git a/modules/DesktopTools/src/main/java/org/gephi/desktop/tools/PropertiesBar.java b/modules/DesktopTools/src/main/java/org/gephi/desktop/tools/PropertiesBar.java deleted file mode 100644 index 369e47ebd6..0000000000 --- a/modules/DesktopTools/src/main/java/org/gephi/desktop/tools/PropertiesBar.java +++ /dev/null @@ -1,149 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.desktop.tools; - -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.Component; -import java.awt.Cursor; -import java.awt.Dimension; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import javax.swing.Action; -import javax.swing.BorderFactory; -import javax.swing.ImageIcon; -import javax.swing.JButton; -import javax.swing.JComponent; -import javax.swing.JPanel; -import javax.swing.JToolBar; -import javax.swing.SwingUtilities; -import org.gephi.ui.utils.UIUtils; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; -import org.openide.util.lookup.Lookups; - -/** - * - * @author Mathieu Bastian - */ -public class PropertiesBar extends JPanel { - - private JPanel propertiesBar; - private SelectionBar selectionBar; - - public PropertiesBar() { - super(new BorderLayout()); - JPanel leftPanel = new JPanel(new BorderLayout()); - leftPanel.add(getFullScreenIcon(), BorderLayout.WEST); - leftPanel.add(selectionBar = new SelectionBar(), BorderLayout.CENTER); - add(leftPanel, BorderLayout.WEST); - setOpaque(false); - } - - public void select(JPanel propertiesBar) { - this.propertiesBar = propertiesBar; - propertiesBar.setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 2)); - add(propertiesBar, BorderLayout.CENTER); - propertiesBar.setOpaque(false); - for (Component c : propertiesBar.getComponents()) { - if (c instanceof JPanel || c instanceof JToolBar) { - ((JComponent) c).setOpaque(false); - } - } - revalidate(); - } - - public void unselect() { - if (propertiesBar != null) { - remove(propertiesBar); - revalidate(); - repaint(); - propertiesBar = null; - } - } - - private JComponent getFullScreenIcon() { - int logoWidth = 27; - int logoHeight = 28; - //fullscreen icon size - if (UIUtils.isAquaLookAndFeel()) { - logoWidth = 34; - } - JPanel c = new JPanel(new BorderLayout()); - c.setBackground(Color.WHITE); - JButton fullScreenButton = new JButton(); - fullScreenButton.setIcon(new ImageIcon(getClass().getResource("/org/gephi/desktop/tools/gephilogo_std.png"))); - fullScreenButton.setRolloverEnabled(true); - fullScreenButton.setRolloverIcon(new ImageIcon(getClass().getResource("/org/gephi/desktop/tools/gephilogo_glow.png"))); - fullScreenButton.setToolTipText(NbBundle.getMessage(PropertiesBar.class, "PropertiesBar.fullScreenButton.tooltip")); - fullScreenButton.setBorderPainted(false); - fullScreenButton.setContentAreaFilled(false); - fullScreenButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - fullScreenButton.setBorder(BorderFactory.createEmptyBorder()); - fullScreenButton.setPreferredSize(new Dimension(logoWidth, logoHeight)); - fullScreenButton.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - Lookup lookup = Lookups.forPath("org-gephi-desktop-tools/Actions/ToggleFullScreenAction"); - for (Action a : lookup.lookupAll(Action.class)) { - a.actionPerformed(null); - } - } - }); - c.add(fullScreenButton, BorderLayout.CENTER); - return c; - } - - @Override - public void setEnabled(final boolean enabled) { - SwingUtilities.invokeLater(new Runnable() { - - public void run() { - for (Component c : getComponents()) { - c.setEnabled(enabled); - } - selectionBar.setEnabled(enabled); - } - }); - - } -} diff --git a/modules/DesktopTools/src/main/java/org/gephi/desktop/tools/SelectionBar.form b/modules/DesktopTools/src/main/java/org/gephi/desktop/tools/SelectionBar.form deleted file mode 100644 index 9115c4083e..0000000000 --- a/modules/DesktopTools/src/main/java/org/gephi/desktop/tools/SelectionBar.form +++ /dev/null @@ -1,55 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/DesktopTools/src/main/java/org/gephi/desktop/tools/SelectionBar.java b/modules/DesktopTools/src/main/java/org/gephi/desktop/tools/SelectionBar.java deleted file mode 100644 index fd53d5ceee..0000000000 --- a/modules/DesktopTools/src/main/java/org/gephi/desktop/tools/SelectionBar.java +++ /dev/null @@ -1,184 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.desktop.tools; - -import java.awt.Component; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import javax.swing.JPopupMenu; -import javax.swing.SwingUtilities; -import javax.swing.UIManager; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import org.gephi.ui.utils.UIUtils; -import org.gephi.visualization.VizController; -import org.gephi.visualization.api.selection.SelectionManager; -import org.openide.util.NbBundle; - -/** - * - * @author Mathieu Bastian - */ -public class SelectionBar extends javax.swing.JPanel { - - private boolean mouseSelection; - - /** Creates new form SelectionBar */ - public SelectionBar() { - initComponents(); - VizController.getInstance().getSelectionManager().addChangeListener(new ChangeListener() { - - public void stateChanged(ChangeEvent e) { - refresh(); - } - }); - refresh(); - - statusLabel.addMouseListener(new MouseAdapter() { - - @Override - public void mousePressed(MouseEvent e) { - if (mouseSelection && statusLabel.isEnabled()) { - JPopupMenu menu = createPopup(); - menu.show(statusLabel, 0, statusLabel.getHeight()); - } - } - }); - - if (UIUtils.isAquaLookAndFeel()) { - setBackground(UIManager.getColor("NbExplorerView.background")); - } - } - - public JPopupMenu createPopup() { - - SelectionManager manager = VizController.getInstance().getSelectionManager(); - final MouseSelectionPopupPanel popupPanel = new MouseSelectionPopupPanel(); - popupPanel.setDiameter(manager.getMouseSelectionDiameter()); - popupPanel.setProportionnalToZoom(manager.isMouseSelectionZoomProportionnal()); - popupPanel.setChangeListener(new ChangeListener() { - - public void stateChanged(ChangeEvent e) { - SelectionManager manager = VizController.getInstance().getSelectionManager(); - manager.setMouseSelectionDiameter(popupPanel.getDiameter()); - manager.setMouseSelectionZoomProportionnal(popupPanel.isProportionnalToZoom()); - } - }); - - JPopupMenu menu = new JPopupMenu(); - menu.add(popupPanel); - return menu; - } - - public void refresh() { - SelectionManager manager = VizController.getInstance().getSelectionManager(); - if (manager.isSelectionEnabled()) { - if (manager.isRectangleSelection()) { - mouseSelection = false; - statusLabel.setText(NbBundle.getMessage(SelectionBar.class, "SelectionBar.statusLabel.rectangleSelection")); - } else if (manager.isDirectMouseSelection()) { - mouseSelection = true; - statusLabel.setText(NbBundle.getMessage(SelectionBar.class, "SelectionBar.statusLabel.mouseSelection")); - } else if (manager.isDraggingEnabled()) { - mouseSelection = true; - statusLabel.setText(NbBundle.getMessage(SelectionBar.class, "SelectionBar.statusLabel.dragging")); - } - } else { - mouseSelection = false; - statusLabel.setText(NbBundle.getMessage(SelectionBar.class, "SelectionBar.statusLabel.noSelection")); - } - } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // //GEN-BEGIN:initComponents - private void initComponents() { - java.awt.GridBagConstraints gridBagConstraints; - - statusLabel = new javax.swing.JLabel(); - endSeparator = new javax.swing.JSeparator(); - - setPreferredSize(new java.awt.Dimension(150, 28)); - setLayout(new java.awt.GridBagLayout()); - - statusLabel.setFont(statusLabel.getFont().deriveFont((float)10)); - statusLabel.setPreferredSize(new java.awt.Dimension(34, 28)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 0; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.FIRST_LINE_START; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.insets = new java.awt.Insets(0, 8, 0, 0); - add(statusLabel, gridBagConstraints); - - endSeparator.setOrientation(javax.swing.SwingConstants.VERTICAL); - endSeparator.setPreferredSize(new java.awt.Dimension(3, 22)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 0; - gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.FIRST_LINE_END; - gridBagConstraints.insets = new java.awt.Insets(3, 0, 3, 0); - add(endSeparator, gridBagConstraints); - }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JSeparator endSeparator; - private javax.swing.JLabel statusLabel; - // End of variables declaration//GEN-END:variables - - @Override - public void setEnabled(final boolean enabled) { - SwingUtilities.invokeLater(new Runnable() { - - public void run() { - for (Component c : getComponents()) { - c.setEnabled(enabled); - } - } - }); - } -} diff --git a/modules/DesktopTools/src/main/nbm/manifest.mf b/modules/DesktopTools/src/main/nbm/manifest.mf deleted file mode 100644 index a26a720bf5..0000000000 --- a/modules/DesktopTools/src/main/nbm/manifest.mf +++ /dev/null @@ -1,5 +0,0 @@ -Manifest-Version: 1.0 -AutoUpdate-Essential-Module: true -OpenIDE-Module-Layer: org/gephi/desktop/tools/layer.xml -OpenIDE-Module-Localizing-Bundle: org/gephi/desktop/tools/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file diff --git a/modules/DesktopTools/src/main/nbm/module.xml b/modules/DesktopTools/src/main/nbm/module.xml deleted file mode 100644 index 4440738de7..0000000000 --- a/modules/DesktopTools/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/Bundle.properties b/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/Bundle.properties deleted file mode 100644 index e49d8b2710..0000000000 --- a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/Bundle.properties +++ /dev/null @@ -1,11 +0,0 @@ -OpenIDE-Module-Display-Category=Gephi UI -OpenIDE-Module-Name=Desktop Tools -OpenIDE-Module-Short-Description=Implement ToolController and integrate tools UI -PropertiesBar.fullScreenButton.tooltip = Full Screen -MouseSelectionPopupPanel.labelDiameter.text=Diameter -MouseSelectionPopupPanel.proportionnalZoomCheckbox.text=Proportional to zoom - -SelectionBar.statusLabel.rectangleSelection = Rectangle selection -SelectionBar.statusLabel.mouseSelection = Mouse selection -SelectionBar.statusLabel.dragging = Dragging -SelectionBar.statusLabel.noSelection = No selection diff --git a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/Bundle_cs.properties b/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/Bundle_cs.properties deleted file mode 100644 index f6aafce0bf..0000000000 --- a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/Bundle_cs.properties +++ /dev/null @@ -1,23 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-23 10\:00+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Short-Description=Vykonat ovl\u00e1d\u00e1n\u00ed n\u00e1stroj\u016f a zav\u00e9st rozhran\u00ed n\u00e1stroj\u016f - -PropertiesBar.fullScreenButton.tooltip=Cel\u00e1 obrazovka - -MouseSelectionPopupPanel.labelDiameter.text=Pr\u016fm\u011br - -MouseSelectionPopupPanel.proportionnalZoomCheckbox.text=\u00dam\u011brn\u00e9 p\u0159ibl\u00ed\u017een\u00ed - -SelectionBar.statusLabel.rectangleSelection=Obd\u00e9ln\u00edkov\u00fd v\u00fdb\u011br - -SelectionBar.statusLabel.mouseSelection=V\u00fdb\u011br my\u0161\u00ed - -SelectionBar.statusLabel.dragging=P\u0159etahov\u00e1n\u00ed - -SelectionBar.statusLabel.noSelection=Bez v\u00fdb\u011bru diff --git a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/Bundle_es.properties b/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/Bundle_es.properties deleted file mode 100644 index 7c9e0c979f..0000000000 --- a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/Bundle_es.properties +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-24 16\:27+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Short-Description=Implementar ToolController e integrar la interfaz de usuario del m\u00f3dulo Tools - -PropertiesBar.fullScreenButton.tooltip=Pantalla completa - -MouseSelectionPopupPanel.labelDiameter.text=Di\u00e1metro - -MouseSelectionPopupPanel.proportionnalZoomCheckbox.text=Proporcional al zoom - -SelectionBar.statusLabel.rectangleSelection=Selecci\u00f3n rectangular - -SelectionBar.statusLabel.mouseSelection=Selecci\u00f3n - -SelectionBar.statusLabel.dragging=Arrastrar - -SelectionBar.statusLabel.noSelection=Sin selecci\u00f3n diff --git a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/Bundle_fr.properties b/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/Bundle_fr.properties deleted file mode 100644 index e42af660b6..0000000000 --- a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/Bundle_fr.properties +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-02 07\:06+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Impl\u00e9mente ToolController et int\u00e8gre l'interface utilisateur du module Tools - -PropertiesBar.fullScreenButton.tooltip=Plein \u00e9cran - -MouseSelectionPopupPanel.labelDiameter.text=Diam\u00e8tre - -MouseSelectionPopupPanel.proportionnalZoomCheckbox.text=Proportionnel au zoom - -SelectionBar.statusLabel.rectangleSelection=Rectangle de s\u00e9lection - -SelectionBar.statusLabel.mouseSelection=S\u00e9lection - -SelectionBar.statusLabel.dragging=D\u00e9placement - -SelectionBar.statusLabel.noSelection=Aucune s\u00e9lection diff --git a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/Bundle_ja.properties b/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/Bundle_ja.properties deleted file mode 100644 index 126614e3c9..0000000000 --- a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/Bundle_ja.properties +++ /dev/null @@ -1,23 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-29 00\:11+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=ToolCntroller\u5b9f\u88c5\u3068\u30c4\u30fc\u30ebUI\u306e\u7d71\u5408 - -PropertiesBar.fullScreenButton.tooltip=\u5168\u753b\u9762\u8868\u793a - -MouseSelectionPopupPanel.labelDiameter.text=\u76f4\u5f84 - -MouseSelectionPopupPanel.proportionnalZoomCheckbox.text=\u7e26\u6a2a\u6bd4\u56fa\u5b9a - -SelectionBar.statusLabel.rectangleSelection=\u77e9\u5f62\u9078\u629e - -SelectionBar.statusLabel.mouseSelection=\u30de\u30a6\u30b9\u9078\u629e - -SelectionBar.statusLabel.dragging=\u30c9\u30e9\u30c3\u30ae\u30f3\u30b0 - -SelectionBar.statusLabel.noSelection=\u9078\u629e\u306a\u3057 diff --git a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/Bundle_pt_BR.properties b/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/Bundle_pt_BR.properties deleted file mode 100644 index 0345d61b4f..0000000000 --- a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/Bundle_pt_BR.properties +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -# C\u00e9lio Faria Jr. , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-24 22\:28+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Implementar ToolController e integrar interface de usu\u00e1rio do m\u00f3dulo Tools - -PropertiesBar.fullScreenButton.tooltip=Tela cheia - -MouseSelectionPopupPanel.labelDiameter.text=Di\u00e2metro - -MouseSelectionPopupPanel.proportionnalZoomCheckbox.text=Proporcional ao zoom - -SelectionBar.statusLabel.rectangleSelection=Sele\u00e7\u00e3o retangular - -SelectionBar.statusLabel.mouseSelection=Sele\u00e7\u00e3o com o mouse - -SelectionBar.statusLabel.dragging=Arrastando - -SelectionBar.statusLabel.noSelection=Sem sele\u00e7\u00e3o diff --git a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/Bundle_ru.properties b/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/Bundle_ru.properties deleted file mode 100644 index 961f133172..0000000000 --- a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/Bundle_ru.properties +++ /dev/null @@ -1,23 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-13 20\:50+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f ToolController \u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 UI - -PropertiesBar.fullScreenButton.tooltip=\u041f\u043e\u043b\u043d\u043e\u044d\u043a\u0440\u0430\u043d\u043d\u044b\u0439 \u0440\u0435\u0436\u0438\u043c - -MouseSelectionPopupPanel.labelDiameter.text=\u0414\u0438\u0430\u043c\u0435\u0442\u0440 - -MouseSelectionPopupPanel.proportionnalZoomCheckbox.text=\u041f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0443 - -SelectionBar.statusLabel.rectangleSelection=\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 - -SelectionBar.statusLabel.mouseSelection=\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043c\u044b\u0448\u044c\u044e - -SelectionBar.statusLabel.dragging=\u041f\u0435\u0440\u0435\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u043d\u0438\u0435 - -SelectionBar.statusLabel.noSelection=\u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043e diff --git a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/Bundle_zh_CN.properties b/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/Bundle_zh_CN.properties deleted file mode 100644 index c60c9c83bb..0000000000 --- a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/Bundle_zh_CN.properties +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:15+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u5b9e\u65bd\u5de5\u5177\u63a7\u5236\u548c\u96c6\u6210\u5de5\u5177\u7684\u7528\u6237\u754c\u9762 - -PropertiesBar.fullScreenButton.tooltip=\u5168\u5c4f - -MouseSelectionPopupPanel.labelDiameter.text=\u76f4\u5f84 - -MouseSelectionPopupPanel.proportionnalZoomCheckbox.text=\u6bd4\u4f8b\u653e\u5927 - -SelectionBar.statusLabel.rectangleSelection=\u77e9\u5f62\u9009\u62e9 - -SelectionBar.statusLabel.mouseSelection=\u9f20\u6807\u9009\u62e9 - -SelectionBar.statusLabel.dragging=\u62d6\u5ef6 - -SelectionBar.statusLabel.noSelection=\u65e0\u9009\u62e9 diff --git a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/cs.po b/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/cs.po deleted file mode 100644 index ea84fd7d39..0000000000 --- a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/cs.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-23 10:00+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Vykonat ovlΓ‘dΓ‘nΓ­ nΓ‘strojΕ― a zavΓ©st rozhranΓ­ nΓ‘strojΕ―" - -msgid "PropertiesBar.fullScreenButton.tooltip" -msgstr "CelΓ‘ obrazovka" - -msgid "MouseSelectionPopupPanel.labelDiameter.text" -msgstr "PrΕ―mΔ›r" - -msgid "MouseSelectionPopupPanel.proportionnalZoomCheckbox.text" -msgstr "ÚmΔ›rnΓ© pΕ™iblΓ­ΕΎenΓ­" - -msgid "SelectionBar.statusLabel.rectangleSelection" -msgstr "ObdΓ©lnΓ­kovΓ½ vΓ½bΔ›r" - -msgid "SelectionBar.statusLabel.mouseSelection" -msgstr "VΓ½bΔ›r myΕ‘Γ­" - -msgid "SelectionBar.statusLabel.dragging" -msgstr "PΕ™etahovΓ‘nΓ­" - -msgid "SelectionBar.statusLabel.noSelection" -msgstr "Bez vΓ½bΔ›ru" diff --git a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/es.po b/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/es.po deleted file mode 100644 index fc6fe1a636..0000000000 --- a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/es.po +++ /dev/null @@ -1,44 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-24 16:27+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implementar ToolController e integrar la interfaz de usuario del mΓ³dulo Tools" - -msgid "PropertiesBar.fullScreenButton.tooltip" -msgstr "Pantalla completa" - -msgid "MouseSelectionPopupPanel.labelDiameter.text" -msgstr "DiΓ‘metro" - -msgid "MouseSelectionPopupPanel.proportionnalZoomCheckbox.text" -msgstr "Proporcional al zoom" - -msgid "SelectionBar.statusLabel.rectangleSelection" -msgstr "SelecciΓ³n rectangular" - -msgid "SelectionBar.statusLabel.mouseSelection" -msgstr "SelecciΓ³n" - -msgid "SelectionBar.statusLabel.dragging" -msgstr "Arrastrar" - -msgid "SelectionBar.statusLabel.noSelection" -msgstr "Sin selecciΓ³n" diff --git a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/fr.po b/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/fr.po deleted file mode 100644 index 5c172b6d92..0000000000 --- a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/fr.po +++ /dev/null @@ -1,44 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-02 07:06+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplΓ©mente ToolController et intΓ¨gre l'interface utilisateur du module Tools" - -msgid "PropertiesBar.fullScreenButton.tooltip" -msgstr "Plein Γ©cran" - -msgid "MouseSelectionPopupPanel.labelDiameter.text" -msgstr "DiamΓ¨tre" - -msgid "MouseSelectionPopupPanel.proportionnalZoomCheckbox.text" -msgstr "Proportionnel au zoom" - -msgid "SelectionBar.statusLabel.rectangleSelection" -msgstr "Rectangle de sΓ©lection" - -msgid "SelectionBar.statusLabel.mouseSelection" -msgstr "SΓ©lection" - -msgid "SelectionBar.statusLabel.dragging" -msgstr "DΓ©placement" - -msgid "SelectionBar.statusLabel.noSelection" -msgstr "Aucune sΓ©lection" diff --git a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/gephilogo_glow.png b/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/gephilogo_glow.png deleted file mode 100644 index e6fdb53557..0000000000 Binary files a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/gephilogo_glow.png and /dev/null differ diff --git a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/gephilogo_std.png b/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/gephilogo_std.png deleted file mode 100644 index e09cd88c84..0000000000 Binary files a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/gephilogo_std.png and /dev/null differ diff --git a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/ja.po b/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/ja.po deleted file mode 100644 index fe4e2f0528..0000000000 --- a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/ja.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-29 00:11+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ToolCntrollerεŸθ£…とツールUIγη΅±εˆ" - -msgid "PropertiesBar.fullScreenButton.tooltip" -msgstr "全画青葨瀺" - -msgid "MouseSelectionPopupPanel.labelDiameter.text" -msgstr "η›΄εΎ„" - -msgid "MouseSelectionPopupPanel.proportionnalZoomCheckbox.text" -msgstr "ηΈ¦ζ¨ͺζ―”ε›Ίεš" - -msgid "SelectionBar.statusLabel.rectangleSelection" -msgstr "矩归選択" - -msgid "SelectionBar.statusLabel.mouseSelection" -msgstr "γƒžγ‚¦γ‚ΉιΈζŠž" - -msgid "SelectionBar.statusLabel.dragging" -msgstr "ドラッγ‚ング" - -msgid "SelectionBar.statusLabel.noSelection" -msgstr "選択γͺし" diff --git a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/layer.xml b/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/layer.xml deleted file mode 100644 index 86149c7a21..0000000000 --- a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/layer.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - diff --git a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/org-gephi-desktop-tools.pot b/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/org-gephi-desktop-tools.pot deleted file mode 100644 index e91beec185..0000000000 --- a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/org-gephi-desktop-tools.pot +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implement ToolController and integrate tools UI" - -msgid "PropertiesBar.fullScreenButton.tooltip" -msgstr "Full Screen" - -msgid "MouseSelectionPopupPanel.labelDiameter.text" -msgstr "Diameter" - -msgid "MouseSelectionPopupPanel.proportionnalZoomCheckbox.text" -msgstr "Proportional to zoom" - -msgid "SelectionBar.statusLabel.rectangleSelection" -msgstr "Rectangle selection" - -msgid "SelectionBar.statusLabel.mouseSelection" -msgstr "Mouse selection" - -msgid "SelectionBar.statusLabel.dragging" -msgstr "Dragging" - -msgid "SelectionBar.statusLabel.noSelection" -msgstr "No selection" diff --git a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/pt_BR.po b/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/pt_BR.po deleted file mode 100644 index eec0037565..0000000000 --- a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/pt_BR.po +++ /dev/null @@ -1,44 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -# CΓ©lio Faria Jr. , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-24 22:28+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implementar ToolController e integrar interface de usuΓ‘rio do mΓ³dulo Tools" - -msgid "PropertiesBar.fullScreenButton.tooltip" -msgstr "Tela cheia" - -msgid "MouseSelectionPopupPanel.labelDiameter.text" -msgstr "DiΓ’metro" - -msgid "MouseSelectionPopupPanel.proportionnalZoomCheckbox.text" -msgstr "Proporcional ao zoom" - -msgid "SelectionBar.statusLabel.rectangleSelection" -msgstr "SeleΓ§Γ£o retangular" - -msgid "SelectionBar.statusLabel.mouseSelection" -msgstr "SeleΓ§Γ£o com o mouse" - -msgid "SelectionBar.statusLabel.dragging" -msgstr "Arrastando" - -msgid "SelectionBar.statusLabel.noSelection" -msgstr "Sem seleΓ§Γ£o" diff --git a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/ru.po b/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/ru.po deleted file mode 100644 index 69763e9257..0000000000 --- a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/ru.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-13 20:50+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "РСализация ToolController ΠΈ ΠΈΠ½Ρ‚Π΅Π³Ρ€ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… инструмСнтов UI" - -msgid "PropertiesBar.fullScreenButton.tooltip" -msgstr "ΠŸΠΎΠ»Π½ΠΎΡΠΊΡ€Π°Π½Π½Ρ‹ΠΉ Ρ€Π΅ΠΆΠΈΠΌ" - -msgid "MouseSelectionPopupPanel.labelDiameter.text" -msgstr "Π”ΠΈΠ°ΠΌΠ΅Ρ‚Ρ€" - -msgid "MouseSelectionPopupPanel.proportionnalZoomCheckbox.text" -msgstr "ΠŸΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎ ΠΌΠ°ΡΡˆΡ‚Π°Π±Ρƒ" - -msgid "SelectionBar.statusLabel.rectangleSelection" -msgstr "Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΎΠΉ области " - -msgid "SelectionBar.statusLabel.mouseSelection" -msgstr "Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΌΡ‹ΡˆΡŒΡŽ" - -msgid "SelectionBar.statusLabel.dragging" -msgstr "ΠŸΠ΅Ρ€Π΅Ρ‚Π°ΡΠΊΠΈΠ²Π°Π½ΠΈΠ΅" - -msgid "SelectionBar.statusLabel.noSelection" -msgstr "НичСго Π½Π΅ Π²Ρ‹Π±Ρ€Π°Π½ΠΎ" diff --git a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/tool.png b/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/tool.png deleted file mode 100644 index 13ae35289c..0000000000 Binary files a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/tool.png and /dev/null differ diff --git a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/zh_CN.po b/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/zh_CN.po deleted file mode 100644 index e0255dd547..0000000000 --- a/modules/DesktopTools/src/main/resources/org/gephi/desktop/tools/zh_CN.po +++ /dev/null @@ -1,42 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:15+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "εžζ–½ε·₯ε…·ζŽ§εˆΆε’Œι›†ζˆε·₯ε…·ηš„η”¨ζˆ·η•Œι’" - -msgid "PropertiesBar.fullScreenButton.tooltip" -msgstr "全屏" - -msgid "MouseSelectionPopupPanel.labelDiameter.text" -msgstr "η›΄εΎ„" - -msgid "MouseSelectionPopupPanel.proportionnalZoomCheckbox.text" -msgstr "ζ―”δΎ‹ζ”Ύε€§" - -msgid "SelectionBar.statusLabel.rectangleSelection" -msgstr "ηŸ©ε½’ι€‰ζ‹©" - -msgid "SelectionBar.statusLabel.mouseSelection" -msgstr "鼠标选择" - -msgid "SelectionBar.statusLabel.dragging" -msgstr "ζ‹–ε»Ά" - -msgid "SelectionBar.statusLabel.noSelection" -msgstr "无选择" diff --git a/modules/DesktopWindow/pom.xml b/modules/DesktopWindow/pom.xml new file mode 100644 index 0000000000..b1902a5acf --- /dev/null +++ b/modules/DesktopWindow/pom.xml @@ -0,0 +1,110 @@ + + + 4.0.0 + + gephi-parent + org.gephi + 0.11.3-SNAPSHOT + ../.. + + + desktop-window + 0.11.3-SNAPSHOT + nbm + + DesktopWindow + + + + ${project.groupId} + ui-utils + + + ${project.groupId} + perspective-api + + + ${project.groupId} + utils-longtask + + + ${project.groupId} + project-api + + + ${project.groupId} + desktop-project + + + ${project.groupId} + desktop-icons + + + org.netbeans.api + org-openide-modules + + + org.netbeans.api + org-openide-util-lookup + + + org.netbeans.api + org-openide-util + + + org.netbeans.api + org-openide-util-ui + + + org.netbeans.api + org-openide-windows + + + org.netbeans.api + org-openide-filesystems + + + org.netbeans.api + org-openide-nodes + + + org.netbeans.api + org-openide-dialogs + + + org.netbeans.api + org-netbeans-modules-options-api + + + org.netbeans.api + org-netbeans-swing-tabcontrol + + + org.netbeans.api + org-netbeans-api-progress + + + org.netbeans.api + org-netbeans-api-progress-nb + + + org.netbeans.api + org-openide-awt + + + + + + + org.apache.netbeans.utilities + nbm-maven-plugin + + + org.gephi.desktop.banner.perspective.plugin + org.gephi.desktop.banner.perspective.spi + + + + + + diff --git a/modules/DesktopWindow/src/main/java/org/gephi/desktop/banner/BannerComponent.form b/modules/DesktopWindow/src/main/java/org/gephi/desktop/banner/BannerComponent.form new file mode 100644 index 0000000000..d5660c0824 --- /dev/null +++ b/modules/DesktopWindow/src/main/java/org/gephi/desktop/banner/BannerComponent.form @@ -0,0 +1,74 @@ + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/DesktopWindow/src/main/java/org/gephi/desktop/banner/BannerComponent.java b/modules/DesktopWindow/src/main/java/org/gephi/desktop/banner/BannerComponent.java new file mode 100644 index 0000000000..10f2a2d2f3 --- /dev/null +++ b/modules/DesktopWindow/src/main/java/org/gephi/desktop/banner/BannerComponent.java @@ -0,0 +1,153 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.banner; + +import java.awt.Color; +import java.awt.Cursor; +import javax.swing.BorderFactory; +import javax.swing.JToggleButton; +import javax.swing.UIManager; +import org.gephi.perspective.api.PerspectiveController; +import org.gephi.perspective.spi.Perspective; +import org.gephi.ui.utils.UIUtils; +import org.openide.util.Lookup; + +/** + * @author Mathieu Bastian + */ +public class BannerComponent extends javax.swing.JPanel { + + private final transient PerspectiveController perspectiveController; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPanel buttonsPanel; + private javax.swing.JPanel mainPanel; + private javax.swing.ButtonGroup perspectivesButtonGroup; + private javax.swing.JPanel workspacePanel; + // End of variables declaration//GEN-END:variables + + public BannerComponent() { + initComponents(); + + // Make the workspace tab stand out well + if (UIUtils.isFlatLafLightLookAndFeel()) { + mainPanel.setBackground(Color.WHITE); + workspacePanel.setBackground(Color.WHITE); + } else if (UIUtils.isFlatLafDarkLookAndFeel()) { + Color cl = UIManager.getColor("EditorTab.background"); + mainPanel.setBackground(cl); + workspacePanel.setBackground(cl); + } + + // Button panel border so it matches with the workspace panel + buttonsPanel.setBorder(BorderFactory.createCompoundBorder( + BorderFactory.createMatteBorder(0, 0, 1, 0, UIManager.getColor("Component.borderColor")), + BorderFactory.createEmptyBorder(6, 0, 6, 5))); + workspacePanel.setBorder(BorderFactory.createEmptyBorder(12, 0, 0, 0)); + + //Init perspective controller + perspectiveController = Lookup.getDefault().lookup(PerspectiveController.class); + + addGroupTabs(); + } + + private void addGroupTabs() { + JToggleButton[] buttons = new JToggleButton[perspectiveController.getPerspectives().length]; + int i = 0; + + //Add tabs + for (final Perspective perspective : perspectiveController.getPerspectives()) { + JToggleButton toggleButton = + new JToggleButton(perspective.getDisplayName(), perspective.getIcon()); + toggleButton.setFocusPainted(false); + toggleButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + + toggleButton.addActionListener(e -> perspectiveController.selectPerspective(perspective)); + perspectivesButtonGroup.add(toggleButton); + buttonsPanel.add(toggleButton); + buttons[i++] = toggleButton; + } + + //Set currently selected button + perspectivesButtonGroup.setSelected(buttons[getSelectedPerspectiveIndex()].getModel(), true); + } + + public int getSelectedPerspectiveIndex() { + int i = 0; + for (Perspective p : perspectiveController.getPerspectives()) { + if (p.equals(perspectiveController.getSelectedPerspective())) { + return i; + } + i++; + } + return -1; + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + perspectivesButtonGroup = new javax.swing.ButtonGroup(); + mainPanel = new javax.swing.JPanel(); + workspacePanel = new org.gephi.desktop.banner.workspace.WorkspacePanel(); + buttonsPanel = new javax.swing.JPanel(); + + setBackground(new java.awt.Color(255, 255, 255)); + setLayout(new java.awt.BorderLayout()); + + mainPanel.setLayout(new java.awt.BorderLayout()); + + workspacePanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(6, 0, 0, 0)); + mainPanel.add(workspacePanel, java.awt.BorderLayout.CENTER); + + buttonsPanel.setOpaque(false); + buttonsPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 6, 0)); + mainPanel.add(buttonsPanel, java.awt.BorderLayout.WEST); + + add(mainPanel, java.awt.BorderLayout.CENTER); + }// //GEN-END:initComponents +} diff --git a/modules/DesktopWindow/src/main/java/org/gephi/desktop/banner/Installer.java b/modules/DesktopWindow/src/main/java/org/gephi/desktop/banner/Installer.java new file mode 100644 index 0000000000..92dd65f4c3 --- /dev/null +++ b/modules/DesktopWindow/src/main/java/org/gephi/desktop/banner/Installer.java @@ -0,0 +1,108 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.banner; + +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Container; +import javax.swing.JComponent; +import javax.swing.JFrame; +import javax.swing.JLayeredPane; +import javax.swing.JPanel; +import javax.swing.JRootPane; +import org.gephi.desktop.banner.perspective.spi.BottomComponent; +import org.gephi.perspective.api.PerspectiveController; +import org.openide.modules.ModuleInstall; +import org.openide.util.Lookup; +import org.openide.windows.WindowManager; + +public class Installer extends ModuleInstall { + + @Override + public void restored() { + //Initialize the perspective controller + Lookup.getDefault().lookup(PerspectiveController.class); + + // Init Banner + initBanner(); + } + + private void initBanner() { + WindowManager.getDefault().invokeWhenUIReady(new Runnable() { + @Override + public void run() { + final JFrame frame = (JFrame) WindowManager.getDefault().getMainWindow(); + Container contentPane = ((JRootPane) frame.getComponents()[0]).getContentPane(); + + //Add Banner + JComponent toolbar = new BannerComponent(); + frame.getContentPane().add(toolbar, BorderLayout.NORTH); + + //Get the bottom component + BottomComponent bottomComponentImpl = Lookup.getDefault().lookup(BottomComponent.class); + JComponent bottomComponent = bottomComponentImpl != null ? bottomComponentImpl.getComponent() : null; + + JComponent statusLinePanel = null; + JPanel childPanel = (JPanel) contentPane.getComponents()[1]; + JLayeredPane layeredPane = (JLayeredPane) childPanel.getComponents()[0]; + Container desktopPanel = (Container) layeredPane.getComponent(0); + + for (Component c : desktopPanel.getComponents()) { + if (c instanceof JPanel) { + JPanel cp = (JPanel) c; + for (Component cpnt : cp.getComponents()) { + if (cpnt.getName() != null && cpnt.getName().equals("statusLine")) { + statusLinePanel = (JComponent) cpnt; + break; + } + } + if (statusLinePanel != null && bottomComponent != null) { + statusLinePanel.add(bottomComponent, BorderLayout.NORTH); + break; + } + } + } + } + }); + } +} diff --git a/modules/DesktopPerspective/src/main/java/org/gephi/desktop/perspective/plugin/LaboratoryPerspective.java b/modules/DesktopWindow/src/main/java/org/gephi/desktop/banner/perspective/plugin/LaboratoryPerspective.java similarity index 93% rename from modules/DesktopPerspective/src/main/java/org/gephi/desktop/perspective/plugin/LaboratoryPerspective.java rename to modules/DesktopWindow/src/main/java/org/gephi/desktop/banner/perspective/plugin/LaboratoryPerspective.java index 13c2deff80..19e7fa64fc 100644 --- a/modules/DesktopPerspective/src/main/java/org/gephi/desktop/perspective/plugin/LaboratoryPerspective.java +++ b/modules/DesktopWindow/src/main/java/org/gephi/desktop/banner/perspective/plugin/LaboratoryPerspective.java @@ -39,7 +39,8 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ -package org.gephi.desktop.perspective.plugin; + +package org.gephi.desktop.banner.perspective.plugin; import javax.swing.Icon; import org.gephi.perspective.spi.Perspective; @@ -49,7 +50,7 @@ Development and Distribution License("CDDL") (collectively, the /** * Data Laboratory perspective - * + * * @author Mathieu Bastian */ @ServiceProvider(service = Perspective.class, position = 200) @@ -57,7 +58,8 @@ public class LaboratoryPerspective implements Perspective { @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/desktop/perspective/plugin/resources/laboratory.png", false); + return ImageUtilities + .loadImageIcon("DesktopWindow/laboratory.svg", false); } @Override diff --git a/modules/DesktopPerspective/src/main/java/org/gephi/desktop/perspective/plugin/OverviewPerspective.java b/modules/DesktopWindow/src/main/java/org/gephi/desktop/banner/perspective/plugin/OverviewPerspective.java similarity index 91% rename from modules/DesktopPerspective/src/main/java/org/gephi/desktop/perspective/plugin/OverviewPerspective.java rename to modules/DesktopWindow/src/main/java/org/gephi/desktop/banner/perspective/plugin/OverviewPerspective.java index 92d6e272bd..717a46895c 100644 --- a/modules/DesktopPerspective/src/main/java/org/gephi/desktop/perspective/plugin/OverviewPerspective.java +++ b/modules/DesktopWindow/src/main/java/org/gephi/desktop/banner/perspective/plugin/OverviewPerspective.java @@ -40,7 +40,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ -package org.gephi.desktop.perspective.plugin; +package org.gephi.desktop.banner.perspective.plugin; import javax.swing.Icon; import org.gephi.perspective.spi.Perspective; @@ -50,15 +50,16 @@ Development and Distribution License("CDDL") (collectively, the /** * Overview perspective - * + * * @author Mathieu Bastian */ -@ServiceProvider(service = Perspective.class, position=100) +@ServiceProvider(service = Perspective.class, position = 100) public class OverviewPerspective implements Perspective { @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/desktop/perspective/plugin/resources/overview.png", false); + return ImageUtilities + .loadImageIcon("DesktopWindow/overview.svg", false); } @Override diff --git a/modules/DesktopPerspective/src/main/java/org/gephi/desktop/perspective/plugin/PreviewPerspective.java b/modules/DesktopWindow/src/main/java/org/gephi/desktop/banner/perspective/plugin/PreviewPerspective.java similarity index 91% rename from modules/DesktopPerspective/src/main/java/org/gephi/desktop/perspective/plugin/PreviewPerspective.java rename to modules/DesktopWindow/src/main/java/org/gephi/desktop/banner/perspective/plugin/PreviewPerspective.java index c464565d52..05f5999098 100644 --- a/modules/DesktopPerspective/src/main/java/org/gephi/desktop/perspective/plugin/PreviewPerspective.java +++ b/modules/DesktopWindow/src/main/java/org/gephi/desktop/banner/perspective/plugin/PreviewPerspective.java @@ -39,7 +39,8 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ -package org.gephi.desktop.perspective.plugin; + +package org.gephi.desktop.banner.perspective.plugin; import javax.swing.Icon; import org.gephi.perspective.spi.Perspective; @@ -49,15 +50,15 @@ Development and Distribution License("CDDL") (collectively, the /** * Preview perspective - * + * * @author Mathieu Bastian */ -@ServiceProvider(service = Perspective.class, position=300) +@ServiceProvider(service = Perspective.class, position = 300) public class PreviewPerspective implements Perspective { @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/desktop/perspective/plugin/resources/preview.png", false); + return ImageUtilities.loadImageIcon("DesktopWindow/preview.svg", false); } @Override diff --git a/modules/DesktopPerspective/src/main/java/org/gephi/desktop/perspective/spi/BottomComponent.java b/modules/DesktopWindow/src/main/java/org/gephi/desktop/banner/perspective/spi/BottomComponent.java similarity index 89% rename from modules/DesktopPerspective/src/main/java/org/gephi/desktop/perspective/spi/BottomComponent.java rename to modules/DesktopWindow/src/main/java/org/gephi/desktop/banner/perspective/spi/BottomComponent.java index f04739e70e..55f1830b9b 100644 --- a/modules/DesktopPerspective/src/main/java/org/gephi/desktop/perspective/spi/BottomComponent.java +++ b/modules/DesktopWindow/src/main/java/org/gephi/desktop/banner/perspective/spi/BottomComponent.java @@ -39,19 +39,19 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ -package org.gephi.desktop.perspective.spi; + +package org.gephi.desktop.banner.perspective.spi; import javax.swing.JComponent; /** - * * @author mbastian */ public interface BottomComponent { - - public JComponent getComponent(); - - public void setVisible(boolean visible); - - public boolean isVisible(); + + JComponent getComponent(); + + boolean isVisible(); + + void setVisible(boolean visible); } diff --git a/modules/DesktopWindow/src/main/java/org/gephi/desktop/banner/workspace/WorkspacePanel.form b/modules/DesktopWindow/src/main/java/org/gephi/desktop/banner/workspace/WorkspacePanel.form new file mode 100644 index 0000000000..d3fc801858 --- /dev/null +++ b/modules/DesktopWindow/src/main/java/org/gephi/desktop/banner/workspace/WorkspacePanel.form @@ -0,0 +1,18 @@ + + +
    + + + + + + + + + + + + + + + diff --git a/modules/DesktopWindow/src/main/java/org/gephi/desktop/banner/workspace/WorkspacePanel.java b/modules/DesktopWindow/src/main/java/org/gephi/desktop/banner/workspace/WorkspacePanel.java new file mode 100644 index 0000000000..fd9800693c --- /dev/null +++ b/modules/DesktopWindow/src/main/java/org/gephi/desktop/banner/workspace/WorkspacePanel.java @@ -0,0 +1,323 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.banner.workspace; + +import java.awt.BorderLayout; +import java.awt.Color; +import java.awt.Component; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import org.gephi.project.api.ProjectController; +import org.gephi.project.api.Workspace; +import org.gephi.project.api.WorkspaceInformation; +import org.gephi.project.api.WorkspaceListener; +import org.gephi.project.api.WorkspaceProvider; +import org.gephi.ui.utils.UIUtils; +import org.netbeans.swing.tabcontrol.DefaultTabDataModel; +import org.netbeans.swing.tabcontrol.TabData; +import org.netbeans.swing.tabcontrol.TabDisplayer; +import org.netbeans.swing.tabcontrol.TabbedContainer; +import org.netbeans.swing.tabcontrol.WinsysInfoForTabbedContainer; +import org.netbeans.swing.tabcontrol.event.TabActionEvent; +import org.openide.awt.Actions; +import org.openide.util.Lookup; +import org.openide.windows.WindowManager; + +public class WorkspacePanel extends javax.swing.JPanel implements WorkspaceListener, PropertyChangeListener { + + private transient final DefaultTabDataModel tabDataModel; + private transient final TabDisplayer tabbedContainer; + + /** + * Creates new form WorkspacePanel + */ + public WorkspacePanel() { + // Make the background the same as the parent component + if (UIUtils.isFlatLafLightLookAndFeel()) { + UIManager.put("EditorTab.background", Color.WHITE); + } + + initComponents(); + + // Init component + tabDataModel = new DefaultTabDataModel(); + + WinsysInfoForTabbedContainer ws = new WinsysInfoForTabbedContainer() { + + @Override + public Object getOrientation(Component cmpnt) { + return TabDisplayer.ORIENTATION_CENTER; + } + + @Override + public boolean inMaximizedMode(Component cmpnt) { + return false; + } + + @Override + public boolean isTopComponentMaximizationEnabled() { + return false; + } + }; + + tabbedContainer = new TabDisplayer(tabDataModel, TabbedContainer.TYPE_EDITOR, ws); + + // Only needed because of the popup switcher (which doesn't go through the action system) + tabbedContainer.getSelectionModel().addChangeListener(new ChangeListener() { + + @Override + public void stateChanged(ChangeEvent e) { + if (tabbedContainer.getSelectionModel().getSelectedIndex() != -1) { + TabData tabData = tabDataModel.getTab(tabbedContainer.getSelectionModel().getSelectedIndex()); + Workspace workspace = (Workspace) tabData.getUserObject(); + ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); + if (pc.getCurrentWorkspace() != null && pc.getCurrentWorkspace() != workspace) { + pc.openWorkspace(workspace); + } + } + } + }); + + tabbedContainer.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + TabActionEvent tabActionEvent = (TabActionEvent) e; + if (TabbedContainer.COMMAND_CLOSE.equals(tabActionEvent.getActionCommand())) { + TabData tabData = tabDataModel.getTab(tabActionEvent.getTabIndex()); + Actions.forID("Workspace", "org.gephi.desktop.project.actions.DeleteWorkspace").actionPerformed( + new ActionEvent(tabData.getUserObject(), 0, null)); + + tabActionEvent.consume(); + } else if (TabbedContainer.COMMAND_CLOSE_ALL.equals(tabActionEvent.getActionCommand())) { + Actions.forID("File", "org.gephi.desktop.project.actions.CloseProject").actionPerformed(null); + tabActionEvent.consume(); + } else if (TabbedContainer.COMMAND_CLOSE_ALL_BUT_THIS.equals(tabActionEvent.getActionCommand())) { + TabData tabData = tabDataModel.getTab(tabActionEvent.getTabIndex()); + + Actions.forID("Workspace", "org.gephi.desktop.project.actions.DeleteOtherWorkspaces").actionPerformed( + new ActionEvent(tabData.getUserObject(), 0, null)); + + tabActionEvent.consume(); + } else if (TabbedContainer.COMMAND_SELECT.equals(tabActionEvent.getActionCommand())) { + TabData tabData = tabDataModel.getTab(tabActionEvent.getTabIndex()); + ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); + pc.openWorkspace((Workspace) tabData.getUserObject()); + tabActionEvent.consume(); + } + } + }); + + // Init listener + WindowManager.getDefault().invokeWhenUIReady(new Runnable() { + + @Override + public void run() { + ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); + pc.addWorkspaceListener(WorkspacePanel.this); + refreshModel(); + } + }); + } + + private synchronized void refreshModel() { + ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); + if (pc.getCurrentProject() != null) { + WorkspaceProvider workspaceProvider = pc.getCurrentProject().getLookup().lookup(WorkspaceProvider.class); + Workspace[] workspaces = workspaceProvider.getWorkspaces(); + if (workspaces.length > 0) { + for (Workspace workspace : workspaces) { + int index = tabDataModel.size(); + WorkspaceInformation workspaceInformation = + workspace.getLookup().lookup(WorkspaceInformation.class); + tabDataModel.addTab(index, + new TabData(workspace, null, workspaceInformation.getName(), + workspaceInformation.getSource())); + if (workspaceProvider.getCurrentWorkspace() == workspace) { + tabbedContainer.getSelectionModel().setSelectedIndex(index); + workspace.getLookup().lookup(WorkspaceInformation.class).addChangeListener(this); + } + } + + add(tabbedContainer, BorderLayout.CENTER); + getParent().revalidate(); + return; + } + } + + // Clear + tabbedContainer.getSelectionModel().clearSelection(); + if (tabDataModel.size() > 0) { + tabDataModel.removeTabs(0, tabDataModel.size() - 1); + } + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + setLayout(new java.awt.BorderLayout()); + }// //GEN-END:initComponents + + + // Variables declaration - do not modify//GEN-BEGIN:variables + // End of variables declaration//GEN-END:variables + @Override + public void initialize(final Workspace workspace) { + final WorkspaceInformation workspaceInformation = workspace.getLookup().lookup(WorkspaceInformation.class); + SwingUtilities.invokeLater(new Runnable() { + + @Override + public void run() { + tabDataModel.addTab(tabDataModel.size(), new TabData(workspace, null, + workspaceInformation.getName(), + workspaceInformation.getSource())); + if (tabDataModel.size() == 1) { + add(tabbedContainer, BorderLayout.CENTER); + getParent().revalidate(); + } + } + }); + } + + @Override + public void select(final Workspace workspace) { + SwingUtilities.invokeLater(new Runnable() { + + @Override + public void run() { + for (int i = 0; i < tabDataModel.size(); i++) { + TabData tabData = tabDataModel.getTab(i); + if (tabData.getUserObject() == workspace) { + if (tabbedContainer.getSelectionModel().getSelectedIndex() != i) { + tabbedContainer.getSelectionModel().setSelectedIndex(i); + } + tabDataModel.setText(i, workspace.getName()); + workspace.getLookup().lookup(WorkspaceInformation.class).addChangeListener(WorkspacePanel.this); + break; + } + } + } + }); + } + + @Override + public void unselect(Workspace workspace) { + workspace.getLookup().lookup(WorkspaceInformation.class).removeChangeListener(this); + } + + @Override + public void close(final Workspace workspace) { + SwingUtilities.invokeLater(new Runnable() { + + @Override + public void run() { + for (int i = 0; i < tabDataModel.size(); i++) { + TabData tabData = tabDataModel.getTab(i); + if (tabData.getUserObject() == workspace) { + tabDataModel.removeTab(i); + break; + } + } + if (tabDataModel.size() == 0) { + tabbedContainer.getSelectionModel().clearSelection(); + + remove(tabbedContainer); + getParent().revalidate(); + } + } + }); + } + + @Override + public void propertyChange(PropertyChangeEvent evt) { + if (evt.getPropertyName().equals(WorkspaceInformation.EVENT_RENAME)) { + + final WorkspaceInformation workspaceInformation = (WorkspaceInformation) evt.getSource(); + SwingUtilities.invokeLater(new Runnable() { + + @Override + public void run() { + for (int i = 0; i < tabDataModel.size(); i++) { + if (tabDataModel.getTab(i).getUserObject() instanceof Workspace) { + Workspace ws = (Workspace) tabDataModel.getTab(i).getUserObject(); + if (ws.getLookup().lookup(WorkspaceInformation.class) == workspaceInformation) { + tabDataModel.setText(i, workspaceInformation.getName()); + break; + } + } + } + } + }); + } else if (evt.getPropertyName().equals(WorkspaceInformation.EVENT_SET_SOURCE)) { + + final WorkspaceInformation workspaceInformation = (WorkspaceInformation) evt.getSource(); + SwingUtilities.invokeLater(new Runnable() { + + @Override + public void run() { + for (int i = 0; i < tabDataModel.size(); i++) { + if (tabDataModel.getTab(i).getUserObject() instanceof Workspace) { + Workspace ws = (Workspace) tabDataModel.getTab(i).getUserObject(); + if (ws.getLookup().lookup(WorkspaceInformation.class) == workspaceInformation) { + tabDataModel.setToolTipTextAt(i, workspaceInformation.getSource()); + break; + } + } + } + } + }); + } + } +} diff --git a/modules/DesktopWindow/src/main/java/org/gephi/desktop/options/package-info.java b/modules/DesktopWindow/src/main/java/org/gephi/desktop/options/package-info.java new file mode 100644 index 0000000000..abdc20c872 --- /dev/null +++ b/modules/DesktopWindow/src/main/java/org/gephi/desktop/options/package-info.java @@ -0,0 +1,15 @@ +@ContainerRegistration + ( + id = "Gephi", + categoryName = "#OptionsCategory_Name_Gephi", + iconBase = "DesktopWindow/options_gephi.svg", + keywords = "#OptionsCategory_Keywords_Gephi", + keywordsCategory = "Gephi", + position = 1000) +@Messages(value = { + "OptionsCategory_Name_Gephi=Gephi", + "OptionsCategory_Keywords_Gephi=gephi"}) +package org.gephi.desktop.options; + +import org.netbeans.spi.options.OptionsPanelController.ContainerRegistration; +import org.openide.util.NbBundle.Messages; \ No newline at end of file diff --git a/modules/DesktopProgress/src/main/java/org/gephi/desktop/progress/ProgressTicketImpl.java b/modules/DesktopWindow/src/main/java/org/gephi/desktop/progress/ProgressTicketImpl.java similarity index 94% rename from modules/DesktopProgress/src/main/java/org/gephi/desktop/progress/ProgressTicketImpl.java rename to modules/DesktopWindow/src/main/java/org/gephi/desktop/progress/ProgressTicketImpl.java index 792c0de69e..97baea6f27 100644 --- a/modules/DesktopProgress/src/main/java/org/gephi/desktop/progress/ProgressTicketImpl.java +++ b/modules/DesktopWindow/src/main/java/org/gephi/desktop/progress/ProgressTicketImpl.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.progress; import org.gephi.utils.progress.ProgressTicket; @@ -48,7 +49,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.Cancellable; /** - * * @author Mathieu Bastian */ public final class ProgressTicketImpl implements ProgressTicket { @@ -76,14 +76,14 @@ public void finish() { handle.finish(); finished = true; } catch (Exception e) { - System.err.println("Progress Handle failed to finish"); } } } /** * Finish the task and display a statusbar message - * @param finishMessage + * + * @param finishMessage Finish message */ @Override public void finish(String finishMessage) { @@ -92,7 +92,6 @@ public void finish(String finishMessage) { handle.finish(); finished = true; } catch (Exception e) { - System.err.println("Progress Handle failed to finish"); } StatusDisplayer.getDefault().setStatusText(finishMessage); } @@ -108,7 +107,8 @@ public void progress() { /** * Notify the user about completed workunits. - * @param a cumulative number of workunits completed so far + * + * @param workunit cumulative number of workunits completed so far */ @Override public void progress(int workunit) { @@ -124,7 +124,8 @@ public void progress(int workunit) { /** * Notify the user about progress by showing message with details. - * @param details about the status of the task + * + * @param message details about the status of the task */ @Override public void progress(String message) { @@ -135,7 +136,8 @@ public void progress(String message) { /** * Notify the user about completed workunits and show additional detailed message. - * @param message details about the status of the task + * + * @param message details about the status of the task * @param workunit a cumulative number of workunits completed so far */ @Override @@ -150,8 +152,19 @@ public void progress(String message, int workunit) { } } + /** + * Returns the current display name. + * + * @return the current task's display name + */ + @Override + public String getDisplayName() { + return displayName; + } + /** * Change the display name of the progress task. Use with care, please make sure the changed name is not completely different, or otherwise it might appear to the user as a different task. + * * @param newDisplayName the new display name */ @Override @@ -162,21 +175,12 @@ public void setDisplayName(String newDisplayName) { } } - /** - * Returns the current display name. - * @return the current task's display name - */ - @Override - public String getDisplayName() { - return displayName; - } - /** * Start the progress indication for indeterminate task. */ @Override public void start() { - if (handle != null) { + if (handle != null && !started) { started = true; handle.start(); } @@ -184,19 +188,23 @@ public void start() { /** * Start the progress indication for a task with known number of steps. + * * @param workunits total number of workunits that will be processed */ @Override public void start(int workunits) { - if (handle != null) { + if (handle != null && !started) { started = true; this.progressTotal = workunits; handle.start(100); + } else if (started && progressTotal == 0){ + switchToDeterminate(workunits); } } /** * Currently indeterminate task can be switched to show percentage completed. + * * @param workunits workunits total number of workunits that will be processed */ @Override @@ -220,4 +228,4 @@ public void switchToIndeterminate() { handle.switchToIndeterminate(); } } -} +} \ No newline at end of file diff --git a/modules/DesktopProgress/src/main/java/org/gephi/desktop/progress/ProgressTicketProviderImpl.java b/modules/DesktopWindow/src/main/java/org/gephi/desktop/progress/ProgressTicketProviderImpl.java similarity index 99% rename from modules/DesktopProgress/src/main/java/org/gephi/desktop/progress/ProgressTicketProviderImpl.java rename to modules/DesktopWindow/src/main/java/org/gephi/desktop/progress/ProgressTicketProviderImpl.java index ff850c8616..e51a1335b3 100644 --- a/modules/DesktopProgress/src/main/java/org/gephi/desktop/progress/ProgressTicketProviderImpl.java +++ b/modules/DesktopWindow/src/main/java/org/gephi/desktop/progress/ProgressTicketProviderImpl.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.progress; import org.gephi.utils.progress.ProgressTicket; @@ -47,7 +48,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = ProgressTicketProvider.class, position = 10) diff --git a/modules/DesktopWindow/src/main/nbm/manifest.mf b/modules/DesktopWindow/src/main/nbm/manifest.mf new file mode 100644 index 0000000000..c9990041af --- /dev/null +++ b/modules/DesktopWindow/src/main/nbm/manifest.mf @@ -0,0 +1,8 @@ +Manifest-Version: 1.0 +AutoUpdate-Essential-Module: true +OpenIDE-Module-Install: org/gephi/desktop/banner/Installer.class +OpenIDE-Module-Layer: org/gephi/desktop/options/layer.xml +OpenIDE-Module-Localizing-Bundle: org/gephi/desktop/banner/Bundle.properties +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi UI +OpenIDE-Module-Name: Desktop Window diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle.properties new file mode 100644 index 0000000000..32bfb4704b --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Implementations of default perspectives and banner panel +OpenIDE-Module-Short-Description=Implementations of default perspectives and banner panel diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_ar.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_ca.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_ca.properties new file mode 100644 index 0000000000..32bfb4704b --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_ca.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Implementations of default perspectives and banner panel +OpenIDE-Module-Short-Description=Implementations of default perspectives and banner panel diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_cs.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_cs.properties new file mode 100644 index 0000000000..460a067b37 --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_cs.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Zavedenν vύchozνch perspektiv a panelu li\u0161ty +OpenIDE-Module-Short-Description=Zavedenν vύchozνch perspektiv a panelu li\u0161ty diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_de.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_de.properties new file mode 100644 index 0000000000..5eda2cf929 --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_de.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Implementierung von Standard-Perspektiven und des Banner-Felds +OpenIDE-Module-Short-Description=Implementierung von Standard-Perspektiven und des Banner-Felds diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_es.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_es.properties new file mode 100644 index 0000000000..aff4244144 --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_es.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Implementaciones de perspectivas por defecto y panel de banner +OpenIDE-Module-Short-Description=Implementaciones de perspectivas por defecto y panel de banner diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_fr.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_fr.properties new file mode 100644 index 0000000000..34801dd636 --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_fr.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Desktop Perspective +OpenIDE-Module-Short-Description=SPI des perspectives et de la gestion de TopComponent diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_he.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_he.properties new file mode 100644 index 0000000000..32bfb4704b --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_he.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Implementations of default perspectives and banner panel +OpenIDE-Module-Short-Description=Implementations of default perspectives and banner panel diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_hu.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_hu.properties new file mode 100644 index 0000000000..019e76b575 --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_hu.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Short-Description=Az alap\u00E9rtelmezett perspekt\u00EDv\u00E1k \u00E9s a banner panel megval\u00F3s\u00EDt\u00E1sai +OpenIDE-Module-Long-Description=Az alap\u00E9rtelmezett perspekt\u00EDv\u00E1k \u00E9s a banner panel megval\u00F3s\u00EDt\u00E1sai diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_it.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_it.properties new file mode 100644 index 0000000000..32bfb4704b --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_it.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Implementations of default perspectives and banner panel +OpenIDE-Module-Short-Description=Implementations of default perspectives and banner panel diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_ja.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_ja.properties new file mode 100644 index 0000000000..2a309b175f --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_ja.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=\u8996\u70b9\u3084\u30c8\u30c3\u30d7\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u7ba1\u7406\u306e\u305f\u3081\u306eSPI +OpenIDE-Module-Short-Description=\u8996\u70b9\u3084\u30c8\u30c3\u30d7\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u7ba1\u7406\u306e\u305f\u3081\u306eSPI diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_ko.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_ko.properties new file mode 100644 index 0000000000..6220930222 --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_ko.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Long-Description=\uAE30\uBCF8 \uAD00\uC810\uACFC \uBC30\uB108 \uD328\uB110\uC758 \uAD6C\uD604 +OpenIDE-Module-Short-Description=\uAE30\uBCF8 \uAD00\uC810\uACFC \uBC30\uB108 \uD328\uB110\uC758 \uAD6C\uD604 diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_nl.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_nl.properties new file mode 100644 index 0000000000..32bfb4704b --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_nl.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Implementations of default perspectives and banner panel +OpenIDE-Module-Short-Description=Implementations of default perspectives and banner panel diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_pt_BR.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_pt_BR.properties new file mode 100644 index 0000000000..69c433f614 --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_pt_BR.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Implementaηυes de perspectivas padrγo e painel de banner +OpenIDE-Module-Short-Description=Implementaηυes de perspectivas padrγo e painel de banner diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_ro.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_ro.properties new file mode 100644 index 0000000000..9c9792c28c --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_ro.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Long-Description=Implement\u0103ri de perspective implicite \u0219i panou banner +OpenIDE-Module-Short-Description=Implement\u0103ri de perspective implicite \u0219i panou banner diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_ru.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_ru.properties new file mode 100644 index 0000000000..2a6f031b68 --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_ru.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=SPI for perspectives and TopComponent management +OpenIDE-Module-Short-Description=SPI for perspectives and TopComponent management diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_th.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_tr.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_tr.properties new file mode 100644 index 0000000000..32bfb4704b --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_tr.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Implementations of default perspectives and banner panel +OpenIDE-Module-Short-Description=Implementations of default perspectives and banner panel diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_uk.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_uk.properties new file mode 100644 index 0000000000..41ec52cb9b --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_uk.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=\u0420\u0435\u0430\u043B\u0456\u0437\u0430\u0446\u0456\u044F \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0438\u0445 \u043F\u0435\u0440\u0441\u043F\u0435\u043A\u0442\u0438\u0432 \u0456 \u0431\u0430\u043D\u0435\u0440\u043D\u043E\u0457 \u043F\u0430\u043D\u0435\u043B\u0456 +OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043B\u0456\u0437\u0430\u0446\u0456\u044F \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0438\u0445 \u043F\u0435\u0440\u0441\u043F\u0435\u043A\u0442\u0438\u0432 \u0456 \u0431\u0430\u043D\u0435\u0440\u043D\u043E\u0457 \u043F\u0430\u043D\u0435\u043B\u0456 diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_zh_CN.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_zh_CN.properties new file mode 100644 index 0000000000..f30e9fe1e1 --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_zh_CN.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=\u5355\u4e2a\u7a0b\u5e8f\u542f\u52a8\u548c\u7ec4\u4ef6\u7ba1\u7406 +OpenIDE-Module-Short-Description=\u5355\u4e2a\u7a0b\u5e8f\u542f\u52a8\u548c\u7ec4\u4ef6\u7ba1\u7406 diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_zh_TW.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_zh_TW.properties new file mode 100644 index 0000000000..32bfb4704b --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/Bundle_zh_TW.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Implementations of default perspectives and banner panel +OpenIDE-Module-Short-Description=Implementations of default perspectives and banner panel diff --git a/modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/Bundle.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle.properties similarity index 100% rename from modules/DesktopPerspective/src/main/resources/org/gephi/desktop/perspective/plugin/Bundle.properties rename to modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle.properties diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_ar.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_ca.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_ca.properties new file mode 100644 index 0000000000..6ce3db53ce --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_ca.properties @@ -0,0 +1,3 @@ +OverviewPerspective.name = Panorΰmica +LaboratoryPerspective.name = Laboratori de dades +PreviewPerspective.name = Previsualitza diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_cs.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_cs.properties new file mode 100644 index 0000000000..3a8e2a79a8 --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_cs.properties @@ -0,0 +1,3 @@ +OverviewPerspective.name = P\u0159ehled +LaboratoryPerspective.name = Laborato\u0159 dat +PreviewPerspective.name = Nαhled diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_de.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_de.properties new file mode 100644 index 0000000000..6212c1d8b3 --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_de.properties @@ -0,0 +1,3 @@ +OverviewPerspective.name = άbersicht +LaboratoryPerspective.name = Datenlabor +PreviewPerspective.name = Vorschau diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_es.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_es.properties new file mode 100644 index 0000000000..158d3f5c72 --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_es.properties @@ -0,0 +1,3 @@ +OverviewPerspective.name = Vista general +LaboratoryPerspective.name = Laboratorio de datos +PreviewPerspective.name = Previsualizaciσn diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_fr.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_fr.properties new file mode 100644 index 0000000000..d63b8264f7 --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_fr.properties @@ -0,0 +1,3 @@ +OverviewPerspective.name = Vue d'ensemble +LaboratoryPerspective.name = Laboratoire de donnιes +PreviewPerspective.name = Prιvisualisation diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_he.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_he.properties new file mode 100644 index 0000000000..0e5a8469fb --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_he.properties @@ -0,0 +1,3 @@ +OverviewPerspective.name=Overview +LaboratoryPerspective.name=Data Laboratory +PreviewPerspective.name=Preview diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_hu.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_hu.properties new file mode 100644 index 0000000000..c01219ce83 --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_hu.properties @@ -0,0 +1,5 @@ + + +PreviewPerspective.name=El\u0151n\u00E9zet +OverviewPerspective.name=\u00C1ttekint\u00E9s +LaboratoryPerspective.name=Adatlaborat\u00F3rium diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_it.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_it.properties new file mode 100644 index 0000000000..0e5a8469fb --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_it.properties @@ -0,0 +1,3 @@ +OverviewPerspective.name=Overview +LaboratoryPerspective.name=Data Laboratory +PreviewPerspective.name=Preview diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_ja.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_ja.properties new file mode 100644 index 0000000000..3865480a29 --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_ja.properties @@ -0,0 +1,3 @@ +OverviewPerspective.name = \u6982\u89b3 +LaboratoryPerspective.name = \u30c7\u30fc\u30bf\u5de5\u623f +PreviewPerspective.name = \u30d7\u30ec\u30d3\u30e5\u30fc diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_ko.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_ko.properties new file mode 100644 index 0000000000..6b181aa726 --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_ko.properties @@ -0,0 +1,5 @@ + + +PreviewPerspective.name=\uBBF8\uB9AC\uBCF4\uAE30 +OverviewPerspective.name=\uAC1C\uC694 +LaboratoryPerspective.name=\uB370\uC774\uD130 \uC2E4\uD5D8\uC2E4 diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_nl.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_nl.properties new file mode 100644 index 0000000000..0e5a8469fb --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_nl.properties @@ -0,0 +1,3 @@ +OverviewPerspective.name=Overview +LaboratoryPerspective.name=Data Laboratory +PreviewPerspective.name=Preview diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_pt_BR.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_pt_BR.properties new file mode 100644 index 0000000000..096159e674 --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_pt_BR.properties @@ -0,0 +1,3 @@ +OverviewPerspective.name = Visγo geral +LaboratoryPerspective.name = Laboratσrio de dados +PreviewPerspective.name = Visualizaηγo diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_ro.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_ro.properties new file mode 100644 index 0000000000..380207d70d --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_ro.properties @@ -0,0 +1,5 @@ + + +OverviewPerspective.name=Prezentare general\u0103 +LaboratoryPerspective.name=Laborator de date +PreviewPerspective.name=Previzualizare diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_ru.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_ru.properties new file mode 100644 index 0000000000..4b213cf3b1 --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_ru.properties @@ -0,0 +1,3 @@ +OverviewPerspective.name = \u041e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0430 +LaboratoryPerspective.name = \u041b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445 +PreviewPerspective.name = \u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_th.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_tr.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_tr.properties new file mode 100644 index 0000000000..0e5a8469fb --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_tr.properties @@ -0,0 +1,3 @@ +OverviewPerspective.name=Overview +LaboratoryPerspective.name=Data Laboratory +PreviewPerspective.name=Preview diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_uk.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_uk.properties new file mode 100644 index 0000000000..8914476c37 --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_uk.properties @@ -0,0 +1,3 @@ +OverviewPerspective.name=\u041E\u0433\u043B\u044F\u0434 +LaboratoryPerspective.name=\u041B\u0430\u0431\u043E\u0440\u0430\u0442\u043E\u0440\u0456\u044F \u0434\u0430\u043D\u0438\u0445 +PreviewPerspective.name=\u041F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u0456\u0439 \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u0434 diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_zh_CN.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_zh_CN.properties new file mode 100644 index 0000000000..438da51c12 --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_zh_CN.properties @@ -0,0 +1,3 @@ +OverviewPerspective.name = \u6982\u89c8 +LaboratoryPerspective.name = \u6570\u636e\u8d44\u6599 +PreviewPerspective.name = \u9884\u89c8 diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_zh_TW.properties b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_zh_TW.properties new file mode 100644 index 0000000000..0e5a8469fb --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/banner/perspective/plugin/Bundle_zh_TW.properties @@ -0,0 +1,3 @@ +OverviewPerspective.name=Overview +LaboratoryPerspective.name=Data Laboratory +PreviewPerspective.name=Preview diff --git a/modules/DesktopWindow/src/main/resources/org/gephi/desktop/options/layer.xml b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/options/layer.xml new file mode 100644 index 0000000000..a4f4a006c2 --- /dev/null +++ b/modules/DesktopWindow/src/main/resources/org/gephi/desktop/options/layer.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/DirectoryChooser/pom.xml b/modules/DirectoryChooser/pom.xml deleted file mode 100644 index 10f8d877ac..0000000000 --- a/modules/DirectoryChooser/pom.xml +++ /dev/null @@ -1,54 +0,0 @@ - - - 4.0.0 - - gephi-parent - org.gephi - 0.9-SNAPSHOT - ../.. - - - org.gephi - directory-chooser - 0.9-SNAPSHOT - nbm - - DirectoryChooser - - - - org.netbeans.api - org-openide-awt - - - org.netbeans.api - org-openide-util - - - org.netbeans.api - org-openide-filesystems - - - org.netbeans.api - org-openide-modules - - - org.netbeans.api - org-openide-util-lookup - - - - - - - org.codehaus.mojo - nbm-maven-plugin - - - org.netbeans.swing.dirchooser.spi - - - - - - diff --git a/modules/DirectoryChooser/src/main/java/org/netbeans/swing/dirchooser/DelegatingChooserUI.java b/modules/DirectoryChooser/src/main/java/org/netbeans/swing/dirchooser/DelegatingChooserUI.java deleted file mode 100644 index f72786884b..0000000000 --- a/modules/DirectoryChooser/src/main/java/org/netbeans/swing/dirchooser/DelegatingChooserUI.java +++ /dev/null @@ -1,132 +0,0 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - * - * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. - * - * The contents of this file are subject to the terms of either the GNU - * General Public License Version 2 only ("GPL") or the Common - * Development and Distribution License("CDDL") (collectively, the - * "License"). You may not use this file except in compliance with the - * License. You can obtain a copy of the License at - * http://www.netbeans.org/cddl-gplv2.html - * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the - * specific language governing permissions and limitations under the - * License. When distributing the software, include this License Header - * Notice in each file and include the License file at - * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the GPL Version 2 section of the License file that - * accompanied this code. If applicable, add the following below the - * License Header, with the fields enclosed by brackets [] replaced by - * your own identifying information: - * "Portions Copyrighted [year] [name of copyright owner]" - * - * Contributor(s): - * - * The Original Software is NetBeans. The Initial Developer of the Original - * Software is Sun Microsystems, Inc. Portions Copyright 1997-2007 Sun - * Microsystems, Inc. All Rights Reserved. - * - * If you wish your version of this file to be governed by only the CDDL - * or only the GPL Version 2, indicate your decision by adding - * "[Contributor] elects to include this software in this distribution - * under the [CDDL or GPL Version 2] license." If you do not indicate a - * single choice of license, a recipient has the option to distribute - * your version of this file under either the CDDL, the GPL Version 2 or - * to extend the choice of license to its licensees as provided above. - * However, if you add GPL Version 2 code and therefore, elected the GPL - * Version 2 license, then the option applies only if the new code is - * made subject to such option by the copyright holder. - */ -package org.netbeans.swing.dirchooser; - -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.lang.reflect.Method; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.swing.JComponent; -import javax.swing.JFileChooser; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.FileChooserUI; -import javax.swing.plaf.metal.MetalFileChooserUI; -import org.openide.util.Utilities; - -/** Placeholder ComponentUI that just delegates to other FileChooserUIs - * based on what selection mode is set in JFileChooser. - * - * @author Dafe Simonek - */ -public class DelegatingChooserUI extends ComponentUI { - - static final String USE_SHELL_FOLDER = "FileChooser.useShellFolder"; - static final String NB_USE_SHELL_FOLDER = "nb.FileChooser.useShellFolder"; - static final String START_TIME = "start.time"; - - private static boolean firstTime = true; - - public static ComponentUI createUI(JComponent c) { - JFileChooser fc = (JFileChooser)c; - - // #109703 - don't use shell folder on JDK versions interval <1.6.0_02, 1.6.0_10>, - // it's terribly slow on Windows due to JDK bug - if (Utilities.isWindows()) { - if (System.getProperty(NB_USE_SHELL_FOLDER) != null) { - fc.putClientProperty(USE_SHELL_FOLDER, Boolean.getBoolean(NB_USE_SHELL_FOLDER)); - } else { - String jv = System.getProperty("java.version"); - jv = jv.split("-", 2)[0]; - if ("1.6.0_02".compareToIgnoreCase(jv) <= 0 && - "1.6.0_10".compareToIgnoreCase(jv) >= 0) { - if (!Boolean.TRUE.equals(fc.getClientProperty(USE_SHELL_FOLDER))) { - fc.putClientProperty(USE_SHELL_FOLDER, Boolean.FALSE); - } - } - } - } - - // mark start time, just once during init (code can be run multiple times - // because of property listenign below) - if (fc.getClientProperty(START_TIME) == null) { - fc.putClientProperty(START_TIME, Long.valueOf(System.currentTimeMillis())); - } - - Class chooser = getCurChooser(fc); - ComponentUI compUI; - try { - Method createUIMethod = chooser.getMethod("createUI", JComponent.class); - compUI = (ComponentUI) createUIMethod.invoke(null, fc); - } catch (Exception exc) { - Logger.getLogger(DelegatingChooserUI.class.getName()).log(Level.FINE, - "Could not instantiate custom chooser, fallbacking to Metal", exc); - compUI = MetalFileChooserUI.createUI(c); - } - - // listen to sel mode changes and select correct chooser by invoking - // filechooser.updateUI() which triggers this createUI again - if (firstTime) { - fc.addPropertyChangeListener( - JFileChooser.FILE_SELECTION_MODE_CHANGED_PROPERTY, - new PropertyChangeListener () { - public void propertyChange(PropertyChangeEvent evt) { - JFileChooser fileChooser = (JFileChooser)evt.getSource(); - fileChooser.updateUI(); - } - } - ); - } - - return compUI; - } - - /** Returns dirchooser for DIRECTORIES_ONLY, default filechooser for other - * selection modes. - */ - private static Class getCurChooser (JFileChooser fc) { - if (fc.getFileSelectionMode() == JFileChooser.DIRECTORIES_ONLY) { - return DirectoryChooserUI.class; - } - return Module.getOrigChooser(); - } - -} diff --git a/modules/DirectoryChooser/src/main/java/org/netbeans/swing/dirchooser/DirectoryCellEditor.java b/modules/DirectoryChooser/src/main/java/org/netbeans/swing/dirchooser/DirectoryCellEditor.java deleted file mode 100644 index 1313f3d200..0000000000 --- a/modules/DirectoryChooser/src/main/java/org/netbeans/swing/dirchooser/DirectoryCellEditor.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - * - * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. - * - * The contents of this file are subject to the terms of either the GNU - * General Public License Version 2 only ("GPL") or the Common - * Development and Distribution License("CDDL") (collectively, the - * "License"). You may not use this file except in compliance with the - * License. You can obtain a copy of the License at - * http://www.netbeans.org/cddl-gplv2.html - * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the - * specific language governing permissions and limitations under the - * License. When distributing the software, include this License Header - * Notice in each file and include the License file at - * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the GPL Version 2 section of the License file that - * accompanied this code. If applicable, add the following below the - * License Header, with the fields enclosed by brackets [] replaced by - * your own identifying information: - * "Portions Copyrighted [year] [name of copyright owner]" - * - * Contributor(s): - * - * The Original Software is NetBeans. The Initial Developer of the Original - * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun - * Microsystems, Inc. All Rights Reserved. - * - * If you wish your version of this file to be governed by only the CDDL - * or only the GPL Version 2, indicate your decision by adding - * "[Contributor] elects to include this software in this distribution - * under the [CDDL or GPL Version 2] license." If you do not indicate a - * single choice of license, a recipient has the option to distribute - * your version of this file under either the CDDL, the GPL Version 2 or - * to extend the choice of license to its licensees as provided above. - * However, if you add GPL Version 2 code and therefore, elected the GPL - * Version 2 license, then the option applies only if the new code is - * made subject to such option by the copyright holder. - * - * Contributor(s): Soot Phengsy - */ - -package org.netbeans.swing.dirchooser; - -import java.awt.BorderLayout; -import java.awt.Component; -import java.awt.event.MouseEvent; -import java.util.EventObject; -import javax.swing.DefaultCellEditor; -import javax.swing.JFileChooser; -import javax.swing.JLabel; -import javax.swing.JPanel; -import javax.swing.JTextField; -import javax.swing.JTree; - -/** - * A simple tree cell editor helper used to properly display a node while in editing mode. - * @author Soot Phengsy - */ -class DirectoryCellEditor extends DefaultCellEditor { - - private final JPanel editorPanel = new JPanel(new BorderLayout()); - private static JTextField textField; - private static JTree tree; - private static JFileChooser fileChooser; - - public DirectoryCellEditor(JTree tree, JFileChooser fileChooser, final JTextField textField) { - super(textField); - this.tree = tree; - this.textField = textField; - this.fileChooser = fileChooser; - } - - public boolean isCellEditable(EventObject event) { - return ((event instanceof MouseEvent) ? false : true); - } - - public Component getTreeCellEditorComponent(JTree tree, Object value, boolean isSelected, boolean expanded, boolean leaf, int row) { - Component c = super.getTreeCellEditorComponent(tree, value, isSelected, expanded, leaf, row); - DirectoryNode node = (DirectoryNode)value; - editorPanel.setOpaque(false); - editorPanel.add(new JLabel(fileChooser.getIcon(node.getFile())), BorderLayout.CENTER); - editorPanel.add(c, BorderLayout.EAST); - textField = (JTextField)getComponent(); - String text = fileChooser.getName(node.getFile()); - textField.setText(text); - textField.setColumns(text.length()); - return editorPanel; - } - - public static JTextField getTextField() { - return textField; - } -} diff --git a/modules/DirectoryChooser/src/main/java/org/netbeans/swing/dirchooser/DirectoryChooserUI.java b/modules/DirectoryChooser/src/main/java/org/netbeans/swing/dirchooser/DirectoryChooserUI.java deleted file mode 100644 index 8e8aaddcae..0000000000 --- a/modules/DirectoryChooser/src/main/java/org/netbeans/swing/dirchooser/DirectoryChooserUI.java +++ /dev/null @@ -1,2481 +0,0 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - * - * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. - * - * The contents of this file are subject to the terms of either the GNU - * General Public License Version 2 only ("GPL") or the Common - * Development and Distribution License("CDDL") (collectively, the - * "License"). You may not use this file except in compliance with the - * License. You can obtain a copy of the License at - * http://www.netbeans.org/cddl-gplv2.html - * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the - * specific language governing permissions and limitations under the - * License. When distributing the software, include this License Header - * Notice in each file and include the License file at - * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the GPL Version 2 section of the License file that - * accompanied this code. If applicable, add the following below the - * License Header, with the fields enclosed by brackets [] replaced by - * your own identifying information: - * "Portions Copyrighted [year] [name of copyright owner]" - * - * Contributor(s): - * - * The Original Software is NetBeans. The Initial Developer of the Original - * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun - * Microsystems, Inc. All Rights Reserved. - * - * If you wish your version of this file to be governed by only the CDDL - * or only the GPL Version 2, indicate your decision by adding - * "[Contributor] elects to include this software in this distribution - * under the [CDDL or GPL Version 2] license." If you do not indicate a - * single choice of license, a recipient has the option to distribute - * your version of this file under either the CDDL, the GPL Version 2 or - * to extend the choice of license to its licensees as provided above. - * However, if you add GPL Version 2 code and therefore, elected the GPL - * Version 2 license, then the option applies only if the new code is - * made subject to such option by the copyright holder. - * - * Contributor(s): Soot Phengsy - */ - -package org.netbeans.swing.dirchooser; - -import java.util.logging.Level; -import javax.swing.*; -import javax.swing.Timer; -import javax.swing.event.TreeExpansionListener; -import javax.swing.event.TreeSelectionEvent; -import javax.swing.event.TreeSelectionListener; -import javax.swing.filechooser.*; -import javax.swing.plaf.basic.*; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.FocusAdapter; -import java.awt.event.FocusEvent; -import java.awt.event.FocusListener; -import java.awt.event.KeyAdapter; -import java.awt.event.KeyEvent; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.io.File; -import java.io.IOException; -import java.lang.ref.WeakReference; -import java.lang.reflect.Constructor; -import java.security.AccessControlException; -import java.text.MessageFormat; -import java.util.*; -import java.util.logging.Logger; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import javax.swing.border.EmptyBorder; -import javax.swing.event.CellEditorListener; -import javax.swing.event.ChangeEvent; -import javax.swing.event.DocumentEvent; -import javax.swing.event.DocumentListener; -import javax.swing.event.TreeExpansionEvent; -import javax.swing.plaf.ActionMapUIResource; -import javax.swing.plaf.ComponentUI; -import javax.swing.plaf.UIResource; -import javax.swing.tree.DefaultTreeModel; -import javax.swing.tree.TreeCellEditor; -import javax.swing.tree.TreePath; -import javax.swing.tree.TreeCellRenderer; -import javax.swing.tree.TreeNode; -import javax.swing.tree.TreeSelectionModel; -import org.netbeans.swing.dirchooser.spi.CustomDirectoryProvider; -import org.openide.awt.HtmlRenderer; -import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileUtil; -import org.openide.util.ImageUtilities; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; -import org.openide.util.NbPreferences; -import org.openide.util.RequestProcessor; -import org.openide.util.Utilities; - - -/** - * An implementation of a customized filechooser. - * - * @author Soot Phengsy, inspired by Jeff Dinkins' Swing version - */ -public class DirectoryChooserUI extends BasicFileChooserUI { - - private static final Dimension horizontalStrut1 = new Dimension(25, 1); - private static final Dimension verticalStrut1 = new Dimension(1, 4); - private static final Dimension verticalStrut2 = new Dimension(1, 6); - private static final Dimension verticalStrut3 = new Dimension(1, 8); - private static Dimension PREF_SIZE = new Dimension(425, 245); - private static Dimension MIN_SIZE = new Dimension(425, 245); - private static Dimension TREE_PREF_SIZE = new Dimension(380, 230); - private static final int ACCESSORY_WIDTH = 250; - - private static final Logger LOG = Logger.getLogger(DirectoryChooserUI.class.getName()); - - private static final String TIMEOUT_KEY="nb.fileChooser.timeout"; // NOI18N - - private JPanel centerPanel; - - private JLabel lookInComboBoxLabel; - - private JComboBox directoryComboBox; - - private DirectoryComboBoxModel directoryComboBoxModel; - - private ActionListener directoryComboBoxAction = new DirectoryComboBoxAction(); - - private FilterTypeComboBoxModel filterTypeComboBoxModel; - - private JTextField filenameTextField; - - private JComponent placesBar; - private boolean placesBarFailed = false; - - private JButton approveButton; - private JButton cancelButton; - - private JPanel buttonPanel; - private JPanel bottomPanel; - - private JComboBox filterTypeComboBox; - - private int lookInLabelMnemonic = 0; - private String lookInLabelText = null; - private String saveInLabelText = null; - - private int fileNameLabelMnemonic = 0; - private String fileNameLabelText = null; - - private int filesOfTypeLabelMnemonic = 0; - private String filesOfTypeLabelText = null; - - private String upFolderToolTipText = null; - private String upFolderAccessibleName = null; - - private String newFolderToolTipText = null; - - private String homeFolderTooltipText = null; - - private Action newFolderAction = new NewDirectoryAction(); - - private BasicFileView fileView = new DirectoryChooserFileView(); - - private static JTree tree; - - private DirectoryTreeModel model; - - private DirectoryNode newFolderNode; - - private JComponent treeViewPanel; - - private InputBlocker blocker; - - private static JFileChooser fileChooser; - - private boolean changeDirectory = true; - - private boolean showPopupCompletion = false; - - private boolean addNewDirectory = false; - - private JPopupMenu popupMenu; - - private FileCompletionPopup completionPopup; - - private RequestProcessor.Task updateWorker; - - private boolean useShellFolder = false; - - private JButton upFolderButton; - private JButton newFolderButton; - - private JComponent topCombo, topComboWrapper, topToolbar; - private JPanel slownessPanel; - - private CustomDirectoryProvider customDirectoryProvider; - - public static ComponentUI createUI(JComponent c) { - return new DirectoryChooserUI((JFileChooser) c); - } - - public DirectoryChooserUI(JFileChooser filechooser) { - super(filechooser); - - Collection directoryProviders = - Lookup.getDefault().lookupAll(CustomDirectoryProvider.class); - - customDirectoryProvider = null; - for (CustomDirectoryProvider directoryProvider : directoryProviders) { - if (directoryProvider.isEnabled()) { - this.customDirectoryProvider = directoryProvider; - break; - } - } - } - - public void installUI(JComponent c) { - super.installUI(c); - } - - public void uninstallComponents(JFileChooser fc) { - fc.removeAll(); - super.uninstallComponents(fc); - } - - public void installComponents(JFileChooser fc) { - fileChooser = fc; - - fc.setFocusCycleRoot(true); - fc.setBorder(new EmptyBorder(4, 10, 10, 10)); - fc.setLayout(new BorderLayout(8, 8)); - - updateUseShellFolder(); - createCenterPanel(fc); - fc.add(centerPanel, BorderLayout.CENTER); - - if (fc.isMultiSelectionEnabled()) { - setFileName(getStringOfFileNames(fc.getSelectedFiles())); - } else { - setFileName(getStringOfFileName(fc.getSelectedFile())); - } - - if(fc.getControlButtonsAreShown()) { - addControlButtons(); - } - - createPopup(); - } - - @Override - public String getDialogTitle(JFileChooser fc) { - String title = super.getDialogTitle(fc); - fc.getAccessibleContext().setAccessibleDescription(title); - return title; - } - - private void updateUseShellFolder() { - // Decide whether to use the ShellFolder class to populate shortcut - // panel and combobox. - - Boolean prop = - (Boolean)fileChooser.getClientProperty(DelegatingChooserUI.USE_SHELL_FOLDER); - if (prop != null) { - useShellFolder = prop.booleanValue(); - } else { - // See if FileSystemView.getRoots() returns the desktop folder, - // i.e. the normal Windows hierarchy. - useShellFolder = false; - File[] roots = fileChooser.getFileSystemView().getRoots(); - if (roots != null && roots.length == 1) { - File[] cbFolders = getShellFolderRoots(); - if (cbFolders != null && cbFolders.length > 0 && roots[0] == cbFolders[0]) { - useShellFolder = true; - } - } - } - - if (Utilities.isWindows()) { - if (useShellFolder) { - if (placesBar == null) { - placesBar = getPlacesBar(); - } - if (placesBar != null) { - fileChooser.add(placesBar, BorderLayout.BEFORE_LINE_BEGINS); - if (placesBar instanceof PropertyChangeListener) { - fileChooser.addPropertyChangeListener((PropertyChangeListener)placesBar); - } - } - } else { - if (placesBar != null) { - fileChooser.remove(placesBar); - if (placesBar instanceof PropertyChangeListener) { - fileChooser.removePropertyChangeListener((PropertyChangeListener)placesBar); - } - placesBar = null; - } - } - } - } - - /** Returns instance of WindowsPlacesBar class or null in case of failure - */ - private JComponent getPlacesBar () { - if (placesBarFailed) { - return null; - } - try { - Class clazz = Class.forName("sun.swing.WindowsPlacesBar"); - Class[] params = new Class[] { JFileChooser.class, Boolean.TYPE }; - Constructor constr = clazz.getConstructor(params); - return (JComponent)constr.newInstance(fileChooser, isXPStyle().booleanValue()); - } catch (Exception exc) { - // reflection not succesfull, just log the exception and return null - Logger.getLogger(DirectoryChooserUI.class.getName()).log( - Level.FINE, "WindowsPlacesBar class can't be instantiated.", exc); - placesBarFailed = true; - return null; - } - } - - /** Reflection alternative of - * sun.awt.shell.ShellFolder.getShellFolder(file) - */ - private File getShellFolderForFile (File file) { - try { - Class clazz = Class.forName("sun.awt.shell.ShellFolder"); - return (File) clazz.getMethod("getShellFolder", File.class).invoke(null, file); - } catch (Exception exc) { - // reflection not succesfull, just log the exception and return null - Logger.getLogger(DirectoryChooserUI.class.getName()).log( - Level.FINE, "ShellFolder can't be used.", exc); - return null; - } - } - - /** Reflection alternative of - * sun.awt.shell.ShellFolder.getShellFolder(dir).getLinkLocation() - */ - private File getShellFolderForFileLinkLoc (File file) { - try { - Class clazz = Class.forName("sun.awt.shell.ShellFolder"); - Object sf = clazz.getMethod("getShellFolder", File.class).invoke(null, file); - return (File) clazz.getMethod("getLinkLocation").invoke(sf); - } catch (Exception exc) { - // reflection not succesfull, just log the exception and return null - Logger.getLogger(DirectoryChooserUI.class.getName()).log( - Level.FINE, "ShellFolder can't be used.", exc); - return null; - } - - } - - /** Reflection alternative of - * sun.awt.shell.ShellFolder.get("fileChooserComboBoxFolders") - */ - private File[] getShellFolderRoots () { - try { - Class clazz = Class.forName("sun.awt.shell.ShellFolder"); - return (File[]) clazz.getMethod("get", String.class).invoke(null, "fileChooserComboBoxFolders"); - } catch (Exception exc) { - // reflection not succesfull, just log the exception and return null - Logger.getLogger(DirectoryChooserUI.class.getName()).log( - Level.FINE, "ShellFolder can't be used.", exc); - return null; - } - } - - private void createBottomPanel(JFileChooser fc) { - bottomPanel = new JPanel(); - bottomPanel.setLayout(new BoxLayout(bottomPanel, BoxLayout.LINE_AXIS)); - JPanel labelPanel = new JPanel(); - labelPanel.setLayout(new BoxLayout(labelPanel, BoxLayout.PAGE_AXIS)); - labelPanel.add(Box.createRigidArea(verticalStrut1)); - - JLabel fnl = new JLabel(fileNameLabelText); - fnl.setDisplayedMnemonic(fileNameLabelMnemonic); - fnl.setAlignmentY(0); - labelPanel.add(fnl); - - labelPanel.add(Box.createRigidArea(new Dimension(1,12))); - - JLabel ftl = new JLabel(filesOfTypeLabelText); - ftl.setDisplayedMnemonic(filesOfTypeLabelMnemonic); - labelPanel.add(ftl); - - bottomPanel.add(labelPanel); - bottomPanel.add(Box.createRigidArea(new Dimension(15, 0))); - - JPanel fileAndFilterPanel = new JPanel(); - fileAndFilterPanel.add(Box.createRigidArea(verticalStrut3)); - fileAndFilterPanel.setLayout(new BoxLayout(fileAndFilterPanel, BoxLayout.Y_AXIS)); - - filenameTextField = new JTextField(24) { - public Dimension getMaximumSize() { - return new Dimension(Short.MAX_VALUE, super.getPreferredSize().height); - } - }; - - filenameTextField.getDocument().addDocumentListener(new DocumentListener() { - public void insertUpdate(DocumentEvent e) { - updateCompletions(); - } - public void removeUpdate(DocumentEvent e) { - updateCompletions(); - } - public void changedUpdate(DocumentEvent e) {} - }); - - filenameTextField.addKeyListener(new TextFieldKeyListener()); - - fnl.setLabelFor(filenameTextField); - filenameTextField.addFocusListener( - new FocusAdapter() { - public void focusGained(FocusEvent e) { - if (!getFileChooser().isMultiSelectionEnabled()) { - tree.clearSelection(); - } - } - }); - - // disable TAB focus transfer, we need it for completion - Set tKeys = filenameTextField.getFocusTraversalKeys(java.awt.KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS); - Set newTKeys = new HashSet(tKeys); - newTKeys.remove(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_TAB, 0)); - // #107305: enable at least Ctrl+TAB if we have TAB for completion - newTKeys.add(AWTKeyStroke.getAWTKeyStroke(KeyEvent.VK_TAB, KeyEvent.CTRL_DOWN_MASK)); - filenameTextField.setFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS, newTKeys); - - fileAndFilterPanel.add(filenameTextField); - fileAndFilterPanel.add(Box.createRigidArea(verticalStrut3)); - - filterTypeComboBoxModel = createFilterComboBoxModel(); - fc.addPropertyChangeListener(filterTypeComboBoxModel); - filterTypeComboBox = new JComboBox(filterTypeComboBoxModel); - ftl.setLabelFor(filterTypeComboBox); - filterTypeComboBox.setRenderer(createFilterComboBoxRenderer()); - fileAndFilterPanel.add(filterTypeComboBox); - - bottomPanel.add(fileAndFilterPanel); - bottomPanel.add(Box.createRigidArea(horizontalStrut1)); - createButtonsPanel(fc); - } - - private void createButtonsPanel(JFileChooser fc) { - buttonPanel = new JPanel(); - buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.Y_AXIS)); - - approveButton = new JButton(getApproveButtonText(fc)) { - public Dimension getMaximumSize() { - return approveButton.getPreferredSize().width > cancelButton.getPreferredSize().width ? - approveButton.getPreferredSize() : cancelButton.getPreferredSize(); - } - }; - // #107791: No mnemonics desirable on Mac - if (!Utilities.isMac()) { - approveButton.setMnemonic(getApproveButtonMnemonic(fc)); - } - approveButton.addActionListener(getApproveSelectionAction()); - approveButton.setToolTipText(getApproveButtonToolTipText(fc)); - buttonPanel.add(Box.createRigidArea(verticalStrut1)); - buttonPanel.add(approveButton); - buttonPanel.add(Box.createRigidArea(verticalStrut2)); - - cancelButton = new JButton(cancelButtonText) { - public Dimension getMaximumSize() { - return approveButton.getPreferredSize().width > cancelButton.getPreferredSize().width ? - approveButton.getPreferredSize() : cancelButton.getPreferredSize(); - } - }; - // #107791: No mnemonics desirable on Mac - if (!Utilities.isMac()) { - cancelButton.setMnemonic(cancelButtonMnemonic); - } - cancelButton.setToolTipText(cancelButtonToolTipText); - cancelButton.addActionListener(getCancelSelectionAction()); - buttonPanel.add(cancelButton); - - //TODO initial approve button disabled code started - if (customDirectoryProvider != null) - approveButton.setEnabled(false); - //TODO initial approve button disabled code ended - } - - private void createCenterPanel(final JFileChooser fc) { - centerPanel = new JPanel(new BorderLayout()); - treeViewPanel = createTree(); - treeViewPanel.setPreferredSize(TREE_PREF_SIZE); - JPanel treePanel = new JPanel(); - treePanel.setLayout(new BorderLayout()); - JComponent accessory = fc.getAccessory(); - topToolbar = createTopToolbar(); - topCombo = createTopCombo(fc); - topComboWrapper = new JPanel(new BorderLayout()); - topComboWrapper.add(topCombo, BorderLayout.CENTER); - if (accessory == null) { - topComboWrapper.add(topToolbar, BorderLayout.EAST); - } - treePanel.add(topComboWrapper, BorderLayout.NORTH); - treePanel.add(treeViewPanel, BorderLayout.CENTER); - centerPanel.add(treePanel, BorderLayout.CENTER); - // control width of accessory panel, don't allow to jump (change width) - JPanel wrapAccessory = new JPanel() { - private Dimension prefSize = new Dimension(ACCESSORY_WIDTH, 0); - private Dimension minSize = new Dimension(ACCESSORY_WIDTH, 0); - - public Dimension getMinimumSize () { - if (fc.getAccessory() != null) { - minSize.height = getAccessoryPanel().getMinimumSize().height; - return minSize; - } - return super.getMinimumSize(); - } - public Dimension getPreferredSize () { - if (fc.getAccessory() != null) { - Dimension origPref = getAccessoryPanel().getPreferredSize(); - LOG.fine("AccessoryWrapper.getPreferredSize: orig pref size: " + origPref); - - prefSize.height = origPref.height; - - prefSize.width = Math.max(prefSize.width, origPref.width); - int centerW = centerPanel.getWidth(); - if (centerW != 0 && prefSize.width > centerW / 2) { - prefSize.width = centerW / 2; - } - LOG.fine("AccessoryWrapper.getPreferredSize: resulting pref size: " + prefSize); - - return prefSize; - } - return super.getPreferredSize(); - } - }; - wrapAccessory.setLayout(new BorderLayout()); - JPanel accessoryPanel = getAccessoryPanel(); - if (accessory != null) { - accessoryPanel.add(topToolbar, BorderLayout.NORTH); - accessoryPanel.add(accessory, BorderLayout.CENTER); - } - wrapAccessory.add(accessoryPanel, BorderLayout.CENTER); - centerPanel.add(wrapAccessory, BorderLayout.EAST); - createBottomPanel(fc); - centerPanel.add(bottomPanel, BorderLayout.SOUTH); - } - - - - private JComponent createTopCombo(JFileChooser fc) { - JPanel panel = new JPanel(); - if (fc.getAccessory() != null) { - panel.setBorder(BorderFactory.createEmptyBorder(4, 0, 8, 0)); - } else { - panel.setBorder(BorderFactory.createEmptyBorder(6, 0, 10, 0)); - } - panel.setLayout(new BorderLayout()); - - Box labelBox = Box.createHorizontalBox(); - - lookInComboBoxLabel = new JLabel(lookInLabelText); - lookInComboBoxLabel.setDisplayedMnemonic(lookInLabelMnemonic); - lookInComboBoxLabel.setAlignmentX(JComponent.LEFT_ALIGNMENT); - lookInComboBoxLabel.setAlignmentY(JComponent.CENTER_ALIGNMENT); - - labelBox.add(lookInComboBoxLabel); - labelBox.add(Box.createRigidArea(new Dimension(9,0))); - - // fixed #97525, made the height of the - // combo box bigger. - directoryComboBox = new JComboBox() { - public Dimension getMinimumSize() { - Dimension d = super.getMinimumSize(); - d.width = 60; - return d; - } - - public Dimension getPreferredSize() { - Dimension d = super.getPreferredSize(); - // Must be small enough to not affect total width and height. - d.height = 24; - d.width = 150; - return d; - } - }; - directoryComboBox.putClientProperty( "JComboBox.lightweightKeyboardNavigation", "Lightweight" ); - lookInComboBoxLabel.setLabelFor(directoryComboBox); - directoryComboBoxModel = createDirectoryComboBoxModel(fc); - directoryComboBox.setModel(directoryComboBoxModel); - directoryComboBox.addActionListener(directoryComboBoxAction); - directoryComboBox.setRenderer(createDirectoryComboBoxRenderer(fc)); - directoryComboBox.setAlignmentX(JComponent.LEFT_ALIGNMENT); - directoryComboBox.setAlignmentY(JComponent.CENTER_ALIGNMENT); - directoryComboBox.setMaximumRowCount(8); - - panel.add(labelBox, BorderLayout.WEST); - panel.add(directoryComboBox, BorderLayout.CENTER); - - return panel; - } - - private JComponent createTopToolbar() { - JToolBar topPanel = new JToolBar(); - topPanel.setFloatable(false); - - if (Utilities.isWindows()) { - topPanel.putClientProperty("JToolBar.isRollover", Boolean.TRUE); - } - - upFolderButton = new JButton(getChangeToParentDirectoryAction()); - upFolderButton.setText(null); - // fixed bug #97049 - final boolean isMac = Utilities.isMac(); - Icon upFolderIcon = null; - if (!isMac) { - upFolderIcon = UIManager.getIcon("FileChooser.upFolderIcon"); - } - // on Mac all icons from UIManager are the same, some default, so load our own. - // it's also fallback if icon from UIManager not found, may happen - if (isMac || upFolderIcon == null) { - upFolderIcon = ImageUtilities.image2Icon(ImageUtilities.loadImage("/org/netbeans/swing/dirchooser/resources/upFolderIcon.gif", false)); - } - upFolderButton.setIcon(upFolderIcon); - upFolderButton.setToolTipText(upFolderToolTipText); - upFolderButton.getAccessibleContext().setAccessibleName(upFolderAccessibleName); - upFolderButton.setAlignmentX(JComponent.RIGHT_ALIGNMENT); - upFolderButton.setAlignmentY(JComponent.CENTER_ALIGNMENT); - - if(useShellFolder) { - upFolderButton.setFocusPainted(false); - } - - topPanel.add(upFolderButton); - topPanel.add(Box.createRigidArea(new Dimension(2, 0))); - - // no home on Win platform - if (!Utilities.isWindows()) { - JButton homeButton = new JButton(getGoHomeAction()); - Icon homeIcon = null; - if (!isMac) { - homeIcon = UIManager.getIcon("FileChooser.homeFolderIcon"); - } - if (isMac || homeIcon == null) { - homeIcon = ImageUtilities.image2Icon(ImageUtilities.loadImage("/org/netbeans/swing/dirchooser/resources/homeIcon.gif", false)); - } - homeButton.setIcon(homeIcon); - homeButton.setText(null); - - String tooltip = homeButton.getToolTipText(); - if (tooltip == null) { - tooltip = homeFolderTooltipText; - if (tooltip == null) { - tooltip = NbBundle.getMessage(DirectoryChooserUI.class, - "TLTP_HomeFolder"); - } - homeButton.setToolTipText( tooltip ); - } - - topPanel.add(homeButton); - } - - newFolderButton = new JButton(newFolderAction); - newFolderButton.setText(null); - // fixed bug #97049 - Icon newFolderIcon = null; - if (!isMac) { - newFolderIcon = UIManager.getIcon("FileChooser.newFolderIcon"); - } - // on Mac all icons from UIManager are the same, some default, so load our own. - // it's also fallback if icon from UIManager not found, may happen - if (isMac || newFolderIcon == null) { - newFolderIcon = ImageUtilities.image2Icon(ImageUtilities.loadImage("/org/netbeans/swing/dirchooser/resources/newFolderIcon.gif", false)); - } - newFolderButton.setIcon(newFolderIcon); - newFolderButton.setToolTipText(newFolderToolTipText); - newFolderButton.setAlignmentX(JComponent.RIGHT_ALIGNMENT); - newFolderButton.setAlignmentY(JComponent.CENTER_ALIGNMENT); - - if(useShellFolder) { - newFolderButton.setFocusPainted(false); - } - - topPanel.add(newFolderButton); - topPanel.add(Box.createRigidArea(new Dimension(2, 0))); - - JPanel panel = new JPanel(); - panel.setLayout(new BorderLayout()); - panel.setBorder(BorderFactory.createEmptyBorder(4, 9, 8, 0)); - panel.add(topPanel, BorderLayout.CENTER); - - return panel; - } - - private JComponent createTree() { - final DirectoryHandler dirHandler = createDirectoryHandler(fileChooser); - // #106011: don't show "colors, food, sports" sample model after init :-) - tree = new JTree(new Object[0]) { - - @Override - protected void processMouseEvent(MouseEvent e) { - dirHandler.preprocessMouseEvent(e); - super.processMouseEvent(e); - } - - // For speed (#127170): - @Override - public boolean isLargeModel() { - return true; - } - - // To work with different font sizes (#106223); see: http://www.javalobby.org/java/forums/t19562.html - private boolean firstPaint = true; - @Override - public void setFont(Font f) { - firstPaint = true; - super.setFont(f); - } - @Override - public void paint(Graphics g) { - if (firstPaint) { - g.setFont(getFont()); - setRowHeight(Math.max(/* icon height plus insets? */17, g.getFontMetrics().getHeight())); - firstPaint = false; - // Setting the fixed height will generate another paint request, no need to complete this one - return; - } - super.paint(g); - } - - }; - // #105642: start with right content in tree - File curDir = fileChooser.getCurrentDirectory(); - if (curDir == null) { - curDir = fileChooser.getFileSystemView().getRoots()[0]; - } - updateTree(curDir); - - tree.setFocusable(true); - tree.setOpaque(true); - tree.setRootVisible(false); - tree.setShowsRootHandles(true); - tree.setToggleClickCount(0); - tree.addTreeExpansionListener(new TreeExpansionHandler()); - TreeKeyHandler keyHandler = new TreeKeyHandler(); - tree.addKeyListener(keyHandler); - tree.addFocusListener(keyHandler); - tree.addMouseListener(dirHandler); - tree.addFocusListener(dirHandler); - tree.addTreeSelectionListener(dirHandler); - - if(fileChooser.isMultiSelectionEnabled()) { - tree.getSelectionModel().setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION); - } else { - tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); - } - - TreeCellEditor tce = new DirectoryCellEditor(tree, fileChooser, new JTextField()); - tree.setCellEditor(tce); - tce.addCellEditorListener(dirHandler); - tree.setCellRenderer(new DirectoryTreeRenderer()); - JScrollPane scrollBar = new JScrollPane(tree); - scrollBar.setViewportView(tree); - tree.setInvokesStopCellEditing(true); - - return scrollBar; - } - - /** - * Handles keyboard quick search in tree and delete action. - */ - class TreeKeyHandler extends KeyAdapter implements FocusListener { - - StringBuffer searchBuf = new StringBuffer(); - - java.util.List paths; - - public void keyPressed(KeyEvent evt) { - if(evt.getKeyCode() == KeyEvent.VK_DELETE) { - deleteAction(); - } - - // F2 as rename shortcut - if (evt.getKeyCode() == KeyEvent.VK_F2) { - DirectoryNode node = (DirectoryNode)tree.getLastSelectedPathComponent(); - if (node != null) { - applyEdit(node); - } - } - - if (isCharForSearch(evt)) { - evt.consume(); - } else { - resetBuffer(); - } - - // #105527: keyboard invocation of tree's popup menu - if ((evt.getKeyCode() == KeyEvent.VK_F10) && evt.isShiftDown() && !popupMenu.isShowing()) { - JTree tree = (JTree) evt.getSource(); - int selRow = tree.getLeadSelectionRow(); - if (selRow >= 0) { - Rectangle bounds = tree.getRowBounds(selRow); - popupMenu.show(tree, bounds.x + bounds.width / 2, bounds.y + bounds.height * 3 / 5); - evt.consume(); - } - } - } - - @Override - public void keyTyped(KeyEvent evt) { - char keyChar = evt.getKeyChar(); - if (isCharForSearch(evt)) { - if (paths == null) { - paths = getVisiblePaths(); - } - searchBuf.append(keyChar); - String searchedText = searchBuf.toString().toLowerCase(); - String curFileName = null; - for (TreePath path : paths) { - curFileName = fileChooser.getName(((DirectoryNode) path.getLastPathComponent()).getFile()); - if (curFileName != null && curFileName.toLowerCase().startsWith(searchedText)) { - tree.makeVisible(path); - tree.scrollPathToVisible(path); - tree.setSelectionPath(path); - break; - } - } - } else { - resetBuffer(); - } - } - - public void focusGained(FocusEvent e) { - resetBuffer(); - } - - public void focusLost(FocusEvent e) { - resetBuffer(); - } - - private boolean isCharForSearch (KeyEvent evt) { - char ch = evt.getKeyChar(); - // refuse backspace key - if ((int)ch == 8) { - return false; - } - // #110975: refuse modifiers - if (evt.getModifiers() != 0) { - return false; - } - return (Character.isJavaIdentifierPart(ch) && !Character.isIdentifierIgnorable(ch)) - || Character.isSpaceChar(ch); - } - - private void resetBuffer () { - searchBuf.delete(0, searchBuf.length()); - paths = null; - } - - } - - private java.util.List getVisiblePaths () { - int rowCount = tree.getRowCount(); - DirectoryNode node = null; - java.util.List result = new ArrayList(rowCount); - for (int i = 0; i < rowCount; i++) { - result.add(tree.getPathForRow(i)); - } - return result; - } - - private void createPopup() { - popupMenu = new JPopupMenu(); - JMenuItem item1 = new JMenuItem(getBundle().getString("LBL_NewFolder")); - item1.addActionListener(newFolderAction); - - JMenuItem item2 = new JMenuItem(getBundle().getString("LBL_Rename")); - item2.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - DirectoryNode node = (DirectoryNode)tree.getLastSelectedPathComponent(); - applyEdit(node); - } - }); - - JMenuItem item3 = new JMenuItem(getBundle().getString("LBL_Delete")); - item3.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - deleteAction(); - } - }); - - popupMenu.add(item1); - popupMenu.add(item2); - popupMenu.add(item3); - } - - // remove multiple directories - private void deleteAction() { - // fixed #97079 to be able to delete one or more folders - final TreePath[] nodePath = tree.getSelectionPaths(); - - if(nodePath == null) { - return; - } - String message = ""; - - if(nodePath.length == 1) { - - File file = ((DirectoryNode)nodePath[0].getLastPathComponent()).getFile(); - // Don't do anything if it's a special file - if(!canWrite(file)) { - return; - } - message = MessageFormat.format(getBundle().getString("MSG_Delete"), file.getName()); - } else { - message = MessageFormat.format(getBundle().getString("MSG_Delete_Multiple"), nodePath.length); - } - - int answer = JOptionPane.showConfirmDialog(fileChooser, message , getBundle().getString("MSG_Confirm"), JOptionPane.YES_NO_OPTION); - - if (answer == JOptionPane.YES_OPTION) { - - RequestProcessor.getDefault().post(new Runnable() { - DirectoryNode node; - ArrayList list = new ArrayList(); - int cannotDelete; - ArrayList nodes2Remove = new ArrayList(nodePath.length); - - public void run() { - if (!EventQueue.isDispatchThread()) { - // first pass, out of EQ thread, deletes files - setCursor(fileChooser, Cursor.WAIT_CURSOR); - cannotDelete = 0; - for(int i = 0; i < nodePath.length; i++) { - DirectoryNode nodeToDelete = (DirectoryNode)nodePath[i].getLastPathComponent(); - try { - FileObject fo = FileUtil.toFileObject(nodeToDelete.getFile()); - fo.delete(); - nodes2Remove.add(nodeToDelete); - } catch (IOException ignore) { - cannotDelete++; - - if(canWrite(nodeToDelete.getFile())) { - list.add(nodeToDelete.getFile()); - } - } - } - // send to second pass - EventQueue.invokeLater(this); - } else { - // second pass, in EQ thread - for (DirectoryNode curNode : nodes2Remove) { - model.removeNodeFromParent(curNode); - } - - setCursor(fileChooser, Cursor.DEFAULT_CURSOR); - if(cannotDelete > 0) { - String message = ""; - - if(cannotDelete == 1) { - message = cannotDelete + " " + getBundle().getString("MSG_Sing_Delete"); - } else { - message = cannotDelete + " " + getBundle().getString("MSG_Plur_Delete"); - } - - setSelected((File[])list.toArray(new File[list.size()])); - - JOptionPane.showConfirmDialog(fileChooser, message , getBundle().getString("MSG_Confirm"), JOptionPane.OK_OPTION); - } else { - setSelected(new File[] {null}); - setFileName(""); - } - } - } - }); - } - } - - private void updateCompletions() { - String name = normalizeFile(getFileName()); - int slash = name.lastIndexOf(File.separatorChar); - if (slash != -1) { - String prefix = name.substring(0, slash + 1); - File d = new File(prefix); - if (d.isDirectory()) { - File[] children = d.listFiles(); - if(children != null) { - Vector list = buildList(name, children); - - if(completionPopup == null) { - completionPopup = new FileCompletionPopup(fileChooser, filenameTextField, list); - } else if (completionPopup.isShowing() || - (showPopupCompletion && fileChooser.isShowing())) { - completionPopup.setDataList(list); - } - - if(showPopupCompletion && fileChooser.isShowing() && !completionPopup.isShowing()) { - java.awt.Point los = filenameTextField.getLocation(); - int popX = los.x; - int popY = los.y + filenameTextField.getHeight() - 6; - completionPopup.showPopup(filenameTextField, popX, popY); - } - } - } - } - } - - public Vector buildList(String text, File[] children) { - Vector files = new Vector(children.length); - - for(int i = children.length - 1; i >= 0; i--) { - File completion = children[i]; - - if(fileChooser.accept(completion)) { - String path = completion.getAbsolutePath(); - - if (path.regionMatches(true, 0, text, 0, text.length())) { - - if(fileChooser.getFileSelectionMode() == JFileChooser.DIRECTORIES_ONLY) { - if(completion.isDirectory()) { - files.add(completion); - } - } else if(fileChooser.getFileSelectionMode() == JFileChooser.FILES_ONLY) { - if(completion.isFile()) { - files.add(completion); - } - } else if(fileChooser.getFileSelectionMode() == JFileChooser.FILES_AND_DIRECTORIES) { - files.add(completion); - } - } - } - } - - Collections.sort(files, DirectoryNode.FILE_NAME_COMPARATOR); - return files; - } - - - private static String normalizeFile(String text) { - // See #21690 for background. - // XXX what are legal chars for var names? bash manual says only: - // "The braces are required when PARAMETER [...] is followed by a - // character that is not to be interpreted as part of its name." - Pattern p = Pattern.compile("(^|[^\\\\])\\$([a-zA-Z_0-9.]+)"); - Matcher m; - while ((m = p.matcher(text)).find()) { - // Have an env var to subst... - // XXX handle ${PATH} too? or don't bother - String var = System.getenv(m.group(2)); - if (var == null) { - // Try Java system props too, and fall back to "". - var = System.getProperty(m.group(2), ""); - } - // XXX full readline compat would mean vars were also completed with TAB... - text = text.substring(0, m.end(1)) + var + text.substring(m.end(2)); - } - if (text.equals("~")) { - return System.getProperty("user.home"); - } else if (text.startsWith("~" + File.separatorChar)) { - return System.getProperty("user.home") + text.substring(1); - } else { - int i = text.lastIndexOf("//"); - if (i != -1) { - // Treat /home/me//usr/local as /usr/local - // (so that you can use "//" to start a new path, without selecting & deleting) - return text.substring(i + 1); - } - i = text.lastIndexOf(File.separatorChar + "~" + File.separatorChar); - if (i != -1) { - // Treat /usr/local/~/stuff as /home/me/stuff - return System.getProperty("user.home") + text.substring(i + 2); - } - return text; - } - } - - private static ResourceBundle getBundle() { - return NbBundle.getBundle(DirectoryChooserUI.class); - } - - private void updateTree(final File file) { - // fixed bug #97522 - if(updateWorker != null) { - // try to cancel previous update if possible - if (!updateWorker.isFinished()) { - updateWorker.cancel(); - } - // #105642 - wait for previous update, to keep time order - updateWorker.waitFinished(); - } - - updateWorker = RequestProcessor.getDefault().post(new Runnable() { - DirectoryNode node; - long startTime; - public void run() { - if (!EventQueue.isDispatchThread()) { - // first pass, out of EQ thread - markStartTime(); - setCursor(fileChooser, Cursor.WAIT_CURSOR); - node = new DirectoryNode(file); - node.loadChildren(fileChooser, true); - // send to second pass - EventQueue.invokeLater(this); - } else { - // second pass, in EQ thread - model = new DirectoryTreeModel(node); - tree.setModel(model); - tree.repaint(); - setCursor(fileChooser, Cursor.DEFAULT_CURSOR); - checkUpdate(); - } - } - - }); - - } - - private void markStartTime () { - if (fileChooser.getClientProperty(DelegatingChooserUI.START_TIME) == null) { - fileChooser.putClientProperty(DelegatingChooserUI.START_TIME, - Long.valueOf(System.currentTimeMillis())); - } - } - - private void checkUpdate() { - if (Utilities.isWindows() && useShellFolder) { - Long startTime = (Long) fileChooser.getClientProperty(DelegatingChooserUI.START_TIME); - if (startTime == null) { - return; - } - // clean for future marking - fileChooser.putClientProperty(DelegatingChooserUI.START_TIME, null); - - long elapsed = System.currentTimeMillis() - startTime.longValue(); - long timeOut = NbPreferences.forModule(DirectoryChooserUI.class). - getLong(TIMEOUT_KEY, 10000); - if (timeOut > 0 && elapsed > timeOut && slownessPanel == null) { - JLabel slownessNote = new JLabel( - NbBundle.getMessage(DirectoryChooserUI.class, "MSG_SlownessNote")); - slownessNote.setForeground(Color.RED); - slownessPanel = new JPanel(); - JButton notShow = new JButton( - NbBundle.getMessage(DirectoryChooserUI.class, "BTN_NotShow")); - notShow.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - NbPreferences.forModule(DirectoryChooserUI.class).putLong(TIMEOUT_KEY, 0); - centerPanel.remove(slownessPanel); - centerPanel.revalidate(); - } - }); - JPanel notShowP = new JPanel(); - notShowP.add(notShow); - slownessPanel.setLayout(new BorderLayout()); - slownessPanel.setBorder(BorderFactory.createEmptyBorder(5, 0, 5, 0)); - slownessPanel.add(BorderLayout.CENTER, slownessNote); - slownessPanel.add(BorderLayout.SOUTH, notShowP); - centerPanel.add(BorderLayout.NORTH, slownessPanel); - centerPanel.revalidate(); - } - } - } - - private Boolean isXPStyle() { - Toolkit toolkit = Toolkit.getDefaultToolkit(); - Boolean themeActive = (Boolean)toolkit.getDesktopProperty("win.xpstyle.themeActive"); - if(themeActive == null) - themeActive = Boolean.FALSE; - if (themeActive.booleanValue() && System.getProperty("swing.noxp") == null) { - themeActive = Boolean.TRUE; - } - return themeActive; - } - - protected void installStrings(JFileChooser fc) { - super.installStrings(fc); - - Locale l = fc.getLocale(); - - lookInLabelMnemonic = UIManager.getInt("FileChooser.lookInLabelMnemonic"); - lookInLabelText = UIManager.getString("FileChooser.lookInLabelText",l); - saveInLabelText = UIManager.getString("FileChooser.saveInLabelText",l); - - fileNameLabelMnemonic = UIManager.getInt("FileChooser.fileNameLabelMnemonic"); - fileNameLabelText = UIManager.getString("FileChooser.fileNameLabelText",l); - - filesOfTypeLabelMnemonic = UIManager.getInt("FileChooser.filesOfTypeLabelMnemonic"); - filesOfTypeLabelText = UIManager.getString("FileChooser.filesOfTypeLabelText",l); - - upFolderToolTipText = UIManager.getString("FileChooser.upFolderToolTipText",l); - upFolderAccessibleName = UIManager.getString("FileChooser.upFolderAccessibleName",l); - - newFolderToolTipText = UIManager.getString("FileChooser.newFolderToolTipText",l); - homeFolderTooltipText = UIManager.getString("FileChooser.homeFolderToolTipText",l); - - } - - protected void installListeners(JFileChooser fc) { - super.installListeners(fc); - ActionMap actionMap = getActionMap(); - SwingUtilities.replaceUIActionMap(fc, actionMap); - } - - protected ActionMap getActionMap() { - return createActionMap(); - } - - protected ActionMap createActionMap() { - AbstractAction escAction = new AbstractAction() { - public void actionPerformed(ActionEvent e) { - getFileChooser().cancelSelection(); - } - public boolean isEnabled(){ - return getFileChooser().isEnabled(); - } - }; - ActionMap map = new ActionMapUIResource(); - map.put("approveSelection", getApproveSelectionAction()); - map.put("cancelSelection", escAction); - map.put("Go Up", getChangeToParentDirectoryAction()); - return map; - } - - public Action getNewFolderAction() { - return newFolderAction; - } - - public void uninstallUI(JComponent c) { - c.removePropertyChangeListener(filterTypeComboBoxModel); - cancelButton.removeActionListener(getCancelSelectionAction()); - approveButton.removeActionListener(getApproveSelectionAction()); - filenameTextField.removeActionListener(getApproveSelectionAction()); - super.uninstallUI(c); - } - - /** - * Returns the preferred size of the specified - * JFileChooser. - * The preferred size is at least as large, - * in both height and width, - * as the preferred size recommended - * by the file chooser's layout manager. - * - * @param c a JFileChooser - * @return a Dimension specifying the preferred - * width and height of the file chooser - */ - public Dimension getPreferredSize(JComponent c) { - int prefWidth = PREF_SIZE.width; - Dimension d = c.getLayout().preferredLayoutSize(c); - if (d != null) { - return new Dimension(d.width < prefWidth ? prefWidth : d.width, - d.height < PREF_SIZE.height ? PREF_SIZE.height : d.height); - } else { - return new Dimension(prefWidth, PREF_SIZE.height); - } - } - - /** - * Returns the minimum size of the JFileChooser. - * - * @param c a JFileChooser - * @return a Dimension specifying the minimum - * width and height of the file chooser - */ - public Dimension getMinimumSize(JComponent c) { - return MIN_SIZE; - } - - /** - * Returns the maximum size of the JFileChooser. - * - * @param c a JFileChooser - * @return a Dimension specifying the maximum - * width and height of the file chooser - */ - public Dimension getMaximumSize(JComponent c) { - return new Dimension(Integer.MAX_VALUE, Integer.MAX_VALUE); - } - - private String getStringOfFileName(File file) { - if (file == null) { - return null; - } else { - JFileChooser fc = getFileChooser(); - if (fc.isDirectorySelectionEnabled() && !fc.isFileSelectionEnabled()) { - if(fc.getFileSystemView().isDrive(file)) { - return file.getPath(); - } else { - return file.getPath(); - } - } else { - return file.getName(); - } - } - } - - private String getStringOfFileNames(File[] files) { - StringBuffer buf = new StringBuffer(); - for (int i = 0; files != null && i < files.length; i++) { - if (i > 0) { - buf.append(" "); - } - if (files.length > 1) { - buf.append("\""); - } - buf.append(getStringOfFileName(files[i])); - if (files.length > 1) { - buf.append("\""); - } - } - return buf.toString(); - } - - /* The following methods are used by the PropertyChange Listener */ - - private void fireSelectedFileChanged(PropertyChangeEvent e) { - File f = (File) e.getNewValue(); - JFileChooser fc = getFileChooser(); - if (f != null - && ((fc.isFileSelectionEnabled() && !f.isDirectory()) - || (f.isDirectory() && fc.isDirectorySelectionEnabled()))) { - - setFileName(getStringOfFileName(f)); - } - - //TODO button visibility code started - if (customDirectoryProvider != null) - approveButton.setEnabled(customDirectoryProvider.isValidCustomDirectory(f)); - //TODO button visibility code ended - } - - private void fireSelectedFilesChanged(PropertyChangeEvent e) { - File[] files = (File[]) e.getNewValue(); - JFileChooser fc = getFileChooser(); - if (files != null - && files.length > 0 - && (files.length > 1 || fc.isDirectorySelectionEnabled() || !files[0].isDirectory())) { - setFileName(getStringOfFileNames(files)); - } - } - - private void fireDirectoryChanged(PropertyChangeEvent e) { - JFileChooser fc = getFileChooser(); - FileSystemView fsv = fc.getFileSystemView(); - showPopupCompletion = false; - setFileName(""); - clearIconCache(); - File currentDirectory = fc.getCurrentDirectory(); - if(currentDirectory != null) { - directoryComboBoxModel.addItem(currentDirectory); - newFolderAction.setEnabled(currentDirectory.canWrite()); - getChangeToParentDirectoryAction().setEnabled(!fsv.isRoot(currentDirectory)); - updateTree(currentDirectory); - if (fc.isDirectorySelectionEnabled() && !fc.isFileSelectionEnabled()) { - if (fsv.isFileSystem(currentDirectory)) { - setFileName(getStringOfFileName(currentDirectory)); - } else { - setFileName(null); - } - } - } - } - - private void fireFilterChanged(PropertyChangeEvent e) { - clearIconCache(); - } - - private void fireFileSelectionModeChanged(PropertyChangeEvent e) { - clearIconCache(); - JFileChooser fc = getFileChooser(); - - File currentDirectory = fc.getCurrentDirectory(); - if (currentDirectory != null - && fc.isDirectorySelectionEnabled() - && !fc.isFileSelectionEnabled() - && fc.getFileSystemView().isFileSystem(currentDirectory)) { - - setFileName(currentDirectory.getPath()); - } else { - setFileName(null); - } - } - - private void fireMultiSelectionChanged(PropertyChangeEvent e) { - if (getFileChooser().isMultiSelectionEnabled()) { - tree.getSelectionModel().setSelectionMode(TreeSelectionModel.DISCONTIGUOUS_TREE_SELECTION); - } else { - tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION); - getFileChooser().setSelectedFiles(null); - } - } - - private void fireAccessoryChanged(PropertyChangeEvent e) { - if(getAccessoryPanel() != null) { - JComponent oldAcc = (JComponent) e.getOldValue(); - JComponent newAcc = (JComponent) e.getNewValue(); - JComponent accessoryPanel = getAccessoryPanel(); - if(oldAcc != null) { - accessoryPanel.remove(oldAcc); - } - if (oldAcc != null && newAcc == null) { - accessoryPanel.remove(topToolbar); - topComboWrapper.add(topToolbar, BorderLayout.EAST); - topCombo.setBorder(BorderFactory.createEmptyBorder(6, 0, 10, 0)); - topCombo.revalidate(); - } - - if(newAcc != null) { - getAccessoryPanel().add(newAcc, BorderLayout.CENTER); - } - - if (oldAcc == null && newAcc != null) { - topComboWrapper.remove(topToolbar); - topCombo.setBorder(BorderFactory.createEmptyBorder(4, 0, 8, 0)); - accessoryPanel.add(topToolbar, BorderLayout.NORTH); - } - - } - } - - private void fireApproveButtonTextChanged(PropertyChangeEvent e) { - JFileChooser chooser = getFileChooser(); - approveButton.setText(getApproveButtonText(chooser)); - approveButton.setToolTipText(getApproveButtonToolTipText(chooser)); - // #107791: No mnemonics desirable on Mac - if (!Utilities.isMac()) { - approveButton.setMnemonic(getApproveButtonMnemonic(chooser)); - } - } - - private void fireDialogTypeChanged(PropertyChangeEvent e) { - JFileChooser chooser = getFileChooser(); - approveButton.setText(getApproveButtonText(chooser)); - approveButton.setToolTipText(getApproveButtonToolTipText(chooser)); - // #107791: No mnemonics desirable on Mac - if (!Utilities.isMac()) { - approveButton.setMnemonic(getApproveButtonMnemonic(chooser)); - } - if (chooser.getDialogType() == JFileChooser.SAVE_DIALOG) { - lookInComboBoxLabel.setText(saveInLabelText); - } else { - lookInComboBoxLabel.setText(lookInLabelText); - } - } - - private void fireApproveButtonMnemonicChanged(PropertyChangeEvent e) { - // #107791: No mnemonics desirable on Mac - if (!Utilities.isMac()) { - approveButton.setMnemonic(getApproveButtonMnemonic(getFileChooser())); - } - } - - private void fireControlButtonsChanged(PropertyChangeEvent e) { - if(getFileChooser().getControlButtonsAreShown()) { - addControlButtons(); - } else { - removeControlButtons(); - } - } - - /* - * Listen for filechooser property changes, such as - * the selected file changing, or the type of the dialog changing. - */ - public PropertyChangeListener createPropertyChangeListener(JFileChooser fc) { - return new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent e) { - String s = e.getPropertyName(); - if(s.equals(JFileChooser.SELECTED_FILE_CHANGED_PROPERTY)) { - fireSelectedFileChanged(e); - } else if (s.equals(JFileChooser.SELECTED_FILES_CHANGED_PROPERTY)) { - fireSelectedFilesChanged(e); - } else if(s.equals(JFileChooser.DIRECTORY_CHANGED_PROPERTY) && changeDirectory) { - fireDirectoryChanged(e); - } else if(s.equals(JFileChooser.FILE_FILTER_CHANGED_PROPERTY)) { - fireFilterChanged(e); - } else if(s.equals(JFileChooser.FILE_SELECTION_MODE_CHANGED_PROPERTY)) { - fireFileSelectionModeChanged(e); - } else if(s.equals(JFileChooser.MULTI_SELECTION_ENABLED_CHANGED_PROPERTY)) { - fireMultiSelectionChanged(e); - } else if(s.equals(JFileChooser.ACCESSORY_CHANGED_PROPERTY)) { - fireAccessoryChanged(e); - } else if (s.equals(JFileChooser.APPROVE_BUTTON_TEXT_CHANGED_PROPERTY) || - s.equals(JFileChooser.APPROVE_BUTTON_TOOL_TIP_TEXT_CHANGED_PROPERTY)) { - fireApproveButtonTextChanged(e); - } else if(s.equals(JFileChooser.DIALOG_TYPE_CHANGED_PROPERTY)) { - fireDialogTypeChanged(e); - } else if(s.equals(JFileChooser.APPROVE_BUTTON_MNEMONIC_CHANGED_PROPERTY)) { - fireApproveButtonMnemonicChanged(e); - } else if(s.equals(JFileChooser.CONTROL_BUTTONS_ARE_SHOWN_CHANGED_PROPERTY)) { - fireControlButtonsChanged(e); - } else if (s.equals(DelegatingChooserUI.USE_SHELL_FOLDER)) { - updateUseShellFolder(); - fireDirectoryChanged(e); - } else if (s.equals("componentOrientation")) { - ComponentOrientation o = (ComponentOrientation)e.getNewValue(); - JFileChooser cc = (JFileChooser)e.getSource(); - if (o != (ComponentOrientation)e.getOldValue()) { - cc.applyComponentOrientation(o); - } - } else if (s.equals("ancestor")) { - if (e.getOldValue() == null && e.getNewValue() != null) { - filenameTextField.selectAll(); - filenameTextField.requestFocus(); - } - } - } - }; - } - - protected void removeControlButtons() { - bottomPanel.remove(buttonPanel); - } - - protected void addControlButtons() { - bottomPanel.add(buttonPanel); - } - - public String getFileName() { - if(filenameTextField != null) { - return filenameTextField.getText(); - } else { - return null; - } - } - - public void setFileName(String filename) { - if(filenameTextField != null) { - filenameTextField.setText(filename); - } - } - - private DirectoryComboBoxRenderer createDirectoryComboBoxRenderer(JFileChooser fc) { - return new DirectoryComboBoxRenderer(); - } - - protected DirectoryComboBoxModel createDirectoryComboBoxModel(JFileChooser fc) { - return new DirectoryComboBoxModel(); - } - - protected FilterComboBoxRenderer createFilterComboBoxRenderer() { - return new FilterComboBoxRenderer(); - } - - protected FilterTypeComboBoxModel createFilterComboBoxModel() { - return new FilterTypeComboBoxModel(); - } - - protected JButton getApproveButton(JFileChooser fc) { - return approveButton; - } - - public FileView getFileView(JFileChooser fc) { - - // fix bug #96957, should use DirectoryChooserFileView - // only on windows - if (Utilities.isWindows()) { - if (useShellFolder) { - fileView = new DirectoryChooserFileView(); - } - } else { - fileView = (BasicFileView) super.getFileView(fileChooser); - } - return fileView; - } - - private void setSelected(File[] files) { - changeDirectory = false; - fileChooser.setSelectedFiles(files); - changeDirectory = true; - } - - private DirectoryHandler createDirectoryHandler(JFileChooser chooser) { - return new DirectoryHandler(chooser); - } - - private void addNewDirectory(final TreePath path) { - RequestProcessor.getDefault().post(new Runnable() { - public void run() { - EventQueue.invokeLater(new Runnable() { - public void run() { - DirectoryNode selectedNode = (DirectoryNode)path.getLastPathComponent(); - - if(selectedNode == null || !canWrite(selectedNode.getFile())) { - return; - } - - try { - newFolderNode = new DirectoryNode(fileChooser.getFileSystemView().createNewFolder(selectedNode.getFile())); - model.insertNodeInto(newFolderNode, selectedNode, selectedNode.getChildCount()); - applyEdit(newFolderNode); - } catch (IOException ex) { - ex.printStackTrace(); - } - } - }); - } - }); - } - - private void applyEdit(DirectoryNode node) { - TreeNode[] nodes = model.getPathToRoot(node); - TreePath editingPath = new TreePath(nodes); - tree.setEditable(true); - tree.makeVisible(editingPath); - tree.scrollPathToVisible(editingPath); - tree.setSelectionPath(editingPath); - tree.startEditingAtPath(editingPath); - - JTextField editField = DirectoryCellEditor.getTextField(); - editField.setCursor(Cursor.getPredefinedCursor(Cursor.TEXT_CURSOR)); - editField.setRequestFocusEnabled(true); - editField.requestFocus(); - editField.setSelectionStart(0); - editField.setSelectionEnd(editField.getText().length()); - } - - private static boolean canWrite(File f) { - boolean writeable = false; - if (f != null) { - try { - writeable = f.canWrite(); - } catch (AccessControlException ex) { - writeable = false; - } - } - return writeable; - } - - private void expandNode(final JFileChooser fileChooser, final TreePath path) { - - RequestProcessor.getDefault().post(new Runnable() { - DirectoryNode node; - - public void run() { - if (!EventQueue.isDispatchThread()) { - // first pass, out of EQ thread, loads data - markStartTime(); - setCursor(fileChooser, Cursor.WAIT_CURSOR); - node = (DirectoryNode) path.getLastPathComponent(); - node.loadChildren(fileChooser, true); - // send to second pass - EventQueue.invokeLater(this); - } else { - // second pass, in EQ thread - ((DefaultTreeModel) tree.getModel()).nodeStructureChanged(node); - /* - * This happens when the add new directory action is called - * and the node is not loaded. Furthermore, it ensures that - * adding a new directory execute after the UI has finished - * displaying the children of the expanded node. - */ - if(addNewDirectory) { - addNewDirectory(path); - addNewDirectory = false; - } - setCursor(fileChooser, Cursor.DEFAULT_CURSOR); - checkUpdate(); - } - } - }); - } - - private void setCursor(JComponent comp, int type) { - Window window = SwingUtilities.getWindowAncestor(comp); - if (window != null) { - Cursor cursor = Cursor.getPredefinedCursor(type); - window.setCursor(cursor); - window.setFocusable(true); - } - - JRootPane pane = fileChooser.getRootPane(); - if( null == blocker ) - blocker = new InputBlocker(); - - if(type == Cursor.WAIT_CURSOR) { - blocker.block(pane); - } else if (type == Cursor.DEFAULT_CURSOR){ - blocker.unBlock(pane); - } - } - - /*************** HELPER CLASSES ***************/ - - private class IconIndenter implements Icon { - final static int space = 10; - Icon icon = null; - int depth = 0; - - public void paintIcon(Component c, Graphics g, int x, int y) { - if (icon == null) { - return; - } - if (c.getComponentOrientation().isLeftToRight()) { - icon.paintIcon(c, g, x+depth*space, y); - } else { - icon.paintIcon(c, g, x, y); - } - } - - public int getIconWidth() { - return icon != null ? icon.getIconWidth() + depth*space : null; - } - - public int getIconHeight() { - return icon != null ? icon.getIconHeight() : null; - } - - } - - private class DirectoryComboBoxRenderer extends JLabel implements ListCellRenderer, UIResource { - IconIndenter indenter = new IconIndenter(); - - public DirectoryComboBoxRenderer() { - setOpaque(true); - } - - public Component getListCellRendererComponent(JList list, Object value, - int index, boolean isSelected, - boolean cellHasFocus) { - // #89393: GTK needs name to render cell renderer "natively" - setName("ComboBox.listRenderer"); // NOI18N - - if (value == null) { - setText(""); - return this; - } - File directory = (File)value; - setText(getFileChooser().getName(directory)); - Icon icon = getFileChooser().getIcon(directory); - indenter.icon = icon; - indenter.depth = directoryComboBoxModel.getDepth(index); - setIcon(indenter); - if ( isSelected ) { - setBackground(list.getSelectionBackground()); - setForeground(list.getSelectionForeground()); - } else { - setBackground(list.getBackground()); - setForeground(list.getForeground()); - } - - return this; - } - - // #89393: GTK needs name to render cell renderer "natively" - @Override - public String getName() { - String name = super.getName(); - return name == null ? "ComboBox.renderer" : name; // NOI18N - } - } // end of DirectoryComboBoxRenderer - - /** - * Data model for a type-face selection combo-box. - */ - private class DirectoryComboBoxModel extends AbstractListModel implements ComboBoxModel { - Vector directories = new Vector(); - int[] depths = null; - File selectedDirectory = null; - JFileChooser chooser = getFileChooser(); - FileSystemView fsv = chooser.getFileSystemView(); - - public DirectoryComboBoxModel() { - // Add the current directory to the model, and make it the - // selectedDirectory - File dir = getFileChooser().getCurrentDirectory(); - if(dir != null) { - addItem(dir); - } - } - - /** - * Adds the directory to the model and sets it to be selected, - * additionally clears out the previous selected directory and - * the paths leading up to it, if any. - */ - private void addItem(File directory) { - - if(directory == null) { - return; - } - - directories.clear(); - - if(useShellFolder) { - directories.addAll(Arrays.asList(getShellFolderRoots())); - } else { - directories.addAll(Arrays.asList(fileChooser.getFileSystemView().getRoots())); - } - - - // Get the canonical (full) path. This has the side - // benefit of removing extraneous chars from the path, - // for example /foo/bar/ becomes /foo/bar - File canonical = null; - try { - canonical = directory.getCanonicalFile(); - } catch (IOException e) { - // Maybe drive is not ready. Can't abort here. - canonical = directory; - } - - // create File instances of each directory leading up to the top - File sf = getShellFolderForFile(canonical); - File f = sf; - Vector path = new Vector(10); - - - /* - * Fix for IZ#122534 : - * NullPointerException at - * org.netbeans.swing.dirchooser.DirectoryChooserUI$DirectoryComboBoxModel.addItem - * - */ - while( f!= null) { - path.addElement(f); - f = f.getParentFile(); - } - - int pathCount = path.size(); - // Insert chain at appropriate place in vector - for (int i = 0; i < pathCount; i++) { - f = path.get(i); - if (directories.contains(f)) { - int topIndex = directories.indexOf(f); - for (int j = i-1; j >= 0; j--) { - directories.insertElementAt(path.get(j), topIndex+i-j); - } - break; - } - } - calculateDepths(); - setSelectedItem(sf); - } - - private void calculateDepths() { - depths = new int[directories.size()]; - for (int i = 0; i < depths.length; i++) { - File dir = directories.get(i); - File parent = dir.getParentFile(); - depths[i] = 0; - if (parent != null) { - for (int j = i-1; j >= 0; j--) { - if (parent.equals(directories.get(j))) { - depths[i] = depths[j] + 1; - break; - } - } - } - } - } - - public int getDepth(int i) { - return (depths != null && i >= 0 && i < depths.length) ? depths[i] : 0; - } - - public void setSelectedItem(Object selectedDirectory) { - this.selectedDirectory = (File)selectedDirectory; - fireContentsChanged(this, -1, -1); - } - - public Object getSelectedItem() { - return selectedDirectory; - } - - public int getSize() { - return directories.size(); - } - - public Object getElementAt(int index) { - return directories.elementAt(index); - } - } - - /** - * Render different type sizes and styles. - */ - private class FilterComboBoxRenderer extends JLabel implements ListCellRenderer, UIResource { - - public FilterComboBoxRenderer() { - setOpaque(true); - } - - public Component getListCellRendererComponent(JList list, - Object value, int index, boolean isSelected, - boolean cellHasFocus) { - - // #89393: GTK needs name to render cell renderer "natively" - setName("ComboBox.listRenderer"); // NOI18N - - if (value != null && value instanceof FileFilter) { - setText(((FileFilter)value).getDescription()); - } - - if ( isSelected ) { - setBackground(list.getSelectionBackground()); - setForeground(list.getSelectionForeground()); - } else { - setBackground(list.getBackground()); - setForeground(list.getForeground()); - } - - return this; - } - - // #89393: GTK needs name to render cell renderer "natively" - public String getName() { - String name = super.getName(); - return name == null ? "ComboBox.renderer" : name; // NOI18N - } - - } // end of FilterComboBoxRenderer - - /** - * Data model for a type-face selection combo-box. - */ - protected class FilterTypeComboBoxModel extends AbstractListModel implements ComboBoxModel, PropertyChangeListener { - protected FileFilter[] filters; - protected FilterTypeComboBoxModel() { - super(); - filters = getFileChooser().getChoosableFileFilters(); - } - - public void propertyChange(PropertyChangeEvent e) { - String prop = e.getPropertyName(); - if(prop == JFileChooser.CHOOSABLE_FILE_FILTER_CHANGED_PROPERTY) { - filters = (FileFilter[]) e.getNewValue(); - fireContentsChanged(this, -1, -1); - } else if (prop == JFileChooser.FILE_FILTER_CHANGED_PROPERTY) { - fireContentsChanged(this, -1, -1); - } - } - - public void setSelectedItem(Object filter) { - if(filter != null) { - getFileChooser().setFileFilter((FileFilter) filter); - setFileName(null); - fireContentsChanged(this, -1, -1); - } - } - - public Object getSelectedItem() { - // Ensure that the current filter is in the list. - // NOTE: we shouldnt' have to do this, since JFileChooser adds - // the filter to the choosable filters list when the filter - // is set. Lets be paranoid just in case someone overrides - // setFileFilter in JFileChooser. - FileFilter currentFilter = getFileChooser().getFileFilter(); - boolean found = false; - if(currentFilter != null) { - for(int i=0; i < filters.length; i++) { - if(filters[i] == currentFilter) { - found = true; - } - } - if(found == false) { - getFileChooser().addChoosableFileFilter(currentFilter); - } - } - return getFileChooser().getFileFilter(); - } - - public int getSize() { - if(filters != null) { - return filters.length; - } else { - return 0; - } - } - - public Object getElementAt(int index) { - if(index > getSize() - 1) { - // This shouldn't happen. Try to recover gracefully. - return getFileChooser().getFileFilter(); - } - if(filters != null) { - return filters[index]; - } else { - return null; - } - } - } - - /** - * Gets calls when the ComboBox has changed the selected item. - */ - private class DirectoryComboBoxAction implements ActionListener { - public void actionPerformed(ActionEvent e) { - File f = (File)directoryComboBox.getSelectedItem(); - getFileChooser().setCurrentDirectory(f); - } - } - - private class DirectoryChooserFileView extends BasicFileView { - - public Icon getIcon(File f) { - Icon icon = getCachedIcon(f); - if (icon != null) { - return icon; - } - - if (f != null) { - try { - icon = fileChooser.getFileSystemView().getSystemIcon(f); - } catch (NullPointerException exc) { - // workaround for JDK bug 6357445, in IZ: 145832, please remove when fixed - LOG.log(Level.FINE, "JDK bug 6357445 encountered, NPE caught", exc); // NOI18N - } - } - - if (icon == null) { - icon = super.getIcon(f); - } - - cacheIcon(f, icon); - return icon; - } - } - - private class TextFieldKeyListener extends KeyAdapter { - public void keyPressed(KeyEvent evt) { - showPopupCompletion = true; - int keyCode = evt.getKeyCode(); - // #105801: completionPopup might not be ready when updateCompletions not called (empty text field) - if (completionPopup != null && !completionPopup.isVisible()) { - if (keyCode == KeyEvent.VK_ENTER) { - File file = new File(filenameTextField.getText()); - if(file.exists() && file.isDirectory()) { - setSelected(new File[] {file}); - fileChooser.approveSelection(); - } - } - - if ((keyCode == KeyEvent.VK_TAB || keyCode == KeyEvent.VK_DOWN) || - (keyCode == KeyEvent.VK_RIGHT && - (filenameTextField.getCaretPosition() >= (filenameTextField.getDocument().getLength() - 1)))) { - updateCompletions(); - } - - } - - if(filenameTextField.isFocusOwner() && - (completionPopup == null || !completionPopup.isVisible()) && - keyCode == KeyEvent.VK_ESCAPE) { - fileChooser.cancelSelection(); - } - } - } - - private class DirectoryHandler extends MouseAdapter - implements TreeSelectionListener, CellEditorListener, ActionListener, - FocusListener, Runnable { - private JFileChooser fileChooser; - /** current selection holder */ - private WeakReference curSelPath; - /** timer for slow click to rename feature */ - private Timer renameTimer; - /** path to rename for slow click to rename feature */ - private TreePath pathToRename; - - public DirectoryHandler(JFileChooser fileChooser) { - this.fileChooser = fileChooser; - } - - /************ imple of TreeSelectionListener *******/ - - public void valueChanged(TreeSelectionEvent e) { - showPopupCompletion = false; - FileSystemView fsv = fileChooser.getFileSystemView(); - JTree tree = (JTree) e.getSource(); - TreePath path = tree.getSelectionPath(); - TreePath curSel = e.getNewLeadSelectionPath(); - curSelPath = (curSel != null) ? new WeakReference(curSel) : null; - - if(path != null) { - - DirectoryNode node = (DirectoryNode)path.getLastPathComponent(); - File file = node.getFile(); - - if(file != null) { - setSelected(getSelectedNodes(tree.getSelectionPaths())); - newFolderAction.setEnabled(canWrite(file) && file.isDirectory()); - - if(file.isDirectory()) { - setDirectorySelected(true); - } - } - } - } - - private File[] getSelectedNodes(TreePath[] paths) { - Vector files = new Vector(); - for(int i = 0; i < paths.length; i++) { - File file = ((DirectoryNode)paths[i].getLastPathComponent()).getFile(); - if(file.isDirectory() - && fileChooser.isTraversable(file) - && !fileChooser.getFileSystemView().isFileSystem(file)) { - continue; - } - files.add(file); - } - return files.toArray(new File[files.size()]); - } - - /********* impl of MouseListener ***********/ - - public void mouseClicked(MouseEvent e) { - final JTree tree = (JTree) e.getSource(); - Point p = e.getPoint(); - final int x = e.getX(); - final int y = e.getY(); - int row = tree.getRowForLocation(x, y); - TreePath path = tree.getPathForRow(row); - - if (path != null) { - - DirectoryNode node = (DirectoryNode) path.getLastPathComponent(); - newFolderAction.setEnabled(canWrite(node.getFile())); - - if (SwingUtilities.isLeftMouseButton(e) && (e.getClickCount() == 2)) { - cancelRename(); - if(node.isNetBeansProject()) { - fileChooser.approveSelection(); - } else if (node.getFile().isFile() && !node.getFile().getPath().endsWith(".lnk")){ - fileChooser.approveSelection(); - } else { - changeTreeDirectory(node.getFile()); - } - - } - - // handles click to rename feature - if (SwingUtilities.isLeftMouseButton(e) && (e.getClickCount() == 1)) { - if (pathToRename != null) { - if (renameTimer != null) { - renameTimer.stop(); - } - // start slow click rename timer - renameTimer = new Timer(800, this); - renameTimer.setRepeats(false); - renameTimer.start(); - } - } - - ((DirectoryTreeModel) tree.getModel()).nodeChanged(node); - if (row == 0) { - tree.revalidate(); - tree.repaint(); - } - } - } - - @Override - public void mousePressed(MouseEvent e) { - handlePopupMenu(e); - } - - @Override - public void mouseReleased(MouseEvent e) { - handlePopupMenu(e); - } - - private void handlePopupMenu (MouseEvent e) { - if (!e.isPopupTrigger()) { - return; - } - final JTree tree = (JTree) e.getSource(); - Point p = e.getPoint(); - int x = e.getX(); - int y = e.getY(); - int row = tree.getRowForLocation(x, y); - TreePath path = tree.getPathForRow(row); - - if (path != null) { - DirectoryNode node = (DirectoryNode) path.getLastPathComponent(); - ((DirectoryTreeModel) tree.getModel()).nodeChanged(node); - if(!fileChooser.getFileSystemView().isFileSystem(node.getFile())) { - return; - } - - tree.setSelectionPath(path); - popupMenu.show(tree, x, y); - } - } - - private void changeTreeDirectory(File dir) { - if (File.separatorChar == '\\' && dir.getPath().endsWith(".lnk")) { - File linkLocation = getShellFolderForFileLinkLoc(dir); - if (linkLocation != null && fileChooser.isTraversable(linkLocation)) { - dir = linkLocation; - } else { - return; - } - } - fileChooser.setCurrentDirectory(dir); - } - - /********** implementation of CellEditorListener ****************/ - - /** Refresh filename text field after rename */ - public void editingStopped(ChangeEvent e) { - DirectoryNode node = (DirectoryNode) tree.getLastSelectedPathComponent(); - if (node != null) { - setFileName(getStringOfFileName(node.getFile())); - } - } - - public void editingCanceled(ChangeEvent e) { - // no operation - } - - /********** ActionListener impl, slow-double-click rename ******/ - - public void actionPerformed(ActionEvent e) { - if (tree.isFocusOwner() && isSelectionKept(pathToRename)) { - DirectoryNode node = (DirectoryNode)tree.getLastSelectedPathComponent(); - if (node != null) { - applyEdit(node); - } - } - // clear - cancelRename(); - } - - void preprocessMouseEvent (MouseEvent e) { - if ((e.getID() != MouseEvent.MOUSE_PRESSED) || (e.getButton() != MouseEvent.BUTTON1)) { - return; - } - TreePath clickedPath = tree.getPathForLocation(e.getX(), e.getY()); - if (clickedPath != null && isSelectionKept(clickedPath)) { - pathToRename = clickedPath; - } - } - - private boolean isSelectionKept (TreePath selPath) { - if (curSelPath != null) { - TreePath oldSel = curSelPath.get(); - if (oldSel != null && oldSel.equals(selPath)) { - return true; - } - } - return false; - } - - private void cancelRename () { - if (renameTimer != null) { - renameTimer.stop(); - renameTimer = null; - } - pathToRename = null; - } - - /******** implementation of focus listener, for slow click rename cancelling ******/ - - public void focusGained(FocusEvent e) { - // don't allow to invoke click to rename immediatelly after focus gain - // what may happen is that tree gains focus by mouse - // click on selected item - on some platforms selected item - // is not visible without focus and click to rename will - // be unwanted and surprising for users - - // see run method - SwingUtilities.invokeLater(this); - } - - public void run() { - cancelRename(); - } - - public void focusLost(FocusEvent e) { - cancelRename(); - } - - } - - private class TreeExpansionHandler implements TreeExpansionListener { - public void treeExpanded(TreeExpansionEvent evt) { - TreePath path = evt.getPath(); - DirectoryNode node = (DirectoryNode) path - .getLastPathComponent(); - if(!node.isLoaded()) { - expandNode(fileChooser, path); - } else { - // fixed #96954, to be able to add a new directory - // when the node has been already loaded - if(addNewDirectory) { - addNewDirectory(path); - addNewDirectory = false; - } - // Fix for IZ#123815 : Cannot refresh the tree content - refreshNode( path , node ); - } - } - public void treeCollapsed(TreeExpansionEvent event) { - } - - } - - // Fix for IZ#123815 : Cannot refresh the tree content - private void refreshNode( final TreePath path, final DirectoryNode node ){ - final File folder = node.getFile(); - - // Additional fixes for IZ#116859 [60cat] Node update bug in the "open project" panel while deleting directories - if ( !folder.exists() ){ - TreePath parentPath = path.getParentPath(); - boolean refreshTree = false; - - if(tree.isExpanded(path)) { - tree.collapsePath(path); - refreshTree = true; - } - model.removeNodeFromParent( node ); - if ( refreshTree ){ - tree.expandPath( parentPath ); - } - return; - } - - RequestProcessor.getDefault().post(new Runnable() { - private Set realDirs; - public void run() { - if (!EventQueue.isDispatchThread()) { - // first phase - realDirs = new HashSet(); - File[] files = folder.listFiles(); - files = files == null ? new File[0] : files; - for (File file : files) { - if ( !file.isDirectory() ){ - continue; - } - String name = file.getName(); - realDirs.add( name ); - } - SwingUtilities.invokeLater(this); - } else { - // second phase, in EQ thread, invoked from first phase - int count = node.getChildCount(); - Map currentFiles = - new HashMap( ); - for( int i=0; i< count ; i++ ){ - TreeNode child = node.getChildAt(i); - if ( child instanceof DirectoryNode ){ - File file = ((DirectoryNode)child).getFile(); - currentFiles.put( file.getName() , (DirectoryNode)child); - } - } - - Set realCloned = new HashSet( realDirs ); - if ( realCloned.removeAll( currentFiles.keySet()) ){ - // Handle added folders - for ( String name : realCloned ){ - DirectoryNode added = new DirectoryNode( new File( folder, name ) ); - model.insertNodeInto( added, node, node.getChildCount()); - } - } - Set currentNames = new HashSet( currentFiles.keySet()); - if ( currentNames.removeAll( realDirs )){ - // Handle deleted folders - for ( String name : currentNames ){ - DirectoryNode removed = currentFiles.get( name ); - model.removeNodeFromParent( removed ); - } - } - } - } - }); - } - - - private class NewDirectoryAction extends AbstractAction { - public void actionPerformed(ActionEvent e) { - final TreePath path = tree.getSelectionPath(); - - if(path == null) { - // if no nodes are selected, get the root node - // fixed #96954, to be able to add a new directory - // in the current directory shown in the tree - addNewDirectory(new TreePath(model.getPathToRoot((DirectoryNode)tree.getModel().getRoot()))); - } - - if(path != null) { - if(tree.isExpanded(path)) { - addNewDirectory(path); - } else { - addNewDirectory = true; - tree.expandPath(path); - } - } - } - } - - private class DirectoryTreeRenderer implements TreeCellRenderer { - HtmlRenderer.Renderer renderer = HtmlRenderer.createRenderer(); - - public Component getTreeCellRendererComponent( - JTree tree, - Object value, - boolean isSelected, - boolean expanded, - boolean leaf, - int row, - boolean hasFocus) { - - Component stringDisplayer = renderer.getTreeCellRendererComponent(tree, - value, - isSelected, - expanded, - leaf, - row, - hasFocus); - - if(value instanceof DirectoryNode) { - tree.setShowsRootHandles(true); - DirectoryNode node = (DirectoryNode)value; - ((JLabel)stringDisplayer).setIcon(getNodeIcon(node)); - ((JLabel)stringDisplayer).setText(getNodeText(node.getFile())); - } - Font f = stringDisplayer.getFont(); - stringDisplayer.setPreferredSize(new Dimension(stringDisplayer.getPreferredSize().width, 30)); - - // allow some space around icon of items - ((JComponent)stringDisplayer).setBorder(BorderFactory.createEmptyBorder(1, 0, 1, 0)); - stringDisplayer.setSize(stringDisplayer.getPreferredSize()); - - return stringDisplayer; - } - - private Icon getNodeIcon(DirectoryNode node) { - File file = node.getFile(); - if(file.exists()) { - //TODO icon changer code started - if (customDirectoryProvider != null && customDirectoryProvider.isValidCustomDirectory(file)) { - return customDirectoryProvider.getCustomDirectoryIcon(); - } - //TODO icon changer code ended - - return fileChooser.getIcon(file); - } else { - return null; - } - } - - private String getNodeText(File file) { - if(file.exists()) { - return "" + fileChooser.getName(file) + ""; - } else { - return ""; - } - } - } - - private class DirectoryTreeModel extends DefaultTreeModel { - - public DirectoryTreeModel(TreeNode root) { - super(root); - } - - public void valueForPathChanged(TreePath path, Object newValue) { - boolean refreshTree = false; - DirectoryNode node = (DirectoryNode)path.getLastPathComponent(); - File f = node.getFile(); - File newFile = new File(f.getParentFile(), (String)newValue); - - if(f.renameTo(newFile)) { - // fix bug #97521, #96960 - if(tree.isExpanded(path)) { - tree.collapsePath(path); - refreshTree = true; - } - - node.setFile(newFile); - node.removeAllChildren(); - - ((DefaultTreeModel) tree.getModel()).nodeStructureChanged(node); - if(refreshTree) { - tree.expandPath(path); - } - } - } - } -} diff --git a/modules/DirectoryChooser/src/main/java/org/netbeans/swing/dirchooser/DirectoryNode.java b/modules/DirectoryChooser/src/main/java/org/netbeans/swing/dirchooser/DirectoryNode.java deleted file mode 100644 index 10ceea2afb..0000000000 --- a/modules/DirectoryChooser/src/main/java/org/netbeans/swing/dirchooser/DirectoryNode.java +++ /dev/null @@ -1,257 +0,0 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - * - * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. - * - * The contents of this file are subject to the terms of either the GNU - * General Public License Version 2 only ("GPL") or the Common - * Development and Distribution License("CDDL") (collectively, the - * "License"). You may not use this file except in compliance with the - * License. You can obtain a copy of the License at - * http://www.netbeans.org/cddl-gplv2.html - * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the - * specific language governing permissions and limitations under the - * License. When distributing the software, include this License Header - * Notice in each file and include the License file at - * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the GPL Version 2 section of the License file that - * accompanied this code. If applicable, add the following below the - * License Header, with the fields enclosed by brackets [] replaced by - * your own identifying information: - * "Portions Copyrighted [year] [name of copyright owner]" - * - * Contributor(s): - * - * The Original Software is NetBeans. The Initial Developer of the Original - * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun - * Microsystems, Inc. All Rights Reserved. - * - * If you wish your version of this file to be governed by only the CDDL - * or only the GPL Version 2, indicate your decision by adding - * "[Contributor] elects to include this software in this distribution - * under the [CDDL or GPL Version 2] license." If you do not indicate a - * single choice of license, a recipient has the option to distribute - * your version of this file under either the CDDL, the GPL Version 2 or - * to extend the choice of license to its licensees as provided above. - * However, if you add GPL Version 2 code and therefore, elected the GPL - * Version 2 license, then the option applies only if the new code is - * made subject to such option by the copyright holder. - * - * Contributor(s): Soot Phengsy - */ -package org.netbeans.swing.dirchooser; - -import java.io.File; -import java.io.FileFilter; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import javax.swing.JFileChooser; -import javax.swing.tree.DefaultMutableTreeNode; -import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileUtil; - -/** - * A directory tree node. - * - * @author Soot Phengsy - */ -public class DirectoryNode extends DefaultMutableTreeNode { - - public final static int SINGLE_SELECTION = 0; - public final static int DIG_IN_SELECTION = 4; - /** case insensitive file name's comparator */ - static final FileNameComparator FILE_NAME_COMPARATOR = new FileNameComparator(); - private File directory; - private boolean isDir; - private boolean loaded; - private boolean isSelected; - - public DirectoryNode(File file) { - this(file, true, false, false, false); - } - - public DirectoryNode(File file, boolean allowsChildren) { - this(file, allowsChildren, false, false, false); - } - - public DirectoryNode(File file, boolean allowsChildren, boolean isSelected, - boolean isChecked, boolean isEditable) { - super(file, allowsChildren); - this.directory = file; - this.isDir = directory.isDirectory(); - this.isSelected = isSelected; - } - - public boolean isLoaded() { - return this.loaded; - } - - public File getFile() { - return this.directory; - } - - public void setFile(File file) { - setUserObject(file); - this.directory = file; - this.loaded = false; - } - - public void setSelected(boolean isSelected) { - this.isSelected = isSelected; - } - - @Override - public boolean isLeaf() { - return !this.isDir; - } - - @Override - public boolean getAllowsChildren() { - return this.isDir; - } - - public boolean isSelected() { - return this.isSelected; - } - - public boolean loadChildren(JFileChooser chooser, boolean descend) { - //fixed bug #97124 - if (loaded == false) { - - ArrayList files = getFiles(chooser); - - if (files.size() == 0) { - return false; - } - - for (int i = 0; i < files.size(); i++) { - File child = (File) files.get(i); - - if (chooser.accept(child)) { - try { - DirectoryNode node = new DirectoryNode(child); - if (descend == false) { - break; - } - add(node); - } catch (NullPointerException t) { - t.printStackTrace(); - } - } - } - - if (descend == true || (getChildCount() > 0)) { - loaded = true; - } - } - - return loaded; - } - - private ArrayList getFiles(JFileChooser chooser) { - //fixed bug #97124 - ArrayList list = new ArrayList(); - - // Fix for IZ#116859 [60cat] Node update bug in the "open project" panel while deleting directories - if (directory == null || !directory.exists()) { - return list; - } - - File[] files = chooser.getFileSystemView().getFiles(directory, chooser.isFileHidingEnabled()); - int mode = chooser.getFileSelectionMode(); - if (mode == JFileChooser.DIRECTORIES_ONLY) { - for (int i = 0; i < files.length; i++) { - File child = files[i]; - if (child.isDirectory()) { - list.add(child); - } - } - Collections.sort(list, FILE_NAME_COMPARATOR); - } else if (mode == JFileChooser.FILES_AND_DIRECTORIES || mode == JFileChooser.FILES_ONLY) { - ArrayList dirList = new ArrayList(); - ArrayList fileList = new ArrayList(); - for (int i = 0; i < files.length; i++) { - File child = files[i]; - if (child.isDirectory()) { - dirList.add(child); - } else { - fileList.add(child); - } - } - - Collections.sort(dirList, FILE_NAME_COMPARATOR); - Collections.sort(fileList, FILE_NAME_COMPARATOR); - - list.addAll(dirList); - list.addAll(fileList); - } - - return list; - } - - public boolean isNetBeansProject() { - return false; -// return isNetBeansProject(directory); - } - - /*public static boolean isNetBeansProject (File directory) { - boolean retVal = false; - if (directory != null) { - FileObject fo = convertToValidDir(directory); - if (fo != null) { - if (Utilities.isUnix() && fo.getParent() != null - && fo.getParent().getParent() == null) { - retVal = false; // Ignore all subfolders of / on unixes - // (e.g. /net, /proc) - } else { - retVal = ProjectManager.getDefault().isProject(fo); - } - } - } - return retVal; - }*/ - private static FileObject convertToValidDir(File f) { - FileObject fo; - File testFile = new File(f.getPath()); - if (testFile == null || testFile.getParent() == null) { - // BTW this means that roots of file systems can't be project - // directories. - return null; - } - - /** - * - * ATTENTION: on Windows may occure dir.isDirectory () == dir.isFile () == - * - * true then its used testFile instead of dir. - * - */ - if (!testFile.isDirectory()) { - return null; - } - - fo = FileUtil.toFileObject(FileUtil.normalizeFile(testFile)); - return fo; - } - - private class DirectoryFilter implements FileFilter { - - public boolean accept(File f) { - return f.isDirectory(); - } - - public String getDescription() { - return "Directory"; - } - } - - /** Compares files ignoring case sensitivity */ - private static class FileNameComparator implements Comparator { - - public int compare(File f1, File f2) { - return String.CASE_INSENSITIVE_ORDER.compare(f1.getName(), f2.getName()); - } - } -} diff --git a/modules/DirectoryChooser/src/main/java/org/netbeans/swing/dirchooser/FileCompletionPopup.java b/modules/DirectoryChooser/src/main/java/org/netbeans/swing/dirchooser/FileCompletionPopup.java deleted file mode 100644 index bd3dda3b8e..0000000000 --- a/modules/DirectoryChooser/src/main/java/org/netbeans/swing/dirchooser/FileCompletionPopup.java +++ /dev/null @@ -1,284 +0,0 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - * - * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. - * - * The contents of this file are subject to the terms of either the GNU - * General Public License Version 2 only ("GPL") or the Common - * Development and Distribution License("CDDL") (collectively, the - * "License"). You may not use this file except in compliance with the - * License. You can obtain a copy of the License at - * http://www.netbeans.org/cddl-gplv2.html - * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the - * specific language governing permissions and limitations under the - * License. When distributing the software, include this License Header - * Notice in each file and include the License file at - * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the GPL Version 2 section of the License file that - * accompanied this code. If applicable, add the following below the - * License Header, with the fields enclosed by brackets [] replaced by - * your own identifying information: - * "Portions Copyrighted [year] [name of copyright owner]" - * - * Contributor(s): - * - * The Original Software is NetBeans. The Initial Developer of the Original - * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun - * Microsystems, Inc. All Rights Reserved. - * - * If you wish your version of this file to be governed by only the CDDL - * or only the GPL Version 2, indicate your decision by adding - * "[Contributor] elects to include this software in this distribution - * under the [CDDL or GPL Version 2] license." If you do not indicate a - * single choice of license, a recipient has the option to distribute - * your version of this file under either the CDDL, the GPL Version 2 or - * to extend the choice of license to its licensees as provided above. - * However, if you add GPL Version 2 code and therefore, elected the GPL - * Version 2 license, then the option applies only if the new code is - * made subject to such option by the copyright holder. - * - * Contributor(s): Soot Phengsy - */ - -package org.netbeans.swing.dirchooser; - -import java.awt.Component; -import java.awt.Dimension; -import java.awt.Point; -import java.awt.Rectangle; -import java.awt.event.FocusAdapter; -import java.awt.event.FocusEvent; -import java.awt.event.KeyEvent; -import java.awt.event.KeyListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.MouseMotionListener; -import java.io.File; -import java.util.Vector; -import java.util.logging.Level; -import java.util.logging.Logger; -import javax.swing.JFileChooser; -import javax.swing.JList; -import javax.swing.JPopupMenu; -import javax.swing.JScrollPane; -import javax.swing.JTextField; -import javax.swing.ListSelectionModel; -import javax.swing.SwingUtilities; -import javax.swing.text.BadLocationException; -import javax.swing.text.Document; -import javax.swing.text.JTextComponent; - -/** - * A class that handles the "File Name:" text field auto-completion drop-down selection list. - * - * @author Soot Phengsy - */ -public class FileCompletionPopup extends JPopupMenu implements KeyListener { - - private JList list; - private JTextField textField; - private JFileChooser chooser; - - public FileCompletionPopup(JFileChooser chooser, JTextField textField, Vector files) { - this.list = new JList(files); - this.textField = textField; - this.chooser = chooser; - list.setVisibleRowCount(4); - list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); - - JScrollPane jsp = new JScrollPane(list); - add(jsp); - - list.setFocusable(false); - jsp.setFocusable(false); - setFocusable(false); - - list.addFocusListener(new FocusHandler()); - list.addMouseListener(new MouseHandler()); - list.addMouseMotionListener(new MouseHandler()); - - textField.addKeyListener(this); - } - - public void setDataList(Vector files) { - list.setListData(files); - ensureSelection(); - } - - private void setSelectNext() { - if (list.getModel().getSize() > 0) { - int cur = (list.getSelectedIndex() + 1) % list.getModel().getSize(); - list.setSelectedIndex(cur); - list.ensureIndexIsVisible(cur); - } - } - - private void setSelectPrevious() { - if (list.getModel().getSize() > 0) { - int cur = (list.getSelectedIndex() == -1) ? 0 - : list.getSelectedIndex(); - cur = (cur == 0) ? list.getModel().getSize() - 1 : cur - 1; - list.setSelectedIndex(cur); - list.ensureIndexIsVisible(cur); - } - } - - public void showPopup(JTextComponent source, int x, int y) { - if(list.getModel().getSize() == 0) { - return; - } - setPreferredSize(new Dimension(source.getWidth(), source.getHeight() * 4)); - show(source, x, y); - ensureSelection(); - } - - // #106268: always have some item selected for better usability - private void ensureSelection () { - if (list.getSelectedIndex() == -1 && (list.getModel().getSize() > 0)) { - list.setSelectedIndex(0); - } - } - - private class FocusHandler extends FocusAdapter { - @Override - public void focusLost(FocusEvent e) { - if (!e.isTemporary()) { - setVisible(false); - textField.requestFocus(); - } - } - } - - private class MouseHandler extends MouseAdapter implements MouseMotionListener{ - public void mouseMoved(MouseEvent e) { - if (e.getSource() == list) { - Point location = e.getPoint(); - int index = list.locationToIndex(location); - Rectangle r = new Rectangle(); - list.computeVisibleRect( r ); - if ( r.contains( location ) ) { - list.setSelectedIndex(index); - } - } - } - - public void mouseDragged(MouseEvent e) { - if (e.getSource() == list) { - return; - } - if ( isVisible() ) { - MouseEvent newEvent = convertMouseEvent( e ); - Rectangle r = new Rectangle(); - list.computeVisibleRect( r ); - Point location = newEvent.getPoint(); - int index = list.locationToIndex(location); - if ( r.contains( location ) ) { - list.setSelectedIndex(index); - } - } - } - - @Override - public void mouseClicked(MouseEvent e) { - Point p = e.getPoint(); - int index = list.locationToIndex(p); - list.setSelectedIndex(index); - setVisible(false); - File file = (File)list.getSelectedValue(); - if (file == null) { - return; - } - if(file.equals(chooser.getCurrentDirectory())) { - chooser.firePropertyChange(JFileChooser.DIRECTORY_CHANGED_PROPERTY, false, true); - } else { - chooser.setCurrentDirectory(file); - } - textField.requestFocus(); - } - - private MouseEvent convertMouseEvent( MouseEvent e ) { - Point convertedPoint = SwingUtilities.convertPoint( (Component)e.getSource(), - e.getPoint(), list ); - MouseEvent newEvent = new MouseEvent( (Component)e.getSource(), - e.getID(), - e.getWhen(), - e.getModifiers(), - convertedPoint.x, - convertedPoint.y, - e.getClickCount(), - e.isPopupTrigger() ); - return newEvent; - } - } - - /****** implementation of KeyListener of fileNameTextField ******/ - - public void keyPressed(KeyEvent e) { - if (!isVisible()) { - return; - } - - int code = e.getKeyCode(); - switch (code) { - case KeyEvent.VK_DOWN: - setSelectNext(); - e.consume(); - break; - case KeyEvent.VK_UP: - setSelectPrevious(); - e.consume(); - break; - case KeyEvent.VK_ESCAPE: - setVisible(false); - textField.requestFocus(); - e.consume(); - break; - } - - if (isCompletionKey(code, textField)) { - File file = (File)list.getSelectedValue(); - if(file != null) { - if(file.equals(chooser.getCurrentDirectory())) { - chooser.firePropertyChange(JFileChooser.DIRECTORY_CHANGED_PROPERTY, false, true); - } else { - chooser.setSelectedFiles(new File[] {file}); - chooser.setCurrentDirectory(file); - } - if (file.isDirectory()) { - try { - Document doc = textField.getDocument(); - doc.insertString(doc.getLength(), File.separator, null); - } catch (BadLocationException ex) { - Logger.getLogger(getClass().getName()).log( - Level.FINE, "Cannot append directory separator.", ex); - } - } - } - setVisible(false); - textField.requestFocus(); - e.consume(); - } - } - - public void keyReleased(KeyEvent e) { - // no operation - } - - public void keyTyped(KeyEvent e) { - // no operation - } - - private boolean isCompletionKey (int keyCode, JTextField textField) { - if (keyCode == KeyEvent.VK_ENTER || keyCode == KeyEvent.VK_TAB) { - return true; - } - if (keyCode == KeyEvent.VK_RIGHT && - (textField.getCaretPosition() >= (textField.getDocument().getLength() - 1))) { - return true; - } - - return false; - } - -} diff --git a/modules/DirectoryChooser/src/main/java/org/netbeans/swing/dirchooser/InputBlocker.java b/modules/DirectoryChooser/src/main/java/org/netbeans/swing/dirchooser/InputBlocker.java deleted file mode 100644 index 113c2d2fd8..0000000000 --- a/modules/DirectoryChooser/src/main/java/org/netbeans/swing/dirchooser/InputBlocker.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - * - * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. - * - * The contents of this file are subject to the terms of either the GNU - * General Public License Version 2 only ("GPL") or the Common - * Development and Distribution License("CDDL") (collectively, the - * "License"). You may not use this file except in compliance with the - * License. You can obtain a copy of the License at - * http://www.netbeans.org/cddl-gplv2.html - * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the - * specific language governing permissions and limitations under the - * License. When distributing the software, include this License Header - * Notice in each file and include the License file at - * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the GPL Version 2 section of the License file that - * accompanied this code. If applicable, add the following below the - * License Header, with the fields enclosed by brackets [] replaced by - * your own identifying information: - * "Portions Copyrighted [year] [name of copyright owner]" - * - * Contributor(s): - * - * The Original Software is NetBeans. The Initial Developer of the Original - * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun - * Microsystems, Inc. All Rights Reserved. - * - * If you wish your version of this file to be governed by only the CDDL - * or only the GPL Version 2, indicate your decision by adding - * "[Contributor] elects to include this software in this distribution - * under the [CDDL or GPL Version 2] license." If you do not indicate a - * single choice of license, a recipient has the option to distribute - * your version of this file under either the CDDL, the GPL Version 2 or - * to extend the choice of license to its licensees as provided above. - * However, if you add GPL Version 2 code and therefore, elected the GPL - * Version 2 license, then the option applies only if the new code is - * made subject to such option by the copyright holder. - * - * Contributor(s): Soot Phengsy - */ - -package org.netbeans.swing.dirchooser; - -import java.awt.event.*; -import java.awt.*; -import javax.swing.*; -import javax.swing.event.*; - -/** - * Blocks user's input when FileChooser is busy. - * - * @author Soot Phengsy - */ -public class InputBlocker extends JComponent implements MouseInputListener { - - public InputBlocker() { - } - - private void addListeners(Component c) { - for( MouseListener ml : c.getMouseListeners() ) { - if( ml == this ) - return; - } - c.addMouseListener(this); - c.addMouseMotionListener(this); - } - - private void removeListeners(Component c) { - c.removeMouseListener(this); - c.removeMouseMotionListener(this); - } - - public void block(JRootPane rootPane) { - if( null == rootPane ) - return; - Component glassPane = rootPane.getGlassPane(); - if( null == glassPane ) { - rootPane.setGlassPane(this); - glassPane = this; - } - glassPane.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - addListeners(glassPane); - glassPane.setVisible(true); - } - - public void unBlock(JRootPane rootPane) { - if( null == rootPane ) - return; - Component glassPane = rootPane.getGlassPane(); - if( null == glassPane ) { - return; - } - removeListeners(glassPane); - glassPane.setCursor(null); - glassPane.setVisible(false); - } - - public void mouseClicked(MouseEvent e) { - Toolkit.getDefaultToolkit().beep(); - } - - public void mousePressed(MouseEvent e) { - } - - public void mouseReleased(MouseEvent e) { - } - - public void mouseEntered(MouseEvent e) { - } - - public void mouseExited(MouseEvent e) { - } - - public void mouseDragged(MouseEvent e) { - } - - public void mouseMoved(MouseEvent e) { - } -} diff --git a/modules/DirectoryChooser/src/main/java/org/netbeans/swing/dirchooser/Module.java b/modules/DirectoryChooser/src/main/java/org/netbeans/swing/dirchooser/Module.java deleted file mode 100644 index aff33a2864..0000000000 --- a/modules/DirectoryChooser/src/main/java/org/netbeans/swing/dirchooser/Module.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - * - * Copyright 1997-2007 Sun Microsystems, Inc. All rights reserved. - * - * The contents of this file are subject to the terms of either the GNU - * General Public License Version 2 only ("GPL") or the Common - * Development and Distribution License("CDDL") (collectively, the - * "License"). You may not use this file except in compliance with the - * License. You can obtain a copy of the License at - * http://www.netbeans.org/cddl-gplv2.html - * or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the - * specific language governing permissions and limitations under the - * License. When distributing the software, include this License Header - * Notice in each file and include the License file at - * nbbuild/licenses/CDDL-GPL-2-CP. Sun designates this - * particular file as subject to the "Classpath" exception as provided - * by Sun in the GPL Version 2 section of the License file that - * accompanied this code. If applicable, add the following below the - * License Header, with the fields enclosed by brackets [] replaced by - * your own identifying information: - * "Portions Copyrighted [year] [name of copyright owner]" - * - * Contributor(s): - * - * The Original Software is NetBeans. The Initial Developer of the Original - * Software is Sun Microsystems, Inc. Portions Copyright 1997-2006 Sun - * Microsystems, Inc. All Rights Reserved. - * - * If you wish your version of this file to be governed by only the CDDL - * or only the GPL Version 2, indicate your decision by adding - * "[Contributor] elects to include this software in this distribution - * under the [CDDL or GPL Version 2] license." If you do not indicate a - * single choice of license, a recipient has the option to distribute - * your version of this file under either the CDDL, the GPL Version 2 or - * to extend the choice of license to its licensees as provided above. - * However, if you add GPL Version 2 code and therefore, elected the GPL - * Version 2 license, then the option applies only if the new code is - * made subject to such option by the copyright holder. - * - * Contributor(s): Soot Phengsy - */ - -package org.netbeans.swing.dirchooser; - -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import javax.swing.UIDefaults; -import javax.swing.UIManager; -import javax.swing.plaf.FileChooserUI; -import org.openide.modules.ModuleInstall; - -/** - * Registers the directory chooser in NetBeans. - * - * @author Soot Phengsy - */ -public class Module extends ModuleInstall { - - private static final String KEY = "FileChooserUI"; // NOI18N - private static Class originalImpl; - private static PropertyChangeListener pcl; - - private static final String QUICK_CHOOSER_NAME = - "org.netbeans.modules.quickfilechooser.ChooserComponentUI"; - - private static final String FORCE_STANDARD_CHOOSER = "standard-file-chooser"; // NOI18N - - @Override public void restored() { - install(); - } - - @Override public void uninstalled() { - uninstall(); - } - - public static void install() { - // don't install directory chooser if standard chooser is desired - if (isStandardChooserForced()) { - return; - } - final UIDefaults uid = UIManager.getDefaults(); - originalImpl = (Class) uid.getUIClass(KEY); - Class impl = DelegatingChooserUI.class; - final String val = impl.getName(); - // don't install dirchooser if quickfilechooser is present - if (!isQuickFileChooser(uid.get(KEY))) { - uid.put(KEY, val); - // To make it work in NetBeans too: - uid.put(val, impl); - } - // #61147: prevent NB from switching to a different UI later (under GTK): - uid.addPropertyChangeListener(pcl = new PropertyChangeListener() { - public void propertyChange(PropertyChangeEvent evt) { - String name = evt.getPropertyName(); - Object className = uid.get(KEY); - if ((name.equals(KEY) || name.equals("UIDefaults")) && !val.equals(className) - && !isQuickFileChooser(className)) { - uid.put(KEY, val); - } - } - }); - } - - public static void uninstall() { - if (isInstalled()) { - assert pcl != null; - UIDefaults uid = UIManager.getDefaults(); - uid.removePropertyChangeListener(pcl); - pcl = null; - String val = originalImpl.getName(); - uid.put(KEY, val); - uid.put(val, originalImpl); - originalImpl = null; - } - } - - public static boolean isInstalled() { - return originalImpl != null; - } - - static Class getOrigChooser () { - return originalImpl; - } - - private static boolean isQuickFileChooser (Object className) { - return QUICK_CHOOSER_NAME.equals(className); - } - - private static boolean isStandardChooserForced () { - return Boolean.getBoolean(FORCE_STANDARD_CHOOSER); - } - -} diff --git a/modules/DirectoryChooser/src/main/java/org/netbeans/swing/dirchooser/spi/CustomDirectoryProvider.java b/modules/DirectoryChooser/src/main/java/org/netbeans/swing/dirchooser/spi/CustomDirectoryProvider.java deleted file mode 100644 index 3e28fccd1e..0000000000 --- a/modules/DirectoryChooser/src/main/java/org/netbeans/swing/dirchooser/spi/CustomDirectoryProvider.java +++ /dev/null @@ -1,82 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Martin Ε kurla -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ - -package org.netbeans.swing.dirchooser.spi; - -import java.io.File; -import javax.swing.Icon; - -/** - * Defines icon and required file content of custom directory. Custom directory is invoked always as - * the result of jFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);. As - * of implementation detail, {@link CustomDirectoryProvider#isEnabled isEnabled()} must return true - * in the process of creating the JFileChooser. This means that there should be an static setter method - * setEnabled(boolean) and it must be set to true before the - * jFileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); will be called. - * - * @author Martin Ε kurla - */ -public interface CustomDirectoryProvider { - /** - * Determines if custom directory provider is enabled. - * - * @return true if custom directory provider is enabled, false otherwise - */ - boolean isEnabled(); - - /** - * Determines if given directory represents valid custom directory. This can be determined by the - * content of given directory. Returns false if given argument isn't directory. - * - * @param directory input file - * - * @return true if given directoru represent valid custom directory, false otherwise - */ - boolean isValidCustomDirectory(File directory); - - /** - * Returns icon for custom directory. Icon is showd in the JFileChooser dialog. - * - * @return icon for custom directory - */ - Icon getCustomDirectoryIcon(); -} diff --git a/modules/DirectoryChooser/src/main/nbm/manifest.mf b/modules/DirectoryChooser/src/main/nbm/manifest.mf deleted file mode 100644 index c9f41dd0ae..0000000000 --- a/modules/DirectoryChooser/src/main/nbm/manifest.mf +++ /dev/null @@ -1,5 +0,0 @@ -Manifest-Version: 1.0 -AutoUpdate-Essential-Module: true -OpenIDE-Module-Localizing-Bundle: org/netbeans/swing/dirchooser/Bundle.properties -OpenIDE-Module-Install: org/netbeans/swing/dirchooser/Module.class -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file diff --git a/modules/DirectoryChooser/src/main/nbm/module.xml b/modules/DirectoryChooser/src/main/nbm/module.xml deleted file mode 100644 index 6a29efc3ae..0000000000 --- a/modules/DirectoryChooser/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/Bundle.properties b/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/Bundle.properties deleted file mode 100644 index 94fe276590..0000000000 --- a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/Bundle.properties +++ /dev/null @@ -1,19 +0,0 @@ -OpenIDE-Module-Display-Category=Libraries -OpenIDE-Module-Name=Directory Chooser -OpenIDE-Module-Short-Description=\ - Replaces regular Swing file chooser in directory-only mode. -OpenIDE-Module-Long-Description=\ - Replaces regular Swing file chooser in directory-only mode with an enhanced UI. -LBL_NewFolder=New Folder -LBL_Rename=Rename -LBL_Delete=Delete -MSG_Delete=Are you sure you want to delete {0}? -MSG_Delete_Multiple=Are you sure you want to delete these {0} items? -MSG_Plur_Delete=Files cannot be deleted. -MSG_Sing_Delete=File cannot be deleted. -MSG_Confirm=Please Confirm -TLTP_HomeFolder=Open home directory -MSG_SlownessNote=Dialog seems to be slow, probably because of JDK bug. \ -Please try to upgrade JDK, remove zip files from Desktop folder or \ -run system with -J-Dnb.FileChooser.useShellFolder=false property. -BTN_NotShow=Do Not Show Again diff --git a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/Bundle_cs.properties b/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/Bundle_cs.properties deleted file mode 100644 index 093bb499dc..0000000000 --- a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/Bundle_cs.properties +++ /dev/null @@ -1,33 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-23 09\:55+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Short-Description=Nahrazuje oby\u010dejn\u00fd v\u00fdb\u011br souboru Swing v re\u017eimu pouze pro adres\u00e1\u0159e. - -OpenIDE-Module-Long-Description=Nahrazuje oby\u010dejn\u00fd v\u00fdb\u011br souboru Swing v re\u017eimu pouze pro adres\u00e1\u0159e vylep\u0161en\u00fdm rozhran\u00edm. - -LBL_NewFolder=Nov\u00fd adres\u00e1\u0159 - -LBL_Rename=P\u0159ejmenovat - -LBL_Delete=Smazat - -MSG_Delete=Jste si jisti, \u017ee chcete {0} smazat? - -MSG_Delete_Multiple=Jste si jisti, \u017ee chcete smazat t\u011bchto {0} polo\u017eek? - -MSG_Plur_Delete=Soubory nemohou b\u00fdt smaz\u00e1ny. - -MSG_Sing_Delete=Soubor nem\u016f\u017ee b\u00fdt smaz\u00e1n. - -MSG_Confirm=Potvr\u010fte pros\u00edm - -TLTP_HomeFolder=Otev\u0159\u00edt domovsk\u00fd adres\u00e1\u0159 - -MSG_SlownessNote=Dialogov\u00e9 okno se zd\u00e1 b\u00fdt pomal\u00e9, pravd\u011bpodobn\u011b kv\u016fli chyb\u011b v JDK. Zkuste pros\u00edm JDK aktualizovat, odstranit soubory zip z adres\u00e1\u0159e Desktop nebo syst\u00e9m spustit s vlastnost\u00ed -J-Dnb.FileChooser.useShellFolder\=false. - -BTN_NotShow=Ji\u017e nezobrazovat diff --git a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/Bundle_es.properties b/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/Bundle_es.properties deleted file mode 100644 index e644f49130..0000000000 --- a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/Bundle_es.properties +++ /dev/null @@ -1,33 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:06+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Short-Description=Reemplaza la interfaz regular de elecci\u00f3n de directorio de Swing en el modo solo-directorios. - -OpenIDE-Module-Long-Description=Reemplaza la interfaz regular de elecci\u00f3n de directorio de Swing en el modo solo-directorios con una interfaz mejorada. - -LBL_NewFolder=Nueva Carpeta - -LBL_Rename=Renombrar - -LBL_Delete=Eliminar - -MSG_Delete=\u00bfEst\u00e1s seguro de que quieres eliminar {0}? - -MSG_Delete_Multiple=\u00bfEst\u00e1s seguro de que quieres eliminar los siguientes elementos {0}? - -MSG_Plur_Delete=Los archivos no pueden ser eliminados. - -MSG_Sing_Delete=El archivo no puede ser eliminado - -MSG_Confirm=Confirmar - -TLTP_HomeFolder=Abrir la carpeta de usuario - -MSG_SlownessNote=El dialogo parece funcionar lento, probablemente debido a un bug del JDK\r\nPor favor intenta actualizar el JDK, eliminar archivos zip del escritorio o\r\nejecutar el sistema con la propiedad -J-Dnb.FileChooser.useShellFolder\=false. - -BTN_NotShow=No mostrar de nuevo diff --git a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/Bundle_fr.properties b/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/Bundle_fr.properties deleted file mode 100644 index 78e622b93a..0000000000 --- a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/Bundle_fr.properties +++ /dev/null @@ -1,33 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:06+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Remplace le s\u00e9lecteur de fichier Swing habituel en mode r\u00e9pertoire uniquement. - -OpenIDE-Module-Long-Description=Remplace le s\u00e9lecteur de fichier Swing habituel en mode r\u00e9pertoire uniquement avec une interface utilisateur am\u00e9lior\u00e9e. - -LBL_NewFolder=Nouveau dossier - -LBL_Rename=Renommer - -LBL_Delete=Supprimer - -MSG_Delete=Confirmer la suppression de {0} ? - -MSG_Delete_Multiple=Confirmer la suppression de ces \u00e9l\u00e9ments {0} ? - -MSG_Plur_Delete=Les fichiers n'ont pu \u00eatre supprim\u00e9s. - -MSG_Sing_Delete=Le fichier n'a pu \u00eatre supprim\u00e9. - -MSG_Confirm=Confirmez - -TLTP_HomeFolder=Ouvrir le r\u00e9pertoire utilisateur - -MSG_SlownessNote=La bo\u00eete de dialogue semble \u00eatre lente, probablement \u00e0 cause d'un bogue du JDK. Essayez de mettre le JDK, enlever les fichiers ZIP du r\u00e9pertoire Desktop, ou ex\u00e9cuter le syst\u00e8me avec le param\u00e8tre -J-Dnb.FileChooser.useShellFolder\=false - -BTN_NotShow=Ne plus afficher diff --git a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/Bundle_ja.properties b/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/Bundle_ja.properties deleted file mode 100644 index 1dc634bedc..0000000000 --- a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/Bundle_ja.properties +++ /dev/null @@ -1,33 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-03 02\:37+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u307f\u306e\u30e2\u30fc\u30c9\u3067\u3001\u901a\u5e38\u306eSwing file chooser\u3092\u7f6e\u63db\u3002 - -OpenIDE-Module-Long-Description=\u62e1\u5f35\u3055\u308c\u305fUI\u3092\u6301\u3064\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u307f\u306e\u30e2\u30fc\u30c9\u3067\u3001\u901a\u5e38\u306eSwing file chooser\u3092\u7f6e\u63db\u3002 - -LBL_NewFolder=\u65b0\u898f\u30d5\u30a9\u30eb\u30c0 - -LBL_Rename=\u540d\u524d\u306e\u5909\u66f4 - -LBL_Delete=\u524a\u9664 - -MSG_Delete={0}\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b\uff1f - -MSG_Delete_Multiple=\u3053\u308c\u3089\u306e{0}\u306e\u30a2\u30a4\u30c6\u30e0\u3092\u524a\u9664\u3057\u3066\u3082\u3088\u308d\u3057\u3044\u3067\u3059\u304b\uff1f - -MSG_Plur_Delete=\u30d5\u30a1\u30a4\u30eb\u3092\u524a\u9664\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 - -MSG_Sing_Delete=\u30d5\u30a1\u30a4\u30eb\u3092\u524a\u9664\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 - -MSG_Confirm=\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044 - -TLTP_HomeFolder=\u30db\u30fc\u30e0\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u3092\u958b\u304f - -MSG_SlownessNote=\u30c0\u30a4\u30a2\u30ed\u30b0\u306f\u3001\u591a\u5206JDK\u306e\u30d0\u30b0\u3067\u3001\u9045\u304f\u306a\u3063\u3066\u3044\u308b\u3088\u3046\u3067\u3059\u3002 JDK\u3092\u30a2\u30c3\u30d7\u30b0\u30ec\u30fc\u30c9\u3057\u3001\u30c7\u30b9\u30af\u30c8\u30c3\u30d7\u30fb\u30d5\u30a9\u30eb\u30c0\u304b\u3089zip\u30d5\u30a1\u30a4\u30eb\u3092\u524a\u9664\u3059\u308b\u304b\u30d7\u30ed\u30d1\u30c6\u30a3\u3092-J-Dnb.FileChooser.useShellFolder\=false\u3068\u3057\u3066\u30b7\u30b9\u30c6\u30e0\u3092\u5b9f\u884c\u3057\u3066\u304f\u3060\u3055\u3044\u3002 - -BTN_NotShow=\u4e8c\u5ea6\u3068\u8868\u793a\u3057\u306a\u3044 diff --git a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/Bundle_pt_BR.properties b/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/Bundle_pt_BR.properties deleted file mode 100644 index 06f2d1626f..0000000000 --- a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/Bundle_pt_BR.properties +++ /dev/null @@ -1,33 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 00\:32+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Substitui o seletor de arquivos padr\u00e3o Swing em modo "somente diret\u00f3rio". - -OpenIDE-Module-Long-Description=Substitui o seletor de arquivos padr\u00e3o Swing no modo "somente diret\u00f3rio" com uma interface de usu\u00e1rio aprimorada. - -LBL_NewFolder=Nova pasta - -LBL_Rename=Renomear - -LBL_Delete=Excluir - -MSG_Delete=Tem certeza de que deseja excluir {0}? - -MSG_Delete_Multiple=Tem certeza de que deseja excluir {0} itens? - -MSG_Plur_Delete=Os arquivos n\u00e3o podem ser exclu\u00eddos. - -MSG_Sing_Delete=O arquivo n\u00e3o pode ser exclu\u00eddo. - -MSG_Confirm=Confirme - -TLTP_HomeFolder=Abrir diret\u00f3rio base do usu\u00e1rio - -MSG_SlownessNote=O di\u00e1logo parece estar lento, provavelmente por causa de um bug do JDK. Por favor, tente atualizar o JDK, remova os arquivos zip da \u00c1rea de Trabalho do usu\u00e1rio ou execute o sistema com o par\u00e2metro -J-Dnb.FileChooser.useShellFolder\=false. - -BTN_NotShow=N\u00e3o exibir novamente diff --git a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/Bundle_ru.properties b/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/Bundle_ru.properties deleted file mode 100644 index e257ae4f62..0000000000 --- a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/Bundle_ru.properties +++ /dev/null @@ -1,34 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -# FIRST AUTHOR , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-05 20\:12+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Short-Description=\u0417\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0434\u0438\u0430\u043b\u043e\u0433 \u0432\u044b\u0431\u043e\u0440\u0430 \u0444\u0430\u0439\u043b\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 "\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438". - -OpenIDE-Module-Long-Description=\u0417\u0430\u043c\u0435\u043d\u044f\u0435\u0442 \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0434\u0438\u0430\u043b\u043e\u0433 \u0432\u044b\u0431\u043e\u0440\u0430 \u0444\u0430\u0439\u043b\u0430 \u0432 \u0440\u0435\u0436\u0438\u043c\u0435 "\u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438" \u043d\u0430 \u0434\u0438\u0430\u043b\u043e\u0433 \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u043e\u043c. - -LBL_NewFolder=\u041d\u043e\u0432\u0430\u044f \u043f\u0430\u043f\u043a\u0430 - -LBL_Rename=\u041f\u0435\u0440\u0435\u0438\u043c\u0435\u043d\u043e\u0432\u0430\u0442\u044c - -LBL_Delete=\u0423\u0434\u0430\u043b\u0438\u0442\u044c - -MSG_Delete=\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c {0}? - -MSG_Delete_Multiple=\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u0438 {0} \u0437\u0430\u043f\u0438\u0441\u0435\u0439? - -MSG_Plur_Delete=\u0424\u0430\u0439\u043b\u044b \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d\u044b. - -MSG_Sing_Delete=\u0424\u0430\u0439\u043b \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0434\u0430\u043b\u0435\u043d. - -MSG_Confirm=\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 - -TLTP_HomeFolder=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0434\u043e\u043c\u0430\u0448\u043d\u044e\u044e \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e - -MSG_SlownessNote=\u0414\u0438\u0430\u043b\u043e\u0433\u043e\u0432\u043e\u0435 \u043e\u043a\u043d\u043e \u043f\u043e\u0434\u0442\u043e\u0440\u043c\u0430\u0436\u0438\u0432\u0430\u0435\u0442, \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u0438\u0437-\u0437\u0430 \u043e\u0448\u0438\u0431\u043a\u0438 JDK. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 JDK, \u0443\u0434\u0430\u043b\u0438\u0442\u0435 zip-\u0444\u0430\u0439\u043b\u044b \u0441 \u0434\u0435\u0441\u043a\u0442\u043e\u043f\u0430 \u0438\u043b\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u043c -J-Dnb.FileChooser.useShellFolder\=false. - -BTN_NotShow=\u0411\u043e\u043b\u044c\u0448\u0435 \u043d\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c diff --git a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/Bundle_zh_CN.properties b/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/Bundle_zh_CN.properties deleted file mode 100644 index 166e055f0d..0000000000 --- a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/Bundle_zh_CN.properties +++ /dev/null @@ -1,32 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:15+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u5728\u76ee\u5f55\u6a21\u5f0f\u4e2d\u53d6\u4ee3\u5e38\u89c4\u7684Swing\u6587\u4ef6\u9009\u62e9\u3002 - -OpenIDE-Module-Long-Description=\u7528\u589e\u5f3a\u7684\u7528\u6237\u754c\u9762\u5728\u76ee\u5f55\u6a21\u5f0f\u4e2d\u53d6\u4ee3\u5e38\u89c4\u7684Swing\u6587\u4ef6\u9009\u62e9\u3002 - -LBL_NewFolder=\u65b0\u5efa\u6587\u4ef6\u5939 - -LBL_Rename=\u91cd\u547d\u540d - -LBL_Delete=\u5220\u9664 - -MSG_Delete=\u4f60\u786e\u5b9a\u8981\u5220\u9664{0}\u5417\uff1f - -MSG_Delete_Multiple=\u4f60\u786e\u5b9a\u8981\u5220\u9664\u8fd9\u4e9b{0}\u9879\u5417\uff1f - -MSG_Plur_Delete=\u6587\u4ef6\u4e0d\u80fd\u88ab\u5220\u9664\u3002 - -MSG_Sing_Delete=\u6587\u4ef6\u4e0d\u80fd\u88ab\u5220\u9664\u3002 - -MSG_Confirm=\u8bf7\u786e\u8ba4 - -TLTP_HomeFolder=\u6253\u5f00\u4e3b\u76ee\u5f55 - -MSG_SlownessNote=\u5bf9\u8bdd\u4f3c\u4e4e\u662f\u7f13\u6162\u7684\uff0c\u53ef\u80fd\u662f\u56e0\u4e3aJDK\u9519\u8bef\u3002\u8bf7\u5c1d\u8bd5\u5347\u7ea7\u7684JDK\uff0c\u4ece\u684c\u9762\u6587\u4ef6\u5939\u4e2d\u5220\u9664zip\u6587\u4ef6\u6216\u8fd0\u884c\u7cfb\u7edf - J - Dnb.FileChooser.useShellFolder \=false\u6027\u80fd\u3002 - -BTN_NotShow=\u4e0d\u518d\u663e\u793a diff --git a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/cs.po b/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/cs.po deleted file mode 100644 index e928504bbc..0000000000 --- a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/cs.po +++ /dev/null @@ -1,58 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-23 09:55+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Nahrazuje obyčejnΓ½ vΓ½bΔ›r souboru Swing v reΕΎimu pouze pro adresΓ‘Ε™e." - -msgid "OpenIDE-Module-Long-Description" -msgstr "Nahrazuje obyčejnΓ½ vΓ½bΔ›r souboru Swing v reΕΎimu pouze pro adresΓ‘Ε™e vylepΕ‘enΓ½m rozhranΓ­m." - -msgid "LBL_NewFolder" -msgstr "NovΓ½ adresΓ‘Ε™" - -msgid "LBL_Rename" -msgstr "PΕ™ejmenovat" - -msgid "LBL_Delete" -msgstr "Smazat" - -msgid "MSG_Delete" -msgstr "Jste si jisti, ΕΎe chcete {0} smazat?" - -msgid "MSG_Delete_Multiple" -msgstr "Jste si jisti, ΕΎe chcete smazat tΔ›chto {0} poloΕΎek?" - -msgid "MSG_Plur_Delete" -msgstr "Soubory nemohou bΓ½t smazΓ‘ny." - -msgid "MSG_Sing_Delete" -msgstr "Soubor nemΕ―ΕΎe bΓ½t smazΓ‘n." - -msgid "MSG_Confirm" -msgstr "Potvrďte prosΓ­m" - -msgid "TLTP_HomeFolder" -msgstr "OtevΕ™Γ­t domovskΓ½ adresΓ‘Ε™" - -msgid "MSG_SlownessNote" -msgstr "DialogovΓ© okno se zdΓ‘ bΓ½t pomalΓ©, pravdΔ›podobnΔ› kvΕ―li chybΔ› v JDK. Zkuste prosΓ­m JDK aktualizovat, odstranit soubory zip z adresΓ‘Ε™e Desktop nebo systΓ©m spustit s vlastnostΓ­ -J-Dnb.FileChooser.useShellFolder=false." - -msgid "BTN_NotShow" -msgstr "JiΕΎ nezobrazovat" diff --git a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/es.po b/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/es.po deleted file mode 100644 index 226a5619da..0000000000 --- a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/es.po +++ /dev/null @@ -1,58 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:06+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Reemplaza la interfaz regular de elecciΓ³n de directorio de Swing en el modo solo-directorios." - -msgid "OpenIDE-Module-Long-Description" -msgstr "Reemplaza la interfaz regular de elecciΓ³n de directorio de Swing en el modo solo-directorios con una interfaz mejorada." - -msgid "LBL_NewFolder" -msgstr "Nueva Carpeta" - -msgid "LBL_Rename" -msgstr "Renombrar" - -msgid "LBL_Delete" -msgstr "Eliminar" - -msgid "MSG_Delete" -msgstr "ΒΏEstΓ‘s seguro de que quieres eliminar {0}?" - -msgid "MSG_Delete_Multiple" -msgstr "ΒΏEstΓ‘s seguro de que quieres eliminar los siguientes elementos {0}?" - -msgid "MSG_Plur_Delete" -msgstr "Los archivos no pueden ser eliminados." - -msgid "MSG_Sing_Delete" -msgstr "El archivo no puede ser eliminado" - -msgid "MSG_Confirm" -msgstr "Confirmar" - -msgid "TLTP_HomeFolder" -msgstr "Abrir la carpeta de usuario" - -msgid "MSG_SlownessNote" -msgstr "El dialogo parece funcionar lento, probablemente debido a un bug del JDK\r\nPor favor intenta actualizar el JDK, eliminar archivos zip del escritorio o\r\nejecutar el sistema con la propiedad -J-Dnb.FileChooser.useShellFolder=false." - -msgid "BTN_NotShow" -msgstr "No mostrar de nuevo" diff --git a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/fr.po b/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/fr.po deleted file mode 100644 index 1475bfecc2..0000000000 --- a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/fr.po +++ /dev/null @@ -1,58 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:06+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Remplace le sΓ©lecteur de fichier Swing habituel en mode rΓ©pertoire uniquement." - -msgid "OpenIDE-Module-Long-Description" -msgstr "Remplace le sΓ©lecteur de fichier Swing habituel en mode rΓ©pertoire uniquement avec une interface utilisateur amΓ©liorΓ©e." - -msgid "LBL_NewFolder" -msgstr "Nouveau dossier" - -msgid "LBL_Rename" -msgstr "Renommer" - -msgid "LBL_Delete" -msgstr "Supprimer" - -msgid "MSG_Delete" -msgstr "Confirmer la suppression de {0} ?" - -msgid "MSG_Delete_Multiple" -msgstr "Confirmer la suppression de ces Γ©lΓ©ments {0} ?" - -msgid "MSG_Plur_Delete" -msgstr "Les fichiers n'ont pu Γͺtre supprimΓ©s." - -msgid "MSG_Sing_Delete" -msgstr "Le fichier n'a pu Γͺtre supprimΓ©." - -msgid "MSG_Confirm" -msgstr "Confirmez" - -msgid "TLTP_HomeFolder" -msgstr "Ouvrir le rΓ©pertoire utilisateur" - -msgid "MSG_SlownessNote" -msgstr "La boΓte de dialogue semble Γͺtre lente, probablement Γ  cause d'un bogue du JDK. Essayez de mettre le JDK, enlever les fichiers ZIP du rΓ©pertoire Desktop, ou exΓ©cuter le systΓ¨me avec le paramΓ¨tre -J-Dnb.FileChooser.useShellFolder=false" - -msgid "BTN_NotShow" -msgstr "Ne plus afficher" diff --git a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/ja.po b/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/ja.po deleted file mode 100644 index c2434a6f17..0000000000 --- a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/ja.po +++ /dev/null @@ -1,58 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-03 02:37+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "γƒ‡γ‚£γƒ¬γ‚―γƒˆγƒͺγγΏγγƒ’γƒΌγƒ‰γ§γ€ι€šεΈΈγSwing file chooserγ‚’η½ζ›γ€‚" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ζ‹‘εΌ΅γ•γ‚ŒγŸUIγ‚’ζŒγ€γƒ‡γ‚£γƒ¬γ‚―γƒˆγƒͺγγΏγγƒ’γƒΌγƒ‰γ§γ€ι€šεΈΈγSwing file chooserγ‚’η½ζ›γ€‚" - -msgid "LBL_NewFolder" -msgstr "新規フォルダ" - -msgid "LBL_Rename" -msgstr "名前γε€‰ζ›΄" - -msgid "LBL_Delete" -msgstr "ε‰Šι™€" - -msgid "MSG_Delete" -msgstr "{0}γ‚’ε‰Šι™€γ—γ¦γ‚‚γ‚ˆγ‚γ—γ„γ§γ™γ‹οΌŸ" - -msgid "MSG_Delete_Multiple" -msgstr "γ“γ‚Œγ‚‰γ{0}γγ‚’γ‚€γƒ†γƒ γ‚’ε‰Šι™€γ—γ¦γ‚‚γ‚ˆγ‚γ—γ„γ§γ™γ‹οΌŸ" - -msgid "MSG_Plur_Delete" -msgstr "γƒ•γ‚‘γ‚€γƒ«γ‚’ε‰Šι™€γ™γ‚‹γ“γ¨γ―γ§γγΎγ›γ‚“γ€‚" - -msgid "MSG_Sing_Delete" -msgstr "γƒ•γ‚‘γ‚€γƒ«γ‚’ε‰Šι™€γ™γ‚‹γ“γ¨γ―γ§γγΎγ›γ‚“γ€‚" - -msgid "MSG_Confirm" -msgstr "η’Ίθͺγ—てください" - -msgid "TLTP_HomeFolder" -msgstr "γƒ›γƒΌγƒ γƒ‡γ‚£γƒ¬γ‚―γƒˆγƒͺを開く" - -msgid "MSG_SlownessNote" -msgstr "γƒ€γ‚€γ‚’γƒ­γ‚°γ―γ€ε€šεˆ†JDKγγƒγ‚°γ§γ€ι…くγͺγ£γ¦γ„γ‚‹γ‚ˆγ†γ§γ™γ€‚ JDKγ‚’γ‚’γƒƒγƒ—γ‚°γƒ¬γƒΌγƒ‰γ—γ€γƒ‡γ‚Ήγ‚―γƒˆγƒƒγƒ—γƒ»γƒ•γ‚©γƒ«γƒ€γ‹γ‚‰zipγƒ•γ‚‘γ‚€γƒ«γ‚’ε‰Šι™€γ™γ‚‹γ‹γƒ—γƒ­γƒ‘γƒ†γ‚£γ‚’-J-Dnb.FileChooser.useShellFolder=falseとしてシステムをεŸθ‘Œγ—てください。 " - -msgid "BTN_NotShow" -msgstr "δΊŒεΊ¦γ¨θ‘¨η€Ίγ—γͺい" diff --git a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/org-netbeans-swing-dirchooser.pot b/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/org-netbeans-swing-dirchooser.pot deleted file mode 100644 index 83fac6891e..0000000000 --- a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/org-netbeans-swing-dirchooser.pot +++ /dev/null @@ -1,60 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Replaces regular Swing file chooser in directory-only mode." - -msgid "OpenIDE-Module-Long-Description" -msgstr "" -"Replaces regular Swing file chooser in directory-only mode with an enhanced " -"UI." - -msgid "LBL_NewFolder" -msgstr "New Folder" - -msgid "LBL_Rename" -msgstr "Rename" - -msgid "LBL_Delete" -msgstr "Delete" - -msgid "MSG_Delete" -msgstr "Are you sure you want to delete {0}?" - -msgid "MSG_Delete_Multiple" -msgstr "Are you sure you want to delete these {0} items?" - -msgid "MSG_Plur_Delete" -msgstr "Files cannot be deleted." - -msgid "MSG_Sing_Delete" -msgstr "File cannot be deleted." - -msgid "MSG_Confirm" -msgstr "Please Confirm" - -msgid "TLTP_HomeFolder" -msgstr "Open home directory" - -msgid "MSG_SlownessNote" -msgstr "" -"Dialog seems to be slow, probably because of JDK bug. Please try to " -"upgrade JDK, remove zip files from Desktop folder or run system with -J-" -"Dnb.FileChooser.useShellFolder=false property." - -msgid "BTN_NotShow" -msgstr "Do Not Show Again" diff --git a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/pt_BR.po b/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/pt_BR.po deleted file mode 100644 index e4aef9dc2f..0000000000 --- a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/pt_BR.po +++ /dev/null @@ -1,58 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 00:32+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Substitui o seletor de arquivos padrΓ£o Swing em modo \"somente diretΓ³rio\"." - -msgid "OpenIDE-Module-Long-Description" -msgstr "Substitui o seletor de arquivos padrΓ£o Swing no modo \"somente diretΓ³rio\" com uma interface de usuΓ‘rio aprimorada." - -msgid "LBL_NewFolder" -msgstr "Nova pasta" - -msgid "LBL_Rename" -msgstr "Renomear" - -msgid "LBL_Delete" -msgstr "Excluir" - -msgid "MSG_Delete" -msgstr "Tem certeza de que deseja excluir {0}?" - -msgid "MSG_Delete_Multiple" -msgstr "Tem certeza de que deseja excluir {0} itens?" - -msgid "MSG_Plur_Delete" -msgstr "Os arquivos nΓ£o podem ser excluΓ­dos." - -msgid "MSG_Sing_Delete" -msgstr "O arquivo nΓ£o pode ser excluΓ­do." - -msgid "MSG_Confirm" -msgstr "Confirme" - -msgid "TLTP_HomeFolder" -msgstr "Abrir diretΓ³rio base do usuΓ‘rio" - -msgid "MSG_SlownessNote" -msgstr "O diΓ‘logo parece estar lento, provavelmente por causa de um bug do JDK. Por favor, tente atualizar o JDK, remova os arquivos zip da Área de Trabalho do usuΓ‘rio ou execute o sistema com o parΓ’metro -J-Dnb.FileChooser.useShellFolder=false." - -msgid "BTN_NotShow" -msgstr "NΓ£o exibir novamente" diff --git a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/resources/homeIcon.gif b/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/resources/homeIcon.gif deleted file mode 100644 index 82ef65811d..0000000000 Binary files a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/resources/homeIcon.gif and /dev/null differ diff --git a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/resources/newFolderIcon.gif b/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/resources/newFolderIcon.gif deleted file mode 100644 index 737e3ab928..0000000000 Binary files a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/resources/newFolderIcon.gif and /dev/null differ diff --git a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/resources/upFolderIcon.gif b/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/resources/upFolderIcon.gif deleted file mode 100644 index e8a070fd5f..0000000000 Binary files a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/resources/upFolderIcon.gif and /dev/null differ diff --git a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/ru.po b/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/ru.po deleted file mode 100644 index a5a265aef2..0000000000 --- a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/ru.po +++ /dev/null @@ -1,59 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -# FIRST AUTHOR , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-05 20:12+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ЗамСняСт ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Π΄ΠΈΠ°Π»ΠΎΠ³ Π²Ρ‹Π±ΠΎΡ€Π° Ρ„Π°ΠΉΠ»Π° Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ \"Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ\"." - -msgid "OpenIDE-Module-Long-Description" -msgstr "ЗамСняСт ΠΎΠ±Ρ‹Ρ‡Π½Ρ‹ΠΉ Π΄ΠΈΠ°Π»ΠΎΠ³ Π²Ρ‹Π±ΠΎΡ€Π° Ρ„Π°ΠΉΠ»Π° Π² Ρ€Π΅ΠΆΠΈΠΌΠ΅ \"Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ\" Π½Π° Π΄ΠΈΠ°Π»ΠΎΠ³ с Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹ΠΌ интСрфСйсом." - -msgid "LBL_NewFolder" -msgstr "Новая ΠΏΠ°ΠΏΠΊΠ°" - -msgid "LBL_Rename" -msgstr "ΠŸΠ΅Ρ€Π΅ΠΈΠΌΠ΅Π½ΠΎΠ²Π°Ρ‚ΡŒ" - -msgid "LBL_Delete" -msgstr "Π£Π΄Π°Π»ΠΈΡ‚ΡŒ" - -msgid "MSG_Delete" -msgstr "Π’Ρ‹ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ {0}?" - -msgid "MSG_Delete_Multiple" -msgstr "Π’Ρ‹ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ эти {0} записСй?" - -msgid "MSG_Plur_Delete" -msgstr "Π€Π°ΠΉΠ»Ρ‹ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹." - -msgid "MSG_Sing_Delete" -msgstr "Π€Π°ΠΉΠ» Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠ΄Π°Π»Π΅Π½." - -msgid "MSG_Confirm" -msgstr "ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΏΠΎΠ΄Ρ‚Π²Π΅Ρ€Π΄ΠΈΡ‚Π΅" - -msgid "TLTP_HomeFolder" -msgstr "ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ домашнюю Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ" - -msgid "MSG_SlownessNote" -msgstr "Π”ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΎΠ΅ ΠΎΠΊΠ½ΠΎ ΠΏΠΎΠ΄Ρ‚ΠΎΡ€ΠΌΠ°ΠΆΠΈΠ²Π°Π΅Ρ‚, вСроятно ΠΈΠ·-Π·Π° ошибки JDK. ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ JDK, ΡƒΠ΄Π°Π»ΠΈΡ‚Π΅ zip-Ρ„Π°ΠΉΠ»Ρ‹ с дСсктопа ΠΈΠ»ΠΈ запуститС систСму с ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ -J-Dnb.FileChooser.useShellFolder=false." - -msgid "BTN_NotShow" -msgstr "Π‘ΠΎΠ»ΡŒΡˆΠ΅ Π½Π΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ" diff --git a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/zh_CN.po b/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/zh_CN.po deleted file mode 100644 index f4101436d2..0000000000 --- a/modules/DirectoryChooser/src/main/resources/org/netbeans/swing/dirchooser/zh_CN.po +++ /dev/null @@ -1,57 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:15+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "在η›ε½•ζ¨‘εΌδΈ­ε–δ»£εΈΈθ§„ηš„Swing文仢选择。" - -msgid "OpenIDE-Module-Long-Description" -msgstr "η”¨ε’žεΌΊηš„η”¨ζˆ·η•Œι’εœ¨η›ε½•ζ¨‘εΌδΈ­ε–δ»£εΈΈθ§„ηš„Swing文仢选择。" - -msgid "LBL_NewFolder" -msgstr "ζ–°ε»Ίζ–‡δ»Άε€Ή" - -msgid "LBL_Rename" -msgstr "重命名" - -msgid "LBL_Delete" -msgstr "εˆ ι™€" - -msgid "MSG_Delete" -msgstr "δ½ η‘εšθ¦εˆ ι™€{0}ε—οΌŸ" - -msgid "MSG_Delete_Multiple" -msgstr "δ½ η‘εšθ¦εˆ ι™€θΏ™δΊ›{0}ι‘Ήε—οΌŸ" - -msgid "MSG_Plur_Delete" -msgstr "ζ–‡δ»ΆδΈθƒ½θ’«εˆ ι™€γ€‚" - -msgid "MSG_Sing_Delete" -msgstr "ζ–‡δ»ΆδΈθƒ½θ’«εˆ ι™€γ€‚" - -msgid "MSG_Confirm" -msgstr "θ―·η‘θ€" - -msgid "TLTP_HomeFolder" -msgstr "打开主η›ε½•" - -msgid "MSG_SlownessNote" -msgstr "ε―Ήθ―δΌΌδΉŽζ˜―ηΌ“ζ…’ηš„οΌŒε―θƒ½ζ˜―ε› δΈΊJDKι”™θ――γ€‚θ―·ε°θ―•ε‡ηΊ§ηš„JDKοΌŒδ»Žζ‘Œι’ζ–‡δ»Άε€ΉδΈ­εˆ ι™€zipζ–‡δ»Άζˆ–θΏθ‘Œη³»η»Ÿ - J - Dnb.FileChooser.useShellFolder =false性能。" - -msgid "BTN_NotShow" -msgstr "δΈε†ζ˜Ύη€Ί" diff --git a/modules/DynamicAPI/pom.xml b/modules/DynamicAPI/pom.xml deleted file mode 100644 index 50d9e55fff..0000000000 --- a/modules/DynamicAPI/pom.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - 4.0.0 - - gephi-parent - org.gephi - 0.9-SNAPSHOT - ../.. - - - org.gephi - dynamic-api - 0.9-SNAPSHOT - nbm - - DynamicAPI - - - - ${project.groupId} - project-api - - - ${project.groupId} - graph-api - - - org.netbeans.api - org-openide-util - - - - - - - org.codehaus.mojo - nbm-maven-plugin - - - org.gephi.dynamic - org.gephi.dynamic.api - - - - - - diff --git a/modules/DynamicAPI/src/main/java/org/gephi/dynamic/DynamicUtilities.java b/modules/DynamicAPI/src/main/java/org/gephi/dynamic/DynamicUtilities.java deleted file mode 100644 index f95bd59ff7..0000000000 --- a/modules/DynamicAPI/src/main/java/org/gephi/dynamic/DynamicUtilities.java +++ /dev/null @@ -1,757 +0,0 @@ -/* - * Copyright 2008-2010 Gephi - * Authors : Cezary Bartosiak - * Website : http://www.gephi.org - * - * This file is part of Gephi. - * - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.dynamic; - -/** - * Contains only static, and toolkit functions, like type conversion for the - * needs of dynamic stuff. - * - * @author Cezary Bartosiak - */ -public final class DynamicUtilities { -// private static DatatypeFactory dateFactory; -// -// static { -// try { -// dateFactory = DatatypeFactory.newInstance(); -// } catch (DatatypeConfigurationException ex) { -// } -// } -// -// /** -// * Used for import (parses XML date strings). -// * -// * @param str a string to parse from -// * -// * @return date as a double. -// * -// * @throws IllegalArgumentException if {@code str} is not a valid -// * {@code XMLGregorianCalendar}. -// * @throws NullPointerException if {@code str} is null. -// */ -// public static double getDoubleFromXMLDateString(String str) { -// try { -// return dateFactory.newXMLGregorianCalendar(str.length() > 10 ? str.substring(0, 10) : str). -// toGregorianCalendar().getTimeInMillis(); -// } catch (IllegalArgumentException ex) { -// //Try simple format -// SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); -// try { -// Date date = dateFormat.parse(str.length() > 10 ? str.substring(0, 10) : str); -// return date.getTime(); -// } catch (ParseException ex1) { -// Exceptions.printStackTrace(ex1); -// return 0.0; -// } -// } -// } -// -// /** -// * Used for import (parses XML date strings). -// * -// * @param str a string to parse from -// * -// * @return date as a double. -// * -// * @throws IllegalArgumentException if {@code str} is not a valid -// * {@code XMLGregorianCalendar}. -// * @throws NullPointerException if {@code str} is null. -// */ -// public static double getDoubleFromXMLDateTimeString(String str) { -// try { -// return dateFactory.newXMLGregorianCalendar(str.length() > 23 ? str.substring(0, 23) : str). -// toGregorianCalendar().getTimeInMillis(); -// } catch (IllegalArgumentException ex) { -// //Try simple format -// SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); -// try { -// Date date = dateFormat.parse(str); -// return date.getTime(); -// } catch (ParseException ex1) { -// Exceptions.printStackTrace(ex1); -// return 0.0; -// } -// } -// } -// -// /** -// * Used for import (parses XML date strings). -// * -// * @param str a string to parse from -// * -// * @return date as a double. -// * -// * @throws IllegalArgumentException if {@code str} is not a valid -// * {@code XMLGregorianCalendar}. -// * @throws NullPointerException if {@code str} is null. -// */ -// public static double getDoubleFromDate(Date date) { -// return date.getTime(); -// } -// -// /** -// * Used for get a date from the low-level double -// * -// * @param d a double to convert from -// * -// * @return an date instance -// * -// * @throws IllegalArgumentException if {@code d} is infinite. -// */ -// public static Date getDateFromDouble(double d) { -// if (d == Double.NEGATIVE_INFINITY || d == Double.POSITIVE_INFINITY) { -// throw new IllegalArgumentException("date can' be infinite"); -// } -// GregorianCalendar gc = new GregorianCalendar(); -// gc.setTimeInMillis((long) d); -// return dateFactory.newXMLGregorianCalendar(gc).toGregorianCalendar().getTime(); -// } -// -// /** -// * Used for export (writes XML date strings). -// * -// * @param d a double to convert from -// * -// * @return an XML date string. -// * -// * @throws IllegalArgumentException if {@code d} is infinite. -// */ -// public static String getXMLDateStringFromDouble(double d) { -// if (d == Double.NEGATIVE_INFINITY) { -// return "-Infinity"; -// } else if (d == Double.POSITIVE_INFINITY) { -// return "Infinity"; -// } -// GregorianCalendar gc = new GregorianCalendar(); -// gc.setTimeInMillis((long) d); -// return dateFactory.newXMLGregorianCalendar(gc).toXMLFormat().substring(0, 23); -// } -// -// /** -// * Returns a new {@code DynamicType} instance that contains a given -// * {@code Interval} in. -// * -// * @param in interval to add (could be null) -// * -// * @return a new {@code DynamicType} instance that contains a given -// * {@code Interval} in. -// */ -// public static DynamicType createDynamicObject(AttributeType type, Interval in) { -// return createDynamicObject(type, null, in); -// } -// -// /** -// * Returns a new {@code DynamicType} instance with intervals given by -// * {@code List} in. -// * -// * @param in intervals to add (could be null) -// * -// * @return a new {@code DynamicType} instance with intervals given by -// * {@code List} in. -// */ -// public static DynamicType createDynamicObject(AttributeType type, List in) { -// return createDynamicObject(type, null, in); -// } -// -// /** -// * Returns a deep copy of {@code source}. -// * -// * @param source an object to copy from (could be null, then completely new -// * instance is created) -// * -// * @return a deep copy of {@code source}. -// */ -// public static DynamicType createDynamicObject(AttributeType type, DynamicType source) { -// return createDynamicObject(type, source, (Interval) null, (Interval) null); -// } -// -// /** -// * Returns a deep copy of {@code source} that contains a given -// * {@code Interval} in. -// * -// * @param source an object to copy from (could be null, then completely new -// * instance is created) -// * @param in interval to add (could be null) -// * -// * @return a deep copy of {@code source} that contains a given -// * {@code Interval} in. -// */ -// public static DynamicType createDynamicObject(AttributeType type, DynamicType source, Interval in) { -// return createDynamicObject(type, source, in, null); -// } -// -// /** -// * Returns a deep copy of {@code source} that contains a given -// * {@code Interval} in. Before add it removes from the newly created object -// * all intervals that overlap with a given {@code Interval} out. -// * -// * @param source an object to copy from (could be null, then completely new -// * instance is created) -// * @param in interval to add (could be null) -// * @param out interval to remove (could be null) -// * -// * @return a deep copy of {@code source} that contains a given -// * {@code Interval} in. Before add it removes from the newly created object -// * all intervals that overlap with a given {@code Interval} out. -// */ -// public static DynamicType createDynamicObject(AttributeType type, DynamicType source, Interval in, Interval out) { -// ArrayList lin = null; -// ArrayList lout = null; -// -// if (in != null) { -// lin = new ArrayList(); -// lin.add(in); -// } -// if (out != null) { -// lout = new ArrayList(); -// lout.add(out); -// } -// -// return createDynamicObject(type, source, lin, lout); -// } -// -// /** -// * Returns a deep copy of {@code source} with additional intervals given by -// * {@code List} in. -// * -// * @param source an object to copy from (could be null, then completely new -// * instance is created) -// * @param in intervals to add (could be null) -// * -// * @return a deep copy of {@code source} with additional intervals given by -// * {@code List} in. -// */ -// public static DynamicType createDynamicObject(AttributeType type, DynamicType source, List in) { -// return createDynamicObject(type, source, in, null); -// } -// -// /** -// * Returns a deep copy of {@code source} with additional intervals given by -// * {@code List} in. Before add it removes from the newly created -// * object all intervals that overlap with intervals given by -// * {@code List} out.

    It can return {@code null} if type is not -// * dynamic. -// * -// * @param source an object to copy from (could be null, then completely new -// * instance is created) -// * @param in intervals to add (could be null) -// * @param out intervals to remove (could be null) -// * -// * @return a deep copy of {@code source} with additional intervals given by -// * {@code List} in. Before add it removes from the newly created -// * object all intervals that overlap with intervals given by -// * {@code List} out. It can return {@code null} if type is not -// * dynamic. -// */ -// public static DynamicType createDynamicObject(AttributeType type, DynamicType source, List in, -// List out) { -// if (!type.isDynamicType()) { -// return null; -// } -// -// switch (type) { -// case DYNAMIC_BYTE: { -// ArrayList> lin = null; -// if (in != null) { -// lin = new ArrayList>(); -// for (Interval interval : in) { -// lin.add(new Interval(interval.getLow(), interval.getHigh(), -// interval.isLowExcluded(), interval.isHighExcluded(), (Byte) interval.getValue())); -// } -// } -// ArrayList> lout = null; -// if (out != null) { -// lout = new ArrayList>(); -// for (Interval interval : out) { -// lout.add(new Interval(interval.getLow(), interval.getHigh(), -// interval.isLowExcluded(), interval.isHighExcluded(), (Byte) interval.getValue())); -// } -// } -// return new DynamicByte((DynamicByte) source, lin, lout); -// } -// case DYNAMIC_SHORT: { -// ArrayList> lin = null; -// if (in != null) { -// lin = new ArrayList>(); -// for (Interval interval : in) { -// lin.add(new Interval(interval.getLow(), interval.getHigh(), -// interval.isLowExcluded(), interval.isHighExcluded(), (Short) interval.getValue())); -// } -// } -// ArrayList> lout = null; -// if (out != null) { -// lout = new ArrayList>(); -// for (Interval interval : out) { -// lout.add(new Interval(interval.getLow(), interval.getHigh(), -// interval.isLowExcluded(), interval.isHighExcluded(), (Short) interval.getValue())); -// } -// } -// return new DynamicShort((DynamicShort) source, lin, lout); -// } -// case DYNAMIC_INT: { -// ArrayList> lin = null; -// if (in != null) { -// lin = new ArrayList>(); -// for (Interval interval : in) { -// lin.add(new Interval(interval.getLow(), interval.getHigh(), -// interval.isLowExcluded(), interval.isHighExcluded(), (Integer) interval.getValue())); -// } -// } -// ArrayList> lout = null; -// if (out != null) { -// lout = new ArrayList>(); -// for (Interval interval : out) { -// lout.add(new Interval(interval.getLow(), interval.getHigh(), -// interval.isLowExcluded(), interval.isHighExcluded(), (Integer) interval.getValue())); -// } -// } -// return new DynamicInteger((DynamicInteger) source, lin, lout); -// } -// case DYNAMIC_LONG: { -// ArrayList> lin = null; -// if (in != null) { -// lin = new ArrayList>(); -// for (Interval interval : in) { -// lin.add(new Interval(interval.getLow(), interval.getHigh(), -// interval.isLowExcluded(), interval.isHighExcluded(), (Long) interval.getValue())); -// } -// } -// ArrayList> lout = null; -// if (out != null) { -// lout = new ArrayList>(); -// for (Interval interval : out) { -// lout.add(new Interval(interval.getLow(), interval.getHigh(), -// interval.isLowExcluded(), interval.isHighExcluded(), (Long) interval.getValue())); -// } -// } -// return new DynamicLong((DynamicLong) source, lin, lout); -// } -// case DYNAMIC_FLOAT: { -// ArrayList> lin = null; -// if (in != null) { -// lin = new ArrayList>(); -// for (Interval interval : in) { -// lin.add(new Interval(interval.getLow(), interval.getHigh(), -// interval.isLowExcluded(), interval.isHighExcluded(), (Float) interval.getValue())); -// } -// } -// ArrayList> lout = null; -// if (out != null) { -// lout = new ArrayList>(); -// for (Interval interval : out) { -// lout.add(new Interval(interval.getLow(), interval.getHigh(), -// interval.isLowExcluded(), interval.isHighExcluded(), (Float) interval.getValue())); -// } -// } -// return new DynamicFloat((DynamicFloat) source, lin, lout); -// } -// case DYNAMIC_DOUBLE: { -// ArrayList> lin = null; -// if (in != null) { -// lin = new ArrayList>(); -// for (Interval interval : in) { -// lin.add(new Interval(interval.getLow(), interval.getHigh(), -// interval.isLowExcluded(), interval.isHighExcluded(), (Double) interval.getValue())); -// } -// } -// ArrayList> lout = null; -// if (out != null) { -// lout = new ArrayList>(); -// for (Interval interval : out) { -// lout.add(new Interval(interval.getLow(), interval.getHigh(), -// interval.isLowExcluded(), interval.isHighExcluded(), (Double) interval.getValue())); -// } -// } -// return new DynamicDouble((DynamicDouble) source, lin, lout); -// } -// case DYNAMIC_BOOLEAN: { -// ArrayList> lin = null; -// if (in != null) { -// lin = new ArrayList>(); -// for (Interval interval : in) { -// lin.add(new Interval(interval.getLow(), interval.getHigh(), -// interval.isLowExcluded(), interval.isHighExcluded(), (Boolean) interval.getValue())); -// } -// } -// ArrayList> lout = null; -// if (out != null) { -// lout = new ArrayList>(); -// for (Interval interval : out) { -// lout.add(new Interval(interval.getLow(), interval.getHigh(), -// interval.isLowExcluded(), interval.isHighExcluded(), (Boolean) interval.getValue())); -// } -// } -// return new DynamicBoolean((DynamicBoolean) source, lin, lout); -// } -// case DYNAMIC_CHAR: { -// ArrayList> lin = null; -// if (in != null) { -// lin = new ArrayList>(); -// for (Interval interval : in) { -// lin.add(new Interval(interval.getLow(), interval.getHigh(), -// interval.isLowExcluded(), interval.isHighExcluded(), (Character) interval.getValue())); -// } -// } -// ArrayList> lout = null; -// if (out != null) { -// lout = new ArrayList>(); -// for (Interval interval : out) { -// lout.add(new Interval(interval.getLow(), interval.getHigh(), -// interval.isLowExcluded(), interval.isHighExcluded(), (Character) interval.getValue())); -// } -// } -// return new DynamicCharacter((DynamicCharacter) source, lin, lout); -// } -// case DYNAMIC_STRING: { -// ArrayList> lin = null; -// if (in != null) { -// lin = new ArrayList>(); -// for (Interval interval : in) { -// lin.add(new Interval(interval.getLow(), interval.getHigh(), -// interval.isLowExcluded(), interval.isHighExcluded(), (String) interval.getValue())); -// } -// } -// ArrayList> lout = null; -// if (out != null) { -// lout = new ArrayList>(); -// for (Interval interval : out) { -// lout.add(new Interval(interval.getLow(), interval.getHigh(), -// interval.isLowExcluded(), interval.isHighExcluded(), (String) interval.getValue())); -// } -// } -// return new DynamicString((DynamicString) source, lin, lout); -// } -// case DYNAMIC_BIGINTEGER: { -// ArrayList> lin = null; -// if (in != null) { -// lin = new ArrayList>(); -// for (Interval interval : in) { -// lin.add(new Interval(interval.getLow(), interval.getHigh(), -// interval.isLowExcluded(), interval.isHighExcluded(), (BigInteger) interval.getValue())); -// } -// } -// ArrayList> lout = null; -// if (out != null) { -// lout = new ArrayList>(); -// for (Interval interval : out) { -// lout.add(new Interval(interval.getLow(), interval.getHigh(), -// interval.isLowExcluded(), interval.isHighExcluded(), (BigInteger) interval.getValue())); -// } -// } -// return new DynamicBigInteger((DynamicBigInteger) source, lin, lout); -// } -// case DYNAMIC_BIGDECIMAL: { -// ArrayList> lin = null; -// if (in != null) { -// lin = new ArrayList>(); -// for (Interval interval : in) { -// lin.add(new Interval(interval.getLow(), interval.getHigh(), -// interval.isLowExcluded(), interval.isHighExcluded(), (BigDecimal) interval.getValue())); -// } -// } -// ArrayList> lout = null; -// if (out != null) { -// lout = new ArrayList>(); -// for (Interval interval : out) { -// lout.add(new Interval(interval.getLow(), interval.getHigh(), -// interval.isLowExcluded(), interval.isHighExcluded(), (BigDecimal) interval.getValue())); -// } -// } -// return new DynamicBigDecimal((DynamicBigDecimal) source, lin, lout); -// } -// case TIME_INTERVAL: { -// ArrayList lin = null; -// if (in != null) { -// lin = new ArrayList(); -// for (Interval interval : in) { -// lin.add(new Interval(interval.getLow(), interval.getHigh(), -// interval.isLowExcluded(), interval.isHighExcluded())); -// } -// } -// ArrayList lout = null; -// if (out != null) { -// lout = new ArrayList(); -// for (Interval interval : out) { -// lout.add(new Interval(interval.getLow(), interval.getHigh(), -// interval.isLowExcluded(), interval.isHighExcluded())); -// } -// } -// return new TimeInterval((TimeInterval) source, lin, lout); -// } -// default: -// return null; -// } -// } -// -// /** -// * It checks intervals of the {@code source} and make it fit to the given -// * interval, possibly removing intervals out of the window and changing low -// * or high of intervals to fit. -// * -// * @param source a {@code DynamicType} to be performed -// * @param interval a given interval -// * -// * @return a fitted {@code DynamicType} instance. -// * -// * @throws NullPointerException if {@code source} is null. -// */ -// public static DynamicType fitToInterval(DynamicType source, Interval interval) { -// if (source == null) { -// throw new NullPointerException("The source cannot be null."); -// } -// -// List sIntervals = source.getIntervals(interval); -// List tIntervals = new ArrayList(); -// for (Interval i : sIntervals) { -// double iLow = i.getLow(); -// double iHigh = i.getHigh(); -// boolean ilopen = i.isLowExcluded(); -// boolean iropen = i.isHighExcluded(); -// if (i.getLow() < interval.getLow()) { -// iLow = interval.getLow(); -// } -// if (i.getHigh() > interval.getHigh()) { -// iHigh = interval.getHigh(); -// } -// if (interval.isLowExcluded()) { -// ilopen = true; -// } -// if (interval.isHighExcluded()) { -// iropen = true; -// } -// tIntervals.add(new Interval(iLow, iHigh, ilopen, iropen, i.getValue())); -// } -// -// return createDynamicObject(AttributeType.parse(source), tIntervals); -// } -// -// /** -// * It checks intervals of the {@code source} and make it fit to the given -// * interval [{@code low}, {@code high}], possibly removing intervals out of -// * the window and changing low or high of intervals to fit. -// * -// * @param source a {@code DynamicType} to be performed -// * @param low the left endpoint -// * @param high the right endpoint -// * -// * @return a fitted {@code DynamicType} instance. -// * -// * @throws NullPointerException if {@code source} is null. -// * @throws IllegalArgumentException if {@code low} > {@code high}. -// */ -// public static DynamicType fitToInterval(DynamicType source, double low, double high) { -// return fitToInterval(source, new Interval(low, high)); -// } -// -// /** -// * Returns the visible time interval of -// * dynamicModel if it is not [-inf, +inf]. Returns -// * null in other cases. -// * -// * @param dynamicModel the dynamic model -// * -// * @return the valid visible interval, or null. -// */ -// public static TimeInterval getVisibleInterval(DynamicModel dynamicModel) { -// if (dynamicModel != null) { -// TimeInterval ti = dynamicModel.getVisibleInterval(); -// if (ti != null && !(Double.isInfinite(ti.getLow()) && Double.isInfinite(ti.getHigh()))) { -// return ti; -// } -// } -// return null; -// } -// -// public static Object getDynamicValue(Object value, double low, double high) { -// if (value != null && value instanceof DynamicType) { -// DynamicType dynamicType = (DynamicType) value; -// Estimator estimator = Estimator.FIRST; -// if (Number.class.isAssignableFrom(dynamicType.getUnderlyingType())) { -// estimator = Estimator.AVERAGE; -// } -// return dynamicType.getValue(low, high, estimator); -// } -// return value; -// } -// -// public static DynamicType removeOverlapping(DynamicType dynamicType) { -// Comparator comparator = new Comparator() { -// @Override -// public int compare(Interval o1, Interval o2) { -// if (o1.getLow() < o2.getLow()) { -// return -1; -// } -// if (o2.getLow() < o1.getLow()) { -// return 1; -// } -// if (o1.getHigh() < o2.getHigh()) { -// return -1; -// } -// if (o2.getHigh() < o1.getHigh()) { -// return 1; -// } -// return 0; -// } -// }; -// -// List intervals = dynamicType.getIntervals(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); -// Collections.sort(intervals, comparator); -// boolean overlap = true; -// while (overlap) { -// overlap = false; -// for (int i = 0; i < intervals.size() - 1; i++) { -// Interval interval = intervals.get(i); -// Interval next = intervals.get(i + 1); -// if (interval.getLow() == next.getLow()) { -// intervals.set(i + 1, createInterval(dynamicType, interval.getHigh(), next.getHigh(), true, -// next.isHighExcluded(), next.getValue())); -// overlap = true; -// break; -// } -// if (interval.getHigh() == next.getHigh()) { -// intervals.set(i, createInterval(dynamicType, interval.getLow(), next.getLow(), -// interval.isLowExcluded(), true, interval.getValue())); -// overlap = true; -// break; -// } -// if (next.getLow() < interval.getLow() && next.getHigh() > interval.getHigh()) { -// intervals.set(i + 1, createInterval(dynamicType, interval.getHigh(), next.getHigh(), true, -// next.isHighExcluded(), interval.getValue())); -// overlap = true; -// break; -// } -// if ((next.getLow() < interval.getHigh() || (next.getLow() == interval.getHigh() -// && !interval.isHighExcluded())) && next.getHigh() < interval.getHigh()) { -// intervals.set(i, createInterval(dynamicType, interval.getLow(), next.getLow(), -// interval.isLowExcluded(), true, interval.getValue())); -// intervals.add(i + 2, createInterval(dynamicType, next.getHigh(), interval.getHigh(), true, -// interval.isHighExcluded(), interval.getValue())); -// overlap = true; -// break; -// } -// if (next.getLow() == interval.getHigh() && !interval.isHighExcluded() && !next.isLowExcluded()) { -// intervals.set(i, createInterval(dynamicType, interval.getLow(), interval.getHigh(), -// interval.isLowExcluded(), true, interval.getValue())); -// overlap = true; -// break; -// } -// if (next.getLow() < interval.getHigh()) { -// intervals.set(i, createInterval(dynamicType, interval.getLow(), next.getHigh(), -// interval.isLowExcluded(), true, interval.getValue())); -// overlap = true; -// break; -// } -// } -// } -// return createDynamicObject(AttributeType.parse(dynamicType), intervals); -// } -// -// public static Interval createInterval(DynamicType dynamicType, double low, double high, boolean lopen, -// boolean ropen, Object value) { -// if (dynamicType instanceof TimeInterval) { -// return new Interval(low, high, lopen, ropen, new Double[]{low, high}); -// } -// if (dynamicType instanceof DynamicBigDecimal) { -// return new Interval(low, high, lopen, ropen, (BigDecimal) value); -// } -// if (dynamicType instanceof DynamicBigInteger) { -// return new Interval(low, high, lopen, ropen, (BigInteger) value); -// } -// if (dynamicType instanceof DynamicBoolean) { -// return new Interval(low, high, lopen, ropen, (Boolean) value); -// } -// if (dynamicType instanceof DynamicByte) { -// return new Interval(low, high, lopen, ropen, (Byte) value); -// } -// if (dynamicType instanceof DynamicCharacter) { -// return new Interval(low, high, lopen, ropen, (Character) value); -// } -// if (dynamicType instanceof DynamicDouble) { -// return new Interval(low, high, lopen, ropen, (Double) value); -// } -// if (dynamicType instanceof DynamicFloat) { -// return new Interval(low, high, lopen, ropen, (Float) value); -// } -// if (dynamicType instanceof DynamicInteger) { -// return new Interval(low, high, lopen, ropen, (Integer) value); -// } -// if (dynamicType instanceof DynamicLong) { -// return new Interval(low, high, lopen, ropen, (Long) value); -// } -// if (dynamicType instanceof DynamicShort) { -// return new Interval(low, high, lopen, ropen, (Short) value); -// } -// if (dynamicType instanceof DynamicString) { -// return new Interval(low, high, lopen, ropen, (String) value); -// } -// return null; -// } -// -// public static int getNodeCount(Graph graph, Interval timeInterval) { -// int nodeCount = 0; -// for (Node n : graph.getNodes()) { -// TimeInterval tnode = (TimeInterval) n.getAttributes().getValue(DynamicModel.TIMEINTERVAL_COLUMN); -// if (tnode.isInRange(timeInterval.getLow(), timeInterval.getHigh())) { -// nodeCount++; -// } -// } -// return nodeCount; -// } -// -// public static int getEdgeCount(Graph graph, Interval timeInterval) { -// int edgeCount = 0; -// for (Edge e : ((HierarchicalGraph) graph).getEdgesAndMetaEdges()) { -// TimeInterval tedge = (TimeInterval) e.getAttributes().getValue(DynamicModel.TIMEINTERVAL_COLUMN); -// if (tedge.isInRange(timeInterval.getLow(), timeInterval.getHigh())) { -// -// TimeInterval tsource = (TimeInterval) e.getSource().getAttributes().getValue(DynamicModel.TIMEINTERVAL_COLUMN); -// TimeInterval tdest = (TimeInterval) e.getTarget().getAttributes().getValue(DynamicModel.TIMEINTERVAL_COLUMN); -// if (tsource.isInRange(timeInterval.getLow(), timeInterval.getHigh()) -// && tdest.isInRange(timeInterval.getLow(), timeInterval.getHigh())) { -// edgeCount++; -// } -// -// } -// } -// return edgeCount; -// } -} diff --git a/modules/DynamicAPI/src/main/java/org/gephi/dynamic/api/DynamicController.java b/modules/DynamicAPI/src/main/java/org/gephi/dynamic/api/DynamicController.java deleted file mode 100644 index b35ec92c36..0000000000 --- a/modules/DynamicAPI/src/main/java/org/gephi/dynamic/api/DynamicController.java +++ /dev/null @@ -1,163 +0,0 @@ -/* - * Copyright 2008-2010 Gephi - * Authors : Cezary Bartosiak - * Mathieu Bastian - * Website : http://www.gephi.org - * - * This file is part of Gephi. - * - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.dynamic.api; - -import org.gephi.project.api.Workspace; - -/** - * This controller maintains the dynamic models, one per {@code Workspace}.

    - * It is a service and can therefore be found in Lookup: - *

    - * DynamicController dc = Lookup.getDefault().lookup(DynamicController.class);
    - * 
    - * - * @author Cezary Bartosiak - * @author Mathieu Bastian - */ -public interface DynamicController { - - /** - * Returns the dynamic model for the current workspace, or {@code null} if - * the project is empty. - * - * @return the current dynamic model. - */ - public DynamicModel getModel(); - - /** - * Returns the dynamic model for the given {@code workspace}. - * - * @param workspace the workspace that dynamic model is to be returned - * - * @return the {@code workspace}'s dynamic model. - */ - public DynamicModel getModel(Workspace workspace); - - /** - * Sets the time interval wrapped by the {@code DynamicGraph} of the current - * workspace. - * - * @param interval an object to get endpoints from - */ -// public void setVisibleInterval(TimeInterval interval); - /** - * Sets the time interval wrapped by the {@code DynamicGraph} of the current - * workspace. - * - * @param low the left endpoint - * @param high the right endpoint - */ - public void setVisibleInterval(double low, double high); - - /** - * Sets the current time format. This should be done when the model is - * inited. - * - * @param timeFormat the time format that is to be set as current - */ - public void setTimeFormat(DynamicModel.TimeFormat timeFormat); - - /** - * Sets the current time format. This is done on the model provided by the - * workspace. - * - * @param timeFormat the time format that is to be set as current - * @param workspace the workspace to get the model - */ - public void setTimeFormat(DynamicModel.TimeFormat timeFormat, Workspace workspace); - - /** - * Sets the current - * ESTIMATOR used to get values from - * {@link org.gephi.data.attributes.type.DynamicType}. Default is - * Estimator.FIRST. - * - * @param estimator the estimator that is to be set - */ -// public void setEstimator(Estimator estimator); - /** - * Sets the current - * ESTIMATOR used to get values from - * {@link org.gephi.data.attributes.type.DynamicType}. Default is - * Estimator.FIRST. - * - * @param estimator the estimator that is to be set - * @param workspace the workspace to get the model - */ -// public void setEstimator(Estimator estimator, Workspace workspace); - /** - * Sets the current number - * ESTIMATOR used to get values from - * {@link org.gephi.data.attributes.type.DynamicType}. Default is - * Estimator.AVERAGE. - * - * @param estimator the number estimator that is to be set - */ -// public void setNumberEstimator(Estimator estimator); - /** - * Sets the current number - * ESTIMATOR used to get values from - * {@link org.gephi.data.attributes.type.DynamicType}. Default is - * Estimator.AVERAGE. - * - * @param estimator the number estimator that is to be set - * @param workspace the workspace to get the model - */ -// public void setNumberEstimator(Estimator estimator, Workspace workspace); - /** - * Adds - * listener to the listeners of this model. It receives events - * when model is changed. - * - * @param listener the listener that is to be added - */ - public void addModelListener(DynamicModelListener listener); - - /** - * Removes - * listener to the listeners of this model. - * - * @param listener the listener that is to be removed - */ - public void removeModelListener(DynamicModelListener listener); -} diff --git a/modules/DynamicAPI/src/main/java/org/gephi/dynamic/api/DynamicGraph.java b/modules/DynamicAPI/src/main/java/org/gephi/dynamic/api/DynamicGraph.java deleted file mode 100644 index d85a890c10..0000000000 --- a/modules/DynamicAPI/src/main/java/org/gephi/dynamic/api/DynamicGraph.java +++ /dev/null @@ -1,488 +0,0 @@ -/* - * Copyright 2008-2010 Gephi - * Authors : Cezary Bartosiak - * Website : http://www.gephi.org - * - * This file is part of Gephi. - * - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.dynamic.api; - -/** - * The wrapper for graph and time interval. - * - * @author Cezary Bartosiak - */ -public interface DynamicGraph { -// /** -// * Returns values of attributes of the given {@code Node} in the given -// * {@code point} of time using {@code Estimator.FIRST} for each dynamic -// * attribute. -// * -// * @param node the given {@code Node} -// * @param point the given point of time -// * -// * @return values of attributes of the given {@code Node} in the given -// * {@code point} of time using {@code Estimator.FIRST} for each dynamic -// * attribute. -// * -// * @throws IllegalArgumentException if {@code point} is out of range wrapped -// * by this {@code DynamicGraph}. -// */ -// public Object[] getAttributesValues(Node node, double point); -// -// /** -// * Returns values of attributes of the given {@code Node} in the given -// * {@code point} of time using given {@code Estimators}. The length of the -// * {@code estimators} table must be the same as the count of attributes. -// * Otherwise an {@code IllegalArgumentException} will be thrown. -// * -// *

    Note that it doesn't matter what estimators you give for 'static' -// * attributes. -// * -// * @param node the given {@code Node} -// * @param point the given point of time -// * @param estimators determine how to estimate individual values -// * -// * @return values of attributes of the given {@code Node} in the given -// * {@code point} of time using given {@code Estimators}. -// * -// * @throws IllegalArgumentException if {@code point} is out of range wrapped -// * by this {@code DynamicGraph}. -// * @throws IllegalArgumentException if the length of the {@code estimators} -// * table differ from the count of attributes. -// */ -// public Object[] getAttributesValues(Node node, double point, Estimator[] estimators); -// -// /** -// * Returns values of attributes of the given {@code Node} in the given time -// * interval of time using {@code Estimator.FIRST} for each dynamic -// * attribute. Both bounds are included by default. -// * -// * @param node the given {@code Node} -// * @param low the left endpoint of the given time interval -// * @param high the right endpoint of the given time interval -// * -// * @return values of attributes of the given {@code Node} in the given time -// * interval of time using {@code Estimator.FIRST} for each dynamic -// * attribute. -// * -// * @throws IllegalArgumentException if {@code low} > {@code high} or the -// * time interval [{@code low}, {@code high}] is out of range wrapped by this -// * DynamicGraph. -// */ -// public Object[] getAttributesValues(Node node, double low, double high); -// -// /** -// * Returns values of attributes of the given {@code Node} in the given time -// * interval of time using {@code Estimator.FIRST} for each dynamic -// * attribute. -// * -// * @param node the given {@code Node} -// * @param interval the given time interval -// * -// * @return values of attributes of the given {@code Node} in the given time -// * interval of time using {@code Estimator.FIRST} for each dynamic -// * attribute. -// * -// * @throws IllegalArgumentException if the given time interval is out of -// * range wrapped by this DynamicGraph. -// */ -// public Object[] getAttributesValues(Node node, Interval interval); -// -// /** -// * Returns values of attributes of the given {@code Node} in the given time -// * interval of time using given {@code Estimators}. The length of the -// * {@code estimators} table must be the same as the count of attributes. -// * Otherwise an {@code IllegalArgumentException} will be thrown. Both bounds -// * are included by default. -// * -// *

    Note that it doesn't matter what estimators you give for 'static' -// * attributes. -// * -// * @param node the given {@code Node} -// * @param low the left endpoint of the given time interval -// * @param high the right endpoint of the given time interval -// * @param estimators determine how to estimate individual values -// * -// * @return values of attributes of the given {@code Node} in the given time -// * interval of time using given {@code Estimators}. -// * -// * @throws IllegalArgumentException if {@code low} > {@code high} or the -// * time interval [{@code low}, {@code high}] is out of range wrapped by this -// * DynamicGraph. -// * @throws IllegalArgumentException if the length of the {@code estimators} -// * table differ from the count of attributes. -// */ -// public Object[] getAttributesValues(Node node, double low, double high, Estimator[] estimators); -// -// /** -// * Returns values of attributes of the given {@code Node} in the given time -// * interval of time using given {@code Estimators}. The length of the -// * {@code estimators} table must be the same as the count of attributes. -// * Otherwise an {@code IllegalArgumentException} will be thrown. -// * -// *

    Note that it doesn't matter what estimators you give for 'static' -// * attributes. -// * -// * @param node the given {@code Node} -// * @param interval the given time interval -// * @param estimators determine how to estimate individual values -// * -// * @return values of attributes of the given {@code Node} in the given time -// * interval of time using given {@code Estimators}. -// * -// * @throws IllegalArgumentException if the given time interval is out of -// * range wrapped by this DynamicGraph. -// * @throws IllegalArgumentException if the length of the {@code estimators} -// * table differ from the count of attributes. -// */ -// public Object[] getAttributesValues(Node node, Interval interval, Estimator[] estimators); -// -// /** -// * Returns values of attributes of the given {@code Edge} in the given -// * {@code point} of time using {@code Estimator.FIRST} for each dynamic -// * attribute. -// * -// * @param edge the given {@code Edge} -// * @param point the given point of time -// * -// * @return values of attributes of the given {@code Edge} in the given -// * {@code point} of time using {@code Estimator.FIRST} for each dynamic -// * attribute. -// * -// * @throws IllegalArgumentException if {@code point} is out of range wrapped -// * by this {@code DynamicGraph}. -// */ -// public Object[] getAttributesValues(Edge edge, double point); -// -// /** -// * Returns values of attributes of the given {@code Edge} in the given -// * {@code point} of time using given {@code Estimators}. The length of the -// * {@code estimators} table must be the same as the count of attributes. -// * Otherwise an {@code IllegalArgumentException} will be thrown. -// * -// *

    Note that it doesn't matter what estimators you give for 'static' -// * attributes. -// * -// * @param edge the given {@code Edge} -// * @param point the given point of time -// * @param estimators determine how to estimate individual values -// * -// * @return values of attributes of the given {@code Edge} in the given -// * {@code point} of time using given {@code Estimators}. -// * -// * @throws IllegalArgumentException if {@code point} is out of range wrapped -// * by this {@code DynamicGraph}. -// * @throws IllegalArgumentException if the length of the {@code estimators} -// * table differ from the count of attributes. -// */ -// public Object[] getAttributesValues(Edge edge, double point, Estimator[] estimators); -// -// /** -// * Returns values of attributes of the given {@code Edge} in the given time -// * interval of time using {@code Estimator.FIRST} for each dynamic -// * attribute. Both bounds are included by default. -// * -// * @param edge the given {@code Edge} -// * @param low the left endpoint of the given time interval -// * @param high the right endpoint of the given time interval -// * -// * @return values of attributes of the given {@code Edge} in the given time -// * interval of time using {@code Estimator.FIRST} for each dynamic -// * attribute. -// * -// * @throws IllegalArgumentException if {@code low} > {@code high} or the -// * time interval [{@code low}, {@code high}] is out of range wrapped by this -// * DynamicGraph. -// */ -// public Object[] getAttributesValues(Edge edge, double low, double high); -// -// /** -// * Returns values of attributes of the given {@code Edge} in the given time -// * interval of time using {@code Estimator.FIRST} for each dynamic -// * attribute. -// * -// * @param edge the given {@code Edge} -// * @param interval the given time interval -// * -// * @return values of attributes of the given {@code Edge} in the given time -// * interval of time using {@code Estimator.FIRST} for each dynamic -// * attribute. -// * -// * @throws IllegalArgumentException if the given time interval is out of -// * range wrapped by this DynamicGraph. -// */ -// public Object[] getAttributesValues(Edge edge, Interval interval); -// -// /** -// * Returns values of attributes of the given {@code Edge} in the given time -// * interval of time using given {@code Estimators}. The length of the -// * {@code estimators} table must be the same as the count of attributes. -// * Otherwise an {@code IllegalArgumentException} will be thrown. -// * -// *

    Note that it doesn't matter what estimators you give for 'static' -// * attributes. -// * -// * @param edge the given {@code Edge} -// * @param low the left endpoint of the given time interval -// * @param high the right endpoint of the given time interval -// * @param estimators determine how to estimate individual values -// * -// * @return values of attributes of the given {@code Edge} in the given time -// * interval of time using given {@code Estimators}. -// * -// * @throws IllegalArgumentException if {@code low} > {@code high} or the -// * time interval [{@code low}, {@code high}] is out of range wrapped by this -// * DynamicGraph. -// * @throws IllegalArgumentException if the length of the {@code estimators} -// * table differ from the count of attributes. -// */ -// public Object[] getAttributesValues(Edge edge, double low, double high, Estimator[] estimators); -// -// /** -// * Returns values of attributes of the given {@code Edge} in the given time -// * interval of time using given {@code Estimators}. The length of the -// * {@code estimators} table must be the same as the count of attributes. -// * Otherwise an {@code IllegalArgumentException} will be thrown. -// * -// *

    Note that it doesn't matter what estimators you give for 'static' -// * attributes. -// * -// * @param edge the given {@code Edge} -// * @param interval the given time interval -// * @param estimators determine how to estimate individual values -// * -// * @return values of attributes of the given {@code Edge} in the given time -// * interval of time using given {@code Estimators}. -// * -// * @throws IllegalArgumentException if the given time interval is out of -// * range wrapped by this DynamicGraph. -// * @throws IllegalArgumentException if the length of the {@code estimators} -// * table differ from the count of attributes. -// */ -// public Object[] getAttributesValues(Edge edge, Interval interval, Estimator[] estimators); -// -// /** -// * Returns the left endpoint of the time interval wrapped by this -// * {@code DynamicGraph}. -// * -// * @return the left endpoint of the time interval wrapped by this -// * {@code DynamicGraph}. -// */ -// public double getLow(); -// -// /** -// * Returns the right endpoint of the time interval wrapped by this -// * {@code DynamicGraph}. -// * -// * @return the right endpoint of the time interval wrapped by this -// * {@code DynamicGraph}. -// */ -// public double getHigh(); -// -// /** -// * Returns a "snapshot graph", i.e. a graph for the given point of time. The -// * default estimator is used ({@code Estimator.FIRST}). It means that the -// * first time intervals of nodes/edges are checked for overlapping with the -// * {@code point}. -// * -// * @param point the given point of time -// * -// * @return a "snapshot graph", i.e. a graph for the given point of time. -// * -// * @throws IllegalArgumentException if {@code point} is out of range wrapped -// * by this {@code DynamicGraph}. -// */ -// public Graph getSnapshotGraph(double point); -// -// /** -// * Returns a "snapshot graph", i.e. a graph for the given point of time -// * using the given {@code Estimator}. It means that time intervals of -// * nodes/edges determined by the {@code Estimator} are checked for -// * overlapping with the {@code point}. -// * -// * @param point the given point of time -// * @param estimator determines how to estimate a snapshot -// * -// * @return a "snapshot graph", i.e. a graph for the given point of time. -// * -// * @throws IllegalArgumentException if {@code point} is out of range wrapped -// * by this {@code DynamicGraph}. -// */ -// public Graph getSnapshotGraph(double point, Estimator estimator); -// -// /** -// * Returns a "snapshot graph", i.e. a graph for the given time interval. The -// * default estimator is used ({@code Estimator.FIRST}). It means that the -// * first time intervals of nodes/edges are checked for overlapping with the -// * time interval [{@code low}, {@code high}]. -// * -// * @param low the left endpoint of the given time interval -// * @param high the right endpoint of the given time interval -// * -// * @return a "snapshot graph", i.e. a graph for the given time interval. -// * -// * @throws IllegalArgumentException if {@code low} > {@code high} or the -// * time interval [{@code low}, {@code high}] is out of range wrapped by this -// * DynamicGraph. -// */ -// public Graph getSnapshotGraph(double low, double high); -// -// /** -// * Returns a "snapshot graph", i.e. a graph for the given time interval. The -// * default estimator is used ({@code Estimator.FIRST}). It means that the -// * first time intervals of nodes/edges are checked for overlapping with the -// * given time interval. -// * -// * @param interval the given time interval -// * -// * @return a "snapshot graph", i.e. a graph for the given time interval. -// * -// * @throws IllegalArgumentException if the given time interval is out of -// * range wrapped by this DynamicGraph. -// */ -// public Graph getSnapshotGraph(Interval interval); -// -// /** -// * Returns a "snapshot graph", i.e. a graph for the given time interval -// * using the given {@code Estimator}. It means that time intervals of -// * nodes/edges determined by the {@code Estimator} are checked for -// * overlapping with the time interval [{@code low}, {@code high}]. -// * -// * @param low the left endpoint of the given time interval -// * @param high the right endpoint of the given time interval -// * @param estimator determines how to estimate a snapshot -// * -// * @return a "snapshot graph", i.e. a graph for the given time interval. -// * -// * @throws IllegalArgumentException if {@code low} > {@code high} or the -// * time interval [{@code low}, {@code high}] is out of range wrapped by this -// * DynamicGraph. -// */ -// public Graph getSnapshotGraph(double low, double high, Estimator estimator); -// -// /** -// * Returns a "snapshot graph", i.e. a graph for the given time interval -// * using the given {@code Estimator}. It means that time intervals of -// * nodes/edges determined by the {@code Estimator} are checked for -// * overlapping with the given time interval. -// * -// * @param interval the given time interval -// * @param estimator determines how to estimate a snapshot -// * -// * @return a "snapshot graph", i.e. a graph for the given time interval. -// * -// * @throws IllegalArgumentException if the given time interval is out of -// * range wrapped by this DynamicGraph. -// */ -// public Graph getSnapshotGraph(Interval interval, Estimator estimator); -// -// /** -// * Returns a "strong snapshot graph", i.e. a graph for the given point of -// * time. "Strong" means that if EVERY time interval of considered node/edge -// * overlaps with the {@code point} it is considered as a part of snapshot. -// * -// * @param point the given point of time -// * -// * @return a "snapshot graph", i.e. a graph for the given point of time. -// * -// * @throws IllegalArgumentException if {@code point} is out of range wrapped -// * by this {@code DynamicGraph}. -// */ -// public Graph getStrongSnapshotGraph(double point); -// -// /** -// * Returns a "strong snapshot graph", i.e. a graph for the given time -// * interval. "Strong" means that if EVERY time interval of considered -// * node/edge overlaps with the time interval [{@code low}, {@code high}] it -// * is considered as a part of snapshot. -// * -// * @param low the left endpoint of the given time interval -// * @param high the right endpoint of the given time interval -// * -// * @return a "snapshot graph", i.e. a graph for the given time interval. -// * -// * @throws IllegalArgumentException if {@code low} > {@code high} or the -// * time interval [{@code low}, {@code high}] is out of range wrapped by this -// * DynamicGraph. -// */ -// public Graph getStrongSnapshotGraph(double low, double high); -// -// /** -// * Returns a "strong snapshot graph", i.e. a graph for the given time -// * interval. "Strong" means that if EVERY time interval of considered -// * node/edge overlaps with the given time interval it is considered as a -// * part of snapshot. -// * -// * @param interval the given time interval -// * -// * @return a "snapshot graph", i.e. a graph for the given time interval. -// * -// * @throws IllegalArgumentException if the given time interval is out of -// * range wrapped by this DynamicGraph. -// */ -// public Graph getStrongSnapshotGraph(Interval interval); -// -// /** -// * Returns the wrapped graph. -// * -// * @return the wrapped graph. -// */ -// public Graph getUnderlyingGraph(); -// -// /** -// * Returns the time interval wrapped by this {@code DynamicGraph}. -// * -// * @return the time interval wrapped by this {@code DynamicGraph}. -// */ -// public TimeInterval getInterval(); -// -// /** -// * Sets the time interval wrapped by this {@code DynamicGraph}. -// * -// * @param interval an object to get endpoints from -// */ -// public void setInterval(TimeInterval interval); -// -// /** -// * Sets the time interval wrapped by this {@code DynamicGraph}. -// * -// * @param low the left endpoint -// * @param high the right endpoint -// */ -// public void setInterval(double low, double high); -} diff --git a/modules/DynamicAPI/src/main/java/org/gephi/dynamic/api/DynamicModel.java b/modules/DynamicAPI/src/main/java/org/gephi/dynamic/api/DynamicModel.java deleted file mode 100644 index 6809eedd83..0000000000 --- a/modules/DynamicAPI/src/main/java/org/gephi/dynamic/api/DynamicModel.java +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Copyright 2008-2010 Gephi - * Authors : Cezary Bartosiak - * Mathieu Bastian - * Website : http://www.gephi.org - * - * This file is part of Gephi. - * - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.dynamic.api; - -import org.gephi.graph.api.Graph; - -/** - * Model that maintains the dynamic states of the application, which include the - * minimum and the maximum bounds, as well as the current visible interval. - *

    - * The min and the max are used to know what are the limits of the time in the - * current data. The visible interval is typically configured by a timeline - * component to select a range of time. The model also maintains what is the - * current time format, either - * DOUBLE or - * DATE. Internally, all times are double, but it can be converted - * to dates for user display. In addition the model stores the current - * estimators used to compute dynamic values. - *

    - * The model is listening to graph and attributes events to track all intervals - * and deduce minimum and maximum. It thows - * MIN_CHANGED or - * MAX_CHANGED events when these values are changed. - *

    - * The model can also build {@link DynamicGraph} objets on demand. These objects - * can work independently to states of this model. - * - * @author Cezary Bartosiak - * @author Mathieu Bastian - * - * @see DynamicController - */ -public interface DynamicModel { - - /** - * The name of the column containing time intervals. - */ - public static final String TIMEINTERVAL_COLUMN = "time_interval"; - - /** - * The way the time is represented, either a simple real value (DOUBLE), a - * unix timestamp, a date or a datetime. - */ - public enum TimeFormat { - - DATE, DATETIME, DOUBLE, TIMESTAMP - }; - - /** - * Builds a new {@code DynamicGraph} from the given {@code Graph} instance. - * - * @param graph the underlying graph - * - * @return a new a new {@code DynamicGraph}. - */ - public DynamicGraph createDynamicGraph(Graph graph); - - /** - * Builds a new {@code DynamicGraph} from the given {@code Graph} instance - * wrapping the given {@code Interval}. - * - * @param graph the underlying graph - * @param interval the interval to filter the graph - * - * @return a new a new {@code DynamicGraph}. - */ -// public DynamicGraph createDynamicGraph(Graph graph, Interval interval); - /** - * Returns the time interval wrapped by the {@code DynamicGraph} of the - * current workspace. - * - * @return the time interval wrapped by the {@code DynamicGraph} of the - * current workspace. - */ -// public TimeInterval getVisibleInterval(); - /** - * Returns the minimum of the time intervals defined in elements (i.e. nodes - * and edges) in the current workspace. This minimum is updated when data - * change and excludes - * Double.NEGATIVE_INFINITY. - * - * @return the minimum time in the current workspace - */ - public double getMin(); - - /** - * Returns the maximum of the time intervals defined in elements (i.e. nodes - * and edges) in the current workspace. This maximum is updated when data - * change and excludes - * Double.POSITIVE_INFINITY. - * - * @return the maximum time in the current workspace - */ - public double getMax(); - - /** - * Gets the current time format for this model. Though all time values are - * stored in double numbers, the time format inform how this values should - * be converted to display to users. - * - * @return the current time format - */ - public TimeFormat getTimeFormat(); - - /** - * Returns the current - * ESTIMATOR, used to get values from {@link DynamicType}. - * Default is Estimator.FIRST. - *

    - * See the {@link #getNumberEstimator()} method for number types. - * - * @return the current estimator - */ -// public Estimator getEstimator(); - /** - * Returns the current number - * ESTIMATOR, used to get values from number - * {@link DynamicType}, like {@link DynamicInteger}. Default is - * Estimator.AVERAGE. - *

    - * See the {@link #getEstimator()} method for non-number types. - * - * @return the current number estimator - */ -// public Estimator getNumberEstimator(); - /** - * Returns - * true if the graph in the current workspace is dynamic, i.e. - * when the graph has either dynamic topology, attributes or both. - * - * @return true if the graph is dynamic, false - * otherwise - */ - public boolean isDynamicGraph(); - - /** - * Returns - * true if the graph in the current workspace has dynamic - * nodes. In other words if nodes are added or removed dynamically. - * - * @return true if the graph has dynamic nodes - */ - public boolean hasDynamicNodes(); - - /** - * Returns - * true if the graph in the current workspace has dynamic - * edges. In other words if edges are added or removed dynamically. - * - * @return true if the graph has dynamic edges - */ - public boolean hasDynamicEdges(); -} diff --git a/modules/DynamicAPI/src/main/java/org/gephi/dynamic/api/DynamicModelEvent.java b/modules/DynamicAPI/src/main/java/org/gephi/dynamic/api/DynamicModelEvent.java deleted file mode 100644 index b4c1c55097..0000000000 --- a/modules/DynamicAPI/src/main/java/org/gephi/dynamic/api/DynamicModelEvent.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright 2008-2010 Gephi - * Authors : Cezary Bartosiak - * Mathieu Bastian - * Website : http://www.gephi.org - * - * This file is part of Gephi. - * -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.dynamic.api; - -/** - * Event from the dynamic model. - *

      - *
    • VISIBLE_INTERVAL: The visible interval set by the timeline has changed
    • - *
    • MIN_CHANGED: The minimum bound in time has changed
    • - *
    • MAX_CHANGED: The maximum bound in time has changed
    • - *
    - * @author Cezary Bartosiak - * @author Mathieu Bastian - */ -public final class DynamicModelEvent { - - /** - * Event from the dynamic model. - *

    - * The visible interval is a TimeInterval object. For min and - * max changed, data are Double objects. - *

      - *
    • VISIBLE_INTERVAL: The visible interval set by the timeline has changed
    • - *
    • MIN_CHANGED: The minimum bound in time has changed
    • - *
    • MAX_CHANGED: The maximum bound in time has changed
    • - *
    • IS_DYNAMIC_GRAPH: The graph is now a dynamic graph
    • - *
    - */ - public enum EventType { - - VISIBLE_INTERVAL, MIN_CHANGED, MAX_CHANGED, IS_DYNAMIC_GRAPH, TIME_FORMAT - }; - private final EventType type; - private final DynamicModel source; - private final Object data; - - public DynamicModelEvent(EventType type, DynamicModel source, Object data) { - this.type = type; - this.source = source; - this.data = data; - } - - public EventType getEventType() { - return type; - } - - public DynamicModel getSource() { - return source; - } - - public Object getData() { - return data; - } -} diff --git a/modules/DynamicAPI/src/main/java/org/gephi/dynamic/api/DynamicModelListener.java b/modules/DynamicAPI/src/main/java/org/gephi/dynamic/api/DynamicModelListener.java deleted file mode 100644 index 16f87eda30..0000000000 --- a/modules/DynamicAPI/src/main/java/org/gephi/dynamic/api/DynamicModelListener.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright 2008-2010 Gephi - * Authors : Cezary Bartosiak - * Mathieu Bastian - * Website : http://www.gephi.org - * - * This file is part of Gephi. - * -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.dynamic.api; - -import java.util.EventListener; - -/** - * Listener for the dynamicModel. - * - * @author Cezary Bartosiak - * @author Mathieu Bastian - * @see DynamicModelEvent - */ -public interface DynamicModelListener extends EventListener { - - public void dynamicModelChanged(DynamicModelEvent event); -} diff --git a/modules/DynamicAPI/src/main/nbm/manifest.mf b/modules/DynamicAPI/src/main/nbm/manifest.mf deleted file mode 100644 index bbced505e7..0000000000 --- a/modules/DynamicAPI/src/main/nbm/manifest.mf +++ /dev/null @@ -1,4 +0,0 @@ -Manifest-Version: 1.0 -AutoUpdate-Essential-Module: true -OpenIDE-Module-Localizing-Bundle: org/gephi/dynamic/api/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file diff --git a/modules/DynamicAPI/src/main/nbm/module.xml b/modules/DynamicAPI/src/main/nbm/module.xml deleted file mode 100644 index 2ec9fe18f7..0000000000 --- a/modules/DynamicAPI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/Bundle.properties b/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/Bundle.properties deleted file mode 100644 index 458aad3a35..0000000000 --- a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/Bundle.properties +++ /dev/null @@ -1,5 +0,0 @@ -OpenIDE-Module-Display-Category=Gephi Core -OpenIDE-Module-Long-Description=\ - Provide features for dynamic graphs -OpenIDE-Module-Name=Dynamic API -OpenIDE-Module-Short-Description=Provide features for dynamic graphs diff --git a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/Bundle_cs.properties b/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/Bundle_cs.properties deleted file mode 100644 index 2b994d90e1..0000000000 --- a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/Bundle_cs.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-23 09\:51+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=Poskytuje funkce pro dynamick\u00e9 grafy - -OpenIDE-Module-Short-Description=Poskytuje funkce pro dynamick\u00e9 grafy diff --git a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/Bundle_es.properties b/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/Bundle_es.properties deleted file mode 100644 index dafac033dd..0000000000 --- a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/Bundle_es.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:06+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Proporciona caracter\u00edsticas para grafos din\u00e1micos - -OpenIDE-Module-Short-Description=Proporciona caracter\u00edsticas para grafos din\u00e1micos diff --git a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/Bundle_fr.properties b/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/Bundle_fr.properties deleted file mode 100644 index caf7d25ba8..0000000000 --- a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/Bundle_fr.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:06+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Fonctionnalit\u00e9s pour les graphes dynamiques - -OpenIDE-Module-Short-Description=Fonctionnalit\u00e9s pour les graphes dynamiques diff --git a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/Bundle_ja.properties b/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/Bundle_ja.properties deleted file mode 100644 index 03915fcf6c..0000000000 --- a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/Bundle_ja.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-18 10\:48+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u52d5\u7684\u306a\u30b0\u30e9\u30d5\u306e\u6a5f\u80fd\u3092\u63d0\u4f9b - -OpenIDE-Module-Short-Description=\u52d5\u7684\u306a\u30b0\u30e9\u30d5\u306e\u6a5f\u80fd\u3092\u63d0\u4f9b diff --git a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/Bundle_pt_BR.properties b/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/Bundle_pt_BR.properties deleted file mode 100644 index 64f6c765a2..0000000000 --- a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/Bundle_pt_BR.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 17\:52+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Fornece recursos para grafos din\u00e2micos - -OpenIDE-Module-Short-Description=Fornece recursos para grafos din\u00e2micos diff --git a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/Bundle_ru.properties b/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/Bundle_ru.properties deleted file mode 100644 index 409a25b0dc..0000000000 --- a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/Bundle_ru.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-21 22\:41+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0433\u0440\u0430\u0444\u043e\u0432 - -OpenIDE-Module-Short-Description=\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0433\u0440\u0430\u0444\u043e\u0432 diff --git a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/Bundle_zh_CN.properties b/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/Bundle_zh_CN.properties deleted file mode 100644 index b480c98921..0000000000 --- a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/Bundle_zh_CN.properties +++ /dev/null @@ -1,10 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:14+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u63d0\u4f9b\u52a8\u6001\u56fe\u5f62\u529f\u80fd - -OpenIDE-Module-Short-Description=\u63d0\u4f9b\u52a8\u6001\u56fe\u5f62\u529f\u80fd diff --git a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/cs.po b/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/cs.po deleted file mode 100644 index c254d56239..0000000000 --- a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/cs.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-23 09:51+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Poskytuje funkce pro dynamickΓ© grafy" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Poskytuje funkce pro dynamickΓ© grafy" diff --git a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/es.po b/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/es.po deleted file mode 100644 index b6179b3a49..0000000000 --- a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/es.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:06+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Proporciona caracterΓ­sticas para grafos dinΓ‘micos" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Proporciona caracterΓ­sticas para grafos dinΓ‘micos" diff --git a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/fr.po b/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/fr.po deleted file mode 100644 index def3790483..0000000000 --- a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/fr.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:06+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "FonctionnalitΓ©s pour les graphes dynamiques" - -msgid "OpenIDE-Module-Short-Description" -msgstr "FonctionnalitΓ©s pour les graphes dynamiques" diff --git a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/ja.po b/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/ja.po deleted file mode 100644 index af598423b6..0000000000 --- a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-18 10:48+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ε‹•ηš„γͺグラフγζ©Ÿθƒ½γ‚’提供" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ε‹•ηš„γͺグラフγζ©Ÿθƒ½γ‚’提供" diff --git a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/org-gephi-dynamic-api.pot b/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/org-gephi-dynamic-api.pot deleted file mode 100644 index e1be5696f5..0000000000 --- a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/org-gephi-dynamic-api.pot +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Provide features for dynamic graphs" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Provide features for dynamic graphs" diff --git a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/package.html b/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/package.html deleted file mode 100644 index b2777dcfaa..0000000000 --- a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/package.html +++ /dev/null @@ -1,23 +0,0 @@ - - - - API responsible for dynamic states, including the current visible interval. -

    - Gephi uses Dynamic API to store states relative to dynamic graph - exploration. The most notable data is the current visible interval, - what the timeline component is configuring. This interval is centralized - here and used in the rest of the application. -

    -

    - The DynamicController is managing models (one per workspace) - and is the access door to the system. This controller is a service, and can be - retrieved by using the following command: -

    -

    DynamicController dc = Lookup.getDefault().lookup(DynamicController.class);

    -

    - Use also the DynamicModel to get DynamicGraph - instances. They are independent wrappers that can be used analyse - dynamic graphs. -

    - - diff --git a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/pt_BR.po b/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/pt_BR.po deleted file mode 100644 index 2528d2d832..0000000000 --- a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/pt_BR.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 17:52+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Fornece recursos para grafos dinΓ’micos" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Fornece recursos para grafos dinΓ’micos" diff --git a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/ru.po b/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/ru.po deleted file mode 100644 index 48769a6497..0000000000 --- a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/ru.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-21 22:41+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ динамичСских Π³Ρ€Π°Ρ„ΠΎΠ²" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ динамичСских Π³Ρ€Π°Ρ„ΠΎΠ²" diff --git a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/zh_CN.po b/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/zh_CN.po deleted file mode 100644 index 573363468b..0000000000 --- a/modules/DynamicAPI/src/main/resources/org/gephi/dynamic/api/zh_CN.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:14+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ζδΎ›εŠ¨ζ€ε›Ύε½’εŠŸθƒ½" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζδΎ›εŠ¨ζ€ε›Ύε½’εŠŸθƒ½" diff --git a/modules/DynamicImpl/pom.xml b/modules/DynamicImpl/pom.xml deleted file mode 100644 index 29e2f4e85a..0000000000 --- a/modules/DynamicImpl/pom.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - 4.0.0 - - gephi-parent - org.gephi - 0.9-SNAPSHOT - ../.. - - - org.gephi - dynamic-impl - 0.9-SNAPSHOT - nbm - - DynamicImpl - - - - org.netbeans.api - org-netbeans-api-annotations-common - - - ${project.groupId} - dynamic-api - - - ${project.groupId} - data-attributes-api - - - ${project.groupId} - filters-api - - - ${project.groupId} - filters-plugin - - - ${project.groupId} - graph-api - - - ${project.groupId} - project-api - - - org.netbeans.api - org-openide-util-lookup - - - - - - - org.codehaus.mojo - nbm-maven-plugin - - - - - - - - diff --git a/modules/DynamicImpl/src/main/java/org/gephi/dynamic/DynamicControllerImpl.java b/modules/DynamicImpl/src/main/java/org/gephi/dynamic/DynamicControllerImpl.java deleted file mode 100644 index 56c26dfa3f..0000000000 --- a/modules/DynamicImpl/src/main/java/org/gephi/dynamic/DynamicControllerImpl.java +++ /dev/null @@ -1,318 +0,0 @@ -/* - * Copyright 2008-2010 Gephi - * Authors : Cezary Bartosiak - * Mathieu Bastian - * Website : http://www.gephi.org - * - * This file is part of Gephi. - * - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.dynamic; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.concurrent.LinkedBlockingQueue; -import java.util.concurrent.atomic.AtomicReference; -import org.gephi.data.attributes.api.Estimator; -import org.gephi.data.attributes.type.TimeInterval; -import org.gephi.dynamic.api.DynamicController; -import org.gephi.dynamic.api.DynamicModel.TimeFormat; -import org.gephi.dynamic.api.DynamicModelEvent; -import org.gephi.dynamic.api.DynamicModelListener; -import org.gephi.project.api.ProjectController; -import org.gephi.project.api.Workspace; -import org.gephi.project.api.WorkspaceListener; -import org.gephi.project.api.WorkspaceProvider; -import org.openide.util.Lookup; -import org.openide.util.lookup.ServiceProvider; - -/** - * It is the default implementation of the {@code DynamicController} class. - * - * @author Cezary Bartosiak - * @author Mathieu Bastian - */ -@ServiceProvider(service = DynamicController.class) -public final class DynamicControllerImpl implements DynamicController { - - private DynamicModelImpl model; - private List listeners; - private DynamicModelEventDispatchThread eventThread; - private SetVisibleIntervalThread setIntervalThread; - - /** - * The default constructor. - */ - public DynamicControllerImpl() { - listeners = Collections.synchronizedList(new ArrayList()); - eventThread = new DynamicModelEventDispatchThread(); - eventThread.start(); - setIntervalThread = new SetVisibleIntervalThread(); - setIntervalThread.start(); - - ProjectController projectController = Lookup.getDefault().lookup(ProjectController.class); - projectController.addWorkspaceListener(new WorkspaceListener() { - @Override - public void initialize(Workspace workspace) { - workspace.add(new DynamicModelImpl(DynamicControllerImpl.this, workspace)); - } - - @Override - public void select(Workspace workspace) { - model = workspace.getLookup().lookup(DynamicModelImpl.class); - if (model == null) { - model = new DynamicModelImpl(DynamicControllerImpl.this, workspace); - workspace.add(model); - } - } - - @Override - public void unselect(Workspace workspace) { - } - - @Override - public void close(Workspace workspace) { - } - - @Override - public void disable() { - model = null; - } - }); - if (projectController.getCurrentProject() != null) { - Workspace[] workspaces = projectController.getCurrentProject().getLookup(). - lookup(WorkspaceProvider.class).getWorkspaces(); - for (Workspace workspace : workspaces) { - DynamicModelImpl m = (DynamicModelImpl) workspace.getLookup().lookup(DynamicModelImpl.class); - if (m == null) { - m = new DynamicModelImpl(this, workspace); - workspace.add(m); - } - if (workspace == projectController.getCurrentWorkspace()) { - model = m; - } - } - } - } - - @Override - public synchronized DynamicModelImpl getModel() { - if (model == null) { - ProjectController projectController = Lookup.getDefault().lookup(ProjectController.class); - if (projectController.getCurrentWorkspace() != null) { - Workspace workspace = projectController.getCurrentWorkspace(); - return workspace.getLookup().lookup(DynamicModelImpl.class); - } - } - return model; - } - - @Override - public synchronized DynamicModelImpl getModel(Workspace workspace) { - if (workspace != null) { - DynamicModelImpl m = workspace.getLookup().lookup(DynamicModelImpl.class); - if (m != null) { - return m; - } - m = new DynamicModelImpl(this, workspace); - workspace.add(m); - return m; - } - return null; - } - - @Override - public void setVisibleInterval(TimeInterval interval) { - if (model != null) { - setIntervalThread.setVisibleTimeInterval(interval); - //System.out.println("set visible interval "+interval); - } - } - - @Override - public void setVisibleInterval(double low, double high) { - setVisibleInterval(new TimeInterval(low, high)); - } - - @Override - public void setTimeFormat(TimeFormat timeFormat) { - if (model != null) { - model.setTimeFormat(timeFormat); - } - } - - @Override - public void setTimeFormat(TimeFormat timeFormat, Workspace workspace) { - DynamicModelImpl modelImpl = (DynamicModelImpl) getModel(workspace); - if (modelImpl != null) { - modelImpl.setTimeFormat(timeFormat); - } - } - - @Override - public void setEstimator(Estimator estimator) { - if (model != null) { - model.setEstimator(estimator); - } - } - - @Override - public void setEstimator(Estimator estimator, Workspace workspace) { - DynamicModelImpl modelImpl = (DynamicModelImpl) getModel(workspace); - if (modelImpl != null) { - modelImpl.setEstimator(estimator); - } - } - - @Override - public void setNumberEstimator(Estimator numberEstimator) { - if (model != null) { - model.setNumberEstimator(numberEstimator); - } - } - - @Override - public void setNumberEstimator(Estimator numberEstimator, Workspace workspace) { - DynamicModelImpl modelImpl = (DynamicModelImpl) getModel(workspace); - if (modelImpl != null) { - modelImpl.setNumberEstimator(numberEstimator); - } - } - - @Override - public void addModelListener(DynamicModelListener listener) { - if (!listeners.contains(listener)) { - listeners.add(listener); - } - } - - @Override - public void removeModelListener(DynamicModelListener listener) { - listeners.remove(listener); - } - - public void fireModelEvent(DynamicModelEvent event) { - eventThread.fireEvent(event); - } - - protected class SetVisibleIntervalThread extends Thread { - - private boolean stop; - private final AtomicReference lastInterval = new AtomicReference(); - private final Object lock = new Object(); - - public SetVisibleIntervalThread() { - super("Dynamic Set Visible Interval Thread"); - setDaemon(true); - } - - @Override - public void run() { - while (!stop) { - TimeInterval interval; - if ((interval = lastInterval.getAndSet(null)) != null) { - model.setVisibleTimeInterval(interval); - } - - while (lastInterval.get() == null) { - try { - synchronized (lock) { - lock.wait(); - } - } catch (InterruptedException e) { - } - } - } - } - - public void stop(boolean stop) { - this.stop = stop; - } - - public void setVisibleTimeInterval(TimeInterval interval) { - lastInterval.set(interval); - synchronized (lock) { - lock.notifyAll(); - } - } - } - - protected class DynamicModelEventDispatchThread extends Thread { - - private boolean stop; - private final LinkedBlockingQueue eventQueue; - private final Object lock = new Object(); - - public DynamicModelEventDispatchThread() { - super("Dynamic Model EventDispatchThread"); - setDaemon(true); - this.eventQueue = new LinkedBlockingQueue(); - } - - @Override - public void run() { - while (!stop) { - DynamicModelEvent evt; - while ((evt = eventQueue.poll()) != null) { - for (DynamicModelListener l : listeners.toArray(new DynamicModelListener[0])) { - l.dynamicModelChanged(evt); - } - } - - while (eventQueue.isEmpty()) { - try { - synchronized (lock) { - lock.wait(); - } - } catch (InterruptedException e) { - } - } - } - } - - public void stop(boolean stop) { - this.stop = stop; - } - - public void fireEvent(DynamicModelEvent event) { - eventQueue.add(event); - synchronized (lock) { - lock.notifyAll(); - } - } - } -} diff --git a/modules/DynamicImpl/src/main/java/org/gephi/dynamic/DynamicGraphImpl.java b/modules/DynamicImpl/src/main/java/org/gephi/dynamic/DynamicGraphImpl.java deleted file mode 100644 index 604790359d..0000000000 --- a/modules/DynamicImpl/src/main/java/org/gephi/dynamic/DynamicGraphImpl.java +++ /dev/null @@ -1,467 +0,0 @@ -/* - * Copyright 2008-2010 Gephi - * Authors : Cezary Bartosiak - * Website : http://www.gephi.org - * - * This file is part of Gephi. - * -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.dynamic; - -import org.gephi.data.attributes.api.AttributeController; -import org.gephi.data.attributes.api.AttributeModel; -import org.gephi.data.attributes.api.Estimator; -import org.gephi.data.attributes.type.DynamicType; -import org.gephi.data.attributes.type.Interval; -import org.gephi.data.attributes.type.TimeInterval; -import org.gephi.dynamic.api.DynamicGraph; -import org.gephi.dynamic.api.DynamicModel; -import org.gephi.graph.api.Attributes; -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.Graph; -import org.gephi.graph.api.GraphModel; -import org.gephi.graph.api.GraphView; -import org.gephi.graph.api.Node; -import org.openide.util.Lookup; - -/** - * The wrapper for graph and time interval. - * - * @author Cezary Bartosiak - */ -public final class DynamicGraphImpl implements DynamicGraph { - - private GraphModel model; - private AttributeModel attributeModel; - private GraphView sourceView; - private GraphView currentView; - private double low; - private double high; - - /** - * Constructs a new {@code DynamicGraph} that wraps a given {@code Graph}. - * The time interval is [{@code -infinity}, {@code +infinity}]. - * - * @param graph wrapped {@code Graph} - */ - public DynamicGraphImpl(Graph graph) { - this(graph, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); - } - - /** - * Constructs a new {@code DynamicGraph} that wraps a given {@code Graph} - * and a time interval [{@code low}, {@code high}]. - * - * @param graph wrapped {@code Graph} - * @param low the left endpoint of the interval - * @param high the right endpoint of the interval - * - * @throws NullPointerException if {@code graph} is null. - * @throws IllegalArgumentException if {@code low} > {@code high}. - */ - public DynamicGraphImpl(Graph graph, double low, double high) { - if (graph == null) { - throw new NullPointerException("The graph cannot be null."); - } - - if (low > high) { - throw new IllegalArgumentException( - "The left endpoint of the interval must be less than " - + "the right endpoint."); - } - - model = graph.getGraphModel(); - sourceView = graph.getView(); - currentView = model.copyView(sourceView); - - AttributeController ac = Lookup.getDefault().lookup(AttributeController.class); - attributeModel = ac.getModel(graph.getGraphModel().getWorkspace()); - - this.low = low; - this.high = high; - - if (low != Double.NEGATIVE_INFINITY || high != Double.POSITIVE_INFINITY) { - Graph vgraph = model.getGraph(currentView); - for (Node n : vgraph.getNodes().toArray()) { - TimeInterval ti = (TimeInterval) n.getNodeData().getAttributes().getValue( - DynamicModel.TIMEINTERVAL_COLUMN); - if (ti != null && !ti.isInRange(low, high)) { - vgraph.removeNode(n); - } - } - for (Edge e : vgraph.getEdges().toArray()) { - TimeInterval ti = (TimeInterval) e.getEdgeData().getAttributes().getValue( - DynamicModel.TIMEINTERVAL_COLUMN); - if (ti != null && !ti.isInRange(low, high)) { - vgraph.removeEdge(e); - } - } - } - } - - @Override - public Object[] getAttributesValues(Node node, double point) { - int count = node.getNodeData().getAttributes().countValues(); - Estimator[] estimators = new Estimator[count]; - for (int i = 0; i < count; ++i) { - estimators[i] = Estimator.FIRST; - } - return getAttributesValues(node, point, estimators); - } - - @Override - public Object[] getAttributesValues(Node node, double point, Estimator[] estimators) { - checkPoint(point); - return getAttributesValues(node, point, point, estimators); - } - - @Override - public Object[] getAttributesValues(Node node, double low, double high) { - checkLowHigh(low, high); - return getAttributesValues(node, new Interval(low, high)); - } - - @Override - public Object[] getAttributesValues(Node node, Interval interval) { - int count = node.getNodeData().getAttributes().countValues(); - Estimator[] estimators = new Estimator[count]; - for (int i = 0; i < count; ++i) { - estimators[i] = Estimator.FIRST; - } - return getAttributesValues(node, interval, estimators); - } - - @Override - public Object[] getAttributesValues(Node node, double low, double high, Estimator[] estimators) { - checkLowHigh(low, high); - return getAttributesValues(node, new Interval(low, high), estimators); - } - - @Override - public Object[] getAttributesValues(Node node, Interval interval, Estimator[] estimators) { - checkEstimators(node, estimators); - - Attributes attributes = node.getNodeData().getAttributes(); - Object[] values = new Object[attributes.countValues()]; - - for (int i = 0; i < attributes.countValues(); ++i) { - values[i] = attributes.getValue(i); - if (values[i] instanceof DynamicType) { - values[i] = ((DynamicType) values[i]).getValue(estimators[i]); - } - } - - return values; - } - - @Override - public Object[] getAttributesValues(Edge edge, double point) { - int count = edge.getEdgeData().getAttributes().countValues(); - Estimator[] estimators = new Estimator[count]; - for (int i = 0; i < count; ++i) { - estimators[i] = Estimator.FIRST; - } - return getAttributesValues(edge, point, estimators); - } - - @Override - public Object[] getAttributesValues(Edge edge, double point, Estimator[] estimators) { - checkPoint(point); - return getAttributesValues(edge, point, point, estimators); - } - - @Override - public Object[] getAttributesValues(Edge edge, double low, double high) { - checkLowHigh(low, high); - return getAttributesValues(edge, new Interval(low, high)); - } - - @Override - public Object[] getAttributesValues(Edge edge, Interval interval) { - int count = edge.getEdgeData().getAttributes().countValues(); - Estimator[] estimators = new Estimator[count]; - for (int i = 0; i < count; ++i) { - estimators[i] = Estimator.FIRST; - } - return getAttributesValues(edge, interval, estimators); - } - - @Override - public Object[] getAttributesValues(Edge edge, double low, double high, Estimator[] estimators) { - checkLowHigh(low, high); - return getAttributesValues(edge, new Interval(low, high), estimators); - } - - @Override - public Object[] getAttributesValues(Edge edge, Interval interval, Estimator[] estimators) { - checkEstimators(edge, estimators); - - Attributes attributes = edge.getEdgeData().getAttributes(); - Object[] values = new Object[attributes.countValues()]; - - for (int i = 0; i < attributes.countValues(); ++i) { - values[i] = attributes.getValue(i); - if (values[i] instanceof DynamicType) { - values[i] = ((DynamicType) values[i]).getValue(estimators[i]); - } - } - - return values; - } - - @Override - public double getLow() { - return low; - } - - @Override - public double getHigh() { - return high; - } - - @Override - public Graph getSnapshotGraph(double point) { - return getSnapshotGraph(point, Estimator.FIRST); - } - - @Override - public Graph getSnapshotGraph(double point, Estimator estimator) { - checkPoint(point); - return getSnapshotGraph(point, point, estimator); - } - - @Override - public Graph getSnapshotGraph(double low, double high) { - return getSnapshotGraph(low, high, Estimator.FIRST); - } - - @Override - public Graph getSnapshotGraph(Interval interval) { - return getSnapshotGraph(interval, Estimator.FIRST); - } - - @Override - public Graph getSnapshotGraph(double low, double high, Estimator estimator) { - checkLowHigh(low, high); - return getSnapshotGraph(new Interval(low, high), Estimator.FIRST); - } - - @Override - public Graph getSnapshotGraph(Interval interval, Estimator estimator) { - Graph graph = model.getGraph(sourceView); - Graph vgraph = model.getGraph(currentView); - - graph.writeLock(); - - if (attributeModel.getNodeTable().hasColumn(DynamicModel.TIMEINTERVAL_COLUMN)) { - for (Node n : graph.getNodes().toArray()) { - TimeInterval ti = (TimeInterval) n.getNodeData().getAttributes().getValue(DynamicModel.TIMEINTERVAL_COLUMN); - if (ti == null && !vgraph.contains(n)) { - vgraph.addNode(n); - } else if (ti != null) { - boolean isInRange = ti.isInRange(interval); - boolean isInGraph = vgraph.contains(n); - if (!isInRange && isInGraph) { - vgraph.removeNode(n); - } else if (isInRange && !isInGraph) { - vgraph.addNode(n); - } - } - } - } - if (attributeModel.getEdgeTable().hasColumn(DynamicModel.TIMEINTERVAL_COLUMN)) { - for (Edge e : graph.getEdges().toArray()) { - TimeInterval ti = (TimeInterval) e.getEdgeData().getAttributes().getValue(DynamicModel.TIMEINTERVAL_COLUMN); - if (ti == null && !vgraph.contains(e) - && vgraph.contains(e.getSource()) && vgraph.contains(e.getTarget())) { - vgraph.addEdge(e); - } else if (ti != null) { - boolean isInRange = ti.isInRange(interval); - boolean isInGraph = vgraph.contains(e); - if (!isInRange && isInGraph) { - vgraph.removeEdge(e); - } else if (isInRange && !isInGraph && vgraph.contains(e.getSource()) && vgraph.contains(e.getTarget())) { - vgraph.addEdge(e); - } - } - } - } - graph.writeUnlock(); - return vgraph; - } - - @Override - public Graph getStrongSnapshotGraph(double point) { - checkPoint(point); - return getStrongSnapshotGraph(point, point); - } - - @Override - public Graph getStrongSnapshotGraph(double low, double high) { - checkLowHigh(low, high); - return getStrongSnapshotGraph(new Interval(low, high)); - } - - @Override - public Graph getStrongSnapshotGraph(Interval interval) { - Graph graph = model.getGraph(sourceView); - Graph vgraph = model.getGraph(currentView); - for (Node n : graph.getNodes().toArray()) { - TimeInterval ti = (TimeInterval) n.getNodeData().getAttributes().getValue(DynamicModel.TIMEINTERVAL_COLUMN); - if (ti.getValues(interval).size() < ti.getValues().size() && vgraph.contains(n)) { - vgraph.removeNode(n); - } else if (ti.getValues(interval).size() == ti.getValues().size() && !vgraph.contains(n)) { - vgraph.addNode(n); - } - } - for (Edge e : graph.getEdges().toArray()) { - TimeInterval ti = (TimeInterval) e.getEdgeData().getAttributes().getValue(DynamicModel.TIMEINTERVAL_COLUMN); - if (ti.getValues(interval).size() < ti.getValues().size() && vgraph.contains(e)) { - vgraph.removeEdge(e); - } else if (ti.getValues(interval).size() == ti.getValues().size() && !vgraph.contains(e) - && vgraph.contains(e.getSource()) && vgraph.contains(e.getTarget())) { - vgraph.addEdge(e); - } - } - return vgraph; - } - - @Override - public Graph getUnderlyingGraph() { - return model.getGraph(); - } - - @Override - public TimeInterval getInterval() { - return new TimeInterval(low, high); - } - - @Override - public void setInterval(TimeInterval interval) { - setInterval(interval.getLow(), interval.getHigh()); - } - - @Override - public void setInterval(double low, double high) { - if (low > high) { - throw new IllegalArgumentException( - "The left endpoint of the interval must be less than " - + "the right endpoint."); - } - - this.low = low; - this.high = high; - } - - private void checkPoint(double point) { - if (point < low || point > high) { - throw new IllegalArgumentException( - "The point cannot be out of range " - + "wrapped by this DynamicGraph"); - } - } - - private void checkLowHigh(double low, double high) { - if (low > high) { - throw new IllegalArgumentException( - "The left endpoint of the interval must be less than " - + "the right endpoint."); - } - if (high < this.low || low > this.high) { - throw new IllegalArgumentException( - "The time interval [low, high] cannot be out of range " - + "wrapped by this DynamicGraph"); - } - } - - private void checkEstimators(Node node, Estimator[] estimators) { - int count = node.getNodeData().getAttributes().countValues(); - if (count != estimators.length) { - throw new IllegalArgumentException( - "The length of the estimators table must be the same as " - + "the count of attributes."); - } - } - - private void checkEstimators(Edge edge, Estimator[] estimators) { - int count = edge.getEdgeData().getAttributes().countValues(); - if (count != estimators.length) { - throw new IllegalArgumentException( - "The length of the estimators table must be the same as " - + "the count of attributes."); - } - } - - /** - * Compares this instance with the specified object for equality. - * - * @param obj object to which this instance is to be compared - * - * @return {@code true} if and only if the specified {@code Object} is a - * {@code DynamicGraph} which has the 'equal' graph. - * - * @see #hashCode - */ - @Override - public boolean equals(Object obj) { - if (obj != null && obj.getClass().equals(this.getClass()) - && ((DynamicGraphImpl) obj).model.getGraph().equals(model.getGraph())) { - return true; - } - return false; - } - - /** - * Returns a hashcode of this instance. - * - * @return a hashcode of this instance. - */ - @Override - public int hashCode() { - return model.getGraph().hashCode(); - } - - /** - * Returns a string representation of this instance in a format - * provided by the underlying graph. - * - * @return a string representation of this instance. - */ - @Override - public String toString() { - return model.getGraph().toString(); - } -} diff --git a/modules/DynamicImpl/src/main/java/org/gephi/dynamic/DynamicIndex.java b/modules/DynamicImpl/src/main/java/org/gephi/dynamic/DynamicIndex.java deleted file mode 100644 index 9cd6967428..0000000000 --- a/modules/DynamicImpl/src/main/java/org/gephi/dynamic/DynamicIndex.java +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Copyright 2008-2010 Gephi - * Authors : Cezary Bartosiak - * Website : http://www.gephi.org - * - * This file is part of Gephi. - * - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.dynamic; - -import java.util.TreeMap; -import org.gephi.data.attributes.type.Interval; -import org.gephi.dynamic.api.DynamicModelEvent; - -/** - * - * @author Mathieu Bastian - */ -public class DynamicIndex { - - protected final TreeMap lowMap; - protected final TreeMap highMap; - protected final DynamicModelImpl model; - - public DynamicIndex(DynamicModelImpl model) { - this.model = model; - lowMap = new TreeMap(); - highMap = new TreeMap(); - } - - public synchronized void add(Interval interval) { - Double low = interval.getLow(); - Double high = interval.getHigh(); - boolean valid = (!lowMap.isEmpty() && !highMap.isEmpty()) || (lowMap.size() > 1 || highMap.size() > 1); - if (!valid) { - //Manually verify bounds - double min = getMin(); - double max = getMax(); - valid = !Double.isInfinite(min) && !Double.isInfinite(max); - } - boolean minChanged = false; - boolean maxChanged = false; - - if (!Double.isInfinite(low)) { - if (lowMap.get(low) != null) { - Integer counter = new Integer(lowMap.get(low) + 1); - lowMap.put(low, counter); - } else { - Double min = lowMap.isEmpty() ? Double.POSITIVE_INFINITY : lowMap.firstKey(); - lowMap.put(low, 1); - if (low < min) { - minChanged = true; - } - } - } - if (!Double.isInfinite(high)) { - if (highMap.get(high) != null) { - Integer counter = new Integer(highMap.get(high) + 1); - highMap.put(high, counter); - } else { - Double max = highMap.isEmpty() ? Double.NEGATIVE_INFINITY : highMap.lastKey(); - highMap.put(high, 1); - if (high > max) { - maxChanged = true; - } - } - } - - if (!valid && (minChanged || maxChanged)) { - //Look if valid now - double min = getMin(); - double max = getMax(); - valid = !Double.isInfinite(min) && !Double.isInfinite(max); - if (valid) { - fireEvent(new DynamicModelEvent(DynamicModelEvent.EventType.IS_DYNAMIC_GRAPH, model, Boolean.TRUE)); - } - } - - - if (minChanged && valid) { - fireEvent(new DynamicModelEvent(DynamicModelEvent.EventType.MIN_CHANGED, model, low)); - } - if (maxChanged && valid) { - fireEvent(new DynamicModelEvent(DynamicModelEvent.EventType.MAX_CHANGED, model, high)); - } - } - - public synchronized void remove(Interval interval) { - Double low = interval.getLow(); - Double high = interval.getHigh(); - if (!Double.isInfinite(low) && lowMap.get(low) != null) { - Integer counter = new Integer(lowMap.get(low) - 1); - if (counter == 0) { - Double min = lowMap.firstKey(); - lowMap.remove(low); - if (min.equals(low)) { - fireEvent(new DynamicModelEvent(DynamicModelEvent.EventType.MIN_CHANGED, model, getMin())); - } - } else { - lowMap.put(low, counter); - } - } - if (!Double.isInfinite(high) && highMap.get(high) != null) { - Integer counter = new Integer(highMap.get(high) - 1); - if (counter == 0) { - Double max = highMap.lastKey(); - highMap.remove(high); - if (max.equals(high)) { - fireEvent(new DynamicModelEvent(DynamicModelEvent.EventType.MAX_CHANGED, model, getMax())); - } - } else { - highMap.put(high, counter); - } - } - if (lowMap.isEmpty() && highMap.isEmpty()) { - fireEvent(new DynamicModelEvent(DynamicModelEvent.EventType.IS_DYNAMIC_GRAPH, model, Boolean.FALSE)); - } - } - - public synchronized void clear() { - lowMap.clear(); - highMap.clear(); - fireEvent(new DynamicModelEvent(DynamicModelEvent.EventType.MIN_CHANGED, model, getMin())); - fireEvent(new DynamicModelEvent(DynamicModelEvent.EventType.MAX_CHANGED, model, getMax())); - fireEvent(new DynamicModelEvent(DynamicModelEvent.EventType.IS_DYNAMIC_GRAPH, model, Boolean.FALSE)); - } - - public synchronized double getMin() { - return lowMap.isEmpty() ? (highMap.isEmpty() ? Double.NEGATIVE_INFINITY : highMap.firstKey()) : lowMap.firstKey(); - } - - public synchronized double getMax() { - return highMap.isEmpty() ? (lowMap.isEmpty() ? Double.POSITIVE_INFINITY : lowMap.lastKey()) : highMap.lastKey(); - } - - private void fireEvent(DynamicModelEvent event) { - if (model != null) { - model.controller.fireModelEvent(event); - } - } -} diff --git a/modules/DynamicImpl/src/main/java/org/gephi/dynamic/DynamicModelDuplicateProvider.java b/modules/DynamicImpl/src/main/java/org/gephi/dynamic/DynamicModelDuplicateProvider.java deleted file mode 100644 index 1418aeb3ec..0000000000 --- a/modules/DynamicImpl/src/main/java/org/gephi/dynamic/DynamicModelDuplicateProvider.java +++ /dev/null @@ -1,67 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.dynamic; - -import org.gephi.project.api.Workspace; -import org.gephi.project.spi.WorkspaceDuplicateProvider; -import org.openide.util.Lookup; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = WorkspaceDuplicateProvider.class) -public class DynamicModelDuplicateProvider implements WorkspaceDuplicateProvider { - - @Override - public void duplicate(Workspace source, Workspace destination) { - DynamicControllerImpl dynamicController = Lookup.getDefault().lookup(DynamicControllerImpl.class); - DynamicModelImpl sourceModel = dynamicController.getModel(source); - DynamicModelImpl destModel = dynamicController.getModel(destination); - - //Attributes - destModel.setEstimator(sourceModel.getEstimator()); - destModel.setNumberEstimator(sourceModel.getNumberEstimator()); - destModel.setTimeFormat(sourceModel.getTimeFormat()); - } -} diff --git a/modules/DynamicImpl/src/main/java/org/gephi/dynamic/DynamicModelImpl.java b/modules/DynamicImpl/src/main/java/org/gephi/dynamic/DynamicModelImpl.java deleted file mode 100644 index 4284a6e588..0000000000 --- a/modules/DynamicImpl/src/main/java/org/gephi/dynamic/DynamicModelImpl.java +++ /dev/null @@ -1,448 +0,0 @@ -/* - * Copyright 2008-2010 Gephi - * Authors : Cezary Bartosiak - * Mathieu Bastian - * Website : http://www.gephi.org - * - * This file is part of Gephi. - * - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.dynamic; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeController; -import org.gephi.data.attributes.api.AttributeEvent; -import org.gephi.data.attributes.api.AttributeListener; -import org.gephi.data.attributes.api.AttributeModel; -import org.gephi.data.attributes.api.AttributeTable; -import org.gephi.data.attributes.api.AttributeUtils; -import org.gephi.data.attributes.api.AttributeValue; -import org.gephi.data.attributes.api.Estimator; -import org.gephi.data.attributes.type.DynamicType; -import org.gephi.data.attributes.type.Interval; -import org.gephi.data.attributes.type.TimeInterval; -import org.gephi.dynamic.api.DynamicGraph; -import org.gephi.dynamic.api.DynamicModel; -import org.gephi.dynamic.api.DynamicModelEvent; -import org.gephi.filters.api.FilterController; -import org.gephi.filters.api.FilterModel; -import org.gephi.filters.api.Query; -import org.gephi.filters.plugin.dynamic.DynamicRangeBuilder; -import org.gephi.filters.plugin.dynamic.DynamicRangeBuilder.DynamicRangeFilter; -import org.gephi.filters.spi.FilterBuilder; -import org.gephi.graph.api.Attributes; -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.Graph; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.GraphEvent; -import org.gephi.graph.api.GraphListener; -import org.gephi.graph.api.GraphModel; -import org.gephi.graph.api.Node; -import org.gephi.project.api.Workspace; -import org.openide.util.Lookup; - -/** - * The default implementation of {@code DynamicModel}. - * - * @author Cezary Bartosiak - * @author Mathieu Bastian - */ -public final class DynamicModelImpl implements DynamicModel { - - protected final DynamicControllerImpl controller; - private final FilterController filterController; - private final DynamicIndex timeIntervalIndex; - private final GraphModel graphModel; - private final AttributeModel attributeModel; - private final FilterModel filterModel; - private final List nodeDynamicColumns; - private final List edgeDynamicColumns; - //Variables - private TimeInterval visibleTimeInterval; - private TimeFormat timeFormat; - private Estimator estimator = Estimator.FIRST; - private Estimator numberEstimator = Estimator.AVERAGE; - - /** - * The default constructor. - * - * @param workspace workspace related to this model - * - * @throws NullPointerException if {@code workspace} is null. - */ - public DynamicModelImpl(DynamicControllerImpl controller, Workspace workspace) { - this(controller, workspace, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); - } - - /** - * Constructs a new {@code DynamicModel} for the {@code workspace}. - * - * @param workspace workspace related to this model - * @param low the left endpoint of the visible time interval - * @param high the right endpoint of the visible time interval - * - * @throws NullPointerException if {@code workspace} is null or the graph model and/or its underlying graph are nulls. - */ - public DynamicModelImpl(DynamicControllerImpl controller, Workspace workspace, double low, double high) { - if (workspace == null) { - throw new NullPointerException("The workspace cannot be null."); - } - - this.timeFormat = TimeFormat.DOUBLE; - this.controller = controller; - graphModel = Lookup.getDefault().lookup(GraphController.class).getModel(workspace); - if (graphModel == null || graphModel.getGraph() == null) { - throw new NullPointerException("The graph model and its underlying graph cannot be nulls."); - } - - filterController = Lookup.getDefault().lookup(FilterController.class); - filterModel = filterController.getModel(workspace); - if (filterModel == null) { - throw new NullPointerException("The filter model."); - } - - //Index intervals - timeIntervalIndex = new DynamicIndex(this); - attributeModel = Lookup.getDefault().lookup(AttributeController.class).getModel(workspace); - nodeDynamicColumns = Collections.synchronizedList(new ArrayList()); - edgeDynamicColumns = Collections.synchronizedList(new ArrayList()); - - refresh(); - - //Visible interval - visibleTimeInterval = new TimeInterval(timeIntervalIndex.getMin(), timeIntervalIndex.getMax()); - - //AttUtils - final AttributeUtils attUtils = AttributeUtils.getDefault(); - - //Listen columns - AttributeListener attributeListener = new AttributeListener() { - @Override - public void attributesChanged(AttributeEvent event) { - switch (event.getEventType()) { - case ADD_COLUMN: - AttributeColumn[] addedColumns = event.getData().getAddedColumns(); - for (int i = 0; i < addedColumns.length; i++) { - AttributeColumn col = addedColumns[i]; - if (col.getType().isDynamicType() && attUtils.isNodeColumn(col)) { - nodeDynamicColumns.add(col); - } else if (col.getType().isDynamicType() && attUtils.isEdgeColumn(col)) { - edgeDynamicColumns.add(col); - } - } - break; - case REMOVE_COLUMN: - AttributeColumn[] removedColumns = event.getData().getRemovedColumns(); - for (int i = 0; i < removedColumns.length; i++) { - AttributeColumn col = removedColumns[i]; - if (col.getType().isDynamicType() && attUtils.isNodeColumn(col)) { - nodeDynamicColumns.remove(col); - } else if (col.getType().isDynamicType() && attUtils.isEdgeColumn(col)) { - edgeDynamicColumns.remove(col); - } - } - break; - case REPLACE_COLUMN: - AttributeColumn[] replacedColumns = event.getData().getRemovedColumns(); - for (int i = 0; i < replacedColumns.length; i++) { - AttributeColumn removedCol = replacedColumns[i]; - if (removedCol.getType().isDynamicType() && attUtils.isNodeColumn(removedCol)) { - nodeDynamicColumns.remove(removedCol); - } else if (removedCol.getType().isDynamicType() && attUtils.isEdgeColumn(removedCol)) { - edgeDynamicColumns.remove(removedCol); - } - - AttributeTable table = event.getSource(); - AttributeColumn addedCol = table.getColumn(removedCol.getIndex()); - if (addedCol.getType().isDynamicType() && attUtils.isNodeColumn(addedCol)) { - nodeDynamicColumns.add(addedCol); - } else if (addedCol.getType().isDynamicType() && attUtils.isEdgeColumn(addedCol)) { - edgeDynamicColumns.add(addedCol); - } - } - break; - case SET_VALUE: - case UNSET_VALUE: - AttributeValue[] values = event.getData().getTouchedValues(); - for (int i = 0; i < values.length; i++) { - AttributeValue val = values[i]; - if (val.getValue() != null) { - AttributeColumn col = values[i].getColumn(); - if (col.getType().isDynamicType()) { - DynamicType dynamicType = (DynamicType) val.getValue(); - if (dynamicType != null) { - for (Interval interval : dynamicType.getIntervals(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY)) { - if (event.getEventType() == AttributeEvent.EventType.UNSET_VALUE) { - timeIntervalIndex.remove(interval); - } else { - timeIntervalIndex.add(interval); - } - } - } - } - } - } - break; - default: - break; - } - } - }; - attributeModel.addAttributeListener(attributeListener); - - GraphListener graphListener = new GraphListener() { - @Override - public void graphChanged(GraphEvent event) { - if (event.getSource().isMainView()) { - switch (event.getEventType()) { - case REMOVE_NODES_AND_EDGES: - if (!edgeDynamicColumns.isEmpty() && event.getData().removedEdges() != null) { - AttributeColumn[] dynamicCols = edgeDynamicColumns.toArray(new AttributeColumn[0]); - for (Edge e : event.getData().removedEdges()) { - Attributes attributeRow = e.getEdgeData().getAttributes(); - for (int i = 0; i < dynamicCols.length; i++) { - DynamicType ti = (DynamicType) attributeRow.getValue(dynamicCols[i].getIndex()); - if (ti != null) { - for (Interval interval : ti.getIntervals(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY)) { - timeIntervalIndex.remove(interval); - } - } - } - } - } - if (!nodeDynamicColumns.isEmpty() && event.getData().removedNodes() != null) { - AttributeColumn[] dynamicCols = nodeDynamicColumns.toArray(new AttributeColumn[0]); - for (Node n : event.getData().removedNodes()) { - Attributes attributeRow = n.getNodeData().getAttributes(); - for (int i = 0; i < dynamicCols.length; i++) { - DynamicType ti = (DynamicType) attributeRow.getValue(dynamicCols[i].getIndex()); - if (ti != null) { - for (Interval interval : ti.getIntervals(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY)) { - timeIntervalIndex.remove(interval); - } - } - } - } - } - break; - default: - break; - } - } - } - }; - graphModel.addGraphListener(graphListener); - } - - private void indexNodeColumnsValues(AttributeColumn[] dynamicCols) { - Graph graph = graphModel.getGraph(); - for (Node n : graph.getNodes()) { - Attributes attributeRow = n.getNodeData().getAttributes(); - for (int i = 0; i < dynamicCols.length; i++) { - DynamicType ti = (DynamicType) attributeRow.getValue(dynamicCols[i].getIndex()); - if (ti != null) { - for (Interval interval : ti.getIntervals(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY)) { - timeIntervalIndex.add(interval); - } - } - } - } - } - - private void indexEdgeColumnsValues(AttributeColumn[] dynamicCols) { - Graph graph = graphModel.getGraph(); - for (Edge e : graph.getEdges()) { - Attributes attributeRow = e.getEdgeData().getAttributes(); - for (int i = 0; i < dynamicCols.length; i++) { - DynamicType ti = (DynamicType) attributeRow.getValue(dynamicCols[i].getIndex()); - if (ti != null) { - for (Interval interval : ti.getIntervals(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY)) { - timeIntervalIndex.add(interval); - } - } - } - } - } - - private void refresh() { - timeIntervalIndex.clear(); - nodeDynamicColumns.clear(); - edgeDynamicColumns.clear(); - - for (AttributeColumn col : attributeModel.getNodeTable().getColumns()) { - if (col.getType().isDynamicType()) { - nodeDynamicColumns.add(col); - } - } - indexNodeColumnsValues(nodeDynamicColumns.toArray(new AttributeColumn[0])); - - for (AttributeColumn col : attributeModel.getNodeTable().getColumns()) { - if (col.getType().isDynamicType()) { - edgeDynamicColumns.add(col); - } - } - indexEdgeColumnsValues(edgeDynamicColumns.toArray(new AttributeColumn[0])); - } - - @Override - public DynamicGraph createDynamicGraph(Graph graph) { - return new DynamicGraphImpl(graph); - } - - @Override - public DynamicGraph createDynamicGraph(Graph graph, Interval interval) { - return new DynamicGraphImpl(graph, interval.getLow(), interval.getHigh()); - } - - @Override - public TimeInterval getVisibleInterval() { - return visibleTimeInterval; - } - - public void setVisibleTimeInterval(TimeInterval visibleTimeInterval) { - if (!Double.isNaN(visibleTimeInterval.getLow()) && !Double.isNaN(visibleTimeInterval.getHigh()) && !this.visibleTimeInterval.equals(visibleTimeInterval)) { - this.visibleTimeInterval = visibleTimeInterval; - - //Filters - Query dynamicQuery = null; - boolean selecting = false; - - //Get or create Dynamic Query - if (filterModel.getCurrentQuery() != null) { - //Look if current query is dynamic - filtering must be active - Query query = filterModel.getCurrentQuery(); - Query[] dynamicQueries = query.getQueries(DynamicRangeFilter.class); - if (dynamicQueries.length > 0) { - dynamicQuery = query; - selecting = filterModel.isSelecting(); - } - } else if (filterModel.getQueries().length == 1) { - //Look if a dynamic query alone exists - Query query = filterModel.getQueries()[0]; - Query[] dynamicQueries = query.getQueries(DynamicRangeFilter.class); - if (dynamicQueries.length > 0) { - dynamicQuery = query; - } - } - - if (Double.isInfinite(visibleTimeInterval.getLow()) && Double.isInfinite(visibleTimeInterval.getHigh())) { - if (dynamicQuery != null) { - filterController.remove(dynamicQuery); - } - } else { - if (dynamicQuery == null) { - //Create dynamic filter - DynamicRangeBuilder rangeBuilder = filterModel.getLibrary().getLookup().lookup(DynamicRangeBuilder.class); - FilterBuilder[] fb = rangeBuilder.getBuilders(); - if (fb.length > 0) { - DynamicRangeFilter filter = (DynamicRangeFilter) fb[0].getFilter(); - dynamicQuery = filterController.createQuery(filter); - filterController.add(dynamicQuery); - } - } - if (dynamicQuery != null) { - if (selecting) { - filterController.selectVisible(dynamicQuery); - } else { - filterController.filterVisible(dynamicQuery); - } - } - } - - - // Trigger Event - controller.fireModelEvent(new DynamicModelEvent(DynamicModelEvent.EventType.VISIBLE_INTERVAL, this, visibleTimeInterval)); - } - } - - @Override - public boolean isDynamicGraph() { - boolean res = !Double.isInfinite(timeIntervalIndex.getMax()) || !Double.isInfinite(timeIntervalIndex.getMin()); - return res || !nodeDynamicColumns.isEmpty() || !edgeDynamicColumns.isEmpty(); - } - - @Override - public TimeFormat getTimeFormat() { - return timeFormat; - } - - public void setTimeFormat(TimeFormat timeFormat) { - this.timeFormat = timeFormat; - - controller.fireModelEvent(new DynamicModelEvent(DynamicModelEvent.EventType.TIME_FORMAT, this, timeFormat)); - } - - @Override - public double getMin() { - return timeIntervalIndex.getMin(); - } - - @Override - public double getMax() { - return timeIntervalIndex.getMax(); - } - - @Override - public Estimator getEstimator() { - return estimator; - } - - @Override - public Estimator getNumberEstimator() { - return numberEstimator; - } - - public void setEstimator(Estimator estimator) { - this.estimator = estimator; - } - - public void setNumberEstimator(Estimator numberEstimator) { - this.numberEstimator = numberEstimator; - } - - @Override - public boolean hasDynamicEdges() { - return attributeModel.getEdgeTable().hasColumn(TIMEINTERVAL_COLUMN); - } - - @Override - public boolean hasDynamicNodes() { - return attributeModel.getNodeTable().hasColumn(TIMEINTERVAL_COLUMN); - } -} diff --git a/modules/DynamicImpl/src/main/java/org/gephi/dynamic/DynamicModelPersistenceProvider.java b/modules/DynamicImpl/src/main/java/org/gephi/dynamic/DynamicModelPersistenceProvider.java deleted file mode 100644 index 836b9f9b89..0000000000 --- a/modules/DynamicImpl/src/main/java/org/gephi/dynamic/DynamicModelPersistenceProvider.java +++ /dev/null @@ -1,145 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.dynamic; - -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamReader; -import javax.xml.stream.XMLStreamWriter; -import org.gephi.dynamic.api.DynamicController; -import org.gephi.dynamic.api.DynamicModel; -import org.gephi.project.api.Workspace; -import org.gephi.project.spi.WorkspacePersistenceProvider; -import org.openide.util.Lookup; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = WorkspacePersistenceProvider.class) -public class DynamicModelPersistenceProvider implements WorkspacePersistenceProvider { - - @Override - public void writeXML(XMLStreamWriter writer, Workspace workspace) { - DynamicModelImpl model = (DynamicModelImpl) workspace.getLookup().lookup(DynamicModel.class); - if (model != null) { - try { - writeModel(writer, model); - } catch (XMLStreamException ex) { - throw new RuntimeException(ex); - } - } - } - - @Override - public void readXML(XMLStreamReader reader, Workspace workspace) { - DynamicControllerImpl dynamicController = (DynamicControllerImpl) Lookup.getDefault().lookup(DynamicController.class); - DynamicModelImpl dynamicModelImpl = (DynamicModelImpl) workspace.getLookup().lookup(DynamicModel.class); - if (dynamicModelImpl == null) { - dynamicModelImpl = new DynamicModelImpl(dynamicController, workspace); - workspace.add(dynamicModelImpl); - } - try { - readModel(reader, dynamicModelImpl); - } catch (XMLStreamException ex) { - throw new RuntimeException(ex); - } - - } - - @Override - public String getIdentifier() { - return "dynamicmodel"; - } - - public void writeModel(XMLStreamWriter writer, DynamicModelImpl model) throws XMLStreamException { - writer.writeStartElement("dynamicmodel"); - - writer.writeStartElement("timeformat"); - if (model.getTimeFormat().equals(DynamicModel.TimeFormat.DATETIME)) { - writer.writeAttribute("value", "datetime"); - } else if (model.getTimeFormat().equals(DynamicModel.TimeFormat.DATE)) { - writer.writeAttribute("value", "date"); - } else { - // default: if equals(DynamicModel.TimeFormat.DOUBLE) - writer.writeAttribute("value", "double"); - } - writer.writeEndElement(); - - writer.writeEndElement(); - } - - public void readModel(XMLStreamReader reader, DynamicModelImpl model) throws XMLStreamException { - boolean end = false; - while (reader.hasNext() && !end) { - int type = reader.next(); - switch (type) { - case XMLStreamReader.START_ELEMENT: - if ("timeformat".equalsIgnoreCase(reader.getLocalName())) { - String val = reader.getAttributeValue(null, "value"); - if (val.equalsIgnoreCase("date")) { - model.setTimeFormat(DynamicModel.TimeFormat.DATE); - } else if (val.equalsIgnoreCase("datetime")) { - model.setTimeFormat(DynamicModel.TimeFormat.DATETIME); - } else { - model.setTimeFormat(DynamicModel.TimeFormat.DOUBLE); - } - } - break; - case XMLStreamReader.END_ELEMENT: - if ("dynamicmodel".equalsIgnoreCase(reader.getLocalName())) { - end = true; - } - break; - } - } - // Start & End - /* - if (!start.isEmpty()) { - container.setTimeIntervalMin(start); - } - if (!end.isEmpty()) { - container.setTimeIntervalMax(end); - } - */ - } -} diff --git a/modules/DynamicImpl/src/main/nbm/manifest.mf b/modules/DynamicImpl/src/main/nbm/manifest.mf deleted file mode 100644 index f030139712..0000000000 --- a/modules/DynamicImpl/src/main/nbm/manifest.mf +++ /dev/null @@ -1,4 +0,0 @@ -Manifest-Version: 1.0 -AutoUpdate-Essential-Module: true -OpenIDE-Module-Localizing-Bundle: org/gephi/dynamic/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file diff --git a/modules/DynamicImpl/src/main/nbm/module.xml b/modules/DynamicImpl/src/main/nbm/module.xml deleted file mode 100644 index 747db1e2af..0000000000 --- a/modules/DynamicImpl/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/Bundle.properties b/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/Bundle.properties deleted file mode 100644 index 00f5a03326..0000000000 --- a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/Bundle.properties +++ /dev/null @@ -1,3 +0,0 @@ -OpenIDE-Module-Display-Category=Gephi Core -OpenIDE-Module-Name=Dynamic Impl -OpenIDE-Module-Short-Description=Dynamic API default implementation diff --git a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/Bundle_cs.properties b/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/Bundle_cs.properties deleted file mode 100644 index d727110883..0000000000 --- a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/Bundle_cs.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-23 09\:51+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Short-Description=V\u00fdchoz\u00ed zaveden\u00e9 dynamick\u00e9 API diff --git a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/Bundle_es.properties b/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/Bundle_es.properties deleted file mode 100644 index a86773dc92..0000000000 --- a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/Bundle_es.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:06+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Short-Description=Implementaci\u00f3n por defecto del m\u00f3dulo Dynamic API diff --git a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/Bundle_fr.properties b/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/Bundle_fr.properties deleted file mode 100644 index 848799bf8e..0000000000 --- a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/Bundle_fr.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:06+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Fournit des fonctionnalit\u00e9s pour les graphes dynamiques diff --git a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/Bundle_ja.properties b/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/Bundle_ja.properties deleted file mode 100644 index f4cc0656a8..0000000000 --- a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/Bundle_ja.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-18 10\:48+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u52d5\u7684API\u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5b9f\u88c5 diff --git a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/Bundle_pt_BR.properties b/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/Bundle_pt_BR.properties deleted file mode 100644 index 1205b00bf3..0000000000 --- a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/Bundle_pt_BR.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 17\:51+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Implementa\u00e7\u00e3o padr\u00e3o da Dynamic API diff --git a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/Bundle_ru.properties b/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/Bundle_ru.properties deleted file mode 100644 index 4aaeb09901..0000000000 --- a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/Bundle_ru.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-21 22\:41+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Short-Description=Dynamic API default implementation diff --git a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/Bundle_zh_CN.properties b/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/Bundle_zh_CN.properties deleted file mode 100644 index a96dbf1396..0000000000 --- a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/Bundle_zh_CN.properties +++ /dev/null @@ -1,8 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:14+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u52a8\u6001\u5e94\u7528\u7a0b\u5e8f\u754c\u9762\u7684\u9ed8\u8ba4\u5b9e\u73b0 diff --git a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/cs.po b/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/cs.po deleted file mode 100644 index 27dbd10d46..0000000000 --- a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/cs.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-23 09:51+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "VΓ½chozΓ­ zavedenΓ© dynamickΓ© API" diff --git a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/es.po b/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/es.po deleted file mode 100644 index 6bafd24240..0000000000 --- a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/es.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:06+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplementaciΓ³n por defecto del mΓ³dulo Dynamic API" diff --git a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/fr.po b/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/fr.po deleted file mode 100644 index dabcdbec2c..0000000000 --- a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/fr.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:06+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Fournit des fonctionnalitΓ©s pour les graphes dynamiques" diff --git a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/ja.po b/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/ja.po deleted file mode 100644 index bf568f62e2..0000000000 --- a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/ja.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-18 10:48+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ε‹•ηš„APIγγƒ‡γƒ•γ‚©γƒ«γƒˆγεŸθ£…" diff --git a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/org-gephi-dynamic.pot b/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/org-gephi-dynamic.pot deleted file mode 100644 index 1120562794..0000000000 --- a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/org-gephi-dynamic.pot +++ /dev/null @@ -1,19 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Dynamic API default implementation" diff --git a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/pt_BR.po b/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/pt_BR.po deleted file mode 100644 index 1de2f69756..0000000000 --- a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/pt_BR.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 17:51+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplementaΓ§Γ£o padrΓ£o da Dynamic API" diff --git a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/ru.po b/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/ru.po deleted file mode 100644 index ea5fe97a8e..0000000000 --- a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/ru.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-21 22:41+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Dynamic API default implementation" diff --git a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/zh_CN.po b/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/zh_CN.po deleted file mode 100644 index 2696005c47..0000000000 --- a/modules/DynamicImpl/src/main/resources/org/gephi/dynamic/zh_CN.po +++ /dev/null @@ -1,21 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:14+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "εŠ¨ζ€εΊ”η”¨η¨‹εΊη•Œι’ηš„ι»˜θ€εžηް" diff --git a/modules/ExportAPI/pom.xml b/modules/ExportAPI/pom.xml index 0ed74718e0..7b2be29d97 100644 --- a/modules/ExportAPI/pom.xml +++ b/modules/ExportAPI/pom.xml @@ -4,13 +4,13 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi io-exporter-api - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm ExportAPI @@ -37,7 +37,7 @@ - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/ExportAPI/src/main/java/org/gephi/io/exporter/api/ExportController.java b/modules/ExportAPI/src/main/java/org/gephi/io/exporter/api/ExportController.java index 7a50d6373a..61e0d639e4 100644 --- a/modules/ExportAPI/src/main/java/org/gephi/io/exporter/api/ExportController.java +++ b/modules/ExportAPI/src/main/java/org/gephi/io/exporter/api/ExportController.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.api; import java.io.File; @@ -46,9 +47,9 @@ Development and Distribution License("CDDL") (collectively, the import java.io.OutputStream; import java.io.Writer; import org.gephi.io.exporter.spi.ByteExporter; -import org.gephi.io.exporter.spi.ExporterUI; -import org.gephi.io.exporter.spi.Exporter; import org.gephi.io.exporter.spi.CharacterExporter; +import org.gephi.io.exporter.spi.Exporter; +import org.gephi.io.exporter.spi.ExporterUI; import org.gephi.project.api.Workspace; /** @@ -62,19 +63,19 @@ Development and Distribution License("CDDL") (collectively, the */ public interface ExportController { - public void exportFile(File file) throws IOException; + void exportFile(File file) throws IOException; - public void exportFile(File file, Workspace workspace) throws IOException; + void exportFile(File file, Workspace workspace) throws IOException; - public void exportFile(File file, Exporter fileExporter) throws IOException; + void exportFile(File file, Exporter fileExporter) throws IOException; - public void exportWriter(Writer writer, CharacterExporter characterExporter); + void exportWriter(Writer writer, CharacterExporter characterExporter); - public void exportStream(OutputStream stream, ByteExporter byteExporter); + void exportStream(OutputStream stream, ByteExporter byteExporter); - public Exporter getFileExporter(File file); + Exporter getFileExporter(File file); - public Exporter getExporter(String exporterName); + Exporter getExporter(String exporterName); - public ExporterUI getUI(Exporter exporter); + ExporterUI getUI(Exporter exporter); } diff --git a/modules/ExportAPI/src/main/java/org/gephi/io/exporter/api/FileType.java b/modules/ExportAPI/src/main/java/org/gephi/io/exporter/api/FileType.java index 6eb2ee9c07..bb18ffef43 100644 --- a/modules/ExportAPI/src/main/java/org/gephi/io/exporter/api/FileType.java +++ b/modules/ExportAPI/src/main/java/org/gephi/io/exporter/api/FileType.java @@ -43,24 +43,21 @@ Development and Distribution License("CDDL") (collectively, the package org.gephi.io.exporter.api; /** - * File type definition. A simple class which contains a name and + * File type definition. A simple class which contains a name and * extension for a file type. * * @author Mathieu Bastian */ -public final class FileType -{ +public final class FileType { private final String[] extensions; private final String name; - public FileType(String extension, String name) - { + public FileType(String extension, String name) { this.extensions = new String[] {extension}; this.name = name; } - public FileType(String[] extensions, String name) - { + public FileType(String[] extensions, String name) { this.extensions = extensions; this.name = name; } diff --git a/modules/ExportAPI/src/main/java/org/gephi/io/exporter/impl/ExportControllerImpl.java b/modules/ExportAPI/src/main/java/org/gephi/io/exporter/impl/ExportControllerImpl.java index f124784cdf..0a93f4acaa 100644 --- a/modules/ExportAPI/src/main/java/org/gephi/io/exporter/impl/ExportControllerImpl.java +++ b/modules/ExportAPI/src/main/java/org/gephi/io/exporter/impl/ExportControllerImpl.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.impl; import java.io.BufferedOutputStream; @@ -48,12 +49,13 @@ Development and Distribution License("CDDL") (collectively, the import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.Writer; +import java.nio.charset.StandardCharsets; import org.gephi.io.exporter.api.ExportController; import org.gephi.io.exporter.api.FileType; import org.gephi.io.exporter.spi.ByteExporter; +import org.gephi.io.exporter.spi.CharacterExporter; import org.gephi.io.exporter.spi.Exporter; import org.gephi.io.exporter.spi.ExporterUI; -import org.gephi.io.exporter.spi.CharacterExporter; import org.gephi.io.exporter.spi.FileExporterBuilder; import org.gephi.io.exporter.spi.GraphFileExporterBuilder; import org.gephi.io.exporter.spi.VectorFileExporterBuilder; @@ -64,7 +66,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = ExportController.class) @@ -76,7 +77,8 @@ public class ExportControllerImpl implements ExportController { public ExportControllerImpl() { Lookup.getDefault().lookupAll(GraphFileExporterBuilder.class); Lookup.getDefault().lookupAll(VectorFileExporterBuilder.class); - fileExporterBuilders = Lookup.getDefault().lookupAll(FileExporterBuilder.class).toArray(new FileExporterBuilder[0]); + fileExporterBuilders = + Lookup.getDefault().lookupAll(FileExporterBuilder.class).toArray(new FileExporterBuilder[0]); uis = Lookup.getDefault().lookupAll(ExporterUI.class).toArray(new ExporterUI[0]); } @@ -84,7 +86,8 @@ public ExportControllerImpl() { public void exportFile(File file) throws IOException { Exporter fileExporter = getFileExporter(file); if (fileExporter == null) { - throw new RuntimeException(NbBundle.getMessage(ExportControllerImpl.class, "ExportControllerImpl.error.nomatchingexporter")); + throw new RuntimeException( + NbBundle.getMessage(ExportControllerImpl.class, "ExportControllerImpl.error.nomatchingexporter")); } exportFile(file, fileExporter); } @@ -93,7 +96,8 @@ public void exportFile(File file) throws IOException { public void exportFile(File file, Workspace workspace) throws IOException { Exporter fileExporter = getFileExporter(file); if (fileExporter == null) { - throw new RuntimeException(NbBundle.getMessage(ExportControllerImpl.class, "ExportControllerImpl.error.nomatchingexporter")); + throw new RuntimeException( + NbBundle.getMessage(ExportControllerImpl.class, "ExportControllerImpl.error.nomatchingexporter")); } fileExporter.setWorkspace(workspace); exportFile(file, fileExporter); @@ -128,7 +132,7 @@ public void exportFile(File file, Exporter fileExporter) throws IOException { } catch (IOException ex) { } } else if (fileExporter instanceof CharacterExporter) { - Writer writer = new OutputStreamWriter(new FileOutputStream(file), "UTF-8"); + Writer writer = new OutputStreamWriter(new FileOutputStream(file), StandardCharsets.UTF_8); ((CharacterExporter) fileExporter).setWriter(writer); try { fileExporter.execute(); @@ -262,10 +266,6 @@ private boolean hasExt(File file, String ext) { boolean ret = file.getName().endsWith(ext); - if (!ret) { - return false; - } - - return true; + return ret; } } diff --git a/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/ByteExporter.java b/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/ByteExporter.java index 72fac85121..e30e40f393 100644 --- a/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/ByteExporter.java +++ b/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/ByteExporter.java @@ -39,20 +39,22 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.spi; import java.io.OutputStream; /** * Exporter class for byte streams, when an OutputStream is needed. - * + * * @author Mathieu Bastian */ public interface ByteExporter extends Exporter { /** * Set the stream where to export. - * @param stream the stream the exporter is to write + * + * @param stream the stream the exporter is to write */ - public void setOutputStream(OutputStream stream); + void setOutputStream(OutputStream stream); } diff --git a/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/CharacterExporter.java b/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/CharacterExporter.java index 008fc262e4..34bd59ef92 100644 --- a/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/CharacterExporter.java +++ b/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/CharacterExporter.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.spi; import java.io.Writer; @@ -52,7 +53,8 @@ public interface CharacterExporter extends Exporter { /** * Set the writer where to export. - * @param writer the writer the exporter is to write + * + * @param writer the writer the exporter is to write */ - public void setWriter(Writer writer); + void setWriter(Writer writer); } diff --git a/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/Exporter.java b/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/Exporter.java index acd56978aa..e7ed45e645 100644 --- a/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/Exporter.java +++ b/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/Exporter.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.spi; import org.gephi.project.api.Workspace; @@ -53,20 +54,23 @@ public interface Exporter { /** * Run the export process. - * @return true if the operation is successful, - * false if it has been cancelled + * + * @return true if the operation is successful, + * false if it has been cancelled */ - public boolean execute(); + boolean execute(); /** - * Sets the worksapce from where to export data - * @param workspace the workspace to export + * Returns the workspace from where data are exported + * + * @return the workspace the data are to be exported */ - public void setWorkspace(Workspace workspace); + Workspace getWorkspace(); /** - * Returns the workspace from where data are exported - * @return the workspace the data are to be exported + * Sets the worksapce from where to export data + * + * @param workspace the workspace to export */ - public Workspace getWorkspace(); + void setWorkspace(Workspace workspace); } diff --git a/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/ExporterBuilder.java b/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/ExporterBuilder.java index bdc6503ebc..d4e2f4c32c 100644 --- a/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/ExporterBuilder.java +++ b/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/ExporterBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.spi; import org.gephi.io.exporter.api.ExportController; @@ -58,13 +59,15 @@ public interface ExporterBuilder { /** * Builds a new exporter instance, ready to be used. - * @return a new exporter + * + * @return a new exporter */ - public Exporter buildExporter(); + Exporter buildExporter(); /** * Returns the name of this builder - * @return the name of this exporter + * + * @return the name of this exporter */ - public String getName(); + String getName(); } diff --git a/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/ExporterUI.java b/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/ExporterUI.java index db64ad5827..d0892b1202 100644 --- a/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/ExporterUI.java +++ b/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/ExporterUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.spi; import javax.swing.JPanel; @@ -55,37 +56,38 @@ public interface ExporterUI { * * @return a settings panel, or null */ - public JPanel getPanel(); + JPanel getPanel(); /** * Link the UI to the exporter and therefore to settings values. This method * is called after getPanel() to push settings. * - * @param exporter the exporter that settings is to be set + * @param exporter the exporter that settings is to be set */ - public void setup(Exporter exporter); + void setup(Exporter exporter); /** * Notify UI the settings panel has been closed and that new values can be * written. * - * @param update true if user clicked OK or false - * if CANCEL. + * @param update true if user clicked OK or false + * if CANCEL. */ - public void unsetup(boolean update); + void unsetup(boolean update); /** * Returns true if this UI belongs to the given exporter. * - * @param exporter the exporter that has to be tested - * @return true if the UI is matching with exporter, - * false otherwise. + * @param exporter the exporter that has to be tested + * @return true if the UI is matching with exporter, + * false otherwise. */ - public boolean isUIForExporter(Exporter exporter); + boolean isUIForExporter(Exporter exporter); /** * Returns the exporter display name - * @return the exporter display name + * + * @return the exporter display name */ - public String getDisplayName(); + String getDisplayName(); } diff --git a/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/FileExporterBuilder.java b/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/FileExporterBuilder.java index a281124030..d2e5bebba0 100644 --- a/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/FileExporterBuilder.java +++ b/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/FileExporterBuilder.java @@ -39,20 +39,22 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.spi; import org.gephi.io.exporter.api.FileType; /** * Exporter builder for a particular file format support. - * + * * @author Mathieu Bastian */ public interface FileExporterBuilder extends ExporterBuilder { /** * Get default file types this exporter can deal with. - * @return an array of file types this exporter can read + * + * @return an array of file types this exporter can read */ - public FileType[] getFileTypes(); + FileType[] getFileTypes(); } diff --git a/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/GraphExporter.java b/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/GraphExporter.java index a2f4d17cf5..e7d6d3432c 100644 --- a/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/GraphExporter.java +++ b/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/GraphExporter.java @@ -39,27 +39,30 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.spi; /** * Exporter interface for exporters that export the graph, either complete or * filtered (i.e. visible graph). - * + * * @author Mathieu Bastian */ public interface GraphExporter extends Exporter { /** - * Sets if only the visible graph has to be exported. If false, - * the complete graph is exported. - * @param exportVisible the export visible parameter value + * Returns true if only the visible graph has to be exported. + * + * @return true if only the visible graph has to be exported, + * false for the complete graph. */ - public void setExportVisible(boolean exportVisible); + boolean isExportVisible(); /** - * Returns true if only the visible graph has to be exported. - * @return true if only the visible graph has to be exported, - * false for the complete graph. + * Sets if only the visible graph has to be exported. If false, + * the complete graph is exported. + * + * @param exportVisible the export visible parameter value */ - public boolean isExportVisible(); + void setExportVisible(boolean exportVisible); } diff --git a/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/GraphFileExporterBuilder.java b/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/GraphFileExporterBuilder.java index af820eb6d1..2d626872e3 100644 --- a/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/GraphFileExporterBuilder.java +++ b/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/GraphFileExporterBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.spi; /** @@ -50,8 +51,9 @@ public interface GraphFileExporterBuilder extends FileExporterBuilder { /** * Builds a new graph exporter instance, ready to be used. - * @return a new graph exporter + * + * @return a new graph exporter */ @Override - public GraphExporter buildExporter(); + GraphExporter buildExporter(); } diff --git a/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/VectorExporter.java b/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/VectorExporter.java index 5fb219e4cd..92aba671fa 100644 --- a/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/VectorExporter.java +++ b/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/VectorExporter.java @@ -39,9 +39,8 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ -package org.gephi.io.exporter.spi; -import org.gephi.project.api.Workspace; +package org.gephi.io.exporter.spi; /** * Exporter interface for exporters that export vector graphics. diff --git a/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/VectorFileExporterBuilder.java b/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/VectorFileExporterBuilder.java index 7e6eb1ff2d..8fd4c1b1e1 100644 --- a/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/VectorFileExporterBuilder.java +++ b/modules/ExportAPI/src/main/java/org/gephi/io/exporter/spi/VectorFileExporterBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.spi; /** @@ -50,8 +51,9 @@ public interface VectorFileExporterBuilder extends FileExporterBuilder { /** * Builds a new vector exporter instance, ready to be used. - * @return a new vector exporter + * + * @return a new vector exporter */ @Override - public VectorExporter buildExporter(); + VectorExporter buildExporter(); } diff --git a/modules/ExportAPI/src/main/nbm/manifest.mf b/modules/ExportAPI/src/main/nbm/manifest.mf index ad7e948883..3736ed1e6e 100644 --- a/modules/ExportAPI/src/main/nbm/manifest.mf +++ b/modules/ExportAPI/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/io/exporter/api/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi Core +OpenIDE-Module-Name: Export API \ No newline at end of file diff --git a/modules/ExportAPI/src/main/nbm/module.xml b/modules/ExportAPI/src/main/nbm/module.xml deleted file mode 100644 index f97d704d5f..0000000000 --- a/modules/ExportAPI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle.properties index cef9439b5a..cf0ab03048 100644 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle.properties +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle.properties @@ -1,5 +1,2 @@ -OpenIDE-Module-Display-Category=Gephi Core -OpenIDE-Module-Long-Description=\ - API/SPI for exporters -OpenIDE-Module-Name=Export API +OpenIDE-Module-Long-Description=API/SPI for exporters OpenIDE-Module-Short-Description=API/SPI for exporters diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_ar.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_ca.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_ca.properties new file mode 100644 index 0000000000..b9061ca9c9 --- /dev/null +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_ca.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI for exporters +OpenIDE-Module-Short-Description=API/SPI for exporters diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_cs.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_cs.properties index 5fe95a4786..21456b2e77 100644 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_cs.properties +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_cs.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-23 09\:50+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=API/SPI pro export\u00e9ry - -OpenIDE-Module-Short-Description=API/SPI pro export\u00e9ry +OpenIDE-Module-Long-Description=API/SPI pro exportιry +OpenIDE-Module-Short-Description=API/SPI pro exportιry diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_de.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_de.properties new file mode 100644 index 0000000000..eb1dfc1a6b --- /dev/null +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_de.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI fόr Exporter +OpenIDE-Module-Short-Description=API/SPI fόr Exporter diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_es.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_es.properties index ea926313e1..3a5bf5ba61 100644 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_es.properties +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_es.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:06+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=API/SPI para exportadores - -OpenIDE-Module-Short-Description=API/SPI para exportadores +OpenIDE-Module-Long-Description=API/SPI para exportadores +OpenIDE-Module-Short-Description=API/SPI para exportadores diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_fr.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_fr.properties index b95b2087a9..5b3a2e9ff4 100644 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_fr.properties +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_fr.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:06+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API/SPI des exporteurs - -OpenIDE-Module-Short-Description=API/SPI des exporteurs +OpenIDE-Module-Long-Description=API/SPI des exporteurs +OpenIDE-Module-Short-Description=API/SPI des exporteurs diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_he.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_he.properties new file mode 100644 index 0000000000..b9061ca9c9 --- /dev/null +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_he.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI for exporters +OpenIDE-Module-Short-Description=API/SPI for exporters diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_hu.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_hu.properties new file mode 100644 index 0000000000..3f71a8a4f6 --- /dev/null +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_hu.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Short-Description=API/SPI export\u0151r\u00F6k sz\u00E1m\u00E1ra +OpenIDE-Module-Long-Description=API/SPI export\u0151r\u00F6k sz\u00E1m\u00E1ra diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_it.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_it.properties new file mode 100644 index 0000000000..b9061ca9c9 --- /dev/null +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_it.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI for exporters +OpenIDE-Module-Short-Description=API/SPI for exporters diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_ja.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_ja.properties index 584c3b2a46..ed02485391 100644 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_ja.properties +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_ja.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-19 05\:13+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u30a8\u30af\u30b9\u30dd\u30fc\u30bf\u306e\u305f\u3081\u306eAPI / SPI - -OpenIDE-Module-Short-Description=\u30a8\u30af\u30b9\u30dd\u30fc\u30bf\u306e\u305f\u3081\u306eAPI / SPI +OpenIDE-Module-Long-Description=\u30a8\u30af\u30b9\u30dd\u30fc\u30bf\u306e\u305f\u3081\u306eAPI / SPI +OpenIDE-Module-Short-Description=\u30a8\u30af\u30b9\u30dd\u30fc\u30bf\u306e\u305f\u3081\u306eAPI / SPI diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_ko.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_ko.properties new file mode 100644 index 0000000000..e74ef9459e --- /dev/null +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_ko.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Short-Description=\uB0B4\uBCF4\uB0B4\uAE30 \uB3C4\uAD6C\uC6A9 API/SPI +OpenIDE-Module-Long-Description=\uB0B4\uBCF4\uB0B4\uAE30 \uB3C4\uAD6C\uC6A9 API/SPI diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_nl.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_nl.properties new file mode 100644 index 0000000000..b9061ca9c9 --- /dev/null +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_nl.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI for exporters +OpenIDE-Module-Short-Description=API/SPI for exporters diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_pt_BR.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_pt_BR.properties index 46d29757db..506b50550c 100644 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_pt_BR.properties +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_pt_BR.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 17\:50+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API/SPI de exportadores - -OpenIDE-Module-Short-Description=API/SPI de exportadores +OpenIDE-Module-Long-Description=API/SPI de exportadores +OpenIDE-Module-Short-Description=API/SPI de exportadores diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_ro.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_ro.properties new file mode 100644 index 0000000000..6ae99ff24c --- /dev/null +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_ro.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Long-Description=API/SPI pentru exportatori +OpenIDE-Module-Short-Description=API/SPI pentru exportatori diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_ru.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_ru.properties index 5fc9b3f0f6..81bf58e003 100644 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_ru.properties +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_ru.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-26 07\:36+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=API/SPI \u0434\u043b\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 - -OpenIDE-Module-Short-Description=API/SPI \u0434\u043b\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 +OpenIDE-Module-Long-Description=API/SPI \u0434\u043b\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 +OpenIDE-Module-Short-Description=API/SPI \u0434\u043b\u044f \u043c\u043e\u0434\u0443\u043b\u0435\u0439 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_th.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_tr.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_tr.properties new file mode 100644 index 0000000000..b9061ca9c9 --- /dev/null +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_tr.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI for exporters +OpenIDE-Module-Short-Description=API/SPI for exporters diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_uk.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_uk.properties new file mode 100644 index 0000000000..81bb4ff2e2 --- /dev/null +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_uk.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI \u0434\u043B\u044F \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u0435\u0440\u0456\u0432 +OpenIDE-Module-Short-Description=API/SPI \u0434\u043B\u044F \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u0435\u0440\u0456\u0432 diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_zh_CN.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_zh_CN.properties index 767f13d52a..1a21c300fa 100644 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_zh_CN.properties +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_zh_CN.properties @@ -1,10 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:14+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u8f93\u51fa\u7684\u5e94\u7528\u7a0b\u5e8f\u754c\u9762/\u5355\u4e2a\u7a0b\u5e8f\u542f\u52a8 - -OpenIDE-Module-Short-Description=\u8f93\u51fa\u7684\u5e94\u7528\u7a0b\u5e8f\u754c\u9762/\u5355\u4e2a\u7a0b\u5e8f\u542f\u52a8 +OpenIDE-Module-Long-Description=\u8f93\u51fa\u7684\u5e94\u7528\u7a0b\u5e8f\u754c\u9762/\u5355\u4e2a\u7a0b\u5e8f\u542f\u52a8 +OpenIDE-Module-Short-Description=\u8f93\u51fa\u7684\u5e94\u7528\u7a0b\u5e8f\u754c\u9762/\u5355\u4e2a\u7a0b\u5e8f\u542f\u52a8 diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_zh_TW.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_zh_TW.properties new file mode 100644 index 0000000000..b9061ca9c9 --- /dev/null +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/Bundle_zh_TW.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI for exporters +OpenIDE-Module-Short-Description=API/SPI for exporters diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/cs.po b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/cs.po deleted file mode 100644 index 309c0c3279..0000000000 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/cs.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-23 09:50+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI pro exportΓ©ry" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI pro exportΓ©ry" diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/es.po b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/es.po deleted file mode 100644 index 57e9d00258..0000000000 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/es.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:06+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI para exportadores" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI para exportadores" diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/fr.po b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/fr.po deleted file mode 100644 index 9dd1beb857..0000000000 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/fr.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:06+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI des exporteurs" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI des exporteurs" diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/ja.po b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/ja.po deleted file mode 100644 index a4c9db5ea9..0000000000 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-19 05:13+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "エクスポータγγŸγ‚γAPI / SPI" - -msgid "OpenIDE-Module-Short-Description" -msgstr "エクスポータγγŸγ‚γAPI / SPI" diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/org-gephi-io-exporter-api.pot b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/org-gephi-io-exporter-api.pot deleted file mode 100644 index c8e8dc0250..0000000000 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/org-gephi-io-exporter-api.pot +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI for exporters" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI for exporters" diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/package.html b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/package.html index 706ba7e5f2..1c2db5e230 100644 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/package.html +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/package.html @@ -1,21 +1,26 @@ - - - - API for exporting data to any support. The API supports File, Writer and - OutputStream. -

    How to export a graph file

    -
    -ExportController ec = Lookup.getDefault().lookup(ExportController.class);
    -ec.exportFile(new File("export.gexf"));
    -        
    -

    How to export to a String

    -
    -ExportController ec = Lookup.getDefault().lookup(ExportController.class);
    -Exporter exporter = ec.getExporter("gexf");
    -CharacterExporter characterExporter = (CharacterExporter)exporter;
    -StringWriter stringWriter = new StringWriter();
    -ec.exportWriter(stringWriter, characterExporter);
    -String result = stringWriter.toString();
    -        
    - + + + + org.gephi.io.exporter.api + + +

    + API for exporting data to any support. The API supports File, Writer and + OutputStream. +

    +

    How to export a graph file

    +
    +ExportController ec = Lookup.getDefault().lookup(ExportController.class);
    +ec.exportFile(new File("export.gexf"));
    +        
    +

    How to export to a String

    +
    +ExportController ec = Lookup.getDefault().lookup(ExportController.class);
    +Exporter exporter = ec.getExporter("gexf");
    +CharacterExporter characterExporter = (CharacterExporter)exporter;
    +StringWriter stringWriter = new StringWriter();
    +ec.exportWriter(stringWriter, characterExporter);
    +String result = stringWriter.toString();
    +        
    + \ No newline at end of file diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/pt_BR.po b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/pt_BR.po deleted file mode 100644 index a00b48ca1b..0000000000 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/pt_BR.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 17:50+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI de exportadores" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI de exportadores" diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/ru.po b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/ru.po deleted file mode 100644 index 617bc4bd95..0000000000 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/ru.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-26 07:36+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI для ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ экспорта" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI для ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΉ экспорта" diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/zh_CN.po b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/zh_CN.po deleted file mode 100644 index 31dc0b501f..0000000000 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/api/zh_CN.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:14+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "θΎ“ε‡Ίηš„εΊ”η”¨η¨‹εΊη•Œι’/单δΈͺη¨‹εΊε―εŠ¨" - -msgid "OpenIDE-Module-Short-Description" -msgstr "θΎ“ε‡Ίηš„εΊ”η”¨η¨‹εΊη•Œι’/单δΈͺη¨‹εΊε―εŠ¨" diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_ar.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_ca.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_ca.properties new file mode 100644 index 0000000000..e297ce7c66 --- /dev/null +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_ca.properties @@ -0,0 +1 @@ +ExportControllerImpl.error.nomatchingexporter=Impossible to find a compatible Exporter.\nThe file format is not supported. diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_cs.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_cs.properties index 04ad78214d..92131a339f 100644 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_cs.properties +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_cs.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-23 09\:50+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -ExportControllerImpl.error.nomatchingexporter=Nelze nal\u00e9zt kompatibiln\u00edho export\u00e9ra.\nForm\u00e1t souboru nen\u00ed podporov\u00e1n. +# ExportControllerImpl.error.nomatchingexporter = Impossible to find a compatible Exporter.\nThe file format is not supported. diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_de.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_de.properties new file mode 100644 index 0000000000..31c4995598 --- /dev/null +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_de.properties @@ -0,0 +1,3 @@ +# ExportControllerImpl.error.nomatchingexporter = Impossible to find a compatible Exporter.\nThe file format is not supported. + +ExportControllerImpl.error.nomatchingexporter=Es wurde kein kompatibler Exporter gefunden.\nDas Dateiformat wird nicht unterst\u00FCtzt. diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_es.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_es.properties index cd76253b35..cb27fd0605 100644 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_es.properties +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_es.properties @@ -1,10 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-31 12\:42+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -ExportControllerImpl.error.nomatchingexporter=Imposible encontrar un exportador compatible.\nEl formato de archivo no est\u00e1 soportado. +ExportControllerImpl.error.nomatchingexporter = Imposible encontrar un exportador compatible.\nEl formato de archivo no estα soportado. diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_fr.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_fr.properties index 7f33929904..11e4cd3a25 100644 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_fr.properties +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_fr.properties @@ -1,10 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-31 13\:00+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -ExportControllerImpl.error.nomatchingexporter=Impossible de trouver un export compatible.\nLe format de fichier n'est pas support\u00e9. +ExportControllerImpl.error.nomatchingexporter = Impossible de trouver un export compatible.\nLe format de fichier n'est pas supportι. diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_he.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_he.properties new file mode 100644 index 0000000000..e297ce7c66 --- /dev/null +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_he.properties @@ -0,0 +1 @@ +ExportControllerImpl.error.nomatchingexporter=Impossible to find a compatible Exporter.\nThe file format is not supported. diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_hu.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_hu.properties new file mode 100644 index 0000000000..ac216fa042 --- /dev/null +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_hu.properties @@ -0,0 +1,3 @@ + + +ExportControllerImpl.error.nomatchingexporter=Nem lehet kompatibilis export\u0151rt tal\u00E1lni.\nA f\u00E1jlform\u00E1tum nem t\u00E1mogatott. diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_it.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_it.properties new file mode 100644 index 0000000000..e297ce7c66 --- /dev/null +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_it.properties @@ -0,0 +1 @@ +ExportControllerImpl.error.nomatchingexporter=Impossible to find a compatible Exporter.\nThe file format is not supported. diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_ja.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_ja.properties index cffdcf7683..92131a339f 100644 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_ja.properties +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_ja.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-19 07\:03+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -ExportControllerImpl.error.nomatchingexporter=\u4e92\u63db\u6027\u306e\u3042\u308b\u30a8\u30af\u30b9\u30dd\u30fc\u30bf\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002\n\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 +# ExportControllerImpl.error.nomatchingexporter = Impossible to find a compatible Exporter.\nThe file format is not supported. diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_ko.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_ko.properties new file mode 100644 index 0000000000..a2b6cc2033 --- /dev/null +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_ko.properties @@ -0,0 +1,3 @@ + + +ExportControllerImpl.error.nomatchingexporter=\uD638\uD658\uB418\uB294 \uB0B4\uBCF4\uB0B4\uAE30 \uB3C4\uAD6C\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\n\uD574\uB2F9 \uD30C\uC77C \uD3EC\uB9F7\uC740 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_nl.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_nl.properties new file mode 100644 index 0000000000..e297ce7c66 --- /dev/null +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_nl.properties @@ -0,0 +1 @@ +ExportControllerImpl.error.nomatchingexporter=Impossible to find a compatible Exporter.\nThe file format is not supported. diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_pt.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_pt.properties new file mode 100644 index 0000000000..4fb52e88a4 --- /dev/null +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_pt.properties @@ -0,0 +1 @@ +ExportControllerImpl.error.nomatchingexporter=Impossνvel encontrar um exportador compatνvel.\nO formato do ficheiro nγo ι apoiado. diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_pt_BR.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_pt_BR.properties index 0445c6dfdb..c3f7f4d6d6 100644 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_pt_BR.properties +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_pt_BR.properties @@ -1,9 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 17\:49+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n +# ExportControllerImpl.error.nomatchingexporter = Impossible to find a compatible Exporter.\nThe file format is not supported. -ExportControllerImpl.error.nomatchingexporter=Imposs\u00edvel encontrar um Exportador compat\u00edvel.\nEste formato de arquivo n\u00e3o \u00e9 suportado. +ExportControllerImpl.error.nomatchingexporter=Imposs\u00EDvel encontrar uma exporta\u00E7\u00E3o compat\u00EDvel.\nO formato do arquivo n\u00E3o \u00E9 suportado. diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_ro.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_ro.properties new file mode 100644 index 0000000000..e81397eaec --- /dev/null +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_ro.properties @@ -0,0 +1,3 @@ + + +ExportControllerImpl.error.nomatchingexporter=Imposibil de g\u0103sit un exportator compatibil.\nFormatul de fi\u0219ier nu este acceptat. diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_ru.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_ru.properties index 7275930e27..92131a339f 100644 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_ru.properties +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_ru.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-26 07\:35+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -ExportControllerImpl.error.nomatchingexporter=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043d\u0430\u0439\u0442\u0438 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 \u043c\u043e\u0434\u0443\u043b\u044c \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430.\n\u0414\u0430\u043d\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0444\u0430\u0439\u043b\u0430 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f. +# ExportControllerImpl.error.nomatchingexporter = Impossible to find a compatible Exporter.\nThe file format is not supported. diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_th.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_tr.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_tr.properties new file mode 100644 index 0000000000..e297ce7c66 --- /dev/null +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_tr.properties @@ -0,0 +1 @@ +ExportControllerImpl.error.nomatchingexporter=Impossible to find a compatible Exporter.\nThe file format is not supported. diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_uk.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_uk.properties new file mode 100644 index 0000000000..df7bac5784 --- /dev/null +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_uk.properties @@ -0,0 +1 @@ +ExportControllerImpl.error.nomatchingexporter=\u041D\u0435\u043C\u043E\u0436\u043B\u0438\u0432\u043E \u0437\u043D\u0430\u0439\u0442\u0438 \u0441\u0443\u043C\u0456\u0441\u043D\u0438\u0439 \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u0435\u0440.\n\u0424\u043E\u0440\u043C\u0430\u0442 \u0444\u0430\u0439\u043B\u0443 \u043D\u0435 \u043F\u0456\u0434\u0442\u0440\u0438\u043C\u0443\u0454\u0442\u044C\u0441\u044F. diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_zh_CN.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_zh_CN.properties index e31f074439..7680f140a9 100644 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_zh_CN.properties +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_zh_CN.properties @@ -1,8 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:14+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n +# ExportControllerImpl.error.nomatchingexporter = Impossible to find a compatible Exporter.\nThe file format is not supported. -ExportControllerImpl.error.nomatchingexporter=\u4e0d\u80fd\u627e\u5230\u4e00\u4e2a\u517c\u5bb9\u7684\u8f93\u51fa\u3002\u4e0d\u652f\u6301\u7684\u6587\u4ef6\u683c\u5f0f\u3002 +ExportControllerImpl.error.nomatchingexporter=\u672A\u627E\u5230\u517C\u5BB9\u7684\u8F93\u51FA\u3002\n\u4E0D\u652F\u6301\u8BE5\u6587\u4EF6\u683C\u5F0F\u3002 diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_zh_TW.properties b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_zh_TW.properties new file mode 100644 index 0000000000..e297ce7c66 --- /dev/null +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/Bundle_zh_TW.properties @@ -0,0 +1 @@ +ExportControllerImpl.error.nomatchingexporter=Impossible to find a compatible Exporter.\nThe file format is not supported. diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/cs.po b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/cs.po deleted file mode 100644 index ceea6bce98..0000000000 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/cs.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-23 09:50+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "ExportControllerImpl.error.nomatchingexporter" -msgstr "Nelze nalΓ©zt kompatibilnΓ­ho exportΓ©ra.\nFormΓ‘t souboru nenΓ­ podporovΓ‘n." diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/es.po b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/es.po deleted file mode 100644 index 3b21bd673b..0000000000 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/es.po +++ /dev/null @@ -1,23 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-31 12:42+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "ExportControllerImpl.error.nomatchingexporter" -msgstr "Imposible encontrar un exportador compatible.\nEl formato de archivo no estΓ‘ soportado." diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/fr.po b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/fr.po deleted file mode 100644 index 21de91aaa3..0000000000 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/fr.po +++ /dev/null @@ -1,23 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-31 13:00+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "ExportControllerImpl.error.nomatchingexporter" -msgstr "Impossible de trouver un export compatible.\nLe format de fichier n'est pas supportΓ©." diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/ja.po b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/ja.po deleted file mode 100644 index 03ae21fc51..0000000000 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/ja.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-19 07:03+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "ExportControllerImpl.error.nomatchingexporter" -msgstr "互換性γγ‚γ‚‹γ‚¨γ‚―γ‚ΉγƒγƒΌγ‚ΏγŒθ¦‹γ€γ‹γ‚ŠγΎγ›γ‚“γ€‚\nこγγƒ•γ‚‘γ‚€γƒ«ε½’εΌγ―γ‚΅γƒγƒΌγƒˆγ•γ‚Œγ¦γ„γΎγ›γ‚“γ€‚" diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/org-gephi-io-exporter-impl.pot b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/org-gephi-io-exporter-impl.pot deleted file mode 100644 index 9bd8fb9a79..0000000000 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/org-gephi-io-exporter-impl.pot +++ /dev/null @@ -1,21 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "ExportControllerImpl.error.nomatchingexporter" -msgstr "" -"Impossible to find a compatible Exporter.\n" -"The file format is not supported." diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/pt_BR.po b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/pt_BR.po deleted file mode 100644 index 2a292c380f..0000000000 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/pt_BR.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 17:49+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "ExportControllerImpl.error.nomatchingexporter" -msgstr "ImpossΓ­vel encontrar um Exportador compatΓ­vel.\nEste formato de arquivo nΓ£o Γ© suportado." diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/ru.po b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/ru.po deleted file mode 100644 index 8d51ec0ce6..0000000000 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/ru.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-26 07:35+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "ExportControllerImpl.error.nomatchingexporter" -msgstr "НС ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π½Π°ΠΉΡ‚ΠΈ совмСстимый ΠΌΠΎΠ΄ΡƒΠ»ΡŒ экспорта.\nΠ”Π°Π½Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„Π°ΠΉΠ»Π° Π½Π΅ поддСрТиваСтся." diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/zh_CN.po b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/zh_CN.po deleted file mode 100644 index a1db56c8ca..0000000000 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/impl/zh_CN.po +++ /dev/null @@ -1,21 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:14+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "ExportControllerImpl.error.nomatchingexporter" -msgstr "δΈθƒ½ζ‰Ύεˆ°δΈ€δΈͺε…ΌεΉηš„θΎ“ε‡Ίγ€‚δΈζ”―ζŒηš„ζ–‡δ»Άζ ΌεΌγ€‚" diff --git a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/spi/package.html b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/spi/package.html index fb6e736e26..1cd0af780a 100644 --- a/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/spi/package.html +++ b/modules/ExportAPI/src/main/resources/org/gephi/io/exporter/spi/package.html @@ -1,29 +1,53 @@ - - - - Interfaces for creating new data exporters. -

    Create a new Exporter

    -
    1. Create a new module and set Export API, - Project API and Utilities API as dependencies.
    2. -
    3. Create a new builder class, which implements: -
      • GraphFileExporterBuilder (graph)
      • -
      • VectorFileExporterBuilder (vector graphics)
      • -
      • ExportBuilder (custom)
      -
    4. Add @ServiceProvider annotation to your class to declare - you are implementing an Exporter service. Put GraphFileExporterBuilder.class - as the annotation service parameter for graph files, - VectorFileExporterBuilder.class for vector graphics and - ExportBuilder.class for the rest.
    5. -
    6. Create a new exporter class, which implements GraphExporter, - VectorExporter or simply Exporter.
    7. -
    8. Implement also ByteExporter interface for byte streams or - CharacterExporter for texts.
    9. -
    10. In the builder, return a new instance of your exporter in the buildExporter() method.
    11. -
    12. For settings UI, create a new ExporterUI implementation and add the - @ServiceProvider annotation to it.
    13. -
    -

    To let your export task be cancelled and its progress watched, implement - LongTask interface. Add LongTask API as dependency to your module first.

    - - - + + + + org.gephi.io.exporter.spi + + +

    + Interfaces for creating new data exporters. +

    +

    Create a new Exporter

    +
      +
    1. + Create a new module and set Export API, + Project API and Utilities API as dependencies. +
    2. +
    3. + Create a new builder class, which implements: +
        +
      • GraphFileExporterBuilder (graph)
      • +
      • VectorFileExporterBuilder (vector graphics)
      • +
      • ExportBuilder (custom)
      • +
      +
    4. +
    5. + Add @ServiceProvider annotation to your class to declare + you are implementing an Exporter service. Put GraphFileExporterBuilder.class + as the annotation service parameter for graph files, + VectorFileExporterBuilder.class for vector graphics and + ExportBuilder.class for the rest. +
    6. +
    7. + Create a new exporter class, which implements GraphExporter, + VectorExporter or simply Exporter. +
    8. +
    9. + Implement also ByteExporter interface for byte streams or + CharacterExporter for texts. +
    10. +
    11. + In the builder, return a new instance of your exporter in the buildExporter() method. +
    12. +
    13. + For settings UI, create a new ExporterUI implementation and add the + @ServiceProvider annotation to it. +
    14. +
    +

    + To let your export task be cancelled and its progress watched, implement + LongTask interface. Add LongTask API as dependency to your module first. +

    + + + diff --git a/modules/ExportAPI/src/main/resources/overview.html b/modules/ExportAPI/src/main/resources/overview.html index 55b139430a..95974392dc 100644 --- a/modules/ExportAPI/src/main/resources/overview.html +++ b/modules/ExportAPI/src/main/resources/overview.html @@ -1,12 +1,17 @@ - + + + Export API + - Export API/SPI provides the infrastructure for exporting data to any - support and define new exporters. +

    + Export API/SPI provides the infrastructure for exporting data to any + support and define new exporters. +

    Exporters are performing the export task. Various exporters interface can be implemented, currently for exporting either Graph or - Vectorial files. + Image files.

    diff --git a/modules/ExportPlugin/pom.xml b/modules/ExportPlugin/pom.xml index 66ca736b8e..1a5d96bb33 100644 --- a/modules/ExportPlugin/pom.xml +++ b/modules/ExportPlugin/pom.xml @@ -4,22 +4,17 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. - org.gephi io-exporter-plugin - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm ExportPlugin - - ${project.groupId} - dynamic-api - ${project.groupId} graph-api @@ -36,6 +31,10 @@ ${project.groupId} utils-longtask + + ${project.groupId} + utils + ${project.groupId} core-library-wrapper @@ -48,12 +47,31 @@ org.netbeans.api org-openide-util + + org.netbeans.modules + org-netbeans-core-startup + provided + + + + + ${project.groupId} + graph-api + test-jar + test + + + org.xmlunit + xmlunit-core + 2.10.0 + test + - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderCSV.java b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderCSV.java index 9eeaa83d1e..34d0bd357a 100644 --- a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderCSV.java +++ b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderCSV.java @@ -38,7 +38,8 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.io.exporter.plugin; import org.gephi.io.exporter.api.FileType; @@ -48,7 +49,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = GraphFileExporterBuilder.class) @@ -61,8 +61,9 @@ public GraphExporter buildExporter() { @Override public FileType[] getFileTypes() { - FileType ft = new FileType(".csv", NbBundle.getMessage(ExporterBuilderCSV.class, "fileType_CSV_Name")); - return new FileType[]{ft}; + FileType ft = new FileType(new String[] {".csv", ".edges"}, + NbBundle.getMessage(ExporterBuilderCSV.class, "fileType_CSV_Name")); + return new FileType[] {ft}; } @Override diff --git a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderDL.java b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderDL.java index d6d1c56a10..605bb4c98d 100644 --- a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderDL.java +++ b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderDL.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.plugin; import org.gephi.io.exporter.api.FileType; @@ -48,22 +49,21 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; @ServiceProvider(service = GraphFileExporterBuilder.class) -public class ExporterBuilderDL implements GraphFileExporterBuilder -{ +public class ExporterBuilderDL implements GraphFileExporterBuilder { @Override public GraphExporter buildExporter() { - return new ExporterDL(); + return new ExporterDL(); } @Override public FileType[] getFileTypes() { - return new FileType[]{new FileType(".dl", NbBundle.getMessage(ExporterBuilderCSV.class, "fileType_DL_Name"))}; + return new FileType[] {new FileType(".dl", NbBundle.getMessage(ExporterBuilderCSV.class, "fileType_DL_Name"))}; } @Override public String getName() { return "DL"; } - + } diff --git a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderGDF.java b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderGDF.java index 2872fcd2c4..c7bae6d7fe 100644 --- a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderGDF.java +++ b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderGDF.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.plugin; import org.gephi.io.exporter.api.FileType; @@ -48,7 +49,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = GraphFileExporterBuilder.class) @@ -62,7 +62,7 @@ public GraphExporter buildExporter() { @Override public FileType[] getFileTypes() { FileType ft = new FileType(".gdf", NbBundle.getMessage(ExporterBuilderGDF.class, "fileType_GDF_Name")); - return new FileType[]{ft}; + return new FileType[] {ft}; } @Override diff --git a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderGEXF.java b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderGEXF.java index fbdd7a92a1..5303852663 100644 --- a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderGEXF.java +++ b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderGEXF.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.plugin; import org.gephi.io.exporter.api.FileType; @@ -48,7 +49,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = GraphFileExporterBuilder.class) @@ -62,7 +62,7 @@ public GraphExporter buildExporter() { @Override public FileType[] getFileTypes() { FileType ft = new FileType(".gexf", NbBundle.getMessage(ExporterBuilderGEXF.class, "fileType_GEXF_Name")); - return new FileType[]{ft}; + return new FileType[] {ft}; } @Override diff --git a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderGML.java b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderGML.java index 255d5e8bbe..640c5eb7e3 100644 --- a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderGML.java +++ b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderGML.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.plugin; import org.gephi.io.exporter.api.FileType; @@ -47,7 +48,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author megaterik */ @ServiceProvider(service = GraphFileExporterBuilder.class) @@ -60,7 +60,7 @@ public GraphExporter buildExporter() { @Override public FileType[] getFileTypes() { - return new FileType[]{new FileType(".gml", "GML files")}; + return new FileType[] {new FileType(".gml", "GML files")}; } @Override diff --git a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderGraphML.java b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderGraphML.java index 6ba1566940..df70be8dcf 100644 --- a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderGraphML.java +++ b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderGraphML.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.plugin; import org.gephi.io.exporter.api.FileType; @@ -48,7 +49,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = GraphFileExporterBuilder.class) @@ -61,8 +61,9 @@ public GraphExporter buildExporter() { @Override public FileType[] getFileTypes() { - FileType ft = new FileType(".graphml", NbBundle.getMessage(ExporterBuilderGraphML.class, "fileType_GraphML_Name")); - return new FileType[]{ft}; + FileType ft = + new FileType(".graphml", NbBundle.getMessage(ExporterBuilderGraphML.class, "fileType_GraphML_Name")); + return new FileType[] {ft}; } @Override diff --git a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderJson.java b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderJson.java new file mode 100644 index 0000000000..7644bf333d --- /dev/null +++ b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderJson.java @@ -0,0 +1,27 @@ +package org.gephi.io.exporter.plugin; + +import org.gephi.io.exporter.api.FileType; +import org.gephi.io.exporter.spi.GraphExporter; +import org.gephi.io.exporter.spi.GraphFileExporterBuilder; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +@ServiceProvider(service = GraphFileExporterBuilder.class) +public class ExporterBuilderJson implements GraphFileExporterBuilder { + + @Override + public GraphExporter buildExporter() { + return new ExporterJson(); + } + + @Override + public FileType[] getFileTypes() { + FileType ft = new FileType(".json", NbBundle.getMessage(ExporterBuilderJson.class, "fileType_Json_Name")); + return new FileType[] {ft}; + } + + @Override + public String getName() { + return "Json"; + } +} diff --git a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderPajek.java b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderPajek.java index e951777f71..76403fe8b8 100644 --- a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderPajek.java +++ b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderPajek.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.plugin; import org.gephi.io.exporter.api.FileType; @@ -48,7 +49,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Daniel Bernardes */ @ServiceProvider(service = GraphFileExporterBuilder.class) @@ -62,7 +62,7 @@ public GraphExporter buildExporter() { @Override public FileType[] getFileTypes() { FileType ft = new FileType(".net", NbBundle.getMessage(ExporterBuilderCSV.class, "fileType_Pajek_Name")); - return new FileType[]{ft}; + return new FileType[] {ft}; } @Override diff --git a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderSpreadsheet.java b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderSpreadsheet.java new file mode 100644 index 0000000000..21fa616508 --- /dev/null +++ b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderSpreadsheet.java @@ -0,0 +1,73 @@ +/* +Copyright 2008-2017 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2017 Gephi Consortium. + */ + +package org.gephi.io.exporter.plugin; + +import org.gephi.io.exporter.api.FileType; +import org.gephi.io.exporter.spi.GraphExporter; +import org.gephi.io.exporter.spi.GraphFileExporterBuilder; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +/** + * @author Eduardo Ramos + */ +@ServiceProvider(service = GraphFileExporterBuilder.class) +public class ExporterBuilderSpreadsheet implements GraphFileExporterBuilder { + + @Override + public GraphExporter buildExporter() { + return new ExporterSpreadsheet(); + } + + @Override + public FileType[] getFileTypes() { + FileType ft = new FileType(new String[] {".csv", ".tsv"}, + NbBundle.getMessage(ExporterBuilderSpreadsheet.class, "fileType_Spreadsheet_Name")); + return new FileType[] {ft}; + } + + @Override + public String getName() { + return "Spreadsheet"; + } +} diff --git a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderVNA.java b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderVNA.java index 65c3ee63bc..1d533369d2 100644 --- a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderVNA.java +++ b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterBuilderVNA.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.plugin; import org.gephi.io.exporter.api.FileType; @@ -48,11 +49,10 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author megaterik */ @ServiceProvider(service = GraphFileExporterBuilder.class) -public class ExporterBuilderVNA implements GraphFileExporterBuilder{ +public class ExporterBuilderVNA implements GraphFileExporterBuilder { @Override public GraphExporter buildExporter() { return new ExporterVNA(); @@ -60,12 +60,13 @@ public GraphExporter buildExporter() { @Override public FileType[] getFileTypes() { - return new FileType[]{new FileType(".vna", NbBundle.getMessage(ExporterBuilderVNA.class, "fileType_VNA_Name"))}; + return new FileType[] { + new FileType(".vna", NbBundle.getMessage(ExporterBuilderVNA.class, "fileType_VNA_Name"))}; } @Override public String getName() { return "vna"; } - + } diff --git a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterCSV.java b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterCSV.java index 35df9030d0..437e14cb78 100644 --- a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterCSV.java +++ b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterCSV.java @@ -39,16 +39,22 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.plugin; import java.io.IOException; import java.io.Writer; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; import java.util.ArrayList; import java.util.List; +import java.util.Locale; import org.gephi.graph.api.Edge; +import org.gephi.graph.api.EdgeIterable; import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphModel; import org.gephi.graph.api.Node; +import org.gephi.graph.api.NodeIterable; import org.gephi.io.exporter.spi.CharacterExporter; import org.gephi.io.exporter.spi.GraphExporter; import org.gephi.project.api.Workspace; @@ -56,14 +62,20 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.utils.progress.Progress; import org.gephi.utils.progress.ProgressTicket; -/** - * - * @author Mathieu Bastian - */ public class ExporterCSV implements GraphExporter, CharacterExporter, LongTask { private static final String SEPARATOR = ";"; private static final String EOL = "\n"; + /** + * Formatter for limiting precision to 6 decimals, avoiding precision errors (epsilon). + */ + private static final DecimalFormat FORMAT = new DecimalFormat("0.######"); + + static { + DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance(Locale.ENGLISH); + FORMAT.setDecimalFormatSymbols(symbols); + } + //Settings private boolean edgeWeight = true; private boolean writeZero = true; @@ -79,16 +91,16 @@ public class ExporterCSV implements GraphExporter, CharacterExporter, LongTask { @Override public boolean execute() { GraphModel graphModel = workspace.getLookup().lookup(GraphModel.class); - Graph graph = null; - if (exportVisible) { - graph = graphModel.getGraphVisible(); - } else { - graph = graphModel.getGraph(); - } + Graph graph = exportVisible ? graphModel.getGraphVisible() : graphModel.getGraph(); + + graph.readLock(); try { exportData(graph); } catch (Exception e) { throw new RuntimeException(e); + } finally { + graph.readUnlock(); + Progress.finish(progressTicket); } return !cancel; @@ -102,26 +114,23 @@ private void exportData(Graph graph) throws Exception { if (!list) { if (header) { writer.append(SEPARATOR); - Node[] nodes = graph.getNodes().toArray(); - for (int i = 0; i < nodes.length; i++) { - writeMatrixNode(nodes[i], i < nodes.length - 1); + int i = 0; + NodeIterable itr = graph.getNodes(); + for (Node node : itr) { + writeMatrixNode(node, i++ < max - 1); + if (cancel) { + itr.doBreak(); + return; + } } writer.append(EOL); } } if (list) { - Node[] nodes = graph.getNodes().toArray(); - for (int i = 0; i < nodes.length; i++) { - Node n = nodes[i]; - List neighbours = new ArrayList(); - for (Edge e : graph.getEdges(n)) { - if (!e.isDirected() || (e.isDirected() && n == e.getSource())) { - Node m = graph.getOpposite(n, e); - neighbours.add(m); - } - } - + NodeIterable itr = graph.getNodes(); + for (Node n : itr) { + List neighbours = new ArrayList<>(); for (Edge e : graph.getEdges(n)) { if (!e.isDirected() || (e.isDirected() && n == e.getSource())) { Node m = graph.getOpposite(n, e); @@ -135,47 +144,54 @@ private void exportData(Graph graph) throws Exception { } writer.append(EOL); + + if (cancel) { + itr.doBreak(); + return; + } } } else { Node[] nodes = graph.getNodes().toArray(); for (Node n : nodes) { if (cancel) { - break; + return; } writeMatrixNode(n, true); for (int j = 0; j < nodes.length; j++) { Node m = nodes[j]; - Edge e = graph.getEdge(n, m); - writeEdge(e, j < nodes.length - 1); + EdgeIterable edges = graph.getEdges(n, m); + writeEdge(edges, j < nodes.length - 1); } Progress.progress(progressTicket); writer.append(EOL); } } - graph.readUnlockAll(); - Progress.finish(progressTicket); } - private void writeEdge(Edge edge, boolean writeSeparator) throws IOException { - if (edge != null) { + private void writeEdge(EdgeIterable edges, boolean writeSeparator) throws IOException { + float weight = 0; + boolean anyEdge = false; + for (Edge edge : edges) { + anyEdge = true; + weight += edge.getWeight(); + } + + if (anyEdge) { if (edgeWeight) { - writer.append(Double.toString(edge.getWeight())); + writer.append(FORMAT.format(weight)); } else { - writer.append(Double.toString(1.0)); - } - if (writeSeparator) { - writer.append(SEPARATOR); + writer.append(FORMAT.format(1.0)); } - } else { if (writeZero) { writer.append("0"); } - if (writeSeparator) { - writer.append(SEPARATOR); - } + } + + if (writeSeparator) { + writer.append(SEPARATOR); } } diff --git a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterDL.java b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterDL.java index f6464dcd52..05fad04c86 100644 --- a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterDL.java +++ b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterDL.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.plugin; import java.io.IOException; @@ -47,27 +48,30 @@ Development and Distribution License("CDDL") (collectively, the import java.util.HashSet; import java.util.logging.Level; import java.util.logging.Logger; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.graph.api.*; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.EdgeIterable; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.NodeIterable; import org.gephi.io.exporter.spi.CharacterExporter; import org.gephi.io.exporter.spi.GraphExporter; import org.gephi.project.api.Workspace; import org.gephi.utils.longtask.spi.LongTask; +import org.gephi.utils.progress.Progress; import org.gephi.utils.progress.ProgressTicket; import org.openide.util.Lookup; public class ExporterDL implements GraphExporter, CharacterExporter, LongTask { + ProgressTicket progressTicket; private boolean exportVisible = false; private Workspace workspace; private Writer writer; - private GraphModel graphModel; - private AttributeModel attributeModel; private boolean cancel = false; - ProgressTicket progressTicket; private boolean useMatrixFormat = false; private boolean useListFormat = true; - private boolean exportDynamicWeight = true; private boolean makeSymmetricMatrix = false; public boolean isMakeSymmetricMatrix() { @@ -95,60 +99,52 @@ public void setUseMatrixFormat(boolean useMatrixFormat) { } @Override - public void setExportVisible(boolean exportVisible) { - this.exportVisible = exportVisible; + public boolean isExportVisible() { + return exportVisible; } @Override - public boolean isExportVisible() { - return exportVisible; + public void setExportVisible(boolean exportVisible) { + this.exportVisible = exportVisible; } @Override public boolean execute() { - progressTicket.start(); GraphController graphController = Lookup.getDefault().lookup(GraphController.class); - attributeModel = graphController.getAttributeModel(workspace); - graphModel = graphController.getGraphModel(workspace); - Graph graph = null; - if (exportVisible) { - graph = graphModel.getGraphVisible(); - } else { - graph = graphModel.getGraph(); - } + GraphModel graphModel = graphController.getGraphModel(workspace); + Graph graph = exportVisible ? graphModel.getGraphVisible() : graphModel.getGraph(); + graph.readLock(); - NodeIterable nodeIterable = graph.getNodes(); + Progress.start(progressTicket, graph.getNodeCount()); - //use labels only if every node has label and no two nodes have the same label - boolean useLabels = true; - while (nodeIterable.iterator().hasNext()) { - if (cancel) { - break; + try { + //use labels only if every node has label: + boolean useLabels = true; + NodeIterable nodeIterable = graph.getNodes(); + for (Node node : nodeIterable) { + if (cancel) { + nodeIterable.doBreak(); + break; + } + useLabels &= (node.getLabel() != null); } - useLabels &= (nodeIterable.iterator().next().getLabel() != null); - } - System.err.println("use labels " + useLabels); - if (!cancel) { - try { + if (!cancel) { if (useListFormat) { saveAsEdgeList1(useLabels, graph); } else { saveAsFullMatrix(useLabels, graph); } - } catch (IOException ex) { - Logger.getLogger(ExporterDL.class.getName()).log(Level.SEVERE, null, ex); } + } catch (Exception e) { + Logger.getLogger(ExporterDL.class.getName()).log(Level.SEVERE, null, e); + } finally { + graph.readUnlockAll(); + Progress.finish(progressTicket); } - graph.readUnlock(); - progressTicket.finish(); - return true; - } - @Override - public void setWorkspace(Workspace workspace) { - this.workspace = workspace; + return !cancel; } @Override @@ -156,6 +152,11 @@ public Workspace getWorkspace() { return workspace; } + @Override + public void setWorkspace(Workspace workspace) { + this.workspace = workspace; + } + @Override public void setWriter(Writer writer) { this.writer = writer; @@ -163,16 +164,18 @@ public void setWriter(Writer writer) { private void saveAsEdgeList1(boolean useLabels, Graph graph) throws IOException { - HashMap idToLabel = new HashMap();//systemId to changed label - HashSet labelUsed = new HashSet(); + HashMap idToLabel = new HashMap<>();//systemId to changed label + HashSet labelUsed = new HashSet<>(); //edgelist format forbids equal nodes if (useLabels) { - for (Node node : graph.getNodes()) { + NodeIterable nodeIterable = graph.getNodes(); + for (Node node : nodeIterable) { if (labelUsed.contains(node.getLabel())) { - for (int i = 0;; i++) { + for (int i = 0; ; i++) { if (!labelUsed.contains(node.getLabel() + "_" + i)) { idToLabel.put(node.getId(), node.getLabel() + "_" + i); labelUsed.add(node.getLabel() + "_" + i); + nodeIterable.doBreak(); break; } } @@ -186,37 +189,34 @@ private void saveAsEdgeList1(boolean useLabels, Graph graph) throws IOException writer.write("dl\n"); writer.write("format = edgelist1\n"); writer.write("n = " + graph.getNodeCount() + "\n"); - EdgeIterable edgeIterator = graph.getEdges(); writer.write("labels embedded:\n"); writer.write("data:\n"); - while (edgeIterator.iterator().hasNext()) { + + EdgeIterable edgesIterable = graph.getEdges(); + for (Edge edge : edgesIterable) { if (cancel) { + edgesIterable.doBreak(); break; } - Edge edge = edgeIterator.iterator().next(); - double weight; - if (exportDynamicWeight) { - weight = edge.getWeight(graph.getView()); - } else { - weight = edge.getWeight(); - } + + double weight = edge.getWeight(graph.getView()); if (useLabels) { writer.write(formatLabel(idToLabel.get(edge.getSource().getId()), false) + " " - + formatLabel(idToLabel.get(edge.getTarget().getId()), false) + " " + weight + "\n"); + + formatLabel(idToLabel.get(edge.getTarget().getId()), false) + " " + weight + "\n"); } else { writer.write(formatLabel(edge.getSource().getId().toString(), false) + " " - + formatLabel(edge.getTarget().getId().toString(), false) + " " + weight + "\n"); + + formatLabel(edge.getTarget().getId().toString(), false) + " " + weight + "\n"); } if (!edge.isDirected()) { if (useLabels) { writer.write(formatLabel(idToLabel.get(edge.getTarget().getId()), false) + " " - + formatLabel(idToLabel.get(edge.getSource().getId()), false) + " " + weight + "\n"); + + formatLabel(idToLabel.get(edge.getSource().getId()), false) + " " + weight + "\n"); } else { writer.write(formatLabel(edge.getTarget().getId().toString(), false) + " " - + formatLabel(edge.getSource().getId().toString(), false) + " " + weight + "\n"); + + formatLabel(edge.getSource().getId().toString(), false) + " " + weight + "\n"); } } } @@ -235,24 +235,15 @@ private void saveAsFullMatrix(boolean useLabels, Graph graph) throws IOException writer.write("format = fullmatrix\n"); writer.write("n = " + graph.getNodeCount() + "\n"); - HashMap idToNode = new HashMap(); + HashMap idToNode = new HashMap<>(); int idForNode = 0; for (Node node : graph.getNodes()) { - if (useLabels) { - idToNode.put(idForNode++, node); - } else { - idToNode.put(idForNode++, node); - } + idToNode.put(idForNode++, node); } int maxLengthOfEdgeWeight = 0; if (makeSymmetricMatrix) { for (Edge edge : graph.getEdges()) { - double weight; - if (exportDynamicWeight) { - weight = edge.getWeight(graph.getView()); - } else { - weight = edge.getWeight(); - } + double weight = edge.getWeight(graph.getView()); maxLengthOfEdgeWeight = Math.max(maxLengthOfEdgeWeight, Double.toString(weight).length()); } } @@ -285,15 +276,12 @@ private void saveAsFullMatrix(boolean useLabels, Graph graph) throws IOException double weight = 0; Edge edge = graph.getEdge(source, target); if (edge != null) { - if (exportDynamicWeight) { - weight = edge.getWeight(graph.getView()); - } else { - weight = edge.getWeight(); - } + weight = edge.getWeight(graph.getView()); } - writer.write(Double.toString(weight) + " "); + writer.write(weight + " "); if (makeSymmetricMatrix) { - for (int repeatSpace = Double.toString(weight).length(); repeatSpace < maxLengthOfEdgeWeight; repeatSpace++) { + for (int repeatSpace = Double.toString(weight).length(); repeatSpace < maxLengthOfEdgeWeight; + repeatSpace++) { writer.write(" "); } } diff --git a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterGDF.java b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterGDF.java index 98acf00cbc..a417eca6c9 100644 --- a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterGDF.java +++ b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterGDF.java @@ -39,20 +39,24 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.plugin; import java.io.Writer; import java.util.ArrayList; import java.util.List; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.attribute.api.AttributeUtils; -import org.gephi.attribute.api.Column; -import org.gephi.attribute.time.TimestampValueSet; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; import org.gephi.graph.api.Edge; +import org.gephi.graph.api.EdgeIterable; import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphController; import org.gephi.graph.api.GraphModel; import org.gephi.graph.api.Node; +import org.gephi.graph.api.NodeIterable; +import org.gephi.graph.api.types.TimestampMap; import org.gephi.io.exporter.api.FileType; import org.gephi.io.exporter.spi.CharacterExporter; import org.gephi.io.exporter.spi.GraphExporter; @@ -64,7 +68,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class ExporterGDF implements GraphExporter, CharacterExporter, LongTask { @@ -80,53 +83,45 @@ public class ExporterGDF implements GraphExporter, CharacterExporter, LongTask { private boolean exportColors = true; private boolean exportPosition = true; private boolean exportAttributes = true; - private boolean exportDynamicWeight = true; + private final boolean exportDynamicWeight = true; private boolean exportVisibility = false; - //Settings Helper - private float minSize; - private float maxSize; - private float minX; - private float maxX; - private float minY; - private float maxY; + private NormalizationHelper normalization; private boolean edgeLabels; private boolean edgeColors; //Columns private NodeColumnsGDF[] defaultNodeColumnsGDFs; private EdgeColumnsGDF[] defaultEdgeColumnsGDFs; - private Column[] nodeColumns; - private Column[] edgeColumns; //Buffer private Writer writer; @Override public boolean execute() { GraphController graphController = Lookup.getDefault().lookup(GraphController.class); - AttributeModel attributeModel = graphController.getAttributeModel(workspace); GraphModel graphModel = graphController.getGraphModel(workspace); - Graph graph = null; - if (exportVisible) { - graph = graphModel.getGraphVisible(); - } else { - graph = graphModel.getGraph(); - } + Graph graph = exportVisible ? graphModel.getGraphVisible() : graphModel.getGraph(); + + graph.readLock(); + try { - exportData(graph, attributeModel); + exportData(graph, graphModel); } catch (Exception e) { - throw new RuntimeException(e); + Logger.getLogger(ExporterGDF.class.getName()).log(Level.SEVERE, null, e); + } finally { + graph.readUnlock(); + Progress.finish(progressTicket); } return !cancel; } - private void exportData(Graph graph, AttributeModel attributeModel) throws Exception { + private void exportData(Graph graph, GraphModel graphModel) throws Exception { Progress.start(progressTicket); defaultNodeColumns(graph); defaultEdgeColumns(graph); - attributesNodeColumns(attributeModel); - attributesEdgeColumns(attributeModel); + Column[] nodeColumns = attributesNodeColumns(graphModel); + Column[] edgeColumns = attributesEdgeColumns(graphModel); StringBuilder stringBuilder = new StringBuilder(); @@ -166,22 +161,19 @@ private void exportData(Graph graph, AttributeModel attributeModel) throws Excep stringBuilder.setLength(stringBuilder.length() - 1); stringBuilder.append("\n"); - //Lock - graph.readLock(); - //Options - if (normalize) { - calculateMinMax(graph); - } + normalization = NormalizationHelper.build(normalize, graph); //Calculate progress units count int max = graph.getNodeCount() + graph.getEdgeCount(); Progress.switchToDeterminate(progressTicket, max); //Node lines - for (Node node : graph.getNodes()) { + NodeIterable itr = graph.getNodes(); + for (Node node : itr) { if (cancel) { - break; + itr.doBreak(); + return; } //Id @@ -204,10 +196,10 @@ private void exportData(Graph graph, AttributeModel attributeModel) throws Excep if (c.getTypeClass().equals(String.class) || c.getTypeClass().equals(String[].class)) { String quote = !useQuotes ? "" : simpleQuotes ? "'" : "\""; stringBuilder.append(quote); - stringBuilder.append(val.toString()); + stringBuilder.append(val); stringBuilder.append(quote); } else { - stringBuilder.append(val.toString()); + stringBuilder.append(val); } } stringBuilder.append(","); @@ -264,9 +256,11 @@ private void exportData(Graph graph, AttributeModel attributeModel) throws Excep stringBuilder.append("\n"); //Edge lines - for (Edge edge : graph.getEdges()) { + EdgeIterable itrEdges = graph.getEdges(); + for (Edge edge : itrEdges) { if (cancel) { - break; + itrEdges.doBreak(); + return; } //Source & Target stringBuilder.append(edge.getSource().getId()); @@ -290,10 +284,10 @@ private void exportData(Graph graph, AttributeModel attributeModel) throws Excep if (c.getTypeClass().equals(String.class) || c.getTypeClass().equals(String[].class)) { String quote = !useQuotes ? "" : simpleQuotes ? "'" : "\""; stringBuilder.append(quote); - stringBuilder.append(val.toString()); + stringBuilder.append(val); stringBuilder.append(quote); } else { - stringBuilder.append(val.toString()); + stringBuilder.append(val); } } stringBuilder.append(","); @@ -307,9 +301,6 @@ private void exportData(Graph graph, AttributeModel attributeModel) throws Excep Progress.progress(progressTicket); } - //Unlock - graph.readUnlockAll(); - //Write StringBuilder if (!cancel) { writer.append(stringBuilder); @@ -317,28 +308,28 @@ private void exportData(Graph graph, AttributeModel attributeModel) throws Excep Progress.finish(progressTicket); } - private void attributesNodeColumns(AttributeModel attributeModel) { - List cols = new ArrayList(); - if (exportAttributes && attributeModel != null) { - for (Column column : attributeModel.getNodeTable()) { - if (!isNodeDefaultColumn(column.getId())) { + private Column[] attributesNodeColumns(GraphModel graphModel) { + List cols = new ArrayList<>(); + if (exportAttributes && graphModel != null) { + for (Column column : graphModel.getNodeTable()) { + if (!column.isProperty() && !isNodeDefaultColumn(column.getId())) { cols.add(column); } } } - nodeColumns = cols.toArray(new Column[0]); + return cols.toArray(new Column[0]); } - private void attributesEdgeColumns(AttributeModel attributeModel) { - List cols = new ArrayList(); - if (exportAttributes && attributeModel != null) { - for (Column column : attributeModel.getEdgeTable()) { - if (!isEdgeDefaultColumn(column.getId())) { + private Column[] attributesEdgeColumns(GraphModel graphModel) { + List cols = new ArrayList<>(); + if (exportAttributes && graphModel != null) { + for (Column column : graphModel.getEdgeTable()) { + if (!column.isProperty() && !isEdgeDefaultColumn(column.getId())) { cols.add(column); } } } - edgeColumns = cols.toArray(new Column[0]); + return cols.toArray(new Column[0]); } private boolean isNodeDefaultColumn(String id) { @@ -410,10 +401,7 @@ public boolean isEnable() { @Override public void writeData(StringBuilder builder, Node node) { - float size = node.size(); - if (normalize) { - size = (size - minSize) / (maxSize - minSize); - } + float size = normalization.normalizeSize(node.size()); builder.append(size); } }; @@ -426,10 +414,7 @@ public boolean isEnable() { @Override public void writeData(StringBuilder builder, Node node) { - float size = node.size(); - if (normalize) { - size = (size - minSize) / (maxSize - minSize); - } + float size = normalization.normalizeSize(node.size()); builder.append(size); } }; @@ -442,10 +427,7 @@ public boolean isEnable() { @Override public void writeData(StringBuilder builder, Node node) { - float x = node.x(); - if (normalize && x != 0.0) { - x = (x - minX) / (maxX - minX); - } + float x = normalization.normalizeX(node.x()); builder.append(x); } }; @@ -458,10 +440,7 @@ public boolean isEnable() { @Override public void writeData(StringBuilder builder, Node node) { - float y = node.y(); - if (normalize && y != 0.0) { - y = (y - minY) / (maxY - minY); - } + float y = normalization.normalizeY(node.y()); builder.append(y); } }; @@ -636,24 +615,6 @@ public void writeData(StringBuilder builder, Edge edge) { defaultEdgeColumnsGDFs[6] = labelVisibleColumn; } - private void calculateMinMax(Graph graph) { - minX = Float.POSITIVE_INFINITY; - maxX = Float.NEGATIVE_INFINITY; - minY = Float.POSITIVE_INFINITY; - maxY = Float.NEGATIVE_INFINITY; - minSize = Float.POSITIVE_INFINITY; - maxSize = Float.NEGATIVE_INFINITY; - - for (Node node : graph.getNodes()) { - minX = Math.min(minX, node.x()); - maxX = Math.max(maxX, node.x()); - minY = Math.min(minY, node.y()); - maxY = Math.max(maxY, node.y()); - minSize = Math.min(minSize, node.size()); - maxSize = Math.max(maxSize, node.size()); - } - } - @Override public boolean cancel() { cancel = true; @@ -671,53 +632,57 @@ public String getName() { public FileType[] getFileTypes() { FileType ft = new FileType(".gdf", NbBundle.getMessage(getClass(), "fileType_GDF_Name")); - return new FileType[]{ft}; - } - - public void setExportAttributes(boolean exportAttributes) { - this.exportAttributes = exportAttributes; - } - - public void setExportColors(boolean exportColors) { - this.exportColors = exportColors; - } - - public void setExportPosition(boolean exportPosition) { - this.exportPosition = exportPosition; - } - - public void setNormalize(boolean normalize) { - this.normalize = normalize; - } - - public void setSimpleQuotes(boolean simpleQuotes) { - this.simpleQuotes = simpleQuotes; + return new FileType[] {ft}; } public boolean isExportAttributes() { return exportAttributes; } + public void setExportAttributes(boolean exportAttributes) { + this.exportAttributes = exportAttributes; + } + public boolean isExportColors() { return exportColors; } + public void setExportColors(boolean exportColors) { + this.exportColors = exportColors; + } + public boolean isExportPosition() { return exportPosition; } + public void setExportPosition(boolean exportPosition) { + this.exportPosition = exportPosition; + } + public boolean isNormalize() { return normalize; } + public void setNormalize(boolean normalize) { + this.normalize = normalize; + } + public boolean isSimpleQuotes() { return simpleQuotes; } + public void setSimpleQuotes(boolean simpleQuotes) { + this.simpleQuotes = simpleQuotes; + } + public boolean isUseQuotes() { return useQuotes; } + public void setUseQuotes(boolean useQuotes) { + this.useQuotes = useQuotes; + } + public boolean isExportVisibility() { return exportVisibility; } @@ -726,13 +691,9 @@ public void setExportVisibility(boolean exportVisibility) { this.exportVisibility = exportVisibility; } - public void setUseQuotes(boolean useQuotes) { - this.useQuotes = useQuotes; - } - private DataTypeGDF getDataTypeGDF(Class type) { if (AttributeUtils.isDynamicType(type)) { - type = AttributeUtils.getStaticType((Class) type); + type = AttributeUtils.getStaticType((Class) type); } if (type.equals(Boolean.class)) { return DataTypeGDF.BOOLEAN; @@ -755,10 +716,35 @@ private DataTypeGDF getDataTypeGDF(Class type) { } } + @Override + public boolean isExportVisible() { + return exportVisible; + } + + @Override + public void setExportVisible(boolean exportVisible) { + this.exportVisible = exportVisible; + } + + @Override + public void setWriter(Writer writer) { + this.writer = writer; + } + + @Override + public Workspace getWorkspace() { + return workspace; + } + + @Override + public void setWorkspace(Workspace workspace) { + this.workspace = workspace; + } + private enum DataTypeGDF { VARCHAR, BOOL, BOOLEAN, INTEGER, TINYINT, INT, DOUBLE, FLOAT - }; + } private abstract class NodeColumnsGDF { @@ -833,29 +819,4 @@ public Object getDefaultValue() { return defaultValue; } } - - @Override - public boolean isExportVisible() { - return exportVisible; - } - - @Override - public void setExportVisible(boolean exportVisible) { - this.exportVisible = exportVisible; - } - - @Override - public void setWriter(Writer writer) { - this.writer = writer; - } - - @Override - public Workspace getWorkspace() { - return workspace; - } - - @Override - public void setWorkspace(Workspace workspace) { - this.workspace = workspace; - } } diff --git a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterGEXF.java b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterGEXF.java index 1e0c3d4453..39c28280f3 100644 --- a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterGEXF.java +++ b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterGEXF.java @@ -39,45 +39,82 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.plugin; import java.io.Writer; -import org.gephi.dynamic.api.DynamicModel; -import org.gephi.graph.api.*; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; +import javanet.staxutils.IndentingXMLStreamWriter; +import javax.xml.stream.XMLOutputFactory; +import javax.xml.stream.XMLStreamWriter; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Configuration; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.EdgeIterable; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Interval; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.NodeIterable; +import org.gephi.graph.api.Table; +import org.gephi.graph.api.TimeFormat; +import org.gephi.graph.api.TimeRepresentation; +import org.gephi.graph.api.types.IntervalMap; +import org.gephi.graph.api.types.IntervalSet; +import org.gephi.graph.api.types.TimeMap; +import org.gephi.graph.api.types.TimeSet; +import org.gephi.graph.api.types.TimestampMap; +import org.gephi.graph.api.types.TimestampSet; +import org.gephi.io.exporter.api.FileType; import org.gephi.io.exporter.spi.CharacterExporter; import org.gephi.io.exporter.spi.GraphExporter; import org.gephi.project.api.Workspace; +import org.gephi.utils.VersionUtils; import org.gephi.utils.longtask.spi.LongTask; +import org.gephi.utils.progress.Progress; import org.gephi.utils.progress.ProgressTicket; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian, SΓ©bastien Heymann */ public class ExporterGEXF implements GraphExporter, CharacterExporter, LongTask { //GEXF private static final String GEXF = "gexf"; - private static final String GEXF_NAMESPACE = "http://www.gexf.net/1.2draft"; - private static final String GEXF_NAMESPACE_LOCATION = "http://www.gexf.net/1.2draft http://www.gexf.net/1.2draft/gexf.xsd"; + private static final String GEXF_NAMESPACE = "http://gexf.net/1.3"; + private static final String GEXF_NAMESPACE_LOCATION = "http://gexf.net/1.3 http://gexf.net/1.3/gexf.xsd"; private static final String VIZ = "viz"; - private static final String VIZ_NAMESPACE = "http://www.gexf.net/1.2draft/viz"; + private static final String VIZ_NAMESPACE = "http://gexf.net/1.3/viz"; private static final String GEXF_VERSION = "version"; private static final String GRAPH = "graph"; private static final String GRAPH_MODE = "mode"; private static final String GRAPH_DEFAULT_EDGETYPE = "defaultedgetype"; - private static final String GRAPH_START = "start"; - private static final String GRAPH_END = "end"; private static final String GRAPH_TIMEFORMAT = "timeformat"; + private static final String GRAPH_TIMEREPRESENTATION = "timerepresentation"; + private static final String GRAPH_TIMEZONE = "timezone"; + private static final String GRAPH_IDTYPE = "idtype"; + private static final String TIMESTAMP = "timestamp"; private static final String META = "meta"; private static final String META_LASTMODIFIEDDATE = "lastmodifieddate"; private static final String META_CREATOR = "creator"; private static final String META_DESCRIPTION = "description"; + private static final String META_TITLE = "title"; private static final String NODES = "nodes"; private static final String NODE = "node"; private static final String NODE_ID = "id"; private static final String NODE_LABEL = "label"; - private static final String NODE_PID = "pid"; private static final String NODE_POSITION = "position"; private static final String NODE_COLOR = "color"; private static final String NODE_SIZE = "size"; @@ -90,10 +127,9 @@ public class ExporterGEXF implements GraphExporter, CharacterExporter, LongTask private static final String EDGE_TYPE = "type"; private static final String EDGE_WEIGHT = "weight"; private static final String EDGE_COLOR = "color"; + private static final String EDGE_KIND = "kind"; private static final String START = "start"; private static final String END = "end"; - private static final String START_OPEN = "startopen"; - private static final String END_OPEN = "endopen"; private static final String SPELLS = "spells"; private static final String SPELL = "spell"; private static final String ATTRIBUTE = "attribute"; @@ -114,535 +150,507 @@ public class ExporterGEXF implements GraphExporter, CharacterExporter, LongTask private Workspace workspace; private boolean exportVisible; private Writer writer; - private GraphModel graphModel; - private DynamicModel dynamicModel; //Settings private boolean normalize = false; private boolean exportColors = true; private boolean exportPosition = true; private boolean exportSize = true; private boolean exportAttributes = true; - private boolean exportHierarchy = false; private boolean exportDynamic = true; - //Settings Helper - private float minSize; - private float maxSize; - private float minX; - private float maxX; - private float minY; - private float maxY; - private float minZ; - private float maxZ; + private boolean exportMeta = true; + private boolean includeNullAttValues = false; + private NormalizationHelper normalization; @Override public boolean execute() { -// attributeModel = workspace.getLookup().lookup(AttributeModel.class); -// graphModel = workspace.getLookup().lookup(GraphModel.class); -// dynamicModel = Lookup.getDefault().lookup(DynamicController.class).getModel(workspace); -// HierarchicalGraph graph; -// if (exportVisible) { -// graph = graphModel.getHierarchicalGraphVisible(); -// } else { -// graph = graphModel.getHierarchicalGraph(); -// } -// Progress.start(progress); -// graph.readLock(); -// -// //Is it a dynamic graph? -// exportDynamic = exportDynamic && dynamicModel.isDynamicGraph(); -// -// //Options -// if (normalize) { -// calculateMinMax(graph); -// } -// -// //Calculate progress units count -// int max = 0; -// if (exportHierarchy) { -// for (Node n : graph.getNodesTree()) { -// max++; -// } -// for (Edge e : graph.getEdgesTree()) { -// max++; -// } -// } else { -// max = graph.getNodeCount(); -// for (Edge e : graph.getEdgesAndMetaEdges()) { -// max++; -// } -// } -// Progress.switchToDeterminate(progress, max); -// -// try { -// XMLOutputFactory outputFactory = XMLOutputFactory.newInstance(); -// outputFactory.setProperty("javax.xml.stream.isRepairingNamespaces", Boolean.FALSE); -// -// XMLStreamWriter xmlWriter = outputFactory.createXMLStreamWriter(writer); -// xmlWriter = new IndentingXMLStreamWriter(xmlWriter); -// -// xmlWriter.writeStartDocument("UTF-8", "1.0"); -// xmlWriter.setPrefix("", GEXF_NAMESPACE); -// xmlWriter.writeStartElement(GEXF_NAMESPACE, GEXF); -// xmlWriter.writeNamespace("", GEXF_NAMESPACE); -// xmlWriter.writeAttribute(GEXF_VERSION, "1.2"); -// -// if (exportColors || exportPosition || exportSize) { -// xmlWriter.writeNamespace(VIZ, VIZ_NAMESPACE); -// } -// xmlWriter.writeAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); -// xmlWriter.writeAttribute("xsi:schemaLocation", GEXF_NAMESPACE_LOCATION); -// -// if (exportDynamic) { -// DynamicController dynamicController = Lookup.getDefault().lookup(DynamicController.class); -// dynamicModel = dynamicController != null ? dynamicController.getModel(workspace) : null; -// visibleInterval = dynamicModel == null ? null : exportVisible ? dynamicModel.getVisibleInterval() : new TimeInterval(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); -// } -// -// writeMeta(xmlWriter); -// writeGraph(xmlWriter, graph); -// -// xmlWriter.writeEndElement(); -// xmlWriter.writeEndDocument(); -// xmlWriter.close(); -// -// } catch (Exception e) { -// graph.readUnlockAll(); -// if (e instanceof RuntimeException) { -// throw (RuntimeException) e; -// } -// throw new RuntimeException(e); -// } -// -// graph.readUnlock(); -// -// Progress.finish(progress); + GraphController graphController = Lookup.getDefault().lookup(GraphController.class); + GraphModel graphModel = graphController.getGraphModel(workspace); + Graph graph = exportVisible ? graphModel.getGraphVisible() : graphModel.getGraph(); + + Progress.start(progress); + graph.readLock(); + + //Is it a dynamic graph? + exportDynamic = exportDynamic && graphModel.isDynamic(); + + //Calculate min & max + normalization = NormalizationHelper.build(normalize, graph); + + Progress.switchToDeterminate(progress, graph.getNodeCount() + graph.getEdgeCount()); + + try { + XMLOutputFactory outputFactory = XMLOutputFactory.newInstance(); + outputFactory.setProperty("javax.xml.stream.isRepairingNamespaces", Boolean.FALSE); + + XMLStreamWriter xmlWriter = outputFactory.createXMLStreamWriter(writer); + xmlWriter = new IndentingXMLStreamWriter(xmlWriter); + + xmlWriter.writeStartDocument("UTF-8", "1.0"); + xmlWriter.setPrefix("", GEXF_NAMESPACE); + xmlWriter.writeStartElement(GEXF_NAMESPACE, GEXF); + xmlWriter.writeNamespace("", GEXF_NAMESPACE); + xmlWriter.writeAttribute(GEXF_VERSION, "1.3"); + + if (exportColors || exportPosition || exportSize) { + xmlWriter.writeNamespace(VIZ, VIZ_NAMESPACE); + } + xmlWriter.writeAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance"); + xmlWriter.writeAttribute("xsi:schemaLocation", GEXF_NAMESPACE_LOCATION); + + writeMeta(xmlWriter); + writeGraph(xmlWriter, graph); + + xmlWriter.writeEndElement(); + xmlWriter.writeEndDocument(); + xmlWriter.close(); + + } catch (Exception e) { + Logger.getLogger(ExporterGEXF.class.getName()).log(Level.SEVERE, null, e); + } finally { + graph.readUnlock(); + Progress.finish(progress); + } + return !cancel; } -// private void writeGraph(XMLStreamWriter xmlWriter, HierarchicalGraph graph) throws Exception { -// xmlWriter.writeStartElement(GRAPH); -// if (!(graph instanceof MixedGraph)) { -// xmlWriter.writeAttribute(GRAPH_DEFAULT_EDGETYPE, graph instanceof DirectedGraph ? "directed" : "undirected"); -// } -// -// if (exportDynamic) { -// if (!Double.isInfinite(visibleInterval.getLow())) { -// String intervalLow = formatTime(visibleInterval.getLow()); -// xmlWriter.writeAttribute(GRAPH_START, intervalLow); -// } -// if (!Double.isInfinite(visibleInterval.getHigh())) { -// String intervalHigh = formatTime(visibleInterval.getHigh()); -// xmlWriter.writeAttribute(GRAPH_END, intervalHigh); -// } -// String timeFormat = dynamicModel.getTimeFormat().equals(DynamicModel.TimeFormat.DATE) ? "date" -// : dynamicModel.getTimeFormat().equals(DynamicModel.TimeFormat.DATETIME) ? "datetime" : "double"; -// xmlWriter.writeAttribute(GRAPH_TIMEFORMAT, timeFormat); -// } -// xmlWriter.writeAttribute(GRAPH_MODE, exportDynamic ? "dynamic" : "static"); -// -// writeAttributes(xmlWriter, attributeModel.getNodeTable()); -// writeAttributes(xmlWriter, attributeModel.getEdgeTable()); -// writeNodes(xmlWriter, graph); -// writeEdges(xmlWriter, graph); -// -// xmlWriter.writeEndElement(); -// } -// -// private void writeMeta(XMLStreamWriter xmlWriter) throws Exception { -// xmlWriter.writeStartElement(META); -// xmlWriter.writeAttribute(META_LASTMODIFIEDDATE, getDateTime()); -// -// xmlWriter.writeStartElement(META_CREATOR); -// xmlWriter.writeCharacters("Gephi 0.8.1"); -// xmlWriter.writeEndElement(); -// -// xmlWriter.writeStartElement(META_DESCRIPTION); -// xmlWriter.writeCharacters(""); -// xmlWriter.writeEndElement(); -// -// xmlWriter.writeEndElement(); -// } -// -// private void writeAttributes(XMLStreamWriter xmlWriter, AttributeTable table) throws Exception { -// List staticCols = new ArrayList(); -// List dynamicCols = new ArrayList(); -// String attClass = table == attributeModel.getNodeTable() ? "node" : "edge"; -// -// for (AttributeColumn col : table.getColumns()) { -// -// if (!col.getOrigin().equals(AttributeOrigin.PROPERTY)) { -// if (exportDynamic && col.getType().isDynamicType()) { -// dynamicCols.add(col); -// } else { -// staticCols.add(col); -// } -// } else if (exportDynamic && col.getType().isDynamicType() && col.getType() != AttributeType.TIME_INTERVAL -// && col.getOrigin().equals(AttributeOrigin.PROPERTY) && col.getIndex() == PropertiesColumn.EDGE_WEIGHT.getIndex()) { -// dynamicCols.add(col); -// } -// } -// -// if (!staticCols.isEmpty()) { -// writeAttributes(xmlWriter, staticCols.toArray(new AttributeColumn[0]), "static", attClass); -// } -// if (!dynamicCols.isEmpty()) { -// writeAttributes(xmlWriter, dynamicCols.toArray(new AttributeColumn[0]), "dynamic", attClass); -// } -// } -// -// private void writeAttributes(XMLStreamWriter xmlWriter, AttributeColumn[] cols, String mode, String attClass) throws Exception { -// if (exportAttributes && cols.length != 0) { -// xmlWriter.writeStartElement(ATTRIBUTES); -// xmlWriter.writeAttribute(ATTRIBUTES_CLASS, attClass); -// xmlWriter.writeAttribute(ATTRIBUTES_MODE, mode); -// -// for (AttributeColumn col : cols) { -// if (!col.getOrigin().equals(AttributeOrigin.PROPERTY) -// || (exportDynamic && col.getOrigin().equals(AttributeOrigin.PROPERTY) && col.getIndex() == PropertiesColumn.EDGE_WEIGHT.getIndex())) { -// xmlWriter.writeStartElement(ATTRIBUTE); -// xmlWriter.writeAttribute(ATTRIBUTE_ID, col.getId()); -// xmlWriter.writeAttribute(ATTRIBUTE_TITLE, col.getTitle()); -// if (col.getType().equals(AttributeType.INT)) { -// xmlWriter.writeAttribute(ATTRIBUTE_TYPE, "integer"); -// } else if (col.getType().isListType()) { -// if (col.getType().equals(AttributeType.LIST_INTEGER)) { -// xmlWriter.writeAttribute(ATTRIBUTE_TYPE, "listint"); -// } else if (col.getType().equals(AttributeType.LIST_CHARACTER)) { -// xmlWriter.writeAttribute(ATTRIBUTE_TYPE, "listchar"); -// } else { -// xmlWriter.writeAttribute(ATTRIBUTE_TYPE, col.getType().getTypeString().toLowerCase().replace("_", "")); -// } -// } else if (col.getType().isDynamicType()) { -// AttributeType staticType = TypeConvertor.getStaticType(col.getType()); -// if (staticType.equals(AttributeType.INT)) { -// xmlWriter.writeAttribute(ATTRIBUTE_TYPE, "integer"); -// } else { -// xmlWriter.writeAttribute(ATTRIBUTE_TYPE, staticType.getTypeString().toLowerCase()); -// } -// } else { -// xmlWriter.writeAttribute(ATTRIBUTE_TYPE, col.getType().getTypeString().toLowerCase()); -// } -// if (col.getDefaultValue() != null) { -// xmlWriter.writeStartElement(ATTRIBUTE_DEFAULT); -// xmlWriter.writeCharacters(col.getDefaultValue().toString()); -// xmlWriter.writeEndElement(); -// } -// xmlWriter.writeEndElement(); -// } -// } -// -// xmlWriter.writeEndElement(); -// } -// } -// -// private void writeNodes(XMLStreamWriter xmlWriter, HierarchicalGraph graph) throws Exception { -// if (cancel) { -// return; -// } -// xmlWriter.writeStartElement(NODES); -// -// AttributeColumn dynamicCol = attributeModel.getNodeTable().getColumn(DynamicModel.TIMEINTERVAL_COLUMN); -// -// NodeIterable nodeIterable = exportHierarchy ? graph.getNodesTree() : graph.getNodes(); -// for (Node node : nodeIterable) { -// xmlWriter.writeStartElement(NODE); -// -// String id = node.getNodeData().getId(); -// xmlWriter.writeAttribute(NODE_ID, id); -// if (node.getNodeData().getLabel() != null && !node.getNodeData().getLabel().isEmpty()) { -// xmlWriter.writeAttribute(NODE_LABEL, node.getNodeData().getLabel()); -// } -// -// if (exportHierarchy) { -// Node parent = graph.getParent(node); -// if (parent != null) { -// xmlWriter.writeAttribute(NODE_PID, parent.getNodeData().getId()); -// } -// } -// -// if (exportDynamic && dynamicCol != null && visibleInterval != null) { -// TimeInterval timeInterval = (TimeInterval) node.getNodeData().getAttributes().getValue(dynamicCol.getIndex()); -// if (timeInterval != null) { -// writeTimeInterval(xmlWriter, timeInterval); -// } -// } -// -// if (exportAttributes && node.getNodeData().getAttributes() != null) { -// AttributeRow attributeRow = (AttributeRow) node.getNodeData().getAttributes(); -// writeAttValues(xmlWriter, attributeRow, visibleInterval); -// } -// -// if (exportSize) { -// writeNodeSize(xmlWriter, node); -// } -// -// if (exportPosition) { -// writeNodePosition(xmlWriter, node); -// } -// -// if (exportColors) { -// writeNodeColor(xmlWriter, node); -// } -// -// xmlWriter.writeEndElement(); -// Progress.progress(progress); -// if (cancel) { -// break; -// } -// } -// -// xmlWriter.writeEndElement(); -// } -// -// private void writeAttValues(XMLStreamWriter xmlWriter, AttributeRow row, TimeInterval visibleInterval) throws Exception { -// xmlWriter.writeStartElement(ATTVALUES); -// for (AttributeValue val : row.getValues()) { -// AttributeColumn col = val.getColumn(); -// if (!col.getOrigin().equals(AttributeOrigin.PROPERTY) -// || (exportDynamic && col.getType().isDynamicType() -// && col.getOrigin().equals(AttributeOrigin.PROPERTY) -// && col.getIndex() == PropertiesColumn.EDGE_WEIGHT.getIndex())) { -// AttributeType type = col.getType(); -// if (type.isDynamicType()) { -// DynamicType dynamicValue = (DynamicType) val.getValue(); -// if (dynamicValue != null && visibleInterval != null && exportDynamic) { -// List> intervals = dynamicValue.getIntervals(visibleInterval.getLow(), visibleInterval.getHigh()); -// for (Interval interval : intervals) { -// Object value = interval.getValue(); -// if (value != null) { -// xmlWriter.writeStartElement(ATTVALUE); -// xmlWriter.writeAttribute(ATTVALUE_FOR, col.getId()); -// xmlWriter.writeAttribute(ATTVALUE_VALUE, value.toString()); -// if (!Double.isInfinite(interval.getLow())) { -// String intervalLow = formatTime(interval.getLow()); -// xmlWriter.writeAttribute(interval.isLowExcluded() ? START_OPEN : START, intervalLow); -// } -// if (!Double.isInfinite(interval.getHigh())) { -// String intervalHigh = formatTime(interval.getHigh()); -// xmlWriter.writeAttribute(interval.isHighExcluded() ? END_OPEN : END, intervalHigh); -// } -// xmlWriter.writeEndElement(); -// } -// } -// } else if (dynamicValue != null) { -// TimeInterval interval = visibleInterval; -// if (interval == null) { -// interval = new TimeInterval(); -// } -// Object value = DynamicUtilities.getDynamicValue(dynamicValue, interval.getLow(), interval.getHigh()); -// if (value != null) { -// xmlWriter.writeStartElement(ATTVALUE); -// xmlWriter.writeAttribute(ATTVALUE_FOR, val.getColumn().getId()); -// xmlWriter.writeAttribute(ATTVALUE_VALUE, value.toString()); -// xmlWriter.writeEndElement(); -// } -// } -// } else { -// if (val.getValue() != null) { -// xmlWriter.writeStartElement(ATTVALUE); -// xmlWriter.writeAttribute(ATTVALUE_FOR, col.getId()); -// xmlWriter.writeAttribute(ATTVALUE_VALUE, val.getValue().toString()); -// xmlWriter.writeEndElement(); -// } -// } -// } -// } -// xmlWriter.writeEndElement(); -// } -// -// private void writeNodePosition(XMLStreamWriter xmlWriter, Node node) throws Exception { -// float x = node.getNodeData().x(); -// if (normalize && x != 0.0) { -// x = (x - minX) / (maxX - minX); -// } -// float y = node.getNodeData().y(); -// if (normalize && y != 0.0) { -// y = (y - minY) / (maxY - minY); -// } -// float z = node.getNodeData().z(); -// if (normalize && z != 0.0) { -// z = (z - minZ) / (maxZ - minZ); -// } -// if (!(x == 0 && y == 0 && z == 0)) { -// xmlWriter.writeStartElement(VIZ, NODE_POSITION, VIZ_NAMESPACE); -// xmlWriter.writeAttribute("x", "" + x); -// xmlWriter.writeAttribute("y", "" + y); -// xmlWriter.writeAttribute("z", "" + z); -// xmlWriter.writeEndElement(); -// } -// } -// -// private void writeNodeSize(XMLStreamWriter xmlWriter, Node node) throws Exception { -// xmlWriter.writeStartElement(VIZ, NODE_SIZE, VIZ_NAMESPACE); -// float size = node.getNodeData().getSize(); -// if (normalize) { -// size = (size - minSize) / (maxSize - minSize); -// } -// xmlWriter.writeAttribute("value", "" + size); -// xmlWriter.writeEndElement(); -// } -// -// private void writeNodeColor(XMLStreamWriter xmlWriter, Node node) throws Exception { -// int r = Math.round(node.getNodeData().r() * 255f); -// int g = Math.round(node.getNodeData().g() * 255f); -// int b = Math.round(node.getNodeData().b() * 255f); -// if (r != 0 || g != 0 || b != 0) { -// xmlWriter.writeStartElement(VIZ, NODE_COLOR, VIZ_NAMESPACE); -// xmlWriter.writeAttribute("r", "" + r); -// xmlWriter.writeAttribute("g", "" + g); -// xmlWriter.writeAttribute("b", "" + b); -// xmlWriter.writeEndElement(); -// } -// } -// -// private void writeTimeInterval(XMLStreamWriter xmlWriter, TimeInterval timeInterval) throws Exception { -// List> intervals = timeInterval.getIntervals(visibleInterval.getLow(), visibleInterval.getHigh()); -// if (intervals.size() > 1) { -// xmlWriter.writeStartElement(SPELLS); -// for (Interval interval : intervals) { -// xmlWriter.writeStartElement(SPELL); -// if (!Double.isInfinite(interval.getLow())) { -// String intervalLow = formatTime(interval.getLow()); -// xmlWriter.writeAttribute(interval.isLowExcluded() ? START_OPEN : START, intervalLow); -// } -// if (!Double.isInfinite(interval.getHigh())) { -// String intervalHigh = formatTime(interval.getHigh()); -// xmlWriter.writeAttribute(interval.isHighExcluded() ? END_OPEN : END, intervalHigh); -// } -// xmlWriter.writeEndElement(); -// } -// xmlWriter.writeEndElement(); -// } else if (intervals.size() == 1) { -// Interval interval = intervals.get(0); -// if (!Double.isInfinite(interval.getLow())) { -// String intervalLow = formatTime(interval.getLow()); -// xmlWriter.writeAttribute(interval.isLowExcluded() ? START_OPEN : START, intervalLow); -// } -// if (!Double.isInfinite(interval.getHigh())) { -// String intervalHigh = formatTime(interval.getHigh()); -// xmlWriter.writeAttribute(interval.isHighExcluded() ? END_OPEN : END, intervalHigh); -// } -// } -// } -// -// private void writeEdges(XMLStreamWriter xmlWriter, HierarchicalGraph graph) throws Exception { -// if (cancel) { -// return; -// } -// xmlWriter.writeStartElement(EDGES); -// -// AttributeColumn dynamicCol = attributeModel.getEdgeTable().getColumn(DynamicModel.TIMEINTERVAL_COLUMN); -// -// EdgeIterable edgeIterable = exportHierarchy ? graph.getEdgesTree() : graph.getEdgesAndMetaEdges(); -// for (Edge edge : edgeIterable) { -// xmlWriter.writeStartElement(EDGE); -// -// if (edge.getEdgeData().getId() != null && !edge.getEdgeData().getId().equals(Integer.toString(edge.getId()))) { -// xmlWriter.writeAttribute(EDGE_ID, edge.getEdgeData().getId()); -// } -// xmlWriter.writeAttribute(EDGE_SOURCE, edge.getSource().getNodeData().getId()); -// xmlWriter.writeAttribute(EDGE_TARGET, edge.getTarget().getNodeData().getId()); -// -// if (edge.isDirected() && graphModel.isMixed()) { -// xmlWriter.writeAttribute(EDGE_TYPE, "directed"); -// } else if (!edge.isDirected() && graphModel.isMixed()) { -// xmlWriter.writeAttribute(EDGE_TYPE, "undirected"); -// } -// -// String label = edge.getEdgeData().getLabel(); -// if (label != null && !label.isEmpty()) { -// xmlWriter.writeAttribute(EDGE_LABEL, label); -// } -// -// AttributeColumn weightCol = attributeModel.getEdgeTable().getColumn(EDGE_WEIGHT); -// if(weightCol != null && !weightCol.getType().isDynamicType()) { -// float weight = edge.getWeight(); -// if (weight != 1f) { -// xmlWriter.writeAttribute(EDGE_WEIGHT, "" + weight); -// } -// } -// -// if (exportDynamic && dynamicCol != null && visibleInterval != null) { -// TimeInterval timeInterval = (TimeInterval) edge.getEdgeData().getAttributes().getValue(dynamicCol.getIndex()); -// if (timeInterval != null) { -// writeTimeInterval(xmlWriter, timeInterval); -// } -// } -// -// if (exportColors) { -// writeEdgeColor(xmlWriter, edge); -// } -// -// if (exportAttributes && edge.getEdgeData().getAttributes() != null) { -// AttributeRow attributeRow = (AttributeRow) edge.getEdgeData().getAttributes(); -// writeAttValues(xmlWriter, attributeRow, visibleInterval); -// } -// -// xmlWriter.writeEndElement(); -// Progress.progress(progress); -// if (cancel) { -// break; -// } -// } -// -// xmlWriter.writeEndElement(); -// } -// -// private void writeEdgeColor(XMLStreamWriter xmlWriter, Edge edge) throws Exception { -// if (edge.getEdgeData().r() != -1) { //Edge has custom color -// int r = Math.round(edge.getEdgeData().r() * 255f); -// int g = Math.round(edge.getEdgeData().g() * 255f); -// int b = Math.round(edge.getEdgeData().b() * 255f); -// if (r != 0 || g != 0 || b != 0) { -// xmlWriter.writeStartElement(VIZ, EDGE_COLOR, VIZ_NAMESPACE); -// xmlWriter.writeAttribute("r", "" + r); -// xmlWriter.writeAttribute("g", "" + g); -// xmlWriter.writeAttribute("b", "" + b); -// if (edge.getEdgeData().alpha() != 1f) { -// xmlWriter.writeAttribute("a", "" + b); -// } -// xmlWriter.writeEndElement(); -// } -// } -// } -// -// private void calculateMinMax(Graph graph) { -// minX = Float.POSITIVE_INFINITY; -// maxX = Float.NEGATIVE_INFINITY; -// minY = Float.POSITIVE_INFINITY; -// maxY = Float.NEGATIVE_INFINITY; -// minZ = Float.POSITIVE_INFINITY; -// maxZ = Float.NEGATIVE_INFINITY; -// minSize = Float.POSITIVE_INFINITY; -// maxSize = Float.NEGATIVE_INFINITY; -// -// for (Node node : graph.getNodes()) { -// NodeData nodeData = node.getNodeData(); -// minX = Math.min(minX, nodeData.x()); -// maxX = Math.max(maxX, nodeData.x()); -// minY = Math.min(minY, nodeData.y()); -// maxY = Math.max(maxY, nodeData.y()); -// minZ = Math.min(minZ, nodeData.z()); -// maxZ = Math.max(maxZ, nodeData.z()); -// minSize = Math.min(minSize, nodeData.getSize()); -// maxSize = Math.max(maxSize, nodeData.getSize()); -// } -// } -// -// private String formatTime(double time) { -// if (dynamicModel.getTimeFormat().equals(DynamicModel.TimeFormat.DATE)) { -// String t = DynamicUtilities.getXMLDateStringFromDouble(time); -// if (t.endsWith("T00:00:00.000")) { -// t = t.substring(0, t.length() - 13); -// } -// return t; -// } else if (dynamicModel.getTimeFormat().equals(DynamicModel.TimeFormat.DATETIME)) { -// return DynamicUtilities.getXMLDateStringFromDouble(time); -// } else { -// return Double.toString(time); -// } -// } -// + private void writeGraph(XMLStreamWriter xmlWriter, Graph graph) throws Exception { + xmlWriter.writeStartElement(GRAPH); + if (!(graph.isMixed())) { + xmlWriter.writeAttribute(GRAPH_DEFAULT_EDGETYPE, graph.isDirected() ? "directed" : "undirected"); + } + + Configuration graphConfig = graph.getModel().getConfiguration(); + if (graphConfig.getEdgeIdType().equals(Integer.class) && graphConfig.getNodeIdType().equals(Integer.class)) { + xmlWriter.writeAttribute(GRAPH_IDTYPE, "integer"); + } else if (graphConfig.getEdgeIdType().equals(Long.class) && graphConfig.getNodeIdType().equals(Long.class)) { + xmlWriter.writeAttribute(GRAPH_IDTYPE, "long"); + } + + if (exportDynamic) { + TimeFormat timeFormat = graph.getModel().getTimeFormat(); + xmlWriter.writeAttribute(GRAPH_TIMEFORMAT, timeFormat.toString().toLowerCase()); + + TimeRepresentation timeRepresentation = graphConfig.getTimeRepresentation(); + xmlWriter.writeAttribute(GRAPH_TIMEREPRESENTATION, timeRepresentation.toString().toLowerCase()); + + ZoneId timeZone = graph.getModel().getTimeZone(); + xmlWriter.writeAttribute(GRAPH_TIMEZONE, timeZone.getId()); + } + xmlWriter.writeAttribute(GRAPH_MODE, exportDynamic ? "dynamic" : "static"); + + writeAttributes(xmlWriter, graph.getModel().getNodeTable()); + writeAttributes(xmlWriter, graph.getModel().getEdgeTable()); + writeNodes(xmlWriter, graph); + writeEdges(xmlWriter, graph); + + xmlWriter.writeEndElement(); + } + + private void writeMeta(XMLStreamWriter xmlWriter) throws Exception { + if(exportMeta) { + xmlWriter.writeStartElement(META); + xmlWriter.writeAttribute(META_LASTMODIFIEDDATE, getDateTime()); + + xmlWriter.writeStartElement(META_CREATOR); + + xmlWriter.writeCharacters(VersionUtils.getGephiVersion()); + xmlWriter.writeEndElement(); + + xmlWriter.writeStartElement(META_TITLE); + xmlWriter.writeCharacters(workspace.getWorkspaceMetadata().getTitle()); + xmlWriter.writeEndElement(); + + xmlWriter.writeStartElement(META_DESCRIPTION); + xmlWriter.writeCharacters(workspace.getWorkspaceMetadata().getDescription()); + xmlWriter.writeEndElement(); + + xmlWriter.writeEndElement(); + } + } + + private void writeAttributes(XMLStreamWriter xmlWriter, Table table) throws Exception { + List staticCols = new ArrayList<>(); + List dynamicCols = new ArrayList<>(); + String attClass = table.getElementClass().equals(Node.class) ? "node" : "edge"; + + for (Column col : table) { + if (exportAttributes && !col.isProperty()) { + if (exportDynamic && col.isDynamic()) { + dynamicCols.add(col); + } else { + staticCols.add(col); + } + } else if (exportDynamic && + (AttributeUtils.isEdgeColumn(col) && col.isDynamic() && col.getId().equals("weight"))) { + dynamicCols.add(col); + } + } + + if (!staticCols.isEmpty()) { + writeAttributes(xmlWriter, staticCols.toArray(new Column[0]), "static", attClass); + } + if (!dynamicCols.isEmpty()) { + writeAttributes(xmlWriter, dynamicCols.toArray(new Column[0]), "dynamic", attClass); + } + } + + private void writeAttributes(XMLStreamWriter xmlWriter, Column[] cols, String mode, String attClass) + throws Exception { + xmlWriter.writeStartElement(ATTRIBUTES); + xmlWriter.writeAttribute(ATTRIBUTES_CLASS, attClass); + xmlWriter.writeAttribute(ATTRIBUTES_MODE, mode); + + for (Column col : cols) { + + xmlWriter.writeStartElement(ATTRIBUTE); + xmlWriter.writeAttribute(ATTRIBUTE_ID, col.getId()); + xmlWriter.writeAttribute(ATTRIBUTE_TITLE, col.getTitle()); + + if (col.isArray()) { + xmlWriter.writeAttribute(ATTRIBUTE_TYPE, + "list" + col.getTypeClass().getComponentType().getSimpleName().toLowerCase()); + } else if (col.isDynamic()) { + xmlWriter.writeAttribute(ATTRIBUTE_TYPE, + AttributeUtils.getStaticType((Class) col.getTypeClass()).getSimpleName() + .toLowerCase()); + } else { + xmlWriter.writeAttribute(ATTRIBUTE_TYPE, col.getTypeClass().getSimpleName().toLowerCase()); + } + if (col.getDefaultValue() != null) { + xmlWriter.writeStartElement(ATTRIBUTE_DEFAULT); + String valString; + if (col.isArray()) { + valString = AttributeUtils.printArray(col.getDefaultValue()); + } else { + valString = col.getDefaultValue().toString(); + } + xmlWriter.writeCharacters(valString); + xmlWriter.writeEndElement(); + } + xmlWriter.writeEndElement(); + } + + xmlWriter.writeEndElement(); + } + + private void writeNodes(XMLStreamWriter xmlWriter, Graph graph) throws Exception { + if (cancel) { + return; + } + xmlWriter.writeStartElement(NODES); + + NodeIterable nodeIterable = graph.getNodes(); + for (Node node : nodeIterable) { + xmlWriter.writeStartElement(NODE); + + String id = node.getId().toString(); + xmlWriter.writeAttribute(NODE_ID, id); + if (node.getLabel() != null && !node.getLabel().isEmpty()) { + xmlWriter.writeAttribute(NODE_LABEL, node.getLabel()); + } + + if (exportDynamic) { + writeTimeSet(xmlWriter, graph, node); + } + + writeAttValues(xmlWriter, graph, node); + + if (exportSize) { + writeNodeSize(xmlWriter, node); + } + + if (exportPosition) { + writeNodePosition(xmlWriter, node); + } + + if (exportColors) { + writeNodeColor(xmlWriter, node); + } + + xmlWriter.writeEndElement(); + Progress.progress(progress); + if (cancel) { + nodeIterable.doBreak(); + break; + } + } + + xmlWriter.writeEndElement(); + } + + private String getValue(Object val, Column column) { + if(column.isNumber()) { + return replaceInfinity(AttributeUtils.print(val)); + } else { + return AttributeUtils.print(val); + } + } + + private void writeAttValue(XMLStreamWriter xmlWriter, Graph graph, Column column, Element element) + throws Exception { + if (!column.isDynamic()) { + Object val = element.getAttribute(column); + if (val != null || includeNullAttValues) { + xmlWriter.writeEmptyElement(ATTVALUE); + xmlWriter.writeAttribute(ATTVALUE_FOR, column.getId()); + xmlWriter.writeAttribute(ATTVALUE_VALUE, getValue(val, column)); + } + } else if (exportDynamic) { + Interval visibleInterval = graph.getView().getTimeInterval(); + TimeRepresentation timeRepresentation = graph.getModel().getConfiguration().getTimeRepresentation(); + TimeFormat timeFormat = graph.getModel().getTimeFormat(); + ZoneId timeZone = graph.getModel().getTimeZone(); + if (timeRepresentation.equals(TimeRepresentation.INTERVAL)) { + IntervalMap timeMap = (IntervalMap) element.getAttribute(column); + if (timeMap != null) { + for (Interval interval : timeMap.toKeysArray()) { + if (!exportVisible || interval.compareTo(visibleInterval) == 0) { + final Object defaultValue = null; + final Object value = timeMap.get(interval, defaultValue); + if (value != null || includeNullAttValues) { + xmlWriter.writeEmptyElement(ATTVALUE); + xmlWriter.writeAttribute(ATTVALUE_FOR, column.getId()); + xmlWriter.writeAttribute(ATTVALUE_VALUE, getValue(value, column)); + if (!Double.isInfinite(interval.getLow())) { + String intervalLow = + AttributeUtils.printTimestampInFormat(interval.getLow(), timeFormat, timeZone); + xmlWriter.writeAttribute(START, intervalLow); + } + if (!Double.isInfinite(interval.getHigh())) { + String intervalHigh = + AttributeUtils.printTimestampInFormat(interval.getHigh(), timeFormat, timeZone); + xmlWriter.writeAttribute(END, intervalHigh); + } + } + } + } + } + } else { + TimestampMap timeMap = (TimestampMap) element.getAttribute(column); + if (timeMap != null) { + for (Double timestamp : timeMap.toKeysArray()) { + if (!exportVisible || visibleInterval.compareTo(timestamp) == 0) { + final Object defaultValue = null; + final Object value = timeMap.get(timestamp, defaultValue); + if (value != null || includeNullAttValues) { + xmlWriter.writeEmptyElement(ATTVALUE); + xmlWriter.writeAttribute(ATTVALUE_FOR, column.getId()); + xmlWriter.writeAttribute(ATTVALUE_VALUE, getValue(value, column)); + xmlWriter.writeAttribute(TIMESTAMP, + AttributeUtils.printTimestampInFormat(timestamp, timeFormat, timeZone)); + } + } + } + } + } + } else { + Object value = element.getAttribute(column, graph.getView()); + if (value != null || includeNullAttValues) { + xmlWriter.writeEmptyElement(ATTVALUE); + xmlWriter.writeAttribute(ATTVALUE_FOR, column.getId()); + xmlWriter.writeAttribute(ATTVALUE_VALUE, getValue(value, column)); + } + } + } + + private void writeAttValues(XMLStreamWriter xmlWriter, Graph graph, Element element) throws Exception { + List columns = new ArrayList<>(); + for (Column column : element.getAttributeColumns()) { + if ((exportAttributes && !column.isProperty()) || + (element instanceof Edge && ((Edge) element).hasDynamicWeight() && column.getId().equals("weight"))) { + columns.add(column); + + } + } + if (!columns.isEmpty()) { + xmlWriter.writeStartElement(ATTVALUES); + for (Column column : columns) { + writeAttValue(xmlWriter, graph, column, element); + } + xmlWriter.writeEndElement(); + } + } + + private void writeNodePosition(XMLStreamWriter xmlWriter, Node node) throws Exception { + float x = normalization.normalizeX(node.x()); + float y = normalization.normalizeY(node.y()); + float z = normalization.normalizeZ(node.z()); + if (!(x == 0 && y == 0 && z == 0)) { + xmlWriter.writeStartElement(VIZ, NODE_POSITION, VIZ_NAMESPACE); + xmlWriter.writeAttribute("x", "" + x); + xmlWriter.writeAttribute("y", "" + y); + if (normalization.minZ != 0 || normalization.maxZ != 0) { + xmlWriter.writeAttribute("z", "" + z); + } + xmlWriter.writeEndElement(); + } + } + + private void writeNodeSize(XMLStreamWriter xmlWriter, Node node) throws Exception { + float size = normalization.normalizeSize(node.size()); + if(normalize || size != 0) { + xmlWriter.writeStartElement(VIZ, NODE_SIZE, VIZ_NAMESPACE); + xmlWriter.writeAttribute("value", "" + size); + xmlWriter.writeEndElement(); + } + } + + private void writeNodeColor(XMLStreamWriter xmlWriter, Node node) throws Exception { + int r = Math.round(node.r() * 255f); + int g = Math.round(node.g() * 255f); + int b = Math.round(node.b() * 255f); + if (r != 0 || g != 0 || b != 0) { + xmlWriter.writeStartElement(VIZ, NODE_COLOR, VIZ_NAMESPACE); + xmlWriter.writeAttribute("r", "" + r); + xmlWriter.writeAttribute("g", "" + g); + xmlWriter.writeAttribute("b", "" + b); + if (node.alpha() != 1f) { + xmlWriter.writeAttribute("a", "" + node.alpha()); + } + xmlWriter.writeEndElement(); + } + } + + private void writeTimeSet(XMLStreamWriter xmlWriter, Graph graph, Element element) throws Exception { + Interval visibleInterval = graph.getView().getTimeInterval(); + TimeRepresentation timeRepresentation = graph.getModel().getConfiguration().getTimeRepresentation(); + TimeSet timeSet = (TimeSet) element.getAttribute("timeset"); + TimeFormat timeFormat = graph.getModel().getTimeFormat(); + ZoneId timeZone = graph.getModel().getTimeZone(); + if (timeSet != null && !timeSet.isEmpty()) { + if (timeSet.size() > 1) { + xmlWriter.writeStartElement(SPELLS); + if (timeRepresentation.equals(TimeRepresentation.INTERVAL)) { + for (Interval interval : ((IntervalSet) timeSet).toArray()) { + if (!exportVisible || interval.compareTo(visibleInterval) == 0) { + xmlWriter.writeStartElement(SPELL); + if (!Double.isInfinite(interval.getLow())) { + String intervalLow = + AttributeUtils.printTimestampInFormat(interval.getLow(), timeFormat, timeZone); + xmlWriter.writeAttribute(START, intervalLow); + } + if (!Double.isInfinite(interval.getHigh())) { + String intervalHigh = + AttributeUtils.printTimestampInFormat(interval.getHigh(), timeFormat, timeZone); + xmlWriter.writeAttribute(END, intervalHigh); + } + xmlWriter.writeEndElement(); + } + } + } else if (timeRepresentation.equals(TimeRepresentation.TIMESTAMP)) { + for (Double timestamp : ((TimestampSet) timeSet).toArray()) { + if (!exportVisible || visibleInterval.compareTo(timestamp) == 0) { + xmlWriter.writeStartElement(SPELL); + xmlWriter.writeAttribute(TIMESTAMP, + AttributeUtils.printTimestampInFormat(timestamp, timeFormat, timeZone)); + xmlWriter.writeEndElement(); + } + } + } + xmlWriter.writeEndElement(); + } else if (timeRepresentation.equals(TimeRepresentation.INTERVAL)) { + Interval interval = ((IntervalSet) timeSet).toArray()[0]; + if (!Double.isInfinite(interval.getLow())) { + String intervalLow = AttributeUtils.printTimestampInFormat(interval.getLow(), timeFormat, timeZone); + xmlWriter.writeAttribute(START, intervalLow); + } + if (!Double.isInfinite(interval.getHigh())) { + String intervalHigh = + AttributeUtils.printTimestampInFormat(interval.getHigh(), timeFormat, timeZone); + xmlWriter.writeAttribute(END, intervalHigh); + } + } else if (timeRepresentation.equals(TimeRepresentation.TIMESTAMP)) { + Double timestamp = ((TimestampSet) timeSet).toArray()[0]; + xmlWriter + .writeAttribute(TIMESTAMP, AttributeUtils.printTimestampInFormat(timestamp, timeFormat, timeZone)); + } + } + } + + private void writeEdges(XMLStreamWriter xmlWriter, Graph graph) throws Exception { + if (cancel) { + return; + } + + xmlWriter.writeStartElement(EDGES); + + EdgeIterable edgeIterable = graph.getEdges(); + for (Edge edge : edgeIterable) { + xmlWriter.writeStartElement(EDGE); + + xmlWriter.writeAttribute(EDGE_ID, edge.getId().toString()); + + xmlWriter.writeAttribute(EDGE_SOURCE, edge.getSource().getId().toString()); + xmlWriter.writeAttribute(EDGE_TARGET, edge.getTarget().getId().toString()); + + if (graph.isMixed()) { + if (edge.isDirected()) { + xmlWriter.writeAttribute(EDGE_TYPE, "directed"); + } else { + xmlWriter.writeAttribute(EDGE_TYPE, "undirected"); + } + } + + String label = edge.getLabel(); + if (label != null && !label.isEmpty()) { + xmlWriter.writeAttribute(EDGE_LABEL, label); + } + + if (edge.getType() != 0) { + xmlWriter.writeAttribute(EDGE_KIND, edge.getTypeLabel().toString()); + } + + if (!edge.hasDynamicWeight()) { + double weight = edge.getWeight(); + if (weight != 1f) { + xmlWriter.writeAttribute(EDGE_WEIGHT, String.valueOf(weight)); + } + } + + if (exportDynamic) { + writeTimeSet(xmlWriter, graph, edge); + } + + if (exportColors) { + writeEdgeColor(xmlWriter, edge); + } + + writeAttValues(xmlWriter, graph, edge); + + xmlWriter.writeEndElement(); + Progress.progress(progress); + if (cancel) { + edgeIterable.doBreak(); + break; + } + } + + xmlWriter.writeEndElement(); + } + + private void writeEdgeColor(XMLStreamWriter xmlWriter, Edge edge) throws Exception { + if (edge.alpha() != 0) { //Edge has custom color + int r = Math.round(edge.r() * 255f); + int g = Math.round(edge.g() * 255f); + int b = Math.round(edge.b() * 255f); + if (r != 0 || g != 0 || b != 0) { + xmlWriter.writeStartElement(VIZ, EDGE_COLOR, VIZ_NAMESPACE); + xmlWriter.writeAttribute("r", "" + r); + xmlWriter.writeAttribute("g", "" + g); + xmlWriter.writeAttribute("b", "" + b); + if (edge.alpha() != 1f) { + xmlWriter.writeAttribute("a", "" + edge.alpha()); + } + xmlWriter.writeEndElement(); + } + } + } + + private static String replaceInfinity(String str) { + return str.replace("-Infinity", "-INF").replace("Infinity", "INF"); + } + @Override public boolean cancel() { cancel = true; @@ -653,86 +661,94 @@ public boolean cancel() { public void setProgressTicket(ProgressTicket progressTicket) { this.progress = progressTicket; } -// -// public String getName() { -// return NbBundle.getMessage(getClass(), "ExporterGEXF_name"); -// } -// -// public FileType[] getFileTypes() { -// FileType ft = new FileType(".gexf", NbBundle.getMessage(getClass(), "fileType_GEXF_Name")); -// return new FileType[]{ft}; -// } -// -// private String getDateTime() { -// DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); -// Date date = new Date(); -// return dateFormat.format(date); -// } - public void setExportAttributes(boolean exportAttributes) { - this.exportAttributes = exportAttributes; + public String getName() { + return NbBundle.getMessage(getClass(), "ExporterGEXF_name"); } - public void setExportColors(boolean exportColors) { - this.exportColors = exportColors; + public FileType[] getFileTypes() { + FileType ft = new FileType(".gexf", NbBundle.getMessage(getClass(), "fileType_GEXF_Name")); + return new FileType[] {ft}; } - public void setExportPosition(boolean exportPosition) { - this.exportPosition = exportPosition; + private String getDateTime() { + DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); + Date date = new Date(); + return dateFormat.format(date); } - public void setExportSize(boolean exportSize) { - this.exportSize = exportSize; + public boolean isExportAttributes() { + return exportAttributes; } - public void setNormalize(boolean normalize) { - this.normalize = normalize; + public void setExportAttributes(boolean exportAttributes) { + this.exportAttributes = exportAttributes; } - public void setExportDynamic(boolean exportDynamic) { - this.exportDynamic = exportDynamic; + public boolean isExportColors() { + return exportColors; } - public void setExportHierarchy(boolean exportHierarchy) { - this.exportHierarchy = exportHierarchy; + public void setExportColors(boolean exportColors) { + this.exportColors = exportColors; } - public boolean isExportAttributes() { - return exportAttributes; + public boolean isExportPosition() { + return exportPosition; } - public boolean isExportColors() { - return exportColors; + public void setExportPosition(boolean exportPosition) { + this.exportPosition = exportPosition; } - public boolean isExportPosition() { - return exportPosition; + public boolean isExportMeta() { + return exportMeta; + } + + public void setExportMeta(boolean exportMeta) { + this.exportMeta = exportMeta; } public boolean isExportSize() { return exportSize; } + public void setExportSize(boolean exportSize) { + this.exportSize = exportSize; + } + public boolean isNormalize() { return normalize; } + public void setNormalize(boolean normalize) { + this.normalize = normalize; + } + @Override public boolean isExportVisible() { return exportVisible; } + @Override + public void setExportVisible(boolean exportVisible) { + this.exportVisible = exportVisible; + } + public boolean isExportDynamic() { return exportDynamic; } - public boolean isExportHierarchy() { - return exportHierarchy; + public void setExportDynamic(boolean exportDynamic) { + this.exportDynamic = exportDynamic; + } + + public boolean isIncludeNullAttValues() { + return includeNullAttValues; } - @Override - public void setExportVisible(boolean exportVisible) { - this.exportVisible = exportVisible; + public void setIncludeNullAttValues(boolean includeNullAttValues) { + this.includeNullAttValues = includeNullAttValues; } @Override diff --git a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterGML.java b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterGML.java index d85abf7507..8fe1c00b85 100644 --- a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterGML.java +++ b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterGML.java @@ -39,35 +39,39 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.plugin; +import java.awt.Color; import java.io.IOException; import java.io.Writer; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.attribute.api.Column; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.gephi.graph.api.Column; import org.gephi.graph.api.Edge; +import org.gephi.graph.api.EdgeIterable; import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphController; import org.gephi.graph.api.GraphModel; import org.gephi.graph.api.Node; +import org.gephi.graph.api.NodeIterable; import org.gephi.io.exporter.spi.CharacterExporter; import org.gephi.io.exporter.spi.GraphExporter; import org.gephi.project.api.Workspace; import org.gephi.utils.longtask.spi.LongTask; +import org.gephi.utils.progress.Progress; import org.gephi.utils.progress.ProgressTicket; -import org.openide.util.Exceptions; import org.openide.util.Lookup; /** - * * @author megaterik */ public class ExporterGML implements GraphExporter, CharacterExporter, LongTask { + private NormalizationHelper normalization; private boolean exportVisible = false; private Workspace workspace; private GraphModel graphModel; - private AttributeModel attributeModel; private Writer writer; private ProgressTicket progressTicket; private boolean cancel = false; @@ -78,15 +82,11 @@ public class ExporterGML implements GraphExporter, CharacterExporter, LongTask { private boolean exportCoordinates = true; private boolean exportNodeSize = true; private boolean exportEdgeSize = true; - private boolean exportDynamicWeight = true; + private final boolean exportDynamicWeight = true; private boolean exportColor = true; private boolean exportNotRecognizedElements = true; //data to normalize private boolean normalize = false; - double minX, maxX; - double minY, maxY; - double minZ, maxZ; - double minSize, maxSize; public boolean isNormalize() { return normalize; @@ -97,41 +97,35 @@ public void setNormalize(boolean normalize) { } @Override - public void setExportVisible(boolean exportVisible) { - this.exportVisible = exportVisible; + public boolean isExportVisible() { + return exportVisible; } @Override - public boolean isExportVisible() { - return exportVisible; + public void setExportVisible(boolean exportVisible) { + this.exportVisible = exportVisible; } @Override public boolean execute() { GraphController graphController = Lookup.getDefault().lookup(GraphController.class); graphModel = graphController.getGraphModel(workspace); - attributeModel = graphController.getAttributeModel(workspace); - Graph graph = null; - if (exportVisible) { - graph = graphModel.getGraphVisible(); - } else { - graph = graphModel.getGraph(); - } - progressTicket.start(graph.getNodeCount() + graph.getEdgeCount()); + Graph graph = exportVisible ? graphModel.getGraphVisible() : graphModel.getGraph(); - graph.readLock(); + Progress.start(progressTicket, graph.getNodeCount() + graph.getEdgeCount()); - if (normalize) { - computeNormalizeValues(graph); - } + graph.readLock(); try { + normalization = NormalizationHelper.build(normalize, graph); exportData(graph); - } catch (IOException ex) { - Exceptions.printStackTrace(ex); + } catch (IOException e) { + Logger.getLogger(ExporterGML.class.getName()).log(Level.SEVERE, null, e); + } finally { + graph.readUnlock(); + Progress.finish(progressTicket); } - progressTicket.finish(); - graph.readUnlock(); + return !cancel; } @@ -167,21 +161,25 @@ private void printTag(String s) throws IOException { private void exportData(Graph graph) throws IOException { printOpen("graph"); - printTag("Creator Gephi"); + printTag("Creator \"Gephi\""); if (graph.isDirected() || graph.isMixed()) { printTag("directed 1"); } else if (graph.isUndirected()) { printTag("directed 0"); } - for (Node node : graph.getNodes()) { + NodeIterable nodeIterable = graph.getNodes(); + for (Node node : nodeIterable) { if (cancel) { - break; + nodeIterable.doBreak(); + return; } printNode(node, graph); } - for (Edge edge : graph.getEdges()) { + EdgeIterable edgeIterable = graph.getEdges(); + for (Edge edge : edgeIterable) { if (cancel) { - break; + edgeIterable.doBreak(); + return; } printEdge(edge, graph); } @@ -206,13 +204,18 @@ private void printEdge(Edge edge, Graph graph) throws IOException { if (graph.isMixed()) { //if graph not mixed, then all edges have the same direction, described earlier if (edge.isDirected()) { printTag("directed 1"); - } else if (!edge.isDirected()) { + } else { printTag("directed 0"); } } + if (exportColor && edge.alpha() != 0f) { + Color color = edge.getColor(); + printTag( + "fill \"" + String.format("#%02x%02x%02x", color.getRed(), color.getGreen(), color.getBlue()) + "\""); + } if (exportNotRecognizedElements) { - for (Column col : attributeModel.getEdgeTable()) { + for (Column col : graphModel.getEdgeTable()) { if (!col.isProperty()) { Object value = edge.getAttribute(col, graph.getView()); if (value != null) { @@ -223,7 +226,7 @@ private void printEdge(Edge edge, Graph graph) throws IOException { } printClose(); - progressTicket.progress(); + Progress.progress(progressTicket); } private void printNode(Node node, Graph graph) throws IOException { @@ -235,35 +238,25 @@ private void printNode(Node node, Graph graph) throws IOException { if (exportCoordinates || exportNodeSize || exportColor) { printOpen("graphics"); if (exportCoordinates) { - if (!normalize) { - printTag("x " + node.x()); - printTag("y " + node.y()); - printTag("z " + node.z()); - } else { - printTag("x " + (node.x() - minX) / (maxX - minX)); - printTag("y " + (node.y() - minY) / (maxY - minY)); - printTag("z " + (node.z() - minZ) / (maxZ - minZ)); - } + printTag("x " + normalization.normalizeX(node.x())); + printTag("y " + normalization.normalizeY(node.y())); + printTag("z " + normalization.normalizeZ(node.z())); } if (exportNodeSize) { - if (!normalize) { - printTag("w " + node.size()); - printTag("h " + node.size()); - printTag("d " + node.size()); - } else { - printTag("w " + (node.size() - minSize) / (maxSize - minSize)); - printTag("h " + (node.size() - minSize) / (maxSize - minSize)); - printTag("d " + (node.size() - minSize) / (maxSize - minSize)); - } + final float size = normalization.normalizeSize(node.size()); + printTag("w " + size); + printTag("h " + size); + printTag("d " + size); } if (exportColor) { - printTag("fill \"#" + Integer.toString((int) (node.r() * 255), 16) - + Integer.toString((int) (node.g() * 255), 16) + Integer.toString((int) (node.b() * 255), 16) + "\""); + Color color = node.getColor(); + printTag("fill \"" + String.format("#%02x%02x%02x", color.getRed(), color.getGreen(), color.getBlue()) + + "\""); } printClose(); } if (exportNotRecognizedElements) { - for (Column col : attributeModel.getNodeTable()) { + for (Column col : graphModel.getNodeTable()) { if (!col.isProperty()) { Object value = node.getAttribute(col, graph.getView()); if (value != null) { @@ -273,17 +266,17 @@ private void printNode(Node node, Graph graph) throws IOException { } } printClose(); - progressTicket.progress(); + Progress.progress(progressTicket); } @Override - public void setWorkspace(Workspace workspace) { - this.workspace = workspace; + public Workspace getWorkspace() { + return workspace; } @Override - public Workspace getWorkspace() { - return workspace; + public void setWorkspace(Workspace workspace) { + this.workspace = workspace; } @Override @@ -358,38 +351,17 @@ public void setSpaces(int spaces) { this.spaces = spaces; } - private void computeNormalizeValues(Graph graph) { - minX = Double.MAX_VALUE; - minY = Double.MAX_VALUE; - minZ = Double.MAX_VALUE; - - maxX = Double.MIN_VALUE; - maxY = Double.MIN_VALUE; - maxZ = Double.MIN_VALUE; - - minSize = Double.MAX_VALUE; - maxSize = Double.MIN_VALUE; - for (Node node : graph.getNodes()) { - if (cancel) { - break; - } - minX = Math.min(minX, node.x()); - minY = Math.min(minY, node.y()); - minZ = Math.min(minZ, node.z()); - - maxX = Math.max(maxX, node.x()); - maxY = Math.max(maxY, node.y()); - maxZ = Math.max(maxZ, node.z()); - - minSize = Math.min(minSize, node.size()); - maxSize = Math.max(maxSize, node.size()); - } - } - - //returns string that can be normally readed by import gml tokenizer. removes '"[]# and space, adds "column" to beginning of string if starts with digit + /** + * Returns string that can be normally read by import GML tokenizer. removes + * '"[]# and space, adds "column" to beginning of string if starts with + * digit. + * + * @param s input + * @return formated title + */ private String formatTitle(String s) { - System.err.println("Title " + s.toString()); - String res = s.replace("\"", "").replace("\'", "").replace("[", "").replace("]", "").replace(" ", "").replace("#", ""); + String res = + s.replace("\"", "").replace("'", "").replace("[", "").replace("]", "").replace(" ", "").replace("#", ""); if (s.charAt(0) >= '0' && s.charAt(0) <= '9') { return ("column" + res); } else { diff --git a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterGraphML.java b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterGraphML.java index 597bc18d7c..348fea3f84 100644 --- a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterGraphML.java +++ b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterGraphML.java @@ -40,9 +40,12 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.plugin; import java.io.Writer; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; @@ -55,14 +58,15 @@ Development and Distribution License("CDDL") (collectively, the import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.attribute.api.AttributeUtils; -import org.gephi.attribute.api.Column; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; import org.gephi.graph.api.Edge; +import org.gephi.graph.api.EdgeIterable; import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphController; import org.gephi.graph.api.GraphModel; import org.gephi.graph.api.Node; +import org.gephi.graph.api.NodeIterable; import org.gephi.io.exporter.api.FileType; import org.gephi.io.exporter.spi.CharacterExporter; import org.gephi.io.exporter.spi.GraphExporter; @@ -77,7 +81,6 @@ Development and Distribution License("CDDL") (collectively, the import org.w3c.dom.Text; /** - * * @author Sebastien Heymann * @author Mathieu Bastian */ @@ -88,46 +91,36 @@ public class ExporterGraphML implements GraphExporter, CharacterExporter, LongTa private Workspace workspace; private Writer writer; private boolean exportVisible; - private GraphModel graphModel; - private AttributeModel attributeModel; //Settings private boolean normalize = false; private boolean exportColors = true; private boolean exportPosition = true; private boolean exportSize = true; - private boolean exportDynamicWeight = true; + private final boolean exportDynamicWeight = true; private boolean exportAttributes = true; - //Settings Helper - private float minSize; - private float maxSize; - private float minX; - private float maxX; - private float minY; - private float maxY; - private float minZ; - private float maxZ; + private NormalizationHelper normalization; @Override public boolean execute() { GraphController graphController = Lookup.getDefault().lookup(GraphController.class); - graphModel = graphController.getGraphModel(workspace); - Graph graph = null; - if (exportVisible) { - graph = graphModel.getGraphVisible(); - } else { - graph = graphModel.getGraph(); - } + GraphModel graphModel = graphController.getGraphModel(workspace); + Graph graph = exportVisible ? graphModel.getGraphVisible() : graphModel.getGraph(); + + graph.readLock(); + try { - exportData(createDocument(), graph, attributeModel); + exportData(createDocument(), graph); } catch (Exception e) { - graph.readUnlockAll(); - throw new RuntimeException(e); + Logger.getLogger(ExporterGraphML.class.getName()).log(Level.SEVERE, null, e); + } finally { + graph.readUnlock(); + Progress.finish(progressTicket); } return !cancel; } - public Document createDocument() throws ParserConfigurationException { + private Document createDocument() throws ParserConfigurationException { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder = factory.newDocumentBuilder(); final Document document = documentBuilder.newDocument(); @@ -136,7 +129,7 @@ public Document createDocument() throws ParserConfigurationException { return document; } - private void transform(Document document) throws TransformerConfigurationException, TransformerException { + private void transform(Document document) throws TransformerException { Source source = new DOMSource(document); Result result = new StreamResult(writer); Transformer transformer = TransformerFactory.newInstance().newTransformer(); @@ -158,13 +151,11 @@ public Schema getSchema() { return null; } */ - public boolean exportData(Document document, Graph graph, AttributeModel model) throws Exception { + private void exportData(Document document, Graph graph) throws Exception { Progress.start(progressTicket); - graph.readLock(); - //Options - calculateMinMax(graph); + normalization = NormalizationHelper.build(normalize, graph); //Calculate progress units count int max = graph.getNodeCount() + graph.getEdgeCount(); @@ -174,22 +165,19 @@ public boolean exportData(Document document, Graph graph, AttributeModel model) Element root = document.createElementNS("http://graphml.graphdrawing.org/xmlns", "graphml"); document.appendChild(root); - createKeys(document, root); + createKeys(document, root, graph.getModel()); Element graphE = createGraph(document, graph); root.appendChild(graphE); - graph.readUnlockAll(); - if (!cancel) { transform(document); } Progress.finish(progressTicket); - return !cancel; } - private void createKeys(Document document, Element root) { + private void createKeys(Document document, Element root, GraphModel graphModel) { Element nodeLabelKeyE = document.createElement("key"); nodeLabelKeyE.setAttribute("id", "label"); nodeLabelKeyE.setAttribute("attr.name", "label"); @@ -211,13 +199,6 @@ private void createKeys(Document document, Element root) { weightKeyE.setAttribute("for", "edge"); root.appendChild(weightKeyE); - Element edgeIdKeyE = document.createElement("key"); - edgeIdKeyE.setAttribute("id", "edgeid"); - edgeIdKeyE.setAttribute("attr.name", "Edge Id"); - edgeIdKeyE.setAttribute("attr.type", "string"); - edgeIdKeyE.setAttribute("for", "edge"); - root.appendChild(edgeIdKeyE); - if (exportColors) { Element colorRKeyE = document.createElement("key"); colorRKeyE.setAttribute("id", "r"); @@ -256,7 +237,7 @@ private void createKeys(Document document, Element root) { positionKey2E.setAttribute("for", "node"); root.appendChild(positionKey2E); - if (minZ != 0f || maxZ != 0f) { + if (normalization.minZ != 0f || normalization.maxZ != 0f) { Element positionKey3E = document.createElement("key"); positionKey3E.setAttribute("id", "z"); positionKey3E.setAttribute("attr.name", "z"); @@ -276,9 +257,9 @@ private void createKeys(Document document, Element root) { } //Attributes - if (attributeModel != null && exportAttributes) { + if (graphModel != null && exportAttributes) { //Node attributes - for (Column column : attributeModel.getNodeTable()) { + for (Column column : graphModel.getNodeTable()) { if (!column.isProperty()) { Element attributeE = createAttribute(document, column); attributeE.setAttribute("for", "node"); @@ -286,9 +267,8 @@ private void createKeys(Document document, Element root) { } } - for (Column column : attributeModel.getEdgeTable()) { + for (Column column : graphModel.getEdgeTable()) { if (!column.isProperty()) { - //Data or computed Element attributeE = createAttribute(document, column); attributeE.setAttribute("for", "edge"); root.appendChild(attributeE); @@ -300,7 +280,7 @@ private void createKeys(Document document, Element root) { private Element createGraph(Document document, Graph graph) throws Exception { Element graphE = document.createElement("graph"); - if (graphModel.isDirected() || graphModel.isMixed()) { + if (graph.isDirected() || graph.isMixed()) { graphE.setAttribute("edgedefault", "directed"); } else { graphE.setAttribute("edgedefault", "undirected"); // defaultValue @@ -320,8 +300,8 @@ private Element createAttribute(Document document, Column column) { attributeE.setAttribute("id", column.getId()); attributeE.setAttribute("attr.name", column.getTitle()); if (column.getTypeClass().equals(Integer.class) - || column.getTypeClass().equals(Short.class) - || column.getTypeClass().equals(Byte.class)) { + || column.getTypeClass().equals(Short.class) + || column.getTypeClass().equals(Byte.class)) { attributeE.setAttribute("attr.type", "int"); } else { attributeE.setAttribute("attr.type", AttributeUtils.getTypeName(column.getTypeClass())); @@ -363,9 +343,10 @@ private Element createEdgeAttvalue(Document document, Column column, Graph graph } private void createNodes(Document document, Element parentE, Graph graph) throws Exception { - // there is no tree - for (Node n : graph.getNodes()) { + NodeIterable nodeIterable = graph.getNodes(); + for (Node n : nodeIterable) { if (cancel) { + nodeIterable.doBreak(); break; } Element nodeE = createNode(document, graph, n); @@ -384,8 +365,8 @@ private Element createNode(Document document, Graph graph, Node n) throws Except } //Attribute values - if (attributeModel != null && exportAttributes) { - for (Column column : attributeModel.getNodeTable()) { + if (exportAttributes) { + for (Column column : n.getAttributeColumns()) { if (!column.isProperty()) { //Data or computed Element attvalueE = createNodeAttvalue(document, column, graph, n); @@ -416,7 +397,7 @@ private Element createNode(Document document, Graph graph, Node n) throws Except nodeE.appendChild(positionXE); Element positionYE = createNodePositionY(document, n); nodeE.appendChild(positionYE); - if (minZ != 0f || maxZ != 0f) { + if (normalization.minZ != 0f || normalization.maxZ != 0f) { Element positionZE = createNodePositionZ(document, n); nodeE.appendChild(positionZE); } @@ -428,8 +409,10 @@ private Element createNode(Document document, Graph graph, Node n) throws Except } private void createEdges(Document document, Element edgesE, Graph graph) throws Exception { - for (Edge e : graph.getEdges()) { + EdgeIterable itr = graph.getEdges(); + for (Edge e : itr) { if (cancel) { + itr.doBreak(); break; } Element edgeE = createEdge(document, e, graph); @@ -440,14 +423,10 @@ private void createEdges(Document document, Element edgesE, Graph graph) throws private Element createEdge(Document document, Edge e, Graph graph) throws Exception { Element edgeE = document.createElement("edge"); + edgeE.setAttribute("id", e.getId().toString()); edgeE.setAttribute("source", e.getSource().getId().toString()); edgeE.setAttribute("target", e.getTarget().getId().toString()); - if (e.getId() != null && !e.getId().toString().isEmpty() && !String.valueOf(e.getId()).equals(e.getId())) { - Element idE = createEdgeId(document, e); - edgeE.appendChild(idE); - } - //Label if (e.getLabel() != null && !e.getLabel().isEmpty()) { Element labelE = createEdgeLabel(document, e); @@ -457,15 +436,24 @@ private Element createEdge(Document document, Edge e, Graph graph) throws Except Element weightE = createEdgeWeight(document, e, graph); edgeE.appendChild(weightE); - if (e.isDirected() && !graphModel.isDirected()) { - edgeE.setAttribute("type", "directed"); - } else if (!e.isDirected() && graphModel.isDirected()) { - edgeE.setAttribute("type", "undirected"); + boolean directedEdgeDefault = graph.isDirected() || graph.isMixed(); + if (e.isDirected() && !directedEdgeDefault) { + edgeE.setAttribute("directed", "true"); + } else if (!e.isDirected() && directedEdgeDefault) { + edgeE.setAttribute("directed", "false"); + } + + if (e.getTypeLabel() != null) { + //Edge labels not retained on graphml export https://github.com/gephi/gephi/issues/1516 + String typeLabel = e.getTypeLabel().toString().trim(); + if (!typeLabel.isEmpty()) { + edgeE.setAttribute("label", typeLabel); + } } //Attribute values - if (attributeModel != null) { - for (Column column : attributeModel.getEdgeTable()) { + if (exportAttributes) { + for (Column column : e.getAttributeColumns()) { if (!column.isProperty()) { //Data or computed Element attvalueE = createEdgeAttvalue(document, column, graph, e); @@ -475,6 +463,7 @@ private Element createEdge(Document document, Edge e, Graph graph) throws Except } } } + Progress.progress(progressTicket); return edgeE; @@ -482,10 +471,7 @@ private Element createEdge(Document document, Edge e, Graph graph) throws Except private Element createNodeSize(Document document, Node n) throws Exception { Element sizeE = document.createElement("data"); - float size = n.size(); - if (normalize) { - size = (size - minSize) / (maxSize - minSize); - } + float size = normalization.normalizeSize(n.size()); sizeE.setAttribute("key", "size"); sizeE.setTextContent("" + size); @@ -518,10 +504,7 @@ private Element createNodeColorB(Document document, Node n) throws Exception { private Element createNodePositionX(Document document, Node n) throws Exception { Element positionXE = document.createElement("data"); - float x = n.x(); - if (normalize && x != 0.0) { - x = (x - minX) / (maxX - minX); - } + float x = normalization.normalizeX(n.x()); positionXE.setAttribute("key", "x"); positionXE.setTextContent("" + x); return positionXE; @@ -529,10 +512,7 @@ private Element createNodePositionX(Document document, Node n) throws Exception private Element createNodePositionY(Document document, Node n) throws Exception { Element positionYE = document.createElement("data"); - float y = n.y(); - if (normalize && y != 0.0) { - y = (y - minY) / (maxY - minY); - } + float y = normalization.normalizeY(n.y()); positionYE.setAttribute("key", "y"); positionYE.setTextContent("" + y); @@ -541,10 +521,7 @@ private Element createNodePositionY(Document document, Node n) throws Exception private Element createNodePositionZ(Document document, Node n) throws Exception { Element positionZE = document.createElement("data"); - float z = n.z(); - if (normalize && z != 0.0) { - z = (z - minZ) / (maxZ - minZ); - } + float z = normalization.normalizeZ(n.z()); positionZE.setAttribute("key", "z"); positionZE.setTextContent("" + z); @@ -559,14 +536,6 @@ private Element createNodeLabel(Document document, Node n) throws Exception { return labelE; } - private Element createEdgeId(Document document, Edge e) throws Exception { - Element idE = document.createElement("data"); - idE.setAttribute("key", "edgeid"); - idE.setTextContent(e.getId().toString()); - - return idE; - } - private Element createEdgeWeight(Document document, Edge e, Graph graph) throws Exception { Element weightE = document.createElement("data"); weightE.setAttribute("key", "weight"); @@ -589,28 +558,6 @@ private Element createEdgeLabel(Document document, Edge e) throws Exception { return labelE; } - private void calculateMinMax(Graph graph) { - minX = Float.POSITIVE_INFINITY; - maxX = Float.NEGATIVE_INFINITY; - minY = Float.POSITIVE_INFINITY; - maxY = Float.NEGATIVE_INFINITY; - minZ = Float.POSITIVE_INFINITY; - maxZ = Float.NEGATIVE_INFINITY; - minSize = Float.POSITIVE_INFINITY; - maxSize = Float.NEGATIVE_INFINITY; - - for (Node node : graph.getNodes()) { - minX = Math.min(minX, node.x()); - maxX = Math.max(maxX, node.x()); - minY = Math.min(minY, node.y()); - maxY = Math.max(maxY, node.y()); - minZ = Math.min(minZ, node.z()); - maxZ = Math.max(maxZ, node.z()); - minSize = Math.min(minSize, node.size()); - maxSize = Math.max(maxSize, node.size()); - } - } - @Override public boolean cancel() { cancel = true; @@ -628,49 +575,49 @@ public String getName() { public FileType[] getFileTypes() { FileType ft = new FileType(".graphml", NbBundle.getMessage(getClass(), "fileType_GraphML_Name")); - return new FileType[]{ft}; - } - - public void setExportAttributes(boolean exportAttributes) { - this.exportAttributes = exportAttributes; - } - - public void setExportColors(boolean exportColors) { - this.exportColors = exportColors; - } - - public void setExportPosition(boolean exportPosition) { - this.exportPosition = exportPosition; - } - - public void setExportSize(boolean exportSize) { - this.exportSize = exportSize; - } - - public void setNormalize(boolean normalize) { - this.normalize = normalize; + return new FileType[] {ft}; } public boolean isExportAttributes() { return exportAttributes; } + public void setExportAttributes(boolean exportAttributes) { + this.exportAttributes = exportAttributes; + } + public boolean isExportColors() { return exportColors; } + public void setExportColors(boolean exportColors) { + this.exportColors = exportColors; + } + public boolean isExportPosition() { return exportPosition; } + public void setExportPosition(boolean exportPosition) { + this.exportPosition = exportPosition; + } + public boolean isExportSize() { return exportSize; } + public void setExportSize(boolean exportSize) { + this.exportSize = exportSize; + } + public boolean isNormalize() { return normalize; } + public void setNormalize(boolean normalize) { + this.normalize = normalize; + } + @Override public boolean isExportVisible() { return exportVisible; diff --git a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterJson.java b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterJson.java new file mode 100644 index 0000000000..0121b7e79d --- /dev/null +++ b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterJson.java @@ -0,0 +1,539 @@ +package org.gephi.io.exporter.plugin; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.TypeAdapter; +import com.google.gson.TypeAdapterFactory; +import com.google.gson.reflect.TypeToken; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import java.time.ZoneId; +import org.gephi.graph.api.*; +import org.gephi.io.exporter.spi.CharacterExporter; +import org.gephi.io.exporter.spi.GraphExporter; +import org.gephi.project.api.Workspace; +import org.gephi.utils.VersionUtils; +import org.gephi.utils.longtask.spi.LongTask; +import org.gephi.utils.progress.Progress; +import org.gephi.utils.progress.ProgressTicket; +import org.openide.util.Lookup; + +import java.awt.*; +import java.io.IOException; +import java.io.Writer; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; + +public class ExporterJson implements GraphExporter, CharacterExporter, LongTask { + + // Architecture + private boolean cancel = false; + private ProgressTicket progress; + private Workspace workspace; + private boolean exportVisible; + private Writer writer; + private Graph graph; + // Settings + private boolean normalize = false; + private boolean exportColors = true; + private boolean exportPosition = true; + private boolean exportSize = true; + private boolean exportAttributes = true; + private boolean exportDynamic = true; + private boolean exportMeta = true; + private boolean prettyPrint = true; + + // Helper + private NormalizationHelper normalization; + + // Formats + public enum Format {Graphology} + + private Format format = Format.Graphology; + + @Override + public boolean execute() { + GraphController graphController = Lookup.getDefault().lookup(GraphController.class); + GraphModel graphModel = graphController.getGraphModel(workspace); + graph = exportVisible ? graphModel.getGraphVisible() : graphModel.getGraph(); + + Progress.start(progress); + graph.readLock(); + + //Is it a dynamic graph? + exportDynamic = exportDynamic && graphModel.isDynamic(); + + //Calculate min & max + normalization = NormalizationHelper.build(normalize, graph); + + Progress.switchToDeterminate(progress, graph.getNodeCount() + graph.getEdgeCount()); + + try { + exportData(); + } catch (Exception e) { + Logger.getLogger(ExporterJson.class.getName()).log(Level.SEVERE, null, e); + } finally { + graph.readUnlock(); + Progress.finish(progress); + } + + return !cancel; + } + + private void exportData() { + GsonBuilder gsonBuilder = new GsonBuilder() + .registerTypeAdapter(Color.class, new ColorAdapter()) + .registerTypeAdapterFactory(new GraphTypeAdapterFactory()); + + if (prettyPrint) { + gsonBuilder = gsonBuilder.setPrettyPrinting(); + } + + Gson gson = gsonBuilder + .create(); + gson.toJson(graph, writer); + } + + private class ColorAdapter extends WriteTypeAdapter { + + @Override + public void write(JsonWriter out, Color value) throws IOException { + if (exportColors) { + out.name("color"); + if (value.getAlpha() < 255) { + out.value(String.format("#%08x", (value.getRGB() << 8) | value.getAlpha())); + } else { + out.value(String.format("#%06x", value.getRGB() & 0x00FFFFFF)); + } + } + } + } + + private class GraphTypeAdapter extends WriteTypeAdapter { + + private final TypeAdapter nodeTypeAdapter; + private final TypeAdapter edgeTypeAdapter; + + public GraphTypeAdapter(Gson gson) { + nodeTypeAdapter = gson.getAdapter(Node.class); + edgeTypeAdapter = gson.getAdapter(Edge.class); + } + + @Override + public void write(JsonWriter out, Graph graph) throws IOException { + out.beginObject(); + + // Attributes + writeAttributes(out); + + // Options + writeOptions(out, graph); + + // Nodes + out.name("nodes"); + out.beginArray(); + for (Node node : graph.getNodes()) { + if (!cancel) { + nodeTypeAdapter.write(out, node); + } + } + out.endArray(); + + // Edges + out.name("edges"); + out.beginArray(); + for (Edge edge : graph.getEdges()) { + if (!cancel) { + edgeTypeAdapter.write(out, edge); + } + } + out.endArray(); + out.endObject(); + } + + protected void writeOptions(JsonWriter out, Graph graph) throws IOException { + out.name("options"); + out.beginObject(); + out.name("multi"); + out.value(graph.getModel().getEdgeTypeLabels(false).length > 1); + out.name("allowSelfLoops"); + out.value(true); + out.name("type"); + out.value( + graph.getModel().isUndirected() ? "undirected" : graph.getModel().isMixed() ? "mixed" : "directed"); + out.endObject(); + } + + protected void writeAttributes(JsonWriter out) throws IOException { + if (exportMeta) { + out.name("attributes"); + out.beginObject(); + out.name("creator"); + out.value(VersionUtils.getGephiVersion()); + if (exportDynamic) { + Configuration graphConfig = graph.getModel().getConfiguration(); + TimeFormat timeFormat = graph.getModel().getTimeFormat(); + out.name("timeformat"); + out.value(timeFormat.toString().toLowerCase()); + out.name("timerepresentation"); + out.value(graphConfig.getTimeRepresentation().toString().toLowerCase()); + out.name("timezone"); + out.value(graph.getModel().getTimeZone().getId()); + } + out.endObject(); + } + } + } + + private abstract class ElementTypeAdapter extends WriteTypeAdapter { + + private final TypeAdapter colorAdapter; + + public ElementTypeAdapter(Gson gson) { + this.colorAdapter = gson.getAdapter(Color.class); + } + + protected abstract Set getReservedKeys(); + + @Override + public void write(JsonWriter out, T element) throws IOException { + throw new UnsupportedOperationException("Not to be called directly"); + } + + protected void writeAttValues(JsonWriter out, T element) throws IOException { + if (exportAttributes) { + TimeFormat timeFormat = graph.getModel().getTimeFormat(); + ZoneId timeZone = graph.getModel().getTimeZone(); + + Set reservedKeys = getReservedKeys(); + for (Column column : element.getAttributeColumns()) { + if (!column.isProperty() || + (element instanceof Edge && + column.getId().equals("weight"))) { + if (!reservedKeys.contains(column.getId().toLowerCase())) { + // Col header, similar to spreadsheet + String columnId = column.getId(); + String columnTitle = column.getTitle(); + String columnHeader = + columnId.equalsIgnoreCase(columnTitle) && !column.isProperty() ? columnTitle : columnId; + + Object value = exportDynamic ? element.getAttribute(column) : + element.getAttribute(column, graph.getView()); + out.name(columnHeader); + if (value instanceof Number) { + out.value((Number) value); + } else if (value instanceof Boolean) { + out.value((Boolean) value); + } else { + out.value(AttributeUtils.print(value, timeFormat, timeZone)); + } + } else { + Logger.getLogger(ExporterJson.class.getName()).log(Level.WARNING, + "Attribute value for column '"+column.getId()+"' is ignored as its key overlap with a default key"); + } + } + } + } + } + + protected void writeColor(JsonWriter out, Color color) throws IOException { + if (exportColors) { + colorAdapter.write(out, color); + } + } + + protected void writeLabel(JsonWriter out, T element) throws IOException { + if (element.getLabel() != null && !element.getLabel().isEmpty()) { + out.name("label"); + out.value(element.getLabel()); + } + } + } + + private class NodeTypeAdapter extends ElementTypeAdapter { + + private final Set reservedColumns = new HashSet<>(); + + public NodeTypeAdapter(Gson gson) { + super(gson); + + if (exportPosition) { + reservedColumns.addAll(Arrays.asList("x", "y", "z")); + } + if (exportSize) { + reservedColumns.add("size"); + } + if (exportColors) { + reservedColumns.add("color"); + } + } + + @Override + protected Set getReservedKeys() { + return reservedColumns; + } + + @Override + public void write(JsonWriter out, Node node) throws IOException { + out.beginObject(); + out.name("key"); + out.value(node.getId().toString()); + writeAttributes(out, node); + out.endObject(); + + Progress.progress(progress); + } + + private void writeAttributes(JsonWriter out, Node node) throws IOException { + out.name("attributes"); + out.beginObject(); + + // Label + writeLabel(out, node); + + // Positions + writePositions(out, node); + + // Size + writeSize(out, node); + + // Colors + writeColor(out, node.getColor()); + + // Att values + writeAttValues(out, node); + + out.endObject(); + } + + protected void writeSize(JsonWriter out, Node node) throws IOException { + if (exportSize) { + float size = normalization.normalizeSize(node.size()); + if (normalize || size != 0) { + out.name("size"); + out.value(size); + } + } + } + + private void writePositions(JsonWriter out, Node node) throws IOException { + if (exportPosition) { + float x = normalization.normalizeX(node.x()); + float y = normalization.normalizeY(node.y()); + float z = normalization.normalizeZ(node.z()); + if (normalize || !(x == 0 && y == 0 && z == 0)) { + out.name("x"); + out.value(x); + out.name("y"); + out.value(y); + if (normalization.minZ != 0 || normalization.maxZ != 0) { + out.name("z"); + out.value(z); + } + } + } + } + } + + private class EdgeTypeAdapter extends ElementTypeAdapter { + + private final Set reservedColumns = new HashSet<>(); + + public EdgeTypeAdapter(Gson gson) { + super(gson); + + reservedColumns.add("type"); + if (exportColors) { + reservedColumns.add("color"); + } + } + + @Override + protected Set getReservedKeys() { + return reservedColumns; + } + + @Override + public void write(JsonWriter out, Edge edge) throws IOException { + out.beginObject(); + out.name("key"); + out.value(edge.getId().toString()); + out.name("source"); + out.value(edge.getSource().getId().toString()); + out.name("target"); + out.value(edge.getTarget().getId().toString()); + if (!edge.isDirected() && graph.isMixed()) { + out.name("undirected"); + out.value(Boolean.TRUE); + } + writeAttributes(out, edge); + out.endObject(); + + Progress.progress(progress); + } + + private void writeAttributes(JsonWriter out, Edge edge) throws IOException { + out.name("attributes"); + out.beginObject(); + + // Type/Kind + if (edge.getType() != 0) { + out.name("type"); + out.value(edge.getTypeLabel().toString()); + } + + // Label + writeLabel(out, edge); + + // Colors + if (edge.alpha() != 0) { //Edge has custom color + writeColor(out, edge.getColor()); + } + + // Att values + writeAttValues(out, edge); + + out.endObject(); + } + } + + private class GraphTypeAdapterFactory implements TypeAdapterFactory { + + @Override + public TypeAdapter create(Gson gson, TypeToken type) { + if (Node.class.isAssignableFrom(type.getRawType())) { + return (TypeAdapter) new NodeTypeAdapter(gson); + } else if (Edge.class.isAssignableFrom(type.getRawType())) { + return (TypeAdapter) new EdgeTypeAdapter(gson); + } else if (Graph.class.isAssignableFrom(type.getRawType())) { + return (TypeAdapter) new GraphTypeAdapter(gson); + } else { + return null; + } + } + } + + @Override + public boolean cancel() { + cancel = true; + return true; + } + + @Override + public void setProgressTicket(ProgressTicket progressTicket) { + this.progress = progressTicket; + } + + @Override + public boolean isExportVisible() { + return exportVisible; + } + + @Override + public void setExportVisible(boolean exportVisible) { + this.exportVisible = exportVisible; + } + + @Override + public void setWriter(Writer writer) { + this.writer = writer; + } + + @Override + public Workspace getWorkspace() { + return workspace; + } + + @Override + public void setWorkspace(Workspace workspace) { + this.workspace = workspace; + } + + public boolean isNormalize() { + return normalize; + } + + public void setNormalize(boolean normalize) { + this.normalize = normalize; + } + + public boolean isExportColors() { + return exportColors; + } + + public void setExportColors(boolean exportColors) { + this.exportColors = exportColors; + } + + public boolean isExportPosition() { + return exportPosition; + } + + public void setExportPosition(boolean exportPosition) { + this.exportPosition = exportPosition; + } + + public boolean isExportSize() { + return exportSize; + } + + public void setExportSize(boolean exportSize) { + this.exportSize = exportSize; + } + + public boolean isExportAttributes() { + return exportAttributes; + } + + public void setExportAttributes(boolean exportAttributes) { + this.exportAttributes = exportAttributes; + } + + public boolean isExportDynamic() { + return exportDynamic; + } + + public void setExportDynamic(boolean exportDynamic) { + this.exportDynamic = exportDynamic; + } + + public boolean isExportMeta() { + return exportMeta; + } + + public boolean isPrettyPrint() { + return prettyPrint; + } + + public void setPrettyPrint(boolean prettyPrint) { + this.prettyPrint = prettyPrint; + } + + public Format getFormat() { + return format; + } + + public void setFormat(Format format) { + this.format = format; + } + + public void setExportMeta(boolean exportMeta) { + this.exportMeta = exportMeta; + } + + /** + * For convenience, the same as {@link TypeAdapter} but without the read support. + * + * @param type + */ + private abstract static class WriteTypeAdapter extends TypeAdapter { + + @Override + public T read(JsonReader in) throws IOException { + throw new UnsupportedOperationException("Not supported."); + } + } +} diff --git a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterPajek.java b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterPajek.java index 759c5e232e..27effeca3b 100644 --- a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterPajek.java +++ b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterPajek.java @@ -39,15 +39,19 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.plugin; import java.io.Writer; import java.util.HashMap; +import java.util.logging.Level; +import java.util.logging.Logger; import org.gephi.graph.api.Edge; +import org.gephi.graph.api.EdgeIterable; import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphModel; import org.gephi.graph.api.Node; -import org.gephi.graph.api.UndirectedGraph; +import org.gephi.graph.api.NodeIterable; import org.gephi.io.exporter.api.FileType; import org.gephi.io.exporter.spi.CharacterExporter; import org.gephi.io.exporter.spi.GraphExporter; @@ -58,7 +62,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.NbBundle; /** - * * @author Daniel Bernardes */ public class ExporterPajek implements GraphExporter, CharacterExporter, LongTask { @@ -73,22 +76,22 @@ public class ExporterPajek implements GraphExporter, CharacterExporter, LongTask private boolean cancel = false; private ProgressTicket progressTicket; - public void setExportEdgeWeight(boolean exportEdgeWeight) { - this.exportEdgeWeight = exportEdgeWeight; - } - public boolean isExportEdgeWeight() { return exportEdgeWeight; } - public void setExportPosition(boolean exportPosition) { - this.exportPosition = exportPosition; + public void setExportEdgeWeight(boolean exportEdgeWeight) { + this.exportEdgeWeight = exportEdgeWeight; } public boolean isExportPosition() { return exportPosition; } + public void setExportPosition(boolean exportPosition) { + this.exportPosition = exportPosition; + } + @Override public boolean cancel() { cancel = true; @@ -131,22 +134,23 @@ public String getName() { public FileType[] getFileTypes() { FileType ft = new FileType(".net", NbBundle.getMessage(getClass(), "fileType_Pajek_Name")); - return new FileType[]{ft}; + return new FileType[] {ft}; } @Override public boolean execute() { GraphModel graphModel = workspace.getLookup().lookup(GraphModel.class); - Graph graph = null; - if (exportVisible) { - graph = graphModel.getGraphVisible(); - } else { - graph = graphModel.getGraph(); - } + Graph graph = exportVisible ? graphModel.getGraphVisible() : graphModel.getGraph(); + + graph.readLock(); + try { exportData(graph); } catch (Exception e) { - throw new RuntimeException(e); + Logger.getLogger(ExporterPajek.class.getName()).log(Level.SEVERE, null, e); + } finally { + graph.readUnlock(); + Progress.finish(progressTicket); } return !cancel; @@ -154,14 +158,14 @@ public boolean execute() { private void exportData(Graph graph) throws Exception { int max = graph.getNodeCount(), i = 1; - HashMap idx = new HashMap(3 * max / 2 + 1); + HashMap idx = new HashMap<>(3 * max / 2 + 1); Progress.start(progressTicket, max); - graph.readLock(); writer.append("*Vertices " + max + "\n"); - for (Node node : graph.getNodes()) { + NodeIterable nodeIterable = graph.getNodes(); + for (Node node : nodeIterable) { writer.append(Integer.toString(i)); writer.append(" \"" + node.getLabel() + "\""); if (exportPosition) { @@ -169,32 +173,35 @@ private void exportData(Graph graph) throws Exception { } writer.append("\n"); idx.put(node.getId().toString(), i++); // assigns Ids from the interval [1..max] + + if (cancel) { + nodeIterable.doBreak(); + return; + } } - if (graph instanceof UndirectedGraph) { + if (graph.isUndirected()) { writer.append("*Edges\n"); } else { writer.append("*Arcs\n"); } - for (Edge edge : graph.getEdges()) { + EdgeIterable edgeIterable = graph.getEdges(); + for (Edge edge : edgeIterable) { if (cancel) { - break; + edgeIterable.doBreak(); + return; } - if (edge != null) { - writer.append(Integer.toString(idx.get(edge.getSource().getId().toString())) + " "); - writer.append(Integer.toString(idx.get(edge.getTarget().getId().toString()))); - if (exportEdgeWeight) { - writer.append(" " + edge.getWeight()); - } - writer.append("\n"); + writer.append(idx.get(edge.getSource().getId().toString()) + " "); + writer.append(Integer.toString(idx.get(edge.getTarget().getId().toString()))); + if (exportEdgeWeight) { + writer.append(" " + edge.getWeight()); } + writer.append("\n"); Progress.progress(progressTicket); } - graph.readUnlockAll(); - Progress.finish(progressTicket); } } diff --git a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterSpreadsheet.java b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterSpreadsheet.java new file mode 100644 index 0000000000..458703a5d6 --- /dev/null +++ b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterSpreadsheet.java @@ -0,0 +1,408 @@ +/* +Copyright 2008-2017 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2017 Gephi Consortium. + */ + +package org.gephi.io.exporter.plugin; + +import java.io.Writer; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashSet; +import java.util.List; +import java.util.Locale; +import java.util.Set; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.stream.Collectors; +import org.apache.commons.csv.CSVFormat; +import org.apache.commons.csv.CSVPrinter; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.ElementIterable; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.Table; +import org.gephi.graph.api.TimeFormat; +import org.gephi.io.exporter.spi.CharacterExporter; +import org.gephi.io.exporter.spi.GraphExporter; +import org.gephi.project.api.Workspace; +import org.gephi.utils.longtask.spi.LongTask; +import org.gephi.utils.progress.Progress; +import org.gephi.utils.progress.ProgressTicket; + +/** + * @author Eduardo Ramos + */ +public class ExporterSpreadsheet implements GraphExporter, CharacterExporter, LongTask { + + //Settings + private boolean exportVisible; + private ExportTable tableToExport = ExportTable.EDGES; + private char fieldDelimiter = ','; + private Set excludedColumns = new HashSet<>(); + //Architecture + private Workspace workspace; + private Writer writer; + private boolean cancel = false; + private ProgressTicket progressTicket; + + //Settings + private DecimalFormatSymbols decimalFormatSymbols = new DecimalFormatSymbols(Locale.ENGLISH); + /** + * Formatter for limiting precision to 6 decimals, avoiding precision errors (epsilon). + */ + private DecimalFormat numberFormat = new DecimalFormat("0.######"); + private boolean normalize = false; + private boolean exportColors = false; + private boolean exportAttributes = true; + private boolean exportPosition = false; + private boolean exportSize = false; + private boolean exportDynamic = true; + + @Override + public boolean execute() { + GraphModel graphModel = workspace.getLookup().lookup(GraphModel.class); + Graph graph = exportVisible ? graphModel.getGraphVisible() : graphModel.getGraph(); + + Progress.start(progressTicket); + graph.readLock(); + + try { + exportData(graph); + } catch (Exception e) { + Logger.getLogger(ExporterSpreadsheet.class.getName()).log(Level.SEVERE, null, e); + } finally { + graph.readUnlock(); + Progress.finish(progressTicket); + } + + return !cancel; + } + + private void exportData(Graph graph) throws Exception { + decimalFormatSymbols.setInfinity("Infinity"); + numberFormat.setDecimalFormatSymbols(decimalFormatSymbols); + + NormalizationHelper normalization = NormalizationHelper.build(normalize, graph); + + final CSVFormat format = CSVFormat.Builder.create(CSVFormat.DEFAULT) + .setDelimiter(fieldDelimiter).build(); + + try (CSVPrinter csvWriter = new CSVPrinter(writer, format)) { + boolean isEdgeTable = tableToExport != ExportTable.NODES; + Table table = isEdgeTable ? graph.getModel().getEdgeTable() : graph.getModel().getNodeTable(); + + ElementIterable rows; + + Object[] edgeLabels = graph.getModel().getEdgeTypeLabels(false); + boolean includeEdgeKindColumn = edgeLabels.length > 1; + + + TimeFormat timeFormat = graph.getModel().getTimeFormat(); + ZoneId timeZone = graph.getModel().getTimeZone(); + + //Columns to export + Collection columns = getExportableColumns(graph.getModel(), table).stream() + .filter(c -> !excludedColumns.contains(c.getId())) + .collect(Collectors.toCollection(ArrayList::new)); + + //Write column headers: + if (isEdgeTable) { + csvWriter.print("Source"); + csvWriter.print("Target"); + csvWriter.print("Type"); + if (includeEdgeKindColumn) { + csvWriter.print("Kind"); + } + } + + for (Column column : columns) { + //Use the title only if it's the same as the id (case insensitive): + String columnId = column.getId(); + String columnTitle = column.getTitle(); + String columnHeader = columnId.equalsIgnoreCase(columnTitle) ? columnTitle : columnId; + csvWriter.print(columnHeader); + } + + if (!isEdgeTable && exportPosition) { + csvWriter.print("X"); + csvWriter.print("Y"); + if (normalization.minZ != 0 || normalization.maxZ != 0) { + csvWriter.print("Z"); + } + } + if (!isEdgeTable && exportSize) { + csvWriter.print("Size"); + } + if (exportColors) { + csvWriter.print("Color"); + } + + csvWriter.println(); + + //Write rows: + if (isEdgeTable) { + rows = graph.getEdges(); + Progress.switchToDeterminate(progressTicket, graph.getEdgeCount()); + } else { + rows = graph.getNodes(); + Progress.switchToDeterminate(progressTicket, graph.getNodeCount()); + } + + for (Element row : rows) { + if (isEdgeTable) { + Edge edge = (Edge) row; + + csvWriter.print(edge.getSource().getId()); + csvWriter.print(edge.getTarget().getId()); + csvWriter.print(edge.isDirected() ? "Directed" : "Undirected"); + if (includeEdgeKindColumn) { + Object edgeTypeLabel = edge.getTypeLabel(); + if (edgeTypeLabel != null) { + csvWriter.print(edgeTypeLabel.toString()); + } else { + csvWriter.print(""); + } + } + } + + for (Column column : columns) { + Object value = exportDynamic ? row.getAttribute(column) : row.getAttribute(column, graph.getView()); + + String text; + + if (value != null) { + if (value instanceof Number) { + text = numberFormat.format(value); + } else { + text = AttributeUtils.print(value, timeFormat, timeZone); + } + } else { + text = ""; + } + csvWriter.print(text); + } + + if (!isEdgeTable) { + Node node = (Node) row; + if (exportPosition) { + float x = normalization.normalizeX(node.x()); + float y = normalization.normalizeY(node.y()); + float z = normalization.normalizeZ(node.z()); + + csvWriter.print(numberFormat.format(x)); + csvWriter.print(numberFormat.format(y)); + if (normalization.minZ != 0 || normalization.maxZ != 0) { + csvWriter.print(numberFormat.format(z)); + } + } + + if (exportSize) { + float size = normalization.normalizeSize(node.size()); + csvWriter.print(numberFormat.format(size)); + } + } + + if (exportColors) { + csvWriter.print(String.format("#%06x", row.getColor().getRGB() & 0x00FFFFFF)); + } + + csvWriter.println(); + + Progress.progress(progressTicket); + + if (cancel) { + rows.doBreak(); + break; + } + } + } + } + + public Collection getExportableColumns(GraphModel graphModel, Table table) { + boolean includeTimeSet = graphModel.isDynamic(); + List columns = new ArrayList<>(); + for (Column column : table) { + if (!(column.getId().equals("timeset") && !includeTimeSet) && + (exportAttributes || column.isProperty())) { + columns.add(column); + } + } + return columns; + } + + @Override + public boolean cancel() { + return cancel = true; + } + + @Override + public void setProgressTicket(ProgressTicket progressTicket) { + this.progressTicket = progressTicket; + } + + @Override + public boolean isExportVisible() { + return exportVisible; + } + + @Override + public void setExportVisible(boolean exportVisible) { + this.exportVisible = exportVisible; + } + + @Override + public void setWriter(Writer writer) { + this.writer = writer; + } + + @Override + public Workspace getWorkspace() { + return workspace; + } + + @Override + public void setWorkspace(Workspace workspace) { + this.workspace = workspace; + } + + public char getFieldDelimiter() { + return fieldDelimiter; + } + + public void setFieldDelimiter(char fieldDelimiter) { + this.fieldDelimiter = fieldDelimiter; + } + + public Set getExcludedColumns() { + return excludedColumns; + } + + public void setExcludedColumns(Set excludedColumns) { + this.excludedColumns = excludedColumns; + } + + public ExportTable getTableToExport() { + return tableToExport; + } + + public void setTableToExport(ExportTable tableToExport) { + if (tableToExport == null) { + throw new NullPointerException("tableToExport must not be null"); + } + this.tableToExport = tableToExport; + } + + public void setNumberFormat(DecimalFormat numberFormat) { + this.numberFormat = numberFormat; + } + + public DecimalFormat getNumberFormat() { + return numberFormat; + } + + public void setDecimalFormatSymbols(DecimalFormatSymbols decimalFormatSymbols) { + this.decimalFormatSymbols = decimalFormatSymbols; + } + + public DecimalFormatSymbols getDecimalFormatSymbols() { + return decimalFormatSymbols; + } + + public void setExportColors(boolean exportColors) { + this.exportColors = exportColors; + } + + public boolean isExportColors() { + return exportColors; + } + + public void setExportPosition(boolean exportPosition) { + this.exportPosition = exportPosition; + } + + public boolean isExportPosition() { + return exportPosition; + } + + public void setExportSize(boolean exportSize) { + this.exportSize = exportSize; + } + + public void setNormalize(boolean normalize) { + this.normalize = normalize; + } + + public boolean isNormalize() { + return normalize; + } + + public boolean isExportSize() { + return exportSize; + } + + public void setExportDynamic(boolean exportDynamic) { + this.exportDynamic = exportDynamic; + } + + public boolean isExportDynamic() { + return exportDynamic; + } + + public void setExportAttributes(boolean exportAttributes) { + this.exportAttributes = exportAttributes; + } + + public boolean isExportAttributes() { + return exportAttributes; + } + + public enum ExportTable { + NODES, + EDGES + } +} diff --git a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterVNA.java b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterVNA.java index bf7d2d3fce..35ca243054 100644 --- a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterVNA.java +++ b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/ExporterVNA.java @@ -39,104 +39,92 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.plugin; import java.io.IOException; import java.io.Writer; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.attribute.api.Column; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.ColumnIterable; import org.gephi.graph.api.Edge; +import org.gephi.graph.api.EdgeIterable; import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphModel; import org.gephi.graph.api.Node; +import org.gephi.graph.api.NodeIterable; import org.gephi.io.exporter.spi.CharacterExporter; import org.gephi.io.exporter.spi.GraphExporter; import org.gephi.project.api.Workspace; import org.gephi.utils.longtask.spi.LongTask; +import org.gephi.utils.progress.Progress; import org.gephi.utils.progress.ProgressTicket; /** - * * @author megaterik */ public class ExporterVNA implements GraphExporter, CharacterExporter, LongTask { + static final String valueForEmptyAttributes = "\"\""; private boolean exportVisible; private Workspace workspace; private boolean cancel = false; private ProgressTicket progressTicket; - private AttributeModel attributeModel; //settings private boolean exportEdgeWeight = true; private boolean exportCoords = true; private boolean exportSize = true; private boolean exportShortLabel = true; private boolean exportColor = true; - private boolean exportDynamicWeight = true; + private final boolean exportDynamicWeight = true; private boolean exportAttributes = true; private boolean normalize = false; private Writer writer; - private StringBuilder stringBuilder; - //normalization - private double minX; - private double maxX; - private double minY; - private double maxY; - private double minSize; - private double maxSize; - private double getLow;//borders for dynamic edge weight - private double getHigh; + private NormalizationHelper normalization; @Override - public void setExportVisible(boolean exportVisible) { - this.exportVisible = exportVisible; + public boolean isExportVisible() { + return exportVisible; } @Override - public boolean isExportVisible() { - return exportVisible; + public void setExportVisible(boolean exportVisible) { + this.exportVisible = exportVisible; } @Override public boolean execute() { - attributeModel = workspace.getLookup().lookup(AttributeModel.class); GraphModel graphModel = workspace.getLookup().lookup(GraphModel.class); - Graph graph; - if (exportVisible) { - graph = graphModel.getGraphVisible(); - } else { - graph = graphModel.getGraph(); - } + Graph graph = exportVisible ? graphModel.getGraphVisible() : graphModel.getGraph(); graph.readLock(); - //nodes are counted twice, because they are printed in exportNodeData and exportNodeProperties - progressTicket.start(graph.getNodeCount() * 2 + graph.getEdgeCount()); + Progress.start(progressTicket, graph.getNodeCount() * 2 + graph.getEdgeCount()); - stringBuilder = new StringBuilder(); try { exportData(graph); } catch (Exception e) { - graph.readUnlockAll(); - throw new RuntimeException(e); + Logger.getLogger(ExporterVNA.class.getName()).log(Level.SEVERE, null, e); + } finally { + graph.readUnlock(); + Progress.finish(progressTicket); } - graph.readUnlockAll(); + return !cancel; } private void exportData(Graph graph) throws IOException { - if (normalize) { - calculateMinMaxForNormalization(graph); - } - if (exportAttributes && atLeastOneNonStandartAttribute()) { + normalization = NormalizationHelper.build(normalize, graph); + + if (exportAttributes && atLeastOneNonStandartAttribute(graph.getModel())) { exportNodeData(graph); } exportNodeProperties(graph); exportEdgeData(graph); - writer.write(stringBuilder.toString()); - writer.flush(); - progressTicket.finish(); + + Progress.finish(progressTicket); } /* @@ -153,75 +141,54 @@ private String printParameter(Object val) { return res; } } + /* + * prints node data in format "id (attributes)* + */ - private boolean atLeastOneNonStandartAttribute() { - for (Column col : attributeModel.getNodeTable()) { + private boolean atLeastOneNonStandartAttribute(GraphModel graphModel) { + ColumnIterable columnIterable = graphModel.getNodeTable(); + for (Column col : columnIterable) { if (!col.isProperty()) { + columnIterable.doBreak(); return true; } } return false; } - /* - * prints node data in format "id (attributes)* - */ private void exportNodeData(Graph graph) throws IOException { //header - stringBuilder.append("*Node data\n"); - stringBuilder.append("ID"); - for (Column column : attributeModel.getNodeTable()) { + writer.append("*Node data\n"); + writer.append("ID"); + for (Column column : graph.getModel().getNodeTable()) { if (!column.isProperty()) { - stringBuilder.append(" ").append(column.getTitle().replace(' ', '_').toString()); + writer.append(" ").append(column.getTitle().replace(' ', '_')); //replace spaces because importer can't read attributes titles in quotes } } - stringBuilder.append("\n"); + writer.append("\n"); //body - for (Node node : graph.getNodes()) { - progressTicket.progress(); - if (cancel) { - break; - } - stringBuilder.append(printParameter(node.getId())); - for (Column column : attributeModel.getNodeTable()) { + NodeIterable nodeIterable = graph.getNodes(); + for (Node node : nodeIterable) { + writer.append(printParameter(node.getId())); + for (Column column : node.getAttributeColumns()) { if (!column.isProperty()) { Object value = node.getAttribute(column, graph.getView()); if (value != null) { - stringBuilder.append(" ").append(printParameter(value)); + writer.append(" ").append(printParameter(value)); } else { - stringBuilder.append(" ").append(valueForEmptyAttributes); + writer.append(" ").append(valueForEmptyAttributes); } } } - stringBuilder.append("\n"); - } - } - static final String valueForEmptyAttributes = "\"\""; - - private void calculateMinMaxForNormalization(Graph graph) { - minX = Double.POSITIVE_INFINITY; - maxX = Double.NEGATIVE_INFINITY; - - minY = Double.POSITIVE_INFINITY; - maxY = Double.NEGATIVE_INFINITY; - - minSize = Double.POSITIVE_INFINITY; - maxSize = Double.NEGATIVE_INFINITY; + writer.append("\n"); - for (Node node : graph.getNodes()) { + Progress.progress(progressTicket); if (cancel) { - break; + nodeIterable.doBreak(); + return; } - minX = Math.min(minX, node.x()); - maxX = Math.max(maxX, node.x()); - - minY = Math.min(minY, node.y()); - maxY = Math.max(maxY, node.y()); - - minSize = Math.min(minSize, node.r()); - maxSize = Math.max(maxSize, node.r()); } } @@ -230,60 +197,57 @@ private void calculateMinMaxForNormalization(Graph graph) { */ private void exportNodeProperties(Graph graph) throws IOException { //header - stringBuilder.append("*Node properties\n"); - stringBuilder.append("ID"); + writer.append("*Node properties\n"); + writer.append("ID"); if (exportCoords) { - stringBuilder.append(" x y"); + writer.append(" x y"); } if (exportSize) { - stringBuilder.append(" size"); + writer.append(" size"); } if (exportColor) { - stringBuilder.append(" color"); + writer.append(" color"); } if (exportShortLabel) { - stringBuilder.append(" shortlabel"); + writer.append(" shortlabel"); } - stringBuilder.append("\n"); + writer.append("\n"); //body - for (Node node : graph.getNodes()) { - progressTicket.progress(); + NodeIterable nodeIterable = graph.getNodes(); + for (Node node : nodeIterable) { + Progress.progress(progressTicket); if (cancel) { - break; + nodeIterable.doBreak(); + return; } - stringBuilder.append(node.getId()); + writer.append(node.getId().toString()); if (exportCoords) { - if (!normalize) { - stringBuilder.append(" ").append(node.x()).append(" ").append(node.y()); - } else { - stringBuilder.append(" ").append((node.x() - minX) / (maxX - minX)).append(" ").append((node.y() - minY) / (maxY - minY)); - } + float x = normalization.normalizeX(node.x()); + float y = normalization.normalizeY(node.y()); + writer.append(" ").append(Float.toString(x)).append(" ").append(Float.toString(y)); } if (exportSize) { - if (!normalize) { - stringBuilder.append(" ").append(node.size()); - } else { - stringBuilder.append(" ").append((node.size() - minSize) / (maxSize - minSize)); - } + float size = normalization.normalizeSize(node.size()); + writer.append(" ").append(Float.toString(size)); } if (exportColor) { - stringBuilder.append(" ").append((int) (node.r() * 255f));//[0..1] to [0..255] + writer.append(" ").append(Integer.toString((int) (node.r() * 255f)));//[0..1] to [0..255] } if (exportShortLabel) { if (node.getLabel() != null) { - stringBuilder.append(" ").append(printParameter(node.getLabel())); + writer.append(" ").append(printParameter(node.getLabel())); } else { - stringBuilder.append(" ").append(printParameter(node.getId())); + writer.append(" ").append(printParameter(node.getId())); } } - stringBuilder.append("\n"); + writer.append("\n"); } } - void printEdgeData(Edge edge, Node source, Node target, Graph graph) { - stringBuilder.append(printParameter(source.getId()));//from - stringBuilder.append(" ").append(printParameter(target.getId()));//to + void printEdgeData(Edge edge, Node source, Node target, Graph graph) throws IOException { + writer.append(printParameter(source.getId()));//from + writer.append(" ").append(printParameter(target.getId()));//to if (exportEdgeWeight) { Double weight; if (exportDynamicWeight) { @@ -291,63 +255,66 @@ void printEdgeData(Edge edge, Node source, Node target, Graph graph) { } else { weight = edge.getWeight(); } - stringBuilder.append(" ").append(weight.toString()); + writer.append(" ").append(weight.toString()); } if (exportAttributes) { - for (Column column : attributeModel.getEdgeTable()) { + for (Column column : edge.getAttributeColumns()) { if (!column.isProperty()) { Object value = edge.getAttribute(column, graph.getView()); if (value != null) { - stringBuilder.append(" ").append(printParameter(value)); + writer.append(" ").append(printParameter(value)); } else { - stringBuilder.append(" " + valueForEmptyAttributes); + writer.append(" " + valueForEmptyAttributes); } } } } - stringBuilder.append("\n"); + writer.append("\n"); } /* * prints edge data as "from to (strength)? (attributes)*" */ private void exportEdgeData(Graph graph) throws IOException { - stringBuilder.append("*Tie data\n"); - stringBuilder.append("from to"); + writer.append("*Tie data\n"); + writer.append("from to"); if (exportEdgeWeight) { - stringBuilder.append(" strength"); + writer.append(" strength"); } if (exportAttributes) { - for (Column col : attributeModel.getEdgeTable()) { + for (Column col : graph.getModel().getEdgeTable()) { if (!col.isProperty()) { - stringBuilder.append(" ").append(printParameter(col.getTitle()).replace(' ', '_')); + writer.append(" ").append(printParameter(col.getTitle()).replace(' ', '_')); //replace spaces because importer can't read attributes titles in quotes } } } - stringBuilder.append("\n"); + writer.append("\n"); - for (Edge edge : graph.getEdges()) { - if (cancel) { - break; - } - progressTicket.progress(); - printEdgeData(edge, edge.getSource(), edge.getTarget(), graph);//all edges in vna are directed, so make clone + EdgeIterable edgeIterable = graph.getEdges(); + for (Edge edge : edgeIterable) { + printEdgeData(edge, edge.getSource(), edge.getTarget(), + graph);//all edges in vna are directed, so make clone if (!edge.isDirected() && !edge.isSelfLoop()) { printEdgeData(edge, edge.getTarget(), edge.getSource(), graph); } + Progress.progress(progressTicket); + if (cancel) { + edgeIterable.doBreak(); + return; + } } } @Override - public void setWorkspace(Workspace workspace) { - this.workspace = workspace; + public Workspace getWorkspace() { + return workspace; } @Override - public Workspace getWorkspace() { - return workspace; + public void setWorkspace(Workspace workspace) { + this.workspace = workspace; } @Override diff --git a/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/NormalizationHelper.java b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/NormalizationHelper.java new file mode 100644 index 0000000000..d0bbd5d118 --- /dev/null +++ b/modules/ExportPlugin/src/main/java/org/gephi/io/exporter/plugin/NormalizationHelper.java @@ -0,0 +1,102 @@ +package org.gephi.io.exporter.plugin; + +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Node; + +public class NormalizationHelper { + + public static NormalizationHelper build(boolean enabled, Graph graph) { + return new NormalizationHelper(enabled, graph); + } + + private final boolean enabled; + protected final float minSize; + protected final float maxSize; + protected final float minX; + protected final float maxX; + protected final float minY; + protected final float maxY; + protected final float minZ; + protected final float maxZ; + + private NormalizationHelper(boolean enabled, Graph graph) { + this.enabled = enabled; + + float minX = Float.POSITIVE_INFINITY; + float maxX = Float.NEGATIVE_INFINITY; + float minY = Float.POSITIVE_INFINITY; + float maxY = Float.NEGATIVE_INFINITY; + float minZ = Float.POSITIVE_INFINITY; + float maxZ = Float.NEGATIVE_INFINITY; + float minSize = Float.POSITIVE_INFINITY; + float maxSize = Float.NEGATIVE_INFINITY; + + for (Node node : graph.getNodes()) { + minX = Math.min(minX, node.x()); + maxX = Math.max(maxX, node.x()); + minY = Math.min(minY, node.y()); + maxY = Math.max(maxY, node.y()); + minZ = Math.min(minZ, node.z()); + maxZ = Math.max(maxZ, node.z()); + minSize = Math.min(minSize, node.size()); + maxSize = Math.max(maxSize, node.size()); + } + + this.minX = minX; + this.maxX = maxX; + this.minY = minY; + this.maxY = maxY; + this.minZ = minZ; + this.maxZ = maxZ; + this.minSize = minSize; + this.maxSize = maxSize; + } + + public boolean isEnabled() { + return enabled; + } + + protected float normalizeX(float x) { + if (enabled && x != 0.0) { + if (maxX == minX) { + return 1f; + } + return (x - minX) / (maxX - minX); + } else { + return x; + } + } + + protected float normalizeY(float y) { + if (enabled && y != 0.0) { + if (minY == maxY) { + return 1f; + } + return (y - minY) / (maxY - minY); + } else { + return y; + } + } + + protected float normalizeZ(float z) { + if (enabled && z != 0.0) { + if (maxZ == minZ) { + return 1f; + } + return (z - minZ) / (maxZ - minZ); + } else { + return z; + } + } + + protected float normalizeSize(float size) { + if (enabled && size != 0.0) { + if (maxSize == minSize) { + return 1f; + } + return (size - minSize) / (maxSize - minSize); + } else { + return size; + } + } +} diff --git a/modules/ExportPlugin/src/main/nbm/manifest.mf b/modules/ExportPlugin/src/main/nbm/manifest.mf index 8ba2953e39..b873d3cc17 100644 --- a/modules/ExportPlugin/src/main/nbm/manifest.mf +++ b/modules/ExportPlugin/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/io/exporter/plugin/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Plugin +OpenIDE-Module-Name: Export Plugin diff --git a/modules/ExportPlugin/src/main/nbm/module.xml b/modules/ExportPlugin/src/main/nbm/module.xml deleted file mode 100644 index 815e80f8ae..0000000000 --- a/modules/ExportPlugin/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle.properties b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle.properties index 2805133f5a..5487d1e0e8 100644 --- a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle.properties +++ b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle.properties @@ -1,7 +1,4 @@ -OpenIDE-Module-Display-Category=Plugin -OpenIDE-Module-Long-Description=\ - Standard exporters implementations -OpenIDE-Module-Name=Export Plugin +OpenIDE-Module-Long-Description=Standard exporters implementations OpenIDE-Module-Short-Description=Standard exporters @@ -12,3 +9,5 @@ fileType_CSV_Name = CSV Files fileType_Pajek_Name = NET Files (Pajek) fileType_DL_Name = DL files (UCINET) fileType_VNA_Name= VNA files(Netdraw) +fileType_Spreadsheet_Name = Spreadsheet Files +fileType_Json_Name = JSON Files \ No newline at end of file diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_ar.properties b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_ca.properties b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_ca.properties new file mode 100644 index 0000000000..b357de30c3 --- /dev/null +++ b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_ca.properties @@ -0,0 +1,12 @@ +OpenIDE-Module-Long-Description=Standard exporters implementations +OpenIDE-Module-Short-Description=Standard exporters + + +fileType_GDF_Name=Fitxers GDF (GUESS) +fileType_GEXF_Name=Fitxers GEXF +fileType_GraphML_Name=Fitxers GraphML +fileType_CSV_Name=Fitxers CSV +fileType_Pajek_Name=Fitxers NET (Pajek) +fileType_DL_Name=Fitxers DL (UCINET) +fileType_VNA_Name=Fitxers VNA (Netdraw) +fileType_Spreadsheet_Name=Spreadsheet Files diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_cs.properties b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_cs.properties index bc4f760495..40b2928347 100644 --- a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_cs.properties +++ b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_cs.properties @@ -1,25 +1,12 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-06 18\:53+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=Zaveden\u00ed standardn\u00edch export\u00e9r\u016f - -OpenIDE-Module-Short-Description=Standardn\u00ed export\u00e9\u0159i - -fileType_GDF_Name=Soubory GDF (GUESS) - -fileType_GEXF_Name=Soubory GEXF - -fileType_GraphML_Name=Soubory GraphML - -fileType_CSV_Name=Soubory CSV - -fileType_Pajek_Name=Soubory NET (Pajek) - -fileType_DL_Name=Soubory DL (UCINET) - -fileType_VNA_Name=Soubory VNA (Netdraw) +OpenIDE-Module-Long-Description=Zavedenν standardnνch exportιr\u016f +OpenIDE-Module-Short-Description=Standardnν exportι\u0159i + + +fileType_GDF_Name = Soubory GDF (GUESS) +fileType_GEXF_Name = Soubory GEXF +fileType_GraphML_Name = Soubory GraphML +fileType_CSV_Name = Soubory CSV +fileType_Pajek_Name = Soubory NET (Pajek) +fileType_DL_Name = Soubory DL (UCINET) +fileType_VNA_Name= Soubory VNA (Netdraw) +# fileType_Spreadsheet_Name = Spreadsheet Files diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_de.properties b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_de.properties new file mode 100644 index 0000000000..8581a783df --- /dev/null +++ b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_de.properties @@ -0,0 +1,12 @@ +OpenIDE-Module-Long-Description=Standard-Exporter-Implementierungen +OpenIDE-Module-Short-Description=Standard-Exporter + + +fileType_GDF_Name = GDF Dateien (GUESS) +fileType_GEXF_Name = GEXF Dateien +fileType_GraphML_Name = GraphML Dateien +fileType_CSV_Name = CSV Dateien +fileType_Pajek_Name = NET Dateien (Pajek) +fileType_DL_Name = DL Dateien (UCINET) +fileType_VNA_Name= VNA Dateien (Netdraw) +# fileType_Spreadsheet_Name = Spreadsheet Files diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_es.properties b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_es.properties index a9c9445f0d..463eb81ad7 100644 --- a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_es.properties +++ b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_es.properties @@ -1,26 +1,13 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011, 2012. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-05 17\:51+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n +OpenIDE-Module-Long-Description=Implementaciones de los exportadores estαndar +OpenIDE-Module-Short-Description=Exportadores estαndar -OpenIDE-Module-Long-Description=Implementaciones de los exportadores est\u00e1ndar - -OpenIDE-Module-Short-Description=Exportadores est\u00e1ndar fileType_GDF_Name=Archivos GDF (GUESS) - fileType_GEXF_Name=Archivos GEXF - fileType_GraphML_Name=Archivos GraphML - fileType_CSV_Name=Archivos CSV - fileType_Pajek_Name=Archivos NET (Pajek) - fileType_DL_Name=Archivos DL (UCINET) - fileType_VNA_Name=Archivos VNA (Netdraw) +fileType_Spreadsheet_Name=Archivos de hoja de cαlculo +fileType_Json_Name=Archivos.JSON diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_fr.properties b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_fr.properties index 37defc3c2e..9faa5a24c2 100644 --- a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_fr.properties +++ b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_fr.properties @@ -1,26 +1,12 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-08 15\:14+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Impl\u00e9mentation des exporteurs standards - -OpenIDE-Module-Short-Description=Exporteurs standards - -fileType_GDF_Name=Fichiers GDF (GUESS) - -fileType_GEXF_Name=Fichiers GEXF - -fileType_GraphML_Name=Fichiers GraphML - -fileType_CSV_Name=Fichiers CSV - -fileType_Pajek_Name=Fichiers NET (Pajek) - -fileType_DL_Name=Fichiers DL (UCINET) - -fileType_VNA_Name=Fichiers VNA (Netdraw) +OpenIDE-Module-Long-Description=Implιmentation des exporteurs standards +OpenIDE-Module-Short-Description=Exporteurs standards + + +fileType_GDF_Name = Fichiers GDF (GUESS) +fileType_GEXF_Name = Fichiers GEXF +fileType_GraphML_Name = Fichiers GraphML +fileType_CSV_Name = Fichiers CSV +fileType_Pajek_Name = Fichiers NET (Pajek) +fileType_DL_Name = Fichiers DL (UCINET) +fileType_VNA_Name= Fichiers VNA (Netdraw) +fileType_Spreadsheet_Name = Feuille de calcul diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_he.properties b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_he.properties new file mode 100644 index 0000000000..48fe56eb39 --- /dev/null +++ b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_he.properties @@ -0,0 +1,12 @@ +OpenIDE-Module-Long-Description=Standard exporters implementations +OpenIDE-Module-Short-Description=Standard exporters + + +fileType_GDF_Name=GDF Files (GUESS) +fileType_GEXF_Name=GEXF Files +fileType_GraphML_Name=GraphML Files +fileType_CSV_Name=CSV Files +fileType_Pajek_Name=NET Files (Pajek) +fileType_DL_Name=DL files (UCINET) +fileType_VNA_Name=VNA files(Netdraw) +fileType_Spreadsheet_Name=Spreadsheet Files diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_hu.properties b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_hu.properties new file mode 100644 index 0000000000..ca4952b667 --- /dev/null +++ b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_hu.properties @@ -0,0 +1,15 @@ + + +fileType_CSV_Name=CSV f\u00E1jlok +fileType_DL_Name=DL f\u00E1jlok (UCINET) +fileType_Spreadsheet_Name=T\u00E1bl\u00E1zat f\u00E1jlok + + +fileType_GDF_Name=GDF-f\u00E1jlok (GUESS) +fileType_Pajek_Name=NET Files (Pajek) +fileType_VNA_Name=VNA f\u00E1jlok (Netdraw) +fileType_GraphML_Name=GraphML f\u00E1jlok +OpenIDE-Module-Short-Description=Szabv\u00E1ny export\u0151r\u00F6k +OpenIDE-Module-Long-Description=Szabv\u00E1nyos export\u0151r megval\u00F3s\u00EDt\u00E1sok +fileType_Json_Name=JSON f\u00E1jlok +fileType_GEXF_Name=GEXF f\u00E1jlok diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_it.properties b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_it.properties new file mode 100644 index 0000000000..9aa5c27326 --- /dev/null +++ b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_it.properties @@ -0,0 +1,12 @@ +OpenIDE-Module-Long-Description=Standard exporters implementations +OpenIDE-Module-Short-Description=Standard exporters + + +fileType_GDF_Name=File GDF (GUESS) +fileType_GEXF_Name=File GEXF +fileType_GraphML_Name=File GraphML +fileType_CSV_Name=File CSV +fileType_Pajek_Name=File NET (Pajek) +fileType_DL_Name=File DL (UCINET) +fileType_VNA_Name=File VNA (Netdraw) +fileType_Spreadsheet_Name=Spreadsheet Files diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_ja.properties b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_ja.properties index d685f3464c..8bcb6de4a8 100644 --- a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_ja.properties +++ b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_ja.properties @@ -1,25 +1,12 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-15 10\:51+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u6a19\u6e96\u7684\u30a8\u30af\u30b9\u30dd\u30fc\u30bf\u306e\u5b9f\u88c5 - -OpenIDE-Module-Short-Description=\u6a19\u6e96\u7684\u30a8\u30af\u30b9\u30dd\u30fc\u30bf - -fileType_GDF_Name=GDF\u30d5\u30a1\u30a4\u30eb(GUESS) - -fileType_GEXF_Name=GEXF\u30d5\u30a1\u30a4\u30eb - -fileType_GraphML_Name=GraphML\u30d5\u30a1\u30a4\u30eb - -fileType_CSV_Name=CSV\u30d5\u30a1\u30a4\u30eb - -fileType_Pajek_Name=NET\u30d5\u30a1\u30a4\u30eb(Pajek) - -fileType_DL_Name=DL\u30d5\u30a1\u30a4\u30eb(UCINET) - -fileType_VNA_Name=VNA\u30d5\u30a1\u30a4\u30eb(Netdraw) +OpenIDE-Module-Long-Description=\u6a19\u6e96\u7684\u30a8\u30af\u30b9\u30dd\u30fc\u30bf\u306e\u5b9f\u88c5 +OpenIDE-Module-Short-Description=\u6a19\u6e96\u7684\u30a8\u30af\u30b9\u30dd\u30fc\u30bf + + +fileType_GDF_Name = GDF\u30d5\u30a1\u30a4\u30eb(GUESS) +fileType_GEXF_Name = GEXF\u30d5\u30a1\u30a4\u30eb +fileType_GraphML_Name = GraphML\u30d5\u30a1\u30a4\u30eb +fileType_CSV_Name = CSV\u30d5\u30a1\u30a4\u30eb +fileType_Pajek_Name = NET\u30d5\u30a1\u30a4\u30eb(Pajek) +fileType_DL_Name = DL\u30d5\u30a1\u30a4\u30eb(UCINET) +fileType_VNA_Name= VNA\u30d5\u30a1\u30a4\u30eb(Netdraw) +# fileType_Spreadsheet_Name = Spreadsheet Files diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_ko.properties b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_ko.properties new file mode 100644 index 0000000000..28303b9674 --- /dev/null +++ b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_ko.properties @@ -0,0 +1,15 @@ + + +fileType_CSV_Name=CSV \uD30C\uC77C +fileType_DL_Name=DL \uD30C\uC77C (UCINET) +fileType_Spreadsheet_Name=\uC2A4\uD504\uB808\uB4DC\uC2DC\uD2B8 \uD30C\uC77C + + +fileType_GDF_Name=GDF \uD30C\uC77C (GUESS) +fileType_Pajek_Name=NET \uD30C\uC77C (Pajek) +fileType_VNA_Name=VNA \uD30C\uC77C(Netdraw) +fileType_GraphML_Name=GraphML \uD30C\uC77C +OpenIDE-Module-Short-Description=\uD45C\uC900 \uB0B4\uBCF4\uB0B4\uAE30 \uB3C4\uAD6C +OpenIDE-Module-Long-Description=\uD45C\uC900 \uB0B4\uBCF4\uB0B4\uAE30 \uB3C4\uAD6C \uAD6C\uD604 +fileType_Json_Name=JSON \uD30C\uC77C +fileType_GEXF_Name=GEXF \uD30C\uC77C diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_nl.properties b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_nl.properties new file mode 100644 index 0000000000..7684b39702 --- /dev/null +++ b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_nl.properties @@ -0,0 +1,12 @@ +OpenIDE-Module-Long-Description=Standard exporters implementations +OpenIDE-Module-Short-Description=Standard exporters + + +fileType_GDF_Name=GDF-bestanden (GUESS) +fileType_GEXF_Name=GEXF-bestanden +fileType_GraphML_Name=GraphML-bestanden +fileType_CSV_Name=CSV-bestanden +fileType_Pajek_Name=NET-bestanden (Pajek) +fileType_DL_Name=DL-bestanden (UCINET) +fileType_VNA_Name=VNA-bestanden (Netdraw) +fileType_Spreadsheet_Name=Spreadsheetbestanden diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_pt_BR.properties b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_pt_BR.properties index 0459be7946..e9abd77ddb 100644 --- a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_pt_BR.properties +++ b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_pt_BR.properties @@ -1,26 +1,12 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -# C\u00e9lio Faria Jr. , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-12 12\:37+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Implementa\u00e7\u00f5es de exportadores padr\u00e3o - -OpenIDE-Module-Short-Description=Exportadores padr\u00e3o - -fileType_GDF_Name=Arquivos GDF (GUESS) - -fileType_GEXF_Name=Arquivos GEXF - -fileType_GraphML_Name=Arquivos GraphML - -fileType_CSV_Name=Arquivos CSV - -fileType_Pajek_Name=Arquivos NET (Pajek) - -fileType_DL_Name=Arquivos DL (UCINET) - -fileType_VNA_Name=Arquivos VNA (Netdraw) +OpenIDE-Module-Long-Description=Implementaηυes de exportadores padrγo +OpenIDE-Module-Short-Description=Exportadores padrγo + + +fileType_GDF_Name = Arquivos GDF (GUESS) +fileType_GEXF_Name = Arquivos GEXF +fileType_GraphML_Name = Arquivos GraphML +fileType_CSV_Name = Arquivos CSV +fileType_Pajek_Name = Arquivos NET (Pajek) +fileType_DL_Name = Arquivos DL (UCINET) +fileType_VNA_Name= Arquivos VNA (Netdraw) +# fileType_Spreadsheet_Name = Spreadsheet Files diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_ro.properties b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_ro.properties new file mode 100644 index 0000000000..53d77800b5 --- /dev/null +++ b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_ro.properties @@ -0,0 +1,14 @@ + + +OpenIDE-Module-Long-Description=Implement\u0103ri de exportatori standard +OpenIDE-Module-Short-Description=Exportatori standard + + +fileType_GDF_Name=Fi\u0219iere GDF (GUESS) +fileType_GEXF_Name=Fi\u0219iere GEXF +fileType_GraphML_Name=Fi\u0219iere GraphML +fileType_CSV_Name=Fi\u0219iere CSV +fileType_Pajek_Name=Fi\u0219iere NET (Pajek) +fileType_DL_Name=Fi\u0219iere DL (UCINET) +fileType_VNA_Name=Fi\u0219iere VNA (Netdraw) +fileType_Spreadsheet_Name=Fi\u0219iere de foi de calcul diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_ru.properties b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_ru.properties index 76ae311128..e4f9f8faa7 100644 --- a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_ru.properties +++ b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_ru.properties @@ -1,25 +1,14 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-12 21\:43+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - OpenIDE-Module-Long-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 - OpenIDE-Module-Short-Description=\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 -fileType_GDF_Name=GDF \u0444\u0430\u0439\u043b\u044b (GUESS) +fileType_GDF_Name=GDF \u0444\u0430\u0439\u043b\u044b (GUESS) fileType_GEXF_Name=GEXF \u0444\u0430\u0439\u043b\u044b - fileType_GraphML_Name=GraphML \u0444\u0430\u0439\u043b\u044b - fileType_CSV_Name=CSV \u0444\u0430\u0439\u043b\u044b - fileType_Pajek_Name=NET \u0444\u0430\u0439\u043b\u044b (Pajek) - fileType_DL_Name=DL \u0444\u0430\u0439\u043b\u044b (UCINET) - fileType_VNA_Name=VNA \u0444\u0430\u0439\u043b\u044b (Netdraw) +# fileType_Spreadsheet_Name = Spreadsheet Files + +fileType_Spreadsheet_Name=\u0424\u0430\u0439\u043B\u044B \u044D\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u044B\u0445 \u0442\u0430\u0431\u043B\u0438\u0446 diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_th.properties b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_tr.properties b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_tr.properties new file mode 100644 index 0000000000..48fe56eb39 --- /dev/null +++ b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_tr.properties @@ -0,0 +1,12 @@ +OpenIDE-Module-Long-Description=Standard exporters implementations +OpenIDE-Module-Short-Description=Standard exporters + + +fileType_GDF_Name=GDF Files (GUESS) +fileType_GEXF_Name=GEXF Files +fileType_GraphML_Name=GraphML Files +fileType_CSV_Name=CSV Files +fileType_Pajek_Name=NET Files (Pajek) +fileType_DL_Name=DL files (UCINET) +fileType_VNA_Name=VNA files(Netdraw) +fileType_Spreadsheet_Name=Spreadsheet Files diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_uk.properties b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_uk.properties new file mode 100644 index 0000000000..512b6130ea --- /dev/null +++ b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_uk.properties @@ -0,0 +1,11 @@ +OpenIDE-Module-Long-Description=\u0420\u0435\u0430\u043B\u0456\u0437\u0430\u0446\u0456\u0457 \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0438\u0445 \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u0435\u0440\u0456\u0432 +OpenIDE-Module-Short-Description=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0456 \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u0435\u0440\u0438 +fileType_GDF_Name=\u0424\u0430\u0439\u043B\u0438 GDF (GUESS) +fileType_GEXF_Name=\u0424\u0430\u0439\u043B\u0438 GEXF +fileType_GraphML_Name=\u0424\u0430\u0439\u043B\u0438 GraphML +fileType_CSV_Name=\u0424\u0430\u0439\u043B\u0438 CSV +fileType_Pajek_Name=\u0424\u0430\u0439\u043B\u0438 NET (Pajek) +fileType_DL_Name=\u0424\u0430\u0439\u043B\u0438 DL (UCINET) +fileType_VNA_Name=\u0424\u0430\u0439\u043B\u0438 VNA (Netdraw) +fileType_Spreadsheet_Name=\u0424\u0430\u0439\u043B\u0438 \u0435\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u0438\u0445 \u0442\u0430\u0431\u043B\u0438\u0446\u044C +fileType_Json_Name=\u0424\u0430\u0439\u043B\u0438 JSON diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_zh_CN.properties b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_zh_CN.properties index 4a4af6125c..a85f07d387 100644 --- a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_zh_CN.properties +++ b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_zh_CN.properties @@ -1,25 +1,15 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-15 01\:32+0000\nLast-Translator\: Xi-Nian Zuo \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - OpenIDE-Module-Long-Description=\u6807\u51c6\u8f93\u51fa\u5b9e\u73b0 - OpenIDE-Module-Short-Description=\u6807\u51c6\u8f93\u51fa -fileType_GDF_Name=GDF\u7684\u6587\u4ef6\uff08\u731c\uff09 - -fileType_GEXF_Name=GEXF\u6587\u4ef6 - -fileType_GraphML_Name=GraphML\u6587\u4ef6 - -fileType_CSV_Name=CSV\u6587\u4ef6 - -fileType_Pajek_Name=NET\u6587\u4ef6\uff08Pajek\uff09 -fileType_DL_Name=DL\u6587\u4ef6\uff08UCINET\uff09 +fileType_GDF_Name=GDF \u6587\u4EF6 (GUESS) +fileType_GEXF_Name=GEXF \u6587\u4EF6 +fileType_GraphML_Name=GraphML \u6587\u4EF6 +fileType_CSV_Name=CSV \u6587\u4EF6 +fileType_Pajek_Name=NET \u6587\u4EF6 (Pajek) +fileType_DL_Name=DL \u6587\u4EF6 (UCINET) +fileType_VNA_Name=VNA \u6587\u4EF6 (Netdraw) +# fileType_Spreadsheet_Name = Spreadsheet Files -fileType_VNA_Name=VNA \u6587\u4ef6(Netdraw) +fileType_Spreadsheet_Name=\u7535\u5B50\u8868\u683C\u6587\u6863 +fileType_Json_Name=JSON \u6587\u4EF6 diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_zh_TW.properties b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_zh_TW.properties new file mode 100644 index 0000000000..48fe56eb39 --- /dev/null +++ b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/Bundle_zh_TW.properties @@ -0,0 +1,12 @@ +OpenIDE-Module-Long-Description=Standard exporters implementations +OpenIDE-Module-Short-Description=Standard exporters + + +fileType_GDF_Name=GDF Files (GUESS) +fileType_GEXF_Name=GEXF Files +fileType_GraphML_Name=GraphML Files +fileType_CSV_Name=CSV Files +fileType_Pajek_Name=NET Files (Pajek) +fileType_DL_Name=DL files (UCINET) +fileType_VNA_Name=VNA files(Netdraw) +fileType_Spreadsheet_Name=Spreadsheet Files diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/cs.po b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/cs.po deleted file mode 100644 index 2c84f15bad..0000000000 --- a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/cs.po +++ /dev/null @@ -1,46 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-06 18:53+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ZavedenΓ­ standardnΓ­ch exportΓ©rΕ―" - -msgid "OpenIDE-Module-Short-Description" -msgstr "StandardnΓ­ exportΓ©Ε™i" - -msgid "fileType_GDF_Name" -msgstr "Soubory GDF (GUESS)" - -msgid "fileType_GEXF_Name" -msgstr "Soubory GEXF" - -msgid "fileType_GraphML_Name" -msgstr "Soubory GraphML" - -msgid "fileType_CSV_Name" -msgstr "Soubory CSV" - -msgid "fileType_Pajek_Name" -msgstr "Soubory NET (Pajek)" - -msgid "fileType_DL_Name" -msgstr "Soubory DL (UCINET)" - -msgid "fileType_VNA_Name" -msgstr "Soubory VNA (Netdraw)" diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/es.po b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/es.po deleted file mode 100644 index 135b693114..0000000000 --- a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/es.po +++ /dev/null @@ -1,47 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011, 2012. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-05 17:51+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Implementaciones de los exportadores estΓ‘ndar" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Exportadores estΓ‘ndar" - -msgid "fileType_GDF_Name" -msgstr "Archivos GDF (GUESS)" - -msgid "fileType_GEXF_Name" -msgstr "Archivos GEXF" - -msgid "fileType_GraphML_Name" -msgstr "Archivos GraphML" - -msgid "fileType_CSV_Name" -msgstr "Archivos CSV" - -msgid "fileType_Pajek_Name" -msgstr "Archivos NET (Pajek)" - -msgid "fileType_DL_Name" -msgstr "Archivos DL (UCINET)" - -msgid "fileType_VNA_Name" -msgstr "Archivos VNA (Netdraw)" diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/fr.po b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/fr.po deleted file mode 100644 index ae1b3b22b8..0000000000 --- a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/fr.po +++ /dev/null @@ -1,47 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-08 15:14+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ImplΓ©mentation des exporteurs standards" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Exporteurs standards" - -msgid "fileType_GDF_Name" -msgstr "Fichiers GDF (GUESS)" - -msgid "fileType_GEXF_Name" -msgstr "Fichiers GEXF" - -msgid "fileType_GraphML_Name" -msgstr "Fichiers GraphML" - -msgid "fileType_CSV_Name" -msgstr "Fichiers CSV" - -msgid "fileType_Pajek_Name" -msgstr "Fichiers NET (Pajek)" - -msgid "fileType_DL_Name" -msgstr "Fichiers DL (UCINET)" - -msgid "fileType_VNA_Name" -msgstr "Fichiers VNA (Netdraw)" diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/ja.po b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/ja.po deleted file mode 100644 index 6bc32db753..0000000000 --- a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/ja.po +++ /dev/null @@ -1,46 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-15 10:51+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ζ¨™ζΊ–ηš„γ‚¨γ‚―γ‚ΉγƒγƒΌγ‚ΏγεŸθ£…" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζ¨™ζΊ–ηš„γ‚¨γ‚―γ‚ΉγƒγƒΌγ‚Ώ" - -msgid "fileType_GDF_Name" -msgstr "GDFフゑむル(GUESS)" - -msgid "fileType_GEXF_Name" -msgstr "GEXFフゑむル" - -msgid "fileType_GraphML_Name" -msgstr "GraphMLフゑむル" - -msgid "fileType_CSV_Name" -msgstr "CSVフゑむル" - -msgid "fileType_Pajek_Name" -msgstr "NETフゑむル(Pajek)" - -msgid "fileType_DL_Name" -msgstr "DLフゑむル(UCINET)" - -msgid "fileType_VNA_Name" -msgstr "VNAフゑむル(Netdraw)" diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/org-gephi-io-exporter-plugin.pot b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/org-gephi-io-exporter-plugin.pot deleted file mode 100644 index 851a8d4e93..0000000000 --- a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/org-gephi-io-exporter-plugin.pot +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Standard exporters implementations" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Standard exporters" - -msgid "fileType_GDF_Name" -msgstr "GDF Files (GUESS)" - -msgid "fileType_GEXF_Name" -msgstr "GEXF Files" - -msgid "fileType_GraphML_Name" -msgstr "GraphML Files" - -msgid "fileType_CSV_Name" -msgstr "CSV Files" - -msgid "fileType_Pajek_Name" -msgstr "NET Files (Pajek)" - -msgid "fileType_DL_Name" -msgstr "DL files (UCINET)" - -msgid "fileType_VNA_Name" -msgstr "VNA files(Netdraw)" diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/pt_BR.po b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/pt_BR.po deleted file mode 100644 index 65a03f3c47..0000000000 --- a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/pt_BR.po +++ /dev/null @@ -1,47 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -# CΓ©lio Faria Jr. , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-12 12:37+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ImplementaΓ§Γ΅es de exportadores padrΓ£o" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Exportadores padrΓ£o" - -msgid "fileType_GDF_Name" -msgstr "Arquivos GDF (GUESS)" - -msgid "fileType_GEXF_Name" -msgstr "Arquivos GEXF" - -msgid "fileType_GraphML_Name" -msgstr "Arquivos GraphML" - -msgid "fileType_CSV_Name" -msgstr "Arquivos CSV" - -msgid "fileType_Pajek_Name" -msgstr "Arquivos NET (Pajek)" - -msgid "fileType_DL_Name" -msgstr "Arquivos DL (UCINET)" - -msgid "fileType_VNA_Name" -msgstr "Arquivos VNA (Netdraw)" diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/ru.po b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/ru.po deleted file mode 100644 index e2b5dec7c1..0000000000 --- a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/ru.po +++ /dev/null @@ -1,46 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-12 21:43+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "РСализация стандартных Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠ² экспорта" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹ экспорта" - -msgid "fileType_GDF_Name" -msgstr "GDF Ρ„Π°ΠΉΠ»Ρ‹ (GUESS)" - -msgid "fileType_GEXF_Name" -msgstr "GEXF Ρ„Π°ΠΉΠ»Ρ‹" - -msgid "fileType_GraphML_Name" -msgstr "GraphML Ρ„Π°ΠΉΠ»Ρ‹" - -msgid "fileType_CSV_Name" -msgstr "CSV Ρ„Π°ΠΉΠ»Ρ‹" - -msgid "fileType_Pajek_Name" -msgstr "NET Ρ„Π°ΠΉΠ»Ρ‹ (Pajek)" - -msgid "fileType_DL_Name" -msgstr "DL Ρ„Π°ΠΉΠ»Ρ‹ (UCINET)" - -msgid "fileType_VNA_Name" -msgstr "VNA Ρ„Π°ΠΉΠ»Ρ‹ (Netdraw)" diff --git a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/zh_CN.po b/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/zh_CN.po deleted file mode 100644 index 5b1cd5eb12..0000000000 --- a/modules/ExportPlugin/src/main/resources/org/gephi/io/exporter/plugin/zh_CN.po +++ /dev/null @@ -1,46 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-15 01:32+0000\n" -"Last-Translator: Xi-Nian Zuo \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "标准输出εžηް" - -msgid "OpenIDE-Module-Short-Description" -msgstr "标准输出" - -msgid "fileType_GDF_Name" -msgstr "GDFηš„ζ–‡δ»ΆοΌˆηŒœοΌ‰" - -msgid "fileType_GEXF_Name" -msgstr "GEXFζ–‡δ»Ά" - -msgid "fileType_GraphML_Name" -msgstr "GraphMLζ–‡δ»Ά" - -msgid "fileType_CSV_Name" -msgstr "CSVζ–‡δ»Ά" - -msgid "fileType_Pajek_Name" -msgstr "NETζ–‡δ»ΆοΌˆPajekοΌ‰" - -msgid "fileType_DL_Name" -msgstr "DLζ–‡δ»ΆοΌˆUCINETοΌ‰" - -msgid "fileType_VNA_Name" -msgstr "VNA ζ–‡δ»Ά(Netdraw)" diff --git a/modules/ExportPlugin/src/test/java/org/gephi/io/exporter/plugin/GEXFTest.java b/modules/ExportPlugin/src/test/java/org/gephi/io/exporter/plugin/GEXFTest.java new file mode 100644 index 0000000000..977714000e --- /dev/null +++ b/modules/ExportPlugin/src/test/java/org/gephi/io/exporter/plugin/GEXFTest.java @@ -0,0 +1,60 @@ +package org.gephi.io.exporter.plugin; + +import java.io.IOException; +import org.gephi.graph.GraphGenerator; +import org.gephi.graph.api.Graph; +import org.gephi.project.api.Workspace; +import org.junit.Assert; +import org.junit.Test; + +public class GEXFTest { + + @Test + public void testInfinity() throws IOException { + GraphGenerator graphGenerator = GraphGenerator.build().generateTinyGraph().addDoubleNodeColumn(); + Graph graph = graphGenerator.getGraph(); + + graph.getNode(GraphGenerator.FIRST_NODE).setAttribute(GraphGenerator.DOUBLE_COLUMN, Double.POSITIVE_INFINITY); + graph.getNode(GraphGenerator.SECOND_NODE).setAttribute(GraphGenerator.DOUBLE_COLUMN, Double.NEGATIVE_INFINITY); + + Utils.assertExporterMatch("gexf/infinity.gexf", createExporter(graphGenerator)); + } + + @Test + public void testIncludeAttValues() throws IOException { + GraphGenerator graphGenerator = GraphGenerator.build().generateTinyGraph().addDoubleNodeColumn(); + + Graph graph = graphGenerator.getGraph(); + + graph.getNode(GraphGenerator.FIRST_NODE).setAttribute(GraphGenerator.DOUBLE_COLUMN, null); + ExporterGEXF exporterGEXF = createExporter(graphGenerator); + exporterGEXF.setIncludeNullAttValues(true); + Utils.assertExporterMatch("gexf/includenullattvalues.gexf", exporterGEXF); + } + + @Test + public void testMeta() throws IOException { + GraphGenerator graphGenerator = GraphGenerator.build(); + Workspace workspace = graphGenerator.getWorkspace(); + workspace.getWorkspaceMetadata().setTitle("title"); + workspace.getWorkspaceMetadata().setDescription("desc"); + + ExporterGEXF exporterGEXF = createExporter(graphGenerator); + exporterGEXF.setExportMeta(true); + String str = Utils.toString(exporterGEXF); + Assert.assertTrue(str.contains("title")); + Assert.assertTrue(str.contains("desc")); + } + + private static ExporterGEXF createExporter(GraphGenerator graphGenerator) { + Workspace workspace = graphGenerator.getWorkspace(); + ExporterGEXF exporterGEXF = new ExporterGEXF(); + exporterGEXF.setExportSize(false); + exporterGEXF.setExportColors(false); + exporterGEXF.setExportPosition(false); + exporterGEXF.setExportMeta(false); + exporterGEXF.setWorkspace(workspace); + return exporterGEXF; + } +} diff --git a/modules/ExportPlugin/src/test/java/org/gephi/io/exporter/plugin/JsonTest.java b/modules/ExportPlugin/src/test/java/org/gephi/io/exporter/plugin/JsonTest.java new file mode 100644 index 0000000000..2b41c43f35 --- /dev/null +++ b/modules/ExportPlugin/src/test/java/org/gephi/io/exporter/plugin/JsonTest.java @@ -0,0 +1,130 @@ +package org.gephi.io.exporter.plugin; + +import org.gephi.graph.GraphGenerator; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Node; +import org.gephi.project.api.Workspace; +import org.junit.Test; + +import java.awt.*; +import java.io.IOException; + +public class JsonTest { + + @Test + public void testEmpty() throws IOException { + GraphGenerator graphGenerator = + GraphGenerator.build(); + + Utils.assertExporterMatch("json/empty.json", createExporter(graphGenerator)); + } + + @Test + public void testTinyGraph() throws IOException { + GraphGenerator graphGenerator = + GraphGenerator.build().generateTinyGraph(); + + Utils.assertExporterMatch("json/tiny.json", createExporter(graphGenerator)); + } + + @Test + public void testNodeColumn() throws IOException { + GraphGenerator graphGenerator = + GraphGenerator.build().generateTinyGraph().addDoubleNodeColumn(); + + Utils.assertExporterMatch("json/column.json", createExporter(graphGenerator)); + } + + @Test + public void testLabels() throws IOException { + GraphGenerator graphGenerator = + GraphGenerator.build().generateTinyGraph().addNodeLabels().addEdgeLabels(); + + Utils.assertExporterMatch("json/labels.json", createExporter(graphGenerator)); + } + + @Test + public void testMulti() throws IOException { + GraphGenerator graphGenerator = + GraphGenerator.build().generateTinyMultiGraph(); + + Utils.assertExporterMatch("json/multi.json", createExporter(graphGenerator)); + } + + @Test + public void testUndirected() throws IOException { + GraphGenerator graphGenerator = + GraphGenerator.build().generateTinyUndirectedGraph(); + + Utils.assertExporterMatch("json/undirected.json", createExporter(graphGenerator)); + } + + @Test + public void testMixed() throws IOException { + GraphGenerator graphGenerator = + GraphGenerator.build().generateTinyMixedGraph(); + + Utils.assertExporterMatch("json/mixed.json", createExporter(graphGenerator)); + } + + @Test + public void testColors() throws IOException { + GraphGenerator graphGenerator = + GraphGenerator.build().generateTinyGraph(); + Graph graph = graphGenerator.getGraph(); + Node n1 = graph.getNode(GraphGenerator.FIRST_NODE); + Node n2 = graph.getNode(GraphGenerator.SECOND_NODE); + n1.setColor(Color.CYAN); + n2.setColor(new Color(255, 100, 120, 254)); + + ExporterJson exporterJson = createExporter(graphGenerator); + exporterJson.setExportColors(true); + Utils.assertExporterMatch("json/colors.json", exporterJson); + } + + @Test + public void testPosition() throws IOException { + GraphGenerator graphGenerator = + GraphGenerator.build().generateTinyGraphWithPosition(); + Graph graph = graphGenerator.getGraph(); + Node n1 = graph.getNode(GraphGenerator.FIRST_NODE); + Node n2 = graph.getNode(GraphGenerator.SECOND_NODE); + n1.setColor(Color.CYAN); + n2.setColor(new Color(255, 100, 120, 254)); + + ExporterJson exporterJson = createExporter(graphGenerator); + exporterJson.setExportPosition(true); + exporterJson.setNormalize(false); + + Utils.assertExporterMatch("json/position.json", exporterJson); + } + + @Test + public void testPositionNormalized() throws IOException { + GraphGenerator graphGenerator = + GraphGenerator.build().generateTinyGraphWithPosition(); + Graph graph = graphGenerator.getGraph(); + Node n1 = graph.getNode(GraphGenerator.FIRST_NODE); + Node n2 = graph.getNode(GraphGenerator.SECOND_NODE); + n1.setColor(Color.CYAN); + n2.setColor(new Color(255, 100, 120, 254)); + + ExporterJson exporterJson = createExporter(graphGenerator); + exporterJson.setExportPosition(true); + exporterJson.setNormalize(true); + + Utils.assertExporterMatch("json/position_normalized.json", exporterJson); + } + + private static ExporterJson createExporter(GraphGenerator graphGenerator) { + Workspace workspace = graphGenerator.getWorkspace(); + ExporterJson exporterJson = new ExporterJson(); + exporterJson.setWorkspace(workspace); + exporterJson.setExportMeta(false); + exporterJson.setExportColors(false); + exporterJson.setExportPosition(false); + exporterJson.setExportSize(false); + return exporterJson; + } + +} diff --git a/modules/ExportPlugin/src/test/java/org/gephi/io/exporter/plugin/SpreadsheetTest.java b/modules/ExportPlugin/src/test/java/org/gephi/io/exporter/plugin/SpreadsheetTest.java new file mode 100644 index 0000000000..430757895b --- /dev/null +++ b/modules/ExportPlugin/src/test/java/org/gephi/io/exporter/plugin/SpreadsheetTest.java @@ -0,0 +1,277 @@ +package org.gephi.io.exporter.plugin; + +import java.io.IOException; +import java.text.DecimalFormat; +import java.text.DecimalFormatSymbols; +import java.util.Arrays; +import java.util.LinkedHashSet; +import java.util.Locale; +import org.gephi.graph.GraphGenerator; +import org.gephi.graph.api.Configuration; +import org.gephi.graph.api.TimeFormat; +import org.gephi.graph.api.TimeRepresentation; +import org.gephi.project.api.Workspace; +import org.junit.Test; + +public class SpreadsheetTest { + + private final Configuration timestampConfiguration = Configuration.builder().timeRepresentation( + TimeRepresentation.TIMESTAMP).build(); + + @Test + public void testEmptyEdges() throws IOException { + GraphGenerator graphGenerator = GraphGenerator.build(); + + Utils.assertExporterMatch("spreadsheet/empty.csv", createExporter(graphGenerator)); + } + + @Test + public void testSingleEdge() throws IOException { + GraphGenerator graphGenerator = GraphGenerator.build().generateTinyGraph(); + graphGenerator.getGraph().getEdge("1").setWeight(1.33); + + Utils.assertExporterMatch("spreadsheet/single.csv", createExporter(graphGenerator)); + } + + @Test + public void testMultigraphEdges() throws IOException { + GraphGenerator graphGenerator = GraphGenerator.build().generateTinyMultiGraph(); + + Utils.assertExporterMatch("spreadsheet/multigraph.csv", createExporter(graphGenerator)); + } + + @Test + public void testFieldDelimiter() throws IOException { + GraphGenerator graphGenerator = GraphGenerator.build().generateTinyGraph(); + ExporterSpreadsheet exporterSpreadsheet = createNodeExporter(graphGenerator); + exporterSpreadsheet.setFieldDelimiter(';'); + + Utils.assertExporterMatch("spreadsheet/field_delimiter.csv", exporterSpreadsheet); + } + + @Test + public void testEdgeLabelQuote() throws IOException { + GraphGenerator graphGenerator = GraphGenerator.build().generateTinyGraph(); + graphGenerator.getGraph().getEdge("1").setLabel("str with, and \"quotes\""); + + Utils.assertExporterMatch("spreadsheet/quotes.csv", createExporter(graphGenerator)); + } + + @Test + public void testNodeAttributeInt() throws IOException { + GraphGenerator graphGenerator = GraphGenerator.build().generateTinyGraph().addIntNodeColumn(); + ExporterSpreadsheet exporterSpreadsheet = createNodeExporter(graphGenerator); + + Utils.assertExporterMatch("spreadsheet/int_attribute.csv", exporterSpreadsheet); + } + + @Test + public void testNodeAttributeArray() throws IOException { + GraphGenerator graphGenerator = + GraphGenerator.build().generateTinyGraph().addStringArrayNodeColumn(); + ExporterSpreadsheet exporterSpreadsheet = createNodeExporter(graphGenerator); + + Utils.assertExporterMatch("spreadsheet/array_attribute.csv", exporterSpreadsheet); + } + + @Test + public void testExcludeColumn() throws IOException { + GraphGenerator graphGenerator = GraphGenerator.build().generateTinyGraph().addIntNodeColumn(); + ExporterSpreadsheet exporterSpreadsheet = createNodeExporter(graphGenerator); + exporterSpreadsheet.setExcludedColumns(new LinkedHashSet<>(Arrays.asList("label", GraphGenerator.INT_COLUMN))); + + Utils.assertExporterMatch("spreadsheet/exclude_column.csv", exporterSpreadsheet); + } + + @Test + public void testWithoutAttributes() throws IOException { + GraphGenerator graphGenerator = GraphGenerator.build().generateTinyGraph().addIntNodeColumn(); + ExporterSpreadsheet exporterSpreadsheet = createNodeExporter(graphGenerator); + exporterSpreadsheet.setExportAttributes(false); + + Utils.assertExporterMatch("spreadsheet/without_attributes.csv", exporterSpreadsheet); + } + + @Test + public void testInfinity() throws IOException { + GraphGenerator graphGenerator = + GraphGenerator.build().generateTinyGraph().addDoubleNodeColumn(); + ExporterSpreadsheet exporterSpreadsheet = createNodeExporter(graphGenerator); + + graphGenerator.getGraph().getNode(GraphGenerator.FIRST_NODE) + .setAttribute(GraphGenerator.DOUBLE_COLUMN, Double.POSITIVE_INFINITY); + graphGenerator.getGraph().getNode(GraphGenerator.SECOND_NODE) + .setAttribute(GraphGenerator.DOUBLE_COLUMN, Double.NEGATIVE_INFINITY); + + Utils.assertExporterMatch("spreadsheet/infinity.csv", exporterSpreadsheet); + } + + @Test + public void testNodeTimestampSetOtherColumn() throws IOException { + GraphGenerator graphGenerator = + GraphGenerator.build(timestampConfiguration).generateTinyGraph().addTimestampSetColumn(); + ExporterSpreadsheet exporterSpreadsheet = createNodeExporter(graphGenerator); + + Utils.assertExporterMatch("spreadsheet/timestampset_column.csv", exporterSpreadsheet); + } + + @Test + public void testNodeTimestampSet() throws IOException { + GraphGenerator graphGenerator = + GraphGenerator.build(timestampConfiguration).generateTinyGraph().setTimestampSet(); + ExporterSpreadsheet exporterSpreadsheet = createNodeExporter(graphGenerator); + + Utils.assertExporterMatch("spreadsheet/timestampset.csv", exporterSpreadsheet); + } + + @Test + public void testNodeTimestampDouble() throws IOException { + GraphGenerator graphGenerator = + GraphGenerator.build(timestampConfiguration).generateTinyGraph().addTimestampDoubleColumn(); + ExporterSpreadsheet exporterSpreadsheet = createNodeExporter(graphGenerator); + exporterSpreadsheet.setExportDynamic(true); + + Utils.assertExporterMatch("spreadsheet/timestamp.csv", exporterSpreadsheet); + } + + @Test + public void testNodeTimestampDoubleWithTimeFormat() throws IOException { + GraphGenerator graphGenerator = + GraphGenerator.build(timestampConfiguration).generateTinyGraph().withTimeFormat(TimeFormat.DATE) + .addTimestampDoubleColumn(); + ExporterSpreadsheet exporterSpreadsheet = createNodeExporter(graphGenerator); + exporterSpreadsheet.setExportDynamic(true); + + Utils.assertExporterMatch("spreadsheet/timestamp_with_time_format.csv", exporterSpreadsheet); + } + + @Test + public void testTimestampWithEstimator() throws IOException { + GraphGenerator graphGenerator = + GraphGenerator.build(timestampConfiguration).generateTinyGraph().addTimestampDoubleColumn(); + ExporterSpreadsheet exporterSpreadsheet = createNodeExporter(graphGenerator); + exporterSpreadsheet.setExportDynamic(false); + + Utils.assertExporterMatch("spreadsheet/timestamp_with_estimator.csv", exporterSpreadsheet); + } + + @Test + public void testDecimalFormat() throws IOException { + DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance(Locale.GERMAN); + GraphGenerator graphGenerator = GraphGenerator.build().generateTinyGraph(); + ExporterSpreadsheet exporterSpreadsheet = createExporter(graphGenerator); + exporterSpreadsheet.setDecimalFormatSymbols(symbols); + graphGenerator.getGraph().getEdge("1").setWeight(1.33); + + Utils.assertExporterMatch("spreadsheet/decimal_separator.csv", exporterSpreadsheet); + } + + @Test + public void testNumberFormat() throws IOException { + DecimalFormat numberFormat = new DecimalFormat("0.#"); + GraphGenerator graphGenerator = GraphGenerator.build().generateTinyGraph(); + ExporterSpreadsheet exporterSpreadsheet = createExporter(graphGenerator); + exporterSpreadsheet.setNumberFormat(numberFormat); + graphGenerator.getGraph().getEdge("1").setWeight(1.353643); + + Utils.assertExporterMatch("spreadsheet/number_format.csv", exporterSpreadsheet); + } + + @Test + public void testLargeNumber() throws IOException { + GraphGenerator graphGenerator = GraphGenerator.build().generateTinyGraph().addIntNodeColumn(); + ExporterSpreadsheet exporterSpreadsheet = createNodeExporter(graphGenerator); + graphGenerator.getGraph().getNode("1").setAttribute(GraphGenerator.INT_COLUMN, 1000000000); + + Utils.assertExporterMatch("spreadsheet/large_number.csv", exporterSpreadsheet); + } + + @Test + public void testPositions() throws IOException { + GraphGenerator graphGenerator = GraphGenerator.build().generateTinyGraph(); + ExporterSpreadsheet exporterSpreadsheet = createNodeExporter(graphGenerator); + exporterSpreadsheet.setExportPosition(true); + + Utils.assertExporterMatch("spreadsheet/positions.csv", exporterSpreadsheet); + } + + @Test + public void testPositionsWithZ() throws IOException { + GraphGenerator graphGenerator = GraphGenerator.build().generateTinyGraph(); + ExporterSpreadsheet exporterSpreadsheet = createNodeExporter(graphGenerator); + exporterSpreadsheet.setExportPosition(true); + + graphGenerator.getGraph().getNode(GraphGenerator.FIRST_NODE).setZ(5); + + Utils.assertExporterMatch("spreadsheet/positions_z.csv", exporterSpreadsheet); + } + + @Test + public void testSize() throws IOException { + GraphGenerator graphGenerator = GraphGenerator.build().generateTinyGraph(); + ExporterSpreadsheet exporterSpreadsheet = createNodeExporter(graphGenerator); + exporterSpreadsheet.setExportSize(true); + + Utils.assertExporterMatch("spreadsheet/size.csv", exporterSpreadsheet); + } + + @Test + public void testNormalize() throws IOException { + GraphGenerator graphGenerator = GraphGenerator.build().generateTinyGraph(); + ExporterSpreadsheet exporterSpreadsheet = createNodeExporter(graphGenerator); + exporterSpreadsheet.setExportSize(true); + exporterSpreadsheet.setExportPosition(true); + exporterSpreadsheet.setNormalize(true); + + graphGenerator.getGraph().getNode(GraphGenerator.FIRST_NODE).setX(-100); + graphGenerator.getGraph().getNode(GraphGenerator.FIRST_NODE).setY(300); + graphGenerator.getGraph().getNode(GraphGenerator.FIRST_NODE).setSize(10); + graphGenerator.getGraph().getNode(GraphGenerator.SECOND_NODE).setX(100); + graphGenerator.getGraph().getNode(GraphGenerator.SECOND_NODE).setY(-300); + graphGenerator.getGraph().getNode(GraphGenerator.SECOND_NODE).setSize(20); + + Utils.assertExporterMatch("spreadsheet/normalize.csv", exporterSpreadsheet); + } + + @Test + public void testColor() throws IOException { + GraphGenerator graphGenerator = GraphGenerator.build().generateTinyGraph(); + ExporterSpreadsheet exporterSpreadsheet = createNodeExporter(graphGenerator); + exporterSpreadsheet.setExportColors(true); + + Utils.assertExporterMatch("spreadsheet/color.csv", exporterSpreadsheet); + } + + @Test + public void testEdgeColor() throws IOException { + GraphGenerator graphGenerator = GraphGenerator.build().generateTinyGraph(); + ExporterSpreadsheet exporterSpreadsheet = createExporter(graphGenerator); + exporterSpreadsheet.setExportColors(true); + + Utils.assertExporterMatch("spreadsheet/edge_color.csv", exporterSpreadsheet); + } + + @Test + public void testUtf8() throws IOException { + GraphGenerator graphGenerator = GraphGenerator.build().generateTinyGraph(); + graphGenerator.getGraph().getNode(GraphGenerator.FIRST_NODE).setLabel("SÀÀnnΓΆt"); + ExporterSpreadsheet exporterSpreadsheet = createNodeExporter(graphGenerator); + + Utils.assertExporterMatch("spreadsheet/utf8.csv", exporterSpreadsheet); + } + + // Utilities + + private static ExporterSpreadsheet createNodeExporter(GraphGenerator graphGenerator) { + ExporterSpreadsheet exporterSpreadsheet = createExporter(graphGenerator); + exporterSpreadsheet.setTableToExport(ExporterSpreadsheet.ExportTable.NODES); + return exporterSpreadsheet; + } + + private static ExporterSpreadsheet createExporter(GraphGenerator graphGenerator) { + Workspace workspace = graphGenerator.getWorkspace(); + ExporterSpreadsheet exporterSpreadsheet = new ExporterSpreadsheet(); + exporterSpreadsheet.setWorkspace(workspace); + return exporterSpreadsheet; + } +} diff --git a/modules/ExportPlugin/src/test/java/org/gephi/io/exporter/plugin/Utils.java b/modules/ExportPlugin/src/test/java/org/gephi/io/exporter/plugin/Utils.java new file mode 100644 index 0000000000..c791b3d0b1 --- /dev/null +++ b/modules/ExportPlugin/src/test/java/org/gephi/io/exporter/plugin/Utils.java @@ -0,0 +1,59 @@ +package org.gephi.io.exporter.plugin; + +import java.io.IOException; +import java.io.StringWriter; +import java.nio.charset.StandardCharsets; +import java.util.Iterator; +import org.gephi.io.exporter.spi.CharacterExporter; +import org.junit.Assert; +import org.xmlunit.builder.DiffBuilder; +import org.xmlunit.diff.Diff; +import org.xmlunit.diff.Difference; + +public class Utils { + + public static void print(CharacterExporter exporter) throws IOException { + StringWriter writer = new StringWriter(); + exporter.setWriter(writer); + exporter.execute(); + writer.close(); + System.out.println(writer); + } + + public static String toString(CharacterExporter exporter) throws IOException { + StringWriter writer = new StringWriter(); + exporter.setWriter(writer); + exporter.execute(); + writer.close(); + return writer.toString(); + } + + public static void assertExporterMatch(String expectedFilename, CharacterExporter exporter) throws IOException { + String expected = getResourceContent(expectedFilename); + String actual = toString(exporter); + + if (expected.startsWith(" iter = myDiff.getDifferences().iterator(); + int size = 0; + while (iter.hasNext()) { + System.err.println("Difference: " + iter.next().toString()); + size++; + } + Assert.assertEquals("Expected: \n" + cleanString(actual), 0, size); + } else { + Assert.assertEquals(cleanString(expected), cleanString(actual)); + } + } + + private static String cleanString(String str) { + return str.replaceAll("\\r", ""); + } + + public static String getResourceContent(String fileName) throws IOException { + return new String(Utils.class.getResourceAsStream(fileName) + .readAllBytes(), StandardCharsets.UTF_8); + } +} diff --git a/modules/ExportPlugin/src/test/java/org/gephi/io/exporter/plugin/VNATest.java b/modules/ExportPlugin/src/test/java/org/gephi/io/exporter/plugin/VNATest.java new file mode 100644 index 0000000000..4243bf355b --- /dev/null +++ b/modules/ExportPlugin/src/test/java/org/gephi/io/exporter/plugin/VNATest.java @@ -0,0 +1,24 @@ +package org.gephi.io.exporter.plugin; + +import java.io.IOException; +import org.gephi.graph.GraphGenerator; +import org.gephi.graph.api.Graph; +import org.gephi.project.api.Workspace; +import org.junit.Test; + +public class VNATest { + + @Test + public void testBasic() throws IOException { + GraphGenerator graphGenerator = GraphGenerator.build().generateTinyGraph().addDoubleNodeColumn(); + + Utils.assertExporterMatch("basic.vna", createExporter(graphGenerator)); + } + + private static ExporterVNA createExporter(GraphGenerator graphGenerator) { + Workspace workspace = graphGenerator.getWorkspace(); + ExporterVNA exporterVNA = new ExporterVNA(); + exporterVNA.setWorkspace(workspace); + return exporterVNA; + } +} diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/basic.vna b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/basic.vna new file mode 100644 index 0000000000..f1ea5f164a --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/basic.vna @@ -0,0 +1,11 @@ +*Node data +ID value +1 10.0 +2 11.0 +*Node properties +ID x y size color shortlabel +1 0.0 0.0 0.0 0 1 +2 0.0 0.0 0.0 0 2 +*Tie data +from to strength +1 2 1.0 diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/gexf/includenullattvalues.gexf b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/gexf/includenullattvalues.gexf new file mode 100644 index 0000000000..7cd87b1c04 --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/gexf/includenullattvalues.gexf @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/gexf/infinity.gexf b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/gexf/infinity.gexf new file mode 100644 index 0000000000..7e2fa4e8b6 --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/gexf/infinity.gexf @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/colors.json b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/colors.json new file mode 100644 index 0000000000..d293bbffff --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/colors.json @@ -0,0 +1,32 @@ +{ + "options": { + "multi": false, + "allowSelfLoops": true, + "type": "directed" + }, + "nodes": [ + { + "key": "1", + "attributes": { + "color": "#00ffff" + } + }, + { + "key": "2", + "attributes": { + "color": "#ff6478fe" + } + } + ], + "edges": [ + { + "key": "1", + "source": "1", + "target": "2", + "attributes": { + "color": "#000000", + "weight": 1.0 + } + } + ] +} \ No newline at end of file diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/column.json b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/column.json new file mode 100644 index 0000000000..5407a014b5 --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/column.json @@ -0,0 +1,31 @@ +{ + "options": { + "multi": false, + "allowSelfLoops": true, + "type": "directed" + }, + "nodes": [ + { + "key": "1", + "attributes": { + "value": 10.0 + } + }, + { + "key": "2", + "attributes": { + "value": 11.0 + } + } + ], + "edges": [ + { + "key": "1", + "source": "1", + "target": "2", + "attributes": { + "weight": 1.0 + } + } + ] +} \ No newline at end of file diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/empty.json b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/empty.json new file mode 100644 index 0000000000..c5f9ce9e85 --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/empty.json @@ -0,0 +1,9 @@ +{ + "options": { + "multi": false, + "allowSelfLoops": true, + "type": "directed" + }, + "nodes": [], + "edges": [] +} \ No newline at end of file diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/labels.json b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/labels.json new file mode 100644 index 0000000000..878bb69960 --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/labels.json @@ -0,0 +1,32 @@ +{ + "options": { + "multi": false, + "allowSelfLoops": true, + "type": "directed" + }, + "nodes": [ + { + "key": "1", + "attributes": { + "label": "1" + } + }, + { + "key": "2", + "attributes": { + "label": "2" + } + } + ], + "edges": [ + { + "key": "1", + "source": "1", + "target": "2", + "attributes": { + "label": "1", + "weight": 1.0 + } + } + ] +} \ No newline at end of file diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/mixed.json b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/mixed.json new file mode 100644 index 0000000000..74426d7ffa --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/mixed.json @@ -0,0 +1,40 @@ +{ + "options": { + "multi": false, + "allowSelfLoops": true, + "type": "mixed" + }, + "nodes": [ + { + "key": "1", + "attributes": {} + }, + { + "key": "2", + "attributes": {} + }, + { + "key": "3", + "attributes": {} + } + ], + "edges": [ + { + "key": "1", + "source": "1", + "target": "2", + "undirected": true, + "attributes": { + "weight": 1.0 + } + }, + { + "key": "2", + "source": "1", + "target": "3", + "attributes": { + "weight": 1.0 + } + } + ] +} \ No newline at end of file diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/multi.json b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/multi.json new file mode 100644 index 0000000000..e3af61dd8c --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/multi.json @@ -0,0 +1,36 @@ +{ + "options": { + "multi": true, + "allowSelfLoops": true, + "type": "directed" + }, + "nodes": [ + { + "key": "1", + "attributes": {} + }, + { + "key": "2", + "attributes": {} + } + ], + "edges": [ + { + "key": "1", + "source": "1", + "target": "2", + "attributes": { + "weight": 1.0 + } + }, + { + "key": "2", + "source": "1", + "target": "2", + "attributes": { + "type": "1", + "weight": 1.0 + } + } + ] +} \ No newline at end of file diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/position.json b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/position.json new file mode 100644 index 0000000000..85ad0bba24 --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/position.json @@ -0,0 +1,33 @@ +{ + "options": { + "multi": false, + "allowSelfLoops": true, + "type": "directed" + }, + "nodes": [ + { + "key": "1", + "attributes": { + "x": 2.5, + "y": 4.7 + } + }, + { + "key": "2", + "attributes": { + "x": -3.3, + "y": -5.4 + } + } + ], + "edges": [ + { + "key": "1", + "source": "1", + "target": "2", + "attributes": { + "weight": 1.0 + } + } + ] +} \ No newline at end of file diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/position_normalized.json b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/position_normalized.json new file mode 100644 index 0000000000..e8cfeaa73e --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/position_normalized.json @@ -0,0 +1,33 @@ +{ + "options": { + "multi": false, + "allowSelfLoops": true, + "type": "directed" + }, + "nodes": [ + { + "key": "1", + "attributes": { + "x": 1.0, + "y": 1.0 + } + }, + { + "key": "2", + "attributes": { + "x": 0.0, + "y": 0.0 + } + } + ], + "edges": [ + { + "key": "1", + "source": "1", + "target": "2", + "attributes": { + "weight": 1.0 + } + } + ] +} \ No newline at end of file diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/tiny.json b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/tiny.json new file mode 100644 index 0000000000..bec52e856a --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/tiny.json @@ -0,0 +1,27 @@ +{ + "options": { + "multi": false, + "allowSelfLoops": true, + "type": "directed" + }, + "nodes": [ + { + "key": "1", + "attributes": {} + }, + { + "key": "2", + "attributes": {} + } + ], + "edges": [ + { + "key": "1", + "source": "1", + "target": "2", + "attributes": { + "weight": 1.0 + } + } + ] +} \ No newline at end of file diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/undirected.json b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/undirected.json new file mode 100644 index 0000000000..e2c01f4829 --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/json/undirected.json @@ -0,0 +1,27 @@ +{ + "options": { + "multi": false, + "allowSelfLoops": true, + "type": "undirected" + }, + "nodes": [ + { + "key": "1", + "attributes": {} + }, + { + "key": "2", + "attributes": {} + } + ], + "edges": [ + { + "key": "1", + "source": "1", + "target": "2", + "attributes": { + "weight": 1.0 + } + } + ] +} \ No newline at end of file diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/array_attribute.csv b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/array_attribute.csv new file mode 100644 index 0000000000..bb320383d4 --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/array_attribute.csv @@ -0,0 +1,3 @@ +Id,Label,array +1,,"[foo, bar]" +2,,[foo] diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/color.csv b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/color.csv new file mode 100644 index 0000000000..b70bb222b6 --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/color.csv @@ -0,0 +1,3 @@ +Id,Label,Color +1,,"#000000" +2,,"#000000" diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/decimal_separator.csv b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/decimal_separator.csv new file mode 100644 index 0000000000..cde12b4e94 --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/decimal_separator.csv @@ -0,0 +1,2 @@ +Source,Target,Type,Id,Label,Weight +1,2,Directed,1,,"1,33" diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/edge_color.csv b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/edge_color.csv new file mode 100644 index 0000000000..a1521ab65a --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/edge_color.csv @@ -0,0 +1,2 @@ +Source,Target,Type,Id,Label,Weight,Color +1,2,Directed,1,,1,"#000000" diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/empty.csv b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/empty.csv new file mode 100644 index 0000000000..a647732ac0 --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/empty.csv @@ -0,0 +1 @@ +Source,Target,Type,Id,Label,Weight diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/exclude_column.csv b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/exclude_column.csv new file mode 100644 index 0000000000..c856886714 --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/exclude_column.csv @@ -0,0 +1,3 @@ +Id +1 +2 diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/field_delimiter.csv b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/field_delimiter.csv new file mode 100644 index 0000000000..f8cefa25fe --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/field_delimiter.csv @@ -0,0 +1,3 @@ +Id;Label +1; +2; diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/infinity.csv b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/infinity.csv new file mode 100644 index 0000000000..9ce168694d --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/infinity.csv @@ -0,0 +1,3 @@ +Id,Label,value +1,,Infinity +2,,-Infinity diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/int_attribute.csv b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/int_attribute.csv new file mode 100644 index 0000000000..ab8a1821d3 --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/int_attribute.csv @@ -0,0 +1,3 @@ +Id,Label,age +1,,10 +2,,11 diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/large_number.csv b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/large_number.csv new file mode 100644 index 0000000000..8d51600c36 --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/large_number.csv @@ -0,0 +1,3 @@ +Id,Label,age +1,,1000000000 +2,,11 diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/multigraph.csv b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/multigraph.csv new file mode 100644 index 0000000000..cef1835997 --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/multigraph.csv @@ -0,0 +1,3 @@ +Source,Target,Type,Kind,Id,Label,Weight +1,2,Directed,,1,,1 +1,2,Directed,1,2,,1 diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/normalize.csv b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/normalize.csv new file mode 100644 index 0000000000..d0f84c4743 --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/normalize.csv @@ -0,0 +1,3 @@ +Id,Label,X,Y,Size +1,,0,1,0 +2,,1,0,1 diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/number_format.csv b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/number_format.csv new file mode 100644 index 0000000000..bd29caf05e --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/number_format.csv @@ -0,0 +1,2 @@ +Source,Target,Type,Id,Label,Weight +1,2,Directed,1,,1.4 diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/positions.csv b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/positions.csv new file mode 100644 index 0000000000..55ac606db3 --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/positions.csv @@ -0,0 +1,3 @@ +Id,Label,X,Y +1,,0,0 +2,,0,0 diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/positions_z.csv b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/positions_z.csv new file mode 100644 index 0000000000..8a88d68acc --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/positions_z.csv @@ -0,0 +1,3 @@ +Id,Label,X,Y,Z +1,,0,0,5 +2,,0,0,0 diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/quotes.csv b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/quotes.csv new file mode 100644 index 0000000000..dde1c9eea4 --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/quotes.csv @@ -0,0 +1,2 @@ +Source,Target,Type,Id,Label,Weight +1,2,Directed,1,"str with, and ""quotes""",1 diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/single.csv b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/single.csv new file mode 100644 index 0000000000..4855cfeca3 --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/single.csv @@ -0,0 +1,2 @@ +Source,Target,Type,Id,Label,Weight +1,2,Directed,1,,1.33 diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/size.csv b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/size.csv new file mode 100644 index 0000000000..03d5618778 --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/size.csv @@ -0,0 +1,3 @@ +Id,Label,Size +1,,0 +2,,0 diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/timestamp.csv b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/timestamp.csv new file mode 100644 index 0000000000..b740e5a091 --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/timestamp.csv @@ -0,0 +1,3 @@ +Id,Label,timeset,price +1,,,"<[2000.0, 3.0]>" +2,,,"<[2000.0, 6.0]>" diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/timestamp_with_estimator.csv b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/timestamp_with_estimator.csv new file mode 100644 index 0000000000..039c13459c --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/timestamp_with_estimator.csv @@ -0,0 +1,3 @@ +Id,Label,timeset,price +1,,,3 +2,,,6 diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/timestamp_with_time_format.csv b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/timestamp_with_time_format.csv new file mode 100644 index 0000000000..068624145a --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/timestamp_with_time_format.csv @@ -0,0 +1,3 @@ +Id,Label,timeset,price +1,,,"<[2022-09-01, 3.0]>" +2,,,"<[2022-09-01, 6.0]>" diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/timestampset.csv b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/timestampset.csv new file mode 100644 index 0000000000..9c92564bb4 --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/timestampset.csv @@ -0,0 +1,3 @@ +Id,Label,timeset +1,,<[3.0]> +2,,<[6.0]> diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/timestampset_column.csv b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/timestampset_column.csv new file mode 100644 index 0000000000..ed2d2db0d7 --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/timestampset_column.csv @@ -0,0 +1,3 @@ +Id,Label,timeset,events +1,,,<[3.0]> +2,,,<[6.0]> diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/utf8.csv b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/utf8.csv new file mode 100644 index 0000000000..bbd8bb3146 --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/utf8.csv @@ -0,0 +1,3 @@ +Id,Label +1,SÀÀnnΓΆt +2, diff --git a/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/without_attributes.csv b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/without_attributes.csv new file mode 100644 index 0000000000..ceb1de5a78 --- /dev/null +++ b/modules/ExportPlugin/src/test/resources/org/gephi/io/exporter/plugin/spreadsheet/without_attributes.csv @@ -0,0 +1,3 @@ +Id,Label +1, +2, diff --git a/modules/ExportPluginUI/pom.xml b/modules/ExportPluginUI/pom.xml index 4680610944..3e8037ab62 100644 --- a/modules/ExportPluginUI/pom.xml +++ b/modules/ExportPluginUI/pom.xml @@ -4,13 +4,12 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. - org.gephi export-plugin-ui - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm ExportPluginUI @@ -20,6 +19,10 @@ ${project.groupId} graph-api
    + + ${project.groupId} + project-api + ${project.groupId} io-exporter-api @@ -42,14 +45,14 @@ ${project.groupId} - lib.validation + ui-utils - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/AbstractExporterSettings.java b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/AbstractExporterSettings.java new file mode 100644 index 0000000000..f523a24216 --- /dev/null +++ b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/AbstractExporterSettings.java @@ -0,0 +1,47 @@ +package org.gephi.ui.exporter.plugin; + +import org.openide.util.NbPreferences; + +public abstract class AbstractExporterSettings { + + protected boolean get(String name, boolean defaultValue) { + return NbPreferences.forModule(AbstractExporterSettings.class).getBoolean(name, defaultValue); + } + + protected void put(String name, boolean value) { + NbPreferences.forModule(AbstractExporterSettings.class).putBoolean(name, value); + } + + protected String get(String name, String defaultValue) { + return NbPreferences.forModule(AbstractExporterSettings.class).get(name, defaultValue); + } + + protected void put(String name, String value) { + NbPreferences.forModule(AbstractExporterSettings.class).put(name, value); + } + + protected int get(String name, int defaultValue) { + return NbPreferences.forModule(AbstractExporterSettings.class).getInt(name, defaultValue); + } + + protected void put(String name, int value) { + NbPreferences.forModule(AbstractExporterSettings.class).putInt(name, value); + } + + protected char get(String name, char defaultValue) { + return (char) NbPreferences.forModule(AbstractExporterSettings.class).getInt(name, defaultValue); + } + + protected void put(String name, char value) { + NbPreferences.forModule(AbstractExporterSettings.class).putInt(name, value); + } + + protected String[] get(String name, String[] defaultValue) { + return NbPreferences.forModule(AbstractExporterSettings.class).get(name, String.join(";", defaultValue)) + .split(";"); + } + + protected void put(String name, String[] value) { + NbPreferences.forModule(AbstractExporterSettings.class).put(name, String.join(";", value)); + } +} diff --git a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterCSV.java b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterCSV.java index ea2cb0471c..a8d916dc8e 100644 --- a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterCSV.java +++ b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterCSV.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.exporter.plugin; import javax.swing.JPanel; @@ -49,21 +50,22 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = ExporterUI.class) public class UIExporterCSV implements ExporterUI { + private final ExporterCSVSettings settings = new ExporterCSVSettings(); private UIExporterCSVPanel panel; private ExporterCSV exporterCSV; - private ExporterCSVSettings settings = new ExporterCSVSettings(); @Override public void setup(Exporter exporter) { exporterCSV = (ExporterCSV) exporter; settings.load(exporterCSV); - panel.setup(exporterCSV); + if (panel != null) { + panel.setup(exporterCSV); + } } @Override @@ -92,25 +94,28 @@ public String getDisplayName() { return NbBundle.getMessage(UIExporterCSV.class, "UIExporterCSV.name"); } - private static class ExporterCSVSettings { + private static class ExporterCSVSettings extends AbstractExporterSettings { - private boolean edgeWeight = true; - private boolean writeZero = true; - private boolean header = true; - private boolean list = false; + // Preference names + private final static String EDGE_WEIGHT = "CSV_edgeWeight"; + private final static String WRITE_ZERO = "CSV_writeZero"; + private final static String HEADER = "CSV_header"; + private final static String LIST = "CSV_list"; + // Default + private final static ExporterCSV DEFAULT = new ExporterCSV(); private void save(ExporterCSV exporterCSV) { - this.edgeWeight = exporterCSV.isEdgeWeight(); - this.writeZero = exporterCSV.isWriteZero(); - this.header = exporterCSV.isHeader(); - this.list = exporterCSV.isList(); + put(EDGE_WEIGHT, exporterCSV.isEdgeWeight()); + put(WRITE_ZERO, exporterCSV.isWriteZero()); + put(HEADER, exporterCSV.isHeader()); + put(LIST, exporterCSV.isList()); } private void load(ExporterCSV exporterCSV) { - exporterCSV.setEdgeWeight(edgeWeight); - exporterCSV.setWriteZero(writeZero); - exporterCSV.setHeader(header); - exporterCSV.setList(list); + exporterCSV.setEdgeWeight(get(EDGE_WEIGHT, DEFAULT.isEdgeWeight())); + exporterCSV.setWriteZero(get(WRITE_ZERO, DEFAULT.isWriteZero())); + exporterCSV.setHeader(get(HEADER, DEFAULT.isHeader())); + exporterCSV.setList(get(LIST, DEFAULT.isList())); } } } diff --git a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterCSVPanel.java b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterCSVPanel.java index 7346bd0024..ff5a99e8c1 100644 --- a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterCSVPanel.java +++ b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterCSVPanel.java @@ -39,16 +39,27 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.exporter.plugin; import org.gephi.io.exporter.plugin.ExporterCSV; /** - * * @author Mathieu Bastian */ public class UIExporterCSVPanel extends javax.swing.JPanel { + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.ButtonGroup buttonGroup1; + private javax.swing.JCheckBox edgeWeightCheckbox; + private javax.swing.JLabel labelExport; + private javax.swing.JRadioButton listRadio; + private javax.swing.JRadioButton matrixRadio; + private javax.swing.JCheckBox nodeIdCheckbox; + private javax.swing.JCheckBox zeroEdgeCheckbox; + private org.jdesktop.beansbinding.BindingGroup bindingGroup; + // End of variables declaration//GEN-END:variables + public UIExporterCSVPanel() { initComponents(); } @@ -68,7 +79,8 @@ public void unsetup(ExporterCSV exporterCSV) { exporterCSV.setWriteZero(zeroEdgeCheckbox.isSelected()); } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -86,81 +98,89 @@ private void initComponents() { listRadio = new javax.swing.JRadioButton(); matrixRadio = new javax.swing.JRadioButton(); - edgeWeightCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterCSVPanel.class, "UIExporterCSVPanel.edgeWeightCheckbox.text")); // NOI18N + edgeWeightCheckbox.setText(org.openide.util.NbBundle + .getMessage(UIExporterCSVPanel.class, "UIExporterCSVPanel.edgeWeightCheckbox.text")); // NOI18N - org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, matrixRadio, org.jdesktop.beansbinding.ELProperty.create("${selected}"), edgeWeightCheckbox, org.jdesktop.beansbinding.BeanProperty.create("enabled")); + org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings + .createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, matrixRadio, + org.jdesktop.beansbinding.ELProperty.create("${selected}"), edgeWeightCheckbox, + org.jdesktop.beansbinding.BeanProperty.create("enabled")); bindingGroup.addBinding(binding); - labelExport.setText(org.openide.util.NbBundle.getMessage(UIExporterCSVPanel.class, "UIExporterCSVPanel.labelExport.text")); // NOI18N + labelExport.setText(org.openide.util.NbBundle + .getMessage(UIExporterCSVPanel.class, "UIExporterCSVPanel.labelExport.text")); // NOI18N - binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, matrixRadio, org.jdesktop.beansbinding.ELProperty.create("${selected}"), labelExport, org.jdesktop.beansbinding.BeanProperty.create("enabled")); + binding = org.jdesktop.beansbinding.Bindings + .createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, matrixRadio, + org.jdesktop.beansbinding.ELProperty.create("${selected}"), labelExport, + org.jdesktop.beansbinding.BeanProperty.create("enabled")); bindingGroup.addBinding(binding); - nodeIdCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterCSVPanel.class, "UIExporterCSVPanel.nodeIdCheckbox.text")); // NOI18N + nodeIdCheckbox.setText(org.openide.util.NbBundle + .getMessage(UIExporterCSVPanel.class, "UIExporterCSVPanel.nodeIdCheckbox.text")); // NOI18N - binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, matrixRadio, org.jdesktop.beansbinding.ELProperty.create("${selected}"), nodeIdCheckbox, org.jdesktop.beansbinding.BeanProperty.create("enabled")); + binding = org.jdesktop.beansbinding.Bindings + .createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, matrixRadio, + org.jdesktop.beansbinding.ELProperty.create("${selected}"), nodeIdCheckbox, + org.jdesktop.beansbinding.BeanProperty.create("enabled")); bindingGroup.addBinding(binding); - zeroEdgeCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterCSVPanel.class, "UIExporterCSVPanel.zeroEdgeCheckbox.text")); // NOI18N + zeroEdgeCheckbox.setText(org.openide.util.NbBundle + .getMessage(UIExporterCSVPanel.class, "UIExporterCSVPanel.zeroEdgeCheckbox.text")); // NOI18N - binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, matrixRadio, org.jdesktop.beansbinding.ELProperty.create("${selected}"), zeroEdgeCheckbox, org.jdesktop.beansbinding.BeanProperty.create("enabled")); + binding = org.jdesktop.beansbinding.Bindings + .createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, matrixRadio, + org.jdesktop.beansbinding.ELProperty.create("${selected}"), zeroEdgeCheckbox, + org.jdesktop.beansbinding.BeanProperty.create("enabled")); bindingGroup.addBinding(binding); buttonGroup1.add(listRadio); listRadio.setSelected(true); - listRadio.setText(org.openide.util.NbBundle.getMessage(UIExporterCSVPanel.class, "UIExporterCSVPanel.listRadio.text")); // NOI18N + listRadio.setText(org.openide.util.NbBundle + .getMessage(UIExporterCSVPanel.class, "UIExporterCSVPanel.listRadio.text")); // NOI18N buttonGroup1.add(matrixRadio); - matrixRadio.setText(org.openide.util.NbBundle.getMessage(UIExporterCSVPanel.class, "UIExporterCSVPanel.matrixRadio.text")); // NOI18N + matrixRadio.setText(org.openide.util.NbBundle + .getMessage(UIExporterCSVPanel.class, "UIExporterCSVPanel.matrixRadio.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(listRadio) - .addGap(18, 18, 18) - .addComponent(matrixRadio)) - .addComponent(zeroEdgeCheckbox) - .addGroup(layout.createSequentialGroup() - .addComponent(labelExport) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(edgeWeightCheckbox) - .addComponent(nodeIdCheckbox)))) - .addContainerGap(127, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(listRadio) + .addGap(18, 18, 18) + .addComponent(matrixRadio)) + .addComponent(zeroEdgeCheckbox) + .addGroup(layout.createSequentialGroup() + .addComponent(labelExport) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(edgeWeightCheckbox) + .addComponent(nodeIdCheckbox)))) + .addContainerGap(127, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(listRadio) - .addComponent(matrixRadio)) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(labelExport) - .addComponent(nodeIdCheckbox)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(edgeWeightCheckbox) - .addGap(18, 18, 18) - .addComponent(zeroEdgeCheckbox) - .addContainerGap(45, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(listRadio) + .addComponent(matrixRadio)) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelExport) + .addComponent(nodeIdCheckbox)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(edgeWeightCheckbox) + .addGap(18, 18, 18) + .addComponent(zeroEdgeCheckbox) + .addContainerGap(45, Short.MAX_VALUE)) ); bindingGroup.bind(); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.ButtonGroup buttonGroup1; - private javax.swing.JCheckBox edgeWeightCheckbox; - private javax.swing.JLabel labelExport; - private javax.swing.JRadioButton listRadio; - private javax.swing.JRadioButton matrixRadio; - private javax.swing.JCheckBox nodeIdCheckbox; - private javax.swing.JCheckBox zeroEdgeCheckbox; - private org.jdesktop.beansbinding.BindingGroup bindingGroup; - // End of variables declaration//GEN-END:variables } diff --git a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterDL.java b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterDL.java index 3fbae1de72..8a16804a1b 100644 --- a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterDL.java +++ b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterDL.java @@ -39,10 +39,11 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.exporter.plugin; -import org.gephi.io.exporter.plugin.ExporterDL; import javax.swing.JPanel; +import org.gephi.io.exporter.plugin.ExporterDL; import org.gephi.io.exporter.spi.Exporter; import org.gephi.io.exporter.spi.ExporterUI; import org.openide.util.NbBundle; @@ -51,9 +52,9 @@ Development and Distribution License("CDDL") (collectively, the @ServiceProvider(service = ExporterUI.class) public class UIExporterDL implements ExporterUI { + private final ExporterDLSettings settings = new ExporterDLSettings(); private UIExporterDLPanel panel; private ExporterDL exporter; - private ExporterDLSettings settings = new ExporterDLSettings(); @Override public JPanel getPanel() { @@ -65,14 +66,16 @@ public JPanel getPanel() { public void setup(Exporter exporter) { this.exporter = (ExporterDL) exporter; settings.load(this.exporter); - panel.setup(this.exporter); + if (panel != null) { + panel.setup(this.exporter); + } } @Override public void unsetup(boolean update) { if (update) { - panel.unsetup(exporter); - settings.save(exporter); + panel.unsetup(exporter); + settings.save(exporter); } panel = null; @@ -89,23 +92,25 @@ public String getDisplayName() { return NbBundle.getMessage(UIExporterDL.class, "UIExporterDL.name"); } -private static class ExporterDLSettings -{ - private boolean useListFormat = true; - private boolean useMatrixFormat = false; - private boolean makeSymmetricMatrix = false; - private void load(ExporterDL exporterDL) - { - exporterDL.setUseListFormat(useListFormat); - exporterDL.setUseMatrixFormat(useMatrixFormat); - exporterDL.setMakeSymmetricMatrix(makeSymmetricMatrix); - } - - private void save(ExporterDL exporterDL) - { - useListFormat = exporterDL.isUseListFormat(); - useMatrixFormat = exporterDL.isUseMatrixFormat(); - makeSymmetricMatrix = exporterDL.isMakeSymmetricMatrix(); - } -} + private static class ExporterDLSettings extends AbstractExporterSettings { + + // Preference names + private final static String USE_LIST_FORMAT = "DL_useListFormat"; + private final static String USE_MATRIX_FORMAT = "DL_useMatrixFormat"; + private final static String MAKE_SYMMETRIC_MATRIX = "DL_makeSymmetricMatrix"; + // Default + private final static ExporterDL DEFAULT = new ExporterDL(); + + private void load(ExporterDL exporterDL) { + exporterDL.setUseListFormat(get(USE_LIST_FORMAT, DEFAULT.isUseListFormat())); + exporterDL.setUseMatrixFormat(get(USE_MATRIX_FORMAT, DEFAULT.isUseMatrixFormat())); + exporterDL.setMakeSymmetricMatrix(get(MAKE_SYMMETRIC_MATRIX, DEFAULT.isMakeSymmetricMatrix())); + } + + private void save(ExporterDL exporterDL) { + put(USE_LIST_FORMAT, exporterDL.isUseListFormat()); + put(USE_MATRIX_FORMAT, exporterDL.isUseMatrixFormat()); + put(MAKE_SYMMETRIC_MATRIX, exporterDL.isMakeSymmetricMatrix()); + } + } } \ No newline at end of file diff --git a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterDLPanel.java b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterDLPanel.java index 2b98bdc81b..a15a1de13d 100644 --- a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterDLPanel.java +++ b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterDLPanel.java @@ -39,35 +39,44 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.exporter.plugin; import org.gephi.io.exporter.plugin.ExporterDL; public class UIExporterDLPanel extends javax.swing.JPanel { - - /** Creates new customizer UIExporterDLPanel */ + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JRadioButton listRadioButton; + private javax.swing.JRadioButton matrixRadioButton; + private javax.swing.JCheckBox symmetricCheckBox; + // End of variables declaration//GEN-END:variables + + /** + * Creates new customizer UIExporterDLPanel + */ public UIExporterDLPanel() { initComponents(); } - - void setup(ExporterDL exporter) - { - // normalizeCheckBox.setSelected(exporter.isNormalize()); + + void setup(ExporterDL exporter) { + // normalizeCheckBox.setSelected(exporter.isNormalize()); matrixRadioButton.setSelected(exporter.isUseMatrixFormat()); listRadioButton.setSelected(exporter.isUseListFormat()); symmetricCheckBox.setSelected(exporter.isMakeSymmetricMatrix()); symmetricCheckBox.setEnabled(matrixRadioButton.isSelected()); } - - void unsetup(ExporterDL exporter) - { - // exporter.setNormalize(normalizeCheckBox.isSelected()); + + void unsetup(ExporterDL exporter) { + // exporter.setNormalize(normalizeCheckBox.isSelected()); exporter.setUseMatrixFormat(matrixRadioButton.isSelected()); exporter.setUseListFormat(listRadioButton.isSelected()); exporter.setMakeSymmetricMatrix(symmetricCheckBox.isSelected()); } - /** This method is called from within the constructor to + + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the FormEditor. @@ -81,6 +90,7 @@ private void initComponents() { matrixRadioButton.setText("Matrix"); matrixRadioButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { matrixRadioButtonActionPerformed(evt); } @@ -88,6 +98,7 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { listRadioButton.setText("List"); listRadioButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { listRadioButtonActionPerformed(evt); } @@ -99,43 +110,40 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(listRadioButton, javax.swing.GroupLayout.PREFERRED_SIZE, 86, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(symmetricCheckBox) - .addComponent(matrixRadioButton)) - .addContainerGap(99, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(listRadioButton, javax.swing.GroupLayout.PREFERRED_SIZE, 86, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(symmetricCheckBox) + .addComponent(matrixRadioButton)) + .addContainerGap(99, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(listRadioButton) - .addComponent(matrixRadioButton)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(symmetricCheckBox) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(listRadioButton) + .addComponent(matrixRadioButton)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(symmetricCheckBox) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); symmetricCheckBox.getAccessibleContext().setAccessibleName("symmetricCheckBox"); }// //GEN-END:initComponents - private void matrixRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_matrixRadioButtonActionPerformed - listRadioButton.setSelected(!matrixRadioButton.isSelected()); - symmetricCheckBox.setEnabled(matrixRadioButton.isSelected()); + private void matrixRadioButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_matrixRadioButtonActionPerformed + listRadioButton.setSelected(!matrixRadioButton.isSelected()); + symmetricCheckBox.setEnabled(matrixRadioButton.isSelected()); }//GEN-LAST:event_matrixRadioButtonActionPerformed - private void listRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_listRadioButtonActionPerformed - matrixRadioButton.setSelected(!listRadioButton.isSelected()); - symmetricCheckBox.setEnabled(matrixRadioButton.isSelected()); + private void listRadioButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_listRadioButtonActionPerformed + matrixRadioButton.setSelected(!listRadioButton.isSelected()); + symmetricCheckBox.setEnabled(matrixRadioButton.isSelected()); }//GEN-LAST:event_listRadioButtonActionPerformed - - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JRadioButton listRadioButton; - private javax.swing.JRadioButton matrixRadioButton; - private javax.swing.JCheckBox symmetricCheckBox; - // End of variables declaration//GEN-END:variables } diff --git a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGDF.java b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGDF.java index 25fcac2480..12e9dcef67 100644 --- a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGDF.java +++ b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGDF.java @@ -39,31 +39,33 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.exporter.plugin; import javax.swing.JPanel; -import org.gephi.io.exporter.spi.Exporter; import org.gephi.io.exporter.plugin.ExporterGDF; +import org.gephi.io.exporter.spi.Exporter; import org.gephi.io.exporter.spi.ExporterUI; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = ExporterUI.class) public class UIExporterGDF implements ExporterUI { + private final ExporterGDFSettings settings = new ExporterGDFSettings(); private UIExporterGDFPanel panel; private ExporterGDF exporterGDF; - private ExporterGDFSettings settings = new ExporterGDFSettings(); @Override public void setup(Exporter exporter) { exporterGDF = (ExporterGDF) exporter; settings.load(exporterGDF); - panel.setup(exporterGDF); + if (panel != null) { + panel.setup(exporterGDF); + } } @Override @@ -92,34 +94,37 @@ public String getDisplayName() { return NbBundle.getMessage(UIExporterGDF.class, "UIExporterGDF.name"); } - private static class ExporterGDFSettings { + private static class ExporterGDFSettings extends AbstractExporterSettings { - private boolean normalize = false; - private boolean simpleQuotes = false; - private boolean useQuotes = true; - private boolean exportColors = true; - private boolean exportPosition = true; - private boolean exportAttributes = true; - private boolean exportVisibility = false; + // Preference names + private final static String NORMALIZE = "GDF_normalize"; + private final static String SIMPLE_QUOTES = "GDF_simpleQuotes"; + private final static String USE_QUOTES = "GDF_useQuotes"; + private final static String EXPORT_COLORS = "GDF_exportColors"; + private final static String EXPORT_POSITION = "GDF_exportPosition"; + private final static String EXPORT_ATTRIBUTES = "GDF_exportAttributes"; + private final static String EXPORT_VISIBILITY = "GDF_exportVisibility"; + // Default + private final static ExporterGDF DEFAULT = new ExporterGDF(); private void save(ExporterGDF exporterGDF) { - this.normalize = exporterGDF.isNormalize(); - this.simpleQuotes = exporterGDF.isSimpleQuotes(); - this.useQuotes = exporterGDF.isUseQuotes(); - this.exportColors = exporterGDF.isExportColors(); - this.exportPosition = exporterGDF.isExportPosition(); - this.exportAttributes = exporterGDF.isExportAttributes(); - this.exportVisibility = exporterGDF.isExportVisibility(); + put(NORMALIZE, exporterGDF.isNormalize()); + put(SIMPLE_QUOTES, exporterGDF.isSimpleQuotes()); + put(USE_QUOTES, exporterGDF.isUseQuotes()); + put(EXPORT_COLORS, exporterGDF.isExportColors()); + put(EXPORT_POSITION, exporterGDF.isExportPosition()); + put(EXPORT_ATTRIBUTES, exporterGDF.isExportAttributes()); + put(EXPORT_VISIBILITY, exporterGDF.isExportVisibility()); } private void load(ExporterGDF exporterGDF) { - exporterGDF.setNormalize(normalize); - exporterGDF.setSimpleQuotes(simpleQuotes); - exporterGDF.setUseQuotes(useQuotes); - exporterGDF.setExportColors(exportColors); - exporterGDF.setExportAttributes(exportAttributes); - exporterGDF.setExportPosition(exportPosition); - exporterGDF.setExportVisibility(exportVisibility); + exporterGDF.setNormalize(get(NORMALIZE, DEFAULT.isNormalize())); + exporterGDF.setSimpleQuotes(get(SIMPLE_QUOTES, DEFAULT.isSimpleQuotes())); + exporterGDF.setUseQuotes(get(USE_QUOTES, DEFAULT.isUseQuotes())); + exporterGDF.setExportColors(get(EXPORT_COLORS, DEFAULT.isExportColors())); + exporterGDF.setExportAttributes(get(EXPORT_ATTRIBUTES, DEFAULT.isExportAttributes())); + exporterGDF.setExportPosition(get(EXPORT_POSITION, DEFAULT.isExportPosition())); + exporterGDF.setExportVisibility(get(EXPORT_VISIBILITY, DEFAULT.isExportVisibility())); } } } diff --git a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGDFPanel.java b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGDFPanel.java index b7ff9df442..d17153cae0 100644 --- a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGDFPanel.java +++ b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGDFPanel.java @@ -39,17 +39,34 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.exporter.plugin; import org.gephi.io.exporter.plugin.ExporterGDF; /** - * * @author Mathieu Bastian */ public class UIExporterGDFPanel extends javax.swing.JPanel { - /** Creates new form UIExporterGDFPanel */ + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JCheckBox attributesExportCheckbox; + private javax.swing.JCheckBox colorsExportCheckbox; + private javax.swing.JLabel labelExport; + private javax.swing.JLabel labelNormalize; + private javax.swing.JLabel labelQuotes; + private javax.swing.JLabel labelQuotes1; + private javax.swing.JCheckBox normalizeCheckbox; + private javax.swing.JCheckBox positionExportCheckbox; + private javax.swing.JCheckBox quotesCheckbox; + private javax.swing.JCheckBox simpleQuotesCheckbox; + private javax.swing.JCheckBox visibilityCheckbox; + private org.jdesktop.beansbinding.BindingGroup bindingGroup; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form UIExporterGDFPanel + */ public UIExporterGDFPanel() { initComponents(); } @@ -74,7 +91,8 @@ public void unsetup(ExporterGDF exporterGDF) { exporterGDF.setExportVisibility(visibilityCheckbox.isSelected()); } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -96,16 +114,22 @@ private void initComponents() { labelQuotes1 = new javax.swing.JLabel(); visibilityCheckbox = new javax.swing.JCheckBox(); - labelExport.setText(org.openide.util.NbBundle.getMessage(UIExporterGDFPanel.class, "UIExporterGDFPanel.labelExport.text")); // NOI18N + labelExport.setText(org.openide.util.NbBundle + .getMessage(UIExporterGDFPanel.class, "UIExporterGDFPanel.labelExport.text")); // NOI18N - positionExportCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterGDFPanel.class, "UIExporterGDFPanel.positionExportCheckbox.text")); // NOI18N + positionExportCheckbox.setText(org.openide.util.NbBundle + .getMessage(UIExporterGDFPanel.class, "UIExporterGDFPanel.positionExportCheckbox.text")); // NOI18N - colorsExportCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterGDFPanel.class, "UIExporterGDFPanel.colorsExportCheckbox.text")); // NOI18N + colorsExportCheckbox.setText(org.openide.util.NbBundle + .getMessage(UIExporterGDFPanel.class, "UIExporterGDFPanel.colorsExportCheckbox.text")); // NOI18N - attributesExportCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterGDFPanel.class, "UIExporterGDFPanel.attributesExportCheckbox.text")); // NOI18N + attributesExportCheckbox.setText(org.openide.util.NbBundle + .getMessage(UIExporterGDFPanel.class, "UIExporterGDFPanel.attributesExportCheckbox.text")); // NOI18N - quotesCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterGDFPanel.class, "UIExporterGDFPanel.quotesCheckbox.text")); // NOI18N + quotesCheckbox.setText(org.openide.util.NbBundle + .getMessage(UIExporterGDFPanel.class, "UIExporterGDFPanel.quotesCheckbox.text")); // NOI18N quotesCheckbox.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { quotesCheckboxActionPerformed(evt); } @@ -113,101 +137,98 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { labelQuotes.setFont(new java.awt.Font("Tahoma", 0, 10)); labelQuotes.setForeground(new java.awt.Color(102, 102, 102)); - labelQuotes.setText(org.openide.util.NbBundle.getMessage(UIExporterGDFPanel.class, "UIExporterGDFPanel.labelQuotes.text")); // NOI18N + labelQuotes.setText(org.openide.util.NbBundle + .getMessage(UIExporterGDFPanel.class, "UIExporterGDFPanel.labelQuotes.text")); // NOI18N - normalizeCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterGDFPanel.class, "UIExporterGDFPanel.normalizeCheckbox.text")); // NOI18N + normalizeCheckbox.setText(org.openide.util.NbBundle + .getMessage(UIExporterGDFPanel.class, "UIExporterGDFPanel.normalizeCheckbox.text")); // NOI18N labelNormalize.setFont(new java.awt.Font("Tahoma", 0, 10)); labelNormalize.setForeground(new java.awt.Color(102, 102, 102)); - labelNormalize.setText(org.openide.util.NbBundle.getMessage(UIExporterGDFPanel.class, "UIExporterGDFPanel.labelNormalize.text")); // NOI18N + labelNormalize.setText(org.openide.util.NbBundle + .getMessage(UIExporterGDFPanel.class, "UIExporterGDFPanel.labelNormalize.text")); // NOI18N - simpleQuotesCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterGDFPanel.class, "UIExporterGDFPanel.simpleQuotesCheckbox.text")); // NOI18N + simpleQuotesCheckbox.setText(org.openide.util.NbBundle + .getMessage(UIExporterGDFPanel.class, "UIExporterGDFPanel.simpleQuotesCheckbox.text")); // NOI18N - org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, quotesCheckbox, org.jdesktop.beansbinding.ELProperty.create("${selected}"), simpleQuotesCheckbox, org.jdesktop.beansbinding.BeanProperty.create("enabled")); + org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings + .createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, quotesCheckbox, + org.jdesktop.beansbinding.ELProperty.create("${selected}"), simpleQuotesCheckbox, + org.jdesktop.beansbinding.BeanProperty.create("enabled")); bindingGroup.addBinding(binding); labelQuotes1.setFont(new java.awt.Font("Tahoma", 0, 10)); labelQuotes1.setForeground(new java.awt.Color(102, 102, 102)); - labelQuotes1.setText(org.openide.util.NbBundle.getMessage(UIExporterGDFPanel.class, "UIExporterGDFPanel.labelQuotes1.text")); // NOI18N + labelQuotes1.setText(org.openide.util.NbBundle + .getMessage(UIExporterGDFPanel.class, "UIExporterGDFPanel.labelQuotes1.text")); // NOI18N - visibilityCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterGDFPanel.class, "UIExporterGDFPanel.visibilityCheckbox.text")); // NOI18N + visibilityCheckbox.setText(org.openide.util.NbBundle + .getMessage(UIExporterGDFPanel.class, "UIExporterGDFPanel.visibilityCheckbox.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGap(21, 21, 21) - .addComponent(simpleQuotesCheckbox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(labelQuotes1)) - .addGroup(layout.createSequentialGroup() + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(21, 21, 21) + .addComponent(simpleQuotesCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(labelQuotes1)) + .addGroup(layout.createSequentialGroup() + .addComponent(labelExport) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(positionExportCheckbox) + .addComponent(colorsExportCheckbox) + .addComponent(attributesExportCheckbox) + .addComponent(visibilityCheckbox))) + .addGroup(layout.createSequentialGroup() + .addComponent(normalizeCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(labelNormalize)) + .addGroup(layout.createSequentialGroup() + .addComponent(quotesCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(labelQuotes))) + .addContainerGap(26, Short.MAX_VALUE)) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(labelExport) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(positionExportCheckbox) - .addComponent(colorsExportCheckbox) - .addComponent(attributesExportCheckbox) - .addComponent(visibilityCheckbox))) - .addGroup(layout.createSequentialGroup() + .addComponent(positionExportCheckbox)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(colorsExportCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(attributesExportCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(visibilityCheckbox) + .addGap(6, 6, 6) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(normalizeCheckbox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(labelNormalize)) - .addGroup(layout.createSequentialGroup() + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(quotesCheckbox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(labelQuotes))) - .addContainerGap(26, Short.MAX_VALUE)) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(labelExport) - .addComponent(positionExportCheckbox)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(colorsExportCheckbox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(attributesExportCheckbox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(visibilityCheckbox) - .addGap(6, 6, 6) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(normalizeCheckbox) - .addComponent(labelNormalize)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(quotesCheckbox) - .addComponent(labelQuotes)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(simpleQuotesCheckbox) - .addComponent(labelQuotes1)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addComponent(labelQuotes)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(simpleQuotesCheckbox) + .addComponent(labelQuotes1)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); bindingGroup.bind(); }// //GEN-END:initComponents - private void quotesCheckboxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_quotesCheckboxActionPerformed + private void quotesCheckboxActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_quotesCheckboxActionPerformed // TODO add your handling code here: }//GEN-LAST:event_quotesCheckboxActionPerformed - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JCheckBox attributesExportCheckbox; - private javax.swing.JCheckBox colorsExportCheckbox; - private javax.swing.JLabel labelExport; - private javax.swing.JLabel labelNormalize; - private javax.swing.JLabel labelQuotes; - private javax.swing.JLabel labelQuotes1; - private javax.swing.JCheckBox normalizeCheckbox; - private javax.swing.JCheckBox positionExportCheckbox; - private javax.swing.JCheckBox quotesCheckbox; - private javax.swing.JCheckBox simpleQuotesCheckbox; - private javax.swing.JCheckBox visibilityCheckbox; - private org.jdesktop.beansbinding.BindingGroup bindingGroup; - // End of variables declaration//GEN-END:variables + } diff --git a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGEXF.java b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGEXF.java index 5aa8c1222c..0655b58c45 100644 --- a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGEXF.java +++ b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGEXF.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.exporter.plugin; import javax.swing.JPanel; @@ -49,21 +50,22 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = ExporterUI.class) public class UIExporterGEXF implements ExporterUI { + private final ExporterGEXFSettings settings = new ExporterGEXFSettings(); private UIExporterGEXFPanel panel; private ExporterGEXF exporterGEXF; - private ExporterGEXFSettings settings = new ExporterGEXFSettings(); @Override public void setup(Exporter exporter) { exporterGEXF = (ExporterGEXF) exporter; settings.load(exporterGEXF); - panel.setup(exporterGEXF); + if (panel != null) { + panel.setup(exporterGEXF); + } } @Override @@ -92,34 +94,40 @@ public String getDisplayName() { return NbBundle.getMessage(UIExporterGEXF.class, "UIExporterGEXF.name"); } - private static class ExporterGEXFSettings { + private static class ExporterGEXFSettings extends AbstractExporterSettings { - private boolean normalize = false; - private boolean exportColors = true; - private boolean exportPosition = true; - private boolean exportSize = true; - private boolean exportAttributes = true; - private boolean exportDynamics = true; - private boolean exportHierarchy = false; + // Preference names + private final static String NORMALIZE = "GEXF_normalize"; + private final static String EXPORT_COLORS = "GEXF_exportColors"; + private final static String EXPORT_POSITION = "GEXF_exportPosition"; + private final static String EXPORT_ATTRIBUTES = "GEXF_exportAttributes"; + private final static String EXPORT_SIZE = "GEXF_exportSize"; + private final static String EXPORT_DYNAMICS = "GEXF_exportDynamics"; + private final static String EXPORT_META = "GEXF_exportMeta"; + private final static String INCLUDE_NULL_ATT_VALUES = "GEXF_includeNullAttValues"; + // Default + private final static ExporterGEXF DEFAULT = new ExporterGEXF(); private void save(ExporterGEXF exporterGEXF) { - this.normalize = exporterGEXF.isNormalize(); - this.exportColors = exporterGEXF.isExportColors(); - this.exportPosition = exporterGEXF.isExportPosition(); - this.exportSize = exporterGEXF.isExportSize(); - this.exportAttributes = exporterGEXF.isExportAttributes(); - this.exportDynamics = exporterGEXF.isExportDynamic(); - this.exportHierarchy = exporterGEXF.isExportHierarchy(); + put(NORMALIZE, exporterGEXF.isNormalize()); + put(EXPORT_COLORS, exporterGEXF.isExportColors()); + put(EXPORT_POSITION, exporterGEXF.isExportPosition()); + put(EXPORT_SIZE, exporterGEXF.isExportSize()); + put(EXPORT_ATTRIBUTES, exporterGEXF.isExportAttributes()); + put(EXPORT_DYNAMICS, exporterGEXF.isExportDynamic()); + put(EXPORT_META, exporterGEXF.isExportMeta()); + put(INCLUDE_NULL_ATT_VALUES, exporterGEXF.isIncludeNullAttValues()); } private void load(ExporterGEXF exporterGEXF) { - exporterGEXF.setNormalize(normalize); - exporterGEXF.setExportColors(exportColors); - exporterGEXF.setExportAttributes(exportAttributes); - exporterGEXF.setExportPosition(exportPosition); - exporterGEXF.setExportSize(exportSize); - exporterGEXF.setExportDynamic(exportDynamics); - exporterGEXF.setExportHierarchy(exportHierarchy); + exporterGEXF.setNormalize(get(NORMALIZE, DEFAULT.isNormalize())); + exporterGEXF.setExportColors(get(EXPORT_COLORS, DEFAULT.isExportColors())); + exporterGEXF.setExportAttributes(get(EXPORT_ATTRIBUTES, DEFAULT.isExportAttributes())); + exporterGEXF.setExportPosition(get(EXPORT_POSITION, DEFAULT.isExportPosition())); + exporterGEXF.setExportSize(get(EXPORT_SIZE, DEFAULT.isExportSize())); + exporterGEXF.setExportDynamic(get(EXPORT_DYNAMICS, DEFAULT.isExportDynamic())); + exporterGEXF.setExportMeta(get(EXPORT_META, DEFAULT.isExportMeta())); + exporterGEXF.setIncludeNullAttValues(get(INCLUDE_NULL_ATT_VALUES, DEFAULT.isIncludeNullAttValues())); } } } diff --git a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGEXFPanel.form b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGEXFPanel.form index 3bed505f72..d73c4e1dce 100644 --- a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGEXFPanel.form +++ b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGEXFPanel.form @@ -16,27 +16,33 @@ - + - - - - - - - - - - - + + + + + + + + + + + + + + + + + - + @@ -61,7 +67,9 @@ - + + + @@ -129,5 +137,12 @@ + + + + + + + diff --git a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGEXFPanel.java b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGEXFPanel.java index fb6246fc0d..2acc344d96 100644 --- a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGEXFPanel.java +++ b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGEXFPanel.java @@ -39,16 +39,28 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.exporter.plugin; import org.gephi.io.exporter.plugin.ExporterGEXF; /** - * * @author Mathieu Bastian */ public class UIExporterGEXFPanel extends javax.swing.JPanel { + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JCheckBox attributesExportCheckbox; + private javax.swing.JCheckBox colorsExportCheckbox; + private javax.swing.JCheckBox dynamicExportCheckbox; + private javax.swing.JCheckBox includeAttValuesNullCheckbox; + private javax.swing.JLabel labelExport; + private javax.swing.JLabel labelNormalize; + private javax.swing.JCheckBox normalizeCheckbox; + private javax.swing.JCheckBox positionExportCheckbox; + private javax.swing.JCheckBox sizeExportCheckbox; + // End of variables declaration//GEN-END:variables + /** * Creates new form UIExporterGEXFPanel */ @@ -63,6 +75,7 @@ public void setup(ExporterGEXF exporterGEXF) { attributesExportCheckbox.setSelected(exporterGEXF.isExportAttributes()); normalizeCheckbox.setSelected(exporterGEXF.isNormalize()); dynamicExportCheckbox.setSelected(exporterGEXF.isExportDynamic()); + includeAttValuesNullCheckbox.setSelected(exporterGEXF.isIncludeNullAttValues()); } public void unsetup(ExporterGEXF exporterGEXF) { @@ -72,6 +85,7 @@ public void unsetup(ExporterGEXF exporterGEXF) { exporterGEXF.setExportPosition(positionExportCheckbox.isSelected()); exporterGEXF.setNormalize(normalizeCheckbox.isSelected()); exporterGEXF.setExportDynamic(dynamicExportCheckbox.isSelected()); + exporterGEXF.setIncludeNullAttValues(includeAttValuesNullCheckbox.isSelected()); } /** @@ -91,6 +105,7 @@ private void initComponents() { labelNormalize = new javax.swing.JLabel(); normalizeCheckbox = new javax.swing.JCheckBox(); dynamicExportCheckbox = new javax.swing.JCheckBox(); + includeAttValuesNullCheckbox = new javax.swing.JCheckBox(); labelExport.setText(org.openide.util.NbBundle.getMessage(UIExporterGEXFPanel.class, "UIExporterGEXFPanel.labelExport.text")); // NOI18N @@ -110,6 +125,8 @@ private void initComponents() { dynamicExportCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterGEXFPanel.class, "UIExporterGEXFPanel.dynamicExportCheckbox.text")); // NOI18N + includeAttValuesNullCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterGEXFPanel.class, "UIExporterGEXFPanel.includeAttValuesNullCheckbox.text")); // NOI18N + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( @@ -117,19 +134,23 @@ private void initComponents() { .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(labelExport) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(attributesExportCheckbox) - .addComponent(sizeExportCheckbox) - .addComponent(colorsExportCheckbox) - .addComponent(positionExportCheckbox) - .addComponent(dynamicExportCheckbox))) .addGroup(layout.createSequentialGroup() .addComponent(normalizeCheckbox) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(labelNormalize, javax.swing.GroupLayout.DEFAULT_SIZE, 225, Short.MAX_VALUE))) + .addComponent(labelNormalize, javax.swing.GroupLayout.DEFAULT_SIZE, 225, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(labelExport) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(attributesExportCheckbox) + .addComponent(sizeExportCheckbox) + .addComponent(colorsExportCheckbox) + .addComponent(positionExportCheckbox) + .addComponent(dynamicExportCheckbox))) + .addComponent(includeAttValuesNullCheckbox)) + .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); layout.setVerticalGroup( @@ -151,17 +172,9 @@ private void initComponents() { .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(normalizeCheckbox) .addComponent(labelNormalize)) - .addContainerGap(78, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(includeAttValuesNullCheckbox) + .addContainerGap(51, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JCheckBox attributesExportCheckbox; - private javax.swing.JCheckBox colorsExportCheckbox; - private javax.swing.JCheckBox dynamicExportCheckbox; - private javax.swing.JLabel labelExport; - private javax.swing.JLabel labelNormalize; - private javax.swing.JCheckBox normalizeCheckbox; - private javax.swing.JCheckBox positionExportCheckbox; - private javax.swing.JCheckBox sizeExportCheckbox; - // End of variables declaration//GEN-END:variables } diff --git a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGML.java b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGML.java index d28f1cdfeb..e683ec00d7 100644 --- a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGML.java +++ b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGML.java @@ -39,18 +39,18 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.exporter.plugin; import javax.swing.JPanel; import org.gephi.io.exporter.plugin.ExporterGML; import org.gephi.io.exporter.spi.Exporter; import org.gephi.io.exporter.spi.ExporterUI; -import org.netbeans.validation.api.ui.ValidationPanel; +import org.netbeans.validation.api.ui.swing.ValidationPanel; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author megaterik */ @ServiceProvider(service = ExporterUI.class) @@ -72,7 +72,9 @@ public JPanel getPanel() { public void setup(Exporter exporter) { this.exporter = (ExporterGML) exporter; settings.load(this.exporter); - panel.setup(this.exporter); + if (panel != null) { + panel.setup(this.exporter); + } } @Override @@ -95,37 +97,41 @@ public String getDisplayName() { return NbBundle.getMessage(UIExporterGEXF.class, "UIExporterGML.name"); } - private static class ExporterGMLSettings { + private static class ExporterGMLSettings extends AbstractExporterSettings { - private boolean exportLabel = true; - private boolean exportCoordinates = true; - private boolean exportNodeSize = true; - private boolean exportEdgeSize = true; - private boolean exportColor = true; - private boolean exportNotRecognizedElements = true; - private boolean normalize = false; - private int spaces = 2; + // Preference names + private final static String EXPORT_LABEL = "GML_exportLabel"; + private final static String EXPORT_COORDINATES = "GML_exportCoordinates"; + private final static String EXPORT_NODE_SIZE = "GML_exportNodeSize"; + private final static String EXPORT_EDGE_SIZE = "GML_exportEdgeSize"; + private final static String EXPORT_COLOR = "GML_exportColor"; + private final static String EXPORT_UNKNOWNS = "GML_exportNotRecognizedElements"; + private final static String NORMALIZE = "GML_normalize"; + private final static String SPACES = "GML_spaces"; + // Default + private final static ExporterGML DEFAULT = new ExporterGML(); private void load(ExporterGML exporter) { - exporter.setExportColor(exportColor); - exporter.setExportCoordinates(exportCoordinates); - exporter.setExportEdgeSize(exportEdgeSize); - exporter.setExportLabel(exportLabel); - exporter.setExportNodeSize(exportNodeSize); - exporter.setExportNotRecognizedElements(exportNotRecognizedElements); - exporter.setNormalize(normalize); - exporter.setSpaces(spaces); + exporter.setExportColor(get(EXPORT_COLOR, DEFAULT.isExportColor())); + exporter.setExportCoordinates(get(EXPORT_COORDINATES, DEFAULT.isExportCoordinates())); + exporter.setExportEdgeSize(get(EXPORT_EDGE_SIZE, DEFAULT.isExportEdgeSize())); + exporter.setExportLabel(get(EXPORT_LABEL, DEFAULT.isExportLabel())); + exporter.setExportNodeSize(get(EXPORT_NODE_SIZE, DEFAULT.isExportNodeSize())); + exporter.setExportNotRecognizedElements(get(EXPORT_UNKNOWNS, + DEFAULT.isExportNotRecognizedElements())); + exporter.setNormalize(get(NORMALIZE, DEFAULT.isNormalize())); + exporter.setSpaces(get(SPACES, DEFAULT.getSpaces())); } private void save(ExporterGML exporter) { - exportColor = exporter.isExportColor(); - exportCoordinates = exporter.isExportCoordinates(); - exportEdgeSize = exporter.isExportEdgeSize(); - exportLabel = exporter.isExportLabel(); - exportNodeSize = exporter.isExportNodeSize(); - exportNotRecognizedElements = exporter.isExportNotRecognizedElements(); - normalize = exporter.isNormalize(); - spaces = exporter.getSpaces(); + put(EXPORT_COLOR, exporter.isExportColor()); + put(EXPORT_COORDINATES, exporter.isExportCoordinates()); + put(EXPORT_EDGE_SIZE, exporter.isExportEdgeSize()); + put(EXPORT_LABEL, exporter.isExportLabel()); + put(EXPORT_NODE_SIZE, exporter.isExportNodeSize()); + put(EXPORT_UNKNOWNS, exporter.isExportNotRecognizedElements()); + put(NORMALIZE, exporter.isNormalize()); + put(SPACES, exporter.getSpaces()); } } } \ No newline at end of file diff --git a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGMLPanel.java b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGMLPanel.java index 0f36d6baf7..2f64ba1ea1 100644 --- a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGMLPanel.java +++ b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGMLPanel.java @@ -39,25 +39,51 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.exporter.plugin; import org.gephi.io.exporter.plugin.ExporterGML; import org.gephi.lib.validation.ValidationClient; -import org.netbeans.validation.api.builtin.Validators; +import org.netbeans.validation.api.builtin.stringvalidation.StringValidators; import org.netbeans.validation.api.ui.ValidationGroup; -import org.netbeans.validation.api.ui.ValidationPanel; +import org.netbeans.validation.api.ui.swing.ValidationPanel; /** - * * @author megaterik */ public class UIExporterGMLPanel extends javax.swing.JPanel implements ValidationClient { - /** Creates new customizer UIExporterGMLPanel */ + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JCheckBox exportColorsCheckBox; + private javax.swing.JCheckBox exportEdgeWeightCheckBox; + private javax.swing.JLabel exportLabel; + private javax.swing.JCheckBox exportLabelCheckBox; + private javax.swing.JCheckBox exportNotRecognizedCheckBox; + private javax.swing.JCheckBox exportPositionCheckBox; + private javax.swing.JCheckBox exportSizeCheckBox; + private javax.swing.JCheckBox normalizeCheckBox; + private javax.swing.JLabel normalizeLabel; + private javax.swing.JLabel spacesLabel; + private javax.swing.JTextField spacesTextField; + // End of variables declaration//GEN-END:variables + + /** + * Creates new customizer UIExporterGMLPanel + */ public UIExporterGMLPanel() { initComponents(); } + public static ValidationPanel createValidationPanel(UIExporterGMLPanel innerPanel) { + ValidationPanel validationPanel = new ValidationPanel(); + validationPanel.setInnerComponent(innerPanel); + + ValidationGroup group = validationPanel.getValidationGroup(); + innerPanel.validate(group); + + return validationPanel; + } + void setup(ExporterGML exporter) { //get exportColorsCheckBox.setSelected(exporter.isExportColor()); @@ -83,7 +109,8 @@ void unsetup(ExporterGML exporter) { exporter.setSpaces(Integer.parseInt(spacesTextField.getText())); } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the FormEditor. @@ -103,81 +130,96 @@ private void initComponents() { spacesLabel = new javax.swing.JLabel(); spacesTextField = new javax.swing.JTextField(); - exportLabel.setText(org.openide.util.NbBundle.getMessage(UIExporterGMLPanel.class, "UIExporterGML.exportLabel.text")); // NOI18N + exportLabel.setText( + org.openide.util.NbBundle.getMessage(UIExporterGMLPanel.class, "UIExporterGML.exportLabel.text")); // NOI18N - exportPositionCheckBox.setText(org.openide.util.NbBundle.getMessage(UIExporterGMLPanel.class, "UIExporterGML.positionLabel.text")); // NOI18N + exportPositionCheckBox.setText(org.openide.util.NbBundle + .getMessage(UIExporterGMLPanel.class, "UIExporterGML.positionLabel.text")); // NOI18N - exportColorsCheckBox.setText(org.openide.util.NbBundle.getMessage(UIExporterGMLPanel.class, "UIExporterGML.colorsLabel.text")); // NOI18N + exportColorsCheckBox.setText( + org.openide.util.NbBundle.getMessage(UIExporterGMLPanel.class, "UIExporterGML.colorsLabel.text")); // NOI18N - exportSizeCheckBox.setText(org.openide.util.NbBundle.getMessage(UIExporterGMLPanel.class, "UIExporterGML.sizeLabel.text")); // NOI18N + exportSizeCheckBox.setText( + org.openide.util.NbBundle.getMessage(UIExporterGMLPanel.class, "UIExporterGML.sizeLabel.text")); // NOI18N - exportEdgeWeightCheckBox.setText(org.openide.util.NbBundle.getMessage(UIExporterGMLPanel.class, "UIExporterGML.edgeWeightLabel.text")); // NOI18N + exportEdgeWeightCheckBox.setText(org.openide.util.NbBundle + .getMessage(UIExporterGMLPanel.class, "UIExporterGML.edgeWeightLabel.text")); // NOI18N - exportNotRecognizedCheckBox.setText(org.openide.util.NbBundle.getMessage(UIExporterGMLPanel.class, "UIExporterGML.attributes.text")); // NOI18N + exportNotRecognizedCheckBox.setText( + org.openide.util.NbBundle.getMessage(UIExporterGMLPanel.class, "UIExporterGML.attributes.text")); // NOI18N exportNotRecognizedCheckBox.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { exportNotRecognizedCheckBoxActionPerformed(evt); } }); - normalizeCheckBox.setText(org.openide.util.NbBundle.getMessage(UIExporterGMLPanel.class, "UIExporterGML.normalize.text")); // NOI18N - normalizeCheckBox.setLabel(org.openide.util.NbBundle.getMessage(UIExporterGMLPanel.class, "UIExporterGML.normalize.text")); // NOI18N + normalizeCheckBox.setText( + org.openide.util.NbBundle.getMessage(UIExporterGMLPanel.class, "UIExporterGML.normalize.text")); // NOI18N + normalizeCheckBox.setLabel( + org.openide.util.NbBundle.getMessage(UIExporterGMLPanel.class, "UIExporterGML.normalize.text")); // NOI18N normalizeLabel.setFont(new java.awt.Font("Ubuntu", 0, 10)); - normalizeLabel.setText(org.openide.util.NbBundle.getMessage(UIExporterGMLPanel.class, "UIExporterGML.normalizeHintLabel.text")); // NOI18N + normalizeLabel.setText(org.openide.util.NbBundle + .getMessage(UIExporterGMLPanel.class, "UIExporterGML.normalizeHintLabel.text")); // NOI18N - exportLabelCheckBox.setText(org.openide.util.NbBundle.getMessage(UIExporterGMLPanel.class, "UIExporterGML.labelLabel.text")); // NOI18N + exportLabelCheckBox.setText( + org.openide.util.NbBundle.getMessage(UIExporterGMLPanel.class, "UIExporterGML.labelLabel.text")); // NOI18N - spacesLabel.setText(org.openide.util.NbBundle.getMessage(UIExporterGMLPanel.class, "UIExporterGML.indentationLabel.text")); // NOI18N + spacesLabel.setText(org.openide.util.NbBundle + .getMessage(UIExporterGMLPanel.class, "UIExporterGML.indentationLabel.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(exportLabel) - .addComponent(normalizeCheckBox) - .addComponent(spacesLabel)) - .addGap(23, 23, 23) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(normalizeLabel) - .addComponent(exportEdgeWeightCheckBox) - .addComponent(exportSizeCheckBox) - .addComponent(exportColorsCheckBox) - .addComponent(exportPositionCheckBox) - .addComponent(exportLabelCheckBox) - .addComponent(exportNotRecognizedCheckBox) - .addComponent(spacesTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 60, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(90, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(exportLabel) + .addComponent(normalizeCheckBox) + .addComponent(spacesLabel)) + .addGap(23, 23, 23) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(normalizeLabel) + .addComponent(exportEdgeWeightCheckBox) + .addComponent(exportSizeCheckBox) + .addComponent(exportColorsCheckBox) + .addComponent(exportPositionCheckBox) + .addComponent(exportLabelCheckBox) + .addComponent(exportNotRecognizedCheckBox) + .addComponent(spacesTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 60, + javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(90, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(exportLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(exportPositionCheckBox)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(exportColorsCheckBox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(exportSizeCheckBox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(exportEdgeWeightCheckBox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(exportLabelCheckBox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(exportNotRecognizedCheckBox) - .addGap(3, 3, 3) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(normalizeCheckBox) - .addComponent(normalizeLabel)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(spacesLabel) - .addComponent(spacesTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(21, 21, 21)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(exportLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 18, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(exportPositionCheckBox)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(exportColorsCheckBox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(exportSizeCheckBox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(exportEdgeWeightCheckBox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(exportLabelCheckBox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(exportNotRecognizedCheckBox) + .addGap(3, 3, 3) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(normalizeCheckBox) + .addComponent(normalizeLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(spacesLabel) + .addComponent(spacesTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(21, 21, 21)) ); exportNotRecognizedCheckBox.getAccessibleContext().setAccessibleName("\n"); // NOI18N @@ -185,36 +227,14 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { spacesTextField.getAccessibleContext().setAccessibleName("Indentation"); }// //GEN-END:initComponents -private void exportNotRecognizedCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exportNotRecognizedCheckBoxActionPerformed + private void exportNotRecognizedCheckBoxActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exportNotRecognizedCheckBoxActionPerformed // TODO add your handling code here: -}//GEN-LAST:event_exportNotRecognizedCheckBoxActionPerformed - - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JCheckBox exportColorsCheckBox; - private javax.swing.JCheckBox exportEdgeWeightCheckBox; - private javax.swing.JLabel exportLabel; - private javax.swing.JCheckBox exportLabelCheckBox; - private javax.swing.JCheckBox exportNotRecognizedCheckBox; - private javax.swing.JCheckBox exportPositionCheckBox; - private javax.swing.JCheckBox exportSizeCheckBox; - private javax.swing.JCheckBox normalizeCheckBox; - private javax.swing.JLabel normalizeLabel; - private javax.swing.JLabel spacesLabel; - private javax.swing.JTextField spacesTextField; - // End of variables declaration//GEN-END:variables + }//GEN-LAST:event_exportNotRecognizedCheckBoxActionPerformed @Override public void validate(ValidationGroup group) { - group.add(spacesTextField, Validators.REQUIRE_NON_EMPTY_STRING, Validators.REQUIRE_NON_NEGATIVE_NUMBER, Validators.REQUIRE_VALID_INTEGER); - } - - public static ValidationPanel createValidationPanel(UIExporterGMLPanel innerPanel) { - ValidationPanel validationPanel = new ValidationPanel(); - validationPanel.setInnerComponent(innerPanel); - - ValidationGroup group = validationPanel.getValidationGroup(); - innerPanel.validate(group); - - return validationPanel; + group.add(spacesTextField, StringValidators.REQUIRE_NON_EMPTY_STRING, StringValidators.REQUIRE_NON_NEGATIVE_NUMBER, + StringValidators.REQUIRE_VALID_INTEGER); } } diff --git a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGraphML.java b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGraphML.java index b49d5ccf4c..b7d2b85946 100644 --- a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGraphML.java +++ b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGraphML.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.exporter.plugin; import javax.swing.JPanel; @@ -49,21 +50,22 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = ExporterUI.class) public class UIExporterGraphML implements ExporterUI { + private final ExporterGraphMLSettings settings = new ExporterGraphMLSettings(); private UIExporterGraphMLPanel panel; private ExporterGraphML exporterGraphML; - private ExporterGraphMLSettings settings = new ExporterGraphMLSettings(); @Override public void setup(Exporter exporter) { exporterGraphML = (ExporterGraphML) exporter; settings.load(exporterGraphML); - panel.setup(exporterGraphML); + if (panel != null) { + panel.setup(exporterGraphML); + } } @Override @@ -92,29 +94,31 @@ public String getDisplayName() { return NbBundle.getMessage(UIExporterGraphML.class, "UIExporterGraphML.name"); } - private static class ExporterGraphMLSettings { + private static class ExporterGraphMLSettings extends AbstractExporterSettings { - private boolean normalize = false; - private boolean exportColors = true; - private boolean exportPosition = true; - private boolean exportSize = true; - private boolean exportAttributes = true; - private boolean exportHierarchy = false; + // Preference names + private final static String NORMALIZE = "GraphML_normalize"; + private final static String EXPORT_COLORS = "GraphML_exportColors"; + private final static String EXPORT_POSITION = "GraphML_exportPosition"; + private final static String EXPORT_ATTRIBUTES = "GraphML_exportAttributes"; + private final static String EXPORT_SIZE = "GraphML_exportSize"; + // Default + private final static ExporterGraphML DEFAULT = new ExporterGraphML(); private void save(ExporterGraphML exporterGraphML) { - this.normalize = exporterGraphML.isNormalize(); - this.exportColors = exporterGraphML.isExportColors(); - this.exportPosition = exporterGraphML.isExportPosition(); - this.exportSize = exporterGraphML.isExportSize(); - this.exportAttributes = exporterGraphML.isExportAttributes(); + put(NORMALIZE, exporterGraphML.isNormalize()); + put(EXPORT_COLORS, exporterGraphML.isExportColors()); + put(EXPORT_POSITION, exporterGraphML.isExportPosition()); + put(EXPORT_SIZE, exporterGraphML.isExportSize()); + put(EXPORT_ATTRIBUTES, exporterGraphML.isExportAttributes()); } private void load(ExporterGraphML exporterGraphML) { - exporterGraphML.setNormalize(normalize); - exporterGraphML.setExportColors(exportColors); - exporterGraphML.setExportAttributes(exportAttributes); - exporterGraphML.setExportPosition(exportPosition); - exporterGraphML.setExportSize(exportSize); + exporterGraphML.setNormalize(get(NORMALIZE, DEFAULT.isNormalize())); + exporterGraphML.setExportColors(get(EXPORT_COLORS, DEFAULT.isExportColors())); + exporterGraphML.setExportAttributes(get(EXPORT_ATTRIBUTES, DEFAULT.isExportAttributes())); + exporterGraphML.setExportPosition(get(EXPORT_POSITION, DEFAULT.isExportPosition())); + exporterGraphML.setExportSize(get(EXPORT_SIZE, DEFAULT.isExportSize())); } } } diff --git a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGraphMLPanel.java b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGraphMLPanel.java index f6d55130cf..79d8c92082 100644 --- a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGraphMLPanel.java +++ b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterGraphMLPanel.java @@ -39,16 +39,26 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.exporter.plugin; import org.gephi.io.exporter.plugin.ExporterGraphML; /** - * * @author Mathieu Bastian */ public class UIExporterGraphMLPanel extends javax.swing.JPanel { + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JCheckBox attributesExportCheckbox; + private javax.swing.JCheckBox colorsExportCheckbox; + private javax.swing.JLabel labelExport; + private javax.swing.JLabel labelNormalize; + private javax.swing.JCheckBox normalizeCheckbox; + private javax.swing.JCheckBox positionExportCheckbox; + private javax.swing.JCheckBox sizeExportCheckbox; + // End of variables declaration//GEN-END:variables + /** * Creates new form UIExporterGEXFPanel */ @@ -89,70 +99,68 @@ private void initComponents() { labelNormalize = new javax.swing.JLabel(); normalizeCheckbox = new javax.swing.JCheckBox(); - labelExport.setText(org.openide.util.NbBundle.getMessage(UIExporterGraphMLPanel.class, "UIExporterGraphMLPanel.labelExport.text")); // NOI18N + labelExport.setText(org.openide.util.NbBundle + .getMessage(UIExporterGraphMLPanel.class, "UIExporterGraphMLPanel.labelExport.text")); // NOI18N - positionExportCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterGraphMLPanel.class, "UIExporterGraphMLPanel.positionExportCheckbox.text")); // NOI18N + positionExportCheckbox.setText(org.openide.util.NbBundle + .getMessage(UIExporterGraphMLPanel.class, "UIExporterGraphMLPanel.positionExportCheckbox.text")); // NOI18N - colorsExportCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterGraphMLPanel.class, "UIExporterGraphMLPanel.colorsExportCheckbox.text")); // NOI18N + colorsExportCheckbox.setText(org.openide.util.NbBundle + .getMessage(UIExporterGraphMLPanel.class, "UIExporterGraphMLPanel.colorsExportCheckbox.text")); // NOI18N - attributesExportCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterGraphMLPanel.class, "UIExporterGraphMLPanel.attributesExportCheckbox.text")); // NOI18N + attributesExportCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterGraphMLPanel.class, + "UIExporterGraphMLPanel.attributesExportCheckbox.text")); // NOI18N - sizeExportCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterGraphMLPanel.class, "UIExporterGraphMLPanel.sizeExportCheckbox.text")); // NOI18N + sizeExportCheckbox.setText(org.openide.util.NbBundle + .getMessage(UIExporterGraphMLPanel.class, "UIExporterGraphMLPanel.sizeExportCheckbox.text")); // NOI18N labelNormalize.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N labelNormalize.setForeground(new java.awt.Color(102, 102, 102)); - labelNormalize.setText(org.openide.util.NbBundle.getMessage(UIExporterGraphMLPanel.class, "UIExporterGraphMLPanel.labelNormalize.text")); // NOI18N + labelNormalize.setText(org.openide.util.NbBundle + .getMessage(UIExporterGraphMLPanel.class, "UIExporterGraphMLPanel.labelNormalize.text")); // NOI18N - normalizeCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterGraphMLPanel.class, "UIExporterGraphMLPanel.normalizeCheckbox.text")); // NOI18N + normalizeCheckbox.setText(org.openide.util.NbBundle + .getMessage(UIExporterGraphMLPanel.class, "UIExporterGraphMLPanel.normalizeCheckbox.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(labelExport) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(attributesExportCheckbox) - .addComponent(sizeExportCheckbox) - .addComponent(colorsExportCheckbox) - .addComponent(positionExportCheckbox))) - .addGroup(layout.createSequentialGroup() - .addComponent(normalizeCheckbox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(labelNormalize))) - .addContainerGap(49, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(labelExport) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(attributesExportCheckbox) + .addComponent(sizeExportCheckbox) + .addComponent(colorsExportCheckbox) + .addComponent(positionExportCheckbox))) + .addGroup(layout.createSequentialGroup() + .addComponent(normalizeCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(labelNormalize))) + .addContainerGap(49, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(labelExport) - .addComponent(positionExportCheckbox)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(colorsExportCheckbox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(sizeExportCheckbox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(attributesExportCheckbox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(normalizeCheckbox) - .addComponent(labelNormalize)) - .addContainerGap(53, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelExport) + .addComponent(positionExportCheckbox)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(colorsExportCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(sizeExportCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(attributesExportCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(normalizeCheckbox) + .addComponent(labelNormalize)) + .addContainerGap(53, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JCheckBox attributesExportCheckbox; - private javax.swing.JCheckBox colorsExportCheckbox; - private javax.swing.JLabel labelExport; - private javax.swing.JLabel labelNormalize; - private javax.swing.JCheckBox normalizeCheckbox; - private javax.swing.JCheckBox positionExportCheckbox; - private javax.swing.JCheckBox sizeExportCheckbox; - // End of variables declaration//GEN-END:variables } diff --git a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterJson.java b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterJson.java new file mode 100644 index 0000000000..258d7f6a5f --- /dev/null +++ b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterJson.java @@ -0,0 +1,136 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.ui.exporter.plugin; + +import javax.swing.JPanel; +import org.gephi.io.exporter.plugin.ExporterJson; +import org.gephi.io.exporter.spi.Exporter; +import org.gephi.io.exporter.spi.ExporterUI; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +/** + * @author Mathieu Bastian + */ +@ServiceProvider(service = ExporterUI.class) +public class UIExporterJson implements ExporterUI { + + private final ExporterJsonSettings settings = new ExporterJsonSettings(); + private UIExporterJsonPanel panel; + private ExporterJson exporterJson; + + @Override + public void setup(Exporter exporter) { + exporterJson = (ExporterJson) exporter; + settings.load(exporterJson); + if (panel != null) { + panel.setup(exporterJson); + } + } + + @Override + public void unsetup(boolean update) { + if (update) { + panel.unsetup(exporterJson); + settings.save(exporterJson); + } + panel = null; + exporterJson = null; + } + + @Override + public JPanel getPanel() { + panel = new UIExporterJsonPanel(); + return panel; + } + + @Override + public boolean isUIForExporter(Exporter exporter) { + return exporter instanceof ExporterJson; + } + + @Override + public String getDisplayName() { + return NbBundle.getMessage(UIExporterJson.class, "UIExporterJson.name"); + } + + private static class ExporterJsonSettings extends AbstractExporterSettings { + + // Preference names + private final static String NORMALIZE = "Json_normalize"; + private final static String EXPORT_COLORS = "Json_exportColors"; + private final static String EXPORT_POSITION = "Json_exportPosition"; + private final static String EXPORT_ATTRIBUTES = "Json_exportAttributes"; + private final static String EXPORT_SIZE = "Json_exportSize"; + private final static String EXPORT_DYNAMICS = "Json_exportDynamics"; + private final static String EXPORT_META = "Json_exportMeta"; + private final static String PRETTY_PRINT = "Json_prettyPrint"; + private final static String FORMAT = "Json_format"; + // Default + private final static ExporterJson DEFAULT = new ExporterJson(); + + private void save(ExporterJson exporterJson) { + put(NORMALIZE, exporterJson.isNormalize()); + put(EXPORT_COLORS, exporterJson.isExportColors()); + put(EXPORT_POSITION, exporterJson.isExportPosition()); + put(EXPORT_SIZE, exporterJson.isExportSize()); + put(EXPORT_ATTRIBUTES, exporterJson.isExportAttributes()); + put(EXPORT_DYNAMICS, exporterJson.isExportDynamic()); + put(EXPORT_META, exporterJson.isExportMeta()); + put(FORMAT, exporterJson.getFormat().name()); + put(PRETTY_PRINT, exporterJson.isPrettyPrint()); + } + + private void load(ExporterJson exporterJson) { + exporterJson.setNormalize(get(NORMALIZE, DEFAULT.isNormalize())); + exporterJson.setExportColors(get(EXPORT_COLORS, DEFAULT.isExportColors())); + exporterJson.setExportAttributes(get(EXPORT_ATTRIBUTES, DEFAULT.isExportAttributes())); + exporterJson.setExportPosition(get(EXPORT_POSITION, DEFAULT.isExportPosition())); + exporterJson.setExportSize(get(EXPORT_SIZE, DEFAULT.isExportSize())); + exporterJson.setExportDynamic(get(EXPORT_DYNAMICS, DEFAULT.isExportDynamic())); + exporterJson.setExportMeta(get(EXPORT_META, DEFAULT.isExportMeta())); + exporterJson.setFormat(ExporterJson.Format.valueOf(get(FORMAT, DEFAULT.getFormat().name()))); + exporterJson.setPrettyPrint(get(PRETTY_PRINT, DEFAULT.isPrettyPrint())); + } + } +} diff --git a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterJsonPanel.form b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterJsonPanel.form new file mode 100644 index 0000000000..72efe9acf9 --- /dev/null +++ b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterJsonPanel.form @@ -0,0 +1,170 @@ + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterJsonPanel.java b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterJsonPanel.java new file mode 100644 index 0000000000..88487ed306 --- /dev/null +++ b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterJsonPanel.java @@ -0,0 +1,199 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.ui.exporter.plugin; + +import javax.swing.DefaultComboBoxModel; +import org.gephi.io.exporter.plugin.ExporterJson; + +/** + * @author Mathieu Bastian + */ +public class UIExporterJsonPanel extends javax.swing.JPanel { + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JCheckBox attributesExportCheckbox; + private javax.swing.JCheckBox colorsExportCheckbox; + private javax.swing.JCheckBox dynamicExportCheckbox; + private javax.swing.JComboBox formatCombo; + private javax.swing.JLabel labelExport; + private javax.swing.JLabel labelFormat; + private javax.swing.JLabel labelNormalize; + private javax.swing.JCheckBox normalizeCheckbox; + private javax.swing.JCheckBox positionExportCheckbox; + private javax.swing.JCheckBox prettyPrintCheckbox; + private javax.swing.JCheckBox sizeExportCheckbox; + // End of variables declaration//GEN-END:variables + + public UIExporterJsonPanel() { + initComponents(); + + // Init format combo + DefaultComboBoxModel comboBoxModel = + new DefaultComboBoxModel<>(ExporterJson.Format.values()); + formatCombo.setModel(comboBoxModel); + } + + public void setup(ExporterJson exporterJson) { + formatCombo.setSelectedItem(exporterJson.getFormat()); + colorsExportCheckbox.setSelected(exporterJson.isExportColors()); + positionExportCheckbox.setSelected(exporterJson.isExportPosition()); + sizeExportCheckbox.setSelected(exporterJson.isExportSize()); + attributesExportCheckbox.setSelected(exporterJson.isExportAttributes()); + normalizeCheckbox.setSelected(exporterJson.isNormalize()); + dynamicExportCheckbox.setSelected(exporterJson.isExportDynamic()); + prettyPrintCheckbox.setSelected(exporterJson.isPrettyPrint()); + } + + public void unsetup(ExporterJson exporterJson) { + exporterJson.setFormat((ExporterJson.Format) formatCombo.getSelectedItem()); + exporterJson.setExportAttributes(attributesExportCheckbox.isSelected()); + exporterJson.setExportColors(colorsExportCheckbox.isSelected()); + exporterJson.setExportSize(sizeExportCheckbox.isSelected()); + exporterJson.setExportPosition(positionExportCheckbox.isSelected()); + exporterJson.setNormalize(normalizeCheckbox.isSelected()); + exporterJson.setExportDynamic(dynamicExportCheckbox.isSelected()); + exporterJson.setPrettyPrint(prettyPrintCheckbox.isSelected()); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + labelExport = new javax.swing.JLabel(); + positionExportCheckbox = new javax.swing.JCheckBox(); + colorsExportCheckbox = new javax.swing.JCheckBox(); + attributesExportCheckbox = new javax.swing.JCheckBox(); + sizeExportCheckbox = new javax.swing.JCheckBox(); + labelNormalize = new javax.swing.JLabel(); + normalizeCheckbox = new javax.swing.JCheckBox(); + dynamicExportCheckbox = new javax.swing.JCheckBox(); + prettyPrintCheckbox = new javax.swing.JCheckBox(); + labelFormat = new javax.swing.JLabel(); + formatCombo = new javax.swing.JComboBox<>(); + + labelExport.setText(org.openide.util.NbBundle.getMessage(UIExporterJsonPanel.class, "UIExporterJsonPanel.labelExport.text")); // NOI18N + + positionExportCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterJsonPanel.class, "UIExporterJsonPanel.positionExportCheckbox.text")); // NOI18N + + colorsExportCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterJsonPanel.class, "UIExporterJsonPanel.colorsExportCheckbox.text")); // NOI18N + + attributesExportCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterJsonPanel.class, "UIExporterJsonPanel.attributesExportCheckbox.text")); // NOI18N + + sizeExportCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterJsonPanel.class, "UIExporterJsonPanel.sizeExportCheckbox.text")); // NOI18N + + labelNormalize.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N + labelNormalize.setForeground(new java.awt.Color(102, 102, 102)); + labelNormalize.setText(org.openide.util.NbBundle.getMessage(UIExporterJsonPanel.class, "UIExporterJsonPanel.labelNormalize.text")); // NOI18N + + normalizeCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterJsonPanel.class, "UIExporterJsonPanel.normalizeCheckbox.text")); // NOI18N + + dynamicExportCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterJsonPanel.class, "UIExporterJsonPanel.dynamicExportCheckbox.text")); // NOI18N + + prettyPrintCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterJsonPanel.class, "UIExporterJsonPanel.prettyPrintCheckbox.text")); // NOI18N + + labelFormat.setText(org.openide.util.NbBundle.getMessage(UIExporterJsonPanel.class, "UIExporterJsonPanel.labelFormat.text")); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(normalizeCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(labelNormalize, javax.swing.GroupLayout.DEFAULT_SIZE, 225, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(labelExport) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(attributesExportCheckbox) + .addComponent(sizeExportCheckbox) + .addComponent(colorsExportCheckbox) + .addComponent(positionExportCheckbox) + .addComponent(dynamicExportCheckbox))) + .addComponent(prettyPrintCheckbox) + .addGroup(layout.createSequentialGroup() + .addComponent(labelFormat) + .addGap(18, 18, 18) + .addComponent(formatCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 177, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGap(0, 0, Short.MAX_VALUE))) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelFormat) + .addComponent(formatCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 13, Short.MAX_VALUE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelExport) + .addComponent(positionExportCheckbox)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(colorsExportCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(sizeExportCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(attributesExportCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(dynamicExportCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(normalizeCheckbox) + .addComponent(labelNormalize)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(prettyPrintCheckbox) + .addGap(15, 15, 15)) + ); + }// //GEN-END:initComponents +} diff --git a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterPajek.java b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterPajek.java index 07202a675a..2db4b742f8 100644 --- a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterPajek.java +++ b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterPajek.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.exporter.plugin; import javax.swing.JPanel; @@ -49,21 +50,22 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Daniel Bernardes */ @ServiceProvider(service = ExporterUI.class) public class UIExporterPajek implements ExporterUI { + private final ExporterPajekSettings settings = new ExporterPajekSettings(); private UIExporterPajekPanel panel; private ExporterPajek exporterPajek; - private ExporterPajekSettings settings = new ExporterPajekSettings(); @Override public void setup(Exporter exporter) { exporterPajek = (ExporterPajek) exporter; settings.load(exporterPajek); - panel.setup(exporterPajek); + if (panel != null) { + panel.setup(exporterPajek); + } } @Override @@ -92,19 +94,22 @@ public String getDisplayName() { return NbBundle.getMessage(UIExporterPajek.class, "UIExporterPajek.name"); } - private static class ExporterPajekSettings { + private static class ExporterPajekSettings extends AbstractExporterSettings { - private boolean exportPosition = true; - private boolean exportEdgeWeight = true; + // Preferences name + private final static String EXPORT_POSITION = "Pajek_exportPosition"; + private final static String EXPORT_EDGE_WEIGHT = "Pajek_exportEdgeWeight"; + // Default + private final static ExporterPajek DEFAULT = new ExporterPajek(); private void save(ExporterPajek exporterPajek) { - this.exportPosition = exporterPajek.isExportPosition(); - this.exportEdgeWeight = exporterPajek.isExportEdgeWeight(); + put(EXPORT_POSITION, exporterPajek.isExportPosition()); + put(EXPORT_EDGE_WEIGHT, exporterPajek.isExportEdgeWeight()); } private void load(ExporterPajek exporterPajek) { - exporterPajek.setExportPosition(exportPosition); - exporterPajek.setExportEdgeWeight(exportEdgeWeight); + exporterPajek.setExportPosition(get(EXPORT_POSITION, DEFAULT.isExportPosition())); + exporterPajek.setExportEdgeWeight(get(EXPORT_EDGE_WEIGHT, DEFAULT.isExportEdgeWeight())); } } } diff --git a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterPajekPanel.java b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterPajekPanel.java index c080a6711b..9f37a114d1 100644 --- a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterPajekPanel.java +++ b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterPajekPanel.java @@ -39,16 +39,22 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.exporter.plugin; import org.gephi.io.exporter.plugin.ExporterPajek; /** - * * @author Daniel Bernardes */ public class UIExporterPajekPanel extends javax.swing.JPanel { + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JCheckBox edgeWeightCheckbox; + private javax.swing.JLabel labelExport; + private javax.swing.JCheckBox positionExportCheckbox; + // End of variables declaration//GEN-END:variables + public UIExporterPajekPanel() { initComponents(); } @@ -63,7 +69,8 @@ public void unsetup(ExporterPajek exporterPajek) { exporterPajek.setExportEdgeWeight(edgeWeightCheckbox.isSelected()); } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -77,42 +84,40 @@ private void initComponents() { edgeWeightCheckbox = new javax.swing.JCheckBox(); - labelExport.setText(org.openide.util.NbBundle.getMessage(UIExporterPajekPanel.class, "UIExporterPajekPanel.labelExport.text")); // NOI18N + labelExport.setText(org.openide.util.NbBundle + .getMessage(UIExporterPajekPanel.class, "UIExporterPajekPanel.labelExport.text")); // NOI18N - positionExportCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterPajekPanel.class, "UIExporterPajekPanel.positionExportCheckbox.text")); // NOI18N + positionExportCheckbox.setText(org.openide.util.NbBundle + .getMessage(UIExporterPajekPanel.class, "UIExporterPajekPanel.positionExportCheckbox.text")); // NOI18N - edgeWeightCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterPajekPanel.class, "UIExporterPajekPanel.edgeWeightCheckbox.text")); // NOI18N + edgeWeightCheckbox.setText(org.openide.util.NbBundle + .getMessage(UIExporterPajekPanel.class, "UIExporterPajekPanel.edgeWeightCheckbox.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(labelExport) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(edgeWeightCheckbox) - .addComponent(positionExportCheckbox))))))) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(labelExport) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(edgeWeightCheckbox) + .addComponent(positionExportCheckbox))))))) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(labelExport) - .addComponent(positionExportCheckbox)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(edgeWeightCheckbox)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelExport) + .addComponent(positionExportCheckbox)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(edgeWeightCheckbox)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JCheckBox edgeWeightCheckbox; - private javax.swing.JLabel labelExport; - private javax.swing.JCheckBox positionExportCheckbox; - // End of variables declaration//GEN-END:variables } diff --git a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterSpreadsheet.java b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterSpreadsheet.java new file mode 100644 index 0000000000..b81f49e25d --- /dev/null +++ b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterSpreadsheet.java @@ -0,0 +1,156 @@ +/* +Copyright 2008-2017 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2017 Gephi Consortium. + */ + +package org.gephi.ui.exporter.plugin; + +import java.text.DecimalFormatSymbols; +import java.util.Arrays; +import java.util.stream.Collectors; +import javax.swing.JPanel; +import org.gephi.io.exporter.plugin.ExporterSpreadsheet; +import org.gephi.io.exporter.spi.Exporter; +import org.gephi.io.exporter.spi.ExporterUI; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +/** + * @author Eduardo Ramos + */ +@ServiceProvider(service = ExporterUI.class) +public class UIExporterSpreadsheet implements ExporterUI { + + private final ExporterSpreadsheetSettings settings = new ExporterSpreadsheetSettings(); + private UIExporterSpreadsheetPanel panel; + private ExporterSpreadsheet exporterSpreadsheet; + + @Override + public void setup(Exporter exporter) { + exporterSpreadsheet = (ExporterSpreadsheet) exporter; + settings.load(exporterSpreadsheet); + if (panel != null) { + panel.setup(exporterSpreadsheet); + } + } + + @Override + public void unsetup(boolean update) { + if (update) { + panel.unsetup(exporterSpreadsheet); + settings.save(exporterSpreadsheet); + } + panel = null; + exporterSpreadsheet = null; + } + + @Override + public JPanel getPanel() { + return panel = new UIExporterSpreadsheetPanel(); + } + + @Override + public boolean isUIForExporter(Exporter exporter) { + return exporter instanceof ExporterSpreadsheet; + } + + @Override + public String getDisplayName() { + return NbBundle.getMessage(UIExporterSpreadsheet.class, "UIExporterSpreadsheet.name"); + } + + private static class ExporterSpreadsheetSettings extends AbstractExporterSettings { + + // Preference names + private final static String NORMALIZE = "Spreadsheet_normalize"; + private final static String EXPORT_COLORS = "Spreadsheet_exportColors"; + private final static String EXPORT_POSITION = "Spreadsheet_exportPosition"; + private final static String EXPORT_ATTRIBUTES = "Spreadsheet_exportAttributes"; + private final static String EXPORT_SIZE = "Spreadsheet_exportSize"; + private final static String EXPORT_DYNAMICS = "Spreadsheet_exportDynamics"; + private final static String SEPARATOR = "Spreadsheet_separator"; + private final static String DECIMAL_SEPARATOR = "Spreadsheet_decimalSeparator"; + private final static String EXCLUDED_NODE_COLUMNS = "Spreadsheet_excludedNodeColumns"; + private final static String EXCLUDED_EDGE_COLUMNS = "Spreadsheet_excludedEdgeColumns"; + // Default + private final static ExporterSpreadsheet DEFAULT = new ExporterSpreadsheet(); + + private void save(ExporterSpreadsheet exporterSpreadsheet) { + put(NORMALIZE, exporterSpreadsheet.isNormalize()); + put(EXPORT_COLORS, exporterSpreadsheet.isExportColors()); + put(EXPORT_POSITION, exporterSpreadsheet.isExportPosition()); + put(EXPORT_SIZE, exporterSpreadsheet.isExportSize()); + put(EXPORT_ATTRIBUTES, exporterSpreadsheet.isExportAttributes()); + put(EXPORT_DYNAMICS, exporterSpreadsheet.isExportDynamic()); + put(SEPARATOR, exporterSpreadsheet.getFieldDelimiter()); + put(DECIMAL_SEPARATOR, exporterSpreadsheet.getDecimalFormatSymbols().getDecimalSeparator()); + if (exporterSpreadsheet.getTableToExport().equals(ExporterSpreadsheet.ExportTable.NODES)) { + put(EXCLUDED_NODE_COLUMNS, exporterSpreadsheet.getExcludedColumns().toArray(new String[0])); + } else { + put(EXCLUDED_EDGE_COLUMNS, exporterSpreadsheet.getExcludedColumns().toArray(new String[0])); + } + } + + private void load(ExporterSpreadsheet exporterSpreadsheet) { + exporterSpreadsheet.setNormalize(get(NORMALIZE, DEFAULT.isNormalize())); + exporterSpreadsheet.setExportColors(get(EXPORT_COLORS, DEFAULT.isExportColors())); + exporterSpreadsheet.setExportAttributes(get(EXPORT_ATTRIBUTES, DEFAULT.isExportAttributes())); + exporterSpreadsheet.setExportPosition(get(EXPORT_POSITION, DEFAULT.isExportPosition())); + exporterSpreadsheet.setExportSize(get(EXPORT_SIZE, DEFAULT.isExportSize())); + exporterSpreadsheet.setExportDynamic(get(EXPORT_DYNAMICS, DEFAULT.isExportDynamic())); + exporterSpreadsheet.setFieldDelimiter(get(SEPARATOR, DEFAULT.getFieldDelimiter())); + + DecimalFormatSymbols dfs = exporterSpreadsheet.getDecimalFormatSymbols(); + dfs.setDecimalSeparator(get(DECIMAL_SEPARATOR, DEFAULT.getDecimalFormatSymbols().getDecimalSeparator())); + + if (exporterSpreadsheet.getTableToExport().equals(ExporterSpreadsheet.ExportTable.NODES)) { + exporterSpreadsheet.setExcludedColumns( + Arrays.stream(get(EXCLUDED_NODE_COLUMNS, DEFAULT.getExcludedColumns().toArray(new String[0]))) + .collect( + Collectors.toSet())); + } else { + exporterSpreadsheet.setExcludedColumns( + Arrays.stream(get(EXCLUDED_EDGE_COLUMNS, DEFAULT.getExcludedColumns().toArray(new String[0]))) + .collect( + Collectors.toSet())); + } + } + } +} diff --git a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterSpreadsheetPanel.form b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterSpreadsheetPanel.form new file mode 100644 index 0000000000..78134bb5ed --- /dev/null +++ b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterSpreadsheetPanel.form @@ -0,0 +1,251 @@ + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterSpreadsheetPanel.java b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterSpreadsheetPanel.java new file mode 100644 index 0000000000..1e3c0ca80d --- /dev/null +++ b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterSpreadsheetPanel.java @@ -0,0 +1,430 @@ +/* +Copyright 2008-2017 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2017 Gephi Consortium. + */ + +package org.gephi.ui.exporter.plugin; + +import java.text.DecimalFormatSymbols; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; +import javax.swing.JCheckBox; +import net.miginfocom.swing.MigLayout; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Table; +import org.gephi.io.exporter.plugin.ExporterSpreadsheet; +import org.openide.util.NbBundle; + +/** + * UI for selecting CSV export options of a JTable. + * + * @author Eduardo Ramos + */ +public class UIExporterSpreadsheetPanel extends javax.swing.JPanel { + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JCheckBox attributesExportCheckbox; + private javax.swing.JCheckBox colorsExportCheckbox; + private javax.swing.JLabel columnsLabel; + private javax.swing.JPanel columnsPanel; + private javax.swing.JComboBox decimalSeparatorComboBox; + private javax.swing.JLabel decimalSeparatorLabel; + private javax.swing.JCheckBox dynamicExportCheckbox; + private javax.swing.JLabel labelExport; + private javax.swing.JLabel labelNormalize; + private javax.swing.JCheckBox normalizeCheckbox; + private javax.swing.JCheckBox positionExportCheckbox; + private javax.swing.JScrollPane scroll; + private javax.swing.JComboBox separatorComboBox; + private javax.swing.JLabel separatorLabel; + private javax.swing.JCheckBox sizeExportCheckbox; + private javax.swing.JComboBox tableComboBox; + private javax.swing.JLabel tableLabel; + // End of variables declaration//GEN-END:variables + + private final Set separators = new HashSet<>(); + private final Set decimalSeparators = new HashSet<>(); + + private List columnsCheckBoxes; + private GraphModel graphModel; + private ExporterSpreadsheet exporterSpreadsheet; + + /** + * Creates new form UIExporterSpreadsheet + */ + public UIExporterSpreadsheetPanel() { + initComponents(); + + separators.add(new SeparatorWrapper((','), getMessage("UIExporterSpreadsheetPanel.comma"))); + separators.add(new SeparatorWrapper((';'), getMessage("UIExporterSpreadsheetPanel.semicolon"))); + separators.add(new SeparatorWrapper(('\t'), getMessage("UIExporterSpreadsheetPanel.tab"))); + separators.add(new SeparatorWrapper((' '), getMessage("UIExporterSpreadsheetPanel.space"))); + separators.forEach(s -> separatorComboBox.addItem(s)); + + decimalSeparators.add(new SeparatorWrapper(('.'), getMessage("UIExporterSpreadsheetPanel.dot"))); + decimalSeparators.add(new SeparatorWrapper((','), getMessage("UIExporterSpreadsheetPanel.comma"))); + decimalSeparators.forEach(s -> decimalSeparatorComboBox.addItem(s)); + + tableComboBox.addItem(getMessage("UIExporterSpreadsheetPanel.table.nodes")); + tableComboBox.addItem(getMessage("UIExporterSpreadsheetPanel.table.edges")); + } + + public void setup(ExporterSpreadsheet exporter) { + tableComboBox.setSelectedIndex( + exporter.getTableToExport().equals(ExporterSpreadsheet.ExportTable.NODES) ? 0 : 1); + separatorComboBox.setSelectedItem(new SeparatorWrapper(exporter.getFieldDelimiter())); + decimalSeparatorComboBox.setSelectedItem( + new SeparatorWrapper(exporter.getDecimalFormatSymbols().getDecimalSeparator())); + + positionExportCheckbox.setSelected(exporter.isExportPosition()); + colorsExportCheckbox.setSelected(exporter.isExportColors()); + sizeExportCheckbox.setSelected(exporter.isExportSize()); + attributesExportCheckbox.setSelected(exporter.isExportAttributes()); + dynamicExportCheckbox.setSelected(exporter.isExportDynamic()); + normalizeCheckbox.setSelected(exporter.isNormalize()); + + graphModel = exporter.getWorkspace().getLookup().lookup(GraphModel.class); + exporterSpreadsheet = exporter; + + refreshColumns(); + } + + public void unsetup(ExporterSpreadsheet exporter) { + exporter.setTableToExport(tableComboBox.getSelectedIndex() == 0 ? ExporterSpreadsheet.ExportTable.NODES : + ExporterSpreadsheet.ExportTable.EDGES); + exporter.setFieldDelimiter(((SeparatorWrapper) separatorComboBox.getSelectedItem()).separator); + + DecimalFormatSymbols dfs = exporter.getDecimalFormatSymbols(); + dfs.setDecimalSeparator(((SeparatorWrapper) decimalSeparatorComboBox.getSelectedItem()).separator); + exporter.setDecimalFormatSymbols(dfs); + + exporter.setExportPosition(positionExportCheckbox.isSelected()); + exporter.setExportColors(colorsExportCheckbox.isSelected()); + exporter.setExportSize(sizeExportCheckbox.isSelected()); + exporter.setExportAttributes(attributesExportCheckbox.isSelected()); + exporter.setExportDynamic(dynamicExportCheckbox.isSelected()); + exporter.setNormalize(normalizeCheckbox.isSelected()); + + exporter.setExcludedColumns(columnsCheckBoxes.stream().filter(c -> !c.isSelected()).map(c -> c.id).collect( + Collectors.toSet())); + + graphModel = null; + exporterSpreadsheet = null; + columnsCheckBoxes = null; + } + + private void refreshColumns() { + if (graphModel == null) { + return; + } + + columnsPanel.removeAll(); + columnsPanel.setLayout(new MigLayout("", "[pref!]")); + + columnsCheckBoxes = new ArrayList<>(); + + //Show rest of columns: + Table table = tableComboBox.getSelectedIndex() == 0 ? graphModel.getNodeTable() : + graphModel.getEdgeTable(); + for (Column column : exporterSpreadsheet.getExportableColumns(graphModel, table)) { + ColumnCheckboxWrapper checkBox = new ColumnCheckboxWrapper(column.getId(), column.getTitle()); + columnsCheckBoxes.add(checkBox); + + if (exporterSpreadsheet.getExcludedColumns().contains(column.getId())) { + checkBox.setSelected(false); + } + + columnsPanel.add(checkBox, "wrap"); + } + + columnsPanel.revalidate(); + columnsPanel.repaint(); + } + + private String getMessage(String resName) { + return NbBundle.getMessage(UIExporterSpreadsheetPanel.class, resName); + } + + /** + * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The content of this method is always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + separatorLabel = new javax.swing.JLabel(); + separatorComboBox = new javax.swing.JComboBox(); + scroll = new javax.swing.JScrollPane(); + columnsPanel = new javax.swing.JPanel(); + columnsLabel = new javax.swing.JLabel(); + tableLabel = new javax.swing.JLabel(); + tableComboBox = new javax.swing.JComboBox(); + decimalSeparatorLabel = new javax.swing.JLabel(); + decimalSeparatorComboBox = new javax.swing.JComboBox(); + labelNormalize = new javax.swing.JLabel(); + normalizeCheckbox = new javax.swing.JCheckBox(); + dynamicExportCheckbox = new javax.swing.JCheckBox(); + attributesExportCheckbox = new javax.swing.JCheckBox(); + sizeExportCheckbox = new javax.swing.JCheckBox(); + colorsExportCheckbox = new javax.swing.JCheckBox(); + positionExportCheckbox = new javax.swing.JCheckBox(); + labelExport = new javax.swing.JLabel(); + + separatorLabel.setText(org.openide.util.NbBundle.getMessage(UIExporterSpreadsheetPanel.class, + "UIExporterSpreadsheetPanel.separatorLabel.text")); // NOI18N + + columnsPanel.setLayout(new java.awt.GridLayout(1, 0)); + scroll.setViewportView(columnsPanel); + + columnsLabel.setText(org.openide.util.NbBundle.getMessage(UIExporterSpreadsheetPanel.class, + "UIExporterSpreadsheetPanel.columnsLabel.text")); // NOI18N + + tableLabel.setText(org.openide.util.NbBundle.getMessage(UIExporterSpreadsheetPanel.class, + "UIExporterSpreadsheetPanel.tableLabel.text")); // NOI18N + + tableComboBox.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + tableComboBoxActionPerformed(evt); + } + }); + + decimalSeparatorLabel.setText(org.openide.util.NbBundle.getMessage(UIExporterSpreadsheetPanel.class, + "UIExporterSpreadsheetPanel.decimalSeparatorLabel.text")); // NOI18N + + labelNormalize.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N + labelNormalize.setForeground(new java.awt.Color(102, 102, 102)); + labelNormalize.setText(org.openide.util.NbBundle.getMessage(UIExporterSpreadsheetPanel.class, + "UIExporterSpreadsheetPanel.labelNormalize.text")); // NOI18N + + normalizeCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterSpreadsheetPanel.class, + "UIExporterSpreadsheetPanel.normalizeCheckbox.text")); // NOI18N + + dynamicExportCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterSpreadsheetPanel.class, + "UIExporterSpreadsheetPanel.dynamicExportCheckbox.text")); // NOI18N + + attributesExportCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterSpreadsheetPanel.class, + "UIExporterSpreadsheetPanel.attributesExportCheckbox.text")); // NOI18N + attributesExportCheckbox.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + attributesExportCheckboxActionPerformed(evt); + } + }); + + sizeExportCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterSpreadsheetPanel.class, + "UIExporterSpreadsheetPanel.sizeExportCheckbox.text")); // NOI18N + + colorsExportCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterSpreadsheetPanel.class, + "UIExporterSpreadsheetPanel.colorsExportCheckbox.text")); // NOI18N + + positionExportCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterSpreadsheetPanel.class, + "UIExporterSpreadsheetPanel.positionExportCheckbox.text")); // NOI18N + + labelExport.setText(org.openide.util.NbBundle.getMessage(UIExporterSpreadsheetPanel.class, + "UIExporterSpreadsheetPanel.labelExport.text")); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(scroll) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addComponent(tableLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 1, + Short.MAX_VALUE) + .addComponent(separatorLabel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGap(18, 18, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addComponent(decimalSeparatorLabel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGap(16, 16, 16))) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(decimalSeparatorComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, + Short.MAX_VALUE) + .addComponent(separatorComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, + Short.MAX_VALUE) + .addComponent(tableComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) + .addGroup(layout.createSequentialGroup() + .addComponent(normalizeCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(labelNormalize, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(columnsLabel) + .addGroup(layout.createSequentialGroup() + .addComponent(labelExport) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(colorsExportCheckbox) + .addComponent(sizeExportCheckbox) + .addGroup(layout.createSequentialGroup() + .addComponent(attributesExportCheckbox) + .addGap(18, 18, 18) + .addComponent(dynamicExportCheckbox)) + .addComponent(positionExportCheckbox)))) + .addGap(0, 0, Short.MAX_VALUE))) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(tableLabel) + .addComponent(tableComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(separatorLabel) + .addComponent(separatorComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(decimalSeparatorComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(decimalSeparatorLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(positionExportCheckbox) + .addComponent(labelExport)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(colorsExportCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(sizeExportCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(attributesExportCheckbox) + .addComponent(dynamicExportCheckbox)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(normalizeCheckbox) + .addComponent(labelNormalize)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(columnsLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(scroll, javax.swing.GroupLayout.PREFERRED_SIZE, 102, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap()) + ); + }// //GEN-END:initComponents + + private void tableComboBoxActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tableComboBoxActionPerformed + refreshColumns(); + }//GEN-LAST:event_tableComboBoxActionPerformed + + private void attributesExportCheckboxActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_attributesExportCheckboxActionPerformed + exporterSpreadsheet.setExportAttributes(attributesExportCheckbox.isSelected()); + refreshColumns(); + }//GEN-LAST:event_attributesExportCheckboxActionPerformed + + private static class SeparatorWrapper { + + private final Character separator; + private String displayText; + + public SeparatorWrapper(Character separator) { + this.separator = separator; + } + + public SeparatorWrapper(Character separator, String displayText) { + this.separator = separator; + this.displayText = displayText; + } + + @Override + public String toString() { + if (displayText != null) { + return displayText; + } else { + return String.valueOf(separator); + } + } + + @Override + public int hashCode() { + int hash = 5; + hash = 37 * hash + Objects.hashCode(this.separator); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final SeparatorWrapper other = (SeparatorWrapper) obj; + return Objects.equals(this.separator, other.separator); + } + + + } + + private static class ColumnCheckboxWrapper extends JCheckBox { + + private final String id; + + public ColumnCheckboxWrapper(String id, String title) { + super(title, true); + this.id = id; + } + } +} diff --git a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterVNA.java b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterVNA.java index 500a1fe0ca..ee8153b20b 100644 --- a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterVNA.java +++ b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterVNA.java @@ -39,17 +39,16 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.exporter.plugin; import javax.swing.JPanel; import org.gephi.io.exporter.plugin.ExporterVNA; import org.gephi.io.exporter.spi.Exporter; import org.gephi.io.exporter.spi.ExporterUI; -import org.gephi.io.exporter.spi.GraphExporter; import org.openide.util.lookup.ServiceProvider; /** - * * @author megaterik */ @ServiceProvider(service = ExporterUI.class) @@ -67,15 +66,16 @@ public JPanel getPanel() { @Override public void setup(Exporter exporter) { - this.exporter = (ExporterVNA)exporter; + this.exporter = (ExporterVNA) exporter; settings.load(this.exporter); - panel.setup((ExporterVNA)exporter); + if (panel != null) { + panel.setup((ExporterVNA) exporter); + } } @Override public void unsetup(boolean update) { - if (update) - { + if (update) { panel.unsetup(exporter); settings.save(exporter); } @@ -93,35 +93,36 @@ public String getDisplayName() { return org.openide.util.NbBundle.getMessage(UIExporterVNA.class, "UIExporterVNA.name"); } - private static class ExporterVNASettings { - private boolean exportEdgeWeight = true; - private boolean exportCoords = true; - private boolean exportSize = true; - private boolean exportShortLabel = true; - private boolean exportColor = true; - private boolean normalize = false; - private boolean exportAttributes = true; - - private void load(ExporterVNA exporter) - { - exporter.setExportColor(exportColor); - exporter.setExportCoords(exportCoords); - exporter.setExportEdgeWeight(exportEdgeWeight); - exporter.setExportShortLabel(exportShortLabel); - exporter.setExportSize(exportSize); - exporter.setExportAttributes(exportAttributes); - exporter.setNormalize(normalize); + private static class ExporterVNASettings extends AbstractExporterSettings { + // Preference names + private final static String EXPORT_EDGE_WEIGHT = "VNA_exportEdgeWeight"; + private final static String EXPORT_COORDINATES = "VNA_exportCoordinates"; + private final static String EXPORT_SIZE = "VNA_exportSize"; + private final static String EXPORT_SHORT_LABEL = "VNA_exportShortLabel"; + private final static String EXPORT_COLOR = "VNA_exportColor"; + private final static String NORMALIZE = "VNA_normalize"; + private final static String EXPORT_ATTRIBUTES = "VNA_exportAttributes"; + // Default + private final static ExporterVNA DEFAULT = new ExporterVNA(); + + private void load(ExporterVNA exporter) { + exporter.setExportColor(get(EXPORT_COLOR, DEFAULT.isExportColor())); + exporter.setExportCoords(get(EXPORT_COORDINATES, DEFAULT.isExportCoords())); + exporter.setExportEdgeWeight(get(EXPORT_EDGE_WEIGHT, DEFAULT.isExportEdgeWeight())); + exporter.setExportShortLabel(get(EXPORT_SHORT_LABEL, DEFAULT.isExportShortLabel())); + exporter.setExportSize(get(EXPORT_SIZE, DEFAULT.isExportSize())); + exporter.setExportAttributes(get(EXPORT_ATTRIBUTES, DEFAULT.isExportAttributes())); + exporter.setNormalize(get(NORMALIZE, DEFAULT.isNormalize())); } - - private void save(ExporterVNA exporter) - { - exportColor = exporter.isExportColor(); - exportCoords = exporter.isExportCoords(); - exportEdgeWeight = exporter.isExportEdgeWeight(); - exportShortLabel = exporter.isExportShortLabel(); - exportSize = exporter.isExportSize(); - exportAttributes = exporter.isExportAttributes(); - normalize = exporter.isNormalize(); + + private void save(ExporterVNA exporter) { + put(EXPORT_COLOR, exporter.isExportColor()); + put(EXPORT_COORDINATES, exporter.isExportCoords()); + put(EXPORT_EDGE_WEIGHT, exporter.isExportEdgeWeight()); + put(EXPORT_SHORT_LABEL, exporter.isExportShortLabel()); + put(EXPORT_SIZE, exporter.isExportSize()); + put(EXPORT_ATTRIBUTES, exporter.isExportAttributes()); + put(NORMALIZE, exporter.isNormalize()); } } } diff --git a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterVNAPanel.java b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterVNAPanel.java index cf75a8c210..e0116a2f96 100644 --- a/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterVNAPanel.java +++ b/modules/ExportPluginUI/src/main/java/org/gephi/ui/exporter/plugin/UIExporterVNAPanel.java @@ -39,16 +39,28 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.exporter.plugin; import org.gephi.io.exporter.plugin.ExporterVNA; /** - * * @author megaterik */ public class UIExporterVNAPanel extends javax.swing.JPanel { + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JCheckBox exportAttributesCheckBox; + private javax.swing.JCheckBox exportColorsCheckBox; + private javax.swing.JCheckBox exportCoordsCheckBox; + private javax.swing.JCheckBox exportEdgeWeightCheckBox; + private javax.swing.JLabel exportLabel; + private javax.swing.JCheckBox exportLabelCheckBox; + private javax.swing.JCheckBox exportSizeCheckBox; + private javax.swing.JCheckBox normalizeCheckBox; + private javax.swing.JLabel normalizeLabel; + // End of variables declaration//GEN-END:variables + /** * Creates new customizer UIExporterGMLPanel */ @@ -96,91 +108,93 @@ private void initComponents() { normalizeLabel = new javax.swing.JLabel(); exportLabelCheckBox = new javax.swing.JCheckBox(); - exportLabel.setText(org.openide.util.NbBundle.getMessage(UIExporterVNAPanel.class, "UIExporterGML.exportLabel.text")); // NOI18N + exportLabel.setText( + org.openide.util.NbBundle.getMessage(UIExporterVNAPanel.class, "UIExporterGML.exportLabel.text")); // NOI18N - exportCoordsCheckBox.setText(org.openide.util.NbBundle.getMessage(UIExporterVNAPanel.class, "UIExporterGML.positionLabel.text")); // NOI18N + exportCoordsCheckBox.setText(org.openide.util.NbBundle + .getMessage(UIExporterVNAPanel.class, "UIExporterGML.positionLabel.text")); // NOI18N - exportColorsCheckBox.setText(org.openide.util.NbBundle.getMessage(UIExporterVNAPanel.class, "UIExporterGML.colorsLabel.text")); // NOI18N + exportColorsCheckBox.setText( + org.openide.util.NbBundle.getMessage(UIExporterVNAPanel.class, "UIExporterGML.colorsLabel.text")); // NOI18N - exportSizeCheckBox.setText(org.openide.util.NbBundle.getMessage(UIExporterVNAPanel.class, "UIExporterGML.sizeLabel.text")); // NOI18N + exportSizeCheckBox.setText( + org.openide.util.NbBundle.getMessage(UIExporterVNAPanel.class, "UIExporterGML.sizeLabel.text")); // NOI18N - exportEdgeWeightCheckBox.setText(org.openide.util.NbBundle.getMessage(UIExporterVNAPanel.class, "UIExporterGML.edgeWeightLabel.text")); // NOI18N + exportEdgeWeightCheckBox.setText(org.openide.util.NbBundle + .getMessage(UIExporterVNAPanel.class, "UIExporterGML.edgeWeightLabel.text")); // NOI18N - exportAttributesCheckBox.setText(org.openide.util.NbBundle.getMessage(UIExporterVNAPanel.class, "UIExporterGML.attributes.text")); // NOI18N + exportAttributesCheckBox.setText( + org.openide.util.NbBundle.getMessage(UIExporterVNAPanel.class, "UIExporterGML.attributes.text")); // NOI18N exportAttributesCheckBox.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { exportAttributesCheckBoxActionPerformed(evt); } }); - normalizeCheckBox.setText(org.openide.util.NbBundle.getMessage(UIExporterVNAPanel.class, "UIExporterGML.normalize.text")); // NOI18N - normalizeCheckBox.setLabel(org.openide.util.NbBundle.getMessage(UIExporterVNAPanel.class, "UIExporterGML.normalize.text")); // NOI18N + normalizeCheckBox.setText( + org.openide.util.NbBundle.getMessage(UIExporterVNAPanel.class, "UIExporterGML.normalize.text")); // NOI18N + normalizeCheckBox.setLabel( + org.openide.util.NbBundle.getMessage(UIExporterVNAPanel.class, "UIExporterGML.normalize.text")); // NOI18N normalizeLabel.setFont(new java.awt.Font("Ubuntu", 0, 10)); // NOI18N - normalizeLabel.setText(org.openide.util.NbBundle.getMessage(UIExporterVNAPanel.class, "UIExporterGML.normalizeHintLabel.text")); // NOI18N + normalizeLabel.setText(org.openide.util.NbBundle + .getMessage(UIExporterVNAPanel.class, "UIExporterGML.normalizeHintLabel.text")); // NOI18N - exportLabelCheckBox.setText(org.openide.util.NbBundle.getMessage(UIExporterVNAPanel.class, "UIExporterGML.labelLabel.text")); // NOI18N + exportLabelCheckBox.setText( + org.openide.util.NbBundle.getMessage(UIExporterVNAPanel.class, "UIExporterGML.labelLabel.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(exportLabel) - .addComponent(normalizeCheckBox)) - .addGap(23, 23, 23) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(normalizeLabel) - .addComponent(exportEdgeWeightCheckBox) - .addComponent(exportSizeCheckBox) - .addComponent(exportColorsCheckBox) - .addComponent(exportCoordsCheckBox) - .addComponent(exportLabelCheckBox) - .addComponent(exportAttributesCheckBox)) - .addContainerGap(90, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(exportLabel) + .addComponent(normalizeCheckBox)) + .addGap(23, 23, 23) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(normalizeLabel) + .addComponent(exportEdgeWeightCheckBox) + .addComponent(exportSizeCheckBox) + .addComponent(exportColorsCheckBox) + .addComponent(exportCoordsCheckBox) + .addComponent(exportLabelCheckBox) + .addComponent(exportAttributesCheckBox)) + .addContainerGap(90, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(exportLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 18, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(exportCoordsCheckBox)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(exportColorsCheckBox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(exportSizeCheckBox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(exportEdgeWeightCheckBox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(exportLabelCheckBox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(exportAttributesCheckBox) - .addGap(3, 3, 3) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(normalizeCheckBox) - .addComponent(normalizeLabel)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(exportLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 18, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(exportCoordsCheckBox)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(exportColorsCheckBox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(exportSizeCheckBox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(exportEdgeWeightCheckBox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(exportLabelCheckBox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(exportAttributesCheckBox) + .addGap(3, 3, 3) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(normalizeCheckBox) + .addComponent(normalizeLabel)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); exportAttributesCheckBox.getAccessibleContext().setAccessibleName("\n"); // NOI18N exportAttributesCheckBox.getAccessibleContext().setAccessibleDescription(""); }// //GEN-END:initComponents -private void exportAttributesCheckBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exportAttributesCheckBoxActionPerformed + private void exportAttributesCheckBoxActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_exportAttributesCheckBoxActionPerformed // TODO add your handling code here: -}//GEN-LAST:event_exportAttributesCheckBoxActionPerformed - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JCheckBox exportAttributesCheckBox; - private javax.swing.JCheckBox exportColorsCheckBox; - private javax.swing.JCheckBox exportCoordsCheckBox; - private javax.swing.JCheckBox exportEdgeWeightCheckBox; - private javax.swing.JLabel exportLabel; - private javax.swing.JCheckBox exportLabelCheckBox; - private javax.swing.JCheckBox exportSizeCheckBox; - private javax.swing.JCheckBox normalizeCheckBox; - private javax.swing.JLabel normalizeLabel; - // End of variables declaration//GEN-END:variables + }//GEN-LAST:event_exportAttributesCheckBoxActionPerformed } diff --git a/modules/ExportPluginUI/src/main/nbm/manifest.mf b/modules/ExportPluginUI/src/main/nbm/manifest.mf index 68723e092d..2e0db2e06a 100644 --- a/modules/ExportPluginUI/src/main/nbm/manifest.mf +++ b/modules/ExportPluginUI/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/ui/exporter/plugin/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Plugin +OpenIDE-Module-Name: Export Plugin UI \ No newline at end of file diff --git a/modules/ExportPluginUI/src/main/nbm/module.xml b/modules/ExportPluginUI/src/main/nbm/module.xml deleted file mode 100644 index 1c74b00fa3..0000000000 --- a/modules/ExportPluginUI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle.properties b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle.properties index 541901c9a3..c46c722a29 100644 --- a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle.properties +++ b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle.properties @@ -1,5 +1,3 @@ -OpenIDE-Module-Display-Category=Plugin -OpenIDE-Module-Name=Export Plugin UI OpenIDE-Module-Short-Description=Standard exporters UI UIExporterGDF.name = GDF @@ -10,6 +8,8 @@ UIExporterCSV.name = CSV UIExporterPajek.name = Pajek UIExporterDL.name = DL UIExporterVNA.name = VNA +UIExporterSpreadsheetPanel.name = Spreadsheet +UIExporterJson.name = Json UIExporterGDFPanel.jRadioButton1.text=Simple quotes UIExporterGDFPanel.positionExportCheckbox.text=Position (x,y) @@ -63,3 +63,35 @@ UIExporterGML.labelLabel.text=Label UIExporterGML.normalize.text=Normalize UIExporterGML.normalizeHintLabel.text=Scale position and size between 0 and 1 UIExporterGML.indentationLabel.text=Indentation: + +UIExporterSpreadsheetPanel.separatorLabel.text=Field separator: +UIExporterSpreadsheetPanel.comma=Comma +UIExporterSpreadsheetPanel.semicolon=Semicolon +UIExporterSpreadsheetPanel.space=Space +UIExporterSpreadsheetPanel.tab=Tab +UIExporterSpreadsheetPanel.dot=Dot +UIExporterSpreadsheetPanel.columnsLabel.text=Columns: +UIExporterSpreadsheetPanel.tableLabel.text=Table +UIExporterSpreadsheetPanel.table.nodes=Nodes +UIExporterSpreadsheetPanel.table.edges=Edges +UIExporterSpreadsheetPanel.decimalSeparatorLabel.text=Decimal separator: +UIExporterSpreadsheetPanel.dynamicExportCheckbox.text=Dynamic +UIExporterSpreadsheetPanel.positionExportCheckbox.text=Position (x,y,z) +UIExporterSpreadsheetPanel.colorsExportCheckbox.text=Colors +UIExporterSpreadsheetPanel.sizeExportCheckbox.text=Size +UIExporterSpreadsheetPanel.attributesExportCheckbox.text=Attributes +UIExporterSpreadsheetPanel.normalizeCheckbox.text=Normalize +UIExporterSpreadsheetPanel.labelNormalize.text=Scale position and size between 0 and 1 +UIExporterSpreadsheetPanel.labelExport.text=Export: +UIExporterGEXFPanel.includeAttValuesNullCheckbox.text=Include null attribute values + +UIExporterJsonPanel.normalizeCheckbox.text=Normalize +UIExporterJsonPanel.labelNormalize.text=Scale position and size between 0 and 1 +UIExporterJsonPanel.sizeExportCheckbox.text=Size +UIExporterJsonPanel.attributesExportCheckbox.text=Attributes +UIExporterJsonPanel.colorsExportCheckbox.text=Colors +UIExporterJsonPanel.positionExportCheckbox.text=Position (x,y,z) +UIExporterJsonPanel.labelExport.text=Export: +UIExporterJsonPanel.dynamicExportCheckbox.text=Dynamic +UIExporterJsonPanel.prettyPrintCheckbox.text=Pretty print +UIExporterJsonPanel.labelFormat.text=Format: diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_ar.properties b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_ca.properties b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_ca.properties new file mode 100644 index 0000000000..71579d5c23 --- /dev/null +++ b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_ca.properties @@ -0,0 +1,66 @@ +OpenIDE-Module-Short-Description=Standard exporters UI +UIExporterGDF.name=GDF +UIExporterGEXF.name=GEXF +UIExporterGML.name=GML +UIExporterGraphML.name=GraphML +UIExporterCSV.name=CSV +UIExporterPajek.name=Pajek +UIExporterDL.name=DL +UIExporterVNA.name=VNA +UIExporterSpreadsheetPanel.name=Spreadsheet +UIExporterGDFPanel.jRadioButton1.text=Cometes senzilles +UIExporterGDFPanel.positionExportCheckbox.text=Posiciσ (x, y) +UIExporterGDFPanel.colorsExportCheckbox.text=Colors +UIExporterGDFPanel.attributesExportCheckbox.text=Atributs +UIExporterGDFPanel.labelExport.text=Exporta: +UIExporterGDFPanel.jRadioButton2.text=Cometes dobles +UIExporterGDFPanel.quotesCheckbox.text=Quotes text +UIExporterGDFPanel.normalizeCheckbox.text=Normalize +UIExporterGDFPanel.labelQuotes.text=Field encapsulation use double quotes by default +UIExporterGDFPanel.labelNormalize.text=Scale position and size between 0 and 1 +UIExporterGDFPanel.simpleQuotesCheckbox.text=Cometes senzilles +UIExporterGDFPanel.labelQuotes1.text=Use simple quotes instead of double quotes +UIExporterGDFPanel.visibilityCheckbox.text=Visibility (visible, label visible) +UIExporterGEXFPanel.labelExport.text=Exporta: +UIExporterGEXFPanel.attributesExportCheckbox.text=Atributs +UIExporterGEXFPanel.colorsExportCheckbox.text=Colors +UIExporterGEXFPanel.positionExportCheckbox.text=Posiciσ (x, y, z) +UIExporterGEXFPanel.sizeExportCheckbox.text=Mida +UIExporterGEXFPanel.normalizeCheckbox.text=Normalize +UIExporterGEXFPanel.labelNormalize.text=Scale position and size between 0 and 1 +UIExporterGraphMLPanel.labelExport.text=Exporta: +UIExporterGraphMLPanel.positionExportCheckbox.text=Posiciσ (x, y) +UIExporterGraphMLPanel.normalizeCheckbox.text=Normalize +UIExporterGraphMLPanel.colorsExportCheckbox.text=Colors +UIExporterGraphMLPanel.attributesExportCheckbox.text=Atributs +UIExporterGraphMLPanel.sizeExportCheckbox.text=Mida +UIExporterGraphMLPanel.labelNormalize.text=Scale position and size between 0 and 1 +UIExporterCSVPanel.labelExport.text=Exporta: +UIExporterCSVPanel.nodeIdCheckbox.text=ID del node +UIExporterCSVPanel.edgeWeightCheckbox.text=Pes de l'aresta +UIExporterCSVPanel.listRadio.text=Llista +UIExporterCSVPanel.matrixRadio.text=Matriu +UIExporterCSVPanel.zeroEdgeCheckbox.text=Zero when no edge +UIExporterGEXFPanel.dynamicExportCheckbox.text=Dinΰmic +UIExporterPajekPanel.labelExport.text=Exporta: +UIExporterPajekPanel.positionExportCheckbox.text=Posiciσ (x, y) +UIExporterPajekPanel.edgeWeightCheckbox.text=Pesos de les arestes +UIExporterGML.attributes.text=Atributs +UIExporterGML.exportLabel.text=Exporta: +UIExporterGML.positionLabel.text=Posiciσ (x, y) +UIExporterGML.colorsLabel.text=Colors +UIExporterGML.sizeLabel.text=Mida +UIExporterGML.edgeWeightLabel.text=Pes de l'aresta +UIExporterGML.labelLabel.text=Etiqueta +UIExporterGML.normalize.text=Normalize +UIExporterGML.normalizeHintLabel.text=Scale position and size between 0 and 1 +UIExporterGML.indentationLabel.text=Indentation: +UIExporterSpreadsheetPanel.separatorLabel.text=Field separator: +UIExporterSpreadsheetPanel.comma=Comma +UIExporterSpreadsheetPanel.semicolon=Semicolon +UIExporterSpreadsheetPanel.space=Space +UIExporterSpreadsheetPanel.tab=Tab +UIExporterSpreadsheetPanel.columnsLabel.text=Columns: +UIExporterSpreadsheetPanel.tableLabel.text=Table +UIExporterSpreadsheetPanel.table.nodes=Nodes +UIExporterSpreadsheetPanel.table.edges=Edges diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_cs.properties b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_cs.properties index 5945caf373..8de91855c9 100644 --- a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_cs.properties +++ b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_cs.properties @@ -1,119 +1,69 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-06 18\:38+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Short-Description=Standardn\u00ed export\u00e9\u0159i rozhran\u00ed - +OpenIDE-Module-Short-Description=Standardnν exportι\u0159i rozhranν UIExporterGDF.name=GDF - UIExporterGEXF.name=GEXF - UIExporterGML.name=GML - UIExporterGraphML.name=GraphML - UIExporterCSV.name=CSV - UIExporterPajek.name=Pajek - UIExporterDL.name=DL - UIExporterVNA.name=VNA +# UIExporterSpreadsheetPanel.name = Spreadsheet -UIExporterGDFPanel.jRadioButton1.text=Jednoduch\u00e9 uvozovky - -UIExporterGDFPanel.positionExportCheckbox.text=Um\u00edst\u011bn\u00ed (x,y) - +UIExporterGDFPanel.jRadioButton1.text=Jednoduchι uvozovky +UIExporterGDFPanel.positionExportCheckbox.text=Umνst\u011bnν (x,y) UIExporterGDFPanel.colorsExportCheckbox.text=Barvy - UIExporterGDFPanel.attributesExportCheckbox.text=Vlastnosti - -UIExporterGDFPanel.labelExport.text=Export\: - -UIExporterGDFPanel.jRadioButton2.text=Dvojit\u00e9 uvozovky - +UIExporterGDFPanel.labelExport.text=Export: +UIExporterGDFPanel.jRadioButton2.text=Dvojitι uvozovky UIExporterGDFPanel.quotesCheckbox.text=Umis\u0165uje text do uvozovek - UIExporterGDFPanel.normalizeCheckbox.text=Normalizovat - -UIExporterGDFPanel.labelQuotes.text=Zapouzd\u0159en\u00ed pole standardn\u011b pou\u017e\u00edv\u00e1 dvojit\u00e9 uvozovky - +UIExporterGDFPanel.labelQuotes.text=Zapouzd\u0159enν pole standardn\u011b pou\u017eνvα dvojitι uvozovky UIExporterGDFPanel.labelNormalize.text=Zm\u011bnit velikost a pozici mezi 0 a 1 - -UIExporterGDFPanel.simpleQuotesCheckbox.text=Jednoduch\u00e9 uvozovky - -UIExporterGDFPanel.labelQuotes1.text=Pou\u017e\u00edt jednoduch\u00e9 uvozovky m\u00edsto dvojit\u00fdch - -UIExporterGDFPanel.visibilityCheckbox.text=Viditelnost (viditeln\u00e9, \u0161t\u00edtek viditeln\u00fd) - -UIExporterGEXFPanel.labelExport.text=Export\: - +UIExporterGDFPanel.simpleQuotesCheckbox.text=Jednoduchι uvozovky +UIExporterGDFPanel.labelQuotes1.text=Pou\u017eνt jednoduchι uvozovky mνsto dvojitύch +UIExporterGDFPanel.visibilityCheckbox.text=Viditelnost (viditelnι, jmenovka je viditelnα) +UIExporterGEXFPanel.labelExport.text=Export: UIExporterGEXFPanel.attributesExportCheckbox.text=Vlastnosti - UIExporterGEXFPanel.colorsExportCheckbox.text=Barvy - -UIExporterGEXFPanel.positionExportCheckbox.text=Um\u00edst\u011bn\u00ed (x,y) - +UIExporterGEXFPanel.positionExportCheckbox.text=Umνst\u011bnν (x,y) UIExporterGEXFPanel.sizeExportCheckbox.text=Velikost - UIExporterGEXFPanel.normalizeCheckbox.text=Normalizovat - UIExporterGEXFPanel.labelNormalize.text=Zm\u011bnit velikost a pozici mezi 0 a 1 - -UIExporterGraphMLPanel.labelExport.text=Export\: - -UIExporterGraphMLPanel.positionExportCheckbox.text=Um\u00edst\u011bn\u00ed (x,y) - +UIExporterGraphMLPanel.labelExport.text=Export: +UIExporterGraphMLPanel.positionExportCheckbox.text=Umνst\u011bnν (x,y) UIExporterGraphMLPanel.normalizeCheckbox.text=Normalizovat - UIExporterGraphMLPanel.colorsExportCheckbox.text=Barvy - UIExporterGraphMLPanel.attributesExportCheckbox.text=Vlastnosti - UIExporterGraphMLPanel.sizeExportCheckbox.text=Velikost - UIExporterGraphMLPanel.labelNormalize.text=Zm\u011bnit velikost a pozici mezi 0 a 1 - -UIExporterCSVPanel.labelExport.text=Export\: - +UIExporterCSVPanel.labelExport.text=Export: UIExporterCSVPanel.nodeIdCheckbox.text=ID uzlu - -UIExporterCSVPanel.edgeWeightCheckbox.text=V\u00e1ha hrany - +UIExporterCSVPanel.edgeWeightCheckbox.text=Vαha hrany UIExporterCSVPanel.listRadio.text=Seznam - UIExporterCSVPanel.matrixRadio.text=Matice - -UIExporterCSVPanel.zeroEdgeCheckbox.text=Nula kdy\u017e nen\u00ed hrana - -UIExporterGEXFPanel.dynamicExportCheckbox.text=Dynamick\u00e9 - -UIExporterPajekPanel.labelExport.text=Export\: - -UIExporterPajekPanel.positionExportCheckbox.text=Um\u00edst\u011bn\u00ed (x,y) - -UIExporterPajekPanel.edgeWeightCheckbox.text=V\u00e1hy hran - +UIExporterCSVPanel.zeroEdgeCheckbox.text=Nula kdy\u017e nenν hrana +UIExporterGEXFPanel.dynamicExportCheckbox.text=Dynamickι +UIExporterPajekPanel.labelExport.text=Export: +UIExporterPajekPanel.positionExportCheckbox.text=Umνst\u011bnν (x,y) +UIExporterPajekPanel.edgeWeightCheckbox.text=Vαhy hran UIExporterGML.attributes.text=Vlastnosti - -UIExporterGML.exportLabel.text=Export\: - -UIExporterGML.positionLabel.text=Um\u00edst\u011bn\u00ed (x,y) - +UIExporterGML.exportLabel.text=Export: +UIExporterGML.positionLabel.text=Umνst\u011bnν (x,y) UIExporterGML.colorsLabel.text=Barvy - UIExporterGML.sizeLabel.text=Velikost - -UIExporterGML.edgeWeightLabel.text=V\u00e1ha hrany - -UIExporterGML.labelLabel.text=\u0160t\u00edtek - +UIExporterGML.edgeWeightLabel.text=Vαha hrany +UIExporterGML.labelLabel.text=Jmenovka UIExporterGML.normalize.text=Normalizovat - UIExporterGML.normalizeHintLabel.text=Zm\u011bnit velikost a pozici mezi 0 a 1 +UIExporterGML.indentationLabel.text=Odsazenν: + +# UIExporterSpreadsheetPanel.separatorLabel.text=Field separator: +# UIExporterSpreadsheetPanel.comma=Comma +# UIExporterSpreadsheetPanel.semicolon=Semicolon +# UIExporterSpreadsheetPanel.space=Space +# UIExporterSpreadsheetPanel.tab=Tab +# UIExporterSpreadsheetPanel.columnsLabel.text=Columns: +# UIExporterSpreadsheetPanel.tableLabel.text=Table +# UIExporterSpreadsheetPanel.table.nodes=Nodes +# UIExporterSpreadsheetPanel.table.edges=Edges -UIExporterGML.indentationLabel.text=Odsazen\u00ed\: diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_de.properties b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_de.properties new file mode 100644 index 0000000000..086620c796 --- /dev/null +++ b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_de.properties @@ -0,0 +1,69 @@ +OpenIDE-Module-Short-Description=Standard Exporter Benutzeroberflδche +UIExporterGDF.name=GDF +UIExporterGEXF.name=GEXF +UIExporterGML.name=GML +UIExporterGraphML.name=GraphML +UIExporterCSV.name=CSV +UIExporterPajek.name=Pajek +UIExporterDL.name=DL +UIExporterVNA.name=VNA +# UIExporterSpreadsheetPanel.name = Spreadsheet + +UIExporterGDFPanel.jRadioButton1.text=Einfache Anfόhrungszeichen +UIExporterGDFPanel.positionExportCheckbox.text=Position (x,y) +UIExporterGDFPanel.colorsExportCheckbox.text=Farben +UIExporterGDFPanel.attributesExportCheckbox.text=Attribute +UIExporterGDFPanel.labelExport.text=Export: +UIExporterGDFPanel.jRadioButton2.text=Doppelte Anfόhrungszeichen +UIExporterGDFPanel.quotesCheckbox.text=Text zitieren +UIExporterGDFPanel.normalizeCheckbox.text=Normalisieren +UIExporterGDFPanel.labelQuotes.text=Feldbegrenzung verwendet standardmδίig doppelte Anfόhrungszeichen +UIExporterGDFPanel.labelNormalize.text=Skaliere Position und Grφίe zwischen 0 und 1 +UIExporterGDFPanel.simpleQuotesCheckbox.text=Einfache Anfόhrungszeichen +UIExporterGDFPanel.labelQuotes1.text=Verwende einfache Anfόhrungszeichen statt doppelter +UIExporterGDFPanel.visibilityCheckbox.text=Sichtbarkeit (sichtbar, Beschriftung sichtbar) +UIExporterGEXFPanel.labelExport.text=Export: +UIExporterGEXFPanel.attributesExportCheckbox.text=Attribute +UIExporterGEXFPanel.colorsExportCheckbox.text=Farben +UIExporterGEXFPanel.positionExportCheckbox.text=Position (x,y,z) +UIExporterGEXFPanel.sizeExportCheckbox.text=Grφίe +UIExporterGEXFPanel.normalizeCheckbox.text=Normalisieren +UIExporterGEXFPanel.labelNormalize.text=Skaliere Position und Grφίe zwischen 0 und 1 +UIExporterGraphMLPanel.labelExport.text=Export: +UIExporterGraphMLPanel.positionExportCheckbox.text=Position (x,y) +UIExporterGraphMLPanel.normalizeCheckbox.text=Normalisieren +UIExporterGraphMLPanel.colorsExportCheckbox.text=Farben +UIExporterGraphMLPanel.attributesExportCheckbox.text=Attribute +UIExporterGraphMLPanel.sizeExportCheckbox.text=Grφίe +UIExporterGraphMLPanel.labelNormalize.text=Skaliere Position und Grφίe zwischen 0 und 1 +UIExporterCSVPanel.labelExport.text=Export: +UIExporterCSVPanel.nodeIdCheckbox.text=Knoten ID +UIExporterCSVPanel.edgeWeightCheckbox.text=Kantengewicht +UIExporterCSVPanel.listRadio.text=Liste +UIExporterCSVPanel.matrixRadio.text=Matrix +UIExporterCSVPanel.zeroEdgeCheckbox.text=Null wenn keine Kante +UIExporterGEXFPanel.dynamicExportCheckbox.text=Dynamisch +UIExporterPajekPanel.labelExport.text=Export: +UIExporterPajekPanel.positionExportCheckbox.text=Position (x,y) +UIExporterPajekPanel.edgeWeightCheckbox.text=Kantengewichte +UIExporterGML.attributes.text=Attribute +UIExporterGML.exportLabel.text=Export: +UIExporterGML.positionLabel.text=Position (x, y) +UIExporterGML.colorsLabel.text=Farben +UIExporterGML.sizeLabel.text=Grφίe +UIExporterGML.edgeWeightLabel.text=Kantengewicht +UIExporterGML.labelLabel.text=Bezeichnung +UIExporterGML.normalize.text=Normalisieren +UIExporterGML.normalizeHintLabel.text=Skaliere Position und Grφίe zwischen 0 und 1 +UIExporterGML.indentationLabel.text=Einrόckung: + +# UIExporterSpreadsheetPanel.separatorLabel.text=Field separator: +# UIExporterSpreadsheetPanel.comma=Comma +# UIExporterSpreadsheetPanel.semicolon=Semicolon +# UIExporterSpreadsheetPanel.space=Space +# UIExporterSpreadsheetPanel.tab=Tab +# UIExporterSpreadsheetPanel.columnsLabel.text=Columns: +# UIExporterSpreadsheetPanel.tableLabel.text=Table +# UIExporterSpreadsheetPanel.table.nodes=Nodes +# UIExporterSpreadsheetPanel.table.edges=Edges + diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_es.properties b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_es.properties index 8ff526426e..3c8c31d2d2 100644 --- a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_es.properties +++ b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_es.properties @@ -1,120 +1,88 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011, 2012. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-05 17\:50+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Short-Description=Interfaz de usuario de los exportadores est\u00e1ndar - +OpenIDE-Module-Short-Description=Interfaz de usuario de los exportadores estαndar UIExporterGDF.name=GDF - UIExporterGEXF.name=GEXF - UIExporterGML.name=GML - UIExporterGraphML.name=GraphML - UIExporterCSV.name=CSV - UIExporterPajek.name=Pajek - UIExporterDL.name=DL - UIExporterVNA.name=VNA - +UIExporterSpreadsheetPanel.name=Hoja de cαlculo UIExporterGDFPanel.jRadioButton1.text=Comillas simples - -UIExporterGDFPanel.positionExportCheckbox.text=Posici\u00f3n (x,y) - +UIExporterGDFPanel.positionExportCheckbox.text=Posiciσn (x,y) UIExporterGDFPanel.colorsExportCheckbox.text=Colores - UIExporterGDFPanel.attributesExportCheckbox.text=Atributos - -UIExporterGDFPanel.labelExport.text=Exportar\: - +UIExporterGDFPanel.labelExport.text=Exportar: UIExporterGDFPanel.jRadioButton2.text=Comillas dobles - UIExporterGDFPanel.quotesCheckbox.text=Texto entre comillas - UIExporterGDFPanel.normalizeCheckbox.text=Normalizar - -UIExporterGDFPanel.labelQuotes.text=La encapsulaci\u00f3n de los campos usa comillas dobles por defecto - -UIExporterGDFPanel.labelNormalize.text=Escalar posici\u00f3n y tama\u00f1o entre 0 y 1 - +UIExporterGDFPanel.labelQuotes.text=La encapsulaciσn de los campos usa comillas dobles por defecto +UIExporterGDFPanel.labelNormalize.text=Escalar posiciσn y tamaρo entre 0 y 1 UIExporterGDFPanel.simpleQuotesCheckbox.text=Comillas simples - UIExporterGDFPanel.labelQuotes1.text=Usar comillas simples en lugar de comillas dobles - UIExporterGDFPanel.visibilityCheckbox.text=Visibilidad (grafo visible, etiquetas visibles) - -UIExporterGEXFPanel.labelExport.text=Exportar\: - +UIExporterGEXFPanel.labelExport.text=Exportar: UIExporterGEXFPanel.attributesExportCheckbox.text=Atributos - UIExporterGEXFPanel.colorsExportCheckbox.text=Colores - -UIExporterGEXFPanel.positionExportCheckbox.text=Posici\u00f3n (x,y) - -UIExporterGEXFPanel.sizeExportCheckbox.text=Tama\u00f1o - +UIExporterGEXFPanel.positionExportCheckbox.text=Posiciσn (x,y) +UIExporterGEXFPanel.sizeExportCheckbox.text=Tamaρo UIExporterGEXFPanel.normalizeCheckbox.text=Normalizar - -UIExporterGEXFPanel.labelNormalize.text=Escalar posici\u00f3n y tama\u00f1o entre 0 y 1 - -UIExporterGraphMLPanel.labelExport.text=Exportar\: - -UIExporterGraphMLPanel.positionExportCheckbox.text=Posici\u00f3n (x,y) - +UIExporterGEXFPanel.labelNormalize.text=Escalar posiciσn y tamaρo entre 0 y 1 +UIExporterGraphMLPanel.labelExport.text=Exportar: +UIExporterGraphMLPanel.positionExportCheckbox.text=Posiciσn (x,y) UIExporterGraphMLPanel.normalizeCheckbox.text=Normalizar - UIExporterGraphMLPanel.colorsExportCheckbox.text=Colores - UIExporterGraphMLPanel.attributesExportCheckbox.text=Atributos - -UIExporterGraphMLPanel.sizeExportCheckbox.text=Tama\u00f1o - -UIExporterGraphMLPanel.labelNormalize.text=Escalar tama\u00f1o y posici\u00f3n entre 0 y 1 - -UIExporterCSVPanel.labelExport.text=Exportar\: - +UIExporterGraphMLPanel.sizeExportCheckbox.text=Tamaρo +UIExporterGraphMLPanel.labelNormalize.text=Escalar tamaρo y posiciσn entre 0 y 1 +UIExporterCSVPanel.labelExport.text=Exportar: UIExporterCSVPanel.nodeIdCheckbox.text=ID de nodo - UIExporterCSVPanel.edgeWeightCheckbox.text=Peso de arista - UIExporterCSVPanel.listRadio.text=Lista - UIExporterCSVPanel.matrixRadio.text=Matriz - UIExporterCSVPanel.zeroEdgeCheckbox.text=Cero cuando no hay arista - -UIExporterGEXFPanel.dynamicExportCheckbox.text=Din\u00e1mico - -UIExporterPajekPanel.labelExport.text=Exportar\: - -UIExporterPajekPanel.positionExportCheckbox.text=Posici\u00f3n (x,y) - +UIExporterGEXFPanel.dynamicExportCheckbox.text=Dinαmico +UIExporterPajekPanel.labelExport.text=Exportar: +UIExporterPajekPanel.positionExportCheckbox.text=Posiciσn (x,y) UIExporterPajekPanel.edgeWeightCheckbox.text=Peso de arista - UIExporterGML.attributes.text=Atributos - -UIExporterGML.exportLabel.text=Exportar\: - -UIExporterGML.positionLabel.text=Posici\u00f3n (x,y) - +UIExporterGML.exportLabel.text=Exportar: +UIExporterGML.positionLabel.text=Posiciσn (x,y) UIExporterGML.colorsLabel.text=Colores - -UIExporterGML.sizeLabel.text=Tama\u00f1o - +UIExporterGML.sizeLabel.text=Tamaρo UIExporterGML.edgeWeightLabel.text=Peso de aristas - UIExporterGML.labelLabel.text=Etiqueta - UIExporterGML.normalize.text=Normalizar - -UIExporterGML.normalizeHintLabel.text=Escalar posici\u00f3n y tama\u00f1o entre 0 y 1 - -UIExporterGML.indentationLabel.text=Indentaci\u00f3n\: +UIExporterGML.normalizeHintLabel.text=Escalar posiciσn y tamaρo entre 0 y 1 +UIExporterGML.indentationLabel.text=Sangr\u00EDa: +UIExporterSpreadsheetPanel.separatorLabel.text=Separador de campos: +UIExporterSpreadsheetPanel.comma=Coma +UIExporterSpreadsheetPanel.semicolon=Punto y coma +UIExporterSpreadsheetPanel.space=Espacio +UIExporterSpreadsheetPanel.tab=Tabulador +UIExporterSpreadsheetPanel.columnsLabel.text=Columnas: +UIExporterSpreadsheetPanel.tableLabel.text=Tabla +UIExporterSpreadsheetPanel.table.nodes=Nodos +UIExporterSpreadsheetPanel.table.edges=Aristas +UIExporterJsonPanel.positionExportCheckbox.text=Posici\u00F3n (x,y,z) +UIExporterJson.name=Json +UIExporterJsonPanel.normalizeCheckbox.text=Normalizar +UIExporterSpreadsheetPanel.sizeExportCheckbox.text=Tama\u00F1o +UIExporterJsonPanel.sizeExportCheckbox.text=Tama\u00F1o +UIExporterSpreadsheetPanel.labelNormalize.text=Escala la posici\u00F3n y el tama\u00F1o entre 0 y 1 +UIExporterJsonPanel.attributesExportCheckbox.text=Atributos +UIExporterSpreadsheetPanel.decimalSeparatorLabel.text=Separador decimal: +UIExporterSpreadsheetPanel.dot=Punto +UIExporterSpreadsheetPanel.attributesExportCheckbox.text=Atributos +UIExporterJsonPanel.labelExport.text=Exportar: +UIExporterJsonPanel.dynamicExportCheckbox.text=Din\u00E1mico +UIExporterSpreadsheetPanel.colorsExportCheckbox.text=Colores +UIExporterSpreadsheetPanel.labelExport.text=Exportar: +UIExporterSpreadsheetPanel.normalizeCheckbox.text=Normalizar +UIExporterSpreadsheetPanel.dynamicExportCheckbox.text=Din\u00E1mico +UIExporterJsonPanel.colorsExportCheckbox.text=Colores +UIExporterSpreadsheetPanel.positionExportCheckbox.text=Posici\u00F3n (x,y,z) +UIExporterJsonPanel.labelFormat.text=Formato: +UIExporterGEXFPanel.includeAttValuesNullCheckbox.text=Incluir valores de atributo nulos +UIExporterJsonPanel.prettyPrintCheckbox.text=Bonita impresi\u00F3n +UIExporterJsonPanel.labelNormalize.text=Escala la posici\u00F3n y el tama\u00F1o entre 0 y 1 diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_fa.properties b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_fa.properties new file mode 100644 index 0000000000..a01366c5fb --- /dev/null +++ b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_fa.properties @@ -0,0 +1,9 @@ +UIExporterGDFPanel.positionExportCheckbox.text=\u0645\u0648\u0642\u0639\u06CC\u062A (x,y) +UIExporterGDFPanel.colorsExportCheckbox.text=\u0631\u0646\u06AF\u200C\u0647\u0627 +UIExporterGDFPanel.attributesExportCheckbox.text=\u0648\u06CC\u0698\u06AF\u06CC\u200C\u0647\u0627 +UIExporterGDFPanel.labelExport.text=\u062E\u0631\u0648\u062C\u06CC: +UIExporterGDFPanel.quotesCheckbox.text=\u0645\u062D\u0635\u0648\u0631 \u06A9\u0631\u062F\u0646 \u0645\u062A\u0646\u200C\u0647\u0627 \u062F\u0631 \u0639\u0644\u0627\u0645\u062A \u0646\u0642\u0644\u200C\u0642\u0648\u0644 +UIExporterGDFPanel.normalizeCheckbox.text=\u0646\u0631\u0645\u0627\u0644\u200C\u0633\u0627\u0632\u06CC +UIExporterGDFPanel.jRadioButton2.text=\u0639\u0644\u0627\u0645\u062A \u0646\u0642\u0644 \u0642\u0648\u0644 \u062F\u0648\u062A\u0627\u06CC\u06CC +UIExporterGDFPanel.jRadioButton1.text=\u0639\u0644\u0627\u0645\u062A \u0646\u0642\u0644 \u0642\u0648\u0644 \u062A\u06A9\u06CC +UIExporterGEXFPanel.labelExport.text=\u062E\u0631\u0648\u062C\u06CC: diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_fr.properties b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_fr.properties index b3ace43a91..d85706c275 100644 --- a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_fr.properties +++ b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_fr.properties @@ -1,120 +1,66 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-08 15\:18+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - OpenIDE-Module-Short-Description=Interface utilisateur des exporteurs standards - UIExporterGDF.name=GDF - UIExporterGEXF.name=GEXF - UIExporterGML.name=GML - UIExporterGraphML.name=GraphML - UIExporterCSV.name=CSV - UIExporterPajek.name=Pajek - UIExporterDL.name=DL - UIExporterVNA.name=VNA - +UIExporterSpreadsheetPanel.name=Feuille de calcul UIExporterGDFPanel.jRadioButton1.text=Guillemets simples - UIExporterGDFPanel.positionExportCheckbox.text=Position (x,y) - UIExporterGDFPanel.colorsExportCheckbox.text=Couleurs - UIExporterGDFPanel.attributesExportCheckbox.text=Attributs - -UIExporterGDFPanel.labelExport.text=Export \: - +UIExporterGDFPanel.labelExport.text=Export : UIExporterGDFPanel.jRadioButton2.text=Guillemets doubles - UIExporterGDFPanel.quotesCheckbox.text=Texte entre guillemets - UIExporterGDFPanel.normalizeCheckbox.text=Normaliser - -UIExporterGDFPanel.labelQuotes.text=L'encapsulation des champs prend des guillemets doubles par d\u00e9faut - -UIExporterGDFPanel.labelNormalize.text=R\u00e9duit les positions et tailles entre 0 et 1 - +UIExporterGDFPanel.labelQuotes.text=L'encapsulation des champs prend des guillemets doubles par dιfaut +UIExporterGDFPanel.labelNormalize.text=Rιduit les positions et tailles entre 0 et 1 UIExporterGDFPanel.simpleQuotesCheckbox.text=Guillemets simples - -UIExporterGDFPanel.labelQuotes1.text=Utiliser les guillemets simples \u00e0 la place des guillemets doubles - -UIExporterGDFPanel.visibilityCheckbox.text=Visibilit\u00e9 (graphe visible, labels visibles) - -UIExporterGEXFPanel.labelExport.text=Export \: - +UIExporterGDFPanel.labelQuotes1.text=Utiliser les guillemets simples ΰ la place des guillemets doubles +UIExporterGDFPanel.visibilityCheckbox.text=Visibilitι (graphe visible, labels visibles) +UIExporterGEXFPanel.labelExport.text=Export : UIExporterGEXFPanel.attributesExportCheckbox.text=Attributs - UIExporterGEXFPanel.colorsExportCheckbox.text=Couleurs - UIExporterGEXFPanel.positionExportCheckbox.text=Position (x,y) - UIExporterGEXFPanel.sizeExportCheckbox.text=Taille - UIExporterGEXFPanel.normalizeCheckbox.text=Normaliser - -UIExporterGEXFPanel.labelNormalize.text=R\u00e9duit les positions et tailles entre 0 et 1 - -UIExporterGraphMLPanel.labelExport.text=Export \: - +UIExporterGEXFPanel.labelNormalize.text=Rιduit les positions et tailles entre 0 et 1 +UIExporterGraphMLPanel.labelExport.text=Export : UIExporterGraphMLPanel.positionExportCheckbox.text=Position (x,y) - UIExporterGraphMLPanel.normalizeCheckbox.text=Normaliser - UIExporterGraphMLPanel.colorsExportCheckbox.text=Couleurs - UIExporterGraphMLPanel.attributesExportCheckbox.text=Attributs - UIExporterGraphMLPanel.sizeExportCheckbox.text=Taille - -UIExporterGraphMLPanel.labelNormalize.text=R\u00e9duit les positions et tailles entre 0 et 1 - -UIExporterCSVPanel.labelExport.text=Export \: - +UIExporterGraphMLPanel.labelNormalize.text=Rιduit les positions et tailles entre 0 et 1 +UIExporterCSVPanel.labelExport.text=Export : UIExporterCSVPanel.nodeIdCheckbox.text=ID de noeud - UIExporterCSVPanel.edgeWeightCheckbox.text=Poids des liens - UIExporterCSVPanel.listRadio.text=Liste - UIExporterCSVPanel.matrixRadio.text=Matrice - UIExporterCSVPanel.zeroEdgeCheckbox.text=Zero si aucun lien - UIExporterGEXFPanel.dynamicExportCheckbox.text=Dynamique - -UIExporterPajekPanel.labelExport.text=Export \: - +UIExporterPajekPanel.labelExport.text=Export : UIExporterPajekPanel.positionExportCheckbox.text=Position (x,y) - UIExporterPajekPanel.edgeWeightCheckbox.text=Poids des liens - UIExporterGML.attributes.text=Attributs - -UIExporterGML.exportLabel.text=Export \: - +UIExporterGML.exportLabel.text=Export : UIExporterGML.positionLabel.text=Position (x, y) - UIExporterGML.colorsLabel.text=Couleurs - UIExporterGML.sizeLabel.text=Taille - UIExporterGML.edgeWeightLabel.text=Poids des poids - UIExporterGML.labelLabel.text=Label - UIExporterGML.normalize.text=Normaliser - -UIExporterGML.normalizeHintLabel.text=R\u00e9duit les positions et tailles entre 0 et 1 - -UIExporterGML.indentationLabel.text=Indentation \: +UIExporterGML.normalizeHintLabel.text=Rιduit les positions et tailles entre 0 et 1 +UIExporterGML.indentationLabel.text=Indentation : +UIExporterSpreadsheetPanel.separatorLabel.text=Sιparateur : +UIExporterSpreadsheetPanel.comma=Virgule +UIExporterSpreadsheetPanel.semicolon=Point-virgule +UIExporterSpreadsheetPanel.space=Espace +UIExporterSpreadsheetPanel.tab=Tabulation +UIExporterSpreadsheetPanel.columnsLabel.text=Colonnes: +UIExporterSpreadsheetPanel.tableLabel.text=Table +UIExporterSpreadsheetPanel.table.nodes=N\u0153uds +UIExporterSpreadsheetPanel.table.edges=Liens diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_he.properties b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_he.properties new file mode 100644 index 0000000000..05642f76c3 --- /dev/null +++ b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_he.properties @@ -0,0 +1,66 @@ +OpenIDE-Module-Short-Description=Standard exporters UI +UIExporterGDF.name=GDF +UIExporterGEXF.name=GEXF +UIExporterGML.name=GML +UIExporterGraphML.name=GraphML +UIExporterCSV.name=CSV +UIExporterPajek.name=Pajek +UIExporterDL.name=DL +UIExporterVNA.name=VNA +UIExporterSpreadsheetPanel.name=Spreadsheet +UIExporterGDFPanel.jRadioButton1.text=Simple quotes +UIExporterGDFPanel.positionExportCheckbox.text=Position (x,y) +UIExporterGDFPanel.colorsExportCheckbox.text=Colors +UIExporterGDFPanel.attributesExportCheckbox.text=Attributes +UIExporterGDFPanel.labelExport.text=Export: +UIExporterGDFPanel.jRadioButton2.text=Double quotes +UIExporterGDFPanel.quotesCheckbox.text=Quotes text +UIExporterGDFPanel.normalizeCheckbox.text=Normalize +UIExporterGDFPanel.labelQuotes.text=Field encapsulation use double quotes by default +UIExporterGDFPanel.labelNormalize.text=Scale position and size between 0 and 1 +UIExporterGDFPanel.simpleQuotesCheckbox.text=Simple quotes +UIExporterGDFPanel.labelQuotes1.text=Use simple quotes instead of double quotes +UIExporterGDFPanel.visibilityCheckbox.text=Visibility (visible, label visible) +UIExporterGEXFPanel.labelExport.text=Export: +UIExporterGEXFPanel.attributesExportCheckbox.text=Attributes +UIExporterGEXFPanel.colorsExportCheckbox.text=Colors +UIExporterGEXFPanel.positionExportCheckbox.text=Position (x,y,z) +UIExporterGEXFPanel.sizeExportCheckbox.text=Size +UIExporterGEXFPanel.normalizeCheckbox.text=Normalize +UIExporterGEXFPanel.labelNormalize.text=Scale position and size between 0 and 1 +UIExporterGraphMLPanel.labelExport.text=Export: +UIExporterGraphMLPanel.positionExportCheckbox.text=Position (x,y) +UIExporterGraphMLPanel.normalizeCheckbox.text=Normalize +UIExporterGraphMLPanel.colorsExportCheckbox.text=Colors +UIExporterGraphMLPanel.attributesExportCheckbox.text=Attributes +UIExporterGraphMLPanel.sizeExportCheckbox.text=Size +UIExporterGraphMLPanel.labelNormalize.text=Scale position and size between 0 and 1 +UIExporterCSVPanel.labelExport.text=Export: +UIExporterCSVPanel.nodeIdCheckbox.text=Node ID +UIExporterCSVPanel.edgeWeightCheckbox.text=Edge Weight +UIExporterCSVPanel.listRadio.text=List +UIExporterCSVPanel.matrixRadio.text=Matrix +UIExporterCSVPanel.zeroEdgeCheckbox.text=Zero when no edge +UIExporterGEXFPanel.dynamicExportCheckbox.text=Dynamic +UIExporterPajekPanel.labelExport.text=Export: +UIExporterPajekPanel.positionExportCheckbox.text=Position (x,y) +UIExporterPajekPanel.edgeWeightCheckbox.text=Edge weights +UIExporterGML.attributes.text=Attributes +UIExporterGML.exportLabel.text=Export: +UIExporterGML.positionLabel.text=Position (x, y) +UIExporterGML.colorsLabel.text=Colors +UIExporterGML.sizeLabel.text=Size +UIExporterGML.edgeWeightLabel.text=Edge weight +UIExporterGML.labelLabel.text=\u05ea\u05d5\u05d5\u05d9\u05ea +UIExporterGML.normalize.text=Normalize +UIExporterGML.normalizeHintLabel.text=Scale position and size between 0 and 1 +UIExporterGML.indentationLabel.text=Indentation: +UIExporterSpreadsheetPanel.separatorLabel.text=Field separator: +UIExporterSpreadsheetPanel.comma=Comma +UIExporterSpreadsheetPanel.semicolon=Semicolon +UIExporterSpreadsheetPanel.space=Space +UIExporterSpreadsheetPanel.tab=Tab +UIExporterSpreadsheetPanel.columnsLabel.text=Columns: +UIExporterSpreadsheetPanel.tableLabel.text=Table +UIExporterSpreadsheetPanel.table.nodes=Nodes +UIExporterSpreadsheetPanel.table.edges=Edges diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_hu.properties b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_hu.properties new file mode 100644 index 0000000000..d3a12b37fd --- /dev/null +++ b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_hu.properties @@ -0,0 +1,90 @@ + + +UIExporterGEXFPanel.labelExport.text=Export: +UIExporterCSV.name=CSV +UIExporterGML.indentationLabel.text=Beh\u00FAz\u00E1s: +UIExporterGDFPanel.visibilityCheckbox.text=L\u00E1that\u00F3s\u00E1g (l\u00E1that\u00F3, c\u00EDmke l\u00E1that\u00F3) +UIExporterJsonPanel.positionExportCheckbox.text=Poz\u00EDci\u00F3 (x,y) +UIExporterSpreadsheetPanel.name=T\u00E1bl\u00E1zat +UIExporterGEXFPanel.normalizeCheckbox.text=Normaliz\u00E1l\u00E1s +UIExporterGML.attributes.text=Attrib\u00FAtumok +UIExporterSpreadsheetPanel.comma=Vessz\u0151 +UIExporterGraphML.name=GraphML +UIExporterGraphMLPanel.labelNormalize.text=Sk\u00E1lapoz\u00EDci\u00F3 \u00E9s m\u00E9ret 0 \u00E9s 1 k\u00F6z\u00F6tt +UIExporterJson.name=Json +UIExporterPajekPanel.positionExportCheckbox.text=Poz\u00EDci\u00F3 (x,y) +UIExporterDL.name=DL +UIExporterGraphMLPanel.positionExportCheckbox.text=Poz\u00EDci\u00F3 (x,y) +UIExporterGraphMLPanel.normalizeCheckbox.text=Normaliz\u00E1l\u00E1s +UIExporterCSVPanel.zeroEdgeCheckbox.text=Nulla, ha nincs \u00E9l +UIExporterJsonPanel.normalizeCheckbox.text=Normaliz\u00E1l\u00E1s +UIExporterGraphMLPanel.colorsExportCheckbox.text=Sz\u00EDnek +UIExporterSpreadsheetPanel.sizeExportCheckbox.text=M\u00E9ret +UIExporterCSVPanel.listRadio.text=Lista +UIExporterSpreadsheetPanel.table.nodes=Csom\u00F3pontok +UIExporterGML.normalizeHintLabel.text=Sk\u00E1lapoz\u00EDci\u00F3 \u00E9s m\u00E9ret 0 \u00E9s 1 k\u00F6z\u00F6tt +UIExporterJsonPanel.sizeExportCheckbox.text=M\u00E9ret +UIExporterGDFPanel.labelQuotes1.text=Dupla id\u00E9z\u0151jelek helyett egyszer\u0171 id\u00E9z\u0151jeleket haszn\u00E1ljon +UIExporterSpreadsheetPanel.labelNormalize.text=Sk\u00E1lapoz\u00EDci\u00F3 \u00E9s m\u00E9ret 0 \u00E9s 1 k\u00F6z\u00F6tt +UIExporterJsonPanel.attributesExportCheckbox.text=Attrib\u00FAtumok +UIExporterSpreadsheetPanel.decimalSeparatorLabel.text=Tizedes elv\u00E1laszt\u00F3: +UIExporterPajekPanel.labelExport.text=Export: +UIExporterSpreadsheetPanel.columnsLabel.text=Oszlopok: +UIExporterGDFPanel.attributesExportCheckbox.text=Attrib\u00FAtumok +UIExporterGML.positionLabel.text=Poz\u00EDci\u00F3 (x,y) +UIExporterGML.labelLabel.text=C\u00EDmke +UIExporterSpreadsheetPanel.dot=Pont +UIExporterGML.sizeLabel.text=M\u00E9ret +UIExporterSpreadsheetPanel.attributesExportCheckbox.text=Attrib\u00FAtumok +UIExporterGML.exportLabel.text=Export: +UIExporterSpreadsheetPanel.semicolon=Pontosvessz\u0151 +UIExporterGDF.name=GDF +UIExporterGEXFPanel.attributesExportCheckbox.text=Attrib\u00FAtumok +UIExporterCSVPanel.labelExport.text=Export: +UIExporterJsonPanel.labelExport.text=Export: +UIExporterCSVPanel.edgeWeightCheckbox.text=\u00C9ls\u00FAly +UIExporterGDFPanel.normalizeCheckbox.text=Normaliz\u00E1l\u00E1s +UIExporterVNA.name=VNA +UIExporterJsonPanel.dynamicExportCheckbox.text=Dinamikus +UIExporterGDFPanel.quotesCheckbox.text=Id\u00E9zetek sz\u00F6vege +UIExporterGDFPanel.labelExport.text=Export: +UIExporterSpreadsheetPanel.colorsExportCheckbox.text=Sz\u00EDnek +UIExporterGDFPanel.simpleQuotesCheckbox.text=Egyszer\u0171 id\u00E9zetek +UIExporterGML.colorsLabel.text=Sz\u00EDnek +UIExporterSpreadsheetPanel.separatorLabel.text=Mez\u0151elv\u00E1laszt\u00F3: +UIExporterSpreadsheetPanel.labelExport.text=Export: +UIExporterGDFPanel.labelNormalize.text=Sk\u00E1lapoz\u00EDci\u00F3 \u00E9s m\u00E9ret 0 \u00E9s 1 k\u00F6z\u00F6tt +UIExporterGDFPanel.jRadioButton2.text=Dupla id\u00E9z\u0151jelek +UIExporterSpreadsheetPanel.space=Hely +UIExporterPajek.name=Pajek +UIExporterGDFPanel.labelQuotes.text=A mez\u0151be\u00E1gyaz\u00E1s alap\u00E9rtelmez\u00E9s szerint dupla id\u00E9z\u0151jeleket haszn\u00E1l +UIExporterGraphMLPanel.sizeExportCheckbox.text=M\u00E9ret +UIExporterSpreadsheetPanel.normalizeCheckbox.text=Normaliz\u00E1l\u00E1s +UIExporterSpreadsheetPanel.dynamicExportCheckbox.text=Dinamikus +UIExporterJsonPanel.colorsExportCheckbox.text=Sz\u00EDnek +UIExporterSpreadsheetPanel.positionExportCheckbox.text=Poz\u00EDci\u00F3 (x,y) +UIExporterSpreadsheetPanel.table.edges=\u00C9lek +OpenIDE-Module-Short-Description=Szabv\u00E1nyos export\u0151r\u00F6k felhaszn\u00E1l\u00F3i fel\u00FClete +UIExporterGEXFPanel.colorsExportCheckbox.text=Sz\u00EDnek +UIExporterGEXFPanel.dynamicExportCheckbox.text=Dinamikus +UIExporterGML.normalize.text=Normaliz\u00E1l\u00E1s +UIExporterCSVPanel.nodeIdCheckbox.text=csom\u00F3pont azonos\u00EDt\u00F3ja +UIExporterGraphMLPanel.attributesExportCheckbox.text=Attrib\u00FAtumok +UIExporterCSVPanel.matrixRadio.text=Matrix +UIExporterGraphMLPanel.labelExport.text=Export: +UIExporterGEXF.name=GEXF +UIExporterGDFPanel.colorsExportCheckbox.text=Sz\u00EDnek +UIExporterGDFPanel.jRadioButton1.text=Egyszer\u0171 id\u00E9zetek +UIExporterJsonPanel.labelFormat.text=Form\u00E1tum: +UIExporterGML.edgeWeightLabel.text=\u00C9ls\u00FAly +UIExporterGEXFPanel.sizeExportCheckbox.text=M\u00E9ret +UIExporterSpreadsheetPanel.tableLabel.text=T\u00E1bl\u00E1zat +UIExporterGEXFPanel.labelNormalize.text=Sk\u00E1lapoz\u00EDci\u00F3 \u00E9s m\u00E9ret 0 \u00E9s 1 k\u00F6z\u00F6tt +UIExporterPajekPanel.edgeWeightCheckbox.text=\u00C9ls\u00FAly +UIExporterGEXFPanel.includeAttValuesNullCheckbox.text=Tartalmazza a null attrib\u00FAtum\u00E9rt\u00E9keket +UIExporterGDFPanel.positionExportCheckbox.text=Poz\u00EDci\u00F3 (x,y) +UIExporterGML.name=GML +UIExporterJsonPanel.prettyPrintCheckbox.text=Sz\u00E9p nyomat +UIExporterJsonPanel.labelNormalize.text=Sk\u00E1lapoz\u00EDci\u00F3 \u00E9s m\u00E9ret 0 \u00E9s 1 k\u00F6z\u00F6tt +UIExporterGEXFPanel.positionExportCheckbox.text=Poz\u00EDci\u00F3 (xy,z) +UIExporterSpreadsheetPanel.tab=Lap diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_it.properties b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_it.properties new file mode 100644 index 0000000000..214481e84b --- /dev/null +++ b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_it.properties @@ -0,0 +1,66 @@ +OpenIDE-Module-Short-Description=Standard exporters UI +UIExporterGDF.name=GDF +UIExporterGEXF.name=GEXF +UIExporterGML.name=GML +UIExporterGraphML.name=GraphML +UIExporterCSV.name=CSV +UIExporterPajek.name=Pajek +UIExporterDL.name=DL +UIExporterVNA.name=VNA +UIExporterSpreadsheetPanel.name=Spreadsheet +UIExporterGDFPanel.jRadioButton1.text=Simple quotes +UIExporterGDFPanel.positionExportCheckbox.text=Position (x,y) +UIExporterGDFPanel.colorsExportCheckbox.text=Colors +UIExporterGDFPanel.attributesExportCheckbox.text=Attributes +UIExporterGDFPanel.labelExport.text=Esporta: +UIExporterGDFPanel.jRadioButton2.text=Double quotes +UIExporterGDFPanel.quotesCheckbox.text=Quotes text +UIExporterGDFPanel.normalizeCheckbox.text=Normalize +UIExporterGDFPanel.labelQuotes.text=Field encapsulation use double quotes by default +UIExporterGDFPanel.labelNormalize.text=Scale position and size between 0 and 1 +UIExporterGDFPanel.simpleQuotesCheckbox.text=Simple quotes +UIExporterGDFPanel.labelQuotes1.text=Use simple quotes instead of double quotes +UIExporterGDFPanel.visibilityCheckbox.text=Visibility (visible, label visible) +UIExporterGEXFPanel.labelExport.text=Esporta: +UIExporterGEXFPanel.attributesExportCheckbox.text=Attributes +UIExporterGEXFPanel.colorsExportCheckbox.text=Colors +UIExporterGEXFPanel.positionExportCheckbox.text=Position (x,y,z) +UIExporterGEXFPanel.sizeExportCheckbox.text=Size +UIExporterGEXFPanel.normalizeCheckbox.text=Normalize +UIExporterGEXFPanel.labelNormalize.text=Scale position and size between 0 and 1 +UIExporterGraphMLPanel.labelExport.text=Esporta: +UIExporterGraphMLPanel.positionExportCheckbox.text=Position (x,y) +UIExporterGraphMLPanel.normalizeCheckbox.text=Normalize +UIExporterGraphMLPanel.colorsExportCheckbox.text=Colors +UIExporterGraphMLPanel.attributesExportCheckbox.text=Attributes +UIExporterGraphMLPanel.sizeExportCheckbox.text=Size +UIExporterGraphMLPanel.labelNormalize.text=Scale position and size between 0 and 1 +UIExporterCSVPanel.labelExport.text=Esporta: +UIExporterCSVPanel.nodeIdCheckbox.text=Node ID +UIExporterCSVPanel.edgeWeightCheckbox.text=Edge Weight +UIExporterCSVPanel.listRadio.text=List +UIExporterCSVPanel.matrixRadio.text=Matrix +UIExporterCSVPanel.zeroEdgeCheckbox.text=Zero when no edge +UIExporterGEXFPanel.dynamicExportCheckbox.text=Dynamic +UIExporterPajekPanel.labelExport.text=Esporta: +UIExporterPajekPanel.positionExportCheckbox.text=Position (x,y) +UIExporterPajekPanel.edgeWeightCheckbox.text=Edge weights +UIExporterGML.attributes.text=Attributes +UIExporterGML.exportLabel.text=Esporta: +UIExporterGML.positionLabel.text=Position (x, y) +UIExporterGML.colorsLabel.text=Colors +UIExporterGML.sizeLabel.text=Size +UIExporterGML.edgeWeightLabel.text=Edge weight +UIExporterGML.labelLabel.text=Label +UIExporterGML.normalize.text=Normalize +UIExporterGML.normalizeHintLabel.text=Scale position and size between 0 and 1 +UIExporterGML.indentationLabel.text=Indentation: +UIExporterSpreadsheetPanel.separatorLabel.text=Field separator: +UIExporterSpreadsheetPanel.comma=Comma +UIExporterSpreadsheetPanel.semicolon=Semicolon +UIExporterSpreadsheetPanel.space=Space +UIExporterSpreadsheetPanel.tab=Tab +UIExporterSpreadsheetPanel.columnsLabel.text=Columns: +UIExporterSpreadsheetPanel.tableLabel.text=Table +UIExporterSpreadsheetPanel.table.nodes=Nodes +UIExporterSpreadsheetPanel.table.edges=Edges diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_ja.properties b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_ja.properties index bafae02893..24790f4b7f 100644 --- a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_ja.properties +++ b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_ja.properties @@ -1,119 +1,69 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-15 10\:53+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - OpenIDE-Module-Short-Description=\u6a19\u6e96\u30a8\u30af\u30b9\u30dd\u30fc\u30bfUI - UIExporterGDF.name=GDF - UIExporterGEXF.name=GEXF - UIExporterGML.name=GML - UIExporterGraphML.name=GraphML - UIExporterCSV.name=CSV - UIExporterPajek.name=Pajek - UIExporterDL.name=DL - UIExporterVNA.name=VNA +# UIExporterSpreadsheetPanel.name = Spreadsheet UIExporterGDFPanel.jRadioButton1.text=\u5358\u4e00\u5f15\u7528\u7b26 - UIExporterGDFPanel.positionExportCheckbox.text=\u4f4d\u7f6e(x,y) - UIExporterGDFPanel.colorsExportCheckbox.text=\u8272 - UIExporterGDFPanel.attributesExportCheckbox.text=\u5c5e\u6027 - -UIExporterGDFPanel.labelExport.text=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\: - +UIExporterGDFPanel.labelExport.text=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8: UIExporterGDFPanel.jRadioButton2.text=\u4e8c\u91cd\u5f15\u7528\u7b26 - UIExporterGDFPanel.quotesCheckbox.text=\u5f15\u7528\u30c6\u30ad\u30b9\u30c8 - UIExporterGDFPanel.normalizeCheckbox.text=\u6b63\u898f\u5316 - UIExporterGDFPanel.labelQuotes.text=\u30d5\u30a3\u30fc\u30eb\u30c9\u306e\u30ab\u30d7\u30bb\u30eb\u5316\u306f\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u3067\u306f\u3001\u4e8c\u91cd\u5f15\u7528\u7b26\u3092\u4f7f\u7528\u3059\u308b - UIExporterGDFPanel.labelNormalize.text=0\u30681\u306e\u9593\u306e\u30b9\u30b1\u30fc\u30eb\u306e\u4f4d\u7f6e\u3068\u30b5\u30a4\u30ba - UIExporterGDFPanel.simpleQuotesCheckbox.text=\u5358\u4e00\u5f15\u7528\u7b26 - UIExporterGDFPanel.labelQuotes1.text=\u4e8c\u91cd\u5f15\u7528\u7b26\u306e\u4ee3\u308f\u308a\u306b\u5358\u4e00\u5f15\u7528\u7b26\u3092\u4f7f\u7528 - UIExporterGDFPanel.visibilityCheckbox.text=\u53ef\u8996\u6027(\u53ef\u8996\u3001\u53ef\u8996\u30e9\u30d9\u30eb) - -UIExporterGEXFPanel.labelExport.text=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\: - +UIExporterGEXFPanel.labelExport.text=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8: UIExporterGEXFPanel.attributesExportCheckbox.text=\u5c5e\u6027 - UIExporterGEXFPanel.colorsExportCheckbox.text=\u8272 - UIExporterGEXFPanel.positionExportCheckbox.text=\u4f4d\u7f6e (x,y,z) - UIExporterGEXFPanel.sizeExportCheckbox.text=\u5927\u304d\u3055 - UIExporterGEXFPanel.normalizeCheckbox.text=\u6b63\u898f\u5316 - UIExporterGEXFPanel.labelNormalize.text=\u4f4d\u7f6e\u3068\u5927\u304d\u3055\u30920\u30681\u306e\u9593\u3067\u8868\u3059 - -UIExporterGraphMLPanel.labelExport.text=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\: - +UIExporterGraphMLPanel.labelExport.text=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8: UIExporterGraphMLPanel.positionExportCheckbox.text=\u4f4d\u7f6e (x,y) - UIExporterGraphMLPanel.normalizeCheckbox.text=\u6b63\u898f\u5316 - UIExporterGraphMLPanel.colorsExportCheckbox.text=\u8272 - UIExporterGraphMLPanel.attributesExportCheckbox.text=\u5c5e\u6027 - UIExporterGraphMLPanel.sizeExportCheckbox.text=\u5927\u304d\u3055 - UIExporterGraphMLPanel.labelNormalize.text=\u4f4d\u7f6e\u3068\u5927\u304d\u3055\u30920\u30681\u306e\u9593\u3067\u8868\u3059 - UIExporterCSVPanel.labelExport.text=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8 - UIExporterCSVPanel.nodeIdCheckbox.text=\u30ce\u30fc\u30c9ID - UIExporterCSVPanel.edgeWeightCheckbox.text=\u8fba\u306e\u91cd\u307f - UIExporterCSVPanel.listRadio.text=\u30ea\u30b9\u30c8 - UIExporterCSVPanel.matrixRadio.text=\u884c\u5217 - UIExporterCSVPanel.zeroEdgeCheckbox.text=\u8fba\u304c\u306a\u3044\u3068\u304d\u30bc\u30ed - UIExporterGEXFPanel.dynamicExportCheckbox.text=\u52d5\u7684 - -UIExporterPajekPanel.labelExport.text=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\: - +UIExporterPajekPanel.labelExport.text=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8: UIExporterPajekPanel.positionExportCheckbox.text=\u4f4d\u7f6e (x,y) - UIExporterPajekPanel.edgeWeightCheckbox.text=\u8fba\u306e\u91cd\u307f - UIExporterGML.attributes.text=\u5c5e\u6027 - -UIExporterGML.exportLabel.text=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8\: - +UIExporterGML.exportLabel.text=\u30a8\u30af\u30b9\u30dd\u30fc\u30c8: UIExporterGML.positionLabel.text=\u4f4d\u7f6e(x, y) - UIExporterGML.colorsLabel.text=\u8272 - UIExporterGML.sizeLabel.text=\u30b5\u30a4\u30ba - UIExporterGML.edgeWeightLabel.text=\u8fba\u306e\u91cd\u307f - UIExporterGML.labelLabel.text=\u30e9\u30d9\u30eb - UIExporterGML.normalize.text=\u6b63\u898f\u5316 - UIExporterGML.normalizeHintLabel.text=\u4f4d\u7f6e\u3068\u30b5\u30a4\u30ba\u30920\u30681\u306e\u9593\u3067\u8a08\u308b +UIExporterGML.indentationLabel.text=\u30a4\u30f3\u30c7\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3: + +# UIExporterSpreadsheetPanel.separatorLabel.text=Field separator: +# UIExporterSpreadsheetPanel.comma=Comma +# UIExporterSpreadsheetPanel.semicolon=Semicolon +# UIExporterSpreadsheetPanel.space=Space +# UIExporterSpreadsheetPanel.tab=Tab +# UIExporterSpreadsheetPanel.columnsLabel.text=Columns: +# UIExporterSpreadsheetPanel.tableLabel.text=Table +# UIExporterSpreadsheetPanel.table.nodes=Nodes +# UIExporterSpreadsheetPanel.table.edges=Edges -UIExporterGML.indentationLabel.text=\u30a4\u30f3\u30c7\u30f3\u30c6\u30fc\u30b7\u30e7\u30f3\: diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_ko.properties b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_ko.properties new file mode 100644 index 0000000000..5bd4eac52c --- /dev/null +++ b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_ko.properties @@ -0,0 +1,90 @@ + + +UIExporterCSV.name=CSV +UIExporterGraphML.name=GraphML +UIExporterGDF.name=GDF +UIExporterPajek.name=Pajek +OpenIDE-Module-Short-Description=\uD45C\uC900 \uB0B4\uBCF4\uB0B4\uAE30 \uB3C4\uAD6C UI +UIExporterGEXF.name=GEXF +UIExporterGML.name=GML +UIExporterGEXFPanel.labelExport.text=\uB0B4\uBCF4\uB0B4\uAE30: +UIExporterGML.indentationLabel.text=\uB4E4\uC5EC\uC4F0\uAE30: +UIExporterGDFPanel.visibilityCheckbox.text=\uAC00\uC2DC\uC131 (\uD45C\uC2DC, \uB77C\uBCA8 \uD45C\uC2DC) +UIExporterJsonPanel.positionExportCheckbox.text=\uC704\uCE58 (x,y,z) +UIExporterSpreadsheetPanel.name=\uC2A4\uD504\uB808\uB4DC\uC2DC\uD2B8 +UIExporterGEXFPanel.normalizeCheckbox.text=\uC815\uADDC\uD654 +UIExporterGML.attributes.text=\uC18D\uC131 +UIExporterSpreadsheetPanel.comma=\uC27C\uD45C +UIExporterGraphMLPanel.labelNormalize.text=0\uACFC 1 \uC0AC\uC774\uC5D0\uC11C \uC704\uCE58\uC640 \uD06C\uAE30\uB97C \uC870\uC808\uD558\uC138\uC694 +UIExporterJson.name=JSON +UIExporterPajekPanel.positionExportCheckbox.text=\uC704\uCE58 (x,y) +UIExporterDL.name=DL +UIExporterGraphMLPanel.positionExportCheckbox.text=\uC704\uCE58 (x,y) +UIExporterGraphMLPanel.normalizeCheckbox.text=\uC815\uADDC\uD654 +UIExporterCSVPanel.zeroEdgeCheckbox.text=\uC5E3\uC9C0\uAC00 \uC5C6\uC73C\uBA74 0 +UIExporterJsonPanel.normalizeCheckbox.text=\uC815\uADDC\uD654 +UIExporterGraphMLPanel.colorsExportCheckbox.text=\uC0C9\uC0C1 +UIExporterSpreadsheetPanel.sizeExportCheckbox.text=\uD06C\uAE30 +UIExporterCSVPanel.listRadio.text=\uBAA9\uB85D +UIExporterSpreadsheetPanel.table.nodes=\uB178\uB4DC +UIExporterGML.normalizeHintLabel.text=0\uACFC 1 \uC0AC\uC774\uC5D0\uC11C \uC704\uCE58\uC640 \uD06C\uAE30\uB97C \uC870\uC808\uD558\uC138\uC694 +UIExporterJsonPanel.sizeExportCheckbox.text=\uD06C\uAE30 +UIExporterGDFPanel.labelQuotes1.text=\uD070\uB530\uC634\uD45C \uB300\uC2E0 \uC791\uC740\uB530\uC634\uD45C\uB97C \uC0AC\uC6A9\uD558\uC138\uC694 +UIExporterSpreadsheetPanel.labelNormalize.text=0\uACFC 1 \uC0AC\uC774\uC5D0\uC11C \uC704\uCE58\uC640 \uD06C\uAE30\uB97C \uC870\uC808\uD558\uC138\uC694 +UIExporterJsonPanel.attributesExportCheckbox.text=\uC18D\uC131 +UIExporterSpreadsheetPanel.decimalSeparatorLabel.text=\uC18C\uC218\uC810: +UIExporterPajekPanel.labelExport.text=\uB0B4\uBCF4\uB0B4\uAE30: +UIExporterSpreadsheetPanel.columnsLabel.text=\uC5F4: +UIExporterGDFPanel.attributesExportCheckbox.text=\uC18D\uC131 +UIExporterGML.positionLabel.text=\uC704\uCE58 (x, y) +UIExporterGML.labelLabel.text=\uB77C\uBCA8 +UIExporterSpreadsheetPanel.dot=\uB9C8\uCE68\uD45C +UIExporterGML.sizeLabel.text=\uD06C\uAE30 +UIExporterSpreadsheetPanel.attributesExportCheckbox.text=\uC18D\uC131 +UIExporterGML.exportLabel.text=\uB0B4\uBCF4\uB0B4\uAE30: +UIExporterSpreadsheetPanel.semicolon=\uC138\uBBF8\uCF5C\uB860 +UIExporterGEXFPanel.attributesExportCheckbox.text=\uC18D\uC131 +UIExporterCSVPanel.labelExport.text=\uB0B4\uBCF4\uB0B4\uAE30: +UIExporterJsonPanel.labelExport.text=\uB0B4\uBCF4\uB0B4\uAE30: +UIExporterCSVPanel.edgeWeightCheckbox.text=\uC5E3\uC9C0 \uAC00\uC911\uCE58 +UIExporterGDFPanel.normalizeCheckbox.text=\uC815\uADDC\uD654 +UIExporterVNA.name=VNA +UIExporterJsonPanel.dynamicExportCheckbox.text=\uB3D9\uC801 +UIExporterGDFPanel.quotesCheckbox.text=\uC778\uC6A9\uBB38 +UIExporterGDFPanel.labelExport.text=\uB0B4\uBCF4\uB0B4\uAE30: +UIExporterSpreadsheetPanel.colorsExportCheckbox.text=\uC0C9\uC0C1 +UIExporterGDFPanel.simpleQuotesCheckbox.text=\uC791\uC740\uB530\uC634\uD45C +UIExporterGML.colorsLabel.text=\uC0C9\uC0C1 +UIExporterSpreadsheetPanel.separatorLabel.text=\uD544\uB4DC \uAD6C\uBD84\uC790: +UIExporterSpreadsheetPanel.labelExport.text=\uB0B4\uBCF4\uB0B4\uAE30: +UIExporterGDFPanel.labelNormalize.text=0\uACFC 1 \uC0AC\uC774\uC5D0\uC11C \uC704\uCE58\uC640 \uD06C\uAE30\uB97C \uC870\uC808\uD569\uB2C8\uB2E4 +UIExporterGDFPanel.jRadioButton2.text=\uD070\uB530\uC634\uD45C +UIExporterSpreadsheetPanel.space=\uACF5\uB780 +UIExporterGDFPanel.labelQuotes.text=\uD544\uB4DC \uCEA1\uC290\uD654\uB294 \uAE30\uBCF8\uAC12\uC73C\uB85C \uD070\uB530\uC634\uD45C\uB97C \uC0AC\uC6A9\uD569\uB2C8\uB2E4 +UIExporterGraphMLPanel.sizeExportCheckbox.text=\uD06C\uAE30 +UIExporterSpreadsheetPanel.normalizeCheckbox.text=\uC815\uADDC\uD654 +UIExporterSpreadsheetPanel.dynamicExportCheckbox.text=\uB3D9\uC801 +UIExporterJsonPanel.colorsExportCheckbox.text=\uC0C9\uC0C1 +UIExporterSpreadsheetPanel.positionExportCheckbox.text=\uC704\uCE58 (x,y,z) +UIExporterSpreadsheetPanel.table.edges=\uC5E3\uC9C0 +UIExporterGEXFPanel.colorsExportCheckbox.text=\uC0C9\uC0C1 +UIExporterGEXFPanel.dynamicExportCheckbox.text=\uB3D9\uC801 +UIExporterGML.normalize.text=\uC815\uADDC\uD654 +UIExporterCSVPanel.nodeIdCheckbox.text=\uB178\uB4DC ID +UIExporterGraphMLPanel.attributesExportCheckbox.text=\uC18D\uC131 +UIExporterCSVPanel.matrixRadio.text=\uD589\uB82C +UIExporterGraphMLPanel.labelExport.text=\uB0B4\uBCF4\uB0B4\uAE30: +UIExporterGDFPanel.colorsExportCheckbox.text=\uC0C9\uC0C1 +UIExporterGDFPanel.jRadioButton1.text=\uC791\uC740\uB530\uC634\uD45C +UIExporterJsonPanel.labelFormat.text=\uD3EC\uB9F7: +UIExporterGML.edgeWeightLabel.text=\uC5E3\uC9C0 \uAC00\uC911\uCE58 +UIExporterGEXFPanel.sizeExportCheckbox.text=\uD06C\uAE30 +UIExporterSpreadsheetPanel.tableLabel.text=\uD14C\uC774\uBE14 +UIExporterGEXFPanel.labelNormalize.text=0\uACFC 1\uC0AC\uC774\uC5D0\uC11C \uC704\uCE58\uC640 \uD06C\uAE30\uB97C \uC870\uC808\uD558\uC138\uC694 +UIExporterPajekPanel.edgeWeightCheckbox.text=\uC5E3\uC9C0 \uAC00\uC911\uCE58 +UIExporterGEXFPanel.includeAttValuesNullCheckbox.text=\uBE48 \uC18D\uC131\uAC12 \uD3EC\uD568 +UIExporterGDFPanel.positionExportCheckbox.text=\uC704\uCE58 (x,y) +UIExporterJsonPanel.prettyPrintCheckbox.text=\uC608\uC058\uAC8C \uCD9C\uB825 +UIExporterJsonPanel.labelNormalize.text=0\uC5D0\uC11C 1 \uC0AC\uC774\uC5D0\uC11C \uC704\uCE58\uC640 \uD06C\uAE30\uB97C \uC870\uC808\uD558\uC138\uC694 +UIExporterGEXFPanel.positionExportCheckbox.text=\uC704\uCE58 (x,y,z) +UIExporterSpreadsheetPanel.tab=\uD0ED diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_nl.properties b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_nl.properties new file mode 100644 index 0000000000..c654baa413 --- /dev/null +++ b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_nl.properties @@ -0,0 +1,66 @@ +OpenIDE-Module-Short-Description=Standard exporters UI +UIExporterGDF.name=GDF +UIExporterGEXF.name=GEXF +UIExporterGML.name=GML +UIExporterGraphML.name=GraphML +UIExporterCSV.name=CSV +UIExporterPajek.name=Pajek +UIExporterDL.name=DL +UIExporterVNA.name=VNA +UIExporterSpreadsheetPanel.name=Spreadsheet +UIExporterGDFPanel.jRadioButton1.text=Simple quotes +UIExporterGDFPanel.positionExportCheckbox.text=Positie (x,y) +UIExporterGDFPanel.colorsExportCheckbox.text=Kleuren +UIExporterGDFPanel.attributesExportCheckbox.text=Attributen +UIExporterGDFPanel.labelExport.text=Exporteren: +UIExporterGDFPanel.jRadioButton2.text=Double quotes +UIExporterGDFPanel.quotesCheckbox.text=Quotes text +UIExporterGDFPanel.normalizeCheckbox.text=Normaliseren +UIExporterGDFPanel.labelQuotes.text=Field encapsulation use double quotes by default +UIExporterGDFPanel.labelNormalize.text=Scale position and size between 0 and 1 +UIExporterGDFPanel.simpleQuotesCheckbox.text=Simple quotes +UIExporterGDFPanel.labelQuotes1.text=Use simple quotes instead of double quotes +UIExporterGDFPanel.visibilityCheckbox.text=Visibility (visible, label visible) +UIExporterGEXFPanel.labelExport.text=Exporteren: +UIExporterGEXFPanel.attributesExportCheckbox.text=Attributen +UIExporterGEXFPanel.colorsExportCheckbox.text=Kleuren +UIExporterGEXFPanel.positionExportCheckbox.text=Positie (x,y,z) +UIExporterGEXFPanel.sizeExportCheckbox.text=Grootte +UIExporterGEXFPanel.normalizeCheckbox.text=Normaliseren +UIExporterGEXFPanel.labelNormalize.text=Scale position and size between 0 and 1 +UIExporterGraphMLPanel.labelExport.text=Exporteren: +UIExporterGraphMLPanel.positionExportCheckbox.text=Positie (x,y) +UIExporterGraphMLPanel.normalizeCheckbox.text=Normaliseren +UIExporterGraphMLPanel.colorsExportCheckbox.text=Kleuren +UIExporterGraphMLPanel.attributesExportCheckbox.text=Attributen +UIExporterGraphMLPanel.sizeExportCheckbox.text=Grootte +UIExporterGraphMLPanel.labelNormalize.text=Scale position and size between 0 and 1 +UIExporterCSVPanel.labelExport.text=Exporteren: +UIExporterCSVPanel.nodeIdCheckbox.text=Node ID +UIExporterCSVPanel.edgeWeightCheckbox.text=Edge Weight +UIExporterCSVPanel.listRadio.text=Lijst +UIExporterCSVPanel.matrixRadio.text=Matrix +UIExporterCSVPanel.zeroEdgeCheckbox.text=Zero when no edge +UIExporterGEXFPanel.dynamicExportCheckbox.text=Dynamisch +UIExporterPajekPanel.labelExport.text=Exporteren: +UIExporterPajekPanel.positionExportCheckbox.text=Positie (x,y) +UIExporterPajekPanel.edgeWeightCheckbox.text=Edge weights +UIExporterGML.attributes.text=Attributen +UIExporterGML.exportLabel.text=Exporteren: +UIExporterGML.positionLabel.text=Positie (x,y) +UIExporterGML.colorsLabel.text=Kleuren +UIExporterGML.sizeLabel.text=Grootte +UIExporterGML.edgeWeightLabel.text=Edge weight +UIExporterGML.labelLabel.text=Label +UIExporterGML.normalize.text=Normaliseren +UIExporterGML.normalizeHintLabel.text=Scale position and size between 0 and 1 +UIExporterGML.indentationLabel.text=Inspringing: +UIExporterSpreadsheetPanel.separatorLabel.text=Field separator: +UIExporterSpreadsheetPanel.comma=Komma +UIExporterSpreadsheetPanel.semicolon=Puntkomma +UIExporterSpreadsheetPanel.space=Spatie +UIExporterSpreadsheetPanel.tab=Tab +UIExporterSpreadsheetPanel.columnsLabel.text=Kolommen: +UIExporterSpreadsheetPanel.tableLabel.text=Tabel +UIExporterSpreadsheetPanel.table.nodes=Knopen +UIExporterSpreadsheetPanel.table.edges=Edges diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_pt.properties b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_pt.properties new file mode 100644 index 0000000000..48db1c09c1 --- /dev/null +++ b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_pt.properties @@ -0,0 +1,82 @@ +UIExporterSpreadsheetPanel.dynamicExportCheckbox.text=Din\u00E2mico +UIExporterJsonPanel.normalizeCheckbox.text=Normalizar +UIExporterJsonPanel.sizeExportCheckbox.text=Tamanho +UIExporterGraphML.name=GraphML +UIExporterJson.name=Json +UIExporterSpreadsheetPanel.separatorLabel.text=Separador de campos: +UIExporterSpreadsheetPanel.space=Espa\u00E7o +UIExporterSpreadsheetPanel.dot=Ponto +UIExporterSpreadsheetPanel.tableLabel.text=Tabela +UIExporterSpreadsheetPanel.decimalSeparatorLabel.text=Separador de decimal: +UIExporterSpreadsheetPanel.attributesExportCheckbox.text=Atributos +UIExporterSpreadsheetPanel.normalizeCheckbox.text=Normalizar +UIExporterGEXFPanel.includeAttValuesNullCheckbox.text=Incluir valores de atributos nulos +UIExporterJsonPanel.attributesExportCheckbox.text=Atributos +UIExporterJsonPanel.positionExportCheckbox.text=Posi\u00E7\u00E3o (x, y, z) +UIExporterJsonPanel.labelExport.text=Exportar: +UIExporterSpreadsheetPanel.table.nodes=N\u00F3s +OpenIDE-Module-Short-Description=Interface de utilizador dos exportadores padr\u00E3o +UIExporterGDF.name=GDF +UIExporterGEXF.name=GEXF +UIExporterGML.name=GML +UIExporterCSV.name=CSV +UIExporterDL.name=Exportador DL +UIExporterVNA.name=VNA +UIExporterGDFPanel.jRadioButton1.text=Aspas simples +UIExporterGDFPanel.positionExportCheckbox.text=Posi\u00E7\u00E3o (x, y) +UIExporterGDFPanel.colorsExportCheckbox.text=Cores +UIExporterGDFPanel.attributesExportCheckbox.text=Atributos +UIExporterGDFPanel.labelExport.text=Exportar: +UIExporterGDFPanel.jRadioButton2.text=Aspas duplas +UIExporterGDFPanel.quotesCheckbox.text=Texto entre aspas +UIExporterGDFPanel.normalizeCheckbox.text=Normalizar +UIExporterGDFPanel.labelQuotes.text=Encapsulamento de campo usa aspas duplas por padr\u00E3o +UIExporterGDFPanel.labelNormalize.text=Escalonar posi\u00E7\u00E3o e tamanho entre 0 e 1 +UIExporterGDFPanel.simpleQuotesCheckbox.text=Aspas simples +UIExporterGDFPanel.labelQuotes1.text=Usar aspas simples em vez de aspas duplas +UIExporterGDFPanel.visibilityCheckbox.text=Visibilidade (r\u00F3tulo vis\u00EDvel, vis\u00EDvel) +UIExporterGEXFPanel.labelExport.text=Exportar: +UIExporterGEXFPanel.attributesExportCheckbox.text=Atributos +UIExporterGEXFPanel.colorsExportCheckbox.text=Cores +UIExporterGEXFPanel.positionExportCheckbox.text=Posi\u00E7\u00E3o (x, y, z) +UIExporterGEXFPanel.sizeExportCheckbox.text=Tamanho +UIExporterGEXFPanel.normalizeCheckbox.text=Normalizar +UIExporterGEXFPanel.labelNormalize.text=Escalonar posi\u00E7\u00E3o e tamanho entre 0 e 1 +UIExporterGraphMLPanel.labelExport.text=Exportar: +UIExporterGraphMLPanel.positionExportCheckbox.text=Posi\u00E7\u00E3o (x, y) +UIExporterGraphMLPanel.normalizeCheckbox.text=Normalizar +UIExporterGraphMLPanel.colorsExportCheckbox.text=Cores +UIExporterGraphMLPanel.attributesExportCheckbox.text=Atributos +UIExporterGraphMLPanel.sizeExportCheckbox.text=Tamanho +UIExporterGraphMLPanel.labelNormalize.text=Escalonar posi\u00E7\u00E3o e tamanho entre 0 e 1 +UIExporterCSVPanel.labelExport.text=Exportar: +UIExporterCSVPanel.nodeIdCheckbox.text=ID de n\u00F3 +UIExporterCSVPanel.edgeWeightCheckbox.text=Peso da aresta +UIExporterCSVPanel.listRadio.text=Lista +UIExporterCSVPanel.matrixRadio.text=Matriz +UIExporterCSVPanel.zeroEdgeCheckbox.text=Zero quando n\u00E3o existir aresta +UIExporterGEXFPanel.dynamicExportCheckbox.text=Din\u00E2mico +UIExporterPajekPanel.labelExport.text=Exportar: +UIExporterPajekPanel.positionExportCheckbox.text=Posi\u00E7\u00E3o (x, y) +UIExporterPajekPanel.edgeWeightCheckbox.text=Pesos das arestas +UIExporterGML.attributes.text=Atributos +UIExporterGML.exportLabel.text=Exportar: +UIExporterGML.positionLabel.text=Posi\u00E7\u00E3o (x, y) +UIExporterGML.colorsLabel.text=Cores +UIExporterGML.sizeLabel.text=Tamanho +UIExporterGML.edgeWeightLabel.text=Peso da aresta +UIExporterGML.labelLabel.text=R\u00F3tulo +UIExporterGML.normalize.text=Normalizar +UIExporterGML.normalizeHintLabel.text=Escalonar posi\u00E7\u00E3o e tamanho entre 0 e 1 +UIExporterGML.indentationLabel.text=Indenta\u00E7\u00E3o: +UIExporterSpreadsheetPanel.comma=V\u00EDrgula +UIExporterSpreadsheetPanel.table.edges=Arestas +UIExporterJsonPanel.labelFormat.text=Formato: +UIExporterSpreadsheetPanel.semicolon=Ponto-e-v\u00EDrgula +UIExporterSpreadsheetPanel.columnsLabel.text=Colunas: +UIExporterSpreadsheetPanel.positionExportCheckbox.text=Posi\u00E7\u00E3o (x, y, z) +UIExporterSpreadsheetPanel.colorsExportCheckbox.text=Cores +UIExporterSpreadsheetPanel.sizeExportCheckbox.text=Tamanho +UIExporterSpreadsheetPanel.labelExport.text=Exportar: +UIExporterJsonPanel.colorsExportCheckbox.text=Cores +UIExporterJsonPanel.dynamicExportCheckbox.text=Din\u00E2mico diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_pt_BR.properties b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_pt_BR.properties index bfba2dad09..66ad961563 100644 --- a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_pt_BR.properties +++ b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_pt_BR.properties @@ -1,120 +1,69 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -# C\u00e9lio Faria Jr. , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-12 12\:31+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Interface de usu\u00e1rio dos exportadores padr\u00e3o - +OpenIDE-Module-Short-Description=Interface de usuαrio dos exportadores padrγo UIExporterGDF.name=GDF - UIExporterGEXF.name=GEXF - UIExporterGML.name=GML - UIExporterGraphML.name=GraphML - UIExporterCSV.name=CSV - UIExporterPajek.name=Pajek - UIExporterDL.name=Exportador DL - UIExporterVNA.name=VNA +# UIExporterSpreadsheetPanel.name = Spreadsheet UIExporterGDFPanel.jRadioButton1.text=Aspas simples - -UIExporterGDFPanel.positionExportCheckbox.text=Posi\u00e7\u00e3o (x, y) - +UIExporterGDFPanel.positionExportCheckbox.text=Posiηγo (x, y) UIExporterGDFPanel.colorsExportCheckbox.text=Cores - UIExporterGDFPanel.attributesExportCheckbox.text=Atributos - -UIExporterGDFPanel.labelExport.text=Exportar\: - +UIExporterGDFPanel.labelExport.text=Exportar: UIExporterGDFPanel.jRadioButton2.text=Aspas duplas - UIExporterGDFPanel.quotesCheckbox.text=Texto entre aspas - UIExporterGDFPanel.normalizeCheckbox.text=Normalizar - -UIExporterGDFPanel.labelQuotes.text=Encapsulamento de campo usa aspas duplas por padr\u00e3o - -UIExporterGDFPanel.labelNormalize.text=Escalonar posi\u00e7\u00e3o e tamanho entre 0 e 1 - +UIExporterGDFPanel.labelQuotes.text=Encapsulamento de campo usa aspas duplas por padrγo +UIExporterGDFPanel.labelNormalize.text=Escalonar posiηγo e tamanho entre 0 e 1 UIExporterGDFPanel.simpleQuotesCheckbox.text=Aspas simples - UIExporterGDFPanel.labelQuotes1.text=Usar aspas simples em vez de aspas duplas - -UIExporterGDFPanel.visibilityCheckbox.text=Visibilidade (r\u00f3tulo vis\u00edvel, vis\u00edvel) - -UIExporterGEXFPanel.labelExport.text=Exportar\: - +UIExporterGDFPanel.visibilityCheckbox.text=Visibilidade (rσtulo visνvel, visνvel) +UIExporterGEXFPanel.labelExport.text=Exportar: UIExporterGEXFPanel.attributesExportCheckbox.text=Atributos - UIExporterGEXFPanel.colorsExportCheckbox.text=Cores - -UIExporterGEXFPanel.positionExportCheckbox.text=Posi\u00e7\u00e3o (x, y, z) - +UIExporterGEXFPanel.positionExportCheckbox.text=Posiηγo (x, y, z) UIExporterGEXFPanel.sizeExportCheckbox.text=Tamanho - UIExporterGEXFPanel.normalizeCheckbox.text=Normalizar - -UIExporterGEXFPanel.labelNormalize.text=Escalonar posi\u00e7\u00e3o e tamanho entre 0 e 1 - -UIExporterGraphMLPanel.labelExport.text=Exportar\: - -UIExporterGraphMLPanel.positionExportCheckbox.text=Posi\u00e7\u00e3o (x, y) - +UIExporterGEXFPanel.labelNormalize.text=Escalonar posiηγo e tamanho entre 0 e 1 +UIExporterGraphMLPanel.labelExport.text=Exportar: +UIExporterGraphMLPanel.positionExportCheckbox.text=Posiηγo (x, y) UIExporterGraphMLPanel.normalizeCheckbox.text=Normalizar - UIExporterGraphMLPanel.colorsExportCheckbox.text=Cores - UIExporterGraphMLPanel.attributesExportCheckbox.text=Atributos - UIExporterGraphMLPanel.sizeExportCheckbox.text=Tamanho - -UIExporterGraphMLPanel.labelNormalize.text=Escalonar posi\u00e7\u00e3o e tamanho entre 0 e 1 - -UIExporterCSVPanel.labelExport.text=Exportar\: - -UIExporterCSVPanel.nodeIdCheckbox.text=ID de n\u00f3 - +UIExporterGraphMLPanel.labelNormalize.text=Escalonar posiηγo e tamanho entre 0 e 1 +UIExporterCSVPanel.labelExport.text=Exportar: +UIExporterCSVPanel.nodeIdCheckbox.text=ID de nσ UIExporterCSVPanel.edgeWeightCheckbox.text=Peso da aresta - UIExporterCSVPanel.listRadio.text=Lista - UIExporterCSVPanel.matrixRadio.text=Matriz - -UIExporterCSVPanel.zeroEdgeCheckbox.text=Zero quando n\u00e3o existir aresta - -UIExporterGEXFPanel.dynamicExportCheckbox.text=Din\u00e2mico - -UIExporterPajekPanel.labelExport.text=Exportar\: - -UIExporterPajekPanel.positionExportCheckbox.text=Posi\u00e7\u00e3o (x, y) - +UIExporterCSVPanel.zeroEdgeCheckbox.text=Zero quando nγo existir aresta +UIExporterGEXFPanel.dynamicExportCheckbox.text=Dinβmico +UIExporterPajekPanel.labelExport.text=Exportar: +UIExporterPajekPanel.positionExportCheckbox.text=Posiηγo (x, y) UIExporterPajekPanel.edgeWeightCheckbox.text=Pesos das arestas - UIExporterGML.attributes.text=Atributos - -UIExporterGML.exportLabel.text=Exportar\: - -UIExporterGML.positionLabel.text=Posi\u00e7\u00e3o (x, y) - +UIExporterGML.exportLabel.text=Exportar: +UIExporterGML.positionLabel.text=Posiηγo (x, y) UIExporterGML.colorsLabel.text=Cores - UIExporterGML.sizeLabel.text=Tamanho - UIExporterGML.edgeWeightLabel.text=Peso da aresta - -UIExporterGML.labelLabel.text=R\u00f3tulo - +UIExporterGML.labelLabel.text=Rσtulo UIExporterGML.normalize.text=Normalizar +UIExporterGML.normalizeHintLabel.text=Escalonar posiηγo e tamanho entre 0 e 1 +UIExporterGML.indentationLabel.text=Indentaηγo: + +# UIExporterSpreadsheetPanel.separatorLabel.text=Field separator: +# UIExporterSpreadsheetPanel.comma=Comma +# UIExporterSpreadsheetPanel.semicolon=Semicolon +# UIExporterSpreadsheetPanel.space=Space +# UIExporterSpreadsheetPanel.tab=Tab +# UIExporterSpreadsheetPanel.columnsLabel.text=Columns: +# UIExporterSpreadsheetPanel.tableLabel.text=Table +# UIExporterSpreadsheetPanel.table.nodes=Nodes +# UIExporterSpreadsheetPanel.table.edges=Edges -UIExporterGML.normalizeHintLabel.text=Escalonar posi\u00e7\u00e3o e tamanho entre 0 e 1 - -UIExporterGML.indentationLabel.text=Indenta\u00e7\u00e3o\: diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_ro.properties b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_ro.properties new file mode 100644 index 0000000000..3bc0fc9540 --- /dev/null +++ b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_ro.properties @@ -0,0 +1,78 @@ + + +UIExporterGML.name=GML +UIExporterGDFPanel.positionExportCheckbox.text=Pozi\u021Bie (x,y) +UIExporterGDFPanel.colorsExportCheckbox.text=Culori +OpenIDE-Module-Short-Description=Interfa\u021Ba exportatorilor standard +UIExporterGEXF.name=GEXF +UIExporterCSV.name=CSV +UIExporterPajek.name=Pajek +UIExporterVNA.name=VNA +UIExporterGDF.name=GDF +UIExporterGDFPanel.simpleQuotesCheckbox.text=Ghilimele simple +UIExporterGDFPanel.jRadioButton2.text=Ghilimele duble +UIExporterGEXFPanel.normalizeCheckbox.text=Normalizeaz\u0103 +UIExporterGraphMLPanel.positionExportCheckbox.text=Pozi\u021Bie (x,y) +UIExporterGraphML.name=GraphML +UIExporterDL.name=DL +UIExporterSpreadsheetPanel.name=Foaie de calcul +UIExporterGDFPanel.jRadioButton1.text=Ghilimele simple +UIExporterGEXFPanel.labelExport.text=Export\u0103: +UIExporterGDFPanel.attributesExportCheckbox.text=Atribute +UIExporterGDFPanel.labelExport.text=Export\u0103: +UIExporterGDFPanel.normalizeCheckbox.text=Normalizeaz\u0103 +UIExporterGDFPanel.quotesCheckbox.text=Ghilimele text +UIExporterGDFPanel.labelQuotes.text=\u00CEncapsularea c\u00E2mpurilor utilizeaz\u0103 \u00EEn mod implicit ghilimele duble +UIExporterGDFPanel.labelNormalize.text=Scaleaz\u0103 pozi\u021Bia \u0219i dimensiunea \u00EEntre 0 \u0219i 1 +UIExporterGDFPanel.labelQuotes1.text=Folose\u0219te ghilimele simple \u00EEn loc de duble +UIExporterGDFPanel.visibilityCheckbox.text=Vizibilitate (vizibil, etichet\u0103 vizibil\u0103) +UIExporterGEXFPanel.colorsExportCheckbox.text=Culori +UIExporterGEXFPanel.positionExportCheckbox.text=Pozi\u021Bie (x,y,z) +UIExporterGEXFPanel.attributesExportCheckbox.text=Atribute +UIExporterGraphMLPanel.sizeExportCheckbox.text=Dimensiune +UIExporterGEXFPanel.sizeExportCheckbox.text=Dimensiune +UIExporterGEXFPanel.labelNormalize.text=Scaleaz\u0103 pozi\u021Bia \u0219i dimensiunea \u00EEntre 0 \u0219i 1 +UIExporterGraphMLPanel.labelExport.text=Export\u0103: +UIExporterGraphMLPanel.normalizeCheckbox.text=Normalizeaz\u0103 +UIExporterGraphMLPanel.attributesExportCheckbox.text=Atribute +UIExporterCSVPanel.listRadio.text=List\u0103 +UIExporterGraphMLPanel.colorsExportCheckbox.text=Culori +UIExporterGraphMLPanel.labelNormalize.text=Scaleaz\u0103 pozi\u021Bia \u0219i dimensiunea \u00EEntre 0 \u0219i 1 +UIExporterCSVPanel.labelExport.text=Export\u0103: +UIExporterCSVPanel.nodeIdCheckbox.text=ID nod +UIExporterCSVPanel.edgeWeightCheckbox.text=Ponderea Muchiei +UIExporterCSVPanel.matrixRadio.text=Matrice +UIExporterGEXFPanel.dynamicExportCheckbox.text=Dinamic +UIExporterCSVPanel.zeroEdgeCheckbox.text=Zero atunci c\u00E2nd nu exist\u0103 o muchie +UIExporterSpreadsheetPanel.comma=Virgul\u0103 +UIExporterPajekPanel.positionExportCheckbox.text=Pozi\u021Bie (x,y) +UIExporterGML.edgeWeightLabel.text=Ponderea muchiei +UIExporterGML.normalize.text=Normalizeaz\u0103 +UIExporterSpreadsheetPanel.columnsLabel.text=Coloane: +UIExporterSpreadsheetPanel.tableLabel.text=Tabel +UIExporterSpreadsheetPanel.table.nodes=Noduri +UIExporterGML.exportLabel.text=Export\u0103: +UIExporterGML.indentationLabel.text=Indentare: +UIExporterSpreadsheetPanel.separatorLabel.text=Separator de c\u00E2mp: +UIExporterSpreadsheetPanel.tab=Tab +UIExporterSpreadsheetPanel.table.edges=Muchii +UIExporterGML.positionLabel.text=Pozi\u021Bie (x,y) +UIExporterPajekPanel.labelExport.text=Export\u0103: +UIExporterPajekPanel.edgeWeightCheckbox.text=Ponderile muchiilor +UIExporterGML.attributes.text=Atribute +UIExporterGML.colorsLabel.text=Culori +UIExporterGML.sizeLabel.text=Dimensiune +UIExporterGML.labelLabel.text=Etichet\u0103 +UIExporterGML.normalizeHintLabel.text=Scaleaz\u0103 pozi\u021Bia \u0219i dimensiunea \u00EEntre 0 \u0219i 1 +UIExporterSpreadsheetPanel.semicolon=Punct \u0219i virgul\u0103 +UIExporterSpreadsheetPanel.space=Spa\u021Biu +UIExporterSpreadsheetPanel.dot=Punct +UIExporterSpreadsheetPanel.dynamicExportCheckbox.text=Dinamic +UIExporterSpreadsheetPanel.attributesExportCheckbox.text=Atribute +UIExporterSpreadsheetPanel.normalizeCheckbox.text=Normalizeaz\u0103 +UIExporterSpreadsheetPanel.decimalSeparatorLabel.text=Separator zecimal: +UIExporterSpreadsheetPanel.colorsExportCheckbox.text=Culori +UIExporterSpreadsheetPanel.positionExportCheckbox.text=Pozi\u021Bie (x,y,z) +UIExporterSpreadsheetPanel.sizeExportCheckbox.text=Dimensiune +UIExporterSpreadsheetPanel.labelNormalize.text=Scaleaz\u0103 pozi\u021Bia \u0219i dimensiunea \u00EEntre 0 \u0219i 1 +UIExporterSpreadsheetPanel.labelExport.text=Export\u0103: diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_ru.properties b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_ru.properties index cc43a01a9c..87223eaf91 100644 --- a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_ru.properties +++ b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_ru.properties @@ -1,119 +1,69 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-12 21\:39+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - OpenIDE-Module-Short-Description=Standard exporters UI - UIExporterGDF.name=GDF - UIExporterGEXF.name=GEXF - UIExporterGML.name=GML - UIExporterGraphML.name=GraphML - UIExporterCSV.name=CSV - UIExporterPajek.name=Pajek - UIExporterDL.name=DL - UIExporterVNA.name=VNA +# UIExporterSpreadsheetPanel.name = Spreadsheet UIExporterGDFPanel.jRadioButton1.text=\u041e\u0434\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u043a\u0430\u0432\u044b\u0447\u043a\u0438 - UIExporterGDFPanel.positionExportCheckbox.text=\u041f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (x,y) - UIExporterGDFPanel.colorsExportCheckbox.text=\u0426\u0432\u0435\u0442\u0430 - -UIExporterGDFPanel.attributesExportCheckbox.text=\u041e\u0442\u0441\u0442\u0443\u043f\: - -UIExporterGDFPanel.labelExport.text=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\: - +UIExporterGDFPanel.attributesExportCheckbox.text=\u041e\u0442\u0441\u0442\u0443\u043f: +UIExporterGDFPanel.labelExport.text=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c: UIExporterGDFPanel.jRadioButton2.text=\u0414\u0432\u043e\u0439\u043d\u044b\u0435 \u043a\u0430\u0432\u044b\u0447\u043a\u0438 - UIExporterGDFPanel.quotesCheckbox.text=\u0422\u0435\u043a\u0441\u0442 \u0432 \u043a\u0430\u0432\u044b\u0447\u043a\u0430\u0445 - UIExporterGDFPanel.normalizeCheckbox.text=\u041d\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c - UIExporterGDFPanel.labelQuotes.text=\u041f\u043e\u043c\u0435\u0449\u0430\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u0432 \u043a\u0430\u0432\u044b\u0447\u043a\u0438, \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0432 \u0434\u0432\u043e\u0439\u043d\u044b\u0435 - UIExporterGDFPanel.labelNormalize.text=\u041f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0432\u0435\u0441\u0430 \u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043a \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0443 \u043c\u0435\u0436\u0434\u0443 0 \u0438 1 - UIExporterGDFPanel.simpleQuotesCheckbox.text=\u041e\u0434\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u043a\u0430\u0432\u044b\u0447\u043a\u0438 - UIExporterGDFPanel.labelQuotes1.text=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0434\u0438\u043d\u0430\u0440\u043d\u044b\u0435 \u043a\u0430\u0432\u044b\u0447\u043a\u0438 \u0432\u043c\u0435\u0441\u0442\u043e \u0434\u0432\u043e\u0439\u043d\u044b\u0445 - UIExporterGDFPanel.visibilityCheckbox.text=\u0412\u0438\u0434\u0438\u043c\u043e\u0441\u0442\u044c (visible, label visible) - -UIExporterGEXFPanel.labelExport.text=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\: - +UIExporterGEXFPanel.labelExport.text=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c: UIExporterGEXFPanel.attributesExportCheckbox.text=\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b - UIExporterGEXFPanel.colorsExportCheckbox.text=\u0426\u0432\u0435\u0442\u0430 - UIExporterGEXFPanel.positionExportCheckbox.text=\u041f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (x,y) - UIExporterGEXFPanel.sizeExportCheckbox.text=\u0420\u0430\u0437\u043c\u0435\u0440 - UIExporterGEXFPanel.normalizeCheckbox.text=\u041d\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c - UIExporterGEXFPanel.labelNormalize.text=\u041f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0432\u0435\u0441\u0430 \u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043a \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0443 \u043c\u0435\u0436\u0434\u0443 0 \u0438 1 - -UIExporterGraphMLPanel.labelExport.text=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\: - +UIExporterGraphMLPanel.labelExport.text=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c: UIExporterGraphMLPanel.positionExportCheckbox.text=\u041f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (x,y) - UIExporterGraphMLPanel.normalizeCheckbox.text=\u041d\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c - UIExporterGraphMLPanel.colorsExportCheckbox.text=\u0426\u0432\u0435\u0442\u0430 - UIExporterGraphMLPanel.attributesExportCheckbox.text=\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b - UIExporterGraphMLPanel.sizeExportCheckbox.text=\u0420\u0430\u0437\u043c\u0435\u0440 - UIExporterGraphMLPanel.labelNormalize.text=\u041f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0432\u0435\u0441\u0430 \u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043a \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0443 \u043c\u0435\u0436\u0434\u0443 0 \u0438 1 - -UIExporterCSVPanel.labelExport.text=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\: - +UIExporterCSVPanel.labelExport.text=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c: UIExporterCSVPanel.nodeIdCheckbox.text=ID \u0443\u0437\u043b\u0430 - UIExporterCSVPanel.edgeWeightCheckbox.text=\u0412\u0435\u0441 \u0440\u0435\u0431\u0440\u0430 - UIExporterCSVPanel.listRadio.text=\u0421\u043f\u0438\u0441\u043e\u043a - UIExporterCSVPanel.matrixRadio.text=\u041c\u0430\u0442\u0440\u0438\u0446\u0430 - UIExporterCSVPanel.zeroEdgeCheckbox.text=\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0440\u0435\u0431\u0440\u0430 \u043a\u0430\u043a \u043d\u0443\u043b\u0438 - UIExporterGEXFPanel.dynamicExportCheckbox.text=\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 - -UIExporterPajekPanel.labelExport.text=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\: - +UIExporterPajekPanel.labelExport.text=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c: UIExporterPajekPanel.positionExportCheckbox.text=\u041f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (x,y) - UIExporterPajekPanel.edgeWeightCheckbox.text=\u0412\u0435\u0441\u0430 \u0440\u0451\u0431\u0435\u0440 - UIExporterGML.attributes.text=\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b - -UIExporterGML.exportLabel.text=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\: - +UIExporterGML.exportLabel.text=\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c: UIExporterGML.positionLabel.text=\u041f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 (x,y) - UIExporterGML.colorsLabel.text=\u0426\u0432\u0435\u0442\u0430 - UIExporterGML.sizeLabel.text=\u0420\u0430\u0437\u043c\u0435\u0440 - UIExporterGML.edgeWeightLabel.text=\u0412\u0435\u0441 \u0440\u0435\u0431\u0440\u0430 - UIExporterGML.labelLabel.text=\u041c\u0435\u0442\u043a\u0438 - UIExporterGML.normalize.text=\u041d\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c - UIExporterGML.normalizeHintLabel.text=\u041f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u0432\u0435\u0441\u0430 \u0438 \u043f\u043e\u0437\u0438\u0446\u0438\u0438 \u043a \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0443 \u043c\u0435\u0436\u0434\u0443 0 \u0438 1 +UIExporterGML.indentationLabel.text=\u041e\u0442\u0441\u0442\u0443\u043f: + +# UIExporterSpreadsheetPanel.separatorLabel.text=Field separator: +# UIExporterSpreadsheetPanel.comma=Comma +# UIExporterSpreadsheetPanel.semicolon=Semicolon +# UIExporterSpreadsheetPanel.space=Space +# UIExporterSpreadsheetPanel.tab=Tab +# UIExporterSpreadsheetPanel.columnsLabel.text=Columns: +# UIExporterSpreadsheetPanel.tableLabel.text=Table +# UIExporterSpreadsheetPanel.table.nodes=Nodes +# UIExporterSpreadsheetPanel.table.edges=Edges -UIExporterGML.indentationLabel.text=\u041e\u0442\u0441\u0442\u0443\u043f\: diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_th.properties b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_tr.properties b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_tr.properties new file mode 100644 index 0000000000..dda544c80a --- /dev/null +++ b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_tr.properties @@ -0,0 +1,66 @@ +OpenIDE-Module-Short-Description=Standard exporters UI +UIExporterGDF.name=GDF +UIExporterGEXF.name=GEXF +UIExporterGML.name=GML +UIExporterGraphML.name=GraphML +UIExporterCSV.name=CSV +UIExporterPajek.name=Pajek +UIExporterDL.name=DL +UIExporterVNA.name=VNA +UIExporterSpreadsheetPanel.name=Spreadsheet +UIExporterGDFPanel.jRadioButton1.text=Simple quotes +UIExporterGDFPanel.positionExportCheckbox.text=Position (x,y) +UIExporterGDFPanel.colorsExportCheckbox.text=Colors +UIExporterGDFPanel.attributesExportCheckbox.text=Attributes +UIExporterGDFPanel.labelExport.text=Export: +UIExporterGDFPanel.jRadioButton2.text=Double quotes +UIExporterGDFPanel.quotesCheckbox.text=Quotes text +UIExporterGDFPanel.normalizeCheckbox.text=Normalize +UIExporterGDFPanel.labelQuotes.text=Field encapsulation use double quotes by default +UIExporterGDFPanel.labelNormalize.text=Scale position and size between 0 and 1 +UIExporterGDFPanel.simpleQuotesCheckbox.text=Simple quotes +UIExporterGDFPanel.labelQuotes1.text=Use simple quotes instead of double quotes +UIExporterGDFPanel.visibilityCheckbox.text=Visibility (visible, label visible) +UIExporterGEXFPanel.labelExport.text=Export: +UIExporterGEXFPanel.attributesExportCheckbox.text=Attributes +UIExporterGEXFPanel.colorsExportCheckbox.text=Colors +UIExporterGEXFPanel.positionExportCheckbox.text=Position (x,y,z) +UIExporterGEXFPanel.sizeExportCheckbox.text=Boyut +UIExporterGEXFPanel.normalizeCheckbox.text=Normalize +UIExporterGEXFPanel.labelNormalize.text=Scale position and size between 0 and 1 +UIExporterGraphMLPanel.labelExport.text=Export: +UIExporterGraphMLPanel.positionExportCheckbox.text=Position (x,y) +UIExporterGraphMLPanel.normalizeCheckbox.text=Normalize +UIExporterGraphMLPanel.colorsExportCheckbox.text=Colors +UIExporterGraphMLPanel.attributesExportCheckbox.text=Attributes +UIExporterGraphMLPanel.sizeExportCheckbox.text=Boyut +UIExporterGraphMLPanel.labelNormalize.text=Scale position and size between 0 and 1 +UIExporterCSVPanel.labelExport.text=Export: +UIExporterCSVPanel.nodeIdCheckbox.text=Node ID +UIExporterCSVPanel.edgeWeightCheckbox.text=Edge Weight +UIExporterCSVPanel.listRadio.text=List +UIExporterCSVPanel.matrixRadio.text=Matrix +UIExporterCSVPanel.zeroEdgeCheckbox.text=Zero when no edge +UIExporterGEXFPanel.dynamicExportCheckbox.text=Dynamic +UIExporterPajekPanel.labelExport.text=Export: +UIExporterPajekPanel.positionExportCheckbox.text=Position (x,y) +UIExporterPajekPanel.edgeWeightCheckbox.text=Edge weights +UIExporterGML.attributes.text=Attributes +UIExporterGML.exportLabel.text=Export: +UIExporterGML.positionLabel.text=Position (x, y) +UIExporterGML.colorsLabel.text=Colors +UIExporterGML.sizeLabel.text=Boyut +UIExporterGML.edgeWeightLabel.text=Edge weight +UIExporterGML.labelLabel.text=Label +UIExporterGML.normalize.text=Normalize +UIExporterGML.normalizeHintLabel.text=Scale position and size between 0 and 1 +UIExporterGML.indentationLabel.text=Indentation: +UIExporterSpreadsheetPanel.separatorLabel.text=Field separator: +UIExporterSpreadsheetPanel.comma=Comma +UIExporterSpreadsheetPanel.semicolon=Semicolon +UIExporterSpreadsheetPanel.space=Space +UIExporterSpreadsheetPanel.tab=Tab +UIExporterSpreadsheetPanel.columnsLabel.text=Columns: +UIExporterSpreadsheetPanel.tableLabel.text=Table +UIExporterSpreadsheetPanel.table.nodes=Nodes +UIExporterSpreadsheetPanel.table.edges=Edges diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_uk.properties b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_uk.properties new file mode 100644 index 0000000000..37b0ec944f --- /dev/null +++ b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_uk.properties @@ -0,0 +1,88 @@ +UIExporterGDFPanel.jRadioButton2.text=\u041F\u043E\u0434\u0432\u0456\u0439\u043D\u0456 \u043B\u0430\u043F\u043A\u0438 +UIExporterJson.name=Json +UIExporterGEXF.name=GEXF +UIExporterDL.name=DL +UIExporterGML.name=GML +UIExporterGraphML.name=GraphML +UIExporterSpreadsheetPanel.name=\u0415\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u0430 \u0442\u0430\u0431\u043B\u0438\u0446\u044F +OpenIDE-Module-Short-Description=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0438\u0439 \u0456\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u0435\u0440\u0456\u0432 +UIExporterGDF.name=GDF +UIExporterCSV.name=CSV +UIExporterPajek.name=\u041F\u0430\u0432\u0443\u043A +UIExporterVNA.name=VNA +UIExporterGDFPanel.jRadioButton1.text=\u041F\u0440\u043E\u0441\u0442\u0456 \u0446\u0438\u0442\u0430\u0442\u0438 +UIExporterGDFPanel.positionExportCheckbox.text=\u041F\u043E\u0437\u0438\u0446\u0456\u044F (x,y) +UIExporterGDFPanel.colorsExportCheckbox.text=\u041A\u043E\u043B\u044C\u043E\u0440\u0438 +UIExporterGDFPanel.attributesExportCheckbox.text=\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438 +UIExporterGDFPanel.labelExport.text=\u0415\u043A\u0441\u043F\u043E\u0440\u0442: +UIExporterGDFPanel.quotesCheckbox.text=\u0426\u0438\u0442\u0443\u0454 \u0442\u0435\u043A\u0441\u0442 +UIExporterJsonPanel.prettyPrintCheckbox.text=\u0413\u0430\u0440\u043D\u0438\u0439 \u043F\u0440\u0438\u043D\u0442 +UIExporterSpreadsheetPanel.table.edges=\u041A\u0440\u0430\u0457 +UIExporterGEXFPanel.attributesExportCheckbox.text=\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438 +UIExporterSpreadsheetPanel.table.nodes=\u0412\u0443\u0437\u043B\u0438 +UIExporterJsonPanel.sizeExportCheckbox.text=\u0420\u043E\u0437\u043C\u0456\u0440 +UIExporterGML.colorsLabel.text=\u041A\u043E\u043B\u044C\u043E\u0440\u0438 +UIExporterGML.sizeLabel.text=\u0420\u043E\u0437\u043C\u0456\u0440 +UIExporterGDFPanel.labelQuotes1.text=\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0439\u0442\u0435 \u043F\u0440\u043E\u0441\u0442\u0456 \u043B\u0430\u043F\u043A\u0438 \u0437\u0430\u043C\u0456\u0441\u0442\u044C \u043F\u043E\u0434\u0432\u0456\u0439\u043D\u0438\u0445 \u043B\u0430\u043F\u043E\u043A +UIExporterGML.normalize.text=\u041D\u043E\u0440\u043C\u0430\u043B\u0456\u0437\u0443\u0432\u0430\u0442\u0438 +UIExporterJsonPanel.labelExport.text=\u0415\u043A\u0441\u043F\u043E\u0440\u0442: +UIExporterGDFPanel.visibilityCheckbox.text=\u0412\u0438\u0434\u0438\u043C\u0456\u0441\u0442\u044C (\u0432\u0438\u0434\u0438\u043C\u0430, \u0432\u0438\u0434\u0438\u043C\u0430 \u0435\u0442\u0438\u043A\u0435\u0442\u043A\u0430) +UIExporterJsonPanel.positionExportCheckbox.text=\u041F\u043E\u0437\u0438\u0446\u0456\u044F (x,y,z) +UIExporterGML.labelLabel.text=\u041C\u0456\u0442\u043A\u0430 +UIExporterSpreadsheetPanel.positionExportCheckbox.text=\u041F\u043E\u0437\u0438\u0446\u0456\u044F (x,y,z) +UIExporterSpreadsheetPanel.dynamicExportCheckbox.text=\u0414\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0438\u0439 +UIExporterSpreadsheetPanel.sizeExportCheckbox.text=\u0420\u043E\u0437\u043C\u0456\u0440 +UIExporterSpreadsheetPanel.attributesExportCheckbox.text=\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438 +UIExporterJsonPanel.labelFormat.text=\u0424\u043E\u0440\u043C\u0430\u0442: +UIExporterGDFPanel.normalizeCheckbox.text=\u041D\u043E\u0440\u043C\u0430\u043B\u0456\u0437\u0443\u0432\u0430\u0442\u0438 +UIExporterGDFPanel.labelQuotes.text=\u0406\u043D\u043A\u0430\u043F\u0441\u0443\u043B\u044F\u0446\u0456\u044F \u043F\u043E\u043B\u0456\u0432 \u0437\u0430 \u0437\u0430\u043C\u043E\u0432\u0447\u0443\u0432\u0430\u043D\u043D\u044F\u043C \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0454 \u043F\u043E\u0434\u0432\u0456\u0439\u043D\u0456 \u043B\u0430\u043F\u043A\u0438 +UIExporterGDFPanel.labelNormalize.text=\u0420\u043E\u0437\u0442\u0430\u0448\u0443\u0432\u0430\u043D\u043D\u044F \u0448\u043A\u0430\u043B\u0438 \u0442\u0430 \u0440\u043E\u0437\u043C\u0456\u0440 \u0432\u0456\u0434 0 \u0434\u043E 1 +UIExporterGDFPanel.simpleQuotesCheckbox.text=\u041F\u0440\u043E\u0441\u0442\u0456 \u0446\u0438\u0442\u0430\u0442\u0438 +UIExporterGEXFPanel.labelExport.text=\u0415\u043A\u0441\u043F\u043E\u0440\u0442: +UIExporterGEXFPanel.colorsExportCheckbox.text=\u041A\u043E\u043B\u044C\u043E\u0440\u0438 +UIExporterGEXFPanel.positionExportCheckbox.text=\u041F\u043E\u0437\u0438\u0446\u0456\u044F (x,y,z) +UIExporterGEXFPanel.sizeExportCheckbox.text=\u0420\u043E\u0437\u043C\u0456\u0440 +UIExporterGEXFPanel.normalizeCheckbox.text=\u041D\u043E\u0440\u043C\u0430\u043B\u0456\u0437\u0443\u0432\u0430\u0442\u0438 +UIExporterGEXFPanel.labelNormalize.text=\u0420\u043E\u0437\u0442\u0430\u0448\u0443\u0432\u0430\u043D\u043D\u044F \u0448\u043A\u0430\u043B\u0438 \u0442\u0430 \u0440\u043E\u0437\u043C\u0456\u0440 \u0432\u0456\u0434 0 \u0434\u043E 1 +UIExporterGraphMLPanel.labelExport.text=\u0415\u043A\u0441\u043F\u043E\u0440\u0442: +UIExporterGraphMLPanel.positionExportCheckbox.text=\u041F\u043E\u0437\u0438\u0446\u0456\u044F (x,y) +UIExporterGraphMLPanel.normalizeCheckbox.text=\u041D\u043E\u0440\u043C\u0430\u043B\u0456\u0437\u0443\u0432\u0430\u0442\u0438 +UIExporterGraphMLPanel.colorsExportCheckbox.text=\u041A\u043E\u043B\u044C\u043E\u0440\u0438 +UIExporterGraphMLPanel.attributesExportCheckbox.text=\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438 +UIExporterGraphMLPanel.sizeExportCheckbox.text=\u0420\u043E\u0437\u043C\u0456\u0440 +UIExporterGraphMLPanel.labelNormalize.text=\u0420\u043E\u0437\u0442\u0430\u0448\u0443\u0432\u0430\u043D\u043D\u044F \u0448\u043A\u0430\u043B\u0438 \u0442\u0430 \u0440\u043E\u0437\u043C\u0456\u0440 \u0432\u0456\u0434 0 \u0434\u043E 1 +UIExporterCSVPanel.labelExport.text=\u0415\u043A\u0441\u043F\u043E\u0440\u0442: +UIExporterCSVPanel.nodeIdCheckbox.text=\u0406\u0434\u0435\u043D\u0442\u0438\u0444\u0456\u043A\u0430\u0442\u043E\u0440 \u0432\u0443\u0437\u043B\u0430 +UIExporterCSVPanel.listRadio.text=\u0421\u043F\u0438\u0441\u043E\u043A +UIExporterCSVPanel.matrixRadio.text=\u041C\u0430\u0442\u0440\u0438\u0446\u044F +UIExporterCSVPanel.zeroEdgeCheckbox.text=\u041D\u0443\u043B\u044C, \u043A\u043E\u043B\u0438 \u043D\u0435\u043C\u0430\u0454 \u043A\u0440\u0430\u044E +UIExporterGEXFPanel.dynamicExportCheckbox.text=\u0414\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0438\u0439 +UIExporterPajekPanel.labelExport.text=\u0415\u043A\u0441\u043F\u043E\u0440\u0442: +UIExporterPajekPanel.positionExportCheckbox.text=\u041F\u043E\u0437\u0438\u0446\u0456\u044F (x,y) +UIExporterPajekPanel.edgeWeightCheckbox.text=\u041A\u0440\u0430\u0439\u043D\u0456 \u0432\u0430\u0433\u0438 +UIExporterGML.attributes.text=\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438 +UIExporterCSVPanel.edgeWeightCheckbox.text=\u0412\u0430\u0433\u0430 \u041A\u0440\u0430\u044E +UIExporterGML.positionLabel.text=\u041F\u043E\u0437\u0438\u0446\u0456\u044F (x, y) +UIExporterSpreadsheetPanel.separatorLabel.text=\u0420\u043E\u0437\u0434\u0456\u043B\u044C\u043D\u0438\u043A \u043F\u043E\u043B\u0456\u0432: +UIExporterSpreadsheetPanel.comma=\u041A\u043E\u043C\u0430 +UIExporterSpreadsheetPanel.semicolon=\u041A\u0440\u0430\u043F\u043A\u0430 \u0437 \u043A\u043E\u043C\u043E\u044E +UIExporterSpreadsheetPanel.space=\u041A\u043E\u0441\u043C\u043E\u0441 +UIExporterSpreadsheetPanel.tab=\u0412\u043A\u043B\u0430\u0434\u043A\u0430 +UIExporterSpreadsheetPanel.dot=\u041A\u0440\u0430\u043F\u043A\u0430 +UIExporterSpreadsheetPanel.columnsLabel.text=\u0421\u0442\u043E\u0432\u043F\u0446\u0456: +UIExporterSpreadsheetPanel.tableLabel.text=\u0422\u0430\u0431\u043B\u0438\u0446\u044F +UIExporterSpreadsheetPanel.colorsExportCheckbox.text=\u041A\u043E\u043B\u044C\u043E\u0440\u0438 +UIExporterSpreadsheetPanel.labelExport.text=\u0415\u043A\u0441\u043F\u043E\u0440\u0442: +UIExporterGEXFPanel.includeAttValuesNullCheckbox.text=\u0412\u043A\u043B\u044E\u0447\u0456\u0442\u044C \u043D\u0443\u043B\u044C\u043E\u0432\u0456 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0456\u0432 +UIExporterGML.indentationLabel.text=\u0412\u0456\u0434\u0441\u0442\u0443\u043F: +UIExporterGML.exportLabel.text=\u0415\u043A\u0441\u043F\u043E\u0440\u0442: +UIExporterGML.edgeWeightLabel.text=\u0412\u0430\u0433\u0430 \u043A\u0440\u0430\u044E +UIExporterSpreadsheetPanel.decimalSeparatorLabel.text=\u0414\u0435\u0441\u044F\u0442\u043A\u043E\u0432\u0438\u0439 \u0440\u043E\u0437\u0434\u0456\u043B\u044C\u043D\u0438\u043A: +UIExporterGML.normalizeHintLabel.text=\u0420\u043E\u0437\u0442\u0430\u0448\u0443\u0432\u0430\u043D\u043D\u044F \u0448\u043A\u0430\u043B\u0438 \u0442\u0430 \u0440\u043E\u0437\u043C\u0456\u0440 \u0432\u0456\u0434 0 \u0434\u043E 1 +UIExporterSpreadsheetPanel.normalizeCheckbox.text=\u041D\u043E\u0440\u043C\u0430\u043B\u0456\u0437\u0443\u0432\u0430\u0442\u0438 +UIExporterJsonPanel.attributesExportCheckbox.text=\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438 +UIExporterSpreadsheetPanel.labelNormalize.text=\u0420\u043E\u0437\u0442\u0430\u0448\u0443\u0432\u0430\u043D\u043D\u044F \u0448\u043A\u0430\u043B\u0438 \u0442\u0430 \u0440\u043E\u0437\u043C\u0456\u0440 \u0432\u0456\u0434 0 \u0434\u043E 1 +UIExporterJsonPanel.dynamicExportCheckbox.text=\u0414\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0438\u0439 +UIExporterJsonPanel.normalizeCheckbox.text=\u041D\u043E\u0440\u043C\u0430\u043B\u0456\u0437\u0443\u0432\u0430\u0442\u0438 +UIExporterJsonPanel.colorsExportCheckbox.text=\u041A\u043E\u043B\u044C\u043E\u0440\u0438 +UIExporterJsonPanel.labelNormalize.text=\u0420\u043E\u0437\u0442\u0430\u0448\u0443\u0432\u0430\u043D\u043D\u044F \u0448\u043A\u0430\u043B\u0438 \u0442\u0430 \u0440\u043E\u0437\u043C\u0456\u0440 \u0432\u0456\u0434 0 \u0434\u043E 1 diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_zh_CN.properties b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_zh_CN.properties index 1f32282801..a92ccaad81 100644 --- a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_zh_CN.properties +++ b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_zh_CN.properties @@ -1,119 +1,74 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-15 01\:24+0000\nLast-Translator\: Xi-Nian Zuo \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - OpenIDE-Module-Short-Description=\u6807\u51c6\u8f93\u51fa\u754c\u9762 - UIExporterGDF.name=GDF - UIExporterGEXF.name=GEXF - UIExporterGML.name=GML - UIExporterGraphML.name=GraphML - UIExporterCSV.name=CSV - UIExporterPajek.name=Pajek - UIExporterDL.name=DL - UIExporterVNA.name=VNA +# UIExporterSpreadsheetPanel.name = Spreadsheet UIExporterGDFPanel.jRadioButton1.text=\u5355\u5f15\u53f7 - UIExporterGDFPanel.positionExportCheckbox.text=\u4f4d\u7f6e\uff08X\uff0cY\uff09 - UIExporterGDFPanel.colorsExportCheckbox.text=\u989c\u8272 - UIExporterGDFPanel.attributesExportCheckbox.text=\u5c5e\u6027 - UIExporterGDFPanel.labelExport.text=\u8f93\u51fa\uff1a - UIExporterGDFPanel.jRadioButton2.text=\u53cc\u5f15\u53f7 - UIExporterGDFPanel.quotesCheckbox.text=\u5f15\u7528\u6587\u672c - UIExporterGDFPanel.normalizeCheckbox.text=\u6807\u51c6\u5316 - UIExporterGDFPanel.labelQuotes.text=\u73b0\u573a\u5c01\u88c5\uff0c\u9ed8\u8ba4\u60c5\u51b5\u4e0b\u4f7f\u7528\u53cc\u5f15\u53f7 - UIExporterGDFPanel.labelNormalize.text=0\u548c1\u4e4b\u95f4\u7684\u523b\u5ea6\u4f4d\u7f6e\u548c\u5927\u5c0f - UIExporterGDFPanel.simpleQuotesCheckbox.text=\u5355\u5f15\u53f7 - UIExporterGDFPanel.labelQuotes1.text=\u4f7f\u7528\u5355\u5f15\u53f7\u4ee3\u66ff\u53cc\u5f15\u53f7 - -UIExporterGDFPanel.visibilityCheckbox.text=\u80fd\u89c1\u5ea6\uff08\u53ef\u89c1\uff0c\u53ef\u89c1\u6807\u7b7e\uff09 - -UIExporterGEXFPanel.labelExport.text=\u8f93\u51fa\uff1a - +UIExporterGDFPanel.visibilityCheckbox.text=\u53EF\u89C1\u5EA6\uFF08\u53EF\u89C1\uFF0C\u53EF\u89C1\u6807\u7B7E\uFF09 +UIExporterGEXFPanel.labelExport.text=\u5BFC\u51FA\uFF1A UIExporterGEXFPanel.attributesExportCheckbox.text=\u5c5e\u6027 - UIExporterGEXFPanel.colorsExportCheckbox.text=\u989c\u8272 - UIExporterGEXFPanel.positionExportCheckbox.text=\u4f4d\u7f6e\uff08X\uff0cY\uff0cZ\uff09 - UIExporterGEXFPanel.sizeExportCheckbox.text=\u5c3a\u5bf8 - UIExporterGEXFPanel.normalizeCheckbox.text=\u6807\u51c6\u5316 - UIExporterGEXFPanel.labelNormalize.text=0\u548c1\u4e4b\u95f4\u7684\u523b\u5ea6\u4f4d\u7f6e\u548c\u5927\u5c0f - UIExporterGraphMLPanel.labelExport.text=\u8f93\u51fa\uff1a - UIExporterGraphMLPanel.positionExportCheckbox.text=\u4f4d\u7f6e\uff08X\uff0cY\uff09 - UIExporterGraphMLPanel.normalizeCheckbox.text=\u6807\u51c6\u5316 - UIExporterGraphMLPanel.colorsExportCheckbox.text=\u989c\u8272 - UIExporterGraphMLPanel.attributesExportCheckbox.text=\u5c5e\u6027 - UIExporterGraphMLPanel.sizeExportCheckbox.text=\u5c3a\u5bf8 - UIExporterGraphMLPanel.labelNormalize.text=0\u548c1\u4e4b\u95f4\u7684\u523b\u5ea6\u4f4d\u7f6e\u548c\u5927\u5c0f - -UIExporterCSVPanel.labelExport.text=\u8f93\u51fa\uff1a - +UIExporterCSVPanel.labelExport.text=\u5BFC\u51FA\uFF1A UIExporterCSVPanel.nodeIdCheckbox.text=\u8282\u70b9ID - UIExporterCSVPanel.edgeWeightCheckbox.text=\u8fb9\u7684\u6743\u91cd - UIExporterCSVPanel.listRadio.text=\u540d\u5355 - UIExporterCSVPanel.matrixRadio.text=\u77e9\u9635 - UIExporterCSVPanel.zeroEdgeCheckbox.text=\u6ca1\u6709\u8fb9\u65f6\u4e3a\u96f6 - UIExporterGEXFPanel.dynamicExportCheckbox.text=\u52a8\u6001 - UIExporterPajekPanel.labelExport.text=\u8f93\u51fa\uff1a - -UIExporterPajekPanel.positionExportCheckbox.text=\u4f4d\u7f6e\uff08X\uff0cY\uff09 - +UIExporterPajekPanel.positionExportCheckbox.text=\u4F4D\u7F6E\uFF08x\uFF0Cy\uFF09 UIExporterPajekPanel.edgeWeightCheckbox.text=\u8fb9\u6743\u91cd - UIExporterGML.attributes.text=\u5c5e\u6027 - -UIExporterGML.exportLabel.text=\u8f93\u51fa - -UIExporterGML.positionLabel.text=\u4f4d\u7f6e\uff08X\uff0cY\uff09 - +UIExporterGML.exportLabel.text=\u5BFC\u51FA\uFF1A +UIExporterGML.positionLabel.text=\u4F4D\u7F6E\uFF08x\uFF0Cy\uFF09 UIExporterGML.colorsLabel.text=\u989c\u8272 - UIExporterGML.sizeLabel.text=\u5c3a\u5bf8 - UIExporterGML.edgeWeightLabel.text=\u8fb9\u7684\u6743\u91cd - UIExporterGML.labelLabel.text=\u6807\u7b7e - UIExporterGML.normalize.text=\u6807\u51c6\u5316 - UIExporterGML.normalizeHintLabel.text=0\u548c1\u4e4b\u95f4\u7684\u523b\u5ea6\u4f4d\u7f6e\u548c\u5927\u5c0f - UIExporterGML.indentationLabel.text=\u7f29\u8fdb\uff1a + +# UIExporterSpreadsheetPanel.separatorLabel.text=Field separator: +# UIExporterSpreadsheetPanel.comma=Comma +# UIExporterSpreadsheetPanel.semicolon=Semicolon +# UIExporterSpreadsheetPanel.space=Space +# UIExporterSpreadsheetPanel.tab=Tab +# UIExporterSpreadsheetPanel.columnsLabel.text=Columns: +# UIExporterSpreadsheetPanel.tableLabel.text=Table +# UIExporterSpreadsheetPanel.table.nodes=Nodes +# UIExporterSpreadsheetPanel.table.edges=Edges + + + + +UIExporterSpreadsheetPanel.name=\u7535\u5B50\u8868\u683C +UIExporterJson.name=Json diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_zh_TW.properties b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_zh_TW.properties new file mode 100644 index 0000000000..5abb3254af --- /dev/null +++ b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/Bundle_zh_TW.properties @@ -0,0 +1,66 @@ +OpenIDE-Module-Short-Description=Standard exporters UI +UIExporterGDF.name=GDF +UIExporterGEXF.name=GEXF +UIExporterGML.name=GML +UIExporterGraphML.name=GraphML +UIExporterCSV.name=CSV +UIExporterPajek.name=Pajek +UIExporterDL.name=DL +UIExporterVNA.name=VNA +UIExporterSpreadsheetPanel.name=Spreadsheet +UIExporterGDFPanel.jRadioButton1.text=Simple quotes +UIExporterGDFPanel.positionExportCheckbox.text=Position (x,y) +UIExporterGDFPanel.colorsExportCheckbox.text=Colors +UIExporterGDFPanel.attributesExportCheckbox.text=Attributes +UIExporterGDFPanel.labelExport.text=Export: +UIExporterGDFPanel.jRadioButton2.text=Double quotes +UIExporterGDFPanel.quotesCheckbox.text=Quotes text +UIExporterGDFPanel.normalizeCheckbox.text=Normalize +UIExporterGDFPanel.labelQuotes.text=Field encapsulation use double quotes by default +UIExporterGDFPanel.labelNormalize.text=Scale position and size between 0 and 1 +UIExporterGDFPanel.simpleQuotesCheckbox.text=Simple quotes +UIExporterGDFPanel.labelQuotes1.text=Use simple quotes instead of double quotes +UIExporterGDFPanel.visibilityCheckbox.text=Visibility (visible, label visible) +UIExporterGEXFPanel.labelExport.text=Export: +UIExporterGEXFPanel.attributesExportCheckbox.text=Attributes +UIExporterGEXFPanel.colorsExportCheckbox.text=Colors +UIExporterGEXFPanel.positionExportCheckbox.text=Position (x,y,z) +UIExporterGEXFPanel.sizeExportCheckbox.text=Size +UIExporterGEXFPanel.normalizeCheckbox.text=Normalize +UIExporterGEXFPanel.labelNormalize.text=Scale position and size between 0 and 1 +UIExporterGraphMLPanel.labelExport.text=Export: +UIExporterGraphMLPanel.positionExportCheckbox.text=Position (x,y) +UIExporterGraphMLPanel.normalizeCheckbox.text=Normalize +UIExporterGraphMLPanel.colorsExportCheckbox.text=Colors +UIExporterGraphMLPanel.attributesExportCheckbox.text=Attributes +UIExporterGraphMLPanel.sizeExportCheckbox.text=Size +UIExporterGraphMLPanel.labelNormalize.text=Scale position and size between 0 and 1 +UIExporterCSVPanel.labelExport.text=Export: +UIExporterCSVPanel.nodeIdCheckbox.text=Node ID +UIExporterCSVPanel.edgeWeightCheckbox.text=Edge Weight +UIExporterCSVPanel.listRadio.text=List +UIExporterCSVPanel.matrixRadio.text=Matrix +UIExporterCSVPanel.zeroEdgeCheckbox.text=Zero when no edge +UIExporterGEXFPanel.dynamicExportCheckbox.text=Dynamic +UIExporterPajekPanel.labelExport.text=Export: +UIExporterPajekPanel.positionExportCheckbox.text=Position (x,y) +UIExporterPajekPanel.edgeWeightCheckbox.text=Edge weights +UIExporterGML.attributes.text=Attributes +UIExporterGML.exportLabel.text=Export: +UIExporterGML.positionLabel.text=Position (x, y) +UIExporterGML.colorsLabel.text=Colors +UIExporterGML.sizeLabel.text=Size +UIExporterGML.edgeWeightLabel.text=Edge weight +UIExporterGML.labelLabel.text=Label +UIExporterGML.normalize.text=Normalize +UIExporterGML.normalizeHintLabel.text=Scale position and size between 0 and 1 +UIExporterGML.indentationLabel.text=Indentation: +UIExporterSpreadsheetPanel.separatorLabel.text=Field separator: +UIExporterSpreadsheetPanel.comma=Comma +UIExporterSpreadsheetPanel.semicolon=Semicolon +UIExporterSpreadsheetPanel.space=Space +UIExporterSpreadsheetPanel.tab=Tab +UIExporterSpreadsheetPanel.columnsLabel.text=Columns: +UIExporterSpreadsheetPanel.tableLabel.text=Table +UIExporterSpreadsheetPanel.table.nodes=Nodes +UIExporterSpreadsheetPanel.table.edges=Edges diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/cs.po b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/cs.po deleted file mode 100644 index 9e18281d27..0000000000 --- a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/cs.po +++ /dev/null @@ -1,199 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-06 18:38+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "StandardnΓ­ exportΓ©Ε™i rozhranΓ­" - -msgid "UIExporterGDF.name" -msgstr "GDF" - -msgid "UIExporterGEXF.name" -msgstr "GEXF" - -msgid "UIExporterGML.name" -msgstr "GML" - -msgid "UIExporterGraphML.name" -msgstr "GraphML" - -msgid "UIExporterCSV.name" -msgstr "CSV" - -msgid "UIExporterPajek.name" -msgstr "Pajek" - -msgid "UIExporterDL.name" -msgstr "DL" - -msgid "UIExporterVNA.name" -msgstr "VNA" - -msgid "UIExporterGDFPanel.jRadioButton1.text" -msgstr "JednoduchΓ© uvozovky" - -msgid "UIExporterGDFPanel.positionExportCheckbox.text" -msgstr "UmΓ­stΔ›nΓ­ (x,y)" - -msgid "UIExporterGDFPanel.colorsExportCheckbox.text" -msgstr "Barvy" - -msgid "UIExporterGDFPanel.attributesExportCheckbox.text" -msgstr "Vlastnosti" - -msgid "UIExporterGDFPanel.labelExport.text" -msgstr "Export:" - -msgid "UIExporterGDFPanel.jRadioButton2.text" -msgstr "DvojitΓ© uvozovky" - -msgid "UIExporterGDFPanel.quotesCheckbox.text" -msgstr "UmisΕ₯uje text do uvozovek" - -msgid "UIExporterGDFPanel.normalizeCheckbox.text" -msgstr "Normalizovat" - -msgid "UIExporterGDFPanel.labelQuotes.text" -msgstr "ZapouzdΕ™enΓ­ pole standardnΔ› pouΕΎΓ­vΓ‘ dvojitΓ© uvozovky" - -msgid "UIExporterGDFPanel.labelNormalize.text" -msgstr "ZmΔ›nit velikost a pozici mezi 0 a 1" - -msgid "UIExporterGDFPanel.simpleQuotesCheckbox.text" -msgstr "JednoduchΓ© uvozovky" - -msgid "UIExporterGDFPanel.labelQuotes1.text" -msgstr "PouΕΎΓ­t jednoduchΓ© uvozovky mΓ­sto dvojitΓ½ch" - -msgid "UIExporterGDFPanel.visibilityCheckbox.text" -msgstr "Viditelnost (viditelnΓ©, Ε‘tΓ­tek viditelnΓ½)" - -msgid "UIExporterGEXFPanel.labelExport.text" -msgstr "Export:" - -msgid "UIExporterGEXFPanel.attributesExportCheckbox.text" -msgstr "Vlastnosti" - -msgid "UIExporterGEXFPanel.colorsExportCheckbox.text" -msgstr "Barvy" - -msgid "UIExporterGEXFPanel.positionExportCheckbox.text" -msgstr "UmΓ­stΔ›nΓ­ (x,y)" - -msgid "UIExporterGEXFPanel.sizeExportCheckbox.text" -msgstr "Velikost" - -msgid "UIExporterGEXFPanel.normalizeCheckbox.text" -msgstr "Normalizovat" - -msgid "UIExporterGEXFPanel.labelNormalize.text" -msgstr "ZmΔ›nit velikost a pozici mezi 0 a 1" - -msgid "UIExporterGraphMLPanel.labelExport.text" -msgstr "Export:" - -msgid "UIExporterGraphMLPanel.positionExportCheckbox.text" -msgstr "UmΓ­stΔ›nΓ­ (x,y)" - -msgid "UIExporterGraphMLPanel.normalizeCheckbox.text" -msgstr "Normalizovat" - -msgid "UIExporterGraphMLPanel.colorsExportCheckbox.text" -msgstr "Barvy" - -msgid "UIExporterGraphMLPanel.attributesExportCheckbox.text" -msgstr "Vlastnosti" - -msgid "UIExporterGraphMLPanel.sizeExportCheckbox.text" -msgstr "Velikost" - -msgid "UIExporterGraphMLPanel.labelNormalize.text" -msgstr "ZmΔ›nit velikost a pozici mezi 0 a 1" - -msgid "UIExporterGraphMLPanel.hierarchyCheckbox.text" -msgstr "Exportovat hierarchii" - -msgid "UIExporterGraphMLPanel.labelNormalize1.text" -msgstr "Dokončit strom uzlΕ― bez meta hran" - -msgid "UIExporterCSVPanel.labelExport.text" -msgstr "Export:" - -msgid "UIExporterCSVPanel.nodeIdCheckbox.text" -msgstr "ID uzlu" - -msgid "UIExporterCSVPanel.edgeWeightCheckbox.text" -msgstr "VΓ‘ha hrany" - -msgid "UIExporterCSVPanel.listRadio.text" -msgstr "Seznam" - -msgid "UIExporterCSVPanel.matrixRadio.text" -msgstr "Matice" - -msgid "UIExporterCSVPanel.zeroEdgeCheckbox.text" -msgstr "Nula kdyΕΎ nenΓ­ hrana" - -msgid "UIExporterGEXFPanel.dynamicExportCheckbox.text" -msgstr "DynamickΓ©" - -msgid "UIExporterGEXFPanel.labelNormalize1.text" -msgstr "Dokončit strom uzlΕ― bez meta hran" - -msgid "UIExporterGEXFPanel.hierarchyCheckbox.text" -msgstr "Exportovat hierarchii" - -msgid "UIExporterPajekPanel.labelExport.text" -msgstr "Export:" - -msgid "UIExporterPajekPanel.positionExportCheckbox.text" -msgstr "UmΓ­stΔ›nΓ­ (x,y)" - -msgid "UIExporterPajekPanel.edgeWeightCheckbox.text" -msgstr "VΓ‘hy hran" - -msgid "UIExporterGML.attributes.text" -msgstr "Vlastnosti" - -msgid "UIExporterGML.exportLabel.text" -msgstr "Export:" - -msgid "UIExporterGML.positionLabel.text" -msgstr "UmΓ­stΔ›nΓ­ (x,y)" - -msgid "UIExporterGML.colorsLabel.text" -msgstr "Barvy" - -msgid "UIExporterGML.sizeLabel.text" -msgstr "Velikost" - -msgid "UIExporterGML.edgeWeightLabel.text" -msgstr "VΓ‘ha hrany" - -msgid "UIExporterGML.labelLabel.text" -msgstr "Ε tΓ­tek" - -msgid "UIExporterGML.normalize.text" -msgstr "Normalizovat" - -msgid "UIExporterGML.normalizeHintLabel.text" -msgstr "ZmΔ›nit velikost a pozici mezi 0 a 1" - -msgid "UIExporterGML.indentationLabel.text" -msgstr "OdsazenΓ­:" diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/es.po b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/es.po deleted file mode 100644 index 94d14e0450..0000000000 --- a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/es.po +++ /dev/null @@ -1,200 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011, 2012. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-05 17:50+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interfaz de usuario de los exportadores estΓ‘ndar" - -msgid "UIExporterGDF.name" -msgstr "GDF" - -msgid "UIExporterGEXF.name" -msgstr "GEXF" - -msgid "UIExporterGML.name" -msgstr "GML" - -msgid "UIExporterGraphML.name" -msgstr "GraphML" - -msgid "UIExporterCSV.name" -msgstr "CSV" - -msgid "UIExporterPajek.name" -msgstr "Pajek" - -msgid "UIExporterDL.name" -msgstr "DL" - -msgid "UIExporterVNA.name" -msgstr "VNA" - -msgid "UIExporterGDFPanel.jRadioButton1.text" -msgstr "Comillas simples" - -msgid "UIExporterGDFPanel.positionExportCheckbox.text" -msgstr "PosiciΓ³n (x,y)" - -msgid "UIExporterGDFPanel.colorsExportCheckbox.text" -msgstr "Colores" - -msgid "UIExporterGDFPanel.attributesExportCheckbox.text" -msgstr "Atributos" - -msgid "UIExporterGDFPanel.labelExport.text" -msgstr "Exportar:" - -msgid "UIExporterGDFPanel.jRadioButton2.text" -msgstr "Comillas dobles" - -msgid "UIExporterGDFPanel.quotesCheckbox.text" -msgstr "Texto entre comillas" - -msgid "UIExporterGDFPanel.normalizeCheckbox.text" -msgstr "Normalizar" - -msgid "UIExporterGDFPanel.labelQuotes.text" -msgstr "La encapsulaciΓ³n de los campos usa comillas dobles por defecto" - -msgid "UIExporterGDFPanel.labelNormalize.text" -msgstr "Escalar posiciΓ³n y tamaΓ±o entre 0 y 1" - -msgid "UIExporterGDFPanel.simpleQuotesCheckbox.text" -msgstr "Comillas simples" - -msgid "UIExporterGDFPanel.labelQuotes1.text" -msgstr "Usar comillas simples en lugar de comillas dobles" - -msgid "UIExporterGDFPanel.visibilityCheckbox.text" -msgstr "Visibilidad (grafo visible, etiquetas visibles)" - -msgid "UIExporterGEXFPanel.labelExport.text" -msgstr "Exportar:" - -msgid "UIExporterGEXFPanel.attributesExportCheckbox.text" -msgstr "Atributos" - -msgid "UIExporterGEXFPanel.colorsExportCheckbox.text" -msgstr "Colores" - -msgid "UIExporterGEXFPanel.positionExportCheckbox.text" -msgstr "PosiciΓ³n (x,y)" - -msgid "UIExporterGEXFPanel.sizeExportCheckbox.text" -msgstr "TamaΓ±o" - -msgid "UIExporterGEXFPanel.normalizeCheckbox.text" -msgstr "Normalizar" - -msgid "UIExporterGEXFPanel.labelNormalize.text" -msgstr "Escalar posiciΓ³n y tamaΓ±o entre 0 y 1" - -msgid "UIExporterGraphMLPanel.labelExport.text" -msgstr "Exportar:" - -msgid "UIExporterGraphMLPanel.positionExportCheckbox.text" -msgstr "PosiciΓ³n (x,y)" - -msgid "UIExporterGraphMLPanel.normalizeCheckbox.text" -msgstr "Normalizar" - -msgid "UIExporterGraphMLPanel.colorsExportCheckbox.text" -msgstr "Colores" - -msgid "UIExporterGraphMLPanel.attributesExportCheckbox.text" -msgstr "Atributos" - -msgid "UIExporterGraphMLPanel.sizeExportCheckbox.text" -msgstr "TamaΓ±o" - -msgid "UIExporterGraphMLPanel.labelNormalize.text" -msgstr "Escalar tamaΓ±o y posiciΓ³n entre 0 y 1" - -msgid "UIExporterGraphMLPanel.hierarchyCheckbox.text" -msgstr "Exportar jerarquΓ­a" - -msgid "UIExporterGraphMLPanel.labelNormalize1.text" -msgstr "Arbol de nodos completo sin meta-aristas" - -msgid "UIExporterCSVPanel.labelExport.text" -msgstr "Exportar:" - -msgid "UIExporterCSVPanel.nodeIdCheckbox.text" -msgstr "ID de nodo" - -msgid "UIExporterCSVPanel.edgeWeightCheckbox.text" -msgstr "Peso de arista" - -msgid "UIExporterCSVPanel.listRadio.text" -msgstr "Lista" - -msgid "UIExporterCSVPanel.matrixRadio.text" -msgstr "Matriz" - -msgid "UIExporterCSVPanel.zeroEdgeCheckbox.text" -msgstr "Cero cuando no hay arista" - -msgid "UIExporterGEXFPanel.dynamicExportCheckbox.text" -msgstr "DinΓ‘mico" - -msgid "UIExporterGEXFPanel.labelNormalize1.text" -msgstr "Completar el arbol de nodos sin meta-aristas" - -msgid "UIExporterGEXFPanel.hierarchyCheckbox.text" -msgstr "Exportar jerarquΓ­a" - -msgid "UIExporterPajekPanel.labelExport.text" -msgstr "Exportar:" - -msgid "UIExporterPajekPanel.positionExportCheckbox.text" -msgstr "PosiciΓ³n (x,y)" - -msgid "UIExporterPajekPanel.edgeWeightCheckbox.text" -msgstr "Peso de arista" - -msgid "UIExporterGML.attributes.text" -msgstr "Atributos" - -msgid "UIExporterGML.exportLabel.text" -msgstr "Exportar:" - -msgid "UIExporterGML.positionLabel.text" -msgstr "PosiciΓ³n (x,y)" - -msgid "UIExporterGML.colorsLabel.text" -msgstr "Colores" - -msgid "UIExporterGML.sizeLabel.text" -msgstr "TamaΓ±o" - -msgid "UIExporterGML.edgeWeightLabel.text" -msgstr "Peso de aristas" - -msgid "UIExporterGML.labelLabel.text" -msgstr "Etiqueta" - -msgid "UIExporterGML.normalize.text" -msgstr "Normalizar" - -msgid "UIExporterGML.normalizeHintLabel.text" -msgstr "Escalar posiciΓ³n y tamaΓ±o entre 0 y 1" - -msgid "UIExporterGML.indentationLabel.text" -msgstr "IndentaciΓ³n:" diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/fr.po b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/fr.po deleted file mode 100644 index a404bf8311..0000000000 --- a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/fr.po +++ /dev/null @@ -1,200 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-08 15:18+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interface utilisateur des exporteurs standards" - -msgid "UIExporterGDF.name" -msgstr "GDF" - -msgid "UIExporterGEXF.name" -msgstr "GEXF" - -msgid "UIExporterGML.name" -msgstr "GML" - -msgid "UIExporterGraphML.name" -msgstr "GraphML" - -msgid "UIExporterCSV.name" -msgstr "CSV" - -msgid "UIExporterPajek.name" -msgstr "Pajek" - -msgid "UIExporterDL.name" -msgstr "DL" - -msgid "UIExporterVNA.name" -msgstr "VNA" - -msgid "UIExporterGDFPanel.jRadioButton1.text" -msgstr "Guillemets simples" - -msgid "UIExporterGDFPanel.positionExportCheckbox.text" -msgstr "Position (x,y)" - -msgid "UIExporterGDFPanel.colorsExportCheckbox.text" -msgstr "Couleurs" - -msgid "UIExporterGDFPanel.attributesExportCheckbox.text" -msgstr "Attributs" - -msgid "UIExporterGDFPanel.labelExport.text" -msgstr "Export :" - -msgid "UIExporterGDFPanel.jRadioButton2.text" -msgstr "Guillemets doubles" - -msgid "UIExporterGDFPanel.quotesCheckbox.text" -msgstr "Texte entre guillemets" - -msgid "UIExporterGDFPanel.normalizeCheckbox.text" -msgstr "Normaliser" - -msgid "UIExporterGDFPanel.labelQuotes.text" -msgstr "L'encapsulation des champs prend des guillemets doubles par dΓ©faut" - -msgid "UIExporterGDFPanel.labelNormalize.text" -msgstr "RΓ©duit les positions et tailles entre 0 et 1" - -msgid "UIExporterGDFPanel.simpleQuotesCheckbox.text" -msgstr "Guillemets simples" - -msgid "UIExporterGDFPanel.labelQuotes1.text" -msgstr "Utiliser les guillemets simples Γ  la place des guillemets doubles" - -msgid "UIExporterGDFPanel.visibilityCheckbox.text" -msgstr "VisibilitΓ© (graphe visible, labels visibles)" - -msgid "UIExporterGEXFPanel.labelExport.text" -msgstr "Export :" - -msgid "UIExporterGEXFPanel.attributesExportCheckbox.text" -msgstr "Attributs" - -msgid "UIExporterGEXFPanel.colorsExportCheckbox.text" -msgstr "Couleurs" - -msgid "UIExporterGEXFPanel.positionExportCheckbox.text" -msgstr "Position (x,y)" - -msgid "UIExporterGEXFPanel.sizeExportCheckbox.text" -msgstr "Taille" - -msgid "UIExporterGEXFPanel.normalizeCheckbox.text" -msgstr "Normaliser" - -msgid "UIExporterGEXFPanel.labelNormalize.text" -msgstr "RΓ©duit les positions et tailles entre 0 et 1" - -msgid "UIExporterGraphMLPanel.labelExport.text" -msgstr "Export :" - -msgid "UIExporterGraphMLPanel.positionExportCheckbox.text" -msgstr "Position (x,y)" - -msgid "UIExporterGraphMLPanel.normalizeCheckbox.text" -msgstr "Normaliser" - -msgid "UIExporterGraphMLPanel.colorsExportCheckbox.text" -msgstr "Couleurs" - -msgid "UIExporterGraphMLPanel.attributesExportCheckbox.text" -msgstr "Attributs" - -msgid "UIExporterGraphMLPanel.sizeExportCheckbox.text" -msgstr "Taille" - -msgid "UIExporterGraphMLPanel.labelNormalize.text" -msgstr "RΓ©duit les positions et tailles entre 0 et 1" - -msgid "UIExporterGraphMLPanel.hierarchyCheckbox.text" -msgstr "Exporter la hiΓ©rarchie" - -msgid "UIExporterGraphMLPanel.labelNormalize1.text" -msgstr "Arbre complet sous les mΓ©ta-liens" - -msgid "UIExporterCSVPanel.labelExport.text" -msgstr "Export :" - -msgid "UIExporterCSVPanel.nodeIdCheckbox.text" -msgstr "ID de noeud" - -msgid "UIExporterCSVPanel.edgeWeightCheckbox.text" -msgstr "Poids des liens" - -msgid "UIExporterCSVPanel.listRadio.text" -msgstr "Liste" - -msgid "UIExporterCSVPanel.matrixRadio.text" -msgstr "Matrice" - -msgid "UIExporterCSVPanel.zeroEdgeCheckbox.text" -msgstr "Zero si aucun lien" - -msgid "UIExporterGEXFPanel.dynamicExportCheckbox.text" -msgstr "Dynamique" - -msgid "UIExporterGEXFPanel.labelNormalize1.text" -msgstr "Arbre complet sous les mΓ©ta-liens" - -msgid "UIExporterGEXFPanel.hierarchyCheckbox.text" -msgstr "Exporter la hiΓ©rarchie" - -msgid "UIExporterPajekPanel.labelExport.text" -msgstr "Export :" - -msgid "UIExporterPajekPanel.positionExportCheckbox.text" -msgstr "Position (x,y)" - -msgid "UIExporterPajekPanel.edgeWeightCheckbox.text" -msgstr "Poids des liens" - -msgid "UIExporterGML.attributes.text" -msgstr "Attributs" - -msgid "UIExporterGML.exportLabel.text" -msgstr "Export :" - -msgid "UIExporterGML.positionLabel.text" -msgstr "Position (x, y)" - -msgid "UIExporterGML.colorsLabel.text" -msgstr "Couleurs" - -msgid "UIExporterGML.sizeLabel.text" -msgstr "Taille" - -msgid "UIExporterGML.edgeWeightLabel.text" -msgstr "Poids des poids" - -msgid "UIExporterGML.labelLabel.text" -msgstr "Label" - -msgid "UIExporterGML.normalize.text" -msgstr "Normaliser" - -msgid "UIExporterGML.normalizeHintLabel.text" -msgstr "RΓ©duit les positions et tailles entre 0 et 1" - -msgid "UIExporterGML.indentationLabel.text" -msgstr "Indentation :" diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/ja.po b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/ja.po deleted file mode 100644 index 9d1cdf6005..0000000000 --- a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/ja.po +++ /dev/null @@ -1,199 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-15 10:53+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "標準エクスポータUI" - -msgid "UIExporterGDF.name" -msgstr "GDF" - -msgid "UIExporterGEXF.name" -msgstr "GEXF" - -msgid "UIExporterGML.name" -msgstr "GML" - -msgid "UIExporterGraphML.name" -msgstr "GraphML" - -msgid "UIExporterCSV.name" -msgstr "CSV" - -msgid "UIExporterPajek.name" -msgstr "Pajek" - -msgid "UIExporterDL.name" -msgstr "DL" - -msgid "UIExporterVNA.name" -msgstr "VNA" - -msgid "UIExporterGDFPanel.jRadioButton1.text" -msgstr "ε˜δΈ€εΌ•η”¨η¬¦" - -msgid "UIExporterGDFPanel.positionExportCheckbox.text" -msgstr "位η½(x,y)" - -msgid "UIExporterGDFPanel.colorsExportCheckbox.text" -msgstr "色" - -msgid "UIExporterGDFPanel.attributesExportCheckbox.text" -msgstr "ε±žζ€§" - -msgid "UIExporterGDFPanel.labelExport.text" -msgstr "γ‚¨γ‚―γ‚ΉγƒγƒΌγƒˆ:" - -msgid "UIExporterGDFPanel.jRadioButton2.text" -msgstr "δΊŒι‡εΌ•η”¨η¬¦" - -msgid "UIExporterGDFPanel.quotesCheckbox.text" -msgstr "εΌ•η”¨γƒ†γ‚­γ‚Ήγƒˆ" - -msgid "UIExporterGDFPanel.normalizeCheckbox.text" -msgstr "ζ­£θ¦εŒ–" - -msgid "UIExporterGDFPanel.labelQuotes.text" -msgstr "フィールドγγ‚«γƒ—γ‚»γƒ«εŒ–γ―γ€γƒ‡γƒ•γ‚©γƒ«γƒˆγ§γ―γ€δΊŒι‡εΌ•η”¨η¬¦γ‚’δ½Ώη”¨γ™γ‚‹" - -msgid "UIExporterGDFPanel.labelNormalize.text" -msgstr "0と1γι–“γγ‚Ήγ‚±γƒΌγƒ«γδ½η½γ¨γ‚΅γ‚€γ‚Ί" - -msgid "UIExporterGDFPanel.simpleQuotesCheckbox.text" -msgstr "ε˜δΈ€εΌ•η”¨η¬¦" - -msgid "UIExporterGDFPanel.labelQuotes1.text" -msgstr "δΊŒι‡εΌ•η”¨η¬¦γδ»£γ‚γ‚Šγ«ε˜δΈ€εΌ•用符を使用" - -msgid "UIExporterGDFPanel.visibilityCheckbox.text" -msgstr "可視性(可視、可視ラベル)" - -msgid "UIExporterGEXFPanel.labelExport.text" -msgstr "γ‚¨γ‚―γ‚ΉγƒγƒΌγƒˆ:" - -msgid "UIExporterGEXFPanel.attributesExportCheckbox.text" -msgstr "ε±žζ€§" - -msgid "UIExporterGEXFPanel.colorsExportCheckbox.text" -msgstr "色" - -msgid "UIExporterGEXFPanel.positionExportCheckbox.text" -msgstr "δ½η½ (x,y,z)" - -msgid "UIExporterGEXFPanel.sizeExportCheckbox.text" -msgstr "倧きさ" - -msgid "UIExporterGEXFPanel.normalizeCheckbox.text" -msgstr "ζ­£θ¦εŒ–" - -msgid "UIExporterGEXFPanel.labelNormalize.text" -msgstr "位η½γ¨ε€§γγ•γ‚’0と1γι–“で葨す" - -msgid "UIExporterGraphMLPanel.labelExport.text" -msgstr "γ‚¨γ‚―γ‚ΉγƒγƒΌγƒˆ:" - -msgid "UIExporterGraphMLPanel.positionExportCheckbox.text" -msgstr "δ½η½ (x,y)" - -msgid "UIExporterGraphMLPanel.normalizeCheckbox.text" -msgstr "ζ­£θ¦εŒ–" - -msgid "UIExporterGraphMLPanel.colorsExportCheckbox.text" -msgstr "色" - -msgid "UIExporterGraphMLPanel.attributesExportCheckbox.text" -msgstr "ε±žζ€§" - -msgid "UIExporterGraphMLPanel.sizeExportCheckbox.text" -msgstr "倧きさ" - -msgid "UIExporterGraphMLPanel.labelNormalize.text" -msgstr "位η½γ¨ε€§γγ•γ‚’0と1γι–“で葨す" - -msgid "UIExporterGraphMLPanel.hierarchyCheckbox.text" -msgstr "ιšŽε±€γ‚’γ‚¨γ‚―γ‚ΉγƒγƒΌγƒˆ" - -msgid "UIExporterGraphMLPanel.labelNormalize1.text" -msgstr "パタ辺γͺしγεŒε…¨γƒŽγƒΌγƒ‰ζ¨Ή" - -msgid "UIExporterCSVPanel.labelExport.text" -msgstr "γ‚¨γ‚―γ‚ΉγƒγƒΌγƒˆ" - -msgid "UIExporterCSVPanel.nodeIdCheckbox.text" -msgstr "γƒŽγƒΌγƒ‰ID" - -msgid "UIExporterCSVPanel.edgeWeightCheckbox.text" -msgstr "θΎΊγι‡γΏ" - -msgid "UIExporterCSVPanel.listRadio.text" -msgstr "γƒͺγ‚Ήγƒˆ" - -msgid "UIExporterCSVPanel.matrixRadio.text" -msgstr "θ‘Œεˆ—" - -msgid "UIExporterCSVPanel.zeroEdgeCheckbox.text" -msgstr "辺がγͺいときゼロ" - -msgid "UIExporterGEXFPanel.dynamicExportCheckbox.text" -msgstr "ε‹•ηš„" - -msgid "UIExporterGEXFPanel.labelNormalize1.text" -msgstr "パタ辺γͺしγεŒε…¨γƒŽγƒΌγƒ‰ζ¨Ή" - -msgid "UIExporterGEXFPanel.hierarchyCheckbox.text" -msgstr "階局γγ‚¨γ‚―γ‚ΉγƒγƒΌγƒˆ" - -msgid "UIExporterPajekPanel.labelExport.text" -msgstr "γ‚¨γ‚―γ‚ΉγƒγƒΌγƒˆ:" - -msgid "UIExporterPajekPanel.positionExportCheckbox.text" -msgstr "δ½η½ (x,y)" - -msgid "UIExporterPajekPanel.edgeWeightCheckbox.text" -msgstr "θΎΊγι‡γΏ" - -msgid "UIExporterGML.attributes.text" -msgstr "ε±žζ€§" - -msgid "UIExporterGML.exportLabel.text" -msgstr "γ‚¨γ‚―γ‚ΉγƒγƒΌγƒˆ:" - -msgid "UIExporterGML.positionLabel.text" -msgstr "位η½(x, y)" - -msgid "UIExporterGML.colorsLabel.text" -msgstr "色" - -msgid "UIExporterGML.sizeLabel.text" -msgstr "γ‚΅γ‚€γ‚Ί" - -msgid "UIExporterGML.edgeWeightLabel.text" -msgstr "θΎΊγι‡γΏ" - -msgid "UIExporterGML.labelLabel.text" -msgstr "ラベル" - -msgid "UIExporterGML.normalize.text" -msgstr "ζ­£θ¦εŒ–" - -msgid "UIExporterGML.normalizeHintLabel.text" -msgstr "位η½γ¨γ‚΅γ‚€γ‚Ίγ‚’0と1γι–“γ§θ¨ˆγ‚‹" - -msgid "UIExporterGML.indentationLabel.text" -msgstr "むンデンテーション:" diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/org-gephi-ui-exporter-plugin.pot b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/org-gephi-ui-exporter-plugin.pot deleted file mode 100644 index 605f89624b..0000000000 --- a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/org-gephi-ui-exporter-plugin.pot +++ /dev/null @@ -1,196 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Standard exporters UI" - -msgid "UIExporterGDF.name" -msgstr "GDF" - -msgid "UIExporterGEXF.name" -msgstr "GEXF" - -msgid "UIExporterGML.name" -msgstr "GML" - -msgid "UIExporterGraphML.name" -msgstr "GraphML" - -msgid "UIExporterCSV.name" -msgstr "CSV" - -msgid "UIExporterPajek.name" -msgstr "Pajek" - -msgid "UIExporterDL.name" -msgstr "DL" - -msgid "UIExporterVNA.name" -msgstr "VNA" - -msgid "UIExporterGDFPanel.jRadioButton1.text" -msgstr "Simple quotes" - -msgid "UIExporterGDFPanel.positionExportCheckbox.text" -msgstr "Position (x,y)" - -msgid "UIExporterGDFPanel.colorsExportCheckbox.text" -msgstr "Colors" - -msgid "UIExporterGDFPanel.attributesExportCheckbox.text" -msgstr "Attributes" - -msgid "UIExporterGDFPanel.labelExport.text" -msgstr "Export:" - -msgid "UIExporterGDFPanel.jRadioButton2.text" -msgstr "Double quotes" - -msgid "UIExporterGDFPanel.quotesCheckbox.text" -msgstr "Quotes text" - -msgid "UIExporterGDFPanel.normalizeCheckbox.text" -msgstr "Normalize" - -msgid "UIExporterGDFPanel.labelQuotes.text" -msgstr "Field encapsulation use double quotes by default" - -msgid "UIExporterGDFPanel.labelNormalize.text" -msgstr "Scale position and size between 0 and 1" - -msgid "UIExporterGDFPanel.simpleQuotesCheckbox.text" -msgstr "Simple quotes" - -msgid "UIExporterGDFPanel.labelQuotes1.text" -msgstr "Use simple quotes instead of double quotes" - -msgid "UIExporterGDFPanel.visibilityCheckbox.text" -msgstr "Visibility (visible, label visible)" - -msgid "UIExporterGEXFPanel.labelExport.text" -msgstr "Export:" - -msgid "UIExporterGEXFPanel.attributesExportCheckbox.text" -msgstr "Attributes" - -msgid "UIExporterGEXFPanel.colorsExportCheckbox.text" -msgstr "Colors" - -msgid "UIExporterGEXFPanel.positionExportCheckbox.text" -msgstr "Position (x,y,z)" - -msgid "UIExporterGEXFPanel.sizeExportCheckbox.text" -msgstr "Size" - -msgid "UIExporterGEXFPanel.normalizeCheckbox.text" -msgstr "Normalize" - -msgid "UIExporterGEXFPanel.labelNormalize.text" -msgstr "Scale position and size between 0 and 1" - -msgid "UIExporterGraphMLPanel.labelExport.text" -msgstr "Export:" - -msgid "UIExporterGraphMLPanel.positionExportCheckbox.text" -msgstr "Position (x,y)" - -msgid "UIExporterGraphMLPanel.normalizeCheckbox.text" -msgstr "Normalize" - -msgid "UIExporterGraphMLPanel.colorsExportCheckbox.text" -msgstr "Colors" - -msgid "UIExporterGraphMLPanel.attributesExportCheckbox.text" -msgstr "Attributes" - -msgid "UIExporterGraphMLPanel.sizeExportCheckbox.text" -msgstr "Size" - -msgid "UIExporterGraphMLPanel.labelNormalize.text" -msgstr "Scale position and size between 0 and 1" - -msgid "UIExporterGraphMLPanel.hierarchyCheckbox.text" -msgstr "Export hierarchy" - -msgid "UIExporterGraphMLPanel.labelNormalize1.text" -msgstr "Complete node tree without meta edges" - -msgid "UIExporterCSVPanel.labelExport.text" -msgstr "Export:" - -msgid "UIExporterCSVPanel.nodeIdCheckbox.text" -msgstr "Node ID" - -msgid "UIExporterCSVPanel.edgeWeightCheckbox.text" -msgstr "Edge Weight" - -msgid "UIExporterCSVPanel.listRadio.text" -msgstr "List" - -msgid "UIExporterCSVPanel.matrixRadio.text" -msgstr "Matrix" - -msgid "UIExporterCSVPanel.zeroEdgeCheckbox.text" -msgstr "Zero when no edge" - -msgid "UIExporterGEXFPanel.dynamicExportCheckbox.text" -msgstr "Dynamic" - -msgid "UIExporterGEXFPanel.labelNormalize1.text" -msgstr "Complete node tree without meta edges" - -msgid "UIExporterGEXFPanel.hierarchyCheckbox.text" -msgstr "Export hierarchy" - -msgid "UIExporterPajekPanel.labelExport.text" -msgstr "Export:" - -msgid "UIExporterPajekPanel.positionExportCheckbox.text" -msgstr "Position (x,y)" - -msgid "UIExporterPajekPanel.edgeWeightCheckbox.text" -msgstr "Edge weights" - -msgid "UIExporterGML.attributes.text" -msgstr "Attributes" - -msgid "UIExporterGML.exportLabel.text" -msgstr "Export:" - -msgid "UIExporterGML.positionLabel.text" -msgstr "Position (x, y)" - -msgid "UIExporterGML.colorsLabel.text" -msgstr "Colors" - -msgid "UIExporterGML.sizeLabel.text" -msgstr "Size" - -msgid "UIExporterGML.edgeWeightLabel.text" -msgstr "Edge weight" - -msgid "UIExporterGML.labelLabel.text" -msgstr "Label" - -msgid "UIExporterGML.normalize.text" -msgstr "Normalize" - -msgid "UIExporterGML.normalizeHintLabel.text" -msgstr "Scale position and size between 0 and 1" - -msgid "UIExporterGML.indentationLabel.text" -msgstr "Indentation:" diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/pt_BR.po b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/pt_BR.po deleted file mode 100644 index 7e065b52ae..0000000000 --- a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/pt_BR.po +++ /dev/null @@ -1,200 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -# CΓ©lio Faria Jr. , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-12 12:31+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interface de usuΓ‘rio dos exportadores padrΓ£o" - -msgid "UIExporterGDF.name" -msgstr "GDF" - -msgid "UIExporterGEXF.name" -msgstr "GEXF" - -msgid "UIExporterGML.name" -msgstr "GML" - -msgid "UIExporterGraphML.name" -msgstr "GraphML" - -msgid "UIExporterCSV.name" -msgstr "CSV" - -msgid "UIExporterPajek.name" -msgstr "Pajek" - -msgid "UIExporterDL.name" -msgstr "Exportador DL" - -msgid "UIExporterVNA.name" -msgstr "VNA" - -msgid "UIExporterGDFPanel.jRadioButton1.text" -msgstr "Aspas simples" - -msgid "UIExporterGDFPanel.positionExportCheckbox.text" -msgstr "PosiΓ§Γ£o (x, y)" - -msgid "UIExporterGDFPanel.colorsExportCheckbox.text" -msgstr "Cores" - -msgid "UIExporterGDFPanel.attributesExportCheckbox.text" -msgstr "Atributos" - -msgid "UIExporterGDFPanel.labelExport.text" -msgstr "Exportar:" - -msgid "UIExporterGDFPanel.jRadioButton2.text" -msgstr "Aspas duplas" - -msgid "UIExporterGDFPanel.quotesCheckbox.text" -msgstr "Texto entre aspas" - -msgid "UIExporterGDFPanel.normalizeCheckbox.text" -msgstr "Normalizar" - -msgid "UIExporterGDFPanel.labelQuotes.text" -msgstr "Encapsulamento de campo usa aspas duplas por padrΓ£o" - -msgid "UIExporterGDFPanel.labelNormalize.text" -msgstr "Escalonar posiΓ§Γ£o e tamanho entre 0 e 1" - -msgid "UIExporterGDFPanel.simpleQuotesCheckbox.text" -msgstr "Aspas simples" - -msgid "UIExporterGDFPanel.labelQuotes1.text" -msgstr "Usar aspas simples em vez de aspas duplas" - -msgid "UIExporterGDFPanel.visibilityCheckbox.text" -msgstr "Visibilidade (rΓ³tulo visΓ­vel, visΓ­vel)" - -msgid "UIExporterGEXFPanel.labelExport.text" -msgstr "Exportar:" - -msgid "UIExporterGEXFPanel.attributesExportCheckbox.text" -msgstr "Atributos" - -msgid "UIExporterGEXFPanel.colorsExportCheckbox.text" -msgstr "Cores" - -msgid "UIExporterGEXFPanel.positionExportCheckbox.text" -msgstr "PosiΓ§Γ£o (x, y, z)" - -msgid "UIExporterGEXFPanel.sizeExportCheckbox.text" -msgstr "Tamanho" - -msgid "UIExporterGEXFPanel.normalizeCheckbox.text" -msgstr "Normalizar" - -msgid "UIExporterGEXFPanel.labelNormalize.text" -msgstr "Escalonar posiΓ§Γ£o e tamanho entre 0 e 1" - -msgid "UIExporterGraphMLPanel.labelExport.text" -msgstr "Exportar:" - -msgid "UIExporterGraphMLPanel.positionExportCheckbox.text" -msgstr "PosiΓ§Γ£o (x, y)" - -msgid "UIExporterGraphMLPanel.normalizeCheckbox.text" -msgstr "Normalizar" - -msgid "UIExporterGraphMLPanel.colorsExportCheckbox.text" -msgstr "Cores" - -msgid "UIExporterGraphMLPanel.attributesExportCheckbox.text" -msgstr "Atributos" - -msgid "UIExporterGraphMLPanel.sizeExportCheckbox.text" -msgstr "Tamanho" - -msgid "UIExporterGraphMLPanel.labelNormalize.text" -msgstr "Escalonar posiΓ§Γ£o e tamanho entre 0 e 1" - -msgid "UIExporterGraphMLPanel.hierarchyCheckbox.text" -msgstr "Hierarquia de exportaΓ§Γ£o" - -msgid "UIExporterGraphMLPanel.labelNormalize1.text" -msgstr "Árvore de nΓ³s completa sem meta-arestas" - -msgid "UIExporterCSVPanel.labelExport.text" -msgstr "Exportar:" - -msgid "UIExporterCSVPanel.nodeIdCheckbox.text" -msgstr "ID de nΓ³" - -msgid "UIExporterCSVPanel.edgeWeightCheckbox.text" -msgstr "Peso da aresta" - -msgid "UIExporterCSVPanel.listRadio.text" -msgstr "Lista" - -msgid "UIExporterCSVPanel.matrixRadio.text" -msgstr "Matriz" - -msgid "UIExporterCSVPanel.zeroEdgeCheckbox.text" -msgstr "Zero quando nΓ£o existir aresta" - -msgid "UIExporterGEXFPanel.dynamicExportCheckbox.text" -msgstr "DinΓ’mico" - -msgid "UIExporterGEXFPanel.labelNormalize1.text" -msgstr "Árvore de nΓ³s completa sem meta-arestas" - -msgid "UIExporterGEXFPanel.hierarchyCheckbox.text" -msgstr "Hierarquia de exportaΓ§Γ£o" - -msgid "UIExporterPajekPanel.labelExport.text" -msgstr "Exportar:" - -msgid "UIExporterPajekPanel.positionExportCheckbox.text" -msgstr "PosiΓ§Γ£o (x, y)" - -msgid "UIExporterPajekPanel.edgeWeightCheckbox.text" -msgstr "Pesos das arestas" - -msgid "UIExporterGML.attributes.text" -msgstr "Atributos" - -msgid "UIExporterGML.exportLabel.text" -msgstr "Exportar:" - -msgid "UIExporterGML.positionLabel.text" -msgstr "PosiΓ§Γ£o (x, y)" - -msgid "UIExporterGML.colorsLabel.text" -msgstr "Cores" - -msgid "UIExporterGML.sizeLabel.text" -msgstr "Tamanho" - -msgid "UIExporterGML.edgeWeightLabel.text" -msgstr "Peso da aresta" - -msgid "UIExporterGML.labelLabel.text" -msgstr "RΓ³tulo" - -msgid "UIExporterGML.normalize.text" -msgstr "Normalizar" - -msgid "UIExporterGML.normalizeHintLabel.text" -msgstr "Escalonar posiΓ§Γ£o e tamanho entre 0 e 1" - -msgid "UIExporterGML.indentationLabel.text" -msgstr "IndentaΓ§Γ£o:" diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/ru.po b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/ru.po deleted file mode 100644 index 6cc0e75775..0000000000 --- a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/ru.po +++ /dev/null @@ -1,199 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-12 21:39+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Standard exporters UI" - -msgid "UIExporterGDF.name" -msgstr "GDF" - -msgid "UIExporterGEXF.name" -msgstr "GEXF" - -msgid "UIExporterGML.name" -msgstr "GML" - -msgid "UIExporterGraphML.name" -msgstr "GraphML" - -msgid "UIExporterCSV.name" -msgstr "CSV" - -msgid "UIExporterPajek.name" -msgstr "Pajek" - -msgid "UIExporterDL.name" -msgstr "DL" - -msgid "UIExporterVNA.name" -msgstr "VNA" - -msgid "UIExporterGDFPanel.jRadioButton1.text" -msgstr "ΠžΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ" - -msgid "UIExporterGDFPanel.positionExportCheckbox.text" -msgstr "ПолоТСниС (x,y)" - -msgid "UIExporterGDFPanel.colorsExportCheckbox.text" -msgstr "Π¦Π²Π΅Ρ‚Π°" - -msgid "UIExporterGDFPanel.attributesExportCheckbox.text" -msgstr "ΠžΡ‚ΡΡ‚ΡƒΠΏ:" - -msgid "UIExporterGDFPanel.labelExport.text" -msgstr "Π­ΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:" - -msgid "UIExporterGDFPanel.jRadioButton2.text" -msgstr "Π”Π²ΠΎΠΉΠ½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ" - -msgid "UIExporterGDFPanel.quotesCheckbox.text" -msgstr "ВСкст Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°Ρ…" - -msgid "UIExporterGDFPanel.normalizeCheckbox.text" -msgstr "ΠΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ" - -msgid "UIExporterGDFPanel.labelQuotes.text" -msgstr "ΠŸΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ тСкст Π² ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ, ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π² Π΄Π²ΠΎΠΉΠ½Ρ‹Π΅" - -msgid "UIExporterGDFPanel.labelNormalize.text" -msgstr "ΠŸΡ€ΠΈΠ²Π΅ΡΡ‚ΠΈ вСса ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΊ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ 0 ΠΈ 1" - -msgid "UIExporterGDFPanel.simpleQuotesCheckbox.text" -msgstr "ΠžΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ" - -msgid "UIExporterGDFPanel.labelQuotes1.text" -msgstr "Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°Ρ€Π½Ρ‹Π΅ ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠΈ вмСсто Π΄Π²ΠΎΠΉΠ½Ρ‹Ρ…" - -msgid "UIExporterGDFPanel.visibilityCheckbox.text" -msgstr "Π’ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ (visible, label visible)" - -msgid "UIExporterGEXFPanel.labelExport.text" -msgstr "Π­ΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:" - -msgid "UIExporterGEXFPanel.attributesExportCheckbox.text" -msgstr "Атрибуты" - -msgid "UIExporterGEXFPanel.colorsExportCheckbox.text" -msgstr "Π¦Π²Π΅Ρ‚Π°" - -msgid "UIExporterGEXFPanel.positionExportCheckbox.text" -msgstr "ПолоТСниС (x,y)" - -msgid "UIExporterGEXFPanel.sizeExportCheckbox.text" -msgstr "Π Π°Π·ΠΌΠ΅Ρ€" - -msgid "UIExporterGEXFPanel.normalizeCheckbox.text" -msgstr "ΠΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ" - -msgid "UIExporterGEXFPanel.labelNormalize.text" -msgstr "ΠŸΡ€ΠΈΠ²Π΅ΡΡ‚ΠΈ вСса ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΊ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ 0 ΠΈ 1" - -msgid "UIExporterGraphMLPanel.labelExport.text" -msgstr "Π­ΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:" - -msgid "UIExporterGraphMLPanel.positionExportCheckbox.text" -msgstr "ПолоТСниС (x,y)" - -msgid "UIExporterGraphMLPanel.normalizeCheckbox.text" -msgstr "ΠΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ" - -msgid "UIExporterGraphMLPanel.colorsExportCheckbox.text" -msgstr "Π¦Π²Π΅Ρ‚Π°" - -msgid "UIExporterGraphMLPanel.attributesExportCheckbox.text" -msgstr "Атрибуты" - -msgid "UIExporterGraphMLPanel.sizeExportCheckbox.text" -msgstr "Π Π°Π·ΠΌΠ΅Ρ€" - -msgid "UIExporterGraphMLPanel.labelNormalize.text" -msgstr "ΠŸΡ€ΠΈΠ²Π΅ΡΡ‚ΠΈ вСса ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΊ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ 0 ΠΈ 1" - -msgid "UIExporterGraphMLPanel.hierarchyCheckbox.text" -msgstr "Π­ΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ" - -msgid "UIExporterGraphMLPanel.labelNormalize1.text" -msgstr "ПолноС Π΄Π΅Ρ€Π΅Π²ΠΎ ΡƒΠ·Π»ΠΎΠ² Π±Π΅Π· ΠΌΠ΅Ρ‚Π°-Ρ€Ρ‘Π±Π΅Ρ€" - -msgid "UIExporterCSVPanel.labelExport.text" -msgstr "Π­ΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:" - -msgid "UIExporterCSVPanel.nodeIdCheckbox.text" -msgstr "ID ΡƒΠ·Π»Π°" - -msgid "UIExporterCSVPanel.edgeWeightCheckbox.text" -msgstr "ВСс Ρ€Π΅Π±Ρ€Π°" - -msgid "UIExporterCSVPanel.listRadio.text" -msgstr "Бписок" - -msgid "UIExporterCSVPanel.matrixRadio.text" -msgstr "ΠœΠ°Ρ‚Ρ€ΠΈΡ†Π°" - -msgid "UIExporterCSVPanel.zeroEdgeCheckbox.text" -msgstr "ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π΅Π±Ρ€Π° ΠΊΠ°ΠΊ Π½ΡƒΠ»ΠΈ" - -msgid "UIExporterGEXFPanel.dynamicExportCheckbox.text" -msgstr "ДинамичСскиС Π΄Π°Π½Π½Ρ‹Π΅" - -msgid "UIExporterGEXFPanel.labelNormalize1.text" -msgstr "ПолноС Π΄Π΅Ρ€Π΅Π²ΠΎ ΡƒΠ·Π»ΠΎΠ² Π±Π΅Π· ΠΌΠ΅Ρ‚Π°-Ρ€Ρ‘Π±Π΅Ρ€" - -msgid "UIExporterGEXFPanel.hierarchyCheckbox.text" -msgstr "Π­ΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ" - -msgid "UIExporterPajekPanel.labelExport.text" -msgstr "Π­ΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:" - -msgid "UIExporterPajekPanel.positionExportCheckbox.text" -msgstr "ПолоТСниС (x,y)" - -msgid "UIExporterPajekPanel.edgeWeightCheckbox.text" -msgstr "ВСса Ρ€Ρ‘Π±Π΅Ρ€" - -msgid "UIExporterGML.attributes.text" -msgstr "Атрибуты" - -msgid "UIExporterGML.exportLabel.text" -msgstr "Π­ΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ:" - -msgid "UIExporterGML.positionLabel.text" -msgstr "ПолоТСниС (x,y)" - -msgid "UIExporterGML.colorsLabel.text" -msgstr "Π¦Π²Π΅Ρ‚Π°" - -msgid "UIExporterGML.sizeLabel.text" -msgstr "Π Π°Π·ΠΌΠ΅Ρ€" - -msgid "UIExporterGML.edgeWeightLabel.text" -msgstr "ВСс Ρ€Π΅Π±Ρ€Π°" - -msgid "UIExporterGML.labelLabel.text" -msgstr "ΠœΠ΅Ρ‚ΠΊΠΈ" - -msgid "UIExporterGML.normalize.text" -msgstr "ΠΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ" - -msgid "UIExporterGML.normalizeHintLabel.text" -msgstr "ΠŸΡ€ΠΈΠ²Π΅ΡΡ‚ΠΈ вСса ΠΈ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΊ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Ρƒ ΠΌΠ΅ΠΆΠ΄Ρƒ 0 ΠΈ 1" - -msgid "UIExporterGML.indentationLabel.text" -msgstr "ΠžΡ‚ΡΡ‚ΡƒΠΏ:" diff --git a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/zh_CN.po b/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/zh_CN.po deleted file mode 100644 index 478055fb30..0000000000 --- a/modules/ExportPluginUI/src/main/resources/org/gephi/ui/exporter/plugin/zh_CN.po +++ /dev/null @@ -1,199 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-15 01:24+0000\n" -"Last-Translator: Xi-Nian Zuo \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζ ‡ε‡†θΎ“ε‡Ίη•Œι’" - -msgid "UIExporterGDF.name" -msgstr "GDF" - -msgid "UIExporterGEXF.name" -msgstr "GEXF" - -msgid "UIExporterGML.name" -msgstr "GML" - -msgid "UIExporterGraphML.name" -msgstr "GraphML" - -msgid "UIExporterCSV.name" -msgstr "CSV" - -msgid "UIExporterPajek.name" -msgstr "Pajek" - -msgid "UIExporterDL.name" -msgstr "DL" - -msgid "UIExporterVNA.name" -msgstr "VNA" - -msgid "UIExporterGDFPanel.jRadioButton1.text" -msgstr "单引号" - -msgid "UIExporterGDFPanel.positionExportCheckbox.text" -msgstr "位η½οΌˆX,YοΌ‰" - -msgid "UIExporterGDFPanel.colorsExportCheckbox.text" -msgstr "ι’œθ‰²" - -msgid "UIExporterGDFPanel.attributesExportCheckbox.text" -msgstr "ε±žζ€§" - -msgid "UIExporterGDFPanel.labelExport.text" -msgstr "θΎ“ε‡ΊοΌš" - -msgid "UIExporterGDFPanel.jRadioButton2.text" -msgstr "εŒεΌ•ε·" - -msgid "UIExporterGDFPanel.quotesCheckbox.text" -msgstr "εΌ•η”¨ζ–‡ζœ¬" - -msgid "UIExporterGDFPanel.normalizeCheckbox.text" -msgstr "ζ ‡ε‡†εŒ–" - -msgid "UIExporterGDFPanel.labelQuotes.text" -msgstr "ηŽ°εœΊε°θ£…οΌŒι»˜θ€ζƒ…ε†΅δΈ‹δ½Ώη”¨εŒεΌ•ε·" - -msgid "UIExporterGDFPanel.labelNormalize.text" -msgstr "0ε’Œ1δΉ‹ι—΄ηš„εˆ»εΊ¦δ½η½ε’Œε€§ε°" - -msgid "UIExporterGDFPanel.simpleQuotesCheckbox.text" -msgstr "单引号" - -msgid "UIExporterGDFPanel.labelQuotes1.text" -msgstr "δ½Ώη”¨ε•εΌ•ε·δ»£ζ›ΏεŒεΌ•ε·" - -msgid "UIExporterGDFPanel.visibilityCheckbox.text" -msgstr "θƒ½θ§εΊ¦οΌˆε―θ§οΌŒε―θ§ζ ‡η­ΎοΌ‰" - -msgid "UIExporterGEXFPanel.labelExport.text" -msgstr "θΎ“ε‡ΊοΌš" - -msgid "UIExporterGEXFPanel.attributesExportCheckbox.text" -msgstr "ε±žζ€§" - -msgid "UIExporterGEXFPanel.colorsExportCheckbox.text" -msgstr "ι’œθ‰²" - -msgid "UIExporterGEXFPanel.positionExportCheckbox.text" -msgstr "位η½οΌˆX,Y,ZοΌ‰" - -msgid "UIExporterGEXFPanel.sizeExportCheckbox.text" -msgstr "ε°Ίε―Έ" - -msgid "UIExporterGEXFPanel.normalizeCheckbox.text" -msgstr "ζ ‡ε‡†εŒ–" - -msgid "UIExporterGEXFPanel.labelNormalize.text" -msgstr "0ε’Œ1δΉ‹ι—΄ηš„εˆ»εΊ¦δ½η½ε’Œε€§ε°" - -msgid "UIExporterGraphMLPanel.labelExport.text" -msgstr "θΎ“ε‡ΊοΌš" - -msgid "UIExporterGraphMLPanel.positionExportCheckbox.text" -msgstr "位η½οΌˆX,YοΌ‰" - -msgid "UIExporterGraphMLPanel.normalizeCheckbox.text" -msgstr "ζ ‡ε‡†εŒ–" - -msgid "UIExporterGraphMLPanel.colorsExportCheckbox.text" -msgstr "ι’œθ‰²" - -msgid "UIExporterGraphMLPanel.attributesExportCheckbox.text" -msgstr "ε±žζ€§" - -msgid "UIExporterGraphMLPanel.sizeExportCheckbox.text" -msgstr "ε°Ίε―Έ" - -msgid "UIExporterGraphMLPanel.labelNormalize.text" -msgstr "0ε’Œ1δΉ‹ι—΄ηš„εˆ»εΊ¦δ½η½ε’Œε€§ε°" - -msgid "UIExporterGraphMLPanel.hierarchyCheckbox.text" -msgstr "θΎ“ε‡Ίηš„ε±‚ζ¬‘η»“ζž„" - -msgid "UIExporterGraphMLPanel.labelNormalize1.text" -msgstr "εŒζ•΄ζ— ε…ƒθΎΉθŠ‚η‚Ήζ ‘" - -msgid "UIExporterCSVPanel.labelExport.text" -msgstr "θΎ“ε‡ΊοΌš" - -msgid "UIExporterCSVPanel.nodeIdCheckbox.text" -msgstr "θŠ‚η‚ΉID" - -msgid "UIExporterCSVPanel.edgeWeightCheckbox.text" -msgstr "θΎΉηš„ζƒι‡" - -msgid "UIExporterCSVPanel.listRadio.text" -msgstr "名单" - -msgid "UIExporterCSVPanel.matrixRadio.text" -msgstr "矩阡" - -msgid "UIExporterCSVPanel.zeroEdgeCheckbox.text" -msgstr "ζ²‘ζœ‰θΎΉζ—ΆδΈΊι›Ά" - -msgid "UIExporterGEXFPanel.dynamicExportCheckbox.text" -msgstr "εŠ¨ζ€" - -msgid "UIExporterGEXFPanel.labelNormalize1.text" -msgstr "εŒζ•΄ζ— ε…ƒθΎΉθŠ‚η‚Ήζ ‘" - -msgid "UIExporterGEXFPanel.hierarchyCheckbox.text" -msgstr "θΎ“ε‡Ίηš„ε±‚ζ¬‘η»“ζž„" - -msgid "UIExporterPajekPanel.labelExport.text" -msgstr "θΎ“ε‡ΊοΌš" - -msgid "UIExporterPajekPanel.positionExportCheckbox.text" -msgstr "位η½οΌˆX,YοΌ‰" - -msgid "UIExporterPajekPanel.edgeWeightCheckbox.text" -msgstr "边权重" - -msgid "UIExporterGML.attributes.text" -msgstr "ε±žζ€§" - -msgid "UIExporterGML.exportLabel.text" -msgstr "θΎ“ε‡Ί" - -msgid "UIExporterGML.positionLabel.text" -msgstr "位η½οΌˆX,YοΌ‰" - -msgid "UIExporterGML.colorsLabel.text" -msgstr "ι’œθ‰²" - -msgid "UIExporterGML.sizeLabel.text" -msgstr "ε°Ίε―Έ" - -msgid "UIExporterGML.edgeWeightLabel.text" -msgstr "θΎΉηš„ζƒι‡" - -msgid "UIExporterGML.labelLabel.text" -msgstr "ζ ‡η­Ύ" - -msgid "UIExporterGML.normalize.text" -msgstr "ζ ‡ε‡†εŒ–" - -msgid "UIExporterGML.normalizeHintLabel.text" -msgstr "0ε’Œ1δΉ‹ι—΄ηš„εˆ»εΊ¦δ½η½ε’Œε€§ε°" - -msgid "UIExporterGML.indentationLabel.text" -msgstr "ηΌ©θΏ›οΌš" diff --git a/modules/FiltersAPI/pom.xml b/modules/FiltersAPI/pom.xml index 1cbcd54c17..e988aedd73 100644 --- a/modules/FiltersAPI/pom.xml +++ b/modules/FiltersAPI/pom.xml @@ -4,13 +4,13 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi filters-api - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm FiltersAPI @@ -41,7 +41,7 @@ - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/FiltersAPI/src/main/java/org/gephi/filters/api/FilterController.java b/modules/FiltersAPI/src/main/java/org/gephi/filters/api/FilterController.java index 0c9cc9381a..dabc8ddbfe 100644 --- a/modules/FiltersAPI/src/main/java/org/gephi/filters/api/FilterController.java +++ b/modules/FiltersAPI/src/main/java/org/gephi/filters/api/FilterController.java @@ -39,9 +39,11 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.api; import org.gephi.filters.spi.Filter; +import org.gephi.filters.spi.FilterBuilder; import org.gephi.graph.api.GraphView; import org.gephi.project.api.Workspace; @@ -53,20 +55,19 @@ Development and Distribution License("CDDL") (collectively, the *
    FilterController fc = Lookup.getDefault().lookup(FilterController.class);
    *

    * The controller has two ways to execute filtering, a one-shot one that - * immediately returns the GraphView and a more complex one suitable - * for user interface interaction, with live parameter change. + * immediately returns the GraphView and a more complex one + * suitable for user interface interaction, with live parameter change. *

    * The one-shot filtering can be executed like below: *

      * Filter filter = ...
      * Query query = controller.createQuery(filter);
      * GraphView view = controller.filter(query);
    - * 
    - * The normal mode is to call {@link #filterVisible(org.gephi.filters.api.Query)} - * which let this controller manage the execution. The benefit of this of this mode - * is that properties change on filters are listened and filtering is automatically - * reexecuted if values changes. See how to execute a filter with two different - * values: + * The normal mode is to call + * {@link #filterVisible(org.gephi.filters.api.Query)} which let this controller + * manage the execution. The benefit of this of this mode is that properties + * change on filters are listened and filtering is automatically reexecuted if + * values changes. See how to execute a filter with two different values: *
      * Filter filter = ...
      * filter.getProperties()[0].setValue(1);       //Set value 1, for example a threshold
    @@ -75,123 +76,153 @@ Development and Distribution License("CDDL") (collectively, the
      * controller.filterVisible(query);     //A background thread executes the query
      * filter.getProperties[0].setValue(2)      //The background thread reexecute the query
      * 
    + * * @author Mathieu Bastian * @see GraphView */ public interface FilterController { /** - * Creates a query from filter. The created query is a root query. - * @param filter the filter that is to be wrapped in a new query - * @return a query that is wrapping filter + * Creates a query from builder. The created query is a root + * query. + * + * @param builder the builder that can create the filter that is to be + * wrapped in a new query + * @return a query that is wrapping builder */ - public Query createQuery(Filter filter); + Query createQuery(FilterBuilder builder); + + /** + * Creates a query from filter. The created query is a root + * query. + * + * @param filter the filter that is to be wrapped in a new query + * @return a query that is wrapping filter + */ + Query createQuery(Filter filter); /** * Adds query as a new query in the system. The query should be * a root query. - * @param query the query that is to be added + * + * @param query the query that is to be added */ - public void add(Query query); + void add(Query query); /** - * Removes query from the systemn if exists. - * @param query the query that is to be removed + * Removes query from the system if exists. + * + * @param query the query that is to be removed */ - public void remove(Query query); + void remove(Query query); /** * Renames query with name. - * @param query the query that is to be renamed - * @param name the new query's name + * + * @param query the query that is to be renamed + * @param name the new query's name */ - public void rename(Query query, String name); + void rename(Query query, String name); /** * Sets subQuery as a child of query. If - * subQuery already has a parent query, it will be removed first. - * @param query the query that subQuery is to be added - * as a new child - * @param subQuery the query that is to be added as a child of - * query + * subQuery already has a parent query, it will be removed + * first. + * + * @param query the query that subQuery is to be added as a new + * child + * @param subQuery the query that is to be added as a child of + * query */ - public void setSubQuery(Query query, Query subQuery); + void setSubQuery(Query query, Query subQuery); /** * Removes query from parent query. - * @param query the query that is to be removed from parent - * @param parent the query that query is to be removed as - * a child + * + * @param query the query that is to be removed from parent + * @param parent the query that query is to be removed as a + * child */ - public void removeSubQuery(Query query, Query parent); + void removeSubQuery(Query query, Query parent); /** * Filters main graph with query and set result as the new - * visible graph. Note that the query will be executed in a background thread - * and results delivered as soon as ready. Then, query is defined - * as the currently active query and property's value changes are watched. - * If a query's property is changed the query is automatically reexecuted. - * @param query the query that is to be executed + * visible graph. Note that the query will be executed in a background + * thread and results delivered as soon as ready. Then, query + * is defined as the currently active query and property's value changes are + * watched. If a query's property is changed the query is automatically + * reexecuted. + * + * @param query the query that is to be executed */ - public void filterVisible(Query query); + void filterVisible(Query query); /** * Selects query results on the main graph visualization - * window. Note that the query will be executed in a background thread - * and results delivered as soon as ready. Then, query is defined + * window. Note that the query will be executed in a background thread and + * results delivered as soon as ready. Then, query is defined * as the currently active query and property's value changes are watched. * If a query's property is changed the query is automatically reexecuted. - * @param query the query that is to be executed + * + * @param query the query that is to be executed */ - public void selectVisible(Query query); + void selectVisible(Query query); /** * Filtering method for API users. The query is executed and * the GraphView result is returned. - * @param query the query that is to be executed - * @return a graph view that represents the query result + * + * @param query the query that is to be executed + * @return a graph view that represents the query result */ - public GraphView filter(Query query); + GraphView filter(Query query); /** * Exports query result in a new column title. - * Nodes and edges that pass the query have true value and + * Nodes and edges that pass the query have true value + * and * false for others. - * @param title the column's title - * @param query the query that is to be executed + * + * @param title the column's title + * @param query the query that is to be executed */ - public void exportToColumn(String title, Query query); + void exportToColumn(String title, Query query); /** * Exports query result in a new workspace. Note that query is - * executed in a separate thread and the workspace may not be ready immediately - * when this method returns. - * @param query the query that is to be executed + * executed in a separate thread and the workspace may not be ready + * immediately when this method returns. + * + * @param query the query that is to be executed */ - public void exportToNewWorkspace(Query query); + void exportToNewWorkspace(Query query); /** * Exports query result to visible/hidden labels. Each node and * edge not present in the query result has its label set hidden. Label - * visibility is controlled from TextData object, accessible from - * NodeData or EdgeData. - * @param query the query that is to be used to hide labels + * visibility is controlled from TextData object, accessible + * from NodeData or EdgeData. + * + * @param query the query that is to be used to hide labels */ - public void exportToLabelVisible(Query query); + void exportToLabelVisible(Query query); - public void setAutoRefresh(boolean autoRefresh); + void setAutoRefresh(boolean autoRefresh); - public void setCurrentQuery(Query query); + void setCurrentQuery(Query query); /** * Returns the filter's model. - * @return the filter's model + * + * @return the filter's model */ - public FilterModel getModel(); + FilterModel getModel(); /** * Returns the filter's model for workspace. - * @return the filter's model in the given workspace + * + * @param workspace workspace + * @return the filter's model in the given workspace */ - public FilterModel getModel(Workspace workspace); + FilterModel getModel(Workspace workspace); } diff --git a/modules/FiltersAPI/src/main/java/org/gephi/filters/api/FilterLibrary.java b/modules/FiltersAPI/src/main/java/org/gephi/filters/api/FilterLibrary.java index ba91a23e17..fd3f604fe5 100644 --- a/modules/FiltersAPI/src/main/java/org/gephi/filters/api/FilterLibrary.java +++ b/modules/FiltersAPI/src/main/java/org/gephi/filters/api/FilterLibrary.java @@ -38,24 +38,26 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.filters.api; -import org.gephi.filters.spi.FilterLibraryMask; -import org.gephi.filters.spi.Filter; import org.gephi.filters.spi.Category; import org.gephi.filters.spi.CategoryBuilder; +import org.gephi.filters.spi.Filter; import org.gephi.filters.spi.FilterBuilder; +import org.gephi.filters.spi.FilterLibraryMask; import org.openide.util.Lookup; import org.openide.util.NbBundle; /** * The Filter Library is the place where filter builders are registered and - * ready to be used. It also has default Categories that filters use to be - * sorted and well-described. + * ready to be used. It also has default Categories that filters use to + * be sorted and well-described. *

    - * Modules can dynamically create new filter builders and serve it ot users - * by using {@link #addBuilder(org.gephi.filters.spi.FilterBuilder) }. + * Modules can dynamically create new filter builders and serve it ot users by + * using {@link #addBuilder(org.gephi.filters.spi.FilterBuilder) }. + * * @author Mathieu Bastian */ public interface FilterLibrary extends Lookup.Provider { @@ -65,47 +67,41 @@ public interface FilterLibrary extends Lookup.Provider { * for filters working on graph topology, i.e. the structure of nodes and * edges. */ - public final static Category TOPOLOGY = new Category( - NbBundle.getMessage(FilterLibrary.class, "FiltersLibrary.Category.Topology"), - null, - null); + Category TOPOLOGY = new Category( + NbBundle.getMessage(FilterLibrary.class, "FiltersLibrary.Category.Topology"), + null, + null); /** * Default Category for attributes filters. Use this category * for filters working on attribute values. */ - public final static Category ATTRIBUTES = new Category( - NbBundle.getMessage(FilterLibrary.class, "FiltersLibrary.Category.Attributes"), - null, - null); - - /** - * Default Category for filters working on the graph hierarchy. - */ - public final static Category HIERARCHY = new Category( - NbBundle.getMessage(FilterLibrary.class, "FiltersLibrary.Category.Hierarchy"), - null, - TOPOLOGY); + Category ATTRIBUTES = new Category( + NbBundle.getMessage(FilterLibrary.class, "FiltersLibrary.Category.Attributes"), + null, + null); /** * Default Category for filters working on edges only. */ - public final static Category EDGE = new Category( - NbBundle.getMessage(FilterLibrary.class, "FiltersLibrary.Category.Edge"), - null, - null); + Category EDGE = new Category( + NbBundle.getMessage(FilterLibrary.class, "FiltersLibrary.Category.Edge"), + null, + null); /** * Adds builder to this library. - * @param builder the builder that is to be added + * + * @param builder the builder that is to be added */ - public void addBuilder(FilterBuilder builder); + void addBuilder(FilterBuilder builder); /** * Removes builder from this library. - * @param builder the builder that is to be removed + * + * @param builder the builder that is to be removed */ - public void removeBuilder(FilterBuilder builder); + void removeBuilder(FilterBuilder builder); /** * Returns this library's lookup. The lookup is a general container for @@ -113,52 +109,59 @@ public interface FilterLibrary extends Lookup.Provider { *

    • {@link FilterBuilder}: Builders, these are building filters.
    • *
    • {@link CategoryBuilder}: Category builders, these are building. * categories, i.e. filters containers.
    • - *
    • {@link FilterLibraryMask}: Masks, for enable/disable categories according - * to the context.
    • - *
    • {@link Query}: Saved queries, look at FilterController for - * active queries.
    - * The lists of all FilterBuilder in the library can be obtained - * by doing the following command: + *
  • {@link FilterLibraryMask}: Masks, for enable/disable categories + * according to the context.
  • + *
  • {@link Query}: Saved queries, look at FilterController + * for active queries.
  • + * The lists of all FilterBuilder in the library can be + * obtained by doing the following command: *
          * FilterLibrary.getLookup().lookupAll(FilterBuilder.class);
          * 
    - * @return the lookup container of this library + * + * @return the lookup container of this library */ - public Lookup getLookup(); + @Override + Lookup getLookup(); /** * Registers mask as a new FilterLibraryMask. Such * masks have categories enable/disable flag. Useful to disable for instance * filters for undirected graphs when the current graph is directed. - * @param mask the mask that is to be registered + * + * @param mask the mask that is to be registered */ - public void registerMask(FilterLibraryMask mask); + void registerMask(FilterLibraryMask mask); /** * Unregisters mask in the library. The mask will no longer be * used. - * @param mask the mask that is to be unregistered + * + * @param mask the mask that is to be unregistered */ - public void unregisterMask(FilterLibraryMask mask); + void unregisterMask(FilterLibraryMask mask); /** * Returns the builder that has created filter. - * @param filter the filter that the builder is to be returned - * @return the builder that has created filter + * + * @param filter the filter that the builder is to be returned + * @return the builder that has created filter */ - public FilterBuilder getBuilder(Filter filter); + FilterBuilder getBuilder(Filter filter); /** * Save query in the library in order it can be reused. Saved * queries are saved to the project. - * @param query the query that is to be saved + * + * @param query the query that is to be saved */ - public void saveQuery(Query query); + void saveQuery(Query query); /** - * Delete a saved query from the library. Deleted - * queries are deleted from the project. - * @param query the query that is to be deleted + * Delete a saved query from the library. Deleted queries are + * deleted from the project. + * + * @param query the query that is to be deleted */ - public void deleteQuery(Query query); + void deleteQuery(Query query); } diff --git a/modules/FiltersAPI/src/main/java/org/gephi/filters/api/FilterModel.java b/modules/FiltersAPI/src/main/java/org/gephi/filters/api/FilterModel.java index b9d7a43b1d..50adaf214d 100644 --- a/modules/FiltersAPI/src/main/java/org/gephi/filters/api/FilterModel.java +++ b/modules/FiltersAPI/src/main/java/org/gephi/filters/api/FilterModel.java @@ -38,17 +38,19 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.filters.api; import javax.swing.event.ChangeListener; import org.gephi.filters.spi.FilterBuilder; +import org.gephi.project.api.Workspace; /** * The Filter Model hosts the queries defined in the system and the currently - * active query. It also stroe the selection or filtering flag. The filtering mode - * display the subgraph made from filters, whereas the selection mode highlight - * elements on the graph. + * active query. It also stroe the selection or filtering flag. The filtering + * mode display the subgraph made from filters, whereas the selection mode + * highlight elements on the graph. * * @author Mathieu Bastian * @see FilterController @@ -58,39 +60,47 @@ public interface FilterModel { /** * Returns the FilterLibrary, where {@link FilterBuilder} * belongs to. - * @return the filter library + * + * @return the filter library */ - public FilterLibrary getLibrary(); + FilterLibrary getLibrary(); /** * Returns all queries in the model, represented by their root query. - * @return all root queries in the model + * + * @return all root queries in the model */ - public Query[] getQueries(); + Query[] getQueries(); /** - * Returns the query currently active or null if none is active. - * @return the current query + * Returns the query currently active or null if none is + * active. + * + * @return the current query */ - public Query getCurrentQuery(); + Query getCurrentQuery(); /** * Returns true if the system is currently in filtering mode. - * @return true if the result graph is filtered, + * + * @return true if the result graph is filtered, * false if it's in selection mode */ - public boolean isFiltering(); + boolean isFiltering(); /** * Returns true if the system is currently in selection mode. - * @return true if the result is selected on the graph, + * + * @return true if the result is selected on the graph, * false if it's filtered */ - public boolean isSelecting(); + boolean isSelecting(); + + boolean isAutoRefresh(); - public boolean isAutoRefresh(); + Workspace getWorkspace(); - public void addChangeListener(ChangeListener listener); + void addChangeListener(ChangeListener listener); - public void removeChangeListener(ChangeListener listener); + void removeChangeListener(ChangeListener listener); } diff --git a/modules/FiltersAPI/src/main/java/org/gephi/filters/api/PropertyExecutor.java b/modules/FiltersAPI/src/main/java/org/gephi/filters/api/PropertyExecutor.java index 67f896311a..b5c43bdb19 100644 --- a/modules/FiltersAPI/src/main/java/org/gephi/filters/api/PropertyExecutor.java +++ b/modules/FiltersAPI/src/main/java/org/gephi/filters/api/PropertyExecutor.java @@ -38,17 +38,18 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.filters.api; import org.gephi.filters.spi.FilterProperty; /** - * PropertyExecutor's role is to synchronize property edition with filter execution. - * When a filter is executed it usually uses properties users can edit. Editing - * properties values while a filter is executing in another thread could make - * uncertain behaviour. This executor is responsible to postpone value edition - * until filter's execution is finished. + * PropertyExecutor's role is to synchronize property edition with filter + * execution. When a filter is executed it usually uses properties users can + * edit. Editing properties values while a filter is executing in another thread + * could make uncertain behaviour. This executor is responsible to postpone + * value edition until filter's execution is finished. * * @author Mathieu Bastian * @see FilterProperty @@ -58,19 +59,20 @@ public interface PropertyExecutor { /** * Set value on property in a safe way by using * callback. - * @param property the filter property that value is to be set - * @param value the value that is to be set - * @param callback the callback function to be notified when setting has to - * be done + * + * @param property the filter property that value is to be set + * @param value the value that is to be set + * @param callback the callback function to be notified when setting has to + * be done */ - public void setValue(FilterProperty property, Object value, Callback callback); + void setValue(FilterProperty property, Object value, Callback callback); /** * Callback interface for setting value. When called, setting value is done * in a safe window between filter execution. */ - public interface Callback { + interface Callback { - public void setValue(Object value); + void setValue(Object value); } } diff --git a/modules/FiltersAPI/src/main/java/org/gephi/filters/api/Query.java b/modules/FiltersAPI/src/main/java/org/gephi/filters/api/Query.java index 937f380864..b72406c59b 100644 --- a/modules/FiltersAPI/src/main/java/org/gephi/filters/api/Query.java +++ b/modules/FiltersAPI/src/main/java/org/gephi/filters/api/Query.java @@ -38,22 +38,24 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.filters.api; import org.gephi.filters.spi.Filter; +import org.gephi.filters.spi.FilterBuilder; /** * Queries are wrapping filters and are assembled in a query tree. Each query is * built from a single filter instance and it's role is to basically to execute - * the filter. The graph that is passed to the filter depends on the fact the query - * belongs to a complex query tree or if the tree is a single leaf. + * the filter. The graph that is passed to the filter depends on the fact the + * query belongs to a complex query tree or if the tree is a single leaf. *

    * The system works like this. Leaves of the query tree receives the complete * graph and the subgraphs they return are passed to the parent query. Thus the - * root query is the last query to get the subgraphs and returns the final result. - * This querying system make possible to create query chains and complex scenario - * with various operators (AND, OR, ...). + * root query is the last query to get the subgraphs and returns the final + * result. This querying system make possible to create query chains and complex + * scenario with various operators (AND, OR, ...). *

    * Queries are built by the FilterController from filter instances. * @@ -64,71 +66,96 @@ public interface Query { /** * Returns query's full name. - * @return query's name + * + * @return query's name + */ + String getName(); + + /** + * Sets the query name to a custom value + * + * @param name Custom name */ - public String getName(); + void setName(String name); /** * Returns queries that are children of this query. - * @return query's children + * + * @return query's children */ - public Query[] getChildren(); + Query[] getChildren(); /** * Returns the limit number of children this query can have. Return 1 for a * standard query. - * @return the number of allowed children query + * + * @return the number of allowed children query */ - public int getChildrenSlotsCount(); + int getChildrenSlotsCount(); /** * Returns the parent query or null if this query is root. - * @return the query's parent query, or null + * + * @return the query's parent query, or null */ - public Query getParent(); + Query getParent(); /** * Returns the number of properties this query has. - * @return the query's number of properties + * + * @return the query's number of properties */ - public int getPropertiesCount(); + int getPropertiesCount(); /** * Returns the name of the property at the specified index. + * * @param index the index of the property - * @return the query's property name + * @return the query's property name * @throws ArrayIndexOutOfBoundsException if index is out of - * bounds + * bounds */ - public String getPropertyName(int index); + String getPropertyName(int index); /** * Returns the value of the property at the specified index. + * * @param index the index of the property - * @return the query's property value + * @return the query's property value * @throws ArrayIndexOutOfBoundsException if index is out of - * bounds + * bounds */ - public Object getPropertyValue(int index); + Object getPropertyValue(int index); /** * Utility method that returns all queries in this query hierarchy that are * filterClass instance. + * * @param filterClass the filter class that is to be queried - * @return all queries, including self that are filterClass + * @return all queries, including self that are filterClass * instance */ - public Query[] getQueries(Class filterClass); + Query[] getQueries(Class filterClass); /** * Utility method that returns all descendant queries plus this query. - * @return all descendant queries and self + * + * @return all descendant queries and self */ - public Query[] getDescendantsAndSelf(); + Query[] getDescendantsAndSelf(); /** * Returns the filter this query is wrapping. - * @return the filter + * + * @return the filter + */ + Filter getFilter(); + + /** + * Returns the filter builder that creates the filter this query is + * wrapping. + * + * @return the builder or null */ - public Filter getFilter(); + FilterBuilder getBuilder(); } diff --git a/modules/FiltersAPI/src/main/java/org/gephi/filters/api/Range.java b/modules/FiltersAPI/src/main/java/org/gephi/filters/api/Range.java index 5d6a189f69..486cd2af83 100644 --- a/modules/FiltersAPI/src/main/java/org/gephi/filters/api/Range.java +++ b/modules/FiltersAPI/src/main/java/org/gephi/filters/api/Range.java @@ -39,10 +39,10 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.api; /** - * * @author Mathieu Bastian */ public final class Range { @@ -83,15 +83,39 @@ public Range(Number lowerBound, Number upperBound, Number min, Number max, Numbe this.values = values; } - public Range(Number lowerBound, Number upperBound, Number min, Number max, boolean leftInclusive, boolean rightInclusive, Number[] values) { + public Range(Number lowerBound, Number upperBound, Number min, Number max, boolean leftInclusive, + boolean rightInclusive, Number[] values) { this(lowerBound, upperBound, min, max, values); this.leftInclusive = leftInclusive; this.rightInclusive = rightInclusive; } + public static Number trimToBounds(Number min, Number max, Number value) { + if (min != null && max != null && value != null) { + if (min.getClass().equals(max.getClass()) && max.getClass().equals(value.getClass())) { + if (min instanceof Long || min instanceof Integer || min instanceof Short || min instanceof Byte) { + if (value.longValue() < min.longValue()) { + value = min; + } else if (value.longValue() > max.longValue()) { + value = max; + } + } else if (min instanceof Float || min instanceof Double) { + if (value.doubleValue() < min.doubleValue()) { + value = min; + } else if (value.doubleValue() > max.doubleValue()) { + value = max; + } + } + } else { + throw new IllegalArgumentException("min, max and value must be the same class"); + } + } + return value; + } + public boolean isInRange(Number value) { return ((Comparable) lowerNumber).compareTo(value) <= (leftInclusive ? 0 : -1) - && ((Comparable) upperNumber).compareTo(value) >= (rightInclusive ? 0 : 1); + && ((Comparable) upperNumber).compareTo(value) >= (rightInclusive ? 0 : 1); } public Double getLowerDouble() { @@ -174,29 +198,6 @@ public boolean isRightInclusive() { return rightInclusive; } - public static Number trimToBounds(Number min, Number max, Number value) { - if (min != null && max != null && value != null) { - if (min.getClass().equals(max.getClass()) && max.getClass().equals(value.getClass())) { - if (min instanceof Long || min instanceof Integer || min instanceof Short || min instanceof Byte) { - if (value.longValue() < min.longValue()) { - value = min; - } else if (value.longValue() > max.longValue()) { - value = max; - } - } else if (min instanceof Float || min instanceof Double) { - if (value.doubleValue() < min.doubleValue()) { - value = min; - } else if (value.doubleValue() > max.doubleValue()) { - value = max; - } - } - } else { - throw new IllegalArgumentException("min, max and value must be the same class"); - } - } - return value; - } - @Override public boolean equals(Object obj) { if (obj == null) { @@ -206,10 +207,12 @@ public boolean equals(Object obj) { return false; } final Range other = (Range) obj; - if (this.lowerNumber != other.lowerNumber && (this.lowerNumber == null || !this.lowerNumber.equals(other.lowerNumber))) { + if (this.lowerNumber != other.lowerNumber && + (this.lowerNumber == null || !this.lowerNumber.equals(other.lowerNumber))) { return false; } - if (this.upperNumber != other.upperNumber && (this.upperNumber == null || !this.upperNumber.equals(other.upperNumber))) { + if (this.upperNumber != other.upperNumber && + (this.upperNumber == null || !this.upperNumber.equals(other.upperNumber))) { return false; } if (this.min != other.min && (this.min == null || !this.min.equals(other.min))) { @@ -221,10 +224,7 @@ public boolean equals(Object obj) { if (this.leftInclusive != other.leftInclusive) { return false; } - if (this.rightInclusive != other.rightInclusive) { - return false; - } - return true; + return this.rightInclusive == other.rightInclusive; } @Override diff --git a/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/AttributableFilter.java b/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/AttributableFilter.java deleted file mode 100644 index 81c79c841d..0000000000 --- a/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/AttributableFilter.java +++ /dev/null @@ -1,72 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.filters.spi; - -import org.gephi.graph.api.Attributable; -import org.gephi.graph.api.Graph; - -/** - * Basic filters for attributable objects (nodes or edges). For a given object the filter's - * role is to return true if the attributable is kept or false - * if it is removed. - *

    - * This filter is useful for dealing with attributes, which can either be in nodes - * or edges. As a filter can't be for nodes and edges at the same time the filter has to - * return the appropriate type. - * - * @author Mathieu Bastian - */ -public interface AttributableFilter extends Filter { - - public enum Type { - - NODE, EDGE - }; - - public boolean init(Graph graph); - - public boolean evaluate(Graph graph, Attributable attributable); - - public void finish(); - - public Type getType(); -} diff --git a/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/Category.java b/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/Category.java index 1e00b4b97d..2619a1f34f 100644 --- a/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/Category.java +++ b/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/Category.java @@ -38,7 +38,8 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.filters.spi; import javax.swing.Icon; @@ -53,22 +54,22 @@ Development and Distribution License("CDDL") (collectively, the *

  • FilterLibrary.ATTRIBUTES
  • *
  • FilterLibrary.EDGE
  • *
  • FilterLibrary.HIERARCHY
  • + * * @author Mathieu Bastian * @see FilterLibrary */ public final class Category { - private String name; - private Icon icon; - private Category parent; + private final String name; + private final Icon icon; + private final Category parent; public Category(String name) { - this.name = name; + this(name, null, null); } public Category(String name, Icon icon) { - this.name = name; - this.icon = icon; + this(name, icon, null); } public Category(String name, Icon icon, Category parent) { @@ -79,7 +80,8 @@ public Category(String name, Icon icon, Category parent) { /** * Returns the category's name. - * @return the name of this category + * + * @return the name of this category */ public String getName() { return name; @@ -87,7 +89,8 @@ public String getName() { /** * Returns the icon or null if the category has no icon. - * @return the icon or null + * + * @return the icon or null */ public Icon getIcon() { return icon; @@ -96,7 +99,8 @@ public Icon getIcon() { /** * Returns this category parent category or null if this * category has no parent. - * @return this category's parent or null + * + * @return this category's parent or null */ public Category getParent() { return parent; @@ -109,9 +113,7 @@ public boolean equals(Object obj) { } if (obj instanceof Category) { Category cat = (Category) obj; - if (cat.icon == icon && (cat.name == name || cat.name.equals(name)) && (cat.parent == parent || cat.parent.equals(parent))) { - return true; - } + return cat.icon == icon && cat.name.equals(name) && (cat.parent == parent || cat.parent.equals(parent)); } return false; } diff --git a/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/CategoryBuilder.java b/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/CategoryBuilder.java index ee79b501c2..04c8037d6d 100644 --- a/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/CategoryBuilder.java +++ b/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/CategoryBuilder.java @@ -38,16 +38,19 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.filters.spi; +import org.gephi.project.api.Workspace; + /** - * Category builder is a convenient way to define multiple builders from a single - * source and grouped in a single category. + * Category builder is a convenient way to define multiple builders from a + * single source and grouped in a single category. *

    - * Implement CategoryBuilder - * for instance for creating a set of filter builders working on attributes, with - * one FilterBuilder per attribute column. + * Implement CategoryBuilder for instance for creating a set of + * filter builders working on attributes, with one FilterBuilder + * per attribute column. *

    * Note that filter builders returned by category builders don't have to be * registered on they own, once here is enough. @@ -59,14 +62,17 @@ public interface CategoryBuilder { /** * Returns the filter builders this category builder is building. - * @return the builders this category builder is building + * + * @param workspace workspace + * @return the builders this category builder is building */ - public FilterBuilder[] getBuilders(); + FilterBuilder[] getBuilders(Workspace workspace); /** - * Returns the category builders are to be grouped in. It can't be a - * default category. - * @return the category builders belong to + * Returns the category builders are to be grouped in. It can't be a default + * category. + * + * @return the category builders belong to */ - public Category getCategory(); + Category getCategory(); } diff --git a/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/ComplexFilter.java b/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/ComplexFilter.java index f3f95270c9..8d6ffd282c 100644 --- a/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/ComplexFilter.java +++ b/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/ComplexFilter.java @@ -38,19 +38,20 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.filters.spi; import org.gephi.graph.api.Graph; /** * Filter working with full graphs and generally returning a subgraph. Node and - * Edge filters removes either nodes or edges but not both. This filter interface - * has to be used in these case. + * Edge filters removes either nodes or edges but not both. This filter + * interface has to be used in these case. * * @author Mathieu Bastian */ public interface ComplexFilter extends Filter { - public Graph filter(Graph graph); + Graph filter(Graph graph); } diff --git a/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/EdgeFilter.java b/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/EdgeFilter.java index e2904387b8..5dcc941a2f 100644 --- a/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/EdgeFilter.java +++ b/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/EdgeFilter.java @@ -38,24 +38,19 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.filters.spi; import org.gephi.graph.api.Edge; -import org.gephi.graph.api.Graph; /** - * Basic filters for edges, that works as predicates. For a given edge the filter's - * role is to return true if the edge is kept or false - * if it is removed. + * Basic filters for edges, that works as predicates. For a given edge the + * filter's role is to return true if the edge is kept or + * false if it is removed. * * @author Mathieu Bastian */ -public interface EdgeFilter extends Filter { - - public boolean init(Graph graph); - - public boolean evaluate(Graph graph, Edge edge); +public interface EdgeFilter extends ElementFilter { - public void finish(); } diff --git a/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/ElementFilter.java b/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/ElementFilter.java new file mode 100644 index 0000000000..a4767f19d2 --- /dev/null +++ b/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/ElementFilter.java @@ -0,0 +1,67 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.filters.spi; + +import org.gephi.graph.api.Element; +import org.gephi.graph.api.Graph; + +/** + * Basic filters for elements (nodes or edges). For a given object the filter's + * role is to return true if the element is kept or + * false if it is removed. + *

    + * This filter is useful for dealing with attributes, which can either be in + * nodes or edges. As a filter can't be for nodes and edges at the same time the + * filter has to specify K. + * + * @param element class + * @author Mathieu Bastian + */ +public interface ElementFilter extends Filter { + + boolean init(Graph graph); + + boolean evaluate(Graph graph, K element); + + void finish(); +} diff --git a/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/Filter.java b/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/Filter.java index 952ace5b2b..55a4750f97 100644 --- a/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/Filter.java +++ b/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/Filter.java @@ -38,21 +38,23 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.filters.spi; import org.gephi.filters.api.Query; /** - * Filters are pruning the graph by keeping only nodes and edges that satisify + * Filters are pruning the graph by keeping only nodes and edges that satisfy * filters conditions. Filters are predicates or functions that reduce the graph * and therefore create sub-graphs. *

    - * Filters are the basic building blocks that are wrapped in queries and assembled to - * make simple or complex conditions on nodes and edges. + * Filters are the basic building blocks that are wrapped in queries and + * assembled to make simple or complex conditions on nodes and edges. *

    - * Filters objects are built in {@link FilterBuilder}. Implementors should define - * their own FilterBuilder class to propose new filter to users. + * Filters objects are built in {@link FilterBuilder}. Implementors should + * define their own FilterBuilder class to propose new filter to + * users. * * @author Mathieu Bastian * @see Query @@ -61,14 +63,16 @@ public interface Filter { /** * Returns the filter's display name. - * @return the filter's dispaly name + * + * @return the filter's display name */ - public String getName(); + String getName(); /** * Returns the filter properties. Property values can be get and set from * FilterProperty objects. - * @return the filter's properties + * + * @return the filter's properties */ - public FilterProperty[] getProperties(); + FilterProperty[] getProperties(); } diff --git a/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/FilterBuilder.java b/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/FilterBuilder.java index d3f34ee0ec..acc85e1978 100644 --- a/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/FilterBuilder.java +++ b/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/FilterBuilder.java @@ -38,16 +38,18 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.filters.spi; import javax.swing.Icon; import javax.swing.JPanel; import org.gephi.filters.api.FilterLibrary; +import org.gephi.project.api.Workspace; /** - * Filter builder, creating Filter instances for a single type - * of filters. Provides also the settings panel for the type of filter. + * Filter builder, creating Filter instances for a single + * type of filters. Provides also the settings panel for the type of filter. *

    * Implementors should add the @ServiceProvider annotation to be * registered by the system or call FilterLibrary.addBuilder(). @@ -55,10 +57,11 @@ Development and Distribution License("CDDL") (collectively, the * The JPanel returned by the getPanel() method is the * settings panel that configures the filter parameters. These parameters can be * get and set by using {@link Filter#getProperties()}. Settings panel should - * always set parameters values in that way. As a result the system will be aware - * values changed and update the filter. + * always set parameters values in that way. As a result the system will be + * aware values changed and update the filter. *

    * See {@link CategoryBuilder} for builders that host multiple types of filters. + * * @author Mathieu Bastian * @see FilterLibrary */ @@ -66,44 +69,53 @@ public interface FilterBuilder { /** * Returns the category this filter builder belongs to. - * @return the category this builder belongs to + * + * @return the category this builder belongs to */ - public Category getCategory(); + Category getCategory(); /** * Returns the display name of this filter builder - * @return the display name + * + * @return the display name */ - public String getName(); + String getName(); /** * Returns the icon of this filter builder - * @return the icon + * + * @return the icon */ - public Icon getIcon(); + Icon getIcon(); /** - * Returns ths description text of this filter builder - * @return the description + * Returns this description text of this filter builder + * + * @return the description */ - public String getDescription(); + String getDescription(); /** * Builds a new Filter instance. - * @return a new Filter object + * + * @param workspace workspace + * @return a new Filter object */ - public Filter getFilter(); + Filter getFilter(Workspace workspace); /** * Returns the settings panel for the filter this builder is building, the * filter object is passed as a parameter. - * @param filter the filter that the panel is to be configuring - * @return the filter's settings panel + * + * @param filter the filter that the panel is to be configuring + * @return the filter's settings panel */ - public JPanel getPanel(Filter filter); + JPanel getPanel(Filter filter); /** * Notification when the filter is destroyed, to perform clean-up tasks. + * + * @param filter filter to be destroyed */ - public void destroy(Filter filter); + void destroy(Filter filter); } diff --git a/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/FilterLibraryMask.java b/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/FilterLibraryMask.java index acc05b8e1c..d17a9a546f 100644 --- a/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/FilterLibraryMask.java +++ b/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/FilterLibraryMask.java @@ -38,7 +38,8 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.filters.spi; import org.gephi.filters.api.FilterLibrary; @@ -46,8 +47,8 @@ Development and Distribution License("CDDL") (collectively, the /** * Classes that implements this interface can be registered to the filter * library to programmatically enable or disable categories, i.e. filters - * container. That is useful for instance to disable filters working on undirected - * graphs if the current graph is directed. + * container. That is useful for instance to disable filters working on + * undirected graphs if the current graph is directed. *

    * When registered, masks are asked whether the category is valid. * @@ -58,14 +59,16 @@ public interface FilterLibraryMask { /** * Returns the Category this masks is associated. - * @return the Category this filter is describing + * + * @return the Category this filter is describing */ - public Category getCategory(); + Category getCategory(); /** - * Returns true if this masks's category is valid. - * @return true if the category is valid, false + * Returns true if this masks' category is valid. + * + * @return true if the category is valid, false * otherwise */ - public boolean isValid(); + boolean isValid(); } diff --git a/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/FilterProperty.java b/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/FilterProperty.java index a718c23f16..7b84fec878 100644 --- a/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/FilterProperty.java +++ b/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/FilterProperty.java @@ -38,10 +38,13 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.filters.spi; import java.beans.PropertyEditor; +import java.util.logging.Level; +import java.util.logging.Logger; import org.gephi.filters.api.PropertyExecutor; import org.openide.nodes.PropertySupport; import org.openide.util.Lookup; @@ -51,9 +54,9 @@ Development and Distribution License("CDDL") (collectively, the * through this class, especially setting value should be done by using * {@link #setValue(java.lang.Object) }. *

    - * The role of this class is to define filter's properties in order value changes - * can be tracked by the system, UI can be generated and values correctly saved - * in projects file. + * The role of this class is to define filter's properties in order value + * changes can be tracked by the system, UI can be generated and values + * correctly saved in projects file. * * @author Mathieu Bastian */ @@ -68,9 +71,59 @@ public final class FilterProperty { propertyExecutor = Lookup.getDefault().lookup(PropertyExecutor.class); } + /** + * Creates a property. + * + * @param filter The filter instance + * @param valueType The type of the property value, ex: + * Double.class + * @param propertyName The display name of the property + * @param getMethod The name of the get method for this property, must exist + * to make Java reflexion working. + * @param setMethod The name of the set method for this property, must exist + * to make Java reflexion working. + * @return the created property + * @throws NoSuchMethodException if the getter or setter methods cannot be + * found + */ + public static FilterProperty createProperty(Filter filter, Class valueType, String propertyName, String getMethod, + String setMethod) throws NoSuchMethodException { + final FilterProperty filterProperty = new FilterProperty(filter); + PropertySupport.Reflection property = new PropertySupport.Reflection(filter, valueType, getMethod, setMethod); + property.setName(propertyName); + filterProperty.property = property; + + return filterProperty; + } + + /** + * Creates a property. + * + * @param filter filter instance + * @param valueType type of the property value, ex: + * Double.class + * @param fieldName java field name of the property + * @return the created property + * @throws NoSuchMethodException if the getter or setter methods cannot be + * found + */ + public static FilterProperty createProperty(Filter filter, Class valueType, String fieldName) + throws NoSuchMethodException { + if (valueType == Boolean.class) { + valueType = boolean.class; + } + final FilterProperty filterProperty = new FilterProperty(filter); + PropertySupport.Reflection property = new PropertySupport.Reflection(filter, valueType, fieldName); + property.setName(fieldName); + filterProperty.property = property; + + return filterProperty; + } + /** * Returns property's name - * @return property's name + * + * @return property's name */ public String getName() { return property.getDisplayName(); @@ -78,13 +131,14 @@ public String getName() { /** * Returns property's value, can be null - * @return property's value + * + * @return property's value */ public Object getValue() { try { return property.getValue(); - } catch (Exception ex) { - ex.printStackTrace(); + } catch (Exception e) { + Logger.getLogger("").log(Level.SEVERE, "Error while getting value for property '" + getName() + "'", e); } return null; } @@ -92,17 +146,20 @@ public Object getValue() { /** * Set property's value. The type of value must match with this * property value type. + * * @param value the value that is to be set */ public void setValue(Object value) { if (propertyExecutor != null) { propertyExecutor.setValue(this, value, new PropertyExecutor.Callback() { + @Override public void setValue(Object value) { try { property.setValue(value); } catch (Exception e) { - e.printStackTrace(); + Logger.getLogger("") + .log(Level.SEVERE, "Error while setting value for property '" + getName() + "'", e); } } }); @@ -110,14 +167,15 @@ public void setValue(Object value) { try { property.setValue(value); } catch (Exception e) { - e.printStackTrace(); + Logger.getLogger("").log(Level.SEVERE, "Error while setting value for property '" + getName() + "'", e); } } } /** * Returns the PropertyEditor associated to the property value. - * @return the property editor + * + * @return the property editor */ public PropertyEditor getPropertyEditor() { return property.getPropertyEditor(); @@ -126,6 +184,7 @@ public PropertyEditor getPropertyEditor() { /** * Sets the property editor class. The class must implement * {@link PropertyEditor}. + * * @param clazz the property editor class */ public void setPropertyEditorClass(Class clazz) { @@ -134,7 +193,8 @@ public void setPropertyEditorClass(Class clazz) { /** * Returns the property's value type. - * @return the value type + * + * @return the value type */ public Class getValueType() { return property.getValueType(); @@ -142,49 +202,10 @@ public Class getValueType() { /** * Returns the filter instance this property is associated to. - * @return the filter this property belongs to + * + * @return the filter this property belongs to */ public Filter getFilter() { return filter; } - - /** - * Create a property. - * @param filter The filter instance - * @param valueType The type of the property value, ex: Double.class - * @param propertyName The display name of the property - * @param getMethod The name of the get method for this property, must exist - * to make Java reflexion working. - * @param setMethod The name of the set method for this property, must exist - * to make Java reflexion working. - * @return the created property - * @throws NoSuchMethodException if the getter or setter methods cannot be found - */ - public static FilterProperty createProperty(Filter filter, Class valueType, String propertyName, String getMethod, String setMethod) throws NoSuchMethodException { - final FilterProperty filterProperty = new FilterProperty(filter); - PropertySupport.Reflection property = new PropertySupport.Reflection(filter, valueType, getMethod, setMethod); - property.setName(propertyName); - filterProperty.property = property; - - return filterProperty; - } - - /** - * Create a property. - * @param filter The filter instance - * @param valueType The type of the property value, ex: Double.class - * @param fieldName The Java field name of the property - * @throws NoSuchMethodException if the getter or setter methods cannot be found - */ - public static FilterProperty createProperty(Filter filter, Class valueType, String fieldName) throws NoSuchMethodException { - if (valueType == Boolean.class) { - valueType = boolean.class; - } - final FilterProperty filterProperty = new FilterProperty(filter); - PropertySupport.Reflection property = new PropertySupport.Reflection(filter, valueType, fieldName); - property.setName(fieldName); - filterProperty.property = property; - - return filterProperty; - } } diff --git a/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/NodeFilter.java b/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/NodeFilter.java index c0186b0d2c..537692570f 100644 --- a/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/NodeFilter.java +++ b/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/NodeFilter.java @@ -38,25 +38,19 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ package org.gephi.filters.spi; -import org.gephi.graph.api.Graph; import org.gephi.graph.api.Node; /** - * Basic filters for nodes, that works as predicates. For a given node the filter's - * role is to return true if the node is kept or false - * if it is removed. - * + * Basic filters for nodes, that works as predicates. For a given node the + * filter's role is to return true if the node is kept or + * false if it is removed. + * * @author Mathieu Bastian */ -public interface NodeFilter extends Filter { - - public boolean init(Graph graph); - - public boolean evaluate(Graph graph, Node node); +public interface NodeFilter extends ElementFilter { - public void finish(); } diff --git a/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/Operator.java b/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/Operator.java index ce257efa7a..0b7eca4f57 100644 --- a/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/Operator.java +++ b/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/Operator.java @@ -38,20 +38,21 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.filters.spi; import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Subgraph; /** - * * @author Mathieu Bastian */ public interface Operator extends Filter { - public Graph filter(Graph[] graphs); + Graph filter(Subgraph[] graphs); - public Graph filter(Graph graph, Filter[] filters); + Graph filter(Graph graph, Filter[] filters); - public int getInputCount(); + int getInputCount(); } diff --git a/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/RangeFilter.java b/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/RangeFilter.java index 364a8583a4..94d4adde3c 100644 --- a/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/RangeFilter.java +++ b/modules/FiltersAPI/src/main/java/org/gephi/filters/spi/RangeFilter.java @@ -38,19 +38,19 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.filters.spi; import org.gephi.graph.api.Graph; /** - * * @author mbastian */ public interface RangeFilter extends Filter { - - public Number[] getValues(Graph graph); - - public FilterProperty getRangeProperty(); - + + Number[] getValues(Graph graph); + + FilterProperty getRangeProperty(); + } diff --git a/modules/FiltersAPI/src/main/nbm/manifest.mf b/modules/FiltersAPI/src/main/nbm/manifest.mf index 88767dbc48..c7ccd291ab 100644 --- a/modules/FiltersAPI/src/main/nbm/manifest.mf +++ b/modules/FiltersAPI/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/filters/api/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi Core +OpenIDE-Module-Name: Filters API diff --git a/modules/FiltersAPI/src/main/nbm/module.xml b/modules/FiltersAPI/src/main/nbm/module.xml deleted file mode 100644 index edce12c3f4..0000000000 --- a/modules/FiltersAPI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle.properties b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle.properties index e3c2f1b180..0af014dad8 100644 --- a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle.properties +++ b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle.properties @@ -1,7 +1,4 @@ -OpenIDE-Module-Display-Category=Gephi Core -OpenIDE-Module-Long-Description=\ - API/SPI for filters, define and control current filtering -OpenIDE-Module-Name=Filters API +OpenIDE-Module-Long-Description=API/SPI for filters, define and control current filtering OpenIDE-Module-Short-Description=API/SPI for filters FiltersLibrary.Category.Topology = Topology diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_ar.properties b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_ca.properties b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_ca.properties new file mode 100644 index 0000000000..741848cd9b --- /dev/null +++ b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_ca.properties @@ -0,0 +1,8 @@ +OpenIDE-Module-Long-Description=API/SPI for filters, define and control current filtering +OpenIDE-Module-Short-Description=API/SPI for filters +FiltersLibrary.Category.Topology=Topologia +FiltersLibrary.Category.Attributes=Atributs +FiltersLibrary.Category.Hierarchy=Jerarquia +FiltersLibrary.Category.Edge=Arestes + + diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_cs.properties b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_cs.properties index 5c9894a523..4b0cba4ace 100644 --- a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_cs.properties +++ b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_cs.properties @@ -1,19 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-21 20\:28+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=API/SPI pro filtry, ur\u010den\u00ed a kontrola sou\u010dasn\u00e9ho filtrov\u00e1n\u00ed - -OpenIDE-Module-Short-Description=API/SPI pro filtry - -FiltersLibrary.Category.Topology=Topologie - -FiltersLibrary.Category.Attributes=Vlastnosti - -FiltersLibrary.Category.Hierarchy=Hierarchie - -FiltersLibrary.Category.Edge=Hrany +OpenIDE-Module-Long-Description=API/SPI pro filtry, ur\u010denν a kontrola sou\u010dasnιho filtrovαnν +OpenIDE-Module-Short-Description=API/SPI pro filtry + +FiltersLibrary.Category.Topology = Topologie +FiltersLibrary.Category.Attributes = Vlastnosti +FiltersLibrary.Category.Hierarchy = Hierarchie +FiltersLibrary.Category.Edge = Hrany + diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_de.properties b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_de.properties new file mode 100644 index 0000000000..2064b76647 --- /dev/null +++ b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_de.properties @@ -0,0 +1,8 @@ +OpenIDE-Module-Long-Description=API/SPI fόr Filter, Defintion und Steuerung aktueller Filterung +OpenIDE-Module-Short-Description=API/SPI fόr Filter + +FiltersLibrary.Category.Topology = Topologie +FiltersLibrary.Category.Attributes = Attribute +FiltersLibrary.Category.Hierarchy = Hierarchie +FiltersLibrary.Category.Edge = Kanten + diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_el.properties b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_el.properties new file mode 100644 index 0000000000..f6e19f2992 --- /dev/null +++ b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_el.properties @@ -0,0 +1,8 @@ + + +FiltersLibrary.Category.Topology=\u03A4\u03BF\u03C0\u03BF\u03BB\u03BF\u03B3\u03AF\u03B1 +FiltersLibrary.Category.Edge=\u0391\u03BA\u03BC\u03AD\u03C2 +OpenIDE-Module-Short-Description=API/SPI \u03B3\u03B9\u03B1 \u03C6\u03AF\u03BB\u03C4\u03C1\u03B1 +OpenIDE-Module-Long-Description=API/SPI \u03B3\u03B9\u03B1 \u03C6\u03AF\u03BB\u03C4\u03C1\u03B1, \u03BF\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2 \u03BA\u03B1\u03B9 \u03AD\u03BB\u03B5\u03B3\u03C7\u03BF\u03C2 \u03C6\u03B9\u03BB\u03C4\u03C1\u03B1\u03C1\u03AF\u03C3\u03BC\u03B1\u03C4\u03BF\u03C2 \u03C3\u03B5 \u03B5\u03BE\u03AD\u03BB\u03B9\u03BE\u03B7 +FiltersLibrary.Category.Hierarchy=\u0399\u03B5\u03C1\u03B1\u03C1\u03C7\u03AF\u03B1 +FiltersLibrary.Category.Attributes=\u03A7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03AC diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_es.properties b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_es.properties index 234d42042e..5a39d31a69 100644 --- a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_es.properties +++ b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_es.properties @@ -1,19 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:05+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=API/SPI para filtros, definir y controlar el filtrado actual - -OpenIDE-Module-Short-Description=API/SPI para filtros - -FiltersLibrary.Category.Topology=Topolog\u00eda - -FiltersLibrary.Category.Attributes=Atributos - -FiltersLibrary.Category.Hierarchy=Jerarqu\u00eda - -FiltersLibrary.Category.Edge=Aristas +OpenIDE-Module-Long-Description=API/SPI para filtros, definir y controlar el filtrado actual +OpenIDE-Module-Short-Description=API/SPI para filtros + +FiltersLibrary.Category.Topology = Topologνa +FiltersLibrary.Category.Attributes = Atributos +FiltersLibrary.Category.Hierarchy = Jerarquνa +FiltersLibrary.Category.Edge = Aristas + diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_fr.properties b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_fr.properties index cb0bad81f9..41596b1e61 100644 --- a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_fr.properties +++ b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_fr.properties @@ -1,19 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:05+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API/SPI pour le module Filters, d\u00e9finit et contr\u00f4le le filtrage courant. - -OpenIDE-Module-Short-Description=API/SPI pour le module Filters - -FiltersLibrary.Category.Topology=Topologie - -FiltersLibrary.Category.Attributes=Attributs - -FiltersLibrary.Category.Hierarchy=Hi\u00e9rarchie - -FiltersLibrary.Category.Edge=Liens +OpenIDE-Module-Long-Description=API/SPI pour le module Filters, dιfinit et contrτle le filtrage courant. +OpenIDE-Module-Short-Description=API/SPI pour le module Filters + +FiltersLibrary.Category.Topology = Topologie +FiltersLibrary.Category.Attributes = Attributs +FiltersLibrary.Category.Hierarchy = Hiιrarchie +FiltersLibrary.Category.Edge = Liens + diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_he.properties b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_he.properties new file mode 100644 index 0000000000..cc8a13ab00 --- /dev/null +++ b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_he.properties @@ -0,0 +1,8 @@ +OpenIDE-Module-Long-Description=API/SPI for filters, define and control current filtering +OpenIDE-Module-Short-Description=API/SPI for filters +FiltersLibrary.Category.Topology=Topology +FiltersLibrary.Category.Attributes=Attributes +FiltersLibrary.Category.Hierarchy=Hierarchy +FiltersLibrary.Category.Edge=Edges + + diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_hu.properties b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_hu.properties new file mode 100644 index 0000000000..fd353c7e5e --- /dev/null +++ b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_hu.properties @@ -0,0 +1,8 @@ + + +FiltersLibrary.Category.Topology=Topol\u00F3gia +FiltersLibrary.Category.Edge=\u00C9lek +OpenIDE-Module-Short-Description=API/SPI sz\u0171r\u0151kh\u00F6z +OpenIDE-Module-Long-Description=API/SPI sz\u0171r\u0151kh\u00F6z, meghat\u00E1rozza \u00E9s szab\u00E1lyozza az aktu\u00E1lis sz\u0171r\u00E9st +FiltersLibrary.Category.Hierarchy=Hierarchia +FiltersLibrary.Category.Attributes=Attrib\u00FAtumok diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_it.properties b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_it.properties new file mode 100644 index 0000000000..a19a58428e --- /dev/null +++ b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_it.properties @@ -0,0 +1,8 @@ +OpenIDE-Module-Long-Description=API/SPI for filters, define and control current filtering +OpenIDE-Module-Short-Description=API/SPI for filters +FiltersLibrary.Category.Topology=Topology +FiltersLibrary.Category.Attributes=Attributes +FiltersLibrary.Category.Hierarchy=Hierarchy +FiltersLibrary.Category.Edge=Archi + + diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_ja.properties b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_ja.properties index 3bad538b19..366b1257b7 100644 --- a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_ja.properties +++ b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_ja.properties @@ -1,19 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-03 10\:54+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u30d5\u30a3\u30eb\u30bf\u7528\u306eAPI / SPI\u3001\u73fe\u5728\u306e\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3092\u5b9a\u7fa9\u3057\u5236\u5fa1\u3057\u307e\u3059 - -OpenIDE-Module-Short-Description=\u30d5\u30a3\u30eb\u30bf\u7528\u306eAPI / SPI - -FiltersLibrary.Category.Topology=\u30c8\u30dd\u30ed\u30b8 - -FiltersLibrary.Category.Attributes=\u5c5e\u6027 - -FiltersLibrary.Category.Hierarchy=\u968e\u5c64 - -FiltersLibrary.Category.Edge=\u8fba +OpenIDE-Module-Long-Description=\u30d5\u30a3\u30eb\u30bf\u7528\u306eAPI / SPI\u3001\u73fe\u5728\u306e\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u3092\u5b9a\u7fa9\u3057\u5236\u5fa1\u3057\u307e\u3059 +OpenIDE-Module-Short-Description=\u30d5\u30a3\u30eb\u30bf\u7528\u306eAPI / SPI + +FiltersLibrary.Category.Topology = \u30c8\u30dd\u30ed\u30b8 +FiltersLibrary.Category.Attributes = \u5c5e\u6027 +FiltersLibrary.Category.Hierarchy = \u968e\u5c64 +FiltersLibrary.Category.Edge = \u8fba + diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_ko.properties b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_ko.properties new file mode 100644 index 0000000000..e57c2352ac --- /dev/null +++ b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_ko.properties @@ -0,0 +1,8 @@ + + +OpenIDE-Module-Long-Description=\uD544\uD130\uC6A9 API/SPI, \uD604\uC7AC \uD544\uD130\uB9C1\uC744 \uC815\uC758 \uBC0F \uC81C\uC5B4 +OpenIDE-Module-Short-Description=\uD544\uD130\uC6A9 API/SPI +FiltersLibrary.Category.Topology=\uD1A0\uD3F4\uB85C\uC9C0 +FiltersLibrary.Category.Attributes=\uC18D\uC131 +FiltersLibrary.Category.Hierarchy=\uACC4\uCE35 +FiltersLibrary.Category.Edge=\uC5E3\uC9C0 diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_nl.properties b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_nl.properties new file mode 100644 index 0000000000..4c666a886f --- /dev/null +++ b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_nl.properties @@ -0,0 +1,8 @@ +OpenIDE-Module-Long-Description=API/SPI for filters, define and control current filtering +OpenIDE-Module-Short-Description=API/SPI for filters +FiltersLibrary.Category.Topology=Topology +FiltersLibrary.Category.Attributes=Attributes +FiltersLibrary.Category.Hierarchy=Hierarchy +FiltersLibrary.Category.Edge=Verbindingen + + diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_pt_BR.properties b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_pt_BR.properties index b74d53739a..2cb57fddf7 100644 --- a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_pt_BR.properties +++ b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_pt_BR.properties @@ -1,19 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 01\:07+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API/SPI de filtros, definir e controlar filtragem atual - -OpenIDE-Module-Short-Description=API/SPI de filtros - -FiltersLibrary.Category.Topology=Topologia - -FiltersLibrary.Category.Attributes=Atributos - -FiltersLibrary.Category.Hierarchy=Hierarquia - -FiltersLibrary.Category.Edge=Arestas +OpenIDE-Module-Long-Description=API/SPI de filtros, definir e controlar filtragem atual +OpenIDE-Module-Short-Description=API/SPI de filtros + +FiltersLibrary.Category.Topology = Topologia +FiltersLibrary.Category.Attributes = Atributos +FiltersLibrary.Category.Hierarchy = Hierarquia +FiltersLibrary.Category.Edge = Arestas + diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_ro.properties b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_ro.properties new file mode 100644 index 0000000000..5b73a8e974 --- /dev/null +++ b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_ro.properties @@ -0,0 +1,8 @@ + + +FiltersLibrary.Category.Topology=Topologie +OpenIDE-Module-Long-Description=API/SPI pentru filtre, define\u0219te \u0219i controleaz\u0103 filtrarea curent\u0103 +OpenIDE-Module-Short-Description=API/SPI pentru filtre +FiltersLibrary.Category.Attributes=Atribute +FiltersLibrary.Category.Hierarchy=Ierarhie +FiltersLibrary.Category.Edge=Muchii diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_ru.properties b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_ru.properties index b3b66b3e6e..746c17652d 100644 --- a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_ru.properties +++ b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_ru.properties @@ -1,19 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-22 07\:35+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=API/SPI \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c\u0438. - -OpenIDE-Module-Short-Description=API/SPI \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 - -FiltersLibrary.Category.Topology=\u0422\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u044f - -FiltersLibrary.Category.Attributes=\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b - -FiltersLibrary.Category.Hierarchy=\u0418\u0435\u0440\u0430\u0440\u0445\u0438\u044f - -FiltersLibrary.Category.Edge=\u0420\u0451\u0431\u0440\u0430 +OpenIDE-Module-Long-Description=API/SPI \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c\u0438. +OpenIDE-Module-Short-Description=API/SPI \u0434\u043b\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 + +FiltersLibrary.Category.Topology = \u0422\u043e\u043f\u043e\u043b\u043e\u0433\u0438\u044f +FiltersLibrary.Category.Attributes = \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b +FiltersLibrary.Category.Hierarchy = \u0418\u0435\u0440\u0430\u0440\u0445\u0438\u044f +FiltersLibrary.Category.Edge = \u0420\u0451\u0431\u0440\u0430 + diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_th.properties b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_tr.properties b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_tr.properties new file mode 100644 index 0000000000..cc8a13ab00 --- /dev/null +++ b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_tr.properties @@ -0,0 +1,8 @@ +OpenIDE-Module-Long-Description=API/SPI for filters, define and control current filtering +OpenIDE-Module-Short-Description=API/SPI for filters +FiltersLibrary.Category.Topology=Topology +FiltersLibrary.Category.Attributes=Attributes +FiltersLibrary.Category.Hierarchy=Hierarchy +FiltersLibrary.Category.Edge=Edges + + diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_uk.properties b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_uk.properties new file mode 100644 index 0000000000..33d60f2db7 --- /dev/null +++ b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_uk.properties @@ -0,0 +1,6 @@ +FiltersLibrary.Category.Topology=\u0422\u043E\u043F\u043E\u043B\u043E\u0433\u0456\u044F +OpenIDE-Module-Short-Description=API/SPI \u0434\u043B\u044F \u0444\u0456\u043B\u044C\u0442\u0440\u0456\u0432 +FiltersLibrary.Category.Edge=\u041A\u0440\u0430\u0457 +OpenIDE-Module-Long-Description=API/SPI \u0434\u043B\u044F \u0444\u0456\u043B\u044C\u0442\u0440\u0456\u0432, \u0432\u0438\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0442\u0430 \u043A\u0435\u0440\u0443\u0432\u0430\u043D\u043D\u044F \u043F\u043E\u0442\u043E\u0447\u043D\u043E\u044E \u0444\u0456\u043B\u044C\u0442\u0440\u0430\u0446\u0456\u0454\u044E +FiltersLibrary.Category.Attributes=\u0410\u0442\u0440\u0438\u0431\u0443\u0442\u0438 +FiltersLibrary.Category.Hierarchy=\u0406\u0454\u0440\u0430\u0440\u0445\u0456\u044F diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_zh_CN.properties b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_zh_CN.properties index 635b1a2d6b..5a2420ddee 100644 --- a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_zh_CN.properties +++ b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_zh_CN.properties @@ -1,18 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:14+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u8fc7\u6ee4\u5668\u7684\u5e94\u7528\u7a0b\u5e8f\u754c\u9762\u548c\u5355\u4e2a\u7a0b\u5e8f\u542f\u52a8\uff0c\u5b9a\u4e49\u548c\u63a7\u5236\u73b0\u6709\u7684\u6ee4\u6ce2 - -OpenIDE-Module-Short-Description=\u8fc7\u6ee4\u5668\u7684\u5e94\u7528\u7a0b\u5e8f\u754c\u9762\u548c\u5355\u4e2a\u7a0b\u5e8f\u542f\u52a8 - -FiltersLibrary.Category.Topology=\u62d3\u6251 - -FiltersLibrary.Category.Attributes=\u5c5e\u6027 - -FiltersLibrary.Category.Hierarchy=\u5c42\u6b21\u7ed3\u6784 - -FiltersLibrary.Category.Edge=\u8fb9 +OpenIDE-Module-Long-Description=\u8fc7\u6ee4\u5668\u7684\u5e94\u7528\u7a0b\u5e8f\u754c\u9762\u548c\u5355\u4e2a\u7a0b\u5e8f\u542f\u52a8\uff0c\u5b9a\u4e49\u548c\u63a7\u5236\u73b0\u6709\u7684\u6ee4\u6ce2 +OpenIDE-Module-Short-Description=\u8fc7\u6ee4\u5668\u7684\u5e94\u7528\u7a0b\u5e8f\u754c\u9762\u548c\u5355\u4e2a\u7a0b\u5e8f\u542f\u52a8 + +FiltersLibrary.Category.Topology = \u62d3\u6251 +FiltersLibrary.Category.Attributes = \u5c5e\u6027 +FiltersLibrary.Category.Hierarchy = \u5c42\u6b21\u7ed3\u6784 +FiltersLibrary.Category.Edge = \u8fb9 + diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_zh_TW.properties b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_zh_TW.properties new file mode 100644 index 0000000000..6b8beee6df --- /dev/null +++ b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/Bundle_zh_TW.properties @@ -0,0 +1,8 @@ +OpenIDE-Module-Long-Description=API/SPI for filters, define and control current filtering +OpenIDE-Module-Short-Description=API/SPI for filters +FiltersLibrary.Category.Topology=Topology +FiltersLibrary.Category.Attributes=Attributes +FiltersLibrary.Category.Hierarchy=Hierarchy +FiltersLibrary.Category.Edge=\u9023\u7d50 + + diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/cs.po b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/cs.po deleted file mode 100644 index da5805f557..0000000000 --- a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/cs.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-21 20:28+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI pro filtry, určenΓ­ a kontrola současnΓ©ho filtrovΓ‘nΓ­" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI pro filtry" - -msgid "FiltersLibrary.Category.Topology" -msgstr "Topologie" - -msgid "FiltersLibrary.Category.Attributes" -msgstr "Vlastnosti" - -msgid "FiltersLibrary.Category.Hierarchy" -msgstr "Hierarchie" - -msgid "FiltersLibrary.Category.Edge" -msgstr "Hrany" diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/es.po b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/es.po deleted file mode 100644 index 36cef602f6..0000000000 --- a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/es.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:05+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI para filtros, definir y controlar el filtrado actual" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI para filtros" - -msgid "FiltersLibrary.Category.Topology" -msgstr "TopologΓ­a" - -msgid "FiltersLibrary.Category.Attributes" -msgstr "Atributos" - -msgid "FiltersLibrary.Category.Hierarchy" -msgstr "JerarquΓ­a" - -msgid "FiltersLibrary.Category.Edge" -msgstr "Aristas" diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/fr.po b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/fr.po deleted file mode 100644 index fc1ce58215..0000000000 --- a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/fr.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:05+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI pour le module Filters, dΓ©finit et contrΓ΄le le filtrage courant." - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI pour le module Filters" - -msgid "FiltersLibrary.Category.Topology" -msgstr "Topologie" - -msgid "FiltersLibrary.Category.Attributes" -msgstr "Attributs" - -msgid "FiltersLibrary.Category.Hierarchy" -msgstr "HiΓ©rarchie" - -msgid "FiltersLibrary.Category.Edge" -msgstr "Liens" diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/ja.po b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/ja.po deleted file mode 100644 index 0d3360f3af..0000000000 --- a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/ja.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-03 10:54+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "フィルタ用γAPI / SPIγ€ηΎεœ¨γγƒ•ィルタγƒͺングをεšηΎ©γ—εˆΆεΎ‘します" - -msgid "OpenIDE-Module-Short-Description" -msgstr "フィルタ用γAPI / SPI" - -msgid "FiltersLibrary.Category.Topology" -msgstr "γƒˆγƒγƒ­γ‚Έ" - -msgid "FiltersLibrary.Category.Attributes" -msgstr "ε±žζ€§" - -msgid "FiltersLibrary.Category.Hierarchy" -msgstr "階局" - -msgid "FiltersLibrary.Category.Edge" -msgstr "θΎΊ" diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/org-gephi-filters-api.pot b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/org-gephi-filters-api.pot deleted file mode 100644 index a5f43c4196..0000000000 --- a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/org-gephi-filters-api.pot +++ /dev/null @@ -1,34 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI for filters, define and control current filtering" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI for filters" - -msgid "FiltersLibrary.Category.Topology" -msgstr "Topology" - -msgid "FiltersLibrary.Category.Attributes" -msgstr "Attributes" - -msgid "FiltersLibrary.Category.Hierarchy" -msgstr "Hierarchy" - -msgid "FiltersLibrary.Category.Edge" -msgstr "Edges" diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/package.html b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/package.html index 1c4f047fd7..477fabccee 100644 --- a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/package.html +++ b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/package.html @@ -1,21 +1,26 @@ - - - - API for graph filtering. -

    - This API manage graph filtering. Its job is to execute filtering query - to produce subgraphs. Filters are combined in queries that are passed - to the system to be executed. The result of a filter query is a subgraph, - a subset of the original graph that is represented as a - GraphView. -

    -

    - The role of the FilterModel is to - host current queries. Each workspace has its FilterModel. -

    -

    - The controller hosts the current FilterModel, for the - current workspace. -

    - - + + + + org.gephi.filters.api + + +

    + API for graph filtering. +

    +

    + This API manage graph filtering. Its job is to execute filtering query + to produce subgraphs. Filters are combined in queries that are passed + to the system to be executed. The result of a filter query is a subgraph, + a subset of the original graph that is represented as a + GraphView. +

    +

    + The role of the FilterModel is to + host current queries. Each workspace has its FilterModel. +

    +

    + The controller hosts the current FilterModel, for the + current workspace. +

    + + diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/pt_BR.po b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/pt_BR.po deleted file mode 100644 index e963f87ef4..0000000000 --- a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/pt_BR.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 01:07+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI de filtros, definir e controlar filtragem atual" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI de filtros" - -msgid "FiltersLibrary.Category.Topology" -msgstr "Topologia" - -msgid "FiltersLibrary.Category.Attributes" -msgstr "Atributos" - -msgid "FiltersLibrary.Category.Hierarchy" -msgstr "Hierarquia" - -msgid "FiltersLibrary.Category.Edge" -msgstr "Arestas" diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/resources/folder.gif b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/resources/folder.gif deleted file mode 100644 index 91f0557ccc..0000000000 Binary files a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/resources/folder.gif and /dev/null differ diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/ru.po b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/ru.po deleted file mode 100644 index 1c63653cbd..0000000000 --- a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/ru.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-22 07:35+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI для опрСдСлСния ΠΈ управлСния Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°ΠΌΠΈ." - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI для Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²" - -msgid "FiltersLibrary.Category.Topology" -msgstr "Вопология" - -msgid "FiltersLibrary.Category.Attributes" -msgstr "Атрибуты" - -msgid "FiltersLibrary.Category.Hierarchy" -msgstr "Π˜Π΅Ρ€Π°Ρ€Ρ…ΠΈΡ" - -msgid "FiltersLibrary.Category.Edge" -msgstr "Π Ρ‘Π±Ρ€Π°" diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/zh_CN.po b/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/zh_CN.po deleted file mode 100644 index 6803dcf537..0000000000 --- a/modules/FiltersAPI/src/main/resources/org/gephi/filters/api/zh_CN.po +++ /dev/null @@ -1,36 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:14+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "θΏ‡ζ»€ε™¨ηš„εΊ”η”¨η¨‹εΊη•Œι’ε’Œε•δΈͺη¨‹εΊε―εŠ¨οΌŒεšδΉ‰ε’ŒζŽ§εˆΆηŽ°ζœ‰ηš„ζ»€ζ³’" - -msgid "OpenIDE-Module-Short-Description" -msgstr "θΏ‡ζ»€ε™¨ηš„εΊ”η”¨η¨‹εΊη•Œι’ε’Œε•δΈͺη¨‹εΊε―εŠ¨" - -msgid "FiltersLibrary.Category.Topology" -msgstr "拓扑" - -msgid "FiltersLibrary.Category.Attributes" -msgstr "ε±žζ€§" - -msgid "FiltersLibrary.Category.Hierarchy" -msgstr "ε±‚ζ¬‘η»“ζž„" - -msgid "FiltersLibrary.Category.Edge" -msgstr "θΎΉ" diff --git a/modules/FiltersAPI/src/main/resources/org/gephi/filters/spi/package.html b/modules/FiltersAPI/src/main/resources/org/gephi/filters/spi/package.html index e85d2fae88..5d9f34a964 100644 --- a/modules/FiltersAPI/src/main/resources/org/gephi/filters/spi/package.html +++ b/modules/FiltersAPI/src/main/resources/org/gephi/filters/spi/package.html @@ -1,23 +1,41 @@ - - - - Interfaces for creating new filter classes. -

    Create a new Filter

    -
    1. Create a new module and set FilterAPI, GraphAPI - and UtilitiesAPI as dependencies.
    2. -
    3. Create a new builder class by implementing FilterBuilder, - this class is basically a factory that will create filter instances - on demand.
    4. -
    5. Add @ServiceProvider annotation to your builder, that it can - be found by the system. Set FilterBuilder as the - annotation parameter.
    6. -
    7. Create a new class that implements either NodeFilter, - EdgeFilter or ComplexFilter.
    8. -
    9. Fill getProperties() method in your filter, it should - expose all properies that can be set by users and have an influence - on the filter execution.
    10. -
    11. If you need a user interface for your filter, fill - getPanel() method in the builder.
    12. -
    - - + + + + org.gephi.filters.spi + + +

    + Interfaces for creating new filter classes. +

    +

    Create a new Filter

    +
      +
    1. + Create a new module and set FilterAPI, GraphAPI + and UtilitiesAPI as dependencies. +
    2. +
    3. + Create a new builder class by implementing FilterBuilder, + this class is basically a factory that will create filter instances + on demand. +
    4. +
    5. + Add @ServiceProvider annotation to your builder, that it can + be found by the system. Set FilterBuilder as the + annotation parameter. +
    6. +
    7. + Create a new class that implements either NodeFilter, + EdgeFilter or ComplexFilter. +
    8. +
    9. + Fill getProperties() method in your filter, it should + expose all properies that can be set by users and have an influence + on the filter execution. +
    10. +
    11. + If you need a user interface for your filter, fill + getPanel() method in the builder. +
    12. +
    + + diff --git a/modules/FiltersAPI/src/main/resources/overview.html b/modules/FiltersAPI/src/main/resources/overview.html index 6f0ab5bd22..2009c87628 100644 --- a/modules/FiltersAPI/src/main/resources/overview.html +++ b/modules/FiltersAPI/src/main/resources/overview.html @@ -1,7 +1,12 @@ - + + + Filters API + - Filters API/SPI provides filtering features, how to create subgraph. +

    + Filters API/SPI provides filtering features, how to create subgraph. +

    The API let users create and combine filter queries and execute them on the current graph. The aim is to filter the graph (i.e. remove diff --git a/modules/FiltersImpl/pom.xml b/modules/FiltersImpl/pom.xml index 8265e943d6..11228d220b 100644 --- a/modules/FiltersImpl/pom.xml +++ b/modules/FiltersImpl/pom.xml @@ -4,13 +4,13 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi filters-impl - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm FiltersImpl @@ -20,10 +20,6 @@ org.netbeans.api org-netbeans-api-annotations-common - - ${project.groupId} - data-attributes-api - ${project.groupId} filters-api @@ -44,6 +40,14 @@ ${project.groupId} visualization-api + + ${project.groupId} + utils + + + ${project.groupId} + core-library-wrapper + org.netbeans.api org-openide-util-lookup @@ -52,12 +56,31 @@ org.netbeans.api org-openide-util + + + + ${project.groupId} + project-api + test-jar + test + + + ${project.groupId} + graph-api + test-jar + test + + + ${project.groupId} + filters-plugin + test + - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/FiltersImpl/src/main/java/org/gephi/filters/AbstractQueryImpl.java b/modules/FiltersImpl/src/main/java/org/gephi/filters/AbstractQueryImpl.java index 64399b5bb8..7621249a24 100644 --- a/modules/FiltersImpl/src/main/java/org/gephi/filters/AbstractQueryImpl.java +++ b/modules/FiltersImpl/src/main/java/org/gephi/filters/AbstractQueryImpl.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters; import java.util.ArrayDeque; @@ -54,7 +55,6 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.graph.api.Graph; /** - * * @author Mathieu Bastian */ public abstract class AbstractQueryImpl implements Query { @@ -64,21 +64,27 @@ public abstract class AbstractQueryImpl implements Query { protected Graph result; public AbstractQueryImpl() { - this.children = new ArrayList(); + this.children = new ArrayList<>(); } + @Override public abstract int getChildrenSlotsCount(); + @Override public abstract int getPropertiesCount(); + @Override public abstract String getPropertyName(int index); + @Override public abstract Object getPropertyValue(int index); + @Override public abstract String getName(); public abstract void setName(String name); + @Override public Query[] getChildren() { return children.toArray(new Query[0]); } @@ -100,6 +106,7 @@ public void removeSubQuery(Query subQuery) { children.remove((AbstractQueryImpl) subQuery); } + @Override public Query getParent() { return parent; } @@ -108,14 +115,14 @@ public void setParent(Query parent) { this.parent = parent; } - public void setResult(Graph result) { - this.result = result; - } - public Graph getResult() { return result; } + public void setResult(Graph result) { + this.result = result; + } + public AbstractQueryImpl getRoot() { AbstractQueryImpl root = this; while (root.getParent() != null) { @@ -125,8 +132,8 @@ public AbstractQueryImpl getRoot() { } public AbstractQueryImpl[] getLeaves() { - ArrayList leaves = new ArrayList(); - Deque stack = new ArrayDeque(); + ArrayList leaves = new ArrayList<>(); + Deque stack = new ArrayDeque<>(); stack.add(this); while (!stack.isEmpty()) { AbstractQueryImpl query = (AbstractQueryImpl) stack.pop(); @@ -143,13 +150,13 @@ public AbstractQueryImpl[] getLeaves() { public AbstractQueryImpl copy() { AbstractQueryImpl copy = null; if (this instanceof FilterQueryImpl) { - copy = new FilterQueryImpl(this.getFilter()); + copy = new FilterQueryImpl(this.getBuilder(), this.getFilter()); } else if (this instanceof OperatorQueryImpl) { copy = new OperatorQueryImpl((Operator) this.getFilter()); } for (int i = 0; i < children.size(); i++) { - AbstractQueryImpl child = (AbstractQueryImpl) children.get(i); + AbstractQueryImpl child = children.get(i); AbstractQueryImpl childCopy = child.copy(); childCopy.parent = copy; copy.children.add(childCopy); @@ -158,16 +165,17 @@ public AbstractQueryImpl copy() { return copy; } + @Override public Query[] getQueries(Class filterClass) { - List r = new LinkedList(); - LinkedList stack = new LinkedList(); + List r = new LinkedList<>(); + LinkedList stack = new LinkedList<>(); stack.add(this); while (!stack.isEmpty()) { Query q = stack.pop(); r.add(q); stack.addAll(Arrays.asList(q.getChildren())); } - for (Iterator itr = r.iterator(); itr.hasNext();) { + for (Iterator itr = r.iterator(); itr.hasNext(); ) { Query q = itr.next(); if (!q.getFilter().getClass().equals(filterClass)) { itr.remove(); @@ -176,9 +184,10 @@ public Query[] getQueries(Class filterClass) { return r.toArray(new Query[0]); } + @Override public Query[] getDescendantsAndSelf() { - List r = new LinkedList(); - LinkedList stack = new LinkedList(); + List r = new LinkedList<>(); + LinkedList stack = new LinkedList<>(); stack.add(this); while (!stack.isEmpty()) { Query q = stack.pop(); diff --git a/modules/FiltersImpl/src/main/java/org/gephi/filters/AttributeColumnPropertyEditor.java b/modules/FiltersImpl/src/main/java/org/gephi/filters/AttributeColumnPropertyEditor.java index e6856d624b..a7e0328324 100644 --- a/modules/FiltersImpl/src/main/java/org/gephi/filters/AttributeColumnPropertyEditor.java +++ b/modules/FiltersImpl/src/main/java/org/gephi/filters/AttributeColumnPropertyEditor.java @@ -38,42 +38,40 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.filters; import java.beans.PropertyEditorSupport; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeController; -import org.gephi.data.attributes.api.AttributeModel; -import org.gephi.data.attributes.api.AttributeType; -import org.openide.util.Lookup; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.GraphModel; /** - * * @author Mathieu Bastian */ public class AttributeColumnPropertyEditor extends PropertyEditorSupport { - - private AttributeColumn column; - @Override - public void setValue(Object value) { - this.column = (AttributeColumn) value; - } + private Column column; + private GraphModel model; @Override public Object getValue() { return column; } + @Override + public void setValue(Object value) { + this.column = (Column) value; + } + @Override public String getAsText() { if (column != null) { - AttributeModel model = Lookup.getDefault().lookup(AttributeController.class).getModel(); - if (model.getNodeTable().hasColumn(column.getTitle())) { - return "NODE*-*" + column.getId() + "*-*" + column.getType().getTypeString(); - } else if (model.getEdgeTable().hasColumn(column.getTitle())) { - return "EDGE*-*" + column.getId() + "*-*" + column.getType().getTypeString(); + if (AttributeUtils.isNodeColumn(column)) { + return "NODE*-*" + column.getId() + "*-*" + column.getTypeClass().getName(); + } else { + return "EDGE*-*" + column.getId() + "*-*" + column.getTypeClass().getName(); } } return "null"; @@ -83,13 +81,16 @@ public String getAsText() { @Override public void setAsText(String text) throws IllegalArgumentException { if (!text.equals("null")) { - AttributeModel model = Lookup.getDefault().lookup(AttributeController.class).getModel(); String[] arr = text.split("\\*-\\*"); if (arr[0].equals("NODE")) { - column = model.getNodeTable().getColumn(arr[1], AttributeType.valueOf(arr[2])); + column = model.getNodeTable().getColumn(arr[1]); } else if (arr[0].equals("EDGE")) { - column = model.getEdgeTable().getColumn(arr[1], AttributeType.valueOf(arr[2])); + column = model.getEdgeTable().getColumn(arr[1]); } } } + + public void setGraphModel(GraphModel model) { + this.model = model; + } } diff --git a/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterAutoRefreshor.java b/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterAutoRefreshor.java index c32d61432b..46d0c7ff1e 100644 --- a/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterAutoRefreshor.java +++ b/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterAutoRefreshor.java @@ -39,28 +39,26 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters; -import java.util.concurrent.atomic.AtomicBoolean; -import org.gephi.graph.api.GraphEvent; -import org.gephi.graph.api.GraphListener; import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.GraphObserver; import org.openide.util.Exceptions; /** - * * @author Mathieu Bastian */ -public class FilterAutoRefreshor extends Thread implements GraphListener { +public class FilterAutoRefreshor extends Thread { private static final int TIMER = 1000; private final GraphModel graphModel; private final FilterModelImpl filterModel; + private GraphObserver observer; private boolean running = true; - private AtomicBoolean refresh = new AtomicBoolean(false); public FilterAutoRefreshor(FilterModelImpl filterModel, GraphModel graphModel) { - super("Filter Auto-Refresh"); + super("Filter Auto-Refresh - " + filterModel.getWorkspace().toString()); setDaemon(true); this.graphModel = graphModel; this.filterModel = filterModel; @@ -70,7 +68,7 @@ public FilterAutoRefreshor(FilterModelImpl filterModel, GraphModel graphModel) { public void run() { while (running) { try { - if (refresh.compareAndSet(true, false)) { + if (observer != null && observer.hasGraphChanged()) { manualRefresh(); } Thread.sleep(TIMER); @@ -82,30 +80,25 @@ public void run() { public void setEnable(boolean enable) { if (enable) { - graphModel.addGraphListener(this); - } else { - graphModel.removeGraphListener(this); - refresh.set(false); + if (observer == null) { + observer = graphModel.createGraphObserver(graphModel.getGraph(), false); + } + } else if (observer != null && !observer.isDestroyed()) { + observer.destroy(); + observer = null; } if (!isAlive()) { start(); } } - public void graphChanged(GraphEvent event) { - if (event.getSource().isMainView() && event.is(GraphEvent.EventType.ADD_NODES_AND_EDGES, - GraphEvent.EventType.REMOVE_NODES_AND_EDGES, - GraphEvent.EventType.MOVE_NODES)) { - refresh.set(true); - //System.out.println("set refresh true"); - } - } - public void setRunning(boolean running) { this.running = running; if (!running) { - graphModel.removeGraphListener(this); - refresh.set(false); + if (observer != null && !observer.isDestroyed()) { + observer.destroy(); + observer = null; + } } } diff --git a/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterControllerImpl.java b/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterControllerImpl.java index 00e1caa89f..36c919bf18 100644 --- a/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterControllerImpl.java +++ b/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterControllerImpl.java @@ -39,126 +39,158 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters; import java.beans.PropertyEditorManager; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeController; -import org.gephi.data.attributes.api.AttributeModel; -import org.gephi.data.attributes.api.AttributeOrigin; -import org.gephi.data.attributes.api.AttributeType; +import java.util.ArrayList; +import java.util.List; +import java.util.Set; +import org.gephi.filters.FilterThread.PropertyModifier; import org.gephi.filters.api.FilterController; import org.gephi.filters.api.FilterModel; import org.gephi.filters.api.PropertyExecutor; import org.gephi.filters.api.Query; import org.gephi.filters.api.Range; -import org.gephi.filters.FilterThread.PropertyModifier; -import org.gephi.filters.spi.*; +import org.gephi.filters.spi.EdgeFilter; +import org.gephi.filters.spi.ElementFilter; +import org.gephi.filters.spi.Filter; +import org.gephi.filters.spi.FilterBuilder; +import org.gephi.filters.spi.FilterProperty; +import org.gephi.filters.spi.NodeFilter; +import org.gephi.filters.spi.Operator; +import org.gephi.graph.api.Column; import org.gephi.graph.api.Edge; import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphController; import org.gephi.graph.api.GraphModel; import org.gephi.graph.api.GraphView; -import org.gephi.graph.api.HierarchicalGraph; import org.gephi.graph.api.Node; +import org.gephi.graph.api.Origin; import org.gephi.project.api.ProjectController; -import org.gephi.utils.progress.Progress; -import org.gephi.utils.progress.ProgressTicket; -import org.gephi.utils.progress.ProgressTicketProvider; import org.gephi.project.api.Workspace; import org.gephi.project.api.WorkspaceInformation; import org.gephi.project.api.WorkspaceListener; +import org.gephi.project.spi.Controller; +import org.gephi.utils.progress.Progress; +import org.gephi.utils.progress.ProgressTicket; +import org.gephi.utils.progress.ProgressTicketProvider; import org.gephi.visualization.api.VisualizationController; import org.openide.util.Lookup; +import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; import org.openide.util.lookup.ServiceProviders; /** - * * @author Mathieu Bastian */ @ServiceProviders({ @ServiceProvider(service = FilterController.class), + @ServiceProvider(service = Controller.class), @ServiceProvider(service = PropertyExecutor.class)}) -public class FilterControllerImpl implements FilterController, PropertyExecutor { +public class FilterControllerImpl implements FilterController, PropertyExecutor, Controller { - private FilterModelImpl model; public FilterControllerImpl() { //Register range editor PropertyEditorManager.registerEditor(Range.class, RangePropertyEditor.class); - PropertyEditorManager.registerEditor(AttributeColumn.class, AttributeColumnPropertyEditor.class); + PropertyEditorManager.registerEditor(Column.class, AttributeColumnPropertyEditor.class); + PropertyEditorManager.registerEditor(Set.class, GenericPropertyEditor.class); + PropertyEditorManager.registerEditor(Number.class, GenericPropertyEditor.class); //Model management ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); pc.addWorkspaceListener(new WorkspaceListener() { + @Override public void initialize(Workspace workspace) { - workspace.add(new FilterModelImpl(workspace)); } + @Override public void select(Workspace workspace) { - model = (FilterModelImpl) workspace.getLookup().lookup(FilterModel.class); - if (model == null) { - model = new FilterModelImpl(workspace); - workspace.add(model); - } } + @Override public void unselect(Workspace workspace) { } + @Override public void close(Workspace workspace) { FilterModelImpl m = (FilterModelImpl) workspace.getLookup().lookup(FilterModel.class); if (m != null) { + if (m.getCurrentResult() != null && m.getGraphModel() != null) { + m.getGraphModel().destroyView(m.getCurrentResult()); + m.setCurrentResult(null); + } m.destroy(); } } + @Override public void disable() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getModel(); - if (model != null && model.getCurrentResult() != null && graphModel != null) { - graphModel.destroyView(model.getCurrentResult()); - model.setCurrentResult(null); - } - model = null; } }); - if (pc.getCurrentWorkspace() != null) { - Workspace workspace = pc.getCurrentWorkspace(); - model = (FilterModelImpl) workspace.getLookup().lookup(FilterModel.class); - if (model == null) { - model = new FilterModelImpl(workspace); - workspace.add(model); - } + } + + @Override + public FilterModelImpl newModel(Workspace workspace) { + return new FilterModelImpl(workspace); + } + + @Override + public Class getModelClass() { + return FilterModelImpl.class; + } + + @Override + public FilterModelImpl getModel(Workspace workspace) { + return Controller.super.getModel(workspace); + } + + @Override + public FilterModelImpl getModel() { + return Controller.super.getModel(); + } + + @Override + public Query createQuery(FilterBuilder builder) { + Filter filter = builder.getFilter(getModel().getWorkspace()); + if (filter instanceof Operator) { + return new OperatorQueryImpl((Operator) filter); } + return new FilterQueryImpl(builder, filter); } + @Override public Query createQuery(Filter filter) { if (filter instanceof Operator) { return new OperatorQueryImpl((Operator) filter); } - return new FilterQueryImpl(filter); + return new FilterQueryImpl(null, filter); } + @Override public void add(Query query) { + FilterModelImpl model = getModel(); + AbstractQueryImpl absQuery = ((AbstractQueryImpl) query); absQuery = absQuery.getRoot(); if (!model.hasQuery(absQuery)) { model.addFirst(absQuery); //Init filters with default graph - Graph graph = null; - if (model != null && model.getGraphModel() != null) { + Graph graph; + if (model.getGraphModel() != null) { graph = model.getGraphModel().getGraph(); } else { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getModel(); + GraphModel graphModel = + Lookup.getDefault().lookup(GraphController.class).getGraphModel(model.getWorkspace()); graph = graphModel.getGraph(); } for (Query q : query.getDescendantsAndSelf()) { Filter filter = q.getFilter(); - if (filter instanceof NodeFilter || filter instanceof EdgeFilter || filter instanceof AttributableFilter) { + if (filter instanceof NodeFilter || filter instanceof EdgeFilter || filter instanceof ElementFilter) { FilterProcessor filterProcessor = new FilterProcessor(); filterProcessor.init(filter, graph); } @@ -166,7 +198,9 @@ public void add(Query query) { } } + @Override public void remove(Query query) { + FilterModelImpl model = getModel(); if (model.getCurrentQuery() == query) { if (model.isSelecting()) { selectVisible(null); @@ -178,47 +212,62 @@ public void remove(Query query) { model.remove(query); } + @Override public void rename(Query query, String name) { + FilterModelImpl model = getModel(); model.rename(query, name); } + @Override public void setSubQuery(Query query, Query subQuery) { + FilterModelImpl model = getModel(); //Init subquery when new filter if (subQuery.getParent() == null && subQuery != model.getCurrentQuery()) { - Graph graph = null; + Graph graph; if (model != null && model.getGraphModel() != null) { graph = model.getGraphModel().getGraph(); } else { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getModel(); + GraphModel graphModel = + Lookup.getDefault().lookup(GraphController.class).getGraphModel(model.getWorkspace()); graph = graphModel.getGraph(); } Filter filter = subQuery.getFilter(); - if (filter instanceof NodeFilter || filter instanceof EdgeFilter || filter instanceof AttributableFilter) { + if (filter instanceof NodeFilter || filter instanceof EdgeFilter || filter instanceof ElementFilter) { FilterProcessor filterProcessor = new FilterProcessor(); filterProcessor.init(filter, graph); } } - + model.setSubQuery(query, subQuery); } + @Override public void removeSubQuery(Query query, Query parent) { - model.removeSubQuery(query, parent); + getModel().removeSubQuery(query, parent); } + @Override public void filterVisible(Query query) { - if (query != null && model.getCurrentQuery() == query && model.isFiltering()) { + FilterModelImpl model = getModel(); + // Skip only if the active FilterThread was actually started for this + // query. Checking model.getCurrentQuery() alone is unreliable: when a + // new query is added, FilterModelImpl.addFirst() updates currentQuery + // before the UI has had a chance to start a new FilterThread for it, + // which previously caused the new query to never be filtered. + FilterThread currentThread = model.getFilterThread(); + if (query != null && model.isFiltering() && currentThread != null + && currentThread.getInitialQuery() == query) { return; } model.setFiltering(query != null); model.setCurrentQuery(query); - if (model.getFilterThread() != null) { - model.getFilterThread().setRunning(false); + if (currentThread != null) { + currentThread.setRunning(false); model.setFilterThread(null); } if (query != null) { - FilterThread filterThread = new FilterThread(model); + FilterThread filterThread = new FilterThread(model, (AbstractQueryImpl) query); model.setFilterThread(filterThread); filterThread.setRootQuery((AbstractQueryImpl) query); filterThread.start(); @@ -231,22 +280,30 @@ public void filterVisible(Query query) { } } + @Override public GraphView filter(Query query) { + FilterModelImpl model = getModel(); FilterProcessor processor = new FilterProcessor(); - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getModel(); + GraphModel graphModel = model.getGraphModel(); Graph result = processor.process((AbstractQueryImpl) query, graphModel); return result.getView(); } + @Override public void selectVisible(Query query) { - if (query != null && model.getCurrentQuery() == query && model.isSelecting()) { + FilterModelImpl model = getModel(); + // Same rationale as filterVisible: only skip when an active FilterThread + // was actually started for this query. + FilterThread currentThread = model.getFilterThread(); + if (query != null && model.isSelecting() && currentThread != null + && currentThread.getInitialQuery() == query) { return; } model.setSelecting(query != null); model.setCurrentQuery(query); - if (model.getFilterThread() != null) { - model.getFilterThread().setRunning(false); + if (currentThread != null) { + currentThread.setRunning(false); model.setFilterThread(null); } @@ -257,80 +314,103 @@ public void selectVisible(Query query) { } if (query != null) { - FilterThread filterThread = new FilterThread(model); + FilterThread filterThread = new FilterThread(model, (AbstractQueryImpl) query); model.setFilterThread(filterThread); filterThread.setRootQuery((AbstractQueryImpl) query); filterThread.start(); } else { VisualizationController visController = Lookup.getDefault().lookup(VisualizationController.class); if (visController != null) { - visController.selectNodes(null); + visController.resetSelection(); } } } + @Override public void exportToColumn(String title, Query query) { - HierarchicalGraph result; + FilterModelImpl model = getModel(); + Graph result; if (model.getCurrentQuery() == query) { GraphView view = model.getCurrentResult(); if (view == null) { return; } - result = model.getGraphModel().getHierarchicalGraph(view); + result = model.getGraphModel().getGraph(view); } else { FilterProcessor processor = new FilterProcessor(); - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getModel(); - result = (HierarchicalGraph) processor.process((AbstractQueryImpl) query, graphModel); + GraphModel graphModel = model.getGraphModel(); + result = processor.process((AbstractQueryImpl) query, graphModel); } - AttributeModel am = Lookup.getDefault().lookup(AttributeController.class).getModel(); - AttributeColumn nodeCol = am.getNodeTable().getColumn("filter_" + title); + Column nodeCol = result.getModel().getNodeTable().getColumn("filter_" + title); if (nodeCol == null) { - nodeCol = am.getNodeTable().addColumn("filter_" + title, title, AttributeType.BOOLEAN, AttributeOrigin.COMPUTED, Boolean.FALSE); + nodeCol = result.getModel().getNodeTable() + .addColumn("filter_" + title, title, Boolean.class, Origin.DATA, Boolean.FALSE, true); } - AttributeColumn edgeCol = am.getEdgeTable().getColumn("filter_" + title); + Column edgeCol = result.getModel().getEdgeTable().getColumn("filter_" + title); if (edgeCol == null) { - edgeCol = am.getEdgeTable().addColumn("filter_" + title, title, AttributeType.BOOLEAN, AttributeOrigin.COMPUTED, Boolean.FALSE); - } - result.readLock(); - for (Node n : result.getNodes()) { - n.getNodeData().getAttributes().setValue(nodeCol.getIndex(), Boolean.TRUE); + edgeCol = result.getModel().getEdgeTable() + .addColumn("filter_" + title, title, Boolean.class, Origin.DATA, Boolean.FALSE, true); } - for (Edge e : result.getEdgesAndMetaEdges()) { - e.getEdgeData().getAttributes().setValue(edgeCol.getIndex(), Boolean.TRUE); + + result.writeLock(); + try { + for (Node n : result.getNodes()) { + n.setAttribute(nodeCol, Boolean.TRUE); + } + for (Edge e : result.getEdges()) { + e.setAttribute(edgeCol, Boolean.TRUE); + } + } finally { + result.writeUnlock(); + result.readUnlockAll(); } - result.readUnlock(); //StatusDisplayer.getDefault().setStatusText(NbBundle.getMessage(FilterControllerImpl.class, "FilterController.exportToColumn.status", title)); } + @Override public void exportToNewWorkspace(Query query) { - HierarchicalGraph result; + FilterModelImpl model = getModel(); + Graph result; if (model.getCurrentQuery() == query) { GraphView view = model.getCurrentResult(); if (view == null) { return; } - result = model.getGraphModel().getHierarchicalGraph(view); + result = model.getGraphModel().getGraph(view); } else { FilterProcessor processor = new FilterProcessor(); - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getModel(); - result = (HierarchicalGraph) processor.process((AbstractQueryImpl) query, graphModel); + GraphModel graphModel = model.getGraphModel(); + result = processor.process((AbstractQueryImpl) query, graphModel); } - final HierarchicalGraph graphView = result; + final Graph graphView = result; new Thread(new Runnable() { + @Override public void run() { ProgressTicketProvider progressProvider = Lookup.getDefault().lookup(ProgressTicketProvider.class); ProgressTicket ticket = null; if (progressProvider != null) { - ticket = progressProvider.createTicket("Export to workspace", null); + String msg = + NbBundle.getMessage(FilterControllerImpl.class, "FilterController.exportToNewWorkspace.task"); + ticket = progressProvider.createTicket(msg, null); } Progress.start(ticket); ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); - Workspace newWorkspace = pc.duplicateWorkspace(pc.getCurrentWorkspace()); - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getModel(newWorkspace); - graphModel.clear(); - graphModel.pushFrom(graphView); + Workspace newWorkspace = pc.newWorkspace(pc.getCurrentProject(), graphView.getModel().getConfiguration().copy()); + GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(newWorkspace); + graphModel.bridge().copyNodes(graphView.getNodes().toArray()); + Graph graph = graphModel.getGraph(); + List edgesToRemove = new ArrayList<>(); + for (Edge edge : graph.getEdges()) { + if (!graphView.hasEdge(edge.getId())) { + edgesToRemove.add(edge); + } + } + if (!edgesToRemove.isEmpty()) { + graph.removeAllEdges(edgesToRemove); + } + Progress.finish(ticket); String workspaceName = newWorkspace.getLookup().lookup(WorkspaceInformation.class).getName(); //StatusDisplayer.getDefault().setStatusText(NbBundle.getMessage(FilterControllerImpl.class, "FilterController.exportToNewWorkspace.status", workspaceName)); @@ -338,57 +418,57 @@ public void run() { }, "Export filter to workspace").start(); } + @Override public void exportToLabelVisible(Query query) { - HierarchicalGraph result; + FilterModelImpl model = getModel(); + Graph result; if (model.getCurrentQuery() == query) { GraphView view = model.getCurrentResult(); if (view == null) { return; } - result = model.getGraphModel().getHierarchicalGraph(view); + result = model.getGraphModel().getGraph(view); } else { FilterProcessor processor = new FilterProcessor(); - result = (HierarchicalGraph) processor.process((AbstractQueryImpl) query, model.getGraphModel()); - } - HierarchicalGraph fullHGraph = model.getGraphModel().getHierarchicalGraph(); - fullHGraph.readLock(); - for (Node n : fullHGraph.getNodes()) { - boolean inView = n.getNodeData().getNode(result.getView().getViewId()) != null; - n.getNodeData().getTextData().setVisible(inView); + result = processor.process((AbstractQueryImpl) query, model.getGraphModel()); } - for (Edge e : fullHGraph.getEdgesAndMetaEdges()) { - boolean inView = result.contains(e); - e.getEdgeData().getTextData().setVisible(inView); + Graph fullGraph = model.getGraphModel().getGraph(); + + fullGraph.writeLock(); + try { + for (Node n : fullGraph.getNodes()) { + boolean inView = result.contains(n); + n.getTextProperties().setVisible(inView); + } + for (Edge e : fullGraph.getEdges()) { + boolean inView = result.contains(e); + e.getTextProperties().setVisible(inView); + } + } finally { + fullGraph.writeUnlock(); + fullGraph.readUnlockAll(); } - fullHGraph.readUnlock(); } + @Override public void setAutoRefresh(boolean autoRefresh) { + FilterModelImpl model = getModel(); if (model != null) { model.setAutoRefresh(autoRefresh); } } + @Override public void setCurrentQuery(Query query) { + FilterModelImpl model = getModel(); if (model != null) { model.setCurrentQuery(query); } } - public FilterModel getModel() { - return model; - } - - public synchronized FilterModel getModel(Workspace workspace) { - FilterModel filterModel = workspace.getLookup().lookup(FilterModel.class); - if (filterModel == null) { - filterModel = new FilterModelImpl(workspace); - workspace.add(filterModel); - } - return filterModel; - } - + @Override public void setValue(FilterProperty property, Object value, Callback callback) { + FilterModelImpl model = getModel(); if (model != null) { Query query = model.getQuery(property.getFilter()); if (query == null) { @@ -396,7 +476,7 @@ public void setValue(FilterProperty property, Object value, Callback callback) { return; } AbstractQueryImpl rootQuery = ((AbstractQueryImpl) query).getRoot(); - FilterThread filterThread = null; + FilterThread filterThread; if ((filterThread = model.getFilterThread()) != null && model.getCurrentQuery() == rootQuery) { if (Thread.currentThread().equals(filterThread)) { //Called inside of the thread, in init for instance. Update normally. diff --git a/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterLibraryImpl.java b/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterLibraryImpl.java index 96e2a1623b..f1e36293e1 100644 --- a/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterLibraryImpl.java +++ b/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterLibraryImpl.java @@ -39,34 +39,34 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters; import java.util.HashMap; import java.util.Map; import org.gephi.filters.api.FilterLibrary; import org.gephi.filters.api.Query; -import org.gephi.filters.spi.Category; import org.gephi.filters.spi.CategoryBuilder; import org.gephi.filters.spi.Filter; import org.gephi.filters.spi.FilterBuilder; import org.gephi.filters.spi.FilterLibraryMask; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.GraphModel; +import org.gephi.project.api.Workspace; import org.openide.util.Lookup; import org.openide.util.lookup.AbstractLookup; import org.openide.util.lookup.InstanceContent; /** - * * @author Mathieu Bastian */ public class FilterLibraryImpl implements FilterLibrary { - private AbstractLookup lookup; - private InstanceContent content; - private Map, FilterBuilder> buildersMap; + private final Workspace workspace; + private final AbstractLookup lookup; + private final InstanceContent content; + private final Map, FilterBuilder> buildersMap; - public FilterLibraryImpl() { + public FilterLibraryImpl(Workspace workspace) { + this.workspace = workspace; content = new InstanceContent(); lookup = new AbstractLookup(content); @@ -82,23 +82,23 @@ public FilterLibraryImpl() { content.add(catBuilder); } - content.add(new HierarchicalGraphMask()); + buildersMap = new HashMap<>(); } private void buildBuildersMap() { - buildersMap = new HashMap, FilterBuilder>(); + for (FilterBuilder builder : lookup.lookupAll(FilterBuilder.class)) { try { - Filter f = builder.getFilter(); + Filter f = builder.getFilter(workspace); buildersMap.put(f.getClass(), builder); builder.destroy(f); } catch (Exception e) { } } for (CategoryBuilder catBuilder : Lookup.getDefault().lookupAll(CategoryBuilder.class)) { - for (FilterBuilder builder : catBuilder.getBuilders()) { + for (FilterBuilder builder : catBuilder.getBuilders(workspace)) { try { - Filter f = builder.getFilter(); + Filter f = builder.getFilter(workspace); buildersMap.put(f.getClass(), builder); builder.destroy(f); } catch (Exception e) { @@ -107,33 +107,33 @@ private void buildBuildersMap() { } } + @Override public Lookup getLookup() { return lookup; } + @Override public void addBuilder(FilterBuilder builder) { content.add(builder); } + @Override public void removeBuilder(FilterBuilder builder) { content.remove(builder); } + @Override public void registerMask(FilterLibraryMask mask) { content.add(mask); } + @Override public void unregisterMask(FilterLibraryMask mask) { content.remove(mask); } + @Override public FilterBuilder getBuilder(Filter filter) { - if (buildersMap == null) { - buildBuildersMap(); - } - if (buildersMap.get(filter.getClass()) != null) { - return buildersMap.get(filter.getClass()); - } buildBuildersMap(); if (buildersMap.get(filter.getClass()) != null) { return buildersMap.get(filter.getClass()); @@ -141,23 +141,13 @@ public FilterBuilder getBuilder(Filter filter) { return null; } + @Override public void saveQuery(Query query) { content.add(query); } + @Override public void deleteQuery(Query query) { content.remove(query); } - - private static class HierarchicalGraphMask implements FilterLibraryMask { - - public Category getCategory() { - return FilterLibrary.HIERARCHY; - } - - public boolean isValid() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getModel(); - return graphModel.isHierarchical(); - } - } } diff --git a/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterModelImpl.java b/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterModelImpl.java index cda8e695ae..5b52663a12 100644 --- a/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterModelImpl.java +++ b/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterModelImpl.java @@ -39,9 +39,11 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters; import java.util.ArrayList; +import java.util.Arrays; import java.util.LinkedList; import java.util.List; import javax.swing.event.ChangeEvent; @@ -55,41 +57,45 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.graph.api.GraphModel; import org.gephi.graph.api.GraphView; import org.gephi.project.api.Workspace; +import org.gephi.project.spi.Model; import org.openide.util.Lookup; /** - * * @author Mathieu Bastian */ -public class FilterModelImpl implements FilterModel { +public class FilterModelImpl implements FilterModel, Model { - private FilterLibraryImpl filterLibraryImpl; - private LinkedList queries; + private final FilterLibraryImpl filterLibraryImpl; + private final LinkedList queries; + private final GraphModel graphModel; + private final Workspace workspace; + private final FilterAutoRefreshor autoRefreshor; private FilterThread filterThread; - private GraphModel graphModel; private Query currentQuery; private boolean filtering; private boolean selecting; private GraphView currentResult; private boolean autoRefresh; - private FilterAutoRefreshor autoRefreshor; //Listeners - private List listeners; + private final List listeners; public FilterModelImpl(Workspace workspace) { - filterLibraryImpl = new FilterLibraryImpl(); - queries = new LinkedList(); - listeners = new ArrayList(); + this.workspace = workspace; + filterLibraryImpl = new FilterLibraryImpl(workspace); + queries = new LinkedList<>(); + listeners = new ArrayList<>(); autoRefresh = true; - graphModel = Lookup.getDefault().lookup(GraphController.class).getModel(workspace); + graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(workspace); autoRefreshor = new FilterAutoRefreshor(this, graphModel); } + @Override public FilterLibrary getLibrary() { return filterLibraryImpl; } + @Override public Query[] getQueries() { return queries.toArray(new Query[0]); } @@ -104,12 +110,14 @@ public boolean hasQuery(Query query) { } public void addFirst(Query function) { + updateParameters(function); queries.addFirst(function); currentQuery = function; fireChangeEvent(); } public void addLast(Query function) { + updateParameters(function); queries.addLast(function); fireChangeEvent(); } @@ -128,15 +136,15 @@ public void remove(Query query) { } public void rename(Query query, String name) { - ((AbstractQueryImpl) query).setName(name); + query.setName(name); fireChangeEvent(); } public void setSubQuery(Query query, Query subQuery) { + updateParameters(subQuery); + //Clean - if (queries.contains(subQuery)) { - queries.remove(subQuery); - } + queries.remove(subQuery); if (subQuery.getParent() != null) { ((AbstractQueryImpl) subQuery.getParent()).removeSubQuery(subQuery); } @@ -173,14 +181,11 @@ public int getIndex(Query function) { return -1; } + @Override public boolean isFiltering() { return currentQuery != null && filtering; } - public boolean isSelecting() { - return currentQuery != null && selecting; - } - public void setFiltering(boolean filtering) { this.filtering = filtering; if (filtering) { @@ -188,6 +193,11 @@ public void setFiltering(boolean filtering) { } } + @Override + public boolean isSelecting() { + return currentQuery != null && selecting; + } + public void setSelecting(boolean selecting) { this.selecting = selecting; if (selecting) { @@ -195,6 +205,7 @@ public void setSelecting(boolean selecting) { } } + @Override public boolean isAutoRefresh() { return autoRefresh; } @@ -209,6 +220,7 @@ public void setAutoRefresh(boolean autoRefresh) { } } + @Override public Query getCurrentQuery() { return currentQuery; } @@ -240,15 +252,13 @@ public Query getQuery(Filter filter) { } public Query[] getAllQueries() { - List result = new ArrayList(); - LinkedList stack = new LinkedList(); + List result = new ArrayList<>(); + LinkedList stack = new LinkedList<>(); stack.addAll(queries); while (!stack.isEmpty()) { Query q = stack.pop(); result.add(q); - for (Query child : q.getChildren()) { - stack.add(child); - } + stack.addAll(Arrays.asList(q.getChildren())); } return result.toArray(new Query[0]); } @@ -257,12 +267,16 @@ public FilterThread getFilterThread() { return filterThread; } + public void setFilterThread(FilterThread filterThread) { + this.filterThread = filterThread; + } + public FilterAutoRefreshor getAutoRefreshor() { return autoRefreshor; } - public void setFilterThread(FilterThread filterThread) { - this.filterThread = filterThread; + public GraphView getCurrentResult() { + return currentResult; } public void setCurrentResult(GraphView currentResult) { @@ -274,21 +288,22 @@ public void setCurrentResult(GraphView currentResult) { } } - public GraphView getCurrentResult() { - return currentResult; - } - public GraphModel getGraphModel() { return graphModel; } + @Override + public Workspace getWorkspace() { + return workspace; + } + public void destroy() { if (filterThread != null) { filterThread.setRunning(false); } autoRefreshor.setRunning(false); currentResult = null; - listeners = null; + listeners.clear(); for (Query q : queries) { destroyQuery(q); } @@ -299,8 +314,8 @@ private void destroyQuery(Query query) { AbstractQueryImpl absQuery = (AbstractQueryImpl) query; for (Query q : absQuery.getDescendantsAndSelf()) { if (q instanceof FilterQueryImpl) { - Filter f = ((FilterQueryImpl) q).getFilter(); - FilterBuilder builder = filterLibraryImpl.getBuilder(f); + Filter f = q.getFilter(); + FilterBuilder builder = q.getBuilder(); if (builder != null) { builder.destroy(f); } @@ -310,16 +325,16 @@ private void destroyQuery(Query query) { } //EVENTS + @Override public void addChangeListener(ChangeListener listener) { if (!listeners.contains(listener)) { listeners.add(listener); } } + @Override public void removeChangeListener(ChangeListener listener) { - if (listeners != null) { - listeners.remove(listener); - } + listeners.remove(listener); } private void fireChangeEvent() { diff --git a/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterModelPersistenceProvider.java b/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterModelPersistenceProvider.java index 9f97671f0a..0a441fa1c4 100644 --- a/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterModelPersistenceProvider.java +++ b/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterModelPersistenceProvider.java @@ -39,88 +39,101 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters; -import java.beans.PropertyEditor; -import java.beans.PropertyEditorManager; import java.util.HashMap; import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import javax.xml.stream.XMLStreamWriter; import javax.xml.stream.events.XMLEvent; -import org.gephi.filters.api.FilterController; import org.gephi.filters.api.Query; -import org.gephi.filters.spi.*; +import org.gephi.filters.spi.CategoryBuilder; +import org.gephi.filters.spi.EdgeFilter; +import org.gephi.filters.spi.ElementFilter; +import org.gephi.filters.spi.Filter; +import org.gephi.filters.spi.FilterBuilder; +import org.gephi.filters.spi.FilterProperty; +import org.gephi.filters.spi.NodeFilter; +import org.gephi.filters.spi.Operator; import org.gephi.graph.api.Graph; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.GraphModel; import org.gephi.project.api.Workspace; import org.gephi.project.spi.WorkspacePersistenceProvider; +import org.gephi.project.spi.WorkspaceXMLPersistenceProvider; +import org.gephi.utils.Serialization; +import org.openide.util.Exceptions; import org.openide.util.Lookup; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = WorkspacePersistenceProvider.class) -public class FilterModelPersistenceProvider implements WorkspacePersistenceProvider { +public class FilterModelPersistenceProvider implements WorkspaceXMLPersistenceProvider { + //PERSISTENCE + private int queryId = 0; + + @Override public void writeXML(XMLStreamWriter writer, Workspace workspace) { FilterModelImpl filterModel = workspace.getLookup().lookup(FilterModelImpl.class); if (filterModel != null) { - this.model = filterModel; try { - writeXML(writer); + writeXML(writer, filterModel); } catch (XMLStreamException ex) { - this.model = null; throw new RuntimeException(ex); } } - this.model = null; } + @Override public void readXML(XMLStreamReader reader, Workspace workspace) { FilterModelImpl filterModel = workspace.getLookup().lookup(FilterModelImpl.class); if (filterModel == null) { filterModel = new FilterModelImpl(workspace); workspace.add(filterModel); } - this.model = filterModel; try { - readXML(reader); + readXML(reader, filterModel); } catch (XMLStreamException ex) { - this.model = null; throw new RuntimeException(ex); } - this.model = null; } + @Override public String getIdentifier() { return "filtermodel"; } - //PERSISTENCE - private int queryId = 0; - private FilterModelImpl model; - public void writeXML(XMLStreamWriter writer) throws XMLStreamException { - writer.writeStartElement("filtermodel"); - writer.writeAttribute("autorefresh", String.valueOf(model.isAutoRefresh())); + public void writeXML(XMLStreamWriter writer, FilterModelImpl model) throws XMLStreamException { + writer.writeStartElement("autorefresh"); + writer.writeAttribute("value", String.valueOf(model.isAutoRefresh())); + writer.writeEndElement(); //Queries writer.writeStartElement("queries"); queryId = 0; for (Query query : model.getQueries()) { - writeQuery(writer, query, -1); + writeQuery("query", writer, model, query, -1); } writer.writeEndElement(); + //Saved queries + writer.writeStartElement("savedqueries"); + for (Query query : model.getLibrary().getLookup().lookupAll(Query.class)) { + writeQuery("savedquery", writer, model, query, -1); + } writer.writeEndElement(); } - private void writeQuery(XMLStreamWriter writer, Query query, int parentId) throws XMLStreamException { - writer.writeStartElement("query"); + private void writeQuery(String code, XMLStreamWriter writer, FilterModelImpl model, Query query, int parentId) + throws XMLStreamException { + Serialization serialization = new Serialization(model.getGraphModel()); + + writer.writeStartElement(code); int id = queryId++; writer.writeAttribute("id", String.valueOf(id)); if (parentId != -1) { @@ -130,62 +143,57 @@ private void writeQuery(XMLStreamWriter writer, Query query, int parentId) throw FilterBuilder builder = model.getLibrary().getBuilder(filter); writer.writeAttribute("builder", builder.getClass().getName()); writer.writeAttribute("filter", filter.getClass().getName()); + if (query.getName() != null) { + writer.writeAttribute("name", query.getName()); + } //Params for (int i = 0; i < query.getPropertiesCount(); i++) { FilterProperty prop = query.getFilter().getProperties()[i]; - writeParameter(writer, i, prop); + writeParameter(writer, i, prop, serialization); } writer.writeEndElement(); for (Query child : query.getChildren()) { - writeQuery(writer, child, id); + writeQuery(code, writer, model, child, id); } } - private void writeParameter(XMLStreamWriter writer, int index, FilterProperty property) { + private void writeParameter(XMLStreamWriter writer, int index, FilterProperty property, + Serialization serialization) { try { - PropertyEditor editor = property.getPropertyEditor(); - if (editor == null) { - editor = PropertyEditorManager.findEditor(property.getValueType()); - } - if (editor == null) { - return; - } - Object val = property.getValue(); - editor.setValue(val); writer.writeStartElement("parameter"); writer.writeAttribute("index", String.valueOf(index)); - writer.writeCharacters(editor.getAsText()); + writer.writeCharacters(serialization.toText(property.getValue(), property.getValueType())); writer.writeEndElement(); } catch (Exception e) { - e.printStackTrace(); + Exceptions.printStackTrace(e); } } - public void readXML(XMLStreamReader reader) throws XMLStreamException { - String autofresh = reader.getAttributeValue(null, "autorefresh"); - if (autofresh != null && !autofresh.isEmpty()) { - model.setAutoRefresh(Boolean.parseBoolean(autofresh)); - } + public void readXML(XMLStreamReader reader, FilterModelImpl model) throws XMLStreamException { + Serialization serialization = new Serialization(model.getGraphModel()); - Map idMap = new HashMap(); + Map idMap = new HashMap<>(); boolean end = false; while (reader.hasNext() && !end) { Integer eventType = reader.next(); if (eventType.equals(XMLEvent.START_ELEMENT)) { String name = reader.getLocalName(); - if ("query".equalsIgnoreCase(name)) { + if ("autorefresh".equalsIgnoreCase(name)) { + String val = reader.getAttributeValue(null, "value"); + model.setAutoRefresh(Boolean.parseBoolean(val)); + } else if ("query".equalsIgnoreCase(name)) { String id = reader.getAttributeValue(null, "id"); String parent = reader.getAttributeValue(null, "parent"); - Query query = readQuery(reader); + Query query = readQuery(reader, model, serialization); if (query != null) { idMap.put(Integer.parseInt(id), query); if (parent != null) { int parentId = Integer.parseInt(parent); Query parentQuery = idMap.get(parentId); - + //A plugin filter may be missing, or the parent filter could not be deserialized. //For example a partition filter, which depends on partitions, and partitions are not serialized if (parentQuery != null) { @@ -196,6 +204,24 @@ public void readXML(XMLStreamReader reader) throws XMLStreamException { model.addFirst(query); } } + } else if ("savedquery".equalsIgnoreCase(name)) { + String id = reader.getAttributeValue(null, "id"); + String parent = reader.getAttributeValue(null, "parent"); + Query query = readQuery(reader, model, serialization); + if (query != null) { + idMap.put(Integer.parseInt(id), query); + if (parent != null) { + int parentId = Integer.parseInt(parent); + Query parentQuery = idMap.get(parentId); + + if (parentQuery != null) { + AbstractQueryImpl impl = (AbstractQueryImpl) parentQuery; + impl.addSubQuery(query); + } + } else { + model.getLibrary().saveQuery(query); + } + } } } else if (eventType.equals(XMLStreamReader.END_ELEMENT)) { if ("filtermodel".equalsIgnoreCase(reader.getLocalName())) { @@ -205,18 +231,13 @@ public void readXML(XMLStreamReader reader) throws XMLStreamException { } //Init filters - Graph graph = null; - if (model != null && model.getGraphModel() != null) { - graph = model.getGraphModel().getGraph(); - } else { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getModel(); - graph = graphModel.getGraph(); - } + Graph graph; + graph = model.getGraphModel().getGraph(); for (Query rootQuery : model.getQueries()) { for (Query q : rootQuery.getDescendantsAndSelf()) { Filter filter = q.getFilter(); - if (filter instanceof NodeFilter || filter instanceof EdgeFilter || filter instanceof AttributableFilter) { + if (filter instanceof NodeFilter || filter instanceof EdgeFilter || filter instanceof ElementFilter) { FilterProcessor filterProcessor = new FilterProcessor(); filterProcessor.init(filter, graph); } @@ -224,14 +245,16 @@ public void readXML(XMLStreamReader reader) throws XMLStreamException { } } - private Query readQuery(XMLStreamReader reader) throws XMLStreamException { + private Query readQuery(XMLStreamReader reader, FilterModelImpl model, Serialization serialization) + throws XMLStreamException { String builderClassName = reader.getAttributeValue(null, "builder"); String filterClassName = reader.getAttributeValue(null, "filter"); + String queryName = reader.getAttributeValue(null, "name"); FilterBuilder builder = null; for (FilterBuilder fb : model.getLibrary().getLookup().lookupAll(FilterBuilder.class)) { if (fb.getClass().getName().equals(builderClassName)) { if (filterClassName != null) { - if (fb.getFilter().getClass().getName().equals(filterClassName)) { + if (fb.getFilter(model.getWorkspace()).getClass().getName().equals(filterClassName)) { builder = fb; break; } @@ -241,12 +264,13 @@ private Query readQuery(XMLStreamReader reader) throws XMLStreamException { } } } + if (builder == null) { for (CategoryBuilder catBuilder : Lookup.getDefault().lookupAll(CategoryBuilder.class)) { - for (FilterBuilder fb : catBuilder.getBuilders()) { + for (FilterBuilder fb : catBuilder.getBuilders(model.getWorkspace())) { if (fb.getClass().getName().equals(builderClassName)) { if (filterClassName != null) { - if (fb.getFilter().getClass().getName().equals(filterClassName)) { + if (fb.getFilter(model.getWorkspace()).getClass().getName().equals(filterClassName)) { builder = fb; break; } @@ -261,11 +285,20 @@ private Query readQuery(XMLStreamReader reader) throws XMLStreamException { if (builder != null) { //Create filter - Filter filter = builder.getFilter(); - FilterController fc = Lookup.getDefault().lookup(FilterController.class); - Query query = fc.createQuery(filter); + Filter filter = builder.getFilter(model.getWorkspace()); + Query query; + if (filter instanceof Operator) { + query = new OperatorQueryImpl((Operator) filter); + } else { + query = new FilterQueryImpl(builder, filter); + } + + if (queryName != null) { + query.setName(queryName); + } FilterProperty property = null; + StringBuilder textBuffer = new StringBuilder(); boolean end = false; while (reader.hasNext() && !end) { Integer eventType = reader.next(); @@ -273,24 +306,31 @@ private Query readQuery(XMLStreamReader reader) throws XMLStreamException { String name = reader.getLocalName(); if ("parameter".equalsIgnoreCase(name)) { int index = Integer.parseInt(reader.getAttributeValue(null, "index")); - property = query.getFilter().getProperties()[index]; + FilterProperty[] properties = query.getFilter().getProperties(); + if (index < 0 || index >= properties.length) { + Logger.getLogger(FilterModelPersistenceProvider.class.getName()).log( + Level.WARNING, + "Skipping filter parameter at index {0}: out of bounds for filter ''{1}'' with {2} properties", + new Object[]{index, query.getFilter().getClass().getName(), properties.length}); + property = null; + } else { + property = properties[index]; + } + textBuffer.setLength(0); } } else if (eventType.equals(XMLStreamReader.CHARACTERS) && property != null) { - try { - PropertyEditor editor = property.getPropertyEditor(); - if (editor == null) { - editor = PropertyEditorManager.findEditor(property.getValueType()); - } - if (editor != null) { - String textValue = reader.getText(); - editor.setAsText(textValue); - property.setValue(editor.getValue()); + textBuffer.append(reader.getText()); + } else if (eventType.equals(XMLStreamReader.END_ELEMENT)) { + if (property != null && textBuffer.length() > 0) { + try { + Object value = serialization.fromText(textBuffer.toString(), property.getValueType()); + property.setValue(value); model.updateParameters(query); + } catch (Exception e) { + Exceptions.printStackTrace(e); } - } catch (Exception e) { - e.printStackTrace(); + textBuffer.setLength(0); } - } else if (eventType.equals(XMLStreamReader.END_ELEMENT)) { property = null; if ("query".equalsIgnoreCase(reader.getLocalName())) { end = true; diff --git a/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterProcessor.java b/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterProcessor.java index 0cbe580b38..9c131ddcb8 100644 --- a/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterProcessor.java +++ b/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterProcessor.java @@ -39,178 +39,143 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import org.gephi.filters.api.Range; -import org.gephi.filters.spi.*; -import org.gephi.graph.api.*; +import org.gephi.filters.spi.ComplexFilter; +import org.gephi.filters.spi.EdgeFilter; +import org.gephi.filters.spi.ElementFilter; +import org.gephi.filters.spi.Filter; +import org.gephi.filters.spi.NodeFilter; +import org.gephi.filters.spi.Operator; +import org.gephi.filters.spi.RangeFilter; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.GraphView; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.Subgraph; /** - * * @author Mathieu Bastian */ public class FilterProcessor { public Graph process(AbstractQueryImpl query, GraphModel graphModel) { - List views = new ArrayList(); - query = simplifyQuery(query); - AbstractQueryImpl[] tree = getTree(query, true); - for (int i = 0; i < tree.length; i++) { - AbstractQueryImpl q = tree[tree.length - i - 1]; - Graph[] input = new Graph[0]; - if (q.getChildrenCount() > 0) { - input = new Graph[q.getChildrenCount()]; - for (int j = 0; j < input.length; j++) { - input[j] = q.getChildAt(j).getResult(); - } - } else { - //Leaves - GraphView newView = graphModel.newView(); - views.add(newView); - input = new Graph[]{graphModel.getGraph(newView)}; //duplicate root - } - //PROCESS - if (q instanceof OperatorQueryImpl && !((OperatorQueryImpl) q).isSimple()) { - OperatorQueryImpl operatorQuery = (OperatorQueryImpl) q; - Operator op = (Operator) operatorQuery.getFilter(); - q.setResult(op.filter(input)); - } else if (q instanceof OperatorQueryImpl && ((OperatorQueryImpl) q).isSimple()) { - OperatorQueryImpl operatorQuery = (OperatorQueryImpl) q; - Operator op = (Operator) operatorQuery.getFilter(); - GraphView newView = graphModel.newView(); - views.add(newView); - Graph newGraph = graphModel.getGraph(newView); - List filters = new ArrayList(); - for (int k = 0; k < operatorQuery.getChildrenCount(); k++) { - Filter filter = operatorQuery.getChildAt(k).getFilter(); - if (init(filter, newGraph)) { - filters.add(filter); + Graph graph = graphModel.getGraph(); + + graph.writeLock(); + try { + List views = new ArrayList<>(); + query = simplifyQuery(query); + AbstractQueryImpl[] tree = getTree(query, true); + for (int i = 0; i < tree.length; i++) { + AbstractQueryImpl q = tree[tree.length - i - 1]; + Graph[] input; + if (q.getChildrenCount() > 0) { + input = new Graph[q.getChildrenCount()]; + for (int j = 0; j < input.length; j++) { + input[j] = q.getChildAt(j).getResult(); } - } - q.setResult(op.filter(newGraph, filters.toArray(new Filter[0]))); - } else { - FilterQueryImpl filterQuery = (FilterQueryImpl) q; - Filter filter = filterQuery.getFilter(); - if (filter instanceof NodeFilter && filter instanceof EdgeFilter) { - processNodeFilter((NodeFilter) filter, input[0]); - processEdgeFilter((EdgeFilter) filter, input[0]); - q.setResult(input[0]); - } else if (filter instanceof NodeFilter) { - processNodeFilter((NodeFilter) filter, input[0]); - q.setResult(input[0]); - } else if (filter instanceof EdgeFilter) { - processEdgeFilter((EdgeFilter) filter, input[0]); - q.setResult(input[0]); - } else if (filter instanceof AttributableFilter) { - processAttributableFilter((AttributableFilter) filter, input[0]); - q.setResult(input[0]); - } else if (filter instanceof ComplexFilter) { - ComplexFilter cf = (ComplexFilter) filter; - q.setResult(cf.filter(input[0])); } else { - q.setResult(input[0]); //Put input as result, the filter don't do anything + //Leaves + GraphView newView = graphModel.copyView(graphModel.getGraph().getView()); + views.add(newView); + input = new Graph[] {graphModel.getGraph(newView)}; //duplicate root } - } - } - Graph finalResult = tree[0].result; - - //Destroy intermediate views - GraphView finalView = finalResult.getView(); - for (GraphView v : views) { - if (v != finalView) { - graphModel.destroyView(v); - } - } - return finalResult; - } - - private void processAttributableFilter(AttributableFilter attributableFilter, Graph graph) { - if (((AttributableFilter) attributableFilter).getType().equals(AttributableFilter.Type.NODE)) { - if (init(attributableFilter, graph)) { - List nodesToRemove = new ArrayList(); - for (Node n : graph.getNodes()) { - if (!attributableFilter.evaluate(graph, n)) { - nodesToRemove.add(n); + //PROCESS + if (q instanceof OperatorQueryImpl && !((OperatorQueryImpl) q).isSimple()) { + OperatorQueryImpl operatorQuery = (OperatorQueryImpl) q; + Operator op = (Operator) operatorQuery.getFilter(); + Subgraph[] inputSG = new Subgraph[input.length]; + for (int j = 0; j < inputSG.length; j++) { + inputSG[j] = (Subgraph) input[j]; } - } - - for (Node n : nodesToRemove) { - graph.removeNode(n); - } - attributableFilter.finish(); - } - } else { - HierarchicalGraph hgraph = (HierarchicalGraph) graph; - if (init(attributableFilter, graph)) { - List edgesToRemove = new ArrayList(); - for (Edge e : hgraph.getEdges()) { - if (!attributableFilter.evaluate(hgraph, e)) { - edgesToRemove.add(e); + q.setResult(op.filter(inputSG)); + } else if (q instanceof OperatorQueryImpl && ((OperatorQueryImpl) q).isSimple()) { + OperatorQueryImpl operatorQuery = (OperatorQueryImpl) q; + Operator op = (Operator) operatorQuery.getFilter(); + GraphView newView = graphModel.copyView(graphModel.getGraph().getView()); + views.add(newView); + Graph newGraph = graphModel.getGraph(newView); + List filters = new ArrayList<>(); + for (int k = 0; k < operatorQuery.getChildrenCount(); k++) { + Filter filter = operatorQuery.getChildAt(k).getFilter(); + if (init(filter, newGraph)) { + filters.add(filter); + } } - } - - for (Edge e : edgesToRemove) { - hgraph.removeEdge(e); - } - edgesToRemove.clear(); - - for (Edge e : hgraph.getMetaEdges()) { - if (!attributableFilter.evaluate(hgraph, e)) { - edgesToRemove.add(e); + q.setResult(op.filter(newGraph, filters.toArray(new Filter[0]))); + } else { + FilterQueryImpl filterQuery = (FilterQueryImpl) q; + Filter filter = filterQuery.getFilter(); + if (filter instanceof NodeFilter && filter instanceof EdgeFilter) { + processNodeFilter((NodeFilter) filter, input[0]); + processEdgeFilter((EdgeFilter) filter, input[0]); + q.setResult(input[0]); + } else if (filter instanceof NodeFilter) { + processNodeFilter((NodeFilter) filter, input[0]); + q.setResult(input[0]); + } else if (filter instanceof EdgeFilter) { + processEdgeFilter((EdgeFilter) filter, input[0]); + q.setResult(input[0]); + } else if (filter instanceof ComplexFilter) { + ComplexFilter cf = (ComplexFilter) filter; + q.setResult(cf.filter(input[0])); + } else { + q.setResult(input[0]); //Put input as result, the filter don't do anything } } - for (Edge e : edgesToRemove) { - hgraph.removeMetaEdge(e); - } + } + Graph finalResult = tree[0].result; - attributableFilter.finish(); + //Destroy intermediate views + GraphView finalView = finalResult.getView(); + for (GraphView v : views) { + if (v != finalView && !v.isMainView()) { + graphModel.destroyView(v); + } } + + return finalResult; + } finally { + graph.writeUnlock(); + graph.readUnlockAll(); } } private void processNodeFilter(NodeFilter nodeFilter, Graph graph) { if (init(nodeFilter, graph)) { - List nodesToRemove = new ArrayList(); + List nodesToRemove = new ArrayList<>(); for (Node n : graph.getNodes()) { if (!nodeFilter.evaluate(graph, n)) { nodesToRemove.add(n); } } - for (Node n : nodesToRemove) { - graph.removeNode(n); + if (!nodesToRemove.isEmpty()) { + graph.removeAllNodes(nodesToRemove); } nodeFilter.finish(); } } private void processEdgeFilter(EdgeFilter edgeFilter, Graph graph) { - HierarchicalGraph hgraph = (HierarchicalGraph) graph; if (init(edgeFilter, graph)) { - List edgesToRemove = new ArrayList(); - for (Edge e : hgraph.getEdges()) { - if (!edgeFilter.evaluate(hgraph, e)) { + List edgesToRemove = new ArrayList<>(); + for (Edge e : graph.getEdges()) { + if (!edgeFilter.evaluate(graph, e)) { edgesToRemove.add(e); } } - for (Edge e : edgesToRemove) { - hgraph.removeEdge(e); - } - edgesToRemove.clear(); - - for (Edge e : hgraph.getMetaEdges()) { - if (!edgeFilter.evaluate(hgraph, e)) { - edgesToRemove.add(e); - } + if (!edgesToRemove.isEmpty()) { + graph.removeAllEdges(edgesToRemove); } - for (Edge e : edgesToRemove) { - hgraph.removeMetaEdge(e); - } - edgeFilter.finish(); } } @@ -221,7 +186,9 @@ private AbstractQueryImpl simplifyQuery(AbstractQueryImpl query) { if (q instanceof OperatorQueryImpl && q.getChildrenCount() > 0) { boolean canSimplify = true; for (AbstractQueryImpl child : q.children) { - if (child.getChildrenCount() > 0 || !(child.getFilter() instanceof NodeFilter || child.getFilter() instanceof EdgeFilter || child.getFilter() instanceof AttributableFilter)) { + if (child.getChildrenCount() > 0 || + !(child.getFilter() instanceof NodeFilter || child.getFilter() instanceof EdgeFilter || + child.getFilter() instanceof ElementFilter)) { canSimplify = false; } } @@ -234,7 +201,7 @@ private AbstractQueryImpl simplifyQuery(AbstractQueryImpl query) { } private AbstractQueryImpl[] getTree(AbstractQueryImpl query, boolean ignoreSimple) { - ArrayList tree = new ArrayList(); + ArrayList tree = new ArrayList<>(); int pointer = 0; tree.add(query); while (pointer < tree.size()) { @@ -256,8 +223,6 @@ public boolean init(Filter filter, Graph graph) { res = ((NodeFilter) filter).init(graph); } else if (filter instanceof EdgeFilter) { res = ((EdgeFilter) filter).init(graph); - } else if (filter instanceof NodeFilter) { - res = ((AttributableFilter) filter).init(graph); } //Range @@ -279,45 +244,46 @@ public boolean init(Filter filter, Graph graph) { if (min == null || max == null) { newRange = null; rangeFilter.getRangeProperty().setValue(newRange); + } else if (previousRange == null) { + newRange = new Range(min, max, min, max, values); + rangeFilter.getRangeProperty().setValue(newRange); + } else if (previousRange != null && + (previousRange.getMinimum() == null || previousRange.getMaximum() == null)) { + //Opening projects + newRange = new Range(previousRange.getLowerBound(), previousRange.getUpperBound(), min, max, + previousRange.isLeftInclusive(), previousRange.isRightInclusive(), values); + rangeFilter.getRangeProperty().setValue(newRange); } else { - if (previousRange == null) { - newRange = new Range(min, max, min, max, values); - rangeFilter.getRangeProperty().setValue(newRange); - } else if(previousRange != null && (previousRange.getMinimum() == null || previousRange.getMaximum() == null)) { - //Opening projects - newRange = new Range(previousRange.getLowerBound(), previousRange.getUpperBound(), min, max, previousRange.isLeftInclusive(), previousRange.isRightInclusive(), values); - rangeFilter.getRangeProperty().setValue(newRange); - } else { - //Collect some info - boolean stickyLeft = previousRange.getMinimum().equals(previousRange.getLowerBound()); - boolean stickyRight = previousRange.getMaximum().equals(previousRange.getUpperBound()); - Number lowerBound = previousRange.getLowerBound(); - Number upperBound = previousRange.getUpperBound(); - - //The inteval grows on the right - if (stickyRight && comparator.superior(max, upperBound)) { - upperBound = max; - } + //Collect some info + boolean stickyLeft = previousRange.getMinimum().equals(previousRange.getLowerBound()); + boolean stickyRight = previousRange.getMaximum().equals(previousRange.getUpperBound()); + Number lowerBound = previousRange.getLowerBound(); + Number upperBound = previousRange.getUpperBound(); + + //The inteval grows on the right + if (stickyRight && comparator.superior(max, upperBound)) { + upperBound = max; + } - //The interval grows on the left - if (stickyLeft && comparator.inferior(min, lowerBound)) { - lowerBound = min; - } + //The interval grows on the left + if (stickyLeft && comparator.inferior(min, lowerBound)) { + lowerBound = min; + } - //The interval shrinks on the right - if (comparator.superior(upperBound, max)) { - upperBound = max; - } + //The interval shrinks on the right + if (comparator.superior(upperBound, max)) { + upperBound = max; + } - //The interval shrinks on the left - if (comparator.inferior(lowerBound, min)) { - lowerBound = min; - } + //The interval shrinks on the left + if (comparator.inferior(lowerBound, min)) { + lowerBound = min; + } - newRange = new Range(lowerBound, upperBound, min, max, previousRange.isLeftInclusive(), previousRange.isRightInclusive(), values); - if (!newRange.equals(previousRange)) { - rangeFilter.getRangeProperty().setValue(newRange); - } + newRange = new Range(lowerBound, upperBound, min, max, previousRange.isLeftInclusive(), + previousRange.isRightInclusive(), values); + if (!newRange.equals(previousRange)) { + rangeFilter.getRangeProperty().setValue(newRange); } } } @@ -345,6 +311,7 @@ public Number max(Number a, Number b) { return c > 0 ? a : b; } + @Override public int compare(Number number1, Number number2) { if (((Object) number2).getClass().equals(((Object) number1).getClass())) { if (number1 instanceof Comparable) { diff --git a/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterQueryImpl.java b/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterQueryImpl.java index 0a018b1ee6..bfa77118b3 100644 --- a/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterQueryImpl.java +++ b/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterQueryImpl.java @@ -38,24 +38,27 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.filters; import org.gephi.filters.spi.Filter; +import org.gephi.filters.spi.FilterBuilder; import org.gephi.filters.spi.FilterProperty; /** - * * @author Mathieu Bastian */ public class FilterQueryImpl extends AbstractQueryImpl { + private final FilterBuilder builder; + private final Filter filter; private Parameters[] parameters; - private Filter filter; private String name; - public FilterQueryImpl(Filter filter) { + public FilterQueryImpl(FilterBuilder filterBuilder, Filter filter) { this.filter = filter; + this.builder = filterBuilder; this.name = filter.getName(); updateParameters(); } @@ -85,26 +88,35 @@ public void setName(String name) { this.name = name; } + @Override public int getPropertiesCount() { return parameters.length; } + @Override public String getPropertyName(int index) { return parameters[index].getKey(); } + @Override public Object getPropertyValue(int index) { return parameters[index].getValue(); } + @Override public Filter getFilter() { return filter; } + @Override + public FilterBuilder getBuilder() { + return builder; + } + private class Parameters { - private int index; - private Object value; + private final int index; + private final Object value; public Parameters(int index, Object value) { this.index = index; diff --git a/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterThread.java b/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterThread.java index 1da23f8a4b..b8d65cf8c3 100644 --- a/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterThread.java +++ b/modules/FiltersImpl/src/main/java/org/gephi/filters/FilterThread.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters; import java.util.Iterator; @@ -48,7 +49,6 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.filters.api.Query; import org.gephi.filters.spi.FilterProperty; import org.gephi.graph.api.Graph; -import org.gephi.graph.api.GraphController; import org.gephi.graph.api.GraphModel; import org.gephi.graph.api.GraphView; import org.gephi.utils.progress.Progress; @@ -57,27 +57,38 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.visualization.api.VisualizationController; import org.openide.util.Exceptions; import org.openide.util.Lookup; +import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class FilterThread extends Thread { - private FilterModelImpl model; - private AtomicReference rootQuery; - ConcurrentHashMap modifiersMap; - private boolean running = true; + private final FilterModelImpl model; + private final AtomicReference rootQuery; + private final AbstractQueryImpl initialQuery; private final Object lock = new Object(); private final boolean filtering; + ConcurrentHashMap modifiersMap; + private boolean running = true; - public FilterThread(FilterModelImpl model) { - super("Filter Thread"); + public FilterThread(FilterModelImpl model, AbstractQueryImpl initialQuery) { + super("Filter Thread - " + model.getWorkspace().toString()); setDaemon(true); this.model = model; this.filtering = model.isFiltering(); - rootQuery = new AtomicReference(); - modifiersMap = new ConcurrentHashMap(); + this.initialQuery = initialQuery; + rootQuery = new AtomicReference<>(); + modifiersMap = new ConcurrentHashMap<>(); + } + + /** + * Returns the query this thread was created to filter. Unlike + * {@link #getRootQuery()}, this value is stable for the entire lifetime of + * the thread and is not consumed when the worker loop picks up the query. + */ + public AbstractQueryImpl getInitialQuery() { + return initialQuery; } @Override @@ -98,7 +109,7 @@ public void run() { return; } Query modifiedQuery = null; - for (Iterator itr = modifiersMap.values().iterator(); itr.hasNext();) { + for (Iterator itr = modifiersMap.values().iterator(); itr.hasNext(); ) { PropertyModifier pm = itr.next(); itr.remove(); pm.callback.setValue(pm.value); @@ -112,7 +123,8 @@ public void run() { ProgressTicket progressTicket = null; ProgressTicketProvider progressTicketProvider = Lookup.getDefault().lookup(ProgressTicketProvider.class); if (progressTicketProvider != null) { - progressTicket = progressTicketProvider.createTicket("Filtering", null); + String msg = NbBundle.getMessage(FilterThread.class, "FilterThread.progress.taskName", q.getName()); + progressTicket = progressTicketProvider.createTicket(msg, null); Progress.start(progressTicket); } @@ -132,8 +144,7 @@ public void run() { } //clear map Query q = null; - for (Iterator itr = modifiersMap.values().iterator(); itr.hasNext();) { - PropertyModifier pm = itr.next(); + for (PropertyModifier pm : modifiersMap.values()) { pm.callback.setValue(pm.value); q = pm.query; } @@ -145,10 +156,8 @@ public void run() { private void filter(AbstractQueryImpl query) { FilterProcessor processor = new FilterProcessor(); - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getModel(); - Graph result = processor.process((AbstractQueryImpl) query, graphModel); -// System.out.println("#Nodes: " + result.getNodeCount()); -// System.out.println("#Edges: " + result.getEdgeCount()); + GraphModel graphModel = model.getGraphModel(); + Graph result = processor.process(query, graphModel); if (running) { GraphView view = result.getView(); graphModel.setVisibleView(view); @@ -164,13 +173,12 @@ private void filter(AbstractQueryImpl query) { private void select(AbstractQueryImpl query) { FilterProcessor processor = new FilterProcessor(); - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getModel(); - Graph result = processor.process((AbstractQueryImpl) query, graphModel); -// System.out.println("#Nodes: " + result.getNodeCount()); -// System.out.println("#Edges: " + result.getEdgeCount()); + GraphModel graphModel = model.getGraphModel(); + Graph result = processor.process(query, graphModel); if (running) { VisualizationController visController = Lookup.getDefault().lookup(VisualizationController.class); if (visController != null) { + visController.resetSelection(); visController.selectNodes(result.getNodes().toArray()); visController.selectEdges(result.getEdges().toArray()); } @@ -182,6 +190,10 @@ private void select(AbstractQueryImpl query) { } } + public AbstractQueryImpl getRootQuery() { + return rootQuery.get(); + } + public void setRootQuery(AbstractQueryImpl rootQuery) { this.rootQuery.set(rootQuery); synchronized (this.lock) { @@ -189,10 +201,6 @@ public void setRootQuery(AbstractQueryImpl rootQuery) { } } - public AbstractQueryImpl getRootQuery() { - return rootQuery.get(); - } - public void setRunning(boolean running) { this.running = running; synchronized (this.lock) { diff --git a/modules/FiltersImpl/src/main/java/org/gephi/filters/GenericPropertyEditor.java b/modules/FiltersImpl/src/main/java/org/gephi/filters/GenericPropertyEditor.java new file mode 100644 index 0000000000..cded71a5d0 --- /dev/null +++ b/modules/FiltersImpl/src/main/java/org/gephi/filters/GenericPropertyEditor.java @@ -0,0 +1,127 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.filters; + +import java.beans.PropertyEditorSupport; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import org.openide.util.Exceptions; + +public class GenericPropertyEditor extends PropertyEditorSupport { + + private Object val; + + @Override + public Object getValue() { + return val; + } + + @Override + public void setValue(Object value) { + this.val = value; + } + + @Override + public String getAsText() { + if (val != null) { + ByteArrayOutputStream bos = null; + ObjectOutputStream oos = null; + //FIXME: using java serialization is a bit dangerous, change this but keep compatibility with old saved files + try { + bos = new ByteArrayOutputStream(); + oos = new ObjectOutputStream(bos); + oos.writeObject(val); + } catch (Exception e) { + Exceptions.printStackTrace(e); + } finally { + if (oos != null) { + try { + oos.close(); + } catch (IOException ex) { + } + } + if (bos != null) { + try { + bos.close(); + } catch (IOException ex) { + } + } + } + if (bos != null) { + return java.util.Base64.getEncoder().encodeToString(bos.toByteArray()); + } + } + return "null"; + } + + @Override + public void setAsText(String text) throws IllegalArgumentException { + if (!text.equals("null")) { + ByteArrayInputStream bis = null; + ObjectInputStream ois = null; + try { + bis = new ByteArrayInputStream(java.util.Base64.getMimeDecoder().decode(text)); + ois = new ObjectInputStream(bis); + val = ois.readObject(); + } catch (Exception e) { + Exceptions.printStackTrace(e); + } finally { + if (ois != null) { + try { + ois.close(); + } catch (IOException ex) { + } + } + if (bis != null) { + try { + bis.close(); + } catch (IOException ex) { + } + } + } + } + } +} diff --git a/modules/FiltersImpl/src/main/java/org/gephi/filters/OperatorQueryImpl.java b/modules/FiltersImpl/src/main/java/org/gephi/filters/OperatorQueryImpl.java index 60ca8df151..1c76337d47 100644 --- a/modules/FiltersImpl/src/main/java/org/gephi/filters/OperatorQueryImpl.java +++ b/modules/FiltersImpl/src/main/java/org/gephi/filters/OperatorQueryImpl.java @@ -38,23 +38,26 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.filters; import org.gephi.filters.spi.Filter; +import org.gephi.filters.spi.FilterBuilder; import org.gephi.filters.spi.Operator; /** - * * @author Mathieu Bastian */ public class OperatorQueryImpl extends AbstractQueryImpl { - private Operator operator; + private final Operator operator; private boolean simple = false; //Simple when children are only NodeFilter/EdgeFilter leaves + private String customName = null; + public OperatorQueryImpl(Operator predicate) { - this.operator = (Operator) predicate; + this.operator = predicate; } @Override @@ -62,35 +65,49 @@ public int getChildrenSlotsCount() { return operator.getInputCount(); } + @Override public String getName() { + if (customName != null) { + return customName; + } return operator.getName(); } @Override public void setName(String name) { + customName = name; } + @Override public int getPropertiesCount() { return 0; } + @Override public String getPropertyName(int index) { return null; } + @Override public Object getPropertyValue(int index) { return null; } + @Override public Filter getFilter() { return operator; } - public void setSimple(boolean simple) { - this.simple = simple; + @Override + public FilterBuilder getBuilder() { + return null; } public boolean isSimple() { return simple; } + + public void setSimple(boolean simple) { + this.simple = simple; + } } diff --git a/modules/FiltersImpl/src/main/java/org/gephi/filters/RangePropertyEditor.java b/modules/FiltersImpl/src/main/java/org/gephi/filters/RangePropertyEditor.java index ecaa8d8525..ef1d257db1 100644 --- a/modules/FiltersImpl/src/main/java/org/gephi/filters/RangePropertyEditor.java +++ b/modules/FiltersImpl/src/main/java/org/gephi/filters/RangePropertyEditor.java @@ -39,13 +39,13 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters; import java.beans.PropertyEditorSupport; import org.gephi.filters.api.Range; /** - * * @author Mathieu Bastian */ public class RangePropertyEditor extends PropertyEditorSupport { @@ -53,19 +53,19 @@ public class RangePropertyEditor extends PropertyEditorSupport { private Range range; @Override - public void setValue(Object value) { - this.range = (Range) value; + public Object getValue() { + return range; } @Override - public Object getValue() { - return range; + public void setValue(Object value) { + this.range = (Range) value; } @Override public String getAsText() { if (range != null) { - return range.getRangeType().getSimpleName() + " - " + range.toString(); + return range.getRangeType().getSimpleName() + " - " + range; } else { return "null"; } diff --git a/modules/FiltersImpl/src/main/nbm/manifest.mf b/modules/FiltersImpl/src/main/nbm/manifest.mf index fcda4991a5..9bfa84733f 100644 --- a/modules/FiltersImpl/src/main/nbm/manifest.mf +++ b/modules/FiltersImpl/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/filters/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi Core +OpenIDE-Module-Name: Filters Impl diff --git a/modules/FiltersImpl/src/main/nbm/module.xml b/modules/FiltersImpl/src/main/nbm/module.xml deleted file mode 100644 index 622a1837fd..0000000000 --- a/modules/FiltersImpl/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle.properties b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle.properties index 694126c413..c63a953e56 100644 --- a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle.properties +++ b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle.properties @@ -1,8 +1,7 @@ -OpenIDE-Module-Display-Category=Gephi Core -OpenIDE-Module-Name=Filters Impl OpenIDE-Module-Short-Description=Implementation of Filters API -FilterController.exportToColumn.status = The column "{0}" has been filled with the filtering result -FilterController.exportToNewWorkspace.task = "Export to workspace" -FilterController.exportToNewWorkspace.status = The workspace "{0}" has been created and filled with the filtering result +FilterController.exportToColumn.status = The column ''{0}'' has been filled with the filtering result +FilterController.exportToNewWorkspace.task = Export to workspace +FilterController.exportToNewWorkspace.status = The workspace ''{0}'' has been created and filled with the filtering result +FilterThread.progress.taskName = Filtering {0} \ No newline at end of file diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_ar.properties b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_ca.properties b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_ca.properties new file mode 100644 index 0000000000..075e0b7e09 --- /dev/null +++ b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_ca.properties @@ -0,0 +1,5 @@ +OpenIDE-Module-Short-Description=Implementation of Filters API +FilterController.exportToColumn.status=The column ''{0}'' has been filled with the filtering result +FilterController.exportToNewWorkspace.task=Exporta al banc de treball +FilterController.exportToNewWorkspace.status=The workspace ''{0}'' has been created and filled with the filtering result +FilterThread.progress.taskName=Filtering {0} diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_cs.properties b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_cs.properties index 63e83170a6..0fac08f55d 100644 --- a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_cs.properties +++ b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_cs.properties @@ -1,15 +1,7 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-29 19\:59+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Short-Description=Zaveden\u00ed API filtr\u016f - -FilterController.exportToColumn.status=Sloupec "{0}" byl vypln\u011bn v\u00fdsledkem filtrov\u00e1n\u00ed - -FilterController.exportToNewWorkspace.task="Exportovat do pracovn\u00edho prostoru" - -FilterController.exportToNewWorkspace.status=Pracovn\u00ed prostor "{0}" byl vytvo\u0159en a vypln\u011bn v\u00fdsledkem filtrov\u00e1n\u00ed +OpenIDE-Module-Short-Description=Zavedenν API filtr\u016f + +FilterController.exportToColumn.status = Sloupec "{0}" byl vypln\u011bn vύsledkem filtrovαnν +FilterController.exportToNewWorkspace.task = "Exportovat do pracovnνho prostoru" +FilterController.exportToNewWorkspace.status = Pracovnν prostor "{0}" byl vytvo\u0159en a vypln\u011bn vύsledkem filtrovαnν + +FilterThread.progress.taskName = Filtrovαnν {0} diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_de.properties b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_de.properties new file mode 100644 index 0000000000..5df9a8f905 --- /dev/null +++ b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_de.properties @@ -0,0 +1,7 @@ +OpenIDE-Module-Short-Description=Implementierung der Filters API + +FilterController.exportToColumn.status = Die Spalte "{0}" wurde mit dem Filter-Ergebnis befόllt. +FilterController.exportToNewWorkspace.task = Exportiere in Arbeitsbereich +FilterController.exportToNewWorkspace.status = Der Arbeitsbereich "{0}" wurde erzeugt und mit den Filter-Eregbnissen befόllt + +FilterThread.progress.taskName = Filtere {0} diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_el.properties b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_el.properties new file mode 100644 index 0000000000..03be728a4d --- /dev/null +++ b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_el.properties @@ -0,0 +1,7 @@ + + +FilterThread.progress.taskName=\u03A6\u03B9\u03BB\u03C4\u03C1\u03AC\u03C1\u03B9\u03C3\u03BC\u03B1 {0} +FilterController.exportToNewWorkspace.task=\u0395\u03BE\u03B1\u03B3\u03C9\u03B3\u03AE \u03C3\u03B5 \u03C7\u03CE\u03C1\u03BF \u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1\u03C2 +FilterController.exportToColumn.status=\u0397 \u03C3\u03C4\u03AE\u03BB\u03B7 "{0}" \u03AD\u03C7\u03B5\u03B9 \u03C3\u03C5\u03BC\u03C0\u03BB\u03B7\u03C1\u03C9\u03B8\u03B5\u03AF \u03BC\u03B5 \u03C4\u03B1 \u03B1\u03C0\u03BF\u03C4\u03B5\u03BB\u03AD\u03C3\u03BC\u03B1\u03C4\u03B1 \u03C4\u03BF\u03C5 \u03C6\u03B9\u03BB\u03C4\u03C1\u03B1\u03C1\u03AF\u03C3\u03BC\u03B1\u03C4\u03BF\u03C2 +FilterController.exportToNewWorkspace.status=\u039F \u03C7\u03CE\u03C1\u03BF\u03C2 \u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1\u03C2 "{0}" \u03AD\u03C7\u03B5\u03B9 \u03B4\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03B7\u03B8\u03B5\u03AF \u03BA\u03B1\u03B9 \u03C3\u03C5\u03BC\u03C0\u03BB\u03B7\u03C1\u03C9\u03B8\u03B5\u03AF \u03BC\u03B5 \u03C4\u03B1 \u03B1\u03C0\u03BF\u03C4\u03B5\u03BB\u03AD\u03C3\u03BC\u03B1\u03C4\u03B1 \u03C4\u03BF\u03C5 \u03C6\u03B9\u03BB\u03C4\u03C1\u03B1\u03C1\u03AF\u03C3\u03BC\u03B1\u03C4\u03BF\u03C2 +OpenIDE-Module-Short-Description=\u03A5\u03BB\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03C4\u03BF\u03C5 API \u03C6\u03AF\u03BB\u03C4\u03C1\u03C9\u03BD diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_es.properties b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_es.properties index 7f4797ce18..f84b62716c 100644 --- a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_es.properties +++ b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_es.properties @@ -1,15 +1,7 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:05+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Short-Description=Implementaci\u00f3n de la API de filtros - -FilterController.exportToColumn.status=La columna "{0}" ha sido rellenada con el resultado del filtrado - -FilterController.exportToNewWorkspace.task=Exportar a espacio de trabajo - -FilterController.exportToNewWorkspace.status=El espacio de trabajo "{0}" ha sido creado y rellenado con el resultado del filtrado +OpenIDE-Module-Short-Description=Implementaciσn de la API de filtros + +FilterController.exportToColumn.status = La columna "{0}" ha sido rellenada con el resultado del filtrado +FilterController.exportToNewWorkspace.task = Exportar a espacio de trabajo +FilterController.exportToNewWorkspace.status = El espacio de trabajo "{0}" ha sido creado y rellenado con el resultado del filtrado + +FilterThread.progress.taskName = Filtrando {0} diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_fr.properties b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_fr.properties index cefb2acaf8..56d53dd110 100644 --- a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_fr.properties +++ b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_fr.properties @@ -1,15 +1,7 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:05+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Impl\u00e9mentation de l'API des filtres - -FilterController.exportToColumn.status=La colonne "{0}" a \u00e9t\u00e9 remplie avec les r\u00e9sultats du filtrage. - -FilterController.exportToNewWorkspace.task=Exporter dans l'espace de travail - -FilterController.exportToNewWorkspace.status=L'espace de travail "{0}" a \u00e9t\u00e9 cr\u00e9\u00e9 et remplie avec les r\u00e9sultats du filtrage. +OpenIDE-Module-Short-Description=Implιmentation de l'API des filtres + +FilterController.exportToColumn.status = La colonne "{0}" a ιtι remplie avec les rιsultats du filtrage. +FilterController.exportToNewWorkspace.task = Exporter dans l'espace de travail +FilterController.exportToNewWorkspace.status = L'espace de travail "{0}" a ιtι crιι et remplie avec les rιsultats du filtrage. + +FilterThread.progress.taskName = Filtrage de {0} diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_he.properties b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_he.properties new file mode 100644 index 0000000000..bae8cc9405 --- /dev/null +++ b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_he.properties @@ -0,0 +1,5 @@ +OpenIDE-Module-Short-Description=Implementation of Filters API +FilterController.exportToColumn.status=The column ''{0}'' has been filled with the filtering result +FilterController.exportToNewWorkspace.task=Export to workspace +FilterController.exportToNewWorkspace.status=The workspace ''{0}'' has been created and filled with the filtering result +FilterThread.progress.taskName=Filtering {0} diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_hu.properties b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_hu.properties new file mode 100644 index 0000000000..460fb7aebe --- /dev/null +++ b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_hu.properties @@ -0,0 +1,7 @@ + + +FilterThread.progress.taskName=Sz\u0171r\u00E9s {0} +FilterController.exportToNewWorkspace.task=Export\u00E1l\u00E1s a munkater\u00FCletre +FilterController.exportToColumn.status=A(z) \u201E{0}\u201D oszlop felt\u00F6ltve a sz\u0171r\u00E9si eredm\u00E9nnyel +FilterController.exportToNewWorkspace.status=A(z) ''{0}'' munkater\u00FCletet l\u00E9trehoztuk, \u00E9s felt\u00F6lt\u00F6tt\u00FCk a sz\u0171r\u00E9si eredm\u00E9nnyel +OpenIDE-Module-Short-Description=A z API sz\u0171r\u0151 megval\u00F3s\u00EDt\u00E1sa diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_it.properties b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_it.properties new file mode 100644 index 0000000000..bae8cc9405 --- /dev/null +++ b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_it.properties @@ -0,0 +1,5 @@ +OpenIDE-Module-Short-Description=Implementation of Filters API +FilterController.exportToColumn.status=The column ''{0}'' has been filled with the filtering result +FilterController.exportToNewWorkspace.task=Export to workspace +FilterController.exportToNewWorkspace.status=The workspace ''{0}'' has been created and filled with the filtering result +FilterThread.progress.taskName=Filtering {0} diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_ja.properties b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_ja.properties index 5b22f4c78e..6bea0cabd7 100644 --- a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_ja.properties +++ b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_ja.properties @@ -1,15 +1,7 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-18 10\:21+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u30d5\u30a3\u30eb\u30bfAPI\u306e\u5b9f\u88c5 - -FilterController.exportToColumn.status=\u5217\u306f"{0}"\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u7d50\u679c\u306b\u5145\u586b\u3055\u308c\u3066\u3044\u308b - -FilterController.exportToNewWorkspace.task="\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3078\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8" - -FilterController.exportToNewWorkspace.status=\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9"{0}"\u306e\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u7d50\u679c\u3092\u4f5c\u6210\u3057\u3001\u5145\u586b\u3055\u308c\u3066\u3044\u308b +OpenIDE-Module-Short-Description=\u30d5\u30a3\u30eb\u30bfAPI\u306e\u5b9f\u88c5 + +FilterController.exportToColumn.status = \u5217\u306f"{0}"\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u7d50\u679c\u306b\u5145\u586b\u3055\u308c\u3066\u3044\u308b +FilterController.exportToNewWorkspace.task = "\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3078\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30c8" +FilterController.exportToNewWorkspace.status = \u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9"{0}"\u306e\u30d5\u30a3\u30eb\u30bf\u30ea\u30f3\u30b0\u7d50\u679c\u3092\u4f5c\u6210\u3057\u3001\u5145\u586b\u3055\u308c\u3066\u3044\u308b + +# FilterThread.progress.taskName = Filtering {0} diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_ko.properties b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_ko.properties new file mode 100644 index 0000000000..fafaca0e8e --- /dev/null +++ b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_ko.properties @@ -0,0 +1,7 @@ + + +FilterThread.progress.taskName={0} \uD544\uD130\uB9C1 +FilterController.exportToNewWorkspace.task=\uC791\uC5C5 \uACF5\uAC04\uC73C\uB85C \uB0B4\uBCF4\uB0B4\uAE30 +FilterController.exportToColumn.status=''{0}'' \uC5F4\uC774 \uD544\uD130\uB9C1 \uACB0\uACFC\uB85C \uCC44\uC6CC\uC84C\uC2B5\uB2C8\uB2E4 +FilterController.exportToNewWorkspace.status=''{0}'' \uC791\uC5C5 \uACF5\uAC04\uC774 \uC0DD\uC131\uB418\uACE0 \uD544\uD130\uB9C1 \uACB0\uACFC\uB85C \uCC44\uC6CC\uC84C\uC2B5\uB2C8\uB2E4 +OpenIDE-Module-Short-Description=\uD544\uD130 API\uC758 \uAD6C\uD604 diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_nl.properties b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_nl.properties new file mode 100644 index 0000000000..a74a99835c --- /dev/null +++ b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_nl.properties @@ -0,0 +1,5 @@ +OpenIDE-Module-Short-Description=Implementation of Filters API +FilterController.exportToColumn.status=The column ''{0}'' has been filled with the filtering result +FilterController.exportToNewWorkspace.task=Exporteren naar werkruimte +FilterController.exportToNewWorkspace.status=De werkruimte "{0}" is gemaakt en met het filterresultaat gevuld +FilterThread.progress.taskName=Filtering {0} diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_oc.properties b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_oc.properties index c10f8da6ec..f5c37f4e4a 100644 --- a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_oc.properties +++ b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_oc.properties @@ -1,14 +1,5 @@ -# Occitan (post 1500) translation for gephi -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the gephi package. -# FIRST AUTHOR , 2010. -# -!=Project-Id-Version\: gephi\nReport-Msgid-Bugs-To\: FULL NAME \nPOT-Creation-Date\: 2010-04-07 13\:16+0200\nPO-Revision-Date\: 2010-10-21 13\:41+0000\nLast-Translator\: C\u00e9dric VALMARY (Tot en \u00f2c) \nLanguage-Team\: Occitan (post 1500) \nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nX-Launchpad-Export-Date\: 2011-03-13 04\:47+0000\nX-Generator\: Launchpad (build 12559)\n - -!OpenIDE-Module-Short-Description= - +OpenIDE-Module-Short-Description=Implementation of Filters API FilterController.exportToColumn.status=La colomna "{0}" es estada emplenada amb los resultats del filtratge. - FilterController.exportToNewWorkspace.task=Exportar dins l'espaci de trabalh - FilterController.exportToNewWorkspace.status=L'espaci de trabalh "{0}" es estat creat e emplenat amb los resultats del filtratge. +FilterThread.progress.taskName=Filtering {0} diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_pt_BR.properties b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_pt_BR.properties index bf394ce25d..6d53245a22 100644 --- a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_pt_BR.properties +++ b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_pt_BR.properties @@ -1,15 +1,7 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 17\:48+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Implementa\u00e7\u00e3o da API de filtros - -FilterController.exportToColumn.status=A coluna "{0}" foi preenchida com o resultado da filtragem - -FilterController.exportToNewWorkspace.task="Exportar para \u00c1rea de Trabalho" - -FilterController.exportToNewWorkspace.status=A \u00c1rea de Trabalho "{0}" foi criada e preenchida com o resultado da filtragem +OpenIDE-Module-Short-Description=Implementaηγo da API de filtros + +FilterController.exportToColumn.status = A coluna "{0}" foi preenchida com o resultado da filtragem +FilterController.exportToNewWorkspace.task = "Exportar para Αrea de Trabalho" +FilterController.exportToNewWorkspace.status = A Αrea de Trabalho "{0}" foi criada e preenchida com o resultado da filtragem + +FilterThread.progress.taskName = Filtrar {0} diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_ro.properties b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_ro.properties new file mode 100644 index 0000000000..fcca63add7 --- /dev/null +++ b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_ro.properties @@ -0,0 +1,7 @@ + + +FilterController.exportToNewWorkspace.status=Spa\u021Biul de lucru ''{0}'' a fost creat \u0219i completat cu rezultatul filtr\u0103rii +FilterThread.progress.taskName=Filtrare {0} +OpenIDE-Module-Short-Description=Implementare API pentru filtre +FilterController.exportToColumn.status=Coloana ''{0}'' a fost completat\u0103 cu rezultatul filtr\u0103rii +FilterController.exportToNewWorkspace.task=Export\u0103 \u00EEn spa\u021Biul de lucru diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_ru.properties b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_ru.properties index 014498c526..db407d4dd4 100644 --- a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_ru.properties +++ b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_ru.properties @@ -1,15 +1,7 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-21 22\:46+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f API \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 - -FilterController.exportToColumn.status=\u041a\u043e\u043b\u043e\u043d\u043a\u0430 "{0}" \u0431\u044b\u043b\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u0430 - -FilterController.exportToNewWorkspace.task="\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c" - -FilterController.exportToNewWorkspace.status=\u0420\u0430\u0431\u043e\u0447\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c "{0}" \u0431\u044b\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u0430 +OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f API \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 + +FilterController.exportToColumn.status = \u041a\u043e\u043b\u043e\u043d\u043a\u0430 "{0}" \u0431\u044b\u043b\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u0430 +FilterController.exportToNewWorkspace.task = "\u042d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c" +FilterController.exportToNewWorkspace.status = \u0420\u0430\u0431\u043e\u0447\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c "{0}" \u0431\u044b\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0430 \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u043c\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0444\u0438\u043b\u044c\u0442\u0440\u0430 + +# FilterThread.progress.taskName = Filtering {0} diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_th.properties b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_tr.properties b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_tr.properties new file mode 100644 index 0000000000..bae8cc9405 --- /dev/null +++ b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_tr.properties @@ -0,0 +1,5 @@ +OpenIDE-Module-Short-Description=Implementation of Filters API +FilterController.exportToColumn.status=The column ''{0}'' has been filled with the filtering result +FilterController.exportToNewWorkspace.task=Export to workspace +FilterController.exportToNewWorkspace.status=The workspace ''{0}'' has been created and filled with the filtering result +FilterThread.progress.taskName=Filtering {0} diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_zh_CN.properties b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_zh_CN.properties index 011fb660bd..de08e03623 100644 --- a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_zh_CN.properties +++ b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_zh_CN.properties @@ -1,14 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:14+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - OpenIDE-Module-Short-Description=\u8fc7\u6ee4\u5668\u5e94\u7528\u7a0b\u5e8f\u63a5\u53e3\u7684\u5b9e\u73b0 - FilterController.exportToColumn.status=\u5217"{0}" \u5df2\u7ecf\u586b\u6ee1\u8fc7\u6ee4\u7ed3\u679c - FilterController.exportToNewWorkspace.task=\u201c\u5bfc\u51fa\u5230\u5de5\u4f5c\u533a\u201d - FilterController.exportToNewWorkspace.status=\u5de5\u4f5c\u533a"{0}" \u5df2\u521b\u5efa\u548c\u5e76\u586b\u5145\u8fc7\u6ee4\u7ed3\u679c +FilterThread.progress.taskName=\u6B63\u5728\u8FC7\u6EE4 {0} diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_zh_TW.properties b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_zh_TW.properties new file mode 100644 index 0000000000..bae8cc9405 --- /dev/null +++ b/modules/FiltersImpl/src/main/resources/org/gephi/filters/Bundle_zh_TW.properties @@ -0,0 +1,5 @@ +OpenIDE-Module-Short-Description=Implementation of Filters API +FilterController.exportToColumn.status=The column ''{0}'' has been filled with the filtering result +FilterController.exportToNewWorkspace.task=Export to workspace +FilterController.exportToNewWorkspace.status=The workspace ''{0}'' has been created and filled with the filtering result +FilterThread.progress.taskName=Filtering {0} diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/cs.po b/modules/FiltersImpl/src/main/resources/org/gephi/filters/cs.po deleted file mode 100644 index 5e58ec8468..0000000000 --- a/modules/FiltersImpl/src/main/resources/org/gephi/filters/cs.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-29 19:59+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ZavedenΓ­ API filtrΕ―" - -msgid "FilterController.exportToColumn.status" -msgstr "Sloupec \"{0}\" byl vyplnΔ›n vΓ½sledkem filtrovΓ‘nΓ­" - -msgid "FilterController.exportToNewWorkspace.task" -msgstr "\"Exportovat do pracovnΓ­ho prostoru\"" - -msgid "FilterController.exportToNewWorkspace.status" -msgstr "PracovnΓ­ prostor \"{0}\" byl vytvoΕ™en a vyplnΔ›n vΓ½sledkem filtrovΓ‘nΓ­" diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/es.po b/modules/FiltersImpl/src/main/resources/org/gephi/filters/es.po deleted file mode 100644 index cab35da355..0000000000 --- a/modules/FiltersImpl/src/main/resources/org/gephi/filters/es.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:05+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplementaciΓ³n de la API de filtros" - -msgid "FilterController.exportToColumn.status" -msgstr "La columna \"{0}\" ha sido rellenada con el resultado del filtrado" - -msgid "FilterController.exportToNewWorkspace.task" -msgstr "Exportar a espacio de trabajo" - -msgid "FilterController.exportToNewWorkspace.status" -msgstr "El espacio de trabajo \"{0}\" ha sido creado y rellenado con el resultado del filtrado" diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/fr.po b/modules/FiltersImpl/src/main/resources/org/gephi/filters/fr.po deleted file mode 100644 index 3a16ab581b..0000000000 --- a/modules/FiltersImpl/src/main/resources/org/gephi/filters/fr.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:05+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplΓ©mentation de l'API des filtres" - -msgid "FilterController.exportToColumn.status" -msgstr "La colonne \"{0}\" a Γ©tΓ© remplie avec les rΓ©sultats du filtrage." - -msgid "FilterController.exportToNewWorkspace.task" -msgstr "Exporter dans l'espace de travail" - -msgid "FilterController.exportToNewWorkspace.status" -msgstr "L'espace de travail \"{0}\" a Γ©tΓ© créé et remplie avec les rΓ©sultats du filtrage." diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/ja.po b/modules/FiltersImpl/src/main/resources/org/gephi/filters/ja.po deleted file mode 100644 index 66ae89977a..0000000000 --- a/modules/FiltersImpl/src/main/resources/org/gephi/filters/ja.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-18 10:21+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "フィルタAPIγεŸθ£…" - -msgid "FilterController.exportToColumn.status" -msgstr "εˆ—γ―\"{0}\"フィルタγƒͺγƒ³γ‚°η΅ζžœγ«ε……ε‘«γ•γ‚Œγ¦γ„γ‚‹" - -msgid "FilterController.exportToNewWorkspace.task" -msgstr "\"γƒ―γƒΌγ‚―γ‚ΉγƒšγƒΌγ‚ΉγΈγγ‚¨γ‚―γ‚ΉγƒγƒΌγƒˆ\"" - -msgid "FilterController.exportToNewWorkspace.status" -msgstr "γƒ―γƒΌγ‚―γ‚ΉγƒšγƒΌγ‚Ή\"{0}\"γγƒ•ィルタγƒͺγƒ³γ‚°η΅ζžœγ‚’δ½œζˆγ—γ€ε……ε‘«γ•γ‚Œγ¦γ„γ‚‹" diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/org-gephi-filters.pot b/modules/FiltersImpl/src/main/resources/org/gephi/filters/org-gephi-filters.pot deleted file mode 100644 index b6e932cf0b..0000000000 --- a/modules/FiltersImpl/src/main/resources/org/gephi/filters/org-gephi-filters.pot +++ /dev/null @@ -1,29 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implementation of Filters API" - -msgid "FilterController.exportToColumn.status" -msgstr "The column \"{0}\" has been filled with the filtering result" - -msgid "FilterController.exportToNewWorkspace.task" -msgstr "\"Export to workspace\"" - -msgid "FilterController.exportToNewWorkspace.status" -msgstr "" -"The workspace \"{0}\" has been created and filled with the filtering result" diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/pt_BR.po b/modules/FiltersImpl/src/main/resources/org/gephi/filters/pt_BR.po deleted file mode 100644 index 0951863e74..0000000000 --- a/modules/FiltersImpl/src/main/resources/org/gephi/filters/pt_BR.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 17:48+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplementaΓ§Γ£o da API de filtros" - -msgid "FilterController.exportToColumn.status" -msgstr "A coluna \"{0}\" foi preenchida com o resultado da filtragem" - -msgid "FilterController.exportToNewWorkspace.task" -msgstr "\"Exportar para Área de Trabalho\"" - -msgid "FilterController.exportToNewWorkspace.status" -msgstr "A Área de Trabalho \"{0}\" foi criada e preenchida com o resultado da filtragem" diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/ru.po b/modules/FiltersImpl/src/main/resources/org/gephi/filters/ru.po deleted file mode 100644 index b2b4cb3982..0000000000 --- a/modules/FiltersImpl/src/main/resources/org/gephi/filters/ru.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-21 22:46+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "РСализация API Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²" - -msgid "FilterController.exportToColumn.status" -msgstr "Колонка \"{0}\" Π±Ρ‹Π»Π° Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°" - -msgid "FilterController.exportToNewWorkspace.task" -msgstr "\"Π­ΠΊΡΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ\"" - -msgid "FilterController.exportToNewWorkspace.status" -msgstr "Рабочая ΠΎΠ±Π»Π°ΡΡ‚ΡŒ \"{0}\" Π±Ρ‹Π»Π° создана ΠΈ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°ΠΌΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°" diff --git a/modules/FiltersImpl/src/main/resources/org/gephi/filters/zh_CN.po b/modules/FiltersImpl/src/main/resources/org/gephi/filters/zh_CN.po deleted file mode 100644 index 74f21890c8..0000000000 --- a/modules/FiltersImpl/src/main/resources/org/gephi/filters/zh_CN.po +++ /dev/null @@ -1,30 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:14+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "过滀器应用程序ζŽ₯ε£ηš„εžηް" - -msgid "FilterController.exportToColumn.status" -msgstr "εˆ—\"{0}\" ε·²η»ε‘«ζ»‘θΏ‡ζ»€η»“ζžœ" - -msgid "FilterController.exportToNewWorkspace.task" -msgstr "β€œε―Όε‡Ίεˆ°ε·₯δ½œεŒΊβ€" - -msgid "FilterController.exportToNewWorkspace.status" -msgstr "ε·₯作区\"{0}\" ε·²εˆ›ε»Ίε’ŒεΉΆε‘«ε……θΏ‡ζ»€η»“ζžœ" diff --git a/modules/FiltersImpl/src/test/java/org/gephi/filters/PersistenceProviderTest.java b/modules/FiltersImpl/src/test/java/org/gephi/filters/PersistenceProviderTest.java new file mode 100644 index 0000000000..ce1a835bdd --- /dev/null +++ b/modules/FiltersImpl/src/test/java/org/gephi/filters/PersistenceProviderTest.java @@ -0,0 +1,79 @@ +package org.gephi.filters; + +import org.gephi.filters.plugin.attribute.AttributeEqualBuilder; +import org.gephi.filters.plugin.graph.EgoBuilder; +import org.gephi.filters.plugin.graph.GiantComponentBuilder; +import org.gephi.filters.plugin.graph.HasSelfLoopBuilder; +import org.gephi.filters.plugin.operator.INTERSECTIONBuilder; +import org.gephi.filters.spi.Filter; +import org.gephi.filters.spi.FilterBuilder; +import org.gephi.project.io.utils.GephiFormat; +import org.junit.Assert; +import org.junit.Ignore; +import org.junit.Test; + +public class PersistenceProviderTest { + + @Test + public void testEmpty() throws Exception { + FilterModelImpl filterModel = Utils.newFilterModel(); + GephiFormat.testXMLPersistenceProvider(new FilterModelPersistenceProvider(), filterModel.getWorkspace()); + } + + @Test + public void testSimpleFilter() throws Exception { + FilterModelImpl filterModel = Utils.newFilterModel(); + FilterQueryImpl query = new FilterQueryImpl(null, new GiantComponentBuilder.GiantComponentFilter()); + filterModel.addFirst(query); + GephiFormat.testXMLPersistenceProvider(new FilterModelPersistenceProvider(), filterModel.getWorkspace()); + } + + @Test + public void testFilterWithParameters() throws Exception { + FilterModelImpl filterModel = Utils.newFilterModel(); + EgoBuilder.EgoFilter egoFilter = new EgoBuilder.EgoFilter(); + egoFilter.setPattern("test"); + + FilterQueryImpl query = new FilterQueryImpl(null, egoFilter); + filterModel.addFirst(query); + GephiFormat.testXMLPersistenceProvider(new FilterModelPersistenceProvider(), filterModel.getWorkspace()); + } + + @Test + public void testAndOperator() throws Exception { + FilterModelImpl filterModel = Utils.newFilterModel(); + OperatorQueryImpl query = new OperatorQueryImpl(new INTERSECTIONBuilder.IntersectionOperator()); + filterModel.setSubQuery(query, new FilterQueryImpl(null, new GiantComponentBuilder.GiantComponentFilter())); + filterModel.setSubQuery(query, new FilterQueryImpl(null, new HasSelfLoopBuilder.HasSelfLoopFilter())); + filterModel.addFirst(query); + GephiFormat.testXMLPersistenceProvider(new FilterModelPersistenceProvider(), filterModel.getWorkspace()); + } + + @Test + public void testFilterRename() throws Exception { + FilterModelImpl filterModel = Utils.newFilterModel(); + EgoBuilder.EgoFilter egoFilter = new EgoBuilder.EgoFilter(); + egoFilter.setPattern("test"); + + FilterQueryImpl query = new FilterQueryImpl(null, egoFilter); + query.setName("* Foo"); + filterModel.addFirst(query); + GephiFormat.testXMLPersistenceProvider(new FilterModelPersistenceProvider(), filterModel.getWorkspace()); + } + + @Test + @Ignore + public void testAttributeFilter() throws Exception { + FilterModelImpl filterModel = Utils.newFilterModelWithGraph(); + + FilterBuilder[] builders = new AttributeEqualBuilder().getBuilders(filterModel.getWorkspace()); + Assert.assertEquals(1, builders.length); + FilterBuilder builder = builders[0]; + Filter filter = builder.getFilter(filterModel.getWorkspace()); + + FilterQueryImpl query = new FilterQueryImpl(builder, filter); + filterModel.addFirst(query); + new FilterProcessor().init(filter, filterModel.getGraphModel().getGraph()); + GephiFormat.testXMLPersistenceProvider(new FilterModelPersistenceProvider(), filterModel.getWorkspace()); + } +} diff --git a/modules/FiltersImpl/src/test/java/org/gephi/filters/Utils.java b/modules/FiltersImpl/src/test/java/org/gephi/filters/Utils.java new file mode 100644 index 0000000000..1ed8e7988d --- /dev/null +++ b/modules/FiltersImpl/src/test/java/org/gephi/filters/Utils.java @@ -0,0 +1,25 @@ +package org.gephi.filters; + +import org.gephi.graph.GraphGenerator; +import org.gephi.graph.api.GraphModel; +import org.gephi.project.impl.WorkspaceImpl; + +public class Utils { + + public static FilterModelImpl newFilterModel() { + WorkspaceImpl workspace = new WorkspaceImpl(null, 0); + FilterModelImpl model = new FilterModelImpl(workspace); + workspace.add(model); + return model; + } + + public static FilterModelImpl newFilterModelWithGraph() { + WorkspaceImpl workspace = new WorkspaceImpl(null, 0); + GraphModel graphModel = GraphGenerator.build().generateTinyGraph().addIntNodeColumn().getGraph().getModel(); + workspace.add(graphModel); + + FilterModelImpl model = new FilterModelImpl(workspace); + workspace.add(model); + return model; + } +} diff --git a/modules/FiltersPlugin/pom.xml b/modules/FiltersPlugin/pom.xml index df10f58cfe..be70e522dd 100644 --- a/modules/FiltersPlugin/pom.xml +++ b/modules/FiltersPlugin/pom.xml @@ -4,26 +4,18 @@ gephi-parent org.gephi - 0.9-SNAPSHOT - ../.. + 0.11.3-SNAPSHOT + ../.. org.gephi filters-plugin - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm FiltersPlugin - - ${project.groupId} - data-attributes-api - - - ${project.groupId} - dynamic-api - ${project.groupId} filters-api @@ -34,7 +26,7 @@ ${project.groupId} - partition-api + appearance-api ${project.groupId} @@ -46,8 +38,12 @@ ${project.groupId} - timeline + algorithms-plugin + ${project.groupId} utils-longtask @@ -64,12 +60,19 @@ ${project.groupId} project-api + + + ${project.groupId} + graph-api + test + test-jar + - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/AbstractAttributeFilter.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/AbstractAttributeFilter.java index 980d079812..e80280c809 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/AbstractAttributeFilter.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/AbstractAttributeFilter.java @@ -39,40 +39,30 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeUtils; -import org.gephi.filters.spi.AttributableFilter; +import org.gephi.filters.spi.ElementFilter; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; -/** - * - * @author mbastian - */ -public abstract class AbstractAttributeFilter extends AbstractFilter implements AttributableFilter { +public abstract class AbstractAttributeFilter extends AbstractFilter implements ElementFilter { - protected AttributeColumn column; - protected AbstractAttributeFilter.Type type; + protected Column column; - public AbstractAttributeFilter(String name, AttributeColumn column) { + public AbstractAttributeFilter(String name, Column column) { super(name + " (" + column.getTitle() + ")"); this.column = column; - this.type = AttributeUtils.getDefault().isNodeColumn(column) ? Type.NODE : Type.EDGE; //Add column property - addProperty(AttributeColumn.class, "column"); - } - - public Type getType() { - return type; + addProperty(Column.class, "column"); } - public AttributeColumn getColumn() { + public Column getColumn() { return column; } - public void setColumn(AttributeColumn column) { + public void setColumn(Column column) { this.column = column; - this.type = AttributeUtils.getDefault().isNodeColumn(column) ? Type.NODE : Type.EDGE; } } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/AbstractAttributeFilterBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/AbstractAttributeFilterBuilder.java index e5665fcb8e..1ae8b96e6a 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/AbstractAttributeFilterBuilder.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/AbstractAttributeFilterBuilder.java @@ -39,30 +39,32 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin; import javax.swing.Icon; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeUtils; import org.gephi.filters.spi.Category; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; import org.openide.util.NbBundle; /** - * * @author mbastian */ public abstract class AbstractAttributeFilterBuilder extends AbstractFilterBuilder { - protected final AttributeColumn column; + protected final Column column; - public AbstractAttributeFilterBuilder(AttributeColumn column, Category category, String description, Icon icon) { + public AbstractAttributeFilterBuilder(Column column, Category category, String description, Icon icon) { super(category, "" + column.getTitle() + " " - + "" + column.getType().toString() + " " - + (AttributeUtils.getDefault().isNodeColumn(column) - ? "(" + NbBundle.getMessage(AbstractAttributeFilterBuilder.class, "AbstractAttributeFilterBuilder.Node") + ")" - : "(" + NbBundle.getMessage(AbstractAttributeFilterBuilder.class, "AbstractAttributeFilterBuilder.Edge") + ")") + + "" + column.getTypeClass().getSimpleName() + " " + + (AttributeUtils.isNodeColumn(column) + ? + "(" + NbBundle.getMessage(AbstractAttributeFilterBuilder.class, "AbstractAttributeFilterBuilder.Node") + ")" + : "(" + NbBundle.getMessage(AbstractAttributeFilterBuilder.class, "AbstractAttributeFilterBuilder.Edge") + + ")") + "", - description, icon); + description, icon); this.column = column; } } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/AbstractFilter.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/AbstractFilter.java index 813220997f..ef014c1367 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/AbstractFilter.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/AbstractFilter.java @@ -39,16 +39,17 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin; import java.util.ArrayList; import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; import org.gephi.filters.spi.Filter; import org.gephi.filters.spi.FilterProperty; -import org.openide.util.Exceptions; /** - * * @author mbastian */ public abstract class AbstractFilter implements Filter { @@ -58,13 +59,15 @@ public abstract class AbstractFilter implements Filter { public AbstractFilter(String name) { this.name = name; - this.properties = new ArrayList(); + this.properties = new ArrayList<>(); } + @Override public String getName() { return name; } + @Override public FilterProperty[] getProperties() { return properties.toArray(new FilterProperty[0]); } @@ -73,7 +76,7 @@ public void addProperty(Class clazz, String name) { try { properties.add(FilterProperty.createProperty(this, clazz, name)); } catch (NoSuchMethodException ex) { - Exceptions.printStackTrace(ex); + Logger.getLogger("").log(Level.SEVERE, "Error while creating '" + name + "' property", ex); } } } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/AbstractFilterBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/AbstractFilterBuilder.java index ba4bac28f6..2ca9b15d85 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/AbstractFilterBuilder.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/AbstractFilterBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin; import javax.swing.Icon; @@ -47,7 +48,6 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.filters.spi.FilterBuilder; /** - * * @author mbastian */ public abstract class AbstractFilterBuilder implements FilterBuilder { @@ -64,22 +64,27 @@ public AbstractFilterBuilder(Category category, String name, String descrption, this.icon = icon; } + @Override public Category getCategory() { return category; } + @Override public String getName() { return name; } + @Override public Icon getIcon() { return icon; } + @Override public String getDescription() { return descrption; } + @Override public void destroy(Filter filter) { } } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/DynamicAttributesHelper.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/DynamicAttributesHelper.java deleted file mode 100644 index 8f530e791b..0000000000 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/DynamicAttributesHelper.java +++ /dev/null @@ -1,130 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ - -package org.gephi.filters.plugin; - -import org.gephi.data.attributes.api.Estimator; -import org.gephi.data.attributes.type.DynamicType; -import org.gephi.data.attributes.type.TimeInterval; -import org.gephi.dynamic.api.DynamicController; -import org.gephi.dynamic.api.DynamicModel; -import org.gephi.filters.api.FilterController; -import org.gephi.filters.api.FilterModel; -import org.gephi.filters.api.Query; -import org.gephi.filters.plugin.dynamic.DynamicRangeBuilder.DynamicRangeFilter; -import org.gephi.filters.spi.Filter; -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.Graph; -import org.gephi.project.api.Workspace; -import org.openide.util.Lookup; - -/** - * - * @author Mathieu Bastian - */ -public class DynamicAttributesHelper { - - private final FilterModel filterModel; - private final DynamicModel dynamicModel; - private final boolean dynamic; - - public DynamicAttributesHelper(Filter filter, Graph graph) { - if (graph != null) { - Workspace workspace = graph.getGraphModel().getWorkspace(); - FilterController filterController = Lookup.getDefault().lookup(FilterController.class); - filterModel = filterController.getModel(workspace); - - DynamicController dynamicController = Lookup.getDefault().lookup(DynamicController.class); - dynamicModel = dynamicController.getModel(workspace); - dynamic = isDynamic(filter); - } else { - filterModel = null; - dynamicModel = null; - dynamic = false; - } - } - - private boolean isDynamic(Filter filter) { - if (filterModel.getCurrentQuery() == null) { - return false; - } - Query filterQuery = null; - for (Query q : filterModel.getCurrentQuery().getQueries(filter.getClass())) { - if (q.getFilter() == filter) { - filterQuery = q; - break; - } - } - if (filterQuery != null) { - for (Query query : filterQuery.getDescendantsAndSelf()) { - if (query.getFilter().getClass().equals(DynamicRangeFilter.class)) { - return true; - } - } - } - return false; - } - - public Object getDynamicValue(Object attributeValue) { - if (attributeValue != null && attributeValue instanceof DynamicType) { - DynamicType dynamicValue = (DynamicType) attributeValue; - Estimator estimator = dynamicModel == null ? Estimator.FIRST : dynamicModel.getEstimator(); - if (Number.class.isAssignableFrom(dynamicValue.getUnderlyingType())) { - estimator = dynamicModel == null ? Estimator.AVERAGE : dynamicModel.getNumberEstimator(); - } - TimeInterval timeInterval = new TimeInterval(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); - if (dynamic) { - timeInterval = dynamicModel.getVisibleInterval(); - } - return dynamicValue.getValue(timeInterval.getLow(), timeInterval.getHigh(), estimator); - } - return attributeValue; - } - - public float getEdgeWeight(Edge edge) { - if (dynamic) { - TimeInterval timeInterval = dynamicModel.getVisibleInterval(); - return edge.getWeight(timeInterval.getLow(), timeInterval.getHigh()); - } - return edge.getWeight(); - } -} diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/AttributeEqualBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/AttributeEqualBuilder.java index 2c3daa9ba5..9c6d3db194 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/AttributeEqualBuilder.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/AttributeEqualBuilder.java @@ -39,57 +39,78 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin.attribute; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.regex.Pattern; import javax.swing.JPanel; -import org.gephi.data.attributes.api.*; import org.gephi.filters.api.FilterLibrary; import org.gephi.filters.api.Range; import org.gephi.filters.plugin.AbstractAttributeFilter; import org.gephi.filters.plugin.AbstractAttributeFilterBuilder; -import org.gephi.filters.plugin.DynamicAttributesHelper; -import org.gephi.filters.spi.*; -import org.gephi.graph.api.*; +import org.gephi.filters.spi.Category; +import org.gephi.filters.spi.CategoryBuilder; +import org.gephi.filters.spi.EdgeFilter; +import org.gephi.filters.spi.Filter; +import org.gephi.filters.spi.FilterBuilder; +import org.gephi.filters.spi.FilterProperty; +import org.gephi.filters.spi.NodeFilter; +import org.gephi.filters.spi.RangeFilter; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.types.IntervalBooleanMap; +import org.gephi.graph.api.types.IntervalStringMap; +import org.gephi.graph.api.types.TimestampBooleanMap; +import org.gephi.graph.api.types.TimestampStringMap; +import org.gephi.project.api.Workspace; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = CategoryBuilder.class) public class AttributeEqualBuilder implements CategoryBuilder { private final static Category EQUAL = new Category( - NbBundle.getMessage(AttributeEqualBuilder.class, "AttributeEqualBuilder.name"), - null, - FilterLibrary.ATTRIBUTES); + NbBundle.getMessage(AttributeEqualBuilder.class, "AttributeEqualBuilder.name"), + null, + FilterLibrary.ATTRIBUTES); + @Override public Category getCategory() { return EQUAL; } - public FilterBuilder[] getBuilders() { - List builders = new ArrayList(); - AttributeModel am = Lookup.getDefault().lookup(AttributeController.class).getModel(); - List columns = new ArrayList(); - columns.addAll(Arrays.asList(am.getNodeTable().getColumns())); - columns.addAll(Arrays.asList(am.getEdgeTable().getColumns())); - for (AttributeColumn c : columns) { - if (AttributeUtils.getDefault().isStringColumn(c) || c.getType().equals(AttributeType.DYNAMIC_STRING)) { - EqualStringFilterBuilder b = new EqualStringFilterBuilder(c); - builders.add(b); - } else if (AttributeUtils.getDefault().isNumberColumn(c) || AttributeUtils.getDefault().isDynamicNumberColumn(c)) { - EqualNumberFilterBuilder b = new EqualNumberFilterBuilder(c); - builders.add(b); - } else if (c.getType().equals(AttributeType.BOOLEAN) || c.getType().equals(AttributeType.DYNAMIC_BOOLEAN)) { - EqualBooleanFilterBuilder b = new EqualBooleanFilterBuilder(c); - builders.add(b); + @Override + public FilterBuilder[] getBuilders(Workspace workspace) { + List builders = new ArrayList<>(); + GraphModel am = Lookup.getDefault().lookup(GraphController.class).getGraphModel(workspace); + List columns = new ArrayList<>(); + columns.addAll(am.getNodeTable().toList()); + columns.addAll(am.getEdgeTable().toList()); + for (Column c : columns) { + if (!c.isProperty()) { + if (c.getTypeClass().equals(String.class) || c.getTypeClass().equals(TimestampStringMap.class) || + c.getTypeClass().equals(IntervalStringMap.class) || c.isArray()) { + EqualStringFilterBuilder b = new EqualStringFilterBuilder(c); + builders.add(b); + } else if (AttributeUtils.isNumberType(c.getTypeClass())) { + EqualNumberFilterBuilder b = new EqualNumberFilterBuilder(c); + builders.add(b); + } else if (c.getTypeClass().equals(Boolean.class) || + c.getTypeClass().equals(TimestampBooleanMap.class) || + c.getTypeClass().equals(IntervalBooleanMap.class)) { + EqualBooleanFilterBuilder b = new EqualBooleanFilterBuilder(c); + builders.add(b); + } } } return builders.toArray(new FilterBuilder[0]); @@ -97,17 +118,20 @@ public FilterBuilder[] getBuilders() { private static class EqualStringFilterBuilder extends AbstractAttributeFilterBuilder { - public EqualStringFilterBuilder(AttributeColumn column) { + public EqualStringFilterBuilder(Column column) { super(column, - EQUAL, - NbBundle.getMessage(AttributeEqualBuilder.class, "AttributeEqualBuilder.description"), - null); + EQUAL, + NbBundle.getMessage(AttributeEqualBuilder.class, "AttributeEqualBuilder.description"), + null); } - public EqualStringFilter getFilter() { - return new EqualStringFilter(column); + @Override + public EqualStringFilter getFilter(Workspace workspace) { + return AttributeUtils.isNodeColumn(column) ? new EqualStringFilter.Node(column) : + new EqualStringFilter.Edge(column); } + @Override public JPanel getPanel(Filter filter) { EqualStringUI ui = Lookup.getDefault().lookup(EqualStringUI.class); if (ui != null) { @@ -117,42 +141,44 @@ public JPanel getPanel(Filter filter) { } } - public static class EqualStringFilter extends AbstractAttributeFilter { + public static abstract class EqualStringFilter extends AbstractAttributeFilter { private String pattern; private boolean useRegex; private Pattern regex; - private DynamicAttributesHelper dynamicHelper = new DynamicAttributesHelper(this, null); - public EqualStringFilter(AttributeColumn column) { + public EqualStringFilter(Column column) { super(NbBundle.getMessage(AttributeEqualBuilder.class, "AttributeEqualBuilder.name"), - column); + column); //Add ptoperties addProperty(String.class, "pattern"); addProperty(Boolean.class, "useRegex"); } + @Override public boolean init(Graph graph) { - HierarchicalGraph hg = (HierarchicalGraph) graph; - dynamicHelper = new DynamicAttributesHelper(this, hg); return true; } - public boolean evaluate(Graph graph, Attributable attributable) { + @Override + public boolean evaluate(Graph graph, Element element) { if (pattern == null) { return true; } - Object val = attributable.getAttributes().getValue(column.getIndex()); - val = dynamicHelper.getDynamicValue(val); - if (val != null && useRegex) { - return regex.matcher(val.toString()).matches(); - } else if (val != null) { - return pattern.equals(val.toString()); + Object val = element.getAttribute(column, graph.getView()); + if (val != null) { + String valString = column.isArray() ? AttributeUtils.printArray(val) : val.toString(); + if (useRegex) { + return regex.matcher(valString).matches(); + } else { + return pattern.equals(valString); + } } return false; } + @Override public void finish() { } @@ -172,22 +198,38 @@ public boolean isUseRegex() { public void setUseRegex(boolean useRegex) { this.useRegex = useRegex; } + + public static class Node extends EqualStringFilter implements NodeFilter { + + public Node(Column column) { + super(column); + } + } + + public static class Edge extends EqualStringFilter implements EdgeFilter { + + public Edge(Column column) { + super(column); + } + } } private static class EqualNumberFilterBuilder extends AbstractAttributeFilterBuilder { - public EqualNumberFilterBuilder(AttributeColumn column) { + public EqualNumberFilterBuilder(Column column) { super(column, - EQUAL, - NbBundle.getMessage(AttributeEqualBuilder.class, "AttributeEqualBuilder.description"), - null); + EQUAL, + NbBundle.getMessage(AttributeEqualBuilder.class, "AttributeEqualBuilder.description"), + null); } - public EqualNumberFilter getFilter() { - return new EqualNumberFilter(column); - + @Override + public EqualNumberFilter getFilter(Workspace workspace) { + return AttributeUtils.isNodeColumn(column) ? new EqualNumberFilter.Node(column) : + new EqualNumberFilter.Edge(column); } + @Override public JPanel getPanel(Filter filter) { EqualNumberUI ui = Lookup.getDefault().lookup(EqualNumberUI.class); if (ui != null) { @@ -197,13 +239,13 @@ public JPanel getPanel(Filter filter) { } } - public static class EqualNumberFilter extends AbstractAttributeFilter implements RangeFilter { + public static abstract class EqualNumberFilter extends AbstractAttributeFilter + implements RangeFilter { private Number match; private Range range; - private DynamicAttributesHelper dynamicHelper = new DynamicAttributesHelper(this, null); - public EqualNumberFilter(AttributeColumn column) { + public EqualNumberFilter(Column column) { super(NbBundle.getMessage(AttributeEqualBuilder.class, "AttributeEqualBuilder.name"), column); //App property @@ -211,47 +253,42 @@ public EqualNumberFilter(AttributeColumn column) { addProperty(Range.class, "range"); } + @Override public boolean init(Graph graph) { - HierarchicalGraph hg = (HierarchicalGraph) graph; - if (AttributeUtils.getDefault().isNodeColumn(column)) { - if (graph.getNodeCount() == 0) { - return false; - } - } else if (AttributeUtils.getDefault().isEdgeColumn(column)) { - if (hg.getTotalEdgeCount() == 0) { - return false; - } + if (AttributeUtils.isNodeColumn(column)) { + return graph.getNodeCount() != 0; + } else if (AttributeUtils.isEdgeColumn(column)) { + return graph.getEdgeCount() != 0; } - dynamicHelper = new DynamicAttributesHelper(this, hg); return true; } - public boolean evaluate(Graph graph, Attributable attributable) { - Object val = attributable.getAttributes().getValue(column.getIndex()); - val = dynamicHelper.getDynamicValue(val); + @Override + public boolean evaluate(Graph graph, Element element) { + Object val = element.getAttribute(column, graph.getView()); if (val != null) { return val.equals(match); } return false; } + @Override public void finish() { } + @Override public Number[] getValues(Graph graph) { - List vals = new ArrayList(); - if (AttributeUtils.getDefault().isNodeColumn(column)) { - for (Node n : graph.getNodes()) { - Object val = n.getNodeData().getAttributes().getValue(column.getIndex()); - val = dynamicHelper.getDynamicValue(val); + List vals = new ArrayList<>(); + if (AttributeUtils.isNodeColumn(column)) { + for (Element n : graph.getNodes()) { + Object val = n.getAttribute(column, graph.getView()); if (val != null) { vals.add((Number) val); } } } else { - for (Edge e : ((HierarchicalGraph) graph).getEdgesAndMetaEdges()) { - Object val = e.getEdgeData().getAttributes().getValue(column.getIndex()); - val = dynamicHelper.getDynamicValue(val); + for (Element e : graph.getEdges()) { + Object val = e.getAttribute(column, graph.getView()); if (val != null) { vals.add((Number) val); } @@ -260,6 +297,7 @@ public Number[] getValues(Graph graph) { return vals.toArray(new Number[0]); } + @Override public FilterProperty getRangeProperty() { return getProperties()[2]; } @@ -270,7 +308,7 @@ public Range getRange() { public void setRange(Range range) { this.range = range; - if(match == null) { + if (match == null) { match = range.getMinimum(); } else { match = Range.trimToBounds(range.getMinimum(), range.getMaximum(), match); @@ -284,20 +322,37 @@ public Number getMatch() { public void setMatch(Number match) { this.match = match; } + + public static class Node extends EqualNumberFilter implements NodeFilter { + + public Node(Column column) { + super(column); + } + } + + public static class Edge extends EqualNumberFilter implements EdgeFilter { + + public Edge(Column column) { + super(column); + } + } } private static class EqualBooleanFilterBuilder extends AbstractAttributeFilterBuilder { - public EqualBooleanFilterBuilder(AttributeColumn column) { + public EqualBooleanFilterBuilder(Column column) { super(column, - EQUAL, - NbBundle.getMessage(AttributeEqualBuilder.class, "AttributeEqualBuilder.description"), null); + EQUAL, + NbBundle.getMessage(AttributeEqualBuilder.class, "AttributeEqualBuilder.description"), null); } - public EqualBooleanFilter getFilter() { - return new EqualBooleanFilter(column); + @Override + public EqualBooleanFilter getFilter(Workspace workspace) { + return AttributeUtils.isNodeColumn(column) ? new EqualBooleanFilter.Node(column) : + new EqualBooleanFilter.Edge(column); } + @Override public JPanel getPanel(Filter filter) { EqualBooleanUI ui = Lookup.getDefault().lookup(EqualBooleanUI.class); if (ui != null) { @@ -307,34 +362,33 @@ public JPanel getPanel(Filter filter) { } } - public static class EqualBooleanFilter extends AbstractAttributeFilter { + public static abstract class EqualBooleanFilter extends AbstractAttributeFilter { private boolean match = false; - private DynamicAttributesHelper dynamicHelper = new DynamicAttributesHelper(this, null); - public EqualBooleanFilter(AttributeColumn column) { + public EqualBooleanFilter(Column column) { super(NbBundle.getMessage(AttributeEqualBuilder.class, "AttributeEqualBuilder.name"), - column); + column); //Add property addProperty(Boolean.class, "match"); } + @Override public boolean init(Graph graph) { - HierarchicalGraph hg = (HierarchicalGraph) graph; - dynamicHelper = new DynamicAttributesHelper(this, hg); return true; } - public boolean evaluate(Graph graph, Attributable attributable) { - Object val = attributable.getAttributes().getValue(column.getIndex()); - val = dynamicHelper.getDynamicValue(val); + @Override + public boolean evaluate(Graph graph, Element element) { + Object val = element.getAttribute(column, graph.getView()); if (val != null) { return val.equals(match); } return false; } + @Override public void finish() { } @@ -345,5 +399,19 @@ public boolean isMatch() { public void setMatch(boolean match) { this.match = match; } + + public static class Node extends EqualBooleanFilter implements NodeFilter { + + public Node(Column column) { + super(column); + } + } + + public static class Edge extends EqualBooleanFilter implements EdgeFilter { + + public Edge(Column column) { + super(column); + } + } } } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/AttributeNonNullBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/AttributeNonNullBuilder.java index a8a7589812..331cf47aee 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/AttributeNonNullBuilder.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/AttributeNonNullBuilder.java @@ -39,104 +39,126 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin.attribute; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import javax.swing.JPanel; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeController; -import org.gephi.data.attributes.api.AttributeModel; -import org.gephi.data.attributes.api.AttributeUtils; import org.gephi.filters.api.FilterLibrary; import org.gephi.filters.plugin.AbstractAttributeFilter; import org.gephi.filters.plugin.AbstractAttributeFilterBuilder; import org.gephi.filters.spi.Category; import org.gephi.filters.spi.CategoryBuilder; +import org.gephi.filters.spi.EdgeFilter; import org.gephi.filters.spi.Filter; import org.gephi.filters.spi.FilterBuilder; -import org.gephi.graph.api.Attributable; +import org.gephi.filters.spi.NodeFilter; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; import org.gephi.graph.api.Graph; -import org.gephi.graph.api.HierarchicalGraph; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.project.api.Workspace; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = CategoryBuilder.class) public class AttributeNonNullBuilder implements CategoryBuilder { private final static Category NONNULL = new Category( - NbBundle.getMessage(AttributeEqualBuilder.class, "AttributeNonNullBuilder.name"), - null, - FilterLibrary.ATTRIBUTES); + NbBundle.getMessage(AttributeEqualBuilder.class, "AttributeNonNullBuilder.name"), + null, + FilterLibrary.ATTRIBUTES); + @Override public Category getCategory() { return NONNULL; } - public FilterBuilder[] getBuilders() { - List builders = new ArrayList(); - AttributeModel am = Lookup.getDefault().lookup(AttributeController.class).getModel(); - List columns = new ArrayList(); - columns.addAll(Arrays.asList(am.getNodeTable().getColumns())); - columns.addAll(Arrays.asList(am.getEdgeTable().getColumns())); - for (AttributeColumn c : columns) { - AttributeNonNullFilterBuilder b = new AttributeNonNullFilterBuilder(c); - builders.add(b); + @Override + public FilterBuilder[] getBuilders(Workspace workspace) { + List builders = new ArrayList<>(); + GraphModel am = Lookup.getDefault().lookup(GraphController.class).getGraphModel(workspace); + for (Column col : am.getNodeTable()) { + if (!col.isProperty()) { + AttributeNonNullFilterBuilder b = new AttributeNonNullFilterBuilder(col); + builders.add(b); + } + } + for (Column col : am.getEdgeTable()) { + if (!col.isProperty()) { + AttributeNonNullFilterBuilder b = new AttributeNonNullFilterBuilder(col); + builders.add(b); + } } return builders.toArray(new FilterBuilder[0]); } private static class AttributeNonNullFilterBuilder extends AbstractAttributeFilterBuilder { - public AttributeNonNullFilterBuilder(AttributeColumn column) { + public AttributeNonNullFilterBuilder(Column column) { super(column, - NONNULL, - NbBundle.getMessage(AttributeEqualBuilder.class, "AttributeNonNullBuilder.description"), - null); + NONNULL, + NbBundle.getMessage(AttributeEqualBuilder.class, "AttributeNonNullBuilder.description"), + null); } - public AttributeNonNullFilter getFilter() { - AttributeNonNullFilter f = new AttributeNonNullFilter(column); - return f; + @Override + public AttributeNonNullFilter getFilter(Workspace workspace) { + return AttributeUtils.isNodeColumn(column) ? new AttributeNonNullFilter.Node(column) : + new AttributeNonNullFilter.Edge(column); } + @Override public JPanel getPanel(Filter filter) { return null; } } - public static class AttributeNonNullFilter extends AbstractAttributeFilter { + public static abstract class AttributeNonNullFilter extends AbstractAttributeFilter { - public AttributeNonNullFilter(AttributeColumn column) { + public AttributeNonNullFilter(Column column) { super(NbBundle.getMessage(AttributeEqualBuilder.class, "AttributeNonNullBuilder.name"), - column); + column); } + @Override public boolean init(Graph graph) { - HierarchicalGraph hg = (HierarchicalGraph) graph; - if (AttributeUtils.getDefault().isNodeColumn(column)) { - if (graph.getNodeCount() == 0) { - return false; - } - } else if (AttributeUtils.getDefault().isEdgeColumn(column)) { - if (hg.getTotalEdgeCount() == 0) { - return false; - } + if (AttributeUtils.isNodeColumn(column)) { + return graph.getNodeCount() != 0; + } else if (AttributeUtils.isEdgeColumn(column)) { + return graph.getEdgeCount() != 0; } return true; } - public boolean evaluate(Graph graph, Attributable attributable) { - return attributable.getAttributes().getValue(column.getIndex()) != null; + @Override + public boolean evaluate(Graph graph, Element element) { + return element.getAttribute(column) != null; } + @Override public void finish() { } + + public static class Node extends AttributeNonNullFilter implements NodeFilter { + + public Node(Column column) { + super(column); + } + } + + public static class Edge extends AttributeNonNullFilter implements EdgeFilter { + + public Edge(Column column) { + super(column); + } + } } } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/AttributeRangeBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/AttributeRangeBuilder.java index 6856b2055a..63df5d3bcf 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/AttributeRangeBuilder.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/AttributeRangeBuilder.java @@ -39,54 +39,65 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin.attribute; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import javax.swing.JPanel; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeController; -import org.gephi.data.attributes.api.AttributeModel; -import org.gephi.data.attributes.api.AttributeUtils; import org.gephi.filters.api.FilterLibrary; import org.gephi.filters.api.Range; import org.gephi.filters.plugin.AbstractAttributeFilter; import org.gephi.filters.plugin.AbstractAttributeFilterBuilder; -import org.gephi.filters.plugin.DynamicAttributesHelper; import org.gephi.filters.plugin.graph.RangeUI; -import org.gephi.filters.spi.*; -import org.gephi.graph.api.*; +import org.gephi.filters.spi.Category; +import org.gephi.filters.spi.CategoryBuilder; +import org.gephi.filters.spi.EdgeFilter; +import org.gephi.filters.spi.Filter; +import org.gephi.filters.spi.FilterBuilder; +import org.gephi.filters.spi.FilterProperty; +import org.gephi.filters.spi.NodeFilter; +import org.gephi.filters.spi.RangeFilter; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.project.api.Workspace; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = CategoryBuilder.class) public class AttributeRangeBuilder implements CategoryBuilder { private final static Category RANGE = new Category( - NbBundle.getMessage(AttributeRangeBuilder.class, "AttributeRangeBuilder.name"), - null, - FilterLibrary.ATTRIBUTES); + NbBundle.getMessage(AttributeRangeBuilder.class, "AttributeRangeBuilder.name"), + null, + FilterLibrary.ATTRIBUTES); + @Override public Category getCategory() { return RANGE; } - public FilterBuilder[] getBuilders() { - List builders = new ArrayList(); - AttributeModel am = Lookup.getDefault().lookup(AttributeController.class).getModel(); - List columns = new ArrayList(); - columns.addAll(Arrays.asList(am.getNodeTable().getColumns())); - columns.addAll(Arrays.asList(am.getEdgeTable().getColumns())); - for (AttributeColumn c : columns) { - if (AttributeUtils.getDefault().isNumberColumn(c) || AttributeUtils.getDefault().isDynamicNumberColumn(c)) { - AttributeRangeFilterBuilder b = new AttributeRangeFilterBuilder(c); - builders.add(b); + @Override + public FilterBuilder[] getBuilders(Workspace workspace) { + List builders = new ArrayList<>(); + GraphModel am = Lookup.getDefault().lookup(GraphController.class).getGraphModel(workspace); + List columns = new ArrayList<>(); + columns.addAll(am.getNodeTable().toList()); + columns.addAll(am.getEdgeTable().toList()); + for (Column c : columns) { + if (!c.isProperty() && !c.isArray()) { + if (AttributeUtils.isNumberType(c.getTypeClass())) { + AttributeRangeFilterBuilder b = new AttributeRangeFilterBuilder(c); + builders.add(b); + } } } return builders.toArray(new FilterBuilder[0]); @@ -94,17 +105,20 @@ public FilterBuilder[] getBuilders() { private static class AttributeRangeFilterBuilder extends AbstractAttributeFilterBuilder { - public AttributeRangeFilterBuilder(AttributeColumn column) { + public AttributeRangeFilterBuilder(Column column) { super(column, - RANGE, - NbBundle.getMessage(AttributeEqualBuilder.class, "AttributeRangeBuilder.description"), - null); + RANGE, + NbBundle.getMessage(AttributeEqualBuilder.class, "AttributeRangeBuilder.description"), + null); } - public AttributeRangeFilter getFilter() { - return new AttributeRangeFilter(column); + @Override + public AttributeRangeFilter getFilter(Workspace workspace) { + return AttributeUtils.isNodeColumn(column) ? new AttributeRangeFilter.Node(column) : + new AttributeRangeFilter.Edge(column); } + @Override public JPanel getPanel(Filter filter) { RangeUI ui = Lookup.getDefault().lookup(RangeUI.class); if (ui != null) { @@ -114,37 +128,32 @@ public JPanel getPanel(Filter filter) { } } - public static class AttributeRangeFilter extends AbstractAttributeFilter implements RangeFilter { + public static abstract class AttributeRangeFilter extends AbstractAttributeFilter + implements RangeFilter { private Range range; - private DynamicAttributesHelper dynamicHelper = new DynamicAttributesHelper(this, null); - public AttributeRangeFilter(AttributeColumn column) { + public AttributeRangeFilter(Column column) { super(NbBundle.getMessage(AttributeRangeBuilder.class, "AttributeRangeBuilder.name"), - column); + column); //Add property addProperty(Range.class, "range"); } + @Override public boolean init(Graph graph) { - HierarchicalGraph hg = (HierarchicalGraph) graph; - if (AttributeUtils.getDefault().isNodeColumn(column)) { - if (graph.getNodeCount() == 0) { - return false; - } - } else if (AttributeUtils.getDefault().isEdgeColumn(column)) { - if (hg.getTotalEdgeCount() == 0) { - return false; - } + if (AttributeUtils.isNodeColumn(column)) { + return graph.getNodeCount() != 0; + } else if (AttributeUtils.isEdgeColumn(column)) { + return graph.getEdgeCount() != 0; } - dynamicHelper = new DynamicAttributesHelper(this, hg); return true; } - public boolean evaluate(Graph graph, Attributable attributable) { - Object val = attributable.getAttributes().getValue(column.getIndex()); - val = dynamicHelper.getDynamicValue(val); + @Override + public boolean evaluate(Graph graph, Element element) { + Object val = element.getAttribute(column, graph.getView()); if (val != null) { return range.isInRange((Number) val); } @@ -152,23 +161,23 @@ public boolean evaluate(Graph graph, Attributable attributable) { } + @Override public void finish() { } + @Override public Number[] getValues(Graph graph) { - List vals = new ArrayList(); - if (AttributeUtils.getDefault().isNodeColumn(column)) { - for (Node n : graph.getNodes()) { - Object val = n.getNodeData().getAttributes().getValue(column.getIndex()); - val = dynamicHelper.getDynamicValue(val); + List vals = new ArrayList<>(); + if (AttributeUtils.isNodeColumn(column)) { + for (Element n : graph.getNodes()) { + Object val = n.getAttribute(column, graph.getView()); if (val != null) { vals.add((Number) val); } } } else { - for (Edge e : ((HierarchicalGraph) graph).getEdgesAndMetaEdges()) { - Object val = e.getEdgeData().getAttributes().getValue(column.getIndex()); - val = dynamicHelper.getDynamicValue(val); + for (Element e : graph.getEdges()) { + Object val = e.getAttribute(column, graph.getView()); if (val != null) { vals.add((Number) val); } @@ -177,6 +186,7 @@ public Number[] getValues(Graph graph) { return vals.toArray(new Number[0]); } + @Override public FilterProperty getRangeProperty() { return getProperties()[1]; } @@ -188,5 +198,19 @@ public Range getRange() { public void setRange(Range range) { this.range = range; } + + public static class Node extends AttributeRangeFilter implements NodeFilter { + + public Node(Column column) { + super(column); + } + } + + public static class Edge extends AttributeRangeFilter implements EdgeFilter { + + public Edge(Column column) { + super(column); + } + } } } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/ComparableArrayConverter.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/ComparableArrayConverter.java index aebb334627..ae9b44314f 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/ComparableArrayConverter.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/ComparableArrayConverter.java @@ -37,31 +37,33 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ package org.gephi.filters.plugin.attribute; - import java.util.List; - class ComparableArrayConverter { - private ComparableArrayConverter() {} + + private ComparableArrayConverter() { + } @SuppressWarnings("rawtypes") public static Comparable[] convert(Object[] objectArray) { - Comparable[] comparableArray = new Comparable [objectArray.length]; - for (int index = 0; index < comparableArray.length; index++) + Comparable[] comparableArray = new Comparable[objectArray.length]; + for (int index = 0; index < comparableArray.length; index++) { comparableArray[index] = (Comparable) objectArray[index]; + } return comparableArray; } @SuppressWarnings("rawtypes") public static Comparable[] convert(List objectList) { - Comparable[] compatableArray = new Comparable [objectList.size()]; - for (int index = 0; index < compatableArray.length; index++) + Comparable[] compatableArray = new Comparable[objectList.size()]; + for (int index = 0; index < compatableArray.length; index++) { compatableArray[index] = (Comparable) objectList.get(index); + } return compatableArray; } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/EqualBooleanUI.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/EqualBooleanUI.java index f279b93267..b029998e31 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/EqualBooleanUI.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/EqualBooleanUI.java @@ -38,16 +38,16 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.filters.plugin.attribute; import javax.swing.JPanel; /** - * * @author Mathieu Bastian */ public interface EqualBooleanUI { - public JPanel getPanel(AttributeEqualBuilder.EqualBooleanFilter filter); + JPanel getPanel(AttributeEqualBuilder.EqualBooleanFilter filter); } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/EqualNumberUI.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/EqualNumberUI.java index 198653c735..921a0d7448 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/EqualNumberUI.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/EqualNumberUI.java @@ -38,17 +38,16 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.filters.plugin.attribute; import javax.swing.JPanel; /** - * * @author Mathieu Bastian */ public interface EqualNumberUI { - public JPanel getPanel(AttributeEqualBuilder.EqualNumberFilter filter); + JPanel getPanel(AttributeEqualBuilder.EqualNumberFilter filter); } - diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/EqualStringUI.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/EqualStringUI.java index 17f8fe279c..21b0522c16 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/EqualStringUI.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/EqualStringUI.java @@ -38,17 +38,17 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.filters.plugin.attribute; import javax.swing.JPanel; import org.gephi.filters.plugin.attribute.AttributeEqualBuilder.EqualStringFilter; /** - * * @author Mathieu Bastian */ public interface EqualStringUI { - public JPanel getPanel(EqualStringFilter filter); + JPanel getPanel(EqualStringFilter filter); } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/ListAttributeContainsBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/ListAttributeContainsBuilder.java new file mode 100644 index 0000000000..79330228ca --- /dev/null +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/ListAttributeContainsBuilder.java @@ -0,0 +1,198 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.filters.plugin.attribute; + +import java.lang.reflect.Array; +import java.util.ArrayList; +import java.util.List; +import javax.swing.JPanel; +import org.gephi.filters.api.FilterLibrary; +import org.gephi.filters.plugin.AbstractAttributeFilter; +import org.gephi.filters.plugin.AbstractAttributeFilterBuilder; +import org.gephi.filters.spi.Category; +import org.gephi.filters.spi.CategoryBuilder; +import org.gephi.filters.spi.EdgeFilter; +import org.gephi.filters.spi.Filter; +import org.gephi.filters.spi.FilterBuilder; +import org.gephi.filters.spi.NodeFilter; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.project.api.Workspace; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +/** + * @author Sukankana Chakraborty + */ +@ServiceProvider(service = CategoryBuilder.class) +public class ListAttributeContainsBuilder implements CategoryBuilder { + + private final static Category CONTAINS = new Category( + NbBundle.getMessage(ListAttributeContainsBuilder.class, "AttributeContainsBuilder.name"), + null, + FilterLibrary.ATTRIBUTES); + + @Override + public Category getCategory() { + return CONTAINS; + } + + @Override + public FilterBuilder[] getBuilders(Workspace workspace) { + List builders = new ArrayList<>(); + GraphModel am = Lookup.getDefault().lookup(GraphController.class).getGraphModel(workspace); + for (Column col : am.getNodeTable()) { + if (col.isArray()) { + AttributeContainsFilterBuilder b = new AttributeContainsFilterBuilder(col); + builders.add(b); + } + } + for (Column col : am.getEdgeTable()) { + if (col.isArray()) { + AttributeContainsFilterBuilder b = new AttributeContainsFilterBuilder(col); + builders.add(b); + } + } + return builders.toArray(new FilterBuilder[0]); + } + + public static class AttributeContainsFilterBuilder extends AbstractAttributeFilterBuilder { + + public AttributeContainsFilterBuilder(Column column) { + super(column, + CONTAINS, + NbBundle.getMessage(AttributeEqualBuilder.class, "AttributeContainsBuilder.description"), + null); + } + + @Override + public AttributeContainsFilter getFilter(Workspace workspace) { + return AttributeUtils.isNodeColumn(column) ? new AttributeContainsFilter.Node(column) : + new AttributeContainsFilter.Edge(column); + } + + @Override + public JPanel getPanel(Filter filter) { + return Lookup.getDefault().lookup(ListContainsUI.class).getPanel((AttributeContainsFilter) filter); + } + } + + public static abstract class AttributeContainsFilter extends AbstractAttributeFilter { + + private Object match; + + public AttributeContainsFilter(Column column) { + super(NbBundle.getMessage(AttributeEqualBuilder.class, "AttributeContainsBuilder.name"), + column); + + addProperty(Object.class, "match"); + } + + @Override + public boolean init(Graph graph) { + if (AttributeUtils.isNodeColumn(column)) { + return graph.getNodeCount() != 0; + } else if (AttributeUtils.isEdgeColumn(column)) { + return graph.getEdgeCount() != 0; + } + return true; + } + + @Override + public boolean evaluate(Graph graph, Element element) { + if (match != null) { + Object array = element.getAttribute(column); + if (array != null) { + int length = Array.getLength(array); + Class componentType = array.getClass().getComponentType(); + Class matchType = match.getClass(); + boolean sameType = componentType.equals(matchType); + for (int i = 0; i < length; i++) { + Object val = Array.get(array, i); + if (sameType) { + if (val.equals(match)) { + return true; + } + } else { + if (val.equals(AttributeUtils.parse(match.toString(), componentType))) { + return true; + } + } + } + } + } + return false; + } + + @Override + public void finish() { + } + + public void setMatch(Object match) { + this.match = match; + } + + public Object getMatch() { + return match; + } + + public static class Node extends AttributeContainsFilter implements NodeFilter { + + public Node(Column column) { + super(column); + } + } + + public static class Edge extends AttributeContainsFilter implements EdgeFilter { + + public Edge(Column column) { + super(column); + } + } + } +} diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/ListContainsUI.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/ListContainsUI.java new file mode 100644 index 0000000000..d19c07b1fe --- /dev/null +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/attribute/ListContainsUI.java @@ -0,0 +1,8 @@ +package org.gephi.filters.plugin.attribute; + +import javax.swing.JPanel; + +public interface ListContainsUI { + + JPanel getPanel(ListAttributeContainsBuilder.AttributeContainsFilter filter); +} diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/dynamic/DynamicRangeBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/dynamic/DynamicRangeBuilder.java index c3bebf272f..0ef152a2b2 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/dynamic/DynamicRangeBuilder.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/dynamic/DynamicRangeBuilder.java @@ -39,95 +39,96 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin.dynamic; import java.util.ArrayList; import java.util.List; import javax.swing.Icon; import javax.swing.JPanel; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeController; -import org.gephi.data.attributes.api.AttributeModel; -import org.gephi.data.attributes.type.TimeInterval; -import org.gephi.dynamic.api.DynamicController; -import org.gephi.dynamic.api.DynamicModel; -import org.gephi.dynamic.api.DynamicModelEvent; -import org.gephi.dynamic.api.DynamicModelListener; import org.gephi.filters.api.Range; import org.gephi.filters.spi.Category; import org.gephi.filters.spi.CategoryBuilder; -import org.gephi.filters.spi.EdgeFilter; +import org.gephi.filters.spi.ComplexFilter; import org.gephi.filters.spi.Filter; import org.gephi.filters.spi.FilterBuilder; import org.gephi.filters.spi.FilterProperty; -import org.gephi.filters.spi.NodeFilter; import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Element; import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Interval; import org.gephi.graph.api.Node; -import org.gephi.timeline.api.TimelineController; +import org.gephi.graph.api.TimeRepresentation; +import org.gephi.graph.api.types.IntervalSet; +import org.gephi.graph.api.types.TimestampSet; +import org.gephi.project.api.Workspace; +import org.openide.util.Exceptions; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = CategoryBuilder.class) public class DynamicRangeBuilder implements CategoryBuilder { private final static Category DYNAMIC = new Category( - NbBundle.getMessage(DynamicRangeBuilder.class, "DynamicRangeBuilder.category"), - null, - null); + NbBundle.getMessage(DynamicRangeBuilder.class, "DynamicRangeBuilder.category"), + null, + null); + @Override public Category getCategory() { return DYNAMIC; } - public FilterBuilder[] getBuilders() { - List builders = new ArrayList(); - AttributeModel am = Lookup.getDefault().lookup(AttributeController.class).getModel(); - AttributeColumn nodeColumn = am.getNodeTable().getColumn(DynamicModel.TIMEINTERVAL_COLUMN); - AttributeColumn edgeColumn = am.getEdgeTable().getColumn(DynamicModel.TIMEINTERVAL_COLUMN); - if (nodeColumn != null || edgeColumn != null) { - builders.add(new DynamicRangeFilterBuilder(nodeColumn, edgeColumn)); + @Override + public FilterBuilder[] getBuilders(Workspace workspace) { + List builders = new ArrayList<>(); + GraphModel am = Lookup.getDefault().lookup(GraphController.class).getGraphModel(workspace); + if (am.isDynamic()) { + builders.add(new DynamicRangeFilterBuilder(am)); } return builders.toArray(new FilterBuilder[0]); } private static class DynamicRangeFilterBuilder implements FilterBuilder { - private final AttributeColumn nodeColumn; - private final AttributeColumn edgeColumn; + private final GraphModel graphModel; - public DynamicRangeFilterBuilder(AttributeColumn nodeColumn, AttributeColumn edgeColumn) { - this.nodeColumn = nodeColumn; - this.edgeColumn = edgeColumn; + public DynamicRangeFilterBuilder(GraphModel graphModel) { + this.graphModel = graphModel; } + @Override public Category getCategory() { return DYNAMIC; } + @Override public String getName() { return "Time Interval"; } + @Override public Icon getIcon() { return null; } + @Override public String getDescription() { return null; } - public DynamicRangeFilter getFilter() { - TimelineController timelineController = Lookup.getDefault().lookup(TimelineController.class); - DynamicController dynamicController = Lookup.getDefault().lookup(DynamicController.class); - return new DynamicRangeFilter(timelineController, dynamicController, nodeColumn, edgeColumn); + @Override + public DynamicRangeFilter getFilter(Workspace workspace) { + return new DynamicRangeFilter(graphModel); } + @Override public JPanel getPanel(Filter filter) { final DynamicRangeFilter dynamicRangeFilter = (DynamicRangeFilter) filter; DynamicRangeUI ui = Lookup.getDefault().lookup(DynamicRangeUI.class); @@ -137,91 +138,91 @@ public JPanel getPanel(Filter filter) { return null; } + @Override public void destroy(Filter filter) { - ((DynamicRangeFilter) filter).destroy(); } } - public static class DynamicRangeFilter implements NodeFilter, EdgeFilter, DynamicModelListener { + public static class DynamicRangeFilter implements ComplexFilter { - private AttributeColumn nodeColumn; - private AttributeColumn edgeColumn; - private DynamicController dynamicController; - private DynamicModel dynamicModel; - private TimelineController timelineController; - private TimeInterval visibleInterval; + private final TimeRepresentation timeRepresentation; private FilterProperty[] filterProperties; - private Range range; + private Interval visibleInterval; + private Range range = new Range(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); private boolean keepNull = true; - public DynamicRangeFilter(TimelineController timelineController, DynamicController dynamicController, AttributeColumn nodeColumn, AttributeColumn edgeColumn) { - this.nodeColumn = nodeColumn; - this.edgeColumn = edgeColumn; - this.dynamicController = dynamicController; - this.dynamicModel = dynamicController.getModel(); - this.timelineController = timelineController; + public DynamicRangeFilter(GraphModel graphModel) { + this.timeRepresentation = graphModel.getConfiguration().getTimeRepresentation(); } - public boolean init(Graph graph) { - dynamicController.addModelListener(this); - visibleInterval = dynamicModel.getVisibleInterval(); - return true; - } + @Override + public Graph filter(Graph graph) { + visibleInterval = new Interval(range.getLowerDouble(), range.getUpperDouble()); - public boolean evaluate(Graph graph, Node node) { - if (nodeColumn != null) { - Object obj = node.getNodeData().getAttributes().getValue(nodeColumn.getIndex()); - if (obj != null) { - TimeInterval timeInterval = (TimeInterval) obj; - return timeInterval.isInRange(visibleInterval.getLow(), visibleInterval.getHigh()); + List toRemoveNodes = new ArrayList<>(); + for (Node n : graph.getNodes()) { + if (!evaluateElement(n)) { + toRemoveNodes.add(n); } - return keepNull; } - return true; - } + graph.removeAllNodes(toRemoveNodes); - public boolean evaluate(Graph graph, Edge edge) { - if (edgeColumn != null) { - Object obj = edge.getEdgeData().getAttributes().getValue(edgeColumn.getIndex()); - if (obj != null) { - TimeInterval timeInterval = (TimeInterval) obj; - return timeInterval.isInRange(visibleInterval.getLow(), visibleInterval.getHigh()); + List toRemoveEdge = new ArrayList<>(); + for (Edge e : graph.getEdges()) { + if (!evaluateElement(e)) { + toRemoveEdge.add(e); } - return keepNull; } - return true; - } - - public void finish() { + graph.removeAllEdges(toRemoveEdge); + + graph.getModel().setTimeInterval(graph.getView(), visibleInterval); + + return graph; + } + + private boolean evaluateElement(Element element) { + if (timeRepresentation.equals(TimeRepresentation.INTERVAL)) { + IntervalSet timeSet = (IntervalSet) element.getAttribute("timeset"); + if (timeSet != null) { + for (Interval i : timeSet.toArray()) { + if (visibleInterval.compareTo(i) == 0) { + return true; + } + } + } else return keepNull; + } else { + TimestampSet timeSet = (TimestampSet) element.getAttribute("timeset"); + if (timeSet != null) { + for (double t : timeSet.toPrimitiveArray()) { + if (visibleInterval.compareTo(t) == 0) { + return true; + } + } + } else return keepNull; + } + return false; } + @Override public String getName() { return NbBundle.getMessage(DynamicRangeBuilder.class, "DynamicRangeBuilder.name"); } + @Override public FilterProperty[] getProperties() { if (filterProperties == null) { filterProperties = new FilterProperty[0]; try { - filterProperties = new FilterProperty[]{ + filterProperties = new FilterProperty[] { FilterProperty.createProperty(this, Range.class, "range"), FilterProperty.createProperty(this, Boolean.class, "keepNull")}; } catch (Exception ex) { - ex.printStackTrace(); + Exceptions.printStackTrace(ex); } } return filterProperties; } - public void dynamicModelChanged(DynamicModelEvent event) { - switch (event.getEventType()) { - case VISIBLE_INTERVAL: - TimeInterval interval = (TimeInterval) event.getData(); - getProperties()[0].setValue(new Range(interval.getLow(), interval.getHigh())); - break; - } - } - public FilterProperty getRangeProperty() { return getProperties()[0]; } @@ -235,18 +236,14 @@ public void setKeepNull(boolean keepNull) { } public Range getRange() { - if (visibleInterval != null) { - return new Range(visibleInterval.getLow(), visibleInterval.getHigh()); - } - return null; + return range; } public void setRange(Range range) { - dynamicController.setVisibleInterval(range.getLowerDouble(), range.getUpperDouble()); + this.range = range; } public void destroy() { - dynamicController.removeModelListener(this); } } } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/dynamic/DynamicRangeUI.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/dynamic/DynamicRangeUI.java index bea54ff142..9d668e8dc2 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/dynamic/DynamicRangeUI.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/dynamic/DynamicRangeUI.java @@ -38,17 +38,17 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.filters.plugin.dynamic; import javax.swing.JPanel; import org.gephi.filters.plugin.dynamic.DynamicRangeBuilder.DynamicRangeFilter; /** - * * @author mbastian */ public interface DynamicRangeUI { - public JPanel getPanel(DynamicRangeFilter filter); + JPanel getPanel(DynamicRangeFilter filter); } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/edge/EdgeTypeBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/edge/EdgeTypeBuilder.java new file mode 100644 index 0000000000..e398e70b1e --- /dev/null +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/edge/EdgeTypeBuilder.java @@ -0,0 +1,161 @@ +/* +Copyright 2008-2012 Gephi +Authors : Luiz Ribeiro +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.filters.plugin.edge; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Objects; +import javax.swing.Icon; +import javax.swing.JPanel; +import org.gephi.filters.api.FilterLibrary; +import org.gephi.filters.plugin.AbstractFilter; +import org.gephi.filters.spi.Category; +import org.gephi.filters.spi.EdgeFilter; +import org.gephi.filters.spi.Filter; +import org.gephi.filters.spi.FilterBuilder; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.project.api.Workspace; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +@ServiceProvider(service = FilterBuilder.class) +public class EdgeTypeBuilder implements FilterBuilder { + + @Override + public Category getCategory() { + return FilterLibrary.EDGE; + } + + @Override + public String getName() { + return NbBundle.getMessage(EdgeTypeBuilder.class, "EdgeTypeBuilder.name"); + } + + @Override + public Icon getIcon() { + return null; + } + + @Override + public String getDescription() { + return NbBundle.getMessage(EdgeTypeBuilder.class, "EdgeTypeBuilder.description"); + } + + @Override + public Filter getFilter(Workspace workspace) { + GraphModel am = Lookup.getDefault().lookup(GraphController.class).getGraphModel(workspace); + return new EdgeTypeFilter(am); + } + + @Override + public JPanel getPanel(Filter filter) { + final EdgeTypeBuilder.EdgeTypeFilter edgeTypeFilter = (EdgeTypeBuilder.EdgeTypeFilter) filter; + EdgeTypeUI ui = Lookup.getDefault().lookup(EdgeTypeUI.class); + if (ui != null) { + return ui.getPanel(edgeTypeFilter); + } + return null; + } + + @Override + public void destroy(Filter filter) { + } + + public static class EdgeTypeFilter extends AbstractFilter implements EdgeFilter { + + private final GraphModel graphModel; + private Integer type; + + public EdgeTypeFilter(GraphModel graphModel) { + super(NbBundle.getMessage(EdgeTypeBuilder.class, "EdgeTypeBuilder.name")); + this.graphModel = graphModel; + + addProperty(Integer.class, "type"); + } + + @Override + public boolean init(Graph graph) { + return true; + } + + @Override + public boolean evaluate(Graph graph, Edge edge) { + return Objects.equals(type, edge.getType()); + } + + @Override + public void finish() { + } + + public Integer getType() { + return type; + } + + public void setType(Integer type) { + this.type = type; + } + + public Collection getEdgeTypeLabels() { + Graph graph = graphModel.getGraph(); + Object[] labels = graphModel.getEdgeTypeLabels(); + ArrayList col = new ArrayList<>(labels.length); + for (Object l : labels) { + if (graph.getEdgeCount(graphModel.getEdgeType(l)) > 0) { + col.add(l); + } + } + return col; + } + + public void setEdgeTypeLabel(Object obj) { + int id = graphModel.getEdgeType(obj); + if (id != -1) { + getProperties()[0].setValue(id); + } + } + } +} diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/edge/EdgeTypeUI.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/edge/EdgeTypeUI.java new file mode 100644 index 0000000000..4b0d7e8cf5 --- /dev/null +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/edge/EdgeTypeUI.java @@ -0,0 +1,53 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.filters.plugin.edge; + +import javax.swing.JPanel; + +/** + * @author mbastian + */ +public interface EdgeTypeUI { + + JPanel getPanel(EdgeTypeBuilder.EdgeTypeFilter filter); +} diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/edge/EdgeWeightBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/edge/EdgeWeightBuilder.java index 0e7d4fc1de..ffcf8cc79c 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/edge/EdgeWeightBuilder.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/edge/EdgeWeightBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin.edge; import java.util.ArrayList; @@ -48,43 +49,52 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.filters.api.FilterLibrary; import org.gephi.filters.api.Range; import org.gephi.filters.plugin.AbstractFilter; -import org.gephi.filters.plugin.DynamicAttributesHelper; import org.gephi.filters.plugin.graph.RangeUI; -import org.gephi.filters.spi.*; +import org.gephi.filters.spi.Category; +import org.gephi.filters.spi.EdgeFilter; +import org.gephi.filters.spi.Filter; +import org.gephi.filters.spi.FilterBuilder; +import org.gephi.filters.spi.FilterProperty; +import org.gephi.filters.spi.RangeFilter; import org.gephi.graph.api.Edge; import org.gephi.graph.api.Graph; -import org.gephi.graph.api.HierarchicalGraph; +import org.gephi.project.api.Workspace; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = FilterBuilder.class) public class EdgeWeightBuilder implements FilterBuilder { + @Override public Category getCategory() { return FilterLibrary.EDGE; } + @Override public String getName() { return NbBundle.getMessage(EdgeWeightBuilder.class, "EdgeWeightBuilder.name"); } + @Override public Icon getIcon() { return null; } + @Override public String getDescription() { return NbBundle.getMessage(EdgeWeightBuilder.class, "EdgeWeightBuilder.description"); } - public Filter getFilter() { + @Override + public Filter getFilter(Workspace workspace) { return new EdgeWeightFilter(); } + @Override public JPanel getPanel(Filter filter) { RangeUI ui = Lookup.getDefault().lookup(RangeUI.class); if (ui != null) { @@ -93,13 +103,13 @@ public JPanel getPanel(Filter filter) { return null; } + @Override public void destroy(Filter filter) { } public static class EdgeWeightFilter extends AbstractFilter implements RangeFilter, EdgeFilter { private Range range; - private DynamicAttributesHelper dynamicHelper = new DynamicAttributesHelper(this, null); public EdgeWeightFilter() { super(NbBundle.getMessage(EdgeWeightBuilder.class, "EdgeWeightBuilder.name")); @@ -107,33 +117,32 @@ public EdgeWeightFilter() { addProperty(Range.class, "range"); } + @Override public boolean init(Graph graph) { - HierarchicalGraph hgraph = (HierarchicalGraph) graph; - if (hgraph.getTotalEdgeCount() == 0) { - return false; - } - dynamicHelper = new DynamicAttributesHelper(this, hgraph); - return true; + return graph.getEdgeCount() != 0; } + @Override public boolean evaluate(Graph graph, Edge edge) { - float weight = dynamicHelper.getEdgeWeight(edge); + double weight = edge.getWeight(graph.getView()); return range.isInRange(weight); } + @Override public void finish() { } + @Override public Number[] getValues(Graph graph) { - HierarchicalGraph hgraph = (HierarchicalGraph) graph; - List values = new ArrayList(); - for (Edge e : hgraph.getEdgesAndMetaEdges()) { - float weight = dynamicHelper.getEdgeWeight(e); + List values = new ArrayList<>(); + for (Edge e : graph.getEdges()) { + double weight = e.getWeight(graph.getView()); values.add(weight); } return values.toArray(new Number[0]); } + @Override public FilterProperty getRangeProperty() { return getProperties()[0]; } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/edge/MutualEdgeBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/edge/MutualEdgeBuilder.java new file mode 100644 index 0000000000..a978a4f352 --- /dev/null +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/edge/MutualEdgeBuilder.java @@ -0,0 +1,124 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.filters.plugin.edge; + +import javax.swing.Icon; +import javax.swing.JPanel; +import org.gephi.filters.api.FilterLibrary; +import org.gephi.filters.plugin.AbstractFilter; +import org.gephi.filters.spi.Category; +import org.gephi.filters.spi.EdgeFilter; +import org.gephi.filters.spi.Filter; +import org.gephi.filters.spi.FilterBuilder; +import org.gephi.graph.api.DirectedGraph; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Graph; +import org.gephi.project.api.Workspace; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +/** + * @author Mathieu Bastian + */ +@ServiceProvider(service = FilterBuilder.class) +public class MutualEdgeBuilder implements FilterBuilder { + + @Override + public Category getCategory() { + return FilterLibrary.EDGE; + } + + @Override + public String getName() { + return NbBundle.getMessage(MutualEdgeBuilder.class, "MutualEdgeBuilder.name"); + } + + @Override + public Icon getIcon() { + return null; + } + + @Override + public String getDescription() { + return NbBundle.getMessage(MutualEdgeBuilder.class, "MutualEdgeBuilder.description"); + } + + @Override + public Filter getFilter(Workspace workspace) { + return new MutualEdgeFilter(); + } + + @Override + public JPanel getPanel(Filter filter) { + return null; + } + + @Override + public void destroy(Filter filter) { + } + + public static class MutualEdgeFilter extends AbstractFilter implements EdgeFilter { + + public MutualEdgeFilter() { + super(NbBundle.getMessage(MutualEdgeBuilder.class, "MutualEdgeBuilder.name")); + } + + @Override + public boolean init(Graph graph) { + return !graph.isUndirected(); + } + + @Override + public boolean evaluate(Graph graph, Edge edge) { + if (edge.isDirected()) { + DirectedGraph directedGraph = (DirectedGraph) graph; + return directedGraph.getMutualEdge(edge) != null; + } + return false; + } + + @Override + public void finish() { + } + } +} diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/edge/SelfLoopFilterBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/edge/SelfLoopFilterBuilder.java index c8896d54fd..c880a977ec 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/edge/SelfLoopFilterBuilder.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/edge/SelfLoopFilterBuilder.java @@ -39,68 +39,85 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin.edge; import javax.swing.Icon; import javax.swing.JPanel; import org.gephi.filters.api.FilterLibrary; -import org.gephi.filters.spi.*; +import org.gephi.filters.spi.Category; +import org.gephi.filters.spi.EdgeFilter; +import org.gephi.filters.spi.Filter; +import org.gephi.filters.spi.FilterBuilder; +import org.gephi.filters.spi.FilterProperty; import org.gephi.graph.api.Edge; import org.gephi.graph.api.Graph; +import org.gephi.project.api.Workspace; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Luiz Ribeiro */ @ServiceProvider(service = FilterBuilder.class) public class SelfLoopFilterBuilder implements FilterBuilder { + @Override public Category getCategory() { return FilterLibrary.EDGE; } + @Override public String getName() { return NbBundle.getMessage(SelfLoopFilterBuilder.class, "SelfLoopFilterBuilder.name"); } + @Override public Icon getIcon() { return null; } + @Override public String getDescription() { return NbBundle.getMessage(SelfLoopFilterBuilder.class, "SelfLoopFilterBuilder.description"); } - public Filter getFilter() { + @Override + public Filter getFilter(Workspace workspace) { return new SelfLoopFilter(); } + @Override public JPanel getPanel(Filter filter) { return null; } + @Override public void destroy(Filter filter) { } public static class SelfLoopFilter implements EdgeFilter { + @Override public boolean init(Graph graph) { return true; } + @Override public String getName() { return NbBundle.getMessage(SelfLoopFilterBuilder.class, "SelfLoopFilterBuilder.name"); } + @Override public boolean evaluate(Graph graph, Edge edge) { return !edge.isSelfLoop(); } + @Override public void finish() { } + @Override public FilterProperty[] getProperties() { return null; } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/DegreeRangeBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/DegreeRangeBuilder.java index 256cefb835..dcca8cabae 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/DegreeRangeBuilder.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/DegreeRangeBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin.graph; import java.util.ArrayList; @@ -48,41 +49,51 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.filters.api.FilterLibrary; import org.gephi.filters.api.Range; import org.gephi.filters.plugin.AbstractFilter; -import org.gephi.filters.spi.*; +import org.gephi.filters.spi.Category; +import org.gephi.filters.spi.Filter; +import org.gephi.filters.spi.FilterBuilder; +import org.gephi.filters.spi.FilterProperty; +import org.gephi.filters.spi.NodeFilter; +import org.gephi.filters.spi.RangeFilter; import org.gephi.graph.api.Graph; -import org.gephi.graph.api.HierarchicalGraph; import org.gephi.graph.api.Node; +import org.gephi.project.api.Workspace; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = FilterBuilder.class) public class DegreeRangeBuilder implements FilterBuilder { + @Override public Category getCategory() { return FilterLibrary.TOPOLOGY; } + @Override public String getName() { return NbBundle.getMessage(DegreeRangeBuilder.class, "DegreeRangeBuilder.name"); } + @Override public Icon getIcon() { return null; } + @Override public String getDescription() { return NbBundle.getMessage(DegreeRangeBuilder.class, "DegreeRangeBuilder.description"); } - public DegreeRangeFilter getFilter() { + @Override + public DegreeRangeFilter getFilter(Workspace workspace) { return new DegreeRangeFilter(); } + @Override public JPanel getPanel(Filter filter) { RangeUI ui = Lookup.getDefault().lookup(RangeUI.class); if (ui != null) { @@ -91,6 +102,7 @@ public JPanel getPanel(Filter filter) { return null; } + @Override public void destroy(Filter filter) { } @@ -104,31 +116,32 @@ public DegreeRangeFilter() { addProperty(Range.class, "range"); } + @Override public boolean init(Graph graph) { - if (graph.getNodeCount() == 0) { - return false; - } - return true; + return graph.getNodeCount() != 0; } + @Override public boolean evaluate(Graph graph, Node node) { - int degree = ((HierarchicalGraph) graph).getTotalDegree(node); + int degree = graph.getDegree(node); return range.isInRange(degree); } + @Override public void finish() { } + @Override public Number[] getValues(Graph graph) { - HierarchicalGraph hgraph = (HierarchicalGraph) graph; - List values = new ArrayList(((HierarchicalGraph) graph).getNodeCount()); - for (Node n : hgraph.getNodes()) { - int degree = hgraph.getTotalDegree(n); + List values = new ArrayList<>(graph.getNodeCount()); + for (Node n : graph.getNodes()) { + int degree = graph.getDegree(n); values.add(degree); } return values.toArray(new Number[0]); } + @Override public FilterProperty getRangeProperty() { return getProperties()[0]; } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/EgoBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/EgoBuilder.java index 55f1d67fc6..f09329df54 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/EgoBuilder.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/EgoBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin.graph; import java.util.ArrayList; @@ -54,39 +55,45 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.filters.spi.FilterBuilder; import org.gephi.filters.spi.FilterProperty; import org.gephi.graph.api.Graph; -import org.gephi.graph.api.HierarchicalGraph; import org.gephi.graph.api.Node; +import org.gephi.project.api.Workspace; +import org.openide.util.Exceptions; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = FilterBuilder.class) public class EgoBuilder implements FilterBuilder { + @Override public Category getCategory() { return FilterLibrary.TOPOLOGY; } + @Override public String getName() { return NbBundle.getMessage(EgoBuilder.class, "EgoBuilder.name"); } + @Override public Icon getIcon() { return null; } + @Override public String getDescription() { return NbBundle.getMessage(EgoBuilder.class, "EgoBuilder.description"); } - public Filter getFilter() { + @Override + public Filter getFilter(Workspace workspace) { return new EgoFilter(); } + @Override public JPanel getPanel(Filter filter) { EgoUI ui = Lookup.getDefault().lookup(EgoUI.class); if (ui != null) { @@ -95,6 +102,7 @@ public JPanel getPanel(Filter filter) { return null; } + @Override public void destroy(Filter filter) { } @@ -104,37 +112,36 @@ public static class EgoFilter implements ComplexFilter { private boolean self = true; private int depth = 1; + @Override public Graph filter(Graph graph) { - HierarchicalGraph hgraph = (HierarchicalGraph) graph; - String str = pattern.toLowerCase(); - List nodes = new ArrayList(); - for (Node n : hgraph.getNodes()) { - if (n.getNodeData().getId().toLowerCase().equals(str)) { + List nodes = new ArrayList<>(); + for (Node n : graph.getNodes()) { + if (n.getId().toString().toLowerCase().equals(str)) { nodes.add(n); - } else if ((n.getNodeData().getLabel() != null) && n.getNodeData().getLabel().toLowerCase().equals(str)) { + } else if ((n.getLabel() != null) && n.getLabel().toLowerCase().equals(str)) { nodes.add(n); } } - Set result = new HashSet(); + Set result = new HashSet<>(); - Set neighbours = new HashSet(); - neighbours.addAll(nodes); + Set neighbours = new HashSet<>(nodes); for (int i = 0; i < depth; i++) { + boolean newNodes = false; Node[] nei = neighbours.toArray(new Node[0]); neighbours.clear(); for (Node n : nei) { - for (Node neighbor : hgraph.getNeighbors(n)) { + for (Node neighbor : graph.getNeighbors(n)) { if (!result.contains(neighbor)) { neighbours.add(neighbor); - result.add(neighbor); + newNodes = result.add(neighbor) || newNodes; } } } - if (neighbours.isEmpty()) { + if (!newNodes || neighbours.isEmpty()) { break; } } @@ -145,27 +152,29 @@ public Graph filter(Graph graph) { result.removeAll(nodes); } - for (Node node : hgraph.getNodes().toArray()) { + for (Node node : graph.getNodes().toArray()) { if (!result.contains(node)) { - hgraph.removeNode(node); + graph.removeNode(node); } } - return hgraph; + return graph; } + @Override public String getName() { return NbBundle.getMessage(EgoBuilder.class, "EgoBuilder.name"); } + @Override public FilterProperty[] getProperties() { try { - return new FilterProperty[]{ - FilterProperty.createProperty(this, String.class, "pattern"), - FilterProperty.createProperty(this, Integer.class, "depth"), - FilterProperty.createProperty(this, Boolean.class, "self")}; + return new FilterProperty[] { + FilterProperty.createProperty(this, String.class, "pattern"), + FilterProperty.createProperty(this, Integer.class, "depth"), + FilterProperty.createProperty(this, Boolean.class, "self")}; } catch (NoSuchMethodException ex) { - ex.printStackTrace(); + Exceptions.printStackTrace(ex); } return new FilterProperty[0]; } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/EgoUI.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/EgoUI.java index 7eab617c8d..f92e643b18 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/EgoUI.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/EgoUI.java @@ -38,16 +38,16 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.filters.plugin.graph; import javax.swing.JPanel; /** - * * @author Mathieu Bastian */ public interface EgoUI { - public JPanel getPanel(EgoBuilder.EgoFilter egoFilter); + JPanel getPanel(EgoBuilder.EgoFilter egoFilter); } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/GiantComponentBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/GiantComponentBuilder.java index ba173f9682..2c6d63249d 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/GiantComponentBuilder.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/GiantComponentBuilder.java @@ -39,103 +39,116 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin.graph; import javax.swing.Icon; import javax.swing.JPanel; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeController; -import org.gephi.data.attributes.api.AttributeModel; import org.gephi.filters.api.FilterLibrary; import org.gephi.filters.spi.Category; import org.gephi.filters.spi.Filter; import org.gephi.filters.spi.FilterBuilder; import org.gephi.filters.spi.FilterProperty; import org.gephi.filters.spi.NodeFilter; +import org.gephi.graph.api.Column; import org.gephi.graph.api.Graph; -import org.gephi.graph.api.HierarchicalUndirectedGraph; import org.gephi.graph.api.Node; import org.gephi.graph.api.UndirectedGraph; +import org.gephi.project.api.Workspace; import org.gephi.statistics.plugin.ConnectedComponents; -import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = FilterBuilder.class) public class GiantComponentBuilder implements FilterBuilder { + @Override public Category getCategory() { return FilterLibrary.TOPOLOGY; } + @Override public String getName() { return NbBundle.getMessage(GiantComponentBuilder.class, "GiantComponentBuilder.name"); } + @Override public Icon getIcon() { return null; } + @Override public String getDescription() { return NbBundle.getMessage(GiantComponentBuilder.class, "GiantComponentBuilder.description"); } - public Filter getFilter() { + @Override + public Filter getFilter(Workspace workspace) { return new GiantComponentFilter(); } + @Override public JPanel getPanel(Filter filter) { return null; } + @Override public void destroy(Filter filter) { } public static class GiantComponentFilter implements NodeFilter { - private AttributeModel attributeModel; + private static final String GIANT_COMPONENT_FILTER = "giantcomponent"; + private int componentId; - private AttributeColumn column; + private Column column; public GiantComponentFilter() { } + @Override public boolean init(Graph graph) { ConnectedComponents cc = new ConnectedComponents(); - HierarchicalUndirectedGraph undirectedGraph = null; - if (cc instanceof UndirectedGraph) { - undirectedGraph = (HierarchicalUndirectedGraph) graph; - } else { - undirectedGraph = graph.getView().getGraphModel().getHierarchicalUndirectedGraph(graph.getView()); - } + UndirectedGraph undirectedGraph = graph.getModel().getUndirectedGraph(graph.getView()); - attributeModel = Lookup.getDefault().lookup(AttributeController.class).getModel(graph.getGraphModel().getWorkspace()); - cc.weaklyConnected(undirectedGraph, attributeModel); + column = graph.getModel().getNodeTable().getColumn(GIANT_COMPONENT_FILTER); + if (column == null) { + column = graph.getModel().getNodeTable().addColumn(GIANT_COMPONENT_FILTER, Integer.class); + } + graph.readLock(); + try { + cc.weaklyConnected(undirectedGraph, column); + } finally { + graph.readUnlock(); + } componentId = cc.getGiantComponent(); - column = attributeModel.getNodeTable().getColumn(ConnectedComponents.WEAKLY); return column != null && componentId != -1; } + @Override public boolean evaluate(Graph graph, Node node) { - Integer component = (Integer) node.getNodeData().getAttributes().getValue(column.getIndex()); + Integer component = (Integer) node.getAttribute(column); if (component != null) { return component.equals(componentId); } return false; } + @Override public void finish() { + column.getTable().removeColumn(column); } + @Override public String getName() { return NbBundle.getMessage(GiantComponentBuilder.class, "GiantComponentBuilder.name"); } + @Override public FilterProperty[] getProperties() { return new FilterProperty[0]; } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/HasSelfLoopBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/HasSelfLoopBuilder.java new file mode 100644 index 0000000000..ae7e6a5d08 --- /dev/null +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/HasSelfLoopBuilder.java @@ -0,0 +1,137 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.filters.plugin.graph; + +import javax.swing.Icon; +import javax.swing.JPanel; +import org.gephi.filters.api.FilterLibrary; +import org.gephi.filters.spi.Category; +import org.gephi.filters.spi.Filter; +import org.gephi.filters.spi.FilterBuilder; +import org.gephi.filters.spi.FilterProperty; +import org.gephi.filters.spi.NodeFilter; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.EdgeIterable; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Node; +import org.gephi.project.api.Workspace; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +/** + * @author Mathieu Bastian + */ +@ServiceProvider(service = FilterBuilder.class) +public class HasSelfLoopBuilder implements FilterBuilder { + + @Override + public Category getCategory() { + return FilterLibrary.TOPOLOGY; + } + + @Override + public String getName() { + return NbBundle.getMessage(HasSelfLoopBuilder.class, "HasSelfLoopBuilder.name"); + } + + @Override + public Icon getIcon() { + return null; + } + + @Override + public String getDescription() { + return NbBundle.getMessage(HasSelfLoopBuilder.class, "HasSelfLoopBuilder.description"); + } + + @Override + public Filter getFilter(Workspace workspace) { + return new HasSelfLoopFilter(); + } + + @Override + public JPanel getPanel(Filter filter) { + return null; + } + + @Override + public void destroy(Filter filter) { + } + + public static class HasSelfLoopFilter implements NodeFilter { + + public HasSelfLoopFilter() { + } + + @Override + public boolean init(Graph graph) { + return true; + } + + @Override + public boolean evaluate(Graph graph, Node node) { + EdgeIterable edgeIterable = graph.getEdges(node); + for (Edge e : edgeIterable) { + if (e.isSelfLoop()) { + edgeIterable.doBreak(); + return true; + } + } + return false; + } + + @Override + public void finish() { + } + + @Override + public String getName() { + return NbBundle.getMessage(HasSelfLoopBuilder.class, "HasSelfLoopBuilder.name"); + } + + @Override + public FilterProperty[] getProperties() { + return new FilterProperty[0]; + } + } +} diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/InDegreeRangeBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/InDegreeRangeBuilder.java index aa0957a8cd..ea0b305787 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/InDegreeRangeBuilder.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/InDegreeRangeBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin.graph; import java.util.ArrayList; @@ -48,39 +49,52 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.filters.api.FilterLibrary; import org.gephi.filters.api.Range; import org.gephi.filters.plugin.AbstractFilter; -import org.gephi.filters.spi.*; -import org.gephi.graph.api.*; +import org.gephi.filters.spi.Category; +import org.gephi.filters.spi.Filter; +import org.gephi.filters.spi.FilterBuilder; +import org.gephi.filters.spi.FilterProperty; +import org.gephi.filters.spi.NodeFilter; +import org.gephi.filters.spi.RangeFilter; +import org.gephi.graph.api.DirectedGraph; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Node; +import org.gephi.project.api.Workspace; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = FilterBuilder.class) public class InDegreeRangeBuilder implements FilterBuilder { + @Override public Category getCategory() { return FilterLibrary.TOPOLOGY; } + @Override public String getName() { return NbBundle.getMessage(InDegreeRangeBuilder.class, "InDegreeRangeBuilder.name"); } + @Override public Icon getIcon() { return null; } + @Override public String getDescription() { return NbBundle.getMessage(InDegreeRangeBuilder.class, "InDegreeRangeBuilder.description"); } - public InDegreeRangeFilter getFilter() { + @Override + public InDegreeRangeFilter getFilter(Workspace workspace) { return new InDegreeRangeFilter(); } + @Override public JPanel getPanel(Filter filter) { RangeUI ui = Lookup.getDefault().lookup(RangeUI.class); if (ui != null) { @@ -89,6 +103,7 @@ public JPanel getPanel(Filter filter) { return null; } + @Override public void destroy(Filter filter) { } @@ -103,31 +118,33 @@ public InDegreeRangeFilter() { addProperty(Range.class, "range"); } + @Override public boolean init(Graph graph) { - if (graph.getNodeCount() == 0 || !(graph instanceof DirectedGraph)) { - return false; - } - return true; + return !(graph.getNodeCount() == 0 || !(graph.isDirected())); } + @Override public boolean evaluate(Graph graph, Node node) { - int degree = ((HierarchicalDirectedGraph) graph).getTotalInDegree(node); + int degree = ((DirectedGraph) graph).getInDegree(node); return range.isInRange(degree); } + @Override public void finish() { } + @Override public Number[] getValues(Graph graph) { - HierarchicalDirectedGraph hgraph = (HierarchicalDirectedGraph) graph; - List values = new ArrayList(((HierarchicalGraph) graph).getNodeCount()); - for (Node n : hgraph.getNodes()) { - int degree = hgraph.getTotalInDegree(n); + DirectedGraph dgraph = (DirectedGraph) graph; + List values = new ArrayList<>(dgraph.getNodeCount()); + for (Node n : dgraph.getNodes()) { + int degree = dgraph.getInDegree(n); values.add(degree); } return values.toArray(new Number[0]); } + @Override public FilterProperty getRangeProperty() { return getProperties()[0]; } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/KCoreBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/KCoreBuilder.java index 377fb11b0c..a5bc4014b2 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/KCoreBuilder.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/KCoreBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin.graph; import javax.swing.Icon; @@ -51,38 +52,44 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.filters.spi.FilterProperty; import org.gephi.graph.api.Graph; import org.gephi.graph.api.Node; +import org.gephi.project.api.Workspace; import org.openide.util.Exceptions; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = FilterBuilder.class) public class KCoreBuilder implements FilterBuilder { + @Override public Category getCategory() { return FilterLibrary.TOPOLOGY; } + @Override public String getName() { return NbBundle.getMessage(KCoreBuilder.class, "KCoreBuilder.name"); } + @Override public Icon getIcon() { return null; } + @Override public String getDescription() { return NbBundle.getMessage(KCoreBuilder.class, "KCoreBuilder.description"); } - public Filter getFilter() { + @Override + public Filter getFilter(Workspace workspace) { return new KCoreFilter(); } + @Override public JPanel getPanel(Filter filter) { KCoreUI ui = Lookup.getDefault().lookup(KCoreUI.class); if (ui != null) { @@ -91,6 +98,7 @@ public JPanel getPanel(Filter filter) { return null; } + @Override public void destroy(Filter filter) { } @@ -99,6 +107,7 @@ public static class KCoreFilter implements ComplexFilter { private FilterProperty[] filterProperties; private Integer k = 1; + @Override public Graph filter(Graph graph) { int removed = 0; do { @@ -113,15 +122,17 @@ public Graph filter(Graph graph) { return graph; } + @Override public String getName() { return NbBundle.getMessage(KCoreBuilder.class, "KCoreBuilder.name"); } + @Override public FilterProperty[] getProperties() { if (filterProperties == null) { filterProperties = new FilterProperty[0]; try { - filterProperties = new FilterProperty[]{ + filterProperties = new FilterProperty[] { FilterProperty.createProperty(this, Integer.class, "k"),}; } catch (Exception ex) { Exceptions.printStackTrace(ex); diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/KCoreUI.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/KCoreUI.java index 9f650e2627..146548d283 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/KCoreUI.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/KCoreUI.java @@ -39,15 +39,15 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin.graph; import javax.swing.JPanel; /** - * * @author Mathieu Bastian */ public interface KCoreUI { - public JPanel getPanel(KCoreBuilder.KCoreFilter filter); + JPanel getPanel(KCoreBuilder.KCoreFilter filter); } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/MutualDegreeRangeBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/MutualDegreeRangeBuilder.java index 3dca4f5a80..ca6e0f49a3 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/MutualDegreeRangeBuilder.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/MutualDegreeRangeBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin.graph; import java.util.ArrayList; @@ -48,39 +49,53 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.filters.api.FilterLibrary; import org.gephi.filters.api.Range; import org.gephi.filters.plugin.AbstractFilter; -import org.gephi.filters.spi.*; -import org.gephi.graph.api.*; +import org.gephi.filters.spi.Category; +import org.gephi.filters.spi.Filter; +import org.gephi.filters.spi.FilterBuilder; +import org.gephi.filters.spi.FilterProperty; +import org.gephi.filters.spi.NodeFilter; +import org.gephi.filters.spi.RangeFilter; +import org.gephi.graph.api.DirectedGraph; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Node; +import org.gephi.project.api.Workspace; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = FilterBuilder.class) public class MutualDegreeRangeBuilder implements FilterBuilder { + @Override public Category getCategory() { return FilterLibrary.TOPOLOGY; } + @Override public String getName() { return NbBundle.getMessage(MutualDegreeRangeBuilder.class, "MutualDegreeRangeBuilder.name"); } + @Override public Icon getIcon() { return null; } + @Override public String getDescription() { return NbBundle.getMessage(MutualDegreeRangeBuilder.class, "MutualDegreeRangeBuilder.description"); } - public MutualDegreeRangeFilter getFilter() { + @Override + public MutualDegreeRangeFilter getFilter(Workspace workspace) { return new MutualDegreeRangeFilter(); } + @Override public JPanel getPanel(Filter filter) { RangeUI ui = Lookup.getDefault().lookup(RangeUI.class); if (ui != null) { @@ -89,6 +104,7 @@ public JPanel getPanel(Filter filter) { return null; } + @Override public void destroy(Filter filter) { } @@ -103,31 +119,44 @@ public MutualDegreeRangeFilter() { addProperty(Range.class, "range"); } + @Override public boolean init(Graph graph) { - if (graph.getNodeCount() == 0 || !(graph instanceof DirectedGraph)) { - return false; - } - return true; + return !(graph.getNodeCount() == 0 || !(graph.isDirected())); } + @Override public boolean evaluate(Graph graph, Node node) { - int degree = ((HierarchicalDirectedGraph) graph).getMutualDegree(node); + DirectedGraph dgraph = (DirectedGraph) graph; + int degree = 0; + for (Edge e : dgraph.getOutEdges(node)) { + if (dgraph.getMutualEdge(e) != null) { + degree++; + } + } return range.isInRange(degree); } + @Override public void finish() { } + @Override public Number[] getValues(Graph graph) { - HierarchicalDirectedGraph hgraph = (HierarchicalDirectedGraph) graph; - List values = new ArrayList(((HierarchicalGraph) graph).getNodeCount()); - for (Node n : hgraph.getNodes()) { - int degree = hgraph.getMutualDegree(n); + DirectedGraph dgraph = (DirectedGraph) graph; + List values = new ArrayList<>(dgraph.getNodeCount()); + for (Node n : dgraph.getNodes()) { + int degree = 0; + for (Edge e : dgraph.getOutEdges(n)) { + if (dgraph.getMutualEdge(e) != null) { + degree++; + } + } values.add(degree); } return values.toArray(new Number[0]); } + @Override public FilterProperty getRangeProperty() { return getProperties()[0]; } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/NeighborsBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/NeighborsBuilder.java index 96e658981c..ecfd4cb359 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/NeighborsBuilder.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/NeighborsBuilder.java @@ -39,11 +39,11 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin.graph; -import java.util.ArrayList; +import java.util.Collection; import java.util.HashSet; -import java.util.List; import java.util.Set; import javax.swing.Icon; import javax.swing.JPanel; @@ -55,40 +55,45 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.filters.spi.FilterProperty; import org.gephi.graph.api.Edge; import org.gephi.graph.api.Graph; -import org.gephi.graph.api.GraphView; -import org.gephi.graph.api.HierarchicalGraph; import org.gephi.graph.api.Node; +import org.gephi.project.api.Workspace; +import org.openide.util.Exceptions; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Sebastien Heymann */ @ServiceProvider(service = FilterBuilder.class) public class NeighborsBuilder implements FilterBuilder { + @Override public Category getCategory() { return FilterLibrary.TOPOLOGY; } + @Override public String getName() { return NbBundle.getMessage(NeighborsBuilder.class, "NeighborsBuilder.name"); } + @Override public Icon getIcon() { return null; } + @Override public String getDescription() { return NbBundle.getMessage(NeighborsBuilder.class, "NeighborsBuilder.description"); } - public Filter getFilter() { + @Override + public Filter getFilter(Workspace workspace) { return new NeighborsFilter(); } + @Override public JPanel getPanel(Filter filter) { NeighborsUI ui = Lookup.getDefault().lookup(NeighborsUI.class); if (ui != null) { @@ -97,6 +102,7 @@ public JPanel getPanel(Filter filter) { return null; } + @Override public void destroy(Filter filter) { } @@ -105,35 +111,28 @@ public static class NeighborsFilter implements ComplexFilter { private boolean self = true; private int depth = 1; + @Override public Graph filter(Graph graph) { + Set result = new HashSet<>(); - GraphView graphView = graph.getView(); - HierarchicalGraph mainGraph = graphView.getGraphModel().getHierarchicalGraph(); - - List nodes = new ArrayList(); - for (Node n : graph.getNodes()) { - nodes.add(n.getNodeData().getNode(mainGraph.getView().getViewId())); - } + Collection nodes = graph.getNodes().toCollection(); - Set result = new HashSet(); - - Set neighbours = new HashSet(); - neighbours.addAll(nodes); + Set neighbours = new HashSet<>(nodes); //Put all neighbors into result + Graph mainGraph = graph.getModel().getGraph(); for (int i = 0; i < depth; i++) { + boolean newNodes = false; Node[] nei = neighbours.toArray(new Node[0]); neighbours.clear(); for (Node n : nei) { //Extract all neighbors of n for (Node neighbor : mainGraph.getNeighbors(n)) { - if (!result.contains(neighbor)) { - neighbours.add(neighbor); - result.add(neighbor); - } + neighbours.add(neighbor); + newNodes = result.add(neighbor) || newNodes; } } - if (neighbours.isEmpty()) { + if (!newNodes || neighbours.isEmpty()) { break; } } @@ -145,40 +144,37 @@ public Graph filter(Graph graph) { } //Update nodes - for (Node node : mainGraph.getNodes().toArray()) { + for (Node node : mainGraph.getNodes()) { if (result.contains(node)) { graph.addNode(node); - } else if(graph.contains(node)) { + } else if (graph.contains(node)) { graph.removeNode(node); } } //Update edges - for (Node n : graph.getNodes().toArray()) { - Node mainNode = n.getNodeData().getNode(mainGraph.getView().getViewId()); - Edge[] edges = mainGraph.getEdges(mainNode).toArray(); - for (Edge e : edges) { - if (e.getSource().getNodeData().getNode(graphView.getViewId()) != null - && e.getTarget().getNodeData().getNode(graphView.getViewId()) != null) { - graph.addEdge(e); - } + for (Edge edge : mainGraph.getEdges()) { + if (graph.contains(edge.getSource()) && graph.contains(edge.getTarget())) { + graph.addEdge(edge); } } return graph; } + @Override public String getName() { return NbBundle.getMessage(NeighborsBuilder.class, "NeighborsBuilder.name"); } + @Override public FilterProperty[] getProperties() { try { - return new FilterProperty[]{ - FilterProperty.createProperty(this, Integer.class, "depth"), - FilterProperty.createProperty(this, Boolean.class, "self")}; + return new FilterProperty[] { + FilterProperty.createProperty(this, Integer.class, "depth"), + FilterProperty.createProperty(this, Boolean.class, "self")}; } catch (NoSuchMethodException ex) { - ex.printStackTrace(); + Exceptions.printStackTrace(ex); } return new FilterProperty[0]; } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/NeighborsUI.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/NeighborsUI.java index 99207f8c25..a697c60f6f 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/NeighborsUI.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/NeighborsUI.java @@ -38,16 +38,16 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.filters.plugin.graph; import javax.swing.JPanel; /** - * * @author Sebastien Heymann */ public interface NeighborsUI { - public JPanel getPanel(NeighborsBuilder.NeighborsFilter neighborsFilter); + JPanel getPanel(NeighborsBuilder.NeighborsFilter neighborsFilter); } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/OutDegreeRangeBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/OutDegreeRangeBuilder.java index 0b9d660e2a..a469367848 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/OutDegreeRangeBuilder.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/OutDegreeRangeBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin.graph; import java.util.ArrayList; @@ -48,39 +49,52 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.filters.api.FilterLibrary; import org.gephi.filters.api.Range; import org.gephi.filters.plugin.AbstractFilter; -import org.gephi.filters.spi.*; -import org.gephi.graph.api.*; +import org.gephi.filters.spi.Category; +import org.gephi.filters.spi.Filter; +import org.gephi.filters.spi.FilterBuilder; +import org.gephi.filters.spi.FilterProperty; +import org.gephi.filters.spi.NodeFilter; +import org.gephi.filters.spi.RangeFilter; +import org.gephi.graph.api.DirectedGraph; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Node; +import org.gephi.project.api.Workspace; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = FilterBuilder.class) public class OutDegreeRangeBuilder implements FilterBuilder { + @Override public Category getCategory() { return FilterLibrary.TOPOLOGY; } + @Override public String getName() { return NbBundle.getMessage(OutDegreeRangeBuilder.class, "OutDegreeRangeBuilder.name"); } + @Override public Icon getIcon() { return null; } + @Override public String getDescription() { return NbBundle.getMessage(OutDegreeRangeBuilder.class, "OutDegreeRangeBuilder.description"); } - public Filter getFilter() { + @Override + public OutDegreeRangeFilter getFilter(Workspace workspace) { return new OutDegreeRangeFilter(); } + @Override public JPanel getPanel(Filter filter) { RangeUI ui = Lookup.getDefault().lookup(RangeUI.class); if (ui != null) { @@ -89,6 +103,7 @@ public JPanel getPanel(Filter filter) { return null; } + @Override public void destroy(Filter filter) { } @@ -103,31 +118,33 @@ public OutDegreeRangeFilter() { addProperty(Range.class, "range"); } + @Override public boolean init(Graph graph) { - if (graph.getNodeCount() == 0 || !(graph instanceof DirectedGraph)) { - return false; - } - return true; + return !(graph.getNodeCount() == 0 || !(graph.isDirected())); } + @Override public boolean evaluate(Graph graph, Node node) { - int degree = ((HierarchicalDirectedGraph) graph).getTotalOutDegree(node); + int degree = ((DirectedGraph) graph).getOutDegree(node); return range.isInRange(degree); } + @Override public void finish() { } + @Override public Number[] getValues(Graph graph) { - HierarchicalDirectedGraph hgraph = (HierarchicalDirectedGraph) graph; - List values = new ArrayList(((HierarchicalGraph) graph).getNodeCount()); - for (Node n : hgraph.getNodes()) { - int degree = hgraph.getTotalOutDegree(n); + DirectedGraph dgraph = (DirectedGraph) graph; + List values = new ArrayList<>(dgraph.getNodeCount()); + for (Node n : dgraph.getNodes()) { + int degree = dgraph.getOutDegree(n); values.add(degree); } return values.toArray(new Number[0]); } + @Override public FilterProperty getRangeProperty() { return getProperties()[0]; } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/RangeUI.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/RangeUI.java index 6d617618c5..08b303abc5 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/RangeUI.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/RangeUI.java @@ -38,17 +38,17 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.filters.plugin.graph; import javax.swing.JPanel; import org.gephi.filters.spi.RangeFilter; /** - * * @author Mathieu Bastian */ public interface RangeUI { - public JPanel getPanel(RangeFilter rangeFilter); + JPanel getPanel(RangeFilter rangeFilter); } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/ShortestPathBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/ShortestPathBuilder.java new file mode 100644 index 0000000000..6d66943d40 --- /dev/null +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/ShortestPathBuilder.java @@ -0,0 +1,167 @@ +package org.gephi.filters.plugin.graph; + +import java.util.HashSet; +import java.util.Set; +import javax.swing.Icon; +import javax.swing.JPanel; +import org.gephi.algorithms.shortestpath.AbstractShortestPathAlgorithm; +import org.gephi.algorithms.shortestpath.BellmanFordShortestPathAlgorithm; +import org.gephi.algorithms.shortestpath.DijkstraShortestPathAlgorithm; +import org.gephi.filters.api.FilterLibrary; +import org.gephi.filters.spi.Category; +import org.gephi.filters.spi.ComplexFilter; +import org.gephi.filters.spi.Filter; +import org.gephi.filters.spi.FilterBuilder; +import org.gephi.filters.spi.FilterProperty; +import org.gephi.graph.api.DirectedGraph; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Node; +import org.gephi.project.api.Workspace; +import org.openide.util.Exceptions; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +@ServiceProvider(service = FilterBuilder.class) +public class ShortestPathBuilder implements FilterBuilder { + + @Override + public Category getCategory() { + return FilterLibrary.TOPOLOGY; + } + + @Override + public String getName() { + return NbBundle.getMessage(ShortestPathBuilder.class, "ShortestPathBuilder.name"); + } + + @Override + public Icon getIcon() { + return null; + } + + @Override + public String getDescription() { + return NbBundle.getMessage(EgoBuilder.class, "ShortestPathBuilder.description"); + } + + @Override + public Filter getFilter(Workspace workspace) { + return new ShortestPathFilter(); + } + + @Override + public JPanel getPanel(Filter filter) { + ShortestPathUI ui = Lookup.getDefault().lookup(ShortestPathUI.class); + if (ui != null) { + return ui.getPanel((ShortestPathFilter) filter); + } + return null; + } + + @Override + public void destroy(Filter filter) { + } + + public static class ShortestPathFilter implements ComplexFilter { + + private String node1Pattern = ""; + private String node2Pattern = ""; + + @Override + public Graph filter(Graph graph) { + String str1 = node1Pattern.toLowerCase(); + String str2 = node2Pattern.toLowerCase(); + + Node n1 = null; + Node n2 = null; + + for (Node n : graph.getNodes()) { + if (n.getId().toString().toLowerCase().equals(str1)) { + n1 = n; + } else if ((n.getLabel() != null) && n.getLabel().toLowerCase().equals(str1)) { + n1 = n; + } else if (n.getId().toString().toLowerCase().equals(str2)) { + n2 = n; + } else if ((n.getLabel() != null) && n.getLabel().toLowerCase().equals(str2)) { + n2 = n; + } + } + + if (n1 != null && n2 != null) { + AbstractShortestPathAlgorithm algorithm; + if (graph.isDirected()) { + algorithm = new BellmanFordShortestPathAlgorithm((DirectedGraph) graph, n1); + } else { + algorithm = new DijkstraShortestPathAlgorithm(graph, n1); + } + + algorithm.compute(); + + Set retainEdges = new HashSet<>(); + Set retainNodes = new HashSet<>(); + if (algorithm.getDistances().get(n2) != Double.POSITIVE_INFINITY) { + retainNodes.add(n2); + Edge predecessorEdge = algorithm.getPredecessorIncoming(n2); + Node predecessor = algorithm.getPredecessor(n2); + while (predecessorEdge != null && predecessor != n1) { + retainEdges.add(predecessorEdge); + retainNodes.add(predecessor); + predecessorEdge = algorithm.getPredecessorIncoming(predecessor); + predecessor = algorithm.getPredecessor(predecessor); + } + retainEdges.add(predecessorEdge); + retainNodes.add(n1); + } + + for (Node node : graph.getNodes().toArray()) { + if (!retainNodes.contains(node)) { + graph.removeNode(node); + } + } + + for (Edge edge : graph.getEdges().toArray()) { + if (!retainEdges.contains(edge)) { + graph.removeEdge(edge); + } + } + } + + return graph; + } + + @Override + public String getName() { + return NbBundle.getMessage(ShortestPathBuilder.class, "ShortestPathBuilder.name"); + } + + @Override + public FilterProperty[] getProperties() { + try { + return new FilterProperty[] { + FilterProperty.createProperty(this, String.class, "firstNodePattern"), + FilterProperty.createProperty(this, String.class, "secondNodePattern")}; + } catch (NoSuchMethodException ex) { + Exceptions.printStackTrace(ex); + } + return new FilterProperty[0]; + } + + public String getFirstNodePattern() { + return node1Pattern; + } + + public void setFirstNodePattern(String node1Pattern) { + this.node1Pattern = node1Pattern; + } + + public String getSecondNodePattern() { + return node2Pattern; + } + + public void setSecondNodePattern(String node2Pattern) { + this.node2Pattern = node2Pattern; + } + } +} diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/ShortestPathUI.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/ShortestPathUI.java new file mode 100644 index 0000000000..8c80a9957c --- /dev/null +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/graph/ShortestPathUI.java @@ -0,0 +1,53 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.filters.plugin.graph; + +import javax.swing.JPanel; + +/** + * @author Mathieu Bastian + */ +public interface ShortestPathUI { + + JPanel getPanel(ShortestPathBuilder.ShortestPathFilter shortestPathFilter); +} diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/hierarchy/FlattenBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/hierarchy/FlattenBuilder.java deleted file mode 100644 index 0d2df9c7ec..0000000000 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/hierarchy/FlattenBuilder.java +++ /dev/null @@ -1,114 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.filters.plugin.hierarchy; - -import javax.swing.Icon; -import javax.swing.JPanel; -import org.gephi.filters.api.FilterLibrary; -import org.gephi.filters.spi.Category; -import org.gephi.filters.spi.ComplexFilter; -import org.gephi.filters.spi.Filter; -import org.gephi.filters.spi.FilterBuilder; -import org.gephi.filters.spi.FilterProperty; -import org.gephi.graph.api.Graph; -import org.gephi.graph.api.HierarchicalGraph; -import org.openide.util.NbBundle; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = FilterBuilder.class) -public class FlattenBuilder implements FilterBuilder { - - public Category getCategory() { - return FilterLibrary.HIERARCHY; - } - - public String getName() { - return NbBundle.getMessage(FlattenBuilder.class, "FlattenBuilder.name"); - } - - public Icon getIcon() { - return null; - } - - public String getDescription() { - return NbBundle.getMessage(FlattenBuilder.class, "FlattenBuilder.description"); - } - - public FlattenFilter getFilter() { - return new FlattenFilter(); - } - - public JPanel getPanel(Filter filter) { - return null; - } - - public void destroy(Filter filter) { - } - - public static class FlattenFilter implements ComplexFilter { - - public boolean init(Graph graph) { - return true; - } - - public Graph filter(Graph graph) { - HierarchicalGraph hierarchicalGraph = (HierarchicalGraph) graph; - hierarchicalGraph.flatten(); - return hierarchicalGraph; - } - - public void finish() { - } - - public String getName() { - return NbBundle.getMessage(FlattenBuilder.class, "FlattenBuilder.name"); - } - - public FilterProperty[] getProperties() { - return new FilterProperty[0]; - } - } -} diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/hierarchy/LevelBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/hierarchy/LevelBuilder.java deleted file mode 100644 index d6ae90d40b..0000000000 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/hierarchy/LevelBuilder.java +++ /dev/null @@ -1,143 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.filters.plugin.hierarchy; - -import javax.swing.Icon; -import javax.swing.JPanel; -import org.gephi.filters.api.FilterLibrary; -import org.gephi.filters.spi.Category; -import org.gephi.filters.spi.Filter; -import org.gephi.filters.spi.FilterBuilder; -import org.gephi.filters.spi.FilterProperty; -import org.gephi.filters.spi.NodeFilter; -import org.gephi.graph.api.Graph; -import org.gephi.graph.api.HierarchicalGraph; -import org.gephi.graph.api.Node; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Mathieu Bastian - */ -//@ServiceProvider(service = FilterBuilder.class) -public class LevelBuilder implements FilterBuilder { - - public Category getCategory() { - return FilterLibrary.HIERARCHY; - } - - public String getName() { - return NbBundle.getMessage(LevelBuilder.class, "LevelBuilder.name"); - } - - public Icon getIcon() { - return null; - } - - public String getDescription() { - return null; - } - - public LevelFilter getFilter() { - return new LevelFilter(); - } - - public JPanel getPanel(Filter filter) { - LevelUI ui = Lookup.getDefault().lookup(LevelUI.class); - if (ui != null) { - return ui.getPanel((LevelFilter) filter); - } - return null; - } - - public void destroy(Filter filter) { - } - - public static class LevelFilter implements NodeFilter { - - private Integer level = 0; - private int height; - - public boolean init(Graph graph) { - HierarchicalGraph hg = (HierarchicalGraph) graph; - height = hg.getHeight(); - return true; - } - - public boolean evaluate(Graph graph, Node node) { - HierarchicalGraph hg = (HierarchicalGraph) graph; - return hg.getLevel(node) == level.intValue(); - } - - public void finish() { - } - - public int getHeight() { - return height; - } - - public String getName() { - return NbBundle.getMessage(LevelBuilder.class, "LevelBuilder.name"); - } - - public FilterProperty[] getProperties() { - try { - return new FilterProperty[]{ - FilterProperty.createProperty(this, Integer.class, "level") - }; - } catch (Exception ex) { - ex.printStackTrace(); - } - return new FilterProperty[0]; - } - - public Integer getLevel() { - return level; - } - - public void setLevel(Integer level) { - this.level = level; - } - } -} diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/hierarchy/LevelUI.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/hierarchy/LevelUI.java deleted file mode 100644 index c287e7112e..0000000000 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/hierarchy/LevelUI.java +++ /dev/null @@ -1,54 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.filters.plugin.hierarchy; - -import javax.swing.JPanel; -import org.gephi.filters.plugin.hierarchy.LevelBuilder.LevelFilter; - -/** - * - * @author Mathieu Bastian - */ -public interface LevelUI { - - public JPanel getPanel(LevelFilter filter); -} diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/operator/INTERSECTIONBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/operator/INTERSECTIONBuilder.java index b95f4df692..4abeda623e 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/operator/INTERSECTIONBuilder.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/operator/INTERSECTIONBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin.operator; import java.util.ArrayList; @@ -55,96 +56,84 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.filters.spi.Operator; import org.gephi.graph.api.Edge; import org.gephi.graph.api.Graph; -import org.gephi.graph.api.HierarchicalGraph; import org.gephi.graph.api.Node; +import org.gephi.graph.api.Subgraph; +import org.gephi.project.api.Workspace; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = FilterBuilder.class) public class INTERSECTIONBuilder implements FilterBuilder { + @Override public Category getCategory() { return new Category(NbBundle.getMessage(INTERSECTIONBuilder.class, "Operator.category")); } + @Override public String getName() { return NbBundle.getMessage(INTERSECTIONBuilder.class, "INTERSECTIONBuilder.name"); } + @Override public Icon getIcon() { return null; } + @Override public String getDescription() { return NbBundle.getMessage(INTERSECTIONBuilder.class, "INTERSECTIONBuilder.description"); } - public Filter getFilter() { + @Override + public Filter getFilter(Workspace workspace) { return new IntersectionOperator(); } + @Override public JPanel getPanel(Filter filter) { return null; } + @Override public void destroy(Filter filter) { } public static class IntersectionOperator implements Operator { + @Override public int getInputCount() { return Integer.MAX_VALUE; } + @Override public String getName() { return NbBundle.getMessage(INTERSECTIONBuilder.class, "INTERSECTIONBuilder.name"); } + @Override public FilterProperty[] getProperties() { return null; } - public Graph filter(Graph[] graphs) { - HierarchicalGraph minHGraph = (HierarchicalGraph) graphs[0]; - int minElements = Integer.MAX_VALUE; - for (int i = 0; i < graphs.length; i++) { - int count = ((HierarchicalGraph)graphs[i]).getNodeCount(); - if (count < minElements) { - minHGraph = (HierarchicalGraph) graphs[i]; - minElements = count; - } - } - for (Node n : minHGraph.getNodes().toArray()) { - for (int i = 0; i < graphs.length; i++) { - if ((HierarchicalGraph)graphs[i] != minHGraph) { - if (!((HierarchicalGraph)graphs[i]).contains(n)) { - minHGraph.removeNode(n); - break; - } - } - } - } - for (Edge e : minHGraph.getEdges().toArray()) { - for (int i = 0; i < graphs.length; i++) { - if ((HierarchicalGraph)graphs[i] != minHGraph) { - if (!((HierarchicalGraph)graphs[i]).contains(e)) { - minHGraph.removeEdge(e); - break; - } - } - } + @Override + public Graph filter(Subgraph[] graphs) { + Subgraph subgraph = graphs[0]; + + for (int i = 1; i < graphs.length; i++) { + subgraph.intersection(graphs[i]); } - return minHGraph; + + return subgraph; } + @Override public Graph filter(Graph graph, Filter[] filters) { - HierarchicalGraph hgraph = (HierarchicalGraph) graph; - List nodeFilters = new ArrayList(); - List edgeFilters = new ArrayList(); + List nodeFilters = new ArrayList<>(); + List edgeFilters = new ArrayList<>(); for (Filter f : filters) { if (f instanceof NodeFilter) { nodeFilters.add((NodeFilter) f); @@ -153,16 +142,16 @@ public Graph filter(Graph graph, Filter[] filters) { } } if (nodeFilters.size() > 0) { - for (Iterator itr = nodeFilters.iterator(); itr.hasNext();) { + for (Iterator itr = nodeFilters.iterator(); itr.hasNext(); ) { NodeFilter nf = itr.next(); - if (!nf.init(hgraph)) { + if (!nf.init(graph)) { itr.remove(); } } - List nodesToRemove = new ArrayList(); - for (Node n : hgraph.getNodes()) { + List nodesToRemove = new ArrayList<>(); + for (Node n : graph.getNodes()) { for (NodeFilter nf : nodeFilters) { - if (!nf.evaluate(hgraph, n)) { + if (!nf.evaluate(graph, n)) { nodesToRemove.add(n); break; } @@ -170,7 +159,7 @@ public Graph filter(Graph graph, Filter[] filters) { } for (Node n : nodesToRemove) { - hgraph.removeNode(n); + graph.removeNode(n); } for (NodeFilter nf : nodeFilters) { @@ -178,16 +167,16 @@ public Graph filter(Graph graph, Filter[] filters) { } } if (edgeFilters.size() > 0) { - for (Iterator itr = edgeFilters.iterator(); itr.hasNext();) { + for (Iterator itr = edgeFilters.iterator(); itr.hasNext(); ) { EdgeFilter ef = itr.next(); - if (!ef.init(hgraph)) { + if (!ef.init(graph)) { itr.remove(); } } - List edgesToRemove = new ArrayList(); - for (Edge e : hgraph.getEdges()) { + List edgesToRemove = new ArrayList<>(); + for (Edge e : graph.getEdges()) { for (EdgeFilter ef : edgeFilters) { - if (!ef.evaluate(hgraph, e)) { + if (!ef.evaluate(graph, e)) { edgesToRemove.add(e); break; } @@ -195,14 +184,14 @@ public Graph filter(Graph graph, Filter[] filters) { } for (Edge e : edgesToRemove) { - hgraph.removeEdge(e); + graph.removeEdge(e); } for (EdgeFilter ef : edgeFilters) { ef.finish(); } } - return hgraph; + return graph; } } } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/operator/MASKBuilderEdge.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/operator/MASKBuilderEdge.java index 1946f47bbc..cd96f8d1da 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/operator/MASKBuilderEdge.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/operator/MASKBuilderEdge.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin.operator; import java.util.ArrayList; @@ -53,41 +54,46 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.filters.spi.Operator; import org.gephi.graph.api.Edge; import org.gephi.graph.api.Graph; -import org.gephi.graph.api.GraphView; -import org.gephi.graph.api.HierarchicalGraph; import org.gephi.graph.api.Node; +import org.gephi.graph.api.Subgraph; +import org.gephi.project.api.Workspace; import org.openide.util.Exceptions; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = FilterBuilder.class) public class MASKBuilderEdge implements FilterBuilder { + @Override public Category getCategory() { return new Category(NbBundle.getMessage(MASKBuilderEdge.class, "Operator.category")); } + @Override public String getName() { return NbBundle.getMessage(MASKBuilderEdge.class, "MASKBuilderEdge.name"); } + @Override public Icon getIcon() { return null; } + @Override public String getDescription() { return NbBundle.getMessage(MASKBuilderEdge.class, "MASKBuilderEdge.description"); } - public Filter getFilter() { + @Override + public Filter getFilter(Workspace workspace) { return new MaskEdgeOperator(); } + @Override public JPanel getPanel(Filter filter) { MASKEdgeUI ui = Lookup.getDefault().lookup(MASKEdgeUI.class); if (ui != null) { @@ -96,33 +102,33 @@ public JPanel getPanel(Filter filter) { return null; } + @Override public void destroy(Filter filter) { } public static class MaskEdgeOperator implements Operator { - public enum EdgesOptions { - - SOURCE, TARGET, ANY, BOTH - }; private EdgesOptions option = EdgesOptions.ANY; private FilterProperty[] filterProperties; + @Override public int getInputCount() { return 1; } + @Override public String getName() { return NbBundle.getMessage(MASKBuilderEdge.class, "MASKBuilderEdge.name"); } + @Override public FilterProperty[] getProperties() { if (filterProperties == null) { filterProperties = new FilterProperty[0]; try { - filterProperties = new FilterProperty[]{ - FilterProperty.createProperty(this, String.class, "option") - }; + filterProperties = new FilterProperty[] { + FilterProperty.createProperty(this, String.class, "option") + }; } catch (Exception ex) { Exceptions.printStackTrace(ex); } @@ -130,32 +136,32 @@ public FilterProperty[] getProperties() { return filterProperties; } - public Graph filter(Graph[] graphs) { + @Override + public Graph filter(Subgraph[] graphs) { if (graphs.length > 1) { throw new IllegalArgumentException("Filter accepts a single graph in parameter"); } - HierarchicalGraph hgraph = (HierarchicalGraph) graphs[0]; - GraphView hgraphView = hgraph.getView(); - HierarchicalGraph mainHGraph = hgraph.getView().getGraphModel().getHierarchicalGraph(); + Graph graph = graphs[0]; + Graph mainGraph = graph.getView().getGraphModel().getGraph(); - List edgesToKeep = new ArrayList(); - for (Edge e : mainHGraph.getEdges().toArray()) { - Node source = e.getSource().getNodeData().getNode(hgraphView.getViewId()); - Node target = e.getTarget().getNodeData().getNode(hgraphView.getViewId()); + List edgesToKeep = new ArrayList<>(); + for (Edge e : mainGraph.getEdges()) { + boolean source = graph.contains(e.getSource()); + boolean target = graph.contains(e.getTarget()); boolean keep = false; switch (option) { case SOURCE: - keep = source != null; + keep = source; break; case TARGET: - keep = target != null; + keep = target; break; case BOTH: - keep = source != null && target != null; + keep = source && target; break; case ANY: - keep = source != null || target != null; + keep = source || target; break; } if (keep) { @@ -163,54 +169,54 @@ public Graph filter(Graph[] graphs) { } } - hgraph.clearEdges(); + graph.clearEdges(); - for (Node n : mainHGraph.getNodes().toArray()) { - if (n.getNodeData().getNode(hgraphView.getViewId()) == null) { - hgraph.addNode(n); + for (Node n : mainGraph.getNodes()) { + if (!graph.contains(n)) { + graph.addNode(n); } } for (Edge e : edgesToKeep) { - hgraph.addEdge(e); + graph.addEdge(e); } - return hgraph; + return graph; } + @Override public Graph filter(Graph graph, Filter[] filters) { if (filters.length > 1) { throw new IllegalArgumentException("Filter accepts a single filter in parameter"); } - HierarchicalGraph hgraph = (HierarchicalGraph) graph; - if (filters[0] instanceof NodeFilter && ((NodeFilter) filters[0]).init(hgraph)) { + + if (filters[0] instanceof NodeFilter && ((NodeFilter) filters[0]).init(graph)) { NodeFilter filter = (NodeFilter) filters[0]; - GraphView hgraphView = hgraph.getView(); - for (Edge e : hgraph.getEdges().toArray()) { - Node source = e.getSource().getNodeData().getNode(hgraphView.getViewId()); - Node target = e.getTarget().getNodeData().getNode(hgraphView.getViewId()); + for (Edge e : graph.getEdges()) { + Node source = e.getSource(); + Node target = e.getTarget(); boolean remove = false; switch (option) { case SOURCE: - remove = !filter.evaluate(hgraph, source); + remove = !filter.evaluate(graph, source); break; case TARGET: - remove = !filter.evaluate(hgraph, target); + remove = !filter.evaluate(graph, target); break; case BOTH: - remove = !filter.evaluate(hgraph, source) || !filter.evaluate(hgraph, target); + remove = !filter.evaluate(graph, source) || !filter.evaluate(graph, target); break; case ANY: - remove = !filter.evaluate(hgraph, source) && !filter.evaluate(hgraph, target); + remove = !filter.evaluate(graph, source) && !filter.evaluate(graph, target); break; } if (remove) { - hgraph.removeEdge(e); + graph.removeEdge(e); } } filter.finish(); } - return hgraph; + return graph; } public String getOption() { @@ -220,5 +226,10 @@ public String getOption() { public void setOption(String option) { this.option = EdgesOptions.valueOf(option); } + + public enum EdgesOptions { + + SOURCE, TARGET, ANY, BOTH + } } } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/operator/MASKEdgeUI.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/operator/MASKEdgeUI.java index ac2b96fa1d..59c2f49702 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/operator/MASKEdgeUI.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/operator/MASKEdgeUI.java @@ -39,15 +39,15 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin.operator; import javax.swing.JPanel; /** - * * @author Mathieu Bastian */ public interface MASKEdgeUI { - public JPanel getPanel(MASKBuilderEdge.MaskEdgeOperator edgesOperator); + JPanel getPanel(MASKBuilderEdge.MaskEdgeOperator edgesOperator); } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/operator/NOTBuilderEdge.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/operator/NOTBuilderEdge.java index a478481c76..20bd016ff7 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/operator/NOTBuilderEdge.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/operator/NOTBuilderEdge.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin.operator; import java.util.ArrayList; @@ -53,106 +54,114 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.filters.spi.Operator; import org.gephi.graph.api.Edge; import org.gephi.graph.api.Graph; -import org.gephi.graph.api.GraphView; -import org.gephi.graph.api.HierarchicalGraph; import org.gephi.graph.api.Node; +import org.gephi.graph.api.Subgraph; +import org.gephi.project.api.Workspace; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = FilterBuilder.class) public class NOTBuilderEdge implements FilterBuilder { + @Override public Category getCategory() { return new Category(NbBundle.getMessage(NOTBuilderEdge.class, "Operator.category")); } + @Override public String getName() { return NbBundle.getMessage(NOTBuilderEdge.class, "NOTBuilderEdge.name"); } + @Override public Icon getIcon() { return null; } + @Override public String getDescription() { return NbBundle.getMessage(NOTBuilderEdge.class, "NOTBuilderEdge.description"); } - public Filter getFilter() { + @Override + public Filter getFilter(Workspace workspace) { return new NotOperatorEdge(); } + @Override public JPanel getPanel(Filter filter) { return null; } + @Override public void destroy(Filter filter) { } public static class NotOperatorEdge implements Operator { + @Override public int getInputCount() { return 1; } + @Override public String getName() { return NbBundle.getMessage(NOTBuilderEdge.class, "NOTBuilderEdge.name"); } + @Override public FilterProperty[] getProperties() { return null; } - public Graph filter(Graph[] graphs) { + @Override + public Graph filter(Subgraph[] graphs) { if (graphs.length > 1) { throw new IllegalArgumentException("Not Filter accepts a single graph in parameter"); } - HierarchicalGraph hgraph = (HierarchicalGraph) graphs[0]; - GraphView hgraphView = hgraph.getView(); - HierarchicalGraph mainHGraph = hgraph.getView().getGraphModel().getHierarchicalGraph(); - for (Edge e : mainHGraph.getEdges().toArray()) { - Node source = e.getSource().getNodeData().getNode(hgraphView.getViewId()); - Node target = e.getTarget().getNodeData().getNode(hgraphView.getViewId()); - if (source != null && target != null) { - Edge edgeInGraph = hgraph.getEdge(source, target); + Graph graph = graphs[0]; + Graph mainGraph = graph.getView().getGraphModel().getGraph(); + for (Edge e : mainGraph.getEdges()) { + Node source = e.getSource(); + Node target = e.getTarget(); + if (graph.contains(source) && graph.contains(target)) { + Edge edgeInGraph = graph.getEdge(source, target, e.getType()); if (edgeInGraph == null) { //The edge is not in graph - hgraph.addEdge(e); + graph.addEdge(e); } else { //The edge is in the graph - hgraph.removeEdge(edgeInGraph); + graph.removeEdge(edgeInGraph); } } } - return hgraph; + return graph; } + @Override public Graph filter(Graph graph, Filter[] filters) { if (filters.length > 1) { throw new IllegalArgumentException("Not Filter accepts a single filter in parameter"); } - HierarchicalGraph hgraph = (HierarchicalGraph) graph; + Filter filter = filters[0]; - if (filter instanceof EdgeFilter && ((EdgeFilter) filter).init(hgraph)) { + if (filter instanceof EdgeFilter && ((EdgeFilter) filter).init(graph)) { EdgeFilter edgeFilter = (EdgeFilter) filter; - List edgesToRemove = new ArrayList(); - for (Edge e : hgraph.getEdgesAndMetaEdges().toArray()) { - if (edgeFilter.evaluate(hgraph, e)) { + List edgesToRemove = new ArrayList<>(); + for (Edge e : graph.getEdges()) { + if (edgeFilter.evaluate(graph, e)) { edgesToRemove.add(e); } } - for (Edge e : edgesToRemove) { - hgraph.removeEdge(e); - } + graph.removeAllEdges(edgesToRemove); edgeFilter.finish(); } - return hgraph; + return graph; } } } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/operator/NOTBuilderNode.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/operator/NOTBuilderNode.java index 2c17cc576f..712708139e 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/operator/NOTBuilderNode.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/operator/NOTBuilderNode.java @@ -39,13 +39,13 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin.operator; import java.util.ArrayList; import java.util.List; import javax.swing.Icon; import javax.swing.JPanel; -import org.gephi.filters.spi.AttributableFilter; import org.gephi.filters.spi.Category; import org.gephi.filters.spi.Filter; import org.gephi.filters.spi.FilterBuilder; @@ -54,126 +54,119 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.filters.spi.Operator; import org.gephi.graph.api.Edge; import org.gephi.graph.api.Graph; -import org.gephi.graph.api.GraphView; -import org.gephi.graph.api.HierarchicalGraph; import org.gephi.graph.api.Node; +import org.gephi.graph.api.Subgraph; +import org.gephi.project.api.Workspace; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = FilterBuilder.class) public class NOTBuilderNode implements FilterBuilder { + @Override public Category getCategory() { return new Category(NbBundle.getMessage(NOTBuilderNode.class, "Operator.category")); } + @Override public String getName() { return NbBundle.getMessage(NOTBuilderNode.class, "NOTBuilderNode.name"); } + @Override public Icon getIcon() { return null; } + @Override public String getDescription() { return NbBundle.getMessage(NOTBuilderNode.class, "NOTBuilderNode.description"); } - public Filter getFilter() { + @Override + public Filter getFilter(Workspace workspace) { return new NOTOperatorNode(); } + @Override public JPanel getPanel(Filter filter) { return null; } + @Override public void destroy(Filter filter) { } public static class NOTOperatorNode implements Operator { + @Override public int getInputCount() { return 1; } + @Override public String getName() { return NbBundle.getMessage(NOTBuilderNode.class, "NOTBuilderNode.name"); } + @Override public FilterProperty[] getProperties() { return null; } - public Graph filter(Graph[] graphs) { + @Override + public Graph filter(Subgraph[] graphs) { if (graphs.length > 1) { throw new IllegalArgumentException("Not Filter accepts a single graph in parameter"); } - HierarchicalGraph hgraph = (HierarchicalGraph) graphs[0]; - GraphView hgraphView = hgraph.getView(); - HierarchicalGraph mainHGraph = hgraph.getView().getGraphModel().getHierarchicalGraph(); - for (Node n : mainHGraph.getNodes().toArray()) { - if (n.getNodeData().getNode(hgraphView.getViewId()) == null) { + Graph graph = graphs[0]; + Graph mainGraph = graph.getView().getGraphModel().getGraph(); + for (Node n : mainGraph.getNodes().toArray()) { + if (!graph.contains(n)) { //The node n is not in graph - hgraph.addNode(n); + graph.addNode(n); } else { //The node n is in graph - hgraph.removeNode(n); + graph.removeNode(n); } } - for (Node n : hgraph.getNodes().toArray()) { - Node mainNode = n.getNodeData().getNode(mainHGraph.getView().getViewId()); - Edge[] edges = mainHGraph.getEdgesAndMetaEdges(mainNode).toArray(); - for (Edge e : edges) { - if (e.getSource().getNodeData().getNode(hgraphView.getViewId()) != null - && e.getTarget().getNodeData().getNode(hgraphView.getViewId()) != null) { - hgraph.addEdge(e); + for (Edge e : mainGraph.getEdges()) { + Node source = e.getSource(); + Node target = e.getTarget(); + if (graph.contains(source) && graph.contains(target)) { + Edge edgeInGraph = graph.getEdge(source, target, e.getType()); + if (edgeInGraph == null) { + graph.addEdge(e); } } } - return hgraph; + return graph; } + @Override public Graph filter(Graph graph, Filter[] filters) { if (filters.length > 1) { throw new IllegalArgumentException("Not Filter accepts a single filter in parameter"); } - HierarchicalGraph hgraph = (HierarchicalGraph) graph; Filter filter = filters[0]; - if (filter instanceof NodeFilter && ((NodeFilter) filter).init(hgraph)) { - List nodeToRemove = new ArrayList(); + if (filter instanceof NodeFilter && ((NodeFilter) filter).init(graph)) { + List nodeToRemove = new ArrayList<>(); NodeFilter nodeFilter = (NodeFilter) filter; - for (Node n : hgraph.getNodes().toArray()) { - if (nodeFilter.evaluate(hgraph, n)) { + for (Node n : graph.getNodes()) { + if (nodeFilter.evaluate(graph, n)) { nodeToRemove.add(n); } } - for (Node n : nodeToRemove) { - hgraph.removeNode(n); - } + graph.removeAllNodes(nodeToRemove); nodeFilter.finish(); } - - if (filter instanceof AttributableFilter && ((AttributableFilter) filter).getType()==AttributableFilter.Type.NODE && ((AttributableFilter) filter).init(hgraph)) { - List nodeToRemove = new ArrayList(); - AttributableFilter attributableFilter = (AttributableFilter) filter; - for (Node n : hgraph.getNodes().toArray()) { - if (attributableFilter.evaluate(hgraph, n)) { - nodeToRemove.add(n); - } - } - for (Node n : nodeToRemove) { - hgraph.removeNode(n); - } - attributableFilter.finish(); - } - return hgraph; + return graph; } } } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/operator/UNIONBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/operator/UNIONBuilder.java index 2953b99f33..3c7f7d8e66 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/operator/UNIONBuilder.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/operator/UNIONBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin.operator; import java.util.ArrayList; @@ -55,87 +56,83 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.filters.spi.Operator; import org.gephi.graph.api.Edge; import org.gephi.graph.api.Graph; -import org.gephi.graph.api.HierarchicalGraph; import org.gephi.graph.api.Node; +import org.gephi.graph.api.Subgraph; +import org.gephi.project.api.Workspace; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = FilterBuilder.class) public class UNIONBuilder implements FilterBuilder { + @Override public Category getCategory() { return new Category(NbBundle.getMessage(UNIONBuilder.class, "Operator.category")); } + @Override public String getName() { return NbBundle.getMessage(UNIONBuilder.class, "UNIONBuilder.name"); } + @Override public Icon getIcon() { return null; } + @Override public String getDescription() { return NbBundle.getMessage(UNIONBuilder.class, "UNIONBuilder.description"); } - public Filter getFilter() { + @Override + public Filter getFilter(Workspace workspace) { return new UnionOperator(); } + @Override public JPanel getPanel(Filter filter) { return null; } + @Override public void destroy(Filter filter) { } public static class UnionOperator implements Operator { + @Override public int getInputCount() { return Integer.MAX_VALUE; } + @Override public String getName() { return NbBundle.getMessage(UNIONBuilder.class, "UNIONBuilder.name"); } + @Override public FilterProperty[] getProperties() { return null; } - public Graph filter(Graph[] graphs) { - HierarchicalGraph maxHGraph = (HierarchicalGraph) graphs[0]; - int maxElements = 0; - for (int i = 0; i < graphs.length; i++) { - int count = ((HierarchicalGraph) graphs[i]).getNodeCount(); - if (count > maxElements) { - maxHGraph = (HierarchicalGraph) graphs[i]; - maxElements = count; - } + @Override + public Graph filter(Subgraph[] graphs) { + Subgraph subGraph = graphs[0]; + for (int i = 1; i < graphs.length; i++) { + subGraph.union(graphs[i]); } - for (int i = 0; i < graphs.length; i++) { - if ((HierarchicalGraph) graphs[i] != maxHGraph) { - //Merge - for (Node n : ((HierarchicalGraph) graphs[i]).getNodes().toArray()) { - maxHGraph.addNode(n); - } - for (Edge e : ((HierarchicalGraph) graphs[i]).getEdgesAndMetaEdges().toArray()) { - maxHGraph.addEdge(e); - } - } - } - return maxHGraph; + + return subGraph; } + @Override public Graph filter(Graph graph, Filter[] filters) { - HierarchicalGraph hgraph = (HierarchicalGraph) graph; - List nodeFilters = new ArrayList(); - List edgeFilters = new ArrayList(); + List nodeFilters = new ArrayList<>(); + List edgeFilters = new ArrayList<>(); for (Filter f : filters) { if (f instanceof NodeFilter) { nodeFilters.add((NodeFilter) f); @@ -144,17 +141,17 @@ public Graph filter(Graph graph, Filter[] filters) { } } if (nodeFilters.size() > 0) { - for (Iterator itr = nodeFilters.iterator(); itr.hasNext();) { + for (Iterator itr = nodeFilters.iterator(); itr.hasNext(); ) { NodeFilter nf = itr.next(); - if (!nf.init(hgraph)) { + if (!nf.init(graph)) { itr.remove(); } } - List nodesToRemove = new ArrayList(); - for (Node n : hgraph.getNodes()) { + List nodesToRemove = new ArrayList<>(); + for (Node n : graph.getNodes()) { boolean remove = true; for (NodeFilter nf : nodeFilters) { - if (nf.evaluate(hgraph, n)) { + if (nf.evaluate(graph, n)) { remove = false; } } @@ -164,24 +161,24 @@ public Graph filter(Graph graph, Filter[] filters) { } for (Node n : nodesToRemove) { - hgraph.removeNode(n); + graph.removeNode(n); } for (NodeFilter nf : nodeFilters) { nf.finish(); } } if (edgeFilters.size() > 0) { - for (Iterator itr = edgeFilters.iterator(); itr.hasNext();) { + for (Iterator itr = edgeFilters.iterator(); itr.hasNext(); ) { EdgeFilter ef = itr.next(); - if (!ef.init(hgraph)) { + if (!ef.init(graph)) { itr.remove(); } } - List edgesToRemove = new ArrayList(); - for (Edge e : hgraph.getEdgesAndMetaEdges()) { + List edgesToRemove = new ArrayList<>(); + for (Edge e : graph.getEdges()) { boolean remove = true; for (EdgeFilter ef : edgeFilters) { - if (ef.evaluate(hgraph, e)) { + if (ef.evaluate(graph, e)) { remove = false; } } @@ -191,13 +188,13 @@ public Graph filter(Graph graph, Filter[] filters) { } for (Edge e : edgesToRemove) { - hgraph.removeEdge(e); + graph.removeEdge(e); } for (EdgeFilter ef : edgeFilters) { ef.finish(); } } - return hgraph; + return graph; } } } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/partition/InterEdgesBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/partition/InterEdgesBuilder.java index e775d02837..33bdb7685e 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/partition/InterEdgesBuilder.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/partition/InterEdgesBuilder.java @@ -39,15 +39,16 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin.partition; import java.util.ArrayList; -import java.util.HashSet; import java.util.List; -import java.util.Set; import javax.swing.Icon; import javax.swing.JPanel; -import org.gephi.data.attributes.api.AttributeColumn; +import org.gephi.appearance.api.AppearanceController; +import org.gephi.appearance.api.AppearanceModel; +import org.gephi.appearance.api.Partition; import org.gephi.filters.api.FilterLibrary; import org.gephi.filters.plugin.partition.PartitionBuilder.PartitionFilter; import org.gephi.filters.spi.Category; @@ -55,42 +56,48 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.filters.spi.EdgeFilter; import org.gephi.filters.spi.Filter; import org.gephi.filters.spi.FilterBuilder; +import org.gephi.graph.api.Column; import org.gephi.graph.api.Edge; import org.gephi.graph.api.Graph; -import org.gephi.partition.api.EdgePartition; -import org.gephi.partition.api.NodePartition; -import org.gephi.partition.api.Part; -import org.gephi.partition.api.Partition; -import org.gephi.partition.api.PartitionController; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.project.api.Workspace; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author mbastian */ @ServiceProvider(service = CategoryBuilder.class) public class InterEdgesBuilder implements CategoryBuilder { public final static Category INTER_EDGES = new Category( - NbBundle.getMessage(InterEdgesBuilder.class, "InterEdgesBuilder.name"), - null, - FilterLibrary.ATTRIBUTES); + NbBundle.getMessage(InterEdgesBuilder.class, "InterEdgesBuilder.name"), + null, + FilterLibrary.ATTRIBUTES); + @Override public Category getCategory() { return INTER_EDGES; } - public FilterBuilder[] getBuilders() { - List builders = new ArrayList(); - PartitionController pc = Lookup.getDefault().lookup(PartitionController.class); - if (pc.getModel() != null) { - pc.refreshPartitions(); - NodePartition[] nodePartitions = pc.getModel().getNodePartitions(); - for (NodePartition np : nodePartitions) { - InterEdgesFilterBuilder builder = new InterEdgesFilterBuilder(np.getColumn(), np); - builders.add(builder); + @Override + public FilterBuilder[] getBuilders(Workspace workspace) { + List builders = new ArrayList<>(); + GraphModel gm = Lookup.getDefault().lookup(GraphController.class).getGraphModel(workspace); + AppearanceModel am = Lookup.getDefault().lookup(AppearanceController.class).getModel(workspace); + + //Force refresh + am.getNodeFunctions(); + + for (Column nodeCol : gm.getNodeTable()) { + if (!nodeCol.isProperty()) { + Partition partition = am.getNodePartition(nodeCol); + if (partition != null) { + InterEdgesFilterBuilder builder = new InterEdgesFilterBuilder(partition); + builders.add(builder); + } } } @@ -99,34 +106,38 @@ public FilterBuilder[] getBuilders() { private static class InterEdgesFilterBuilder implements FilterBuilder { - private final AttributeColumn column; - private Partition partition; + private final Partition partition; - public InterEdgesFilterBuilder(AttributeColumn column, NodePartition partition) { - this.column = column; + public InterEdgesFilterBuilder(Partition partition) { this.partition = partition; } + @Override public Category getCategory() { return INTER_EDGES; } + @Override public String getName() { - return column.getTitle(); + return partition.getColumn().getTitle(); } + @Override public Icon getIcon() { return null; } + @Override public String getDescription() { return NbBundle.getMessage(InterEdgesBuilder.class, "InterEdgesBuilder.description"); } - public InterEdgesFilter getFilter() { + @Override + public InterEdgesFilter getFilter(Workspace workspace) { return new InterEdgesFilter(partition); } + @Override public JPanel getPanel(Filter filter) { PartitionUI ui = Lookup.getDefault().lookup(PartitionUI.class); if (ui != null) { @@ -135,46 +146,40 @@ public JPanel getPanel(Filter filter) { return null; } + @Override public void destroy(Filter filter) { } } public static class InterEdgesFilter extends PartitionFilter implements EdgeFilter { - private Set partsValue; - public InterEdgesFilter(Partition partition) { super(partition); } @Override public String getName() { - return NbBundle.getMessage(IntraEdgesBuilder.class, "InterEdgesBuilder.name") + " (" + partition.getColumn().getTitle() + ")"; + return NbBundle.getMessage(IntraEdgesBuilder.class, "InterEdgesBuilder.name") + " (" + partition.getColumn().getTitle() + + ")"; } @Override public boolean init(Graph graph) { - boolean res = super.init(graph); - partsValue = new HashSet(); - for (Part p : parts) { - partsValue.add(p.getValue()); - } - return res; + this.graph = graph.getModel().getGraph(); + return partition != null && partition.getColumn() != null; } @Override public boolean evaluate(Graph graph, Edge edge) { - Object srcValue = edge.getSource().getAttributes().getValue(partition.getColumn().getIndex()); - Object destValue = edge.getTarget().getAttributes().getValue(partition.getColumn().getIndex()); - if (partsValue.contains(srcValue) && partsValue.contains(destValue) && !srcValue.equals(destValue)) { - return true; - } - return false; + Object srcValue = partition.getValue(edge.getSource(), graph); + Object destValue = partition.getValue(edge.getTarget(), graph); + srcValue = srcValue == null ? NULL : srcValue; + destValue = destValue == null ? NULL : destValue; + return parts.contains(srcValue) && parts.contains(destValue) && srcValue.equals(destValue); } @Override public void finish() { - partsValue = null; } } } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/partition/IntraEdgesBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/partition/IntraEdgesBuilder.java index 444dfc9e4c..e916bf06cf 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/partition/IntraEdgesBuilder.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/partition/IntraEdgesBuilder.java @@ -39,13 +39,16 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin.partition; import java.util.ArrayList; import java.util.List; import javax.swing.Icon; import javax.swing.JPanel; -import org.gephi.data.attributes.api.AttributeColumn; +import org.gephi.appearance.api.AppearanceController; +import org.gephi.appearance.api.AppearanceModel; +import org.gephi.appearance.api.Partition; import org.gephi.filters.api.FilterLibrary; import org.gephi.filters.plugin.partition.PartitionBuilder.PartitionFilter; import org.gephi.filters.spi.Category; @@ -53,41 +56,49 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.filters.spi.EdgeFilter; import org.gephi.filters.spi.Filter; import org.gephi.filters.spi.FilterBuilder; +import org.gephi.graph.api.Column; import org.gephi.graph.api.Edge; import org.gephi.graph.api.Graph; -import org.gephi.partition.api.EdgePartition; -import org.gephi.partition.api.NodePartition; -import org.gephi.partition.api.Partition; -import org.gephi.partition.api.PartitionController; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.project.api.Workspace; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author mbastian */ @ServiceProvider(service = CategoryBuilder.class) public class IntraEdgesBuilder implements CategoryBuilder { public final static Category INTRA_EDGES = new Category( - NbBundle.getMessage(IntraEdgesBuilder.class, "IntraEdgesBuilder.name"), - null, - FilterLibrary.ATTRIBUTES); + NbBundle.getMessage(IntraEdgesBuilder.class, "IntraEdgesBuilder.name"), + null, + FilterLibrary.ATTRIBUTES); + @Override public Category getCategory() { return INTRA_EDGES; } - public FilterBuilder[] getBuilders() { - List builders = new ArrayList(); - PartitionController pc = Lookup.getDefault().lookup(PartitionController.class); - if (pc.getModel() != null) { - pc.refreshPartitions(); - NodePartition[] nodePartitions = pc.getModel().getNodePartitions(); - for (NodePartition np : nodePartitions) { - IntraEdgesFilterBuilder builder = new IntraEdgesFilterBuilder(np.getColumn(), np); - builders.add(builder); + @Override + public FilterBuilder[] getBuilders(Workspace workspace) { + List builders = new ArrayList<>(); + GraphModel gm = Lookup.getDefault().lookup(GraphController.class).getGraphModel(workspace); + Graph graph = gm.getGraph(); + AppearanceModel am = Lookup.getDefault().lookup(AppearanceController.class).getModel(workspace); + + //Force refresh + am.getNodeFunctions(); + + for (Column nodeCol : gm.getNodeTable()) { + if (!nodeCol.isProperty()) { + Partition partition = am.getNodePartition(nodeCol); + if (am.getNodePartition(nodeCol) != null) { + IntraEdgesFilterBuilder builder = new IntraEdgesFilterBuilder(partition); + builders.add(builder); + } } } @@ -96,34 +107,38 @@ public FilterBuilder[] getBuilders() { private static class IntraEdgesFilterBuilder implements FilterBuilder { - private final AttributeColumn column; - private Partition partition; + private final Partition partition; - public IntraEdgesFilterBuilder(AttributeColumn column, NodePartition partition) { - this.column = column; + public IntraEdgesFilterBuilder(Partition partition) { this.partition = partition; } + @Override public Category getCategory() { return INTRA_EDGES; } + @Override public String getName() { - return column.getTitle(); + return partition.getColumn().getTitle(); } + @Override public Icon getIcon() { return null; } + @Override public String getDescription() { return NbBundle.getMessage(IntraEdgesBuilder.class, "IntraEdgesBuilder.description"); } - public IntraEdgesFilter getFilter() { + @Override + public IntraEdgesFilter getFilter(Workspace workspace) { return new IntraEdgesFilter(partition); } + @Override public JPanel getPanel(Filter filter) { PartitionUI ui = Lookup.getDefault().lookup(PartitionUI.class); if (ui != null) { @@ -132,6 +147,7 @@ public JPanel getPanel(Filter filter) { return null; } + @Override public void destroy(Filter filter) { } } @@ -144,24 +160,23 @@ public IntraEdgesFilter(Partition partition) { @Override public String getName() { - return NbBundle.getMessage(IntraEdgesBuilder.class, "IntraEdgesBuilder.name") + " (" + partition.getColumn().getTitle() + ")"; + return NbBundle.getMessage(IntraEdgesBuilder.class, "IntraEdgesBuilder.name") + " (" + partition.getColumn().getTitle() + + ")"; } @Override - public boolean evaluate(Graph graph, Edge edge) { - Object srcValue = edge.getSource().getAttributes().getValue(partition.getColumn().getIndex()); - Object destValue = edge.getTarget().getAttributes().getValue(partition.getColumn().getIndex()); - int size = parts.size(); - for (int i = 0; i < size; i++) { - Object obj = parts.get(i).getValue(); - if (obj == null && srcValue == null && destValue == null) { - return true; - } else if (obj != null && srcValue != null && destValue != null && obj.equals(srcValue) && obj.equals(destValue)) { - return true; - } - } + public boolean init(Graph graph) { + this.graph = graph.getModel().getGraph(); + return partition != null && partition.getColumn() != null; + } - return false; + @Override + public boolean evaluate(Graph graph, Edge edge) { + Object srcValue = partition.getValue(edge.getSource(), graph); + Object destValue = partition.getValue(edge.getTarget(), graph); + srcValue = srcValue == null ? NULL : srcValue; + destValue = destValue == null ? NULL : destValue; + return parts.contains(srcValue) && parts.contains(destValue) && !srcValue.equals(destValue); } } } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/partition/PartitionBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/partition/PartitionBuilder.java index 8655273c45..666f0ee4f7 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/partition/PartitionBuilder.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/partition/PartitionBuilder.java @@ -39,15 +39,21 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin.partition; +import java.lang.reflect.Array; import java.util.ArrayList; -import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; import java.util.List; +import java.util.Objects; +import java.util.Set; import javax.swing.Icon; import javax.swing.JPanel; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeUtils; +import org.gephi.appearance.api.AppearanceController; +import org.gephi.appearance.api.AppearanceModel; +import org.gephi.appearance.api.Partition; import org.gephi.filters.api.FilterLibrary; import org.gephi.filters.spi.Category; import org.gephi.filters.spi.CategoryBuilder; @@ -56,52 +62,62 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.filters.spi.FilterBuilder; import org.gephi.filters.spi.FilterProperty; import org.gephi.filters.spi.NodeFilter; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; import org.gephi.graph.api.Edge; import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphController; import org.gephi.graph.api.GraphModel; -import org.gephi.graph.api.HierarchicalGraph; import org.gephi.graph.api.Node; -import org.gephi.partition.api.EdgePartition; -import org.gephi.partition.api.NodePartition; -import org.gephi.partition.api.Part; -import org.gephi.partition.api.Partition; -import org.gephi.partition.api.PartitionController; +import org.gephi.project.api.Workspace; import org.openide.util.Exceptions; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = CategoryBuilder.class) public class PartitionBuilder implements CategoryBuilder { private final static Category PARTITION = new Category( - NbBundle.getMessage(PartitionBuilder.class, "PartitionBuilder.name"), - null, - FilterLibrary.ATTRIBUTES); + NbBundle.getMessage(PartitionBuilder.class, "PartitionBuilder.name"), + null, + FilterLibrary.ATTRIBUTES); + @Override public Category getCategory() { return PARTITION; } - public FilterBuilder[] getBuilders() { - List builders = new ArrayList(); - PartitionController pc = Lookup.getDefault().lookup(PartitionController.class); - if (pc.getModel() != null) { - pc.refreshPartitions(); - NodePartition[] nodePartitions = pc.getModel().getNodePartitions(); - EdgePartition[] edgePartitions = pc.getModel().getEdgePartitions(); - for (NodePartition np : nodePartitions) { - PartitionFilterBuilder builder = new PartitionFilterBuilder(np.getColumn(), np); - builders.add(builder); + @Override + public FilterBuilder[] getBuilders(Workspace workspace) { + List builders = new ArrayList<>(); + GraphModel gm = Lookup.getDefault().lookup(GraphController.class).getGraphModel(workspace); + AppearanceModel am = Lookup.getDefault().lookup(AppearanceController.class).getModel(workspace); + + //Force refresh + am.getNodeFunctions(); + am.getEdgeFunctions(); + + for (Column nodeCol : gm.getNodeTable()) { + if (!nodeCol.isProperty()) { + Partition partition = am.getNodePartition(nodeCol); + if (partition != null) { + PartitionFilterBuilder builder = new PartitionFilterBuilder(partition); + builders.add(builder); + } } - for (EdgePartition ep : edgePartitions) { - PartitionFilterBuilder builder = new PartitionFilterBuilder(ep.getColumn(), ep); - builders.add(builder); + } + + for (Column edgeCol : gm.getEdgeTable()) { + if (!edgeCol.isProperty()) { + Partition partition = am.getEdgePartition(edgeCol); + if (partition != null) { + PartitionFilterBuilder builder = new PartitionFilterBuilder(partition); + builders.add(builder); + } } } @@ -110,43 +126,45 @@ public FilterBuilder[] getBuilders() { private static class PartitionFilterBuilder implements FilterBuilder { - private final AttributeColumn column; - private Partition partition; + private final Partition partition; - public PartitionFilterBuilder(AttributeColumn column, NodePartition partition) { - this.column = column; - this.partition = partition; - } - - public PartitionFilterBuilder(AttributeColumn column, EdgePartition partition) { - this.column = column; + public PartitionFilterBuilder(Partition partition) { this.partition = partition; } + @Override public Category getCategory() { return PARTITION; } + @Override public String getName() { - return column.getTitle() + " (" + (partition instanceof NodePartition ? "Node" : "Edge") + ")"; + return partition.getColumn().getTitle() + " (" + (AttributeUtils.isNodeColumn(partition.getColumn()) + ? NbBundle.getMessage(PartitionFilterBuilder.class, "PartitionFilterBuilder.name.node") + : NbBundle.getMessage(PartitionFilterBuilder.class, "PartitionFilterBuilder.name.edge")) + ")"; } + @Override public Icon getIcon() { return null; } + @Override public String getDescription() { return NbBundle.getMessage(PartitionBuilder.class, "PartitionBuilder.description"); } - public PartitionFilter getFilter() { - if (AttributeUtils.getDefault().isNodeColumn(column)) { - return new NodePartitionFilter(partition); + @Override + public PartitionFilter getFilter(Workspace workspace) { + AppearanceModel am = Lookup.getDefault().lookup(AppearanceController.class).getModel(workspace); + if (AttributeUtils.isNodeColumn(partition.getColumn())) { + return new NodePartitionFilter(am, partition); } else { - return new EdgePartitionFilter(partition); + return new EdgePartitionFilter(am, partition); } } + @Override public JPanel getPanel(Filter filter) { PartitionUI ui = Lookup.getDefault().lookup(PartitionUI.class); if (ui != null) { @@ -155,109 +173,173 @@ public JPanel getPanel(Filter filter) { return null; } + @Override public void destroy(Filter filter) { } } public static class NodePartitionFilter extends PartitionFilter implements NodeFilter { - public NodePartitionFilter(Partition partition) { - super(partition); + public NodePartitionFilter(AppearanceModel appearanceModel, Partition partition) { + super(appearanceModel, partition); + } + + @Override + public boolean init(Graph graph) { + this.graph = graph.getModel().getGraph(); + return partition != null && partition.getColumn() != null; + } + + @Override + public void setColumn(Column column) { + // Bugfix #2519 + // Persistence provider doesn't grab the correct builder when using category builder + // This method assigns the proper partition based on the column parameter + if(partition == null || partition.getColumn() != column) { + appearanceModel.getNodeFunctions(); + this.partition = appearanceModel.getNodePartition(column); + } } } public static class EdgePartitionFilter extends PartitionFilter implements EdgeFilter { - public EdgePartitionFilter(Partition partition) { - super(partition); + public EdgePartitionFilter(AppearanceModel appearanceModel, Partition partition) { + super(appearanceModel, partition); + } + + @Override + public boolean init(Graph graph) { + this.graph = graph.getModel().getGraph();; + return partition != null && partition.getColumn() != null; + } + + @Override + public void setColumn(Column column) { + // Bugfix #2519 + // Persistence provider doesn't grab the correct builder when using category builder + // This method assigns the proper partition based on the column parameter + if(partition == null || partition.getColumn() != column) { + appearanceModel.getEdgeFunctions(); + this.partition = appearanceModel.getEdgePartition(column); + } } } public static abstract class PartitionFilter implements Filter { + protected static final Object NULL = new Object(); protected Partition partition; + protected final AppearanceModel appearanceModel; protected FilterProperty[] filterProperties; - protected List parts; + protected Set parts; + protected Graph graph; + protected boolean flattenList; public PartitionFilter(Partition partition) { + this(null, partition); + } + + public PartitionFilter(AppearanceModel appearanceModel, Partition partition) { this.partition = partition; - parts = new ArrayList(); + this.appearanceModel = appearanceModel; + parts = new HashSet<>(); } + @Override public String getName() { - return NbBundle.getMessage(PartitionBuilder.class, "PartitionBuilder.name") + " (" + partition.getColumn().getTitle() + ")"; + return NbBundle.getMessage(PartitionBuilder.class, "PartitionBuilder.name") + " (" + partition.getColumn().getTitle() + + ")"; } - public boolean init(Graph graph) { - HierarchicalGraph hg = (HierarchicalGraph) graph; - this.partition = Lookup.getDefault().lookup(PartitionController.class).buildPartition(partition.getColumn(), hg); - return true; + public boolean evaluate(Graph graph, Node node) { + Object value = partition.getValue(node, graph); + if (value == null) { + return parts.contains(NULL); + } else if (flattenList && partition.getColumn().isArray()) { + return listContains(value); + } else { + return parts.contains(value); + } } - public boolean evaluate(Graph graph, Node node) { - Object value = node.getNodeData().getAttributes().getValue(partition.getColumn().getIndex()); - int size = parts.size(); - for (int i = 0; i < size; i++) { - Object obj = parts.get(i).getValue(); - if (obj == null && value == null) { - return true; - } else if (obj != null && value != null && obj.equals(value)) { + private boolean listContains(Object value) { + int length = Array.getLength(value); + for (int i = 0; i < length; i++) { + Object val = Array.get(value, i); + if (parts.contains(val)) { return true; } } - return false; } public boolean evaluate(Graph graph, Edge edge) { - Object value = edge.getEdgeData().getAttributes().getValue(partition.getColumn().getIndex()); - int size = parts.size(); - for (int i = 0; i < size; i++) { - Object obj = parts.get(i).getValue(); - if (obj == null && value == null) { - return true; - } else if (obj != null && value != null && obj.equals(value)) { - return true; - } + Object value = partition.getValue(edge, graph); + if (value == null) { + return parts.contains(NULL); + } else if (flattenList && partition.getColumn().isArray()) { + return listContains(value); + } else { + return parts.contains(value); } - - return false; } public void finish() { } - public void addPart(Part part) { - if (!parts.contains(part)) { - List newParts = new ArrayList(parts.size() + 1); - newParts.addAll(parts); - newParts.add(part); - getProperties()[1].setValue(newParts); + public void addPart(Object value) { + if (value == null) { + if (parts.add(NULL)) { + getProperties()[1].setValue(parts); + } + } else if (parts.add(value)) { + getProperties()[1].setValue(parts); } } - public void removePart(Part part) { - List newParts = new ArrayList(parts); - if (newParts.remove(part)) { - getProperties()[1].setValue(newParts); + public void removePart(Object value) { + if (value == null) { + if (parts.remove(NULL)) { + getProperties()[1].setValue(parts); + } + } else if (parts.remove(value)) { + getProperties()[1].setValue(parts); } } public void unselectAll() { - getProperties()[1].setValue(new ArrayList()); + getProperties()[1].setValue(new HashSet<>()); + } + + public Set getFlattenParts() { + HashSet allParts = new HashSet(); + partition.getValues(graph).stream().filter(Objects::nonNull).forEach(value -> { + int length = Array.getLength(value); + for (int i = 0; i < length; i++) { + allParts.add(Array.get(value, i)); + } + }); + return allParts; } public void selectAll() { - getProperties()[1].setValue(Arrays.asList(partition.getParts())); + if (flattenList && partition.getColumn().isArray()) { + getProperties()[1].setValue(getFlattenParts()); + } else { + getProperties()[1].setValue(new HashSet<>(partition.getValues(graph))); + } } + @Override public FilterProperty[] getProperties() { if (filterProperties == null) { filterProperties = new FilterProperty[0]; try { - filterProperties = new FilterProperty[]{ - FilterProperty.createProperty(this, AttributeColumn.class, "column"), - FilterProperty.createProperty(this, List.class, "parts")}; + filterProperties = new FilterProperty[] { + FilterProperty.createProperty(this, Column.class, "column"), + FilterProperty.createProperty(this, Set.class, "parts"), + FilterProperty.createProperty(this, Boolean.class, "flattenList"),}; } catch (Exception ex) { Exceptions.printStackTrace(ex); } @@ -265,36 +347,35 @@ public FilterProperty[] getProperties() { return filterProperties; } - public Partition getCurrentPartition() { - if (partition.getPartsCount() == 0) { - //build partition - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getModel(); - this.partition = Lookup.getDefault().lookup(PartitionController.class).buildPartition(partition.getColumn(), graphModel.getHierarchicalGraphVisible()); - } - return partition; + public boolean isFlattenList() { + return flattenList; + } + + public void setFlattenList(boolean flattenList) { + this.flattenList = flattenList; } public Partition getPartition() { return partition; } - public List getParts() { + public Set getParts() { return parts; } - public AttributeColumn getColumn() { - return partition.getColumn(); + public Graph getGraph() { + return graph; } - public void setColumn(AttributeColumn column) { + public void setParts(Set parts) { + this.parts = parts; } - public void setParts(List parts) { - this.parts = parts; + public Column getColumn() { + return partition.getColumn(); } - public void setPartition(Partition partition) { - this.partition = partition; + public void setColumn(Column column) { } } } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/partition/PartitionCountBuilder.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/partition/PartitionCountBuilder.java index 8baf6b3955..d13a369f72 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/partition/PartitionCountBuilder.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/partition/PartitionCountBuilder.java @@ -39,56 +39,83 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.filters.plugin.partition; import java.util.ArrayList; +import java.util.Collection; import java.util.List; import javax.swing.JPanel; -import org.gephi.data.attributes.api.AttributeColumn; +import org.gephi.appearance.api.AppearanceController; +import org.gephi.appearance.api.AppearanceModel; +import org.gephi.appearance.api.Partition; import org.gephi.filters.api.FilterLibrary; import org.gephi.filters.api.Range; import org.gephi.filters.plugin.AbstractAttributeFilter; import org.gephi.filters.plugin.AbstractAttributeFilterBuilder; import org.gephi.filters.plugin.graph.RangeUI; -import org.gephi.filters.spi.*; -import org.gephi.graph.api.Attributable; +import org.gephi.filters.spi.Category; +import org.gephi.filters.spi.CategoryBuilder; +import org.gephi.filters.spi.EdgeFilter; +import org.gephi.filters.spi.Filter; +import org.gephi.filters.spi.FilterBuilder; +import org.gephi.filters.spi.FilterProperty; +import org.gephi.filters.spi.NodeFilter; +import org.gephi.filters.spi.RangeFilter; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; import org.gephi.graph.api.Graph; -import org.gephi.graph.api.HierarchicalGraph; -import org.gephi.partition.api.*; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.project.api.Workspace; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = CategoryBuilder.class) public class PartitionCountBuilder implements CategoryBuilder { private final static Category PARTITION_COUNT = new Category( - NbBundle.getMessage(PartitionCountBuilder.class, "PartitionCountBuilder.name"), - null, - FilterLibrary.ATTRIBUTES); + NbBundle.getMessage(PartitionCountBuilder.class, "PartitionCountBuilder.name"), + null, + FilterLibrary.ATTRIBUTES); + @Override public Category getCategory() { return PARTITION_COUNT; } - public FilterBuilder[] getBuilders() { - List builders = new ArrayList(); - PartitionController pc = Lookup.getDefault().lookup(PartitionController.class); - if (pc.getModel() != null) { - pc.refreshPartitions(); - NodePartition[] nodePartitions = pc.getModel().getNodePartitions(); - EdgePartition[] edgePartitions = pc.getModel().getEdgePartitions(); - for (NodePartition np : nodePartitions) { - PartitionCountFilterBuilder builder = new PartitionCountFilterBuilder(np.getColumn(), np); - builders.add(builder); + @Override + public FilterBuilder[] getBuilders(Workspace workspace) { + List builders = new ArrayList<>(); + GraphModel gm = Lookup.getDefault().lookup(GraphController.class).getGraphModel(workspace); + AppearanceModel am = Lookup.getDefault().lookup(AppearanceController.class).getModel(workspace); + + //Force refresh + am.getNodeFunctions(); + am.getEdgeFunctions(); + + for (Column nodeCol : gm.getNodeTable()) { + if (!nodeCol.isProperty()) { + Partition partition = am.getNodePartition(nodeCol); + if (partition != null) { + PartitionCountFilterBuilder builder = new PartitionCountFilterBuilder(partition); + builders.add(builder); + } } - for (EdgePartition ep : edgePartitions) { - PartitionCountFilterBuilder builder = new PartitionCountFilterBuilder(ep.getColumn(), ep); - builders.add(builder); + } + + for (Column edgeCol : gm.getEdgeTable()) { + if (!edgeCol.isProperty()) { + Partition partition = am.getEdgePartition(edgeCol); + if (partition != null) { + PartitionCountFilterBuilder builder = new PartitionCountFilterBuilder(partition); + builders.add(builder); + } } } @@ -97,20 +124,27 @@ public FilterBuilder[] getBuilders() { private static class PartitionCountFilterBuilder extends AbstractAttributeFilterBuilder { - private Partition partition; + private final Partition partition; - public PartitionCountFilterBuilder(AttributeColumn column, Partition partition) { - super(column, - PARTITION_COUNT, - NbBundle.getMessage(PartitionCountBuilder.class, "PartitionCountBuilder.description"), - null); + public PartitionCountFilterBuilder(Partition partition) { + super(partition.getColumn(), + PARTITION_COUNT, + NbBundle.getMessage(PartitionCountBuilder.class, "PartitionCountBuilder.description"), + null); this.partition = partition; } - public PartitionCountFilter getFilter() { - return new PartitionCountFilter(partition); + @Override + public PartitionCountFilter getFilter(Workspace workspace) { + AppearanceModel am = Lookup.getDefault().lookup(AppearanceController.class).getModel(workspace); + if (AttributeUtils.isNodeColumn(column)) { + return new PartitionCountFilter.Node(am, partition); + } else { + return new PartitionCountFilter.Edge(am, partition); + } } + @Override public JPanel getPanel(Filter filter) { RangeUI ui = Lookup.getDefault().lookup(RangeUI.class); if (ui != null) { @@ -120,57 +154,57 @@ public JPanel getPanel(Filter filter) { } } - public static class PartitionCountFilter extends AbstractAttributeFilter implements RangeFilter { + public static abstract class PartitionCountFilter extends AbstractAttributeFilter + implements RangeFilter { - private Partition partition; + protected final AppearanceModel appearanceModel; + protected Partition partition; private Range range; - public PartitionCountFilter(Partition partition) { + public PartitionCountFilter(AppearanceModel appearanceModel, Partition partition) { super(NbBundle.getMessage(PartitionCountBuilder.class, "PartitionCountBuilder.name"), - partition.getColumn()); + partition.getColumn()); this.partition = partition; - + this.appearanceModel = appearanceModel; + //Add property addProperty(Range.class, "range"); } + @Override public boolean init(Graph graph) { - HierarchicalGraph hg = (HierarchicalGraph) graph; - this.partition = Lookup.getDefault().lookup(PartitionController.class).buildPartition(partition.getColumn(), hg); - if (partition.getParts().length > 0) { - return true; - } - return false; + return partition != null && partition.getColumn() != null; } - public boolean evaluate(Graph graph, Attributable attributable) { - Part p = partition.getPart(attributable); - if (p != null) { - int partCount = p.getObjects().length; - return range.isInRange(partCount); - } - return false; + @Override + public boolean evaluate(Graph graph, Element element) { + Object p = partition.getValue(element, graph); + int partCount = partition.count(p, graph); + return range.isInRange(partCount); } + @Override public void finish() { } + @Override public Number[] getValues(Graph graph) { - if (partition.getPartsCount() == 0) { - //build partition - this.partition = Lookup.getDefault().lookup(PartitionController.class).buildPartition(partition.getColumn(), graph); - } - Integer[] values = new Integer[partition.getPartsCount()]; - Part[] parts = partition.getParts(); - for (int i = 0; i < parts.length; i++) { - int partCount = parts[i].getObjects().length; - values[i] = partCount; + if (init(graph)) { + Collection vals = partition.getValues(graph); + Integer[] values = new Integer[vals.size()]; + int i = 0; + for (Object v : vals) { + values[i++] = partition.count(v, graph); + } + return values; + } else { + return new Integer[0]; } - return values; } + @Override public FilterProperty getRangeProperty() { - return properties.get(1); + return getProperties()[1]; } public Range getRange() { @@ -180,5 +214,45 @@ public Range getRange() { public void setRange(Range range) { this.range = range; } + + public Column getColumn() { + return partition.getColumn(); + } + + @Override + public void setColumn(Column column) { + } + + public static class Node extends PartitionCountFilter implements NodeFilter { + + public Node(AppearanceModel appearanceModel, Partition partition) { + super(appearanceModel, partition); + } + + @Override + public void setColumn(Column column) { + // Bugfix #2519 + if(partition == null || partition.getColumn() != column) { + appearanceModel.getNodeFunctions(); + this.partition = appearanceModel.getNodePartition(column); + } + } + } + + public static class Edge extends PartitionCountFilter implements EdgeFilter { + + public Edge(AppearanceModel appearanceModel, Partition partition) { + super(appearanceModel, partition); + } + + @Override + public void setColumn(Column column) { + // Bugfix #2519 + if(partition == null || partition.getColumn() != column) { + appearanceModel.getEdgeFunctions(); + this.partition = appearanceModel.getEdgePartition(column); + } + } + } } } diff --git a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/partition/PartitionUI.java b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/partition/PartitionUI.java index 8e23712a89..d75c1a3aef 100644 --- a/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/partition/PartitionUI.java +++ b/modules/FiltersPlugin/src/main/java/org/gephi/filters/plugin/partition/PartitionUI.java @@ -38,17 +38,17 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.filters.plugin.partition; import javax.swing.JPanel; import org.gephi.filters.plugin.partition.PartitionBuilder.PartitionFilter; /** - * * @author Mathieu Bastian */ public interface PartitionUI { - public JPanel getPanel(PartitionFilter filter); + JPanel getPanel(PartitionFilter filter); } diff --git a/modules/FiltersPlugin/src/main/nbm/manifest.mf b/modules/FiltersPlugin/src/main/nbm/manifest.mf index 553bcafb9f..9ac33f2dee 100644 --- a/modules/FiltersPlugin/src/main/nbm/manifest.mf +++ b/modules/FiltersPlugin/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/filters/plugin/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Plugin +OpenIDE-Module-Name: Filters Plugin diff --git a/modules/FiltersPlugin/src/main/nbm/module.xml b/modules/FiltersPlugin/src/main/nbm/module.xml deleted file mode 100644 index b1f12dfad0..0000000000 --- a/modules/FiltersPlugin/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle.properties index bf27d7517a..43cbe2b964 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle.properties @@ -1,7 +1,4 @@ -OpenIDE-Module-Display-Category=Plugin -OpenIDE-Module-Long-Description=\ - Filters implementations, define new filters -OpenIDE-Module-Name=Filters Plugin +OpenIDE-Module-Long-Description=Filters implementations, define new filters OpenIDE-Module-Short-Description=Filters implementations AbstractAttributeFilterBuilder.Node = Node diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_ar.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_ca.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_ca.properties new file mode 100644 index 0000000000..be621d17d1 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_ca.properties @@ -0,0 +1,4 @@ +OpenIDE-Module-Long-Description=Filters implementations, define new filters +OpenIDE-Module-Short-Description=Filters implementations +AbstractAttributeFilterBuilder.Node=Node +AbstractAttributeFilterBuilder.Edge=Aresta diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_cs.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_cs.properties index dbc114d9d1..00564fd536 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_cs.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_cs.properties @@ -1,15 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-07 16\:21+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=Zaveden\u00ed filtr\u016f, ur\u010den\u00ed nov\u00fdch filtr\u016f - -OpenIDE-Module-Short-Description=Zaveden\u00ed filtr\u016f - -AbstractAttributeFilterBuilder.Node=Uzel - -AbstractAttributeFilterBuilder.Edge=Hrana +OpenIDE-Module-Long-Description=Zavedenν filtr\u016f, ur\u010denν novύch filtr\u016f +OpenIDE-Module-Short-Description=Zavedenν filtr\u016f + +AbstractAttributeFilterBuilder.Node = Uzel +AbstractAttributeFilterBuilder.Edge = Hrana diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_de.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_de.properties new file mode 100644 index 0000000000..db8f1f5b26 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_de.properties @@ -0,0 +1,5 @@ +OpenIDE-Module-Long-Description=Filter Implemtentierungen, definiere neue Filter +OpenIDE-Module-Short-Description=Filter Implementierungen + +AbstractAttributeFilterBuilder.Node = Knoten +AbstractAttributeFilterBuilder.Edge = Kante diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_es.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_es.properties index d6914bb652..cc917f49b7 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_es.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_es.properties @@ -1,16 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-10 22\:06+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Implementaciones de los filtros, definir nuevos filtros - -OpenIDE-Module-Short-Description=Implementaciones de los filtros - -AbstractAttributeFilterBuilder.Node=Nodo - -AbstractAttributeFilterBuilder.Edge=Arista +OpenIDE-Module-Long-Description=Implementaciones de los filtros, definir nuevos filtros +OpenIDE-Module-Short-Description=Implementaciones de los filtros + +AbstractAttributeFilterBuilder.Node = Nodo +AbstractAttributeFilterBuilder.Edge = Arista diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_fr.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_fr.properties index 5930f0e969..7f3270f053 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_fr.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_fr.properties @@ -1,16 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-08 15\:11+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Impl\u00e9mentations des filtres, d\u00e9finit de nouveaux filtres - -OpenIDE-Module-Short-Description=Impl\u00e9mentations des filtres - -AbstractAttributeFilterBuilder.Node=Noeud - -AbstractAttributeFilterBuilder.Edge=Lien +OpenIDE-Module-Long-Description=Implιmentations des filtres, dιfinit de nouveaux filtres +OpenIDE-Module-Short-Description=Implιmentations des filtres + +AbstractAttributeFilterBuilder.Node = Noeud +AbstractAttributeFilterBuilder.Edge = Lien diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_he.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_he.properties new file mode 100644 index 0000000000..c25d3f7bdb --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_he.properties @@ -0,0 +1,4 @@ +OpenIDE-Module-Long-Description=Filters implementations, define new filters +OpenIDE-Module-Short-Description=Filters implementations +AbstractAttributeFilterBuilder.Node=Node +AbstractAttributeFilterBuilder.Edge=Edge diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_hu.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_hu.properties new file mode 100644 index 0000000000..41a5d8323d --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_hu.properties @@ -0,0 +1,6 @@ + + +AbstractAttributeFilterBuilder.Node=Csom\u00F3pont +OpenIDE-Module-Short-Description=Megval\u00F3s\u00EDt\u00E1sok sz\u0171r\u0151i +OpenIDE-Module-Long-Description=Megval\u00F3s\u00EDt\u00E1sok sz\u0171r\u0151i, \u00FAj sz\u0171r\u0151k meghat\u00E1roz\u00E1sa +AbstractAttributeFilterBuilder.Edge=\u00C9l diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_it.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_it.properties new file mode 100644 index 0000000000..26f3b7e170 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_it.properties @@ -0,0 +1,4 @@ +OpenIDE-Module-Long-Description=Implementazioni dei filtri, definizione di nuovi filtri +OpenIDE-Module-Short-Description=Filters implementations +AbstractAttributeFilterBuilder.Node=Node +AbstractAttributeFilterBuilder.Edge=Edge diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_ja.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_ja.properties index dac4e734b2..09e3dc31ed 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_ja.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_ja.properties @@ -1,15 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-15 10\:50+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u30d5\u30a3\u30eb\u30bf\u306e\u5b9f\u88c5\u306f\u3001\u65b0\u898f\u30d5\u30a3\u30eb\u30bf\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002 - -OpenIDE-Module-Short-Description=\u30d5\u30a3\u30eb\u30bf\u306e\u5b9f\u88c5 - -AbstractAttributeFilterBuilder.Node=\u30ce\u30fc\u30c9 - -AbstractAttributeFilterBuilder.Edge=\u8fba +OpenIDE-Module-Long-Description=\u30d5\u30a3\u30eb\u30bf\u306e\u5b9f\u88c5\u306f\u3001\u65b0\u898f\u30d5\u30a3\u30eb\u30bf\u3092\u5b9a\u7fa9\u3057\u307e\u3059\u3002 +OpenIDE-Module-Short-Description=\u30d5\u30a3\u30eb\u30bf\u306e\u5b9f\u88c5 + +AbstractAttributeFilterBuilder.Node = \u30ce\u30fc\u30c9 +AbstractAttributeFilterBuilder.Edge = \u8fba diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_ko.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_ko.properties new file mode 100644 index 0000000000..d402d3b6a6 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_ko.properties @@ -0,0 +1,6 @@ + + +OpenIDE-Module-Short-Description=\uD544\uD130 \uAD6C\uD604 +AbstractAttributeFilterBuilder.Node=\uB178\uB4DC +AbstractAttributeFilterBuilder.Edge=\uC5E3\uC9C0 +OpenIDE-Module-Long-Description=\uD544\uD130 \uAD6C\uD604, \uC0C8 \uD544\uD130 \uC815\uC758\uD558\uAE30 diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_nl.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_nl.properties new file mode 100644 index 0000000000..e24547d17a --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_nl.properties @@ -0,0 +1,4 @@ +OpenIDE-Module-Long-Description=Filters implementations, define new filters +OpenIDE-Module-Short-Description=Filters implementations +AbstractAttributeFilterBuilder.Node=Knoop +AbstractAttributeFilterBuilder.Edge=Edge diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_pt_BR.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_pt_BR.properties index 5f6b63d818..6bce285e11 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_pt_BR.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_pt_BR.properties @@ -1,16 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -# C\u00e9lio Faria Jr. , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-12 12\:41+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Implementa\u00e7\u00f5es de filtros, defini\u00e7\u00e3o de novos filtros - -OpenIDE-Module-Short-Description=Implementa\u00e7\u00f5es de filtros - -AbstractAttributeFilterBuilder.Node=N\u00f3 - -AbstractAttributeFilterBuilder.Edge=Aresta +OpenIDE-Module-Long-Description=Implementaηυes de filtros, definiηγo de novos filtros +OpenIDE-Module-Short-Description=Implementaηυes de filtros + +AbstractAttributeFilterBuilder.Node = Nσ +AbstractAttributeFilterBuilder.Edge = Aresta diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_ro.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_ro.properties new file mode 100644 index 0000000000..bc38deba4a --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_ro.properties @@ -0,0 +1,6 @@ + + +OpenIDE-Module-Long-Description=Implement\u0103ri de filtre, define\u0219te filtre noi +OpenIDE-Module-Short-Description=Implement\u0103ri de filtre +AbstractAttributeFilterBuilder.Node=Nod +AbstractAttributeFilterBuilder.Edge=Muchie diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_ru.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_ru.properties index e0bf710ff0..21cc03089b 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_ru.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_ru.properties @@ -1,15 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-12 21\:44+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 - -OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 - -AbstractAttributeFilterBuilder.Node=\u0423\u0437\u0435\u043b - -AbstractAttributeFilterBuilder.Edge=\u0420\u0435\u0431\u0440\u043e +OpenIDE-Module-Long-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043d\u043e\u0432\u044b\u0445 \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 +OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 + +AbstractAttributeFilterBuilder.Node = \u0423\u0437\u0435\u043b +AbstractAttributeFilterBuilder.Edge = \u0420\u0435\u0431\u0440\u043e diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_th.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_tr.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_tr.properties new file mode 100644 index 0000000000..c25d3f7bdb --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_tr.properties @@ -0,0 +1,4 @@ +OpenIDE-Module-Long-Description=Filters implementations, define new filters +OpenIDE-Module-Short-Description=Filters implementations +AbstractAttributeFilterBuilder.Node=Node +AbstractAttributeFilterBuilder.Edge=Edge diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_uk.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_uk.properties new file mode 100644 index 0000000000..a74c559f6b --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_uk.properties @@ -0,0 +1,4 @@ +OpenIDE-Module-Long-Description=\u0412\u043F\u0440\u043E\u0432\u0430\u0434\u0436\u0435\u043D\u043D\u044F \u0444\u0456\u043B\u044C\u0442\u0440\u0456\u0432, \u0432\u0438\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u043D\u043E\u0432\u0438\u0445 \u0444\u0456\u043B\u044C\u0442\u0440\u0456\u0432 +OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043B\u0456\u0437\u0430\u0446\u0456\u044F \u0444\u0456\u043B\u044C\u0442\u0440\u0456\u0432 +AbstractAttributeFilterBuilder.Node=\u0412\u0443\u0437\u043E\u043B +AbstractAttributeFilterBuilder.Edge=\u041A\u0440\u0430\u0439 diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_zh_CN.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_zh_CN.properties index 1b1a680e8b..c51d4aa469 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_zh_CN.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_zh_CN.properties @@ -1,15 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-15 09\:37+0000\nLast-Translator\: Xi-Nian Zuo \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u8fc7\u6ee4\u5668\u7684\u5b9e\u73b0\uff0c\u5b9a\u4e49\u65b0\u7684\u8fc7\u6ee4\u5668 - -OpenIDE-Module-Short-Description=\u8fc7\u6ee4\u5668\u7684\u5b9e\u73b0 - -AbstractAttributeFilterBuilder.Node=\u8282\u70b9 - -AbstractAttributeFilterBuilder.Edge=\u8fb9 +OpenIDE-Module-Long-Description=\u8fc7\u6ee4\u5668\u7684\u5b9e\u73b0\uff0c\u5b9a\u4e49\u65b0\u7684\u8fc7\u6ee4\u5668 +OpenIDE-Module-Short-Description=\u8fc7\u6ee4\u5668\u7684\u5b9e\u73b0 + +AbstractAttributeFilterBuilder.Node = \u8282\u70b9 +AbstractAttributeFilterBuilder.Edge = \u8fb9 diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_zh_TW.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_zh_TW.properties new file mode 100644 index 0000000000..c25d3f7bdb --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/Bundle_zh_TW.properties @@ -0,0 +1,4 @@ +OpenIDE-Module-Long-Description=Filters implementations, define new filters +OpenIDE-Module-Short-Description=Filters implementations +AbstractAttributeFilterBuilder.Node=Node +AbstractAttributeFilterBuilder.Edge=Edge diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle.properties index feb7562ee6..c19667c4e9 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle.properties @@ -5,4 +5,7 @@ AttributeEqualBuilder.name = Equal AttributeEqualBuilder.description = Keep nodes/edges with particular value (String, Number, Boolean) for a column AttributeNonNullBuilder.name = Non-null -AttributeNonNullBuilder.description = Keep nodes/edges with non-null values for a particular column \ No newline at end of file +AttributeNonNullBuilder.description = Keep nodes/edges with non-null values for a particular column + +AttributeContainsBuilder.name = List Contains +AttributeContainsBuilder.description = Keep nodes/edges with a list column containing a particular value \ No newline at end of file diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_ar.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_ca.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_ca.properties new file mode 100644 index 0000000000..e009e8d7a2 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_ca.properties @@ -0,0 +1,6 @@ +AttributeRangeBuilder.name=Interval +AttributeRangeBuilder.description=Keep nodes/edges with number values within a range (inclusive) +AttributeEqualBuilder.name=Igual a +AttributeEqualBuilder.description=Keep nodes/edges with particular value (String, Number, Boolean) for a column +AttributeNonNullBuilder.name=Non-null +AttributeNonNullBuilder.description=Keep nodes/edges with non-null values for a particular column diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_cs.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_cs.properties index 683a7fd2fa..158ec02a52 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_cs.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_cs.properties @@ -1,19 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-21 20\:27+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -AttributeRangeBuilder.name=Rozsah - -AttributeRangeBuilder.description=Ponechat uzly/hrany s \u010d\u00edseln\u00fdm i hodnotami v rozsahu (zahrnuj\u00edc\u00ed) - -AttributeEqualBuilder.name=Rovnost - -AttributeEqualBuilder.description=Ponechat uzly/hrany s ur\u010ditou hodnotou (\u0158et\u011bzec, \u010c\u00edslo, Boolean) ve sloupci - -AttributeNonNullBuilder.name=Nepr\u00e1zdn\u00e9 - -AttributeNonNullBuilder.description=Ponechat uzly/hrany s nepr\u00e1zdn\u00fdmi hodnotami v ur\u010dit\u00e9m sloupci +AttributeRangeBuilder.name = Rozsah +AttributeRangeBuilder.description = Ponechat uzly/hrany s \u010dνselnύm i hodnotami v rozsahu (zahrnujνcν) + +AttributeEqualBuilder.name = Rovnost +AttributeEqualBuilder.description = Ponechat uzly/hrany s ur\u010ditou hodnotou (\u0158et\u011bzec, \u010cνslo, Boolean) ve sloupci + +AttributeNonNullBuilder.name = Neprαzdnι +AttributeNonNullBuilder.description = Ponechat uzly/hrany s neprαzdnύmi hodnotami v ur\u010ditιm sloupci diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_de.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_de.properties new file mode 100644 index 0000000000..f7e62375b0 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_de.properties @@ -0,0 +1,8 @@ +AttributeRangeBuilder.name = Bereich +AttributeRangeBuilder.description = Behalte Knoten/Kanten mit numerischen Werten innerhalb eines Bereichs (inklusive) + +AttributeEqualBuilder.name = Gleich +AttributeEqualBuilder.description = Behalte Knoten/Kanten mit bestimmtem Wert (String, Number, Boolean) fόr eine Spalte + +AttributeNonNullBuilder.name = Nicht-Null +AttributeNonNullBuilder.description = Behalte Knoten/Kanten mit nicht-null Werten in einer bestimmten Spalte diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_es.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_es.properties index ca6fccc5e3..28de68e7b0 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_es.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_es.properties @@ -1,19 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:05+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - AttributeRangeBuilder.name=Rango - -AttributeRangeBuilder.description=Mantener nodos/aristas con valores num\u00e9ricos entre un rango (inclusivo) - +AttributeRangeBuilder.description=Mantener nodos/aristas con valores numιricos entre un rango (inclusivo) AttributeEqualBuilder.name=Igualdad - -AttributeEqualBuilder.description=Mantener nodos/aristas con un valor particular (cadena de car\u00e1cteres, n\u00famero, booleano) en una columna - +AttributeEqualBuilder.description=Mantener nodos/aristas con un valor particular (cadena de carαcteres, nϊmero, booleano) en una columna AttributeNonNullBuilder.name=No-nulo - AttributeNonNullBuilder.description=Mantener nodos/aristas con un valor no nulo en una columna +AttributeContainsBuilder.name=La lista incluye +AttributeContainsBuilder.description=Mantener nodos/aristas con una columna de lista que contenga un valor determinado diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_fr.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_fr.properties index 06d19973b3..abae4da59d 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_fr.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_fr.properties @@ -1,19 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:05+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -AttributeRangeBuilder.name=Plage - -AttributeRangeBuilder.description=Garde les noeuds/liens ayant des valeurs incluses dans la plage. - -AttributeEqualBuilder.name=\u00c9gal - -AttributeEqualBuilder.description=Garde les noeuds/liens ayant une valeur particuli\u00e8re (texte, numbre, bool\u00e9en) dans une colonne de donn\u00e9es. - -AttributeNonNullBuilder.name=Non nul - -AttributeNonNullBuilder.description=Garde les noeuds/liens ayant des valeurs non nul dans une colonne de donn\u00e9es particuli\u00e8re. +AttributeRangeBuilder.name = Plage +AttributeRangeBuilder.description = Garde les noeuds/liens ayant des valeurs incluses dans la plage. + +AttributeEqualBuilder.name = Ιgal +AttributeEqualBuilder.description = Garde les noeuds/liens ayant une valeur particuliθre (texte, numbre, boolιen) dans une colonne de donnιes. + +AttributeNonNullBuilder.name = Non nul +AttributeNonNullBuilder.description = Garde les noeuds/liens ayant des valeurs non nul dans une colonne de donnιes particuliθre. diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_he.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_he.properties new file mode 100644 index 0000000000..6ddd4e4ea2 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_he.properties @@ -0,0 +1,6 @@ +AttributeRangeBuilder.name=Range +AttributeRangeBuilder.description=Keep nodes/edges with number values within a range (inclusive) +AttributeEqualBuilder.name=Equal +AttributeEqualBuilder.description=Keep nodes/edges with particular value (String, Number, Boolean) for a column +AttributeNonNullBuilder.name=Non-null +AttributeNonNullBuilder.description=Keep nodes/edges with non-null values for a particular column diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_hu.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_hu.properties new file mode 100644 index 0000000000..31f1a02e9f --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_hu.properties @@ -0,0 +1,10 @@ + + +AttributeContainsBuilder.name=Lista Tartalmaz +AttributeEqualBuilder.description=Tartsa meg a csom\u00F3pontokat/\u00E9leket adott \u00E9rt\u00E9kkel (karakterl\u00E1nc, sz\u00E1m, logikai \u00E9rt\u00E9k) egy oszlophoz +AttributeContainsBuilder.description=Tartsa a csom\u00F3pontokat/\u00E9leket egy adott \u00E9rt\u00E9ket tartalmaz\u00F3 listaoszloppal +AttributeEqualBuilder.name=Egyenl\u0151 +AttributeRangeBuilder.name=Hat\u00F3t\u00E1vols\u00E1g +AttributeRangeBuilder.description=Tartsa a csom\u00F3pontokat/\u00E9leket sz\u00E1m\u00E9rt\u00E9kekkel egy tartom\u00E1nyon bel\u00FCl (bele\u00E9rtve) +AttributeNonNullBuilder.name=Nem nulla +AttributeNonNullBuilder.description=Tartsa meg a csom\u00F3pontokat/\u00E9leket nem nulla \u00E9rt\u00E9kekkel egy adott oszlophoz diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_it.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_it.properties new file mode 100644 index 0000000000..8e6ec6655e --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_it.properties @@ -0,0 +1,8 @@ +AttributeRangeBuilder.name=Intervallo +AttributeRangeBuilder.description=Keep nodes/edges with number values within a range (inclusive) +AttributeEqualBuilder.name=Equal +AttributeEqualBuilder.description=Keep nodes/edges with particular value (String, Number, Boolean) for a column +AttributeNonNullBuilder.name=Non-null +AttributeNonNullBuilder.description=Keep nodes/edges with non-null values for a particular column +AttributeContainsBuilder.name=L'elenco contiene +AttributeContainsBuilder.description=Mantieni i nodi e gli archi la cui colonna elenco contiene un valore specifico diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_ja.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_ja.properties index 7a02f32a19..e3173fabb1 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_ja.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_ja.properties @@ -1,19 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-20 01\:41+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -AttributeRangeBuilder.name=\u7bc4\u56f2 - -AttributeRangeBuilder.description=\u7bc4\u56f2\u5185\u306e\u6570\u5024(\u4e21\u7aef\u3092\u542b\u3080)\u306b\u30ce\u30fc\u30c9/\u8fba\u3092\u4fdd\u3064 - -AttributeEqualBuilder.name=\u7b49\u4fa1 - -AttributeEqualBuilder.description=\u5217\u3067\u7279\u5b9a\u306e\u5024(\u6587\u5b57\u5217\u3001\u6570\u5024\u3001\u30d6\u30fc\u30eb\u5024)\u306b\u30ce\u30fc\u30c9/\u8fba\u3092\u4fdd\u3064 - -AttributeNonNullBuilder.name=\u975e\u7a7a\u5024 - -AttributeNonNullBuilder.description=\u7279\u5b9a\u306e\u5217\u3067\u30ce\u30fc\u30c9/\u8fba\u3092\u975e\u7a7a\u5024\u306b\u4fdd\u3064 +AttributeRangeBuilder.name = \u7bc4\u56f2 +AttributeRangeBuilder.description = \u7bc4\u56f2\u5185\u306e\u6570\u5024(\u4e21\u7aef\u3092\u542b\u3080)\u306b\u30ce\u30fc\u30c9/\u8fba\u3092\u4fdd\u3064 + +AttributeEqualBuilder.name = \u7b49\u4fa1 +AttributeEqualBuilder.description = \u5217\u3067\u7279\u5b9a\u306e\u5024(\u6587\u5b57\u5217\u3001\u6570\u5024\u3001\u30d6\u30fc\u30eb\u5024)\u306b\u30ce\u30fc\u30c9/\u8fba\u3092\u4fdd\u3064 + +AttributeNonNullBuilder.name = \u975e\u7a7a\u5024 +AttributeNonNullBuilder.description = \u7279\u5b9a\u306e\u5217\u3067\u30ce\u30fc\u30c9/\u8fba\u3092\u975e\u7a7a\u5024\u306b\u4fdd\u3064 diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_ko.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_ko.properties new file mode 100644 index 0000000000..8f661062b0 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_ko.properties @@ -0,0 +1,10 @@ + + +AttributeRangeBuilder.name=\uBC94\uC704 +AttributeRangeBuilder.description=\uB178\uB4DC/\uC5E3\uC9C0\uB97C \uBC94\uC704 \uB0B4\uC758 \uC22B\uC790 \uAC12\uC73C\uB85C \uC720\uC9C0\uD558\uAE30 (\uAC12 \uD3EC\uD568) +AttributeEqualBuilder.name=\uAC19\uC74C +AttributeEqualBuilder.description=\uB178\uB4DC/\uC5E3\uC9C0\uB97C \uC5F4\uC5D0 \uB300\uD55C \uD2B9\uC815 \uAC12(\uBB38\uC790\uC5F4, \uC22B\uC790, \uBD80\uC6B8\uD615)\uC73C\uB85C \uC720\uC9C0\uD558\uAE30 +AttributeNonNullBuilder.name=null \uC544\uB2CC \uAC12 +AttributeNonNullBuilder.description=\uB178\uB4DC/\uC5E3\uC9C0\uB97C \uD2B9\uC815 \uC5F4\uC5D0 \uB300\uD574 null\uC774 \uC544\uB2CC \uAC12\uC73C\uB85C \uC720\uC9C0\uD558\uAE30 +AttributeContainsBuilder.name=\uD3EC\uD568 \uBAA9\uB85D +AttributeContainsBuilder.description=\uD2B9\uC815 \uAC12\uC744 \uD3EC\uD568\uD558\uB294 \uB9AC\uC2A4\uD2B8 \uC5F4\uC774 \uC788\uB294 \uB178\uB4DC/\uC5E3\uC9C0\uB97C \uC720\uC9C0\uD558\uAE30 diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_nl.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_nl.properties new file mode 100644 index 0000000000..6ddd4e4ea2 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_nl.properties @@ -0,0 +1,6 @@ +AttributeRangeBuilder.name=Range +AttributeRangeBuilder.description=Keep nodes/edges with number values within a range (inclusive) +AttributeEqualBuilder.name=Equal +AttributeEqualBuilder.description=Keep nodes/edges with particular value (String, Number, Boolean) for a column +AttributeNonNullBuilder.name=Non-null +AttributeNonNullBuilder.description=Keep nodes/edges with non-null values for a particular column diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_pt_BR.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_pt_BR.properties index e6e7da2a54..5331b249ec 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_pt_BR.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_pt_BR.properties @@ -1,19 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 17\:25+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -AttributeRangeBuilder.name=Intervalo - -AttributeRangeBuilder.description=Manter os n\u00f3s/arestas com valores num\u00e9ricos dentro de um intervalo (inclusive) - -AttributeEqualBuilder.name=Igual - -AttributeEqualBuilder.description=Manter os n\u00f3s/arestas com determinados valores de uma coluna (Texto, Num\u00e9rico, Booleano) - -AttributeNonNullBuilder.name=N\u00e3o nulo - -AttributeNonNullBuilder.description=Manter os n\u00f3s/arestas com valores n\u00e3o nulos para uma determinada coluna +AttributeRangeBuilder.name = Intervalo +AttributeRangeBuilder.description = Manter os nσs/arestas com valores numιricos dentro de um intervalo (inclusive) + +AttributeEqualBuilder.name = Igual +AttributeEqualBuilder.description = Manter os nσs/arestas com determinados valores de uma coluna (Texto, Numιrico, Booleano) + +AttributeNonNullBuilder.name = Nγo nulo +AttributeNonNullBuilder.description = Manter os nσs/arestas com valores nγo nulos para uma determinada coluna diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_ro.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_ro.properties new file mode 100644 index 0000000000..1ee8d9cb76 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_ro.properties @@ -0,0 +1,8 @@ + + +AttributeRangeBuilder.name=Interval +AttributeRangeBuilder.description=P\u0103streaz\u0103 nodurile/muchiile cu valori numerice \u00EEntr-un anumit interval (inclusiv) +AttributeEqualBuilder.name=Egal +AttributeEqualBuilder.description=P\u0103streaz\u0103 nodurile/muchiile cu o anumit\u0103 valoare (\u0218ir de caractere, Num\u0103r, Boolean) \u00EEntr-o coloana +AttributeNonNullBuilder.name=Nenul +AttributeNonNullBuilder.description=P\u0103streaz\u0103 nodurile/muchiile cu valori nenule \u00EEntr-o anumit\u0103 coloan\u0103 diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_ru.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_ru.properties index 7de30b279f..b5f44aed2f 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_ru.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_ru.properties @@ -1,19 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-11-03 08\:26+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -AttributeRangeBuilder.name=\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d - -AttributeRangeBuilder.description=\u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0443\u0437\u043b\u044b/\u0440\u0451\u0431\u0440\u0430 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 (\u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e) - -AttributeEqualBuilder.name=\u041f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e - -AttributeEqualBuilder.description=\u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0443\u0437\u043b\u044b/\u0440\u0451\u0431\u0440\u0430 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 (\u0441\u0442\u0440\u043e\u043a\u0438, \u0447\u0438\u0441\u043b\u0430, \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f) - -AttributeNonNullBuilder.name=\u041d\u0435 \u043d\u043e\u043b\u044c - -AttributeNonNullBuilder.description=\u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0443\u0437\u043b\u044b/\u0440\u0451\u0431\u0440\u0430 \u0441 \u043d\u0435 \u043f\u0443\u0441\u0442\u044b\u043c (not-null) \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 +AttributeRangeBuilder.name = \u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d +AttributeRangeBuilder.description = \u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0443\u0437\u043b\u044b/\u0440\u0451\u0431\u0440\u0430 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u043c\u0438 \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 (\u0432\u043a\u043b\u044e\u0447\u0438\u0442\u0435\u043b\u044c\u043d\u043e) + +AttributeEqualBuilder.name = \u041f\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e +AttributeEqualBuilder.description = \u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0443\u0437\u043b\u044b/\u0440\u0451\u0431\u0440\u0430 \u0441 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 (\u0441\u0442\u0440\u043e\u043a\u0438, \u0447\u0438\u0441\u043b\u0430, \u043b\u043e\u0433\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f) + +AttributeNonNullBuilder.name = \u041d\u0435 \u043d\u043e\u043b\u044c +AttributeNonNullBuilder.description = \u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0443\u0437\u043b\u044b/\u0440\u0451\u0431\u0440\u0430 \u0441 \u043d\u0435 \u043f\u0443\u0441\u0442\u044b\u043c (not-null) \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u0432 \u043a\u043e\u043b\u043e\u043d\u043a\u0435 diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_th.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_tr.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_tr.properties new file mode 100644 index 0000000000..6ddd4e4ea2 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_tr.properties @@ -0,0 +1,6 @@ +AttributeRangeBuilder.name=Range +AttributeRangeBuilder.description=Keep nodes/edges with number values within a range (inclusive) +AttributeEqualBuilder.name=Equal +AttributeEqualBuilder.description=Keep nodes/edges with particular value (String, Number, Boolean) for a column +AttributeNonNullBuilder.name=Non-null +AttributeNonNullBuilder.description=Keep nodes/edges with non-null values for a particular column diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_zh_CN.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_zh_CN.properties index cb48262575..3ebc0dfef0 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_zh_CN.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_zh_CN.properties @@ -1,18 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:14+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -AttributeRangeBuilder.name=\u8303\u56f4 - -AttributeRangeBuilder.description=\u4fdd\u6301\u8282\u70b9/\u8fb9\u5728\u4e00\u5b9a\u8303\u56f4\u5185\uff08\u542b\uff09\u7684\u6570\u5b57\u503c - -AttributeEqualBuilder.name=\u7b49\u4e8e - -AttributeEqualBuilder.description=\u4fdd\u6301\u8282\u70b9/\u8fb9\u4e3a\u4e00\u5217\u7279\u5b9a\u7684\u503c\uff08\u5b57\u7b26\u4e32\uff0c\u6570\u5b57\uff0c\u5e03\u5c14\uff09 - -AttributeNonNullBuilder.name=\u975e\u7a7a - -AttributeNonNullBuilder.description=\u4fdd\u6301\u8282\u70b9/\u8fb9\u4e3a\u975e\u7a7a\u503c\u7684\u7279\u5b9a\u5217 +AttributeRangeBuilder.name = \u8303\u56f4 +AttributeRangeBuilder.description = \u4fdd\u6301\u8282\u70b9/\u8fb9\u5728\u4e00\u5b9a\u8303\u56f4\u5185\uff08\u542b\uff09\u7684\u6570\u5b57\u503c + +AttributeEqualBuilder.name = \u7b49\u4e8e +AttributeEqualBuilder.description = \u4fdd\u6301\u8282\u70b9/\u8fb9\u4e3a\u4e00\u5217\u7279\u5b9a\u7684\u503c\uff08\u5b57\u7b26\u4e32\uff0c\u6570\u5b57\uff0c\u5e03\u5c14\uff09 + +AttributeNonNullBuilder.name = \u975e\u7a7a +AttributeNonNullBuilder.description = \u4fdd\u6301\u8282\u70b9/\u8fb9\u4e3a\u975e\u7a7a\u503c\u7684\u7279\u5b9a\u5217 diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_zh_TW.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_zh_TW.properties new file mode 100644 index 0000000000..6ddd4e4ea2 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/Bundle_zh_TW.properties @@ -0,0 +1,6 @@ +AttributeRangeBuilder.name=Range +AttributeRangeBuilder.description=Keep nodes/edges with number values within a range (inclusive) +AttributeEqualBuilder.name=Equal +AttributeEqualBuilder.description=Keep nodes/edges with particular value (String, Number, Boolean) for a column +AttributeNonNullBuilder.name=Non-null +AttributeNonNullBuilder.description=Keep nodes/edges with non-null values for a particular column diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/cs.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/cs.po deleted file mode 100644 index 31512c0226..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/cs.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-21 20:27+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "AttributeRangeBuilder.name" -msgstr "Rozsah" - -msgid "AttributeRangeBuilder.description" -msgstr "Ponechat uzly/hrany s číselnΓ½m i hodnotami v rozsahu (zahrnujΓ­cΓ­)" - -msgid "AttributeEqualBuilder.name" -msgstr "Rovnost" - -msgid "AttributeEqualBuilder.description" -msgstr "Ponechat uzly/hrany s určitou hodnotou (ŘetΔ›zec, Číslo, Boolean) ve sloupci" - -msgid "AttributeNonNullBuilder.name" -msgstr "NeprΓ‘zdnΓ©" - -msgid "AttributeNonNullBuilder.description" -msgstr "Ponechat uzly/hrany s neprΓ‘zdnΓ½mi hodnotami v určitΓ©m sloupci" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/es.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/es.po deleted file mode 100644 index 65b42163d6..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/es.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:05+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "AttributeRangeBuilder.name" -msgstr "Rango" - -msgid "AttributeRangeBuilder.description" -msgstr "Mantener nodos/aristas con valores numΓ©ricos entre un rango (inclusivo)" - -msgid "AttributeEqualBuilder.name" -msgstr "Igualdad" - -msgid "AttributeEqualBuilder.description" -msgstr "Mantener nodos/aristas con un valor particular (cadena de carΓ‘cteres, nΓΊmero, booleano) en una columna" - -msgid "AttributeNonNullBuilder.name" -msgstr "No-nulo" - -msgid "AttributeNonNullBuilder.description" -msgstr "Mantener nodos/aristas con un valor no nulo en una columna" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/fr.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/fr.po deleted file mode 100644 index 873993f88d..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/fr.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:05+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "AttributeRangeBuilder.name" -msgstr "Plage" - -msgid "AttributeRangeBuilder.description" -msgstr "Garde les noeuds/liens ayant des valeurs incluses dans la plage." - -msgid "AttributeEqualBuilder.name" -msgstr "Γ‰gal" - -msgid "AttributeEqualBuilder.description" -msgstr "Garde les noeuds/liens ayant une valeur particuliΓ¨re (texte, numbre, boolΓ©en) dans une colonne de donnΓ©es." - -msgid "AttributeNonNullBuilder.name" -msgstr "Non nul" - -msgid "AttributeNonNullBuilder.description" -msgstr "Garde les noeuds/liens ayant des valeurs non nul dans une colonne de donnΓ©es particuliΓ¨re." diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/ja.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/ja.po deleted file mode 100644 index 9a9e7b832a..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/ja.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-20 01:41+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "AttributeRangeBuilder.name" -msgstr "η―„ε›²" - -msgid "AttributeRangeBuilder.description" -msgstr "η―„ε›²ε†…γζ•°ε€€(丑端を含む)γ«γƒŽγƒΌγƒ‰/辺を保぀" - -msgid "AttributeEqualBuilder.name" -msgstr "η­‰δΎ‘" - -msgid "AttributeEqualBuilder.description" -msgstr "εˆ—γ§η‰Ήεšγε€€(ζ–‡ε­—εˆ—γ€ζ•°ε€€γ€γƒ–γƒΌγƒ«ε€€)γ«γƒŽγƒΌγƒ‰/辺を保぀" - -msgid "AttributeNonNullBuilder.name" -msgstr "ιžη©Ίε€€" - -msgid "AttributeNonNullBuilder.description" -msgstr "η‰Ήεšγεˆ—γ§γƒŽγƒΌγƒ‰/θΎΊγ‚’ιžη©Ίε€€γ«δΏγ€" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/org-gephi-filters-plugin-attribute.pot b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/org-gephi-filters-plugin-attribute.pot deleted file mode 100644 index 12c5516a9c..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/org-gephi-filters-plugin-attribute.pot +++ /dev/null @@ -1,35 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "AttributeRangeBuilder.name" -msgstr "Range" - -msgid "AttributeRangeBuilder.description" -msgstr "Keep nodes/edges with number values within a range (inclusive)" - -msgid "AttributeEqualBuilder.name" -msgstr "Equal" - -msgid "AttributeEqualBuilder.description" -msgstr "" -"Keep nodes/edges with particular value (String, Number, Boolean) for a column" - -msgid "AttributeNonNullBuilder.name" -msgstr "Non-null" - -msgid "AttributeNonNullBuilder.description" -msgstr "Keep nodes/edges with non-null values for a particular column" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/pt_BR.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/pt_BR.po deleted file mode 100644 index 1bf2ccbd7c..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/pt_BR.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 17:25+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "AttributeRangeBuilder.name" -msgstr "Intervalo" - -msgid "AttributeRangeBuilder.description" -msgstr "Manter os nΓ³s/arestas com valores numΓ©ricos dentro de um intervalo (inclusive)" - -msgid "AttributeEqualBuilder.name" -msgstr "Igual" - -msgid "AttributeEqualBuilder.description" -msgstr "Manter os nΓ³s/arestas com determinados valores de uma coluna (Texto, NumΓ©rico, Booleano)" - -msgid "AttributeNonNullBuilder.name" -msgstr "NΓ£o nulo" - -msgid "AttributeNonNullBuilder.description" -msgstr "Manter os nΓ³s/arestas com valores nΓ£o nulos para uma determinada coluna" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/ru.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/ru.po deleted file mode 100644 index 89273a27f3..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/ru.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-11-03 08:26+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "AttributeRangeBuilder.name" -msgstr "Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½" - -msgid "AttributeRangeBuilder.description" -msgstr "ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡƒΠ·Π»Ρ‹/Ρ€Ρ‘Π±Ρ€Π° со значСниями Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅ (Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ)" - -msgid "AttributeEqualBuilder.name" -msgstr "По Π·Π½Π°Ρ‡Π΅Π½ΠΈΡŽ" - -msgid "AttributeEqualBuilder.description" -msgstr "ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡƒΠ·Π»Ρ‹/Ρ€Ρ‘Π±Ρ€Π° с ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π² ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ (строки, числа, логичСскиС значСния)" - -msgid "AttributeNonNullBuilder.name" -msgstr "НС ноль" - -msgid "AttributeNonNullBuilder.description" -msgstr "ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡƒΠ·Π»Ρ‹/Ρ€Ρ‘Π±Ρ€Π° с Π½Π΅ пустым (not-null) Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Π² ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ΅ " diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/zh_CN.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/zh_CN.po deleted file mode 100644 index e5fd28d02e..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/attribute/zh_CN.po +++ /dev/null @@ -1,36 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:14+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "AttributeRangeBuilder.name" -msgstr "θŒƒε›΄" - -msgid "AttributeRangeBuilder.description" -msgstr "δΏζŒθŠ‚η‚Ή/θΎΉεœ¨δΈ€εšθŒƒε›΄ε†…οΌˆε«οΌ‰ηš„ζ•°ε­—ε€Ό" - -msgid "AttributeEqualBuilder.name" -msgstr "η­‰δΊŽ" - -msgid "AttributeEqualBuilder.description" -msgstr "δΏζŒθŠ‚η‚Ή/θΎΉδΈΊδΈ€εˆ—η‰Ήεšηš„ε€ΌοΌˆε­—η¬¦δΈ²οΌŒζ•°ε­—οΌŒεΈƒε°”οΌ‰" - -msgid "AttributeNonNullBuilder.name" -msgstr "非空" - -msgid "AttributeNonNullBuilder.description" -msgstr "δΏζŒθŠ‚η‚Ή/θΎΉδΈΊιžη©Ίε€Όηš„η‰Ήεšεˆ—" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/cs.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/cs.po deleted file mode 100644 index 3584527e7a..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/cs.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-07 16:21+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ZavedenΓ­ filtrΕ―, určenΓ­ novΓ½ch filtrΕ―" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ZavedenΓ­ filtrΕ―" - -msgid "AbstractAttributeFilterBuilder.Node" -msgstr "Uzel" - -msgid "AbstractAttributeFilterBuilder.Edge" -msgstr "Hrana" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_ar.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_ca.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_ca.properties new file mode 100644 index 0000000000..9dfbcef7c9 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_ca.properties @@ -0,0 +1,2 @@ +DynamicRangeBuilder.category = Dinΰmic +DynamicRangeBuilder.name = Interval dinΰmic diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_cs.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_cs.properties index a5c8312c8e..edbd651217 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_cs.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_cs.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-21 18\:22+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -DynamicRangeBuilder.category=Dynamick\u00e9 - -DynamicRangeBuilder.name=Dynamick\u00fd rozsah +DynamicRangeBuilder.category = Dynamickι +DynamicRangeBuilder.name = Dynamickύ rozsah diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_de.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_de.properties new file mode 100644 index 0000000000..8d2f415938 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_de.properties @@ -0,0 +1,2 @@ +DynamicRangeBuilder.category = Dynamisch +DynamicRangeBuilder.name = Dynamischer Bereich diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_es.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_es.properties index 4c3e1f4be8..7e05293c48 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_es.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_es.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:05+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -DynamicRangeBuilder.category=Din\u00e1mico - -DynamicRangeBuilder.name=Rango din\u00e1mico +DynamicRangeBuilder.category = Dinαmico +DynamicRangeBuilder.name = Rango dinαmico diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_fr.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_fr.properties index f03f8ccead..aabe212637 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_fr.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_fr.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:05+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -DynamicRangeBuilder.category=Dynamique - -DynamicRangeBuilder.name=Plage dynamique +DynamicRangeBuilder.category = Dynamique +DynamicRangeBuilder.name = Plage dynamique diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_he.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_he.properties new file mode 100644 index 0000000000..b51b5db0f6 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_he.properties @@ -0,0 +1,2 @@ +DynamicRangeBuilder.category=Dynamic +DynamicRangeBuilder.name=Dynamic Range diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_hu.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_hu.properties new file mode 100644 index 0000000000..712fe9410d --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_hu.properties @@ -0,0 +1,4 @@ + + +DynamicRangeBuilder.category=Dinamikus +DynamicRangeBuilder.name=Dinamikus hat\u00F3k\u00F6r diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_it.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_it.properties new file mode 100644 index 0000000000..24c32cfed8 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_it.properties @@ -0,0 +1,2 @@ +DynamicRangeBuilder.category=Dinamico +DynamicRangeBuilder.name=Dynamic Range diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_ja.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_ja.properties index dc14db69fc..40b55aed3c 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_ja.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_ja.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-18 10\:49+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -DynamicRangeBuilder.category=\u52d5\u7684 - -DynamicRangeBuilder.name=\u52d5\u7684\u7bc4\u56f2 +DynamicRangeBuilder.category = \u52d5\u7684 +DynamicRangeBuilder.name = \u52d5\u7684\u7bc4\u56f2 diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_ko.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_ko.properties new file mode 100644 index 0000000000..2d1dbea69f --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_ko.properties @@ -0,0 +1,4 @@ + + +DynamicRangeBuilder.category=\uB3D9\uC801 +DynamicRangeBuilder.name=\uB3D9\uC801 \uBC94\uC704 diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_nl.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_nl.properties new file mode 100644 index 0000000000..b51b5db0f6 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_nl.properties @@ -0,0 +1,2 @@ +DynamicRangeBuilder.category=Dynamic +DynamicRangeBuilder.name=Dynamic Range diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_pt_BR.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_pt_BR.properties index 2c5741df4a..efc6564b20 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_pt_BR.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_pt_BR.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 17\:30+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -DynamicRangeBuilder.category=Din\u00e2mico - -DynamicRangeBuilder.name=Faixa din\u00e2mica +DynamicRangeBuilder.category = Dinβmico +DynamicRangeBuilder.name = Faixa dinβmica diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_ro.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_ro.properties new file mode 100644 index 0000000000..4e6faf0d40 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_ro.properties @@ -0,0 +1,4 @@ + + +DynamicRangeBuilder.category=Dinamic +DynamicRangeBuilder.name=Interval dinamic diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_ru.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_ru.properties index 7711f96583..6d8cab4f5b 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_ru.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_ru.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-21 22\:41+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -DynamicRangeBuilder.category=\u0414\u0438\u043d\u0430\u043c\u0438\u043a\u0430 - -DynamicRangeBuilder.name=\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 +DynamicRangeBuilder.category = \u0414\u0438\u043d\u0430\u043c\u0438\u043a\u0430 +DynamicRangeBuilder.name = \u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0444\u0438\u043b\u044c\u0442\u0440 diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_th.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_tr.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_tr.properties new file mode 100644 index 0000000000..b51b5db0f6 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_tr.properties @@ -0,0 +1,2 @@ +DynamicRangeBuilder.category=Dynamic +DynamicRangeBuilder.name=Dynamic Range diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_uk.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_uk.properties new file mode 100644 index 0000000000..fc05e64e03 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_uk.properties @@ -0,0 +1,2 @@ +DynamicRangeBuilder.category=\u0414\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0438\u0439 +DynamicRangeBuilder.name=\u0414\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0438\u0439 \u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_zh_CN.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_zh_CN.properties index a8941135fd..d2dac908b6 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_zh_CN.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_zh_CN.properties @@ -1,10 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:14+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -DynamicRangeBuilder.category=\u52a8\u6001 - -DynamicRangeBuilder.name=\u52a8\u6001\u8303\u56f4 +DynamicRangeBuilder.category = \u52a8\u6001 +DynamicRangeBuilder.name = \u52a8\u6001\u8303\u56f4 diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_zh_TW.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_zh_TW.properties new file mode 100644 index 0000000000..b51b5db0f6 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/Bundle_zh_TW.properties @@ -0,0 +1,2 @@ +DynamicRangeBuilder.category=Dynamic +DynamicRangeBuilder.name=Dynamic Range diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/cs.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/cs.po deleted file mode 100644 index a6397878de..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/cs.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-21 18:22+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "DynamicRangeBuilder.category" -msgstr "DynamickΓ©" - -msgid "DynamicRangeBuilder.name" -msgstr "DynamickΓ½ rozsah" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/es.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/es.po deleted file mode 100644 index 39ab63e7c5..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/es.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:05+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "DynamicRangeBuilder.category" -msgstr "DinΓ‘mico" - -msgid "DynamicRangeBuilder.name" -msgstr "Rango dinΓ‘mico" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/fr.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/fr.po deleted file mode 100644 index 15b243f013..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/fr.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:05+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "DynamicRangeBuilder.category" -msgstr "Dynamique" - -msgid "DynamicRangeBuilder.name" -msgstr "Plage dynamique" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/ja.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/ja.po deleted file mode 100644 index 68e5bd173b..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-18 10:49+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "DynamicRangeBuilder.category" -msgstr "ε‹•ηš„" - -msgid "DynamicRangeBuilder.name" -msgstr "ε‹•ηš„η―„ε›²" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/org-gephi-filters-plugin-dynamic.pot b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/org-gephi-filters-plugin-dynamic.pot deleted file mode 100644 index 5b0ef826ee..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/org-gephi-filters-plugin-dynamic.pot +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "DynamicRangeBuilder.category" -msgstr "Dynamic" - -msgid "DynamicRangeBuilder.name" -msgstr "Dynamic Range" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/pt_BR.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/pt_BR.po deleted file mode 100644 index 108a3e4f7f..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/pt_BR.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 17:30+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "DynamicRangeBuilder.category" -msgstr "DinΓ’mico" - -msgid "DynamicRangeBuilder.name" -msgstr "Faixa dinΓ’mica" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/ru.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/ru.po deleted file mode 100644 index d6b7cf0570..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/ru.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-21 22:41+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "DynamicRangeBuilder.category" -msgstr "Π”ΠΈΠ½Π°ΠΌΠΈΠΊΠ°" - -msgid "DynamicRangeBuilder.name" -msgstr "ДинамичСский Ρ„ΠΈΠ»ΡŒΡ‚Ρ€" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/zh_CN.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/zh_CN.po deleted file mode 100644 index de76add70f..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/dynamic/zh_CN.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:14+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "DynamicRangeBuilder.category" -msgstr "εŠ¨ζ€" - -msgid "DynamicRangeBuilder.name" -msgstr "εŠ¨ζ€θŒƒε›΄" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle.properties index ed7c0538a5..f806c3b3e9 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle.properties @@ -1,4 +1,8 @@ EdgeWeightBuilder.name = Edge Weight EdgeWeightBuilder.description = Keep edges within a particular weight range SelfLoopFilterBuilder.name = Self-Loop -SelfLoopFilterBuilder.description = Removes self-loops \ No newline at end of file +SelfLoopFilterBuilder.description = Removes self-loops +EdgeTypeBuilder.name = Edge Type +EdgeTypeBuilder.description = Keep edges of a particular type +MutualEdgeBuilder.name = Mutual Edge +MutualEdgeBuilder.description = Keep edges that have a mutual/reciprocal edge (only for directed edges) \ No newline at end of file diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_ar.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_ca.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_ca.properties new file mode 100644 index 0000000000..e113d5ecfd --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_ca.properties @@ -0,0 +1,8 @@ +EdgeWeightBuilder.name=Edge Weight +EdgeWeightBuilder.description=Keep edges within a particular weight range +SelfLoopFilterBuilder.name=Self-Loop +SelfLoopFilterBuilder.description=Removes self-loops +EdgeTypeBuilder.name=Tipus d'aresta: +EdgeTypeBuilder.description=Mantι les arestes d'un tipus determinat +MutualEdgeBuilder.name=Mutual Edge +MutualEdgeBuilder.description=Keep edges that have a mutual/reciprocal edge (only for directed edges) diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_cs.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_cs.properties index 89ab8910fb..f8b3ba9b89 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_cs.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_cs.properties @@ -1,15 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-17 07\:00+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -EdgeWeightBuilder.name=V\u00e1ha hrany - -EdgeWeightBuilder.description=Ponechat hrany v rozsahu ur\u010dit\u00e9 v\u00e1hy - -SelfLoopFilterBuilder.name=Vlastn\u00ed smy\u010dka - -SelfLoopFilterBuilder.description=Odstran\u00ed vlastn\u00ed smy\u010dku +EdgeWeightBuilder.name = Vαha hrany +EdgeWeightBuilder.description = Ponechat hrany v rozsahu ur\u010ditι vαhy +SelfLoopFilterBuilder.name = Vlastnν smy\u010dka +SelfLoopFilterBuilder.description = Odstranν vlastnν smy\u010dku +EdgeTypeBuilder.name = Typ hrany +EdgeTypeBuilder.description = Ponechat hrany ur\u010ditιho typu +# MutualEdgeBuilder.name = Mutual Edge +# MutualEdgeBuilder.description = Keep edges that have a mutual/reciprocal edge (only for directed edges) diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_de.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_de.properties new file mode 100644 index 0000000000..5c4ea82488 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_de.properties @@ -0,0 +1,8 @@ +EdgeWeightBuilder.name = Kantengewicht +EdgeWeightBuilder.description = Behalte Kanten innerhalb eines bestimmten Gewichts-Bereich +SelfLoopFilterBuilder.name = Schleife +SelfLoopFilterBuilder.description = Entfernt Schleifen +EdgeTypeBuilder.name = Kanten-Typ +EdgeTypeBuilder.description = Behalte Kanten eines bestimmten Typs +MutualEdgeBuilder.name = Mutuelle Kante +MutualEdgeBuilder.description = Behalte Kanten bei, die eine reziproke Kante besitzen (nur fόr gerichtete Kanten) diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_es.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_es.properties index 3b2ec400e1..38b2218b0e 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_es.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_es.properties @@ -1,16 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:38+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -EdgeWeightBuilder.name=Peso de arista - -EdgeWeightBuilder.description=Mantener aristas con peso entre un rango particular - -SelfLoopFilterBuilder.name=Bucle - -SelfLoopFilterBuilder.description=Elimina bucles +EdgeWeightBuilder.name = Peso de arista +EdgeWeightBuilder.description = Mantener aristas con peso entre un rango particular +SelfLoopFilterBuilder.name = Bucle +SelfLoopFilterBuilder.description = Elimina bucles +EdgeTypeBuilder.name = Tipo de arista +EdgeTypeBuilder.description = Mantiene las aristas de un tipo en particular +MutualEdgeBuilder.name = Arista mutua +MutualEdgeBuilder.description = Mantiene las aristas que tienen una arista mutua/recνproca (solo para aristas dirigidas) diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_fr.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_fr.properties index 1cbc95c602..d296225bdc 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_fr.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_fr.properties @@ -1,15 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:32+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -EdgeWeightBuilder.name=Poids des liens - -EdgeWeightBuilder.description=EdgeWeightBuilder.description - -!SelfLoopFilterBuilder.name= - -!SelfLoopFilterBuilder.description= +EdgeWeightBuilder.name = Poids des liens +EdgeWeightBuilder.description = EdgeWeightBuilder.description +SelfLoopFilterBuilder.name = Boucle +SelfLoopFilterBuilder.description = Supprimer les boucles +EdgeTypeBuilder.name = Type de lien +EdgeTypeBuilder.description = Garder les liens d'un certain type +MutualEdgeBuilder.name = Lien mutuel +MutualEdgeBuilder.description = Gardez les liens qui ont un lien mutuel / rιciproque (uniquement pour les liens orientιs) diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_he.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_he.properties new file mode 100644 index 0000000000..389973b3c3 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_he.properties @@ -0,0 +1,8 @@ +EdgeWeightBuilder.name=Edge Weight +EdgeWeightBuilder.description=Keep edges within a particular weight range +SelfLoopFilterBuilder.name=Self-Loop +SelfLoopFilterBuilder.description=Removes self-loops +EdgeTypeBuilder.name=Edge Type +EdgeTypeBuilder.description=Keep edges of a particular type +MutualEdgeBuilder.name=Mutual Edge +MutualEdgeBuilder.description=Keep edges that have a mutual/reciprocal edge (only for directed edges) diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_hu.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_hu.properties new file mode 100644 index 0000000000..c909ccc2aa --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_hu.properties @@ -0,0 +1,9 @@ + + +EdgeWeightBuilder.description=Tartsa az \u00E9leket egy adott s\u00FAlytartom\u00E1nyon bel\u00FCl +EdgeWeightBuilder.name=\u00C9ls\u00FAly +MutualEdgeBuilder.description=Tartsa meg azokat az \u00E9leket, amelyeknek k\u00F6lcs\u00F6n\u00F6s/reciprok \u00E9l\u00FCk van (csak ir\u00E1ny\u00EDtott \u00E9lekn\u00E9l) +SelfLoopFilterBuilder.description=Elt\u00E1vol\u00EDtja az \u00F6nhurkokat +EdgeTypeBuilder.description=Tartsa meg egy adott t\u00EDpus\u00FA \u00E9leket +EdgeTypeBuilder.name=\u00C9l t\u00EDpusa: +SelfLoopFilterBuilder.name=\u00D6nhurkok diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_it.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_it.properties new file mode 100644 index 0000000000..940f5f8274 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_it.properties @@ -0,0 +1,8 @@ +EdgeWeightBuilder.name=Peso degli archi +EdgeWeightBuilder.description=Keep edges within a particular weight range +SelfLoopFilterBuilder.name=Self-Loop +SelfLoopFilterBuilder.description=Removes self-loops +EdgeTypeBuilder.name=Edge Type +EdgeTypeBuilder.description=Keep edges of a particular type +MutualEdgeBuilder.name=Mutual Edge +MutualEdgeBuilder.description=Keep edges that have a mutual/reciprocal edge (only for directed edges) diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_ja.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_ja.properties index 167c371138..2e9da70f22 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_ja.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_ja.properties @@ -1,15 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011-2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-12 10\:03+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -EdgeWeightBuilder.name=\u8fba\u306e\u91cd\u307f - -EdgeWeightBuilder.description=\u4e00\u5b9a\u306e\u91cd\u307f\u5185\u3067\u8fba\u3092\u4fdd\u3064 - -SelfLoopFilterBuilder.name=\u30bb\u30eb\u30d5\u30fb\u30eb\u30fc\u30d7 - -SelfLoopFilterBuilder.description=\u30bb\u30eb\u30d5\u30fb\u30eb\u30fc\u30d5\u306e\u9664\u53bb +EdgeWeightBuilder.name = \u8fba\u306e\u91cd\u307f +EdgeWeightBuilder.description = \u4e00\u5b9a\u306e\u91cd\u307f\u5185\u3067\u8fba\u3092\u4fdd\u3064 +SelfLoopFilterBuilder.name = \u30bb\u30eb\u30d5\u30fb\u30eb\u30fc\u30d7 +SelfLoopFilterBuilder.description = \u30bb\u30eb\u30d5\u30fb\u30eb\u30fc\u30d5\u306e\u9664\u53bb +# EdgeTypeBuilder.name = Edge Type +# EdgeTypeBuilder.description = Keep edges of a particular type +# MutualEdgeBuilder.name = Mutual Edge +# MutualEdgeBuilder.description = Keep edges that have a mutual/reciprocal edge (only for directed edges) diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_ko.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_ko.properties new file mode 100644 index 0000000000..d7c4998cab --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_ko.properties @@ -0,0 +1,10 @@ + + +EdgeWeightBuilder.description=\uC5E3\uC9C0\uB97C \uD2B9\uC815 \uAC00\uC911\uCE58 \uBC94\uC704 \uB0B4\uC5D0 \uC720\uC9C0 +EdgeWeightBuilder.name=\uC5E3\uC9C0 \uAC00\uC911\uCE58 +MutualEdgeBuilder.description=\uC0C1\uD638\uC801 \uC5F0\uACB0 \uC5E3\uC9C0\uB97C \uAC16\uB294 \uC5E3\uC9C0\uB4E4\uC744 \uC720\uC9C0 (\uBC29\uD5A5\uC131 \uC5E3\uC9C0\uB9CC \uD574\uB2F9) +SelfLoopFilterBuilder.description=\uC790\uAE30 \uC21C\uD658\uC744 \uC81C\uAC70\uD569\uB2C8\uB2E4 +MutualEdgeBuilder.name=\uC0C1\uD638 \uC5E3\uC9C0 +EdgeTypeBuilder.description=\uD2B9\uC815 \uC720\uD615\uC758 \uC5E3\uC9C0\uB97C \uC720\uC9C0 +EdgeTypeBuilder.name=\uC5E3\uC9C0 \uC720\uD615 +SelfLoopFilterBuilder.name=\uC790\uAE30 \uC21C\uD658 diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_nl.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_nl.properties new file mode 100644 index 0000000000..389973b3c3 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_nl.properties @@ -0,0 +1,8 @@ +EdgeWeightBuilder.name=Edge Weight +EdgeWeightBuilder.description=Keep edges within a particular weight range +SelfLoopFilterBuilder.name=Self-Loop +SelfLoopFilterBuilder.description=Removes self-loops +EdgeTypeBuilder.name=Edge Type +EdgeTypeBuilder.description=Keep edges of a particular type +MutualEdgeBuilder.name=Mutual Edge +MutualEdgeBuilder.description=Keep edges that have a mutual/reciprocal edge (only for directed edges) diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_pt_BR.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_pt_BR.properties index 1fa378ea35..050d036ee7 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_pt_BR.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_pt_BR.properties @@ -1,16 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -# C\u00e9lio Faria Jr. , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-18 11\:27+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -EdgeWeightBuilder.name=Peso da aresta - -EdgeWeightBuilder.description=Manter arestas que estejam em uma determinada faixa de peso - -SelfLoopFilterBuilder.name=Auto-loop - -SelfLoopFilterBuilder.description=Remove auto-loops +EdgeWeightBuilder.name = Peso da aresta +EdgeWeightBuilder.description = Manter arestas que estejam em uma determinada faixa de peso +SelfLoopFilterBuilder.name = Auto-loop +SelfLoopFilterBuilder.description = Remove auto-loops +EdgeTypeBuilder.name = Tipo de Aresta +EdgeTypeBuilder.description = Manter arestas de um tipo especνfico +# MutualEdgeBuilder.name = Mutual Edge +# MutualEdgeBuilder.description = Keep edges that have a mutual/reciprocal edge (only for directed edges) diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_ro.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_ro.properties new file mode 100644 index 0000000000..f1fee7fb35 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_ro.properties @@ -0,0 +1,10 @@ + + +EdgeWeightBuilder.name=Ponderea Muchiei +EdgeWeightBuilder.description=P\u0103streaz\u0103 muchiile cu ponderea \u00EEntr-un anumit interval +SelfLoopFilterBuilder.name=Bucle +SelfLoopFilterBuilder.description=Elimin\u0103 buclele +EdgeTypeBuilder.name=Tipul muchiei +EdgeTypeBuilder.description=P\u0103streaz\u0103 muchiile de un anumit tip +MutualEdgeBuilder.name=Muchie Reciproc\u0103 +MutualEdgeBuilder.description=P\u0103streaz\u0103 muchiile care au o muchie opus\u0103/reciproc\u0103 (doar pentru muchii orientate) diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_ru.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_ru.properties index cd6c132705..831172a010 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_ru.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_ru.properties @@ -1,15 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:32+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -EdgeWeightBuilder.name=\u0412\u0435\u0441 \u0440\u0435\u0431\u0440\u0430 - -EdgeWeightBuilder.description=\u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0451\u0431\u0440\u0430 \u0441 \u0432\u0435\u0441\u043e\u043c \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 - -!SelfLoopFilterBuilder.name= - -!SelfLoopFilterBuilder.description= +EdgeWeightBuilder.name = \u0412\u0435\u0441 \u0440\u0435\u0431\u0440\u0430 +EdgeWeightBuilder.description = \u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0451\u0431\u0440\u0430 \u0441 \u0432\u0435\u0441\u043e\u043c \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 +# SelfLoopFilterBuilder.name = Self-Loop +# SelfLoopFilterBuilder.description = Removes self-loops +# EdgeTypeBuilder.name = Edge Type +# EdgeTypeBuilder.description = Keep edges of a particular type +# MutualEdgeBuilder.name = Mutual Edge +# MutualEdgeBuilder.description = Keep edges that have a mutual/reciprocal edge (only for directed edges) diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_th.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_tr.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_tr.properties new file mode 100644 index 0000000000..389973b3c3 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_tr.properties @@ -0,0 +1,8 @@ +EdgeWeightBuilder.name=Edge Weight +EdgeWeightBuilder.description=Keep edges within a particular weight range +SelfLoopFilterBuilder.name=Self-Loop +SelfLoopFilterBuilder.description=Removes self-loops +EdgeTypeBuilder.name=Edge Type +EdgeTypeBuilder.description=Keep edges of a particular type +MutualEdgeBuilder.name=Mutual Edge +MutualEdgeBuilder.description=Keep edges that have a mutual/reciprocal edge (only for directed edges) diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_zh_CN.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_zh_CN.properties index 5815461feb..b01c7e1500 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_zh_CN.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_zh_CN.properties @@ -1,14 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:32+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - EdgeWeightBuilder.name=\u8fb9\u7684\u6743\u91cd - EdgeWeightBuilder.description=\u4fdd\u6301\u8fb9\u5728\u4e00\u4e2a\u7279\u5b9a\u7684\u6743\u91cd\u8303\u56f4\u5185 - -!SelfLoopFilterBuilder.name= - -!SelfLoopFilterBuilder.description= +SelfLoopFilterBuilder.name=\u81ea\u73af +SelfLoopFilterBuilder.description=\u79fb\u9664\u81ea\u73af +EdgeTypeBuilder.name=\u8fb9\u7684\u7c7b\u578b\u201d +EdgeTypeBuilder.description=\u4fdd\u6301\u8fb9\u5728\u4e00\u4e2a\u7279\u5b9a\u7684\u6743\u91cd\u8303\u56f4\u5185 +MutualEdgeBuilder.name=\u53cc\u5411\u8fb9 +MutualEdgeBuilder.description=\u4FDD\u7559\u6709\u76F8\u4E92/\u5012\u6570\u8FB9\u7684\u8FB9\uFF08\u4EC5\u5BF9\u6709\u5411\u8FB9\uFF09 diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_zh_TW.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_zh_TW.properties new file mode 100644 index 0000000000..389973b3c3 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/Bundle_zh_TW.properties @@ -0,0 +1,8 @@ +EdgeWeightBuilder.name=Edge Weight +EdgeWeightBuilder.description=Keep edges within a particular weight range +SelfLoopFilterBuilder.name=Self-Loop +SelfLoopFilterBuilder.description=Removes self-loops +EdgeTypeBuilder.name=Edge Type +EdgeTypeBuilder.description=Keep edges of a particular type +MutualEdgeBuilder.name=Mutual Edge +MutualEdgeBuilder.description=Keep edges that have a mutual/reciprocal edge (only for directed edges) diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/cs.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/cs.po deleted file mode 100644 index f1cc4d042e..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/cs.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-17 07:00+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "EdgeWeightBuilder.name" -msgstr "VΓ‘ha hrany" - -msgid "EdgeWeightBuilder.description" -msgstr "Ponechat hrany v rozsahu určitΓ© vΓ‘hy" - -msgid "SelfLoopFilterBuilder.name" -msgstr "VlastnΓ­ smyčka" - -msgid "SelfLoopFilterBuilder.description" -msgstr "OdstranΓ­ vlastnΓ­ smyčku" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/es.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/es.po deleted file mode 100644 index 31405cb622..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/es.po +++ /dev/null @@ -1,32 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:38+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "EdgeWeightBuilder.name" -msgstr "Peso de arista" - -msgid "EdgeWeightBuilder.description" -msgstr "Mantener aristas con peso entre un rango particular" - -msgid "SelfLoopFilterBuilder.name" -msgstr "Bucle" - -msgid "SelfLoopFilterBuilder.description" -msgstr "Elimina bucles" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/fr.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/fr.po deleted file mode 100644 index d840c357b6..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/fr.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:32+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "EdgeWeightBuilder.name" -msgstr "Poids des liens" - -msgid "EdgeWeightBuilder.description" -msgstr "EdgeWeightBuilder.description" - -msgid "SelfLoopFilterBuilder.name" -msgstr "" - -msgid "SelfLoopFilterBuilder.description" -msgstr "" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/ja.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/ja.po deleted file mode 100644 index 21ad623b04..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/ja.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011-2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-12 10:03+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "EdgeWeightBuilder.name" -msgstr "θΎΊγι‡γΏ" - -msgid "EdgeWeightBuilder.description" -msgstr "δΈ€εšγι‡γΏε†…で辺を保぀" - -msgid "SelfLoopFilterBuilder.name" -msgstr "セルフ・ループ" - -msgid "SelfLoopFilterBuilder.description" -msgstr "セルフ・ルーフγι™€εŽ»" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/org-gephi-filters-plugin-edge.pot b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/org-gephi-filters-plugin-edge.pot deleted file mode 100644 index 79d9468c24..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/org-gephi-filters-plugin-edge.pot +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "EdgeWeightBuilder.name" -msgstr "Edge Weight" - -msgid "EdgeWeightBuilder.description" -msgstr "Keep edges within a particular weight range" - -msgid "SelfLoopFilterBuilder.name" -msgstr "Self-Loop" - -msgid "SelfLoopFilterBuilder.description" -msgstr "Removes self-loops" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/pt_BR.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/pt_BR.po deleted file mode 100644 index 2d9fc1fcd3..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/pt_BR.po +++ /dev/null @@ -1,32 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -# CΓ©lio Faria Jr. , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-18 11:27+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "EdgeWeightBuilder.name" -msgstr "Peso da aresta" - -msgid "EdgeWeightBuilder.description" -msgstr "Manter arestas que estejam em uma determinada faixa de peso" - -msgid "SelfLoopFilterBuilder.name" -msgstr "Auto-loop" - -msgid "SelfLoopFilterBuilder.description" -msgstr "Remove auto-loops" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/ru.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/ru.po deleted file mode 100644 index f727c5de95..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/ru.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:32+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "EdgeWeightBuilder.name" -msgstr "ВСс Ρ€Π΅Π±Ρ€Π°" - -msgid "EdgeWeightBuilder.description" -msgstr "ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Ρ‘Π±Ρ€Π° с вСсом Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅" - -msgid "SelfLoopFilterBuilder.name" -msgstr "" - -msgid "SelfLoopFilterBuilder.description" -msgstr "" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/zh_CN.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/zh_CN.po deleted file mode 100644 index 7c9039df08..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/edge/zh_CN.po +++ /dev/null @@ -1,30 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:32+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "EdgeWeightBuilder.name" -msgstr "θΎΉηš„ζƒι‡" - -msgid "EdgeWeightBuilder.description" -msgstr "δΏζŒθΎΉεœ¨δΈ€δΈͺη‰Ήεšηš„ζƒι‡θŒƒε›΄ε†…" - -msgid "SelfLoopFilterBuilder.name" -msgstr "" - -msgid "SelfLoopFilterBuilder.description" -msgstr "" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/es.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/es.po deleted file mode 100644 index 907f86dcc7..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/es.po +++ /dev/null @@ -1,32 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-10 22:06+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Implementaciones de los filtros, definir nuevos filtros" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implementaciones de los filtros" - -msgid "AbstractAttributeFilterBuilder.Node" -msgstr "Nodo" - -msgid "AbstractAttributeFilterBuilder.Edge" -msgstr "Arista" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/fr.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/fr.po deleted file mode 100644 index 79ab0f442a..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/fr.po +++ /dev/null @@ -1,32 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-08 15:11+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ImplΓ©mentations des filtres, dΓ©finit de nouveaux filtres" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplΓ©mentations des filtres" - -msgid "AbstractAttributeFilterBuilder.Node" -msgstr "Noeud" - -msgid "AbstractAttributeFilterBuilder.Edge" -msgstr "Lien" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle.properties index cd60814f3b..4740415593 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle.properties @@ -19,5 +19,11 @@ GiantComponentBuilder.description = Keep only nodes in the giant component (the NeighborsBuilder.name = Neighbors Network NeighborsBuilder.description = Keep neighbors at depth 1, 2, 3 or Max from the current graph. -KCoreBuilder.name K-core -KCoreBuilder.description = Keep graph in which all nodes have degree at least k. \ No newline at end of file +KCoreBuilder.name = K-core +KCoreBuilder.description = Keep graph in which all nodes have degree at least k. + +HasSelfLoopBuilder.name = Has Self-loop +HasSelfLoopBuilder.description = Keep only nodes that have at least one self-loop + +ShortestPathBuilder.name = Shortest Path +ShortestPathBuilder.description = Keep nodes and edges in the shortest path between two nodes. Nodes are found with regex on ID and LABEL. \ No newline at end of file diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_ar.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_ca.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_ca.properties new file mode 100644 index 0000000000..8c7aaf9c9b --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_ca.properties @@ -0,0 +1,18 @@ +DegreeRangeBuilder.name=Degree Range +DegreeRangeBuilder.description=Keep nodes with its degree value within a range +InDegreeRangeBuilder.name=In Degree Range +InDegreeRangeBuilder.description=Keep nodes with its in-degree value within a range +OutDegreeRangeBuilder.name=Out Degree Range +OutDegreeRangeBuilder.description=Keep nodes with its out-degree value within a range +MutualDegreeRangeBuilder.name=Mutual Degree Range +MutualDegreeRangeBuilder.description=Keep nodes with its mutual degree value within a range +EgoBuilder.name=Ego Network +EgoBuilder.description=Keep neighbors at depth 1, 2, 3 or Max from a particular node. Node is found with regex on ID and LABEL. +GiantComponentBuilder.name=Giant Component +GiantComponentBuilder.description=Keep only nodes in the giant component (the component with most nodes) +NeighborsBuilder.name=Neighbors Network +NeighborsBuilder.description=Keep neighbors at depth 1, 2, 3 or Max from the current graph. +KCoreBuilder.name=K-core +KCoreBuilder.description=Keep graph in which all nodes have degree at least k. +HasSelfLoopBuilder.name=Has Self-loop +HasSelfLoopBuilder.description=Keep only nodes that have at least one self-loop diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_cs.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_cs.properties index 80cbe006dd..2d342b9af9 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_cs.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_cs.properties @@ -1,39 +1,26 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-21 18\:03+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -DegreeRangeBuilder.name=Rozsah stupn\u011b - -DegreeRangeBuilder.description=Ponechat uzly s jejich hodnotami stupn\u011b v rozsahu - -InDegreeRangeBuilder.name=Rozsah stupn\u011b dovnit\u0159 - -InDegreeRangeBuilder.description=Ponechat uzly s jejich hodnotami stupn\u011b dovnit\u0159 v rozsahu - -OutDegreeRangeBuilder.name=Rozsah stupn\u011b ven - -OutDegreeRangeBuilder.description=Ponechat uzly s jejich hodnotami stupn\u011b ven v rozsahu - -MutualDegreeRangeBuilder.name=Rozsah vz\u00e1jemn\u00e9ho stupn\u011b - -MutualDegreeRangeBuilder.description=Ponechat uzly se vz\u00e1jemn\u00fdm stupn\u011bm v rozsahu - -EgoBuilder.name=S\u00ed\u0165 popularity - -EgoBuilder.description=Ponechat soused\u00edc\u00ed v hloubce 1, 2, 3 nebo Max z ur\u010dit\u00e9ho uzlu. Uzel je nalezen pomoc\u00ed regul\u00e1rn\u00edho v\u00fdrazu v ID a \u0160T\u00cdTKU - -GiantComponentBuilder.name=Ob\u0159\u00ed slo\u017eka - -GiantComponentBuilder.description=Uzly ponechat pouze v ob\u0159\u00ed slo\u017ece (slo\u017eka s nejv\u00edce uzly) - -NeighborsBuilder.name=S\u00ed\u0165 soused\u00edc\u00edch - -NeighborsBuilder.description=Ponechat soused\u00edc\u00ed v hloubce 1, 2, 3 nebo Max ze sou\u010dasn\u00e9ho grafu. - -KCoreBuilder.name=K-j\u00e1dro - -KCoreBuilder.description=Ponechat graf, jeho\u017e uzly maj\u00ed alespo\u0148 stupe\u0148 k. +DegreeRangeBuilder.name = Rozsah stupn\u011b +DegreeRangeBuilder.description = Ponechat uzly s jejich hodnotami stupn\u011b v rozsahu + +InDegreeRangeBuilder.name = Rozsah stupn\u011b dovnit\u0159 +InDegreeRangeBuilder.description = Ponechat uzly s jejich hodnotami stupn\u011b dovnit\u0159 v rozsahu + +OutDegreeRangeBuilder.name = Rozsah stupn\u011b ven +OutDegreeRangeBuilder.description = Ponechat uzly s jejich hodnotami stupn\u011b ven v rozsahu + +MutualDegreeRangeBuilder.name = Rozsah vzαjemnιho stupn\u011b +MutualDegreeRangeBuilder.description = Ponechat uzly se vzαjemnύm stupn\u011bm v rozsahu + +EgoBuilder.name = Sν\u0165 popularity +EgoBuilder.description = Ponechat sousedνcν v hloubce 1, 2, 3 nebo Max z ur\u010ditιho uzlu. Uzel je nalezen pomocν regulαrnνho vύrazu v ID a JMENOVKY. + +GiantComponentBuilder.name = Ob\u0159ν slo\u017eka +GiantComponentBuilder.description = Uzly ponechat pouze v ob\u0159ν slo\u017ece (slo\u017eka s nejvνce uzly) + +NeighborsBuilder.name = Sν\u0165 sousedνcνch +NeighborsBuilder.description = Ponechat sousedνcν v hloubce 1, 2, 3 nebo Max ze sou\u010dasnιho grafu. + +KCoreBuilder.name = K-jαdro +KCoreBuilder.description = Ponechat graf, jeho\u017e uzly majν alespo\u0148 stupe\u0148 k. + +HasSelfLoopBuilder.name = Mα vlastnν smy\u010dku +HasSelfLoopBuilder.description = Ponechat pouze ty uzle, kterι majν alespo\u0148 jednu vlastnν smy\u010dku diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_de.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_de.properties index 4aaf905e64..86340a7192 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_de.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_de.properties @@ -1,34 +1,18 @@ -# German translation for gephi -# Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 -# This file is distributed under the same license as the gephi package. -# FIRST AUTHOR , 2011. -# -!=Project-Id-Version\: gephi\nReport-Msgid-Bugs-To\: FULL NAME \nPOT-Creation-Date\: 2010-04-07 13\:16+0200\nPO-Revision-Date\: 2011-03-01 15\:47+0000\nLast-Translator\: FULL NAME \nLanguage-Team\: German \nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nX-Launchpad-Export-Date\: 2011-03-13 04\:47+0000\nX-Generator\: Launchpad (build 12559)\n - -!DegreeRangeBuilder.name= - -!DegreeRangeBuilder.description= - -!InDegreeRangeBuilder.name= - -!InDegreeRangeBuilder.description= - -!OutDegreeRangeBuilder.name= - -!OutDegreeRangeBuilder.description= - -!MutualDegreeRangeBuilder.name= - -!MutualDegreeRangeBuilder.description= - -!EgoBuilder.name= - -!EgoBuilder.description= - -!GiantComponentBuilder.name= - -!GiantComponentBuilder.description= - -!NeighborsBuilder.name= - -!NeighborsBuilder.description= +DegreeRangeBuilder.name=Wertebereich Grad +DegreeRangeBuilder.description=Behalte Knoten deren Grad innerhalb eines Bereichs liegt +InDegreeRangeBuilder.name=Wertebereich Eingangsgrad +InDegreeRangeBuilder.description=Behalte Knoten deren Eingangsgrad innerhalb eines Bereichs liegt +OutDegreeRangeBuilder.name=Wertebereich Ausgangsgrad +OutDegreeRangeBuilder.description=Behalte Knoten deren Ausgangsgrad innerhalb eines Bereichs liegt +MutualDegreeRangeBuilder.name=Wertebereich mutueller Grad +MutualDegreeRangeBuilder.description=Behalte Knoten deren mutueller Grad innerhalb eines Bereichs liegt +EgoBuilder.name=Ego Netzwerk +EgoBuilder.description=Behalte Nachbarn einer Tiefe 1, 2, 3 oder Max eines speziellen Knotens. Der Knoten wird mittels regulδrem Ausdruck auf ID und LABEL gesucht. +GiantComponentBuilder.name=Giant Component +GiantComponentBuilder.description=Behalte nur Knoten in der "Giant component" (der Komponente mit den meisten Knoten) +NeighborsBuilder.name=Nachbarschafts-Netzwerk +NeighborsBuilder.description=Behalte alle Nachbarn der Tiefe 1, 2, 3 oder Max des aktuellen Graphen +KCoreBuilder.name=K-core +KCoreBuilder.description=Behalte Graph in dem alle Knoten mindestens Grad k besitzen. +HasSelfLoopBuilder.name=Hat Schlinge +HasSelfLoopBuilder.description=Behalte nur Knoten, die mindestens eine Schlinge besitzen diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_es.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_es.properties index 3fc0bcdd3c..0b8c7d582e 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_es.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_es.properties @@ -1,40 +1,20 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 21\:31+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - DegreeRangeBuilder.name=Rango de grado - DegreeRangeBuilder.description=Mantener nodos con un grado entre un rango - InDegreeRangeBuilder.name=Rango de grado de entrada - InDegreeRangeBuilder.description=Mantener nodos con un grado de entrada entre un rango - OutDegreeRangeBuilder.name=Rango de grado de salida - OutDegreeRangeBuilder.description=Mantener nodos con un grado de salida entre un rango - MutualDegreeRangeBuilder.name=Rango de grado bidireccional - MutualDegreeRangeBuilder.description=Mantener nodos con un grado mutuo entre un rango - EgoBuilder.name=Ego - -EgoBuilder.description=Mantener vecinos a una profundidad de 1, 2, 3 o m\u00e1xima de un nodo particular. El nodo ser\u00e1 encontrado aplicando una expresi\u00f3n regular a su ID y etiqueta - +EgoBuilder.description=Mantener vecinos a una profundidad de 1, 2, 3 o m\u00E1xima de un nodo particular. El nodo ser\u00E1 encontrado aplicando una expresi\u00F3n regular a su ID y ETIQUETA. GiantComponentBuilder.name=Componente gigante - -GiantComponentBuilder.description=Mantener solamente nodos en el componente gigante (el componente con la mayor\u00eda de nodos) - +GiantComponentBuilder.description=Mantener solamente nodos en el componente gigante (el componente con la mayorνa de nodos) NeighborsBuilder.name=Red de vecinos - -NeighborsBuilder.description=Manterner vecinos a distancia 1, 2, 3 o la m\u00e1xima del grafo actual. - +NeighborsBuilder.description=Manterner vecinos a distancia 1, 2, 3 o la mαxima del grafo actual. KCoreBuilder.name=K-core - -KCoreBuilder.description=Grafo en el que todos los nodos tienen grado k como m\u00ednimo. +KCoreBuilder.description=Grafo en el que todos los nodos tienen grado k como mνnimo. +HasSelfLoopBuilder.name=Posee Bucle +HasSelfLoopBuilder.description=Mantener solo aquellos nodos que poseen al menos un bucle +ShortestPathBuilder.description=Mantener nodos y aristas en el camino m\u00E1s corto entre dos nodos. Los nodos se encuentran con regex en ID y LABEL. +ShortestPathBuilder.name=Ruta m\u00E1s corta diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_fr.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_fr.properties index 7ce1bee006..2f8054ef89 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_fr.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_fr.properties @@ -1,40 +1,26 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-21 22\:01+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -DegreeRangeBuilder.name=Plage de degr\u00e9s - -DegreeRangeBuilder.description=Garder les noeuds dont le degr\u00e9 est inclu dans la plage. - -InDegreeRangeBuilder.name=Plage de degr\u00e9s entrants - -InDegreeRangeBuilder.description=Garder les noeuds dont le degr\u00e9 entrant est inclu dans la plage. - -OutDegreeRangeBuilder.name=Plage de degr\u00e9s sortants - -OutDegreeRangeBuilder.description=Garder les noeuds dont le degr\u00e9 sortant est inclu dans la plage. - -MutualDegreeRangeBuilder.name=Plage de degr\u00e9s bidirectionnels - -MutualDegreeRangeBuilder.description=Garder les noeuds dont le degr\u00e9 bidirectionnel est inclu dans la plage. - -EgoBuilder.name=R\u00e9seau \u00e9go-centr\u00e9 - -EgoBuilder.description=Garde les voisins d'un noeud \u00e0 profondeur 1, 2, 3 ou Max. Une expression rationnelle sur l'ID ou le label permet de trouver le noeud. - -GiantComponentBuilder.name=Composante g\u00e9ante - -GiantComponentBuilder.description=Garde les noeuds de la composante g\u00e9ante (celle ayant le plus de noeuds) - -NeighborsBuilder.name=R\u00e9seau des voisins - -NeighborsBuilder.description=Garde les voisins du sous-graphe \u00e0 profondeur 1, 2, 3 ou Max. - -KCoreBuilder.name=K-core - -KCoreBuilder.description=Garde un graphe dans lequel tous les noeuds ont un degr\u00e9 au moins \u00e9gal \u00e0 k. +DegreeRangeBuilder.name = Plage de degrιs +DegreeRangeBuilder.description = Garder les noeuds dont le degrι est inclu dans la plage. + +InDegreeRangeBuilder.name = Plage de degrιs entrants +InDegreeRangeBuilder.description = Garder les noeuds dont le degrι entrant est inclu dans la plage. + +OutDegreeRangeBuilder.name = Plage de degrιs sortants +OutDegreeRangeBuilder.description = Garder les noeuds dont le degrι sortant est inclu dans la plage. + +MutualDegreeRangeBuilder.name = Plage de degrιs bidirectionnels +MutualDegreeRangeBuilder.description = Garder les noeuds dont le degrι bidirectionnel est inclu dans la plage. + +EgoBuilder.name = Rιseau ιgo-centrι +EgoBuilder.description = Garde les voisins d'un noeud ΰ profondeur 1, 2, 3 ou Max. Une expression rationnelle sur l'ID ou le label permet de trouver le noeud. + +GiantComponentBuilder.name = Composante gιante +GiantComponentBuilder.description = Garde les noeuds de la composante gιante (celle ayant le plus de noeuds) + +NeighborsBuilder.name = Rιseau des voisins +NeighborsBuilder.description = Garde les voisins du sous-graphe ΰ profondeur 1, 2, 3 ou Max. + +KCoreBuilder.name = K-core +KCoreBuilder.description = Garde un graphe dans lequel tous les noeuds ont un degrι au moins ιgal ΰ k. + +HasSelfLoopBuilder.name = a un boucle +HasSelfLoopBuilder.description = Garder seulement les liens qui ont au moins une boucle diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_he.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_he.properties new file mode 100644 index 0000000000..8c7aaf9c9b --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_he.properties @@ -0,0 +1,18 @@ +DegreeRangeBuilder.name=Degree Range +DegreeRangeBuilder.description=Keep nodes with its degree value within a range +InDegreeRangeBuilder.name=In Degree Range +InDegreeRangeBuilder.description=Keep nodes with its in-degree value within a range +OutDegreeRangeBuilder.name=Out Degree Range +OutDegreeRangeBuilder.description=Keep nodes with its out-degree value within a range +MutualDegreeRangeBuilder.name=Mutual Degree Range +MutualDegreeRangeBuilder.description=Keep nodes with its mutual degree value within a range +EgoBuilder.name=Ego Network +EgoBuilder.description=Keep neighbors at depth 1, 2, 3 or Max from a particular node. Node is found with regex on ID and LABEL. +GiantComponentBuilder.name=Giant Component +GiantComponentBuilder.description=Keep only nodes in the giant component (the component with most nodes) +NeighborsBuilder.name=Neighbors Network +NeighborsBuilder.description=Keep neighbors at depth 1, 2, 3 or Max from the current graph. +KCoreBuilder.name=K-core +KCoreBuilder.description=Keep graph in which all nodes have degree at least k. +HasSelfLoopBuilder.name=Has Self-loop +HasSelfLoopBuilder.description=Keep only nodes that have at least one self-loop diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_hu.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_hu.properties new file mode 100644 index 0000000000..a2e99a795a --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_hu.properties @@ -0,0 +1,20 @@ + + +ShortestPathBuilder.description=Tartsa a csom\u00F3pontokat \u00E9s az \u00E9leket a k\u00E9t csom\u00F3pont k\u00F6z\u00F6tti legr\u00F6videbb \u00FAton. A csom\u00F3pontok az azonos\u00EDt\u00F3n \u00E9s a LABEL-en tal\u00E1lhat\u00F3 regex-szel. +NeighborsBuilder.name=Szomsz\u00E9dok h\u00E1l\u00F3zata +GiantComponentBuilder.description=Csak a csom\u00F3pontok maradjanak az \u00F3ri\u00E1s komponensben (a legt\u00F6bb csom\u00F3ponttal rendelkez\u0151 komponensben) +HasSelfLoopBuilder.description=\u00D6nhurokkal rendelkezik +MutualDegreeRangeBuilder.description=Tartsa a csom\u00F3pontokat a k\u00F6lcs\u00F6n\u00F6s fok\u00E9rt\u00E9kkel egy tartom\u00E1nyon bel\u00FCl +DegreeRangeBuilder.description=Tartsa a csom\u00F3pontokat a fok\u00E9rt\u00E9k\u00E9vel egy tartom\u00E1nyon bel\u00FCl +MutualDegreeRangeBuilder.name=K\u00F6lcs\u00F6n\u00F6s fokozati tartom\u00E1ny +KCoreBuilder.name=K-mag +EgoBuilder.description=Tartsa a szomsz\u00E9dokat egy adott csom\u00F3pont 1., 2., 3. vagy maximum m\u00E9lys\u00E9g\u00E9ben. A csom\u00F3pont regul\u00E1ris kifejez\u00E9ssel az ID-n \u00E9s a LABEL-en tal\u00E1lhat\u00F3. +InDegreeRangeBuilder.description=Tartsa a csom\u00F3pontokat a fokon bel\u00FCli \u00E9rt\u00E9kkel egy tartom\u00E1nyon bel\u00FCl +ShortestPathBuilder.name=Legr\u00F6videbb \u00FAt +HasSelfLoopBuilder.name=\u00D6nhurokkal rendelkezik +EgoBuilder.name=Ego h\u00E1l\u00F3zat +DegreeRangeBuilder.name=Fokozat tartom\u00E1ny +KCoreBuilder.description=Tartsa meg azt a gr\u00E1fot, amelyben minden csom\u00F3pontnak legal\u00E1bb k foka van. +GiantComponentBuilder.name=\u00D3ri\u00E1s komponens +NeighborsBuilder.description=Tartsa a szomsz\u00E9dokat az aktu\u00E1lis grafikon 1., 2., 3. vagy maximum m\u00E9lys\u00E9g\u00E9ben. +OutDegreeRangeBuilder.description=Tartsa a csom\u00F3pontokat a fokon k\u00EDv\u00FCli \u00E9rt\u00E9kkel egy tartom\u00E1nyon bel\u00FCl diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_it.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_it.properties new file mode 100644 index 0000000000..82ddd7fe13 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_it.properties @@ -0,0 +1,18 @@ +DegreeRangeBuilder.name=Intervallo del numero di connessioni (degree) +DegreeRangeBuilder.description=Keep nodes with its degree value within a range +InDegreeRangeBuilder.name=In Degree Range +InDegreeRangeBuilder.description=Keep nodes with its in-degree value within a range +OutDegreeRangeBuilder.name=Out Degree Range +OutDegreeRangeBuilder.description=Keep nodes with its out-degree value within a range +MutualDegreeRangeBuilder.name=Mutual Degree Range +MutualDegreeRangeBuilder.description=Keep nodes with its mutual degree value within a range +EgoBuilder.name=Ego Network +EgoBuilder.description=Keep neighbors at depth 1, 2, 3 or Max from a particular node. Node is found with regex on ID and LABEL. +GiantComponentBuilder.name=Giant Component +GiantComponentBuilder.description=Keep only nodes in the giant component (the component with most nodes) +NeighborsBuilder.name=Neighbors Network +NeighborsBuilder.description=Keep neighbors at depth 1, 2, 3 or Max from the current graph. +KCoreBuilder.name=K-core +KCoreBuilder.description=Keep graph in which all nodes have degree at least k. +HasSelfLoopBuilder.name=Has Self-loop +HasSelfLoopBuilder.description=Keep only nodes that have at least one self-loop diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_ja.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_ja.properties index dbba7720c1..28e2e2e860 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_ja.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_ja.properties @@ -1,39 +1,26 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 09\:27+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -DegreeRangeBuilder.name=\u6b21\u6570\u7bc4\u56f2 - -DegreeRangeBuilder.description=\u7bc4\u56f2\u5185\u3067\u305d\u306e\u6b21\u6570\u306e\u5024\u3092\u6301\u3064\u30ce\u30fc\u30c9\u3092\u4fdd\u6301 - -InDegreeRangeBuilder.name=\u5165\u6b21\u6570\u7bc4\u56f2 - -InDegreeRangeBuilder.description=\u7bc4\u56f2\u5185\u3067\u3001\u305d\u306e\u5165\u6b21\u6570\u306e\u5024\u3092\u6301\u3064\u30ce\u30fc\u30c9\u3092\u4fdd\u6301 - -OutDegreeRangeBuilder.name=\u51fa\u6b21\u6570\u7bc4\u56f2 - -OutDegreeRangeBuilder.description=\u7bc4\u56f2\u5185\u3067\u3001\u305d\u306e\u51fa\u6b21\u6570\u3092\u6301\u3064\u30ce\u30fc\u30c9\u3092\u4fdd\u6301 - -MutualDegreeRangeBuilder.name=\u76f8\u4e92\u6b21\u6570\u7bc4\u56f2 - -MutualDegreeRangeBuilder.description=\u7bc4\u56f2\u5185\u3067\u3001\u305d\u306e\u76f8\u4e92\u6b21\u6570\u3092\u6301\u3064\u30ce\u30fc\u30c9\u3092\u4fdd\u6301 - -EgoBuilder.name=\u30a8\u30b4\u30fb\u30cd\u30c3\u30c8\u30ef\u30fc\u30af - -EgoBuilder.description=\u7279\u5b9a\u306e\u30ce\u30fc\u30c9\u304b\u3089\u6df1\u30551\u30012\u30013\u3001\u307e\u305f\u306f\u6700\u5927\u3067\u8fd1\u508d\u3092\u4fdd\u3064\u3002\u30ce\u30fc\u30c9\u306f\u8b58\u5225\u5b50\u3068\u30e9\u30d9\u30eb\u306e\u6b63\u898f\u8868\u73fe\u3067\u898b\u3064\u304b\u308b\u3002 - -GiantComponentBuilder.name=\u5de8\u5927\u6210\u5206 - -GiantComponentBuilder.description=\u5de8\u5927\u6210\u5206\u3067\u30ce\u30fc\u30c9\u306e\u307f\u3092\u7dad\u6301\u3059\u308b(\u307b\u3068\u3093\u3069\u306e\u30ce\u30fc\u30c9\u3092\u6301\u3064\u6210\u5206) - -NeighborsBuilder.name=\u96a3\u63a5\u30cd\u30c3\u30c8\u30ef\u30fc\u30af - -NeighborsBuilder.description=\u73fe\u5728\u306e\u30b0\u30e9\u30d5\u304b\u3089\u6df1\u30551\u30012\u30013\u3001\u307e\u305f\u306f\u6700\u5927\u3067\u8fd1\u508d\u3092\u4fdd\u3064\u3002 - -KCoreBuilder.name=k-\u30b3\u30a2 - -KCoreBuilder.description=\u30b0\u30e9\u30d5\u3092\u305d\u306e\u4e2d\u306e\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u306e\u6b21\u6570\u304c\u5c11\u306a\u304f\u3068\u3082k\u306b\u306a\u308b\u3088\u3046\u306b\u4fdd\u3064\u3002 +DegreeRangeBuilder.name = \u6b21\u6570\u7bc4\u56f2 +DegreeRangeBuilder.description = \u7bc4\u56f2\u5185\u3067\u305d\u306e\u6b21\u6570\u306e\u5024\u3092\u6301\u3064\u30ce\u30fc\u30c9\u3092\u4fdd\u6301 + +InDegreeRangeBuilder.name = \u5165\u6b21\u6570\u7bc4\u56f2 +InDegreeRangeBuilder.description = \u7bc4\u56f2\u5185\u3067\u3001\u305d\u306e\u5165\u6b21\u6570\u306e\u5024\u3092\u6301\u3064\u30ce\u30fc\u30c9\u3092\u4fdd\u6301 + +OutDegreeRangeBuilder.name = \u51fa\u6b21\u6570\u7bc4\u56f2 +OutDegreeRangeBuilder.description = \u7bc4\u56f2\u5185\u3067\u3001\u305d\u306e\u51fa\u6b21\u6570\u3092\u6301\u3064\u30ce\u30fc\u30c9\u3092\u4fdd\u6301 + +MutualDegreeRangeBuilder.name = \u76f8\u4e92\u6b21\u6570\u7bc4\u56f2 +MutualDegreeRangeBuilder.description = \u7bc4\u56f2\u5185\u3067\u3001\u305d\u306e\u76f8\u4e92\u6b21\u6570\u3092\u6301\u3064\u30ce\u30fc\u30c9\u3092\u4fdd\u6301 + +EgoBuilder.name = \u30a8\u30b4\u30fb\u30cd\u30c3\u30c8\u30ef\u30fc\u30af +EgoBuilder.description = \u7279\u5b9a\u306e\u30ce\u30fc\u30c9\u304b\u3089\u6df1\u30551\u30012\u30013\u3001\u307e\u305f\u306f\u6700\u5927\u3067\u8fd1\u508d\u3092\u4fdd\u3064\u3002\u30ce\u30fc\u30c9\u306f\u8b58\u5225\u5b50\u3068\u30e9\u30d9\u30eb\u306e\u6b63\u898f\u8868\u73fe\u3067\u898b\u3064\u304b\u308b\u3002 + +GiantComponentBuilder.name = \u5de8\u5927\u6210\u5206 +GiantComponentBuilder.description = \u5de8\u5927\u6210\u5206\u3067\u30ce\u30fc\u30c9\u306e\u307f\u3092\u7dad\u6301\u3059\u308b(\u307b\u3068\u3093\u3069\u306e\u30ce\u30fc\u30c9\u3092\u6301\u3064\u6210\u5206) + +NeighborsBuilder.name = \u96a3\u63a5\u30cd\u30c3\u30c8\u30ef\u30fc\u30af +NeighborsBuilder.description = \u73fe\u5728\u306e\u30b0\u30e9\u30d5\u304b\u3089\u6df1\u30551\u30012\u30013\u3001\u307e\u305f\u306f\u6700\u5927\u3067\u8fd1\u508d\u3092\u4fdd\u3064\u3002 + +KCoreBuilder.name = k-\u30b3\u30a2 +KCoreBuilder.description = \u30b0\u30e9\u30d5\u3092\u305d\u306e\u4e2d\u306e\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u306e\u6b21\u6570\u304c\u5c11\u306a\u304f\u3068\u3082k\u306b\u306a\u308b\u3088\u3046\u306b\u4fdd\u3064\u3002 + +# HasSelfLoopBuilder.name = Has Self-loop +# HasSelfLoopBuilder.description = Keep only nodes that have at least one self-loop diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_ko.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_ko.properties new file mode 100644 index 0000000000..95d12032e5 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_ko.properties @@ -0,0 +1,22 @@ + + +ShortestPathBuilder.description=\uB450 \uB178\uB4DC \uAC04 \uCD5C\uB2E8 \uACBD\uB85C\uC5D0 \uC788\uB294 \uB178\uB4DC\uC640 \uC5E3\uC9C0\uB97C \uC720\uC9C0\uD569\uB2C8\uB2E4. \uB178\uB4DC\uB294 ID\uC640 LABEL\uC758 \uC815\uADDC\uC2DD\uC73C\uB85C \uCC3E\uC2B5\uB2C8\uB2E4. +InDegreeRangeBuilder.name=\uC9C4\uC785 \uCC28\uC218 \uBC94\uC704 +NeighborsBuilder.name=\uC774\uC6C3 \uB124\uD2B8\uC6CC\uD06C +GiantComponentBuilder.description=\uAC70\uB300 \uAD6C\uC131 \uC694\uC18C(\uAC00\uC7A5 \uB9CE\uC740 \uB178\uB4DC\uAC00 \uC788\uB294 \uAD6C\uC131 \uC694\uC18C)\uC5D0 \uC788\uB294 \uB178\uB4DC\uB9CC \uC720\uC9C0 +HasSelfLoopBuilder.description=\uD558\uB098 \uC774\uC0C1\uC758 \uC790\uCCB4 \uB8E8\uD504\uAC00 \uC788\uB294 \uB178\uB4DC\uB9CC \uC720\uC9C0 +MutualDegreeRangeBuilder.description=\uBC94\uC704 \uB0B4\uC758 \uC591\uBC29\uD5A5 \uCC28\uC218 \uAC12\uC744 \uAC16\uB294 \uB178\uB4DC\uB97C \uC720\uC9C0 +DegreeRangeBuilder.description=\uBC94\uC704 \uB0B4\uC758 \uCC28\uC218 \uAC12\uC744 \uAC16\uB294 \uB178\uB4DC\uB97C \uC720\uC9C0 +MutualDegreeRangeBuilder.name=\uC591\uBC29\uD5A5 \uCC28\uC218 \uBC94\uC704 +KCoreBuilder.name=K-\uCF54\uC5B4 +EgoBuilder.description=\uD2B9\uC815 \uB178\uB4DC\uB85C\uBD80\uD130 \uAE4A\uC774\uAC00 1, 2, 3 \uB610\uB294 \uCD5C\uB300\uC778 \uC774\uC6C3\uC744 \uC720\uC9C0\uD569\uB2C8\uB2E4. \uB178\uB4DC\uB294 ID \uBC0F LABEL\uC758 \uC815\uADDC\uC2DD\uC744 \uC0AC\uC6A9\uD558\uC5EC \uCC3E\uC2B5\uB2C8\uB2E4. +InDegreeRangeBuilder.description=\uBC94\uC704 \uB0B4\uC758 \uC9C4\uC785 \uCC28\uC218 \uAC12\uC744 \uAC16\uB294 \uB178\uB4DC\uB97C \uC720\uC9C0 +ShortestPathBuilder.name=\uCD5C\uB2E8 \uACBD\uB85C +HasSelfLoopBuilder.name=\uC790\uCCB4 \uB8E8\uD504 \uAC00\uC9D0 +EgoBuilder.name=\uC911\uC2EC \uB124\uD2B8\uC6CC\uD06C +DegreeRangeBuilder.name=\uCC28\uC218 \uBC94\uC704 +KCoreBuilder.description=\uBAA8\uB4E0 k \uCC28\uC218 \uC774\uC0C1\uC778 \uB178\uB4DC\uB97C \uC720\uC9C0\uD569\uB2C8\uB2E4. +GiantComponentBuilder.name=\uAC70\uB300 \uAD6C\uC131 \uC694\uC18C +NeighborsBuilder.description=\uD604\uC7AC \uADF8\uB798\uD504\uB85C\uBD80\uD130 \uAE4A\uC774\uAC00 1, 2, 3 \uD639\uC740 \uCD5C\uB300\uC778 \uC774\uC6C3\uB4E4\uB9CC \uC720\uC9C0\uD569\uB2C8\uB2E4. +OutDegreeRangeBuilder.name=\uC9C4\uCD9C \uCC28\uC218 \uBC94\uC704 +OutDegreeRangeBuilder.description=\uBC94\uC704 \uB0B4\uC758 \uC9C4\uCD9C \uCC28\uC218 \uAC12\uC744 \uAC16\uB294 \uB178\uB4DC\uB97C \uC720\uC9C0 diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_nl.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_nl.properties new file mode 100644 index 0000000000..8c7aaf9c9b --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_nl.properties @@ -0,0 +1,18 @@ +DegreeRangeBuilder.name=Degree Range +DegreeRangeBuilder.description=Keep nodes with its degree value within a range +InDegreeRangeBuilder.name=In Degree Range +InDegreeRangeBuilder.description=Keep nodes with its in-degree value within a range +OutDegreeRangeBuilder.name=Out Degree Range +OutDegreeRangeBuilder.description=Keep nodes with its out-degree value within a range +MutualDegreeRangeBuilder.name=Mutual Degree Range +MutualDegreeRangeBuilder.description=Keep nodes with its mutual degree value within a range +EgoBuilder.name=Ego Network +EgoBuilder.description=Keep neighbors at depth 1, 2, 3 or Max from a particular node. Node is found with regex on ID and LABEL. +GiantComponentBuilder.name=Giant Component +GiantComponentBuilder.description=Keep only nodes in the giant component (the component with most nodes) +NeighborsBuilder.name=Neighbors Network +NeighborsBuilder.description=Keep neighbors at depth 1, 2, 3 or Max from the current graph. +KCoreBuilder.name=K-core +KCoreBuilder.description=Keep graph in which all nodes have degree at least k. +HasSelfLoopBuilder.name=Has Self-loop +HasSelfLoopBuilder.description=Keep only nodes that have at least one self-loop diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_pt_BR.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_pt_BR.properties index 0b141b8da4..79fb432cc7 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_pt_BR.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_pt_BR.properties @@ -1,40 +1,26 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -# C\u00e9lio Faria Jr. , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 12\:17+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -DegreeRangeBuilder.name=Intervalo de Grau - -DegreeRangeBuilder.description=Manter n\u00f3s cujo grau esteja em um determinado intervalo - -InDegreeRangeBuilder.name=Intervalo de Grau de Entrada - -InDegreeRangeBuilder.description=Manter n\u00f3s cujo grau de entrada esteja em um determinado intervalo - -OutDegreeRangeBuilder.name=Intervalo de Grau de sa\u00edda - -OutDegreeRangeBuilder.description=Manter n\u00f3s cujo grau de sa\u00edda esteja em um determinado intervalo - -MutualDegreeRangeBuilder.name=Intervalo de grau bidirecional - -MutualDegreeRangeBuilder.description=Manter n\u00f3s cujo grau m\u00fatuo esteja em um determinado intervalo - -EgoBuilder.name=Rede Ego - -EgoBuilder.description=Manter vizinhos que estejam a uma profundidade de 1, 2, 3 ou m\u00e1xima de um n\u00f3 particular. O n\u00f3 ser\u00e1 encontrado aplicando-se uma express\u00e3o regular a seu ID ou a seu r\u00f3tulo. - -GiantComponentBuilder.name=Componente gigante - -GiantComponentBuilder.description=Manter somente n\u00f3s no componente gigante (componente com a maioria dos n\u00f3s) - -NeighborsBuilder.name=Rede de vizinhos - -NeighborsBuilder.description=Manter vizinhos que estejam a uma profundidade 1, 2, 3 ou m\u00e1xima do grafo atual. - -KCoreBuilder.name=K-core - -KCoreBuilder.description=Manter o grafo no qual todos os n\u00f3s t\u00eam grau de pelo menos k. +DegreeRangeBuilder.name = Intervalo de Grau +DegreeRangeBuilder.description = Manter nσs cujo grau esteja em um determinado intervalo + +InDegreeRangeBuilder.name = Intervalo de Grau de Entrada +InDegreeRangeBuilder.description = Manter nσs cujo grau de entrada esteja em um determinado intervalo + +OutDegreeRangeBuilder.name = Intervalo de Grau de saνda +OutDegreeRangeBuilder.description = Manter nσs cujo grau de saνda esteja em um determinado intervalo + +MutualDegreeRangeBuilder.name = Intervalo de grau bidirecional +MutualDegreeRangeBuilder.description = Manter nσs cujo grau mϊtuo esteja em um determinado intervalo + +EgoBuilder.name = Rede Ego +EgoBuilder.description = Manter vizinhos que estejam a uma profundidade de 1, 2, 3 ou mαxima de um nσ particular. O nσ serα encontrado aplicando-se uma expressγo regular a seu ID ou a seu rσtulo. + +GiantComponentBuilder.name = Componente gigante +GiantComponentBuilder.description = Manter somente nσs no componente gigante (componente com a maioria dos nσs) + +NeighborsBuilder.name = Rede de vizinhos +NeighborsBuilder.description = Manter vizinhos que estejam a uma profundidade 1, 2, 3 ou mαxima do grafo atual. + +KCoreBuilder.name = K-core +KCoreBuilder.description = Manter o grafo no qual todos os nσs tκm grau de pelo menos k. + +HasSelfLoopBuilder.name = Possui Auto-loop +HasSelfLoopBuilder.description = Manter somente os nσs com pelo menos um auto-loop diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_ro.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_ro.properties new file mode 100644 index 0000000000..93a7075138 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_ro.properties @@ -0,0 +1,20 @@ + + +DegreeRangeBuilder.name=Interval Grad +DegreeRangeBuilder.description=P\u0103streaz\u0103 nodurile cu gradul \u00EEntr-un anumit interval +InDegreeRangeBuilder.name=Interval Grad Interior +InDegreeRangeBuilder.description=P\u0103streaz\u0103 nodurile cu gradul interior \u00EEntr-un anumit interval +OutDegreeRangeBuilder.name=Interval Grad Exterior +OutDegreeRangeBuilder.description=P\u0103streaz\u0103 nodurile cu gradul exterior \u00EEntr-un anumit interval +MutualDegreeRangeBuilder.name=Interval Grad Reciproc +MutualDegreeRangeBuilder.description=P\u0103streaz\u0103 nodurile cu gradul reciproc \u00EEntr-un anumit interval +EgoBuilder.name=Re\u021Bea Ego +EgoBuilder.description=P\u0103streaz\u0103 vecinii de la ad\u00E2ncimea 1, 2, 3 sau maxim\u0103 a unui anumit nod. Nodul este g\u0103sit cu o expresie regulat\u0103 pe Id \u0219i Etichet\u0103. +GiantComponentBuilder.name=Component\u0103 Gigant +NeighborsBuilder.name=Re\u021Bea Vecini +NeighborsBuilder.description=P\u0103streaz\u0103 vecinii de la ad\u00E2ncimea 1, 2, 3 sau maxim\u0103 a grafului curent. +KCoreBuilder.name=K-nucleu +KCoreBuilder.description=P\u0103streaz\u0103 subgraful \u00EEn care toate nodurile au graful cel pu\u021Bin k. +HasSelfLoopBuilder.name=Are Bucle +HasSelfLoopBuilder.description=P\u0103streaz\u0103 doar nodurile care au cel pu\u021Bin o bucl\u0103 +GiantComponentBuilder.description=P\u0103streaz\u0103 doar nodurile din componenta gigant (componenta cu cele mai multe noduri) diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_ru.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_ru.properties index 54f4771d8b..a7114024a2 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_ru.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_ru.properties @@ -1,39 +1,20 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-28 07\:14+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - DegreeRangeBuilder.name=\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0438 - DegreeRangeBuilder.description=\u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0443\u0437\u043b\u044b, \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 - InDegreeRangeBuilder.name=\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0432\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0438 - InDegreeRangeBuilder.description=\u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0443\u0437\u043b\u044b, \u0432\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 - OutDegreeRangeBuilder.name=\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0435\u0439 \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0438 - OutDegreeRangeBuilder.description=\u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0443\u0437\u043b\u044b, \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 - MutualDegreeRangeBuilder.name=\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0432\u0437\u0430\u0438\u043c\u043d\u043e\u0439 \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0438 - MutualDegreeRangeBuilder.description=\u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0443\u0437\u043b\u044b, \u0432\u0437\u0430\u0438\u043c\u043d\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 - EgoBuilder.name=Ego Network - EgoBuilder.description=\u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u043d\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0438 1,2,3 \u0438\u043b\u0438 Max \u0448\u0430\u0433\u043e\u0432 \u043e\u0442 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430. \u0423\u0437\u0435\u043b \u0437\u0430\u0434\u0430\u0435\u0442\u0441\u044f \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u044b\u043c \u0432\u044b\u0440\u0430\u0436\u0435\u043d\u0438\u0435\u043c \u043d\u0430 ID \u0438\u043b\u0438 LABEL - GiantComponentBuilder.name=\u0413\u0438\u0433\u0430\u043d\u0442\u0441\u043a\u0430\u044f \u0441\u0432\u044f\u0437\u043d\u0430\u044f \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430 - GiantComponentBuilder.description=\u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u043d\u0443 \u0441\u0432\u044f\u0437\u043d\u0443\u044e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0443 (\u0441 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c \u0443\u0437\u043b\u043e\u0432) - NeighborsBuilder.name=\u0421\u0435\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u0435\u0439 - NeighborsBuilder.description=\u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u043d\u0430 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0438 1,2,3 \u0438\u043b\u0438 Max \u0448\u0430\u0433\u043e\u0432 \u043e\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0433\u0440\u0430\u0444\u0430. - KCoreBuilder.name=K-core - KCoreBuilder.description=\u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0433\u0440\u0430\u0444, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u0441\u0435 \u0443\u0437\u043b\u044b \u0438\u043c\u0435\u044e\u0442 \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c \u043d\u0435 \u043c\u0435\u043d\u044c\u0448\u0443\u044e, \u0447\u0435\u043c k. + +# HasSelfLoopBuilder.name = Has Self-loop +# HasSelfLoopBuilder.description = Keep only nodes that have at least one self-loop + diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_th.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_tr.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_tr.properties new file mode 100644 index 0000000000..8c7aaf9c9b --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_tr.properties @@ -0,0 +1,18 @@ +DegreeRangeBuilder.name=Degree Range +DegreeRangeBuilder.description=Keep nodes with its degree value within a range +InDegreeRangeBuilder.name=In Degree Range +InDegreeRangeBuilder.description=Keep nodes with its in-degree value within a range +OutDegreeRangeBuilder.name=Out Degree Range +OutDegreeRangeBuilder.description=Keep nodes with its out-degree value within a range +MutualDegreeRangeBuilder.name=Mutual Degree Range +MutualDegreeRangeBuilder.description=Keep nodes with its mutual degree value within a range +EgoBuilder.name=Ego Network +EgoBuilder.description=Keep neighbors at depth 1, 2, 3 or Max from a particular node. Node is found with regex on ID and LABEL. +GiantComponentBuilder.name=Giant Component +GiantComponentBuilder.description=Keep only nodes in the giant component (the component with most nodes) +NeighborsBuilder.name=Neighbors Network +NeighborsBuilder.description=Keep neighbors at depth 1, 2, 3 or Max from the current graph. +KCoreBuilder.name=K-core +KCoreBuilder.description=Keep graph in which all nodes have degree at least k. +HasSelfLoopBuilder.name=Has Self-loop +HasSelfLoopBuilder.description=Keep only nodes that have at least one self-loop diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_zh_CN.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_zh_CN.properties index 799252c8ae..f4098cba36 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_zh_CN.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_zh_CN.properties @@ -1,38 +1,26 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:13+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -DegreeRangeBuilder.name=\u5ea6\u8303\u56f4 - -DegreeRangeBuilder.description=\u4fdd\u5b58\u5ea6\u503c\u5728\u4e00\u5b9a\u8303\u56f4\u5185\u7684\u8282\u70b9 - -InDegreeRangeBuilder.name=\u5728\u5ea6\u7684\u8303\u56f4 - -InDegreeRangeBuilder.description=\u4fdd\u5b58\u5ea6\u503c\u5728\u4e00\u5b9a\u8303\u56f4\u5185\u7684\u8282\u70b9 - -OutDegreeRangeBuilder.name=\u8d85\u51fa\u5ea6\u8303\u56f4 - -OutDegreeRangeBuilder.description=\u4fdd\u5b58\u8d85\u51fa\u5ea6\u503c\u8303\u56f4\u7684\u8282\u70b9 - -MutualDegreeRangeBuilder.name=\u76f8\u4e92\u5ea6\u8303\u56f4 - -MutualDegreeRangeBuilder.description=\u4fdd\u5b58\u76f8\u4e92\u5ea6\u503c\u5728\u4e00\u5b9a\u8303\u56f4\u5185\u7684\u8282\u70b9 - -EgoBuilder.name=\u81ea\u6211\u7f51\u7edc - -EgoBuilder.description=\u4fdd\u5b58\u4e34\u8fd1\u8282\u70b9\u7684\u6df1\u5ea6\u4e3a1\uff0c2\uff0c3\u6216\u7279\u5b9a\u8282\u70b9\u7684\u6700\u5927\u503c\u3002\u901a\u8fc7\u6b63\u5219\u8868\u8fbe\u5f0f\u7684ID\u548c\u6807\u7b7e\u627e\u5230\u8282\u70b9\u3002 - -GiantComponentBuilder.name=\u5de8\u4eba\u7ec4\u4ef6 - -GiantComponentBuilder.description=\u4ec5\u4fdd\u5b58\u5728\u5de8\u4eba\u7ec4\u4ef6\u7684\u8282\u70b9\uff08\u5927\u591a\u6570\u8282\u70b9\u7684\u7ec4\u6210\u90e8\u5206\uff09 - -NeighborsBuilder.name=\u90bb\u5c45\u7f51\u7edc - -NeighborsBuilder.description=\u4fdd\u5b58\u4e34\u57df\u7684\u6df1\u5ea6\u4e3a1\uff0c2\uff0c3\u6216\u73b0\u6709\u56fe\u7684\u6700\u5927\u503c\u3002 - -KCoreBuilder.name=K -\u6838\u5fc3 - -KCoreBuilder.description=\u4fdd\u5b58\u6240\u6709\u8282\u70b9\u7684\u5ea6\u81f3\u5c11\u662fK\u7684\u56fe. +DegreeRangeBuilder.name = \u5ea6\u8303\u56f4 +DegreeRangeBuilder.description = \u4fdd\u5b58\u5ea6\u503c\u5728\u4e00\u5b9a\u8303\u56f4\u5185\u7684\u8282\u70b9 + +InDegreeRangeBuilder.name = \u5728\u5ea6\u7684\u8303\u56f4 +InDegreeRangeBuilder.description = \u4fdd\u5b58\u5ea6\u503c\u5728\u4e00\u5b9a\u8303\u56f4\u5185\u7684\u8282\u70b9 + +OutDegreeRangeBuilder.name = \u8d85\u51fa\u5ea6\u8303\u56f4 +OutDegreeRangeBuilder.description = \u4fdd\u5b58\u8d85\u51fa\u5ea6\u503c\u8303\u56f4\u7684\u8282\u70b9 + +MutualDegreeRangeBuilder.name = \u76f8\u4e92\u5ea6\u8303\u56f4 +MutualDegreeRangeBuilder.description = \u4fdd\u5b58\u76f8\u4e92\u5ea6\u503c\u5728\u4e00\u5b9a\u8303\u56f4\u5185\u7684\u8282\u70b9 + +EgoBuilder.name = \u81ea\u6211\u7f51\u7edc +EgoBuilder.description = \u4fdd\u5b58\u4e34\u8fd1\u8282\u70b9\u7684\u6df1\u5ea6\u4e3a1\uff0c2\uff0c3\u6216\u7279\u5b9a\u8282\u70b9\u7684\u6700\u5927\u503c\u3002\u901a\u8fc7\u6b63\u5219\u8868\u8fbe\u5f0f\u7684ID\u548c\u6807\u7b7e\u627e\u5230\u8282\u70b9\u3002 + +GiantComponentBuilder.name = \u5de8\u4eba\u7ec4\u4ef6 +GiantComponentBuilder.description = \u4ec5\u4fdd\u5b58\u5728\u5de8\u4eba\u7ec4\u4ef6\u7684\u8282\u70b9\uff08\u5927\u591a\u6570\u8282\u70b9\u7684\u7ec4\u6210\u90e8\u5206\uff09 + +NeighborsBuilder.name = \u90bb\u5c45\u7f51\u7edc +NeighborsBuilder.description = \u4fdd\u5b58\u4e34\u57df\u7684\u6df1\u5ea6\u4e3a1\uff0c2\uff0c3\u6216\u73b0\u6709\u56fe\u7684\u6700\u5927\u503c\u3002 + +KCoreBuilder.name = K -\u6838\u5fc3 +KCoreBuilder.description = \u4fdd\u5b58\u6240\u6709\u8282\u70b9\u7684\u5ea6\u81f3\u5c11\u662fK\u7684\u56fe. + +HasSelfLoopBuilder.name = \u5177\u6709\u81ea\u73af +HasSelfLoopBuilder.description = \u53ea\u4fdd\u7559\u5177\u6709\u81f3\u5c11\u4e00\u4e2a\u81ea\u73af\u7684\u8282\u70b9 diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_zh_TW.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_zh_TW.properties new file mode 100644 index 0000000000..8c7aaf9c9b --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/Bundle_zh_TW.properties @@ -0,0 +1,18 @@ +DegreeRangeBuilder.name=Degree Range +DegreeRangeBuilder.description=Keep nodes with its degree value within a range +InDegreeRangeBuilder.name=In Degree Range +InDegreeRangeBuilder.description=Keep nodes with its in-degree value within a range +OutDegreeRangeBuilder.name=Out Degree Range +OutDegreeRangeBuilder.description=Keep nodes with its out-degree value within a range +MutualDegreeRangeBuilder.name=Mutual Degree Range +MutualDegreeRangeBuilder.description=Keep nodes with its mutual degree value within a range +EgoBuilder.name=Ego Network +EgoBuilder.description=Keep neighbors at depth 1, 2, 3 or Max from a particular node. Node is found with regex on ID and LABEL. +GiantComponentBuilder.name=Giant Component +GiantComponentBuilder.description=Keep only nodes in the giant component (the component with most nodes) +NeighborsBuilder.name=Neighbors Network +NeighborsBuilder.description=Keep neighbors at depth 1, 2, 3 or Max from the current graph. +KCoreBuilder.name=K-core +KCoreBuilder.description=Keep graph in which all nodes have degree at least k. +HasSelfLoopBuilder.name=Has Self-loop +HasSelfLoopBuilder.description=Keep only nodes that have at least one self-loop diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/cs.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/cs.po deleted file mode 100644 index 4d83e93308..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/cs.po +++ /dev/null @@ -1,67 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-21 18:03+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "DegreeRangeBuilder.name" -msgstr "Rozsah stupnΔ›" - -msgid "DegreeRangeBuilder.description" -msgstr "Ponechat uzly s jejich hodnotami stupnΔ› v rozsahu" - -msgid "InDegreeRangeBuilder.name" -msgstr "Rozsah stupnΔ› dovnitΕ™" - -msgid "InDegreeRangeBuilder.description" -msgstr "Ponechat uzly s jejich hodnotami stupnΔ› dovnitΕ™ v rozsahu" - -msgid "OutDegreeRangeBuilder.name" -msgstr "Rozsah stupnΔ› ven" - -msgid "OutDegreeRangeBuilder.description" -msgstr "Ponechat uzly s jejich hodnotami stupnΔ› ven v rozsahu" - -msgid "MutualDegreeRangeBuilder.name" -msgstr "Rozsah vzΓ‘jemnΓ©ho stupnΔ›" - -msgid "MutualDegreeRangeBuilder.description" -msgstr "Ponechat uzly se vzΓ‘jemnΓ½m stupnΔ›m v rozsahu" - -msgid "EgoBuilder.name" -msgstr "SΓ­Ε₯ popularity" - -msgid "EgoBuilder.description" -msgstr "Ponechat sousedΓ­cΓ­ v hloubce 1, 2, 3 nebo Max z určitΓ©ho uzlu. Uzel je nalezen pomocΓ­ regulΓ‘rnΓ­ho vΓ½razu v ID a Ε TÍTKU" - -msgid "GiantComponentBuilder.name" -msgstr "ObΕ™Γ­ sloΕΎka" - -msgid "GiantComponentBuilder.description" -msgstr "Uzly ponechat pouze v obΕ™Γ­ sloΕΎce (sloΕΎka s nejvΓ­ce uzly)" - -msgid "NeighborsBuilder.name" -msgstr "SΓ­Ε₯ sousedΓ­cΓ­ch" - -msgid "NeighborsBuilder.description" -msgstr "Ponechat sousedΓ­cΓ­ v hloubce 1, 2, 3 nebo Max ze současnΓ©ho grafu." - -msgid "KCoreBuilder.name" -msgstr "K-jΓ‘dro" - -msgid "KCoreBuilder.description" -msgstr "Ponechat graf, jehoΕΎ uzly majΓ­ alespoň stupeň k." diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/es.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/es.po deleted file mode 100644 index 0e3c532e3a..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/es.po +++ /dev/null @@ -1,68 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 21:31+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "DegreeRangeBuilder.name" -msgstr "Rango de grado" - -msgid "DegreeRangeBuilder.description" -msgstr "Mantener nodos con un grado entre un rango" - -msgid "InDegreeRangeBuilder.name" -msgstr "Rango de grado de entrada" - -msgid "InDegreeRangeBuilder.description" -msgstr "Mantener nodos con un grado de entrada entre un rango" - -msgid "OutDegreeRangeBuilder.name" -msgstr "Rango de grado de salida" - -msgid "OutDegreeRangeBuilder.description" -msgstr "Mantener nodos con un grado de salida entre un rango" - -msgid "MutualDegreeRangeBuilder.name" -msgstr "Rango de grado bidireccional" - -msgid "MutualDegreeRangeBuilder.description" -msgstr "Mantener nodos con un grado mutuo entre un rango" - -msgid "EgoBuilder.name" -msgstr "Ego" - -msgid "EgoBuilder.description" -msgstr "Mantener vecinos a una profundidad de 1, 2, 3 o mΓ‘xima de un nodo particular. El nodo serΓ‘ encontrado aplicando una expresiΓ³n regular a su ID y etiqueta" - -msgid "GiantComponentBuilder.name" -msgstr "Componente gigante" - -msgid "GiantComponentBuilder.description" -msgstr "Mantener solamente nodos en el componente gigante (el componente con la mayorΓ­a de nodos)" - -msgid "NeighborsBuilder.name" -msgstr "Red de vecinos" - -msgid "NeighborsBuilder.description" -msgstr "Manterner vecinos a distancia 1, 2, 3 o la mΓ‘xima del grafo actual." - -msgid "KCoreBuilder.name" -msgstr "K-core" - -msgid "KCoreBuilder.description" -msgstr "Grafo en el que todos los nodos tienen grado k como mΓ­nimo." diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/fr.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/fr.po deleted file mode 100644 index 299fcb8e2b..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/fr.po +++ /dev/null @@ -1,68 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-21 22:01+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "DegreeRangeBuilder.name" -msgstr "Plage de degrΓ©s" - -msgid "DegreeRangeBuilder.description" -msgstr "Garder les noeuds dont le degrΓ© est inclu dans la plage." - -msgid "InDegreeRangeBuilder.name" -msgstr "Plage de degrΓ©s entrants" - -msgid "InDegreeRangeBuilder.description" -msgstr "Garder les noeuds dont le degrΓ© entrant est inclu dans la plage." - -msgid "OutDegreeRangeBuilder.name" -msgstr "Plage de degrΓ©s sortants" - -msgid "OutDegreeRangeBuilder.description" -msgstr "Garder les noeuds dont le degrΓ© sortant est inclu dans la plage." - -msgid "MutualDegreeRangeBuilder.name" -msgstr "Plage de degrΓ©s bidirectionnels" - -msgid "MutualDegreeRangeBuilder.description" -msgstr "Garder les noeuds dont le degrΓ© bidirectionnel est inclu dans la plage." - -msgid "EgoBuilder.name" -msgstr "RΓ©seau Γ©go-centrΓ©" - -msgid "EgoBuilder.description" -msgstr "Garde les voisins d'un noeud Γ  profondeur 1, 2, 3 ou Max. Une expression rationnelle sur l'ID ou le label permet de trouver le noeud." - -msgid "GiantComponentBuilder.name" -msgstr "Composante gΓ©ante" - -msgid "GiantComponentBuilder.description" -msgstr "Garde les noeuds de la composante gΓ©ante (celle ayant le plus de noeuds)" - -msgid "NeighborsBuilder.name" -msgstr "RΓ©seau des voisins" - -msgid "NeighborsBuilder.description" -msgstr "Garde les voisins du sous-graphe Γ  profondeur 1, 2, 3 ou Max." - -msgid "KCoreBuilder.name" -msgstr "K-core" - -msgid "KCoreBuilder.description" -msgstr "Garde un graphe dans lequel tous les noeuds ont un degrΓ© au moins Γ©gal Γ  k." diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/ja.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/ja.po deleted file mode 100644 index 3497e604ae..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/ja.po +++ /dev/null @@ -1,67 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 09:27+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "DegreeRangeBuilder.name" -msgstr "欑数範囲" - -msgid "DegreeRangeBuilder.description" -msgstr "範囲内でそγζ¬‘ζ•°γε€€γ‚’ζŒγ€γƒŽγƒΌγƒ‰γ‚’δΏζŒ" - -msgid "InDegreeRangeBuilder.name" -msgstr "ε…₯欑数範囲" - -msgid "InDegreeRangeBuilder.description" -msgstr "範囲内で、そγε…₯欑数γε€€γ‚’ζŒγ€γƒŽγƒΌγƒ‰γ‚’δΏζŒ" - -msgid "OutDegreeRangeBuilder.name" -msgstr "出欑数範囲" - -msgid "OutDegreeRangeBuilder.description" -msgstr "範囲内で、そγε‡Ίζ¬‘ζ•°γ‚’ζŒγ€γƒŽγƒΌγƒ‰γ‚’δΏζŒ" - -msgid "MutualDegreeRangeBuilder.name" -msgstr "相互欑数範囲" - -msgid "MutualDegreeRangeBuilder.description" -msgstr "範囲内で、そγη›ΈδΊ’ζ¬‘ζ•°γ‚’ζŒγ€γƒŽγƒΌγƒ‰γ‚’δΏζŒ" - -msgid "EgoBuilder.name" -msgstr "γ‚¨γ‚΄γƒ»γƒγƒƒγƒˆγƒ―γƒΌγ‚―" - -msgid "EgoBuilder.description" -msgstr "η‰ΉεšγγƒŽγƒΌγƒ‰γ‹γ‚‰ζ·±γ•1、2、3γ€γΎγŸγ―ζœ€ε€§γ§θΏ‘ε‚γ‚’δΏγ€γ€‚γƒŽγƒΌγƒ‰γ―θ­˜εˆ₯子とラベルγζ­£θ¦θ‘¨ηΎγ§θ¦‹γ€γ‹γ‚‹γ€‚" - -msgid "GiantComponentBuilder.name" -msgstr "ε·¨ε€§ζˆεˆ†" - -msgid "GiantComponentBuilder.description" -msgstr "ε·¨ε€§ζˆεˆ†γ§γƒŽγƒΌγƒ‰γγΏγ‚’ηΆ­ζŒγ™γ‚‹(ほとんどγγƒŽγƒΌγƒ‰γ‚’ζŒγ€ζˆεˆ†)" - -msgid "NeighborsBuilder.name" -msgstr "隣ζŽ₯γƒγƒƒγƒˆγƒ―γƒΌγ‚―" - -msgid "NeighborsBuilder.description" -msgstr "現在γγ‚°γƒ©γƒ•から深さ1、2、3γ€γΎγŸγ―ζœ€ε€§γ§θΏ‘ε‚γ‚’δΏγ€γ€‚" - -msgid "KCoreBuilder.name" -msgstr "k-γ‚³γ‚’" - -msgid "KCoreBuilder.description" -msgstr "グラフをそγδΈ­γγ™γΉγ¦γγƒŽγƒΌγƒ‰γζ¬‘ζ•°γŒε°‘γͺくともkにγͺγ‚‹γ‚ˆγ†γ«δΏγ€γ€‚" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/org-gephi-filters-plugin-graph.pot b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/org-gephi-filters-plugin-graph.pot deleted file mode 100644 index b939ed767c..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/org-gephi-filters-plugin-graph.pot +++ /dev/null @@ -1,66 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "DegreeRangeBuilder.name" -msgstr "Degree Range" - -msgid "DegreeRangeBuilder.description" -msgstr "Keep nodes with its degree value within a range" - -msgid "InDegreeRangeBuilder.name" -msgstr "In Degree Range" - -msgid "InDegreeRangeBuilder.description" -msgstr "Keep nodes with its in-degree value within a range" - -msgid "OutDegreeRangeBuilder.name" -msgstr "Out Degree Range" - -msgid "OutDegreeRangeBuilder.description" -msgstr "Keep nodes with its out-degree value within a range" - -msgid "MutualDegreeRangeBuilder.name" -msgstr "Mutual Degree Range" - -msgid "MutualDegreeRangeBuilder.description" -msgstr "Keep nodes with its mutual degree value within a range" - -msgid "EgoBuilder.name" -msgstr "Ego Network" - -msgid "EgoBuilder.description" -msgstr "" -"Keep neighbors at depth 1, 2, 3 or Max from a particular node. Node is found " -"with regex on ID and LABEL." - -msgid "GiantComponentBuilder.name" -msgstr "Giant Component" - -msgid "GiantComponentBuilder.description" -msgstr "Keep only nodes in the giant component (the component with most nodes)" - -msgid "NeighborsBuilder.name" -msgstr "Neighbors Network" - -msgid "NeighborsBuilder.description" -msgstr "Keep neighbors at depth 1, 2, 3 or Max from the current graph." - -msgid "KCoreBuilder.name" -msgstr "K-core" - -msgid "KCoreBuilder.description" -msgstr "Keep graph in which all nodes have degree at least k." diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/pt_BR.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/pt_BR.po deleted file mode 100644 index 37ddc93e46..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/pt_BR.po +++ /dev/null @@ -1,68 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -# CΓ©lio Faria Jr. , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 12:17+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "DegreeRangeBuilder.name" -msgstr "Intervalo de Grau" - -msgid "DegreeRangeBuilder.description" -msgstr "Manter nΓ³s cujo grau esteja em um determinado intervalo" - -msgid "InDegreeRangeBuilder.name" -msgstr "Intervalo de Grau de Entrada" - -msgid "InDegreeRangeBuilder.description" -msgstr "Manter nΓ³s cujo grau de entrada esteja em um determinado intervalo" - -msgid "OutDegreeRangeBuilder.name" -msgstr "Intervalo de Grau de saΓ­da" - -msgid "OutDegreeRangeBuilder.description" -msgstr "Manter nΓ³s cujo grau de saΓ­da esteja em um determinado intervalo" - -msgid "MutualDegreeRangeBuilder.name" -msgstr "Intervalo de grau bidirecional" - -msgid "MutualDegreeRangeBuilder.description" -msgstr "Manter nΓ³s cujo grau mΓΊtuo esteja em um determinado intervalo" - -msgid "EgoBuilder.name" -msgstr "Rede Ego" - -msgid "EgoBuilder.description" -msgstr "Manter vizinhos que estejam a uma profundidade de 1, 2, 3 ou mΓ‘xima de um nΓ³ particular. O nΓ³ serΓ‘ encontrado aplicando-se uma expressΓ£o regular a seu ID ou a seu rΓ³tulo." - -msgid "GiantComponentBuilder.name" -msgstr "Componente gigante" - -msgid "GiantComponentBuilder.description" -msgstr "Manter somente nΓ³s no componente gigante (componente com a maioria dos nΓ³s)" - -msgid "NeighborsBuilder.name" -msgstr "Rede de vizinhos" - -msgid "NeighborsBuilder.description" -msgstr "Manter vizinhos que estejam a uma profundidade 1, 2, 3 ou mΓ‘xima do grafo atual." - -msgid "KCoreBuilder.name" -msgstr "K-core" - -msgid "KCoreBuilder.description" -msgstr "Manter o grafo no qual todos os nΓ³s tΓͺm grau de pelo menos k." diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/ru.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/ru.po deleted file mode 100644 index 9043913f77..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/ru.po +++ /dev/null @@ -1,67 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-28 07:14+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "DegreeRangeBuilder.name" -msgstr "Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ мощности" - -msgid "DegreeRangeBuilder.description" -msgstr "ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡƒΠ·Π»Ρ‹, ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… находится Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅" - -msgid "InDegreeRangeBuilder.name" -msgstr "Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ входящСй мощности" - -msgid "InDegreeRangeBuilder.description" -msgstr "ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡƒΠ·Π»Ρ‹, входящая ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… находится Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅" - -msgid "OutDegreeRangeBuilder.name" -msgstr "Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ исходящСй мощности" - -msgid "OutDegreeRangeBuilder.description" -msgstr "ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡƒΠ·Π»Ρ‹, исходящая ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… находится Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅" - -msgid "MutualDegreeRangeBuilder.name" -msgstr "Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠΉ мощности" - -msgid "MutualDegreeRangeBuilder.description" -msgstr "ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΡƒΠ·Π»Ρ‹, взаимная ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… находится Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅" - -msgid "EgoBuilder.name" -msgstr "Ego Network" - -msgid "EgoBuilder.description" -msgstr "ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сосСдСй Π½Π° расстоянии 1,2,3 ΠΈΠ»ΠΈ Max шагов ΠΎΡ‚ Π·Π°Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°. Π£Π·Π΅Π» задаСтся рСгулярным Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π½Π° ID ΠΈΠ»ΠΈ LABEL" - -msgid "GiantComponentBuilder.name" -msgstr "Гигантская связная ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°" - -msgid "GiantComponentBuilder.description" -msgstr "ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½Ρƒ ΡΠ²ΡΠ·Π½ΡƒΡŽ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρƒ (с ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΌ числом ΡƒΠ·Π»ΠΎΠ²)" - -msgid "NeighborsBuilder.name" -msgstr "Π‘Π΅Ρ‚ΡŒ сосСдСй" - -msgid "NeighborsBuilder.description" -msgstr "ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ сосСдСй Π½Π° расстоянии 1,2,3 ΠΈΠ»ΠΈ Max шагов ΠΎΡ‚ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ Π³Ρ€Π°Ρ„Π°." - -msgid "KCoreBuilder.name" -msgstr "K-core" - -msgid "KCoreBuilder.description" -msgstr "ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π³Ρ€Π°Ρ„, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ всС ΡƒΠ·Π»Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ Π½Π΅ ΠΌΠ΅Π½ΡŒΡˆΡƒΡŽ, Ρ‡Π΅ΠΌ k." diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/zh_CN.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/zh_CN.po deleted file mode 100644 index b095e40d1e..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/graph/zh_CN.po +++ /dev/null @@ -1,66 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:13+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "DegreeRangeBuilder.name" -msgstr "εΊ¦θŒƒε›΄" - -msgid "DegreeRangeBuilder.description" -msgstr "δΏε­˜εΊ¦ε€Όεœ¨δΈ€εšθŒƒε›΄ε†…ηš„θŠ‚η‚Ή" - -msgid "InDegreeRangeBuilder.name" -msgstr "εœ¨εΊ¦ηš„θŒƒε›΄" - -msgid "InDegreeRangeBuilder.description" -msgstr "δΏε­˜εΊ¦ε€Όεœ¨δΈ€εšθŒƒε›΄ε†…ηš„θŠ‚η‚Ή" - -msgid "OutDegreeRangeBuilder.name" -msgstr "θΆ…ε‡ΊεΊ¦θŒƒε›΄" - -msgid "OutDegreeRangeBuilder.description" -msgstr "δΏε­˜θΆ…ε‡ΊεΊ¦ε€ΌθŒƒε›΄ηš„θŠ‚η‚Ή" - -msgid "MutualDegreeRangeBuilder.name" -msgstr "η›ΈδΊ’εΊ¦θŒƒε›΄" - -msgid "MutualDegreeRangeBuilder.description" -msgstr "δΏε­˜η›ΈδΊ’εΊ¦ε€Όεœ¨δΈ€εšθŒƒε›΄ε†…ηš„θŠ‚η‚Ή" - -msgid "EgoBuilder.name" -msgstr "θ‡ͺζˆ‘η½‘η»œ" - -msgid "EgoBuilder.description" -msgstr "δΏε­˜δΈ΄θΏ‘θŠ‚η‚Ήηš„ζ·±εΊ¦δΈΊ1,2,3ζˆ–η‰ΉεšθŠ‚η‚Ήηš„ζœ€ε€§ε€Όγ€‚ι€šθΏ‡ζ­£εˆ™θ‘¨θΎΎεΌηš„IDε’Œζ ‡η­Ύζ‰Ύεˆ°θŠ‚η‚Ήγ€‚" - -msgid "GiantComponentBuilder.name" -msgstr "ε·¨δΊΊη»„δ»Ά" - -msgid "GiantComponentBuilder.description" -msgstr "δ»…δΏε­˜εœ¨ε·¨δΊΊη»„δ»Άηš„θŠ‚η‚ΉοΌˆε€§ε€šζ•°θŠ‚η‚Ήηš„η»„ζˆιƒ¨εˆ†οΌ‰" - -msgid "NeighborsBuilder.name" -msgstr "ι‚»ε±…η½‘η»œ" - -msgid "NeighborsBuilder.description" -msgstr "δΏε­˜δΈ΄εŸŸηš„ζ·±εΊ¦δΈΊ1,2,3ζˆ–ηŽ°ζœ‰ε›Ύηš„ζœ€ε€§ε€Όγ€‚" - -msgid "KCoreBuilder.name" -msgstr "K -ζ ΈεΏƒ" - -msgid "KCoreBuilder.description" -msgstr "δΏε­˜ζ‰€ζœ‰θŠ‚η‚Ήηš„εΊ¦θ‡³ε°‘ζ˜―Kηš„ε›Ύ." diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_ar.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_ca.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_ca.properties new file mode 100644 index 0000000000..018c8fa384 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_ca.properties @@ -0,0 +1,3 @@ +LevelBuilder.name=Level +FlattenBuilder.name=Flatten +FlattenBuilder.description=Keep only the current view in the hierarchy and transform meta edges in normal edges. The graph is no more hierarchic. diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_cs.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_cs.properties index f1be4eac1c..02ae7adc84 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_cs.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_cs.properties @@ -1,13 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-21 16\:54+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -LevelBuilder.name=\u00darove\u0148 - -FlattenBuilder.name=Vyrovnat - -FlattenBuilder.description=Ponechat pouze sou\u010dasn\u00e9 zobrazen\u00ed v hierarchii a p\u0159ev\u00e9st meta hrany v norm\u00e1ln\u00edch hran\u00e1ch. Graf ji\u017e pak nen\u00ed hierarchick\u00fd. +LevelBuilder.name = Ϊrove\u0148 + +FlattenBuilder.name = Vyrovnat +FlattenBuilder.description = Ponechat pouze sou\u010dasnι zobrazenν v hierarchii a p\u0159evιst meta hrany v normαlnνch hranαch. Graf ji\u017e pak nenν hierarchickύ. diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_de.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_de.properties new file mode 100644 index 0000000000..376e4e22d4 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_de.properties @@ -0,0 +1,4 @@ +LevelBuilder.name = Ebene + +FlattenBuilder.name = Ebnen +FlattenBuilder.description = Behalte nur die aktuelle Ansicht in der Hierarchie und transformiere Meta-Kanten in normale Kanten. Der Graph ist nicht mehr hierarchisch. diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_es.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_es.properties index 6e00b5e7b0..c60a1b045f 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_es.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_es.properties @@ -1,13 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:05+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -LevelBuilder.name=Nivel - -FlattenBuilder.name=Aplanar - -FlattenBuilder.description=Mantener solo la vista actual en la jerarqu\u00eda y transformar las meta-aristas en aristas normales. El grafo ya no ser\u00e1 jer\u00e1rquico. +LevelBuilder.name = Nivel + +FlattenBuilder.name = Aplanar +FlattenBuilder.description = Mantener solo la vista actual en la jerarquνa y transformar las meta-aristas en aristas normales. El grafo ya no serα jerαrquico. diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_fr.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_fr.properties index aa4fb797f6..796d4fa5a5 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_fr.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_fr.properties @@ -1,13 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:05+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -LevelBuilder.name=Niveau - -FlattenBuilder.name=FlattenBuilder.name - -FlattenBuilder.description=FlattenBuilder.description +LevelBuilder.name = Niveau + +FlattenBuilder.name = FlattenBuilder.name +FlattenBuilder.description = FlattenBuilder.description diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_he.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_he.properties new file mode 100644 index 0000000000..018c8fa384 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_he.properties @@ -0,0 +1,3 @@ +LevelBuilder.name=Level +FlattenBuilder.name=Flatten +FlattenBuilder.description=Keep only the current view in the hierarchy and transform meta edges in normal edges. The graph is no more hierarchic. diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_hu.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_hu.properties new file mode 100644 index 0000000000..75576445fb --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_hu.properties @@ -0,0 +1,5 @@ + + +LevelBuilder.name=Szint +FlattenBuilder.description=Csak az aktu\u00E1lis n\u00E9zet maradjon meg a hierarchi\u00E1ban, \u00E9s alak\u00EDtsa \u00E1t a meta \u00E9leket norm\u00E1l \u00E9lekk\u00E9. A grafikon nem hierarchikusabb. +FlattenBuilder.name=Lapos diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_it.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_it.properties new file mode 100644 index 0000000000..018c8fa384 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_it.properties @@ -0,0 +1,3 @@ +LevelBuilder.name=Level +FlattenBuilder.name=Flatten +FlattenBuilder.description=Keep only the current view in the hierarchy and transform meta edges in normal edges. The graph is no more hierarchic. diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_ja.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_ja.properties index eef4ea5767..b82171df96 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_ja.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_ja.properties @@ -1,13 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-02 11\:32+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -LevelBuilder.name=\u30ec\u30d9\u30eb - -FlattenBuilder.name=\u5e73\u3089\u306b\u3059\u308b - -FlattenBuilder.description=\u968e\u5c64\u5185\u306e\u73fe\u5728\u306e\u30d3\u30e5\u30fc\u306e\u307f\u3092\u4fdd\u6301\u3057\u3001\u901a\u5e38\u306e\u8fba\u3067\u306f\u3001\u30e1\u30bf\u8fba\u3092\u5909\u63db\u3059\u308b\u3002\u30b0\u30e9\u30d5\u306f\u3082\u3046\u968e\u5c64\u7684\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 +LevelBuilder.name = \u30ec\u30d9\u30eb + +FlattenBuilder.name = \u5e73\u3089\u306b\u3059\u308b +FlattenBuilder.description = \u968e\u5c64\u5185\u306e\u73fe\u5728\u306e\u30d3\u30e5\u30fc\u306e\u307f\u3092\u4fdd\u6301\u3057\u3001\u901a\u5e38\u306e\u8fba\u3067\u306f\u3001\u30e1\u30bf\u8fba\u3092\u5909\u63db\u3059\u308b\u3002\u30b0\u30e9\u30d5\u306f\u3082\u3046\u968e\u5c64\u7684\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002 diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_ko.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_ko.properties new file mode 100644 index 0000000000..5924241953 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_ko.properties @@ -0,0 +1,5 @@ + + +LevelBuilder.name=\uC218\uC900 +FlattenBuilder.name=\uD3C9\uD3B8\uD558\uAC8C \uD558\uAE30 +FlattenBuilder.description=\uACC4\uCE35 \uAD6C\uC870\uC5D0\uC11C \uD604\uC7AC \uBDF0\uB9CC\uC744 \uC720\uC9C0\uD558\uACE0, \uBA54\uD0C0 \uC5E3\uC9C0\uB97C \uC77C\uBC18\uC801\uC778 \uC5E3\uC9C0\uB85C \uBCC0\uD658\uD55C\uB2E4. \uC774 \uADF8\uB798\uD504\uB294 \uACC4\uCE35 \uAD6C\uC870\uAC00 \uD574\uC81C\uB41C\uB2E4. diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_nl.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_nl.properties new file mode 100644 index 0000000000..9f8a9ad023 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_nl.properties @@ -0,0 +1,3 @@ +LevelBuilder.name=Niveau +FlattenBuilder.name=Flatten +FlattenBuilder.description=Keep only the current view in the hierarchy and transform meta edges in normal edges. The graph is no more hierarchic. diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_pt_BR.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_pt_BR.properties index be1bcdb3d8..d2147142fb 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_pt_BR.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_pt_BR.properties @@ -1,13 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 17\:27+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -LevelBuilder.name=N\u00edvel - -FlattenBuilder.name=Achatar - -FlattenBuilder.description=Manter apenas a vis\u00e3o atual na hierarquia e transformar as meta arestas em arestas normais. O grafo n\u00e3o ser\u00e1 mais hier\u00e1rquico. +LevelBuilder.name = Nνvel + +FlattenBuilder.name = Achatar +FlattenBuilder.description = Manter apenas a visγo atual na hierarquia e transformar as meta arestas em arestas normais. O grafo nγo serα mais hierαrquico. diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_ro.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_ro.properties new file mode 100644 index 0000000000..319aac3667 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_ro.properties @@ -0,0 +1,5 @@ + + +LevelBuilder.name=Nivel +FlattenBuilder.name=Aplatizeaz\u0103 +FlattenBuilder.description=P\u0103streaz\u0103 doar vederea curent\u0103 \u00EEn ierarhie \u0219i transform\u0103 meta-muchiile \u00EEn muchii normale. Graful nu va mai fi ierarhic. diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_ru.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_ru.properties index 5c7a8bed1d..0d1067ea29 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_ru.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_ru.properties @@ -1,13 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-11-02 07\:54+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -LevelBuilder.name=\u0423\u0440\u043e\u0432\u0435\u043d\u044c - -FlattenBuilder.name=\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043b\u043e\u0441\u043a\u0438\u043c - -FlattenBuilder.description=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0432\u0438\u0434 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u0430-\u0440\u0451\u0431\u0440\u0430 \u0432 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0451\u0431\u0440\u0430. \u0413\u0440\u0430\u0444 \u043f\u043e\u0442\u0435\u0440\u044f\u0435\u0442 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044e. +LevelBuilder.name = \u0423\u0440\u043e\u0432\u0435\u043d\u044c + +FlattenBuilder.name = \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u043b\u043e\u0441\u043a\u0438\u043c +FlattenBuilder.description = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0439 \u0432\u0438\u0434 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u0438 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u0430-\u0440\u0451\u0431\u0440\u0430 \u0432 \u043d\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u044b\u0435 \u0440\u0451\u0431\u0440\u0430. \u0413\u0440\u0430\u0444 \u043f\u043e\u0442\u0435\u0440\u044f\u0435\u0442 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044e. diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_th.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_tr.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_tr.properties new file mode 100644 index 0000000000..018c8fa384 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_tr.properties @@ -0,0 +1,3 @@ +LevelBuilder.name=Level +FlattenBuilder.name=Flatten +FlattenBuilder.description=Keep only the current view in the hierarchy and transform meta edges in normal edges. The graph is no more hierarchic. diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_uk.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_uk.properties new file mode 100644 index 0000000000..a1199596ee --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_uk.properties @@ -0,0 +1,3 @@ +FlattenBuilder.description=\u0417\u0431\u0435\u0440\u0456\u0433\u0430\u0439\u0442\u0435 \u0432 \u0456\u0454\u0440\u0430\u0440\u0445\u0456\u0457 \u043B\u0438\u0448\u0435 \u043F\u043E\u0442\u043E\u0447\u043D\u0435 \u043F\u043E\u0434\u0430\u043D\u043D\u044F \u0442\u0430 \u043F\u0435\u0440\u0435\u0442\u0432\u043E\u0440\u044E\u0439\u0442\u0435 \u043C\u0435\u0442\u0430-\u043A\u0440\u0430\u0457 \u043D\u0430 \u0437\u0432\u0438\u0447\u0430\u0439\u043D\u0456. \u0413\u0440\u0430\u0444\u0456\u043A \u0431\u0456\u043B\u044C\u0448\u0435 \u043D\u0435 \u0454 \u0456\u0454\u0440\u0430\u0440\u0445\u0456\u0447\u043D\u0438\u043C. +LevelBuilder.name=\u0420\u0456\u0432\u0435\u043D\u044C +FlattenBuilder.name=\u0420\u043E\u0437\u043F\u043B\u044E\u0449\u0438\u0442\u0438 diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_zh_CN.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_zh_CN.properties index 6684bf69e2..3a4557bb87 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_zh_CN.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_zh_CN.properties @@ -1,12 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:13+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -LevelBuilder.name=\u6c34\u5e73 - -FlattenBuilder.name=\u5408\u5e76 - -FlattenBuilder.description=\u53ea\u4fdd\u7559\u5728\u5c42\u6b21\u7ed3\u6784\u4e2d\u7684\u5f53\u524d\u89c6\u56fe\u548c\u8f6c\u6362\u5728\u6b63\u5e38\u7684\u8fb9\u7684\u5173\u952e\u8fb9\u3002\u8be5\u56fe\u4e0d\u518d\u662f\u5206\u7ea7\u7684\u3002 +LevelBuilder.name = \u6c34\u5e73 + +FlattenBuilder.name = \u5408\u5e76 +FlattenBuilder.description = \u53ea\u4fdd\u7559\u5728\u5c42\u6b21\u7ed3\u6784\u4e2d\u7684\u5f53\u524d\u89c6\u56fe\u548c\u8f6c\u6362\u5728\u6b63\u5e38\u7684\u8fb9\u7684\u5173\u952e\u8fb9\u3002\u8be5\u56fe\u4e0d\u518d\u662f\u5206\u7ea7\u7684\u3002 diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_zh_TW.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_zh_TW.properties new file mode 100644 index 0000000000..018c8fa384 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/Bundle_zh_TW.properties @@ -0,0 +1,3 @@ +LevelBuilder.name=Level +FlattenBuilder.name=Flatten +FlattenBuilder.description=Keep only the current view in the hierarchy and transform meta edges in normal edges. The graph is no more hierarchic. diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/cs.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/cs.po deleted file mode 100644 index 415b4b865f..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/cs.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-21 16:54+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "LevelBuilder.name" -msgstr "Úroveň" - -msgid "FlattenBuilder.name" -msgstr "Vyrovnat" - -msgid "FlattenBuilder.description" -msgstr "Ponechat pouze současnΓ© zobrazenΓ­ v hierarchii a pΕ™evΓ©st meta hrany v normΓ‘lnΓ­ch hranΓ‘ch. Graf jiΕΎ pak nenΓ­ hierarchickΓ½." diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/es.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/es.po deleted file mode 100644 index 238272d584..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/es.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:05+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "LevelBuilder.name" -msgstr "Nivel" - -msgid "FlattenBuilder.name" -msgstr "Aplanar" - -msgid "FlattenBuilder.description" -msgstr "Mantener solo la vista actual en la jerarquΓ­a y transformar las meta-aristas en aristas normales. El grafo ya no serΓ‘ jerΓ‘rquico." diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/fr.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/fr.po deleted file mode 100644 index 2586651553..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/fr.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:05+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "LevelBuilder.name" -msgstr "Niveau" - -msgid "FlattenBuilder.name" -msgstr "FlattenBuilder.name" - -msgid "FlattenBuilder.description" -msgstr "FlattenBuilder.description" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/ja.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/ja.po deleted file mode 100644 index 29b93ad24d..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/ja.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-02 11:32+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "LevelBuilder.name" -msgstr "レベル" - -msgid "FlattenBuilder.name" -msgstr "平らにする" - -msgid "FlattenBuilder.description" -msgstr "ιšŽε±€ε†…γηΎεœ¨γγƒ“γƒ₯γƒΌγγΏγ‚’δΏζŒγ—γ€ι€šεΈΈγθΎΊγ§γ―γ€γƒ‘γ‚ΏθΎΊγ‚’ε€‰ζ›γ™γ‚‹γ€‚γ‚°γƒ©γƒ•γ―γ‚‚γ†ιšŽε±€ηš„γ§γ―γ‚γ‚ŠγΎγ›γ‚“γ€‚" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/org-gephi-filters-plugin-hierarchy.pot b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/org-gephi-filters-plugin-hierarchy.pot deleted file mode 100644 index f18c6e36fb..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/org-gephi-filters-plugin-hierarchy.pot +++ /dev/null @@ -1,27 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "LevelBuilder.name" -msgstr "Level" - -msgid "FlattenBuilder.name" -msgstr "Flatten" - -msgid "FlattenBuilder.description" -msgstr "" -"Keep only the current view in the hierarchy and transform meta edges in " -"normal edges. The graph is no more hierarchic." diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/pt_BR.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/pt_BR.po deleted file mode 100644 index bab6139970..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/pt_BR.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 17:27+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "LevelBuilder.name" -msgstr "NΓ­vel" - -msgid "FlattenBuilder.name" -msgstr "Achatar" - -msgid "FlattenBuilder.description" -msgstr "Manter apenas a visΓ£o atual na hierarquia e transformar as meta arestas em arestas normais. O grafo nΓ£o serΓ‘ mais hierΓ‘rquico." diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/ru.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/ru.po deleted file mode 100644 index a5beb44f50..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/ru.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-11-02 07:54+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "LevelBuilder.name" -msgstr "Π£Ρ€ΠΎΠ²Π΅Π½ΡŒ" - -msgid "FlattenBuilder.name" -msgstr "Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ плоским" - -msgid "FlattenBuilder.description" -msgstr "Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ Π²ΠΈΠ΄ ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΠΈ ΠΈ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚Π°-Ρ€Ρ‘Π±Ρ€Π° Π² Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½Ρ‹Π΅ Ρ€Ρ‘Π±Ρ€Π°. Π“Ρ€Π°Ρ„ потСряСт ΠΈΠ΅Ρ€Π°Ρ€Ρ…ΠΈΡŽ." diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/zh_CN.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/zh_CN.po deleted file mode 100644 index d34d6fc0bc..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/hierarchy/zh_CN.po +++ /dev/null @@ -1,27 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:13+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "LevelBuilder.name" -msgstr "ζ°΄εΉ³" - -msgid "FlattenBuilder.name" -msgstr "合幢" - -msgid "FlattenBuilder.description" -msgstr "εͺδΏη•™εœ¨ε±‚ζ¬‘η»“ζž„δΈ­ηš„ε½“ε‰θ§†ε›Ύε’Œθ½¬ζ’εœ¨ζ­£εΈΈηš„θΎΉηš„ε…³ι”边。θ―₯ε›ΎδΈε†ζ˜―εˆ†ηΊ§ηš„γ€‚" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/ja.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/ja.po deleted file mode 100644 index 03373d9e7b..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/ja.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-15 10:50+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "フィルタγεŸθ£…は、新規フィルタをεšηΎ©γ—ます。" - -msgid "OpenIDE-Module-Short-Description" -msgstr "フィルタγεŸθ£…" - -msgid "AbstractAttributeFilterBuilder.Node" -msgstr "γƒŽγƒΌγƒ‰" - -msgid "AbstractAttributeFilterBuilder.Edge" -msgstr "θΎΊ" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_ar.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_ca.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_ca.properties new file mode 100644 index 0000000000..59b49b80d5 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_ca.properties @@ -0,0 +1,11 @@ +Operator.category=Operador +INTERSECTIONBuilder.name=INTERSECCIΣ +INTERSECTIONBuilder.description=AND operator on sub-queries. Keep nodes and edges present in all sub-queries results. +UNIONBuilder.name=UNIΣ +UNIONBuilder.description=OR operator on sub-queries. Keep nodes and edges present in any of sub-queries results. +NOTBuilderEdge.name=NOT (Edges) +NOTBuilderEdge.description=NOT operator on an edge filter +NOTBuilderNode.name=NOT (Nodes) +NOTBuilderNode.description=NOT operator on a node filter +MASKBuilderEdge.name=MASK (Edges) +MASKBuilderEdge.description=Return the complete graph with only edges from the node filter sub-query. For instance, keep edges with source node degree > 5. diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_cs.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_cs.properties index 4f592cb709..ee4b35526c 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_cs.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_cs.properties @@ -1,29 +1,16 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-21 16\:42+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -Operator.category=Oper\u00e1tor - -INTERSECTIONBuilder.name=INTERSECTION - -INTERSECTIONBuilder.description=Oper\u00e1tor AND na poddotazy. Ponech\u00e1 uzly a hrany p\u0159\u00edtomny ve v\u0161ech v\u00fdsledc\u00edch poddotaz\u016f. - -UNIONBuilder.name=UNION - -UNIONBuilder.description=Oper\u00e1tor OR na poddotazy. Ponech\u00e1 uzly a hrany p\u0159\u00edtomny v ka\u017ed\u00e9m v\u00fdsledku poddotaz\u016f. - -NOTBuilderEdge.name=NOT (Hrany) - -NOTBuilderEdge.description=Oper\u00e1tor NOT ve filtru hrany - -NOTBuilderNode.name=NOT (Uzly) - -NOTBuilderNode.description=Oper\u00e1tor NOT ve filtru uzlu - -MASKBuilderEdge.name=MASK (Hrany) - -MASKBuilderEdge.description=Vr\u00e1to dokon\u010den\u00fd graf pouze s hranami z poddotazu filtru uzlu. Nap\u0159\u00edklad ponech\u00e1 hrany se stupn\u011bm zdrojov\u00e9ho uzle > 5. +Operator.category = Operαtor + +INTERSECTIONBuilder.name = INTERSECTION +INTERSECTIONBuilder.description = Operαtor AND na poddotazy. Ponechα uzly a hrany p\u0159νtomny ve v\u0161ech vύsledcνch poddotaz\u016f. + +UNIONBuilder.name = UNION +UNIONBuilder.description = Operαtor OR na poddotazy. Ponechα uzly a hrany p\u0159νtomny v ka\u017edιm vύsledku poddotaz\u016f. + +NOTBuilderEdge.name = NOT (Hrany) +NOTBuilderEdge.description = Operαtor NOT ve filtru hrany + +NOTBuilderNode.name = NOT (Uzly) +NOTBuilderNode.description = Operαtor NOT ve filtru uzlu + +MASKBuilderEdge.name = MASK (Hrany) +MASKBuilderEdge.description = Vrαto dokon\u010denύ graf pouze s hranami z poddotazu filtru uzlu. Nap\u0159νklad ponechα hrany se stupn\u011bm zdrojovιho uzle > 5. diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_de.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_de.properties new file mode 100644 index 0000000000..91efb2e7dd --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_de.properties @@ -0,0 +1,16 @@ +Operator.category = Operator + +INTERSECTIONBuilder.name = INTERSECTION +INTERSECTIONBuilder.description = AND-Operator auf Unterabfragen. Erhalte Knoten und Kanten die in Ergebnissen aller Unterabfragen enthalten sind. + +UNIONBuilder.name = UNION +UNIONBuilder.description = OR-Operator auf Unterabfragen. Erhalte Knoten und Kanten die in Ergebnisse mindestens einer Unterabfragen enthalten sind. + +NOTBuilderEdge.name = NOT (Kanten) +NOTBuilderEdge.description = NOT-Operator auf Kanten Filter + +NOTBuilderNode.name = NOT (Knoten) +NOTBuilderNode.description = NOT Operator auf Knoten Filter + +MASKBuilderEdge.name = MASK (Kanten) +MASKBuilderEdge.description = Gibt den Graphen zurόck, der nur Kanten der Knoten-Filter-Unterabfrage umfasst. Zum Beispiel, behalte Kanten deren Ursprungsknoten einen Grad > 5 besitzen. diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_es.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_es.properties index 159d63c883..827f9d266b 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_es.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_es.properties @@ -1,30 +1,16 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-16 22\:54+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -Operator.category=Operador - -INTERSECTIONBuilder.name=INTERSECCI\u00d3N - -INTERSECTIONBuilder.description=Operador AND en sub-consultas. Mantener nodos y aristas presentes en los resultados de todas las sub-consultas. - -UNIONBuilder.name=UNI\u00d3N - -UNIONBuilder.description=Operador OR en sub-consultas. Mantener nodos y aristas presentes en los resultados de alguna de las sub-consultas. - -NOTBuilderEdge.name=NOT (aristas) - -NOTBuilderEdge.description=Operador NOT en un filtro de aristas - -NOTBuilderNode.name=NOT (nodos) - -NOTBuilderNode.description=Operador NOT en un filtro de nodos - -MASKBuilderEdge.name=M\u00c1SCARA - -MASKBuilderEdge.description=Devolver el grafo completo con aristas s\u00f3lamente presentes en el resultado de la sub-consulta del filtro de nodos. Por ejemplo, mantener aristas con un grado del nodo origen > 5. +Operator.category = Operador + +INTERSECTIONBuilder.name = INTERSECCIΣN +INTERSECTIONBuilder.description = Operador AND en sub-consultas. Mantener nodos y aristas presentes en los resultados de todas las sub-consultas. + +UNIONBuilder.name = UNIΣN +UNIONBuilder.description = Operador OR en sub-consultas. Mantener nodos y aristas presentes en los resultados de alguna de las sub-consultas. + +NOTBuilderEdge.name = NOT (aristas) +NOTBuilderEdge.description = Operador NOT en un filtro de aristas + +NOTBuilderNode.name = NOT (nodos) +NOTBuilderNode.description = Operador NOT en un filtro de nodos + +MASKBuilderEdge.name = MΑSCARA +MASKBuilderEdge.description = Devolver el grafo completo con aristas sσlamente presentes en el resultado de la sub-consulta del filtro de nodos. Por ejemplo, mantener aristas con un grado del nodo origen > 5. diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_fr.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_fr.properties index 3096ac896d..47df5bf058 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_fr.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_fr.properties @@ -1,30 +1,16 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-08 15\:16+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -Operator.category=Op\u00e9rateur - -INTERSECTIONBuilder.name=INTERSECTION - -INTERSECTIONBuilder.description=Op\u00e9rateur ET sur les sous-requ\u00eates. Garde les noeuds et liens pr\u00e9sents dans les r\u00e9sultats de toutes les sous-requ\u00eates. - -UNIONBuilder.name=UNION - -UNIONBuilder.description=Op\u00e9rateur OU sur les sous-requ\u00eates. Garde les noeuds et liens pr\u00e9sents dans les r\u00e9sultats d'au moins une sous-requ\u00eate. - -NOTBuilderEdge.name=NON (Liens) - -NOTBuilderEdge.description=Op\u00e9rateur NON sur un filtre de liens. - -NOTBuilderNode.name=NON (Noeuds) - -NOTBuilderNode.description=Op\u00e9rateur NON sur un filtre de noeuds. - -MASKBuilderEdge.name=MASQUE (Liens) - -MASKBuilderEdge.description=Retourne le graphe partiel dont les liens connectent des n\u0153uds appartenant au r\u00e9sultat de la sous-requ\u00eate. Par exemple, garde les liens dont le degr\u00e9 du n\u0153ud source est > 5. +Operator.category = Opιrateur + +INTERSECTIONBuilder.name = INTERSECTION +INTERSECTIONBuilder.description = Opιrateur ET sur les sous-requκtes. Garde les noeuds et liens prιsents dans les rιsultats de toutes les sous-requκtes. + +UNIONBuilder.name = UNION +UNIONBuilder.description = Opιrateur OU sur les sous-requκtes. Garde les noeuds et liens prιsents dans les rιsultats d'au moins une sous-requκte. + +NOTBuilderEdge.name = NON (Liens) +NOTBuilderEdge.description = Opιrateur NON sur un filtre de liens. + +NOTBuilderNode.name = NON (Noeuds) +NOTBuilderNode.description = Opιrateur NON sur un filtre de noeuds. + +MASKBuilderEdge.name = MASQUE (Liens) +MASKBuilderEdge.description = Retourne le graphe partiel dont les liens connectent des n\u0153uds appartenant au rιsultat de la sous-requκte. Par exemple, garde les liens dont le degrι du n\u0153ud source est > 5. diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_he.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_he.properties new file mode 100644 index 0000000000..23775911b2 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_he.properties @@ -0,0 +1,11 @@ +Operator.category=Operator +INTERSECTIONBuilder.name=INTERSECTION +INTERSECTIONBuilder.description=AND operator on sub-queries. Keep nodes and edges present in all sub-queries results. +UNIONBuilder.name=UNION +UNIONBuilder.description=OR operator on sub-queries. Keep nodes and edges present in any of sub-queries results. +NOTBuilderEdge.name=NOT (Edges) +NOTBuilderEdge.description=NOT operator on an edge filter +NOTBuilderNode.name=NOT (Nodes) +NOTBuilderNode.description=NOT operator on a node filter +MASKBuilderEdge.name=MASK (Edges) +MASKBuilderEdge.description=Return the complete graph with only edges from the node filter sub-query. For instance, keep edges with source node degree > 5. diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_hu.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_hu.properties new file mode 100644 index 0000000000..b28741bb9d --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_hu.properties @@ -0,0 +1,12 @@ + + +NOTBuilderNode.description=NEM oper\u00E1tor csom\u00F3pontsz\u0171r\u0151n +UNIONBuilder.description=VAGY oper\u00E1tor az al lek\u00E9rdez\u00E9sekn\u00E9l. A csom\u00F3pontok \u00E9s \u00E9lek jelen legyenek az al lek\u00E9rdez\u00E9sek eredm\u00E9nyeiben. +MASKBuilderEdge.name=MASZK (sz\u00E9lek) +INTERSECTIONBuilder.description=AND oper\u00E1tor az al lek\u00E9rdez\u00E9sekn\u00E9l. A csom\u00F3pontok \u00E9s \u00E9lek jelen legyenek az \u00F6sszes al lek\u00E9rdez\u00E9s eredm\u00E9ny\u00E9ben. +MASKBuilderEdge.description=Visszaadja a teljes gr\u00E1fot, csak \u00E9lekkel a csom\u00F3pontsz\u0171r\u0151 al lek\u00E9rdez\u00E9sb\u0151l. P\u00E9ld\u00E1ul tartsa meg azokat az \u00E9leket, amelyek forr\u00E1scsom\u00F3ponti foka > 5. +NOTBuilderEdge.name=NEM (\u00E9lek) +NOTBuilderNode.name=NEM (csom\u00F3pontok) +INTERSECTIONBuilder.name=El\u00E1gaz\u00E1s +Operator.category=Oper\u00E1tor +NOTBuilderEdge.description=NEM oper\u00E1tor \u00E9lsz\u0171r\u0151n diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_it.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_it.properties new file mode 100644 index 0000000000..f15c4464cc --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_it.properties @@ -0,0 +1,11 @@ +Operator.category=Operatore +INTERSECTIONBuilder.name=INTERSECTION +INTERSECTIONBuilder.description=AND operator on sub-queries. Keep nodes and edges present in all sub-queries results. +UNIONBuilder.name=UNION +UNIONBuilder.description=OR operator on sub-queries. Keep nodes and edges present in any of sub-queries results. +NOTBuilderEdge.name=NOT (Edges) +NOTBuilderEdge.description=NOT operator on an edge filter +NOTBuilderNode.name=NOT (Nodes) +NOTBuilderNode.description=NOT operator on a node filter +MASKBuilderEdge.name=MASK (Edges) +MASKBuilderEdge.description=Return the complete graph with only edges from the node filter sub-query. For instance, keep edges with source node degree > 5. diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_ja.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_ja.properties index 46a40faf4f..45b2c17506 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_ja.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_ja.properties @@ -1,29 +1,16 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-15 08\:08+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -Operator.category=\u30aa\u30da\u30ec\u30fc\u30bf - -INTERSECTIONBuilder.name=\u7a4d\u96c6\u5408 - -INTERSECTIONBuilder.description=\u30b5\u30d6\u30af\u30a8\u30ea\u306eAND\u6f14\u7b97\u5b50\u3002\u3059\u3079\u3066\u306e\u30b5\u30d6\u30af\u30a8\u30ea\u306e\u7d50\u679c\u306b\u5b58\u5728\u3059\u308b\u30ce\u30fc\u30c9\u3068\u8fba\u3092\u4fdd\u6301\u3002 - -UNIONBuilder.name=\u548c\u96c6\u5408 - -UNIONBuilder.description=\u30b5\u30d6\u30af\u30a8\u30ea\u3067OR\u6f14\u7b97\u5b50\u3002\u30b5\u30d6\u30af\u30a8\u30ea\u306e\u7d50\u679c\u306e\u3044\u305a\u308c\u306b\u3082\u5b58\u5728\u30ce\u30fc\u30c9\u3068\u8fba\u3092\u4fdd\u6301\u3002 - -NOTBuilderEdge.name=NOT\u6f14\u7b97\u5b50(\u8fba) - -NOTBuilderEdge.description=\u8fba\u30d5\u30a3\u30eb\u30bf\u4e0a\u306eNOT\u6f14\u7b97\u5b50 - -NOTBuilderNode.name=NOT\u6f14\u7b97\u5b50(\u30ce\u30fc\u30c9) - -NOTBuilderNode.description=\u30ce\u30fc\u30c9\u30d5\u30a3\u30eb\u30bf\u4e0a\u306eNOT\u6f14\u7b97\u5b50 - -MASKBuilderEdge.name=\u30de\u30b9\u30af(\u8fba) - -MASKBuilderEdge.description=\u30ce\u30fc\u30c9\u30d5\u30a3\u30eb\u30bf\u30fc\u306e\u30b5\u30d6\u30af\u30a8\u30ea\u304b\u3089\u8fba\u306e\u307f\u3092\u6301\u3064\u5b8c\u5168\u30b0\u30e9\u30d5\u3092\u8fd4\u3059\u3002\u4f8b\u3048\u3070\u3001\u8fba\u3092\u30bd\u30fc\u30b9\u30ce\u30fc\u30c9\u306e\u6b21\u6570> 5\u306b\u4fdd\u3064\u3002 +Operator.category = \u30aa\u30da\u30ec\u30fc\u30bf + +INTERSECTIONBuilder.name = \u7a4d\u96c6\u5408 +INTERSECTIONBuilder.description = \u30b5\u30d6\u30af\u30a8\u30ea\u306eAND\u6f14\u7b97\u5b50\u3002\u3059\u3079\u3066\u306e\u30b5\u30d6\u30af\u30a8\u30ea\u306e\u7d50\u679c\u306b\u5b58\u5728\u3059\u308b\u30ce\u30fc\u30c9\u3068\u8fba\u3092\u4fdd\u6301\u3002 + +UNIONBuilder.name = \u548c\u96c6\u5408 +UNIONBuilder.description = \u30b5\u30d6\u30af\u30a8\u30ea\u3067OR\u6f14\u7b97\u5b50\u3002\u30b5\u30d6\u30af\u30a8\u30ea\u306e\u7d50\u679c\u306e\u3044\u305a\u308c\u306b\u3082\u5b58\u5728\u30ce\u30fc\u30c9\u3068\u8fba\u3092\u4fdd\u6301\u3002 + +NOTBuilderEdge.name = NOT\u6f14\u7b97\u5b50(\u8fba) +NOTBuilderEdge.description = \u8fba\u30d5\u30a3\u30eb\u30bf\u4e0a\u306eNOT\u6f14\u7b97\u5b50 + +NOTBuilderNode.name = NOT\u6f14\u7b97\u5b50(\u30ce\u30fc\u30c9) +NOTBuilderNode.description = \u30ce\u30fc\u30c9\u30d5\u30a3\u30eb\u30bf\u4e0a\u306eNOT\u6f14\u7b97\u5b50 + +MASKBuilderEdge.name = \u30de\u30b9\u30af(\u8fba) +MASKBuilderEdge.description = \u30ce\u30fc\u30c9\u30d5\u30a3\u30eb\u30bf\u30fc\u306e\u30b5\u30d6\u30af\u30a8\u30ea\u304b\u3089\u8fba\u306e\u307f\u3092\u6301\u3064\u5b8c\u5168\u30b0\u30e9\u30d5\u3092\u8fd4\u3059\u3002\u4f8b\u3048\u3070\u3001\u8fba\u3092\u30bd\u30fc\u30b9\u30ce\u30fc\u30c9\u306e\u6b21\u6570> 5\u306b\u4fdd\u3064\u3002 diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_ko.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_ko.properties new file mode 100644 index 0000000000..51c9458c39 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_ko.properties @@ -0,0 +1,13 @@ + + +NOTBuilderNode.description=\uB178\uB4DC \uD544\uD130\uC758 NOT \uC5F0\uC0B0\uC790 +UNIONBuilder.name=UNION +UNIONBuilder.description=\uD558\uC704 \uCFFC\uB9AC\uC5D0 \uB300\uD55C OR \uC5F0\uC0B0\uC790\uC785\uB2C8\uB2E4. \uD558\uC704 \uCFFC\uB9AC \uACB0\uACFC \uC5B4\uB514\uB4E0 \uC874\uC7AC\uD558\uB294 \uB178\uB4DC\uC640 \uC5E3\uC9C0\uB97C \uC720\uC9C0\uD569\uB2C8\uB2E4. +MASKBuilderEdge.name=MASK (\uC5E3\uC9C0) +INTERSECTIONBuilder.description=\uD558\uC704 \uCFFC\uB9AC\uC5D0 \uB300\uD55C AND \uC5F0\uC0B0\uC790\uC785\uB2C8\uB2E4. \uD558\uC704 \uCFFC\uB9AC \uACB0\uACFC \uBAA8\uB450\uC5D0 \uC874\uC7AC\uD558\uB294 \uB178\uB4DC\uC640 \uC5E3\uC9C0\uB97C \uC720\uC9C0\uD569\uB2C8\uB2E4. +MASKBuilderEdge.description=\uB178\uB4DC \uD544\uD130 \uD558\uC704 \uCFFC\uB9AC\uC5D0\uC11C \uB098\uC628 \uC5E3\uC9C0\uB9CC\uC744 \uAC16\uB294 \uC644\uC804 \uADF8\uB798\uD504\uB97C \uBC18\uD658\uD569\uB2C8\uB2E4. \uC608\uB97C \uB4E4\uC5B4 \uC18C\uC2A4 \uB178\uB4DC \uCC28\uC218\uAC00 5\uBCF4\uB2E4 \uD070 \uC5E3\uC9C0\uB97C \uC720\uC9C0\uD569\uB2C8\uB2E4. +NOTBuilderEdge.name=NOT (\uC5E3\uC9C0) +NOTBuilderNode.name=NOT (\uB178\uB4DC) +INTERSECTIONBuilder.name=INTERSECTION +Operator.category=\uC5F0\uC0B0\uC790 +NOTBuilderEdge.description=\uC5E3\uC9C0 \uD544\uD130\uC758 NOT \uC5F0\uC0B0\uC790 diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_nl.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_nl.properties new file mode 100644 index 0000000000..23775911b2 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_nl.properties @@ -0,0 +1,11 @@ +Operator.category=Operator +INTERSECTIONBuilder.name=INTERSECTION +INTERSECTIONBuilder.description=AND operator on sub-queries. Keep nodes and edges present in all sub-queries results. +UNIONBuilder.name=UNION +UNIONBuilder.description=OR operator on sub-queries. Keep nodes and edges present in any of sub-queries results. +NOTBuilderEdge.name=NOT (Edges) +NOTBuilderEdge.description=NOT operator on an edge filter +NOTBuilderNode.name=NOT (Nodes) +NOTBuilderNode.description=NOT operator on a node filter +MASKBuilderEdge.name=MASK (Edges) +MASKBuilderEdge.description=Return the complete graph with only edges from the node filter sub-query. For instance, keep edges with source node degree > 5. diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_pt_BR.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_pt_BR.properties index 6b59519aa6..325837bfe6 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_pt_BR.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_pt_BR.properties @@ -1,30 +1,16 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -# C\u00e9lio Faria Jr. , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-17 12\:34+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -Operator.category=Operador - -INTERSECTIONBuilder.name=INTERSECTION - -INTERSECTIONBuilder.description=Operador AND em sub-consultas. Mant\u00e9m n\u00f3s e arestas presentes em todos os resultados de sub-consultas. - -UNIONBuilder.name=UNION - -UNIONBuilder.description=Operador OR em sub-consultas. Mant\u00e9m n\u00f3s e arestas presentes nos resultados de qualquer uma das sub-consultas. - -NOTBuilderEdge.name=NOT (Arestas) - -NOTBuilderEdge.description=Operador NOT em um filtro de arestas - -NOTBuilderNode.name=NOT (N\u00f3s) - -NOTBuilderNode.description=Operador NOT em um filtro de n\u00f3s - -MASKBuilderEdge.name=MASK (Arestas) - -MASKBuilderEdge.description=Retorna o grafo completo contendo somente as arestas presentes no resultado da sub-consulta do filtro de n\u00f3s. Por exemplo, mant\u00e9m arestas com grau do n\u00f3 origem > 5. +Operator.category = Operador + +INTERSECTIONBuilder.name = INTERSECTION +INTERSECTIONBuilder.description = Operador AND em sub-consultas. Mantιm nσs e arestas presentes em todos os resultados de sub-consultas. + +UNIONBuilder.name = UNION +UNIONBuilder.description = Operador OR em sub-consultas. Mantιm nσs e arestas presentes nos resultados de qualquer uma das sub-consultas. + +NOTBuilderEdge.name = NOT (Arestas) +NOTBuilderEdge.description = Operador NOT em um filtro de arestas + +NOTBuilderNode.name = NOT (Nσs) +NOTBuilderNode.description = Operador NOT em um filtro de nσs + +MASKBuilderEdge.name = MASK (Arestas) +MASKBuilderEdge.description = Retorna o grafo completo contendo somente as arestas presentes no resultado da sub-consulta do filtro de nσs. Por exemplo, mantιm arestas com grau do nσ origem > 5. diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_ro.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_ro.properties new file mode 100644 index 0000000000..3af9abad03 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_ro.properties @@ -0,0 +1,13 @@ + + +Operator.category=Operator +INTERSECTIONBuilder.name=INTERSEC\u021AIE +INTERSECTIONBuilder.description=Operatorul \u0218I peste subinterog\u0103ri. P\u0103streaza nodurile \u0219i muchiile prezente \u00EEn toate rezultatele subinterog\u0103rilor. +UNIONBuilder.name=REUNIUNE +UNIONBuilder.description=Operatorul SAU peste subinterog\u0103ri. P\u0103streaza nodurile \u0219i muchiile prezente \u00EEn toate rezultatele subinterog\u0103rilor. +NOTBuilderEdge.name=NEGA\u021AIE (Muchii) +NOTBuilderNode.name=NEGA\u021AIE (Noduri) +NOTBuilderEdge.description=Operatorul NOT pe un filtru de muchii +NOTBuilderNode.description=Operatorul NOT pe un filtru de noduri +MASKBuilderEdge.name=MASC\u0102 (Muchii) +MASKBuilderEdge.description=Returneaz\u0103 graful, doar cu muchiile din sub-interogarea filtrului de noduri. De exemplu, p\u0103streaza muchiile cu gradul nodului surs\u0103 > 5. diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_ru.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_ru.properties index e6dc382e8b..fdd3a8ae4f 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_ru.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_ru.properties @@ -1,29 +1,16 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-15 08\:34+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -Operator.category=\u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b - -INTERSECTIONBuilder.name=AND - -INTERSECTIONBuilder.description=\u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 AND \u043a \u043f\u043e\u0434\u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c. \u041e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0437\u043b\u044b \u0438 \u0440\u0451\u0431\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u0445 \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0441\u0435\u0445 \u043f\u043e\u0434\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432. - -UNIONBuilder.name=OR - -UNIONBuilder.description=\u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 OR \u043a \u043f\u043e\u0434\u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c. \u041e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0437\u043b\u044b \u0438 \u0440\u0451\u0431\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u0445 \u0440\u0430\u0431\u043e\u0442\u044b \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043f\u043e\u0434\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432. - -NOTBuilderEdge.name=NOT(\u0440\u0451\u0431\u0440\u0430) - -NOTBuilderEdge.description=\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0440\u0451\u0431\u0435\u0440, \u041d\u0415 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0435\u0435 \u043f\u043e\u0434\u0444\u0438\u043b\u044c\u0442\u0440\u0443. - -NOTBuilderNode.name=NOT(\u0443\u0437\u043b\u044b) - -NOTBuilderNode.description=\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0443\u0437\u043b\u043e\u0432, \u041d\u0415 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0435\u0435 \u043f\u043e\u0434\u0444\u0438\u043b\u044c\u0442\u0440\u0443. - -MASKBuilderEdge.name=MASK(\u0440\u0451\u0431\u0440\u0430) - -MASKBuilderEdge.description=\u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0433\u0440\u0430\u0444 \u0441 \u043f\u043e\u043b\u043d\u044b\u043c \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0443\u0437\u043b\u043e\u0432, \u043d\u043e \u0441 \u0440\u0451\u0431\u0440\u0430\u043c\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0436\u0434\u0443 \u0443\u0437\u043b\u043e\u0432, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0445 \u043f\u043e\u0434\u0444\u0438\u043b\u044c\u0442\u0440\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0451\u0431\u0440\u0430, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0443\u0437\u0435\u043b-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0438\u043c\u0435\u0435\u0442 \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c > 5. +Operator.category = \u041e\u043f\u0435\u0440\u0430\u0442\u043e\u0440\u044b + +INTERSECTIONBuilder.name = AND +INTERSECTIONBuilder.description = \u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 AND \u043a \u043f\u043e\u0434\u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c. \u041e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0437\u043b\u044b \u0438 \u0440\u0451\u0431\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u0445 \u0440\u0430\u0431\u043e\u0442\u044b \u0432\u0441\u0435\u0445 \u043f\u043e\u0434\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432. + +UNIONBuilder.name = OR +UNIONBuilder.description = \u041f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 OR \u043a \u043f\u043e\u0434\u0444\u0438\u043b\u044c\u0442\u0440\u0430\u043c. \u041e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0437\u043b\u044b \u0438 \u0440\u0451\u0431\u0440\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0438\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0432 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430\u0445 \u0440\u0430\u0431\u043e\u0442\u044b \u0445\u043e\u0442\u044f \u0431\u044b \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043f\u043e\u0434\u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432. + +NOTBuilderEdge.name = NOT(\u0440\u0451\u0431\u0440\u0430) +NOTBuilderEdge.description = \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0440\u0451\u0431\u0435\u0440, \u041d\u0415 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0435\u0435 \u043f\u043e\u0434\u0444\u0438\u043b\u044c\u0442\u0440\u0443. + +NOTBuilderNode.name = NOT(\u0443\u0437\u043b\u044b) +NOTBuilderNode.description = \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e \u0443\u0437\u043b\u043e\u0432, \u041d\u0415 \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0435\u0435 \u043f\u043e\u0434\u0444\u0438\u043b\u044c\u0442\u0440\u0443. + +MASKBuilderEdge.name = MASK(\u0440\u0451\u0431\u0440\u0430) +MASKBuilderEdge.description = \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0433\u0440\u0430\u0444 \u0441 \u043f\u043e\u043b\u043d\u044b\u043c \u0441\u043f\u0438\u0441\u043a\u043e\u043c \u0443\u0437\u043b\u043e\u0432, \u043d\u043e \u0441 \u0440\u0451\u0431\u0440\u0430\u043c\u0438, \u0442\u043e\u043b\u044c\u043a\u043e \u043c\u0435\u0436\u0434\u0443 \u0443\u0437\u043b\u043e\u0432, \u0443\u0434\u043e\u0432\u043b\u0435\u0442\u0432\u043e\u0440\u044f\u044e\u0449\u0438\u0445 \u043f\u043e\u0434\u0444\u0438\u043b\u044c\u0442\u0440\u0443. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0451\u0431\u0440\u0430, \u0443 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0443\u0437\u0435\u043b-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0438\u043c\u0435\u0435\u0442 \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c > 5. diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_th.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_tr.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_tr.properties new file mode 100644 index 0000000000..23775911b2 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_tr.properties @@ -0,0 +1,11 @@ +Operator.category=Operator +INTERSECTIONBuilder.name=INTERSECTION +INTERSECTIONBuilder.description=AND operator on sub-queries. Keep nodes and edges present in all sub-queries results. +UNIONBuilder.name=UNION +UNIONBuilder.description=OR operator on sub-queries. Keep nodes and edges present in any of sub-queries results. +NOTBuilderEdge.name=NOT (Edges) +NOTBuilderEdge.description=NOT operator on an edge filter +NOTBuilderNode.name=NOT (Nodes) +NOTBuilderNode.description=NOT operator on a node filter +MASKBuilderEdge.name=MASK (Edges) +MASKBuilderEdge.description=Return the complete graph with only edges from the node filter sub-query. For instance, keep edges with source node degree > 5. diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_uk.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_uk.properties new file mode 100644 index 0000000000..c8af403b21 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_uk.properties @@ -0,0 +1,11 @@ +Operator.category=\u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 +NOTBuilderEdge.name=\u041D\u0415 (\u043A\u0440\u0430\u0457) +NOTBuilderNode.description=\u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 NOT \u0443 \u0444\u0456\u043B\u044C\u0442\u0440\u0456 \u0432\u0443\u0437\u043B\u0456\u0432 +UNIONBuilder.description=\u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 \u0410\u0411\u041E \u0434\u043B\u044F \u043F\u0456\u0434\u0437\u0430\u043F\u0438\u0442\u0456\u0432. \u0417\u0431\u0435\u0440\u0456\u0433\u0430\u0439\u0442\u0435 \u043F\u0440\u0438\u0441\u0443\u0442\u043D\u0456\u0441\u0442\u044C \u0432\u0443\u0437\u043B\u0456\u0432 \u0456 \u0440\u0435\u0431\u0435\u0440 \u0443 \u0431\u0443\u0434\u044C-\u044F\u043A\u0438\u0445 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0430\u0445 \u043F\u0456\u0434\u0437\u0430\u043F\u0438\u0442\u0456\u0432. +INTERSECTIONBuilder.name=\u041F\u0415\u0420\u0415\u0425\u0420\u0415\u0421\u0422\u042F +NOTBuilderEdge.description=\u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 NOT \u043D\u0430 \u0433\u0440\u0430\u043D\u0438\u0447\u043D\u043E\u043C\u0443 \u0444\u0456\u043B\u044C\u0442\u0440\u0456 +MASKBuilderEdge.name=\u041C\u0410\u0421\u041A\u0410 (\u043A\u0440\u0430\u0457) +NOTBuilderNode.name=\u041D\u0415 (\u0432\u0443\u0437\u043B\u0438) +MASKBuilderEdge.description=\u041F\u043E\u0432\u0435\u0440\u0442\u0430\u0454 \u043F\u043E\u0432\u043D\u0438\u0439 \u0433\u0440\u0430\u0444 \u043B\u0438\u0448\u0435 \u0437 \u0440\u0435\u0431\u0440\u0430\u043C\u0438 \u0437 \u043F\u0456\u0434\u0437\u0430\u043F\u0438\u0442\u0443 \u0444\u0456\u043B\u044C\u0442\u0440\u0430 \u0432\u0443\u0437\u043B\u0456\u0432. \u041D\u0430\u043F\u0440\u0438\u043A\u043B\u0430\u0434, \u0437\u0431\u0435\u0440\u0456\u0433\u0430\u0439\u0442\u0435 \u0440\u0435\u0431\u0440\u0430 \u0437\u0456 \u0441\u0442\u0443\u043F\u0435\u043D\u0435\u043C \u043F\u043E\u0447\u0430\u0442\u043A\u043E\u0432\u043E\u0433\u043E \u0432\u0443\u0437\u043B\u0430 > 5. +INTERSECTIONBuilder.description=\u041E\u043F\u0435\u0440\u0430\u0442\u043E\u0440 AND \u0434\u043B\u044F \u043F\u0456\u0434\u0437\u0430\u043F\u0438\u0442\u0456\u0432. \u0417\u0431\u0435\u0440\u0456\u0433\u0430\u0439\u0442\u0435 \u043F\u0440\u0438\u0441\u0443\u0442\u043D\u0456\u0441\u0442\u044C \u0432\u0443\u0437\u043B\u0456\u0432 \u0456 \u0440\u0435\u0431\u0435\u0440 \u0443 \u0432\u0441\u0456\u0445 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442\u0430\u0445 \u043F\u0456\u0434\u0437\u0430\u043F\u0438\u0442\u0456\u0432. +UNIONBuilder.name=\u0421\u041E\u042E\u0417 diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_zh_CN.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_zh_CN.properties index c814d9f022..53fd46f2de 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_zh_CN.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_zh_CN.properties @@ -1,28 +1,16 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-10 08\:49+0000\nLast-Translator\: ooof ooof \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -Operator.category=\u64cd\u4f5c.\u5206\u7c7b - -INTERSECTIONBuilder.name=\u4ea4\u96c6 - -INTERSECTIONBuilder.description=\u2019\u548c\u2018\u64cd\u4f5c\u7b26\u5b50\u67e5\u8be2\u3002\u4fdd\u7559\u6240\u6709\u5b50\u67e5\u8be2\u7ed3\u679c\u4e2d\u7684\u8282\u70b9\u548c\u8fb9\u3002 - -UNIONBuilder.name=\u5e76\u96c6 - -UNIONBuilder.description=\u2019\u6216\u2018\u8fd0\u7b97\u7b26\u5b50\u67e5\u8be2\u3002\u4fdd\u7559\u4efb\u4f55\u5b50\u67e5\u8be2\u7ed3\u679c\u7684\u8282\u70b9\u548c\u8fb9\u3002 - -NOTBuilderEdge.name=\u4e0d\uff08\u8fb9\uff09 - -NOTBuilderEdge.description=\u8fb9\u8fc7\u6ee4\u7684\u2019\u4e0d\u2018\u64cd\u4f5c\u7b26 - -NOTBuilderNode.name=\u4e0d\uff08\u8282\u70b9\uff09 - -NOTBuilderNode.description=\u8282\u70b9\u8fc7\u6ee4\u7684\u2019\u4e0d\u2018\u64cd\u4f5c\u7b26 - -MASKBuilderEdge.name=mask\uff08\u8fb9\uff09 - -MASKBuilderEdge.description=\u8fd4\u56de\u4ece\u8282\u70b9\u8fc7\u6ee4\u5b50\u67e5\u8be2\u7684\u8fb9\u7684\u5b8c\u6574\u56fe\u5f62\u3002\u4f8b\u5982\uff0c\u4fdd\u7559\u6e90\u8282\u70b9\u5ea6\u5927\u4e8e 5\u7684\u8fb9\u3002 +Operator.category = \u64cd\u4f5c.\u5206\u7c7b + +INTERSECTIONBuilder.name = \u4ea4\u96c6 +INTERSECTIONBuilder.description = \u2019\u548c\u2018\u64cd\u4f5c\u7b26\u5b50\u67e5\u8be2\u3002\u4fdd\u7559\u6240\u6709\u5b50\u67e5\u8be2\u7ed3\u679c\u4e2d\u7684\u8282\u70b9\u548c\u8fb9\u3002 + +UNIONBuilder.name = \u5e76\u96c6 +UNIONBuilder.description = \u2019\u6216\u2018\u8fd0\u7b97\u7b26\u5b50\u67e5\u8be2\u3002\u4fdd\u7559\u4efb\u4f55\u5b50\u67e5\u8be2\u7ed3\u679c\u7684\u8282\u70b9\u548c\u8fb9\u3002 + +NOTBuilderEdge.name = \u4e0d\uff08\u8fb9\uff09 +NOTBuilderEdge.description = \u8fb9\u8fc7\u6ee4\u7684\u2019\u4e0d\u2018\u64cd\u4f5c\u7b26 + +NOTBuilderNode.name = \u4e0d\uff08\u8282\u70b9\uff09 +NOTBuilderNode.description = \u8282\u70b9\u8fc7\u6ee4\u7684\u2019\u4e0d\u2018\u64cd\u4f5c\u7b26 + +MASKBuilderEdge.name = mask\uff08\u8fb9\uff09 +MASKBuilderEdge.description = \u8fd4\u56de\u4ece\u8282\u70b9\u8fc7\u6ee4\u5b50\u67e5\u8be2\u7684\u8fb9\u7684\u5b8c\u6574\u56fe\u5f62\u3002\u4f8b\u5982\uff0c\u4fdd\u7559\u6e90\u8282\u70b9\u5ea6\u5927\u4e8e 5\u7684\u8fb9\u3002 diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_zh_TW.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_zh_TW.properties new file mode 100644 index 0000000000..23775911b2 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/Bundle_zh_TW.properties @@ -0,0 +1,11 @@ +Operator.category=Operator +INTERSECTIONBuilder.name=INTERSECTION +INTERSECTIONBuilder.description=AND operator on sub-queries. Keep nodes and edges present in all sub-queries results. +UNIONBuilder.name=UNION +UNIONBuilder.description=OR operator on sub-queries. Keep nodes and edges present in any of sub-queries results. +NOTBuilderEdge.name=NOT (Edges) +NOTBuilderEdge.description=NOT operator on an edge filter +NOTBuilderNode.name=NOT (Nodes) +NOTBuilderNode.description=NOT operator on a node filter +MASKBuilderEdge.name=MASK (Edges) +MASKBuilderEdge.description=Return the complete graph with only edges from the node filter sub-query. For instance, keep edges with source node degree > 5. diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/cs.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/cs.po deleted file mode 100644 index 5633b1f848..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/cs.po +++ /dev/null @@ -1,52 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-21 16:42+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "Operator.category" -msgstr "OperΓ‘tor" - -msgid "INTERSECTIONBuilder.name" -msgstr "INTERSECTION" - -msgid "INTERSECTIONBuilder.description" -msgstr "OperΓ‘tor AND na poddotazy. PonechΓ‘ uzly a hrany pΕ™Γ­tomny ve vΕ‘ech vΓ½sledcΓ­ch poddotazΕ―." - -msgid "UNIONBuilder.name" -msgstr "UNION" - -msgid "UNIONBuilder.description" -msgstr "OperΓ‘tor OR na poddotazy. PonechΓ‘ uzly a hrany pΕ™Γ­tomny v kaΕΎdΓ©m vΓ½sledku poddotazΕ―." - -msgid "NOTBuilderEdge.name" -msgstr "NOT (Hrany)" - -msgid "NOTBuilderEdge.description" -msgstr "OperΓ‘tor NOT ve filtru hrany" - -msgid "NOTBuilderNode.name" -msgstr "NOT (Uzly)" - -msgid "NOTBuilderNode.description" -msgstr "OperΓ‘tor NOT ve filtru uzlu" - -msgid "MASKBuilderEdge.name" -msgstr "MASK (Hrany)" - -msgid "MASKBuilderEdge.description" -msgstr "VrΓ‘to dokončenΓ½ graf pouze s hranami z poddotazu filtru uzlu. NapΕ™Γ­klad ponechΓ‘ hrany se stupnΔ›m zdrojovΓ©ho uzle > 5." diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/es.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/es.po deleted file mode 100644 index af1cb8be46..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/es.po +++ /dev/null @@ -1,53 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-16 22:54+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "Operator.category" -msgstr "Operador" - -msgid "INTERSECTIONBuilder.name" -msgstr "INTERSECCIΓ“N" - -msgid "INTERSECTIONBuilder.description" -msgstr "Operador AND en sub-consultas. Mantener nodos y aristas presentes en los resultados de todas las sub-consultas." - -msgid "UNIONBuilder.name" -msgstr "UNIΓ“N" - -msgid "UNIONBuilder.description" -msgstr "Operador OR en sub-consultas. Mantener nodos y aristas presentes en los resultados de alguna de las sub-consultas." - -msgid "NOTBuilderEdge.name" -msgstr "NOT (aristas)" - -msgid "NOTBuilderEdge.description" -msgstr "Operador NOT en un filtro de aristas" - -msgid "NOTBuilderNode.name" -msgstr "NOT (nodos)" - -msgid "NOTBuilderNode.description" -msgstr "Operador NOT en un filtro de nodos" - -msgid "MASKBuilderEdge.name" -msgstr "MÁSCARA" - -msgid "MASKBuilderEdge.description" -msgstr "Devolver el grafo completo con aristas sΓ³lamente presentes en el resultado de la sub-consulta del filtro de nodos. Por ejemplo, mantener aristas con un grado del nodo origen > 5." diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/fr.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/fr.po deleted file mode 100644 index 0e59e92610..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/fr.po +++ /dev/null @@ -1,53 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-08 15:16+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "Operator.category" -msgstr "OpΓ©rateur" - -msgid "INTERSECTIONBuilder.name" -msgstr "INTERSECTION" - -msgid "INTERSECTIONBuilder.description" -msgstr "OpΓ©rateur ET sur les sous-requΓͺtes. Garde les noeuds et liens prΓ©sents dans les rΓ©sultats de toutes les sous-requΓͺtes." - -msgid "UNIONBuilder.name" -msgstr "UNION" - -msgid "UNIONBuilder.description" -msgstr "OpΓ©rateur OU sur les sous-requΓͺtes. Garde les noeuds et liens prΓ©sents dans les rΓ©sultats d'au moins une sous-requΓͺte." - -msgid "NOTBuilderEdge.name" -msgstr "NON (Liens)" - -msgid "NOTBuilderEdge.description" -msgstr "OpΓ©rateur NON sur un filtre de liens." - -msgid "NOTBuilderNode.name" -msgstr "NON (Noeuds)" - -msgid "NOTBuilderNode.description" -msgstr "OpΓ©rateur NON sur un filtre de noeuds." - -msgid "MASKBuilderEdge.name" -msgstr "MASQUE (Liens)" - -msgid "MASKBuilderEdge.description" -msgstr "Retourne le graphe partiel dont les liens connectent des nΕ“uds appartenant au rΓ©sultat de la sous-requΓͺte. Par exemple, garde les liens dont le degrΓ© du nΕ“ud source est > 5." diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/ja.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/ja.po deleted file mode 100644 index cf1b1eb739..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/ja.po +++ /dev/null @@ -1,52 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-15 08:08+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "Operator.category" -msgstr "γ‚ͺγƒšγƒ¬γƒΌγ‚Ώ" - -msgid "INTERSECTIONBuilder.name" -msgstr "η©ι›†εˆ" - -msgid "INTERSECTIONBuilder.description" -msgstr "ァブクエγƒͺγANDζΌ”η—子。すべてγγ‚΅γƒ–γ‚―エγƒͺγη΅ζžœγ«ε­˜εœ¨γ™γ‚‹γƒŽγƒΌγƒ‰γ¨θΎΊγ‚’δΏζŒγ€‚" - -msgid "UNIONBuilder.name" -msgstr "ε’Œι›†εˆ" - -msgid "UNIONBuilder.description" -msgstr "ァブクエγƒͺでORζΌ”η—子。ァブクエγƒͺγη΅ζžœγγ„γšγ‚Œγ«γ‚‚ε­˜εœ¨γƒŽγƒΌγƒ‰γ¨θΎΊγ‚’δΏζŒγ€‚" - -msgid "NOTBuilderEdge.name" -msgstr "NOTζΌ”η—子(θΎΊ)" - -msgid "NOTBuilderEdge.description" -msgstr "θΎΊγƒ•γ‚£γƒ«γ‚ΏδΈŠγNOTζΌ”η—子" - -msgid "NOTBuilderNode.name" -msgstr "NOTζΌ”η—子(γƒŽγƒΌγƒ‰)" - -msgid "NOTBuilderNode.description" -msgstr "γƒŽγƒΌγƒ‰γƒ•γ‚£γƒ«γ‚ΏδΈŠγNOTζΌ”η—子" - -msgid "MASKBuilderEdge.name" -msgstr "γƒžγ‚Ήγ‚―(θΎΊ)" - -msgid "MASKBuilderEdge.description" -msgstr "γƒŽγƒΌγƒ‰γƒ•γ‚£γƒ«γ‚ΏγƒΌγγ‚΅γƒ–γ‚―エγƒͺから辺γγΏγ‚’ζŒγ€εŒε…¨γ‚°γƒ©γƒ•γ‚’θΏ”γ™γ€‚δΎ‹γˆγ°γ€θΎΊγ‚’γ‚½γƒΌγ‚ΉγƒŽγƒΌγƒ‰γζ¬‘ζ•°> 5に保぀。" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/org-gephi-filters-plugin-operator.pot b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/org-gephi-filters-plugin-operator.pot deleted file mode 100644 index fc22298dd0..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/org-gephi-filters-plugin-operator.pot +++ /dev/null @@ -1,55 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "Operator.category" -msgstr "Operator" - -msgid "INTERSECTIONBuilder.name" -msgstr "INTERSECTION" - -msgid "INTERSECTIONBuilder.description" -msgstr "" -"AND operator on sub-queries. Keep nodes and edges present in all sub-queries " -"results." - -msgid "UNIONBuilder.name" -msgstr "UNION" - -msgid "UNIONBuilder.description" -msgstr "" -"OR operator on sub-queries. Keep nodes and edges present in any of sub-" -"queries results." - -msgid "NOTBuilderEdge.name" -msgstr "NOT (Edges)" - -msgid "NOTBuilderEdge.description" -msgstr "NOT operator on an edge filter" - -msgid "NOTBuilderNode.name" -msgstr "NOT (Nodes)" - -msgid "NOTBuilderNode.description" -msgstr "NOT operator on a node filter" - -msgid "MASKBuilderEdge.name" -msgstr "MASK (Edges)" - -msgid "MASKBuilderEdge.description" -msgstr "" -"Return the complete graph with only edges from the node filter sub-query. " -"For instance, keep edges with source node degree > 5." diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/pt_BR.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/pt_BR.po deleted file mode 100644 index 7ad0845624..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/pt_BR.po +++ /dev/null @@ -1,53 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -# CΓ©lio Faria Jr. , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-17 12:34+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "Operator.category" -msgstr "Operador" - -msgid "INTERSECTIONBuilder.name" -msgstr "INTERSECTION" - -msgid "INTERSECTIONBuilder.description" -msgstr "Operador AND em sub-consultas. MantΓ©m nΓ³s e arestas presentes em todos os resultados de sub-consultas." - -msgid "UNIONBuilder.name" -msgstr "UNION" - -msgid "UNIONBuilder.description" -msgstr "Operador OR em sub-consultas. MantΓ©m nΓ³s e arestas presentes nos resultados de qualquer uma das sub-consultas." - -msgid "NOTBuilderEdge.name" -msgstr "NOT (Arestas)" - -msgid "NOTBuilderEdge.description" -msgstr "Operador NOT em um filtro de arestas" - -msgid "NOTBuilderNode.name" -msgstr "NOT (NΓ³s)" - -msgid "NOTBuilderNode.description" -msgstr "Operador NOT em um filtro de nΓ³s" - -msgid "MASKBuilderEdge.name" -msgstr "MASK (Arestas)" - -msgid "MASKBuilderEdge.description" -msgstr "Retorna o grafo completo contendo somente as arestas presentes no resultado da sub-consulta do filtro de nΓ³s. Por exemplo, mantΓ©m arestas com grau do nΓ³ origem > 5." diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/ru.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/ru.po deleted file mode 100644 index 53e37250df..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/ru.po +++ /dev/null @@ -1,52 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-15 08:34+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "Operator.category" -msgstr "ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹" - -msgid "INTERSECTIONBuilder.name" -msgstr "AND" - -msgid "INTERSECTIONBuilder.description" -msgstr "ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ AND ΠΊ ΠΏΠΎΠ΄Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°ΠΌ. ΠžΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ ΡƒΠ·Π»Ρ‹ ΠΈ Ρ€Ρ‘Π±Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Ρ… Ρ€Π°Π±ΠΎΡ‚Ρ‹ всСх ΠΏΠΎΠ΄Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²." - -msgid "UNIONBuilder.name" -msgstr "OR" - -msgid "UNIONBuilder.description" -msgstr "ΠŸΡ€ΠΈΠΌΠ΅Π½ΡΠ΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ OR ΠΊ ΠΏΠΎΠ΄Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°ΠΌ. ΠžΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ ΡƒΠ·Π»Ρ‹ ΠΈ Ρ€Ρ‘Π±Ρ€Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ Π² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π°Ρ… Ρ€Π°Π±ΠΎΡ‚Ρ‹ хотя Π±Ρ‹ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· ΠΏΠΎΠ΄Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²." - -msgid "NOTBuilderEdge.name" -msgstr "NOT(Ρ€Ρ‘Π±Ρ€Π°)" - -msgid "NOTBuilderEdge.description" -msgstr "Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ мноТСство Ρ€Ρ‘Π±Π΅Ρ€, НЕ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ΄Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρƒ." - -msgid "NOTBuilderNode.name" -msgstr "NOT(ΡƒΠ·Π»Ρ‹)" - -msgid "NOTBuilderNode.description" -msgstr "Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ мноТСство ΡƒΠ·Π»ΠΎΠ², НЕ ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰Π΅Π΅ ΠΏΠΎΠ΄Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρƒ." - -msgid "MASKBuilderEdge.name" -msgstr "MASK(Ρ€Ρ‘Π±Ρ€Π°)" - -msgid "MASKBuilderEdge.description" -msgstr "Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π³Ρ€Π°Ρ„ с ΠΏΠΎΠ»Π½Ρ‹ΠΌ списком ΡƒΠ·Π»ΠΎΠ², Π½ΠΎ с Ρ€Ρ‘Π±Ρ€Π°ΠΌΠΈ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ ΡƒΠ·Π»ΠΎΠ², ΡƒΠ΄ΠΎΠ²Π»Π΅Ρ‚Π²ΠΎΡ€ΡΡŽΡ‰ΠΈΡ… ΠΏΠΎΠ΄Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Ρƒ. НапримСр, позволяСт ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Ρ‘Π±Ρ€Π°, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΡƒΠ·Π΅Π»-источник ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ > 5." diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/zh_CN.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/zh_CN.po deleted file mode 100644 index 18702c8a2c..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/operator/zh_CN.po +++ /dev/null @@ -1,51 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-10 08:49+0000\n" -"Last-Translator: ooof ooof \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "Operator.category" -msgstr "ζ“δ½œ.εˆ†η±»" - -msgid "INTERSECTIONBuilder.name" -msgstr "亀集" - -msgid "INTERSECTIONBuilder.description" -msgstr "β€™ε’Œβ€˜ζ“δ½œη¬¦ε­ζŸ₯θ―’γ€‚δΏη•™ζ‰€ζœ‰ε­ζŸ₯θ―’η»“ζžœδΈ­ηš„θŠ‚η‚Ήε’ŒθΎΉγ€‚" - -msgid "UNIONBuilder.name" -msgstr "幢集" - -msgid "UNIONBuilder.description" -msgstr "β€™ζˆ–β€˜θΏη—符子ζŸ₯诒。保留任何子ζŸ₯θ―’η»“ζžœηš„θŠ‚η‚Ήε’ŒθΎΉγ€‚" - -msgid "NOTBuilderEdge.name" -msgstr "δΈοΌˆθΎΉοΌ‰" - -msgid "NOTBuilderEdge.description" -msgstr "θΎΉθΏ‡ζ»€ηš„β€™δΈβ€˜ζ“δ½œη¬¦" - -msgid "NOTBuilderNode.name" -msgstr "δΈοΌˆθŠ‚η‚ΉοΌ‰" - -msgid "NOTBuilderNode.description" -msgstr "θŠ‚η‚ΉθΏ‡ζ»€ηš„β€™δΈβ€˜ζ“δ½œη¬¦" - -msgid "MASKBuilderEdge.name" -msgstr "maskοΌˆθΎΉοΌ‰" - -msgid "MASKBuilderEdge.description" -msgstr "θΏ”ε›žδ»ŽθŠ‚η‚ΉθΏ‡ζ»€ε­ζŸ₯θ―’ηš„θΎΉηš„εŒζ•΄ε›Ύε½’γ€‚δΎ‹ε¦‚οΌŒδΏη•™ζΊθŠ‚η‚ΉεΊ¦ε€§δΊŽ 5ηš„θΎΉγ€‚" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/org-gephi-filters-plugin.pot b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/org-gephi-filters-plugin.pot deleted file mode 100644 index 50ba3663c1..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/org-gephi-filters-plugin.pot +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Filters implementations, define new filters" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Filters implementations" - -msgid "AbstractAttributeFilterBuilder.Node" -msgstr "Node" - -msgid "AbstractAttributeFilterBuilder.Edge" -msgstr "Edge" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle.properties index 1c792b2064..317678a484 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle.properties @@ -8,4 +8,7 @@ IntraEdgesBuilder.name = Intra Edges IntraEdgesBuilder.description = Keep only edges between elements from different parts InterEdgesBuilder.name = Inter Edges -InterEdgesBuilder.description = Keep only edges between elements from the same part \ No newline at end of file +InterEdgesBuilder.description = Keep only edges between elements from the same part + +PartitionFilterBuilder.name.node = Node +PartitionFilterBuilder.name.edge = Edge \ No newline at end of file diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_ar.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_ca.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_ca.properties new file mode 100644 index 0000000000..fae5aab4b9 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_ca.properties @@ -0,0 +1,10 @@ +PartitionBuilder.name=Particiσ +PartitionBuilder.description=Keep nodes/edges that belongs to a set of values from a partition +PartitionCountBuilder.name=Recompte de particions +PartitionCountBuilder.description=Keep nodes/edges that belongs to parts with a particular number of elements +IntraEdgesBuilder.name=Intra Edges +IntraEdgesBuilder.description=Keep only edges between elements from different parts +InterEdgesBuilder.name=Inter Edges +InterEdgesBuilder.description=Keep only edges between elements from the same part +PartitionFilterBuilder.name.node=Node +PartitionFilterBuilder.name.edge=Aresta diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_cs.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_cs.properties index 3e791641a2..c74ae03b6d 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_cs.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_cs.properties @@ -1,23 +1,14 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-21 16\:04+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -PartitionBuilder.name=Odd\u00edl - -PartitionBuilder.description=Ponechat uzly/hrany, kter\u00e9 pat\u0159\u00ed ur\u010dit\u00fdm sad\u00e1m hodnot, mimo odd\u00edl - -PartitionCountBuilder.name=Po\u010det odd\u00edl\u016f - -PartitionCountBuilder.description=Ponechat uzly/hrany, kter\u00e9 pat\u0159\u00ed do \u010d\u00e1st\u00ed s ur\u010dit\u00fdm po\u010dtem prvk\u016f - -IntraEdgesBuilder.name=Hrany uvnit\u0159 - -IntraEdgesBuilder.description=Ponechat pouze hrany mezi prvky z r\u016fzn\u00fdch \u010d\u00e1st\u00ed - -InterEdgesBuilder.name=Hrany mimo - -InterEdgesBuilder.description=Ponechat pouze hrany mezi prvky ze stejn\u00fdch \u010d\u00e1st\u00ed +PartitionBuilder.name = Oddνl +PartitionBuilder.description = Ponechat uzly/hrany, kterι pat\u0159ν ur\u010ditύm sadαm hodnot, mimo oddνl + +PartitionCountBuilder.name = Po\u010det oddνl\u016f +PartitionCountBuilder.description = Ponechat uzly/hrany, kterι pat\u0159ν do \u010dαstν s ur\u010ditύm po\u010dtem prvk\u016f + +IntraEdgesBuilder.name = Hrany uvnit\u0159 +IntraEdgesBuilder.description = Ponechat pouze hrany mezi prvky z r\u016fznύch \u010dαstν + +InterEdgesBuilder.name = Hrany mimo +InterEdgesBuilder.description = Ponechat pouze hrany mezi prvky ze stejnύch \u010dαstν + +PartitionFilterBuilder.name.node = Uzel +PartitionFilterBuilder.name.edge = Hrana diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_de.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_de.properties new file mode 100644 index 0000000000..58860664f6 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_de.properties @@ -0,0 +1,14 @@ +PartitionBuilder.name = Partition +PartitionBuilder.description = Erhalte Knoten/Kanten die zu einer Menge von Werten einer Partition gehφren + +PartitionCountBuilder.name = Anzahl Partitionen +PartitionCountBuilder.description = Erhalte Knoten/Kanten die zu Partitionen mit bestimmter Anzahl an Elementen gehφren + +IntraEdgesBuilder.name = Innere Kanten +IntraEdgesBuilder.description = Erhalte nur Kanten zwischen Elementen unterschiedlicher Partitionen + +InterEdgesBuilder.name = Inter-Kanten +InterEdgesBuilder.description = Erhalte nur Kanten zwischen Elementen der gleichen Partition + +PartitionFilterBuilder.name.node = Knoten +PartitionFilterBuilder.name.edge = Kante diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_es.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_es.properties index e5eb537a02..ae66c8fd29 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_es.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_es.properties @@ -1,24 +1,14 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 21\:45+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -PartitionBuilder.name=Partici\u00f3n - -PartitionBuilder.description=Mantener los nodos/aristas que pertenezcan a un conjunto de valores de una partici\u00f3n - -PartitionCountBuilder.name=Tama\u00f1o de partici\u00f3n - -PartitionCountBuilder.description=Mantener nodos/aristas que pertenecen a particiones con un n\u00famero particular de elementos - -IntraEdgesBuilder.name=Intra aristas - -IntraEdgesBuilder.description=Mantener s\u00f3lamente aristas entre elementos de partes diferentes - -InterEdgesBuilder.name=Inter aristas - -InterEdgesBuilder.description=Manter s\u00f3lamente aristas entre elementos de la misma parte +PartitionBuilder.name = Particiσn +PartitionBuilder.description = Mantener los nodos/aristas que pertenezcan a un conjunto de valores de una particiσn + +PartitionCountBuilder.name = Tamaρo de particiσn +PartitionCountBuilder.description = Mantener nodos/aristas que pertenecen a particiones con un nϊmero particular de elementos + +IntraEdgesBuilder.name = Intra aristas +IntraEdgesBuilder.description = Mantener sσlamente aristas entre elementos de partes diferentes + +InterEdgesBuilder.name = Inter aristas +InterEdgesBuilder.description = Manter sσlamente aristas entre elementos de la misma parte + +PartitionFilterBuilder.name.node = Nodo +PartitionFilterBuilder.name.edge = Arista diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_fr.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_fr.properties index 692d742843..ff32882b30 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_fr.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_fr.properties @@ -1,24 +1,14 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 11\:37+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -PartitionBuilder.name=Partition - -PartitionBuilder.description=Garde les noeuds/liens appartenant \u00e0 un ensemble de valeurs d'une partition. - -PartitionCountBuilder.name=Nombre de partitions - -PartitionCountBuilder.description=Garde les noeuds/liens appartenant aux partitions d'un nombre d'\u00e9l\u00e9ment donn\u00e9. - -IntraEdgesBuilder.name=Liens internes - -IntraEdgesBuilder.description=Garde uniquement les liens entre \u00e9l\u00e9ments de partitions diff\u00e9rentes - -InterEdgesBuilder.name=Liens externes - -InterEdgesBuilder.description=Garde uniquement les liens entre \u00e9l\u00e9ments d'une m\u00eame partition +PartitionBuilder.name = Partition +PartitionBuilder.description = Garde les noeuds/liens appartenant ΰ un ensemble de valeurs d'une partition. + +PartitionCountBuilder.name = Nombre de partitions +PartitionCountBuilder.description = Garde les noeuds/liens appartenant aux partitions d'un nombre d'ιlιment donnι. + +IntraEdgesBuilder.name = Liens internes +IntraEdgesBuilder.description = Garde uniquement les liens entre ιlιments de partitions diffιrentes + +InterEdgesBuilder.name = Liens externes +InterEdgesBuilder.description = Garde uniquement les liens entre ιlιments d'une mκme partition + +PartitionFilterBuilder.name.node = Noeud +PartitionFilterBuilder.name.edge = Lien diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_he.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_he.properties new file mode 100644 index 0000000000..405d806c74 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_he.properties @@ -0,0 +1,10 @@ +PartitionBuilder.name=\u05D7\u05DC\u05D5\u05E7\u05D4 +PartitionBuilder.description=\u05E9\u05DE\u05D5\u05E8 \u05E6\u05DE\u05EA\u05D9\u05DD/\u05E7\u05D9\u05E9\u05D5\u05E8\u05D9\u05DD \u05D4\u05E9\u05D9\u05D9\u05DB\u05D9\u05DD \u05DC\u05E1\u05D8 \u05E9\u05DC \u05E2\u05E8\u05DB\u05D9\u05DD \u05DE\u05D4\u05D7\u05DC\u05D5\u05E7\u05D4 +PartitionCountBuilder.name=\u05E1\u05E4\u05D9\u05E8\u05EA \u05D4\u05D7\u05DC\u05D5\u05E7\u05D4 +PartitionCountBuilder.description=Keep nodes/edges that belongs to parts with a particular number of elements +IntraEdgesBuilder.name=Intra Edges +IntraEdgesBuilder.description=Keep only edges between elements from different parts +InterEdgesBuilder.name=Inter Edges +InterEdgesBuilder.description=Keep only edges between elements from the same part +PartitionFilterBuilder.name.node=Node +PartitionFilterBuilder.name.edge=Edge diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_hu.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_hu.properties new file mode 100644 index 0000000000..4e1226d492 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_hu.properties @@ -0,0 +1,12 @@ + + +PartitionFilterBuilder.name.edge=\u00C9l +InterEdgesBuilder.name=Inter \u00C9l +PartitionCountBuilder.description=Tartsa meg a csom\u00F3pontokat/\u00E9leket, amelyek bizonyos sz\u00E1m\u00FA elemet tartalmaz\u00F3 r\u00E9szekhez tartoznak +InterEdgesBuilder.description=Csak az \u00E9leket tartsa meg az ugyanabb\u00F3l a r\u00E9szb\u0151l sz\u00E1rmaz\u00F3 elemek k\u00F6z\u00F6tt +IntraEdgesBuilder.description=Csak az \u00E9leket tartsa meg a k\u00FCl\u00F6nb\u00F6z\u0151 r\u00E9szekb\u0151l sz\u00E1rmaz\u00F3 elemek k\u00F6z\u00F6tt +PartitionFilterBuilder.name.node=Csom\u00F3pont +PartitionCountBuilder.name=Part\u00EDci\u00F3k sz\u00E1ma +IntraEdgesBuilder.name=Intra \u00E9lek +PartitionBuilder.name=Part\u00EDci\u00F3 +PartitionBuilder.description=Tartsa meg a part\u00EDci\u00F3 \u00E9rt\u00E9kk\u00E9szlet\u00E9hez tartoz\u00F3 csom\u00F3pontokat/\u00E9leket diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_it.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_it.properties new file mode 100644 index 0000000000..5ce874a13d --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_it.properties @@ -0,0 +1,10 @@ +PartitionBuilder.name=Partizione +PartitionBuilder.description=Keep nodes/edges that belongs to a set of values from a partition +PartitionCountBuilder.name=Partition Count +PartitionCountBuilder.description=Keep nodes/edges that belongs to parts with a particular number of elements +IntraEdgesBuilder.name=Intra Edges +IntraEdgesBuilder.description=Keep only edges between elements from different parts +InterEdgesBuilder.name=Inter Edges +InterEdgesBuilder.description=Keep only edges between elements from the same part +PartitionFilterBuilder.name.node=Node +PartitionFilterBuilder.name.edge=Edge diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_ja.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_ja.properties index 8e089046ea..7cde15d779 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_ja.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_ja.properties @@ -1,23 +1,14 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-23 09\:26+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -PartitionBuilder.name=\u30d1\u30fc\u30c6\u30a3\u30b7\u30e7\u30f3 - -PartitionBuilder.description=\u30d1\u30fc\u30c6\u30a3\u30b7\u30e7\u30f3\u304b\u3089\u306e\u5024\u306e\u96c6\u5408\u306b\u5c5e\u3059\u308b\u30ce\u30fc\u30c9/\u8fba\u3092\u4fdd\u3064 - -PartitionCountBuilder.name=\u30d1\u30fc\u30c6\u30a3\u30b7\u30e7\u30f3\u306e\u30ab\u30a6\u30f3\u30c8 - -PartitionCountBuilder.description=\u7279\u5b9a\u306e\u6570\u306e\u8981\u7d20\u3092\u6301\u3063\u305f\u90e8\u5206\u306b\u5c5e\u3059\u308b\u30ce\u30fc\u30c9/\u8fba\u3092\u4fdd\u3064 - -IntraEdgesBuilder.name=\u5185\u90e8\u8fba - -IntraEdgesBuilder.description=\u3055\u307e\u3056\u307e\u306a\u90e8\u5206\u304b\u3089\u306e\u8981\u7d20\u306e\u9593\u306b\u306e\u307f\u8fba\u3092\u4fdd\u3064 - -InterEdgesBuilder.name=\u67b6\u6a4b\u8fba - -InterEdgesBuilder.description=\u540c\u3058\u90e8\u5206\u304b\u3089\u306e\u8981\u7d20\u306e\u9593\u306b\u306e\u307f\u30a8\u30c3\u30b8\u3092\u4fdd\u3064 +PartitionBuilder.name = \u30d1\u30fc\u30c6\u30a3\u30b7\u30e7\u30f3 +PartitionBuilder.description = \u30d1\u30fc\u30c6\u30a3\u30b7\u30e7\u30f3\u304b\u3089\u306e\u5024\u306e\u96c6\u5408\u306b\u5c5e\u3059\u308b\u30ce\u30fc\u30c9/\u8fba\u3092\u4fdd\u3064 + +PartitionCountBuilder.name = \u30d1\u30fc\u30c6\u30a3\u30b7\u30e7\u30f3\u306e\u30ab\u30a6\u30f3\u30c8 +PartitionCountBuilder.description = \u7279\u5b9a\u306e\u6570\u306e\u8981\u7d20\u3092\u6301\u3063\u305f\u90e8\u5206\u306b\u5c5e\u3059\u308b\u30ce\u30fc\u30c9/\u8fba\u3092\u4fdd\u3064 + +IntraEdgesBuilder.name = \u5185\u90e8\u8fba +IntraEdgesBuilder.description = \u3055\u307e\u3056\u307e\u306a\u90e8\u5206\u304b\u3089\u306e\u8981\u7d20\u306e\u9593\u306b\u306e\u307f\u8fba\u3092\u4fdd\u3064 + +InterEdgesBuilder.name = \u67b6\u6a4b\u8fba +InterEdgesBuilder.description = \u540c\u3058\u90e8\u5206\u304b\u3089\u306e\u8981\u7d20\u306e\u9593\u306b\u306e\u307f\u30a8\u30c3\u30b8\u3092\u4fdd\u3064 + +# PartitionFilterBuilder.name.node = Node +# PartitionFilterBuilder.name.edge = Edge diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_nl.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_nl.properties new file mode 100644 index 0000000000..208441b599 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_nl.properties @@ -0,0 +1,10 @@ +PartitionBuilder.name=Partition +PartitionBuilder.description=Keep nodes/edges that belongs to a set of values from a partition +PartitionCountBuilder.name=Partition Count +PartitionCountBuilder.description=Keep nodes/edges that belongs to parts with a particular number of elements +IntraEdgesBuilder.name=Intra Edges +IntraEdgesBuilder.description=Keep only edges between elements from different parts +InterEdgesBuilder.name=Inter Edges +InterEdgesBuilder.description=Keep only edges between elements from the same part +PartitionFilterBuilder.name.node=Knoop +PartitionFilterBuilder.name.edge=Edge diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_pt_BR.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_pt_BR.properties index e257329664..8280a901cd 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_pt_BR.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_pt_BR.properties @@ -1,24 +1,14 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -# C\u00e9lio Faria Jr. , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 12\:14+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -PartitionBuilder.name=Parti\u00e7\u00e3o - -PartitionBuilder.description=Manter n\u00f3s/arestas que perten\u00e7am a um conjunto de valores de uma parti\u00e7\u00e3o - -PartitionCountBuilder.name=N\u00famero de parti\u00e7\u00f5es - -PartitionCountBuilder.description=Manter n\u00f3s/arestas que pertencem a parti\u00e7\u00f5es com um determinado n\u00famero de elementos - -IntraEdgesBuilder.name=Intra arestas - -IntraEdgesBuilder.description=Manter somente as arestas entre elementos de diferentes parti\u00e7\u00f5es - -InterEdgesBuilder.name=Inter Arestas - -InterEdgesBuilder.description=Manter somente as arestas entre elementos da mesma parti\u00e7\u00e3o +PartitionBuilder.name = Partiηγo +PartitionBuilder.description = Manter nσs/arestas que pertenηam a um conjunto de valores de uma partiηγo + +PartitionCountBuilder.name = Nϊmero de partiηυes +PartitionCountBuilder.description = Manter nσs/arestas que pertencem a partiηυes com um determinado nϊmero de elementos + +IntraEdgesBuilder.name = Intra arestas +IntraEdgesBuilder.description = Manter somente as arestas entre elementos de diferentes partiηυes + +InterEdgesBuilder.name = Inter Arestas +InterEdgesBuilder.description = Manter somente as arestas entre elementos da mesma partiηγo + +PartitionFilterBuilder.name.node = Nσ +PartitionFilterBuilder.name.edge = Aresta diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_ro.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_ro.properties new file mode 100644 index 0000000000..d08fb31b33 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_ro.properties @@ -0,0 +1,12 @@ + + +PartitionBuilder.name=Parti\u021Bie +PartitionBuilder.description=P\u0103streaz\u0103 nodurile/muchiile care apar\u021Bin unui set de valori dintr-o parti\u021Bie +PartitionCountBuilder.name=Num\u0103r de parti\u021Bii +IntraEdgesBuilder.name=Muchii Interne +InterEdgesBuilder.name=Muchii Externe +IntraEdgesBuilder.description=P\u0103streaz\u0103 doar muchiile dintre elemente din parti\u021Bii diferite +InterEdgesBuilder.description=P\u0103streaz\u0103 doar muchiile dintre elemente din aceea\u0219i parti\u021Bie +PartitionFilterBuilder.name.edge=Muchie +PartitionFilterBuilder.name.node=Nod +PartitionCountBuilder.description=P\u0103streaz\u0103 nodurile/muchiile care apar\u021Bin p\u0103r\u021Bilor cu un anumit num\u0103r de elemente diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_ru.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_ru.properties index f12bd56766..415d14b24d 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_ru.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_ru.properties @@ -1,23 +1,14 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-21 19\:15+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - PartitionBuilder.name=\u0420\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u0435 - PartitionBuilder.description=\u041e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0437\u043b\u044b/\u0440\u0451\u0431\u0440\u0430, \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u043c\u0443 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0443 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0440\u0430\u0437\u0431\u0438\u0435\u043d\u0438\u044f - PartitionCountBuilder.name=\u041f\u043e \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0438 \u043a\u043b\u0430\u0441\u0441\u0430 - PartitionCountBuilder.description=\u041e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u0437\u043b\u044b/\u0440\u0451\u0431\u0440\u0430, \u043f\u0440\u0438\u043d\u0430\u0434\u043b\u0435\u0436\u0430\u0449\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430\u043c \u0441 \u0447\u0438\u0441\u043b\u043e\u043c \u0443\u0437\u043b\u043e\u0432, \u043b\u0435\u0436\u0430\u0449\u0438\u043c \u0432 \u0437\u0430\u0434\u0430\u043d\u043d\u043e\u043c \u0434\u0438\u0430\u043f\u0430\u0437\u043e\u043d\u0435 - IntraEdgesBuilder.name=\u0412\u043d\u0443\u0442\u0440\u0435\u043d\u043d\u0438\u0435 \u0440\u0451\u0431\u0440\u0430 - IntraEdgesBuilder.description=\u041e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0451\u0431\u0440\u0430 \u043c\u0435\u0436\u0434\u0443 \u0443\u0437\u043b\u0430\u043c\u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 - InterEdgesBuilder.name=\u0412\u043d\u0435\u0448\u043d\u0438\u0435 \u0440\u0451\u0431\u0440\u0430 - InterEdgesBuilder.description=\u041e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0451\u0431\u0440\u0430 \u043c\u0435\u0436\u0434\u0443 \u0443\u0437\u043b\u0430\u043c\u0438 \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u0441\u0440\u0435\u0434\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 + +# PartitionFilterBuilder.name.node = Node +# PartitionFilterBuilder.name.edge = Edge + +PartitionFilterBuilder.name.node=\u0423\u0437\u0435\u043B +PartitionFilterBuilder.name.edge=\u0420\u0435\u0431\u0440\u043E diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_th.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_tr.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_tr.properties new file mode 100644 index 0000000000..156a7a8f01 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_tr.properties @@ -0,0 +1,10 @@ +PartitionBuilder.name=Partition +PartitionBuilder.description=Keep nodes/edges that belongs to a set of values from a partition +PartitionCountBuilder.name=Partition Count +PartitionCountBuilder.description=Keep nodes/edges that belongs to parts with a particular number of elements +IntraEdgesBuilder.name=Intra Edges +IntraEdgesBuilder.description=Keep only edges between elements from different parts +InterEdgesBuilder.name=Inter Edges +InterEdgesBuilder.description=Keep only edges between elements from the same part +PartitionFilterBuilder.name.node=Node +PartitionFilterBuilder.name.edge=Edge diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_uk.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_uk.properties new file mode 100644 index 0000000000..470d550e21 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_uk.properties @@ -0,0 +1,10 @@ +PartitionCountBuilder.name=\u041A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u0440\u043E\u0437\u0434\u0456\u043B\u0456\u0432 +InterEdgesBuilder.name=\u0406\u043D\u0442\u0435\u0440 \u041A\u0440\u0430\u0457 +PartitionBuilder.name=\u041F\u0435\u0440\u0435\u0433\u043E\u0440\u043E\u0434\u043A\u0430 +PartitionBuilder.description=\u0417\u0431\u0435\u0440\u0456\u0433\u0430\u0442\u0438 \u0432\u0443\u0437\u043B\u0438/\u0440\u0435\u0431\u0440\u0430, \u044F\u043A\u0456 \u043D\u0430\u043B\u0435\u0436\u0430\u0442\u044C \u0434\u043E \u043D\u0430\u0431\u043E\u0440\u0443 \u0437\u043D\u0430\u0447\u0435\u043D\u044C \u0456\u0437 \u0440\u043E\u0437\u0434\u0456\u043B\u0443 +IntraEdgesBuilder.name=\u0412\u043D\u0443\u0442\u0440\u0456\u0448\u043D\u0456 \u0440\u0435\u0431\u0440\u0430 +PartitionCountBuilder.description=\u0417\u0431\u0435\u0440\u0456\u0433\u0430\u0439\u0442\u0435 \u0432\u0443\u0437\u043B\u0438/\u0440\u0435\u0431\u0440\u0430, \u044F\u043A\u0456 \u043D\u0430\u043B\u0435\u0436\u0430\u0442\u044C \u0447\u0430\u0441\u0442\u0438\u043D\u0430\u043C \u0456\u0437 \u043F\u0435\u0432\u043D\u043E\u044E \u043A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044E \u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432 +IntraEdgesBuilder.description=\u0417\u0431\u0435\u0440\u0456\u0433\u0430\u0439\u0442\u0435 \u0442\u0456\u043B\u044C\u043A\u0438 \u043A\u0440\u0430\u0457 \u043C\u0456\u0436 \u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u043C\u0438 \u0437 \u0440\u0456\u0437\u043D\u0438\u0445 \u0447\u0430\u0441\u0442\u0438\u043D +InterEdgesBuilder.description=\u0417\u0431\u0435\u0440\u0456\u0433\u0430\u0439\u0442\u0435 \u043B\u0438\u0448\u0435 \u043A\u0440\u0430\u0457 \u043C\u0456\u0436 \u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430\u043C\u0438 \u043E\u0434\u043D\u0456\u0454\u0457 \u0447\u0430\u0441\u0442\u0438\u043D\u0438 +PartitionFilterBuilder.name.node=\u0412\u0443\u0437\u043E\u043B +PartitionFilterBuilder.name.edge=\u041A\u0440\u0430\u0439 diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_zh_CN.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_zh_CN.properties index a46985b526..84bbe59674 100644 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_zh_CN.properties +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_zh_CN.properties @@ -1,22 +1,14 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:13+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -PartitionBuilder.name=\u5206\u533a - -PartitionBuilder.description=\u4fdd\u7559\u5c5e\u4e8e\u5206\u533a\u4e2d\u53d6\u5f97\u7684\u4e00\u7ec4\u503c\u7684\u8282\u70b9/\u8fb9 - -PartitionCountBuilder.name=\u5206\u533a\u7edf\u8ba1 - -PartitionCountBuilder.description=\u4fdd\u7559\u5c5e\u4e8e\u90e8\u5206\u7279\u5b9a\u5143\u7d20\u7684\u8282\u70b9/\u8fb9 - -IntraEdgesBuilder.name=\u8fb9\u5185\u90e8 - -IntraEdgesBuilder.description=\u4ec5\u4fdd\u7559\u4e0d\u540c\u90e8\u5206\u7684\u5143\u7d20\u4e4b\u95f4\u7684\u8fb9 - -InterEdgesBuilder.name=\u8fb9\u4e4b\u95f4 - -InterEdgesBuilder.description=\u4ec5\u4fdd\u7559\u76f8\u540c\u7684\u90e8\u5206\u5143\u7d20\u4e4b\u95f4\u7684\u8fb9 +PartitionBuilder.name = \u5206\u533a +PartitionBuilder.description = \u4fdd\u7559\u5c5e\u4e8e\u5206\u533a\u4e2d\u53d6\u5f97\u7684\u4e00\u7ec4\u503c\u7684\u8282\u70b9/\u8fb9 + +PartitionCountBuilder.name = \u5206\u533a\u7edf\u8ba1 +PartitionCountBuilder.description = \u4fdd\u7559\u5c5e\u4e8e\u90e8\u5206\u7279\u5b9a\u5143\u7d20\u7684\u8282\u70b9/\u8fb9 + +IntraEdgesBuilder.name = \u8fb9\u5185\u90e8 +IntraEdgesBuilder.description = \u4ec5\u4fdd\u7559\u4e0d\u540c\u90e8\u5206\u7684\u5143\u7d20\u4e4b\u95f4\u7684\u8fb9 + +InterEdgesBuilder.name = \u8fb9\u4e4b\u95f4 +InterEdgesBuilder.description = \u4ec5\u4fdd\u7559\u76f8\u540c\u7684\u90e8\u5206\u5143\u7d20\u4e4b\u95f4\u7684\u8fb9 + +PartitionFilterBuilder.name.node = \u8282\u70b9 +PartitionFilterBuilder.name.edge = \u8fb9 diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_zh_TW.properties b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_zh_TW.properties new file mode 100644 index 0000000000..89f5714ac0 --- /dev/null +++ b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/Bundle_zh_TW.properties @@ -0,0 +1,10 @@ +PartitionBuilder.name=\u5340\u6bb5 +PartitionBuilder.description=Keep nodes/edges that belongs to a set of values from a partition +PartitionCountBuilder.name=Partition Count +PartitionCountBuilder.description=Keep nodes/edges that belongs to parts with a particular number of elements +IntraEdgesBuilder.name=Intra Edges +IntraEdgesBuilder.description=Keep only edges between elements from different parts +InterEdgesBuilder.name=Inter Edges +InterEdgesBuilder.description=Keep only edges between elements from the same part +PartitionFilterBuilder.name.node=Node +PartitionFilterBuilder.name.edge=Edge diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/cs.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/cs.po deleted file mode 100644 index 472ae0f3b9..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/cs.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-21 16:04+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "PartitionBuilder.name" -msgstr "OddΓ­l" - -msgid "PartitionBuilder.description" -msgstr "Ponechat uzly/hrany, kterΓ© patΕ™Γ­ určitΓ½m sadΓ‘m hodnot, mimo oddΓ­l" - -msgid "PartitionCountBuilder.name" -msgstr "Počet oddΓ­lΕ―" - -msgid "PartitionCountBuilder.description" -msgstr "Ponechat uzly/hrany, kterΓ© patΕ™Γ­ do čÑstΓ­ s určitΓ½m počtem prvkΕ―" - -msgid "IntraEdgesBuilder.name" -msgstr "Hrany uvnitΕ™" - -msgid "IntraEdgesBuilder.description" -msgstr "Ponechat pouze hrany mezi prvky z rΕ―znΓ½ch čÑstΓ­" - -msgid "InterEdgesBuilder.name" -msgstr "Hrany mimo" - -msgid "InterEdgesBuilder.description" -msgstr "Ponechat pouze hrany mezi prvky ze stejnΓ½ch čÑstΓ­" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/es.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/es.po deleted file mode 100644 index 69bc34fa0b..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/es.po +++ /dev/null @@ -1,44 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 21:45+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "PartitionBuilder.name" -msgstr "ParticiΓ³n" - -msgid "PartitionBuilder.description" -msgstr "Mantener los nodos/aristas que pertenezcan a un conjunto de valores de una particiΓ³n" - -msgid "PartitionCountBuilder.name" -msgstr "TamaΓ±o de particiΓ³n" - -msgid "PartitionCountBuilder.description" -msgstr "Mantener nodos/aristas que pertenecen a particiones con un nΓΊmero particular de elementos" - -msgid "IntraEdgesBuilder.name" -msgstr "Intra aristas" - -msgid "IntraEdgesBuilder.description" -msgstr "Mantener sΓ³lamente aristas entre elementos de partes diferentes" - -msgid "InterEdgesBuilder.name" -msgstr "Inter aristas" - -msgid "InterEdgesBuilder.description" -msgstr "Manter sΓ³lamente aristas entre elementos de la misma parte" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/fr.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/fr.po deleted file mode 100644 index 57d2822815..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/fr.po +++ /dev/null @@ -1,44 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 11:37+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "PartitionBuilder.name" -msgstr "Partition" - -msgid "PartitionBuilder.description" -msgstr "Garde les noeuds/liens appartenant Γ  un ensemble de valeurs d'une partition." - -msgid "PartitionCountBuilder.name" -msgstr "Nombre de partitions" - -msgid "PartitionCountBuilder.description" -msgstr "Garde les noeuds/liens appartenant aux partitions d'un nombre d'Γ©lΓ©ment donnΓ©." - -msgid "IntraEdgesBuilder.name" -msgstr "Liens internes" - -msgid "IntraEdgesBuilder.description" -msgstr "Garde uniquement les liens entre Γ©lΓ©ments de partitions diffΓ©rentes" - -msgid "InterEdgesBuilder.name" -msgstr "Liens externes" - -msgid "InterEdgesBuilder.description" -msgstr "Garde uniquement les liens entre Γ©lΓ©ments d'une mΓͺme partition" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/ja.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/ja.po deleted file mode 100644 index 4e8983d0be..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/ja.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-23 09:26+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "PartitionBuilder.name" -msgstr "パーティション" - -msgid "PartitionBuilder.description" -msgstr "パーティションからγε€€γι›†εˆγ«ε±žγ™γ‚‹γƒŽγƒΌγƒ‰/辺を保぀" - -msgid "PartitionCountBuilder.name" -msgstr "パーティションγγ‚«γ‚¦γƒ³γƒˆ" - -msgid "PartitionCountBuilder.description" -msgstr "η‰Ήεšγζ•°γθ¦η΄ γ‚’ζŒγ£γŸιƒ¨εˆ†γ«ε±žγ™γ‚‹γƒŽγƒΌγƒ‰/辺を保぀" - -msgid "IntraEdgesBuilder.name" -msgstr "内部辺" - -msgid "IntraEdgesBuilder.description" -msgstr "さまざまγͺιƒ¨εˆ†γ‹γ‚‰γθ¦η΄ γι–“にγγΏθΎΊγ‚’保぀" - -msgid "InterEdgesBuilder.name" -msgstr "ζžΆζ©‹θΎΊ" - -msgid "InterEdgesBuilder.description" -msgstr "εŒγ˜ιƒ¨εˆ†γ‹γ‚‰γθ¦η΄ γι–“にγγΏγ‚¨γƒƒγ‚Έγ‚’保぀" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/org-gephi-filters-plugin-partition.pot b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/org-gephi-filters-plugin-partition.pot deleted file mode 100644 index 25d336d87e..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/org-gephi-filters-plugin-partition.pot +++ /dev/null @@ -1,41 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "PartitionBuilder.name" -msgstr "Partition" - -msgid "PartitionBuilder.description" -msgstr "Keep nodes/edges that belongs to a set of values from a partition" - -msgid "PartitionCountBuilder.name" -msgstr "Partition Count" - -msgid "PartitionCountBuilder.description" -msgstr "" -"Keep nodes/edges that belongs to parts with a particular number of elements" - -msgid "IntraEdgesBuilder.name" -msgstr "Intra Edges" - -msgid "IntraEdgesBuilder.description" -msgstr "Keep only edges between elements from different parts" - -msgid "InterEdgesBuilder.name" -msgstr "Inter Edges" - -msgid "InterEdgesBuilder.description" -msgstr "Keep only edges between elements from the same part" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/pt_BR.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/pt_BR.po deleted file mode 100644 index 7a8aa2c662..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/pt_BR.po +++ /dev/null @@ -1,44 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -# CΓ©lio Faria Jr. , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 12:14+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "PartitionBuilder.name" -msgstr "PartiΓ§Γ£o" - -msgid "PartitionBuilder.description" -msgstr "Manter nΓ³s/arestas que pertenΓ§am a um conjunto de valores de uma partiΓ§Γ£o" - -msgid "PartitionCountBuilder.name" -msgstr "NΓΊmero de partiΓ§Γ΅es" - -msgid "PartitionCountBuilder.description" -msgstr "Manter nΓ³s/arestas que pertencem a partiΓ§Γ΅es com um determinado nΓΊmero de elementos" - -msgid "IntraEdgesBuilder.name" -msgstr "Intra arestas" - -msgid "IntraEdgesBuilder.description" -msgstr "Manter somente as arestas entre elementos de diferentes partiΓ§Γ΅es" - -msgid "InterEdgesBuilder.name" -msgstr "Inter Arestas" - -msgid "InterEdgesBuilder.description" -msgstr "Manter somente as arestas entre elementos da mesma partiΓ§Γ£o" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/ru.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/ru.po deleted file mode 100644 index 461e13a3cb..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/ru.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-21 19:15+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "PartitionBuilder.name" -msgstr "Π Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅" - -msgid "PartitionBuilder.description" -msgstr "ΠžΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ ΡƒΠ·Π»Ρ‹/Ρ€Ρ‘Π±Ρ€Π°, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠ΅ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌΡƒ мноТСству классов разбиСния" - -msgid "PartitionCountBuilder.name" -msgstr "По мощности класса" - -msgid "PartitionCountBuilder.description" -msgstr "ΠžΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ ΡƒΠ·Π»Ρ‹/Ρ€Ρ‘Π±Ρ€Π°, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠ΅ классам с числом ΡƒΠ·Π»ΠΎΠ², Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΌ Π² Π·Π°Π΄Π°Π½Π½ΠΎΠΌ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅" - -msgid "IntraEdgesBuilder.name" -msgstr "Π’Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ Ρ€Ρ‘Π±Ρ€Π°" - -msgid "IntraEdgesBuilder.description" -msgstr "ΠžΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Ρ‘Π±Ρ€Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΡƒΠ·Π»Π°ΠΌΠΈ Π²Π½ΡƒΡ‚Ρ€ΠΈ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Ρ… классов" - -msgid "InterEdgesBuilder.name" -msgstr "Π’Π½Π΅ΡˆΠ½ΠΈΠ΅ Ρ€Ρ‘Π±Ρ€Π°" - -msgid "InterEdgesBuilder.description" -msgstr "ΠžΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Ρ‘Π±Ρ€Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΡƒΠ·Π»Π°ΠΌΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… классов, срСди Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Ρ… классов" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/zh_CN.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/zh_CN.po deleted file mode 100644 index 4b7ff6b9a7..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/partition/zh_CN.po +++ /dev/null @@ -1,42 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:13+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "PartitionBuilder.name" -msgstr "εˆ†εŒΊ" - -msgid "PartitionBuilder.description" -msgstr "δΏη•™ε±žδΊŽεˆ†εŒΊδΈ­ε–εΎ—ηš„δΈ€η»„ε€Όηš„θŠ‚η‚Ή/θΎΉ" - -msgid "PartitionCountBuilder.name" -msgstr "εˆ†εŒΊη»Ÿθ‘" - -msgid "PartitionCountBuilder.description" -msgstr "δΏη•™ε±žδΊŽιƒ¨εˆ†η‰Ήεšε…ƒη΄ ηš„θŠ‚η‚Ή/θΎΉ" - -msgid "IntraEdgesBuilder.name" -msgstr "边内部" - -msgid "IntraEdgesBuilder.description" -msgstr "δ»…δΏη•™δΈεŒιƒ¨εˆ†ηš„ε…ƒη΄ δΉ‹ι—΄ηš„θΎΉ" - -msgid "InterEdgesBuilder.name" -msgstr "θΎΉδΉ‹ι—΄" - -msgid "InterEdgesBuilder.description" -msgstr "δ»…δΏη•™η›ΈεŒηš„ιƒ¨εˆ†ε…ƒη΄ δΉ‹ι—΄ηš„θΎΉ" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/pt_BR.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/pt_BR.po deleted file mode 100644 index c17792f97a..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/pt_BR.po +++ /dev/null @@ -1,32 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -# CΓ©lio Faria Jr. , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-12 12:41+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ImplementaΓ§Γ΅es de filtros, definiΓ§Γ£o de novos filtros" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplementaΓ§Γ΅es de filtros" - -msgid "AbstractAttributeFilterBuilder.Node" -msgstr "NΓ³" - -msgid "AbstractAttributeFilterBuilder.Edge" -msgstr "Aresta" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/ru.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/ru.po deleted file mode 100644 index 2a4efcd854..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/ru.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-12 21:44+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "РСализация Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ², ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²" - -msgid "OpenIDE-Module-Short-Description" -msgstr "РСализация Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²" - -msgid "AbstractAttributeFilterBuilder.Node" -msgstr "Π£Π·Π΅Π»" - -msgid "AbstractAttributeFilterBuilder.Edge" -msgstr "Π Π΅Π±Ρ€ΠΎ" diff --git a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/zh_CN.po b/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/zh_CN.po deleted file mode 100644 index 04a15084b5..0000000000 --- a/modules/FiltersPlugin/src/main/resources/org/gephi/filters/plugin/zh_CN.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-15 09:37+0000\n" -"Last-Translator: Xi-Nian Zuo \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "θΏ‡ζ»€ε™¨ηš„εžηŽ°οΌŒεšδΉ‰ζ–°ηš„过滀器" - -msgid "OpenIDE-Module-Short-Description" -msgstr "θΏ‡ζ»€ε™¨ηš„εžηް" - -msgid "AbstractAttributeFilterBuilder.Node" -msgstr "θŠ‚η‚Ή" - -msgid "AbstractAttributeFilterBuilder.Edge" -msgstr "θΎΉ" diff --git a/modules/FiltersPlugin/src/test/java/org/gephi/filters/plugin/attribute/ContainsTest.java b/modules/FiltersPlugin/src/test/java/org/gephi/filters/plugin/attribute/ContainsTest.java new file mode 100644 index 0000000000..fb0385a6f8 --- /dev/null +++ b/modules/FiltersPlugin/src/test/java/org/gephi/filters/plugin/attribute/ContainsTest.java @@ -0,0 +1,45 @@ +package org.gephi.filters.plugin.attribute; + +import org.gephi.filters.spi.FilterBuilder; +import org.gephi.graph.GraphGenerator; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Node; +import org.junit.Assert; +import org.junit.Test; + +public class ContainsTest { + + @Test + public void testStringArray() { + GraphGenerator graphGenerator = GraphGenerator.build().generateTinyGraph().addStringArrayNodeColumn(); + Graph graph = graphGenerator.getGraph(); + + ListAttributeContainsBuilder builder = new ListAttributeContainsBuilder(); + FilterBuilder[] builders = builder.getBuilders(graphGenerator.getWorkspace()); + Assert.assertEquals(1, builders.length); + + ListAttributeContainsBuilder.AttributeContainsFilter filter = + (ListAttributeContainsBuilder.AttributeContainsFilter) builders[0].getFilter(graphGenerator.getWorkspace()); + Assert.assertTrue(filter.getColumn().isArray()); + Assert.assertFalse(filter.evaluate(graphGenerator.getGraph(), graph.getNode(GraphGenerator.FIRST_NODE))); + filter.setMatch(GraphGenerator.STRING_ARRAY_COLUMN_VALUES[0][0]); + Assert.assertTrue(filter.evaluate(graphGenerator.getGraph(), graph.getNode(GraphGenerator.FIRST_NODE))); + filter.setMatch("none"); + Assert.assertFalse(filter.evaluate(graphGenerator.getGraph(), graph.getNode(GraphGenerator.FIRST_NODE))); + } + + @Test + public void testFloatArrayStringMatch() { + GraphGenerator graphGenerator = GraphGenerator.build().generateTinyGraph().addFloatArrayNodeColumn(); + Graph graph = graphGenerator.getGraph(); + + ListAttributeContainsBuilder builder = new ListAttributeContainsBuilder(); + FilterBuilder[] builders = builder.getBuilders(graphGenerator.getWorkspace()); + + ListAttributeContainsBuilder.AttributeContainsFilter filter = + (ListAttributeContainsBuilder.AttributeContainsFilter) builders[0].getFilter(graphGenerator.getWorkspace()); + filter.setMatch("1.0"); + Assert.assertTrue(filter.evaluate(graphGenerator.getGraph(), graph.getNode(GraphGenerator.FIRST_NODE))); + } + +} diff --git a/modules/FiltersPluginUI/pom.xml b/modules/FiltersPluginUI/pom.xml index 57405d1948..6b157c872e 100644 --- a/modules/FiltersPluginUI/pom.xml +++ b/modules/FiltersPluginUI/pom.xml @@ -4,13 +4,12 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. - org.gephi filters-plugin-ui - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm FiltersPluginUI @@ -22,7 +21,7 @@ ${project.groupId} - data-attributes-api + graph-api ${project.groupId} @@ -32,13 +31,13 @@ ${project.groupId} filters-plugin - + ${project.groupId} - partition-api + appearance-api ${project.groupId} - lib.validation + ui-utils ${project.groupId} @@ -60,9 +59,9 @@ org.netbeans.api org-openide-windows - + ${project.groupId} - desktop-perspective + desktop-window org.netbeans.api @@ -77,7 +76,7 @@ - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/JQuickHistogram.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/JQuickHistogram.java index ec62586253..6b29bc6633 100644 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/JQuickHistogram.java +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/JQuickHistogram.java @@ -38,7 +38,8 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.ui.filters.plugin; import java.awt.Color; @@ -51,15 +52,14 @@ Development and Distribution License("CDDL") (collectively, the import javax.swing.JPanel; /** - * * @author Mathieu Bastian */ public class JQuickHistogram { + private final boolean inclusive = true; private int constraintHeight = 0; private int constraintWidth = 0; private JPanel panel; - private boolean inclusive = true; //Data private List data; private Double minValue; @@ -72,7 +72,7 @@ public JQuickHistogram() { } public void clear() { - data = new ArrayList(); + data = new ArrayList<>(); minValue = Double.MAX_VALUE; maxValue = Double.NEGATIVE_INFINITY; } @@ -184,9 +184,9 @@ public double getMedianInRange() { private static class JQuickHistogramPanel extends JPanel { - private Color fillColor = new Color(0xCFD2D3); - private Color fillInRangeColor = new Color(0x3B4042); - private JQuickHistogram histogram; + private final Color fillColor = new Color(0xCFD2D3); + private final Color fillInRangeColor = new Color(0x3B4042); + private final JQuickHistogram histogram; private int currentHeight = 0; private int currentWidth = 0; @@ -221,7 +221,8 @@ private void drawHisto(Graphics2D g2d) { Double data = histogram.data.get(i); int rectangleWidth = rectWidth + (leftover > 0 ? 1 : 0); leftover--; - int rectangleHeight = (int) ((data - histogram.minValue) / (histogram.maxValue - histogram.minValue) * currentHeight); + int rectangleHeight = + (int) ((data - histogram.minValue) / (histogram.maxValue - histogram.minValue) * currentHeight); if (data >= histogram.minRange && data <= histogram.maxRange) { g2d.setColor(fillInRangeColor); } else { @@ -244,10 +245,12 @@ private void drawHisto(Graphics2D g2d) { double average = 0.0; for (int j = 0; j < size; j++) { Double d = histogram.data.get(numberOfElementsHandled++); - average += d.doubleValue(); + average += d; } average /= size; - int rectangleHeight = (int) ((average - histogram.minValue) / (histogram.maxValue - histogram.minValue) * currentHeight); + int rectangleHeight = + (int) ((average - histogram.minValue) / (histogram.maxValue - histogram.minValue) * + currentHeight); if (average >= histogram.minRange && average <= histogram.maxRange) { g2d.setColor(fillInRangeColor); diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualBooleanPanel.form b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualBooleanPanel.form index 7b6e575db3..7ad9e894c1 100644 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualBooleanPanel.form +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualBooleanPanel.form @@ -1,4 +1,4 @@ - +
    diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualBooleanPanel.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualBooleanPanel.java index b97c7cd39e..5fcbe8a9b4 100644 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualBooleanPanel.java +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualBooleanPanel.java @@ -38,21 +38,27 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.ui.filters.plugin.attribute; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import org.gephi.filters.plugin.attribute.AttributeEqualBuilder.EqualBooleanFilter; import org.gephi.filters.spi.FilterProperty; +import org.openide.util.Exceptions; /** - * * @author Mathieu Bastian */ public class EqualBooleanPanel extends javax.swing.JPanel implements ActionListener { private EqualBooleanFilter filter; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JToggleButton falseButton; + private javax.swing.ButtonGroup group; + private javax.swing.JToggleButton trueButton; + // End of variables declaration//GEN-END:variables public EqualBooleanPanel() { initComponents(); @@ -68,19 +74,20 @@ public void setup(EqualBooleanFilter filter) { group.setSelected(falseButton.getModel(), !filter.isMatch()); } + @Override public void actionPerformed(ActionEvent evt) { FilterProperty match = filter.getProperties()[1]; try { match.setValue(trueButton.isSelected()); } catch (Exception e) { - e.printStackTrace(); + Exceptions.printStackTrace(e); } } - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents @@ -93,16 +100,13 @@ private void initComponents() { setOpaque(false); group.add(trueButton); - trueButton.setText(org.openide.util.NbBundle.getMessage(EqualBooleanPanel.class, "EqualBooleanPanel.trueButton.text")); // NOI18N + trueButton.setText(org.openide.util.NbBundle + .getMessage(EqualBooleanPanel.class, "EqualBooleanPanel.trueButton.text")); // NOI18N add(trueButton); group.add(falseButton); - falseButton.setText(org.openide.util.NbBundle.getMessage(EqualBooleanPanel.class, "EqualBooleanPanel.falseButton.text")); // NOI18N + falseButton.setText(org.openide.util.NbBundle + .getMessage(EqualBooleanPanel.class, "EqualBooleanPanel.falseButton.text")); // NOI18N add(falseButton); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JToggleButton falseButton; - private javax.swing.ButtonGroup group; - private javax.swing.JToggleButton trueButton; - // End of variables declaration//GEN-END:variables } diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualBooleanUIImpl.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualBooleanUIImpl.java index 1388f02130..bc718472d7 100644 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualBooleanUIImpl.java +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualBooleanUIImpl.java @@ -38,7 +38,8 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.ui.filters.plugin.attribute; import javax.swing.JPanel; @@ -47,12 +48,12 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = EqualBooleanUI.class) public class EqualBooleanUIImpl implements EqualBooleanUI { + @Override public JPanel getPanel(EqualBooleanFilter filter) { EqualBooleanPanel panel = new EqualBooleanPanel(); panel.setup(filter); diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualNumberPanel.form b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualNumberPanel.form index 7f75a2a928..9b835e0bdd 100644 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualNumberPanel.form +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualNumberPanel.form @@ -1,4 +1,4 @@ - + diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualNumberPanel.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualNumberPanel.java index cbf6ff2c80..809b6311d1 100644 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualNumberPanel.java +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualNumberPanel.java @@ -39,8 +39,11 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.filters.plugin.attribute; +import java.math.BigDecimal; +import java.math.BigInteger; import java.text.DecimalFormat; import javax.swing.SpinnerNumberModel; import javax.swing.SwingUtilities; @@ -48,26 +51,44 @@ Development and Distribution License("CDDL") (collectively, the import javax.swing.event.ChangeListener; import org.gephi.filters.plugin.attribute.AttributeEqualBuilder.EqualNumberFilter; import org.gephi.filters.spi.FilterProperty; +import org.openide.util.Exceptions; import org.openide.util.WeakListeners; /** - * * @author Mathieu Bastian */ public class EqualNumberPanel extends javax.swing.JPanel implements ChangeListener { private EqualNumberFilter filter; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel2; + private javax.swing.JLabel labelValue; + private javax.swing.JLabel maxLabel; + private javax.swing.JLabel minLabel; + private javax.swing.JSpinner valueSpinner; + // End of variables declaration//GEN-END:variables public EqualNumberPanel() { initComponents(); } + @Override public void stateChanged(ChangeEvent evt) { FilterProperty match = filter.getProperties()[1]; try { - match.setValue((Number) valueSpinner.getValue()); + Number spinnerValue = (Number) valueSpinner.getValue(); + // SpinnerNumberModel uses Long/Double proxies for BigInteger/BigDecimal columns; + // convert back to the correct column type before storing in the filter. + Class type = filter.getColumn().getTypeClass(); + if (type.equals(BigInteger.class)) { + spinnerValue = BigInteger.valueOf(spinnerValue.longValue()); + } else if (type.equals(BigDecimal.class)) { + spinnerValue = BigDecimal.valueOf(spinnerValue.doubleValue()); + } + match.setValue(spinnerValue); } catch (Exception e) { - e.printStackTrace(); + Exceptions.printStackTrace(e); } } @@ -75,45 +96,77 @@ public void setup(EqualNumberFilter f) { this.filter = f; new Thread(new Runnable() { + @Override public void run() { setToolTipText(filter.getName() + " '" + filter.getColumn().getTitle() + "'"); - Number match = filter.getMatch(); - Number stepSize = null; + Number currentMatch = filter.getMatch(); final Comparable min = (Comparable) filter.getRange().getMinimum(); final Comparable max = (Comparable) filter.getRange().getMaximum(); - switch (filter.getColumn().getType()) { - case DOUBLE: - match = (match != null ? match : new Double((Double) min)); - stepSize = new Double(.1); - break; - case FLOAT: - match = (match != null ? match : new Float((Float) min)); - stepSize = new Float(.1f); - break; - case LONG: - match = (match != null ? match : new Long((Long) min)); - stepSize = new Long(1l); - break; - case INT: - match = (match != null ? match : new Integer((Integer) min)); - stepSize = 1; - break; - default: - throw new IllegalArgumentException("Column must be number"); + Class type = filter.getColumn().getTypeClass(); + + // spinnerMin/spinnerMax may differ from min/max for BigInteger/BigDecimal because + // SpinnerNumberModel doesn't handle those types reliably across JDK versions. + // We use Long/Double proxies for the spinner and convert back in stateChanged(). + Comparable spinnerMinVal = min; + Comparable spinnerMaxVal = max; + Number match; + Number stepSize; + + if (type.equals(Double.class)) { + match = (currentMatch instanceof Double) ? currentMatch : (Double) min; + stepSize = .1; + } else if (type.equals(Float.class)) { + match = (currentMatch instanceof Float) ? currentMatch : (Float) min; + stepSize = .1f; + } else if (type.equals(Long.class)) { + match = (currentMatch instanceof Long) ? currentMatch : (Long) min; + stepSize = 1l; + } else if (type.equals(Integer.class)) { + match = (currentMatch instanceof Integer) ? currentMatch : (Integer) min; + stepSize = 1; + } else if (type.equals(Short.class)) { + match = (currentMatch instanceof Short) ? currentMatch : (Short) min; + stepSize = (short) 1; + } else if (type.equals(Byte.class)) { + match = (currentMatch instanceof Byte) ? currentMatch : (Byte) min; + stepSize = (byte) 1; + } else if (type.equals(BigInteger.class)) { + BigInteger bigMin = (BigInteger) min; + BigInteger bigMax = (BigInteger) max; + BigInteger bigMatch = (currentMatch instanceof BigInteger) ? (BigInteger) currentMatch : bigMin; + spinnerMinVal = bigMin.longValue(); + spinnerMaxVal = bigMax.longValue(); + match = bigMatch.longValue(); + stepSize = 1L; + } else if (type.equals(BigDecimal.class)) { + BigDecimal bdMin = (BigDecimal) min; + BigDecimal bdMax = (BigDecimal) max; + BigDecimal bdMatch = (currentMatch instanceof BigDecimal) ? (BigDecimal) currentMatch : bdMin; + spinnerMinVal = bdMin.doubleValue(); + spinnerMaxVal = bdMax.doubleValue(); + match = bdMatch.doubleValue(); + stepSize = .1; + } else { + throw new IllegalArgumentException("Column must be number"); } - Number minNumber = (Number) min; - Number maxNumber = (Number) max; - if (match.doubleValue() < minNumber.doubleValue()) { - match = minNumber; - filter.getProperties()[1].setValue(minNumber); - } else if (match.doubleValue() > maxNumber.doubleValue()) { - match = maxNumber; - filter.getProperties()[1].setValue(maxNumber); + + final Comparable spinnerMin = spinnerMinVal; + final Comparable spinnerMax = spinnerMaxVal; + + Number spinnerMinNumber = (Number) spinnerMin; + Number spinnerMaxNumber = (Number) spinnerMax; + if (match.doubleValue() < spinnerMinNumber.doubleValue()) { + match = spinnerMinNumber; + filter.getProperties()[1].setValue((Number) min); + } else if (match.doubleValue() > spinnerMaxNumber.doubleValue()) { + match = spinnerMaxNumber; + filter.getProperties()[1].setValue((Number) max); } - final SpinnerNumberModel model = new SpinnerNumberModel(match, min, max, stepSize); + final SpinnerNumberModel model = new SpinnerNumberModel(match, spinnerMin, spinnerMax, stepSize); SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { if (min.equals(Double.NEGATIVE_INFINITY) || min.equals(Integer.MIN_VALUE)) { minLabel.setText(""); @@ -125,7 +178,6 @@ public void run() { maxLabel.setText(df.format(max)); } - valueSpinner.setModel(model); model.addChangeListener(WeakListeners.change(EqualNumberPanel.this, model)); } @@ -134,10 +186,10 @@ public void run() { }).start(); } - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents @@ -154,7 +206,8 @@ private void initComponents() { setOpaque(false); setLayout(new java.awt.GridBagLayout()); - labelValue.setText(org.openide.util.NbBundle.getMessage(EqualNumberPanel.class, "EqualNumberPanel.labelValue.text")); // NOI18N + labelValue.setText( + org.openide.util.NbBundle.getMessage(EqualNumberPanel.class, "EqualNumberPanel.labelValue.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; @@ -169,7 +222,8 @@ private void initComponents() { add(valueSpinner, gridBagConstraints); jLabel1.setFont(new java.awt.Font("Tahoma", 0, 10)); - jLabel1.setText(org.openide.util.NbBundle.getMessage(EqualNumberPanel.class, "EqualNumberPanel.jLabel1.text")); // NOI18N + jLabel1.setText( + org.openide.util.NbBundle.getMessage(EqualNumberPanel.class, "EqualNumberPanel.jLabel1.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; @@ -178,7 +232,8 @@ private void initComponents() { add(jLabel1, gridBagConstraints); jLabel2.setFont(new java.awt.Font("Tahoma", 0, 10)); - jLabel2.setText(org.openide.util.NbBundle.getMessage(EqualNumberPanel.class, "EqualNumberPanel.jLabel2.text")); // NOI18N + jLabel2.setText( + org.openide.util.NbBundle.getMessage(EqualNumberPanel.class, "EqualNumberPanel.jLabel2.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 2; @@ -187,7 +242,8 @@ private void initComponents() { add(jLabel2, gridBagConstraints); minLabel.setFont(new java.awt.Font("Tahoma", 0, 10)); - minLabel.setText(org.openide.util.NbBundle.getMessage(EqualNumberPanel.class, "EqualNumberPanel.minLabel.text")); // NOI18N + minLabel.setText( + org.openide.util.NbBundle.getMessage(EqualNumberPanel.class, "EqualNumberPanel.minLabel.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; @@ -196,7 +252,8 @@ private void initComponents() { add(minLabel, gridBagConstraints); maxLabel.setFont(new java.awt.Font("Tahoma", 0, 10)); - maxLabel.setText(org.openide.util.NbBundle.getMessage(EqualNumberPanel.class, "EqualNumberPanel.maxLabel.text")); // NOI18N + maxLabel.setText( + org.openide.util.NbBundle.getMessage(EqualNumberPanel.class, "EqualNumberPanel.maxLabel.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 2; @@ -204,12 +261,4 @@ private void initComponents() { gridBagConstraints.insets = new java.awt.Insets(5, 0, 0, 0); add(maxLabel, gridBagConstraints); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JLabel jLabel1; - private javax.swing.JLabel jLabel2; - private javax.swing.JLabel labelValue; - private javax.swing.JLabel maxLabel; - private javax.swing.JLabel minLabel; - private javax.swing.JSpinner valueSpinner; - // End of variables declaration//GEN-END:variables } diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualNumberUIImpl.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualNumberUIImpl.java index c6f138a4f7..f2fa2a4de2 100644 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualNumberUIImpl.java +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualNumberUIImpl.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.filters.plugin.attribute; import javax.swing.JPanel; @@ -47,12 +48,12 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = EqualNumberUI.class) public class EqualNumberUIImpl implements EqualNumberUI { + @Override public JPanel getPanel(EqualNumberFilter filter) { EqualNumberPanel panel = new EqualNumberPanel(); panel.setup(filter); diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualStringPanel.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualStringPanel.java index e888f61a0a..7ab3c22496 100644 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualStringPanel.java +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualStringPanel.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.filters.plugin.attribute; import java.awt.event.ActionEvent; @@ -51,15 +52,21 @@ Development and Distribution License("CDDL") (collectively, the import org.netbeans.validation.api.Problems; import org.netbeans.validation.api.Validator; import org.netbeans.validation.api.ui.ValidationGroup; -import org.netbeans.validation.api.ui.ValidationPanel; +import org.netbeans.validation.api.ui.swing.ValidationPanel; +import org.openide.util.Exceptions; /** - * * @author Mathieu Bastian */ public class EqualStringPanel extends javax.swing.JPanel implements ActionListener { private AttributeEqualBuilder.EqualStringFilter filter; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel labelPattern; + private javax.swing.JButton okButton; + private javax.swing.JCheckBox regexCheckbox; + private javax.swing.JTextField textField; + // End of variables declaration//GEN-END:variables public EqualStringPanel() { initComponents(); @@ -67,6 +74,25 @@ public EqualStringPanel() { okButton.addActionListener(this); } + public static ValidationPanel createValidationPanel(final EqualStringPanel innerPanel) { + final ValidationPanel validationPanel = new ValidationPanel(); + validationPanel.setInnerComponent(innerPanel); + + ValidationGroup group = validationPanel.getValidationGroup(); + validationPanel.addChangeListener(new ChangeListener() { + + @Override + public void stateChanged(ChangeEvent e) { + innerPanel.okButton.setEnabled(!validationPanel.isFatalProblem()); + } + }); + //Node field + group.add(innerPanel.textField, new RegexValidator(innerPanel)); + + return validationPanel; + } + + @Override public void actionPerformed(ActionEvent evt) { FilterProperty pattern = filter.getProperties()[1]; FilterProperty useRegex = filter.getProperties()[2]; @@ -78,7 +104,7 @@ public void actionPerformed(ActionEvent evt) { useRegex.setValue(regexCheckbox.isSelected()); } } catch (Exception e) { - e.printStackTrace(); + Exceptions.printStackTrace(e); } } @@ -91,28 +117,12 @@ public void setup(AttributeEqualBuilder.EqualStringFilter filter) { textField.setText((String) pattern.getValue()); regexCheckbox.setSelected((Boolean) useRegex.getValue()); } catch (Exception e) { - e.printStackTrace(); + Exceptions.printStackTrace(e); } } - public static ValidationPanel createValidationPanel(final EqualStringPanel innerPanel) { - final ValidationPanel validationPanel = new ValidationPanel(); - validationPanel.setInnerComponent(innerPanel); - - ValidationGroup group = validationPanel.getValidationGroup(); - validationPanel.addChangeListener(new ChangeListener() { - - public void stateChanged(ChangeEvent e) { - innerPanel.okButton.setEnabled(!validationPanel.isProblem()); - } - }); - //Node field - group.add(innerPanel.textField, new RegexValidator(innerPanel)); - - return validationPanel; - } - - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -130,14 +140,16 @@ private void initComponents() { setOpaque(false); setLayout(new java.awt.GridBagLayout()); - labelPattern.setText(org.openide.util.NbBundle.getMessage(EqualStringPanel.class, "EqualStringPanel.labelPattern.text")); // NOI18N + labelPattern.setText(org.openide.util.NbBundle + .getMessage(EqualStringPanel.class, "EqualStringPanel.labelPattern.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3); add(labelPattern, gridBagConstraints); - textField.setText(org.openide.util.NbBundle.getMessage(EqualStringPanel.class, "EqualStringPanel.textField.text")); // NOI18N + textField.setText( + org.openide.util.NbBundle.getMessage(EqualStringPanel.class, "EqualStringPanel.textField.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; @@ -145,37 +157,38 @@ private void initComponents() { gridBagConstraints.weightx = 1.0; add(textField, gridBagConstraints); - regexCheckbox.setText(org.openide.util.NbBundle.getMessage(EqualStringPanel.class, "EqualStringPanel.regexCheckbox.text")); // NOI18N + regexCheckbox.setText(org.openide.util.NbBundle + .getMessage(EqualStringPanel.class, "EqualStringPanel.regexCheckbox.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; add(regexCheckbox, gridBagConstraints); - okButton.setText(org.openide.util.NbBundle.getMessage(EqualStringPanel.class, "EqualStringPanel.okButton.text")); // NOI18N + okButton.setText( + org.openide.util.NbBundle.getMessage(EqualStringPanel.class, "EqualStringPanel.okButton.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 0; gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3); add(okButton, gridBagConstraints); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JLabel labelPattern; - private javax.swing.JButton okButton; - private javax.swing.JCheckBox regexCheckbox; - private javax.swing.JTextField textField; - // End of variables declaration//GEN-END:variables private static class RegexValidator implements Validator { - private EqualStringPanel panel; + private final EqualStringPanel panel; public RegexValidator(EqualStringPanel panel) { this.panel = panel; } @Override - public boolean validate(Problems problems, String compName, String model) { + public Class modelType() { + return String.class; + } + + @Override + public void validate(Problems problems, String compName, String model) { boolean result = true; if (panel.regexCheckbox.isSelected()) { try { @@ -188,7 +201,6 @@ public boolean validate(Problems problems, String compName, String model) { problems.add(message); } } - return result; } } } diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualStringUIImpl.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualStringUIImpl.java index 0d2cf90145..dc543fdf0d 100644 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualStringUIImpl.java +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/EqualStringUIImpl.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.filters.plugin.attribute; import javax.swing.JPanel; @@ -47,12 +48,12 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = EqualStringUI.class) public class EqualStringUIImpl implements EqualStringUI { + @Override public JPanel getPanel(EqualStringFilter filter) { EqualStringPanel panel = new EqualStringPanel(); panel.setup(filter); diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/ListContainsPanel.form b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/ListContainsPanel.form new file mode 100644 index 0000000000..bd3f873324 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/ListContainsPanel.form @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/ListContainsPanel.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/ListContainsPanel.java new file mode 100644 index 0000000000..4a802efcaa --- /dev/null +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/ListContainsPanel.java @@ -0,0 +1,135 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. +*/ + +package org.gephi.ui.filters.plugin.attribute; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import org.gephi.filters.plugin.attribute.ListAttributeContainsBuilder; +import org.gephi.filters.spi.FilterProperty; +import org.openide.util.Exceptions; + +/** + * @author Mathieu Bastian + */ +public class ListContainsPanel extends javax.swing.JPanel implements ActionListener { + + private ListAttributeContainsBuilder.AttributeContainsFilter filter; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel labelPattern; + private javax.swing.JButton okButton; + private javax.swing.JTextField textField; + // End of variables declaration//GEN-END:variables + + public ListContainsPanel() { + initComponents(); + + okButton.addActionListener(this); + } + + @Override + public void actionPerformed(ActionEvent evt) { + FilterProperty pattern = filter.getProperties()[1]; + try { + if (pattern.getValue() == null || !pattern.getValue().equals(textField.getText())) { + pattern.setValue(textField.getText()); + } + } catch (Exception e) { + Exceptions.printStackTrace(e); + } + } + + public void setup(ListAttributeContainsBuilder.AttributeContainsFilter filter) { + this.filter = filter; + this.setToolTipText(filter.getName() + " '" + filter.getColumn().getTitle() + "'"); + FilterProperty pattern = filter.getProperties()[1]; + try { + textField.setText((String) pattern.getValue()); + } catch (Exception e) { + Exceptions.printStackTrace(e); + } + } + + /** + * This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + java.awt.GridBagConstraints gridBagConstraints; + + labelPattern = new javax.swing.JLabel(); + textField = new javax.swing.JTextField(); + okButton = new javax.swing.JButton(); + + setOpaque(false); + setLayout(new java.awt.GridBagLayout()); + + labelPattern.setText(org.openide.util.NbBundle.getMessage(ListContainsPanel.class, + "ListContainsPanel.labelPattern.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3); + add(labelPattern, gridBagConstraints); + + textField.setText(org.openide.util.NbBundle.getMessage(ListContainsPanel.class, + "ListContainsPanel.textField.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 0; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.weightx = 1.0; + add(textField, gridBagConstraints); + + okButton.setText( + org.openide.util.NbBundle.getMessage(ListContainsPanel.class, "ListContainsPanel.okButton.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 2; + gridBagConstraints.gridy = 0; + gridBagConstraints.insets = new java.awt.Insets(0, 3, 0, 3); + add(okButton, gridBagConstraints); + }// //GEN-END:initComponents +} diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/ListContainsUIImpl.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/ListContainsUIImpl.java new file mode 100644 index 0000000000..a8536d5c2e --- /dev/null +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/attribute/ListContainsUIImpl.java @@ -0,0 +1,64 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. +*/ + +package org.gephi.ui.filters.plugin.attribute; + +import javax.swing.JPanel; +import org.gephi.filters.plugin.attribute.AttributeEqualBuilder.EqualStringFilter; +import org.gephi.filters.plugin.attribute.EqualStringUI; +import org.gephi.filters.plugin.attribute.ListAttributeContainsBuilder; +import org.gephi.filters.plugin.attribute.ListContainsUI; +import org.openide.util.lookup.ServiceProvider; + +/** + * @author Mathieu Bastian + */ +@ServiceProvider(service = ListContainsUI.class) +public class ListContainsUIImpl implements ListContainsUI { + + @Override + public JPanel getPanel(ListAttributeContainsBuilder.AttributeContainsFilter filter) { + ListContainsPanel panel = new ListContainsPanel(); + panel.setup(filter); + return panel; + } +} diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/dynamic/DynamicRangePanel.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/dynamic/DynamicRangePanel.java index 056ad52112..886d8deb8e 100644 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/dynamic/DynamicRangePanel.java +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/dynamic/DynamicRangePanel.java @@ -39,27 +39,29 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.filters.plugin.dynamic; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; -import org.gephi.desktop.perspective.spi.BottomComponent; +import org.gephi.desktop.banner.perspective.spi.BottomComponent; import org.gephi.filters.plugin.dynamic.DynamicRangeBuilder.DynamicRangeFilter; import org.openide.util.Lookup; import org.openide.util.NbBundle; -import org.openide.windows.TopComponent; -import org.openide.windows.WindowManager; /** - * * @author Mathieu Bastian */ public class DynamicRangePanel extends javax.swing.JPanel { private final String OPEN; private final String CLOSE; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JCheckBox keepEmptyCheckbox; + private javax.swing.JButton timelineButton; + // End of variables declaration//GEN-END:variables public DynamicRangePanel() { initComponents(); @@ -72,6 +74,7 @@ public void setup(final DynamicRangeFilter filter) { timelineButton.setText(bottomComponent.isVisible() ? CLOSE : OPEN); timelineButton.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { if (!bottomComponent.isVisible()) { @@ -86,6 +89,7 @@ public void actionPerformed(ActionEvent e) { keepEmptyCheckbox.setSelected(filter.isKeepNull()); keepEmptyCheckbox.addItemListener(new ItemListener() { + @Override public void itemStateChanged(ItemEvent e) { if (!filter.isKeepNull() == keepEmptyCheckbox.isSelected()) { filter.getProperties()[1].setValue(keepEmptyCheckbox.isSelected()); @@ -94,10 +98,10 @@ public void itemStateChanged(ItemEvent e) { }); } - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents @@ -109,21 +113,20 @@ private void initComponents() { setLayout(new java.awt.GridBagLayout()); - timelineButton.setText(org.openide.util.NbBundle.getMessage(DynamicRangePanel.class, "DynamicRangePanel.timelineButton.text")); // NOI18N + timelineButton.setText(org.openide.util.NbBundle + .getMessage(DynamicRangePanel.class, "DynamicRangePanel.timelineButton.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; add(timelineButton, gridBagConstraints); - keepEmptyCheckbox.setText(org.openide.util.NbBundle.getMessage(DynamicRangePanel.class, "DynamicRangePanel.keepEmptyCheckbox.text")); // NOI18N - keepEmptyCheckbox.setToolTipText(org.openide.util.NbBundle.getMessage(DynamicRangePanel.class, "DynamicRangePanel.keepEmptyCheckbox.toolTipText")); // NOI18N + keepEmptyCheckbox.setText(org.openide.util.NbBundle + .getMessage(DynamicRangePanel.class, "DynamicRangePanel.keepEmptyCheckbox.text")); // NOI18N + keepEmptyCheckbox.setToolTipText(org.openide.util.NbBundle + .getMessage(DynamicRangePanel.class, "DynamicRangePanel.keepEmptyCheckbox.toolTipText")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; add(keepEmptyCheckbox, gridBagConstraints); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JCheckBox keepEmptyCheckbox; - private javax.swing.JButton timelineButton; - // End of variables declaration//GEN-END:variables } diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/dynamic/DynamicRangeUIImpl.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/dynamic/DynamicRangeUIImpl.java index 5807f9f63e..43ee9e495f 100644 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/dynamic/DynamicRangeUIImpl.java +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/dynamic/DynamicRangeUIImpl.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.filters.plugin.dynamic; import javax.swing.JPanel; @@ -47,12 +48,12 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author mbastian */ @ServiceProvider(service = DynamicRangeUI.class) public class DynamicRangeUIImpl implements DynamicRangeUI { + @Override public JPanel getPanel(DynamicRangeFilter filter) { DynamicRangePanel panel = new DynamicRangePanel(); panel.setup(filter); diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/edge/EdgeTypePanel.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/edge/EdgeTypePanel.java new file mode 100644 index 0000000000..9f37c8d2fd --- /dev/null +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/edge/EdgeTypePanel.java @@ -0,0 +1,62 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package org.gephi.ui.filters.plugin.edge; + +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import javax.swing.DefaultComboBoxModel; +import org.gephi.filters.plugin.edge.EdgeTypeBuilder; +import org.gephi.filters.plugin.edge.EdgeTypeBuilder.EdgeTypeFilter; + +/** + * @author mbastian + */ +public class EdgeTypePanel extends javax.swing.JPanel { + + private EdgeTypeFilter filter; + private javax.swing.JComboBox comboBox; + + /** + * Creates new form EdgeTypePanel + */ + public EdgeTypePanel() { + initComponents(); + + comboBox.addItemListener(new ItemListener() { + + @Override + public void itemStateChanged(ItemEvent e) { + if (e.getStateChange() == ItemEvent.SELECTED) { + filter.setEdgeTypeLabel(e.getItem()); + } + } + }); + } + + public void setup(final EdgeTypeBuilder.EdgeTypeFilter filter) { + this.filter = filter; + + DefaultComboBoxModel comboBoxModel = new DefaultComboBoxModel(); + for (Object o : filter.getEdgeTypeLabels()) { + comboBoxModel.addElement(o); + } + comboBox.setModel(comboBoxModel); + + if (comboBoxModel.getSize() > 0) { + filter.setEdgeTypeLabel(comboBoxModel.getSelectedItem()); + } + } + + private void initComponents() { + comboBox = new javax.swing.JComboBox(); + + setLayout(new java.awt.BorderLayout()); + + comboBox.setModel(new DefaultComboBoxModel()); + add(comboBox, java.awt.BorderLayout.CENTER); + } +} diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/edge/EdgeTypeUIImpl.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/edge/EdgeTypeUIImpl.java new file mode 100644 index 0000000000..58baf0bba7 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/edge/EdgeTypeUIImpl.java @@ -0,0 +1,62 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.ui.filters.plugin.edge; + +import javax.swing.JPanel; +import org.gephi.filters.plugin.edge.EdgeTypeBuilder; +import org.gephi.filters.plugin.edge.EdgeTypeUI; +import org.openide.util.lookup.ServiceProvider; + +/** + * @author mbastian + */ +@ServiceProvider(service = EdgeTypeUI.class) +public class EdgeTypeUIImpl implements EdgeTypeUI { + + @Override + public JPanel getPanel(EdgeTypeBuilder.EdgeTypeFilter filter) { + EdgeTypePanel panel = new EdgeTypePanel(); + panel.setup(filter); + return panel; + } +} diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/EgoPanel.form b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/EgoPanel.form index 2169bf309b..8d436f5727 100644 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/EgoPanel.form +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/EgoPanel.form @@ -1,4 +1,4 @@ - +
    diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/EgoPanel.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/EgoPanel.java index be9f1288b6..4b410b580a 100644 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/EgoPanel.java +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/EgoPanel.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.filters.plugin.graph; import java.awt.event.ActionEvent; @@ -48,19 +49,29 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.filters.plugin.graph.EgoBuilder.EgoFilter; /** - * * @author Mathieu Bastian */ public class EgoPanel extends javax.swing.JPanel { private EgoFilter egoFilter; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JComboBox depthComboBox; + private javax.swing.JLabel labelDepth; + private javax.swing.JLabel labelNodeId; + private javax.swing.JTextField nodeIdTextField; + private javax.swing.JButton okButton; + private javax.swing.JCheckBox withSelfCheckbox; + // End of variables declaration//GEN-END:variables - /** Creates new form EgoPanel */ + /** + * Creates new form EgoPanel + */ public EgoPanel() { initComponents(); okButton.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { egoFilter.getProperties()[0].setValue(nodeIdTextField.getText()); } @@ -68,6 +79,7 @@ public void actionPerformed(ActionEvent e) { depthComboBox.addItemListener(new ItemListener() { + @Override public void itemStateChanged(ItemEvent e) { int depth = -1; int index = depthComboBox.getSelectedIndex(); @@ -84,6 +96,7 @@ public void itemStateChanged(ItemEvent e) { withSelfCheckbox.addItemListener(new ItemListener() { + @Override public void itemStateChanged(ItemEvent e) { if (!egoFilter.isSelf() == withSelfCheckbox.isSelected()) { egoFilter.getProperties()[2].setValue(withSelfCheckbox.isSelected()); @@ -106,7 +119,8 @@ public void setup(EgoFilter egoFilter) { withSelfCheckbox.setSelected(egoFilter.isSelf()); } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -122,62 +136,61 @@ private void initComponents() { okButton = new javax.swing.JButton(); withSelfCheckbox = new javax.swing.JCheckBox(); - labelNodeId.setText(org.openide.util.NbBundle.getMessage(EgoPanel.class, "EgoPanel.labelNodeId.text")); // NOI18N + labelNodeId + .setText(org.openide.util.NbBundle.getMessage(EgoPanel.class, "EgoPanel.labelNodeId.text")); // NOI18N - nodeIdTextField.setText(org.openide.util.NbBundle.getMessage(EgoPanel.class, "EgoPanel.nodeIdTextField.text")); // NOI18N - nodeIdTextField.setToolTipText(org.openide.util.NbBundle.getMessage(EgoPanel.class, "EgoPanel.nodeIdTextField.toolTipText")); // NOI18N + nodeIdTextField + .setText(org.openide.util.NbBundle.getMessage(EgoPanel.class, "EgoPanel.nodeIdTextField.text")); // NOI18N + nodeIdTextField.setToolTipText( + org.openide.util.NbBundle.getMessage(EgoPanel.class, "EgoPanel.nodeIdTextField.toolTipText")); // NOI18N labelDepth.setText(org.openide.util.NbBundle.getMessage(EgoPanel.class, "EgoPanel.labelDepth.text")); // NOI18N - depthComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "1", "2", "3", "Max" })); + depthComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] {"1", "2", "3", "Max"})); okButton.setText(org.openide.util.NbBundle.getMessage(EgoPanel.class, "EgoPanel.okButton.text")); // NOI18N okButton.setMargin(new java.awt.Insets(2, 7, 2, 7)); - withSelfCheckbox.setText(org.openide.util.NbBundle.getMessage(EgoPanel.class, "EgoPanel.withSelfCheckbox.text")); // NOI18N + withSelfCheckbox + .setText(org.openide.util.NbBundle.getMessage(EgoPanel.class, "EgoPanel.withSelfCheckbox.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(labelNodeId) - .addComponent(labelDepth)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(withSelfCheckbox) - .addComponent(depthComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addComponent(nodeIdTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 117, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(okButton))) - .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(labelNodeId) + .addComponent(labelDepth)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(withSelfCheckbox) + .addComponent(depthComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 70, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addComponent(nodeIdTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 117, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(okButton))) + .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGap(6, 6, 6) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(labelNodeId) - .addComponent(nodeIdTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(okButton)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(depthComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelDepth)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(withSelfCheckbox) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addGap(6, 6, 6) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelNodeId) + .addComponent(nodeIdTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(okButton)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(depthComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(labelDepth)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(withSelfCheckbox) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JComboBox depthComboBox; - private javax.swing.JLabel labelDepth; - private javax.swing.JLabel labelNodeId; - private javax.swing.JTextField nodeIdTextField; - private javax.swing.JButton okButton; - private javax.swing.JCheckBox withSelfCheckbox; - // End of variables declaration//GEN-END:variables } diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/EgoUIImpl.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/EgoUIImpl.java index 7eee2ed53d..f658150f72 100644 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/EgoUIImpl.java +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/EgoUIImpl.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.filters.plugin.graph; import javax.swing.JPanel; @@ -47,12 +48,12 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = EgoUI.class) public class EgoUIImpl implements EgoUI { + @Override public JPanel getPanel(EgoFilter egoFilter) { EgoPanel egoPanel = new EgoPanel(); egoPanel.setup(egoFilter); diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/KCorePanel.form b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/KCorePanel.form index ea85fce2f0..2506447f62 100644 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/KCorePanel.form +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/KCorePanel.form @@ -1,4 +1,4 @@ - + diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/KCorePanel.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/KCorePanel.java index 981b8c2e12..846d9111f5 100644 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/KCorePanel.java +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/KCorePanel.java @@ -39,45 +39,50 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.filters.plugin.graph; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.gephi.filters.plugin.graph.KCoreBuilder.KCoreFilter; import org.gephi.filters.spi.FilterProperty; +import org.openide.util.Exceptions; import org.openide.util.WeakListeners; /** - * * @author Mathieu Bastian */ public class KCorePanel extends javax.swing.JPanel implements ChangeListener { private KCoreFilter filter; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JSpinner degreeSpinner; + // End of variables declaration//GEN-END:variables public KCorePanel() { initComponents(); } + @Override public void stateChanged(ChangeEvent evt) { FilterProperty k = filter.getProperties()[0]; try { - k.setValue((Integer) degreeSpinner.getValue()); + k.setValue(degreeSpinner.getValue()); } catch (Exception e) { - e.printStackTrace(); + Exceptions.printStackTrace(e); } } public void setup(KCoreFilter filter) { this.filter = filter; - degreeSpinner.setModel(new javax.swing.SpinnerNumberModel(filter.getK(), Integer.valueOf(1), null, Integer.valueOf(1))); + degreeSpinner.setModel(new javax.swing.SpinnerNumberModel(filter.getK(), 1, null, 1)); degreeSpinner.getModel().addChangeListener(WeakListeners.change(KCorePanel.this, degreeSpinner.getModel())); } - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents @@ -87,11 +92,9 @@ private void initComponents() { setLayout(new java.awt.GridBagLayout()); - degreeSpinner.setModel(new javax.swing.SpinnerNumberModel(Integer.valueOf(1), Integer.valueOf(1), null, Integer.valueOf(1))); + degreeSpinner.setModel( + new javax.swing.SpinnerNumberModel(Integer.valueOf(1), Integer.valueOf(1), null, Integer.valueOf(1))); degreeSpinner.setPreferredSize(new java.awt.Dimension(65, 28)); add(degreeSpinner, new java.awt.GridBagConstraints()); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JSpinner degreeSpinner; - // End of variables declaration//GEN-END:variables } diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/KCoreUIImpl.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/KCoreUIImpl.java index 15067aabae..6365c7c6bc 100644 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/KCoreUIImpl.java +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/KCoreUIImpl.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.filters.plugin.graph; import javax.swing.JPanel; @@ -47,16 +48,16 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = KCoreUI.class) public class KCoreUIImpl implements KCoreUI { + @Override public JPanel getPanel(KCoreFilter filter) { KCorePanel kCorePanel = new KCorePanel(); kCorePanel.setup(filter); return kCorePanel; } - + } diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/NeighborsPanel.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/NeighborsPanel.java index eef7404fc0..ea48abeb0a 100644 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/NeighborsPanel.java +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/NeighborsPanel.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.filters.plugin.graph; import java.awt.event.ItemEvent; @@ -46,19 +47,26 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.filters.plugin.graph.NeighborsBuilder.NeighborsFilter; /** - * * @author Sebastien Heymann */ public class NeighborsPanel extends javax.swing.JPanel { private NeighborsFilter neighborsFilter; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JComboBox depthComboBox; + private javax.swing.JLabel labelDepth; + private javax.swing.JCheckBox withSelfCheckbox; + // End of variables declaration//GEN-END:variables - /** Creates new form NeighborsPanel */ + /** + * Creates new form NeighborsPanel + */ public NeighborsPanel() { initComponents(); depthComboBox.addItemListener(new ItemListener() { + @Override public void itemStateChanged(ItemEvent e) { int depth = -1; int index = depthComboBox.getSelectedIndex(); @@ -75,6 +83,7 @@ public void itemStateChanged(ItemEvent e) { withSelfCheckbox.addItemListener(new ItemListener() { + @Override public void itemStateChanged(ItemEvent e) { if (!neighborsFilter.isSelf() == withSelfCheckbox.isSelected()) { neighborsFilter.getProperties()[1].setValue(withSelfCheckbox.isSelected()); @@ -96,7 +105,8 @@ public void setup(NeighborsFilter neighborsFilter) { withSelfCheckbox.setSelected(neighborsFilter.isSelf()); } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -109,40 +119,39 @@ private void initComponents() { depthComboBox = new javax.swing.JComboBox(); withSelfCheckbox = new javax.swing.JCheckBox(); - labelDepth.setText(org.openide.util.NbBundle.getMessage(NeighborsPanel.class, "NeighborsPanel.labelDepth.text")); // NOI18N + labelDepth.setText( + org.openide.util.NbBundle.getMessage(NeighborsPanel.class, "NeighborsPanel.labelDepth.text")); // NOI18N - depthComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "1", "2", "3", "Max" })); + depthComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] {"1", "2", "3", "Max"})); - withSelfCheckbox.setText(org.openide.util.NbBundle.getMessage(NeighborsPanel.class, "NeighborsPanel.withSelfCheckbox.text")); // NOI18N + withSelfCheckbox.setText(org.openide.util.NbBundle + .getMessage(NeighborsPanel.class, "NeighborsPanel.withSelfCheckbox.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(labelDepth) - .addGap(23, 23, 23) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(withSelfCheckbox) - .addComponent(depthComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(112, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(labelDepth) + .addGap(23, 23, 23) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(withSelfCheckbox) + .addComponent(depthComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 70, + javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap(112, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(depthComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelDepth)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(withSelfCheckbox) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(depthComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(labelDepth)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(withSelfCheckbox) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JComboBox depthComboBox; - private javax.swing.JLabel labelDepth; - private javax.swing.JCheckBox withSelfCheckbox; - // End of variables declaration//GEN-END:variables } diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/NeighborsUIImpl.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/NeighborsUIImpl.java index 1fae065e6a..a4164e8d33 100644 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/NeighborsUIImpl.java +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/NeighborsUIImpl.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.filters.plugin.graph; import javax.swing.JPanel; @@ -47,12 +48,12 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Sebastien Heymann */ @ServiceProvider(service = NeighborsUI.class) public class NeighborsUIImpl implements NeighborsUI { + @Override public JPanel getPanel(NeighborsFilter neighborsFilter) { NeighborsPanel neighborsPanel = new NeighborsPanel(); neighborsPanel.setup(neighborsFilter); diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/RangePanel.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/RangePanel.java index 4450cdfdcf..1c267d03c6 100644 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/RangePanel.java +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/RangePanel.java @@ -39,12 +39,15 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.filters.plugin.graph; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.text.DecimalFormat; import java.text.NumberFormat; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.swing.SwingUtilities; import org.gephi.filters.api.Range; import org.gephi.filters.spi.RangeFilter; @@ -53,15 +56,18 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.ui.filters.plugin.JQuickHistogram; /** - * * @author Mathieu Bastian */ public class RangePanel extends javax.swing.JPanel { - private JQuickHistogram histogram; + private final JQuickHistogram histogram; //Info private Object[] values; private RangeFilter filter; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPanel histogramPanel; + private javax.swing.JPanel rangeSliderPanel; + // End of variables declaration//GEN-END:variables public RangePanel() { initComponents(); @@ -78,21 +84,26 @@ public void setup(final RangeFilter rangeFilter) { } else { new Thread(new Runnable() { + @Override public void run() { final JRangeSliderPanel rangeSlider = (JRangeSliderPanel) rangeSliderPanel; values = range.getValues(); rangeSlider.addPropertyChangeListener(new PropertyChangeListener() { + @Override public void propertyChange(PropertyChangeEvent evt) { try { if (evt.getPropertyName().equals(JRangeSliderPanel.LOWER_BOUND)) { Range oldRange = (Range) filter.getRangeProperty().getValue(); - final Range newRange = new Range((Number) rangeSlider.getRange().getLowerBound(), (Number) rangeSlider.getRange().getUpperBound(), oldRange.getMinimum(), oldRange.getMaximum(), oldRange.getValues()); + final Range newRange = new Range(rangeSlider.getRange().getLowerBound(), + rangeSlider.getRange().getUpperBound(), oldRange.getMinimum(), + oldRange.getMaximum(), oldRange.getValues()); if (!oldRange.equals(newRange)) { filter.getRangeProperty().setValue(newRange); new Thread(new Runnable() { + @Override public void run() { setupHistogram(filter, newRange); } @@ -100,11 +111,14 @@ public void run() { } } else if (evt.getPropertyName().equals(JRangeSliderPanel.UPPER_BOUND)) { final Range oldRange = (Range) filter.getRangeProperty().getValue(); - final Range newRange = new Range((Number) rangeSlider.getRange().getLowerBound(), (Number) rangeSlider.getRange().getUpperBound(), oldRange.getMinimum(), oldRange.getMaximum(), oldRange.getValues()); + final Range newRange = new Range(rangeSlider.getRange().getLowerBound(), + rangeSlider.getRange().getUpperBound(), oldRange.getMinimum(), + oldRange.getMaximum(), oldRange.getValues()); if (!oldRange.equals(newRange)) { filter.getRangeProperty().setValue(newRange); new Thread(new Runnable() { + @Override public void run() { setupHistogram(filter, newRange); } @@ -112,16 +126,21 @@ public void run() { } } } catch (Exception e) { - e.printStackTrace(); + Logger.getLogger("").log(Level.SEVERE, "Error with range slider", e); } } }); SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { - rangeSlider.setRange(new JRangeSliderPanel.Range( - rangeSlider, range.getMinimum(), range.getMaximum(), range.getLowerBound(), range.getUpperBound())); + rangeSlider.setRange( + JRangeSliderPanel.Range.build( + rangeSlider, range.getMinimum(), range.getMaximum(), range.getLowerBound(), + range.getUpperBound() + ) + ); } }); setupHistogram(rangeFilter, range); @@ -154,30 +173,31 @@ public void run() { private void setupHistogram(final RangeFilter rangeFilter, final Range range) { histogram.clear(); - for (int i = 0; i < values.length; i++) { - histogram.addData(values[i]); + for (Object value : values) { + histogram.addData(value); } histogram.sortData(); double rangeLowerBound = 0.0; double rangeUpperBound = 0.0; if (range.getRangeType().equals(Integer.class)) { - rangeLowerBound = ((Integer) range.getLowerBound()).doubleValue(); - rangeUpperBound = ((Integer) range.getUpperBound()).doubleValue(); + rangeLowerBound = range.getLowerBound().doubleValue(); + rangeUpperBound = range.getUpperBound().doubleValue(); } else if (range.getRangeType().equals(Float.class)) { - rangeLowerBound = ((Float) range.getLowerBound()).doubleValue(); - rangeUpperBound = ((Float) range.getUpperBound()).doubleValue(); + rangeLowerBound = range.getLowerBound().doubleValue(); + rangeUpperBound = range.getUpperBound().doubleValue(); } else if (range.getRangeType().equals(Double.class)) { - rangeLowerBound = ((Double) range.getLowerBound()).doubleValue(); - rangeUpperBound = ((Double) range.getUpperBound()).doubleValue(); + rangeLowerBound = ((Double) range.getLowerBound()); + rangeUpperBound = ((Double) range.getUpperBound()); } else if (range.getRangeType().equals(Long.class)) { - rangeLowerBound = ((Long) range.getLowerBound()).doubleValue(); - rangeUpperBound = ((Long) range.getUpperBound()).doubleValue(); + rangeLowerBound = range.getLowerBound().doubleValue(); + rangeUpperBound = range.getUpperBound().doubleValue(); } histogram.setLowerBound(rangeLowerBound); histogram.setUpperBound(rangeUpperBound); SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { revalidate(); repaint(); @@ -195,9 +215,11 @@ private RichTooltip buildTooltip() { String averageInRange = formatter.format(histogram.getAverageInRange()); RichTooltip richTooltip = new RichTooltip(); richTooltip.setTitle("Statistics (In-Range)"); - richTooltip.addDescriptionSection("# of Values: " + histogram.countValues() + " (" + histogram.countInRange() + ")"); + richTooltip.addDescriptionSection( + "# of Values: " + histogram.countValues() + " (" + histogram.countInRange() + ")"); richTooltip.addDescriptionSection("Average: " + average + " (" + averageInRange + ")"); - richTooltip.addDescriptionSection("Median: " + histogram.getMedian() + " (" + histogram.getMedianInRange() + ")"); + richTooltip.addDescriptionSection( + "Median: " + histogram.getMedian() + " (" + histogram.getMedianInRange() + ")"); return richTooltip; } @@ -223,8 +245,4 @@ private void initComponents() { histogramPanel.setLayout(new java.awt.BorderLayout()); add(histogramPanel, java.awt.BorderLayout.SOUTH); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JPanel histogramPanel; - private javax.swing.JPanel rangeSliderPanel; - // End of variables declaration//GEN-END:variables } diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/RangeUIImpl.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/RangeUIImpl.java index bd9beab107..afd8ccafe6 100644 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/RangeUIImpl.java +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/RangeUIImpl.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.filters.plugin.graph; import javax.swing.JPanel; @@ -47,12 +48,12 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = RangeUI.class) public class RangeUIImpl implements RangeUI { + @Override public JPanel getPanel(RangeFilter rangeFilter) { RangePanel rangePanel = new RangePanel(); rangePanel.setup(rangeFilter); diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/ShortestPathPanel.form b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/ShortestPathPanel.form new file mode 100644 index 0000000000..0e51745213 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/ShortestPathPanel.form @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/ShortestPathPanel.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/ShortestPathPanel.java new file mode 100644 index 0000000000..991d281c13 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/ShortestPathPanel.java @@ -0,0 +1,159 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.ui.filters.plugin.graph; + +import org.gephi.filters.plugin.graph.ShortestPathBuilder.ShortestPathFilter; + +/** + * @author Mathieu Bastian + */ +public class ShortestPathPanel extends javax.swing.JPanel { + + private ShortestPathFilter shortestPathFilter; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel labelNodeId1; + private javax.swing.JLabel labelNodeId2; + private javax.swing.JTextField nodeIdTextField; + private javax.swing.JTextField nodeIdTextField2; + private javax.swing.JButton okButton1; + private javax.swing.JButton okButton2; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form EgoPanel + */ + public ShortestPathPanel() { + initComponents(); + + okButton1.addActionListener(e -> shortestPathFilter.getProperties()[0].setValue(nodeIdTextField.getText())); + + okButton2.addActionListener(e -> shortestPathFilter.getProperties()[1].setValue(nodeIdTextField2.getText())); + } + + public void setup(ShortestPathFilter shortestPathFilter) { + this.shortestPathFilter = shortestPathFilter; + nodeIdTextField.setText(shortestPathFilter.getFirstNodePattern()); + nodeIdTextField2.setText(shortestPathFilter.getSecondNodePattern()); + } + + /** + * This method is called from within the constructor to + * initialize the form. + * WARNING: Do NOT modify this code. The content of this method is + * always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + labelNodeId1 = new javax.swing.JLabel(); + nodeIdTextField = new javax.swing.JTextField(); + okButton1 = new javax.swing.JButton(); + labelNodeId2 = new javax.swing.JLabel(); + nodeIdTextField2 = new javax.swing.JTextField(); + okButton2 = new javax.swing.JButton(); + + labelNodeId1.setText(org.openide.util.NbBundle.getMessage(ShortestPathPanel.class, + "ShortestPathPanel.labelNodeId1.text")); // NOI18N + + nodeIdTextField.setText(org.openide.util.NbBundle.getMessage(ShortestPathPanel.class, + "ShortestPathPanel.nodeIdTextField.text")); // NOI18N + nodeIdTextField.setToolTipText(org.openide.util.NbBundle.getMessage(ShortestPathPanel.class, + "ShortestPathPanel.nodeIdTextField.toolTipText")); // NOI18N + + okButton1.setText(org.openide.util.NbBundle.getMessage(ShortestPathPanel.class, + "ShortestPathPanel.okButton1.text")); // NOI18N + okButton1.setMargin(new java.awt.Insets(2, 7, 2, 7)); + + labelNodeId2.setText(org.openide.util.NbBundle.getMessage(ShortestPathPanel.class, + "ShortestPathPanel.labelNodeId2.text")); // NOI18N + + nodeIdTextField2.setText(org.openide.util.NbBundle.getMessage(ShortestPathPanel.class, + "ShortestPathPanel.nodeIdTextField2.text")); // NOI18N + nodeIdTextField2.setToolTipText(org.openide.util.NbBundle.getMessage(ShortestPathPanel.class, + "ShortestPathPanel.nodeIdTextField2.toolTipText")); // NOI18N + + okButton2.setText(org.openide.util.NbBundle.getMessage(ShortestPathPanel.class, + "ShortestPathPanel.okButton2.text")); // NOI18N + okButton2.setMargin(new java.awt.Insets(2, 7, 2, 7)); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(labelNodeId1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(nodeIdTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 106, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addComponent(labelNodeId2) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(nodeIdTextField2))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(okButton1) + .addComponent(okButton2, javax.swing.GroupLayout.Alignment.TRAILING)) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(6, 6, 6) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelNodeId1) + .addComponent(nodeIdTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(okButton1)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelNodeId2) + .addComponent(nodeIdTextField2, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(okButton2)) + .addContainerGap(18, Short.MAX_VALUE)) + ); + }// //GEN-END:initComponents +} diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/ShortestPathUIImpl.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/ShortestPathUIImpl.java new file mode 100644 index 0000000000..8cb39f25ad --- /dev/null +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/graph/ShortestPathUIImpl.java @@ -0,0 +1,62 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. +*/ + +package org.gephi.ui.filters.plugin.graph; + +import javax.swing.JPanel; +import org.gephi.filters.plugin.graph.ShortestPathBuilder.ShortestPathFilter; +import org.gephi.filters.plugin.graph.ShortestPathUI; +import org.openide.util.lookup.ServiceProvider; + +/** + * @author Mathieu Bastian + */ +@ServiceProvider(service = ShortestPathUI.class) +public class ShortestPathUIImpl implements ShortestPathUI { + + @Override + public JPanel getPanel(ShortestPathFilter shortestPathFilter) { + ShortestPathPanel panel = new ShortestPathPanel(); + panel.setup(shortestPathFilter); + return panel; + } +} diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/hierarchy/LevelPanel.form b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/hierarchy/LevelPanel.form deleted file mode 100644 index c8e51c4780..0000000000 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/hierarchy/LevelPanel.form +++ /dev/null @@ -1,28 +0,0 @@ - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/hierarchy/LevelPanel.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/hierarchy/LevelPanel.java deleted file mode 100644 index cdeb147ecb..0000000000 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/hierarchy/LevelPanel.java +++ /dev/null @@ -1,115 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.ui.filters.plugin.hierarchy; - -import java.awt.Font; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import javax.swing.SwingUtilities; -import org.gephi.filters.plugin.hierarchy.LevelBuilder.LevelFilter; -import org.jdesktop.swingx.JXHyperlink; - -/** - * - * @author Mathieu Bastian - */ -public class LevelPanel extends javax.swing.JPanel implements ActionListener { - - private final Object LABEL_KEY = new Object(); - private LevelFilter filter; - - public LevelPanel() { - initComponents(); - net.miginfocom.swing.MigLayout migLayout1 = new net.miginfocom.swing.MigLayout(); - migLayout1.setColumnConstraints("[center]"); - setLayout(migLayout1); - } - - public void actionPerformed(ActionEvent e) { - Integer level = (Integer) ((JXHyperlink) e.getSource()).getClientProperty(LABEL_KEY); - filter.getProperties()[0].setValue(level); - } - - public void setup(LevelFilter filter) { - final int height = filter.getHeight(); - final int lvl = filter.getLevel(); - SwingUtilities.invokeLater(new Runnable() { - - public void run() { - removeAll(); - for (int i = 0; i < height; i++) { - JXHyperlink label = new JXHyperlink(); - label.setText("Level " + i); - if (i == lvl) { - label.setFont(label.getFont().deriveFont(Font.BOLD)); - } - label.putClientProperty(LABEL_KEY, new Integer(i)); - label.addActionListener(LevelPanel.this); - add(label, "wrap"); - } - } - }); - } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // //GEN-BEGIN:initComponents - private void initComponents() { - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 400, Short.MAX_VALUE) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 300, Short.MAX_VALUE) - ); - }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - // End of variables declaration//GEN-END:variables -} diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/hierarchy/LevelUIImpl.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/hierarchy/LevelUIImpl.java deleted file mode 100644 index a52902c60f..0000000000 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/hierarchy/LevelUIImpl.java +++ /dev/null @@ -1,61 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.ui.filters.plugin.hierarchy; - -import javax.swing.JPanel; -import org.gephi.filters.plugin.hierarchy.LevelBuilder.LevelFilter; -import org.gephi.filters.plugin.hierarchy.LevelUI; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = LevelUI.class) -public class LevelUIImpl implements LevelUI { - - public JPanel getPanel(LevelFilter filter) { - LevelPanel levelPanel = new LevelPanel(); - levelPanel.setup(filter); - return levelPanel; - } -} diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/operator/MASKEdgePanel.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/operator/MASKEdgePanel.java index a23d5ffd95..2e90c7dbc0 100644 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/operator/MASKEdgePanel.java +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/operator/MASKEdgePanel.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.filters.plugin.operator; import java.awt.event.ActionEvent; @@ -46,12 +47,18 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.filters.plugin.operator.MASKBuilderEdge; /** - * * @author Mathieu Bastian */ public class MASKEdgePanel extends javax.swing.JPanel implements ActionListener { private MASKBuilderEdge.MaskEdgeOperator operator; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JRadioButton anyButton; + private javax.swing.JRadioButton bothButton; + private javax.swing.ButtonGroup group; + private javax.swing.JRadioButton sourceButton; + private javax.swing.JRadioButton targetButton; + // End of variables declaration//GEN-END:variables public MASKEdgePanel() { initComponents(); @@ -61,6 +68,7 @@ public MASKEdgePanel() { targetButton.addActionListener(this); } + @Override public void actionPerformed(ActionEvent e) { if (operator != null) { MASKBuilderEdge.MaskEdgeOperator.EdgesOptions option = MASKBuilderEdge.MaskEdgeOperator.EdgesOptions.ANY; @@ -77,8 +85,9 @@ public void actionPerformed(ActionEvent e) { public void setup(MASKBuilderEdge.MaskEdgeOperator operator) { this.operator = operator; - MASKBuilderEdge.MaskEdgeOperator.EdgesOptions option = MASKBuilderEdge.MaskEdgeOperator.EdgesOptions.valueOf(operator.getOption()); - switch(option) { + MASKBuilderEdge.MaskEdgeOperator.EdgesOptions option = + MASKBuilderEdge.MaskEdgeOperator.EdgesOptions.valueOf(operator.getOption()); + switch (option) { case ANY: anyButton.setSelected(true); break; @@ -94,7 +103,8 @@ public void setup(MASKBuilderEdge.MaskEdgeOperator operator) { } } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -113,7 +123,8 @@ private void initComponents() { setLayout(new java.awt.GridBagLayout()); group.add(sourceButton); - sourceButton.setText(org.openide.util.NbBundle.getMessage(MASKEdgePanel.class, "MASKEdgePanel.sourceButton.text")); // NOI18N + sourceButton.setText( + org.openide.util.NbBundle.getMessage(MASKEdgePanel.class, "MASKEdgePanel.sourceButton.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; @@ -121,7 +132,8 @@ private void initComponents() { add(sourceButton, gridBagConstraints); group.add(targetButton); - targetButton.setText(org.openide.util.NbBundle.getMessage(MASKEdgePanel.class, "MASKEdgePanel.targetButton.text")); // NOI18N + targetButton.setText( + org.openide.util.NbBundle.getMessage(MASKEdgePanel.class, "MASKEdgePanel.targetButton.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; @@ -130,7 +142,8 @@ private void initComponents() { group.add(anyButton); anyButton.setSelected(true); - anyButton.setText(org.openide.util.NbBundle.getMessage(MASKEdgePanel.class, "MASKEdgePanel.anyButton.text")); // NOI18N + anyButton.setText( + org.openide.util.NbBundle.getMessage(MASKEdgePanel.class, "MASKEdgePanel.anyButton.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; @@ -139,7 +152,8 @@ private void initComponents() { add(anyButton, gridBagConstraints); group.add(bothButton); - bothButton.setText(org.openide.util.NbBundle.getMessage(MASKEdgePanel.class, "MASKEdgePanel.bothButton.text")); // NOI18N + bothButton.setText( + org.openide.util.NbBundle.getMessage(MASKEdgePanel.class, "MASKEdgePanel.bothButton.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; @@ -147,11 +161,4 @@ private void initComponents() { gridBagConstraints.insets = new java.awt.Insets(0, 20, 0, 0); add(bothButton, gridBagConstraints); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JRadioButton anyButton; - private javax.swing.JRadioButton bothButton; - private javax.swing.ButtonGroup group; - private javax.swing.JRadioButton sourceButton; - private javax.swing.JRadioButton targetButton; - // End of variables declaration//GEN-END:variables } diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/operator/MASKEdgeUIImpl.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/operator/MASKEdgeUIImpl.java index 3d44afa452..ee7623a7de 100644 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/operator/MASKEdgeUIImpl.java +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/operator/MASKEdgeUIImpl.java @@ -48,12 +48,12 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = MASKEdgeUI.class) public class MASKEdgeUIImpl implements MASKEdgeUI { + @Override public JPanel getPanel(MaskEdgeOperator filter) { MASKEdgePanel panel = new MASKEdgePanel(); panel.setup(filter); diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/partition/PartitionPanel.form b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/partition/PartitionPanel.form index 38c6db61b3..7600e09b30 100644 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/partition/PartitionPanel.form +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/partition/PartitionPanel.form @@ -1,4 +1,4 @@ - +
    diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/partition/PartitionPanel.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/partition/PartitionPanel.java index 9a76f60b78..b78b447dd5 100644 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/partition/PartitionPanel.java +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/partition/PartitionPanel.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.filters.plugin.partition; import java.awt.Color; @@ -50,18 +51,15 @@ Development and Distribution License("CDDL") (collectively, the import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; -import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.text.NumberFormat; -import java.util.ArrayList; -import java.util.Arrays; import java.util.HashSet; -import java.util.List; import java.util.Set; import javax.swing.BorderFactory; import javax.swing.DefaultListCellRenderer; import javax.swing.DefaultListModel; import javax.swing.Icon; +import javax.swing.JCheckBoxMenuItem; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.JMenuItem; @@ -69,19 +67,25 @@ Development and Distribution License("CDDL") (collectively, the import javax.swing.ListCellRenderer; import javax.swing.SwingUtilities; import javax.swing.plaf.basic.BasicListUI; +import org.gephi.appearance.api.Partition; import org.gephi.filters.plugin.partition.PartitionBuilder.PartitionFilter; -import org.gephi.partition.api.Part; -import org.gephi.partition.api.Partition; +import org.gephi.filters.spi.FilterProperty; +import org.gephi.graph.api.AttributeUtils; +import org.openide.util.Exceptions; import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class PartitionPanel extends javax.swing.JPanel { private PartitionFilter filter; private JPopupMenu popupMenu; + private JMenuItem flattenItem; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JList list; + // End of variables declaration//GEN-END:variables public PartitionPanel() { initComponents(); @@ -91,9 +95,11 @@ public PartitionPanel() { final ListCellRenderer renderer = new DefaultListCellRenderer() { @Override - public Component getListCellRendererComponent(final JList list, final Object value, final int index, final boolean isSelected, final boolean cellHasFocus) { + public Component getListCellRendererComponent(final JList list, final Object value, final int index, + final boolean isSelected, final boolean cellHasFocus) { - final JLabel label = (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + final JLabel label = + (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); PartWrapper pw = (PartWrapper) value; if (pw.isEnabled()) { label.setEnabled(true); @@ -156,118 +162,179 @@ public void mouseReleased(MouseEvent e) { createPopup(); } + public static void computeListSize(final JList list) { + if (list.getUI() instanceof BasicListUI) { + final BasicListUI ui = (BasicListUI) list.getUI(); + + try { + final Method method = BasicListUI.class.getDeclaredMethod("updateLayoutState"); + method.setAccessible(true); + method.invoke(ui); + list.revalidate(); + list.repaint(); + } catch (Exception e) { + Exceptions.printStackTrace(e); + } + } + } + public void setup(final PartitionFilter filter) { this.filter = filter; - final Partition partition = filter.getCurrentPartition(); + flattenItem.setEnabled(filter.getColumn().isArray()); + flattenItem.setSelected(filter.isFlattenList()); + final Partition partition = filter.getPartition(); if (partition != null) { - refresh(partition, filter.getParts()); + refresh(partition, filter); } } - private void refresh(Partition partition, List currentParts) { + private void refresh(Partition partition, PartitionFilter filter) { final DefaultListModel model = new DefaultListModel(); - - Set filterParts = new HashSet(currentParts); - Part[] parts = partition.getParts(); - Arrays.sort(parts); - for (int i = 0; i < parts.length; i++) { - final Part p = parts[parts.length - 1 - i]; - PartWrapper pw = new PartWrapper(p, p.getColor()); - pw.setEnabled(filterParts.contains(p)); - model.add(i, pw); + Set currentParts = filter.getParts(); + + if (filter.isFlattenList() && filter.getColumn().isArray()) { + int i = 0; + for (Object p : filter.getFlattenParts()) { + PartWrapper pw = new PartWrapper(p, 0, new Color(0xDDDDDD)); + pw.setFlattened(true); + pw.setEnabled(currentParts.contains(p)); + model.add(i++, pw); + } + } else { + int i = 0; + for (Object p : partition.getSortedValues(filter.getGraph())) { + PartWrapper pw = new PartWrapper(p, partition.percentage(p, filter.getGraph()), partition.getColor(p)); + pw.setEnabled(currentParts.contains(p)); + model.add(i++, pw); + } } list.setModel(model); } + private void createPopup() { + popupMenu = new JPopupMenu(); + JMenuItem refreshItem = + new JMenuItem(NbBundle.getMessage(PartitionPanel.class, "PartitionPanel.action.refresh")); + refreshItem.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + setup(filter); + } + }); + popupMenu.add(refreshItem); + JMenuItem selectItem = + new JMenuItem(NbBundle.getMessage(PartitionPanel.class, "PartitionPanel.action.selectall")); + selectItem.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + filter.selectAll(); + refresh(filter.getPartition(), filter); + } + }); + popupMenu.add(selectItem); + JMenuItem unselectItem = + new JMenuItem(NbBundle.getMessage(PartitionPanel.class, "PartitionPanel.action.unselectall")); + unselectItem.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + filter.unselectAll(); + refresh(filter.getPartition(), filter); + } + }); + popupMenu.add(unselectItem); + + flattenItem = + new JCheckBoxMenuItem(NbBundle.getMessage(PartitionPanel.class, "PartitionPanel.action.flattenList")); + flattenItem.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + FilterProperty flattenList = filter.getProperties()[2]; + flattenList.setValue(!(Boolean)flattenList.getValue()); + refresh(filter.getPartition(), filter); + } + }); + popupMenu.add(flattenItem); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + jScrollPane1 = new javax.swing.JScrollPane(); + list = new javax.swing.JList(); + + setLayout(new java.awt.BorderLayout()); + + jScrollPane1.setBorder(null); + jScrollPane1.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); + + list.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); + list.setOpaque(false); + jScrollPane1.setViewportView(list); + + add(jScrollPane1, java.awt.BorderLayout.CENTER); + }// //GEN-END:initComponents + private static class PartWrapper { - private final Part part; + private static final NumberFormat FORMATTER = NumberFormat.getPercentInstance(); + private final Object part; + private final float percentage; private final PaletteIcon icon; private final PaletteIcon disabledIcon; private boolean enabled = false; - private static final NumberFormat formatter = NumberFormat.getPercentInstance(); + private boolean flattened = false; - public PartWrapper(Part part, Color color) { + public PartWrapper(Object part, float percentage, Color color) { this.part = part; + this.percentage = percentage; this.icon = new PaletteIcon(color); this.disabledIcon = new PaletteIcon(); - formatter.setMaximumFractionDigits(2); + FORMATTER.setMaximumFractionDigits(2); } public PaletteIcon getIcon() { return icon; } - public Part getPart() { + public Object getPart() { return part; } @Override public String toString() { - String percentage = formatter.format(part.getPercentage()); - return part.getDisplayName() + " (" + percentage + ")"; + String displayName = part == null ? "null" : + part.getClass().isArray() ? AttributeUtils.printArray(part) : part.toString(); + if (flattened) { + return displayName; + } + String percentageStr = FORMATTER.format(percentage / 100f); + return displayName + " (" + percentageStr + ")"; } public boolean isEnabled() { return enabled; } - public void setEnabled(boolean enabled) { - this.enabled = enabled; + public boolean isFlattened() { + return flattened; } - } - - private void createPopup() { - popupMenu = new JPopupMenu(); - JMenuItem refreshItem = new JMenuItem(NbBundle.getMessage(PartitionPanel.class, "PartitionPanel.action.refresh")); - refreshItem.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - setup(filter); - } - }); - popupMenu.add(refreshItem); - JMenuItem selectItem = new JMenuItem(NbBundle.getMessage(PartitionPanel.class, "PartitionPanel.action.selectall")); - selectItem.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - filter.selectAll(); - refresh(filter.getCurrentPartition(), Arrays.asList(filter.getCurrentPartition().getParts())); - } - }); - popupMenu.add(selectItem); - JMenuItem unselectItem = new JMenuItem(NbBundle.getMessage(PartitionPanel.class, "PartitionPanel.action.unselectall")); - unselectItem.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - filter.unselectAll(); - refresh(filter.getCurrentPartition(), new ArrayList()); - } - }); - popupMenu.add(unselectItem); - } - - public static void computeListSize(final JList list) { - if (list.getUI() instanceof BasicListUI) { - final BasicListUI ui = (BasicListUI) list.getUI(); + public void setFlattened(boolean flattened) { + this.flattened = flattened; + } - try { - final Method method = BasicListUI.class.getDeclaredMethod("updateLayoutState"); - method.setAccessible(true); - method.invoke(ui); - list.revalidate(); - list.repaint(); - } catch (final SecurityException e) { - e.printStackTrace(); - } catch (final NoSuchMethodException e) { - e.printStackTrace(); - } catch (final IllegalArgumentException e) { - e.printStackTrace(); - } catch (final IllegalAccessException e) { - e.printStackTrace(); - } catch (final InvocationTargetException e) { - e.printStackTrace(); - } + public void setEnabled(boolean enabled) { + this.enabled = enabled; } } @@ -292,47 +359,23 @@ public PaletteIcon() { COLOR_HEIGHT = 11; } + @Override public int getIconWidth() { return COLOR_WIDTH; } + @Override public int getIconHeight() { return COLOR_HEIGHT + 2; } + @Override public void paintIcon(Component c, Graphics g, int x, int y) { + g.setColor(color); + g.fillRect(x + 2, y, COLOR_WIDTH, COLOR_HEIGHT); g.setColor(BORDER_COLOR); g.drawRect(x + 2, y, COLOR_WIDTH, COLOR_HEIGHT); - g.setColor(color); - g.fillRect(x + 2 + 1, y + 1, COLOR_WIDTH - 1, COLOR_HEIGHT - 1); + } } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // //GEN-BEGIN:initComponents - private void initComponents() { - - jScrollPane1 = new javax.swing.JScrollPane(); - list = new javax.swing.JList(); - - setLayout(new java.awt.BorderLayout()); - - jScrollPane1.setBorder(null); - jScrollPane1.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); - - list.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION); - list.setOpaque(false); - jScrollPane1.setViewportView(list); - - add(jScrollPane1, java.awt.BorderLayout.CENTER); - }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JScrollPane jScrollPane1; - private javax.swing.JList list; - // End of variables declaration//GEN-END:variables } diff --git a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/partition/PartitionUIImpl.java b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/partition/PartitionUIImpl.java index 1102e4ee5d..d09b1b563e 100644 --- a/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/partition/PartitionUIImpl.java +++ b/modules/FiltersPluginUI/src/main/java/org/gephi/ui/filters/plugin/partition/PartitionUIImpl.java @@ -39,22 +39,21 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.filters.plugin.partition; import javax.swing.JPanel; import org.gephi.filters.plugin.partition.PartitionBuilder.PartitionFilter; import org.gephi.filters.plugin.partition.PartitionUI; - - import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = PartitionUI.class) public class PartitionUIImpl implements PartitionUI { + @Override public JPanel getPanel(PartitionFilter filter) { PartitionPanel panel = new PartitionPanel(); panel.setup(filter); diff --git a/modules/FiltersPluginUI/src/main/nbm/manifest.mf b/modules/FiltersPluginUI/src/main/nbm/manifest.mf index 54a6efa1ee..9c0d4c6852 100644 --- a/modules/FiltersPluginUI/src/main/nbm/manifest.mf +++ b/modules/FiltersPluginUI/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/ui/filters/plugin/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Plugin +OpenIDE-Module-Name: Filters Plugin UI \ No newline at end of file diff --git a/modules/FiltersPluginUI/src/main/nbm/module.xml b/modules/FiltersPluginUI/src/main/nbm/module.xml deleted file mode 100644 index cfeb4cc687..0000000000 --- a/modules/FiltersPluginUI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle.properties index 6ba0b7cda5..60b19817b0 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle.properties @@ -1,3 +1 @@ -OpenIDE-Module-Display-Category=Plugin -OpenIDE-Module-Name=Filters Plugin UI OpenIDE-Module-Short-Description=Filters implementations UI diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_ar.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_ca.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_ca.properties new file mode 100644 index 0000000000..d52416db7b --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_ca.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=Filters implementations UI diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_cs.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_cs.properties index 01f5773206..8dc4e954dd 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_cs.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_cs.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-17 20\:33+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Short-Description=Zaveden\u00ed filtr\u016f UI +OpenIDE-Module-Short-Description=Zavedenν filtr\u016f UI diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_de.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_de.properties new file mode 100644 index 0000000000..a37ab0306a --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_de.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=Filter Implementierungen UI diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_es.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_es.properties index bb76991ca0..e5d1c2158a 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_es.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_es.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:04+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Short-Description=Interfaz de usuario de las implementaciones de los filtros +OpenIDE-Module-Short-Description=Interfaz de usuario de las implementaciones de los filtros diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_fr.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_fr.properties index 402e26d189..05651ae66d 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_fr.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_fr.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:04+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Interface utilisateur des filtres +OpenIDE-Module-Short-Description=Interface utilisateur des filtres diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_he.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_he.properties new file mode 100644 index 0000000000..d52416db7b --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_he.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=Filters implementations UI diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_hu.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_hu.properties new file mode 100644 index 0000000000..0694d3a045 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_hu.properties @@ -0,0 +1,3 @@ + + +OpenIDE-Module-Short-Description=Sz\u0171ri a megval\u00F3s\u00EDt\u00E1si fel\u00FCletet diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_it.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_it.properties new file mode 100644 index 0000000000..d52416db7b --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_it.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=Filters implementations UI diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_ja.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_ja.properties index e70e722ab0..ce34da2f51 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_ja.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_ja.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-19 07\:01+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u30d5\u30a3\u30eb\u30bf\u306e\u5b9f\u88c5\u306eUI +OpenIDE-Module-Short-Description=\u30d5\u30a3\u30eb\u30bf\u306e\u5b9f\u88c5\u306eUI diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_ko.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_ko.properties new file mode 100644 index 0000000000..a1c3e9ea31 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_ko.properties @@ -0,0 +1,3 @@ + + +OpenIDE-Module-Short-Description=\uD544\uD130 \uAD6C\uD604 UI diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_nl.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_nl.properties new file mode 100644 index 0000000000..d52416db7b --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_nl.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=Filters implementations UI diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_pt_BR.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_pt_BR.properties index dbafd4f676..53552b5dd4 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_pt_BR.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_pt_BR.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 17\:18+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Interface de usu\u00e1rio das implementa\u00e7\u00f5es de filtros +OpenIDE-Module-Short-Description=Interface de usuαrio das implementaηυes de filtros diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_ro.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_ro.properties new file mode 100644 index 0000000000..89d9a8753b --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_ro.properties @@ -0,0 +1,3 @@ + + +OpenIDE-Module-Short-Description=Interfa\u021Ba implement\u0103rilor de filtre diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_ru.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_ru.properties index c2801db483..c5c45c3173 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_ru.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_ru.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-05 07\:58+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Short-Description=\u0418\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f UI \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 +OpenIDE-Module-Short-Description=\u0418\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f UI \u0444\u0438\u043b\u044c\u0442\u0440\u043e\u0432 diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_th.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_tr.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_tr.properties new file mode 100644 index 0000000000..d52416db7b --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_tr.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=Filters implementations UI diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_uk.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_uk.properties new file mode 100644 index 0000000000..0dcd33228c --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_uk.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043B\u0456\u0437\u0430\u0446\u0456\u044F \u0444\u0456\u043B\u044C\u0442\u0440\u0456\u0432 \u0456\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430 diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_zh_CN.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_zh_CN.properties index dc7f5c4298..3bf59c33b7 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_zh_CN.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_zh_CN.properties @@ -1,8 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:12+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u6ee4\u6ce2\u5b9e\u73b0\u7684\u7528\u6237\u754c\u9762 +OpenIDE-Module-Short-Description=\u6ee4\u6ce2\u5b9e\u73b0\u7684\u7528\u6237\u754c\u9762 diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_zh_TW.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_zh_TW.properties new file mode 100644 index 0000000000..d52416db7b --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/Bundle_zh_TW.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=Filters implementations UI diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle.properties index f322a2129f..7189f3bf2b 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle.properties @@ -9,3 +9,6 @@ EqualNumberPanel.jLabel1.text=Minimum: EqualNumberPanel.jLabel2.text=Maximum: EqualNumberPanel.minLabel.text= EqualNumberPanel.maxLabel.text= +ListContainsPanel.labelPattern.text=Value: +ListContainsPanel.okButton.text=OK +ListContainsPanel.textField.text= diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_ar.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_ca.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_ca.properties new file mode 100644 index 0000000000..eb557d5d6c --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_ca.properties @@ -0,0 +1,11 @@ +EqualStringPanel.regexCheckbox.text=Use regex +EqualStringPanel.textField.text= +EqualStringPanel.labelPattern.text=Pattern: +EqualStringPanel.okButton.text=OK +EqualBooleanPanel.trueButton.text=Cert +EqualBooleanPanel.falseButton.text=Fals +EqualNumberPanel.labelValue.text=Value +EqualNumberPanel.jLabel1.text=Mνnim: +EqualNumberPanel.jLabel2.text=Mΰxim: +EqualNumberPanel.minLabel.text= +EqualNumberPanel.maxLabel.text= diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_cs.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_cs.properties index 6b4c65f15b..970bc28876 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_cs.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_cs.properties @@ -1,23 +1,11 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-19 18\:36+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -EqualStringPanel.regexCheckbox.text=Pou\u017e\u00edt regex - -EqualStringPanel.labelPattern.text=Vzorec\: - -EqualStringPanel.okButton.text=OK - -EqualBooleanPanel.trueButton.text=Pravda - -EqualBooleanPanel.falseButton.text=Nepravda - -EqualNumberPanel.labelValue.text=Hodnota - -EqualNumberPanel.jLabel1.text=Minimum\: - -EqualNumberPanel.jLabel2.text=Maximum\: +EqualStringPanel.regexCheckbox.text=Pou\u017eνt regex +EqualStringPanel.textField.text= +EqualStringPanel.labelPattern.text=Vzorec: +EqualStringPanel.okButton.text=OK +EqualBooleanPanel.trueButton.text=Pravda +EqualBooleanPanel.falseButton.text=Nepravda +EqualNumberPanel.labelValue.text=Hodnota +EqualNumberPanel.jLabel1.text=Minimum: +EqualNumberPanel.jLabel2.text=Maximum: +EqualNumberPanel.minLabel.text= +EqualNumberPanel.maxLabel.text= diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_de.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_de.properties new file mode 100644 index 0000000000..3bd575c093 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_de.properties @@ -0,0 +1,11 @@ +EqualStringPanel.regexCheckbox.text=Benutze regulδre Ausdrόcke +EqualStringPanel.textField.text= +EqualStringPanel.labelPattern.text=Muster: +EqualStringPanel.okButton.text=OK +EqualBooleanPanel.trueButton.text=Wahr +EqualBooleanPanel.falseButton.text=Falsch +EqualNumberPanel.labelValue.text=Wert +EqualNumberPanel.jLabel1.text=Minimum: +EqualNumberPanel.jLabel2.text=Maximum: +EqualNumberPanel.minLabel.text= +EqualNumberPanel.maxLabel.text= diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_es.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_es.properties index 98df1ba78e..6b88f091ae 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_es.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_es.properties @@ -1,23 +1,13 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:04+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - EqualStringPanel.regexCheckbox.text=Usar expresiones regulares - -EqualStringPanel.labelPattern.text=Patr\u00f3n\: - +EqualStringPanel.textField.text= +EqualStringPanel.labelPattern.text=Patrσn: EqualStringPanel.okButton.text=OK - EqualBooleanPanel.trueButton.text=Verdadero - EqualBooleanPanel.falseButton.text=Falso - EqualNumberPanel.labelValue.text=Valor - -EqualNumberPanel.jLabel1.text=M\u00ednimo\: - -EqualNumberPanel.jLabel2.text=M\u00e1ximo\: +EqualNumberPanel.jLabel1.text=Mνnimo: +EqualNumberPanel.jLabel2.text=Mαximo: +EqualNumberPanel.minLabel.text= +EqualNumberPanel.maxLabel.text= +ListContainsPanel.okButton.text=VALE +ListContainsPanel.labelPattern.text=Valor: diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_fr.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_fr.properties index bc654f3643..9efdcc161f 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_fr.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_fr.properties @@ -1,23 +1,11 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:04+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -EqualStringPanel.regexCheckbox.text=Utiliser la regexp - -EqualStringPanel.labelPattern.text=Forme \: - -EqualStringPanel.okButton.text=OK - -EqualBooleanPanel.trueButton.text=Vrai - -EqualBooleanPanel.falseButton.text=Faux - -EqualNumberPanel.labelValue.text=Valeur - -EqualNumberPanel.jLabel1.text=Minimum \: - -EqualNumberPanel.jLabel2.text=Maximum \: +EqualStringPanel.regexCheckbox.text=Utiliser la regexp +EqualStringPanel.textField.text= +EqualStringPanel.labelPattern.text=Forme : +EqualStringPanel.okButton.text=OK +EqualBooleanPanel.trueButton.text=Vrai +EqualBooleanPanel.falseButton.text=Faux +EqualNumberPanel.labelValue.text=Valeur +EqualNumberPanel.jLabel1.text=Minimum : +EqualNumberPanel.jLabel2.text=Maximum : +EqualNumberPanel.minLabel.text= +EqualNumberPanel.maxLabel.text= diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_he.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_he.properties new file mode 100644 index 0000000000..f322a2129f --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_he.properties @@ -0,0 +1,11 @@ +EqualStringPanel.regexCheckbox.text=Use regex +EqualStringPanel.textField.text= +EqualStringPanel.labelPattern.text=Pattern: +EqualStringPanel.okButton.text=OK +EqualBooleanPanel.trueButton.text=True +EqualBooleanPanel.falseButton.text=False +EqualNumberPanel.labelValue.text=Value +EqualNumberPanel.jLabel1.text=Minimum: +EqualNumberPanel.jLabel2.text=Maximum: +EqualNumberPanel.minLabel.text= +EqualNumberPanel.maxLabel.text= diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_hu.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_hu.properties new file mode 100644 index 0000000000..2aea7c5e95 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_hu.properties @@ -0,0 +1,12 @@ + + +EqualNumberPanel.labelValue.text=\u00C9rt\u00E9k +EqualNumberPanel.jLabel1.text=Minimum: +EqualBooleanPanel.trueButton.text=Igaz +EqualNumberPanel.jLabel2.text=Maximum: +EqualStringPanel.labelPattern.text=Minta: +ListContainsPanel.okButton.text=OK +EqualBooleanPanel.falseButton.text=Hamis +EqualStringPanel.okButton.text=OK +EqualStringPanel.regexCheckbox.text=Haszn\u00E1lja a regul\u00E1ris kifejez\u00E9st +ListContainsPanel.labelPattern.text=\u00C9rt\u00E9k: diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_it.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_it.properties new file mode 100644 index 0000000000..f322a2129f --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_it.properties @@ -0,0 +1,11 @@ +EqualStringPanel.regexCheckbox.text=Use regex +EqualStringPanel.textField.text= +EqualStringPanel.labelPattern.text=Pattern: +EqualStringPanel.okButton.text=OK +EqualBooleanPanel.trueButton.text=True +EqualBooleanPanel.falseButton.text=False +EqualNumberPanel.labelValue.text=Value +EqualNumberPanel.jLabel1.text=Minimum: +EqualNumberPanel.jLabel2.text=Maximum: +EqualNumberPanel.minLabel.text= +EqualNumberPanel.maxLabel.text= diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_ja.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_ja.properties index 500a3a0e1d..92b89cce15 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_ja.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_ja.properties @@ -1,23 +1,11 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-18 09\:25+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -EqualStringPanel.regexCheckbox.text=\u6b63\u898f\u8868\u73fe\u306e\u4f7f\u7528 - -EqualStringPanel.labelPattern.text=\u30d1\u30bf\u30fc\u30f3\: - -EqualStringPanel.okButton.text=OK - -EqualBooleanPanel.trueButton.text=\u771f - -EqualBooleanPanel.falseButton.text=\u507d - -EqualNumberPanel.labelValue.text=\u5024 - -EqualNumberPanel.jLabel1.text=\u6700\u5c0f\: - -EqualNumberPanel.jLabel2.text=\u6700\u5927\: +EqualStringPanel.regexCheckbox.text=\u6b63\u898f\u8868\u73fe\u306e\u4f7f\u7528 +EqualStringPanel.textField.text= +EqualStringPanel.labelPattern.text=\u30d1\u30bf\u30fc\u30f3: +EqualStringPanel.okButton.text=OK +EqualBooleanPanel.trueButton.text=\u771f +EqualBooleanPanel.falseButton.text=\u507d +EqualNumberPanel.labelValue.text=\u5024 +EqualNumberPanel.jLabel1.text=\u6700\u5c0f: +EqualNumberPanel.jLabel2.text=\u6700\u5927: +EqualNumberPanel.minLabel.text= +EqualNumberPanel.maxLabel.text= diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_ko.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_ko.properties new file mode 100644 index 0000000000..f4a5cbe91c --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_ko.properties @@ -0,0 +1,12 @@ + + +EqualStringPanel.labelPattern.text=\uD328\uD134: +EqualStringPanel.okButton.text=\uD655\uC778 +EqualBooleanPanel.trueButton.text=\uB9DE\uC74C +EqualBooleanPanel.falseButton.text=\uD2C0\uB9BC +EqualNumberPanel.labelValue.text=\uAC12 +EqualNumberPanel.jLabel1.text=\uCD5C\uC19F\uAC12: +EqualStringPanel.regexCheckbox.text=regex \uC0AC\uC6A9\uD558\uAE30 +EqualNumberPanel.jLabel2.text=\uCD5C\uB313\uAC12: +ListContainsPanel.labelPattern.text=\uAC12: +ListContainsPanel.okButton.text=\uD655\uC778 diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_nl.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_nl.properties new file mode 100644 index 0000000000..f322a2129f --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_nl.properties @@ -0,0 +1,11 @@ +EqualStringPanel.regexCheckbox.text=Use regex +EqualStringPanel.textField.text= +EqualStringPanel.labelPattern.text=Pattern: +EqualStringPanel.okButton.text=OK +EqualBooleanPanel.trueButton.text=True +EqualBooleanPanel.falseButton.text=False +EqualNumberPanel.labelValue.text=Value +EqualNumberPanel.jLabel1.text=Minimum: +EqualNumberPanel.jLabel2.text=Maximum: +EqualNumberPanel.minLabel.text= +EqualNumberPanel.maxLabel.text= diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_pt_BR.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_pt_BR.properties index 69c80b2d6c..7d3fdb0438 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_pt_BR.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_pt_BR.properties @@ -1,23 +1,11 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 17\:14+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -EqualStringPanel.regexCheckbox.text=Usar express\u00e3o regular - -EqualStringPanel.labelPattern.text=Padr\u00e3o\: - -EqualStringPanel.okButton.text=OK - -EqualBooleanPanel.trueButton.text=Verdadeiro - -EqualBooleanPanel.falseButton.text=Falso - -EqualNumberPanel.labelValue.text=Valor - -EqualNumberPanel.jLabel1.text=M\u00ednimo\: - -EqualNumberPanel.jLabel2.text=M\u00e1ximo\: +EqualStringPanel.regexCheckbox.text=Usar expressγo regular +EqualStringPanel.textField.text= +EqualStringPanel.labelPattern.text=Padrγo: +EqualStringPanel.okButton.text=OK +EqualBooleanPanel.trueButton.text=Verdadeiro +EqualBooleanPanel.falseButton.text=Falso +EqualNumberPanel.labelValue.text=Valor +EqualNumberPanel.jLabel1.text=Mνnimo: +EqualNumberPanel.jLabel2.text=Mαximo: +EqualNumberPanel.minLabel.text= +EqualNumberPanel.maxLabel.text= diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_ro.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_ro.properties new file mode 100644 index 0000000000..f7771470e4 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_ro.properties @@ -0,0 +1,10 @@ + + +EqualNumberPanel.labelValue.text=Valoare +EqualStringPanel.regexCheckbox.text=Folose\u0219te o expresie regulat\u0103 +EqualStringPanel.okButton.text=OK +EqualNumberPanel.jLabel1.text=Minim: +EqualStringPanel.labelPattern.text=Model: +EqualBooleanPanel.trueButton.text=Adev\u0103rat +EqualBooleanPanel.falseButton.text=Fals +EqualNumberPanel.jLabel2.text=Maxim: diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_ru.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_ru.properties index a84a9ddaca..9a50602a51 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_ru.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_ru.properties @@ -1,23 +1,11 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-21 07\:06+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -EqualStringPanel.regexCheckbox.text=\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c regexp - -EqualStringPanel.labelPattern.text=\u0428\u0430\u0431\u043b\u043e\u043d\: - -EqualStringPanel.okButton.text=\u041e\u041a - -EqualBooleanPanel.trueButton.text=True - -EqualBooleanPanel.falseButton.text=False - -EqualNumberPanel.labelValue.text=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 - -EqualNumberPanel.jLabel1.text=\u041c\u0438\u043d\u0438\u043c\u0443\u043c\: - -EqualNumberPanel.jLabel2.text=\u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c\: +EqualStringPanel.regexCheckbox.text=\u041f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c regexp +EqualStringPanel.textField.text= +EqualStringPanel.labelPattern.text=\u0428\u0430\u0431\u043b\u043e\u043d: +EqualStringPanel.okButton.text=\u041e\u041a +EqualBooleanPanel.trueButton.text=True +EqualBooleanPanel.falseButton.text=False +EqualNumberPanel.labelValue.text=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 +EqualNumberPanel.jLabel1.text=\u041c\u0438\u043d\u0438\u043c\u0443\u043c: +EqualNumberPanel.jLabel2.text=\u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c: +EqualNumberPanel.minLabel.text= +EqualNumberPanel.maxLabel.text= diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_th.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_tr.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_tr.properties new file mode 100644 index 0000000000..f322a2129f --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_tr.properties @@ -0,0 +1,11 @@ +EqualStringPanel.regexCheckbox.text=Use regex +EqualStringPanel.textField.text= +EqualStringPanel.labelPattern.text=Pattern: +EqualStringPanel.okButton.text=OK +EqualBooleanPanel.trueButton.text=True +EqualBooleanPanel.falseButton.text=False +EqualNumberPanel.labelValue.text=Value +EqualNumberPanel.jLabel1.text=Minimum: +EqualNumberPanel.jLabel2.text=Maximum: +EqualNumberPanel.minLabel.text= +EqualNumberPanel.maxLabel.text= diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_uk.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_uk.properties new file mode 100644 index 0000000000..c16fb7962c --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_uk.properties @@ -0,0 +1,14 @@ +EqualBooleanPanel.falseButton.text=False +EqualBooleanPanel.trueButton.text=True +EqualNumberPanel.jLabel1.text=\u041C\u0456\u043D\u0456\u043C\u0443\u043C: +ListContainsPanel.labelPattern.text=\u0417\u043D\u0430\u0447\u0435\u043D\u043D\u044F: +EqualStringPanel.textField.text=\u0406 +EqualStringPanel.regexCheckbox.text=\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0439\u0442\u0435 \u0440\u0435\u0433\u0443\u043B\u044F\u0440\u043D\u0438\u0439 \u0432\u0438\u0440\u0430\u0437 +EqualStringPanel.labelPattern.text=\u0412\u0456\u0437\u0435\u0440\u0443\u043D\u043E\u043A: +EqualNumberPanel.labelValue.text=\u0417\u043D\u0430\u0447\u0435\u043D\u043D\u044F +EqualNumberPanel.jLabel2.text=\u041C\u0430\u043A\u0441\u0438\u043C\u0443\u043C: +EqualNumberPanel.minLabel.text=\u0406 +EqualNumberPanel.maxLabel.text=\u0406 +EqualStringPanel.okButton.text=OK +ListContainsPanel.okButton.text=OK +ListContainsPanel.textField.text=\u0406 diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_zh_CN.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_zh_CN.properties index 876a7a1fc0..0d060612c6 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_zh_CN.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_zh_CN.properties @@ -1,22 +1,11 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:13+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -EqualStringPanel.regexCheckbox.text=\u4f7f\u7528\u6b63\u5219\u8868\u8fbe\u5f0f - -EqualStringPanel.labelPattern.text=\u6a21\u5f0f\uff1a - -EqualStringPanel.okButton.text=\u786e\u5b9a - -EqualBooleanPanel.trueButton.text=\u771f\u7684 - -EqualBooleanPanel.falseButton.text=\u5047 - -EqualNumberPanel.labelValue.text=\u4ef7\u503c - -EqualNumberPanel.jLabel1.text=\u6700\u4f4e\uff1a - -EqualNumberPanel.jLabel2.text=\u6700\u5927\uff1a +EqualStringPanel.regexCheckbox.text=\u4f7f\u7528\u6b63\u5219\u8868\u8fbe\u5f0f +EqualStringPanel.textField.text= +EqualStringPanel.labelPattern.text=\u6a21\u5f0f\uff1a +EqualStringPanel.okButton.text=\u786e\u5b9a +EqualBooleanPanel.trueButton.text=\u771f\u7684 +EqualBooleanPanel.falseButton.text=\u5047 +EqualNumberPanel.labelValue.text=\u4ef7\u503c +EqualNumberPanel.jLabel1.text=\u6700\u4f4e\uff1a +EqualNumberPanel.jLabel2.text=\u6700\u5927\uff1a +EqualNumberPanel.minLabel.text= +EqualNumberPanel.maxLabel.text= diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_zh_TW.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_zh_TW.properties new file mode 100644 index 0000000000..f322a2129f --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/Bundle_zh_TW.properties @@ -0,0 +1,11 @@ +EqualStringPanel.regexCheckbox.text=Use regex +EqualStringPanel.textField.text= +EqualStringPanel.labelPattern.text=Pattern: +EqualStringPanel.okButton.text=OK +EqualBooleanPanel.trueButton.text=True +EqualBooleanPanel.falseButton.text=False +EqualNumberPanel.labelValue.text=Value +EqualNumberPanel.jLabel1.text=Minimum: +EqualNumberPanel.jLabel2.text=Maximum: +EqualNumberPanel.minLabel.text= +EqualNumberPanel.maxLabel.text= diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/cs.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/cs.po deleted file mode 100644 index 5a42bf213b..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/cs.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-19 18:36+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "EqualStringPanel.regexCheckbox.text" -msgstr "PouΕΎΓ­t regex" - -msgid "EqualStringPanel.labelPattern.text" -msgstr "Vzorec:" - -msgid "EqualStringPanel.okButton.text" -msgstr "OK" - -msgid "EqualBooleanPanel.trueButton.text" -msgstr "Pravda" - -msgid "EqualBooleanPanel.falseButton.text" -msgstr "Nepravda" - -msgid "EqualNumberPanel.labelValue.text" -msgstr "Hodnota" - -msgid "EqualNumberPanel.jLabel1.text" -msgstr "Minimum:" - -msgid "EqualNumberPanel.jLabel2.text" -msgstr "Maximum:" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/es.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/es.po deleted file mode 100644 index 3b813cb13d..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/es.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:04+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "EqualStringPanel.regexCheckbox.text" -msgstr "Usar expresiones regulares" - -msgid "EqualStringPanel.labelPattern.text" -msgstr "PatrΓ³n:" - -msgid "EqualStringPanel.okButton.text" -msgstr "OK" - -msgid "EqualBooleanPanel.trueButton.text" -msgstr "Verdadero" - -msgid "EqualBooleanPanel.falseButton.text" -msgstr "Falso" - -msgid "EqualNumberPanel.labelValue.text" -msgstr "Valor" - -msgid "EqualNumberPanel.jLabel1.text" -msgstr "MΓ­nimo:" - -msgid "EqualNumberPanel.jLabel2.text" -msgstr "MΓ‘ximo:" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/fr.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/fr.po deleted file mode 100644 index 9a9ec5344c..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/fr.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:04+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "EqualStringPanel.regexCheckbox.text" -msgstr "Utiliser la regexp" - -msgid "EqualStringPanel.labelPattern.text" -msgstr "Forme :" - -msgid "EqualStringPanel.okButton.text" -msgstr "OK" - -msgid "EqualBooleanPanel.trueButton.text" -msgstr "Vrai" - -msgid "EqualBooleanPanel.falseButton.text" -msgstr "Faux" - -msgid "EqualNumberPanel.labelValue.text" -msgstr "Valeur" - -msgid "EqualNumberPanel.jLabel1.text" -msgstr "Minimum :" - -msgid "EqualNumberPanel.jLabel2.text" -msgstr "Maximum :" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/ja.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/ja.po deleted file mode 100644 index 00feb4aae8..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/ja.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-18 09:25+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "EqualStringPanel.regexCheckbox.text" -msgstr "正規葨現γδ½Ώη”¨" - -msgid "EqualStringPanel.labelPattern.text" -msgstr "パターン:" - -msgid "EqualStringPanel.okButton.text" -msgstr "OK" - -msgid "EqualBooleanPanel.trueButton.text" -msgstr "真" - -msgid "EqualBooleanPanel.falseButton.text" -msgstr "偽" - -msgid "EqualNumberPanel.labelValue.text" -msgstr "ε€€" - -msgid "EqualNumberPanel.jLabel1.text" -msgstr "ζœ€ε°:" - -msgid "EqualNumberPanel.jLabel2.text" -msgstr "ζœ€ε€§:" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/org-gephi-ui-filters-plugin-attribute.pot b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/org-gephi-ui-filters-plugin-attribute.pot deleted file mode 100644 index 4e0867087b..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/org-gephi-ui-filters-plugin-attribute.pot +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "EqualStringPanel.regexCheckbox.text" -msgstr "Use regex" - -msgid "EqualStringPanel.labelPattern.text" -msgstr "Pattern:" - -msgid "EqualStringPanel.okButton.text" -msgstr "OK" - -msgid "EqualBooleanPanel.trueButton.text" -msgstr "True" - -msgid "EqualBooleanPanel.falseButton.text" -msgstr "False" - -msgid "EqualNumberPanel.labelValue.text" -msgstr "Value" - -msgid "EqualNumberPanel.jLabel1.text" -msgstr "Minimum:" - -msgid "EqualNumberPanel.jLabel2.text" -msgstr "Maximum:" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/pt_BR.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/pt_BR.po deleted file mode 100644 index fa1772c115..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/pt_BR.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 17:14+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "EqualStringPanel.regexCheckbox.text" -msgstr "Usar expressΓ£o regular" - -msgid "EqualStringPanel.labelPattern.text" -msgstr "PadrΓ£o:" - -msgid "EqualStringPanel.okButton.text" -msgstr "OK" - -msgid "EqualBooleanPanel.trueButton.text" -msgstr "Verdadeiro" - -msgid "EqualBooleanPanel.falseButton.text" -msgstr "Falso" - -msgid "EqualNumberPanel.labelValue.text" -msgstr "Valor" - -msgid "EqualNumberPanel.jLabel1.text" -msgstr "MΓ­nimo:" - -msgid "EqualNumberPanel.jLabel2.text" -msgstr "MΓ‘ximo:" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/ru.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/ru.po deleted file mode 100644 index 2bab6e823f..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/ru.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-21 07:06+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "EqualStringPanel.regexCheckbox.text" -msgstr "ΠŸΡ€ΠΈΠΌΠ΅Π½ΠΈΡ‚ΡŒ regexp" - -msgid "EqualStringPanel.labelPattern.text" -msgstr "Π¨Π°Π±Π»ΠΎΠ½:" - -msgid "EqualStringPanel.okButton.text" -msgstr "ОК" - -msgid "EqualBooleanPanel.trueButton.text" -msgstr "True" - -msgid "EqualBooleanPanel.falseButton.text" -msgstr "False" - -msgid "EqualNumberPanel.labelValue.text" -msgstr "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅" - -msgid "EqualNumberPanel.jLabel1.text" -msgstr "ΠœΠΈΠ½ΠΈΠΌΡƒΠΌ:" - -msgid "EqualNumberPanel.jLabel2.text" -msgstr "ΠœΠ°ΠΊΡΠΈΠΌΡƒΠΌ:" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/zh_CN.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/zh_CN.po deleted file mode 100644 index 72fb8354cc..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/attribute/zh_CN.po +++ /dev/null @@ -1,42 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:13+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "EqualStringPanel.regexCheckbox.text" -msgstr "δ½Ώη”¨ζ­£εˆ™θ‘¨θΎΎεΌ" - -msgid "EqualStringPanel.labelPattern.text" -msgstr "樑式:" - -msgid "EqualStringPanel.okButton.text" -msgstr "η‘εš" - -msgid "EqualBooleanPanel.trueButton.text" -msgstr "ηœŸηš„" - -msgid "EqualBooleanPanel.falseButton.text" -msgstr "假" - -msgid "EqualNumberPanel.labelValue.text" -msgstr "δ»·ε€Ό" - -msgid "EqualNumberPanel.jLabel1.text" -msgstr "ζœ€δ½ŽοΌš" - -msgid "EqualNumberPanel.jLabel2.text" -msgstr "ζœ€ε€§οΌš" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/cs.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/cs.po deleted file mode 100644 index 954eaf0dc0..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/cs.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-17 20:33+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ZavedenΓ­ filtrΕ― UI" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_ar.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_ca.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_ca.properties new file mode 100644 index 0000000000..5db8be88d4 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_ca.properties @@ -0,0 +1,4 @@ +DynamicRangePanel.timelineButton.closetext=Close Timeline +DynamicRangePanel.timelineButton.text=Open Timeline +DynamicRangePanel.keepEmptyCheckbox.toolTipText=Keep nodes/edges with a null or empty interval +DynamicRangePanel.keepEmptyCheckbox.text=Keep empty values diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_cs.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_cs.properties index cdd72310cb..5260852748 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_cs.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_cs.properties @@ -1,15 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-19 18\:35+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -DynamicRangePanel.timelineButton.closetext=Zav\u0159\u00edt \u010dasovou osu - -DynamicRangePanel.timelineButton.text=Otev\u0159\u00edt \u010dasovou osu - -DynamicRangePanel.keepEmptyCheckbox.toolTipText=Ponechat si uzly/hrany s pr\u00e1zdn\u00fdm intervalem - -DynamicRangePanel.keepEmptyCheckbox.text=Ponechat pr\u00e1zdn\u00e9 hodnoty +DynamicRangePanel.timelineButton.closetext = Zav\u0159νt \u010dasovou osu +DynamicRangePanel.timelineButton.text=Otev\u0159νt \u010dasovou osu +DynamicRangePanel.keepEmptyCheckbox.toolTipText=Ponechat si uzly/hrany s prαzdnύm intervalem +DynamicRangePanel.keepEmptyCheckbox.text=Ponechat prαzdnι hodnoty diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_de.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_de.properties new file mode 100644 index 0000000000..9e4ca36483 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_de.properties @@ -0,0 +1,4 @@ +DynamicRangePanel.timelineButton.closetext = Zeitleiste schlieίen +DynamicRangePanel.timelineButton.text=Zeitleiste φffnen +DynamicRangePanel.keepEmptyCheckbox.toolTipText=Knoten/Kanten mit keinem oder leerem Intervall beibehalten +DynamicRangePanel.keepEmptyCheckbox.text=Leere Werte beibehalten diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_es.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_es.properties index 0f12f045e7..63cb088cb6 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_es.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_es.properties @@ -1,15 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-07 12\:36+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -DynamicRangePanel.timelineButton.closetext=Cerrar Timeline - -DynamicRangePanel.timelineButton.text=Abrir Timeline - -DynamicRangePanel.keepEmptyCheckbox.toolTipText=Mantener nodos/aristas con int\u00e9rvalo nulo o vac\u00edo - -DynamicRangePanel.keepEmptyCheckbox.text=Mantener valores vac\u00edos +DynamicRangePanel.timelineButton.closetext = Cerrar Timeline +DynamicRangePanel.timelineButton.text=Abrir Timeline +DynamicRangePanel.keepEmptyCheckbox.toolTipText=Mantener nodos/aristas con intιrvalo nulo o vacνo +DynamicRangePanel.keepEmptyCheckbox.text=Mantener valores vacνos diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_fr.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_fr.properties index 61aac1c401..ea3a71fdbf 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_fr.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_fr.properties @@ -1,15 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-07 11\:37+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -DynamicRangePanel.timelineButton.closetext=Fermer Timeline - -DynamicRangePanel.timelineButton.text=Ouvrir Timeline - -DynamicRangePanel.keepEmptyCheckbox.toolTipText=Garder les noeuds/liens ayant un intervalle temporel nulle ou vide - -DynamicRangePanel.keepEmptyCheckbox.text=Garder les valeurs vides +DynamicRangePanel.timelineButton.closetext = Fermer Timeline +DynamicRangePanel.timelineButton.text=Ouvrir Timeline +DynamicRangePanel.keepEmptyCheckbox.toolTipText=Garder les noeuds/liens ayant un intervalle temporel nulle ou vide +DynamicRangePanel.keepEmptyCheckbox.text=Garder les valeurs vides diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_he.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_he.properties new file mode 100644 index 0000000000..5db8be88d4 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_he.properties @@ -0,0 +1,4 @@ +DynamicRangePanel.timelineButton.closetext=Close Timeline +DynamicRangePanel.timelineButton.text=Open Timeline +DynamicRangePanel.keepEmptyCheckbox.toolTipText=Keep nodes/edges with a null or empty interval +DynamicRangePanel.keepEmptyCheckbox.text=Keep empty values diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_hu.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_hu.properties new file mode 100644 index 0000000000..6b5f1d9956 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_hu.properties @@ -0,0 +1,6 @@ + + +DynamicRangePanel.keepEmptyCheckbox.toolTipText=A csom\u00F3pontok/\u00E9lek nulla vagy \u00FCres intervallum\u00FAak +DynamicRangePanel.timelineButton.text=Nyissa meg az Id\u0151vonalat +DynamicRangePanel.keepEmptyCheckbox.text=Tartsa \u00FCresen az \u00E9rt\u00E9keket +DynamicRangePanel.timelineButton.closetext=Id\u0151vonal bez\u00E1r\u00E1sa diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_it.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_it.properties new file mode 100644 index 0000000000..5db8be88d4 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_it.properties @@ -0,0 +1,4 @@ +DynamicRangePanel.timelineButton.closetext=Close Timeline +DynamicRangePanel.timelineButton.text=Open Timeline +DynamicRangePanel.keepEmptyCheckbox.toolTipText=Keep nodes/edges with a null or empty interval +DynamicRangePanel.keepEmptyCheckbox.text=Keep empty values diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_ja.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_ja.properties index 9f3d3db4f8..309d6cfa59 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_ja.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_ja.properties @@ -1,15 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-18 10\:31+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -DynamicRangePanel.timelineButton.closetext=\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3\u3092\u9589\u3058\u308b - -DynamicRangePanel.timelineButton.text=\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3\u3092\u958b\u304f - -DynamicRangePanel.keepEmptyCheckbox.toolTipText=null\u307e\u305f\u306f\u7a7a\u306e\u533a\u9593\u3067\u30ce\u30fc\u30c9/\u8fba\u3092\u4fdd\u6301 - -DynamicRangePanel.keepEmptyCheckbox.text=\u7a7a\u306e\u5024\u3092\u4fdd\u6301 +DynamicRangePanel.timelineButton.closetext = \u30bf\u30a4\u30e0\u30e9\u30a4\u30f3\u3092\u9589\u3058\u308b +DynamicRangePanel.timelineButton.text=\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3\u3092\u958b\u304f +DynamicRangePanel.keepEmptyCheckbox.toolTipText=null\u307e\u305f\u306f\u7a7a\u306e\u533a\u9593\u3067\u30ce\u30fc\u30c9/\u8fba\u3092\u4fdd\u6301 +DynamicRangePanel.keepEmptyCheckbox.text=\u7a7a\u306e\u5024\u3092\u4fdd\u6301 diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_ko.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_ko.properties new file mode 100644 index 0000000000..51a37d9d62 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_ko.properties @@ -0,0 +1,6 @@ + + +DynamicRangePanel.timelineButton.closetext=\uD0C0\uC784\uB77C\uC778 \uB2EB\uAE30 +DynamicRangePanel.timelineButton.text=\uD0C0\uC784\uB77C\uC778 \uC5F4\uAE30 +DynamicRangePanel.keepEmptyCheckbox.toolTipText=null \uD639\uC740 \uBE48 \uAC04\uACA9\uC744 \uAC16\uB294 \uB178\uB4DC/\uC5E3\uC9C0 \uC720\uC9C0 +DynamicRangePanel.keepEmptyCheckbox.text=\uBE48 \uAC12 \uC720\uC9C0 diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_nl.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_nl.properties new file mode 100644 index 0000000000..a1b237fdad --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_nl.properties @@ -0,0 +1,4 @@ +DynamicRangePanel.timelineButton.closetext=Tijdlijn sluiten +DynamicRangePanel.timelineButton.text=Tijdlijn openen +DynamicRangePanel.keepEmptyCheckbox.toolTipText=Keep nodes/edges with a null or empty interval +DynamicRangePanel.keepEmptyCheckbox.text=Keep empty values diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_pt_BR.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_pt_BR.properties index cbee342dd1..2c406a8318 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_pt_BR.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_pt_BR.properties @@ -1,15 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 17\:13+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -DynamicRangePanel.timelineButton.closetext=Fechar Linha do Tempo - -DynamicRangePanel.timelineButton.text=Abrir Linha do Tempo - -DynamicRangePanel.keepEmptyCheckbox.toolTipText=Manter os n\u00f3s/arestas que possuam intervalo nulo ou vazio - -DynamicRangePanel.keepEmptyCheckbox.text=Manter valores vazios +DynamicRangePanel.timelineButton.closetext = Fechar Linha do Tempo +DynamicRangePanel.timelineButton.text=Abrir Linha do Tempo +DynamicRangePanel.keepEmptyCheckbox.toolTipText=Manter os nσs/arestas que possuam intervalo nulo ou vazio +DynamicRangePanel.keepEmptyCheckbox.text=Manter valores vazios diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_ro.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_ro.properties new file mode 100644 index 0000000000..ee8b0011b8 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_ro.properties @@ -0,0 +1,6 @@ + + +DynamicRangePanel.timelineButton.closetext=\u00CEnchide cronologia +DynamicRangePanel.timelineButton.text=Deschide cronologia +DynamicRangePanel.keepEmptyCheckbox.text=P\u0103streaz\u0103 valorile goale +DynamicRangePanel.keepEmptyCheckbox.toolTipText=P\u0103streaz\u0103 nodurile/muchiile cu un interval nul sau gol diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_ru.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_ru.properties index 53b6345008..34cc755651 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_ru.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_ru.properties @@ -1,15 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-21 07\:05+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -DynamicRangePanel.timelineButton.closetext=\u0417\u0430\u043a\u0440\u044b\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0448\u043a\u0430\u043b\u0443 - -DynamicRangePanel.timelineButton.text=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0448\u043a\u0430\u043b\u0443 - -DynamicRangePanel.keepEmptyCheckbox.toolTipText=\u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0440\u0451\u0431\u0440\u0430 \u0438 \u0443\u0437\u043b\u044b \u0441 \u043f\u0443\u0441\u0442\u044b\u043c\u0438 (\u043d\u0435\u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c\u0438) \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430\u043c\u0438 - -DynamicRangePanel.keepEmptyCheckbox.text=\u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f +DynamicRangePanel.timelineButton.closetext = \u0417\u0430\u043a\u0440\u044b\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0448\u043a\u0430\u043b\u0443 +DynamicRangePanel.timelineButton.text=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0448\u043a\u0430\u043b\u0443 +DynamicRangePanel.keepEmptyCheckbox.toolTipText=\u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0440\u0451\u0431\u0440\u0430 \u0438 \u0443\u0437\u043b\u044b \u0441 \u043f\u0443\u0441\u0442\u044b\u043c\u0438 (\u043d\u0435\u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u043c\u0438) \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430\u043c\u0438 +DynamicRangePanel.keepEmptyCheckbox.text=\u041e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_th.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_tr.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_tr.properties new file mode 100644 index 0000000000..673087233b --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_tr.properties @@ -0,0 +1,4 @@ +DynamicRangePanel.timelineButton.closetext=Zaman Ηizgisini Kapat +DynamicRangePanel.timelineButton.text=Zaman Ηizgisini Aη +DynamicRangePanel.keepEmptyCheckbox.toolTipText=Keep nodes/edges with a null or empty interval +DynamicRangePanel.keepEmptyCheckbox.text=Bo\u015f de\u011ferleri koru diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_uk.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_uk.properties new file mode 100644 index 0000000000..c003e16ff1 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_uk.properties @@ -0,0 +1,4 @@ +DynamicRangePanel.keepEmptyCheckbox.text=\u0417\u0431\u0435\u0440\u0456\u0433\u0430\u0442\u0438 \u043F\u043E\u0440\u043E\u0436\u043D\u0456 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F +DynamicRangePanel.timelineButton.closetext=\u0417\u0430\u043A\u0440\u0438\u0442\u0438 \u0447\u0430\u0441\u043E\u0432\u0443 \u0448\u043A\u0430\u043B\u0443 +DynamicRangePanel.keepEmptyCheckbox.toolTipText=\u0417\u0431\u0435\u0440\u0456\u0433\u0430\u0439\u0442\u0435 \u0432\u0443\u0437\u043B\u0438/\u0440\u0435\u0431\u0440\u0430 \u0437 \u043D\u0443\u043B\u044C\u043E\u0432\u0438\u043C \u0430\u0431\u043E \u043F\u043E\u0440\u043E\u0436\u043D\u0456\u043C \u0456\u043D\u0442\u0435\u0440\u0432\u0430\u043B\u043E\u043C +DynamicRangePanel.timelineButton.text=\u0412\u0456\u0434\u043A\u0440\u0438\u0439\u0442\u0435 \u0445\u0440\u043E\u043D\u043E\u043B\u043E\u0433\u0456\u044E diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_zh_CN.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_zh_CN.properties index 16781649bb..1e43db7f07 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_zh_CN.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_zh_CN.properties @@ -1,14 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:13+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -DynamicRangePanel.timelineButton.closetext=\u5173\u95ed\u65f6\u95f4\u8f74 - -DynamicRangePanel.timelineButton.text=\u6253\u5f00\u65f6\u95f4\u7ebf - -DynamicRangePanel.keepEmptyCheckbox.toolTipText=\u4fdd\u6301\u8282\u70b9/\u8fb9\u4e3a\u7a7a\u6216\u7a7a\u533a\u95f4 - -DynamicRangePanel.keepEmptyCheckbox.text=\u4fdd\u6301\u7a7a\u503c +DynamicRangePanel.timelineButton.closetext = \u5173\u95ed\u65f6\u95f4\u8f74 +DynamicRangePanel.timelineButton.text=\u6253\u5f00\u65f6\u95f4\u7ebf +DynamicRangePanel.keepEmptyCheckbox.toolTipText=\u4fdd\u6301\u8282\u70b9/\u8fb9\u4e3a\u7a7a\u6216\u7a7a\u533a\u95f4 +DynamicRangePanel.keepEmptyCheckbox.text=\u4fdd\u6301\u7a7a\u503c diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_zh_TW.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_zh_TW.properties new file mode 100644 index 0000000000..5db8be88d4 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/Bundle_zh_TW.properties @@ -0,0 +1,4 @@ +DynamicRangePanel.timelineButton.closetext=Close Timeline +DynamicRangePanel.timelineButton.text=Open Timeline +DynamicRangePanel.keepEmptyCheckbox.toolTipText=Keep nodes/edges with a null or empty interval +DynamicRangePanel.keepEmptyCheckbox.text=Keep empty values diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/cs.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/cs.po deleted file mode 100644 index 77d96d6816..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/cs.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-19 18:35+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "DynamicRangePanel.timelineButton.closetext" -msgstr "ZavΕ™Γ­t časovou osu" - -msgid "DynamicRangePanel.timelineButton.text" -msgstr "OtevΕ™Γ­t časovou osu" - -msgid "DynamicRangePanel.keepEmptyCheckbox.toolTipText" -msgstr "Ponechat si uzly/hrany s prΓ‘zdnΓ½m intervalem" - -msgid "DynamicRangePanel.keepEmptyCheckbox.text" -msgstr "Ponechat prΓ‘zdnΓ© hodnoty" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/es.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/es.po deleted file mode 100644 index 7e5e2b030f..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/es.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-07 12:36+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "DynamicRangePanel.timelineButton.closetext" -msgstr "Cerrar Timeline" - -msgid "DynamicRangePanel.timelineButton.text" -msgstr "Abrir Timeline" - -msgid "DynamicRangePanel.keepEmptyCheckbox.toolTipText" -msgstr "Mantener nodos/aristas con intΓ©rvalo nulo o vacΓ­o" - -msgid "DynamicRangePanel.keepEmptyCheckbox.text" -msgstr "Mantener valores vacΓ­os" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/fr.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/fr.po deleted file mode 100644 index 5e66db3c01..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/fr.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-07 11:37+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "DynamicRangePanel.timelineButton.closetext" -msgstr "Fermer Timeline" - -msgid "DynamicRangePanel.timelineButton.text" -msgstr "Ouvrir Timeline" - -msgid "DynamicRangePanel.keepEmptyCheckbox.toolTipText" -msgstr "Garder les noeuds/liens ayant un intervalle temporel nulle ou vide" - -msgid "DynamicRangePanel.keepEmptyCheckbox.text" -msgstr "Garder les valeurs vides" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/ja.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/ja.po deleted file mode 100644 index 319e9f088b..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/ja.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-18 10:31+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "DynamicRangePanel.timelineButton.closetext" -msgstr "γ‚Ώγ‚€γƒ γƒ©γ‚€γƒ³γ‚’ι–‰γ˜γ‚‹" - -msgid "DynamicRangePanel.timelineButton.text" -msgstr "タむムラむンを開く" - -msgid "DynamicRangePanel.keepEmptyCheckbox.toolTipText" -msgstr "nullまたは空γεŒΊι–“γ§γƒŽγƒΌγƒ‰/θΎΊγ‚’δΏζŒ" - -msgid "DynamicRangePanel.keepEmptyCheckbox.text" -msgstr "η©Ίγε€€γ‚’δΏζŒ" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/org-gephi-ui-filters-plugin-dynamic.pot b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/org-gephi-ui-filters-plugin-dynamic.pot deleted file mode 100644 index 120459df76..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/org-gephi-ui-filters-plugin-dynamic.pot +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "DynamicRangePanel.timelineButton.closetext" -msgstr "Close Timeline" - -msgid "DynamicRangePanel.timelineButton.text" -msgstr "Open Timeline" - -msgid "DynamicRangePanel.keepEmptyCheckbox.toolTipText" -msgstr "Keep nodes/edges with a null or empty interval" - -msgid "DynamicRangePanel.keepEmptyCheckbox.text" -msgstr "Keep empty values" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/pt_BR.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/pt_BR.po deleted file mode 100644 index 03cf274aae..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/pt_BR.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 17:13+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "DynamicRangePanel.timelineButton.closetext" -msgstr "Fechar Linha do Tempo" - -msgid "DynamicRangePanel.timelineButton.text" -msgstr "Abrir Linha do Tempo" - -msgid "DynamicRangePanel.keepEmptyCheckbox.toolTipText" -msgstr "Manter os nΓ³s/arestas que possuam intervalo nulo ou vazio" - -msgid "DynamicRangePanel.keepEmptyCheckbox.text" -msgstr "Manter valores vazios" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/ru.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/ru.po deleted file mode 100644 index 6ae66f4b2f..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/ru.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-21 07:05+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "DynamicRangePanel.timelineButton.closetext" -msgstr "Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΡˆΠΊΠ°Π»Ρƒ" - -msgid "DynamicRangePanel.timelineButton.text" -msgstr "ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ΡˆΠΊΠ°Π»Ρƒ" - -msgid "DynamicRangePanel.keepEmptyCheckbox.toolTipText" -msgstr "ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Ρ€Ρ‘Π±Ρ€Π° ΠΈ ΡƒΠ·Π»Ρ‹ с пустыми (Π½Π΅ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌΠΈ) ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π°ΠΌΠΈ" - -msgid "DynamicRangePanel.keepEmptyCheckbox.text" -msgstr "ΠžΡΡ‚Π°Π²ΠΈΡ‚ΡŒ пустыС значСния" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/zh_CN.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/zh_CN.po deleted file mode 100644 index 1bf76b6596..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/dynamic/zh_CN.po +++ /dev/null @@ -1,30 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:13+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "DynamicRangePanel.timelineButton.closetext" -msgstr "关闭既间轴" - -msgid "DynamicRangePanel.timelineButton.text" -msgstr "打开既间线" - -msgid "DynamicRangePanel.keepEmptyCheckbox.toolTipText" -msgstr "δΏζŒθŠ‚η‚Ή/θΎΉδΈΊη©Ίζˆ–η©ΊεŒΊι—΄" - -msgid "DynamicRangePanel.keepEmptyCheckbox.text" -msgstr "δΏζŒη©Ίε€Ό" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/es.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/es.po deleted file mode 100644 index a2ee3c6953..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/es.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:04+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interfaz de usuario de las implementaciones de los filtros" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/fr.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/fr.po deleted file mode 100644 index 94a51b94a5..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/fr.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:04+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interface utilisateur des filtres" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle.properties index 7b0b81ee7a..c8368c2188 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle.properties @@ -6,3 +6,11 @@ EgoPanel.withSelfCheckbox.text=With self EgoPanel.nodeIdTextField.toolTipText=Set node's ID or LABEL NeighborsPanel.labelDepth.text=Depth: NeighborsPanel.withSelfCheckbox.text=With self +ShortestPathPanel.nodeIdTextField.toolTipText=Set node's ID or LABEL +ShortestPathPanel.nodeIdTextField.text= +ShortestPathPanel.labelNodeId1.text=Node ID 1: +ShortestPathPanel.labelNodeId2.text=Node ID 2: +ShortestPathPanel.nodeIdTextField2.toolTipText=Set node's ID or LABEL +ShortestPathPanel.nodeIdTextField2.text= +ShortestPathPanel.okButton1.text=OK +ShortestPathPanel.okButton2.text=OK diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_ar.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_ca.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_ca.properties new file mode 100644 index 0000000000..3bc324f29c --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_ca.properties @@ -0,0 +1,8 @@ +EgoPanel.labelNodeId.text=ID del node: +EgoPanel.nodeIdTextField.text= +EgoPanel.labelDepth.text=Depth: +EgoPanel.okButton.text=OK +EgoPanel.withSelfCheckbox.text=With self +EgoPanel.nodeIdTextField.toolTipText=Set node's ID or LABEL +NeighborsPanel.labelDepth.text=Depth: +NeighborsPanel.withSelfCheckbox.text=With self diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_cs.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_cs.properties index dd7553ae4e..6f65fd3f66 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_cs.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_cs.properties @@ -1,21 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-17 20\:47+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -EgoPanel.labelNodeId.text=ID uzlu\: - -EgoPanel.labelDepth.text=Hloubka\: - -EgoPanel.okButton.text=OK - -EgoPanel.withSelfCheckbox.text=Se sebou - -EgoPanel.nodeIdTextField.toolTipText=Nastavit ID uzle nebo \u0160T\u00cdTEK - -NeighborsPanel.labelDepth.text=Hloubka\: - -NeighborsPanel.withSelfCheckbox.text=Se sebou +EgoPanel.labelNodeId.text=ID uzlu: +EgoPanel.nodeIdTextField.text= +EgoPanel.labelDepth.text=Hloubka: +EgoPanel.okButton.text=OK +EgoPanel.withSelfCheckbox.text=Se sebou +EgoPanel.nodeIdTextField.toolTipText=Nastavit ID uzle nebo JMENOVKU +NeighborsPanel.labelDepth.text=Hloubka: +NeighborsPanel.withSelfCheckbox.text=Se sebou diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_de.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_de.properties new file mode 100644 index 0000000000..a61a2e1c0b --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_de.properties @@ -0,0 +1,8 @@ +EgoPanel.labelNodeId.text=Knoten ID: +EgoPanel.nodeIdTextField.text= +EgoPanel.labelDepth.text=Tiefe: +EgoPanel.okButton.text=OK +EgoPanel.withSelfCheckbox.text=Inkl. eigener +EgoPanel.nodeIdTextField.toolTipText=Setze Knoten ID oder Bezeichnung +NeighborsPanel.labelDepth.text=Tiefe: +NeighborsPanel.withSelfCheckbox.text=Inkl. eigener diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_es.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_es.properties index 55021528c9..b9e0ff0b6d 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_es.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_es.properties @@ -1,21 +1,14 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:04+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -EgoPanel.labelNodeId.text=ID de nodo\: - -EgoPanel.labelDepth.text=Profundidad\: - +EgoPanel.labelNodeId.text=ID de nodo: +EgoPanel.nodeIdTextField.text= +EgoPanel.labelDepth.text=Profundidad: EgoPanel.okButton.text=OK - EgoPanel.withSelfCheckbox.text=Consigo mismo - EgoPanel.nodeIdTextField.toolTipText=Id o etiqueta del nodo - -NeighborsPanel.labelDepth.text=Profundidad\: - +NeighborsPanel.labelDepth.text=Profundidad: NeighborsPanel.withSelfCheckbox.text=Consigo mismo +ShortestPathPanel.labelNodeId2.text=ID del nodo 2: +ShortestPathPanel.okButton1.text=De acuerdo +ShortestPathPanel.nodeIdTextField.toolTipText=Establecer ID o ETIQUETA del nodo +ShortestPathPanel.okButton2.text=De acuerdo +ShortestPathPanel.labelNodeId1.text=ID del nodo 1: +ShortestPathPanel.nodeIdTextField2.toolTipText=Establecer ID o ETIQUETA del nodo diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_fr.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_fr.properties index 64527ee465..bec399080e 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_fr.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_fr.properties @@ -1,21 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:04+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -EgoPanel.labelNodeId.text=ID du noeud \: - -EgoPanel.labelDepth.text=Profondeur - -EgoPanel.okButton.text=OK - -EgoPanel.withSelfCheckbox.text=Avec soi-m\u00eame - -EgoPanel.nodeIdTextField.toolTipText=ID ou LABEL du noeud - -NeighborsPanel.labelDepth.text=Profondeur \: - -NeighborsPanel.withSelfCheckbox.text=Soi-m\u00eame +EgoPanel.labelNodeId.text=ID du noeud : +EgoPanel.nodeIdTextField.text= +EgoPanel.labelDepth.text=Profondeur +EgoPanel.okButton.text=OK +EgoPanel.withSelfCheckbox.text=Avec soi-mκme +EgoPanel.nodeIdTextField.toolTipText=ID ou LABEL du noeud +NeighborsPanel.labelDepth.text=Profondeur : +NeighborsPanel.withSelfCheckbox.text=Soi-mκme diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_he.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_he.properties new file mode 100644 index 0000000000..d09291b3cf --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_he.properties @@ -0,0 +1,8 @@ +EgoPanel.labelNodeId.text=Node ID: +EgoPanel.nodeIdTextField.text= +EgoPanel.labelDepth.text=Depth: +EgoPanel.okButton.text=OK +EgoPanel.withSelfCheckbox.text=With self +EgoPanel.nodeIdTextField.toolTipText=Set node's ID or LABEL +NeighborsPanel.labelDepth.text=Depth: +NeighborsPanel.withSelfCheckbox.text=With self diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_hu.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_hu.properties new file mode 100644 index 0000000000..07eb82751a --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_hu.properties @@ -0,0 +1,15 @@ + + +EgoPanel.nodeIdTextField.toolTipText=\u00C1ll\u00EDtsa be a csom\u00F3pont ID azonos\u00EDt\u00F3j\u00E1t vagy \u00C9l\u00E9t +ShortestPathPanel.labelNodeId2.text=Csom\u00F3pontazonos\u00EDt\u00F3 ID 2: +EgoPanel.withSelfCheckbox.text=\u00D6nmag\u00E1val +NeighborsPanel.withSelfCheckbox.text=\u00D6nmag\u00E1val +ShortestPathPanel.okButton1.text=OK +EgoPanel.labelNodeId.text=Csom\u00F3pont azonos\u00EDt\u00F3: +NeighborsPanel.labelDepth.text=M\u00E9lys\u00E9g: +ShortestPathPanel.nodeIdTextField.toolTipText=\u00C1ll\u00EDtsa be a csom\u00F3pont ID azonos\u00EDt\u00F3j\u00E1t vagy \u00C9l\u00E9t +EgoPanel.labelDepth.text=M\u00E9lys\u00E9g: +ShortestPathPanel.okButton2.text=OK +ShortestPathPanel.labelNodeId1.text=Csom\u00F3pontazonos\u00EDt\u00F3 ID 2: +EgoPanel.okButton.text=OK +ShortestPathPanel.nodeIdTextField2.toolTipText=\u00C1ll\u00EDtsa be a csom\u00F3pont azonos\u00EDt\u00F3j\u00E1t vagy \u00E9l\u00E9t diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_it.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_it.properties new file mode 100644 index 0000000000..d09291b3cf --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_it.properties @@ -0,0 +1,8 @@ +EgoPanel.labelNodeId.text=Node ID: +EgoPanel.nodeIdTextField.text= +EgoPanel.labelDepth.text=Depth: +EgoPanel.okButton.text=OK +EgoPanel.withSelfCheckbox.text=With self +EgoPanel.nodeIdTextField.toolTipText=Set node's ID or LABEL +NeighborsPanel.labelDepth.text=Depth: +NeighborsPanel.withSelfCheckbox.text=With self diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_ja.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_ja.properties index a6d08f780a..3fb1a3d905 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_ja.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_ja.properties @@ -1,21 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-04 09\:58+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -EgoPanel.labelNodeId.text=\u30ce\u30fc\u30c9\u306eID\: - -EgoPanel.labelDepth.text=\u6df1\u3055\: - -EgoPanel.okButton.text=OK - -EgoPanel.withSelfCheckbox.text=\u81ea\u8eab\u3068\u3068\u3082\u306b - -EgoPanel.nodeIdTextField.toolTipText=\u30ce\u30fc\u30c9\u306eID\u3084\u30e9\u30d9\u30eb\u3092\u8a2d\u5b9a - -NeighborsPanel.labelDepth.text=\u6df1\u3055\: - -NeighborsPanel.withSelfCheckbox.text=\u81ea\u8eab\u3092\u542b\u3080 +EgoPanel.labelNodeId.text=\u30ce\u30fc\u30c9\u306eID: +EgoPanel.nodeIdTextField.text= +EgoPanel.labelDepth.text=\u6df1\u3055: +EgoPanel.okButton.text=OK +EgoPanel.withSelfCheckbox.text=\u81ea\u8eab\u3068\u3068\u3082\u306b +EgoPanel.nodeIdTextField.toolTipText=\u30ce\u30fc\u30c9\u306eID\u3084\u30e9\u30d9\u30eb\u3092\u8a2d\u5b9a +NeighborsPanel.labelDepth.text=\u6df1\u3055: +NeighborsPanel.withSelfCheckbox.text=\u81ea\u8eab\u3092\u542b\u3080 diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_ko.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_ko.properties new file mode 100644 index 0000000000..2335d5dfde --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_ko.properties @@ -0,0 +1,15 @@ + + +EgoPanel.nodeIdTextField.toolTipText=\uB178\uB4DC ID \uB610\uB294 \uB77C\uBCA8 \uC124\uC815 +ShortestPathPanel.labelNodeId2.text=\uB178\uB4DC ID 2: +EgoPanel.withSelfCheckbox.text=\uC2A4\uC2A4\uB85C +NeighborsPanel.withSelfCheckbox.text=\uC2A4\uC2A4\uB85C +ShortestPathPanel.okButton1.text=OK +EgoPanel.labelNodeId.text=\uB178\uB4DC ID: +NeighborsPanel.labelDepth.text=\uAE4A\uC774: +ShortestPathPanel.nodeIdTextField.toolTipText=\uB178\uB4DC ID \uB610\uB294 \uB77C\uBCA8 \uC124\uC815 +EgoPanel.labelDepth.text=\uAE4A\uC774: +ShortestPathPanel.okButton2.text=OK +ShortestPathPanel.labelNodeId1.text=\uB178\uB4DC ID 1: +EgoPanel.okButton.text=OK +ShortestPathPanel.nodeIdTextField2.toolTipText=\uB178\uB4DC ID \uB610\uB294 \uB77C\uBCA8 \uC124\uC815 diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_nl.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_nl.properties new file mode 100644 index 0000000000..d09291b3cf --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_nl.properties @@ -0,0 +1,8 @@ +EgoPanel.labelNodeId.text=Node ID: +EgoPanel.nodeIdTextField.text= +EgoPanel.labelDepth.text=Depth: +EgoPanel.okButton.text=OK +EgoPanel.withSelfCheckbox.text=With self +EgoPanel.nodeIdTextField.toolTipText=Set node's ID or LABEL +NeighborsPanel.labelDepth.text=Depth: +NeighborsPanel.withSelfCheckbox.text=With self diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_pt_BR.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_pt_BR.properties index 410cd31442..3e8b702ca4 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_pt_BR.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_pt_BR.properties @@ -1,21 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 18\:18+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -EgoPanel.labelNodeId.text=ID do n\u00f3\: - -EgoPanel.labelDepth.text=Profundidade\: - -EgoPanel.okButton.text=OK - -EgoPanel.withSelfCheckbox.text=Consigo mesmo - -EgoPanel.nodeIdTextField.toolTipText=Configurar o atributo ID ou LABEL do n\u00f3 - -NeighborsPanel.labelDepth.text=Profundidade\: - -NeighborsPanel.withSelfCheckbox.text=Consigo mesmo +EgoPanel.labelNodeId.text=ID do nσ: +EgoPanel.nodeIdTextField.text= +EgoPanel.labelDepth.text=Profundidade: +EgoPanel.okButton.text=OK +EgoPanel.withSelfCheckbox.text=Consigo mesmo +EgoPanel.nodeIdTextField.toolTipText=Configurar o atributo ID ou LABEL do nσ +NeighborsPanel.labelDepth.text=Profundidade: +NeighborsPanel.withSelfCheckbox.text=Consigo mesmo diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_ro.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_ro.properties new file mode 100644 index 0000000000..3e4faf2be0 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_ro.properties @@ -0,0 +1,9 @@ + + +EgoPanel.labelNodeId.text=ID nod: +EgoPanel.okButton.text=OK +EgoPanel.labelDepth.text=Ad\u00E2ncime: +EgoPanel.withSelfCheckbox.text=Cu sine +NeighborsPanel.withSelfCheckbox.text=Cu sine +EgoPanel.nodeIdTextField.toolTipText=Seteaz\u0103 Id-ul sau eticheta nodului +NeighborsPanel.labelDepth.text=Ad\u00E2ncime: diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_ru.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_ru.properties index 82bb490ff3..de89879db2 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_ru.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_ru.properties @@ -1,21 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-21 07\:12+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -EgoPanel.labelNodeId.text=ID \u0443\u0437\u043b\u0430\: - -EgoPanel.labelDepth.text=\u0413\u043b\u0443\u0431\u0438\u043d\u0430\: - -EgoPanel.okButton.text=\u041e\u041a - -EgoPanel.withSelfCheckbox.text=\u0412\u043a\u043b\u044e\u0447\u0430\u044f \u0441\u0435\u0431\u044f - -EgoPanel.nodeIdTextField.toolTipText=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 ID \u0438\u043b\u0438 \u043c\u0435\u0442\u043a\u0443 \u0443\u0437\u043b\u0430 - -NeighborsPanel.labelDepth.text=\u0413\u043b\u0443\u0431\u0438\u043d\u0430\: - -NeighborsPanel.withSelfCheckbox.text=\u0412\u043a\u043b\u044e\u0447\u0430\u044f \u0441\u0435\u0431\u044f +EgoPanel.labelNodeId.text=ID \u0443\u0437\u043b\u0430: +EgoPanel.nodeIdTextField.text= +EgoPanel.labelDepth.text=\u0413\u043b\u0443\u0431\u0438\u043d\u0430: +EgoPanel.okButton.text=\u041e\u041a +EgoPanel.withSelfCheckbox.text=\u0412\u043a\u043b\u044e\u0447\u0430\u044f \u0441\u0435\u0431\u044f +EgoPanel.nodeIdTextField.toolTipText=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 ID \u0438\u043b\u0438 \u043c\u0435\u0442\u043a\u0443 \u0443\u0437\u043b\u0430 +NeighborsPanel.labelDepth.text=\u0413\u043b\u0443\u0431\u0438\u043d\u0430: +NeighborsPanel.withSelfCheckbox.text=\u0412\u043a\u043b\u044e\u0447\u0430\u044f \u0441\u0435\u0431\u044f diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_th.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_tr.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_tr.properties new file mode 100644 index 0000000000..d09291b3cf --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_tr.properties @@ -0,0 +1,8 @@ +EgoPanel.labelNodeId.text=Node ID: +EgoPanel.nodeIdTextField.text= +EgoPanel.labelDepth.text=Depth: +EgoPanel.okButton.text=OK +EgoPanel.withSelfCheckbox.text=With self +EgoPanel.nodeIdTextField.toolTipText=Set node's ID or LABEL +NeighborsPanel.labelDepth.text=Depth: +NeighborsPanel.withSelfCheckbox.text=With self diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_uk.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_uk.properties new file mode 100644 index 0000000000..84ec5dc5dd --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_uk.properties @@ -0,0 +1,16 @@ +ShortestPathPanel.nodeIdTextField2.text=\u0406 +ShortestPathPanel.okButton1.text=OK +EgoPanel.okButton.text=OK +EgoPanel.labelNodeId.text=\u0406\u0434\u0435\u043D\u0442\u0438\u0444\u0456\u043A\u0430\u0442\u043E\u0440 \u0432\u0443\u0437\u043B\u0430: +EgoPanel.nodeIdTextField.text=\u0406 +EgoPanel.labelDepth.text=\u0413\u043B\u0438\u0431\u0438\u043D\u0430: +EgoPanel.withSelfCheckbox.text=\u0417 \u0441\u043E\u0431\u043E\u044E +EgoPanel.nodeIdTextField.toolTipText=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0456\u0442\u044C \u0456\u0434\u0435\u043D\u0442\u0438\u0444\u0456\u043A\u0430\u0442\u043E\u0440 \u0430\u0431\u043E \u041C\u0406\u0422\u041A\u0423 \u0432\u0443\u0437\u043B\u0430 +NeighborsPanel.labelDepth.text=\u0413\u043B\u0438\u0431\u0438\u043D\u0430: +NeighborsPanel.withSelfCheckbox.text=\u0417 \u0441\u043E\u0431\u043E\u044E +ShortestPathPanel.nodeIdTextField.toolTipText=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0456\u0442\u044C \u0456\u0434\u0435\u043D\u0442\u0438\u0444\u0456\u043A\u0430\u0442\u043E\u0440 \u0430\u0431\u043E \u041C\u0406\u0422\u041A\u0423 \u0432\u0443\u0437\u043B\u0430 +ShortestPathPanel.nodeIdTextField.text=\u0406 +ShortestPathPanel.labelNodeId1.text=\u0406\u0434\u0435\u043D\u0442\u0438\u0444\u0456\u043A\u0430\u0442\u043E\u0440 \u0432\u0443\u0437\u043B\u0430 1: +ShortestPathPanel.labelNodeId2.text=\u0406\u0434\u0435\u043D\u0442\u0438\u0444\u0456\u043A\u0430\u0442\u043E\u0440 \u0432\u0443\u0437\u043B\u0430 2: +ShortestPathPanel.nodeIdTextField2.toolTipText=\u0423\u0441\u0442\u0430\u043D\u043E\u0432\u0456\u0442\u044C \u0456\u0434\u0435\u043D\u0442\u0438\u0444\u0456\u043A\u0430\u0442\u043E\u0440 \u0430\u0431\u043E \u041C\u0406\u0422\u041A\u0423 \u0432\u0443\u0437\u043B\u0430 +ShortestPathPanel.okButton2.text=OK diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_zh_CN.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_zh_CN.properties index 38c86a9c78..4ca4a0efcb 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_zh_CN.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_zh_CN.properties @@ -1,20 +1,14 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:13+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - EgoPanel.labelNodeId.text=\u8282\u70b9ID\uff1a - +EgoPanel.nodeIdTextField.text= EgoPanel.labelDepth.text=\u6df1\u5ea6\uff1a - EgoPanel.okButton.text=\u786e\u5b9a - EgoPanel.withSelfCheckbox.text=\u4e0e\u81ea\u5df1 - EgoPanel.nodeIdTextField.toolTipText=\u8bbe\u7f6e\u8282\u70b9\u7684ID\u6216\u6807\u7b7e - NeighborsPanel.labelDepth.text=\u6df1\u5ea6\uff1a - NeighborsPanel.withSelfCheckbox.text=\u4e0e\u81ea\u5df1 +ShortestPathPanel.labelNodeId1.text=\u8282\u70B9ID 1\uFF1A +ShortestPathPanel.labelNodeId2.text=\u8282\u70B9ID 2\uFF1A +ShortestPathPanel.nodeIdTextField.toolTipText=\u8BBE\u7F6E\u8282\u70B9\u7684ID\u6216\u6807\u7B7E +ShortestPathPanel.nodeIdTextField2.toolTipText=\u8BBE\u7F6E\u8282\u70B9\u7684ID\u6216\u6807\u7B7E +ShortestPathPanel.okButton1.text=\u786E\u5B9A +ShortestPathPanel.okButton2.text=\u786E\u5B9A diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_zh_TW.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_zh_TW.properties new file mode 100644 index 0000000000..d09291b3cf --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/Bundle_zh_TW.properties @@ -0,0 +1,8 @@ +EgoPanel.labelNodeId.text=Node ID: +EgoPanel.nodeIdTextField.text= +EgoPanel.labelDepth.text=Depth: +EgoPanel.okButton.text=OK +EgoPanel.withSelfCheckbox.text=With self +EgoPanel.nodeIdTextField.toolTipText=Set node's ID or LABEL +NeighborsPanel.labelDepth.text=Depth: +NeighborsPanel.withSelfCheckbox.text=With self diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/cs.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/cs.po deleted file mode 100644 index 270a341f86..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/cs.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-17 20:47+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "EgoPanel.labelNodeId.text" -msgstr "ID uzlu:" - -msgid "EgoPanel.labelDepth.text" -msgstr "Hloubka:" - -msgid "EgoPanel.okButton.text" -msgstr "OK" - -msgid "EgoPanel.withSelfCheckbox.text" -msgstr "Se sebou" - -msgid "EgoPanel.nodeIdTextField.toolTipText" -msgstr "Nastavit ID uzle nebo Ε TÍTEK" - -msgid "NeighborsPanel.labelDepth.text" -msgstr "Hloubka:" - -msgid "NeighborsPanel.withSelfCheckbox.text" -msgstr "Se sebou" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/es.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/es.po deleted file mode 100644 index a7f6bc7d4f..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/es.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:04+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "EgoPanel.labelNodeId.text" -msgstr "ID de nodo:" - -msgid "EgoPanel.labelDepth.text" -msgstr "Profundidad:" - -msgid "EgoPanel.okButton.text" -msgstr "OK" - -msgid "EgoPanel.withSelfCheckbox.text" -msgstr "Consigo mismo" - -msgid "EgoPanel.nodeIdTextField.toolTipText" -msgstr "Id o etiqueta del nodo" - -msgid "NeighborsPanel.labelDepth.text" -msgstr "Profundidad:" - -msgid "NeighborsPanel.withSelfCheckbox.text" -msgstr "Consigo mismo" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/fr.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/fr.po deleted file mode 100644 index 10925debcb..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/fr.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:04+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "EgoPanel.labelNodeId.text" -msgstr "ID du noeud :" - -msgid "EgoPanel.labelDepth.text" -msgstr "Profondeur" - -msgid "EgoPanel.okButton.text" -msgstr "OK" - -msgid "EgoPanel.withSelfCheckbox.text" -msgstr "Avec soi-mΓͺme" - -msgid "EgoPanel.nodeIdTextField.toolTipText" -msgstr "ID ou LABEL du noeud" - -msgid "NeighborsPanel.labelDepth.text" -msgstr "Profondeur :" - -msgid "NeighborsPanel.withSelfCheckbox.text" -msgstr "Soi-mΓͺme" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/ja.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/ja.po deleted file mode 100644 index 3fe9a235d2..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/ja.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-04 09:58+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "EgoPanel.labelNodeId.text" -msgstr "γƒŽγƒΌγƒ‰γID:" - -msgid "EgoPanel.labelDepth.text" -msgstr "深さ:" - -msgid "EgoPanel.okButton.text" -msgstr "OK" - -msgid "EgoPanel.withSelfCheckbox.text" -msgstr "θ‡ͺ身とともに" - -msgid "EgoPanel.nodeIdTextField.toolTipText" -msgstr "γƒŽγƒΌγƒ‰γIDやラベルを設εš" - -msgid "NeighborsPanel.labelDepth.text" -msgstr "深さ:" - -msgid "NeighborsPanel.withSelfCheckbox.text" -msgstr "θ‡ͺ身を含む" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/org-gephi-ui-filters-plugin-graph.pot b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/org-gephi-ui-filters-plugin-graph.pot deleted file mode 100644 index 4241cbc81a..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/org-gephi-ui-filters-plugin-graph.pot +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "EgoPanel.labelNodeId.text" -msgstr "Node ID:" - -msgid "EgoPanel.labelDepth.text" -msgstr "Depth:" - -msgid "EgoPanel.okButton.text" -msgstr "OK" - -msgid "EgoPanel.withSelfCheckbox.text" -msgstr "With self" - -msgid "EgoPanel.nodeIdTextField.toolTipText" -msgstr "Set node's ID or LABEL" - -msgid "NeighborsPanel.labelDepth.text" -msgstr "Depth:" - -msgid "NeighborsPanel.withSelfCheckbox.text" -msgstr "With self" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/pt_BR.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/pt_BR.po deleted file mode 100644 index 7cd14ebef0..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/pt_BR.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 18:18+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "EgoPanel.labelNodeId.text" -msgstr "ID do nΓ³:" - -msgid "EgoPanel.labelDepth.text" -msgstr "Profundidade:" - -msgid "EgoPanel.okButton.text" -msgstr "OK" - -msgid "EgoPanel.withSelfCheckbox.text" -msgstr "Consigo mesmo" - -msgid "EgoPanel.nodeIdTextField.toolTipText" -msgstr "Configurar o atributo ID ou LABEL do nΓ³" - -msgid "NeighborsPanel.labelDepth.text" -msgstr "Profundidade:" - -msgid "NeighborsPanel.withSelfCheckbox.text" -msgstr "Consigo mesmo" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/ru.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/ru.po deleted file mode 100644 index 090dd94a6a..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/ru.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-21 07:12+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "EgoPanel.labelNodeId.text" -msgstr "ID ΡƒΠ·Π»Π°:" - -msgid "EgoPanel.labelDepth.text" -msgstr "Π“Π»ΡƒΠ±ΠΈΠ½Π°:" - -msgid "EgoPanel.okButton.text" -msgstr "ОК" - -msgid "EgoPanel.withSelfCheckbox.text" -msgstr "Π’ΠΊΠ»ΡŽΡ‡Π°Ρ сСбя" - -msgid "EgoPanel.nodeIdTextField.toolTipText" -msgstr "Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ ID ΠΈΠ»ΠΈ ΠΌΠ΅Ρ‚ΠΊΡƒ ΡƒΠ·Π»Π°" - -msgid "NeighborsPanel.labelDepth.text" -msgstr "Π“Π»ΡƒΠ±ΠΈΠ½Π°:" - -msgid "NeighborsPanel.withSelfCheckbox.text" -msgstr "Π’ΠΊΠ»ΡŽΡ‡Π°Ρ сСбя" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/zh_CN.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/zh_CN.po deleted file mode 100644 index 869fbcf625..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/graph/zh_CN.po +++ /dev/null @@ -1,39 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:13+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "EgoPanel.labelNodeId.text" -msgstr "θŠ‚η‚ΉID:" - -msgid "EgoPanel.labelDepth.text" -msgstr "深度:" - -msgid "EgoPanel.okButton.text" -msgstr "η‘εš" - -msgid "EgoPanel.withSelfCheckbox.text" -msgstr "与θ‡ͺε·±" - -msgid "EgoPanel.nodeIdTextField.toolTipText" -msgstr "θΎη½θŠ‚η‚Ήηš„IDζˆ–ζ ‡η­Ύ" - -msgid "NeighborsPanel.labelDepth.text" -msgstr "深度:" - -msgid "NeighborsPanel.withSelfCheckbox.text" -msgstr "与θ‡ͺε·±" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/ja.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/ja.po deleted file mode 100644 index ffa958456b..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/ja.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-19 07:01+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "フィルタγεŸθ£…γUI" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_ar.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_ca.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_ca.properties new file mode 100644 index 0000000000..46d8077a47 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_ca.properties @@ -0,0 +1,4 @@ +MASKEdgePanel.bothButton.text=both +MASKEdgePanel.sourceButton.text=source +MASKEdgePanel.targetButton.text=target +MASKEdgePanel.anyButton.text=qualsevol diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_cs.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_cs.properties index 8b248bf38a..a50d9476c9 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_cs.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_cs.properties @@ -1,15 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-17 20\:34+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -MASKEdgePanel.bothButton.text=oba - -MASKEdgePanel.sourceButton.text=zdroj - -MASKEdgePanel.targetButton.text=c\u00edl - -MASKEdgePanel.anyButton.text=v\u0161echny +MASKEdgePanel.bothButton.text=oba +MASKEdgePanel.sourceButton.text=zdroj +MASKEdgePanel.targetButton.text=cνl +MASKEdgePanel.anyButton.text=v\u0161echny diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_de.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_de.properties new file mode 100644 index 0000000000..b6b3b6e35d --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_de.properties @@ -0,0 +1,4 @@ +MASKEdgePanel.bothButton.text=beide +MASKEdgePanel.sourceButton.text=Ursprung +MASKEdgePanel.targetButton.text=Ziel +MASKEdgePanel.anyButton.text=Beliebige diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_es.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_es.properties index 604ad64264..4484d987c0 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_es.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_es.properties @@ -1,15 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:04+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -MASKEdgePanel.bothButton.text=Ambos - -MASKEdgePanel.sourceButton.text=Origen - -MASKEdgePanel.targetButton.text=Destino - -MASKEdgePanel.anyButton.text=Cualquiera +MASKEdgePanel.bothButton.text=Ambos +MASKEdgePanel.sourceButton.text=Origen +MASKEdgePanel.targetButton.text=Destino +MASKEdgePanel.anyButton.text=Cualquiera diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_fr.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_fr.properties index 9ef48d5045..c7cfe02584 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_fr.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_fr.properties @@ -1,15 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:04+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -MASKEdgePanel.bothButton.text=les deux - -MASKEdgePanel.sourceButton.text=source - -MASKEdgePanel.targetButton.text=destination - -MASKEdgePanel.anyButton.text=n'importe +MASKEdgePanel.bothButton.text=les deux +MASKEdgePanel.sourceButton.text=source +MASKEdgePanel.targetButton.text=destination +MASKEdgePanel.anyButton.text=n'importe diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_he.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_he.properties new file mode 100644 index 0000000000..dddfc4ab77 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_he.properties @@ -0,0 +1,4 @@ +MASKEdgePanel.bothButton.text=both +MASKEdgePanel.sourceButton.text=source +MASKEdgePanel.targetButton.text=target +MASKEdgePanel.anyButton.text=any diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_hu.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_hu.properties new file mode 100644 index 0000000000..6633e9679d --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_hu.properties @@ -0,0 +1,6 @@ + + +MASKEdgePanel.sourceButton.text=forr\u00E1s +MASKEdgePanel.bothButton.text=mindkett\u0151 +MASKEdgePanel.targetButton.text=c\u00E9lpont +MASKEdgePanel.anyButton.text=minden diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_it.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_it.properties new file mode 100644 index 0000000000..dddfc4ab77 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_it.properties @@ -0,0 +1,4 @@ +MASKEdgePanel.bothButton.text=both +MASKEdgePanel.sourceButton.text=source +MASKEdgePanel.targetButton.text=target +MASKEdgePanel.anyButton.text=any diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_ja.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_ja.properties index 7fe63fbc91..d0d0c390d0 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_ja.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_ja.properties @@ -1,15 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-18 10\:32+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -MASKEdgePanel.bothButton.text=\u4e21\u65b9 - -MASKEdgePanel.sourceButton.text=\u30bd\u30fc\u30b9 - -MASKEdgePanel.targetButton.text=\u30bf\u30fc\u30b2\u30c3\u30c8 - -MASKEdgePanel.anyButton.text=\u3044\u304b\u306a\u308b +MASKEdgePanel.bothButton.text=\u4e21\u65b9 +MASKEdgePanel.sourceButton.text=\u30bd\u30fc\u30b9 +MASKEdgePanel.targetButton.text=\u30bf\u30fc\u30b2\u30c3\u30c8 +MASKEdgePanel.anyButton.text=\u3044\u304b\u306a\u308b diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_ko.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_ko.properties new file mode 100644 index 0000000000..fdf3b1300c --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_ko.properties @@ -0,0 +1,6 @@ + + +MASKEdgePanel.sourceButton.text=\uC18C\uC2A4 +MASKEdgePanel.bothButton.text=\uC591\uCABD +MASKEdgePanel.targetButton.text=\uD0C0\uAC9F +MASKEdgePanel.anyButton.text=\uC784\uC758 diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_nl.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_nl.properties new file mode 100644 index 0000000000..0f9c486716 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_nl.properties @@ -0,0 +1,4 @@ +MASKEdgePanel.bothButton.text=both +MASKEdgePanel.sourceButton.text=bron +MASKEdgePanel.targetButton.text=doel +MASKEdgePanel.anyButton.text=any diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_pt_BR.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_pt_BR.properties index 235d3d7c53..780d91613c 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_pt_BR.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_pt_BR.properties @@ -1,15 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 17\:12+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -MASKEdgePanel.bothButton.text=ambos - -MASKEdgePanel.sourceButton.text=origem - -MASKEdgePanel.targetButton.text=destino - -MASKEdgePanel.anyButton.text=qualquer +MASKEdgePanel.bothButton.text=ambos +MASKEdgePanel.sourceButton.text=origem +MASKEdgePanel.targetButton.text=destino +MASKEdgePanel.anyButton.text=qualquer diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_ro.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_ro.properties new file mode 100644 index 0000000000..eb7476e60d --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_ro.properties @@ -0,0 +1,6 @@ + + +MASKEdgePanel.bothButton.text=ambele +MASKEdgePanel.sourceButton.text=sursa +MASKEdgePanel.targetButton.text=\u021Binta +MASKEdgePanel.anyButton.text=oricare diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_ru.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_ru.properties index 7f88a774ac..0b3aba01f9 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_ru.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_ru.properties @@ -1,15 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-28 07\:49+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -MASKEdgePanel.bothButton.text=\u043e\u0431\u0430 - -MASKEdgePanel.sourceButton.text=\u0443\u0437\u0435\u043b-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a - -MASKEdgePanel.targetButton.text=\u0443\u0437\u0435\u043b-\u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c - -MASKEdgePanel.anyButton.text=\u043b\u044e\u0431\u043e\u0439 +MASKEdgePanel.bothButton.text=\u043e\u0431\u0430 +MASKEdgePanel.sourceButton.text=\u0443\u0437\u0435\u043b-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a +MASKEdgePanel.targetButton.text=\u0443\u0437\u0435\u043b-\u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c +MASKEdgePanel.anyButton.text=\u043b\u044e\u0431\u043e\u0439 diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_th.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_tr.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_tr.properties new file mode 100644 index 0000000000..dddfc4ab77 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_tr.properties @@ -0,0 +1,4 @@ +MASKEdgePanel.bothButton.text=both +MASKEdgePanel.sourceButton.text=source +MASKEdgePanel.targetButton.text=target +MASKEdgePanel.anyButton.text=any diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_uk.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_uk.properties new file mode 100644 index 0000000000..c34ad2531d --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_uk.properties @@ -0,0 +1,4 @@ +MASKEdgePanel.bothButton.text=\u043E\u0431\u0438\u0434\u0432\u0430 +MASKEdgePanel.sourceButton.text=\u0434\u0436\u0435\u0440\u0435\u043B\u043E +MASKEdgePanel.targetButton.text=\u043C\u0435\u0442\u0430 +MASKEdgePanel.anyButton.text=\u0431\u0443\u0434\u044C-\u044F\u043A\u0438\u0439 diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_zh_CN.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_zh_CN.properties index 909c4615e8..61cc556acf 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_zh_CN.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_zh_CN.properties @@ -1,14 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:13+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -MASKEdgePanel.bothButton.text=\u90fd - -MASKEdgePanel.sourceButton.text=\u6e90 - -MASKEdgePanel.targetButton.text=\u76ee\u6807 - -MASKEdgePanel.anyButton.text=\u4efb\u4f55 +MASKEdgePanel.bothButton.text=\u90fd +MASKEdgePanel.sourceButton.text=\u6e90 +MASKEdgePanel.targetButton.text=\u76ee\u6807 +MASKEdgePanel.anyButton.text=\u4efb\u4f55 diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_zh_TW.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_zh_TW.properties new file mode 100644 index 0000000000..dddfc4ab77 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/Bundle_zh_TW.properties @@ -0,0 +1,4 @@ +MASKEdgePanel.bothButton.text=both +MASKEdgePanel.sourceButton.text=source +MASKEdgePanel.targetButton.text=target +MASKEdgePanel.anyButton.text=any diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/cs.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/cs.po deleted file mode 100644 index beba2214b8..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/cs.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-17 20:34+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "MASKEdgePanel.bothButton.text" -msgstr "oba" - -msgid "MASKEdgePanel.sourceButton.text" -msgstr "zdroj" - -msgid "MASKEdgePanel.targetButton.text" -msgstr "cΓ­l" - -msgid "MASKEdgePanel.anyButton.text" -msgstr "vΕ‘echny" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/es.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/es.po deleted file mode 100644 index 63d7bea539..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/es.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:04+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "MASKEdgePanel.bothButton.text" -msgstr "Ambos" - -msgid "MASKEdgePanel.sourceButton.text" -msgstr "Origen" - -msgid "MASKEdgePanel.targetButton.text" -msgstr "Destino" - -msgid "MASKEdgePanel.anyButton.text" -msgstr "Cualquiera" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/fr.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/fr.po deleted file mode 100644 index cd23506ec4..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/fr.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:04+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "MASKEdgePanel.bothButton.text" -msgstr "les deux" - -msgid "MASKEdgePanel.sourceButton.text" -msgstr "source" - -msgid "MASKEdgePanel.targetButton.text" -msgstr "destination" - -msgid "MASKEdgePanel.anyButton.text" -msgstr "n'importe" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/ja.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/ja.po deleted file mode 100644 index 71c98c83e7..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/ja.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-18 10:32+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "MASKEdgePanel.bothButton.text" -msgstr "δΈ‘ζ–Ή" - -msgid "MASKEdgePanel.sourceButton.text" -msgstr "γ‚½γƒΌγ‚Ή" - -msgid "MASKEdgePanel.targetButton.text" -msgstr "γ‚ΏγƒΌγ‚²γƒƒγƒˆ" - -msgid "MASKEdgePanel.anyButton.text" -msgstr "いかγͺγ‚‹" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/org-gephi-ui-filters-plugin-operator.pot b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/org-gephi-ui-filters-plugin-operator.pot deleted file mode 100644 index 118934077b..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/org-gephi-ui-filters-plugin-operator.pot +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "MASKEdgePanel.bothButton.text" -msgstr "both" - -msgid "MASKEdgePanel.sourceButton.text" -msgstr "source" - -msgid "MASKEdgePanel.targetButton.text" -msgstr "target" - -msgid "MASKEdgePanel.anyButton.text" -msgstr "any" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/pt_BR.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/pt_BR.po deleted file mode 100644 index 4e790e6ddc..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/pt_BR.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 17:12+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "MASKEdgePanel.bothButton.text" -msgstr "ambos" - -msgid "MASKEdgePanel.sourceButton.text" -msgstr "origem" - -msgid "MASKEdgePanel.targetButton.text" -msgstr "destino" - -msgid "MASKEdgePanel.anyButton.text" -msgstr "qualquer" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/ru.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/ru.po deleted file mode 100644 index 52b309f3cf..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/ru.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-28 07:49+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "MASKEdgePanel.bothButton.text" -msgstr "ΠΎΠ±Π°" - -msgid "MASKEdgePanel.sourceButton.text" -msgstr "ΡƒΠ·Π΅Π»-источник" - -msgid "MASKEdgePanel.targetButton.text" -msgstr "ΡƒΠ·Π΅Π»-ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ" - -msgid "MASKEdgePanel.anyButton.text" -msgstr "любой" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/zh_CN.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/zh_CN.po deleted file mode 100644 index facd08ddd6..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/operator/zh_CN.po +++ /dev/null @@ -1,30 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:13+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "MASKEdgePanel.bothButton.text" -msgstr "都" - -msgid "MASKEdgePanel.sourceButton.text" -msgstr "源" - -msgid "MASKEdgePanel.targetButton.text" -msgstr "η›ζ ‡" - -msgid "MASKEdgePanel.anyButton.text" -msgstr "任何" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/org-gephi-ui-filters-plugin.pot b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/org-gephi-ui-filters-plugin.pot deleted file mode 100644 index be09ee79e7..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/org-gephi-ui-filters-plugin.pot +++ /dev/null @@ -1,19 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Filters implementations UI" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle.properties index c5b557508e..2630f8223b 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle.properties @@ -1,3 +1,4 @@ PartitionPanel.action.refresh = Refresh PartitionPanel.action.selectall = Select all -PartitionPanel.action.unselectall = Unselect all \ No newline at end of file +PartitionPanel.action.unselectall = Unselect all +PartitionPanel.action.flattenList = Flatten list \ No newline at end of file diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_ar.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_ca.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_ca.properties new file mode 100644 index 0000000000..809700ccb0 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_ca.properties @@ -0,0 +1,3 @@ +PartitionPanel.action.refresh = Refresca +PartitionPanel.action.selectall = Selecciona'ls tots +PartitionPanel.action.unselectall = Desselecciona'ls tots diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_cs.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_cs.properties index 4ac1fef405..35a957c9b7 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_cs.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_cs.properties @@ -1,13 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-17 20\:34+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -PartitionPanel.action.refresh=Obnovit - -PartitionPanel.action.selectall=Ozna\u010dit v\u0161e - -PartitionPanel.action.unselectall=Odzna\u010dit v\u0161e +PartitionPanel.action.refresh = Obnovit +PartitionPanel.action.selectall = Ozna\u010dit v\u0161e +PartitionPanel.action.unselectall = Odzna\u010dit v\u0161e diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_de.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_de.properties new file mode 100644 index 0000000000..58dd75bb63 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_de.properties @@ -0,0 +1,3 @@ +PartitionPanel.action.refresh = Aktualisieren +PartitionPanel.action.selectall = Alles Auswδhlen +PartitionPanel.action.unselectall = Alles Abwδhlen diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_es.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_es.properties index 46a4821ed2..b9d895b44e 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_es.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_es.properties @@ -1,13 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:04+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - PartitionPanel.action.refresh=Refrescar - PartitionPanel.action.selectall=Seleccionar todos - PartitionPanel.action.unselectall=Deseleccionar todos +PartitionPanel.action.flattenList=Lista plana diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_fr.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_fr.properties index 0f4c1902f7..071192f746 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_fr.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_fr.properties @@ -1,13 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:04+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -PartitionPanel.action.refresh=Rafraichir - -PartitionPanel.action.selectall=Tout s\u00e9lectionner - -PartitionPanel.action.unselectall=Tout d\u00e9s\u00e9lectionner +PartitionPanel.action.refresh = Rafraichir +PartitionPanel.action.selectall = Tout sιlectionner +PartitionPanel.action.unselectall = Tout dιsιlectionner diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_he.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_he.properties new file mode 100644 index 0000000000..46f09ea39c --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_he.properties @@ -0,0 +1,3 @@ +PartitionPanel.action.refresh=Refresh +PartitionPanel.action.selectall=Select all +PartitionPanel.action.unselectall=Unselect all diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_hu.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_hu.properties new file mode 100644 index 0000000000..3660eb511a --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_hu.properties @@ -0,0 +1,6 @@ + + +PartitionPanel.action.flattenList=Lista lap\u00EDt\u00E1sa +PartitionPanel.action.refresh=Friss\u00EDt\u00E9s +PartitionPanel.action.selectall=Mindet kiv\u00E1laszt +PartitionPanel.action.unselectall=Minden kijel\u00F6l\u00E9s megsz\u00FCntet\u00E9se diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_it.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_it.properties new file mode 100644 index 0000000000..df3c27be0e --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_it.properties @@ -0,0 +1,4 @@ +PartitionPanel.action.refresh=Aggiorna +PartitionPanel.action.selectall=Select all +PartitionPanel.action.unselectall=Unselect all +PartitionPanel.action.flattenList=Appiattisci elenco diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_ja.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_ja.properties index 05ad53ffe3..0793957641 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_ja.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_ja.properties @@ -1,13 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-18 10\:45+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -PartitionPanel.action.refresh=\u30ea\u30d5\u30ec\u30c3\u30b7\u30e5 - -PartitionPanel.action.selectall=\u3059\u3079\u3066\u3092\u9078\u629e - -PartitionPanel.action.unselectall=\u3059\u3079\u3066\u3092\u9078\u629e\u306e\u89e3\u9664 +PartitionPanel.action.refresh = \u30ea\u30d5\u30ec\u30c3\u30b7\u30e5 +PartitionPanel.action.selectall = \u3059\u3079\u3066\u3092\u9078\u629e +PartitionPanel.action.unselectall = \u3059\u3079\u3066\u3092\u9078\u629e\u306e\u89e3\u9664 diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_ko.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_ko.properties new file mode 100644 index 0000000000..d3e1e84902 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_ko.properties @@ -0,0 +1,6 @@ + + +PartitionPanel.action.flattenList=\uBAA9\uB85D \uD3BC\uCE58\uAE30 +PartitionPanel.action.refresh=\uC0C8\uB85C\uACE0\uCE68 +PartitionPanel.action.selectall=\uC804\uCCB4 \uC120\uD0DD +PartitionPanel.action.unselectall=\uBAA8\uB450 \uC120\uD0DD \uD574\uC81C diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_nl.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_nl.properties new file mode 100644 index 0000000000..6eee4ffae8 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_nl.properties @@ -0,0 +1,3 @@ +PartitionPanel.action.refresh=Vernieuwen +PartitionPanel.action.selectall=Select all +PartitionPanel.action.unselectall=Unselect all diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_pt_BR.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_pt_BR.properties index 9231bc27a5..0b83e970ef 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_pt_BR.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_pt_BR.properties @@ -1,13 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 17\:18+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -PartitionPanel.action.refresh=Atualizar - -PartitionPanel.action.selectall=Selecionar todos - -PartitionPanel.action.unselectall=Desmarcar todos +PartitionPanel.action.refresh = Atualizar +PartitionPanel.action.selectall = Selecionar todos +PartitionPanel.action.unselectall = Desmarcar todos diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_ro.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_ro.properties new file mode 100644 index 0000000000..03978a09f3 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_ro.properties @@ -0,0 +1,5 @@ + + +PartitionPanel.action.refresh=Re\u00EEmprosp\u0103tare +PartitionPanel.action.selectall=Selecteaz\u0103 tot +PartitionPanel.action.unselectall=Deselecteaz\u0103 tot diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_ru.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_ru.properties index f61aba3de9..7fcf8b595a 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_ru.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_ru.properties @@ -1,13 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-19 19\:17+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -PartitionPanel.action.refresh=\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c - -PartitionPanel.action.selectall=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0451 - -PartitionPanel.action.unselectall=\u0421\u043d\u044f\u0442\u044c \u0432\u044b\u0431\u043e\u0440 +PartitionPanel.action.refresh = \u041e\u0431\u043d\u043e\u0432\u0438\u0442\u044c +PartitionPanel.action.selectall = \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0451 +PartitionPanel.action.unselectall = \u0421\u043d\u044f\u0442\u044c \u0432\u044b\u0431\u043e\u0440 diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_th.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_tr.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_tr.properties new file mode 100644 index 0000000000..46f09ea39c --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_tr.properties @@ -0,0 +1,3 @@ +PartitionPanel.action.refresh=Refresh +PartitionPanel.action.selectall=Select all +PartitionPanel.action.unselectall=Unselect all diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_uk.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_uk.properties new file mode 100644 index 0000000000..1a7ed58975 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_uk.properties @@ -0,0 +1,4 @@ +PartitionPanel.action.refresh=\u041E\u043D\u043E\u0432\u0438\u0442\u0438 +PartitionPanel.action.selectall=\u0412\u0438\u0431\u0440\u0430\u0442\u0438 \u0432\u0441\u0435 +PartitionPanel.action.unselectall=\u0421\u043A\u0430\u0441\u0443\u0432\u0430\u0442\u0438 \u0432\u0438\u0431\u0456\u0440 \u0443\u0441\u0456\u0445 +PartitionPanel.action.flattenList=\u0417\u0432\u0435\u0441\u0442\u0438 \u0441\u043F\u0438\u0441\u043E\u043A diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_zh_CN.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_zh_CN.properties index 03d3d02a59..b95e43ec21 100644 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_zh_CN.properties +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_zh_CN.properties @@ -1,12 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:12+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - PartitionPanel.action.refresh=\u5237\u65b0 - PartitionPanel.action.selectall=\u9009\u62e9\u6240\u6709 - PartitionPanel.action.unselectall=\u53d6\u6d88\u5168\u9009 +PartitionPanel.action.flattenList=\u5C55\u5F00\u5217\u8868 diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_zh_TW.properties b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_zh_TW.properties new file mode 100644 index 0000000000..f692106858 --- /dev/null +++ b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/Bundle_zh_TW.properties @@ -0,0 +1,3 @@ +PartitionPanel.action.refresh=\u66f4\u65b0 +PartitionPanel.action.selectall=Select all +PartitionPanel.action.unselectall=Unselect all diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/cs.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/cs.po deleted file mode 100644 index 2c4baca77e..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/cs.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-17 20:34+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "PartitionPanel.action.refresh" -msgstr "Obnovit" - -msgid "PartitionPanel.action.selectall" -msgstr "Označit vΕ‘e" - -msgid "PartitionPanel.action.unselectall" -msgstr "Odznačit vΕ‘e" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/es.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/es.po deleted file mode 100644 index d07428e737..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/es.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:04+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "PartitionPanel.action.refresh" -msgstr "Refrescar" - -msgid "PartitionPanel.action.selectall" -msgstr "Seleccionar todos" - -msgid "PartitionPanel.action.unselectall" -msgstr "Deseleccionar todos" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/fr.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/fr.po deleted file mode 100644 index 8f1c1e29c0..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/fr.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:04+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "PartitionPanel.action.refresh" -msgstr "Rafraichir" - -msgid "PartitionPanel.action.selectall" -msgstr "Tout sΓ©lectionner" - -msgid "PartitionPanel.action.unselectall" -msgstr "Tout dΓ©sΓ©lectionner" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/ja.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/ja.po deleted file mode 100644 index ef46f37955..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/ja.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-18 10:45+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "PartitionPanel.action.refresh" -msgstr "γƒͺフレッシγƒ₯" - -msgid "PartitionPanel.action.selectall" -msgstr "γ™γΉγ¦γ‚’ιΈζŠž" - -msgid "PartitionPanel.action.unselectall" -msgstr "γ™γΉγ¦γ‚’ιΈζŠžγθ§£ι™€" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/org-gephi-ui-filters-plugin-partition.pot b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/org-gephi-ui-filters-plugin-partition.pot deleted file mode 100644 index ed3f1949eb..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/org-gephi-ui-filters-plugin-partition.pot +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "PartitionPanel.action.refresh" -msgstr "Refresh" - -msgid "PartitionPanel.action.selectall" -msgstr "Select all" - -msgid "PartitionPanel.action.unselectall" -msgstr "Unselect all" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/pt_BR.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/pt_BR.po deleted file mode 100644 index 52b593ca97..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/pt_BR.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 17:18+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "PartitionPanel.action.refresh" -msgstr "Atualizar" - -msgid "PartitionPanel.action.selectall" -msgstr "Selecionar todos" - -msgid "PartitionPanel.action.unselectall" -msgstr "Desmarcar todos" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/ru.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/ru.po deleted file mode 100644 index 47ebce1e92..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/ru.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-19 19:17+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "PartitionPanel.action.refresh" -msgstr "ΠžΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ" - -msgid "PartitionPanel.action.selectall" -msgstr "Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ всё" - -msgid "PartitionPanel.action.unselectall" -msgstr "Π‘Π½ΡΡ‚ΡŒ Π²Ρ‹Π±ΠΎΡ€" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/zh_CN.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/zh_CN.po deleted file mode 100644 index 3e2d8f0ebf..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/partition/zh_CN.po +++ /dev/null @@ -1,27 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:12+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "PartitionPanel.action.refresh" -msgstr "εˆ·ζ–°" - -msgid "PartitionPanel.action.selectall" -msgstr "ι€‰ζ‹©ζ‰€ζœ‰" - -msgid "PartitionPanel.action.unselectall" -msgstr "ε–ζΆˆε…¨ι€‰" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/pt_BR.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/pt_BR.po deleted file mode 100644 index 0cd591dc53..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/pt_BR.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 17:18+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interface de usuΓ‘rio das implementaΓ§Γ΅es de filtros" diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/ru.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/ru.po deleted file mode 100644 index b3fe137622..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/ru.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-05 07:58+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Π˜ΠΌΠΏΠ»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ UI Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ² " diff --git a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/zh_CN.po b/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/zh_CN.po deleted file mode 100644 index 4e1e6a5f03..0000000000 --- a/modules/FiltersPluginUI/src/main/resources/org/gephi/ui/filters/plugin/zh_CN.po +++ /dev/null @@ -1,21 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:12+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "滀泒εžηŽ°ηš„η”¨ζˆ·η•Œι’" diff --git a/modules/GeneratorAPI/pom.xml b/modules/GeneratorAPI/pom.xml index 75d564e50f..be739db986 100644 --- a/modules/GeneratorAPI/pom.xml +++ b/modules/GeneratorAPI/pom.xml @@ -4,13 +4,13 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi io-generator-api - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm GeneratorAPI @@ -29,7 +29,7 @@ - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/GeneratorAPI/src/main/java/org/gephi/io/generator/api/GeneratorController.java b/modules/GeneratorAPI/src/main/java/org/gephi/io/generator/api/GeneratorController.java index cd084ec873..b431cb58b5 100644 --- a/modules/GeneratorAPI/src/main/java/org/gephi/io/generator/api/GeneratorController.java +++ b/modules/GeneratorAPI/src/main/java/org/gephi/io/generator/api/GeneratorController.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.generator.api; import org.gephi.io.generator.spi.Generator; @@ -49,6 +50,7 @@ Development and Distribution License("CDDL") (collectively, the *

    * This controller is a singleton and can therefore be found in Lookup: *

    GeneratorController gc = Lookup.getDefault().lookup(GeneratorController.class);
    + * * @author Mathieu Bastian * @see Generator */ @@ -56,16 +58,18 @@ public interface GeneratorController { /** * Returns generators currently loaded in the system. - * @return generators array that are available + * + * @return generators array that are available */ - public Generator[] getGenerators(); + Generator[] getGenerators(); /** * Execute a generator task in a background thread. *

    * The created elements are appened in the current workspace, or in a new * workspace if the project is empty. + * * @param generator the generator that is to be executed */ - public void generate(Generator generator); + void generate(Generator generator); } diff --git a/modules/GeneratorAPI/src/main/java/org/gephi/io/generator/spi/Generator.java b/modules/GeneratorAPI/src/main/java/org/gephi/io/generator/spi/Generator.java index 1dc15b30ce..b1039a5115 100644 --- a/modules/GeneratorAPI/src/main/java/org/gephi/io/generator/spi/Generator.java +++ b/modules/GeneratorAPI/src/main/java/org/gephi/io/generator/spi/Generator.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.generator.spi; import org.gephi.io.importer.api.ContainerLoader; @@ -48,6 +49,7 @@ Development and Distribution License("CDDL") (collectively, the * Define a generator, that is generating graph structure from a bunch of parameters. *

    * Extends LongTask to support tasks progress and cancellation. + * * @author Mathieu Bastian */ public interface Generator extends LongTask { @@ -57,20 +59,23 @@ public interface Generator extends LongTask { *

    * From the container content, the controller makes verification and append * the graph to GraphAPI. + * * @param container the container the graph is to be pushed */ - public void generate(ContainerLoader container); + void generate(ContainerLoader container); /** * Returns the generator display name. - * @return returns the generator name + * + * @return returns the generator name */ - public String getName(); + String getName(); /** * Returns the UI that belongs to this generator, or null if UI * is not needed. - * @return the UI thet belongs to this generator, or null + * + * @return the UI thet belongs to this generator, or null */ - public GeneratorUI getUI(); + GeneratorUI getUI(); } diff --git a/modules/GeneratorAPI/src/main/java/org/gephi/io/generator/spi/GeneratorUI.java b/modules/GeneratorAPI/src/main/java/org/gephi/io/generator/spi/GeneratorUI.java index f911f79994..26c1d9d361 100644 --- a/modules/GeneratorAPI/src/main/java/org/gephi/io/generator/spi/GeneratorUI.java +++ b/modules/GeneratorAPI/src/main/java/org/gephi/io/generator/spi/GeneratorUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.generator.spi; import javax.swing.JPanel; @@ -50,25 +51,28 @@ Development and Distribution License("CDDL") (collectively, the * Note that panels are compatible with ValidationAPI. If the * JPanel returned from {@link #getPanel()} is a ValidationPanel * instance, the dialog OK button will be linked to the ValidationGroup. + * * @author Mathieu Bastian */ public interface GeneratorUI { /** * Returns the panel settings. - * @return the panel settings + * + * @return the panel settings */ - public JPanel getPanel(); + JPanel getPanel(); /** * Push the generator instance to get settings values. + * * @param generator the generator instance that is to be configured */ - public void setup(Generator generator); + void setup(Generator generator); /** * Notify UI that generator settings panel has been closed and that * settings values can be written into current generator instance. */ - public void unsetup(); + void unsetup(); } diff --git a/modules/GeneratorAPI/src/main/nbm/manifest.mf b/modules/GeneratorAPI/src/main/nbm/manifest.mf index 5cdbb7afab..ed81456ba7 100644 --- a/modules/GeneratorAPI/src/main/nbm/manifest.mf +++ b/modules/GeneratorAPI/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/io/generator/api/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi Core +OpenIDE-Module-Name: Generator API \ No newline at end of file diff --git a/modules/GeneratorAPI/src/main/nbm/module.xml b/modules/GeneratorAPI/src/main/nbm/module.xml deleted file mode 100644 index bf34245b20..0000000000 --- a/modules/GeneratorAPI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle.properties b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle.properties index d4861350cf..77f0be4579 100644 --- a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle.properties +++ b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle.properties @@ -1,5 +1,2 @@ -OpenIDE-Module-Display-Category=Gephi Core -OpenIDE-Module-Long-Description=\ - Generator API/SPI, for defining new generators -OpenIDE-Module-Name=Generator API +OpenIDE-Module-Long-Description=Generator API/SPI, for defining new generators OpenIDE-Module-Short-Description=API/SPI for generators diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_ar.properties b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_ca.properties b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_ca.properties new file mode 100644 index 0000000000..26450c79ad --- /dev/null +++ b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_ca.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Generator API/SPI, for defining new generators +OpenIDE-Module-Short-Description=API/SPI for generators diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_cs.properties b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_cs.properties index 15cd7642ca..2f80ac4da3 100644 --- a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_cs.properties +++ b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_cs.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-29 19\:57+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=API/SPI gener\u00e1toru pro ur\u010den\u00ed nov\u00fdch gener\u00e1tor\u016f - -OpenIDE-Module-Short-Description=API/SPI pro gener\u00e1tory +OpenIDE-Module-Long-Description=API/SPI generαtoru pro ur\u010denν novύch generαtor\u016f +OpenIDE-Module-Short-Description=API/SPI pro generαtory diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_de.properties b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_de.properties new file mode 100644 index 0000000000..1a77d1d38d --- /dev/null +++ b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_de.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Generator API/SPI, um neue Generatoren zu definieren +OpenIDE-Module-Short-Description=API/SPI fόr Generatoren diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_es.properties b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_es.properties index cc0765885f..3cf25d7076 100644 --- a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_es.properties +++ b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_es.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:04+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Implementaciones de los generadores est\u00e1ndar - -OpenIDE-Module-Short-Description=Implementaciones de los generadores est\u00e1ndar +OpenIDE-Module-Long-Description=Implementaciones de los generadores estαndar +OpenIDE-Module-Short-Description=Implementaciones de los generadores estαndar diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_fr.properties b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_fr.properties index bc3ef71d9a..f68709d857 100644 --- a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_fr.properties +++ b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_fr.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:03+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API/SPI du module Generator, permet de d\u00e9finir de nouveaux g\u00e9n\u00e9rateurs de graphe. - -OpenIDE-Module-Short-Description=API/SPI du module Generator +OpenIDE-Module-Long-Description=API/SPI du module Generator, permet de dιfinir de nouveaux gιnιrateurs de graphe. +OpenIDE-Module-Short-Description=API/SPI du module Generator diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_he.properties b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_he.properties new file mode 100644 index 0000000000..26450c79ad --- /dev/null +++ b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_he.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Generator API/SPI, for defining new generators +OpenIDE-Module-Short-Description=API/SPI for generators diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_hu.properties b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_hu.properties new file mode 100644 index 0000000000..eba5e16af1 --- /dev/null +++ b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_hu.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Short-Description=API/SPI gener\u00E1torokhoz +OpenIDE-Module-Long-Description=Gener\u00E1tor API/SPI, \u00FAj gener\u00E1torok meghat\u00E1roz\u00E1s\u00E1hoz diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_it.properties b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_it.properties new file mode 100644 index 0000000000..26450c79ad --- /dev/null +++ b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_it.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Generator API/SPI, for defining new generators +OpenIDE-Module-Short-Description=API/SPI for generators diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_ja.properties b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_ja.properties index c7a1a4c739..da0d75aa02 100644 --- a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_ja.properties +++ b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_ja.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-19 05\:14+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u65b0\u898f\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u3092\u5b9a\u7fa9\u3059\u308b\u305f\u3081\u306e\u30b8\u30a7\u30cd\u30ec\u30fc\u30bfAPI / SPI - -OpenIDE-Module-Short-Description=\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u306e\u305f\u3081\u306eAPI / SPI +OpenIDE-Module-Long-Description=\u65b0\u898f\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u3092\u5b9a\u7fa9\u3059\u308b\u305f\u3081\u306e\u30b8\u30a7\u30cd\u30ec\u30fc\u30bfAPI / SPI +OpenIDE-Module-Short-Description=\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u306e\u305f\u3081\u306eAPI / SPI diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_ko.properties b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_ko.properties new file mode 100644 index 0000000000..4534e6d7eb --- /dev/null +++ b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_ko.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Short-Description=\uC0DD\uC131\uAE30 API/SPI +OpenIDE-Module-Long-Description=\uC0C8\uB85C\uC6B4 \uC0DD\uC131\uAE30\uB97C \uC815\uC758\uD558\uAE30 \uC704\uD55C \uC0DD\uC131\uAE30 API /SPI diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_nl.properties b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_nl.properties new file mode 100644 index 0000000000..26450c79ad --- /dev/null +++ b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_nl.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Generator API/SPI, for defining new generators +OpenIDE-Module-Short-Description=API/SPI for generators diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_oc.properties b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_oc.properties index 72cc89d48f..a76f9e306c 100644 --- a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_oc.properties +++ b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_oc.properties @@ -1,10 +1,2 @@ -# Occitan (post 1500) translation for gephi -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the gephi package. -# FIRST AUTHOR , 2010. -# -!=Project-Id-Version\: gephi\nReport-Msgid-Bugs-To\: FULL NAME \nPOT-Creation-Date\: 2010-04-07 13\:16+0200\nPO-Revision-Date\: 2010-10-24 10\:13+0000\nLast-Translator\: C\u00e9dric VALMARY (Tot en \u00f2c) \nLanguage-Team\: Occitan (post 1500) \nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nX-Launchpad-Export-Date\: 2011-03-13 04\:47+0000\nX-Generator\: Launchpad (build 12559)\n - -OpenIDE-Module-Long-Description=Algoritmes classics de clustering - -OpenIDE-Module-Short-Description=Implementacion dels transformadors de classament +OpenIDE-Module-Long-Description=Algoritmes classics de clustering +OpenIDE-Module-Short-Description=Implementacion dels transformadors de classament diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_pt_BR.properties b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_pt_BR.properties index ea5a86ff03..8c8a384631 100644 --- a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_pt_BR.properties +++ b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_pt_BR.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 17\:11+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API/SPI de geradores, utilizada para a defini\u00e7\u00e3o de novos geradores - -OpenIDE-Module-Short-Description=API/SPI de geradores +OpenIDE-Module-Long-Description=API/SPI de geradores, utilizada para a definiηγo de novos geradores +OpenIDE-Module-Short-Description=API/SPI de geradores diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_ro.properties b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_ro.properties new file mode 100644 index 0000000000..cff4a3df56 --- /dev/null +++ b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_ro.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Short-Description=API/SPI pentru generatori +OpenIDE-Module-Long-Description=API/SPI pentru Generator, folosit la definirea de noi generatori diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_ru.properties b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_ru.properties index 94ac22c595..d7247ac56e 100644 --- a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_ru.properties +++ b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_ru.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-04 06\:36+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=API/SPI \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 - -OpenIDE-Module-Short-Description=API/SPI \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 +OpenIDE-Module-Long-Description=API/SPI \u0434\u043b\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 +OpenIDE-Module-Short-Description=API/SPI \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_th.properties b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_tr.properties b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_tr.properties new file mode 100644 index 0000000000..26450c79ad --- /dev/null +++ b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_tr.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Generator API/SPI, for defining new generators +OpenIDE-Module-Short-Description=API/SPI for generators diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_uk.properties b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_uk.properties new file mode 100644 index 0000000000..e00468ae99 --- /dev/null +++ b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_uk.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Generator API/SPI, \u0434\u043B\u044F \u0432\u0438\u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u043D\u043E\u0432\u0438\u0445 \u0433\u0435\u043D\u0435\u0440\u0430\u0442\u043E\u0440\u0456\u0432 +OpenIDE-Module-Short-Description=API/SPI \u0434\u043B\u044F \u0433\u0435\u043D\u0435\u0440\u0430\u0442\u043E\u0440\u0456\u0432 diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_zh_CN.properties b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_zh_CN.properties index df19391071..8318054949 100644 --- a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_zh_CN.properties +++ b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_zh_CN.properties @@ -1,10 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:12+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u7528\u4e8e\u5b9a\u4e49\u65b0\u751f\u6210\u5668\u7684\u5e94\u7528\u7a0b\u5e8f\u63a5\u53e3\u548c\u670d\u52a1\u63d0\u4f9b\u63a5\u53e3 - -OpenIDE-Module-Short-Description=\u751f\u6210\u5668\u5e94\u7528\u7a0b\u5e8f\u63a5\u53e3\u548c\u670d\u52a1\u63d0\u4f9b\u63a5\u53e3 +OpenIDE-Module-Long-Description=\u7528\u4e8e\u5b9a\u4e49\u65b0\u751f\u6210\u5668\u7684\u5e94\u7528\u7a0b\u5e8f\u63a5\u53e3\u548c\u670d\u52a1\u63d0\u4f9b\u63a5\u53e3 +OpenIDE-Module-Short-Description=\u751f\u6210\u5668\u5e94\u7528\u7a0b\u5e8f\u63a5\u53e3\u548c\u670d\u52a1\u63d0\u4f9b\u63a5\u53e3 diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_zh_TW.properties b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_zh_TW.properties new file mode 100644 index 0000000000..26450c79ad --- /dev/null +++ b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/Bundle_zh_TW.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Generator API/SPI, for defining new generators +OpenIDE-Module-Short-Description=API/SPI for generators diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/cs.po b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/cs.po deleted file mode 100644 index 2f8074184c..0000000000 --- a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/cs.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-29 19:57+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI generΓ‘toru pro určenΓ­ novΓ½ch generΓ‘torΕ―" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI pro generΓ‘tory" diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/es.po b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/es.po deleted file mode 100644 index 8fec422f92..0000000000 --- a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/es.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:04+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Implementaciones de los generadores estΓ‘ndar" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implementaciones de los generadores estΓ‘ndar" diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/fr.po b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/fr.po deleted file mode 100644 index 42164e36d7..0000000000 --- a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/fr.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:03+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI du module Generator, permet de dΓ©finir de nouveaux gΓ©nΓ©rateurs de graphe." - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI du module Generator" diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/ja.po b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/ja.po deleted file mode 100644 index aba643d72b..0000000000 --- a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-19 05:14+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "新規ジェネレータをεšηΎ©γ™γ‚‹γŸγ‚γγ‚Έγ‚§γƒγƒ¬γƒΌγ‚ΏAPI / SPI" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ジェネレータγγŸγ‚γAPI / SPI" diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/org-gephi-io-generator-api.pot b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/org-gephi-io-generator-api.pot deleted file mode 100644 index f757f08c91..0000000000 --- a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/org-gephi-io-generator-api.pot +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Generator API/SPI, for defining new generators" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI for generators" diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/package.html b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/package.html index 2d5e1e2560..e205ad7358 100644 --- a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/package.html +++ b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/package.html @@ -1,6 +1,11 @@ - - - - API for executing graph generators in a backgorund thread. - - + + + + org.gephi.io.generator.api + + +

    + API for executing graph generators in a backgorund thread. +

    + + diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/pt_BR.po b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/pt_BR.po deleted file mode 100644 index fa5507bca0..0000000000 --- a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/pt_BR.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 17:11+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI de geradores, utilizada para a definiΓ§Γ£o de novos geradores" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI de geradores" diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/ru.po b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/ru.po deleted file mode 100644 index dbf94c0c98..0000000000 --- a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/ru.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-04 06:36+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI для опрСдСлСния Π½ΠΎΠ²Ρ‹Ρ… Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI для Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²" diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/zh_CN.po b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/zh_CN.po deleted file mode 100644 index 30f839f9ce..0000000000 --- a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/api/zh_CN.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:12+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "η”¨δΊŽεšδΉ‰ζ–°η”Ÿζˆε™¨ηš„应用程序ζŽ₯ε£ε’ŒζœεŠ‘ζδΎ›ζŽ₯口" - -msgid "OpenIDE-Module-Short-Description" -msgstr "η”Ÿζˆε™¨εΊ”η”¨η¨‹εΊζŽ₯ε£ε’ŒζœεŠ‘ζδΎ›ζŽ₯口" diff --git a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/spi/package.html b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/spi/package.html index 399e4cdd6d..2dc93d1b90 100644 --- a/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/spi/package.html +++ b/modules/GeneratorAPI/src/main/resources/org/gephi/io/generator/spi/package.html @@ -1,17 +1,32 @@ - - - - Generator interfaces that plugins implement to add new generators. -

    Create a new Generator

    -
    1. Create a new module, and set GeneratorAPI as a dependency.
    2. -
    3. Create a new class that implements Generator. Because - Generator interface extends LongTask, add - LongTaskAPI as another of your module dependency.
    4. -
    5. Add @ServiceProvider annotation to your class to declare - you are implementing a Generator service. Put Generator.class - as the annotation service parameter.
    6. -
    7. Implement GeneratorUI if your generator needs - a settings panel and return it from getUI() - method.
    - + + + + org.gephi.io.generator.spi + + +

    + Generator interfaces that plugins implement to add new generators. +

    +

    Create a new Generator

    +
      +
    1. + Create a new module, and set GeneratorAPI as a dependency. +
    2. +
    3. + Create a new class that implements Generator. Because + Generator interface extends LongTask, add + LongTaskAPI as another of your module dependency. +
    4. +
    5. + Add @ServiceProvider annotation to your class to declare + you are implementing a Generator service. Put Generator.class + as the annotation service parameter. +
    6. +
    7. + Implement GeneratorUI if your generator needs + a settings panel and return it from getUI() + method. +
    8. +
    + \ No newline at end of file diff --git a/modules/GeneratorAPI/src/main/resources/overview.html b/modules/GeneratorAPI/src/main/resources/overview.html index f6acb3845d..cfea0b067a 100644 --- a/modules/GeneratorAPI/src/main/resources/overview.html +++ b/modules/GeneratorAPI/src/main/resources/overview.html @@ -1,7 +1,12 @@ - + + + Generator API + - Generator API/SPI provides the way to create and execute graph generators. +

    + Generator API/SPI provides the way to create and execute graph generators. +

    Generators are tasks that create a graph structure from various properties. New generators can be easily created, they will be diff --git a/modules/GeneratorPlugin/pom.xml b/modules/GeneratorPlugin/pom.xml index 27ee6a7e98..103bc60e89 100644 --- a/modules/GeneratorPlugin/pom.xml +++ b/modules/GeneratorPlugin/pom.xml @@ -4,13 +4,13 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi io-generator-plugin - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm GeneratorPlugin @@ -20,6 +20,10 @@ ${project.groupId} io-generator-api + + ${project.groupId} + graph-api + ${project.groupId} io-importer-api @@ -41,7 +45,7 @@ - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/GeneratorPlugin/src/main/java/org/gephi/io/generator/plugin/DynamicGraph.java b/modules/GeneratorPlugin/src/main/java/org/gephi/io/generator/plugin/DynamicGraph.java index b070b8288d..d6b16a8d3f 100644 --- a/modules/GeneratorPlugin/src/main/java/org/gephi/io/generator/plugin/DynamicGraph.java +++ b/modules/GeneratorPlugin/src/main/java/org/gephi/io/generator/plugin/DynamicGraph.java @@ -39,9 +39,11 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.generator.plugin; import java.util.Random; +import org.gephi.graph.api.TimeRepresentation; import org.gephi.io.generator.spi.Generator; import org.gephi.io.generator.spi.GeneratorUI; import org.gephi.io.importer.api.ColumnDraft; @@ -53,7 +55,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = Generator.class) @@ -65,10 +66,11 @@ public class DynamicGraph implements Generator { @Override public void generate(ContainerLoader container) { Random random = new Random(); - double start = 2000.0; - double end = 2015.0; - double tick = 1.0; + final double start = 2000.0; + final double end = 2015.0; + final double tick = 1.0; ColumnDraft col = container.addNodeColumn("score", Integer.class, true); + container.setTimeRepresentation(TimeRepresentation.TIMESTAMP); NodeDraft[] nodeArray = new NodeDraft[numberOfNodes]; for (int i = 0; i < numberOfNodes; i++) { @@ -87,8 +89,7 @@ public void generate(ContainerLoader container) { } if (wiringProbability > 0) { -// AttributeColumn oldWeight = container.getAttributeModel().getEdgeTable().getColumn(PropertiesColumn.EDGE_WEIGHT.getIndex()); -// AttributeColumn weightCol = container.getAttributeModel().getEdgeTable().replaceColumn(oldWeight, PropertiesColumn.EDGE_WEIGHT.getId(), PropertiesColumn.EDGE_WEIGHT.getTitle(), AttributeType.DYNAMIC_FLOAT, AttributeOrigin.PROPERTY, null); + ColumnDraft edgeWeightCol = container.addEdgeColumn("weight", Double.class, true); for (int i = 0; i < numberOfNodes - 1; i++) { NodeDraft node1 = nodeArray[i]; @@ -100,15 +101,13 @@ public void generate(ContainerLoader container) { edgeDraft.setTarget(node2); Random r = new Random(); -// DynamicFloat dynamicWeight = new DynamicFloat(new Interval(2010, 2012, false, true, new Float(r.nextInt(3) + 1))); -// dynamicWeight = new DynamicFloat(dynamicWeight, new Interval(2012, 2014, false, true, new Float(r.nextInt(3) + 2))); -// dynamicWeight = new DynamicFloat(dynamicWeight, new Interval(2014, 2016, false, true, new Float(r.nextInt(3) + 3))); -// dynamicWeight = new DynamicFloat(dynamicWeight, new Interval(2016, 2018, false, true, new Float(r.nextInt(3) + 4))); -// dynamicWeight = new DynamicFloat(dynamicWeight, new Interval(2018, 2020, false, true, new Float(r.nextInt(3) + 5))); -// dynamicWeight = new DynamicFloat(dynamicWeight, new Interval(2020, 2022, false, true, new Float(r.nextInt(3) + 6))); -// dynamicWeight = new DynamicFloat(dynamicWeight, new Interval(2022, 2024, false, true, new Float(r.nextInt(3) + 7))); -// dynamicWeight = new DynamicFloat(dynamicWeight, new Interval(2024, 2026, false, false, new Float(r.nextInt(3) + 8))); -// edgeDraft.addAttributeValue(weightCol, dynamicWeight); + for (double t = start; t < end; t += tick) { + if (r.nextBoolean()) { + edgeDraft.setValue(edgeWeightCol.getId(), (double)(r.nextInt(2) + 1), t); + } else { + edgeDraft.setValue(edgeWeightCol.getId(), 1.0, t); + } + } container.addEdge(edgeDraft); } diff --git a/modules/GeneratorPlugin/src/main/java/org/gephi/io/generator/plugin/MultiGraph.java b/modules/GeneratorPlugin/src/main/java/org/gephi/io/generator/plugin/MultiGraph.java new file mode 100644 index 0000000000..d149e0e9ff --- /dev/null +++ b/modules/GeneratorPlugin/src/main/java/org/gephi/io/generator/plugin/MultiGraph.java @@ -0,0 +1,140 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.io.generator.plugin; + +import java.util.Random; +import org.gephi.io.generator.spi.Generator; +import org.gephi.io.generator.spi.GeneratorUI; +import org.gephi.io.importer.api.ContainerLoader; +import org.gephi.io.importer.api.EdgeDraft; +import org.gephi.io.importer.api.NodeDraft; +import org.gephi.utils.progress.ProgressTicket; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +/** + * @author Mathieu Bastian + */ +@ServiceProvider(service = Generator.class) +public class MultiGraph implements Generator { + + protected int numberOfNodes = 50; + protected double wiringProbability = 0.05; + protected int numberOfEdgeTypes = 3; + + @Override + public void generate(ContainerLoader container) { + + NodeDraft[] nodeArray = new NodeDraft[numberOfNodes]; + for (int i = 0; i < numberOfNodes; i++) { + NodeDraft nodeDraft = container.factory().newNodeDraft("n" + i); + container.addNode(nodeDraft); + + nodeArray[i] = nodeDraft; + } + + String[] edgeTypes = new String[numberOfEdgeTypes]; + for (int i = 0; i < edgeTypes.length; i++) { + edgeTypes[i] = "Type " + i; + } + + Random random = new Random(); + + if (wiringProbability > 0) { + for (int i = 0; i < numberOfNodes - 1; i++) { + NodeDraft node1 = nodeArray[i]; + for (int j = i + 1; j < numberOfNodes; j++) { + NodeDraft node2 = nodeArray[j]; + if (random.nextDouble() < wiringProbability) { + if (random.nextDouble() < 0.3) { + //Double + EdgeDraft edgeDraft1 = container.factory().newEdgeDraft(); + edgeDraft1.setSource(node1); + edgeDraft1.setTarget(node2); + edgeDraft1.setType(edgeTypes[0]); + edgeDraft1.setLabel((String) edgeDraft1.getType()); + + container.addEdge(edgeDraft1); + + EdgeDraft edgeDraft2 = container.factory().newEdgeDraft(); + edgeDraft2.setSource(node1); + edgeDraft2.setTarget(node2); + edgeDraft2.setType(edgeTypes[1]); + edgeDraft2.setLabel((String) edgeDraft2.getType()); + + container.addEdge(edgeDraft2); + } else { + //Single + EdgeDraft edgeDraft = container.factory().newEdgeDraft(); + edgeDraft.setSource(node1); + edgeDraft.setTarget(node2); + edgeDraft.setType(edgeTypes[random.nextInt(edgeTypes.length)]); + edgeDraft.setLabel((String) edgeDraft.getType()); + + container.addEdge(edgeDraft); + } + } + } + } + } + } + + @Override + public String getName() { + return NbBundle.getMessage(MultiGraph.class, "MultiGraph.name"); + } + + @Override + public GeneratorUI getUI() { + return null; + } + + @Override + public boolean cancel() { + return true; + } + + @Override + public void setProgressTicket(ProgressTicket progressTicket) { + } +} diff --git a/modules/GeneratorPlugin/src/main/java/org/gephi/io/generator/plugin/RandomGraph.java b/modules/GeneratorPlugin/src/main/java/org/gephi/io/generator/plugin/RandomGraph.java index 227bba5abd..4459d45251 100644 --- a/modules/GeneratorPlugin/src/main/java/org/gephi/io/generator/plugin/RandomGraph.java +++ b/modules/GeneratorPlugin/src/main/java/org/gephi/io/generator/plugin/RandomGraph.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.generator.plugin; import java.util.Random; @@ -54,7 +55,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = Generator.class) @@ -114,6 +114,10 @@ public GeneratorUI getUI() { return Lookup.getDefault().lookup(RandomGraphUI.class); } + public int getNumberOfNodes() { + return numberOfNodes; + } + public void setNumberOfNodes(int numberOfNodes) { if (numberOfNodes < 0) { throw new IllegalArgumentException("# of nodes must be greater than 0"); @@ -121,6 +125,10 @@ public void setNumberOfNodes(int numberOfNodes) { this.numberOfNodes = numberOfNodes; } + public double getWiringProbability() { + return wiringProbability; + } + public void setWiringProbability(double wiringProbability) { if (wiringProbability < 0 || wiringProbability > 1) { throw new IllegalArgumentException("Wiring probability must be between 0 and 1"); @@ -128,14 +136,6 @@ public void setWiringProbability(double wiringProbability) { this.wiringProbability = wiringProbability; } - public int getNumberOfNodes() { - return numberOfNodes; - } - - public double getWiringProbability() { - return wiringProbability; - } - @Override public boolean cancel() { cancel = true; diff --git a/modules/GeneratorPlugin/src/main/java/org/gephi/io/generator/plugin/RandomGraphUI.java b/modules/GeneratorPlugin/src/main/java/org/gephi/io/generator/plugin/RandomGraphUI.java index 54eb3a5682..bbe5173168 100644 --- a/modules/GeneratorPlugin/src/main/java/org/gephi/io/generator/plugin/RandomGraphUI.java +++ b/modules/GeneratorPlugin/src/main/java/org/gephi/io/generator/plugin/RandomGraphUI.java @@ -39,12 +39,12 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.generator.plugin; import org.gephi.io.generator.spi.GeneratorUI; /** - * * @author Mathieu Bastian */ public interface RandomGraphUI extends GeneratorUI { diff --git a/modules/GeneratorPlugin/src/main/nbm/manifest.mf b/modules/GeneratorPlugin/src/main/nbm/manifest.mf index 5a4fb4e30d..4469478e6f 100644 --- a/modules/GeneratorPlugin/src/main/nbm/manifest.mf +++ b/modules/GeneratorPlugin/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/io/generator/plugin/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Plugin +OpenIDE-Module-Name: Generator Plugin \ No newline at end of file diff --git a/modules/GeneratorPlugin/src/main/nbm/module.xml b/modules/GeneratorPlugin/src/main/nbm/module.xml deleted file mode 100644 index 504f71febf..0000000000 --- a/modules/GeneratorPlugin/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle.properties b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle.properties index 3a47476cda..369e259944 100644 --- a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle.properties +++ b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle.properties @@ -1,7 +1,5 @@ -OpenIDE-Module-Display-Category=Plugin -OpenIDE-Module-Long-Description=\ - Standard generators implementations -OpenIDE-Module-Name=Generator Plugin +OpenIDE-Module-Long-Description=Standard generators implementations OpenIDE-Module-Short-Description=Standard generators implementations RandomGraph.name=Random Graph DynamicGraph.name=Dynamic Graph Example +MultiGraph.name=Multi-Graph Example \ No newline at end of file diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_ar.properties b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_ca.properties b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_ca.properties new file mode 100644 index 0000000000..0d3dc0d4af --- /dev/null +++ b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_ca.properties @@ -0,0 +1,5 @@ +OpenIDE-Module-Long-Description=Standard generators implementations +OpenIDE-Module-Short-Description=Standard generators implementations +RandomGraph.name=Graf aleatori +DynamicGraph.name=Exemple de graf dinΰmic +MultiGraph.name=Multi-Graph Example diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_cs.properties b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_cs.properties index 59f46734c3..85664dee61 100644 --- a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_cs.properties +++ b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_cs.properties @@ -1,15 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-29 19\:54+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=Zaveden\u00ed standardn\u00edch gener\u00e1tor\u016f - -OpenIDE-Module-Short-Description=Zaveden\u00ed standardn\u00edch gener\u00e1tor\u016f - -RandomGraph.name=N\u00e1hodn\u00fd graf - -DynamicGraph.name=P\u0159\u00edklad dynamick\u00e9ho grafu +OpenIDE-Module-Long-Description=Zavedenν standardnνch generαtor\u016f +OpenIDE-Module-Short-Description=Zavedenν standardnνch generαtor\u016f +RandomGraph.name=Nαhodnύ graf +DynamicGraph.name=P\u0159νklad dynamickιho grafu +MultiGraph.name=P\u0159νklad vνcenαsobnιho grafu diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_de.properties b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_de.properties new file mode 100644 index 0000000000..a51c14933c --- /dev/null +++ b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_de.properties @@ -0,0 +1,5 @@ +OpenIDE-Module-Long-Description=Standard-Generator-Implementierungen +OpenIDE-Module-Short-Description=Standard-Generator-Implementierungen +RandomGraph.name=Zufallsgraph +DynamicGraph.name=Dynamischer Graph Beispiel +MultiGraph.name=Multi-Graph Beispiel diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_es.properties b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_es.properties index 550d8564e7..d226998a44 100644 --- a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_es.properties +++ b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_es.properties @@ -1,16 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 11\:17+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Implementaciones de los generadores est\u00e1ndar - -OpenIDE-Module-Short-Description=Implementaciones de los generadores est\u00e1ndar - -RandomGraph.name=Grafo aleatorio - -DynamicGraph.name=Ejemplo de grafo din\u00e1mico +OpenIDE-Module-Long-Description=Implementaciones de los generadores estαndar +OpenIDE-Module-Short-Description=Implementaciones de los generadores estαndar +RandomGraph.name=Grafo aleatorio +DynamicGraph.name=Ejemplo de grafo dinαmico +MultiGraph.name=Ejemplo de multi-grafo diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_fr.properties b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_fr.properties index 7ed1cfa510..2712dfb525 100644 --- a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_fr.properties +++ b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_fr.properties @@ -1,16 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-07 11\:04+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Impl\u00e9mentation des g\u00e9n\u00e9rateurs standards - -OpenIDE-Module-Short-Description=Impl\u00e9mentation des g\u00e9n\u00e9rateurs standards - -RandomGraph.name=Graphe al\u00e9atoire - -DynamicGraph.name=Exemple de graphe dynamique +OpenIDE-Module-Long-Description=Implιmentation des gιnιrateurs standards +OpenIDE-Module-Short-Description=Implιmentation des gιnιrateurs standards +RandomGraph.name=Graphe alιatoire +DynamicGraph.name=Exemple de graphe dynamique +MultiGraph.name=Exemple de Mutli-Graphe diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_he.properties b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_he.properties new file mode 100644 index 0000000000..420f319644 --- /dev/null +++ b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_he.properties @@ -0,0 +1,5 @@ +OpenIDE-Module-Long-Description=Standard generators implementations +OpenIDE-Module-Short-Description=Standard generators implementations +RandomGraph.name=Random Graph +DynamicGraph.name=Dynamic Graph Example +MultiGraph.name=Multi-Graph Example diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_hu.properties b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_hu.properties new file mode 100644 index 0000000000..24ae6fd3cd --- /dev/null +++ b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_hu.properties @@ -0,0 +1,7 @@ + + +RandomGraph.name=V\u00E9letlenszer\u0171 grafikon +MultiGraph.name=T\u00F6bbgrafikonos p\u00E9lda +DynamicGraph.name=P\u00E9lda dinamikus grafikonra +OpenIDE-Module-Short-Description=Szabv\u00E1nyos gener\u00E1torok v\u00E9grehajt\u00E1sa +OpenIDE-Module-Long-Description=Szabv\u00E1nyos gener\u00E1torok v\u00E9grehajt\u00E1sa diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_it.properties b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_it.properties new file mode 100644 index 0000000000..420f319644 --- /dev/null +++ b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_it.properties @@ -0,0 +1,5 @@ +OpenIDE-Module-Long-Description=Standard generators implementations +OpenIDE-Module-Short-Description=Standard generators implementations +RandomGraph.name=Random Graph +DynamicGraph.name=Dynamic Graph Example +MultiGraph.name=Multi-Graph Example diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_ja.properties b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_ja.properties index bc67248546..d925145085 100644 --- a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_ja.properties +++ b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_ja.properties @@ -1,15 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-18 10\:19+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u6a19\u6e96\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u306e\u5b9f\u88c5 - -OpenIDE-Module-Short-Description=\u6a19\u6e96\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u306e\u5b9f\u88c5 - -RandomGraph.name=\u30e9\u30f3\u30c0\u30e0\u30b0\u30e9\u30d5 - -DynamicGraph.name=\u52d5\u7684\u306a\u30b0\u30e9\u30d5\u306e\u4f8b +OpenIDE-Module-Long-Description=\u6a19\u6e96\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u306e\u5b9f\u88c5 +OpenIDE-Module-Short-Description=\u6a19\u6e96\u30b8\u30a7\u30cd\u30ec\u30fc\u30bf\u306e\u5b9f\u88c5 +RandomGraph.name=\u30e9\u30f3\u30c0\u30e0\u30b0\u30e9\u30d5 +DynamicGraph.name=\u52d5\u7684\u306a\u30b0\u30e9\u30d5\u306e\u4f8b +# MultiGraph.name=Multi-Graph Example diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_ko.properties b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_ko.properties new file mode 100644 index 0000000000..ced89aaeef --- /dev/null +++ b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_ko.properties @@ -0,0 +1,7 @@ + + +RandomGraph.name=\uBB34\uC791\uC704 \uADF8\uB798\uD504 +MultiGraph.name=\uB2E4\uC911 \uADF8\uB798\uD504 \uC608\uC2DC +DynamicGraph.name=\uB3D9\uC801 \uADF8\uB798\uD504 \uC608\uC2DC +OpenIDE-Module-Short-Description=\uD45C\uC900 \uC0DD\uC131\uAE30 \uAD6C\uD604 +OpenIDE-Module-Long-Description=\uD45C\uC900 \uC0DD\uC131\uAE30 \uAD6C\uD604 diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_nl.properties b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_nl.properties new file mode 100644 index 0000000000..05790fa4aa --- /dev/null +++ b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_nl.properties @@ -0,0 +1,5 @@ +OpenIDE-Module-Long-Description=Standard generators implementations +OpenIDE-Module-Short-Description=Standard generators implementations +RandomGraph.name=Willekeurige graaf +DynamicGraph.name=Dynamic Graph Example +MultiGraph.name=Multi-Graph Example diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_oc.properties b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_oc.properties index 191978d4cc..e8d305f034 100644 --- a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_oc.properties +++ b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_oc.properties @@ -1,10 +1,5 @@ -# Occitan (post 1500) translation for gephi -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the gephi package. -# FIRST AUTHOR , 2010. -# -!=Project-Id-Version\: gephi\nReport-Msgid-Bugs-To\: FULL NAME \nPOT-Creation-Date\: 2010-04-07 13\:16+0200\nPO-Revision-Date\: 2010-10-24 10\:12+0000\nLast-Translator\: C\u00e9dric VALMARY (Tot en \u00f2c) \nLanguage-Team\: Occitan (post 1500) \nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nX-Launchpad-Export-Date\: 2011-03-13 04\:47+0000\nX-Generator\: Launchpad (build 12559)\n - -OpenIDE-Module-Long-Description=Implementacion dels exp\u00f2rts vectorials - +OpenIDE-Module-Long-Description=Implementacion dels expςrts vectorials OpenIDE-Module-Short-Description=Implementacion dels transformadors de classament +RandomGraph.name=Random Graph +DynamicGraph.name=Dynamic Graph Example +MultiGraph.name=Multi-Graph Example diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_pt_BR.properties b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_pt_BR.properties index 6aed25a5cb..69541f3c3a 100644 --- a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_pt_BR.properties +++ b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_pt_BR.properties @@ -1,15 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 17\:10+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Implementa\u00e7\u00f5es de geradores padr\u00e3o - -OpenIDE-Module-Short-Description=Implementa\u00e7\u00f5es de geradores padr\u00e3o - -RandomGraph.name=Grafo aleat\u00f3rio - -DynamicGraph.name=Exemplo de grafo din\u00e2mico +OpenIDE-Module-Long-Description=Implementaηυes de geradores padrγo +OpenIDE-Module-Short-Description=Implementaηυes de geradores padrγo +RandomGraph.name=Grafo aleatσrio +DynamicGraph.name=Exemplo de grafo dinβmico +MultiGraph.name=Exemplo de Multi Grafo diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_ro.properties b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_ro.properties new file mode 100644 index 0000000000..87dbeb57d1 --- /dev/null +++ b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_ro.properties @@ -0,0 +1,7 @@ + + +MultiGraph.name=Exemplu de multigraf +OpenIDE-Module-Long-Description=Implement\u0103ri de generatori standard +OpenIDE-Module-Short-Description=Implement\u0103ri de generatori standard +RandomGraph.name=Graf aleatoriu +DynamicGraph.name=Exemplu de graf dinamic diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_ru.properties b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_ru.properties index 6b22b5ce43..48f12a18fa 100644 --- a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_ru.properties +++ b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_ru.properties @@ -1,15 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-19 19\:16+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 - -OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 - -RandomGraph.name=\u0421\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 - -DynamicGraph.name=\u041f\u0440\u0438\u043c\u0435\u0440 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0430 +OpenIDE-Module-Long-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 +OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 +RandomGraph.name=\u0421\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 +DynamicGraph.name=\u041f\u0440\u0438\u043c\u0435\u0440 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0430 +# MultiGraph.name=Multi-Graph Example diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_th.properties b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_tr.properties b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_tr.properties new file mode 100644 index 0000000000..420f319644 --- /dev/null +++ b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_tr.properties @@ -0,0 +1,5 @@ +OpenIDE-Module-Long-Description=Standard generators implementations +OpenIDE-Module-Short-Description=Standard generators implementations +RandomGraph.name=Random Graph +DynamicGraph.name=Dynamic Graph Example +MultiGraph.name=Multi-Graph Example diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_uk.properties b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_uk.properties new file mode 100644 index 0000000000..df8c319ccf --- /dev/null +++ b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_uk.properties @@ -0,0 +1,5 @@ +RandomGraph.name=\u0412\u0438\u043F\u0430\u0434\u043A\u043E\u0432\u0438\u0439 \u0433\u0440\u0430\u0444\u0456\u043A +OpenIDE-Module-Long-Description=\u0420\u0435\u0430\u043B\u0456\u0437\u0430\u0446\u0456\u0457 \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0438\u0445 \u0433\u0435\u043D\u0435\u0440\u0430\u0442\u043E\u0440\u0456\u0432 +DynamicGraph.name=\u041F\u0440\u0438\u043A\u043B\u0430\u0434 \u0434\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u043E\u0433\u043E \u0433\u0440\u0430\u0444\u0456\u043A\u0430 +MultiGraph.name=\u041F\u0440\u0438\u043A\u043B\u0430\u0434 \u043C\u0443\u043B\u044C\u0442\u0438\u0433\u0440\u0430\u0444\u0430 +OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043B\u0456\u0437\u0430\u0446\u0456\u0457 \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0438\u0445 \u0433\u0435\u043D\u0435\u0440\u0430\u0442\u043E\u0440\u0456\u0432 diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_zh_CN.properties b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_zh_CN.properties index 3bd19a9610..9597b705bd 100644 --- a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_zh_CN.properties +++ b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_zh_CN.properties @@ -1,14 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:12+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u6807\u51c6\u751f\u6210\u5668\u5b9e\u73b0 - -OpenIDE-Module-Short-Description=\u6807\u51c6\u751f\u6210\u5668\u5b9e\u73b0 - -RandomGraph.name=\u968f\u673a\u56fe - -DynamicGraph.name=\u52a8\u6001\u56fe\u793a\u4f8b +OpenIDE-Module-Long-Description=\u6807\u51c6\u751f\u6210\u5668\u5b9e\u73b0 +OpenIDE-Module-Short-Description=\u6807\u51c6\u751f\u6210\u5668\u5b9e\u73b0 +RandomGraph.name=\u968f\u673a\u56fe +DynamicGraph.name=\u52a8\u6001\u56fe\u793a\u4f8b +MultiGraph.name=\u591a\u56fe\u793a\u4f8b diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_zh_TW.properties b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_zh_TW.properties new file mode 100644 index 0000000000..420f319644 --- /dev/null +++ b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/Bundle_zh_TW.properties @@ -0,0 +1,5 @@ +OpenIDE-Module-Long-Description=Standard generators implementations +OpenIDE-Module-Short-Description=Standard generators implementations +RandomGraph.name=Random Graph +DynamicGraph.name=Dynamic Graph Example +MultiGraph.name=Multi-Graph Example diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/cs.po b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/cs.po deleted file mode 100644 index 8558c06aaa..0000000000 --- a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/cs.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-29 19:54+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ZavedenΓ­ standardnΓ­ch generΓ‘torΕ―" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ZavedenΓ­ standardnΓ­ch generΓ‘torΕ―" - -msgid "RandomGraph.name" -msgstr "NΓ‘hodnΓ½ graf" - -msgid "DynamicGraph.name" -msgstr "PΕ™Γ­klad dynamickΓ©ho grafu" diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/es.po b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/es.po deleted file mode 100644 index 801e739bf2..0000000000 --- a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/es.po +++ /dev/null @@ -1,32 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 11:17+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Implementaciones de los generadores estΓ‘ndar" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implementaciones de los generadores estΓ‘ndar" - -msgid "RandomGraph.name" -msgstr "Grafo aleatorio" - -msgid "DynamicGraph.name" -msgstr "Ejemplo de grafo dinΓ‘mico" diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/fr.po b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/fr.po deleted file mode 100644 index 2c008a6eef..0000000000 --- a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/fr.po +++ /dev/null @@ -1,32 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-07 11:04+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ImplΓ©mentation des gΓ©nΓ©rateurs standards" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplΓ©mentation des gΓ©nΓ©rateurs standards" - -msgid "RandomGraph.name" -msgstr "Graphe alΓ©atoire" - -msgid "DynamicGraph.name" -msgstr "Exemple de graphe dynamique" diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/ja.po b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/ja.po deleted file mode 100644 index 07b52a14f5..0000000000 --- a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/ja.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-18 10:19+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "標準ジェネレータγεŸθ£…" - -msgid "OpenIDE-Module-Short-Description" -msgstr "標準ジェネレータγεŸθ£…" - -msgid "RandomGraph.name" -msgstr "ランダムグラフ" - -msgid "DynamicGraph.name" -msgstr "ε‹•ηš„γͺグラフγδΎ‹" diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/org-gephi-io-generator-plugin.pot b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/org-gephi-io-generator-plugin.pot deleted file mode 100644 index f320a03bea..0000000000 --- a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/org-gephi-io-generator-plugin.pot +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Standard generators implementations" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Standard generators implementations" - -msgid "RandomGraph.name" -msgstr "Random Graph" - -msgid "DynamicGraph.name" -msgstr "Dynamic Graph Example" diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/pt_BR.po b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/pt_BR.po deleted file mode 100644 index eb795d7d09..0000000000 --- a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/pt_BR.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 17:10+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ImplementaΓ§Γ΅es de geradores padrΓ£o" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplementaΓ§Γ΅es de geradores padrΓ£o" - -msgid "RandomGraph.name" -msgstr "Grafo aleatΓ³rio" - -msgid "DynamicGraph.name" -msgstr "Exemplo de grafo dinΓ’mico" diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/ru.po b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/ru.po deleted file mode 100644 index 28acac0bc9..0000000000 --- a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/ru.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-19 19:16+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "РСализация стандартных Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²" - -msgid "OpenIDE-Module-Short-Description" -msgstr "РСализация стандартных Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²" - -msgid "RandomGraph.name" -msgstr "Π‘Π»ΡƒΡ‡Π°ΠΉΠ½Ρ‹ΠΉ Π³Ρ€Π°Ρ„" - -msgid "DynamicGraph.name" -msgstr "ΠŸΡ€ΠΈΠΌΠ΅Ρ€ динамичСского Π³Ρ€Π°Ρ„Π°" diff --git a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/zh_CN.po b/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/zh_CN.po deleted file mode 100644 index cd3f3b660b..0000000000 --- a/modules/GeneratorPlugin/src/main/resources/org/gephi/io/generator/plugin/zh_CN.po +++ /dev/null @@ -1,30 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:12+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ζ ‡ε‡†η”Ÿζˆε™¨εžηް" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζ ‡ε‡†η”Ÿζˆε™¨εžηް" - -msgid "RandomGraph.name" -msgstr "ιšζœΊε›Ύ" - -msgid "DynamicGraph.name" -msgstr "εŠ¨ζ€ε›Ύη€ΊδΎ‹" diff --git a/modules/GeneratorPluginUI/pom.xml b/modules/GeneratorPluginUI/pom.xml index 6cbd2ee1ac..c4435292e9 100644 --- a/modules/GeneratorPluginUI/pom.xml +++ b/modules/GeneratorPluginUI/pom.xml @@ -4,13 +4,12 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. - org.gephi generator-plugin-ui - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm GeneratorPluginUI @@ -26,7 +25,7 @@ ${project.groupId} - lib.validation + ui-utils org.netbeans.api @@ -36,12 +35,16 @@ org.netbeans.api org-openide-util + + ${project.groupId} + ui-library-wrapper + - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/GeneratorPluginUI/src/main/java/org/gephi/ui/generator/plugin/RandomGraphPanel.java b/modules/GeneratorPluginUI/src/main/java/org/gephi/ui/generator/plugin/RandomGraphPanel.java index 1675c9c6a3..8a566f5e97 100644 --- a/modules/GeneratorPluginUI/src/main/java/org/gephi/ui/generator/plugin/RandomGraphPanel.java +++ b/modules/GeneratorPluginUI/src/main/java/org/gephi/ui/generator/plugin/RandomGraphPanel.java @@ -44,17 +44,19 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.lib.validation.BetweenZeroAndOneValidator; import org.gephi.lib.validation.PositiveNumberValidator; -import org.netbeans.validation.api.builtin.Validators; +import org.netbeans.validation.api.ValidatorUtils; +import org.netbeans.validation.api.builtin.stringvalidation.StringValidators; import org.netbeans.validation.api.ui.ValidationGroup; -import org.netbeans.validation.api.ui.ValidationPanel; +import org.netbeans.validation.api.ui.swing.ValidationPanel; /** - * * @author Mathieu Bastian */ public class RandomGraphPanel extends javax.swing.JPanel { - /** Creates new form RandomGraphPanel */ + /** + * Creates new form RandomGraphPanel + */ public RandomGraphPanel() { initComponents(); } @@ -65,21 +67,25 @@ public static ValidationPanel createValidationPanel(RandomGraphPanel innerPanel) innerPanel = new RandomGraphPanel(); } validationPanel.setInnerComponent(innerPanel); - ValidationGroup group = validationPanel.getValidationGroup(); + //Make sure components have names + innerPanel.nodeField.setName(innerPanel.nodeLabel.getText().replace(":", "")); + innerPanel.edgeField.setName(innerPanel.edgeLabel.getText().replace(":", "")); + //Node field - group.add(innerPanel.nodeField, Validators.REQUIRE_NON_EMPTY_STRING, - new PositiveNumberValidator()); + group.add(innerPanel.nodeField, ValidatorUtils.merge(StringValidators.REQUIRE_NON_EMPTY_STRING, + new PositiveNumberValidator())); //Edge field - group.add(innerPanel.edgeField, Validators.REQUIRE_NON_EMPTY_STRING, - new BetweenZeroAndOneValidator()); + group.add(innerPanel.edgeField, ValidatorUtils.merge(StringValidators.REQUIRE_NON_EMPTY_STRING, + new BetweenZeroAndOneValidator())); return validationPanel; } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -93,47 +99,56 @@ private void initComponents() { nodeField = new javax.swing.JTextField(); edgeField = new javax.swing.JTextField(); - nodeLabel.setText(org.openide.util.NbBundle.getMessage(RandomGraphPanel.class, "RandomGraphPanel.nodeLabel.text")); // NOI18N + nodeLabel.setText( + org.openide.util.NbBundle.getMessage(RandomGraphPanel.class, "RandomGraphPanel.nodeLabel.text")); // NOI18N - edgeLabel.setText(org.openide.util.NbBundle.getMessage(RandomGraphPanel.class, "RandomGraphPanel.edgeLabel.text")); // NOI18N + edgeLabel.setText( + org.openide.util.NbBundle.getMessage(RandomGraphPanel.class, "RandomGraphPanel.edgeLabel.text")); // NOI18N - nodeField.setText(org.openide.util.NbBundle.getMessage(RandomGraphPanel.class, "RandomGraphPanel.nodeField.text")); // NOI18N + nodeField.setText( + org.openide.util.NbBundle.getMessage(RandomGraphPanel.class, "RandomGraphPanel.nodeField.text")); // NOI18N - edgeField.setText(org.openide.util.NbBundle.getMessage(RandomGraphPanel.class, "RandomGraphPanel.edgeField.text")); // NOI18N + edgeField.setText( + org.openide.util.NbBundle.getMessage(RandomGraphPanel.class, "RandomGraphPanel.edgeField.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap(20, Short.MAX_VALUE) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(nodeLabel) - .addComponent(edgeLabel)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(edgeField) - .addComponent(nodeField, javax.swing.GroupLayout.DEFAULT_SIZE, 109, Short.MAX_VALUE)) - .addContainerGap(19, Short.MAX_VALUE)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap(20, Short.MAX_VALUE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(nodeLabel) + .addComponent(edgeLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(edgeField) + .addComponent(nodeField, javax.swing.GroupLayout.DEFAULT_SIZE, 109, Short.MAX_VALUE)) + .addContainerGap(19, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGap(20, 20, 20) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(nodeField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(nodeLabel)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(edgeField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(edgeLabel)) - .addContainerGap(28, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addGap(20, 20, 20) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(nodeField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(nodeLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(edgeField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(edgeLabel)) + .addContainerGap(28, Short.MAX_VALUE)) ); }// //GEN-END:initComponents + // Variables declaration - do not modify//GEN-BEGIN:variables protected javax.swing.JTextField edgeField; - private javax.swing.JLabel edgeLabel; protected javax.swing.JTextField nodeField; + private javax.swing.JLabel edgeLabel; private javax.swing.JLabel nodeLabel; // End of variables declaration//GEN-END:variables + + } diff --git a/modules/GeneratorPluginUI/src/main/java/org/gephi/ui/generator/plugin/RandomGraphUIImpl.java b/modules/GeneratorPluginUI/src/main/java/org/gephi/ui/generator/plugin/RandomGraphUIImpl.java index ba14cd2789..173bea3c1d 100644 --- a/modules/GeneratorPluginUI/src/main/java/org/gephi/ui/generator/plugin/RandomGraphUIImpl.java +++ b/modules/GeneratorPluginUI/src/main/java/org/gephi/ui/generator/plugin/RandomGraphUIImpl.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.generator.plugin; import javax.swing.JPanel; @@ -48,7 +49,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = RandomGraphUI.class) diff --git a/modules/GeneratorPluginUI/src/main/nbm/manifest.mf b/modules/GeneratorPluginUI/src/main/nbm/manifest.mf index c2e0b9366c..f75f0e9876 100644 --- a/modules/GeneratorPluginUI/src/main/nbm/manifest.mf +++ b/modules/GeneratorPluginUI/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/ui/generator/plugin/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Plugin +OpenIDE-Module-Name: Generator Plugin UI \ No newline at end of file diff --git a/modules/GeneratorPluginUI/src/main/nbm/module.xml b/modules/GeneratorPluginUI/src/main/nbm/module.xml deleted file mode 100644 index 3820938f1d..0000000000 --- a/modules/GeneratorPluginUI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle.properties b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle.properties index d48ca0ec60..37a0630010 100644 --- a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle.properties +++ b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle.properties @@ -1,6 +1,3 @@ -OpenIDE-Module-Display-Category=Plugin -OpenIDE-Module-Name=Generator Plugin UI - OpenIDE-Module-Short-Description=Standard generators UI RandomGraphPanel.edgeField.text= RandomGraphPanel.nodeLabel.text=Number of nodes: diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_ar.properties b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_ca.properties b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_ca.properties new file mode 100644 index 0000000000..aa4b526b73 --- /dev/null +++ b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_ca.properties @@ -0,0 +1,5 @@ +OpenIDE-Module-Short-Description=Standard generators UI +RandomGraphPanel.edgeField.text= +RandomGraphPanel.nodeLabel.text=Nombre de nodes: +RandomGraphPanel.nodeField.text= +RandomGraphPanel.edgeLabel.text=Wiring probability: diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_cs.properties b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_cs.properties index d7d2692ae2..10a5cf9ec5 100644 --- a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_cs.properties +++ b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_cs.properties @@ -1,13 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-17 20\:29+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Short-Description=Standardn\u00ed gener\u00e1tory UI - -RandomGraphPanel.nodeLabel.text=Po\u010det uzl\u016f\: - -RandomGraphPanel.edgeLabel.text=Pravd\u011bpodobnost zapojen\u00ed\: +OpenIDE-Module-Short-Description=Standardnν generαtory UI +RandomGraphPanel.edgeField.text= +RandomGraphPanel.nodeLabel.text=Po\u010det uzl\u016f: +RandomGraphPanel.nodeField.text= +RandomGraphPanel.edgeLabel.text=Pravd\u011bpodobnost zapojenν: diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_de.properties b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_de.properties new file mode 100644 index 0000000000..69f34cd514 --- /dev/null +++ b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_de.properties @@ -0,0 +1,5 @@ +OpenIDE-Module-Short-Description=Standard Generatoren Bedienoberflδche +RandomGraphPanel.edgeField.text= +RandomGraphPanel.nodeLabel.text=Anzahl Knoten: +RandomGraphPanel.nodeField.text= +RandomGraphPanel.edgeLabel.text=Verknόpfungswahrscheinlichkeit: diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_es.properties b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_es.properties index f785426b87..2e18595f7c 100644 --- a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_es.properties +++ b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_es.properties @@ -1,13 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:03+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Short-Description=Interfaz de usuario de los generadores est\u00e1ndar - -RandomGraphPanel.nodeLabel.text=N\u00famero de nodos\: - -RandomGraphPanel.edgeLabel.text=Probabilidad de conexi\u00f3n\: +OpenIDE-Module-Short-Description=Interfaz de usuario de los generadores estαndar +RandomGraphPanel.edgeField.text= +RandomGraphPanel.nodeLabel.text=Nϊmero de nodos: +RandomGraphPanel.nodeField.text= +RandomGraphPanel.edgeLabel.text=Probabilidad de conexiσn: diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_fr.properties b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_fr.properties index fc8f9b769f..12c0431d49 100644 --- a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_fr.properties +++ b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_fr.properties @@ -1,13 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:03+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Interface utilisateur des g\u00e9n\u00e9rateurs standards - -RandomGraphPanel.nodeLabel.text=Nombre de noeuds \: - -RandomGraphPanel.edgeLabel.text=Probabilit\u00e9 de connexion \: +OpenIDE-Module-Short-Description=Interface utilisateur des gιnιrateurs standards +RandomGraphPanel.edgeField.text= +RandomGraphPanel.nodeLabel.text=Nombre de noeuds : +RandomGraphPanel.nodeField.text= +RandomGraphPanel.edgeLabel.text=Probabilitι de connexion : diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_he.properties b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_he.properties new file mode 100644 index 0000000000..c6d023a227 --- /dev/null +++ b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_he.properties @@ -0,0 +1,5 @@ +OpenIDE-Module-Short-Description=Standard generators UI +RandomGraphPanel.edgeField.text= +RandomGraphPanel.nodeLabel.text=Number of nodes: +RandomGraphPanel.nodeField.text= +RandomGraphPanel.edgeLabel.text=Wiring probability: diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_hu.properties b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_hu.properties new file mode 100644 index 0000000000..b2f3454771 --- /dev/null +++ b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_hu.properties @@ -0,0 +1,5 @@ + + +RandomGraphPanel.edgeLabel.text=Bek\u00F6t\u00E9si val\u00F3sz\u00EDn\u0171s\u00E9g: +OpenIDE-Module-Short-Description=Szabv\u00E1nyos gener\u00E1tor felhaszn\u00E1l\u00F3i fel\u00FClet +RandomGraphPanel.nodeLabel.text=Csom\u00F3pontok sz\u00E1ma: diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_it.properties b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_it.properties new file mode 100644 index 0000000000..c6d023a227 --- /dev/null +++ b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_it.properties @@ -0,0 +1,5 @@ +OpenIDE-Module-Short-Description=Standard generators UI +RandomGraphPanel.edgeField.text= +RandomGraphPanel.nodeLabel.text=Number of nodes: +RandomGraphPanel.nodeField.text= +RandomGraphPanel.edgeLabel.text=Wiring probability: diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_ja.properties b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_ja.properties index 18f26664e6..6201c4b8da 100644 --- a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_ja.properties +++ b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_ja.properties @@ -1,13 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-18 10\:44+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u6a19\u6e96\u7684\u30b8\u30a7\u30cd\u30ec\u30fc\u30bfUI - -RandomGraphPanel.nodeLabel.text=\u30ce\u30fc\u30c9\u6570\: - -RandomGraphPanel.edgeLabel.text=\u914d\u7dda\u78ba\u7387\: +OpenIDE-Module-Short-Description=\u6a19\u6e96\u7684\u30b8\u30a7\u30cd\u30ec\u30fc\u30bfUI +RandomGraphPanel.edgeField.text= +RandomGraphPanel.nodeLabel.text=\u30ce\u30fc\u30c9\u6570: +RandomGraphPanel.nodeField.text= +RandomGraphPanel.edgeLabel.text=\u914d\u7dda\u78ba\u7387: diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_ko.properties b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_ko.properties new file mode 100644 index 0000000000..cec03f4ab6 --- /dev/null +++ b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_ko.properties @@ -0,0 +1,5 @@ + + +RandomGraphPanel.edgeLabel.text=\uC120 \uC5F0\uACB0 \uD655\uB960: +OpenIDE-Module-Short-Description=\uD45C\uC900 \uC0DD\uC131\uAE30 UI +RandomGraphPanel.nodeLabel.text=\uB178\uB4DC \uC218: diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_nl.properties b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_nl.properties new file mode 100644 index 0000000000..258ce7dfcf --- /dev/null +++ b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_nl.properties @@ -0,0 +1,5 @@ +OpenIDE-Module-Short-Description=Standard generators UI +RandomGraphPanel.edgeField.text= +RandomGraphPanel.nodeLabel.text=Aantal knopen: +RandomGraphPanel.nodeField.text= +RandomGraphPanel.edgeLabel.text=Wiring probability: diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_pt_BR.properties b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_pt_BR.properties index 26e0ac77c5..70d8263565 100644 --- a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_pt_BR.properties +++ b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_pt_BR.properties @@ -1,13 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 17\:08+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Interface de usu\u00e1rio dos geradores padr\u00e3o - -RandomGraphPanel.nodeLabel.text=N\u00famero de n\u00f3s\: - -RandomGraphPanel.edgeLabel.text=Probabilidade de conex\u00e3o\: +OpenIDE-Module-Short-Description=Interface de usuαrio dos geradores padrγo +RandomGraphPanel.edgeField.text= +RandomGraphPanel.nodeLabel.text=Nϊmero de nσs: +RandomGraphPanel.nodeField.text= +RandomGraphPanel.edgeLabel.text=Probabilidade de conexγo: diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_ro.properties b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_ro.properties new file mode 100644 index 0000000000..a0ed239ee2 --- /dev/null +++ b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_ro.properties @@ -0,0 +1,5 @@ + + +OpenIDE-Module-Short-Description=Interfa\u021B\u0103 pentru generatori standard +RandomGraphPanel.nodeLabel.text=Num\u0103r de noduri: +RandomGraphPanel.edgeLabel.text=Probabilitate de conectare: diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_ru.properties b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_ru.properties index 8ef84dab25..453f6ea079 100644 --- a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_ru.properties +++ b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_ru.properties @@ -1,13 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-19 19\:16+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Short-Description=UI \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 - -RandomGraphPanel.nodeLabel.text=\u0427\u0438\u0441\u043b\u043e \u0443\u0437\u043b\u043e\u0432\: - -RandomGraphPanel.edgeLabel.text=\u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u043d\u0438\u044f\: +OpenIDE-Module-Short-Description=UI \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u043e\u0432 +RandomGraphPanel.edgeField.text= +RandomGraphPanel.nodeLabel.text=\u0427\u0438\u0441\u043b\u043e \u0443\u0437\u043b\u043e\u0432: +RandomGraphPanel.nodeField.text= +RandomGraphPanel.edgeLabel.text=\u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u043d\u0438\u044f: diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_th.properties b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_tr.properties b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_tr.properties new file mode 100644 index 0000000000..c6d023a227 --- /dev/null +++ b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_tr.properties @@ -0,0 +1,5 @@ +OpenIDE-Module-Short-Description=Standard generators UI +RandomGraphPanel.edgeField.text= +RandomGraphPanel.nodeLabel.text=Number of nodes: +RandomGraphPanel.nodeField.text= +RandomGraphPanel.edgeLabel.text=Wiring probability: diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_uk.properties b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_uk.properties new file mode 100644 index 0000000000..fb70a1773b --- /dev/null +++ b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_uk.properties @@ -0,0 +1,5 @@ +OpenIDE-Module-Short-Description=\u0406\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0438\u0445 \u0433\u0435\u043D\u0435\u0440\u0430\u0442\u043E\u0440\u0456\u0432 +RandomGraphPanel.edgeField.text=\u0406 +RandomGraphPanel.nodeLabel.text=\u041A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u0432\u0443\u0437\u043B\u0456\u0432: +RandomGraphPanel.nodeField.text=\u0406 +RandomGraphPanel.edgeLabel.text=\u0419\u043C\u043E\u0432\u0456\u0440\u043D\u0456\u0441\u0442\u044C \u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u044F: diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_zh_CN.properties b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_zh_CN.properties index 6cd28bf9a6..8eef8327b4 100644 --- a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_zh_CN.properties +++ b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_zh_CN.properties @@ -1,12 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:12+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u6807\u51c6\u751f\u6210\u5668\u7528\u6237\u754c\u9762 - -RandomGraphPanel.nodeLabel.text=\u8282\u70b9\u6570\uff1a - -RandomGraphPanel.edgeLabel.text=\u8fde\u7ebf\u7684\u6982\u7387\uff1a +OpenIDE-Module-Short-Description=\u6807\u51c6\u751f\u6210\u5668\u7528\u6237\u754c\u9762 +RandomGraphPanel.edgeField.text= +RandomGraphPanel.nodeLabel.text=\u8282\u70b9\u6570\uff1a +RandomGraphPanel.nodeField.text= +RandomGraphPanel.edgeLabel.text=\u8fde\u7ebf\u7684\u6982\u7387\uff1a diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_zh_TW.properties b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_zh_TW.properties new file mode 100644 index 0000000000..c6d023a227 --- /dev/null +++ b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/Bundle_zh_TW.properties @@ -0,0 +1,5 @@ +OpenIDE-Module-Short-Description=Standard generators UI +RandomGraphPanel.edgeField.text= +RandomGraphPanel.nodeLabel.text=Number of nodes: +RandomGraphPanel.nodeField.text= +RandomGraphPanel.edgeLabel.text=Wiring probability: diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/cs.po b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/cs.po deleted file mode 100644 index 636193a4db..0000000000 --- a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/cs.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-17 20:29+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "StandardnΓ­ generΓ‘tory UI" - -msgid "RandomGraphPanel.nodeLabel.text" -msgstr "Počet uzlΕ―:" - -msgid "RandomGraphPanel.edgeLabel.text" -msgstr "PravdΔ›podobnost zapojenΓ­:" diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/es.po b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/es.po deleted file mode 100644 index ca8bb82488..0000000000 --- a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/es.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:03+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interfaz de usuario de los generadores estΓ‘ndar" - -msgid "RandomGraphPanel.nodeLabel.text" -msgstr "NΓΊmero de nodos:" - -msgid "RandomGraphPanel.edgeLabel.text" -msgstr "Probabilidad de conexiΓ³n:" diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/fr.po b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/fr.po deleted file mode 100644 index f4cd0a7b98..0000000000 --- a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/fr.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:03+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interface utilisateur des gΓ©nΓ©rateurs standards" - -msgid "RandomGraphPanel.nodeLabel.text" -msgstr "Nombre de noeuds :" - -msgid "RandomGraphPanel.edgeLabel.text" -msgstr "ProbabilitΓ© de connexion :" diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/ja.po b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/ja.po deleted file mode 100644 index 88629b25e2..0000000000 --- a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/ja.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-18 10:44+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζ¨™ζΊ–ηš„γ‚Έγ‚§γƒγƒ¬γƒΌγ‚ΏUI" - -msgid "RandomGraphPanel.nodeLabel.text" -msgstr "γƒŽγƒΌγƒ‰ζ•°:" - -msgid "RandomGraphPanel.edgeLabel.text" -msgstr "ι…η·šη’ΊηŽ‡:" diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/org-gephi-ui-generator-plugin.pot b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/org-gephi-ui-generator-plugin.pot deleted file mode 100644 index 2b6deacc50..0000000000 --- a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/org-gephi-ui-generator-plugin.pot +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Standard generators UI" - -msgid "RandomGraphPanel.nodeLabel.text" -msgstr "Number of nodes:" - -msgid "RandomGraphPanel.edgeLabel.text" -msgstr "Wiring probability:" diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/pt_BR.po b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/pt_BR.po deleted file mode 100644 index bd759d7807..0000000000 --- a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/pt_BR.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 17:08+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interface de usuΓ‘rio dos geradores padrΓ£o" - -msgid "RandomGraphPanel.nodeLabel.text" -msgstr "NΓΊmero de nΓ³s:" - -msgid "RandomGraphPanel.edgeLabel.text" -msgstr "Probabilidade de conexΓ£o:" diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/ru.po b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/ru.po deleted file mode 100644 index da57fcfd4b..0000000000 --- a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/ru.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-19 19:16+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "UI стандартных Π³Π΅Π½Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ²" - -msgid "RandomGraphPanel.nodeLabel.text" -msgstr "Число ΡƒΠ·Π»ΠΎΠ²:" - -msgid "RandomGraphPanel.edgeLabel.text" -msgstr "Π’Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ связывания:" diff --git a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/zh_CN.po b/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/zh_CN.po deleted file mode 100644 index 9d4cfee3de..0000000000 --- a/modules/GeneratorPluginUI/src/main/resources/org/gephi/ui/generator/plugin/zh_CN.po +++ /dev/null @@ -1,27 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:12+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζ ‡ε‡†η”Ÿζˆε™¨η”¨ζˆ·η•Œι’" - -msgid "RandomGraphPanel.nodeLabel.text" -msgstr "θŠ‚η‚Ήζ•°οΌš" - -msgid "RandomGraphPanel.edgeLabel.text" -msgstr "θΏžηΊΏηš„ζ¦‚ηŽ‡οΌš" diff --git a/modules/Gleem/pom.xml b/modules/Gleem/pom.xml deleted file mode 100644 index f2dcf253c3..0000000000 --- a/modules/Gleem/pom.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - 4.0.0 - - gephi-parent - org.gephi - 0.9-SNAPSHOT - ../.. - - - org.gephi - gleem - 0.9-SNAPSHOT - nbm - - Gleem - - - - - - - - - org.codehaus.mojo - nbm-maven-plugin - - - org.gephi.lib.gleem.linalg - - - - - - diff --git a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/DimensionMismatchException.java b/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/DimensionMismatchException.java deleted file mode 100644 index 69ac61ab9a..0000000000 --- a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/DimensionMismatchException.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * gleem -- OpenGL Extremely Easy-To-Use Manipulators. - * Copyright (C) 1998-2003 Kenneth B. Russell (kbrussel@alum.mit.edu) - * - * Copying, distribution and use of this software in source and binary - * forms, with or without modification, is permitted provided that the - * following conditions are met: - * - * Distributions of source code must reproduce the copyright notice, - * this list of conditions and the following disclaimer in the source - * code header files; and Distributions of binary code must reproduce - * the copyright notice, this list of conditions and the following - * disclaimer in the documentation, Read me file, license file and/or - * other materials provided with the software distribution. - * - * The names of Sun Microsystems, Inc. ("Sun") and/or the copyright - * holder may not be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS," WITHOUT A WARRANTY OF ANY - * KIND. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND - * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, NON-INTERFERENCE, ACCURACY OF - * INFORMATIONAL CONTENT OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. THE - * COPYRIGHT HOLDER, SUN AND SUN'S LICENSORS SHALL NOT BE LIABLE FOR - * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR - * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL THE - * COPYRIGHT HOLDER, SUN OR SUN'S LICENSORS BE LIABLE FOR ANY LOST - * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, - * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND - * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR - * INABILITY TO USE THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGES. YOU ACKNOWLEDGE THAT THIS SOFTWARE IS NOT - * DESIGNED, LICENSED OR INTENDED FOR USE IN THE DESIGN, CONSTRUCTION, - * OPERATION OR MAINTENANCE OF ANY NUCLEAR FACILITY. THE COPYRIGHT - * HOLDER, SUN AND SUN'S LICENSORS DISCLAIM ANY EXPRESS OR IMPLIED - * WARRANTY OF FITNESS FOR SUCH USES. - */ - -package org.gephi.lib.gleem.linalg; - -/** Thrown to indicate a mismatch of dimensionality of a matrix or - vector. */ - -public class DimensionMismatchException extends RuntimeException { - public DimensionMismatchException() { - super(); - } - - public DimensionMismatchException(String msg) { - super(msg); - } -} diff --git a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/IntersectionPoint.java b/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/IntersectionPoint.java deleted file mode 100644 index 57377754ad..0000000000 --- a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/IntersectionPoint.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * gleem -- OpenGL Extremely Easy-To-Use Manipulators. - * Copyright (C) 1998-2003 Kenneth B. Russell (kbrussel@alum.mit.edu) - * - * Copying, distribution and use of this software in source and binary - * forms, with or without modification, is permitted provided that the - * following conditions are met: - * - * Distributions of source code must reproduce the copyright notice, - * this list of conditions and the following disclaimer in the source - * code header files; and Distributions of binary code must reproduce - * the copyright notice, this list of conditions and the following - * disclaimer in the documentation, Read me file, license file and/or - * other materials provided with the software distribution. - * - * The names of Sun Microsystems, Inc. ("Sun") and/or the copyright - * holder may not be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS," WITHOUT A WARRANTY OF ANY - * KIND. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND - * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, NON-INTERFERENCE, ACCURACY OF - * INFORMATIONAL CONTENT OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. THE - * COPYRIGHT HOLDER, SUN AND SUN'S LICENSORS SHALL NOT BE LIABLE FOR - * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR - * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL THE - * COPYRIGHT HOLDER, SUN OR SUN'S LICENSORS BE LIABLE FOR ANY LOST - * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, - * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND - * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR - * INABILITY TO USE THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGES. YOU ACKNOWLEDGE THAT THIS SOFTWARE IS NOT - * DESIGNED, LICENSED OR INTENDED FOR USE IN THE DESIGN, CONSTRUCTION, - * OPERATION OR MAINTENANCE OF ANY NUCLEAR FACILITY. THE COPYRIGHT - * HOLDER, SUN AND SUN'S LICENSORS DISCLAIM ANY EXPRESS OR IMPLIED - * WARRANTY OF FITNESS FOR SUCH USES. - */ - -package org.gephi.lib.gleem.linalg; - -/** Wraps a 3D point and parametric time value. */ - -public class IntersectionPoint { - private Vec3f intPt = new Vec3f(); - private float t; - - public Vec3f getIntersectionPoint() { - return intPt; - } - - public void setIntersectionPoint(Vec3f newPt) { - intPt.set(newPt); - } - - public float getT() { - return t; - } - - public void setT(float t) { - this.t = t; - } -} diff --git a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Line.java b/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Line.java deleted file mode 100644 index 87016a6168..0000000000 --- a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Line.java +++ /dev/null @@ -1,152 +0,0 @@ -/* - * gleem -- OpenGL Extremely Easy-To-Use Manipulators. - * Copyright (C) 1998-2003 Kenneth B. Russell (kbrussel@alum.mit.edu) - * - * Copying, distribution and use of this software in source and binary - * forms, with or without modification, is permitted provided that the - * following conditions are met: - * - * Distributions of source code must reproduce the copyright notice, - * this list of conditions and the following disclaimer in the source - * code header files; and Distributions of binary code must reproduce - * the copyright notice, this list of conditions and the following - * disclaimer in the documentation, Read me file, license file and/or - * other materials provided with the software distribution. - * - * The names of Sun Microsystems, Inc. ("Sun") and/or the copyright - * holder may not be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS," WITHOUT A WARRANTY OF ANY - * KIND. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND - * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, NON-INTERFERENCE, ACCURACY OF - * INFORMATIONAL CONTENT OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. THE - * COPYRIGHT HOLDER, SUN AND SUN'S LICENSORS SHALL NOT BE LIABLE FOR - * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR - * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL THE - * COPYRIGHT HOLDER, SUN OR SUN'S LICENSORS BE LIABLE FOR ANY LOST - * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, - * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND - * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR - * INABILITY TO USE THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGES. YOU ACKNOWLEDGE THAT THIS SOFTWARE IS NOT - * DESIGNED, LICENSED OR INTENDED FOR USE IN THE DESIGN, CONSTRUCTION, - * OPERATION OR MAINTENANCE OF ANY NUCLEAR FACILITY. THE COPYRIGHT - * HOLDER, SUN AND SUN'S LICENSORS DISCLAIM ANY EXPRESS OR IMPLIED - * WARRANTY OF FITNESS FOR SUCH USES. - */ - -package org.gephi.lib.gleem.linalg; - -/** Represents a line in 3D space. */ - -public class Line { - private Vec3f point; - /** Normalized */ - private Vec3f direction; - /** For computing projections along line */ - private Vec3f alongVec; - - /** Default constructor initializes line to point (0, 0, 0) and - direction (1, 0, 0) */ - public Line() { - point = new Vec3f(0, 0, 0); - direction = new Vec3f(1, 0, 0); - alongVec = new Vec3f(); - recalc(); - } - - /** Line goes in direction direction through the point - point. direction does not need to be normalized but must - not be the zero vector. */ - public Line(Vec3f direction, Vec3f point) { - direction = new Vec3f(direction); - direction.normalize(); - point = new Vec3f(point); - alongVec = new Vec3f(); - recalc(); - } - - /** Setter does some work to maintain internal caches. - direction does not need to be normalized but must not be - the zero vector. */ - public void setDirection(Vec3f direction) { - this.direction.set(direction); - this.direction.normalize(); - recalc(); - } - - /** Direction is normalized internally, so direction is not - necessarily equal to plane.setDirection(direction); - plane.getDirection(); */ - public Vec3f getDirection() { - return direction; - } - - /** Setter does some work to maintain internal caches. */ - public void setPoint(Vec3f point) { - this.point.set(point); - recalc(); - } - - public Vec3f getPoint() { - return point; - } - - /** Project a point onto the line */ - public void projectPoint(Vec3f pt, - Vec3f projPt) { - float dotp = direction.dot(pt); - projPt.set(direction); - projPt.scale(dotp); - projPt.add(alongVec); - } - - /** Find closest point on this line to the given ray, specified by - start point and direction. If ray is parallel to this line, - returns false and closestPoint is not modified. */ - public boolean closestPointToRay(Vec3f rayStart, - Vec3f rayDirection, - Vec3f closestPoint) { - // Line 1 is this one. Line 2 is the incoming one. - Mat2f A = new Mat2f(); - A.set(0, 0, -direction.lengthSquared()); - A.set(1, 1, -rayDirection.lengthSquared()); - A.set(0, 1, direction.dot(rayDirection)); - A.set(1, 0, A.get(0, 1)); - if (Math.abs(A.determinant()) == 0.0f) { - return false; - } - if (!A.invert()) { - return false; - } - Vec2f b = new Vec2f(); - b.setX(point.dot(direction) - rayStart.dot(direction)); - b.setY(rayStart.dot(rayDirection) - point.dot(rayDirection)); - Vec2f x = new Vec2f(); - A.xformVec(b, x); - if (x.y() < 0) { - // Means that ray start is closest point to this line - closestPoint.set(rayStart); - } else { - closestPoint.set(direction); - closestPoint.scale(x.x()); - closestPoint.add(point); - } - return true; - } - - //---------------------------------------------------------------------- - // Internals only below this point - // - - private void recalc() { - float denom = direction.lengthSquared(); - if (denom == 0.0f) { - throw new RuntimeException("Line.recalc: ERROR: direction was the zero vector " + - "(not allowed)"); - } - alongVec.set(point.minus(direction.times(point.dot(direction)))); - } -} diff --git a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Mat2f.java b/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Mat2f.java deleted file mode 100644 index c32aa8fa4c..0000000000 --- a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Mat2f.java +++ /dev/null @@ -1,170 +0,0 @@ -/* - * gleem -- OpenGL Extremely Easy-To-Use Manipulators. - * Copyright (C) 1998-2003 Kenneth B. Russell (kbrussel@alum.mit.edu) - * - * Copying, distribution and use of this software in source and binary - * forms, with or without modification, is permitted provided that the - * following conditions are met: - * - * Distributions of source code must reproduce the copyright notice, - * this list of conditions and the following disclaimer in the source - * code header files; and Distributions of binary code must reproduce - * the copyright notice, this list of conditions and the following - * disclaimer in the documentation, Read me file, license file and/or - * other materials provided with the software distribution. - * - * The names of Sun Microsystems, Inc. ("Sun") and/or the copyright - * holder may not be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS," WITHOUT A WARRANTY OF ANY - * KIND. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND - * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, NON-INTERFERENCE, ACCURACY OF - * INFORMATIONAL CONTENT OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. THE - * COPYRIGHT HOLDER, SUN AND SUN'S LICENSORS SHALL NOT BE LIABLE FOR - * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR - * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL THE - * COPYRIGHT HOLDER, SUN OR SUN'S LICENSORS BE LIABLE FOR ANY LOST - * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, - * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND - * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR - * INABILITY TO USE THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGES. YOU ACKNOWLEDGE THAT THIS SOFTWARE IS NOT - * DESIGNED, LICENSED OR INTENDED FOR USE IN THE DESIGN, CONSTRUCTION, - * OPERATION OR MAINTENANCE OF ANY NUCLEAR FACILITY. THE COPYRIGHT - * HOLDER, SUN AND SUN'S LICENSORS DISCLAIM ANY EXPRESS OR IMPLIED - * WARRANTY OF FITNESS FOR SUCH USES. - */ - -package org.gephi.lib.gleem.linalg; - -/** 2x2 matrix class useful for simple linear algebra. Representation - is (as Mat4f) in row major order and assumes multiplication by - column vectors on the right. */ - -public class Mat2f { - private float[] data; - - /** Creates new matrix initialized to the zero matrix */ - public Mat2f() { - data = new float[4]; - } - - /** Initialize to the identity matrix. */ - public void makeIdent() { - for (int i = 0; i < 2; i++) { - for (int j = 0; j < 2; j++) { - if (i == j) { - set(i, j, 1.0f); - } else { - set(i, j, 0.0f); - } - } - } - } - - /** Gets the (i,j)th element of this matrix, where i is the row - index and j is the column index */ - public float get(int i, int j) { - return data[2 * i + j]; - } - - /** Sets the (i,j)th element of this matrix, where i is the row - index and j is the column index */ - public void set(int i, int j, float val) { - data[2 * i + j] = val; - } - - /** Set column i (i=[0..1]) to vector v. */ - public void setCol(int i, Vec2f v) { - set(0, i, v.x()); - set(1, i, v.y()); - } - - /** Set row i (i=[0..1]) to vector v. */ - public void setRow(int i, Vec2f v) { - set(i, 0, v.x()); - set(i, 1, v.y()); - } - - /** Transpose this matrix in place. */ - public void transpose() { - float t = get(0, 1); - set(0, 1, get(1, 0)); - set(1, 0, t); - } - - /** Return the determinant. */ - public float determinant() { - return (get(0, 0) * get(1, 1) - get(1, 0) * get(0, 1)); - } - - /** Full matrix inversion in place. If matrix is singular, returns - false and matrix contents are untouched. If you know the matrix - is orthonormal, you can call transpose() instead. */ - public boolean invert() { - float det = determinant(); - if (det == 0.0f) - return false; - - // Create transpose of cofactor matrix in place - float t = get(0, 0); - set(0, 0, get(1, 1)); - set(1, 1, t); - set(0, 1, -get(0, 1)); - set(1, 0, -get(1, 0)); - - // Now divide by determinant - for (int i = 0; i < 4; i++) { - data[i] /= det; - } - return true; - } - - /** Multiply a 2D vector by this matrix. NOTE: src and dest must be - different vectors. */ - public void xformVec(Vec2f src, Vec2f dest) { - dest.set(get(0, 0) * src.x() + - get(0, 1) * src.y(), - - get(1, 0) * src.x() + - get(1, 1) * src.y()); - } - - /** Returns this * b; creates new matrix */ - public Mat2f mul(Mat2f b) { - Mat2f tmp = new Mat2f(); - tmp.mul(this, b); - return tmp; - } - - /** this = a * b */ - public void mul(Mat2f a, Mat2f b) { - for (int rc = 0; rc < 2; rc++) - for (int cc = 0; cc < 2; cc++) { - float tmp = 0.0f; - for (int i = 0; i < 2; i++) - tmp += a.get(rc, i) * b.get(i, cc); - set(rc, cc, tmp); - } - } - - public Matf toMatf() { - Matf out = new Matf(2, 2); - for (int i = 0; i < 2; i++) { - for (int j = 0; j < 2; j++) { - out.set(i, j, get(i, j)); - } - } - return out; - } - - @Override - public String toString() { - String endl = System.getProperty("line.separator"); - return "(" + - get(0, 0) + ", " + get(0, 1) + endl + - get(1, 0) + ", " + get(1, 1) + ")"; - } -} diff --git a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Mat3f.java b/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Mat3f.java deleted file mode 100644 index 5a6106ee8e..0000000000 --- a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Mat3f.java +++ /dev/null @@ -1,195 +0,0 @@ -/* - * gleem -- OpenGL Extremely Easy-To-Use Manipulators. - * Copyright (C) 1998-2003 Kenneth B. Russell (kbrussel@alum.mit.edu) - * - * Copying, distribution and use of this software in source and binary - * forms, with or without modification, is permitted provided that the - * following conditions are met: - * - * Distributions of source code must reproduce the copyright notice, - * this list of conditions and the following disclaimer in the source - * code header files; and Distributions of binary code must reproduce - * the copyright notice, this list of conditions and the following - * disclaimer in the documentation, Read me file, license file and/or - * other materials provided with the software distribution. - * - * The names of Sun Microsystems, Inc. ("Sun") and/or the copyright - * holder may not be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS," WITHOUT A WARRANTY OF ANY - * KIND. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND - * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, NON-INTERFERENCE, ACCURACY OF - * INFORMATIONAL CONTENT OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. THE - * COPYRIGHT HOLDER, SUN AND SUN'S LICENSORS SHALL NOT BE LIABLE FOR - * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR - * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL THE - * COPYRIGHT HOLDER, SUN OR SUN'S LICENSORS BE LIABLE FOR ANY LOST - * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, - * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND - * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR - * INABILITY TO USE THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGES. YOU ACKNOWLEDGE THAT THIS SOFTWARE IS NOT - * DESIGNED, LICENSED OR INTENDED FOR USE IN THE DESIGN, CONSTRUCTION, - * OPERATION OR MAINTENANCE OF ANY NUCLEAR FACILITY. THE COPYRIGHT - * HOLDER, SUN AND SUN'S LICENSORS DISCLAIM ANY EXPRESS OR IMPLIED - * WARRANTY OF FITNESS FOR SUCH USES. - */ - -package org.gephi.lib.gleem.linalg; - -/** 3x3 matrix class useful for simple linear algebra. Representation - is (as Mat4f) in row major order and assumes multiplication by - column vectors on the right. */ - -public class Mat3f { - private float[] data; - - /** Creates new matrix initialized to the zero matrix */ - public Mat3f() { - data = new float[9]; - } - - /** Initialize to the identity matrix. */ - public void makeIdent() { - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 3; j++) { - if (i == j) { - set(i, j, 1.0f); - } else { - set(i, j, 0.0f); - } - } - } - } - - /** Gets the (i,j)th element of this matrix, where i is the row - index and j is the column index */ - public float get(int i, int j) { - return data[3 * i + j]; - } - - /** Sets the (i,j)th element of this matrix, where i is the row - index and j is the column index */ - public void set(int i, int j, float val) { - data[3 * i + j] = val; - } - - /** Set column i (i=[0..2]) to vector v. */ - public void setCol(int i, Vec3f v) { - set(0, i, v.x()); - set(1, i, v.y()); - set(2, i, v.z()); - } - - /** Set row i (i=[0..2]) to vector v. */ - public void setRow(int i, Vec3f v) { - set(i, 0, v.x()); - set(i, 1, v.y()); - set(i, 2, v.z()); - } - - /** Transpose this matrix in place. */ - public void transpose() { - float t; - t = get(0, 1); - set(0, 1, get(1, 0)); - set(1, 0, t); - - t = get(0, 2); - set(0, 2, get(2, 0)); - set(2, 0, t); - - t = get(1, 2); - set(1, 2, get(2, 1)); - set(2, 1, t); - } - - /** Return the determinant. Computed across the zeroth row. */ - public float determinant() { - return (get(0, 0) * (get(1, 1) * get(2, 2) - get(2, 1) * get(1, 2)) + - get(0, 1) * (get(2, 0) * get(1, 2) - get(1, 0) * get(2, 2)) + - get(0, 2) * (get(1, 0) * get(2, 1) - get(2, 0) * get(1, 1))); - } - - /** Full matrix inversion in place. If matrix is singular, returns - false and matrix contents are untouched. If you know the matrix - is orthonormal, you can call transpose() instead. */ - public boolean invert() { - float det = determinant(); - if (det == 0.0f) - return false; - - // Form cofactor matrix - Mat3f cf = new Mat3f(); - cf.set(0, 0, get(1, 1) * get(2, 2) - get(2, 1) * get(1, 2)); - cf.set(0, 1, get(2, 0) * get(1, 2) - get(1, 0) * get(2, 2)); - cf.set(0, 2, get(1, 0) * get(2, 1) - get(2, 0) * get(1, 1)); - cf.set(1, 0, get(2, 1) * get(0, 2) - get(0, 1) * get(2, 2)); - cf.set(1, 1, get(0, 0) * get(2, 2) - get(2, 0) * get(0, 2)); - cf.set(1, 2, get(2, 0) * get(0, 1) - get(0, 0) * get(2, 1)); - cf.set(2, 0, get(0, 1) * get(1, 2) - get(1, 1) * get(0, 2)); - cf.set(2, 1, get(1, 0) * get(0, 2) - get(0, 0) * get(1, 2)); - cf.set(2, 2, get(0, 0) * get(1, 1) - get(1, 0) * get(0, 1)); - - // Now copy back transposed - for (int i = 0; i < 3; i++) - for (int j = 0; j < 3; j++) - set(i, j, cf.get(j, i) / det); - return true; - } - - /** Multiply a 3D vector by this matrix. NOTE: src and dest must be - different vectors. */ - public void xformVec(Vec3f src, Vec3f dest) { - dest.set(get(0, 0) * src.x() + - get(0, 1) * src.y() + - get(0, 2) * src.z(), - - get(1, 0) * src.x() + - get(1, 1) * src.y() + - get(1, 2) * src.z(), - - get(2, 0) * src.x() + - get(2, 1) * src.y() + - get(2, 2) * src.z()); - } - - /** Returns this * b; creates new matrix */ - public Mat3f mul(Mat3f b) { - Mat3f tmp = new Mat3f(); - tmp.mul(this, b); - return tmp; - } - - /** this = a * b */ - public void mul(Mat3f a, Mat3f b) { - for (int rc = 0; rc < 3; rc++) - for (int cc = 0; cc < 3; cc++) { - float tmp = 0.0f; - for (int i = 0; i < 3; i++) - tmp += a.get(rc, i) * b.get(i, cc); - set(rc, cc, tmp); - } - } - - public Matf toMatf() { - Matf out = new Matf(3, 3); - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 3; j++) { - out.set(i, j, get(i, j)); - } - } - return out; - } - - @Override - public String toString() { - String endl = System.getProperty("line.separator"); - return "(" + - get(0, 0) + ", " + get(0, 1) + ", " + get(0, 2) + endl + - get(1, 0) + ", " + get(1, 1) + ", " + get(1, 2) + endl + - get(2, 0) + ", " + get(2, 1) + ", " + get(2, 2) + ")"; - } -} diff --git a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Mat4f.java b/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Mat4f.java deleted file mode 100644 index 0d6ce6ab40..0000000000 --- a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Mat4f.java +++ /dev/null @@ -1,266 +0,0 @@ -/* - * gleem -- OpenGL Extremely Easy-To-Use Manipulators. - * Copyright (C) 1998-2003 Kenneth B. Russell (kbrussel@alum.mit.edu) - * - * Copying, distribution and use of this software in source and binary - * forms, with or without modification, is permitted provided that the - * following conditions are met: - * - * Distributions of source code must reproduce the copyright notice, - * this list of conditions and the following disclaimer in the source - * code header files; and Distributions of binary code must reproduce - * the copyright notice, this list of conditions and the following - * disclaimer in the documentation, Read me file, license file and/or - * other materials provided with the software distribution. - * - * The names of Sun Microsystems, Inc. ("Sun") and/or the copyright - * holder may not be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS," WITHOUT A WARRANTY OF ANY - * KIND. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND - * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, NON-INTERFERENCE, ACCURACY OF - * INFORMATIONAL CONTENT OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. THE - * COPYRIGHT HOLDER, SUN AND SUN'S LICENSORS SHALL NOT BE LIABLE FOR - * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR - * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL THE - * COPYRIGHT HOLDER, SUN OR SUN'S LICENSORS BE LIABLE FOR ANY LOST - * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, - * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND - * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR - * INABILITY TO USE THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGES. YOU ACKNOWLEDGE THAT THIS SOFTWARE IS NOT - * DESIGNED, LICENSED OR INTENDED FOR USE IN THE DESIGN, CONSTRUCTION, - * OPERATION OR MAINTENANCE OF ANY NUCLEAR FACILITY. THE COPYRIGHT - * HOLDER, SUN AND SUN'S LICENSORS DISCLAIM ANY EXPRESS OR IMPLIED - * WARRANTY OF FITNESS FOR SUCH USES. - */ - -package org.gephi.lib.gleem.linalg; - -/** A (very incomplete) 4x4 matrix class. Representation assumes - multiplication by column vectors on the right. */ - -public class Mat4f { - private float[] data; - - /** Creates new matrix initialized to the zero matrix */ - public Mat4f() { - data = new float[16]; - } - - /** Creates new matrix initialized to argument's contents */ - public Mat4f(Mat4f arg) { - this(); - set(arg); - } - - /** Sets this matrix to the identity matrix */ - public void makeIdent() { - for (int i = 0; i < 4; i++) { - for (int j = 0; j < 4; j++) { - if (i == j) { - set(i, j, 1.0f); - } else { - set(i, j, 0.0f); - } - } - } - } - - /** Sets this matrix to be equivalent to the given one */ - public void set(Mat4f arg) { - float[] mine = data; - float[] yours = arg.data; - for (int i = 0; i < mine.length; i++) { - mine[i] = yours[i]; - } - } - - /** Gets the (i,j)th element of this matrix, where i is the row - index and j is the column index */ - public float get(int i, int j) { - return data[4 * i + j]; - } - - /** Sets the (i,j)th element of this matrix, where i is the row - index and j is the column index */ - public void set(int i, int j, float val) { - data[4 * i + j] = val; - } - - /** Sets the translation component of this matrix (i.e., the three - top elements of the third column) without touching any of the - other parts of the matrix */ - public void setTranslation(Vec3f trans) { - set(0, 3, trans.x()); - set(1, 3, trans.y()); - set(2, 3, trans.z()); - } - - /** Sets the rotation component of this matrix (i.e., the upper left - 3x3) without touching any of the other parts of the matrix */ - public void setRotation(Rotf rot) { - rot.toMatrix(this); - } - - /** Sets the upper-left 3x3 of this matrix assuming that the given - x, y, and z vectors form an orthonormal basis */ - public void setRotation(Vec3f x, Vec3f y, Vec3f z) { - set(0, 0, x.x()); - set(1, 0, x.y()); - set(2, 0, x.z()); - - set(0, 1, y.x()); - set(1, 1, y.y()); - set(2, 1, y.z()); - - set(0, 2, z.x()); - set(1, 2, z.y()); - set(2, 2, z.z()); - } - - /** Gets the upper left 3x3 of this matrix as a rotation. Currently - does not work if there are scales. Ignores translation - component. */ - public void getRotation(Rotf rot) { - rot.fromMatrix(this); - } - - /** Sets the elements (0, 0), (1, 1), and (2, 2) with the - appropriate elements of the given three-dimensional scale - vector. Does not perform a full multiplication of the upper-left - 3x3; use this with an identity matrix in conjunction with - mul for that. */ - public void setScale(Vec3f scale) { - set(0, 0, scale.x()); - set(1, 1, scale.y()); - set(2, 2, scale.z()); - } - - /** Inverts this matrix assuming that it represents a rigid - transform (i.e., some combination of rotations and - translations). Assumes column vectors. Algorithm: transposes - upper left 3x3; negates translation in rightmost column and - transforms by inverted rotation. */ - public void invertRigid() { - float t; - // Transpose upper left 3x3 - t = get(0, 1); - set(0, 1, get(1, 0)); - set(1, 0, t); - t = get(0, 2); - set(0, 2, get(2, 0)); - set(2, 0, t); - t = get(1, 2); - set(1, 2, get(2, 1)); - set(2, 1, t); - // Transform negative translation by this - Vec3f negTrans = new Vec3f(-get(0, 3), -get(1, 3), -get(2, 3)); - Vec3f trans = new Vec3f(); - xformDir(negTrans, trans); - set(0, 3, trans.x()); - set(1, 3, trans.y()); - set(2, 3, trans.z()); - } - - /** Returns this * b; creates new matrix */ - public Mat4f mul(Mat4f b) { - Mat4f tmp = new Mat4f(); - tmp.mul(this, b); - return tmp; - } - - /** this = a * b */ - public void mul(Mat4f a, Mat4f b) { - for (int rc = 0; rc < 4; rc++) - for (int cc = 0; cc < 4; cc++) { - float tmp = 0.0f; - for (int i = 0; i < 4; i++) - tmp += a.get(rc, i) * b.get(i, cc); - set(rc, cc, tmp); - } - } - - /** Transpose this matrix in place. */ - public void transpose() { - float t; - for (int i = 0; i < 4; i++) { - for (int j = 0; j < i; j++) { - t = get(i, j); - set(i, j, get(j, i)); - set(j, i, t); - } - } - } - - /** Multiply a 4D vector by this matrix. NOTE: src and dest must be - different vectors. */ - public void xformVec(Vec4f src, Vec4f dest) { - for (int rc = 0; rc < 4; rc++) { - float tmp = 0.0f; - for (int cc = 0; cc < 4; cc++) { - tmp += get(rc, cc) * src.get(cc); - } - dest.set(rc, tmp); - } - } - - /** Transforms a 3D vector as though it had a homogeneous coordinate - and assuming that this matrix represents only rigid - transformations; i.e., is not a full transformation. NOTE: src - and dest must be different vectors. */ - public void xformPt(Vec3f src, Vec3f dest) { - for (int rc = 0; rc < 3; rc++) { - float tmp = 0.0f; - for (int cc = 0; cc < 3; cc++) { - tmp += get(rc, cc) * src.get(cc); - } - tmp += get(rc, 3); - dest.set(rc, tmp); - } - } - - /** Transforms src using only the upper left 3x3. NOTE: src and dest - must be different vectors. */ - public void xformDir(Vec3f src, Vec3f dest) { - for (int rc = 0; rc < 3; rc++) { - float tmp = 0.0f; - for (int cc = 0; cc < 3; cc++) { - tmp += get(rc, cc) * src.get(cc); - } - dest.set(rc, tmp); - } - } - - /** Copies data in column-major (OpenGL format) order into passed - float array, which must have length 16 or greater. */ - public void getColumnMajorData(float[] out) { - for (int i = 0; i < 4; i++) { - for (int j = 0; j < 4; j++) { - out[4 * j + i] = get(i, j); - } - } - } - - public Matf toMatf() { - Matf out = new Matf(4, 4); - for (int i = 0; i < 4; i++) { - for (int j = 0; j < 4; j++) { - out.set(i, j, get(i, j)); - } - } - return out; - } - - @Override - public String toString() { - String endl = System.getProperty("line.separator"); - return "(" + - get(0, 0) + ", " + get(0, 1) + ", " + get(0, 2) + ", " + get(0, 3) + endl + - get(1, 0) + ", " + get(1, 1) + ", " + get(1, 2) + ", " + get(1, 3) + endl + - get(2, 0) + ", " + get(2, 1) + ", " + get(2, 2) + ", " + get(2, 3) + endl + - get(3, 0) + ", " + get(3, 1) + ", " + get(3, 2) + ", " + get(3, 3) + ")"; - } -} diff --git a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Matf.java b/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Matf.java deleted file mode 100644 index 59ee082484..0000000000 --- a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Matf.java +++ /dev/null @@ -1,168 +0,0 @@ -/* - * gleem -- OpenGL Extremely Easy-To-Use Manipulators. - * Copyright (C) 1998-2003 Kenneth B. Russell (kbrussel@alum.mit.edu) - * - * Copying, distribution and use of this software in source and binary - * forms, with or without modification, is permitted provided that the - * following conditions are met: - * - * Distributions of source code must reproduce the copyright notice, - * this list of conditions and the following disclaimer in the source - * code header files; and Distributions of binary code must reproduce - * the copyright notice, this list of conditions and the following - * disclaimer in the documentation, Read me file, license file and/or - * other materials provided with the software distribution. - * - * The names of Sun Microsystems, Inc. ("Sun") and/or the copyright - * holder may not be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS," WITHOUT A WARRANTY OF ANY - * KIND. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND - * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, NON-INTERFERENCE, ACCURACY OF - * INFORMATIONAL CONTENT OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. THE - * COPYRIGHT HOLDER, SUN AND SUN'S LICENSORS SHALL NOT BE LIABLE FOR - * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR - * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL THE - * COPYRIGHT HOLDER, SUN OR SUN'S LICENSORS BE LIABLE FOR ANY LOST - * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, - * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND - * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR - * INABILITY TO USE THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGES. YOU ACKNOWLEDGE THAT THIS SOFTWARE IS NOT - * DESIGNED, LICENSED OR INTENDED FOR USE IN THE DESIGN, CONSTRUCTION, - * OPERATION OR MAINTENANCE OF ANY NUCLEAR FACILITY. THE COPYRIGHT - * HOLDER, SUN AND SUN'S LICENSORS DISCLAIM ANY EXPRESS OR IMPLIED - * WARRANTY OF FITNESS FOR SUCH USES. - */ - -package org.gephi.lib.gleem.linalg; - -/** Arbitrary-size single-precision matrix class. Currently very - simple and only supports a few needed operations. */ - -public class Matf { - private float[] data; - private int nCol; // number of columns - private int nRow; // number of columns - - public Matf(int nRow, int nCol) { - data = new float[nRow * nCol]; - this.nCol = nCol; - this.nRow = nRow; - } - - public Matf(Matf arg) { - nRow = arg.nRow; - nCol = arg.nCol; - data = new float[nRow * nCol]; - System.arraycopy(arg.data, 0, data, 0, data.length); - } - - public int nRow() { - return nRow; - } - - public int nCol() { - return nCol; - } - - /** Gets the (i,j)th element of this matrix, where i is the row - index and j is the column index */ - public float get(int i, int j) { - return data[nCol * i + j]; - } - - /** Sets the (i,j)th element of this matrix, where i is the row - index and j is the column index */ - public void set(int i, int j, float val) { - data[nCol * i + j] = val; - } - - /** Returns transpose of this matrix; creates new matrix */ - public Matf transpose() { - Matf tmp = new Matf(nCol, nRow); - for (int i = 0; i < nRow; i++) { - for (int j = 0; j < nCol; j++) { - tmp.set(j, i, get(i, j)); - } - } - return tmp; - } - - /** Returns this * b; creates new matrix */ - public Matf mul(Matf b) throws DimensionMismatchException { - if (nCol() != b.nRow()) - throw new DimensionMismatchException(); - Matf tmp = new Matf(nRow(), b.nCol()); - for (int i = 0; i < nRow(); i++) { - for (int j = 0; j < b.nCol(); j++) { - float val = 0; - for (int t = 0; t < nCol(); t++) { - val += get(i, t) * b.get(t, j); - } - tmp.set(i, j, val); - } - } - return tmp; - } - - /** Returns this * v, assuming v is a column vector. */ - public Vecf mul(Vecf v) throws DimensionMismatchException { - if (nCol() != v.length()) { - throw new DimensionMismatchException(); - } - Vecf out = new Vecf(nRow()); - for (int i = 0; i < nRow(); i++) { - float tmp = 0; - for (int j = 0; j < nCol(); j++) { - tmp += get(i, j) * v.get(j); - } - out.set(i, tmp); - } - return out; - } - - /** If this is a 2x2 matrix, returns it as a Mat2f. */ - public Mat2f toMat2f() throws DimensionMismatchException { - if (nRow() != 2 || nCol() != 2) { - throw new DimensionMismatchException(); - } - Mat2f tmp = new Mat2f(); - for (int i = 0; i < 2; i++) { - for (int j = 0; j < 2; j++) { - tmp.set(i, j, get(i, j)); - } - } - return tmp; - } - - /** If this is a 3x3 matrix, returns it as a Mat3f. */ - public Mat3f toMat3f() throws DimensionMismatchException { - if (nRow() != 3 || nCol() != 3) { - throw new DimensionMismatchException(); - } - Mat3f tmp = new Mat3f(); - for (int i = 0; i < 3; i++) { - for (int j = 0; j < 3; j++) { - tmp.set(i, j, get(i, j)); - } - } - return tmp; - } - - /** If this is a 4x4 matrix, returns it as a Mat4f. */ - public Mat4f toMat4f() throws DimensionMismatchException { - if (nRow() != 4 || nCol() != 4) { - throw new DimensionMismatchException(); - } - Mat4f tmp = new Mat4f(); - for (int i = 0; i < 4; i++) { - for (int j = 0; j < 4; j++) { - tmp.set(i, j, get(i, j)); - } - } - return tmp; - } -} diff --git a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/MathUtil.java b/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/MathUtil.java deleted file mode 100644 index db8b4457a8..0000000000 --- a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/MathUtil.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - * gleem -- OpenGL Extremely Easy-To-Use Manipulators. - * Copyright (C) 1998-2003 Kenneth B. Russell (kbrussel@alum.mit.edu) - * - * Copying, distribution and use of this software in source and binary - * forms, with or without modification, is permitted provided that the - * following conditions are met: - * - * Distributions of source code must reproduce the copyright notice, - * this list of conditions and the following disclaimer in the source - * code header files; and Distributions of binary code must reproduce - * the copyright notice, this list of conditions and the following - * disclaimer in the documentation, Read me file, license file and/or - * other materials provided with the software distribution. - * - * The names of Sun Microsystems, Inc. ("Sun") and/or the copyright - * holder may not be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS," WITHOUT A WARRANTY OF ANY - * KIND. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND - * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, NON-INTERFERENCE, ACCURACY OF - * INFORMATIONAL CONTENT OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. THE - * COPYRIGHT HOLDER, SUN AND SUN'S LICENSORS SHALL NOT BE LIABLE FOR - * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR - * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL THE - * COPYRIGHT HOLDER, SUN OR SUN'S LICENSORS BE LIABLE FOR ANY LOST - * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, - * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND - * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR - * INABILITY TO USE THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGES. YOU ACKNOWLEDGE THAT THIS SOFTWARE IS NOT - * DESIGNED, LICENSED OR INTENDED FOR USE IN THE DESIGN, CONSTRUCTION, - * OPERATION OR MAINTENANCE OF ANY NUCLEAR FACILITY. THE COPYRIGHT - * HOLDER, SUN AND SUN'S LICENSORS DISCLAIM ANY EXPRESS OR IMPLIED - * WARRANTY OF FITNESS FOR SUCH USES. - */ - -package org.gephi.lib.gleem.linalg; - -/** Utility math routines. */ - -public class MathUtil { - /** Makes an arbitrary vector perpendicular to src and - inserts it into dest. Returns false if the source vector - was equal to (0, 0, 0). */ - public static boolean makePerpendicular(Vec3f src, - Vec3f dest) { - if ((src.x() == 0.0f) && (src.y() == 0.0f) && (src.z() == 0.0f)) { - return false; - } - - if (src.x() != 0.0f) { - if (src.y() != 0.0f) { - dest.set(-src.y(), src.x(), 0.0f); - } else { - dest.set(-src.z(), 0.0f, src.x()); - } - } else { - dest.set(1.0f, 0.0f, 0.0f); - } - return true; - } - - /** Returns 1 if the sign of the given argument is positive; -1 if - negative; 0 if 0. */ - public static int sgn(float f) { - if (f > 0) { - return 1; - } else if (f < 0) { - return -1; - } - return 0; - } - - /** Clamps argument between min and max values. */ - public static float clamp(float val, float min, float max) { - if (val < min) return min; - if (val > max) return max; - return val; - } - - /** Clamps argument between min and max values. */ - public static int clamp(int val, int min, int max) { - if (val < min) return min; - if (val > max) return max; - return val; - } -} diff --git a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/NonSquareMatrixException.java b/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/NonSquareMatrixException.java deleted file mode 100644 index 2809fc05e0..0000000000 --- a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/NonSquareMatrixException.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * gleem -- OpenGL Extremely Easy-To-Use Manipulators. - * Copyright (C) 1998-2003 Kenneth B. Russell (kbrussel@alum.mit.edu) - * - * Copying, distribution and use of this software in source and binary - * forms, with or without modification, is permitted provided that the - * following conditions are met: - * - * Distributions of source code must reproduce the copyright notice, - * this list of conditions and the following disclaimer in the source - * code header files; and Distributions of binary code must reproduce - * the copyright notice, this list of conditions and the following - * disclaimer in the documentation, Read me file, license file and/or - * other materials provided with the software distribution. - * - * The names of Sun Microsystems, Inc. ("Sun") and/or the copyright - * holder may not be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS," WITHOUT A WARRANTY OF ANY - * KIND. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND - * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, NON-INTERFERENCE, ACCURACY OF - * INFORMATIONAL CONTENT OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. THE - * COPYRIGHT HOLDER, SUN AND SUN'S LICENSORS SHALL NOT BE LIABLE FOR - * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR - * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL THE - * COPYRIGHT HOLDER, SUN OR SUN'S LICENSORS BE LIABLE FOR ANY LOST - * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, - * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND - * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR - * INABILITY TO USE THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGES. YOU ACKNOWLEDGE THAT THIS SOFTWARE IS NOT - * DESIGNED, LICENSED OR INTENDED FOR USE IN THE DESIGN, CONSTRUCTION, - * OPERATION OR MAINTENANCE OF ANY NUCLEAR FACILITY. THE COPYRIGHT - * HOLDER, SUN AND SUN'S LICENSORS DISCLAIM ANY EXPRESS OR IMPLIED - * WARRANTY OF FITNESS FOR SUCH USES. - */ - -package org.gephi.lib.gleem.linalg; - -/** Thrown to indicate a non-square matrix during an operation - requiring one. */ - -public class NonSquareMatrixException extends RuntimeException { - public NonSquareMatrixException() { - super(); - } - - public NonSquareMatrixException(String msg) { - super(msg); - } -} diff --git a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Plane.java b/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Plane.java deleted file mode 100644 index c8d003e6e4..0000000000 --- a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Plane.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * gleem -- OpenGL Extremely Easy-To-Use Manipulators. - * Copyright (C) 1998-2003 Kenneth B. Russell (kbrussel@alum.mit.edu) - * - * Copying, distribution and use of this software in source and binary - * forms, with or without modification, is permitted provided that the - * following conditions are met: - * - * Distributions of source code must reproduce the copyright notice, - * this list of conditions and the following disclaimer in the source - * code header files; and Distributions of binary code must reproduce - * the copyright notice, this list of conditions and the following - * disclaimer in the documentation, Read me file, license file and/or - * other materials provided with the software distribution. - * - * The names of Sun Microsystems, Inc. ("Sun") and/or the copyright - * holder may not be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS," WITHOUT A WARRANTY OF ANY - * KIND. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND - * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, NON-INTERFERENCE, ACCURACY OF - * INFORMATIONAL CONTENT OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. THE - * COPYRIGHT HOLDER, SUN AND SUN'S LICENSORS SHALL NOT BE LIABLE FOR - * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR - * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL THE - * COPYRIGHT HOLDER, SUN OR SUN'S LICENSORS BE LIABLE FOR ANY LOST - * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, - * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND - * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR - * INABILITY TO USE THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGES. YOU ACKNOWLEDGE THAT THIS SOFTWARE IS NOT - * DESIGNED, LICENSED OR INTENDED FOR USE IN THE DESIGN, CONSTRUCTION, - * OPERATION OR MAINTENANCE OF ANY NUCLEAR FACILITY. THE COPYRIGHT - * HOLDER, SUN AND SUN'S LICENSORS DISCLAIM ANY EXPRESS OR IMPLIED - * WARRANTY OF FITNESS FOR SUCH USES. - */ - -package org.gephi.lib.gleem.linalg; - -/** Represents a plane in 3D space. */ - -public class Plane { - /** Normalized */ - private Vec3f normal; - private Vec3f point; - /** Constant for faster projection and intersection */ - float c; - - /** Default constructor initializes normal to (0, 1, 0) and point to - (0, 0, 0) */ - public Plane() { - normal = new Vec3f(0, 1, 0); - point = new Vec3f(0, 0, 0); - recalc(); - } - - /** Sets all parameters of plane. Plane has normal normal and - goes through the point point. Normal does not need to be - unit length but must not be the zero vector. */ - public Plane(Vec3f normal, Vec3f point) { - this.normal = new Vec3f(normal); - this.normal.normalize(); - this.point = new Vec3f(point); - recalc(); - } - - /** Setter does some work to maintain internal caches. Normal does - not need to be unit length but must not be the zero vector. */ - public void setNormal(Vec3f normal) { - this.normal.set(normal); - this.normal.normalize(); - recalc(); - } - - /** Normal is normalized internally, so normal is not - necessarily equal to plane.setNormal(normal); - plane.getNormal(); */ - public Vec3f getNormal() { - return normal; - } - - /** Setter does some work to maintain internal caches */ - public void setPoint(Vec3f point) { - this.point.set(point); - recalc(); - } - - public Vec3f getPoint() { - return point; - } - - /** Project a point onto the plane */ - public void projectPoint(Vec3f pt, - Vec3f projPt) { - float scale = normal.dot(pt) - c; - projPt.set(pt.minus(normal.times(normal.dot(point) - c))); - } - - /** Intersect a ray with the plane. Returns true if intersection occurred, false - otherwise. This is a two-sided ray cast. */ - public boolean intersectRay(Vec3f rayStart, - Vec3f rayDirection, - IntersectionPoint intPt) { - float denom = normal.dot(rayDirection); - if (denom == 0) - return false; - intPt.setT((c - normal.dot(rayStart)) / denom); - intPt.setIntersectionPoint(rayStart.plus(rayDirection.times(intPt.getT()))); - return true; - } - - //---------------------------------------------------------------------- - // Internals only below this point - // - - private void recalc() { - c = normal.dot(point); - } -} diff --git a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/PlaneUV.java b/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/PlaneUV.java deleted file mode 100644 index 0be7508afe..0000000000 --- a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/PlaneUV.java +++ /dev/null @@ -1,203 +0,0 @@ -/* - * gleem -- OpenGL Extremely Easy-To-Use Manipulators. - * Copyright (C) 1998-2003 Kenneth B. Russell (kbrussel@alum.mit.edu) - * - * Copying, distribution and use of this software in source and binary - * forms, with or without modification, is permitted provided that the - * following conditions are met: - * - * Distributions of source code must reproduce the copyright notice, - * this list of conditions and the following disclaimer in the source - * code header files; and Distributions of binary code must reproduce - * the copyright notice, this list of conditions and the following - * disclaimer in the documentation, Read me file, license file and/or - * other materials provided with the software distribution. - * - * The names of Sun Microsystems, Inc. ("Sun") and/or the copyright - * holder may not be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS," WITHOUT A WARRANTY OF ANY - * KIND. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND - * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, NON-INTERFERENCE, ACCURACY OF - * INFORMATIONAL CONTENT OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. THE - * COPYRIGHT HOLDER, SUN AND SUN'S LICENSORS SHALL NOT BE LIABLE FOR - * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR - * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL THE - * COPYRIGHT HOLDER, SUN OR SUN'S LICENSORS BE LIABLE FOR ANY LOST - * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, - * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND - * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR - * INABILITY TO USE THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGES. YOU ACKNOWLEDGE THAT THIS SOFTWARE IS NOT - * DESIGNED, LICENSED OR INTENDED FOR USE IN THE DESIGN, CONSTRUCTION, - * OPERATION OR MAINTENANCE OF ANY NUCLEAR FACILITY. THE COPYRIGHT - * HOLDER, SUN AND SUN'S LICENSORS DISCLAIM ANY EXPRESS OR IMPLIED - * WARRANTY OF FITNESS FOR SUCH USES. - */ - -package org.gephi.lib.gleem.linalg; - -/** This differs from the Plane class in that it maintains an origin - and orthonormal U, V axes in the plane so that it can project a 3D - point to a 2D one. U cross V = normal. U and V coordinates are - computed with respect to the origin. */ - -public class PlaneUV { - private Vec3f origin = new Vec3f(); - /** Normalized */ - private Vec3f normal = new Vec3f(); - private Vec3f uAxis = new Vec3f(); - private Vec3f vAxis = new Vec3f(); - - /** Default constructor initializes normal to (0, 1, 0), origin to - (0, 0, 0), U axis to (1, 0, 0) and V axis to (0, 0, -1). */ - public PlaneUV() { - setEverything(new Vec3f(0, 1, 0), - new Vec3f(0, 0, 0), - new Vec3f(1, 0, 0), - new Vec3f(0, 0, -1)); - } - - /** Takes normal vector and a point which the plane goes through - (which becomes the plane's "origin"). Normal does NOT have to be - normalized, but may not be zero vector. U and V axes are - initialized to arbitrary values. */ - public PlaneUV(Vec3f normal, Vec3f origin) { - setOrigin(origin); - setNormal(normal); - } - - /** Takes normal vector, point which plane goes through, and the "u" - axis in the plane. Computes the "v" axis by taking the cross - product of the normal and the u axis. Axis must be perpendicular - to normal. Normal and uAxis do NOT have to be normalized, but - neither may be the zero vector. */ - public PlaneUV(Vec3f normal, - Vec3f origin, - Vec3f uAxis) { - setOrigin(origin); - setNormalAndU(normal, uAxis); - } - - /** Takes normal vector, point which plane goes through, and both - the u and v axes. u axis cross v axis = normal. Normal, uAxis, and - vAxis do NOT have to be normalized, but none may be the zero - vector. */ - public PlaneUV(Vec3f normal, - Vec3f origin, - Vec3f uAxis, - Vec3f vAxis) { - setEverything(normal, origin, uAxis, vAxis); - } - - /** Set the origin, through which this plane goes and with respect - to which U and V coordinates are computed */ - public void setOrigin(Vec3f origin) { - this.origin.set(origin); - } - - public Vec3f getOrigin() { - return new Vec3f(origin); - } - - /** Normal, U and V axes must be orthogonal and satisfy U cross V = - normal, do not need to be unit length but must not be the zero - vector. */ - public void setNormalAndUV(Vec3f normal, - Vec3f uAxis, - Vec3f vAxis) { - setEverything(normal, origin, uAxis, vAxis); - } - - /** This version sets the normal vector and generates new U and V - axes. */ - public void setNormal(Vec3f normal) { - Vec3f uAxis = new Vec3f(); - MathUtil.makePerpendicular(normal, uAxis); - Vec3f vAxis = normal.cross(uAxis); - setEverything(normal, origin, uAxis, vAxis); - } - - /** This version computes the V axis from (normal cross U). */ - public void setNormalAndU(Vec3f normal, - Vec3f uAxis) { - Vec3f vAxis = normal.cross(uAxis); - setEverything(normal, origin, uAxis, vAxis); - } - - /** Normal, U and V axes are normalized internally, so, for example, - normal is not necessarily equal to - plane.setNormal(normal); plane.getNormal(); */ - public Vec3f getNormal() { - return normal; - } - - public Vec3f getUAxis() { - return uAxis; - } - - public Vec3f getVAxis() { - return vAxis; - } - - /** Project a point onto the plane */ - public void projectPoint(Vec3f point, - Vec3f projPt, - Vec2f uvCoords) { - // Using projPt as a temporary - projPt.sub(point, origin); - float dotp = normal.dot(projPt); - // Component perpendicular to plane - Vec3f tmpDir = new Vec3f(); - tmpDir.set(normal); - tmpDir.scale(dotp); - projPt.sub(projPt, tmpDir); - // Take dot products with basis vectors - uvCoords.set(projPt.dot(uAxis), - projPt.dot(vAxis)); - // Add on center to intersection point - projPt.add(origin); - } - - /** Intersect a ray with this plane, outputting not only the 3D - intersection point but also the U, V coordinates of the - intersection. Returns true if intersection occurred, false - otherwise. This is a two-sided ray cast. */ - public boolean intersectRay(Vec3f rayStart, - Vec3f rayDirection, - IntersectionPoint intPt, - Vec2f uvCoords) { - float denom = rayDirection.dot(normal); - if (denom == 0.0f) - return false; - Vec3f tmpDir = new Vec3f(); - tmpDir.sub(origin, rayStart); - float t = tmpDir.dot(normal) / denom; - // Find intersection point - Vec3f tmpPt = new Vec3f(); - tmpPt.set(rayDirection); - tmpPt.scale(t); - tmpPt.add(rayStart); - intPt.setIntersectionPoint(tmpPt); - intPt.setT(t); - // Find UV coords - tmpDir.sub(intPt.getIntersectionPoint(), origin); - uvCoords.set(tmpDir.dot(uAxis), tmpDir.dot(vAxis)); - return true; - } - - private void setEverything(Vec3f normal, - Vec3f origin, - Vec3f uAxis, - Vec3f vAxis) { - this.normal.set(normal); - this.origin.set(origin); - this.uAxis.set(uAxis); - this.vAxis.set(vAxis); - this.normal.normalize(); - this.uAxis.normalize(); - this.vAxis.normalize(); - } -} diff --git a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Rotf.java b/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Rotf.java deleted file mode 100644 index 5f5da115ce..0000000000 --- a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Rotf.java +++ /dev/null @@ -1,310 +0,0 @@ -/* - * gleem -- OpenGL Extremely Easy-To-Use Manipulators. - * Copyright (C) 1998-2003 Kenneth B. Russell (kbrussel@alum.mit.edu) - * - * Copying, distribution and use of this software in source and binary - * forms, with or without modification, is permitted provided that the - * following conditions are met: - * - * Distributions of source code must reproduce the copyright notice, - * this list of conditions and the following disclaimer in the source - * code header files; and Distributions of binary code must reproduce - * the copyright notice, this list of conditions and the following - * disclaimer in the documentation, Read me file, license file and/or - * other materials provided with the software distribution. - * - * The names of Sun Microsystems, Inc. ("Sun") and/or the copyright - * holder may not be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS," WITHOUT A WARRANTY OF ANY - * KIND. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND - * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, NON-INTERFERENCE, ACCURACY OF - * INFORMATIONAL CONTENT OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. THE - * COPYRIGHT HOLDER, SUN AND SUN'S LICENSORS SHALL NOT BE LIABLE FOR - * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR - * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL THE - * COPYRIGHT HOLDER, SUN OR SUN'S LICENSORS BE LIABLE FOR ANY LOST - * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, - * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND - * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR - * INABILITY TO USE THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGES. YOU ACKNOWLEDGE THAT THIS SOFTWARE IS NOT - * DESIGNED, LICENSED OR INTENDED FOR USE IN THE DESIGN, CONSTRUCTION, - * OPERATION OR MAINTENANCE OF ANY NUCLEAR FACILITY. THE COPYRIGHT - * HOLDER, SUN AND SUN'S LICENSORS DISCLAIM ANY EXPRESS OR IMPLIED - * WARRANTY OF FITNESS FOR SUCH USES. - */ - -package org.gephi.lib.gleem.linalg; - -/** Represents a rotation with single-precision components */ - -public class Rotf { - private static float EPSILON = 1.0e-7f; - - // Representation is a quaternion. Element 0 is the scalar part (= - // cos(theta/2)), elements 1..3 the imaginary/"vector" part (= - // sin(theta/2) * axis). - private float q0; - private float q1; - private float q2; - private float q3; - - /** Default constructor initializes to the identity quaternion */ - public Rotf() { - init(); - } - - public Rotf(Rotf arg) { - set(arg); - } - - /** Axis does not need to be normalized but must not be the zero - vector. Angle is in radians. */ - public Rotf(Vec3f axis, float angle) { - set(axis, angle); - } - - /** Creates a rotation which will rotate vector "from" into vector - "to". */ - public Rotf(Vec3f from, Vec3f to) { - set(from, to); - } - - /** Re-initialize this quaternion to be the identity quaternion "e" - (i.e., no rotation) */ - public void init() { - q0 = 1; - q1 = q2 = q3 = 0; - } - - /** Test for "approximate equality" -- performs componentwise test - to see whether difference between all components is less than - epsilon. */ - public boolean withinEpsilon(Rotf arg, float epsilon) { - return ((Math.abs(q0 - arg.q0) < epsilon) && - (Math.abs(q1 - arg.q1) < epsilon) && - (Math.abs(q2 - arg.q2) < epsilon) && - (Math.abs(q3 - arg.q3) < epsilon)); - } - - /** Axis does not need to be normalized but must not be the zero - vector. Angle is in radians. */ - public void set(Vec3f axis, float angle) { - float halfTheta = angle / 2.0f; - q0 = (float) Math.cos(halfTheta); - float sinHalfTheta = (float) Math.sin(halfTheta); - Vec3f realAxis = new Vec3f(axis); - realAxis.normalize(); - q1 = realAxis.x() * sinHalfTheta; - q2 = realAxis.y() * sinHalfTheta; - q3 = realAxis.z() * sinHalfTheta; - } - - public void set(Rotf arg) { - q0 = arg.q0; - q1 = arg.q1; - q2 = arg.q2; - q3 = arg.q3; - } - - /** Sets this rotation to that which will rotate vector "from" into - vector "to". from and to do not have to be the same length. */ - public void set(Vec3f from, Vec3f to) { - Vec3f axis = from.cross(to); - if (axis.lengthSquared() < EPSILON) { - init(); - return; - } - float dotp = from.dot(to); - float denom = from.length() * to.length(); - if (denom < EPSILON) { - init(); - return; - } - dotp /= denom; - set(axis, (float) Math.acos(dotp)); - } - - /** Returns angle (in radians) and mutates the given vector to be - the axis. */ - public float get(Vec3f axis) { - // FIXME: Is this numerically stable? Is there a better way to - // extract the angle from a quaternion? - // NOTE: remove (float) to illustrate compiler bug - float retval = (float) (2.0f * Math.acos(q0)); - axis.set(q1, q2, q3); - float len = axis.length(); - if (len == 0.0f) { - axis.set(0, 0, 1); - } else { - axis.scale(1.0f / len); - } - return retval; - } - - /** Returns inverse of this rotation; creates new rotation */ - public Rotf inverse() { - Rotf tmp = new Rotf(this); - tmp.invert(); - return tmp; - } - - /** Mutate this quaternion to be its inverse. This is equivalent to - the conjugate of the quaternion. */ - public void invert() { - q1 = -q1; - q2 = -q2; - q3 = -q3; - } - - /** Length of this quaternion in four-space */ - public float length() { - return (float) Math.sqrt(lengthSquared()); - } - - /** This dotted with this */ - public float lengthSquared() { - return (q0 * q0 + - q1 * q1 + - q2 * q2 + - q3 * q3); - } - - /** Make this quaternion a unit quaternion again. If you are - composing dozens of quaternions you probably should call this - periodically to ensure that you have a valid rotation. */ - public void normalize() { - float len = length(); - q0 /= len; - q1 /= len; - q2 /= len; - q3 /= len; - } - - /** Returns this * b, in that order; creates new rotation */ - public Rotf times(Rotf b) { - Rotf tmp = new Rotf(); - tmp.mul(this, b); - return tmp; - } - - /** Compose two rotations: this = A * B in that order. NOTE that - because we assume a column vector representation that this - implies that a vector rotated by the cumulative rotation will be - rotated first by B, then A. NOTE: "this" must be different than - both a and b. */ - public void mul(Rotf a, Rotf b) { - q0 = (a.q0 * b.q0 - a.q1 * b.q1 - - a.q2 * b.q2 - a.q3 * b.q3); - q1 = (a.q0 * b.q1 + a.q1 * b.q0 + - a.q2 * b.q3 - a.q3 * b.q2); - q2 = (a.q0 * b.q2 + a.q2 * b.q0 - - a.q1 * b.q3 + a.q3 * b.q1); - q3 = (a.q0 * b.q3 + a.q3 * b.q0 + - a.q1 * b.q2 - a.q2 * b.q1); - } - - /** Turns this rotation into a 3x3 rotation matrix. NOTE: only - mutates the upper-left 3x3 of the passed Mat4f. Implementation - from B. K. P. Horn's Robot Vision textbook. */ - public void toMatrix(Mat4f mat) { - float q00 = q0 * q0; - float q11 = q1 * q1; - float q22 = q2 * q2; - float q33 = q3 * q3; - // Diagonal elements - mat.set(0, 0, q00 + q11 - q22 - q33); - mat.set(1, 1, q00 - q11 + q22 - q33); - mat.set(2, 2, q00 - q11 - q22 + q33); - // 0,1 and 1,0 elements - float q03 = q0 * q3; - float q12 = q1 * q2; - mat.set(0, 1, 2.0f * (q12 - q03)); - mat.set(1, 0, 2.0f * (q03 + q12)); - // 0,2 and 2,0 elements - float q02 = q0 * q2; - float q13 = q1 * q3; - mat.set(0, 2, 2.0f * (q02 + q13)); - mat.set(2, 0, 2.0f * (q13 - q02)); - // 1,2 and 2,1 elements - float q01 = q0 * q1; - float q23 = q2 * q3; - mat.set(1, 2, 2.0f * (q23 - q01)); - mat.set(2, 1, 2.0f * (q01 + q23)); - } - - /** Turns the upper left 3x3 of the passed matrix into a rotation. - Implementation from Watt and Watt, Advanced Animation and - Rendering Techniques. - @see gleem.linalg.Mat4f#getRotation */ - public void fromMatrix(Mat4f mat) { - // FIXME: Should reimplement to follow Horn's advice of using - // eigenvector decomposition to handle roundoff error in given - // matrix. - - float tr, s; - int i, j, k; - - tr = mat.get(0, 0) + mat.get(1, 1) + mat.get(2, 2); - if (tr > 0.0) { - s = (float) Math.sqrt(tr + 1.0f); - q0 = s * 0.5f; - s = 0.5f / s; - q1 = (mat.get(2, 1) - mat.get(1, 2)) * s; - q2 = (mat.get(0, 2) - mat.get(2, 0)) * s; - q3 = (mat.get(1, 0) - mat.get(0, 1)) * s; - } else { - i = 0; - if (mat.get(1, 1) > mat.get(0, 0)) - i = 1; - if (mat.get(2, 2) > mat.get(i, i)) - i = 2; - j = (i+1)%3; - k = (j+1)%3; - s = (float) Math.sqrt( (mat.get(i, i) - (mat.get(j, j) + mat.get(k, k))) + 1.0f); - setQ(i+1, s * 0.5f); - s = 0.5f / s; - q0 = (mat.get(k, j) - mat.get(j, k)) * s; - setQ(j+1, (mat.get(j, i) + mat.get(i, j)) * s); - setQ(k+1, (mat.get(k, i) + mat.get(i, k)) * s); - } - } - - /** Rotate a vector by this quaternion. Implementation is from - Horn's Robot Vision. NOTE: src and dest must be different - vectors. */ - public void rotateVector(Vec3f src, Vec3f dest) { - Vec3f qVec = new Vec3f(q1, q2, q3); - Vec3f qCrossX = qVec.cross(src); - Vec3f qCrossXCrossQ = qCrossX.cross(qVec); - qCrossX.scale(2.0f * q0); - qCrossXCrossQ.scale(-2.0f); - dest.add(src, qCrossX); - dest.add(dest, qCrossXCrossQ); - } - - /** Rotate a vector by this quaternion, returning newly-allocated result. */ - public Vec3f rotateVector(Vec3f src) { - Vec3f tmp = new Vec3f(); - rotateVector(src, tmp); - return tmp; - } - - @Override - public String toString() { - return "(" + q0 + ", " + q1 + ", " + q2 + ", " + q3 + ")"; - } - - private void setQ(int i, float val) { - switch (i) { - case 0: q0 = val; break; - case 1: q1 = val; break; - case 2: q2 = val; break; - case 3: q3 = val; break; - default: throw new IndexOutOfBoundsException(); - } - } -} diff --git a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/SingularMatrixException.java b/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/SingularMatrixException.java deleted file mode 100644 index 6a6f47ede0..0000000000 --- a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/SingularMatrixException.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * gleem -- OpenGL Extremely Easy-To-Use Manipulators. - * Copyright (C) 1998-2003 Kenneth B. Russell (kbrussel@alum.mit.edu) - * - * Copying, distribution and use of this software in source and binary - * forms, with or without modification, is permitted provided that the - * following conditions are met: - * - * Distributions of source code must reproduce the copyright notice, - * this list of conditions and the following disclaimer in the source - * code header files; and Distributions of binary code must reproduce - * the copyright notice, this list of conditions and the following - * disclaimer in the documentation, Read me file, license file and/or - * other materials provided with the software distribution. - * - * The names of Sun Microsystems, Inc. ("Sun") and/or the copyright - * holder may not be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS," WITHOUT A WARRANTY OF ANY - * KIND. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND - * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, NON-INTERFERENCE, ACCURACY OF - * INFORMATIONAL CONTENT OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. THE - * COPYRIGHT HOLDER, SUN AND SUN'S LICENSORS SHALL NOT BE LIABLE FOR - * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR - * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL THE - * COPYRIGHT HOLDER, SUN OR SUN'S LICENSORS BE LIABLE FOR ANY LOST - * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, - * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND - * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR - * INABILITY TO USE THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGES. YOU ACKNOWLEDGE THAT THIS SOFTWARE IS NOT - * DESIGNED, LICENSED OR INTENDED FOR USE IN THE DESIGN, CONSTRUCTION, - * OPERATION OR MAINTENANCE OF ANY NUCLEAR FACILITY. THE COPYRIGHT - * HOLDER, SUN AND SUN'S LICENSORS DISCLAIM ANY EXPRESS OR IMPLIED - * WARRANTY OF FITNESS FOR SUCH USES. - */ - -package org.gephi.lib.gleem.linalg; - -/** Thrown to indicate a singular matrix during an inversion or - related operation. */ - -public class SingularMatrixException extends RuntimeException { - public SingularMatrixException() { - super(); - } - - public SingularMatrixException(String msg) { - super(msg); - } -} diff --git a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Vec2f.java b/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Vec2f.java deleted file mode 100644 index 33ebcdf994..0000000000 --- a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Vec2f.java +++ /dev/null @@ -1,187 +0,0 @@ -/* - * gleem -- OpenGL Extremely Easy-To-Use Manipulators. - * Copyright (C) 1998-2003 Kenneth B. Russell (kbrussel@alum.mit.edu) - * - * Copying, distribution and use of this software in source and binary - * forms, with or without modification, is permitted provided that the - * following conditions are met: - * - * Distributions of source code must reproduce the copyright notice, - * this list of conditions and the following disclaimer in the source - * code header files; and Distributions of binary code must reproduce - * the copyright notice, this list of conditions and the following - * disclaimer in the documentation, Read me file, license file and/or - * other materials provided with the software distribution. - * - * The names of Sun Microsystems, Inc. ("Sun") and/or the copyright - * holder may not be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS," WITHOUT A WARRANTY OF ANY - * KIND. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND - * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, NON-INTERFERENCE, ACCURACY OF - * INFORMATIONAL CONTENT OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. THE - * COPYRIGHT HOLDER, SUN AND SUN'S LICENSORS SHALL NOT BE LIABLE FOR - * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR - * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL THE - * COPYRIGHT HOLDER, SUN OR SUN'S LICENSORS BE LIABLE FOR ANY LOST - * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, - * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND - * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR - * INABILITY TO USE THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGES. YOU ACKNOWLEDGE THAT THIS SOFTWARE IS NOT - * DESIGNED, LICENSED OR INTENDED FOR USE IN THE DESIGN, CONSTRUCTION, - * OPERATION OR MAINTENANCE OF ANY NUCLEAR FACILITY. THE COPYRIGHT - * HOLDER, SUN AND SUN'S LICENSORS DISCLAIM ANY EXPRESS OR IMPLIED - * WARRANTY OF FITNESS FOR SUCH USES. - */ - -package org.gephi.lib.gleem.linalg; - -/** 2-element single-precision vector */ - -public class Vec2f { - private float x; - private float y; - - public Vec2f() {} - - public Vec2f(Vec2f arg) { - this(arg.x, arg.y); - } - - public Vec2f(float x, float y) { - set(x, y); - } - - public Vec2f copy() { - return new Vec2f(this); - } - - public void set(Vec2f arg) { - set(arg.x, arg.y); - } - - public void set(float x, float y) { - this.x = x; - this.y = y; - } - - /** Sets the ith component, 0 <= i < 2 */ - public void set(int i, float val) { - switch (i) { - case 0: x = val; break; - case 1: y = val; break; - default: throw new IndexOutOfBoundsException(); - } - } - - /** Gets the ith component, 0 <= i < 2 */ - public float get(int i) { - switch (i) { - case 0: return x; - case 1: return y; - default: throw new IndexOutOfBoundsException(); - } - } - - public float x() { return x; } - public float y() { return y; } - - public void setX(float x) { this.x = x; } - public void setY(float y) { this.y = y; } - - public float dot(Vec2f arg) { - return x * arg.x + y * arg.y; - } - - public float length() { - return (float) Math.sqrt(lengthSquared()); - } - - public float lengthSquared() { - return this.dot(this); - } - - public void normalize() { - float len = length(); - if (len == 0.0f) return; - scale(1.0f / len); - } - - /** Returns this * val; creates new vector */ - public Vec2f times(float val) { - Vec2f tmp = new Vec2f(this); - tmp.scale(val); - return tmp; - } - - /** this = this * val */ - public void scale(float val) { - x *= val; - y *= val; - } - - /** Returns this + arg; creates new vector */ - public Vec2f plus(Vec2f arg) { - Vec2f tmp = new Vec2f(); - tmp.add(this, arg); - return tmp; - } - - /** this = this + b */ - public void add(Vec2f b) { - add(this, b); - } - - /** this = a + b */ - public void add(Vec2f a, Vec2f b) { - x = a.x + b.x; - y = a.y + b.y; - } - - /** Returns this + s * arg; creates new vector */ - public Vec2f addScaled(float s, Vec2f arg) { - Vec2f tmp = new Vec2f(); - tmp.addScaled(this, s, arg); - return tmp; - } - - /** this = a + s * b */ - public void addScaled(Vec2f a, float s, Vec2f b) { - x = a.x + s * b.x; - y = a.y + s * b.y; - } - - /** Returns this - arg; creates new vector */ - public Vec2f minus(Vec2f arg) { - Vec2f tmp = new Vec2f(); - tmp.sub(this, arg); - return tmp; - } - - /** this = this - b */ - public void sub(Vec2f b) { - sub(this, b); - } - - /** this = a - b */ - public void sub(Vec2f a, Vec2f b) { - x = a.x - b.x; - y = a.y - b.y; - } - - public Vecf toVecf() { - Vecf out = new Vecf(2); - for (int i = 0; i < 2; i++) { - out.set(i, get(i)); - } - return out; - } - - @Override - public String toString() { - return "(" + x + ", " + y + ")"; - } -} diff --git a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Vec3d.java b/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Vec3d.java deleted file mode 100644 index 7c86d06212..0000000000 --- a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Vec3d.java +++ /dev/null @@ -1,176 +0,0 @@ -/* - * gleem -- OpenGL Extremely Easy-To-Use Manipulators. - * Copyright (C) 1998-2003 Kenneth B. Russell (kbrussel@alum.mit.edu) - * See the file GLEEM-LICENSE.txt in the doc/ directory for licensing terms. - */ - -package org.gephi.lib.gleem.linalg; - -/** 3-element double-precision vector */ - -public class Vec3d { - private double x; - private double y; - private double z; - - public Vec3d() {} - - public Vec3d(Vec3d arg) { - set(arg); - } - - public Vec3d(double x, double y, double z) { - set(x, y, z); - } - - public Vec3d copy() { - return new Vec3d(this); - } - - /** Convert to single-precision */ - public Vec3f toFloat() { - return new Vec3f((float) x, (float) y, (float) z); - } - - public void set(Vec3d arg) { - set(arg.x, arg.y, arg.z); - } - - public void set(double x, double y, double z) { - this.x = x; - this.y = y; - this.z = z; - } - - /** Sets the ith component, 0 <= i < 3 */ - public void set(int i, double val) { - switch (i) { - case 0: x = val; break; - case 1: y = val; break; - case 2: z = val; break; - default: throw new IndexOutOfBoundsException(); - } - } - - /** Gets the ith component, 0 <= i < 3 */ - public double get(int i) { - switch (i) { - case 0: return x; - case 1: return y; - case 2: return z; - default: throw new IndexOutOfBoundsException(); - } - } - - public double x() { return x; } - public double y() { return y; } - public double z() { return z; } - - public void setX(double x) { this.x = x; } - public void setY(double y) { this.y = y; } - public void setZ(double z) { this.z = z; } - - public double dot(Vec3d arg) { - return x * arg.x + y * arg.y + z * arg.z; - } - - public double length() { - return Math.sqrt(lengthSquared()); - } - - public double lengthSquared() { - return this.dot(this); - } - - public void normalize() { - double len = length(); - if (len == 0.0) return; - scale(1.0f / len); - } - - /** Returns this * val; creates new vector */ - public Vec3d times(double val) { - Vec3d tmp = new Vec3d(this); - tmp.scale(val); - return tmp; - } - - /** this = this * val */ - public void scale(double val) { - x *= val; - y *= val; - z *= val; - } - - /** Returns this + arg; creates new vector */ - public Vec3d plus(Vec3d arg) { - Vec3d tmp = new Vec3d(); - tmp.add(this, arg); - return tmp; - } - - /** this = this + b */ - public void add(Vec3d b) { - add(this, b); - } - - /** this = a + b */ - public void add(Vec3d a, Vec3d b) { - x = a.x + b.x; - y = a.y + b.y; - z = a.z + b.z; - } - - /** Returns this + s * arg; creates new vector */ - public Vec3d addScaled(double s, Vec3d arg) { - Vec3d tmp = new Vec3d(); - tmp.addScaled(this, s, arg); - return tmp; - } - - /** this = a + s * b */ - public void addScaled(Vec3d a, double s, Vec3d b) { - x = a.x + s * b.x; - y = a.y + s * b.y; - z = a.z + s * b.z; - } - - /** Returns this - arg; creates new vector */ - public Vec3d minus(Vec3d arg) { - Vec3d tmp = new Vec3d(); - tmp.sub(this, arg); - return tmp; - } - - /** this = this - b */ - public void sub(Vec3d b) { - sub(this, b); - } - - /** this = a - b */ - public void sub(Vec3d a, Vec3d b) { - x = a.x - b.x; - y = a.y - b.y; - z = a.z - b.z; - } - - /** Returns this cross arg; creates new vector */ - public Vec3d cross(Vec3d arg) { - Vec3d tmp = new Vec3d(); - tmp.cross(this, arg); - return tmp; - } - - /** this = a cross b. NOTE: "this" must be a different vector than - both a and b. */ - public void cross(Vec3d a, Vec3d b) { - x = a.y * b.z - a.z * b.y; - y = a.z * b.x - a.x * b.z; - z = a.x * b.y - a.y * b.x; - } - - @Override - public String toString() { - return "(" + x + ", " + y + ", " + z + ")"; - } -} diff --git a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Vec3f.java b/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Vec3f.java deleted file mode 100644 index 513c6e62b3..0000000000 --- a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Vec3f.java +++ /dev/null @@ -1,233 +0,0 @@ -/* - * gleem -- OpenGL Extremely Easy-To-Use Manipulators. - * Copyright (C) 1998-2003 Kenneth B. Russell (kbrussel@alum.mit.edu) - * - * Copying, distribution and use of this software in source and binary - * forms, with or without modification, is permitted provided that the - * following conditions are met: - * - * Distributions of source code must reproduce the copyright notice, - * this list of conditions and the following disclaimer in the source - * code header files; and Distributions of binary code must reproduce - * the copyright notice, this list of conditions and the following - * disclaimer in the documentation, Read me file, license file and/or - * other materials provided with the software distribution. - * - * The names of Sun Microsystems, Inc. ("Sun") and/or the copyright - * holder may not be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS," WITHOUT A WARRANTY OF ANY - * KIND. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND - * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, NON-INTERFERENCE, ACCURACY OF - * INFORMATIONAL CONTENT OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. THE - * COPYRIGHT HOLDER, SUN AND SUN'S LICENSORS SHALL NOT BE LIABLE FOR - * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR - * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL THE - * COPYRIGHT HOLDER, SUN OR SUN'S LICENSORS BE LIABLE FOR ANY LOST - * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, - * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND - * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR - * INABILITY TO USE THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGES. YOU ACKNOWLEDGE THAT THIS SOFTWARE IS NOT - * DESIGNED, LICENSED OR INTENDED FOR USE IN THE DESIGN, CONSTRUCTION, - * OPERATION OR MAINTENANCE OF ANY NUCLEAR FACILITY. THE COPYRIGHT - * HOLDER, SUN AND SUN'S LICENSORS DISCLAIM ANY EXPRESS OR IMPLIED - * WARRANTY OF FITNESS FOR SUCH USES. - */ - -package org.gephi.lib.gleem.linalg; - -/** 3-element single-precision vector */ - -public class Vec3f { - public static final Vec3f X_AXIS = new Vec3f( 1, 0, 0); - public static final Vec3f Y_AXIS = new Vec3f( 0, 1, 0); - public static final Vec3f Z_AXIS = new Vec3f( 0, 0, 1); - public static final Vec3f NEG_X_AXIS = new Vec3f(-1, 0, 0); - public static final Vec3f NEG_Y_AXIS = new Vec3f( 0, -1, 0); - public static final Vec3f NEG_Z_AXIS = new Vec3f( 0, 0, -1); - - private float x; - private float y; - private float z; - - public Vec3f() {} - - public Vec3f(Vec3f arg) { - set(arg); - } - - public Vec3f(float x, float y, float z) { - set(x, y, z); - } - - public Vec3f copy() { - return new Vec3f(this); - } - - /** Convert to double-precision */ - public Vec3d toDouble() { - return new Vec3d(x, y, z); - } - - public void set(Vec3f arg) { - set(arg.x, arg.y, arg.z); - } - - public void set(float x, float y, float z) { - this.x = x; - this.y = y; - this.z = z; - } - - /** Sets the ith component, 0 <= i < 3 */ - public void set(int i, float val) { - switch (i) { - case 0: x = val; break; - case 1: y = val; break; - case 2: z = val; break; - default: throw new IndexOutOfBoundsException(); - } - } - - /** Gets the ith component, 0 <= i < 3 */ - public float get(int i) { - switch (i) { - case 0: return x; - case 1: return y; - case 2: return z; - default: throw new IndexOutOfBoundsException(); - } - } - - public float x() { return x; } - public float y() { return y; } - public float z() { return z; } - - public void setX(float x) { this.x = x; } - public void setY(float y) { this.y = y; } - public void setZ(float z) { this.z = z; } - - public float dot(Vec3f arg) { - return x * arg.x + y * arg.y + z * arg.z; - } - - public float length() { - return (float) Math.sqrt(lengthSquared()); - } - - public float lengthSquared() { - return this.dot(this); - } - - public void normalize() { - float len = length(); - if (len == 0.0f) return; - scale(1.0f / len); - } - - /** Returns this * val; creates new vector */ - public Vec3f times(float val) { - Vec3f tmp = new Vec3f(this); - tmp.scale(val); - return tmp; - } - - /** this = this * val */ - public void scale(float val) { - x *= val; - y *= val; - z *= val; - } - - /** Returns this + arg; creates new vector */ - public Vec3f plus(Vec3f arg) { - Vec3f tmp = new Vec3f(); - tmp.add(this, arg); - return tmp; - } - - /** this = this + b */ - public void add(Vec3f b) { - add(this, b); - } - - /** this = a + b */ - public void add(Vec3f a, Vec3f b) { - x = a.x + b.x; - y = a.y + b.y; - z = a.z + b.z; - } - - /** Returns this + s * arg; creates new vector */ - public Vec3f addScaled(float s, Vec3f arg) { - Vec3f tmp = new Vec3f(); - tmp.addScaled(this, s, arg); - return tmp; - } - - /** this = a + s * b */ - public void addScaled(Vec3f a, float s, Vec3f b) { - x = a.x + s * b.x; - y = a.y + s * b.y; - z = a.z + s * b.z; - } - - /** Returns this - arg; creates new vector */ - public Vec3f minus(Vec3f arg) { - Vec3f tmp = new Vec3f(); - tmp.sub(this, arg); - return tmp; - } - - /** this = this - b */ - public void sub(Vec3f b) { - sub(this, b); - } - - /** this = a - b */ - public void sub(Vec3f a, Vec3f b) { - x = a.x - b.x; - y = a.y - b.y; - z = a.z - b.z; - } - - /** Returns this cross arg; creates new vector */ - public Vec3f cross(Vec3f arg) { - Vec3f tmp = new Vec3f(); - tmp.cross(this, arg); - return tmp; - } - - /** this = a cross b. NOTE: "this" must be a different vector than - both a and b. */ - public void cross(Vec3f a, Vec3f b) { - x = a.y * b.z - a.z * b.y; - y = a.z * b.x - a.x * b.z; - z = a.x * b.y - a.y * b.x; - } - - /** Sets each component of this vector to the product of the - component with the corresponding component of the argument - vector. */ - public void componentMul(Vec3f arg) { - x *= arg.x; - y *= arg.y; - z *= arg.z; - } - - public Vecf toVecf() { - Vecf out = new Vecf(3); - for (int i = 0; i < 3; i++) { - out.set(i, get(i)); - } - return out; - } - - @Override - public String toString() { - return "(" + x + ", " + y + ", " + z + ")"; - } -} diff --git a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Vec4f.java b/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Vec4f.java deleted file mode 100644 index d6df434ca6..0000000000 --- a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Vec4f.java +++ /dev/null @@ -1,217 +0,0 @@ -/* - * gleem -- OpenGL Extremely Easy-To-Use Manipulators. - * Copyright (C) 1998-2003 Kenneth B. Russell (kbrussel@alum.mit.edu) - * - * Copying, distribution and use of this software in source and binary - * forms, with or without modification, is permitted provided that the - * following conditions are met: - * - * Distributions of source code must reproduce the copyright notice, - * this list of conditions and the following disclaimer in the source - * code header files; and Distributions of binary code must reproduce - * the copyright notice, this list of conditions and the following - * disclaimer in the documentation, Read me file, license file and/or - * other materials provided with the software distribution. - * - * The names of Sun Microsystems, Inc. ("Sun") and/or the copyright - * holder may not be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS," WITHOUT A WARRANTY OF ANY - * KIND. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND - * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, NON-INTERFERENCE, ACCURACY OF - * INFORMATIONAL CONTENT OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. THE - * COPYRIGHT HOLDER, SUN AND SUN'S LICENSORS SHALL NOT BE LIABLE FOR - * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR - * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL THE - * COPYRIGHT HOLDER, SUN OR SUN'S LICENSORS BE LIABLE FOR ANY LOST - * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, - * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND - * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR - * INABILITY TO USE THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGES. YOU ACKNOWLEDGE THAT THIS SOFTWARE IS NOT - * DESIGNED, LICENSED OR INTENDED FOR USE IN THE DESIGN, CONSTRUCTION, - * OPERATION OR MAINTENANCE OF ANY NUCLEAR FACILITY. THE COPYRIGHT - * HOLDER, SUN AND SUN'S LICENSORS DISCLAIM ANY EXPRESS OR IMPLIED - * WARRANTY OF FITNESS FOR SUCH USES. - */ - -package org.gephi.lib.gleem.linalg; - -/** 4-element single-precision vector */ - -public class Vec4f { - private float x; - private float y; - private float z; - private float w; - - public Vec4f() {} - - public Vec4f(Vec4f arg) { - set(arg); - } - - public Vec4f(float x, float y, float z, float w) { - set(x, y, z, w); - } - - public Vec4f copy() { - return new Vec4f(this); - } - - public void set(Vec4f arg) { - set(arg.x, arg.y, arg.z, arg.w); - } - - public void set(float x, float y, float z, float w) { - this.x = x; - this.y = y; - this.z = z; - this.w = w; - } - - /** Sets the ith component, 0 <= i < 4 */ - public void set(int i, float val) { - switch (i) { - case 0: x = val; break; - case 1: y = val; break; - case 2: z = val; break; - case 3: w = val; break; - default: throw new IndexOutOfBoundsException(); - } - } - - /** Gets the ith component, 0 <= i < 4 */ - public float get(int i) { - switch (i) { - case 0: return x; - case 1: return y; - case 2: return z; - case 3: return w; - default: throw new IndexOutOfBoundsException(); - } - } - - public float x() { return x; } - public float y() { return y; } - public float z() { return z; } - public float w() { return w; } - - public void setX(float x) { this.x = x; } - public void setY(float y) { this.y = y; } - public void setZ(float z) { this.z = z; } - public void setW(float w) { this.w = w; } - - public float dot(Vec4f arg) { - return x * arg.x + y * arg.y + z * arg.z + w * arg.w; - } - - public float length() { - return (float) Math.sqrt(lengthSquared()); - } - - public float lengthSquared() { - return this.dot(this); - } - - public void normalize() { - float len = length(); - if (len == 0.0f) return; - scale(1.0f / len); - } - - /** Returns this * val; creates new vector */ - public Vec4f times(float val) { - Vec4f tmp = new Vec4f(this); - tmp.scale(val); - return tmp; - } - - /** this = this * val */ - public void scale(float val) { - x *= val; - y *= val; - z *= val; - w *= val; - } - - /** Returns this + arg; creates new vector */ - public Vec4f plus(Vec4f arg) { - Vec4f tmp = new Vec4f(); - tmp.add(this, arg); - return tmp; - } - - /** this = this + b */ - public void add(Vec4f b) { - add(this, b); - } - - /** this = a + b */ - public void add(Vec4f a, Vec4f b) { - x = a.x + b.x; - y = a.y + b.y; - z = a.z + b.z; - w = a.w + b.w; - } - - /** Returns this + s * arg; creates new vector */ - public Vec4f addScaled(float s, Vec4f arg) { - Vec4f tmp = new Vec4f(); - tmp.addScaled(this, s, arg); - return tmp; - } - - /** this = a + s * b */ - public void addScaled(Vec4f a, float s, Vec4f b) { - x = a.x + s * b.x; - y = a.y + s * b.y; - z = a.z + s * b.z; - w = a.w + s * b.w; - } - - /** Returns this - arg; creates new vector */ - public Vec4f minus(Vec4f arg) { - Vec4f tmp = new Vec4f(); - tmp.sub(this, arg); - return tmp; - } - - /** this = this - b */ - public void sub(Vec4f b) { - sub(this, b); - } - - /** this = a - b */ - public void sub(Vec4f a, Vec4f b) { - x = a.x - b.x; - y = a.y - b.y; - z = a.z - b.z; - w = a.w - b.w; - } - - /** Sets each component of this vector to the product of the - component with the corresponding component of the argument - vector. */ - public void componentMul(Vec4f arg) { - x *= arg.x; - y *= arg.y; - z *= arg.z; - w *= arg.w; - } - - public Vecf toVecf() { - Vecf out = new Vecf(4); - for (int i = 0; i < 4; i++) { - out.set(i, get(i)); - } - return out; - } - - @Override - public String toString() { - return "(" + x + ", " + y + ", " + z + ")"; - } -} diff --git a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Vecf.java b/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Vecf.java deleted file mode 100644 index 3c761d3a8d..0000000000 --- a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Vecf.java +++ /dev/null @@ -1,97 +0,0 @@ -/* - * gleem -- OpenGL Extremely Easy-To-Use Manipulators. - * Copyright (C) 1998-2003 Kenneth B. Russell (kbrussel@alum.mit.edu) - * - * Copying, distribution and use of this software in source and binary - * forms, with or without modification, is permitted provided that the - * following conditions are met: - * - * Distributions of source code must reproduce the copyright notice, - * this list of conditions and the following disclaimer in the source - * code header files; and Distributions of binary code must reproduce - * the copyright notice, this list of conditions and the following - * disclaimer in the documentation, Read me file, license file and/or - * other materials provided with the software distribution. - * - * The names of Sun Microsystems, Inc. ("Sun") and/or the copyright - * holder may not be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS," WITHOUT A WARRANTY OF ANY - * KIND. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND - * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, NON-INTERFERENCE, ACCURACY OF - * INFORMATIONAL CONTENT OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. THE - * COPYRIGHT HOLDER, SUN AND SUN'S LICENSORS SHALL NOT BE LIABLE FOR - * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR - * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL THE - * COPYRIGHT HOLDER, SUN OR SUN'S LICENSORS BE LIABLE FOR ANY LOST - * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, - * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND - * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR - * INABILITY TO USE THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGES. YOU ACKNOWLEDGE THAT THIS SOFTWARE IS NOT - * DESIGNED, LICENSED OR INTENDED FOR USE IN THE DESIGN, CONSTRUCTION, - * OPERATION OR MAINTENANCE OF ANY NUCLEAR FACILITY. THE COPYRIGHT - * HOLDER, SUN AND SUN'S LICENSORS DISCLAIM ANY EXPRESS OR IMPLIED - * WARRANTY OF FITNESS FOR SUCH USES. - */ - -package org.gephi.lib.gleem.linalg; - - -/** Arbitrary-length single-precision vector class. Currently very - simple and only supports a few needed operations. */ - -public class Vecf { - private float[] data; - - public Vecf(int n) { - data = new float[n]; - } - - public Vecf(Vecf arg) { - data = new float[arg.data.length]; - System.arraycopy(arg.data, 0, data, 0, data.length); - } - - public int length() { - return data.length; - } - - public float get(int i) { - return data[i]; - } - - public void set(int i, float val) { - data[i] = val; - } - - public Vec2f toVec2f() throws DimensionMismatchException { - if (length() != 2) - throw new DimensionMismatchException(); - Vec2f out = new Vec2f(); - for (int i = 0; i < 2; i++) { - out.set(i, get(i)); - } - return out; - } - - public Vec3f toVec3f() throws DimensionMismatchException { - if (length() != 3) - throw new DimensionMismatchException(); - Vec3f out = new Vec3f(); - for (int i = 0; i < 3; i++) { - out.set(i, get(i)); - } - return out; - } - - public Veci toInt() { - Veci out = new Veci(length()); - for (int i = 0; i < length(); i++) { - out.set(i, (int) get(i)); - } - return out; - } -} diff --git a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Veci.java b/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Veci.java deleted file mode 100644 index d67b185557..0000000000 --- a/modules/Gleem/src/main/java/org/gephi/lib/gleem/linalg/Veci.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * gleem -- OpenGL Extremely Easy-To-Use Manipulators. - * Copyright (C) 1998-2003 Kenneth B. Russell (kbrussel@alum.mit.edu) - * - * Copying, distribution and use of this software in source and binary - * forms, with or without modification, is permitted provided that the - * following conditions are met: - * - * Distributions of source code must reproduce the copyright notice, - * this list of conditions and the following disclaimer in the source - * code header files; and Distributions of binary code must reproduce - * the copyright notice, this list of conditions and the following - * disclaimer in the documentation, Read me file, license file and/or - * other materials provided with the software distribution. - * - * The names of Sun Microsystems, Inc. ("Sun") and/or the copyright - * holder may not be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED "AS IS," WITHOUT A WARRANTY OF ANY - * KIND. ALL EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND - * WARRANTIES, INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE, NON-INTERFERENCE, ACCURACY OF - * INFORMATIONAL CONTENT OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. THE - * COPYRIGHT HOLDER, SUN AND SUN'S LICENSORS SHALL NOT BE LIABLE FOR - * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR - * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL THE - * COPYRIGHT HOLDER, SUN OR SUN'S LICENSORS BE LIABLE FOR ANY LOST - * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, - * CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND - * REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF OR - * INABILITY TO USE THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY - * OF SUCH DAMAGES. YOU ACKNOWLEDGE THAT THIS SOFTWARE IS NOT - * DESIGNED, LICENSED OR INTENDED FOR USE IN THE DESIGN, CONSTRUCTION, - * OPERATION OR MAINTENANCE OF ANY NUCLEAR FACILITY. THE COPYRIGHT - * HOLDER, SUN AND SUN'S LICENSORS DISCLAIM ANY EXPRESS OR IMPLIED - * WARRANTY OF FITNESS FOR SUCH USES. - */ - -package org.gephi.lib.gleem.linalg; - -/** Arbitrary-length integer vector class. Currently very simple and - only supports a few needed operations. */ - -public class Veci { - private int[] data; - - public Veci(int n) { - data = new int[n]; - } - - public Veci(Veci arg) { - data = new int[arg.data.length]; - System.arraycopy(arg.data, 0, data, 0, data.length); - } - - public int length() { - return data.length; - } - - public int get(int i) { - return data[i]; - } - - public void set(int i, int val) { - data[i] = val; - } - - public Vec2f toVec2f() throws DimensionMismatchException { - if (length() != 2) - throw new DimensionMismatchException(); - Vec2f out = new Vec2f(); - for (int i = 0; i < 2; i++) { - out.set(i, get(i)); - } - return out; - } - - public Vec3f toVec3f() throws DimensionMismatchException { - if (length() != 3) - throw new DimensionMismatchException(); - Vec3f out = new Vec3f(); - for (int i = 0; i < 3; i++) { - out.set(i, get(i)); - } - return out; - } - - public Vecf toVecf() { - Vecf out = new Vecf(length()); - for (int i = 0; i < length(); i++) { - out.set(i, get(i)); - } - return out; - } -} diff --git a/modules/Gleem/src/main/nbm/manifest.mf b/modules/Gleem/src/main/nbm/manifest.mf deleted file mode 100644 index b940eaf35b..0000000000 --- a/modules/Gleem/src/main/nbm/manifest.mf +++ /dev/null @@ -1,4 +0,0 @@ -Manifest-Version: 1.0 -AutoUpdate-Essential-Module: true -OpenIDE-Module-Localizing-Bundle: org/gephi/lib/gleem/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file diff --git a/modules/Gleem/src/main/nbm/module.xml b/modules/Gleem/src/main/nbm/module.xml deleted file mode 100644 index 068b0c2177..0000000000 --- a/modules/Gleem/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/Bundle.properties b/modules/Gleem/src/main/resources/org/gephi/lib/gleem/Bundle.properties deleted file mode 100644 index 0b53f2e0f8..0000000000 --- a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/Bundle.properties +++ /dev/null @@ -1,5 +0,0 @@ -OpenIDE-Module-Display-Category=Libraries -OpenIDE-Module-Long-Description=\ - Gleem OpenGL Extremely Easy-to-use Manipulators -OpenIDE-Module-Name=Gleem -OpenIDE-Module-Short-Description=Gleem Geometric Library diff --git a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/Bundle_cs.properties b/modules/Gleem/src/main/resources/org/gephi/lib/gleem/Bundle_cs.properties deleted file mode 100644 index ab3927752b..0000000000 --- a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/Bundle_cs.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-17 20\:28+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=Gleem OpenGL manipul\u00e1tory extr\u00e9mn\u011b jednoduch\u00e9 k pou\u017eit\u00ed - -OpenIDE-Module-Short-Description=Geometrick\u00e1 knihovna Gleem diff --git a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/Bundle_es.properties b/modules/Gleem/src/main/resources/org/gephi/lib/gleem/Bundle_es.properties deleted file mode 100644 index e298ddb7eb..0000000000 --- a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/Bundle_es.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:03+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Manipuladores Gleem OpenGL extremadamente f\u00e1ciles de usar - -OpenIDE-Module-Short-Description=Librer\u00eda de geometr\u00eda Gleem diff --git a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/Bundle_fr.properties b/modules/Gleem/src/main/resources/org/gephi/lib/gleem/Bundle_fr.properties deleted file mode 100644 index fb657b020f..0000000000 --- a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/Bundle_fr.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:03+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Manipulateurs vraiment faciles \u00e0 utiliser Gleem OpenGL - -OpenIDE-Module-Short-Description=Biblioth\u00e8que de g\u00e9om\u00e9trie Gleem diff --git a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/Bundle_ja.properties b/modules/Gleem/src/main/resources/org/gephi/lib/gleem/Bundle_ja.properties deleted file mode 100644 index f1a8e59f51..0000000000 --- a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/Bundle_ja.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-19 05\:50+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=Gleem OpenGL Extremely Easy-to-use Manipulators - -OpenIDE-Module-Short-Description=Gleem\u5e7e\u4f55\u5b66\u30e9\u30a4\u30d6\u30e9\u30ea diff --git a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/Bundle_pt_BR.properties b/modules/Gleem/src/main/resources/org/gephi/lib/gleem/Bundle_pt_BR.properties deleted file mode 100644 index 48f4496b5b..0000000000 --- a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/Bundle_pt_BR.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 17\:06+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Manipuladores Gleem OpenGL extremamente f\u00e1ceis de usar - -OpenIDE-Module-Short-Description=Biblioteca Geom\u00e9trica Gleem diff --git a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/Bundle_ru.properties b/modules/Gleem/src/main/resources/org/gephi/lib/gleem/Bundle_ru.properties deleted file mode 100644 index 7ec53af124..0000000000 --- a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/Bundle_ru.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-11-12 20\:38+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=Gleem OpenGL Extremely Easy-to-use Manipulators - -OpenIDE-Module-Short-Description=Gleem Geometric Library diff --git a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/Bundle_zh_CN.properties b/modules/Gleem/src/main/resources/org/gephi/lib/gleem/Bundle_zh_CN.properties deleted file mode 100644 index af351c2313..0000000000 --- a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/Bundle_zh_CN.properties +++ /dev/null @@ -1,10 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:12+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=Gleem OpenGL\u4fbf\u5229\u64cd\u7eb5\u5668 - -OpenIDE-Module-Short-Description=Gleem\u51e0\u4f55\u7a0b\u5e8f\u5e93 diff --git a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/cs.po b/modules/Gleem/src/main/resources/org/gephi/lib/gleem/cs.po deleted file mode 100644 index e88d1caa77..0000000000 --- a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/cs.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-17 20:28+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Gleem OpenGL manipulΓ‘tory extrΓ©mnΔ› jednoduchΓ© k pouΕΎitΓ­" - -msgid "OpenIDE-Module-Short-Description" -msgstr "GeometrickΓ‘ knihovna Gleem" diff --git a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/es.po b/modules/Gleem/src/main/resources/org/gephi/lib/gleem/es.po deleted file mode 100644 index a2f0311fc4..0000000000 --- a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/es.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:03+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Manipuladores Gleem OpenGL extremadamente fΓ‘ciles de usar" - -msgid "OpenIDE-Module-Short-Description" -msgstr "LibrerΓ­a de geometrΓ­a Gleem" diff --git a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/fr.po b/modules/Gleem/src/main/resources/org/gephi/lib/gleem/fr.po deleted file mode 100644 index 5218936e1d..0000000000 --- a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/fr.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:03+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Manipulateurs vraiment faciles Γ  utiliser Gleem OpenGL" - -msgid "OpenIDE-Module-Short-Description" -msgstr "BibliothΓ¨que de gΓ©omΓ©trie Gleem" diff --git a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/ja.po b/modules/Gleem/src/main/resources/org/gephi/lib/gleem/ja.po deleted file mode 100644 index 1da9d4c2d4..0000000000 --- a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-19 05:50+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Gleem OpenGL Extremely Easy-to-use Manipulators" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Gleem幾何学ラむブラγƒͺ" diff --git a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/linalg/package.html b/modules/Gleem/src/main/resources/org/gephi/lib/gleem/linalg/package.html deleted file mode 100644 index bc1e60f599..0000000000 --- a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/linalg/package.html +++ /dev/null @@ -1,13 +0,0 @@ - - - - -Linear algebra and classes implementing basic 3D operations. - -

    - -See the gleem -home page for more information. - - - diff --git a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/org-gephi-lib-gleem.pot b/modules/Gleem/src/main/resources/org/gephi/lib/gleem/org-gephi-lib-gleem.pot deleted file mode 100644 index e334307165..0000000000 --- a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/org-gephi-lib-gleem.pot +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Gleem OpenGL Extremely Easy-to-use Manipulators" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Gleem Geometric Library" diff --git a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/pt_BR.po b/modules/Gleem/src/main/resources/org/gephi/lib/gleem/pt_BR.po deleted file mode 100644 index b9313f9c35..0000000000 --- a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/pt_BR.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 17:06+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Manipuladores Gleem OpenGL extremamente fΓ‘ceis de usar" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Biblioteca GeomΓ©trica Gleem" diff --git a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/ru.po b/modules/Gleem/src/main/resources/org/gephi/lib/gleem/ru.po deleted file mode 100644 index 91306954e5..0000000000 --- a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/ru.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-11-12 20:38+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Gleem OpenGL Extremely Easy-to-use Manipulators" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Gleem Geometric Library" diff --git a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/zh_CN.po b/modules/Gleem/src/main/resources/org/gephi/lib/gleem/zh_CN.po deleted file mode 100644 index 449078c450..0000000000 --- a/modules/Gleem/src/main/resources/org/gephi/lib/gleem/zh_CN.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:12+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Gleem OpenGLδΎΏεˆ©ζ“ηΊ΅ε™¨" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Gleem几何程序库" diff --git a/modules/GraphAPI/pom.xml b/modules/GraphAPI/pom.xml index cb4de1b248..3e675668ca 100644 --- a/modules/GraphAPI/pom.xml +++ b/modules/GraphAPI/pom.xml @@ -4,40 +4,25 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi graph-api - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm GraphAPI - - - - gephi-snapshots - Gephi 3rd Party - http://nexus.gephi.org/nexus/content/repositories/snapshots/ - - - ${project.groupId} project-api - - ${project.groupId} - graphstore-api - 0.1-SNAPSHOT - ${project.groupId} graphstore - 0.1-SNAPSHOT org.netbeans.api @@ -47,19 +32,39 @@ + - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin org.gephi.graph.spi org.gephi.graph.api - org.gephi.attribute.api - org.gephi.attribute.spi - org.gephi.attribute.time + org.gephi.graph.api.types + org.gephi.graph.impl + it.unimi.dsi.fastutil.* + + + + org.apache.maven.plugins + maven-jar-plugin + + + + test-jar + + + + + **/GraphGenerator* + + + + + diff --git a/modules/GraphAPI/src/main/java/org/gephi/graph/GraphControllerImpl.java b/modules/GraphAPI/src/main/java/org/gephi/graph/GraphControllerImpl.java index d0e1dceaf3..f67a5f852c 100644 --- a/modules/GraphAPI/src/main/java/org/gephi/graph/GraphControllerImpl.java +++ b/modules/GraphAPI/src/main/java/org/gephi/graph/GraphControllerImpl.java @@ -39,56 +39,51 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.graph; +import org.gephi.graph.api.Configuration; import org.gephi.graph.api.GraphController; -import org.gephi.graph.store.GraphModelImpl; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.TimeRepresentation; import org.gephi.project.api.ProjectController; import org.gephi.project.api.Workspace; import org.openide.util.Lookup; import org.openide.util.lookup.ServiceProvider; /** - * * @author mbastian */ @ServiceProvider(service = GraphController.class) public class GraphControllerImpl implements GraphController { @Override - public synchronized GraphModelImpl getGraphModel() { + public GraphModel getGraphModel() { Workspace currentWorkspace = Lookup.getDefault().lookup(ProjectController.class).getCurrentWorkspace(); if (currentWorkspace == null) { return null; } - GraphModelImpl model = currentWorkspace.getLookup().lookup(GraphModelImpl.class); - if (model == null) { - model = newGraphModel(currentWorkspace); - } - return model; + return getGraphModel(currentWorkspace); } @Override - public synchronized GraphModelImpl getGraphModel(Workspace workspace) { - GraphModelImpl model = workspace.getLookup().lookup(GraphModelImpl.class); + public synchronized GraphModel getGraphModel(Workspace workspace) { + GraphModel model = workspace.getLookup().lookup(GraphModel.class); if (model == null) { model = newGraphModel(workspace); } return model; } - @Override - public GraphModelImpl getAttributeModel() { - return getGraphModel(); - } - - @Override - public GraphModelImpl getAttributeModel(Workspace workspace) { - return getGraphModel(workspace); - } - - private GraphModelImpl newGraphModel(Workspace workspace) { - GraphModelImpl graphModelImpl = new GraphModelImpl(); + private GraphModel newGraphModel(Workspace workspace) { + Configuration config = workspace.getLookup().lookup(Configuration.class); + if (config == null) { + config = getDefaultConfigurationBuilder().build(); + } else { + // Clean config as we don't need it after creating the graph model + workspace.remove(config); + } + GraphModel graphModelImpl = GraphModel.Factory.newInstance(config); workspace.add(graphModelImpl); return graphModelImpl; } diff --git a/modules/GraphAPI/src/main/java/org/gephi/graph/GraphPersistenceProvider.java b/modules/GraphAPI/src/main/java/org/gephi/graph/GraphPersistenceProvider.java index b50fb6c2c5..38d4d1f2f6 100644 --- a/modules/GraphAPI/src/main/java/org/gephi/graph/GraphPersistenceProvider.java +++ b/modules/GraphAPI/src/main/java/org/gephi/graph/GraphPersistenceProvider.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.graph; import java.io.DataInputStream; @@ -46,26 +47,23 @@ Development and Distribution License("CDDL") (collectively, the import java.io.IOException; import java.util.logging.Level; import java.util.logging.Logger; -import org.gephi.graph.store.GraphModelImpl; -import org.gephi.graph.store.Serialization; +import org.gephi.graph.api.GraphModel; import org.gephi.project.api.Workspace; import org.gephi.project.spi.WorkspaceBytesPersistenceProvider; +import org.gephi.project.spi.WorkspacePersistenceProvider; import org.openide.util.lookup.ServiceProvider; -/** - * - * @author mbastian - */ -@ServiceProvider(service = WorkspaceBytesPersistenceProvider.class) +@ServiceProvider(service = WorkspacePersistenceProvider.class, position = 100) public class GraphPersistenceProvider implements WorkspaceBytesPersistenceProvider { + private static final int GRAPHSTORE_SERIALIZATION_GRAPHMODEL_CONFIG_ID = 205; + @Override public void writeBytes(DataOutputStream stream, Workspace workspace) { - GraphModelImpl model = workspace.getLookup().lookup(GraphModelImpl.class); + GraphModel model = workspace.getLookup().lookup(GraphModel.class); if (model != null) { try { - Serialization serialization = new Serialization(model.getStore()); - serialization.serializeGraphStore(stream); + GraphModel.Serialization.write(stream, model); } catch (IOException ex) { Logger.getLogger("").log(Level.SEVERE, "", ex.getCause()); } @@ -74,14 +72,30 @@ public void writeBytes(DataOutputStream stream, Workspace workspace) { @Override public void readBytes(DataInputStream stream, Workspace workspace) { - GraphModelImpl model = workspace.getLookup().lookup(GraphModelImpl.class); - if (model != null) { - try { - Serialization serialization = new Serialization(model.getStore()); - serialization.deserializeGraphStore(stream); - } catch (Exception ex) { - Logger.getLogger("").log(Level.SEVERE, "", ex.getCause()); + GraphModel model = workspace.getLookup().lookup(GraphModel.class); + try { + //Detect if the serialized graphstore declares its own version: + stream.mark(1); + int firstFieldType = stream.readUnsignedByte(); + stream.reset(); + + if (firstFieldType == GRAPHSTORE_SERIALIZATION_GRAPHMODEL_CONFIG_ID) { + //Old graphstore, from Gephi 0.9.0 + model = GraphModel.Serialization.readWithoutVersionHeader(stream, + 0.0f /* no version, first was 0.4*/);//Previous to version header existing at all + + //TODO: Also properly handle the case when model isn't null + } else { + if (model != null) { + model = GraphModel.Serialization.read(stream, model); + } else { + model = GraphModel.Serialization.read(stream); + } } + + workspace.add(model); + } catch (IOException ex) { + throw new RuntimeException(ex); } } diff --git a/modules/GraphAPI/src/main/java/org/gephi/graph/api/GraphController.java b/modules/GraphAPI/src/main/java/org/gephi/graph/api/GraphController.java index 258d0588e2..47c4a921e4 100644 --- a/modules/GraphAPI/src/main/java/org/gephi/graph/api/GraphController.java +++ b/modules/GraphAPI/src/main/java/org/gephi/graph/api/GraphController.java @@ -39,9 +39,9 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.graph.api; -import org.gephi.attribute.api.AttributeModel; import org.gephi.project.api.Workspace; /** @@ -55,55 +55,30 @@ Development and Distribution License("CDDL") (collectively, the public interface GraphController { /** - * Returns the graph model for the current workspace, or - * null if project is empty. + * Returns the graph model for the current workspace, or null + * if project is empty. * * @return the current graph model */ - public GraphModel getGraphModel(); + GraphModel getGraphModel(); /** - * Returns the graph model for the given - * workspace. + * Returns the graph model for the given workspace. * - * @param workspace the workspace that graph modl is to be returned + * @param workspace the workspace that graph model is to be returned * @return the workspace's graph model */ - public GraphModel getGraphModel(Workspace workspace); - - /** - * Returns the model for the current - * Workspace. May return - * null if there currently no - * Worksapce active. - *

    - * The controller maintains the current project status and is responsible of - * maintaining one - * AttributeModel instance per - * Workspace. Hence, the model can also be accessed by using - * the following code: - *

    -     * Workspace.getLookup().get(AttributeModel.class);
    -     * 
    - * - * @return the currently active model - */ - public AttributeModel getAttributeModel(); + GraphModel getGraphModel(Workspace workspace); /** - * Returns the model for the given - * Workspace. + * Returns a new configuration builder with default values. *

    - * The controller maintains the current project status and is responsible of - * maintaining one - * AttributeModel instance per - * Workspace. Hence, the model can also be accessed by using - * the following code: - *

    -     * Workspace.getLookup().get(AttributeModel.class);
    -     * 
    + * It's recommended to use this method to create a new configuration builder as it makes sure + * it has the default values and settings. * - * @return the attribute model for workspace. + * @return a new configuration builder with default values */ - public AttributeModel getAttributeModel(Workspace workspace); + default Configuration.Builder getDefaultConfigurationBuilder() { + return Configuration.builder().timeRepresentation(TimeRepresentation.INTERVAL); + } } diff --git a/modules/GraphAPI/src/main/nbm/manifest.mf b/modules/GraphAPI/src/main/nbm/manifest.mf index 1c6a57c6bc..631bbf3d3f 100644 --- a/modules/GraphAPI/src/main/nbm/manifest.mf +++ b/modules/GraphAPI/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 OpenIDE-Module-Localizing-Bundle: org/gephi/graph/api/Bundle.properties AutoUpdate-Essential-Module: true -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi Core +OpenIDE-Module-Name: Graph API diff --git a/modules/GraphAPI/src/main/nbm/module.xml b/modules/GraphAPI/src/main/nbm/module.xml deleted file mode 100644 index 3e79cb4327..0000000000 --- a/modules/GraphAPI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle.properties b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle.properties index 4c6d138d17..f7c03f8c51 100644 --- a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle.properties +++ b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle.properties @@ -1,5 +1,2 @@ -OpenIDE-Module-Display-Category=Gephi Core -OpenIDE-Module-Long-Description=\ - API for accessing the graph -OpenIDE-Module-Name=Graph API +OpenIDE-Module-Long-Description=API for accessing the graph OpenIDE-Module-Short-Description=API for accessing the graph diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_ar.properties b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_ca.properties b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_ca.properties new file mode 100644 index 0000000000..f5c30e819e --- /dev/null +++ b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_ca.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API for accessing the graph +OpenIDE-Module-Short-Description=API for accessing the graph diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_cs.properties b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_cs.properties index ea612b8115..0594011e21 100644 --- a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_cs.properties +++ b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_cs.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-17 20\:27+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=API pro p\u0159\u00edstup ke grafu - -OpenIDE-Module-Short-Description=API pro p\u0159\u00edstup ke grafu +OpenIDE-Module-Long-Description=API pro p\u0159νstup ke grafu +OpenIDE-Module-Short-Description=API pro p\u0159νstup ke grafu diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_de.properties b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_de.properties new file mode 100644 index 0000000000..867a8b3eff --- /dev/null +++ b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_de.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API zum Zugriff auf den Graph +OpenIDE-Module-Short-Description=API zum Zugriff auf den Graph diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_es.properties b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_es.properties index 26edc9c482..87e60bb635 100644 --- a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_es.properties +++ b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_es.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:03+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=API para acceder al grafo - -OpenIDE-Module-Short-Description=API para acceder al grafo +OpenIDE-Module-Long-Description=API para acceder al grafo +OpenIDE-Module-Short-Description=API para acceder al grafo diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_fr.properties b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_fr.properties index 4901fc33f8..04712ebb70 100644 --- a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_fr.properties +++ b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_fr.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:03+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API d'acc\u00e8s au graphe - -OpenIDE-Module-Short-Description=API d'acc\u00e8s au graphe +OpenIDE-Module-Long-Description=API d'accθs au graphe +OpenIDE-Module-Short-Description=API d'accθs au graphe diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_he.properties b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_he.properties new file mode 100644 index 0000000000..f5c30e819e --- /dev/null +++ b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_he.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API for accessing the graph +OpenIDE-Module-Short-Description=API for accessing the graph diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_hu.properties b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_hu.properties new file mode 100644 index 0000000000..af6748e5e2 --- /dev/null +++ b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_hu.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Short-Description=API a grafikon el\u00E9r\u00E9s\u00E9hez +OpenIDE-Module-Long-Description=API a grafikon el\u00E9r\u00E9s\u00E9hez diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_it.properties b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_it.properties new file mode 100644 index 0000000000..f5c30e819e --- /dev/null +++ b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_it.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API for accessing the graph +OpenIDE-Module-Short-Description=API for accessing the graph diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_ja.properties b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_ja.properties index 731e94440b..a4bf50d42c 100644 --- a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_ja.properties +++ b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_ja.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-18 05\:38+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u30b0\u30e9\u30d5\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306eAPI - -OpenIDE-Module-Short-Description=\u30b0\u30e9\u30d5\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306eAPI +OpenIDE-Module-Long-Description=\u30b0\u30e9\u30d5\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306eAPI +OpenIDE-Module-Short-Description=\u30b0\u30e9\u30d5\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u305f\u3081\u306eAPI diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_ko.properties b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_ko.properties new file mode 100644 index 0000000000..637168e4af --- /dev/null +++ b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_ko.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Long-Description=\uADF8\uB798\uD504\uC5D0 \uC811\uADFC\uD558\uB294 API +OpenIDE-Module-Short-Description=\uADF8\uB798\uD504\uC5D0 \uC811\uADFC\uD558\uB294 API diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_nl.properties b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_nl.properties new file mode 100644 index 0000000000..f5c30e819e --- /dev/null +++ b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_nl.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API for accessing the graph +OpenIDE-Module-Short-Description=API for accessing the graph diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_pt_BR.properties b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_pt_BR.properties index ce3e985634..ccc09adbd2 100644 --- a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_pt_BR.properties +++ b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_pt_BR.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 17\:04+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API de acesso a grafos - -OpenIDE-Module-Short-Description=API de acesso a grafos +OpenIDE-Module-Long-Description=API de acesso a grafos +OpenIDE-Module-Short-Description=API de acesso a grafos diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_ro.properties b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_ro.properties new file mode 100644 index 0000000000..3b6f5eb0ed --- /dev/null +++ b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_ro.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Long-Description=API pentru accesarea grafului +OpenIDE-Module-Short-Description=API pentru accesarea grafului diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_ru.properties b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_ru.properties index ef77a738b4..f5c30e819e 100644 --- a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_ru.properties +++ b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_ru.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-19 05\:24+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - OpenIDE-Module-Long-Description=API for accessing the graph - OpenIDE-Module-Short-Description=API for accessing the graph diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_th.properties b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_tr.properties b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_tr.properties new file mode 100644 index 0000000000..f5c30e819e --- /dev/null +++ b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_tr.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API for accessing the graph +OpenIDE-Module-Short-Description=API for accessing the graph diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_zh_CN.properties b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_zh_CN.properties index e0b4b81af5..3201dc9ad9 100644 --- a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_zh_CN.properties +++ b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_zh_CN.properties @@ -1,10 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:12+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u7528\u4e8e\u8bbf\u95ee\u56fe\u5f62\u7684\u5e94\u7528\u7a0b\u5e8f\u754c\u9762 - -OpenIDE-Module-Short-Description=\u7528\u4e8e\u8bbf\u95ee\u56fe\u5f62\u7684\u5e94\u7528\u7a0b\u5e8f\u754c\u9762 +OpenIDE-Module-Long-Description=\u7528\u4e8e\u8bbf\u95ee\u56fe\u5f62\u7684\u5e94\u7528\u7a0b\u5e8f\u754c\u9762 +OpenIDE-Module-Short-Description=\u7528\u4e8e\u8bbf\u95ee\u56fe\u5f62\u7684\u5e94\u7528\u7a0b\u5e8f\u754c\u9762 diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_zh_TW.properties b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_zh_TW.properties new file mode 100644 index 0000000000..f5c30e819e --- /dev/null +++ b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/Bundle_zh_TW.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API for accessing the graph +OpenIDE-Module-Short-Description=API for accessing the graph diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/cs.po b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/cs.po deleted file mode 100644 index 751741cf02..0000000000 --- a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/cs.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-17 20:27+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API pro pΕ™Γ­stup ke grafu" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API pro pΕ™Γ­stup ke grafu" diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/es.po b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/es.po deleted file mode 100644 index 1d85797fd5..0000000000 --- a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/es.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:03+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API para acceder al grafo" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API para acceder al grafo" diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/fr.po b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/fr.po deleted file mode 100644 index 99ca6d62da..0000000000 --- a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/fr.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:03+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API d'accΓ¨s au graphe" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API d'accΓ¨s au graphe" diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/ja.po b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/ja.po deleted file mode 100644 index df45833b24..0000000000 --- a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-18 05:38+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "γ‚°γƒ©γƒ•γ«γ‚’γ‚―γ‚»γ‚Ήγ™γ‚‹γŸγ‚γAPI" - -msgid "OpenIDE-Module-Short-Description" -msgstr "γ‚°γƒ©γƒ•γ«γ‚’γ‚―γ‚»γ‚Ήγ™γ‚‹γŸγ‚γAPI" diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/org-gephi-graph-api.pot b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/org-gephi-graph-api.pot deleted file mode 100644 index e150a25f3d..0000000000 --- a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/org-gephi-graph-api.pot +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API for accessing the graph" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API for accessing the graph" diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/package.html b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/package.html index fedda5b60a..466b3c9527 100644 --- a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/package.html +++ b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/package.html @@ -1,7 +1,12 @@ - + - - General API that defines the graph structure. + + org.gephi.graph.api + + +

    + General API that defines the graph structure. +

    All graphs in Gephi are defined and stored with the Graph API. Graphs can be read or written from its interface. diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/pt_BR.po b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/pt_BR.po deleted file mode 100644 index 872b2b442b..0000000000 --- a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/pt_BR.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 17:04+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API de acesso a grafos" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API de acesso a grafos" diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/ru.po b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/ru.po deleted file mode 100644 index a862bc5a0c..0000000000 --- a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/ru.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-19 05:24+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API for accessing the graph" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API for accessing the graph" diff --git a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/zh_CN.po b/modules/GraphAPI/src/main/resources/org/gephi/graph/api/zh_CN.po deleted file mode 100644 index 48126cab70..0000000000 --- a/modules/GraphAPI/src/main/resources/org/gephi/graph/api/zh_CN.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:12+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "η”¨δΊŽθΏι—ε›Ύε½’ηš„εΊ”η”¨η¨‹εΊη•Œι’" - -msgid "OpenIDE-Module-Short-Description" -msgstr "η”¨δΊŽθΏι—ε›Ύε½’ηš„εΊ”η”¨η¨‹εΊη•Œι’" diff --git a/modules/GraphAPI/src/main/resources/overview.html b/modules/GraphAPI/src/main/resources/overview.html index 04b9218094..b6346b551c 100644 --- a/modules/GraphAPI/src/main/resources/overview.html +++ b/modules/GraphAPI/src/main/resources/overview.html @@ -1,61 +1,17 @@ - + + + Graph API + - General API that defines the graph structure.

    - API is providing a complete graph data structure that has the following - features: -

    • Directed, Undirected and Mixed graphs support
    • -
    • Easy iterable structure
    • -
    • Thread-safe
    • -
    • Hierarchical graphs, graphs within graphs support
    • -
    • Automatic meta-edges calculation
    • -
    • Subscrive to graph events
    • -
    • Multi-view, host sub graphs
    -

    -

    - The Graph interface has classical features needed for graph - algorithms and is simplifying accesses by returning NodeIterable and - EdgeIterable. The internal data model is flexible with the - type of graph (directed, undirected or mixed) and allows to get any type - of graph regardless to its nature. For instance its totally possible to - get an undirected graph, even if all edges are directed and the contrary. - No convert operations has to be performed because Graph - interfaces are only accessors. All Graph interfaces - (DirectedGraph, UndirectedGraph, - HierarchicalGraph, ...) can ge get from the graph model. - Therefore on the client side, GraphModel is the only object - to keep in memory. For instance to iterate over nodes, you first ask for a - new Graph object to the model and then call getNodes(). -

    -

    The structure is securized by a read-write lock. That means multiple - threads can read the graph at the same moment, but writing is exclusive. If - a thread is currently updating the graph, readers have to wait. Most of the - time the locking will be transparent but it can also be controlled for more - advanced operations.

    -

    This graph structure API differs slightly from others about hierarchical - graphs and propose an efficient automatic meta-edges calculation. The basic - idea is that the hierarchy defines a tree of nodes and a marker for each node - to flatten the representation. A marked node cannot have any ancestor or - descendants be marked as well. When a node is unmarked and his children are - marked we call this expand. The contrary operation is retract. - The expand and retract operations are available in the API, and let users - navigate in multilevels with ease. Therefore group of nodes is unified - in the model, and represents a node that has children in the hierarchy. When - a node is not a leaf, it is called a meta-node. In addition, users can access - meta-edges that comes from the current expand/retract positionning. Meta-edges - are edges that connects group of nodes according to edges between nodes. - If computed manually, that would require costly procedure. The hierarchical - graph support currently has only a single limitation, a node can only have - one parent. -

    -

    - The multi-view support allows to define views on the graph and thus create - sub-graphs. The API proposes, for a GraphModel to have several - GraphView on the same nodes and edges. One can get graphs - exactly in the same way on sub-graphs than on graphs, and therefore execute - the same operations. -

    - + General API that defines the graph structure. +

    +

    + API is providing a complete graph data structure implemented by + the GraphStore library which Gephi depends on. Documentation + about GraphStore can be found on GitHub. +

    + diff --git a/modules/GraphAPI/src/test/java/org/gephi/graph/GraphControllerImplTest.java b/modules/GraphAPI/src/test/java/org/gephi/graph/GraphControllerImplTest.java new file mode 100644 index 0000000000..462f45d8b5 --- /dev/null +++ b/modules/GraphAPI/src/test/java/org/gephi/graph/GraphControllerImplTest.java @@ -0,0 +1,52 @@ +package org.gephi.graph; + +import org.gephi.graph.api.Configuration; +import org.gephi.graph.api.GraphModel; +import org.gephi.project.api.Project; +import org.gephi.project.api.ProjectController; +import org.gephi.project.api.Workspace; +import org.junit.Assert; +import org.junit.Test; +import org.openide.util.Lookup; + +public class GraphControllerImplTest { + + @Test + public void testDefaultConfiguration() { + GraphControllerImpl graphController = new GraphControllerImpl(); + Configuration defaultConfiguration = graphController.getDefaultConfigurationBuilder().build(); + + ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); + Project project = pc.newProject(); + Workspace workspace = pc.newWorkspace(project); + + GraphModel gm = graphController.getGraphModel(workspace); + Assert.assertEquals(gm.getConfiguration(), defaultConfiguration); + } + + @Test + public void testWithoutConfiguration() { + Configuration configuration = Configuration.builder().nodeIdType(Long.class).build(); + + ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); + Project project = pc.newProject(); + Workspace workspace = pc.newWorkspace(project); + + GraphControllerImpl graphController = new GraphControllerImpl(); + GraphModel gm = graphController.getGraphModel(workspace); + Assert.assertNotEquals(gm.getConfiguration(), configuration); + } + + @Test + public void testWithConfiguration() { + GraphControllerImpl graphController = new GraphControllerImpl(); + Configuration configuration = graphController.getDefaultConfigurationBuilder().nodeIdType(Long.class).build(); + + ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); + Project project = pc.newProject(); + Workspace workspace = pc.newWorkspace(project, configuration); + + GraphModel gm = graphController.getGraphModel(workspace); + Assert.assertEquals(gm.getConfiguration(), configuration); + } +} diff --git a/modules/GraphAPI/src/test/java/org/gephi/graph/GraphGenerator.java b/modules/GraphAPI/src/test/java/org/gephi/graph/GraphGenerator.java new file mode 100644 index 0000000000..83b2929b1e --- /dev/null +++ b/modules/GraphAPI/src/test/java/org/gephi/graph/GraphGenerator.java @@ -0,0 +1,359 @@ +package org.gephi.graph; + +import java.util.Random; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Configuration; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Interval; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.TimeFormat; +import org.gephi.graph.api.types.IntervalDoubleMap; +import org.gephi.graph.api.types.IntervalSet; +import org.gephi.graph.api.types.TimestampDoubleMap; +import org.gephi.graph.api.types.TimestampSet; +import org.gephi.project.api.Workspace; +import org.gephi.project.impl.WorkspaceImpl; +import org.openide.util.Lookup; + +public class GraphGenerator { + + public static final String INT_COLUMN = "age"; + public static final String DOUBLE_COLUMN = "value"; + public static final String FLOAT_ARRAY_COLUMN = "values"; + public static final String STRING_ARRAY_COLUMN = "array"; + public static final String STRING_COLUMN = "country"; + public static final String TIMESTAMP_SET_COLUMN = "events"; + public static final String INTERVAL_SET_COLUMN = "events"; + public static final String TIMESTAMP_DOUBLE_COLUMN = "price"; + public static final String INTERVAL_DOUBLE_COLUMN = "price"; + public static final String FIRST_NODE = "1"; + public static final String SECOND_NODE = "2"; + public static final String THIRD_NODE = "3"; + public static final String FIRST_EDGE = "1"; + public static final String SECOND_EDGE = "2"; + public static final String[] STRING_COLUMN_VALUES = new String[] {"France", "Germany"}; + public static final float[][] FLOAT_ARRAY_COLUMN_VALUES = new float[][] {{1f, 2f}, {4f, 3f}}; + public static final int INT_COLUMN_MIN_VALUE = 10; + public static final double[][] TIMESTAMP_DOUBLE_COLUMN_VALUES = new double[][] {{3.0}, {6.0}}; + public static final double[] TIMESTAMP_SET_VALUES = new double[] {3.0, 6.0}; + public static final double[][] INTERVAL_SET_VALUES = new double[][] {{2000.0, 2003.0}, {2002.0, 2005.0}}; + public static final String[][] STRING_ARRAY_COLUMN_VALUES = new String[][] {{"foo", "bar"}, {"foo"}}; + + private final GraphModel graphModel; + private Workspace workspace; + + private GraphGenerator() { + this(null, null); + } + + private GraphGenerator(final Workspace workspace, final Configuration config) { + GraphModel model = null; + if (workspace != null) { + this.workspace = workspace; + model = workspace.getLookup().lookup(GraphModel.class); + } + GraphController controller = Lookup.getDefault().lookup(GraphController.class); + if (model == null) { + this.graphModel = GraphModel.Factory.newInstance(config == null ? controller.getDefaultConfigurationBuilder().build() : config); + if (this.workspace != null) { + this.workspace.add(this.graphModel); + } + } else if (config != null && !model.getConfiguration().equals(config)) { + throw new RuntimeException("GraphModel configuration differs between the passed configuration and the existing one"); + } else { + this.graphModel = model; + } + if (workspace == null) { + this.workspace = new WorkspaceImpl(null, 0, graphModel); + } + } + + public static GraphGenerator build() { + return new GraphGenerator(); + } + + public static GraphGenerator build(final Configuration config) { + return new GraphGenerator(null, config); + } + + public static GraphGenerator build(final Workspace workspace) { + return new GraphGenerator(workspace, null); + } + + public static GraphGenerator build(final Workspace workspace, final Configuration configuration) { + return new GraphGenerator(workspace, configuration); + } + + public GraphGenerator withTimeFormat(TimeFormat timeFormat) { + graphModel.setTimeFormat(timeFormat); + return this; + } + + public GraphGenerator generateTinyGraph() { + Node n1 = graphModel.factory().newNode(FIRST_NODE); + Node n2 = graphModel.factory().newNode(SECOND_NODE); + Edge e = graphModel.factory().newEdge(FIRST_EDGE, n1, n2, 0, 1.0, true); + graphModel.getDirectedGraph().addNode(n1); + graphModel.getDirectedGraph().addNode(n2); + graphModel.getDirectedGraph().addEdge(e); + return this; + } + + public GraphGenerator generateTinyGraphWithPosition() { + Node n1 = graphModel.factory().newNode(FIRST_NODE); + n1.setX(2.5f); + n1.setY(4.7f); + Node n2 = graphModel.factory().newNode(SECOND_NODE); + n2.setX(-3.3f); + n2.setY(-5.4f); + Edge e = graphModel.factory().newEdge(FIRST_EDGE, n1, n2, 0, 1.0, true); + graphModel.getDirectedGraph().addNode(n1); + graphModel.getDirectedGraph().addNode(n2); + graphModel.getDirectedGraph().addEdge(e); + return this; + } + + public GraphGenerator generateTinyUndirectedGraph() { + Node n1 = graphModel.factory().newNode(FIRST_NODE); + Node n2 = graphModel.factory().newNode(SECOND_NODE); + Edge e = graphModel.factory().newEdge(FIRST_EDGE, n1, n2, 0, 1.0, false); + graphModel.getDirectedGraph().addNode(n1); + graphModel.getDirectedGraph().addNode(n2); + graphModel.getDirectedGraph().addEdge(e); + return this; + } + + public GraphGenerator generateTinyMixedGraph() { + Node n1 = graphModel.factory().newNode(FIRST_NODE); + Node n2 = graphModel.factory().newNode(SECOND_NODE); + Node n3 = graphModel.factory().newNode(THIRD_NODE); + Edge e1 = graphModel.factory().newEdge(FIRST_EDGE, n1, n2, 0, 1.0, false); + Edge e2 = graphModel.factory().newEdge(SECOND_EDGE, n1, n3, 0, 1.0, true); + graphModel.getGraph().addNode(n1); + graphModel.getGraph().addNode(n2); + graphModel.getGraph().addNode(n3); + graphModel.getGraph().addEdge(e1); + graphModel.getGraph().addEdge(e2); + return this; + } + + public GraphGenerator addNodeLabels() { + for (Node n : graphModel.getGraph().getNodes()) { + n.setLabel(n.getId().toString()); + } + return this; + } + + public GraphGenerator addEdgeLabels() { + for (Edge e : graphModel.getGraph().getEdges()) { + e.setLabel(e.getId().toString()); + } + return this; + } + + public GraphGenerator generateTinyMultiGraph() { + Node n1 = graphModel.factory().newNode(FIRST_NODE); + Node n2 = graphModel.factory().newNode(SECOND_NODE); + Edge e1 = graphModel.factory().newEdge(FIRST_EDGE, n1, n2, 0, 1.0, true); + Edge e2 = graphModel.factory().newEdge(SECOND_EDGE, n1, n2, 1, 1.0, true); + graphModel.getDirectedGraph().addNode(n1); + graphModel.getDirectedGraph().addNode(n2); + graphModel.getDirectedGraph().addEdge(e1); + graphModel.getDirectedGraph().addEdge(e2); + return this; + } + + public GraphGenerator generateTinyDynamicTimestampGraph() { + Node n1 = graphModel.factory().newNode(FIRST_NODE); + Node n2 = graphModel.factory().newNode(SECOND_NODE); + Edge e1 = graphModel.factory().newEdge(FIRST_EDGE, n1, n2, 0, 1.0, true); + n1.addTimestamp(1.0); + n2.addTimestamp(1.0); + e1.addTimestamp(1.0); + e1.setWeight(1.0, 1.0); + + graphModel.getDirectedGraph().addNode(n1); + graphModel.getDirectedGraph().addNode(n2); + graphModel.getDirectedGraph().addEdge(e1); + return this; + } + + public GraphGenerator addRandomPositions() { + Random random = new Random(); + double size = 100.0; + for (Node node : graphModel.getGraph().getNodes()) { + node.setX((float) (-size / 2 + size * random.nextDouble())); + node.setY((float) (-size / 2 + size * random.nextDouble())); + node.setSize(random.nextFloat() * (float) size / 25f); + } + return this; + } + + public GraphGenerator addIntNodeColumn() { + graphModel.getNodeTable().addColumn(INT_COLUMN, Integer.class); + int age = INT_COLUMN_MIN_VALUE; + for (Node node : graphModel.getGraph().getNodes()) { + node.setAttribute(INT_COLUMN, age++); + } + return this; + } + + public GraphGenerator addFloatArrayNodeColumn() { + graphModel.getNodeTable().addColumn(FLOAT_ARRAY_COLUMN, float[].class); + Node n1 = graphModel.getGraph().getNode(FIRST_NODE); + Node n2 = graphModel.getGraph().getNode(SECOND_NODE); + n1.setAttribute(FLOAT_ARRAY_COLUMN, FLOAT_ARRAY_COLUMN_VALUES[0]); + n2.setAttribute(FLOAT_ARRAY_COLUMN, FLOAT_ARRAY_COLUMN_VALUES[1]); + return this; + } + + public GraphGenerator addStringArrayNodeColumn() { + graphModel.getNodeTable().addColumn(STRING_ARRAY_COLUMN, String[].class); + Node n1 = graphModel.getGraph().getNode(FIRST_NODE); + Node n2 = graphModel.getGraph().getNode(SECOND_NODE); + n1.setAttribute(STRING_ARRAY_COLUMN, STRING_ARRAY_COLUMN_VALUES[0]); + n2.setAttribute(STRING_ARRAY_COLUMN, STRING_ARRAY_COLUMN_VALUES[1]); + return this; + } + + public GraphGenerator addDoubleNodeColumn() { + graphModel.getNodeTable().addColumn(DOUBLE_COLUMN, Double.class); + double val = 10; + for (Node node : graphModel.getGraph().getNodes()) { + node.setAttribute(DOUBLE_COLUMN, val++); + } + return this; + } + + public GraphGenerator addStringNodeColumn() { + graphModel.getNodeTable().addColumn(STRING_COLUMN, String.class); + graphModel.getGraph().getNode(FIRST_NODE).setAttribute(STRING_COLUMN, STRING_COLUMN_VALUES[0]); + graphModel.getGraph().getNode(SECOND_NODE).setAttribute(STRING_COLUMN, STRING_COLUMN_VALUES[1]); + return this; + } + + public GraphGenerator addIntervalDoubleColumn() { + graphModel.getNodeTable().addColumn(INTERVAL_DOUBLE_COLUMN, IntervalDoubleMap.class); + for (Node node : graphModel.getGraph().getNodes()) { + node.setAttribute(INTERVAL_DOUBLE_COLUMN, new IntervalDoubleMap(new double[] {2000, 2001}, + new double[] {Math.random() * 100.0})); + } + return this; + } + + public GraphGenerator addTimestampDoubleColumn() { + graphModel.getNodeTable().addColumn(TIMESTAMP_DOUBLE_COLUMN, TimestampDoubleMap.class); + int index = 0; + double value = 2000; + if (graphModel.getTimeFormat().equals(TimeFormat.DATE)) { + value = AttributeUtils.parseDateTime("2022-09-01"); + } + for (Node node : graphModel.getGraph().getNodes()) { + node.setAttribute(TIMESTAMP_DOUBLE_COLUMN, new TimestampDoubleMap(new double[] {value}, + TIMESTAMP_DOUBLE_COLUMN_VALUES[index++])); + } + return this; + } + + public GraphGenerator addTimestampSetColumn() { + graphModel.getNodeTable().addColumn(TIMESTAMP_SET_COLUMN, TimestampSet.class); + int index = 0; + for (Node node : graphModel.getGraph().getNodes()) { + node.setAttribute(TIMESTAMP_SET_COLUMN, new TimestampSet( + new double[] {TIMESTAMP_SET_VALUES[index++]})); + } + return this; + } + + public GraphGenerator setTimestampSet() { + int index = 0; + for (Node node : graphModel.getGraph().getNodes()) { + node.addTimestamp(TIMESTAMP_SET_VALUES[index++]); + } + return this; + } + + public GraphGenerator setIntervalSet() { + int index = 0; + for (Node node : graphModel.getGraph().getNodes()) { + node.addInterval(new Interval(INTERVAL_SET_VALUES[index][0], INTERVAL_SET_VALUES[index][1])); + index++; + } + return this; + } + + public GraphGenerator addIntervalSetColumn() { + graphModel.getNodeTable().addColumn(INTERVAL_SET_COLUMN, TimestampSet.class); + for (Node node : graphModel.getGraph().getNodes()) { + node.setAttribute(INTERVAL_SET_COLUMN, new IntervalSet( + new double[] {2000, 2001})); + } + return this; + } + + public GraphGenerator generateSmallRandomGraph() { + new RandomGraph(100, 0.01).generate(); + return this; + } + + public Graph getGraph() { + return graphModel.getGraph(); + } + + public GraphModel getGraphModel() { + return graphModel; + } + + public Workspace getWorkspace() { + return workspace; + } + + private class RandomGraph { + + protected final int numberOfNodes; + protected final int numberOfEdges; + protected final double wiringProbability; + + public RandomGraph(int n, double p) { + numberOfNodes = n; + numberOfEdges = (int) (n * (n - 1) * p); + wiringProbability = p; + } + + public RandomGraph(int nodes, int edges) { + this(nodes, ((double) edges) / (nodes * (nodes - 1))); + } + + public Graph generate() { + Random random = new Random(42); + + graphModel.getGraph().writeLock(); + + Graph graph = graphModel.getGraph(); + for (int i = 0; i < numberOfNodes; i++) { + Node node = graphModel.factory().newNode(String.valueOf(i)); + graph.addNode(node); + } + + if (wiringProbability > 0) { + for (int i = 0; i < numberOfNodes - 1; i++) { + Node source = graphModel.getGraph().getNode(String.valueOf(i)); + for (int j = i + 1; j < numberOfNodes; j++) { + Node target = graphModel.getGraph().getNode(String.valueOf(j)); + + if (random.nextDouble() < wiringProbability && source != target) { + Edge edge = graphModel.factory().newEdge(source, target, 0, true); + graph.addEdge(edge); + } + } + } + } + + graphModel.getGraph().writeUnlock(); + return graph; + } + } +} diff --git a/modules/ImportAPI/pom.xml b/modules/ImportAPI/pom.xml index d4da9796de..baad096b0c 100644 --- a/modules/ImportAPI/pom.xml +++ b/modules/ImportAPI/pom.xml @@ -4,13 +4,13 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi io-importer-api - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm ImportAPI @@ -36,6 +36,10 @@ ${project.groupId} utils + + ${project.groupId} + utils-longtask + org.netbeans.api org-openide-dialogs @@ -57,7 +61,7 @@ - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin @@ -67,6 +71,19 @@ + + + + org.apache.maven.plugins + maven-jar-plugin + + + + test-jar + + + + diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/AbstractDatabase.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/AbstractDatabase.java index f409637957..44fbae89e4 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/AbstractDatabase.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/AbstractDatabase.java @@ -39,12 +39,14 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.api; import org.gephi.io.database.drivers.SQLDriver; import org.gephi.io.database.drivers.SQLUtils; /** + * Abstract base implementation of {@link Database}, providing storage for standard connection parameters. * * @author Mathieu Bastian */ diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ColumnDraft.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ColumnDraft.java index 0b3f06580e..cb22f69743 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ColumnDraft.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ColumnDraft.java @@ -39,27 +39,91 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.api; /** + * Column draft used by containers to represent future attribute columns. * - * @author mbastian + * @author Mathieu Bastian */ public interface ColumnDraft { - public String getId(); - - public String getTitle(); - - public Class getTypeClass(); - - public Object getDefaultValue(); - - public boolean isDynamic(); - - public void setTitle(String title); - - public void setDefaultValue(Object value); - - public void setDefaultValueString(String value); + /** + * Gets the column's identifier. + *

    + * This identifier is unique across all columns. + * + * @return column's id + */ + String getId(); + + /** + * Gets the column's title. + * + * @return column's title or null if empty + */ + String getTitle(); + + /** + * Sets the column's title. + * + * @param title column title + */ + void setTitle(String title); + + /** + * Gets the column's type. + * + * @return column's type + */ + Class getTypeClass(); + + /** + * Gets the column's resolved (final) type taking into account the container settings and whether the column is dynamic or not. + * + * @param container Container + * @return column's final type + */ + Class getResolvedTypeClass(ContainerUnloader container); + + /** + * Gets the column's default value. + * + * @return default value or null if empty + */ + Object getDefaultValue(); + + /** + * Sets the column's default value. + *

    + * The default default value is null. + * + * @param value default value + */ + void setDefaultValue(Object value); + + /** + * Gets the column's resolved (final) default value taking into account the container settings and whether the column is dynamic or not. + * + * @param container Container + * @return default value or null if empty + */ + Object getResolvedDefaultValue(ContainerUnloader container); + + /** + * Returns true if this column is dynamic. + * + * @return true if dynamic, false otherwise + */ + boolean isDynamic(); + + /** + * Sets the column's default value as a string. + *

    + * The value will be parsed according to the column's type. + * + * @param value value to parse and to be set as default + */ + void setDefaultValueString(String value); } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/Container.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/Container.java index 96d4d6b7d8..df2cc40247 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/Container.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/Container.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.api; import org.gephi.io.importer.spi.Importer; @@ -47,8 +48,8 @@ Development and Distribution License("CDDL") (collectively, the /** * A container is created each time data are imported by importers. Its * role is to host all data collected by importers during import process. After - * pushing data in the container, its content can be analyzed to verify its - * validity and then be processed by processors. Thus containers are + * pushing data into the container, its content can be analyzed to verify its + * validity and then be processed by processors. Thus, containers are * loaded by importers and unloaded by processors. *

    * See {@link ContainerLoader} for how to push graph and attributes data in the @@ -62,77 +63,126 @@ Development and Distribution License("CDDL") (collectively, the public interface Container { /** - * Set the source of the data put in the container. Could be a file name. + * If exists, returns the source of the data. * - * @param source the original source of data. - * @throws NullPointerException if source is null + * @return source of the data, or null if source is not + * defined. */ - public void setSource(String source); + String getSource(); /** - * If exists, returns the source of the data. + * Sets the source of the data put in the container. Could be a file name. * - * @return the source of the data, or null if source is not - * defined. + * @param source original source of data. + * @throws NullPointerException if source is null */ - public String getSource(); + void setSource(String source); /** - * Get containers loading interface. The loader is used by modules - * which put data in the container, whereas the unloader interface is - * used by modules which read containers content. + * Gets the container loading interface. + *

    + * The loader is used by modules which put data in the container, + * whereas the unloader interface is used by modules which read + * containers content. * - * @return the containers loading interface + * @return containers loading interface */ - public ContainerLoader getLoader(); + ContainerLoader getLoader(); /** - * Get containers unloading interface. The unloader interface is used - * by modules which read containers content, whereas the loader is - * used for pushing data in the container. + * Get the container unloading interface. + *

    + * The unloader interface is used by modules which read containers + * content, whereas the loader is used for pushing data in the + * container. * - * @return the container unloading interface + * @return container unloading interface */ - public ContainerUnloader getUnloader(); + ContainerUnloader getUnloader(); /** - * Set a report this container can use to report issues detected when - * loading the container. Report are used to log info and issues during - * import process. Only one report can be associated to a container. + * Returns the report associated to this container, if it exists. * - * @param report set report as the default report for this - * container - * @throws NullPointerException if report is null + * @return report set for this container or null if no report + * is defined */ - public void setReport(Report report); + Report getReport(); /** - * Returns the report associated to this container, if exists. + * Sets a report this container can use to report issues detected when + * loading the container. + *

    + * Report are used to log info and issues during import process. Only one + * report can be associated to a container. * - * @return the report set for this container or null if no - * report is defined + * @param report set report as the default report for this + * container + * @throws NullPointerException if report is null */ - public Report getReport(); + void setReport(Report report); /** * This method must be called after the loading is complete and before - * unloading. Its aim is to verify data consistency as a whole. + * unloading. + *

    + * It aims to verify data consistency as a whole. * - * @return true if container data is * * * - * consistent, false otherwise + * @return true if container data is consistent, + * false otherwise */ - public boolean verify(); + boolean verify(); /** * Close the current loading and clean content before unloading. */ - public void closeLoader(); + void closeLoader(); + + /** + * Returns true if this container contains a dynamic graph. + *

    + * A dynamic graph has elements that appear or disappear over time. + * + * @return true if dynamic, false otherwise + */ + boolean isDynamicGraph(); - public boolean isDynamicGraph(); + /** + * Returns true if this container contains elements that have dynamic + * attributes. + *

    + * Dynamic attributes are attributes with different values over time. + * + * @return true if dynamic attributes, false otherwise + */ + boolean hasDynamicAttributes(); - public boolean hasDynamicAttributes(); + /** + * Returns true if edges in this container are self-loops. + * + * @return true if presence of self-loops, false otherwise + */ + boolean hasSelfLoops(); - public boolean hasSelfLoops(); + /** + * Returns true if this container contains a multigraph. + *

    + * A multi-graph is a graph that has several types of edges (i.e. edges with + * different labels). + * + * @return true if multigraph, false otherwise + */ + boolean isMultiGraph(); - public boolean isMultiGraph(); + /** + * Container factory. + */ + interface Factory { + + /** + * Returns a newly created container instance. + * + * @return new container + */ + Container newContainer(); + } } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ContainerFactory.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ContainerFactory.java deleted file mode 100644 index e442621cbf..0000000000 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ContainerFactory.java +++ /dev/null @@ -1,52 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ - -package org.gephi.io.importer.api; - -/** - * - * @author Mathieu Bastian - */ -public interface ContainerFactory { - - public Container newContainer(); -} diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ContainerLoader.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ContainerLoader.java index b436cf4559..766f5aeee6 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ContainerLoader.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ContainerLoader.java @@ -39,172 +39,310 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.api; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.attribute.api.TimeFormat; +import org.gephi.graph.api.TimeFormat; +import org.gephi.graph.api.TimeRepresentation; import org.gephi.io.importer.spi.Importer; +import java.time.ZoneId; /** - * Interface for a loading a {@link Container} with graph and attributes data - * from an importers. Data pushed to a container are not appended directly to - * the main data structure, - * Processor are doing this job. + * Interface for loading a {@link Container} with graph and attributes data from + * an importer. *

    - * Use the draft factory for getting - * NodeDraft and - * EdgeDraft instances. + * Data pushed to a container are not directly appended to the main graph + * structure and Processor are doing this job. *

    - * For pushing columns associated to nodes and edges, retrieve attribute model - * by calling {@link #getAttributeModel()}. - *

    How to push nodes with attributes

    - * There is two steps, first identify columns and then push values. - *
    //Add a URL column to nodes, must be done once only before importing nodes
    - * AttributeColumn col = getAttributeModel().getNodeTable().addColumn("url", AttributeType.STRING);
    - * //Write the URL value to a node draft
    - * nodeDraft.addAttributeValue(col, "http://gephi.org");
    - * 
    + * Use the draft factory for getting NodeDraft and + * EdgeDraft instances. * * @author Mathieu Bastian * @see Importer - * @see AttributeModel */ public interface ContainerLoader { /** - * Adds an edge to the container. The edge must have source and + * Adds an edge to this container. The edge must have source and * target defined. If the edge already exist, it is ignored. Source * and target nodes must be added to the container before pushing * edgeDraft. * - * @param edgeDraft the edge that is to be pushed to the container + * @param edgeDraft edge that is to be pushed to this container */ - public void addEdge(EdgeDraft edgeDraft); + void addEdge(EdgeDraft edgeDraft); /** - * Adds a node to the container. Identified by its id. If no id is + * Adds a node to this container. Identified by its id. If no id is * present, a unique identifier is generated. * - * @param nodeDraft the node that is to be pushed to the container + * @param nodeDraft node that is to be pushed to this container */ - public void addNode(NodeDraft nodeDraft); + void addNode(NodeDraft nodeDraft); /** - * Removes an edge from the container. Do nothing if the edge is not in the + * Removes an edge from this container. Do nothing if the edge is not in the * container. * - * @param edgeDraft the edge that is to be removed from the container + * @param edgeDraft edge that is to be removed from this container */ - public void removeEdge(EdgeDraft edgeDraft); + void removeEdge(EdgeDraft edgeDraft); /** - * Returns the node with the given - * id, or create a new node with this id if not found. + * Returns the node with the given id, or create a new node + * with this id if not found. * - * @param id a node identifier - * @return the found node, or a new default node + * @param id node identifier + * @return found node, or a new default node */ - public NodeDraft getNode(String id); + NodeDraft getNode(String id); /** - * Returns - * true if a node exists with the given + * Returns true if a node exists with the given * id. * - * @param id a node identifier - * @return true if node exists, false otherwise + * @param id node identifier + * @return true if node exists, false otherwise */ - public boolean nodeExists(String id); + boolean nodeExists(String id); /** - * Returns the edge with the given - * id, or - * null if not found. + * Returns the edge with the given id, or null if + * not found. * - * @param id an edge identifier - * @return the edge with id as an identifier, or - * null if not found + * @param id edge identifier + * @return edge with id as an identifier, or null + * if not found */ - public EdgeDraft getEdge(String id); + EdgeDraft getEdge(String id); /** - * Returns the edge with the given - * source and - * target or - * null if not found. - * - * @param source the edge source node - * @param target the edge target node - * @return the edge from source to target * * * * - * or null if not found - */ -// public EdgeDraft getEdge(NodeDraft source, NodeDraft target); - /** - * Returns - * true if an edge exists with the given + * Returns true if an edge exists with the given * id. * * @param id an edge identifier - * @return true if edge exists, false otherwise + * @return true if edge exists, false otherwise */ - public boolean edgeExists(String id); + boolean edgeExists(String id); /** - * Returns - * true if an edge exists from - * source to + * Returns true if an edge exists from source to * target. * - * @param source the edge source node - * @param target the edge target node - * @return true if edges exists, false otherwise + * @param source edge source node + * @param target edge target node + * @return true if edges exists, false otherwise */ - public boolean edgeExists(String source, String target); + boolean edgeExists(String source, String target); /** * Set edge default type: DIRECTED, UNDIRECTED or * MIXED. Default value is directed. * - * @param edgeDefault the edge default type value + * @param edgeDefault edge default type value */ - public void setEdgeDefault(EdgeDirectionDefault edgeDefault); + void setEdgeDefault(EdgeDirectionDefault edgeDefault); - public ColumnDraft getNodeColumn(String key); + /** + * Returns the node column draft with key as identifier. + * + * @param key node column key + * @return column draft or null if not found + */ + ColumnDraft getNodeColumn(String key); - public ColumnDraft getEdgeColumn(String key); + /** + * Returns the edge column draft with key as identifier. + * + * @param key edge column key + * @return column draft or null if not found + */ + ColumnDraft getEdgeColumn(String key); - public ColumnDraft addNodeColumn(String key, Class typeClass); + /** + * Adds a new node column to this container. + *

    + * If a column with this key already exists, it is ignored and return the + * existing column. + * + * @param key node column identifier + * @param typeClass node column type + * @return column draft + */ + ColumnDraft addNodeColumn(String key, Class typeClass); - public ColumnDraft addEdgeColumn(String key, Class typeClass); + /** + * Adds a new edge column to this container. + *

    + * If a column with this key already exists, it is ignored and return the + * existing column. + * + * @param key edge column identifier + * @param typeClass edge column type + * @return column draft + */ + ColumnDraft addEdgeColumn(String key, Class typeClass); - public ColumnDraft addNodeColumn(String key, Class typeClass, boolean dynamic); + /** + * Adds a new dynamic node column to this container. + *

    + * Dynamic attributes have values over time. + *

    + * If a column with this key already exists, it is ignored and return the + * existing column. + * + * @param key node column identifier + * @param typeClass node column type + * @param dynamic true if the column needs to be dynamic, false otherwise + * @return column draft + */ + ColumnDraft addNodeColumn(String key, Class typeClass, boolean dynamic); - public ColumnDraft addEdgeColumn(String key, Class typeClass, boolean dynamic); + /** + * Adds a new dynamic edge column to this container. + *

    + * Dynamic attributes have values over time. + *

    + * If a column with this key already exists, it is ignored and return the + * existing column. + * + * @param key edge column identifier + * @param typeClass edge column type + * @param dynamic true if the column needs to be dynamic, false otherwise + * @return column draft + */ + ColumnDraft addEdgeColumn(String key, Class typeClass, boolean dynamic); /** * Returns the factory for building nodes and edges instances. * * @return the draft factory */ - public ElementDraftFactory factory(); + ElementDraft.Factory factory(); + + /** + * Sets the current Time Format for dynamic data, either DATE, + * DATETIME or DOUBLE. It configures how the dates + * are formatted. + *

    + * The default value is DOUBLE. + * + * @param timeFormat time format + */ + void setTimeFormat(TimeFormat timeFormat); + + /** + * Sets the timestamp for the entire graph. All elements and all dynamic + * columns will automatically receive this timestamp when the graph is + * processed. + * + * @param timestamp timestamp + */ + void setTimestamp(String timestamp); + + /** + * Sets the interval for the entire graph. All elements and all dynamic + * columns will automatically receive this interval when the graph is + * processed. + * + * @param start interval start + * @param end interval end + */ + void setInterval(String start, String end); + + /** + * Sets the type of the id for elements. + * + * @param type id type + */ + void setElementIdType(ElementIdType type); + + /** + * Gets the current time representation, either TIMESTAMP or + * INTERVAL. + *

    + * + * @return time representation + */ + TimeRepresentation getTimeRepresentation(); + + /** + * Sets the current time representation, either TIMESTAMP or + * INTERVAL. + *

    + * The default value is INTERVAL. + * + * @param timeRepresentation time representation + */ + void setTimeRepresentation(TimeRepresentation timeRepresentation); + + /** + * Sets the time zone that is used to parse date and time. + *

    + * If not set, the local time zone is used. + * + * @param timeZone time zone + */ + void setTimeZone(ZoneId timeZone); + + /** + * Sets the (optional) graph metadata. + * + * @param metadata graph metadata + */ + void setMetadata(MetadataDraft metadata); /** - * Sets the current Time Format for dynamic data, either - * DATE of - * DOUBLE. Says how the dates are formatted. + * Sets whether self-loops are allowed in this container. + *

    + * Default is {@code true}. * - * @param timeFormat the current time format + * @param value true to allow self-loops, false otherwise */ - public void setTimeFormat(TimeFormat timeFormat); + void setAllowSelfLoop(boolean value); - //PARAMETERS SETTERS - public void setAllowSelfLoop(boolean value); + /** + * Sets whether nodes are automatically created from edges when the source or target is not declared. + *

    + * Default is {@code true}. + * + * @param value true to allow auto-node creation, false otherwise + */ + void setAllowAutoNode(boolean value); - public void setAllowAutoNode(boolean value); + /** + * Sets whether parallel edges (multiple edges between the same pair of nodes) are allowed. + *

    + * Default is {@code true}. + * + * @param value true to allow parallel edges, false otherwise + */ + void setAllowParallelEdge(boolean value); - public void setAllowParallelEdge(boolean value); + /** + * Sets whether auto-scaling is enabled. + *

    + * When enabled, node positions are scaled to fit the default viewport after import. Default is {@code true}. + * + * @param autoscale true to enable auto-scaling, false otherwise + */ + void setAutoScale(boolean autoscale); - public void setAutoScale(boolean autoscale); + /** + * Sets whether node labels should be filled with the node id when no label is explicitly set. + *

    + * Default is {@code false}. + * + * @param value true to fill labels with ids, false otherwise + */ + void setFillLabelWithId(boolean value); - public void setEdgesMergeStrategy(EdgeWeightMergeStrategy edgesMergeStrategy); + /** + * Sets the strategy used to merge weights of parallel edges. + *

    + * This setting only applies when parallel edges exist and are merged. Default is {@link EdgeMergeStrategy#SUM}. + * + * @param edgesMergeStrategy the merge strategy to use + */ + void setEdgesMergeStrategy(EdgeMergeStrategy edgesMergeStrategy); } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ContainerUnloader.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ContainerUnloader.java index f95cd87c27..f7bf4c2ee4 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ContainerUnloader.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ContainerUnloader.java @@ -39,54 +39,248 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.api; -import org.gephi.attribute.api.TimeFormat; +import org.gephi.graph.api.Interval; +import org.gephi.graph.api.TimeFormat; +import org.gephi.graph.api.TimeRepresentation; import org.gephi.io.processor.spi.Processor; +import java.time.ZoneId; /** - * Interface for unloading a container. Gets graph draft elements and - * attributes. Get also basic params and properties which defined the content. - * Unloaders are used by - * Processor to load data from the container to the main data - * structure. + * Interface for unloading a container. + *

    + * Gives access to the draft graph elements, columns attributes. Also gives + * access to basic settings and properties about the container's content. + *

    + * Unloaders are used by Processor to load data from the container + * to the main data structure. * * @author Mathieu Bastian * @see Processor */ public interface ContainerUnloader { - public Iterable getNodes(); + /** + * Returns all nodes in this container. + * + * @return an iterable of all node drafts + */ + Iterable getNodes(); + + /** + * Returns the number of nodes in this container. + * + * @return node count + */ + int getNodeCount(); + + /** + * Returns all edges in this container. + * + * @return an iterable of all edge drafts + */ + Iterable getEdges(); + + /** + * Returns the number of edges in this container. + * + * @return edge count + */ + int getEdgeCount(); + + /** + * Returns the number of mutual (directed) edges in the container; + * + * @return mutual edge count + */ + int getMutualEdgeCount(); + + /** + * Returns true if a node column with the given key exists in this container. + * + * @param key node column identifier + * @return true if the column exists, false otherwise + */ + boolean hasNodeColumn(String key); + + /** + * Returns true if an edge column with the given key exists in this container. + * + * @param key edge column identifier + * @return true if the column exists, false otherwise + */ + boolean hasEdgeColumn(String key); + + /** + * Returns true if the container contains nodes that were auto-created from edges. + * + * @return true if contains auto nodes, false otherwise + */ + boolean containsAutoNodes(); + + /** + * Returns the node column draft with key as identifier. + * + * @param key node column key + * @return column draft or null if not found + */ + ColumnDraft getNodeColumn(String key); + + /** + * Returns the edge column draft with key as identifier. + * + * @param key edge column key + * @return column draft or null if not found + */ + ColumnDraft getEdgeColumn(String key); + + /** + * Returns all node columns in this container. + * + * @return an iterable of all node column drafts + */ + Iterable getNodeColumns(); + + /** + * Returns all edge columns in this container. + * + * @return an iterable of all edge column drafts + */ + Iterable getEdgeColumns(); + + /** + * Returns the default edge direction setting for this container. + * + * @return edge direction default + */ + EdgeDirectionDefault getEdgeDefault(); + + /** + * Returns the time format used for dynamic data in this container. + * + * @return time format + */ + TimeFormat getTimeFormat(); + + /** + * Returns the time representation used for dynamic data in this container, either {@code TIMESTAMP} or + * {@code INTERVAL}. + * + * @return time representation + */ + TimeRepresentation getTimeRepresentation(); - public int getNodeCount(); + /** + * Returns the time zone used to parse date and time values in this container. + * + * @return time zone + */ + ZoneId getTimeZone(); - public Iterable getEdges(); + /** + * Returns the source of the data in this container (e.g. a file name), or {@code null} if not set. + * + * @return source or null + */ + String getSource(); - public int getEdgeCount(); + /** + * Returns the class used for edge type labels, or {@code null} if the default (null label) is used. + * + * @return edge type label class or null + */ + Class getEdgeTypeLabelClass(); - public boolean hasNodeColumn(String key); + /** + * Returns the graph-level timestamp applied to all elements in this container, or {@code null} if not set. + * + * @return graph timestamp or null + */ + Double getTimestamp(); - public boolean hasEdgeColumn(String key); + /** + * Returns the graph-level interval applied to all elements in this container, or {@code null} if not set. + * + * @return graph interval or null + */ + Interval getInterval(); - public Iterable getNodeColumns(); + /** + * Returns the element id type used by this container. + * + * @return element id type + */ + ElementIdType getElementIdType(); - public Iterable getEdgeColumns(); + /** + * Returns the graph metadata in this container, or {@code null} if not set. + * + * @return metadata or null + */ + MetadataDraft getMetadata(); -// public EdgeDraft getEdge(NodeDraft source, NodeDraft target); - public EdgeDirectionDefault getEdgeDefault(); + /** + * Returns whether self-loops are allowed in this container. + * + * @return true if self-loops are allowed, false otherwise + */ + boolean allowSelfLoop(); - public TimeFormat getTimeFormat(); + /** + * Returns whether nodes are automatically created from edges when the source or target node is not declared. + * + * @return true if auto-node creation is allowed, false otherwise + */ + boolean allowAutoNode(); - public String getSource(); + /** + * Returns whether parallel edges (multiple edges between the same pair of nodes) are allowed. + * + * @return true if parallel edges are allowed, false otherwise + */ + boolean allowParallelEdges(); - //PARAMETERS GETTERS - public boolean allowSelfLoop(); + /** + * Returns whether auto-scaling is enabled for this container. + *

    + * When enabled, node positions are scaled to fit the default viewport after import. + * + * @return true if auto-scaling is enabled, false otherwise + */ + boolean isAutoScale(); - public boolean allowAutoNode(); + /** + * Returns whether node labels should be filled with the node id when no label is set. + * + * @return true if labels should be filled with ids, false otherwise + */ + boolean isFillLabelWithId(); - public boolean allowParallelEdges(); + /** + * Returns the strategy used for merging parallel edge weights. + * + * @return edge merge strategy + */ + EdgeMergeStrategy getEdgesMergeStrategy(); - public boolean isAutoScale(); + /** + * Returns true if this container contains a dynamic graph. + *

    + * A dynamic graph has elements that appear or disappear over time. + * + * @return true if dynamic, false otherwise + */ + boolean isDynamicGraph(); - public EdgeWeightMergeStrategy getEdgesMergeStrategy(); + /** + * Returns true if this container contains elements that have dynamic + * attributes. + *

    + * Dynamic attributes are attributes with different values over time. + * + * @return true if dynamic attributes, false otherwise + */ + boolean hasDynamicAttributes(); } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/Database.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/Database.java index 3590a1ef15..5119f43037 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/Database.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/Database.java @@ -39,46 +39,121 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.api; import java.io.Serializable; - import org.gephi.io.database.drivers.SQLDriver; /** - * Database description and connexion details. + * Database description and connection details. * * @author Mathieu Bastian */ public interface Database extends Serializable { - public String getName(); - - public SQLDriver getSQLDriver(); - - public String getHost(); - - public int getPort(); - - public String getUsername(); - - public String getPasswd(); - - public String getDBName(); - - public void setName(String name); - - public void setSQLDriver(SQLDriver driver); - - public void setHost(String host); - - public void setPort(int port); - - public void setUsername(String username); - - public void setPasswd(String passwd); - - public void setDBName(String dbName); - - public PropertiesAssociations getPropertiesAssociations(); + /** + * Returns the name of this database connection configuration. + * + * @return connection name + */ + String getName(); + + /** + * Sets the name of this database connection configuration. + * + * @param name connection name + */ + void setName(String name); + + /** + * Returns the SQL driver used for this database connection. + * + * @return SQL driver + */ + SQLDriver getSQLDriver(); + + /** + * Sets the SQL driver used for this database connection. + * + * @param driver SQL driver + */ + void setSQLDriver(SQLDriver driver); + + /** + * Returns the database server host name or IP address. + * + * @return host + */ + String getHost(); + + /** + * Sets the database server host name or IP address. + * + * @param host host name or IP address + */ + void setHost(String host); + + /** + * Returns the database server port number. + * + * @return port number + */ + int getPort(); + + /** + * Sets the database server port number. + * + * @param port port number + */ + void setPort(int port); + + /** + * Returns the username used for authentication. + * + * @return username + */ + String getUsername(); + + /** + * Sets the username used for authentication. + * + * @param username username + */ + void setUsername(String username); + + /** + * Returns the password used for authentication. + * + * @return password + */ + String getPasswd(); + + /** + * Sets the password used for authentication. + * + * @param passwd password + */ + void setPasswd(String passwd); + + /** + * Returns the name of the target database (schema) on the server. + * + * @return database name + */ + String getDBName(); + + /** + * Sets the name of the target database (schema) on the server. + * + * @param dbName database name + */ + void setDBName(String dbName); + + /** + * Returns the column-to-property associations configured for this database. + * + * @return properties associations + */ + PropertiesAssociations getPropertiesAssociations(); } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/EdgeDirection.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/EdgeDirection.java index 8649c58c8b..7562002b9d 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/EdgeDirection.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/EdgeDirection.java @@ -39,13 +39,20 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.api; /** + * Edge direction setting. + *

    + * An edge can either be directed or undirected. Each edge is configured with + * this enum through {@link EdgeDraft#setDirection(org.gephi.io.importer.api.EdgeDirection) + * }. * * @author Mathieu Bastian + * @see EdgeDraft */ public enum EdgeDirection { - DIRECTED, UNDIRECTED; + DIRECTED, UNDIRECTED } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/EdgeDirectionDefault.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/EdgeDirectionDefault.java index ebabb61f01..109ecbe670 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/EdgeDirectionDefault.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/EdgeDirectionDefault.java @@ -38,14 +38,17 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.io.importer.api; /** + * Graph level setting that indicates the nature of its edges. * * @author Mathieu Bastian + * @see ContainerLoader */ public enum EdgeDirectionDefault { - DIRECTED, UNDIRECTED, MIXED; + DIRECTED, UNDIRECTED, MIXED } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/EdgeDraft.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/EdgeDraft.java index dea3d67eb4..4b5a95637b 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/EdgeDraft.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/EdgeDraft.java @@ -39,38 +39,105 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.api; /** * Draft edge, hosted by import containers to represent edges found when - * importing. - * Processors decide if this edge will finally be appended to the - * graph or not. + * importing. Processors decide if this edge will finally be + * appended to the graph or not. * * @author Mathieu Bastian * @see ContainerLoader */ public interface EdgeDraft extends ElementDraft { - public void setWeight(double weight); - - public double getWeight(); - - public void setType(Object type); - - public Object getType(); - - public void setDirection(EdgeDirection direction); - - public EdgeDirection getDirection(); - - public void setSource(NodeDraft nodeSource); - - public void setTarget(NodeDraft nodeTarget); - - public NodeDraft getSource(); - - public NodeDraft getTarget(); - - public boolean isSelfLoop(); + /** + * Returns this edge's weight. + * + * @return edge's weight + */ + double getWeight(); + + /** + * Sets this edge's weight. + *

    + * Default is 1.0. + * + * @param weight edge's weight + */ + void setWeight(double weight); + + /** + * Gets this edge's type. + *

    + * Edges can have different types but by default all edges have a default, + * null type. In other words, setting a type is optional. + * + * @return edge's type or null if unset + */ + Object getType(); + + /** + * Sets this edge's type. + *

    + * Edges can have different types but by default all edges have a default, + * null type. In other words, setting a type is optional. + * + * @param type edge type + */ + void setType(Object type); + + /** + * Returns this edge's direction setting. + * + * @return edge's direction or null if unset + */ + EdgeDirection getDirection(); + + /** + * Sets this edge's direction setting. + * + * @param direction edge's direction + */ + void setDirection(EdgeDirection direction); + + /** + * Get edge's source. + * + * @return edge's source or null if unset + */ + NodeDraft getSource(); + + /** + * Sets this edge's source. + * + * @param nodeSource node source + */ + void setSource(NodeDraft nodeSource); + + /** + * Get edge's target. + * + * @return edge's target or null if unset + */ + NodeDraft getTarget(); + + /** + * Sets this edge's target. + *

    + * Self-loops should simply set both source and target with the same node. + * + * @param nodeTarget node target + */ + void setTarget(NodeDraft nodeTarget); + + /** + * Returns true if this edge is a self-loop. + *

    + * It returns false if the source or target is null. + * + * @return true if self-loop, false otherwise + */ + boolean isSelfLoop(); } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/EdgeMergeStrategy.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/EdgeMergeStrategy.java new file mode 100644 index 0000000000..522c6d7963 --- /dev/null +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/EdgeMergeStrategy.java @@ -0,0 +1,67 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.io.importer.api; + +/** + * Defines the strategy used to merge the weights of parallel edges. + *

    + * When a container allows parallel edges but a processor merges them into a single edge, this strategy determines + * how the resulting weight is computed. + */ +public enum EdgeMergeStrategy { + + /** Sum all parallel edge weights. */ + SUM, + /** Average the parallel edge weights. */ + AVG, + /** Keep the maximum parallel edge weight. */ + MAX, + /** Keep the minimum parallel edge weight. */ + MIN, + /** Keep the weight of the first parallel edge encountered. */ + FIRST, + /** Keep the weight of the last parallel edge encountered. */ + LAST, + /** Do not merge parallel edges; keep them as separate edges. */ + NO_MERGE +} diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/EdgeWeightMergeStrategy.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/EdgeWeightMergeStrategy.java deleted file mode 100644 index dbba2bac7a..0000000000 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/EdgeWeightMergeStrategy.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.io.importer.api; - -public enum EdgeWeightMergeStrategy { - - SUM, AVG, MAX, MIN -} diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ElementDraft.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ElementDraft.java index 0d35f2d019..fd78e32cf0 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ElementDraft.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ElementDraft.java @@ -39,75 +39,406 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.api; import java.awt.Color; +import org.gephi.graph.api.Interval; +import org.gephi.graph.api.types.TimeSet; /** + * Draft element, hosted by import containers to represent nodes or edges found + * when importing. + *

    + * The Factory sub-interface defined the methods to create new element + * instances. * - * @author mbastian + * @author Mathieu Bastian */ public interface ElementDraft { - public String getId(); - - public Object getValue(String key); - - public Object getValue(String key, double timestamp); - - public double[] getTimestamps(String key); - - public String getLabel(); - - public Color getColor(); - - public boolean isLabelVisible(); - - public float getLabelSize(); - - public Color getLabelColor(); - - public void setValue(String key, Object value); - - public void setValue(String key, Object value, double timestamp); - - public void setValue(String key, Object value, String dateTime); - - public void parseAndSetValue(String key, String value); - - public void parseAndSetValue(String key, String value, double timestamp); - - public void parseAndSetValue(String key, String value, String dateTime); - - public void setLabel(String label); - - public void setColor(Color color); - - public void setColor(String r, String g, String b); - - public void setColor(float r, float g, float b); - - public void setColor(int r, int g, int b); - - public void setColor(String color); - - public void setLabelVisible(boolean labelVisible); - - public void setLabelSize(float size); - - public void setLabelColor(Color color); - - public void setLabelColor(String r, String g, String b); - - public void setLabelColor(float r, float g, float b); - - public void setLabelColor(int r, int g, int b); - - public void setLabelColor(String color); - - public void addTimestamp(double timestamp); - - public void addTimestamp(String dateTime); - - public double[] getTimestamps(); + /** + * Returns the element's id. + *

    + * The element id is unique. + * + * @return element's id + */ + String getId(); + + /** + * Returns the element's value for key. + * + * @param key key + * @return value or null if not found + */ + Object getValue(String key); + + /** + * Returns the element's label. + * + * @return label or null if unset + */ + String getLabel(); + + /** + * Sets this element's label. + * + * @param label label + */ + void setLabel(String label); + + /** + * Returns the element's color. + * + * @return color or null if unset + */ + Color getColor(); + + /** + * Sets this element's color. + * + * @param color color + */ + void setColor(Color color); + + /** + * Parse and sets this element's color. + *

    + * Color can be an existing Java color (e.g. yellow, blue, cyan) or an octal + * or hexadecimal color representation (e.g. 0xFF0096, #FF0096). + * + * @param color color to be parsed and set + */ + void setColor(String color); + + /** + * Returns true if the label is visible. + *

    + * Default value is true. + * + * @return true if label is visible, false otherwise + */ + boolean isLabelVisible(); + + /** + * Sets whether the label is visible. + * + * @param labelVisible label visible flag + */ + void setLabelVisible(boolean labelVisible); + + /** + * Returns the label's size. + *

    + * Default value is -1. + * + * @return label size + */ + float getLabelSize(); + + /** + * Sets the label's size. + * + * @param size label size + */ + void setLabelSize(float size); + + /** + * Returns the label's color. + * + * @return label's color + */ + Color getLabelColor(); + + /** + * Sets the label's color. + * + * @param color label color + */ + void setLabelColor(Color color); + + /** + * Parses and sets the label's color. + *

    + * Color can be an existing Java color (e.g. yellow, blue, cyan) or an octal + * or hexadecimal color representation (e.g. 0xFF0096, #FF0096). + * + * @param color color to be parsed and set + */ + void setLabelColor(String color); + + /** + * Sets the value for key. + * + * @param key key + * @param value value + */ + void setValue(String key, Object value); + + /** + * Sets the value for key at the given + * timestamp. + * + * @param key key + * @param value value + * @param timestamp timestamp + */ + void setValue(String key, Object value, double timestamp); + + /** + * Sets the value for key at the given interval + * [start,end]. + * + * @param key key + * @param value value + * @param start interval start + * @param end interval end + */ + void setValue(String key, Object value, double start, double end); + + /** + * Sets the value for key at the given + * dateTime. + * + * @param key key + * @param value value + * @param dateTime dateTime + */ + void setValue(String key, Object value, String dateTime); + + /** + * Sets the value for key at the given interval + * [startDateTime,endDateTime]. + * + * @param key key + * @param value value + * @param startDateTime interval start datetime + * @param endDateTime interval end datetime + */ + void setValue(String key, Object value, String startDateTime, String endDateTime); + + /** + * Parses and sets the value for key. + * + * @param key key + * @param value value + */ + void parseAndSetValue(String key, String value); + + /** + * Parses and sets the value for key at the given + * timestamp. + * + * @param key key + * @param value value + * @param timestamp timestamp + */ + void parseAndSetValue(String key, String value, double timestamp); + + /** + * Parses and sets the value for key at the given + * interval [start,end]. + * + * @param key key + * @param value value + * @param start interval start + * @param end interval end + */ + void parseAndSetValue(String key, String value, double start, double end); + + /** + * Parses and sets the value for key at the given + * dateTime. + * + * @param key key + * @param value value + * @param dateTime dateTime + */ + void parseAndSetValue(String key, String value, String dateTime); + + /** + * Parses and sets the value for key at the given + * dateTime. + * + * @param key key + * @param value value + * @param startDateTime interval start datetime + * @param endDateTime interval end datetime + */ + void parseAndSetValue(String key, String value, String startDateTime, String endDateTime); + + /** + * Parses and sets this element's color using string components. + *

    + * Components should be numbers between 0 and 255. + * + * @param r red component as string + * @param g green component as string + * @param b blue component as string + */ + void setColor(String r, String g, String b); + + /** + * Sets this element's color using real color numbers (i.e numbers between 0 + * and 1). + * + * @param r red component as float + * @param g green component as float + * @param b blue component as float + */ + void setColor(float r, float g, float b); + + /** + * Sets this element's color using int color numbers (i.e numbers between 0 + * and 255). + * + * @param r red component as int + * @param g green component as int + * @param b blue component as int + */ + void setColor(int r, int g, int b); + + /** + * Parses and sets the label's color using string components. + *

    + * Components should be numbers between 0 and 255. + * + * @param r red component as string + * @param g green component as string + * @param b blue component as string + */ + void setLabelColor(String r, String g, String b); + + /** + * Sets the label's color using real color numbers (i.e numbers between 0 + * and 1). + * + * @param r red component as float + * @param g green component as float + * @param b blue component as float + */ + void setLabelColor(float r, float g, float b); + + /** + * Sets the label's color using int color numbers (i.e numbers between 0 and + * 255). + * + * @param r red component as int + * @param g green component as int + * @param b blue component as int + */ + void setLabelColor(int r, int g, int b); + + /** + * Adds a timestamp to this element's time set, marking it as present at the given double timestamp. + * + * @param timestamp timestamp value + */ + void addTimestamp(double timestamp); + + /** + * Adds a timestamp to this element's time set by parsing the given date or datetime string. + * + * @param dateTime date or datetime string + */ + void addTimestamp(String dateTime); + + /** + * Parses and adds multiple timestamps to this element's time set from a string representation. + * + * @param timestamps timestamps string (e.g. {@code "[1.0, 2.0, 3.0]"}) + */ + void addTimestamps(String timestamps); + + /** + * Adds an interval to this element's time set, marking it as present during {@code [start, end]}. + * + * @param start interval start + * @param end interval end + */ + void addInterval(double start, double end); + + /** + * Adds an interval to this element's time set by parsing the given start and end datetime strings. + * + * @param startDateTime interval start as a date or datetime string + * @param endDateTime interval end as a date or datetime string + */ + void addInterval(String startDateTime, String endDateTime); + + /** + * Parses and adds multiple intervals to this element's time set from a string representation. + * + * @param intervals intervals string (e.g. {@code "[[1.0, 2.0]; [3.0, 4.0]]"}) + */ + void addIntervals(String intervals); + + /** + * Returns this element's time set, or {@code null} if the element has no time information. + * + * @return time set or null + */ + TimeSet getTimeSet(); + + /** + * Returns the columns that have a value set on this element. + * + * @return an iterable of column drafts with values on this element + */ + Iterable getColumns(); + + /** + * Returns the graph-level timestamp that will be applied to this element during processing, or {@code null} if + * not set. + * + * @return graph timestamp or null + */ + Double getGraphTimestamp(); + + /** + * Returns the graph-level interval that will be applied to this element during processing, or {@code null} if + * not set. + * + * @return graph interval or null + */ + Interval getGraphInterval(); + + /** + * Node and edge draft factory. Creates node and edge to push in the + * container. + */ + interface Factory { + + /** + * Returns an empty node draft instance. + * + * @return an instance of NodeDraft + */ + NodeDraft newNodeDraft(); + + /** + * Returns an empty node draft instance. + * + * @param id node id + * @return an instance of NodeDraft + */ + NodeDraft newNodeDraft(String id); + + /** + * Returns an empty edge draft instance. Note that source and + * target have to be set. + * + * @return an instance of EdgeDraft + */ + EdgeDraft newEdgeDraft(); + + /** + * Returns an empty edge draft instance. + * + * @param id edge id + * @return an instance of EdgeDraft + */ + EdgeDraft newEdgeDraft(String id); + } } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ElementDraftFactory.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ElementDraftFactory.java deleted file mode 100644 index 5d77de2038..0000000000 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ElementDraftFactory.java +++ /dev/null @@ -1,77 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.io.importer.api; - -/** - * Node and edge draft factory. Creates node and edge to push in the container. - */ -public interface ElementDraftFactory { - - /** - * Returns an empty node draft instance. - * - * @return an instance of NodeDraft - */ - public NodeDraft newNodeDraft(); - - /** - * Returns an empty node draft instance. - * - * @return an instance of NodeDraft - */ - public NodeDraft newNodeDraft(String id); - - /** - * Returns an empty edge draft instance. Note that source and - * target have to be set. - * - * @return an instance of EdgeDraft - */ - public EdgeDraft newEdgeDraft(); - - /** - * Returns an empty node draft instance. - * - * @return an instance of NodeDraft - */ - public EdgeDraft newEdgeDraft(String id); -} diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ElementIdType.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ElementIdType.java new file mode 100644 index 0000000000..72919b696c --- /dev/null +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ElementIdType.java @@ -0,0 +1,73 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.io.importer.api; + +/** + * Element id type. + * + * @author Mathieu Bastian + */ +public enum ElementIdType { + + /** Element ids are stored as {@link String}. */ + STRING(String.class), + /** Element ids are stored as {@link Integer}. */ + INTEGER(Integer.class), + /** Element ids are stored as {@link Long}. */ + LONG(Long.class); + + private final Class cls; + + ElementIdType(Class cls) { + this.cls = cls; + } + + /** + * Returns the Java class corresponding to this id type. + * + * @return id type class + */ + public Class getTypeClass() { + return cls; + } +} diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/EmptyFileException.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/EmptyFileException.java new file mode 100644 index 0000000000..4d2eebd543 --- /dev/null +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/EmptyFileException.java @@ -0,0 +1,77 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. +*/ + +package org.gephi.io.importer.api; + +import org.openide.util.NbBundle; + +/** + * Thrown when an import is attempted on a file that contains no data. + *

    + * The {@link #getMessage() message} is localized via {@code NbBundle} and includes the name of the offending file so it + * can be shown directly to the user. + * + * @author Mathieu Bastian + */ +public final class EmptyFileException extends ImportException { + + private final String fileName; + + public EmptyFileException(String fileName) { + super(buildMessage(fileName)); + this.fileName = fileName; + } + + private static String buildMessage(String fileName) { + if (fileName == null || fileName.isEmpty()) { + return NbBundle.getMessage(EmptyFileException.class, "EmptyFileException.messageNoName"); + } + return NbBundle.getMessage(EmptyFileException.class, "EmptyFileException.message", fileName); + } + + /** + * @return the name of the empty file that triggered this exception, or {@code null} if it isn't known + */ + public String getFileName() { + return fileName; + } +} diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/FileType.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/FileType.java index 76c2315662..62ac56cba9 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/FileType.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/FileType.java @@ -38,11 +38,15 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.io.importer.api; /** - * File type definition. A simple class which contains a name and extension for a file type/ + * File type definition. + *

    + * A simple class which contains a name and extension for a file + * type. * * @author Mathieu Bastian */ @@ -51,24 +55,51 @@ public final class FileType { private final String[] extensions; private final String name; + /** + * Creates a file type with a single extension. + * + * @param extension file extension (e.g. {@code ".gexf"}) + * @param name human-readable name of the file type + */ public FileType(String extension, String name) { - this.extensions = new String[]{extension}; + this.extensions = new String[] {extension}; this.name = name; } + /** + * Creates a file type with multiple extensions. + * + * @param extensions file extensions (e.g. {@code {".gexf", ".xml"}}) + * @param name human-readable name of the file type + */ public FileType(String[] extensions, String name) { this.extensions = extensions; this.name = name; } + /** + * Returns the first (primary) file extension for this file type. + * + * @return primary file extension + */ public String getExtension() { return extensions[0]; } + /** + * Returns all file extensions for this file type. + * + * @return array of file extensions + */ public String[] getExtensions() { return extensions; } + /** + * Returns the human-readable name of this file type. + * + * @return file type name + */ public String getName() { return name; } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ImportController.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ImportController.java index 96668884bd..c7f2f73233 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ImportController.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ImportController.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.api; import java.io.File; @@ -50,44 +51,180 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.io.importer.spi.Importer; import org.gephi.io.importer.spi.ImporterUI; import org.gephi.io.importer.spi.ImporterWizardUI; -import org.gephi.io.importer.spi.SpigotImporter; +import org.gephi.io.importer.spi.WizardImporter; import org.gephi.io.processor.spi.Processor; import org.gephi.project.api.Workspace; +import org.openide.filesystems.FileObject; /** - * Manage and control the import executionf low. + * Manage and control the import execution flow. *

    * This controller is a singleton and can therefore be found in Lookup: *

    ImportController ic = Lookup.getDefault().lookup(ImportController.class);
    + * * @author Mathieu Bastian */ public interface ImportController { - public Container importFile(File file) throws FileNotFoundException; - - public Container importFile(File file, FileImporter importer) throws FileNotFoundException; - - public Container importFile(Reader reader, FileImporter importer); - - public Container importFile(InputStream stream, FileImporter importer); - - public Container importSpigot(SpigotImporter importer); - - public FileImporter getFileImporter(File file); - - public FileImporter getFileImporter(String importerName); - - public Container importDatabase(Database database, DatabaseImporter importer); - - public void process(Container container); - - public void process(Container container, Processor processor, Workspace workspace); - - public FileType[] getFileTypes(); - - public boolean isFileSupported(File file); - - public ImporterUI getUI(Importer importer); - - public ImporterWizardUI getWizardUI(Importer importer); + /** + * Imports a file by automatically detecting the appropriate importer based on the file extension. + *

    + * If the file is a supported archive (zip, gz, bz2), it is extracted first and the content file is imported. + * + * @param file the file to import + * @return the container holding the imported data, or {@code null} if no matching importer was found + * @throws FileNotFoundException if the file does not exist + */ + Container importFile(File file) throws FileNotFoundException; + + /** + * Imports a file using the specified importer. + *

    + * If the file is a supported archive (zip, gz, bz2), it is extracted first and the content file is imported. + * + * @param file the file to import + * @param importer the importer to use + * @return the container holding the imported data, or {@code null} if the import failed + * @throws FileNotFoundException if the file does not exist + */ + Container importFile(File file, FileImporter importer) throws FileNotFoundException; + + /** + * Imports data from a reader using the specified importer. + * + * @param reader the reader providing the data to import + * @param importer the importer to use + * @return the container holding the imported data, or {@code null} if the import failed + */ + Container importFile(Reader reader, FileImporter importer); + + /** + * Imports data from an input stream using the specified importer. + * + * @param stream the input stream providing the data to import + * @param importer the importer to use + * @return the container holding the imported data, or {@code null} if the import failed + */ + Container importFile(InputStream stream, FileImporter importer); + + /** + * Imports data using the specified wizard importer. + *

    + * Wizard importers generate data without requiring a file or database source, for example from user input or + * generated content. + * + * @param importer the wizard importer to execute + * @return the container holding the imported data, or {@code null} if the import failed + */ + Container importWizard(WizardImporter importer); + + /** + * Returns a file importer that matches the given file object, or {@code null} if none is found. + *

    + * If the file object represents a supported archive, it is extracted first and the content file is matched. + * + * @param fileObject the file object to match an importer for + * @return a matching {@link FileImporter}, or {@code null} if none was found + */ + FileImporter getFileImporter(FileObject fileObject); + + /** + * Returns a file importer that matches the given file, or {@code null} if none is found. + * + * @param file the file to match an importer for + * @return a matching {@link FileImporter}, or {@code null} if none was found + */ + FileImporter getFileImporter(File file); + + /** + * Returns a file importer matching the given importer name or file extension, or {@code null} if none is found. + *

    + * The {@code importerName} can be either a file extension (with or without a leading dot) or the name of a + * registered importer. + * + * @param importerName the importer name or file extension to look up + * @return a matching {@link FileImporter}, or {@code null} if none was found + */ + FileImporter getFileImporter(String importerName); + + /** + * Imports data from a database using the specified database importer. + * + * @param database the database connection parameters + * @param importer the database importer to use + * @return the container holding the imported data, or {@code null} if the import failed + */ + Container importDatabase(Database database, DatabaseImporter importer); + + /** + * Processes a container using the default processor and creates a new workspace. + *

    + * The default processor is retrieved from the global Lookup. + * + * @param container the container with imported data to process + * @return the workspace created by the processor + * @throws RuntimeException if no default processor is found or the processor fails + */ + Workspace process(Container container); + + /** + * Processes a container using the specified processor and workspace. + *

    + * If {@code workspace} is {@code null}, the processor will create a new workspace. Auto-scaling is applied to the + * container if enabled. + * + * @param container the container with imported data to process + * @param processor the processor to use + * @param workspace the target workspace, or {@code null} to let the processor create one + * @return the workspace populated by the processor + * @throws RuntimeException if the processor does not return exactly one workspace + */ + Workspace process(Container container, Processor processor, Workspace workspace); + + /** + * Processes multiple containers using the specified processor and workspace. + *

    + * If {@code workspace} is {@code null}, the processor will create new workspaces. Auto-scaling is applied to each + * container individually if enabled. + * + * @param containers the containers with imported data to process + * @param processor the processor to use + * @param workspace the target workspace, or {@code null} to let the processor create workspaces + * @return the workspaces populated by the processor + * @throws RuntimeException if the processor does not return any workspace + */ + Workspace[] process(Container[] containers, Processor processor, Workspace workspace); + + /** + * Returns all file types supported by the registered file importers. + * + * @return an array of supported {@link FileType} instances + */ + FileType[] getFileTypes(); + + /** + * Returns whether the given file is supported by any registered file importer. + *

    + * Archive files (zip, gz, bz2) are always considered supported. + * + * @param file the file to check + * @return {@code true} if the file is supported, {@code false} otherwise + */ + boolean isFileSupported(File file); + + /** + * Returns the UI component associated with the given importer, or {@code null} if none is registered. + * + * @param importer the importer to look up a UI for + * @return the matching {@link ImporterUI}, or {@code null} if none was found + */ + ImporterUI getUI(Importer importer); + + /** + * Returns the wizard UI component associated with the given importer, or {@code null} if none is registered. + * + * @param importer the importer to look up a wizard UI for + * @return the matching {@link ImporterWizardUI}, or {@code null} if none was found + */ + ImporterWizardUI getWizardUI(Importer importer); } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ImportException.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ImportException.java new file mode 100644 index 0000000000..8517a3ae09 --- /dev/null +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ImportException.java @@ -0,0 +1,66 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. +*/ + +package org.gephi.io.importer.api; + +/** + * Base class for known, user-facing failures raised by the import pipeline. + *

    + * Unlike a generic {@link RuntimeException}, an {@code ImportException} carries a message that has already been + * localized for end-user display. The desktop UI (and other front-ends) can catch instances of this class to present + * the failure as a friendly message instead of the default unexpected-exception treatment. + *

    + * Subclasses should be created for specific known conditions (for example {@link EmptyFileException}) so that callers + * can react to them programmatically when needed. + * + * @author Mathieu Bastian + */ +public class ImportException extends RuntimeException { + + public ImportException(String message) { + super(message); + } + + public ImportException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ImportUtils.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ImportUtils.java index 92b57fa5b7..7da5815226 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ImportUtils.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/ImportUtils.java @@ -38,9 +38,11 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.io.importer.api; +import java.awt.Color; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; @@ -49,7 +51,10 @@ Development and Distribution License("CDDL") (collectively, the import java.io.InputStream; import java.io.LineNumberReader; import java.io.Reader; +import java.lang.reflect.Field; import java.nio.ByteBuffer; +import java.util.HashMap; +import java.util.Map; import java.util.zip.GZIPInputStream; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; @@ -70,17 +75,710 @@ Development and Distribution License("CDDL") (collectively, the import org.xml.sax.SAXException; /** + * Utility methods for importers, providing readers, XML parsers, archive extraction, and color parsing. * * @author Mathieu Bastian */ public final class ImportUtils { + //COLORS + private static final Map COLORS = new HashMap<>(); + + static { + COLORS.put("gray30", 0x4D4D4D); + COLORS.put("cadetblue", 0xB0B7C6); + COLORS.put("gray35", 0x595959); + COLORS.put("lightorange", 0xFF6F1A); + COLORS.put("gray75", 0xBFBFBF); + COLORS.put("apricot", 0xFDD9B5); + COLORS.put("canary", 0xFFFF99); + COLORS.put("rubinered", 0xCA005D); + COLORS.put("gray80", 0xCCCCCC); + COLORS.put("gray20", 0x333333); + COLORS.put("processblue", 0x4169E1); + COLORS.put("gray25", 0x404040); + COLORS.put("emerald", 0x50C878); + COLORS.put("lightpurple", 0xE066FF); + COLORS.put("forestgreen", 0x6DAE81); + COLORS.put("maroon", 0xC8385A); + COLORS.put("gray40", 0x666666); + COLORS.put("seagreen", 0x9FE2BF); + COLORS.put("thistle", 0xD8BFD8); + COLORS.put("olivegreen", 0xBAB86C); + COLORS.put("gray45", 0x737373); + COLORS.put("cerulean", 0x1DACD6); + COLORS.put("skyblue", 0x80DAEB); + COLORS.put("violetred", 0xF75394); + COLORS.put("lskyblue", 0x87CEFA); + COLORS.put("gray85", 0xD9D9D9); + COLORS.put("navyblue", 0x1974D2); + COLORS.put("lavender", 0xFCB4D5); + COLORS.put("lightmagenta", 0xFF00FF); + COLORS.put("yellowgreen", 0xC5E384); + COLORS.put("plum", 0x8E4585); + COLORS.put("gray90", 0xE5E5E5); + COLORS.put("gray10", 0x1A1A1A); + COLORS.put("melon", 0xFDBCB4); + COLORS.put("turquoise", 0x77DDE7); + COLORS.put("midnightblue", 0x1A4876); + COLORS.put("gray15", 0x262626); + COLORS.put("royalpurple", 0x7851A9); + COLORS.put("gray95", 0xF2F2F2); + COLORS.put("brickred", 0xCB4154); + COLORS.put("salmon", 0xFF9BAA); + COLORS.put("rhodamine", 0xE0119D); + COLORS.put("lfadedgreen", 0x548B54); + COLORS.put("tan", 0xFAA76C); + COLORS.put("rawsienna", 0xD68A59); + COLORS.put("sepia", 0xA5694F); + COLORS.put("lightyellow", 0xFFFFE0); + COLORS.put("gray55", 0x8C8C8C); + COLORS.put("bluegreen", 0x199EBD); + COLORS.put("lightgreen", 0x90EE90); + COLORS.put("burntorange", 0xFF7F49); + COLORS.put("goldenrod", 0xFCD975); + COLORS.put("blueviolet", 0x7366BD); + COLORS.put("periwinkle", 0xC5D0E6); + COLORS.put("aquamarine", 0x78DBE2); + COLORS.put("redorange", 0xFF5349); + COLORS.put("greenyellow", 0xF0E891); + COLORS.put("mulberry", 0xAA709F); + COLORS.put("limegreen", 0x32CD32); + COLORS.put("darkorchid", 0xFDDB7D); + COLORS.put("pinegreen", 0x158078); + COLORS.put("gray60", 0x999999); + COLORS.put("tealblue", 0x8080); + COLORS.put("gray05", 0xD0D0D); + COLORS.put("purple", 0x926EAE); + COLORS.put("gray65", 0xA6A6A6); + COLORS.put("cornflowerblue", 0x9ACEEB); + COLORS.put("redviolet", 0xC0448F); + COLORS.put("peach", 0xFFCFAB); + COLORS.put("springgreen", 0xECEABE); + COLORS.put("royalblue", 0x4169E1); + COLORS.put("mahogany", 0xCD4A4A); + COLORS.put("wildstrawberry", 0xFF43A4); + COLORS.put("lightcyan", 0xE0FFFF); + COLORS.put("orangered", 0xFF5349); + COLORS.put("orchid", 0xE6A8D7); + COLORS.put("dandelion", 0xFDDB6D); + COLORS.put("violet", 0x926EAE); + COLORS.put("fuchsia", 0xC364C5); + COLORS.put("gray70", 0xB3B3B3); + COLORS.put("brown", 0xB4674D); + COLORS.put("carnationpink", 0xFFAACC); + COLORS.put("bittersweet", 0xFD7C6E); + COLORS.put("junglegreen", 0x3BB08F); + COLORS.put("yelloworange", 0xFFB653); + COLORS.put("navajowhite", 0xFFDEAD); + COLORS.put("deeppink4", 0x8B0A50); + COLORS.put("deeppink3", 0xCD1076); + COLORS.put("deeppink2", 0xEE1289); + COLORS.put("saddlebrown", 0x8B4513); + COLORS.put("deeppink1", 0xFF1493); + COLORS.put("burlywood3", 0xCDAA7D); + COLORS.put("burlywood4", 0x8B7355); + COLORS.put("lightblue", 0xADD8E6); + COLORS.put("burlywood1", 0xFFD39B); + COLORS.put("burlywood2", 0xEEC591); + COLORS.put("sienna3", 0xCD6839); + COLORS.put("peachpuff3", 0xCDAF95); + COLORS.put("sienna2", 0xEE7942); + COLORS.put("peachpuff2", 0xEECBAD); + COLORS.put("sienna4", 0x8B4726); + COLORS.put("peachpuff4", 0x8B7765); + COLORS.put("peachpuff1", 0xFFDAB9); + COLORS.put("orangered4", 0x8B2500); + COLORS.put("purple4", 0x551A8B); + COLORS.put("orangered3", 0xCD3700); + COLORS.put("purple3", 0x7D26CD); + COLORS.put("purple2", 0x912CEE); + COLORS.put("purple1", 0x9B30FF); + COLORS.put("lavenderblush", 0xFFF0F5); + COLORS.put("palegreen2", 0x90EE90); + COLORS.put("orangered1", 0xFF4500); + COLORS.put("palegreen1", 0x9AFF9A); + COLORS.put("orangered2", 0xEE4000); + COLORS.put("palegreen4", 0x548B54); + COLORS.put("sgiindigo2", 0x218868); + COLORS.put("palegreen3", 0x7CCD7C); + COLORS.put("mediumslateblue", 0x7B68EE); + COLORS.put("linen", 0xFAF0E6); + COLORS.put("chartreuse3", 0x66CD00); + COLORS.put("mediumorchid", 0xBA55D3); + COLORS.put("chartreuse2", 0x76EE00); + COLORS.put("chartreuse4", 0x458B00); + COLORS.put("chartreuse1", 0x7FFF00); + COLORS.put("salmon2", 0xEE8262); + COLORS.put("salmon3", 0xCD7054); + COLORS.put("salmon4", 0x8B4C39); + COLORS.put("salmon1", 0xFF8C69); + COLORS.put("dodgerblue", 0x1E90FF); + COLORS.put("grey", 0xBEBEBE); + COLORS.put("dodgerblue3", 0x1874CD); + COLORS.put("dodgerblue4", 0x104E8B); + COLORS.put("papayawhip", 0xFFEFD5); + COLORS.put("dodgerblue1", 0x1E90FF); + COLORS.put("dodgerblue2", 0x1C86EE); + COLORS.put("slategrey", 0x708090); + COLORS.put("paleturquoise1", 0xBBFFFF); + COLORS.put("darkgoldenrod1", 0xFFB90F); + COLORS.put("paleturquoise2", 0xAEEEEE); + COLORS.put("aquamarine1", 0x7FFFD4); + COLORS.put("chocolate", 0xD2691E); + COLORS.put("darkgoldenrod3", 0xCD950C); + COLORS.put("darkgoldenrod2", 0xEEAD0E); + COLORS.put("aquamarine3", 0x66CDAA); + COLORS.put("coral2", 0xEE6A50); + COLORS.put("aquamarine2", 0x76EEC6); + COLORS.put("coral1", 0xFF7256); + COLORS.put("darkgoldenrod4", 0x8B6508); + COLORS.put("paleturquoise3", 0x96CDCD); + COLORS.put("coral4", 0x8B3E2F); + COLORS.put("paleturquoise4", 0x668B8B); + COLORS.put("aquamarine4", 0x458B74); + COLORS.put("coral3", 0xCD5B45); + COLORS.put("mediumseagreen", 0x3CB371); + COLORS.put("slategray1", 0xC6E2FF); + COLORS.put("gray0", 0x000000); + COLORS.put("slategray3", 0x9FB6CD); + COLORS.put("mistyrose2", 0xEED5D2); + COLORS.put("gray2", 0x050505); + COLORS.put("slategray2", 0xB9D3EE); + COLORS.put("mistyrose1", 0xFFE4E1); + COLORS.put("gray1", 0x030303); + COLORS.put("oldlace", 0xFDF5E6); + COLORS.put("mistyrose4", 0x8B7D7B); + COLORS.put("slategray4", 0x6C7B8B); + COLORS.put("mistyrose3", 0xCDB7B5); + COLORS.put("paleturquoise", 0xAFEEEE); + COLORS.put("gray22", 0x383838); + COLORS.put("gray21", 0x363636); + COLORS.put("gray26", 0x424242); + COLORS.put("powderblue", 0xB0E0E6); + COLORS.put("gray24", 0x3D3D3D); + COLORS.put("gray23", 0x3B3B3B); + COLORS.put("gray7", 0x121212); + COLORS.put("gray8", 0x141414); + COLORS.put("gray29", 0x4A4A4A); + COLORS.put("palevioletred", 0xDB7093); + COLORS.put("gray9", 0x171717); + COLORS.put("gray28", 0x474747); + COLORS.put("gray27", 0x454545); + COLORS.put("gray3", 0x080808); + COLORS.put("gray4", 0x0A0A0A); + COLORS.put("gray5", 0x0D0D0D); + COLORS.put("azure", 0xF0FFFF); + COLORS.put("gray6", 0x0F0F0F); + COLORS.put("lightskyblue2", 0xA4D3EE); + COLORS.put("lightblue4", 0x68838B); + COLORS.put("lightskyblue1", 0xB0E2FF); + COLORS.put("lightskyblue4", 0x607B8B); + COLORS.put("cyan1", 0x00FFFF); + COLORS.put("lightskyblue3", 0x8DB6CD); + COLORS.put("cyan2", 0x00EEEE); + COLORS.put("lightblue1", 0xBFEFFF); + COLORS.put("lightblue2", 0xB2DFEE); + COLORS.put("lightblue3", 0x9AC0CD); + COLORS.put("gray11", 0x1C1C1C); + COLORS.put("gray13", 0x212121); + COLORS.put("gray12", 0x1F1F1F); + COLORS.put("gray14", 0x242424); + COLORS.put("gray17", 0x2B2B2B); + COLORS.put("violetred1", 0xFF3E96); + COLORS.put("gray16", 0x292929); + COLORS.put("gold4", 0x8B7500); + COLORS.put("gray19", 0x303030); + COLORS.put("gray18", 0x2E2E2E); + COLORS.put("gold2", 0xEEC900); + COLORS.put("cyan4", 0x008B8B); + COLORS.put("gold3", 0xCDAD00); + COLORS.put("cyan3", 0x00CDCD); + COLORS.put("gold1", 0xFFD700); + COLORS.put("darkolivegreen", 0x556B2F); + COLORS.put("violetred3", 0xCD3278); + COLORS.put("tan3", 0xCD853F); + COLORS.put("violetred2", 0xEE3A8C); + COLORS.put("tan4", 0x8B5A2B); + COLORS.put("darkgoldenrod", 0xB8860B); + COLORS.put("tan1", 0xFFA54F); + COLORS.put("violetred4", 0x8B2252); + COLORS.put("tan2", 0xEE9A49); + COLORS.put("palegreen", 0x98FB98); + COLORS.put("darkorange4", 0x8B4500); + COLORS.put("darkseagreen", 0x8FBC8F); + COLORS.put("springgreen4", 0x008B45); + COLORS.put("springgreen3", 0x00CD66); + COLORS.put("springgreen2", 0x00EE76); + COLORS.put("springgreen1", 0x00FF7F); + COLORS.put("ivory2", 0xEEEEE0); + COLORS.put("ivory1", 0xFFFFF0); + COLORS.put("ivory4", 0x8B8B83); + COLORS.put("ivory3", 0xCDCDC1); + COLORS.put("beige", 0xF5F5DC); + COLORS.put("darkorange3", 0xCD6600); + COLORS.put("darkorange2", 0xEE7600); + COLORS.put("darkorange1", 0xFF7F00); + COLORS.put("mediumorchid3", 0xB452CD); + COLORS.put("mediumorchid2", 0xD15FEE); + COLORS.put("mediumorchid1", 0xE066FF); + COLORS.put("mediumorchid4", 0x7A378B); + COLORS.put("khaki", 0xF0E68C); + COLORS.put("slategray", 0x708090); + COLORS.put("mintcream", 0xF5FFFA); + COLORS.put("mistyrose", 0xFFE4E1); + COLORS.put("tomato", 0xFF6347); + COLORS.put("moccasin", 0xFFE4B5); + COLORS.put("royalblue3", 0x3A5FCD); + COLORS.put("blue1", 0x0000FF); + COLORS.put("royalblue4", 0x27408B); + COLORS.put("royalblue1", 0x4876FF); + COLORS.put("royalblue2", 0x436EEE); + COLORS.put("blue4", 0x00008B); + COLORS.put("lightslategrey", 0x778899); + COLORS.put("blue3", 0x0000CD); + COLORS.put("blue2", 0x0000EE); + COLORS.put("indigo", 0x4B0082); + COLORS.put("darkviolet", 0x9400D3); + COLORS.put("darkred", 0x8B0000); + COLORS.put("lightcyan1", 0xE0FFFF); + COLORS.put("lightcyan2", 0xD1EEEE); + COLORS.put("lightcyan3", 0xB4CDCD); + COLORS.put("lightcyan4", 0x7A8B8B); + COLORS.put("darkmagenta", 0x8B008B); + COLORS.put("darkcyan", 0x008B8B); + COLORS.put("grey89", 0xE3E3E3); + COLORS.put("lightgoldenrodyellow", 0xFAFAD2); + COLORS.put("grey91", 0xE8E8E8); + COLORS.put("darkseagreen1", 0xC1FFC1); + COLORS.put("grey90", 0xE5E5E5); + COLORS.put("peachpuff", 0xFFDAB9); + COLORS.put("mediumvioletred", 0xC71585); + COLORS.put("grey99", 0xFCFCFC); + COLORS.put("grey98", 0xFAFAFA); + COLORS.put("grey97", 0xF7F7F7); + COLORS.put("grey96", 0xF5F5F5); + COLORS.put("darkseagreen4", 0x698B69); + COLORS.put("grey95", 0xF2F2F2); + COLORS.put("grey94", 0xF0F0F0); + COLORS.put("darkseagreen2", 0xB4EEB4); + COLORS.put("grey93", 0xEDEDED); + COLORS.put("darkseagreen3", 0x9BCD9B); + COLORS.put("grey92", 0xEBEBEB); + COLORS.put("khaki1", 0xFFF68F); + COLORS.put("grey78", 0xC7C7C7); + COLORS.put("grey79", 0xC9C9C9); + COLORS.put("darkslateblue", 0x483D8B); + COLORS.put("antiquewhite", 0xFAEBD7); + COLORS.put("bisque3", 0xCDB79E); + COLORS.put("bisque4", 0x8B7D6B); + COLORS.put("bisque1", 0xFFE4C4); + COLORS.put("bisque2", 0xEED5B7); + COLORS.put("grey80", 0xCCCCCC); + COLORS.put("grey86", 0xDBDBDB); + COLORS.put("grey85", 0xD9D9D9); + COLORS.put("grey88", 0xE0E0E0); + COLORS.put("grey87", 0xDEDEDE); + COLORS.put("grey82", 0xD1D1D1); + COLORS.put("khaki4", 0x8B864E); + COLORS.put("grey81", 0xCFCFCF); + COLORS.put("khaki3", 0xCDC673); + COLORS.put("grey84", 0xD6D6D6); + COLORS.put("grey83", 0xD4D4D4); + COLORS.put("khaki2", 0xEEE685); + COLORS.put("red3", 0xCD0000); + COLORS.put("red4", 0x8B0000); + COLORS.put("red1", 0xFF0000); + COLORS.put("honeydew", 0xF0FFF0); + COLORS.put("red2", 0xEE0000); + COLORS.put("mediumpurple", 0x9370DB); + COLORS.put("darkolivegreen2", 0xBCEE68); + COLORS.put("brown1", 0xFF4040); + COLORS.put("darkolivegreen3", 0xA2CD5A); + COLORS.put("darkolivegreen4", 0x6E8B3D); + COLORS.put("brown4", 0x8B2323); + COLORS.put("brown2", 0xEE3B3B); + COLORS.put("lightslategray", 0x778899); + COLORS.put("brown3", 0xCD3333); + COLORS.put("darkolivegreen1", 0xCAFF70); + COLORS.put("slateblue3", 0x6959CD); + COLORS.put("slateblue4", 0x473C8B); + COLORS.put("lightcoral", 0xF08080); + COLORS.put("seagreen4", 0x2E8B57); + COLORS.put("slateblue2", 0x7A67EE); + COLORS.put("seagreen1", 0x54FF9F); + COLORS.put("slateblue1", 0x836FFF); + COLORS.put("seagreen3", 0x43CD80); + COLORS.put("seagreen2", 0x4EEE94); + COLORS.put("cadetblue2", 0x8EE5EE); + COLORS.put("darkorchid2", 0xB23AEE); + COLORS.put("cadetblue1", 0x98F5FF); + COLORS.put("darkorchid1", 0xBF3EFF); + COLORS.put("darkorchid4", 0x68228B); + COLORS.put("darkorchid3", 0x9A32CD); + COLORS.put("cadetblue4", 0x53868B); + COLORS.put("cadetblue3", 0x7AC5CD); + COLORS.put("coral", 0xFF7F50); + COLORS.put("darksalmon", 0xE9967A); + COLORS.put("grey100", 0xFFFFFF); + COLORS.put("palegoldenrod", 0xEEE8AA); + COLORS.put("azure2", 0xE0EEEE); + COLORS.put("azure1", 0xF0FFFF); + COLORS.put("azure4", 0x838B8B); + COLORS.put("honeydew3", 0xC1CDC1); + COLORS.put("azure3", 0xC1CDCD); + COLORS.put("honeydew4", 0x838B83); + COLORS.put("honeydew1", 0xF0FFF0); + COLORS.put("honeydew2", 0xE0EEE0); + COLORS.put("cornsilk2", 0xEEE8CD); + COLORS.put("cornsilk1", 0xFFF8DC); + COLORS.put("darkturquoise", 0x00CED1); + COLORS.put("cornsilk4", 0x8B8878); + COLORS.put("cornsilk3", 0xCDC8B1); + COLORS.put("steelblue4", 0x36648B); + COLORS.put("steelblue3", 0x4F94CD); + COLORS.put("sandybrown", 0xF4A460); + COLORS.put("steelblue2", 0x5CACEE); + COLORS.put("sienna1", 0xFF8247); + COLORS.put("steelblue1", 0x63B8FF); + COLORS.put("navy", 0x000080); + COLORS.put("hotpink", 0xFF69B4); + COLORS.put("green3", 0x00CD00); + COLORS.put("green4", 0x008B00); + COLORS.put("grey22", 0x383838); + COLORS.put("grey21", 0x363636); + COLORS.put("grey20", 0x333333); + COLORS.put("grey18", 0x2E2E2E); + COLORS.put("grey19", 0x303030); + COLORS.put("grey16", 0x292929); + COLORS.put("grey17", 0x2B2B2B); + COLORS.put("grey14", 0x242424); + COLORS.put("grey15", 0x262626); + COLORS.put("grey12", 0x1F1F1F); + COLORS.put("snow", 0xFFFAFA); + COLORS.put("grey13", 0x212121); + COLORS.put("green2", 0x00EE00); + COLORS.put("green1", 0x00FF00); + COLORS.put("plum4", 0x8B668B); + COLORS.put("plum1", 0xFFBBFF); + COLORS.put("thistle3", 0xCDB5CD); + COLORS.put("plum2", 0xEEAEEE); + COLORS.put("thistle4", 0x8B7B8B); + COLORS.put("plum3", 0xCD96CD); + COLORS.put("thistle1", 0xFFE1FF); + COLORS.put("ghostwhite", 0xF8F8FF); + COLORS.put("thistle2", 0xEED2EE); + COLORS.put("grey31", 0x4F4F4F); + COLORS.put("grey30", 0x4D4D4D); + COLORS.put("snow4", 0x8B8989); + COLORS.put("grey33", 0x545454); + COLORS.put("snow3", 0xCDC9C9); + COLORS.put("grey32", 0x525252); + COLORS.put("darkslategrey", 0x2F4F4F); + COLORS.put("grey27", 0x454545); + COLORS.put("grey28", 0x474747); + COLORS.put("grey29", 0x4A4A4A); + COLORS.put("snow1", 0xFFFAFA); + COLORS.put("grey23", 0x3B3B3B); + COLORS.put("gray100", 0xFFFFFF); + COLORS.put("snow2", 0xEEE9E9); + COLORS.put("grey24", 0x3D3D3D); + COLORS.put("grey25", 0x404040); + COLORS.put("grey26", 0x424242); + COLORS.put("turquoise4", 0x00868B); + COLORS.put("turquoise3", 0x00C5CD); + COLORS.put("turquoise2", 0x00E5EE); + COLORS.put("turquoise1", 0x00F5FF); + COLORS.put("seashell2", 0xEEE5DE); + COLORS.put("seashell1", 0xFFF5EE); + COLORS.put("seashell4", 0x8B8682); + COLORS.put("seashell3", 0xCDC5BF); + COLORS.put("sienna", 0xA0522D); + COLORS.put("peru", 0xCD853F); + COLORS.put("orchid2", 0xEE7AE9); + COLORS.put("orchid1", 0xFF83FA); + COLORS.put("lightsteelblue", 0xB0C4DE); + COLORS.put("orchid3", 0xCD69C9); + COLORS.put("orchid4", 0x8B4789); + COLORS.put("gold", 0xFFD700); + COLORS.put("darkgray", 0xA9A9A9); + COLORS.put("grey11", 0x1C1C1C); + COLORS.put("grey10", 0x1A1A1A); + COLORS.put("goldenrod1", 0xFFC125); + COLORS.put("chocolate4", 0x8B4513); + COLORS.put("goldenrod4", 0x8B6914); + COLORS.put("goldenrod3", 0xCD9B1D); + COLORS.put("goldenrod2", 0xEEB422); + COLORS.put("lightsalmon", 0xFFA07A); + COLORS.put("chocolate1", 0xFF7F24); + COLORS.put("chocolate3", 0xCD661D); + COLORS.put("chocolate2", 0xEE7621); + COLORS.put("grey65", 0xA6A6A6); + COLORS.put("grey9", 0x171717); + COLORS.put("grey66", 0xA8A8A8); + COLORS.put("grey8", 0x141414); + COLORS.put("grey63", 0xA1A1A1); + COLORS.put("grey7", 0x121212); + COLORS.put("grey64", 0xA3A3A3); + COLORS.put("grey61", 0x9C9C9C); + COLORS.put("grey62", 0x9E9E9E); + COLORS.put("grey60", 0x999999); + COLORS.put("grey2", 0x050505); + COLORS.put("grey1", 0x030303); + COLORS.put("grey0", 0x000000); + COLORS.put("grey6", 0x0F0F0F); + COLORS.put("grey5", 0x0D0D0D); + COLORS.put("grey4", 0x0A0A0A); + COLORS.put("grey3", 0x080808); + COLORS.put("darkblue", 0x00008B); + COLORS.put("firebrick1", 0xFF3030); + COLORS.put("firebrick2", 0xEE2C2C); + COLORS.put("firebrick3", 0xCD2626); + COLORS.put("firebrick4", 0x8B1A1A); + COLORS.put("lightslateblue", 0x8470FF); + COLORS.put("grey59", 0x969696); + COLORS.put("grey58", 0x949494); + COLORS.put("grey57", 0x919191); + COLORS.put("grey56", 0x8F8F8F); + COLORS.put("grey74", 0xBDBDBD); + COLORS.put("grey75", 0xBFBFBF); + COLORS.put("lawngreen", 0x7CFC00); + COLORS.put("grey76", 0xC2C2C2); + COLORS.put("grey77", 0xC4C4C4); + COLORS.put("grey70", 0xB3B3B3); + COLORS.put("grey71", 0xB5B5B5); + COLORS.put("grey72", 0xB8B8B8); + COLORS.put("grey73", 0xBABABA); + COLORS.put("mediumspringgreen", 0x00FA9A); + COLORS.put("lightsalmon4", 0x8B5742); + COLORS.put("mediumpurple3", 0x8968CD); + COLORS.put("lightsalmon1", 0xFFA07A); + COLORS.put("mediumpurple4", 0x5D478B); + COLORS.put("gainsboro", 0xDCDCDC); + COLORS.put("mediumpurple1", 0xAB82FF); + COLORS.put("lightsalmon3", 0xCD8162); + COLORS.put("mediumpurple2", 0x9F79EE); + COLORS.put("lightsalmon2", 0xEE9572); + COLORS.put("floralwhite", 0xFFFAF0); + COLORS.put("bisque", 0xFFE4C4); + COLORS.put("lightgoldenrod4", 0x8B814C); + COLORS.put("grey68", 0xADADAD); + COLORS.put("lightgoldenrod1", 0xFFEC8B); + COLORS.put("grey67", 0xABABAB); + COLORS.put("lightgoldenrod2", 0xEEDC82); + COLORS.put("lightgoldenrod3", 0xCDBE70); + COLORS.put("grey69", 0xB0B0B0); + COLORS.put("grey40", 0x666666); + COLORS.put("grey43", 0x6E6E6E); + COLORS.put("grey44", 0x707070); + COLORS.put("grey41", 0x696969); + COLORS.put("grey42", 0x6B6B6B); + COLORS.put("lightseagreen", 0x20B2AA); + COLORS.put("lightskyblue", 0x87CEFA); + COLORS.put("grey37", 0x5E5E5E); + COLORS.put("grey36", 0x5C5C5C); + COLORS.put("grey35", 0x595959); + COLORS.put("ivory", 0xFFFFF0); + COLORS.put("grey34", 0x575757); + COLORS.put("grey39", 0x636363); + COLORS.put("grey38", 0x616161); + COLORS.put("grey50", 0x7F7F7F); + COLORS.put("grey51", 0x828282); + COLORS.put("grey52", 0x858585); + COLORS.put("grey53", 0x878787); + COLORS.put("dimgray", 0x696969); + COLORS.put("grey54", 0x8A8A8A); + COLORS.put("grey55", 0x8C8C8C); + COLORS.put("darkorange", 0xFF8C00); + COLORS.put("indianred", 0xCD5C5C); + COLORS.put("grey46", 0x757575); + COLORS.put("grey45", 0x737373); + COLORS.put("lightsteelblue3", 0xA2B5CD); + COLORS.put("grey48", 0x7A7A7A); + COLORS.put("lightsteelblue4", 0x6E7B8B); + COLORS.put("grey47", 0x787878); + COLORS.put("lightsteelblue1", 0xCAE1FF); + COLORS.put("lightsteelblue2", 0xBCD2EE); + COLORS.put("grey49", 0x7D7D7D); + COLORS.put("gray32", 0x525252); + COLORS.put("gray33", 0x545454); + COLORS.put("rosybrown3", 0xCD9B9B); + COLORS.put("rosybrown4", 0x8B6969); + COLORS.put("gray31", 0x4F4F4F); + COLORS.put("gray36", 0x5C5C5C); + COLORS.put("gray37", 0x5E5E5E); + COLORS.put("gray34", 0x575757); + COLORS.put("hotpink2", 0xEE6AA7); + COLORS.put("lightgoldenrod", 0xEEDD82); + COLORS.put("hotpink1", 0xFF6EB4); + COLORS.put("gray38", 0x616161); + COLORS.put("gray39", 0x636363); + COLORS.put("blanchedalmond", 0xFFEBCD); + COLORS.put("tomato4", 0x8B3626); + COLORS.put("tomato3", 0xCD4F39); + COLORS.put("tomato2", 0xEE5C42); + COLORS.put("darkkhaki", 0xBDB76B); + COLORS.put("yellow4", 0x8B8B00); + COLORS.put("hotpink3", 0xCD6090); + COLORS.put("hotpink4", 0x8B3A62); + COLORS.put("tomato1", 0xFF6347); + COLORS.put("lightgrey", 0xD3D3D3); + COLORS.put("lavenderblush2", 0xEEE0E5); + COLORS.put("gray41", 0x696969); + COLORS.put("lavenderblush1", 0xFFF0F5); + COLORS.put("gray42", 0x6B6B6B); + COLORS.put("lavenderblush4", 0x8B8386); + COLORS.put("gray43", 0x6E6E6E); + COLORS.put("lavenderblush3", 0xCDC1C5); + COLORS.put("gray44", 0x707070); + COLORS.put("gray46", 0x757575); + COLORS.put("gray47", 0x787878); + COLORS.put("gray48", 0x7A7A7A); + COLORS.put("gray49", 0x7D7D7D); + COLORS.put("skyblue3", 0x6CA6CD); + COLORS.put("lightyellow1", 0xFFFFE0); + COLORS.put("skyblue4", 0x4A708B); + COLORS.put("navajowhite1", 0xFFDEAD); + COLORS.put("navajowhite2", 0xEECFA1); + COLORS.put("navajowhite3", 0xCDB38B); + COLORS.put("mediumturquoise", 0x48D1CC); + COLORS.put("aliceblue", 0xF0F8FF); + COLORS.put("navajowhite4", 0x8B795E); + COLORS.put("skyblue1", 0x87CEFF); + COLORS.put("lightyellow3", 0xCDCDB4); + COLORS.put("skyblue2", 0x7EC0EE); + COLORS.put("lightyellow2", 0xEEEED1); + COLORS.put("rosybrown2", 0xEEB4B4); + COLORS.put("burlywood", 0xDEB887); + COLORS.put("gray51", 0x828282); + COLORS.put("rosybrown1", 0xFFC1C1); + COLORS.put("lightyellow4", 0x8B8B7A); + COLORS.put("gray50", 0x7F7F7F); + COLORS.put("gray58", 0x949494); + COLORS.put("gray59", 0x969696); + COLORS.put("gray56", 0x8F8F8F); + COLORS.put("gray57", 0x919191); + COLORS.put("gray54", 0x8A8A8A); + COLORS.put("gray52", 0x858585); + COLORS.put("cornsilk", 0xFFF8DC); + COLORS.put("gray53", 0x878787); + COLORS.put("rosybrown", 0xBC8F8F); + COLORS.put("chartreuse", 0x7FFF00); + COLORS.put("firebrick", 0xB22222); + COLORS.put("gray62", 0x9E9E9E); + COLORS.put("gray61", 0x9C9C9C); + COLORS.put("yellow3", 0xCDCD00); + COLORS.put("olivedrab3", 0x9ACD32); + COLORS.put("gray67", 0xABABAB); + COLORS.put("yellow2", 0xEEEE00); + COLORS.put("olivedrab2", 0xB3EE3A); + COLORS.put("gray68", 0xADADAD); + COLORS.put("yellow1", 0xFFFF00); + COLORS.put("gray69", 0xB0B0B0); + COLORS.put("olivedrab4", 0x698B22); + COLORS.put("gray63", 0xA1A1A1); + COLORS.put("gray64", 0xA3A3A3); + COLORS.put("indianred1", 0xFF6A6A); + COLORS.put("gray66", 0xA8A8A8); + COLORS.put("palevioletred4", 0x8B475D); + COLORS.put("darkslategray2", 0x8DEEEE); + COLORS.put("indianred3", 0xCD5555); + COLORS.put("darkslategray3", 0x79CDCD); + COLORS.put("indianred2", 0xEE6363); + COLORS.put("darkslategray4", 0x528B8B); + COLORS.put("indianred4", 0x8B3A3A); + COLORS.put("palevioletred1", 0xFF82AB); + COLORS.put("palevioletred2", 0xEE799F); + COLORS.put("olivedrab1", 0xC0FF3E); + COLORS.put("palevioletred3", 0xCD6889); + COLORS.put("darkslategray1", 0x97FFFF); + COLORS.put("dimgrey", 0x696969); + COLORS.put("gray71", 0xB5B5B5); + COLORS.put("gray73", 0xBABABA); + COLORS.put("mediumaquamarine", 0x66CDAA); + COLORS.put("gray72", 0xB8B8B8); + COLORS.put("gray77", 0xC4C4C4); + COLORS.put("gray76", 0xC2C2C2); + COLORS.put("gray74", 0xBDBDBD); + COLORS.put("deepskyblue", 0x00BFFF); + COLORS.put("gray79", 0xC9C9C9); + COLORS.put("gray78", 0xC7C7C7); + COLORS.put("gray83", 0xD4D4D4); + COLORS.put("gray84", 0xD6D6D6); + COLORS.put("gray81", 0xCFCFCF); + COLORS.put("gray82", 0xD1D1D1); + COLORS.put("lightgray", 0xD3D3D3); + COLORS.put("maroon2", 0xEE30A7); + COLORS.put("maroon3", 0xCD2990); + COLORS.put("maroon1", 0xFF34B3); + COLORS.put("lightpink", 0xFFB6C1); + COLORS.put("maroon4", 0x8B1C62); + COLORS.put("slateblue", 0x6A5ACD); + COLORS.put("lemonchiffon1", 0xFFFACD); + COLORS.put("gray86", 0xDBDBDB); + COLORS.put("orange4", 0x8B5A00); + COLORS.put("orange3", 0xCD8500); + COLORS.put("lemonchiffon3", 0xCDC9A5); + COLORS.put("gray88", 0xE0E0E0); + COLORS.put("orange2", 0xEE9A00); + COLORS.put("lemonchiffon2", 0xEEE9BF); + COLORS.put("gray87", 0xDEDEDE); + COLORS.put("orange1", 0xFFA500); + COLORS.put("lemonchiffon4", 0x8B8970); + COLORS.put("gray89", 0xE3E3E3); + COLORS.put("darkgreen", 0x006400); + COLORS.put("darkslategray", 0x2F4F4F); + COLORS.put("gray91", 0xE8E8E8); + COLORS.put("lightpink3", 0xCD8C95); + COLORS.put("crimson", 0xDC143C); + COLORS.put("gray92", 0xEBEBEB); + COLORS.put("lightpink2", 0xEEA2AD); + COLORS.put("lemonchiffon", 0xFFFACD); + COLORS.put("gray93", 0xEDEDED); + COLORS.put("lightpink1", 0xFFAEB9); + COLORS.put("gray94", 0xF0F0F0); + COLORS.put("seashell", 0xFFF5EE); + COLORS.put("pink2", 0xEEA9B8); + COLORS.put("magenta1", 0xFF00FF); + COLORS.put("pink3", 0xCD919E); + COLORS.put("magenta2", 0xEE00EE); + COLORS.put("pink4", 0x8B636C); + COLORS.put("magenta3", 0xCD00CD); + COLORS.put("magenta4", 0x8B008B); + COLORS.put("lightpink4", 0x8B5F65); + COLORS.put("pink1", 0xFFB5C5); + COLORS.put("antiquewhite2", 0xEEDFCC); + COLORS.put("antiquewhite3", 0xCDC0B0); + COLORS.put("antiquewhite4", 0x8B8378); + COLORS.put("antiquewhite1", 0xFFEFDB); + COLORS.put("deeppink", 0xFF1493); + COLORS.put("gray99", 0xFCFCFC); + COLORS.put("gray98", 0xFAFAFA); + COLORS.put("gray97", 0xF7F7F7); + COLORS.put("gray96", 0xF5F5F5); + COLORS.put("whitesmoke", 0xF5F5F5); + COLORS.put("wheat", 0xF5DEB3); + COLORS.put("olivedrab", 0x6B8E23); + COLORS.put("mediumblue", 0x0000CD); + COLORS.put("wheat4", 0x8B7E66); + COLORS.put("darkgrey", 0xA9A9A9); + COLORS.put("wheat3", 0xCDBA96); + COLORS.put("wheat2", 0xEED8AE); + COLORS.put("wheat1", 0xFFE7BA); + COLORS.put("deepskyblue3", 0x009ACD); + COLORS.put("steelblue", 0x4682B4); + COLORS.put("deepskyblue4", 0x00688B); + COLORS.put("deepskyblue1", 0x00BFFF); + COLORS.put("deepskyblue2", 0x00B2EE); + } + /** - * Returns a LineNumberReader for fileObject. The file must - * be a text file. The charset is detected automatically. - * @param fileObject the file object that is to be read - * @return a reader for the text file - * @throws IOException if the file can't be found or read + * Returns a LineNumberReader for fileObject. The + * file must be a text file. The charset is detected automatically. + * + * @param fileObject the file object that is to be read + * @return a reader for the text file + * @throws IOException if the file can't be found or read */ public static LineNumberReader getTextReader(FileObject fileObject) throws IOException { try { @@ -91,10 +789,52 @@ public static LineNumberReader getTextReader(FileObject fileObject) throws IOExc } /** - * Returns a LineNumberReader for inputStream. The stream must - * be a character stream. The charset is detected automatically. - * @param stream the stream that is to be read - * @return a reader for the character stream + * Parses a color string and returns the corresponding {@link Color}, or {@code null} if unrecognized. + *

    + * Accepts Java color names (e.g. {@code "yellow"}), extended color names (e.g. {@code "navyblue"}), + * octal notation (e.g. {@code "0xFF0096"}), and hexadecimal notation (e.g. {@code "#FF0096"}). + * + * @param colorString the color string to parse + * @return the parsed color, or {@code null} if the string could not be parsed + */ + public static Color parseColor(String colorString) { + colorString = colorString.toLowerCase().replace(" ", ""); + + Color cl; + try { + Field field = Color.class.getField(colorString); + cl = (Color) field.get(null); + } catch (NoSuchFieldException e) { + cl = null; // Not defined + } catch (SecurityException e) { + cl = null; // Not defined + } catch (IllegalArgumentException e) { + cl = null; // Not defined + } catch (IllegalAccessException e) { + cl = null; // Not defined + } + if (cl == null) { + Integer colorInt = COLORS.get(colorString); + if (colorInt != null) { + cl = new Color(colorInt); + } + } + if (cl == null) { + try { + cl = Color.decode(colorString); + } catch (NumberFormatException e) { + cl = null; + } + } + return cl; + } + + /** + * Returns a LineNumberReader for inputStream. The + * stream must be a character stream. The charset is detected automatically. + * + * @param stream the stream that is to be read + * @return a reader for the character stream * @throws IOException if the stream can't be read */ public static LineNumberReader getTextReader(InputStream stream) throws IOException { @@ -104,11 +844,24 @@ public static LineNumberReader getTextReader(InputStream stream) throws IOExcept return reader; } + /** + * Wraps the given reader in a {@link LineNumberReader}. + * + * @param reader the reader to wrap + * @return a {@link LineNumberReader} wrapping the given reader + */ public static LineNumberReader getTextReader(Reader reader) { LineNumberReader lineNumberReader = new LineNumberReader(reader); return lineNumberReader; } + /** + * Parses an XML document from the given input stream. + * + * @param stream the input stream to parse + * @return the parsed {@link Document} + * @throws RuntimeException if the XML cannot be parsed or the stream cannot be read + */ public static Document getXMLDocument(InputStream stream) throws RuntimeException { try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); @@ -116,7 +869,8 @@ public static Document getXMLDocument(InputStream stream) throws RuntimeExceptio Document document = builder.parse(stream); return document; } catch (ParserConfigurationException ex) { - throw new RuntimeException(NbBundle.getMessage(ImportUtils.class, "ImportUtils.error_missing_document_instance_factory")); + throw new RuntimeException( + NbBundle.getMessage(ImportUtils.class, "ImportUtils.error_missing_document_instance_factory")); } catch (FileNotFoundException ex) { throw new RuntimeException(NbBundle.getMessage(ImportUtils.class, "ImportUtils.error_file_not_found")); } catch (SAXException ex) { @@ -126,6 +880,13 @@ public static Document getXMLDocument(InputStream stream) throws RuntimeExceptio } } + /** + * Parses an XML document from the given reader. + * + * @param reader the reader to parse + * @return the parsed {@link Document} + * @throws RuntimeException if the XML cannot be parsed or the reader cannot be read + */ public static Document getXMLDocument(Reader reader) throws RuntimeException { try { DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); @@ -133,7 +894,8 @@ public static Document getXMLDocument(Reader reader) throws RuntimeException { Document document = builder.parse(new InputSource(reader)); return document; } catch (ParserConfigurationException ex) { - throw new RuntimeException(NbBundle.getMessage(ImportUtils.class, "ImportUtils.error_missing_document_instance_factory")); + throw new RuntimeException( + NbBundle.getMessage(ImportUtils.class, "ImportUtils.error_missing_document_instance_factory")); } catch (FileNotFoundException ex) { throw new RuntimeException(NbBundle.getMessage(ImportUtils.class, "ImportUtils.error_file_not_found")); } catch (SAXException ex) { @@ -143,6 +905,13 @@ public static Document getXMLDocument(Reader reader) throws RuntimeException { } } + /** + * Parses an XML document from the given file object. + * + * @param fileObject the file object to parse + * @return the parsed {@link Document} + * @throws RuntimeException if the file cannot be found or the XML cannot be parsed + */ public static Document getXMLDocument(FileObject fileObject) throws RuntimeException { try { InputStream stream = fileObject.getInputStream(); @@ -152,6 +921,15 @@ public static Document getXMLDocument(FileObject fileObject) throws RuntimeExcep } } + /** + * Creates a streaming XML reader from the given reader. + *

    + * Validation is disabled for performance. + * + * @param reader the reader to read XML from + * @return a configured {@link XMLStreamReader} + * @throws RuntimeException if the XML stream cannot be created + */ public static XMLStreamReader getXMLReader(Reader reader) { try { XMLInputFactory inputFactory = XMLInputFactory.newInstance(); @@ -161,7 +939,8 @@ public static XMLStreamReader getXMLReader(Reader reader) { inputFactory.setXMLReporter(new XMLReporter() { @Override - public void report(String message, String errorType, Object relatedInformation, Location location) throws XMLStreamException { + public void report(String message, String errorType, Object relatedInformation, Location location) + throws XMLStreamException { throw new RuntimeException("Error:" + errorType + ", message : " + message); //System.out.println("Error:" + errorType + ", message : " + message); } @@ -172,15 +951,114 @@ public void report(String message, String errorType, Object relatedInformation, } } - public static FileObject getArchivedFile(FileObject fileObject) { + /** + * Returns true if the given file object is a supported archive (zip, jar, gz, bz2). + *

    + * Excel files ({@code .xls*}) are explicitly excluded even though they are technically ZIP archives. + * + * @param fileObject the file object to check + * @return true if the file is a supported archive, false otherwise + */ + public static boolean isArchiveFile(FileObject fileObject) { + if (fileObject == null) { + return false; + } + + if (fileObject.getExt().toLowerCase().startsWith("xls")) {//Seems to break it otherwise! + return false; + } + + boolean isGz = fileObject.getExt().equalsIgnoreCase("gz"); + boolean isBzip = fileObject.getExt().equalsIgnoreCase("bz2"); + + if (isGz || isBzip) { + return true; + } + + return FileUtil.isArchiveFile(fileObject); + } + + /** + * Returns the content file object extracted from an archive, or the original file object if it is not an archive. + *

    + * Supports zip, jar, gz, bz2, and tar.gz / tar.bz2 archives. Extracted files are written to a temporary + * directory and deleted on JVM exit. + * + * @param fileObject the file object to extract if it is an archive + * @return the content file object, or the original file object if not an archive or extraction failed + */ + public static FileObject getArchivedFile(final FileObject fileObject) { + if (!isArchiveFile(fileObject)) { + return fileObject; + } + + FileObject result = fileObject; + + // ZIP and JAR archives if (FileUtil.isArchiveFile(fileObject)) { - fileObject = FileUtil.getArchiveRoot(fileObject).getChildren()[0]; + FileObject[] children = FileUtil.getArchiveRoot(fileObject).getChildren(); + if (children.length > 0) { + result = children[0]; + } + } else { // GZ or BZIP2 archives + boolean isGz = fileObject.getExt().equalsIgnoreCase("gz"); + boolean isBzip = fileObject.getExt().equalsIgnoreCase("bz2"); + if (isGz || isBzip) { + try { + String[] splittedFileName = fileObject.getName().split("\\."); + if (splittedFileName.length < 2) { + return fileObject; + } + + String fileExt1 = splittedFileName[splittedFileName.length - 1]; + String fileExt2 = splittedFileName[splittedFileName.length - 2]; + + File tempFile; + if (fileExt1.equalsIgnoreCase("tar")) { + String fname = fileObject.getName().replaceAll("\\.tar$", ""); + fname = fname.replace(fileExt2, ""); + tempFile = File.createTempFile(fname, "." + fileExt2); + // Untar & unzip + if (isGz) { + tempFile = getGzFile(fileObject, tempFile, true); + } else { + tempFile = getBzipFile(fileObject, tempFile, true); + } + } else { + String fname = fileObject.getName(); + fname = fname.replace(fileExt1, ""); + tempFile = File.createTempFile(fname, "." + fileExt1); + // Unzip + if (isGz) { + tempFile = getGzFile(fileObject, tempFile, false); + } else { + tempFile = getBzipFile(fileObject, tempFile, false); + } + } + tempFile.deleteOnExit(); + tempFile = FileUtil.normalizeFile(tempFile); + result = FileUtil.toFileObject(tempFile); + } catch (IOException ex) { + Exceptions.printStackTrace(ex); + } + } } - return fileObject; + + if (result == null) { + result = fileObject;//Never return null if the archive is empty, broken or anything + } + + return result; } /** - * Uncompress a Bzip2 file. + * Decompresses a bzip2-compressed file to the specified output file. + * + * @param in the bzip2-compressed source file object + * @param out the destination file to write the decompressed content to + * @param isTar true if the compressed content is a tar archive (tar header is skipped) + * @return the output file + * @throws IOException if an I/O error occurs during decompression */ public static File getBzipFile(FileObject in, File out, boolean isTar) throws IOException { @@ -241,7 +1119,13 @@ public static File getBzipFile(FileObject in, File out, boolean isTar) throws IO } /** - * Uncompress a GZIP file. + * Decompresses a gzip-compressed file to the specified output file. + * + * @param in the gzip-compressed source file object + * @param out the destination file to write the decompressed content to + * @param isTar true if the compressed content is a tar archive (tar header is skipped) + * @return the output file + * @throws IOException if an I/O error occurs during decompression */ public static File getGzFile(FileObject in, File out, boolean isTar) throws IOException { diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/Issue.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/Issue.java index 42aee611dd..9ff2a959c5 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/Issue.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/Issue.java @@ -38,64 +38,126 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.io.importer.api; /** - * Issue are logged and classified by Report to describe a problem encoutered during - * import process. Fill issues as Exceptions. + * Issue are logged and classified by Report to describe a problem + * encountered during import process. + *

    + * Issues have a level of severity based on {@link Level}. The + * CRITICAL level is by default configured in {@link Report} to + * throw an exception and stop the import process. Other levels are logged and + * presented to the user. * * @author Mathieu Bastian + * @see Report */ public final class Issue { - public enum Level { - - INFO(100), - WARNING(200), - SEVERE(500), - CRITICAL(1000); - private final int levelInt; - - Level(int levelInt) { - this.levelInt = levelInt; - } - - public int toInteger() { - return levelInt; - } - } private final Throwable throwable; private final String message; private final Level level; + /** + * Constructs a new issue with a throwable and a level. + *

    + * The message is set based on throwable. + * + * @param throwable throwable + * @param level level + */ public Issue(Throwable throwable, Level level) { this.throwable = throwable; this.level = level; this.message = throwable.getMessage(); } + /** + * Constructs a new issue with a message, level and throwable. + * + * @param message message + * @param level level + * @param throwable throwable + */ public Issue(String message, Level level, Throwable throwable) { this.throwable = throwable; this.level = level; this.message = message; } + /** + * Constructs a new issue with a message and a level. + * + * @param message message + * @param level level + */ public Issue(String message, Level level) { this.message = message; this.level = level; this.throwable = null; } + /** + * Returns this issue's message. + * + * @return message + */ public String getMessage() { return message; } + /** + * Returns this issue's level. + * + * @return level + */ public Level getLevel() { return level; } + /** + * Returns this issue's throwable. + * + * @return throwable or null if unset + */ public Throwable getThrowable() { return throwable; } + + @Override + public String toString() { + return "Issue{" + "message=" + message + ", level=" + level + '}'; + } + + public enum Level { + + /** Informational message; does not indicate a problem. */ + INFO(100), + /** A potential problem that does not prevent the import from completing. */ + WARNING(200), + /** A significant problem that may affect the import result. */ + SEVERE(500), + /** + * A fatal problem that, by default, causes the import to be aborted by throwing a + * {@link RuntimeException}. + */ + CRITICAL(1000); + + private final int levelInt; + + Level(int levelInt) { + this.levelInt = levelInt; + } + + /** + * Returns the integer value of this level, used for severity comparisons. + * + * @return integer severity value + */ + public int toInteger() { + return levelInt; + } + } } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/MetadataDraft.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/MetadataDraft.java new file mode 100644 index 0000000000..be56311338 --- /dev/null +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/MetadataDraft.java @@ -0,0 +1,114 @@ +package org.gephi.io.importer.api; + +import org.gephi.project.api.Workspace; + +/** + * Draft metadata, hosted by import containers to represent graph metadata. + * Processors will process this metadata and set it to the workspace's metadata. + *

    + * Use the provided builder to create a new instance:

    MetadataDraft.builder().setDescription("desc").setTitle("title").build()
    + * + * @author Mathieu Bastian + * @see ContainerLoader + * @see Workspace#getWorkspaceMetadata() + */ +public interface MetadataDraft { + + /** + * Create a new builder. + * + * @return new builder + */ + static Builder builder() { + return new Builder(); + } + + class Builder { + + private String title; + private String description; + + private Builder() { + } + + /** + * Builds a new instance of MetadataDraft with the provided title and description. + * + * @return new instance of MetadataDraft + */ + public MetadataDraft build() { + return new MetadataDraft() { + @Override + public String getTitle() { + return title; + } + + @Override + public String getDescription() { + return description; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + MetadataDraft that = (MetadataDraft) o; + + if (getTitle() != null ? !getTitle().equals(that.getTitle()) : that.getTitle() != null) { + return false; + } + return getDescription() != null ? getDescription().equals(that.getDescription()) : + that.getDescription() == null; + } + + @Override + public int hashCode() { + int result = getTitle() != null ? getTitle().hashCode() : 0; + result = 31 * result + (getDescription() != null ? getDescription().hashCode() : 0); + return result; + } + }; + } + + /** + * Sets the graph title. + * + * @param title graph title + * @return this builder + */ + public Builder title(String title) { + this.title = title; + return this; + } + + /** + * Sets the graph description. + * + * @param description graph description + * @return this builder + */ + public Builder description(String description) { + this.description = description; + return this; + } + } + + /** + * Returns the graph title. + * + * @return graph title or null if not set + */ + String getTitle(); + + /** + * Returns the graph description. + * + * @return graph description or null if not set + */ + String getDescription(); +} diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/NodeDraft.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/NodeDraft.java index a3bf91d0a0..30dbe859d1 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/NodeDraft.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/NodeDraft.java @@ -39,36 +39,98 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.api; /** * Draft node, hosted by import containers to represent nodes found when - * importing. - * Processors decide if this node will finally be appended to the - * graph or not. + * importing. Processors decide if this node will finally be + * appended to the graph or not. * * @author Mathieu Bastian * @see ContainerLoader */ public interface NodeDraft extends ElementDraft { - public float getX(); - - public float getY(); - - public float getZ(); - - public float getSize(); - - public boolean isFixed(); - - public void setX(float x); - - public void setY(float y); - - public void setZ(float z); - - public void setSize(float size); - - public void setFixed(boolean fixed); + /** + * Returns this node's X position. + * + * @return x position + */ + float getX(); + + /** + * Sets this node's X position. + * + * @param x x position + */ + void setX(float x); + + /** + * Returns this node's Y position. + * + * @return y position + */ + float getY(); + + /** + * Sets this node's Y position. + * + * @param y y position + */ + void setY(float y); + + /** + * Returns this node's Z position. + * + * @return z position + */ + float getZ(); + + /** + * Sets this node's Z position. + * + * @param z z position + */ + void setZ(float z); + + /** + * Returns this node's size. + * + * @return size + */ + float getSize(); + + /** + * Sets this node's size. + * + * @param size size + */ + void setSize(float size); + + /** + * Returns whether this node's position is fixed. + *

    + * Default is false. + * + * @return true if fixed, false otherwise + */ + boolean isFixed(); + + /** + * Sets whether this node's position is fixed. + *

    + * This flag is used during layout to settle some specific nodes. If set at + * true, the layout algorithms won't modify the node's position. + * + * @param fixed true if fixed, false otherwise + */ + void setFixed(boolean fixed); + + /** + * Returns true if this node has been automatically created. + * + * @return true if automatically created, false otherwise + */ + boolean isCreatedAuto(); } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/PropertiesAssociations.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/PropertiesAssociations.java index c178f49866..b6a78b312a 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/PropertiesAssociations.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/PropertiesAssociations.java @@ -38,121 +38,97 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.io.importer.api; import java.io.Serializable; -import java.util.LinkedList; -import java.util.List; +import java.util.HashMap; +import java.util.Map; /** - * - * @author Mathieu Bastian + * Maps column titles to known node and edge properties for database importers. + *

    + * This allows importers to declare which database column corresponds to which graph property (e.g. id, label, + * color, position). */ public final class PropertiesAssociations implements Serializable { - public enum NodeProperties { - - X, Y, Z, R, G, B, COLOR, SIZE, ID, LABEL, FIXED, START, END, START_OPEN, END_OPEN; - } - - public enum EdgeProperties { - - R, G, B, COLOR, WEIGHT, ID, LABEL, ALPHA, SOURCE, TARGET, START, END, START_OPEN, END_OPEN; - } - //PropertiesAssociations association - private List> nodePropertyAssociations = new LinkedList>(); - private List> edgePropertyAssociations = new LinkedList>(); - - public void addEdgePropertyAssociation(EdgeProperties property, String title) { - PropertyAssociation association = new PropertyAssociation(property, title); - /*if (edgePropertyAssociations.contains(association)) { - return; - } - //Avoid any double - for (Iterator> itr = edgePropertyAssociations.iterator(); itr.hasNext();) { - PropertyAssociation p = itr.next(); - if (p.getTitle().equalsIgnoreCase(association.getTitle())) { - itr.remove(); - } else if (p.getProperty().equals(association.getProperty())) { - itr.remove(); - } - }*/ - edgePropertyAssociations.add(association); - } + private final Map titleToNodeProperty = new HashMap<>(); + private final Map titleToEdgeProperty = new HashMap<>(); + /** + * Associates a column title with a node property. + * + * @param property the node property to associate + * @param title the column title that maps to this property + */ public void addNodePropertyAssociation(NodeProperties property, String title) { - PropertyAssociation association = new PropertyAssociation(property, title); - /*if (nodePropertyAssociations.contains(association)) { - return; - } - //Avoid any double - for (Iterator> itr = nodePropertyAssociations.iterator(); itr.hasNext();) { - PropertyAssociation p = itr.next(); - if (p.getTitle().equalsIgnoreCase(association.getTitle())) { - itr.remove(); - } else if (p.getProperty().equals(association.getProperty())) { - itr.remove(); - } - }*/ - nodePropertyAssociations.add(association); + titleToNodeProperty.put(title, property); } - PropertyAssociation[] getEdgePropertiesAssociation() { - return edgePropertyAssociations.toArray(new PropertyAssociation[0]); - } - - PropertyAssociation[] getNodePropertiesAssociation() { - return nodePropertyAssociations.toArray(new PropertyAssociation[0]); + /** + * Associates a column title with an edge property. + * + * @param property the edge property to associate + * @param title the column title that maps to this property + */ + public void addEdgePropertyAssociation(EdgeProperties property, String title) { + titleToEdgeProperty.put(title, property); } + /** + * Returns the node property associated with the given column title, or {@code null} if none is found. + * + * @param title column title + * @return node property or null + */ public NodeProperties getNodeProperty(String title) { - for (PropertyAssociation p : nodePropertyAssociations) { - if (p.getTitle().equalsIgnoreCase(title)) { - return p.getProperty(); - } - } - return null; + return titleToNodeProperty.getOrDefault(title, null); } + /** + * Returns the edge property associated with the given column title, or {@code null} if none is found. + * + * @param title column title + * @return edge property or null + */ public EdgeProperties getEdgeProperty(String title) { - for (PropertyAssociation p : edgePropertyAssociations) { - if (p.getTitle().equalsIgnoreCase(title)) { - return p.getProperty(); - } - } - return null; + return titleToEdgeProperty.getOrDefault(title, null); } - public String getNodePropertyTitle(NodeProperties property) { - for (PropertyAssociation p : nodePropertyAssociations) { - if (p.getProperty().equals(property)) { - return p.getTitle(); - } + /** + * Returns a human-readable summary of all node and edge property associations. + * + * @return formatted string listing all associations + */ + public String getInfos() { + StringBuilder builder = new StringBuilder("***Node Properties Associations***\n"); + for (Map.Entry entry : titleToNodeProperty.entrySet()) { + builder.append("Property ") + .append(entry.getValue().name()) + .append(" = ") + .append(entry.getKey()) + .append(" Column\n"); + } + builder.append("*********************************\n"); + builder.append("***Edge Properties Associations***\n"); + for (Map.Entry entry : titleToEdgeProperty.entrySet()) { + builder.append("Property ") + .append(entry.getValue().name()) + .append(" = ") + .append(entry.getKey()) + .append(" Column\n"); } - return null; + builder.append("*********************************\n"); + return builder.toString(); } - public String getEdgePropertyTitle(EdgeProperties property) { - for (PropertyAssociation p : edgePropertyAssociations) { - if (p.getProperty().equals(property)) { - return p.getTitle(); - } - } - return null; + public enum NodeProperties { + X, Y, Z, R, G, B, COLOR, SIZE, ID, LABEL, FIXED, START, END, START_OPEN, END_OPEN } - public String getInfos() { - String res = "***Node Properties Associations***\n"; - for (PropertyAssociation p : nodePropertyAssociations) { - res += "Property " + p.getProperty().toString() + " = " + p.getTitle() + " Column\n"; - } - res += "*********************************\n"; - res = "***Edge Properties Associations***\n"; - for (PropertyAssociation p : edgePropertyAssociations) { - res += "Property " + p.getProperty().toString() + " = " + p.getTitle() + " Column\n"; - } - res += "*********************************\n"; - return res; + public enum EdgeProperties { + R, G, B, COLOR, WEIGHT, ID, LABEL, ALPHA, SOURCE, TARGET, START, END, START_OPEN, END_OPEN } } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/PropertyAssociation.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/PropertyAssociation.java deleted file mode 100644 index a3bb00842e..0000000000 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/PropertyAssociation.java +++ /dev/null @@ -1,94 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.io.importer.api; - -import java.io.Serializable; - -/** - * - * @author Mathieu Bastian - */ -public final class PropertyAssociation implements Serializable { - - private final Property property; - private final String title; - private volatile int hashCode = 0; //Cache hashcode - - PropertyAssociation(Property property, String title) { - this.property = property; - this.title = title; - } - - public Property getProperty() { - return property; - } - - public String getTitle() { - return title; - } - - @Override - public boolean equals(Object obj) { - if (obj == null || !(obj instanceof PropertyAssociation)) { - return false; - } - if (obj == this) { - return true; - } - PropertyAssociation foreign = (PropertyAssociation) obj; - if (foreign.title.equals(title) && foreign.property.equals(property)) { - return true; - } - return false; - } - - @Override - public int hashCode() { - if (hashCode == 0) { - int res = 17; - res = 37 * res + title.hashCode(); - res = 37 * res + property.hashCode(); - hashCode = res; - } - return hashCode; - } -} diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/Report.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/Report.java index 9d80a61153..43d9f0331f 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/Report.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/api/Report.java @@ -39,107 +39,260 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.api; +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.io.LineNumberReader; import java.util.ArrayList; +import java.util.Collection; import java.util.Iterator; import java.util.List; -import java.util.Queue; -import java.util.concurrent.ConcurrentLinkedQueue; import org.gephi.io.importer.api.Issue.Level; +import org.openide.util.Exceptions; /** - * Report is a log and issue container. Filled with information, details, minor or major issues, it is stored in an issue list - * and can be retrieved to present issues to end-users. Behavior is the same as a simple logging library. + * Report is a log and issue container. Filled with information, details, minor + * or major issues, it is stored in an issue list and can be retrieved to + * present issues to end-users. Behavior is the same as a simple logging + * library. * * @author Mathieu Bastian */ public final class Report { - private final Queue entries = new ConcurrentLinkedQueue(); + //File + private final File file; private Issue.Level exceptionLevel = Issue.Level.CRITICAL; + private Writer writer; + private boolean empty = true; + private boolean hasIssues = false; + + public Report() { + this("tempreport"); + } + + public Report(String name) { + File f = null; + try { + f = File.createTempFile(name, Long.toString(System.nanoTime())); + f.deleteOnExit(); + } catch (IOException ex) { + Exceptions.printStackTrace(ex); + } finally { + file = f; + } + } + + /** + * Returns true if this report has no entries at all (neither messages nor issues). + * + * @return true if the report is empty, false otherwise + */ + public boolean isEmpty() { + return empty; + } + + /** + * Returns true if at least one issue has been logged in this report. + * + * @return true if the report contains issues, false otherwise + */ + public boolean hasIssues() { + return hasIssues; + } + + /** + * Free resources. + */ + public synchronized void clean() { + if (file.exists()) { + file.delete(); + } + } + + /** + * Closes writing. + */ + public synchronized void close() { + if (writer != null) { + try { + writer.close(); + writer = null; + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + } /** * Log an information message in the report. + * * @param message the message to write in the report * @throws NullPointerException if message is null */ - public void log(String message) { - entries.add(new ReportEntry(message)); + public synchronized void log(String message) { + try { + if (writer == null) { + writer = new Writer(file); + } + writer.append(new ReportEntry(message)); + empty = false; + } catch (IOException ex) { + throw new RuntimeException(ex); + } } - public void append(Report report) { - entries.addAll(report.entries); + /** + * Appends all entries in report to this report. + * + * @param report report to read entries from + */ + public synchronized void append(Report report) { + if (report.writer != null) { + report.close(); + } + Reader r = null; + try { + if (writer == null) { + writer = new Writer(file); + } + r = new Reader(report.file); + for (; r.hasNext(); ) { + ReportEntry re = r.next(); + writer.append(re); + empty = false; + if (re.level != null) { + hasIssues = true; + } + } + } catch (IOException ex) { + if (r != null) { + r.close(); + } + throw new RuntimeException(ex); + } finally { + if (r != null) { + r.close(); + } + } } /** * Log an issue in the report. + * * @param issue the issue to write in the report * @throws NullPointerException if issue is null */ - public void logIssue(Issue issue) { - entries.add(new ReportEntry(issue)); - if (issue.getLevel().toInteger() >= exceptionLevel.toInteger()) { - if (issue.getThrowable() != null) { - throw new RuntimeException(issue.getMessage(), issue.getThrowable()); - } else { - throw new RuntimeException(issue.getMessage()); + public synchronized void logIssue(Issue issue) { + try { + if (writer == null) { + writer = new Writer(file); + } + writer.append(new ReportEntry(issue)); + empty = false; + hasIssues = true; + + if (issue.getLevel().toInteger() >= exceptionLevel.toInteger()) { + writer.close(); + if (issue.getThrowable() != null) { + throw new RuntimeException(issue.getMessage(), issue.getThrowable()); + } else { + throw new RuntimeException(issue.getMessage()); + } } + } catch (IOException ex) { + throw new RuntimeException(ex); } } /** * Returns all issues written in the report. + * + * @param limit maximum number of issuers * @return a collection of all issues written in the report */ - public List getIssues() { - List res = new ArrayList(); - for (ReportEntry re : entries) { - if (re.issue != null) { - res.add(re.issue); + public synchronized Iterator getIssues(int limit) { + if (writer != null) { + close(); + } + Reader reader = null; + try { + reader = new Reader(file); + return new IssueIterator(reader, limit); + } catch (IOException ex) { + if (reader != null) { + reader.close(); } + throw new RuntimeException(ex); } - return res; } /** - * Returns the report logs and issues, presented as HTML code. - * @return a string of HTML code where all messages and issues are written + * Returns all issues written in the report as a collection + * + * @param limit maximum number of issuers + * @return a collection of all issues written in the report */ - public String getHtml() { - StringBuilder builder = new StringBuilder(); - for (ReportEntry re : entries) { - if (re.issue != null) { - builder.append(re.issue.getMessage()); - builder.append("
    "); - } else { - builder.append(re.message); - builder.append("
    "); - } + public synchronized Collection getIssuesList(int limit) { + List issues = new ArrayList<>(); + Iterator itr = getIssues(limit); + while (itr.hasNext()) { + issues.add(itr.next()); } - return builder.toString(); + return issues; } /** * Returns the report logs and issues, presented as basic multi-line text. - * @return a string of all messages and issues written in the report, one per line + * + * @return a string of all messages and issues written in the report, one + * per line */ - public String getText() { + public synchronized String getText() { + return getText(false); + } + + /** + * Returns the report logs and issues, presented as basic multi-line text. + * + * @param includeIssues whether to include also issues + * @return a string of all messages and issues written in the report, one + * per line + */ + public synchronized String getText(boolean includeIssues) { + if (writer != null) { + close(); + } StringBuilder builder = new StringBuilder(); - for (ReportEntry re : entries) { - if (re.issue != null) { - builder.append(re.issue.getMessage()); - builder.append("\n"); - } else { - builder.append(re.message); - builder.append("\n"); + Reader r = null; + try { + r = new Reader(file); + for (; r.hasNext(); ) { + ReportEntry re = r.next(); + if (includeIssues || re.level == null) { + builder.append(re.message); + builder.append("\n"); + } + } + } catch (IOException ex) { + if (r != null) { + r.close(); } + throw new RuntimeException(ex); } return builder.toString(); } /** - * Get the current exception level for the report. Default is Level.CRITICAL. + * Get the current exception level for the report. Default is + * Level.CRITICAL. + * * @return the current exception level */ public Level getExceptionLevel() { @@ -147,92 +300,167 @@ public Level getExceptionLevel() { } /** - * Set the level of exception for the report. If a reported issue has his level greater or equal - * as exceptionLevel, an exception is thrown. Default is Level.CRITICAL - * @param exceptionLevel the exception level where exceptions are to be thrown + * Set the level of exception for the report. If a reported issue has his + * level greater or equal as exceptionLevel, an exception is + * thrown. Default is Level.CRITICAL + * + * @param exceptionLevel the exception level where exceptions are to be + * thrown */ public void setExceptionLevel(Level exceptionLevel) { this.exceptionLevel = exceptionLevel; + } - private class ReportEntry { + /** + * Inner report entry class. + */ + private static class ReportEntry { - private final Issue issue; + private final Level level; private final String message; public ReportEntry(Issue issue) { - this.issue = issue; - this.message = null; + this.level = issue.getLevel(); + this.message = issue.getMessage(); } public ReportEntry(String message) { this.message = message; - this.issue = null; - } - } - - public void pruneReport(int limit) { - if (entries.size() > limit) { - int step = 0; - while (entries.size() > limit && step < 3) { - if (step == 0) { - ReportEntry lastIssue = null; - for (Iterator itr = entries.iterator(); itr.hasNext();) { - ReportEntry issue = itr.next(); - if (issue.issue != null && issue.issue.getLevel().equals(Issue.Level.INFO)) { - lastIssue = issue; - itr.remove(); - } - } - if (lastIssue != null) { - entries.add(lastIssue); - entries.add(new ReportEntry(new Issue("More issues not listed...", Issue.Level.INFO))); - } - step = 1; - } else if (step == 1) { - ReportEntry lastIssue = null; - for (Iterator itr = entries.iterator(); itr.hasNext();) { - ReportEntry issue = itr.next(); - if (issue.issue != null && issue.issue.getLevel().equals(Issue.Level.WARNING)) { - lastIssue = issue; - itr.remove(); - } - } - if (lastIssue != null) { - entries.add(lastIssue); - entries.add(new ReportEntry(new Issue("More issues not listed...", Issue.Level.WARNING))); - } - step = 2; - } else if (step == 2) { - ReportEntry lastIssue = null; - for (Iterator itr = entries.iterator(); itr.hasNext();) { - ReportEntry issue = itr.next(); - if (issue.issue != null && issue.issue.getLevel().equals(Issue.Level.INFO)) { - lastIssue = issue; - itr.remove(); - } - } - if (lastIssue != null) { - entries.add(lastIssue); - entries.add(new ReportEntry(new Issue("More issues not listed...", Issue.Level.INFO))); - } - step = 3; - } else if (step == 3) { - ReportEntry lastIssue = null; - for (Iterator itr = entries.iterator(); itr.hasNext();) { - ReportEntry issue = itr.next(); - if (issue.issue == null) { - lastIssue = issue; - itr.remove(); - } - } - if (lastIssue != null) { - entries.add(lastIssue); - entries.add(new ReportEntry("More messages not listed...")); - } - step = 4; + this.level = null; + } + } + + /** + * Writer sub-class. + */ + private static class Writer { + + private final BufferedWriter writer; + + public Writer(File file) throws IOException { + FileWriter fileWriter = new FileWriter(file, true); + writer = new BufferedWriter(fileWriter); + } + + public void append(ReportEntry entry) throws IOException { + Level level = entry.level; + if (level != null) { + writer.append(level.toString()); + } + writer.append(";"); + writer.append(entry.message); + writer.append("\n"); + } + + public void close() throws IOException { + writer.flush(); + writer.close(); + } + } + + /** + * Reader sub-class. + */ + private static class Reader implements Iterator { + + private final BufferedReader reader; + private String pointer; + private boolean closed; + + public Reader(File file) throws IOException { + FileReader fileReader = new FileReader(file); + reader = new LineNumberReader(fileReader); + } + + @Override + public boolean hasNext() { + if (closed) { + return false; + } + try { + pointer = reader.readLine(); + if (pointer != null) { + return true; + } + } catch (IOException ex) { + throw new RuntimeException(ex); + } + try { + reader.close(); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + return false; + } + + @Override + public ReportEntry next() { + if (pointer.startsWith(";")) { + return new ReportEntry(pointer.substring(1)); + } else { + int index = pointer.indexOf(";"); + if (index == -1) { + return new ReportEntry(pointer); + } else { + String levelStr = pointer.substring(0, index); + String message = pointer.substring(index + 1); + return new ReportEntry(new Issue(message, Level.valueOf(levelStr))); + } + } + } + + public void close() { + try { + reader.close(); + } catch (IOException ex2) { + throw new RuntimeException(ex2); + } + pointer = null; + closed = true; + } + + @Override + public void remove() { + throw new UnsupportedOperationException(); + } + } + + private static class IssueIterator implements Iterator { + + private final Reader itr; + private final int limit; + private ReportEntry next; + private int count; + + public IssueIterator(Reader itr, int limit) { + this.itr = itr; + this.limit = limit; + } + + @Override + public boolean hasNext() { + while (itr.hasNext()) { + next = itr.next(); + if (next.level != null) { + return true; } } + return false; + } + + @Override + public Issue next() { + Issue res = new Issue(next.message, next.level); + if (++count == limit) { + itr.close(); + } + return res; + } + + @Override + public void remove() { + throw new UnsupportedOperationException(); } } } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ColumnDraftImpl.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ColumnDraftImpl.java index f71a4e740b..01b90032ec 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ColumnDraftImpl.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ColumnDraftImpl.java @@ -39,15 +39,16 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.impl; -import org.gephi.attribute.api.AttributeUtils; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.TimeRepresentation; +import org.gephi.graph.api.types.TimeMap; +import org.gephi.graph.api.types.TimeSet; import org.gephi.io.importer.api.ColumnDraft; +import org.gephi.io.importer.api.ContainerUnloader; -/** - * - * @author mbastian - */ public class ColumnDraftImpl implements ColumnDraft { protected final int index; @@ -74,6 +75,11 @@ public String getTitle() { return title; } + @Override + public void setTitle(String title) { + this.title = title; + } + @Override public Class getTypeClass() { return typeClass; @@ -84,27 +90,60 @@ public Object getDefaultValue() { return defaultValue; } + @Override + public void setDefaultValue(Object value) { + this.defaultValue = value; + } + protected int getIndex() { return index; } @Override - public void setTitle(String title) { - this.title = title; + public void setDefaultValueString(String value) { + this.defaultValue = AttributeUtils.parse(value, typeClass); } @Override - public void setDefaultValue(Object value) { - this.defaultValue = value; + public Class getResolvedTypeClass(ContainerUnloader container) { + TimeRepresentation timeRepresentation = container.getTimeRepresentation(); + Class typeClassFinal = typeClass; + //Get final dynamic type: + if (dynamic && !TimeSet.class.isAssignableFrom(typeClassFinal) && + !TimeMap.class.isAssignableFrom(typeClassFinal)) { + if (timeRepresentation.equals(TimeRepresentation.TIMESTAMP)) { + typeClassFinal = AttributeUtils.getTimestampMapType(typeClassFinal); + } else { + typeClassFinal = AttributeUtils.getIntervalMapType(typeClassFinal); + } + } + + return typeClassFinal; } @Override - public void setDefaultValueString(String value) { - this.defaultValue = AttributeUtils.parse(value, typeClass); + public Object getResolvedDefaultValue(ContainerUnloader container) { + Class resolvedTypeClass = getResolvedTypeClass(container); + + Object resolvedDefaultValue = defaultValue; + if (resolvedDefaultValue != null && !resolvedTypeClass.isAssignableFrom(resolvedDefaultValue.getClass())) { + try { + resolvedDefaultValue = AttributeUtils.parse(resolvedDefaultValue.toString(), resolvedTypeClass); + } catch (Exception e) { + //Failed to parse + } + } + + return resolvedDefaultValue; } @Override public boolean isDynamic() { return dynamic; } + + @Override + public String toString() { + return title + " (" + typeClass.toString() + ")"; + } } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/EdgeDraftImpl.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/EdgeDraftImpl.java index c55fa85e39..0624ec5ab1 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/EdgeDraftImpl.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/EdgeDraftImpl.java @@ -39,15 +39,16 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.impl; import org.gephi.io.importer.api.ColumnDraft; import org.gephi.io.importer.api.EdgeDirection; import org.gephi.io.importer.api.EdgeDraft; import org.gephi.io.importer.api.NodeDraft; +import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class EdgeDraftImpl extends ElementDraftImpl implements EdgeDraft { @@ -63,25 +64,20 @@ public EdgeDraftImpl(ImportContainerImpl container, String id) { super(container, id); } - //SETTERS - @Override - public void setWeight(double weight) { - this.weight = weight; - } - + //GETTERS @Override - public void setType(Object type) { - this.type = type; + public NodeDraftImpl getSource() { + return source; } @Override - public void setDirection(EdgeDirection direction) { - this.direction = direction; + public void setSource(NodeDraft nodeSource) { + this.source = (NodeDraftImpl) nodeSource; } @Override - public void setSource(NodeDraft nodeSource) { - this.source = (NodeDraftImpl) nodeSource; + public NodeDraftImpl getTarget() { + return target; } @Override @@ -89,25 +85,37 @@ public void setTarget(NodeDraft nodeTarget) { this.target = (NodeDraftImpl) nodeTarget; } - //GETTERS @Override - public NodeDraftImpl getSource() { - return source; + public double getWeight() { + return weight; } + //SETTERS @Override - public NodeDraftImpl getTarget() { - return target; + public void setWeight(double weight) { + if (getGraphInterval() != null || getGraphTimestamp() != null) { + // Slice mode + ColumnDraft draftColumn = container.getEdgeColumn("weight"); + if (draftColumn != null && draftColumn.isDynamic()) { + if (getGraphInterval() != null) { + setValue("weight", weight, getGraphInterval().getLow(), getGraphInterval().getHigh()); + } else { + setValue("weight", weight, getGraphTimestamp()); + } + return; + } + } + this.weight = weight; } @Override - public double getWeight() { - return weight; + public EdgeDirection getDirection() { + return direction; } @Override - public EdgeDirection getDirection() { - return direction; + public void setDirection(EdgeDirection direction) { + this.direction = direction; } @Override @@ -115,12 +123,14 @@ public Object getType() { return type; } + @Override + public void setType(Object type) { + this.type = type; + } + @Override public boolean isSelfLoop() { - if (source != null && source == target) { - return true; - } - return false; + return source != null && source == target; } @Override @@ -141,4 +151,37 @@ ColumnDraft getColumn(String key, Class type) { ColumnDraft getColumn(String key) { return container.getEdgeColumn(key); } + + @Override + public Iterable getColumns() { + return container.getEdgeColumns(); + } + + @Override + String getElementClassName() { + return NbBundle.getMessage(EdgeDraftImpl.class, "ElementClassName.Edge"); + } + + @Override + public String toString() { + StringBuilder sb = new StringBuilder(); + sb.append(source.getId()); + sb.append(" -> "); + sb.append(target.getId()); + + sb.append(" (id = "); + sb.append(id); + + if (type != null && !type.toString().isEmpty()) { + sb.append("; type = "); + sb.append(type); + } + sb.append(")"); + + if (direction != null) { + sb.append(" direction = " + direction.name()); + } + + return sb.toString(); + } } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ElementDraftImpl.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ElementDraftImpl.java index 0990ccae0b..56be66e35e 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ElementDraftImpl.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ElementDraftImpl.java @@ -40,19 +40,26 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.impl; -import it.unimi.dsi.fastutil.doubles.Double2ObjectMap; -import it.unimi.dsi.fastutil.doubles.Double2ObjectOpenHashMap; import java.awt.Color; -import org.gephi.attribute.api.AttributeUtils; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Interval; +import org.gephi.graph.api.TimeFormat; +import org.gephi.graph.api.TimeRepresentation; +import org.gephi.graph.api.types.IntervalMap; +import org.gephi.graph.api.types.IntervalSet; +import org.gephi.graph.api.types.TimeMap; +import org.gephi.graph.api.types.TimeSet; +import org.gephi.graph.api.types.TimestampMap; +import org.gephi.graph.api.types.TimestampSet; import org.gephi.io.importer.api.ColumnDraft; import org.gephi.io.importer.api.ElementDraft; +import org.gephi.io.importer.api.ImportUtils; +import org.gephi.io.importer.api.Issue; +import org.openide.util.NbBundle; -/** - * - * @author mbastian - */ public abstract class ElementDraftImpl implements ElementDraft { protected final ImportContainerImpl container; @@ -68,22 +75,35 @@ public abstract class ElementDraftImpl implements ElementDraft { //Attributes protected Object[] attributes; //Timestamps - protected double[] timeStamps; - //Dynamic values - protected Double2ObjectMap[] dynamicAttributes; + protected TimeSet timeSet; public ElementDraftImpl(ImportContainerImpl container, String id) { this.container = container; this.id = id; this.attributes = new Object[0]; - this.timeStamps = new double[0]; - this.dynamicAttributes = new Double2ObjectMap[0]; + } + + private static Object parseValue(String value, Class type) { + value = value.replace("INF", "Infinity").replace("-INF", "-Infinity"); + return AttributeUtils.parse(value, type); } abstract ColumnDraft getColumn(String key); abstract ColumnDraft getColumn(String key, Class type); + abstract String getElementClassName(); + + @Override + public Double getGraphTimestamp() { + return container.getTimestamp(); + } + + @Override + public Interval getGraphInterval() { + return container.getInterval(); + } + @Override public String getId() { return id; @@ -94,34 +114,72 @@ public String getLabel() { return label; } + @Override + public void setLabel(String label) { + this.label = label; + } + @Override public Color getColor() { return color; } + @Override + public void setColor(Color color) { + this.color = color; + } + + @Override + public void setColor(String color) { + Color cl = ImportUtils.parseColor(color); + if (cl != null) { + setColor(cl); + } else { + String message = NbBundle.getMessage(ElementDraftImpl.class, "ElementDraftException_ColorParse", color, id, getElementClassName()); + container.getReport().logIssue(new Issue(message, Issue.Level.WARNING)); + } + } + @Override public boolean isLabelVisible() { return labelVisible; } + @Override + public void setLabelVisible(boolean labelVisible) { + this.labelVisible = labelVisible; + } + @Override public float getLabelSize() { return labelSize; } + @Override + public void setLabelSize(float size) { + this.labelSize = size; + } + @Override public Color getLabelColor() { return labelColor; } @Override - public void setLabel(String label) { - this.label = label; + public void setLabelColor(Color color) { + this.labelColor = color; } @Override - public void setColor(Color color) { - this.color = color; + public void setLabelColor(String color) { + Color cl = ImportUtils.parseColor(color); + if (cl != null) { + setLabelColor(cl); + } else { + String message = + NbBundle.getMessage(ElementDraftImpl.class, "ElementDraftException_LabelColorParse", color, id, getElementClassName()); + container.getReport().logIssue(new Issue(message, Issue.Level.WARNING)); + } } @Override @@ -151,26 +209,6 @@ public void setColor(int r, int g, int b) { setColor(r / 255f, g / 255f, b / 255f); } - @Override - public void setColor(String color) { - setColor(Color.getColor(color)); - } - - @Override - public void setLabelVisible(boolean labelVisible) { - this.labelVisible = labelVisible; - } - - @Override - public void setLabelSize(float size) { - this.labelSize = size; - } - - @Override - public void setLabelColor(Color color) { - this.labelColor = color; - } - @Override public void setLabelColor(String r, String g, String b) { setLabelColor(Integer.parseInt(r), Integer.parseInt(g), Integer.parseInt(b)); @@ -189,118 +227,372 @@ public void setLabelColor(int r, int g, int b) { setLabelColor(r / 255f, g / 255f, b / 255f); } - @Override - public void setLabelColor(String color) { - setLabelColor(Color.getColor(color)); - } - @Override public void setValue(String key, Object value) { - ColumnDraft column = getColumn(key, value.getClass()); - setAttributeValue(((ColumnDraftImpl) column).getIndex(), value); + if (value == null) { + throw new NullPointerException("Value for key '" + key + "' can't be null"); + } + + Class type = value.getClass(); + if (AttributeUtils.isDynamicType(type) && !TimeSet.class.isAssignableFrom(type)) { + type = AttributeUtils.getStaticType(type); + } + ColumnDraft column = getColumn(key, type); + try { + setAttributeValue(column, value); + } catch (Exception ex) { + String message = NbBundle + .getMessage(ElementDraftImpl.class, "ElementDraftException_SetValueError", value.toString(), id, + ex.getMessage(), getElementClassName()); + container.getReport().logIssue(new Issue(message, Issue.Level.SEVERE)); + } } @Override public void setValue(String key, Object value, String dateTime) { - setValue(key, value, AttributeUtils.parseDateTime(dateTime)); + setValue(key, value, container.getTimeFormat().equals(TimeFormat.DOUBLE) ? Double.parseDouble(dateTime) : + AttributeUtils.parseDateTime(dateTime, container.getTimeZone())); } @Override public void setValue(String key, Object value, double timestamp) { - ColumnDraft column = getColumn(key, value.getClass()); - setAttributeValue(((ColumnDraftImpl) column).getIndex(), value, timestamp); + if (value == null) { + throw new NullPointerException("Value for key '" + key + "' can't be null"); + } + ColumnDraft column = getColumn(key, AttributeUtils.getTimestampMapType(value.getClass())); + try { + if (!setAttributeValue(column, value, timestamp)) { + String message = NbBundle + .getMessage(ElementDraftImpl.class, "ElementDraftException_SetValueTimestampDuplicate", value.toString(), + id, timestamp, getElementClassName()); + container.getReport().logIssue(new Issue(message, Issue.Level.WARNING)); + } + } catch (Exception ex) { + String message = NbBundle + .getMessage(ElementDraftImpl.class, "ElementDraftException_SetValueTimestampError", value.toString(), + id, timestamp, ex.getMessage(), getElementClassName()); + container.getReport().logIssue(new Issue(message, Issue.Level.SEVERE)); + } + } + + @Override + public void setValue(String key, Object value, String startDateTime, String endDateTime) { + if (value == null) { + throw new NullPointerException("Value for key '" + key + "' can't be null"); + } + double start, end; + if (startDateTime == null || startDateTime.isEmpty() || "-inf".equalsIgnoreCase(startDateTime) || + "-infinity".equalsIgnoreCase(startDateTime)) { + start = Double.NEGATIVE_INFINITY; + } else { + start = container.getTimeFormat().equals(TimeFormat.DOUBLE) ? Double.parseDouble(startDateTime) : + AttributeUtils.parseDateTime(startDateTime, container.getTimeZone()); + } + if (endDateTime == null || endDateTime.isEmpty() || "inf".equalsIgnoreCase(endDateTime) || + "infinity".equalsIgnoreCase(endDateTime)) { + end = Double.POSITIVE_INFINITY; + } else { + end = container.getTimeFormat().equals(TimeFormat.DOUBLE) ? Double.parseDouble(endDateTime) : + AttributeUtils.parseDateTime(endDateTime, container.getTimeZone()); + } + setValue(key, value, start, end); + } + + @Override + public void setValue(String key, Object value, double start, double end) { + if (value == null) { + throw new NullPointerException("Value for key '" + key + "' can't be null"); + } + ColumnDraft column = getColumn(key, AttributeUtils.getIntervalMapType(value.getClass())); + try { + if (!setAttributeValue(column, value, start, end)) { + String interval = "[" + start + "," + end + "]"; + String message = NbBundle + .getMessage(ElementDraftImpl.class, "ElementDraftException_SetValueIntervalDuplicate", value.toString(), + id, interval, getElementClassName()); + container.getReport().logIssue(new Issue(message, Issue.Level.WARNING)); + } + } catch (Exception ex) { + String interval = "[" + start + "," + end + "]"; + String message = NbBundle + .getMessage(ElementDraftImpl.class, "ElementDraftException_SetValueIntervalError", value.toString(), id, + interval, ex.getMessage(), getElementClassName()); + container.getReport().logIssue(new Issue(message, Issue.Level.SEVERE)); + } } @Override public void parseAndSetValue(String key, String value) { ColumnDraft column = getColumn(key); - Object val = AttributeUtils.parse(value, column.getTypeClass()); - setAttributeValue(((ColumnDraftImpl) column).getIndex(), val); + if (column == null) { + String message = NbBundle.getMessage(ElementDraftImpl.class, + "ElementDraftException_ColumnNotFound", key, id, getElementClassName()); + container.getReport().logIssue(new Issue(message, Issue.Level.SEVERE)); + return; + } + if (column.isDynamic()) { + if (container.getTimeRepresentation().equals(TimeRepresentation.INTERVAL)) { + if (container.getInterval() != null) { + parseAndSetValue(key, value, container.getInterval().getLow(), container.getInterval().getHigh()); + return; + } + } else { + if (container.getTimestamp() != null) { + parseAndSetValue(key, value, container.getTimestamp()); + return; + } + } + } + + if (value != null) { + Object obj = parseValue(value, column.getResolvedTypeClass(container)); + if (obj != null) { + setValue(key, obj); + } + } } @Override public void parseAndSetValue(String key, String value, String dateTime) { - parseAndSetValue(key, value, AttributeUtils.parseDateTime(dateTime)); + parseAndSetValue(key, value, + container.getTimeFormat().equals(TimeFormat.DOUBLE) ? Double.parseDouble(dateTime) : + AttributeUtils.parseDateTime(dateTime, container.getTimeZone())); } @Override public void parseAndSetValue(String key, String value, double timestamp) { ColumnDraft column = getColumn(key); - Object val = AttributeUtils.parse(value, column.getTypeClass()); - setAttributeValue(((ColumnDraftImpl) column).getIndex(), val, timestamp); + if (column == null) { + String message = NbBundle.getMessage(ElementDraftImpl.class, + "ElementDraftException_ColumnNotFound", key, id, getElementClassName()); + container.getReport().logIssue(new Issue(message, Issue.Level.SEVERE)); + return; + } + setValue(key, parseValue(value, column.getTypeClass()), timestamp); + } + + @Override + public void parseAndSetValue(String key, String value, String startDateTime, String endDateTime) { + double start, end; + if (startDateTime == null || startDateTime.isEmpty() || "-inf".equalsIgnoreCase(startDateTime) || + "-infinity".equalsIgnoreCase(startDateTime)) { + start = Double.NEGATIVE_INFINITY; + } else { + start = container.getTimeFormat().equals(TimeFormat.DOUBLE) ? Double.parseDouble(startDateTime) : + AttributeUtils.parseDateTime(startDateTime, container.getTimeZone()); + } + if (endDateTime == null || endDateTime.isEmpty() || "inf".equalsIgnoreCase(endDateTime) || + "infinity".equalsIgnoreCase(endDateTime)) { + end = Double.POSITIVE_INFINITY; + } else { + end = container.getTimeFormat().equals(TimeFormat.DOUBLE) ? Double.parseDouble(endDateTime) : + AttributeUtils.parseDateTime(endDateTime, container.getTimeZone()); + } + parseAndSetValue(key, value, start, end); + } + + @Override + public void parseAndSetValue(String key, String value, double start, double end) { + ColumnDraft column = getColumn(key); + if (column == null) { + String message = NbBundle.getMessage(ElementDraftImpl.class, + "ElementDraftException_ColumnNotFound", key, id, getElementClassName()); + container.getReport().logIssue(new Issue(message, Issue.Level.SEVERE)); + return; + } + setValue(key, parseValue(value, column.getTypeClass()), start, end); } @Override public void addTimestamp(String dateTime) { - addTimestamp(AttributeUtils.parseDateTime(dateTime)); + addTimestamp(container.getTimeFormat().equals(TimeFormat.DOUBLE) ? Double.parseDouble(dateTime) : + AttributeUtils.parseDateTime(dateTime, container.getTimeZone())); } @Override public void addTimestamp(double timestamp) { - int index = timeStamps.length; - ensureTimestampArraySize(index); - timeStamps[index] = timestamp; + if (!container.getTimeRepresentation().equals(TimeRepresentation.TIMESTAMP)) { + String message = + NbBundle.getMessage(ElementDraftImpl.class, "ElementDraftException_NotTimestampRepresentation", id, getElementClassName()); + container.getReport().logIssue(new Issue(message, Issue.Level.SEVERE)); + return; + } + if (timeSet == null) { + timeSet = new TimestampSet(); + } + timeSet.add(timestamp); } @Override - public double[] getTimestamps() { - return timeStamps; + public void addTimestamps(String timestamps) { + if (!container.getTimeRepresentation().equals(TimeRepresentation.TIMESTAMP)) { + String message = + NbBundle.getMessage(ElementDraftImpl.class, "ElementDraftException_NotTimestampRepresentation", id, getElementClassName()); + container.getReport().logIssue(new Issue(message, Issue.Level.SEVERE)); + return; + } + TimestampSet t = (TimestampSet) AttributeUtils.parse(timestamps, TimestampSet.class); + if (timeSet == null) { + timeSet = t; + } else { + for (Double d : t.toArray()) { + timeSet.add(d); + } + } + } + + @Override + public TimeSet getTimeSet() { + return timeSet; } @Override - public double[] getTimestamps(String key) { - ColumnDraft col = getColumn(key); - if (col != null) { - Double2ObjectMap m = getDynamicAttributeValue(((ColumnDraftImpl) col).getIndex()); - if (m != null) { - return m.keySet().toDoubleArray(); + public void addInterval(String intervalStartDateTime, String intervalEndDateTime) { + double start, end; + if (intervalStartDateTime == null || intervalStartDateTime.isEmpty() || + "-inf".equalsIgnoreCase(intervalStartDateTime) || "-infinity".equalsIgnoreCase(intervalStartDateTime)) { + start = Double.NEGATIVE_INFINITY; + } else { + start = container.getTimeFormat().equals(TimeFormat.DOUBLE) ? Double.parseDouble(intervalStartDateTime) : + AttributeUtils.parseDateTime(intervalStartDateTime, container.getTimeZone()); + } + if (intervalEndDateTime == null || intervalEndDateTime.isEmpty() || + "inf".equalsIgnoreCase(intervalEndDateTime) || "infinity".equalsIgnoreCase(intervalEndDateTime)) { + end = Double.POSITIVE_INFINITY; + } else { + end = container.getTimeFormat().equals(TimeFormat.DOUBLE) ? Double.parseDouble(intervalEndDateTime) : + AttributeUtils.parseDateTime(intervalEndDateTime, container.getTimeZone()); + } + addInterval(start, end); + } + + @Override + public void addIntervals(String intervals) { + if (!container.getTimeRepresentation().equals(TimeRepresentation.INTERVAL)) { + String message = + NbBundle.getMessage(ElementDraftImpl.class, "ElementDraftException_NotIntervalRepresentation", id, getElementClassName()); + container.getReport().logIssue(new Issue(message, Issue.Level.SEVERE)); + return; + } + IntervalSet s = (IntervalSet) AttributeUtils.parse(intervals, IntervalSet.class); + if (timeSet == null) { + timeSet = s; + } else { + for (Interval i : s.toArray()) { + timeSet.add(i); } } - return null; } @Override - public Object getValue(String key, double timestamp) { - ColumnDraft col = getColumn(key); - if (col != null) { - Double2ObjectMap m = getDynamicAttributeValue(((ColumnDraftImpl) col).getIndex()); - if (m != null) { - return m.get(timestamp); + public void addInterval(double intervalStart, double intervalEnd) { + if (!container.getTimeRepresentation().equals(TimeRepresentation.INTERVAL)) { + String message = + NbBundle.getMessage(ElementDraftImpl.class, "ElementDraftException_NotIntervalRepresentation", id, getElementClassName()); + container.getReport().logIssue(new Issue(message, Issue.Level.SEVERE)); + return; + } + try { + Interval interval = new Interval(intervalStart, intervalEnd); + if (timeSet == null) { + timeSet = new IntervalSet(); } + timeSet.add(interval); + } catch (Exception e) { + String interval = "[" + intervalStart + "," + intervalEnd + "]"; + String message = NbBundle + .getMessage(ElementDraftImpl.class, "ElementDraftException_IntervalSetError", interval, id, + e.getMessage(), getElementClassName()); + container.getReport().logIssue(new Issue(message, Issue.Level.SEVERE)); } - return null; } public boolean isDynamic() { - return timeStamps.length > 0; + return timeSet != null && !timeSet.isEmpty(); } public boolean hasDynamicAttributes() { - return dynamicAttributes.length > 0; + for (Object att : attributes) { + if (att != null && att instanceof TimeMap) { + if (!((TimeMap) att).isEmpty()) { + return true; + } + } + } + return false; } //UTILITY - protected void setAttributeValue(int index, Object value) { + protected void setAttributeValue(ColumnDraft column, Object value) throws Exception { + int index = ((ColumnDraftImpl) column).getIndex(); + + if (!(value instanceof TimeSet)) { + value = AttributeUtils.standardizeValue(value); + } + + Class typeClass = column.getResolvedTypeClass(container); + + if (!value.getClass().equals(typeClass)) { + throw new RuntimeException("The expected value class was " + typeClass.getSimpleName() + " and " + + value.getClass().getSimpleName() + " was found"); + } + if (index >= attributes.length) { Object[] newArray = new Object[index + 1]; System.arraycopy(attributes, 0, newArray, 0, attributes.length); attributes = newArray; } + attributes[index] = value; } - protected void setAttributeValue(int index, Object value, double timestamp) { - if (index >= dynamicAttributes.length) { - Double2ObjectMap[] newArray = new Double2ObjectMap[index + 1]; - System.arraycopy(dynamicAttributes, 0, newArray, 0, dynamicAttributes.length); - dynamicAttributes = newArray; + protected boolean setAttributeValue(ColumnDraft column, Object value, double timestamp) throws Exception { + int index = ((ColumnDraftImpl) column).getIndex(); + Class typeClass = column.getTypeClass(); + value = AttributeUtils.standardizeValue(value); + if (!value.getClass().equals(typeClass)) { + throw new RuntimeException("The expected value class was " + typeClass.getSimpleName() + " and " + + value.getClass().getSimpleName() + " was found"); + } + if (!column.isDynamic()) { + throw new RuntimeException("Can't set a dynamic value to a static column"); + } + if (index >= attributes.length) { + Object[] newArray = new Object[index + 1]; + System.arraycopy(attributes, 0, newArray, 0, attributes.length); + attributes = newArray; + } + TimestampMap m = (TimestampMap) attributes[index]; + if (m == null) { + m = AttributeUtils.getTimestampMapType(column.getTypeClass()).newInstance(); + attributes[index] = m; + } + return m.put(timestamp, value); + } + + protected boolean setAttributeValue(ColumnDraft column, Object value, double start, double end) throws Exception { + int index = ((ColumnDraftImpl) column).getIndex(); + value = AttributeUtils.standardizeValue(value); + Class typeClass = column.getTypeClass(); + if (!value.getClass().equals(typeClass)) { + throw new RuntimeException("The expected value class was " + typeClass.getSimpleName() + " and " + + value.getClass().getSimpleName() + " was found"); + } + if (!column.isDynamic()) { + throw new RuntimeException("Can't set a dynamic value to a static column"); } - Double2ObjectMap m = dynamicAttributes[index]; + Interval interval = new Interval(start, end); + if (index >= attributes.length) { + Object[] newArray = new Object[index + 1]; + System.arraycopy(attributes, 0, newArray, 0, attributes.length); + attributes = newArray; + } + IntervalMap m = (IntervalMap) attributes[index]; if (m == null) { - m = new Double2ObjectOpenHashMap(); - dynamicAttributes[index] = m; + m = AttributeUtils.getIntervalMapType(column.getTypeClass()).newInstance(); + attributes[index] = m; } - m.put(timestamp, value); + return m.put(interval, value); } protected Object getAttributeValue(int index) { @@ -309,19 +601,4 @@ protected Object getAttributeValue(int index) { } return null; } - - protected Double2ObjectMap getDynamicAttributeValue(int index) { - if (index < dynamicAttributes.length) { - return dynamicAttributes[index]; - } - return null; - } - - protected void ensureTimestampArraySize(int index) { - if (index >= timeStamps.length) { - double[] newArray = new double[index + 1]; - System.arraycopy(timeStamps, 0, newArray, 0, timeStamps.length); - timeStamps = newArray; - } - } } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ElementFactoryImpl.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ElementFactoryImpl.java index a20d3f4b3c..98d392cf54 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ElementFactoryImpl.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ElementFactoryImpl.java @@ -39,20 +39,21 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.impl; import java.util.concurrent.atomic.AtomicInteger; -import org.gephi.io.importer.api.ElementDraftFactory; +import org.gephi.io.importer.api.ElementDraft; +import org.gephi.io.importer.api.Issue; +import org.openide.util.NbBundle; -/** - * - * @author mbastian - */ -public class ElementFactoryImpl implements ElementDraftFactory { +public class ElementFactoryImpl implements ElementDraft.Factory { - protected final ImportContainerImpl container; protected final static AtomicInteger NODE_IDS = new AtomicInteger(); protected final static AtomicInteger EDGE_IDS = new AtomicInteger(); + protected final ImportContainerImpl container; + + protected AtomicInteger nextSequentialNodeId = new AtomicInteger(); public ElementFactoryImpl(ImportContainerImpl container) { this.container = container; @@ -60,31 +61,30 @@ public ElementFactoryImpl(ImportContainerImpl container) { @Override public NodeDraftImpl newNodeDraft() { - NodeDraftImpl node = new NodeDraftImpl(container, "n" + NODE_IDS.getAndIncrement()); - return node; + return new NodeDraftImpl(container, String.valueOf(NODE_IDS.getAndIncrement()), + nextSequentialNodeId.getAndIncrement()); } @Override public NodeDraftImpl newNodeDraft(String id) { if (id == null) { - throw new NullPointerException("Node id can't be null"); + String message = NbBundle.getMessage(ElementFactoryImpl.class, "ElementFactoryException_NullNodeId"); + container.getReport().logIssue(new Issue(message, Issue.Level.CRITICAL)); } - NodeDraftImpl node = new NodeDraftImpl(container, id); - return node; + return new NodeDraftImpl(container, id, nextSequentialNodeId.getAndIncrement()); } @Override public EdgeDraftImpl newEdgeDraft() { - EdgeDraftImpl edge = new EdgeDraftImpl(container, "e" + EDGE_IDS.getAndIncrement()); - return edge; + return new EdgeDraftImpl(container, String.valueOf(EDGE_IDS.getAndIncrement())); } @Override public EdgeDraftImpl newEdgeDraft(String id) { if (id == null) { - throw new NullPointerException("Node id can't be null"); + String message = NbBundle.getMessage(ElementFactoryImpl.class, "ElementFactoryException_NullEdgeId"); + container.getReport().logIssue(new Issue(message, Issue.Level.CRITICAL)); } - EdgeDraftImpl edge = new EdgeDraftImpl(container, id); - return edge; + return new EdgeDraftImpl(container, id); } } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ImportContainerFactoryImpl.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ImportContainerFactoryImpl.java index c12012402a..7c44df5c80 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ImportContainerFactoryImpl.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ImportContainerFactoryImpl.java @@ -38,19 +38,15 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.io.importer.impl; import org.gephi.io.importer.api.Container; -import org.gephi.io.importer.api.ContainerFactory; import org.openide.util.lookup.ServiceProvider; -/** - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = ContainerFactory.class) -public class ImportContainerFactoryImpl implements ContainerFactory { +@ServiceProvider(service = Container.Factory.class) +public class ImportContainerFactoryImpl implements Container.Factory { @Override public Container newContainer() { diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ImportContainerImpl.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ImportContainerImpl.java index f6b86db6da..09b840cf93 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ImportContainerImpl.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ImportContainerImpl.java @@ -39,16 +39,18 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.impl; import it.unimi.dsi.fastutil.longs.Long2ObjectMap; import it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2ObjectMap; -import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import it.unimi.dsi.fastutil.objects.ObjectList; +import java.time.ZoneId; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -56,7 +58,11 @@ Development and Distribution License("CDDL") (collectively, the import java.util.Comparator; import java.util.Iterator; import java.util.List; -import org.gephi.attribute.api.TimeFormat; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Interval; +import org.gephi.graph.api.TimeFormat; +import org.gephi.graph.api.TimeRepresentation; +import org.gephi.graph.api.types.TimeSet; import org.gephi.io.importer.api.ColumnDraft; import org.gephi.io.importer.api.Container; import org.gephi.io.importer.api.ContainerLoader; @@ -64,23 +70,22 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.io.importer.api.EdgeDirection; import org.gephi.io.importer.api.EdgeDirectionDefault; import org.gephi.io.importer.api.EdgeDraft; -import org.gephi.io.importer.api.EdgeWeightMergeStrategy; +import org.gephi.io.importer.api.EdgeMergeStrategy; import org.gephi.io.importer.api.ElementDraft; +import org.gephi.io.importer.api.ElementIdType; import org.gephi.io.importer.api.Issue; import org.gephi.io.importer.api.Issue.Level; +import org.gephi.io.importer.api.MetadataDraft; import org.gephi.io.importer.api.NodeDraft; import org.gephi.io.importer.api.Report; import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class ImportContainerImpl implements Container, ContainerLoader, ContainerUnloader { protected static final int NULL_INDEX = -1; - //MetaData - private String source; //Factory private final ElementFactoryImpl factory; //Parameters @@ -91,10 +96,16 @@ public class ImportContainerImpl implements Container, ContainerLoader, Containe private final Object2IntMap nodeMap; private final Object2IntMap edgeMap; private final Object2IntMap edgeTypeMap; - private Long2ObjectMap[] edgeTypeSets; - private EdgeDirectionDefault edgeDefault = EdgeDirectionDefault.MIXED; private final Object2ObjectMap nodeColumns; private final Object2ObjectMap edgeColumns; + //MetaData + private String source; + private MetadataDraft metadataDraft; + private Class lastEdgeType; + private Long2ObjectMap[] edgeTypeSets; + private EdgeDirectionDefault edgeDefault = EdgeDirectionDefault.MIXED; + //Config + private ElementIdType elementIdType = ElementIdType.STRING; //Management private boolean dynamicGraph = false; private boolean dynamicAttributes = false; @@ -103,24 +114,31 @@ public class ImportContainerImpl implements Container, ContainerLoader, Containe private int directedEdgesCount = 0; private int undirectedEdgesCount = 0; private int selfLoops = 0; + private int mutualEdgesCount = 0; //Dynamic private TimeFormat timeFormat = TimeFormat.DOUBLE; - private double timeIntervalMin; - private double timeIntervalMax; + private TimeRepresentation timeRepresentation = TimeRepresentation.INTERVAL; + private ZoneId timeZone = ZoneId.systemDefault(); + private Double timestamp; + private Interval interval; + //Report flag + private boolean reportedUnknownNode; + private boolean reportedParallelEdges; public ImportContainerImpl() { parameters = new ImportContainerParameters(); - nodeMap = new Object2IntOpenHashMap(); - edgeMap = new Object2IntOpenHashMap(); + nodeMap = new Object2IntOpenHashMap<>(); + edgeMap = new Object2IntOpenHashMap<>(); nodeMap.defaultReturnValue(NULL_INDEX); edgeMap.defaultReturnValue(NULL_INDEX); - nodeList = new ObjectArrayList(); - edgeList = new ObjectArrayList(); + nodeList = new ObjectArrayList<>(); + edgeList = new ObjectArrayList<>(); edgeTypeMap = new Object2IntOpenHashMap(); edgeTypeSets = new Long2ObjectMap[0]; factory = new ElementFactoryImpl(this); - nodeColumns = new Object2ObjectOpenHashMap(); - edgeColumns = new Object2ObjectOpenHashMap(); + nodeColumns = new Object2ObjectLinkedOpenHashMap<>(); + edgeColumns = new Object2ObjectLinkedOpenHashMap<>(); + report = new Report(); } @Override @@ -139,13 +157,13 @@ public ElementFactoryImpl factory() { } @Override - public void setSource(String source) { - this.source = source; + public String getSource() { + return source; } @Override - public String getSource() { - return source; + public void setSource(String source) { + this.source = source; } @Override @@ -154,7 +172,8 @@ public void addNode(NodeDraft nodeDraft) { NodeDraftImpl nodeDraftImpl = (NodeDraftImpl) nodeDraft; if (nodeMap.containsKey(nodeDraftImpl.getId())) { - String message = NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerException_nodeExist", nodeDraftImpl.getId()); + String message = NbBundle + .getMessage(ImportContainerImpl.class, "ImportContainerException_nodeExist", nodeDraftImpl.getId()); report.logIssue(new Issue(message, Level.WARNING)); return; } @@ -176,9 +195,15 @@ public NodeDraftImpl getNode(String id) { node = factory.newNodeDraft(id); addNode(node); node.setCreatedAuto(true); - report.logIssue(new Issue("Unknown node id, creates node from id='" + id + "'", Level.INFO)); + if (!reportedUnknownNode) { + String message = + NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerException_AutoNodeCreated"); + report.logIssue(new Issue(message, Level.INFO)); + reportedUnknownNode = true; + } } else { - String message = NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerException_UnknowNodeId", id); + String message = + NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerException_UnknowNodeId", id); report.logIssue(new Issue(message, Level.SEVERE)); } } else { @@ -197,10 +222,14 @@ public boolean nodeExists(String id) { public boolean edgeExists(String source, String target) { checkId(source); checkId(target); - NodeDraftImpl sourceNode = getNode(source); - NodeDraftImpl targetNode = getNode(target); + if (!nodeExists(source) || !nodeExists(target)) { + return false; + } + NodeDraftImpl sourceNode = nodeList.get(nodeMap.getInt(source)); + NodeDraftImpl targetNode = nodeList.get(nodeMap.getInt(target)); if (sourceNode != null && targetNode != null) { - boolean undirected = edgeDefault.equals(EdgeDirectionDefault.UNDIRECTED) || (undirectedEdgesCount > 0 && directedEdgesCount == 0); + boolean undirected = edgeDefault.equals(EdgeDirectionDefault.UNDIRECTED) || + (undirectedEdgesCount > 0 && directedEdgesCount == 0); long edgeId = getLongId(sourceNode, targetNode, !undirected); for (Long2ObjectMap l : edgeTypeSets) { if (l != null) { @@ -219,19 +248,22 @@ public void addEdge(EdgeDraft edgeDraft) { EdgeDraftImpl edgeDraftImpl = (EdgeDraftImpl) edgeDraft; if (edgeDraftImpl.getSource() == null) { - String message = NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerException_MissingNodeSource"); + String message = + NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerException_MissingNodeSource"); report.logIssue(new Issue(message, Level.SEVERE)); return; } if (edgeDraftImpl.getTarget() == null) { - String message = NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerException_MissingNodeTarget"); + String message = + NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerException_MissingNodeTarget"); report.logIssue(new Issue(message, Level.SEVERE)); return; } //Check if already exists if (edgeMap.containsKey(edgeDraftImpl.getId())) { - String message = NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerException_edgeExist", edgeDraftImpl.getId()); + String message = NbBundle + .getMessage(ImportContainerImpl.class, "ImportContainerException_edgeExist", edgeDraftImpl.getId()); report.logIssue(new Issue(message, Level.WARNING)); return; } @@ -243,19 +275,23 @@ public void addEdge(EdgeDraft edgeDraft) { return; } - //Check direction and defaut type + //Check direction and default type if (edgeDraftImpl.getDirection() != null) { //Test if the given type match with parameters switch (edgeDefault) { case DIRECTED: if (edgeDraftImpl.getDirection().equals(EdgeDirection.UNDIRECTED)) { - report.logIssue(new Issue(NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerException_Bad_Edge_Type", edgeDefault, edgeDraftImpl.getId()), Level.SEVERE)); + report.logIssue(new Issue(NbBundle + .getMessage(ImportContainerImpl.class, "ImportContainerException_Bad_Edge_Type", + edgeDefault, edgeDraftImpl.getId()), Level.SEVERE)); return; } break; case UNDIRECTED: if (edgeDraftImpl.getDirection().equals(EdgeDirection.DIRECTED)) { - report.logIssue(new Issue(NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerException_Bad_Edge_Type", edgeDefault, edgeDraftImpl.getId()), Level.SEVERE)); + report.logIssue(new Issue(NbBundle + .getMessage(ImportContainerImpl.class, "ImportContainerException_Bad_Edge_Type", + edgeDefault, edgeDraftImpl.getId()), Level.SEVERE)); return; } break; @@ -268,12 +304,15 @@ public void addEdge(EdgeDraft edgeDraft) { //Type int edgeType = getEdgeType(edgeDraftImpl.getType()); long sourceTargetLong = getLongId(edgeDraftImpl); + ensureLongSetArraySize(edgeType); Long2ObjectMap edgeTypeSet = edgeTypeSets[edgeType]; if (edgeTypeSet.containsKey(sourceTargetLong)) { if (!parameters.isParallelEdges()) { - report.logIssue(new Issue(NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerException_Parallel_Edge_Forbidden", edgeDraftImpl.getId()), Level.SEVERE)); + report.logIssue(new Issue(NbBundle + .getMessage(ImportContainerImpl.class, "ImportContainerException_Parallel_Edge_Forbidden", + edgeDraftImpl.getId()), Level.SEVERE)); return; } else { int[] edges = edgeTypeSet.get(sourceTargetLong); @@ -282,10 +321,15 @@ public void addEdge(EdgeDraft edgeDraft) { System.arraycopy(edges, 0, newEdges, 0, edges.length); edgeTypeSet.put(sourceTargetLong, newEdges); - report.logIssue(new Issue(NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerException_Parallel_Edge", edgeDraftImpl.getId()), Level.INFO)); + if (!reportedParallelEdges) { + report.logIssue(new Issue(NbBundle + .getMessage(ImportContainerImpl.class, "ImportContainerException_Parallel_Edge_Merged", + edgeDraftImpl.getId()), Level.INFO)); + reportedParallelEdges = true; + } } } else { - edgeTypeSet.put(sourceTargetLong, new int[]{index}); + edgeTypeSet.put(sourceTargetLong, new int[] {index}); } //Self loop @@ -294,17 +338,12 @@ public void addEdge(EdgeDraft edgeDraft) { } //Direction - EdgeDirection direction = edgeDraftImpl.getDirection(); - if (direction != null) { - //Counting - switch (direction) { - case DIRECTED: - directedEdgesCount++; - break; - case UNDIRECTED: - undirectedEdgesCount++; - break; - } + final boolean directed = isEdgeDirected(edgeDraft); + + if (directed) { + directedEdgesCount++; + } else { + undirectedEdgesCount++; } //Adding @@ -312,6 +351,16 @@ public void addEdge(EdgeDraft edgeDraft) { edgeMap.put(edgeDraft.getId(), index); } + private void removeNode(NodeDraftImpl node) { + String id = node.getId(); + if (!nodeMap.containsKey(id)) { + return; + } + + int index = nodeMap.removeInt(id); + nodeList.set(index, null); + } + @Override public void removeEdge(EdgeDraft edgeDraft) { checkElementDraftImpl(edgeDraft); @@ -323,16 +372,12 @@ public void removeEdge(EdgeDraft edgeDraft) { return; } - if (edgeDraftImpl.getDirection() != null) { - //UnCounting - switch (edgeDraftImpl.getDirection()) { - case DIRECTED: - directedEdgesCount--; - break; - case UNDIRECTED: - undirectedEdgesCount--; - break; - } + final boolean directed = isEdgeDirected(edgeDraftImpl); + + if (directed) { + directedEdgesCount--; + } else { + undirectedEdgesCount--; } if (edgeDraftImpl.isSelfLoop()) { @@ -345,25 +390,34 @@ public void removeEdge(EdgeDraft edgeDraft) { Long2ObjectMap edgeTypeSet = edgeTypeSets[edgeType]; //Get index - int index = edgeMap.remove(id); + final int index = edgeMap.removeInt(id); //Update edgeType set int[] edges = edgeTypeSet.remove(sourceTargetLong); - if (edges.length > 1) { - int[] newEdges = new int[edges.length - 1]; - int i = 0; - for (int e : edges) { - if (e != index) { - newEdges[i++] = e; + if (Arrays.binarySearch(edges, index) >= 0) { + if (edges.length > 1) { + int[] newEdges = new int[edges.length - 1]; + int i = 0; + for (int e : edges) { + if (e != index) { + newEdges[i++] = e; + } } + edgeTypeSet.put(sourceTargetLong, newEdges); } - edgeTypeSet.put(sourceTargetLong, newEdges); + // else: key was already removed above; don't re-insert an empty array } //Remove edge edgeList.set(index, null); } + private boolean isEdgeDirected(EdgeDraft edgeDraft) { + final EdgeDirection direction = edgeDraft.getDirection(); + return edgeDefault.equals(EdgeDirectionDefault.DIRECTED) + || (edgeDefault.equals(EdgeDirectionDefault.MIXED) && direction != EdgeDirection.UNDIRECTED); + } + @Override public boolean edgeExists(String id) { checkId(id); @@ -384,7 +438,7 @@ public EdgeDraft getEdge(String id) { @Override public Iterable getNodes() { - return new NullFilterIterable(nodeList); + return new NullFilterIterable<>(nodeList); } @Override @@ -394,7 +448,7 @@ public int getNodeCount() { @Override public Iterable getEdges() { - return new NullFilterIterable(edgeList); + return new NullFilterIterable<>(edgeList); } @Override @@ -402,6 +456,11 @@ public int getEdgeCount() { return edgeMap.size(); } + @Override + public int getMutualEdgeCount() { + return mutualEdgesCount; + } + @Override public TimeFormat getTimeFormat() { return timeFormat; @@ -412,74 +471,120 @@ public void setTimeFormat(TimeFormat timeFormat) { this.timeFormat = timeFormat; } + @Override + public TimeRepresentation getTimeRepresentation() { + return timeRepresentation; + } + + @Override + public void setTimeRepresentation(TimeRepresentation timeRepresentation) { + this.timeRepresentation = timeRepresentation; + } + + @Override + public ZoneId getTimeZone() { + return timeZone; + } + + @Override + public void setTimeZone(ZoneId timeZone) { + this.timeZone = timeZone; + } + @Override public ColumnDraft addNodeColumn(String key, Class typeClass) { - return addNodeColumn(key, typeClass, false); + if (AttributeUtils.isDynamicType(typeClass)) { + if (TimeSet.class.isAssignableFrom(typeClass)) { + return addNodeColumn(key, typeClass, true); + } else { + return addNodeColumn(key, AttributeUtils.getStaticType(typeClass), true); + } + } else { + return addNodeColumn(key, typeClass, false); + } } @Override public ColumnDraft addNodeColumn(String key, Class typeClass, boolean dynamic) { + key = key.toLowerCase().trim(); ColumnDraft column = nodeColumns.get(key); + typeClass = AttributeUtils.getStandardizedType(typeClass); if (column == null) { int index = nodeColumns.size(); column = new ColumnDraftImpl(key, index, dynamic, typeClass); nodeColumns.put(key, column); if (dynamic) { - report.log(NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerLog.AddDynamicNodeColumn", key, typeClass.getSimpleName())); + report.log(NbBundle + .getMessage(ImportContainerImpl.class, "ImportContainerLog.AddDynamicNodeColumn", key, + typeClass.getSimpleName())); } else { - report.log(NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerLog.AddNodeColumn", key, typeClass.getSimpleName())); - } - } else { - if (!column.getTypeClass().equals(typeClass)) { - report.logIssue(new Issue(NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerException_Column_Type_Mismatch", key, column.getTypeClass()), Level.SEVERE)); + report.log(NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerLog.AddNodeColumn", key, + typeClass.getSimpleName())); } + } else if (!column.getTypeClass().equals(typeClass)) { + report.logIssue(new Issue(NbBundle + .getMessage(ImportContainerImpl.class, "ImportContainerException_Column_Type_Mismatch", key, + column.getTypeClass()), Level.SEVERE)); } return column; } @Override public ColumnDraft addEdgeColumn(String key, Class typeClass) { - return addEdgeColumn(key, typeClass, false); + if (AttributeUtils.isDynamicType(typeClass)) { + if (TimeSet.class.isAssignableFrom(typeClass)) { + return addEdgeColumn(key, typeClass, true); + } else { + return addEdgeColumn(key, AttributeUtils.getStaticType(typeClass), true); + } + } else { + return addEdgeColumn(key, typeClass, false); + } } @Override public ColumnDraft addEdgeColumn(String key, Class typeClass, boolean dynamic) { + key = key.toLowerCase().trim(); ColumnDraft column = edgeColumns.get(key); + typeClass = AttributeUtils.getStandardizedType(typeClass); if (column == null) { int index = edgeColumns.size(); column = new ColumnDraftImpl(key, index, dynamic, typeClass); edgeColumns.put(key, column); if (dynamic) { - report.log(NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerLog.AddDynamicEdgeColumn", key, typeClass.getSimpleName())); + report.log(NbBundle + .getMessage(ImportContainerImpl.class, "ImportContainerLog.AddDynamicEdgeColumn", key, + typeClass.getSimpleName())); } else { - report.log(NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerLog.AddEdgeColumn", key, typeClass.getSimpleName())); - } - } else { - if (!column.getTypeClass().equals(typeClass)) { - report.logIssue(new Issue(NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerException_Column_Type_Mismatch", key, column.getTypeClass()), Level.SEVERE)); + report.log(NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerLog.AddEdgeColumn", key, + typeClass.getSimpleName())); } + } else if (!column.getTypeClass().equals(typeClass)) { + report.logIssue(new Issue(NbBundle + .getMessage(ImportContainerImpl.class, "ImportContainerException_Column_Type_Mismatch", key, + column.getTypeClass()), Level.SEVERE)); } return column; } @Override public ColumnDraft getNodeColumn(String key) { - return nodeColumns.get(key); + return nodeColumns.get(key.toLowerCase()); } @Override public boolean hasNodeColumn(String key) { - return nodeColumns.containsKey(key); + return nodeColumns.containsKey(key.toLowerCase()); } @Override public ColumnDraft getEdgeColumn(String key) { - return edgeColumns.get(key); + return edgeColumns.get(key.toLowerCase()); } @Override public boolean hasEdgeColumn(String key) { - return edgeColumns.containsKey(key); + return edgeColumns.containsKey(key.toLowerCase()); } @Override @@ -492,16 +597,88 @@ public Iterable getEdgeColumns() { return edgeColumns.values(); } + @Override + public void setInterval(String startDateTime, String endDateTime) { + try { + double start, end; + if (startDateTime == null || startDateTime.trim().isEmpty() || "-inf".equalsIgnoreCase(startDateTime) || + "-infinity".equalsIgnoreCase(startDateTime)) { + start = Double.NEGATIVE_INFINITY; + } else { + start = timeFormat.equals(TimeFormat.DOUBLE) ? Double.parseDouble(startDateTime) : + AttributeUtils.parseDateTime(startDateTime, getTimeZone()); + } + if (endDateTime == null || endDateTime.trim().isEmpty() || "inf".equalsIgnoreCase(endDateTime) || + "infinity".equalsIgnoreCase(endDateTime)) { + end = Double.POSITIVE_INFINITY; + } else { + end = timeFormat.equals(TimeFormat.DOUBLE) ? Double.parseDouble(endDateTime) : + AttributeUtils.parseDateTime(endDateTime, getTimeZone()); + } + this.interval = new Interval(start, end); + } catch (Exception e) { + report.logIssue(new Issue(NbBundle + .getMessage(ImportContainerImpl.class, "ImportContainerException_Interval_Parse_Error", + "[" + startDateTime + "," + endDateTime + "]"), Level.SEVERE)); + return; + } + report.log(NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerLog.GraphInterval", + "[" + startDateTime + "," + endDateTime + "]")); + } + + @Override + public Interval getInterval() { + return interval; + } + + @Override + public Double getTimestamp() { + return timestamp; + } + + @Override + public void setTimestamp(String timestamp) { + try { + double t = timeFormat.equals(TimeFormat.DOUBLE) ? Double.parseDouble(timestamp) : + AttributeUtils.parseDateTime(timestamp, getTimeZone()); + this.timestamp = t; + } catch (Exception e) { + report.logIssue(new Issue(NbBundle + .getMessage(ImportContainerImpl.class, "ImportContainerException_Timestamp_Parse_Error", timestamp), + Level.SEVERE)); + return; + } + report.log(NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerLog.GraphTimestamp", timestamp)); + } + + @Override + public ElementIdType getElementIdType() { + return elementIdType; + } + + @Override + public void setElementIdType(ElementIdType type) { + if (this.elementIdType != type) { + this.elementIdType = type; + report.log(NbBundle + .getMessage(ImportContainerImpl.class, "ImportContainerLog.ElementIdType", elementIdType.toString())); + } + } + @Override public boolean verify() { //Edge weight zero or negative for (EdgeDraftImpl edge : new NullFilterIterable(edgeList)) { String id = edge.getId(); if (edge.getWeight() < 0f) { - report.logIssue(new Issue(NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerException_Negative_Weight", id), Level.WARNING)); + report.logIssue(new Issue( + NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerException_Negative_Weight", id), + Level.WARNING)); } else if (edge.getWeight() == 0) { removeEdge(edge); - report.logIssue(new Issue(NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerException_Weight_Zero_Ignored", id), Level.SEVERE)); + report.logIssue(new Issue( + NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerException_Weight_Zero_Ignored", id), + Level.SEVERE)); } } @@ -514,6 +691,44 @@ public boolean verify() { setEdgeDefault(EdgeDirectionDefault.MIXED); } + //Count mutual edges + if (directedEdgesCount > 0) { + for (EdgeDraftImpl edge : new NullFilterIterable(edgeList)) { + if (isEdgeDirected(edge) && getOpposite(edge) != null) { + mutualEdgesCount++; + } + } + mutualEdgesCount /= 2; + } + + //IdType + if (elementIdType.equals(ElementIdType.INTEGER) || elementIdType.equals(ElementIdType.LONG)) { + try { + for (NodeDraftImpl node : nodeList) { + if (node == null) { + continue; + } + if (elementIdType.equals(ElementIdType.INTEGER)) { + Integer.parseInt(node.getId()); + } else if (elementIdType.equals(ElementIdType.LONG)) { + Long.parseLong(node.getId()); + } + } + for (EdgeDraftImpl edge : new NullFilterIterable(edgeList)) { + if (elementIdType.equals(ElementIdType.INTEGER)) { + Integer.parseInt(edge.getId()); + } else if (elementIdType.equals(ElementIdType.LONG)) { + Long.parseLong(edge.getId()); + } + } + } catch (NumberFormatException e) { + report.logIssue(new Issue(NbBundle + .getMessage(ImportContainerImpl.class, "ImportContainerException_ElementIdType_Parse_Error", + elementIdType), Level.WARNING)); + elementIdType = ElementIdType.STRING; + } + } + //Is dynamic graph for (NodeDraftImpl node : nodeList) { if (node != null) { @@ -525,14 +740,12 @@ public boolean verify() { } } } - for (EdgeDraftImpl edge : edgeList) { - if (edge != null) { - if (edge.isDynamic()) { - dynamicGraph = true; - } - if (edge.hasDynamicAttributes()) { - dynamicAttributes = true; - } + for (EdgeDraftImpl edge : new NullFilterIterable(edgeList)) { + if (edge.isDynamic()) { + dynamicGraph = true; + } + if (edge.hasDynamicAttributes()) { + dynamicAttributes = true; } } @@ -554,9 +767,34 @@ public boolean verify() { // //Print TimeFormat if (dynamicGraph) { - report.logIssue(new Issue(NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerLog.TimeFormat", timeFormat.toString()), Level.INFO)); + report.log( + NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerLog.TimeFormat", timeFormat.toString())); + report.log(NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerLog.TimeRepresentation", + timeRepresentation.toString())); + report.log( + NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerLog.TimeZone", timeZone.toString())); + } + + //Print edge label type + if (lastEdgeType != null) { + report.log(NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerLog.EdgeLabelType", + lastEdgeType.getSimpleName())); + } + + //Print edge types + if (isMultiGraph()) { + report.log(NbBundle + .getMessage(ImportContainerImpl.class, "ImportContainerLog.MultiGraphCount", edgeTypeMap.size() - 1)); } + //Check that not all alpha are zeros + checkColorAlpha(nodeList, "Node"); + checkColorAlpha(edgeList, "Edge"); + + //Check special characters in elements ids + checkSpecialCharacter(nodeList, "Node"); + checkSpecialCharacter(edgeList, "Edge"); + return true; } @@ -564,7 +802,7 @@ public boolean verify() { public void closeLoader() { //Remove self-loops if (!parameters.isSelfLoops() && selfLoops > 0) { - List l = new ArrayList(); + List l = new ArrayList<>(); for (EdgeDraftImpl e : edgeList) { if (e != null && e.isSelfLoop()) { l.add(e); @@ -573,48 +811,33 @@ public void closeLoader() { for (EdgeDraftImpl e : l) { removeEdge(e); } - } - //Merge parallel edges - if (parameters.isParallelEdges()) { - for (Long2ObjectMap edgesTypeMap : edgeTypeSets) { - if (edgeTypeMap != null) { - for (Long2ObjectMap.Entry entry : edgesTypeMap.long2ObjectEntrySet()) { - if (entry.getValue().length > 1) { - int[] edges = entry.getValue(); - //Sort and get min - Arrays.sort(edges); - int minIndex = edges[0]; - EdgeDraftImpl min = edgeList.get(minIndex); - EdgeDraftImpl[] sources = new EdgeDraftImpl[edges.length - 1]; - for (int i = 1; i < edges.length; i++) { - int sourceIndex = edges[i]; - sources[i - 1] = edgeList.get(sourceIndex); - edgeList.set(sourceIndex, null); - edgeMap.remove(sources[i - 1].getId()); - } - mergeParallelEdges(sources, min); - entry.setValue(new int[]{minIndex}); - } - } - } - } + report.logIssue(new Issue(NbBundle.getMessage( + ImportContainerImpl.class, "ImportContainerClose_SelfLoopRemoved", l.size() + ), Level.WARNING)); } if (directedEdgesCount > 0 && edgeDefault.equals(EdgeDirectionDefault.UNDIRECTED)) { + int mutualEdgesRemoved = 0; + //Force undirected for (EdgeDraftImpl edge : edgeList.toArray(new EdgeDraftImpl[0])) { - if (edge != null && edge.getDirection().equals(EdgeDirection.DIRECTED)) { + final boolean notAlreadyRemoved = edge != null + && edgeMap.containsKey(edge.getId()); + + if (notAlreadyRemoved && !edge.isSelfLoop() && edge.getDirection() != null && edge.getDirection().equals(EdgeDirection.DIRECTED)) { EdgeDraftImpl opposite = getOpposite(edge); - if (opposite != null) { - int oppositeIndex = edgeMap.getInt(opposite.getId()); + if (opposite != null && edgeMap.containsKey(opposite.getId())) { mergeDirectedEdges(opposite, edge); - - edgeMap.removeInt(opposite.getId()); - edgeList.set(oppositeIndex, null); + removeEdge(opposite); + mutualEdgesRemoved++; } } } + if (mutualEdgesRemoved != 0) + report.logIssue(new Issue(NbBundle.getMessage( + ImportContainerImpl.class, "ImportContainerClose_MutualEdgesRemoved", mutualEdgesRemoved + ), Level.WARNING)); } //TODO check when mixed is forced @@ -622,14 +845,12 @@ public void closeLoader() { if (!allowAutoNode()) { for (NodeDraftImpl node : nodeList) { if (node != null && node.isCreatedAuto()) { - int index = nodeMap.removeInt(node.getId()); - nodeList.set(index, null); + removeNode(node); } } for (EdgeDraftImpl edge : edgeList) { if (edge != null && (edge.getSource().isCreatedAuto() || edge.getTarget().isCreatedAuto())) { - int index = edgeMap.remove(edge.getId()); - edgeList.set(index, null); + removeEdge(edge); } } } @@ -653,7 +874,6 @@ public int compare(NodeDraftImpl o1, NodeDraftImpl o2) { } } - //Set random position boolean customPosition = false; for (NodeDraftImpl node : nodeList) { @@ -684,43 +904,42 @@ public int compare(NodeDraftImpl o1, NodeDraftImpl o2) { //MANAGEMENT } - protected void mergeParallelEdges(EdgeDraftImpl[] sources, EdgeDraftImpl dest) { - EdgeWeightMergeStrategy mergeStrategy = parameters.getEdgesMergeStrategy(); - int count = 1 + sources.length; - double sum = dest.getWeight(); - double min = dest.getWeight(); - double max = dest.getWeight(); - for (EdgeDraftImpl edge : sources) { - sum += edge.getWeight(); - min = Math.min(min, edge.getWeight()); - max = Math.max(max, edge.getWeight()); - } + protected void mergeDirectedEdges(EdgeDraftImpl source, EdgeDraftImpl dest) { + EdgeMergeStrategy mergeStrategy = parameters.getEdgesMergeStrategy(); double result = dest.getWeight(); - if (mergeStrategy.equals(EdgeWeightMergeStrategy.AVG)) { - result = sum / count; - } else if (mergeStrategy.equals(EdgeWeightMergeStrategy.MAX)) { - result = max; - } else if (mergeStrategy.equals(EdgeWeightMergeStrategy.MIN)) { - result = min; - } else if (mergeStrategy.equals(EdgeWeightMergeStrategy.SUM)) { - result = sum; + switch (mergeStrategy) { + case AVG: + result = (source.getWeight() + dest.getWeight()) / 2.0; + break; + case MAX: + result = Math.max(source.getWeight(), dest.getWeight()); + break; + case MIN: + result = Math.min(source.getWeight(), dest.getWeight()); + break; + case SUM: + result = source.getWeight() + dest.getWeight(); + break; + case FIRST: + result = dest.getWeight(); + break; + case LAST: + result = source.getWeight(); + break; + default: + break; } dest.setWeight(result); } - protected void mergeDirectedEdges(EdgeDraftImpl source, EdgeDraftImpl dest) { - EdgeWeightMergeStrategy mergeStrategy = parameters.getEdgesMergeStrategy(); - double result = dest.getWeight(); - if (mergeStrategy.equals(EdgeWeightMergeStrategy.AVG)) { - result = (source.getWeight() + dest.getWeight()) / 2.0; - } else if (mergeStrategy.equals(EdgeWeightMergeStrategy.MAX)) { - result = Math.max(source.getWeight(), dest.getWeight()); - } else if (mergeStrategy.equals(EdgeWeightMergeStrategy.MIN)) { - result = Math.min(source.getWeight(), dest.getWeight()); - } else if (mergeStrategy.equals(EdgeWeightMergeStrategy.SUM)) { - result = source.getWeight() + dest.getWeight(); - } - dest.setWeight(result); + @Override + public void setMetadata(MetadataDraft metadata) { + this.metadataDraft = metadata; + } + + @Override + public MetadataDraft getMetadata() { + return metadataDraft; } @Override @@ -761,15 +980,39 @@ public boolean allowSelfLoop() { } @Override - public EdgeWeightMergeStrategy getEdgesMergeStrategy() { + public boolean isFillLabelWithId() { + return parameters.isFillLabelWithId(); + } + + @Override + public void setFillLabelWithId(boolean value) { + parameters.setFillLabelWithId(value); + } + + @Override + public EdgeMergeStrategy getEdgesMergeStrategy() { return parameters.getEdgesMergeStrategy(); } + @Override + public void setEdgesMergeStrategy(EdgeMergeStrategy edgesMergeStrategy) { + parameters.setEdgesMergeStrategy(edgesMergeStrategy); + } + @Override public EdgeDirectionDefault getEdgeDefault() { return edgeDefault; } + @Override + public void setEdgeDefault(EdgeDirectionDefault edgeDefault) { + if (this.edgeDefault != edgeDefault) { + this.edgeDefault = edgeDefault; + report.log(NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerException_Set_EdgeDefault", + edgeDefault.toString())); + } + } + @Override public boolean isMultiGraph() { return edgeTypeMap.size() > 1; @@ -796,12 +1039,6 @@ public void setAllowSelfLoop(boolean value) { parameters.setSelfLoops(value); } - @Override - public void setEdgeDefault(EdgeDirectionDefault edgeDefault) { - this.edgeDefault = edgeDefault; - report.logIssue(new Issue(NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerException_Set_EdgeDefault", edgeDefault.toString()), Level.INFO)); - } - @Override public boolean isAutoScale() { return parameters.isAutoScale(); @@ -813,8 +1050,13 @@ public void setAutoScale(boolean autoscale) { } @Override - public void setEdgesMergeStrategy(EdgeWeightMergeStrategy edgesMergeStrategy) { - parameters.setEdgesMergeStrategy(edgesMergeStrategy); + public Class getEdgeTypeLabelClass() { + return lastEdgeType; + } + + @Override + public boolean containsAutoNodes() { + return reportedUnknownNode; } //Utility @@ -823,17 +1065,29 @@ private int getEdgeType(Object type) { if (type != null) { Class cl = type.getClass(); if (!(cl.equals(Integer.class) - || cl.equals(String.class) - || cl.equals(Float.class) - || cl.equals(Double.class) - || cl.equals(Short.class) - || cl.equals(Byte.class) - || cl.equals(Long.class) - || cl.equals(Character.class) - || cl.equals(Boolean.class))) { - report.logIssue(new Issue(NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerException_Unsupported_Edge_type", edgeDefault.toString()), Level.SEVERE)); + || cl.equals(String.class) + || cl.equals(Float.class) + || cl.equals(Double.class) + || cl.equals(Short.class) + || cl.equals(Byte.class) + || cl.equals(Long.class) + || cl.equals(Character.class) + || cl.equals(Boolean.class))) { + report.logIssue(new Issue( + NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerException_Unsupported_Edge_type"), + Level.SEVERE)); type = null; } + if (type != null && lastEdgeType != null && !lastEdgeType.equals(type.getClass())) { + report.logIssue(new Issue(NbBundle + .getMessage(ImportContainerImpl.class, "ImportContainerException_Unsupported_Edge_type_Conflict", + type.getClass().getSimpleName(), lastEdgeType.getSimpleName()), Level.SEVERE)); + type = null; + } + } + + if (type != null) { + lastEdgeType = type.getClass(); } if (edgeTypeMap.containsKey(type)) { @@ -849,25 +1103,24 @@ private void ensureLongSetArraySize(int type) { Long2ObjectMap[] l = new Long2ObjectMap[type + 1]; System.arraycopy(edgeTypeSets, 0, l, 0, edgeTypeSets.length); edgeTypeSets = l; - edgeTypeSets[type] = new Long2ObjectOpenHashMap(); + edgeTypeSets[type] = new Long2ObjectOpenHashMap<>(); } } private long getLongId(EdgeDraftImpl edge) { - EdgeDirection direction = edge.getDirection(); - boolean directed = edgeDefault.equals(EdgeDirectionDefault.DIRECTED) - || (!edgeDefault.equals(EdgeDirectionDefault.UNDIRECTED) && direction != null && direction == EdgeDirection.DIRECTED); + final boolean directed = isEdgeDirected(edge); return getLongId(edge.getSource(), edge.getTarget(), directed); } private long getLongId(NodeDraftImpl source, NodeDraftImpl target, boolean directed) { if (directed) { - long edgeId = ((long) source.hashCode()) << 32; - edgeId = edgeId | (long) (target.hashCode()); + long edgeId = ((long) source.getSequentialId()) << 32; + edgeId = edgeId | (long) (target.getSequentialId()); return edgeId; } else { - long edgeId = ((long) (source.hashCode() > target.hashCode() ? source.hashCode() : target.hashCode())) << 32; - edgeId = edgeId | (long) (source.hashCode() > target.hashCode() ? target.hashCode() : source.hashCode()); + long edgeId = + ((long) (Math.max(source.getSequentialId(), target.getSequentialId()))) << 32; + edgeId = edgeId | (long) (Math.min(source.getSequentialId(), target.getSequentialId())); return edgeId; } } @@ -882,6 +1135,25 @@ private EdgeDraftImpl getOpposite(EdgeDraftImpl edge) { return null; } + private void checkColorAlpha(ObjectList objectList, String elementType) { + if (!objectList.isEmpty()) { + int validElement = 0; + int withAlphaZero = 0; + for (ElementDraft element : objectList) { + if (element != null && element.getColor() != null) { + validElement++; + withAlphaZero += element.getColor().getAlpha() == 0 ? 1 : 0; + } + } + if (validElement > 0 && validElement == withAlphaZero) { + report.logIssue(new Issue( + NbBundle.getMessage(ImportContainerImpl.class, + "ImportContainerException_" + elementType + "_Color_Alpha_AllZero"), + Level.WARNING)); + } + } + } + private void checkElementDraftImpl(ElementDraft elmt) { if (elmt == null) { throw new NullPointerException(); @@ -900,6 +1172,19 @@ private void checkId(String id) { } } + void checkSpecialCharacter(ObjectList objectList, String elementType) { + if (!objectList.isEmpty()) { + for(ElementDraft element : new NullFilterIterable<>(objectList)) { + String id = element.getId(); + if (id.contains(System.getProperty("line.separator")) || id.contains("\n" ) || !id.trim().equals(id)) { + report.logIssue(new Issue( + NbBundle.getMessage(ImportContainerImpl.class, "ImportContainerWarning_"+elementType+"_Id_Special_Character", id), + Level.WARNING)); + } + } + } + } + //UTILITY ITERATOR private static class NullFilterIterable implements Iterable { @@ -911,14 +1196,15 @@ public NullFilterIterable(Collection elementCollection) { @Override public Iterator iterator() { - return new NullFilterIterator(collection); + return new NullFilterIterator<>(collection); } } private static class NullFilterIterator implements Iterator { - private T pointer; private final Iterator itr; + private T pointer; + private boolean hasNext = false; public NullFilterIterator(Collection elementCollection) { this.itr = elementCollection.iterator(); @@ -926,9 +1212,13 @@ public NullFilterIterator(Collection elementCollection) { @Override public boolean hasNext() { + if (hasNext) { + return true; + } while (itr.hasNext()) { pointer = itr.next(); if (pointer != null) { + hasNext = true; return true; } } @@ -937,6 +1227,10 @@ public boolean hasNext() { @Override public T next() { + if (!hasNext) { + hasNext(); + } + hasNext = false; return pointer; } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ImportContainerParameters.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ImportContainerParameters.java index e16412d18f..3996868afc 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ImportContainerParameters.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ImportContainerParameters.java @@ -39,12 +39,12 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.impl; -import org.gephi.io.importer.api.EdgeWeightMergeStrategy; +import org.gephi.io.importer.api.EdgeMergeStrategy; /** - * * @author Mathieu Bastian */ public class ImportContainerParameters { @@ -55,7 +55,7 @@ public class ImportContainerParameters { protected boolean autoScale = true; protected boolean sortNodesBySize = true; protected boolean fillLabelWithId = true; - protected EdgeWeightMergeStrategy edgesMergeStrategy = EdgeWeightMergeStrategy.SUM; + protected EdgeMergeStrategy edgesMergeStrategy = EdgeMergeStrategy.SUM; protected boolean mergeParallelEdgesAttributes = true; protected boolean duplicateWithLabels = false; @@ -67,10 +67,14 @@ public void setAutoNode(boolean autoNode) { this.autoNode = autoNode; } - public EdgeWeightMergeStrategy getEdgesMergeStrategy() { + public EdgeMergeStrategy getEdgesMergeStrategy() { return edgesMergeStrategy; } + public void setEdgesMergeStrategy(EdgeMergeStrategy edgesMergeStrategy) { + this.edgesMergeStrategy = edgesMergeStrategy; + } + public boolean isParallelEdges() { return parallelEdges; } @@ -126,8 +130,4 @@ public boolean isMergeParallelEdgesAttributes() { public void setMergeParallelEdgesAttributes(boolean mergeParallelEdgesAttributes) { this.mergeParallelEdgesAttributes = mergeParallelEdgesAttributes; } - - public void setEdgesMergeStrategy(EdgeWeightMergeStrategy edgesMergeStrategy) { - this.edgesMergeStrategy = edgesMergeStrategy; - } } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ImportControllerImpl.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ImportControllerImpl.java index 425a762caf..ec14fd24e9 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ImportControllerImpl.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/ImportControllerImpl.java @@ -39,17 +39,23 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.impl; +import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.Reader; import java.util.ArrayList; +import java.util.Arrays; +import java.util.stream.Collectors; import org.gephi.io.importer.api.Container; -import org.gephi.io.importer.api.ContainerFactory; +import org.gephi.io.importer.api.ContainerUnloader; import org.gephi.io.importer.api.Database; +import org.gephi.io.importer.api.EmptyFileException; import org.gephi.io.importer.api.FileType; import org.gephi.io.importer.api.ImportController; import org.gephi.io.importer.api.ImportUtils; @@ -61,19 +67,19 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.io.importer.spi.Importer; import org.gephi.io.importer.spi.ImporterUI; import org.gephi.io.importer.spi.ImporterWizardUI; -import org.gephi.io.importer.spi.SpigotImporter; -import org.gephi.io.importer.spi.SpigotImporterBuilder; +import org.gephi.io.importer.spi.WizardImporter; +import org.gephi.io.importer.spi.WizardImporterBuilder; import org.gephi.io.processor.spi.Processor; import org.gephi.io.processor.spi.Scaler; import org.gephi.project.api.Workspace; +import org.gephi.utils.TempDirUtils; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileUtil; -import org.openide.util.Exceptions; import org.openide.util.Lookup; +import org.openide.util.io.ReaderInputStream; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian * @author Sebastien Heymann */ @@ -82,19 +88,22 @@ public class ImportControllerImpl implements ImportController { private final FileImporterBuilder[] fileImporterBuilders; private final DatabaseImporterBuilder[] databaseImporterBuilders; - private final SpigotImporterBuilder[] spigotImporterBuilders; + private final WizardImporterBuilder[] wizardImporterBuilders; private final ImporterUI[] uis; private final ImporterWizardUI[] wizardUis; public ImportControllerImpl() { //Get FileFormatImporters - fileImporterBuilders = Lookup.getDefault().lookupAll(FileImporterBuilder.class).toArray(new FileImporterBuilder[0]); + fileImporterBuilders = + Lookup.getDefault().lookupAll(FileImporterBuilder.class).toArray(new FileImporterBuilder[0]); //Get DatabaseImporters - databaseImporterBuilders = Lookup.getDefault().lookupAll(DatabaseImporterBuilder.class).toArray(new DatabaseImporterBuilder[0]); + databaseImporterBuilders = + Lookup.getDefault().lookupAll(DatabaseImporterBuilder.class).toArray(new DatabaseImporterBuilder[0]); - //Get Spigots - spigotImporterBuilders = Lookup.getDefault().lookupAll(SpigotImporterBuilder.class).toArray(new SpigotImporterBuilder[0]); + //Get Wizards + wizardImporterBuilders = + Lookup.getDefault().lookupAll(WizardImporterBuilder.class).toArray(new WizardImporterBuilder[0]); //Get UIS uis = Lookup.getDefault().lookupAll(ImporterUI.class).toArray(new ImporterUI[0]); @@ -103,20 +112,24 @@ public ImportControllerImpl() { @Override public FileImporter getFileImporter(File file) { - FileObject fileObject = FileUtil.toFileObject(file); - fileObject = getArchivedFile(fileObject); //Unzip and return content file - FileImporterBuilder builder = getMatchingImporter(fileObject); - if (fileObject != null && builder != null) { - FileImporter fi = builder.buildImporter(); - if (fileObject.getPath().startsWith(System.getProperty("java.io.tmpdir"))) { - try { - fileObject.delete(); - } catch (IOException ex) { - Exceptions.printStackTrace(ex); - } + if (file != null) { + return getFileImporter(FileUtil.toFileObject(file)); + } + + return null; + } + + @Override + public FileImporter getFileImporter(FileObject fileObject) { + if (fileObject != null) { + fileObject = ImportUtils.getArchivedFile(fileObject); //Unzip and return content file + FileImporterBuilder builder = getMatchingImporter(fileObject); + if (fileObject != null && builder != null) { + FileImporter fi = builder.buildImporter(); + return fi; } - return fi; } + return null; } @@ -133,17 +146,12 @@ public FileImporter getFileImporter(String importerName) { public Container importFile(File file) throws FileNotFoundException { FileObject fileObject = FileUtil.toFileObject(file); if (fileObject != null) { - fileObject = getArchivedFile(fileObject); //Unzip and return content file + fileObject = ImportUtils.getArchivedFile(fileObject); //Unzip and return content file + checkFileNotEmpty(fileObject); + file = FileUtil.toFile(fileObject); FileImporterBuilder builder = getMatchingImporter(fileObject); if (fileObject != null && builder != null) { - Container c = importFile(fileObject.getInputStream(), builder.buildImporter()); - if (fileObject.getPath().startsWith(System.getProperty("java.io.tmpdir"))) { - try { - fileObject.delete(); - } catch (IOException ex) { - Exceptions.printStackTrace(ex); - } - } + Container c = importFile(fileObject.getInputStream(), builder.buildImporter(), file); return c; } } @@ -154,62 +162,121 @@ public Container importFile(File file) throws FileNotFoundException { public Container importFile(File file, FileImporter importer) throws FileNotFoundException { FileObject fileObject = FileUtil.toFileObject(file); if (fileObject != null) { - fileObject = getArchivedFile(fileObject); //Unzip and return content file + fileObject = ImportUtils.getArchivedFile(fileObject); //Unzip and return content file + checkFileNotEmpty(fileObject); + file = FileUtil.toFile(fileObject); if (fileObject != null) { - Container c = importFile(fileObject.getInputStream(), importer); - if (fileObject.getPath().startsWith(System.getProperty("java.io.tmpdir"))) { - try { - fileObject.delete(); - } catch (IOException ex) { - Exceptions.printStackTrace(ex); - } - } + Container c = importFile(fileObject.getInputStream(), importer, file); return c; } } return null; } + private static void checkFileNotEmpty(FileObject fileObject) { + if (fileObject != null && fileObject.getSize() == 0) { + throw new EmptyFileException(fileObject.getNameExt()); + } + } + + private static Reader checkReaderNotEmpty(Reader reader, File file) { + // Wrap so we can peek the first character without consuming the stream. + BufferedReader bufferedReader = + reader instanceof BufferedReader ? (BufferedReader) reader : new BufferedReader(reader); + try { + bufferedReader.mark(1); + if (bufferedReader.read() == -1) { + throw new EmptyFileException(file != null ? file.getName() : null); + } + bufferedReader.reset(); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + return bufferedReader; + } + @Override public Container importFile(Reader reader, FileImporter importer) { + return importFile(reader, importer, null); + } + + public Container importFile(Reader reader, FileImporter importer, File file) { + // Detect empty input early so importers don't have to handle this case themselves + // and so the desktop UI can surface a friendly EmptyFileException. + reader = checkReaderNotEmpty(reader, file); + //Create Container - final Container container = Lookup.getDefault().lookup(ContainerFactory.class).newContainer(); + final Container container = Lookup.getDefault().lookup(Container.Factory.class).newContainer(); //Report Report report = new Report(); container.setReport(report); - importer.setReader(reader); + if (importer instanceof FileImporter.FileAware) { + if (file == null) { + //There is no source file but the importer needs it, create temporary copy: + try { + file = TempDirUtils.createTempDir().createFile("file_copy"); + try (FileOutputStream fos = new FileOutputStream(file)) { + FileUtil.copy(new ReaderInputStream(reader, "UTF-8"), fos); + } + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + + ((FileImporter.FileAware) importer).setFile(file); + } else { + importer.setReader(reader); + } try { if (importer.execute(container.getLoader())) { - if (importer.getReport() != null) { + if (importer.getReport() != null && importer.getReport() != report) { report.append(importer.getReport()); } + report.close(); return container; } } catch (RuntimeException ex) { throw ex; } catch (Exception ex) { throw new RuntimeException(ex); + } finally { + try { + reader.close(); + report.close(); + } catch (IOException ex) { + //NOOP + } } return null; } @Override public Container importFile(InputStream stream, FileImporter importer) { + return importFile(stream, importer, null); + } + + public Container importFile(InputStream stream, FileImporter importer, File file) { try { Reader reader = ImportUtils.getTextReader(stream); - return importFile(reader, importer); + return importFile(reader, importer, file); } catch (Exception ex) { throw new RuntimeException(ex); + } finally { + try { + stream.close(); + } catch (IOException ex) { + throw new RuntimeException(ex); + } } } @Override public Container importDatabase(Database database, DatabaseImporter importer) { //Create Container - final Container container = Lookup.getDefault().lookup(ContainerFactory.class).newContainer(); + final Container container = Lookup.getDefault().lookup(Container.Factory.class).newContainer(); //Report Report report = new Report(); @@ -219,23 +286,26 @@ public Container importDatabase(Database database, DatabaseImporter importer) { try { if (importer.execute(container.getLoader())) { - if (importer.getReport() != null) { + if (importer.getReport() != null && importer.getReport() != report) { report.append(importer.getReport()); } + report.close(); return container; } } catch (RuntimeException ex) { throw ex; } catch (Exception ex) { throw new RuntimeException(ex); + } finally { + report.close(); } return null; } @Override - public Container importSpigot(SpigotImporter importer) { + public Container importWizard(WizardImporter importer) { //Create Container - final Container container = Lookup.getDefault().lookup(ContainerFactory.class).newContainer(); + final Container container = Lookup.getDefault().lookup(Container.Factory.class).newContainer(); //Report Report report = new Report(); @@ -246,27 +316,33 @@ public Container importSpigot(SpigotImporter importer) { if (importer.getReport() != null) { report.append(importer.getReport()); } + report.close(); return container; } } catch (RuntimeException ex) { throw ex; } catch (Exception ex) { throw new RuntimeException(ex); + } finally { + report.close(); } return null; } @Override - public void process(Container container) { + public Workspace process(Container container) { Processor processor = Lookup.getDefault().lookup(Processor.class); if (processor == null) { - throw new RuntimeException("Impossible to find Default Processor"); + throw new RuntimeException("Impossible to find a default processor"); } - process(container, processor, null); + return process(container, processor, null); } @Override - public void process(Container container, Processor processor, Workspace workspace) { + public Workspace process(Container container, Processor processor, Workspace workspace) { + processor.setContainers(new ContainerUnloader[] {container.getUnloader()}); + + container.setReport(processor.getReport()); container.closeLoader(); if (container.getUnloader().isAutoScale()) { Scaler scaler = Lookup.getDefault().lookup(Scaler.class); @@ -274,62 +350,42 @@ public void process(Container container, Processor processor, Workspace workspac scaler.doScale(container); } } - processor.setContainer(container.getUnloader()); - processor.setWorkspace(workspace); - processor.process(); - } - private FileObject getArchivedFile(FileObject fileObject) { - if (fileObject == null) { - return null; + if (workspace != null) { + processor.setWorkspace(workspace); } - // ZIP and JAR archives - if (FileUtil.isArchiveFile(fileObject)) { - fileObject = FileUtil.getArchiveRoot(fileObject).getChildren()[0]; - } else { // GZ or BZIP2 archives - boolean isGz = fileObject.getExt().equalsIgnoreCase("gz"); - boolean isBzip = fileObject.getExt().equalsIgnoreCase("bz2"); - if (isGz || isBzip) { - try { - String[] splittedFileName = fileObject.getName().split("\\."); - if (splittedFileName.length < 2) { - return fileObject; - } + Workspace[] workspaces = processor.process(); + if (workspaces == null || workspaces.length == 0) { + throw new RuntimeException("The processor "+processor.getClass().getSimpleName()+" didn't return any workspace"); + } else if (workspaces.length > 1) { + throw new RuntimeException("The processor "+processor.getClass().getSimpleName()+" returned more than one workspace"); + } + return workspaces[0]; + } - String fileExt1 = splittedFileName[splittedFileName.length - 1]; - String fileExt2 = splittedFileName[splittedFileName.length - 2]; - - File tempFile = null; - if (fileExt1.equalsIgnoreCase("tar")) { - String fname = fileObject.getName().replaceAll("\\.tar$", ""); - fname = fname.replace(fileExt2, ""); - tempFile = File.createTempFile(fname, "." + fileExt2); - // Untar & unzip - if (isGz) { - tempFile = ImportUtils.getGzFile(fileObject, tempFile, true); - } else { - tempFile = ImportUtils.getBzipFile(fileObject, tempFile, true); - } - } else { - String fname = fileObject.getName(); - fname = fname.replace(fileExt1, ""); - tempFile = File.createTempFile(fname, "." + fileExt1); - // Unzip - if (isGz) { - tempFile = ImportUtils.getGzFile(fileObject, tempFile, false); - } else { - tempFile = ImportUtils.getBzipFile(fileObject, tempFile, false); - } - } - tempFile.deleteOnExit(); - tempFile = FileUtil.normalizeFile(tempFile); - fileObject = FileUtil.toFileObject(tempFile); - } catch (IOException ex) { - Exceptions.printStackTrace(ex); + @Override + public Workspace[] process(Container[] containers, Processor processor, Workspace workspace) { + processor.setContainers( + Arrays.stream(containers).map(Container::getUnloader).toArray(ContainerUnloader[]::new)); + for (Container container : containers) { + container.setReport(processor.getReport()); + container.closeLoader(); + if (container.getUnloader().isAutoScale()) { + Scaler scaler = Lookup.getDefault().lookup(Scaler.class); + if (scaler != null) { + scaler.doScale(container); } } } - return fileObject; + if (workspace != null) { + processor.setWorkspace(workspace); + } + Workspace[] workspaces = processor.process(); + if (workspaces == null || workspaces.length == 0) { + throw new RuntimeException( + "The processor " + processor.getClass().getSimpleName() + " didn't return any workspace"); + } + return workspaces; } private FileImporterBuilder getMatchingImporter(FileObject fileObject) { @@ -345,9 +401,15 @@ private FileImporterBuilder getMatchingImporter(FileObject fileObject) { } private FileImporterBuilder getMatchingImporter(String extension) { + if (extension.startsWith(".")) { + extension = extension.substring(1); + } for (FileImporterBuilder im : fileImporterBuilders) { for (FileType ft : im.getFileTypes()) { for (String ext : ft.getExtensions()) { + if (ext.startsWith(".")) { + ext = ext.substring(1); + } if (ext.equalsIgnoreCase(extension)) { return im; } @@ -359,7 +421,7 @@ private FileImporterBuilder getMatchingImporter(String extension) { @Override public FileType[] getFileTypes() { - ArrayList list = new ArrayList(); + ArrayList list = new ArrayList<>(); for (FileImporterBuilder im : fileImporterBuilders) { for (FileType ft : im.getFileTypes()) { list.add(ft); @@ -376,12 +438,9 @@ public boolean isFileSupported(File file) { return true; } } - if (fileObject.getExt().equalsIgnoreCase("zip") - || fileObject.getExt().equalsIgnoreCase("gz") - || fileObject.getExt().equalsIgnoreCase("bz2")) { - return true; - } - return false; + return fileObject.getExt().equalsIgnoreCase("zip") + || fileObject.getExt().equalsIgnoreCase("gz") + || fileObject.getExt().equalsIgnoreCase("bz2"); } @Override diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/NodeDraftImpl.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/NodeDraftImpl.java index 7fe0a371eb..4c9443b1b9 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/NodeDraftImpl.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/impl/NodeDraftImpl.java @@ -39,17 +39,19 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.impl; import org.gephi.io.importer.api.ColumnDraft; import org.gephi.io.importer.api.NodeDraft; +import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class NodeDraftImpl extends ElementDraftImpl implements NodeDraft { + protected final int sequentialId; //Flag protected boolean createdAuto = false; //Viz attributes @@ -59,13 +61,19 @@ public class NodeDraftImpl extends ElementDraftImpl implements NodeDraft { protected float size; protected boolean fixed; - public NodeDraftImpl(ImportContainerImpl container, String id) { + public NodeDraftImpl(ImportContainerImpl container, String id, int sequentialId) { super(container, id); + this.sequentialId = sequentialId; } - //SETTERS - public void setCreatedAuto(boolean createdAuto) { - this.createdAuto = createdAuto; + //GETTERS + public int getSequentialId() { + return sequentialId; + } + + @Override + public float getSize() { + return size; } @Override @@ -73,63 +81,78 @@ public void setSize(float size) { this.size = size; } + @Override + public float getX() { + return x; + } + @Override public void setX(float x) { this.x = x; } + @Override + public float getY() { + return y; + } + @Override public void setY(float y) { this.y = y; } + @Override + public float getZ() { + return z; + } + @Override public void setZ(float z) { this.z = z; } @Override - public void setFixed(boolean fixed) { - this.fixed = fixed; + public boolean isFixed() { + return fixed; } - //GETTERS @Override - public float getSize() { - return size; + public void setFixed(boolean fixed) { + this.fixed = fixed; } @Override - public float getX() { - return x; + public boolean isCreatedAuto() { + return createdAuto; } - @Override - public float getY() { - return y; + //SETTERS + public void setCreatedAuto(boolean createdAuto) { + this.createdAuto = createdAuto; } @Override - public float getZ() { - return z; + ColumnDraft getColumn(String key, Class type) { + return container.addNodeColumn(key, type); } @Override - public boolean isFixed() { - return fixed; + ColumnDraft getColumn(String key) { + return container.getNodeColumn(key); } - public boolean isCreatedAuto() { - return createdAuto; + @Override + public Iterable getColumns() { + return container.getNodeColumns(); } @Override - ColumnDraft getColumn(String key, Class type) { - return container.addNodeColumn(key, type); + String getElementClassName() { + return NbBundle.getMessage(NodeDraftImpl.class, "ElementClassName.Node"); } @Override - ColumnDraft getColumn(String key) { - return container.getNodeColumn(key); + public String toString() { + return id; } } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/DatabaseImporter.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/DatabaseImporter.java index 3a64a4ae59..c91ff68cb9 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/DatabaseImporter.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/DatabaseImporter.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.spi; import org.gephi.io.importer.api.Database; @@ -53,14 +54,16 @@ Development and Distribution License("CDDL") (collectively, the public interface DatabaseImporter extends Importer { /** - * Sets the database description, connexion details and queries - * @param database the database that is to be used to import + * Returns the current database description, connection details and queries + * + * @return the database that is to be used to import */ - public void setDatabase(Database database); + Database getDatabase(); /** - * Returns the current database description, connexion details and queries - * @return the database that is to be used to import + * Sets the database description, connection details and queries + * + * @param database the database that is to be used to import */ - public Database getDatabase(); + void setDatabase(Database database); } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/DatabaseImporterBuilder.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/DatabaseImporterBuilder.java index 6fe927fb40..a5e4a1ca58 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/DatabaseImporterBuilder.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/DatabaseImporterBuilder.java @@ -38,20 +38,22 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.io.importer.spi; /** * Importer builder specific for {@link DatabaseImporter}. - * + * * @author Mathieu Bastian */ public interface DatabaseImporterBuilder extends ImporterBuilder { /** * Builds a new database importer instance, ready to be used. - * @return a new database importer + * + * @return a new database importer */ @Override - public DatabaseImporter buildImporter(); + DatabaseImporter buildImporter(); } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/FileImporter.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/FileImporter.java index 7354a36267..cbe3cac39e 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/FileImporter.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/FileImporter.java @@ -38,9 +38,11 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.io.importer.spi; +import java.io.File; import java.io.Reader; /** @@ -52,7 +54,20 @@ public interface FileImporter extends Importer { /** * Sets the reader where characters can be retrieved. - * @param reader the reader on data + * + * @param reader the reader on data + */ + void setReader(Reader reader); + + /** + * Optional interface to implement for {@link FileImporter} classes that need to receive the source file instead of the {@link Reader} */ - public void setReader(Reader reader); + interface FileAware { + /** + * Called before showing the {@link ImporterUI} and before executing the importer. + * + * @param file Source file + */ + void setFile(File file); + } } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/FileImporterBuilder.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/FileImporterBuilder.java index a8d602fe81..df5bee2bdc 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/FileImporterBuilder.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/FileImporterBuilder.java @@ -38,7 +38,8 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.io.importer.spi; import org.gephi.io.importer.api.FileType; @@ -46,33 +47,38 @@ Development and Distribution License("CDDL") (collectively, the /** * Importer builder specific for {@link FileImporter}. - * + * * @author Mathieu Bastian */ public interface FileImporterBuilder extends ImporterBuilder { /** * Builds a new file importer instance, ready to be used. - * @return a new file importer + * + * @return a new file importer */ @Override - public FileImporter buildImporter(); + FileImporter buildImporter(); /** * Get default file types this importer can deal with. + * * @return an array of file types this importer can read */ - public FileType[] getFileTypes(); + FileType[] getFileTypes(); /** - * Returns true if this importer can import fileObject. Called from - * controllers to identify dynamically which importers can be used for a particular file format. + * Returns true if this importer can import + * fileObject. Called from controllers to identify dynamically + * which importers can be used for a particular file format. *

    - * Use FileObject.getExt() to retrieve file extension. Matching can be done not only with - * metadata but also with file content. The fileObject can be read in that way. + * Use FileObject.getExt() to retrieve file extension. Matching + * can be done not only with metadata but also with file content. The + * fileObject can be read in that way. + * * @param fileObject the file in input - * @return true if the importer is compatible with fileObject or false - * otherwise + * @return true if the importer is compatible with + * fileObject or false otherwise */ - public boolean isMatchingImporter(FileObject fileObject); + boolean isMatchingImporter(FileObject fileObject); } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/Importer.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/Importer.java index 13b358c999..b529e937df 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/Importer.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/Importer.java @@ -38,7 +38,8 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.io.importer.spi; import org.gephi.io.importer.api.ContainerLoader; @@ -46,10 +47,11 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.io.importer.api.Report; /** - * Interface for classes which imports data from files, databases, streams or other sources. + * Interface for classes which imports data from files, databases, streams or + * other sources. *

    - * Importers are built from {@link ImporterBuilder} services and can be configured - * by {@link ImporterUI} classes. + * Importers are built from {@link ImporterBuilder} services and can be + * configured by {@link ImporterUI} classes. * * @author Mathieu Bastian * @see ImportController @@ -57,23 +59,26 @@ Development and Distribution License("CDDL") (collectively, the public interface Importer { /** - * Run the import processus. - * @param loader the container where imported data will be pushed - * @return true if the import is successfull or - * false if it has been cancelled + * Run the import process. + * + * @param loader the container where imported data will be pushed + * @return true if the import is successful or + * false if it has been cancelled */ - public boolean execute(ContainerLoader loader); + boolean execute(ContainerLoader loader); /** * Returns the import container. The container is the import "result", all * data found during import are being pushed to the container. - * @return the import container + * + * @return the import container */ - public ContainerLoader getContainer(); + ContainerLoader getContainer(); /** * Returns the import report, filled with logs and potential issues. - * @return the import report + * + * @return the import report */ - public Report getReport(); + Report getReport(); } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/ImporterBuilder.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/ImporterBuilder.java index 9a77e2af74..06c5b55c40 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/ImporterBuilder.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/ImporterBuilder.java @@ -38,7 +38,8 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.io.importer.spi; import org.gephi.io.importer.api.ImportController; @@ -48,7 +49,8 @@ Development and Distribution License("CDDL") (collectively, the * services (i.e. singleton), the role of builders is simply the create new * instances of particular importer on demand. *

    - * To be recognized by the system, implementations must just add the following annotation: + * To be recognized by the system, implementations must just add the following + * annotation: *

    @ServiceProvider(service=ImporterBuilder.class)
    * * @author Mathieu Bastian @@ -58,13 +60,15 @@ public interface ImporterBuilder { /** * Builds a new importer instance, ready to be used. - * @return a new importer + * + * @return a new importer */ - public Importer buildImporter(); + Importer buildImporter(); /** * Returns the name of this builder - * @return the name of this importer + * + * @return the name of this importer */ - public String getName(); + String getName(); } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/ImporterUI.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/ImporterUI.java index db9eab283f..67c2e602b8 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/ImporterUI.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/ImporterUI.java @@ -38,10 +38,12 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.io.importer.spi; import javax.swing.JPanel; +import org.openide.WizardDescriptor; /** * Define importer settings user interface. @@ -50,7 +52,8 @@ Development and Distribution License("CDDL") (collectively, the * is to provide user interface to configure importers and remember last used * settings if needed. *

    - * To be recognized by the system, implementations must just add the following annotation: + * To be recognized by the system, implementations must just add the following + * annotation: *

    @ServiceProvider(service=ImporterUI.class)
    * * @author Mathieu Bastian @@ -59,41 +62,54 @@ Development and Distribution License("CDDL") (collectively, the public interface ImporterUI { /** - * Link the UI to the importer and therefore to settings values. This method - * is called after getPanel() to push settings. + * Link the UI to the importers and therefore to settings values. This + * method is called after getPanel() to push settings. * - * @param importer the importer that settings is to be set + * @param importers the importers that settings is to be set */ - public void setup(Importer importer); + void setup(Importer[] importers); /** * Returns the importer settings panel. * * @return a settings panel, or null */ - public JPanel getPanel(); + JPanel getPanel(); /** * Notify UI the settings panel has been closed and that new values can be * written. * - * @param update true if user clicked OK or false - * if CANCEL. + * @param update true if user clicked OK or false + * if CANCEL. */ - public void unsetup(boolean update); + void unsetup(boolean update); /** * Returns the importer display name - * @return the importer display name + * + * @return the importer display name */ - public String getDisplayName(); + String getDisplayName(); /** * Returns true if this UI belongs to the given importer. * - * @param importer the importer that has to be tested - * @return true if the UI is matching with importer, - * false otherwise. + * @param importer the importer that has to be tested + * @return true if the UI is matching with + * importer, false otherwise. + */ + boolean isUIForImporter(Importer importer); + + /** + * Optional interface to implement for {@link ImporterUI} classes that need a Wizard */ - public boolean isUIForImporter(Importer importer); + interface WithWizard { + /** + * Used to retreive the wizard descriptor for the Importer UI. + * + * @return Wizard descriptor for the UI + */ + WizardDescriptor getWizardDescriptor(); + } } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/ImporterWizardUI.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/ImporterWizardUI.java index 40df5cda2b..cf1be43e83 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/ImporterWizardUI.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/ImporterWizardUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.spi; import org.openide.WizardDescriptor; @@ -49,64 +50,70 @@ Development and Distribution License("CDDL") (collectively, the * Declared in the system as services (i.e. singleton), the role of UI classes * is to provide user interface to configure importers and remember last used * settings if needed. This service is designed to provide the different panels - * part of a spigot import wizard. + * part of an import wizard. *

    - * To be recognized by the system, implementations must just add the following annotation: + * To be recognized by the system, implementations must just add the following + * annotation: *

    @ServiceProvider(service=ImporterWizardUI.class)
    * * @author Mathieu Bastian - * @see SpigotImporter + * @see WizardImporter */ public interface ImporterWizardUI { /** * Returns the importer display name - * @return the importer display name + * + * @return the importer display name */ - public String getDisplayName(); + String getDisplayName(); /** - * There are two levels for wizard UIs, the category and then the display name. - * Returns the importer category. - * @return the importer category + * There are two levels for wizard UIs, the category and then the display + * name. Returns the importer category. + * + * @return the importer category */ - public String getCategory(); + String getCategory(); /** * Returns the description for this importer - * @return the description test + * + * @return the description test */ - public String getDescription(); + String getDescription(); /** * Returns wizard panels. - * @return panels of the current importer + * + * @return panels of the current importer */ - public WizardDescriptor.Panel[] getPanels(); + WizardDescriptor.Panel[] getPanels(); /** - * Configure panel with previously remembered settings. This method - * is called after getPanels() to push settings. + * Configure panel with previously remembered settings. This + * method is called after getPanels() to push settings. * - * @param panel the panel that settings are to be set + * @param panel the panel that settings are to be set */ - public void setup(WizardDescriptor.Panel panel); + void setup(WizardDescriptor.Panel panel); /** * Notify UI the settings panel has been closed and that new values can be * written. Settings can be read in panel and written * importer. - * @param importer the importer that settings are to be written - * @param panel the panel that settings are read + * + * @param importer the importer that settings are to be written + * @param panel the panel that settings are read */ - public void unsetup(SpigotImporter importer, WizardDescriptor.Panel panel); + void unsetup(WizardImporter importer, WizardDescriptor.Panel panel); /** * Returns true if this UI belongs to the given importer. * - * @param importer the importer that has to be tested - * @return true if the UI is matching with importer, - * false otherwise. + * @param importer the importer that has to be tested + * @return true if the UI is matching with + * importer, false otherwise. */ - public boolean isUIForImporter(Importer importer); + boolean isUIForImporter(Importer importer); } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/SpigotImporter.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/SpigotImporter.java deleted file mode 100644 index fe932d6cb3..0000000000 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/SpigotImporter.java +++ /dev/null @@ -1,52 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.io.importer.spi; - -/** - * Importers interface for importing data from spigots. Spigots are more complex - * data source than a simple file or database, for instance web services or - * directories. - * - * @author Mathieu Bastian - */ -public interface SpigotImporter extends Importer { -} diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/SpigotImporterBuilder.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/SpigotImporterBuilder.java deleted file mode 100644 index d97988ac52..0000000000 --- a/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/SpigotImporterBuilder.java +++ /dev/null @@ -1,57 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.io.importer.spi; - -/** - * Importer builder specific for {@link SpigotImporter}. - * - * @author Mathieu Bastian - */ -public interface SpigotImporterBuilder extends ImporterBuilder { - - /** - * Builds a new spigot importer instance, ready to be used. - * @return a new spigot importer - */ - @Override - public SpigotImporter buildImporter(); -} diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/WizardImporter.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/WizardImporter.java new file mode 100644 index 0000000000..d3fa57a040 --- /dev/null +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/WizardImporter.java @@ -0,0 +1,53 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.io.importer.spi; + +/** + * Importers interface for importing data from wizards. Wizards are more complex + * data source than a simple file or database, for instance web services or + * directories. + * + * @author Mathieu Bastian + */ +public interface WizardImporter extends Importer { +} diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/WizardImporterBuilder.java b/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/WizardImporterBuilder.java new file mode 100644 index 0000000000..40a63ab058 --- /dev/null +++ b/modules/ImportAPI/src/main/java/org/gephi/io/importer/spi/WizardImporterBuilder.java @@ -0,0 +1,59 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.io.importer.spi; + +/** + * Importer builder specific for {@link WizardImporter}. + * + * @author Mathieu Bastian + */ +public interface WizardImporterBuilder extends ImporterBuilder { + + /** + * Builds a new wizard importer instance, ready to be used. + * + * @return a new wizard importer + */ + @Override + WizardImporter buildImporter(); +} diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/processor/spi/Processor.java b/modules/ImportAPI/src/main/java/org/gephi/io/processor/spi/Processor.java index 3f359dd06d..c2cb13cdad 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/processor/spi/Processor.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/processor/spi/Processor.java @@ -38,22 +38,25 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.io.processor.spi; import org.gephi.io.importer.api.ContainerUnloader; import org.gephi.io.importer.api.ImportController; +import org.gephi.io.importer.api.Report; import org.gephi.io.importer.spi.Importer; import org.gephi.project.api.Workspace; +import org.gephi.utils.progress.ProgressTicket; /** - * Interface that define the way data are unloaded from container and - * appened to the workspace. + * Interface that defines the way data are unloaded from containers and + * appended to the workspace(s). *

    - * The purpose of processors is to unload data from the import container - * and push it to the workspace, with various strategy. For instance - * a processor could either create a new workspace or append data to the - * current workspace, managing doubles. + * The purpose of processors is to unload data from the import containers and + * push it to the workspace(s), with various strategies. For instance, a processor + * could either create a new workspace or append data to the current workspace, + * managing duplicates. * * @author Mathieu Bastian * @see ImportController @@ -61,29 +64,49 @@ Development and Distribution License("CDDL") (collectively, the public interface Processor { /** - * Process data from the container to the workspace. This task - * is done after an importer pushed data to the container. + * Process data from the container to the workspace(s). It + * returns the workspace(s) where data have been pushed. + * * @see Importer + * @return the workspace(s) where data have been pushed */ - public void process(); + Workspace[] process(); /** - * Sets the data container. The processor's job is to get data from the container - * and append it to the workspace. - * @param container the container where data are + * Sets the data containers. The processor's job is to get data from the + * containers and append it to the workspace. + * + * @param containers the containers where data are */ - public void setContainer(ContainerUnloader container); + void setContainers(ContainerUnloader[] containers); /** - * Sets the destination workspace for the data in the container. If no workspace - * is provided, the current workspace will be used. + * Sets the destination workspace for the data in the containers. If no + * workspace is provided, it's up to the processor's implementation to decide where to push data - + * for instance, a processor could create a new workspace or append data to the current workspace. + * * @param workspace the workspace where data are to be pushed */ - public void setWorkspace(Workspace workspace); + void setWorkspace(Workspace workspace); /** - * Returns the processor name. + * Returns the processor's name. + * * @return the processor display name */ - public String getDisplayName(); + String getDisplayName(); + + /** + * Sets the progress ticket. + * + * @param progressTicket progress ticket + */ + void setProgressTicket(ProgressTicket progressTicket); + + /** + * Returns the report of the processor after processing is done, with possible warnings and errors. + * + * @return the processor report after processing + */ + Report getReport(); } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/processor/spi/ProcessorConfigurationException.java b/modules/ImportAPI/src/main/java/org/gephi/io/processor/spi/ProcessorConfigurationException.java new file mode 100644 index 0000000000..a8d27e0ac9 --- /dev/null +++ b/modules/ImportAPI/src/main/java/org/gephi/io/processor/spi/ProcessorConfigurationException.java @@ -0,0 +1,59 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.io.processor.spi; + +/** + * Exception thrown by a {@link Processor} when the graph configuration of an import container is incompatible + * with the existing workspace's graph model configuration. + *

    + * This exception is a {@link RuntimeException} to maintain backward compatibility. The error is also logged + * as a {@link org.gephi.io.importer.api.Issue.Level#SEVERE} issue in the processor's report. + * + * @author Mathieu Bastian + */ +public class ProcessorConfigurationException extends RuntimeException { + + public ProcessorConfigurationException(String message) { + super(message); + } +} diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/processor/spi/ProcessorUI.java b/modules/ImportAPI/src/main/java/org/gephi/io/processor/spi/ProcessorUI.java index e82aa15c52..56adf92f04 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/processor/spi/ProcessorUI.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/processor/spi/ProcessorUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.processor.spi; import javax.swing.JPanel; @@ -52,7 +53,8 @@ Development and Distribution License("CDDL") (collectively, the * settings if needed. User interface for processors are shown when the import * report is closed and can access the container before the process started. *

    - * To be recognized by the system, implementations must just add the following annotation: + * To be recognized by the system, implementations must just add the following + * annotation: *

    @ServiceProvider(service=ProcessorUI.class)
    * * @author Mathieu Bastian @@ -61,43 +63,43 @@ Development and Distribution License("CDDL") (collectively, the public interface ProcessorUI { /** - * Link the UI to the processor and therefore to settings values. This method - * is called after getPanel() to push settings. + * Link the UI to the processor and therefore to settings values. This + * method is called after getPanel() to push settings. * - * @param processor the processor that settings is to be set + * @param processor the processor that settings is to be set */ - public void setup(Processor processor); + void setup(Processor processor); /** * Returns the processor settings panel. * * @return a settings panel, or null */ - public JPanel getPanel(); + JPanel getPanel(); /** * Notify UI the settings panel has been closed and that new values can be * written. - * */ - public void unsetup(); + void unsetup(); /** * Returns true if this UI belongs to the given processor. * - * @param processor the processor that has to be tested - * @return true if the UI is matching with processor, - * false otherwise. + * @param processor the processor that has to be tested + * @return true if the UI is matching with + * processor, false otherwise. */ - public boolean isUIFoProcessor(Processor processor); + boolean isUIFoProcessor(Processor processor); /** - * Returns true if the processor this UI represents is valid for - * the container. Processors could be specific to some type of data - * and this method can provide this information. - * @param container the container that is to be processed - * @return true if the processor this UI represents is - * valid for container. + * Returns true if the processor this UI represents is valid + * for containers. Processors could be specific to some type of + * data and this method can provide this information. + * + * @param containers containers that are to be processed + * @return true if the processor this UI represents is valid + * for containers. */ - public boolean isValid(Container container); + boolean isValid(Container[] containers); } diff --git a/modules/ImportAPI/src/main/java/org/gephi/io/processor/spi/Scaler.java b/modules/ImportAPI/src/main/java/org/gephi/io/processor/spi/Scaler.java index 8ef8d91df7..7b7fe8199a 100644 --- a/modules/ImportAPI/src/main/java/org/gephi/io/processor/spi/Scaler.java +++ b/modules/ImportAPI/src/main/java/org/gephi/io/processor/spi/Scaler.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.processor.spi; import org.gephi.io.importer.api.Container; @@ -55,7 +56,8 @@ public interface Scaler { /** * Scale container content to the system scale. Adapt and recenter * the scale of nodes positions and sizes. + * * @param container the container that is to be scaled to the right scale */ - public void doScale(Container container); + void doScale(Container container); } diff --git a/modules/ImportAPI/src/main/nbm/manifest.mf b/modules/ImportAPI/src/main/nbm/manifest.mf index 3160540f58..d670da8c7a 100644 --- a/modules/ImportAPI/src/main/nbm/manifest.mf +++ b/modules/ImportAPI/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/io/importer/api/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi Core +OpenIDE-Module-Name: Import API \ No newline at end of file diff --git a/modules/ImportAPI/src/main/nbm/module.xml b/modules/ImportAPI/src/main/nbm/module.xml deleted file mode 100644 index 002ee96385..0000000000 --- a/modules/ImportAPI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle.properties index 37ba163b14..6b8eb03c18 100644 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle.properties +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle.properties @@ -1,7 +1,4 @@ -OpenIDE-Module-Display-Category=Gephi Core -OpenIDE-Module-Long-Description=\ - API/SPI for importers -OpenIDE-Module-Name=Import API +OpenIDE-Module-Long-Description=API/SPI for importers OpenIDE-Module-Short-Description=API/SPI for importers @@ -11,4 +8,7 @@ ImportUtils.error_no_matching_db_importer = Impossible to find a compatible Impo ImportUtils.error_file_not_found = Impossible to open the file. ImportUtils.error_missing_document_instance_factory = Impossible to obtain an instance of DocumentBuilder ImportUtils.error_io = Impossible to read the given file -ImportUtils.error_sax = Impossible to parse the given XML file \ No newline at end of file +ImportUtils.error_sax = Impossible to parse the given XML file + +EmptyFileException.message = The file ''{0}'' is empty. +EmptyFileException.messageNoName = The file is empty. \ No newline at end of file diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_ar.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_ca.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_ca.properties new file mode 100644 index 0000000000..e36ea09b87 --- /dev/null +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_ca.properties @@ -0,0 +1,11 @@ +OpenIDE-Module-Long-Description=API/SPI for importers +OpenIDE-Module-Short-Description=API/SPI for importers + + +ImportUtils.error_no_matching_file_importer=Impossible to find a compatible Importer.\nThe file format is not supported. Check file's extension. +ImportUtils.error_no_matching_stream_importer=Impossible to find a compatible Importer.\nThe stream is not supported. +ImportUtils.error_no_matching_db_importer=Impossible to find a compatible Importer.\nThe database is not supported. +ImportUtils.error_file_not_found=Impossible to open the file. +ImportUtils.error_missing_document_instance_factory=Impossible to obtain an instance of DocumentBuilder +ImportUtils.error_io=Impossible to read the given file +ImportUtils.error_sax=Impossible to parse the given XML file diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_cs.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_cs.properties index 950bd1bdd9..ba003a6746 100644 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_cs.properties +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_cs.properties @@ -1,25 +1,11 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-29 19\:53+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=API/SPI pro import\u00e9ry - -OpenIDE-Module-Short-Description=API/SPI pro import\u00e9try - -ImportUtils.error_no_matching_file_importer=Nelze nal\u00e9zt kompatibiln\u00edho import\u00e9ra.\nForm\u00e1t souboru nen\u00ed podporov\u00e1n. Zkontrolujte p\u0159\u00edponu souboru. - -ImportUtils.error_no_matching_stream_importer=Nelze nal\u00e9zt kompatibiln\u00edho import\u00e9ra.\nProud nen\u00ed podporov\u00e1n. - -ImportUtils.error_no_matching_db_importer=Nelze nal\u00e9zt kompatibiln\u00edho import\u00e9ra.\nDatab\u00e1ze nen\u00ed podporov\u00e1na. - -ImportUtils.error_file_not_found=Nelze otev\u0159\u00edt soubor. - -ImportUtils.error_missing_document_instance_factory=Nelze z\u00edskat instanci DocumentBuilder - -ImportUtils.error_io=Nelze p\u0159e\u010d\u00edst zadan\u00fd soubor - -ImportUtils.error_sax=Nelze zpracovat zadan\u00fd soubor XML +OpenIDE-Module-Long-Description=API/SPI pro importιry +OpenIDE-Module-Short-Description=API/SPI pro importιtry + + +# ImportUtils.error_no_matching_file_importer = Impossible to find a compatible Importer.\nThe file format is not supported. Check file's extension. +# ImportUtils.error_no_matching_stream_importer = Impossible to find a compatible Importer.\nThe stream is not supported. +# ImportUtils.error_no_matching_db_importer = Impossible to find a compatible Importer.\nThe database is not supported. +ImportUtils.error_file_not_found = Nelze otev\u0159νt soubor. +ImportUtils.error_missing_document_instance_factory = Nelze zνskat instanci DocumentBuilder +ImportUtils.error_io = Nelze p\u0159e\u010dνst zadanύ soubor +ImportUtils.error_sax = Nelze zpracovat zadanύ soubor XML diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_de.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_de.properties new file mode 100644 index 0000000000..a07a9fb5a9 --- /dev/null +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_de.properties @@ -0,0 +1,11 @@ +OpenIDE-Module-Long-Description=API/SPI fόr Importer +OpenIDE-Module-Short-Description=API/SPI fόr Importer + + +# ImportUtils.error_no_matching_file_importer = Impossible to find a compatible Importer.\nThe file format is not supported. Check file's extension. +# ImportUtils.error_no_matching_stream_importer = Impossible to find a compatible Importer.\nThe stream is not supported. +# ImportUtils.error_no_matching_db_importer = Impossible to find a compatible Importer.\nThe database is not supported. +ImportUtils.error_file_not_found = Kann Datei nicht φffnen. +ImportUtils.error_missing_document_instance_factory = Keine Instanz von DocumentBuilder verfόgbar +ImportUtils.error_io = Kann angegebene Datei nicht lesen +ImportUtils.error_sax = Kann angegebene XML-Datei nicht parsen diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_el.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_el.properties new file mode 100644 index 0000000000..ba34017613 --- /dev/null +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_el.properties @@ -0,0 +1,13 @@ + + +OpenIDE-Module-Long-Description=API/SPI \u03B3\u03B9\u03B1 \u03BC\u03B5\u03B8\u03CC\u03B4\u03BF\u03C5\u03C2 \u03B5\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AE\u03C2 (importers) +OpenIDE-Module-Short-Description=API/SPI \u03B3\u03B9\u03B1 \u03BC\u03B5\u03B8\u03CC\u03B4\u03BF\u03C5\u03C2 \u03B5\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AE\u03C2 (importers) +ImportUtils.error_no_matching_stream_importer=\u0391\u03B4\u03CD\u03BD\u03B1\u03C4\u03BF \u03BD\u03B1 \u03B2\u03C1\u03B5\u03B8\u03B5\u03AF \u03C3\u03C5\u03BC\u03B2\u03B1\u03C4\u03AE \u03BC\u03AD\u03B8\u03BF\u03B4\u03BF\u03C2 \u03B5\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AE\u03C2 (importer).\n\u0397 \u03C1\u03BF\u03AE (stream) \u03B4\u03B5\u03BD \u03C5\u03C0\u03BF\u03C3\u03C4\u03B7\u03C1\u03AF\u03B6\u03B5\u03C4\u03B1\u03B9. +ImportUtils.error_no_matching_db_importer=\u0391\u03B4\u03CD\u03BD\u03B1\u03C4\u03BF\u03BD \u03BD\u03B1 \u03B2\u03C1\u03B5\u03B8\u03B5\u03AF \u03C3\u03C5\u03BC\u03B2\u03B1\u03C4\u03AE \u03BC\u03AD\u03B8\u03BF\u03B4\u03BF\u03C2 \u03B5\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AE\u03C2 (importer).\n\u0397 \u03B2\u03AC\u03C3\u03B7 \u03B4\u03B5\u03B4\u03BF\u03BC\u03AD\u03BD\u03C9\u03BD \u03B4\u03B5\u03BD \u03C5\u03C0\u03BF\u03C3\u03C4\u03B7\u03C1\u03AF\u03B6\u03B5\u03C4\u03B1\u03B9. +ImportUtils.error_file_not_found=\u0391\u03B4\u03CD\u03BD\u03B1\u03C4\u03BF \u03C4\u03BF\u03BD \u03AC\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1 \u03C4\u03BF\u03C5 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5. +ImportUtils.error_missing_document_instance_factory=\u0391\u03B4\u03CD\u03BD\u03B1\u03C4\u03BF \u03BD\u03B1 \u03B1\u03BD\u03B1\u03BA\u03C4\u03AE\u03C3\u03BF\u03C5\u03BC\u03B5 \u03C3\u03C4\u03B9\u03B3\u03BC\u03B9\u03CC\u03C4\u03C5\u03C0\u03BF \u03C4\u03BF\u03C5 DocumentBuilder +ImportUtils.error_io=\u0391\u03B4\u03CD\u03BD\u03B1\u03C4\u03BF \u03BD\u03B1 \u03B4\u03B9\u03B1\u03B2\u03B1\u03C3\u03C4\u03B5\u03AF \u03C4\u03BF \u03C3\u03C5\u03B3\u03BA\u03B5\u03BA\u03C1\u03B9\u03BC\u03AD\u03BD\u03BF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF +ImportUtils.error_sax=\u0391\u03B4\u03CD\u03BD\u03B1\u03C4\u03BF \u03BD\u03B1 \u03B1\u03BD\u03B1\u03BB\u03C5\u03B8\u03B5\u03AF (parse) \u03C3\u03C5\u03B3\u03BA\u03B5\u03BA\u03C1\u03B9\u03BC\u03AD\u03BD\u03BF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF XML + + +ImportUtils.error_no_matching_file_importer=\u0391\u03B4\u03CD\u03BD\u03B1\u03C4\u03B7 \u03B7 \u03B5\u03CD\u03C1\u03B5\u03C3\u03B7 \u03C3\u03C5\u03BC\u03B2\u03B1\u03C4\u03AE\u03C2 \u03BC\u03B5\u03B8\u03CC\u03B4\u03BF\u03C5 \u03B5\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AE\u03C2 (importer).\n\u0397 \u03BC\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5 \u03B4\u03B5\u03BD \u03C5\u03C0\u03BF\u03C3\u03C4\u03B7\u03C1\u03AF\u03B6\u03B5\u03C4\u03B1\u03B9. \u0395\u03BB\u03AD\u03B3\u03BE\u03C4\u03B5 \u03C4\u03B7\u03BD \u03B5\u03C0\u03AD\u03BA\u03C4\u03B1\u03C3\u03B7 \u03C4\u03BF\u03C5 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5. diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_es.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_es.properties index fef7b3832a..b97630073c 100644 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_es.properties +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_es.properties @@ -1,26 +1,11 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-31 12\:43+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=API/SPI para importadores - -OpenIDE-Module-Short-Description=API/SPI para importadores - -ImportUtils.error_no_matching_file_importer=Imposible encontrar un importador compatible.\nEl formato del archivo no est\u00e1 soportado. Comprueba la extensi\u00f3n del archivo. - -ImportUtils.error_no_matching_stream_importer=Imposible encontrar un importador compatible.\nEl flujo no est\u00e1 soportado. - -ImportUtils.error_no_matching_db_importer=Imposible encontrar un importador compatible.\nLa base de datos no est\u00e1 soportada. - -ImportUtils.error_file_not_found=Imposible abrir el archivo. - -ImportUtils.error_missing_document_instance_factory=Imposible obtener una instancia de DocumentBuilder - -ImportUtils.error_io=Impossble leer el archivo dado - -ImportUtils.error_sax=Impossble analizar el archivo XML dado +OpenIDE-Module-Long-Description=API/SPI para importadores +OpenIDE-Module-Short-Description=API/SPI para importadores + + +ImportUtils.error_no_matching_file_importer = Imposible encontrar un importador compatible.\nEl formato del archivo no estα soportado. Comprueba la extensiσn del archivo. +ImportUtils.error_no_matching_stream_importer = Imposible encontrar un importador compatible.\nEl flujo no estα soportado. +ImportUtils.error_no_matching_db_importer = Imposible encontrar un importador compatible.\nLa base de datos no estα soportada. +ImportUtils.error_file_not_found = Imposible abrir el archivo. +ImportUtils.error_missing_document_instance_factory = Imposible obtener una instancia de DocumentBuilder +ImportUtils.error_io = Impossble leer el archivo dado +ImportUtils.error_sax = Impossble analizar el archivo XML dado diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_fr.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_fr.properties index f00efa79f1..889987f108 100644 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_fr.properties +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_fr.properties @@ -1,26 +1,11 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-31 13\:01+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API/SPI du module d'Import - -OpenIDE-Module-Short-Description=API/SPI du module d'Import - -ImportUtils.error_no_matching_file_importer=Impossible de trouver un import compatible.\nCe format de fichier n'est pas support\u00e9, v\u00e9rifiez son extension. - -ImportUtils.error_no_matching_stream_importer=Impossible de trouver un import compatible.\nCe flux n'est pas support\u00e9. - -ImportUtils.error_no_matching_db_importer=Impossible de trouver un import compatible.\nCette base de donn\u00e9es n'est pas support\u00e9e. - -ImportUtils.error_file_not_found=Impossible d'ouvrir le fichier. - -ImportUtils.error_missing_document_instance_factory=Impossible d'obtenir une instance de DocumentBuilder. - -ImportUtils.error_io=Impossible de lire le fichier. - -ImportUtils.error_sax=Impossible de parcourir le fichier XML. +OpenIDE-Module-Long-Description=API/SPI du module d'Import +OpenIDE-Module-Short-Description=API/SPI du module d'Import + + +ImportUtils.error_no_matching_file_importer = Impossible de trouver un importeur compatible.\nLe format de fichier n'est pas supportι. Veuillez vιrifier son extension. +ImportUtils.error_no_matching_stream_importer = Impossible de trouver un importeur compatible.\nLe flux n'est pas supportι. +ImportUtils.error_no_matching_db_importer = Impossible de trouver un importeur compatible.\nLa base de donnιes n'est pas supportιe. +ImportUtils.error_file_not_found = Impossible d'ouvrir le fichier. +ImportUtils.error_missing_document_instance_factory = Impossible d'obtenir une instance de DocumentBuilder. +ImportUtils.error_io = Impossible de lire le fichier. +ImportUtils.error_sax = Impossible de parcourir le fichier XML. diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_he.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_he.properties new file mode 100644 index 0000000000..e36ea09b87 --- /dev/null +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_he.properties @@ -0,0 +1,11 @@ +OpenIDE-Module-Long-Description=API/SPI for importers +OpenIDE-Module-Short-Description=API/SPI for importers + + +ImportUtils.error_no_matching_file_importer=Impossible to find a compatible Importer.\nThe file format is not supported. Check file's extension. +ImportUtils.error_no_matching_stream_importer=Impossible to find a compatible Importer.\nThe stream is not supported. +ImportUtils.error_no_matching_db_importer=Impossible to find a compatible Importer.\nThe database is not supported. +ImportUtils.error_file_not_found=Impossible to open the file. +ImportUtils.error_missing_document_instance_factory=Impossible to obtain an instance of DocumentBuilder +ImportUtils.error_io=Impossible to read the given file +ImportUtils.error_sax=Impossible to parse the given XML file diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_hu.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_hu.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_hu.properties @@ -0,0 +1 @@ + diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_it.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_it.properties new file mode 100644 index 0000000000..107e6a30e0 --- /dev/null +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_it.properties @@ -0,0 +1,11 @@ +OpenIDE-Module-Long-Description=API/SPI del modulo di importazione +OpenIDE-Module-Short-Description=API/SPI for importers + + +ImportUtils.error_no_matching_file_importer=Impossible to find a compatible Importer.\nThe file format is not supported. Check file's extension. +ImportUtils.error_no_matching_stream_importer=Impossible to find a compatible Importer.\nThe stream is not supported. +ImportUtils.error_no_matching_db_importer=Impossible to find a compatible Importer.\nThe database is not supported. +ImportUtils.error_file_not_found=Impossible to open the file. +ImportUtils.error_missing_document_instance_factory=Impossible to obtain an instance of DocumentBuilder +ImportUtils.error_io=Impossible to read the given file +ImportUtils.error_sax=Impossible to parse the given XML file diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_ja.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_ja.properties index 19b52d5501..8737c77e96 100644 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_ja.properties +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_ja.properties @@ -1,25 +1,11 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-21 01\:29+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u30a4\u30f3\u30dd\u30fc\u30bf\u7528API/SPI - -OpenIDE-Module-Short-Description=\u30a4\u30f3\u30dd\u30fc\u30bf\u7528API/SPI - -ImportUtils.error_no_matching_file_importer=\u4e92\u63db\u6027\u306e\u3042\u308b\u30a8\u30af\u30b9\u30dd\u30fc\u30bf\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u5f62\u5f0f\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30d5\u30a1\u30a4\u30eb\u306e\u62e1\u5f35\u5b50\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 - -ImportUtils.error_no_matching_stream_importer=\u4e92\u63db\u6027\u306e\u3042\u308b\u30a8\u30af\u30b9\u30dd\u30fc\u30bf\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002\u30b9\u30c8\u30ea\u30fc\u30e0\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 - -ImportUtils.error_no_matching_db_importer=\u4e92\u63db\u6027\u306e\u3042\u308b\u30a8\u30af\u30b9\u30dd\u30fc\u30bf\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306f\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 - -ImportUtils.error_file_not_found=\u30d5\u30a1\u30a4\u30eb\u304c\u958b\u3051\u307e\u305b\u3093\u3002 - -ImportUtils.error_missing_document_instance_factory=DocumentBuilder\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093 - -ImportUtils.error_io=\u6307\u5b9a\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u304c\u8aad\u3081\u307e\u305b\u3093 - -ImportUtils.error_sax=\u6307\u5b9a\u3055\u308c\u305fXML\u30d5\u30a1\u30a4\u30eb\u304c\u89e3\u6790\u3067\u304d\u307e\u305b\u3093 +OpenIDE-Module-Long-Description=\u30a4\u30f3\u30dd\u30fc\u30bf\u7528API/SPI +OpenIDE-Module-Short-Description=\u30a4\u30f3\u30dd\u30fc\u30bf\u7528API/SPI + + +# ImportUtils.error_no_matching_file_importer = Impossible to find a compatible Importer.\nThe file format is not supported. Check file's extension. +# ImportUtils.error_no_matching_stream_importer = Impossible to find a compatible Importer.\nThe stream is not supported. +# ImportUtils.error_no_matching_db_importer = Impossible to find a compatible Importer.\nThe database is not supported. +ImportUtils.error_file_not_found = \u30d5\u30a1\u30a4\u30eb\u304c\u958b\u3051\u307e\u305b\u3093\u3002 +ImportUtils.error_missing_document_instance_factory = DocumentBuilder\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u304c\u53d6\u5f97\u3067\u304d\u307e\u305b\u3093 +ImportUtils.error_io = \u6307\u5b9a\u3055\u308c\u305f\u30d5\u30a1\u30a4\u30eb\u304c\u8aad\u3081\u307e\u305b\u3093 +ImportUtils.error_sax = \u6307\u5b9a\u3055\u308c\u305fXML\u30d5\u30a1\u30a4\u30eb\u304c\u89e3\u6790\u3067\u304d\u307e\u305b\u3093 diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_ko.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_ko.properties new file mode 100644 index 0000000000..8a853bc55e --- /dev/null +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_ko.properties @@ -0,0 +1,13 @@ + + +OpenIDE-Module-Long-Description=\uBD88\uB7EC\uC624\uAE30\uB97C \uC704\uD55C API/SPI +OpenIDE-Module-Short-Description=\uBD88\uB7EC\uC624\uAE30\uB97C \uC704\uD55C API/SPI + + +ImportUtils.error_no_matching_file_importer=\uD638\uD658\uB418\uB294 \uBD88\uB7EC\uC624\uAE30\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\n\uADF8 \uD30C\uC77C \uD3EC\uB9F7\uC740 \uC9C0\uC6D0\uC774 \uC548 \uB429\uB2C8\uB2E4. \uD30C\uC77C \uD655\uC7A5\uC790\uB97C \uD655\uC778\uD558\uC138\uC694. +ImportUtils.error_no_matching_stream_importer=\uD638\uD658\uB418\uB294 \uBD88\uB7EC\uC624\uAE30\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\n\uADF8 \uC2A4\uD2B8\uB9BC\uC740 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. +ImportUtils.error_no_matching_db_importer=\uD638\uD658\uB418\uB294 \uBD88\uB7EC\uC624\uAE30\uB97C \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4.\n\uADF8 \uB370\uC774\uD130\uBCA0\uC774\uC2A4\uB294 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. +ImportUtils.error_file_not_found=\uD30C\uC77C\uC744 \uC5F4 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. +ImportUtils.error_missing_document_instance_factory=DocumentBuilder\uC758 \uC778\uC2A4\uD134\uC2A4\uB97C \uC5BB\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 +ImportUtils.error_io=\uC8FC\uC5B4\uC9C4 \uD30C\uC77C\uC744 \uC77D\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 +ImportUtils.error_sax=\uC8FC\uC5B4\uC9C4 XML \uD30C\uC77C\uC744 \uD574\uC11D\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_nl.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_nl.properties new file mode 100644 index 0000000000..e36ea09b87 --- /dev/null +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_nl.properties @@ -0,0 +1,11 @@ +OpenIDE-Module-Long-Description=API/SPI for importers +OpenIDE-Module-Short-Description=API/SPI for importers + + +ImportUtils.error_no_matching_file_importer=Impossible to find a compatible Importer.\nThe file format is not supported. Check file's extension. +ImportUtils.error_no_matching_stream_importer=Impossible to find a compatible Importer.\nThe stream is not supported. +ImportUtils.error_no_matching_db_importer=Impossible to find a compatible Importer.\nThe database is not supported. +ImportUtils.error_file_not_found=Impossible to open the file. +ImportUtils.error_missing_document_instance_factory=Impossible to obtain an instance of DocumentBuilder +ImportUtils.error_io=Impossible to read the given file +ImportUtils.error_sax=Impossible to parse the given XML file diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_oc.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_oc.properties index c1facba9f2..d64389a5c8 100644 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_oc.properties +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_oc.properties @@ -1,24 +1,11 @@ -# Occitan (post 1500) translation for gephi -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the gephi package. -# FIRST AUTHOR , 2010. -# -!=Project-Id-Version\: gephi\nReport-Msgid-Bugs-To\: FULL NAME \nPOT-Creation-Date\: 2010-04-07 13\:16+0200\nPO-Revision-Date\: 2010-10-24 10\:12+0000\nLast-Translator\: C\u00e9dric VALMARY (Tot en \u00f2c) \nLanguage-Team\: Occitan (post 1500) \nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nX-Launchpad-Export-Date\: 2011-03-13 04\:48+0000\nX-Generator\: Launchpad (build 12559)\n - -OpenIDE-Module-Long-Description=API/SPI del modul d'Imp\u00f2rt - +OpenIDE-Module-Long-Description=API/SPI del modul d'Impςrt OpenIDE-Module-Short-Description=Implementacion dels transformadors de classament -!ImportUtils.error_no_matching_file_importer= - -!ImportUtils.error_no_matching_stream_importer= - -!ImportUtils.error_no_matching_db_importer= - -!ImportUtils.error_file_not_found= - -!ImportUtils.error_missing_document_instance_factory= - -!ImportUtils.error_io= -!ImportUtils.error_sax= +ImportUtils.error_no_matching_file_importer=Impossible to find a compatible Importer.\nThe file format is not supported. Check file's extension. +ImportUtils.error_no_matching_stream_importer=Impossible to find a compatible Importer.\nThe stream is not supported. +ImportUtils.error_no_matching_db_importer=Impossible to find a compatible Importer.\nThe database is not supported. +ImportUtils.error_file_not_found=Impossible to open the file. +ImportUtils.error_missing_document_instance_factory=Impossible to obtain an instance of DocumentBuilder +ImportUtils.error_io=Impossible to read the given file +ImportUtils.error_sax=Impossible to parse the given XML file diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_pt_BR.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_pt_BR.properties index 44e6950309..3039984347 100644 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_pt_BR.properties +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_pt_BR.properties @@ -1,25 +1,11 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 00\:38+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API/SPI de importadores - -OpenIDE-Module-Short-Description=API/SPI de importadores - -ImportUtils.error_no_matching_file_importer=Foi imposs\u00edvel encontrar um Importador compat\u00edvel.\nO formato de arquivo n\u00e3o \u00e9 suportado. Verifique a extens\u00e3o do arquivo. - -ImportUtils.error_no_matching_stream_importer=Foi imposs\u00edvel encontrar um Importador compat\u00edvel.\nO stream n\u00e3o \u00e9 suportado. - -ImportUtils.error_no_matching_db_importer=Foi imposs\u00edvel encontrar um Importador compat\u00edvel.\nO banco de dados n\u00e3o \u00e9 suportado. - -ImportUtils.error_file_not_found=Imposs\u00edvel abrir o arquivo. - -ImportUtils.error_missing_document_instance_factory=Imposs\u00edvel obter uma inst\u00e2ncia da classe DocumentBuilder - -ImportUtils.error_io=Imposs\u00edvel ler o arquivo - -ImportUtils.error_sax=Imposs\u00edvel analisar o arquivo XML +OpenIDE-Module-Long-Description=API/SPI de importadores +OpenIDE-Module-Short-Description=API/SPI de importadores + + +# ImportUtils.error_no_matching_file_importer = Impossible to find a compatible Importer.\nThe file format is not supported. Check file's extension. +# ImportUtils.error_no_matching_stream_importer = Impossible to find a compatible Importer.\nThe stream is not supported. +# ImportUtils.error_no_matching_db_importer = Impossible to find a compatible Importer.\nThe database is not supported. +ImportUtils.error_file_not_found = Impossνvel abrir o arquivo. +ImportUtils.error_missing_document_instance_factory = Impossνvel obter uma instβncia da classe DocumentBuilder +ImportUtils.error_io = Impossνvel ler o arquivo +ImportUtils.error_sax = Impossνvel analisar o arquivo XML diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_ro.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_ro.properties new file mode 100644 index 0000000000..a1fc30ca3f --- /dev/null +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_ro.properties @@ -0,0 +1,13 @@ + + + + +ImportUtils.error_no_matching_file_importer=Imposibil de g\u0103sit un importator compatibil.\nFormatul de fi\u0219ier nu este acceptat. Verific\u0103 extensia fi\u0219ierului. +OpenIDE-Module-Long-Description=API/SPI pentru importatori +OpenIDE-Module-Short-Description=API/SPI pentru importatori +ImportUtils.error_no_matching_stream_importer=Imposibil de g\u0103sit un importator compatibil.\nFluxul de date nu este acceptat. +ImportUtils.error_no_matching_db_importer=Imposibil de g\u0103sit un importator compatibil.\nBaza de date nu este acceptat\u0103. +ImportUtils.error_file_not_found=Imposibil de deschis fi\u0219ierul. +ImportUtils.error_missing_document_instance_factory=Imposibil de ob\u021Binut o instan\u021B\u0103 de DocumentBuilder +ImportUtils.error_io=Imposibil de citit fi\u0219ierul dat +ImportUtils.error_sax=Imposibil de parsat fi\u0219ierul XML dat diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_ru.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_ru.properties index f297be63c7..978d5a7e31 100644 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_ru.properties +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_ru.properties @@ -1,25 +1,11 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-19 05\:24+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - OpenIDE-Module-Long-Description=API/SPI for importers - OpenIDE-Module-Short-Description=API/SPI for importers -ImportUtils.error_no_matching_file_importer=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0418\u043c\u043f\u043e\u0440\u0442\u0451\u0440.\n\u0414\u0430\u043d\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0444\u0430\u0439\u043b\u0430 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u041f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430. - -ImportUtils.error_no_matching_stream_importer=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0418\u043c\u043f\u043e\u0440\u0442\u0451\u0440.\n\u041f\u043e\u0442\u043e\u043a \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f. - -ImportUtils.error_no_matching_db_importer=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0418\u043c\u043f\u043e\u0440\u0442\u0451\u0440.\n\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f. +# ImportUtils.error_no_matching_file_importer = Impossible to find a compatible Importer.\nThe file format is not supported. Check file's extension. +# ImportUtils.error_no_matching_stream_importer = Impossible to find a compatible Importer.\nThe stream is not supported. +# ImportUtils.error_no_matching_db_importer = Impossible to find a compatible Importer.\nThe database is not supported. ImportUtils.error_file_not_found=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b. - ImportUtils.error_missing_document_instance_factory=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 DocumentBuilder. - ImportUtils.error_io=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b - ImportUtils.error_sax=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 XML \u0444\u0430\u0439\u043b diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_th.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_tr.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_tr.properties new file mode 100644 index 0000000000..e36ea09b87 --- /dev/null +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_tr.properties @@ -0,0 +1,11 @@ +OpenIDE-Module-Long-Description=API/SPI for importers +OpenIDE-Module-Short-Description=API/SPI for importers + + +ImportUtils.error_no_matching_file_importer=Impossible to find a compatible Importer.\nThe file format is not supported. Check file's extension. +ImportUtils.error_no_matching_stream_importer=Impossible to find a compatible Importer.\nThe stream is not supported. +ImportUtils.error_no_matching_db_importer=Impossible to find a compatible Importer.\nThe database is not supported. +ImportUtils.error_file_not_found=Impossible to open the file. +ImportUtils.error_missing_document_instance_factory=Impossible to obtain an instance of DocumentBuilder +ImportUtils.error_io=Impossible to read the given file +ImportUtils.error_sax=Impossible to parse the given XML file diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_uk.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_uk.properties new file mode 100644 index 0000000000..9cb6df1c33 --- /dev/null +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_uk.properties @@ -0,0 +1,9 @@ +OpenIDE-Module-Long-Description=API/SPI \u0434\u043B\u044F \u0456\u043C\u043F\u043E\u0440\u0442\u0435\u0440\u0456\u0432 +OpenIDE-Module-Short-Description=API/SPI \u0434\u043B\u044F \u0456\u043C\u043F\u043E\u0440\u0442\u0435\u0440\u0456\u0432 +ImportUtils.error_no_matching_file_importer=\u041D\u0435\u043C\u043E\u0436\u043B\u0438\u0432\u043E \u0437\u043D\u0430\u0439\u0442\u0438 \u0441\u0443\u043C\u0456\u0441\u043D\u0438\u0439 \u0456\u043C\u043F\u043E\u0440\u0442\u0435\u0440.\n\u0424\u043E\u0440\u043C\u0430\u0442 \u0444\u0430\u0439\u043B\u0443 \u043D\u0435 \u043F\u0456\u0434\u0442\u0440\u0438\u043C\u0443\u0454\u0442\u044C\u0441\u044F. \u041F\u0435\u0440\u0435\u0432\u0456\u0440\u0442\u0435 \u0440\u043E\u0437\u0448\u0438\u0440\u0435\u043D\u043D\u044F \u0444\u0430\u0439\u043B\u0443. +ImportUtils.error_no_matching_stream_importer=\u041D\u0435\u043C\u043E\u0436\u043B\u0438\u0432\u043E \u0437\u043D\u0430\u0439\u0442\u0438 \u0441\u0443\u043C\u0456\u0441\u043D\u0438\u0439 \u0456\u043C\u043F\u043E\u0440\u0442\u0435\u0440.\n\u041F\u043E\u0442\u0456\u043A \u043D\u0435 \u043F\u0456\u0434\u0442\u0440\u0438\u043C\u0443\u0454\u0442\u044C\u0441\u044F. +ImportUtils.error_no_matching_db_importer=\u041D\u0435\u043C\u043E\u0436\u043B\u0438\u0432\u043E \u0437\u043D\u0430\u0439\u0442\u0438 \u0441\u0443\u043C\u0456\u0441\u043D\u0438\u0439 \u0456\u043C\u043F\u043E\u0440\u0442\u0435\u0440.\n\u0411\u0430\u0437\u0430 \u0434\u0430\u043D\u0438\u0445 \u043D\u0435 \u043F\u0456\u0434\u0442\u0440\u0438\u043C\u0443\u0454\u0442\u044C\u0441\u044F. +ImportUtils.error_file_not_found=\u041D\u0435\u043C\u043E\u0436\u043B\u0438\u0432\u043E \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u0444\u0430\u0439\u043B. +ImportUtils.error_io=\u041D\u0435\u043C\u043E\u0436\u043B\u0438\u0432\u043E \u043F\u0440\u043E\u0447\u0438\u0442\u0430\u0442\u0438 \u0434\u0430\u043D\u0438\u0439 \u0444\u0430\u0439\u043B +ImportUtils.error_sax=\u041D\u0435\u043C\u043E\u0436\u043B\u0438\u0432\u043E \u043F\u0440\u043E\u0430\u043D\u0430\u043B\u0456\u0437\u0443\u0432\u0430\u0442\u0438 \u0434\u0430\u043D\u0438\u0439 \u0444\u0430\u0439\u043B XML +ImportUtils.error_missing_document_instance_factory=\u041D\u0435\u043C\u043E\u0436\u043B\u0438\u0432\u043E \u043E\u0442\u0440\u0438\u043C\u0430\u0442\u0438 \u0435\u043A\u0437\u0435\u043C\u043F\u043B\u044F\u0440 DocumentBuilder diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_zh_CN.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_zh_CN.properties index 7a440f3df3..f2a671ba2c 100644 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_zh_CN.properties +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_zh_CN.properties @@ -1,24 +1,16 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:12+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - OpenIDE-Module-Long-Description=\u5bfc\u5165\u5668\u5e94\u7528\u7a0b\u5e8f\u63a5\u53e3\u548c\u670d\u52a1\u63d0\u4f9b\u63a5\u53e3 - OpenIDE-Module-Short-Description=\u5bfc\u5165\u5668\u5e94\u7528\u7a0b\u5e8f\u63a5\u53e3\u548c\u670d\u52a1\u63d0\u4f9b\u63a5\u53e3 -ImportUtils.error_no_matching_file_importer=\u4e0d\u80fd\u627e\u5230\u4e00\u4e2a\u517c\u5bb9\u7684\u5bfc\u5165\u5668\u3002\n\u6587\u4ef6\u683c\u5f0f\u652f\u6301\uff0c\u8bf7\u68c0\u67e5\u6587\u4ef6\u7684\u6269\u5c55\u540d\u3002 - -ImportUtils.error_no_matching_stream_importer=\u4e0d\u80fd\u627e\u5230\u4e00\u4e2a\u517c\u5bb9\u7684\u5bfc\u5165\u5668\u3002\n\u6d41\u4e0d\u652f\u6301\u3002 - -ImportUtils.error_no_matching_db_importer=\u4e0d\u80fd\u627e\u5230\u4e00\u4e2a\u517c\u5bb9\u7684\u5bfc\u5165\u5668\u3002\n\u6570\u636e\u5e93\u4e0d\u652f\u6301\u3002 +# ImportUtils.error_no_matching_file_importer = Impossible to find a compatible Importer.\nThe file format is not supported. Check file's extension. +# ImportUtils.error_no_matching_stream_importer = Impossible to find a compatible Importer.\nThe stream is not supported. +# ImportUtils.error_no_matching_db_importer = Impossible to find a compatible Importer.\nThe database is not supported. ImportUtils.error_file_not_found=\u65e0\u6cd5\u6253\u5f00\u6587\u4ef6\u3002 - ImportUtils.error_missing_document_instance_factory=\u4e0d\u80fd\u83b7\u5f97\u4e00\u4e2aDocumentBuilder\u5b9e\u4f8b - ImportUtils.error_io=\u65e0\u6cd5\u8bfb\u53d6\u7ed9\u5b9a\u7684\u6587\u4ef6 - ImportUtils.error_sax=\u65e0\u6cd5\u89e3\u6790\u7ed9\u5b9a\u7684XML\u6587\u4ef6 +ImportUtils.error_no_matching_stream_importer=\u65E0\u6CD5\u627E\u5230\u517C\u5BB9\u7684\u8F93\u5165\u3002\nstream\u6D41\u4E0D\u88AB\u652F\u6301\u3002 +ImportUtils.error_no_matching_db_importer=\u672A\u627E\u5230\u517C\u5BB9\u7684\u5BFC\u5165\u65B9\u5F0F\u3002\n\u4E0D\u652F\u6301\u6B64\u6570\u636E\u5E93\u3002 + + +ImportUtils.error_no_matching_file_importer=\u65E0\u6CD5\u627E\u5230\u517C\u5BB9\u7684\u8F93\u5165\u5668\u3002\n\u4E0D\u652F\u6301\u6B64\u6587\u4EF6\u683C\u5F0F\u3002\u8BF7\u68C0\u67E5\u6587\u4EF6\u7684\u540E\u7F00\u3002 diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_zh_TW.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_zh_TW.properties new file mode 100644 index 0000000000..e36ea09b87 --- /dev/null +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/Bundle_zh_TW.properties @@ -0,0 +1,11 @@ +OpenIDE-Module-Long-Description=API/SPI for importers +OpenIDE-Module-Short-Description=API/SPI for importers + + +ImportUtils.error_no_matching_file_importer=Impossible to find a compatible Importer.\nThe file format is not supported. Check file's extension. +ImportUtils.error_no_matching_stream_importer=Impossible to find a compatible Importer.\nThe stream is not supported. +ImportUtils.error_no_matching_db_importer=Impossible to find a compatible Importer.\nThe database is not supported. +ImportUtils.error_file_not_found=Impossible to open the file. +ImportUtils.error_missing_document_instance_factory=Impossible to obtain an instance of DocumentBuilder +ImportUtils.error_io=Impossible to read the given file +ImportUtils.error_sax=Impossible to parse the given XML file diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/cs.po b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/cs.po deleted file mode 100644 index 26a4714a6c..0000000000 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/cs.po +++ /dev/null @@ -1,46 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-29 19:53+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI pro importΓ©ry" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI pro importΓ©try" - -msgid "ImportUtils.error_no_matching_file_importer" -msgstr "Nelze nalΓ©zt kompatibilnΓ­ho importΓ©ra.\nFormΓ‘t souboru nenΓ­ podporovΓ‘n. Zkontrolujte pΕ™Γ­ponu souboru." - -msgid "ImportUtils.error_no_matching_stream_importer" -msgstr "Nelze nalΓ©zt kompatibilnΓ­ho importΓ©ra.\nProud nenΓ­ podporovΓ‘n." - -msgid "ImportUtils.error_no_matching_db_importer" -msgstr "Nelze nalΓ©zt kompatibilnΓ­ho importΓ©ra.\nDatabΓ‘ze nenΓ­ podporovΓ‘na." - -msgid "ImportUtils.error_file_not_found" -msgstr "Nelze otevΕ™Γ­t soubor." - -msgid "ImportUtils.error_missing_document_instance_factory" -msgstr "Nelze zΓ­skat instanci DocumentBuilder" - -msgid "ImportUtils.error_io" -msgstr "Nelze pΕ™ečíst zadanΓ½ soubor" - -msgid "ImportUtils.error_sax" -msgstr "Nelze zpracovat zadanΓ½ soubor XML" diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/es.po b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/es.po deleted file mode 100644 index 3a6060b8a0..0000000000 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/es.po +++ /dev/null @@ -1,47 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-31 12:43+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI para importadores" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI para importadores" - -msgid "ImportUtils.error_no_matching_file_importer" -msgstr "Imposible encontrar un importador compatible.\nEl formato del archivo no estΓ‘ soportado. Comprueba la extensiΓ³n del archivo." - -msgid "ImportUtils.error_no_matching_stream_importer" -msgstr "Imposible encontrar un importador compatible.\nEl flujo no estΓ‘ soportado." - -msgid "ImportUtils.error_no_matching_db_importer" -msgstr "Imposible encontrar un importador compatible.\nLa base de datos no estΓ‘ soportada." - -msgid "ImportUtils.error_file_not_found" -msgstr "Imposible abrir el archivo." - -msgid "ImportUtils.error_missing_document_instance_factory" -msgstr "Imposible obtener una instancia de DocumentBuilder" - -msgid "ImportUtils.error_io" -msgstr "Impossble leer el archivo dado" - -msgid "ImportUtils.error_sax" -msgstr "Impossble analizar el archivo XML dado" diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/fr.po b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/fr.po deleted file mode 100644 index 3e82805b70..0000000000 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/fr.po +++ /dev/null @@ -1,47 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-31 13:01+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI du module d'Import" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI du module d'Import" - -msgid "ImportUtils.error_no_matching_file_importer" -msgstr "Impossible de trouver un import compatible.\nCe format de fichier n'est pas supportΓ©, vΓ©rifiez son extension." - -msgid "ImportUtils.error_no_matching_stream_importer" -msgstr "Impossible de trouver un import compatible.\nCe flux n'est pas supportΓ©." - -msgid "ImportUtils.error_no_matching_db_importer" -msgstr "Impossible de trouver un import compatible.\nCette base de donnΓ©es n'est pas supportΓ©e." - -msgid "ImportUtils.error_file_not_found" -msgstr "Impossible d'ouvrir le fichier." - -msgid "ImportUtils.error_missing_document_instance_factory" -msgstr "Impossible d'obtenir une instance de DocumentBuilder." - -msgid "ImportUtils.error_io" -msgstr "Impossible de lire le fichier." - -msgid "ImportUtils.error_sax" -msgstr "Impossible de parcourir le fichier XML." diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/ja.po b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/ja.po deleted file mode 100644 index a5d8b4aa41..0000000000 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/ja.po +++ /dev/null @@ -1,46 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-21 01:29+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "むンポータ用API/SPI" - -msgid "OpenIDE-Module-Short-Description" -msgstr "むンポータ用API/SPI" - -msgid "ImportUtils.error_no_matching_file_importer" -msgstr "互換性γγ‚γ‚‹γ‚¨γ‚―γ‚ΉγƒγƒΌγ‚ΏγŒθ¦‹γ€γ‹γ‚ŠγΎγ›γ‚“γ€‚γ“γγƒ•γ‚‘γ‚€γƒ«ε½’εΌγ―γ‚΅γƒγƒΌγƒˆγ•γ‚Œγ¦γ„γΎγ›γ‚“γ€‚γƒ•γ‚‘γ‚€γƒ«γζ‹‘弡子を璺θͺγ—てください。" - -msgid "ImportUtils.error_no_matching_stream_importer" -msgstr "互換性γγ‚γ‚‹γ‚¨γ‚―γ‚ΉγƒγƒΌγ‚ΏγŒθ¦‹γ€γ‹γ‚ŠγΎγ›γ‚“γ€‚γ‚ΉγƒˆγƒͺγƒΌγƒ γ―γ‚΅γƒγƒΌγƒˆγ•γ‚Œγ¦γ„γΎγ›γ‚“γ€‚" - -msgid "ImportUtils.error_no_matching_db_importer" -msgstr "互換性γγ‚γ‚‹γ‚¨γ‚―γ‚ΉγƒγƒΌγ‚ΏγŒθ¦‹γ€γ‹γ‚ŠγΎγ›γ‚“γ€‚γƒ‡γƒΌγ‚Ώγƒ™γƒΌγ‚Ήγ―γ‚΅γƒγƒΌγƒˆγ•γ‚Œγ¦γ„γΎγ›γ‚“γ€‚" - -msgid "ImportUtils.error_file_not_found" -msgstr "γƒ•γ‚‘γ‚€γƒ«γŒι–‹γ‘γΎγ›γ‚“γ€‚" - -msgid "ImportUtils.error_missing_document_instance_factory" -msgstr "DocumentBuilderγγ‚€γƒ³γ‚Ήγ‚Ώγƒ³γ‚ΉγŒε–得できません" - -msgid "ImportUtils.error_io" -msgstr "ζŒ‡εšγ•γ‚ŒγŸγƒ•γ‚‘γ‚€γƒ«γŒθͺ­γ‚γΎγ›γ‚“" - -msgid "ImportUtils.error_sax" -msgstr "ζŒ‡εšγ•γ‚ŒγŸXMLγƒ•γ‚‘γ‚€γƒ«γŒθ§£ζžγ§γγΎγ›γ‚“" diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/org-gephi-io-importer-api.pot b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/org-gephi-io-importer-api.pot deleted file mode 100644 index c81b02cbf0..0000000000 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/org-gephi-io-importer-api.pot +++ /dev/null @@ -1,49 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI for importers" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI for importers" - -msgid "ImportUtils.error_no_matching_file_importer" -msgstr "" -"Impossible to find a compatible Importer.\n" -"The file format is not supported. Check file's extension." - -msgid "ImportUtils.error_no_matching_stream_importer" -msgstr "" -"Impossible to find a compatible Importer.\n" -"The stream is not supported." - -msgid "ImportUtils.error_no_matching_db_importer" -msgstr "" -"Impossible to find a compatible Importer.\n" -"The database is not supported." - -msgid "ImportUtils.error_file_not_found" -msgstr "Impossible to open the file." - -msgid "ImportUtils.error_missing_document_instance_factory" -msgstr "Impossible to obtain an instance of DocumentBuilder" - -msgid "ImportUtils.error_io" -msgstr "Impossible to read the given file" - -msgid "ImportUtils.error_sax" -msgstr "Impossible to parse the given XML file" diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/package.html b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/package.html index 4432636b7a..e874191637 100644 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/package.html +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/package.html @@ -1,20 +1,25 @@ - - - - API for importing data from any support. -

    - This API defines a secure import flow, that allows to import data in - a container, then checks the container for data consistency and finally - process data and appended them to GraphAPI and - AttributesAPI. -

    -

    See org.gephi.io.importer.spi package for defining new - importers and org.gephi.io.processor.spi for processors. - Processors come after importers and are responsible for appending - import results.

    -

    - Import tasks can also carefully log what they do and where some - problems where found. The report can then be displayed to users. -

    - - + + + + org.gephi.io.importer.api + + +

    + API for importing data from any support. +

    +

    + This API defines a secure import flow, that allows to import data in + a container, then checks the container for data consistency and finally + process data and appended them to GraphAPI. +

    +

    + See org.gephi.io.importer.spi package for defining new + importers and org.gephi.io.processor.spi for processors. + Processors come after importers and are responsible for appending + import results.

    +

    + Import tasks can also carefully log what they do and where some + problems where found. The report can then be displayed to users. +

    + + diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/pt_BR.po b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/pt_BR.po deleted file mode 100644 index aeabc29f95..0000000000 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/pt_BR.po +++ /dev/null @@ -1,46 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 00:38+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI de importadores" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI de importadores" - -msgid "ImportUtils.error_no_matching_file_importer" -msgstr "Foi impossΓ­vel encontrar um Importador compatΓ­vel.\nO formato de arquivo nΓ£o Γ© suportado. Verifique a extensΓ£o do arquivo." - -msgid "ImportUtils.error_no_matching_stream_importer" -msgstr "Foi impossΓ­vel encontrar um Importador compatΓ­vel.\nO stream nΓ£o Γ© suportado." - -msgid "ImportUtils.error_no_matching_db_importer" -msgstr "Foi impossΓ­vel encontrar um Importador compatΓ­vel.\nO banco de dados nΓ£o Γ© suportado." - -msgid "ImportUtils.error_file_not_found" -msgstr "ImpossΓ­vel abrir o arquivo." - -msgid "ImportUtils.error_missing_document_instance_factory" -msgstr "ImpossΓ­vel obter uma instΓ’ncia da classe DocumentBuilder" - -msgid "ImportUtils.error_io" -msgstr "ImpossΓ­vel ler o arquivo" - -msgid "ImportUtils.error_sax" -msgstr "ImpossΓ­vel analisar o arquivo XML" diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/ru.po b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/ru.po deleted file mode 100644 index ccf201d53f..0000000000 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/ru.po +++ /dev/null @@ -1,46 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-19 05:24+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI for importers" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI for importers" - -msgid "ImportUtils.error_no_matching_file_importer" -msgstr "НСвозмоТно Π½Π°ΠΉΡ‚ΠΈ подходящий Π˜ΠΌΠΏΠΎΡ€Ρ‚Ρ‘Ρ€.\nΠ”Π°Π½Π½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„Π°ΠΉΠ»Π° Π½Π΅ поддСрТиваСтся. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ Ρ€Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅ Ρ„Π°ΠΉΠ»Π°." - -msgid "ImportUtils.error_no_matching_stream_importer" -msgstr "НСвозмоТно Π½Π°ΠΉΡ‚ΠΈ подходящий Π˜ΠΌΠΏΠΎΡ€Ρ‚Ρ‘Ρ€.\nΠŸΠΎΡ‚ΠΎΠΊ Π½Π΅ поддСрТиваСтся." - -msgid "ImportUtils.error_no_matching_db_importer" -msgstr "НСвозмоТно Π½Π°ΠΉΡ‚ΠΈ подходящий Π˜ΠΌΠΏΠΎΡ€Ρ‚Ρ‘Ρ€.\nΠ‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… Π½Π΅ поддСрТиваСтся." - -msgid "ImportUtils.error_file_not_found" -msgstr "НСвозмоТно ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ»." - -msgid "ImportUtils.error_missing_document_instance_factory" -msgstr "НСвозмоТно ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр DocumentBuilder." - -msgid "ImportUtils.error_io" -msgstr "НСвозмоТно ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ»" - -msgid "ImportUtils.error_sax" -msgstr "НСвозмоТно Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ XML Ρ„Π°ΠΉΠ»" diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/zh_CN.po b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/zh_CN.po deleted file mode 100644 index 59dc6f5789..0000000000 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/api/zh_CN.po +++ /dev/null @@ -1,45 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:12+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ε―Όε…₯器应用程序ζŽ₯ε£ε’ŒζœεŠ‘ζδΎ›ζŽ₯口" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ε―Όε…₯器应用程序ζŽ₯ε£ε’ŒζœεŠ‘ζδΎ›ζŽ₯口" - -msgid "ImportUtils.error_no_matching_file_importer" -msgstr "δΈθƒ½ζ‰Ύεˆ°δΈ€δΈͺε…ΌεΉηš„ε―Όε…₯器。\nζ–‡δ»Άζ ΌεΌζ”―ζŒοΌŒθ―·ζ£€ζŸ₯ζ–‡δ»Άηš„ζ‰©ε±•εγ€‚" - -msgid "ImportUtils.error_no_matching_stream_importer" -msgstr "δΈθƒ½ζ‰Ύεˆ°δΈ€δΈͺε…ΌεΉηš„ε―Όε…₯器。\nζ΅δΈζ”―ζŒγ€‚" - -msgid "ImportUtils.error_no_matching_db_importer" -msgstr "δΈθƒ½ζ‰Ύεˆ°δΈ€δΈͺε…ΌεΉηš„ε―Όε…₯器。\nζ•°ζεΊ“δΈζ”―ζŒγ€‚" - -msgid "ImportUtils.error_file_not_found" -msgstr "无法打开文仢。" - -msgid "ImportUtils.error_missing_document_instance_factory" -msgstr "δΈθƒ½θŽ·εΎ—δΈ€δΈͺDocumentBuilderεžδΎ‹" - -msgid "ImportUtils.error_io" -msgstr "无法读取给εšηš„ζ–‡δ»Ά" - -msgid "ImportUtils.error_sax" -msgstr "ζ— ζ³•θ§£ζžη»™εšηš„XMLζ–‡δ»Ά" diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle.properties index cbd9137da7..a7187284d7 100644 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle.properties +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle.properties @@ -1,22 +1,60 @@ ImportContainerLog.TimeInterval = Time Interval set at {0} ImportContainerLog.TimeFormat = Time Format: {0} +ImportContainerLog.TimeRepresentation = Time Representation: {0} ImportContainerLog.AddNodeColumn = Node column ''{0}'' ({1}) ImportContainerLog.AddEdgeColumn = Edge column ''{0}'' ({1}) ImportContainerLog.AddDynamicNodeColumn = Node column ''{0}'' (Dynamic {1}) ImportContainerLog.AddDynamicEdgeColumn = Edge column ''{0}'' (Dynamic {1}) +ImportContainerLog.EdgeLabelType = Edge labels are of type ''{0}'' +ImportContainerLog.TimeZone = Time zone is set at ''{0}'' +ImportContainerLog.MultiGraphCount = Multi-graph with {0} different types +ImportContainerLog.GraphTimestamp = Graph timestamp set at ''{0}'' +ImportContainerLog.GraphInterval = Graph interval set at ''{0}'' +ImportContainerLog.ElementIdType = Element id type set at ''{0}'' ImportContainerException_nodeExist = Duplicated node id=''{0}'' -ImportContainerException_UnknowNodeId = Unknown Node id +ImportContainerException_UnknowNodeId = Unknown Node id=''{0}'' +ImportContainerException_AutoNodeCreated = Some nodes were created based on edges' source and target ImportContainerException_MissingNodeSource = Missing Node Source, edge is ignored ImportContainerException_MissingNodeTarget = Missing Node Target, edge is ignored ImportContainerException_MissingNodeId = Missing Node Identifier ImportContainerException_edgeExist = Edge already exists id=''{0}'' ImportContainerException_SelfLoop = Self loop are not allowed -ImportContainerException_Bad_Edge_Type = Edge type doesn't fit with default set ({0}), edge id=''{1}'' is ignored -ImportContainerException_Parallel_Edge = Parallel edges detected, their weight will be merged +ImportContainerException_Bad_Edge_Type = Edge type doesn''t fit with default set ({0}), edge id=''{1}'' is ignored +ImportContainerException_Parallel_Edge_Merged = Parallel edges detected, remember to choose a merge strategy ImportContainerException_Parallel_Edge_Forbidden = Parallel edges are not allowed, edge id=''{0}'' is ignored ImportContainerException_Unsupported_Edge_type = Edge types can only have a primitive type value -ImportContainerException_Set_EdgeDefault = Default edge type set as {0} +ImportContainerException_Unsupported_Edge_type_Conflict = Edge label type is of type {0} but should be {1}, the label is ignored +ImportContainerException_Set_EdgeDefault = Default edge type set as ''{0}'' ImportContainerException_Weight_Zero_Ignored = Edge weight is 0, the edge id=''{0}'' is ignored +ImportContainerException_ElementIdType_Parse_Error = The id type is configured to ''{0}'' but some elements id can't be parsed, defaulting to 'STRING' ImportContainerException_Negative_Weight = Edge id=''{0}'' has a negative weight ImportContainerException_Column_Type_Mismatch = A column ''{0}'' already exists but with a different type=''{1}'' +ImportContainerException_Timestamp_Parse_Error = The graph timestamp ''{0}'' could not be parsed +ImportContainerException_Interval_Parse_Error = The graph interval ''{0}'' could not be parsed +ImportContainerException_Node_Color_Alpha_AllZero = All nodes color opacity is set as transparent +ImportContainerException_Edge_Color_Alpha_AllZero = All edges color opacity is set as transparent + +ElementFactoryException_NullNodeId = Node id can't be null +ElementFactoryException_NullEdgeId = Edge id can't be null + +ElementClassName.Node = node +ElementClassName.Edge = edge +ElementDraftException_ColorParse = Color ''{0}'' can't be parsed for {2} id=''{1}'', color is ignored +ElementDraftException_LabelColorParse = Label color ''{0}'' can't be parsed for {2} id=''{1}'', color is ignored +ElementDraftException_NotTimestampRepresentation = The time representation should be set to TIMESTAMP, the timestamp for the {1} id=''{0}'' is ignored +ElementDraftException_NotIntervalRepresentation = The time representation should be set to INTERVAL, the interval for the {1} id=''{0}'' is ignored +ElementDraftException_IntervalSetError = A problem was encountered while adding the interval {0} to the {3} id=''{1}'' and the interval is ignored, error: {2} +ElementDraftException_SetValueError = A problem occurred while setting the value ''{0}'' to the {3} id=''{1}'', error: {2} +ElementDraftException_SetValueTimestampError = A problem occurred while setting the value ''{0}'' to the {4} id=''{1}'' at the timestamp {2}, error: {3} +ElementDraftException_SetValueIntervalError = A problem occurred while setting the value ''{0}'' to the {4} id=''{1}'' at the interval {2}, error: {3} +ElementDraftException_SetValueIntervalDuplicate = The value {0} has overwritten an existing value for {3} id=''{1}'' at the interval {2} +ElementDraftException_SetValueTimestampDuplicate = The value {0} has overwritten an existing value for {3} id=''{1}'' at the timestamp {2} +ElementDraftException_ColumnNotFound = Column ''{0}'' not found for {2} id=''{1}'', value is ignored + + +ImportContainerClose_SelfLoopRemoved = {0} self loops were removed +ImportContainerClose_MutualEdgesRemoved = {0} mutual edges removed to fulfill undirected type + +ImportContainerWarning_Edge_Id_Special_Character = Edge id=''{0}'' has special characters such as newlines or trailing spaces +ImportContainerWarning_Node_Id_Special_Character = Node id=''{0}'' has special characters such as newlines or trailing spaces diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_ar.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_ca.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_ca.properties new file mode 100644 index 0000000000..def8c2e520 --- /dev/null +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_ca.properties @@ -0,0 +1,43 @@ +ImportContainerLog.TimeInterval=Time Interval set at {0} +ImportContainerLog.TimeFormat=Format de temps: {0} +ImportContainerLog.TimeRepresentation=Time Representation: {0} +ImportContainerLog.AddNodeColumn=Node column ''{0}'' ({1}) +ImportContainerLog.AddEdgeColumn=Edge column ''{0}'' ({1}) +ImportContainerLog.AddDynamicNodeColumn=Node column ''{0}'' (Dynamic {1}) +ImportContainerLog.AddDynamicEdgeColumn=Edge column ''{0}'' (Dynamic {1}) +ImportContainerLog.EdgeLabelType=Edge labels are of type ''{0}'' +ImportContainerLog.TimeZone=Time zone is set at ''{0}'' +ImportContainerLog.MultiGraphCount=Multi-graph with {0} different types +ImportContainerLog.GraphTimestamp=Graph timestamp set at ''{0}'' +ImportContainerLog.GraphInterval=Graph interval set at ''{0}'' +ImportContainerLog.ElementIdType=Element id type set at ''{0}'' +ImportContainerException_nodeExist=Duplicated node id=''{0}'' +ImportContainerException_UnknowNodeId=Unknown Node id=''{0}'' +ImportContainerException_AutoNodeCreated=Some nodes were created based on edges' source and target +ImportContainerException_MissingNodeSource=Missing Node Source, edge is ignored +ImportContainerException_MissingNodeTarget=Missing Node Target, edge is ignored +ImportContainerException_MissingNodeId=Missing Node Identifier +ImportContainerException_edgeExist=Edge already exists id=''{0}'' +ImportContainerException_SelfLoop=Self loop are not allowed +ImportContainerException_Bad_Edge_Type=Edge type doesn't fit with default set ({0}), edge id=''{1}'' is ignored +ImportContainerException_Parallel_Edge_Merged=Parallel edges detected, remember to choose a merge strategy +ImportContainerException_Parallel_Edge_Forbidden=Parallel edges are not allowed, edge id=''{0}'' is ignored +ImportContainerException_Unsupported_Edge_type=Edge types can only have a primitive type value +ImportContainerException_Unsupported_Edge_type_Conflict=Edge label type is of type {0} but should be {1}, the label is ignored +ImportContainerException_Set_EdgeDefault=Default edge type set as ''{0}'' +ImportContainerException_Weight_Zero_Ignored=Edge weight is 0, the edge id=''{0}'' is ignored +ImportContainerException_ElementIdType_Parse_Error=The id type is configured to ''{0}'' but some elements id can't be parsed, defaulting to 'STRING' +ImportContainerException_Negative_Weight=Edge id=''{0}'' has a negative weight +ImportContainerException_Column_Type_Mismatch=A column ''{0}'' already exists but with a different type=''{1}'' +ImportContainerException_Timestamp_Parse_Error=The graph timestamp ''{0}'' could not be parsed +ImportContainerException_Interval_Parse_Error=The graph interval ''{0}'' could not be parsed +ElementFactoryException_NullNodeId=La ID del node no pot quedar buida +ElementFactoryException_NullEdgeId=La ID de la aresta no pot quedar buida +ElementDraftException_ColorParse=Color ''{0}'' can't be parsed for element id=''{1}'', color is ignored +ElementDraftException_LabelColorParse=Label color ''{0}'' can't be parsed for element id=''{1}'', color is ignored +ElementDraftException_NotTimestampRepresentation=The time representation should be set to TIMESTAMP, the timestamp for the element id=''{0}'' is ignored +ElementDraftException_NotIntervalRepresentation=The time representation should be set to INTERVAL, the interval for the element id=''{0}'' is ignored +ElementDraftException_IntervalSetError=A problem was encountered while adding the interval {0} to the element id=''{1}'' and the interval is ignored, error: {2} +ElementDraftException_SetValueError=A problem occurred while setting the value ''{0}'' to the element id=''{1}'', error: {2} +ElementDraftException_SetValueTimestampError=A problem occurred while setting the value ''{0}'' to the element id=''{1}'' at the timestamp {2}, error: {3} +ElementDraftException_SetValueIntervalError=A problem occurred while setting the value ''{0}'' to the element id=''{1}'' at the interval {2}, error: {3} diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_cs.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_cs.properties index 1c07d92405..a53bab2a3d 100644 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_cs.properties +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_cs.properties @@ -1,37 +1,43 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:28+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -ImportContainerLog.TimeInterval=\u010casov\u00fd interval nastaven na {0} - -ImportContainerLog.TimeFormat=\u010casov\u00fd form\u00e1t\: {0} - -ImportContainerException_nodeExist=Zdvojen\u00e9 id uzlu\=''{0}'' - -ImportContainerException_UnknowNodeId=Nezn\u00e1m\u00e9 id uzlu - -ImportContainerException_MissingNodeSource=Chyb\u00ed zdroj uzlu, hrana je ignorov\u00e1na - -ImportContainerException_MissingNodeTarget=Chyb\u00ed c\u00edl uzlu, hrana je ignorov\u00e1na - -ImportContainerException_MissingNodeId=Chyb\u00ed identifik\u00e1tor uzlu - -ImportContainerException_edgeExist=Hrana ji\u017e existuje - -ImportContainerException_SelfLoop=Vlastn\u00ed smy\u010dky nejsou povoleny - -ImportContainerException_Bad_Edge_Type=Typ hrany se neshoduje s v\u00fdchoz\u00edm - -ImportContainerException_Parallel_Edge=Soub\u011b\u017en\u00e9 hrany nejsou zat\u00edm podporov\u00e1ny, hrana s id\=''{0}'' je ignorov\u00e1na - -ImportContainerException_Set_EdgeDefault=V\u00fdchoz\u00ed typ hrany nastaven na {0} - -ImportContainerException_Weight_Zero_Ignored=V\u00e1ha hrany je 0 nebo z\u00e1porn\u00e1, hrana s id\=''{0}'' je ignorov\u00e1na - -ImportContainerException_TimeInterval_ParseError=\u010casov\u00fd interval ''{0}'' nemohl b\u00fdt analyzov\u00e1n. Pou\u017eijte form\u00e1tov\u00e1n\u00ed Date nebo Double - -ImportContainerException_TimeInterval_Empty=Parametry start a end \u010dasov\u00e9ho intervalu jsou pr\u00e1zdn\u00e9 +ImportContainerLog.TimeInterval=\u010casovύ interval nastaven na {0} +ImportContainerLog.TimeFormat=\u010casovύ formαt: {0} +ImportContainerLog.TimeRepresentation=Znαzorn\u011bnν \u010dasu: {0} +ImportContainerLog.AddNodeColumn=Sloupec uzlu ''{0}'' ({1}) +ImportContainerLog.AddEdgeColumn=Sloupec hrany ''{0}'' ({1}) +ImportContainerLog.AddDynamicNodeColumn=Sloupec uzlu ''{0}'' (Dynamickύ {1}) +ImportContainerLog.AddDynamicEdgeColumn=Sloupec hrany ''{0}'' (Dynamickύ {1}) +ImportContainerLog.EdgeLabelType=Jmenovky hrany majν typ ''{0}'' +ImportContainerLog.TimeZone=\u010casovι pαsmo nastaveno na ''{0}'' +ImportContainerLog.MultiGraphCount=Vνcenαsobnύ graf s {0} r\u016fznύmi typy +ImportContainerLog.GraphTimestamp=\u010casovι razνtko grafu nastaveno na ''{0}'' +ImportContainerLog.GraphInterval=Interval grafu nastaven na ''{0}'' +ImportContainerLog.ElementIdType=Typ id prvku nastaven na ''{0}'' +ImportContainerException_nodeExist=Zdvojenι id uzlu=''{0}'' +# ImportContainerException_UnknowNodeId = Unknown Node id=''{0}'' +ImportContainerException_AutoNodeCreated=N\u011bkterι uzle byly vytvo\u0159eny na zαklad\u011b zdroje hran a cνle +ImportContainerException_MissingNodeSource=Chybν zdroj uzlu, hrana je ignorovαna +ImportContainerException_MissingNodeTarget=Chybν cνl uzlu, hrana je ignorovαna +ImportContainerException_MissingNodeId=Chybν identifikαtor uzlu +# ImportContainerException_edgeExist = Edge already exists id=''{0}'' +ImportContainerException_SelfLoop=Vlastnν smy\u010dky nejsou povoleny +# ImportContainerException_Bad_Edge_Type = Edge type doesn't fit with default set ({0}), edge id=''{1}'' is ignored +# ImportContainerException_Parallel_Edge_Merged = Parallel edges detected, remember to choose a merge strategy +ImportContainerException_Parallel_Edge_Forbidden=Soub\u011b\u017enι hrany nejsou povoleny, hrana s id=''{0}'' je ignorovαna +ImportContainerException_Unsupported_Edge_type=Typy hran mohou mνt pouze hodnotu primitivnνho typu +ImportContainerException_Unsupported_Edge_type_Conflict=Typ jmenovky hrany je {0} ale m\u011bl by bύt {1}, jmenovka je ignorovαna +ImportContainerException_Set_EdgeDefault=Vύchozν typ hrany nastaven na {0} +ImportContainerException_Weight_Zero_Ignored=Vαha hrany je 0 nebo zαpornα, hrana s id=''{0}'' je ignorovαna +ImportContainerException_ElementIdType_Parse_Error=Typ id je nastaveno na ''{0}'' ale n\u011bkterι id prvk\u016f nelze zpracovat, bude pou\u017eit standardnν 'STRING' +ImportContainerException_Negative_Weight=Hrana s id=''{0}'' mα zαpornou vαhu +ImportContainerException_Column_Type_Mismatch=Sloupec ''{0}'' ji\u017e existuje ale s jinύm typem=''{1}'' +ImportContainerException_Timestamp_Parse_Error=\u010casovι razνtko grafu ''{0}'' nemohlo bύt zpracovαno +ImportContainerException_Interval_Parse_Error=Interval grafu ''{0}'' nemohl bύt zpracovαn +ElementFactoryException_NullNodeId=ID uzlu nem\u016f\u017ee bύt prαzdnι +ElementFactoryException_NullEdgeId=Id hrany nem\u016f\u017ee bύt prαzdnι +ElementDraftException_ColorParse=Barva ''{0}'' nem\u016F\u017Ee bύt zpracovαna pro prvek s id=''{1}'', barva je ignorovαna +ElementDraftException_LabelColorParse=Barva jmenovky ''{0}'' nem\u016F\u017Ee bύt zpracovαna pro prvek s id=''{1}'', barva je ignorovαna +ElementDraftException_NotTimestampRepresentation=Znαzorn\u011Bnν \u010Dasu by m\u011Blo bύt nastaveno na TIMESTAMP, \u010Dasovι razνtko pro prvek s id=''{0}'' je ignorovαno +ElementDraftException_NotIntervalRepresentation=Znαzorn\u011Bnν \u010Dasu by m\u011Blo bύt nastaveno na INTERVAL, interval pro prvek s id=''{0}'' je ignorovαn +ElementDraftException_IntervalSetError=P\u0159i p\u0159idαvαnν intervalu {0} do prvku s id=''{1}'' nastal problιm a interval bude ignorovαn, chyba: {2} +ElementDraftException_SetValueError=P\u0159i nastavovαnν hodnoty ''{0}'' do prvku s id=''{1}'' nastal problιm, chyba: {2} +ElementDraftException_SetValueTimestampError=P\u0159i nastavovαnν hodnoty ''{0}'' do prvku s id=''{1}'' v \u010Dasovιm razνtku {2} nastal problιm, chyba: {3} +ElementDraftException_SetValueIntervalError=P\u0159i nastavovαnν hodnoty ''{0}'' do prvku s id=''{1}'' v intervalu {2} nastal problιm, chyba: {3} diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_de.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_de.properties new file mode 100644 index 0000000000..869510dc3f --- /dev/null +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_de.properties @@ -0,0 +1,43 @@ +ImportContainerLog.TimeInterval=Zeitintervall auf {0} gesetzt +ImportContainerLog.TimeFormat=Zeit-Format: {0} +ImportContainerLog.TimeRepresentation=Zeit-Darstellung: {0} +ImportContainerLog.AddNodeColumn=Knoten-Spalte "{0}" ({1}) +ImportContainerLog.AddEdgeColumn=Kanten-Spalte "{0}" ({1}) +ImportContainerLog.AddDynamicNodeColumn=Knoten-Spalte "{0}" (Dynamisch {1}) +ImportContainerLog.AddDynamicEdgeColumn=Kanten-Spalte "{0}" (Dynamisch {1}) +ImportContainerLog.EdgeLabelType=Kanten-Bezeichner sind vom Typ "{0}" +ImportContainerLog.TimeZone=Zeitzone ist auf "{0}" gesetzt +ImportContainerLog.MultiGraphCount=Multi-Graph mit {0} verschiedenen Typen +ImportContainerLog.GraphTimestamp=Graph Zeitstempel auf "{0}" gesetzt +ImportContainerLog.GraphInterval=Graph Intervall auf "{0}" gesetzt +ImportContainerLog.ElementIdType=Element-Id Typ auf "{0}" gesetzt +ImportContainerException_nodeExist=Doppelte Knoten-Id="{0}" +ImportContainerException_UnknowNodeId=Unbekannte Knoten-Id="{0}" +ImportContainerException_AutoNodeCreated=Einige Knoten wurden anhand von Kantenursprung und -ziel erzeugt +ImportContainerException_MissingNodeSource=Fehlender Urspungs-Knoten, Kante wird ignoriert +ImportContainerException_MissingNodeTarget=Fehlender Ziel-Knoten, Kante wird ignoriert +ImportContainerException_MissingNodeId=Fehlende Knoten-Id +ImportContainerException_edgeExist=Kante mit Id="{0}" existiert bereits +ImportContainerException_SelfLoop=Schleifen sind nicht zulδssig +ImportContainerException_Bad_Edge_Type=Kanten-Typ stimmt nicht mit gesetzem Default ({0}) όberein, Kanten-Id="{1}" wird ignoriert +# ImportContainerException_Parallel_Edge_Merged = Parallel edges detected, remember to choose a merge strategy +ImportContainerException_Parallel_Edge_Forbidden=Parallele Kanten sind nicht zulδssig, Kante mit Id="{0}" wird ignoriert. +ImportContainerException_Unsupported_Edge_type=Kantentypen kφnnen nur Primitive sein. +ImportContainerException_Unsupported_Edge_type_Conflict=Kantenbeschriftungs-Typ ist vom Typ {0}, sollte jedoch {1} sein, die Beschriftung wird ignoriert. +ImportContainerException_Set_EdgeDefault=Standard-Kanten-Typ als "{0}" gesetzt +ImportContainerException_Weight_Zero_Ignored=Kantengewicht ist 0, die Kante mit Id="{0}" wird ignoriert +ImportContainerException_ElementIdType_Parse_Error=Der Id-Typ ist konfiguriert als "{0}", allerdings kφnnen manche Id-Element nicht geparsed werden, so dass 'STRING' verwendet wird +ImportContainerException_Negative_Weight=Kante mit Id="{0}" hat ein negatives Gewicht +ImportContainerException_Column_Type_Mismatch=Eine Spalte "{0}" existiert bereits, jedoch mit einem abweichenden Typ="{1}" +ImportContainerException_Timestamp_Parse_Error=Der Graph-Zeitstempel "{0}" konnte nicht geparst werden +ImportContainerException_Interval_Parse_Error=Das Graph-Intervall "{0}" konnte nicht geparst werden +ElementFactoryException_NullNodeId=Knoten-Id darf nicht null sein +ElementFactoryException_NullEdgeId=Kanten-Id kann nicht leer sein +ElementDraftException_ColorParse=Kann Farbe "{0}" fόr Element mit Id="{1}" nicht parsen, Farbe wird ignoriert +ElementDraftException_LabelColorParse=Kann Beschriftungsfarbe "{0}" fόr Element mit Id="{1}" nicht parsen, Farbe wird ignoriert +ElementDraftException_NotTimestampRepresentation=Die Zeit-Darstellung sollte auf TIMESTAMP gesetzt sein, der Zeitstempel fόr Element mit der Id="{0}" wird ignoriert +ElementDraftException_NotIntervalRepresentation=Die Zeit-Darstellung sollte auf INTERVAL gesetzt sein, das Zeitintervall fόr Element mit der Id="{0}" wird ignoriert +ElementDraftException_IntervalSetError=Ein Problem ist beim Zufόgen des Intervalls {0} zum Element mit Id="{1}" aufgetreten und das Intervall wird ignoriert, Fehler: {2} +ElementDraftException_SetValueError=Ein Problem ist beim Setzen des Wertes "{0}" bei Element mit Id="{1}" aufgetreten, Fehler: {2} +ElementDraftException_SetValueTimestampError=Ein Problem ist beim Setzen des Wertes "{0}" bei Element mit Id="{1}" bei Zeitstempel {2} aufgetreten, Fehler: {3} +ElementDraftException_SetValueIntervalError=Ein Problem ist beim Setzen des Wertes "{0}" bei Element mit Id="{1}" bei Intervall {2} aufgetreten, Fehler: {3} diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_es.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_es.properties index 9b4200165e..4f70e790ee 100644 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_es.properties +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_es.properties @@ -1,38 +1,53 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:28+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -ImportContainerLog.TimeInterval=Int\u00e9rvalo de tiempo creado en {0} - -ImportContainerLog.TimeFormat=Formato de tiempo\: {0} - -ImportContainerException_nodeExist=Duplicada id de nodo\=''{0}'' - -ImportContainerException_UnknowNodeId=Id de nodo desconocida - +ImportContainerLog.TimeInterval=Intιrvalo de tiempo creado en {0} +ImportContainerLog.TimeFormat=Formato de tiempo: {0} +ImportContainerLog.TimeRepresentation=Representaciσn temporal: {0} +ImportContainerLog.AddNodeColumn=Columna de nodo ''{0}'' ({1}) +ImportContainerLog.AddEdgeColumn=Columna de arista ''{0}'' ({1}) +ImportContainerLog.AddDynamicNodeColumn=Columna de nodo ''{0}'' (Dinαmica {1}) +ImportContainerLog.AddDynamicEdgeColumn=Columna de arista ''{0}'' (Dinαmica {1}) +ImportContainerLog.EdgeLabelType=Las etiquetas de las aristas son del tipo ''{0}'' +ImportContainerLog.TimeZone=La zona horaria establecida es ''{0}'' +ImportContainerLog.MultiGraphCount=Multi-grafo con {0} tipos diferentes +ImportContainerLog.GraphTimestamp=Timestamp del grafo establecido como ''{0}'' +ImportContainerLog.GraphInterval=Intιrvalo del grafo establecido como ''{0}'' +ImportContainerLog.ElementIdType=Tipo del id de los elementos establecido como ''{0}'' +ImportContainerException_nodeExist=Duplicada id de nodo=''{0}'' +ImportContainerException_UnknowNodeId=Id de nodo desconocida=''{0}'' +ImportContainerException_AutoNodeCreated=Algunos nodos fueron creados basados en el origen y destino de las aristas ImportContainerException_MissingNodeSource=Falta el nodo fuente, la arista es ignorada - ImportContainerException_MissingNodeTarget=Falta el nodo objetivo, la arista es ignorada - ImportContainerException_MissingNodeId=Falta el identificador de nodo - -ImportContainerException_edgeExist=La arista ya existe - -ImportContainerException_SelfLoop=Los bucles no est\u00e1n permitidos - -ImportContainerException_Bad_Edge_Type=El tipo de arista no se ajusta al tipo por defecto - -ImportContainerException_Parallel_Edge=Las aristas paralelas no est\u00e1n soportadas todav\u00eda, la arista con id\="{0}" es ignorada - +ImportContainerException_edgeExist=La arista con id=''{0}'' ya existe +ImportContainerException_SelfLoop=Los bucles no estαn permitidos +ImportContainerException_Bad_Edge_Type=El tipo de borde no coincide con el valor predeterminado ({0}), el ID de borde =''{1}'' se ignora +ImportContainerException_Parallel_Edge_Merged=Aristas paralelas detectadas, recuerda escoger una estrategia de fusi\u00F3n +ImportContainerException_Parallel_Edge_Forbidden=Las aristas paralelas no estαn permitidas, arista con id=''{0}'' ignorada +ImportContainerException_Unsupported_Edge_type=Los tipos de aristas solo pueden ser tipos primitivos +ImportContainerException_Unsupported_Edge_type_Conflict=El tipo de la etiqueta de la arista es {0} pero deberνa ser {1}, la etiqueta es ignorada ImportContainerException_Set_EdgeDefault=El tipo de arista por defecto asignado como {0} - -ImportContainerException_Weight_Zero_Ignored=El peso de la arista es 0 o negativo, la arista con id\="{0}" es ignorada - -ImportContainerException_TimeInterval_ParseError=El int\u00e9rvalo temporal "{0}" no pudo ser analizado. Utiliza formato de fecha o decimal - -ImportContainerException_TimeInterval_Empty=Ambos par\u00e1metros inicio y final del int\u00e9rvalo temporal est\u00e1n vac\u00edos +ImportContainerException_Weight_Zero_Ignored=El peso de la arista es 0 o negativo, la arista con id="{0}" es ignorada +ImportContainerException_ElementIdType_Parse_Error=El tipo del id es ''{0}'' pero las ids de algunos elementos no pueden ser analizadas, utilizando 'STRING' por defecto +ImportContainerException_Negative_Weight=La arista id=''{0}'' tiene peso negativo +ImportContainerException_Column_Type_Mismatch=Una columna ''{0}'' ya existe pero con otro tipo diferente = ''{1}'' +ImportContainerException_Timestamp_Parse_Error=El grafo de la marca de tiempo ''{0}'' no se ha podido analizar +ImportContainerException_Interval_Parse_Error=No se ha podido analizar el intervalo del grafo ''{0}'' +ElementFactoryException_NullNodeId=Id de nodo no puede ser nulo +ElementFactoryException_NullEdgeId=Id de arista no puede ser nulo +ElementDraftException_ColorParse=Color ''{0}'' no puede ser analizado debido al elemento id=''{1}'', su color es ignorado +ElementDraftException_LabelColorParse=El color de etiqueta ''{0}'' no puede ser analizado para el elemento id=''{1}'', el color es ignorado +ElementDraftException_NotTimestampRepresentation=La representaciσn temporal deberνa establecerse a TIMESTAMP, el timestamp del elemento id=''{0}'' es ignorado +ElementDraftException_NotIntervalRepresentation=La representaciσn temporal deberνa establecerse a INTERVAL, el intιrvalo del elemento id=''{0}'' es ignorado +ElementDraftException_IntervalSetError=Se ha encontrado un problema al aρadir el intιrvalo {0} al elemento id=''{1}'' y el intιrvalo es ignorado, error: {2} +ElementDraftException_SetValueError=Ha ocurrido un problema al establecer el valor ''{0}'' al elemento id=''{1}'', error: {2} +ElementDraftException_SetValueTimestampError=Se ha encontrado un problema al establecer el valor {0} al elemento id=''{1}'' en el timestamp {2}, error: {3} +ElementDraftException_SetValueIntervalError=Se ha encontrado un problema al establecer el valor {0} al elemento id=''{1}'' en el intιrvalo {2}, error: {3} +ElementDraftException_SetValueIntervalDuplicate=El valor {0} ha sobrescrito un valor existente para el elemento id=''{1}'' en el intervalo {2} +ElementDraftException_SetValueTimestampDuplicate=El valor {0} ha sobrescrito un valor existente para el elemento id=''{1}'' en la marca de tiempo {2} + + +ImportContainerClose_SelfLoopRemoved={0} bucles propios eliminados +ImportContainerException_Node_Color_Alpha_AllZero=La opacidad del color de todos los nodos se establece como transparente +ImportContainerException_Edge_Color_Alpha_AllZero=La opacidad del color de todos los bordes se establece como transparente +ImportContainerWarning_Node_Id_Special_Character=El id del nodo=''{0}'' tiene caracteres especiales como nuevas l\u00EDneas o espacios al final +ImportContainerClose_MutualEdgesRemoved=Se eliminan {0} bordes mutuos para satisfacer el tipo no dirigido +ImportContainerWarning_Edge_Id_Special_Character=Edge ID=''{0}'' contiene caracteres especiales como una nueva l\u00EDnea o un espacio final diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_fr.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_fr.properties index 7cd1c48e6b..aa084faf9e 100644 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_fr.properties +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_fr.properties @@ -1,37 +1,47 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:28+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -ImportContainerLog.TimeInterval=Intervalle temporel mis \u00e0 {0} - -ImportContainerLog.TimeFormat=Format temporel \: {0} - -ImportContainerException_nodeExist=Noeud d\u00e9clar\u00e9 2 fois id\=''{0}'' - -ImportContainerException_UnknowNodeId=Id de noeud inconnu - -ImportContainerException_MissingNodeSource=Source manquante, le lien est ignor\u00e9 - -ImportContainerException_MissingNodeTarget=Destination manquante, le lien est ignor\u00e9 - +ImportContainerLog.TimeInterval=Intervalle temporel mis ΰ {0} +ImportContainerLog.TimeFormat=Format temporel : {0} +ImportContainerLog.TimeRepresentation=Reprιsentation du temps: {0} +ImportContainerLog.AddNodeColumn=Colonne des n\u0153uds ''{0}'' ({1}) +ImportContainerLog.AddEdgeColumn=Colonne des liens ''{0}'' ({1}) +ImportContainerLog.AddDynamicNodeColumn=Colonne des n\u0153uds ''{0}'' (Dynamic {1}) +ImportContainerLog.AddDynamicEdgeColumn=Colonne des liens ''{0}'' (Dynamic {1}) +ImportContainerLog.EdgeLabelType=Les labels des liens sont de type ''{0}'' +ImportContainerLog.TimeZone=Le fuseau horaire est paramιtrι ΰ ''{0}'' +ImportContainerLog.MultiGraphCount=Multi-graphe avec {0} diffιrent types +ImportContainerLog.GraphTimestamp=Timestamp du graphe mis ΰ ''{0}'' +ImportContainerLog.GraphInterval=Intervalle temporel du graphe mis ΰ {0} +ImportContainerLog.ElementIdType=Type d'identifiant d'ιlιment mis ΰ '' {0} '' +ImportContainerException_nodeExist=Noeud dιclarι 2 fois id=''{0}'' +ImportContainerException_UnknowNodeId=N\u0153ud inconnu id=''{0}'' +ImportContainerException_AutoNodeCreated=Des n\u0153uds ont ιtι crιιs selon la source et la destination des liens +ImportContainerException_MissingNodeSource=Source manquante, le lien est ignorι +ImportContainerException_MissingNodeTarget=Destination manquante, le lien est ignorι ImportContainerException_MissingNodeId=Identifiant du noeud manquant - -ImportContainerException_edgeExist=Lien d\u00e9j\u00e0 existant - +ImportContainerException_edgeExist=Lien dιjΰ existant id=''{0}'' ImportContainerException_SelfLoop=Les boucles sont interdites - -ImportContainerException_Bad_Edge_Type=Type de noeud et valeur par d\u00e9faut incoh\u00e9rents - -ImportContainerException_Parallel_Edge=Liens parall\u00e8les non support\u00e9s actuellement, le lien id\=''{0}'' est ignor\u00e9 - -ImportContainerException_Set_EdgeDefault=Liens de type {0} par d\u00e9faut - -ImportContainerException_Weight_Zero_Ignored=Poids du lien 0 ou n\u00e9gatif, le lien id\=''{0}'' est ignor\u00e9 - -ImportContainerException_TimeInterval_ParseError=L'intervalle temporel ''{0}'' n'a pas pu \u00eatre identifi\u00e9.Utilisez un format Date ou Double. - -ImportContainerException_TimeInterval_Empty=Les param\u00e8tres start et end de l'intervalle temporel sont vides. +ImportContainerException_Bad_Edge_Type=Type de lien et valeur par dιfaut ({0}) incohιrents, lien id=''{1}'' ignorι +ImportContainerException_Parallel_Edge_Merged=Liens parallθles dιtectιs, pensez ΰ choisir une stratιgie de fusion +ImportContainerException_Parallel_Edge_Forbidden=Liens parallθles non supportιs, le lien id=''{0}'' est ignorι +ImportContainerException_Unsupported_Edge_type=Les types de lien ne peuvent avoir qu'une valeur de type primitive +ImportContainerException_Unsupported_Edge_type_Conflict=Le type d'ιtiquette de lien est du type {0} mais doit κtre {1}, l'ιtiquette est ignorιe +ImportContainerException_Set_EdgeDefault=Liens de type {0} par dιfaut +ImportContainerException_Weight_Zero_Ignored=Poids du lien 0 ou nιgatif, le lien id=''{0}'' est ignorι +ImportContainerException_ElementIdType_Parse_Error=Le type d'id est configurι pour '' {0} '' mais certains ids d'ιlιment ne peuvent pas κtre analysιs, 'STRING' est utilisι par dιfaut +ImportContainerException_Negative_Weight=Lien id=''{0}'' a un poids nιgatif +ImportContainerException_Column_Type_Mismatch=Une colonne ''{0}'' existe dιjΰ mais avec un type=''{1}'' diffιrent +ImportContainerException_Timestamp_Parse_Error=L'intervalle temporel du graphe ''{0}'' n'a pas pu κtre identifiι. +ImportContainerException_Interval_Parse_Error=L'intervalle temporel du graphe ''{0}'' n'a pas pu κtre identifiι. +ElementFactoryException_NullNodeId=L'identifiant du n\u0153ud ne peut pas κtre null +ElementFactoryException_NullEdgeId=L'identifiant du lien ne peut pas κtre null +ElementDraftException_ColorParse=La couleur '' {0} '' ne peut pas κtre analysιe pour l'ιlιment id = '' {1} '', la couleur est ignorιe +ElementDraftException_LabelColorParse=La couleur de l'ιtiquette '' {0} '' ne peut pas κtre analysιe pour l'ιlιment id = '' {1} '', la couleur est ignorιe +ElementDraftException_NotTimestampRepresentation=La reprιsentation temporelle doit κtre dιfinie sur TIMESTAMP, le timestamp de l'ιlιment id = '' {0} '' est ignorι +ElementDraftException_NotIntervalRepresentation=La reprιsentation temporelle doit κtre dιfinie sur TIMESTAMP, le timestamp de l'ιlιment id = '' {0} '' est ignorι +ElementDraftException_IntervalSetError=Un problθme a ιtι rencontrι lors de l'ajout de l'intervalle {0} ΰ l'ιlιment id = '' {1} '' et l'intervalle est ignorι, erreur: {2} +ElementDraftException_SetValueError=Un problθme a ιtι rencontrι lors de l'assignation de la valeur {0} ΰ l'ιlιment id = '' {1} '', erreur: {2} +ElementDraftException_SetValueTimestampError=Un problθme a ιtι rencontrι lors de l'assignation de la valeur "{0}" ΰ l'ιlιment id = ''{1}'' au timestamp {2}, erreur : {3} +ElementDraftException_SetValueIntervalError=Un problθme a ιtι rencontrι lors de l'assignation de la valeur "{0}" ΰ l'ιlιment id = ''{1}'' ΰ l'intervalle {2}, erreur : {3} +ImportContainerException_Node_Color_Alpha_AllZero=L'opacit\u00E9 de la couleur de tous n\u0153uds devient transparente +ImportContainerException_Edge_Color_Alpha_AllZero=L'opacit\u00E9 de la couleur de tous les liens devient transparente +ImportContainerClose_MutualEdgesRemoved={0} liens mutuels supprim\u00E9s pour valider le type non orient\u00E9 +ImportContainerClose_SelfLoopRemoved={0} boucles ont \u00E9t\u00E9 retir\u00E9es diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_he.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_he.properties new file mode 100644 index 0000000000..fa1aabfe4d --- /dev/null +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_he.properties @@ -0,0 +1,43 @@ +ImportContainerLog.TimeInterval=Time Interval set at {0} +ImportContainerLog.TimeFormat=Time Format: {0} +ImportContainerLog.TimeRepresentation=Time Representation: {0} +ImportContainerLog.AddNodeColumn=Node column ''{0}'' ({1}) +ImportContainerLog.AddEdgeColumn=Edge column ''{0}'' ({1}) +ImportContainerLog.AddDynamicNodeColumn=Node column ''{0}'' (Dynamic {1}) +ImportContainerLog.AddDynamicEdgeColumn=Edge column ''{0}'' (Dynamic {1}) +ImportContainerLog.EdgeLabelType=Edge labels are of type ''{0}'' +ImportContainerLog.TimeZone=Time zone is set at ''{0}'' +ImportContainerLog.MultiGraphCount=Multi-graph with {0} different types +ImportContainerLog.GraphTimestamp=Graph timestamp set at ''{0}'' +ImportContainerLog.GraphInterval=Graph interval set at ''{0}'' +ImportContainerLog.ElementIdType=Element id type set at ''{0}'' +ImportContainerException_nodeExist=Duplicated node id=''{0}'' +ImportContainerException_UnknowNodeId=Unknown Node id=''{0}'' +ImportContainerException_AutoNodeCreated=Some nodes were created based on edges' source and target +ImportContainerException_MissingNodeSource=Missing Node Source, edge is ignored +ImportContainerException_MissingNodeTarget=Missing Node Target, edge is ignored +ImportContainerException_MissingNodeId=Missing Node Identifier +ImportContainerException_edgeExist=Edge already exists id=''{0}'' +ImportContainerException_SelfLoop=Self loop are not allowed +ImportContainerException_Bad_Edge_Type=Edge type doesn't fit with default set ({0}), edge id=''{1}'' is ignored +ImportContainerException_Parallel_Edge_Merged=Parallel edges detected, remember to choose a merge strategy +ImportContainerException_Parallel_Edge_Forbidden=Parallel edges are not allowed, edge id=''{0}'' is ignored +ImportContainerException_Unsupported_Edge_type=Edge types can only have a primitive type value +ImportContainerException_Unsupported_Edge_type_Conflict=Edge label type is of type {0} but should be {1}, the label is ignored +ImportContainerException_Set_EdgeDefault=Default edge type set as ''{0}'' +ImportContainerException_Weight_Zero_Ignored=Edge weight is 0, the edge id=''{0}'' is ignored +ImportContainerException_ElementIdType_Parse_Error=The id type is configured to ''{0}'' but some elements id can't be parsed, defaulting to 'STRING' +ImportContainerException_Negative_Weight=Edge id=''{0}'' has a negative weight +ImportContainerException_Column_Type_Mismatch=A column ''{0}'' already exists but with a different type=''{1}'' +ImportContainerException_Timestamp_Parse_Error=The graph timestamp ''{0}'' could not be parsed +ImportContainerException_Interval_Parse_Error=The graph interval ''{0}'' could not be parsed +ElementFactoryException_NullNodeId=Node id can't be null +ElementFactoryException_NullEdgeId=Edge id can't be null +ElementDraftException_ColorParse=Color ''{0}'' can't be parsed for element id=''{1}'', color is ignored +ElementDraftException_LabelColorParse=Label color ''{0}'' can't be parsed for element id=''{1}'', color is ignored +ElementDraftException_NotTimestampRepresentation=The time representation should be set to TIMESTAMP, the timestamp for the element id=''{0}'' is ignored +ElementDraftException_NotIntervalRepresentation=The time representation should be set to INTERVAL, the interval for the element id=''{0}'' is ignored +ElementDraftException_IntervalSetError=A problem was encountered while adding the interval {0} to the element id=''{1}'' and the interval is ignored, error: {2} +ElementDraftException_SetValueError=A problem occurred while setting the value ''{0}'' to the element id=''{1}'', error: {2} +ElementDraftException_SetValueTimestampError=A problem occurred while setting the value ''{0}'' to the element id=''{1}'' at the timestamp {2}, error: {3} +ElementDraftException_SetValueIntervalError=A problem occurred while setting the value ''{0}'' to the element id=''{1}'' at the interval {2}, error: {3} diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_hu.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_hu.properties new file mode 100644 index 0000000000..93cff04c18 --- /dev/null +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_hu.properties @@ -0,0 +1,55 @@ + + +ImportContainerException_edgeExist=Edge m\u00E1r l\u00E9tezik id=''{0}'' +ElementDraftException_SetValueIntervalError=Hiba tφrtιnt a(z) ''{0}'' ιrtιknek az id=''{1}'' elemre valσ beαllνtαsa kφzben a(z) {2} intervallumban, hiba: {3} +ImportContainerWarning_Node_Id_Special_Character=A csom\u00F3pont id=''{0}'' speci\u00E1lis karaktereket tartalmaz, p\u00E9ld\u00E1ul \u00FAjsorokat vagy sz\u00F3k\u00F6z\u00F6ket +ImportContainerLog.TimeZone=Az id\u0151z\u00F3na be\u00E1ll\u00EDt\u00E1sa \u201E{0}\u201D +ImportContainerException_Set_EdgeDefault=Az alap\u00E9rtelmezett \u00E9lt\u00EDpus be\u00E1ll\u00EDtva: ''{0}'' +ImportContainerException_Column_Type_Mismatch=A(z) ''{0}'' oszlop m\u00E1r l\u00E9tezik, de m\u00E1s t\u00EDpus\u00FA=''{1}'' +ImportContainerLog.GraphInterval=Grafikon intervallum be\u00E1ll\u00EDtva: ''{0}'' +ImportContainerException_Node_Color_Alpha_AllZero=Minden csom\u00F3pont sz\u00EDn\u00E1tl\u00E1tszatlans\u00E1ga \u00E1tl\u00E1tsz\u00F3nak van be\u00E1ll\u00EDtva +ImportContainerException_Parallel_Edge_Merged=P\u00E1rhuzamos \u00E9lek \u00E9szlelve, ne felejtse el kiv\u00E1lasztani az egyes\u00EDt\u00E9si strat\u00E9gi\u00E1t +ImportContainerLog.TimeInterval=Id\u0151intervallum be\u00E1ll\u00EDtva: {0} +ImportContainerException_Unsupported_Edge_type_Conflict=Az \u00E9lc\u00EDmke t\u00EDpusa {0} t\u00EDpus\u00FA, de ennek {1}-nek kell lennie, a c\u00EDmke figyelmen k\u00EDv\u00FCl marad +ImportContainerLog.MultiGraphCount=T\u00F6bbdiagram {0} k\u00FCl\u00F6nb\u00F6z\u0151 t\u00EDpussal +ImportContainerException_MissingNodeTarget=Hi\u00E1nyz\u00F3 csom\u00F3ponti c\u00E9l, az \u00E9l figyelmen k\u00EDv\u00FCl hagyva + + +ImportContainerClose_SelfLoopRemoved={0} \u00F6nhurok elt\u00E1vol\u00EDtva +ElementDraftException_SetValueTimestampError=Hiba tφrtιnt a(z) ''{0}'' ιrtιknek az id=''{1}'' elemre valσ beαllνtαsa kφzben a(z) {2} id\u0151bιlyegben, hiba: {3} +ImportContainerException_Unsupported_Edge_type=Az \u00E9lt\u00EDpusoknak csak primit\u00EDv t\u00EDpus\u00E9rt\u00E9ke lehet +ImportContainerLog.EdgeLabelType=Az \u00E9lc\u00EDmk\u00E9k a k\u00F6vetkez\u0151 t\u00EDpus\u00FAak: \u201E{0}\u201D +ImportContainerException_UnknowNodeId=Ismeretlen csom\u00F3pont azonos\u00EDt\u00F3=''{0}'' +ElementDraftException_ColorParse=A(z) ''{0}'' szνnt nem lehet elemezni az id=''{1}'' elemhez, a szνn figyelmen kνvόl hagyva +ImportContainerException_Interval_Parse_Error=A(z) \u201E{0}\u201D grafikonintervallum nem \u00E9rtelmezhet\u0151 +ElementDraftException_IntervalSetError=Hiba tφrtιnt a(z) {0} intervallumnak az id=''{1}'' elemhez valσ hozzαadαsa kφzben, ιs a rendszer figyelmen kνvόl hagyja az intervallumot, hiba: {2} +ImportContainerException_MissingNodeSource=Hi\u00E1nyz\u00F3 csom\u00F3pontforr\u00E1s, az \u00E9l figyelmen k\u00EDv\u00FCl hagyva +ImportContainerLog.TimeRepresentation=Id\u0151\u00E1br\u00E1zol\u00E1s: {0} +ElementDraftException_NotIntervalRepresentation=Az id\u0151αbrαzolαst INTERVAL ιrtιkre kell αllνtani, az id=''{0}'' elem intervallumαt figyelmen kνvόl hagyja +ElementDraftException_SetValueTimestampDuplicate=A(z) {0} ιrtιk felόlνrta az id=''{1}'' elem meglιv\u0151 ιrtιkιt a(z) {2} id\u0151bιlyegben +ImportContainerLog.AddDynamicNodeColumn=\u201E{0}\u201D csom\u00F3pontoszlop (dinamikus {1}) +ImportContainerLog.TimeFormat=Id\u0151form\u00E1tum: {0} +ImportContainerException_SelfLoop=Az \u00F6nhurok nem enged\u00E9lyezett +ImportContainerClose_MutualEdgesRemoved={0} k\u00F6lcs\u00F6n\u00F6s \u00E9l elt\u00E1vol\u00EDt\u00E1sa az ir\u00E1ny\u00EDtatlan t\u00EDpus teljes\u00EDt\u00E9se \u00E9rdek\u00E9ben +ImportContainerException_Parallel_Edge_Forbidden=P\u00E1rhuzamos \u00E9lek nem megengedettek, az \u00E9lazonos\u00EDt\u00F3=''{0}'' figyelmen k\u00EDv\u00FCl marad +ImportContainerLog.GraphTimestamp=A grafikon id\u0151b\u00E9lyege be\u00E1ll\u00EDtva: ''{0}'' +ElementDraftException_SetValueIntervalDuplicate=A(z) {0} ιrtιk felόlνrta az id=''{1}'' elem meglιv\u0151 ιrtιkιt a(z) {2} intervallumban +ImportContainerLog.AddEdgeColumn=''{0}'' \u00E9loszlop ({1}) +ImportContainerException_AutoNodeCreated=N\u00E9h\u00E1ny csom\u00F3pont az \u00E9lek forr\u00E1sa \u00E9s c\u00E9lja alapj\u00E1n j\u00F6tt l\u00E9tre +ImportContainerException_Edge_Color_Alpha_AllZero=Minden \u00E9l sz\u00EDn\u00E1tl\u00E1tsz\u00F3s\u00E1ga \u00E1tl\u00E1tsz\u00F3nak van be\u00E1ll\u00EDtva +ElementFactoryException_NullEdgeId=Az \u00E9lazonos\u00EDt\u00F3 nem lehet null +ImportContainerException_Timestamp_Parse_Error=A grafikon ''{0}'' id\u0151b\u00E9lyeg\u00E9t nem siker\u00FClt elemezni +ElementDraftException_SetValueError=Hiba tφrtιnt a(z) ''{0}'' ιrtιknek az id=''{1}'' elemre valσ beαllνtαsa kφzben, hiba: {2} +ImportContainerException_Bad_Edge_Type=Az \u00E9lt\u00EDpus nem illeszkedik az alap\u00E9rtelmezett k\u00E9szlethez ({0}), az \u00E9lazonos\u00EDt\u00F3=''{1}'' figyelmen k\u00EDv\u00FCl marad +ElementDraftException_LabelColorParse=A(z) ''{0}'' cνmke szνne nem elemezhet\u0151 az id=''{1}'' elemhez, a szνn figyelmen kνvόl hagyva +ImportContainerWarning_Edge_Id_Special_Character=Az Edge id=''{0}'' speci\u00E1lis karaktereket tartalmaz, p\u00E9ld\u00E1ul \u00FAjsorokat vagy sz\u00F3k\u00F6z\u00F6ket +ImportContainerLog.ElementIdType=Az elemazonos\u00EDt\u00F3 t\u00EDpusa be\u00E1ll\u00EDtva: ''{0}'' +ImportContainerException_Weight_Zero_Ignored=Az \u00E9l s\u00FAlya 0, az \u00E9lazonos\u00EDt\u00F3=''{0}'' figyelmen k\u00EDv\u00FCl marad +ImportContainerException_ElementIdType_Parse_Error=Az azonos\u00EDt\u00F3 t\u00EDpusa a k\u00F6vetkez\u0151re van be\u00E1ll\u00EDtva: \u201E{0}\u201D, de egyes elemek azonos\u00EDt\u00F3ja nem elemezhet\u0151, alap\u00E9rtelmez\u00E9s szerint \u201ESTRING\u201D +ElementFactoryException_NullNodeId=A csom\u00F3pont azonos\u00EDt\u00F3ja nem lehet null +ImportContainerException_MissingNodeId=Hi\u00E1nyz\u00F3 csom\u00F3pontazonos\u00EDt\u00F3 +ImportContainerException_Negative_Weight=Az \u00E9lazonos\u00EDt\u00F3=''{0}'' negat\u00EDv s\u00FAly\u00FA +ImportContainerException_nodeExist=Megkett\u0151z\u00F6tt csom\u00F3pont azonos\u00EDt\u00F3ja=''{0}'' +ImportContainerLog.AddDynamicEdgeColumn=\u201E{0}\u201D \u00E9loszlop (dinamikus {1}) +ImportContainerLog.AddNodeColumn=\u201E{0}\u201D csom\u00F3pontoszlop ({1}) +ElementDraftException_NotTimestampRepresentation=Az id\u0151αbrαzolαst TIMESTAMP-re kell αllνtani, az id=''{0}'' elem id\u0151bιlyegιt figyelmen kνvόl hagyja diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_it.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_it.properties new file mode 100644 index 0000000000..e9874257ab --- /dev/null +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_it.properties @@ -0,0 +1,43 @@ +ImportContainerLog.TimeInterval=Intervallo temporale impostato a {0} +ImportContainerLog.TimeFormat=Time Format: {0} +ImportContainerLog.TimeRepresentation=Time Representation: {0} +ImportContainerLog.AddNodeColumn=Node column ''{0}'' ({1}) +ImportContainerLog.AddEdgeColumn=Edge column ''{0}'' ({1}) +ImportContainerLog.AddDynamicNodeColumn=Node column ''{0}'' (Dynamic {1}) +ImportContainerLog.AddDynamicEdgeColumn=Edge column ''{0}'' (Dynamic {1}) +ImportContainerLog.EdgeLabelType=Edge labels are of type ''{0}'' +ImportContainerLog.TimeZone=Time zone is set at ''{0}'' +ImportContainerLog.MultiGraphCount=Multi-graph with {0} different types +ImportContainerLog.GraphTimestamp=Graph timestamp set at ''{0}'' +ImportContainerLog.GraphInterval=Graph interval set at ''{0}'' +ImportContainerLog.ElementIdType=Element id type set at ''{0}'' +ImportContainerException_nodeExist=Duplicated node id=''{0}'' +ImportContainerException_UnknowNodeId=Unknown Node id=''{0}'' +ImportContainerException_AutoNodeCreated=Some nodes were created based on edges' source and target +ImportContainerException_MissingNodeSource=Missing Node Source, edge is ignored +ImportContainerException_MissingNodeTarget=Missing Node Target, edge is ignored +ImportContainerException_MissingNodeId=Missing Node Identifier +ImportContainerException_edgeExist=Edge already exists id=''{0}'' +ImportContainerException_SelfLoop=Self loop are not allowed +ImportContainerException_Bad_Edge_Type=Edge type doesn't fit with default set ({0}), edge id=''{1}'' is ignored +ImportContainerException_Parallel_Edge_Merged=Parallel edges detected, remember to choose a merge strategy +ImportContainerException_Parallel_Edge_Forbidden=Parallel edges are not allowed, edge id=''{0}'' is ignored +ImportContainerException_Unsupported_Edge_type=Edge types can only have a primitive type value +ImportContainerException_Unsupported_Edge_type_Conflict=Edge label type is of type {0} but should be {1}, the label is ignored +ImportContainerException_Set_EdgeDefault=Default edge type set as ''{0}'' +ImportContainerException_Weight_Zero_Ignored=Edge weight is 0, the edge id=''{0}'' is ignored +ImportContainerException_ElementIdType_Parse_Error=The id type is configured to ''{0}'' but some elements id can't be parsed, defaulting to 'STRING' +ImportContainerException_Negative_Weight=Edge id=''{0}'' has a negative weight +ImportContainerException_Column_Type_Mismatch=A column ''{0}'' already exists but with a different type=''{1}'' +ImportContainerException_Timestamp_Parse_Error=The graph timestamp ''{0}'' could not be parsed +ImportContainerException_Interval_Parse_Error=The graph interval ''{0}'' could not be parsed +ElementFactoryException_NullNodeId=Node id can't be null +ElementFactoryException_NullEdgeId=Edge id can't be null +ElementDraftException_ColorParse=Color ''{0}'' can't be parsed for element id=''{1}'', color is ignored +ElementDraftException_LabelColorParse=Label color ''{0}'' can't be parsed for element id=''{1}'', color is ignored +ElementDraftException_NotTimestampRepresentation=The time representation should be set to TIMESTAMP, the timestamp for the element id=''{0}'' is ignored +ElementDraftException_NotIntervalRepresentation=The time representation should be set to INTERVAL, the interval for the element id=''{0}'' is ignored +ElementDraftException_IntervalSetError=A problem was encountered while adding the interval {0} to the element id=''{1}'' and the interval is ignored, error: {2} +ElementDraftException_SetValueError=A problem occurred while setting the value ''{0}'' to the element id=''{1}'', error: {2} +ElementDraftException_SetValueTimestampError=A problem occurred while setting the value ''{0}'' to the element id=''{1}'' at the timestamp {2}, error: {3} +ElementDraftException_SetValueIntervalError=A problem occurred while setting the value ''{0}'' to the element id=''{1}'' at the interval {2}, error: {3} diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_ja.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_ja.properties index ea0de139ff..46c687e5f9 100644 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_ja.properties +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_ja.properties @@ -1,37 +1,46 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:28+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -ImportContainerLog.TimeInterval={0}\u3067\u8a2d\u5b9a\u3055\u308c\u305f\u6642\u9593\u9593\u9694 - -ImportContainerLog.TimeFormat=\u6642\u9593\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\:{0} - -ImportContainerException_nodeExist=\u91cd\u8907\u3057\u305f\u30ce\u30fc\u30c9ID \= "{0}" - -ImportContainerException_UnknowNodeId=\u4e0d\u660e\u306a\u30ce\u30fc\u30c9ID - -ImportContainerException_MissingNodeSource=\u30ce\u30fc\u30c9\u306e\u30bd\u30fc\u30b9\u304c\u6b20\u843d\u3001\u8fba\u306f\u7121\u8996\u3055\u308c\u307e\u3059 - -ImportContainerException_MissingNodeTarget=\u30ce\u30fc\u30c9\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u304c\u6b20\u843d\u3001\u8fba\u306f\u7121\u8996\u3055\u308c\u307e\u3059 - -ImportContainerException_MissingNodeId=\u6b20\u843d\u30ce\u30fc\u30c9\u8b58\u5225\u5b50 - -ImportContainerException_edgeExist=\u8fba\u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u3066\u3044\u307e\u3059 - -ImportContainerException_SelfLoop=\u30bb\u30eb\u30d5\u30fb\u30eb\u30fc\u30d7\u306f\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 - -ImportContainerException_Bad_Edge_Type=\u8fba\u306e\u7a2e\u985e\u304c\u30c7\u30d5\u30a9\u30eb\u30c8\u306b\u9069\u5408\u3057\u307e\u305b\u3093\u3002 - -ImportContainerException_Parallel_Edge=\u5e73\u884c\u306a\u8fba\u306f\u307e\u3060\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u8fbaID\="{0}"\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002 - -ImportContainerException_Set_EdgeDefault=\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u8fba\u306e\u7a2e\u985e\u306f{0}\u3068\u3057\u3066\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002 - -ImportContainerException_Weight_Zero_Ignored=\u8fba\u306e\u91cd\u307f\u304c0\u3082\u3057\u304f\u306f\u8ca0\u3067\u3059\u3002\u8fbaID\="{0}"\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002 - -ImportContainerException_TimeInterval_ParseError=\u6642\u9593\u9593\u9694''{0}'''\u3092\u89e3\u6790\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u65e5\u4ed8\u307e\u305f\u306f\u30c0\u30d6\u30eb\u66f8\u5f0f\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044 - -ImportContainerException_TimeInterval_Empty=\u6642\u9593\u9593\u9694\u306e\u958b\u59cb\u53ca\u3073\u7d42\u4e86\u30d1\u30e9\u30e1\u30fc\u30bf\u304c\u4e21\u65b9\u3068\u3082\u7a7a\u3067\u3042\u308b +ImportContainerLog.TimeInterval = {0}\u3067\u8a2d\u5b9a\u3055\u308c\u305f\u6642\u9593\u9593\u9694 +ImportContainerLog.TimeFormat = \u6642\u9593\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8:{0} +# ImportContainerLog.TimeRepresentation = Time Representation: {0} +# ImportContainerLog.AddNodeColumn = Node column ''{0}'' ({1}) +# ImportContainerLog.AddEdgeColumn = Edge column ''{0}'' ({1}) +# ImportContainerLog.AddDynamicNodeColumn = Node column ''{0}'' (Dynamic {1}) +# ImportContainerLog.AddDynamicEdgeColumn = Edge column ''{0}'' (Dynamic {1}) +# ImportContainerLog.EdgeLabelType = Edge labels are of type ''{0}'' +# ImportContainerLog.TimeZone = Time zone is set at ''{0}'' +# ImportContainerLog.MultiGraphCount = Multi-graph with {0} different types +# ImportContainerLog.GraphTimestamp = Graph timestamp set at ''{0}'' +# ImportContainerLog.GraphInterval = Graph interval set at ''{0}'' +# ImportContainerLog.ElementIdType = Element id type set at ''{0}'' + +ImportContainerException_nodeExist = \u91cd\u8907\u3057\u305f\u30ce\u30fc\u30c9ID = "{0}" +# ImportContainerException_UnknowNodeId = Unknown Node id=''{0}'' +# ImportContainerException_AutoNodeCreated = Some nodes were created based on edges' source and target +ImportContainerException_MissingNodeSource = \u30ce\u30fc\u30c9\u306e\u30bd\u30fc\u30b9\u304c\u6b20\u843d\u3001\u8fba\u306f\u7121\u8996\u3055\u308c\u307e\u3059 +ImportContainerException_MissingNodeTarget = \u30ce\u30fc\u30c9\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u304c\u6b20\u843d\u3001\u8fba\u306f\u7121\u8996\u3055\u308c\u307e\u3059 +ImportContainerException_MissingNodeId = \u6b20\u843d\u30ce\u30fc\u30c9\u8b58\u5225\u5b50 +ImportContainerException_edgeExist = \u8fba\u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u3066\u3044\u307e\u3059 +ImportContainerException_SelfLoop = \u30bb\u30eb\u30d5\u30fb\u30eb\u30fc\u30d7\u306f\u8a31\u53ef\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 +# ImportContainerException_Bad_Edge_Type = Edge type doesn't fit with default set ({0}), edge id=''{1}'' is ignored +# ImportContainerException_Parallel_Edge_Merged = Parallel edges detected, remember to choose a merge strategy +# ImportContainerException_Parallel_Edge_Forbidden = Parallel edges are not allowed, edge id=''{0}'' is ignored +# ImportContainerException_Unsupported_Edge_type = Edge types can only have a primitive type value +# ImportContainerException_Unsupported_Edge_type_Conflict = Edge label type is of type {0} but should be {1}, the label is ignored +ImportContainerException_Set_EdgeDefault = \u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u8fba\u306e\u7a2e\u985e\u306f{0}\u3068\u3057\u3066\u8a2d\u5b9a\u3055\u308c\u3066\u3044\u307e\u3059\u3002 +ImportContainerException_Weight_Zero_Ignored = \u8fba\u306e\u91cd\u307f\u304c0\u3082\u3057\u304f\u306f\u8ca0\u3067\u3059\u3002\u8fbaID="{0}"\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002 +# ImportContainerException_ElementIdType_Parse_Error = The id type is configured to ''{0}'' but some elements id can't be parsed, defaulting to 'STRING' +# ImportContainerException_Negative_Weight = Edge id=''{0}'' has a negative weight +# ImportContainerException_Column_Type_Mismatch = A column ''{0}'' already exists but with a different type=''{1}'' +# ImportContainerException_Timestamp_Parse_Error = The graph timestamp ''{0}'' could not be parsed +# ImportContainerException_Interval_Parse_Error = The graph interval ''{0}'' could not be parsed + +# ElementFactoryException_NullNodeId = Node id can't be null +# ElementFactoryException_NullEdgeId = Edge id can't be null + +# ElementDraftException_ColorParse = Color ''{0}'' can't be parsed for element id=''{1}'', color is ignored +# ElementDraftException_LabelColorParse = Label color ''{0}'' can't be parsed for element id=''{1}'', color is ignored +# ElementDraftException_NotTimestampRepresentation = The time representation should be set to TIMESTAMP, the timestamp for the element id=''{0}'' is ignored +# ElementDraftException_NotIntervalRepresentation = The time representation should be set to INTERVAL, the interval for the element id=''{0}'' is ignored +# ElementDraftException_IntervalSetError = A problem was encountered while adding the interval {0} to the element id=''{1}'' and the interval is ignored, error: {2} +# ElementDraftException_SetValueError = A problem occurred while setting the value ''{0}'' to the element id=''{1}'', error: {2} +# ElementDraftException_SetValueTimestampError = A problem occurred while setting the value ''{0}'' to the element id=''{1}'' at the timestamp {2}, error: {3} +# ElementDraftException_SetValueIntervalError = A problem occurred while setting the value ''{0}'' to the element id=''{1}'' at the interval {2}, error: {3} diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_ko.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_ko.properties new file mode 100644 index 0000000000..09b3bdac14 --- /dev/null +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_ko.properties @@ -0,0 +1,55 @@ + + +ImportContainerLog.AddNodeColumn=\uB178\uB4DC \uCEEC\uB7FC ''{0}'' ({1}) +ImportContainerLog.AddDynamicEdgeColumn=\uC5E3\uC9C0 \uCEEC\uB7FC ''{0}'' (\uB3D9\uC801 {1}) +ImportContainerLog.AddDynamicNodeColumn=\uB178\uB4DC \uCEEC\uB7FC ''{0}'' (\uB3D9\uC801 {1}) +ImportContainerLog.EdgeLabelType=''{0}'' \uD0C0\uC785\uC758 \uC5E3\uC9C0 \uB808\uC774\uBE14 +ImportContainerLog.TimeZone=\uC2DC\uAC04\uB300\uAC00 ''{0}''(\uC73C)\uB85C \uC124\uC815\uB428 +ImportContainerLog.MultiGraphCount={0} \uAC1C \uB2E4\uB978 \uC720\uD615\uC758 \uB2E4\uC911 \uADF8\uB798\uD504 +ImportContainerLog.ElementIdType=''{0}''\uB85C \uC124\uC815\uB41C \uC694\uC18C ID \uD0C0\uC785 +ImportContainerException_nodeExist=\uC911\uBCF5\uB41C \uB178\uB4DC ID=''{0}'' +ImportContainerException_UnknowNodeId=\uC54C \uC218 \uC5C6\uB294 \uB178\uB4DC ID=''{0}'' +ImportContainerException_AutoNodeCreated=\uC77C\uBD80 \uB178\uB4DC\uB4E4\uC740 \uC5E3\uC9C0\uC758 \uC18C\uC2A4\uC640 \uD0C0\uAC9F\uC5D0 \uAE30\uBC18\uD574\uC11C \uC0DD\uC131\uB428 +ImportContainerException_MissingNodeSource=\uB178\uB4DC \uC18C\uC2A4\uAC00 \uB204\uB77D\uB428, \uC5E3\uC9C0\uB294 \uBB34\uC2DC\uB428 +ImportContainerException_MissingNodeId=\uB178\uB4DC ID\uAC00 \uB204\uB77D\uB428 +ImportContainerException_edgeExist=\uC5E3\uC9C0\uAC00 \uC774\uBBF8 \uC874\uC7AC\uD568 id=''{0}'' +ImportContainerException_SelfLoop=\uC790\uCCB4 \uB8E8\uD504\uB294 \uD5C8\uC6A9 \uC548 \uB428 +ImportContainerException_Bad_Edge_Type=\uC5E3\uC9C0 \uD0C0\uC785\uC774 \uAE30\uBCF8 \uAC12({0})\uC5D0 \uB9DE\uC9C0 \uC54A\uC74C, \uC5E3\uC9C0 ID=''{1}''\uB294 \uBB34\uC2DC\uB428 +ImportContainerException_Parallel_Edge_Forbidden=\uBCD1\uB82C \uC5E3\uC9C0\uB294 \uD5C8\uC6A9 \uC548 \uB428, \uC5E3\uC9C0 ID=''{0}''\uB294 \uBB34\uC2DC\uB428 +ImportContainerException_Unsupported_Edge_type=\uC5E3\uC9C0 \uD0C0\uC785\uC740 \uC624\uC9C1 \uC6D0\uC2DC \uD0C0\uC785 \uAC12\uB9CC \uAC00\uC9C8 \uC218 \uC788\uC74C +ImportContainerException_Unsupported_Edge_type_Conflict=\uC5E3\uC9C0 \uB808\uC774\uBE14 \uD0C0\uC785\uC774 {0}\uD615\uC778\uB370 {1}\uD615\uC774\uC5B4\uC57C \uD568, \uB808\uC774\uBE14\uC740 \uBB34\uC2DC\uB428 +ImportContainerException_Set_EdgeDefault=\uAE30\uBCF8\uAC12 \uC5E3\uC9C0 \uD0C0\uC785\uC774 ''{0}''\uB85C \uC124\uC815\uB428 +ImportContainerException_Weight_Zero_Ignored=\uC5E3\uC9C0 \uAC00\uC911\uCE58\uAC00 0\uC784, \uC5E3\uC9C0 ID=''{0}''\uB294 \uBB34\uC2DC\uB428 +ImportContainerException_ElementIdType_Parse_Error=ID \uD0C0\uC785\uC774 ''{0}''\uB85C \uAD6C\uC131\uB418\uC5C8\uC73C\uB098 \uC77C\uBD80 \uC694\uC18C ID\uB294 \uD574\uC11D\uC774 \uC548 \uB428, 'STRING'\uC744 \uAE30\uBCF8\uAC12\uC73C\uB85C \uD568 +ImportContainerException_Timestamp_Parse_Error=\uADF8\uB798\uD504 \uD0C0\uC784 \uC2A4\uD0EC\uD504 ''{0}''\uB294 \uD574\uC11D\uC774 \uC548\uB428 +ImportContainerException_Interval_Parse_Error=\uADF8\uB798\uD504 \uAC04\uACA9 ''{0}''\uC740 \uD574\uC11D\uC774 \uC548 \uB428 +ImportContainerException_Node_Color_Alpha_AllZero=\uBAA8\uB4E0 \uB178\uB4DC \uC0C9\uC0C1 \uBD88\uD22C\uBA85\uB3C4\uAC00 \uD22C\uBA85\uC73C\uB85C \uC124\uC815\uB428 +ElementFactoryException_NullNodeId=\uB178\uB4DC ID\uB294 NULL\uC774 \uB420 \uC218 \uC5C6\uC74C +ElementFactoryException_NullEdgeId=\uC5E3\uC9C0 ID\uB294 NULL\uC774 \uB420 \uC218 \uC5C6\uC74C +ElementDraftException_ColorParse=\uC694\uC18C ID=''{1}''\uC5D0 \uB300\uD55C \uC0C9\uC0C1 ''{0}''\uAC00 \uD574\uC11D\uC774 \uC548 \uB428, \uC0C9\uC0C1\uC774 \uBB34\uC2DC\uB428 +ElementDraftException_LabelColorParse=\uC694\uC18C ID=''{1}''\uC5D0 \uB300\uD55C \uB808\uC774\uBE14 \uC0C9\uC0C1 ''{0}''\uAC00 \uD574\uC11D\uC774 \uC548 \uB428, \uC0C9\uC0C1\uC774 \uBB34\uC2DC\uB428 +ElementDraftException_NotTimestampRepresentation=\uC2DC\uAC04 \uD45C\uD604\uC740 TIMESTAMP\uB85C \uC124\uC815\uB418\uC5B4\uC57C \uD568, \uC694\uC18C ID=''{0}''\uC5D0 \uB300\uD55C \uD0C0\uC784 \uC2A4\uD0EC\uD504\uB294 \uBB34\uC2DC\uB428 +ElementDraftException_SetValueError=\uAC12 ''{0}''\uC744 \uC694\uC18C ID=''{1}''\uB85C \uC124\uC815\uD558\uBA74\uC11C \uBB38\uC81C\uAC00 \uBC1C\uC0DD\uD568, \uC624\uB958: {2} +ElementDraftException_SetValueIntervalDuplicate=\uAC04\uACA9 {2}\uC5D0\uC11C \uC694\uC18C ID=''{1}''\uC758 \uAE30\uC874 \uAC12\uC744 \uAC12 {0}\uC73C\uB85C \uB36E\uC5B4 \uC37C\uC74C +ElementDraftException_SetValueTimestampDuplicate=\uD0C0\uC784\uC2A4\uD0EC\uD504 {2}\uC5D0\uC11C \uC694\uC18C ID=''{1}''\uC758 \uAE30\uC874 \uAC12\uC744 \uAC12 {0}\uC73C\uB85C \uB36E\uC5B4 \uC37C\uC74C +ImportContainerLog.TimeInterval={0}\uC73C\uB85C \uC2DC\uAC04 \uAC04\uACA9 \uC124\uC815 +ImportContainerLog.TimeFormat=\uC2DC\uAC04 \uD3EC\uB9F7: {0} +ImportContainerLog.TimeRepresentation=\uC2DC\uAC04 \uD45C\uD604: {0} +ImportContainerLog.AddEdgeColumn=\uC5E3\uC9C0 \uCEEC\uB7FC ''{0}'' ({1}) +ImportContainerLog.GraphTimestamp=''{0}''\uB85C \uC124\uC815\uB41C \uADF8\uB798\uD504 \uD0C0\uC784 \uC2A4\uD0EC\uD504 +ImportContainerLog.GraphInterval=''{0}''\uB85C \uC124\uC815\uB41C \uADF8\uB798\uD504 \uAC04\uACA9 +ImportContainerException_MissingNodeTarget=\uB178\uB4DC \uD0C0\uAC9F\uC774 \uB204\uB77D\uB428, \uC5E3\uC9C0\uB294 \uBB34\uC2DC\uB428 +ImportContainerException_Parallel_Edge_Merged=\uBCD1\uB82C \uC5E3\uC9C0\uAC00 \uBC1C\uACAC\uB428, \uBCD1\uD569 \uC804\uB7B5\uC744 \uC120\uD0DD \uBC14\uB78C +ImportContainerException_Negative_Weight=\uC5E3\uC9C0 ID=''{0}''\uAC00 \uC74C\uC218 \uAC00\uC911\uCE58\uB97C \uAC00\uC9D0 +ImportContainerException_Column_Type_Mismatch=\uCEEC\uB7FC ''{0}''\uC774 \uC774\uBBF8 \uC874\uC7AC\uD558\uB098 \uB2E4\uB978 \uD0C0\uC785=''{1}''\uC784 +ImportContainerException_Edge_Color_Alpha_AllZero=\uBAA8\uB4E0 \uC5E3\uC9C0 \uC0C9\uC0C1 \uBD88\uD22C\uBA85\uB3C4\uAC00 \uD22C\uBA85\uD558\uAC8C \uC124\uC815\uB428 +ElementDraftException_IntervalSetError=\uAC04\uACA9 {0}\uC744 \uC694\uC18C ID=''{1}''\uC5D0 \uCD94\uAC00\uD558\uBA74\uC11C \uBB38\uC81C\uAC00 \uC0DD\uACBC\uACE0 \uAC04\uACA9\uC740 \uBB34\uC2DC\uB428, \uC624\uB958: {2} +ElementDraftException_NotIntervalRepresentation=\uC2DC\uAC04 \uD45C\uD604\uC774 INTERVAL\uB85C \uC124\uC815\uB418\uC5B4\uC57C \uD568, \uC694\uC18C ID=''{0}''\uC5D0 \uB300\uD55C \uAC04\uACA9\uC774 \uBB34\uC2DC\uB428 +ElementDraftException_SetValueTimestampError=\uD0C0\uC784\uC2A4\uD0EC\uD504 {2}\uC5D0\uC11C \uAC12 ''{0}'\uB97C \uC694\uC18C ID=''{1}''\uB85C \uC124\uC815\uD558\uBA74\uC11C \uBB38\uC81C\uAC00 \uBC1C\uC0DD\uB428, \uC624\uB958: {3} +ImportContainerWarning_Edge_Id_Special_Character=\uC5E3\uC9C0 ID=''{0}''\uC5D0 \uAC1C\uD589\uBB38\uC790\uB098 \uD6C4\uD589\uACF5\uBC31 \uAC19\uC740 \uD2B9\uC218 \uBB38\uC790\uAC00 \uC788\uC74C +ElementDraftException_SetValueIntervalError=\uAC04\uACA9 {2}\uC5D0\uC11C \uAC12 ''{0}'\uC744 \uC694\uC18C ID=''{1}''\uB85C \uC124\uC815\uD558\uBA74\uC11C \uBB38\uC81C\uAC00 \uBC1C\uC0DD\uB428, \uC624\uB958: {3} + + +ImportContainerClose_SelfLoopRemoved={0} \uAC1C\uC758 \uC790\uCCB4 \uB8E8\uD504\uAC00 \uC81C\uAC70\uB428 +ImportContainerClose_MutualEdgesRemoved=\uBB34\uBC29\uD5A5 \uD0C0\uC785\uC73C\uB85C \uCDA9\uC871\uC2DC\uD0A4\uAE30 \uC704\uD574 {0} \uAC1C\uC758 \uC0C1\uD638 \uC5E3\uC9C0\uAC00 \uC81C\uAC70\uB428 +ImportContainerWarning_Node_Id_Special_Character=\uB178\uB4DC ID=''{0}'\uC5D0 \uAC1C\uD589\uBB38\uC790\uB098 \uD6C4\uD589\uACF5\uBC31 \uAC19\uC740 \uD2B9\uC218 \uBB38\uC790\uAC00 \uC788\uC74C diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_nl.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_nl.properties new file mode 100644 index 0000000000..e5f31d4ea9 --- /dev/null +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_nl.properties @@ -0,0 +1,43 @@ +ImportContainerLog.TimeInterval=Time Interval set at {0} +ImportContainerLog.TimeFormat=Time Format: {0} +ImportContainerLog.TimeRepresentation=Time Representation: {0} +ImportContainerLog.AddNodeColumn=Knoopkolom ''{0}'' ({1}) +ImportContainerLog.AddEdgeColumn=Edge column ''{0}'' ({1}) +ImportContainerLog.AddDynamicNodeColumn=Node column ''{0}'' (Dynamic {1}) +ImportContainerLog.AddDynamicEdgeColumn=Edge column ''{0}'' (Dynamic {1}) +ImportContainerLog.EdgeLabelType=Edge labels are of type ''{0}'' +ImportContainerLog.TimeZone=Time zone is set at ''{0}'' +ImportContainerLog.MultiGraphCount=Multi-graph with {0} different types +ImportContainerLog.GraphTimestamp=Graph timestamp set at ''{0}'' +ImportContainerLog.GraphInterval=Graph interval set at ''{0}'' +ImportContainerLog.ElementIdType=Element id type set at ''{0}'' +ImportContainerException_nodeExist=Duplicated node id=''{0}'' +ImportContainerException_UnknowNodeId=Unknown Node id=''{0}'' +ImportContainerException_AutoNodeCreated=Some nodes were created based on edges' source and target +ImportContainerException_MissingNodeSource=Missing Node Source, edge is ignored +ImportContainerException_MissingNodeTarget=Missing Node Target, edge is ignored +ImportContainerException_MissingNodeId=Missing Node Identifier +ImportContainerException_edgeExist=Edge already exists id=''{0}'' +ImportContainerException_SelfLoop=Self loop are not allowed +ImportContainerException_Bad_Edge_Type=Edge type doesn't fit with default set ({0}), edge id=''{1}'' is ignored +ImportContainerException_Parallel_Edge_Merged=Parallel edges detected, remember to choose a merge strategy +ImportContainerException_Parallel_Edge_Forbidden=Parallel edges are not allowed, edge id=''{0}'' is ignored +ImportContainerException_Unsupported_Edge_type=Edge types can only have a primitive type value +ImportContainerException_Unsupported_Edge_type_Conflict=Edge label type is of type {0} but should be {1}, the label is ignored +ImportContainerException_Set_EdgeDefault=Default edge type set as ''{0}'' +ImportContainerException_Weight_Zero_Ignored=Edge weight is 0, the edge id=''{0}'' is ignored +ImportContainerException_ElementIdType_Parse_Error=The id type is configured to ''{0}'' but some elements id can't be parsed, defaulting to 'STRING' +ImportContainerException_Negative_Weight=Edge id=''{0}'' has a negative weight +ImportContainerException_Column_Type_Mismatch=A column ''{0}'' already exists but with a different type=''{1}'' +ImportContainerException_Timestamp_Parse_Error=The graph timestamp ''{0}'' could not be parsed +ImportContainerException_Interval_Parse_Error=The graph interval ''{0}'' could not be parsed +ElementFactoryException_NullNodeId=Node id can't be null +ElementFactoryException_NullEdgeId=Edge id can't be null +ElementDraftException_ColorParse=Color ''{0}'' can't be parsed for element id=''{1}'', color is ignored +ElementDraftException_LabelColorParse=Label color ''{0}'' can't be parsed for element id=''{1}'', color is ignored +ElementDraftException_NotTimestampRepresentation=The time representation should be set to TIMESTAMP, the timestamp for the element id=''{0}'' is ignored +ElementDraftException_NotIntervalRepresentation=The time representation should be set to INTERVAL, the interval for the element id=''{0}'' is ignored +ElementDraftException_IntervalSetError=A problem was encountered while adding the interval {0} to the element id=''{1}'' and the interval is ignored, error: {2} +ElementDraftException_SetValueError=A problem occurred while setting the value ''{0}'' to the element id=''{1}'', error: {2} +ElementDraftException_SetValueTimestampError=A problem occurred while setting the value ''{0}'' to the element id=''{1}'' at the timestamp {2}, error: {3} +ElementDraftException_SetValueIntervalError=A problem occurred while setting the value ''{0}'' to the element id=''{1}'' at the interval {2}, error: {3} diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_pt_BR.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_pt_BR.properties index df974ef7ce..46d70115c7 100644 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_pt_BR.properties +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_pt_BR.properties @@ -1,37 +1,46 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:28+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -ImportContainerLog.TimeInterval=Intervalo de tempo criado em {0} - -ImportContainerLog.TimeFormat=Formato da hora\: {0} - -ImportContainerException_nodeExist=Id de n\u00f3 duplicado\=''{0}'' - -ImportContainerException_UnknowNodeId=Id de n\u00f3 desconhecido - -ImportContainerException_MissingNodeSource=Falta o n\u00f3 origem, a aresta ser\u00e1 ignorada - -ImportContainerException_MissingNodeTarget=Falta o n\u00f3 destino, a aresta ser\u00e1 ignorada - -ImportContainerException_MissingNodeId=Falta o identificador do n\u00f3 - -ImportContainerException_edgeExist=A aresta j\u00e1 existe - -ImportContainerException_SelfLoop=Auto-loops n\u00e3o s\u00e3o permitidos - -ImportContainerException_Bad_Edge_Type=O tipo de aresta n\u00e3o se ajusta ao tipo padr\u00e3o - -ImportContainerException_Parallel_Edge=Arestas paralelas ainda n\u00e3o s\u00e3o suportadas. A aresta de id\=''{0}'' ser\u00e1 ignorada - -ImportContainerException_Set_EdgeDefault=Tipo padr\u00e3o de aresta definido como {0} - -ImportContainerException_Weight_Zero_Ignored=O peso da arista \u00e9 0 ou negativo. A aresta de id\="{0}" ser\u00e1 ignorada - -ImportContainerException_TimeInterval_ParseError=O intervalo de tempo ''{0}''n\u00e3o pode ser analisado. Use formata\u00e7\u00e3o de data ou decimal - -ImportContainerException_TimeInterval_Empty=Os par\u00e2metros de in\u00edcio e fim de Intervalo de Tempo est\u00e3o vazios +ImportContainerLog.TimeInterval = Intervalo de tempo criado em {0} +ImportContainerLog.TimeFormat = Formato da hora: {0} +ImportContainerLog.TimeRepresentation = Representaηγo da hora: {0} +ImportContainerLog.AddNodeColumn = Coluna dos nσs "{0}" ([1]) +ImportContainerLog.AddEdgeColumn = Coluna das arestas ''{0}'' ({1}) +ImportContainerLog.AddDynamicNodeColumn = Coluna dos nσs ''{0}'' (Dinβmica {1}) +ImportContainerLog.AddDynamicEdgeColumn = Coluna das arestas ''{0}'' (Dinβmica {1}) +# ImportContainerLog.EdgeLabelType = Edge labels are of type ''{0}'' +# ImportContainerLog.TimeZone = Time zone is set at ''{0}'' +# ImportContainerLog.MultiGraphCount = Multi-graph with {0} different types +# ImportContainerLog.GraphTimestamp = Graph timestamp set at ''{0}'' +# ImportContainerLog.GraphInterval = Graph interval set at ''{0}'' +# ImportContainerLog.ElementIdType = Element id type set at ''{0}'' + +ImportContainerException_nodeExist = Id de nσ duplicado=''{0}'' +# ImportContainerException_UnknowNodeId = Unknown Node id=''{0}'' +ImportContainerException_AutoNodeCreated = Alguns nσs foram criados baseados em arestas de origem e destino +ImportContainerException_MissingNodeSource = Falta o nσ origem, a aresta serα ignorada +ImportContainerException_MissingNodeTarget = Falta o nσ destino, a aresta serα ignorada +ImportContainerException_MissingNodeId = Falta o identificador do nσ +# ImportContainerException_edgeExist = Edge already exists id=''{0}'' +ImportContainerException_SelfLoop = Auto-loops nγo sγo permitidos +# ImportContainerException_Bad_Edge_Type = Edge type doesn't fit with default set ({0}), edge id=''{1}'' is ignored +# ImportContainerException_Parallel_Edge_Merged = Parallel edges detected, remember to choose a merge strategy +ImportContainerException_Parallel_Edge_Forbidden = Arestas paralelas nγo nγo sγo permitidas, aresta de id=''{0}'' serα ignorada +# ImportContainerException_Unsupported_Edge_type = Edge types can only have a primitive type value +# ImportContainerException_Unsupported_Edge_type_Conflict = Edge label type is of type {0} but should be {1}, the label is ignored +ImportContainerException_Set_EdgeDefault = Tipo padrγo de aresta definido como {0} +ImportContainerException_Weight_Zero_Ignored = O peso da arista ι 0 ou negativo. A aresta de id="{0}" serα ignorada +# ImportContainerException_ElementIdType_Parse_Error = The id type is configured to ''{0}'' but some elements id can't be parsed, defaulting to 'STRING' +ImportContainerException_Negative_Weight = Aresta de id=''{0}'' tem um peso negativo +# ImportContainerException_Column_Type_Mismatch = A column ''{0}'' already exists but with a different type=''{1}'' +# ImportContainerException_Timestamp_Parse_Error = The graph timestamp ''{0}'' could not be parsed +ImportContainerException_Interval_Parse_Error = O intervalo do grafo "{0}" nγo pτde ser analisado + +ElementFactoryException_NullNodeId = A identificaηγo dos nσs nγo pode ser nula +ElementFactoryException_NullEdgeId = A identificaηγo das arestas nγo pode ser nula + +# ElementDraftException_ColorParse = Color ''{0}'' can't be parsed for element id=''{1}'', color is ignored +# ElementDraftException_LabelColorParse = Label color ''{0}'' can't be parsed for element id=''{1}'', color is ignored +# ElementDraftException_NotTimestampRepresentation = The time representation should be set to TIMESTAMP, the timestamp for the element id=''{0}'' is ignored +# ElementDraftException_NotIntervalRepresentation = The time representation should be set to INTERVAL, the interval for the element id=''{0}'' is ignored +# ElementDraftException_IntervalSetError = A problem was encountered while adding the interval {0} to the element id=''{1}'' and the interval is ignored, error: {2} +# ElementDraftException_SetValueError = A problem occurred while setting the value ''{0}'' to the element id=''{1}'', error: {2} +# ElementDraftException_SetValueTimestampError = A problem occurred while setting the value ''{0}'' to the element id=''{1}'' at the timestamp {2}, error: {3} +# ElementDraftException_SetValueIntervalError = A problem occurred while setting the value ''{0}'' to the element id=''{1}'' at the interval {2}, error: {3} diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_ro.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_ro.properties new file mode 100644 index 0000000000..a5e99967b4 --- /dev/null +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_ro.properties @@ -0,0 +1,49 @@ + + +ImportContainerLog.TimeInterval=Interval de timp setat la {0} +ImportContainerLog.TimeFormat=Format de timp: {0} +ImportContainerLog.TimeRepresentation=Reprezentarea timpului: {0} +ImportContainerLog.AddNodeColumn=Coloan\u0103 noduri ''{0}'' ({1}) +ImportContainerLog.AddEdgeColumn=Coloan\u0103 muchii ''{0}'' ({1}) +ImportContainerLog.AddDynamicNodeColumn=Coloan\u0103 noduri ''{0}'' (Dinamic {1}) +ImportContainerLog.AddDynamicEdgeColumn=Coloan\u0103 muchii ''{0}'' (Dinamic {1}) +ImportContainerLog.EdgeLabelType=Etichetele muchiilor sunt de tipul ''{0}'' +ImportContainerLog.TimeZone=Fusul orar este setat la ''{0}'' +ImportContainerLog.MultiGraphCount=Multigraf cu {0} tipuri diferite +ImportContainerLog.GraphTimestamp=Marcajul temporal al grafului setat la ''{0}'' +ImportContainerLog.GraphInterval=Intervalul grafului setat la ''{0}'' +ImportContainerLog.ElementIdType=Tipul id-urilor de element setat la ''{0}'' +ImportContainerException_nodeExist=Id nod duplicat=''{0}'' +ImportContainerException_UnknowNodeId=Id nod necunoscut=''{0}'' +ImportContainerException_AutoNodeCreated=Unele noduri au fost create pe baza surselor \u0219i \u021Bintelor unor muchii +ImportContainerException_MissingNodeSource=Lipse\u0219te nodul surs\u0103, muchia va fi ignorat\u0103 +ImportContainerException_MissingNodeId=Lipse\u0219te identificatorul nodului +ImportContainerException_edgeExist=Muchia exist\u0103 deja id=''{0}'' +ImportContainerException_SelfLoop=Buclele nu sunt permise +ImportContainerException_Bad_Edge_Type=Tipul muchiei nu se potrive\u0219te cu setul implicit ({0}), muchia id=''{1}'' va fi ignorat\u0103 +ImportContainerException_Parallel_Edge_Merged=Au fost detectate muchii paralele, va trebui aleas\u0103 o strategie de \u00EEmbinare +ImportContainerException_Unsupported_Edge_type=Tipurile de muchie pot avea doar valori de tip primitiv +ImportContainerException_Unsupported_Edge_type_Conflict=Eticheta muchiei este de tipul {0} dar ar trebui s\u0103 fie {1}, eticheta va fi ignorat\u0103 +ImportContainerException_Set_EdgeDefault=Tipul implicit de muchie setat ca ''{0}'' +ImportContainerException_Weight_Zero_Ignored=Ponderea muchiei este 0, muchia id=''{0}'' va fi ignorat\u0103 +ImportContainerException_ElementIdType_Parse_Error=Tipul de id este configurat ca ''{0}'' dar unele id-uri de element nu pot fi parsate, se va folosi tipul implicit 'STRING' +ImportContainerException_Negative_Weight=Muchia id=''{0}'' are ponderea negativ\u0103 +ImportContainerException_Column_Type_Mismatch=Exist\u0103 deja o coloan\u0103 ''{0}'' dar are un alt tip=''{1}'' +ImportContainerException_Timestamp_Parse_Error=Marcajul temporal ''{0}'' al grafului nu a putut fi parsat +ImportContainerException_Node_Color_Alpha_AllZero=Opacitatea culorii tuturor nodurilor este setat\u0103 ca transparent\u0103 +ElementFactoryException_NullNodeId=Id-ul nodului nu poate fi nul +ElementFactoryException_NullEdgeId=Id-ul muchiei nu poate fi nul +ElementDraftException_ColorParse=Culoarea ''{0}'' nu poate fi parsata pentru elementul id=''{1}'', culoarea va fi ignorat\u0103 +ElementDraftException_NotTimestampRepresentation=Reprezentarea temporal\u0103 ar trebui setat\u0103 ca TIMESTAMP pentru elementul id=''{0}'', va fi ignorat\u0103 +ElementDraftException_NotIntervalRepresentation=Reprezentarea temporal\u0103 ar trebui setat\u0103 ca INTERVAL pentru elementul id=''{0}'', va fi ignorat\u0103 +ElementDraftException_IntervalSetError=A fost ξntβmpinat\u0103 o problem\u0103 la ad\u0103ugarea intervalului {0} la elementul id=''{1}'' \u0219i intervalul va fi ignorat, eroare: {2} +ElementDraftException_SetValueError=A ap\u0103rut o problem\u0103 la setarea valorii ''{0}'' pentru elementul id=''{1}'', eroare: {2} +ElementDraftException_SetValueTimestampError=A ap\u0103rut o problem\u0103 la setarea valorii ''{0}'' pentru elementul id=''{1}'' la marcajul temporal {2}, eroare: {3} +ElementDraftException_SetValueIntervalError=A ap\u0103rut o problem\u0103 la setarea valorii ''{0}'' pentru elementul id=''{1}'' ξn intervalul {2}, eroare: {3} +ImportContainerException_MissingNodeTarget=Lipse\u0219te nodul \u021Bint\u0103, muchia va fi ignorat\u0103 +ImportContainerException_Interval_Parse_Error=Intervalul ''{0}'' al grafului nu a putut fi parsat +ImportContainerException_Parallel_Edge_Forbidden=Muchiile paralele nu sunt permise, muchia id=''{0}'' va fi ignorat\u0103 +ElementDraftException_LabelColorParse=Culoarea ''{0}'' a etichetei nu poate fi parsata pentru elementul id=''{1}'', culoarea va fi ignorat\u0103 +ImportContainerException_Edge_Color_Alpha_AllZero=Opacitatea culorii tuturor muchiilor este setat\u0103 ca transparent\u0103 +ImportContainerClose_SelfLoopRemoved={0} bucle au fost eliminate +ImportContainerClose_MutualEdgesRemoved={0} muchii reciproce au fost eliminate pentru a indeplini tipul neorientat diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_ru.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_ru.properties index d7128841e1..25ead02d3c 100644 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_ru.properties +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_ru.properties @@ -1,37 +1,46 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:28+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -ImportContainerLog.TimeInterval=\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432 {0} - -ImportContainerLog.TimeFormat=\u0424\u043e\u0440\u043c\u0430\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438\: {0} - -ImportContainerException_nodeExist=\u0414\u0443\u0431\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u0439\u0441\u044f \u0443\u0437\u0435\u043b \u0441 id\="{0}" - -ImportContainerException_UnknowNodeId=\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0443\u0437\u043b\u0430 - -ImportContainerException_MissingNodeSource=\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0443\u0437\u0435\u043b-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a, \u0440\u0435\u0431\u0440\u043e \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e - -ImportContainerException_MissingNodeTarget=\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0443\u0437\u0435\u043b-\u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c, \u0440\u0435\u0431\u0440\u043e \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e - -ImportContainerException_MissingNodeId=\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0443\u0437\u043b\u0430 - -ImportContainerException_edgeExist=\u0420\u0435\u0431\u0440\u043e \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 - -ImportContainerException_SelfLoop=\u041f\u0435\u0442\u043b\u0438 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u044b - -ImportContainerException_Bad_Edge_Type=\u0422\u0438\u043f \u0440\u0435\u0431\u0440\u0430 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e - -ImportContainerException_Parallel_Edge=\u041f\u0430\u0440\u0430\u043b\u043b\u0435\u043b\u044c\u043d\u044b\u0435 \u0440\u0435\u0431\u0440\u0430 \u043f\u043e\u043a\u0430 \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f, \u0440\u0435\u0431\u0440\u043e \u0441 id\="{0}" \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e - -ImportContainerException_Set_EdgeDefault=\u0422\u0438\u043f \u0440\u0435\u0431\u0440\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043a\u0430\u043a {0} - -ImportContainerException_Weight_Zero_Ignored=\u0412\u0435\u0441 \u0440\u0435\u0431\u0440\u0430 \u043c\u0435\u043d\u044c\u0448\u0435 \u043b\u0438\u0431\u043e \u0440\u0430\u0432\u0435\u043d 0, \u0440\u0435\u0431\u0440\u043e \u0441 id\="{0}" \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e - -ImportContainerException_TimeInterval_ParseError=\u041d\u0435 \u0443\u0434\u0430\u0451\u0442\u0441\u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b "{0}". \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0432 \u0432\u0438\u0434\u0435 Date \u0438\u043b\u0438 Double - -ImportContainerException_TimeInterval_Empty=\u0418 \u043d\u0430\u0447\u0430\u043b\u043e, \u0438 \u043a\u043e\u043d\u0435\u0446 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0430 \u043f\u0443\u0441\u0442\u044b +ImportContainerLog.TimeInterval = \u0412\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0432 {0} +ImportContainerLog.TimeFormat = \u0424\u043e\u0440\u043c\u0430\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438: {0} +# ImportContainerLog.TimeRepresentation = Time Representation: {0} +# ImportContainerLog.AddNodeColumn = Node column ''{0}'' ({1}) +# ImportContainerLog.AddEdgeColumn = Edge column ''{0}'' ({1}) +# ImportContainerLog.AddDynamicNodeColumn = Node column ''{0}'' (Dynamic {1}) +# ImportContainerLog.AddDynamicEdgeColumn = Edge column ''{0}'' (Dynamic {1}) +# ImportContainerLog.EdgeLabelType = Edge labels are of type ''{0}'' +# ImportContainerLog.TimeZone = Time zone is set at ''{0}'' +# ImportContainerLog.MultiGraphCount = Multi-graph with {0} different types +# ImportContainerLog.GraphTimestamp = Graph timestamp set at ''{0}'' +# ImportContainerLog.GraphInterval = Graph interval set at ''{0}'' +# ImportContainerLog.ElementIdType = Element id type set at ''{0}'' + +ImportContainerException_nodeExist = \u0414\u0443\u0431\u043b\u0438\u0440\u0443\u044e\u0449\u0438\u0439\u0441\u044f \u0443\u0437\u0435\u043b \u0441 id="{0}" +# ImportContainerException_UnknowNodeId = Unknown Node id=''{0}'' +# ImportContainerException_AutoNodeCreated = Some nodes were created based on edges' source and target +ImportContainerException_MissingNodeSource = \u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0443\u0437\u0435\u043b-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a, \u0440\u0435\u0431\u0440\u043e \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e +ImportContainerException_MissingNodeTarget = \u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0443\u0437\u0435\u043b-\u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c, \u0440\u0435\u0431\u0440\u043e \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e +ImportContainerException_MissingNodeId = \u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440 \u0443\u0437\u043b\u0430 +# ImportContainerException_edgeExist = Edge already exists id=''{0}'' +ImportContainerException_SelfLoop = \u041f\u0435\u0442\u043b\u0438 \u0437\u0430\u043f\u0440\u0435\u0449\u0435\u043d\u044b +# ImportContainerException_Bad_Edge_Type = Edge type doesn't fit with default set ({0}), edge id=''{1}'' is ignored +# ImportContainerException_Parallel_Edge_Merged = Parallel edges detected, remember to choose a merge strategy +# ImportContainerException_Parallel_Edge_Forbidden = Parallel edges are not allowed, edge id=''{0}'' is ignored +# ImportContainerException_Unsupported_Edge_type = Edge types can only have a primitive type value +# ImportContainerException_Unsupported_Edge_type_Conflict = Edge label type is of type {0} but should be {1}, the label is ignored +ImportContainerException_Set_EdgeDefault = \u0422\u0438\u043f \u0440\u0435\u0431\u0440\u0430 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043a\u0430\u043a {0} +ImportContainerException_Weight_Zero_Ignored = \u0412\u0435\u0441 \u0440\u0435\u0431\u0440\u0430 \u043c\u0435\u043d\u044c\u0448\u0435 \u043b\u0438\u0431\u043e \u0440\u0430\u0432\u0435\u043d 0, \u0440\u0435\u0431\u0440\u043e \u0441 id="{0}" \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e +# ImportContainerException_ElementIdType_Parse_Error = The id type is configured to ''{0}'' but some elements id can't be parsed, defaulting to 'STRING' +# ImportContainerException_Negative_Weight = Edge id=''{0}'' has a negative weight +# ImportContainerException_Column_Type_Mismatch = A column ''{0}'' already exists but with a different type=''{1}'' +# ImportContainerException_Timestamp_Parse_Error = The graph timestamp ''{0}'' could not be parsed +# ImportContainerException_Interval_Parse_Error = The graph interval ''{0}'' could not be parsed + +# ElementFactoryException_NullNodeId = Node id can't be null +# ElementFactoryException_NullEdgeId = Edge id can't be null + +# ElementDraftException_ColorParse = Color ''{0}'' can't be parsed for element id=''{1}'', color is ignored +# ElementDraftException_LabelColorParse = Label color ''{0}'' can't be parsed for element id=''{1}'', color is ignored +# ElementDraftException_NotTimestampRepresentation = The time representation should be set to TIMESTAMP, the timestamp for the element id=''{0}'' is ignored +# ElementDraftException_NotIntervalRepresentation = The time representation should be set to INTERVAL, the interval for the element id=''{0}'' is ignored +# ElementDraftException_IntervalSetError = A problem was encountered while adding the interval {0} to the element id=''{1}'' and the interval is ignored, error: {2} +# ElementDraftException_SetValueError = A problem occurred while setting the value ''{0}'' to the element id=''{1}'', error: {2} +# ElementDraftException_SetValueTimestampError = A problem occurred while setting the value ''{0}'' to the element id=''{1}'' at the timestamp {2}, error: {3} +# ElementDraftException_SetValueIntervalError = A problem occurred while setting the value ''{0}'' to the element id=''{1}'' at the interval {2}, error: {3} diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_th.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_tr.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_tr.properties new file mode 100644 index 0000000000..fa1aabfe4d --- /dev/null +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_tr.properties @@ -0,0 +1,43 @@ +ImportContainerLog.TimeInterval=Time Interval set at {0} +ImportContainerLog.TimeFormat=Time Format: {0} +ImportContainerLog.TimeRepresentation=Time Representation: {0} +ImportContainerLog.AddNodeColumn=Node column ''{0}'' ({1}) +ImportContainerLog.AddEdgeColumn=Edge column ''{0}'' ({1}) +ImportContainerLog.AddDynamicNodeColumn=Node column ''{0}'' (Dynamic {1}) +ImportContainerLog.AddDynamicEdgeColumn=Edge column ''{0}'' (Dynamic {1}) +ImportContainerLog.EdgeLabelType=Edge labels are of type ''{0}'' +ImportContainerLog.TimeZone=Time zone is set at ''{0}'' +ImportContainerLog.MultiGraphCount=Multi-graph with {0} different types +ImportContainerLog.GraphTimestamp=Graph timestamp set at ''{0}'' +ImportContainerLog.GraphInterval=Graph interval set at ''{0}'' +ImportContainerLog.ElementIdType=Element id type set at ''{0}'' +ImportContainerException_nodeExist=Duplicated node id=''{0}'' +ImportContainerException_UnknowNodeId=Unknown Node id=''{0}'' +ImportContainerException_AutoNodeCreated=Some nodes were created based on edges' source and target +ImportContainerException_MissingNodeSource=Missing Node Source, edge is ignored +ImportContainerException_MissingNodeTarget=Missing Node Target, edge is ignored +ImportContainerException_MissingNodeId=Missing Node Identifier +ImportContainerException_edgeExist=Edge already exists id=''{0}'' +ImportContainerException_SelfLoop=Self loop are not allowed +ImportContainerException_Bad_Edge_Type=Edge type doesn't fit with default set ({0}), edge id=''{1}'' is ignored +ImportContainerException_Parallel_Edge_Merged=Parallel edges detected, remember to choose a merge strategy +ImportContainerException_Parallel_Edge_Forbidden=Parallel edges are not allowed, edge id=''{0}'' is ignored +ImportContainerException_Unsupported_Edge_type=Edge types can only have a primitive type value +ImportContainerException_Unsupported_Edge_type_Conflict=Edge label type is of type {0} but should be {1}, the label is ignored +ImportContainerException_Set_EdgeDefault=Default edge type set as ''{0}'' +ImportContainerException_Weight_Zero_Ignored=Edge weight is 0, the edge id=''{0}'' is ignored +ImportContainerException_ElementIdType_Parse_Error=The id type is configured to ''{0}'' but some elements id can't be parsed, defaulting to 'STRING' +ImportContainerException_Negative_Weight=Edge id=''{0}'' has a negative weight +ImportContainerException_Column_Type_Mismatch=A column ''{0}'' already exists but with a different type=''{1}'' +ImportContainerException_Timestamp_Parse_Error=The graph timestamp ''{0}'' could not be parsed +ImportContainerException_Interval_Parse_Error=The graph interval ''{0}'' could not be parsed +ElementFactoryException_NullNodeId=Node id can't be null +ElementFactoryException_NullEdgeId=Edge id can't be null +ElementDraftException_ColorParse=Color ''{0}'' can't be parsed for element id=''{1}'', color is ignored +ElementDraftException_LabelColorParse=Label color ''{0}'' can't be parsed for element id=''{1}'', color is ignored +ElementDraftException_NotTimestampRepresentation=The time representation should be set to TIMESTAMP, the timestamp for the element id=''{0}'' is ignored +ElementDraftException_NotIntervalRepresentation=The time representation should be set to INTERVAL, the interval for the element id=''{0}'' is ignored +ElementDraftException_IntervalSetError=A problem was encountered while adding the interval {0} to the element id=''{1}'' and the interval is ignored, error: {2} +ElementDraftException_SetValueError=A problem occurred while setting the value ''{0}'' to the element id=''{1}'', error: {2} +ElementDraftException_SetValueTimestampError=A problem occurred while setting the value ''{0}'' to the element id=''{1}'' at the timestamp {2}, error: {3} +ElementDraftException_SetValueIntervalError=A problem occurred while setting the value ''{0}'' to the element id=''{1}'' at the interval {2}, error: {3} diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_uk.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_uk.properties new file mode 100644 index 0000000000..fbe09a5b14 --- /dev/null +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_uk.properties @@ -0,0 +1,51 @@ +ElementDraftException_SetValueIntervalDuplicate=\u0417\u043D\u0430\u0447\u0435\u043D\u043D\u044F {0} \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u0430\u043B\u043E \u0456\u0441\u043D\u0443\u044E\u0447\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0434\u043B\u044F \u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430 id=''{1}'' \u0432 \u0456\u043D\u0442\u0435\u0440\u0432\u0430\u043B\u0456 {2} +ImportContainerLog.AddNodeColumn=\u0421\u0442\u043E\u0432\u043F\u0435\u0446\u044C \u0432\u0443\u0437\u043B\u0430 ''{0}'' ({1}) +ImportContainerException_AutoNodeCreated=\u0414\u0435\u044F\u043A\u0456 \u0432\u0443\u0437\u043B\u0438 \u0431\u0443\u043B\u0438 \u0441\u0442\u0432\u043E\u0440\u0435\u043D\u0456 \u043D\u0430 \u043E\u0441\u043D\u043E\u0432\u0456 \u0434\u0436\u0435\u0440\u0435\u043B\u0430 \u0442\u0430 \u0446\u0456\u043B\u0456 \u0440\u0435\u0431\u0435\u0440 +ImportContainerException_Unsupported_Edge_type=\u0422\u0438\u043F\u0438 \u0440\u0435\u0431\u0435\u0440 \u043C\u043E\u0436\u0443\u0442\u044C \u043C\u0430\u0442\u0438 \u043B\u0438\u0448\u0435 \u043F\u0440\u0438\u043C\u0456\u0442\u0438\u0432\u043D\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0442\u0438\u043F\u0443 +ImportContainerException_ElementIdType_Parse_Error=\u0422\u0438\u043F \u0456\u0434\u0435\u043D\u0442\u0438\u0444\u0456\u043A\u0430\u0442\u043E\u0440\u0430 \u043D\u0430\u043B\u0430\u0448\u0442\u043E\u0432\u0430\u043D\u043E \u043D\u0430 ''{0}'', \u0430\u043B\u0435 \u0456\u0434\u0435\u043D\u0442\u0438\u0444\u0456\u043A\u0430\u0442\u043E\u0440 \u0434\u0435\u044F\u043A\u0438\u0445 \u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0456\u0432 \u043D\u0435\u043C\u043E\u0436\u043B\u0438\u0432\u043E \u043F\u0440\u043E\u0430\u043D\u0430\u043B\u0456\u0437\u0443\u0432\u0430\u0442\u0438, \u0437\u0430 \u0443\u043C\u043E\u0432\u0447\u0430\u043D\u043D\u044F\u043C \u0432\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F 'STRING' +ImportContainerException_edgeExist=Edge \u0432\u0436\u0435 \u0456\u0441\u043D\u0443\u0454 id=''{0}'' +ImportContainerLog.TimeFormat=\u0424\u043E\u0440\u043C\u0430\u0442 \u0447\u0430\u0441\u0443: {0} +ElementDraftException_NotTimestampRepresentation=\u041F\u043E\u0434\u0430\u043D\u043D\u044F \u0447\u0430\u0441\u0443 \u043C\u0430\u0454 \u0431\u0443\u0442\u0438 \u0432\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E \u043D\u0430 TIMESTAMP, \u043C\u0456\u0442\u043A\u0430 \u0447\u0430\u0441\u0443 \u0434\u043B\u044F \u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430 id=''{0}'' \u0456\u0433\u043D\u043E\u0440\u0443\u0454\u0442\u044C\u0441\u044F +ImportContainerException_Bad_Edge_Type=\u0422\u0438\u043F \u043A\u0440\u0430\u044E \u043D\u0435 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0430\u0454 \u043D\u0430\u0431\u043E\u0440\u0443 \u0437\u0430 \u0437\u0430\u043C\u043E\u0432\u0447\u0443\u0432\u0430\u043D\u043D\u044F\u043C ({0}), \u0456\u0434\u0435\u043D\u0442\u0438\u0444\u0456\u043A\u0430\u0442\u043E\u0440 \u043A\u0440\u0430\u044E =''{1}'' \u0456\u0433\u043D\u043E\u0440\u0443\u0454\u0442\u044C\u0441\u044F +ImportContainerException_Parallel_Edge_Merged=\u0412\u0438\u044F\u0432\u043B\u0435\u043D\u043E \u043F\u0430\u0440\u0430\u043B\u0435\u043B\u044C\u043D\u0456 \u0440\u0435\u0431\u0440\u0430, \u043D\u0435 \u0437\u0430\u0431\u0443\u0434\u044C\u0442\u0435 \u0432\u0438\u0431\u0440\u0430\u0442\u0438 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0456\u044E \u0437\u043B\u0438\u0442\u0442\u044F +ImportContainerException_Timestamp_Parse_Error=\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u043F\u0440\u043E\u0430\u043D\u0430\u043B\u0456\u0437\u0443\u0432\u0430\u0442\u0438 \u043F\u043E\u0437\u043D\u0430\u0447\u043A\u0443 \u0447\u0430\u0441\u0443 \u0433\u0440\u0430\u0444\u0456\u043A\u0430 ''{0}'' +ElementDraftException_NotIntervalRepresentation=\u041F\u043E\u0434\u0430\u043D\u043D\u044F \u0447\u0430\u0441\u0443 \u043C\u0430\u0454 \u0431\u0443\u0442\u0438 \u0432\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E \u043D\u0430 INTERVAL, \u0456\u043D\u0442\u0435\u0440\u0432\u0430\u043B \u0434\u043B\u044F \u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430 id=''{0}'' \u0456\u0433\u043D\u043E\u0440\u0443\u0454\u0442\u044C\u0441\u044F +ImportContainerException_Negative_Weight=Edge id=''{0}'' \u043C\u0430\u0454 \u0432\u0456\u0434\u2019\u0454\u043C\u043D\u0443 \u0432\u0430\u0433\u0443 +ElementDraftException_LabelColorParse=\u041A\u043E\u043B\u0456\u0440 \u043C\u0456\u0442\u043A\u0438 ''{0}'' \u043D\u0435\u043C\u043E\u0436\u043B\u0438\u0432\u043E \u043F\u0440\u043E\u0430\u043D\u0430\u043B\u0456\u0437\u0443\u0432\u0430\u0442\u0438 \u0434\u043B\u044F \u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430 id=''{1}'', \u043A\u043E\u043B\u0456\u0440 \u0456\u0433\u043D\u043E\u0440\u0443\u0454\u0442\u044C\u0441\u044F +ImportContainerException_nodeExist=\u0414\u0443\u0431\u043B\u044C\u043E\u0432\u0430\u043D\u0438\u0439 \u0456\u0434\u0435\u043D\u0442\u0438\u0444\u0456\u043A\u0430\u0442\u043E\u0440 \u0432\u0443\u0437\u043B\u0430=''{0}'' +ImportContainerLog.TimeInterval=\u0427\u0430\u0441\u043E\u0432\u0438\u0439 \u0456\u043D\u0442\u0435\u0440\u0432\u0430\u043B \u0432\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E \u043D\u0430 {0} +ImportContainerLog.AddEdgeColumn=\u0413\u0440\u0430\u043D\u0438\u0447\u043D\u0438\u0439 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C ''{0}'' ({1}) +ImportContainerLog.AddDynamicNodeColumn=\u0421\u0442\u043E\u0432\u043F\u0435\u0446\u044C \u0432\u0443\u0437\u043B\u0430 ''{0}'' (\u0414\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0438\u0439 {1}) +ImportContainerLog.AddDynamicEdgeColumn=\u0413\u0440\u0430\u043D\u0438\u0447\u043D\u0438\u0439 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C ''{0}'' (\u0414\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0438\u0439 {1}) +ImportContainerLog.EdgeLabelType=\u041C\u0456\u0442\u043A\u0438 \u043A\u0440\u0430\u0457\u0432 \u043C\u0430\u044E\u0442\u044C \u0442\u0438\u043F ''{0}'' +ImportContainerLog.TimeZone=\u0427\u0430\u0441\u043E\u0432\u0438\u0439 \u043F\u043E\u044F\u0441 \u0432\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E \u043D\u0430 ''{0}'' +ImportContainerLog.MultiGraphCount=\u041C\u0443\u043B\u044C\u0442\u0438\u0433\u0440\u0430\u0444 \u0456\u0437 {0} \u0440\u0456\u0437\u043D\u0438\u043C\u0438 \u0442\u0438\u043F\u0430\u043C\u0438 +ImportContainerLog.GraphTimestamp=\u041F\u043E\u0437\u043D\u0430\u0447\u043A\u0443 \u0447\u0430\u0441\u0443 \u043D\u0430 \u0433\u0440\u0430\u0444\u0456\u043A\u0443 \u0432\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E \u043D\u0430 ''{0}'' +ImportContainerLog.GraphInterval=\u0406\u043D\u0442\u0435\u0440\u0432\u0430\u043B \u0433\u0440\u0430\u0444\u0456\u043A\u0430 \u0432\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E \u043D\u0430 ''{0}'' +ImportContainerException_UnknowNodeId=\u041D\u0435\u0432\u0456\u0434\u043E\u043C\u0438\u0439 \u0456\u0434\u0435\u043D\u0442\u0438\u0444\u0456\u043A\u0430\u0442\u043E\u0440 \u0432\u0443\u0437\u043B\u0430=''{0}'' +ImportContainerException_MissingNodeSource=\u0412\u0456\u0434\u0441\u0443\u0442\u043D\u0454 \u0434\u0436\u0435\u0440\u0435\u043B\u043E \u0432\u0443\u0437\u043B\u0430, \u043A\u0440\u0430\u0439 \u0456\u0433\u043D\u043E\u0440\u0443\u0454\u0442\u044C\u0441\u044F +ImportContainerException_MissingNodeTarget=\u0412\u0456\u0434\u0441\u0443\u0442\u043D\u0456\u0439 \u0446\u0456\u043B\u044C\u043E\u0432\u0438\u0439 \u0432\u0443\u0437\u043E\u043B, \u043A\u0440\u0430\u0439 \u0456\u0433\u043D\u043E\u0440\u0443\u0454\u0442\u044C\u0441\u044F +ImportContainerException_MissingNodeId=\u0412\u0456\u0434\u0441\u0443\u0442\u043D\u0456\u0439 \u0456\u0434\u0435\u043D\u0442\u0438\u0444\u0456\u043A\u0430\u0442\u043E\u0440 \u0432\u0443\u0437\u043B\u0430 +ImportContainerException_SelfLoop=\u0421\u0430\u043C\u043E\u0446\u0438\u043A\u043B\u0438 \u043D\u0435 \u0434\u043E\u043F\u0443\u0441\u043A\u0430\u044E\u0442\u044C\u0441\u044F +ImportContainerException_Unsupported_Edge_type_Conflict=\u0422\u0438\u043F \u043C\u0456\u0442\u043A\u0438 \u043A\u0440\u0430\u044E \u043C\u0430\u0454 \u0442\u0438\u043F {0}, \u0430\u043B\u0435 \u043C\u0430\u0454 \u0431\u0443\u0442\u0438 {1}, \u043C\u0456\u0442\u043A\u0430 \u0456\u0433\u043D\u043E\u0440\u0443\u0454\u0442\u044C\u0441\u044F +ImportContainerException_Set_EdgeDefault=\u0422\u0438\u043F \u043A\u0440\u0430\u044E \u0437\u0430 \u0437\u0430\u043C\u043E\u0432\u0447\u0443\u0432\u0430\u043D\u043D\u044F\u043C \u0432\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E \u044F\u043A ''{0}'' +ImportContainerException_Weight_Zero_Ignored=\u0412\u0430\u0433\u0430 \u043A\u0440\u0430\u044E \u0434\u043E\u0440\u0456\u0432\u043D\u044E\u0454 0, \u0456\u0434\u0435\u043D\u0442\u0438\u0444\u0456\u043A\u0430\u0442\u043E\u0440 \u043A\u0440\u0430\u044E =''{0}'' \u0456\u0433\u043D\u043E\u0440\u0443\u0454\u0442\u044C\u0441\u044F +ImportContainerException_Interval_Parse_Error=\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u043F\u0440\u043E\u0430\u043D\u0430\u043B\u0456\u0437\u0443\u0432\u0430\u0442\u0438 \u0456\u043D\u0442\u0435\u0440\u0432\u0430\u043B \u0433\u0440\u0430\u0444\u0456\u043A\u0430 ''{0}'' +ImportContainerException_Node_Color_Alpha_AllZero=\u041D\u0435\u043F\u0440\u043E\u0437\u043E\u0440\u0456\u0441\u0442\u044C \u043A\u043E\u043B\u044C\u043E\u0440\u0456\u0432 \u0443\u0441\u0456\u0445 \u0432\u0443\u0437\u043B\u0456\u0432 \u0432\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u0430 \u044F\u043A \u043F\u0440\u043E\u0437\u043E\u0440\u0430 +ElementFactoryException_NullNodeId=\u0406\u0434\u0435\u043D\u0442\u0438\u0444\u0456\u043A\u0430\u0442\u043E\u0440 \u0432\u0443\u0437\u043B\u0430 \u043D\u0435 \u043C\u043E\u0436\u0435 \u0431\u0443\u0442\u0438 \u043D\u0443\u043B\u044C\u043E\u0432\u0438\u043C +ElementDraftException_ColorParse=\u041A\u043E\u043B\u0456\u0440 ''{0}'' \u043D\u0435\u043C\u043E\u0436\u043B\u0438\u0432\u043E \u043F\u0440\u043E\u0430\u043D\u0430\u043B\u0456\u0437\u0443\u0432\u0430\u0442\u0438 \u0434\u043B\u044F \u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430 id=''{1}'', \u043A\u043E\u043B\u0456\u0440 \u0456\u0433\u043D\u043E\u0440\u0443\u0454\u0442\u044C\u0441\u044F +ElementDraftException_SetValueError=\u0412\u0438\u043D\u0438\u043A\u043B\u0430 \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0430 \u043F\u0456\u0434 \u0447\u0430\u0441 \u0432\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u044F \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F ''{0}'' \u0434\u043B\u044F \u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430 id=''{1}'', \u043F\u043E\u043C\u0438\u043B\u043A\u0430: {2} +ElementDraftException_SetValueTimestampError=\u0412\u0438\u043D\u0438\u043A\u043B\u0430 \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0430 \u043F\u0456\u0434 \u0447\u0430\u0441 \u0432\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u044F \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F ''{0}'' \u0434\u043B\u044F \u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430 id=''{1}'' \u0443 \u043C\u0456\u0442\u0446\u0456 \u0447\u0430\u0441\u0443 {2}, \u043F\u043E\u043C\u0438\u043B\u043A\u0430: {3} +ElementDraftException_SetValueIntervalError=\u0412\u0438\u043D\u0438\u043A\u043B\u0430 \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0430 \u043F\u0456\u0434 \u0447\u0430\u0441 \u0432\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u044F \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F ''{0}'' \u0434\u043B\u044F \u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430 id=''{1}'' \u0432 \u0456\u043D\u0442\u0435\u0440\u0432\u0430\u043B\u0456 {2}, \u043F\u043E\u043C\u0438\u043B\u043A\u0430: {3} +ElementDraftException_SetValueTimestampDuplicate=\u0417\u043D\u0430\u0447\u0435\u043D\u043D\u044F {0} \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0438\u0441\u0430\u043B\u043E \u0456\u0441\u043D\u0443\u044E\u0447\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0434\u043B\u044F \u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430 id=''{1}'' \u0443 \u043C\u0456\u0442\u0446\u0456 \u0447\u0430\u0441\u0443 {2} +ImportContainerClose_SelfLoopRemoved={0} \u0441\u0430\u043C\u043E\u0446\u0438\u043A\u043B\u0456\u0432 \u0431\u0443\u043B\u043E \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043E +ImportContainerClose_MutualEdgesRemoved={0} \u0441\u043F\u0456\u043B\u044C\u043D\u0438\u0445 \u043A\u0440\u0430\u0457\u0432 \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043E \u0434\u043B\u044F \u0432\u0438\u043A\u043E\u043D\u0430\u043D\u043D\u044F \u043D\u0435\u043D\u0430\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u043E\u0433\u043E \u0442\u0438\u043F\u0443 +ImportContainerWarning_Edge_Id_Special_Character=Edge id=''{0}'' \u043C\u0456\u0441\u0442\u0438\u0442\u044C \u0441\u043F\u0435\u0446\u0456\u0430\u043B\u044C\u043D\u0456 \u0441\u0438\u043C\u0432\u043E\u043B\u0438, \u043D\u0430\u043F\u0440\u0438\u043A\u043B\u0430\u0434 \u0441\u0438\u043C\u0432\u043E\u043B\u0438 \u043D\u043E\u0432\u043E\u0433\u043E \u0440\u044F\u0434\u043A\u0430 \u0430\u0431\u043E \u043F\u0440\u043E\u0431\u0456\u043B\u0438 \u0432 \u043A\u0456\u043D\u0446\u0456 +ImportContainerWarning_Node_Id_Special_Character=\u0406\u0434\u0435\u043D\u0442\u0438\u0444\u0456\u043A\u0430\u0442\u043E\u0440 \u0432\u0443\u0437\u043B\u0430=''{0}'' \u043C\u0456\u0441\u0442\u0438\u0442\u044C \u0441\u043F\u0435\u0446\u0456\u0430\u043B\u044C\u043D\u0456 \u0441\u0438\u043C\u0432\u043E\u043B\u0438, \u043D\u0430\u043F\u0440\u0438\u043A\u043B\u0430\u0434 \u0441\u0438\u043C\u0432\u043E\u043B\u0438 \u043D\u043E\u0432\u043E\u0433\u043E \u0440\u044F\u0434\u043A\u0430 \u0430\u0431\u043E \u043F\u0440\u043E\u0431\u0456\u043B\u0438 \u0432 \u043A\u0456\u043D\u0446\u0456 +ImportContainerLog.ElementIdType=\u0422\u0438\u043F \u0456\u0434\u0435\u043D\u0442\u0438\u0444\u0456\u043A\u0430\u0442\u043E\u0440\u0430 \u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430 \u0432\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u043E \u043D\u0430 ''{0}'' +ImportContainerException_Edge_Color_Alpha_AllZero=\u041D\u0435\u043F\u0440\u043E\u0437\u043E\u0440\u0456\u0441\u0442\u044C \u043A\u043E\u043B\u044C\u043E\u0440\u0456\u0432 \u0443\u0441\u0456\u0445 \u043A\u0440\u0430\u0457\u0432 \u0432\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D\u0430 \u044F\u043A \u043F\u0440\u043E\u0437\u043E\u0440\u0430 +ImportContainerLog.TimeRepresentation=\u0412\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F \u0447\u0430\u0441\u0443: {0} +ElementDraftException_IntervalSetError=\u041F\u0456\u0434 \u0447\u0430\u0441 \u0434\u043E\u0434\u0430\u0432\u0430\u043D\u043D\u044F \u0456\u043D\u0442\u0435\u0440\u0432\u0430\u043B\u0443 {0} \u0434\u043E \u0435\u043B\u0435\u043C\u0435\u043D\u0442\u0430 id=''{1}'' \u0432\u0438\u043D\u0438\u043A\u043B\u0430 \u043F\u0440\u043E\u0431\u043B\u0435\u043C\u0430, \u0456 \u0456\u043D\u0442\u0435\u0440\u0432\u0430\u043B \u0456\u0433\u043D\u043E\u0440\u0443\u0454\u0442\u044C\u0441\u044F, \u043F\u043E\u043C\u0438\u043B\u043A\u0430: {2} +ImportContainerException_Parallel_Edge_Forbidden=\u041F\u0430\u0440\u0430\u043B\u0435\u043B\u044C\u043D\u0456 \u043A\u0440\u0430\u0457 \u0437\u0430\u0431\u043E\u0440\u043E\u043D\u0435\u043D\u0456, edge id=''{0}'' \u0456\u0433\u043D\u043E\u0440\u0443\u0454\u0442\u044C\u0441\u044F +ImportContainerException_Column_Type_Mismatch=\u0421\u0442\u043E\u0432\u043F\u0435\u0446\u044C ''{0}'' \u0432\u0436\u0435 \u0456\u0441\u043D\u0443\u0454, \u0430\u043B\u0435 \u043C\u0430\u0454 \u0456\u043D\u0448\u0438\u0439 \u0442\u0438\u043F=''{1}'' +ElementFactoryException_NullEdgeId=\u0406\u0434\u0435\u043D\u0442\u0438\u0444\u0456\u043A\u0430\u0442\u043E\u0440 \u043A\u0440\u0430\u044E \u043D\u0435 \u043C\u043E\u0436\u0435 \u0431\u0443\u0442\u0438 \u043D\u0443\u043B\u044C\u043E\u0432\u0438\u043C diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_zh_CN.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_zh_CN.properties index 78d39474aa..99fbfc1019 100644 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_zh_CN.properties +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_zh_CN.properties @@ -1,36 +1,65 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:28+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - ImportContainerLog.TimeInterval=\u65f6\u95f4\u95f4\u9694\u8bbe\u7f6e\u4e3a{0} - ImportContainerLog.TimeFormat=\u65f6\u95f4\u683c\u5f0f\uff1a{0} - -ImportContainerException_nodeExist=\u91cd\u590d\u7684\u8282\u70b9ID \=\u201c{0} '' - -ImportContainerException_UnknowNodeId=\u672a\u77e5\u8282\u70b9ID - -ImportContainerException_MissingNodeSource=\u7f3a\u5c11\u6e90\u8282\u70b9\uff0c\u88ab\u5ffd\u7565\u7684\u8fb9 - -ImportContainerException_MissingNodeTarget=\u7f3a\u5c11\u76ee\u6807\u8282\u70b9\uff0c\u88ab\u5ffd\u7565\u7684\u8fb9 - +ImportContainerLog.TimeRepresentation=\u65f6\u95f4\u8868\u793a: {0} +ImportContainerLog.AddNodeColumn=\u8282\u70b9\u5217 ''{0}'' ({1}) +ImportContainerLog.AddEdgeColumn=\u8fb9\u7684\u5217 ''{0}'' ({1}) +ImportContainerLog.AddDynamicNodeColumn=\u8282\u70b9\u5217 ''{0}'' (\u52a8\u6001 {1}) +ImportContainerLog.AddDynamicEdgeColumn=\u8fb9\u7684\u7c7b ''{0}'' (\u52a8\u6001 {1}) +ImportContainerLog.EdgeLabelType=\u8fb9\u6807\u7b7e\u7c7b\u578b ''{0}'' +ImportContainerLog.TimeZone=\u65f6\u533a\u8bbe\u7f6e\u5728 ''{0}'' +ImportContainerLog.MultiGraphCount=Multi-graph with {0} \u4e0d\u540c\u7c7b\u578b +ImportContainerLog.GraphTimestamp=\u56fe\u65f6\u95f4\u6233\u8bbe\u7f6e ''{0}'' +ImportContainerLog.GraphInterval=\u56fe\u95f4\u9694\u8bbe\u7f6e\u4e3a ''{0}'' +ImportContainerLog.ElementIdType=\u5143\u7d20\u7684ID\u7c7b\u578b\u8bbe\u7f6e\u4e3a''{0}'' +ImportContainerException_nodeExist=\u91cd\u590d\u7684\u8282\u70b9ID =\u201c{0} '' +# ImportContainerException_UnknowNodeId = Unknown Node id=''{0}'' +ImportContainerException_AutoNodeCreated=\u4e00\u4e9b\u8282\u70b9\u521b\u5efa\u57fa\u4e8e\u8fb9\u7f18\u7684\u201c\u6e90\u548c\u76ee\u6807 +ImportContainerException_MissingNodeSource=\u7F3A\u5C11\u6E90\u8282\u70B9\uFF0C\u5BF9\u5E94\u7684\u8FB9\u5C06\u88AB\u5FFD\u7565 +ImportContainerException_MissingNodeTarget=\u7F3A\u5C11\u76EE\u6807\u8282\u70B9\uFF0C\u5BF9\u5E94\u7684\u8FB9\u5C06\u88AB\u5FFD\u7565 ImportContainerException_MissingNodeId=\u7f3a\u5c11\u8282\u70b9\u6807\u8bc6\u7b26 - -ImportContainerException_edgeExist=\u8fb9\u5df2\u7ecf\u5b58\u5728 - -ImportContainerException_SelfLoop=\u81ea\u6211\u5faa\u73af\u662f\u4e0d\u5141\u8bb8\u7684 - -ImportContainerException_Bad_Edge_Type=\u8fb9\u7c7b\u578b\u4e0e\u9ed8\u8ba4\u7684\u4e0d\u7b26\u5408 - -ImportContainerException_Parallel_Edge=\u5e73\u884c\u8fb9\u5c1a\u4e0d\u652f\u6301\uff0c\u8fb9\u7f18ID \=\u201c{0}\u201d\u88ab\u5ffd\u7565 - +# ImportContainerException_edgeExist = Edge already exists id=''{0}'' +ImportContainerException_SelfLoop=\u81EA\u5FAA\u73AF\u4E0D\u88AB\u5141\u8BB8 +# ImportContainerException_Bad_Edge_Type = Edge type doesn't fit with default set ({0}), edge id=''{1}'' is ignored +# ImportContainerException_Parallel_Edge_Merged = Parallel edges detected, remember to choose a merge strategy +# ImportContainerException_Parallel_Edge_Forbidden = Parallel edges are not allowed, edge id=''{0}'' is ignored +ImportContainerException_Unsupported_Edge_type=\u8fb9\u7c7b\u578b\u53ea\u80fd\u6709\u4e00\u4e2a\u57fa\u672c\u7c7b\u578b\u503c +# ImportContainerException_Unsupported_Edge_type_Conflict = Edge label type is of type {0} but should be {1}, the label is ignored ImportContainerException_Set_EdgeDefault=\u9ed8\u8ba4\u8fb9\u7c7b\u578b\u8bbe\u7f6e\u4e3a{0} +ImportContainerException_Weight_Zero_Ignored=\u8fb9\u7684\u6743\u91cd\u662f0\u6216\u8d1f\u6570\uff0c\u8fb9ID =\u201c{0}\u201d\u88ab\u5ffd\u7565 +# ImportContainerException_ElementIdType_Parse_Error = The id type is configured to ''{0}'' but some elements id can't be parsed, defaulting to 'STRING' +ImportContainerException_Negative_Weight=id=''{0}''\u7684\u8FB9\u7684\u6743\u91CD\u4E3A\u8D1F +# ImportContainerException_Column_Type_Mismatch = A column ''{0}'' already exists but with a different type=''{1}'' +ImportContainerException_Timestamp_Parse_Error=\u8be5\u56fe\u65f6\u95f4\u6233 ''{0}'' \u65e0\u6cd5\u89e3\u6790 +ImportContainerException_Interval_Parse_Error=\u8be5\u56fe\u533a\u95f4 ''{0}'' \u65e0\u6cd5\u89e3\u6790 +ElementFactoryException_NullNodeId=\u8282\u70b9 id \u4e0d\u80fd\u4e3a\u7a7a +ElementFactoryException_NullEdgeId=\u8fb9 id \u4e0d\u80fd\u4e3a\u7a7a +ElementDraftException_ColorParse=\u989C\u8272''{0}'\u4E0D\u80FD\u88AB\u89E3\u6790\u4E3A\u5143\u7D20\u7684id=''{1}''\uFF0C\u989C\u8272\u4F1A\u88AB\u5FFD\u7565 +ElementDraftException_LabelColorParse=\u6807\u7B7E\u989C\u8272''{0}'\u4E0D\u80FD\u88AB\u89E3\u6790\u4E3A\u5143\u7D20\u7684id=''{1}''\uFF0C\u989C\u8272\u4F1A\u88AB\u5FFD\u7565 +ElementDraftException_NotTimestampRepresentation=\u5C06\u65F6\u95F4\u8868\u793A\u5E94\u8BBE\u5B9A\u4E3A\u65F6\u95F4\u6233\uFF0C\u4E3A\u6240\u8FF0\u5143\u7D20\u7684id\u65F6\u95F4\u6233=''{0}\u201C'\u88AB\u5FFD\u7565 +# ElementDraftException_NotIntervalRepresentation = The time representation should be set to INTERVAL, the interval for the element id=''{0}'' is ignored +# ElementDraftException_IntervalSetError = A problem was encountered while adding the interval {0} to the element id=''{1}'' and the interval is ignored, error: {2} +# ElementDraftException_SetValueError = A problem occurred while setting the value ''{0}'' to the element id=''{1}'', error: {2} +# ElementDraftException_SetValueTimestampError = A problem occurred while setting the value ''{0}'' to the element id=''{1}'' at the timestamp {2}, error: {3} +ElementDraftException_SetValueIntervalError=\u5728\u8BBE\u7F6E\u503C\u65F6\u53D1\u751F\u4E86\u95EE\u9898\u201D{0}'\u7684\u5143\u7D20\u7684id=''{1}''\u5728\u95F4\u9694{2}\u9519\u8BEF\uFF1A{3} +ImportContainerException_UnknowNodeId=\u672A\u77E5\u8282\u70B9id=\u201C{0}\u201D +ImportContainerException_edgeExist=\u8FB9\u5DF2\u7ECF\u5B58\u5728id=\u201C{0}\u201D +ImportContainerException_Unsupported_Edge_type_Conflict=\u8FB9\u6807\u7B7E\u7C7B\u578B\u4E3A {0} \u7C7B\u578B\uFF0C\u4F46\u5E94\u662F{1}\uFF0C\u5FFD\u7565\u8FD9\u4E2A\u6807\u7B7E +ImportContainerException_ElementIdType_Parse_Error=id \u7C7B\u578B\u914D\u7F6E\u4E3A "{0}"\uFF0C\u4F46\u67D0\u4E9B\u5143\u7D20 id \u65E0\u6CD5\u89E3\u6790\uFF0C\u9ED8\u8BA4\u4E3A 'STRING' +ImportContainerException_Column_Type_Mismatch=\u5217 ''{0}'' \u5DF2\u5B58\u5728\uFF0C\u4F46\u7C7B\u578B\u4E0D\u540C \u7C7B\u578B=''{1}'' +ImportContainerWarning_Edge_Id_Special_Character=\u8FB9 id=''{0}'' \u5177\u6709\u7279\u6B8A\u5B57\u7B26\uFF0C\u4F8B\u5982\u6362\u884C\u7B26\u6216\u5C3E\u968F\u7A7A\u683C +ImportContainerWarning_Node_Id_Special_Character=\u8282\u70B9 id=''{0}'' \u5177\u6709\u7279\u6B8A\u5B57\u7B26\uFF0C\u4F8B\u5982\u6362\u884C\u7B26\u6216\u5C3E\u968F\u7A7A\u683C +ElementDraftException_SetValueIntervalDuplicate=\u503C {0} \u5728\u95F4\u9694 {2} \u8986\u76D6\u4E86\u5143\u7D20 id=''{1}'' \u7684\u73B0\u6709\u503C +ElementDraftException_SetValueTimestampDuplicate=\u503C {0} \u5728\u65F6\u95F4\u6233{2}\u5904\u8986\u76D6\u4E86\u5143\u7D20 id=''{1}'' \u7684\u73B0\u6709\u503C +ImportContainerClose_MutualEdgesRemoved=\u79FB\u9664{0}\u76F8\u4E92\u8FB9\u4EE5\u5B9E\u73B0\u65E0\u5411\u7C7B\u578B +ImportContainerException_Parallel_Edge_Merged=\u68C0\u6D4B\u5230\u5E73\u884C\u8FB9\uFF0C\u8BB0\u5F97\u9009\u62E9\u5408\u5E76\u7B56\u7565 +ImportContainerException_Edge_Color_Alpha_AllZero=\u6240\u6709\u8FB9\u7684\u989C\u8272\u4E0D\u900F\u660E\u5EA6\u90FD\u8BBE\u7F6E\u4E3A\u900F\u660E +ImportContainerException_Parallel_Edge_Forbidden=\u4E0D\u5141\u8BB8\u4F7F\u7528\u5E73\u884C\u8FB9\uFF0C\u5FFD\u7565\u8FB9 id=''{0}'' +ElementDraftException_SetValueError=\u5C06\u503C\u201C{0}\u201D\u8BBE\u7F6E\u4E3A\u5143\u7D20 id=''{1}''\u65F6\u51FA\u73B0\u95EE\u9898\uFF0C\u9519\u8BEF\uFF1A{2} -ImportContainerException_Weight_Zero_Ignored=\u8fb9\u7684\u6743\u91cd\u662f0\u6216\u8d1f\u6570\uff0c\u8fb9ID \=\u201c{0}\u201d\u88ab\u5ffd\u7565 - -ImportContainerException_TimeInterval_ParseError=\u65f6\u95f4\u95f4\u9694\u201c{0}\u201d\u4e0d\u80fd\u88ab\u89e3\u6790\u3002\u4f7f\u7528\u65e5\u671f\u6216\u53cc\u683c\u5f0f -ImportContainerException_TimeInterval_Empty=\u65f6\u95f4\u95f4\u9694\u7684\u5f00\u59cb\u548c\u7ed3\u675f\u53c2\u6570\u90fd\u4e3a\u7a7a +ImportContainerClose_SelfLoopRemoved=\u5220\u9664\u4E86{0}\u81EA\u5FAA\u73AF +ImportContainerException_Bad_Edge_Type=\u8FB9\u7C7B\u578B\u4E0D\u7B26\u5408\u9ED8\u8BA4\u8BBE\u7F6E \uFF08{0}\uFF09\uFF0C\u5FFD\u7565\u8FB9 id=''{1}'' +ImportContainerException_Node_Color_Alpha_AllZero=\u6240\u6709\u8282\u70B9\u7684\u989C\u8272\u4E0D\u900F\u660E\u5EA6\u90FD\u8BBE\u7F6E\u4E3A\u900F\u660E +ElementDraftException_NotIntervalRepresentation=\u65F6\u95F4\u8868\u793A\u5E94\u8BBE\u7F6E\u4E3A INTERVAL\uFF0C\u5143\u7D20 id=''{0}'' \u7684\u95F4\u9694\u5C06\u88AB\u5FFD\u7565 +ElementDraftException_IntervalSetError=\u5C06\u95F4\u9694{0}\u6DFB\u52A0\u5230\u5143\u7D20 id=''{1}'' \u65F6\u9047\u5230\u95EE\u9898\uFF0C\u5E76\u4E14\u5FFD\u7565\u95F4\u9694\uFF0C\u9519\u8BEF\uFF1A{2} +ElementDraftException_SetValueTimestampError=\u5728\u65F6\u95F4\u6233{2}\u5C06\u503C\u201C{0}\u201D\u8BBE\u7F6E\u4E3A\u5143\u7D20 id=''{1}'' \u65F6\u51FA\u73B0\u95EE\u9898\uFF0C\u9519\u8BEF\uFF1A{3} diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_zh_TW.properties b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_zh_TW.properties new file mode 100644 index 0000000000..fa1aabfe4d --- /dev/null +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/Bundle_zh_TW.properties @@ -0,0 +1,43 @@ +ImportContainerLog.TimeInterval=Time Interval set at {0} +ImportContainerLog.TimeFormat=Time Format: {0} +ImportContainerLog.TimeRepresentation=Time Representation: {0} +ImportContainerLog.AddNodeColumn=Node column ''{0}'' ({1}) +ImportContainerLog.AddEdgeColumn=Edge column ''{0}'' ({1}) +ImportContainerLog.AddDynamicNodeColumn=Node column ''{0}'' (Dynamic {1}) +ImportContainerLog.AddDynamicEdgeColumn=Edge column ''{0}'' (Dynamic {1}) +ImportContainerLog.EdgeLabelType=Edge labels are of type ''{0}'' +ImportContainerLog.TimeZone=Time zone is set at ''{0}'' +ImportContainerLog.MultiGraphCount=Multi-graph with {0} different types +ImportContainerLog.GraphTimestamp=Graph timestamp set at ''{0}'' +ImportContainerLog.GraphInterval=Graph interval set at ''{0}'' +ImportContainerLog.ElementIdType=Element id type set at ''{0}'' +ImportContainerException_nodeExist=Duplicated node id=''{0}'' +ImportContainerException_UnknowNodeId=Unknown Node id=''{0}'' +ImportContainerException_AutoNodeCreated=Some nodes were created based on edges' source and target +ImportContainerException_MissingNodeSource=Missing Node Source, edge is ignored +ImportContainerException_MissingNodeTarget=Missing Node Target, edge is ignored +ImportContainerException_MissingNodeId=Missing Node Identifier +ImportContainerException_edgeExist=Edge already exists id=''{0}'' +ImportContainerException_SelfLoop=Self loop are not allowed +ImportContainerException_Bad_Edge_Type=Edge type doesn't fit with default set ({0}), edge id=''{1}'' is ignored +ImportContainerException_Parallel_Edge_Merged=Parallel edges detected, remember to choose a merge strategy +ImportContainerException_Parallel_Edge_Forbidden=Parallel edges are not allowed, edge id=''{0}'' is ignored +ImportContainerException_Unsupported_Edge_type=Edge types can only have a primitive type value +ImportContainerException_Unsupported_Edge_type_Conflict=Edge label type is of type {0} but should be {1}, the label is ignored +ImportContainerException_Set_EdgeDefault=Default edge type set as ''{0}'' +ImportContainerException_Weight_Zero_Ignored=Edge weight is 0, the edge id=''{0}'' is ignored +ImportContainerException_ElementIdType_Parse_Error=The id type is configured to ''{0}'' but some elements id can't be parsed, defaulting to 'STRING' +ImportContainerException_Negative_Weight=Edge id=''{0}'' has a negative weight +ImportContainerException_Column_Type_Mismatch=A column ''{0}'' already exists but with a different type=''{1}'' +ImportContainerException_Timestamp_Parse_Error=The graph timestamp ''{0}'' could not be parsed +ImportContainerException_Interval_Parse_Error=The graph interval ''{0}'' could not be parsed +ElementFactoryException_NullNodeId=Node id can't be null +ElementFactoryException_NullEdgeId=Edge id can't be null +ElementDraftException_ColorParse=Color ''{0}'' can't be parsed for element id=''{1}'', color is ignored +ElementDraftException_LabelColorParse=Label color ''{0}'' can't be parsed for element id=''{1}'', color is ignored +ElementDraftException_NotTimestampRepresentation=The time representation should be set to TIMESTAMP, the timestamp for the element id=''{0}'' is ignored +ElementDraftException_NotIntervalRepresentation=The time representation should be set to INTERVAL, the interval for the element id=''{0}'' is ignored +ElementDraftException_IntervalSetError=A problem was encountered while adding the interval {0} to the element id=''{1}'' and the interval is ignored, error: {2} +ElementDraftException_SetValueError=A problem occurred while setting the value ''{0}'' to the element id=''{1}'', error: {2} +ElementDraftException_SetValueTimestampError=A problem occurred while setting the value ''{0}'' to the element id=''{1}'' at the timestamp {2}, error: {3} +ElementDraftException_SetValueIntervalError=A problem occurred while setting the value ''{0}'' to the element id=''{1}'' at the interval {2}, error: {3} diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/cs.po b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/cs.po deleted file mode 100644 index a7d7084d51..0000000000 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/cs.po +++ /dev/null @@ -1,64 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:28+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "ImportContainerLog.TimeInterval" -msgstr "ČasovΓ½ interval nastaven na {0}" - -msgid "ImportContainerLog.TimeFormat" -msgstr "ČasovΓ½ formΓ‘t: {0}" - -msgid "ImportContainerException_nodeExist" -msgstr "ZdvojenΓ© id uzlu=''{0}''" - -msgid "ImportContainerException_UnknowNodeId" -msgstr "NeznΓ‘mΓ© id uzlu" - -msgid "ImportContainerException_MissingNodeSource" -msgstr "ChybΓ­ zdroj uzlu, hrana je ignorovΓ‘na" - -msgid "ImportContainerException_MissingNodeTarget" -msgstr "ChybΓ­ cΓ­l uzlu, hrana je ignorovΓ‘na" - -msgid "ImportContainerException_MissingNodeId" -msgstr "ChybΓ­ identifikΓ‘tor uzlu" - -msgid "ImportContainerException_edgeExist" -msgstr "Hrana jiΕΎ existuje" - -msgid "ImportContainerException_SelfLoop" -msgstr "VlastnΓ­ smyčky nejsou povoleny" - -msgid "ImportContainerException_Bad_Edge_Type" -msgstr "Typ hrany se neshoduje s vΓ½chozΓ­m" - -msgid "ImportContainerException_Parallel_Edge" -msgstr "SoubΔ›ΕΎnΓ© hrany nejsou zatΓ­m podporovΓ‘ny, hrana s id=''{0}'' je ignorovΓ‘na" - -msgid "ImportContainerException_Set_EdgeDefault" -msgstr "VΓ½chozΓ­ typ hrany nastaven na {0}" - -msgid "ImportContainerException_Weight_Zero_Ignored" -msgstr "VΓ‘ha hrany je 0 nebo zΓ‘pornΓ‘, hrana s id=''{0}'' je ignorovΓ‘na" - -msgid "ImportContainerException_TimeInterval_ParseError" -msgstr "ČasovΓ½ interval ''{0}'' nemohl bΓ½t analyzovΓ‘n. PouΕΎijte formΓ‘tovΓ‘nΓ­ Date nebo Double" - -msgid "ImportContainerException_TimeInterval_Empty" -msgstr "Parametry start a end časovΓ©ho intervalu jsou prΓ‘zdnΓ©" diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/es.po b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/es.po deleted file mode 100644 index bb7ae59137..0000000000 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/es.po +++ /dev/null @@ -1,65 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:28+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "ImportContainerLog.TimeInterval" -msgstr "IntΓ©rvalo de tiempo creado en {0}" - -msgid "ImportContainerLog.TimeFormat" -msgstr "Formato de tiempo: {0}" - -msgid "ImportContainerException_nodeExist" -msgstr "Duplicada id de nodo=''{0}''" - -msgid "ImportContainerException_UnknowNodeId" -msgstr "Id de nodo desconocida" - -msgid "ImportContainerException_MissingNodeSource" -msgstr "Falta el nodo fuente, la arista es ignorada" - -msgid "ImportContainerException_MissingNodeTarget" -msgstr "Falta el nodo objetivo, la arista es ignorada" - -msgid "ImportContainerException_MissingNodeId" -msgstr "Falta el identificador de nodo" - -msgid "ImportContainerException_edgeExist" -msgstr "La arista ya existe" - -msgid "ImportContainerException_SelfLoop" -msgstr "Los bucles no estΓ‘n permitidos" - -msgid "ImportContainerException_Bad_Edge_Type" -msgstr "El tipo de arista no se ajusta al tipo por defecto" - -msgid "ImportContainerException_Parallel_Edge" -msgstr "Las aristas paralelas no estΓ‘n soportadas todavΓ­a, la arista con id=\"{0}\" es ignorada" - -msgid "ImportContainerException_Set_EdgeDefault" -msgstr "El tipo de arista por defecto asignado como {0}" - -msgid "ImportContainerException_Weight_Zero_Ignored" -msgstr "El peso de la arista es 0 o negativo, la arista con id=\"{0}\" es ignorada" - -msgid "ImportContainerException_TimeInterval_ParseError" -msgstr "El intΓ©rvalo temporal \"{0}\" no pudo ser analizado. Utiliza formato de fecha o decimal" - -msgid "ImportContainerException_TimeInterval_Empty" -msgstr "Ambos parΓ‘metros inicio y final del intΓ©rvalo temporal estΓ‘n vacΓ­os" diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/fr.po b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/fr.po deleted file mode 100644 index f97bfb531a..0000000000 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/fr.po +++ /dev/null @@ -1,64 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:28+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "ImportContainerLog.TimeInterval" -msgstr "Intervalle temporel mis Γ  {0}" - -msgid "ImportContainerLog.TimeFormat" -msgstr "Format temporel : {0}" - -msgid "ImportContainerException_nodeExist" -msgstr "Noeud dΓ©clarΓ© 2 fois id=''{0}''" - -msgid "ImportContainerException_UnknowNodeId" -msgstr "Id de noeud inconnu" - -msgid "ImportContainerException_MissingNodeSource" -msgstr "Source manquante, le lien est ignorΓ©" - -msgid "ImportContainerException_MissingNodeTarget" -msgstr "Destination manquante, le lien est ignorΓ©" - -msgid "ImportContainerException_MissingNodeId" -msgstr "Identifiant du noeud manquant" - -msgid "ImportContainerException_edgeExist" -msgstr "Lien dΓ©jΓ  existant" - -msgid "ImportContainerException_SelfLoop" -msgstr "Les boucles sont interdites" - -msgid "ImportContainerException_Bad_Edge_Type" -msgstr "Type de noeud et valeur par dΓ©faut incohΓ©rents" - -msgid "ImportContainerException_Parallel_Edge" -msgstr "Liens parallΓ¨les non supportΓ©s actuellement, le lien id=''{0}'' est ignorΓ©" - -msgid "ImportContainerException_Set_EdgeDefault" -msgstr "Liens de type {0} par dΓ©faut" - -msgid "ImportContainerException_Weight_Zero_Ignored" -msgstr "Poids du lien 0 ou nΓ©gatif, le lien id=''{0}'' est ignorΓ©" - -msgid "ImportContainerException_TimeInterval_ParseError" -msgstr "L'intervalle temporel ''{0}'' n'a pas pu Γͺtre identifiΓ©.Utilisez un format Date ou Double." - -msgid "ImportContainerException_TimeInterval_Empty" -msgstr "Les paramΓ¨tres start et end de l'intervalle temporel sont vides." diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/ja.po b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/ja.po deleted file mode 100644 index 93cb21bf6b..0000000000 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/ja.po +++ /dev/null @@ -1,64 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:28+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "ImportContainerLog.TimeInterval" -msgstr "{0}で設εšγ•γ‚ŒγŸζ™‚ι–“ι–“ιš”" - -msgid "ImportContainerLog.TimeFormat" -msgstr "ζ™‚ι–“γγƒ•γ‚©γƒΌγƒžγƒƒγƒˆ:{0}" - -msgid "ImportContainerException_nodeExist" -msgstr "ι‡θ€‡γ—γŸγƒŽγƒΌγƒ‰ID = \"{0}\"" - -msgid "ImportContainerException_UnknowNodeId" -msgstr "不明γͺγƒŽγƒΌγƒ‰ID" - -msgid "ImportContainerException_MissingNodeSource" -msgstr "γƒŽγƒΌγƒ‰γγ‚½γƒΌγ‚ΉγŒζ¬ θ½γ€θΎΊγ―η„‘θ¦–γ•γ‚ŒγΎγ™" - -msgid "ImportContainerException_MissingNodeTarget" -msgstr "γƒŽγƒΌγƒ‰γγ‚ΏγƒΌγ‚²γƒƒγƒˆγŒζ¬ θ½γ€θΎΊγ―η„‘θ¦–γ•γ‚ŒγΎγ™" - -msgid "ImportContainerException_MissingNodeId" -msgstr "ζ¬ θ½γƒŽγƒΌγƒ‰θ­˜εˆ₯子" - -msgid "ImportContainerException_edgeExist" -msgstr "θΎΊγ―γ™γ§γ«ε­˜εœ¨γ—γ¦γ„γΎγ™" - -msgid "ImportContainerException_SelfLoop" -msgstr "γ‚»γƒ«γƒ•γƒ»γƒ«γƒΌγƒ—γ―θ¨±ε―γ•γ‚Œγ¦γ„γΎγ›γ‚“γ€‚" - -msgid "ImportContainerException_Bad_Edge_Type" -msgstr "θΎΊγη¨ι‘žγŒγƒ‡γƒ•γ‚©γƒ«γƒˆγ«ι©εˆγ—γΎγ›γ‚“γ€‚" - -msgid "ImportContainerException_Parallel_Edge" -msgstr "平葌γͺθΎΊγ―γΎγ γ‚΅γƒγƒΌγƒˆγ•γ‚Œγ¦γ„γΎγ›γ‚“γ€‚θΎΊID=\"{0}\"γ―η„‘θ¦–γ•γ‚ŒγΎγ™γ€‚" - -msgid "ImportContainerException_Set_EdgeDefault" -msgstr "γƒ‡γƒ•γ‚©γƒ«γƒˆγθΎΊγη¨ι‘žγ―{0}として設εšγ•γ‚Œγ¦γ„γΎγ™γ€‚" - -msgid "ImportContainerException_Weight_Zero_Ignored" -msgstr "θΎΊγι‡γΏγŒ0もしくは負です。辺ID=\"{0}\"γ―η„‘θ¦–γ•γ‚ŒγΎγ™γ€‚" - -msgid "ImportContainerException_TimeInterval_ParseError" -msgstr "ζ™‚ι–“ι–“ιš”''{0}'''γ‚’θ§£ζžγ§γγΎγ›γ‚“γ§γ—γŸγ€‚ζ—₯δ»˜γΎγŸγ―γƒ€γƒ–γƒ«ζ›ΈεΌγ‚’δ½Ώη”¨γ—γ¦γγ γ•γ„" - -msgid "ImportContainerException_TimeInterval_Empty" -msgstr "ζ™‚ι–“ι–“ιš”γι–‹ε§‹εŠγ³η΅‚δΊ†γƒ‘γƒ©γƒ‘γƒΌγ‚ΏγŒδΈ‘ζ–Ήγ¨γ‚‚η©Ίγ§γ‚γ‚‹" diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/org-gephi-io-importer-impl.pot b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/org-gephi-io-importer-impl.pot deleted file mode 100644 index ea137b69f9..0000000000 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/org-gephi-io-importer-impl.pot +++ /dev/null @@ -1,62 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "ImportContainerLog.TimeInterval" -msgstr "Time Interval set at {0}" - -msgid "ImportContainerLog.TimeFormat" -msgstr "Time Format: {0}" - -msgid "ImportContainerException_nodeExist" -msgstr "Duplicated node id=''{0}''" - -msgid "ImportContainerException_UnknowNodeId" -msgstr "Unknow Node id" - -msgid "ImportContainerException_MissingNodeSource" -msgstr "Missing Node Source, edge is ignored" - -msgid "ImportContainerException_MissingNodeTarget" -msgstr "Missing Node Target, edge is ignored" - -msgid "ImportContainerException_MissingNodeId" -msgstr "Missing Node Identifier" - -msgid "ImportContainerException_edgeExist" -msgstr "Edge already exists" - -msgid "ImportContainerException_SelfLoop" -msgstr "Self loop are not allowed" - -msgid "ImportContainerException_Bad_Edge_Type" -msgstr "Edge type doesn't fit with default" - -msgid "ImportContainerException_Parallel_Edge" -msgstr "Parallel edges are not supported yet, edge id=''{0}'' is ignored" - -msgid "ImportContainerException_Set_EdgeDefault" -msgstr "Default edge type set as {0}" - -msgid "ImportContainerException_Weight_Zero_Ignored" -msgstr "Edge weight is 0 or negative, edge id=''{0}'' is ignored" - -msgid "ImportContainerException_TimeInterval_ParseError" -msgstr "" -"The Time Interval ''{0}'' could not be parsed. Use Date or Double formatting" - -msgid "ImportContainerException_TimeInterval_Empty" -msgstr "The Time Interval start and end parameters are both empty" diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/pt_BR.po b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/pt_BR.po deleted file mode 100644 index f6472c33eb..0000000000 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/pt_BR.po +++ /dev/null @@ -1,64 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:28+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "ImportContainerLog.TimeInterval" -msgstr "Intervalo de tempo criado em {0}" - -msgid "ImportContainerLog.TimeFormat" -msgstr "Formato da hora: {0}" - -msgid "ImportContainerException_nodeExist" -msgstr "Id de nΓ³ duplicado=''{0}''" - -msgid "ImportContainerException_UnknowNodeId" -msgstr "Id de nΓ³ desconhecido" - -msgid "ImportContainerException_MissingNodeSource" -msgstr "Falta o nΓ³ origem, a aresta serΓ‘ ignorada" - -msgid "ImportContainerException_MissingNodeTarget" -msgstr "Falta o nΓ³ destino, a aresta serΓ‘ ignorada" - -msgid "ImportContainerException_MissingNodeId" -msgstr "Falta o identificador do nΓ³" - -msgid "ImportContainerException_edgeExist" -msgstr "A aresta jΓ‘ existe" - -msgid "ImportContainerException_SelfLoop" -msgstr "Auto-loops nΓ£o sΓ£o permitidos" - -msgid "ImportContainerException_Bad_Edge_Type" -msgstr "O tipo de aresta nΓ£o se ajusta ao tipo padrΓ£o" - -msgid "ImportContainerException_Parallel_Edge" -msgstr "Arestas paralelas ainda nΓ£o sΓ£o suportadas. A aresta de id=''{0}'' serΓ‘ ignorada" - -msgid "ImportContainerException_Set_EdgeDefault" -msgstr "Tipo padrΓ£o de aresta definido como {0}" - -msgid "ImportContainerException_Weight_Zero_Ignored" -msgstr "O peso da arista Γ© 0 ou negativo. A aresta de id=\"{0}\" serΓ‘ ignorada" - -msgid "ImportContainerException_TimeInterval_ParseError" -msgstr "O intervalo de tempo ''{0}''nΓ£o pode ser analisado. Use formataΓ§Γ£o de data ou decimal" - -msgid "ImportContainerException_TimeInterval_Empty" -msgstr "Os parΓ’metros de inΓ­cio e fim de Intervalo de Tempo estΓ£o vazios" diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/ru.po b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/ru.po deleted file mode 100644 index ddafd300e9..0000000000 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/ru.po +++ /dev/null @@ -1,64 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:28+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "ImportContainerLog.TimeInterval" -msgstr "Π’Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» установлСн Π² {0}" - -msgid "ImportContainerLog.TimeFormat" -msgstr "Π€ΠΎΡ€ΠΌΠ°Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ: {0}" - -msgid "ImportContainerException_nodeExist" -msgstr "Π”ΡƒΠ±Π»ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉΡΡ ΡƒΠ·Π΅Π» с id=\"{0}\"" - -msgid "ImportContainerException_UnknowNodeId" -msgstr "НСизвСстный ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΡƒΠ·Π»Π°" - -msgid "ImportContainerException_MissingNodeSource" -msgstr "ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ ΡƒΠ·Π΅Π»-источник, Ρ€Π΅Π±Ρ€ΠΎ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ" - -msgid "ImportContainerException_MissingNodeTarget" -msgstr "ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ ΡƒΠ·Π΅Π»-ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ, Ρ€Π΅Π±Ρ€ΠΎ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ" - -msgid "ImportContainerException_MissingNodeId" -msgstr "ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΡƒΠ·Π»Π°" - -msgid "ImportContainerException_edgeExist" -msgstr "Π Π΅Π±Ρ€ΠΎ ΡƒΠΆΠ΅ сущСствуСт" - -msgid "ImportContainerException_SelfLoop" -msgstr "ΠŸΠ΅Ρ‚Π»ΠΈ Π·Π°ΠΏΡ€Π΅Ρ‰Π΅Π½Ρ‹" - -msgid "ImportContainerException_Bad_Edge_Type" -msgstr "Π’ΠΈΠΏ Ρ€Π΅Π±Ρ€Π° Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ" - -msgid "ImportContainerException_Parallel_Edge" -msgstr "ΠŸΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π΅Π±Ρ€Π° ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ, Ρ€Π΅Π±Ρ€ΠΎ с id=\"{0}\" ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ" - -msgid "ImportContainerException_Set_EdgeDefault" -msgstr "Π’ΠΈΠΏ Ρ€Π΅Π±Ρ€Π° установлСн ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΊΠ°ΠΊ {0}" - -msgid "ImportContainerException_Weight_Zero_Ignored" -msgstr "ВСс Ρ€Π΅Π±Ρ€Π° мСньшС Π»ΠΈΠ±ΠΎ Ρ€Π°Π²Π΅Π½ 0, Ρ€Π΅Π±Ρ€ΠΎ с id=\"{0}\" ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ" - -msgid "ImportContainerException_TimeInterval_ParseError" -msgstr "НС удаётся Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» \"{0}\". Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Π²ΠΈΠ΄Π΅ Date ΠΈΠ»ΠΈ Double" - -msgid "ImportContainerException_TimeInterval_Empty" -msgstr "И Π½Π°Ρ‡Π°Π»ΠΎ, ΠΈ ΠΊΠΎΠ½Π΅Ρ† Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π° пусты" diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/zh_CN.po b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/zh_CN.po deleted file mode 100644 index e8a38b466a..0000000000 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/impl/zh_CN.po +++ /dev/null @@ -1,63 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:28+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "ImportContainerLog.TimeInterval" -msgstr "ζ—Άι—΄ι—΄ιš”θΎη½δΈΊ{0}" - -msgid "ImportContainerLog.TimeFormat" -msgstr "ζ—Άι—΄ζ ΌεΌοΌš{0}" - -msgid "ImportContainerException_nodeExist" -msgstr "ι‡ε€ηš„θŠ‚η‚ΉID =β€œ{0} ''" - -msgid "ImportContainerException_UnknowNodeId" -msgstr "ζœͺηŸ₯θŠ‚η‚ΉID" - -msgid "ImportContainerException_MissingNodeSource" -msgstr "ηΌΊε°‘ζΊθŠ‚η‚ΉοΌŒθ’«εΏ½η•₯ηš„θΎΉ" - -msgid "ImportContainerException_MissingNodeTarget" -msgstr "ηΌΊε°‘η›ζ ‡θŠ‚η‚ΉοΌŒθ’«εΏ½η•₯ηš„θΎΉ" - -msgid "ImportContainerException_MissingNodeId" -msgstr "ηΌΊε°‘θŠ‚η‚Ήζ ‡θ―†η¬¦" - -msgid "ImportContainerException_edgeExist" -msgstr "边已经存在" - -msgid "ImportContainerException_SelfLoop" -msgstr "θ‡ͺζˆ‘εΎͺηŽ―ζ˜―δΈε…θΈηš„" - -msgid "ImportContainerException_Bad_Edge_Type" -msgstr "θΎΉη±»εž‹δΈŽι»˜θ€ηš„δΈη¬¦εˆ" - -msgid "ImportContainerException_Parallel_Edge" -msgstr "εΉ³θ‘ŒθΎΉε°šδΈζ”―ζŒοΌŒθΎΉηΌ˜ID =β€œ{0}”蒫忽η•₯" - -msgid "ImportContainerException_Set_EdgeDefault" -msgstr "默θ€θΎΉη±»εž‹θΎη½δΈΊ{0}" - -msgid "ImportContainerException_Weight_Zero_Ignored" -msgstr "θΎΉηš„ζƒι‡ζ˜―0ζˆ–θ΄Ÿζ•°οΌŒθΎΉID =β€œ{0}”蒫忽η•₯" - -msgid "ImportContainerException_TimeInterval_ParseError" -msgstr "ζ—Άι—΄ι—΄ιš”β€œ{0}β€δΈθƒ½θ’«θ§£ζžγ€‚δ½Ώη”¨ζ—₯ζœŸζˆ–εŒζ ΌεΌ" - -msgid "ImportContainerException_TimeInterval_Empty" -msgstr "ζ—Άι—΄ι—΄ιš”ηš„εΌ€ε§‹ε’Œη»“ζŸε‚ζ•°ιƒ½δΈΊη©Ί" diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/spi/package.html b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/spi/package.html index 8aaf2bd4d4..397171f1bd 100644 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/importer/spi/package.html +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/importer/spi/package.html @@ -1,28 +1,49 @@ - - - - Interfaces for creating new data importers. -

    Create a new Importer

    -
    1. Create a new module and set Import API, - File System API and Utilities API as dependencies.
    2. -
    3. Create a new builder class, which implements: -
      • FileImporterBuilder (files)
      • -
      • DatabaseImporterBuilder (databases)
      • -
      • SpigotImportBuilder (web and more complex scenarios)
      -
    4. Add @ServiceProvider annotation to your class to declare - you are implementing an Importer service. Put FileImporterBuilder.class - as the annotation service parameter for text and XML, - SpigotImportBuilder.class for spigots and - DatabaseImporter.class for databases.
    5. -
    6. Create a new importer class,which implements FileImporter, - DatabaseImport or SpigotImporter.
    7. -
    8. In the builder, return a new instance of your importer in the buildImporter() method.
    9. -
    10. For settings UI, create a new ImporterUI implementation and add the - @ServiceProvider annotation to it.
    11. -
    -

    To let your import task be cancelled and its progress watched, implement - LongTask interface. Add LongTask API as dependency to your module first.

    -

    See HowTo write an import for more details. - - - + + + + org.gephi.io.importer.spi + + +

    + Interfaces for creating new data importers. +

    +

    Create a new Importer

    +
      +
    1. Create a new module and set Import API, + File System API and Utilities API as dependencies. +
    2. +
    3. + Create a new builder class, which implements: +
        +
      • FileImporterBuilder (files)
      • +
      • DatabaseImporterBuilder (databases)
      • +
      • WizardImportBuilder (web and more complex scenarios)
      • +
      +
    4. +
    5. + Add @ServiceProvider annotation to your class to declare + you are implementing an Importer service. Put FileImporterBuilder.class + as the annotation service parameter for text and XML, + WizardImportBuilder.class for wizards and + DatabaseImporter.class for databases. +
    6. +
    7. + Create a new importer class,which implements FileImporter, + DatabaseImport or WizardImporter. +
    8. +
    9. + In the builder, return a new instance of your importer in the buildImporter() method. +
    10. +
    11. + For settings UI, create a new ImporterUI implementation and add the + @ServiceProvider annotation to it. +
    12. +
    +

    + To let your import task be cancelled and its progress watched, implement + LongTask interface. Add LongTask API as dependency to your module first. +

    +

    See HowTo write an import for more details.

    + + + diff --git a/modules/ImportAPI/src/main/resources/org/gephi/io/processor/spi/package.html b/modules/ImportAPI/src/main/resources/org/gephi/io/processor/spi/package.html index f9ce361059..b2f45f421e 100644 --- a/modules/ImportAPI/src/main/resources/org/gephi/io/processor/spi/package.html +++ b/modules/ImportAPI/src/main/resources/org/gephi/io/processor/spi/package.html @@ -1,13 +1,18 @@ - - - - Interfaces that define the way data are unloaded from container and - appened to the workspace. -

    - The purpose of processors is to unload data from the import container - and push it to the workspace, with various strategy. For instance - a processor could either create a new workspace or append data to the - current workspace, with a particular strategy. -

    - - + + + + org.gephi.processor.spi + + +

    + Interfaces that define the way data are unloaded from container and + appened to the workspace. +

    +

    + The purpose of processors is to unload data from the import container + and push it to the workspace, with various strategy. For instance + a processor could either create a new workspace or append data to the + current workspace, with a particular strategy. +

    + + diff --git a/modules/ImportAPI/src/main/resources/overview.html b/modules/ImportAPI/src/main/resources/overview.html index b6f753dcd6..fe3844bdee 100644 --- a/modules/ImportAPI/src/main/resources/overview.html +++ b/modules/ImportAPI/src/main/resources/overview.html @@ -1,11 +1,16 @@ - + + + Import API + - Import API/SPI provides the import workflow to import data form any - support. +

    + Import API/SPI provides the import workflow to import data form any + support. +

    API is providing a secure workflow, from importers that connects to - the data source (files, databases, spigots...) to the processors that + the data source (files, databases, wizards...) to the processors that append imported data to the workspace. It is based on the Container interface, that has a loading and unloading sub-interface. Importers are loading the container, then the controller diff --git a/modules/ImportAPI/src/test/java/org/gephi/io/importer/GraphImporter.java b/modules/ImportAPI/src/test/java/org/gephi/io/importer/GraphImporter.java new file mode 100644 index 0000000000..49950bd94b --- /dev/null +++ b/modules/ImportAPI/src/test/java/org/gephi/io/importer/GraphImporter.java @@ -0,0 +1,75 @@ +package org.gephi.io.importer; + +import java.io.File; +import java.io.IOException; +import java.io.Reader; +import java.io.StringReader; +import java.nio.charset.StandardCharsets; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.io.importer.api.Container; +import org.gephi.io.importer.api.ImportController; +import org.gephi.io.importer.spi.FileImporter; +import org.gephi.io.processor.spi.Processor; +import org.gephi.project.api.ProjectController; +import org.openide.util.Lookup; + +public class GraphImporter { + + public static GraphModel importGraph(File file) { + Container container = importContainer(file); + return importContainer(container); + } + + public static GraphModel importGraph(Class resourceLocation, String filename) { + Processor processor = Lookup.getDefault().lookup(Processor.class); + if (processor == null) { + throw new RuntimeException( + "The import processor can't be found, make sure to add a dependency to the ProcessorPlugin module."); + } + ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); + pc.newProject(); + + Container container = importContainer(resourceLocation, filename); + return importContainer(container); + } + + private static GraphModel importContainer(Container container) { + ImportController importController = Lookup.getDefault().lookup(ImportController.class); + importController.process(container); + + GraphController graphController = Lookup.getDefault().lookup(GraphController.class); + return graphController.getGraphModel(); + } + + public static Container importContainer(File file) { + ImportController importController = Lookup.getDefault().lookup(ImportController.class); + try { + return importController.importFile(file); + } catch (IOException e) { + throw new RuntimeException("Failed to import file: " + file.getAbsolutePath(), e); + } + } + + public static Container importContainer(Class resourceLocation, String fileName) { + ImportController importController = Lookup.getDefault().lookup(ImportController.class); + + String extension = fileName.substring(fileName.lastIndexOf('.')); + FileImporter importer = importController.getFileImporter(extension); + if (importer == null) { + throw new RuntimeException("The importer for extension '" + extension + + "' can't be found, make sure to add a dependency to the ImportPlugin module."); + } + return importController.importFile(getReader(resourceLocation, fileName), importer); + } + + private static Reader getReader(Class resourceLocation, String fileName) { + try { + String content = new String(resourceLocation.getResourceAsStream(fileName) + .readAllBytes(), StandardCharsets.UTF_8); + return new StringReader(content); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/modules/ImportAPI/src/test/java/org/gephi/io/importer/impl/ElementDraftTest.java b/modules/ImportAPI/src/test/java/org/gephi/io/importer/impl/ElementDraftTest.java new file mode 100644 index 0000000000..beda76fc88 --- /dev/null +++ b/modules/ImportAPI/src/test/java/org/gephi/io/importer/impl/ElementDraftTest.java @@ -0,0 +1,150 @@ +package org.gephi.io.importer.impl; + +import java.awt.Color; +import java.util.Iterator; +import org.gephi.graph.api.Interval; +import org.gephi.graph.api.types.IntervalStringMap; +import org.gephi.graph.api.types.TimestampStringMap; +import org.gephi.io.importer.api.Issue; +import org.gephi.io.importer.api.Report; +import org.junit.Assert; +import org.junit.Test; + +public class ElementDraftTest { + + @Test + public void testColor() { + EdgeDraftImpl edge = new EdgeDraftImpl(new ImportContainerImpl(), "0"); + + Assert.assertNull(edge.getColor()); + edge.setColor(Color.CYAN); + Assert.assertEquals(Color.CYAN, edge.getColor()); + edge.setColor(255, 0, 0); + Assert.assertEquals(Color.RED, edge.getColor()); + edge.setColor(0, 1f, 1f); + Assert.assertEquals(Color.CYAN, edge.getColor()); + edge.setColor("red"); + Assert.assertEquals(Color.RED, edge.getColor()); + edge.setColor("#00FF00"); + Assert.assertEquals(Color.GREEN, edge.getColor()); + edge.setColor("0x0000FF"); + Assert.assertEquals(Color.BLUE, edge.getColor()); + } + + @Test + public void testColorUnparsable() { + EdgeDraftImpl edge = new EdgeDraftImpl(new ImportContainerImpl(), "0"); + edge.setColor("foo"); + Utils.assertContainerIssues(edge.container.getReport(), Issue.Level.WARNING, "foo"); + } + + @Test + public void testSetValue() { + EdgeDraftImpl edge = new EdgeDraftImpl(new ImportContainerImpl(), "0"); + Assert.assertNull(edge.getValue("foo")); + edge.setValue("foo", "bar"); + Assert.assertEquals("bar", edge.getValue("foo")); + } + + @Test + public void testSetValueTimestampStringMap() { + EdgeDraftImpl edge = new EdgeDraftImpl(new ImportContainerImpl(), "0"); + edge.setValue("foo", "bar", 1.0); + + TimestampStringMap t = new TimestampStringMap(); + t.put(1.0, "bar"); + Assert.assertEquals(t, edge.getValue("foo")); + } + + @Test + public void testSetValueIntervalStringMap() { + EdgeDraftImpl edge = new EdgeDraftImpl(new ImportContainerImpl(), "0"); + edge.setValue("foo", "bar", 1.0, 2.0); + + IntervalStringMap i = new IntervalStringMap(); + i.put(new Interval(1.0, 2.0), "bar"); + Assert.assertEquals(i, edge.getValue("foo")); + } + + @Test(expected = NullPointerException.class) + public void testSetValueNull() { + EdgeDraftImpl edge = new EdgeDraftImpl(new ImportContainerImpl(), "0"); + edge.setValue("foo", null); + } + + @Test(expected = NullPointerException.class) + public void testSetValueNullIntervalStringMap() { + EdgeDraftImpl edge = new EdgeDraftImpl(new ImportContainerImpl(), "0"); + edge.setValue("foo", null, 1.0, 2.0); + } + + @Test(expected = NullPointerException.class) + public void testSetValueNullTimestampStringMap() { + EdgeDraftImpl edge = new EdgeDraftImpl(new ImportContainerImpl(), "0"); + edge.setValue("foo", null, 1.0); + } + + @Test + public void testSetValueDuplicateInterval() { + EdgeDraftImpl edge = new EdgeDraftImpl(new ImportContainerImpl(), "0"); + edge.setValue("foo", "bar", 1.0, 2.0); + edge.setValue("foo", "hello", 1.0, 2.0); + Utils.assertContainerIssues(edge.container.getReport(), Issue.Level.WARNING, "hello"); + } + + @Test + public void testSetValueDuplicateTimestamp() { + EdgeDraftImpl edge = new EdgeDraftImpl(new ImportContainerImpl(), "0"); + edge.setValue("foo", "bar", 1.0); + edge.setValue("foo", "hello", 1.0); + Utils.assertContainerIssues(edge.container.getReport(), Issue.Level.WARNING, "hello"); + } + + @Test + public void testParseAndSetValue() { + EdgeDraftImpl edge = new EdgeDraftImpl(new ImportContainerImpl(), "0"); + edge.container.addEdgeColumn("foo", String.class); + edge.parseAndSetValue("foo", "bar"); + Assert.assertEquals("bar", edge.getValue("foo")); + } + + @Test + public void testParseAndSetValueEmpty() { + EdgeDraftImpl edge = new EdgeDraftImpl(new ImportContainerImpl(), "0"); + edge.container.addEdgeColumn("foo", String.class); + edge.parseAndSetValue("foo", ""); + Assert.assertNull(edge.getValue("foo")); + } + + @Test + public void testParseAndSetValueNull() { + EdgeDraftImpl edge = new EdgeDraftImpl(new ImportContainerImpl(), "0"); + edge.container.addEdgeColumn("foo", String.class); + edge.parseAndSetValue("foo", null); + Assert.assertNull(edge.getValue("foo")); + } + + // Bug fix: parseAndSetValue variants were calling getColumn(key) which returns + // null for undeclared columns, then dereferencing it without a null check (NPE). + @Test + public void testParseAndSetValueMissingColumn() { + EdgeDraftImpl edge = new EdgeDraftImpl(new ImportContainerImpl(), "0"); + // "unknown" column was never registered β€” must log SEVERE, not throw NPE + edge.parseAndSetValue("unknown", "value"); + Utils.assertContainerIssues(edge.container.getReport(), Issue.Level.SEVERE, "unknown"); + } + + @Test + public void testParseAndSetValueMissingColumnTimestamp() { + EdgeDraftImpl edge = new EdgeDraftImpl(new ImportContainerImpl(), "0"); + edge.parseAndSetValue("unknown", "value", 1.0); + Utils.assertContainerIssues(edge.container.getReport(), Issue.Level.SEVERE, "unknown"); + } + + @Test + public void testParseAndSetValueMissingColumnInterval() { + EdgeDraftImpl edge = new EdgeDraftImpl(new ImportContainerImpl(), "0"); + edge.parseAndSetValue("unknown", "value", 1.0, 2.0); + Utils.assertContainerIssues(edge.container.getReport(), Issue.Level.SEVERE, "unknown"); + } +} diff --git a/modules/ImportAPI/src/test/java/org/gephi/io/importer/impl/ImportContainerImplTest.java b/modules/ImportAPI/src/test/java/org/gephi/io/importer/impl/ImportContainerImplTest.java new file mode 100644 index 0000000000..5820f80d79 --- /dev/null +++ b/modules/ImportAPI/src/test/java/org/gephi/io/importer/impl/ImportContainerImplTest.java @@ -0,0 +1,277 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.io.importer.impl; + +import org.gephi.graph.api.TimeRepresentation; +import org.gephi.graph.api.types.TimestampStringMap; +import org.gephi.io.importer.api.ColumnDraft; +import org.gephi.io.importer.api.EdgeDirection; +import org.gephi.io.importer.api.EdgeDirectionDefault; +import org.gephi.io.importer.api.EdgeDraft; +import org.gephi.io.importer.api.ElementIdType; +import org.gephi.io.importer.api.Issue; +import org.gephi.io.importer.api.NodeDraft; +import org.junit.Assert; +import org.junit.Test; + +public class ImportContainerImplTest { + + @Test + public void testAddColumn() { + ImportContainerImpl importContainer = new ImportContainerImpl(); + ColumnDraft col = importContainer.addNodeColumn("foo", String.class); + Assert.assertNotNull(col); + Assert.assertEquals(String.class, col.getTypeClass()); + Assert.assertSame(col, importContainer.getNodeColumn("foo")); + } + + @Test + public void testAddDynamicColumn() { + ImportContainerImpl importContainer = new ImportContainerImpl(); + importContainer.setTimeRepresentation(TimeRepresentation.TIMESTAMP); + ColumnDraft col = importContainer.addNodeColumn("foo", String.class, true); + Assert.assertNotNull(col); + Assert.assertEquals(String.class, col.getTypeClass()); + Assert.assertEquals(TimestampStringMap.class, col.getResolvedTypeClass(importContainer)); + } + + @Test + public void testEdgeExists() { + ImportContainerImpl importContainer = new ImportContainerImpl(); + generateTinyGraph(importContainer); + Assert.assertTrue(importContainer.edgeExists("1")); + Assert.assertTrue(importContainer.edgeExists("1", "2")); + Assert.assertTrue(importContainer.edgeExists("2", "1")); + } + + @Test + public void testEdgeExistsUndirectedWithDefault() { + ImportContainerImpl importContainer = new ImportContainerImpl(); + importContainer.setEdgeDefault(EdgeDirectionDefault.UNDIRECTED); + generateTinyUndirectedGraph(importContainer); + Assert.assertTrue(importContainer.edgeExists("1")); + Assert.assertTrue(importContainer.edgeExists("1", "2")); + Assert.assertTrue(importContainer.edgeExists("2", "1")); + } + + @Test + public void testEdgeExistsUndirected() { + ImportContainerImpl importContainer = new ImportContainerImpl(); + generateTinyUndirectedGraph(importContainer); + Assert.assertTrue(importContainer.edgeExists("1")); + Assert.assertTrue(importContainer.edgeExists("1", "2")); + Assert.assertTrue(importContainer.edgeExists("2", "1")); + } + + @Test + public void testEdgeExistsSelfLoop() { + ImportContainerImpl importContainer = new ImportContainerImpl(); + generateTinyGraphWithSelfLoop(importContainer, EdgeDirection.DIRECTED); + Assert.assertTrue(importContainer.edgeExists("1", "1")); + + importContainer = new ImportContainerImpl(); + generateTinyGraphWithSelfLoop(importContainer, EdgeDirection.UNDIRECTED); + Assert.assertTrue(importContainer.edgeExists("1", "1")); + } + + @Test + public void testRemoveEdge() { + ImportContainerImpl importContainer = new ImportContainerImpl(); + generateTinyGraph(importContainer); + importContainer.removeEdge(importContainer.getEdge("1")); + + Assert.assertTrue(importContainer.verify()); + Assert.assertEquals(1, importContainer.getUnloader().getEdgeCount()); + } + + // Bug fix: removeEdge was leaving a stale empty int[] in edgeTypeSets, blocking + // any subsequent addEdge for the same source/target pair. + @Test + public void testRemoveEdgeAndReAdd() { + ImportContainerImpl importContainer = new ImportContainerImpl(); + generateTinyGraph(importContainer); + importContainer.removeEdge(importContainer.getEdge("1")); + + // Re-add a new edge between the same nodes β€” must not be rejected + NodeDraft node1 = importContainer.getNode("1"); + NodeDraft node2 = importContainer.getNode("2"); + EdgeDraft newEdge = importContainer.factory().newEdgeDraft("3"); + newEdge.setDirection(EdgeDirection.DIRECTED); + newEdge.setSource(node1); + newEdge.setTarget(node2); + importContainer.addEdge(newEdge); + + Assert.assertEquals(2, importContainer.getEdgeCount()); + Assert.assertNotNull(importContainer.getEdge("3")); + Assert.assertFalse( + importContainer.getReport().getIssues(1).hasNext() + ); + } + + // Bug fix: verify() was iterating nodeList without null guards in the ID-type + // validation section, causing NPE when removed nodes left null tombstones. + @Test + public void testVerifyWithRemovedNodeIntegerIdType() { + ImportContainerImpl importContainer = new ImportContainerImpl(); + importContainer.setElementIdType(ElementIdType.INTEGER); + importContainer.setAllowAutoNode(true); + + // Add a node explicitly and an edge referencing an unknown node (auto-created) + NodeDraft node1 = importContainer.factory().newNodeDraft("1"); + importContainer.addNode(node1); + EdgeDraft edge = importContainer.factory().newEdgeDraft("10"); + edge.setDirection(EdgeDirection.DIRECTED); + edge.setSource(node1); + edge.setTarget(importContainer.getNode("2")); // auto-creates node "2" + importContainer.addEdge(edge); + + // Disabling auto-node and calling closeLoader() removes the auto-created node, + // leaving a null tombstone in nodeList. + importContainer.setAllowAutoNode(false); + importContainer.closeLoader(); + + // verify() must not throw NullPointerException when nodeList contains nulls + Assert.assertTrue(importContainer.verify()); + } + + // Bug fix: edgeExists(String, String) was calling getNode() which auto-creates + // nodes when allowAutoNode is true, corrupting the container as a side-effect. + @Test + public void testEdgeExistsNoAutoNodeSideEffect() { + ImportContainerImpl importContainer = new ImportContainerImpl(); + importContainer.setAllowAutoNode(true); + + Assert.assertFalse(importContainer.edgeExists("ghost1", "ghost2")); + Assert.assertEquals(0, importContainer.getNodeCount()); + Assert.assertFalse(importContainer.nodeExists("ghost1")); + Assert.assertFalse(importContainer.nodeExists("ghost2")); + } + + // Bug fix: NullFilterIterator.hasNext() was advancing the underlying iterator + // on every call, so calling it twice without next() skipped an element. + @Test + public void testNullFilterIteratorHasNextIdempotent() { + ImportContainerImpl importContainer = new ImportContainerImpl(); + NodeDraft node1 = importContainer.factory().newNodeDraft("1"); + NodeDraft node2 = importContainer.factory().newNodeDraft("2"); + importContainer.addNode(node1); + importContainer.addNode(node2); + + java.util.Iterator it = importContainer.getNodes().iterator(); + // Call hasNext() twice without next() β€” both calls must report true and + // the subsequent next() must return the first node, not skip it. + Assert.assertTrue(it.hasNext()); + Assert.assertTrue(it.hasNext()); + Assert.assertEquals("1", it.next().getId()); + Assert.assertTrue(it.hasNext()); + Assert.assertEquals("2", it.next().getId()); + Assert.assertFalse(it.hasNext()); + } + + @Test + public void testCheckSpecialCharacterNode() { + ImportContainerImpl container = new ImportContainerImpl(); + + container.addNode(new NodeDraftImpl(container, "foo ", 1)); + container.verify(); + Utils.assertContainerIssues(container.getReport(), Issue.Level.WARNING, "foo "); + } + + @Test + public void testCheckSpecialCharacterEdge() { + ImportContainerImpl container = new ImportContainerImpl(); + + NodeDraft node = new NodeDraftImpl(container, "0", 1); + container.addNode(node); + EdgeDraft edge = new EdgeDraftImpl(container, "bar "); + edge.setSource(node); + edge.setTarget(node); + container.addEdge(edge); + container.verify(); + Utils.assertContainerIssues(container.getReport(), Issue.Level.WARNING, "bar "); + } + + // Utility + + private void generateTinyUndirectedGraph(ImportContainerImpl container) { + NodeDraft node1 = container.factory().newNodeDraft("1"); + NodeDraft node2 = container.factory().newNodeDraft("2"); + EdgeDraft edge1 = container.factory().newEdgeDraft("1"); + edge1.setDirection(EdgeDirection.UNDIRECTED); + edge1.setSource(node1); + edge1.setTarget(node2); + + container.addNode(node1); + container.addNode(node2); + container.addEdge(edge1); + } + + private void generateTinyGraphWithSelfLoop(ImportContainerImpl container, EdgeDirection edgeDirection) { + NodeDraft node1 = container.factory().newNodeDraft("1"); + EdgeDraft edge1 = container.factory().newEdgeDraft("1"); + edge1.setDirection(edgeDirection); + edge1.setSource(node1); + edge1.setTarget(node1); + + container.addNode(node1); + container.addEdge(edge1); + } + + private void generateTinyGraph(ImportContainerImpl container) { + NodeDraft node1 = container.factory().newNodeDraft("1"); + NodeDraft node2 = container.factory().newNodeDraft("2"); + EdgeDraft edge1 = container.factory().newEdgeDraft("1"); + edge1.setDirection(EdgeDirection.DIRECTED); + edge1.setSource(node1); + edge1.setTarget(node2); + EdgeDraft edge2 = container.factory().newEdgeDraft("2"); + edge2.setDirection(EdgeDirection.DIRECTED); + edge2.setSource(node2); + edge2.setTarget(node1); + + container.addNode(node1); + container.addNode(node2); + container.addEdge(edge1); + container.addEdge(edge2); + } +} diff --git a/modules/ImportAPI/src/test/java/org/gephi/io/importer/impl/Utils.java b/modules/ImportAPI/src/test/java/org/gephi/io/importer/impl/Utils.java new file mode 100644 index 0000000000..46a88f6e98 --- /dev/null +++ b/modules/ImportAPI/src/test/java/org/gephi/io/importer/impl/Utils.java @@ -0,0 +1,22 @@ +package org.gephi.io.importer.impl; + +import java.util.Iterator; +import org.gephi.io.importer.api.Issue; +import org.gephi.io.importer.api.Report; +import org.junit.Assert; + +public class Utils { + + public static void assertContainerIssues(Report report, Issue.Level level, String message) { + report.close(); + boolean found = false; + Iterator issues = report.getIssues(1); + while (issues.hasNext()) { + Issue issue = issues.next(); + if (issue.getLevel().equals(level) && issue.getMessage().contains(message)) { + found = true; + } + } + Assert.assertTrue(found); + } +} diff --git a/modules/ImportPlugin/pom.xml b/modules/ImportPlugin/pom.xml index eafb7af86f..06bcc31f3f 100644 --- a/modules/ImportPlugin/pom.xml +++ b/modules/ImportPlugin/pom.xml @@ -4,25 +4,29 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. - org.gephi io-importer-plugin - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm ImportPlugin + + 5.4.1 + 6.4.0 + + ${project.groupId} - graph-api + project-api ${project.groupId} - dynamic-api + graph-api ${project.groupId} @@ -40,6 +44,10 @@ ${project.groupId} core-library-wrapper + + ${project.groupId} + utils + org.netbeans.api org-openide-util @@ -52,17 +60,45 @@ org.netbeans.api org-openide-util-lookup + + org.apache.poi + poi-ooxml + ${gephi.apache-poi.version} + + + com.fasterxml.woodstox + woodstox-core + ${gephi.woodstox.version} + + + + + org.netbeans.modules + org-netbeans-modules-masterfs + test + + + org.gephi + graph-api + test + test-jar + + + org.gephi + io-exporter-plugin + test + - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin - org.gephi.io.importer.plugin.database - org.gephi.io.importer.plugin.file + org.gephi.io.importer.plugin.* + org.gephi.io.processor.plugin diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/database/EdgeColumns.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/database/EdgeColumns.java new file mode 100644 index 0000000000..8701b02073 --- /dev/null +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/database/EdgeColumns.java @@ -0,0 +1,46 @@ +package org.gephi.io.importer.plugin.database; + +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.SQLException; +import org.gephi.io.importer.api.EdgeDraft; +import org.gephi.io.importer.api.ElementDraft; +import org.gephi.io.importer.api.PropertiesAssociations; + +class EdgeColumns { + + int findIdIndex(final ResultSetMetaData metaData, final PropertiesAssociations properties) throws SQLException { + int result = -1; + for (int i = 1; i <= metaData.getColumnCount(); ++i) { + String columnLabel = metaData.getColumnLabel(i); + PropertiesAssociations.EdgeProperties p = properties.getEdgeProperty(columnLabel); + if (PropertiesAssociations.EdgeProperties.ID.equals(p)) { + result = i; + break; + } + } + return result; + } + + EdgeDraft getEdgeDraft(final ElementDraft.Factory factory, final ResultSet rs, final int idColumn) + throws SQLException { + String id = getIdValue(rs, idColumn); + + final EdgeDraft edge; + if (id == null) { + edge = factory.newEdgeDraft(); + } else { + edge = factory.newEdgeDraft(id); + } + return edge; + } + + private String getIdValue(final ResultSet rs, final int idColumn) throws SQLException { + if (idColumn == -1) { + return null; + } + + return rs.getString(idColumn); + } + +} diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/database/EdgeListDatabaseImpl.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/database/EdgeListDatabaseImpl.java index 5ce6bc4b73..bd44995238 100644 --- a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/database/EdgeListDatabaseImpl.java +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/database/EdgeListDatabaseImpl.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.plugin.database; import org.gephi.io.importer.api.AbstractDatabase; @@ -46,7 +47,6 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.io.importer.api.PropertiesAssociations.NodeProperties; /** - * * @author Mathieu Bastian */ public class EdgeListDatabaseImpl extends AbstractDatabase { diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/database/ImporterBuilderEdgeList.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/database/ImporterBuilderEdgeList.java index 6c905f23bc..330ef7e92b 100644 --- a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/database/ImporterBuilderEdgeList.java +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/database/ImporterBuilderEdgeList.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.plugin.database; import org.gephi.io.importer.spi.DatabaseImporter; @@ -46,7 +47,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = DatabaseImporterBuilder.class) diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/database/ImporterEdgeList.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/database/ImporterEdgeList.java index b0eb08362f..abd5bec226 100644 --- a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/database/ImporterEdgeList.java +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/database/ImporterEdgeList.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.plugin.database; import java.sql.Connection; @@ -50,14 +51,13 @@ Development and Distribution License("CDDL") (collectively, the import java.sql.Time; import java.sql.Timestamp; import java.sql.Types; -import org.gephi.attribute.api.TimeFormat; +import org.gephi.graph.api.TimeFormat; import org.gephi.io.database.drivers.SQLUtils; import org.gephi.io.importer.api.ColumnDraft; import org.gephi.io.importer.api.ContainerLoader; import org.gephi.io.importer.api.Database; import org.gephi.io.importer.api.EdgeDraft; import org.gephi.io.importer.api.ElementDraft; -import org.gephi.io.importer.api.ElementDraftFactory; import org.gephi.io.importer.api.Issue; import org.gephi.io.importer.api.NodeDraft; import org.gephi.io.importer.api.PropertiesAssociations; @@ -67,7 +67,6 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.io.importer.spi.DatabaseImporter; /** - * * @author Mathieu Bastian */ public class ImporterEdgeList implements DatabaseImporter { @@ -78,9 +77,10 @@ public class ImporterEdgeList implements DatabaseImporter { private Connection connection; //TempData private String timeIntervalStart; - private String timeIntervalStartOpen; private String timeIntervalEnd; - private String timeIntervalEndOpen; + + private final NodeColumns nodeColumns = new NodeColumns(); + private final EdgeColumns edgeColumns = new EdgeColumns(); @Override public boolean execute(ContainerLoader container) { @@ -108,7 +108,8 @@ private void close() { private void importData() throws Exception { //Connect database - String url = SQLUtils.getUrl(database.getSQLDriver(), database.getHost(), database.getPort(), database.getDBName()); + String url = + SQLUtils.getUrl(database.getSQLDriver(), database.getHost(), database.getPort(), database.getDBName()); try { report.log("Try to connect at " + url); connection = database.getSQLDriver().getConnection(url, database.getUsername(), database.getPasswd()); @@ -136,7 +137,7 @@ private void importData() throws Exception { private void getNodes(Connection connection) throws SQLException { //Factory - ElementDraftFactory factory = container.factory(); + ElementDraft.Factory factory = container.factory(); //Properties PropertiesAssociations properties = database.getPropertiesAssociations(); @@ -153,25 +154,11 @@ private void getNodes(Connection connection) throws SQLException { findNodeAttributesColumns(rs); ResultSetMetaData metaData = rs.getMetaData(); int columnsCount = metaData.getColumnCount(); - int count = 0; + + int idColumn = nodeColumns.findIdIndex(metaData, properties); + while (rs.next()) { - String id = null; - for (int i = 0; i < columnsCount; i++) { - String columnName = metaData.getColumnLabel(i + 1); - NodeProperties p = properties.getNodeProperty(columnName); - if (p.equals(NodeProperties.ID)) { - String ide = rs.getString(i + 1); - if (ide != null) { - id = ide; - } - } - } - NodeDraft node; - if (id != null) { - node = factory.newNodeDraft(id); - } else { - node = factory.newNodeDraft(); - } + final NodeDraft node = nodeColumns.getNodeDraft(factory, rs, idColumn); for (int i = 0; i < columnsCount; i++) { String columnName = metaData.getColumnLabel(i + 1); @@ -184,19 +171,17 @@ private void getNodes(Connection connection) throws SQLException { injectElementAttribute(rs, i + 1, col, node); } } -// injectTimeIntervalProperty(node); + injectTimeIntervalProperty(node); container.addNode(node); - ++count; } rs.close(); s.close(); - } private void getEdges(Connection connection) throws SQLException { //Factory - ElementDraftFactory factory = container.factory(); + ElementDraft.Factory factory = container.factory(); //Properties PropertiesAssociations properties = database.getPropertiesAssociations(); @@ -212,25 +197,12 @@ private void getEdges(Connection connection) throws SQLException { findEdgeAttributesColumns(rs); ResultSetMetaData metaData = rs.getMetaData(); int columnsCount = metaData.getColumnCount(); - int count = 0; + + int idColumn = edgeColumns.findIdIndex(metaData, properties); + while (rs.next()) { - String id = null; - for (int i = 0; i < columnsCount; i++) { - String columnName = metaData.getColumnLabel(i + 1); - EdgeProperties p = properties.getEdgeProperty(columnName); - if (p.equals(EdgeProperties.ID)) { - String ide = rs.getString(i + 1); - if (ide != null) { - id = ide; - } - } - } - EdgeDraft edge; - if (id != null) { - edge = factory.newEdgeDraft(id); - } else { - edge = factory.newEdgeDraft(); - } + EdgeDraft edge = edgeColumns.getEdgeDraft(factory, rs, idColumn); + for (int i = 0; i < columnsCount; i++) { String columnName = metaData.getColumnLabel(i + 1); EdgeProperties p = properties.getEdgeProperty(columnName); @@ -242,9 +214,8 @@ private void getEdges(Connection connection) throws SQLException { injectElementAttribute(rs, i + 1, col, edge); } } -// injectTimeIntervalProperty(edge); + injectTimeIntervalProperty(edge); container.addEdge(edge); - ++count; } rs.close(); s.close(); @@ -256,7 +227,8 @@ private void getNodesAttributes(Connection connection) throws SQLException { private void getEdgesAttributes(Connection connection) throws SQLException { } - private void injectNodeProperty(NodeProperties p, ResultSet rs, int column, NodeDraft nodeDraft) throws SQLException { + private void injectNodeProperty(NodeProperties p, ResultSet rs, int column, NodeDraft nodeDraft) + throws SQLException { switch (p) { case LABEL: String label = rs.getString(column); @@ -285,9 +257,11 @@ private void injectNodeProperty(NodeProperties p, ResultSet rs, int column, Node case COLOR: String color = rs.getString(column); if (color != null) { - String[] rgb = color.split(","); + String[] rgb = color.replace(" ", "").split(","); if (rgb.length == 3) { nodeDraft.setColor(rgb[0], rgb[1], rgb[2]); + } else { + nodeDraft.setColor(color); } } break; @@ -308,7 +282,7 @@ private void injectNodeProperty(NodeProperties p, ResultSet rs, int column, Node container.setTimeFormat(getTimeFormat(rs, column)); String startOpen = rs.getString(column); if (startOpen != null) { - timeIntervalStartOpen = startOpen; + timeIntervalStart = startOpen; } break; case END: @@ -322,26 +296,29 @@ private void injectNodeProperty(NodeProperties p, ResultSet rs, int column, Node container.setTimeFormat(getTimeFormat(rs, column)); String endOpen = rs.getString(column); if (endOpen != null) { - timeIntervalEndOpen = endOpen; + timeIntervalEnd = endOpen; } break; - } } private TimeFormat getTimeFormat(ResultSet rs, int column) throws SQLException { ResultSetMetaData metaData = rs.getMetaData(); int type = metaData.getColumnType(column); - if (type == Types.DATE) { - return TimeFormat.DATE; - } else if (type == Types.TIME) { - return TimeFormat.DATETIME; - } else if (type == Types.TIMESTAMP) { - return TimeFormat.DATETIME; - } else if (type == Types.VARCHAR) { - return TimeFormat.DATETIME; - } else if (type == Types.DOUBLE || type == Types.FLOAT) { - return TimeFormat.DOUBLE; + switch (type) { + case Types.DATE: + return TimeFormat.DATE; + case Types.TIME: + return TimeFormat.DATETIME; + case Types.TIMESTAMP: + return TimeFormat.DATETIME; + case Types.VARCHAR: + return TimeFormat.DATETIME; + case Types.DOUBLE: + case Types.FLOAT: + return TimeFormat.DOUBLE; + default: + break; } return TimeFormat.DOUBLE; } @@ -368,32 +345,18 @@ private String getDateData(ResultSet rs, int column) throws SQLException { return res; } -// private void injectTimeIntervalProperty(NodeDraft nodeDraft) { -// if (timeIntervalStart != null && timeIntervalEnd != null) { -// nodeDraft.addTimeInterval(timeIntervalStart, timeIntervalEnd, false, false); -// } else if (timeIntervalStart != null && timeIntervalEndOpen != null) { -// nodeDraft.addTimeInterval(timeIntervalStart, timeIntervalEndOpen, false, true); -// } else if (timeIntervalStartOpen != null && timeIntervalEnd != null) { -// nodeDraft.addTimeInterval(timeIntervalStartOpen, timeIntervalEnd, true, false); -// } else if (timeIntervalStartOpen != null && timeIntervalEndOpen != null) { -// nodeDraft.addTimeInterval(timeIntervalStartOpen, timeIntervalEndOpen, true, true); -// } else if (timeIntervalStart != null) { -// nodeDraft.addTimeInterval(timeIntervalStart, null); -// } else if (timeIntervalStartOpen != null) { -// nodeDraft.addTimeInterval(timeIntervalStartOpen, null, true, false); -// } else if (timeIntervalEnd != null) { -// nodeDraft.addTimeInterval(null, timeIntervalEnd); -// } else if (timeIntervalEndOpen != null) { -// nodeDraft.addTimeInterval(null, timeIntervalEndOpen, false, true); -// } -// -// //Reset temp data -// timeIntervalStart = null; -// timeIntervalStartOpen = null; -// timeIntervalEnd = null; -// timeIntervalEndOpen = null; -// } - private void injectEdgeProperty(EdgeProperties p, ResultSet rs, int column, EdgeDraft edgeDraft) throws SQLException { + private void injectTimeIntervalProperty(NodeDraft nodeDraft) { + if (timeIntervalStart != null || timeIntervalEnd != null) { + nodeDraft.addInterval(timeIntervalStart, timeIntervalEnd); + } + + //Reset temp data + timeIntervalStart = null; + timeIntervalEnd = null; + } + + private void injectEdgeProperty(EdgeProperties p, ResultSet rs, int column, EdgeDraft edgeDraft) + throws SQLException { switch (p) { case LABEL: String label = rs.getString(column); @@ -427,6 +390,8 @@ private void injectEdgeProperty(EdgeProperties p, ResultSet rs, int column, Edge String[] rgb = color.split(","); if (rgb.length == 3) { edgeDraft.setColor(rgb[0], rgb[1], rgb[2]); + } else { + edgeDraft.setColor(color); } } break; @@ -441,7 +406,7 @@ private void injectEdgeProperty(EdgeProperties p, ResultSet rs, int column, Edge container.setTimeFormat(getTimeFormat(rs, column)); String startOpen = rs.getString(column); if (startOpen != null) { - timeIntervalStartOpen = startOpen; + timeIntervalStart = startOpen; } break; case END: @@ -455,37 +420,22 @@ private void injectEdgeProperty(EdgeProperties p, ResultSet rs, int column, Edge container.setTimeFormat(getTimeFormat(rs, column)); String endOpen = rs.getString(column); if (endOpen != null) { - timeIntervalEndOpen = endOpen; + timeIntervalEnd = endOpen; } break; } } -// private void injectTimeIntervalProperty(EdgeDraft edgeDraft) { -// if (timeIntervalStart != null && timeIntervalEnd != null) { -// edgeDraft.addTimeInterval(timeIntervalStart, timeIntervalEnd, false, false); -// } else if (timeIntervalStart != null && timeIntervalEndOpen != null) { -// edgeDraft.addTimeInterval(timeIntervalStart, timeIntervalEndOpen, false, true); -// } else if (timeIntervalStartOpen != null && timeIntervalEnd != null) { -// edgeDraft.addTimeInterval(timeIntervalStartOpen, timeIntervalEnd, true, false); -// } else if (timeIntervalStartOpen != null && timeIntervalEndOpen != null) { -// edgeDraft.addTimeInterval(timeIntervalStartOpen, timeIntervalEndOpen, true, true); -// } else if (timeIntervalStart != null) { -// edgeDraft.addTimeInterval(timeIntervalStart, null); -// } else if (timeIntervalStartOpen != null) { -// edgeDraft.addTimeInterval(timeIntervalStartOpen, null, true, false); -// } else if (timeIntervalEnd != null) { -// edgeDraft.addTimeInterval(null, timeIntervalEnd); -// } else if (timeIntervalEndOpen != null) { -// edgeDraft.addTimeInterval(null, timeIntervalEndOpen, false, true); -// } -// -// //Reset temp data -// timeIntervalStart = null; -// timeIntervalStartOpen = null; -// timeIntervalEnd = null; -// timeIntervalEndOpen = null; -// } + private void injectTimeIntervalProperty(EdgeDraft edgeDraft) { + if (timeIntervalStart != null || timeIntervalEnd != null) { + edgeDraft.addInterval(timeIntervalStart, timeIntervalEnd); + } + + //Reset temp data + timeIntervalStart = null; + timeIntervalEnd = null; + } + private void injectElementAttribute(ResultSet rs, int columnIndex, ColumnDraft column, ElementDraft draft) { String elementName; if (draft instanceof NodeDraft) { @@ -499,49 +449,63 @@ private void injectElementAttribute(ResultSet rs, int columnIndex, ColumnDraft c boolean val = rs.getBoolean(columnIndex); draft.setValue(column.getId(), val); } catch (SQLException ex) { - report.logIssue(new Issue("Failed to get a BOOLEAN value for " + elementName + " attribute '" + column.getId() + "'", Issue.Level.SEVERE, ex)); + report.logIssue(new Issue( + "Failed to get a BOOLEAN value for " + elementName + " attribute '" + column.getId() + "'", + Issue.Level.SEVERE, ex)); } } else if (typeClass.equals(Double.class)) { try { double val = rs.getDouble(columnIndex); draft.setValue(column.getId(), val); } catch (SQLException ex) { - report.logIssue(new Issue("Failed to get a DOUBLE value for " + elementName + " attribute '" + column.getId() + "'", Issue.Level.SEVERE, ex)); + report.logIssue( + new Issue("Failed to get a DOUBLE value for " + elementName + " attribute '" + column.getId() + "'", + Issue.Level.SEVERE, ex)); } } else if (typeClass.equals(Float.class)) { try { float val = rs.getFloat(columnIndex); draft.setValue(column.getId(), val); } catch (SQLException ex) { - report.logIssue(new Issue("Failed to get a FLOAT value for " + elementName + " attribute '" + column.getId() + "'", Issue.Level.SEVERE, ex)); + report.logIssue( + new Issue("Failed to get a FLOAT value for " + elementName + " attribute '" + column.getId() + "'", + Issue.Level.SEVERE, ex)); } } else if (typeClass.equals(Integer.class)) { try { int val = rs.getInt(columnIndex); draft.setValue(column.getId(), val); } catch (SQLException ex) { - report.logIssue(new Issue("Failed to get a INT value for " + elementName + " attribute '" + column.getId() + "'", Issue.Level.SEVERE, ex)); + report.logIssue( + new Issue("Failed to get a INT value for " + elementName + " attribute '" + column.getId() + "'", + Issue.Level.SEVERE, ex)); } } else if (typeClass.equals(Long.class)) { try { long val = rs.getLong(columnIndex); draft.setValue(column.getId(), val); } catch (SQLException ex) { - report.logIssue(new Issue("Failed to get a LONG value for " + elementName + " attribute '" + column.getId() + "'", Issue.Level.SEVERE, ex)); + report.logIssue( + new Issue("Failed to get a LONG value for " + elementName + " attribute '" + column.getId() + "'", + Issue.Level.SEVERE, ex)); } } else if (typeClass.equals(Short.class)) { try { short val = rs.getShort(columnIndex); draft.setValue(column.getId(), val); } catch (SQLException ex) { - report.logIssue(new Issue("Failed to get a SHORT value for " + elementName + " attribute '" + column.getId() + "'", Issue.Level.SEVERE, ex)); + report.logIssue( + new Issue("Failed to get a SHORT value for " + elementName + " attribute '" + column.getId() + "'", + Issue.Level.SEVERE, ex)); } } else if (typeClass.equals(Byte.class)) { try { byte val = rs.getByte(columnIndex); draft.setValue(column.getId(), val); } catch (SQLException ex) { - report.logIssue(new Issue("Failed to get a BYTE value for " + elementName + " attribute '" + column.getId() + "'", Issue.Level.SEVERE, ex)); + report.logIssue( + new Issue("Failed to get a BYTE value for " + elementName + " attribute '" + column.getId() + "'", + Issue.Level.SEVERE, ex)); } } else { try { @@ -549,10 +513,14 @@ private void injectElementAttribute(ResultSet rs, int columnIndex, ColumnDraft c if (val != null) { draft.setValue(column.getId(), val); } else { - report.logIssue(new Issue("Failed to get a STRING value for " + elementName + " attribute '" + column.getId() + "'", Issue.Level.WARNING)); + report.logIssue(new Issue( + "Failed to get a STRING value for " + elementName + " attribute '" + column.getId() + "'", + Issue.Level.WARNING)); } } catch (SQLException ex) { - report.logIssue(new Issue("Failed to get a STRING value for " + elementName + " attribute '" + column.getId() + "'", Issue.Level.SEVERE, ex)); + report.logIssue( + new Issue("Failed to get a STRING value for " + elementName + " attribute '" + column.getId() + "'", + Issue.Level.SEVERE, ex)); } } } @@ -619,20 +587,22 @@ private Class findTypeClass(ResultSetMetaData metaData, int columnIndex) throws type = Float.class; break; default: - report.logIssue(new Issue("Unknown SQL Type " + metaData.getColumnType(columnIndex + 1) + ", STRING used.", Issue.Level.WARNING)); + report.logIssue( + new Issue("Unknown SQL Type " + metaData.getColumnType(columnIndex + 1) + ", STRING used.", + Issue.Level.WARNING)); break; } return type; } @Override - public void setDatabase(Database database) { - this.database = (EdgeListDatabaseImpl) database; + public Database getDatabase() { + return database; } @Override - public Database getDatabase() { - return database; + public void setDatabase(Database database) { + this.database = (EdgeListDatabaseImpl) database; } @Override diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/database/NodeColumns.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/database/NodeColumns.java new file mode 100644 index 0000000000..e2aead679f --- /dev/null +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/database/NodeColumns.java @@ -0,0 +1,46 @@ +package org.gephi.io.importer.plugin.database; + +import java.sql.ResultSet; +import java.sql.ResultSetMetaData; +import java.sql.SQLException; +import org.gephi.io.importer.api.ElementDraft; +import org.gephi.io.importer.api.NodeDraft; +import org.gephi.io.importer.api.PropertiesAssociations; + +class NodeColumns { + + int findIdIndex(final ResultSetMetaData metaData, final PropertiesAssociations properties) throws SQLException { + int result = -1; + for (int i = 1; i <= metaData.getColumnCount(); ++i) { + String columnLabel = metaData.getColumnLabel(i); + PropertiesAssociations.NodeProperties p = properties.getNodeProperty(columnLabel); + if (PropertiesAssociations.NodeProperties.ID.equals(p)) { + result = i; + break; + } + } + return result; + } + + NodeDraft getNodeDraft(final ElementDraft.Factory factory, final ResultSet rs, final int idColumn) + throws SQLException { + String id = getIdValue(rs, idColumn); + + final NodeDraft node; + if (id == null) { + node = factory.newNodeDraft(); + } else { + node = factory.newNodeDraft(id); + } + return node; + } + + private String getIdValue(final ResultSet rs, final int idColumn) throws SQLException { + if (idColumn == -1) { + return null; + } + + return rs.getString(idColumn); + } + +} diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderCSV.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderCSV.java deleted file mode 100644 index c47b790a7c..0000000000 --- a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderCSV.java +++ /dev/null @@ -1,81 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.io.importer.plugin.file; - -import org.gephi.io.importer.api.FileType; -import org.gephi.io.importer.spi.FileImporter; -import org.gephi.io.importer.spi.FileImporterBuilder; -import org.openide.filesystems.FileObject; -import org.openide.util.NbBundle; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = FileImporterBuilder.class) -public final class ImporterBuilderCSV implements FileImporterBuilder { - - public static final String IDENTIFER = "csv"; - - @Override - public FileImporter buildImporter() { - return new ImporterCSV(); - } - - @Override - public String getName() { - return IDENTIFER; - } - - @Override - public FileType[] getFileTypes() { - FileType ft = new FileType(".csv", NbBundle.getMessage(getClass(), "fileType_CSV_Name")); - FileType ft2 = new FileType(".edges", NbBundle.getMessage(getClass(), "fileType_Edges_Name")); - return new FileType[]{ft, ft2}; - } - - @Override - public boolean isMatchingImporter(FileObject fileObject) { - return fileObject.getExt().equalsIgnoreCase("csv") || fileObject.getExt().equalsIgnoreCase("edges"); - } -} diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderDL.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderDL.java index 7d3c42d87e..34bd24cfb3 100644 --- a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderDL.java +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderDL.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.plugin.file; import org.gephi.io.importer.api.FileType; @@ -49,7 +50,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = FileImporterBuilder.class) @@ -70,7 +70,7 @@ public String getName() { @Override public FileType[] getFileTypes() { FileType ft = new FileType(".dl", NbBundle.getMessage(getClass(), "fileType_DL_Name")); - return new FileType[]{ft}; + return new FileType[] {ft}; } @Override diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderDOT.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderDOT.java index 69c7641d5b..fd8e269829 100644 --- a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderDOT.java +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderDOT.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.plugin.file; import org.gephi.io.importer.api.FileType; @@ -49,7 +50,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = FileImporterBuilder.class) @@ -69,8 +69,9 @@ public String getName() { @Override public FileType[] getFileTypes() { - FileType ft = new FileType(new String[]{".dot", ".gv"}, NbBundle.getMessage(getClass(), "fileType_GraphViz_Name")); - return new FileType[]{ft}; + FileType ft = + new FileType(new String[] {".dot", ".gv"}, NbBundle.getMessage(getClass(), "fileType_GraphViz_Name")); + return new FileType[] {ft}; } @Override diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderGDF.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderGDF.java index 192766cfd8..90640ccccb 100644 --- a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderGDF.java +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderGDF.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.plugin.file; import org.gephi.io.importer.api.FileType; @@ -49,7 +50,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = FileImporterBuilder.class) @@ -70,7 +70,7 @@ public String getName() { @Override public FileType[] getFileTypes() { FileType ft = new FileType(".gdf", NbBundle.getMessage(getClass(), "fileType_GDF_Name")); - return new FileType[]{ft}; + return new FileType[] {ft}; } @Override diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderGEXF.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderGEXF.java index ded3ff2983..4eb147f959 100644 --- a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderGEXF.java +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderGEXF.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.plugin.file; import org.gephi.io.importer.api.FileType; @@ -49,7 +50,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = FileImporterBuilder.class) @@ -70,7 +70,7 @@ public String getName() { @Override public FileType[] getFileTypes() { FileType ft = new FileType(".gexf", NbBundle.getMessage(getClass(), "fileType_GEXF_Name")); - return new FileType[]{ft}; + return new FileType[] {ft}; } @Override diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderGML.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderGML.java index cb83330502..be9b74ee37 100644 --- a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderGML.java +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderGML.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.plugin.file; import org.gephi.io.importer.api.FileType; @@ -49,7 +50,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = FileImporterBuilder.class) @@ -70,7 +70,7 @@ public String getName() { @Override public FileType[] getFileTypes() { FileType ft = new FileType(".gml", NbBundle.getMessage(getClass(), "fileType_GML_Name")); - return new FileType[]{ft}; + return new FileType[] {ft}; } @Override diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderGraphML.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderGraphML.java index b8eea536c6..7c9d193e6d 100644 --- a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderGraphML.java +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderGraphML.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.plugin.file; import org.gephi.io.importer.api.FileType; @@ -49,7 +50,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = FileImporterBuilder.class) @@ -70,7 +70,7 @@ public String getName() { @Override public FileType[] getFileTypes() { FileType ft = new FileType(".graphml", NbBundle.getMessage(getClass(), "fileType_GraphML_Name")); - return new FileType[]{ft}; + return new FileType[] {ft}; } @Override diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderPajek.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderPajek.java index 607b8fafed..9fe9622a43 100644 --- a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderPajek.java +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderPajek.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.plugin.file; import org.gephi.io.importer.api.FileType; @@ -49,7 +50,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = FileImporterBuilder.class) @@ -70,7 +70,7 @@ public String getName() { @Override public FileType[] getFileTypes() { FileType ft = new FileType(".net", NbBundle.getMessage(getClass(), "fileType_NET_Name")); - return new FileType[]{ft}; + return new FileType[] {ft}; } @Override diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderTGF.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderTGF.java index c007e10640..079e92ce63 100644 --- a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderTGF.java +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderTGF.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.plugin.file; import org.gephi.io.importer.api.FileType; @@ -49,7 +50,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author rlfnb */ @ServiceProvider(service = FileImporterBuilder.class) @@ -70,7 +70,7 @@ public String getName() { @Override public FileType[] getFileTypes() { FileType ft = new FileType(".tgf", NbBundle.getMessage(getClass(), "fileType_TGF_Name")); - return new FileType[]{ft}; + return new FileType[] {ft}; } @Override diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderTLP.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderTLP.java index 0a81ba98b7..0a7099cac4 100644 --- a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderTLP.java +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderTLP.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.plugin.file; import org.gephi.io.importer.api.FileType; @@ -49,7 +50,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = FileImporterBuilder.class) @@ -70,7 +70,7 @@ public String getName() { @Override public FileType[] getFileTypes() { FileType ft = new FileType(".tlp", NbBundle.getMessage(getClass(), "fileType_TLP_Name")); - return new FileType[]{ft}; + return new FileType[] {ft}; } @Override diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderVNA.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderVNA.java index 48cea43a2b..633d14b6e0 100644 --- a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderVNA.java +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterBuilderVNA.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.plugin.file; import org.gephi.io.importer.api.FileType; @@ -69,7 +70,7 @@ public String getName() { @Override public FileType[] getFileTypes() { FileType ft = new FileType(".vna", NbBundle.getMessage(getClass(), "fileType_VNA_Name")); - return new FileType[]{ft}; + return new FileType[] {ft}; } @Override diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterCSV.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterCSV.java deleted file mode 100644 index 2ef820a1e8..0000000000 --- a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterCSV.java +++ /dev/null @@ -1,247 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian , Sebastien Heymann - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.io.importer.plugin.file; - -import java.io.LineNumberReader; -import java.io.Reader; -import java.util.ArrayList; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import org.gephi.io.importer.api.ContainerLoader; -import org.gephi.io.importer.api.EdgeDraft; -import org.gephi.io.importer.api.ImportUtils; -import org.gephi.io.importer.api.NodeDraft; -import org.gephi.io.importer.api.Report; -import org.gephi.io.importer.spi.FileImporter; -import org.gephi.utils.longtask.spi.LongTask; -import org.gephi.utils.progress.Progress; -import org.gephi.utils.progress.ProgressTicket; - -/** - * - * @author Mathieu Bastian, Sebastien Heymann - */ -public class ImporterCSV implements FileImporter, LongTask { - - //Architecture - private Reader reader; - private ContainerLoader container; - private Report report; - private ProgressTicket progressTicket; - private boolean cancel = false; - - @Override - public boolean execute(ContainerLoader container) { - this.container = container; - this.report = new Report(); - LineNumberReader lineReader = ImportUtils.getTextReader(reader); - try { - importData(lineReader); - } catch (Exception e) { - throw new RuntimeException(e); - } - return !cancel; - } - - private void importData(LineNumberReader reader) throws Exception { - Progress.start(progressTicket); //Progress - - List lines = new ArrayList(); - for (; reader.ready();) { - String line = reader.readLine(); - if (line != null && !line.isEmpty()) { - lines.add(line); - } - } - - Progress.switchToDeterminate(progressTicket, lines.size()); - - //Magix regex - Pattern pattern = Pattern.compile("(?<=(?:,|;|\\s|^)\")(.*?)(?=(?<=(?:[^\\\\]))\",|;|\"\\s|\"$)|(?<=(?:,|;|\\s|^)')(.*?)(?=(?<=(?:[^\\\\]))',|;|'\\s|'$)|(?<=(?:,|;|\\s|^))(?=[^'\"])(.*?)(?=(?:,|;|\\s|$))|(?<=,|;)($)"); - - if (lines.get(0).startsWith(";")) { //Matrix - //Fill the Labels array - String line0 = lines.get(0); - line0 = line0.substring(1, line0.length()); - lines.remove(0); - Matcher m = pattern.matcher(line0); //Remove the first ";" - List labels = new ArrayList(); - while (m.find()) { - int start = m.start(); - int end = m.end(); - if (start != end) { - String data = line0.substring(start, end); - data = data.trim(); - if (!data.isEmpty() && !data.toLowerCase().equals("null")) { - labels.add(data); - } - } - } - - int size = lines.size(); - if (size != labels.size()) { - throw new Exception("Inconsistent number of matrix lines compared to the number of labels."); - } - - for (int i = 0; i < size; i++) { - if (cancel) { - return; - } - String line = lines.get(i); - m = pattern.matcher(line); - int count = -1; - String sourceID = ""; - while (m.find()) { - int start = m.start(); - int end = m.end(); - if (start != end) { - String data = line.substring(start, end); - data = data.trim(); - if (!data.isEmpty() && !data.toLowerCase().equals("null")) { - if (count == -1) { - sourceID = data; - addNode(sourceID, labels.get(i)); - } else if (!data.equals("0")) { - //Create Edge - addEdge(sourceID, labels.get(count), Float.parseFloat(data)); - } - } - } - count++; - } - Progress.progress(progressTicket); //Progress - } - } else { //Edge or Adjacency list - Matcher m; - for (String line : lines) { - if (cancel) { - return; - } - m = pattern.matcher(line); - int count = 0; - String sourceID = ""; - while (m.find()) { - int start = m.start(); - int end = m.end(); - if (start != end) { - String data = line.substring(start, end); - data = data.trim(); - if (!data.isEmpty() && !data.toLowerCase().equals("null")) { - if (count == 0) { - sourceID = data; - addNode(sourceID, data); - } else { - //Create Edge - addEdge(sourceID, data); - } - } - } - count++; - } - Progress.progress(progressTicket); //Progress - } - } - - } - - private void addNode(String id, String label) { - NodeDraft node; - if (!container.nodeExists(id)) { - node = container.factory().newNodeDraft(id); - node.setLabel(label); - container.addNode(node); - } - } - - private void addEdge(String source, String target) { - addEdge(source, target, 1); - } - - private void addEdge(String source, String target, float weight) { - NodeDraft sourceNode; - if (!container.nodeExists(source)) { - sourceNode = container.factory().newNodeDraft(source); - container.addNode(sourceNode); - } else { - sourceNode = container.getNode(source); - } - NodeDraft targetNode; - if (!container.nodeExists(target)) { - targetNode = container.factory().newNodeDraft(target); - container.addNode(targetNode); - } else { - targetNode = container.getNode(target); - } - EdgeDraft edge = container.factory().newEdgeDraft(); - edge.setSource(sourceNode); - edge.setTarget(targetNode); - edge.setWeight(weight); - container.addEdge(edge); - } - - @Override - public void setReader(Reader reader) { - this.reader = reader; - } - - @Override - public ContainerLoader getContainer() { - return container; - } - - @Override - public Report getReport() { - return report; - } - - @Override - public boolean cancel() { - cancel = true; - return true; - } - - @Override - public void setProgressTicket(ProgressTicket progressTicket) { - this.progressTicket = progressTicket; - } -} diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterDL.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterDL.java index a09c2d9a84..0185541160 100644 --- a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterDL.java +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterDL.java @@ -39,8 +39,10 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.plugin.file; +import java.io.IOException; import java.io.LineNumberReader; import java.io.Reader; import java.util.ArrayList; @@ -61,16 +63,10 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class ImporterDL implements FileImporter, LongTask { - //enum - private enum Format { - - FULLMATRIX, EDGELIST1 - }; //Architecture private Reader reader; private ContainerLoader container; @@ -93,6 +89,11 @@ public boolean execute(ContainerLoader container) { importData(lineReader); } catch (Exception e) { throw new RuntimeException(e); + } finally { + try { + lineReader.close(); + } catch (IOException ex) { + } } return !cancel; } @@ -100,8 +101,8 @@ public boolean execute(ContainerLoader container) { private void importData(LineNumberReader reader) throws Exception { Progress.start(progressTicket); //Progress - List lines = new ArrayList(); - for (; reader.ready();) { + List lines = new ArrayList<>(); + for (; reader.ready(); ) { String line = reader.readLine(); if (line != null && !line.isEmpty()) { lines.add(line); @@ -109,10 +110,11 @@ private void importData(LineNumberReader reader) throws Exception { } if (lines.isEmpty() || (!lines.get(0).startsWith("DL") && !lines.get(0).startsWith("dl"))) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDL.class, "importerDL_error_firstline"), Issue.Level.CRITICAL)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterDL.class, "importerDL_error_firstline"), Issue.Level.CRITICAL)); } - headerMap = new HashMap(); + headerMap = new HashMap<>(); readHeaderLine(lines.get(0).substring(2)); int i = 1; @@ -140,7 +142,8 @@ private void importData(LineNumberReader reader) throws Exception { } } if (dataLineStart == -1) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDL.class, "importerDL_error_nodata"), Issue.Level.SEVERE)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterDL.class, "importerDL_error_nodata"), Issue.Level.SEVERE)); } else if (lines.size() > dataLineStart) { dataLineStartDelta = dataLineStart + 1; lines = lines.subList(dataLineStart, lines.size()); @@ -158,7 +161,7 @@ private void readHeaderLine(String line) { StringTokenizer firstLineTokenizer = new StringTokenizer(line, " ,;"); while (firstLineTokenizer.hasMoreTokens()) { String tag = firstLineTokenizer.nextToken().toLowerCase(); - if (tag.indexOf("=") != -1) { + if (tag.contains("=")) { headerMap.put(tag.substring(0, tag.indexOf("=")).trim(), tag.substring(tag.indexOf("=") + 1).trim()); } else { //report.logIssue(new Issue(NbBundle.getMessage(ImporterDL.class, "importerDL_error_unknowntag", tag), Issue.Level.WARNING)); @@ -168,11 +171,13 @@ private void readHeaderLine(String line) { private void computeHeaders() { //read format - String form = (String) headerMap.get("format"); + String form = headerMap.get("format"); if (form == null) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDL.class, "importerDL_error_formatmissing"), Issue.Level.INFO)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterDL.class, "importerDL_error_formatmissing"), Issue.Level.INFO)); } else if (!form.equals("edgelist1") && !form.equals("fullmatrix")) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDL.class, "importerDL_error_badformat", form), Issue.Level.SEVERE)); + report.logIssue(new Issue(NbBundle.getMessage(ImporterDL.class, "importerDL_error_badformat", form), + Issue.Level.SEVERE)); } else if (form.equals("edgelist1")) { format = Format.EDGELIST1; } else if (form.equals("fullmatrix")) { @@ -181,19 +186,21 @@ private void computeHeaders() { // read number of nodes try { - String nArg = (String) headerMap.get("n"); + String nArg = headerMap.get("n"); numNodes = Integer.parseInt(nArg); } catch (Exception e) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDL.class, "importerDL_error_nmissing"), Issue.Level.SEVERE)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterDL.class, "importerDL_error_nmissing"), Issue.Level.SEVERE)); } // read number matricies - String mats = (String) headerMap.get("nm"); + String mats = headerMap.get("nm"); if (mats != null) { try { numMatricies = Integer.parseInt(mats); } catch (Exception e) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDL.class, "importerDL_error_mmissing"), Issue.Level.SEVERE)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterDL.class, "importerDL_error_mmissing"), Issue.Level.SEVERE)); } } else { numMatricies = 1; @@ -204,7 +211,9 @@ private void readLabels(String labels) { StringTokenizer labelkonizer = new StringTokenizer(labels, ","); // check that there are the right number of labels if (labelkonizer.countTokens() != numNodes) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDL.class, "importerDL_error_labelscount", labelkonizer.countTokens(), numNodes), Issue.Level.SEVERE)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterDL.class, "importerDL_error_labelscount", labelkonizer.countTokens(), numNodes), + Issue.Level.SEVERE)); } int nodeCount = 0; while (labelkonizer.hasMoreTokens()) { @@ -225,17 +234,23 @@ private void readeMatrixBlock(List data) { readMatrixRow(data.get(i), i, rowNum, startTime, startTime + 1); rowNum++; } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDL.class, "importerDL_error_matrixrowscount", rowNum, numNodes), Issue.Level.SEVERE)); + report.logIssue(new Issue( + NbBundle.getMessage(ImporterDL.class, "importerDL_error_matrixrowscount", rowNum, numNodes), + Issue.Level.SEVERE)); break; } } if (rowNum < numNodes) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDL.class, "importerDL_error_matrixrowscount2", rowNum, numNodes), Issue.Level.SEVERE)); + report.logIssue(new Issue( + NbBundle.getMessage(ImporterDL.class, "importerDL_error_matrixrowscount2", rowNum, numNodes), + Issue.Level.SEVERE)); } startTime++; } if (startTime != numMatricies) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDL.class, "importerDL_error_matriciescount", startTime, numMatricies), Issue.Level.SEVERE)); + report.logIssue(new Issue( + NbBundle.getMessage(ImporterDL.class, "importerDL_error_matriciescount", startTime, numMatricies), + Issue.Level.SEVERE)); } } @@ -245,14 +260,18 @@ private void readMatrixRow(String line, int pointer, int row, int startTime, int int to = 1; double weight = 0; while (rowkonizer.hasMoreTokens()) { - String toParse = (String) rowkonizer.nextToken(); + String toParse = rowkonizer.nextToken(); if (to > numNodes) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDL.class, "importerDL_error_matrixentriescount", row, startTime, getLineNumber(pointer)), Issue.Level.SEVERE)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterDL.class, "importerDL_error_matrixentriescount", row, startTime, + getLineNumber(pointer)), Issue.Level.SEVERE)); } try { weight = Double.parseDouble(toParse); } catch (Exception e) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDL.class, "importerDL_error_weightparseerror", toParse, startTime, getLineNumber(pointer)), Issue.Level.SEVERE)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterDL.class, "importerDL_error_weightparseerror", toParse, startTime, + getLineNumber(pointer)), Issue.Level.SEVERE)); } if (weight != 0) { @@ -278,7 +297,9 @@ private void readEdgelistBlock(List data) { startTime++; } if (startTime != numMatricies) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDL.class, "importerDL_error_edgelistssetscount", startTime, numMatricies), Issue.Level.SEVERE)); + report.logIssue(new Issue( + NbBundle.getMessage(ImporterDL.class, "importerDL_error_edgelistssetscount", startTime, numMatricies), + Issue.Level.SEVERE)); } } @@ -300,7 +321,9 @@ private void readEdgelistRow(String row, int pointer, double startTime, double e try { weight = Double.parseDouble(weightParse); } catch (Exception e) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDL.class, "importerDL_error_edgeparseweight", weightParse, getLineNumber(pointer)), Issue.Level.WARNING)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterDL.class, "importerDL_error_edgeparseweight", weightParse, + getLineNumber(pointer)), Issue.Level.WARNING)); } } @@ -342,4 +365,10 @@ public boolean cancel() { public void setProgressTicket(ProgressTicket progressTicket) { this.progressTicket = progressTicket; } + + //enum + private enum Format { + + FULLMATRIX, EDGELIST1 + } } diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterDOT.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterDOT.java index fe4f033ad4..ad1f2209a0 100644 --- a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterDOT.java +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterDOT.java @@ -39,14 +39,14 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.plugin.file; import java.awt.Color; +import java.io.IOException; import java.io.LineNumberReader; import java.io.Reader; import java.io.StreamTokenizer; -import java.util.HashMap; -import java.util.Map; import org.gephi.io.importer.api.ContainerLoader; import org.gephi.io.importer.api.EdgeDirectionDefault; import org.gephi.io.importer.api.EdgeDraft; @@ -55,6 +55,7 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.io.importer.api.NodeDraft; import org.gephi.io.importer.api.Report; import org.gephi.io.importer.spi.FileImporter; +import org.gephi.utils.StreamTokenizerWithMultilineLiterals; import org.gephi.utils.longtask.spi.LongTask; import org.gephi.utils.progress.Progress; import org.gephi.utils.progress.ProgressTicket; @@ -69,16 +70,8 @@ public class ImporterDOT implements FileImporter, LongTask { private ProgressTicket progressTicket; private boolean cancel = false; //Data - private Map colorTable = new HashMap(); private String graphName = ""; - private static class ParseException extends RuntimeException { - - public ParseException() { - super("Parse error while parsing DOT file"); - } - } - @Override public boolean execute(ContainerLoader container) { this.container = container; @@ -88,6 +81,11 @@ public boolean execute(ContainerLoader container) { importData(lineReader); } catch (Exception e) { throw new RuntimeException(e); + } finally { + try { + lineReader.close(); + } catch (IOException ex) { + } } return !cancel; } @@ -95,25 +93,26 @@ public boolean execute(ContainerLoader container) { private void importData(LineNumberReader reader) throws Exception { Progress.start(progressTicket); - initColorTable(); - StreamTokenizer streamTokenizer = new StreamTokenizer(reader); + StreamTokenizerWithMultilineLiterals streamTokenizer = new StreamTokenizerWithMultilineLiterals(reader); setSyntax(streamTokenizer); graph(streamTokenizer); } - protected void setSyntax(StreamTokenizer tk) { + protected void setSyntax(StreamTokenizerWithMultilineLiterals tk) { tk.resetSyntax(); tk.eolIsSignificant(false); + tk.commentChar('#'); tk.slashStarComments(true); tk.slashSlashComments(true); tk.whitespaceChars(0, ' '); - tk.wordChars(' ' + 1, '\u00ff'); + tk.wordChars(' ' + 1, '#' - 1); + tk.wordChars('#' + 1, '\u00ff'); + tk.ordinaryChar('-'); tk.ordinaryChar('['); tk.ordinaryChar(']'); tk.ordinaryChar('{'); tk.ordinaryChar('}'); - tk.ordinaryChar('-'); tk.ordinaryChar('>'); tk.ordinaryChar('/'); tk.ordinaryChar('*'); @@ -123,13 +122,16 @@ protected void setSyntax(StreamTokenizer tk) { tk.ordinaryChar('='); } - protected void graph(StreamTokenizer streamTokenizer) throws Exception { + protected void graph(StreamTokenizerWithMultilineLiterals streamTokenizer) throws Exception { boolean found = false; while (streamTokenizer.nextToken() != StreamTokenizer.TT_EOF) { if (streamTokenizer.ttype == StreamTokenizer.TT_WORD) { - if (streamTokenizer.sval.equalsIgnoreCase("digraph") || streamTokenizer.sval.equalsIgnoreCase("graph")) { + if (streamTokenizer.sval.equalsIgnoreCase("digraph") || + streamTokenizer.sval.equalsIgnoreCase("graph")) { found = true; - container.setEdgeDefault(streamTokenizer.sval.equalsIgnoreCase("digraph") ? EdgeDirectionDefault.DIRECTED : EdgeDirectionDefault.UNDIRECTED); + container.setEdgeDefault( + streamTokenizer.sval.equalsIgnoreCase("digraph") ? EdgeDirectionDefault.DIRECTED : + EdgeDirectionDefault.UNDIRECTED); streamTokenizer.nextToken(); if (streamTokenizer.ttype == StreamTokenizer.TT_WORD) { graphName = streamTokenizer.sval; @@ -147,22 +149,41 @@ protected void graph(StreamTokenizer streamTokenizer) throws Exception { } } if (!found) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDOT.class, "importerDOT_error_nothingfound"), Issue.Level.SEVERE)); + report.logIssue(new Issue(NbBundle.getMessage(ImporterDOT.class, "importerDOT_error_nothingfound"), + Issue.Level.SEVERE)); } } - protected void stmtList(StreamTokenizer streamTokenizer) throws Exception { + protected void stmtList(StreamTokenizerWithMultilineLiterals streamTokenizer) throws Exception { do { streamTokenizer.nextToken(); stmt(streamTokenizer); } while (streamTokenizer.ttype != StreamTokenizer.TT_EOF); } - protected void stmt(StreamTokenizer streamTokenizer) throws Exception { + protected void stmt(StreamTokenizerWithMultilineLiterals streamTokenizer) throws Exception { //tk.nextToken(); - if (streamTokenizer.sval == null || streamTokenizer.sval.equalsIgnoreCase("graph") || streamTokenizer.sval.equalsIgnoreCase("node") - || streamTokenizer.sval.equalsIgnoreCase("edge")) { + if (streamTokenizer.sval == null) { + } else if (streamTokenizer.sval.equalsIgnoreCase("node") + || streamTokenizer.sval.equalsIgnoreCase("edge") + || streamTokenizer.sval.equalsIgnoreCase("graph")) { + // attr_stmt: (node | edge | graph) attr_list β€” skip the attribute list + streamTokenizer.nextToken(); + if (streamTokenizer.ttype == '[') { + skipAttributeList(streamTokenizer); + } else { + streamTokenizer.pushBack(); + } + } else if (streamTokenizer.sval.equalsIgnoreCase("subgraph")) { + // subgraph [ID] '{' stmt_list '}' β€” skip to the opening brace; contents + // are processed by the surrounding stmtList loop and '}' is ignored + while (streamTokenizer.ttype != '{') { + streamTokenizer.nextToken(); + if (streamTokenizer.ttype == StreamTokenizer.TT_EOF) { + return; + } + } } else { String nodeId = nodeID(streamTokenizer); streamTokenizer.nextToken(); @@ -173,6 +194,13 @@ protected void stmt(StreamTokenizer streamTokenizer) throws Exception { } else if (streamTokenizer.ttype == '[') { NodeDraft nodeDraft = getOrCreateNode(nodeId); nodeAttributes(streamTokenizer, nodeDraft); + // attr_list may chain: node_id [attr1=val1] [attr2=val2] + streamTokenizer.nextToken(); + while (streamTokenizer.ttype == '[') { + nodeAttributes(streamTokenizer, nodeDraft); + streamTokenizer.nextToken(); + } + streamTokenizer.pushBack(); } else { getOrCreateNode(nodeId); streamTokenizer.pushBack(); @@ -180,9 +208,10 @@ protected void stmt(StreamTokenizer streamTokenizer) throws Exception { } } - protected String nodeID(StreamTokenizer streamTokenizer) { - if (streamTokenizer.ttype == '"' || streamTokenizer.ttype == StreamTokenizer.TT_WORD || (streamTokenizer.ttype >= 'a' && streamTokenizer.ttype <= 'z') - || (streamTokenizer.ttype >= 'A' && streamTokenizer.ttype <= 'Z')) { + protected String nodeID(StreamTokenizerWithMultilineLiterals streamTokenizer) { + if (streamTokenizer.ttype == '"' || streamTokenizer.ttype == StreamTokenizer.TT_WORD || + (streamTokenizer.ttype >= 'a' && streamTokenizer.ttype <= 'z') + || (streamTokenizer.ttype >= 'A' && streamTokenizer.ttype <= 'Z')) { return streamTokenizer.sval; } else { return null; @@ -198,48 +227,92 @@ protected NodeDraft getOrCreateNode(String id) { return container.getNode(id); } - protected Color parseColor(StreamTokenizer streamTokenizer) throws Exception { - if (streamTokenizer.ttype == '#') { + private String readValue(StreamTokenizerWithMultilineLiterals streamTokenizer) throws IOException { + if (streamTokenizer.ttype == StreamTokenizer.TT_WORD || streamTokenizer.ttype == '"') { + return streamTokenizer.sval; + } else if (streamTokenizer.ttype == '-') { streamTokenizer.nextToken(); - return new Color(Integer.parseInt(streamTokenizer.sval, 16), true); - } else if (streamTokenizer.ttype == '"' && streamTokenizer.sval.startsWith("#")) { - return new Color(Integer.parseInt(streamTokenizer.sval.substring(1), 16), true); - } else if (streamTokenizer.ttype != StreamTokenizer.TT_WORD && streamTokenizer.ttype != '"') { - throw new ParseException(); - } else if (colorTable.containsKey(streamTokenizer.sval)) { - return colorTable.get(streamTokenizer.sval); - } else { - String[] colors = streamTokenizer.sval.split(" "); - if (colors.length != 3) { - colors = streamTokenizer.sval.split(","); + if (streamTokenizer.ttype == StreamTokenizer.TT_WORD) { + return "-" + streamTokenizer.sval; } - if (colors.length != 3) { - throw new ParseException(); + streamTokenizer.pushBack(); + } + return null; + } + + /** + * Skips an attr_list starting after the opening '[' has been consumed. + * Handles chained attr_lists (e.g. [shape=box][color=red]). + */ + private void skipAttributeList(StreamTokenizerWithMultilineLiterals streamTokenizer) throws IOException { + int depth = 1; + while (depth > 0) { + streamTokenizer.nextToken(); + if (streamTokenizer.ttype == StreamTokenizer.TT_EOF) { + return; + } else if (streamTokenizer.ttype == '[') { + depth++; + } else if (streamTokenizer.ttype == ']') { + depth--; } + } + // attr_list may chain: '[' a_list ']' attr_list + streamTokenizer.nextToken(); + if (streamTokenizer.ttype == '[') { + skipAttributeList(streamTokenizer); + } else { + streamTokenizer.pushBack(); + } + } - return Color.getHSBColor(Float.parseFloat(colors[0]), Float.parseFloat(colors[1]), Float.parseFloat(colors[2])); + protected Color parseColor(StreamTokenizerWithMultilineLiterals streamTokenizer) throws Exception { + String colorStr = readValue(streamTokenizer); + if (colorStr == null) { + throw new ParseException(); + } + if (colorStr.startsWith("#")) { + return new Color(Integer.parseInt(colorStr.substring(1), 16), true); } + Color namedColor = ImportUtils.parseColor(colorStr); + if (namedColor != null) { + return namedColor; + } + String toParse = colorStr.replace(", ", ","); + String[] colors = toParse.split(" "); + if (colors.length != 3) { + colors = toParse.split(","); + } + if (colors.length != 3) { + throw new ParseException(); + } + return Color.getHSBColor(Float.parseFloat(colors[0]), Float.parseFloat(colors[1]), Float.parseFloat(colors[2])); } - protected void nodeAttributes(StreamTokenizer streamTokenizer, final NodeDraft nodeDraft) throws Exception { + protected void nodeAttributes(StreamTokenizerWithMultilineLiterals streamTokenizer, final NodeDraft nodeDraft) + throws Exception { streamTokenizer.nextToken(); if (streamTokenizer.ttype == ']' || streamTokenizer.ttype == StreamTokenizer.TT_EOF) { return; - } else if (streamTokenizer.ttype == StreamTokenizer.TT_WORD) { + } else if (streamTokenizer.ttype == StreamTokenizer.TT_WORD || streamTokenizer.ttype == '"') { if (streamTokenizer.sval.equalsIgnoreCase("label")) { streamTokenizer.nextToken(); if (streamTokenizer.ttype == '=') { streamTokenizer.nextToken(); - if (streamTokenizer.ttype == StreamTokenizer.TT_WORD || streamTokenizer.ttype == '"') { - nodeDraft.setLabel(streamTokenizer.sval); + String label = readValue(streamTokenizer); + if (label != null) { + nodeDraft.setLabel(label); } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDOT.class, "importerDOT_error_labelunreachable", streamTokenizer.lineno()), Issue.Level.WARNING)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterDOT.class, "importerDOT_error_labelunreachable", + streamTokenizer.lineno()), Issue.Level.WARNING)); streamTokenizer.pushBack(); } } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDOT.class, "importerDOT_error_labelunreachable", streamTokenizer.lineno()), Issue.Level.WARNING)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterDOT.class, "importerDOT_error_labelunreachable", streamTokenizer.lineno()), + Issue.Level.WARNING)); streamTokenizer.pushBack(); } } else if (streamTokenizer.sval.equalsIgnoreCase("color")) { @@ -249,20 +322,25 @@ protected void nodeAttributes(StreamTokenizer streamTokenizer, final NodeDraft n try { nodeDraft.setColor(parseColor(streamTokenizer)); } catch (ParseException e) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDOT.class, "importerDOT_error_colorunreachable", streamTokenizer.lineno()), Issue.Level.WARNING)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterDOT.class, "importerDOT_error_colorunreachable", + streamTokenizer.lineno()), Issue.Level.WARNING)); streamTokenizer.pushBack(); } } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDOT.class, "importerDOT_error_colorunreachable", streamTokenizer.lineno()), Issue.Level.WARNING)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterDOT.class, "importerDOT_error_colorunreachable", streamTokenizer.lineno()), + Issue.Level.WARNING)); streamTokenizer.pushBack(); } } else if (streamTokenizer.sval.equalsIgnoreCase("pos")) { streamTokenizer.nextToken(); if (streamTokenizer.ttype == '=') { streamTokenizer.nextToken(); - if (streamTokenizer.ttype == StreamTokenizer.TT_WORD || streamTokenizer.ttype == '"') { + String posValue = readValue(streamTokenizer); + if (posValue != null) { try { - String[] positions = streamTokenizer.sval.split(","); + String[] positions = posValue.split(","); if (positions.length == 2) { nodeDraft.setX(Float.parseFloat(positions[0])); nodeDraft.setY(Float.parseFloat(positions[1])); @@ -274,24 +352,25 @@ protected void nodeAttributes(StreamTokenizer streamTokenizer, final NodeDraft n } catch (Exception e) { } } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDOT.class, "importerDOT_error_posunreachable", streamTokenizer.lineno()), Issue.Level.WARNING)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterDOT.class, "importerDOT_error_posunreachable", + streamTokenizer.lineno()), Issue.Level.WARNING)); streamTokenizer.pushBack(); } } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDOT.class, "importerDOT_error_posunreachable", streamTokenizer.lineno()), Issue.Level.WARNING)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterDOT.class, "importerDOT_error_posunreachable", streamTokenizer.lineno()), + Issue.Level.WARNING)); streamTokenizer.pushBack(); } } else if (streamTokenizer.sval.equalsIgnoreCase("style")) { streamTokenizer.nextToken(); if (streamTokenizer.ttype == '=') { streamTokenizer.nextToken(); - if (streamTokenizer.ttype == StreamTokenizer.TT_WORD || streamTokenizer.ttype == '"') { - } else { - //System.err.println("couldn't find style at line " + streamTokenizer.lineno()); + if (readValue(streamTokenizer) == null) { streamTokenizer.pushBack(); } } else { - //System.err.println("couldn't find style at line " + streamTokenizer.lineno()); streamTokenizer.pushBack(); } } else { @@ -300,11 +379,9 @@ protected void nodeAttributes(StreamTokenizer streamTokenizer, final NodeDraft n streamTokenizer.nextToken(); if (streamTokenizer.ttype == '=') { streamTokenizer.nextToken(); - if (streamTokenizer.ttype == StreamTokenizer.TT_WORD || streamTokenizer.ttype == '"') { - String value = streamTokenizer.sval; - if (value != null && !value.isEmpty()) { - nodeDraft.setValue(attributeName, value); - } + String value = readValue(streamTokenizer); + if (value != null && !value.isEmpty()) { + nodeDraft.setValue(attributeName, value); } else { streamTokenizer.pushBack(); } @@ -316,12 +393,18 @@ protected void nodeAttributes(StreamTokenizer streamTokenizer, final NodeDraft n nodeAttributes(streamTokenizer, nodeDraft); } - protected void edgeStructure(StreamTokenizer streamTokenizer, final NodeDraft nodeDraft) throws Exception { - streamTokenizer.nextToken(); - - EdgeDraft edge = null; - if (streamTokenizer.ttype == '>' || streamTokenizer.ttype == '-') { + protected void edgeStructure(StreamTokenizerWithMultilineLiterals streamTokenizer, NodeDraft nodeDraft) + throws Exception { + do { streamTokenizer.nextToken(); + + if (streamTokenizer.ttype == '>') { + streamTokenizer.nextToken(); + } else if (streamTokenizer.ttype == '-') { + streamTokenizer.nextToken(); + } + + EdgeDraft edge = null; if (streamTokenizer.ttype == '{') { while (true) { streamTokenizer.nextToken(); @@ -331,7 +414,8 @@ protected void edgeStructure(StreamTokenizer streamTokenizer, final NodeDraft no nodeID(streamTokenizer); edge = container.factory().newEdgeDraft(); edge.setSource(nodeDraft); - edge.setTarget(getOrCreateNode("" + streamTokenizer.sval)); + nodeDraft = getOrCreateNode("" + streamTokenizer.sval); + edge.setTarget(nodeDraft); container.addEdge(edge); } } @@ -339,44 +423,58 @@ protected void edgeStructure(StreamTokenizer streamTokenizer, final NodeDraft no nodeID(streamTokenizer); edge = container.factory().newEdgeDraft(); edge.setSource(nodeDraft); - edge.setTarget(getOrCreateNode("" + streamTokenizer.sval)); + nodeDraft = getOrCreateNode("" + streamTokenizer.sval); + edge.setTarget(nodeDraft); container.addEdge(edge); } - } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDOT.class, "importerDOT_error_edgeparsing", streamTokenizer.lineno()), Issue.Level.SEVERE)); - if (streamTokenizer.ttype == StreamTokenizer.TT_WORD) { + + streamTokenizer.nextToken(); + + if (streamTokenizer.ttype == '[') { + edgeAttributes(streamTokenizer, edge); + // attr_list may chain: edge [attr1=val1] [attr2=val2] + streamTokenizer.nextToken(); + while (streamTokenizer.ttype == '[') { + edgeAttributes(streamTokenizer, edge); + streamTokenizer.nextToken(); + } + if (!isEdgeToken(streamTokenizer)) { + streamTokenizer.pushBack(); + } + } else if (!isEdgeToken(streamTokenizer)) { streamTokenizer.pushBack(); } - return; - } - - streamTokenizer.nextToken(); + } while (isEdgeToken(streamTokenizer)); + } - if (streamTokenizer.ttype == '[') { - edgeAttributes(streamTokenizer, edge); - } else { - streamTokenizer.pushBack(); - } + private boolean isEdgeToken(StreamTokenizerWithMultilineLiterals streamTokenizer) { + return streamTokenizer.ttype == '-'; } - protected void edgeAttributes(StreamTokenizer streamTokenizer, final EdgeDraft edge) throws Exception { + protected void edgeAttributes(StreamTokenizerWithMultilineLiterals streamTokenizer, final EdgeDraft edge) + throws Exception { streamTokenizer.nextToken(); if (streamTokenizer.ttype == ']' || streamTokenizer.ttype == StreamTokenizer.TT_EOF) { return; - } else if (streamTokenizer.ttype == StreamTokenizer.TT_WORD) { + } else if (streamTokenizer.ttype == StreamTokenizer.TT_WORD || streamTokenizer.ttype == '"') { if (streamTokenizer.sval.equalsIgnoreCase("label")) { streamTokenizer.nextToken(); if (streamTokenizer.ttype == '=') { streamTokenizer.nextToken(); - if (streamTokenizer.ttype == StreamTokenizer.TT_WORD || streamTokenizer.ttype == '"') { - edge.setLabel(streamTokenizer.sval); + String label = readValue(streamTokenizer); + if (label != null) { + edge.setLabel(label); } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDOT.class, "importerDOT_error_labelunreachable", streamTokenizer.lineno()), Issue.Level.WARNING)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterDOT.class, "importerDOT_error_labelunreachable", + streamTokenizer.lineno()), Issue.Level.WARNING)); streamTokenizer.pushBack(); } } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDOT.class, "importerDOT_error_labelunreachable", streamTokenizer.lineno()), Issue.Level.WARNING)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterDOT.class, "importerDOT_error_labelunreachable", streamTokenizer.lineno()), + Issue.Level.WARNING)); streamTokenizer.pushBack(); } } else if (streamTokenizer.sval.equalsIgnoreCase("color")) { @@ -386,42 +484,65 @@ protected void edgeAttributes(StreamTokenizer streamTokenizer, final EdgeDraft e try { edge.setColor(parseColor(streamTokenizer)); } catch (ParseException e) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDOT.class, "importerDOT_error_colorunreachable", streamTokenizer.lineno()), Issue.Level.WARNING)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterDOT.class, "importerDOT_error_colorunreachable", + streamTokenizer.lineno()), Issue.Level.WARNING)); streamTokenizer.pushBack(); } } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDOT.class, "importerDOT_color_labelunreachable", streamTokenizer.lineno()), Issue.Level.WARNING)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterDOT.class, "importerDOT_color_labelunreachable", streamTokenizer.lineno()), + Issue.Level.WARNING)); streamTokenizer.pushBack(); } } else if (streamTokenizer.sval.equalsIgnoreCase("style")) { streamTokenizer.nextToken(); if (streamTokenizer.ttype == '=') { streamTokenizer.nextToken(); - if (streamTokenizer.ttype == StreamTokenizer.TT_WORD || streamTokenizer.ttype == '"'); else { - //System.err.println("couldn't find style at line " + streamTokenizer.lineno()); + if (readValue(streamTokenizer) == null) { streamTokenizer.pushBack(); } } else { - //System.err.println("couldn't find style at line " + streamTokenizer.lineno()); streamTokenizer.pushBack(); } } else if (streamTokenizer.sval.equalsIgnoreCase("weight")) { streamTokenizer.nextToken(); if (streamTokenizer.ttype == '=') { streamTokenizer.nextToken(); - if (streamTokenizer.ttype == StreamTokenizer.TT_WORD || streamTokenizer.ttype == '"') { + String weightStr = readValue(streamTokenizer); + if (weightStr != null) { try { - Float weight = Float.parseFloat(streamTokenizer.sval); - edge.setWeight(weight); + edge.setWeight(Float.parseFloat(weightStr)); } catch (Exception e) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDOT.class, "importerDOT_error_weightunreachable", streamTokenizer.lineno()), Issue.Level.WARNING)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterDOT.class, "importerDOT_error_weightunreachable", + streamTokenizer.lineno()), Issue.Level.WARNING)); } } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDOT.class, "importerDOT_error_weightunreachable", streamTokenizer.lineno()), Issue.Level.WARNING)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterDOT.class, "importerDOT_error_weightunreachable", + streamTokenizer.lineno()), Issue.Level.WARNING)); + streamTokenizer.pushBack(); + } + } else { + report.logIssue(new Issue(NbBundle + .getMessage(ImporterDOT.class, "importerDOT_error_weightunreachable", streamTokenizer.lineno()), + Issue.Level.WARNING)); + streamTokenizer.pushBack(); + } + } else { + // other attributes + String attributeName = streamTokenizer.sval; + streamTokenizer.nextToken(); + if (streamTokenizer.ttype == '=') { + streamTokenizer.nextToken(); + String value = readValue(streamTokenizer); + if (value != null && !value.isEmpty()) { + edge.setValue(attributeName, value); + } else { streamTokenizer.pushBack(); } } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterDOT.class, "importerDOT_error_weightunreachable", streamTokenizer.lineno()), Issue.Level.WARNING)); streamTokenizer.pushBack(); } } @@ -455,666 +576,10 @@ public void setProgressTicket(ProgressTicket progressTicket) { this.progressTicket = progressTicket; } - private void initColorTable() { - colorTable.put("aliceblue", new Color(240, 248, 255)); - colorTable.put("antiquewhite", new Color(250, 235, 215)); - colorTable.put("antiquewhite1", new Color(255, 239, 219)); - colorTable.put("antiquewhite2", new Color(238, 223, 204)); - colorTable.put("antiquewhite3", new Color(205, 192, 176)); - colorTable.put("antiquewhite4", new Color(139, 131, 120)); - colorTable.put("aquamarine", new Color(127, 255, 212)); - colorTable.put("aquamarine1", new Color(127, 255, 212)); - colorTable.put("aquamarine2", new Color(118, 238, 198)); - colorTable.put("aquamarine3", new Color(102, 205, 170)); - colorTable.put("aquamarine4", new Color(69, 139, 116)); - colorTable.put("azure", new Color(240, 255, 255)); - colorTable.put("azure1", new Color(240, 255, 255)); - colorTable.put("azure2", new Color(224, 238, 238)); - colorTable.put("azure3", new Color(193, 205, 205)); - colorTable.put("azure4", new Color(131, 139, 139)); - colorTable.put("beige", new Color(245, 245, 220)); - colorTable.put("bisque", new Color(255, 228, 196)); - colorTable.put("bisque1", new Color(255, 228, 196)); - colorTable.put("bisque2", new Color(238, 213, 183)); - colorTable.put("bisque3", new Color(205, 183, 158)); - colorTable.put("bisque4", new Color(139, 125, 107)); - colorTable.put("black", new Color(0, 0, 0)); - colorTable.put("blanchedalmond", new Color(255, 235, 205)); - colorTable.put("blue", new Color(0, 0, 255)); - colorTable.put("blue1", new Color(0, 0, 255)); - colorTable.put("blue2", new Color(0, 0, 238)); - colorTable.put("blue3", new Color(0, 0, 205)); - colorTable.put("blue4", new Color(0, 0, 139)); - colorTable.put("blueviolet", new Color(138, 43, 226)); - colorTable.put("brown", new Color(165, 42, 42)); - colorTable.put("brown1", new Color(255, 64, 64)); - colorTable.put("brown2", new Color(238, 59, 59)); - colorTable.put("brown3", new Color(205, 51, 51)); - colorTable.put("brown4", new Color(139, 35, 35)); - colorTable.put("burlywood", new Color(222, 184, 135)); - colorTable.put("burlywood1", new Color(255, 211, 155)); - colorTable.put("burlywood2", new Color(238, 197, 145)); - colorTable.put("burlywood3", new Color(205, 170, 125)); - colorTable.put("burlywood4", new Color(139, 115, 85)); - colorTable.put("cadetblue", new Color(95, 158, 160)); - colorTable.put("cadetblue1", new Color(152, 245, 255)); - colorTable.put("cadetblue2", new Color(142, 229, 238)); - colorTable.put("cadetblue3", new Color(122, 197, 205)); - colorTable.put("cadetblue4", new Color(83, 134, 139)); - colorTable.put("chartreuse", new Color(127, 255, 0)); - colorTable.put("chartreuse1", new Color(127, 255, 0)); - colorTable.put("chartreuse2", new Color(118, 238, 0)); - colorTable.put("chartreuse3", new Color(102, 205, 0)); - colorTable.put("chartreuse4", new Color(69, 139, 0)); - colorTable.put("chocolate", new Color(210, 105, 30)); - colorTable.put("chocolate1", new Color(255, 127, 36)); - colorTable.put("chocolate2", new Color(238, 118, 33)); - colorTable.put("chocolate3", new Color(205, 102, 29)); - colorTable.put("chocolate4", new Color(139, 69, 19)); - colorTable.put("coral", new Color(255, 127, 80)); - colorTable.put("coral1", new Color(255, 114, 86)); - colorTable.put("coral2", new Color(238, 106, 80)); - colorTable.put("coral3", new Color(205, 91, 69)); - colorTable.put("coral4", new Color(139, 62, 47)); - colorTable.put("cornflowerblue", new Color(100, 149, 237)); - colorTable.put("cornsilk", new Color(255, 248, 220)); - colorTable.put("cornsilk1", new Color(255, 248, 220)); - colorTable.put("cornsilk2", new Color(238, 232, 205)); - colorTable.put("cornsilk3", new Color(205, 200, 177)); - colorTable.put("cornsilk4", new Color(139, 136, 120)); - colorTable.put("crimson", new Color(220, 20, 60)); - colorTable.put("cyan", new Color(0, 255, 255)); - colorTable.put("cyan1", new Color(0, 255, 255)); - colorTable.put("cyan2", new Color(0, 238, 238)); - colorTable.put("cyan3", new Color(0, 205, 205)); - colorTable.put("cyan4", new Color(0, 139, 139)); - colorTable.put("darkblue", new Color(0, 0, 139)); - colorTable.put("darkcyan", new Color(0, 139, 139)); - colorTable.put("darkgoldenrod", new Color(184, 134, 11)); - colorTable.put("darkgoldenrod1", new Color(255, 185, 15)); - colorTable.put("darkgoldenrod2", new Color(238, 173, 14)); - colorTable.put("darkgoldenrod3", new Color(205, 149, 12)); - colorTable.put("darkgoldenrod4", new Color(139, 101, 8)); - colorTable.put("darkgray", new Color(169, 169, 169)); - colorTable.put("darkgreen", new Color(0, 100, 0)); - colorTable.put("darkgrey", new Color(169, 169, 169)); - colorTable.put("darkkhaki", new Color(189, 183, 107)); - colorTable.put("darkmagenta", new Color(139, 0, 139)); - colorTable.put("darkolivegreen", new Color(85, 107, 47)); - colorTable.put("darkolivegreen1", new Color(202, 255, 112)); - colorTable.put("darkolivegreen2", new Color(188, 238, 104)); - colorTable.put("darkolivegreen3", new Color(162, 205, 90)); - colorTable.put("darkolivegreen4", new Color(110, 139, 61)); - colorTable.put("darkorange", new Color(255, 140, 0)); - colorTable.put("darkorange1", new Color(255, 127, 0)); - colorTable.put("darkorange2", new Color(238, 118, 0)); - colorTable.put("darkorange3", new Color(205, 102, 0)); - colorTable.put("darkorange4", new Color(139, 69, 0)); - colorTable.put("darkorchid", new Color(153, 50, 204)); - colorTable.put("darkorchid1", new Color(191, 62, 255)); - colorTable.put("darkorchid2", new Color(178, 58, 238)); - colorTable.put("darkorchid3", new Color(154, 50, 205)); - colorTable.put("darkorchid4", new Color(104, 34, 139)); - colorTable.put("darkred", new Color(139, 0, 0)); - colorTable.put("darksalmon", new Color(233, 150, 122)); - colorTable.put("darkseagreen", new Color(143, 188, 143)); - colorTable.put("darkseagreen1", new Color(193, 255, 193)); - colorTable.put("darkseagreen2", new Color(180, 238, 180)); - colorTable.put("darkseagreen3", new Color(155, 205, 155)); - colorTable.put("darkseagreen4", new Color(105, 139, 105)); - colorTable.put("darkslateblue", new Color(72, 61, 139)); - colorTable.put("darkslategray", new Color(47, 79, 79)); - colorTable.put("darkslategray1", new Color(151, 255, 255)); - colorTable.put("darkslategray2", new Color(141, 238, 238)); - colorTable.put("darkslategray3", new Color(121, 205, 205)); - colorTable.put("darkslategray4", new Color(82, 139, 139)); - colorTable.put("darkslategrey", new Color(47, 79, 79)); - colorTable.put("darkturquoise", new Color(0, 206, 209)); - colorTable.put("darkviolet", new Color(148, 0, 211)); - colorTable.put("deeppink", new Color(255, 20, 147)); - colorTable.put("deeppink1", new Color(255, 20, 147)); - colorTable.put("deeppink2", new Color(238, 18, 137)); - colorTable.put("deeppink3", new Color(205, 16, 118)); - colorTable.put("deeppink4", new Color(139, 10, 80)); - colorTable.put("deepskyblue", new Color(0, 191, 255)); - colorTable.put("deepskyblue1", new Color(0, 191, 255)); - colorTable.put("deepskyblue2", new Color(0, 178, 238)); - colorTable.put("deepskyblue3", new Color(0, 154, 205)); - colorTable.put("deepskyblue4", new Color(0, 104, 139)); - colorTable.put("dimgray", new Color(105, 105, 105)); - colorTable.put("dimgrey", new Color(105, 105, 105)); - colorTable.put("dodgerblue", new Color(30, 144, 255)); - colorTable.put("dodgerblue1", new Color(30, 144, 255)); - colorTable.put("dodgerblue2", new Color(28, 134, 238)); - colorTable.put("dodgerblue3", new Color(24, 116, 205)); - colorTable.put("dodgerblue4", new Color(16, 78, 139)); - colorTable.put("firebrick", new Color(178, 34, 34)); - colorTable.put("firebrick1", new Color(255, 48, 48)); - colorTable.put("firebrick2", new Color(238, 44, 44)); - colorTable.put("firebrick3", new Color(205, 38, 38)); - colorTable.put("firebrick4", new Color(139, 26, 26)); - colorTable.put("floralwhite", new Color(255, 250, 240)); - colorTable.put("forestgreen", new Color(34, 139, 34)); - colorTable.put("gainsboro", new Color(220, 220, 220)); - colorTable.put("ghostwhite", new Color(248, 248, 255)); - colorTable.put("gold", new Color(255, 215, 0)); - colorTable.put("gold1", new Color(255, 215, 0)); - colorTable.put("gold2", new Color(238, 201, 0)); - colorTable.put("gold3", new Color(205, 173, 0)); - colorTable.put("gold4", new Color(139, 117, 0)); - colorTable.put("goldenrod", new Color(218, 165, 32)); - colorTable.put("goldenrod1", new Color(255, 193, 37)); - colorTable.put("goldenrod2", new Color(238, 180, 34)); - colorTable.put("goldenrod3", new Color(205, 155, 29)); - colorTable.put("goldenrod4", new Color(139, 105, 20)); - colorTable.put("green", new Color(0, 255, 0)); - colorTable.put("green1", new Color(0, 255, 0)); - colorTable.put("green2", new Color(0, 238, 0)); - colorTable.put("green3", new Color(0, 205, 0)); - colorTable.put("green4", new Color(0, 139, 0)); - colorTable.put("greenyellow", new Color(173, 255, 47)); - colorTable.put("gray", new Color(190, 190, 190)); - colorTable.put("grey", new Color(190, 190, 190)); - colorTable.put("gray0", new Color(0, 0, 0)); - colorTable.put("grey0", new Color(0, 0, 0)); - colorTable.put("gray1", new Color(3, 3, 3)); - colorTable.put("grey1", new Color(3, 3, 3)); - colorTable.put("gray2", new Color(5, 5, 5)); - colorTable.put("grey2", new Color(5, 5, 5)); - colorTable.put("gray3", new Color(8, 8, 8)); - colorTable.put("grey3", new Color(8, 8, 8)); - colorTable.put("gray4", new Color(10, 10, 10)); - colorTable.put("grey4", new Color(10, 10, 10)); - colorTable.put("gray5", new Color(13, 13, 13)); - colorTable.put("grey5", new Color(13, 13, 13)); - colorTable.put("gray6", new Color(15, 15, 15)); - colorTable.put("grey6", new Color(15, 15, 15)); - colorTable.put("gray7", new Color(18, 18, 18)); - colorTable.put("grey7", new Color(18, 18, 18)); - colorTable.put("gray8", new Color(20, 20, 20)); - colorTable.put("grey8", new Color(20, 20, 20)); - colorTable.put("gray9", new Color(23, 23, 23)); - colorTable.put("grey9", new Color(23, 23, 23)); - colorTable.put("gray10", new Color(26, 26, 26)); - colorTable.put("grey10", new Color(26, 26, 26)); - colorTable.put("gray11", new Color(28, 28, 28)); - colorTable.put("grey11", new Color(28, 28, 28)); - colorTable.put("gray12", new Color(31, 31, 31)); - colorTable.put("grey12", new Color(31, 31, 31)); - colorTable.put("gray13", new Color(33, 33, 33)); - colorTable.put("grey13", new Color(33, 33, 33)); - colorTable.put("gray14", new Color(36, 36, 36)); - colorTable.put("grey14", new Color(36, 36, 36)); - colorTable.put("gray15", new Color(38, 38, 38)); - colorTable.put("grey15", new Color(38, 38, 38)); - colorTable.put("gray16", new Color(41, 41, 41)); - colorTable.put("grey16", new Color(41, 41, 41)); - colorTable.put("gray17", new Color(43, 43, 43)); - colorTable.put("grey17", new Color(43, 43, 43)); - colorTable.put("gray18", new Color(46, 46, 46)); - colorTable.put("grey18", new Color(46, 46, 46)); - colorTable.put("gray19", new Color(48, 48, 48)); - colorTable.put("grey19", new Color(48, 48, 48)); - colorTable.put("gray20", new Color(51, 51, 51)); - colorTable.put("grey20", new Color(51, 51, 51)); - colorTable.put("gray21", new Color(54, 54, 54)); - colorTable.put("grey21", new Color(54, 54, 54)); - colorTable.put("gray22", new Color(56, 56, 56)); - colorTable.put("grey22", new Color(56, 56, 56)); - colorTable.put("gray23", new Color(59, 59, 59)); - colorTable.put("grey23", new Color(59, 59, 59)); - colorTable.put("gray24", new Color(61, 61, 61)); - colorTable.put("grey24", new Color(61, 61, 61)); - colorTable.put("gray25", new Color(64, 64, 64)); - colorTable.put("grey25", new Color(64, 64, 64)); - colorTable.put("gray26", new Color(66, 66, 66)); - colorTable.put("grey26", new Color(66, 66, 66)); - colorTable.put("gray27", new Color(69, 69, 69)); - colorTable.put("grey27", new Color(69, 69, 69)); - colorTable.put("gray28", new Color(71, 71, 71)); - colorTable.put("grey28", new Color(71, 71, 71)); - colorTable.put("gray29", new Color(74, 74, 74)); - colorTable.put("grey29", new Color(74, 74, 74)); - colorTable.put("gray30", new Color(77, 77, 77)); - colorTable.put("grey30", new Color(77, 77, 77)); - colorTable.put("gray31", new Color(79, 79, 79)); - colorTable.put("grey31", new Color(79, 79, 79)); - colorTable.put("gray32", new Color(82, 82, 82)); - colorTable.put("grey32", new Color(82, 82, 82)); - colorTable.put("gray33", new Color(84, 84, 84)); - colorTable.put("grey33", new Color(84, 84, 84)); - colorTable.put("gray34", new Color(87, 87, 87)); - colorTable.put("grey34", new Color(87, 87, 87)); - colorTable.put("gray35", new Color(89, 89, 89)); - colorTable.put("grey35", new Color(89, 89, 89)); - colorTable.put("gray36", new Color(92, 92, 92)); - colorTable.put("grey36", new Color(92, 92, 92)); - colorTable.put("gray37", new Color(94, 94, 94)); - colorTable.put("grey37", new Color(94, 94, 94)); - colorTable.put("gray38", new Color(97, 97, 97)); - colorTable.put("grey38", new Color(97, 97, 97)); - colorTable.put("gray39", new Color(99, 99, 99)); - colorTable.put("grey39", new Color(99, 99, 99)); - colorTable.put("gray40", new Color(102, 102, 102)); - colorTable.put("grey40", new Color(102, 102, 102)); - colorTable.put("gray41", new Color(105, 105, 105)); - colorTable.put("grey41", new Color(105, 105, 105)); - colorTable.put("gray42", new Color(107, 107, 107)); - colorTable.put("grey42", new Color(107, 107, 107)); - colorTable.put("gray43", new Color(110, 110, 110)); - colorTable.put("grey43", new Color(110, 110, 110)); - colorTable.put("gray44", new Color(112, 112, 112)); - colorTable.put("grey44", new Color(112, 112, 112)); - colorTable.put("gray45", new Color(115, 115, 115)); - colorTable.put("grey45", new Color(115, 115, 115)); - colorTable.put("gray46", new Color(117, 117, 117)); - colorTable.put("grey46", new Color(117, 117, 117)); - colorTable.put("gray47", new Color(120, 120, 120)); - colorTable.put("grey47", new Color(120, 120, 120)); - colorTable.put("gray48", new Color(122, 122, 122)); - colorTable.put("grey48", new Color(122, 122, 122)); - colorTable.put("gray49", new Color(125, 125, 125)); - colorTable.put("grey49", new Color(125, 125, 125)); - colorTable.put("gray50", new Color(127, 127, 127)); - colorTable.put("grey50", new Color(127, 127, 127)); - colorTable.put("gray51", new Color(130, 130, 130)); - colorTable.put("grey51", new Color(130, 130, 130)); - colorTable.put("gray52", new Color(133, 133, 133)); - colorTable.put("grey52", new Color(133, 133, 133)); - colorTable.put("gray53", new Color(135, 135, 135)); - colorTable.put("grey53", new Color(135, 135, 135)); - colorTable.put("gray54", new Color(138, 138, 138)); - colorTable.put("grey54", new Color(138, 138, 138)); - colorTable.put("gray55", new Color(140, 140, 140)); - colorTable.put("grey55", new Color(140, 140, 140)); - colorTable.put("gray56", new Color(143, 143, 143)); - colorTable.put("grey56", new Color(143, 143, 143)); - colorTable.put("gray57", new Color(145, 145, 145)); - colorTable.put("grey57", new Color(145, 145, 145)); - colorTable.put("gray58", new Color(148, 148, 148)); - colorTable.put("grey58", new Color(148, 148, 148)); - colorTable.put("gray59", new Color(150, 150, 150)); - colorTable.put("grey59", new Color(150, 150, 150)); - colorTable.put("gray60", new Color(153, 153, 153)); - colorTable.put("grey60", new Color(153, 153, 153)); - colorTable.put("gray61", new Color(156, 156, 156)); - colorTable.put("grey61", new Color(156, 156, 156)); - colorTable.put("gray62", new Color(158, 158, 158)); - colorTable.put("grey62", new Color(158, 158, 158)); - colorTable.put("gray63", new Color(161, 161, 161)); - colorTable.put("grey63", new Color(161, 161, 161)); - colorTable.put("gray64", new Color(163, 163, 163)); - colorTable.put("grey64", new Color(163, 163, 163)); - colorTable.put("gray65", new Color(166, 166, 166)); - colorTable.put("grey65", new Color(166, 166, 166)); - colorTable.put("gray66", new Color(168, 168, 168)); - colorTable.put("grey66", new Color(168, 168, 168)); - colorTable.put("gray67", new Color(171, 171, 171)); - colorTable.put("grey67", new Color(171, 171, 171)); - colorTable.put("gray68", new Color(173, 173, 173)); - colorTable.put("grey68", new Color(173, 173, 173)); - colorTable.put("gray69", new Color(176, 176, 176)); - colorTable.put("grey69", new Color(176, 176, 176)); - colorTable.put("gray70", new Color(179, 179, 179)); - colorTable.put("grey70", new Color(179, 179, 179)); - colorTable.put("gray71", new Color(181, 181, 181)); - colorTable.put("grey71", new Color(181, 181, 181)); - colorTable.put("gray72", new Color(184, 184, 184)); - colorTable.put("grey72", new Color(184, 184, 184)); - colorTable.put("gray73", new Color(186, 186, 186)); - colorTable.put("grey73", new Color(186, 186, 186)); - colorTable.put("gray74", new Color(189, 189, 189)); - colorTable.put("grey74", new Color(189, 189, 189)); - colorTable.put("gray75", new Color(191, 191, 191)); - colorTable.put("grey75", new Color(191, 191, 191)); - colorTable.put("gray76", new Color(194, 194, 194)); - colorTable.put("grey76", new Color(194, 194, 194)); - colorTable.put("gray77", new Color(196, 196, 196)); - colorTable.put("grey77", new Color(196, 196, 196)); - colorTable.put("gray78", new Color(199, 199, 199)); - colorTable.put("grey78", new Color(199, 199, 199)); - colorTable.put("gray79", new Color(201, 201, 201)); - colorTable.put("grey79", new Color(201, 201, 201)); - colorTable.put("gray80", new Color(204, 204, 204)); - colorTable.put("grey80", new Color(204, 204, 204)); - colorTable.put("gray81", new Color(207, 207, 207)); - colorTable.put("grey81", new Color(207, 207, 207)); - colorTable.put("gray82", new Color(209, 209, 209)); - colorTable.put("grey82", new Color(209, 209, 209)); - colorTable.put("gray83", new Color(212, 212, 212)); - colorTable.put("grey83", new Color(212, 212, 212)); - colorTable.put("gray84", new Color(214, 214, 214)); - colorTable.put("grey84", new Color(214, 214, 214)); - colorTable.put("gray85", new Color(217, 217, 217)); - colorTable.put("grey85", new Color(217, 217, 217)); - colorTable.put("gray86", new Color(219, 219, 219)); - colorTable.put("grey86", new Color(219, 219, 219)); - colorTable.put("gray87", new Color(222, 222, 222)); - colorTable.put("grey87", new Color(222, 222, 222)); - colorTable.put("gray88", new Color(224, 224, 224)); - colorTable.put("grey88", new Color(224, 224, 224)); - colorTable.put("gray89", new Color(227, 227, 227)); - colorTable.put("grey89", new Color(227, 227, 227)); - colorTable.put("gray90", new Color(229, 229, 229)); - colorTable.put("grey90", new Color(229, 229, 229)); - colorTable.put("gray91", new Color(232, 232, 232)); - colorTable.put("grey91", new Color(232, 232, 232)); - colorTable.put("gray92", new Color(235, 235, 235)); - colorTable.put("grey92", new Color(235, 235, 235)); - colorTable.put("gray93", new Color(237, 237, 237)); - colorTable.put("grey93", new Color(237, 237, 237)); - colorTable.put("gray94", new Color(240, 240, 240)); - colorTable.put("grey94", new Color(240, 240, 240)); - colorTable.put("gray95", new Color(242, 242, 242)); - colorTable.put("grey95", new Color(242, 242, 242)); - colorTable.put("gray96", new Color(245, 245, 245)); - colorTable.put("grey96", new Color(245, 245, 245)); - colorTable.put("gray97", new Color(247, 247, 247)); - colorTable.put("grey97", new Color(247, 247, 247)); - colorTable.put("gray98", new Color(250, 250, 250)); - colorTable.put("grey98", new Color(250, 250, 250)); - colorTable.put("gray99", new Color(252, 252, 252)); - colorTable.put("grey99", new Color(252, 252, 252)); - colorTable.put("gray100", new Color(255, 255, 255)); - colorTable.put("grey100", new Color(255, 255, 255)); - colorTable.put("honeydew", new Color(240, 255, 240)); - colorTable.put("honeydew1", new Color(240, 255, 240)); - colorTable.put("honeydew2", new Color(224, 238, 224)); - colorTable.put("honeydew3", new Color(193, 205, 193)); - colorTable.put("honeydew4", new Color(131, 139, 131)); - colorTable.put("hotpink", new Color(255, 105, 180)); - colorTable.put("hotpink1", new Color(255, 110, 180)); - colorTable.put("hotpink2", new Color(238, 106, 167)); - colorTable.put("hotpink3", new Color(205, 96, 144)); - colorTable.put("hotpink4", new Color(139, 58, 98)); - colorTable.put("indianred", new Color(205, 92, 92)); - colorTable.put("indianred1", new Color(255, 106, 106)); - colorTable.put("indianred2", new Color(238, 99, 99)); - colorTable.put("indianred3", new Color(205, 85, 85)); - colorTable.put("indianred4", new Color(139, 58, 58)); - colorTable.put("indigo", new Color(75, 0, 130)); - colorTable.put("ivory", new Color(255, 255, 240)); - colorTable.put("ivory1", new Color(255, 255, 240)); - colorTable.put("ivory2", new Color(238, 238, 224)); - colorTable.put("ivory3", new Color(205, 205, 193)); - colorTable.put("ivory4", new Color(139, 139, 131)); - colorTable.put("khaki", new Color(240, 230, 140)); - colorTable.put("khaki1", new Color(255, 246, 143)); - colorTable.put("khaki2", new Color(238, 230, 133)); - colorTable.put("khaki3", new Color(205, 198, 115)); - colorTable.put("khaki4", new Color(139, 134, 78)); - colorTable.put("lavender", new Color(230, 230, 250)); - colorTable.put("lavenderblush", new Color(255, 240, 245)); - colorTable.put("lavenderblush1", new Color(255, 240, 245)); - colorTable.put("lavenderblush2", new Color(238, 224, 229)); - colorTable.put("lavenderblush3", new Color(205, 193, 197)); - colorTable.put("lavenderblush4", new Color(139, 131, 134)); - colorTable.put("lawngreen", new Color(124, 252, 0)); - colorTable.put("lemonchiffon", new Color(255, 250, 205)); - colorTable.put("lemonchiffon1", new Color(255, 250, 205)); - colorTable.put("lemonchiffon2", new Color(238, 233, 191)); - colorTable.put("lemonchiffon3", new Color(205, 201, 165)); - colorTable.put("lemonchiffon4", new Color(139, 137, 112)); - colorTable.put("lightblue", new Color(173, 216, 230)); - colorTable.put("lightblue1", new Color(191, 239, 255)); - colorTable.put("lightblue2", new Color(178, 223, 238)); - colorTable.put("lightblue3", new Color(154, 192, 205)); - colorTable.put("lightblue4", new Color(104, 131, 139)); - colorTable.put("lightcoral", new Color(240, 128, 128)); - colorTable.put("lightcyan", new Color(224, 255, 255)); - colorTable.put("lightcyan1", new Color(224, 255, 255)); - colorTable.put("lightcyan2", new Color(209, 238, 238)); - colorTable.put("lightcyan3", new Color(180, 205, 205)); - colorTable.put("lightcyan4", new Color(122, 139, 139)); - colorTable.put("lightgoldenrod", new Color(238, 221, 130)); - colorTable.put("lightgoldenrod1", new Color(255, 236, 139)); - colorTable.put("lightgoldenrod2", new Color(238, 220, 130)); - colorTable.put("lightgoldenrod3", new Color(205, 190, 112)); - colorTable.put("lightgoldenrod4", new Color(139, 129, 76)); - colorTable.put("lightgoldenrodyellow", new Color(250, 250, 210)); - colorTable.put("lightgray", new Color(211, 211, 211)); - colorTable.put("lightgreen", new Color(144, 238, 144)); - colorTable.put("lightgrey", new Color(211, 211, 211)); - colorTable.put("lightpink", new Color(255, 182, 193)); - colorTable.put("lightpink1", new Color(255, 174, 185)); - colorTable.put("lightpink2", new Color(238, 162, 173)); - colorTable.put("lightpink3", new Color(205, 140, 149)); - colorTable.put("lightpink4", new Color(139, 95, 101)); - colorTable.put("lightsalmon", new Color(255, 160, 122)); - colorTable.put("lightsalmon1", new Color(255, 160, 122)); - colorTable.put("lightsalmon2", new Color(238, 149, 114)); - colorTable.put("lightsalmon3", new Color(205, 129, 98)); - colorTable.put("lightsalmon4", new Color(139, 87, 66)); - colorTable.put("lightseagreen", new Color(32, 178, 170)); - colorTable.put("lightskyblue", new Color(135, 206, 250)); - colorTable.put("lightskyblue1", new Color(176, 226, 255)); - colorTable.put("lightskyblue2", new Color(164, 211, 238)); - colorTable.put("lightskyblue3", new Color(141, 182, 205)); - colorTable.put("lightskyblue4", new Color(96, 123, 139)); - colorTable.put("lightslateblue", new Color(132, 112, 255)); - colorTable.put("lightslategray", new Color(119, 136, 153)); - colorTable.put("lightslategrey", new Color(119, 136, 153)); - colorTable.put("lightsteelblue", new Color(176, 196, 222)); - colorTable.put("lightsteelblue1", new Color(202, 225, 255)); - colorTable.put("lightsteelblue2", new Color(188, 210, 238)); - colorTable.put("lightsteelblue3", new Color(162, 181, 205)); - colorTable.put("lightsteelblue4", new Color(110, 123, 139)); - colorTable.put("lightyellow", new Color(255, 255, 224)); - colorTable.put("lightyellow1", new Color(255, 255, 224)); - colorTable.put("lightyellow2", new Color(238, 238, 209)); - colorTable.put("lightyellow3", new Color(205, 205, 180)); - colorTable.put("lightyellow4", new Color(139, 139, 122)); - colorTable.put("limegreen", new Color(50, 205, 50)); - colorTable.put("linen", new Color(250, 240, 230)); - colorTable.put("magenta", new Color(255, 0, 255)); - colorTable.put("magenta1", new Color(255, 0, 255)); - colorTable.put("magenta2", new Color(238, 0, 238)); - colorTable.put("magenta3", new Color(205, 0, 205)); - colorTable.put("magenta4", new Color(139, 0, 139)); - colorTable.put("maroon", new Color(176, 48, 96)); - colorTable.put("maroon1", new Color(255, 52, 179)); - colorTable.put("maroon2", new Color(238, 48, 167)); - colorTable.put("maroon3", new Color(205, 41, 144)); - colorTable.put("maroon4", new Color(139, 28, 98)); - colorTable.put("mediumaquamarine", new Color(102, 205, 170)); - colorTable.put("mediumblue", new Color(0, 0, 205)); - colorTable.put("mediumorchid", new Color(186, 85, 211)); - colorTable.put("mediumorchid1", new Color(224, 102, 255)); - colorTable.put("mediumorchid2", new Color(209, 95, 238)); - colorTable.put("mediumorchid3", new Color(180, 82, 205)); - colorTable.put("mediumorchid4", new Color(122, 55, 139)); - colorTable.put("mediumpurple", new Color(147, 112, 219)); - colorTable.put("mediumpurple1", new Color(171, 130, 255)); - colorTable.put("mediumpurple2", new Color(159, 121, 238)); - colorTable.put("mediumpurple3", new Color(137, 104, 205)); - colorTable.put("mediumpurple4", new Color(93, 71, 139)); - colorTable.put("mediumseagreen", new Color(60, 179, 113)); - colorTable.put("mediumslateblue", new Color(123, 104, 238)); - colorTable.put("mediumspringgreen", new Color(0, 250, 154)); - colorTable.put("mediumturquoise", new Color(72, 209, 204)); - colorTable.put("mediumvioletred", new Color(199, 21, 133)); - colorTable.put("midnightblue", new Color(25, 25, 112)); - colorTable.put("mintcream", new Color(245, 255, 250)); - colorTable.put("mistyrose", new Color(255, 228, 225)); - colorTable.put("mistyrose1", new Color(255, 228, 225)); - colorTable.put("mistyrose2", new Color(238, 213, 210)); - colorTable.put("mistyrose3", new Color(205, 183, 181)); - colorTable.put("mistyrose4", new Color(139, 125, 123)); - colorTable.put("moccasin", new Color(255, 228, 181)); - colorTable.put("navajowhite", new Color(255, 222, 173)); - colorTable.put("navajowhite1", new Color(255, 222, 173)); - colorTable.put("navajowhite2", new Color(238, 207, 161)); - colorTable.put("navajowhite3", new Color(205, 179, 139)); - colorTable.put("navajowhite4", new Color(139, 121, 94)); - colorTable.put("navy", new Color(0, 0, 128)); - colorTable.put("navyblue", new Color(0, 0, 128)); - colorTable.put("oldlace", new Color(253, 245, 230)); - colorTable.put("olivedrab", new Color(107, 142, 35)); - colorTable.put("olivedrab1", new Color(192, 255, 62)); - colorTable.put("olivedrab2", new Color(179, 238, 58)); - colorTable.put("olivedrab3", new Color(154, 205, 50)); - colorTable.put("olivedrab4", new Color(105, 139, 34)); - colorTable.put("orange", new Color(255, 165, 0)); - colorTable.put("orange1", new Color(255, 165, 0)); - colorTable.put("orange2", new Color(238, 154, 0)); - colorTable.put("orange3", new Color(205, 133, 0)); - colorTable.put("orange4", new Color(139, 90, 0)); - colorTable.put("orangered", new Color(255, 69, 0)); - colorTable.put("orangered1", new Color(255, 69, 0)); - colorTable.put("orangered2", new Color(238, 64, 0)); - colorTable.put("orangered3", new Color(205, 55, 0)); - colorTable.put("orangered4", new Color(139, 37, 0)); - colorTable.put("orchid", new Color(218, 112, 214)); - colorTable.put("orchid1", new Color(255, 131, 250)); - colorTable.put("orchid2", new Color(238, 122, 233)); - colorTable.put("orchid3", new Color(205, 105, 201)); - colorTable.put("orchid4", new Color(139, 71, 137)); - colorTable.put("palegoldenrod", new Color(238, 232, 170)); - colorTable.put("palegreen", new Color(152, 251, 152)); - colorTable.put("palegreen1", new Color(154, 255, 154)); - colorTable.put("palegreen2", new Color(144, 238, 144)); - colorTable.put("palegreen3", new Color(124, 205, 124)); - colorTable.put("palegreen4", new Color(84, 139, 84)); - colorTable.put("paleturquoise", new Color(175, 238, 238)); - colorTable.put("paleturquoise1", new Color(187, 255, 255)); - colorTable.put("paleturquoise2", new Color(174, 238, 238)); - colorTable.put("paleturquoise3", new Color(150, 205, 205)); - colorTable.put("paleturquoise4", new Color(102, 139, 139)); - colorTable.put("palevioletred", new Color(219, 112, 147)); - colorTable.put("palevioletred1", new Color(255, 130, 171)); - colorTable.put("palevioletred2", new Color(238, 121, 159)); - colorTable.put("palevioletred3", new Color(205, 104, 137)); - colorTable.put("palevioletred4", new Color(139, 71, 93)); - colorTable.put("papayawhip", new Color(255, 239, 213)); - colorTable.put("peachpuff", new Color(255, 218, 185)); - colorTable.put("peachpuff1", new Color(255, 218, 185)); - colorTable.put("peachpuff2", new Color(238, 203, 173)); - colorTable.put("peachpuff3", new Color(205, 175, 149)); - colorTable.put("peachpuff4", new Color(139, 119, 101)); - colorTable.put("peru", new Color(205, 133, 63)); - colorTable.put("pink", new Color(255, 192, 203)); - colorTable.put("pink1", new Color(255, 181, 197)); - colorTable.put("pink2", new Color(238, 169, 184)); - colorTable.put("pink3", new Color(205, 145, 158)); - colorTable.put("pink4", new Color(139, 99, 108)); - colorTable.put("plum", new Color(221, 160, 221)); - colorTable.put("plum1", new Color(255, 187, 255)); - colorTable.put("plum2", new Color(238, 174, 238)); - colorTable.put("plum3", new Color(205, 150, 205)); - colorTable.put("plum4", new Color(139, 102, 139)); - colorTable.put("powderblue", new Color(176, 224, 230)); - colorTable.put("purple", new Color(160, 32, 240)); - colorTable.put("purple1", new Color(155, 48, 255)); - colorTable.put("purple2", new Color(145, 44, 238)); - colorTable.put("purple3", new Color(125, 38, 205)); - colorTable.put("purple4", new Color(85, 26, 139)); - colorTable.put("red", new Color(255, 0, 0)); - colorTable.put("red1", new Color(255, 0, 0)); - colorTable.put("red2", new Color(238, 0, 0)); - colorTable.put("red3", new Color(205, 0, 0)); - colorTable.put("red4", new Color(139, 0, 0)); - colorTable.put("rosybrown", new Color(188, 143, 143)); - colorTable.put("rosybrown1", new Color(255, 193, 193)); - colorTable.put("rosybrown2", new Color(238, 180, 180)); - colorTable.put("rosybrown3", new Color(205, 155, 155)); - colorTable.put("rosybrown4", new Color(139, 105, 105)); - colorTable.put("royalblue", new Color(65, 105, 225)); - colorTable.put("royalblue1", new Color(72, 118, 255)); - colorTable.put("royalblue2", new Color(67, 110, 238)); - colorTable.put("royalblue3", new Color(58, 95, 205)); - colorTable.put("royalblue4", new Color(39, 64, 139)); - colorTable.put("saddlebrown", new Color(139, 69, 19)); - colorTable.put("salmon", new Color(250, 128, 114)); - colorTable.put("salmon1", new Color(255, 140, 105)); - colorTable.put("salmon2", new Color(238, 130, 98)); - colorTable.put("salmon3", new Color(205, 112, 84)); - colorTable.put("salmon4", new Color(139, 76, 57)); - colorTable.put("sandybrown", new Color(244, 164, 96)); - colorTable.put("seagreen", new Color(46, 139, 87)); - colorTable.put("seagreen1", new Color(84, 255, 159)); - colorTable.put("seagreen2", new Color(78, 238, 148)); - colorTable.put("seagreen3", new Color(67, 205, 128)); - colorTable.put("seagreen4", new Color(46, 139, 87)); - colorTable.put("seashell", new Color(255, 245, 238)); - colorTable.put("seashell1", new Color(255, 245, 238)); - colorTable.put("seashell2", new Color(238, 229, 222)); - colorTable.put("seashell3", new Color(205, 197, 191)); - colorTable.put("seashell4", new Color(139, 134, 130)); - colorTable.put("sgiindigo2", new Color(33, 136, 104)); - colorTable.put("sienna", new Color(160, 82, 45)); - colorTable.put("sienna1", new Color(255, 130, 71)); - colorTable.put("sienna2", new Color(238, 121, 66)); - colorTable.put("sienna3", new Color(205, 104, 57)); - colorTable.put("sienna4", new Color(139, 71, 38)); - colorTable.put("skyblue", new Color(135, 206, 235)); - colorTable.put("skyblue1", new Color(135, 206, 255)); - colorTable.put("skyblue2", new Color(126, 192, 238)); - colorTable.put("skyblue3", new Color(108, 166, 205)); - colorTable.put("skyblue4", new Color(74, 112, 139)); - colorTable.put("slateblue", new Color(106, 90, 205)); - colorTable.put("slateblue1", new Color(131, 111, 255)); - colorTable.put("slateblue2", new Color(122, 103, 238)); - colorTable.put("slateblue3", new Color(105, 89, 205)); - colorTable.put("slateblue4", new Color(71, 60, 139)); - colorTable.put("slategray", new Color(112, 128, 144)); - colorTable.put("slategray1", new Color(198, 226, 255)); - colorTable.put("slategray2", new Color(185, 211, 238)); - colorTable.put("slategray3", new Color(159, 182, 205)); - colorTable.put("slategray4", new Color(108, 123, 139)); - colorTable.put("slategrey", new Color(112, 128, 144)); - colorTable.put("snow", new Color(255, 250, 250)); - colorTable.put("snow1", new Color(255, 250, 250)); - colorTable.put("snow2", new Color(238, 233, 233)); - colorTable.put("snow3", new Color(205, 201, 201)); - colorTable.put("snow4", new Color(139, 137, 137)); - colorTable.put("springgreen", new Color(0, 255, 127)); - colorTable.put("springgreen1", new Color(0, 255, 127)); - colorTable.put("springgreen2", new Color(0, 238, 118)); - colorTable.put("springgreen3", new Color(0, 205, 102)); - colorTable.put("springgreen4", new Color(0, 139, 69)); - colorTable.put("steelblue", new Color(70, 130, 180)); - colorTable.put("steelblue1", new Color(99, 184, 255)); - colorTable.put("steelblue2", new Color(92, 172, 238)); - colorTable.put("steelblue3", new Color(79, 148, 205)); - colorTable.put("steelblue4", new Color(54, 100, 139)); - colorTable.put("tan", new Color(210, 180, 140)); - colorTable.put("tan1", new Color(255, 165, 79)); - colorTable.put("tan2", new Color(238, 154, 73)); - colorTable.put("tan3", new Color(205, 133, 63)); - colorTable.put("tan4", new Color(139, 90, 43)); - colorTable.put("thistle", new Color(216, 191, 216)); - colorTable.put("thistle1", new Color(255, 225, 255)); - colorTable.put("thistle2", new Color(238, 210, 238)); - colorTable.put("thistle3", new Color(205, 181, 205)); - colorTable.put("thistle4", new Color(139, 123, 139)); - colorTable.put("tomato", new Color(255, 99, 71)); - colorTable.put("tomato1", new Color(255, 99, 71)); - colorTable.put("tomato2", new Color(238, 92, 66)); - colorTable.put("tomato3", new Color(205, 79, 57)); - colorTable.put("tomato4", new Color(139, 54, 38)); - colorTable.put("turquoise", new Color(64, 224, 208)); - colorTable.put("turquoise1", new Color(0, 245, 255)); - colorTable.put("turquoise2", new Color(0, 229, 238)); - colorTable.put("turquoise3", new Color(0, 197, 205)); - colorTable.put("turquoise4", new Color(0, 134, 139)); - colorTable.put("violet", new Color(238, 130, 238)); - colorTable.put("violetred", new Color(208, 32, 144)); - colorTable.put("violetred1", new Color(255, 62, 150)); - colorTable.put("violetred2", new Color(238, 58, 140)); - colorTable.put("violetred3", new Color(205, 50, 120)); - colorTable.put("violetred4", new Color(139, 34, 82)); - colorTable.put("wheat", new Color(245, 222, 179)); - colorTable.put("wheat1", new Color(255, 231, 186)); - colorTable.put("wheat2", new Color(238, 216, 174)); - colorTable.put("wheat3", new Color(205, 186, 150)); - colorTable.put("wheat4", new Color(139, 126, 102)); - colorTable.put("white", new Color(255, 255, 255)); - colorTable.put("whitesmoke", new Color(245, 245, 245)); - colorTable.put("yellow", new Color(255, 255, 0)); - colorTable.put("yellow1", new Color(255, 255, 0)); - colorTable.put("yellow2", new Color(238, 238, 0)); - colorTable.put("yellow3", new Color(205, 205, 0)); - colorTable.put("yellow4", new Color(139, 139, 0)); - colorTable.put("yellowgreen", new Color(154, 205, 50)); + private static class ParseException extends RuntimeException { + + public ParseException() { + super("Parse error while parsing DOT file"); + } } } diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterGDF.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterGDF.java index 92ba1956ee..adb18d825c 100644 --- a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterGDF.java +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterGDF.java @@ -40,9 +40,11 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.plugin.file; import java.io.BufferedReader; +import java.io.IOException; import java.io.LineNumberReader; import java.io.Reader; import java.util.ArrayList; @@ -64,12 +66,14 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian * @author Sebastien Heymann */ public class ImporterGDF implements FileImporter, LongTask { + //Matcher + private final String[] nodeLineStart; + private final String[] edgeLineStart; //Architecture private Reader reader; private ContainerLoader container; @@ -77,18 +81,17 @@ public class ImporterGDF implements FileImporter, LongTask { private ProgressTicket progressTicket; private boolean cancel = false; //Extract - private List nodeLines = new ArrayList(); - private List edgeLines = new ArrayList(); - //Matcher - private String[] nodeLineStart; - private String[] edgeLineStart; + private final List nodeLines = new ArrayList<>(); + private final List edgeLines = new ArrayList<>(); //Columns private GDFColumn[] nodeColumns; private GDFColumn[] edgeColumns; public ImporterGDF() { - nodeLineStart = new String[]{"nodedef>name", "nodedef> name", "Nodedef>name", "Nodedef> name", "nodedef>\"name", "nodedef> \"name", "Nodedef>\"name", "Nodedef> \"name"}; - edgeLineStart = new String[]{"edgedef>", "Edgedef>"}; + nodeLineStart = + new String[] {"nodedef>name", "nodedef> name", "Nodedef>name", "Nodedef> name", "nodedef>\"name", + "nodedef> \"name", "Nodedef>\"name", "Nodedef> \"name"}; + edgeLineStart = new String[] {"edgedef>", "Edgedef>"}; } @Override @@ -100,6 +103,11 @@ public boolean execute(ContainerLoader container) { importData(lineReader); } catch (Exception e) { throw new RuntimeException(e); + } finally { + try { + lineReader.close(); + } catch (IOException ex) { + } } return !cancel; } @@ -113,7 +121,8 @@ private void importData(LineNumberReader reader) throws Exception { Progress.switchToDeterminate(progressTicket, nodeLines.size() + edgeLines.size()); //Progress //Magix regex - Pattern pattern = Pattern.compile("(?<=(?:,|^)\")(.*?)(?=(?<=(?:[^\\\\]))\",|\"$)|(?<=(?:,|^)')(.*?)(?=(?<=(?:[^\\\\]))',|'$)|(?<=(?:,|^))(?=[^'\"])(.*?)(?=(?:,|$))|(?<=,)($)"); + Pattern pattern = Pattern.compile( + "(?<=(?:,|^)\")(.*?)(?=(?<=(?:[^\\\\]))\",|\"$)|(?<=(?:,|^)')(.*?)(?=(?<=(?:[^\\\\]))',|'$)|(?<=(?:,|^))(?=[^'\"])(.*?)(?=(?:,|$))|(?<=,)($)"); //Nodes for (String nodeLine : nodeLines) { @@ -133,7 +142,7 @@ private void importData(LineNumberReader reader) throws Exception { if (start != end) { String data = nodeLine.substring(start, end); data = data.trim(); - if (!data.isEmpty() && !data.toLowerCase().equals("null")) { + if (!data.isEmpty() && !data.equalsIgnoreCase("null")) { if (count == 0) { //Id id = data; @@ -145,7 +154,9 @@ private void importData(LineNumberReader reader) throws Exception { setNodeData(node, nodeColumns[count - 1], data); } } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat7", id), Issue.Level.SEVERE)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat7", id), + Issue.Level.SEVERE)); } } } @@ -165,6 +176,9 @@ private void importData(LineNumberReader reader) throws Exception { //Create Edge EdgeDraft edge = container.factory().newEdgeDraft(); + //Default to undirected unless stated + edge.setDirection(EdgeDirection.UNDIRECTED); + Matcher m = pattern.matcher(edgeLine); int count = 0; String id = ""; @@ -174,7 +188,7 @@ private void importData(LineNumberReader reader) throws Exception { if (start != end) { String data = edgeLine.substring(start, end); data = data.trim(); - if (!data.isEmpty() && !data.toLowerCase().equals("null")) { + if (!data.isEmpty() && !data.equalsIgnoreCase("null")) { if (count == 0) { NodeDraft nodeSource = container.getNode(data); edge.setSource(nodeSource); @@ -188,7 +202,9 @@ private void importData(LineNumberReader reader) throws Exception { setEdgeData(edge, edgeColumns[count - 2], data); } } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat7", id), Issue.Level.SEVERE)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat7", id), + Issue.Level.SEVERE)); } } } @@ -211,21 +227,21 @@ private void walkFile(BufferedReader reader) throws Exception { if (isEdgeFirstLine(line)) { edgesWalking = true; findEdgeColumns(line); + } else if (!edgesWalking) { + //Nodes + nodeLines.add(line); } else { - if (!edgesWalking) { - //Nodes - nodeLines.add(line); - } else { - //Edges - edgeLines.add(line); - } + //Edges + edgeLines.add(line); } } } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat1"), Issue.Level.CRITICAL)); + report.logIssue(new Issue(NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat1"), + Issue.Level.CRITICAL)); } } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat1"), Issue.Level.CRITICAL)); + report.logIssue(new Issue(NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat1"), + Issue.Level.CRITICAL)); } } @@ -254,11 +270,14 @@ private void findNodeColumns(String line) throws Exception { //Check error if (columnName.isEmpty()) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat2"), Issue.Level.SEVERE)); + report.logIssue(new Issue(NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat2"), + Issue.Level.SEVERE)); columnName = "default" + i; } if (typeString.isEmpty()) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat6", columnName), Issue.Level.INFO)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat6", columnName), + Issue.Level.INFO)); typeString = "varchar"; } @@ -282,7 +301,9 @@ private void findNodeColumns(String line) throws Exception { } else if (typeString.equals("float")) { type = Float.class; } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat5", typeString), Issue.Level.WARNING)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat5", typeString), + Issue.Level.WARNING)); } if (columnName.equals("x")) { @@ -322,7 +343,9 @@ private void findNodeColumns(String line) throws Exception { nodeColumns[i - 1] = new GDFColumn(column); report.log("Node attribute " + columnName + " (" + type.getSimpleName() + ")"); } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat8", columnName), Issue.Level.SEVERE)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat8", columnName), + Issue.Level.SEVERE)); } } } @@ -353,11 +376,14 @@ private void findEdgeColumns(String line) throws Exception { //Check error if (columnName.isEmpty()) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat2"), Issue.Level.SEVERE)); + report.logIssue(new Issue(NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat2"), + Issue.Level.SEVERE)); columnName = "default" + i; } if (typeString.isEmpty()) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat6", columnName), Issue.Level.INFO)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat6", columnName), + Issue.Level.INFO)); typeString = "varchar"; } @@ -381,7 +407,9 @@ private void findEdgeColumns(String line) throws Exception { } else if (typeString.equals("float")) { type = Float.class; } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat5", typeString), Issue.Level.WARNING)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat5", typeString), + Issue.Level.WARNING)); } if (columnName.equals("color")) { @@ -409,7 +437,9 @@ private void findEdgeColumns(String line) throws Exception { edgeColumns[i - 2] = new GDFColumn(column); report.log("Edge attribute " + columnName + " (" + type.getSimpleName() + ")"); } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat9", columnName), Issue.Level.SEVERE)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat9", columnName), + Issue.Level.SEVERE)); } } } @@ -444,9 +474,11 @@ private void setNodeData(NodeDraft node, GDFColumn column, String data) throws E node.setY(Float.parseFloat(data)); break; case COLOR: - String[] rgb = data.split(","); + String[] rgb = data.replace(" ", "").split(","); if (rgb.length == 3) { node.setColor(rgb[0], rgb[1], rgb[2]); + } else { + node.setColor(data); } break; case FIXED: @@ -465,14 +497,17 @@ private void setNodeData(NodeDraft node, GDFColumn column, String data) throws E break; } } catch (Exception e) { - String message = NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat3", column.getNodeColumn(), node, data); + String message = NbBundle + .getMessage(ImporterGDF.class, "importerGDF_error_dataformat3", column.getNodeColumn(), node, data); report.logIssue(new Issue(message, Issue.Level.WARNING, e)); } } else if (column.getAttributeColumn() != null) { try { node.parseAndSetValue(column.getAttributeColumn().getId(), data); } catch (Exception e) { - String message = NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat4", column.getAttributeColumn().getTypeClass().getSimpleName(), column.getAttributeColumn().getTitle(), node); + String message = NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat4", + column.getAttributeColumn().getTypeClass().getSimpleName(), column.getAttributeColumn().getTitle(), + node); report.logIssue(new Issue(message, Issue.Level.WARNING, e)); } } @@ -483,9 +518,11 @@ private void setEdgeData(EdgeDraft edge, GDFColumn column, String data) throws E try { switch (column.getEdgeColumn()) { case COLOR: - String[] rgb = data.split(","); + String[] rgb = data.replace(" ", "").split(","); if (rgb.length == 3) { edge.setColor(rgb[0], rgb[1], rgb[2]); + } else { + edge.setColor(data); } break; case WEIGHT: @@ -506,14 +543,17 @@ private void setEdgeData(EdgeDraft edge, GDFColumn column, String data) throws E break; } } catch (Exception e) { - String message = NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat3", column.getEdgeColumn(), data); + String message = NbBundle + .getMessage(ImporterGDF.class, "importerGDF_error_dataformat3", column.getEdgeColumn(), data); report.logIssue(new Issue(message, Issue.Level.WARNING, e)); } } else if (column.getAttributeColumn() != null) { try { edge.parseAndSetValue(column.getAttributeColumn().getId(), data); } catch (Exception e) { - String message = NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat4", column.getAttributeColumn().getTypeClass().getSimpleName(), column.getAttributeColumn().getTitle(), edge); + String message = NbBundle.getMessage(ImporterGDF.class, "importerGDF_error_dataformat4", + column.getAttributeColumn().getTypeClass().getSimpleName(), column.getAttributeColumn().getTitle(), + edge); report.logIssue(new Issue(message, Issue.Level.WARNING, e)); } } @@ -547,15 +587,6 @@ public void setProgressTicket(ProgressTicket progressTicket) { private static class GDFColumn { - public enum NodeGuessColumn { - - X, Y, VISIBLE, FIXED, STYLE, COLOR, WIDTH, HEIGHT, LABEL, LABELVISIBLE - }; - - public enum EdgeGuessColumn { - - VISIBLE, COLOR, WEIGHT, DIRECTED, LABEL, LABELVISIBLE - }; private ColumnDraft column; private NodeGuessColumn nodeColumn; private EdgeGuessColumn edgeColumn; @@ -583,5 +614,15 @@ public EdgeGuessColumn getEdgeColumn() { public ColumnDraft getAttributeColumn() { return column; } + + public enum NodeGuessColumn { + + X, Y, VISIBLE, FIXED, STYLE, COLOR, WIDTH, HEIGHT, LABEL, LABELVISIBLE + } + + public enum EdgeGuessColumn { + + VISIBLE, COLOR, WEIGHT, DIRECTED, LABEL, LABELVISIBLE + } } } diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterGEXF.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterGEXF.java index 3b019f6245..5fb6f1509c 100644 --- a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterGEXF.java +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterGEXF.java @@ -39,16 +39,33 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.plugin.file; import java.awt.Color; import java.io.Reader; import java.math.BigDecimal; import java.math.BigInteger; -import javax.xml.stream.*; +import java.time.ZoneId; +import javax.xml.stream.Location; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLReporter; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; import javax.xml.stream.events.XMLEvent; -import org.gephi.attribute.api.TimeFormat; -import org.gephi.io.importer.api.*; +import org.gephi.graph.api.TimeFormat; +import org.gephi.graph.api.TimeRepresentation; +import org.gephi.io.importer.api.ColumnDraft; +import org.gephi.io.importer.api.ContainerLoader; +import org.gephi.io.importer.api.EdgeDirection; +import org.gephi.io.importer.api.EdgeDirectionDefault; +import org.gephi.io.importer.api.EdgeDraft; +import org.gephi.io.importer.api.ElementDraft; +import org.gephi.io.importer.api.ElementIdType; +import org.gephi.io.importer.api.Issue; +import org.gephi.io.importer.api.MetadataDraft; +import org.gephi.io.importer.api.NodeDraft; +import org.gephi.io.importer.api.Report; import org.gephi.io.importer.spi.FileImporter; import org.gephi.utils.longtask.spi.LongTask; import org.gephi.utils.progress.Progress; @@ -56,7 +73,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class ImporterGEXF implements FileImporter, LongTask { @@ -64,18 +80,28 @@ public class ImporterGEXF implements FileImporter, LongTask { //GEXF private static final String GEXF = "gexf"; private static final String GEXF_VERSION = "version"; + private static final String META = "meta"; + private static final String META_TITLE = "title"; + private static final String META_DESCRIPTION = "description"; + private static final String META_KEYWORDS = "keywords"; private static final String GRAPH = "graph"; private static final String GRAPH_DEFAULT_EDGETYPE = "defaultedgetype"; private static final String GRAPH_TIMEFORMAT = "timeformat"; + private static final String GRAPH_TIMEREPRESENTATION = "timerepresentation"; private static final String GRAPH_TIMEFORMAT2 = "timetype"; // GEXF 1.1 + private static final String GRAPH_TIMEZONE = "timezone"; + private static final String GRAPH_IDTYPE = "idtype"; private static final String START = "start"; private static final String END = "end"; - private static final String START_OPEN = "startopen"; - private static final String END_OPEN = "endopen"; + private static final String START_OPEN = "startopen"; // GEXF 1.2 + private static final String END_OPEN = "endopen"; // GEXF 1.2 + private static final String TIMESTAMP = "timestamp"; + private static final String TIMESTAMPS = "timestamps"; + private static final String INTERVALS = "intervals"; private static final String NODE = "node"; private static final String NODE_ID = "id"; private static final String NODE_LABEL = "label"; - private static final String NODE_PID = "pid"; + private static final String NODE_PID = "pid"; // GEXF 1.2 private static final String NODE_POSITION = "position"; private static final String NODE_COLOR = "color"; private static final String NODE_SIZE = "size"; @@ -89,6 +115,7 @@ public class ImporterGEXF implements FileImporter, LongTask { private static final String EDGE_TYPE = "type"; private static final String EDGE_WEIGHT = "weight"; private static final String EDGE_COLOR = "color"; + private static final String EGDE_KIND = "kind"; private static final String EDGE_SPELL = "slice"; // GEXF 1.1 private static final String EDGE_SPELL2 = "spell"; private static final String ATTRIBUTE = "attribute"; @@ -125,8 +152,8 @@ public boolean execute(ContainerLoader container) { } inputFactory.setXMLReporter(new XMLReporter() { @Override - public void report(String message, String errorType, Object relatedInformation, Location location) throws XMLStreamException { - System.out.println("Error:" + errorType + ", message : " + message); + public void report(String message, String errorType, Object relatedInformation, Location location) + throws XMLStreamException { } }); xmlReader = inputFactory.createXMLStreamReader(reader); @@ -138,10 +165,12 @@ public void report(String message, String errorType, Object relatedInformation, String name = xmlReader.getLocalName(); if (GEXF.equalsIgnoreCase(name)) { readGexf(xmlReader); + } else if (META.equalsIgnoreCase(name)) { + readMeta(xmlReader); } else if (GRAPH.equalsIgnoreCase(name)) { readGraph(xmlReader); } else if (NODE.equalsIgnoreCase(name)) { - readNode(xmlReader, null); + readNode(xmlReader); } else if (EDGE.equalsIgnoreCase(name)) { readEdge(xmlReader); } else if (ATTRIBUTES.equalsIgnoreCase(name)) { @@ -153,13 +182,19 @@ public void report(String message, String errorType, Object relatedInformation, } } } - xmlReader.close(); - } catch (Exception e) { if (e instanceof RuntimeException) { throw (RuntimeException) e; } throw new RuntimeException(e); + } finally { + try { + if (xmlReader != null) { + xmlReader.close(); + } + } catch (XMLStreamException e) { + //NOOP + } } Progress.finish(progress); return !cancel; @@ -177,24 +212,63 @@ private void readGexf(XMLStreamReader reader) throws Exception { } if (!version.isEmpty() && version.equals("1.0")) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_log_version10"), Issue.Level.INFO)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_log_version10"), Issue.Level.INFO)); } else if (!version.isEmpty() && version.equals("1.1")) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_log_version11"), Issue.Level.INFO)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_log_version11"), Issue.Level.INFO)); } else if (!version.isEmpty() && version.equals("1.2")) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_log_version12"), Issue.Level.INFO)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_log_version12"), Issue.Level.INFO)); } else if (!version.isEmpty() && version.equals("1.3")) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_log_version13"), Issue.Level.INFO)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_log_version13"), Issue.Level.INFO)); } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_log_version_undef"), Issue.Level.WARNING)); + report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_log_version_undef"), + Issue.Level.WARNING)); } } + private void readMeta(XMLStreamReader reader) throws XMLStreamException { + String description = null; + String title = null; + + String elmt = ""; + while (reader.hasNext()) { + Integer eventType = reader.next(); + if (eventType.equals(XMLEvent.START_ELEMENT)) { + elmt = reader.getLocalName(); + } else if (eventType.equals(XMLStreamReader.CHARACTERS)) { + if (!reader.isWhiteSpace()) { + if (META_DESCRIPTION.equalsIgnoreCase(elmt)) { + description = reader.getText(); + } else if (META_TITLE.equalsIgnoreCase(elmt)) { + title = reader.getText(); + } else if (META_KEYWORDS.equalsIgnoreCase(elmt)) { + // Not used + } + } + } else if (eventType.equals(XMLStreamReader.END_ELEMENT)) { + String name = reader.getLocalName(); + if (META.equalsIgnoreCase(name)) { + break; + } + } + } + + container.setMetadata(MetadataDraft.builder().description(description).title(title).build()); + } + private void readGraph(XMLStreamReader reader) throws Exception { String mode = ""; String defaultEdgeType = ""; + String timeFormat = ""; + String timeRepresentation = ""; + String timeZone = ""; + String timestamp = ""; String start = ""; String end = ""; - String timeFormat = ""; + String idType = ""; //Attributes for (int i = 0; i < reader.getAttributeCount(); i++) { @@ -203,12 +277,20 @@ private void readGraph(XMLStreamReader reader) throws Exception { defaultEdgeType = reader.getAttributeValue(i); } else if (ATTRIBUTES_TYPE2.equalsIgnoreCase(attName)) { mode = reader.getAttributeValue(i); + } else if (GRAPH_TIMEFORMAT.equalsIgnoreCase(attName) || GRAPH_TIMEFORMAT2.equalsIgnoreCase(attName)) { + timeFormat = reader.getAttributeValue(i); + } else if (GRAPH_TIMEREPRESENTATION.equalsIgnoreCase(attName)) { + timeRepresentation = reader.getAttributeValue(i); + } else if (GRAPH_TIMEZONE.equalsIgnoreCase(attName)) { + timeZone = reader.getAttributeValue(i); + } else if (TIMESTAMP.equalsIgnoreCase(attName)) { + timestamp = reader.getAttributeValue(i); } else if (START.equalsIgnoreCase(attName)) { start = reader.getAttributeValue(i); } else if (END.equalsIgnoreCase(attName)) { end = reader.getAttributeValue(i); - } else if (GRAPH_TIMEFORMAT.equalsIgnoreCase(attName) || GRAPH_TIMEFORMAT2.equalsIgnoreCase(attName)) { - timeFormat = reader.getAttributeValue(i); + } else if (GRAPH_IDTYPE.equals(attName)) { + idType = reader.getAttributeValue(i); } } @@ -219,11 +301,15 @@ private void readGraph(XMLStreamReader reader) throws Exception { } else if (defaultEdgeType.equalsIgnoreCase("directed")) { container.setEdgeDefault(EdgeDirectionDefault.DIRECTED); } else if (defaultEdgeType.equalsIgnoreCase("mutual")) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_edgedouble"), Issue.Level.WARNING)); + report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_edgedouble"), + Issue.Level.WARNING)); } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_defaultedgetype", defaultEdgeType), Issue.Level.SEVERE)); + report.logIssue(new Issue( + NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_defaultedgetype", defaultEdgeType), + Issue.Level.SEVERE)); } } + //TimeFormat if (!timeFormat.isEmpty()) { if ("double".equalsIgnoreCase(timeFormat) || "float".equalsIgnoreCase(timeFormat)) { @@ -239,21 +325,69 @@ private void readGraph(XMLStreamReader reader) throws Exception { container.setTimeFormat(TimeFormat.DOUBLE); } - //Start & End - if (!start.isEmpty()) { -// container.setTimeIntervalMin(start); + //TimeRepresentation + if (!timeRepresentation.isEmpty()) { + if ("timestamp".equalsIgnoreCase(timeRepresentation)) { + container.setTimeRepresentation(TimeRepresentation.TIMESTAMP); + } else if ("interval".equalsIgnoreCase(timeRepresentation)) { + container.setTimeRepresentation(TimeRepresentation.INTERVAL); + } + } + + //Timezone + if (!timeZone.isEmpty()) { + try { + container.setTimeZone(ZoneId.of(timeZone)); + } catch (IllegalArgumentException e) { + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_timezone_parseerror"), + Issue.Level.SEVERE)); + } } - if (!end.isEmpty()) { -// container.setTimeIntervalMax(end); + + // Slice + if (!mode.isEmpty() && mode.equalsIgnoreCase("slice")) { + if (timestamp.isEmpty() && (start.isEmpty() && end.isEmpty())) { + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_slice_bound_missing"), + Issue.Level.SEVERE)); + } + + if (!timestamp.isEmpty() && checkTimerepresentationIsTimestamp()) { + container.setTimestamp(timestamp); + } + + // Interval + if ((!start.isEmpty() || !end.isEmpty()) && checkTimerepresentationIsInterval()) { + container.setInterval(start, end); + } + } + + //Id type + if (!idType.isEmpty()) { + if (idType.equalsIgnoreCase("integer")) { + container.setElementIdType(ElementIdType.INTEGER); + } else if (idType.equalsIgnoreCase("long")) { + container.setElementIdType(ElementIdType.LONG); + } else if (idType.equalsIgnoreCase("string")) { + container.setElementIdType(ElementIdType.STRING); + } else { + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_idtype_error", idType), + Issue.Level.SEVERE)); + } } } - private void readNode(XMLStreamReader reader, NodeDraft parent) throws Exception { + private void readNode(XMLStreamReader reader) throws Exception { String id = ""; String label = ""; String startDate = ""; String endDate = ""; String pid = ""; + String timestamp = ""; + String timestamps = ""; + String intervals = ""; boolean startOpen = false; boolean endOpen = false; @@ -276,11 +410,18 @@ private void readNode(XMLStreamReader reader, NodeDraft parent) throws Exception endOpen = true; } else if (NODE_PID.equalsIgnoreCase(attName)) { pid = reader.getAttributeValue(i); + } else if (TIMESTAMP.equalsIgnoreCase(attName)) { + timestamp = reader.getAttributeValue(i); + } else if (TIMESTAMPS.equalsIgnoreCase(attName)) { + timestamps = reader.getAttributeValue(i); + } else if (INTERVALS.equalsIgnoreCase(attName)) { + intervals = reader.getAttributeValue(i); } } if (id.isEmpty()) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_nodeid"), Issue.Level.SEVERE)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_nodeid"), Issue.Level.SEVERE)); return; } @@ -293,23 +434,17 @@ private void readNode(XMLStreamReader reader, NodeDraft parent) throws Exception node.setLabel(label); //Parent -// if (parent != null) { -// node.setParent(parent); -// } else if (!pid.isEmpty()) { -// NodeDraft parentNode = container.getNode(pid); -// if (parentNode == null) { -// report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_pid_notfound", pid, id), Issue.Level.SEVERE)); -// } else { -// node.setParent(parentNode); -// } -// } + if (!pid.isEmpty()) { + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_pid", id), Issue.Level.SEVERE)); + } if (!container.nodeExists(id)) { container.addNode(node); } boolean end = false; - boolean slices = false; + boolean spells = false; while (reader.hasNext() && !end) { int type = reader.next(); @@ -317,18 +452,18 @@ private void readNode(XMLStreamReader reader, NodeDraft parent) throws Exception case XMLStreamReader.START_ELEMENT: String name = xmlReader.getLocalName(); if (ATTVALUE.equalsIgnoreCase(xmlReader.getLocalName())) { - readNodeAttValue(reader, node); + readElementAttValue(reader, node); } else if (NODE_POSITION.equalsIgnoreCase(name)) { readNodePosition(reader, node); } else if (NODE_COLOR.equalsIgnoreCase(name)) { - readNodeColor(reader, node); + readElementColor(reader, node); } else if (NODE_SIZE.equalsIgnoreCase(name)) { readNodeSize(reader, node); } else if (NODE_SPELL.equalsIgnoreCase(name) || NODE_SPELL2.equalsIgnoreCase(name)) { - readNodeSpell(reader, node); - slices = true; + readElementSpell(reader, node); + spells = true; } else if (NODE.equalsIgnoreCase(name)) { - readNode(reader, node); + readNode(reader); } break; @@ -340,22 +475,55 @@ private void readNode(XMLStreamReader reader, NodeDraft parent) throws Exception } } - //Dynamic -// if (!slices && (!startDate.isEmpty() || !endDate.isEmpty())) { -// try { -// node.addTimeInterval(startDate, endDate, startOpen, endOpen); -// } catch (IllegalArgumentException e) { -// report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_node_timeinterval_parseerror", id), Issue.Level.SEVERE)); -// } -// } + if (!spells) { + if ((!startDate.isEmpty() || !endDate.isEmpty()) && checkTimerepresentationIsInterval()) { + if (startOpen || endOpen) { + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_node_open_interval", id), + Issue.Level.WARNING)); + } + try { + node.addInterval(startDate, endDate); + } catch (Exception e) { + report.logIssue(new Issue( + NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_node_timeinterval_parseerror", id), + Issue.Level.SEVERE)); + } + } else if (!intervals.isEmpty() && checkTimerepresentationIsInterval()) { + try { + node.addIntervals(intervals); + } catch (Exception e) { + report.logIssue(new Issue( + NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_node_timeintervals_parseerror", id), + Issue.Level.SEVERE)); + } + } else if (!timestamp.isEmpty() && checkTimerepresentationIsTimestamp()) { + try { + node.addTimestamp(timestamp); + } catch (Exception e) { + report.logIssue(new Issue( + NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_node_timestamp_parseerror", id), + Issue.Level.SEVERE)); + } + } else if (!timestamps.isEmpty() && checkTimerepresentationIsTimestamp()) { + try { + node.addTimestamps(timestamps); + } catch (Exception e) { + report.logIssue(new Issue( + NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_node_timestamps_parseerror", id), + Issue.Level.SEVERE)); + } + } + } } - private void readNodeAttValue(XMLStreamReader reader, NodeDraft node) { + private void readElementAttValue(XMLStreamReader reader, ElementDraft element) { String fore = ""; String value = ""; String startDate = ""; String endDate = ""; + String timestamp = ""; boolean startOpen = false; boolean endOpen = false; @@ -375,49 +543,84 @@ private void readNodeAttValue(XMLStreamReader reader, NodeDraft node) { } else if (END_OPEN.equalsIgnoreCase(attName)) { endDate = reader.getAttributeValue(i); endOpen = true; + } else if (TIMESTAMP.equalsIgnoreCase(attName)) { + timestamp = reader.getAttributeValue(i); } } if (fore.isEmpty()) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_datakey", node), Issue.Level.SEVERE)); + report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_datakey", element), + Issue.Level.SEVERE)); return; } if (!value.isEmpty()) { //Data attribute value - ColumnDraft column = container.getNodeColumn(fore); + ColumnDraft column = + element instanceof NodeDraft ? container.getNodeColumn(fore) : container.getEdgeColumn(fore); if (column != null) { - node.parseAndSetValue(column.getId(), value); -// if (!startDate.isEmpty() || !endDate.isEmpty()) { -// //Dynamic -// try { -// node.setValue(column, value, startDate, endDate, startOpen, endOpen); -// } catch (IllegalArgumentException e) { -// report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_nodeattribute_timeinterval_parseerror", node), Issue.Level.SEVERE)); -// } catch (Exception e) { -// report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_datavalue", fore, node, column.getTitle()), Issue.Level.SEVERE)); -// } -// } else { -// if (column.getType().isDynamicType()) { -// node.addAttributeValue(column, value); -// } else { -// try { -// Object val = column.getType().parse(value); -// node.addAttributeValue(column, val); -// } catch (Exception e) { -// report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_datavalue", fore, node, column.getTitle()), Issue.Level.SEVERE)); -// } -// } -// } + if (column.isDynamic()) { + if ((!startDate.isEmpty() || !endDate.isEmpty()) && checkTimerepresentationIsInterval()) { + if (startOpen || endOpen) { + report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, + "importerGEXF_error_" + (element instanceof NodeDraft ? "node" : "edge") + + "_open_interval", element), Issue.Level.WARNING)); + } + try { + element.parseAndSetValue(column.getId(), value, startDate, endDate); + } catch (Exception e) { + report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, + "importerGEXF_error_" + (element instanceof NodeDraft ? "node" : "edge") + + "attribute_timeinterval_parseerror", element), Issue.Level.SEVERE)); + } + } else if (!timestamp.isEmpty() && checkTimerepresentationIsTimestamp()) { + try { + element.parseAndSetValue(column.getId(), value, timestamp); + } catch (Exception e) { + report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, + "importerGEXF_error_" + (element instanceof NodeDraft ? "node" : "edge") + + "attribute_timestamp_parseerror", element), Issue.Level.SEVERE)); + } + } else { + try { + //Try to parse the whole dynamic type first + element.parseAndSetValue(column.getId(), value); + } catch (Exception e1) { + if (checkTimerepresentationIsInterval()) { + //In order to support old atrribute values without start or end, try to parse a single value with infinite interval instead + try { + element.parseAndSetValue(column.getId(), value, "-inf", "inf"); + } catch (Exception e2) { + report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, + "importerGEXF_error_" + (element instanceof NodeDraft ? "node" : "edge") + + "attribute_timeinterval_parseerror", element), Issue.Level.SEVERE)); + } + } else { + report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, + "importerGEXF_error_" + (element instanceof NodeDraft ? "node" : "edge") + + "attribute_timeset_parseerror", element), Issue.Level.SEVERE)); + } + } + } + } else { + try { + element.parseAndSetValue(column.getId(), value); + } catch (Exception e) { + report.logIssue(new Issue(NbBundle + .getMessage(ImporterGEXF.class, "importerGEXF_error_datavalue", fore, element, + column.getTitle()), Issue.Level.SEVERE)); + } + } } } } - private void readNodeColor(XMLStreamReader reader, NodeDraft node) throws Exception { + private void readElementColor(XMLStreamReader reader, ElementDraft element) throws Exception { String rStr = ""; String gStr = ""; String bStr = ""; String aStr = ""; + String hexStr = ""; for (int i = 0; i < reader.getAttributeCount(); i++) { String attName = reader.getAttributeName(i).getLocalPart(); @@ -429,27 +632,60 @@ private void readNodeColor(XMLStreamReader reader, NodeDraft node) throws Except bStr = reader.getAttributeValue(i); } else if ("a".equalsIgnoreCase(attName)) { aStr = reader.getAttributeValue(i); + } else if ("hex".equalsIgnoreCase(attName)) { + hexStr = reader.getAttributeValue(i); } } - int r = (rStr.isEmpty()) ? 0 : Integer.parseInt(rStr); - int g = (gStr.isEmpty()) ? 0 : Integer.parseInt(gStr); - int b = (bStr.isEmpty()) ? 0 : Integer.parseInt(bStr); - float a = (aStr.isEmpty()) ? 0 : Float.parseFloat(aStr); //not used - if (r < 0 || r > 255) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_nodecolorvalue", rStr, node, "r"), Issue.Level.WARNING)); - } - if (g < 0 || g > 255) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_nodecolorvalue", gStr, node, "g"), Issue.Level.WARNING)); - } - if (b < 0 || b > 255) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_nodecolorvalue", bStr, node, "b"), Issue.Level.WARNING)); - } - if (a < 0f || a > 1f) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_nodeopacityvalue", aStr, node), Issue.Level.WARNING)); - } + if (!hexStr.isEmpty()) { + element.setColor(hexStr); + if (!aStr.isEmpty()) { + float a = (aStr.isEmpty()) ? 1f : Float.parseFloat(aStr); + if (a < 0f || a > 1f) { + report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, + "importerGEXF_error_" + (element instanceof NodeDraft ? "node" : "edge") + "opacityvalue", aStr, + element), Issue.Level.WARNING)); + a = 1f; + } + Color cl = element.getColor(); + element.setColor(new Color(cl.getRed(), cl.getGreen(), cl.getBlue(), a)); + } + } else { + int r = (rStr.isEmpty()) ? 0 : Integer.parseInt(rStr); + int g = (gStr.isEmpty()) ? 0 : Integer.parseInt(gStr); + int b = (bStr.isEmpty()) ? 0 : Integer.parseInt(bStr); + float a = (aStr.isEmpty()) ? 1f : Float.parseFloat(aStr); + if (r < 0 || r > 255) { + report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, + "importerGEXF_error_" + (element instanceof NodeDraft ? "node" : "edge") + "colorvalue", rStr, + element, "r"), Issue.Level.WARNING)); + r = 0; + } + if (g < 0 || g > 255) { + report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, + "importerGEXF_error_" + (element instanceof NodeDraft ? "node" : "edge") + "colorvalue", gStr, + element, "g"), Issue.Level.WARNING)); + g = 0; + } + if (b < 0 || b > 255) { + report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, + "importerGEXF_error_" + (element instanceof NodeDraft ? "node" : "edge") + "colorvalue", bStr, + element, "b"), Issue.Level.WARNING)); + b = 0; + } + if (a < 0f || a > 1f) { + report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, + "importerGEXF_error_" + (element instanceof NodeDraft ? "node" : "edge") + "opacityvalue", aStr, + element), Issue.Level.WARNING)); + a = 1f; + } - node.setColor(new Color(r, g, b)); + if (!aStr.isEmpty()) { + element.setColor(new Color(r, g, b, (int) (a * 255))); + } else { + element.setColor(new Color(r, g, b)); + } + } } private void readNodePosition(XMLStreamReader reader, NodeDraft node) throws Exception { @@ -473,7 +709,9 @@ private void readNodePosition(XMLStreamReader reader, NodeDraft node) throws Exc float x = Float.parseFloat(xStr); node.setX(x); } catch (NumberFormatException e) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_nodeposition", node, "X"), Issue.Level.WARNING)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_nodeposition", node, "X"), + Issue.Level.WARNING)); } } if (!yStr.isEmpty()) { @@ -481,7 +719,9 @@ private void readNodePosition(XMLStreamReader reader, NodeDraft node) throws Exc float y = Float.parseFloat(yStr); node.setY(y); } catch (NumberFormatException e) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_nodeposition", node, "Y"), Issue.Level.WARNING)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_nodeposition", node, "Y"), + Issue.Level.WARNING)); } } if (!zStr.isEmpty()) { @@ -489,7 +729,9 @@ private void readNodePosition(XMLStreamReader reader, NodeDraft node) throws Exc float z = Float.parseFloat(zStr); node.setZ(z); } catch (NumberFormatException e) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_nodeposition", node, "Z"), Issue.Level.WARNING)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_nodeposition", node, "Z"), + Issue.Level.WARNING)); } } } @@ -503,15 +745,18 @@ private void readNodeSize(XMLStreamReader reader, NodeDraft node) throws Excepti float size = Float.parseFloat(sizeStr); node.setSize(size); } catch (NumberFormatException e) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_nodesize", node), Issue.Level.WARNING)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_nodesize", node), + Issue.Level.WARNING)); } } } } - private void readNodeSpell(XMLStreamReader reader, NodeDraft node) throws Exception { + private void readElementSpell(XMLStreamReader reader, ElementDraft element) throws Exception { String start = ""; String end = ""; + String timestamp = ""; boolean startOpen = false; boolean endOpen = false; @@ -527,16 +772,33 @@ private void readNodeSpell(XMLStreamReader reader, NodeDraft node) throws Except } else if (END_OPEN.equalsIgnoreCase(attName)) { end = reader.getAttributeValue(i); endOpen = true; + } else if (TIMESTAMP.equalsIgnoreCase(attName)) { + timestamp = reader.getAttributeValue(i); } } -// if (!start.isEmpty() || !end.isEmpty()) { -// try { -// node.addTimeInterval(start, end, startOpen, endOpen); -// } catch (IllegalArgumentException e) { -// report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_node_timeinterval_parseerror", node), Issue.Level.SEVERE)); -// } -// } + if ((!start.isEmpty() || !end.isEmpty()) && checkTimerepresentationIsInterval()) { + if (startOpen || endOpen) { + report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, + "importerGEXF_error_" + (element instanceof NodeDraft ? "node" : "edge") + "_open_interval", + element), Issue.Level.WARNING)); + } + try { + element.addInterval(start, end); + } catch (IllegalArgumentException e) { + report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, + "importerGEXF_error_" + (element instanceof NodeDraft ? "node" : "edge") + + "_timeinterval_parseerror", element), Issue.Level.SEVERE)); + } + } else if (!timestamp.isEmpty() && checkTimerepresentationIsTimestamp()) { + try { + element.addTimestamp(timestamp); + } catch (IllegalArgumentException e) { + report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, + "importerGEXF_error_" + (element instanceof NodeDraft ? "node" : "edge") + "_timestamp_parseerror", + element), Issue.Level.SEVERE)); + } + } } private void readEdge(XMLStreamReader reader) throws Exception { @@ -545,9 +807,13 @@ private void readEdge(XMLStreamReader reader) throws Exception { String source = ""; String target = ""; String weight = ""; + String kind = ""; String edgeType = ""; String startDate = ""; String endDate = ""; + String timestamp = ""; + String timestamps = ""; + String intervals = ""; boolean startOpen = false; boolean endOpen = false; @@ -566,6 +832,8 @@ private void readEdge(XMLStreamReader reader) throws Exception { edgeType = reader.getAttributeValue(i); } else if (EDGE_LABEL.equalsIgnoreCase(attName)) { label = reader.getAttributeValue(i); + } else if (EGDE_KIND.equalsIgnoreCase(attName)) { + kind = reader.getAttributeValue(i); } else if (START.equalsIgnoreCase(attName)) { startDate = reader.getAttributeValue(i); } else if (END.equalsIgnoreCase(attName)) { @@ -576,6 +844,12 @@ private void readEdge(XMLStreamReader reader) throws Exception { } else if (END_OPEN.equalsIgnoreCase(attName)) { endDate = reader.getAttributeValue(i); endOpen = true; + } else if (TIMESTAMP.equalsIgnoreCase(attName)) { + timestamp = reader.getAttributeValue(i); + } else if (TIMESTAMPS.equalsIgnoreCase(attName)) { + timestamps = reader.getAttributeValue(i); + } else if (INTERVALS.equalsIgnoreCase(attName)) { + intervals = reader.getAttributeValue(i); } } @@ -594,9 +868,11 @@ private void readEdge(XMLStreamReader reader) throws Exception { edge.setTarget(nodeTarget); } catch (Exception e) { if (source.isEmpty()) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_edgesource"), Issue.Level.SEVERE)); + report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_edgesource"), + Issue.Level.SEVERE)); } else if (target.isEmpty()) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_edgetarget"), Issue.Level.SEVERE)); + report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_edgetarget"), + Issue.Level.SEVERE)); } else { report.logIssue(new Issue(e.getMessage(), Issue.Level.SEVERE)); } @@ -606,11 +882,13 @@ private void readEdge(XMLStreamReader reader) throws Exception { //Type if (!edgeType.isEmpty()) { if (edgeType.equalsIgnoreCase("undirected")) { - edge.setType(EdgeDirection.UNDIRECTED); + edge.setDirection(EdgeDirection.UNDIRECTED); } else if (edgeType.equalsIgnoreCase("directed")) { - edge.setType(EdgeDirection.DIRECTED); + edge.setDirection(EdgeDirection.DIRECTED); } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_edgetype", edgeType, edge), Issue.Level.SEVERE)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_edgetype", edgeType, edge), + Issue.Level.SEVERE)); } } @@ -620,7 +898,9 @@ private void readEdge(XMLStreamReader reader) throws Exception { float weightNumber = Float.parseFloat(weight); edge.setWeight(weightNumber); } catch (NumberFormatException e) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_edgeweight", edge), Issue.Level.WARNING)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_edgeweight", edge), + Issue.Level.WARNING)); } } @@ -629,6 +909,11 @@ private void readEdge(XMLStreamReader reader) throws Exception { edge.setLabel(label); } + //Kind + if (!kind.isEmpty()) { + edge.setType(kind); + } + container.addEdge(edge); boolean end = false; @@ -639,12 +924,12 @@ private void readEdge(XMLStreamReader reader) throws Exception { switch (type) { case XMLStreamReader.START_ELEMENT: if (ATTVALUE.equalsIgnoreCase(xmlReader.getLocalName())) { - readEdgeAttValue(reader, edge); + readElementAttValue(reader, edge); } else if (EDGE_COLOR.equalsIgnoreCase(xmlReader.getLocalName())) { - readEdgeColor(reader, edge); + readElementColor(reader, edge); } else if (EDGE_SPELL.equalsIgnoreCase(xmlReader.getLocalName()) - || EDGE_SPELL2.equalsIgnoreCase(xmlReader.getLocalName())) { - readEdgeSpell(reader, edge); + || EDGE_SPELL2.equalsIgnoreCase(xmlReader.getLocalName())) { + readElementSpell(reader, edge); spells = true; } break; @@ -658,147 +943,46 @@ private void readEdge(XMLStreamReader reader) throws Exception { } //Dynamic -// if (!spells && (!startDate.isEmpty() || !endDate.isEmpty())) { -// try { -// edge.addTimeInterval(startDate, endDate, startOpen, endOpen); -// } catch (IllegalArgumentException e) { -// report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_edge_timeinterval_parseerror", edge), Issue.Level.SEVERE)); -// } -// } - } - - private void readEdgeAttValue(XMLStreamReader reader, EdgeDraft edge) { - String fore = ""; - String value = ""; - String startDate = ""; - String endDate = ""; - boolean startOpen = false; - boolean endOpen = false; - - for (int i = 0; i < reader.getAttributeCount(); i++) { - String attName = reader.getAttributeName(i).getLocalPart(); - if (ATTVALUE_FOR.equalsIgnoreCase(attName) || ATTVALUE_FOR2.equalsIgnoreCase(attName)) { - fore = reader.getAttributeValue(i); - } else if (ATTVALUE_VALUE.equalsIgnoreCase(attName)) { - value = reader.getAttributeValue(i); - } else if (START.equalsIgnoreCase(attName)) { - startDate = reader.getAttributeValue(i); - } else if (END.equalsIgnoreCase(attName)) { - endDate = reader.getAttributeValue(i); - } else if (START_OPEN.equalsIgnoreCase(attName)) { - startDate = reader.getAttributeValue(i); - startOpen = true; - } else if (END_OPEN.equalsIgnoreCase(attName)) { - endDate = reader.getAttributeValue(i); - endOpen = true; - } - } - - if (fore.isEmpty()) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_datakey", edge), Issue.Level.SEVERE)); - return; - } - - if (!value.isEmpty()) { - ColumnDraft column = container.getEdgeColumn(fore); - if (column != null) { - edge.parseAndSetValue(column.getId(), value); - } -// //Data attribute value -// AttributeColumn column = container.getAttributeModel().getEdgeTable().getColumn(fore); -// if (column != null) { -// if (!startDate.isEmpty() || !endDate.isEmpty()) { -// //Dynamic -// try { -// edge.addAttributeValue(column, value, startDate, endDate, startOpen, endOpen); -// } catch (IllegalArgumentException e) { -// report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_edgeattribute_timeinterval_parseerror", edge), Issue.Level.SEVERE)); -// } catch (Exception e) { -// report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_datavalue", fore, edge, column.getTitle()), Issue.Level.SEVERE)); -// } -// } else { -// if (column.getType().isDynamicType()) { -// edge.addAttributeValue(column, value); -// } else { -// try { -// Object val = column.getType().parse(value); -// edge.addAttributeValue(column, val); -// } catch (Exception e) { -// report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_datavalue", fore, edge, column.getTitle()), Issue.Level.SEVERE)); -// } -// } -// } -// } - } - } - - private void readEdgeColor(XMLStreamReader reader, EdgeDraft edge) throws Exception { - String rStr = ""; - String gStr = ""; - String bStr = ""; - String aStr = ""; - - for (int i = 0; i < reader.getAttributeCount(); i++) { - String attName = reader.getAttributeName(i).getLocalPart(); - if ("r".equalsIgnoreCase(attName)) { - rStr = reader.getAttributeValue(i); - } else if ("g".equalsIgnoreCase(attName)) { - gStr = reader.getAttributeValue(i); - } else if ("b".equalsIgnoreCase(attName)) { - bStr = reader.getAttributeValue(i); - } else if ("a".equalsIgnoreCase(attName)) { - aStr = reader.getAttributeValue(i); - } - } - - int r = (rStr.isEmpty()) ? 0 : Integer.parseInt(rStr); - int g = (gStr.isEmpty()) ? 0 : Integer.parseInt(gStr); - int b = (bStr.isEmpty()) ? 0 : Integer.parseInt(bStr); - float a = (aStr.isEmpty()) ? 0 : Float.parseFloat(aStr); //not used - if (r < 0 || r > 255) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_edgecolorvalue", rStr, edge, "r"), Issue.Level.WARNING)); - } - if (g < 0 || g > 255) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_edgecolorvalue", gStr, edge, "g"), Issue.Level.WARNING)); - } - if (b < 0 || b > 255) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_edgecolorvalue", bStr, edge, "b"), Issue.Level.WARNING)); - } - if (a < 0f || a > 1f) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_edgeopacityvalue", aStr, edge), Issue.Level.WARNING)); - } - - edge.setColor(new Color(r, g, b)); - } - - private void readEdgeSpell(XMLStreamReader reader, EdgeDraft edge) throws Exception { - String start = ""; - String end = ""; - boolean startOpen = false; - boolean endOpen = false; - - for (int i = 0; i < reader.getAttributeCount(); i++) { - String attName = reader.getAttributeName(i).getLocalPart(); - if (START.equalsIgnoreCase(attName)) { - start = reader.getAttributeValue(i); - } else if (END.equalsIgnoreCase(attName)) { - end = reader.getAttributeValue(i); - } else if (START_OPEN.equalsIgnoreCase(attName)) { - start = reader.getAttributeValue(i); - startOpen = true; - } else if (END_OPEN.equalsIgnoreCase(attName)) { - end = reader.getAttributeValue(i); - endOpen = true; + if (!spells) { + if ((!startDate.isEmpty() || !endDate.isEmpty()) && checkTimerepresentationIsInterval()) { + if (startOpen || endOpen) { + report.logIssue(new Issue( + NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_edge_open_interval", edge), + Issue.Level.WARNING)); + } + try { + edge.addInterval(startDate, endDate); + } catch (IllegalArgumentException e) { + report.logIssue(new Issue(NbBundle + .getMessage(ImporterGEXF.class, "importerGEXF_error_edge_timeinterval_parseerror", edge), + Issue.Level.SEVERE)); + } + } else if (!intervals.isEmpty() && checkTimerepresentationIsInterval()) { + try { + edge.addIntervals(intervals); + } catch (Exception e) { + report.logIssue(new Issue(NbBundle + .getMessage(ImporterGEXF.class, "importerGEXF_error_edge_timeintervals_parseerror", edge), + Issue.Level.SEVERE)); + } + } else if (!timestamp.isEmpty() && checkTimerepresentationIsTimestamp()) { + try { + edge.addTimestamp(timestamp); + } catch (Exception e) { + report.logIssue(new Issue( + NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_edge_timestamp_parseerror", edge), + Issue.Level.SEVERE)); + } + } else if (!timestamps.isEmpty() && checkTimerepresentationIsTimestamp()) { + try { + edge.addTimestamps(timestamps); + } catch (Exception e) { + report.logIssue(new Issue( + NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_edge_timestamps_parseerror", edge), + Issue.Level.SEVERE)); + } } } - -// if (!start.isEmpty() || !end.isEmpty()) { -// try { -// edge.addTimeInterval(start, end, startOpen, endOpen); -// } catch (IllegalArgumentException e) { -// report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_edge_timeinterval_parseerror", edge), Issue.Level.SEVERE)); -// } -// } } private void readAttributes(XMLStreamReader reader) throws Exception { @@ -855,7 +1039,9 @@ private void readAttribute(XMLStreamReader reader, String classAtt, String typeA if (!id.isEmpty() && !type.isEmpty()) { //Class type if (classAtt.isEmpty() || !(classAtt.equalsIgnoreCase("node") || classAtt.equalsIgnoreCase("edge"))) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_attributeclass", title), Issue.Level.SEVERE)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_attributeclass", title), + Issue.Level.SEVERE)); } //Default? @@ -889,9 +1075,9 @@ private void readAttribute(XMLStreamReader reader, String classAtt, String typeA //Type Class attributeType = String.class; if (type.equalsIgnoreCase("boolean") || type.equalsIgnoreCase("bool")) { - attributeType = boolean.class; + attributeType = Boolean.class; } else if (type.equalsIgnoreCase("integer") || type.equalsIgnoreCase("int")) { - attributeType = int.class; + attributeType = Integer.class; } else if (type.equalsIgnoreCase("long")) { attributeType = Long.class; } else if (type.equalsIgnoreCase("float")) { @@ -906,13 +1092,13 @@ private void readAttribute(XMLStreamReader reader, String classAtt, String typeA attributeType = BigInteger.class; } else if (type.equalsIgnoreCase("byte")) { attributeType = Byte.class; - } else if (type.equalsIgnoreCase("char")) { + } else if (type.equalsIgnoreCase("char") || type.equalsIgnoreCase("character")) { attributeType = Character.class; } else if (type.equalsIgnoreCase("short")) { attributeType = Short.class; } else if (type.equalsIgnoreCase("listboolean")) { attributeType = boolean[].class; - } else if (type.equalsIgnoreCase("listint")) { + } else if (type.equalsIgnoreCase("listint") || type.equalsIgnoreCase("listinteger")) { attributeType = int[].class; } else if (type.equalsIgnoreCase("listlong")) { attributeType = long[].class; @@ -928,12 +1114,14 @@ private void readAttribute(XMLStreamReader reader, String classAtt, String typeA attributeType = BigInteger[].class; } else if (type.equalsIgnoreCase("listbyte")) { attributeType = byte[].class; - } else if (type.equalsIgnoreCase("listchar")) { + } else if (type.equalsIgnoreCase("listchar") || type.equalsIgnoreCase("listcharacter")) { attributeType = char[].class; } else if (type.equalsIgnoreCase("listshort")) { attributeType = short[].class; } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_attributetype2", type), Issue.Level.SEVERE)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_attributetype2", type), + Issue.Level.SEVERE)); return; } @@ -944,17 +1132,19 @@ private void readAttribute(XMLStreamReader reader, String classAtt, String typeA report.log(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_attributecolumn_exist", id)); return; } - column = container.addNodeColumn(id, attributeType); + column = container.addNodeColumn(id, attributeType, dynamic); column.setTitle(title); - report.log(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_log_nodeattribute", title, attributeType.getCanonicalName())); + report.log(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_log_nodeattribute", title, + attributeType.getCanonicalName())); } else if ("edge".equalsIgnoreCase(classAtt) || classAtt.isEmpty()) { if (container.getEdgeColumn(id) != null) { report.log(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_attributecolumn_exist", id)); return; } - column = container.addEdgeColumn(id, attributeType); + column = container.addEdgeColumn(id, attributeType, dynamic); column.setTitle(title); - report.log(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_log_edgeattribute", title, attributeType.getCanonicalName())); + report.log(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_log_edgeattribute", title, + attributeType.getCanonicalName())); } //Default Object @@ -963,12 +1153,36 @@ private void readAttribute(XMLStreamReader reader, String classAtt, String typeA column.setDefaultValueString(defaultStr); report.log(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_log_default", defaultStr, title)); } catch (Exception e) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_attributedefault", title, attributeType.getCanonicalName()), Issue.Level.SEVERE)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterGEXF.class, "importerGEXF_error_attributedefault", title, + attributeType.getCanonicalName()), Issue.Level.SEVERE)); } } } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_attributeempty", title), Issue.Level.SEVERE)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_attributeempty", title), + Issue.Level.SEVERE)); + } + } + + private boolean checkTimerepresentationIsInterval() { + if (!container.getTimeRepresentation().equals(TimeRepresentation.INTERVAL)) { + report.logIssue(new Issue( + NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_timerepresentation_intervalerror"), + Issue.Level.SEVERE)); + return false; } + return true; + } + + private boolean checkTimerepresentationIsTimestamp() { + if (!container.getTimeRepresentation().equals(TimeRepresentation.TIMESTAMP)) { + report.logIssue(new Issue( + NbBundle.getMessage(ImporterGEXF.class, "importerGEXF_error_timerepresentation_timestamperror"), + Issue.Level.SEVERE)); + return false; + } + return true; } @Override diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterGML.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterGML.java index 66582bee52..2f949c7a58 100644 --- a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterGML.java +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterGML.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.plugin.file; import java.awt.Color; @@ -46,7 +47,14 @@ Development and Distribution License("CDDL") (collectively, the import java.io.LineNumberReader; import java.io.Reader; import java.util.ArrayList; -import org.gephi.io.importer.api.*; +import org.gephi.io.importer.api.ContainerLoader; +import org.gephi.io.importer.api.EdgeDirection; +import org.gephi.io.importer.api.EdgeDirectionDefault; +import org.gephi.io.importer.api.EdgeDraft; +import org.gephi.io.importer.api.ImportUtils; +import org.gephi.io.importer.api.Issue; +import org.gephi.io.importer.api.NodeDraft; +import org.gephi.io.importer.api.Report; import org.gephi.io.importer.spi.FileImporter; import org.gephi.utils.longtask.spi.LongTask; import org.gephi.utils.progress.Progress; @@ -73,6 +81,11 @@ public boolean execute(ContainerLoader container) { importData(lineReader); } catch (Exception e) { throw new RuntimeException(e); + } finally { + try { + lineReader.close(); + } catch (IOException ex) { + } } return !cancel; } @@ -90,7 +103,8 @@ private void importData(LineNumberReader reader) throws Exception { } } if (!ret) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGML.class, "importerGML_error_badparsing"), Issue.Level.SEVERE)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGML.class, "importerGML_error_badparsing"), Issue.Level.SEVERE)); } Progress.finish(progressTicket); @@ -98,17 +112,17 @@ private void importData(LineNumberReader reader) throws Exception { private ArrayList parseList(LineNumberReader reader) throws IOException { - ArrayList list = new ArrayList(); - char t; + ArrayList list = new ArrayList<>(); + char t = ' '; boolean readString = false; - String stringBuffer = new String(); + String stringBuffer = ""; - while (reader.ready()) { + while (reader.ready() && (t != ((char) -1))) { t = (char) reader.read(); if (readString) { if (t == '"') { list.add(stringBuffer); - stringBuffer = new String(); + stringBuffer = ""; readString = false; } else { stringBuffer += t; @@ -127,13 +141,19 @@ private ArrayList parseList(LineNumberReader reader) throws IOException case '\t': case '\n': if (!stringBuffer.isEmpty()) { + //First try to parse as long, if not possible, try double. try { - Double doubleValue = Double.valueOf(stringBuffer); - list.add(doubleValue); - } catch (NumberFormatException e) { - list.add(stringBuffer); + Long longValue = Long.valueOf(stringBuffer); + list.add(longValue); + } catch (NumberFormatException e1) { + try { + Double doubleValue = Double.valueOf(stringBuffer); + list.add(doubleValue); + } catch (NumberFormatException e2) { + list.add(stringBuffer); + } } - stringBuffer = new String(); + stringBuffer = ""; } break; default: @@ -160,11 +180,15 @@ private boolean parseGraph(ArrayList list) { } else if ("edge".equals(key)) { ret = parseEdge((ArrayList) value); } else if ("directed".equals(key)) { - if (value instanceof Double) { - EdgeDirectionDefault edgeDefault = ((Double) value) == 1 ? EdgeDirectionDefault.DIRECTED : EdgeDirectionDefault.UNDIRECTED; + if (value instanceof Number) { + EdgeDirectionDefault edgeDefault = + ((Number) value).intValue() == 1 ? EdgeDirectionDefault.DIRECTED : + EdgeDirectionDefault.UNDIRECTED; container.setEdgeDefault(edgeDefault); } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGML.class, "importerGML_error_directedgraphparse"), Issue.Level.WARNING)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGML.class, "importerGML_error_directedgraphparse"), + Issue.Level.WARNING)); } } else { } @@ -201,7 +225,8 @@ private boolean parseNode(ArrayList list) { node.setLabel(label); } if (id == null) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGML.class, "importerGML_error_nodeidmissing"), Issue.Level.WARNING)); + report.logIssue(new Issue(NbBundle.getMessage(ImporterGML.class, "importerGML_error_nodeidmissing"), + Issue.Level.WARNING)); } boolean ret = addNodeAttributes(node, "", list); container.addNode(node); @@ -222,37 +247,45 @@ private boolean addNodeAttributes(NodeDraft node, String prefix, ArrayList list) if (!ret) { break; } - } else if ("x".equalsIgnoreCase(key) && value instanceof Double) { - node.setX(((Double) value).floatValue()); - } else if ("y".equalsIgnoreCase(key) && value instanceof Double) { - node.setY(((Double) value).floatValue()); - } else if ("z".equalsIgnoreCase(key) && value instanceof Double) { - node.setZ(((Double) value).floatValue()); - } else if ("w".equalsIgnoreCase(key) && value instanceof Double) { - node.setSize(((Double) value).floatValue()); + } else if ("x".equalsIgnoreCase(key) && value instanceof Number) { + node.setX(((Number) value).floatValue()); + } else if ("y".equalsIgnoreCase(key) && value instanceof Number) { + node.setY(((Number) value).floatValue()); + } else if ("z".equalsIgnoreCase(key) && value instanceof Number) { + node.setZ(((Number) value).floatValue()); + } else if ("w".equalsIgnoreCase(key) && value instanceof Number) { + node.setSize(((Number) value).floatValue()); } else if ("h".equalsIgnoreCase(key)) { } else if ("d".equalsIgnoreCase(key)) { } else if ("fill".equalsIgnoreCase(key)) { - int colorHex = -1; if (value instanceof String) { - String str = ((String) value).trim().replace("#", ""); - try { - colorHex = Integer.valueOf(str, 16).intValue(); - } catch (Exception e) { - } - } - if (colorHex != -1) { - node.setColor(new Color(colorHex)); + node.setColor((String) value); + } else if (value instanceof Number) { + node.setColor(new Color(((Number) value).intValue())); } } else { - node.setValue(key, value.toString()); + node.setValue(key, value); } } return ret; } private boolean parseEdge(ArrayList list) { - EdgeDraft edgeDraft = container.factory().newEdgeDraft(); + String id = null; + for (int i = 0; i < list.size(); i += 2) { + String key = (String) list.get(i); + Object value = list.get(i + 1); + if ("id".equalsIgnoreCase(key)) { + id = value.toString(); + } + } + EdgeDraft edgeDraft; + if (id != null) { + edgeDraft = container.factory().newEdgeDraft(id); + } else { + edgeDraft = container.factory().newEdgeDraft(); + } + for (int i = 0; i < list.size(); i += 2) { String key = (String) list.get(i); Object value = list.get(i + 1); @@ -263,8 +296,8 @@ private boolean parseEdge(ArrayList list) { NodeDraft target = container.getNode(value.toString()); edgeDraft.setTarget(target); } else if ("value".equals(key) || "weight".equals(key)) { - if (value instanceof Double) { - edgeDraft.setWeight(((Double) value).floatValue()); + if (value instanceof Number) { + edgeDraft.setWeight(((Number) value).doubleValue()); } } else if ("label".equals(key)) { edgeDraft.setLabel(value.toString()); @@ -280,7 +313,8 @@ private boolean addEdgeAttributes(EdgeDraft edge, String prefix, ArrayList list) for (int i = 0; i < list.size(); i += 2) { String key = (String) list.get(i); Object value = list.get(i + 1); - if ("source".equalsIgnoreCase(key) || "target".equalsIgnoreCase(key) || "value".equalsIgnoreCase(key) || "weight".equalsIgnoreCase(key) || "label".equalsIgnoreCase(key)) { + if ("id".equalsIgnoreCase(key) || "source".equalsIgnoreCase(key) || "target".equalsIgnoreCase(key) || + "value".equalsIgnoreCase(key) || "weight".equalsIgnoreCase(key) || "label".equalsIgnoreCase(key)) { continue; // already parsed } if (value instanceof ArrayList) { @@ -290,14 +324,23 @@ private boolean addEdgeAttributes(EdgeDraft edge, String prefix, ArrayList list) break; } } else if ("directed".equalsIgnoreCase(key)) { - if (value instanceof Double) { - EdgeDirection type = ((Double) value) == 1 ? EdgeDirection.DIRECTED : EdgeDirection.UNDIRECTED; - edge.setType(type); + if (value instanceof Number) { + EdgeDirection type = + ((Number) value).intValue() == 1 ? EdgeDirection.DIRECTED : EdgeDirection.UNDIRECTED; + edge.setDirection(type); } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGML.class, "importerGML_error_directedparse", edge.toString()), Issue.Level.WARNING)); + report.logIssue(new Issue( + NbBundle.getMessage(ImporterGML.class, "importerGML_error_directedparse", edge.toString()), + Issue.Level.WARNING)); + } + } else if ("fill".equalsIgnoreCase(key)) { + if (value instanceof String) { + edge.setColor((String) value); + } else if (value instanceof Number) { + edge.setColor(new Color(((Number) value).intValue())); } } else { - edge.setValue(key, value.toString()); + edge.setValue(key, value); } } return ret; diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterGraphML.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterGraphML.java index 64937111d5..81ed4695bd 100644 --- a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterGraphML.java +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterGraphML.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.plugin.file; import java.io.Reader; @@ -56,6 +57,7 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.io.importer.api.EdgeDirection; import org.gephi.io.importer.api.EdgeDirectionDefault; import org.gephi.io.importer.api.EdgeDraft; +import org.gephi.io.importer.api.ElementDraft; import org.gephi.io.importer.api.Issue; import org.gephi.io.importer.api.NodeDraft; import org.gephi.io.importer.api.PropertiesAssociations; @@ -69,7 +71,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class ImporterGraphML implements FileImporter, LongTask { @@ -85,6 +86,7 @@ public class ImporterGraphML implements FileImporter, LongTask { private static final String EDGE_SOURCE = "source"; private static final String EDGE_TARGET = "target"; private static final String EDGE_DIRECTED = "directed"; + private static final String EDGE_TYPE = "label"; private static final String ATTRIBUTE = "key"; private static final String ATTRIBUTE_ID = "id"; private static final String ATTRIBUTE_TITLE = "attr.name"; @@ -93,42 +95,44 @@ public class ImporterGraphML implements FileImporter, LongTask { private static final String ATTRIBUTE_FOR = "for"; private static final String ATTVALUE = "data"; private static final String ATTVALUE_FOR = "key"; + private static final String DESC = "desc"; + private final PropertiesAssociations properties = new PropertiesAssociations(); + private final HashMap nodePropertiesAttributes = new HashMap<>(); + private final HashMap edgePropertiesAttributes = new HashMap<>(); //Architecture private Reader reader; private ContainerLoader container; + private EdgeDirection edgeDefault; private boolean cancel; private Report report; private ProgressTicket progress; private XMLStreamReader xmlReader; - private PropertiesAssociations properties = new PropertiesAssociations(); - private HashMap nodePropertiesAttributes = new HashMap(); - private HashMap edgePropertiesAttributes = new HashMap(); public ImporterGraphML() { //Default node associations properties.addNodePropertyAssociation(NodeProperties.LABEL, "label"); - properties.addNodePropertyAssociation(NodeProperties.LABEL, "d3"); // Default node label used by yEd from yworks.com. + properties.addNodePropertyAssociation(NodeProperties.LABEL, "nodelabel"); properties.addNodePropertyAssociation(NodeProperties.X, "x"); properties.addNodePropertyAssociation(NodeProperties.Y, "y"); + properties.addNodePropertyAssociation(NodeProperties.Z, "z"); properties.addNodePropertyAssociation(NodeProperties.X, "xpos"); properties.addNodePropertyAssociation(NodeProperties.Y, "ypos"); - properties.addNodePropertyAssociation(NodeProperties.Z, "z"); + properties.addNodePropertyAssociation(NodeProperties.Z, "zpos"); properties.addNodePropertyAssociation(NodeProperties.SIZE, "size"); properties.addNodePropertyAssociation(NodeProperties.R, "r"); properties.addNodePropertyAssociation(NodeProperties.G, "g"); properties.addNodePropertyAssociation(NodeProperties.B, "b"); + properties.addNodePropertyAssociation(NodeProperties.COLOR, "color"); //Default edge associations properties.addEdgePropertyAssociation(EdgeProperties.LABEL, "label"); properties.addEdgePropertyAssociation(EdgeProperties.LABEL, "edgelabel"); - properties.addEdgePropertyAssociation(EdgeProperties.LABEL, "d7"); // Default edge label used by yEd from yworks.com. properties.addEdgePropertyAssociation(EdgeProperties.WEIGHT, "weight"); properties.addEdgePropertyAssociation(EdgeProperties.WEIGHT, "Edge Weight"); - properties.addEdgePropertyAssociation(EdgeProperties.ID, "id"); - properties.addEdgePropertyAssociation(EdgeProperties.ID, "edgeid"); properties.addEdgePropertyAssociation(EdgeProperties.R, "r"); properties.addEdgePropertyAssociation(EdgeProperties.G, "g"); properties.addEdgePropertyAssociation(EdgeProperties.B, "b"); + properties.addEdgePropertyAssociation(EdgeProperties.COLOR, "color"); } @Override @@ -144,8 +148,8 @@ public boolean execute(ContainerLoader container) { } inputFactory.setXMLReporter(new XMLReporter() { @Override - public void report(String message, String errorType, Object relatedInformation, Location location) throws XMLStreamException { - System.out.println("Error:" + errorType + ", message : " + message); + public void report(String message, String errorType, Object relatedInformation, Location location) + throws XMLStreamException { } }); xmlReader = inputFactory.createXMLStreamReader(reader); @@ -171,13 +175,16 @@ public void report(String message, String errorType, Object relatedInformation, } } } - xmlReader.close(); - } catch (Exception e) { if (e instanceof RuntimeException) { throw (RuntimeException) e; } throw new RuntimeException(e); + } finally { + try { + xmlReader.close(); + } catch (XMLStreamException e) { + } } Progress.finish(progress); return !cancel; @@ -191,20 +198,28 @@ private void readGraph(XMLStreamReader reader) throws Exception { for (int i = 0; i < reader.getAttributeCount(); i++) { String attName = reader.getAttributeName(i).getLocalPart(); if (GRAPH_DEFAULT_EDGETYPE.equalsIgnoreCase(attName)) { - defaultEdgeType = reader.getAttributeValue(i); + defaultEdgeType = reader.getAttributeValue(i).trim(); } else if (GRAPH_ID.equalsIgnoreCase(attName)) { id = reader.getAttributeValue(i); } } //Edge Type + // Container edge type should NOT be set to default edge type, as this is + // not what it really means. Mixed is the appropriate type, as GraphML supports + // mixed edge types. + container.setEdgeDefault(EdgeDirectionDefault.MIXED); + edgeDefault = EdgeDirection.DIRECTED; + if (!defaultEdgeType.isEmpty()) { if (defaultEdgeType.equalsIgnoreCase("undirected")) { - container.setEdgeDefault(EdgeDirectionDefault.UNDIRECTED); + edgeDefault = EdgeDirection.UNDIRECTED; } else if (defaultEdgeType.equalsIgnoreCase("directed")) { - container.setEdgeDefault(EdgeDirectionDefault.DIRECTED); + edgeDefault = EdgeDirection.DIRECTED; } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_defaultedgetype", defaultEdgeType), Issue.Level.SEVERE)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterGraphML.class, "importerGraphML_error_defaultedgetype", defaultEdgeType), + Issue.Level.SEVERE)); } } } @@ -221,7 +236,8 @@ private void readNode(XMLStreamReader reader, NodeDraft parent) throws Exception } if (id.isEmpty()) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_nodeid"), Issue.Level.SEVERE)); + report.logIssue(new Issue(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_nodeid"), + Issue.Level.SEVERE)); return; } @@ -233,7 +249,6 @@ private void readNode(XMLStreamReader reader, NodeDraft parent) throws Exception } //TODO - PARENT REL - if (!container.nodeExists(id)) { container.addNode(node); } @@ -249,6 +264,8 @@ private void readNode(XMLStreamReader reader, NodeDraft parent) throws Exception readNodeAttValue(reader, node); } else if (NODE.equalsIgnoreCase(name)) { readNode(reader, node); + } else if (DESC.equals(name)) { + readDesc(reader, node); } break; @@ -268,12 +285,13 @@ private void readNodeAttValue(XMLStreamReader reader, NodeDraft node) throws Exc for (int i = 0; i < reader.getAttributeCount(); i++) { String attName = reader.getAttributeName(i).getLocalPart(); if (ATTVALUE_FOR.equalsIgnoreCase(attName)) { - fore = reader.getAttributeValue(i); + fore = reader.getAttributeValue(i).trim(); } } if (fore.isEmpty()) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_datakey", node), Issue.Level.SEVERE)); + report.logIssue(new Issue(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_datakey", node), + Issue.Level.SEVERE)); return; } @@ -282,6 +300,7 @@ private void readNodeAttValue(XMLStreamReader reader, NodeDraft node) throws Exc int xmltype = reader.next(); switch (xmltype) { + case XMLStreamReader.CDATA: case XMLStreamReader.CHARACTERS: if (!xmlReader.isWhiteSpace()) { value += xmlReader.getText(); @@ -316,32 +335,39 @@ private void readNodeAttValue(XMLStreamReader reader, NodeDraft node) throws Exc case LABEL: node.setLabel(value); break; + case COLOR: + node.setColor(value); + break; case R: if (node.getColor() == null) { node.setColor(Integer.parseInt(value), 0, 0); } else { - node.setColor(Integer.parseInt(value), node.getColor().getGreen(), node.getColor().getBlue()); + node.setColor(Integer.parseInt(value), node.getColor().getGreen(), + node.getColor().getBlue()); } break; case G: if (node.getColor() == null) { node.setColor(0, Integer.parseInt(value), 0); } else { - node.setColor(node.getColor().getRed(), Integer.parseInt(value), node.getColor().getBlue()); + node.setColor(node.getColor().getRed(), Integer.parseInt(value), + node.getColor().getBlue()); } break; case B: if (node.getColor() == null) { node.setColor(0, 0, Integer.parseInt(value)); } else { - node.setColor(node.getColor().getRed(), node.getColor().getGreen(), Integer.parseInt(value)); + node.setColor(node.getColor().getRed(), node.getColor().getGreen(), + Integer.parseInt(value)); } break; } } catch (Exception e) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_datavalue", fore, node, prop.toString()), Issue.Level.SEVERE)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterGraphML.class, "importerGraphML_error_datavalue", fore, node, + prop.toString()), Issue.Level.SEVERE)); } - return; } //Data attribute value @@ -350,17 +376,46 @@ private void readNodeAttValue(XMLStreamReader reader, NodeDraft node) throws Exc try { node.parseAndSetValue(column.getId(), value); } catch (Exception e) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_datavalue", fore, node, column.getTitle()), Issue.Level.SEVERE)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterGraphML.class, "importerGraphML_error_datavalue", fore, node, + column.getTitle()), Issue.Level.SEVERE)); } } } } + private void readDesc(XMLStreamReader reader, ElementDraft element) throws Exception { + StringBuilder value = new StringBuilder(); + boolean end = false; + while (reader.hasNext() && !end) { + int xmltype = reader.next(); + + switch (xmltype) { + case XMLStreamReader.CDATA: + case XMLStreamReader.CHARACTERS: + if (!xmlReader.isWhiteSpace()) { + value.append(xmlReader.getText()); + } + break; + case XMLStreamReader.END_ELEMENT: + if (DESC.equalsIgnoreCase(xmlReader.getLocalName())) { + end = true; + } + break; + } + } + + if (!value.toString().isEmpty()) { + element.setLabel(value.toString()); + } + } + private void readEdge(XMLStreamReader reader) throws Exception { String id = ""; String source = ""; String target = ""; String directed = ""; + String type = null; //Attributes for (int i = 0; i < reader.getAttributeCount(); i++) { @@ -373,6 +428,8 @@ private void readEdge(XMLStreamReader reader) throws Exception { id = reader.getAttributeValue(i); } else if (EDGE_DIRECTED.equalsIgnoreCase(attName)) { directed = reader.getAttributeValue(i); + } else if (EDGE_TYPE.equalsIgnoreCase(attName)) { + type = reader.getAttributeValue(i).trim(); } } @@ -388,28 +445,38 @@ private void readEdge(XMLStreamReader reader) throws Exception { NodeDraft nodeTarget = container.getNode(target); edge.setSource(nodeSource); edge.setTarget(nodeTarget); + if (type != null && !type.isEmpty()) { + //Edge labels not retained on graphml export https://github.com/gephi/gephi/issues/1516 + edge.setType(type); + } //Type if (!directed.isEmpty()) { if (directed.equalsIgnoreCase("true")) { - edge.setType(EdgeDirection.DIRECTED); + edge.setDirection(EdgeDirection.DIRECTED); } else if (directed.equalsIgnoreCase("false")) { - edge.setType(EdgeDirection.UNDIRECTED); + edge.setDirection(EdgeDirection.UNDIRECTED); } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_edgetype", directed, edge), Issue.Level.SEVERE)); + report.logIssue(new Issue( + NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_edgetype", directed, edge), + Issue.Level.SEVERE)); + edge.setDirection(edgeDefault); } + } else { + edge.setDirection(edgeDefault); } - - boolean end = false; while (reader.hasNext() && !end) { - int type = reader.next(); + int elemType = reader.next(); - switch (type) { + switch (elemType) { case XMLStreamReader.START_ELEMENT: - if (ATTVALUE.equalsIgnoreCase(xmlReader.getLocalName())) { + String name = xmlReader.getLocalName(); + if (ATTVALUE.equalsIgnoreCase(name)) { readEdgeAttValue(reader, edge); + } else if (DESC.equals(name)) { + readDesc(reader, edge); } break; @@ -430,12 +497,13 @@ private void readEdgeAttValue(XMLStreamReader reader, EdgeDraft edge) throws Exc for (int i = 0; i < reader.getAttributeCount(); i++) { String attName = reader.getAttributeName(i).getLocalPart(); if (ATTVALUE_FOR.equalsIgnoreCase(attName)) { - fore = reader.getAttributeValue(i); + fore = reader.getAttributeValue(i).trim(); } } if (fore.isEmpty()) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_datakey", edge), Issue.Level.SEVERE)); + report.logIssue(new Issue(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_datakey", edge), + Issue.Level.SEVERE)); return; } @@ -444,6 +512,7 @@ private void readEdgeAttValue(XMLStreamReader reader, EdgeDraft edge) throws Exc int xmltype = reader.next(); switch (xmltype) { + case XMLStreamReader.CDATA: case XMLStreamReader.CHARACTERS: if (!xmlReader.isWhiteSpace()) { value += xmlReader.getText(); @@ -468,32 +537,39 @@ private void readEdgeAttValue(XMLStreamReader reader, EdgeDraft edge) throws Exc case LABEL: edge.setLabel(value); break; + case COLOR: + edge.setColor(value); + break; case R: if (edge.getColor() == null) { edge.setColor(Integer.parseInt(value), 0, 0); } else { - edge.setColor(Integer.parseInt(value), edge.getColor().getGreen(), edge.getColor().getBlue()); + edge.setColor(Integer.parseInt(value), edge.getColor().getGreen(), + edge.getColor().getBlue()); } break; case G: if (edge.getColor() == null) { edge.setColor(0, Integer.parseInt(value), 0); } else { - edge.setColor(edge.getColor().getRed(), Integer.parseInt(value), edge.getColor().getBlue()); + edge.setColor(edge.getColor().getRed(), Integer.parseInt(value), + edge.getColor().getBlue()); } break; case B: if (edge.getColor() == null) { edge.setColor(0, 0, Integer.parseInt(value)); } else { - edge.setColor(edge.getColor().getRed(), edge.getColor().getGreen(), Integer.parseInt(value)); + edge.setColor(edge.getColor().getRed(), edge.getColor().getGreen(), + Integer.parseInt(value)); } break; } } catch (Exception e) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_datavalue", fore, edge, prop.toString()), Issue.Level.SEVERE)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterGraphML.class, "importerGraphML_error_datavalue", fore, edge, + prop.toString()), Issue.Level.SEVERE)); } - return; } //Data attribute value @@ -502,7 +578,9 @@ private void readEdgeAttValue(XMLStreamReader reader, EdgeDraft edge) throws Exc try { edge.parseAndSetValue(column.getId(), value); } catch (Exception e) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_datavalue", fore, edge, column.getTitle()), Issue.Level.SEVERE)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterGraphML.class, "importerGraphML_error_datavalue", fore, edge, + column.getTitle()), Issue.Level.SEVERE)); } } } @@ -513,17 +591,17 @@ private void readAttribute(XMLStreamReader reader) throws Exception { String type = ""; String title = ""; String defaultStr = ""; - String forStr = ""; + String forStr = "all"; for (int i = 0; i < reader.getAttributeCount(); i++) { String attName = reader.getAttributeName(i).getLocalPart(); if (ATTRIBUTE_ID.equalsIgnoreCase(attName)) { - id = reader.getAttributeValue(i); + id = reader.getAttributeValue(i).trim(); } else if (ATTRIBUTE_TYPE.equalsIgnoreCase(attName)) { - type = reader.getAttributeValue(i); + type = reader.getAttributeValue(i).trim(); } else if (ATTRIBUTE_TITLE.equalsIgnoreCase(attName)) { - title = reader.getAttributeValue(i); + title = reader.getAttributeValue(i).trim(); } else if (ATTRIBUTE_FOR.equalsIgnoreCase(attName)) { - forStr = reader.getAttributeValue(i); + forStr = reader.getAttributeValue(i).trim(); } } @@ -535,37 +613,52 @@ private void readAttribute(XMLStreamReader reader) throws Exception { if (!id.isEmpty()) { //Properties if (forStr.equalsIgnoreCase("node")) { - NodeProperties prop = properties.getNodeProperty(id) == null ? properties.getNodeProperty(title) : properties.getNodeProperty(id); + NodeProperties prop = properties.getNodeProperty(id) == null ? properties.getNodeProperty(title) : + properties.getNodeProperty(id); if (prop != null) { nodePropertiesAttributes.put(id, prop); report.log(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_log_nodeproperty", title)); property = true; } } else if (forStr.equalsIgnoreCase("edge")) { - EdgeProperties prop = properties.getEdgeProperty(id) == null ? properties.getEdgeProperty(title) : properties.getEdgeProperty(id); + EdgeProperties prop = properties.getEdgeProperty(id) == null ? properties.getEdgeProperty(title) : + properties.getEdgeProperty(id); if (prop != null) { edgePropertiesAttributes.put(id, prop); report.log(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_log_edgeproperty", title)); property = true; } } + if (property) { return; } } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_attributeempty", title), Issue.Level.SEVERE)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_attributeempty", title), + Issue.Level.SEVERE)); return; } if (!property && type.isEmpty()) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_attributetype1", title), Issue.Level.SEVERE)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_attributetype1", title), + Issue.Level.SEVERE)); type = "string"; } if (!property) { - //Class type - if (forStr.isEmpty() || !(forStr.equalsIgnoreCase("node") || forStr.equalsIgnoreCase("edge") || forStr.equalsIgnoreCase("all"))) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_attributeclass", title), Issue.Level.SEVERE)); + //Graph attributes not supported + if (forStr.equalsIgnoreCase("graph")) { + report.logIssue( + new Issue( + NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_graphattributes", title), + Issue.Level.WARNING)); + } else if (forStr.isEmpty() || !(forStr.equalsIgnoreCase("node") || forStr.equalsIgnoreCase("edge") || + forStr.equalsIgnoreCase("all"))) { + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_attributeclass", title), + Issue.Level.SEVERE)); return; } @@ -641,7 +734,9 @@ private void readAttribute(XMLStreamReader reader) throws Exception { } else if (type.equalsIgnoreCase("listshort")) { attributeType = short[].class; } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_attributetype2", type), Issue.Level.SEVERE)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_attributetype2", type), + Issue.Level.SEVERE)); return; } @@ -649,32 +744,43 @@ private void readAttribute(XMLStreamReader reader) throws Exception { ColumnDraft column = null; if ("node".equalsIgnoreCase(forStr) || "all".equalsIgnoreCase(forStr)) { if (container.getNodeColumn(id) != null) { - report.log(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_attributecolumn_exist", id)); + report.log( + NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_attributecolumn_exist", id)); return; } column = container.addNodeColumn(id, attributeType); column.setTitle(title); - report.log(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_log_nodeattribute", title, attributeType.getCanonicalName())); - } else if ("edge".equalsIgnoreCase(forStr) || "all".equalsIgnoreCase(forStr)) { + report.log(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_log_nodeattribute", title, + attributeType.getCanonicalName())); + } + + if ("edge".equalsIgnoreCase(forStr) || "all".equalsIgnoreCase(forStr)) { if (container.getEdgeColumn(id) != null) { - report.log(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_attributecolumn_exist", id)); + report.log( + NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_attributecolumn_exist", id)); return; } column = container.addEdgeColumn(id, attributeType); column.setTitle(title); - report.log(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_log_edgeattribute", title, attributeType.getCanonicalName())); + report.log(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_log_edgeattribute", title, + attributeType.getCanonicalName())); } if (column != null && !defaultStr.isEmpty()) { try { column.setDefaultValueString(defaultStr); - report.log(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_log_default", defaultStr, title)); + report.log( + NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_log_default", defaultStr, title)); } catch (Exception e) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_attributedefault", title, attributeType.getCanonicalName()), Issue.Level.SEVERE)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterGraphML.class, "importerGraphML_error_attributedefault", title, + attributeType.getCanonicalName()), Issue.Level.SEVERE)); } } } else { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_attributeempty", title), Issue.Level.SEVERE)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterGraphML.class, "importerGraphML_error_attributeempty", title), + Issue.Level.SEVERE)); } } diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterPajek.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterPajek.java index 18047137ff..0adbb4d395 100644 --- a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterPajek.java +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterPajek.java @@ -39,13 +39,13 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.plugin.file; -import java.awt.Color; import java.io.BufferedReader; +import java.io.IOException; import java.io.LineNumberReader; import java.io.Reader; -import java.util.HashMap; import java.util.StringTokenizer; import org.gephi.io.importer.api.ContainerLoader; import org.gephi.io.importer.api.EdgeDraft; @@ -60,112 +60,10 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class ImporterPajek implements FileImporter, LongTask { - // Crayola colors used by Pajek - private static final HashMap PAJEK_COLORS = new HashMap(); - - static { - PAJEK_COLORS.put("Apricot", 0xFDD9B5); - PAJEK_COLORS.put("Aquamarine", 0x78DBE2); - PAJEK_COLORS.put("Bittersweet", 0xFD7C6E); - PAJEK_COLORS.put("Black", 0x232323); - PAJEK_COLORS.put("Blue", 0x1F75FE); - PAJEK_COLORS.put("BlueGreen", 0x199EBD); - PAJEK_COLORS.put("BlueViolet", 0x7366BD); - PAJEK_COLORS.put("BrickRed", 0xCB4154); - PAJEK_COLORS.put("Brown", 0xB4674D); - PAJEK_COLORS.put("BurntOrange", 0xFF7F49); - PAJEK_COLORS.put("CadetBlue", 0xB0B7C6); - PAJEK_COLORS.put("Canary", 0xFFFF99); - PAJEK_COLORS.put("CarnationPink", 0xFFAACC); - PAJEK_COLORS.put("Cerulean", 0x1DACD6); - PAJEK_COLORS.put("CornflowerBlue", 0x9ACEEB); - PAJEK_COLORS.put("Cyan", 0x00FFFF); - PAJEK_COLORS.put("Dandelion", 0xFDDB6D); - PAJEK_COLORS.put("DarkOrchid", 0xFDDB7D); - PAJEK_COLORS.put("Emerald", 0x50C878); - PAJEK_COLORS.put("ForestGreen", 0x6DAE81); - PAJEK_COLORS.put("Fuchsia", 0xC364C5); - PAJEK_COLORS.put("Goldenrod", 0xFCD975); - PAJEK_COLORS.put("Gray", 0x95918C); - PAJEK_COLORS.put("Gray05", 0x0D0D0D); - PAJEK_COLORS.put("Gray10", 0x1A1A1A); - PAJEK_COLORS.put("Gray15", 0x262626); - PAJEK_COLORS.put("Gray20", 0x333333); - PAJEK_COLORS.put("Gray25", 0x404040); - PAJEK_COLORS.put("Gray30", 0x4D4D4D); - PAJEK_COLORS.put("Gray35", 0x595959); - PAJEK_COLORS.put("Gray40", 0x666666); - PAJEK_COLORS.put("Gray45", 0x737373); - PAJEK_COLORS.put("Gray55", 0x8C8C8C); - PAJEK_COLORS.put("Gray60", 0x999999); - PAJEK_COLORS.put("Gray65", 0xA6A6A6); - PAJEK_COLORS.put("Gray70", 0xB3B3B3); - PAJEK_COLORS.put("Gray75", 0xBFBFBF); - PAJEK_COLORS.put("Gray80", 0xCCCCCC); - PAJEK_COLORS.put("Gray85", 0xD9D9D9); - PAJEK_COLORS.put("Gray90", 0xE5E5E5); - PAJEK_COLORS.put("Gray95", 0xF2F2F2); - PAJEK_COLORS.put("Green", 0x1CAC78); - PAJEK_COLORS.put("GreenYellow", 0xF0E891); - PAJEK_COLORS.put("JungleGreen", 0x3BB08F); - PAJEK_COLORS.put("Lavender", 0xFCB4D5); - PAJEK_COLORS.put("LFadedGreen", 0x548B54); - PAJEK_COLORS.put("LightCyan", 0xE0FFFF); - PAJEK_COLORS.put("LightGreen", 0x90EE90); - PAJEK_COLORS.put("LightMagenta", 0xFF00FF); - PAJEK_COLORS.put("LightOrange", 0xFF6F1A); - PAJEK_COLORS.put("LightPurple", 0xE066FF); - PAJEK_COLORS.put("LightYellow", 0xFFFFE0); - PAJEK_COLORS.put("LimeGreen", 0x32CD32); - PAJEK_COLORS.put("LSkyBlue", 0x87CEFA); - PAJEK_COLORS.put("Magenta", 0xF664AF); - PAJEK_COLORS.put("Mahogany", 0xCD4A4A); - PAJEK_COLORS.put("Maroon", 0xC8385A); - PAJEK_COLORS.put("Melon", 0xFDBCB4); - PAJEK_COLORS.put("MidnightBlue", 0x1A4876); - PAJEK_COLORS.put("Mulberry", 0xAA709F); - PAJEK_COLORS.put("NavyBlue", 0x1974D2); - PAJEK_COLORS.put("OliveGreen", 0xBAB86C); - PAJEK_COLORS.put("Orange", 0xFF7538); - PAJEK_COLORS.put("OrangeRed", 0xFF5349); - PAJEK_COLORS.put("Orchid", 0xE6A8D7); - PAJEK_COLORS.put("Peach", 0xFFCFAB); - PAJEK_COLORS.put("Periwinkle", 0xC5D0E6); - PAJEK_COLORS.put("PineGreen", 0x158078); - PAJEK_COLORS.put("Pink", 0xFFC0CB); - PAJEK_COLORS.put("Plum", 0x8E4585); - PAJEK_COLORS.put("ProcessBlue", 0x4169E1); - PAJEK_COLORS.put("Purple", 0x926EAE); - PAJEK_COLORS.put("RawSienna", 0xD68A59); - PAJEK_COLORS.put("Red", 0xEE204D); - PAJEK_COLORS.put("RedOrange", 0xFF5349); - PAJEK_COLORS.put("RedViolet", 0xC0448F); - PAJEK_COLORS.put("Rhodamine", 0xE0119D); - PAJEK_COLORS.put("RoyalBlue", 0x4169E1); - PAJEK_COLORS.put("RoyalPurple", 0x7851A9); - PAJEK_COLORS.put("RubineRed", 0xCA005D); - PAJEK_COLORS.put("Salmon", 0xFF9BAA); - PAJEK_COLORS.put("SeaGreen", 0x9FE2BF); - PAJEK_COLORS.put("Sepia", 0xA5694F); - PAJEK_COLORS.put("SkyBlue", 0x80DAEB); - PAJEK_COLORS.put("SpringGreen", 0xECEABE); - PAJEK_COLORS.put("Tan", 0xFAA76C); - PAJEK_COLORS.put("TealBlue", 0x008080); - PAJEK_COLORS.put("Thistle", 0xD8BFD8); - PAJEK_COLORS.put("Turquoise", 0x77DDE7); - PAJEK_COLORS.put("Violet", 0x926EAE); - PAJEK_COLORS.put("VioletRed", 0xF75394); - PAJEK_COLORS.put("White", 0xEDEDED); - PAJEK_COLORS.put("WildStrawberry", 0xFF43A4); - PAJEK_COLORS.put("Yellow", 0xFCE883); - PAJEK_COLORS.put("YellowGreen", 0xC5E384); - PAJEK_COLORS.put("YellowOrange", 0xFFB653); - } //Architecture private Reader reader; private LineNumberReader lineReader; @@ -185,6 +83,11 @@ public boolean execute(ContainerLoader container) { importData(lineReader); } catch (Exception e) { throw new RuntimeException(e); + } finally { + try { + lineReader.close(); + } catch (IOException ex) { + } } return !cancel; } @@ -198,7 +101,8 @@ private void importData(LineNumberReader reader) throws Exception { if (curLine == null) // no vertices in the graph; return empty graph { - report.logIssue(new Issue(NbBundle.getMessage(ImporterPajek.class, "importerNET_error_dataformat1"), Issue.Level.CRITICAL)); + report.logIssue(new Issue(NbBundle.getMessage(ImporterPajek.class, "importerNET_error_dataformat1"), + Issue.Level.CRITICAL)); } // create appropriate number of vertices @@ -227,7 +131,9 @@ private void importData(LineNumberReader reader) throws Exception { break; } if (curLine.isEmpty()) { // skip blank lines - report.logIssue(new Issue(NbBundle.getMessage(ImporterPajek.class, "importerNET_error_dataformat2", reader.getLineNumber()), Issue.Level.WARNING)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterPajek.class, "importerNET_error_dataformat2", reader.getLineNumber()), + Issue.Level.WARNING)); continue; } @@ -254,7 +160,6 @@ private void importData(LineNumberReader reader) throws Exception { reader.close(); } catch (Exception e) { - e.printStackTrace(); throw new RuntimeException(e); } Progress.finish(progressTicket); @@ -270,7 +175,9 @@ private void readVertex(String curLine, int num_vertices) throws Exception { String[] initial_split = curLine.trim().split("\""); // if there are any quote marks, there should be exactly 2 if (initial_split.length < 1 || initial_split.length > 3) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterPajek.class, "importerNET_error_dataformat3", lineReader.getLineNumber()), Issue.Level.SEVERE)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterPajek.class, "importerNET_error_dataformat3", lineReader.getLineNumber()), + Issue.Level.SEVERE)); } index = initial_split[0].trim(); if (initial_split.length > 1) { @@ -301,7 +208,9 @@ private void readVertex(String curLine, int num_vertices) throws Exception { } int v_id = Integer.parseInt(index) - 1; // go from 1-based to 0-based index if (v_id >= num_vertices || v_id < 0) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterPajek.class, "importerNET_error_dataformat4", v_id, num_vertices), Issue.Level.SEVERE)); + report.logIssue( + new Issue(NbBundle.getMessage(ImporterPajek.class, "importerNET_error_dataformat4", v_id, num_vertices), + Issue.Level.SEVERE)); } NodeDraft node = verticesArray[v_id]; @@ -325,7 +234,9 @@ private void readVertex(String curLine, int num_vertices) throws Exception { i++; } catch (Exception e) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterPajek.class, "importerNET_error_dataformat5", lineReader.getLineNumber()), Issue.Level.WARNING)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterPajek.class, "importerNET_error_dataformat5", lineReader.getLineNumber()), + Issue.Level.WARNING)); } } @@ -338,7 +249,9 @@ private void readVertex(String curLine, int num_vertices) throws Exception { i++; } catch (Exception e) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterPajek.class, "importerNET_error_dataformat6", lineReader.getLineNumber()), Issue.Level.WARNING)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterPajek.class, "importerNET_error_dataformat6", lineReader.getLineNumber()), + Issue.Level.WARNING)); } } @@ -346,9 +259,9 @@ private void readVertex(String curLine, int num_vertices) throws Exception { for (; i < parts.length - 1; i++) { // node's internal color if ("ic".equals(parts[i])) { - String colorName = parts[i + 1].replaceAll(" ", ""); // remove spaces from color's name so we can look it up - Color color = getPajekColorFromName(colorName); - node.setColor(color); + String colorName = + parts[i + 1].replaceAll(" ", ""); // remove spaces from color's name so we can look it up + node.setColor(colorName); break; } } @@ -371,10 +284,7 @@ private String readArcsOrEdges(String curLine, BufferedReader br) throws Excepti return nextLine; } - boolean is_list = false; - if (nextLine.toLowerCase().endsWith("list")) { - is_list = true; - } + boolean is_list = nextLine.toLowerCase().endsWith("list"); while (br.ready()) { if (cancel) { @@ -385,7 +295,9 @@ private String readArcsOrEdges(String curLine, BufferedReader br) throws Excepti break; } if (nextLine.equals("")) { // skip blank lines - report.logIssue(new Issue(NbBundle.getMessage(ImporterPajek.class, "importerNET_error_dataformat2", lineReader.getLineNumber()), Issue.Level.WARNING)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterPajek.class, "importerNET_error_dataformat2", lineReader.getLineNumber()), + Issue.Level.WARNING)); continue; } @@ -418,7 +330,9 @@ private String readArcsOrEdges(String curLine, BufferedReader br) throws Excepti try { edgeWeight = new Double(st.nextToken()); } catch (Exception e) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterPajek.class, "importerNET_error_dataformat7", lineReader.getLineNumber()), Issue.Level.WARNING)); + report.logIssue(new Issue(NbBundle + .getMessage(ImporterPajek.class, "importerNET_error_dataformat7", + lineReader.getLineNumber()), Issue.Level.WARNING)); } edge.setWeight(edgeWeight); @@ -430,17 +344,6 @@ private String readArcsOrEdges(String curLine, BufferedReader br) throws Excepti return nextLine; } - private Color getPajekColorFromName(String colorName) { - Integer colorHex = PAJEK_COLORS.get(colorName); - - Color color = null; - if (colorHex != null) { - color = new Color(colorHex); - } - - return color; - } - private String skip(BufferedReader br, String str) throws Exception { while (br.ready()) { String curLine = br.readLine(); diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterTGF.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterTGF.java index d5c670d503..c77d3605cc 100644 --- a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterTGF.java +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterTGF.java @@ -39,8 +39,10 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.plugin.file; +import java.io.IOException; import java.io.LineNumberReader; import java.io.Reader; import java.util.ArrayList; @@ -48,14 +50,17 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.io.importer.api.ContainerLoader; import org.gephi.io.importer.api.EdgeDraft; import org.gephi.io.importer.api.ImportUtils; +import org.gephi.io.importer.api.Issue; import org.gephi.io.importer.api.NodeDraft; import org.gephi.io.importer.api.Report; import org.gephi.io.importer.spi.FileImporter; import org.gephi.utils.longtask.spi.LongTask; import org.gephi.utils.progress.Progress; import org.gephi.utils.progress.ProgressTicket; +import org.openide.util.NbBundle; /** + * Trivial Graph Format importer. * * @author rlfnb */ @@ -68,6 +73,7 @@ public class ImporterTGF implements FileImporter, LongTask { private ProgressTicket progressTicket; private boolean cancel = false; + @Override public boolean execute(ContainerLoader container) { this.container = container; this.report = new Report(); @@ -76,6 +82,11 @@ public boolean execute(ContainerLoader container) { importData(lineReader); } catch (Exception e) { throw new RuntimeException(e); + } finally { + try { + lineReader.close(); + } catch (IOException ex) { + } } return !cancel; } @@ -83,20 +94,18 @@ public boolean execute(ContainerLoader container) { private void importData(LineNumberReader reader) throws Exception { Progress.start(progressTicket); //Progress - List nodes = new ArrayList(); - List edges = new ArrayList(); + List nodes = new ArrayList<>(); + List edges = new ArrayList<>(); boolean isNode = true; - for (; reader.ready();) { + for (; reader.ready(); ) { String line = reader.readLine().trim(); if ("#".equalsIgnoreCase(line)) { isNode = false; - } else { - if (line != null && !line.isEmpty()) { - if (isNode) { - nodes.add(line); - } else { - edges.add(line); - } + } else if (line != null && !line.isEmpty()) { + if (isNode) { + nodes.add(line); + } else { + edges.add(line); } } } @@ -104,10 +113,15 @@ private void importData(LineNumberReader reader) throws Exception { Progress.switchToDeterminate(progressTicket, nodes.size() + edges.size()); if (nodes.isEmpty()) { - throw new Exception("Cannot import a graph without nodes!"); + report.logIssue(new Issue(NbBundle.getMessage(ImporterTGF.class, "importerTGF_error_emptynodes"), + Issue.Level.CRITICAL)); } for (String n : nodes) { - addNode(n.substring(0, n.indexOf(" ")), n.substring(n.indexOf(" "))); + if (n.contains(" ")) { + addNode(n.substring(0, n.indexOf(" ")), n.substring(n.indexOf(" "))); + } else { + addNode(n, n); + } } Progress.progress(progressTicket); //Progress for (String e : edges) { @@ -116,7 +130,12 @@ private void importData(LineNumberReader reader) throws Exception { String[] tempFields = e.split(" "); String from = tempFields[0]; String to = tempFields[1]; - addEdge(from, to, e.substring(secondSpace)); + if (secondSpace == -1) { + addEdge(from, to, null); + } else { + addEdge(from, to, e.substring(secondSpace)); + } + } Progress.progress(progressTicket); //Progress } @@ -149,7 +168,9 @@ private void addEdge(String source, String target, String label) { EdgeDraft edge = container.factory().newEdgeDraft(); edge.setSource(sourceNode); edge.setTarget(targetNode); - edge.setLabel(label); + if (label != null) { + edge.setLabel(label); + } container.addEdge(edge); } } diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterTLP.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterTLP.java index c6b513d85f..2b5db4b69f 100644 --- a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterTLP.java +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterTLP.java @@ -39,9 +39,11 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.plugin.file; import java.io.BufferedReader; +import java.io.IOException; import java.io.LineNumberReader; import java.io.Reader; import org.gephi.io.importer.api.ContainerLoader; @@ -57,7 +59,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.NbBundle; /** - * * @author Sebastien Heymann */ public class ImporterTLP implements FileImporter, LongTask { @@ -78,6 +79,11 @@ public boolean execute(ContainerLoader container) { importData(lineReader); } catch (Exception e) { throw new RuntimeException(e); + } finally { + try { + lineReader.close(); + } catch (IOException ex) { + } } return !cancel; } @@ -136,7 +142,8 @@ private void parseNodes(String[] tokens) { private void parseEdge(String[] tokens, int cptLine) { if (tokens.length != 4) { - report.logIssue(new Issue(NbBundle.getMessage(ImporterGDF.class, "importerTPL_error_dataformat1", cptLine), Issue.Level.WARNING)); + report.logIssue(new Issue(NbBundle.getMessage(ImporterGDF.class, "importerTPL_error_dataformat1", cptLine), + Issue.Level.WARNING)); } String id = tokens[1]; EdgeDraft edge = container.factory().newEdgeDraft(id); diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterVNA.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterVNA.java index 78331c5c34..501bdbd75f 100644 --- a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterVNA.java +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/ImporterVNA.java @@ -39,8 +39,10 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.importer.plugin.file; +import java.io.IOException; import java.io.LineNumberReader; import java.io.Reader; import java.util.ArrayList; @@ -68,6 +70,7 @@ Development and Distribution License("CDDL") (collectively, the */ public class ImporterVNA implements FileImporter, LongTask { + Pattern pattern; //Architecture private Reader reader; private ContainerLoader container; @@ -75,26 +78,6 @@ public class ImporterVNA implements FileImporter, LongTask { private ProgressTicket progressTicket; private boolean cancel = false; private EdgeWidthFunction edgeWidthFunction; - Pattern pattern; - - /** - * States for the state machine. - */ - private enum State { - - DEFAULT, NODE_DATA, NODE_PROPERTIES, TIE_DATA, - NODE_DATA_DEF, NODE_PROPERTIES_DEF, TIE_DATA_DEF - }; - - /** - * Attributes defined by the VNA file: VNA files allow some or no properties - * to be defined for nodes and edges. - */ - private enum Attributes { - - OTHER, NODE_X, NODE_Y, NODE_COLOR, NODE_SIZE, - NODE_SHAPE, NODE_SHORT_LABEL, EDGE_STRENGTH - }; /** * Declared column labels for all sections. */ @@ -118,16 +101,21 @@ public boolean execute(ContainerLoader container) { importData(lineReader); } catch (Exception e) { report.logIssue(new Issue(e, Issue.Level.SEVERE)); + } finally { + try { + lineReader.close(); + } catch (IOException ex) { + } } return !cancel; } private void importData(LineNumberReader reader) throws Exception { - List lines = new ArrayList(); - while (reader.ready()) { - String line = reader.readLine(); - if (line != null && !line.isEmpty()) { - lines.add(line); + List lines = new ArrayList<>(); + String lineToRead; + while ((lineToRead = reader.readLine()) != null) { + if (!lineToRead.isEmpty()) { + lines.add(lineToRead); } } @@ -187,11 +175,12 @@ private void importData(LineNumberReader reader) throws Exception { state = State.NODE_PROPERTIES; break; case TIE_DATA_DEF: - String tieDataLabels[] = line.split("[\\s,]+"); + String[] tieDataLabels = line.split("[\\s,]+"); tieDataColumns = new ColumnDraft[tieDataLabels.length]; tieAttributes = new Attributes[tieDataColumns.length]; if (tieDataColumns.length < 2) { - throw new RuntimeException("Edge data labels definition does not contain two necessary variables ('from' and 'to')."); + throw new RuntimeException( + "Edge data labels definition does not contain two necessary variables ('from' and 'to')."); } // Initialize edge labels and fill edgeAttributes if some // attributes can be used for EdgeDraft @@ -209,7 +198,8 @@ private void importData(LineNumberReader reader) throws Exception { // new node split = split(line); if (split.length != nodeDataColumns.length) { - report.logIssue(new Issue("Number of labels and number of data mismatch in: '" + line + "'", Issue.Level.WARNING)); + report.logIssue(new Issue("Number of labels and number of data mismatch in: '" + line + "'", + Issue.Level.WARNING)); break; } addNode(split); @@ -218,7 +208,8 @@ private void importData(LineNumberReader reader) throws Exception { case NODE_PROPERTIES: split = split(line); if (split.length != nodePropertiesLabels.length) { - report.logIssue(new Issue("Number of labels and number of data mismatch in: '" + line + "'", Issue.Level.WARNING)); + report.logIssue(new Issue("Number of labels and number of data mismatch in: '" + line + "'", + Issue.Level.WARNING)); break; } addNodeProperties(split); @@ -227,7 +218,8 @@ private void importData(LineNumberReader reader) throws Exception { case TIE_DATA: split = split(line); if (split.length != tieDataColumns.length) { - report.logIssue(new Issue("Number of labels and number of data mismatch in: '" + line + "'", Issue.Level.WARNING)); + report.logIssue(new Issue("Number of labels and number of data mismatch in: '" + line + "'", + Issue.Level.WARNING)); break; } addEdge(split); @@ -246,7 +238,7 @@ private String[] split(String line) { if (pattern == null) { pattern = Pattern.compile("[^\\s\"]+|\"([^\"]*)\""); } - List tokens = new ArrayList(); + List tokens = new ArrayList<>(); Matcher patternMatcher = pattern.matcher(line); while (patternMatcher.find()) { if ((patternMatcher.group(1)) != null) { @@ -255,7 +247,7 @@ private String[] split(String line) { tokens.add(patternMatcher.group()); } } - return tokens.toArray(new String[]{}); + return tokens.toArray(new String[] {}); } private void addNode(String[] nodeData) { @@ -292,9 +284,7 @@ private void addNodeProperties(String[] nodeProperties) { node.setY(Float.parseFloat(nodeProperties[i])); break; case NODE_COLOR: - // Add just shades of red as NetDraw VNA is not specific - // about color. - node.setColor(Integer.parseInt(nodeProperties[i]), 0, 0); + node.setColor(nodeProperties[i]); break; case NODE_SIZE: node.setSize(Float.parseFloat(nodeProperties[i])); @@ -305,7 +295,8 @@ private void addNodeProperties(String[] nodeProperties) { } } } catch (NumberFormatException e) { - report.logIssue(new Issue("Error parsing numerical value at '" + nodeProperties[i] + "'.", Issue.Level.WARNING)); + report.logIssue( + new Issue("Error parsing numerical value at '" + nodeProperties[i] + "'.", Issue.Level.WARNING)); } } @@ -381,12 +372,27 @@ public void setProgressTicket(ProgressTicket progressTicket) { this.progressTicket = progressTicket; } - public static class EdgeWidthFunction { + /** + * States for the state machine. + */ + private enum State { - public enum Function { + DEFAULT, NODE_DATA, NODE_PROPERTIES, TIE_DATA, + NODE_DATA_DEF, NODE_PROPERTIES_DEF, TIE_DATA_DEF + } + + /** + * Attributes defined by the VNA file: VNA files allow some or no properties + * to be defined for nodes and edges. + */ + private enum Attributes { + + OTHER, NODE_X, NODE_Y, NODE_COLOR, NODE_SIZE, + NODE_SHAPE, NODE_SHORT_LABEL, EDGE_STRENGTH + } + + public static class EdgeWidthFunction { - LINEAR, SQUARE_ROOT, LOGARITHMIC - }; public final Function function; public final float coefficient; @@ -419,5 +425,10 @@ public String toString() { } return null; } + + public enum Function { + + LINEAR, SQUARE_ROOT, LOGARITHMIC + } } } diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/AbstractImporterSpreadsheet.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/AbstractImporterSpreadsheet.java new file mode 100644 index 0000000000..7fe185c3dc --- /dev/null +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/AbstractImporterSpreadsheet.java @@ -0,0 +1,475 @@ +/* +Copyright 2008-2016 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2016 Gephi Consortium. + */ + +package org.gephi.io.importer.plugin.file.spreadsheet; + +import java.io.File; +import java.io.IOException; +import java.io.Reader; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.time.ZoneId; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.TimeRepresentation; +import org.gephi.graph.api.types.IntervalDoubleMap; +import org.gephi.graph.api.types.IntervalIntegerMap; +import org.gephi.graph.api.types.IntervalLongMap; +import org.gephi.graph.api.types.IntervalSet; +import org.gephi.graph.api.types.IntervalStringMap; +import org.gephi.graph.api.types.TimeMap; +import org.gephi.graph.api.types.TimeSet; +import org.gephi.graph.api.types.TimestampDoubleMap; +import org.gephi.graph.api.types.TimestampIntegerMap; +import org.gephi.graph.api.types.TimestampLongMap; +import org.gephi.graph.api.types.TimestampMap; +import org.gephi.graph.api.types.TimestampSet; +import org.gephi.graph.api.types.TimestampStringMap; +import org.gephi.io.importer.api.ContainerLoader; +import org.gephi.io.importer.api.Report; +import org.gephi.io.importer.plugin.file.spreadsheet.process.AbstractImportProcess; +import org.gephi.io.importer.plugin.file.spreadsheet.process.ImportAdjacencyListProcess; +import org.gephi.io.importer.plugin.file.spreadsheet.process.ImportEdgesProcess; +import org.gephi.io.importer.plugin.file.spreadsheet.process.ImportMatrixProcess; +import org.gephi.io.importer.plugin.file.spreadsheet.process.ImportNodesProcess; +import org.gephi.io.importer.plugin.file.spreadsheet.process.SpreadsheetGeneralConfiguration; +import org.gephi.io.importer.plugin.file.spreadsheet.process.SpreadsheetGeneralConfiguration.Mode; +import org.gephi.io.importer.plugin.file.spreadsheet.sheet.SheetParser; +import org.gephi.io.importer.plugin.file.spreadsheet.sheet.SheetRow; +import org.gephi.io.importer.spi.FileImporter; +import org.gephi.utils.longtask.spi.LongTask; +import org.gephi.utils.progress.ProgressTicket; +import org.openide.util.Exceptions; + +/** + * @author Eduardo Ramos + */ +public abstract class AbstractImporterSpreadsheet implements FileImporter, FileImporter.FileAware, LongTask { + + private static final int MAX_ROWS_TO_ANALYZE_COLUMN_TYPES = 25; + //General configuration: + protected final SpreadsheetGeneralConfiguration generalConfig = new SpreadsheetGeneralConfiguration(); + protected ContainerLoader container; + protected Report report; + protected ProgressTicket progressTicket; + protected boolean cancel = false; + protected AbstractImportProcess importer = null; + protected File file; + + @Override + public boolean execute(ContainerLoader container) { + this.container = container; + this.report = new Report(); + + this.container.setTimeRepresentation(generalConfig.getTimeRepresentation()); + this.container.setTimeZone(generalConfig.getTimeZone()); + + try (SheetParser parser = createParser()) { + switch (getMode()) { + case NODES_TABLE: + importer = new ImportNodesProcess(generalConfig, parser, container, progressTicket); + break; + case EDGES_TABLE: + importer = new ImportEdgesProcess(generalConfig, parser, container, progressTicket); + break; + case ADJACENCY_LIST: + importer = new ImportAdjacencyListProcess(generalConfig, container, progressTicket, parser); + break; + case MATRIX: + importer = new ImportMatrixProcess(generalConfig, container, progressTicket, parser); + break; + default: + throw new IllegalArgumentException("Unknown mode " + getMode()); + } + + importer.execute(); + } catch (IOException ex) { + Exceptions.printStackTrace(ex); + } finally { + if (importer != null) { + report.append(importer.getReport()); + importer = null; + } + } + + return !cancel; + } + + public abstract SheetParser createParser() throws IOException; + + public abstract SheetParser createParserWithoutHeaders() throws IOException; + + public Map getHeadersMap() throws IOException { + try (SheetParser parser = createParser()) { + return parser.getHeaderMap(); + } + } + + public List getFirstRows(int maxRows) throws IOException { + try (SheetParser parser = createParser()) { + return getFirstRows(parser, maxRows); + } + } + + public List getFirstRows(SheetParser parser, int maxRows) throws IOException { + List rows = new ArrayList<>(); + + Iterator iterator = parser.iterator(); + for (int i = 0; i < maxRows && iterator.hasNext(); i++) { + rows.add(iterator.next()); + } + + return rows; + } + + protected void autoDetectImportMode() { + try { + SheetParser parser = createParserWithoutHeaders(); + + Mode mode = null; + + Iterator iterator = parser.iterator(); + if (iterator.hasNext()) { + SheetRow firstRow = iterator.next(); + + if (firstRow.get(0) == null || firstRow.get(0).trim().isEmpty()) { + mode = Mode.MATRIX; + } else { + //Detect very probable edges table: + for (int i = 0; i < firstRow.size(); i++) { + String value = firstRow.get(i); + if ("source".equalsIgnoreCase(value) || "target".equalsIgnoreCase(value)) { + mode = Mode.EDGES_TABLE; + break; + } + } + + //Detect probable nodes table: + if (mode == null) { + for (int i = 0; i < firstRow.size(); i++) { + String value = firstRow.get(i); + if ("id".equalsIgnoreCase(value) || "label".equalsIgnoreCase(value) || + "timeset".equalsIgnoreCase(value)) { + mode = Mode.NODES_TABLE; + } + } + } + } + } + + if (mode == null) { + //Default adjacency list: + mode = Mode.ADJACENCY_LIST; + } + + setMode(mode); + } catch (IOException ex) { + //NOOP + } + } + + protected void autoDetectColumnTypes() { + try (SheetParser parser = createParser()) { + List rows = getFirstRows(parser, MAX_ROWS_TO_ANALYZE_COLUMN_TYPES); + int rowCount = rows.size(); + + if (rowCount == 0) { + return; + } + + Map headerMap = parser.getHeaderMap(); + if (headerMap.isEmpty()) { + return; + } + + Map> classMatchByHeader = new HashMap<>(); + + List classesToTry = Arrays.asList(new Class[] { + //Classes to check, in order of preference + Boolean.class, + Integer.class, + Long.class, + BigInteger.class, + Double.class, + BigDecimal.class, + IntervalIntegerMap.class, + IntervalLongMap.class, + IntervalDoubleMap.class, + IntervalStringMap.class, + IntervalSet.class, + TimestampIntegerMap.class, + TimestampLongMap.class, + TimestampDoubleMap.class, + TimestampStringMap.class, + TimestampSet.class + }); + + //Initialize: + for (String column : headerMap.keySet()) { + classMatchByHeader.put(column, new LinkedHashSet()); + + classMatchByHeader.get(column).addAll(classesToTry); //First assume all values match + } + + //Try to parse all types: + for (SheetRow row : rows) { + for (Map.Entry entry : headerMap.entrySet()) { + String column = entry.getKey(); + int index = entry.getValue(); + String value = row.get(index); + if (value != null) { + value = value.trim(); + } + + LinkedHashSet columnMatches = classMatchByHeader.get(column); + + for (Class clazz : classesToTry) { + if (columnMatches.contains(clazz)) { + if (value != null && !value.isEmpty()) { + if (clazz.equals( + Boolean.class)) {//Special case for booleans to not accept 0/1, only true or false + if (!value.equalsIgnoreCase("true") && !value.equalsIgnoreCase("false")) { + columnMatches.remove(clazz); + } + } else { + try { + Object parsed; + if (clazz.equals(Integer.class)) { + parsed = Integer.parseInt(value); + } else if (clazz.equals(Long.class)) { + parsed = Long.parseLong(value); + } else if (clazz.equals(BigInteger.class)) { + parsed = new BigInteger(value); + } else if (clazz.equals(Double.class)) { + parsed = Double.parseDouble(value); + } else if (clazz.equals(BigDecimal.class)) { + parsed = new BigDecimal(value); + } else { + parsed = AttributeUtils.parse(value, clazz); + } + + if (parsed instanceof TimeMap && ((TimeMap) parsed).isEmpty()) { + parsed = null;//Actually invalid + } + if (parsed instanceof TimeSet && ((TimeSet) parsed).isEmpty()) { + parsed = null;//Actually invalid + } + + if (parsed == null) { + columnMatches.remove(clazz);//Non empty value produced null, invalid parsing + } + } catch (Exception parseError) { + //Invalid value + columnMatches.remove(clazz); + } + } + } + } + } + } + } + + //Obtain best match for each column: + TimeRepresentation foundTimeRepresentation = TimeRepresentation.INTERVAL; + for (String column : headerMap.keySet()) { + LinkedHashSet columnMatches = classMatchByHeader.get(column); + + Class detectedClass = String.class;//Default + + //Use the detected type matching if any: + if (!columnMatches.isEmpty() && columnMatches.size() != classesToTry.size()) { + detectedClass = columnMatches.iterator().next();//First match + } + + //Change some typical column types to expected types when possible: + if (column.equalsIgnoreCase("id") || column.equalsIgnoreCase("label")) { + detectedClass = String.class; + } + + if (detectedClass.equals( + String.class)) {//No other thing than String found, try to guess very probable dynamic types: + if (column.toLowerCase().contains("interval")) { + detectedClass = IntervalSet.class; + } + + if (column.toLowerCase().contains("timestamp")) { + detectedClass = TimestampSet.class; + } + + if (column.equalsIgnoreCase("timeset")) { + if (foundTimeRepresentation == TimeRepresentation.INTERVAL) { + detectedClass = IntervalSet.class; + } else { + detectedClass = TimestampSet.class; + } + } + } + + if (getMode() == Mode.EDGES_TABLE) { + if (column.equalsIgnoreCase("source") || column.equalsIgnoreCase("target") || + column.equalsIgnoreCase("type") || column.equalsIgnoreCase("kind")) { + detectedClass = String.class; + } + + //Favor double types for weight column: + if (column.equalsIgnoreCase("weight")) { + if (columnMatches.contains(Double.class)) { + detectedClass = Double.class; + } else if (columnMatches.contains(IntervalDoubleMap.class)) { + detectedClass = IntervalDoubleMap.class; + } else if (columnMatches.contains(TimestampDoubleMap.class)) { + detectedClass = TimestampDoubleMap.class; + } + } + } + + setColumnClass(column, detectedClass); + + if (TimestampSet.class.isAssignableFrom(detectedClass) || + TimestampMap.class.isAssignableFrom(detectedClass)) { + foundTimeRepresentation = TimeRepresentation.TIMESTAMP; + } + } + + setTimeRepresentation(foundTimeRepresentation); + } catch (IOException ex) { + //NOOP + } + } + + public void refreshAutoDetections() { + autoDetectImportMode(); + autoDetectColumnTypes(); + } + + @Override + public void setReader(Reader reader) { + //We can't use a reader since we might need to read the file many times (get the headers first, then read again...) + //See setFile(File file) + } + + public File getFile() { + return file; + } + + @Override + public void setFile(File file) { + File previousFile = this.file; + this.file = file; + + if (previousFile == null && file != null) { + //First time setting the file, auto detect settings. They can be changed later by the programmer/UI user. + //But not auto detect again if the importer controller sets the file a second time, or that would cancel the possible changes made by the programmer/UI user. + refreshAutoDetections(); + } + } + + @Override + public ContainerLoader getContainer() { + return container; + } + + @Override + public Report getReport() { + return report; + } + + @Override + public boolean cancel() { + if (importer != null) { + importer.cancel(); + importer = null; + } + return cancel = true; + } + + @Override + public void setProgressTicket(ProgressTicket progressTicket) { + this.progressTicket = progressTicket; + } + + public Mode getMode() { + return generalConfig.getMode(); + } + + public void setMode(Mode table) { + generalConfig.setTable(table); + } + + public TimeRepresentation getTimeRepresentation() { + return generalConfig.getTimeRepresentation(); + } + + public void setTimeRepresentation(TimeRepresentation timeRepresentation) { + generalConfig.setTimeRepresentation(timeRepresentation); + } + + public ZoneId getTimeZone() { + return generalConfig.getTimeZone(); + } + + public void setTimeZone(ZoneId timeZone) { + generalConfig.setTimeZone(timeZone); + } + + public Map getColumnsClasses() { + return generalConfig.getColumnsClasses(); + } + + public void setColumnsClasses(Map columnsClasses) { + generalConfig.setColumnsClasses(columnsClasses); + } + + public Class getColumnClass(String column) { + return generalConfig.getColumnClass(column); + } + + public void setColumnClass(String column, Class clazz) { + generalConfig.setColumnClass(column, clazz); + } +} diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/ImporterSpreadsheetCSV.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/ImporterSpreadsheetCSV.java new file mode 100644 index 0000000000..e0d3594807 --- /dev/null +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/ImporterSpreadsheetCSV.java @@ -0,0 +1,189 @@ +/* +Copyright 2008-2016 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2016 Gephi Consortium. + */ + +package org.gephi.io.importer.plugin.file.spreadsheet; + +import java.io.FileInputStream; +import java.io.IOException; +import java.io.LineNumberReader; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.util.Arrays; +import java.util.Collections; +import org.apache.commons.csv.CSVParser; +import org.gephi.io.importer.api.ImportUtils; +import org.gephi.io.importer.plugin.file.spreadsheet.process.SpreadsheetGeneralConfiguration; +import org.gephi.io.importer.plugin.file.spreadsheet.sheet.EmptySheet; +import org.gephi.io.importer.plugin.file.spreadsheet.sheet.ErrorSheet; +import org.gephi.io.importer.plugin.file.spreadsheet.sheet.SheetParser; +import org.gephi.io.importer.plugin.file.spreadsheet.sheets.csv.CSVSheetParser; +import org.gephi.utils.CharsetToolkit; +import org.openide.filesystems.FileObject; +import org.openide.filesystems.FileUtil; + +/** + * @author Eduardo Ramos + */ +public class ImporterSpreadsheetCSV extends AbstractImporterSpreadsheet { + + protected char fieldDelimiter = ','; + protected Charset charset = StandardCharsets.UTF_8; + + @Override + public SheetParser createParserWithoutHeaders() throws IOException { + return createParser(false); + } + + @Override + public SheetParser createParser() throws IOException { + boolean withFirstRecordAsHeader + = generalConfig.getMode() == SpreadsheetGeneralConfiguration.Mode.NODES_TABLE + || generalConfig.getMode() == SpreadsheetGeneralConfiguration.Mode.EDGES_TABLE; + + return createParser(withFirstRecordAsHeader); + } + + private SheetParser createParser(boolean withFirstRecordAsHeader) throws IOException { + try { + CSVParser csvParser = + SpreadsheetUtils.configureCSVParser(file, fieldDelimiter, charset, withFirstRecordAsHeader); + return new CSVSheetParser(csvParser); + } catch (Exception ex) { + if (report != null) { + SpreadsheetUtils.logError(report, ex.getMessage(), null); + return EmptySheet.INSTANCE; + } else { + return new ErrorSheet(ex.getMessage()); + } + } + } + + @Override + public void refreshAutoDetections() { + autoDetectCharset(); + autoDetectFieldDelimiter(); + super.refreshAutoDetections(); + } + + private void autoDetectCharset() { + //Try to auto-detect the charset: + try { + FileInputStream is = new FileInputStream(file); + CharsetToolkit charsetToolkit = new CharsetToolkit(is); + charsetToolkit.setDefaultCharset(StandardCharsets.UTF_8); + charset = charsetToolkit.getCharset(); + } catch (Exception ex) { + } + } + + private void autoDetectFieldDelimiter() { + FileObject fileObject = FileUtil.toFileObject(file); + //Return if file is empty + if (fileObject.getSize() == 0) { + return; + } + + //Very simple naive detector but should work in most cases: + try (LineNumberReader reader = ImportUtils.getTextReader(fileObject)) { + String line = reader.readLine().trim() + .replaceAll(" , ", ",").replaceAll(" ; ", ";"); + + //Check for typical delimiter chars in the header + int commaCount = 0; + int semicolonCount = 0; + int tabCount = 0; + int spaceCount = 0; + + boolean inQuote = false; + for (char c : line.toCharArray()) { + if (c == '"' || c == '\'') { + inQuote = !inQuote; + } + + if (!inQuote) { + switch (c) { + case ',': + commaCount++; + break; + case ';': + semicolonCount++; + break; + case '\t': + tabCount++; + break; + case ' ': + spaceCount++; + break; + } + } + } + + int max = Collections.max(Arrays.asList(commaCount, semicolonCount, tabCount, spaceCount)); + if (commaCount == max) { + fieldDelimiter = ','; + } else if (semicolonCount == max) { + fieldDelimiter = ';'; + } else if (tabCount == max) { + fieldDelimiter = '\t'; + } else if (spaceCount == max) { + fieldDelimiter = ' '; + } + } catch (IOException ex) { + } + } + + public char getFieldDelimiter() { + return fieldDelimiter; + } + + public void setFieldDelimiter(char fieldDelimiter) { + this.fieldDelimiter = fieldDelimiter; + } + + public Charset getCharset() { + return charset; + } + + public void setCharset(Charset charset) { + this.charset = charset; + } +} diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/ImporterSpreadsheetCSVBuilder.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/ImporterSpreadsheetCSVBuilder.java new file mode 100644 index 0000000000..7a76452f3b --- /dev/null +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/ImporterSpreadsheetCSVBuilder.java @@ -0,0 +1,88 @@ +/* +Copyright 2008-2016 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2016 Gephi Consortium. + */ + +package org.gephi.io.importer.plugin.file.spreadsheet; + +import org.gephi.io.importer.api.FileType; +import org.gephi.io.importer.spi.FileImporter; +import org.gephi.io.importer.spi.FileImporterBuilder; +import org.openide.filesystems.FileObject; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +/** + * @author Eduardo Ramos + */ +@ServiceProvider(service = FileImporterBuilder.class) +public final class ImporterSpreadsheetCSVBuilder implements FileImporterBuilder { + + public static final String IDENTIFER = "spreadsheet_csv"; + public static final String[] EXTENSIONS = new String[] {".csv", ".tsv", ".edges"}; + + @Override + public FileImporter buildImporter() { + return new ImporterSpreadsheetCSV(); + } + + @Override + public String getName() { + return IDENTIFER; + } + + @Override + public FileType[] getFileTypes() { + return new FileType[] { + new FileType(EXTENSIONS, NbBundle.getMessage(getClass(), "fileType_Spreadsheet_Name")) + }; + } + + @Override + public boolean isMatchingImporter(FileObject fileObject) { + for (String ext : EXTENSIONS) { + if (fileObject.getExt().equalsIgnoreCase(ext.substring(1))) { + return true; + } + } + + return false; + } +} diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/ImporterSpreadsheetExcel.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/ImporterSpreadsheetExcel.java new file mode 100644 index 0000000000..fff9748b30 --- /dev/null +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/ImporterSpreadsheetExcel.java @@ -0,0 +1,119 @@ +/* +Copyright 2008-2016 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2016 Gephi Consortium. + */ + +package org.gephi.io.importer.plugin.file.spreadsheet; + +import java.io.IOException; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.ss.usermodel.WorkbookFactory; +import org.gephi.io.importer.plugin.file.spreadsheet.process.SpreadsheetGeneralConfiguration; +import org.gephi.io.importer.plugin.file.spreadsheet.sheet.EmptySheet; +import org.gephi.io.importer.plugin.file.spreadsheet.sheet.ErrorSheet; +import org.gephi.io.importer.plugin.file.spreadsheet.sheet.SheetParser; +import org.gephi.io.importer.plugin.file.spreadsheet.sheets.excel.ExcelSheetParser; + +/** + * @author Eduardo Ramos + */ +public class ImporterSpreadsheetExcel extends AbstractImporterSpreadsheet { + + private int sheetIndex = 0; + + @Override + public SheetParser createParserWithoutHeaders() throws IOException { + return createParser(false); + } + + @Override + public SheetParser createParser() throws IOException { + boolean withFirstRecordAsHeader = generalConfig.getMode() == SpreadsheetGeneralConfiguration.Mode.NODES_TABLE || + generalConfig.getMode() == SpreadsheetGeneralConfiguration.Mode.EDGES_TABLE; + return createParser(withFirstRecordAsHeader); + } + + private SheetParser createParser(boolean withFirstRecordAsHeader) throws IOException { + try { + boolean readOnly = true; + Workbook workbook = WorkbookFactory.create(file, null, readOnly); + Sheet sheet = workbook.getSheetAt(sheetIndex); + + return new ExcelSheetParser(sheet, withFirstRecordAsHeader); + } catch (Exception ex) { + //Control and report old excel files are unsupported: + //Control and report excel file blocked by another process (normally excel itself): + + if (report != null) { + SpreadsheetUtils.logError(report, ex.getMessage(), null); + return EmptySheet.INSTANCE; + } else { + return new ErrorSheet(ex.getMessage()); + } + } + } + + public String[] getAvailableSheetNames() { + try (Workbook workbook = WorkbookFactory.create(file)) { + int length = workbook.getNumberOfSheets(); + + String[] names = new String[length]; + for (int i = 0; i < length; i++) { + names[i] = workbook.getSheetName(i); + } + + return names; + } catch (Exception ex) { + Logger.getLogger("").log(Level.SEVERE, ex.getMessage()); + return new String[] {"Error"}; + } + } + + public int getSheetIndex() { + return sheetIndex; + } + + public void setSheetIndex(int sheetIndex) { + this.sheetIndex = sheetIndex; + } +} diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/ImporterSpreadsheetExcelBuilder.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/ImporterSpreadsheetExcelBuilder.java new file mode 100644 index 0000000000..99bb9d4d93 --- /dev/null +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/ImporterSpreadsheetExcelBuilder.java @@ -0,0 +1,88 @@ +/* +Copyright 2008-2016 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2016 Gephi Consortium. + */ + +package org.gephi.io.importer.plugin.file.spreadsheet; + +import org.gephi.io.importer.api.FileType; +import org.gephi.io.importer.spi.FileImporter; +import org.gephi.io.importer.spi.FileImporterBuilder; +import org.openide.filesystems.FileObject; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +/** + * @author Eduardo Ramos + */ +@ServiceProvider(service = FileImporterBuilder.class) +public final class ImporterSpreadsheetExcelBuilder implements FileImporterBuilder { + + public static final String IDENTIFER = "spreadsheet_excel"; + public static final String[] EXTENSIONS = new String[] {".xls", ".xlsx"}; + + @Override + public FileImporter buildImporter() { + return new ImporterSpreadsheetExcel(); + } + + @Override + public String getName() { + return IDENTIFER; + } + + @Override + public FileType[] getFileTypes() { + return new FileType[] { + new FileType(EXTENSIONS, NbBundle.getMessage(getClass(), "fileType_Spreadsheet_Name")) + }; + } + + @Override + public boolean isMatchingImporter(FileObject fileObject) { + for (String ext : EXTENSIONS) { + if (fileObject.getExt().equalsIgnoreCase(ext.substring(1))) { + return true; + } + } + + return false; + } +} diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/SpreadsheetUtils.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/SpreadsheetUtils.java new file mode 100644 index 0000000000..9efecccc0c --- /dev/null +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/SpreadsheetUtils.java @@ -0,0 +1,154 @@ +/* +Copyright 2008-2016 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2016 Gephi Consortium. + */ + +package org.gephi.io.importer.plugin.file.spreadsheet; + +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.charset.Charset; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.apache.commons.csv.CSVFormat; +import org.apache.commons.csv.CSVParser; +import org.gephi.io.importer.api.Issue; +import org.gephi.io.importer.api.Report; +import org.gephi.io.importer.plugin.file.spreadsheet.sheet.SheetParser; +import org.gephi.utils.CharsetToolkit; +import org.openide.util.NbBundle; + +/** + * @author Eduardo Ramos + */ +public class SpreadsheetUtils { + + public static void logInfo(Report report, String message, SheetParser parser) { + logIssue(report, new Issue(message, Issue.Level.INFO), parser); + } + + public static void logWarning(Report report, String message, SheetParser parser) { + logIssue(report, new Issue(message, Issue.Level.WARNING), parser); + } + + public static void logError(Report report, String message, SheetParser parser) { + logIssue(report, new Issue(message, Issue.Level.SEVERE), parser); + } + + public static void logCritical(Report report, String message, SheetParser parser) { + logIssue(report, new Issue(message, Issue.Level.CRITICAL), parser); + } + + public static void logIssue(Report report, Issue issue, SheetParser parser) { + if (parser != null) { + String newMessage = "[" + NbBundle + .getMessage(SpreadsheetUtils.class, "SpreadsheetUtils.recordNumber", parser.getCurrentRecordNumber()) + + "] " + issue.getMessage(); + issue = new Issue(newMessage, issue.getLevel()); + } + + if (report != null) { + report.logIssue(issue); + } else { + Level level; + switch (issue.getLevel()) { + case INFO: + level = Level.INFO; + break; + case WARNING: + level = Level.WARNING; + break; + case SEVERE: + case CRITICAL: + level = Level.SEVERE; + break; + default: + level = Level.FINE; + } + Logger.getLogger("").log(level, issue.getMessage()); + } + } + + public static CSVParser configureCSVParser(File file, Character fieldSeparator, Charset charset, + boolean withFirstRecordAsHeader) throws IOException { + if (fieldSeparator == null) { + fieldSeparator = ','; + } + + CSVFormat csvFormat = CSVFormat.DEFAULT + .withDelimiter(fieldSeparator) + .withEscape('\\') + .withIgnoreEmptyLines(true) + .withNullString("") + .withIgnoreSurroundingSpaces(true) + .withTrim(true); + + if (withFirstRecordAsHeader) { + csvFormat = csvFormat + .withFirstRecordAsHeader() + .withAllowMissingColumnNames(false) + .withIgnoreHeaderCase(false); + } else { + csvFormat = csvFormat.withHeader((String[]) null).withSkipHeaderRecord(false); + } + + boolean hasBOM = false; + try (FileInputStream is = new FileInputStream(file)) { + CharsetToolkit charsetToolkit = new CharsetToolkit(is); + hasBOM = charsetToolkit.hasUTF8Bom() || charsetToolkit.hasUTF16BEBom() || charsetToolkit.hasUTF16LEBom(); + } catch (IOException e) { + //NOOP + } + + FileInputStream fileInputStream = new FileInputStream(file); + InputStreamReader is = new InputStreamReader(fileInputStream, charset); + if (hasBOM) { + try { + is.read(); + } catch (IOException e) { + // should never happen, as a file with no content + // but with a BOM has at least one char + } + } + return new CSVParser(is, csvFormat); + } +} diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/process/AbstractImportProcess.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/process/AbstractImportProcess.java new file mode 100644 index 0000000000..0d70f0ad06 --- /dev/null +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/process/AbstractImportProcess.java @@ -0,0 +1,217 @@ +/* +Copyright 2008-2016 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2016 Gephi Consortium. + */ + +package org.gephi.io.importer.plugin.file.spreadsheet.process; + +import java.io.Closeable; +import java.io.IOException; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.io.importer.api.ContainerLoader; +import org.gephi.io.importer.api.EdgeDraft; +import org.gephi.io.importer.api.NodeDraft; +import org.gephi.io.importer.api.Report; +import org.gephi.io.importer.plugin.file.spreadsheet.SpreadsheetUtils; +import org.gephi.io.importer.plugin.file.spreadsheet.sheet.SheetParser; +import org.gephi.io.importer.plugin.file.spreadsheet.sheet.SheetRow; +import org.gephi.utils.progress.ProgressTicket; +import org.openide.util.NbBundle; + +/** + * @author Eduardo Ramos + */ +public abstract class AbstractImportProcess implements Closeable { + + protected final SpreadsheetGeneralConfiguration generalConfig; + protected final ContainerLoader container; + protected final Report report; + protected final ProgressTicket progressTicket; + protected final SheetParser parser; + protected final Map specialColumnsIndexMap = new HashMap<>(); + protected final Map headersIndexMap = new HashMap<>(); + protected final Map headersClassMap = new HashMap<>(); + protected boolean cancel = false; + + public AbstractImportProcess(SpreadsheetGeneralConfiguration generalConfig, ContainerLoader container, + ProgressTicket progressTicket, SheetParser parser) { + this.generalConfig = generalConfig; + this.container = container; + this.progressTicket = progressTicket; + this.parser = parser; + + this.report = new Report(); + + container.setFillLabelWithId(false); + } + + public abstract boolean execute(); + + protected void setupColumnsIndexesAndFindSpecialColumns(List specialColumnNames, + Map columnsClasses) { + Map headerMap = parser.getHeaderMap(); + Set lowerCaseHeaders = new HashSet<>(); + for (Map.Entry entry : headerMap.entrySet()) { + String headerName = entry.getKey().trim(); + int currentIndex = entry.getValue(); + boolean isSpecialColumn = false; + + //Only add columns that have a class defined by the user. This also allows to filter the input columns + if (!columnsClasses.containsKey(headerName)) { + continue; + } + + //First check for repeated columns: + if (lowerCaseHeaders.contains(headerName.toLowerCase())) { + logError(getMessage("AbstractImportProcess.error.repeatedColumn", headerName)); + continue; + } else { + lowerCaseHeaders.add(headerName.toLowerCase()); + } + + //Then check for special columns: + for (String specialColumnName : specialColumnNames) { + if (headerName.equalsIgnoreCase(specialColumnName)) { + specialColumnsIndexMap.put(specialColumnName, currentIndex); + + isSpecialColumn = true; + break; + } + } + + if (isSpecialColumn) { + continue; + } + + Class type = columnsClasses.get(headerName); + headersClassMap.put(headerName, type); + headersIndexMap.put(headerName, currentIndex); + addColumn(headerName, type); + } + } + + protected Object parseValue(String value, Class type, String column) { + try { + return AttributeUtils.parse(value, type); + } catch (Exception e) { + logError(getMessage("AbstractImportProcess.error.parseError", value, type.getSimpleName(), column)); + return null; + } + } + + protected boolean checkRow(SheetRow row) { + boolean consistent = row.isConsistent(); + if (!consistent) { + logError(getMessage("AbstractImportProcess.error.inconsistentRow")); + } + + return consistent; + } + + protected void addEdge(String source, String target) { + addEdge(source, target, 1); + } + + protected void addEdge(String source, String target, float weight) { + NodeDraft sourceNode; + if (!container.nodeExists(source)) { + sourceNode = container.factory().newNodeDraft(source); + container.addNode(sourceNode); + } else { + sourceNode = container.getNode(source); + } + + NodeDraft targetNode; + if (!container.nodeExists(target)) { + targetNode = container.factory().newNodeDraft(target); + container.addNode(targetNode); + } else { + targetNode = container.getNode(target); + } + + EdgeDraft edge = container.factory().newEdgeDraft(); + edge.setSource(sourceNode); + edge.setTarget(targetNode); + edge.setWeight(weight); + container.addEdge(edge); + } + + public boolean cancel() { + return cancel = true; + } + + protected void logInfo(String message) { + SpreadsheetUtils.logInfo(report, message, parser); + } + + protected void logWarning(String message) { + SpreadsheetUtils.logWarning(report, message, parser); + } + + protected void logError(String message) { + SpreadsheetUtils.logError(report, message, parser); + } + + @Override + public void close() throws IOException { + if (parser != null) { + parser.close(); + } + } + + public Report getReport() { + return report; + } + + protected String getMessage(String key) { + return NbBundle.getMessage(getClass(), key); + } + + protected String getMessage(String key, Object... params) { + return NbBundle.getMessage(getClass(), key, params); + } + + protected abstract void addColumn(String name, Class type); +} diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/process/ImportAdjacencyListProcess.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/process/ImportAdjacencyListProcess.java new file mode 100644 index 0000000000..89b00293c3 --- /dev/null +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/process/ImportAdjacencyListProcess.java @@ -0,0 +1,101 @@ +/* +Copyright 2008-2017 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2017 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2017 Gephi Consortium. + */ + +package org.gephi.io.importer.plugin.file.spreadsheet.process; + +import org.gephi.io.importer.api.ContainerLoader; +import org.gephi.io.importer.plugin.file.spreadsheet.sheet.SheetParser; +import org.gephi.io.importer.plugin.file.spreadsheet.sheet.SheetRow; +import org.gephi.utils.progress.Progress; +import org.gephi.utils.progress.ProgressTicket; + +/** + * @author Eduardo Ramos + */ +public class ImportAdjacencyListProcess extends AbstractImportProcess { + + public ImportAdjacencyListProcess(SpreadsheetGeneralConfiguration generalConfig, ContainerLoader container, + ProgressTicket progressTicket, SheetParser parser) { + super(generalConfig, container, progressTicket, parser); + } + + @Override + public boolean execute() { + container.setFillLabelWithId(true); + + Progress.start(progressTicket); + + for (SheetRow row : parser) { + if (cancel) { + break; + } + + int size = row.size(); + + if (size > 0) { + String source = row.get(0); + if (source != null) { + for (int i = 1; i < size; i++) { + String target = row.get(i); + + if (target != null) { + addEdge(source.trim(), target.trim()); + } else { + logError(getMessage("ImportAdjacencyListProcess.error.missingTarget", i)); + } + } + } else { + logError(getMessage("ImportAdjacencyListProcess.error.missingSource")); + } + } + } + + Progress.finish(progressTicket); + + return !cancel; + } + + @Override + protected void addColumn(String name, Class type) { + //NOOP + } +} diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/process/ImportEdgesProcess.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/process/ImportEdgesProcess.java new file mode 100644 index 0000000000..38a0bc5ede --- /dev/null +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/process/ImportEdgesProcess.java @@ -0,0 +1,201 @@ +/* +Copyright 2008-2016 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2016 Gephi Consortium. + */ + +package org.gephi.io.importer.plugin.file.spreadsheet.process; + +import java.io.IOException; +import java.util.Arrays; +import java.util.Map; +import org.gephi.io.importer.api.ContainerLoader; +import org.gephi.io.importer.api.EdgeDirection; +import org.gephi.io.importer.api.EdgeDirectionDefault; +import org.gephi.io.importer.api.EdgeDraft; +import org.gephi.io.importer.plugin.file.spreadsheet.sheet.SheetParser; +import org.gephi.io.importer.plugin.file.spreadsheet.sheet.SheetRow; +import org.gephi.utils.progress.Progress; +import org.gephi.utils.progress.ProgressTicket; + +/** + * @author Eduardo Ramos + */ +public class ImportEdgesProcess extends AbstractImportProcess { + + public static final String EDGE_SOURCE = "source"; + public static final String EDGE_TARGET = "target"; + public static final String EDGE_TYPE = "type"; + public static final String EDGE_KIND = "kind"; + + public static final String EDGE_ID = "id"; + public static final String EDGE_LABEL = "label"; + + public ImportEdgesProcess(SpreadsheetGeneralConfiguration generalConfig, SheetParser parser, + ContainerLoader container, ProgressTicket progressTicket) throws IOException { + super(generalConfig, container, progressTicket, parser); + init(); + } + + private void init() { + //Make sure default container configuration is correct for importing edges: + container.setAllowAutoNode(true); + container.setAllowParallelEdge(true); + container.setAllowSelfLoop(true); + container.setEdgeDefault(EdgeDirectionDefault.MIXED); + } + + @Override + public boolean execute() { + setupColumnsIndexesAndFindSpecialColumns( + Arrays.asList(EDGE_SOURCE, EDGE_TARGET, EDGE_TYPE, EDGE_KIND, EDGE_ID, EDGE_LABEL), + generalConfig.getColumnsClasses()); + + Integer sourceColumnIndex = specialColumnsIndexMap.get(EDGE_SOURCE); + Integer targetColumnIndex = specialColumnsIndexMap.get(EDGE_TARGET); + Integer typeColumnIndex = specialColumnsIndexMap.get(EDGE_TYPE);//Direction + Integer kindColumnIndex = specialColumnsIndexMap.get(EDGE_KIND);//Kind for parallel edges + + Integer idColumnIndex = specialColumnsIndexMap.get(EDGE_ID); + Integer labelColumnIndex = specialColumnsIndexMap.get(EDGE_LABEL); + + Progress.start(progressTicket); + for (SheetRow row : parser) { + if (cancel) { + break; + } + + if (!checkRow(row)) { + continue; + } + + String source = null; + String target = null; + String id = null; + String label = null; + EdgeDirection direction = EdgeDirection.DIRECTED; + String kind = null; + + if (sourceColumnIndex != null) { + source = row.get(sourceColumnIndex); + } + if (targetColumnIndex != null) { + target = row.get(targetColumnIndex); + } + if (typeColumnIndex != null) { + String type = row.get(typeColumnIndex); + if ("undirected".equalsIgnoreCase(type)) { + direction = EdgeDirection.UNDIRECTED; + } + } + if (kindColumnIndex != null) { + kind = row.get(kindColumnIndex); + } + + if (idColumnIndex != null) { + id = row.get(idColumnIndex); + } + if (labelColumnIndex != null) { + label = row.get(labelColumnIndex); + } + + EdgeDraft edge = id != null ? container.factory().newEdgeDraft(id) : container.factory().newEdgeDraft(); + + if (label != null) { + edge.setLabel(label); + } + + if (source == null || target == null) { + logError(getMessage("ImportEdgesProcess.error.noSourceOrTargetData")); + continue; + } + + if (!container.nodeExists(source)) { + container.addNode(container.factory().newNodeDraft(source)); + } + + if (!container.nodeExists(target)) { + container.addNode(container.factory().newNodeDraft(target)); + } + + edge.setSource(container.getNode(source)); + edge.setTarget(container.getNode(target)); + edge.setDirection(direction); + + if (kind != null) { + edge.setType(kind); + } + + for (Map.Entry columnEntry : headersIndexMap.entrySet()) { + String column = columnEntry.getKey(); + Integer index = columnEntry.getValue(); + Class type = headersClassMap.get(column); + + if (type == null) { + continue; + } + + Object value = row.get(index); + if (value != null) { + value = parseValue((String) value, type, column); + + if (value != null) { + //Note: we allow any type on weight column, to support dynamic weights + if (column.equalsIgnoreCase("weight") && value instanceof Number) { + edge.setWeight(((Number) value).doubleValue()); + } else { + edge.setValue(column, value); + } + } + } + } + + container.addEdge(edge); + } + + Progress.finish(progressTicket); + + return !cancel; + } + + @Override + protected void addColumn(String name, Class type) { + container.addEdgeColumn(name, type); + } +} diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/process/ImportMatrixProcess.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/process/ImportMatrixProcess.java new file mode 100644 index 0000000000..b339bdf292 --- /dev/null +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/process/ImportMatrixProcess.java @@ -0,0 +1,143 @@ +/* +Copyright 2008-2017 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2017 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2017 Gephi Consortium. + */ + +package org.gephi.io.importer.plugin.file.spreadsheet.process; + +import java.util.ArrayList; +import java.util.List; +import org.gephi.io.importer.api.ContainerLoader; +import org.gephi.io.importer.plugin.file.spreadsheet.sheet.SheetParser; +import org.gephi.io.importer.plugin.file.spreadsheet.sheet.SheetRow; +import org.gephi.utils.progress.Progress; +import org.gephi.utils.progress.ProgressTicket; + +/** + * @author Eduardo Ramos + */ +public class ImportMatrixProcess extends AbstractImportProcess { + + public ImportMatrixProcess(SpreadsheetGeneralConfiguration generalConfig, ContainerLoader container, + ProgressTicket progressTicket, SheetParser parser) { + super(generalConfig, container, progressTicket, parser); + } + + @Override + public boolean execute() { + container.setFillLabelWithId(true); + Progress.start(progressTicket); + + List targetLabels = new ArrayList<>(); + List sourceLabels = new ArrayList<>(); + + boolean firstRow = true; + int rowCount = 0; + + for (SheetRow row : parser) { + if (firstRow) { + //Start at 1, ignoring first value: + for (int i = 1; i < row.size(); i++) { + String label = row.get(i); + targetLabels.add(label); + + if (label == null) { + logError(getMessage("ImportMatrixProcess.error.missingTarget", i)); + } + } + + firstRow = false; + } else { + if (row.size() > 0) { + String source = row.get(0); + sourceLabels.add(source); + + if (source != null) { + for (int i = 1; i < row.size(); i++) { + int labelIndex = i - 1; + if (labelIndex < targetLabels.size()) { + String value = row.get(i); + String target = targetLabels.get(labelIndex); + + if (target != null) { + try { + if (value != null && !value.trim().equals("0")) { + float weight = Float.parseFloat(value.replace(',', '.')); + + if (weight != 0) { + addEdge(source.trim(), target.trim(), weight); + } + } + } catch (NumberFormatException ex) { + logError(getMessage("ImportMatrixProcess.error.parseWeightError", value)); + } + } + } else { + logError(getMessage("ImportMatrixProcess.error.invalidRowLength", row.size() - 1, + targetLabels.size())); + break; + } + } + } else { + logError(getMessage("ImportMatrixProcess.error.missingSource")); + } + } + + rowCount++; + } + } + + if (rowCount != targetLabels.size()) { + logWarning( + getMessage("ImportMatrixProcess.warning.inconsistentNumberOfLines", rowCount, targetLabels.size())); + } else if (!sourceLabels.equals(targetLabels)) { + logWarning(getMessage("ImportMatrixProcess.warning.inconsistentLabels")); + } + + Progress.finish(progressTicket); + return !cancel; + } + + @Override + protected void addColumn(String name, Class type) { + //NOOP + } + +} diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/process/ImportNodesProcess.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/process/ImportNodesProcess.java new file mode 100644 index 0000000000..a47fba3cb5 --- /dev/null +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/process/ImportNodesProcess.java @@ -0,0 +1,132 @@ +/* +Copyright 2008-2016 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2016 Gephi Consortium. + */ + +package org.gephi.io.importer.plugin.file.spreadsheet.process; + +import java.io.IOException; +import java.util.Arrays; +import java.util.Map; +import org.gephi.io.importer.api.ContainerLoader; +import org.gephi.io.importer.api.NodeDraft; +import org.gephi.io.importer.plugin.file.spreadsheet.sheet.SheetParser; +import org.gephi.io.importer.plugin.file.spreadsheet.sheet.SheetRow; +import org.gephi.utils.progress.Progress; +import org.gephi.utils.progress.ProgressTicket; + +/** + * @author Eduardo Ramos + */ +public class ImportNodesProcess extends AbstractImportProcess { + + public static final String NODE_ID = "id"; + public static final String NODE_LABEL = "label"; + + + public ImportNodesProcess(SpreadsheetGeneralConfiguration generalConfig, SheetParser parser, + ContainerLoader container, ProgressTicket progressTicket) throws IOException { + super(generalConfig, container, progressTicket, parser); + } + + @Override + public boolean execute() { + setupColumnsIndexesAndFindSpecialColumns(Arrays.asList(NODE_ID, NODE_LABEL), generalConfig.getColumnsClasses()); + + Integer idColumnIndex = specialColumnsIndexMap.get(NODE_ID); + Integer labelColumnIndex = specialColumnsIndexMap.get(NODE_LABEL); + + Progress.start(progressTicket); + for (SheetRow row : parser) { + if (cancel) { + break; + } + + if (!checkRow(row)) { + continue; + } + + String id = null; + String label = null; + if (idColumnIndex != null) { + id = row.get(idColumnIndex); + } + if (labelColumnIndex != null) { + label = row.get(labelColumnIndex); + } + + NodeDraft node = id != null ? container.factory().newNodeDraft(id) : container.factory().newNodeDraft(); + + if (label != null) { + node.setLabel(label); + } + + for (Map.Entry columnEntry : headersIndexMap.entrySet()) { + String column = columnEntry.getKey(); + Integer index = columnEntry.getValue(); + Class type = headersClassMap.get(column); + + if (type == null) { + continue; + } + + Object value = row.get(index); + if (value != null) { + value = parseValue((String) value, type, column); + + if (value != null) { + node.setValue(column, value); + } + } + } + + container.addNode(node); + } + + Progress.finish(progressTicket); + + return !cancel; + } + + @Override + protected void addColumn(String name, Class type) { + container.addNodeColumn(name, type); + } +} diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/process/SpreadsheetGeneralConfiguration.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/process/SpreadsheetGeneralConfiguration.java new file mode 100644 index 0000000000..032ec32c16 --- /dev/null +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/process/SpreadsheetGeneralConfiguration.java @@ -0,0 +1,144 @@ +/* +Copyright 2008-2016 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2016 Gephi Consortium. + */ + +package org.gephi.io.importer.plugin.file.spreadsheet.process; + +import java.time.ZoneId; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.gephi.graph.api.TimeRepresentation; + +/** + * @author Eduardo Ramos + */ +public class SpreadsheetGeneralConfiguration { + + protected final Map columnsClasses = new LinkedHashMap<>(); + protected Mode mode = Mode.NODES_TABLE; + protected TimeRepresentation timeRepresentation = TimeRepresentation.INTERVAL; + protected ZoneId timeZone = ZoneId.systemDefault(); + + public Mode getMode() { + return mode; + } + + public void setTable(Mode table) { + this.mode = table; + } + + public TimeRepresentation getTimeRepresentation() { + return timeRepresentation; + } + + public void setTimeRepresentation(TimeRepresentation timeRepresentation) { + this.timeRepresentation = timeRepresentation; + } + + public ZoneId getTimeZone() { + return timeZone; + } + + public void setTimeZone(ZoneId timeZone) { + this.timeZone = timeZone; + } + + public Map getColumnsClasses() { + return new LinkedHashMap<>(columnsClasses); + } + + public void setColumnsClasses(Map columnsClasses) { + this.columnsClasses.clear(); + if (columnsClasses != null) { + for (String column : columnsClasses.keySet()) { + setColumnClass(column, columnsClasses.get(column)); + } + } + } + + public Class getColumnClass(String column) { + return columnsClasses.get(column); + } + + public void setColumnClass(String column, Class clazz) { + columnsClasses.put(column.trim(), clazz); + } + + public enum Mode { + NODES_TABLE(Arrays.asList( + ImportNodesProcess.NODE_ID, + ImportNodesProcess.NODE_LABEL + )), + EDGES_TABLE(Arrays.asList( + ImportEdgesProcess.EDGE_ID, + ImportEdgesProcess.EDGE_KIND, + ImportEdgesProcess.EDGE_LABEL, + ImportEdgesProcess.EDGE_SOURCE, + ImportEdgesProcess.EDGE_TARGET, + ImportEdgesProcess.EDGE_TYPE + )), + ADJACENCY_LIST, + MATRIX; + + private final Set specialColumnNames; + + Mode() { + this.specialColumnNames = Collections.emptySet(); + } + + Mode(List specialColumnNames) { + this.specialColumnNames = Collections.unmodifiableSet(new HashSet<>(specialColumnNames)); + } + + public Set getSpecialColumnNames() { + return specialColumnNames; + } + + public boolean isSpecialColumn(String column) { + return specialColumnNames.contains(column.trim().toLowerCase()); + } + } +} diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/sheet/EmptySheet.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/sheet/EmptySheet.java new file mode 100644 index 0000000000..c995028225 --- /dev/null +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/sheet/EmptySheet.java @@ -0,0 +1,76 @@ +/* +Copyright 2008-2016 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2016 Gephi Consortium. + */ + +package org.gephi.io.importer.plugin.file.spreadsheet.sheet; + +import java.io.IOException; +import java.util.Collections; +import java.util.Iterator; +import java.util.Map; + +/** + * @author Eduardo Ramos + */ +public final class EmptySheet implements SheetParser { + + public static final EmptySheet INSTANCE = new EmptySheet(); + + @Override + public Map getHeaderMap() { + return Collections.emptyMap(); + } + + @Override + public long getCurrentRecordNumber() { + return 0; + } + + @Override + public void close() throws IOException { + //NOOP + } + + @Override + public Iterator iterator() { + return Collections.emptyIterator(); + } +} diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/sheet/ErrorSheet.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/sheet/ErrorSheet.java new file mode 100644 index 0000000000..1464001771 --- /dev/null +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/sheet/ErrorSheet.java @@ -0,0 +1,102 @@ +/* +Copyright 2008-2016 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2016 Gephi Consortium. + */ + +package org.gephi.io.importer.plugin.file.spreadsheet.sheet; + +import java.io.IOException; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +/** + * @author Eduardo Ramos + */ +public final class ErrorSheet implements SheetParser { + + private static final Map ERROR_HEADER = new HashMap(); + + static { + ERROR_HEADER.put("error", 0); + } + + private final SheetRow errorRow; + + public ErrorSheet(final String error) { + this.errorRow = new SheetRow() { + @Override + public boolean isConsistent() { + return true; + } + + @Override + public int size() { + return 1; + } + + @Override + public String get(int index) { + return error; + } + }; + } + + @Override + public Map getHeaderMap() { + return ERROR_HEADER; + } + + @Override + public long getCurrentRecordNumber() { + return 1; + } + + @Override + public void close() throws IOException { + //NOOP + } + + @Override + public Iterator iterator() { + return Arrays.asList(errorRow).iterator(); + } +} diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/sheet/SheetParser.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/sheet/SheetParser.java new file mode 100644 index 0000000000..ab91a8849b --- /dev/null +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/sheet/SheetParser.java @@ -0,0 +1,69 @@ +/* +Copyright 2008-2016 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2016 Gephi Consortium. + */ + +package org.gephi.io.importer.plugin.file.spreadsheet.sheet; + +import java.io.Closeable; +import java.util.Map; + +/** + * Simple sheet abstraction to support CSV, Excel... + * + * @author Eduardo Ramos + */ +public interface SheetParser extends Closeable, Iterable { + + /** + * Returns a map containing header names as keys and their column index as value. + * The index can be used in {@link SheetRow#get(int)} + * + * @return Header map. Empty for sheets without a header row. + */ + Map getHeaderMap(); + + /** + * Returns the current row number when iterating the sheet. + * + * @return + */ + long getCurrentRecordNumber(); +} diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/sheet/SheetRow.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/sheet/SheetRow.java new file mode 100644 index 0000000000..3b6e6820e0 --- /dev/null +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/sheet/SheetRow.java @@ -0,0 +1,73 @@ +/* +Copyright 2008-2016 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2016 Gephi Consortium. + */ + +package org.gephi.io.importer.plugin.file.spreadsheet.sheet; + +/** + * Simple sheet row abstraction to support CSV, Excel... + * + * @author Eduardo Ramos + */ +public interface SheetRow { + + /** + * CSV rows can be inconsistent, this method says if the row is consistent. + * + * @return + */ + boolean isConsistent(); + + /** + * Cell count in the row + * + * @return + */ + int size(); + + /** + * Returns cell value at given index (starting at 0 up to size - 1) + * + * @param index + * @return + */ + String get(int index); +} diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/sheets/csv/CSVSheetParser.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/sheets/csv/CSVSheetParser.java new file mode 100644 index 0000000000..ffaf4757b9 --- /dev/null +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/sheets/csv/CSVSheetParser.java @@ -0,0 +1,160 @@ +/* +Copyright 2008-2016 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2016 Gephi Consortium. + */ + +package org.gephi.io.importer.plugin.file.spreadsheet.sheets.csv; + +import java.io.IOException; +import java.util.Collections; +import java.util.Iterator; +import java.util.Map; +import java.util.logging.Logger; +import org.apache.commons.csv.CSVParser; +import org.apache.commons.csv.CSVRecord; +import org.gephi.io.importer.plugin.file.spreadsheet.sheet.SheetParser; +import org.gephi.io.importer.plugin.file.spreadsheet.sheet.SheetRow; + +/** + * @author Eduardo Ramos + */ +public class CSVSheetParser implements SheetParser { + + private final CSVParser parser; + + public CSVSheetParser(CSVParser parser) { + this.parser = parser; + } + + @Override + public Map getHeaderMap() { + Map map = parser.getHeaderMap(); + if (map == null) { + return Collections.emptyMap(); + } else { + //Ignore columns without header + map.remove(null); + return map; + } + } + + @Override + public long getCurrentRecordNumber() { + return parser.getRecordNumber(); + } + + @Override + public Iterator iterator() { + return new CSVIterator(); + } + + @Override + public void close() throws IOException { + parser.close(); + } + + private class CSVIterator implements Iterator { + + private final Iterator iterator; + private ErrorRow errorFound = null; + + public CSVIterator() { + iterator = parser.iterator(); + } + + @Override + public boolean hasNext() { + if (errorFound != null) { + return false; + } + + try { + return iterator.hasNext(); + } catch (Exception e) { + //In case of malformed CSV or bad delimiter + errorFound = new ErrorRow(e.getMessage()); + Logger.getLogger("").severe(e.getMessage()); + return true; + } + } + + @Override + public SheetRow next() { + if (errorFound != null) { + return errorFound; + } else { + return new CSVSheetRow(iterator.next()); + } + } + + @Override + public void remove() { + throw new UnsupportedOperationException(); + } + } + + private class ErrorRow implements SheetRow { + + private final String errorMessage; + + public ErrorRow(String errorMessage) { + this.errorMessage = errorMessage; + } + + @Override + public boolean isConsistent() { + return false; + } + + @Override + public int size() { + return 1; + } + + @Override + public String get(int index) { + if (index == 0) { + return errorMessage; + } else { + return null; + } + } + } +} diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/sheets/csv/CSVSheetRow.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/sheets/csv/CSVSheetRow.java new file mode 100644 index 0000000000..bf5c4d7e0a --- /dev/null +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/sheets/csv/CSVSheetRow.java @@ -0,0 +1,76 @@ +/* +Copyright 2008-2016 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2016 Gephi Consortium. + */ + +package org.gephi.io.importer.plugin.file.spreadsheet.sheets.csv; + +import org.apache.commons.csv.CSVRecord; +import org.gephi.io.importer.plugin.file.spreadsheet.sheet.SheetRow; + +/** + * @author Eduardo Ramos + */ +public class CSVSheetRow implements SheetRow { + + private final CSVRecord record; + + public CSVSheetRow(CSVRecord record) { + this.record = record; + } + + @Override + public boolean isConsistent() { + return record.isConsistent(); + } + + @Override + public int size() { + return record.size(); + } + + @Override + public String get(int index) { + if (index < 0 || index > record.size() - 1) { + return null; + } + return record.get(index); + } +} diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/sheets/excel/ExcelSheetParser.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/sheets/excel/ExcelSheetParser.java new file mode 100644 index 0000000000..6d108958d2 --- /dev/null +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/sheets/excel/ExcelSheetParser.java @@ -0,0 +1,177 @@ +/* +Copyright 2008-2016 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2016 Gephi Consortium. + */ + +package org.gephi.io.importer.plugin.file.spreadsheet.sheets.excel; + +import java.io.IOException; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.logging.Logger; +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.gephi.io.importer.plugin.file.spreadsheet.sheet.SheetParser; +import org.gephi.io.importer.plugin.file.spreadsheet.sheet.SheetRow; + +/** + * @author Eduardo Ramos + */ +public class ExcelSheetParser implements SheetParser { + + private final Sheet sheet; + private final boolean withFirstRecordAsHeader; + private final Map headerMap = new LinkedHashMap<>(); + private ExcelIterator iterator; + + private int rowsFirstIndex = Integer.MAX_VALUE; + private int rowsLastIndex = Integer.MIN_VALUE; + + public ExcelSheetParser(Sheet sheet, boolean withFirstRecordAsHeader) { + this.sheet = sheet; + this.withFirstRecordAsHeader = withFirstRecordAsHeader; + + calculateRowStartAndEndIndexes(); + if (withFirstRecordAsHeader) { + initHeaderInfo(); + } + } + + private void calculateRowStartAndEndIndexes() { + int rowsToScan; + + if (withFirstRecordAsHeader) { + rowsToScan = 1; + } else { + rowsToScan = 25; + } + + for (int i = sheet.getFirstRowNum(), j = 0; i < sheet.getLastRowNum() && j < rowsToScan; i++, j++) { + Row row = sheet.getRow(i); + if (row != null) { + rowsFirstIndex = Math.min(rowsFirstIndex, row.getFirstCellNum()); + rowsLastIndex = Math.max(rowsLastIndex, row.getLastCellNum() - 1); + } + } + + if (rowsFirstIndex == Integer.MAX_VALUE) { + rowsFirstIndex = 0; + rowsLastIndex = 0; + } + } + + private void initHeaderInfo() { + Row firstRow = sheet.getRow(sheet.getFirstRowNum()); + int zeroBasedIndex = 0; + for (int i = rowsFirstIndex; i <= rowsLastIndex; i++) { + Cell cell = firstRow.getCell(i); + String header = ExcelSheetRow.getRowCellAsString(cell, i); + if (header != null && !header.trim().isEmpty()) { + headerMap.put(header.trim(), zeroBasedIndex); + } + zeroBasedIndex++; + } + } + + @Override + public Map getHeaderMap() { + return new LinkedHashMap<>(headerMap); + } + + @Override + public long getCurrentRecordNumber() { + return iterator != null ? iterator.getRowNum() : 0; + } + + @Override + public Iterator iterator() { + return iterator = new ExcelIterator(); + } + + @Override + public void close() throws IOException { + iterator = null; + sheet.getWorkbook().close(); + } + + private class ExcelIterator implements Iterator { + + private final Iterator iterator; + private Row currentRow = null; + + public ExcelIterator() { + iterator = sheet.iterator(); + if (withFirstRecordAsHeader && iterator.hasNext()) { + iterator.next();//Skip headers row + } + } + + @Override + public boolean hasNext() { + try { + return iterator.hasNext(); + } catch (Exception e) { + Logger.getLogger("").severe(e.getMessage()); + return false;//In case of malformed excel + } + } + + @Override + public SheetRow next() { + currentRow = iterator.next(); + return new ExcelSheetRow(currentRow, rowsFirstIndex, rowsLastIndex); + } + + @Override + public void remove() { + throw new UnsupportedOperationException(); + } + + private long getRowNum() { + if (currentRow != null) { + return currentRow.getRowNum(); + } else { + return 0; + } + } + } +} diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/sheets/excel/ExcelSheetRow.java b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/sheets/excel/ExcelSheetRow.java new file mode 100644 index 0000000000..8ef8fac515 --- /dev/null +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/importer/plugin/file/spreadsheet/sheets/excel/ExcelSheetRow.java @@ -0,0 +1,102 @@ +/* +Copyright 2008-2016 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2016 Gephi Consortium. + */ + +package org.gephi.io.importer.plugin.file.spreadsheet.sheets.excel; + +import org.apache.poi.ss.usermodel.Cell; +import org.apache.poi.ss.usermodel.DataFormatter; +import org.apache.poi.ss.usermodel.Row; +import org.gephi.io.importer.plugin.file.spreadsheet.sheet.SheetRow; + +/** + * @author Eduardo Ramos + */ +public class ExcelSheetRow implements SheetRow { + + private static final DataFormatter FORMATTER = new DataFormatter(); + + private final Row row; + private final int firstIndex; + private final int lastIndex; + + public ExcelSheetRow(Row row, int firstIndex, int lastIndex) { + this.row = row; + this.firstIndex = firstIndex; + this.lastIndex = lastIndex; + } + + public static String getRowCellAsString(Cell cell, int index) { + if (cell == null) { + return null; + } + + return FORMATTER.formatCellValue(cell); + } + + @Override + public boolean isConsistent() { + return true; + } + + @Override + public String get(int index) { + index += firstIndex; + + Cell cell = row.getCell(index, Row.MissingCellPolicy.RETURN_BLANK_AS_NULL); + + String value = getRowCellAsString(cell, index); + if (value != null) { + value = value.trim(); + + if (value.isEmpty()) { + value = null; + } + } + + return value; + } + + @Override + public int size() { + return lastIndex - firstIndex + 1; + } +} diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/processor/plugin/AbstractProcessor.java b/modules/ImportPlugin/src/main/java/org/gephi/io/processor/plugin/AbstractProcessor.java new file mode 100644 index 0000000000..6c31a60933 --- /dev/null +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/processor/plugin/AbstractProcessor.java @@ -0,0 +1,599 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.io.processor.plugin; + +import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; +import java.awt.Color; +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Configuration; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Interval; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.Origin; +import org.gephi.graph.api.Table; +import org.gephi.graph.api.TimeRepresentation; +import org.gephi.graph.api.types.IntervalDoubleMap; +import org.gephi.graph.api.types.IntervalMap; +import org.gephi.graph.api.types.IntervalSet; +import org.gephi.graph.api.types.TimeMap; +import org.gephi.graph.api.types.TimeSet; +import org.gephi.graph.api.types.TimestampDoubleMap; +import org.gephi.graph.api.types.TimestampSet; +import org.gephi.io.importer.api.ColumnDraft; +import org.gephi.io.importer.api.ContainerUnloader; +import org.gephi.io.importer.api.EdgeDraft; +import org.gephi.io.importer.api.EdgeMergeStrategy; +import org.gephi.io.importer.api.ElementDraft; +import org.gephi.io.importer.api.Issue; +import org.gephi.io.importer.api.NodeDraft; +import org.gephi.io.importer.api.Report; +import org.gephi.io.processor.spi.Processor; +import org.gephi.io.processor.spi.ProcessorConfigurationException; +import org.gephi.project.api.Workspace; +import org.gephi.utils.Attributes; +import org.gephi.utils.longtask.spi.LongTask; +import org.gephi.utils.progress.ProgressTicket; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +public abstract class AbstractProcessor implements Processor, LongTask { + + private final Set columnsTypeMismatchAlreadyWarned = new HashSet<>(); + private final Object2IntOpenHashMap edgeCountForAverage = new Object2IntOpenHashMap<>(); + protected ProgressTicket progressTicket; + protected Workspace workspace; + protected ContainerUnloader[] containers; + protected GraphModel graphModel; + protected Report report = new Report(); + + protected void clean() { + workspace = null; + graphModel = null; + containers = null; + progressTicket = null; + columnsTypeMismatchAlreadyWarned.clear(); + edgeCountForAverage.clear(); + } + + protected int calculateWorkUnits() { + return Arrays.stream(containers).map(AbstractProcessor::calculateWorkUnits).reduce(0, Integer::sum); + } + + protected static int calculateWorkUnits(ContainerUnloader container) { + return container.getNodeCount() + container.getEdgeCount(); + } + + protected void flushColumns(ContainerUnloader container) { + addColumnsToTable(container, graphModel.getNodeTable(), container.getNodeColumns()); + addColumnsToTable(container, graphModel.getEdgeTable(), container.getEdgeColumns()); + } + + private void addColumnsToTable(ContainerUnloader container, Table table, Iterable columns) { + TimeRepresentation timeRepresentation = container.getTimeRepresentation(); + for (ColumnDraft col : columns) { + if (!table.hasColumn(col.getId())) { + Class typeClass = col.getResolvedTypeClass(container); + + if (Attributes.isTypeAvailable(typeClass, timeRepresentation)) { + Object defaultValue = col.getResolvedDefaultValue(container); + if (defaultValue != null && !typeClass.isAssignableFrom(defaultValue.getClass())) { + String error = NbBundle.getMessage( + AbstractProcessor.class, "AbstractProcessor.error.columnDefaultValueTypeMismatch", + col.getId(), + defaultValue.toString(), + defaultValue.getClass().getSimpleName(), + typeClass.getSimpleName() + ); + + report.logIssue(new Issue(error, Issue.Level.SEVERE)); + defaultValue = null; + } + + table + .addColumn(col.getId(), col.getTitle(), typeClass, Origin.DATA, defaultValue, true); + } else { + String error = NbBundle.getMessage( + AbstractProcessor.class, "AbstractProcessor.error.unavailableColumnType", + typeClass.getSimpleName(), + timeRepresentation.name(), + col.getId() + ); + report.logIssue(new Issue(error, Issue.Level.SEVERE)); + } + } + } + } + + protected void flushLabel(ElementDraft elementDraft, Element element) { + if (elementDraft.getLabel() != null) { + // Do not override existing label with autofilled label + if (!(element.getLabel() != null && elementDraft.getLabel().equals(elementDraft.getId()))) { + element.setLabel(elementDraft.getLabel()); + } + } + } + + protected void flushToNode(ContainerUnloader container, NodeDraft nodeDraft, Node node) { + if (nodeDraft.getColor() != null) { + node.setColor(nodeDraft.getColor()); + } + + flushLabel(nodeDraft, node); + + if (node.getTextProperties() != null) { + node.getTextProperties().setVisible(nodeDraft.isLabelVisible()); + } + + if (nodeDraft.getLabelColor() != null && node.getTextProperties() != null) { + Color labelColor = nodeDraft.getLabelColor(); + node.getTextProperties().setColor(labelColor); + } else { + node.getTextProperties().setColor(new Color(0, 0, 0, 255)); + } + + if (nodeDraft.getLabelSize() != -1f && node.getTextProperties() != null) { + node.getTextProperties().setSize(nodeDraft.getLabelSize()); + } + + if ((nodeDraft.getX() != 0 || nodeDraft.getY() != 0 || nodeDraft.getZ() != 0) + && (node.x() == 0 && node.y() == 0 && node.z() == 0)) { + node.setX(nodeDraft.getX()); + node.setY(nodeDraft.getY()); + node.setZ(nodeDraft.getZ()); + } + + if (nodeDraft.getSize() != 0 && !Float.isNaN(nodeDraft.getSize())) { + node.setSize(nodeDraft.getSize()); + } else if (node.size() == 0) { + node.setSize(10f); + } + + //Fixed + if(nodeDraft.isFixed()) { + node.setFixed(true); + } + + //Timeset + if (nodeDraft.getTimeSet() != null) { + flushTimeSet(nodeDraft.getTimeSet(), node); + } + + //Graph timeset + if (nodeDraft.getGraphTimestamp() != null) { + node.addTimestamp(nodeDraft.getGraphTimestamp()); + } else if (nodeDraft.getGraphInterval() != null) { + node.addInterval(nodeDraft.getGraphInterval()); + } + + //Attributes + flushToElementAttributes(container, nodeDraft, node); + } + + protected void flushToElementAttributes(ContainerUnloader container, ElementDraft elementDraft, Element element) { + for (ColumnDraft columnDraft : elementDraft.getColumns()) { + if (elementDraft instanceof EdgeDraft && columnDraft.getId().equalsIgnoreCase("weight")) { + continue;//Special weight column + } + + Object val = elementDraft.getValue(columnDraft.getId()); + + Column column = element.getTable().getColumn(columnDraft.getId()); + if (column == null) { + continue;//The column might be not present, for cases when it cannot be added due to time representation mismatch, etc + } + + if (column.isReadOnly()) { + continue; + } + + Class columnDraftTypeClass = columnDraft.getResolvedTypeClass(container); + + if (!column.getTypeClass().equals(columnDraftTypeClass)) { + if (!columnsTypeMismatchAlreadyWarned.contains(column)) { + columnsTypeMismatchAlreadyWarned.add(column); + + String error = NbBundle.getMessage( + AbstractProcessor.class, "AbstractProcessor.error.columnTypeMismatch", + column.getId(), + column.getTypeClass().getSimpleName(), + columnDraftTypeClass.getSimpleName() + ); + + report.logIssue(new Issue(error, Issue.Level.SEVERE)); + } + + continue;//Incompatible types! + } + + if (val != null) { + Object processedNewValue = val; + + Object existingValue = element.getAttribute(columnDraft.getId()); + + if (columnDraft.isDynamic() && existingValue != null) { + if (TimeMap.class.isAssignableFrom(columnDraftTypeClass)) { + TimeMap existingMap = (TimeMap) existingValue; + if (!existingMap.isEmpty()) { + TimeMap valMap = (TimeMap) val; + TimeMap newMap = existingMap; + + Object[] keys = valMap.toKeysArray(); + Object[] vals = valMap.toValuesArray(); + for (int i = 0; i < keys.length; i++) { + try { + newMap.put(keys[i], vals[i]); + } catch (IllegalArgumentException e) { + //Overlapping intervals, ignore + } + } + + processedNewValue = newMap; + } + } else if (TimeSet.class.isAssignableFrom(columnDraftTypeClass)) { + TimeSet existingTimeSet = (TimeSet) existingValue; + + processedNewValue = mergeTimeSets(existingTimeSet, (TimeSet) val); + } + } + + element.setAttribute(columnDraft.getId(), processedNewValue); + } + } + } + + protected void flushToEdge(ContainerUnloader container, EdgeDraft edgeDraft, Edge edge, boolean newEdge) { + //Edge weight + flushEdgeWeight(container, edgeDraft, edge, newEdge); + + //Replace data when a new edge is created or the merge strategy is not to keep the first edge data: + EdgeMergeStrategy edgesMergeStrategy = containers[0].getEdgesMergeStrategy(); + if (newEdge || edgesMergeStrategy != EdgeMergeStrategy.FIRST) { + if (edgeDraft.getColor() != null) { + edge.setColor(edgeDraft.getColor()); + } else { + edge.setR(0f); + edge.setG(0f); + edge.setB(0f); + edge.setAlpha(1f); + } + + flushLabel(edgeDraft, edge); + + if (edge.getTextProperties() != null) { + edge.getTextProperties().setVisible(edgeDraft.isLabelVisible()); + } + + if (edgeDraft.getLabelSize() != -1f && edge.getTextProperties() != null) { + edge.getTextProperties().setSize(edgeDraft.getLabelSize()); + } + + if (edgeDraft.getLabelColor() != null && edge.getTextProperties() != null) { + Color labelColor = edgeDraft.getLabelColor(); + edge.getTextProperties().setColor(labelColor); + } else { + edge.getTextProperties().setColor(new Color(0, 0, 0, 255)); + } + + //Attributes + flushToElementAttributes(container, edgeDraft, edge); + } + + //Timeset + if (edgeDraft.getTimeSet() != null) { + flushTimeSet(edgeDraft.getTimeSet(), edge); + } + + //Graph timeset + if (edgeDraft.getGraphTimestamp() != null) { + edge.addTimestamp(edgeDraft.getGraphTimestamp()); + } else if (edgeDraft.getGraphInterval() != null) { + edge.addInterval(edgeDraft.getGraphInterval()); + } + } + + protected void flushEdgeWeight(ContainerUnloader container, EdgeDraft edgeDraft, Edge edge, boolean newEdge) { + Column weightColumn = graphModel.getEdgeTable().getColumn("weight"); + ColumnDraft weightColumnDraft = container.getEdgeColumn("weight"); + + boolean weightColumnDraftIsDynamic = weightColumnDraft != null && weightColumnDraft.isDynamic(); + + if (weightColumn.isDynamic() != weightColumnDraftIsDynamic) { + Class weightColumnDraftTypeClass = + weightColumnDraft != null ? weightColumnDraft.getResolvedTypeClass(container) : Double.class; + if (!columnsTypeMismatchAlreadyWarned.contains(weightColumn)) { + columnsTypeMismatchAlreadyWarned.add(weightColumn); + + String error = NbBundle.getMessage( + AbstractProcessor.class, "AbstractProcessor.error.columnTypeMismatch", + weightColumn.getId(), + weightColumn.getTypeClass().getSimpleName(), + weightColumnDraftTypeClass.getSimpleName() + ); + + report.logIssue(new Issue(error, Issue.Level.SEVERE)); + } + + return; + } + + if (weightColumn.isDynamic()) { + Object val = edgeDraft.getValue("weight"); + if (val instanceof TimeMap) { + TimeMap valMap = (TimeMap) val; + if (Number.class.isAssignableFrom(valMap.getTypeClass())) { + final TimeMap newMap; + if (val instanceof IntervalMap) { + newMap = new IntervalDoubleMap(); + } else { + newMap = new TimestampDoubleMap(); + } + + TimeMap existingMap = (TimeMap) edge.getAttribute("weight"); + if (existingMap != null) { + Object[] keys2 = existingMap.toKeysArray(); + Object[] vals2 = existingMap.toValuesArray(); + + for (int i = 0; i < keys2.length; i++) { + newMap.put(keys2[i], ((Number) vals2[i]).doubleValue()); + } + } + + Object[] keys1 = valMap.toKeysArray(); + Object[] vals1 = valMap.toValuesArray(); + + for (int i = 0; i < keys1.length; i++) { + try { + newMap.put(keys1[i], ((Number) vals1[i]).doubleValue()); + } catch (IllegalArgumentException e) { + //Overlapping intervals, ignore + } + } + + edge.setAttribute("weight", newMap); + } + } + } else if (!newEdge) { + //Merge the existing edge and the draft edge weights: + double result = edge.getWeight(); + + edgeCountForAverage.addTo(edge, 1); + int edgeCount = edgeCountForAverage.getInt(edge); + + switch (containers[0].getEdgesMergeStrategy()) { + case AVG: + result = (edge.getWeight() * edgeCount + edgeDraft.getWeight()) / (edgeCount + 1); + break; + case MAX: + result = Math.max(edgeDraft.getWeight(), edge.getWeight()); + break; + case MIN: + result = Math.min(edgeDraft.getWeight(), edge.getWeight()); + break; + case SUM: + result = edgeDraft.getWeight() + edge.getWeight(); + break; + case FIRST: + result = edge.getWeight(); + break; + case LAST: + result = edgeDraft.getWeight(); + break; + default: + break; + } + + edge.setWeight(result); + } + } + + protected void flushTimeSet(TimeSet timeSet, Element element) { + TimeSet existingTimeSet = (TimeSet) element.getAttribute("timeset"); + element.setAttribute("timeset", mergeTimeSets(existingTimeSet, timeSet)); + } + + protected TimeSet mergeTimeSets(TimeSet set1, TimeSet set2) { + if (set1 instanceof IntervalSet) { + return mergeIntervalSets((IntervalSet) set1, (IntervalSet) set2); + } else if (set1 instanceof TimestampSet) { + return mergeTimestampSets((TimestampSet) set1, (TimestampSet) set2); + } else { + return set2;//Set 1 must be null + } + } + + protected IntervalSet mergeIntervalSets(IntervalSet set1, IntervalSet set2) { + IntervalSet merged = new IntervalSet(); + for (Interval i : set1.toArray()) { + merged.add(i); + } + + boolean overlappingIntervals = false; + for (Interval i : set2.toArray()) { + try { + merged.add(i); + } catch (IllegalArgumentException e) { + //Catch overlapping intervals not allowed + overlappingIntervals = true; + } + } + + if (overlappingIntervals) { + String warning = NbBundle.getMessage( + AbstractProcessor.class, "AbstractProcessor.warning.overlappingIntervals", + set1.toString(graphModel.getTimeFormat(), graphModel.getTimeZone()), + set2.toString(graphModel.getTimeFormat(), graphModel.getTimeZone()), + merged.toString(graphModel.getTimeFormat(), graphModel.getTimeZone()) + ); + report.logIssue(new Issue(warning, Issue.Level.WARNING)); + } + + return merged; + } + + protected TimestampSet mergeTimestampSets(TimestampSet set1, TimestampSet set2) { + TimestampSet merged = new TimestampSet(); + for (Double t : set1.toArray()) { + merged.add(t); + } + for (Double t : set2.toArray()) { + merged.add(t); + } + + return merged; + } + + protected Configuration createConfiguration(ContainerUnloader container) { + //Configuration + GraphController graphController = Lookup.getDefault().lookup(GraphController.class); + Configuration.Builder configBuilder = graphController.getDefaultConfigurationBuilder(); + + configBuilder.timeRepresentation(container.getTimeRepresentation()); + if (container.getEdgeTypeLabelClass() != null) { + configBuilder.edgeLabelType(container.getEdgeTypeLabelClass()); + } + configBuilder.nodeIdType(container.getElementIdType().getTypeClass()); + configBuilder.edgeIdType(container.getElementIdType().getTypeClass()); + + ColumnDraft weightColumn = container.getEdgeColumn("weight"); + if (weightColumn != null && weightColumn.isDynamic()) { + if (container.getTimeRepresentation().equals(TimeRepresentation.INTERVAL)) { + configBuilder.edgeWeightType(IntervalDoubleMap.class); + } else { + configBuilder.edgeWeightType(TimestampDoubleMap.class); + } + } + + return configBuilder.build(); + } + + protected void validateConfigurationMatchesExisting(ContainerUnloader container, Configuration newConfig, + Workspace workspace) { + GraphController graphController = Lookup.getDefault().lookup(GraphController.class); + Configuration existingConfig = graphController.getGraphModel(workspace).getConfiguration(); + + if (container.isDynamicGraph() || container.hasDynamicAttributes()) { + if (newConfig.getTimeRepresentation() != existingConfig.getTimeRepresentation()) { + String message = NbBundle.getMessage( + AbstractProcessor.class, "AbstractProcessor.error.timeRepresentationMismatch", + newConfig.getTimeRepresentation().name(), + existingConfig.getTimeRepresentation().name() + ); + report.logIssue(new Issue(message, Issue.Level.SEVERE)); + } + } + + if (!newConfig.getEdgeWeightType().equals(existingConfig.getEdgeWeightType())) { + String message = NbBundle.getMessage( + AbstractProcessor.class, "AbstractProcessor.error.edgeWeightTypeMismatch", + newConfig.getEdgeWeightType().getSimpleName(), + existingConfig.getEdgeWeightType().getSimpleName() + ); + report.logIssue(new Issue(message, Issue.Level.SEVERE)); + } + + if (container.getEdgeTypeLabelClass() != null && + !newConfig.getEdgeLabelType().equals(container.getEdgeTypeLabelClass())) { + String message = NbBundle.getMessage( + AbstractProcessor.class, "AbstractProcessor.error.edgeLabelTypeMismatch", + newConfig.getEdgeLabelType().getSimpleName(), + container.getEdgeTypeLabelClass().getSimpleName() + ); + report.logIssue(new Issue(message, Issue.Level.SEVERE)); + } + + if (!newConfig.getNodeIdType().equals(existingConfig.getNodeIdType())) { + String message = NbBundle.getMessage( + AbstractProcessor.class, "AbstractProcessor.error.nodeIdTypeMismatch", + newConfig.getNodeIdType().getSimpleName(), + existingConfig.getNodeIdType().getSimpleName() + ); + report.logIssue(new Issue(message, Issue.Level.SEVERE)); + } + + if (!newConfig.getEdgeIdType().equals(existingConfig.getEdgeIdType())) { + String message = NbBundle.getMessage( + AbstractProcessor.class, "AbstractProcessor.error.edgeIdTypeMismatch", + newConfig.getEdgeIdType().getSimpleName(), + existingConfig.getEdgeIdType().getSimpleName() + ); + report.logIssue(new Issue(message, Issue.Level.SEVERE)); + } + + if (report.hasIssues()) { + throw new ProcessorConfigurationException( + "Processor configuration does not match existing workspace configuration. See report for details."); + } + } + + @Override + public void setWorkspace(Workspace workspace) { + this.workspace = workspace; + } + + @Override + public void setContainers(ContainerUnloader[] containers) { + this.containers = containers; + this.report = new Report(); + } + + @Override + public void setProgressTicket(ProgressTicket progressTicket) { + this.progressTicket = progressTicket; + } + + @Override + public Report getReport() { + return report; + } + + @Override + public boolean cancel() { + return false; + } +} diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/processor/plugin/AppendProcessor.java b/modules/ImportPlugin/src/main/java/org/gephi/io/processor/plugin/AppendProcessor.java new file mode 100644 index 0000000000..23b9630021 --- /dev/null +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/processor/plugin/AppendProcessor.java @@ -0,0 +1,131 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.io.processor.plugin; + +import org.gephi.graph.api.Configuration; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphController; +import org.gephi.io.importer.api.ContainerUnloader; +import org.gephi.io.processor.spi.Processor; +import org.gephi.project.api.ProjectController; +import org.gephi.project.api.Workspace; +import org.gephi.utils.progress.Progress; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +/** + * Processor 'Append graph' that tries to find in the current workspace nodes and edges in the container to only append new elements. It uses elements' id to do the matching. + * + * @author Mathieu Bastian + */ +@ServiceProvider(service = Processor.class, position = 100) +public class AppendProcessor extends DefaultProcessor implements Processor { + + @Override + public String getDisplayName() { + return NbBundle.getMessage(AppendProcessor.class, "AppendProcessor.displayName"); + } + + @Override + public Workspace[] process() { + try { + + + ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); + if (workspace == null) { + workspace = pc.getCurrentWorkspace(); + } + + if (workspace == null) { + // Get config + Configuration config = createConfiguration(containers[0]); + + workspace = pc.openNewWorkspace(config); + } else { + pc.openWorkspace(workspace); + } + + GraphController graphController = Lookup.getDefault().lookup(GraphController.class); + Graph graph = graphController.getGraphModel(workspace).getGraph(); + int existingNodeCount = graph.getNodeCount(); + int existingEdgeCount = graph.getEdgeCount(); + + Progress.start(progressTicket, calculateWorkUnits()); + int totalAddedNodes = 0, totalAddedEdges = 0, totalTouchedNodes = 0, totalTouchedEdges = 0; + for (ContainerUnloader container : containers) { + Configuration config = createConfiguration(container); + validateConfigurationMatchesExisting(container, config, workspace); + + processMeta(container, workspace); + + if (container.getSource() != null) { + pc.setSource(workspace, container.getSource()); + } + + process(container, workspace); + totalTouchedNodes += container.getNodeCount(); + totalTouchedEdges += container.getEdgeCount(); + } + Progress.finish(progressTicket); + + totalAddedNodes = graph.getNodeCount() - existingNodeCount; + totalAddedEdges = graph.getEdgeCount() - existingEdgeCount; + int overlappedNodes = totalTouchedNodes - totalAddedNodes; + int overlappedEdges = totalTouchedEdges - totalAddedEdges; + if (existingNodeCount > 0 || existingEdgeCount > 0) { + if (overlappedNodes > 0) { + report.log(NbBundle.getMessage( + AppendProcessor.class, "AppendProcessor.info.overlappingNodes", overlappedNodes)); + } + if (overlappedEdges > 0) { + report.log(NbBundle.getMessage( + AppendProcessor.class, "AppendProcessor.info.overlappingEdges", overlappedEdges)); + } + } + return new Workspace[] {workspace}; + } finally { + clean(); + } + } +} diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/processor/plugin/DefaultProcessor.java b/modules/ImportPlugin/src/main/java/org/gephi/io/processor/plugin/DefaultProcessor.java new file mode 100644 index 0000000000..b27d4fdafc --- /dev/null +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/processor/plugin/DefaultProcessor.java @@ -0,0 +1,335 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.io.processor.plugin; + +import java.util.logging.Level; +import java.util.logging.Logger; +import org.gephi.graph.api.Configuration; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphFactory; +import org.gephi.graph.api.Node; +import org.gephi.io.importer.api.ContainerUnloader; +import org.gephi.io.importer.api.EdgeDirection; +import org.gephi.io.importer.api.EdgeDraft; +import org.gephi.io.importer.api.EdgeMergeStrategy; +import org.gephi.io.importer.api.ElementIdType; +import org.gephi.io.importer.api.Issue; +import org.gephi.io.importer.api.NodeDraft; +import org.gephi.io.processor.spi.Processor; +import org.gephi.project.api.ProjectController; +import org.gephi.project.api.Workspace; +import org.gephi.project.api.WorkspaceMetaData; +import org.gephi.utils.progress.Progress; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +/** + * Processor 'Add full graph' that unloads the complete container into the workspace. + * + * @author Mathieu Bastian + */ +@ServiceProvider(service = Processor.class, position = 10) +public class DefaultProcessor extends AbstractProcessor { + + @Override + public String getDisplayName() { + return NbBundle.getMessage(DefaultProcessor.class, "DefaultProcessor.displayName"); + } + + @Override + public Workspace[] process() { + try { + if (containers.length > 1) { + throw new RuntimeException("This processor can only handle single containers"); + } + ContainerUnloader container = containers[0]; + + // Get config + Configuration config = createConfiguration(container); + + //Workspace + ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); + if (workspace == null) { + workspace = pc.openNewWorkspace(config); + } else { + validateConfigurationMatchesExisting(container, config, workspace); + } + processMeta(container, workspace); + + if (container.getSource() != null && !container.getSource().isEmpty()) { + pc.setSource(workspace, container.getSource()); + + // Remove extensions + pc.renameWorkspace(workspace, container.getSource().replaceAll("(? %s; %s, type %s]", + sourceId, targetId, createDirected ? "Directed" : "Undirected", type + ), + String.format( + "[%s -> %s; %s; type: %s; id: %s]", + incompatibleEdge.getSource().getId(), incompatibleEdge.getTarget().getId(), + incompatibleEdge.isDirected() ? "Directed" : "Undirected", + incompatibleEdge.getTypeLabel(), + incompatibleEdge.getId() + ) + ); + report.logIssue(new Issue(message, Issue.Level.WARNING)); + + Progress.progress(progressTicket); + continue; + } + } else if (edge == null) { + //No direct match, but a reverse-direction conflict may still prevent creating this edge: + final Edge incompatibleEdge = findIncompatibleEdge(graph, source, target, createDirected, edgeType); + if (incompatibleEdge != null) { + String message = NbBundle.getMessage( + DefaultProcessor.class, "DefaultProcessor.warning.incompatibleEdgeDirectedness", + String.format( + "[%s -> %s; %s, type %s]", + sourceId, targetId, createDirected ? "Directed" : "Undirected", type + ), + String.format( + "[%s -> %s; %s; type: %s; id: %s]", + incompatibleEdge.getSource().getId(), incompatibleEdge.getTarget().getId(), + incompatibleEdge.isDirected() ? "Directed" : "Undirected", + incompatibleEdge.getTypeLabel(), + incompatibleEdge.getId() + ) + ); + report.logIssue(new Issue(message, Issue.Level.WARNING)); + + Progress.progress(progressTicket); + continue; + } + } + + boolean newEdge = edge == null; + if (newEdge) { + if (!graph.hasEdge(id)) { + edge = factory.newEdge(id, source, target, edgeType, draftEdge.getWeight(), createDirected); + } else { + //The id is already in use by a different edge, generate a new id: + edge = factory.newEdge(source, target, edgeType, draftEdge.getWeight(), createDirected); + } + + addedEdges++; + } + + flushToEdge(container, draftEdge, edge, newEdge); + + if (newEdge) { + graph.addEdge(edge); + } + + Progress.progress(progressTicket); + } + + //Report + int touchedNodes = container.getNodeCount(); + int touchedEdges = container.getEdgeCount(); + int overlappedNodes = touchedNodes - addedNodes; + int overlappedEdges = touchedEdges - addedEdges; + if (overlappedNodes != 0) { + Logger.getLogger(getClass().getSimpleName()) + .log(Level.INFO, "# Nodes loaded: {0} ({1} added)", new Object[] {touchedNodes, addedNodes}); + } else { + Logger.getLogger(getClass().getSimpleName()) + .log(Level.INFO, "# Nodes loaded: {0}", new Object[] {touchedNodes}); + } + if (overlappedEdges != 0) { + Logger.getLogger(getClass().getSimpleName()) + .log(Level.INFO, "# Edges loaded: {0} ({1} added)", new Object[] {touchedEdges, addedEdges}); + } else { + Logger.getLogger(getClass().getSimpleName()) + .log(Level.INFO, "# Edges loaded: {0}", new Object[] {touchedEdges}); + } + } + + private Edge findIncompatibleEdge(Graph graph, Node source, Node target, boolean directed, int edgeType) { + Edge edge = graph.getEdge(source, target, edgeType); + + if (edge == null) { + //Check reverse direction for potential directedness conflicts + edge = graph.getEdge(target, source, edgeType); + if (edge != null) { + if (directed && edge.isDirected()) { + //Two directed edges in opposite directions can coexist + edge = null; + } else if (!directed && !edge.isDirected()) { + //Undirected edges are symmetric β€” already found as forward, would be merged not conflicting + edge = null; + } + //directed=false + existing directed: incompatible (return it) + //directed=true + existing undirected: incompatible (return it) + } + } else { + if (edge.isDirected() == directed) { + //Same directedness, not incompatible + edge = null; + } + } + + return edge; + } + + private Object toElementId(ElementIdType elementIdType, String idString) { + Object id; + switch (elementIdType) { + case INTEGER: + id = Integer.parseInt(idString); + break; + case LONG: + id = Long.parseLong(idString); + break; + default: + id = idString; + break; + } + return id; + } +} diff --git a/modules/ProcessorPlugin/src/main/java/org/gephi/io/processor/plugin/DefaultScaler.java b/modules/ImportPlugin/src/main/java/org/gephi/io/processor/plugin/DefaultScaler.java similarity index 99% rename from modules/ProcessorPlugin/src/main/java/org/gephi/io/processor/plugin/DefaultScaler.java rename to modules/ImportPlugin/src/main/java/org/gephi/io/processor/plugin/DefaultScaler.java index fcecd53160..de18a2c4a7 100644 --- a/modules/ProcessorPlugin/src/main/java/org/gephi/io/processor/plugin/DefaultScaler.java +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/processor/plugin/DefaultScaler.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.processor.plugin; import org.gephi.io.importer.api.Container; @@ -47,7 +48,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = Scaler.class) diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/processor/plugin/MergeProcessor.java b/modules/ImportPlugin/src/main/java/org/gephi/io/processor/plugin/MergeProcessor.java new file mode 100644 index 0000000000..41ebc5496e --- /dev/null +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/processor/plugin/MergeProcessor.java @@ -0,0 +1,104 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.io.processor.plugin; + +import org.gephi.graph.api.Configuration; +import org.gephi.io.importer.api.ContainerUnloader; +import org.gephi.io.processor.spi.Processor; +import org.gephi.project.api.ProjectController; +import org.gephi.project.api.Workspace; +import org.gephi.utils.progress.Progress; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +/** + * Processor 'Merge graphs' that merges multiple containers into the current + * workspace. It uses elements' id to do the matching if elements already exist. + * + * @author Mathieu Bastian + */ +@ServiceProvider(service = Processor.class, position = 40) +public class MergeProcessor extends DefaultProcessor implements Processor { + + @Override + public String getDisplayName() { + return NbBundle.getMessage(MergeProcessor.class, "MergeProcessor.displayName"); + } + + @Override + public Workspace[] process() { + try { + if (containers.length <= 1) { + throw new RuntimeException("This processor can only handle multiple containers"); + } + + ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); + //Workspace + if (workspace == null) { + // Get config + Configuration config = createConfiguration(containers[0]); + + workspace = pc.openNewWorkspace(config); + } else { + pc.openWorkspace(workspace); + } + + processMeta(containers[0], workspace); + if (containers[0].getSource() != null) { + pc.setSource(workspace, containers[0].getSource()); + } + + Progress.start(progressTicket, calculateWorkUnits()); + for (ContainerUnloader container : containers) { + Configuration config = createConfiguration(container); + validateConfigurationMatchesExisting(container, config, workspace); + process(container, workspace); + } + Progress.finish(progressTicket); + return new Workspace[] {workspace}; + } finally { + clean(); + } + } +} diff --git a/modules/ImportPlugin/src/main/java/org/gephi/io/processor/plugin/MultiProcessor.java b/modules/ImportPlugin/src/main/java/org/gephi/io/processor/plugin/MultiProcessor.java new file mode 100644 index 0000000000..527dda3432 --- /dev/null +++ b/modules/ImportPlugin/src/main/java/org/gephi/io/processor/plugin/MultiProcessor.java @@ -0,0 +1,105 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.io.processor.plugin; + +import java.util.Arrays; +import org.gephi.graph.api.Configuration; +import org.gephi.io.processor.spi.Processor; +import org.gephi.project.api.ProjectController; +import org.gephi.project.api.Workspace; +import org.gephi.utils.progress.Progress; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +/** + * Processor 'Multi graphs' that creates a workspace for every container. + * + * @author Mathieu Bastian + */ +@ServiceProvider(service = Processor.class, position = 30) +public class MultiProcessor extends DefaultProcessor implements Processor { + + @Override + public String getDisplayName() { + return NbBundle.getMessage(MultiProcessor.class, "MultiProcessor.displayName"); + } + + @Override + public Workspace[] process() { + try { + if (containers.length <= 1) { + throw new RuntimeException("This processor can only handle multiple containers"); + } + + ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); + + Progress.start(progressTicket, calculateWorkUnits()); + Workspace[] workspaces = Arrays.stream(containers).map(container -> { + Configuration config = createConfiguration(container); + workspace = pc.openNewWorkspace(config); + processMeta(container, workspace); + process(container, workspace); + + if (container.getSource() != null && !container.getSource().isEmpty()) { + pc.setSource(workspace, container.getSource()); + + // Remove extensions + pc.renameWorkspace(workspace, container.getSource().replaceAll("(? - - - diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle.properties index 77354a9b2b..09437ba13b 100644 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle.properties +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle.properties @@ -1,5 +1,2 @@ -OpenIDE-Module-Display-Category=Plugin -OpenIDE-Module-Long-Description=\ - Standard file and database importers implementations -OpenIDE-Module-Name=Import Plugin +OpenIDE-Module-Long-Description=Standard file and database importers implementations OpenIDE-Module-Short-Description=Standard file and database importers implementations diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_ar.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_ca.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_ca.properties new file mode 100644 index 0000000000..5a0fd7575b --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_ca.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Standard file and database importers implementations +OpenIDE-Module-Short-Description=Standard file and database importers implementations diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_cs.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_cs.properties index bddae1f3f0..54c3b37250 100644 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_cs.properties +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_cs.properties @@ -1,12 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2011. -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-13 16\:49+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=Zaveden\u00ed standardn\u00edho soubor u a import\u00e9r\u016f datab\u00e1ze - -OpenIDE-Module-Short-Description=Zaveden\u00ed standardn\u00edho soubor u a import\u00e9r\u016f datab\u00e1ze +OpenIDE-Module-Long-Description=Zavedenν standardnνho soubor u a importιr\u016f databαze +OpenIDE-Module-Short-Description=Zavedenν standardnνho soubor u a importιr\u016f databαze diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_de.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_de.properties new file mode 100644 index 0000000000..718b9cb324 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_de.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Implementierungen der Standard Datei- und Datenbank-Importer +OpenIDE-Module-Short-Description=Implementierungen der Standard Datei- und Datenbank-Importer diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_el.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_el.properties new file mode 100644 index 0000000000..6699a926bf --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_el.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Long-Description=\u03A4\u03C5\u03C0\u03B9\u03BA\u03AD\u03C2 \u03C5\u03BB\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03B9\u03C2 \u03B5\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AE\u03C2 \u03B1\u03C1\u03C7\u03B5\u03AF\u03C9\u03BD \u03BA\u03B1\u03B9 \u03B2\u03AC\u03C3\u03B5\u03C9\u03BD \u03B4\u03B5\u03B4\u03BF\u03BC\u03AD\u03BD\u03C9\u03BD +OpenIDE-Module-Short-Description=\u03A4\u03C5\u03C0\u03B9\u03BA\u03AD\u03C2 \u03C5\u03BB\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03B9\u03C2 \u03B5\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AE\u03C2 \u03B1\u03C1\u03C7\u03B5\u03AF\u03C9\u03BD \u03BA\u03B1\u03B9 \u03B2\u03AC\u03C3\u03B5\u03C9\u03BD \u03B4\u03B5\u03B4\u03BF\u03BC\u03AD\u03BD\u03C9\u03BD diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_es.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_es.properties index cc8bd9b541..3b007e4e15 100644 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_es.properties +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_es.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:03+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Implementaciones est\u00e1ndar de importadores de archivos y bases de datos - -OpenIDE-Module-Short-Description=Implementaciones est\u00e1ndar de importadores de archivos y bases de datos +OpenIDE-Module-Long-Description=Implementaciones estαndar de importadores de archivos y bases de datos +OpenIDE-Module-Short-Description=Implementaciones estαndar de importadores de archivos y bases de datos diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_fr.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_fr.properties index 3c4a08dd3d..4a6f400450 100644 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_fr.properties +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_fr.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:02+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Impl\u00e9mentation des importeurs standards pour les fichiers et les bases de donn\u00e9es - -OpenIDE-Module-Short-Description=Impl\u00e9mentation des importeurs standards +OpenIDE-Module-Long-Description=Implιmentation des importeurs standards pour les fichiers et les bases de donnιes +OpenIDE-Module-Short-Description=Implιmentation des importeurs standards diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_he.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_he.properties new file mode 100644 index 0000000000..5a0fd7575b --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_he.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Standard file and database importers implementations +OpenIDE-Module-Short-Description=Standard file and database importers implementations diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_hu.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_hu.properties new file mode 100644 index 0000000000..ca864ed517 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_hu.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Short-Description=Szabv\u00E1nyos f\u00E1jl- \u00E9s adatb\u00E1zis-import\u0151r implement\u00E1ci\u00F3k +OpenIDE-Module-Long-Description=Szabv\u00E1nyos f\u00E1jl- \u00E9s adatb\u00E1zis-import\u0151r implement\u00E1ci\u00F3k diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_it.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_it.properties new file mode 100644 index 0000000000..1daf1636ca --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_it.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Implementazioni standard degli importatori di file e database +OpenIDE-Module-Short-Description=Standard file and database importers implementations diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_ja.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_ja.properties index eadbe1f5b1..4e2aa6a2ae 100644 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_ja.properties +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_ja.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-19 05\:21+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u6a19\u6e96\u306e\u30d5\u30a1\u30a4\u30eb\u3068\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30bf\u306e\u5b9f\u88c5 - -OpenIDE-Module-Short-Description=\u6a19\u6e96\u306e\u30d5\u30a1\u30a4\u30eb\u3068\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30bf\u306e\u5b9f\u88c5 +OpenIDE-Module-Long-Description=\u6a19\u6e96\u306e\u30d5\u30a1\u30a4\u30eb\u3068\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30bf\u306e\u5b9f\u88c5 +OpenIDE-Module-Short-Description=\u6a19\u6e96\u306e\u30d5\u30a1\u30a4\u30eb\u3068\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u30a8\u30af\u30b9\u30dd\u30fc\u30bf\u306e\u5b9f\u88c5 diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_ko.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_ko.properties new file mode 100644 index 0000000000..77cd323c2c --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_ko.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Long-Description=\uD45C\uC900 \uD30C\uC77C \uBC0F \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uBD88\uB7EC\uC624\uAE30 \uAD6C\uD604 +OpenIDE-Module-Short-Description=\uD45C\uC900 \uD30C\uC77C \uBC0F \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uBD88\uB7EC\uC624\uAE30 \uAD6C\uD604 diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_nl.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_nl.properties new file mode 100644 index 0000000000..5a0fd7575b --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_nl.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Standard file and database importers implementations +OpenIDE-Module-Short-Description=Standard file and database importers implementations diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_pt_BR.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_pt_BR.properties index 33fcbd283c..0ab7f65c15 100644 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_pt_BR.properties +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_pt_BR.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 17\:04+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Implementa\u00e7\u00f5es padr\u00e3o de importadores de arquivos e bases de dados - -OpenIDE-Module-Short-Description=Implementa\u00e7\u00f5es padr\u00e3o de importadores de arquivos e bases de dados +OpenIDE-Module-Long-Description=Implementaηυes padrγo de importadores de arquivos e bases de dados +OpenIDE-Module-Short-Description=Implementaηυes padrγo de importadores de arquivos e bases de dados diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_ro.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_ro.properties new file mode 100644 index 0000000000..2aab953d96 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_ro.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Long-Description=Implement\u0103ri de importatori pentru fi\u0219iere standard \u0219i baze de date +OpenIDE-Module-Short-Description=Implement\u0103ri de importatori pentru fi\u0219iere standard \u0219i baze de date diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_ru.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_ru.properties index 21bfa19503..a8bcd1c98d 100644 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_ru.properties +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_ru.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 15\:29+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0438\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 - -OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0438\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 +OpenIDE-Module-Long-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0438\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 +OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0438\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u0438 \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_th.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_tr.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_tr.properties new file mode 100644 index 0000000000..df20a0e807 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_tr.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Standart dosya ve veritaban\u0131 i\u00E7e aktar\u0131c\u0131 uygulamalar\u0131 +OpenIDE-Module-Short-Description=Standard file and database importers implementations diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_uk.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_uk.properties new file mode 100644 index 0000000000..25ad01ac99 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_uk.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Short-Description=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0456 \u0456\u043C\u043F\u043E\u0440\u0442\u0435\u0440\u0438 \u0444\u0430\u0439\u043B\u0456\u0432 \u0456 \u0431\u0430\u0437 \u0434\u0430\u043D\u0438\u0445 +OpenIDE-Module-Long-Description=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0456 \u0456\u043C\u043F\u043E\u0440\u0442\u0435\u0440\u0438 \u0444\u0430\u0439\u043B\u0456\u0432 \u0456 \u0431\u0430\u0437 \u0434\u0430\u043D\u0438\u0445 diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_zh_CN.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_zh_CN.properties index e94b8dbb42..2781d56cbb 100644 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_zh_CN.properties +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_zh_CN.properties @@ -1,10 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:11+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u6807\u51c6\u7684\u6587\u4ef6\u548c\u6570\u636e\u5e93\u8f93\u5165\u5b9e\u73b0 - -OpenIDE-Module-Short-Description=\u6807\u51c6\u7684\u6587\u4ef6\u548c\u6570\u636e\u5e93\u8f93\u5165\u5b9e\u73b0 +OpenIDE-Module-Long-Description=\u6807\u51c6\u7684\u6587\u4ef6\u548c\u6570\u636e\u5e93\u8f93\u5165\u5b9e\u73b0 +OpenIDE-Module-Short-Description=\u6807\u51c6\u7684\u6587\u4ef6\u548c\u6570\u636e\u5e93\u8f93\u5165\u5b9e\u73b0 diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_zh_TW.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_zh_TW.properties new file mode 100644 index 0000000000..5a0fd7575b --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/Bundle_zh_TW.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Standard file and database importers implementations +OpenIDE-Module-Short-Description=Standard file and database importers implementations diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/cs.po b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/cs.po deleted file mode 100644 index 063d1cd204..0000000000 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/cs.po +++ /dev/null @@ -1,26 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2011. -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-13 16:49+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ZavedenΓ­ standardnΓ­ho soubor u a importΓ©rΕ― databΓ‘ze" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ZavedenΓ­ standardnΓ­ho soubor u a importΓ©rΕ― databΓ‘ze" diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/es.po b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/es.po deleted file mode 100644 index 316888a63e..0000000000 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/es.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:03+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Implementaciones estΓ‘ndar de importadores de archivos y bases de datos" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implementaciones estΓ‘ndar de importadores de archivos y bases de datos" diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle.properties index a52e1f846b..ec7d8cd6cb 100644 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle.properties +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle.properties @@ -4,7 +4,6 @@ fileType_NET_Name = NET Files (Pajek) fileType_GraphML_Name = GraphML Files fileType_GML_Name = GML Files fileType_TLP_Name = TLP Files -fileType_CSV_Name = CSV Files fileType_TGF_Name = TGF Files fileType_Edges_Name = Edge List fileType_GraphViz_Name = GraphViz Files @@ -40,6 +39,7 @@ importerGraphML_error_attributetype2 = Attribute type for ''{0}'' is not recogni importerGraphML_error_attributedefault = Attribute ''{0}'' default value cannot be cast to the ''{1}'' type. importerGraphML_error_attributecolumn_exist = Attribute with id ''{0}'' already exists, the attribute is ignored importerGraphML_error_attributeempty = Attribute parse error, id is missing. +importerGraphML_error_graphattributes = Graph attributes ''{0}'' ignored as not supported by Gephi importerGraphML_log_nodeproperty = Node property found: {0} importerGraphML_log_edgeproperty = Edge property found: {0} importerGraphML_log_nodeattribute = Node attribute found ''{0}'' ({1}) @@ -69,6 +69,7 @@ importerGEXF_error_datakey = Data key (attribute ''for'') is missing for element importerGEXF_error_datakey1 = Data key (attribute ''id'') is missing for element id={0} importerGEXF_error_dataoptionsvalue = Data value ''{0}'' is not an option for element id={1}. The value cannot be set as ''{2}'' attribute. importerGEXF_error_datavalue = Data value ''{0}'' type error for element {1}. The value cannot be set as ''{2}'' attribute. +importerGEXF_error_idtype_error = The id type ''{0}'' is not recognized, use 'integer', 'long' or 'string' importerGEXF_error_defaultedgetype = Default edge type ''{0}'' is not recognized. Set to default ''mixed''. importerGEXF_error_edgedouble = Edge type ''double'' is currently not supported. Set to default ''mixed''. importerGEXF_error_edgetype = Type ''{0}'' of the edge ''{1}'' is not recognized. Set to default value. @@ -80,17 +81,33 @@ importerGEXF_error_nodeid = Node id is missing. The node is ignored. importerGEXF_error_nodeposition = Node ''{0}'' has a wrong position on ''{1}'' (not a float). importerGEXF_error_nodesize = Node ''{0}'' has a wrong size (not a float). importerGEXF_error_notnode = Element ''{0}'' is not a node. The element is ignored. -importerGEXF_error_pid_notfound = The parent pid ''{0}'' could not be found for node ''{1}''. importerGEXF_error_parsingdatetype = Date type ''{0}'' is not recognized. Set to default ''date''. importerGEXF_error_parsingmode = Parsing mode ''{0}'' is not recognized. Set to default ''static''. importerGEXF_error_node_timeinterval_parseerror = The time interval for node ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. -importerGEXF_error_edge_timeinterval_parseerror = The time interval for edge ''{0}'' could not be parsed. Use csd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edge_timeinterval_parseerror = The time interval for edge ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_node_timeintervals_parseerror = The time intervals for node ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edge_timeintervals_parseerror = The time intervals for edge ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. importerGEXF_error_nodeattribute_timeinterval_parseerror = The time interval for node ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. importerGEXF_error_edgeattribute_timeinterval_parseerror = The time interval for edge ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. -importerGEXF_error_nodecolorvalue = Node of id ''{1}'' has a wrong color channel ''{2}''=''{0}''. It should be 0 < ''{2}'' < 255. -importerGEXF_error_edgecolorvalue = Edge of id ''{1}'' has a wrong color channel ''{2}''=''{0}''. It should be 0 < ''{2}'' < 255. -importerGEXF_error_nodeopacityvalue = Node of id ''{1}'' has a wrong opacity a=''{0}''. It should be 0.0 < a < 1.0. -importerGEXF_error_edgeopacityvalue = Edge of id ''{1}'' has a wrong opacity a=''{0}''. It should be 0.0 < a < 1.0. +importerGEXF_error_node_timestamp_parseerror = The timestamp for node ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edge_timestamp_parseerror = The timestamp for edge ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_node_timestamps_parseerror = The timestamps for node ''{0}'' could not be parsed. +importerGEXF_error_edge_timestamps_parseerror = The timestamps for edge ''{0}'' could not be parsed. +importerGEXF_error_nodeattribute_timestamp_parseerror = The timestamp for node ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edgeattribute_timestamp_parseerror = The timestamp for edge ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_nodeattribute_timeset_parseerror = The timestamps or intervals for node ''{0}'' attribute could not be parsed. +importerGEXF_error_edgeattribute_timeset_parseerror = The timestamps or intervals for edge ''{0}'' attribute could not be parsed. +importerGEXF_error_nodecolorvalue = Node of id ''{1}'' has a wrong color channel ''{2}''=''{0}''. It should be 0 <= ''{2}'' <= 255. +importerGEXF_error_edgecolorvalue = Edge of id ''{1}'' has a wrong color channel ''{2}''=''{0}''. It should be 0 <= ''{2}'' <= 255. +importerGEXF_error_nodeopacityvalue = Node of id ''{1}'' has a wrong opacity a=''{0}''. It should be 0.0 <= a <= 1.0. +importerGEXF_error_edgeopacityvalue = Edge of id ''{1}'' has a wrong opacity a=''{0}''. It should be 0.0 <= a <= 1.0. +importerGEXF_error_node_open_interval = Node of id ''{0}'' uses open intervals, which have been deprecated. +importerGEXF_error_edge_open_interval = Edge of id ''{0}'' uses open intervals, which have been deprecated. +importerGEXF_error_slice_bound_missing = Missing timestamp or interval attribute on +importerGEXF_error_pid = The node of id ''{0}'' defines a parent using a pid. Hierarchical graph support has been deprecated and will be ignored. +importerGEXF_error_timezone_parseerror = The time zone ''{0}'' couldn't be recognized +importerGEXF_error_timerepresentation_intervalerror = The time representation is set as 'timestamp' so intervals can't be used. Set the time representation to 'interval' in . +importerGEXF_error_timerepresentation_timestamperror = The time representation is set as 'interval' so timestamps can't be used. Set the time representation to 'timestamp' in . importerGEXF_log_edgeeproperty = Edge property found: {0} importerGEXF_log_nodeproperty = Node property found: {0} importerGEXF_log_edgeattribute = Edge attribute found ''{0}'' ({1}) @@ -99,7 +116,7 @@ importerGEXF_log_default = Default attribute value found: ''{0}'' ({1}) importerGEXF_log_options = Attribute Options found: ''{0}'' ({1}) importerGEXF_log_version10 = GEXF version 1.0 (deprecated) importerGEXF_log_version11 = GEXF version 1.1 (deprecated) -importerGEXF_log_version12 = GEXF version 1.2 +importerGEXF_log_version12 = GEXF version 1.2 (deprecated) importerGEXF_log_version13 = GEXF version 1.3 importerGEXF_log_version_undef = Undefined GEXF version. Parser 1.3 is used. importerGEXF_log_dynamic_weight = Dynamic weight column found @@ -124,6 +141,7 @@ importerDL_error_edgeparseweight = Unable to parse weight ''{0}'' on edgelist li importerDOT_error_nothingfound = No 'graph' or 'digraph' was found importerDOT_error_labelunreachable = Unable to find label at line {0} importerDOT_error_colorunreachable = Unable to find color at line {0} -importerDOT_error_edgeparsing = Unable to parse edge at line {0} importerDOT_error_posunreachable = Unable to parse position of node at line {0}. Must be pos="x, y". -importerDOT_error_weightunreachable = Unable to parse edge's weight at line {0} +importerDOT_error_weightunreachable = Unable to parse edge's weight at line {0} + +importerTGF_error_emptynodes = No nodes found diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_ar.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_ca.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_ca.properties new file mode 100644 index 0000000000..680b186a09 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_ca.properties @@ -0,0 +1,136 @@ +fileType_GDF_Name=Fitxers GDF (GUESS) +fileType_GEXF_Name=Fitxers GEXF +fileType_NET_Name=Fitxers NET (Pajek) +fileType_GraphML_Name=Fitxers GraphML +fileType_GML_Name=Fitxers GML +fileType_TLP_Name=Fitxers TLP +fileType_TGF_Name=Fitxers TGF +fileType_Edges_Name=Llista d'arestes +fileType_GraphViz_Name=Fitxers Graphviz +fileType_DL_Name=Fitxers DL (UCINET) +fileType_VNA_Name=Fitxers VNA +importerGDF_error_dataformat1=El fitxer ha de comenηar amb "nodedef> name" +importerGDF_error_dataformat2=El format de les columnes ιs un desastre! Cada columna ha de tenir com a mνnim un nom i els noms de les columnes no poden tenir cap coma +importerGDF_error_dataformat3=Failed to import the column ''{0}'' for node ''{1}''. Error at value ''{2}''. +importerGDF_error_dataformat4=Failed to set the ''{0}'' attribute ''{1}'' for {2}. +importerGDF_error_dataformat5=The data type ''{0}'' is not recognized, string is used instead. +importerGDF_error_dataformat6=Column type is not found for ''{0}'', string is used instead. +importerGDF_error_dataformat7=Line ''{0}'' has more columns than defined in header. Please verify the number of commas. +importerGDF_error_dataformat8=The node column ''{0}'' can't be added because it already exists +importerGDF_error_dataformat9=The edge column ''{0}'' can't be added because it already exists +importerTPL_error_dataformat1=Bad edge formatting at line {0}. +importerNET_error_dataformat1=The file must start with the "*vertices" line. +importerNET_error_dataformat2=Blank line detected at line {0} +importerNET_error_dataformat3=Unbalanced (or too many) quote marks at line {0} +importerNET_error_dataformat4=Vertex number ''{0}'' not in the range [1,{1}] +importerNET_error_dataformat5=Vertex coordinates conversion problem at line {0}. Must be float number. +importerNET_error_dataformat6=Vertex size conversion problem at line {0}. Must be float number. +importerNET_error_dataformat7=Edge weight parsing issue at line {0}. Must be a double number. +importerGraphML_error_syntax1=Syntax error, the file must start with the markup. +importerGraphML_error_syntax2=Syntax error, node ''{0}'' must be nested in a markup. +importerGraphML_error_attributeclass=Attribute class not found or unknown for attribute ''{0}''. The attribute is ignored. +importerGraphML_error_attributefor=Attribute ''for'' not found or unknown for attribute ''{0}''. The attribute is ignored. +importerGraphML_error_attributetype1=Attribute type not found for attribute ''{0}''. Set to default string. +importerGraphML_error_attributetype2=Attribute type for ''{0}'' is not recognized. The attribute is ignored. +importerGraphML_error_attributedefault=Attribute ''{0}'' default value cannot be cast to the ''{1}'' type. +importerGraphML_error_attributecolumn_exist=Attribute with id ''{0}'' already exists, the attribute is ignored +importerGraphML_error_attributeempty=Attribute parse error, id is missing. +importerGraphML_log_nodeproperty=S'han trobat propietats dels nodes: {0} +importerGraphML_log_edgeproperty=S'han trobat propietats de les arestes: {0} +importerGraphML_log_nodeattribute=S'han trobat propietats dels nodes: "{0}" ({1}) +importerGraphML_log_edgeattribute=S'han trobat propietats de les arestes: "{0}" ({1}) +importerGraphML_log_default=Default attribute value found: ''{0}'' ({1}) +importerGraphML_error_datakey=Data key is missing for element id={0} +importerGraphML_error_datavalue=Data value {0} type error for element id={1}. The value cannot be set as ''{2}'' attribute. +importerGraphML_error_nodeid=Node id is missing. The node is ignored. +importerGraphML_error_defaultedgetype=Default edge type ''{0}'' is not recognized. Set to default ''mixed''. +importerGraphML_error_edgetype=Type ''{0}'' of the edge ''{1}'' is not recognized. Set to default value. +importerGML_error_nodeidmissing=Falta la ID del node +importerGML_error_directedgraphparse=Unexpected value for graph 'directed' property +importerGML_error_directedparse=Unexpected value for 'directed' property for edge ''{0}'' +importerGML_error_badparsing=Invalid GML parsing +importerTPL_error_badparsing=Invalid TPL parsing +importerGEXF_error_attributeclass=Attribute ''class'' not found or unknown for attribute ''{0}''. The attribute is ignored. +importerGEXF_error_attributeempty=Attribute parse error, id or type is missing. +importerGEXF_error_attributedefault=Attribute ''{0}'' default value cannot be cast to the ''{1}'' type. +importerGEXF_error_attributeoptions=Attribute ''{0}'' option values cannot be cast to the ''{1}'' type. +importerGEXF_error_attributecolumn_exist=Attribute with id ''{0}'' already exists, the attribute is ignored +importerGEXF_error_attributetype1=Attribute type not found for attribute ''{0}''. Set to default string. +importerGEXF_error_attributetype2=Attribute type for ''{0}'' is not recognized. The attribute is ignored. +importerGEXF_error_datakey=Data key (attribute ''for'') is missing for element id={0} +importerGEXF_error_datakey1=Data key (attribute ''id'') is missing for element id={0} +importerGEXF_error_dataoptionsvalue=Data value ''{0}'' is not an option for element id={1}. The value cannot be set as ''{2}'' attribute. +importerGEXF_error_datavalue=Data value ''{0}'' type error for element {1}. The value cannot be set as ''{2}'' attribute. +importerGEXF_error_idtype_error=The id type ''{0}'' is not recognized, use 'integer', 'long' or 'string' +importerGEXF_error_defaultedgetype=Default edge type ''{0}'' is not recognized. Set to default ''mixed''. +importerGEXF_error_edgedouble=Edge type ''double'' is currently not supported. Set to default ''mixed''. +importerGEXF_error_edgetype=Type ''{0}'' of the edge ''{1}'' is not recognized. Set to default value. +importerGEXF_error_edgeid=Edge id is missing. An id has been generated. +importerGEXF_error_edgesource=Edge source is missing. The edge is ignored. +importerGEXF_error_edgetarget=Edge target is missing. The edge is ignored. +importerGEXF_error_edgeweight=Edge weight of id ''{0}'' is not a float. Weight is ignored. +importerGEXF_error_nodeid=Falta la ID del node. El node s'ignorarΰ. +importerGEXF_error_nodeposition=Node ''{0}'' has a wrong position on ''{1}'' (not a float). +importerGEXF_error_nodesize=Node ''{0}'' has a wrong size (not a float). +importerGEXF_error_notnode=Element ''{0}'' is not a node. The element is ignored. +importerGEXF_error_parsingdatetype=Date type ''{0}'' is not recognized. Set to default ''date''. +importerGEXF_error_parsingmode=Parsing mode ''{0}'' is not recognized. Set to default ''static''. +importerGEXF_error_node_timeinterval_parseerror=The time interval for node ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edge_timeinterval_parseerror=The time interval for edge ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_node_timeintervals_parseerror=The time intervals for node ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edge_timeintervals_parseerror=The time intervals for edge ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_nodeattribute_timeinterval_parseerror=The time interval for node ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edgeattribute_timeinterval_parseerror=The time interval for edge ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_node_timestamp_parseerror=The timestamp for node ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edge_timestamp_parseerror=The timestamp for edge ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_node_timestamps_parseerror=The timestamps for node ''{0}'' could not be parsed. +importerGEXF_error_edge_timestamps_parseerror=The timestamps for edge ''{0}'' could not be parsed. +importerGEXF_error_nodeattribute_timestamp_parseerror=The timestamp for node ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edgeattribute_timestamp_parseerror=The timestamp for edge ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_nodeattribute_timeset_parseerror=The timestamps or intervals for node ''{0}'' attribute could not be parsed. +importerGEXF_error_edgeattribute_timeset_parseerror=The timestamps or intervals for edge ''{0}'' attribute could not be parsed. +importerGEXF_error_nodecolorvalue=Node of id ''{1}'' has a wrong color channel ''{2}''=''{0}''. It should be 0 <= ''{2}'' <= 255. +importerGEXF_error_edgecolorvalue=Edge of id ''{1}'' has a wrong color channel ''{2}''=''{0}''. It should be 0 <= ''{2}'' <= 255. +importerGEXF_error_nodeopacityvalue=Node of id ''{1}'' has a wrong opacity a=''{0}''. It should be 0.0 <= a <= 1.0. +importerGEXF_error_edgeopacityvalue=Edge of id ''{1}'' has a wrong opacity a=''{0}''. It should be 0.0 <= a <= 1.0. +importerGEXF_error_node_open_interval=Node of id ''{0}'' uses open intervals, which have been deprecated. +importerGEXF_error_edge_open_interval=Edge of id ''{0}'' uses open intervals, which have been deprecated. +importerGEXF_error_slice_bound_missing=Missing timestamp or interval attribute on +importerGEXF_error_pid=The node of id ''{0}'' defines a parent using a pid. Hierarchical graph support has been deprecated and will be ignored. +importerGEXF_error_timezone_parseerror=No s'ha pogut reconθixer la zona horΰria "{0}" +importerGEXF_error_timerepresentation_intervalerror=The time representation is set as 'timestamp' so intervals can't be used. Set the time representation to 'interval' in . +importerGEXF_error_timerepresentation_timestamperror=The time representation is set as 'interval' so timestamps can't be used. Set the time representation to 'timestamp' in . +importerGEXF_log_edgeeproperty=S'han trobat propietats de les arestes: {0} +importerGEXF_log_nodeproperty=S'han trobat propietats dels nodes: {0} +importerGEXF_log_edgeattribute=S'han trobat atributs de les arestes: "{0}" ({1}) +importerGEXF_log_nodeattribute=S'han trobat atributs dels nodes: "{0}" ({1}) +importerGEXF_log_default=Default attribute value found: ''{0}'' ({1}) +importerGEXF_log_options=Attribute Options found: ''{0}'' ({1}) +importerGEXF_log_version10=GEXF versiσ 1.0 (caducada) +importerGEXF_log_version11=GEXF versiσ 1.1 (caducada) +importerGEXF_log_version12=GEXF versiσ 1.2 (caducada) +importerGEXF_log_version13=GEXF versiσ 1.3 +importerGEXF_log_version_undef=La versiσ del GEXF no estΰ definida. S'interpretarΰ com la versiσ 1.3 +importerGEXF_log_dynamic_weight=Dynamic weight column found +importerDL_error_firstline=First line of DL file must begin with 'DL' +importerDL_error_unknowntag=Header unknown tag ''{0}'' +importerDL_error_formatmissing=DL 'format' tag is missing, 'fullmatrix' is used by default +importerDL_error_badformat=Format ''{0}'' is not supported, provide 'format=edgelist1' or 'format=fullmatrix' format only +importerDL_error_nmissing=El capηal del fitxer DL ha de contenir l'etiqueta "n = " +importerDL_error_mmissing=El capηal del fitxer DL ha de contenir l'etiqueta "m = " +importerDL_error_labelscount=El nombre d'etiquetes ({0}) ιs diferent del d'etiquetes ({1}) +importerDL_error_nodata=No s'ha trobat cap lνnia de dades +importerDL_error_matrixrowscount=El nombre de files de la matriu ({0}) ιs mιs gran que el d'etiquetes ({1}) +importerDL_error_matrixrowscount2=El nombre de files de la matriu ({0}) ιs inferior al d'etiquetes ({1}) +importerDL_error_matriciescount=Number of matricies sets ({0}) is different from nm tag ({1}) +importerDL_error_matrixentriescount=Number of matrix entries on row {0} of matrix {1} has more than allowed entries (line {2} of DL file) +importerDL_error_weightparseerror=Unable to parse weight ''{0}'' on matrix {1} on line {2} +importerDL_error_edgelistssetscount=Number of edgelist sets ({0}) is different from nm tag ({1}) +importerDL_error_edgelistrowparse=Unable to parse from id ''{0}'' on edgelist line {1} +importerDL_error_edgeparseweight=Unable to parse weight ''{0}'' on edgelist line {1} +importerDOT_error_nothingfound=No 'graph' or 'digraph' was found +importerDOT_error_labelunreachable=No s'ha pogut trobar etiquetes a la lνnia {0} +importerDOT_error_colorunreachable=Unable to find color at line {0} +importerDOT_error_posunreachable=Unable to parse position of node at line {0}. Must be pos="x, y". +importerDOT_error_weightunreachable=Unable to parse edge's weight at line {0} +importerTGF_error_emptynodes=No s'han trobat nodes diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_cs.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_cs.properties index 9bdc465c40..de69478131 100644 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_cs.properties +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_cs.properties @@ -1,247 +1,146 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-15 21\:50+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -fileType_GDF_Name=Soubory GDF (GUESS) - -fileType_GEXF_Name=Soubory GEXF - -fileType_NET_Name=Soubory NET (Pajek) - -fileType_GraphML_Name=Soubory GraphML - -fileType_GML_Name=Soubory GML - -fileType_TLP_Name=Soubory TLP - -fileType_CSV_Name=Soubory CSV - -fileType_Edges_Name=Seznam hran - -fileType_GraphViz_Name=Soubory GraphViz - -fileType_DL_Name=Soubory DL (UCINET) - -fileType_VNA_Name=Soubory VNA - -importerGDF_error_dataformat1=Soubor mus\u00ed za\u010d\u00ednat \u0159\u00e1dkem "nodedef> name" - -importerGDF_error_dataformat2=\u0160patn\u00e9 form\u00e1tov\u00e1n\u00ed sloupce. Ka\u017ed\u00fd sloupce mus\u00ed alespo\u0148 obsahovat n\u00e1zev. N\u00e1zvy sloupc\u016f nesm\u00ed obsahovat \u017e\u00e1dnou \u010d\u00e1rku. - -importerGDF_error_dataformat3=Nelze importovat sloupce ''{0}'' pro uzel ''{1}''. Chyba v hodnot\u011b ''{2}''. - -importerGDF_error_dataformat4=Nelze nastavit ''{0}'' vlastnosti ''{1}'' pro {2}. - -importerGDF_error_dataformat5=Datov\u00fd typ ''{0}'' nen\u00ed rozezn\u00e1n, m\u00edsto toho je pou\u017eit \u0159et\u011bzec. - -importerGDF_error_dataformat6=Typ sloupce nebyl v ''{0}'' nalezen, m\u00edsto toho je pou\u017eit \u0159et\u011bzec. - -importerGDF_error_dataformat7=\u0158\u00e1dek ''{0}'' m\u00e1 v\u00edce sloupc\u016f, ne\u017e je ur\u010deno v hlavi\u010dce. Ov\u011b\u0159te, pros\u00edm, po\u010det \u010d\u00e1rek. - -importerGDF_error_dataformat8=Sloupec uzlu ''{0}'' nem\u016f\u017ee b\u00fdt p\u0159id\u00e1n, proto\u017ee ji\u017e existuje - -importerGDF_error_dataformat9=Sloupec hrany ''{0}'' nem\u016f\u017ee b\u00fdt p\u0159id\u00e1n, proto\u017ee ji\u017e existuje - -importerTPL_error_dataformat1=\u0160patn\u00e9 form\u00e1tov\u00e1n\u00ed hrany na \u0159\u00e1dku {0}. - -importerNET_error_dataformat1=Soubor mus\u00ed za\u010d\u00ednat \u0159\u00e1dkem "*vertices". - -importerNET_error_dataformat2=\u0158\u00e1dek {0} se zd\u00e1 b\u00fdt pr\u00e1zdn\u00fd - -importerNET_error_dataformat3=Nep\u00e1rov\u00e9 (nebo p\u0159\u00edli\u0161 mnoho) uvozovky na \u0159\u00e1dku {0} - -importerNET_error_dataformat4=Vertex \u010d\u00edslo ''{0}'' nen\u00ed v rozsahu [1,{1}] - -importerNET_error_dataformat5=Probl\u00e9m s p\u0159evodem sou\u0159adnic vertexu na \u0159\u00e1dku {0}. Mus\u00ed b\u00fdt desetinn\u00e9 \u010d\u00edslo. - -importerNET_error_dataformat6=Probl\u00e9m s p\u0159evodem velikosti vertexu na \u0159\u00e1dku {0}. Mus\u00ed b\u00fdt desetinn\u00e9 \u010d\u00edslo. - -importerNET_error_dataformat7=Probl\u00e9m se zpracov\u00e1n\u00edm v\u00e1hy hrany na \u0159\u00e1dku {0}. Mus\u00ed b\u00fdt desetinn\u00e9 \u010d\u00edslo. - -importerGraphML_error_syntax1=Syntaktick\u00e1 chyba, souboru mus\u00ed za\u010d\u00ednat se zna\u010dkou . - -importerGraphML_error_syntax2=Syntaktick\u00e1 chyba, uzel ''{0}'' mus\u00ed b\u00fdt um\u00edst\u011bn ve zna\u010dce . - -importerGraphML_error_attributeclass=T\u0159\u00edda vlastnosti nebyla nalezena nebo nezn\u00e1m\u00e1 pro vlastnost "{0}". Vlastnost je ignorov\u00e1na. - -importerGraphML_error_attributefor=Vlastnost ''for'' nebyla nalezena nebo nezn\u00e1m\u00e1 pro vlastnost ''{0}''. Vlastnost je ignorov\u00e1na. - -importerGraphML_error_attributetype1=Typ vlastnosti nebyl nalezen pro vlastnost ''{0}''. Nastaveno na v\u00fdchoz\u00ed \u0159et\u011bzec. - -importerGraphML_error_attributetype2=Typ vlastnosti pro ''{0}'' nebyl rozpozn\u00e1n. Vlastnost je ignorov\u00e1na. - -importerGraphML_error_attributedefault=V\u00fdchoz\u00ed hodnota vlastnosti ''{0}'' nem\u016f\u017ee b\u00fdt odevzd\u00e1na typu ''{1}''. - -importerGraphML_error_attributecolumn_exist=Vlastnost s id ''{0}'' ji\u017e existuje, vlastnost je ignorov\u00e1na - -importerGraphML_error_attributeempty=Chyba zpracov\u00e1n\u00ed vlastnosti, id chyb\u00ed. - -importerGraphML_log_nodeproperty=Vlastnost uzlu nalezena\: {0} - -importerGraphML_log_edgeproperty=Vlastnost hrany nalezena\: {0} - -importerGraphML_log_nodeattribute=Vlastnost uzlu nalezena ''{0}'' ({1}) - -importerGraphML_log_edgeattribute=Vlastnost hrany nalezena ''{0}'' ({1}) - -importerGraphML_log_default=V\u00fdchoz\u00ed hodnota vlastnosti nalezena\: ''{0}'' ({1}) - -importerGraphML_error_datakey=Chyb\u00ed datov\u00fd kl\u00ed\u010d pro prvek id\={0} - -importerGraphML_error_datavalue=Chyba typu datov\u00e9 hodnoty {0} pro prvek id\={1}. Tato hodnota nem\u016f\u017ee b\u00fdt nastavena jako vlastnost ''{2}''. - -importerGraphML_error_nodeid=Id uzlu chyb\u00ed. Uzel je ignorov\u00e1n. - -importerGraphML_error_defaultedgetype=V\u00fdchoz\u00ed typ hrany ''{0}'' nen\u00ed rozpozn\u00e1n. Nastaveno na v\u00fdchoz\u00ed ''mixed''. - -importerGraphML_error_edgetype=Typ ''{0}'' hrany ''{1}'' nen\u00ed rozpozn\u00e1n. Nastaveno na v\u00fdchoz\u00ed hodnotu. - -importerGML_error_nodeidmissing=Id uzlu chyb\u00ed - -importerGML_error_directedgraphparse=Neo\u010dek\u00e1van\u00e1 hodnota pro vlastnost '\u0159\u00edzenou' grafem - -importerGML_error_directedparse=Neo\u010dek\u00e1van\u00e1 hodnota pro vlastnost '\u0159\u00edzenou' grafem pro hranu "{0}" - -importerGML_error_badparsing=Neplatn\u00e9 zpracov\u00e1n\u00ed GML - -importerTPL_error_badparsing=Neplatn\u00e9 zpracov\u00e1n\u00ed TPL - -importerGEXF_error_attributeclass=Vlastnost ''class'' nenalezena nebo nezn\u00e1m\u00e1 pro vlastnost ''{0}''. Vlastnost je ignorov\u00e1na. - -importerGEXF_error_attributeempty=Chyba zpracov\u00e1n\u00ed vlastnosti, chyb\u00ed id nebo typ. - -importerGEXF_error_attributedefault=V\u00fdchoz\u00ed hodnota vlastnosti ''{0}'' nem\u016f\u017ee b\u00fdt p\u0159etypov\u00e1na na typ ''{1}''. - -importerGEXF_error_attributeoptions=Hodnoty mo\u017enosti ve vlastnosti ''{0}'' nem\u016f\u017eou b\u00fdt p\u0159etypov\u00e1ny na typ ''{1}''. - -importerGEXF_error_attributecolumn_exist=Vlastnost s id ''{0}'' ji\u017e existuje, vlastnost je ignorov\u00e1na - -importerGEXF_error_attributetype1=Typ vlastnosti pro vlastnost ''{0}'' nenalezen. Nastaevno na v\u00fdchoz\u00ed \u0159et\u011bzec. - -importerGEXF_error_attributetype2=Typ vlastnosti ''{0}'' nen\u00ed rozpozn\u00e1n. Vlastnost je ignorov\u00e1na. - -importerGEXF_error_datakey=Kl\u00ed\u010d dat (vlastnost ''for'') chyb\u00ed v prvku id\={0} - -importerGEXF_error_datakey1=Kl\u00ed\u010d dat (vlastnost ''id') chyb\u00ed v prvku id\={0} - -importerGEXF_error_dataoptionsvalue=Hodnota dat ''{0}'' nen\u00ed p\u0159\u00edpustn\u00e1 pro prvek id\={1}. Tato hodnota nem\u016f\u017ee b\u00fdt nastavena jako vlastnost ''{2}''. - -importerGEXF_error_datavalue=Chyba typu datov\u00e9 hodnoty ''{0}'' v prvku {1}. Hodnota nem\u016f\u017ee b\u00fdt nastavena jako vlastnost ''{2}''. - -importerGEXF_error_defaultedgetype=V\u00fdchoz\u00ed typ hrany ''{0}'' nen\u00ed rozpozn\u00e1n. Nastaven na v\u00fdchoz\u00ed ''mixed''. - -importerGEXF_error_edgedouble=Typ hrany ''double'' nen\u00ed v sou\u010dasnosti podporov\u00e1n. Nastaven na v\u00fdchoz\u00ed ''mixed''. - -importerGEXF_error_edgetype=Typ ''{0}'' hrany ''{1}'' nen\u00ed rozpozn\u00e1n. Nastaveno na v\u00fdchoz\u00ed hodnotu. - -importerGEXF_error_edgeid=Id hrany chyb\u00ed. Id bylo vytvo\u0159eno. - -importerGEXF_error_edgesource=Zdroj hrany chyb\u00ed. Hrana je ignorov\u00e1na. - -importerGEXF_error_edgetarget=C\u00edl hrany chyb\u00ed. Hrana je ignorov\u00e1na. - -importerGEXF_error_edgeweight=V\u00e1ha hrany s id ''{0}'' nen\u00ed desetinn\u00e1. V\u00e1ha je ignorov\u00e1na. - -importerGEXF_error_nodeid=Id uzlu chyb\u00ed. Uzel je ignorov\u00e1n. - -importerGEXF_error_nodeposition=Uzel ''{0}'' m\u00e1 \u0161patn\u00e9 um\u00edst\u011bn\u00ed ve ''{1}'' (nen\u00ed desetinn\u00e9). - -importerGEXF_error_nodesize=Uzel ''{0}'' m\u00e1 \u0161patnou velikost (nen\u00ed desetinn\u00e1). - -importerGEXF_error_notnode=Prvek ''{0}'' nen\u00ed uzel. Prvek je ignorov\u00e1n. - -importerGEXF_error_pid_notfound=Nad\u0159azen\u00fd pid ''{0}'' nemohlo b\u00fdt pro uzel ''{1}'' nalezeno. - -importerGEXF_error_parsingdatetype=Datov\u00fd typ ''{0}'' nerozpozn\u00e1n. Nastaven na v\u00fdchoz\u00ed ''date''. - -importerGEXF_error_parsingmode=Re\u017eim zpracov\u00e1n\u00ed ''{0}'' nen\u00ed rozpozn\u00e1n. Nastaven na v\u00fdchoz\u00ed ''static''. - -importerGEXF_error_node_timeinterval_parseerror=\u010casov\u00fd interval pro uzel ''{0}'' nemohl b\u00fdt zpracov\u00e1n. Pou\u017eijte form\u00e1tov\u00e1n\u00ed csd\:date, xsd\:dateTime nebo Double. - -importerGEXF_error_edge_timeinterval_parseerror=\u010casov\u00fd interval pro hranu ''{0}'' nemohl b\u00fdt zpracov\u00e1n. Pou\u017eijte form\u00e1tov\u00e1n\u00ed csd\:date, xsd\:dateTime nebo Double. - -importerGEXF_error_nodeattribute_timeinterval_parseerror=\u010casov\u00fd interval pro vlastnost uzlu ''{0}'' nemohl b\u00fdt zpracov\u00e1n. Pou\u017eijte form\u00e1tov\u00e1n\u00ed xsd\:date, xsd\:dateTime nebo Double. - -importerGEXF_error_edgeattribute_timeinterval_parseerror=\u010casov\u00fd interval pro vlastnost hrany ''{0}'' nemohl b\u00fdt zpracov\u00e1n. Pou\u017eijte form\u00e1tov\u00e1n\u00ed xsd\:date, xsd\:dateTime nebo Double. - -importerGEXF_error_nodecolorvalue=Uzel s id ''{1}'' m\u00e1 \u0161patn\u00fd barevn\u00fd kan\u00e1l ''{2}''\=''{0}''. M\u011bl by b\u00fdt 0 < ''{2}'' < 255. - -importerGEXF_error_edgecolorvalue=Hrana s id ''{1}'' m\u00e1 \u0161patn\u00fd barevn\u00fd kan\u00e1l ''{2}''\=''{0}''. M\u011bl by b\u00fdt 0 < ''{2}'' < 255. - -importerGEXF_error_nodeopacityvalue=Uzel s id ''{1}'' m\u00e1 \u0161patnou nepr\u016fhlednost a\=''{0}''. M\u011bla by b\u00fdt 0.0 < a < 1.0. - -importerGEXF_error_edgeopacityvalue=Hrana s id ''{1}'' m\u00e1 \u0161patnou nepr\u016fhlednost a\=''{0}''. M\u011bla by b\u00fdt 0.0 < a < 1.0. - -importerGEXF_log_edgeeproperty=Nalezena vlastnost hrany\: {0} - -importerGEXF_log_nodeproperty=Nalezena vlastnost uzlu\: {0} - -importerGEXF_log_edgeattribute=Nalezena vlastnost hrany ''{0}'' ({1}) - -importerGEXF_log_nodeattribute=Nalezena vlastnost uzlu ''{0}'' ({1}) - -importerGEXF_log_default=Nalezena v\u00fdchoz\u00ed hodnota vlastnosti\: ''{0}'' ({1}) - -importerGEXF_log_options=Nalezeny mo\u017enosti vlastnosti\: ''{0}'' ({1}) - -importerGEXF_log_version10=GEXF verze 1.0 (zastaral\u00e9) - -importerGEXF_log_version11=GEXF verze 1.1 (zastaral\u00e9) - -importerGEXF_log_version12=GEXF verze 1.2 - -importerGEXF_log_version13=GEXF verze 1.3 - -importerGEXF_log_version_undef=Neur\u010dena verze GEXF. Je pou\u017eit analyz\u00e1tor verze 1.3. - -importerGEXF_log_dynamic_weight=Nalezen sloupec dynamick\u00e9 v\u00e1hy - -importerDL_error_firstline=Prvn\u00ed \u0159\u00e1dek souboru DL mus\u00ed za\u010d\u00ednat 'DL' - -importerDL_error_unknowntag=Nezn\u00e1m\u00e1 zna\u010dka hlavi\u010dky ''{0}'' - -importerDL_error_formatmissing=Zna\u010dka DL 'format' chyb\u00ed. Je pou\u017eito standardn\u00ed 'fullmatrix' - -importerDL_error_badformat=Form\u00e1t ''{0}'' nen\u00ed podporov\u00e1n, zadejte pouze form\u00e1ty 'format\=edgelist1' nebo 'format\=fullmatrix' - -importerDL_error_nmissing=Hlavi\u010dka souboru DL mus\u00ed obsahovat zna\u010dku 'n \= ' - -importerDL_error_mmissing=Hlavi\u010dka souboru DL mus\u00ed obsahovat zna\u010dku 'm \= ' - -importerDL_error_labelscount=Po\u010det \u0161t\u00edtk\u016f ({0}) sde li\u0161\u00ed od zna\u010dky n ({1}) - -importerDL_error_nodata=\u017d\u00e1dn\u00fd datov\u00fd \u0159\u00e1dek nebyl nalezen - -importerDL_error_matrixrowscount=Po\u010det \u0159\u00e1dku matice ({0}) je v\u011bt\u0161\u00ed ne\u017e zna\u010dka n ({1}) - -importerDL_error_matrixrowscount2=Po\u010det \u0159\u00e1dku matice ({0}) je men\u0161\u00ed ne\u017e zna\u010dka n ({1}) - -importerDL_error_matriciescount=Po\u010det maticov\u00fdch sad ({0}) se li\u0161\u00ed od zna\u010dky nm ({1}) - -importerDL_error_matrixentriescount=Po\u010det prvk\u016f matice na \u0159\u00e1dku {0} v matici {1} je v\u011bt\u0161\u00ed ne\u017e dovoleno (\u0159\u00e1dek {2} v souboru DL) - -importerDL_error_weightparseerror=Nelze zpracovat v\u00e1hu ''{0}'' v matici {1} na \u0159\u00e1dku {2} - -importerDL_error_edgelistssetscount=Po\u010det sad hran ({0}) se li\u0161\u00ed od zna\u010dky nm ({1}) - -importerDL_error_edgelistrowparse=Nelze zpracovat z id ''{0}'' na \u0159\u00e1dku {1} v seznamu hran - -importerDL_error_edgeparseweight=Nelze zpracovat v\u00e1hu ''{0}'' na \u0159\u00e1dku {1} v seznamu hran - -importerDOT_error_nothingfound=Nebyl nalezen \u017e\u00e1dn\u00fd 'graph' nebo 'digraph' - -importerDOT_error_labelunreachable=Nelze naj\u00edt \u0161t\u00edtek na \u0159\u00e1dku {0} - -importerDOT_error_colorunreachable=Nelze naj\u00edt barvu na \u0159\u00e1dku {0} - -importerDOT_error_edgeparsing=Nelze zpracovat hranu na \u0159\u00e1dku {0} - -importerDOT_error_posunreachable=Nelze zpracovat um\u00edst\u011bn\u00ed uzulu na \u0159\u00e1dku {0}. Mus\u00ed b\u00fdt pos\=''x, y''. - -importerDOT_error_weightunreachable=Nelze zpracovat v\u00e1hu\u00a8hrany na \u0159\u00e1dku {0} - -importerDOT_log_nodeattribute=Nalezena vlastnost uzlu ''{0}'' ({1}) +fileType_GDF_Name = Soubory GDF (GUESS) +fileType_GEXF_Name = Soubory GEXF +fileType_NET_Name = Soubory NET (Pajek) +fileType_GraphML_Name = Soubory GraphML +fileType_GML_Name = Soubory GML +fileType_TLP_Name = Soubory TLP +fileType_TGF_Name = Soubory TGF +fileType_Edges_Name = Seznam hran +fileType_GraphViz_Name = Soubory GraphViz +fileType_DL_Name = Soubory DL (UCINET) +fileType_VNA_Name=Soubory VNA + +importerGDF_error_dataformat1 = Soubor musν za\u010dνnat \u0159αdkem "nodedef> name" +importerGDF_error_dataformat2 = \u0160patnι formαtovαnν sloupce. Ka\u017edύ sloupce musν alespo\u0148 obsahovat nαzev. Nαzvy sloupc\u016f nesmν obsahovat \u017eαdnou \u010dαrku. +importerGDF_error_dataformat3 = Nelze importovat sloupce ''{0}'' pro uzel ''{1}''. Chyba v hodnot\u011b ''{2}''. +importerGDF_error_dataformat4 = Nelze nastavit ''{0}'' vlastnosti ''{1}'' pro {2}. +importerGDF_error_dataformat5 = Datovύ typ ''{0}'' nenν rozeznαn, mνsto toho je pou\u017eit \u0159et\u011bzec. +importerGDF_error_dataformat6 = Typ sloupce nebyl v ''{0}'' nalezen, mνsto toho je pou\u017eit \u0159et\u011bzec. +importerGDF_error_dataformat7 = \u0158αdek ''{0}'' mα vνce sloupc\u016f, ne\u017e je ur\u010deno v hlavi\u010dce. Ov\u011b\u0159te, prosνm, po\u010det \u010dαrek. +importerGDF_error_dataformat8 = Sloupec uzlu ''{0}'' nem\u016f\u017ee bύt p\u0159idαn, proto\u017ee ji\u017e existuje +importerGDF_error_dataformat9 = Sloupec hrany ''{0}'' nem\u016f\u017ee bύt p\u0159idαn, proto\u017ee ji\u017e existuje + +importerTPL_error_dataformat1 = \u0160patnι formαtovαnν hrany na \u0159αdku {0}. + +importerNET_error_dataformat1 = Soubor musν za\u010dνnat \u0159αdkem "*vertices". +importerNET_error_dataformat2 = \u0158αdek {0} se zdα bύt prαzdnύ +importerNET_error_dataformat3 = Nepαrovι (nebo p\u0159νli\u0161 mnoho) uvozovky na \u0159αdku {0} +importerNET_error_dataformat4 = Vertex \u010dνslo ''{0}'' nenν v rozsahu [1,{1}] +importerNET_error_dataformat5 = Problιm s p\u0159evodem sou\u0159adnic vertexu na \u0159αdku {0}. Musν bύt desetinnι \u010dνslo. +importerNET_error_dataformat6 = Problιm s p\u0159evodem velikosti vertexu na \u0159αdku {0}. Musν bύt desetinnι \u010dνslo. +importerNET_error_dataformat7 = Problιm se zpracovαnνm vαhy hrany na \u0159αdku {0}. Musν bύt desetinnι \u010dνslo. + +importerGraphML_error_syntax1 = Syntaktickα chyba, souboru musν za\u010dνnat se zna\u010dkou . +importerGraphML_error_syntax2 = Syntaktickα chyba, uzel ''{0}'' musν bύt umνst\u011bn ve zna\u010dce . +importerGraphML_error_attributeclass = T\u0159νda vlastnosti nebyla nalezena nebo neznαmα pro vlastnost "{0}". Vlastnost je ignorovαna. +importerGraphML_error_attributefor = Vlastnost ''for'' nebyla nalezena nebo neznαmα pro vlastnost ''{0}''. Vlastnost je ignorovαna. +importerGraphML_error_attributetype1 = Typ vlastnosti nebyl nalezen pro vlastnost ''{0}''. Nastaveno na vύchozν \u0159et\u011bzec. +importerGraphML_error_attributetype2 = Typ vlastnosti pro ''{0}'' nebyl rozpoznαn. Vlastnost je ignorovαna. +importerGraphML_error_attributedefault = Vύchozν hodnota vlastnosti ''{0}'' nem\u016f\u017ee bύt odevzdαna typu ''{1}''. +importerGraphML_error_attributecolumn_exist = Vlastnost s id ''{0}'' ji\u017e existuje, vlastnost je ignorovαna +importerGraphML_error_attributeempty = Chyba zpracovαnν vlastnosti, id chybν. +importerGraphML_log_nodeproperty = Vlastnost uzlu nalezena: {0} +importerGraphML_log_edgeproperty = Vlastnost hrany nalezena: {0} +importerGraphML_log_nodeattribute = Vlastnost uzlu nalezena ''{0}'' ({1}) +importerGraphML_log_edgeattribute = Vlastnost hrany nalezena ''{0}'' ({1}) +importerGraphML_log_default = Vύchozν hodnota vlastnosti nalezena: ''{0}'' ({1}) +importerGraphML_error_datakey = Chybν datovύ klν\u010d pro prvek id={0} +importerGraphML_error_datavalue = Chyba typu datovι hodnoty {0} pro prvek id={1}. Tato hodnota nem\u016f\u017ee bύt nastavena jako vlastnost ''{2}''. +importerGraphML_error_nodeid = Id uzlu chybν. Uzel je ignorovαn. +importerGraphML_error_defaultedgetype = Vύchozν typ hrany ''{0}'' nenν rozpoznαn. Nastaveno na vύchozν ''mixed''. +importerGraphML_error_edgetype = Typ ''{0}'' hrany ''{1}'' nenν rozpoznαn. Nastaveno na vύchozν hodnotu. + +importerGML_error_nodeidmissing = Id uzlu chybν +importerGML_error_directedgraphparse = Neo\u010dekαvanα hodnota pro vlastnost '\u0159νzenou' grafem +importerGML_error_directedparse = Neo\u010dekαvanα hodnota pro vlastnost '\u0159νzenou' grafem pro hranu "{0}" +importerGML_error_badparsing = Neplatnι zpracovαnν GML + +importerTPL_error_badparsing = Neplatnι zpracovαnν TPL + +importerGEXF_error_attributeclass = Vlastnost ''class'' nenalezena nebo neznαmα pro vlastnost ''{0}''. Vlastnost je ignorovαna. +importerGEXF_error_attributeempty = Chyba zpracovαnν vlastnosti, chybν id nebo typ. +importerGEXF_error_attributedefault = Vύchozν hodnota vlastnosti ''{0}'' nem\u016f\u017ee bύt p\u0159etypovαna na typ ''{1}''. +importerGEXF_error_attributeoptions = Hodnoty mo\u017enosti ve vlastnosti ''{0}'' nem\u016f\u017eou bύt p\u0159etypovαny na typ ''{1}''. +importerGEXF_error_attributecolumn_exist = Vlastnost s id ''{0}'' ji\u017e existuje, vlastnost je ignorovαna +importerGEXF_error_attributetype1 = Typ vlastnosti pro vlastnost ''{0}'' nenalezen. Nastaevno na vύchozν \u0159et\u011bzec. +importerGEXF_error_attributetype2 = Typ vlastnosti ''{0}'' nenν rozpoznαn. Vlastnost je ignorovαna. +importerGEXF_error_datakey = Klν\u010d dat (vlastnost ''for'') chybν v prvku id={0} +importerGEXF_error_datakey1 = Klν\u010d dat (vlastnost ''id') chybν v prvku id={0} +importerGEXF_error_dataoptionsvalue = Hodnota dat ''{0}'' nenν p\u0159νpustnα pro prvek id={1}. Tato hodnota nem\u016f\u017ee bύt nastavena jako vlastnost ''{2}''. +importerGEXF_error_datavalue = Chyba typu datovι hodnoty ''{0}'' v prvku {1}. Hodnota nem\u016f\u017ee bύt nastavena jako vlastnost ''{2}''. +importerGEXF_error_idtype_error = Typ id ''{0}'' nenν rozeznαn, pou\u017eijte 'integer', 'long' nebo 'string' +importerGEXF_error_defaultedgetype = Vύchozν typ hrany ''{0}'' nenν rozpoznαn. Nastaven na vύchozν ''mixed''. +importerGEXF_error_edgedouble = Typ hrany ''double'' nenν v sou\u010dasnosti podporovαn. Nastaven na vύchozν ''mixed''. +importerGEXF_error_edgetype = Typ ''{0}'' hrany ''{1}'' nenν rozpoznαn. Nastaveno na vύchozν hodnotu. +importerGEXF_error_edgeid = Id hrany chybν. Id bylo vytvo\u0159eno. +importerGEXF_error_edgesource = Zdroj hrany chybν. Hrana je ignorovαna. +importerGEXF_error_edgetarget = Cνl hrany chybν. Hrana je ignorovαna. +importerGEXF_error_edgeweight = Vαha hrany s id ''{0}'' nenν desetinnα. Vαha je ignorovαna. +importerGEXF_error_nodeid = Id uzlu chybν. Uzel je ignorovαn. +importerGEXF_error_nodeposition = Uzel ''{0}'' mα \u0161patnι umνst\u011bnν ve ''{1}'' (nenν desetinnι). +importerGEXF_error_nodesize = Uzel ''{0}'' mα \u0161patnou velikost (nenν desetinnα). +importerGEXF_error_notnode = Prvek ''{0}'' nenν uzel. Prvek je ignorovαn. +importerGEXF_error_parsingdatetype = Datovύ typ ''{0}'' nerozpoznαn. Nastaven na vύchozν ''date''. +importerGEXF_error_parsingmode = Re\u017eim zpracovαnν ''{0}'' nenν rozpoznαn. Nastaven na vύchozν ''static''. +importerGEXF_error_node_timeinterval_parseerror = \u010casovύ interval pro uzel ''{0}'' nemohl bύt zpracovαn. Pou\u017eijte formαtovαnν csd:date, xsd:dateTime nebo Double. +importerGEXF_error_edge_timeinterval_parseerror = \u010casovύ interval pro hranu ''{0}'' nemohl bύt zpracovαn. Pou\u017eijte formαtovαnν csd:date, xsd:dateTime nebo Double. +importerGEXF_error_node_timeintervals_parseerror = \u010casovι intervaly pro uzel ''{0}'' nemohly bύt zpracovαny. Pou\u017eijte formαtovαnν xsd:date, xsd:dateTime nebo Double. +importerGEXF_error_edge_timeintervals_parseerror = \u010casovι intervaly pro hranu ''{0}'' nemohly bύt zpracovαny. Pou\u017eijte formαtovαnν xsd:date, xsd:dateTime nebo Double. +importerGEXF_error_nodeattribute_timeinterval_parseerror = \u010casovύ interval pro vlastnost uzlu ''{0}'' nemohl bύt zpracovαn. Pou\u017eijte formαtovαnν xsd:date, xsd:dateTime nebo Double. +importerGEXF_error_edgeattribute_timeinterval_parseerror = \u010casovύ interval pro vlastnost hrany ''{0}'' nemohl bύt zpracovαn. Pou\u017eijte formαtovαnν xsd:date, xsd:dateTime nebo Double. +importerGEXF_error_node_timestamp_parseerror = \u010casovι razνtko pro uzel ''{0}'' nemohlo bύt zpracovαno. Pou\u017eijte formαtovαnν xsd:date, xsd:dateTime nebo Double. +importerGEXF_error_edge_timestamp_parseerror = \u010casovι razνtko pro hranu ''{0}'' nemohlo bύt zpracovαno. Pou\u017eijte formαtovαnν xsd:date, xsd:dateTime nebo Double. +importerGEXF_error_node_timestamps_parseerror = \u010casovι razνtko pro uzel ''{0}'' nemohlo bύt zpracovαno. +importerGEXF_error_edge_timestamps_parseerror = \u010casovι razνtko pro hranu ''{0}'' nemohlo bύt zpracovαno. +importerGEXF_error_nodeattribute_timestamp_parseerror = \u010casovι razνtko pro vlastnost uzlu ''{0}'' nemohlo bύt zpracovαno. Pou\u017eijte formαtovαnν xsd:date, xsd:dateTime nebo Double. +importerGEXF_error_edgeattribute_timestamp_parseerror = \u010casovι razνtko pro vlastnost hrany ''{0}'' nemohlo bύt zpracovαno. Pou\u017eijte formαtovαnν xsd:date, xsd:dateTime nebo Double. +importerGEXF_error_nodeattribute_timeset_parseerror = \u010casovα razνtka nebo intervaly pro vlastnost uzlu ''{0}'' nemohly bύt zpracovαny. +importerGEXF_error_edgeattribute_timeset_parseerror = \u010casovα razνtka nebo intervaly pro vlastnost hrany ''{0}'' nemohly bύt zpracovαny. +importerGEXF_error_nodecolorvalue = Uzel s id ''{1}'' mα \u0161patnύ barevnύ kanαl ''{2}''=''{0}''. M\u011bl by bύt 0 < ''{2}'' < 255. +importerGEXF_error_edgecolorvalue = Hrana s id ''{1}'' mα \u0161patnύ barevnύ kanαl ''{2}''=''{0}''. M\u011bl by bύt 0 < ''{2}'' < 255. +importerGEXF_error_nodeopacityvalue = Uzel s id ''{1}'' mα \u0161patnou nepr\u016fhlednost a=''{0}''. M\u011bla by bύt 0.0 < a < 1.0. +importerGEXF_error_edgeopacityvalue = Hrana s id ''{1}'' mα \u0161patnou nepr\u016fhlednost a=''{0}''. M\u011bla by bύt 0.0 < a < 1.0. +importerGEXF_error_node_open_interval = Uzel s id "{0}" pou\u017eνvα otev\u0159enι intervaly, kterι jsou zastaralι. +importerGEXF_error_edge_open_interval = Hrana s id "{0}" pou\u017eνvα otev\u0159enι intervaly, kterι jsou zastaralι. +importerGEXF_error_slice_bound_missing = V chybν vlastnost \u010dasovι razνtko nebo interval +importerGEXF_error_pid = Uzel s id ''{0}'' ur\u010duje nad\u0159azenιho pomocν pid. Podpora hierarchickιho grafu je zastaralα a bude ignorovαna. +importerGEXF_error_timezone_parseerror = \u010casovι pαsmo ''{0}'' nebylo rozeznαno +importerGEXF_error_timerepresentation_intervalerror = Znαzorn\u011bnν \u010dasu je nastaveno na 'timestamp' a proto nelze intervaly pou\u017eνt. Nastavte znαzorn\u011bnν v na 'interval'. +importerGEXF_error_timerepresentation_timestamperror = Znαzorn\u011bnν \u010dasu je nastaveno na 'interval' a proto nelze \u010dasovα razνtka pou\u017eνt. Nastavte znαzorn\u011bnν v na 'timestamp'. +importerGEXF_log_edgeeproperty = Nalezena vlastnost hrany: {0} +importerGEXF_log_nodeproperty = Nalezena vlastnost uzlu: {0} +importerGEXF_log_edgeattribute = Nalezena vlastnost hrany ''{0}'' ({1}) +importerGEXF_log_nodeattribute = Nalezena vlastnost uzlu ''{0}'' ({1}) +importerGEXF_log_default = Nalezena vύchozν hodnota vlastnosti: ''{0}'' ({1}) +importerGEXF_log_options = Nalezeny mo\u017enosti vlastnosti: ''{0}'' ({1}) +importerGEXF_log_version10 = GEXF verze 1.0 (zastaralι) +importerGEXF_log_version11 = GEXF verze 1.1 (zastaralι) +importerGEXF_log_version12 = GEXF verze 1.2 +importerGEXF_log_version13 = GEXF verze 1.3 +importerGEXF_log_version_undef = Neur\u010dena verze GEXF. Je pou\u017eit analyzαtor verze 1.3. +importerGEXF_log_dynamic_weight = Nalezen sloupec dynamickι vαhy + +importerDL_error_firstline = Prvnν \u0159αdek souboru DL musν za\u010dνnat 'DL' +importerDL_error_unknowntag = Neznαmα zna\u010dka hlavi\u010dky ''{0}'' +importerDL_error_formatmissing = Zna\u010dka DL 'format' chybν. Je pou\u017eito standardnν 'fullmatrix' +importerDL_error_badformat = Formαt ''{0}'' nenν podporovαn, zadejte pouze formαty 'format=edgelist1' nebo 'format=fullmatrix' +importerDL_error_nmissing = Hlavi\u010dka souboru DL musν obsahovat zna\u010dku 'n = ' +importerDL_error_mmissing = Hlavi\u010dka souboru DL musν obsahovat zna\u010dku 'm = ' +importerDL_error_labelscount = Po\u010det jmenovek ({0}) se li\u0161ν od zna\u010dky n ({1}) +importerDL_error_nodata = \u017dαdnύ datovύ \u0159αdek nebyl nalezen +importerDL_error_matrixrowscount = Po\u010det \u0159αdku matice ({0}) je v\u011bt\u0161ν ne\u017e zna\u010dka n ({1}) +importerDL_error_matrixrowscount2 = Po\u010det \u0159αdku matice ({0}) je men\u0161ν ne\u017e zna\u010dka n ({1}) +importerDL_error_matriciescount = Po\u010det maticovύch sad ({0}) se li\u0161ν od zna\u010dky nm ({1}) +importerDL_error_matrixentriescount = Po\u010det prvk\u016f matice na \u0159αdku {0} v matici {1} je v\u011bt\u0161ν ne\u017e dovoleno (\u0159αdek {2} v souboru DL) +importerDL_error_weightparseerror = Nelze zpracovat vαhu ''{0}'' v matici {1} na \u0159αdku {2} +importerDL_error_edgelistssetscount = Po\u010det sad hran ({0}) se li\u0161ν od zna\u010dky nm ({1}) +importerDL_error_edgelistrowparse = Nelze zpracovat z id ''{0}'' na \u0159αdku {1} v seznamu hran +importerDL_error_edgeparseweight = Nelze zpracovat vαhu ''{0}'' na \u0159αdku {1} v seznamu hran + +importerDOT_error_nothingfound = Nebyl nalezen \u017eαdnύ 'graph' nebo 'digraph' +importerDOT_error_labelunreachable = Nelze najνt jmenovku na \u0159αdku {0} +importerDOT_error_colorunreachable = Nelze najνt barvu na \u0159αdku {0} +importerDOT_error_posunreachable = Nelze zpracovat umνst\u011bnν uzulu na \u0159αdku {0}. Musν bύt pos=''x, y''. +importerDOT_error_weightunreachable = Nelze zpracovat vαhu¨hrany na \u0159αdku {0} + +importerTGF_error_emptynodes = Nenalezeny \u017eαdnι uzly diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_de.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_de.properties new file mode 100644 index 0000000000..330d40f1dd --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_de.properties @@ -0,0 +1,146 @@ +fileType_GDF_Name = GDF Dateien (GUESS) +fileType_GEXF_Name = GEXF Dateien +fileType_NET_Name = NET Dateien (Pajek) +fileType_GraphML_Name = GraphML Dateien +fileType_GML_Name = GML Dateien +fileType_TLP_Name = TLP Dateien +fileType_TGF_Name = TGF Dateien +fileType_Edges_Name = Kantenliste +fileType_GraphViz_Name = GraphViz Dateien +fileType_DL_Name = DL Dateien (UCINET) +fileType_VNA_Name=VNA Dateien + +importerGDF_error_dataformat1 = Die Datei muss mit Zeile "nodedef> name" beginnen. +importerGDF_error_dataformat2 = Fehlerhafte Spalten-Formatierung. Jede Spalte muss mindestens einen Namen beinhalten. Spalten Namen dόrfen kein Komma enthalten. +importerGDF_error_dataformat3 = Konnte Spalte "{0}" fόr Knoten "{1}" nicht importieren. Fehler bei Wert "{2}". +importerGDF_error_dataformat4 = Konnte Attribut "{0}" nicht "{1}" setzen fόr {2}. +importerGDF_error_dataformat5 = Der Datentype "{0}" wurde nicht erkannt. Verwende String stattdessen. +importerGDF_error_dataformat6 = Spaltentyp nicht gefunden fόr "{0}". Verwende String stattdessen. +importerGDF_error_dataformat7 = Zele "{0}" hat mehr Spalten als im Dateikopf definiert. Bitte prόfen Sie die Anzahl Kommas. +importerGDF_error_dataformat8 = Die Knotenspalte "{0}" kann nicht hinzugefόgt werden, da eine gleichnamige Spalte bereits existiert. +importerGDF_error_dataformat9 = Die Kantenspalte "{0}" kann nicht hinzugefόgt werden, da eine gleichnamige Spalte bereits existiert. + +importerTPL_error_dataformat1 = Fehlerhafte Formattierung in Zeile {0}. + +importerNET_error_dataformat1 = Die Datei muss mit der Zeile "vertices" beginnen. +importerNET_error_dataformat2 = Leere Zeile in Zeile {0} erkannt +importerNET_error_dataformat3 = Unausgewogen (oder zu viele) Anfόhrungszeichen in Zeile {0} +importerNET_error_dataformat4 = Vertex-Nummer "{0} nicht im Bereich [1,{1}] +importerNET_error_dataformat5 = Konvertierungsproblem fόr Vertex-Koordinaten in Zeile {0}. Muss eine Float-Zahl sein. +importerNET_error_dataformat6 = Konvertierungsproblem fόr Vertex-Grφίe in Zeile {0}. Muss eine Float-Zahl sein. +importerNET_error_dataformat7 = Parse-Problem fόr Kantengewicht in Zeile {0}. Muss eine Double-Zahl sein. + +importerGraphML_error_syntax1 = Syntaxfehler, die Datei muss mit -Auszeichnung beginnen. +importerGraphML_error_syntax2 = Syntaxfehler, Knoten "{0}" muss in -Auszeichnung geschachtelt sein. +importerGraphML_error_attributeclass = Attributtyp nicht gefunden oder unbekannt fόr Attribut "{0}". Das Attribut wird ignoriert. +importerGraphML_error_attributefor = Attribut "for" nicht gefunden oder unbekannt fόr Attribut "{0}". Das Attribut wird ignoriert. +importerGraphML_error_attributetype1 = Attributtyp nicht gefunden fόr Attribut "{0}". Auf Standard 'string' gesetzt. +importerGraphML_error_attributetype2 = Attributtyp fόr "{0}" nicht erkannt. Das Attribut wird ignoriert. +importerGraphML_error_attributedefault = Standardwert fόr Attribut "{0}" kann nicht zu Typ "{1}" gecasted werden. +importerGraphML_error_attributecolumn_exist = Attribut mit Id "{0}" existiert bereits. Das Attribut wird ignoriert. +importerGraphML_error_attributeempty = Attribut-Parse-Fehler, Id fehlt. +importerGraphML_log_nodeproperty = Knoteneigenschaft gefunden: {0} +importerGraphML_log_edgeproperty = Kanteneigenschaft gefunden: {0} +importerGraphML_log_nodeattribute = Knotenattribut gefunden "{0}" ({1}) +importerGraphML_log_edgeattribute = Kantenattribut gefunden "{0}" ({1}) +importerGraphML_log_default = Default Attributwert gefunden "{0}" ({1}) +importerGraphML_error_datakey = Data Schlόssel fehlt fόr Element mit id={0} +importerGraphML_error_datavalue = Data-Wert {0} Typ-Fehler fόr Element mit Id={1}. Der Wert kann nicht als "{2}" Attribut gesetzt werden. +importerGraphML_error_nodeid = Knoten-Id fehlt. Knoten wird ignoriert. +importerGraphML_error_defaultedgetype = Standard-Kanten-Typ "{0}" wurde nicht erkannt. Auf Standardwert 'mixed' gesetzt. +importerGraphML_error_edgetype = Typ "{0}" der Kante "{1}" wurde nicht erkannt. Er wird auf den Standardwert gesetzt. + +importerGML_error_nodeidmissing = Knoten-Id fehlt +importerGML_error_directedgraphparse = Unerwarteter Wert fόr die Graph 'directed' Eigenschaft +importerGML_error_directedparse = Unerwarteter Wert fόr die 'directed'-Eigenschaft der Kante "{0}" +importerGML_error_badparsing = Ungόltiges GML Parsing + +importerTPL_error_badparsing = Ungόltiges TPL Parsing + +importerGEXF_error_attributeclass = Attribut "class" nicht gefunden oder unbekannt fόr Attribut "{0}". Das Attribut wird ignoriert. +importerGEXF_error_attributeempty = Attribut-Parse-Fehler, Id oder Typ fehlt. +importerGEXF_error_attributedefault = Standardwert fόr Attribut "{0}" kann nicht zu Typ "{1}" gecasted werden. +importerGEXF_error_attributeoptions = Optionswert fόr Attribut "{0}" kann nicht zu Typ "{1}" gecastet werden. +importerGEXF_error_attributecolumn_exist = Attribut mit Id "{0}" existiert bereits. Das Attribut wird ignoriert. +importerGEXF_error_attributetype1 = Attributtyp nicht gefunden fόr Attribut "{0}". Auf Standard 'string' gesetzt. +importerGEXF_error_attributetype2 = Attributtyp fόr "{0}" nicht erkannt. Das Attribut wird ignoriert. +importerGEXF_error_datakey = Data-Schlόssel (Attribut "for") fehlt fόr Element mit Id={0} +importerGEXF_error_datakey1 = Data-Schlόssel (Attribut "id") fehlt fόr Element mit Id={0} +importerGEXF_error_dataoptionsvalue = Data-Wert "{0}" ist keine gόltige Option fόr Element mit Id={1}. Der Wert kann nicht als "{2}" Attribut gesetzt werden. +importerGEXF_error_datavalue = Data-Wert "{0}" Typ-Fehler fόr Element mit Id={1}. Der Wert kann nicht als "{2}" Attribut gesetzt werden. +importerGEXF_error_idtype_error = Der Id-Typ "{0}" wurde nicht erkannt, verwenden Sie 'integer', 'long' oder 'string' +importerGEXF_error_defaultedgetype = Standard-Kanten-Typ "{0}" wurde nicht erkannt. Auf Standardwert 'mixed' gesetzt. +importerGEXF_error_edgedouble = Kantentyp "double" wird aktuell nicht unterstόtzt. Auf Standard "mixed" gesetzt. +importerGEXF_error_edgetype = Typ "{0}" der Kante "{1}" wurde nicht erkannt. Er wird auf den Standardwert gesetzt. +importerGEXF_error_edgeid = Kanten-Id fehlt. Es wurde eine Id generiert. +importerGEXF_error_edgesource = Kanten-Quelle fehlt. Die Kante wird ignoriert. +importerGEXF_error_edgetarget = Kanten-Ziel fehlt. Die Kante wird ignoriert. +importerGEXF_error_edgeweight = Das Gewicht der Id "{0}" ist keine Flieίkommazahl. Gewicht wird ignoriert. +importerGEXF_error_nodeid = Knoten-Id fehlt. Knoten wird ignoriert. +importerGEXF_error_nodeposition = Knoten "{0}" hat falsche Position "{1}" (keine Flieίkommazahl). +importerGEXF_error_nodesize = Knoten "{0}" hat die falsche Grφίe (keine Flieίkommazahl). +importerGEXF_error_notnode = Element "{0}" ist kein Knoten. Das Element wird ignoriert. +importerGEXF_error_parsingdatetype = Datumstyp "{0}" wurde nicht erkannt. Wird stattdessen auf default "date" gesetzt. +importerGEXF_error_parsingmode = Parse-Modus "{0}" nicht erkannt. Auf Standardwert "static" gesetzt. +importerGEXF_error_node_timeinterval_parseerror = Das Zeitintervall fόr Knoten "{0}" konnte nicht geparst werden. Benutzen Sie xsd:date, xsd:dateTime oder Double-Formatierung. +importerGEXF_error_edge_timeinterval_parseerror = Das Zeitintervall fόr Kante "{0}" konnte nicht geparst werden. Benutzen Sie xsd:date, xsd:dateTime oder Double-Formatierung. +importerGEXF_error_node_timeintervals_parseerror = Die Zeitintervalle fόr Knoten "{0}" konnten nicht geparst werden. Benutzen Sie xsd:date, xsd:dateTime oder Double-Formatierung. +importerGEXF_error_edge_timeintervals_parseerror = Die Zeitintervalle fόr Kante "{0}" konnten nicht geparst werden. Benutzen Sie xsd:date, xsd:dateTime oder Double-Formatierung. +importerGEXF_error_nodeattribute_timeinterval_parseerror = Das Zeitintervall fόr Knoten "{0}" Attribut konnte nicht geparst werden. Benutzen Sie xsd:date, xsd:dateTime oder Double-Formatierung. +importerGEXF_error_edgeattribute_timeinterval_parseerror = Das Zeitintervall fόr Kanten "{0}" Attribut konnte nicht geparst werden. Benutzen Sie xsd:date, xsd:dateTime oder Double-Formatierung. +importerGEXF_error_node_timestamp_parseerror = Der Zeitstempel fόr Knoten "{0}" konnte nicht geparst werden. Benutzen Sie xsd:date, xsd:dateTime oder Double-Formatierung. +importerGEXF_error_edge_timestamp_parseerror = Der Zeitstempel fόr Kante "{0}" konnte nicht geparst werden. Benutzen Sie xsd:date, xsd:dateTime oder Double-Formatierung. +importerGEXF_error_node_timestamps_parseerror = Die Zeitstempel fόr Knoten "{0}" konnten nicht geparst werden. +importerGEXF_error_edge_timestamps_parseerror = Die Zeitstempel fόr Kante "{0}" konnten nicht geparst werden. +importerGEXF_error_nodeattribute_timestamp_parseerror = Der Zeitstempel fόr Knoten "{0}" Attribut konnte nicht geparst werden. Benutzen Sie xsd:date, xsd:dateTime oder Double-Formatierung. +importerGEXF_error_edgeattribute_timestamp_parseerror = Der Zeitstempel fόr Kante "{0}" konnte nicht geparst werden. Benutzen Sie xsd:date, xsd:dateTime oder Double-Formatierung. +importerGEXF_error_nodeattribute_timeset_parseerror = Die Zeitstempel oder -Intervalle fόr Knoten "{0}" konnte nicht geparst werden. +importerGEXF_error_edgeattribute_timeset_parseerror = Die Zeitstempel oder -Intervalle fόr Kante "{0}" konnten nicht geparst werden. +importerGEXF_error_nodecolorvalue = Knoten mit Id "{1}" hat falschen Farbkanal "{2}"="{0}". Er sollte 0 <= "{2}" <= 255 sein. +importerGEXF_error_edgecolorvalue = Kante mit Id "{1}" hat falschen Farbkanal "{2}"="{0}". Er sollte 0 <= "{2}" <= 255 sein. +importerGEXF_error_nodeopacityvalue = Knoten mit Id "{1}" hat falschen Wert fόr Deckkraft a="{0}". Er sollte 0.0 <= a <= 1.0 sein. +importerGEXF_error_edgeopacityvalue = Kante mit Id "{1}" hat falschen Wert fόr Deckkraft a="{0}". Er sollte 0.0 <= a <= 1.0 sein. +importerGEXF_error_node_open_interval = Knoten mit Id "{0}" nutzt offene Intervalle, deren Unterstόtzung abgekόndigt ist. +importerGEXF_error_edge_open_interval = Kanten mit Id "{0}" nutzt offene Intervalle, deren Unterstόtzung abgekόndigt ist. +importerGEXF_error_slice_bound_missing = Fehlendes Zeitstempel- oder -Intervall-Attribute fόr +importerGEXF_error_pid = Der Knoten mit Id "{0}" definiert einen Elternknoten mittels pid. Unterstόtzung fόr hierarchische Graphen wurde abgekόndigt, Angabe wird ignoriert. +importerGEXF_error_timezone_parseerror = Die Zeitzone "{0}" wurde nicht erkannt. +importerGEXF_error_timerepresentation_intervalerror = Das Zeit-Angabe ist festgelegt als 'timestamp', weshalb keine Intervalle verwendet werden kφnnen. Setzen Sie die Zeit-Angabe auf 'interval' im Element . +importerGEXF_error_timerepresentation_timestamperror = Das Zeit-Angabe ist festgelegt als 'interval', weshalb keine Zeitstempel verwendet werden kφnnen. Setzen Sie die Zeit-Angabe auf 'timestamp' im Element . +importerGEXF_log_edgeeproperty = Kanteneigenschaft gefunden: {0} +importerGEXF_log_nodeproperty = Knoteneigenschaft gefunden: {0} +importerGEXF_log_edgeattribute = Kantenattribut gefunden "{0}" ({1}) +importerGEXF_log_nodeattribute = Knotenattribut gefunden "{0}" ({1}) +importerGEXF_log_default = Default Attributwert gefunden "{0}" ({1}) +importerGEXF_log_options = Attribut-Optionen gefunden "{0}" ({1}) +importerGEXF_log_version10 = GEXF Version 1.0 (abgekόndigt) +importerGEXF_log_version11 = GEXF Version 1.1 (abgekόndigt) +importerGEXF_log_version12 = GEXF Version 1.2 (abgekόndigt) +importerGEXF_log_version13 = GEXF Version 1.3 +importerGEXF_log_version_undef = Undefinierte GEXF Version. Parser 1.3 wird verwendet. +importerGEXF_log_dynamic_weight = Dynmisches Gewicht-Spalte gefunden + +importerDL_error_firstline = Erste Zeile einer DL-Datein muss mit 'DL' beginnen +importerDL_error_unknowntag = Header unbekanntes Tag "{0}" +importerDL_error_formatmissing = DL 'format'-Tag fehlt, 'fullmatrix' wird als Standardwert genutzt +importerDL_error_badformat = Format "{0}" nicht unterstόtzt, stellen Sie die Daten im Format 'format=edgelist1' oder 'format=fullmatrix' bereit +importerDL_error_nmissing = Header der DL-Datei muss Tag 'n = ' enthalten +importerDL_error_mmissing = Header der DL-Datei muss Tag 'm = ' enthalten +importerDL_error_labelscount = Anzahl Beschriftungen ({0}) unterscheidet sich von Tag n ({1}) +importerDL_error_nodata = Keine Datenzeile gefunden +importerDL_error_matrixrowscount = Anzahl Matrixzeilen ({0}) ist grφίer als n Tag ({1}) +importerDL_error_matrixrowscount2 = Anzahl Matrixzeilen ({0}) ist kleiner als n Tag ({1}) +importerDL_error_matriciescount = Anzahl Matrix-Mengen ({0}) unterscheidet sich von nm Tag ({1}) +importerDL_error_matrixentriescount = Anzahl Matrix-Eintrδge in Zeile {0} von Matrix {1} hat mehr Eintrδge als zulδssig (Zeile {2} der DL-Datei) +importerDL_error_weightparseerror = Kann Gewicht "{0}" in Matrix {1} in Zeile {2} nicht parsen +importerDL_error_edgelistssetscount = Anzahl der edgelist-Mengen ({1}) unterscheidet sich von nm Tag ({1}) +importerDL_error_edgelistrowparse = Kann 'from'-Id "{0}" in edgelist Zeile {1} nicht parsen +importerDL_error_edgeparseweight = Kann Gewicht (weight) "{0}" in edgelist Zeile {1} nicht parsen + +importerDOT_error_nothingfound = 'graph' oder 'digraph' nicht gefunden +importerDOT_error_labelunreachable = Kein Label in Zeile {0} gefunden +importerDOT_error_colorunreachable = Keine Farbe in Zeile {0} gefunden +importerDOT_error_posunreachable = Kann Knoten-Position in Zeile {0} nicht parsen. Erforderliches Format: pos="x, y". +importerDOT_error_weightunreachable = Kann Kantengewicht in Zeile {0} nicht parsen + +importerTGF_error_emptynodes = Keine Knoten gefunden diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_el.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_el.properties new file mode 100644 index 0000000000..6742e0e580 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_el.properties @@ -0,0 +1,139 @@ + + +fileType_GEXF_Name=\u0391\u03C1\u03C7\u03B5\u03AF\u03B1 GEXF +fileType_NET_Name=\u0391\u03C1\u03C7\u03B5\u03AF\u03B1 NET (Pajek) +fileType_GraphML_Name=\u0391\u03C1\u03C7\u03B5\u03AF\u03B1 GraphML +fileType_GML_Name=\u0391\u03C1\u03C7\u03B5\u03AF\u03B1 GML +fileType_TGF_Name=\u0391\u03C1\u03C7\u03B5\u03AF\u03B1 TGF +fileType_Edges_Name=\u039B\u03AF\u03C3\u03C4\u03B1 \u03B1\u03BA\u03BC\u03CE\u03BD +fileType_DL_Name=\u0391\u03C1\u03C7\u03B5\u03AF\u03B1 DL (UCINET) +fileType_VNA_Name=\u0391\u03C1\u03C7\u03B5\u03AF\u03B1 VNA +importerGDF_error_dataformat1=\u03A4\u03BF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03BE\u03B5\u03BA\u03B9\u03BD\u03AC\u03B5\u03B9 \u03BC\u03B5 \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE "nodedef> name". +importerGDF_error_dataformat3=\u0391\u03B4\u03C5\u03BD\u03B1\u03BC\u03AF\u03B1 \u03B5\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AE\u03C2 \u03C4\u03B7\u03C2 \u03C3\u03C4\u03AE\u03BB\u03B7\u03C2 ''{0}'' \u03B3\u03B9\u03B1 \u03C4\u03BF\u03BD \u03BA\u03CC\u03BC\u03B2\u03BF ''{1}''. \u03A3\u03C6\u03AC\u03BB\u03BC\u03B1 \u03C3\u03C4\u03B7\u03BD \u03C4\u03B9\u03BC\u03AE ''{2}''. +fileType_TLP_Name=\u0391\u03C1\u03C7\u03B5\u03AF\u03B1 TLP +fileType_GDF_Name=\u0391\u03C1\u03C7\u03B5\u03AF\u03B1 GDF (GUESS) +fileType_GraphViz_Name=\u0391\u03C1\u03C7\u03B5\u03AF\u03B1 GraphViz +importerGDF_error_dataformat2=\u039B\u03AC\u03B8\u03BF\u03C2 \u03BC\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03C3\u03C4\u03B7\u03BB\u03CE\u03BD. \u039A\u03AC\u03B8\u03B5 \u03C3\u03C4\u03AE\u03BB\u03B7 \u03B8\u03B1 \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AD\u03C7\u03B5\u03B9 \u03C4\u03BF\u03C5\u03BB\u03AC\u03C7\u03B9\u03C3\u03C4\u03BF\u03BD \u03AD\u03BD\u03B1 \u03CC\u03BD\u03BF\u03BC\u03B1. \u03A4\u03B1 \u03BF\u03BD\u03CC\u03BC\u03B1\u03C4\u03B1 \u03C4\u03C9\u03BD \u03C3\u03C4\u03B7\u03BB\u03CE\u03BD \u03B4\u03B5\u03BD \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AD\u03C7\u03BF\u03C5\u03BD \u03BA\u03CC\u03BC\u03BC\u03B1. +importerGDF_error_dataformat4=\u0391\u03B4\u03C5\u03BD\u03B1\u03BC\u03AF\u03B1 \u03BD\u03B1 \u03BB\u03AC\u03B2\u03B5\u03B9 \u03C4\u03B9\u03BC\u03AE \u03C4\u03BF \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03BF ''{0}'', \u03C4\u03CD\u03C0\u03BF\u03C5 ''{1}'' \u03B3\u03B9\u03B1 \u03C4\u03BF {2}. +importerGDF_error_dataformat6=\u039F \u03C4\u03CD\u03C0\u03BF\u03C2 \u03C3\u03C4\u03AE\u03BB\u03B7\u03C2 \u03B3\u03B9\u03B1 \u03C4\u03BF ''{0}'' \u03B4\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5, \u03B8\u03B1 \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B7\u03B8\u03B5\u03AF \u03C3\u03C5\u03BC\u03B2\u03BF\u03BB\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC (string). +importerGDF_error_dataformat8=\u0397 \u03C3\u03C4\u03AE\u03BB\u03B7 \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD ''{0}'' \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03C0\u03C1\u03BF\u03C3\u03C4\u03B5\u03B8\u03B5\u03AF \u03B3\u03B9\u03B1\u03C4\u03AF \u03C5\u03C0\u03AC\u03C1\u03C7\u03B5\u03B9 \u03AE\u03B4\u03B7 +importerTPL_error_dataformat1=\u039A\u03B1\u03BA\u03AE \u03BC\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03B1\u03BA\u03BC\u03CE\u03BD \u03C3\u03C4\u03B7\u03BD \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE {0}. +importerNET_error_dataformat1=\u03A4\u03BF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03BE\u03B5\u03BA\u03B9\u03BD\u03AC\u03B5\u03B9 \u03BC\u03B5 \u03C4\u03B7\u03BD \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE "*vertices". +importerNET_error_dataformat4=\u0391\u03C1\u03B9\u03B8\u03BC\u03CC\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5 ''{0}'' \u03C0\u03BF\u03C5 \u03B4\u03B5\u03BD \u03B2\u03C1\u03AF\u03C3\u03BA\u03B5\u03C4\u03B1\u03B9 \u03C3\u03C4\u03BF \u03B4\u03B9\u03AC\u03C3\u03C4\u03B7\u03BC\u03B1 [1,{1}] +importerNET_error_dataformat6=\u03A0\u03C1\u03CC\u03B2\u03BB\u03B7\u03BC\u03B1 \u03BC\u03B5\u03C4\u03B1\u03C4\u03C1\u03BF\u03C0\u03AE\u03C2 \u03BC\u03B5\u03B3\u03AD\u03B8\u03BF\u03C5\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5 \u03C3\u03C4\u03B7 \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE {0}. \u03A0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B1\u03C1\u03B9\u03B8\u03BC\u03CC\u03C2 \u03BA\u03B9\u03BD\u03B7\u03C4\u03AE\u03C2 \u03C5\u03C0\u03BF\u03B4\u03B9\u03B1\u03C3\u03C4\u03BF\u03BB\u03AE\u03C2 (float number). +importerGDF_error_dataformat5=\u039F \u03C4\u03CD\u03C0\u03BF\u03C2 \u03B4\u03B5\u03B4\u03BF\u03BC\u03AD\u03BD\u03C9\u03BD ''{0}'' \u03B4\u03B5\u03BD \u03B1\u03BD\u03B1\u03B3\u03BD\u03C9\u03C1\u03AF\u03B6\u03B5\u03C4\u03B1\u03B9, \u03B8\u03B1 \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B7\u03B8\u03B5\u03AF \u03C3\u03C5\u03BC\u03B2\u03BF\u03BB\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC (string) \u03B1\u03BD\u03C4\u03AF \u03B3\u03B9 \u03B1\u03C5\u03C4\u03CC\u03BD. +importerGDF_error_dataformat7=\u0397 \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE ''{0}'' \u03AD\u03C7\u03B5\u03B9 \u03C0\u03B9\u03BF \u03C0\u03BF\u03BB\u03BB\u03AD\u03C2 \u03C3\u03C4\u03AE\u03BB\u03B5\u03C2 \u03B1\u03C0\u03CC \u03CC\u03C3\u03B5\u03C2 \u03BA\u03B1\u03B8\u03BF\u03C1\u03AF\u03B6\u03BF\u03BD\u03C4\u03B1\u03B9 \u03C3\u03C4\u03B7\u03BD \u03B5\u03C0\u03B9\u03BA\u03B5\u03C6\u03B1\u03BB\u03AF\u03B4\u03B1 (header). \u03A0\u03B1\u03C1\u03B1\u03BA\u03B1\u03BB\u03CE \u03B5\u03C0\u03B9\u03B2\u03B5\u03B2\u03B1\u03B9\u03CE\u03C3\u03C4\u03B5 \u03C4\u03BF\u03BD \u03B1\u03C1\u03B9\u03BC\u03CC \u03C4\u03C9\u03BD \u03BA\u03BF\u03BC\u03BC\u03AC\u03C4\u03C9\u03BD. +importerGDF_error_dataformat9=\u0397 \u03C3\u03C4\u03AE\u03BB\u03B7 \u03B1\u03BA\u03BC\u03CE\u03BD ''{0}'' \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03C0\u03C1\u03BF\u03C3\u03C4\u03B5\u03B8\u03B5\u03AF \u03B3\u03B9\u03B1\u03C4\u03AF \u03C5\u03C0\u03AC\u03C1\u03C7\u03B5\u03B9 \u03AE\u03B4\u03B7 +importerNET_error_dataformat2=\u0391\u03BD\u03B9\u03C7\u03BD\u03B5\u03CD\u03B8\u03B7\u03BA\u03B5 \u03BA\u03B5\u03BD\u03AE \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE \u03C3\u03C4\u03B7\u03BD \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE {0} +importerNET_error_dataformat3=\u039C\u03B7 \u03B9\u03C3\u03BF\u03C1\u03C1\u03BF\u03C0\u03B7\u03BC\u03AD\u03BD\u03B1 (\u03AE \u03C0\u03AC\u03C1\u03B1 \u03C0\u03BF\u03BB\u03BB\u03AC) \u03B5\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03B9\u03BA\u03AC \u03C3\u03C4\u03B7 \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE {0} +importerNET_error_dataformat5=\u03A0\u03C1\u03CC\u03B2\u03BB\u03B7\u03BC\u03B1 \u03BC\u03B5\u03C4\u03B1\u03C4\u03C1\u03BF\u03C0\u03AE\u03C2 \u03C3\u03C5\u03BD\u03C4\u03B5\u03C4\u03B1\u03B3\u03BC\u03AD\u03BD\u03C9\u03BD \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5 \u03C3\u03C4\u03B7 \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE {0}. \u03A0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B1\u03C1\u03B9\u03B8\u03BC\u03CC\u03C2 \u03BA\u03B9\u03BD\u03B7\u03C4\u03AE\u03C2 \u03C5\u03C0\u03BF\u03B4\u03B9\u03B1\u03C3\u03C4\u03BF\u03BB\u03AE\u03C2 (float number). +importerGraphML_error_graphattributes=\u03A4\u03B1 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03AC \u03B3\u03C1\u03AC\u03C6\u03BF\u03C5 ''{0}'' \u03B1\u03B3\u03BD\u03BF\u03AE\u03B8\u03B7\u03BA\u03B1\u03BD \u03C9\u03C2 \u03BC\u03B7 \u03C5\u03C0\u03BF\u03C3\u03C4\u03B7\u03C1\u03B9\u03B6\u03CC\u03BC\u03B5\u03BD\u03B1 \u03B1\u03C0\u03CC \u03C4\u03BF Gephi +importerGraphML_log_nodeproperty=\u0392\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5 \u03B9\u03B4\u03B9\u03CC\u03C4\u03B7\u03C4\u03B1 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5: {0} +importerGraphML_log_edgeproperty=\u0392\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5 \u03B7 \u03B9\u03B4\u03B9\u03CC\u03C4\u03B7\u03C4\u03B1 \u03C4\u03B7\u03C2 \u03B1\u03BA\u03BC\u03AE\u03C2: {0} +importerGraphML_log_nodeattribute=\u0392\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5: ''{0}'' ({1}) +importerGraphML_log_edgeattribute=\u0392\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC \u03B1\u03BA\u03BC\u03AE\u03C2: ''{0}'' ({1}) +importerGraphML_log_default=\u0392\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5 \u03C0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03B7 \u03C4\u03B9\u03BC\u03AE \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03BF\u03CD: ''{0}'' ({1}) +importerGraphML_error_datakey=\u039B\u03B5\u03AF\u03C0\u03B5\u03B9 \u03C4\u03BF \u03BA\u03BB\u03B5\u03B9\u03B4\u03AF \u03B4\u03B5\u03B4\u03BF\u03BC\u03AD\u03BD\u03C9\u03BD \u03B3\u03B9\u03B1 \u03C4\u03BF \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03BF \u03BC\u03B5 id={0} +importerGraphML_error_datavalue=\u03A3\u03C6\u03AC\u03BB\u03BC\u03B1 \u03C4\u03CD\u03C0\u03BF\u03C5 \u03C4\u03B9\u03BC\u03AE\u03C2 \u03B4\u03B5\u03B4\u03BF\u03BC\u03AD\u03BD\u03C9\u03BD {0} \u03B3\u03B9\u03B1 \u03C4\u03BF \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03BF \u03BC\u03B5 id={1}. \u0397 \u03C4\u03B9\u03BC\u03AE \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03BF\u03C1\u03B9\u03C3\u03C4\u03B5\u03AF \u03C9\u03C2 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC ''{2}''. +importerGraphML_error_nodeid=\u03A4\u03BF \u03B1\u03BD\u03B1\u03B3\u03BD\u03C9\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC (id) \u03C4\u03BF\u03C5 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5 \u03BB\u03B5\u03AF\u03C0\u03B5\u03B9. \u039F \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2 \u03B1\u03B3\u03BD\u03BF\u03B5\u03AF\u03C4\u03B1\u03B9. +importerGraphML_error_edgetype=\u039F \u03C4\u03CD\u03C0\u03BF\u03C2 ''{0}'' \u03C4\u03B7\u03C2 \u03B1\u03BA\u03BC\u03AE\u03C2 ''{1}'' \u03B4\u03B5\u03BD \u03B1\u03BD\u03B1\u03B3\u03BD\u03C9\u03C1\u03AF\u03B6\u03B5\u03C4\u03B1\u03B9. \u039F\u03C1\u03AF\u03C3\u03C4\u03B5 \u03C4\u03B7\u03BD \u03C0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03B7 \u03C4\u03B9\u03BC\u03AE. +importerGML_error_directedgraphparse=\u039C\u03B7 \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03BC\u03B5\u03BD\u03B7 \u03C4\u03B9\u03BC\u03AE \u03B3\u03B9\u03B1 \u03C4\u03B7\u03BD \u03B9\u03B4\u03B9\u03CC\u03C4\u03B7\u03C4\u03B1 'directed' \u03C4\u03BF\u03C5 \u03B3\u03C1\u03B1\u03C6\u03AE\u03BC\u03B1\u03C4\u03BF\u03C2 +importerGML_error_badparsing=\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03B1\u03BD\u03AC\u03BB\u03C5\u03C3\u03B7 GML +importerGEXF_error_attributeclass=\u03A4\u03BF \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC ''class'' \u03B4\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5 \u03AE \u03B5\u03AF\u03BD\u03B1\u03B9 \u03AC\u03B3\u03BD\u03C9\u03C3\u03C4\u03BF \u03B3\u03B9\u03B1 \u03C4\u03BF \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC ''{0}''. \u03A4\u03BF \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC \u03B1\u03B3\u03BD\u03BF\u03B5\u03AF\u03C4\u03B1\u03B9. +importerGEXF_error_attributedefault=\u0397 \u03C0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03B7 \u03C4\u03B9\u03BC\u03AE \u03C4\u03BF\u03C5 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03BF\u03CD ''{0}'' \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03BC\u03B5\u03C4\u03B1\u03C4\u03C1\u03B1\u03C0\u03B5\u03AF \u03C3\u03C4\u03BF\u03BD \u03C4\u03CD\u03C0\u03BF ''{1}''. +importerGEXF_error_attributecolumn_exist=\u03A4\u03BF \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC \u03BC\u03B5 \u03B1\u03BD\u03B1\u03B3\u03BD\u03C9\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC ''{0}'' \u03C5\u03C0\u03AC\u03C1\u03C7\u03B5\u03B9 \u03AE\u03B4\u03B7, \u03C4\u03BF \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC \u03B1\u03B3\u03BD\u03BF\u03B5\u03AF\u03C4\u03B1\u03B9 +importerGEXF_error_attributetype2=\u039F \u03C4\u03CD\u03C0\u03BF\u03C2 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03BF\u03CD \u03B3\u03B9\u03B1 \u03C4\u03BF ''{0}'' \u03B4\u03B5\u03BD \u03B1\u03BD\u03B1\u03B3\u03BD\u03C9\u03C1\u03AF\u03B6\u03B5\u03C4\u03B1\u03B9. \u03A4\u03BF \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC \u03C0\u03B1\u03C1\u03B1\u03B2\u03BB\u03AD\u03C0\u03B5\u03C4\u03B1\u03B9. +importerGEXF_error_datakey=\u03A4\u03BF \u03BA\u03BB\u03B5\u03B9\u03B4\u03AF \u03B4\u03B5\u03B4\u03BF\u03BC\u03AD\u03BD\u03C9\u03BD (\u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC ''for'') \u03BB\u03B5\u03AF\u03C0\u03B5\u03B9 \u03B3\u03B9\u03B1 \u03C4\u03BF \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03BF id={0} +importerGEXF_error_datakey1=\u03A4\u03BF \u03BA\u03BB\u03B5\u03B9\u03B4\u03AF \u03B4\u03B5\u03B4\u03BF\u03BC\u03AD\u03BD\u03C9\u03BD (\u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC ''id'') \u03BB\u03B5\u03AF\u03C0\u03B5\u03B9 \u03B3\u03B9\u03B1 \u03C4\u03BF \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03BF id={0} +importerGraphML_error_defaultedgetype=\u039F \u03C0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03BF\u03C2 \u03C4\u03CD\u03C0\u03BF\u03C2 \u03B1\u03BA\u03BC\u03AE\u03C2 ''{0}'' \u03B4\u03B5\u03BD \u03B1\u03BD\u03B1\u03B3\u03BD\u03C9\u03C1\u03AF\u03B6\u03B5\u03C4\u03B1\u03B9. \u039F\u03C1\u03AF\u03C3\u03C4\u03B5 \u03C4\u03B7\u03BD \u03C0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03B7 \u03C4\u03B9\u03BC\u03AE ''mixed''. +importerTPL_error_badparsing=\u039C\u03B7 \u03AD\u03B3\u03BA\u03C5\u03C1\u03B7 \u03B1\u03BD\u03AC\u03BB\u03C5\u03C3\u03B7 TPL +importerGML_error_nodeidmissing=\u03A4\u03BF \u03B1\u03BD\u03B1\u03B3\u03BD\u03C9\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC (id) \u03C4\u03BF\u03C5 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5 \u03BB\u03B5\u03AF\u03C0\u03B5\u03B9 +importerGEXF_error_attributeempty=\u03A3\u03C6\u03AC\u03BB\u03BC\u03B1 \u03B1\u03BD\u03AC\u03BB\u03C5\u03C3\u03B7\u03C2 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CE\u03BD, \u03BB\u03B5\u03AF\u03C0\u03B5\u03B9 \u03C4\u03BF id \u03AE \u03BF \u03C4\u03CD\u03C0\u03BF\u03C2. +importerGML_error_directedparse=\u039C\u03B7 \u03B1\u03BD\u03B1\u03BC\u03B5\u03BD\u03CC\u03BC\u03B5\u03BD\u03B7 \u03C4\u03B9\u03BC\u03AE \u03B3\u03B9\u03B1 \u03C4\u03B7\u03BD \u03B9\u03B4\u03B9\u03CC\u03C4\u03B7\u03C4\u03B1 'directed' \u03B3\u03B9\u03B1 \u03C4\u03B7\u03BD \u03B1\u03BA\u03BC\u03AE ''{0}''' +importerGEXF_error_attributeoptions=\u039F\u03B9 \u03C4\u03B9\u03BC\u03AD\u03C2 \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE\u03C2 \u03C4\u03BF\u03C5 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03BF\u03CD ''{0}'' \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03BF\u03CD\u03BD \u03BD\u03B1 \u03BC\u03B5\u03C4\u03B1\u03C4\u03C1\u03B1\u03C0\u03BF\u03CD\u03BD \u03C3\u03C4\u03BF\u03BD \u03C4\u03CD\u03C0\u03BF ''{1}''. +importerGEXF_error_attributetype1=\u0394\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5 \u03C4\u03CD\u03C0\u03BF\u03C2 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03BF\u03CD \u03B3\u03B9\u03B1 \u03C4\u03BF \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC ''{0}''. \u039F\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2 \u03C3\u03C4\u03B7\u03BD \u03C0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03B7 \u03C3\u03C5\u03BC\u03B2\u03BF\u03BB\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC. +importerGraphML_error_attributefor=\u03A4\u03BF \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC ''for'' \u03B4\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5 \u03AE \u03B5\u03AF\u03BD\u03B1\u03B9 \u03AC\u03B3\u03BD\u03C9\u03C3\u03C4\u03BF \u03B3\u03B9\u03B1 \u03C4\u03BF \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC ''{0}''. \u03A4\u03BF \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC \u03B1\u03B3\u03BD\u03BF\u03B5\u03AF\u03C4\u03B1\u03B9. +importerGraphML_error_attributeclass=\u0397 \u03BA\u03BB\u03AC\u03C3\u03B7 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03BF\u03CD \u03B4\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5 \u03AE \u03B5\u03AF\u03BD\u03B1\u03B9 \u03AC\u03B3\u03BD\u03C9\u03C3\u03C4\u03B7 \u03B3\u03B9\u03B1 \u03C4\u03BF \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC ''{0}''. \u03A4\u03BF \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC \u03B1\u03B3\u03BD\u03BF\u03B5\u03AF\u03C4\u03B1\u03B9. +importerGraphML_error_attributetype2=\u039F \u03C4\u03CD\u03C0\u03BF\u03C2 \u03C4\u03BF\u03C5 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03BF\u03CD ''{0}'' \u03B4\u03B5\u03BD \u03B1\u03BD\u03B1\u03B3\u03BD\u03C9\u03C1\u03AF\u03B6\u03B5\u03C4\u03B1\u03B9. \u03A4\u03BF \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC \u03B1\u03B3\u03BD\u03BF\u03B5\u03AF\u03C4\u03B1\u03B9. +importerGraphML_error_attributedefault=\u0397 \u03C0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03B7 \u03C4\u03B9\u03BC\u03AE \u03C4\u03BF\u03C5 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03BF\u03CD ''{0}'' \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03BC\u03B5\u03C4\u03B1\u03C4\u03C1\u03B1\u03C0\u03B5\u03AF \u03C3\u03C4\u03BF\u03BD \u03C4\u03CD\u03C0\u03BF ''{1}''. +importerNET_error_dataformat7=\u03A0\u03C1\u03CC\u03B2\u03BB\u03B7\u03BC\u03B1 \u03B1\u03BD\u03AC\u03BB\u03C5\u03C3\u03B7\u03C2 \u03B2\u03AC\u03C1\u03BF\u03C5\u03C2 \u03B1\u03BA\u03BC\u03AE\u03C2 \u03C3\u03C4\u03B7 \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE {0}. \u03A0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B1\u03C1\u03B9\u03B8\u03BC\u03CC\u03C2 \u03B4\u03B9\u03C0\u03BB\u03AE\u03C2 \u03B1\u03BA\u03C1\u03AF\u03B2\u03B5\u03B9\u03B1\u03C2. +importerGraphML_error_syntax1=\u03A3\u03C5\u03BD\u03C4\u03B1\u03BA\u03C4\u03B9\u03BA\u03CC \u03C3\u03C6\u03AC\u03BB\u03BC\u03B1, \u03C4\u03BF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03BE\u03B5\u03BA\u03B9\u03BD\u03AC \u03BC\u03B5 \u03C4\u03B7 \u03C3\u03AE\u03BC\u03B1\u03BD\u03C3\u03B7 . +importerGraphML_error_syntax2=\u03A3\u03C5\u03BD\u03C4\u03B1\u03BA\u03C4\u03B9\u03BA\u03CC \u03C3\u03C6\u03AC\u03BB\u03BC\u03B1, \u03BF \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2 ''{0}'' \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B5\u03BC\u03C6\u03C9\u03BB\u03B5\u03C5\u03BC\u03AD\u03BD\u03BF\u03C2 \u03C3\u03B5 \u03BC\u03B9\u03B1 \u03C3\u03AE\u03BC\u03B1\u03BD\u03C3\u03B7 . +importerGraphML_error_attributetype1=\u0394\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5 \u03C4\u03CD\u03C0\u03BF\u03C2 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03BF\u03CD \u03B3\u03B9\u03B1 \u03C4\u03BF \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC ''{0}''. \u039F\u03C1\u03B9\u03C3\u03BC\u03CC\u03C2 \u03C3\u03C4\u03B7\u03BD \u03C0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03B7 \u03C3\u03C5\u03BC\u03B2\u03BF\u03BB\u03BF\u03C3\u03B5\u03B9\u03C1\u03AC. +importerGraphML_error_attributecolumn_exist=\u03A7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC \u03BC\u03B5 id ''{0}'' \u03C5\u03C0\u03AC\u03C1\u03C7\u03B5\u03B9 \u03AE\u03B4\u03B7, \u03C4\u03BF \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC \u03B1\u03B3\u03BD\u03BF\u03B5\u03AF\u03C4\u03B1\u03B9 +importerGraphML_error_attributeempty=\u03A3\u03C6\u03AC\u03BB\u03BC\u03B1 \u03B1\u03BD\u03AC\u03BB\u03C5\u03C3\u03B7\u03C2 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CE\u03BD, \u03C4\u03BF id \u03BB\u03B5\u03AF\u03C0\u03B5\u03B9. +importerDL_error_firstline=\u0397 \u03C0\u03C1\u03CE\u03C4\u03B7 \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE \u03C4\u03BF\u03C5 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5 DL \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03BE\u03B5\u03BD\u03B9\u03BA\u03AC\u03B5\u03B9 \u03BC\u03B5 'DL' +importerGEXF_error_dataoptionsvalue=\u0397 \u03C4\u03B9\u03BC\u03AE \u03B4\u03B5\u03B4\u03BF\u03BC\u03AD\u03BD\u03C9\u03BD "{0}" \u03B4\u03B5\u03BD \u03B1\u03C0\u03BF\u03C4\u03B5\u03BB\u03B5\u03AF \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03B3\u03B9\u03B1 \u03C4\u03BF \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03BF id={1}. \u0397 \u03C4\u03B9\u03BC\u03AE \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B7\u03B8\u03B5\u03AF \u03C3\u03C4\u03BF \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC "{2}". +importerGEXF_error_node_open_interval=\u039F \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2 \u03BC\u03B5 id "{0}" \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF \u03B1\u03BD\u03BF\u03B9\u03C7\u03C4\u03AC \u03B4\u03B9\u03B1\u03C3\u03C4\u03AE\u03BC\u03B1\u03C4\u03B1, \u03BC\u03B9\u03B1 \u03B4\u03C5\u03BD\u03B1\u03C4\u03CC\u03C4\u03B7\u03C4\u03B1 \u03C0\u03BF\u03C5 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B1\u03C0\u03B1\u03C1\u03C7\u03B1\u03B9\u03C9\u03BC\u03AD\u03BD\u03B7. +importerGEXF_log_version12=GEXF \u03AD\u03BA\u03B4\u03BF\u03C3\u03B7\u03C2 1.2 (\u03B1\u03C0\u03B1\u03C1\u03C7\u03B1\u03B9\u03C9\u03BC\u03AD\u03BD\u03BF) +importerGEXF_log_version10=GEXF \u03AD\u03BA\u03B4\u03BF\u03C3\u03B7\u03C2 1.0 (\u03B1\u03C0\u03B1\u03C1\u03C7\u03B1\u03B9\u03C9\u03BC\u03AD\u03BD\u03BF) +importerGEXF_error_parsingmode=\u0397 \u03BB\u03B5\u03B9\u03C4\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1 \u03B1\u03BD\u03AC\u03BB\u03C5\u03C3\u03B7\u03C2 "{0}" \u03B4\u03B5\u03BD \u03B1\u03BD\u03B1\u03B3\u03BD\u03C9\u03C1\u03AF\u03C3\u03C4\u03B7\u03BA\u03B5. \u0398\u03B1 \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B7\u03B8\u03B5\u03AF \u03B7 \u03C0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE "static". +importerGEXF_error_nodecolorvalue=\u039F \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2 \u03BC\u03B5 id "{1}" \u03C0\u03B5\u03C1\u03B9\u03AD\u03C7\u03B5\u03B9 \u03B5\u03C3\u03C6\u03B1\u03BB\u03BC\u03AD\u03BD\u03BF \u03BA\u03B1\u03BD\u03AC\u03BB\u03B9 \u03C7\u03C1\u03CE\u03BC\u03B1\u03C4\u03BF\u03C2 "{2}"="{0}". \u0398\u03B1 \u03AD\u03C0\u03C1\u03B5\u03C0\u03B5 \u03BD\u03B1 \u03B9\u03C3\u03C7\u03CD\u03B5\u03B9 0 <= "{2}" <= 255. +importerGEXF_error_nodesize=\u039F \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2 "{0}" \u03AD\u03C7\u03B5\u03B9 \u03B5\u03C3\u03C6\u03B1\u03BB\u03BC\u03AD\u03BD\u03BF \u03BC\u03AD\u03B3\u03B5\u03B8\u03BF\u03C2 (\u03BC\u03B7 \u03B4\u03B5\u03BA\u03B1\u03B4\u03B9\u03BA\u03CC). +importerGEXF_error_edgeopacityvalue=\u0397 \u03B1\u03BA\u03BC\u03AE \u03BC\u03B5 id "{1}" \u03C0\u03B5\u03C1\u03B9\u03AD\u03C7\u03B5\u03B9 \u03B5\u03C3\u03C6\u03B1\u03BB\u03BC\u03AD\u03BD\u03B7 \u03C4\u03B9\u03BC\u03AE \u03B1\u03B4\u03B9\u03B1\u03C6\u03AC\u03BD\u03B5\u03B9\u03B1\u03C2 (opacity) a="{0}". \u0398\u03B1 \u03AD\u03C0\u03C1\u03B5\u03C0\u03B5 \u03BD\u03B1 \u03B9\u03C3\u03C7\u03CD\u03B5\u03B9 0.0 <= a <= 1.0. +importerGEXF_error_edgetype=\u039F \u03C4\u03CD\u03C0\u03BF\u03C2 "{0}" \u03C4\u03B7\u03C2 \u03B1\u03BA\u03BC\u03AE\u03C2 "{1}" \u03B4\u03B5\u03BD \u03C5\u03C0\u03BF\u03C3\u03C4\u03B7\u03C1\u03AF\u03B6\u03B5\u03C4\u03B1\u03B9. \u0398\u03B1 \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B7\u03B8\u03B5\u03AF \u03B7 \u03C0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03B7 \u03C4\u03B9\u03BC\u03AE. +importerDL_error_formatmissing=\u039B\u03B5\u03AF\u03C0\u03B5\u03B9 \u03B7 \u03B5\u03C4\u03B9\u03BA\u03AD\u03C4\u03B1 DL 'format', \u03C7\u03C1\u03AE\u03C3\u03B7 \u03C0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE\u03C2 'fullmatrix' +importerGEXF_error_datavalue=\u0391\u03BD\u03B1\u03BD\u03C4\u03B9\u03C3\u03C4\u03BF\u03B9\u03C7\u03AF\u03B1 \u03C4\u03CD\u03C0\u03BF\u03C5 \u03C3\u03C4\u03B7\u03BD \u03C4\u03B9\u03BC\u03AE \u03B4\u03B5\u03B4\u03BF\u03BC\u03AD\u03BD\u03C9\u03BD "{0}" \u03B3\u03B9\u03B1 \u03C4\u03BF \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03BF {1}. \u0397 \u03C4\u03B9\u03BC\u03AE \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B7\u03B8\u03B5\u03AF \u03C3\u03C4\u03BF \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC "{2}". +importerGEXF_log_nodeattribute=\u0392\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5: "{0}" ({1}) +importerDL_error_nodata=\u0394\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5 \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE \u03B4\u03B5\u03B4\u03BF\u03BC\u03AD\u03BD\u03C9\u03BD +importerGEXF_error_nodeposition=\u039F \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2 "{0}" \u03C0\u03B5\u03C1\u03B9\u03AD\u03C7\u03B5\u03B9 \u03B5\u03C3\u03C6\u03B1\u03BB\u03BC\u03AD\u03BD\u03B7 \u03C4\u03BF\u03C0\u03BF\u03B8\u03B5\u03C3\u03AF\u03B1 \u03C3\u03B5 \u03C3\u03C7\u03AD\u03C3\u03B7 \u03BC\u03B5 \u03C4\u03BF "{1}" (\u03BC\u03B7 \u03B4\u03B5\u03BA\u03B1\u03B4\u03B9\u03BA\u03CC\u03C2). +importerGEXF_error_nodeopacityvalue=\u039F \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2 \u03BC\u03B5 id "{1}" \u03C0\u03B5\u03C1\u03B9\u03AD\u03C7\u03B5\u03B9 \u03B5\u03C3\u03C6\u03B1\u03BB\u03BC\u03AD\u03BD\u03B7 \u03C4\u03B9\u03BC\u03AE \u03B1\u03B4\u03B9\u03B1\u03C6\u03AC\u03BD\u03B5\u03B9\u03B1\u03C2 a="{0}". \u0398\u03B1 \u03AD\u03C0\u03C1\u03B5\u03C0\u03B5 \u03BD\u03B1 \u03B9\u03C3\u03C7\u03CD\u03B5\u03B9 0.0 <= a <= 1.0. +importerGEXF_error_notnode=\u03A4\u03BF \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03BF "{0}" \u03B4\u03B5\u03BD \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2. \u03A4\u03BF \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03BF \u03B8\u03B1 \u03B1\u03B3\u03BD\u03BF\u03B7\u03B8\u03B5\u03AF. +importerDOT_error_colorunreachable=\u0394\u03B5\u03BD \u03AE\u03C4\u03B1\u03BD \u03B4\u03C5\u03BD\u03B1\u03C4\u03AE \u03B7 \u03B5\u03CD\u03C1\u03B5\u03C3\u03B7 \u03C7\u03C1\u03CE\u03BC\u03B1\u03C4\u03BF\u03C2 \u03C3\u03C4\u03B7 \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE {0} +importerDL_error_unknowntag=\u0386\u03B3\u03BD\u03C9\u03C3\u03C4\u03B7 \u03B5\u03C4\u03B9\u03BA\u03AD\u03C4\u03B1 \u03BA\u03B5\u03C6\u03B1\u03BB\u03AF\u03B4\u03B1\u03C2 "{0}" +importerDL_error_badformat=\u03A4\u03BF \u03BC\u03BF\u03C1\u03C6\u03CC\u03C4\u03C5\u03C0\u03BF "{0}" \u03B4\u03B5\u03BD \u03C5\u03C0\u03BF\u03C3\u03C4\u03B7\u03C1\u03AF\u03B6\u03B5\u03C4\u03B1\u03B9, \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03C4\u03B5 \u03BC\u03CC\u03BD\u03BF 'format=edgelist1' \u03BA\u03B1\u03B9 'format=fullmatrix' +importerDL_error_matrixrowscount=\u039F \u03B1\u03C1\u03B9\u03B8\u03BC\u03CC\u03C2 \u03C4\u03C9\u03BD \u03B3\u03C1\u03B1\u03BC\u03BC\u03CE\u03BD \u03C4\u03BF\u03C5 matrix ({0}) \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BC\u03B5\u03B3\u03B1\u03BB\u03CD\u03C4\u03B5\u03C1\u03BF\u03C2 \u03B1\u03C0\u03CC \u03C4\u03B7\u03BD \u03C4\u03B9\u03BC\u03AE \u03C4\u03B7\u03C2 \u03B5\u03C4\u03B9\u03BA\u03AD\u03C4\u03B1\u03C2 n ({1}) +importerDOT_error_nothingfound=\u0394\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5 \u03BA\u03B1\u03BD\u03AD\u03BD\u03B1 'graph' \u03AE 'digraph' +importerGEXF_error_edgesource=\u0397 \u03B1\u03BA\u03BC\u03AE \u03B4\u03B5\u03BD \u03C0\u03B5\u03C1\u03B9\u03AD\u03C7\u03B5\u03B9 \u03C0\u03BB\u03B7\u03C1\u03BF\u03C6\u03BF\u03C1\u03AF\u03B5\u03C2 \u03B3\u03B9\u03B1 \u03C4\u03B7\u03BD \u03C0\u03B7\u03B3\u03AE. \u0397 \u03B1\u03BA\u03BC\u03AE \u03B8\u03B1 \u03B1\u03B3\u03BD\u03BF\u03B7\u03B8\u03B5\u03AF. +importerGEXF_error_parsingdatetype=\u039F \u03C4\u03CD\u03C0\u03BF\u03C2 \u03B7\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1\u03C2 "{0}" \u03B4\u03B5\u03BD \u03B1\u03BD\u03B1\u03B3\u03BD\u03C9\u03C1\u03AF\u03C3\u03C4\u03B7\u03BA\u03B5. \u0398\u03B1 \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B7\u03B8\u03B5\u03AF \u03B7 \u03C0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE "date". +importerDL_error_nmissing=\u0397 \u03BA\u03B5\u03C6\u03B1\u03BB\u03AF\u03B4\u03B1 \u03C4\u03BF\u03C5 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5 DL \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AD\u03C7\u03B5\u03B9 \u03C4\u03B7\u03BD \u03B5\u03C4\u03B9\u03BA\u03AD\u03C4\u03B1 'n = ' +importerGEXF_error_edgedouble=\u039F \u03C4\u03CD\u03C0\u03BF\u03C2 \u03B1\u03BA\u03BC\u03AE\u03C2 "double" \u03B4\u03B5\u03BD \u03C5\u03C0\u03BF\u03C3\u03C4\u03B7\u03C1\u03AF\u03B6\u03B5\u03C4\u03B1\u03B9 \u03C0\u03C1\u03BF\u03C2 \u03C4\u03BF \u03C0\u03B1\u03C1\u03CC\u03BD. \u0391\u03BD\u03C4\u03AF \u03B3\u03B9\u03B1 \u03B1\u03C5\u03C4\u03CC\u03BD \u03B8\u03B1 \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B7\u03B8\u03B5\u03AF \u03B7 \u03C0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE "mixed". +importerDL_error_matrixrowscount2=\u039F \u03B1\u03C1\u03B9\u03B8\u03BC\u03CC\u03C2 \u03C4\u03C9\u03BD \u03B3\u03C1\u03B1\u03BC\u03BC\u03CE\u03BD \u03C4\u03BF\u03C5 matrix ({0}) \u03B5\u03AF\u03BD\u03B1\u03B9 \u03BC\u03B9\u03BA\u03C1\u03CC\u03C4\u03B5\u03C1\u03BF\u03C2 \u03B1\u03C0\u03CC \u03C4\u03B7\u03BD \u03C4\u03B9\u03BC\u03AE \u03C4\u03B7\u03C2 \u03B5\u03C4\u03B9\u03BA\u03AD\u03C4\u03B1\u03C2 n ({1}) +importerGEXF_log_version11=GEXF \u03AD\u03BA\u03B4\u03BF\u03C3\u03B7\u03C2 1.1 (\u03B1\u03C0\u03B1\u03C1\u03C7\u03B1\u03B9\u03C9\u03BC\u03AD\u03BD\u03BF) +importerGEXF_log_version13=GEXF \u03AD\u03BA\u03B4\u03BF\u03C3\u03B7\u03C2 1.3 +importerGEXF_error_timezone_parseerror=\u0394\u03B5\u03BD \u03AE\u03C4\u03B1\u03BD \u03B4\u03C5\u03BD\u03B1\u03C4\u03CC \u03BD\u03B1 \u03B1\u03BD\u03B1\u03B3\u03BD\u03C9\u03C1\u03B9\u03C3\u03C4\u03B5\u03AF \u03B7 \u03B6\u03CE\u03BD\u03B7 \u03CE\u03C1\u03B1\u03C2 "{0}" +importerGEXF_error_edgecolorvalue=\u0397 \u03B1\u03BA\u03BC\u03AE \u03BC\u03B5 id "{1}" \u03C0\u03B5\u03C1\u03B9\u03AD\u03C7\u03B5\u03B9 \u03B5\u03C3\u03C6\u03B1\u03BB\u03BC\u03AD\u03BD\u03BF \u03BA\u03B1\u03BD\u03AC\u03BB\u03B9 \u03C7\u03C1\u03CE\u03BC\u03B1\u03C4\u03BF\u03C2 "{2}"="{0}". \u0398\u03B1 \u03AD\u03C0\u03C1\u03B5\u03C0\u03B5 \u03BD\u03B1 \u03B9\u03C3\u03C7\u03CD\u03B5\u03B9 0 <= "{2}" <= 255. +importerDOT_error_labelunreachable=\u0394\u03B5\u03BD \u03AE\u03C4\u03B1\u03BD \u03B4\u03C5\u03BD\u03B1\u03C4\u03AE \u03B7 \u03B5\u03CD\u03C1\u03B5\u03C3\u03B7 \u03B5\u03C4\u03B9\u03BA\u03AD\u03C4\u03B1\u03C2 \u03C3\u03C4\u03B7 \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE {0} +importerGEXF_error_defaultedgetype=\u0397 \u03C0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03B7 \u03C4\u03B9\u03BC\u03AE \u03C4\u03BF\u03C5 \u03C4\u03CD\u03C0\u03BF\u03C5 \u03B1\u03BA\u03BC\u03AE\u03C2 "{0}" \u03B4\u03B5\u03BD \u03B1\u03BD\u03B1\u03B3\u03BD\u03C9\u03C1\u03AF\u03C3\u03C4\u03B7\u03BA\u03B5. \u0391\u03BD\u03C4\u03AF \u03B3\u03B9\u03B1 \u03B1\u03C5\u03C4\u03AE\u03BD \u03B8\u03B1 \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B7\u03B8\u03B5\u03AF \u03B7 \u03C0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE "mixed". +importerGEXF_log_version_undef=\u0386\u03B3\u03BD\u03C9\u03C3\u03C4\u03B7 \u03AD\u03BA\u03B4\u03BF\u03C3\u03B7 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5 GEXF. \u0398\u03B1 \u03B1\u03BD\u03B1\u03B3\u03BD\u03C9\u03C3\u03C4\u03B5\u03AF \u03C9\u03C2 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF \u03AD\u03BA\u03B4\u03BF\u03C3\u03B7\u03C2 1.3. +importerGEXF_error_edgeid=\u03A3\u03C4\u03B7\u03BD \u03B1\u03BA\u03BC\u03AE \u03B4\u03B5\u03BD \u03B1\u03BD\u03C4\u03B9\u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF \u03BA\u03AC\u03C0\u03BF\u03B9\u03BF id. \u0388\u03BD\u03B1 \u03C4\u03C5\u03C7\u03B1\u03AF\u03BF id \u03B4\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AE\u03B8\u03B7\u03BA\u03B5. +importerGEXF_log_default=\u0392\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5 \u03C0\u03C1\u03BF\u03B5\u03C0\u03B9\u03BB\u03B5\u03B3\u03BC\u03AD\u03BD\u03B7 \u03C4\u03B9\u03BC\u03AE \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03BF\u03CD: "{0}" ({1}) +importerDOT_error_posunreachable=\u0394\u03B5\u03BD \u03AE\u03C4\u03B1\u03BD \u03B4\u03C5\u03BD\u03B1\u03C4\u03AE \u03B7 \u03B1\u03BD\u03AC\u03BB\u03C5\u03C3\u03B7 \u03C4\u03B7\u03C2 \u03C4\u03BF\u03C0\u03BF\u03B8\u03B5\u03C3\u03AF\u03B1\u03C2 \u03C3\u03C4\u03B7 \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE {0}. \u03A0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03C4\u03B7\u03C2 \u03BC\u03BF\u03C1\u03C6\u03AE\u03C2 pos="x,y". +importerGEXF_error_nodeid=\u03A3\u03C4\u03BF\u03BD \u03BA\u03CC\u03BC\u03B2\u03BF \u03B4\u03B5\u03BD \u03B1\u03BD\u03C4\u03B9\u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF \u03BA\u03AC\u03C0\u03BF\u03B9\u03BF id. \u039F \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2 \u03B8\u03B1 \u03B1\u03B3\u03BD\u03BF\u03B7\u03B8\u03B5\u03AF. +importerGEXF_log_nodeproperty=\u0392\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5 \u03B9\u03B4\u03B9\u03CC\u03C4\u03B7\u03C4\u03B1 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5: {0} +importerGEXF_error_edge_open_interval=\u0397 \u03B1\u03BA\u03BC\u03AE \u03BC\u03B5 id "{0}" \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF \u03B1\u03BD\u03BF\u03B9\u03C7\u03C4\u03AC \u03B4\u03B9\u03B1\u03C3\u03C4\u03AE\u03BC\u03B1\u03C4\u03B1, \u03BC\u03B9\u03B1 \u03B4\u03C5\u03BD\u03B1\u03C4\u03CC\u03C4\u03B7\u03C4\u03B1 \u03C0\u03BF\u03C5 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B1\u03C0\u03B1\u03C1\u03C7\u03B1\u03B9\u03C9\u03BC\u03AD\u03BD\u03B7. +importerGEXF_log_edgeeproperty=\u0392\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5 \u03B9\u03B4\u03B9\u03CC\u03C4\u03B7\u03C4\u03B1 \u03B1\u03BA\u03BC\u03AE\u03C2: {0} +importerGEXF_error_idtype_error=\u039F \u03C4\u03CD\u03C0\u03BF\u03C2 \u03B4\u03B5\u03B4\u03BF\u03BC\u03AD\u03BD\u03C9\u03BD \u03C4\u03BF\u03C5 id "{0}" \u03B4\u03B5\u03BD \u03B1\u03BD\u03B1\u03B3\u03BD\u03C9\u03C1\u03AF\u03C3\u03C4\u03B7\u03BA\u03B5, \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03C4\u03B5 \u03AD\u03BD\u03B1\u03BD \u03B1\u03C0\u03CC \u03C4\u03BF\u03C5\u03C2 \u03C4\u03CD\u03C0\u03BF\u03C5\u03C2 'integer', 'long' \u03AE 'string' +importerDL_error_labelscount=\u039F \u03B1\u03C1\u03B9\u03B8\u03BC\u03CC\u03C2 \u03C4\u03C9\u03BD \u03B5\u03C4\u03B9\u03BA\u03B5\u03C4\u03CE\u03BD ({0}) \u03B4\u03B9\u03B1\u03C6\u03AD\u03C1\u03B5\u03B9 \u03B1\u03C0\u03CC \u03C4\u03B7\u03BD \u03C4\u03B9\u03BC\u03AE \u03C4\u03B7\u03C2 \u03B5\u03C4\u03B9\u03BA\u03AD\u03C4\u03B1\u03C2 n ({1}) +importerGEXF_error_edgetarget=\u0397 \u03B1\u03BA\u03BC\u03AE \u03B4\u03B5\u03BD \u03C0\u03B5\u03C1\u03B9\u03AD\u03C7\u03B5\u03B9 \u03C0\u03BB\u03B7\u03C1\u03BF\u03C6\u03BF\u03C1\u03AF\u03B5\u03C2 \u03B3\u03B9\u03B1 \u03C4\u03BF\u03BD \u03C0\u03C1\u03BF\u03BF\u03C1\u03B9\u03C3\u03BC\u03CC. \u0397 \u03B1\u03BA\u03BC\u03AE \u03B8\u03B1 \u03B1\u03B3\u03BD\u03BF\u03B7\u03B8\u03B5\u03AF. +importerGEXF_log_edgeattribute=\u0392\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC \u03B1\u03BA\u03BC\u03AE\u03C2: "{0}" ({1}) +importerTGF_error_emptynodes=\u0394\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B1\u03BD \u03BA\u03CC\u03BC\u03B2\u03BF\u03B9 +importerGEXF_error_edgeweight=\u0392\u03AC\u03C1\u03BF\u03C2 \u03C4\u03B7\u03C2 \u03B1\u03BA\u03BC\u03AE\u03C2 \u03BC\u03B5 id ''{0}'' \u03B4\u03B5\u03BD \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B1\u03C1\u03B9\u03B8\u03BC\u03CC\u03C2 \u03BA\u03B9\u03BD\u03B7\u03C4\u03AE\u03C2 \u03C5\u03C0\u03BF\u03B4\u03B9\u03B1\u03C3\u03C4\u03BF\u03BB\u03AE\u03C2 (float). \u03A4\u03BF \u03B2\u03AC\u03C1\u03BF\u03C2 \u03B1\u03B3\u03BD\u03BF\u03B5\u03AF\u03C4\u03B1\u03B9. +importerGEXF_error_node_timeinterval_parseerror=\u03A4\u03BF \u03C7\u03C1\u03BF\u03BD\u03B9\u03BA\u03CC \u03B4\u03B9\u03AC\u03C3\u03C4\u03B7\u03BC\u03B1 \u03B3\u03B9\u03B1 \u03C4\u03BF\u03BD \u03BA\u03CC\u03BC\u03B2\u03BF ''{0}'' \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B1\u03BD\u03B1\u03BB\u03C5\u03B8\u03B5\u03AF (parsed). \u03A7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF\u03C3\u03C4\u03B5 xsd:dateTime \u03AE \u03BC\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03B4\u03B9\u03C0\u03BB\u03AE\u03C2 \u03B1\u03BA\u03C1\u03AF\u03B2\u03B5\u03B9\u03B1\u03C2 (Double). +importerGEXF_error_nodeattribute_timeset_parseerror=\u039F\u03B9 \u03C7\u03C1\u03BF\u03BD\u03BF\u03C3\u03C6\u03C1\u03B1\u03B3\u03AF\u03B4\u03B5\u03C2 \u03AE \u03C4\u03B1 \u03B4\u03B9\u03B1\u03C3\u03C4\u03AE\u03BC\u03B1\u03C4\u03B1 \u03B3\u03B9\u03B1 \u03C4\u03BF\u03BD \u03BA\u03CC\u03BC\u03B2\u03BF ''{0}'' \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B1\u03BD\u03B1\u03BB\u03C5\u03B8\u03BF\u03CD\u03BD. +importerGEXF_error_edgeattribute_timeset_parseerror=\u039F\u03B9 \u03C7\u03C1\u03BF\u03BD\u03BF\u03C3\u03C6\u03C1\u03B1\u03B3\u03AF\u03B4\u03B5\u03C2 \u03AE \u03C4\u03B1 \u03B4\u03B9\u03B1\u03C3\u03C4\u03AE\u03BC\u03B1\u03C4\u03B1 \u03B3\u03B9\u03B1 \u03C4\u03B7\u03BD \u03B1\u03BA\u03BC\u03AE ''{0}'' \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B1\u03BD\u03B1\u03BB\u03C5\u03B8\u03BF\u03CD\u03BD. +importerGEXF_error_slice_bound_missing=\u039B\u03B5\u03AF\u03C0\u03B5\u03B9 \u03C7\u03C1\u03BF\u03BD\u03BF\u03C3\u03C6\u03C1\u03B1\u03B3\u03AF\u03B4\u03B1 \u03AE \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC \u03B4\u03B9\u03B1\u03C3\u03C4\u03AE\u03BC\u03B1\u03C4\u03BF\u03C2 (interval attribute ) \u03C3\u03C4\u03BF +importerGEXF_error_pid=\u039F \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2 \u03BC\u03B5 id ''{0}'' \u03BF\u03C1\u03AF\u03B6\u03B5\u03B9 \u03C4\u03BF\u03BD \u03B3\u03BF\u03BD\u03AD\u03B1 \u03BC\u03B5 \u03C7\u03C1\u03AE\u03C3\u03B7 \u03B5\u03BD\u03CC\u03C2 pid. \u0397 \u03C5\u03C0\u03BF\u03C3\u03C4\u03AE\u03C1\u03B9\u03BE\u03B7 \u03B9\u03B5\u03C1\u03B1\u03C1\u03C7\u03B9\u03BA\u03CE\u03BD \u03B3\u03C1\u03B1\u03C6\u03B7\u03BC\u03AC\u03C4\u03C9\u03BD (Hierarchical graph) \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B1\u03C0\u03B1\u03C1\u03C7\u03B1\u03B9\u03C9\u03BC\u03AD\u03BD\u03B7 \u03BA\u03B1\u03B9 \u03B8\u03B1 \u03B1\u03B3\u03BD\u03BF\u03B5\u03AF\u03C4\u03B1\u03B9. +importerGEXF_error_timerepresentation_intervalerror=\u0397 \u03B1\u03BD\u03B1\u03C0\u03B1\u03C1\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 \u03C7\u03C1\u03CC\u03BD\u03BF\u03C5 \u03AD\u03C7\u03B5\u03B9 \u03C4\u03B5\u03B8\u03B5\u03AF \u03C9\u03C2 'timestamp', \u03BA\u03B1\u03C4\u03AC \u03C3\u03C5\u03BD\u03AD\u03C0\u03B5\u03B9\u03B1 \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03BF\u03CD\u03BD \u03BD\u03B1 \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B7\u03B8\u03BF\u03CD\u03BD \u03B4\u03B9\u03B1\u03C3\u03C4\u03AE\u03BC\u03B1\u03C4\u03B1. \u03A0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B8\u03AD\u03C3\u03B5\u03C4\u03B5 \u03C4\u03B7\u03BD \u03B1\u03BD\u03B1\u03C0\u03B1\u03C1\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 \u03C7\u03C1\u03CC\u03BD\u03BF\u03C5 \u03C3\u03C4\u03BF \u03C3\u03B5 'interval' . +importerGEXF_log_options=\u0392\u03C1\u03AD\u03B8\u03B7\u03BA\u03B1\u03BD \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AD\u03C2 \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CE\u03BD: ''{0}'' ({1}) +importerDOT_error_weightunreachable=\u0394\u03B5\u03BD \u03C3\u03C4\u03AC\u03B8\u03B7\u03BA\u03B5 \u03B4\u03C5\u03BD\u03B1\u03C4\u03AE \u03B7 \u03B1\u03BD\u03AC\u03BB\u03C5\u03C3\u03B7 \u03C4\u03BF\u03C5 \u03B2\u03AC\u03C1\u03BF\u03C5\u03C2 \u03B1\u03BA\u03BC\u03AE\u03C2 \u03C3\u03C4\u03B7\u03BD \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE {0} +importerGEXF_error_edge_timeinterval_parseerror=\u03A4\u03BF \u03C7\u03C1\u03BF\u03BD\u03B9\u03BA\u03CC \u03B4\u03B9\u03AC\u03C3\u03C4\u03B7\u03BC\u03B1 \u03B3\u03B9\u03B1 \u03C4\u03B7\u03BD \u03B1\u03BA\u03BC\u03AE ''{0}'' \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B1\u03BD\u03B1\u03BB\u03C5\u03B8\u03B5\u03AF (parsed). \u03A7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF\u03C3\u03C4\u03B5 xsd:dateTime \u03AE \u03BC\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03B4\u03B9\u03C0\u03BB\u03AE\u03C2 \u03B1\u03BA\u03C1\u03AF\u03B2\u03B5\u03B9\u03B1\u03C2 (Double). +importerGEXF_error_node_timeintervals_parseerror=\u03A4\u03B1 \u03C7\u03C1\u03BF\u03BD\u03B9\u03BA\u03AC \u03B4\u03B9\u03B1\u03C3\u03C4\u03AE\u03BC\u03B1\u03C4\u03B1 \u03B3\u03B9\u03B1 \u03C4\u03BF\u03BD \u03BA\u03CC\u03BC\u03B2\u03BF ''{0}'' \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B1\u03BD\u03B1\u03BB\u03C5\u03B8\u03B5\u03AF (parsed). \u03A7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF\u03C3\u03C4\u03B5 xsd:dateTime \u03AE \u03BC\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03B4\u03B9\u03C0\u03BB\u03AE\u03C2 \u03B1\u03BA\u03C1\u03AF\u03B2\u03B5\u03B9\u03B1\u03C2 (Double). +importerGEXF_error_edge_timeintervals_parseerror=\u03A4\u03B1 \u03C7\u03C1\u03BF\u03BD\u03B9\u03BA\u03AC \u03B4\u03B9\u03B1\u03C3\u03C4\u03AE\u03BC\u03B1\u03C4\u03B1 \u03B3\u03B9\u03B1 \u03C4\u03B7\u03BD \u03B1\u03BA\u03BC\u03AE ''{0}'' \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03BF\u03CD\u03BD \u03BD\u03B1 \u03B1\u03BD\u03B1\u03BB\u03C5\u03B8\u03BF\u03CD\u03BD (parsed). \u03A7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF\u03C3\u03C4\u03B5 xsd:dateTime \u03AE \u03BC\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03B4\u03B9\u03C0\u03BB\u03AE\u03C2 \u03B1\u03BA\u03C1\u03AF\u03B2\u03B5\u03B9\u03B1\u03C2 (Double). +importerGEXF_error_nodeattribute_timeinterval_parseerror=\u03A4\u03BF \u03C7\u03C1\u03BF\u03BD\u03B9\u03BA\u03CC \u03B4\u03B9\u03AC\u03C3\u03C4\u03B7\u03BC\u03B1 \u03B3\u03B9\u03B1 \u03C4\u03BF\u03BD \u03BA\u03CC\u03BC\u03B2\u03BF ''{0}'' \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B1\u03BD\u03B1\u03BB\u03C5\u03B8\u03B5\u03AF (parsed). \u03A7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF\u03C3\u03C4\u03B5 xsd:dateTime \u03AE \u03BC\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03B4\u03B9\u03C0\u03BB\u03AE\u03C2 \u03B1\u03BA\u03C1\u03AF\u03B2\u03B5\u03B9\u03B1\u03C2 (Double). +importerGEXF_error_edgeattribute_timeinterval_parseerror=\u03A4\u03BF \u03C7\u03C1\u03BF\u03BD\u03B9\u03BA\u03CC \u03B4\u03B9\u03AC\u03C3\u03C4\u03B7\u03BC\u03B1 \u03B3\u03B9\u03B1 \u03C4\u03B7\u03BD \u03B1\u03BA\u03BC\u03AE ''{0}'' \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B1\u03BD\u03B1\u03BB\u03C5\u03B8\u03B5\u03AF (parsed). \u03A7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF\u03C3\u03C4\u03B5 xsd:dateTime \u03AE \u03BC\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03B4\u03B9\u03C0\u03BB\u03AE\u03C2 \u03B1\u03BA\u03C1\u03AF\u03B2\u03B5\u03B9\u03B1\u03C2 (Double). +importerGEXF_error_edgeattribute_timestamp_parseerror=\u0397 \u03C7\u03C1\u03BF\u03BD\u03BF\u03C3\u03C6\u03C1\u03B1\u03B3\u03AF\u03B4\u03B1 (timestamp) \u03B3\u03B9\u03B1 \u03C4\u03B7\u03BD \u03B1\u03BA\u03BC\u03AE ''{0}'' \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B1\u03BD\u03B1\u03BB\u03C5\u03B8\u03B5\u03AF (parsed). \u03A7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF\u03C3\u03C4\u03B5 xsd:dateTime \u03AE \u03BC\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03B4\u03B9\u03C0\u03BB\u03AE\u03C2 \u03B1\u03BA\u03C1\u03AF\u03B2\u03B5\u03B9\u03B1\u03C2 (Double). +importerGEXF_error_node_timestamp_parseerror=\u0397 \u03C7\u03C1\u03BF\u03BD\u03BF\u03C3\u03C6\u03C1\u03B1\u03B3\u03AF\u03B4\u03B1 (timestamp) \u03B3\u03B9\u03B1 \u03C4\u03BF\u03BD \u03BA\u03CC\u03BC\u03B2\u03BF ''{0}'' \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B1\u03BD\u03B1\u03BB\u03C5\u03B8\u03B5\u03AF (parsed). \u03A7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF\u03C3\u03C4\u03B5 xsd:dateTime \u03AE \u03BC\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03B4\u03B9\u03C0\u03BB\u03AE\u03C2 \u03B1\u03BA\u03C1\u03AF\u03B2\u03B5\u03B9\u03B1\u03C2 (Double). +importerGEXF_error_edge_timestamp_parseerror=\u0397 \u03C7\u03C1\u03BF\u03BD\u03BF\u03C3\u03C6\u03C1\u03B1\u03B3\u03AF\u03B4\u03B1 (timestamp) \u03B3\u03B9\u03B1 \u03C4\u03B7\u03BD \u03B1\u03BA\u03BC\u03AE ''{0}'' \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B1\u03BD\u03B1\u03BB\u03C5\u03B8\u03B5\u03AF (parsed). \u03A7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF\u03C3\u03C4\u03B5 xsd:dateTime \u03AE \u03BC\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03B4\u03B9\u03C0\u03BB\u03AE\u03C2 \u03B1\u03BA\u03C1\u03AF\u03B2\u03B5\u03B9\u03B1\u03C2 (Double). +importerGEXF_error_node_timestamps_parseerror=\u039F\u03B9 \u03C7\u03C1\u03BF\u03BD\u03BF\u03C3\u03C6\u03C1\u03B1\u03B3\u03AF\u03B4\u03B5\u03C2 \u03B3\u03B9\u03B1 \u03C4\u03BF\u03BD \u03BA\u03CC\u03BC\u03B2\u03BF ''{0}'' \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03BF\u03CD\u03BD \u03BD\u03B1 \u03B1\u03BD\u03B1\u03BB\u03C5\u03B8\u03BF\u03CD\u03BD. +importerGEXF_error_edge_timestamps_parseerror=\u039F\u03B9 \u03C7\u03C1\u03BF\u03BD\u03BF\u03C3\u03C6\u03C1\u03B1\u03B3\u03AF\u03B4\u03B5\u03C2 \u03B3\u03B9\u03B1 \u03C4\u03B7\u03BD \u03B1\u03BA\u03BC\u03AE ''{0}'' \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03BF\u03CD\u03BD \u03BD\u03B1 \u03B1\u03BD\u03B1\u03BB\u03C5\u03B8\u03BF\u03CD\u03BD. +importerGEXF_error_nodeattribute_timestamp_parseerror=\u0397 \u03C7\u03C1\u03BF\u03BD\u03BF\u03C3\u03C6\u03C1\u03B1\u03B3\u03AF\u03B4\u03B1 (timestamp) \u03B3\u03B9\u03B1 \u03C4\u03BF\u03BD \u03BA\u03CC\u03BC\u03B2\u03BF ''{0}'' \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B1\u03BD\u03B1\u03BB\u03C5\u03B8\u03B5\u03AF (parsed). \u03A7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF\u03C3\u03C4\u03B5 xsd:dateTime \u03AE \u03BC\u03BF\u03C1\u03C6\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03B4\u03B9\u03C0\u03BB\u03AE\u03C2 \u03B1\u03BA\u03C1\u03AF\u03B2\u03B5\u03B9\u03B1\u03C2 (Double). +importerGEXF_log_dynamic_weight=\u0392\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5 \u03B4\u03C5\u03BD\u03B1\u03BC\u03B9\u03BA\u03AE \u03C3\u03C4\u03AE\u03BB\u03B7 \u03B2\u03AC\u03C1\u03BF\u03C5\u03C2 (Dynamic weight column ) +importerDL_error_mmissing=\u0397 \u03BA\u03B5\u03C6\u03B1\u03BB\u03AF\u03B4\u03B1 \u03C4\u03BF\u03C5 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5 DL \u03C0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03C0\u03B5\u03C1\u03B9\u03AD\u03C7\u03B5\u03B9 \u03C4\u03B7\u03BD \u03B5\u03C4\u03B9\u03BA\u03AD\u03C4\u03B1 'm = ' +importerGEXF_error_timerepresentation_timestamperror=\u0397 \u03B1\u03BD\u03B1\u03C0\u03B1\u03C1\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 \u03C7\u03C1\u03CC\u03BD\u03BF\u03C5 \u03AD\u03C7\u03B5\u03B9 \u03C4\u03B5\u03B8\u03B5\u03AF \u03C9\u03C2 'interval', \u03BA\u03B1\u03C4\u03AC \u03C3\u03C5\u03BD\u03AD\u03C0\u03B5\u03B9\u03B1 \u03B4\u03B5\u03BD \u03BC\u03C0\u03BF\u03C1\u03BF\u03CD\u03BD \u03BD\u03B1 \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B7\u03B8\u03BF\u03CD\u03BD \u03C7\u03C1\u03BF\u03BD\u03BF\u03C3\u03C6\u03C1\u03B1\u03B3\u03AF\u03B4\u03B5\u03C2. \u03A0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B8\u03AD\u03C3\u03B5\u03C4\u03B5 \u03C4\u03B7\u03BD \u03B1\u03BD\u03B1\u03C0\u03B1\u03C1\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 \u03C7\u03C1\u03CC\u03BD\u03BF\u03C5 \u03C3\u03C4\u03BF \u03C3\u03B5 'interval' . +importerDL_error_matriciescount=\u039F \u03B1\u03C1\u03B9\u03B8\u03BC\u03CC\u03C2 \u03C4\u03C9\u03BD \u03C3\u03C5\u03BD\u03CC\u03BB\u03C9\u03BD \u03C0\u03B9\u03BD\u03AC\u03BA\u03C9\u03BD ({0}) \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B4\u03B9\u03B1\u03C6\u03BF\u03C1\u03B5\u03B9\u03BA\u03CC\u03C2 \u03B1\u03C0\u03CC \u03C4\u03B7\u03BD \u03B5\u03C4\u03B9\u03BA\u03AD\u03C4\u03B1 nm ({1}) +importerDL_error_matrixentriescount=\u039F \u03B1\u03C1\u03B9\u03B8\u03BC\u03CC\u03C2 \u03C4\u03C9\u03BD \u03C4\u03B9\u03BC\u03CE\u03BD \u03C3\u03C4\u03B7\u03BD \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE {0} \u03C4\u03BF\u03C5 \u03C0\u03AF\u03BD\u03B1\u03BA\u03B1 {1} \u03AD\u03C7\u03B5\u03B9 \u03C0\u03B5\u03C1\u03B9\u03C3\u03C3\u03CC\u03C4\u03B5\u03C1\u03B5\u03C3 \u03C4\u03B9\u03BC\u03AD\u03C2 \u03B1\u03C0\u03CC \u03C4\u03BF \u03B5\u03C0\u03B9\u03C4\u03C1\u03B5\u03C0\u03CC\u03BC\u03B5\u03BD\u03BF \u03CC\u03C1\u03B9\u03BF (\u03B2\u03BB \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE {2} \u03C4\u03BF\u03C5 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5 DL) +importerDL_error_weightparseerror=\u0391\u03B4\u03CD\u03BD\u03B1\u03C4\u03B7 \u03B7 \u03B1\u03BD\u03AC\u03BB\u03C5\u03C3\u03B7 \u03C4\u03BF\u03C5 \u03B2\u03AC\u03C1\u03BF\u03C5\u03C2 ''{0}'' \u03C3\u03C4\u03BF\u03BD \u03C0\u03AF\u03BD\u03B1\u03BA\u03B1 {1} , \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE {2} +importerDL_error_edgeparseweight=\u0391\u03B4\u03CD\u03BD\u03B1\u03C4\u03BF\u03BD \u03BD\u03B1 \u03B1\u03BD\u03B1\u03BB\u03C5\u03B8\u03B5\u03AF \u03C4\u03BF \u03B2\u03AC\u03C1\u03BF\u03C2 ''{0}'' \u03C3\u03C4\u03B7\u03BD \u03BB\u03B9\u03C3\u03C4\u03B1 \u03B1\u03BA\u03BC\u03CE\u03BD (edgelist) \u03C3\u03C4\u03B7 \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE {1} +importerDL_error_edgelistssetscount=\u039F \u03B1\u03C1\u03B9\u03B8\u03BC\u03CC\u03C2 \u03C4\u03C9\u03BD \u03C3\u03C5\u03BD\u03CC\u03BB\u03C9\u03BD \u03BB\u03AF\u03C3\u03C4\u03B1\u03C2 \u03B1\u03BA\u03BC\u03CE\u03BD (edgelist sets) ({0}) \u03B4\u03B9\u03B1\u03C6\u03AD\u03C1\u03B5\u03B9 \u03B1\u03C0\u03CC \u03C4\u03B7\u03BD \u03B5\u03C4\u03B9\u03BA\u03AD\u03C4\u03B1 nm ({1}) +importerDL_error_edgelistrowparse=\u0391\u03B4\u03CD\u03BD\u03B1\u03C4\u03BF\u03BD \u03BD\u03B1 \u03B1\u03BD\u03B1\u03BB\u03CD\u03C3\u03BF\u03C5\u03BC\u03B5 \u03B1\u03C0\u03CC \u03C4\u03BF \u03C7\u03B1\u03C1\u03B1\u03BA\u03C4\u03B7\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC ''{0}'' \u03C3\u03C4\u03B7 \u03BB\u03AF\u03C3\u03C4\u03B1 \u03B1\u03BA\u03BC\u03CE\u03BD (edgelist) \u03C3\u03C4\u03B7 \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE {1} diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_es.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_es.properties index 02b99e9a28..e52f2f35aa 100644 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_es.properties +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_es.properties @@ -1,248 +1,137 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011-2012. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:21+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - fileType_GDF_Name=Archivos GDF (GUESS) - fileType_GEXF_Name=Archivos GEXF - fileType_NET_Name=Archivos NET (Pajek) - fileType_GraphML_Name=Archivos GraphML - fileType_GML_Name=Archivos GML - fileType_TLP_Name=Archivos TLP - -fileType_CSV_Name=Archivos CSV - +fileType_TGF_Name=Archivos TGF fileType_Edges_Name=Lista de aristas - fileType_GraphViz_Name=Archivos GraphViz - fileType_DL_Name=Archivos DL (UCINET) - fileType_VNA_Name=Archivos VNA - -importerGDF_error_dataformat1=El archivo debe comenzar con la l\u00ednea "nodedef> name" - +importerGDF_error_dataformat1=El archivo debe comenzar con la lνnea "nodedef> name" importerGDF_error_dataformat2=Mal formato de columna. Cada columna debe contener al menos un nombre. Los nombres de columna no deben contener ninguna coma. - importerGDF_error_dataformat3=Fallo al importar la columna ''{0}'' para el nodo ''{1}''. Error en el valor ''{2}''. - importerGDF_error_dataformat4=Fallo al establecer el atributo ''{1}'' de tipo ''{0}'' para el nodo {2}. - importerGDF_error_dataformat5=El tipo de datos ''{0}'' no ha sido reconocido, se va a usar 'string' en su lugar. - importerGDF_error_dataformat6=Tipo de columna no encontrado para ''{0}'', se va a usar 'string' en su lugar. - -importerGDF_error_dataformat7=La l\u00ednea ''{0}'' tiene m\u00e1s columnas de las definidas en la cabecera. Por favor verifica el n\u00famero de comas. - -importerGDF_error_dataformat8=La columna ''{0}'' del nodo no puede ser a\u00f1adida porque ya existe - -importerGDF_error_dataformat9=La columna ''{0}'' de la arista no puede ser a\u00f1adida porque ya existe - -importerTPL_error_dataformat1=Mal formato de arista en la l\u00ednea {0}. - -importerNET_error_dataformat1=El archivo debe comenzar con la l\u00ednea "*vertices". - -importerNET_error_dataformat2=L\u00ednea en blanco detectada en la l\u00ednea {0}. - -importerNET_error_dataformat3=N\u00famero desequilibrado (o demasiado alto) de comillas en la l\u00ednea {0}. - -importerNET_error_dataformat4=El n\u00famero de v\u00e9rtice ''{0}'' no est\u00e1 en el rango [1,{1}]. - -importerNET_error_dataformat5=Problema de conversi\u00f3n de coordenadas de v\u00e9rtice en la l\u00ednea {0}. Debe ser un n\u00famero en punto flotante. - -importerNET_error_dataformat6=Problema de conversi\u00f3n de tama\u00f1o de nodo en la l\u00ednea {0}. Debe ser un n\u00famero en formato float. - -importerNET_error_dataformat7=Problema de conversi\u00f3n de peso de arista en la l\u00ednea {0}. Debe ser un n\u00famero en formato float. - +importerGDF_error_dataformat7=La lνnea ''{0}'' tiene mαs columnas de las definidas en la cabecera. Por favor verifica el nϊmero de comas. +importerGDF_error_dataformat8=La columna ''{0}'' del nodo no puede ser aρadida porque ya existe +importerGDF_error_dataformat9=La columna ''{0}'' de la arista no puede ser aρadida porque ya existe +importerTPL_error_dataformat1=Mal formato de arista en la lνnea {0}. +importerNET_error_dataformat1=El archivo debe comenzar con la lνnea "*vertices". +importerNET_error_dataformat2=Lνnea en blanco detectada en la lνnea {0}. +importerNET_error_dataformat3=Nϊmero desequilibrado (o demasiado alto) de comillas en la lνnea {0}. +importerNET_error_dataformat4=El nϊmero de vιrtice ''{0}'' no estα en el rango [1,{1}]. +importerNET_error_dataformat5=Problema de conversiσn de coordenadas de vιrtice en la lνnea {0}. Debe ser un nϊmero en punto flotante. +importerNET_error_dataformat6=Problema de conversiσn de tamaρo de nodo en la lνnea {0}. Debe ser un nϊmero en formato float. +importerNET_error_dataformat7=Problema de conversiσn de peso de arista en la lνnea {0}. Debe ser un nϊmero en formato float. importerGraphML_error_syntax1=Error de sintaxis, el archivo debe comenzar con la marca . - importerGraphML_error_syntax2=Error de sintaxis, el nodo ''{0}'' debe estar anidado en una marca . - importerGraphML_error_attributeclass=Clase de atributo no encontrada o desconocida para el atributo ''{0}''. El atributo es ignorado. - importerGraphML_error_attributefor=Atributo ''for'' no encontrado o desconocido para el atributo ''{0}''. El atributo va a ser ignorado. - importerGraphML_error_attributetype1=Tipo no encontrado para el atributo ''{0}''. Se va a usar 'string' en su lugar. - importerGraphML_error_attributetype2=El tipo del atributo ''{0}'' no puede ser reconocido. El atributo va a ser ignorado. - importerGraphML_error_attributedefault=El valor por defecto para el atributo ''{0}'' no puede ser convertido al tipo ''{1}''. - importerGraphML_error_attributecolumn_exist=Un atributo con id ''{0}'' ya existe, el atributo es ignorado - -importerGraphML_error_attributeempty=Error de an\u00e1lisis de atributo, id faltante. - -importerGraphML_log_nodeproperty=Propiedad de nodo encontrada\: {0} - -importerGraphML_log_edgeproperty=Propiedad de arista encontrada\: {0}. - -importerGraphML_log_nodeattribute=Atributo de nodo encontrado\: ''{0}'' ({1}) - -importerGraphML_log_edgeattribute=Atributo de arista encontrado\: ''{0}'' ({1}) - -importerGraphML_log_default=Valor por defecto de atributo encontrado\: ''{0}'' ({1}) - -importerGraphML_error_datakey=Clave de dato no encontrada para el elemento con id\={0}. - -importerGraphML_error_datavalue=Error de tipo de valor de dato {0} para el elemento id\={1}. El valor no puede ser establecido como el atributo ''{2}''. - +importerGraphML_error_attributeempty=Error de anαlisis de atributo, id faltante. +importerGraphML_log_nodeproperty=Propiedad de nodo encontrada: {0} +importerGraphML_log_edgeproperty=Propiedad de arista encontrada: {0}. +importerGraphML_log_nodeattribute=Atributo de nodo encontrado: ''{0}'' ({1}) +importerGraphML_log_edgeattribute=Atributo de arista encontrado: ''{0}'' ({1}) +importerGraphML_log_default=Valor por defecto de atributo encontrado: ''{0}'' ({1}) +importerGraphML_error_datakey=Clave de dato no encontrada para el elemento con id={0}. +importerGraphML_error_datavalue=Error de tipo de valor de dato {0} para el elemento id={1}. El valor no puede ser establecido como el atributo ''{2}''. importerGraphML_error_nodeid=Identificador de nodo no encontrado. El nodo va a ser ignorado. - importerGraphML_error_defaultedgetype=El tipo por defecto de arista ''{0}'' no puede ser reconocido. Valor por defecto establecido como ''mixed''. - importerGraphML_error_edgetype=El tipo ''{0}'' de la arista ''{1}'' no puede ser reconocido. Se ha usado el valor por defecto. - importerGML_error_nodeidmissing=Identificador de nodo no encontrado. - importerGML_error_directedgraphparse=Valor inesperado para la propiedad 'directed' del grafo. - importerGML_error_directedparse=Valor inesperado para la propiedad 'directed' para la arista ''{0}'' - -importerGML_error_badparsing=An\u00e1lisis GML inv\u00e1lido - -importerTPL_error_badparsing=An\u00e1lisis TPL inv\u00e1lido - +importerGML_error_badparsing=Anαlisis GML invαlido +importerTPL_error_badparsing=Anαlisis TPL invαlido importerGEXF_error_attributeclass=Atributo ''class'' no encontrado o desconocido para el atributo ''{0}''. El atributo va a ser ignorado. - -importerGEXF_error_attributeempty=Error de an\u00e1lisis de atributo, id o tipo faltantes. - +importerGEXF_error_attributeempty=Error de anαlisis de atributo, id o tipo faltantes. importerGEXF_error_attributedefault=El valor por defecto para el atributo ''{0}'' no puede ser convertido al tipo ''{1}''. - -importerGEXF_error_attributeoptions=Los valores de opci\u00f3n para el atributo ''{0}'' no pueden ser convertidos al tipo ''{1}''. - +importerGEXF_error_attributeoptions=Los valores de opciσn para el atributo ''{0}'' no pueden ser convertidos al tipo ''{1}''. importerGEXF_error_attributecolumn_exist=Un atributo con id ''{0}'' ya existe, el atributo es ignorado - importerGEXF_error_attributetype1=Tipo de atributo no encontrado para el atributo ''{0}''. Se va a utilizar 'string' en su lugar. - importerGEXF_error_attributetype2=El tipo del atributo ''{0}'' no puede ser reconocido. El atributo va a ser ignorado. - -importerGEXF_error_datakey=Clave de dato (atributo ''for'') no encontrada para el elemento con id\={0} - -importerGEXF_error_datakey1=Clave de dato (atributo ''id'') no encontrada para el elemento con id\={0} - -importerGEXF_error_dataoptionsvalue=El valor ''{0}'' no es una opci\u00f3n para el elemento con id\={1}. El valor no puede ser establecido como el atributo ''{2}''. - -importerGEXF_error_datavalue=Error de tipo para el valor {0} para el elemento con id id\={1}. El valor no puede establecerse como el atributo ''{2}''. - +importerGEXF_error_datakey=Clave de dato (atributo ''for'') no encontrada para el elemento con id={0} +importerGEXF_error_datakey1=Clave de dato (atributo ''id'') no encontrada para el elemento con id={0} +importerGEXF_error_dataoptionsvalue=El valor ''{0}'' no es una opciσn para el elemento con id={1}. El valor no puede ser establecido como el atributo ''{2}''. +importerGEXF_error_datavalue=Error de tipo para el valor {0} para el elemento con id id={1}. El valor no puede establecerse como el atributo ''{2}''. +importerGEXF_error_idtype_error=El tipo de id ''{0}'' no puede ser reconocido, utiliza 'integer', 'long' o 'string' importerGEXF_error_defaultedgetype=El tipo por defecto de arista ''{0}'' no puede ser reconocido. Se va a utilizar ''undirected'' en su lugar. - importerGEXF_error_edgedouble=El tipo de arista ''double'' no es soportado actualmente. Se va a utilizar ''mixed'' en su lugar. - importerGEXF_error_edgetype=El tipo ''{0}'' de la arista ''{1}'' no puede ser reconocido. Se va a utilizar el tipo por defecto en su lugar. - importerGEXF_error_edgeid=Identificador de arista no encontrado. Un identificador ha sido generado. - importerGEXF_error_edgesource=Origen de la arista faltante. La arista es ignorada. - importerGEXF_error_edgetarget=Destino de la arista faltante. La arista es ignorada. - -importerGEXF_error_edgeweight=El peso de la arista con id ''{0}'' no es un n\u00famero en punto flotante. El peso va a ser ignorado. - +importerGEXF_error_edgeweight=El peso de la arista con id ''{0}'' no es un nϊmero en punto flotante. El peso va a ser ignorado. importerGEXF_error_nodeid=Identificador de nodo no encontrado. El nodo va a ser ignorado. - -importerGEXF_error_nodeposition=Posici\u00f3n de nodo ''{0}'' err\u00f3nea en ''{1}'' (no es un n\u00famero en punto flotante). - -importerGEXF_error_nodesize=Tama\u00f1o de nodo ''{0}'' err\u00f3neo en ''{1}'' (no es un n\u00famero en punto flotante). - +importerGEXF_error_nodeposition=Posiciσn de nodo ''{0}'' errσnea en ''{1}'' (no es un nϊmero en punto flotante). +importerGEXF_error_nodesize=Tamaρo de nodo ''{0}'' errσneo en ''{1}'' (no es un nϊmero en punto flotante). importerGEXF_error_notnode=El elemento ''{0}'' no es un nodo. El elemento va a ser ignorado. - -importerGEXF_error_pid_notfound=El padre con pid ''{0}'' no pudo ser encontrado para el nodo ''{1}''. - importerGEXF_error_parsingdatetype=El tipo de fecha ''{0}'' no puede ser reconocido. Se va a utilizar ''date'' en su lugar. - -importerGEXF_error_parsingmode=El modo de an\u00e1lisis ''{0}'' no puede ser reconocido. Se va a utilizar ''static'' en su lugar. - -importerGEXF_error_node_timeinterval_parseerror=El intervalo de tiempo para el nodo ''{0}'' no pudo ser analizado. Usa un formato de tipo 'Date' o 'Double'. - -importerGEXF_error_edge_timeinterval_parseerror=El intervalo de tiempo para la arista ''{0}'' no pudo ser analizado. Usa un formato de tipo 'Date' o 'Double'. - -importerGEXF_error_nodeattribute_timeinterval_parseerror=El intervalo de tiempo para el atributo del nodo ''{0}''. Usa un formato de tipo 'Date' o 'Double'. - -importerGEXF_error_edgeattribute_timeinterval_parseerror=El intervalo de tiempo para el atributo de la arista ''{0}''. Usa un formato de tipo 'Date' o 'Double'. - -importerGEXF_error_nodecolorvalue=El nodo con ''{1}'' tiene un canal de color err\u00f3neo ''{2}''\=''{0}''. Deber\u00eda ser 0 < ''{2}'' < 255. - -importerGEXF_error_edgecolorvalue=La arista con ''{1}'' tiene un canal de color err\u00f3neo ''{2}''\=''{0}''. Deber\u00eda ser 0 < ''{2}'' < 255. - -importerGEXF_error_nodeopacityvalue=El nodo con id ''{1}'' tiene una opacidad err\u00f3nea a\=''{0}''. Deber\u00eda ser 0.0 < a < 1.0. - -importerGEXF_error_edgeopacityvalue=La arista con id ''{1}'' tiene una opacidad err\u00f3nea a\=''{0}''. Deber\u00eda ser 0.0 < a < 1.0. - -importerGEXF_log_edgeeproperty=Propiedad de arista encontrada\: {0} - -importerGEXF_log_nodeproperty=Propiedad de nodo encontrada\: {0} - -importerGEXF_log_edgeattribute=Atributo de arista encontrado\: ''{0}'' ({1}) - -importerGEXF_log_nodeattribute=Atributo de nodo encontrado\: ''{0}'' ({1}) - -importerGEXF_log_default=Valor de atributo por defecto encontrado\: ''{0}'' ({1}) - -importerGEXF_log_options=Opciones de atributo por defecto encontradas\: ''{0}'' ({1}) - +importerGEXF_error_parsingmode=El modo de anαlisis ''{0}'' no puede ser reconocido. Se va a utilizar ''static'' en su lugar. +importerGEXF_error_node_timeinterval_parseerror=El intervalo de tiempo para el nodo ''{0}'' no pudo ser analizado. Usa un formato de tipo xsd:date, xsd:dateTime o Double. +importerGEXF_error_edge_timeinterval_parseerror=El intervalo de tiempo para la arista ''{0}'' no pudo ser analizado. Usa un formato de tipo xsd:date, xsd:dateTime o Double. +importerGEXF_error_node_timeintervals_parseerror=No se han podido analizar los intιrvalos temporales para el nodo ''{0}''. Usa un formato de tipo xsd:date, xsd:dateTime o Double. +importerGEXF_error_edge_timeintervals_parseerror=No se han podido analizar los intιrvalos temporales para la arista ''{0}''. Usa un formato de tipo xsd:date, xsd:dateTime o Double. +importerGEXF_error_nodeattribute_timeinterval_parseerror=El intervalo de tiempo para el atributo del nodo ''{0}'' no pudo ser analizado. Usa un formato de tipo xsd:date, xsd:dateTime o Double. +importerGEXF_error_edgeattribute_timeinterval_parseerror=El intervalo de tiempo para el atributo de la arista ''{0}'' no pudo ser analizado. Usa un formato de tipo xsd:date, xsd:dateTime o Double. +importerGEXF_error_node_timestamp_parseerror=No se ha podido analizar el timestamp para el nodo ''{0}''. Usa un formato de tipo xsd:date, xsd:dateTime o Double. +importerGEXF_error_edge_timestamp_parseerror=No se ha podido analizar el timestamp para la arista ''{0}''. Usa un formato de tipo xsd:date, xsd:dateTime o Double. +importerGEXF_error_node_timestamps_parseerror=No se han podido analizar los timestamps para el nodo ''{0}''. +importerGEXF_error_edge_timestamps_parseerror=No se han podido analizar los timestamps para la arista ''{0}'' +importerGEXF_error_nodeattribute_timestamp_parseerror=No se ha podido analizar el timestamp para el atributo del nodo ''{0}''. Usa un formato de tipo xsd:date, xsd:dateTime o Double. +importerGEXF_error_edgeattribute_timestamp_parseerror=No se ha podido analizar el timestamp para el atributo de la arista ''{0}''. Usa un formato de tipo xsd:date, xsd:dateTime o Double. +importerGEXF_error_nodeattribute_timeset_parseerror=No se han podido analizar los timestamps o intιrvalos del atributo del nodo ''{0}''. +importerGEXF_error_edgeattribute_timeset_parseerror=No se han podido analizar los timestamps o intιrvalos del atributo de la arista ''{0}''. +importerGEXF_error_nodecolorvalue=El nodo con ''{1}'' tiene un canal de color errσneo ''{2}''=''{0}''. Deberνa ser 0 < ''{2}'' < 255. +importerGEXF_error_edgecolorvalue=La arista con ''{1}'' tiene un canal de color errσneo ''{2}''=''{0}''. Deberνa ser 0 < ''{2}'' < 255. +importerGEXF_error_nodeopacityvalue=El nodo con id ''{1}'' tiene una opacidad errσnea a=''{0}''. Deberνa ser 0.0 < a < 1.0. +importerGEXF_error_edgeopacityvalue=La arista con id ''{1}'' tiene una opacidad errσnea a=''{0}''. Deberνa ser 0.0 < a < 1.0. +importerGEXF_error_node_open_interval=El nodo con id ''{0}'' utiliza intιrvalos abiertos, considerados obsoletos. +importerGEXF_error_edge_open_interval=La arista con id ''{0}'' utiliza intιrvalos abiertos, considerados obsoletos. +importerGEXF_error_slice_bound_missing=Timestamp o intιrvalo faltante en la etiqueta +importerGEXF_error_pid=El nodo con id ''{0}'' define un padre usando in pid. El soporte para grafos jerαrquicos estα obsoleto y serα ignorado. +importerGEXF_error_timezone_parseerror=La zona horaria ''{0}'' no pudo ser reconocido +importerGEXF_error_timerepresentation_intervalerror=La representaciσn temporal es 'timestamp' de forma que no se pueden utilizar intιrvalos. Establece la representaciσn temporal a 'interval' en la etiqueta . +importerGEXF_error_timerepresentation_timestamperror=La representaciσn temporal es 'interval' de forma que no se pueden utilizar timestamps. Establece la representaciσn temporal a 'timestamp' en la etiqueta . +importerGEXF_log_edgeeproperty=Propiedad de arista encontrada: {0} +importerGEXF_log_nodeproperty=Propiedad de nodo encontrada: {0} +importerGEXF_log_edgeattribute=Atributo de arista encontrado: ''{0}'' ({1}) +importerGEXF_log_nodeattribute=Atributo de nodo encontrado: ''{0}'' ({1}) +importerGEXF_log_default=Valor de atributo por defecto encontrado: ''{0}'' ({1}) +importerGEXF_log_options=Opciones de atributo por defecto encontradas: ''{0}'' ({1}) importerGEXF_log_version10=GEXF version 1.0 (obsoleto) - importerGEXF_log_version11=GEXF version 1.1 (obsoleto) - -importerGEXF_log_version12=GEXF versi\u00f3n 1.2 - +importerGEXF_log_version12=GEXF versiσn 1.2 importerGEXF_log_version13=GEXF version 1.3 - -importerGEXF_log_version_undef=Versi\u00f3n de GEXF no definida. Analizador 1.3 usado. - -importerGEXF_log_dynamic_weight=Columna de peso din\u00e1mico encontrada - -importerDL_error_firstline=La primera l\u00ednea de un archivo DL debe comenzar con 'DL' - +importerGEXF_log_version_undef=Versiσn de GEXF no definida. Analizador 1.3 usado. +importerGEXF_log_dynamic_weight=Columna de peso dinαmico encontrada +importerDL_error_firstline=La primera lνnea de un archivo DL debe comenzar con 'DL' importerDL_error_unknowntag=Etiqueta de cabecera desconocida ''{0}'' - importerDL_error_formatmissing=La etiqueta 'format' de DL no puede ser encontrada, 'fullmatrix' es utilizada por defecto. - -importerDL_error_badformat=El formato ''{0}'' no est\u00e1 soportado, proporciona 'format\=edgelist1' o 'format\=fullmatrix' solamente. - -importerDL_error_nmissing=La cabecera del archivo DL debe contener la etiqueta 'n \= ' - -importerDL_error_mmissing=La cabecera del archivo DL debe contener la etiqueta 'm \= ' - -importerDL_error_labelscount=El n\u00famero de etiquetas ({0}) es diferente de la etiqueta n ({1}) - +importerDL_error_badformat=El formato ''{0}'' no estα soportado, proporciona 'format=edgelist1' o 'format=fullmatrix' solamente. +importerDL_error_nmissing=La cabecera del archivo DL debe contener la etiqueta 'n = ' +importerDL_error_mmissing=La cabecera del archivo DL debe contener la etiqueta 'm = ' +importerDL_error_labelscount=El nϊmero de etiquetas ({0}) es diferente de la etiqueta n ({1}) importerDL_error_nodata=No se pudo encontrar linea de datos. - -importerDL_error_matrixrowscount=El n\u00famero de filas de matriz ({0}) es mayor que el de la etiqueta n ({1}) - -importerDL_error_matrixrowscount2=El n\u00famero de filas de matriz ({0}) es menor que el de la etiqueta n ({1}) - -importerDL_error_matriciescount=El n\u00famero de conjunto de matricies ({0}) es diferente de la etiqueta nm ({1}) - -importerDL_error_matrixentriescount=El n\u00famero de entradas de matriz en la fila {0} de la matriz {1} tiene m\u00e1s entradas de las permitidas (l\u00ednea {2} del archivo DL) - -importerDL_error_weightparseerror=Imposible analizar el peso ''{0}'' en la matriz {1} en la l\u00ednea {2} - -importerDL_error_edgelistssetscount=El n\u00famero de conjuntos de listas de aristas ({0}) es diferente de la etiqueta nm ({1}) - -importerDL_error_edgelistrowparse=Imposible analizar id ''{0}'' en la lista de aristas en la l\u00ednea {1} - -importerDL_error_edgeparseweight=Imposible analizar el peso ''{0}'' en la lista de aristas en la l\u00ednea {1} - +importerDL_error_matrixrowscount=El nϊmero de filas de matriz ({0}) es mayor que el de la etiqueta n ({1}) +importerDL_error_matrixrowscount2=El nϊmero de filas de matriz ({0}) es menor que el de la etiqueta n ({1}) +importerDL_error_matriciescount=El nϊmero de conjunto de matricies ({0}) es diferente de la etiqueta nm ({1}) +importerDL_error_matrixentriescount=El nϊmero de entradas de matriz en la fila {0} de la matriz {1} tiene mαs entradas de las permitidas (lνnea {2} del archivo DL) +importerDL_error_weightparseerror=Imposible analizar el peso ''{0}'' en la matriz {1} en la lνnea {2} +importerDL_error_edgelistssetscount=El nϊmero de conjuntos de listas de aristas ({0}) es diferente de la etiqueta nm ({1}) +importerDL_error_edgelistrowparse=Imposible analizar id ''{0}'' en la lista de aristas en la lνnea {1} +importerDL_error_edgeparseweight=Imposible analizar el peso ''{0}'' en la lista de aristas en la lνnea {1} importerDOT_error_nothingfound=No se pudo encontrar 'graph' o 'digraph' - -importerDOT_error_labelunreachable=Imposible encontrar etiqueta en la l\u00ednea {0} - -importerDOT_error_colorunreachable=Imposible encontrar color en la l\u00ednea {0} - -importerDOT_error_edgeparsing=Imposible analizar la arista en la l\u00ednea {0} - -importerDOT_error_posunreachable=Imposible analizar la posici\u00f3n del nodo en la l\u00ednea {0}. Debe ser pos\="x, y". - -importerDOT_error_weightunreachable=Imposible analizar el peso de la arista en la l\u00ednea {0} - -importerDOT_log_nodeattribute=Atributo de nodo encontrado''{0}'' ({1}) +importerDOT_error_labelunreachable=Imposible encontrar etiqueta en la lνnea {0} +importerDOT_error_colorunreachable=Imposible encontrar color en la lνnea {0} +importerDOT_error_posunreachable=Imposible analizar la posiciσn del nodo en la lνnea {0}. Debe ser pos="x, y". +importerDOT_error_weightunreachable=Imposible analizar el peso de la arista en la lνnea {0} +importerTGF_error_emptynodes=No hay nodos encontrados +importerGraphML_error_graphattributes=Atributos del grafo ''{0}'' ignorados por no ser soportados por Gephi diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_fr.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_fr.properties index 3245ea9a88..8b0c301fb7 100644 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_fr.properties +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_fr.properties @@ -1,248 +1,137 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:27+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - fileType_GDF_Name=Fichiers GDF (GUESS) - fileType_GEXF_Name=Fichiers GEXF - fileType_NET_Name=Fichiers NET (Pajek) - fileType_GraphML_Name=Fichiers GraphML - fileType_GML_Name=Fichiers GML - fileType_TLP_Name=Fichiers TLP - -fileType_CSV_Name=Fichiers CSV - +fileType_TGF_Name=Fichiers TGF fileType_Edges_Name=Liste de Liens - fileType_GraphViz_Name=Fichiers GraphViz - fileType_DL_Name=Fichiers DL (UCINET) - fileType_VNA_Name=Fichiers VNA - importerGDF_error_dataformat1=Le fichier doit commencer par la ligne "nodedef> name". - importerGDF_error_dataformat2=Mauvais formatage de colonne. Chaque colonne doit contenir au moins un nom. Ces noms ne doivent contenir aucune virgule. - -importerGDF_error_dataformat3=\u00c9chec de l'import de la colonne ''{0}'' pour le noeud ''{1}'' . Erreur \u00e0 la valeur ''{2}''. - -importerGDF_error_dataformat4=\u00c9chec de l'affectation de l'attribut ''{1}'' de type ''{0}'' pour le noeud {2}. - -importerGDF_error_dataformat5=Type de donn\u00e9es ''{0}'' non reconnu, 'string' est utilis\u00e9 \u00e0 la place. - -importerGDF_error_dataformat6=Type de colonne introuvable pour ''{0}'', 'string' est utilis\u00e9 \u00e0 la place. - -importerGDF_error_dataformat7=La ligne ''{0}'' a plus de colonnes que d\u00e9fini dans l'en-t\u00eate. Veuillez v\u00e9rifier le nombre de virgules. - -importerGDF_error_dataformat8=La colonne de noeuds ''{0}'' ne peut \u00eatre ajout\u00e9e car elle existe d\u00e9j\u00e0. - -importerGDF_error_dataformat9=La colonne de liens ''{0}'' ne peut \u00eatre ajout\u00e9e car elle existe d\u00e9j\u00e0. - -importerTPL_error_dataformat1=Mauvais formatage du lien \u00e0 la ligne {0}. - +importerGDF_error_dataformat3=Ιchec de l'import de la colonne ''{0}'' pour le noeud ''{1}'' . Erreur ΰ la valeur ''{2}''. +importerGDF_error_dataformat4=Ιchec de l'affectation de l'attribut ''{1}'' de type ''{0}'' pour le noeud {2}. +importerGDF_error_dataformat5=Type de donnιes ''{0}'' non reconnu, 'string' est utilisι ΰ la place. +importerGDF_error_dataformat6=Type de colonne introuvable pour ''{0}'', 'string' est utilisι ΰ la place. +importerGDF_error_dataformat7=La ligne ''{0}'' a plus de colonnes que dιfini dans l'en-tκte. Veuillez vιrifier le nombre de virgules. +importerGDF_error_dataformat8=La colonne de noeuds ''{0}'' ne peut κtre ajoutιe car elle existe dιjΰ. +importerGDF_error_dataformat9=La colonne de liens ''{0}'' ne peut κtre ajoutιe car elle existe dιjΰ. +importerTPL_error_dataformat1=Mauvais formatage du lien ΰ la ligne {0}. importerNET_error_dataformat1=Le fichier doit commencer par la ligne "*vertices". - -importerNET_error_dataformat2=Ligne vide d\u00e9tect\u00e9e \u00e0 la ligne {0}. - -importerNET_error_dataformat3=Guillemets d\u00e9s\u00e9quilibr\u00e9s ou trop nombreux \u00e0 la ligne {0}. - -importerNET_error_dataformat4=Num\u00e9ro de sommet ''{0}'' hors de la plage [1,{1}]. - -importerNET_error_dataformat5=Probl\u00e8me lors de la conversion des coordonn\u00e9es du sommet \u00e0 la ligne {0}. Ils doivent \u00eatre des nombres \u00e0 virgule flottante. - -importerNET_error_dataformat6=Probl\u00e8me de conversion de taille de noeud \u00e0 la ligne {0}. Elle doit \u00eatre un nombre flottant. - -importerNET_error_dataformat7=Erreur de parsing du poids du lien \u00e0 la ligne {0}. Il doit \u00eatre un nombre flottant. - +importerNET_error_dataformat2=Ligne vide dιtectιe ΰ la ligne {0}. +importerNET_error_dataformat3=Guillemets dιsιquilibrιs ou trop nombreux ΰ la ligne {0}. +importerNET_error_dataformat4=Numιro de sommet ''{0}'' hors de la plage [1,{1}]. +importerNET_error_dataformat5=Problθme lors de la conversion des coordonnιes du sommet ΰ la ligne {0}. Ils doivent κtre des nombres ΰ virgule flottante. +importerNET_error_dataformat6=Problθme de conversion de taille de noeud ΰ la ligne {0}. Elle doit κtre un nombre flottant. +importerNET_error_dataformat7=Erreur de parsing du poids du lien ΰ la ligne {0}. Il doit κtre un nombre flottant. importerGraphML_error_syntax1=Erreur de syntaxe, le fichier doit commencer par la balise . - -importerGraphML_error_syntax2=Erreur de syntaxe, le noeud ''{0}'' doit \u00eatre encapsul\u00e9 dans une balise . - -importerGraphML_error_attributeclass=Classe d'attribut non trouv\u00e9 ou inconnu pour l'attribut ''{0}''. L'attribut est ignor\u00e9. - -importerGraphML_error_attributefor=Attribut ''for'' manquant ou inconnu pour l'attribut ''{0}''. L'attribut est ignor\u00e9. - -importerGraphML_error_attributetype1=Type manquant pour l'attribut ''{0}''. 'string' est utilis\u00e9 par d\u00e9faut. - -importerGraphML_error_attributetype2=Type non reconnu pour l'attribut ''{0}''. L'attribut est ignor\u00e9. - -importerGraphML_error_attributedefault=Valeur par d\u00e9faut de l'attribut ''{0}'' non convertible vers le type ''{1}''. - -importerGraphML_error_attributecolumn_exist=L'attribut d'id ''{0}' existant d\u00e9j\u00e0, il est ignor\u00e9. - +importerGraphML_error_syntax2=Erreur de syntaxe, le noeud ''{0}'' doit κtre encapsulι dans une balise . +importerGraphML_error_attributeclass=Classe d'attribut non trouvι ou inconnu pour l'attribut ''{0}''. L'attribut est ignorι. +importerGraphML_error_attributefor=Attribut ''for'' manquant ou inconnu pour l'attribut ''{0}''. L'attribut est ignorι. +importerGraphML_error_attributetype1=Type manquant pour l'attribut ''{0}''. 'string' est utilisι par dιfaut. +importerGraphML_error_attributetype2=Type non reconnu pour l'attribut ''{0}''. L'attribut est ignorι. +importerGraphML_error_attributedefault=Valeur par dιfaut de l'attribut ''{0}'' non convertible vers le type ''{1}''. +importerGraphML_error_attributecolumn_exist=L'attribut d'id ''{0}' existant dιjΰ, il est ignorι. importerGraphML_error_attributeempty=Erreur de parcours des attributs, id manquant. - -importerGraphML_log_nodeproperty=Propri\u00e9t\u00e9 de noeud trouv\u00e9 \: {0} - -importerGraphML_log_edgeproperty=Propri\u00e9t\u00e9 de lien trouv\u00e9 \: {0} - -importerGraphML_log_nodeattribute=Attribut de noeud trouv\u00e9 \: ''{0}'' ({1}). - -importerGraphML_log_edgeattribute=Attribut de lien trouv\u00e9 \: ''{0}'' ({1}). - -importerGraphML_log_default=Valeur d'attribut par d\u00e9faut \: ''{0}'' ({1}) - -importerGraphML_error_datakey=Cl\u00e9 de donn\u00e9e manquante pour l'\u00e9l\u00e9ment id\={0}. - -importerGraphML_error_datavalue=Erreur de typage pour la valeur {0} de l'\u00e9l\u00e9ment id\={1}. La valeur ne peut \u00eatre affect\u00e9e \u00e0 l'attribut ''{2}''. - -importerGraphML_error_nodeid=Identifiant de noeud manquant. Le noeud est ignor\u00e9. - -importerGraphML_error_defaultedgetype=Type de lien par d\u00e9faut ''{0}'' non reconnu. Mis \u00e0 ''mixed'' par d\u00e9faut. - -importerGraphML_error_edgetype=Le type ''{0}'' du lien ''{1}'' n'est pas reconnu. Il est mis \u00e0 la valeur par d\u00e9faut. - +importerGraphML_log_nodeproperty=Propriιtι de noeud trouvι : {0} +importerGraphML_log_edgeproperty=Propriιtι de lien trouvι : {0} +importerGraphML_log_nodeattribute=Attribut de noeud trouvι : ''{0}'' ({1}). +importerGraphML_log_edgeattribute=Attribut de lien trouvι : ''{0}'' ({1}). +importerGraphML_log_default=Valeur d'attribut par dιfaut : ''{0}'' ({1}) +importerGraphML_error_datakey=Clι de donnιe manquante pour l'ιlιment id={0}. +importerGraphML_error_datavalue=Erreur de typage pour la valeur {0} de l'ιlιment id={1}. La valeur ne peut κtre affectιe ΰ l'attribut ''{2}''. +importerGraphML_error_nodeid=Identifiant de noeud manquant. Le noeud est ignorι. +importerGraphML_error_defaultedgetype=Type de lien par dιfaut ''{0}'' non reconnu. Mis ΰ ''mixed'' par dιfaut. +importerGraphML_error_edgetype=Le type ''{0}'' du lien ''{1}'' n'est pas reconnu. Il est mis ΰ la valeur par dιfaut. importerGML_error_nodeidmissing=Identifiant de noeud manquant. - -importerGML_error_directedgraphparse=Valeur inattendue pour la propri\u00e9t\u00e9 de graphe 'directed'. - -importerGML_error_directedparse=Valeur inattendue pour la propri\u00e9t\u00e9 'directed' du lien ''{0}''. - +importerGML_error_directedgraphparse=Valeur inattendue pour la propriιtι de graphe 'directed'. +importerGML_error_directedparse=Valeur inattendue pour la propriιtι 'directed' du lien ''{0}''. importerGML_error_badparsing=Parsing GML invalide. - importerTPL_error_badparsing=Parsing TLP invalide. - -importerGEXF_error_attributeclass=Attribut ''class'' manquant ou inconnu pour l'attribut ''{0}''. L'attribut est ignor\u00e9. - +importerGEXF_error_attributeclass=Attribut ''class'' manquant ou inconnu pour l'attribut ''{0}''. L'attribut est ignorι. importerGEXF_error_attributeempty=Erreur de parcours des attributs, id manquant. - -importerGEXF_error_attributedefault=Valeur par d\u00e9faut de l'attribut ''{0}'' non convertible vers le type ''{1}''. - +importerGEXF_error_attributedefault=Valeur par dιfaut de l'attribut ''{0}'' non convertible vers le type ''{1}''. importerGEXF_error_attributeoptions=Valeurs d'option de l'attribut ''{0}'' non convertibles vers le type ''{1}''. - -importerGEXF_error_attributecolumn_exist=Attribut d'id ''{0}'' d\u00e9j\u00e0 existant, il est ignor\u00e9. - -importerGEXF_error_attributetype1=Type de l'attribut ''{0}'' introuvable. 'string' est utilis\u00e9 par d\u00e9faut. - -importerGEXF_error_attributetype2=Type de l'attribut ''{0}'' non reconnu. L'attribut est ignor\u00e9. - -importerGEXF_error_datakey=Cl\u00e9 de donn\u00e9e (attribut ''for'') manquant pour l'\u00e9l\u00e9ment id\={0}. - -importerGEXF_error_datakey1=Cl\u00e9 de donn\u00e9e (attribut ''id'') manquant pour l'\u00e9l\u00e9ment id\={0}. - -importerGEXF_error_dataoptionsvalue=La valeur de donn\u00e9e ''{0}'' n'est pas une option pour l'\u00e9l\u00e9ment id\={1}. La valeur ne peut \u00eatre affect\u00e9e \u00e0 l'attribut ''{2}''. - -importerGEXF_error_datavalue=Mauvais type de donn\u00e9e pour la valeur ''{0}'' de l'\u00e9l\u00e9ment id\={1}. La valeur ne peut \u00eatre affect\u00e9e \u00e0 l'attribut ''{2}''. - -importerGEXF_error_defaultedgetype=Type de liens par d\u00e9faut ''{0}'' inconnu. Type ''undirected'' utilis\u00e9 par d\u00e9faut. - -importerGEXF_error_edgedouble=Type de liens ''double'' actuellement non support\u00e9. Type ''mixed'' utilis\u00e9 par d\u00e9faut. - -importerGEXF_error_edgetype=Type ''{0}'' du lien ''{1}'' inconnu. Valeur par d\u00e9faut utilis\u00e9e \u00e0 la place. - -importerGEXF_error_edgeid=Identifiant de lien manquant. Un id a \u00e9t\u00e9 g\u00e9n\u00e9r\u00e9. - -importerGEXF_error_edgesource=Source du lien manquant. Le lien est ignor\u00e9. - -importerGEXF_error_edgetarget=Destination du lien manquant. Le lien est ignor\u00e9. - -importerGEXF_error_edgeweight=Le poids du lien ''{0}'' n'est pas de type float. Le poids est ignor\u00e9. - -importerGEXF_error_nodeid=Identifiant du noeud ''{0}'' manquant. Le noeud est ignor\u00e9. - -importerGEXF_error_nodeposition=Position du noeud ''{0}'' erron\u00e9e \u00e0 ''{1}'' (pas de type float) - -importerGEXF_error_nodesize=Taille du noeud ''{0}'' erron\u00e9e (pas de type float) - -importerGEXF_error_notnode=Element ''{0}'' n'est pas un noeud. El\u00e9ment ignor\u00e9. - -importerGEXF_error_pid_notfound=Parent de pid ''{0}'' introuvable pour le noeud ''{1}''. - -importerGEXF_error_parsingdatetype=Type de date ''{0}'' inconnu. Type ''date'' utilis\u00e9 par d\u00e9faut. - -importerGEXF_error_parsingmode=Mode de parsing ''{0}'' inconnu. Mode ''static'' utilis\u00e9 pa d\u00e9faut. - -importerGEXF_error_node_timeinterval_parseerror=Intervalle de temps du noeud ''{0}'' non analys\u00e9. Utilisez le format Date ou Double. - -importerGEXF_error_edge_timeinterval_parseerror=Intervalle de temps du lien ''{0}'' non analys\u00e9. Utilisez le format Date ou Double. - -importerGEXF_error_nodeattribute_timeinterval_parseerror=Intervalle de temps de l'attribut du noeud ''{0}'' non analys\u00e9. Utilisez le format Date ou Double. - -importerGEXF_error_edgeattribute_timeinterval_parseerror=Intervalle de temps de l'attribut du lien ''{0}'' non analys\u00e9. Utilisez le format Date ou Double. - -importerGEXF_error_nodecolorvalue=Canal de couleur erron\u00e9 ''{2}''\=''{0}'' sur le noeud ''{1}''. Devrait \u00eatre 0 < ''{2}'' < 255. - -importerGEXF_error_edgecolorvalue=Canal de couleur erron\u00e9 ''{2}''\=''{0}'' sur le lien ''{1}''. Devrait \u00eatre 0 < ''{2}'' < 255. - -importerGEXF_error_nodeopacityvalue=Transparence erron\u00e9e a\=''{0}'' sur le noeud ''{1}''. Devra\u00eet \u00eatre 0.0 < a < 1.0. - -importerGEXF_error_edgeopacityvalue=Transparence erron\u00e9e a\=''{0}'' sur le lien ''{1}''. Devra\u00eet \u00eatre 0.0 < a < 1.0. - -importerGEXF_log_edgeeproperty=Propri\u00e9t\u00e9 de lien trouv\u00e9e \: {0} - -importerGEXF_log_nodeproperty=Propri\u00e9t\u00e9 de noeud trouv\u00e9e \: {0} - -importerGEXF_log_edgeattribute=Attribut de lien trouv\u00e9 \: ''{0}'' ({1}) - -importerGEXF_log_nodeattribute=Attribut de noeud trouv\u00e9 \: ''{0}'' ({1}) - -importerGEXF_log_default=Valeur d'attribut par d\u00e9faut trouv\u00e9e \: ''{0}'' ({1}) - -importerGEXF_log_options=Options d'attribut trouv\u00e9es \: ''{0}'' ({1}) - -importerGEXF_log_version10=GEXF version 1.0 (d\u00e9sapprouv\u00e9) - +importerGEXF_error_attributecolumn_exist=Attribut d'id ''{0}'' dιjΰ existant, il est ignorι. +importerGEXF_error_attributetype1=Type de l'attribut ''{0}'' introuvable. 'string' est utilisι par dιfaut. +importerGEXF_error_attributetype2=Type de l'attribut ''{0}'' non reconnu. L'attribut est ignorι. +importerGEXF_error_datakey=Clι de donnιe (attribut ''for'') manquant pour l'ιlιment id={0}. +importerGEXF_error_datakey1=Clι de donnιe (attribut ''id'') manquant pour l'ιlιment id={0}. +importerGEXF_error_dataoptionsvalue=La valeur de donnιe ''{0}'' n'est pas une option pour l'ιlιment id={1}. La valeur ne peut κtre affectιe ΰ l'attribut ''{2}''. +importerGEXF_error_datavalue=Mauvais type de donnιe pour la valeur ''{0}'' de l'ιlιment id={1}. La valeur ne peut κtre affectιe ΰ l'attribut ''{2}''. +importerGEXF_error_idtype_error=Type de donnιes ''{0}'' non reconnu, utiliser 'integer', 'long' ou 'string' ΰ la place. +importerGEXF_error_defaultedgetype=Type de liens par dιfaut ''{0}'' inconnu. Type ''undirected'' utilisι par dιfaut. +importerGEXF_error_edgedouble=Type de liens ''double'' actuellement non supportι. Type ''mixed'' utilisι par dιfaut. +importerGEXF_error_edgetype=Type ''{0}'' du lien ''{1}'' inconnu. Valeur par dιfaut utilisιe ΰ la place. +importerGEXF_error_edgeid=Identifiant de lien manquant. Un id a ιtι gιnιrι. +importerGEXF_error_edgesource=Source du lien manquant. Le lien est ignorι. +importerGEXF_error_edgetarget=Destination du lien manquant. Le lien est ignorι. +importerGEXF_error_edgeweight=Le poids du lien ''{0}'' n'est pas de type float. Le poids est ignorι. +importerGEXF_error_nodeid=Identifiant du noeud ''{0}'' manquant. Le noeud est ignorι. +importerGEXF_error_nodeposition=Position du noeud ''{0}'' erronιe ΰ ''{1}'' (pas de type float) +importerGEXF_error_nodesize=Taille du noeud ''{0}'' erronιe (pas de type float) +importerGEXF_error_notnode=Element ''{0}'' n'est pas un noeud. Elιment ignorι. +importerGEXF_error_parsingdatetype=Type de date ''{0}'' inconnu. Type ''date'' utilisι par dιfaut. +importerGEXF_error_parsingmode=Mode de parsing ''{0}'' inconnu. Mode ''static'' utilisι pa dιfaut. +importerGEXF_error_node_timeinterval_parseerror=Intervalle de temps du noeud ''{0}'' non analysι. Utilisez le format Date ou Double. +importerGEXF_error_edge_timeinterval_parseerror=Intervalle de temps du lien ''{0}'' non analysι. Utilisez le format Date ou Double. +importerGEXF_error_node_timeintervals_parseerror=Intervalles de temps du noeud ''{0}'' non analysι. Utilisez les formats xsd:date, xsd:dateTime ou Double. +importerGEXF_error_edge_timeintervals_parseerror=Intervalles de temps du lien ''{0}'' non analysι. Utilisez les formats xsd:date, xsd:dateTime ou Double. +importerGEXF_error_nodeattribute_timeinterval_parseerror=Intervalle de temps de l'attribut du noeud ''{0}'' non analysι. Utilisez le format Date ou Double. +importerGEXF_error_edgeattribute_timeinterval_parseerror=Intervalle de temps de l'attribut du lien ''{0}'' non analysι. Utilisez le format Date ou Double. +importerGEXF_error_node_timestamp_parseerror=Timestamp du n\u0153ud ''{0}'' non analysι. Utilisez le format xsd:date, xsd:dateTime ou Double. +importerGEXF_error_edge_timestamp_parseerror=Timestamp du lien ''{0}'' non analysι. Utilisez le format xsd:date, xsd:dateTime ou Double. +importerGEXF_error_node_timestamps_parseerror=Timestamp du n\u0153ud ''{0}'' non analysι. +importerGEXF_error_edge_timestamps_parseerror=Timestamp du lien ''{0}'' non analysι. +importerGEXF_error_nodeattribute_timestamp_parseerror=Timestamp de l'attribut du n\u0153ud ''{0}'' non analysι. Utilisez le format xsd:date, xsd:dateTime ou Double. +importerGEXF_error_edgeattribute_timestamp_parseerror=Timestamp de l'attribut du lien ''{0}'' non analysι. Utilisez le format xsd:date, xsd:dateTime ou Double. +importerGEXF_error_nodeattribute_timeset_parseerror=Timestamps ou intervalles du n\u0153ud ''{0}'' non analysιs. +importerGEXF_error_edgeattribute_timeset_parseerror=Timestamps ou intervalles du lien ''{0}'' non analysιs. +importerGEXF_error_nodecolorvalue=Canal de couleur erronι ''{2}''=''{0}'' sur le noeud ''{1}''. Devrait κtre 0 < ''{2}'' < 255. +importerGEXF_error_edgecolorvalue=Canal de couleur erronι ''{2}''=''{0}'' sur le lien ''{1}''. Devrait κtre 0 < ''{2}'' < 255. +importerGEXF_error_nodeopacityvalue=Transparence erronιe a=''{0}'' sur le noeud ''{1}''. Devraξt κtre 0.0 < a < 1.0. +importerGEXF_error_edgeopacityvalue=Transparence erronιe a=''{0}'' sur le lien ''{1}''. Devraξt κtre 0.0 < a < 1.0. +importerGEXF_error_node_open_interval=Le n\u0153ud d'id ''{0}'' utilise des intervalles ouverts, devenus obsolθtes. +importerGEXF_error_edge_open_interval=Le lien d'id ''{0}'' utilise des intervalles ouverts, devenus obsolθtes. +importerGEXF_error_slice_bound_missing=Attribut de timestamp ou d'intervalle manquant sur +importerGEXF_error_pid=Le n\u0153ud d'id '' {0} '' dιfinit un parent en utilisant un pid. Le support de graphes hiιrarchiques est obsolθte et sera ignorι. +importerGEXF_error_timezone_parseerror=Fuseau horaire "{0}" non reconnu +importerGEXF_error_timerepresentation_intervalerror=La reprιsentation temporelle est dιfinie comme 'timestamp', de sorte que les intervalles ne peuvent pas κtre utilisιs. Rιglez la reprιsentation du temps sur 'interval' dans . +importerGEXF_error_timerepresentation_timestamperror=La reprιsentation temporelle est dιfinie comme 'interval', de sorte que les timestamps ne peuvent pas κtre utilisιs. Rιglez la reprιsentation du temps sur 'timestamp' dans 1. +importerGEXF_log_edgeeproperty=Propriιtι de lien trouvιe : {0} +importerGEXF_log_nodeproperty=Propriιtι de noeud trouvιe : {0} +importerGEXF_log_edgeattribute=Attribut de lien trouvι : ''{0}'' ({1}) +importerGEXF_log_nodeattribute=Attribut de noeud trouvι : ''{0}'' ({1}) +importerGEXF_log_default=Valeur d'attribut par dιfaut trouvιe : ''{0}'' ({1}) +importerGEXF_log_options=Options d'attribut trouvιes : ''{0}'' ({1}) +importerGEXF_log_version10=GEXF version 1.0 (dιsapprouvι) importerGEXF_log_version11=GEXF version 1.1 - importerGEXF_log_version12=GEXF version 1.2 - -!importerGEXF_log_version13= - -!importerGEXF_log_version_undef= - -importerGEXF_log_dynamic_weight=Colonne de poids dynamique trouv\u00e9. - -importerDL_error_firstline=La premi\u00e8re ligne d'un fichier DL doit commencer par 'DL' - -importerDL_error_unknowntag=Rep\u00e8re d'en-t\u00eate inconnue ''{0}' - -importerDL_error_formatmissing=Rep\u00e8re DL 'format' manquante, 'fullmatrix' est utilis\u00e9 par d\u00e9faut. - -importerDL_error_badformat=Format ''{0}'' non support\u00e9, proposez 'format\=edgelist1' ou 'format\=fullmatrix' uniquement. - -importerDL_error_nmissing=L'en-t\u00eate du ficher DL doit contenir la rep\u00e8re 'n \= ' - -importerDL_error_mmissing=L'en-t\u00eate du ficher DL doit contenir le rep\u00e8re 'm \= ' - -importerDL_error_labelscount=Nombre de labels ({0}) diff\u00e9rent du rep\u00e8re n ({1}) - -importerDL_error_nodata=Aucune ligne de donn\u00e9es trouv\u00e9e. - -importerDL_error_matrixrowscount=Nombre de lignes de matrice ({0}) plus grand que le rep\u00e8re n ({1}) - -importerDL_error_matrixrowscount2=Nombre de lignes de matrice ({0}) plus petit que le rep\u00e8re n ({1}) - -importerDL_error_matriciescount=Nombre d'ensembles de matrices ({0}) plus grand que le rep\u00e8re nm ({1}) - -importerDL_error_matrixentriescount=Nombre d'entr\u00e9es sur la ligne {0} de la matrice {1} plus grand que le nombre autoris\u00e9 (ligne {2} du fichier DL) - -importerDL_error_weightparseerror=Impossible d'analyser le poids ''{0}'' sur la matrice {1} \u00e0 la ligne {2} - -importerDL_error_edgelistssetscount=Nombre d'ensembles de listes de liens ({0}) diff\u00e9rent du rep\u00e8re nm ({1}) - +importerGEXF_log_version13=GEXF version 1.3 +importerGEXF_log_version_undef=Version indιterminιe du GEXF. Le parseur de la version 1.3 est utilisι. +importerGEXF_log_dynamic_weight=Colonne de poids dynamique trouvι. +importerDL_error_firstline=La premiθre ligne d'un fichier DL doit commencer par 'DL' +importerDL_error_unknowntag=Repθre d'en-tκte inconnue ''{0}' +importerDL_error_formatmissing=Repθre DL 'format' manquante, 'fullmatrix' est utilisι par dιfaut. +importerDL_error_badformat=Format ''{0}'' non supportι, proposez 'format=edgelist1' ou 'format=fullmatrix' uniquement. +importerDL_error_nmissing=L'en-tκte du ficher DL doit contenir la repθre 'n = ' +importerDL_error_mmissing=L'en-tκte du ficher DL doit contenir le repθre 'm = ' +importerDL_error_labelscount=Nombre de labels ({0}) diffιrent du repθre n ({1}) +importerDL_error_nodata=Aucune ligne de donnιes trouvιe. +importerDL_error_matrixrowscount=Nombre de lignes de matrice ({0}) plus grand que le repθre n ({1}) +importerDL_error_matrixrowscount2=Nombre de lignes de matrice ({0}) plus petit que le repθre n ({1}) +importerDL_error_matriciescount=Nombre d'ensembles de matrices ({0}) plus grand que le repθre nm ({1}) +importerDL_error_matrixentriescount=Nombre d'entrιes sur la ligne {0} de la matrice {1} plus grand que le nombre autorisι (ligne {2} du fichier DL) +importerDL_error_weightparseerror=Impossible d'analyser le poids ''{0}'' sur la matrice {1} ΰ la ligne {2} +importerDL_error_edgelistssetscount=Nombre d'ensembles de listes de liens ({0}) diffιrent du repθre nm ({1}) importerDL_error_edgelistrowparse=Impossible d'analyser depuis l'id ''{0}'' de la liste de liens ligne {1} - importerDL_error_edgeparseweight=Impossible d'analyser le poids ''{0}'' de la liste de liens ligne {1} - -importerDOT_error_nothingfound=Aucun 'graph' ou 'digraph' trouv\u00e9 - -importerDOT_error_labelunreachable=Impossible de trouver le label \u00e0 la ligne {0} - -importerDOT_error_colorunreachable=Impossible de trouver la couleur \u00e0 la ligne {0} - -importerDOT_error_edgeparsing=Impossible d'analyser le lien \u00e0 la ligne {0} - -importerDOT_error_posunreachable=Impossible d'analyser la position du noeud \u00e0 la ligne {0}. Doit \u00eatre pos\="x, y" - -importerDOT_error_weightunreachable=Impossible de lire le poids d'un lien \u00e0 la ligne {0} - -importerDOT_log_nodeattribute=Attribut de noeud trouv\u00e9 '{0}'' ({1}) +importerDOT_error_nothingfound=Aucun 'graph' ou 'digraph' trouvι +importerDOT_error_labelunreachable=Impossible de trouver le label ΰ la ligne {0} +importerDOT_error_colorunreachable=Impossible de trouver la couleur ΰ la ligne {0} +importerDOT_error_posunreachable=Impossible d'analyser la position du noeud ΰ la ligne {0}. Doit κtre pos="x, y" +importerDOT_error_weightunreachable=Impossible de lire le poids d'un lien ΰ la ligne {0} +importerTGF_error_emptynodes=Aucun noeud trouvιe +importerGraphML_error_graphattributes=L'attribut du graphe "{0}" est ignor\u00E9e, car non support\u00E9e par Gephi diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_he.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_he.properties new file mode 100644 index 0000000000..a866aedfaa --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_he.properties @@ -0,0 +1,136 @@ +fileType_GDF_Name=GDF Files (GUESS) +fileType_GEXF_Name=GEXF Files +fileType_NET_Name=NET Files (Pajek) +fileType_GraphML_Name=GraphML Files +fileType_GML_Name=GML Files +fileType_TLP_Name=TLP Files +fileType_TGF_Name=TGF Files +fileType_Edges_Name=Edge List +fileType_GraphViz_Name=GraphViz Files +fileType_DL_Name=DL Files (UCINET) +fileType_VNA_Name=VNA Files +importerGDF_error_dataformat1=The file must start with the "nodedef> name" line. +importerGDF_error_dataformat2=Bad column formatting. Each column must contains at least a name. Column names must not contains any coma. +importerGDF_error_dataformat3=Failed to import the column ''{0}'' for node ''{1}''. Error at value ''{2}''. +importerGDF_error_dataformat4=Failed to set the ''{0}'' attribute ''{1}'' for {2}. +importerGDF_error_dataformat5=The data type ''{0}'' is not recognized, string is used instead. +importerGDF_error_dataformat6=Column type is not found for ''{0}'', string is used instead. +importerGDF_error_dataformat7=Line ''{0}'' has more columns than defined in header. Please verify the number of commas. +importerGDF_error_dataformat8=The node column ''{0}'' can't be added because it already exists +importerGDF_error_dataformat9=The edge column ''{0}'' can't be added because it already exists +importerTPL_error_dataformat1=Bad edge formatting at line {0}. +importerNET_error_dataformat1=The file must start with the "*vertices" line. +importerNET_error_dataformat2=Blank line detected at line {0} +importerNET_error_dataformat3=Unbalanced (or too many) quote marks at line {0} +importerNET_error_dataformat4=Vertex number ''{0}'' not in the range [1,{1}] +importerNET_error_dataformat5=Vertex coordinates conversion problem at line {0}. Must be float number. +importerNET_error_dataformat6=Vertex size conversion problem at line {0}. Must be float number. +importerNET_error_dataformat7=Edge weight parsing issue at line {0}. Must be a double number. +importerGraphML_error_syntax1=Syntax error, the file must start with the markup. +importerGraphML_error_syntax2=Syntax error, node ''{0}'' must be nested in a markup. +importerGraphML_error_attributeclass=Attribute class not found or unknown for attribute ''{0}''. The attribute is ignored. +importerGraphML_error_attributefor=Attribute ''for'' not found or unknown for attribute ''{0}''. The attribute is ignored. +importerGraphML_error_attributetype1=Attribute type not found for attribute ''{0}''. Set to default string. +importerGraphML_error_attributetype2=Attribute type for ''{0}'' is not recognized. The attribute is ignored. +importerGraphML_error_attributedefault=Attribute ''{0}'' default value cannot be cast to the ''{1}'' type. +importerGraphML_error_attributecolumn_exist=Attribute with id ''{0}'' already exists, the attribute is ignored +importerGraphML_error_attributeempty=Attribute parse error, id is missing. +importerGraphML_log_nodeproperty=Node property found: {0} +importerGraphML_log_edgeproperty=Edge property found: {0} +importerGraphML_log_nodeattribute=Node attribute found ''{0}'' ({1}) +importerGraphML_log_edgeattribute=Edge attribute found ''{0}'' ({1}) +importerGraphML_log_default=Default attribute value found: ''{0}'' ({1}) +importerGraphML_error_datakey=Data key is missing for element id={0} +importerGraphML_error_datavalue=Data value {0} type error for element id={1}. The value cannot be set as ''{2}'' attribute. +importerGraphML_error_nodeid=Node id is missing. The node is ignored. +importerGraphML_error_defaultedgetype=Default edge type ''{0}'' is not recognized. Set to default ''mixed''. +importerGraphML_error_edgetype=Type ''{0}'' of the edge ''{1}'' is not recognized. Set to default value. +importerGML_error_nodeidmissing=Node id is missing +importerGML_error_directedgraphparse=Unexpected value for graph 'directed' property +importerGML_error_directedparse=Unexpected value for 'directed' property for edge ''{0}'' +importerGML_error_badparsing=Invalid GML parsing +importerTPL_error_badparsing=Invalid TPL parsing +importerGEXF_error_attributeclass=Attribute ''class'' not found or unknown for attribute ''{0}''. The attribute is ignored. +importerGEXF_error_attributeempty=Attribute parse error, id or type is missing. +importerGEXF_error_attributedefault=Attribute ''{0}'' default value cannot be cast to the ''{1}'' type. +importerGEXF_error_attributeoptions=Attribute ''{0}'' option values cannot be cast to the ''{1}'' type. +importerGEXF_error_attributecolumn_exist=Attribute with id ''{0}'' already exists, the attribute is ignored +importerGEXF_error_attributetype1=Attribute type not found for attribute ''{0}''. Set to default string. +importerGEXF_error_attributetype2=Attribute type for ''{0}'' is not recognized. The attribute is ignored. +importerGEXF_error_datakey=Data key (attribute ''for'') is missing for element id={0} +importerGEXF_error_datakey1=Data key (attribute ''id'') is missing for element id={0} +importerGEXF_error_dataoptionsvalue=Data value ''{0}'' is not an option for element id={1}. The value cannot be set as ''{2}'' attribute. +importerGEXF_error_datavalue=Data value ''{0}'' type error for element {1}. The value cannot be set as ''{2}'' attribute. +importerGEXF_error_idtype_error=The id type ''{0}'' is not recognized, use 'integer', 'long' or 'string' +importerGEXF_error_defaultedgetype=Default edge type ''{0}'' is not recognized. Set to default ''mixed''. +importerGEXF_error_edgedouble=Edge type ''double'' is currently not supported. Set to default ''mixed''. +importerGEXF_error_edgetype=Type ''{0}'' of the edge ''{1}'' is not recognized. Set to default value. +importerGEXF_error_edgeid=Edge id is missing. An id has been generated. +importerGEXF_error_edgesource=Edge source is missing. The edge is ignored. +importerGEXF_error_edgetarget=Edge target is missing. The edge is ignored. +importerGEXF_error_edgeweight=Edge weight of id ''{0}'' is not a float. Weight is ignored. +importerGEXF_error_nodeid=Node id is missing. The node is ignored. +importerGEXF_error_nodeposition=Node ''{0}'' has a wrong position on ''{1}'' (not a float). +importerGEXF_error_nodesize=Node ''{0}'' has a wrong size (not a float). +importerGEXF_error_notnode=Element ''{0}'' is not a node. The element is ignored. +importerGEXF_error_parsingdatetype=Date type ''{0}'' is not recognized. Set to default ''date''. +importerGEXF_error_parsingmode=Parsing mode ''{0}'' is not recognized. Set to default ''static''. +importerGEXF_error_node_timeinterval_parseerror=The time interval for node ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edge_timeinterval_parseerror=The time interval for edge ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_node_timeintervals_parseerror=The time intervals for node ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edge_timeintervals_parseerror=The time intervals for edge ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_nodeattribute_timeinterval_parseerror=The time interval for node ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edgeattribute_timeinterval_parseerror=The time interval for edge ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_node_timestamp_parseerror=The timestamp for node ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edge_timestamp_parseerror=The timestamp for edge ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_node_timestamps_parseerror=The timestamps for node ''{0}'' could not be parsed. +importerGEXF_error_edge_timestamps_parseerror=The timestamps for edge ''{0}'' could not be parsed. +importerGEXF_error_nodeattribute_timestamp_parseerror=The timestamp for node ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edgeattribute_timestamp_parseerror=The timestamp for edge ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_nodeattribute_timeset_parseerror=The timestamps or intervals for node ''{0}'' attribute could not be parsed. +importerGEXF_error_edgeattribute_timeset_parseerror=The timestamps or intervals for edge ''{0}'' attribute could not be parsed. +importerGEXF_error_nodecolorvalue=Node of id ''{1}'' has a wrong color channel ''{2}''=''{0}''. It should be 0 <= ''{2}'' <= 255. +importerGEXF_error_edgecolorvalue=Edge of id ''{1}'' has a wrong color channel ''{2}''=''{0}''. It should be 0 <= ''{2}'' <= 255. +importerGEXF_error_nodeopacityvalue=Node of id ''{1}'' has a wrong opacity a=''{0}''. It should be 0.0 <= a <= 1.0. +importerGEXF_error_edgeopacityvalue=Edge of id ''{1}'' has a wrong opacity a=''{0}''. It should be 0.0 <= a <= 1.0. +importerGEXF_error_node_open_interval=Node of id ''{0}'' uses open intervals, which have been deprecated. +importerGEXF_error_edge_open_interval=Edge of id ''{0}'' uses open intervals, which have been deprecated. +importerGEXF_error_slice_bound_missing=Missing timestamp or interval attribute on +importerGEXF_error_pid=The node of id ''{0}'' defines a parent using a pid. Hierarchical graph support has been deprecated and will be ignored. +importerGEXF_error_timezone_parseerror=The time zone ''{0}'' couldn't be recognized +importerGEXF_error_timerepresentation_intervalerror=The time representation is set as 'timestamp' so intervals can't be used. Set the time representation to 'interval' in . +importerGEXF_error_timerepresentation_timestamperror=The time representation is set as 'interval' so timestamps can't be used. Set the time representation to 'timestamp' in . +importerGEXF_log_edgeeproperty=Edge property found: {0} +importerGEXF_log_nodeproperty=Node property found: {0} +importerGEXF_log_edgeattribute=Edge attribute found ''{0}'' ({1}) +importerGEXF_log_nodeattribute=Node attribute found ''{0}'' ({1}) +importerGEXF_log_default=Default attribute value found: ''{0}'' ({1}) +importerGEXF_log_options=Attribute Options found: ''{0}'' ({1}) +importerGEXF_log_version10=GEXF version 1.0 (deprecated) +importerGEXF_log_version11=GEXF version 1.1 (deprecated) +importerGEXF_log_version12=GEXF version 1.2 (deprecated) +importerGEXF_log_version13=GEXF version 1.3 +importerGEXF_log_version_undef=Undefined GEXF version. Parser 1.3 is used. +importerGEXF_log_dynamic_weight=Dynamic weight column found +importerDL_error_firstline=First line of DL file must begin with 'DL' +importerDL_error_unknowntag=Header unknown tag ''{0}'' +importerDL_error_formatmissing=DL 'format' tag is missing, 'fullmatrix' is used by default +importerDL_error_badformat=Format ''{0}'' is not supported, provide 'format=edgelist1' or 'format=fullmatrix' format only +importerDL_error_nmissing=Header of DL file must contain tag 'n = ' +importerDL_error_mmissing=Header of DL file must contain tag 'm = ' +importerDL_error_labelscount=Number of labels ({0}) is different from n tag ({1}) +importerDL_error_nodata=No data line was found +importerDL_error_matrixrowscount=Number of matrix rows ({0}) is greater than n tag ({1}) +importerDL_error_matrixrowscount2=Number of matrix rows ({0}) is less than n tag ({1}) +importerDL_error_matriciescount=Number of matricies sets ({0}) is different from nm tag ({1}) +importerDL_error_matrixentriescount=Number of matrix entries on row {0} of matrix {1} has more than allowed entries (line {2} of DL file) +importerDL_error_weightparseerror=Unable to parse weight ''{0}'' on matrix {1} on line {2} +importerDL_error_edgelistssetscount=Number of edgelist sets ({0}) is different from nm tag ({1}) +importerDL_error_edgelistrowparse=Unable to parse from id ''{0}'' on edgelist line {1} +importerDL_error_edgeparseweight=Unable to parse weight ''{0}'' on edgelist line {1} +importerDOT_error_nothingfound=No 'graph' or 'digraph' was found +importerDOT_error_labelunreachable=Unable to find label at line {0} +importerDOT_error_colorunreachable=Unable to find color at line {0} +importerDOT_error_posunreachable=Unable to parse position of node at line {0}. Must be pos="x, y". +importerDOT_error_weightunreachable=Unable to parse edge's weight at line {0} +importerTGF_error_emptynodes=No nodes found diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_hu.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_hu.properties new file mode 100644 index 0000000000..3eaa7fdaed --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_hu.properties @@ -0,0 +1,138 @@ + + +importerDL_error_firstline=A DL-f\u00E1jl els\u0151 sor\u00E1nak \u201EDL\u201D-vel kell kezd\u0151dnie +importerGraphML_error_nodeid=A csom\u00F3pont azonos\u00EDt\u00F3ja hi\u00E1nyzik. A csom\u00F3pont figyelmen k\u00EDv\u00FCl marad. +importerGML_error_badparsing=\u00C9rv\u00E9nytelen GML-elemz\u00E9s +importerGraphML_error_attributefor=A \u201Efor\u201D attrib\u00FAtum nem tal\u00E1lhat\u00F3 vagy ismeretlen a \u201E{0}\u201D attrib\u00FAtumhoz. Az attrib\u00FAtumot figyelmen k\u00EDv\u00FCl hagyja. +importerGEXF_error_dataoptionsvalue=A \u201E{0}\u201D adat\u00E9rt\u00E9k nem v\u00E1laszthat\u00F3 az id={1} elemhez. Az \u00E9rt\u00E9k nem \u00E1ll\u00EDthat\u00F3 be \u201E{2}\u201D attrib\u00FAtumk\u00E9nt. +importerGraphML_error_attributeclass=Az attrib\u00FAtumoszt\u00E1ly nem tal\u00E1lhat\u00F3 vagy ismeretlen a(z) ''{0}'' attrib\u00FAtumhoz. Az attrib\u00FAtumot figyelmen k\u00EDv\u00FCl hagyja. +importerGEXF_error_node_open_interval=A(z) ''{0}'' azonos\u00EDt\u00F3 csom\u00F3pontja nyitott intervallumokat haszn\u00E1l, amelyek elavultak. +importerDL_error_edgeparseweight=Nem siker\u00FClt elemezni a(z) \u201E{0}\u201D s\u00FAlyt a(z) {1} \u00E9llista soron +importerGEXF_log_options=Tal\u00E1lt attrib\u00FAtumlehet\u0151s\u00E9gek: ''{0}'' ({1}) +importerGEXF_log_version12=GEXF 1.2-es verzi\u00F3 (elavult) +importerGEXF_log_version10=GEXF 1.0-s verzi\u00F3 (elavult) +importerGraphML_error_datakey=Hi\u00E1nyzik az adatkulcs az id={0} elemhez +importerGEXF_error_edgeweight=A(z) ''{0}'' azonos\u00EDt\u00F3 \u00E9ls\u00FAlya nem lebeg\u0151. A s\u00FAlyt figyelmen k\u00EDv\u00FCl hagyjuk. +importerNET_error_dataformat6=Cs\u00FAcsm\u00E9ret-konverzi\u00F3s probl\u00E9ma a(z) {0}. sorban. Lebeg\u0151sz\u00E1mnak kell lennie. +importerGEXF_error_parsingmode=A(z) \u201E{0}\u201D elemz\u00E9si m\u00F3d nem ismerhet\u0151 fel. \u00C1ll\u00EDtsa be az alap\u00E9rtelmezett \u201Estatic\u201D be\u00E1ll\u00EDt\u00E1st. +importerGEXF_error_nodecolorvalue=A(z) ''{1}'' azonos\u00EDt\u00F3 csom\u00F3pontj\u00E1nak sz\u00EDncsatorn\u00E1ja rossz: ''{2}''=''{0}''. 0 <= ''{2}'' <= 255 legyen. +importerGEXF_error_edgeattribute_timestamp_parseerror=A(z) \u201E{0}\u201D \u00E9l attrib\u00FAtum\u00E1nak id\u0151b\u00E9lyege nem \u00E9rtelmezhet\u0151. Haszn\u00E1ljon xsd:date, xsd:dateTime vagy Dupla form\u00E1z\u00E1st. +importerGEXF_error_nodesize=A(z) ''{0}'' csom\u00F3pont rossz m\u00E9ret\u0171 (nem lebeg\u0151). +importerGEXF_error_edgeopacityvalue=A(z) ''{1}'' azonos\u00EDt\u00F3 sz\u00E9l\u00E9nek \u00E1tl\u00E1tszatlans\u00E1ga hib\u00E1s a=''{0}''. 0,0 <= a <= 1,0 legyen. +importerGEXF_error_edgetype=A(z) \u201E{1}\u201D \u00E9l \u201E{0}\u201D t\u00EDpusa nem ismerhet\u0151 fel. \u00C1ll\u00EDtsa be az alap\u00E9rtelmezett \u00E9rt\u00E9kre. +importerDL_error_formatmissing=A DL 'format' c\u00EDmke hi\u00E1nyzik, alap\u00E9rtelmez\u00E9s szerint a 'fullmatrix' van haszn\u00E1latban +importerGEXF_error_datavalue=A(z) \u201E{0}\u201D adat\u00E9rt\u00E9k t\u00EDpushiba a(z) {1} elemn\u00E9l. Az \u00E9rt\u00E9k nem \u00E1ll\u00EDthat\u00F3 be \u201E{2}\u201D attrib\u00FAtumk\u00E9nt. +importerNET_error_dataformat1=A f\u00E1jlnak a "*vertices" sorral kell kezd\u0151dnie. +fileType_DL_Name=DL f\u00E1jlok (UCINET) +importerGEXF_error_attributeclass=A(z) \u201Eclass\u201D attrib\u00FAtum nem tal\u00E1lhat\u00F3 vagy ismeretlen a(z) \u201E{0}\u201D attrib\u00FAtumhoz. Az attrib\u00FAtumot figyelmen k\u00EDv\u00FCl hagyja. +fileType_GML_Name=GML f\u00E1jlok +importerGEXF_log_nodeattribute=Csom\u00F3pont-attrib\u00FAtum tal\u00E1lhat\u00F3: \u201E{0}\u201D ({1}) +importerDL_error_nodata=Nem tal\u00E1lhat\u00F3 adatsor +importerGEXF_error_datakey1=Hi\u00E1nyzik az adatkulcs ("id" attrib\u00FAtum) az id={0} elemn\u00E9l +importerNET_error_dataformat4=A ''{0}'' cs\u00FAcssz\u00E1m nincs az [1,{1}] tartom\u00E1nyban +importerGraphML_log_edgeproperty=Edge tulajdons\u00E1g tal\u00E1lt: {0} +importerGraphML_error_attributecolumn_exist=A(z) ''{0}'' azonos\u00EDt\u00F3j\u00FA attrib\u00FAtum m\u00E1r l\u00E9tezik, az attrib\u00FAtum figyelmen k\u00EDv\u00FCl hagyva +importerGDF_error_dataformat6=A(z) ''{0}'' oszlopt\u00EDpus nem tal\u00E1lhat\u00F3, helyette karakterl\u00E1ncot haszn\u00E1lunk. +importerNET_error_dataformat5=Cs\u00FAcskoordin\u00E1ta-konverzi\u00F3s probl\u00E9ma a(z) {0}. sorban. Lebeg\u0151sz\u00E1mnak kell lennie. +importerDL_error_mmissing=A DL-f\u00E1jl fejl\u00E9c\u00E9nek tartalmaznia kell az \u201Em = \u201D c\u00EDmk\u00E9t +importerGraphML_error_defaultedgetype=A(z) \u201E{0}\u201D alap\u00E9rtelmezett \u00E9lt\u00EDpus nem ismerhet\u0151 fel. \u00C1ll\u00EDtsa be az alap\u00E9rtelmezett \u201Evegyes\u201D be\u00E1ll\u00EDt\u00E1st. +importerGEXF_error_attributecolumn_exist=A(z) ''{0}'' azonos\u00EDt\u00F3j\u00FA attrib\u00FAtum m\u00E1r l\u00E9tezik, az attrib\u00FAtum figyelmen k\u00EDv\u00FCl hagyva +importerGML_error_nodeidmissing=A csom\u00F3pont azonos\u00EDt\u00F3ja hi\u00E1nyzik +importerGEXF_error_nodeposition=A(z) ''{0}'' csom\u00F3pont rossz poz\u00EDci\u00F3ban van a(z) ''{1}'' helyen (nem lebeg\u00E9s). +importerGEXF_error_nodeopacityvalue=A(z) ''{1}'' azonos\u00EDt\u00F3 csom\u00F3pontj\u00E1nak \u00E1tl\u00E1tszatlans\u00E1ga hib\u00E1s a=''{0}''. 0,0 <= a <= 1,0 legyen. +importerGEXF_error_notnode=A \u201E{0}\u201D elem nem csom\u00F3pont. Az elemet figyelmen k\u00EDv\u00FCl hagyja. +importerTPL_error_badparsing=\u00C9rv\u00E9nytelen TPL-elemz\u00E9s +importerGEXF_error_node_timestamps_parseerror=A(z) ''{0}'' csom\u00F3pont id\u0151b\u00E9lyegei nem elemezhet\u0151k. +importerGraphML_log_nodeattribute=Csom\u00F3pont-attrib\u00FAtum tal\u00E1lhat\u00F3: \u201E{0}\u201D ({1}) +importerGEXF_error_timerepresentation_intervalerror=Az id\u0151\u00E1br\u00E1zol\u00E1s \u201Eid\u0151b\u00E9lyeg\u201D-k\u00E9nt van be\u00E1ll\u00EDtva, \u00EDgy az intervallumok nem haszn\u00E1lhat\u00F3k. \u00C1ll\u00EDtsa az id\u0151\u00E1br\u00E1zol\u00E1st 'intervallum' \u00E9rt\u00E9kre a -ban. +importerGraphML_error_datavalue=Adat\u00E9rt\u00E9k {0} t\u00EDpushiba az id={1} elemn\u00E9l. Az \u00E9rt\u00E9k nem \u00E1ll\u00EDthat\u00F3 be \u201E{2}\u201D attrib\u00FAtumk\u00E9nt. +importerGDF_error_dataformat8=A(z) "{0}" csom\u00F3pontoszlop nem adhat\u00F3 hozz\u00E1, mert m\u00E1r l\u00E9tezik +importerGraphML_error_attributedefault=A(z) \u201E{0}\u201D attrib\u00FAtum alap\u00E9rtelmezett \u00E9rt\u00E9ke nem adhat\u00F3 \u00E1t a(z) \u201E{1}\u201D t\u00EDpusra. +importerGEXF_error_attributeempty=Attrib\u00FAtumelemz\u00E9si hiba, hi\u00E1nyzik az azonos\u00EDt\u00F3 vagy a t\u00EDpus. +importerGraphML_error_attributeempty=Attrib\u00FAtumelemz\u00E9si hiba, az azonos\u00EDt\u00F3 hi\u00E1nyzik. +importerDL_error_matrixentriescount=Number of matrix entries on row {0} of matrix {1} has more than allowed entries (line {2} of DL file) +importerGEXF_error_datakey=Az id={0} elemn\u00E9l hi\u00E1nyzik az adatkulcs ("for" attrib\u00FAtum) +importerDOT_error_colorunreachable=Nem tal\u00E1lhat\u00F3 sz\u00EDn a(z) {0}. sorban +fileType_NET_Name=NET-f\u00E1jlok (Pajek) +importerGraphML_error_attributetype1=Az attrib\u00FAtumt\u00EDpus nem tal\u00E1lhat\u00F3 a(z) ''{0}'' attrib\u00FAtumhoz. \u00C1ll\u00EDtsa be az alap\u00E9rtelmezett karakterl\u00E1ncot. +importerDL_error_unknowntag=Ismeretlen fejl\u00E9c c\u00EDmke: ''{0}'' +importerGEXF_error_attributedefault=A(z) \u201E{0}\u201D attrib\u00FAtum alap\u00E9rtelmezett \u00E9rt\u00E9ke nem adhat\u00F3 \u00E1t a(z) \u201E{1}\u201D t\u00EDpusra. +importerGDF_error_dataformat2=Rossz oszlopform\u00E1z\u00E1s. Minden oszlopnak tartalmaznia kell legal\u00E1bb egy nevet. Az oszlopnevek nem tartalmazhatnak k\u00F3m\u00E1t. +fileType_TGF_Name=TGF f\u00E1jlok +importerGDF_error_dataformat1=A f\u00E1jlnak a "nodedef> name" sorral kell kezd\u0151dnie. +importerGEXF_error_attributetype1=Az attrib\u00FAtumt\u00EDpus nem tal\u00E1lhat\u00F3 a(z) ''{0}'' attrib\u00FAtumhoz. \u00C1ll\u00EDtsa be az alap\u00E9rtelmezett karakterl\u00E1ncot. +importerNET_error_dataformat7=\u00C9ls\u00FAly-elemz\u00E9si probl\u00E9ma a(z) {0}. sorban. Dupla sz\u00E1mnak kell lennie. +importerDL_error_badformat=A(z) \u201E{0}\u201D form\u00E1tum nem t\u00E1mogatott, csak a \u201Eformat=edgelist1\u201D vagy a \u201Eformat=fullmatrix\u201D form\u00E1tumot adja meg +importerDL_error_matrixrowscount=A m\u00E1trixsorok sz\u00E1ma ({0}) nagyobb, mint n c\u00EDmke ({1}) +fileType_TLP_Name=TLP f\u00E1jlok +importerGEXF_error_nodeattribute_timeinterval_parseerror=A(z) ''{0}'' csom\u00F3pont attrib\u00FAtum\u00E1nak id\u0151intervalluma nem \u00E9rtelmezhet\u0151. Haszn\u00E1ljon xsd:date, xsd:dateTime vagy Dupla form\u00E1z\u00E1st. +importerGEXF_error_edge_timestamps_parseerror=A(z) ''{0}'' \u00E9l id\u0151b\u00E9lyegei nem \u00E9rtelmezhet\u0151k. +importerGraphML_log_default=Az alap\u00E9rtelmezett attrib\u00FAtum\u00E9rt\u00E9k tal\u00E1lhat\u00F3: ''{0}'' ({1}) +importerGraphML_error_syntax1=Szintaktikai hiba, a f\u00E1jlnak a jel\u00F6l\u00E9ssel kell kezd\u0151dnie. +fileType_GDF_Name=GDF-f\u00E1jlok (GUESS) +importerDOT_error_nothingfound=Nem tal\u00E1lhat\u00F3 \u201Egrafikon\u201D vagy \u201Edigr\u00E1f\u201D. +importerGraphML_log_edgeattribute=Az \u00E9lattrib\u00FAtum megtal\u00E1lhat\u00F3: \u201E{0}\u201D ({1}) +importerGEXF_error_edgesource=Az \u00E9lforr\u00E1s hi\u00E1nyzik. Az \u00E9lt figyelmen k\u00EDv\u00FCl hagyja. +importerGEXF_error_edge_timestamp_parseerror=A(z) ''{0}'' \u00E9l id\u0151b\u00E9lyege nem \u00E9rtelmezhet\u0151. Haszn\u00E1ljon xsd:date, xsd:dateTime vagy Dupla form\u00E1z\u00E1st. +importerGEXF_error_parsingdatetype=A(z) \u201E{0}\u201D d\u00E1tumt\u00EDpus nem ismerhet\u0151 fel. \u00C1ll\u00EDtsa be az alap\u00E9rtelmezett \u201Ed\u00E1tum\u201D \u00E9rt\u00E9ket. +importerGDF_error_dataformat9=A(z) \u201E{0}\u201D \u00E9loszlop nem adhat\u00F3 hozz\u00E1, mert m\u00E1r l\u00E9tezik +importerGEXF_error_edge_timeinterval_parseerror=A(z) ''{0}'' \u00E9l id\u0151intervalluma nem \u00E9rtelmezhet\u0151. Haszn\u00E1ljon xsd:date, xsd:dateTime vagy Dupla form\u00E1z\u00E1st. +importerTPL_error_dataformat1=Rossz \u00E9lform\u00E1z\u00E1s a(z) {0}. sorban. +importerGraphML_error_syntax2=Szintaktikai hiba, a(z) ''{0}'' csom\u00F3pontot be kell \u00E1gyazni egy jel\u00F6l\u00E9sbe. +importerGML_error_directedgraphparse=V\u00E1ratlan \u00E9rt\u00E9k a gr\u00E1f \u201Eir\u00E1ny\u00EDtott\u201D tulajdons\u00E1g\u00E1n\u00E1l +importerDL_error_matriciescount=A m\u00E1trixk\u00E9szletek sz\u00E1ma ({0}) elt\u00E9r az nm-c\u00EDmk\u00E9t\u0151l ({1}) +importerDL_error_edgelistssetscount=Az \u00E9llista-k\u00E9szletek sz\u00E1ma ({0}) elt\u00E9r az nm-c\u00EDmk\u00E9t\u0151l ({1}) +importerGEXF_error_nodeattribute_timestamp_parseerror=A(z) ''{0}'' csom\u00F3pont attrib\u00FAtum\u00E1nak id\u0151b\u00E9lyege nem \u00E9rtelmezhet\u0151. Haszn\u00E1ljon xsd:date, xsd:dateTime vagy Dupla form\u00E1z\u00E1st. +importerGDF_error_dataformat3=Nem siker\u00FClt import\u00E1lni a(z) \u201E{0}\u201D oszlopot a(z) \u201E{1}\u201D csom\u00F3ponthoz. Hiba a(z) ''{2}'' \u00E9rt\u00E9kn\u00E9l. +importerGDF_error_dataformat7=A(z) \u201E{0}\u201D sor t\u00F6bb oszlopot tartalmaz, mint a fejl\u00E9cben meghat\u00E1rozott. K\u00E9rj\u00FCk, ellen\u0151rizze a vessz\u0151k sz\u00E1m\u00E1t. +importerGEXF_error_edge_timeintervals_parseerror=A(z) ''{0}'' csom\u00F3pont id\u0151intervallumai nem \u00E9rtelmezhet\u0151k. Haszn\u00E1ljon xsd:date, xsd:dateTime vagy Dupla form\u00E1z\u00E1st. +fileType_VNA_Name=VNA f\u00E1jlok +importerNET_error_dataformat3=Kiegyens\u00FAlyozatlan (vagy t\u00FAl sok) id\u00E9z\u0151jel a {0}. sorban +importerGEXF_error_node_timestamp_parseerror=A(z) ''{0}'' csom\u00F3pont id\u0151b\u00E9lyege nem \u00E9rtelmezhet\u0151. Haszn\u00E1ljon xsd:date, xsd:dateTime vagy Dupla form\u00E1z\u00E1st. +importerDL_error_nmissing=A DL-f\u00E1jl fejl\u00E9c\u00E9nek tartalmaznia kell az \u201En = \u201D c\u00EDmk\u00E9t +importerGDF_error_dataformat5=A(z) ''{0}'' adatt\u00EDpus nem ismerhet\u0151 fel, helyette karakterl\u00E1ncot haszn\u00E1lunk. +importerGEXF_error_edgedouble=A \u201Edupla\u201D \u00E9lt\u00EDpus jelenleg nem t\u00E1mogatott. \u00C1ll\u00EDtsa be az alap\u00E9rtelmezett \u201Evegyes\u201D be\u00E1ll\u00EDt\u00E1st. +importerGraphML_error_edgetype=A(z) \u201E{1}\u201D \u00E9l \u201E{0}\u201D t\u00EDpusa nem ismerhet\u0151 fel. \u00C1ll\u00EDtsa be az alap\u00E9rtelmezett \u00E9rt\u00E9kre. +importerDL_error_matrixrowscount2=A m\u00E1trixsorok sz\u00E1ma ({0}) kisebb, mint n c\u00EDmke ({1}) +importerGEXF_log_version11=GEXF 1.1-es verzi\u00F3 (elavult) +importerGEXF_log_version13=GEXF 1.3 verzi\u00F3 +importerGEXF_error_timezone_parseerror=A(z) ''{0}'' id\u0151z\u00F3na nem ismerhet\u0151 fel +importerGEXF_error_edgeattribute_timeset_parseerror=A(z) ''{0}'' \u00E9l attrib\u00FAtum\u00E1nak id\u0151b\u00E9lyegei vagy intervallumai nem elemezhet\u0151k. +importerGEXF_error_edgecolorvalue=A(z) ''{1}'' azonos\u00EDt\u00F3 sz\u00E9l\u00E9nek hib\u00E1s sz\u00EDncsatorn\u00E1ja van: ''{2}''=''{0}''. 0 <= ''{2}'' <= 255 legyen. +fileType_GraphML_Name=GraphML f\u00E1jlok +importerGEXF_error_timerepresentation_timestamperror=Az id\u0151\u00E1br\u00E1zol\u00E1s \u201Eintervallum\u201D-k\u00E9nt van be\u00E1ll\u00EDtva, \u00EDgy az id\u0151b\u00E9lyegek nem haszn\u00E1lhat\u00F3k. \u00C1ll\u00EDtsa az id\u0151\u00E1br\u00E1zol\u00E1st \u201Eid\u0151b\u00E9lyeg\u201D-re a -ban. +importerDOT_error_labelunreachable=Nem tal\u00E1lhat\u00F3 c\u00EDmke a(z) {0}. sorban +importerGEXF_error_edgeattribute_timeinterval_parseerror=A(z) \u201E{0}\u201D \u00E9l attrib\u00FAtum\u00E1nak id\u0151intervallum\u00E1t nem siker\u00FClt elemezni. Haszn\u00E1ljon xsd:date, xsd:dateTime vagy Dupla form\u00E1z\u00E1st. +importerGEXF_error_defaultedgetype=A(z) \u201E{0}\u201D alap\u00E9rtelmezett \u00E9lt\u00EDpus nem ismerhet\u0151 fel. \u00C1ll\u00EDtsa be az alap\u00E9rtelmezett \u201Evegyes\u201D be\u00E1ll\u00EDt\u00E1st. +importerNET_error_dataformat2=\u00DCres sor \u00E9szlelve a(z) {0}. sorban +importerGEXF_error_attributetype2=A(z) \u201E{0}\u201D attrib\u00FAtumt\u00EDpusa nem ismerhet\u0151 fel. Az attrib\u00FAtumot figyelmen k\u00EDv\u00FCl hagyja. +importerGML_error_directedparse=V\u00E1ratlan \u00E9rt\u00E9k a '{0}' \u00E9l 'ir\u00E1ny\u00EDtott' tulajdons\u00E1g\u00E1n\u00E1l +importerGEXF_log_version_undef=Hat\u00E1rozatlan GEXF verzi\u00F3. Az 1.3-as elemz\u0151 haszn\u00E1latos. +importerGEXF_error_edgeid=Az \u00E9lazonos\u00EDt\u00F3 hi\u00E1nyzik. Az azonos\u00EDt\u00F3 l\u00E9trej\u00F6tt. +importerGEXF_log_default=Az alap\u00E9rtelmezett attrib\u00FAtum\u00E9rt\u00E9k tal\u00E1lhat\u00F3: ''{0}'' ({1}) +importerDOT_error_posunreachable=Nem siker\u00FClt elemezni a csom\u00F3pont poz\u00EDci\u00F3j\u00E1t a(z) {0}. sorban. Pos="x, y"-nek kell lennie. +importerGraphML_error_attributetype2=A(z) \u201E{0}\u201D attrib\u00FAtumt\u00EDpusa nem ismerhet\u0151 fel. Az attrib\u00FAtumot figyelmen k\u00EDv\u00FCl hagyja. +importerGEXF_error_slice_bound_missing=Hi\u00E1nyz\u00F3 id\u0151b\u00E9lyeg vagy intervallum attrib\u00FAtum a +importerGEXF_error_nodeid=A csom\u00F3pont azonos\u00EDt\u00F3ja hi\u00E1nyzik. A csom\u00F3pont figyelmen k\u00EDv\u00FCl marad. +importerGEXF_log_nodeproperty=Tal\u00E1lt csom\u00F3pont tulajdons\u00E1g: {0} +importerGEXF_error_edge_open_interval=A(z) ''{0}'' azonos\u00EDt\u00F3 sz\u00E9le nyitott intervallumokat haszn\u00E1l, amelyek elavultak. +importerDOT_error_weightunreachable=Nem siker\u00FClt elemezni az \u00E9l s\u00FAly\u00E1t a(z) {0}. sorban +importerGEXF_log_edgeeproperty=Edge tulajdons\u00E1g tal\u00E1lt: {0} +importerGraphML_log_nodeproperty=Tal\u00E1lt csom\u00F3pont tulajdons\u00E1g: {0} +importerGraphML_error_graphattributes=A(z) \u201E{0}\u201D grafikon attrib\u00FAtumait figyelmen k\u00EDv\u00FCl hagyta, mivel a Gephi nem t\u00E1mogatja +importerGEXF_error_attributeoptions=A(z) ''{0}'' attrib\u00FAtum be\u00E1ll\u00EDt\u00E1si \u00E9rt\u00E9kei nem adhat\u00F3k \u00E1t a ''{1}'' t\u00EDpushoz. +importerGEXF_error_idtype_error=A(z) ''{0}'' azonos\u00EDt\u00F3t\u00EDpust nem ismeri fel a rendszer, haszn\u00E1ljon 'integer', 'long' vagy 'string' +importerGEXF_error_node_timeinterval_parseerror=A(z) ''{0}'' csom\u00F3pont id\u0151intervalluma nem \u00E9rtelmezhet\u0151. Haszn\u00E1ljon xsd:date, xsd:dateTime vagy Dupla form\u00E1z\u00E1st. +importerDL_error_edgelistrowparse=Nem siker\u00FClt elemezni a(z) ''{0}'' azonos\u00EDt\u00F3b\u00F3l a(z) {1} \u00E9llista soron +importerGEXF_log_dynamic_weight=Dinamikus s\u00FAlyoszlop tal\u00E1lhat\u00F3 +fileType_GraphViz_Name=GraphViz f\u00E1jlok +importerDL_error_labelscount=A c\u00EDmk\u00E9k sz\u00E1ma ({0}) elt\u00E9r az n c\u00EDmk\u00E9t\u0151l ({1}) +importerGEXF_error_pid=A(z) ''{0}'' azonos\u00EDt\u00F3 csom\u00F3pontja azonos\u00EDt\u00F3t haszn\u00E1l\u00F3 sz\u00FCl\u0151t hat\u00E1roz meg. A hierarchikus gr\u00E1fok t\u00E1mogat\u00E1sa megsz\u0171nt, \u00E9s figyelmen k\u00EDv\u00FCl lesz hagyva. +importerGEXF_error_edgetarget=Az \u00E9lc\u00E9lpont hi\u00E1nyzik. Az \u00E9lt figyelmen k\u00EDv\u00FCl hagyja. +importerGEXF_error_nodeattribute_timeset_parseerror=A(z) ''{0}'' csom\u00F3pont attrib\u00FAtum\u00E1nak id\u0151b\u00E9lyegei vagy intervallumai nem elemezhet\u0151k. +fileType_GEXF_Name=GEXF f\u00E1jlok +importerGEXF_log_edgeattribute=Az \u00E9lattrib\u00FAtum megtal\u00E1lhat\u00F3: \u201E{0}\u201D ({1}) +importerGDF_error_dataformat4=Nem siker\u00FClt be\u00E1ll\u00EDtani a(z) ''{0}'' attrib\u00FAtumot ''{1}'' a k\u00F6vetkez\u0151h\u00F6z: {2}. +importerGEXF_error_node_timeintervals_parseerror=A(z) ''{0}'' csom\u00F3pont id\u0151intervallumai nem \u00E9rtelmezhet\u0151k. Haszn\u00E1ljon xsd:date, xsd:dateTime vagy Dupla form\u00E1z\u00E1st. +importerDL_error_weightparseerror=Nem siker\u00FClt elemezni a(z) ''{0}'' s\u00FAlyt a(z) {1} m\u00E1trixon a(z) {2}. sorban +importerTGF_error_emptynodes=Nem tal\u00E1lhat\u00F3 csom\u00F3pont diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_it.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_it.properties new file mode 100644 index 0000000000..988ae4c1ef --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_it.properties @@ -0,0 +1,136 @@ +fileType_GDF_Name=File GDF (GUESS) +fileType_GEXF_Name=File GEXF +fileType_NET_Name=File NET (Pajek) +fileType_GraphML_Name=File GraphML +fileType_GML_Name=GML Files +fileType_TLP_Name=TLP Files +fileType_TGF_Name=TGF Files +fileType_Edges_Name=Edge List +fileType_GraphViz_Name=GraphViz Files +fileType_DL_Name=DL Files (UCINET) +fileType_VNA_Name=VNA Files +importerGDF_error_dataformat1=The file must start with the "nodedef> name" line. +importerGDF_error_dataformat2=Bad column formatting. Each column must contains at least a name. Column names must not contains any coma. +importerGDF_error_dataformat3=Failed to import the column ''{0}'' for node ''{1}''. Error at value ''{2}''. +importerGDF_error_dataformat4=Failed to set the ''{0}'' attribute ''{1}'' for {2}. +importerGDF_error_dataformat5=The data type ''{0}'' is not recognized, string is used instead. +importerGDF_error_dataformat6=Column type is not found for ''{0}'', string is used instead. +importerGDF_error_dataformat7=Line ''{0}'' has more columns than defined in header. Please verify the number of commas. +importerGDF_error_dataformat8=The node column ''{0}'' can't be added because it already exists +importerGDF_error_dataformat9=The edge column ''{0}'' can't be added because it already exists +importerTPL_error_dataformat1=Bad edge formatting at line {0}. +importerNET_error_dataformat1=The file must start with the "*vertices" line. +importerNET_error_dataformat2=Blank line detected at line {0} +importerNET_error_dataformat3=Unbalanced (or too many) quote marks at line {0} +importerNET_error_dataformat4=Vertex number ''{0}'' not in the range [1,{1}] +importerNET_error_dataformat5=Vertex coordinates conversion problem at line {0}. Must be float number. +importerNET_error_dataformat6=Vertex size conversion problem at line {0}. Must be float number. +importerNET_error_dataformat7=Edge weight parsing issue at line {0}. Must be a double number. +importerGraphML_error_syntax1=Syntax error, the file must start with the markup. +importerGraphML_error_syntax2=Syntax error, node ''{0}'' must be nested in a markup. +importerGraphML_error_attributeclass=Attribute class not found or unknown for attribute ''{0}''. The attribute is ignored. +importerGraphML_error_attributefor=Attribute ''for'' not found or unknown for attribute ''{0}''. The attribute is ignored. +importerGraphML_error_attributetype1=Attribute type not found for attribute ''{0}''. Set to default string. +importerGraphML_error_attributetype2=Attribute type for ''{0}'' is not recognized. The attribute is ignored. +importerGraphML_error_attributedefault=Attribute ''{0}'' default value cannot be cast to the ''{1}'' type. +importerGraphML_error_attributecolumn_exist=Attribute with id ''{0}'' already exists, the attribute is ignored +importerGraphML_error_attributeempty=Attribute parse error, id is missing. +importerGraphML_log_nodeproperty=Node property found: {0} +importerGraphML_log_edgeproperty=Edge property found: {0} +importerGraphML_log_nodeattribute=Node attribute found ''{0}'' ({1}) +importerGraphML_log_edgeattribute=Edge attribute found ''{0}'' ({1}) +importerGraphML_log_default=Default attribute value found: ''{0}'' ({1}) +importerGraphML_error_datakey=Data key is missing for element id={0} +importerGraphML_error_datavalue=Data value {0} type error for element id={1}. The value cannot be set as ''{2}'' attribute. +importerGraphML_error_nodeid=Node id is missing. The node is ignored. +importerGraphML_error_defaultedgetype=Default edge type ''{0}'' is not recognized. Set to default ''mixed''. +importerGraphML_error_edgetype=Type ''{0}'' of the edge ''{1}'' is not recognized. Set to default value. +importerGML_error_nodeidmissing=Node id is missing +importerGML_error_directedgraphparse=Unexpected value for graph 'directed' property +importerGML_error_directedparse=Unexpected value for 'directed' property for edge ''{0}'' +importerGML_error_badparsing=Invalid GML parsing +importerTPL_error_badparsing=Invalid TPL parsing +importerGEXF_error_attributeclass=Attribute ''class'' not found or unknown for attribute ''{0}''. The attribute is ignored. +importerGEXF_error_attributeempty=Attribute parse error, id or type is missing. +importerGEXF_error_attributedefault=Attribute ''{0}'' default value cannot be cast to the ''{1}'' type. +importerGEXF_error_attributeoptions=Attribute ''{0}'' option values cannot be cast to the ''{1}'' type. +importerGEXF_error_attributecolumn_exist=Attribute with id ''{0}'' already exists, the attribute is ignored +importerGEXF_error_attributetype1=Attribute type not found for attribute ''{0}''. Set to default string. +importerGEXF_error_attributetype2=Attribute type for ''{0}'' is not recognized. The attribute is ignored. +importerGEXF_error_datakey=Data key (attribute ''for'') is missing for element id={0} +importerGEXF_error_datakey1=Data key (attribute ''id'') is missing for element id={0} +importerGEXF_error_dataoptionsvalue=Data value ''{0}'' is not an option for element id={1}. The value cannot be set as ''{2}'' attribute. +importerGEXF_error_datavalue=Data value ''{0}'' type error for element {1}. The value cannot be set as ''{2}'' attribute. +importerGEXF_error_idtype_error=The id type ''{0}'' is not recognized, use 'integer', 'long' or 'string' +importerGEXF_error_defaultedgetype=Default edge type ''{0}'' is not recognized. Set to default ''mixed''. +importerGEXF_error_edgedouble=Edge type ''double'' is currently not supported. Set to default ''mixed''. +importerGEXF_error_edgetype=Type ''{0}'' of the edge ''{1}'' is not recognized. Set to default value. +importerGEXF_error_edgeid=Edge id is missing. An id has been generated. +importerGEXF_error_edgesource=Edge source is missing. The edge is ignored. +importerGEXF_error_edgetarget=Edge target is missing. The edge is ignored. +importerGEXF_error_edgeweight=Edge weight of id ''{0}'' is not a float. Weight is ignored. +importerGEXF_error_nodeid=Node id is missing. The node is ignored. +importerGEXF_error_nodeposition=Node ''{0}'' has a wrong position on ''{1}'' (not a float). +importerGEXF_error_nodesize=Node ''{0}'' has a wrong size (not a float). +importerGEXF_error_notnode=Element ''{0}'' is not a node. The element is ignored. +importerGEXF_error_parsingdatetype=Date type ''{0}'' is not recognized. Set to default ''date''. +importerGEXF_error_parsingmode=Parsing mode ''{0}'' is not recognized. Set to default ''static''. +importerGEXF_error_node_timeinterval_parseerror=The time interval for node ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edge_timeinterval_parseerror=The time interval for edge ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_node_timeintervals_parseerror=The time intervals for node ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edge_timeintervals_parseerror=The time intervals for edge ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_nodeattribute_timeinterval_parseerror=The time interval for node ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edgeattribute_timeinterval_parseerror=The time interval for edge ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_node_timestamp_parseerror=The timestamp for node ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edge_timestamp_parseerror=The timestamp for edge ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_node_timestamps_parseerror=The timestamps for node ''{0}'' could not be parsed. +importerGEXF_error_edge_timestamps_parseerror=The timestamps for edge ''{0}'' could not be parsed. +importerGEXF_error_nodeattribute_timestamp_parseerror=The timestamp for node ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edgeattribute_timestamp_parseerror=The timestamp for edge ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_nodeattribute_timeset_parseerror=The timestamps or intervals for node ''{0}'' attribute could not be parsed. +importerGEXF_error_edgeattribute_timeset_parseerror=The timestamps or intervals for edge ''{0}'' attribute could not be parsed. +importerGEXF_error_nodecolorvalue=Node of id ''{1}'' has a wrong color channel ''{2}''=''{0}''. It should be 0 <= ''{2}'' <= 255. +importerGEXF_error_edgecolorvalue=Edge of id ''{1}'' has a wrong color channel ''{2}''=''{0}''. It should be 0 <= ''{2}'' <= 255. +importerGEXF_error_nodeopacityvalue=Node of id ''{1}'' has a wrong opacity a=''{0}''. It should be 0.0 <= a <= 1.0. +importerGEXF_error_edgeopacityvalue=Edge of id ''{1}'' has a wrong opacity a=''{0}''. It should be 0.0 <= a <= 1.0. +importerGEXF_error_node_open_interval=Node of id ''{0}'' uses open intervals, which have been deprecated. +importerGEXF_error_edge_open_interval=Edge of id ''{0}'' uses open intervals, which have been deprecated. +importerGEXF_error_slice_bound_missing=Missing timestamp or interval attribute on +importerGEXF_error_pid=The node of id ''{0}'' defines a parent using a pid. Hierarchical graph support has been deprecated and will be ignored. +importerGEXF_error_timezone_parseerror=The time zone ''{0}'' couldn't be recognized +importerGEXF_error_timerepresentation_intervalerror=The time representation is set as 'timestamp' so intervals can't be used. Set the time representation to 'interval' in . +importerGEXF_error_timerepresentation_timestamperror=The time representation is set as 'interval' so timestamps can't be used. Set the time representation to 'timestamp' in . +importerGEXF_log_edgeeproperty=Edge property found: {0} +importerGEXF_log_nodeproperty=Node property found: {0} +importerGEXF_log_edgeattribute=Edge attribute found ''{0}'' ({1}) +importerGEXF_log_nodeattribute=Node attribute found ''{0}'' ({1}) +importerGEXF_log_default=Default attribute value found: ''{0}'' ({1}) +importerGEXF_log_options=Attribute Options found: ''{0}'' ({1}) +importerGEXF_log_version10=GEXF version 1.0 (deprecated) +importerGEXF_log_version11=GEXF version 1.1 (deprecated) +importerGEXF_log_version12=GEXF version 1.2 (deprecated) +importerGEXF_log_version13=GEXF version 1.3 +importerGEXF_log_version_undef=Undefined GEXF version. Parser 1.3 is used. +importerGEXF_log_dynamic_weight=Dynamic weight column found +importerDL_error_firstline=First line of DL file must begin with 'DL' +importerDL_error_unknowntag=Header unknown tag ''{0}'' +importerDL_error_formatmissing=DL 'format' tag is missing, 'fullmatrix' is used by default +importerDL_error_badformat=Format ''{0}'' is not supported, provide 'format=edgelist1' or 'format=fullmatrix' format only +importerDL_error_nmissing=Header of DL file must contain tag 'n = ' +importerDL_error_mmissing=Header of DL file must contain tag 'm = ' +importerDL_error_labelscount=Number of labels ({0}) is different from n tag ({1}) +importerDL_error_nodata=No data line was found +importerDL_error_matrixrowscount=Number of matrix rows ({0}) is greater than n tag ({1}) +importerDL_error_matrixrowscount2=Number of matrix rows ({0}) is less than n tag ({1}) +importerDL_error_matriciescount=Number of matricies sets ({0}) is different from nm tag ({1}) +importerDL_error_matrixentriescount=Number of matrix entries on row {0} of matrix {1} has more than allowed entries (line {2} of DL file) +importerDL_error_weightparseerror=Unable to parse weight ''{0}'' on matrix {1} on line {2} +importerDL_error_edgelistssetscount=Number of edgelist sets ({0}) is different from nm tag ({1}) +importerDL_error_edgelistrowparse=Unable to parse from id ''{0}'' on edgelist line {1} +importerDL_error_edgeparseweight=Unable to parse weight ''{0}'' on edgelist line {1} +importerDOT_error_nothingfound=No 'graph' or 'digraph' was found +importerDOT_error_labelunreachable=Unable to find label at line {0} +importerDOT_error_colorunreachable=Unable to find color at line {0} +importerDOT_error_posunreachable=Unable to parse position of node at line {0}. Must be pos="x, y". +importerDOT_error_weightunreachable=Unable to parse edge's weight at line {0} +importerTGF_error_emptynodes=No nodes found diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_ja.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_ja.properties index 1f71131856..063f90a196 100644 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_ja.properties +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_ja.properties @@ -1,247 +1,138 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011-2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-12 10\:08+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - fileType_GDF_Name=GDF\u30d5\u30a1\u30a4\u30eb(GUESS) - fileType_GEXF_Name=GEXF\u30d5\u30a1\u30a4\u30eb - fileType_NET_Name=NET\u30d5\u30a1\u30a4\u30eb (Pajek) - fileType_GraphML_Name=GraphML\u30d5\u30a1\u30a4\u30eb - fileType_GML_Name=GML\u30d5\u30a1\u30a4\u30eb - fileType_TLP_Name=TLP\u30d5\u30a1\u30a4\u30eb - -fileType_CSV_Name=CSV\u30d5\u30a1\u30a4\u30eb - +# fileType_TGF_Name = TGF Files fileType_Edges_Name=\u8fba\u30ea\u30b9\u30c8 - fileType_GraphViz_Name=GraphViz\u30d5\u30a1\u30a4\u30eb - fileType_DL_Name=DL\u30d5\u30a1\u30a4\u30eb(UCINET) - fileType_VNA_Name=VNA\u30d5\u30a1\u30a4\u30eb - importerGDF_error_dataformat1=\u30d5\u30a1\u30a4\u30eb\u306f"nodedef> name"\u306e\u884c\u3067\u59cb\u307e\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 - importerGDF_error_dataformat2=\u4e0d\u6b63\u306a\u5217\u306e\u66f8\u5f0f\u3002\u5404\u5217\u306b\u306f\u3001\u5c11\u306a\u304f\u3068\u3082\u540d\u524d\u304c\u542b\u307e\u308c\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002\u5217\u540d\u306f\u30b3\u30f3\u30de\u304c\u542b\u307e\u308c\u3066\u306f\u3044\u3051\u307e\u305b\u3093\u3002 - importerGDF_error_dataformat3=\u30ce\u30fc\u30c9''{1}''\u306e\u305f\u3081\u306e\u5217''{0}''\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002\u5024"{2}"\u306e\u30a8\u30e9\u30fc\u3067\u3059\u3002 - importerGDF_error_dataformat4=''{0}''\u5c5e\u6027\u306b{2}\u306e\u305f\u3081\u306b''{1}''\u3092\u8a2d\u5b9a\u3059\u308b\u306e\u306b\u5931\u6557\u3057\u307e\u3057\u305f\u3002 - importerGDF_error_dataformat5=\u30c7\u30fc\u30bf\u30bf\u30a4\u30d7 ''{0}'' \u306f\u8a8d\u8b58\u3055\u308c\u307e\u305b\u3093\u3001\u6587\u5b57\u5217\u304c\u4ee3\u308f\u308a\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002 - importerGDF_error_dataformat6=\u5217\u306e\u578b\u304c'' {0} ''\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3001\u6587\u5b57\u5217\u304c\u4ee3\u308f\u308a\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002 - importerGDF_error_dataformat7=\u884c"{0}"\u306b\u306f\u30d8\u30c3\u30c0\u3067\u6307\u5b9a\u3057\u305f\u4ee5\u4e0a\u306b\u5217\u304c\u3042\u308a\u307e\u3059\u3002\u30b3\u30f3\u30de\u306e\u6570\u3092\u78ba\u8a8d\u3057\u3066\u304f\u3060\u3055\u3044\u3002 - importerGDF_error_dataformat8=\u30ce\u30fc\u30c9\u306e\u5217\u306f''{0}''\u3092\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3002\u305d\u308c\u306f\u65e2\u306b\u5b58\u5728\u3057\u307e\u3059\u3002 - importerGDF_error_dataformat9=\u8fba\u306e\u5217\u306f''{0}''\u3092\u8ffd\u52a0\u3067\u304d\u307e\u305b\u3093\u3002\u305d\u308c\u306f\u65e2\u306b\u5b58\u5728\u3057\u307e\u3059\u3002 - importerTPL_error_dataformat1=\u884c{0}\u3067\u4e0d\u6b63\u306a\u8fba\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u3002 - importerNET_error_dataformat1=\u30d5\u30a1\u30a4\u30eb\u306f"*vertices"\u3067\u59cb\u307e\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 - importerNET_error_dataformat2=\u884c{0}\u3067\u691c\u51fa\u3055\u308c\u305f\u7a7a\u884c - -importerNET_error_dataformat3=\ \u884c{0}\u306b\u4e0d\u91e3\u308a\u5408\u3044(\u3042\u308b\u3044\u306f\u591a\u904e\u304e\u306a)\u5f15\u7528\u7b26 - +importerNET_error_dataformat3=\u884c{0}\u306b\u4e0d\u91e3\u308a\u5408\u3044(\u3042\u308b\u3044\u306f\u591a\u904e\u304e\u306a)\u5f15\u7528\u7b26 importerNET_error_dataformat4=\u9802\u70b9\u756a\u53f7 ''{0}'' \u304c [1,{1}]\u306e\u7bc4\u56f2\u5916 - importerNET_error_dataformat5=\u884c {0}\u3067\u9802\u70b9\u5ea7\u6a19\u5909\u63db\u306b\u554f\u984c\u3002\u6d6e\u52d5\u5c0f\u6570\u70b9\u6570\u578b\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 - importerNET_error_dataformat6={0}\u884c\u3067\u9802\u70b9\u306e\u30b5\u30a4\u30ba\u5909\u63db\u554f\u984c\u3002\u6d6e\u52d5\u5c0f\u6570\u70b9\u6570\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 - importerNET_error_dataformat7={0}\u884c\u3067\u8fba\u306e\u91cd\u307f\u89e3\u6790\u554f\u984c\u3002\u6d6e\u52d5\u5c0f\u6570\u70b9\u6570\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 - importerGraphML_error_syntax1=\u69cb\u6587\u30a8\u30e9\u30fc\u3001\u30d5\u30a1\u30a4\u30eb\u304c\u3067\u59cb\u307e\u3063\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u30de\u30fc\u30af\u30a2\u30c3\u30d7\u3002 - -importerGraphML_error_syntax2=\u69cb\u6587\u30a8\u30e9\u30fc\u3001\u30ce\u30fc\u30c9"{0} "\u306f\u30de\u30fc\u30af\u30a2\u30c3\u30d7\u5185\u306b\u30cd\u30b9\u30c8\u3055\u308c\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 - +importerGraphML_error_syntax2=\u69cb\u6587\u30a8\u30e9\u30fc\u3001\u30ce\u30fc\u30c9"{0} "\u306f\u30de\u30fc\u30af\u30a2\u30c3\u30d7\u5185\u306b\u30cd\u30b9\u30c8\u3055\u308c\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059\u3002 importerGraphML_error_attributeclass=\u5c5e\u6027\u306e\u30af\u30e9\u30b9\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u304b\u3001\u5c5e\u6027''{0}''\u306f\u672a\u77e5\u3067\u3059\u3002\u5c5e\u6027\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002 - importerGraphML_error_attributefor=\u5c5e\u6027\u306e\u30af\u30e9\u30b9\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u304b\u3001\u5c5e\u6027''{0}''\u306f\u672a\u77e5\u3067\u3059\u3002\u5c5e\u6027\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002 - importerGraphML_error_attributetype1=\u5c5e\u6027\u30bf\u30a4\u30d7\u306f\u3001\u5c5e\u6027''{0}''\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u6587\u5b57\u5217\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002 - importerGraphML_error_attributetype2=''{0}'' '\u306e\u5c5e\u6027\u30bf\u30a4\u30d7\u306f\u8a8d\u8b58\u3055\u308c\u307e\u305b\u3093\u3002\u5c5e\u6027\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002 - importerGraphML_error_attributedefault=\u5c5e\u6027 ''{0}'' \u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u304c''{1}'' \u30bf\u30a4\u30d7\u306b\u578b\u5909\u63db\u4e0d\u80fd - importerGraphML_error_attributecolumn_exist=ID'{0}'' \u3092\u6301\u3064\u5c5e\u6027\u306f\u3059\u3067\u306b\u5b58\u5728\u3057\u307e\u3059\u3001\u5c5e\u6027\u306f\u7121\u8996\u3055\u308c\u307e\u3059 - importerGraphML_error_attributeempty=\u5c5e\u6027\u306e\u89e3\u6790\u30a8\u30e9\u30fc\u306f\u3001id\u304c\u6b20\u843d\u3057\u3066\u3044\u307e\u3059\u3002 - -importerGraphML_log_nodeproperty=\u30ce\u30fc\u30c9\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f\:{0} - -importerGraphML_log_edgeproperty=\u8fba\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f\:{0} - -importerGraphML_log_nodeattribute=\u30ce\u30fc\u30c9\u5c5e\u6027\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f\: ''{0}'' ({1}) - +importerGraphML_log_nodeproperty=\u30ce\u30fc\u30c9\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f:{0} +importerGraphML_log_edgeproperty=\u8fba\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f:{0} +importerGraphML_log_nodeattribute=\u30ce\u30fc\u30c9\u5c5e\u6027\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f: ''{0}'' ({1}) importerGraphML_log_edgeattribute=\u8fba\u5c5e\u6027\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f''{0}'' ({1}) - -importerGraphML_log_default=\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5c5e\u6027\u5024\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f\: ''{0}'' ({1}) - -importerGraphML_error_datakey=\u8981\u7d20 id\={0}\u7528\u306e\u30c7\u30fc\u30bf\u30ad\u30fc\u304c\u6b20\u843d\u3057\u3066\u3044\u307e\u3059 - -importerGraphML_error_datavalue=\u8981\u7d20 id\={1}\u7528\u306e\u30c7\u30fc\u30bf\u5024 {0}\u30bf\u30a4\u30d7\u30a8\u30e9\u30fc\u3002\u5024\u304c ''{2}'' \u5c5e\u6027\u3068\u3057\u3066\u8a2d\u5b9a\u4e0d\u80fd\u3002 - +importerGraphML_log_default=\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5c5e\u6027\u5024\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f: ''{0}'' ({1}) +importerGraphML_error_datakey=\u8981\u7d20 id={0}\u7528\u306e\u30c7\u30fc\u30bf\u30ad\u30fc\u304c\u6b20\u843d\u3057\u3066\u3044\u307e\u3059 +importerGraphML_error_datavalue=\u8981\u7d20 id={1}\u7528\u306e\u30c7\u30fc\u30bf\u5024 {0}\u30bf\u30a4\u30d7\u30a8\u30e9\u30fc\u3002\u5024\u304c ''{2}'' \u5c5e\u6027\u3068\u3057\u3066\u8a2d\u5b9a\u4e0d\u80fd\u3002 importerGraphML_error_nodeid=\u30ce\u30fc\u30c9ID\u304c\u6b20\u843d\u3057\u3066\u3044\u307e\u3059\u3002\u30ce\u30fc\u30c9\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002 - importerGraphML_error_defaultedgetype=\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u8fba\u30bf\u30a4\u30d7''{0}''\u304c\u8a8d\u8b58\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306e"mixed"\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002 - -importerGraphML_error_edgetype=\ \u8fba ''{1}''\u306e\u30bf\u30a4\u30d7''{0}'' \u304c\u8a8d\u8b58\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002 - +importerGraphML_error_edgetype=\u8fba ''{1}''\u306e\u30bf\u30a4\u30d7''{0}'' \u304c\u8a8d\u8b58\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u5024\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002 importerGML_error_nodeidmissing=\u30ce\u30fc\u30c9ID\u304c\u6b20\u843d\u3057\u3066\u3044\u307e\u3059 - importerGML_error_directedgraphparse=\u30b0\u30e9\u30d5'directed'\u30d7\u30ed\u30d1\u30c6\u30a3\u306e\u4e88\u671f\u3057\u306a\u3044\u5024 - importerGML_error_directedparse=\u8fba''{0}''\u306e\u30b0\u30e9\u30d5'directed'\u30d7\u30ed\u30d1\u30c6\u30a3\u306e\u4e88\u671f\u3057\u306a\u3044\u5024 - importerGML_error_badparsing=\u7121\u52b9\u306aGML\u89e3\u6790 - importerTPL_error_badparsing=\u7121\u52b9\u306aTPL\u89e3\u6790 - importerGEXF_error_attributeclass=\u5c5e\u6027''\u30af\u30e9\u30b9''\u304c\u898b\u3064\u304b\u3089\u306a\u3044\u304b\u3001\u307e\u305f\u306f\u5c5e\u6027'' {0} ''\u306e\u305f\u3081\u306b\u672a\u77e5\u3067\u3042\u308b\u3002\u5c5e\u6027\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002 - importerGEXF_error_attributeempty=\u5c5e\u6027\u306e\u69cb\u6587\u89e3\u6790\u30a8\u30e9\u30fc\u3001ID\u307e\u305f\u306f\u30bf\u30a4\u30d7\u304c\u6b20\u843d\u3057\u3066\u3044\u307e\u3059\u3002 - importerGEXF_error_attributedefault=\u5c5e\u6027\u306f''{0}'' \u306e\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306f'{1}''\u306b\u578b\u5909\u63db\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 - importerGEXF_error_attributeoptions=\u5c5e\u6027\u306f''{0}'' \u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u5024\u306f''{1}''\u306b\u578b\u5909\u63db\u3059\u308b\u3053\u3068\u306f\u3067\u304d\u307e\u305b\u3093\u3002 - importerGEXF_error_attributecolumn_exist=ID''{0}'' \u3092\u6301\u3064\u5c5e\u6027\u306f\u5b58\u5728\u3057\u307e\u3059\u3002\u5c5e\u6027\u306f\u7121\u8996\u3055\u308c\u307e\u3059 - importerGEXF_error_attributetype1=\u5c5e\u6027 ''{0}''\u7528\u306e\u5c5e\u6027\u306e\u578b\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u6587\u5b57\u5217\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002 - importerGEXF_error_attributetype2=ID''{0}'' \u306e\u5c5e\u6027\u306e\u578b\u304c\u8a8d\u8b58\u3055\u308c\u307e\u305b\u3093\u3002\u5c5e\u6027\u306f\u7121\u8996\u3055\u308c\u307e\u3059 - -importerGEXF_error_datakey=\u8981\u7d20id\={0}\u7528\u30c7\u30fc\u30bf\u30ad\u30fc(\u5c5e\u6027 ''for'') \u304c\u6b20\u843d\u3057\u3066\u3044\u307e\u3059\u3002 - -importerGEXF_error_datakey1=\u8981\u7d20id\={0}\u7528\u30c7\u30fc\u30bf\u30ad\u30fc(\u5c5e\u6027 'id'') \u304c\u6b20\u843d\u3057\u3066\u3044\u307e\u3059\u3002 - -importerGEXF_error_dataoptionsvalue=\u30c7\u30fc\u30bf\u5024''{0}''\u306f\u8981\u7d20id\={1}\u7528\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u5024\u306f''{2}''\u306e\u5c5e\u6027\u3068\u3057\u3066\u8a2d\u5b9a\u3055\u308c\u307e\u305b\u3093\u3002 - +importerGEXF_error_datakey=\u8981\u7d20id={0}\u7528\u30c7\u30fc\u30bf\u30ad\u30fc(\u5c5e\u6027 ''for'') \u304c\u6b20\u843d\u3057\u3066\u3044\u307e\u3059\u3002 +importerGEXF_error_datakey1=\u8981\u7d20id={0}\u7528\u30c7\u30fc\u30bf\u30ad\u30fc(\u5c5e\u6027 'id'') \u304c\u6b20\u843d\u3057\u3066\u3044\u307e\u3059\u3002 +importerGEXF_error_dataoptionsvalue=\u30c7\u30fc\u30bf\u5024''{0}''\u306f\u8981\u7d20id={1}\u7528\u306e\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u5024\u306f''{2}''\u306e\u5c5e\u6027\u3068\u3057\u3066\u8a2d\u5b9a\u3055\u308c\u307e\u305b\u3093\u3002 importerGEXF_error_datavalue=\u8981\u7d20{1}\u7528\u306e\u30c7\u30fc\u30bf\u5024''{0}''\u578b\u30a8\u30e9\u30fc\u3002\u5024\u306f''{2}''\u306e\u5c5e\u6027\u3068\u3057\u3066\u8a2d\u5b9a\u3055\u308c\u307e\u305b\u3093\u3002 - +# importerGEXF_error_idtype_error = The id type ''{0}'' is not recognized, use 'integer', 'long' or 'string' importerGEXF_error_defaultedgetype=\u30c7\u30d5\u30a9\u30eb\u30c8\u306e\u8fba\u306e\u7a2e\u985e''{0}'' \u304c\u8a8d\u8b58\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306e"mixed"\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002 - importerGEXF_error_edgedouble=\u8fba\u306e\u7a2e\u985e''double'' \u306f\u73fe\u5728\u30b5\u30dd\u30fc\u30c8\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u306e"mixed"\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002 - importerGEXF_error_edgetype=\u8fba''{1}'' \u306e\u578b''{0}''\u306f\u8a8d\u8b58\u3055\u308c\u307e\u305b\u3093\u3002\u30c7\u30d5\u30a9\u30eb\u30c8\u5024\u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002 - importerGEXF_error_edgeid=\u8fbaID\u304c\u6b20\u843d\u3057\u3066\u3044\u307e\u3059\u3002 ID\u304c\u751f\u6210\u3055\u308c\u307e\u3057\u305f\u3002 - importerGEXF_error_edgesource=\u8fba\u306e\u30bd\u30fc\u30b9\u304c\u6b20\u843d\u3057\u3066\u3044\u307e\u3059\u3002\u8fba\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002 - importerGEXF_error_edgetarget=\u8fba\u306e\u30bf\u30fc\u30b2\u30c3\u30c8\u304c\u6b20\u843d\u3057\u3066\u3044\u307e\u3059\u3002\u8fba\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002 - importerGEXF_error_edgeweight=id ''{0}'' \u306e\u8fba\u306e\u91cd\u307f\u304c\u6d6e\u52d5\u5c0f\u6570\u70b9\u578b\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u91cd\u307f\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002 - importerGEXF_error_nodeid=\u30ce\u30fc\u30c9ID\u304c\u6b20\u843d\u3057\u3066\u3044\u307e\u3059\u3002\u30ce\u30fc\u30c9\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002 - importerGEXF_error_nodeposition=\u30ce\u30fc\u30c9 ''{0}''\u306f''{1}''\u4e0a\u3067\u306e\u4f4d\u7f6e\u304c\u9593\u9055\u3044\u3067\u3059(\u6d6e\u52d5\u5c0f\u6570\u70b9\u6570\u578b\u3067\u306a\u3044)\u3002 - importerGEXF_error_nodesize=\u30ce\u30fc\u30c9''{0}'' \u306e\u30b5\u30a4\u30ba\u304c\u9593\u9055\u3063\u3066\u3044\u307e\u3059(\u6d6e\u52d5\u5c0f\u6570\u70b9\u6570\u578b\u3067\u306a\u3044)\u3002 - importerGEXF_error_notnode=\u8981\u7d20''{0}'' \u306f\u30ce\u30fc\u30c9\u3067\u306f\u3042\u308a\u307e\u305b\u3093\u3002\u8981\u7d20\u306f\u7121\u8996\u3055\u308c\u307e\u3059\u3002 - -importerGEXF_error_pid_notfound=\u30ce\u30fc\u30c9''{1}''\u7528\u306e\u89aa\u30d7\u30ed\u30bb\u30b9\u8b58\u5225\u5b50''{0}''\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f\u3002 - importerGEXF_error_parsingdatetype=\u65e5\u4ed8\u578b''{0}'' \u304c\u8a8d\u8b58\u3055\u308c\u307e\u305b\u3093\u3002\u30c7\u30d5\u30a9\u30eb\u30c8''\u65e5\u4ed8''\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002 - importerGEXF_error_parsingmode=\u89e3\u6790\u30e2\u30fc\u30c9'' {0} ''\u304c\u8a8d\u8b58\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002\u30c7\u30d5\u30a9\u30eb\u30c8''\u9759\u7684''\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002 - -importerGEXF_error_node_timeinterval_parseerror=\u30ce\u30fc\u30c9''{0}'\u306e\u6642\u9593\u9593\u9694\u304c\u89e3\u6790\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u65e5\u4ed8\u306f\u3001xsd\:date\u3001xsd\uff1adateTime\u3001\u307e\u305f\u306fDouble formatting\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002 - -importerGEXF_error_edge_timeinterval_parseerror=\u8fba''{0}'\u306e\u6642\u9593\u9593\u9694\u304c\u89e3\u6790\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u65e5\u4ed8\u306f\u3001csd\:date\u3001xsd\uff1adateTime\u3001\u307e\u305f\u306fDouble formatting\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002 - -importerGEXF_error_nodeattribute_timeinterval_parseerror=\u30ce\u30fc\u30c9''{0}'\u5c5e\u6027\u306e\u6642\u9593\u9593\u9694\u304c\u89e3\u6790\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u65e5\u4ed8\u306f\u3001xsd\:date\u3001xsd\uff1adateTime\u3001\u307e\u305f\u306fDouble formatting\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002 - -importerGEXF_error_edgeattribute_timeinterval_parseerror=\u8fba''{0}'\u5c5e\u6027\u306e\u6642\u9593\u9593\u9694\u304c\u89e3\u6790\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u65e5\u4ed8\u306f\u3001xsd\:date\u3001xsd\uff1adateTime\u3001\u307e\u305f\u306fDouble formatting\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002 - -importerGEXF_error_nodecolorvalue=\u8b58\u5225\u5b50''{1}''\u306e\u30ce\u30fc\u30c9\u306f\u30ab\u30e9\u30fc\u30c1\u30e3\u30f3\u30cd\u30eb''{2}''\=''{0}''\u304c\u9593\u9055\u3063\u3066\u3044\u307e\u3059\u3002\u305d\u308c\u306f\u30010 < ''{2}'' < 255\u3067\u3042\u308b\u3079\u304d\u3067\u3059\u3002 - -importerGEXF_error_edgecolorvalue=\u8b58\u5225\u5b50''{1}''\u306e\u8fba\u306f\u30ab\u30e9\u30fc\u30c1\u30e3\u30f3\u30cd\u30eb''{2}''\=''{0}''\u304c\u9593\u9055\u3063\u3066\u3044\u307e\u3059\u3002\u305d\u308c\u306f\u30010 < ''{2}'' < 255\u3067\u3042\u308b\u3079\u304d\u3067\u3059\u3002 - -importerGEXF_error_nodeopacityvalue=\u8b58\u5225\u5b50''{1}''\u306e\u30ce\u30fc\u30c9\u306f\u4e0d\u900f\u904e\u5ea6a\=''{0}''\u304c\u9593\u9055\u3063\u3066\u3044\u307e\u3059\u3002\u305d\u308c\u306f\u30010.0 < a < 1.0\u3067\u3042\u308b\u3079\u304d\u3067\u3059\u3002 - -importerGEXF_error_edgeopacityvalue=\u8b58\u5225\u5b50''{1}''\u306e\u8fba\u306f\u4e0d\u900f\u904e\u5ea6a\=''{0}''\u304c\u9593\u9055\u3063\u3066\u3044\u307e\u3059\u3002\u305d\u308c\u306f\u30010.0 < a < 1.0\u3067\u3042\u308b\u3079\u304d\u3067\u3059\u3002 - -importerGEXF_log_edgeeproperty=\u8fba\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f\:{0} - -importerGEXF_log_nodeproperty=\u30ce\u30fc\u30c9\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f\:{0} - +importerGEXF_error_node_timeinterval_parseerror=\u30ce\u30fc\u30c9''{0}'\u306e\u6642\u9593\u9593\u9694\u304c\u89e3\u6790\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u65e5\u4ed8\u306f\u3001xsd:date\u3001xsd\uff1adateTime\u3001\u307e\u305f\u306fDouble formatting\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +importerGEXF_error_edge_timeinterval_parseerror=\u8fba''{0}'\u306e\u6642\u9593\u9593\u9694\u304c\u89e3\u6790\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u65e5\u4ed8\u306f\u3001csd:date\u3001xsd\uff1adateTime\u3001\u307e\u305f\u306fDouble formatting\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +# importerGEXF_error_node_timeintervals_parseerror = The time intervals for node ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +# importerGEXF_error_edge_timeintervals_parseerror = The time intervals for edge ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_nodeattribute_timeinterval_parseerror=\u30ce\u30fc\u30c9''{0}'\u5c5e\u6027\u306e\u6642\u9593\u9593\u9694\u304c\u89e3\u6790\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u65e5\u4ed8\u306f\u3001xsd:date\u3001xsd\uff1adateTime\u3001\u307e\u305f\u306fDouble formatting\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +importerGEXF_error_edgeattribute_timeinterval_parseerror=\u8fba''{0}'\u5c5e\u6027\u306e\u6642\u9593\u9593\u9694\u304c\u89e3\u6790\u3067\u304d\u307e\u305b\u3093\u3067\u3057\u305f\u3002\u65e5\u4ed8\u306f\u3001xsd:date\u3001xsd\uff1adateTime\u3001\u307e\u305f\u306fDouble formatting\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +# importerGEXF_error_node_timestamp_parseerror = The timestamp for node ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +# importerGEXF_error_edge_timestamp_parseerror = The timestamp for edge ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +# importerGEXF_error_node_timestamps_parseerror = The timestamps for node ''{0}'' could not be parsed. +# importerGEXF_error_edge_timestamps_parseerror = The timestamps for edge ''{0}'' could not be parsed. +# importerGEXF_error_nodeattribute_timestamp_parseerror = The timestamp for node ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +# importerGEXF_error_edgeattribute_timestamp_parseerror = The timestamp for edge ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +# importerGEXF_error_nodeattribute_timeset_parseerror = The timestamps or intervals for node ''{0}'' attribute could not be parsed. +# importerGEXF_error_edgeattribute_timeset_parseerror = The timestamps or intervals for edge ''{0}'' attribute could not be parsed. +importerGEXF_error_nodecolorvalue=\u8b58\u5225\u5b50''{1}''\u306e\u30ce\u30fc\u30c9\u306f\u30ab\u30e9\u30fc\u30c1\u30e3\u30f3\u30cd\u30eb''{2}''=''{0}''\u304c\u9593\u9055\u3063\u3066\u3044\u307e\u3059\u3002\u305d\u308c\u306f\u30010 < ''{2}'' < 255\u3067\u3042\u308b\u3079\u304d\u3067\u3059\u3002 +importerGEXF_error_edgecolorvalue=\u8b58\u5225\u5b50''{1}''\u306e\u8fba\u306f\u30ab\u30e9\u30fc\u30c1\u30e3\u30f3\u30cd\u30eb''{2}''=''{0}''\u304c\u9593\u9055\u3063\u3066\u3044\u307e\u3059\u3002\u305d\u308c\u306f\u30010 < ''{2}'' < 255\u3067\u3042\u308b\u3079\u304d\u3067\u3059\u3002 +importerGEXF_error_nodeopacityvalue=\u8b58\u5225\u5b50''{1}''\u306e\u30ce\u30fc\u30c9\u306f\u4e0d\u900f\u904e\u5ea6a=''{0}''\u304c\u9593\u9055\u3063\u3066\u3044\u307e\u3059\u3002\u305d\u308c\u306f\u30010.0 < a < 1.0\u3067\u3042\u308b\u3079\u304d\u3067\u3059\u3002 +importerGEXF_error_edgeopacityvalue=\u8b58\u5225\u5b50''{1}''\u306e\u8fba\u306f\u4e0d\u900f\u904e\u5ea6a=''{0}''\u304c\u9593\u9055\u3063\u3066\u3044\u307e\u3059\u3002\u305d\u308c\u306f\u30010.0 < a < 1.0\u3067\u3042\u308b\u3079\u304d\u3067\u3059\u3002 +# importerGEXF_error_node_open_interval = Node of id ''{0}'' uses open intervals, which have been deprecated. +# importerGEXF_error_edge_open_interval = Edge of id ''{0}'' uses open intervals, which have been deprecated. +# importerGEXF_error_slice_bound_missing = Missing timestamp or interval attribute on +# importerGEXF_error_pid = The node of id ''{0}'' defines a parent using a pid. Hierarchical graph support has been deprecated and will be ignored. +# importerGEXF_error_timezone_parseerror = The time zone ''{0}'' couldn't be recognized +# importerGEXF_error_timerepresentation_intervalerror = The time representation is set as 'timestamp' so intervals can't be used. Set the time representation to 'interval' in . +# importerGEXF_error_timerepresentation_timestamperror = The time representation is set as 'interval' so timestamps can't be used. Set the time representation to 'timestamp' in . +importerGEXF_log_edgeeproperty=\u8fba\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f:{0} +importerGEXF_log_nodeproperty=\u30ce\u30fc\u30c9\u306e\u30d7\u30ed\u30d1\u30c6\u30a3\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f:{0} importerGEXF_log_edgeattribute=\u8fba\u5c5e\u6027\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f''{0}'' ({1}) - importerGEXF_log_nodeattribute=\u30ce\u30fc\u30c9\u5c5e\u6027\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f''{0}'' ({1}) - -importerGEXF_log_default=\u30c7\u30d5\u30a9\u30eb\u30c8\u5c5e\u6027\u5024\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f\:''{0}'' ({1}) - -importerGEXF_log_options=\u5c5e\u6027\u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f\:''{0}'' ({1}) - +importerGEXF_log_default=\u30c7\u30d5\u30a9\u30eb\u30c8\u5c5e\u6027\u5024\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f:''{0}'' ({1}) +importerGEXF_log_options=\u5c5e\u6027\u30aa\u30d7\u30b7\u30e7\u30f3\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f:''{0}'' ({1}) importerGEXF_log_version10=GEXF version 1.0 (\u5ec3\u6b62\u4e88\u5b9a) - importerGEXF_log_version11=GEXF version 1.1 - importerGEXF_log_version12=GEXF\u30d0\u30fc\u30b8\u30e7\u30f31.2 - importerGEXF_log_version13=GEXF version 1.3 - -importerGEXF_log_version_undef=\ GEXF\u30d0\u30fc\u30b8\u30e7\u30f3\u4e0d\u660e. \u30d1\u30fc\u30b5\u30fc 1.3 \u4f7f\u7528. - +importerGEXF_log_version_undef=GEXF\u30d0\u30fc\u30b8\u30e7\u30f3\u4e0d\u660e. \u30d1\u30fc\u30b5\u30fc 1.3 \u4f7f\u7528. importerGEXF_log_dynamic_weight=\u52d5\u7684\u91cd\u307f\u306e\u5217\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f - importerDL_error_firstline=DL\u30d5\u30a1\u30a4\u30eb\u306e\u6700\u521d\u306e\u884c\u306f'DL'\u3067\u59cb\u307e\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 - importerDL_error_unknowntag=\u30d8\u30c3\u30c0\u672a\u77e5\u306e\u30bf\u30b0'' {0} '' - importerDL_error_formatmissing=DL '\u30d5\u30a9\u30fc\u30de\u30c3\u30c8' \u30bf\u30b0\u304c\u306a\u3044\u306e\u3067\u3001\u30c7\u30d5\u30a9\u30eb\u30c8\u306e'fullmatrix'\u3092\u4f7f\u3044\u307e\u3059\u3002 - -importerDL_error_badformat=\u30d5\u30a9\u30fc\u30de\u30c3\u30c8''{0}'' \u306f\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u305b\u3093\u3002'format\=edgelist1'\u304b 'format\=fullmatrix'\u304b\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u307f\u63d0\u4f9b\u3002 - -importerDL_error_nmissing=DL\u30d5\u30a1\u30a4\u30eb\u306e\u30d8\u30c3\u30c0\u306f\u3001\u30bf\u30b0'm \= '\u304c\u542b\u307e\u308c\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 - -importerDL_error_mmissing=DL\u30d5\u30a1\u30a4\u30eb\u306e\u30d8\u30c3\u30c0\u306f\u3001\u30bf\u30b0'm \= '\u304c\u542b\u307e\u308c\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 - +importerDL_error_badformat=\u30d5\u30a9\u30fc\u30de\u30c3\u30c8''{0}'' \u306f\u30b5\u30dd\u30fc\u30c8\u3057\u3066\u3044\u307e\u305b\u3093\u3002'format=edgelist1'\u304b 'format=fullmatrix'\u304b\u306e\u30d5\u30a9\u30fc\u30de\u30c3\u30c8\u306e\u307f\u63d0\u4f9b\u3002 +importerDL_error_nmissing=DL\u30d5\u30a1\u30a4\u30eb\u306e\u30d8\u30c3\u30c0\u306f\u3001\u30bf\u30b0'm = '\u304c\u542b\u307e\u308c\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 +importerDL_error_mmissing=DL\u30d5\u30a1\u30a4\u30eb\u306e\u30d8\u30c3\u30c0\u306f\u3001\u30bf\u30b0'm = '\u304c\u542b\u307e\u308c\u3066\u3044\u308b\u5fc5\u8981\u304c\u3042\u308a\u307e\u3059 importerDL_error_labelscount=\u30e9\u30d9\u30eb\u6570({0})\u304cn\u306e\u30bf\u30b0({1})\u3068\u7570\u306a\u308b - importerDL_error_nodata=\u30c7\u30fc\u30bf\u30e9\u30a4\u30f3\u304c\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f - importerDL_error_matrixrowscount=\u884c\u5217\u306e\u884c\u6570({0})\u304cn\u306e\u30bf\u30b0({1})\u3088\u308a\u3082\u5927\u304d\u3044 - importerDL_error_matrixrowscount2=\u884c\u5217\u306e\u884c\u6570({0})\u304cn\u306e\u30bf\u30b0({1})\u3088\u308a\u3082\u5c0f\u3055\u3044 - importerDL_error_matriciescount=\u884c\u5217\u306e\u6210\u5206\u6570({0})\u304cnm\u306e\u30bf\u30b0({1})\u3068\u7570\u306a\u308b - importerDL_error_matrixentriescount=\u884c\u5217{1}\u306e\u884c{0}\u306e\u884c\u5217\u5165\u529b\u306e\u6570\u306f\u8a31\u53ef\u3055\u308c\u305f\u5165\u529b\u3092\u8d85\u3048\u3066\u3044\u307e\u3059\u3002(DL\u30d5\u30a1\u30a4\u30eb\u306e\u884c{2}) - importerDL_error_weightparseerror=\u884c"{2}"\u306e\u884c\u5217{1}\u306e\u91cd\u307f"{0}"\u3092\u89e3\u6790\u4e0d\u80fd - importerDL_error_edgelistssetscount=\u8fba\u30ea\u30b9\u30c8\u306e\u30bb\u30c3\u30c8({0})\u306e\u6570\u304cnm\u30bf\u30b0\uff08{1}\uff09\u3068\u306f\u7570\u306a\u308a\u307e\u3059\u3002 - importerDL_error_edgelistrowparse=\u8fba\u30ea\u30b9\u30c8\u884c{1}\u306eid"{0}"ID\u304b\u3089\u89e3\u6790\u4e0d\u80fd - importerDL_error_edgeparseweight=\u8fba\u30ea\u30b9\u30c8\u884c{1}\u306e\u91cd\u307f"{0}"\u3092\u89e3\u6790\u4e0d\u80fd - importerDOT_error_nothingfound="\u30b0\u30e9\u30d5"\u3082"\u6709\u5411\u30b0\u30e9\u30d5"\u3082\u898b\u3064\u304b\u308a\u307e\u305b\u3093\u3067\u3057\u305f - importerDOT_error_labelunreachable=\u884c{0}\u3067\u30e9\u30d9\u30eb\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093 - importerDOT_error_colorunreachable=\u884c{0}\u3067\u8272\u3092\u898b\u3064\u3051\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093 - -importerDOT_error_edgeparsing=\u884c{0}\u3067\u8fba\u3092\u89e3\u6790\u4e0d\u80fd - -importerDOT_error_posunreachable=\u884c{0}\u3067\u30ce\u30fc\u30c9\u306e\u4f4d\u7f6e\u3092\u89e3\u6790\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002 pos\="x,y"\u306e\u5f62\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 - +importerDOT_error_posunreachable=\u884c{0}\u3067\u30ce\u30fc\u30c9\u306e\u4f4d\u7f6e\u3092\u89e3\u6790\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u305b\u3093\u3002 pos="x,y"\u306e\u5f62\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093\u3002 importerDOT_error_weightunreachable=\u884c{0}\u3067\u306e\u8fba\u306e\u91cd\u307f\u3092\u89e3\u6790\u4e0d\u80fd -importerDOT_log_nodeattribute=\u30ce\u30fc\u30c9\u5c5e\u6027\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f''{0}'' ({1}) +# importerTGF_error_emptynodes = No nodes found + diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_ko.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_ko.properties new file mode 100644 index 0000000000..5ebbc2b667 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_ko.properties @@ -0,0 +1,139 @@ + + +fileType_GDF_Name=GDF \uD30C\uC77C (GUESS) +fileType_NET_Name=NET \uD30C\uC77C (Pajek) +fileType_GML_Name=GML \uD30C\uC77C +fileType_TLP_Name=TLP \uD30C\uC77C +fileType_TGF_Name=TFG \uD30C\uC77C +fileType_Edges_Name=\uC5E3\uC9C0 \uBAA9\uB85D +fileType_GraphViz_Name=GraphViz \uD30C\uC77C +fileType_DL_Name=DL \uD30C\uC77C (UCINET) +fileType_VNA_Name=VNA \uD30C\uC77C +importerGDF_error_dataformat1=\uD30C\uC77C\uC740 "nodedef> name" \uD589\uC73C\uB85C \uC2DC\uC791\uD574\uC57C \uD569\uB2C8\uB2E4. +importerGDF_error_dataformat3=\uB178\uB4DC ''{1}''\uC5D0 \uD55C \uC5F4 ''{0}''\uC744 \uBD88\uB7EC\uC624\uC9C0 \uBABB \uD588\uC2B5\uB2C8\uB2E4. \uAC12 ''{2}''\uC5D0 \uC624\uB958. +importerGDF_error_dataformat5=\uB370\uC774\uD130 \uC720\uD615 ''{0}''\uC744 \uC778\uC2DD\uD560 \uC218 \uC5C6\uC73C\uBA70, \uB300\uC2E0 \uBB38\uC790\uC5F4\uC774 \uC0AC\uC6A9\uB429\uB2C8\uB2E4. +importerGDF_error_dataformat6=''{0}''\uC5D0 \uB300\uD55C \uC5F4 \uC720\uD615\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC73C\uBA70, \uB300\uC2E0 \uBB38\uC790\uC5F4\uC774 \uC0AC\uC6A9\uB429\uB2C8\uB2E4. +importerGDF_error_dataformat7=''{0}'' \uD589\uC5D0 \uD5E4\uB354\uC5D0\uC11C \uC815\uC758\uB41C \uAC83\uBCF4\uB2E4 \uB9CE\uC740 \uC5F4\uC774 \uC788\uC2B5\uB2C8\uB2E4. \uC27C\uD45C\uC758 \uC218\uB97C \uD655\uC778\uD558\uC2ED\uC2DC\uC624. +importerGDF_error_dataformat8=\uB178\uB4DC \uC5F4 "{0}"\uC774 \uC774\uBBF8 \uC788\uC73C\uBBC0\uB85C \uCD94\uAC00\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 +importerTPL_error_dataformat1={0} \uD589\uC758 \uC5D0\uC9C0 \uD3EC\uB9F7\uC774 \uC798\uBABB\uB418\uC5C8\uC2B5\uB2C8\uB2E4. +importerNET_error_dataformat1=\uD30C\uC77C\uC740 "*vertices"\uB85C \uC2DC\uC791\uD574\uC57C \uD569\uB2C8\uB2E4. +importerNET_error_dataformat2={0} \uD589\uC5D0 \uBE48 \uC904\uC774 \uAC10\uC9C0\uB418\uC5C8\uC2B5\uB2C8\uB2E4 +importerNET_error_dataformat3={0} \uD589\uC5D0 \uBD88\uADE0\uD615\uD55C (\uD639\uC740 \uB108\uBB34 \uB9CE\uC740) \uB530\uC634\uD45C\uAC00 \uC788\uC2B5\uB2C8\uB2E4 +importerNET_error_dataformat6={0} \uD589\uC758 \uC815\uC810 \uD06C\uAE30 \uBCC0\uD658 \uBB38\uC81C\uC785\uB2C8\uB2E4. float\uD615 \uC22B\uC790\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4. +importerNET_error_dataformat5={0} \uD589\uC758 \uC815\uC810 \uC88C\uD45C \uBCC0\uD658 \uBB38\uC81C\uC785\uB2C8\uB2E4. float\uD615 \uC22B\uC790\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4. +importerGraphML_error_syntax2=\uAD6C\uBB38 \uC624\uB958, \uB178\uB4DC "{0}"\uC740 \uB9C8\uD06C\uC5C5\uC73C\uB85C \uB458\uB7EC \uC2F8\uC5EC\uC57C \uD569\uB2C8\uB2E4. +importerGraphML_error_attributeclass=''{0}'' \uC18D\uC131\uC5D0 \uB300\uD55C \uC18D\uC131 \uD074\uB798\uC2A4\uB97C \uCC3E\uC744 \uC218 \uC5C6\uAC70\uB098 \uC54C \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC18D\uC131\uC740 \uBB34\uC2DC\uB429\uB2C8\uB2E4. +importerGraphML_error_attributefor=''{0}'' \uC18D\uC131\uC5D0 \uB300\uD55C \uC18D\uC131 ''for''\uB97C \uCC3E\uC744 \uC218 \uC5C6\uAC70\uB098 \uC54C \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC18D\uC131\uC740 \uBB34\uC2DC\uB429\uB2C8\uB2E4. +importerGraphML_error_attributetype2=''{0}''\uC5D0 \uB300\uD55C \uC18D\uC131 \uC720\uD615\uC744 \uC778\uC2DD\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC18D\uC131\uC774 \uBB34\uC2DC\uB429\uB2C8\uB2E4. +importerGraphML_error_attributedefault=\uC18D\uC131 ''{0}''\uC758 \uAE30\uBCF8\uAC12\uC744 ''{1}'' \uC720\uD615\uC73C\uB85C \uCE90\uC2A4\uD2B8 \uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. +importerGraphML_error_attributecolumn_exist=id\uAC00 '{0}'\uC778 \uC18D\uC131\uC774 \uC774\uBBF8 \uC874\uC7AC\uD569\uB2C8\uB2E4. \uD574\uB2F9 \uC18D\uC131\uC740 \uBB34\uC2DC\uB429\uB2C8\uB2E4 +importerGraphML_error_attributeempty=\uC18D\uC131 \uAD6C\uBB38 \uBD84\uC11D \uC624\uB958, id\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. +importerGraphML_log_nodeproperty=\uBC1C\uACAC\uB41C \uB178\uB4DC \uC18D\uC131: {0} +importerGraphML_log_nodeattribute=\uB178\uB4DC \uC18D\uC131 ''{0}''({1})\uC744 \uCC3E\uC558\uC2B5\uB2C8\uB2E4 +importerGraphML_log_default=\uAE30\uBCF8 \uC18D\uC131 \uAC12\uC774 \uBC1C\uACAC\uB418\uC5C8\uC2B5\uB2C8\uB2E4: ''{0}'' ({1}) +importerGraphML_error_datakey=\uC694\uC18C id={0}\uC5D0 \uB300\uD55C \uB370\uC774\uD130 \uD0A4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4 +importerGraphML_error_nodeid=\uB178\uB4DC id\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \uB178\uB4DC\uB294 \uBB34\uC2DC\uB429\uB2C8\uB2E4. +importerGraphML_error_defaultedgetype=\uAE30\uBCF8 \uC5D0\uC9C0 \uC720\uD615 ''{0}''\uC744 \uC778\uC2DD\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uAE30\uBCF8 ''mixed''\uB85C \uC124\uC815\uD569\uB2C8\uB2E4. +importerGraphML_error_edgetype=\uC5E3\uC9C0 ''{1}''\uC758 ''{0}'' \uC720\uD615\uC774 \uC778\uC2DD\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uAE30\uBCF8\uAC12\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4. +importerGML_error_nodeidmissing=\uB178\uB4DC id\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4 +importerGML_error_directedparse=\uC5E3\uC9C0 ''{0}''\uC5D0 \uB300\uD55C 'directed' \uC18D\uC131\uC5D0 \uC608\uAE30\uCE58 \uC54A\uC740 \uAC12 +importerGML_error_badparsing=\uC798\uBABB\uB41C GML \uAD6C\uBB38 \uBD84\uC11D +importerTPL_error_badparsing=\uC798\uBABB\uB41C TPL \uAD6C\uBB38 \uBD84\uC11D +importerGEXF_error_attributeempty=\uC18D\uC131 \uAD6C\uBB38 \uBD84\uC11D \uC624\uB958. id\uB098 \uC720\uD615\uC774 \uC5C6\uC2B5\uB2C8\uB2E4. +importerGEXF_error_attributedefault=\uC18D\uC131 ''{0}'' \uAE30\uBCF8\uAC12\uC740 ''{1}'' \uC720\uD615\uC73C\uB85C \uCE90\uC2A4\uD2B8 \uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. +importerGEXF_error_attributeoptions=\uC18D\uC131 ''{0}'' \uC120\uD0DD \uAC12\uC740 ''{1}'' \uC720\uD615\uC73C\uB85C \uCE90\uC2A4\uD2B8 \uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. +importerGEXF_error_attributetype1=\uC18D\uC131 ''{0}''\uC5D0 \uB300\uD55C \uC18D\uC131 \uC720\uD615\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uAE30\uBCF8 \uBB38\uC790\uC5F4\uB85C \uC124\uC815\uD569\uB2C8\uB2E4. +importerGEXF_error_attributetype2=''{0}''\uC5D0 \uB300\uD55C \uC18D\uC131 \uC720\uD615\uC744 \uC778\uC2DD\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC18D\uC131\uC740 \uBB34\uC2DC\uB429\uB2C8\uB2E4. +importerGEXF_error_datakey=\uC694\uC18C id={0}\uC5D0 \uB300\uD55C \uB370\uC774\uD130 \uD0A4 (\uC18D\uC131 ''for'')\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4 +importerGEXF_error_edgedouble=\uC5E3\uC9C0 \uC720\uD615 ''double''\uC740 \uD604\uC7AC \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uAE30\uBCF8\uAC12 ''mixed''\uB85C \uC124\uC815\uD569\uB2C8\uB2E4. +importerGEXF_error_edgetype=\uC5E3\uC9C0 ''{1}''\uC758 \uD615\uC2DD ''{0}''\uC774(\uAC00) \uC778\uC2DD\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uAE30\uBCF8\uAC12\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4. +importerGEXF_error_edgeid=\uC5E3\uC9C0 id\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. id\uAC00 \uC0DD\uC131\uB418\uC5C8\uC2B5\uB2C8\uB2E4. +importerGEXF_error_edgesource=\uC5E3\uC9C0 \uC18C\uC2A4\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \uC5E3\uC9C0\uAC00 \uBB34\uC2DC\uB429\uB2C8\uB2E4. +importerGEXF_error_edgetarget=\uC5E3\uC9C0 \uD0C0\uAC9F\uC774 \uC5C6\uC2B5\uB2C8\uB2E4. \uC5E3\uC9C0\uAC00 \uBB34\uC2DC\uB429\uB2C8\uB2E4. +fileType_GEXF_Name=GEXF \uD30C\uC77C +fileType_GraphML_Name=GraphML \uD30C\uC77C +importerGDF_error_dataformat2=\uC5F4 \uD615\uC2DD\uC774 \uC798\uBABB\uB418\uC5C8\uC2B5\uB2C8\uB2E4. \uAC01 \uC5F4\uC5D0\uB294 \uCD5C\uC18C\uD55C \uC774\uB984\uC774 \uD3EC\uD568\uB418\uC5B4\uC57C \uD569\uB2C8\uB2E4. \uC5F4 \uC774\uB984\uC5D0\uB294 \uC27C\uD45C\uAC00 \uD3EC\uD568\uB418\uC9C0 \uC54A\uC544\uC57C \uD569\uB2C8\uB2E4. +importerGDF_error_dataformat4={2}\uC5D0 \uB300\uD55C ''{0}'' \uC18D\uC131 ''{1}''\uB97C \uC124\uC815\uD558\uC9C0 \uBABB\uD588\uC2B5\uB2C8\uB2E4. +importerNET_error_dataformat4=\uC815\uC810 \uBC88\uD638 ''{0}''\uC774 [1,{1}] \uBC94\uC704\uC5D0 \uC5C6\uC2B5\uB2C8\uB2E4 +importerNET_error_dataformat7={0} \uD589\uC758 \uC5E3\uC9C0 \uAC00\uC911\uCE58 \uAD6C\uBB38 \uBD84\uC11D \uBB38\uC81C\uC785\uB2C8\uB2E4. double\uD615 \uC22B\uC790\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4. +importerGDF_error_dataformat9=\uC5E3\uC9C0 \uC5F4 "{0}"\uC774 \uC774\uBBF8 \uC788\uC73C\uBBC0\uB85C \uCD94\uAC00\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 +importerGraphML_error_syntax1=\uAD6C\uBB38 \uC624\uB958, \uD30C\uC77C\uC740 \uB9C8\uD06C\uC5C5\uC73C\uB85C \uC2DC\uC791\uD574\uC57C \uD569\uB2C8\uB2E4. +importerGraphML_error_attributetype1=''{0}'' \uC18D\uC131\uC5D0 \uB300\uD55C \uC18D\uC131 \uC720\uD615\uC744 \uCC3E\uC744 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uAE30\uBCF8\uAC12 \uBB38\uC790\uC5F4\uB85C \uC124\uC815\uB429\uB2C8\uB2E4. +importerGraphML_error_graphattributes=\uADF8\uB798\uD504 \uC18D\uC131 ''{0}''\uC740 Gephi\uC5D0\uC11C \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC73C\uBBC0\uB85C \uBB34\uC2DC\uB429\uB2C8\uB2E4 +importerGraphML_log_edgeproperty=\uBC1C\uACAC\uB41C \uC5E3\uC9C0 \uC18D\uC131: {0} +importerGraphML_log_edgeattribute=\uC5E3\uC9C0 \uC18D\uC131 ''{0}''({1})\uC744 \uCC3E\uC558\uC2B5\uB2C8\uB2E4 +importerGraphML_error_datavalue=\uC694\uC18C id={1}\uC5D0 \uB300\uD55C \uB370\uC774\uD130 \uAC12 {0} \uC720\uD615 \uC624\uB958\uC785\uB2C8\uB2E4. \uAC12\uC744 ''{2}''\uC18D\uC131\uC73C\uB85C \uC124\uC815\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. +importerGML_error_directedgraphparse=\uADF8\uB798\uD504 '\uBC29\uD5A5' \uC18D\uC131\uC5D0 \uB300\uD55C \uC608\uAE30\uCE58 \uC54A\uC740 \uAC12 +importerGEXF_error_attributeclass=\uC18D\uC131 ''{0}''\uC5D0 \uB300\uD55C \uC18D\uC131 ''class''\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \uC18D\uC131\uC740 \uBB34\uC2DC\uB429\uB2C8\uB2E4. +importerGEXF_error_attributecolumn_exist=id\uAC00 ''{0}''\uC778 \uC18D\uC131\uC774 \uC774\uBBF8 \uC874\uC7AC\uD569\uB2C8\uB2E4. \uD574\uB2F9 \uC18D\uC131\uC740 \uBB34\uC2DC\uB429\uB2C8\uB2E4 +importerGEXF_error_dataoptionsvalue=\uB370\uC774\uD130 \uAC12 ''{0}''\uC740(\uB294) \uC694\uC18C id={1}\uC5D0 \uB300\uD55C \uC635\uC158\uC774 \uC544\uB2D9\uB2C8\uB2E4. \uD574\uB2F9 \uAC12\uC744 ''{2}'' \uC18D\uC131\uC73C\uB85C \uC124\uC815\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. +importerGEXF_error_defaultedgetype=\uAE30\uBCF8 \uC5E3\uC9C0 \uC720\uD615 ''{0}''\uC744(\uB97C) \uC778\uC2DD\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uAE30\uBCF8\uAC12 ''mixed''\uB85C \uC124\uC815\uD569\uB2C8\uB2E4. +importerGEXF_error_datakey1=\uC694\uC18C id={0}\uC5D0 \uB300\uD55C \uB370\uC774\uD130 \uD0A4(\uC18D\uC131 ''id'')\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4 +importerGEXF_error_idtype_error=id \uC720\uD615 ''{0}''\uC744 \uC778\uC2DD\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. 'integer', 'long' \uB610\uB294 'string'\uC744 \uC0AC\uC6A9\uD558\uC2ED\uC2DC\uC624 +importerGEXF_error_datavalue={1} \uC694\uC18C\uC5D0 \uB300\uD55C \uB370\uC774\uD130 \uAC12 ''{0}'' \uC720\uD615 \uC624\uB958\uC785\uB2C8\uB2E4. \uAC12\uC744 ''{2}'' \uD2B9\uC131\uC73C\uB85C \uC124\uC815\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. +importerGEXF_error_nodesize=\uB178\uB4DC ''{0}''\uC774 \uC798\uBABB\uB41C \uD06C\uAE30\uB97C \uAC00\uC9C0\uACE0 \uC788\uC2B5\uB2C8\uB2E4 (float\uD615\uC774 \uC544\uB2D8). +importerGEXF_error_parsingdatetype=\uB0A0\uC9DC \uC720\uD615 ''{0}''\uC774 \uC778\uC2DD\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uAE30\uBCF8 ''date''\uB85C \uC124\uC815\uD569\uB2C8\uB2E4. +importerGEXF_error_node_timeinterval_parseerror=\uB178\uB4DC ''{0}''\uC758 \uC2DC\uAC04 \uAC04\uACA9\uC744 \uAD6C\uBB38 \uBD84\uC11D\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. xsd:date, xsd:dateTime \uB610\uB294 Double \uD615\uC2DD\uC744 \uC0AC\uC6A9\uD558\uC2ED\uC2DC\uC624. +importerGEXF_error_edge_timeinterval_parseerror=\uC5E3\uC9C0 ''{0}''\uC758 \uC2DC\uAC04 \uAC04\uACA9\uC744 \uAD6C\uBB38 \uBD84\uC11D\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. xsd:date, xsd:dateTime \uB610\uB294 Double \uD615\uC2DD\uC744 \uC0AC\uC6A9\uD558\uC2ED\uC2DC\uC624. +importerGEXF_error_node_timeintervals_parseerror=\uB178\uB4DC ''{0}''\uC758 \uC2DC\uAC04 \uAC04\uACA9\uC744 \uAD6C\uBB38 \uBD84\uC11D\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. xsd:date, xsd:dateTime \uB610\uB294 Double \uD615\uC2DD\uC744 \uC0AC\uC6A9\uD558\uC2ED\uC2DC\uC624. +importerGEXF_error_edge_timeintervals_parseerror=\uC5E3\uC9C0 ''{0}''\uC758 \uC2DC\uAC04 \uAC04\uACA9\uC744 \uAD6C\uBB38 \uBD84\uC11D\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. xsd:date, xsd:dateTime \uB610\uB294 Double \uD615\uC2DD\uC744 \uC0AC\uC6A9\uD558\uC2ED\uC2DC\uC624. +importerGEXF_error_nodeattribute_timestamp_parseerror=\uB178\uB4DC ''{0}'' \uC18D\uC131\uC758 \uD0C0\uC784\uC2A4\uD0EC\uD504\uB97C \uAD6C\uBB38 \uBD84\uC11D\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. xsd:date, xsd:dateTime \uB610\uB294 Double \uD615\uC2DD\uC744 \uC0AC\uC6A9\uD558\uC2ED\uC2DC\uC624. +importerGEXF_error_edgeattribute_timestamp_parseerror=\uC5E3\uC9C0 ''{0}'' \uC18D\uC131\uC758 \uD0C0\uC784\uC2A4\uD0EC\uD504\uB97C \uAD6C\uBB38 \uBD84\uC11D\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. xsd:date, xsd:dateTime \uB610\uB294 Double \uD615\uC2DD\uC744 \uC0AC\uC6A9\uD558\uC2ED\uC2DC\uC624. +importerGEXF_error_pid=id ''{0}''\uC758 \uB178\uB4DC\uB294 pid\uB97C \uC0AC\uC6A9\uD558\uC5EC \uBD80\uBAA8\uB97C \uC815\uC758\uD569\uB2C8\uB2E4. \uACC4\uCE35\uC801 \uADF8\uB798\uD504\uB294 \uB354 \uC774\uC0C1 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC73C\uBA70 \uBB34\uC2DC\uB429\uB2C8\uB2E4. +importerGEXF_error_timerepresentation_timestamperror=\uC2DC\uAC04 \uD45C\uD604\uC774 'interval'\uB85C \uC124\uC815\uB418\uC5B4 \uD0C0\uC784\uC2A4\uD0EC\uD504\uB97C \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC5D0\uC11C \uC2DC\uAC04 \uD45C\uD604\uC744 'timestamp'\uB85C \uC124\uC815\uD569\uB2C8\uB2E4. +importerGEXF_log_version12=GEXF \uBC84\uC804 1.2 (\uB354 \uC774\uC0C1 \uC0AC\uC6A9 \uC548 \uD568) +importerDL_error_matriciescount=\uD589\uB82C \uC9D1\uD569\uC758 \uC218 ({0})\uAC00 nm\uAC1C\uC758 \uD0DC\uADF8 ({1})\uC640 \uB2E4\uB985\uB2C8\uB2E4 +importerDL_error_edgelistrowparse=\uC5E3\uC9C0 \uBAA9\uB85D {1}\uD589\uC758 id ''{0}''\uC744 \uAD6C\uBB38 \uBD84\uC11D\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 +importerDOT_error_posunreachable={0}\uD589\uC5D0 \uB178\uB4DC\uC758 \uC704\uCE58\uB97C \uAD6C\uBB38 \uBD84\uC11D\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. pos="x, y"\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4. +importerDOT_error_weightunreachable={0}\uD589\uC5D0\uC11C \uC5E3\uC9C0\uC758 \uAC00\uC911\uCE58\uB97C \uAD6C\uBB38 \uBD84\uC11D\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 +importerGEXF_error_edgeweight=id ''{0}''\uC758 \uC5E3\uC9C0 \uAC00\uC911\uCE58\uAC00 float\uD615\uC774 \uC544\uB2D9\uB2C8\uB2E4. \uAC00\uC911\uCE58\uAC00 \uBB34\uC2DC\uB429\uB2C8\uB2E4. +importerGEXF_error_nodeid=\uB178\uB4DC id\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. \uB178\uB4DC\uAC00 \uBB34\uC2DC\uB429\uB2C8\uB2E4. +importerGEXF_error_nodeposition=\uB178\uB4DC ''{0}''\uAC00 ''{1}''\uC774\uB77C\uB294 \uC798\uBABB\uB41C \uC704\uCE58\uB97C \uAC00\uC9C0\uACE0 \uC788\uC2B5\uB2C8\uB2E4 (float\uD615\uC774 \uC544\uB2D8). +importerGEXF_error_notnode=\uC694\uC18C ''{0}''\uC774 \uB178\uB4DC\uAC00 \uC544\uB2D9\uB2C8\uB2E4. \uD574\uB2F9 \uC694\uC18C\uB294 \uBB34\uC2DC\uB429\uB2C8\uB2E4. +importerGEXF_error_parsingmode=\uAD6C\uBB38 \uBD84\uC11D \uBAA8\uB4DC ''{0}''\uC774 \uC778\uC2DD\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uAE30\uBCF8 ''static''\uC73C\uB85C \uC124\uC815\uD569\uB2C8\uB2E4. +importerGEXF_error_nodeattribute_timeinterval_parseerror=\uB178\uB4DC ''{0}'' \uC18D\uC131\uC758 \uC2DC\uAC04 \uAC04\uACA9\uC744 \uAD6C\uBB38 \uBD84\uC11D\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. xsd:date, xsd:dateTime \uB610\uB294 Double \uD615\uC2DD\uC744 \uC0AC\uC6A9\uD558\uC2ED\uC2DC\uC624. +importerGEXF_error_edgeattribute_timeinterval_parseerror=\uC5E3\uC9C0 ''{0}'' \uC18D\uC131\uC758 \uC2DC\uAC04 \uAC04\uACA9\uC744 \uAD6C\uBB38 \uBD84\uC11D\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. xsd:date, xsd:dateTime \uB610\uB294 Double \uD615\uC2DD\uC744 \uC0AC\uC6A9\uD558\uC2ED\uC2DC\uC624. +importerGEXF_error_node_timestamp_parseerror=\uB178\uB4DC ''{0}''\uC758 \uD0C0\uC784\uC2A4\uD0EC\uD504\uB97C \uAD6C\uBB38 \uBD84\uC11D\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. xsd:date, xsd:dateTime \uB610\uB294 Double \uD615\uC2DD\uC744 \uC0AC\uC6A9\uD558\uC2ED\uC2DC\uC624. +importerGEXF_error_edge_timestamp_parseerror=\uB178\uB4DC ''{0}''\uC758 \uD0C0\uC784\uC2A4\uD0EC\uD504\uB97C \uAD6C\uBB38 \uBD84\uC11D\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. xsd:date, xsd:dateTime \uB610\uB294 Double \uD615\uC2DD\uC744 \uC0AC\uC6A9\uD558\uC2ED\uC2DC\uC624. +importerGEXF_error_node_timestamps_parseerror=\uB178\uB4DC ''{0}''\uC758 \uD0C0\uC784\uC2A4\uD0EC\uD504\uB97C \uAD6C\uBB38 \uBD84\uC11D\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. +importerGEXF_error_edge_timestamps_parseerror=\uC5E3\uC9C0 ''{0}''\uC758 \uD0C0\uC784\uC2A4\uD0EC\uD504\uB97C \uAD6C\uBB38 \uBD84\uC11D\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. +importerGEXF_error_nodeattribute_timeset_parseerror=\uB178\uB4DC ''{0}''\uC758 \uD0C0\uC784\uC2A4\uD0EC\uD504\uB098 \uC2DC\uAC04 \uAC04\uACA9\uC744 \uAD6C\uBB38 \uBD84\uC11D\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. +importerGEXF_error_edgeattribute_timeset_parseerror=\uC5E3\uC9C0 ''{0}'' \uC18D\uC131\uC758 \uD0C0\uC784\uC2A4\uD0EC\uD504\uB098 \uC2DC\uAC04 \uAC04\uACA9\uC744 \uAD6C\uBB38 \uBD84\uC11D\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. +importerGEXF_error_edgecolorvalue=id ''{1}''\uC778 \uC5E3\uC9C0\uC5D0 \uC798\uBABB\uB41C \uC0C9\uC0C1 \uCC44\uB110 ''{2}''=''{0}''\uAC00 \uC788\uC2B5\uB2C8\uB2E4. \uAC12\uC740 0 <= ''{2}'' <= 255\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4. +importerGEXF_error_nodecolorvalue=id ''{1}''\uC778 \uB178\uB4DC\uC5D0 \uC798\uBABB\uB41C \uC0C9\uC0C1 \uCC44\uB110 ''{2}''=''{0}''\uAC00 \uC788\uC2B5\uB2C8\uB2E4. \uAC12\uC740 0 <= ''{2}'' <= 255\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4. +importerGEXF_error_nodeopacityvalue=id ''{1}''\uC778 \uB178\uB4DC\uC5D0 \uC798\uBABB\uB41C \uBD88\uD22C\uBA85\uB3C4 a=''{0}''\uAC00 \uC788\uC2B5\uB2C8\uB2E4. \uAC12\uC740 0.0 <= a <= 1.0\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4. +importerGEXF_error_edgeopacityvalue=id ''{1}''\uC778 \uC5E3\uC9C0\uC5D0 \uC798\uBABB\uB41C \uBD88\uD22C\uBA85\uB3C4 a=''{0}''\uAC00 \uC788\uC2B5\uB2C8\uB2E4. \uAC12\uC740 0.0 <= a <= 1.0\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4. +importerGEXF_error_node_open_interval=id ''{0}''\uC778 \uB178\uB4DC\uAC00 \uC0AC\uC6A9\uD558\uC9C0 \uC54A\uB294 \uC5F4\uB9B0 \uAC04\uACA9\uC744 \uC0AC\uC6A9\uD569\uB2C8\uB2E4. +importerGEXF_error_edge_open_interval=id ''{0}''\uC778 \uC5E3\uC9C0\uAC00 \uC0AC\uC6A9\uD558\uC9C0 \uC54A\uB294 \uC5F4\uB9B0 \uAC04\uACA9\uC744 \uC0AC\uC6A9\uD569\uB2C8\uB2E4. +importerGEXF_error_slice_bound_missing=\uC758 \uD0C0\uC784\uC2A4\uD0EC\uD504 \uD639\uC740 \uAC04\uACA9 \uC18D\uC131\uC774 \uC5C6\uC2B5\uB2C8\uB2E4 +importerGEXF_error_timezone_parseerror=\uC2DC\uAC04\uB300 ''{0}''\uAC00 \uC778\uC2DD\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4 +importerGEXF_error_timerepresentation_intervalerror=\uC2DC\uAC04 \uD45C\uD604\uC774 'timestamp'\uB85C \uC124\uC815\uB418\uC5B4 \uAD6C\uAC04\uC744 \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC5D0\uC11C \uC2DC\uAC04 \uD45C\uD604\uC744 'interval'\uB85C \uC124\uC815\uD569\uB2C8\uB2E4. +importerGEXF_log_edgeeproperty=\uBC1C\uACAC\uB41C \uC5E3\uC9C0 \uC18D\uC131: {0} +importerGEXF_log_nodeproperty=\uBC1C\uACAC\uB41C \uB178\uB4DC \uC18D\uC131: {0} +importerGEXF_log_edgeattribute=\uC5E3\uC9C0 \uC18D\uC131 ''{0}'' ({1})\uC774 \uC788\uC74C +importerGEXF_log_nodeattribute=\uB178\uB4DC \uC18D\uC131 ''{0}'' ({1})\uC774 \uC788\uC74C +importerGEXF_log_default=\uBC1C\uACAC\uB41C \uAE30\uBCF8 \uC18D\uC131\uAC12: ''{0}'' ({1}) +importerGEXF_log_options=\uBC1C\uACAC\uB41C \uC18D\uC131 \uC635\uC158: ''{0}'' ({1}) +importerGEXF_log_version10=GEXF \uBC84\uC804 1.0 (\uB354 \uC774\uC0C1 \uC0AC\uC6A9 \uC548 \uD568) +importerGEXF_log_version11=GEXF \uBC84\uC804 1.1 (\uB354 \uC774\uC0C1 \uC0AC\uC6A9 \uC548 \uD568) +importerGEXF_log_version13=GEXF \uBC84\uC804 1.3 +importerGEXF_log_version_undef=\uC815\uC758 \uC548 \uB41C GEXF \uBC84\uC804. \uD30C\uC11C 1.3\uC774 \uC0AC\uC6A9\uB429\uB2C8\uB2E4. +importerGEXF_log_dynamic_weight=\uB3D9\uC801 \uAC00\uC911\uCE58 \uC5F4\uC774 \uC788\uC2B5\uB2C8\uB2E4 +importerDL_error_firstline=DL \uD30C\uC77C\uC758 \uCCAB \uBC88\uC9F8 \uD589\uC740 'DL'\uB85C \uC2DC\uC791\uD574\uC57C \uD569\uB2C8\uB2E4 +importerDL_error_unknowntag=\uD5E4\uB354 \uC54C \uC218 \uC5C6\uB294 \uD0DC\uADF8 ''{0}'' +importerDL_error_formatmissing=DL 'format' \uD0DC\uADF8\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4, 'fullmatrix'\uAC00 \uAE30\uBCF8\uAC12\uC73C\uB85C \uC0AC\uC6A9\uB429\uB2C8\uB2E4 +importerDL_error_badformat=\uD3EC\uB9F7 ''{0}''\uC774 \uC9C0\uC6D0\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4, 'format=edgelist1' \uD639\uC740 'format=fullmatrix' \uD3EC\uB9F7\uB9CC \uAC00\uB2A5 +importerDL_error_nmissing=DL \uD30C\uC77C\uC758 \uD5E4\uB354\uB294 'n = ' \uD0DC\uADF8\uB97C \uD3EC\uD568\uD574\uC57C \uD569\uB2C8\uB2E4 +importerDL_error_mmissing=DL \uD30C\uC77C\uC758 \uD5E4\uB354\uB294 'm = ' \uD0DC\uADF8\uB97C \uD3EC\uD568\uD574\uC57C \uD569\uB2C8\uB2E4 +importerDL_error_labelscount=\uB77C\uBCA8 \uC218 ({0})\uAC00 n\uAC1C\uC758 \uD0DC\uADF8 ({1})\uC640 \uB2E4\uB985\uB2C8\uB2E4 +importerDL_error_nodata=\uB370\uC774\uD130 \uD589\uC774 \uC5C6\uC2B5\uB2C8\uB2E4 +importerDL_error_matrixrowscount=\uD589\uB82C \uD589\uC758 \uC218 ({0})\uAC00 n\uAC1C\uC758 \uD0DC\uADF8 ({1})\uBCF4\uB2E4 \uD07D\uB2C8\uB2E4 +importerDL_error_matrixrowscount2=\uD589\uB82C \uD589\uC758 \uC218 ({0})\uAC00 n\uAC1C\uC758 \uD0DC\uADF8 ({1})\uBCF4\uB2E4 \uC791\uC2B5\uB2C8\uB2E4 +importerDL_error_matrixentriescount=\uD589\uB82C {1}\uC758 \uD589 {0}\uC5D0 \uC788\uB294 \uD589\uB82C \uD56D\uBAA9 \uC218\uAC00 \uD5C8\uC6A9\uB41C \uD56D\uBAA9\uBCF4\uB2E4 \uB9CE\uC2B5\uB2C8\uB2E4(DL \uD30C\uC77C\uC758 {2}\uD589) +importerDL_error_weightparseerror={2}\uD589\uC758 \uD589\uB82C {1}\uC5D0\uC11C \uAC00\uC911\uCE58 ''{0}''\uC744 \uAD6C\uBB38 \uBD84\uC11D\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 +importerDL_error_edgelistssetscount=\uC5E3\uC9C0 \uBAA9\uB85D \uC9D1\uD569({0})\uC758 \uC218\uAC00 nm \uD0DC\uADF8({1})\uC640 \uB2E4\uB985\uB2C8\uB2E4 +importerDL_error_edgeparseweight=\uC5E3\uC9C0 \uBAA9\uB85D {1}\uD589\uC758 \uAC00\uC911\uCE58 ''{0}''\uC744 \uAD6C\uBB38 \uBD84\uC11D\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 +importerDOT_error_nothingfound='graph'\uB098 'digraph'\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4 +importerDOT_error_labelunreachable={0}\uD589\uC5D0 \uB77C\uBCA8\uC774 \uC5C6\uC2B5\uB2C8\uB2E4 +importerDOT_error_colorunreachable={0}\uD589\uC5D0 \uC0C9\uC0C1\uC774 \uC5C6\uC2B5\uB2C8\uB2E4 +importerTGF_error_emptynodes=\uB178\uB4DC\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4 diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_nl.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_nl.properties new file mode 100644 index 0000000000..bd98f76be0 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_nl.properties @@ -0,0 +1,136 @@ +fileType_GDF_Name=GDF-bestanden (GUESS) +fileType_GEXF_Name=GEXF-bestanden +fileType_NET_Name=NET-bestanden (Pajek) +fileType_GraphML_Name=GraphML-bestanden +fileType_GML_Name=GML-bestanden +fileType_TLP_Name=TLP-bestanden +fileType_TGF_Name=TGF-bestanden +fileType_Edges_Name=Edge List +fileType_GraphViz_Name=GraphViz-bestanden +fileType_DL_Name=DL-bestanden (UCINET) +fileType_VNA_Name=VNA-bestanden +importerGDF_error_dataformat1=The file must start with the "nodedef> name" line. +importerGDF_error_dataformat2=Bad column formatting. Each column must contains at least a name. Column names must not contains any coma. +importerGDF_error_dataformat3=Failed to import the column ''{0}'' for node ''{1}''. Error at value ''{2}''. +importerGDF_error_dataformat4=Failed to set the ''{0}'' attribute ''{1}'' for {2}. +importerGDF_error_dataformat5=The data type ''{0}'' is not recognized, string is used instead. +importerGDF_error_dataformat6=Column type is not found for ''{0}'', string is used instead. +importerGDF_error_dataformat7=Line ''{0}'' has more columns than defined in header. Please verify the number of commas. +importerGDF_error_dataformat8=The node column ''{0}'' can't be added because it already exists +importerGDF_error_dataformat9=The edge column ''{0}'' can't be added because it already exists +importerTPL_error_dataformat1=Bad edge formatting at line {0}. +importerNET_error_dataformat1=The file must start with the "*vertices" line. +importerNET_error_dataformat2=Blank line detected at line {0} +importerNET_error_dataformat3=Unbalanced (or too many) quote marks at line {0} +importerNET_error_dataformat4=Vertex number ''{0}'' not in the range [1,{1}] +importerNET_error_dataformat5=Vertex coordinates conversion problem at line {0}. Must be float number. +importerNET_error_dataformat6=Vertex size conversion problem at line {0}. Must be float number. +importerNET_error_dataformat7=Edge weight parsing issue at line {0}. Must be a double number. +importerGraphML_error_syntax1=Syntax error, the file must start with the markup. +importerGraphML_error_syntax2=Syntax error, node ''{0}'' must be nested in a markup. +importerGraphML_error_attributeclass=Attribute class not found or unknown for attribute ''{0}''. The attribute is ignored. +importerGraphML_error_attributefor=Attribute ''for'' not found or unknown for attribute ''{0}''. The attribute is ignored. +importerGraphML_error_attributetype1=Attribute type not found for attribute ''{0}''. Set to default string. +importerGraphML_error_attributetype2=Attribute type for ''{0}'' is not recognized. The attribute is ignored. +importerGraphML_error_attributedefault=Attribute ''{0}'' default value cannot be cast to the ''{1}'' type. +importerGraphML_error_attributecolumn_exist=Attribute with id ''{0}'' already exists, the attribute is ignored +importerGraphML_error_attributeempty=Attribute parse error, id is missing. +importerGraphML_log_nodeproperty=Knoopeigenschap gevonden: {0} +importerGraphML_log_edgeproperty=Edge property found: {0} +importerGraphML_log_nodeattribute=Knoopattribuut gevonden "{0}" ({1}) +importerGraphML_log_edgeattribute=Edge attribute found ''{0}'' ({1}) +importerGraphML_log_default=Default attribute value found: ''{0}'' ({1}) +importerGraphML_error_datakey=Data key is missing for element id={0} +importerGraphML_error_datavalue=Data value {0} type error for element id={1}. The value cannot be set as ''{2}'' attribute. +importerGraphML_error_nodeid=Node id is missing. The node is ignored. +importerGraphML_error_defaultedgetype=Default edge type ''{0}'' is not recognized. Set to default ''mixed''. +importerGraphML_error_edgetype=Type ''{0}'' of the edge ''{1}'' is not recognized. Set to default value. +importerGML_error_nodeidmissing=Node id is missing +importerGML_error_directedgraphparse=Unexpected value for graph 'directed' property +importerGML_error_directedparse=Unexpected value for 'directed' property for edge ''{0}'' +importerGML_error_badparsing=Invalid GML parsing +importerTPL_error_badparsing=Invalid TPL parsing +importerGEXF_error_attributeclass=Attribute ''class'' not found or unknown for attribute ''{0}''. The attribute is ignored. +importerGEXF_error_attributeempty=Attribute parse error, id or type is missing. +importerGEXF_error_attributedefault=Attribute ''{0}'' default value cannot be cast to the ''{1}'' type. +importerGEXF_error_attributeoptions=Attribute ''{0}'' option values cannot be cast to the ''{1}'' type. +importerGEXF_error_attributecolumn_exist=Attribute with id ''{0}'' already exists, the attribute is ignored +importerGEXF_error_attributetype1=Attribute type not found for attribute ''{0}''. Set to default string. +importerGEXF_error_attributetype2=Attribute type for ''{0}'' is not recognized. The attribute is ignored. +importerGEXF_error_datakey=Data key (attribute ''for'') is missing for element id={0} +importerGEXF_error_datakey1=Data key (attribute ''id'') is missing for element id={0} +importerGEXF_error_dataoptionsvalue=Data value ''{0}'' is not an option for element id={1}. The value cannot be set as ''{2}'' attribute. +importerGEXF_error_datavalue=Data value ''{0}'' type error for element {1}. The value cannot be set as ''{2}'' attribute. +importerGEXF_error_idtype_error=The id type ''{0}'' is not recognized, use 'integer', 'long' or 'string' +importerGEXF_error_defaultedgetype=Default edge type ''{0}'' is not recognized. Set to default ''mixed''. +importerGEXF_error_edgedouble=Edge type ''double'' is currently not supported. Set to default ''mixed''. +importerGEXF_error_edgetype=Type ''{0}'' of the edge ''{1}'' is not recognized. Set to default value. +importerGEXF_error_edgeid=Edge id is missing. An id has been generated. +importerGEXF_error_edgesource=Edge source is missing. The edge is ignored. +importerGEXF_error_edgetarget=Edge target is missing. The edge is ignored. +importerGEXF_error_edgeweight=Edge weight of id ''{0}'' is not a float. Weight is ignored. +importerGEXF_error_nodeid=Node id is missing. The node is ignored. +importerGEXF_error_nodeposition=Node ''{0}'' has a wrong position on ''{1}'' (not a float). +importerGEXF_error_nodesize=Node ''{0}'' has a wrong size (not a float). +importerGEXF_error_notnode=Element ''{0}'' is geen knoop. Het element wordt genegeerd. +importerGEXF_error_parsingdatetype=Date type ''{0}'' is not recognized. Set to default ''date''. +importerGEXF_error_parsingmode=Parsing mode ''{0}'' is not recognized. Set to default ''static''. +importerGEXF_error_node_timeinterval_parseerror=The time interval for node ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edge_timeinterval_parseerror=The time interval for edge ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_node_timeintervals_parseerror=The time intervals for node ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edge_timeintervals_parseerror=The time intervals for edge ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_nodeattribute_timeinterval_parseerror=The time interval for node ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edgeattribute_timeinterval_parseerror=The time interval for edge ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_node_timestamp_parseerror=The timestamp for node ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edge_timestamp_parseerror=The timestamp for edge ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_node_timestamps_parseerror=The timestamps for node ''{0}'' could not be parsed. +importerGEXF_error_edge_timestamps_parseerror=The timestamps for edge ''{0}'' could not be parsed. +importerGEXF_error_nodeattribute_timestamp_parseerror=The timestamp for node ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edgeattribute_timestamp_parseerror=The timestamp for edge ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_nodeattribute_timeset_parseerror=The timestamps or intervals for node ''{0}'' attribute could not be parsed. +importerGEXF_error_edgeattribute_timeset_parseerror=The timestamps or intervals for edge ''{0}'' attribute could not be parsed. +importerGEXF_error_nodecolorvalue=Node of id ''{1}'' has a wrong color channel ''{2}''=''{0}''. It should be 0 <= ''{2}'' <= 255. +importerGEXF_error_edgecolorvalue=Edge of id ''{1}'' has a wrong color channel ''{2}''=''{0}''. It should be 0 <= ''{2}'' <= 255. +importerGEXF_error_nodeopacityvalue=Node of id ''{1}'' has a wrong opacity a=''{0}''. It should be 0.0 <= a <= 1.0. +importerGEXF_error_edgeopacityvalue=Edge of id ''{1}'' has a wrong opacity a=''{0}''. It should be 0.0 <= a <= 1.0. +importerGEXF_error_node_open_interval=Node of id ''{0}'' uses open intervals, which have been deprecated. +importerGEXF_error_edge_open_interval=Edge of id ''{0}'' uses open intervals, which have been deprecated. +importerGEXF_error_slice_bound_missing=Missing timestamp or interval attribute on +importerGEXF_error_pid=The node of id ''{0}'' defines a parent using a pid. Hierarchical graph support has been deprecated and will be ignored. +importerGEXF_error_timezone_parseerror=The time zone ''{0}'' couldn't be recognized +importerGEXF_error_timerepresentation_intervalerror=The time representation is set as 'timestamp' so intervals can't be used. Set the time representation to 'interval' in . +importerGEXF_error_timerepresentation_timestamperror=The time representation is set as 'interval' so timestamps can't be used. Set the time representation to 'timestamp' in . +importerGEXF_log_edgeeproperty=Edge property found: {0} +importerGEXF_log_nodeproperty=Knoopeigenschap gevonden: {0} +importerGEXF_log_edgeattribute=Edge attribute found ''{0}'' ({1}) +importerGEXF_log_nodeattribute=Knoopattribuut gevonden "{0}" ({1}) +importerGEXF_log_default=Default attribute value found: ''{0}'' ({1}) +importerGEXF_log_options=Attribute Options found: ''{0}'' ({1}) +importerGEXF_log_version10=GEXF version 1.0 (deprecated) +importerGEXF_log_version11=GEXF version 1.1 (deprecated) +importerGEXF_log_version12=GEXF version 1.2 (deprecated) +importerGEXF_log_version13=GEXF version 1.3 +importerGEXF_log_version_undef=Undefined GEXF version. Parser 1.3 is used. +importerGEXF_log_dynamic_weight=Dynamic weight column found +importerDL_error_firstline=First line of DL file must begin with 'DL' +importerDL_error_unknowntag=Header unknown tag ''{0}'' +importerDL_error_formatmissing=DL 'format' tag is missing, 'fullmatrix' is used by default +importerDL_error_badformat=Format ''{0}'' is not supported, provide 'format=edgelist1' or 'format=fullmatrix' format only +importerDL_error_nmissing=Header of DL file must contain tag 'n = ' +importerDL_error_mmissing=Header of DL file must contain tag 'm = ' +importerDL_error_labelscount=Number of labels ({0}) is different from n tag ({1}) +importerDL_error_nodata=No data line was found +importerDL_error_matrixrowscount=Number of matrix rows ({0}) is greater than n tag ({1}) +importerDL_error_matrixrowscount2=Number of matrix rows ({0}) is less than n tag ({1}) +importerDL_error_matriciescount=Number of matricies sets ({0}) is different from nm tag ({1}) +importerDL_error_matrixentriescount=Number of matrix entries on row {0} of matrix {1} has more than allowed entries (line {2} of DL file) +importerDL_error_weightparseerror=Unable to parse weight ''{0}'' on matrix {1} on line {2} +importerDL_error_edgelistssetscount=Number of edgelist sets ({0}) is different from nm tag ({1}) +importerDL_error_edgelistrowparse=Unable to parse from id ''{0}'' on edgelist line {1} +importerDL_error_edgeparseweight=Unable to parse weight ''{0}'' on edgelist line {1} +importerDOT_error_nothingfound=No 'graph' or 'digraph' was found +importerDOT_error_labelunreachable=Unable to find label at line {0} +importerDOT_error_colorunreachable=Unable to find color at line {0} +importerDOT_error_posunreachable=Unable to parse position of node at line {0}. Must be pos="x, y". +importerDOT_error_weightunreachable=Unable to parse edge's weight at line {0} +importerTGF_error_emptynodes=Geen knopen gevonden diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_pt.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_pt.properties new file mode 100644 index 0000000000..9f46d16585 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_pt.properties @@ -0,0 +1,121 @@ +fileType_GDF_Name=Ficheiros GDF (GUESS) +importerGDF_error_dataformat8=A coluna ''{0}'' do n\u00F3 n\u00E3o pode ser adicionada porque j\u00E1 existe +fileType_TGF_Name=Ficheiros TGF +importerGDF_error_dataformat9=A coluna ''{0}'' da aresta n\u00E3o pode ser adicionada porque j\u00E1 existe +importerNET_error_dataformat3=Quantidade de aspas desbalanceada (ou muito alta) na linha {0} +importerNET_error_dataformat6=Problema de convers\u00E3o de tamanho de v\u00E9rtices na linha {0}. O valor deve ser um n\u00FAmero de ponto flutuante. +importerGML_error_directedparse=Valor inesperado para a propriedade "dirigida" da aresta ''{0}'' +importerGEXF_error_idtype_error=O tipo de id '{0}' n\u00E3o \u00E9 reconhecido, use 'integer', 'long' ou 'string ' +importerGEXF_error_node_timeintervals_parseerror=Os intervalos de tempo para o n\u00F3 '{0}' n\u00E3o podem ser analisados. Use xsd:date, xsd:dateTime ou formata\u00E7\u00E3o Double. +importerGEXF_error_edge_timeintervals_parseerror=Os intervalos de tempo para a aresta ''{0}'' n\u00E3o podem ser analisados. Use os formatos xsd:date, xsd:dateTime ou formata\u00E7\u00E3o Double. +importerGEXF_error_node_timestamp_parseerror=O carimbo de hora para o n\u00F3 '{0}' n\u00E3o pode ser analisado. Use xsd:date, xsd:dateTime ou formata\u00E7\u00E3o Double. +importerGEXF_log_version12=GEXF vers\u00E3o 1.2 +importerDL_error_edgeparseweight=N\u00E3o \u00E9 poss\u00EDvel analisar o peso ''{0}'' na lista de arestas da linha {1} +importerDOT_error_nothingfound=N\u00E3o foi poss\u00EDvel encontrar 'graph' ou 'digraph' +importerDOT_error_labelunreachable=N\u00E3o foi poss\u00EDvel encontrar um r\u00F3tulo na linha {0} +fileType_GEXF_Name=Ficheiros GEXF +fileType_NET_Name=Ficheiros NET (Pajek) +fileType_GraphML_Name=Ficheiros GraphML +fileType_GML_Name=Ficheiros GML +fileType_TLP_Name=Ficheiros TLP +fileType_Edges_Name=Lista de arestas +fileType_GraphViz_Name=Ficheiros GraphViz +fileType_DL_Name=Ficheiros DL (UCINET) +fileType_VNA_Name=Ficheiros VNA +importerGDF_error_dataformat1=O ficheiro deve come\u00E7ar com a linha "nodedef> name". +importerGDF_error_dataformat2=Formato incorreto de coluna. Cada coluna deve conter pelo menos um nome. Os nomes de coluna n\u00E3o podem conter v\u00EDrgulas. +importerGDF_error_dataformat3=Falha ao importar a coluna ''{0}'' para o n\u00F3 ''{1}''. Erro no valor ''{2}''. +importerGDF_error_dataformat4=Falha ao definir o atributo ''{1}'' do tipo ''{0}'' para o n\u00F3 {2}. +importerGDF_error_dataformat5=O tipo de dados ''{0}'' n\u00E3o \u00E9 reconhecido. O tipo 'string' ser\u00E1 utilizado. +importerGDF_error_dataformat6=O tipo de coluna ''{0}'' n\u00E3o \u00E9 reconhecido. O tipo 'string' ser\u00E1 utilizado. +importerGDF_error_dataformat7=A linha ''{0}'' tem mais colunas do que as definidas no cabe\u00E7alho. Fa\u00E7a favor verificar o n\u00FAmero de v\u00EDrgulas. +importerTPL_error_dataformat1=Formato de aresta incorreto na linha {0}. +importerNET_error_dataformat1=O ficheiro deve come\u00E7ar com a linha "* vertices". +importerNET_error_dataformat2=Linha em branco detetada na linha {0} +importerNET_error_dataformat4=O n\u00FAmero de v\u00E9rtice ''{0}'' n\u00E3o est\u00E1 no intervalo [1, {1}] +importerNET_error_dataformat5=Problema de convers\u00E3o de coordenadas de v\u00E9rtice na linha {0}. Deve ser um n\u00FAmero de ponto flutuante. +importerNET_error_dataformat7=Problema na an\u00E1lise de peso de aresta na linha {0}. O valor deve ser um n\u00FAmero de ponto flutuante. +importerGraphML_error_syntax1=Erro de sintaxe, o ficheiro deve come\u00E7ar com a marca\u00E7\u00E3o . +importerGraphML_error_syntax2=Erro de sintaxe, o n\u00F3 ''{0}'' deve estar aninhado numa marca\u00E7\u00E3o . +importerGraphML_error_attributeclass=Classe de atributo n\u00E3o encontrada ou desconhecida para o atributo ''{0}''. O atributo ser\u00E1 ignorado. +importerGraphML_error_attributefor=Atributo ''for'' n\u00E3o encontrado ou desconhecido para o atributo ''{0}''. O atributo ser\u00E1 ignorado. +importerGraphML_error_attributetype1=Tipo de atributo n\u00E3o encontrado para o atributo ''{0}''. O padr\u00E3o 'string' ser\u00E1 utilizado. +importerGraphML_error_attributetype2=O tipo de atributo ''{0}'' n\u00E3o foi reconhecido. O atributo ser\u00E1 ignorado. +importerGraphML_error_attributedefault=O valor padr\u00E3o do atributo ''{0}'' n\u00E3o pode ser convertido para o tipo ''{1}''. +importerGraphML_error_attributecolumn_exist=O atributo de id ''{0}'' j\u00E1 existe. O atributo ser\u00E1 ignorado +importerGraphML_error_attributeempty=Erro de an\u00E1lise de atributo, falta id. +importerGraphML_log_nodeproperty=Propriedade de n\u00F3 encontrada: {0} +importerGraphML_log_edgeproperty=Propriedade de aresta encontrada: {0} +importerGraphML_log_nodeattribute=Propriedade de n\u00F3 encontrada ''{0}'' ({1}) +importerGraphML_log_edgeattribute=Propriedade de aresta encontrada ''{0}'' ({1}) +importerGraphML_log_default=Valor de atributo padr\u00E3o encontrado: ''{0}'' ({1}) +importerGraphML_error_datakey=Chave de dados (atributo ''id'') n\u00E3o encontrada para o elemento de id={0} +importerGraphML_error_datavalue=Erro de tipo de valor de dados {0} para o elemento de id={1}. O valor n\u00E3o pode ser definido como o atributo ''{2}''. +importerGraphML_error_nodeid=Identificador de n\u00F3 n\u00E3o encontrado. O n\u00F3 ser\u00E1 ignorado. +importerGraphML_error_defaultedgetype=O tipo de aresta padr\u00E3o ''{0}'' n\u00E3o foi reconhecido. Ser\u00E1 definido por padr\u00E3o como ''mixed''. +importerGraphML_error_edgetype=O tipo ''{0}'' da aresta ''{1}'' n\u00E3o foi reconhecido. Ser\u00E1 utilizado o valor padr\u00E3o. +importerGML_error_nodeidmissing=Falta id do n\u00F3 +importerGML_error_directedgraphparse=Valor inesperado para a propriedade "dirigida" do grafo +importerGML_error_badparsing=An\u00E1lise GML inv\u00E1lida +importerTPL_error_badparsing=An\u00E1lise TPL inv\u00E1lida +importerGEXF_error_attributeclass=Atributo ''class'' n\u00E3o encontrado ou desconhecido para o atributo ''{0}''. O atributo ser\u00E1 ignorado. +importerGEXF_error_attributeempty=Erro de an\u00E1lise de atributo, falta id ou tipo. +importerGEXF_error_attributedefault=O valor padr\u00E3o do atributo ''{0}'' n\u00E3o pode ser convertido para o tipo ''{1}''. +importerGEXF_error_attributeoptions=Os valores de op\u00E7\u00E3o para o atributo ''{0}'' n\u00E3o podem ser convertidos para o tipo ''{1}''. +importerGEXF_error_attributecolumn_exist=O atributo de id ''{0}'' j\u00E1 existe. O atributo ser\u00E1 ignorado +importerGEXF_error_attributetype1=O tipo de atributo n\u00E3o foi encontrado para o atributo ''{0}''. Ser\u00E1 utilizado o tipo 'string'. +importerGEXF_error_attributetype2=O tipo de dados ''{0}'' n\u00E3o \u00E9 reconhecido. O atributo ser\u00E1 ignorado. +importerGEXF_error_datakey=Chave de dados (atributo ''for'') n\u00E3o encontrada para o elemento de id={0} +importerGEXF_error_datakey1=Chave de dados (atributo ''id'') n\u00E3o encontrada para o elemento de id={0} +importerGEXF_error_dataoptionsvalue=O valor de dado ''{0}'' n\u00E3o \u00E9 uma op\u00E7\u00E3o v\u00E1lida para o elemento de id={1}. O valor n\u00E3o pode ser definido como o atributo ''{2}''. +importerGEXF_error_datavalue=Erro de tipo de valor de dados {0} para o elemento {1}. O valor n\u00E3o pode ser definido como o atributo ''{2}''. +importerGEXF_error_defaultedgetype=O tipo de aresta padr\u00E3o ''{0}'' n\u00E3o foi reconhecido. Ser\u00E1 definido por padr\u00E3o como ''mixed''. +importerGEXF_error_edgedouble=O tipo de aresta ''double'' n\u00E3o foi reconhecido. Ser\u00E1 definido para o padr\u00E3o ''mixed''. +importerGEXF_error_edgetype=O tipo ''{0}'' da aresta ''{1}'' n\u00E3o foi reconhecido. Ser\u00E1 utilizado o valor padr\u00E3o. +importerGEXF_error_edgeid=O identificador da aresta n\u00E3o foi encontrado. Ser\u00E1 utilizado um identificador gerado. +importerGEXF_error_edgesource=Origem da aresta n\u00E3o encontrada. A aresta ser\u00E1 ignorada. +importerGEXF_error_edgetarget=Destino da aresta n\u00E3o encontrado. A aresta ser\u00E1 ignorada. +importerGEXF_error_edgeweight=O peso da aresta de id ''{0}'' n\u00E3o \u00E9 um n\u00FAmero de ponto flutuante. O peso ser\u00E1 ignorado. +importerGEXF_error_nodeid=Identificador de n\u00F3 n\u00E3o encontrado. O n\u00F3 ser\u00E1 ignorado. +importerGEXF_error_nodeposition=Posi\u00E7\u00E3o do n\u00F3 ''{0}'' errada em ''{1}'' (n\u00E3o \u00E9 um n\u00FAmero em ponto flutuante). +importerGEXF_error_nodesize=O tamanho n\u00F3 ''{0}'' est\u00E1 incorreto (n\u00E3o \u00E9 um n\u00FAmero em ponto flutuante). +importerGEXF_error_notnode=O elemento ''{0}'' n\u00E3o \u00E9 um n\u00F3. O elemento ser\u00E1 ignorado. +importerGEXF_error_parsingdatetype=O tipo de dados ''{0}'' n\u00E3o \u00E9 reconhecido. Ser\u00E1 utilizado o padr\u00E3o 'date'. +importerGEXF_error_parsingmode=O modo de an\u00E1lise ''{0}'' n\u00E3o \u00E9 reconhecido. Ser\u00E1 utilizado o padr\u00E3o ''static''. +importerGEXF_error_node_timeinterval_parseerror=O intervalo de tempo para o n\u00F3 ''{0}'' n\u00E3o pode ser analisado. Use os formatos xsd: date, xsd:dateTime ou 'Double'. +importerGEXF_error_edge_timeinterval_parseerror=O intervalo de tempo para a aresta ''{0}'' n\u00E3o pode ser analisado. Use os formatos xsd: date, xsd:dateTime ou 'Double'. +importerGEXF_error_nodeattribute_timeinterval_parseerror=O intervalo de tempo para o atributo de n\u00F3 ''{0}'' n\u00E3o pode ser analisado. Use os formatos xsd: date, xsd:dateTime ou 'Double'. +importerGEXF_error_edgeattribute_timeinterval_parseerror=O intervalo de tempo para o atributo da aresta ''{0}'' n\u00E3o pode ser analisado. Use os formatos xsd: date, xsd:dateTime ou 'Double'. +importerGEXF_error_nodecolorvalue=O n\u00F3 de id ''{1}'' possui um canal de cor err\u00F4neo ''{2}''=''{0}''. O valor deveria estar no intervalo 0 < ''{2}'' < 255. +importerGEXF_error_edgecolorvalue=A aresta de id ''{1}'' possui um canal de cor err\u00F4neo ''{2}''=''{0}''. O valor deveria estar no intervalo 0 < ''{2}'' < 255. +importerGEXF_error_nodeopacityvalue=O n\u00F3 de id ''{1}'' possui uma opacidade err\u00F4nea a=''{0}''. O valor deveria estar no intervalo 0.0 < a < 1.0. +importerGEXF_error_edgeopacityvalue=A aresta de id ''{1}'' possui uma opacidade err\u00F4nea a=''{0}''. O valor deveria estar no intervalo 0.0 < a < 1.0. +importerGEXF_log_edgeeproperty=Propriedade de aresta encontrada: {0} +importerGEXF_log_nodeproperty=Propriedade de n\u00F3 encontrada: {0} +importerGEXF_log_edgeattribute=Propriedade de aresta encontrada ''{0}'' ({1}) +importerGEXF_log_nodeattribute=Propriedade de n\u00F3 encontrada ''{0}'' ({1}) +importerGEXF_log_default=Valor padr\u00E3o de atributo encontrado: ''{0}'' ({1}) +importerGEXF_log_options=Op\u00E7\u00F5es de atributo encontradas: ''{0}'' ({1}) +importerGEXF_log_version10=GEXF vers\u00E3o 1.0 (obsoleto) +importerGEXF_log_version11=GEXF vers\u00E3o 1.1 +importerGEXF_log_version13=GEXF vers\u00E3o 1.3 +importerGEXF_log_version_undef=Vers\u00E3o do GEXF indefinida. Utilizando analisador 1.3. +importerGEXF_log_dynamic_weight=Coluna de peso din\u00E2mico encontrada +importerDL_error_firstline=A primeira linha do ficheiro DL deve come\u00E7ar com 'DL' +importerDL_error_unknowntag=Marca\u00E7\u00E3o de cabe\u00E7alho ''{0}'' desconhecida +importerDL_error_formatmissing=A marca\u00E7\u00E3o DL 'format' n\u00E3o foi encontrada. O valor padr\u00E3o 'fullmatrix' ser\u00E1 utilizado +importerDL_error_badformat=O formato ''{0}''n\u00E3o \u00E9 suportado. Forne\u00E7a somente 'format=edgelist1' ou 'format = fullmatrix' +importerDL_error_nmissing=O cabe\u00E7alho do ficheiro DL deve conter a marca\u00E7\u00E3o 'n=' +importerDL_error_mmissing=O cabe\u00E7alho do ficheiro DL deve conter a marca\u00E7\u00E3o 'n=' +importerDL_error_labelscount=O n\u00FAmero de r\u00F3tulos ({0}) \u00E9 diferente do especificado na marca\u00E7\u00E3o n ({1}) +importerDL_error_nodata=Nenhuma linha de dados foi encontrada +importerDL_error_matrixrowscount=O n\u00FAmero de linhas da matriz ({0}) \u00E9 maior do que o especificado na marca\u00E7\u00E3o n ({1}) +importerDL_error_matrixrowscount2=O n\u00FAmero de r\u00F3tulos ({0}) \u00E9 menor do que o especificado na marca\u00E7\u00E3o n ({1}) +importerDL_error_matriciescount=O n\u00FAmero de conjuntos de matrizes ({0}) \u00E9 diferente do especificado na marca\u00E7\u00E3o nm ({1}) +importerDL_error_matrixentriescount=O n\u00FAmero de entradas de matriz na linha {0} da matriz {1} tem mais entradas do que o permitido (linha {2} do ficheiro DL) +importerDL_error_weightparseerror=N\u00E3o \u00E9 poss\u00EDvel analisar o peso ''{0}'' na matriz {1} na linha {2} +importerDL_error_edgelistssetscount=N\u00FAmero de conjuntos de listas de arestas ({0}) \u00E9 diferente do especificado na tag nm ({1}) +importerDL_error_edgelistrowparse=N\u00E3o \u00E9 poss\u00EDvel analisar o id ''{0}'' na lista de arestas da linha {1} +importerDOT_error_colorunreachable=N\u00E3o foi poss\u00EDvel encontrar uma cor na linha {0} +importerDOT_error_posunreachable=N\u00E3o foi poss\u00EDvel analisar a posi\u00E7\u00E3o do n\u00F3 {0}. O formato deve ser pos="x, y". +importerDOT_error_weightunreachable=N\u00E3o \u00E9 poss\u00EDvel analisar o peso da aresta na linha {0} diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_pt_BR.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_pt_BR.properties index 02520ddd11..0e4218dd9f 100644 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_pt_BR.properties +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_pt_BR.properties @@ -1,248 +1,146 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -# C\u00e9lio Faria Jr. , 2011-2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-18 11\:08+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -fileType_GDF_Name=Arquivos GDF (GUESS) - -fileType_GEXF_Name=Arquivos GEXF - -fileType_NET_Name=Arquivos NET (Pajek) - -fileType_GraphML_Name=Arquivos GraphML - -fileType_GML_Name=Arquivos GML - -fileType_TLP_Name=Arquivos TLP - -fileType_CSV_Name=Arquivos CSV - -fileType_Edges_Name=Lista de arestas - -fileType_GraphViz_Name=Arquivos GraphViz - -fileType_DL_Name=Arquivos DL (UCINET) - -fileType_VNA_Name=Arquivos VNA - -importerGDF_error_dataformat1=O arquivo deve come\u00e7ar com a linha "nodedef> name". - -importerGDF_error_dataformat2=Formato incorreto de coluna. Cada coluna deve conter pelo menos um nome. Os nomes de coluna n\u00e3o podem conter v\u00edrgulas. - -importerGDF_error_dataformat3=Falha ao importar a coluna ''{0}'' para o n\u00f3 ''{1}''. Erro no valor ''{2}''. - -importerGDF_error_dataformat4=Falha ao definir o atributo ''{1}'' do tipo ''{0}'' para o n\u00f3 {2}. - -importerGDF_error_dataformat5=O tipo de dados ''{0}'' n\u00e3o \u00e9 reconhecido. Ser\u00e1 utilizado o tipo 'string'. - -importerGDF_error_dataformat6=O tipo de coluna ''{0}'' n\u00e3o \u00e9 reconhecido. Ser\u00e1 utilizado o tipo 'string'. - -importerGDF_error_dataformat7=A linha ''{0}'' tem mais colunas do que as definidas no cabe\u00e7alho. Por favor verifique o n\u00famero de v\u00edrgulas. - -importerGDF_error_dataformat8=A coluna ''{0}'' do n\u00f3 n\u00e3o pode ser adicionada porque j\u00e1 existe. - -importerGDF_error_dataformat9=A coluna ''{0}'' da aresta n\u00e3o pode ser adicionada porque j\u00e1 existe. - -importerTPL_error_dataformat1=Formato de aresta incorreto na linha {0}. - -importerNET_error_dataformat1=O arquivo deve come\u00e7ar com a linha "* vertices". - -importerNET_error_dataformat2=Linha em branco detectada na linha {0} - -importerNET_error_dataformat3=N\u00famero de aspas desbalanceado (ou muito alto) na linha {0} - -importerNET_error_dataformat4=O n\u00famero de v\u00e9rtice ''{0}'' n\u00e3o est\u00e1 no intervalo [1, {1}] - -importerNET_error_dataformat5=Problema de convers\u00e3o de coordenadas de v\u00e9rtice na linha {0}. Deve ser um n\u00famero de ponto flutuante. - -importerNET_error_dataformat6=Problema de convers\u00e3o de tamanho de v\u00e9rtices na linha {0}. O valor deve ser um n\u00famero de ponto flutuante. - -importerNET_error_dataformat7=Problema na an\u00e1lise de peso de aresta na linha {0}. O valor deve ser um n\u00famero de ponto flutuante. - -importerGraphML_error_syntax1=Erro de sintaxe, o arquivo deve come\u00e7ar com a marca\u00e7\u00e3o . - -importerGraphML_error_syntax2=Erro de sintaxe, o n\u00f3 ''{0}'' deve estar aninhado em uma marca\u00e7\u00e3o . - -importerGraphML_error_attributeclass=Classe de atributo n\u00e3o encontrada ou desconhecida para o atributo ''{0}''. O atributo ser\u00e1 ignorado. - -importerGraphML_error_attributefor=Atributo ''for'' n\u00e3o encontrado ou desconhecido para o atributo ''{0}''. O atributo ser\u00e1 ignorado. - -importerGraphML_error_attributetype1=Tipo de atributo n\u00e3o encontrado para o atributo ''{0}''. Ser\u00e1 utilizado o padr\u00e3o 'string'. - -importerGraphML_error_attributetype2=O tipo de atributo ''{0}'' n\u00e3o foi reconhecido. O atributo ser\u00e1 ignorado. - -importerGraphML_error_attributedefault=O valor padr\u00e3o do atributo ''{0}'' n\u00e3o pode ser convertido para o tipo ''{1}''. - -importerGraphML_error_attributecolumn_exist=O atributo de id ''{0}'' j\u00e1 existe. O atributo ser\u00e1 ignorado - -importerGraphML_error_attributeempty=Erro de an\u00e1lise de atributo, falta id. - -importerGraphML_log_nodeproperty=Propriedade de n\u00f3 encontrada\: {0} - -importerGraphML_log_edgeproperty=Propriedade de aresta encontrada\: {0} - -importerGraphML_log_nodeattribute=Propriedade de n\u00f3 encontrada ''{0}'' ({1}) - -importerGraphML_log_edgeattribute=Propriedade de aresta encontrada ''{0}'' ({1}) - -importerGraphML_log_default=Valor de atributo padr\u00e3o encontrado\: ''{0}'' ({1}) - -importerGraphML_error_datakey=Chave de dados (atributo ''id'') n\u00e3o encontrada para o elemento de id\={0} - -importerGraphML_error_datavalue=Erro de tipo de valor de dados {0} para o elemento de id\={1}. O valor n\u00e3o pode ser definido como o atributo ''{2}''. - -importerGraphML_error_nodeid=Identificador de n\u00f3 n\u00e3o encontrado. O n\u00f3 ser\u00e1 ignorado. - -importerGraphML_error_defaultedgetype=O tipo de aresta padr\u00e3o ''{0}'' n\u00e3o foi reconhecido. Ser\u00e1 definido por padr\u00e3o como ''mixed''. - -importerGraphML_error_edgetype=O tipo ''{0}'' da aresta ''{1}'' n\u00e3o foi reconhecido. Ser\u00e1 utilizado o valor padr\u00e3o. - -importerGML_error_nodeidmissing=Falta id do n\u00f3 - -importerGML_error_directedgraphparse=Valor inesperado para a propriedade "dirigida" do grafo - -importerGML_error_directedparse=Valor inesperado para a propriedade "dirigida" da aresta ''{0}'' - -importerGML_error_badparsing=An\u00e1lise GML inv\u00e1lida - -importerTPL_error_badparsing=An\u00e1lise TPL inv\u00e1lida - -importerGEXF_error_attributeclass=Atributo ''class'' n\u00e3o encontrado ou desconhecido para o atributo ''{0}''. O atributo ser\u00e1 ignorado. - -importerGEXF_error_attributeempty=Erro de an\u00e1lise de atributo, falta id ou tipo. - -importerGEXF_error_attributedefault=O valor padr\u00e3o do atributo ''{0}'' n\u00e3o pode ser convertido para o tipo ''{1}''. - -importerGEXF_error_attributeoptions=Os valores de op\u00e7\u00e3o para o atributo ''{0}'' n\u00e3o podem ser convertidos para o tipo ''{1}''. - -importerGEXF_error_attributecolumn_exist=O atributo de id ''{0}'' j\u00e1 existe. O atributo ser\u00e1 ignorado - -importerGEXF_error_attributetype1=O tipo de atributo n\u00e3o foi encontrado para o atributo ''{0}''. Ser\u00e1 utilizado o tipo 'string'. - -importerGEXF_error_attributetype2=O tipo de dados ''{0}'' n\u00e3o \u00e9 reconhecido. O atributo ser\u00e1 ignorado. - -importerGEXF_error_datakey=Chave de dados (atributo ''for'') n\u00e3o encontrada para o elemento de id\={0} - -importerGEXF_error_datakey1=Chave de dados (atributo ''id'') n\u00e3o encontrada para o elemento de id\={0} - -importerGEXF_error_dataoptionsvalue=O valor de dado ''{0}'' n\u00e3o \u00e9 uma op\u00e7\u00e3o v\u00e1lida para o elemento de id\={1}. O valor n\u00e3o pode ser definido como o atributo ''{2}''. - -importerGEXF_error_datavalue=Erro de tipo de valor de dados {0} para o elemento {1}. O valor n\u00e3o pode ser definido como o atributo ''{2}''. - -importerGEXF_error_defaultedgetype=O tipo de aresta padr\u00e3o ''{0}'' n\u00e3o foi reconhecido. Ser\u00e1 definido por padr\u00e3o como ''mixed''. - -importerGEXF_error_edgedouble=O tipo de aresta ''double'' n\u00e3o foi reconhecido. Ser\u00e1 definido para o padr\u00e3o ''mixed''. - -importerGEXF_error_edgetype=O tipo ''{0}'' da aresta ''{1}'' n\u00e3o foi reconhecido. Ser\u00e1 utilizado o valor padr\u00e3o. - -importerGEXF_error_edgeid=O identificador da aresta n\u00e3o foi encontrado. Ser\u00e1 utilizado um identificador gerado. - -importerGEXF_error_edgesource=Origem da aresta n\u00e3o encontrada. A aresta ser\u00e1 ignorada. - -importerGEXF_error_edgetarget=Destino da aresta n\u00e3o encontrado. A aresta ser\u00e1 ignorada. - -importerGEXF_error_edgeweight=O peso da aresta de id ''{0}'' n\u00e3o \u00e9 um n\u00famero de ponto flutuante. O peso ser\u00e1 ignorado. - -importerGEXF_error_nodeid=Identificador de n\u00f3 n\u00e3o encontrado. O n\u00f3 ser\u00e1 ignorado. - -importerGEXF_error_nodeposition=Posi\u00e7\u00e3o do n\u00f3 ''{0}'' errada em ''{1}'' (n\u00e3o \u00e9 um n\u00famero em ponto flutuante). - -importerGEXF_error_nodesize=O tamanho n\u00f3 ''{0}'' est\u00e1 incorreto (n\u00e3o \u00e9 um n\u00famero em ponto flutuante). - -importerGEXF_error_notnode=O elemento ''{0}'' n\u00e3o \u00e9 um n\u00f3. O elemento ser\u00e1 ignorado. - -importerGEXF_error_pid_notfound=O n\u00f3 pai de pid ''{0}'' n\u00e3o pode ser encontrado para o ''{1}''. - -importerGEXF_error_parsingdatetype=O tipo de dados ''{0}'' n\u00e3o \u00e9 reconhecido. Ser\u00e1 utilizado o padr\u00e3o 'date'. - -importerGEXF_error_parsingmode=O modo de an\u00e1lise ''{0}'' n\u00e3o \u00e9 reconhecido. Ser\u00e1 utilizado o padr\u00e3o ''static''. - -importerGEXF_error_node_timeinterval_parseerror=O intervalo de tempo para o n\u00f3 ''{0}'' n\u00e3o pode ser analisado. Use os formatos xsd\: date, xsd\:dateTime ou 'Double'. - -importerGEXF_error_edge_timeinterval_parseerror=O intervalo de tempo para a aresta ''{0}'' n\u00e3o pode ser analisado. Use os formatos xsd\: date, xsd\:dateTime ou 'Double'. - -importerGEXF_error_nodeattribute_timeinterval_parseerror=O intervalo de tempo para o atributo de n\u00f3 ''{0}'' n\u00e3o pode ser analisado. Use os formatos xsd\: date, xsd\:dateTime ou 'Double'. - -importerGEXF_error_edgeattribute_timeinterval_parseerror=O intervalo de tempo para o atributo da aresta ''{0}'' n\u00e3o pode ser analisado. Use os formatos xsd\: date, xsd\:dateTime ou 'Double'. - -importerGEXF_error_nodecolorvalue=O n\u00f3 de id ''{1}'' possui um canal de cor err\u00f4neo ''{2}''\=''{0}''. O valor deveria estar no intervalo 0 < ''{2}'' < 255. - -importerGEXF_error_edgecolorvalue=A aresta de id ''{1}'' possui um canal de cor err\u00f4neo ''{2}''\=''{0}''. O valor deveria estar no intervalo 0 < ''{2}'' < 255. - -importerGEXF_error_nodeopacityvalue=O n\u00f3 de id ''{1}'' possui uma opacidade err\u00f4nea a\=''{0}''. O valor deveria estar no intervalo 0.0 < a < 1.0. - -importerGEXF_error_edgeopacityvalue=A aresta de id ''{1}'' possui uma opacidade err\u00f4nea a\=''{0}''. O valor deveria estar no intervalo 0.0 < a < 1.0. - -importerGEXF_log_edgeeproperty=Propriedade de aresta encontrada\: {0} - -importerGEXF_log_nodeproperty=Propriedade de n\u00f3 encontrada\: {0} - -importerGEXF_log_edgeattribute=Propriedade de aresta encontrada ''{0}'' ({1}) - -importerGEXF_log_nodeattribute=Propriedade de n\u00f3 encontrada ''{0}'' ({1}) - -importerGEXF_log_default=Valor padr\u00e3o de atributo encontrado\: ''{0}'' ({1}) - -importerGEXF_log_options=Op\u00e7\u00f5es de atributo encontradas\: ''{0}'' ({1}) - -importerGEXF_log_version10=GEXF vers\u00e3o 1.0 (obsoleto) - -importerGEXF_log_version11=GEXF vers\u00e3o 1.1 - -importerGEXF_log_version12=GEXF vers\u00e3o 1.2 - -importerGEXF_log_version13=GEXF vers\u00e3o 1.3 - -importerGEXF_log_version_undef=Vers\u00e3o do GEXF indefinida. Utilizando analisador 1.3. - -importerGEXF_log_dynamic_weight=Coluna de peso din\u00e2mico encontrada - -importerDL_error_firstline=A primeira linha do arquivo DL deve come\u00e7ar com 'DL' - -importerDL_error_unknowntag=Marca\u00e7\u00e3o de cabe\u00e7alho ''{0}'' desconhecida - -importerDL_error_formatmissing=A marca\u00e7\u00e3o DL 'format' n\u00e3o foi encontrada. O valor padr\u00e3o 'fullmatrix' ser\u00e1 utilizado - -importerDL_error_badformat=O formato ''{0}''n\u00e3o \u00e9 suportado. Forne\u00e7a somente 'format\=edgelist1' ou 'format \= fullmatrix' - -importerDL_error_nmissing=O cabe\u00e7alho do arquivo DL deve conter a marca\u00e7\u00e3o 'n\=' - -importerDL_error_mmissing=O cabe\u00e7alho do arquivo DL deve conter a marca\u00e7\u00e3o 'n\=' - -importerDL_error_labelscount=O n\u00famero de r\u00f3tulos ({0}) \u00e9 diferente do especificado na marca\u00e7\u00e3o n ({1}) - -importerDL_error_nodata=Nenhuma linha de dados foi encontrada - -importerDL_error_matrixrowscount=O n\u00famero de linhas da matriz ({0}) \u00e9 maior do que o especificado na marca\u00e7\u00e3o n ({1}) - -importerDL_error_matrixrowscount2=O n\u00famero de r\u00f3tulos ({0}) \u00e9 menor do que o especificado na marca\u00e7\u00e3o n ({1}) - -importerDL_error_matriciescount=O n\u00famero de conjuntos de matrizes ({0}) \u00e9 diferente do especificado na marca\u00e7\u00e3o nm ({1}) - -importerDL_error_matrixentriescount=O n\u00famero de entradas de matriz na linha {0} da matriz {1} tem mais entradas do que o permitido (linha {2} do arquivo DL) - -importerDL_error_weightparseerror=N\u00e3o \u00e9 poss\u00edvel analisar o peso ''{0}'' na matriz {1} na linha {2} - -importerDL_error_edgelistssetscount=N\u00famero de conjuntos de listas de arestas ({0}) \u00e9 diferente do especificado na tag nm ({1}) - -importerDL_error_edgelistrowparse=N\u00e3o \u00e9 poss\u00edvel analisar o id ''{0}'' na lista de arestas da linha {1} - -importerDL_error_edgeparseweight=N\u00e3o \u00e9 poss\u00edvel analisar o peso ''{0}'' na lista de arestas da linha {1} - -importerDOT_error_nothingfound=N\u00e3o foi poss\u00edvel encontrar 'graph' ou 'digraph' - -importerDOT_error_labelunreachable=N\u00e3o foi poss\u00edvel encontrar um r\u00f3tulo na linha {0} - -importerDOT_error_colorunreachable=N\u00e3o foi poss\u00edvel encontrar uma cor na linha {0} - -importerDOT_error_edgeparsing=N\u00e3o foi poss\u00edvel analisar uma aresta na linha {0} - -importerDOT_error_posunreachable=N\u00e3o foi poss\u00edvel analisar a posi\u00e7\u00e3o do n\u00f3 {0}. O formato deve ser pos\="x, y". - -importerDOT_error_weightunreachable=N\u00e3o \u00e9 poss\u00edvel analisar o peso da aresta na linha {0} - -importerDOT_log_nodeattribute=Atributo de n\u00f3 encontrado ''{0}'' ({1}) +fileType_GDF_Name = Arquivos GDF (GUESS) +fileType_GEXF_Name = Arquivos GEXF +fileType_NET_Name = Arquivos NET (Pajek) +fileType_GraphML_Name = Arquivos GraphML +fileType_GML_Name = Arquivos GML +fileType_TLP_Name = Arquivos TLP +# fileType_TGF_Name = TGF Files +fileType_Edges_Name = Lista de arestas +fileType_GraphViz_Name = Arquivos GraphViz +fileType_DL_Name = Arquivos DL (UCINET) +fileType_VNA_Name=Arquivos VNA + +importerGDF_error_dataformat1 = O arquivo deve comeηar com a linha "nodedef> name". +importerGDF_error_dataformat2 = Formato incorreto de coluna. Cada coluna deve conter pelo menos um nome. Os nomes de coluna nγo podem conter vνrgulas. +importerGDF_error_dataformat3 = Falha ao importar a coluna ''{0}'' para o nσ ''{1}''. Erro no valor ''{2}''. +importerGDF_error_dataformat4 = Falha ao definir o atributo ''{1}'' do tipo ''{0}'' para o nσ {2}. +importerGDF_error_dataformat5 = O tipo de dados ''{0}'' nγo ι reconhecido. Serα utilizado o tipo 'string'. +importerGDF_error_dataformat6 = O tipo de coluna ''{0}'' nγo ι reconhecido. Serα utilizado o tipo 'string'. +importerGDF_error_dataformat7 = A linha ''{0}'' tem mais colunas do que as definidas no cabeηalho. Por favor verifique o nϊmero de vνrgulas. +importerGDF_error_dataformat8 = A coluna ''{0}'' do nσ nγo pode ser adicionada porque jα existe. +importerGDF_error_dataformat9 = A coluna ''{0}'' da aresta nγo pode ser adicionada porque jα existe. + +importerTPL_error_dataformat1 = Formato de aresta incorreto na linha {0}. + +importerNET_error_dataformat1 = O arquivo deve comeηar com a linha "* vertices". +importerNET_error_dataformat2 = Linha em branco detectada na linha {0} +importerNET_error_dataformat3 = Nϊmero de aspas desbalanceado (ou muito alto) na linha {0} +importerNET_error_dataformat4 = O nϊmero de vιrtice ''{0}'' nγo estα no intervalo [1, {1}] +importerNET_error_dataformat5 = Problema de conversγo de coordenadas de vιrtice na linha {0}. Deve ser um nϊmero de ponto flutuante. +importerNET_error_dataformat6 = Problema de conversγo de tamanho de vιrtices na linha {0}. O valor deve ser um nϊmero de ponto flutuante. +importerNET_error_dataformat7 = Problema na anαlise de peso de aresta na linha {0}. O valor deve ser um nϊmero de ponto flutuante. + +importerGraphML_error_syntax1 = Erro de sintaxe, o arquivo deve comeηar com a marcaηγo . +importerGraphML_error_syntax2 = Erro de sintaxe, o nσ ''{0}'' deve estar aninhado em uma marcaηγo . +importerGraphML_error_attributeclass = Classe de atributo nγo encontrada ou desconhecida para o atributo ''{0}''. O atributo serα ignorado. +importerGraphML_error_attributefor = Atributo ''for'' nγo encontrado ou desconhecido para o atributo ''{0}''. O atributo serα ignorado. +importerGraphML_error_attributetype1 = Tipo de atributo nγo encontrado para o atributo ''{0}''. Serα utilizado o padrγo 'string'. +importerGraphML_error_attributetype2 = O tipo de atributo ''{0}'' nγo foi reconhecido. O atributo serα ignorado. +importerGraphML_error_attributedefault = O valor padrγo do atributo ''{0}'' nγo pode ser convertido para o tipo ''{1}''. +importerGraphML_error_attributecolumn_exist = O atributo de id ''{0}'' jα existe. O atributo serα ignorado +importerGraphML_error_attributeempty = Erro de anαlise de atributo, falta id. +importerGraphML_log_nodeproperty = Propriedade de nσ encontrada: {0} +importerGraphML_log_edgeproperty = Propriedade de aresta encontrada: {0} +importerGraphML_log_nodeattribute = Propriedade de nσ encontrada ''{0}'' ({1}) +importerGraphML_log_edgeattribute = Propriedade de aresta encontrada ''{0}'' ({1}) +importerGraphML_log_default = Valor de atributo padrγo encontrado: ''{0}'' ({1}) +importerGraphML_error_datakey = Chave de dados (atributo ''id'') nγo encontrada para o elemento de id={0} +importerGraphML_error_datavalue = Erro de tipo de valor de dados {0} para o elemento de id={1}. O valor nγo pode ser definido como o atributo ''{2}''. +importerGraphML_error_nodeid = Identificador de nσ nγo encontrado. O nσ serα ignorado. +importerGraphML_error_defaultedgetype = O tipo de aresta padrγo ''{0}'' nγo foi reconhecido. Serα definido por padrγo como ''mixed''. +importerGraphML_error_edgetype = O tipo ''{0}'' da aresta ''{1}'' nγo foi reconhecido. Serα utilizado o valor padrγo. + +importerGML_error_nodeidmissing = Falta id do nσ +importerGML_error_directedgraphparse = Valor inesperado para a propriedade "dirigida" do grafo +importerGML_error_directedparse = Valor inesperado para a propriedade "dirigida" da aresta ''{0}'' +importerGML_error_badparsing = Anαlise GML invαlida + +importerTPL_error_badparsing = Anαlise TPL invαlida + +importerGEXF_error_attributeclass = Atributo ''class'' nγo encontrado ou desconhecido para o atributo ''{0}''. O atributo serα ignorado. +importerGEXF_error_attributeempty = Erro de anαlise de atributo, falta id ou tipo. +importerGEXF_error_attributedefault = O valor padrγo do atributo ''{0}'' nγo pode ser convertido para o tipo ''{1}''. +importerGEXF_error_attributeoptions = Os valores de opηγo para o atributo ''{0}'' nγo podem ser convertidos para o tipo ''{1}''. +importerGEXF_error_attributecolumn_exist = O atributo de id ''{0}'' jα existe. O atributo serα ignorado +importerGEXF_error_attributetype1 = O tipo de atributo nγo foi encontrado para o atributo ''{0}''. Serα utilizado o tipo 'string'. +importerGEXF_error_attributetype2 = O tipo de dados ''{0}'' nγo ι reconhecido. O atributo serα ignorado. +importerGEXF_error_datakey = Chave de dados (atributo ''for'') nγo encontrada para o elemento de id={0} +importerGEXF_error_datakey1 = Chave de dados (atributo ''id'') nγo encontrada para o elemento de id={0} +importerGEXF_error_dataoptionsvalue = O valor de dado ''{0}'' nγo ι uma opηγo vαlida para o elemento de id={1}. O valor nγo pode ser definido como o atributo ''{2}''. +importerGEXF_error_datavalue = Erro de tipo de valor de dados {0} para o elemento {1}. O valor nγo pode ser definido como o atributo ''{2}''. +# importerGEXF_error_idtype_error = The id type ''{0}'' is not recognized, use 'integer', 'long' or 'string' +importerGEXF_error_defaultedgetype = O tipo de aresta padrγo ''{0}'' nγo foi reconhecido. Serα definido por padrγo como ''mixed''. +importerGEXF_error_edgedouble = O tipo de aresta ''double'' nγo foi reconhecido. Serα definido para o padrγo ''mixed''. +importerGEXF_error_edgetype = O tipo ''{0}'' da aresta ''{1}'' nγo foi reconhecido. Serα utilizado o valor padrγo. +importerGEXF_error_edgeid = O identificador da aresta nγo foi encontrado. Serα utilizado um identificador gerado. +importerGEXF_error_edgesource = Origem da aresta nγo encontrada. A aresta serα ignorada. +importerGEXF_error_edgetarget = Destino da aresta nγo encontrado. A aresta serα ignorada. +importerGEXF_error_edgeweight = O peso da aresta de id ''{0}'' nγo ι um nϊmero de ponto flutuante. O peso serα ignorado. +importerGEXF_error_nodeid = Identificador de nσ nγo encontrado. O nσ serα ignorado. +importerGEXF_error_nodeposition = Posiηγo do nσ ''{0}'' errada em ''{1}'' (nγo ι um nϊmero em ponto flutuante). +importerGEXF_error_nodesize = O tamanho nσ ''{0}'' estα incorreto (nγo ι um nϊmero em ponto flutuante). +importerGEXF_error_notnode = O elemento ''{0}'' nγo ι um nσ. O elemento serα ignorado. +importerGEXF_error_parsingdatetype = O tipo de dados ''{0}'' nγo ι reconhecido. Serα utilizado o padrγo 'date'. +importerGEXF_error_parsingmode = O modo de anαlise ''{0}'' nγo ι reconhecido. Serα utilizado o padrγo ''static''. +importerGEXF_error_node_timeinterval_parseerror = O intervalo de tempo para o nσ ''{0}'' nγo pode ser analisado. Use os formatos xsd: date, xsd:dateTime ou 'Double'. +importerGEXF_error_edge_timeinterval_parseerror = O intervalo de tempo para a aresta ''{0}'' nγo pode ser analisado. Use os formatos xsd: date, xsd:dateTime ou 'Double'. +# importerGEXF_error_node_timeintervals_parseerror = The time intervals for node ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +# importerGEXF_error_edge_timeintervals_parseerror = The time intervals for edge ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_nodeattribute_timeinterval_parseerror = O intervalo de tempo para o atributo de nσ ''{0}'' nγo pode ser analisado. Use os formatos xsd: date, xsd:dateTime ou 'Double'. +importerGEXF_error_edgeattribute_timeinterval_parseerror = O intervalo de tempo para o atributo da aresta ''{0}'' nγo pode ser analisado. Use os formatos xsd: date, xsd:dateTime ou 'Double'. +# importerGEXF_error_node_timestamp_parseerror = The timestamp for node ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +# importerGEXF_error_edge_timestamp_parseerror = The timestamp for edge ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +# importerGEXF_error_node_timestamps_parseerror = The timestamps for node ''{0}'' could not be parsed. +# importerGEXF_error_edge_timestamps_parseerror = The timestamps for edge ''{0}'' could not be parsed. +# importerGEXF_error_nodeattribute_timestamp_parseerror = The timestamp for node ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +# importerGEXF_error_edgeattribute_timestamp_parseerror = The timestamp for edge ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +# importerGEXF_error_nodeattribute_timeset_parseerror = The timestamps or intervals for node ''{0}'' attribute could not be parsed. +# importerGEXF_error_edgeattribute_timeset_parseerror = The timestamps or intervals for edge ''{0}'' attribute could not be parsed. +importerGEXF_error_nodecolorvalue = O nσ de id ''{1}'' possui um canal de cor errτneo ''{2}''=''{0}''. O valor deveria estar no intervalo 0 < ''{2}'' < 255. +importerGEXF_error_edgecolorvalue = A aresta de id ''{1}'' possui um canal de cor errτneo ''{2}''=''{0}''. O valor deveria estar no intervalo 0 < ''{2}'' < 255. +importerGEXF_error_nodeopacityvalue = O nσ de id ''{1}'' possui uma opacidade errτnea a=''{0}''. O valor deveria estar no intervalo 0.0 < a < 1.0. +importerGEXF_error_edgeopacityvalue = A aresta de id ''{1}'' possui uma opacidade errτnea a=''{0}''. O valor deveria estar no intervalo 0.0 < a < 1.0. +# importerGEXF_error_node_open_interval = Node of id ''{0}'' uses open intervals, which have been deprecated. +# importerGEXF_error_edge_open_interval = Edge of id ''{0}'' uses open intervals, which have been deprecated. +# importerGEXF_error_slice_bound_missing = Missing timestamp or interval attribute on +# importerGEXF_error_pid = The node of id ''{0}'' defines a parent using a pid. Hierarchical graph support has been deprecated and will be ignored. +# importerGEXF_error_timezone_parseerror = The time zone ''{0}'' couldn't be recognized +# importerGEXF_error_timerepresentation_intervalerror = The time representation is set as 'timestamp' so intervals can't be used. Set the time representation to 'interval' in . +# importerGEXF_error_timerepresentation_timestamperror = The time representation is set as 'interval' so timestamps can't be used. Set the time representation to 'timestamp' in . +importerGEXF_log_edgeeproperty = Propriedade de aresta encontrada: {0} +importerGEXF_log_nodeproperty = Propriedade de nσ encontrada: {0} +importerGEXF_log_edgeattribute = Propriedade de aresta encontrada ''{0}'' ({1}) +importerGEXF_log_nodeattribute = Propriedade de nσ encontrada ''{0}'' ({1}) +importerGEXF_log_default = Valor padrγo de atributo encontrado: ''{0}'' ({1}) +importerGEXF_log_options = Opηυes de atributo encontradas: ''{0}'' ({1}) +importerGEXF_log_version10 = GEXF versγo 1.0 (obsoleto) +importerGEXF_log_version11 = GEXF versγo 1.1 +importerGEXF_log_version12 = GEXF versγo 1.2 +importerGEXF_log_version13 = GEXF versγo 1.3 +importerGEXF_log_version_undef = Versγo do GEXF indefinida. Utilizando analisador 1.3. +importerGEXF_log_dynamic_weight = Coluna de peso dinβmico encontrada + +importerDL_error_firstline = A primeira linha do arquivo DL deve comeηar com 'DL' +importerDL_error_unknowntag = Marcaηγo de cabeηalho ''{0}'' desconhecida +importerDL_error_formatmissing = A marcaηγo DL 'format' nγo foi encontrada. O valor padrγo 'fullmatrix' serα utilizado +importerDL_error_badformat = O formato ''{0}''nγo ι suportado. Forneηa somente 'format=edgelist1' ou 'format = fullmatrix' +importerDL_error_nmissing = O cabeηalho do arquivo DL deve conter a marcaηγo 'n=' +importerDL_error_mmissing = O cabeηalho do arquivo DL deve conter a marcaηγo 'n=' +importerDL_error_labelscount = O nϊmero de rσtulos ({0}) ι diferente do especificado na marcaηγo n ({1}) +importerDL_error_nodata = Nenhuma linha de dados foi encontrada +importerDL_error_matrixrowscount = O nϊmero de linhas da matriz ({0}) ι maior do que o especificado na marcaηγo n ({1}) +importerDL_error_matrixrowscount2 = O nϊmero de rσtulos ({0}) ι menor do que o especificado na marcaηγo n ({1}) +importerDL_error_matriciescount = O nϊmero de conjuntos de matrizes ({0}) ι diferente do especificado na marcaηγo nm ({1}) +importerDL_error_matrixentriescount = O nϊmero de entradas de matriz na linha {0} da matriz {1} tem mais entradas do que o permitido (linha {2} do arquivo DL) +importerDL_error_weightparseerror = Nγo ι possνvel analisar o peso ''{0}'' na matriz {1} na linha {2} +importerDL_error_edgelistssetscount = Nϊmero de conjuntos de listas de arestas ({0}) ι diferente do especificado na tag nm ({1}) +importerDL_error_edgelistrowparse = Nγo ι possνvel analisar o id ''{0}'' na lista de arestas da linha {1} +importerDL_error_edgeparseweight = Nγo ι possνvel analisar o peso ''{0}'' na lista de arestas da linha {1} + +importerDOT_error_nothingfound = Nγo foi possνvel encontrar 'graph' ou 'digraph' +importerDOT_error_labelunreachable = Nγo foi possνvel encontrar um rσtulo na linha {0} +importerDOT_error_colorunreachable = Nγo foi possνvel encontrar uma cor na linha {0} +importerDOT_error_posunreachable = Nγo foi possνvel analisar a posiηγo do nσ {0}. O formato deve ser pos="x, y". +importerDOT_error_weightunreachable = Nγo ι possνvel analisar o peso da aresta na linha {0} + +# importerTGF_error_emptynodes = No nodes found diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_ro.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_ro.properties new file mode 100644 index 0000000000..bca9ddf94b --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_ro.properties @@ -0,0 +1,139 @@ + + +fileType_VNA_Name=Fi\u0219iere VNA +importerGDF_error_dataformat7=Linia ''{0}'' are mai multe coloane dec\u00E2t au fost definite \u00EEn antet. Verific\u0103 num\u0103rul de virgule. +fileType_GraphML_Name=Fi\u0219iere GraphML +fileType_GML_Name=Fi\u0219iere GML +fileType_TLP_Name=Fi\u0219iere TLP +fileType_TGF_Name=Fi\u0219iere TGF +fileType_Edges_Name=List\u0103 de muchii +fileType_GraphViz_Name=Fi\u0219iere GraphViz +fileType_DL_Name=Fi\u0219iere DL (UCINET) +importerGDF_error_dataformat1=Fi\u0219ierul trebuie s\u0103 \u00EEnceap\u0103 cu linia "nodedef> name". +importerGDF_error_dataformat2=Formatare incorect\u0103 a coloanelor. Fiecare coloan\u0103 trebuie s\u0103 con\u021Bin\u0103 cel pu\u021Bin un nume. Numele coloanelor nu pot s\u0103 con\u021Bin\u0103 virgule. +importerGDF_error_dataformat3=Nu s-a reu\u0219it importarea coloanei ''{0}'' pentru nodul ''{1}''. Eroare la valoarea ''{2}''. +importerGDF_error_dataformat5=Tipul de date ''{0}'' nu este recunoscut, va fi utilizat ca \u0219ir de caractere. +importerGDF_error_dataformat8=Coloana de noduri ''{0}'' nu poate fi ad\u0103ugat\u0103 deoarece exist\u0103 deja +importerGDF_error_dataformat9=Coloana de muchii ''{0}'' nu poate fi ad\u0103ugat\u0103 deoarece exist\u0103 deja +importerNET_error_dataformat1=Fi\u0219ierul trebuie s\u0103 \u00EEnceap\u0103 cu linia "*vertices". +importerNET_error_dataformat2=Linie goal\u0103 detectat\u0103 la linia {0} +importerNET_error_dataformat3=Ghilimele neechilibrate (sau prea multe) la linia {0} +importerNET_error_dataformat7=Problem\u0103 de parsare a ponderii muchiilor la linia {0}. Trebuie s\u0103 fie un num\u0103r zecimal (double). +importerGraphML_error_syntax1=Eroare de sintax\u0103, fi\u0219ierul trebuie s\u0103 \u00EEnceap\u0103 cu marcajul . +importerGraphML_error_syntax2=Eroare de sintax\u0103, nodul ''{0}'' trebuie s\u0103 fie imbricat \u00EEntr-un marcaj . +importerGraphML_error_attributetype1=Tip de atribut neg\u0103sit pentru atributul ''{0}''. Va fi considerat \u0219ir de caractere. +importerGraphML_error_attributeclass=Clas\u0103 de atribute neg\u0103sit\u0103 sau necunoscut\u0103 pentru atributul ''{0}''. Atributul va fi ignorat. +importerGraphML_error_attributetype2=Tip de atribut nerecunoscut pentru ''{0}''. Atributul va fi ignorat. +importerGraphML_error_attributecolumn_exist=Atributul cu id-ul ''{0}'' exist\u0103 deja, va fi ignorat +importerGraphML_error_attributeempty=Eroare de parsare a atributului, lipse\u0219te id-ul. +importerGraphML_log_nodeproperty=Proprietate a nodului g\u0103sit\u0103: {0} +importerGraphML_log_edgeproperty=Proprietate a muchiei g\u0103sit\u0103: {0} +importerGraphML_log_nodeattribute=Atribut al nodului g\u0103sit ''{0}'' ({1}) +importerGraphML_log_edgeattribute=Atribut al muchiei g\u0103sit ''{0}'' ({1}) +importerGraphML_log_default=Valoare implicit\u0103 a atributului g\u0103sit\u0103: ''{0}'' ({1}) +importerGraphML_error_datakey=Cheia lipse\u0219te pentru elementul id={0} +importerGraphML_error_nodeid=Id-ul nodului lipse\u0219te. Nodul va fi ignorat. +importerGraphML_error_defaultedgetype=Tipul implicit de muchie ''{0}'' nu este recunoscut. Setat la valoarea implicit\u0103 ''mixed''. +importerGraphML_error_edgetype=Tipul ''{0}'' al muchiei ''{1}'' nu este recunoscut. Setat la valoarea implicit\u0103. +importerGML_error_nodeidmissing=Id-ul nodului lipse\u0219te +importerGML_error_directedparse=Valoare nea\u0219teptat\u0103 pentru proprietatea 'directed' pentru muchia ''{0}'' +importerGML_error_badparsing=Parsare GML invalid\u0103 +importerTPL_error_badparsing=Parsare TPL invalid\u0103 +importerGEXF_error_attributeempty=Eroare de parsare a atributului, id-ul sau tipul lipsesc. +importerGEXF_error_attributedefault=Valoarea implicit\u0103 a atributului ''{0}'' nu poate fi castat\u0103 la tipul ''{1}''. +importerGEXF_error_attributetype1=Tip de atribut neg\u0103sit pentru atributul ''{0}''. Va fi considerat \u0219ir de caractere. +importerGEXF_error_attributetype2=Tip de atribut nerecunoscut pentru ''{0}''. Atributul va fi ignorat. +importerGEXF_error_datakey=Cheia (atributului ''for'') lipse\u0219te pentru elementul id={0} +importerGEXF_error_datakey1=Cheia (atributului ''id'') lipse\u0219te pentru elementul id={0} +importerGEXF_error_dataoptionsvalue=Valoarea ''{0}'' nu este o op\u021Biune pentru elementul id={1}. Valoarea nu poate fi setat\u0103 ca atribut ''{2}''. +importerGEXF_error_datavalue=Eroare de tip ''{0}'' pentru elementul {1}. Valoarea nu poate fi setat\u0103 ca atribut ''{2}''. +importerGEXF_error_edgeid=Id-ul muchiei lipse\u0219te. A fost generat un id. +importerGEXF_error_edgesource=Sursa muchiei lipse\u0219te. Muchia va fi ignorat\u0103. +importerGEXF_error_edgetarget=\u021Ainta muchiei lipse\u0219te. Muchia va fi ignorat\u0103. +importerGEXF_error_nodeposition=Nodul ''{0}'' are o pozi\u021Bie gre\u0219it\u0103 pe ''{1}'' (nu este zecimal\u0103). +importerGEXF_error_nodesize=Nodul ''{0}'' are o dimensiune gre\u0219it\u0103 (nu este zecimal\u0103). +importerGEXF_error_notnode=Elementul ''{0}'' nu este un nod. Elementul va fi ignorat. +importerGEXF_error_parsingmode=Modul de parsare ''{0}'' nu este recunoscut. Setat la valoarea implicit\u0103 "static". +importerGEXF_error_edge_timestamps_parseerror=Marcajele temporale pentru muchia ''{0}'' nu au putut fi parsate. +importerGEXF_error_nodeattribute_timeset_parseerror=Marcajele temporale sau intervalele pentru atributul nodului ''{0}'' nu au putut fi parsate. +importerGEXF_error_edgeattribute_timeset_parseerror=Marcajele temporale sau intervalele pentru atributul muchiei ''{0}'' nu au putut fi parsate. +importerGEXF_error_nodecolorvalue=Nodul cu id-ul ''{1}'' are un canal de culoare gre\u0219it ''{2}''=''{0}''. Ar trebui s\u0103 fie 0 <= ''{2}'' <= 255. +importerGEXF_error_edgecolorvalue=Muchia cu id-ul ''{1}'' are un canal de culoare gre\u0219it ''{2}''=''{0}''. Ar trebui s\u0103 fie 0 <= ''{2}'' <= 255. +importerGEXF_error_nodeopacityvalue=Nodul cu id-ul ''{1}'' are o opacitate gre\u0219it\u0103 a=''{0}''. Ar trebui s\u0103 fie 0.0 <= a <= 1.0. +importerGEXF_error_node_open_interval=Nodul cu id-ul ''{0}'' utilizeaz\u0103 intervale deschise, care au fost scoase din uz. +importerGEXF_error_edge_open_interval=Muchia cu id-ul ''{0}'' utilizeaz\u0103 intervale deschise, care au fost scoase din uz. +importerGEXF_error_slice_bound_missing=Lipse\u0219te un marcaj temporal sau atribut-interval pe +importerGEXF_error_node_timeintervals_parseerror=Intervalele de timp pentru nodul ''{0}'' nu au putut fi parsate. Folose\u0219te formatare xsd:date, xsd:dateTime sau Double. +importerGEXF_error_edgeattribute_timeinterval_parseerror=Intervalul de timp pentru atributul muchiei ''{0}'' nu a putut fi parsat. Folose\u0219te formatare xsd:date, xsd:dateTime sau Double. +importerGEXF_error_nodeattribute_timestamp_parseerror=Marcajul temporal pentru atributul nodului ''{0}'' nu a putut fi parsat. Folose\u0219te formatare xsd:date, xsd:dateTime sau Double. +importerGEXF_error_timerepresentation_timestamperror=Reprezentarea temporal\u0103 este setat\u0103 ca 'interval' astfel \u00EEnc\u00E2t marcajele temporale nu pot fi utilizate. Seta\u021Bi reprezentarea temporal\u0103 ca 'timestamp' \u00EEn . +importerGEXF_log_edgeeproperty=Proprietate a muchiei g\u0103sit\u0103: {0} +importerGEXF_log_options=Op\u021Biuni de atribut g\u0103site: ''{0}'' ({1}) +importerGEXF_log_version10=GEXF versiunea 1.0 (dep\u0103\u0219it) +importerGEXF_log_version13=GEXF versiunea 1.3 +importerGEXF_log_version_undef=Versiune GEXF nedefinit\u0103. Va fi utilizat parserul 1.3. +importerGEXF_log_dynamic_weight=Coloan\u0103 cu pondere dinamic\u0103 g\u0103sit\u0103 +importerDL_error_unknowntag=Etichet\u0103 necunoscut\u0103 \u00EEn antet ''{0}'' +importerDL_error_formatmissing=Eticheta 'format' lipse\u0219te din DL, 'fullmatrix' va fi folosit\u0103 \u00EEn mod implicit +importerDL_error_nmissing=Antetul fi\u0219ierului DL trebuie s\u0103 con\u021Bin\u0103 eticheta 'n = ' +importerDL_error_mmissing=Antetul fi\u0219ierului DL trebuie s\u0103 con\u021Bin\u0103 eticheta 'm = ' +importerDL_error_matrixrowscount=Num\u0103rul de r\u00E2nduri ale matricei ({0}) este mai mare dec\u00E2t parametrul n ({1}) +importerDL_error_matrixrowscount2=Num\u0103rul de r\u00E2nduri ale matricei ({0}) este mai mic dec\u00E2t parametrul n ({1}) +importerDL_error_matriciescount=Num\u0103rul de seturi de matrici ({0}) este diferit de parametrul nm ({1}) +importerDL_error_weightparseerror=Nu s- a putut parsa ponderea "{0}" \u00EEn matricea {1} pe linia {2} +importerDL_error_edgelistrowparse=Imposibil de parsat de la id-ul ''{0}'' din lista de muchii, linia {1} +importerDOT_error_nothingfound=Nu s-a g\u0103sit niciun 'graph' sau 'digraph' +importerDOT_error_labelunreachable=Imposibil de g\u0103sit eticheta la linia {0} +importerDOT_error_colorunreachable=Imposibil de g\u0103sit culoarea la linia {0} +importerDOT_error_weightunreachable=Imposibil de parsat ponderea muchiei la linia {0} +importerTGF_error_emptynodes=Nu s-au g\u0103sit noduri +fileType_NET_Name=Fi\u0219iere NET (Pajek) +importerGDF_error_dataformat6=Tipul coloanei nu a fost g\u0103sit pentru ''{0}'', va fi utilizat\u0103 ca \u0219ir de caractere. +fileType_GDF_Name=Fi\u0219iere GDF (GUESS) +fileType_GEXF_Name=Fi\u0219iere GEXF +importerGDF_error_dataformat4=Nu s-a reu\u0219it setarea atributului ''{0}'' la ''{1}'' pentru {2}. +importerTPL_error_dataformat1=Formatare necorespunz\u0103toare a muchiilor la linia {0}. +importerNET_error_dataformat4=Num\u0103rul v\u00E2rfului ''{0}'' nu se afl\u0103 \u00EEn intervalul [1,{1}] +importerNET_error_dataformat6=Problem\u0103 de conversie a dimensiunii v\u00E2rfurilor la linia {0}. Trebuie s\u0103 fie un num\u0103r zecimal (float). +importerNET_error_dataformat5=Problem\u0103 de conversie a coordonatelor v\u00E2rfurilor la linia {0}. Trebuie s\u0103 fie un num\u0103r zecimal (float). +importerGraphML_error_attributedefault=Valoarea implicit\u0103 a atributului ''{0}'' nu poate fi castat\u0103 la tipul ''{1}''. +importerGraphML_error_attributefor=Atributul ''for'' neg\u0103sit sau necunoscut pentru atributul ''{0}''. Atributul va fi ignorat. +importerGEXF_error_attributeclass=Atributul ''class'' neg\u0103sit sau necunoscut pentru atributul ''{0}''. Atributul va fi ignorat. +importerGML_error_directedgraphparse=Valoare nea\u0219teptat\u0103 pentru proprietatea 'directed' a grafului +importerGEXF_error_edgetype=Tipul ''{0}'' al muchiei ''{1}'' nu este recunoscut. Setat la valoarea implicit\u0103. +importerGEXF_error_parsingdatetype=Tipul de dat\u0103 ''{0}'' nu este recunoscut. Setat la valoarea implicit\u0103 "date". +importerGEXF_error_edgeweight=Ponderea muchiei de id ''{0}'' nu este zecimala. Ponderea va fi ignorat\u0103. +importerGEXF_error_nodeattribute_timeinterval_parseerror=Intervalul de timp pentru atributul nodului ''{0}'' nu a putut fi parsat. Folose\u0219te formatare xsd:date, xsd:dateTime sau Double. +importerGEXF_error_nodeid=Id-ul nodului lipse\u0219te. Nodul va fi ignorat. +importerGEXF_error_attributeoptions=Valorile op\u021Bionale ale atributului ''{0}'' nu pot fi castate la tipul ''{1}''. +importerGEXF_error_edge_timestamp_parseerror=Marcajul temporal pentru muchia ''{0}'' nu a putut fi parsat. Folose\u0219te formatare xsd:date, xsd:dateTime sau Double. +importerGEXF_error_attributecolumn_exist=Atributul cu id-ul ''{0}'' exist\u0103 deja, va fi ignorat +importerGEXF_error_idtype_error=Tipul de id ''{0}'' nu este recunoscut, folose\u0219te 'integer', 'long' sau 'string' +importerGEXF_error_defaultedgetype=Tipul implicit de muchie ''{0}'' nu este recunoscut. Setat la valoarea implicit\u0103 ''mixed''. +importerGEXF_error_edgedouble=Tipul de muchie "double" nu este suportat \u00EEnc\u0103. Setat la valoarea implicit\u0103 ''mixed''. +importerGEXF_error_node_timestamps_parseerror=Marcajele temporale pentru nodul ''{0}'' nu au putut fi parsate. +importerGEXF_error_edgeopacityvalue=Muchia cu id-ul ''{1}'' are o opacitate gre\u0219it\u0103 a=''{0}''. Ar trebui s\u0103 fie 0.0 <= a <= 1.0. +importerGEXF_error_pid=Nodul cu id-ul ''{0}'' define\u0219te un p\u0103rinte folosind un pid. Grafurile ierarhice au fost scoase din uz \u0219i vor fi ignorate. +importerGEXF_log_edgeattribute=Atribut al muchiei g\u0103sit ''{0}'' ({1}) +importerGEXF_log_nodeattribute=Atribut al nodului g\u0103sit ''{0}'' ({1}) +importerGEXF_error_timezone_parseerror=Fusul orar ''{0}'' nu a putut fi recunoscut +importerGEXF_error_timerepresentation_intervalerror=Reprezentarea temporal\u0103 este setat\u0103 ca 'timestamp' astfel \u00EEnc\u00E2t intervalele nu pot fi utilizate. Seta\u021Bi reprezentarea temporal\u0103 ca 'interval' \u00EEn . +importerGEXF_log_nodeproperty=Proprietate a nodului g\u0103sit\u0103: {0} +importerGEXF_log_default=Valoare implicit\u0103 a atributului g\u0103sit\u0103: ''{0}'' ({1}) +importerGEXF_log_version11=GEXF versiunea 1.1 (dep\u0103\u0219it) +importerGEXF_log_version12=GEXF versiunea 1.2 (dep\u0103\u0219it) +importerDL_error_firstline=Prima linie a fi\u0219ierului DL trebuie s\u0103 \u00EEnceap\u0103 cu 'DL' +importerDL_error_labelscount=Num\u0103rul de etichete ({0}) este diferit de parametrul n ({1}) +importerDL_error_nodata=Nu a fost g\u0103sit\u0103 nicio linie de date +importerDL_error_matrixentriescount=Num\u0103rul de intr\u0103ri de pe r\u00E2ndul {0} din matricea {1} este mai mare dec\u00E2t cel permis (linia {2} din fi\u0219ierul DL) +importerDL_error_badformat=Formatul ''{0}'' nu este acceptat, furniza\u021Bi doar formatul 'format=edgelist1' sau 'format=fullmatrix' +importerDL_error_edgeparseweight=Imposibil de parsat ponderea ''{0}'' din lista de muchii, linia {1} +importerDL_error_edgelistssetscount=Num\u0103rul de seturi de liste de muchii ({0}) este diferit de parametrul nm ({1}) +importerDOT_error_posunreachable=Imposibil de parsat pozi\u021Bia nodului la linia {0}. Trebuie s\u0103 fie pos = "x, y". +importerGEXF_error_node_timeinterval_parseerror=Intervalul de timp pentru nodul ''{0}'' nu a putut fi parsat. Folose\u0219te formatare xsd:date, xsd:dateTime sau Double. +importerGEXF_error_edge_timeinterval_parseerror=Intervalul de timp pentru muchia ''{0}'' nu a putut fi parsat. Folose\u0219te formatare xsd:date, xsd:dateTime sau Double. +importerGEXF_error_edge_timeintervals_parseerror=Intervalele de timp pentru muchia ''{0}'' nu au putut fi parsate. Folose\u0219te formatare xsd:date, xsd:dateTime sau Double. +importerGEXF_error_edgeattribute_timestamp_parseerror=Marcajul temporal pentru atributul muchiei ''{0}'' nu a putut fi parsat. Folose\u0219te formatare xsd:date, xsd:dateTime sau Double. +importerGraphML_error_datavalue=Eroare de tip {0} pentru elementul id={1}. Valoarea nu poate fi setat\u0103 ca atribut ''{2}''. +importerGEXF_error_node_timestamp_parseerror=Marcajul temporal pentru nodul ''{0}'' nu a putut fi parsat. Folose\u0219te formatare xsd:date, xsd:dateTime sau Double. +importerGraphML_error_graphattributes=Atributele ''{0}'' ale grafului vor fi ignorate deoarece nu sunt suportate de Gephi diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_ru.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_ru.properties index 91bec69906..5543e1e134 100644 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_ru.properties +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_ru.properties @@ -1,248 +1,138 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -# FIRST AUTHOR , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:27+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - fileType_GDF_Name=GDF Files (GUESS) - fileType_GEXF_Name=GEXF Files - fileType_NET_Name=NET Files (Pajek) - fileType_GraphML_Name=GraphML Files - fileType_GML_Name=GML Files - fileType_TLP_Name=TLP Files - -fileType_CSV_Name=CSV Files - +# fileType_TGF_Name = TGF Files fileType_Edges_Name=\u0421\u043f\u0438\u0441\u043e\u043a \u0440\u0435\u0431\u0451\u0440 - fileType_GraphViz_Name=GraphViz Files - fileType_DL_Name=DL Files (UCINET) - fileType_VNA_Name=VNA Files - importerGDF_error_dataformat1=\u0424\u0430\u0439\u043b \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c\u0441\u044f \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0438 "nodedef> name" - importerGDF_error_dataformat2=\u041d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u0441\u0442\u043e\u043b\u0431\u0435\u0446 \u0434\u043e\u043b\u0436\u0435\u043d \u0445\u043e\u0442\u044f \u0431\u044b \u0438\u043c\u0435\u0442\u044c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435. \u041d\u0430\u0437\u0432\u0430\u043d\u0438\u044f \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0437\u0430\u043f\u044f\u0442\u044b\u0445. - importerGDF_error_dataformat3=\u041d\u0435\u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0438\u043c\u043f\u043e\u0440\u0442 \u0441\u0442\u043e\u043b\u0431\u0446\u0430 ''{0}'' \u0434\u043b\u044f \u0443\u0437\u043b\u0430 ''{1}''. \u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0447\u0442\u0435\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f ''{2}'' - importerGDF_error_dataformat4=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c ''{0}'' \u0430\u0442\u0440\u0438\u0431\u0443\u0442 ''{1}'' \u0434\u043b\u044f ''{2}''. - importerGDF_error_dataformat5=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0442\u044c \u0442\u0438\u043f \u0434\u0430\u043d\u043d\u044b\u0445 ''{0}'', \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0439 \u0442\u0438\u043f. - importerGDF_error_dataformat6=\u0422\u0438\u043f \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d \u0434\u043b\u044f ''{0}'', \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0439 \u0442\u0438\u043f. - importerGDF_error_dataformat7=\u0421\u0442\u0440\u043e\u043a\u0430 ''{0}'' \u0438\u043c\u0435\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0441\u0442\u043e\u043b\u0431\u0446\u043e\u0432, \u0447\u0435\u043c \u0431\u044b\u043b\u043e \u0437\u0430\u0434\u0430\u043d\u043e \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0444\u0430\u0439\u043b\u0430. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043f\u0440\u043e\u0432\u0435\u0440\u044c\u0442\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u0430\u043f\u044f\u0442\u044b\u0445 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435. - importerGDF_error_dataformat8=\u0421\u0442\u043e\u043b\u0431\u0435\u0446 ''{0}'' \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u0443\u0437\u043b\u0430\u043c\u0438. - importerGDF_error_dataformat9=\u0421\u0442\u043e\u043b\u0431\u0435\u0446 ''{0}'' \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442 \u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0443 \u0441 \u0440\u0451\u0431\u0440\u0430\u043c\u0438. - importerTPL_error_dataformat1=\u041d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 \u0440\u0435\u0431\u0440\u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 {0}. - importerNET_error_dataformat1=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c\u0441\u044f \u0441\u043e \u0441\u0442\u0440\u043e\u043a\u0438 "*vertices" - importerNET_error_dataformat2=\u0421\u0442\u0440\u043e\u043a\u0430 \u0441 \u043d\u043e\u043c\u0435\u0440 {0} \u043d\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u0430\u043d\u043d\u044b\u0445 (\u043f\u0443\u0441\u0442\u0430) - importerNET_error_dataformat3=\u041d\u0435\u0447\u0451\u0442\u043d\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e (\u0438\u043b\u0438 \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e) \u043a\u0430\u0432\u044b\u0447\u0435\u043a \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 {0} - importerNET_error_dataformat4=\u041d\u043e\u043c\u0435\u0440 \u0443\u0437\u043b\u0430 ''{0}'' \u043d\u0435 \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b\u0435 [1,{1}] - importerNET_error_dataformat5=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0443\u0437\u043b\u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 {0}. \u041a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0434\u043e\u043b\u0436\u043d\u044b \u0431\u044b\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0447\u0438\u0441\u043b\u0430\u043c\u0438. - importerNET_error_dataformat6=\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0443\u0437\u043b\u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 {0}. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0442\u0438\u043f. - importerNET_error_dataformat7=\u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0440\u0435\u0431\u0440\u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 {0}. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043e\u043b\u0436\u043d\u043e \u0438\u043c\u0435\u0442\u044c \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0442\u0438\u043f. - importerGraphML_error_syntax1=\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430, \u0444\u0430\u0439\u043b \u0434\u043e\u043b\u0436\u0435\u043d \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c\u0441\u044f \u0441 \u0442\u044d\u0433\u0430 . - importerGraphML_error_syntax2=\u0421\u0438\u043d\u0442\u0430\u043a\u0441\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043e\u0448\u0438\u0431\u043a\u0430, \u0443\u0437\u0435\u043b ''{0}'' \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0432\u044b\u0434\u0435\u043b\u0435\u043d \u0442\u044d\u0433\u043e\u043c . - importerGraphML_error_attributeclass=\u041d\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d \u043a\u043b\u0430\u0441\u0441 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430 \u0438\u043b\u0438 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043f\u0440\u0438\u0437\u043d\u0430\u043a ''{0}''. \u041f\u0440\u0438\u0437\u043d\u0430\u043a \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d. - importerGraphML_error_attributefor=\u041f\u0440\u0438\u0437\u043d\u0430\u043a ''for'' \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d \u0438\u043b\u0438 \u043d\u0435\u0438\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u043f\u0440\u0438\u0437\u043d\u0430\u043a ''{0}''. \u041f\u0440\u0438\u0437\u043d\u0430\u043a \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d. - importerGraphML_error_attributetype1=\u0422\u0438\u043f \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430 ''{0}'' \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d. \u041f\u0440\u0438\u043d\u044f\u0442 \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u043e\u0439 \u0442\u0438\u043f \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. - importerGraphML_error_attributetype2=\u0422\u0438\u043f \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430 ''{0}'' \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d. \u041f\u0440\u0438\u0437\u043d\u0430\u043a \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d. - importerGraphML_error_attributedefault=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430 ''{0}'' \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u0438\u043f\u0430 ''{1}''. - importerGraphML_error_attributecolumn_exist=\u041f\u0440\u0438\u0437\u043d\u0430\u043a \u0441 id ''{0}'' \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d. - importerGraphML_error_attributeempty=\u041d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u043f\u0440\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0440\u0438\u0437\u043d\u0430\u043a, \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 id. - -importerGraphML_log_nodeproperty=\u041d\u0430\u0439\u0434\u0435\u043d\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0443\u0437\u043b\u0430\: {0} - -importerGraphML_log_edgeproperty=\u041d\u0430\u0439\u0434\u0435\u043d\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0440\u0435\u0431\u0440\u0430\: {0} - +importerGraphML_log_nodeproperty=\u041d\u0430\u0439\u0434\u0435\u043d\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0443\u0437\u043b\u0430: {0} +importerGraphML_log_edgeproperty=\u041d\u0430\u0439\u0434\u0435\u043d\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0440\u0435\u0431\u0440\u0430: {0} importerGraphML_log_nodeattribute=\u041d\u0430\u0439\u0434\u0435\u043d \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u0443\u0437\u043b\u0430 ''{0}'' ({1}) - importerGraphML_log_edgeattribute=\u041d\u0430\u0439\u0434\u0435\u043d \u043f\u0440\u0438\u0437\u043d\u0430\u043a \u0440\u0435\u0431\u0440\u0430 ''{0}'' ({1}) - -importerGraphML_log_default=\u041d\u0430\u0439\u0434\u0435\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e\: ''{0}'' ({1}) - -importerGraphML_error_datakey=\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u043b\u044e\u0447 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441 id\={0} - -importerGraphML_error_datavalue=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {0} \u043d\u0435\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0434\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441 id\={1}. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u043c ''{2}'' - +importerGraphML_log_default=\u041d\u0430\u0439\u0434\u0435\u043d\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e: ''{0}'' ({1}) +importerGraphML_error_datakey=\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u043b\u044e\u0447 \u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441 id={0} +importerGraphML_error_datavalue=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {0} \u043d\u0435\u0432\u0435\u0440\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0430 \u0434\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441 id={1}. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u044f\u0432\u043b\u044f\u0442\u044c\u0441\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u043c ''{2}'' importerGraphML_error_nodeid=\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 id \u0443\u0437\u043b\u0430. \u0423\u0437\u0435\u043b \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d. - importerGraphML_error_defaultedgetype=\u0422\u0438\u043f \u0440\u0435\u0431\u0440\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e ''{0}'' \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d. \u041f\u0440\u0438\u043d\u044f\u0442 ''mixed''. - importerGraphML_error_edgetype=\u0422\u0438\u043f ''{0}'' \u0434\u043b\u044f \u0440\u0435\u0431\u0440\u0430 ''{1}'' \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d. \u041f\u0440\u0438\u043d\u044f\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. - importerGML_error_nodeidmissing=\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 id \u0443\u0437\u043b\u0430 - importerGML_error_directedgraphparse=\u041d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0430. - importerGML_error_directedparse=\u0420\u0435\u0431\u0440\u043e ''{0}'' \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u0432\u0435\u0440\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0433\u0440\u0430\u0444\u0430 - importerGML_error_badparsing=\u041e\u0448\u0438\u0431\u043a\u0430 \u0447\u0442\u0435\u043d\u0438\u044f GML - importerTPL_error_badparsing=\u041e\u0448\u0438\u0431\u043a\u0430 \u0447\u0442\u0435\u043d\u0438\u044f TPL - importerGEXF_error_attributeclass=\u041f\u0440\u0438\u0437\u043d\u0430\u043a ''class'' \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d \u0438\u043b\u0438 \u043d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u0435\u043d \u0434\u043b\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 ''{0}''. \u041f\u0440\u0438\u0437\u043d\u0430\u043a \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d. - importerGEXF_error_attributeempty=\u041e\u0448\u0438\u0431\u043a\u0430 \u0447\u0442\u0435\u043d\u0438\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430, id \u0438\u043b\u0438 type \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u044b. - importerGEXF_error_attributedefault=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 ''{0}'' \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u0438\u043f\u0430 ''{1}''. - importerGEXF_error_attributeoptions=\u041e\u043f\u0446\u0438\u0438 \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430 ''{0}'' \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0442\u0438\u043f\u0430 ''{1}''. - importerGEXF_error_attributecolumn_exist=\u0410\u0442\u0440\u0438\u0431\u0443\u0442 \u0441 id ''{0}'' \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442, \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d - importerGEXF_error_attributetype1=\u0414\u043b\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 "{0}" \u043d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d \u0442\u0438\u043f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043a\u0430\u043a string. - importerGEXF_error_attributetype2=\u0422\u0438\u043f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 ''{0}'' \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d. \u0410\u0442\u0440\u0438\u0431\u0443\u0442 \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d. - -importerGEXF_error_datakey=\u041a\u043b\u044e\u0447 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0430\u0442\u0440\u0438\u0431\u0443\u0442 ''for'') \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d \u0434\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441 id\={0} - -importerGEXF_error_datakey1=\u041a\u043b\u044e\u0447 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0430\u0442\u0440\u0438\u0431\u0443\u0442 ''id'') \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d \u0434\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441 id\={0} - -importerGEXF_error_dataoptionsvalue=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 ''{0}'' \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0434\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441 id\={1}. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0434\u043b\u044f \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430 ''{2}''. - -importerGEXF_error_datavalue=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 ''{0}'' \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0442\u0438\u043f \u0434\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441 id\={1}. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0434\u043b\u044f \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430 ''{2}''. - +importerGEXF_error_datakey=\u041a\u043b\u044e\u0447 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0430\u0442\u0440\u0438\u0431\u0443\u0442 ''for'') \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d \u0434\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441 id={0} +importerGEXF_error_datakey1=\u041a\u043b\u044e\u0447 \u0434\u0430\u043d\u043d\u044b\u0445 (\u0430\u0442\u0440\u0438\u0431\u0443\u0442 ''id'') \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d \u0434\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441 id={0} +importerGEXF_error_dataoptionsvalue=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 ''{0}'' \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0440\u0438\u043d\u044f\u0442\u043e \u0434\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441 id={1}. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0434\u043b\u044f \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430 ''{2}''. +importerGEXF_error_datavalue=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 ''{0}'' \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0439 \u0442\u0438\u043f \u0434\u043b\u044f \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u0441 id={1}. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043e \u0434\u043b\u044f \u043f\u0440\u0438\u0437\u043d\u0430\u043a\u0430 ''{2}''. +# importerGEXF_error_idtype_error = The id type ''{0}'' is not recognized, use 'integer', 'long' or 'string' importerGEXF_error_defaultedgetype=\u0422\u0438\u043f \u0440\u0435\u0431\u0440\u0430 ''{0}'' \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0442\u0438\u043f ''mixed''. - importerGEXF_error_edgedouble=\u041d\u0430 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442 \u0442\u0438\u043f \u0440\u0435\u0431\u0440\u0430 ''double'' \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u0442\u0438\u043f ''mixed''. - importerGEXF_error_edgetype=\u0422\u0438\u043f ''{0}'' \u0440\u0435\u0431\u0440\u0430 ''{1}'' \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d. \u041f\u0440\u0438\u043d\u044f\u0442\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e. - importerGEXF_error_edgeid=\u041f\u0440\u043e\u043f\u0443\u0449\u0435\u043d\u043e id \u0440\u0435\u0431\u0440\u0430. ID \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. - importerGEXF_error_edgesource=\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0440\u0435\u0431\u0440\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442. \u0420\u0435\u0431\u0440\u043e \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e. - importerGEXF_error_edgetarget=\u041f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c \u0440\u0435\u0431\u0440\u0430 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442. \u0420\u0435\u0431\u0440\u043e \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e. - importerGEXF_error_edgeweight=\u0412\u0435\u0441 \u0440\u0435\u0431\u0440\u0430 \u0441 id ''{0}'' \u043d\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432\u0435\u0441\u0430 \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043e. - importerGEXF_error_nodeid=\u041d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 id \u0443\u0437\u043b\u0430. \u0423\u0437\u0435\u043b \u043f\u0440\u043e\u043f\u0443\u0449\u0435\u043d. - importerGEXF_error_nodeposition=\u0423\u0437\u0435\u043b ''{0}'' \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u0432\u0435\u0440\u043d\u0443\u044e \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u043d\u0430 ''{1}'' (\u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e). - importerGEXF_error_nodesize=\u0423\u0437\u0435\u043b ''{0}'' \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u0432\u0435\u0440\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 (\u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e). - importerGEXF_error_notnode=\u042d\u043b\u0435\u043c\u0435\u043d\u0442 ''{0}'' \u043d\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0443\u0437\u043b\u043e\u043c. \u042d\u043b\u0435\u043c\u0435\u043d\u0442 \u0431\u0443\u0434\u0435\u0442 \u043f\u0440\u043e\u0438\u0433\u043d\u043e\u0440\u0438\u0440\u043e\u0432\u0430\u043d. - -importerGEXF_error_pid_notfound=\u041d\u0435 \u0443\u0434\u0430\u0451\u0442\u0441\u044f \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0438\u0442\u044c \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 pid "{0}" \u0434\u043b\u044f \u0443\u0437\u043b\u0430 "{1}". - importerGEXF_error_parsingdatetype=\u0422\u0438\u043f \u0434\u0430\u0442\u044b "{0}" \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043a\u0430\u043a "date". - importerGEXF_error_parsingmode=\u0420\u0435\u0436\u0438\u043c \u043f\u0430\u0440\u0441\u0438\u043d\u0433\u0430 "{0}" \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e, \u043a\u0430\u043a static - -importerGEXF_error_node_timeinterval_parseerror=\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0434\u043b\u044f \u0443\u0437\u043b\u0430 "{0}" \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 xsd\:date, xsd\:dateTime \u0438\u043b\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u043a Double. - -importerGEXF_error_edge_timeinterval_parseerror=\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0434\u043b\u044f \u0440\u0435\u0431\u0440\u0430 "{0}" \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 xsd\:date, xsd\:dateTime \u0438\u043b\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u043a Double. - -importerGEXF_error_nodeattribute_timeinterval_parseerror=\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0434\u043b\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 \u0443\u0437\u043b\u0430 "{0}" \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 xsd\:date, xsd\:dateTime \u0438\u043b\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u043a Double. - -importerGEXF_error_edgeattribute_timeinterval_parseerror=\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0434\u043b\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 \u0440\u0435\u0431\u0440\u0430 "{0}" \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 xsd\:date, xsd\:dateTime \u0438\u043b\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u043a Double. - -importerGEXF_error_nodecolorvalue=\u0423\u0437\u0435\u043b \u0441 id "{1}" \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u0432\u0435\u0440\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u043a\u0430\u043d\u0430\u043b "{2}"\="{0}". \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u043e\u0441\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u0435 0 < "{2}" < 255. - -importerGEXF_error_edgecolorvalue=\u0420\u0435\u0431\u0440\u043e \u0441 id "{1}" \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u0432\u0435\u0440\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u043a\u0430\u043d\u0430\u043b "{2}"\="{0}". \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u043e\u0441\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u0435 0 < "{2}" < 255. - -importerGEXF_error_nodeopacityvalue=\u0423\u0437\u0435\u043b \u0441 id "{1}" \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u0432\u0435\u0440\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u0443\u044e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c a\="{0}". \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u043e\u0441\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u0435 0.0 < a < 1.0. - -importerGEXF_error_edgeopacityvalue=\u0420\u0435\u0431\u0440\u043e \u0441 id "{1}" \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u0432\u0435\u0440\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u0443\u044e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c a\="{0}". \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u043e\u0441\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u0435 0.0 < a < 1.0. - -importerGEXF_log_edgeeproperty=\u041d\u0430\u0439\u0434\u0435\u043d\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0440\u0435\u0431\u0440\u0430\: "{0}" - -importerGEXF_log_nodeproperty=\u041d\u0430\u0439\u0434\u0435\u043d\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0443\u0437\u043b\u0430\: "{0}" - +importerGEXF_error_node_timeinterval_parseerror=\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0434\u043b\u044f \u0443\u0437\u043b\u0430 "{0}" \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 xsd:date, xsd:dateTime \u0438\u043b\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u043a Double. +importerGEXF_error_edge_timeinterval_parseerror=\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0434\u043b\u044f \u0440\u0435\u0431\u0440\u0430 "{0}" \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 xsd:date, xsd:dateTime \u0438\u043b\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u043a Double. +# importerGEXF_error_node_timeintervals_parseerror = The time intervals for node ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +# importerGEXF_error_edge_timeintervals_parseerror = The time intervals for edge ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_nodeattribute_timeinterval_parseerror=\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0434\u043b\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 \u0443\u0437\u043b\u0430 "{0}" \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 xsd:date, xsd:dateTime \u0438\u043b\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u043a Double. +importerGEXF_error_edgeattribute_timeinterval_parseerror=\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u0434\u043b\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 \u0440\u0435\u0431\u0440\u0430 "{0}" \u043d\u0435 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u043d. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 xsd:date, xsd:dateTime \u0438\u043b\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043a\u0430\u043a Double. +# importerGEXF_error_node_timestamp_parseerror = The timestamp for node ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +# importerGEXF_error_edge_timestamp_parseerror = The timestamp for edge ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +# importerGEXF_error_node_timestamps_parseerror = The timestamps for node ''{0}'' could not be parsed. +# importerGEXF_error_edge_timestamps_parseerror = The timestamps for edge ''{0}'' could not be parsed. +# importerGEXF_error_nodeattribute_timestamp_parseerror = The timestamp for node ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +# importerGEXF_error_edgeattribute_timestamp_parseerror = The timestamp for edge ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +# importerGEXF_error_nodeattribute_timeset_parseerror = The timestamps or intervals for node ''{0}'' attribute could not be parsed. +# importerGEXF_error_edgeattribute_timeset_parseerror = The timestamps or intervals for edge ''{0}'' attribute could not be parsed. +importerGEXF_error_nodecolorvalue=\u0423\u0437\u0435\u043b \u0441 id "{1}" \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u0432\u0435\u0440\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u043a\u0430\u043d\u0430\u043b "{2}"="{0}". \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u043e\u0441\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u0435 0 < "{2}" < 255. +importerGEXF_error_edgecolorvalue=\u0420\u0435\u0431\u0440\u043e \u0441 id "{1}" \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u0432\u0435\u0440\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u044b\u0439 \u0446\u0432\u0435\u0442\u043e\u0432\u043e\u0439 \u043a\u0430\u043d\u0430\u043b "{2}"="{0}". \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u043e\u0441\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u0435 0 < "{2}" < 255. +importerGEXF_error_nodeopacityvalue=\u0423\u0437\u0435\u043b \u0441 id "{1}" \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u0432\u0435\u0440\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u0443\u044e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c a="{0}". \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u043e\u0441\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u0435 0.0 < a < 1.0. +importerGEXF_error_edgeopacityvalue=\u0420\u0435\u0431\u0440\u043e \u0441 id "{1}" \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u0432\u0435\u0440\u043d\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u0443\u044e \u043f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c a="{0}". \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e, \u0447\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u043b\u043e\u0441\u044c \u0443\u0441\u043b\u043e\u0432\u0438\u0435 0.0 < a < 1.0. +# importerGEXF_error_node_open_interval = Node of id ''{0}'' uses open intervals, which have been deprecated. +# importerGEXF_error_edge_open_interval = Edge of id ''{0}'' uses open intervals, which have been deprecated. +# importerGEXF_error_slice_bound_missing = Missing timestamp or interval attribute on +# importerGEXF_error_pid = The node of id ''{0}'' defines a parent using a pid. Hierarchical graph support has been deprecated and will be ignored. +# importerGEXF_error_timezone_parseerror = The time zone ''{0}'' couldn't be recognized +# importerGEXF_error_timerepresentation_intervalerror = The time representation is set as 'timestamp' so intervals can't be used. Set the time representation to 'interval' in . +# importerGEXF_error_timerepresentation_timestamperror = The time representation is set as 'interval' so timestamps can't be used. Set the time representation to 'timestamp' in . +importerGEXF_log_edgeeproperty=\u041d\u0430\u0439\u0434\u0435\u043d\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0440\u0435\u0431\u0440\u0430: "{0}" +importerGEXF_log_nodeproperty=\u041d\u0430\u0439\u0434\u0435\u043d\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e \u0443\u0437\u043b\u0430: "{0}" importerGEXF_log_edgeattribute=\u041d\u0430\u0439\u0434\u0435\u043d \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0440\u0435\u0431\u0440\u0430 "{0}" ({1}) - importerGEXF_log_nodeattribute=\u041d\u0430\u0439\u0434\u0435\u043d \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0443\u0437\u043b\u0430 "{0}" ({1}) - importerGEXF_log_default=\u041d\u0430\u0439\u0434\u0435\u043d \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e "{0}" ({1}) - importerGEXF_log_options=\u041d\u0430\u0439\u0434\u0435\u043d\u044b \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 "{0}" ({1}) - importerGEXF_log_version10=GEXF version 1.0 (deprecated) - importerGEXF_log_version11=GEXF version 1.1 - importerGEXF_log_version12=GEXF version 1.2 - -!importerGEXF_log_version13= - -!importerGEXF_log_version_undef= - -importerGEXF_log_dynamic_weight=\u041d\u0430\u0439\u0434\u0435\u043d\u0430 \u043a\u043e\u043b\u043e\u043d\u043a\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u0435\u0441\u043e\u0432 - +# importerGEXF_log_version13 = GEXF version 1.3 +# importerGEXF_log_version_undef = Undefined GEXF version. Parser 1.3 is used. +importerGEXF_log_dynamic_weight=\u041d\u0430\u0439\u0434\u0435\u043d\u0430 \u043a\u043e\u043b\u043e\u043d\u043a\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0432\u0435\u0441\u043e\u0432 importerDL_error_firstline=\u041f\u0435\u0440\u0432\u0430\u044f \u0441\u0442\u0440\u043e\u043a\u0430 \u0444\u0430\u0439\u043b\u0430 \u0444\u043e\u0440\u043c\u0430\u0442\u0430 DL \u0434\u043e\u043b\u0436\u043d\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u0442\u044c\u0441\u044f \u0441 'DL' - importerDL_error_unknowntag=\u041d\u0435\u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0439 \u0442\u044d\u0433 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 "{0}" - importerDL_error_formatmissing=\u041e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0442\u044d\u0433 'format', \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f 'fullmatrix' - -importerDL_error_badformat=\u0424\u043e\u0440\u043c\u0430\u0442 "{0}" \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 'format\=edgelist1' \u0438\u043b\u0438 'format\=fullmatrix' - -importerDL_error_nmissing=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a DL-\u0444\u0430\u0439\u043b\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u044d\u0433 'n \= ' - -importerDL_error_mmissing=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a DL-\u0444\u0430\u0439\u043b\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u044d\u0433 'm \= ' - -importerDL_error_labelscount=\u0427\u0438\u0441\u043b\u043e \u043c\u0435\u0442\u043e\u043a ({0}) \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0442\u044d\u0433\u0435 'n \= ' ({1}) - +importerDL_error_badformat=\u0424\u043e\u0440\u043c\u0430\u0442 "{0}" \u043d\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442\u0441\u044f. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 'format=edgelist1' \u0438\u043b\u0438 'format=fullmatrix' +importerDL_error_nmissing=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a DL-\u0444\u0430\u0439\u043b\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u044d\u0433 'n = ' +importerDL_error_mmissing=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a DL-\u0444\u0430\u0439\u043b\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0442\u044d\u0433 'm = ' +importerDL_error_labelscount=\u0427\u0438\u0441\u043b\u043e \u043c\u0435\u0442\u043e\u043a ({0}) \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0432 \u0442\u044d\u0433\u0435 'n = ' ({1}) importerDL_error_nodata=\u041d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d\u0430 \u0441\u0442\u0440\u043e\u043a\u0430 \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 - -importerDL_error_matrixrowscount=\u0427\u0438\u0441\u043b\u043e \u0441\u0442\u0440\u043e\u043a \u043c\u0430\u0442\u0440\u0438\u0446\u044b ({0}) \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0442\u044d\u0433\u0435 'n \= ' ({1}) - -importerDL_error_matrixrowscount2=\u0427\u0438\u0441\u043b\u043e \u0441\u0442\u0440\u043e\u043a \u043c\u0430\u0442\u0440\u0438\u0446\u044b ({0}) \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0442\u044d\u0433\u0435 'n \= ' ({1}) - +importerDL_error_matrixrowscount=\u0427\u0438\u0441\u043b\u043e \u0441\u0442\u0440\u043e\u043a \u043c\u0430\u0442\u0440\u0438\u0446\u044b ({0}) \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0442\u044d\u0433\u0435 'n = ' ({1}) +importerDL_error_matrixrowscount2=\u0427\u0438\u0441\u043b\u043e \u0441\u0442\u0440\u043e\u043a \u043c\u0430\u0442\u0440\u0438\u0446\u044b ({0}) \u043c\u0435\u043d\u044c\u0448\u0435, \u0447\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u0442\u044d\u0433\u0435 'n = ' ({1}) importerDL_error_matriciescount=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e matricies sets ({0}) \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u044d\u0433\u0430 nm ({1}) - importerDL_error_matrixentriescount=\u0427\u0438\u0441\u043b\u043e \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u0441\u0442\u0440\u043e\u043a {0} \u043c\u0430\u0442\u0440\u0438\u0446\u044b {1} \u0431\u043e\u043b\u044c\u0448\u0435, \u0447\u0435\u043c \u043e\u0436\u0438\u0434\u0430\u0435\u043c\u043e\u0435 (\u0441\u0442\u0440\u043e\u043a\u0430 {2} \u0432 DL-\u0444\u0430\u0439\u043b\u0435) - importerDL_error_weightparseerror=\u041d\u0435 \u0443\u0434\u0430\u0451\u0442\u0441\u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u0435\u0441 "{0}" \u0432 \u043c\u0430\u0442\u0440\u0438\u0446\u0435 {1} \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 {2} - importerDL_error_edgelistssetscount=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e edgelist sets ({0}) \u043e\u0442\u043b\u0438\u0447\u0430\u0435\u0442\u0441\u044f \u043e\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0442\u044d\u0433\u0430 nm ({1}) - importerDL_error_edgelistrowparse=\u041d\u0435 \u0443\u0434\u0430\u0451\u0442\u0441\u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c id "{0}" \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0440\u0435\u0431\u0435\u0440 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 {1} - importerDL_error_edgeparseweight=\u041d\u0435 \u0443\u0434\u0430\u0451\u0442\u0441\u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u0435\u0441 "{0}" \u0432 \u0441\u043f\u0438\u0441\u043a\u0435 \u0440\u0435\u0431\u0435\u0440 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 {1} - importerDOT_error_nothingfound=\u041d\u0435 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 'graph' \u0438\u043b\u0438 'digraph' - importerDOT_error_labelunreachable=\u041d\u0435 \u0443\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u043c\u0435\u0442\u043a\u0443 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 "{0}" - importerDOT_error_colorunreachable=\u041d\u0435 \u0443\u0434\u0430\u0451\u0442\u0441\u044f \u043d\u0430\u0439\u0442\u0438 \u0446\u0432\u0435\u0442 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 "{0}" - -importerDOT_error_edgeparsing=\u041d\u0435 \u0443\u0434\u0430\u0451\u0442\u0441\u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0440\u0435\u0431\u0440\u043e \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 "{0}" - -importerDOT_error_posunreachable=\u041d\u0435 \u0443\u0434\u0430\u0451\u0442\u0441\u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0443\u0437\u043b\u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 "{0}". \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 pos\="x, y". - +importerDOT_error_posunreachable=\u041d\u0435 \u0443\u0434\u0430\u0451\u0442\u0441\u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u043f\u043e\u0437\u0438\u0446\u0438\u044e \u0443\u0437\u043b\u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 "{0}". \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u0444\u043e\u0440\u043c\u0430\u0442 pos="x, y". importerDOT_error_weightunreachable=\u041d\u0435 \u0443\u0434\u0430\u0451\u0442\u0441\u044f \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c \u0432\u0435\u0441 \u0440\u0435\u0431\u0440\u0430 \u0432 \u0441\u0442\u0440\u043e\u043a\u0435 "{0}" -importerDOT_log_nodeattribute=\u041d\u0430\u0439\u0434\u0435\u043d \u0430\u0442\u0440\u0438\u0431\u0443\u0442 \u0443\u0437\u043b\u0430 "{0}" ({1}) +# importerTGF_error_emptynodes = No nodes found + diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_th.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_tr.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_tr.properties new file mode 100644 index 0000000000..5e7fef6ac8 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_tr.properties @@ -0,0 +1,136 @@ +fileType_GDF_Name=GDF Dosyalar\u0131 (GUESS) +fileType_GEXF_Name=GEXF Dosyalar\u0131 +fileType_NET_Name=NET Dosyalar\u0131 (Pajek) +fileType_GraphML_Name=GraphML Dosyalar\u0131 +fileType_GML_Name=GML Dosyalar\u0131 +fileType_TLP_Name=TLP Dosyalar\u0131 +fileType_TGF_Name=TGF Dosyalar\u0131 +fileType_Edges_Name=Ba\u011flant\u0131 Listesi +fileType_GraphViz_Name=GraphML Dosyalar\u0131 +fileType_DL_Name=DL Dosyalar\u0131 (UCINET) +fileType_VNA_Name=VNA Dosyalar\u0131 +importerGDF_error_dataformat1=Dosya "nodedef> name" sat\u0131r\u0131 ile ba\u015flamal\u0131dr. +importerGDF_error_dataformat2=Sόtun dόzenlemesinde hata. Her sόtunun bir ismi olmal\u0131d\u0131r. Sόtun isimleri virgόl iηermemelidir. +importerGDF_error_dataformat3=''{1}'' dό\u011fόmό iηin ''{0}'' dό\u011fόmόnden kopyalama da hata. ''{2}'' de\u011ferinde hata. +importerGDF_error_dataformat4=Failed to set the ''{0}'' attribute ''{1}'' for {2}. +importerGDF_error_dataformat5=The data type ''{0}'' is not recognized, string is used instead. +importerGDF_error_dataformat6=Column type is not found for ''{0}'', string is used instead. +importerGDF_error_dataformat7=Line ''{0}'' has more columns than defined in header. Please verify the number of commas. +importerGDF_error_dataformat8=The node column ''{0}'' can't be added because it already exists +importerGDF_error_dataformat9=The edge column ''{0}'' can't be added because it already exists +importerTPL_error_dataformat1=Bad edge formatting at line {0}. +importerNET_error_dataformat1=The file must start with the "*vertices" line. +importerNET_error_dataformat2=Blank line detected at line {0} +importerNET_error_dataformat3=Unbalanced (or too many) quote marks at line {0} +importerNET_error_dataformat4=Vertex number ''{0}'' not in the range [1,{1}] +importerNET_error_dataformat5=Vertex coordinates conversion problem at line {0}. Must be float number. +importerNET_error_dataformat6=Vertex size conversion problem at line {0}. Must be float number. +importerNET_error_dataformat7=Edge weight parsing issue at line {0}. Must be a double number. +importerGraphML_error_syntax1=Syntax error, the file must start with the markup. +importerGraphML_error_syntax2=Syntax error, node ''{0}'' must be nested in a markup. +importerGraphML_error_attributeclass=Attribute class not found or unknown for attribute ''{0}''. The attribute is ignored. +importerGraphML_error_attributefor=Attribute ''for'' not found or unknown for attribute ''{0}''. The attribute is ignored. +importerGraphML_error_attributetype1=Attribute type not found for attribute ''{0}''. Set to default string. +importerGraphML_error_attributetype2=Attribute type for ''{0}'' is not recognized. The attribute is ignored. +importerGraphML_error_attributedefault=Attribute ''{0}'' default value cannot be cast to the ''{1}'' type. +importerGraphML_error_attributecolumn_exist=Attribute with id ''{0}'' already exists, the attribute is ignored +importerGraphML_error_attributeempty=Attribute parse error, id is missing. +importerGraphML_log_nodeproperty=Node property found: {0} +importerGraphML_log_edgeproperty=Edge property found: {0} +importerGraphML_log_nodeattribute=Node attribute found ''{0}'' ({1}) +importerGraphML_log_edgeattribute=Edge attribute found ''{0}'' ({1}) +importerGraphML_log_default=Default attribute value found: ''{0}'' ({1}) +importerGraphML_error_datakey=Data key is missing for element id={0} +importerGraphML_error_datavalue=Data value {0} type error for element id={1}. The value cannot be set as ''{2}'' attribute. +importerGraphML_error_nodeid=Node id is missing. The node is ignored. +importerGraphML_error_defaultedgetype=Default edge type ''{0}'' is not recognized. Set to default ''mixed''. +importerGraphML_error_edgetype=Type ''{0}'' of the edge ''{1}'' is not recognized. Set to default value. +importerGML_error_nodeidmissing=Node id is missing +importerGML_error_directedgraphparse=Unexpected value for graph 'directed' property +importerGML_error_directedparse=Unexpected value for 'directed' property for edge ''{0}'' +importerGML_error_badparsing=Invalid GML parsing +importerTPL_error_badparsing=Invalid TPL parsing +importerGEXF_error_attributeclass=Attribute ''class'' not found or unknown for attribute ''{0}''. The attribute is ignored. +importerGEXF_error_attributeempty=Attribute parse error, id or type is missing. +importerGEXF_error_attributedefault=Attribute ''{0}'' default value cannot be cast to the ''{1}'' type. +importerGEXF_error_attributeoptions=Attribute ''{0}'' option values cannot be cast to the ''{1}'' type. +importerGEXF_error_attributecolumn_exist=Attribute with id ''{0}'' already exists, the attribute is ignored +importerGEXF_error_attributetype1=Attribute type not found for attribute ''{0}''. Set to default string. +importerGEXF_error_attributetype2=Attribute type for ''{0}'' is not recognized. The attribute is ignored. +importerGEXF_error_datakey=Data key (attribute ''for'') is missing for element id={0} +importerGEXF_error_datakey1=Data key (attribute ''id'') is missing for element id={0} +importerGEXF_error_dataoptionsvalue=Data value ''{0}'' is not an option for element id={1}. The value cannot be set as ''{2}'' attribute. +importerGEXF_error_datavalue=Data value ''{0}'' type error for element {1}. The value cannot be set as ''{2}'' attribute. +importerGEXF_error_idtype_error=The id type ''{0}'' is not recognized, use 'integer', 'long' or 'string' +importerGEXF_error_defaultedgetype=Default edge type ''{0}'' is not recognized. Set to default ''mixed''. +importerGEXF_error_edgedouble=Edge type ''double'' is currently not supported. Set to default ''mixed''. +importerGEXF_error_edgetype=Type ''{0}'' of the edge ''{1}'' is not recognized. Set to default value. +importerGEXF_error_edgeid=Edge id is missing. An id has been generated. +importerGEXF_error_edgesource=Edge source is missing. The edge is ignored. +importerGEXF_error_edgetarget=Edge target is missing. The edge is ignored. +importerGEXF_error_edgeweight=Edge weight of id ''{0}'' is not a float. Weight is ignored. +importerGEXF_error_nodeid=Node id is missing. The node is ignored. +importerGEXF_error_nodeposition=Node ''{0}'' has a wrong position on ''{1}'' (not a float). +importerGEXF_error_nodesize=Node ''{0}'' has a wrong size (not a float). +importerGEXF_error_notnode=Element ''{0}'' is not a node. The element is ignored. +importerGEXF_error_parsingdatetype=Date type ''{0}'' is not recognized. Set to default ''date''. +importerGEXF_error_parsingmode=Parsing mode ''{0}'' is not recognized. Set to default ''static''. +importerGEXF_error_node_timeinterval_parseerror=The time interval for node ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edge_timeinterval_parseerror=The time interval for edge ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_node_timeintervals_parseerror=The time intervals for node ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edge_timeintervals_parseerror=The time intervals for edge ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_nodeattribute_timeinterval_parseerror=The time interval for node ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edgeattribute_timeinterval_parseerror=The time interval for edge ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_node_timestamp_parseerror=The timestamp for node ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edge_timestamp_parseerror=The timestamp for edge ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_node_timestamps_parseerror=The timestamps for node ''{0}'' could not be parsed. +importerGEXF_error_edge_timestamps_parseerror=The timestamps for edge ''{0}'' could not be parsed. +importerGEXF_error_nodeattribute_timestamp_parseerror=The timestamp for node ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edgeattribute_timestamp_parseerror=The timestamp for edge ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_nodeattribute_timeset_parseerror=The timestamps or intervals for node ''{0}'' attribute could not be parsed. +importerGEXF_error_edgeattribute_timeset_parseerror=The timestamps or intervals for edge ''{0}'' attribute could not be parsed. +importerGEXF_error_nodecolorvalue=Node of id ''{1}'' has a wrong color channel ''{2}''=''{0}''. It should be 0 <= ''{2}'' <= 255. +importerGEXF_error_edgecolorvalue=Edge of id ''{1}'' has a wrong color channel ''{2}''=''{0}''. It should be 0 <= ''{2}'' <= 255. +importerGEXF_error_nodeopacityvalue=Node of id ''{1}'' has a wrong opacity a=''{0}''. It should be 0.0 <= a <= 1.0. +importerGEXF_error_edgeopacityvalue=Edge of id ''{1}'' has a wrong opacity a=''{0}''. It should be 0.0 <= a <= 1.0. +importerGEXF_error_node_open_interval=Node of id ''{0}'' uses open intervals, which have been deprecated. +importerGEXF_error_edge_open_interval=Edge of id ''{0}'' uses open intervals, which have been deprecated. +importerGEXF_error_slice_bound_missing=Missing timestamp or interval attribute on +importerGEXF_error_pid=The node of id ''{0}'' defines a parent using a pid. Hierarchical graph support has been deprecated and will be ignored. +importerGEXF_error_timezone_parseerror=The time zone ''{0}'' couldn't be recognized +importerGEXF_error_timerepresentation_intervalerror=The time representation is set as 'timestamp' so intervals can't be used. Set the time representation to 'interval' in . +importerGEXF_error_timerepresentation_timestamperror=The time representation is set as 'interval' so timestamps can't be used. Set the time representation to 'timestamp' in . +importerGEXF_log_edgeeproperty=Edge property found: {0} +importerGEXF_log_nodeproperty=Node property found: {0} +importerGEXF_log_edgeattribute=Edge attribute found ''{0}'' ({1}) +importerGEXF_log_nodeattribute=Node attribute found ''{0}'' ({1}) +importerGEXF_log_default=Default attribute value found: ''{0}'' ({1}) +importerGEXF_log_options=Attribute Options found: ''{0}'' ({1}) +importerGEXF_log_version10=GEXF version 1.0 (deprecated) +importerGEXF_log_version11=GEXF version 1.1 (deprecated) +importerGEXF_log_version12=GEXF version 1.2 (deprecated) +importerGEXF_log_version13=GEXF version 1.3 +importerGEXF_log_version_undef=Undefined GEXF version. Parser 1.3 is used. +importerGEXF_log_dynamic_weight=Dynamic weight column found +importerDL_error_firstline=First line of DL file must begin with 'DL' +importerDL_error_unknowntag=Header unknown tag ''{0}'' +importerDL_error_formatmissing=DL 'format' tag is missing, 'fullmatrix' is used by default +importerDL_error_badformat=Format ''{0}'' is not supported, provide 'format=edgelist1' or 'format=fullmatrix' format only +importerDL_error_nmissing=Header of DL file must contain tag 'n = ' +importerDL_error_mmissing=Header of DL file must contain tag 'm = ' +importerDL_error_labelscount=Number of labels ({0}) is different from n tag ({1}) +importerDL_error_nodata=No data line was found +importerDL_error_matrixrowscount=Number of matrix rows ({0}) is greater than n tag ({1}) +importerDL_error_matrixrowscount2=Number of matrix rows ({0}) is less than n tag ({1}) +importerDL_error_matriciescount=Number of matricies sets ({0}) is different from nm tag ({1}) +importerDL_error_matrixentriescount=Number of matrix entries on row {0} of matrix {1} has more than allowed entries (line {2} of DL file) +importerDL_error_weightparseerror=Unable to parse weight ''{0}'' on matrix {1} on line {2} +importerDL_error_edgelistssetscount=Number of edgelist sets ({0}) is different from nm tag ({1}) +importerDL_error_edgelistrowparse=Unable to parse from id ''{0}'' on edgelist line {1} +importerDL_error_edgeparseweight=Unable to parse weight ''{0}'' on edgelist line {1} +importerDOT_error_nothingfound=No 'graph' or 'digraph' was found +importerDOT_error_labelunreachable=Unable to find label at line {0} +importerDOT_error_colorunreachable=Unable to find color at line {0} +importerDOT_error_posunreachable=Unable to parse position of node at line {0}. Must be pos="x, y". +importerDOT_error_weightunreachable=Unable to parse edge's weight at line {0} +importerTGF_error_emptynodes=No nodes found diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_zh_CN.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_zh_CN.properties index 781b6fd58a..8358592b76 100644 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_zh_CN.properties +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_zh_CN.properties @@ -1,247 +1,137 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:27+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -fileType_GDF_Name=GDF\u6587\u4ef6\uff08\u731c\uff09 - -fileType_GEXF_Name=GEXF\u6587\u4ef6 - -fileType_NET_Name=NET\u6587\u4ef6\uff08Pajek\uff09 - -fileType_GraphML_Name=GraphML\u6587\u4ef6 - -fileType_GML_Name=GML\u6587\u4ef6 - -fileType_TLP_Name=TLP\u6587\u4ef6 - -fileType_CSV_Name=CSV\u6587\u4ef6 - -fileType_Edges_Name=\u8fb9\u540d\u5355 - -fileType_GraphViz_Name=Graphviz\u6587\u4ef6 - -fileType_DL_Name=DL\u6587\u4ef6\uff08UCINET\uff09 - -fileType_VNA_Name=VNA\u6587\u4ef6 - -importerGDF_error_dataformat1=\u8be5\u6587\u4ef6\u5fc5\u987b\u4ee5\u201cnodedef>\u540d\u79f0\u201d\u884c\u542f\u52a8\u3002 - +fileType_GDF_Name=GDF \u6587\u4EF6 (GUESS) +fileType_GEXF_Name=GEXF \u6587\u4EF6 +fileType_NET_Name=NET \u6587\u4EF6 (Pajek) +fileType_GraphML_Name=GraphML \u6587\u4EF6 +fileType_GML_Name=GML \u6587\u4EF6 +fileType_TLP_Name=TLP \u6587\u4EF6 +fileType_TGF_Name=TGF \u6587\u4ef6 +fileType_Edges_Name=\u8FB9\u5217\u8868 +fileType_GraphViz_Name=GraphViz \u6587\u4EF6 +fileType_DL_Name=DL \u6587\u4EF6 (UCINET) +fileType_VNA_Name=VNA \u6587\u4EF6 +importerGDF_error_dataformat1=\u8BE5\u6587\u4EF6\u5FC5\u987B\u4EE5"nodedef> name"\u884C\u5F00\u59CB\u3002 importerGDF_error_dataformat2=\u9519\u8bef\u7684\u5217\u7684\u683c\u5f0f\u3002\u6bcf\u4e00\u5217\u5fc5\u987b\u5305\u542b\u81f3\u5c11\u4e00\u4e2a\u540d\u79f0\u3002\u5217\u540d\u5fc5\u987b\u4e0d\u5305\u542b\u4efb\u4f55coma\u3002 - importerGDF_error_dataformat3=\u65e0\u6cd5\u5bfc\u5165\u201c{0}\u201d\u8282\u70b9\u7684\u201c{1}\u201d\u5217\u3002 \u6570\u503c\u201c{2}\u201d\u62a5\u9519\u3002 - importerGDF_error_dataformat4=\u65e0\u6cd5\u8bbe\u7f6e\u7684\u201c{0}\u201d\u5c5e\u6027\u201c{1}\u201d{2}\u3002 - importerGDF_error_dataformat5=\u6570\u636e\u7c7b\u578b\u201c{0}\u201d\u4e0d\u88ab\u8fa8\u8bc6\uff0c\u7528\u5b57\u7b26\u4e32\u6765\u4ee3\u66ff\u3002 - importerGDF_error_dataformat6=\u6ca1\u6709\u627e\u5230\u201c{0}\u201d\u5217\u7c7b\u578b\uff0c\u7528\u5b57\u7b26\u4e32\u6765\u4ee3\u66ff\u3002 - importerGDF_error_dataformat7=\u7ebf\u201c{0}\u201d\u5df2\u8d85\u8fc7\u5728\u5934\u6587\u4ef6\u4e2d\u5b9a\u4e49\u7684\u5217\u3002\u8bf7\u9a8c\u8bc1\u9017\u53f7\u7684\u6570\u91cf\u3002 - importerGDF_error_dataformat8=\u8282\u70b9\u5217\u201c{0}\u201d\u4e0d\u80fd\u88ab\u6dfb\u52a0\uff0c\u56e0\u4e3a\u5b83\u5df2\u7ecf\u5b58\u5728 - importerGDF_error_dataformat9=\u8fb9\u5217\u201c{0}\u201d\u4e0d\u80fd\u88ab\u6dfb\u52a0\uff0c\u56e0\u4e3a\u5b83\u5df2\u7ecf\u5b58\u5728 - -importerTPL_error_dataformat1={0}\u884c\u7684\u574f\u8fb9\u683c\u5f0f\u3002 - +importerTPL_error_dataformat1={0}\u884C\u7684\u8FB9\u683C\u5F0F\u6709\u9519\u8BEF\u3002 importerNET_error_dataformat1=\u8be5\u6587\u4ef6\u5fc5\u987b\u4ece\u201c*\u9876\u70b9\u201d\u884c\u5f00\u59cb\u3002 - importerNET_error_dataformat2=\u884c\u68c0\u6d4b\u7684\u7a7a\u767d\u884c{0} - importerNET_error_dataformat3={0}\u884c\u4e2d\u4e0d\u5e73\u8861\u7684\uff08\u6216\u592a\u591a\uff09\u884c\u5f15\u53f7 - -importerNET_error_dataformat4=\u201c\u9876\u70b9\u53f7\u201d{0}\u201c\u4e0d\u5728\u8303\u56f4[1\uff0c{1}]\u5185 - -importerNET_error_dataformat5={0}\u884c\u7684\u9876\u70b9\u5750\u6807\u8f6c\u6362\u95ee\u9898\u3002\u5fc5\u987b\u662f\u6d6e\u70b9\u6570\u3002 - -importerNET_error_dataformat6={0}\u884c\u7684\u9876\u70b9\u5927\u5c0f\u7684\u8f6c\u6362\u95ee\u9898\u3002\u5fc5\u987b\u662f\u6d6e\u70b9\u6570\u3002 - -importerNET_error_dataformat7=\u8fb9\u7684\u6743\u91cd{0}\u884c\u7684\u89e3\u6790\u95ee\u9898\u3002\u5fc5\u987b\u662f\u4e00\u4e2a\u6d6e\u70b9\u6570\u3002 - -importerGraphML_error_syntax1=\u8bed\u6cd5\u9519\u8bef\uff0c\u8be5\u6587\u4ef6\u5fc5\u987b\u5148\u4ece\u6807\u8bb0\u3002 - -importerGraphML_error_syntax2=\u8bed\u6cd5\u9519\u8bef\uff0c\u8282\u70b9\u201c{0}\u201d\u5fc5\u987b\u5d4c\u5957\u5728\u6807\u8bb0\u3002 - +importerNET_error_dataformat4=\u9876\u70B9\u7F16\u53F7''{0}''\u4E0D\u5728\u8303\u56F4[1,{1}]\u5185 +importerNET_error_dataformat5=\u7B2C{0}\u884C\u7684\u9876\u70B9\u5750\u6807\u8F6C\u6362\u6709\u95EE\u9898\u3002\u5FC5\u987B\u662F\u6D6E\u70B9\u6570\u3002 +importerNET_error_dataformat6=\u7B2C{0}\u884C\u7684\u9876\u70B9\u5927\u5C0F\u8F6C\u6362\u6709\u95EE\u9898\u3002\u5FC5\u987B\u662F\u6D6E\u70B9\u6570\u3002 +importerNET_error_dataformat7=\u7B2C{0}\u884C\u7684\u8FB9\u6743\u91CD\u89E3\u6790\u6709\u95EE\u9898\u3002\u5FC5\u987B\u662F\u4E00\u4E2A\u53CC\u7CBE\u5EA6\u6D6E\u70B9\u6570\u3002 +importerGraphML_error_syntax1=\u8BED\u6CD5\u9519\u8BEF\uFF0C\u8BE5\u6587\u4EF6\u5FC5\u987B\u4EE5\u6807\u8BB0\u5F00\u59CB\u3002 +importerGraphML_error_syntax2=\u8BED\u6CD5\u9519\u8BEF\uFF0C\u8282\u70B9\u201C{0}\u201D\u5FC5\u987B\u5D4C\u5957\u5728\u6807\u8BB0\u5185\u3002 importerGraphML_error_attributeclass=\u5c5e\u6027\u7c7b\u627e\u4e0d\u5230\u6216\u672a\u77e5\u7684\u5c5e\u6027\u201c{0} ''\u3002\u8be5\u5c5e\u6027\u88ab\u5ffd\u7565\u3002 - importerGraphML_error_attributefor=\u5c5e\u6027\u201c\u4e3a\u201d\u6ca1\u6709\u53d1\u73b0\u6216\u5c5e\u6027\u672a\u77e5\u201c{0}\u201d\u3002\u8be5\u5c5e\u6027\u88ab\u5ffd\u7565\u3002 - importerGraphML_error_attributetype1=\u5c5e\u6027\u7c7b\u578b\u6ca1\u6709\u627e\u5230\u5c5e\u6027\u201c{0}\u201d\u3002\u8bbe\u7f6e\u4e3a\u9ed8\u8ba4\u5b57\u7b26\u4e32\u3002 - importerGraphML_error_attributetype2=\u201c{0}\u201d\u7684\u5c5e\u6027\u7c7b\u578b\u4e0d\u88ab\u8fa8\u8bc6\u3002\u8be5\u5c5e\u6027\u88ab\u5ffd\u7565\u3002 - importerGraphML_error_attributedefault=\u5c5e\u6027\u201c{0}\u201d\u7684\u9ed8\u8ba4\u503c\u4e0d\u80fd\u88ab\u8f6c\u6362\u4e3a\u201c{1}\u201d\u7684\u7c7b\u578b\u3002 - importerGraphML_error_attributecolumn_exist=\u5c5e\u6027\u4e0eID\u201c{0}\u201d\u5df2\u5b58\u5728\uff0c\u5c5e\u6027\u88ab\u5ffd\u7565 - -importerGraphML_error_attributeempty=\u5c5e\u6027\u89e3\u6790\u9519\u8bef\uff0c\u8eab\u4efd\u8bc1\u4e22\u5931\u3002 - +importerGraphML_error_attributeempty=\u5C5E\u6027\u89E3\u6790\u9519\u8BEF\uFF0Cid\u6807\u8BC6\u7B26\u7F3A\u5931\u3002 importerGraphML_log_nodeproperty=\u8282\u70b9\u7684\u5c5e\u6027\uff1a{0} - importerGraphML_log_edgeproperty=\u8fb9\u5c5e\u6027\uff1a{0} - importerGraphML_log_nodeattribute=\u8282\u70b9\u7684\u5c5e\u6027\u53d1\u73b0'' {0}\uff08{1}\uff09 - importerGraphML_log_edgeattribute=\u8fb9\u5c5e\u6027\u53d1\u73b0'' {0}\uff08{1}\uff09 - importerGraphML_log_default=\u9ed8\u8ba4\u5c5e\u6027\u503c\u53d1\u73b0\uff1a'' {0}\uff08{1}\uff09 - -importerGraphML_error_datakey=\u6570\u636e\u7684\u5173\u952e\u662f\u7f3a\u5c11\u7684\u5143\u7d20\u7684id \= {0} - -importerGraphML_error_datavalue=\u6570\u636e\u503c{0}\u7c7b\u578b\u5143\u7d20\u7684ID \= {1}\u9519\u8bef\u3002\u8be5\u503c\u4e0d\u80fd\u88ab\u8bbe\u7f6e\u4e3a\u201c{2}\u201d\u7684\u5c5e\u6027\u3002 - +importerGraphML_error_datakey=\u6570\u636e\u7684\u5173\u952e\u662f\u7f3a\u5c11\u7684\u5143\u7d20\u7684id = {0} +importerGraphML_error_datavalue=\u6570\u636e\u503c{0}\u7c7b\u578b\u5143\u7d20\u7684ID = {1}\u9519\u8bef\u3002\u8be5\u503c\u4e0d\u80fd\u88ab\u8bbe\u7f6e\u4e3a\u201c{2}\u201d\u7684\u5c5e\u6027\u3002 importerGraphML_error_nodeid=\u8282\u70b9ID\u662f\u5931\u8e2a\u3002\u8be5\u8282\u70b9\u88ab\u5ffd\u7565\u3002 - importerGraphML_error_defaultedgetype=\u9ed8\u8ba4\u7684\u8fb9\u7684\u7c7b\u578b\u201c{0}\u201d\u662f\u4e0d\u627f\u8ba4\u3002\u8bbe\u7f6e\u4e3a\u9ed8\u8ba4\u7684\u201c\u6df7\u5408\u201d\u3002 - importerGraphML_error_edgetype=\u8fb9\u201c{1}\u201d\u7684\u7c7b\u578b\u201c{0}\u201d\u4e0d\u88ab\u8fa8\u8bc6\u3002\u8bbe\u7f6e\u4e3a\u9ed8\u8ba4\u503c\u3002 - importerGML_error_nodeidmissing=\u8282\u70b9ID\u662f\u4e22\u5931\u7684 - importerGML_error_directedgraphparse=\u56fe\u201c\u5b9a\u5411\u201d\u5c5e\u6027\u4e2d\u51fa\u4e4e\u610f\u6599\u7684\u6570\u503c - importerGML_error_directedparse=\u201c{0} ''\u8fb9\u201c\u5b9a\u5411\u201d\u5c5e\u6027\u4e2d\u51fa\u4e4e\u610f\u6599\u7684\u6570\u503c - importerGML_error_badparsing=\u65e0\u6548\u7684GML\u89e3\u6790 - importerTPL_error_badparsing=\u65e0\u6548\u7684TPL\u89e3\u6790 - importerGEXF_error_attributeclass=\u5c5e\u6027\u201c\u7c7b\u201d\u672a\u627e\u5230\u6216\u672a\u77e5\u7684\u5c5e\u6027\u201c{0} ''\u3002\u8be5\u5c5e\u6027\u88ab\u5ffd\u7565\u3002 - importerGEXF_error_attributeempty=\u7f3a\u5c11\u5c5e\u6027\u89e3\u6790\u9519\u8bef\uff0cID\u6216\u7c7b\u578b\u7f3a\u5931\u3002 - importerGEXF_error_attributedefault=\u5c5e\u6027\u201c{0}\u201d\u7684\u9ed8\u8ba4\u503c\u4e0d\u80fd\u88ab\u8f6c\u6362\u4e3a\u201c{1}\u201d\u7684\u7c7b\u578b\u3002 - importerGEXF_error_attributeoptions=\u5c5e\u6027\u201c{0}\u201d\u9009\u9879\u503c\u4e0d\u80fd\u88ab\u8f6c\u6362\u4e3a\u201c{1}\u201d\u7684\u7c7b\u578b\u3002 - importerGEXF_error_attributecolumn_exist=\u5c5e\u6027\u4e0eID\u201c{0}\u201d\u5df2\u5b58\u5728\uff0c\u5c5e\u6027\u88ab\u5ffd\u7565 - importerGEXF_error_attributetype1=\u5c5e\u6027\u7c7b\u578b\u6ca1\u6709\u627e\u5230\u5c5e\u6027\u201c{0}\u201d\u3002\u8bbe\u7f6e\u4e3a\u9ed8\u8ba4\u5b57\u7b26\u4e32\u3002 - importerGEXF_error_attributetype2=\u201c{0}\u201d\u7684\u5c5e\u6027\u7c7b\u578b\u4e0d\u88ab\u8fa8\u8bc6\u3002\u8be5\u5c5e\u6027\u88ab\u5ffd\u7565\u3002 - -importerGEXF_error_datakey=\u5143\u7d20\u7684id \= {0}\u7f3a\u5c11\u5173\u952e\u6570\u636e\uff08\u5c5e\u6027'\uff09 - -importerGEXF_error_datakey1=\u5143\u7d20\u7684id \= {0}\u7f3a\u5c11\u5173\u952e\u6570\u636e\uff08\u5c5e\u6027'\uff09 - -importerGEXF_error_dataoptionsvalue=\u6570\u636e\u503c\u201c{0}\u201d\u4e0d\u662f\u5143\u7d20\u7684ID \= {1}\u7684\u9009\u9879\u3002\u8be5\u503c\u4e0d\u80fd\u88ab\u8bbe\u7f6e\u4e3a\u201c{2}\u201d\u7684\u5c5e\u6027\u3002 - +importerGEXF_error_datakey=\u5143\u7d20\u7684id = {0}\u7f3a\u5c11\u5173\u952e\u6570\u636e\uff08\u5c5e\u6027'\uff09 +importerGEXF_error_datakey1=\u5143\u7d20\u7684id = {0}\u7f3a\u5c11\u5173\u952e\u6570\u636e\uff08\u5c5e\u6027'\uff09 +importerGEXF_error_dataoptionsvalue=\u6570\u636e\u503c\u201c{0}\u201d\u4e0d\u662f\u5143\u7d20\u7684ID = {1}\u7684\u9009\u9879\u3002\u8be5\u503c\u4e0d\u80fd\u88ab\u8bbe\u7f6e\u4e3a\u201c{2}\u201d\u7684\u5c5e\u6027\u3002 importerGEXF_error_datavalue=\u5143\u7d20{1}\u6570\u636e\u503c\u201c{0}\u201d\u7c7b\u578b\u7684\u9519\u8bef\u3002\u8be5\u503c\u4e0d\u80fd\u88ab\u8bbe\u7f6e\u4e3a\u201c{2}\u201d\u7684\u5c5e\u6027\u3002 - +# importerGEXF_error_idtype_error = The id type ''{0}'' is not recognized, use 'integer', 'long' or 'string' importerGEXF_error_defaultedgetype=\u9ed8\u8ba4\u7684\u8fb9\u7c7b\u578b\u201c{0}\u201d\u4e0d\u80fd\u88ab\u8fa8\u8bc6\u3002\u8bbe\u7f6e\u4e3a\u9ed8\u8ba4\u7684\u201c\u6df7\u5408\u201d\u3002 - importerGEXF_error_edgedouble=\u8fb9\u7c7b\u578b\u201c\u53cc\u7cbe\u5ea6\u578b\u201d\uff0c\u76ee\u524d\u4e0d\u652f\u6301\u3002\u8bbe\u7f6e\u4e3a\u9ed8\u8ba4\u7684\u201c\u6df7\u5408\u201d\u3002 - importerGEXF_error_edgetype=\u8fb9\u201c{1}\u201d\u7684\u7c7b\u578b\u201c{0}\u201d\u4e0d\u80fd\u88ab\u8fa8\u8bc6\u3002\u8bbe\u7f6e\u4e3a\u9ed8\u8ba4\u503c\u3002 - importerGEXF_error_edgeid=\u8fb9ID\u4e22\u5931\u3002\u5df2\u7ecf\u751f\u6210\u4e00\u4e2aID\u3002 - importerGEXF_error_edgesource=\u8fb9\u6e90\u4e22\u5931\u3002\u8fb9\u88ab\u5ffd\u7565\u3002 - importerGEXF_error_edgetarget=\u76ee\u6807\u8fb9\u4e22\u5931\u3002\u8fb9\u88ab\u5ffd\u7565\u3002 - importerGEXF_error_edgeweight=ID\u4e3a\u201c{0}\u201d\u8fb9\u7684\u6743\u91cd\u4e0d\u662f\u6d6e\u70b9\u578b\u7684\u3002\u6743\u91cd\u88ab\u5ffd\u7565\u3002 - importerGEXF_error_nodeid=\u8282\u70b9ID\u662f\u4e22\u5931\u7684\u3002\u8be5\u8282\u70b9\u5c06\u88ab\u5ffd\u7565\u3002 - importerGEXF_error_nodeposition=\u8282\u70b9\u201c{0}\u201d\u6709\u4e00\u4e2a\u9519\u8bef\u7684\u4f4d\u7f6e\u201c{1}\u201d\uff08\u4e0d\u662f\u6d6e\u70b9\u578b\uff09\u3002 - importerGEXF_error_nodesize=\u8282\u70b9\u201c{0} ''\u6709\u4e00\u4e2a\u9519\u8bef\u7684\u5927\u5c0f\uff08\u4e0d\u662f\u6d6e\u70b9\u578b\uff09\u3002 - importerGEXF_error_notnode=\u5143\u7d20\u201c{0}\u201d\u4e0d\u662f\u4e00\u4e2a\u8282\u70b9\u3002\u8be5\u5143\u7d20\u88ab\u5ffd\u7565\u3002 - -importerGEXF_error_pid_notfound=\u627e\u4e0d\u5230\u8282\u70b9\u201c{1}\u201d\u7684\u7236PID\u201c{0}\u201d\u3002 - importerGEXF_error_parsingdatetype=\u65e5\u671f\u7c7b\u578b\u201c{0}\u201d\u662f\u4e0d\u88ab\u8fa8\u8bc6\u7684\u3002\u8bbe\u7f6e\u4e3a\u9ed8\u8ba4\u7684\u201c\u65e5\u671f\u201d\u3002 - importerGEXF_error_parsingmode=\u89e3\u6790\u6a21\u5f0f\u201c{0}\u201d\u662f\u4e0d\u88ab\u8fa8\u8bc6\u7684\u3002\u8bbe\u7f6e\u4e3a\u9ed8\u8ba4\u201c\u9759\u6001\u201d\u3002 - importerGEXF_error_node_timeinterval_parseerror=\u8282\u70b9\u201c{0}\u201d\u7684\u65f6\u95f4\u95f4\u9694\u4e0d\u80fd\u88ab\u89e3\u6790\u3002\u4f7f\u7528xsd\uff1a\u65e5\u671f\uff0cxsd\uff1a\u65e5\u671f\u65f6\u95f4\u6216\u8005\u53cc\u7cbe\u5ea6\u578b\u3002 - importerGEXF_error_edge_timeinterval_parseerror=\u8fb9\u201c{0}\u201d\u7684\u65f6\u95f4\u95f4\u9694\u4e0d\u80fd\u88ab\u89e3\u6790\u3002\u4f7f\u7528csd\uff1a\u65e5\u671f\uff0cxsd\uff1a\u65e5\u671f\u65f6\u95f4\u6216\u8005\u53cc\u7cbe\u5ea6\u578b\u3002 - +# importerGEXF_error_node_timeintervals_parseerror = The time intervals for node ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +# importerGEXF_error_edge_timeintervals_parseerror = The time intervals for edge ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. importerGEXF_error_nodeattribute_timeinterval_parseerror=\u8282\u70b9\u201c{0}\u201d\u5c5e\u6027\u7684\u65f6\u95f4\u95f4\u9694\u4e0d\u80fd\u88ab\u89e3\u6790\u3002\u4f7f\u7528xsd\uff1a\u65e5\u671f\uff0cxsd\uff1a\u65e5\u671f\u65f6\u95f4\u6216\u8005\u53cc\u7cbe\u5ea6\u578b\u3002 - importerGEXF_error_edgeattribute_timeinterval_parseerror=\u8fb9\u201c{0}\u201d\u5c5e\u6027\u7684\u65f6\u95f4\u95f4\u9694\u4e0d\u80fd\u88ab\u89e3\u6790\u3002\u4f7f\u7528xsd\uff1a\u65e5\u671f\uff0cxsd\uff1a\u65e5\u671f\u65f6\u95f4\u6216\u8005\u53cc\u7cbe\u5ea6\u578b\u3002 - -importerGEXF_error_nodecolorvalue=ID\u4e3a\u201c{1}\u201d\u7684\u8282\u70b9\u6709\u4e00\u4e2a\u9519\u8bef\u7684\u989c\u8272\u901a\u9053\u201c{2}''\=''{0}\u201d\u3002\u5b83\u5e94\u4e3a0 <\u201c{2}\u201d<255\u3002 - -importerGEXF_error_edgecolorvalue=ID\u4e3a\u201c{1}\u201d\u7684\u8fb9\u6709\u4e00\u4e2a\u9519\u8bef\u7684\u989c\u8272\u901a\u9053\u201c{2}''\=''{0}\u201d\u3002\u5b83\u5e94\u4e3a0 <\u201c{2}\u201d<255\u3002 - -importerGEXF_error_nodeopacityvalue=ID\u4e3a\u201c{1}\u201d\u7684\u8282\u70b9\u6709\u4e00\u4e2a\u9519\u8bef\u7684\u4e0d\u900f\u660e\u5ea6a\=''{0}\u201d\u3002\u5b83\u5e94\u4e3a0 +# importerGEXF_error_pid = The node of id ''{0}'' defines a parent using a pid. Hierarchical graph support has been deprecated and will be ignored. +importerGEXF_error_timezone_parseerror=\u65f6\u533ae ''{0}'' \u65e0\u6cd5\u8bc6\u522b +# importerGEXF_error_timerepresentation_intervalerror = The time representation is set as 'timestamp' so intervals can't be used. Set the time representation to 'interval' in . +# importerGEXF_error_timerepresentation_timestamperror = The time representation is set as 'interval' so timestamps can't be used. Set the time representation to 'timestamp' in . importerGEXF_log_edgeeproperty=\u8fb9\u5c5e\u6027\uff1a{0} - importerGEXF_log_nodeproperty=\u8282\u70b9\u7684\u5c5e\u6027\uff1a{0} - importerGEXF_log_edgeattribute=\u8fb9\u5c5e\u6027\u53d1\u73b0'' {0}\u201c\uff08{1}\uff09 - importerGEXF_log_nodeattribute=\u8282\u70b9\u7684\u5c5e\u6027\u53d1\u73b0'' {0}\u201d\uff08{1}\uff09 - importerGEXF_log_default=\u9ed8\u8ba4\u5c5e\u6027\u503c\u53d1\u73b0\uff1a'' {0}\u201c\uff08{1}\uff09 - importerGEXF_log_options=\u5c5e\u6027\u9009\u9879\u53d1\u73b0\uff1a'' {0}\u201d\uff08{1}\uff09 - importerGEXF_log_version10=GEXF 1.0\u7248\uff08\u5df2\u8fc7\u65f6\uff09 - importerGEXF_log_version11=GEXF\u7248\u672c1.1 - importerGEXF_log_version12=GEXF \u7248\u672c\u53f7 1.2 - -!importerGEXF_log_version13= - -!importerGEXF_log_version_undef= - +importerGEXF_log_version13=GEXF \u7248\u672C\u53F7 1.3 +importerGEXF_log_version_undef=\u672a\u5b9a\u4e49 GEXF \u7248\u672c\u3002\u5c06\u4f7f\u7528 1.3 \u7248\u89e3\u6790\u5668\u3002 importerGEXF_log_dynamic_weight=\u53d1\u73b0\u52a8\u6001\u6743\u91cd\u5217 - importerDL_error_firstline=DL\u6587\u4ef6\u7684\u7b2c\u4e00\u884c\u5fc5\u987b\u4ee5\u201cDL\u201d\u5f00\u59cb - importerDL_error_unknowntag=\u5934\u672a\u77e5\u6807\u7b7e\u201c{0} '' - importerDL_error_formatmissing=DL\u201c\u683c\u5f0f\u201d\u6807\u7b7e\u4e22\u5931\uff0c\u9ed8\u8ba4\u60c5\u51b5\u4e0b\u4f7f\u7528\u201cfullmatrix\u201d - -importerDL_error_badformat=\u4e0d\u652f\u6301\u683c\u5f0f\u201c{0}\u201d\uff0c\u4ec5\u63d0\u4f9b\u201c\u683c\u5f0f\= edgelist1\u201d\u6216\u201c\u683c\u5f0f\u201d\= fullmatrix\u201c\u683c\u5f0f - -importerDL_error_nmissing=DL\u6587\u4ef6\u5934\u5fc5\u987b\u5305\u542b\u6807\u7b7e\u201cn \= \u201c - -importerDL_error_mmissing=DL\u6587\u4ef6\u5934\u5fc5\u987b\u5305\u542b\u6807\u7b7e\u201cm \= \u201c - +importerDL_error_badformat=\u4e0d\u652f\u6301\u683c\u5f0f\u201c{0}\u201d\uff0c\u4ec5\u63d0\u4f9b\u201c\u683c\u5f0f= edgelist1\u201d\u6216\u201c\u683c\u5f0f\u201d= fullmatrix\u201c\u683c\u5f0f +importerDL_error_nmissing=DL\u6587\u4ef6\u5934\u5fc5\u987b\u5305\u542b\u6807\u7b7e\u201cn = \u201c +importerDL_error_mmissing=DL\u6587\u4ef6\u5934\u5fc5\u987b\u5305\u542b\u6807\u7b7e\u201cm = \u201c importerDL_error_labelscount=\u6807\u8bb0\uff08{0}\uff09\u7684\u6570\u91cf\u4e0d\u540c\u4e8e\u6807\u7b7e\uff08{1}\uff09 - importerDL_error_nodata=\u6ca1\u6709\u53d1\u73b0\u6570\u636e\u7ebf - importerDL_error_matrixrowscount=\u77e9\u9635\u7684\u884c\u6570\uff08{0}\uff09\u6bd4n\u6807\u7b7e\uff08{1}\uff09\u591a - importerDL_error_matrixrowscount2=\u77e9\u9635\u7684\u884c\u6570\uff08{0}\uff09\u662f\u6bd4n\u6807\u7b7e\uff08{1}\uff09\u5c11 - importerDL_error_matriciescount=\u77e9\u9635\u96c6\uff08{0}\uff09\u7684\u6570\u91cf\u662f\u4e0d\u540c\u4e0enm\u6807\u7b7e\uff08{1}\uff09 - importerDL_error_matrixentriescount=\u77e9\u9635{0}\u884c\u8f93\u5165\u7684\u6570\u91cf\u5df2\u8d85\u8fc7\u5141\u8bb8\u503c\uff08DL\u6587\u4ef6\u7684{2}\u884c\uff09 - importerDL_error_weightparseerror=\u65e0\u6cd5\u89e3\u6790\u6743\u91cd\u201c{0}\u201d\u77e9\u9635{1}\u7684{2}\u884c - importerDL_error_edgelistssetscount=\u8fb9\u5217\u8868\u7684\u96c6\u5408\uff08{0}\uff09\u7684\u6570\u91cf\u4e0d\u540c\u4e0enm\u6807\u8bb0\uff08{1}\uff09 - importerDL_error_edgelistrowparse=\u65e0\u6cd5\u89e3\u6790ID\u4e3a\u201c{0}\u201d\u7684\u8fb9\u5217\u8868\u7684\u7b2c{1}\u884c - importerDL_error_edgeparseweight=\u65e0\u6cd5\u89e3\u6790ID\u4e3a\u201c{0}\u201d\u7684\u8fb9\u5217\u8868\u7684\u7b2c{1}\u884c\u7684\u6743\u91cd - importerDOT_error_nothingfound=\u6ca1\u6709\u627e\u5230\u201c\u56fe\u201d\u6216\u201c\u6709\u5411\u56fe\u201d - importerDOT_error_labelunreachable=\u65e0\u6cd5\u627e\u5230{0}\u884c\u7684\u6807\u7b7e - importerDOT_error_colorunreachable=\u65e0\u6cd5\u627e\u5230{0}\u884c\u7684\u989c\u8272 - -importerDOT_error_edgeparsing=\u65e0\u6cd5\u89e3\u6790{0}\u884c\u7684\u8fb9 - -importerDOT_error_posunreachable=\u5728{0}\u884c\u65e0\u6cd5\u89e3\u6790\u8282\u70b9\u7684\u4f4d\u7f6e\u3002\u5fc5\u987b\u662fpos \=\u201cx,y\u201d\u3002 - +importerDOT_error_posunreachable=\u5728{0}\u884c\u65e0\u6cd5\u89e3\u6790\u8282\u70b9\u7684\u4f4d\u7f6e\u3002\u5fc5\u987b\u662fpos =\u201cx,y\u201d\u3002 importerDOT_error_weightunreachable=\u5728{0}\u884c\u65e0\u6cd5\u89e3\u6790\u8fb9\u7684\u6743\u91cd - -importerDOT_log_nodeattribute=\u8282\u70b9\u7684\u5c5e\u6027\u53d1\u73b0'' {0}\u201c\uff08{1}\uff09 +importerTGF_error_emptynodes=\u6ca1\u6709\u627e\u5230\u8282\u70b9 +importerGraphML_error_graphattributes=Gephi\u4E0D\u652F\u6301\u7684\u56FE\u5C5E\u6027''{0}''\u5DF2\u88AB\u5FFD\u7565 diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_zh_TW.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_zh_TW.properties new file mode 100644 index 0000000000..a866aedfaa --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/Bundle_zh_TW.properties @@ -0,0 +1,136 @@ +fileType_GDF_Name=GDF Files (GUESS) +fileType_GEXF_Name=GEXF Files +fileType_NET_Name=NET Files (Pajek) +fileType_GraphML_Name=GraphML Files +fileType_GML_Name=GML Files +fileType_TLP_Name=TLP Files +fileType_TGF_Name=TGF Files +fileType_Edges_Name=Edge List +fileType_GraphViz_Name=GraphViz Files +fileType_DL_Name=DL Files (UCINET) +fileType_VNA_Name=VNA Files +importerGDF_error_dataformat1=The file must start with the "nodedef> name" line. +importerGDF_error_dataformat2=Bad column formatting. Each column must contains at least a name. Column names must not contains any coma. +importerGDF_error_dataformat3=Failed to import the column ''{0}'' for node ''{1}''. Error at value ''{2}''. +importerGDF_error_dataformat4=Failed to set the ''{0}'' attribute ''{1}'' for {2}. +importerGDF_error_dataformat5=The data type ''{0}'' is not recognized, string is used instead. +importerGDF_error_dataformat6=Column type is not found for ''{0}'', string is used instead. +importerGDF_error_dataformat7=Line ''{0}'' has more columns than defined in header. Please verify the number of commas. +importerGDF_error_dataformat8=The node column ''{0}'' can't be added because it already exists +importerGDF_error_dataformat9=The edge column ''{0}'' can't be added because it already exists +importerTPL_error_dataformat1=Bad edge formatting at line {0}. +importerNET_error_dataformat1=The file must start with the "*vertices" line. +importerNET_error_dataformat2=Blank line detected at line {0} +importerNET_error_dataformat3=Unbalanced (or too many) quote marks at line {0} +importerNET_error_dataformat4=Vertex number ''{0}'' not in the range [1,{1}] +importerNET_error_dataformat5=Vertex coordinates conversion problem at line {0}. Must be float number. +importerNET_error_dataformat6=Vertex size conversion problem at line {0}. Must be float number. +importerNET_error_dataformat7=Edge weight parsing issue at line {0}. Must be a double number. +importerGraphML_error_syntax1=Syntax error, the file must start with the markup. +importerGraphML_error_syntax2=Syntax error, node ''{0}'' must be nested in a markup. +importerGraphML_error_attributeclass=Attribute class not found or unknown for attribute ''{0}''. The attribute is ignored. +importerGraphML_error_attributefor=Attribute ''for'' not found or unknown for attribute ''{0}''. The attribute is ignored. +importerGraphML_error_attributetype1=Attribute type not found for attribute ''{0}''. Set to default string. +importerGraphML_error_attributetype2=Attribute type for ''{0}'' is not recognized. The attribute is ignored. +importerGraphML_error_attributedefault=Attribute ''{0}'' default value cannot be cast to the ''{1}'' type. +importerGraphML_error_attributecolumn_exist=Attribute with id ''{0}'' already exists, the attribute is ignored +importerGraphML_error_attributeempty=Attribute parse error, id is missing. +importerGraphML_log_nodeproperty=Node property found: {0} +importerGraphML_log_edgeproperty=Edge property found: {0} +importerGraphML_log_nodeattribute=Node attribute found ''{0}'' ({1}) +importerGraphML_log_edgeattribute=Edge attribute found ''{0}'' ({1}) +importerGraphML_log_default=Default attribute value found: ''{0}'' ({1}) +importerGraphML_error_datakey=Data key is missing for element id={0} +importerGraphML_error_datavalue=Data value {0} type error for element id={1}. The value cannot be set as ''{2}'' attribute. +importerGraphML_error_nodeid=Node id is missing. The node is ignored. +importerGraphML_error_defaultedgetype=Default edge type ''{0}'' is not recognized. Set to default ''mixed''. +importerGraphML_error_edgetype=Type ''{0}'' of the edge ''{1}'' is not recognized. Set to default value. +importerGML_error_nodeidmissing=Node id is missing +importerGML_error_directedgraphparse=Unexpected value for graph 'directed' property +importerGML_error_directedparse=Unexpected value for 'directed' property for edge ''{0}'' +importerGML_error_badparsing=Invalid GML parsing +importerTPL_error_badparsing=Invalid TPL parsing +importerGEXF_error_attributeclass=Attribute ''class'' not found or unknown for attribute ''{0}''. The attribute is ignored. +importerGEXF_error_attributeempty=Attribute parse error, id or type is missing. +importerGEXF_error_attributedefault=Attribute ''{0}'' default value cannot be cast to the ''{1}'' type. +importerGEXF_error_attributeoptions=Attribute ''{0}'' option values cannot be cast to the ''{1}'' type. +importerGEXF_error_attributecolumn_exist=Attribute with id ''{0}'' already exists, the attribute is ignored +importerGEXF_error_attributetype1=Attribute type not found for attribute ''{0}''. Set to default string. +importerGEXF_error_attributetype2=Attribute type for ''{0}'' is not recognized. The attribute is ignored. +importerGEXF_error_datakey=Data key (attribute ''for'') is missing for element id={0} +importerGEXF_error_datakey1=Data key (attribute ''id'') is missing for element id={0} +importerGEXF_error_dataoptionsvalue=Data value ''{0}'' is not an option for element id={1}. The value cannot be set as ''{2}'' attribute. +importerGEXF_error_datavalue=Data value ''{0}'' type error for element {1}. The value cannot be set as ''{2}'' attribute. +importerGEXF_error_idtype_error=The id type ''{0}'' is not recognized, use 'integer', 'long' or 'string' +importerGEXF_error_defaultedgetype=Default edge type ''{0}'' is not recognized. Set to default ''mixed''. +importerGEXF_error_edgedouble=Edge type ''double'' is currently not supported. Set to default ''mixed''. +importerGEXF_error_edgetype=Type ''{0}'' of the edge ''{1}'' is not recognized. Set to default value. +importerGEXF_error_edgeid=Edge id is missing. An id has been generated. +importerGEXF_error_edgesource=Edge source is missing. The edge is ignored. +importerGEXF_error_edgetarget=Edge target is missing. The edge is ignored. +importerGEXF_error_edgeweight=Edge weight of id ''{0}'' is not a float. Weight is ignored. +importerGEXF_error_nodeid=Node id is missing. The node is ignored. +importerGEXF_error_nodeposition=Node ''{0}'' has a wrong position on ''{1}'' (not a float). +importerGEXF_error_nodesize=Node ''{0}'' has a wrong size (not a float). +importerGEXF_error_notnode=Element ''{0}'' is not a node. The element is ignored. +importerGEXF_error_parsingdatetype=Date type ''{0}'' is not recognized. Set to default ''date''. +importerGEXF_error_parsingmode=Parsing mode ''{0}'' is not recognized. Set to default ''static''. +importerGEXF_error_node_timeinterval_parseerror=The time interval for node ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edge_timeinterval_parseerror=The time interval for edge ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_node_timeintervals_parseerror=The time intervals for node ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edge_timeintervals_parseerror=The time intervals for edge ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_nodeattribute_timeinterval_parseerror=The time interval for node ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edgeattribute_timeinterval_parseerror=The time interval for edge ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_node_timestamp_parseerror=The timestamp for node ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edge_timestamp_parseerror=The timestamp for edge ''{0}'' could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_node_timestamps_parseerror=The timestamps for node ''{0}'' could not be parsed. +importerGEXF_error_edge_timestamps_parseerror=The timestamps for edge ''{0}'' could not be parsed. +importerGEXF_error_nodeattribute_timestamp_parseerror=The timestamp for node ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_edgeattribute_timestamp_parseerror=The timestamp for edge ''{0}'' attribute could not be parsed. Use xsd:date, xsd:dateTime or Double formatting. +importerGEXF_error_nodeattribute_timeset_parseerror=The timestamps or intervals for node ''{0}'' attribute could not be parsed. +importerGEXF_error_edgeattribute_timeset_parseerror=The timestamps or intervals for edge ''{0}'' attribute could not be parsed. +importerGEXF_error_nodecolorvalue=Node of id ''{1}'' has a wrong color channel ''{2}''=''{0}''. It should be 0 <= ''{2}'' <= 255. +importerGEXF_error_edgecolorvalue=Edge of id ''{1}'' has a wrong color channel ''{2}''=''{0}''. It should be 0 <= ''{2}'' <= 255. +importerGEXF_error_nodeopacityvalue=Node of id ''{1}'' has a wrong opacity a=''{0}''. It should be 0.0 <= a <= 1.0. +importerGEXF_error_edgeopacityvalue=Edge of id ''{1}'' has a wrong opacity a=''{0}''. It should be 0.0 <= a <= 1.0. +importerGEXF_error_node_open_interval=Node of id ''{0}'' uses open intervals, which have been deprecated. +importerGEXF_error_edge_open_interval=Edge of id ''{0}'' uses open intervals, which have been deprecated. +importerGEXF_error_slice_bound_missing=Missing timestamp or interval attribute on +importerGEXF_error_pid=The node of id ''{0}'' defines a parent using a pid. Hierarchical graph support has been deprecated and will be ignored. +importerGEXF_error_timezone_parseerror=The time zone ''{0}'' couldn't be recognized +importerGEXF_error_timerepresentation_intervalerror=The time representation is set as 'timestamp' so intervals can't be used. Set the time representation to 'interval' in . +importerGEXF_error_timerepresentation_timestamperror=The time representation is set as 'interval' so timestamps can't be used. Set the time representation to 'timestamp' in . +importerGEXF_log_edgeeproperty=Edge property found: {0} +importerGEXF_log_nodeproperty=Node property found: {0} +importerGEXF_log_edgeattribute=Edge attribute found ''{0}'' ({1}) +importerGEXF_log_nodeattribute=Node attribute found ''{0}'' ({1}) +importerGEXF_log_default=Default attribute value found: ''{0}'' ({1}) +importerGEXF_log_options=Attribute Options found: ''{0}'' ({1}) +importerGEXF_log_version10=GEXF version 1.0 (deprecated) +importerGEXF_log_version11=GEXF version 1.1 (deprecated) +importerGEXF_log_version12=GEXF version 1.2 (deprecated) +importerGEXF_log_version13=GEXF version 1.3 +importerGEXF_log_version_undef=Undefined GEXF version. Parser 1.3 is used. +importerGEXF_log_dynamic_weight=Dynamic weight column found +importerDL_error_firstline=First line of DL file must begin with 'DL' +importerDL_error_unknowntag=Header unknown tag ''{0}'' +importerDL_error_formatmissing=DL 'format' tag is missing, 'fullmatrix' is used by default +importerDL_error_badformat=Format ''{0}'' is not supported, provide 'format=edgelist1' or 'format=fullmatrix' format only +importerDL_error_nmissing=Header of DL file must contain tag 'n = ' +importerDL_error_mmissing=Header of DL file must contain tag 'm = ' +importerDL_error_labelscount=Number of labels ({0}) is different from n tag ({1}) +importerDL_error_nodata=No data line was found +importerDL_error_matrixrowscount=Number of matrix rows ({0}) is greater than n tag ({1}) +importerDL_error_matrixrowscount2=Number of matrix rows ({0}) is less than n tag ({1}) +importerDL_error_matriciescount=Number of matricies sets ({0}) is different from nm tag ({1}) +importerDL_error_matrixentriescount=Number of matrix entries on row {0} of matrix {1} has more than allowed entries (line {2} of DL file) +importerDL_error_weightparseerror=Unable to parse weight ''{0}'' on matrix {1} on line {2} +importerDL_error_edgelistssetscount=Number of edgelist sets ({0}) is different from nm tag ({1}) +importerDL_error_edgelistrowparse=Unable to parse from id ''{0}'' on edgelist line {1} +importerDL_error_edgeparseweight=Unable to parse weight ''{0}'' on edgelist line {1} +importerDOT_error_nothingfound=No 'graph' or 'digraph' was found +importerDOT_error_labelunreachable=Unable to find label at line {0} +importerDOT_error_colorunreachable=Unable to find color at line {0} +importerDOT_error_posunreachable=Unable to parse position of node at line {0}. Must be pos="x, y". +importerDOT_error_weightunreachable=Unable to parse edge's weight at line {0} +importerTGF_error_emptynodes=No nodes found diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/cs.po b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/cs.po deleted file mode 100644 index 8f948687bb..0000000000 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/cs.po +++ /dev/null @@ -1,379 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-15 21:50+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "fileType_GDF_Name" -msgstr "Soubory GDF (GUESS)" - -msgid "fileType_GEXF_Name" -msgstr "Soubory GEXF" - -msgid "fileType_NET_Name" -msgstr "Soubory NET (Pajek)" - -msgid "fileType_GraphML_Name" -msgstr "Soubory GraphML" - -msgid "fileType_GML_Name" -msgstr "Soubory GML" - -msgid "fileType_TLP_Name" -msgstr "Soubory TLP" - -msgid "fileType_CSV_Name" -msgstr "Soubory CSV" - -msgid "fileType_Edges_Name" -msgstr "Seznam hran" - -msgid "fileType_GraphViz_Name" -msgstr "Soubory GraphViz" - -msgid "fileType_DL_Name" -msgstr "Soubory DL (UCINET)" - -msgid "fileType_VNA_Name" -msgstr "Soubory VNA" - -msgid "importerGDF_error_dataformat1" -msgstr "Soubor musΓ­ začínat Ε™Γ‘dkem \"nodedef> name\"" - -msgid "importerGDF_error_dataformat2" -msgstr "Ε patnΓ© formΓ‘tovΓ‘nΓ­ sloupce. KaΕΎdΓ½ sloupce musΓ­ alespoň obsahovat nΓ‘zev. NΓ‘zvy sloupcΕ― nesmΓ­ obsahovat ΕΎΓ‘dnou čÑrku." - -msgid "importerGDF_error_dataformat3" -msgstr "Nelze importovat sloupce ''{0}'' pro uzel ''{1}''. Chyba v hodnotΔ› ''{2}''." - -msgid "importerGDF_error_dataformat4" -msgstr "Nelze nastavit ''{0}'' vlastnosti ''{1}'' pro {2}." - -msgid "importerGDF_error_dataformat5" -msgstr "DatovΓ½ typ ''{0}'' nenΓ­ rozeznΓ‘n, mΓ­sto toho je pouΕΎit Ε™etΔ›zec." - -msgid "importerGDF_error_dataformat6" -msgstr "Typ sloupce nebyl v ''{0}'' nalezen, mΓ­sto toho je pouΕΎit Ε™etΔ›zec." - -msgid "importerGDF_error_dataformat7" -msgstr "ŘÑdek ''{0}'' mΓ‘ vΓ­ce sloupcΕ―, neΕΎ je určeno v hlavičce. OvΔ›Ε™te, prosΓ­m, počet čÑrek." - -msgid "importerGDF_error_dataformat8" -msgstr "Sloupec uzlu ''{0}'' nemΕ―ΕΎe bΓ½t pΕ™idΓ‘n, protoΕΎe jiΕΎ existuje" - -msgid "importerGDF_error_dataformat9" -msgstr "Sloupec hrany ''{0}'' nemΕ―ΕΎe bΓ½t pΕ™idΓ‘n, protoΕΎe jiΕΎ existuje" - -msgid "importerTPL_error_dataformat1" -msgstr "Ε patnΓ© formΓ‘tovΓ‘nΓ­ hrany na Ε™Γ‘dku {0}." - -msgid "importerNET_error_dataformat1" -msgstr "Soubor musΓ­ začínat Ε™Γ‘dkem \"*vertices\"." - -msgid "importerNET_error_dataformat2" -msgstr "ŘÑdek {0} se zdΓ‘ bΓ½t prΓ‘zdnΓ½" - -msgid "importerNET_error_dataformat3" -msgstr "NepΓ‘rovΓ© (nebo pΕ™Γ­liΕ‘ mnoho) uvozovky na Ε™Γ‘dku {0}" - -msgid "importerNET_error_dataformat4" -msgstr "Vertex číslo ''{0}'' nenΓ­ v rozsahu [1,{1}]" - -msgid "importerNET_error_dataformat5" -msgstr "ProblΓ©m s pΕ™evodem souΕ™adnic vertexu na Ε™Γ‘dku {0}. MusΓ­ bΓ½t desetinnΓ© číslo." - -msgid "importerNET_error_dataformat6" -msgstr "ProblΓ©m s pΕ™evodem velikosti vertexu na Ε™Γ‘dku {0}. MusΓ­ bΓ½t desetinnΓ© číslo." - -msgid "importerNET_error_dataformat7" -msgstr "ProblΓ©m se zpracovΓ‘nΓ­m vΓ‘hy hrany na Ε™Γ‘dku {0}. MusΓ­ bΓ½t desetinnΓ© číslo." - -msgid "importerGraphML_error_syntax1" -msgstr "SyntaktickΓ‘ chyba, souboru musΓ­ začínat se značkou ." - -msgid "importerGraphML_error_syntax2" -msgstr "SyntaktickΓ‘ chyba, uzel ''{0}'' musΓ­ bΓ½t umΓ­stΔ›n ve značce ." - -msgid "importerGraphML_error_attributeclass" -msgstr "TΕ™Γ­da vlastnosti nebyla nalezena nebo neznΓ‘mΓ‘ pro vlastnost \"{0}\". Vlastnost je ignorovΓ‘na." - -msgid "importerGraphML_error_attributefor" -msgstr "Vlastnost ''for'' nebyla nalezena nebo neznΓ‘mΓ‘ pro vlastnost ''{0}''. Vlastnost je ignorovΓ‘na." - -msgid "importerGraphML_error_attributetype1" -msgstr "Typ vlastnosti nebyl nalezen pro vlastnost ''{0}''. Nastaveno na vΓ½chozΓ­ Ε™etΔ›zec." - -msgid "importerGraphML_error_attributetype2" -msgstr "Typ vlastnosti pro ''{0}'' nebyl rozpoznΓ‘n. Vlastnost je ignorovΓ‘na." - -msgid "importerGraphML_error_attributedefault" -msgstr "VΓ½chozΓ­ hodnota vlastnosti ''{0}'' nemΕ―ΕΎe bΓ½t odevzdΓ‘na typu ''{1}''." - -msgid "importerGraphML_error_attributecolumn_exist" -msgstr "Vlastnost s id ''{0}'' jiΕΎ existuje, vlastnost je ignorovΓ‘na" - -msgid "importerGraphML_error_attributeempty" -msgstr "Chyba zpracovΓ‘nΓ­ vlastnosti, id chybΓ­." - -msgid "importerGraphML_log_nodeproperty" -msgstr "Vlastnost uzlu nalezena: {0}" - -msgid "importerGraphML_log_edgeproperty" -msgstr "Vlastnost hrany nalezena: {0}" - -msgid "importerGraphML_log_nodeattribute" -msgstr "Vlastnost uzlu nalezena ''{0}'' ({1})" - -msgid "importerGraphML_log_edgeattribute" -msgstr "Vlastnost hrany nalezena ''{0}'' ({1})" - -msgid "importerGraphML_log_default" -msgstr "VΓ½chozΓ­ hodnota vlastnosti nalezena: ''{0}'' ({1})" - -msgid "importerGraphML_error_datakey" -msgstr "ChybΓ­ datovΓ½ klíč pro prvek id={0}" - -msgid "importerGraphML_error_datavalue" -msgstr "Chyba typu datovΓ© hodnoty {0} pro prvek id={1}. Tato hodnota nemΕ―ΕΎe bΓ½t nastavena jako vlastnost ''{2}''." - -msgid "importerGraphML_error_nodeid" -msgstr "Id uzlu chybΓ­. Uzel je ignorovΓ‘n." - -msgid "importerGraphML_error_defaultedgetype" -msgstr "VΓ½chozΓ­ typ hrany ''{0}'' nenΓ­ rozpoznΓ‘n. Nastaveno na vΓ½chozΓ­ ''mixed''." - -msgid "importerGraphML_error_edgetype" -msgstr "Typ ''{0}'' hrany ''{1}'' nenΓ­ rozpoznΓ‘n. Nastaveno na vΓ½chozΓ­ hodnotu." - -msgid "importerGML_error_nodeidmissing" -msgstr "Id uzlu chybΓ­" - -msgid "importerGML_error_directedgraphparse" -msgstr "NeočekΓ‘vanΓ‘ hodnota pro vlastnost 'Ε™Γ­zenou' grafem" - -msgid "importerGML_error_directedparse" -msgstr "NeočekΓ‘vanΓ‘ hodnota pro vlastnost 'Ε™Γ­zenou' grafem pro hranu \"{0}\"" - -msgid "importerGML_error_badparsing" -msgstr "NeplatnΓ© zpracovΓ‘nΓ­ GML" - -msgid "importerTPL_error_badparsing" -msgstr "NeplatnΓ© zpracovΓ‘nΓ­ TPL" - -msgid "importerGEXF_error_attributeclass" -msgstr "Vlastnost ''class'' nenalezena nebo neznΓ‘mΓ‘ pro vlastnost ''{0}''. Vlastnost je ignorovΓ‘na." - -msgid "importerGEXF_error_attributeempty" -msgstr "Chyba zpracovΓ‘nΓ­ vlastnosti, chybΓ­ id nebo typ." - -msgid "importerGEXF_error_attributedefault" -msgstr "VΓ½chozΓ­ hodnota vlastnosti ''{0}'' nemΕ―ΕΎe bΓ½t pΕ™etypovΓ‘na na typ ''{1}''." - -msgid "importerGEXF_error_attributeoptions" -msgstr "Hodnoty moΕΎnosti ve vlastnosti ''{0}'' nemΕ―ΕΎou bΓ½t pΕ™etypovΓ‘ny na typ ''{1}''." - -msgid "importerGEXF_error_attributecolumn_exist" -msgstr "Vlastnost s id ''{0}'' jiΕΎ existuje, vlastnost je ignorovΓ‘na" - -msgid "importerGEXF_error_attributetype1" -msgstr "Typ vlastnosti pro vlastnost ''{0}'' nenalezen. Nastaevno na vΓ½chozΓ­ Ε™etΔ›zec." - -msgid "importerGEXF_error_attributetype2" -msgstr "Typ vlastnosti ''{0}'' nenΓ­ rozpoznΓ‘n. Vlastnost je ignorovΓ‘na." - -msgid "importerGEXF_error_datakey" -msgstr "Klíč dat (vlastnost ''for'') chybΓ­ v prvku id={0}" - -msgid "importerGEXF_error_datakey1" -msgstr "Klíč dat (vlastnost ''id') chybΓ­ v prvku id={0}" - -msgid "importerGEXF_error_dataoptionsvalue" -msgstr "Hodnota dat ''{0}'' nenΓ­ pΕ™Γ­pustnΓ‘ pro prvek id={1}. Tato hodnota nemΕ―ΕΎe bΓ½t nastavena jako vlastnost ''{2}''." - -msgid "importerGEXF_error_datavalue" -msgstr "Chyba typu datovΓ© hodnoty ''{0}'' v prvku {1}. Hodnota nemΕ―ΕΎe bΓ½t nastavena jako vlastnost ''{2}''." - -msgid "importerGEXF_error_defaultedgetype" -msgstr "VΓ½chozΓ­ typ hrany ''{0}'' nenΓ­ rozpoznΓ‘n. Nastaven na vΓ½chozΓ­ ''mixed''." - -msgid "importerGEXF_error_edgedouble" -msgstr "Typ hrany ''double'' nenΓ­ v současnosti podporovΓ‘n. Nastaven na vΓ½chozΓ­ ''mixed''." - -msgid "importerGEXF_error_edgetype" -msgstr "Typ ''{0}'' hrany ''{1}'' nenΓ­ rozpoznΓ‘n. Nastaveno na vΓ½chozΓ­ hodnotu." - -msgid "importerGEXF_error_edgeid" -msgstr "Id hrany chybΓ­. Id bylo vytvoΕ™eno." - -msgid "importerGEXF_error_edgesource" -msgstr "Zdroj hrany chybΓ­. Hrana je ignorovΓ‘na." - -msgid "importerGEXF_error_edgetarget" -msgstr "CΓ­l hrany chybΓ­. Hrana je ignorovΓ‘na." - -msgid "importerGEXF_error_edgeweight" -msgstr "VΓ‘ha hrany s id ''{0}'' nenΓ­ desetinnΓ‘. VΓ‘ha je ignorovΓ‘na." - -msgid "importerGEXF_error_nodeid" -msgstr "Id uzlu chybΓ­. Uzel je ignorovΓ‘n." - -msgid "importerGEXF_error_nodeposition" -msgstr "Uzel ''{0}'' mΓ‘ Ε‘patnΓ© umΓ­stΔ›nΓ­ ve ''{1}'' (nenΓ­ desetinnΓ©)." - -msgid "importerGEXF_error_nodesize" -msgstr "Uzel ''{0}'' mΓ‘ Ε‘patnou velikost (nenΓ­ desetinnΓ‘)." - -msgid "importerGEXF_error_notnode" -msgstr "Prvek ''{0}'' nenΓ­ uzel. Prvek je ignorovΓ‘n." - -msgid "importerGEXF_error_pid_notfound" -msgstr "NadΕ™azenΓ½ pid ''{0}'' nemohlo bΓ½t pro uzel ''{1}'' nalezeno." - -msgid "importerGEXF_error_parsingdatetype" -msgstr "DatovΓ½ typ ''{0}'' nerozpoznΓ‘n. Nastaven na vΓ½chozΓ­ ''date''." - -msgid "importerGEXF_error_parsingmode" -msgstr "ReΕΎim zpracovΓ‘nΓ­ ''{0}'' nenΓ­ rozpoznΓ‘n. Nastaven na vΓ½chozΓ­ ''static''." - -msgid "importerGEXF_error_node_timeinterval_parseerror" -msgstr "ČasovΓ½ interval pro uzel ''{0}'' nemohl bΓ½t zpracovΓ‘n. PouΕΎijte formΓ‘tovΓ‘nΓ­ csd:date, xsd:dateTime nebo Double." - -msgid "importerGEXF_error_edge_timeinterval_parseerror" -msgstr "ČasovΓ½ interval pro hranu ''{0}'' nemohl bΓ½t zpracovΓ‘n. PouΕΎijte formΓ‘tovΓ‘nΓ­ csd:date, xsd:dateTime nebo Double." - -msgid "importerGEXF_error_nodeattribute_timeinterval_parseerror" -msgstr "ČasovΓ½ interval pro vlastnost uzlu ''{0}'' nemohl bΓ½t zpracovΓ‘n. PouΕΎijte formΓ‘tovΓ‘nΓ­ xsd:date, xsd:dateTime nebo Double." - -msgid "importerGEXF_error_edgeattribute_timeinterval_parseerror" -msgstr "ČasovΓ½ interval pro vlastnost hrany ''{0}'' nemohl bΓ½t zpracovΓ‘n. PouΕΎijte formΓ‘tovΓ‘nΓ­ xsd:date, xsd:dateTime nebo Double." - -msgid "importerGEXF_error_nodecolorvalue" -msgstr "Uzel s id ''{1}'' mΓ‘ Ε‘patnΓ½ barevnΓ½ kanΓ‘l ''{2}''=''{0}''. MΔ›l by bΓ½t 0 < ''{2}'' < 255." - -msgid "importerGEXF_error_edgecolorvalue" -msgstr "Hrana s id ''{1}'' mΓ‘ Ε‘patnΓ½ barevnΓ½ kanΓ‘l ''{2}''=''{0}''. MΔ›l by bΓ½t 0 < ''{2}'' < 255." - -msgid "importerGEXF_error_nodeopacityvalue" -msgstr "Uzel s id ''{1}'' mΓ‘ Ε‘patnou neprΕ―hlednost a=''{0}''. MΔ›la by bΓ½t 0.0 < a < 1.0." - -msgid "importerGEXF_error_edgeopacityvalue" -msgstr "Hrana s id ''{1}'' mΓ‘ Ε‘patnou neprΕ―hlednost a=''{0}''. MΔ›la by bΓ½t 0.0 < a < 1.0." - -msgid "importerGEXF_log_edgeeproperty" -msgstr "Nalezena vlastnost hrany: {0}" - -msgid "importerGEXF_log_nodeproperty" -msgstr "Nalezena vlastnost uzlu: {0}" - -msgid "importerGEXF_log_edgeattribute" -msgstr "Nalezena vlastnost hrany ''{0}'' ({1})" - -msgid "importerGEXF_log_nodeattribute" -msgstr "Nalezena vlastnost uzlu ''{0}'' ({1})" - -msgid "importerGEXF_log_default" -msgstr "Nalezena vΓ½chozΓ­ hodnota vlastnosti: ''{0}'' ({1})" - -msgid "importerGEXF_log_options" -msgstr "Nalezeny moΕΎnosti vlastnosti: ''{0}'' ({1})" - -msgid "importerGEXF_log_version10" -msgstr "GEXF verze 1.0 (zastaralΓ©)" - -msgid "importerGEXF_log_version11" -msgstr "GEXF verze 1.1 (zastaralΓ©)" - -msgid "importerGEXF_log_version12" -msgstr "GEXF verze 1.2" - -msgid "importerGEXF_log_version13" -msgstr "GEXF verze 1.3" - -msgid "importerGEXF_log_version_undef" -msgstr "Neurčena verze GEXF. Je pouΕΎit analyzΓ‘tor verze 1.3." - -msgid "importerGEXF_log_dynamic_weight" -msgstr "Nalezen sloupec dynamickΓ© vΓ‘hy" - -msgid "importerDL_error_firstline" -msgstr "PrvnΓ­ Ε™Γ‘dek souboru DL musΓ­ začínat 'DL'" - -msgid "importerDL_error_unknowntag" -msgstr "NeznΓ‘mΓ‘ značka hlavičky ''{0}''" - -msgid "importerDL_error_formatmissing" -msgstr "Značka DL 'format' chybΓ­. Je pouΕΎito standardnΓ­ 'fullmatrix'" - -msgid "importerDL_error_badformat" -msgstr "FormΓ‘t ''{0}'' nenΓ­ podporovΓ‘n, zadejte pouze formΓ‘ty 'format=edgelist1' nebo 'format=fullmatrix'" - -msgid "importerDL_error_nmissing" -msgstr "Hlavička souboru DL musΓ­ obsahovat značku 'n = '" - -msgid "importerDL_error_mmissing" -msgstr "Hlavička souboru DL musΓ­ obsahovat značku 'm = '" - -msgid "importerDL_error_labelscount" -msgstr "Počet Ε‘tΓ­tkΕ― ({0}) sde liΕ‘Γ­ od značky n ({1})" - -msgid "importerDL_error_nodata" -msgstr "Ε½Γ‘dnΓ½ datovΓ½ Ε™Γ‘dek nebyl nalezen" - -msgid "importerDL_error_matrixrowscount" -msgstr "Počet Ε™Γ‘dku matice ({0}) je vΔ›tΕ‘Γ­ neΕΎ značka n ({1})" - -msgid "importerDL_error_matrixrowscount2" -msgstr "Počet Ε™Γ‘dku matice ({0}) je menΕ‘Γ­ neΕΎ značka n ({1})" - -msgid "importerDL_error_matriciescount" -msgstr "Počet maticovΓ½ch sad ({0}) se liΕ‘Γ­ od značky nm ({1})" - -msgid "importerDL_error_matrixentriescount" -msgstr "Počet prvkΕ― matice na Ε™Γ‘dku {0} v matici {1} je vΔ›tΕ‘Γ­ neΕΎ dovoleno (Ε™Γ‘dek {2} v souboru DL)" - -msgid "importerDL_error_weightparseerror" -msgstr "Nelze zpracovat vΓ‘hu ''{0}'' v matici {1} na Ε™Γ‘dku {2}" - -msgid "importerDL_error_edgelistssetscount" -msgstr "Počet sad hran ({0}) se liΕ‘Γ­ od značky nm ({1})" - -msgid "importerDL_error_edgelistrowparse" -msgstr "Nelze zpracovat z id ''{0}'' na Ε™Γ‘dku {1} v seznamu hran" - -msgid "importerDL_error_edgeparseweight" -msgstr "Nelze zpracovat vΓ‘hu ''{0}'' na Ε™Γ‘dku {1} v seznamu hran" - -msgid "importerDOT_error_nothingfound" -msgstr "Nebyl nalezen ΕΎΓ‘dnΓ½ 'graph' nebo 'digraph'" - -msgid "importerDOT_error_labelunreachable" -msgstr "Nelze najΓ­t Ε‘tΓ­tek na Ε™Γ‘dku {0}" - -msgid "importerDOT_error_colorunreachable" -msgstr "Nelze najΓ­t barvu na Ε™Γ‘dku {0}" - -msgid "importerDOT_error_edgeparsing" -msgstr "Nelze zpracovat hranu na Ε™Γ‘dku {0}" - -msgid "importerDOT_error_posunreachable" -msgstr "Nelze zpracovat umΓ­stΔ›nΓ­ uzulu na Ε™Γ‘dku {0}. MusΓ­ bΓ½t pos=''x, y''." - -msgid "importerDOT_error_weightunreachable" -msgstr "Nelze zpracovat vΓ‘huΒ¨hrany na Ε™Γ‘dku {0}" - -msgid "importerDOT_log_nodeattribute" -msgstr "Nalezena vlastnost uzlu ''{0}'' ({1})" diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/es.po b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/es.po deleted file mode 100644 index 5c17c8576b..0000000000 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/es.po +++ /dev/null @@ -1,380 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011-2012. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:21+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "fileType_GDF_Name" -msgstr "Archivos GDF (GUESS)" - -msgid "fileType_GEXF_Name" -msgstr "Archivos GEXF" - -msgid "fileType_NET_Name" -msgstr "Archivos NET (Pajek)" - -msgid "fileType_GraphML_Name" -msgstr "Archivos GraphML" - -msgid "fileType_GML_Name" -msgstr "Archivos GML" - -msgid "fileType_TLP_Name" -msgstr "Archivos TLP" - -msgid "fileType_CSV_Name" -msgstr "Archivos CSV" - -msgid "fileType_Edges_Name" -msgstr "Lista de aristas" - -msgid "fileType_GraphViz_Name" -msgstr "Archivos GraphViz" - -msgid "fileType_DL_Name" -msgstr "Archivos DL (UCINET)" - -msgid "fileType_VNA_Name" -msgstr "Archivos VNA" - -msgid "importerGDF_error_dataformat1" -msgstr "El archivo debe comenzar con la lΓ­nea \"nodedef> name\"" - -msgid "importerGDF_error_dataformat2" -msgstr "Mal formato de columna. Cada columna debe contener al menos un nombre. Los nombres de columna no deben contener ninguna coma." - -msgid "importerGDF_error_dataformat3" -msgstr "Fallo al importar la columna ''{0}'' para el nodo ''{1}''. Error en el valor ''{2}''." - -msgid "importerGDF_error_dataformat4" -msgstr "Fallo al establecer el atributo ''{1}'' de tipo ''{0}'' para el nodo {2}." - -msgid "importerGDF_error_dataformat5" -msgstr "El tipo de datos ''{0}'' no ha sido reconocido, se va a usar 'string' en su lugar." - -msgid "importerGDF_error_dataformat6" -msgstr "Tipo de columna no encontrado para ''{0}'', se va a usar 'string' en su lugar." - -msgid "importerGDF_error_dataformat7" -msgstr "La lΓ­nea ''{0}'' tiene mΓ‘s columnas de las definidas en la cabecera. Por favor verifica el nΓΊmero de comas." - -msgid "importerGDF_error_dataformat8" -msgstr "La columna ''{0}'' del nodo no puede ser aΓ±adida porque ya existe" - -msgid "importerGDF_error_dataformat9" -msgstr "La columna ''{0}'' de la arista no puede ser aΓ±adida porque ya existe" - -msgid "importerTPL_error_dataformat1" -msgstr "Mal formato de arista en la lΓ­nea {0}." - -msgid "importerNET_error_dataformat1" -msgstr "El archivo debe comenzar con la lΓ­nea \"*vertices\"." - -msgid "importerNET_error_dataformat2" -msgstr "LΓ­nea en blanco detectada en la lΓ­nea {0}." - -msgid "importerNET_error_dataformat3" -msgstr "NΓΊmero desequilibrado (o demasiado alto) de comillas en la lΓ­nea {0}." - -msgid "importerNET_error_dataformat4" -msgstr "El nΓΊmero de vΓ©rtice ''{0}'' no estΓ‘ en el rango [1,{1}]." - -msgid "importerNET_error_dataformat5" -msgstr "Problema de conversiΓ³n de coordenadas de vΓ©rtice en la lΓ­nea {0}. Debe ser un nΓΊmero en punto flotante." - -msgid "importerNET_error_dataformat6" -msgstr "Problema de conversiΓ³n de tamaΓ±o de nodo en la lΓ­nea {0}. Debe ser un nΓΊmero en formato float." - -msgid "importerNET_error_dataformat7" -msgstr "Problema de conversiΓ³n de peso de arista en la lΓ­nea {0}. Debe ser un nΓΊmero en formato float." - -msgid "importerGraphML_error_syntax1" -msgstr "Error de sintaxis, el archivo debe comenzar con la marca ." - -msgid "importerGraphML_error_syntax2" -msgstr "Error de sintaxis, el nodo ''{0}'' debe estar anidado en una marca ." - -msgid "importerGraphML_error_attributeclass" -msgstr "Clase de atributo no encontrada o desconocida para el atributo ''{0}''. El atributo es ignorado." - -msgid "importerGraphML_error_attributefor" -msgstr "Atributo ''for'' no encontrado o desconocido para el atributo ''{0}''. El atributo va a ser ignorado." - -msgid "importerGraphML_error_attributetype1" -msgstr "Tipo no encontrado para el atributo ''{0}''. Se va a usar 'string' en su lugar." - -msgid "importerGraphML_error_attributetype2" -msgstr "El tipo del atributo ''{0}'' no puede ser reconocido. El atributo va a ser ignorado." - -msgid "importerGraphML_error_attributedefault" -msgstr "El valor por defecto para el atributo ''{0}'' no puede ser convertido al tipo ''{1}''." - -msgid "importerGraphML_error_attributecolumn_exist" -msgstr "Un atributo con id ''{0}'' ya existe, el atributo es ignorado" - -msgid "importerGraphML_error_attributeempty" -msgstr "Error de anΓ‘lisis de atributo, id faltante." - -msgid "importerGraphML_log_nodeproperty" -msgstr "Propiedad de nodo encontrada: {0}" - -msgid "importerGraphML_log_edgeproperty" -msgstr "Propiedad de arista encontrada: {0}." - -msgid "importerGraphML_log_nodeattribute" -msgstr "Atributo de nodo encontrado: ''{0}'' ({1})" - -msgid "importerGraphML_log_edgeattribute" -msgstr "Atributo de arista encontrado: ''{0}'' ({1})" - -msgid "importerGraphML_log_default" -msgstr "Valor por defecto de atributo encontrado: ''{0}'' ({1})" - -msgid "importerGraphML_error_datakey" -msgstr "Clave de dato no encontrada para el elemento con id={0}." - -msgid "importerGraphML_error_datavalue" -msgstr "Error de tipo de valor de dato {0} para el elemento id={1}. El valor no puede ser establecido como el atributo ''{2}''." - -msgid "importerGraphML_error_nodeid" -msgstr "Identificador de nodo no encontrado. El nodo va a ser ignorado." - -msgid "importerGraphML_error_defaultedgetype" -msgstr "El tipo por defecto de arista ''{0}'' no puede ser reconocido. Valor por defecto establecido como ''mixed''." - -msgid "importerGraphML_error_edgetype" -msgstr "El tipo ''{0}'' de la arista ''{1}'' no puede ser reconocido. Se ha usado el valor por defecto." - -msgid "importerGML_error_nodeidmissing" -msgstr "Identificador de nodo no encontrado." - -msgid "importerGML_error_directedgraphparse" -msgstr "Valor inesperado para la propiedad 'directed' del grafo." - -msgid "importerGML_error_directedparse" -msgstr "Valor inesperado para la propiedad 'directed' para la arista ''{0}''" - -msgid "importerGML_error_badparsing" -msgstr "AnΓ‘lisis GML invΓ‘lido" - -msgid "importerTPL_error_badparsing" -msgstr "AnΓ‘lisis TPL invΓ‘lido" - -msgid "importerGEXF_error_attributeclass" -msgstr "Atributo ''class'' no encontrado o desconocido para el atributo ''{0}''. El atributo va a ser ignorado." - -msgid "importerGEXF_error_attributeempty" -msgstr "Error de anΓ‘lisis de atributo, id o tipo faltantes." - -msgid "importerGEXF_error_attributedefault" -msgstr "El valor por defecto para el atributo ''{0}'' no puede ser convertido al tipo ''{1}''." - -msgid "importerGEXF_error_attributeoptions" -msgstr "Los valores de opciΓ³n para el atributo ''{0}'' no pueden ser convertidos al tipo ''{1}''." - -msgid "importerGEXF_error_attributecolumn_exist" -msgstr "Un atributo con id ''{0}'' ya existe, el atributo es ignorado" - -msgid "importerGEXF_error_attributetype1" -msgstr "Tipo de atributo no encontrado para el atributo ''{0}''. Se va a utilizar 'string' en su lugar." - -msgid "importerGEXF_error_attributetype2" -msgstr "El tipo del atributo ''{0}'' no puede ser reconocido. El atributo va a ser ignorado." - -msgid "importerGEXF_error_datakey" -msgstr "Clave de dato (atributo ''for'') no encontrada para el elemento con id={0}" - -msgid "importerGEXF_error_datakey1" -msgstr "Clave de dato (atributo ''id'') no encontrada para el elemento con id={0}" - -msgid "importerGEXF_error_dataoptionsvalue" -msgstr "El valor ''{0}'' no es una opciΓ³n para el elemento con id={1}. El valor no puede ser establecido como el atributo ''{2}''." - -msgid "importerGEXF_error_datavalue" -msgstr "Error de tipo para el valor {0} para el elemento con id id={1}. El valor no puede establecerse como el atributo ''{2}''." - -msgid "importerGEXF_error_defaultedgetype" -msgstr "El tipo por defecto de arista ''{0}'' no puede ser reconocido. Se va a utilizar ''undirected'' en su lugar." - -msgid "importerGEXF_error_edgedouble" -msgstr "El tipo de arista ''double'' no es soportado actualmente. Se va a utilizar ''mixed'' en su lugar." - -msgid "importerGEXF_error_edgetype" -msgstr "El tipo ''{0}'' de la arista ''{1}'' no puede ser reconocido. Se va a utilizar el tipo por defecto en su lugar." - -msgid "importerGEXF_error_edgeid" -msgstr "Identificador de arista no encontrado. Un identificador ha sido generado." - -msgid "importerGEXF_error_edgesource" -msgstr "Origen de la arista faltante. La arista es ignorada." - -msgid "importerGEXF_error_edgetarget" -msgstr "Destino de la arista faltante. La arista es ignorada." - -msgid "importerGEXF_error_edgeweight" -msgstr "El peso de la arista con id ''{0}'' no es un nΓΊmero en punto flotante. El peso va a ser ignorado." - -msgid "importerGEXF_error_nodeid" -msgstr "Identificador de nodo no encontrado. El nodo va a ser ignorado." - -msgid "importerGEXF_error_nodeposition" -msgstr "PosiciΓ³n de nodo ''{0}'' errΓ³nea en ''{1}'' (no es un nΓΊmero en punto flotante)." - -msgid "importerGEXF_error_nodesize" -msgstr "TamaΓ±o de nodo ''{0}'' errΓ³neo en ''{1}'' (no es un nΓΊmero en punto flotante)." - -msgid "importerGEXF_error_notnode" -msgstr "El elemento ''{0}'' no es un nodo. El elemento va a ser ignorado." - -msgid "importerGEXF_error_pid_notfound" -msgstr "El padre con pid ''{0}'' no pudo ser encontrado para el nodo ''{1}''." - -msgid "importerGEXF_error_parsingdatetype" -msgstr "El tipo de fecha ''{0}'' no puede ser reconocido. Se va a utilizar ''date'' en su lugar." - -msgid "importerGEXF_error_parsingmode" -msgstr "El modo de anΓ‘lisis ''{0}'' no puede ser reconocido. Se va a utilizar ''static'' en su lugar." - -msgid "importerGEXF_error_node_timeinterval_parseerror" -msgstr "El intervalo de tiempo para el nodo ''{0}'' no pudo ser analizado. Usa un formato de tipo 'Date' o 'Double'." - -msgid "importerGEXF_error_edge_timeinterval_parseerror" -msgstr "El intervalo de tiempo para la arista ''{0}'' no pudo ser analizado. Usa un formato de tipo 'Date' o 'Double'." - -msgid "importerGEXF_error_nodeattribute_timeinterval_parseerror" -msgstr "El intervalo de tiempo para el atributo del nodo ''{0}''. Usa un formato de tipo 'Date' o 'Double'." - -msgid "importerGEXF_error_edgeattribute_timeinterval_parseerror" -msgstr "El intervalo de tiempo para el atributo de la arista ''{0}''. Usa un formato de tipo 'Date' o 'Double'." - -msgid "importerGEXF_error_nodecolorvalue" -msgstr "El nodo con ''{1}'' tiene un canal de color errΓ³neo ''{2}''=''{0}''. DeberΓ­a ser 0 < ''{2}'' < 255." - -msgid "importerGEXF_error_edgecolorvalue" -msgstr "La arista con ''{1}'' tiene un canal de color errΓ³neo ''{2}''=''{0}''. DeberΓ­a ser 0 < ''{2}'' < 255." - -msgid "importerGEXF_error_nodeopacityvalue" -msgstr "El nodo con id ''{1}'' tiene una opacidad errΓ³nea a=''{0}''. DeberΓ­a ser 0.0 < a < 1.0." - -msgid "importerGEXF_error_edgeopacityvalue" -msgstr "La arista con id ''{1}'' tiene una opacidad errΓ³nea a=''{0}''. DeberΓ­a ser 0.0 < a < 1.0." - -msgid "importerGEXF_log_edgeeproperty" -msgstr "Propiedad de arista encontrada: {0}" - -msgid "importerGEXF_log_nodeproperty" -msgstr "Propiedad de nodo encontrada: {0}" - -msgid "importerGEXF_log_edgeattribute" -msgstr "Atributo de arista encontrado: ''{0}'' ({1})" - -msgid "importerGEXF_log_nodeattribute" -msgstr "Atributo de nodo encontrado: ''{0}'' ({1})" - -msgid "importerGEXF_log_default" -msgstr "Valor de atributo por defecto encontrado: ''{0}'' ({1})" - -msgid "importerGEXF_log_options" -msgstr "Opciones de atributo por defecto encontradas: ''{0}'' ({1})" - -msgid "importerGEXF_log_version10" -msgstr "GEXF version 1.0 (obsoleto)" - -msgid "importerGEXF_log_version11" -msgstr "GEXF version 1.1 (obsoleto)" - -msgid "importerGEXF_log_version12" -msgstr "GEXF versiΓ³n 1.2" - -msgid "importerGEXF_log_version13" -msgstr "GEXF version 1.3" - -msgid "importerGEXF_log_version_undef" -msgstr "VersiΓ³n de GEXF no definida. Analizador 1.3 usado." - -msgid "importerGEXF_log_dynamic_weight" -msgstr "Columna de peso dinΓ‘mico encontrada" - -msgid "importerDL_error_firstline" -msgstr "La primera lΓ­nea de un archivo DL debe comenzar con 'DL'" - -msgid "importerDL_error_unknowntag" -msgstr "Etiqueta de cabecera desconocida ''{0}''" - -msgid "importerDL_error_formatmissing" -msgstr "La etiqueta 'format' de DL no puede ser encontrada, 'fullmatrix' es utilizada por defecto." - -msgid "importerDL_error_badformat" -msgstr "El formato ''{0}'' no estΓ‘ soportado, proporciona 'format=edgelist1' o 'format=fullmatrix' solamente." - -msgid "importerDL_error_nmissing" -msgstr "La cabecera del archivo DL debe contener la etiqueta 'n = '" - -msgid "importerDL_error_mmissing" -msgstr "La cabecera del archivo DL debe contener la etiqueta 'm = '" - -msgid "importerDL_error_labelscount" -msgstr "El nΓΊmero de etiquetas ({0}) es diferente de la etiqueta n ({1})" - -msgid "importerDL_error_nodata" -msgstr "No se pudo encontrar linea de datos." - -msgid "importerDL_error_matrixrowscount" -msgstr "El nΓΊmero de filas de matriz ({0}) es mayor que el de la etiqueta n ({1})" - -msgid "importerDL_error_matrixrowscount2" -msgstr "El nΓΊmero de filas de matriz ({0}) es menor que el de la etiqueta n ({1})" - -msgid "importerDL_error_matriciescount" -msgstr "El nΓΊmero de conjunto de matricies ({0}) es diferente de la etiqueta nm ({1})" - -msgid "importerDL_error_matrixentriescount" -msgstr "El nΓΊmero de entradas de matriz en la fila {0} de la matriz {1} tiene mΓ‘s entradas de las permitidas (lΓ­nea {2} del archivo DL)" - -msgid "importerDL_error_weightparseerror" -msgstr "Imposible analizar el peso ''{0}'' en la matriz {1} en la lΓ­nea {2}" - -msgid "importerDL_error_edgelistssetscount" -msgstr "El nΓΊmero de conjuntos de listas de aristas ({0}) es diferente de la etiqueta nm ({1})" - -msgid "importerDL_error_edgelistrowparse" -msgstr "Imposible analizar id ''{0}'' en la lista de aristas en la lΓ­nea {1}" - -msgid "importerDL_error_edgeparseweight" -msgstr "Imposible analizar el peso ''{0}'' en la lista de aristas en la lΓ­nea {1}" - -msgid "importerDOT_error_nothingfound" -msgstr "No se pudo encontrar 'graph' o 'digraph'" - -msgid "importerDOT_error_labelunreachable" -msgstr "Imposible encontrar etiqueta en la lΓ­nea {0}" - -msgid "importerDOT_error_colorunreachable" -msgstr "Imposible encontrar color en la lΓ­nea {0}" - -msgid "importerDOT_error_edgeparsing" -msgstr "Imposible analizar la arista en la lΓ­nea {0}" - -msgid "importerDOT_error_posunreachable" -msgstr "Imposible analizar la posiciΓ³n del nodo en la lΓ­nea {0}. Debe ser pos=\"x, y\"." - -msgid "importerDOT_error_weightunreachable" -msgstr "Imposible analizar el peso de la arista en la lΓ­nea {0}" - -msgid "importerDOT_log_nodeattribute" -msgstr "Atributo de nodo encontrado''{0}'' ({1})" diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/fr.po b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/fr.po deleted file mode 100644 index fde46a6934..0000000000 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/fr.po +++ /dev/null @@ -1,380 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:27+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "fileType_GDF_Name" -msgstr "Fichiers GDF (GUESS)" - -msgid "fileType_GEXF_Name" -msgstr "Fichiers GEXF" - -msgid "fileType_NET_Name" -msgstr "Fichiers NET (Pajek)" - -msgid "fileType_GraphML_Name" -msgstr "Fichiers GraphML" - -msgid "fileType_GML_Name" -msgstr "Fichiers GML" - -msgid "fileType_TLP_Name" -msgstr "Fichiers TLP" - -msgid "fileType_CSV_Name" -msgstr "Fichiers CSV" - -msgid "fileType_Edges_Name" -msgstr "Liste de Liens" - -msgid "fileType_GraphViz_Name" -msgstr "Fichiers GraphViz" - -msgid "fileType_DL_Name" -msgstr "Fichiers DL (UCINET)" - -msgid "fileType_VNA_Name" -msgstr "Fichiers VNA" - -msgid "importerGDF_error_dataformat1" -msgstr "Le fichier doit commencer par la ligne \"nodedef> name\"." - -msgid "importerGDF_error_dataformat2" -msgstr "Mauvais formatage de colonne. Chaque colonne doit contenir au moins un nom. Ces noms ne doivent contenir aucune virgule." - -msgid "importerGDF_error_dataformat3" -msgstr "Γ‰chec de l'import de la colonne ''{0}'' pour le noeud ''{1}'' . Erreur Γ  la valeur ''{2}''." - -msgid "importerGDF_error_dataformat4" -msgstr "Γ‰chec de l'affectation de l'attribut ''{1}'' de type ''{0}'' pour le noeud {2}." - -msgid "importerGDF_error_dataformat5" -msgstr "Type de donnΓ©es ''{0}'' non reconnu, 'string' est utilisΓ© Γ  la place." - -msgid "importerGDF_error_dataformat6" -msgstr "Type de colonne introuvable pour ''{0}'', 'string' est utilisΓ© Γ  la place." - -msgid "importerGDF_error_dataformat7" -msgstr "La ligne ''{0}'' a plus de colonnes que dΓ©fini dans l'en-tΓͺte. Veuillez vΓ©rifier le nombre de virgules." - -msgid "importerGDF_error_dataformat8" -msgstr "La colonne de noeuds ''{0}'' ne peut Γͺtre ajoutΓ©e car elle existe dΓ©jΓ ." - -msgid "importerGDF_error_dataformat9" -msgstr "La colonne de liens ''{0}'' ne peut Γͺtre ajoutΓ©e car elle existe dΓ©jΓ ." - -msgid "importerTPL_error_dataformat1" -msgstr "Mauvais formatage du lien Γ  la ligne {0}." - -msgid "importerNET_error_dataformat1" -msgstr "Le fichier doit commencer par la ligne \"*vertices\"." - -msgid "importerNET_error_dataformat2" -msgstr "Ligne vide dΓ©tectΓ©e Γ  la ligne {0}." - -msgid "importerNET_error_dataformat3" -msgstr "Guillemets dΓ©sΓ©quilibrΓ©s ou trop nombreux Γ  la ligne {0}." - -msgid "importerNET_error_dataformat4" -msgstr "NumΓ©ro de sommet ''{0}'' hors de la plage [1,{1}]." - -msgid "importerNET_error_dataformat5" -msgstr "ProblΓ¨me lors de la conversion des coordonnΓ©es du sommet Γ  la ligne {0}. Ils doivent Γͺtre des nombres Γ  virgule flottante." - -msgid "importerNET_error_dataformat6" -msgstr "ProblΓ¨me de conversion de taille de noeud Γ  la ligne {0}. Elle doit Γͺtre un nombre flottant." - -msgid "importerNET_error_dataformat7" -msgstr "Erreur de parsing du poids du lien Γ  la ligne {0}. Il doit Γͺtre un nombre flottant." - -msgid "importerGraphML_error_syntax1" -msgstr "Erreur de syntaxe, le fichier doit commencer par la balise ." - -msgid "importerGraphML_error_syntax2" -msgstr "Erreur de syntaxe, le noeud ''{0}'' doit Γͺtre encapsulΓ© dans une balise ." - -msgid "importerGraphML_error_attributeclass" -msgstr "Classe d'attribut non trouvΓ© ou inconnu pour l'attribut ''{0}''. L'attribut est ignorΓ©." - -msgid "importerGraphML_error_attributefor" -msgstr "Attribut ''for'' manquant ou inconnu pour l'attribut ''{0}''. L'attribut est ignorΓ©." - -msgid "importerGraphML_error_attributetype1" -msgstr "Type manquant pour l'attribut ''{0}''. 'string' est utilisΓ© par dΓ©faut." - -msgid "importerGraphML_error_attributetype2" -msgstr "Type non reconnu pour l'attribut ''{0}''. L'attribut est ignorΓ©." - -msgid "importerGraphML_error_attributedefault" -msgstr "Valeur par dΓ©faut de l'attribut ''{0}'' non convertible vers le type ''{1}''." - -msgid "importerGraphML_error_attributecolumn_exist" -msgstr "L'attribut d'id ''{0}' existant dΓ©jΓ , il est ignorΓ©." - -msgid "importerGraphML_error_attributeempty" -msgstr "Erreur de parcours des attributs, id manquant." - -msgid "importerGraphML_log_nodeproperty" -msgstr "PropriΓ©tΓ© de noeud trouvΓ© : {0}" - -msgid "importerGraphML_log_edgeproperty" -msgstr "PropriΓ©tΓ© de lien trouvΓ© : {0}" - -msgid "importerGraphML_log_nodeattribute" -msgstr "Attribut de noeud trouvΓ© : ''{0}'' ({1})." - -msgid "importerGraphML_log_edgeattribute" -msgstr "Attribut de lien trouvΓ© : ''{0}'' ({1})." - -msgid "importerGraphML_log_default" -msgstr "Valeur d'attribut par dΓ©faut : ''{0}'' ({1})" - -msgid "importerGraphML_error_datakey" -msgstr "ClΓ© de donnΓ©e manquante pour l'Γ©lΓ©ment id={0}." - -msgid "importerGraphML_error_datavalue" -msgstr "Erreur de typage pour la valeur {0} de l'Γ©lΓ©ment id={1}. La valeur ne peut Γͺtre affectΓ©e Γ  l'attribut ''{2}''." - -msgid "importerGraphML_error_nodeid" -msgstr "Identifiant de noeud manquant. Le noeud est ignorΓ©." - -msgid "importerGraphML_error_defaultedgetype" -msgstr "Type de lien par dΓ©faut ''{0}'' non reconnu. Mis Γ  ''mixed'' par dΓ©faut." - -msgid "importerGraphML_error_edgetype" -msgstr "Le type ''{0}'' du lien ''{1}'' n'est pas reconnu. Il est mis Γ  la valeur par dΓ©faut." - -msgid "importerGML_error_nodeidmissing" -msgstr "Identifiant de noeud manquant." - -msgid "importerGML_error_directedgraphparse" -msgstr "Valeur inattendue pour la propriΓ©tΓ© de graphe 'directed'." - -msgid "importerGML_error_directedparse" -msgstr "Valeur inattendue pour la propriΓ©tΓ© 'directed' du lien ''{0}''." - -msgid "importerGML_error_badparsing" -msgstr "Parsing GML invalide." - -msgid "importerTPL_error_badparsing" -msgstr "Parsing TLP invalide." - -msgid "importerGEXF_error_attributeclass" -msgstr "Attribut ''class'' manquant ou inconnu pour l'attribut ''{0}''. L'attribut est ignorΓ©." - -msgid "importerGEXF_error_attributeempty" -msgstr "Erreur de parcours des attributs, id manquant." - -msgid "importerGEXF_error_attributedefault" -msgstr "Valeur par dΓ©faut de l'attribut ''{0}'' non convertible vers le type ''{1}''." - -msgid "importerGEXF_error_attributeoptions" -msgstr "Valeurs d'option de l'attribut ''{0}'' non convertibles vers le type ''{1}''." - -msgid "importerGEXF_error_attributecolumn_exist" -msgstr "Attribut d'id ''{0}'' dΓ©jΓ  existant, il est ignorΓ©." - -msgid "importerGEXF_error_attributetype1" -msgstr "Type de l'attribut ''{0}'' introuvable. 'string' est utilisΓ© par dΓ©faut." - -msgid "importerGEXF_error_attributetype2" -msgstr "Type de l'attribut ''{0}'' non reconnu. L'attribut est ignorΓ©." - -msgid "importerGEXF_error_datakey" -msgstr "ClΓ© de donnΓ©e (attribut ''for'') manquant pour l'Γ©lΓ©ment id={0}." - -msgid "importerGEXF_error_datakey1" -msgstr "ClΓ© de donnΓ©e (attribut ''id'') manquant pour l'Γ©lΓ©ment id={0}." - -msgid "importerGEXF_error_dataoptionsvalue" -msgstr "La valeur de donnΓ©e ''{0}'' n'est pas une option pour l'Γ©lΓ©ment id={1}. La valeur ne peut Γͺtre affectΓ©e Γ  l'attribut ''{2}''." - -msgid "importerGEXF_error_datavalue" -msgstr "Mauvais type de donnΓ©e pour la valeur ''{0}'' de l'Γ©lΓ©ment id={1}. La valeur ne peut Γͺtre affectΓ©e Γ  l'attribut ''{2}''." - -msgid "importerGEXF_error_defaultedgetype" -msgstr "Type de liens par dΓ©faut ''{0}'' inconnu. Type ''undirected'' utilisΓ© par dΓ©faut." - -msgid "importerGEXF_error_edgedouble" -msgstr "Type de liens ''double'' actuellement non supportΓ©. Type ''mixed'' utilisΓ© par dΓ©faut." - -msgid "importerGEXF_error_edgetype" -msgstr "Type ''{0}'' du lien ''{1}'' inconnu. Valeur par dΓ©faut utilisΓ©e Γ  la place." - -msgid "importerGEXF_error_edgeid" -msgstr "Identifiant de lien manquant. Un id a Γ©tΓ© gΓ©nΓ©rΓ©." - -msgid "importerGEXF_error_edgesource" -msgstr "Source du lien manquant. Le lien est ignorΓ©." - -msgid "importerGEXF_error_edgetarget" -msgstr "Destination du lien manquant. Le lien est ignorΓ©." - -msgid "importerGEXF_error_edgeweight" -msgstr "Le poids du lien ''{0}'' n'est pas de type float. Le poids est ignorΓ©." - -msgid "importerGEXF_error_nodeid" -msgstr "Identifiant du noeud ''{0}'' manquant. Le noeud est ignorΓ©." - -msgid "importerGEXF_error_nodeposition" -msgstr "Position du noeud ''{0}'' erronΓ©e Γ  ''{1}'' (pas de type float)" - -msgid "importerGEXF_error_nodesize" -msgstr "Taille du noeud ''{0}'' erronΓ©e (pas de type float)" - -msgid "importerGEXF_error_notnode" -msgstr "Element ''{0}'' n'est pas un noeud. ElΓ©ment ignorΓ©." - -msgid "importerGEXF_error_pid_notfound" -msgstr "Parent de pid ''{0}'' introuvable pour le noeud ''{1}''." - -msgid "importerGEXF_error_parsingdatetype" -msgstr "Type de date ''{0}'' inconnu. Type ''date'' utilisΓ© par dΓ©faut." - -msgid "importerGEXF_error_parsingmode" -msgstr "Mode de parsing ''{0}'' inconnu. Mode ''static'' utilisΓ© pa dΓ©faut." - -msgid "importerGEXF_error_node_timeinterval_parseerror" -msgstr "Intervalle de temps du noeud ''{0}'' non analysΓ©. Utilisez le format Date ou Double." - -msgid "importerGEXF_error_edge_timeinterval_parseerror" -msgstr "Intervalle de temps du lien ''{0}'' non analysΓ©. Utilisez le format Date ou Double." - -msgid "importerGEXF_error_nodeattribute_timeinterval_parseerror" -msgstr "Intervalle de temps de l'attribut du noeud ''{0}'' non analysΓ©. Utilisez le format Date ou Double." - -msgid "importerGEXF_error_edgeattribute_timeinterval_parseerror" -msgstr "Intervalle de temps de l'attribut du lien ''{0}'' non analysΓ©. Utilisez le format Date ou Double." - -msgid "importerGEXF_error_nodecolorvalue" -msgstr "Canal de couleur erronΓ© ''{2}''=''{0}'' sur le noeud ''{1}''. Devrait Γͺtre 0 < ''{2}'' < 255." - -msgid "importerGEXF_error_edgecolorvalue" -msgstr "Canal de couleur erronΓ© ''{2}''=''{0}'' sur le lien ''{1}''. Devrait Γͺtre 0 < ''{2}'' < 255." - -msgid "importerGEXF_error_nodeopacityvalue" -msgstr "Transparence erronΓ©e a=''{0}'' sur le noeud ''{1}''. DevraΓt Γͺtre 0.0 < a < 1.0." - -msgid "importerGEXF_error_edgeopacityvalue" -msgstr "Transparence erronΓ©e a=''{0}'' sur le lien ''{1}''. DevraΓt Γͺtre 0.0 < a < 1.0." - -msgid "importerGEXF_log_edgeeproperty" -msgstr "PropriΓ©tΓ© de lien trouvΓ©e : {0}" - -msgid "importerGEXF_log_nodeproperty" -msgstr "PropriΓ©tΓ© de noeud trouvΓ©e : {0}" - -msgid "importerGEXF_log_edgeattribute" -msgstr "Attribut de lien trouvΓ© : ''{0}'' ({1})" - -msgid "importerGEXF_log_nodeattribute" -msgstr "Attribut de noeud trouvΓ© : ''{0}'' ({1})" - -msgid "importerGEXF_log_default" -msgstr "Valeur d'attribut par dΓ©faut trouvΓ©e : ''{0}'' ({1})" - -msgid "importerGEXF_log_options" -msgstr "Options d'attribut trouvΓ©es : ''{0}'' ({1})" - -msgid "importerGEXF_log_version10" -msgstr "GEXF version 1.0 (dΓ©sapprouvΓ©)" - -msgid "importerGEXF_log_version11" -msgstr "GEXF version 1.1" - -msgid "importerGEXF_log_version12" -msgstr "GEXF version 1.2" - -msgid "importerGEXF_log_version13" -msgstr "" - -msgid "importerGEXF_log_version_undef" -msgstr "" - -msgid "importerGEXF_log_dynamic_weight" -msgstr "Colonne de poids dynamique trouvΓ©." - -msgid "importerDL_error_firstline" -msgstr "La premiΓ¨re ligne d'un fichier DL doit commencer par 'DL'" - -msgid "importerDL_error_unknowntag" -msgstr "RepΓ¨re d'en-tΓͺte inconnue ''{0}'" - -msgid "importerDL_error_formatmissing" -msgstr "RepΓ¨re DL 'format' manquante, 'fullmatrix' est utilisΓ© par dΓ©faut." - -msgid "importerDL_error_badformat" -msgstr "Format ''{0}'' non supportΓ©, proposez 'format=edgelist1' ou 'format=fullmatrix' uniquement." - -msgid "importerDL_error_nmissing" -msgstr "L'en-tΓͺte du ficher DL doit contenir la repΓ¨re 'n = '" - -msgid "importerDL_error_mmissing" -msgstr "L'en-tΓͺte du ficher DL doit contenir le repΓ¨re 'm = '" - -msgid "importerDL_error_labelscount" -msgstr "Nombre de labels ({0}) diffΓ©rent du repΓ¨re n ({1})" - -msgid "importerDL_error_nodata" -msgstr "Aucune ligne de donnΓ©es trouvΓ©e." - -msgid "importerDL_error_matrixrowscount" -msgstr "Nombre de lignes de matrice ({0}) plus grand que le repΓ¨re n ({1})" - -msgid "importerDL_error_matrixrowscount2" -msgstr "Nombre de lignes de matrice ({0}) plus petit que le repΓ¨re n ({1})" - -msgid "importerDL_error_matriciescount" -msgstr "Nombre d'ensembles de matrices ({0}) plus grand que le repΓ¨re nm ({1})" - -msgid "importerDL_error_matrixentriescount" -msgstr "Nombre d'entrΓ©es sur la ligne {0} de la matrice {1} plus grand que le nombre autorisΓ© (ligne {2} du fichier DL)" - -msgid "importerDL_error_weightparseerror" -msgstr "Impossible d'analyser le poids ''{0}'' sur la matrice {1} Γ  la ligne {2}" - -msgid "importerDL_error_edgelistssetscount" -msgstr "Nombre d'ensembles de listes de liens ({0}) diffΓ©rent du repΓ¨re nm ({1})" - -msgid "importerDL_error_edgelistrowparse" -msgstr "Impossible d'analyser depuis l'id ''{0}'' de la liste de liens ligne {1}" - -msgid "importerDL_error_edgeparseweight" -msgstr "Impossible d'analyser le poids ''{0}'' de la liste de liens ligne {1}" - -msgid "importerDOT_error_nothingfound" -msgstr "Aucun 'graph' ou 'digraph' trouvΓ©" - -msgid "importerDOT_error_labelunreachable" -msgstr "Impossible de trouver le label Γ  la ligne {0}" - -msgid "importerDOT_error_colorunreachable" -msgstr "Impossible de trouver la couleur Γ  la ligne {0}" - -msgid "importerDOT_error_edgeparsing" -msgstr "Impossible d'analyser le lien Γ  la ligne {0}" - -msgid "importerDOT_error_posunreachable" -msgstr "Impossible d'analyser la position du noeud Γ  la ligne {0}. Doit Γͺtre pos=\"x, y\"" - -msgid "importerDOT_error_weightunreachable" -msgstr "Impossible de lire le poids d'un lien Γ  la ligne {0}" - -msgid "importerDOT_log_nodeattribute" -msgstr "Attribut de noeud trouvΓ© '{0}'' ({1})" diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/ja.po b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/ja.po deleted file mode 100644 index a7feef7145..0000000000 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/ja.po +++ /dev/null @@ -1,379 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011-2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-12 10:08+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "fileType_GDF_Name" -msgstr "GDFフゑむル(GUESS)" - -msgid "fileType_GEXF_Name" -msgstr "GEXFフゑむル" - -msgid "fileType_NET_Name" -msgstr "NETフゑむル (Pajek)" - -msgid "fileType_GraphML_Name" -msgstr "GraphMLフゑむル" - -msgid "fileType_GML_Name" -msgstr "GMLフゑむル" - -msgid "fileType_TLP_Name" -msgstr "TLPフゑむル" - -msgid "fileType_CSV_Name" -msgstr "CSVフゑむル" - -msgid "fileType_Edges_Name" -msgstr "θΎΊγƒͺγ‚Ήγƒˆ" - -msgid "fileType_GraphViz_Name" -msgstr "GraphVizフゑむル" - -msgid "fileType_DL_Name" -msgstr "DLフゑむル(UCINET)" - -msgid "fileType_VNA_Name" -msgstr "VNAフゑむル" - -msgid "importerGDF_error_dataformat1" -msgstr "フゑむルは\"nodedef> name\"γθ‘Œγ§ε§‹γΎγ‚‹εΏ…θ¦γŒγ‚γ‚ŠγΎγ™γ€‚" - -msgid "importerGDF_error_dataformat2" -msgstr "不正γͺεˆ—γζ›ΈεΌγ€‚ε„εˆ—γ«γ―、少γͺγγ¨γ‚‚εε‰γŒε«γΎγ‚Œγ¦γ„γ‚‹εΏ…θ¦γŒγ‚γ‚ŠγΎγ™γ€‚εˆ—εγ―γ‚³γƒ³γƒžγŒε«γΎγ‚Œγ¦γ―γ„γ‘γΎγ›γ‚“γ€‚" - -msgid "importerGDF_error_dataformat3" -msgstr "γƒŽγƒΌγƒ‰''{1}''γγŸγ‚γεˆ—''{0}''γ‚’γ‚€γƒ³γƒγƒΌγƒˆγ«ε€±ζ•—γ—γΎγ—γŸγ€‚ε€€\"{2}\"γγ‚¨γƒ©γƒΌγ§γ™γ€‚" - -msgid "importerGDF_error_dataformat4" -msgstr "''{0}''ε±žζ€§γ«{2}γγŸγ‚γ«''{1}''γ‚’θ¨­εšγ™γ‚‹γγ«ε€±ζ•—γ—γΎγ—γŸγ€‚" - -msgid "importerGDF_error_dataformat5" -msgstr "データタむプ ''{0}'' はθͺθ­˜γ•γ‚ŒγΎγ›γ‚“γ€ζ–‡ε­—εˆ—γŒδ»£γ‚γ‚Šγ«δ½Ώη”¨γ•γ‚ŒγΎγ™γ€‚" - -msgid "importerGDF_error_dataformat6" -msgstr "εˆ—γεž‹γŒ'' {0} ''γŒθ¦‹γ€γ‹γ‚ŠγΎγ›γ‚“γ€ζ–‡ε­—εˆ—γŒδ»£γ‚γ‚Šγ«δ½Ώη”¨γ•γ‚ŒγΎγ™γ€‚" - -msgid "importerGDF_error_dataformat7" -msgstr "葌\"{0}\"γ«γ―γƒ˜γƒƒγƒ€γ§ζŒ‡εšγ—γŸδ»₯δΈŠγ«εˆ—γŒγ‚γ‚ŠγΎγ™γ€‚γ‚³γƒ³γƒžγζ•°γ‚’η’Ίθͺγ—てください。" - -msgid "importerGDF_error_dataformat8" -msgstr "γƒŽγƒΌγƒ‰γεˆ—は''{0}''γ‚’θΏ½εŠ γ§γγΎγ›γ‚“γ€‚γγ‚Œγ―ζ—’γ«ε­˜εœ¨γ—γΎγ™γ€‚" - -msgid "importerGDF_error_dataformat9" -msgstr "θΎΊγεˆ—は''{0}''γ‚’θΏ½εŠ γ§γγΎγ›γ‚“γ€‚γγ‚Œγ―ζ—’γ«ε­˜εœ¨γ—γΎγ™γ€‚" - -msgid "importerTPL_error_dataformat1" -msgstr "葌{0}で不正γͺθΎΊγγƒ•γ‚©γƒΌγƒžγƒƒγƒˆγ€‚" - -msgid "importerNET_error_dataformat1" -msgstr "フゑむルは\"*vertices\"γ§ε§‹γΎγ‚‹εΏ…θ¦γŒγ‚γ‚ŠγΎγ™γ€‚" - -msgid "importerNET_error_dataformat2" -msgstr "葌{0}γ§ζ€œε‡Ίγ•γ‚ŒγŸη©Ίθ‘Œ" - -msgid "importerNET_error_dataformat3" -msgstr " 葌{0}γ«δΈι‡£γ‚Šεˆγ„(γ‚γ‚‹γ„γ―ε€šιŽγŽγͺ)引用符" - -msgid "importerNET_error_dataformat4" -msgstr "ι ‚η‚Ήη•ͺ号 ''{0}'' が [1,{1}]γη―„ε›²ε€–" - -msgid "importerNET_error_dataformat5" -msgstr "葌 {0}γ§ι ‚η‚ΉεΊ§ζ¨™ε€‰ζ›γ«ε•ι‘Œγ€‚ζ΅ε‹•ε°ζ•°η‚Ήζ•°εž‹γ§γͺγ‘γ‚Œγ°γͺγ‚ŠγΎγ›γ‚“γ€‚" - -msgid "importerNET_error_dataformat6" -msgstr "{0}θ‘Œγ§ι ‚η‚Ήγγ‚΅γ‚€γ‚Ίε€‰ζ›ε•ι‘Œγ€‚ζ΅ε‹•小数点数でγͺγ‘γ‚Œγ°γͺγ‚ŠγΎγ›γ‚“γ€‚" - -msgid "importerNET_error_dataformat7" -msgstr "{0}葌で辺γι‡γΏθ§£ζžε•ι‘Œγ€‚ζ΅ε‹•小数点数でγͺγ‘γ‚Œγ°γͺγ‚ŠγΎγ›γ‚“γ€‚" - -msgid "importerGraphML_error_syntax1" -msgstr "ζ§‹ζ–‡γ‚¨γƒ©γƒΌγ€γƒ•γ‚‘γ‚€γƒ«γŒγ§ε§‹γΎγ£γ¦γ„γ‚‹εΏ…θ¦γŒγ‚γ‚ŠγΎγ™γƒžγƒΌγ‚―γ‚’γƒƒγƒ—γ€‚" - -msgid "importerGraphML_error_syntax2" -msgstr "ζ§‹ζ–‡γ‚¨γƒ©γƒΌγ€γƒŽγƒΌγƒ‰\"{0} \"γ―γƒžγƒΌγ‚―γ‚’γƒƒγƒ—ε†…γ«γƒγ‚Ήγƒˆγ•γ‚Œγ‚‹εΏ…θ¦γŒγ‚γ‚ŠγΎγ™γ€‚ " - -msgid "importerGraphML_error_attributeclass" -msgstr "ε±žζ€§γγ‚―γƒ©γ‚ΉγŒθ¦‹γ€γ‹γ‚‰γͺγ„γ‹γ€ε±žζ€§''{0}''はζœͺηŸ₯γ§γ™γ€‚ε±žζ€§γ―η„‘θ¦–γ•γ‚ŒγΎγ™γ€‚" - -msgid "importerGraphML_error_attributefor" -msgstr "ε±žζ€§γγ‚―γƒ©γ‚ΉγŒθ¦‹γ€γ‹γ‚‰γͺγ„γ‹γ€ε±žζ€§''{0}''はζœͺηŸ₯γ§γ™γ€‚ε±žζ€§γ―η„‘θ¦–γ•γ‚ŒγΎγ™γ€‚" - -msgid "importerGraphML_error_attributetype1" -msgstr "ε±žζ€§γ‚Ώγ‚€γƒ—γ―γ€ε±žζ€§''{0}''γŒθ¦‹γ€γ‹γ‚ŠγΎγ›γ‚“γ€‚γƒ‡γƒ•γ‚©γƒ«γƒˆγζ–‡ε­—εˆ—γ«θ¨­εšγ—ます。" - -msgid "importerGraphML_error_attributetype2" -msgstr "''{0}'' 'γε±žζ€§γ‚Ώγ‚€γƒ—はθͺθ­˜γ•γ‚ŒγΎγ›γ‚“γ€‚ε±žζ€§γ―η„‘θ¦–γ•γ‚ŒγΎγ™γ€‚" - -msgid "importerGraphML_error_attributedefault" -msgstr "ε±žζ€§ ''{0}'' γγƒ‡γƒ•γ‚©γƒ«γƒˆε€€γŒ''{1}'' γ‚Ώγ‚€γƒ—γ«εž‹ε€‰ζ›δΈθƒ½" - -msgid "importerGraphML_error_attributecolumn_exist" -msgstr "ID'{0}'' γ‚’ζŒγ€ε±žζ€§γ―γ™γ§γ«ε­˜εœ¨γ—γΎγ™γ€ε±žζ€§γ―η„‘θ¦–γ•γ‚ŒγΎγ™" - -msgid "importerGraphML_error_attributeempty" -msgstr "ε±žζ€§γθ§£ζžγ‚¨γƒ©γƒΌγ―、idγŒζ¬ θ½γ—γ¦γ„γΎγ™γ€‚" - -msgid "importerGraphML_log_nodeproperty" -msgstr "γƒŽγƒΌγƒ‰γγƒ—γƒ­γƒ‘γƒ†γ‚£γŒθ¦‹γ€γ‹γ‚ŠγΎγ—γŸ:{0}" - -msgid "importerGraphML_log_edgeproperty" -msgstr "θΎΊγγƒ—γƒ­γƒ‘γƒ†γ‚£γŒθ¦‹γ€γ‹γ‚ŠγΎγ—γŸ:{0}" - -msgid "importerGraphML_log_nodeattribute" -msgstr "γƒŽγƒΌγƒ‰ε±žζ€§γŒθ¦‹γ€γ‹γ‚ŠγΎγ—γŸ: ''{0}'' ({1})" - -msgid "importerGraphML_log_edgeattribute" -msgstr "θΎΊε±žζ€§γŒθ¦‹γ€γ‹γ‚ŠγΎγ—γŸ''{0}'' ({1})" - -msgid "importerGraphML_log_default" -msgstr "γƒ‡γƒ•γ‚©γƒ«γƒˆγε±žζ€§ε€€γŒθ¦‹γ€γ‹γ‚ŠγΎγ—γŸ: ''{0}'' ({1})" - -msgid "importerGraphML_error_datakey" -msgstr "要素 id={0}用γγƒ‡γƒΌγ‚Ώγ‚­γƒΌγŒζ¬ θ½γ—ています" - -msgid "importerGraphML_error_datavalue" -msgstr "要素 id={1}用γγƒ‡γƒΌγ‚Ώε€€ {0}γ‚Ώγ‚€γƒ—γ‚¨γƒ©γƒΌγ€‚ε€€γŒ ''{2}'' ε±žζ€§γ¨γ—γ¦θ¨­εšδΈθƒ½γ€‚" - -msgid "importerGraphML_error_nodeid" -msgstr "γƒŽγƒΌγƒ‰IDγŒζ¬ θ½γ—γ¦γ„γΎγ™γ€‚γƒŽγƒΌγƒ‰γ―η„‘θ¦–γ•γ‚ŒγΎγ™γ€‚" - -msgid "importerGraphML_error_defaultedgetype" -msgstr "γƒ‡γƒ•γ‚©γƒ«γƒˆγθΎΊγ‚Ώγ‚€γƒ—''{0}''がθͺθ­˜γ•γ‚Œγ¦γ„γΎγ›γ‚“γ€‚γƒ‡γƒ•γ‚©γƒ«γƒˆγ\"mixed\"に設εšγ—ます。" - -msgid "importerGraphML_error_edgetype" -msgstr " θΎΊ ''{1}''γγ‚Ώγ‚€γƒ—''{0}'' がθͺθ­˜γ•γ‚Œγ¦γ„γΎγ›γ‚“γ€‚γƒ‡γƒ•γ‚©γƒ«γƒˆγε€€γ«θ¨­εšγ—ます。" - -msgid "importerGML_error_nodeidmissing" -msgstr "γƒŽγƒΌγƒ‰IDγŒζ¬ θ½γ—γ¦γ„γΎγ™" - -msgid "importerGML_error_directedgraphparse" -msgstr "グラフ'directed'プロパティγδΊˆζœŸγ—γͺい倀" - -msgid "importerGML_error_directedparse" -msgstr "θΎΊ''{0}''γγ‚°γƒ©γƒ•'directed'プロパティγδΊˆζœŸγ—γͺい倀" - -msgid "importerGML_error_badparsing" -msgstr "η„‘εŠΉγͺGML解析" - -msgid "importerTPL_error_badparsing" -msgstr "η„‘εŠΉγͺTPL解析" - -msgid "importerGEXF_error_attributeclass" -msgstr "ε±žζ€§''クラス''γŒθ¦‹γ€γ‹γ‚‰γͺγ„γ‹γ€γΎγŸγ―ε±žζ€§'' {0} ''γγŸγ‚γ«ζœͺηŸ₯γ§γ‚γ‚‹γ€‚ε±žζ€§γ―η„‘θ¦–γ•γ‚ŒγΎγ™γ€‚" - -msgid "importerGEXF_error_attributeempty" -msgstr "ε±žζ€§γζ§‹ζ–‡θ§£ζžγ‚¨γƒ©γƒΌγ€IDγΎγŸγ―γ‚Ώγ‚€γƒ—γŒζ¬ θ½γ—γ¦γ„γΎγ™γ€‚" - -msgid "importerGEXF_error_attributedefault" -msgstr "ε±žζ€§γ―''{0}'' γγƒ‡γƒ•γ‚©γƒ«γƒˆε€€γ―'{1}''γ«εž‹ε€‰ζ›γ™γ‚‹γ“γ¨γ―γ§γγΎγ›γ‚“γ€‚" - -msgid "importerGEXF_error_attributeoptions" -msgstr "ε±žζ€§γ―''{0}'' γγ‚ͺプション倀は''{1}''γ«εž‹ε€‰ζ›γ™γ‚‹γ“γ¨γ―γ§γγΎγ›γ‚“γ€‚" - -msgid "importerGEXF_error_attributecolumn_exist" -msgstr "ID''{0}'' γ‚’ζŒγ€ε±žζ€§γ―ε­˜εœ¨γ—γΎγ™γ€‚ε±žζ€§γ―η„‘θ¦–γ•γ‚ŒγΎγ™" - -msgid "importerGEXF_error_attributetype1" -msgstr "ε±žζ€§ ''{0}''用γε±žζ€§γεž‹γŒθ¦‹γ€γ‹γ‚ŠγΎγ›γ‚“γ€‚γƒ‡γƒ•γ‚©γƒ«γƒˆγζ–‡ε­—εˆ—γ«θ¨­εšγ—ます。" - -msgid "importerGEXF_error_attributetype2" -msgstr "ID''{0}'' γε±žζ€§γεž‹γŒθͺθ­˜γ•γ‚ŒγΎγ›γ‚“γ€‚ε±žζ€§γ―η„‘θ¦–γ•γ‚ŒγΎγ™" - -msgid "importerGEXF_error_datakey" -msgstr "要素id={0}用データキー(ε±žζ€§ ''for'') γŒζ¬ θ½γ—γ¦γ„γΎγ™γ€‚" - -msgid "importerGEXF_error_datakey1" -msgstr "要素id={0}用データキー(ε±žζ€§ 'id'') γŒζ¬ θ½γ—γ¦γ„γΎγ™γ€‚" - -msgid "importerGEXF_error_dataoptionsvalue" -msgstr "データ倀''{0}''は要素id={1}用γγ‚ͺγƒ—γ‚·γƒ§γƒ³γ§γ―γ‚γ‚ŠγΎγ›γ‚“γ€‚ε€€γ―''{2}''γε±žζ€§γ¨γ—て設εšγ•γ‚ŒγΎγ›γ‚“γ€‚" - -msgid "importerGEXF_error_datavalue" -msgstr "要素{1}用γγƒ‡γƒΌγ‚Ώε€€''{0}''εž‹γ‚¨γƒ©γƒΌγ€‚ε€€γ―''{2}''γε±žζ€§γ¨γ—て設εšγ•γ‚ŒγΎγ›γ‚“γ€‚" - -msgid "importerGEXF_error_defaultedgetype" -msgstr "γƒ‡γƒ•γ‚©γƒ«γƒˆγθΎΊγη¨ι‘ž''{0}'' がθͺθ­˜γ•γ‚Œγ¦γ„γΎγ›γ‚“γ€‚γƒ‡γƒ•γ‚©γƒ«γƒˆγ\"mixed\"に設εšγ—ます。" - -msgid "importerGEXF_error_edgedouble" -msgstr "θΎΊγη¨ι‘ž''double'' γ―ηΎεœ¨γ‚΅γƒγƒΌγƒˆγ•γ‚Œγ¦γ„γΎγ›γ‚“γ€‚γƒ‡γƒ•γ‚©γƒ«γƒˆγ\"mixed\"に設εšγ—ます。" - -msgid "importerGEXF_error_edgetype" -msgstr "θΎΊ''{1}'' γεž‹''{0}''はθͺθ­˜γ•γ‚ŒγΎγ›γ‚“γ€‚γƒ‡γƒ•γ‚©γƒ«γƒˆε€€γ«θ¨­εšγ—ます。" - -msgid "importerGEXF_error_edgeid" -msgstr "θΎΊIDγŒζ¬ θ½γ—γ¦γ„γΎγ™γ€‚ IDγŒη”Ÿζˆγ•γ‚ŒγΎγ—γŸγ€‚" - -msgid "importerGEXF_error_edgesource" -msgstr "θΎΊγγ‚½γƒΌγ‚ΉγŒζ¬ θ½γ—γ¦γ„γΎγ™γ€‚θΎΊγ―η„‘θ¦–γ•γ‚ŒγΎγ™γ€‚" - -msgid "importerGEXF_error_edgetarget" -msgstr "θΎΊγγ‚ΏγƒΌγ‚²γƒƒγƒˆγŒζ¬ θ½γ—γ¦γ„γΎγ™γ€‚θΎΊγ―η„‘θ¦–γ•γ‚ŒγΎγ™γ€‚" - -msgid "importerGEXF_error_edgeweight" -msgstr "id ''{0}'' γθΎΊγι‡γΏγŒζ΅ε‹•ε°ζ•°η‚Ήεž‹γ§γ―γ‚γ‚ŠγΎγ›γ‚“γ€‚ι‡γΏγ―η„‘θ¦–γ•γ‚ŒγΎγ™γ€‚" - -msgid "importerGEXF_error_nodeid" -msgstr "γƒŽγƒΌγƒ‰IDγŒζ¬ θ½γ—γ¦γ„γΎγ™γ€‚γƒŽγƒΌγƒ‰γ―η„‘θ¦–γ•γ‚ŒγΎγ™γ€‚" - -msgid "importerGEXF_error_nodeposition" -msgstr "γƒŽγƒΌγƒ‰ ''{0}''は''{1}''上でγδ½η½γŒι–“違いです(ζ΅ε‹•ε°ζ•°η‚Ήζ•°εž‹γ§γͺい)。" - -msgid "importerGEXF_error_nodesize" -msgstr "γƒŽγƒΌγƒ‰''{0}'' γγ‚΅γ‚€γ‚ΊγŒι–“違っています(ζ΅ε‹•ε°ζ•°η‚Ήζ•°εž‹γ§γͺい)。" - -msgid "importerGEXF_error_notnode" -msgstr "要素''{0}'' γ―γƒŽγƒΌγƒ‰γ§γ―γ‚γ‚ŠγΎγ›γ‚“γ€‚θ¦η΄ γ―η„‘θ¦–γ•γ‚ŒγΎγ™γ€‚" - -msgid "importerGEXF_error_pid_notfound" -msgstr "γƒŽγƒΌγƒ‰''{1}''用γθ¦ͺγƒ—γƒ­γ‚»γ‚Ήθ­˜εˆ₯子''{0}''γŒθ¦‹γ€γ‹γ‚ŠγΎγ›γ‚“γ§γ—γŸγ€‚" - -msgid "importerGEXF_error_parsingdatetype" -msgstr "ζ—₯δ»˜εž‹''{0}'' がθͺθ­˜γ•γ‚ŒγΎγ›γ‚“γ€‚γƒ‡γƒ•γ‚©γƒ«γƒˆ''ζ—₯付''γ‚’θ¨­εšγ—ます。" - -msgid "importerGEXF_error_parsingmode" -msgstr "θ§£ζžγƒ’γƒΌγƒ‰'' {0} ''がθͺθ­˜γ•γ‚Œγ¦γ„γΎγ›γ‚“γ€‚γƒ‡γƒ•γ‚©γƒ«γƒˆ''ι™ηš„''γ‚’θ¨­εšγ—ます。" - -msgid "importerGEXF_error_node_timeinterval_parseerror" -msgstr "γƒŽγƒΌγƒ‰''{0}'γζ™‚ι–“ι–“ιš”γŒθ§£ζžγ§γγΎγ›γ‚“γ§γ—γŸγ€‚ζ—₯δ»˜γ―γ€xsd:date、xsd:dateTimeγ€γΎγŸγ―Double formattingを使用してください。" - -msgid "importerGEXF_error_edge_timeinterval_parseerror" -msgstr "θΎΊ''{0}'γζ™‚ι–“ι–“ιš”γŒθ§£ζžγ§γγΎγ›γ‚“γ§γ—γŸγ€‚ζ—₯δ»˜γ―γ€csd:date、xsd:dateTimeγ€γΎγŸγ―Double formattingを使用してください。" - -msgid "importerGEXF_error_nodeattribute_timeinterval_parseerror" -msgstr "γƒŽγƒΌγƒ‰''{0}'ε±žζ€§γζ™‚ι–“ι–“ιš”γŒθ§£ζžγ§γγΎγ›γ‚“γ§γ—γŸγ€‚ζ—₯δ»˜γ―γ€xsd:date、xsd:dateTimeγ€γΎγŸγ―Double formattingを使用してください。" - -msgid "importerGEXF_error_edgeattribute_timeinterval_parseerror" -msgstr "θΎΊ''{0}'ε±žζ€§γζ™‚ι–“ι–“ιš”γŒθ§£ζžγ§γγΎγ›γ‚“γ§γ—γŸγ€‚ζ—₯δ»˜γ―γ€xsd:date、xsd:dateTimeγ€γΎγŸγ―Double formattingを使用してください。" - -msgid "importerGEXF_error_nodecolorvalue" -msgstr "識εˆ₯子''{1}''γγƒŽγƒΌγƒ‰γ―カラーチャンネル''{2}''=''{0}''γŒι–“ι•γ£γ¦γ„γΎγ™γ€‚γγ‚Œγ―γ€0 < ''{2}'' < 255であるべきです。" - -msgid "importerGEXF_error_edgecolorvalue" -msgstr "識εˆ₯子''{1}''γθΎΊγ―カラーチャンネル''{2}''=''{0}''γŒι–“ι•γ£γ¦γ„γΎγ™γ€‚γγ‚Œγ―γ€0 < ''{2}'' < 255であるべきです。" - -msgid "importerGEXF_error_nodeopacityvalue" -msgstr "識εˆ₯子''{1}''γγƒŽγƒΌγƒ‰γ―δΈι€ιŽεΊ¦a=''{0}''γŒι–“ι•γ£γ¦γ„γΎγ™γ€‚γγ‚Œγ―γ€0.0 < a < 1.0であるべきです。" - -msgid "importerGEXF_error_edgeopacityvalue" -msgstr "識εˆ₯子''{1}''γθΎΊγ―δΈι€ιŽεΊ¦a=''{0}''γŒι–“ι•γ£γ¦γ„γΎγ™γ€‚γγ‚Œγ―γ€0.0 < a < 1.0であるべきです。" - -msgid "importerGEXF_log_edgeeproperty" -msgstr "θΎΊγγƒ—γƒ­γƒ‘γƒ†γ‚£γŒθ¦‹γ€γ‹γ‚ŠγΎγ—γŸ:{0}" - -msgid "importerGEXF_log_nodeproperty" -msgstr "γƒŽγƒΌγƒ‰γγƒ—γƒ­γƒ‘γƒ†γ‚£γŒθ¦‹γ€γ‹γ‚ŠγΎγ—γŸ:{0}" - -msgid "importerGEXF_log_edgeattribute" -msgstr "θΎΊε±žζ€§γŒθ¦‹γ€γ‹γ‚ŠγΎγ—γŸ''{0}'' ({1})" - -msgid "importerGEXF_log_nodeattribute" -msgstr "γƒŽγƒΌγƒ‰ε±žζ€§γŒθ¦‹γ€γ‹γ‚ŠγΎγ—γŸ''{0}'' ({1})" - -msgid "importerGEXF_log_default" -msgstr "γƒ‡γƒ•γ‚©γƒ«γƒˆε±žζ€§ε€€γŒθ¦‹γ€γ‹γ‚ŠγΎγ—γŸ:''{0}'' ({1})" - -msgid "importerGEXF_log_options" -msgstr "ε±žζ€§γ‚ͺγƒ—γ‚·γƒ§γƒ³γŒθ¦‹γ€γ‹γ‚ŠγΎγ—γŸ:''{0}'' ({1})" - -msgid "importerGEXF_log_version10" -msgstr "GEXF version 1.0 (ε»ƒζ­’δΊˆεš)" - -msgid "importerGEXF_log_version11" -msgstr "GEXF version 1.1" - -msgid "importerGEXF_log_version12" -msgstr "GEXFバージョン1.2" - -msgid "importerGEXF_log_version13" -msgstr "GEXF version 1.3" - -msgid "importerGEXF_log_version_undef" -msgstr " GEXFγƒγƒΌγ‚Έγƒ§γƒ³δΈζ˜Ž. パーァー 1.3 使用." - -msgid "importerGEXF_log_dynamic_weight" -msgstr "ε‹•ηš„ι‡γΏγεˆ—γŒθ¦‹γ€γ‹γ‚ŠγΎγ—γŸ" - -msgid "importerDL_error_firstline" -msgstr "DLフゑむルγζœ€εˆγθ‘Œγ―'DL'γ§ε§‹γΎγ‚‹εΏ…θ¦γŒγ‚γ‚ŠγΎγ™" - -msgid "importerDL_error_unknowntag" -msgstr "γƒ˜γƒƒγƒ€ζœͺηŸ₯γγ‚Ώγ‚°'' {0} ''" - -msgid "importerDL_error_formatmissing" -msgstr "DL 'γƒ•γ‚©γƒΌγƒžγƒƒγƒˆ' γ‚Ώγ‚°γŒγͺいγγ§γ€γƒ‡γƒ•γ‚©γƒ«γƒˆγ'fullmatrix'を使います。" - -msgid "importerDL_error_badformat" -msgstr "γƒ•γ‚©γƒΌγƒžγƒƒγƒˆ''{0}'' γ―γ‚΅γƒγƒΌγƒˆγ—γ¦γ„γΎγ›γ‚“γ€‚'format=edgelist1'か 'format=fullmatrix'かγγƒ•γ‚©γƒΌγƒžγƒƒγƒˆγγΏζδΎ›γ€‚" - -msgid "importerDL_error_nmissing" -msgstr "DLフゑむルγγƒ˜γƒƒγƒ€γ―、タグ'm = 'γŒε«γΎγ‚Œγ¦γ„γ‚‹εΏ…θ¦γŒγ‚γ‚ŠγΎγ™" - -msgid "importerDL_error_mmissing" -msgstr "DLフゑむルγγƒ˜γƒƒγƒ€γ―、タグ'm = 'γŒε«γΎγ‚Œγ¦γ„γ‚‹εΏ…θ¦γŒγ‚γ‚ŠγΎγ™" - -msgid "importerDL_error_labelscount" -msgstr "ラベル数({0})がnγγ‚Ώγ‚°({1})と異γͺγ‚‹" - -msgid "importerDL_error_nodata" -msgstr "γƒ‡γƒΌγ‚Ώγƒ©γ‚€γƒ³γŒθ¦‹γ€γ‹γ‚ŠγΎγ›γ‚“γ§γ—γŸ" - -msgid "importerDL_error_matrixrowscount" -msgstr "θ‘Œεˆ—γθ‘Œζ•°({0})がnγγ‚Ώγ‚°({1})γ‚ˆγ‚Šγ‚‚ε€§γγ„" - -msgid "importerDL_error_matrixrowscount2" -msgstr "θ‘Œεˆ—γθ‘Œζ•°({0})がnγγ‚Ώγ‚°({1})γ‚ˆγ‚Šγ‚‚ε°γ•γ„" - -msgid "importerDL_error_matriciescount" -msgstr "θ‘Œεˆ—γζˆεˆ†ζ•°({0})がnmγγ‚Ώγ‚°({1})と異γͺγ‚‹" - -msgid "importerDL_error_matrixentriescount" -msgstr "θ‘Œεˆ—{1}γθ‘Œ{0}γθ‘Œεˆ—ε…₯εŠ›γζ•°γ―θ¨±ε―γ•γ‚ŒγŸε…₯εŠ›γ‚’θΆ…γˆγ¦γ„γΎγ™γ€‚(DLフゑむルγθ‘Œ{2})" - -msgid "importerDL_error_weightparseerror" -msgstr "葌\"{2}\"γθ‘Œεˆ—{1}γι‡γΏ\"{0}\"γ‚’θ§£ζžδΈθƒ½" - -msgid "importerDL_error_edgelistssetscount" -msgstr "θΎΊγƒͺγ‚Ήγƒˆγγ‚»γƒƒγƒˆ({0})γζ•°γŒnmγ‚Ώγ‚°οΌˆ{1})とは異γͺγ‚ŠγΎγ™γ€‚" - -msgid "importerDL_error_edgelistrowparse" -msgstr "θΎΊγƒͺγ‚Ήγƒˆθ‘Œ{1}γid\"{0}\"IDγ‹γ‚‰θ§£ζžδΈθƒ½" - -msgid "importerDL_error_edgeparseweight" -msgstr "θΎΊγƒͺγ‚Ήγƒˆθ‘Œ{1}γι‡γΏ\"{0}\"γ‚’θ§£ζžδΈθƒ½" - -msgid "importerDOT_error_nothingfound" -msgstr "\"グラフ\"γ‚‚\"ζœ‰ε‘γ‚°γƒ©γƒ•\"γ‚‚θ¦‹γ€γ‹γ‚ŠγΎγ›γ‚“γ§γ—γŸ" - -msgid "importerDOT_error_labelunreachable" -msgstr "葌{0}γ§γƒ©γƒ™γƒ«γ‚’θ¦‹γ€γ‘γ‚‹γ“γ¨γŒγ§γγΎγ›γ‚“" - -msgid "importerDOT_error_colorunreachable" -msgstr "葌{0}γ§θ‰²γ‚’θ¦‹γ€γ‘γ‚‹γ“γ¨γŒγ§γγΎγ›γ‚“" - -msgid "importerDOT_error_edgeparsing" -msgstr "葌{0}γ§θΎΊγ‚’θ§£ζžδΈθƒ½" - -msgid "importerDOT_error_posunreachable" -msgstr "葌{0}γ§γƒŽγƒΌγƒ‰γδ½η½γ‚’θ§£ζžγ™γ‚‹γ“γ¨γŒγ§γγΎγ›γ‚“γ€‚ pos=\"x,y\"γε½’でγͺγ‘γ‚Œγ°γͺγ‚ŠγΎγ›γ‚“γ€‚" - -msgid "importerDOT_error_weightunreachable" -msgstr "葌{0}でγθΎΊγι‡γΏγ‚’θ§£ζžδΈθƒ½" - -msgid "importerDOT_log_nodeattribute" -msgstr "γƒŽγƒΌγƒ‰ε±žζ€§γŒθ¦‹γ€γ‹γ‚ŠγΎγ—γŸ''{0}'' ({1})" diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/org-gephi-io-importer-plugin-file.pot b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/org-gephi-io-importer-plugin-file.pot deleted file mode 100644 index d8ec3cce5c..0000000000 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/org-gephi-io-importer-plugin-file.pot +++ /dev/null @@ -1,417 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "fileType_GDF_Name" -msgstr "GDF Files (GUESS)" - -msgid "fileType_GEXF_Name" -msgstr "GEXF Files" - -msgid "fileType_NET_Name" -msgstr "NET Files (Pajek)" - -msgid "fileType_GraphML_Name" -msgstr "GraphML Files" - -msgid "fileType_GML_Name" -msgstr "GML Files" - -msgid "fileType_TLP_Name" -msgstr "TLP Files" - -msgid "fileType_CSV_Name" -msgstr "CSV Files" - -msgid "fileType_Edges_Name" -msgstr "Edge List" - -msgid "fileType_GraphViz_Name" -msgstr "GraphViz Files" - -msgid "fileType_DL_Name" -msgstr "DL Files (UCINET)" - -msgid "fileType_VNA_Name" -msgstr "VNA Files" - -msgid "importerGDF_error_dataformat1" -msgstr "The file must start with the \"nodedef> name\" line." - -msgid "importerGDF_error_dataformat2" -msgstr "" -"Bad column formatting. Each column must contains at least a name. Column " -"names must not contains any coma." - -msgid "importerGDF_error_dataformat3" -msgstr "" -"Failed to import the column ''{0}'' for node ''{1}''. Error at value ''{2}''." - -msgid "importerGDF_error_dataformat4" -msgstr "Failed to set the ''{0}'' attribute ''{1}'' for {2}." - -msgid "importerGDF_error_dataformat5" -msgstr "The data type ''{0}'' is not recognized, string is used instead." - -msgid "importerGDF_error_dataformat6" -msgstr "Column type is not found for ''{0}'', string is used instead." - -msgid "importerGDF_error_dataformat7" -msgstr "" -"Line ''{0}'' has more columns than defined in header. Please verify the " -"number of commas." - -msgid "importerGDF_error_dataformat8" -msgstr "The node column ''{0}'' can't be added because it already exists" - -msgid "importerGDF_error_dataformat9" -msgstr "The edge column ''{0}'' can't be added because it already exists" - -msgid "importerTPL_error_dataformat1" -msgstr "Bad edge formatting at line {0}." - -msgid "importerNET_error_dataformat1" -msgstr "The file must start with the \"*vertices\" line." - -msgid "importerNET_error_dataformat2" -msgstr "Blank line detected at line {0}" - -msgid "importerNET_error_dataformat3" -msgstr "Unbalanced (or too many) quote marks at line {0}" - -msgid "importerNET_error_dataformat4" -msgstr "Vertex number ''{0}'' not in the range [1,{1}]" - -msgid "importerNET_error_dataformat5" -msgstr "" -"Vertex coordinates conversion problem at line {0}. Must be float number." - -msgid "importerNET_error_dataformat6" -msgstr "Vertex size conversion problem at line {0}. Must be float number." - -msgid "importerNET_error_dataformat7" -msgstr "Edge weight parsing issue at line {0}. Must be a float number." - -msgid "importerGraphML_error_syntax1" -msgstr "Syntax error, the file must start with the markup." - -msgid "importerGraphML_error_syntax2" -msgstr "Syntax error, node ''{0}'' must be nested in a markup." - -msgid "importerGraphML_error_attributeclass" -msgstr "" -"Attribute class not found or unknown for attribute ''{0}''. The attribute is " -"ignored." - -msgid "importerGraphML_error_attributefor" -msgstr "" -"Attribute ''for'' not found or unknown for attribute ''{0}''. The attribute " -"is ignored." - -msgid "importerGraphML_error_attributetype1" -msgstr "Attribute type not found for attribute ''{0}''. Set to default string." - -msgid "importerGraphML_error_attributetype2" -msgstr "" -"Attribute type for ''{0}'' is not recognized. The attribute is ignored." - -msgid "importerGraphML_error_attributedefault" -msgstr "Attribute ''{0}'' default value cannot be cast to the ''{1}'' type." - -msgid "importerGraphML_error_attributecolumn_exist" -msgstr "Attribute with id ''{0}'' already exists, the attribute is ignored" - -msgid "importerGraphML_error_attributeempty" -msgstr "Attribute parse error, id is missing." - -msgid "importerGraphML_log_nodeproperty" -msgstr "Node property found: {0}" - -msgid "importerGraphML_log_edgeproperty" -msgstr "Edge property found: {0}" - -msgid "importerGraphML_log_nodeattribute" -msgstr "Node attribute found ''{0}'' ({1})" - -msgid "importerGraphML_log_edgeattribute" -msgstr "Edge attribute found ''{0}'' ({1})" - -msgid "importerGraphML_log_default" -msgstr "Default attribute value found: ''{0}'' ({1})" - -msgid "importerGraphML_error_datakey" -msgstr "Data key is missing for element id={0}" - -msgid "importerGraphML_error_datavalue" -msgstr "" -"Data value {0} type error for element id={1}. The value cannot be set as " -"''{2}'' attribute." - -msgid "importerGraphML_error_nodeid" -msgstr "Node id is missing. The node is ignored." - -msgid "importerGraphML_error_defaultedgetype" -msgstr "Default edge type ''{0}'' is not recognized. Set to default ''mixed''." - -msgid "importerGraphML_error_edgetype" -msgstr "" -"Type ''{0}'' of the edge ''{1}'' is not recognized. Set to default value." - -msgid "importerGML_error_nodeidmissing" -msgstr "Node id is missing" - -msgid "importerGML_error_directedgraphparse" -msgstr "Unexpected value for graph 'directed' property" - -msgid "importerGML_error_directedparse" -msgstr "Unexpected value for 'directed' property for edge ''{0}''" - -msgid "importerGML_error_badparsing" -msgstr "Invalid GML parsing" - -msgid "importerTPL_error_badparsing" -msgstr "Invalid TPL parsing" - -msgid "importerGEXF_error_attributeclass" -msgstr "" -"Attribute ''class'' not found or unknown for attribute ''{0}''. The " -"attribute is ignored." - -msgid "importerGEXF_error_attributeempty" -msgstr "Attribute parse error, id or type is missing." - -msgid "importerGEXF_error_attributedefault" -msgstr "Attribute ''{0}'' default value cannot be cast to the ''{1}'' type." - -msgid "importerGEXF_error_attributeoptions" -msgstr "Attribute ''{0}'' option values cannot be cast to the ''{1}'' type." - -msgid "importerGEXF_error_attributecolumn_exist" -msgstr "Attribute with id ''{0}'' already exists, the attribute is ignored" - -msgid "importerGEXF_error_attributetype1" -msgstr "Attribute type not found for attribute ''{0}''. Set to default string." - -msgid "importerGEXF_error_attributetype2" -msgstr "" -"Attribute type for ''{0}'' is not recognized. The attribute is ignored." - -msgid "importerGEXF_error_datakey" -msgstr "Data key (attribute ''for'') is missing for element id={0}" - -msgid "importerGEXF_error_datakey1" -msgstr "Data key (attribute ''id'') is missing for element id={0}" - -msgid "importerGEXF_error_dataoptionsvalue" -msgstr "" -"Data value ''{0}'' is not an option for element id={1}. The value cannot be " -"set as ''{2}'' attribute." - -msgid "importerGEXF_error_datavalue" -msgstr "" -"Data value ''{0}'' type error for element {1}. The value cannot be set as " -"''{2}'' attribute." - -msgid "importerGEXF_error_defaultedgetype" -msgstr "Default edge type ''{0}'' is not recognized. Set to default ''mixed''." - -msgid "importerGEXF_error_edgedouble" -msgstr "" -"Edge type ''double'' is currently not supported. Set to default ''mixed''." - -msgid "importerGEXF_error_edgetype" -msgstr "" -"Type ''{0}'' of the edge ''{1}'' is not recognized. Set to default value." - -msgid "importerGEXF_error_edgeid" -msgstr "Edge id is missing. An id has been generated." - -msgid "importerGEXF_error_edgesource" -msgstr "Edge source is missing. The edge is ignored." - -msgid "importerGEXF_error_edgetarget" -msgstr "Edge target is missing. The edge is ignored." - -msgid "importerGEXF_error_edgeweight" -msgstr "Edge weight of id ''{0}'' is not a float. Weight is ignored." - -msgid "importerGEXF_error_nodeid" -msgstr "Node id is missing. The node is ignored." - -msgid "importerGEXF_error_nodeposition" -msgstr "Node ''{0}'' has a wrong position on ''{1}'' (not a float)." - -msgid "importerGEXF_error_nodesize" -msgstr "Node ''{0}'' has a wrong size (not a float)." - -msgid "importerGEXF_error_notnode" -msgstr "Element ''{0}'' is not a node. The element is ignored." - -msgid "importerGEXF_error_pid_notfound" -msgstr "The parent pid ''{0}'' could not be found for node ''{1}''." - -msgid "importerGEXF_error_parsingdatetype" -msgstr "Date type ''{0}'' is not recognized. Set to default ''date''." - -msgid "importerGEXF_error_parsingmode" -msgstr "Parsing mode ''{0}'' is not recognized. Set to default ''static''." - -msgid "importerGEXF_error_node_timeinterval_parseerror" -msgstr "" -"The time interval for node ''{0}'' could not be parsed. Use xsd:date, xsd:" -"dateTime or Double formatting." - -msgid "importerGEXF_error_edge_timeinterval_parseerror" -msgstr "" -"The time interval for edge ''{0}'' could not be parsed. Use csd:date, xsd:" -"dateTime or Double formatting." - -msgid "importerGEXF_error_nodeattribute_timeinterval_parseerror" -msgstr "" -"The time interval for node ''{0}'' attribute could not be parsed. Use xsd:" -"date, xsd:dateTime or Double formatting." - -msgid "importerGEXF_error_edgeattribute_timeinterval_parseerror" -msgstr "" -"The time interval for edge ''{0}'' attribute could not be parsed. Use xsd:" -"date, xsd:dateTime or Double formatting." - -msgid "importerGEXF_error_nodecolorvalue" -msgstr "" -"Node of id ''{1}'' has a wrong color channel ''{2}''=''{0}''. It should be 0 " -"< ''{2}'' < 255." - -msgid "importerGEXF_error_edgecolorvalue" -msgstr "" -"Edge of id ''{1}'' has a wrong color channel ''{2}''=''{0}''. It should be 0 " -"< ''{2}'' < 255." - -msgid "importerGEXF_error_nodeopacityvalue" -msgstr "" -"Node of id ''{1}'' has a wrong opacity a=''{0}''. It should be 0.0 < a < 1.0." - -msgid "importerGEXF_error_edgeopacityvalue" -msgstr "" -"Edge of id ''{1}'' has a wrong opacity a=''{0}''. It should be 0.0 < a < 1.0." - -msgid "importerGEXF_log_edgeeproperty" -msgstr "Edge property found: {0}" - -msgid "importerGEXF_log_nodeproperty" -msgstr "Node property found: {0}" - -msgid "importerGEXF_log_edgeattribute" -msgstr "Edge attribute found ''{0}'' ({1})" - -msgid "importerGEXF_log_nodeattribute" -msgstr "Node attribute found ''{0}'' ({1})" - -msgid "importerGEXF_log_default" -msgstr "Default attribute value found: ''{0}'' ({1})" - -msgid "importerGEXF_log_options" -msgstr "Attribute Options found: ''{0}'' ({1})" - -msgid "importerGEXF_log_version10" -msgstr "GEXF version 1.0 (deprecated)" - -msgid "importerGEXF_log_version11" -msgstr "GEXF version 1.1 (deprecated)" - -msgid "importerGEXF_log_version12" -msgstr "GEXF version 1.2" - -msgid "importerGEXF_log_version13" -msgstr "GEXF version 1.3" - -msgid "importerGEXF_log_version_undef" -msgstr "Undefined GEXF version. Parser 1.3 is used." - -msgid "importerGEXF_log_dynamic_weight" -msgstr "Dynamic weight column found" - -msgid "importerDL_error_firstline" -msgstr "First line of DL file must begin with 'DL'" - -msgid "importerDL_error_unknowntag" -msgstr "Header unknown tag ''{0}''" - -msgid "importerDL_error_formatmissing" -msgstr "DL 'format' tag is missing, 'fullmatrix' is used by default" - -msgid "importerDL_error_badformat" -msgstr "" -"Format ''{0}'' is not supported, provide 'format=edgelist1' or " -"'format=fullmatrix' format only" - -msgid "importerDL_error_nmissing" -msgstr "Header of DL file must contain tag 'n = '" - -msgid "importerDL_error_mmissing" -msgstr "Header of DL file must contain tag 'm = '" - -msgid "importerDL_error_labelscount" -msgstr "Number of labels ({0}) is different from n tag ({1})" - -msgid "importerDL_error_nodata" -msgstr "No data line was found" - -msgid "importerDL_error_matrixrowscount" -msgstr "Number of matrix rows ({0}) is greater than n tag ({1})" - -msgid "importerDL_error_matrixrowscount2" -msgstr "Number of matrix rows ({0}) is less than n tag ({1})" - -msgid "importerDL_error_matriciescount" -msgstr "Number of matricies sets ({0}) is different from nm tag ({1})" - -msgid "importerDL_error_matrixentriescount" -msgstr "" -"Number of matrix entries on row {0} of matrix {1} has more than allowed " -"entries (line {2} of DL file)" - -msgid "importerDL_error_weightparseerror" -msgstr "Unable to parse weight ''{0}'' on matrix {1} on line {2}" - -msgid "importerDL_error_edgelistssetscount" -msgstr "Number of edgelist sets ({0}) is different from nm tag ({1})" - -msgid "importerDL_error_edgelistrowparse" -msgstr "Unable to parse from id ''{0}'' on edgelist line {1}" - -msgid "importerDL_error_edgeparseweight" -msgstr "Unable to parse weight ''{0}'' on edgelist line {1}" - -msgid "importerDOT_error_nothingfound" -msgstr "No 'graph' or 'digraph' was found" - -msgid "importerDOT_error_labelunreachable" -msgstr "Unable to find label at line {0}" - -msgid "importerDOT_error_colorunreachable" -msgstr "Unable to find color at line {0}" - -msgid "importerDOT_error_edgeparsing" -msgstr "Unable to parse edge at line {0}" - -msgid "importerDOT_error_posunreachable" -msgstr "Unable to parse position of node at line {0}. Must be pos=\"x, y\"." - -msgid "importerDOT_error_weightunreachable" -msgstr "Unable to parse edge's weight at line {0}" - -msgid "importerDOT_log_nodeattribute" -msgstr "Node attribute found ''{0}'' ({1})" diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/pt_BR.po b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/pt_BR.po deleted file mode 100644 index 5879299217..0000000000 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/pt_BR.po +++ /dev/null @@ -1,380 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -# CΓ©lio Faria Jr. , 2011-2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-18 11:08+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "fileType_GDF_Name" -msgstr "Arquivos GDF (GUESS)" - -msgid "fileType_GEXF_Name" -msgstr "Arquivos GEXF" - -msgid "fileType_NET_Name" -msgstr "Arquivos NET (Pajek)" - -msgid "fileType_GraphML_Name" -msgstr "Arquivos GraphML" - -msgid "fileType_GML_Name" -msgstr "Arquivos GML" - -msgid "fileType_TLP_Name" -msgstr "Arquivos TLP" - -msgid "fileType_CSV_Name" -msgstr "Arquivos CSV" - -msgid "fileType_Edges_Name" -msgstr "Lista de arestas" - -msgid "fileType_GraphViz_Name" -msgstr "Arquivos GraphViz" - -msgid "fileType_DL_Name" -msgstr "Arquivos DL (UCINET)" - -msgid "fileType_VNA_Name" -msgstr "Arquivos VNA" - -msgid "importerGDF_error_dataformat1" -msgstr "O arquivo deve comeΓ§ar com a linha \"nodedef> name\"." - -msgid "importerGDF_error_dataformat2" -msgstr "Formato incorreto de coluna. Cada coluna deve conter pelo menos um nome. Os nomes de coluna nΓ£o podem conter vΓ­rgulas." - -msgid "importerGDF_error_dataformat3" -msgstr "Falha ao importar a coluna ''{0}'' para o nΓ³ ''{1}''. Erro no valor ''{2}''." - -msgid "importerGDF_error_dataformat4" -msgstr "Falha ao definir o atributo ''{1}'' do tipo ''{0}'' para o nΓ³ {2}." - -msgid "importerGDF_error_dataformat5" -msgstr "O tipo de dados ''{0}'' nΓ£o Γ© reconhecido. SerΓ‘ utilizado o tipo 'string'." - -msgid "importerGDF_error_dataformat6" -msgstr "O tipo de coluna ''{0}'' nΓ£o Γ© reconhecido. SerΓ‘ utilizado o tipo 'string'." - -msgid "importerGDF_error_dataformat7" -msgstr "A linha ''{0}'' tem mais colunas do que as definidas no cabeΓ§alho. Por favor verifique o nΓΊmero de vΓ­rgulas." - -msgid "importerGDF_error_dataformat8" -msgstr "A coluna ''{0}'' do nΓ³ nΓ£o pode ser adicionada porque jΓ‘ existe." - -msgid "importerGDF_error_dataformat9" -msgstr "A coluna ''{0}'' da aresta nΓ£o pode ser adicionada porque jΓ‘ existe." - -msgid "importerTPL_error_dataformat1" -msgstr "Formato de aresta incorreto na linha {0}." - -msgid "importerNET_error_dataformat1" -msgstr "O arquivo deve comeΓ§ar com a linha \"* vertices\"." - -msgid "importerNET_error_dataformat2" -msgstr "Linha em branco detectada na linha {0}" - -msgid "importerNET_error_dataformat3" -msgstr "NΓΊmero de aspas desbalanceado (ou muito alto) na linha {0}" - -msgid "importerNET_error_dataformat4" -msgstr "O nΓΊmero de vΓ©rtice ''{0}'' nΓ£o estΓ‘ no intervalo [1, {1}]" - -msgid "importerNET_error_dataformat5" -msgstr "Problema de conversΓ£o de coordenadas de vΓ©rtice na linha {0}. Deve ser um nΓΊmero de ponto flutuante." - -msgid "importerNET_error_dataformat6" -msgstr "Problema de conversΓ£o de tamanho de vΓ©rtices na linha {0}. O valor deve ser um nΓΊmero de ponto flutuante." - -msgid "importerNET_error_dataformat7" -msgstr "Problema na anΓ‘lise de peso de aresta na linha {0}. O valor deve ser um nΓΊmero de ponto flutuante." - -msgid "importerGraphML_error_syntax1" -msgstr "Erro de sintaxe, o arquivo deve comeΓ§ar com a marcaΓ§Γ£o ." - -msgid "importerGraphML_error_syntax2" -msgstr "Erro de sintaxe, o nΓ³ ''{0}'' deve estar aninhado em uma marcaΓ§Γ£o ." - -msgid "importerGraphML_error_attributeclass" -msgstr "Classe de atributo nΓ£o encontrada ou desconhecida para o atributo ''{0}''. O atributo serΓ‘ ignorado." - -msgid "importerGraphML_error_attributefor" -msgstr "Atributo ''for'' nΓ£o encontrado ou desconhecido para o atributo ''{0}''. O atributo serΓ‘ ignorado." - -msgid "importerGraphML_error_attributetype1" -msgstr "Tipo de atributo nΓ£o encontrado para o atributo ''{0}''. SerΓ‘ utilizado o padrΓ£o 'string'." - -msgid "importerGraphML_error_attributetype2" -msgstr "O tipo de atributo ''{0}'' nΓ£o foi reconhecido. O atributo serΓ‘ ignorado." - -msgid "importerGraphML_error_attributedefault" -msgstr "O valor padrΓ£o do atributo ''{0}'' nΓ£o pode ser convertido para o tipo ''{1}''." - -msgid "importerGraphML_error_attributecolumn_exist" -msgstr "O atributo de id ''{0}'' jΓ‘ existe. O atributo serΓ‘ ignorado" - -msgid "importerGraphML_error_attributeempty" -msgstr "Erro de anΓ‘lise de atributo, falta id." - -msgid "importerGraphML_log_nodeproperty" -msgstr "Propriedade de nΓ³ encontrada: {0}" - -msgid "importerGraphML_log_edgeproperty" -msgstr "Propriedade de aresta encontrada: {0}" - -msgid "importerGraphML_log_nodeattribute" -msgstr "Propriedade de nΓ³ encontrada ''{0}'' ({1})" - -msgid "importerGraphML_log_edgeattribute" -msgstr "Propriedade de aresta encontrada ''{0}'' ({1})" - -msgid "importerGraphML_log_default" -msgstr "Valor de atributo padrΓ£o encontrado: ''{0}'' ({1})" - -msgid "importerGraphML_error_datakey" -msgstr "Chave de dados (atributo ''id'') nΓ£o encontrada para o elemento de id={0}" - -msgid "importerGraphML_error_datavalue" -msgstr "Erro de tipo de valor de dados {0} para o elemento de id={1}. O valor nΓ£o pode ser definido como o atributo ''{2}''." - -msgid "importerGraphML_error_nodeid" -msgstr "Identificador de nΓ³ nΓ£o encontrado. O nΓ³ serΓ‘ ignorado." - -msgid "importerGraphML_error_defaultedgetype" -msgstr "O tipo de aresta padrΓ£o ''{0}'' nΓ£o foi reconhecido. SerΓ‘ definido por padrΓ£o como ''mixed''." - -msgid "importerGraphML_error_edgetype" -msgstr "O tipo ''{0}'' da aresta ''{1}'' nΓ£o foi reconhecido. SerΓ‘ utilizado o valor padrΓ£o." - -msgid "importerGML_error_nodeidmissing" -msgstr "Falta id do nΓ³" - -msgid "importerGML_error_directedgraphparse" -msgstr "Valor inesperado para a propriedade \"dirigida\" do grafo" - -msgid "importerGML_error_directedparse" -msgstr "Valor inesperado para a propriedade \"dirigida\" da aresta ''{0}''" - -msgid "importerGML_error_badparsing" -msgstr "AnΓ‘lise GML invΓ‘lida" - -msgid "importerTPL_error_badparsing" -msgstr "AnΓ‘lise TPL invΓ‘lida" - -msgid "importerGEXF_error_attributeclass" -msgstr "Atributo ''class'' nΓ£o encontrado ou desconhecido para o atributo ''{0}''. O atributo serΓ‘ ignorado." - -msgid "importerGEXF_error_attributeempty" -msgstr "Erro de anΓ‘lise de atributo, falta id ou tipo." - -msgid "importerGEXF_error_attributedefault" -msgstr "O valor padrΓ£o do atributo ''{0}'' nΓ£o pode ser convertido para o tipo ''{1}''." - -msgid "importerGEXF_error_attributeoptions" -msgstr "Os valores de opΓ§Γ£o para o atributo ''{0}'' nΓ£o podem ser convertidos para o tipo ''{1}''." - -msgid "importerGEXF_error_attributecolumn_exist" -msgstr "O atributo de id ''{0}'' jΓ‘ existe. O atributo serΓ‘ ignorado" - -msgid "importerGEXF_error_attributetype1" -msgstr "O tipo de atributo nΓ£o foi encontrado para o atributo ''{0}''. SerΓ‘ utilizado o tipo 'string'." - -msgid "importerGEXF_error_attributetype2" -msgstr "O tipo de dados ''{0}'' nΓ£o Γ© reconhecido. O atributo serΓ‘ ignorado." - -msgid "importerGEXF_error_datakey" -msgstr "Chave de dados (atributo ''for'') nΓ£o encontrada para o elemento de id={0}" - -msgid "importerGEXF_error_datakey1" -msgstr "Chave de dados (atributo ''id'') nΓ£o encontrada para o elemento de id={0}" - -msgid "importerGEXF_error_dataoptionsvalue" -msgstr "O valor de dado ''{0}'' nΓ£o Γ© uma opΓ§Γ£o vΓ‘lida para o elemento de id={1}. O valor nΓ£o pode ser definido como o atributo ''{2}''." - -msgid "importerGEXF_error_datavalue" -msgstr "Erro de tipo de valor de dados {0} para o elemento {1}. O valor nΓ£o pode ser definido como o atributo ''{2}''." - -msgid "importerGEXF_error_defaultedgetype" -msgstr "O tipo de aresta padrΓ£o ''{0}'' nΓ£o foi reconhecido. SerΓ‘ definido por padrΓ£o como ''mixed''." - -msgid "importerGEXF_error_edgedouble" -msgstr "O tipo de aresta ''double'' nΓ£o foi reconhecido. SerΓ‘ definido para o padrΓ£o ''mixed''." - -msgid "importerGEXF_error_edgetype" -msgstr "O tipo ''{0}'' da aresta ''{1}'' nΓ£o foi reconhecido. SerΓ‘ utilizado o valor padrΓ£o." - -msgid "importerGEXF_error_edgeid" -msgstr "O identificador da aresta nΓ£o foi encontrado. SerΓ‘ utilizado um identificador gerado." - -msgid "importerGEXF_error_edgesource" -msgstr "Origem da aresta nΓ£o encontrada. A aresta serΓ‘ ignorada." - -msgid "importerGEXF_error_edgetarget" -msgstr "Destino da aresta nΓ£o encontrado. A aresta serΓ‘ ignorada." - -msgid "importerGEXF_error_edgeweight" -msgstr "O peso da aresta de id ''{0}'' nΓ£o Γ© um nΓΊmero de ponto flutuante. O peso serΓ‘ ignorado." - -msgid "importerGEXF_error_nodeid" -msgstr "Identificador de nΓ³ nΓ£o encontrado. O nΓ³ serΓ‘ ignorado." - -msgid "importerGEXF_error_nodeposition" -msgstr "PosiΓ§Γ£o do nΓ³ ''{0}'' errada em ''{1}'' (nΓ£o Γ© um nΓΊmero em ponto flutuante)." - -msgid "importerGEXF_error_nodesize" -msgstr "O tamanho nΓ³ ''{0}'' estΓ‘ incorreto (nΓ£o Γ© um nΓΊmero em ponto flutuante)." - -msgid "importerGEXF_error_notnode" -msgstr "O elemento ''{0}'' nΓ£o Γ© um nΓ³. O elemento serΓ‘ ignorado." - -msgid "importerGEXF_error_pid_notfound" -msgstr "O nΓ³ pai de pid ''{0}'' nΓ£o pode ser encontrado para o ''{1}''." - -msgid "importerGEXF_error_parsingdatetype" -msgstr "O tipo de dados ''{0}'' nΓ£o Γ© reconhecido. SerΓ‘ utilizado o padrΓ£o 'date'." - -msgid "importerGEXF_error_parsingmode" -msgstr "O modo de anΓ‘lise ''{0}'' nΓ£o Γ© reconhecido. SerΓ‘ utilizado o padrΓ£o ''static''." - -msgid "importerGEXF_error_node_timeinterval_parseerror" -msgstr "O intervalo de tempo para o nΓ³ ''{0}'' nΓ£o pode ser analisado. Use os formatos xsd: date, xsd:dateTime ou 'Double'." - -msgid "importerGEXF_error_edge_timeinterval_parseerror" -msgstr "O intervalo de tempo para a aresta ''{0}'' nΓ£o pode ser analisado. Use os formatos xsd: date, xsd:dateTime ou 'Double'." - -msgid "importerGEXF_error_nodeattribute_timeinterval_parseerror" -msgstr "O intervalo de tempo para o atributo de nΓ³ ''{0}'' nΓ£o pode ser analisado. Use os formatos xsd: date, xsd:dateTime ou 'Double'." - -msgid "importerGEXF_error_edgeattribute_timeinterval_parseerror" -msgstr "O intervalo de tempo para o atributo da aresta ''{0}'' nΓ£o pode ser analisado. Use os formatos xsd: date, xsd:dateTime ou 'Double'." - -msgid "importerGEXF_error_nodecolorvalue" -msgstr "O nΓ³ de id ''{1}'' possui um canal de cor errΓ΄neo ''{2}''=''{0}''. O valor deveria estar no intervalo 0 < ''{2}'' < 255." - -msgid "importerGEXF_error_edgecolorvalue" -msgstr "A aresta de id ''{1}'' possui um canal de cor errΓ΄neo ''{2}''=''{0}''. O valor deveria estar no intervalo 0 < ''{2}'' < 255." - -msgid "importerGEXF_error_nodeopacityvalue" -msgstr "O nΓ³ de id ''{1}'' possui uma opacidade errΓ΄nea a=''{0}''. O valor deveria estar no intervalo 0.0 < a < 1.0." - -msgid "importerGEXF_error_edgeopacityvalue" -msgstr "A aresta de id ''{1}'' possui uma opacidade errΓ΄nea a=''{0}''. O valor deveria estar no intervalo 0.0 < a < 1.0." - -msgid "importerGEXF_log_edgeeproperty" -msgstr "Propriedade de aresta encontrada: {0}" - -msgid "importerGEXF_log_nodeproperty" -msgstr "Propriedade de nΓ³ encontrada: {0}" - -msgid "importerGEXF_log_edgeattribute" -msgstr "Propriedade de aresta encontrada ''{0}'' ({1})" - -msgid "importerGEXF_log_nodeattribute" -msgstr "Propriedade de nΓ³ encontrada ''{0}'' ({1})" - -msgid "importerGEXF_log_default" -msgstr "Valor padrΓ£o de atributo encontrado: ''{0}'' ({1})" - -msgid "importerGEXF_log_options" -msgstr "OpΓ§Γ΅es de atributo encontradas: ''{0}'' ({1})" - -msgid "importerGEXF_log_version10" -msgstr "GEXF versΓ£o 1.0 (obsoleto)" - -msgid "importerGEXF_log_version11" -msgstr "GEXF versΓ£o 1.1" - -msgid "importerGEXF_log_version12" -msgstr "GEXF versΓ£o 1.2" - -msgid "importerGEXF_log_version13" -msgstr "GEXF versΓ£o 1.3" - -msgid "importerGEXF_log_version_undef" -msgstr "VersΓ£o do GEXF indefinida. Utilizando analisador 1.3." - -msgid "importerGEXF_log_dynamic_weight" -msgstr "Coluna de peso dinΓ’mico encontrada" - -msgid "importerDL_error_firstline" -msgstr "A primeira linha do arquivo DL deve comeΓ§ar com 'DL'" - -msgid "importerDL_error_unknowntag" -msgstr "MarcaΓ§Γ£o de cabeΓ§alho ''{0}'' desconhecida" - -msgid "importerDL_error_formatmissing" -msgstr "A marcaΓ§Γ£o DL 'format' nΓ£o foi encontrada. O valor padrΓ£o 'fullmatrix' serΓ‘ utilizado" - -msgid "importerDL_error_badformat" -msgstr "O formato ''{0}''nΓ£o Γ© suportado. ForneΓ§a somente 'format=edgelist1' ou 'format = fullmatrix'" - -msgid "importerDL_error_nmissing" -msgstr "O cabeΓ§alho do arquivo DL deve conter a marcaΓ§Γ£o 'n='" - -msgid "importerDL_error_mmissing" -msgstr "O cabeΓ§alho do arquivo DL deve conter a marcaΓ§Γ£o 'n='" - -msgid "importerDL_error_labelscount" -msgstr "O nΓΊmero de rΓ³tulos ({0}) Γ© diferente do especificado na marcaΓ§Γ£o n ({1})" - -msgid "importerDL_error_nodata" -msgstr "Nenhuma linha de dados foi encontrada" - -msgid "importerDL_error_matrixrowscount" -msgstr "O nΓΊmero de linhas da matriz ({0}) Γ© maior do que o especificado na marcaΓ§Γ£o n ({1})" - -msgid "importerDL_error_matrixrowscount2" -msgstr "O nΓΊmero de rΓ³tulos ({0}) Γ© menor do que o especificado na marcaΓ§Γ£o n ({1})" - -msgid "importerDL_error_matriciescount" -msgstr "O nΓΊmero de conjuntos de matrizes ({0}) Γ© diferente do especificado na marcaΓ§Γ£o nm ({1})" - -msgid "importerDL_error_matrixentriescount" -msgstr "O nΓΊmero de entradas de matriz na linha {0} da matriz {1} tem mais entradas do que o permitido (linha {2} do arquivo DL)" - -msgid "importerDL_error_weightparseerror" -msgstr "NΓ£o Γ© possΓ­vel analisar o peso ''{0}'' na matriz {1} na linha {2}" - -msgid "importerDL_error_edgelistssetscount" -msgstr "NΓΊmero de conjuntos de listas de arestas ({0}) Γ© diferente do especificado na tag nm ({1})" - -msgid "importerDL_error_edgelistrowparse" -msgstr "NΓ£o Γ© possΓ­vel analisar o id ''{0}'' na lista de arestas da linha {1}" - -msgid "importerDL_error_edgeparseweight" -msgstr "NΓ£o Γ© possΓ­vel analisar o peso ''{0}'' na lista de arestas da linha {1}" - -msgid "importerDOT_error_nothingfound" -msgstr "NΓ£o foi possΓ­vel encontrar 'graph' ou 'digraph' " - -msgid "importerDOT_error_labelunreachable" -msgstr "NΓ£o foi possΓ­vel encontrar um rΓ³tulo na linha {0}" - -msgid "importerDOT_error_colorunreachable" -msgstr "NΓ£o foi possΓ­vel encontrar uma cor na linha {0}" - -msgid "importerDOT_error_edgeparsing" -msgstr "NΓ£o foi possΓ­vel analisar uma aresta na linha {0}" - -msgid "importerDOT_error_posunreachable" -msgstr "NΓ£o foi possΓ­vel analisar a posiΓ§Γ£o do nΓ³ {0}. O formato deve ser pos=\"x, y\"." - -msgid "importerDOT_error_weightunreachable" -msgstr "NΓ£o Γ© possΓ­vel analisar o peso da aresta na linha {0} " - -msgid "importerDOT_log_nodeattribute" -msgstr "Atributo de nΓ³ encontrado ''{0}'' ({1})" diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/ru.po b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/ru.po deleted file mode 100644 index d2c545599d..0000000000 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/ru.po +++ /dev/null @@ -1,380 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -# FIRST AUTHOR , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:27+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "fileType_GDF_Name" -msgstr "GDF Files (GUESS)" - -msgid "fileType_GEXF_Name" -msgstr "GEXF Files" - -msgid "fileType_NET_Name" -msgstr "NET Files (Pajek)" - -msgid "fileType_GraphML_Name" -msgstr "GraphML Files" - -msgid "fileType_GML_Name" -msgstr "GML Files" - -msgid "fileType_TLP_Name" -msgstr "TLP Files" - -msgid "fileType_CSV_Name" -msgstr "CSV Files" - -msgid "fileType_Edges_Name" -msgstr "Бписок Ρ€Π΅Π±Ρ‘Ρ€" - -msgid "fileType_GraphViz_Name" -msgstr "GraphViz Files" - -msgid "fileType_DL_Name" -msgstr "DL Files (UCINET)" - -msgid "fileType_VNA_Name" -msgstr "VNA Files" - -msgid "importerGDF_error_dataformat1" -msgstr "Π€Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ со строки \"nodedef> name\"" - -msgid "importerGDF_error_dataformat2" -msgstr "НСвСрный Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ столбцов. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ столбСц Π΄ΠΎΠ»ΠΆΠ΅Π½ хотя Π±Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Π½Π°Π·Π²Π°Π½ΠΈΠ΅. Названия столбцов Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ запятых." - -msgid "importerGDF_error_dataformat3" -msgstr "ΠΠ΅ΡƒΠ΄Π°Π»ΠΎΡΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚ столбца ''{0}'' для ΡƒΠ·Π»Π° ''{1}''. Ошибка ΠΏΡ€ΠΈ Ρ‡Ρ‚Π΅Π½ΠΈΠΈ значСния ''{2}''" - -msgid "importerGDF_error_dataformat4" -msgstr "НС ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ''{0}'' Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ''{1}'' для ''{2}''." - -msgid "importerGDF_error_dataformat5" -msgstr "НС ΡƒΠ΄Π°Π»ΠΎΡΡŒ Ρ€Π°ΡΠΏΠΎΠ·Π½Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Π΄Π°Π½Π½Ρ‹Ρ… ''{0}'', Π±ΡƒΠ΄Π΅Ρ‚ использован строковой Ρ‚ΠΈΠΏ." - -msgid "importerGDF_error_dataformat6" -msgstr "Π’ΠΈΠΏ столбца Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ для ''{0}'', Π±ΡƒΠ΄Π΅Ρ‚ использован строковой Ρ‚ΠΈΠΏ." - -msgid "importerGDF_error_dataformat7" -msgstr "Π‘Ρ‚Ρ€ΠΎΠΊΠ° ''{0}'' ΠΈΠΌΠ΅Π΅Ρ‚ большС столбцов, Ρ‡Π΅ΠΌ Π±Ρ‹Π»ΠΎ Π·Π°Π΄Π°Π½ΠΎ Π² Π½Π°Ρ‡Π°Π»Π΅ Ρ„Π°ΠΉΠ»Π°. ΠŸΠΎΠΆΠ°Π»ΡƒΠΉΡΡ‚Π°, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡŒΡ‚Π΅ количСство запятых Π² строкС." - -msgid "importerGDF_error_dataformat8" -msgstr "Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ† ''{0}'' ΡƒΠΆΠ΅ сущСствуСт ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ с ΡƒΠ·Π»Π°ΠΌΠΈ." - -msgid "importerGDF_error_dataformat9" -msgstr "Π‘Ρ‚ΠΎΠ»Π±Π΅Ρ† ''{0}'' ΡƒΠΆΠ΅ сущСствуСт ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ Π² Ρ‚Π°Π±Π»ΠΈΡ†Ρƒ с Ρ€Ρ‘Π±Ρ€Π°ΠΌΠΈ." - -msgid "importerTPL_error_dataformat1" -msgstr "ΠΠ΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ Ρ€Π΅Π±Ρ€Π° Π² строкС {0}." - -msgid "importerNET_error_dataformat1" -msgstr "НазваниС Ρ„Π°ΠΉΠ»Π° Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ со строки \"*vertices\"" - -msgid "importerNET_error_dataformat2" -msgstr "Π‘Ρ‚Ρ€ΠΎΠΊΠ° с Π½ΠΎΠΌΠ΅Ρ€ {0} Π½Π΅ содСрТит Π΄Π°Π½Π½Ρ‹Ρ… (пуста)" - -msgid "importerNET_error_dataformat3" -msgstr "НСчётноС количСство (ΠΈΠ»ΠΈ слишком ΠΌΠ½ΠΎΠ³ΠΎ) ΠΊΠ°Π²Ρ‹Ρ‡Π΅ΠΊ Π² строкС {0}" - -msgid "importerNET_error_dataformat4" -msgstr "НомСр ΡƒΠ·Π»Π° ''{0}'' Π½Π΅ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π»Π΅ [1,{1}]" - -msgid "importerNET_error_dataformat5" -msgstr "НС ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΡΠΊΠΎΠ½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ ΡƒΠ·Π»Π° Π² строкС {0}. ΠšΠΎΠΎΡ€Π΄ΠΈΠ½Π°Ρ‚Ρ‹ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ числами." - -msgid "importerNET_error_dataformat6" -msgstr "ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° прСобразования Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΡƒΠ·Π»Π° Π² строкС {0}. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ вСщСствСнный Ρ‚ΠΈΠΏ." - -msgid "importerNET_error_dataformat7" -msgstr "ΠŸΡ€ΠΎΠ±Π»Π΅ΠΌΠ° прСобразования Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Ρ€Π΅Π±Ρ€Π° Π² строкС {0}. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ вСщСствСнный Ρ‚ΠΈΠΏ." - -msgid "importerGraphML_error_syntax1" -msgstr "БинтаксичСская ошибка, Ρ„Π°ΠΉΠ» Π΄ΠΎΠ»ΠΆΠ΅Π½ Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с тэга ." - -msgid "importerGraphML_error_syntax2" -msgstr "БинтаксичСская ошибка, ΡƒΠ·Π΅Π» ''{0}'' Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ Π²Ρ‹Π΄Π΅Π»Π΅Π½ тэгом ." - -msgid "importerGraphML_error_attributeclass" -msgstr "НС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½ класс ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ° ΠΈΠ»ΠΈ нСизвСстный ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ ''{0}''. ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½." - -msgid "importerGraphML_error_attributefor" -msgstr "ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ ''for'' Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ ΠΈΠ»ΠΈ нСивСстный ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ ''{0}''. ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½." - -msgid "importerGraphML_error_attributetype1" -msgstr "Π’ΠΈΠΏ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ° ''{0}'' Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½. ΠŸΡ€ΠΈΠ½ΡΡ‚ строковой Ρ‚ΠΈΠΏ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ." - -msgid "importerGraphML_error_attributetype2" -msgstr "Π’ΠΈΠΏ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ° ''{0}'' Π½Π΅ распознан. ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½." - -msgid "importerGraphML_error_attributedefault" -msgstr "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ° ''{0}'' Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΈΠΏΠ° ''{1}''." - -msgid "importerGraphML_error_attributecolumn_exist" -msgstr "ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ с id ''{0}'' ΡƒΠΆΠ΅ сущСствуСт, ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½." - -msgid "importerGraphML_error_attributeempty" -msgstr "НС ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ, Π½Π΅ Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ id." - -msgid "importerGraphML_log_nodeproperty" -msgstr "НайдСно свойство ΡƒΠ·Π»Π°: {0}" - -msgid "importerGraphML_log_edgeproperty" -msgstr "НайдСно свойство Ρ€Π΅Π±Ρ€Π°: {0}" - -msgid "importerGraphML_log_nodeattribute" -msgstr "НайдСн ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ ΡƒΠ·Π»Π° ''{0}'' ({1})" - -msgid "importerGraphML_log_edgeattribute" -msgstr "НайдСн ΠΏΡ€ΠΈΠ·Π½Π°ΠΊ Ρ€Π΅Π±Ρ€Π° ''{0}'' ({1})" - -msgid "importerGraphML_log_default" -msgstr "НайдСно Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ: ''{0}'' ({1})" - -msgid "importerGraphML_error_datakey" -msgstr "ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ ΠΊΠ»ΡŽΡ‡ Π΄Π°Π½Π½Ρ‹Ρ… для элСмСнта с id={0}" - -msgid "importerGraphML_error_datavalue" -msgstr "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ {0} Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° для элСмСнта с id={1}. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ²Π»ΡΡ‚ΡŒΡΡ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠΌ ''{2}''" - -msgid "importerGraphML_error_nodeid" -msgstr "ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ id ΡƒΠ·Π»Π°. Π£Π·Π΅Π» Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½." - -msgid "importerGraphML_error_defaultedgetype" -msgstr "Π’ΠΈΠΏ Ρ€Π΅Π±Ρ€Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ''{0}'' Π½Π΅ распознан. ΠŸΡ€ΠΈΠ½ΡΡ‚ ''mixed''." - -msgid "importerGraphML_error_edgetype" -msgstr "Π’ΠΈΠΏ ''{0}'' для Ρ€Π΅Π±Ρ€Π° ''{1}'' Π½Π΅ распознан. ΠŸΡ€ΠΈΠ½ΡΡ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ." - -msgid "importerGML_error_nodeidmissing" -msgstr "ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ id ΡƒΠ·Π»Π°" - -msgid "importerGML_error_directedgraphparse" -msgstr "НСвСрноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„Π°." - -msgid "importerGML_error_directedparse" -msgstr "Π Π΅Π±Ρ€ΠΎ ''{0}'' ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅Π²Π΅Ρ€Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π³Ρ€Π°Ρ„Π°" - -msgid "importerGML_error_badparsing" -msgstr "Ошибка чтСния GML" - -msgid "importerTPL_error_badparsing" -msgstr "Ошибка чтСния TPL" - -msgid "importerGEXF_error_attributeclass" -msgstr "ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ ''class'' Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ ΠΈΠ»ΠΈ нСизвСстСн для Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ''{0}''. ΠŸΡ€ΠΈΠ·Π½Π°ΠΊ ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½." - -msgid "importerGEXF_error_attributeempty" -msgstr "Ошибка чтСния Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°, id ΠΈΠ»ΠΈ type ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½Ρ‹." - -msgid "importerGEXF_error_attributedefault" -msgstr "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ''{0}'' Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΈΠΏΠ° ''{1}''." - -msgid "importerGEXF_error_attributeoptions" -msgstr "ΠžΠΏΡ†ΠΈΠΈ ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ° ''{0}'' Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ Ρ‚ΠΈΠΏΠ° ''{1}''." - -msgid "importerGEXF_error_attributecolumn_exist" -msgstr "Атрибут с id ''{0}'' ΡƒΠΆΠ΅ сущСствуСт, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½" - -msgid "importerGEXF_error_attributetype1" -msgstr "Для Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° \"{0}\" Π½Π΅ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ Ρ‚ΠΈΠΏ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π°. УстановлСн ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠ°ΠΊ string." - -msgid "importerGEXF_error_attributetype2" -msgstr "Π’ΠΈΠΏ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ''{0}'' Π½Π΅ распознан. Атрибут ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½." - -msgid "importerGEXF_error_datakey" -msgstr "ΠšΠ»ΡŽΡ‡ Π΄Π°Π½Π½Ρ‹Ρ… (Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ''for'') Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ для элСмСнта с id={0}" - -msgid "importerGEXF_error_datakey1" -msgstr "ΠšΠ»ΡŽΡ‡ Π΄Π°Π½Π½Ρ‹Ρ… (Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ''id'') Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½ для элСмСнта с id={0}" - -msgid "importerGEXF_error_dataoptionsvalue" -msgstr "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ''{0}'' Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ принято для элСмСнта с id={1}. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСно для ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ° ''{2}''." - -msgid "importerGEXF_error_datavalue" -msgstr "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ''{0}'' ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ‚ΠΈΠΏ для элСмСнта с id={1}. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ установлСно для ΠΏΡ€ΠΈΠ·Π½Π°ΠΊΠ° ''{2}''." - -msgid "importerGEXF_error_defaultedgetype" -msgstr "Π’ΠΈΠΏ Ρ€Π΅Π±Ρ€Π° ''{0}'' Π½Π΅ распознан. УстановлСн Ρ‚ΠΈΠΏ ''mixed''." - -msgid "importerGEXF_error_edgedouble" -msgstr "На Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Ρ‚ΠΈΠΏ Ρ€Π΅Π±Ρ€Π° ''double'' Π½Π΅ поддСрТиваСтся. УстановлСн Ρ‚ΠΈΠΏ ''mixed''." - -msgid "importerGEXF_error_edgetype" -msgstr "Π’ΠΈΠΏ ''{0}'' Ρ€Π΅Π±Ρ€Π° ''{1}'' Π½Π΅ распознан. ΠŸΡ€ΠΈΠ½ΡΡ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ." - -msgid "importerGEXF_error_edgeid" -msgstr "ΠŸΡ€ΠΎΠΏΡƒΡ‰Π΅Π½ΠΎ id Ρ€Π΅Π±Ρ€Π°. ID сгСнСрировано автоматичСски." - -msgid "importerGEXF_error_edgesource" -msgstr "Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ Ρ€Π΅Π±Ρ€Π° отсутствуСт. Π Π΅Π±Ρ€ΠΎ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ." - -msgid "importerGEXF_error_edgetarget" -msgstr "ΠŸΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ Ρ€Π΅Π±Ρ€Π° отсутствуСт. Π Π΅Π±Ρ€ΠΎ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ." - -msgid "importerGEXF_error_edgeweight" -msgstr "ВСс Ρ€Π΅Π±Ρ€Π° с id ''{0}'' Π½Π΅ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ вСса ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ." - -msgid "importerGEXF_error_nodeid" -msgstr "НС Ρ…Π²Π°Ρ‚Π°Π΅Ρ‚ id ΡƒΠ·Π»Π°. Π£Π·Π΅Π» ΠΏΡ€ΠΎΠΏΡƒΡ‰Π΅Π½." - -msgid "importerGEXF_error_nodeposition" -msgstr "Π£Π·Π΅Π» ''{0}'' ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅Π²Π΅Ρ€Π½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π½Π° ''{1}'' (Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число)." - -msgid "importerGEXF_error_nodesize" -msgstr "Π£Π·Π΅Π» ''{0}'' ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ (Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ число)." - -msgid "importerGEXF_error_notnode" -msgstr "Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ ''{0}'' Π½Π΅ являСтся ΡƒΠ·Π»ΠΎΠΌ. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Π½." - -msgid "importerGEXF_error_pid_notfound" -msgstr "НС удаётся ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠΈΡ‚ΡŒ Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ pid \"{0}\" для ΡƒΠ·Π»Π° \"{1}\"." - -msgid "importerGEXF_error_parsingdatetype" -msgstr "Π’ΠΈΠΏ Π΄Π°Ρ‚Ρ‹ \"{0}\" Π½Π΅ распознан. УстановлСн ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠ°ΠΊ \"date\"." - -msgid "importerGEXF_error_parsingmode" -msgstr "Π Π΅ΠΆΠΈΠΌ парсинга \"{0}\" Π½Π΅ распознан. УстановлСн ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, ΠΊΠ°ΠΊ static" - -msgid "importerGEXF_error_node_timeinterval_parseerror" -msgstr "Π’Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» для ΡƒΠ·Π»Π° \"{0}\" Π½Π΅ распознан. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ xsd:date, xsd:dateTime ΠΈΠ»ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΊ Double." - -msgid "importerGEXF_error_edge_timeinterval_parseerror" -msgstr "Π’Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» для Ρ€Π΅Π±Ρ€Π° \"{0}\" Π½Π΅ распознан. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ xsd:date, xsd:dateTime ΠΈΠ»ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΊ Double." - -msgid "importerGEXF_error_nodeattribute_timeinterval_parseerror" -msgstr "Π’Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» для Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΡƒΠ·Π»Π° \"{0}\" Π½Π΅ распознан. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ xsd:date, xsd:dateTime ΠΈΠ»ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΊ Double." - -msgid "importerGEXF_error_edgeattribute_timeinterval_parseerror" -msgstr "Π’Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» для Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° Ρ€Π΅Π±Ρ€Π° \"{0}\" Π½Π΅ распознан. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ xsd:date, xsd:dateTime ΠΈΠ»ΠΈ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠ°ΠΊ Double." - -msgid "importerGEXF_error_nodecolorvalue" -msgstr "Π£Π·Π΅Π» с id \"{1}\" ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅Π²Π΅Ρ€Π½ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΠΊΠ°Π½Π°Π» \"{2}\"=\"{0}\". НСобходимо, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΎΡΡŒ условиС 0 < \"{2}\" < 255." - -msgid "importerGEXF_error_edgecolorvalue" -msgstr "Π Π΅Π±Ρ€ΠΎ с id \"{1}\" ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅Π²Π΅Ρ€Π½ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ Ρ†Π²Π΅Ρ‚ΠΎΠ²ΠΎΠΉ ΠΊΠ°Π½Π°Π» \"{2}\"=\"{0}\". НСобходимо, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΎΡΡŒ условиС 0 < \"{2}\" < 255." - -msgid "importerGEXF_error_nodeopacityvalue" -msgstr "Π£Π·Π΅Π» с id \"{1}\" ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅Π²Π΅Ρ€Π½ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ a=\"{0}\". НСобходимо, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΎΡΡŒ условиС 0.0 < a < 1.0." - -msgid "importerGEXF_error_edgeopacityvalue" -msgstr "Π Π΅Π±Ρ€ΠΎ с id \"{1}\" ΠΈΠΌΠ΅Π΅Ρ‚ Π½Π΅Π²Π΅Ρ€Π½ΠΎ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ a=\"{0}\". НСобходимо, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΠ»ΠΎΡΡŒ условиС 0.0 < a < 1.0." - -msgid "importerGEXF_log_edgeeproperty" -msgstr "НайдСно свойство Ρ€Π΅Π±Ρ€Π°: \"{0}\"" - -msgid "importerGEXF_log_nodeproperty" -msgstr "НайдСно свойство ΡƒΠ·Π»Π°: \"{0}\"" - -msgid "importerGEXF_log_edgeattribute" -msgstr "НайдСн Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ Ρ€Π΅Π±Ρ€Π° \"{0}\" ({1})" - -msgid "importerGEXF_log_nodeattribute" -msgstr "НайдСн Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΡƒΠ·Π»Π° \"{0}\" ({1})" - -msgid "importerGEXF_log_default" -msgstr "НайдСн Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ \"{0}\" ({1})" - -msgid "importerGEXF_log_options" -msgstr "НайдСны свойства Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° \"{0}\" ({1})" - -msgid "importerGEXF_log_version10" -msgstr "GEXF version 1.0 (deprecated)" - -msgid "importerGEXF_log_version11" -msgstr "GEXF version 1.1" - -msgid "importerGEXF_log_version12" -msgstr "GEXF version 1.2" - -msgid "importerGEXF_log_version13" -msgstr "" - -msgid "importerGEXF_log_version_undef" -msgstr "" - -msgid "importerGEXF_log_dynamic_weight" -msgstr "НайдСна ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° динамичСских вСсов " - -msgid "importerDL_error_firstline" -msgstr "ΠŸΠ΅Ρ€Π²Π°Ρ строка Ρ„Π°ΠΉΠ»Π° Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° DL Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°Ρ‡ΠΈΠ½Π°Ρ‚ΡŒΡΡ с 'DL'" - -msgid "importerDL_error_unknowntag" -msgstr "НСизвСстный тэг Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° \"{0}\"" - -msgid "importerDL_error_formatmissing" -msgstr "ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ тэг 'format', ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ 'fullmatrix'" - -msgid "importerDL_error_badformat" -msgstr "Π€ΠΎΡ€ΠΌΠ°Ρ‚ \"{0}\" Π½Π΅ поддСрТиваСтся. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ 'format=edgelist1' ΠΈΠ»ΠΈ 'format=fullmatrix'" - -msgid "importerDL_error_nmissing" -msgstr "Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ DL-Ρ„Π°ΠΉΠ»Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ тэг 'n = '" - -msgid "importerDL_error_mmissing" -msgstr "Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ DL-Ρ„Π°ΠΉΠ»Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ тэг 'm = '" - -msgid "importerDL_error_labelscount" -msgstr "Число ΠΌΠ΅Ρ‚ΠΎΠΊ ({0}) отличаСтся ΠΎΡ‚ значСния Π² тэгС 'n = ' ({1})" - -msgid "importerDL_error_nodata" -msgstr "НС Π½Π°ΠΉΠ΄Π΅Π½Π° строка с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ" - -msgid "importerDL_error_matrixrowscount" -msgstr "Число строк ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ({0}) большС, Ρ‡Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² тэгС 'n = ' ({1})" - -msgid "importerDL_error_matrixrowscount2" -msgstr "Число строк ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ ({0}) мСньшС, Ρ‡Π΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² тэгС 'n = ' ({1})" - -msgid "importerDL_error_matriciescount" -msgstr "ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ matricies sets ({0}) отличаСтся ΠΎΡ‚ значСния тэга nm ({1})" - -msgid "importerDL_error_matrixentriescount" -msgstr "Число записСй Π² строк {0} ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Ρ‹ {1} большС, Ρ‡Π΅ΠΌ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠ΅ (строка {2} Π² DL-Ρ„Π°ΠΉΠ»Π΅)" - -msgid "importerDL_error_weightparseerror" -msgstr "НС удаётся Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ вСс \"{0}\" Π² ΠΌΠ°Ρ‚Ρ€ΠΈΡ†Π΅ {1} Π² строкС {2}" - -msgid "importerDL_error_edgelistssetscount" -msgstr "ΠšΠΎΠ»ΠΈΡ‡Π΅ΡΡ‚Π²ΠΎ edgelist sets ({0}) отличаСтся ΠΎΡ‚ значСния тэга nm ({1})" - -msgid "importerDL_error_edgelistrowparse" -msgstr "НС удаётся Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ id \"{0}\" Π² спискС Ρ€Π΅Π±Π΅Ρ€ Π² строкС {1}" - -msgid "importerDL_error_edgeparseweight" -msgstr "НС удаётся Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ вСс \"{0}\" Π² спискС Ρ€Π΅Π±Π΅Ρ€ Π² строкС {1}" - -msgid "importerDOT_error_nothingfound" -msgstr "НС ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ 'graph' ΠΈΠ»ΠΈ 'digraph'" - -msgid "importerDOT_error_labelunreachable" -msgstr "НС удаётся Π½Π°ΠΉΡ‚ΠΈ ΠΌΠ΅Ρ‚ΠΊΡƒ Π² строкС \"{0}\"" - -msgid "importerDOT_error_colorunreachable" -msgstr "НС удаётся Π½Π°ΠΉΡ‚ΠΈ Ρ†Π²Π΅Ρ‚ Π² строкС \"{0}\"" - -msgid "importerDOT_error_edgeparsing" -msgstr "НС удаётся Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ Ρ€Π΅Π±Ρ€ΠΎ Π² строкС \"{0}\"" - -msgid "importerDOT_error_posunreachable" -msgstr "НС удаётся Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΡƒΠ·Π»Π° Π² строкС \"{0}\". НСобходимый Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ pos=\"x, y\"." - -msgid "importerDOT_error_weightunreachable" -msgstr "НС удаётся Ρ€Π°Π·ΠΎΠ±Ρ€Π°Ρ‚ΡŒ вСс Ρ€Π΅Π±Ρ€Π° Π² строкС \"{0}\"" - -msgid "importerDOT_log_nodeattribute" -msgstr "НайдСн Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ ΡƒΠ·Π»Π° \"{0}\" ({1})" diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle.properties new file mode 100644 index 0000000000..1c8a3efc56 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle.properties @@ -0,0 +1,2 @@ +fileType_Spreadsheet_Name = CSV/Spreadsheet Files +SpreadsheetUtils.recordNumber=Record #{0} \ No newline at end of file diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_ar.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_ca.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_ca.properties new file mode 100644 index 0000000000..b370745bbd --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_ca.properties @@ -0,0 +1,2 @@ +fileType_Spreadsheet_Name=CSV/Spreadsheet Files +SpreadsheetUtils.recordNumber=Record #{0} diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_el.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_el.properties new file mode 100644 index 0000000000..8214738f10 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_el.properties @@ -0,0 +1,4 @@ + + +fileType_Spreadsheet_Name=\u0391\u03C1\u03C7\u03B5\u03AF\u03B1 CSV/\u03A5\u03C0\u03BF\u03BB\u03BF\u03B3\u03B9\u03C3\u03C4\u03B9\u03BA\u03CE\u03BD \u03A6\u03CD\u03BB\u03BB\u03C9\u03BD +SpreadsheetUtils.recordNumber=\u0395\u03B3\u03B3\u03C1\u03B1\u03C6\u03AE #{0} diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_es.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_es.properties new file mode 100644 index 0000000000..f78d83fe73 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_es.properties @@ -0,0 +1,4 @@ + + +fileType_Spreadsheet_Name=Archivos CSV/hojas de c\u00E1lculo +SpreadsheetUtils.recordNumber=Registro #{0} diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_fr.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_fr.properties new file mode 100644 index 0000000000..a1557a8b83 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_fr.properties @@ -0,0 +1,4 @@ + + +fileType_Spreadsheet_Name=Fichiers CSV/Tableur +SpreadsheetUtils.recordNumber=Enregistrement #{0} diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_he.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_he.properties new file mode 100644 index 0000000000..b370745bbd --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_he.properties @@ -0,0 +1,2 @@ +fileType_Spreadsheet_Name=CSV/Spreadsheet Files +SpreadsheetUtils.recordNumber=Record #{0} diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_hu.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_hu.properties new file mode 100644 index 0000000000..69f5dabd3e --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_hu.properties @@ -0,0 +1,4 @@ + + +fileType_Spreadsheet_Name=CSV/T\u00E1bl\u00E1zat f\u00E1jlok +SpreadsheetUtils.recordNumber={0}. rekord diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_it.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_it.properties new file mode 100644 index 0000000000..796796a888 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_it.properties @@ -0,0 +1,2 @@ +fileType_Spreadsheet_Name=CSV/Fogli di calcolo +SpreadsheetUtils.recordNumber=Record #{0} diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_ko.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_ko.properties new file mode 100644 index 0000000000..810fcf108c --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_ko.properties @@ -0,0 +1,4 @@ + + +fileType_Spreadsheet_Name=CSV/\uC2A4\uD504\uB808\uB4DC\uC2DC\uD2B8 \uD30C\uC77C\uB4E4 +SpreadsheetUtils.recordNumber=\uB808\uCF54\uB4DC #{0} diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_nl.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_nl.properties new file mode 100644 index 0000000000..61fdba5f2e --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_nl.properties @@ -0,0 +1,2 @@ +fileType_Spreadsheet_Name=CSV-/spreadsheetbestanden +SpreadsheetUtils.recordNumber=Record #{0} diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_pl.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_pl.properties new file mode 100644 index 0000000000..00b40cfeb6 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_pl.properties @@ -0,0 +1,4 @@ + + +fileType_Spreadsheet_Name=Pliki CSV/Arkusza +SpreadsheetUtils.recordNumber=Rekord #{0} diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_ro.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_ro.properties new file mode 100644 index 0000000000..164f4719ff --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_ro.properties @@ -0,0 +1,4 @@ + + +fileType_Spreadsheet_Name=Fi\u0219iere CSV/Foi de calcul +SpreadsheetUtils.recordNumber=\u00CEnregistrarea #{0} diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_th.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_tr.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_tr.properties new file mode 100644 index 0000000000..3d652f5ceb --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_tr.properties @@ -0,0 +1,2 @@ +fileType_Spreadsheet_Name=CSV/Elektronik Tablo Dosyalar\u0131 +SpreadsheetUtils.recordNumber=Record #{0} diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_zh_CN.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_zh_CN.properties new file mode 100644 index 0000000000..81b76ad1c1 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_zh_CN.properties @@ -0,0 +1,4 @@ + + +fileType_Spreadsheet_Name=CSV/\u7535\u5B50\u8868\u683C\u6587\u6863 +SpreadsheetUtils.recordNumber=\u8BB0\u5F55 #{0} diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_zh_TW.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_zh_TW.properties new file mode 100644 index 0000000000..b370745bbd --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/Bundle_zh_TW.properties @@ -0,0 +1,2 @@ +fileType_Spreadsheet_Name=CSV/Spreadsheet Files +SpreadsheetUtils.recordNumber=Record #{0} diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle.properties new file mode 100644 index 0000000000..53cf38d6cf --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle.properties @@ -0,0 +1,18 @@ +AbstractImportProcess.error.repeatedColumn=Repeated column ''{0}'' (case insensitive). Using only first occurrence +AbstractImportProcess.error.parseError=Error when parsing value ''{0}'' as a ''{1}'' for column ''{2}'' +AbstractImportProcess.error.inconsistentRow=The record is inconsistent. Skipping record + +ImportEdgesProcess.warning.missingSourceNode=Missing source node ''{0}'' and create missing nodes is disabled. Skipping record +ImportEdgesProcess.warning.missingTargetNode=Missing target node ''{0}'' and create missing nodes is disabled. Skipping record +ImportEdgesProcess.error.noSourceOrTargetData=Ignoring edge due to empty source and/or target node ids +ImportEdgesProcess.error.invalidEdgeWeight=Error parsing weight ''{0}'' as Double + +ImportAdjacencyListProcess.error.missingSource=Missing source id +ImportAdjacencyListProcess.error.missingTarget=Missing target id at index {0} + +ImportMatrixProcess.error.missingSource=Missing source label at the start of the line. Skipping record +ImportMatrixProcess.error.missingTarget=Missing target label at column with index {0}. All weights in this column will be ignored +ImportMatrixProcess.error.invalidRowLength=Invalid number of values at row. {0} values > {1} columns. Ignoring extra values +ImportMatrixProcess.error.parseWeightError=Could not parse weight ''{0}'' +ImportMatrixProcess.warning.inconsistentNumberOfLines=Inconsistent number of matrix lines compared to the number of labels. {0} lines, {1} labels +ImportMatrixProcess.warning.inconsistentLabels=Inconsistent source (rows) and target (columns) labels. They should be the same, in the same order \ No newline at end of file diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_ar.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_ca.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_ca.properties new file mode 100644 index 0000000000..50a330ee13 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_ca.properties @@ -0,0 +1,15 @@ +AbstractImportProcess.error.repeatedColumn=Repeated column ''{0}'' (case insensitive). Using only first occurrence +AbstractImportProcess.error.parseError=Error when parsing value ''{0}'' as a ''{1}'' for column ''{2}'' +AbstractImportProcess.error.inconsistentRow=The record is inconsistent. Skipping record +ImportEdgesProcess.warning.missingSourceNode=Missing source node ''{0}'' and create missing nodes is disabled. Skipping record +ImportEdgesProcess.warning.missingTargetNode=Missing target node ''{0}'' and create missing nodes is disabled. Skipping record +ImportEdgesProcess.error.noSourceOrTargetData=Ignoring edge due to empty source and/or target node ids +ImportEdgesProcess.error.invalidEdgeWeight=Error parsing weight ''{0}'' as Double +ImportAdjacencyListProcess.error.missingSource=Missing source id +ImportAdjacencyListProcess.error.missingTarget=Missing target id at index {0} +ImportMatrixProcess.error.missingSource=Missing source label at the start of the line. Skipping record +ImportMatrixProcess.error.missingTarget=Missing target label at column with index {0}. All weights in this column will be ignored +ImportMatrixProcess.error.invalidRowLength=Invalid number of values at row. {0} values > {1} columns. Ignoring extra values +ImportMatrixProcess.error.parseWeightError=Could not parse weight ''{0}'' +ImportMatrixProcess.warning.inconsistentNumberOfLines=Inconsistent number of matrix lines compared to the number of labels. {0} lines, {1} labels +ImportMatrixProcess.warning.inconsistentLabels=Inconsistent source (rows) and target (columns) labels. They should be the same, in the same order diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_el.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_el.properties new file mode 100644 index 0000000000..c1b57a0b38 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_el.properties @@ -0,0 +1,17 @@ + + +AbstractImportProcess.error.repeatedColumn=\u0395\u03C0\u03B1\u03BD\u03B1\u03BB\u03B1\u03BC\u03B2\u03B1\u03BD\u03CC\u03BC\u03B5\u03BD\u03B7 \u03C3\u03C4\u03AE\u03BB\u03B7 ''{0}'' (\u03C7\u03C9\u03C1\u03AF\u03C2 \u03B4\u03B9\u03AC\u03BA\u03C1\u03B9\u03C3\u03B7 \u03C0\u03B5\u03B6\u03CE\u03BD-\u03BA\u03B5\u03C6\u03B1\u03BB\u03B1\u03AF\u03C9\u03BD). \u0398\u03B1 \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03BF\u03C5\u03BC\u03B5 \u03BC\u03CC\u03BD\u03BF \u03C4\u03B7\u03BD \u03C0\u03C1\u03CE\u03C4\u03B7 \u03B5\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 +ImportEdgesProcess.error.invalidEdgeWeight=\u03A3\u03C6\u03AC\u03BB\u03BC\u03B1 \u03B1\u03BD\u03AC\u03BB\u03C5\u03C3\u03B7\u03C2 \u03C4\u03BF\u03C5 \u03B2\u03AC\u03C1\u03BF\u03C5\u03C2 ''{0}'' \u03C9\u03C2 \u03B1\u03C1\u03B9\u03B8\u03BC\u03CC\u03C2 \u03B4\u03B9\u03C0\u03BB\u03AE\u03C2 \u03B1\u03BA\u03C1\u03AF\u03B2\u03B5\u03B9\u03B1\u03C2 (Double) +AbstractImportProcess.error.parseError=\u03A3\u03C6\u03AC\u03BB\u03BC\u03B1 \u03BA\u03B1\u03C4\u03AC \u03C4\u03B7\u03BD \u03B1\u03BD\u03AC\u03BB\u03C5\u03C3\u03B7 \u03C4\u03B7\u03C2 \u03C4\u03B9\u03BC\u03AE\u03C2 ''{0}'' \u03BC\u03B5 \u03C4\u03B7 \u03BC\u03BF\u03C1\u03C6\u03AE ''{1}'' \u03B3\u03B9\u03B1 \u03C4\u03B7 \u03C3\u03C4\u03AE\u03BB\u03B7 ''{2}'' +AbstractImportProcess.error.inconsistentRow=\u0397 \u03B5\u03B3\u03B3\u03C1\u03B1\u03C6\u03AE \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B1\u03C3\u03C5\u03BD\u03B5\u03C0\u03AE\u03C2. \u03A0\u03B1\u03C1\u03AC\u03BB\u03B5\u03B9\u03C8\u03B7 \u03B5\u03B3\u03B3\u03C1\u03B1\u03C6\u03AE\u03C2 +ImportEdgesProcess.warning.missingSourceNode=\u039F \u03B1\u03C1\u03C7\u03B9\u03BA\u03CC\u03C2 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2 (source node) ''{0}'' \u03BA\u03B1\u03B9 \u03B7 \u03B4\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1 \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD \u03C0\u03BF\u03C5 \u03BB\u03B5\u03AF\u03C0\u03BF\u03C5\u03BD \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B1\u03C0\u03B5\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03B9\u03B7\u03BC\u03AD\u03BD\u03B7. \u03A0\u03B1\u03C1\u03AC\u03BB\u03B5\u03B9\u03C8\u03B7 \u03B5\u03B3\u03B3\u03C1\u03B1\u03C6\u03AE\u03C2 +ImportEdgesProcess.warning.missingTargetNode=\u039F \u03BA\u03CC\u03BC\u03B2\u03BF\u03C2 \u03C0\u03C1\u03BF\u03BF\u03C1\u03B9\u03C3\u03BC\u03BF\u03CD (target node) ''{0}'' \u03BB\u03B5\u03AF\u03C0\u03B5\u03B9 \u03BA\u03B1\u03B9 \u03B7 \u03B4\u03B7\u03BC\u03B9\u03BF\u03C5\u03C1\u03B3\u03AF\u03B1 \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD \u03C0\u03BF\u03C5 \u03BB\u03B5\u03AF\u03C0\u03BF\u03C5\u03BD \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B1\u03C0\u03B5\u03BD\u03B5\u03C1\u03B3\u03BF\u03C0\u03BF\u03B9\u03B7\u03BC\u03AD\u03BD\u03B7. \u03A0\u03B1\u03C1\u03AC\u03BB\u03B5\u03B9\u03C8\u03B7 \u03B5\u03B3\u03B3\u03C1\u03B1\u03C6\u03AE\u03C2 +ImportEdgesProcess.error.noSourceOrTargetData=\u03A0\u03B1\u03C1\u03AC\u03B2\u03BB\u03B5\u03C8\u03B7 \u03B1\u03BA\u03BC\u03AE\u03C2 \u03BB\u03CC\u03B3\u03C9 \u03BA\u03B5\u03BD\u03CE\u03BD \u03B1\u03BD\u03B1\u03B3\u03BD\u03C9\u03C1\u03B9\u03C3\u03C4\u03B9\u03BA\u03CE\u03BD \u03B1\u03C1\u03C7\u03B9\u03BA\u03CE\u03BD \u03AE/\u03BA\u03B1\u03B9 \u03C4\u03B5\u03BB\u03B9\u03BA\u03CE\u03BD \u03BA\u03CC\u03BC\u03B2\u03C9\u03BD +ImportAdjacencyListProcess.error.missingSource=\u039B\u03B5\u03AF\u03C0\u03B5\u03B9 \u03C4\u03BF id \u03C0\u03B7\u03B3\u03AE\u03C2 +ImportMatrixProcess.error.missingSource=\u039B\u03B5\u03AF\u03C0\u03B5\u03B9 \u03B7 \u03B5\u03C4\u03B9\u03BA\u03AD\u03C4\u03B1 \u03C0\u03B7\u03B3\u03AE\u03C2 \u03C3\u03C4\u03B7\u03BD \u03B1\u03C1\u03C7\u03AE \u03C4\u03B7\u03C2 \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE\u03C2. \u03A0\u03B1\u03C1\u03AC\u03BB\u03B5\u03B9\u03C8\u03B7 \u03B5\u03B3\u03B3\u03C1\u03B1\u03C6\u03AE\u03C2 +ImportMatrixProcess.warning.inconsistentLabels=\u0391\u03BD\u03B1\u03BD\u03C4\u03B9\u03C3\u03C4\u03BF\u03B9\u03C7\u03AF\u03B1 \u03B5\u03C4\u03B9\u03BA\u03B5\u03C4\u03CE\u03BD \u03C0\u03B7\u03B3\u03CE\u03BD (\u03B3\u03C1\u03B1\u03BC\u03BC\u03AD\u03C2) \u03BA\u03B1\u03B9 \u03C0\u03C1\u03BF\u03BF\u03C1\u03B9\u03C3\u03BC\u03CE\u03BD (\u03C3\u03C4\u03AE\u03BB\u03B5\u03C2). \u03A0\u03C1\u03AD\u03C0\u03B5\u03B9 \u03BD\u03B1 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03AF\u03B4\u03B9\u03B5\u03C2 \u03BA\u03B1\u03B9 \u03C3\u03C4\u03B7\u03BD \u03AF\u03B4\u03B9\u03B1 \u03C3\u03B5\u03B9\u03C1\u03AC +ImportMatrixProcess.error.invalidRowLength=\u0397 \u03B3\u03C1\u03B1\u03BC\u03BC\u03AE \u03C0\u03B5\u03C1\u03B9\u03AD\u03C7\u03B5\u03B9 \u03B5\u03C3\u03C6\u03B1\u03BB\u03BC\u03AD\u03BD\u03BF \u03B1\u03C1\u03B9\u03B8\u03BC\u03CC\u03C2 \u03C4\u03B9\u03BC\u03CE\u03BD. {0} \u03C4\u03B9\u03BC\u03AD\u03C2 > {1} \u03C3\u03C4\u03AE\u03BB\u03B5\u03C2. \u03A0\u03B1\u03C1\u03AC\u03BB\u03B5\u03B9\u03C8\u03B7 \u03C0\u03BB\u03B5\u03BF\u03BD\u03B1\u03B6\u03BF\u03C5\u03C3\u03CE\u03BD \u03C4\u03B9\u03BC\u03CE\u03BD +ImportAdjacencyListProcess.error.missingTarget=\u039B\u03B5\u03AF\u03C0\u03B5\u03B9 \u03C4\u03BF id \u03C0\u03C1\u03BF\u03BF\u03C1\u03B9\u03C3\u03BC\u03BF\u03CD \u03C3\u03C4\u03BF index {0} +ImportMatrixProcess.error.parseWeightError=\u0394\u03B5\u03BD \u03BC\u03C0\u03CC\u03C1\u03B5\u03C3\u03B5 \u03BD\u03B1 \u03B1\u03BD\u03B1\u03BB\u03C5\u03B8\u03B5\u03AF \u03C4\u03BF \u03B2\u03AC\u03C1\u03BF\u03C2''{0}'' +ImportMatrixProcess.error.missingTarget=\u039B\u03B5\u03AF\u03C0\u03B5\u03B9 \u03B7 \u03B5\u03C4\u03B9\u03BA\u03AD\u03C4\u03B1 \u03C0\u03C1\u03BF\u03BF\u03C1\u03B9\u03C3\u03BC\u03BF\u03CD \u03C3\u03C4\u03B7 \u03C3\u03C4\u03AE\u03BB\u03B7 \u03BC\u03B5 index {0}. \u0398\u03B1 \u03B1\u03B3\u03BD\u03BF\u03B7\u03B8\u03BF\u03CD\u03BD \u03CC\u03BB\u03B1 \u03C4\u03B1 \u03B2\u03AC\u03C1\u03B7 \u03C3\u03B5 \u03B1\u03C5\u03C4\u03AE \u03C4\u03B7 \u03C3\u03C4\u03AE\u03BB\u03B7 +ImportMatrixProcess.warning.inconsistentNumberOfLines=\u039F \u03B1\u03C1\u03B9\u03B8\u03BC\u03CC\u03C2 \u03C4\u03BF\u03BD \u03B3\u03C1\u03B1\u03BC\u03BC\u03CE\u03BD \u03C4\u03BF\u03C5 \u03C0\u03AF\u03BD\u03B1\u03BA\u03B1, \u03B4\u03B5\u03BD \u03C3\u03C5\u03BC\u03C6\u03C9\u03BD\u03B5\u03AF \u03BC\u03B5 \u03C4\u03BF\u03BD \u03B1\u03C1\u03B9\u03B8\u03BC\u03CC \u03C4\u03C9\u03BD \u03B5\u03C4\u03B9\u03BA\u03B5\u03C4\u03CE\u03BD. {0} \u03B3\u03C1\u03B1\u03BC\u03BC\u03AD\u03C2, {1} \u03B5\u03C4\u03B9\u03BA\u03AD\u03C4\u03B5\u03C2 diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_es.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_es.properties new file mode 100644 index 0000000000..5e21ba6dfb --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_es.properties @@ -0,0 +1,17 @@ + + +ImportMatrixProcess.error.missingSource=Falta la etiqueta de la fuente al principio de la l\u00EDnea. Omisi\u00F3n de registro +AbstractImportProcess.error.repeatedColumn=Columna repetida ''{0}'' (sin distinci\u00F3n entre may\u00FAsculas y min\u00FAsculas). Utilizando s\u00F3lo la primera ocurrencia +ImportMatrixProcess.warning.inconsistentLabels=Etiquetas de origen (filas) y destino (columnas) incoherentes. Deben ser las mismas, en el mismo orden +ImportMatrixProcess.error.parseWeightError=No se pudo analizar el peso ''{0}'' +ImportEdgesProcess.error.invalidEdgeWeight=Error parseando peso ''{0}'' como Double +ImportEdgesProcess.warning.missingTargetNode=Falta nodo destino ''{0}'' y crear nodos faltantes est\u00E1 desactivado. Omitir registro +ImportMatrixProcess.warning.inconsistentNumberOfLines=N\u00FAmero incoherente de l\u00EDneas de la matriz en comparaci\u00F3n con el n\u00FAmero de etiquetas. {0} l\u00EDneas, {1} etiquetas +ImportMatrixProcess.error.invalidRowLength=N\u00FAmero no v\u00E1lido de valores en fila. {0} valores > {1} columnas. Ignorar valores extra +ImportEdgesProcess.error.noSourceOrTargetData=Ignorar el borde debido a nodos de origen y/o destino vac\u00EDos +ImportAdjacencyListProcess.error.missingSource=Falta el identificador de la fuente +AbstractImportProcess.error.inconsistentRow=El registro es incoherente. Omisi\u00F3n de registro +AbstractImportProcess.error.parseError=Error al parsear el valor ''{0}'' como un ''{1}'' para la columna ''{2}'' +ImportEdgesProcess.warning.missingSourceNode=Falta nodo fuente ''{0}'' y crear nodos faltantes est\u00E1 desactivado. Omitir registro +ImportMatrixProcess.error.missingTarget=Falta la etiqueta objetivo en la columna con \u00EDndice {0}. Todos los pesos en esta columna ser\u00E1n ignorados +ImportAdjacencyListProcess.error.missingTarget=Falta el id del objetivo en el \u00EDndice {0} diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_he.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_he.properties new file mode 100644 index 0000000000..50a330ee13 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_he.properties @@ -0,0 +1,15 @@ +AbstractImportProcess.error.repeatedColumn=Repeated column ''{0}'' (case insensitive). Using only first occurrence +AbstractImportProcess.error.parseError=Error when parsing value ''{0}'' as a ''{1}'' for column ''{2}'' +AbstractImportProcess.error.inconsistentRow=The record is inconsistent. Skipping record +ImportEdgesProcess.warning.missingSourceNode=Missing source node ''{0}'' and create missing nodes is disabled. Skipping record +ImportEdgesProcess.warning.missingTargetNode=Missing target node ''{0}'' and create missing nodes is disabled. Skipping record +ImportEdgesProcess.error.noSourceOrTargetData=Ignoring edge due to empty source and/or target node ids +ImportEdgesProcess.error.invalidEdgeWeight=Error parsing weight ''{0}'' as Double +ImportAdjacencyListProcess.error.missingSource=Missing source id +ImportAdjacencyListProcess.error.missingTarget=Missing target id at index {0} +ImportMatrixProcess.error.missingSource=Missing source label at the start of the line. Skipping record +ImportMatrixProcess.error.missingTarget=Missing target label at column with index {0}. All weights in this column will be ignored +ImportMatrixProcess.error.invalidRowLength=Invalid number of values at row. {0} values > {1} columns. Ignoring extra values +ImportMatrixProcess.error.parseWeightError=Could not parse weight ''{0}'' +ImportMatrixProcess.warning.inconsistentNumberOfLines=Inconsistent number of matrix lines compared to the number of labels. {0} lines, {1} labels +ImportMatrixProcess.warning.inconsistentLabels=Inconsistent source (rows) and target (columns) labels. They should be the same, in the same order diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_hu.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_hu.properties new file mode 100644 index 0000000000..99df5f9ec2 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_hu.properties @@ -0,0 +1,17 @@ + + +ImportMatrixProcess.error.missingSource=Hi\u00E1nyzik a forr\u00E1sc\u00EDmke a sor elej\u00E9n. Rekord \u00E1tugr\u00E1sa +AbstractImportProcess.error.repeatedColumn=Ism\u00E9tl\u0151d\u0151 \u201E{0}\u201D oszlop (a kis- \u00E9s nagybet\u0171k megk\u00FCl\u00F6nb\u00F6ztet\u00E9se). Csak az els\u0151 el\u0151fordul\u00E1s haszn\u00E1lata +ImportMatrixProcess.warning.inconsistentLabels=Inkonzisztens forr\u00E1s (sorok) \u00E9s c\u00E9l (oszlopok) c\u00EDmk\u00E9i. Ugyanolyannak kell lenni\u00FCk, ugyanabban a sorrendben +ImportMatrixProcess.error.parseWeightError=Nem siker\u00FClt elemezni a s\u00FAlyt: ''{0}'' +ImportEdgesProcess.error.invalidEdgeWeight=Hiba a(z) ''{0}'' s\u00FAly duplak\u00E9nt t\u00F6rt\u00E9n\u0151 elemz\u00E9sekor +ImportEdgesProcess.warning.missingTargetNode=A \u201E{0}\u201D hi\u00E1nyz\u00F3 c\u00E9lcsom\u00F3pont \u00E9s a hi\u00E1nyz\u00F3 csom\u00F3pontok l\u00E9trehoz\u00E1sa le van tiltva. Rekord \u00E1tugr\u00E1sa +ImportMatrixProcess.warning.inconsistentNumberOfLines=A m\u00E1trixsorok sz\u00E1ma inkonzisztens a c\u00EDmk\u00E9k sz\u00E1m\u00E1hoz k\u00E9pest. {0} sor, {1} c\u00EDmke +ImportMatrixProcess.error.invalidRowLength=\u00C9rv\u00E9nytelen sz\u00E1m\u00FA \u00E9rt\u00E9k a sorban. {0} \u00E9rt\u00E9k > {1} oszlop. Az extra \u00E9rt\u00E9kek figyelmen k\u00EDv\u00FCl hagy\u00E1sa +ImportEdgesProcess.error.noSourceOrTargetData=\u00C9l figyelmen k\u00EDv\u00FCl hagy\u00E1sa \u00FCres forr\u00E1s- \u00E9s/vagy c\u00E9lcsom\u00F3pont-azonos\u00EDt\u00F3k miatt +ImportAdjacencyListProcess.error.missingSource=Hi\u00E1nyz\u00F3 forr\u00E1sazonos\u00EDt\u00F3 +AbstractImportProcess.error.inconsistentRow=A rekord k\u00F6vetkezetlen. Rekord \u00E1tugr\u00E1sa +AbstractImportProcess.error.parseError=Hiba t\u00F6rt\u00E9nt a(z) ''{0}'' \u00E9rt\u00E9k ''{1}''-k\u00E9nt val\u00F3 elemz\u00E9sekor a ''{2}'' oszlopban +ImportEdgesProcess.warning.missingSourceNode=A(z) ''{0}'' hi\u00E1nyz\u00F3 forr\u00E1scsom\u00F3pont \u00E9s a hi\u00E1nyz\u00F3 csom\u00F3pontok l\u00E9trehoz\u00E1sa le van tiltva. Rekord \u00E1tugr\u00E1sa +ImportMatrixProcess.error.missingTarget=Hi\u00E1nyzik a c\u00E9lc\u00EDmke a(z) {0} index\u0171 oszlopban. Az ebben az oszlopban szerepl\u0151 \u00F6sszes s\u00FAlyt figyelmen k\u00EDv\u00FCl hagyja +ImportAdjacencyListProcess.error.missingTarget=Hi\u00E1nyz\u00F3 c\u00E9lazonos\u00EDt\u00F3 a(z) {0} indexn\u00E9l diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_it.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_it.properties new file mode 100644 index 0000000000..9ad41766b3 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_it.properties @@ -0,0 +1,15 @@ +AbstractImportProcess.error.repeatedColumn=Colonna ripetuta: ''{0}'' (case insensitive). Verrΰ usata solo la prima occorrenza. +AbstractImportProcess.error.parseError=Error when parsing value ''{0}'' as a ''{1}'' for column ''{2}'' +AbstractImportProcess.error.inconsistentRow=The record is inconsistent. Skipping record +ImportEdgesProcess.warning.missingSourceNode=Missing source node ''{0}'' and create missing nodes is disabled. Skipping record +ImportEdgesProcess.warning.missingTargetNode=Missing target node ''{0}'' and create missing nodes is disabled. Skipping record +ImportEdgesProcess.error.noSourceOrTargetData=Ignoring edge due to empty source and/or target node ids +ImportEdgesProcess.error.invalidEdgeWeight=Error parsing weight ''{0}'' as Double +ImportAdjacencyListProcess.error.missingSource=Missing source id +ImportAdjacencyListProcess.error.missingTarget=Missing target id at index {0} +ImportMatrixProcess.error.missingSource=Missing source label at the start of the line. Skipping record +ImportMatrixProcess.error.missingTarget=Missing target label at column with index {0}. All weights in this column will be ignored +ImportMatrixProcess.error.invalidRowLength=Invalid number of values at row. {0} values > {1} columns. Ignoring extra values +ImportMatrixProcess.error.parseWeightError=Could not parse weight ''{0}'' +ImportMatrixProcess.warning.inconsistentNumberOfLines=Inconsistent number of matrix lines compared to the number of labels. {0} lines, {1} labels +ImportMatrixProcess.warning.inconsistentLabels=Inconsistent source (rows) and target (columns) labels. They should be the same, in the same order diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_ko.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_ko.properties new file mode 100644 index 0000000000..7f4ac43246 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_ko.properties @@ -0,0 +1,17 @@ + + +AbstractImportProcess.error.repeatedColumn=\uBC18\uBCF5\uB41C \uCEEC\uB7FC "{0}" (\uB300\uC18C\uBB38\uC790 \uAD6C\uBD84\uB428). \uCCAB \uBC88\uC9F8 \uAC83\uB9CC \uC0AC\uC6A9\uB428 +AbstractImportProcess.error.parseError=\uAC12 "{0}"\uC744 \uCEEC\uB7FC "{2}"\uC5D0 \uB300\uD55C "{1}"(\uC73C)\uB85C \uD574\uC11D\uD558\uB294 \uB3D9\uC548 \uC624\uB958 \uBC1C\uC0DD\uD568 +AbstractImportProcess.error.inconsistentRow=\uB808\uCF54\uB4DC\uAC00 \uBD88\uC77C\uCE58\uD568. \uB808\uCF54\uB4DC\uB97C \uAC74\uB108\uB700 +ImportEdgesProcess.warning.missingTargetNode=\uD0C0\uAC9F \uB178\uB4DC "{0}"\uAC00 \uC5C6\uC73C\uBA70, \uC5C6\uB294 \uB178\uB4DC \uC0DD\uC131\uD558\uAE30\uAC00 \uD574\uC81C\uB428. \uB808\uCF54\uB4DC\uB97C \uAC74\uB108\uB700 +ImportEdgesProcess.warning.missingSourceNode=\uC18C\uC2A4 \uB178\uB4DC "{0}"\uC774 \uC5C6\uC73C\uBA70, \uC5C6\uB294 \uB178\uB4DC \uC0DD\uC131\uD558\uAE30\uAC00 \uD574\uC81C\uB428. \uB808\uCF54\uB4DC\uB97C \uAC74\uB108\uB700 +ImportMatrixProcess.error.invalidRowLength=\uD589\uC5D0 \uC788\uB294 \uAC12\uB4E4\uC758 \uAC1C\uC218\uAC00 \uC798\uBABB\uB428. \uAC12\uB4E4 {0}\uAC1C > \uCE7C\uB7FC {1}\uAC1C. \uB2E4\uB978 \uAC12\uB4E4\uC740 \uBB34\uC2DC\uB428 +ImportEdgesProcess.error.noSourceOrTargetData=\uC18C\uC2A4/\uD0C0\uAC9F \uB178\uB4DC \uC544\uC774\uB514\uAC00 \uC5C6\uC5B4\uC11C \uC5E3\uC9C0\uAC00 \uBB34\uC2DC\uB428 +ImportEdgesProcess.error.invalidEdgeWeight=\uAC00\uC911\uCE58 "{0}"\uC744 double\uD615\uC73C\uB85C \uD574\uC11D\uD558\uB294 \uB370\uC5D0 \uC624\uB958 \uBC1C\uC0DD\uD568 +ImportAdjacencyListProcess.error.missingSource=\uC18C\uC2A4 \uC544\uC774\uB514\uAC00 \uC5C6\uC74C +ImportAdjacencyListProcess.error.missingTarget=\uC0C9\uC778 {0}\uC5D0 \uD0C0\uAC9F \uC544\uC774\uB514\uAC00 \uC5C6\uC74C +ImportMatrixProcess.error.missingSource=\uD589\uC758 \uC2DC\uC791\uC5D0 \uC18C\uC2A4 \uB77C\uBCA8\uC774 \uC5C6\uC74C. \uB808\uCF54\uB4DC\uB97C \uAC74\uB108\uB700 +ImportMatrixProcess.error.missingTarget=\uC0C9\uC778 {0} \uCEEC\uB7FC\uC5D0 \uD0C0\uAC9F \uB77C\uBCA8\uC774 \uC5C6\uC74C. \uC774 \uCEEC\uB7FC\uC758 \uBAA8\uB4E0 \uAC00\uC911\uCE58\uB294 \uBB34\uC2DC\uB428 +ImportMatrixProcess.error.parseWeightError=\uAC00\uC911\uCE58 "{0}"\uC744 \uD574\uC11D\uD560 \uC218 \uC5C6\uC74C +ImportMatrixProcess.warning.inconsistentNumberOfLines=\uB77C\uBCA8\uC758 \uC218\uC5D0 \uBE44\uAD50\uD574 \uBA54\uD2B8\uB9AD\uC2A4 \uD589\uC758 \uAC2F\uC218\uAC00 \uBD88\uC77C\uCE58\uB428. {0}\uAC1C \uC120\uACFC {1}\uAC1C \uB77C\uBCA8 +ImportMatrixProcess.warning.inconsistentLabels=\uC18C\uC2A4 (\uD589)\uACFC \uD0C0\uAC9F (\uC5F4) \uB77C\uBCA8\uB4E4\uC774 \uBD88\uC77C\uCE58\uD568. \uB611\uAC19\uC544\uC57C \uD558\uACE0 \uC21C\uC11C\uB3C4 \uAC19\uC544\uC57C \uD568 diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_nl.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_nl.properties new file mode 100644 index 0000000000..50a330ee13 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_nl.properties @@ -0,0 +1,15 @@ +AbstractImportProcess.error.repeatedColumn=Repeated column ''{0}'' (case insensitive). Using only first occurrence +AbstractImportProcess.error.parseError=Error when parsing value ''{0}'' as a ''{1}'' for column ''{2}'' +AbstractImportProcess.error.inconsistentRow=The record is inconsistent. Skipping record +ImportEdgesProcess.warning.missingSourceNode=Missing source node ''{0}'' and create missing nodes is disabled. Skipping record +ImportEdgesProcess.warning.missingTargetNode=Missing target node ''{0}'' and create missing nodes is disabled. Skipping record +ImportEdgesProcess.error.noSourceOrTargetData=Ignoring edge due to empty source and/or target node ids +ImportEdgesProcess.error.invalidEdgeWeight=Error parsing weight ''{0}'' as Double +ImportAdjacencyListProcess.error.missingSource=Missing source id +ImportAdjacencyListProcess.error.missingTarget=Missing target id at index {0} +ImportMatrixProcess.error.missingSource=Missing source label at the start of the line. Skipping record +ImportMatrixProcess.error.missingTarget=Missing target label at column with index {0}. All weights in this column will be ignored +ImportMatrixProcess.error.invalidRowLength=Invalid number of values at row. {0} values > {1} columns. Ignoring extra values +ImportMatrixProcess.error.parseWeightError=Could not parse weight ''{0}'' +ImportMatrixProcess.warning.inconsistentNumberOfLines=Inconsistent number of matrix lines compared to the number of labels. {0} lines, {1} labels +ImportMatrixProcess.warning.inconsistentLabels=Inconsistent source (rows) and target (columns) labels. They should be the same, in the same order diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_ro.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_ro.properties new file mode 100644 index 0000000000..52e7bccaef --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_ro.properties @@ -0,0 +1,17 @@ + + +AbstractImportProcess.error.parseError=Eroare la parsarea valorii ''{0}'' ca ''{1}'' pentru coloana ''{2}'' +AbstractImportProcess.error.inconsistentRow=\u00CEnregistrarea este inconsecvent\u0103. Se omite +ImportEdgesProcess.error.noSourceOrTargetData=Se ignor\u0103 muchia din cauza lipsei ID-urilor nodurilor surs\u0103/\u021Bint\u0103 +ImportAdjacencyListProcess.error.missingSource=Lipse\u0219te id-ul sursei +ImportEdgesProcess.error.invalidEdgeWeight=Eroare la parsarea ponderii ''{0}'' ca Double +ImportMatrixProcess.error.missingSource=Lipse\u0219te eticheta surs\u0103 la \u00EEnceputul liniei. Se omite +ImportMatrixProcess.error.parseWeightError=Nu s-a putut parsa ponderea ''{0}'' +ImportMatrixProcess.warning.inconsistentLabels=Etichetele surs\u0103 (r\u00E2nduri) \u0219i \u021Bint\u0103 (coloane) sunt inconsistente. Ar trebui s\u0103 fie identice, \u00EEn aceea\u0219i ordine +AbstractImportProcess.error.repeatedColumn=Coloan\u0103 repetat\u0103 ''{0}'' (non "case sensitive"). Se va folosi doar prima apari\u021Bie +ImportEdgesProcess.warning.missingSourceNode=Lipse\u0219te nodul surs\u0103 ''{0}'' \u0219i crearea nodurilor lips\u0103 este dezactivat\u0103. Se omite +ImportEdgesProcess.warning.missingTargetNode=Lipse\u0219te nodul \u021Bint\u0103 ''{0}'' \u0219i crearea nodurilor lips\u0103 este dezactivat\u0103. Se omite +ImportAdjacencyListProcess.error.missingTarget=Lipse\u0219te id-ul \u021Bintei la indexul {0} +ImportMatrixProcess.error.missingTarget=Lipse\u0219te eticheta \u021Bint\u0103 la coloana cu indexul {0}. Toate ponderile din aceast\u0103 coloan\u0103 vor fi ignorate +ImportMatrixProcess.warning.inconsistentNumberOfLines=Num\u0103rul de linii ale matricei este inconsecvent \u00EEn compara\u021Bie cu num\u0103rul de etichete. {0} linii, {1} etichete +ImportMatrixProcess.error.invalidRowLength=Num\u0103r invalid de valori pe r\u00E2nd. {0} valori > {1} coloane. Se ignor\u0103 valorile \u00EEn plus diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_sv.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_sv.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_sv.properties @@ -0,0 +1 @@ + diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_th.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_tr.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_tr.properties new file mode 100644 index 0000000000..2e0432dc27 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_tr.properties @@ -0,0 +1,15 @@ +AbstractImportProcess.error.repeatedColumn=Tekrarlanan s\u00FCtun ''{0}'' (b\u00FCy\u00FCk/k\u00FC\u00E7\u00FCk harfe duyars\u0131z). Sadece ilk olu\u015Fumu kullanma +AbstractImportProcess.error.parseError=Error when parsing value ''{0}'' as a ''{1}'' for column ''{2}'' +AbstractImportProcess.error.inconsistentRow=The record is inconsistent. Skipping record +ImportEdgesProcess.warning.missingSourceNode=Missing source node ''{0}'' and create missing nodes is disabled. Skipping record +ImportEdgesProcess.warning.missingTargetNode=Missing target node ''{0}'' and create missing nodes is disabled. Skipping record +ImportEdgesProcess.error.noSourceOrTargetData=Ignoring edge due to empty source and/or target node ids +ImportEdgesProcess.error.invalidEdgeWeight=Error parsing weight ''{0}'' as Double +ImportAdjacencyListProcess.error.missingSource=Missing source id +ImportAdjacencyListProcess.error.missingTarget=Missing target id at index {0} +ImportMatrixProcess.error.missingSource=Missing source label at the start of the line. Skipping record +ImportMatrixProcess.error.missingTarget=Missing target label at column with index {0}. All weights in this column will be ignored +ImportMatrixProcess.error.invalidRowLength=Invalid number of values at row. {0} values > {1} columns. Ignoring extra values +ImportMatrixProcess.error.parseWeightError=Could not parse weight ''{0}'' +ImportMatrixProcess.warning.inconsistentNumberOfLines=Inconsistent number of matrix lines compared to the number of labels. {0} lines, {1} labels +ImportMatrixProcess.warning.inconsistentLabels=Inconsistent source (rows) and target (columns) labels. They should be the same, in the same order diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_zh_CN.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_zh_CN.properties new file mode 100644 index 0000000000..fbf276cbc6 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_zh_CN.properties @@ -0,0 +1,17 @@ + + +ImportAdjacencyListProcess.error.missingSource=\u7F3A\u5C11\u6E90ID +ImportAdjacencyListProcess.error.missingTarget=\u7D22\u5F15{0}\u5904\u7F3A\u5C11\u76EE\u7684ID +AbstractImportProcess.error.repeatedColumn=\u91CD\u590D\u5217 ''{0}'' (\u4E0D\u533A\u5206\u5927\u5C0F\u5199)\u3002\u4EC5\u4F7F\u7528\u9996\u6B21\u51FA\u73B0\u7684\u503C +ImportEdgesProcess.warning.missingSourceNode=\u7F3A\u5931\u6E90\u8282\u70B9 ''{0}'' \u4E14\u521B\u5EFA\u7F3A\u5931\u8282\u70B9\u88AB\u7981\u7528\u3002\u8DF3\u8FC7\u8BE5\u8BB0\u5F55 +AbstractImportProcess.error.parseError=\u5C06\u5217 ''{2}'' \u7684\u503C ''{0}'' \u89E3\u6790\u4E3A ''{1}''\u65F6\u51FA\u9519 +AbstractImportProcess.error.inconsistentRow=\u8BB0\u5F55\u4E0D\u4E00\u81F4\u3002\u8DF3\u8FC7\u8BE5\u8BB0\u5F55 +ImportEdgesProcess.warning.missingTargetNode=\u56E0\u7F3A\u5C11\u76EE\u6807\u8282\u70B9"{0}"\u5E76\u4E14\u7981\u7528\u521B\u5EFA\u7F3A\u5C11\u8282\u70B9\uFF0C\u6240\u4EE5\u8DF3\u8FC7\u8BE5\u8BB0\u5F55 +ImportEdgesProcess.error.noSourceOrTargetData=\u7531\u4E8E\u6E90\u8282\u70B9\u548C/\u6216\u76EE\u6807\u8282\u70B9 ID \u4E3A\u7A7A\u800C\u5FFD\u7565\u8FB9 +ImportEdgesProcess.error.invalidEdgeWeight=\u5C06weight"{0}"\u89E3\u6790\u8FC7Double\u7C7B\u578B\u65F6\u51FA\u9519 +ImportMatrixProcess.error.missingSource=\u56E0\u9996\u884C\u7F3A\u5C11\u6E90\u6807\u7B7E\uFF0C\u6240\u4EE5\u8DF3\u8FC7\u8BB0\u5F55 +ImportMatrixProcess.error.missingTarget=\u7D22\u5F15\u4E3A {0} \u7684\u5217\u7F3A\u5C11\u76EE\u6807\u6807\u7B7E\u3002\u6B64\u5217\u4E2D\u7684\u6240\u6709\u6743\u91CD\u90FD\u5C06\u88AB\u5FFD\u7565 +ImportMatrixProcess.error.invalidRowLength=\u884C\u4E2D\u7684\u6570\u503C\u65E0\u6548\u3002{0}\u503C> {1}\u5217\u3002\u5FFD\u7565\u989D\u5916\u503C +ImportMatrixProcess.error.parseWeightError=\u4E0D\u80FD\u89E3\u6790\u6743\u91CD"{0}" +ImportMatrixProcess.warning.inconsistentNumberOfLines=\u4E0E\u6807\u7B7E\u6570\u91CF\u76F8\u6BD4\uFF0C\u77E9\u9635\u884C\u6570\u4E0D\u4E00\u81F4\u3002{0}\u884C\u3001{1}\u6807\u7B7E +ImportMatrixProcess.warning.inconsistentLabels=\u6E90\uFF08\u884C\uFF09\u548C\u76EE\u6807\uFF08\u5217\uFF09\u6807\u7B7E\u4E0D\u4E00\u81F4\u3002\u5B83\u4EEC\u5E94\u8BE5\u76F8\u540C\uFF0C\u987A\u5E8F\u76F8\u540C diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_zh_TW.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_zh_TW.properties new file mode 100644 index 0000000000..50a330ee13 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/spreadsheet/process/Bundle_zh_TW.properties @@ -0,0 +1,15 @@ +AbstractImportProcess.error.repeatedColumn=Repeated column ''{0}'' (case insensitive). Using only first occurrence +AbstractImportProcess.error.parseError=Error when parsing value ''{0}'' as a ''{1}'' for column ''{2}'' +AbstractImportProcess.error.inconsistentRow=The record is inconsistent. Skipping record +ImportEdgesProcess.warning.missingSourceNode=Missing source node ''{0}'' and create missing nodes is disabled. Skipping record +ImportEdgesProcess.warning.missingTargetNode=Missing target node ''{0}'' and create missing nodes is disabled. Skipping record +ImportEdgesProcess.error.noSourceOrTargetData=Ignoring edge due to empty source and/or target node ids +ImportEdgesProcess.error.invalidEdgeWeight=Error parsing weight ''{0}'' as Double +ImportAdjacencyListProcess.error.missingSource=Missing source id +ImportAdjacencyListProcess.error.missingTarget=Missing target id at index {0} +ImportMatrixProcess.error.missingSource=Missing source label at the start of the line. Skipping record +ImportMatrixProcess.error.missingTarget=Missing target label at column with index {0}. All weights in this column will be ignored +ImportMatrixProcess.error.invalidRowLength=Invalid number of values at row. {0} values > {1} columns. Ignoring extra values +ImportMatrixProcess.error.parseWeightError=Could not parse weight ''{0}'' +ImportMatrixProcess.warning.inconsistentNumberOfLines=Inconsistent number of matrix lines compared to the number of labels. {0} lines, {1} labels +ImportMatrixProcess.warning.inconsistentLabels=Inconsistent source (rows) and target (columns) labels. They should be the same, in the same order diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/zh_CN.po b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/zh_CN.po deleted file mode 100644 index fefcd93c2e..0000000000 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/file/zh_CN.po +++ /dev/null @@ -1,379 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:27+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "fileType_GDF_Name" -msgstr "GDFζ–‡δ»ΆοΌˆηŒœοΌ‰" - -msgid "fileType_GEXF_Name" -msgstr "GEXFζ–‡δ»Ά" - -msgid "fileType_NET_Name" -msgstr "NETζ–‡δ»ΆοΌˆPajekοΌ‰" - -msgid "fileType_GraphML_Name" -msgstr "GraphMLζ–‡δ»Ά" - -msgid "fileType_GML_Name" -msgstr "GMLζ–‡δ»Ά" - -msgid "fileType_TLP_Name" -msgstr "TLPζ–‡δ»Ά" - -msgid "fileType_CSV_Name" -msgstr "CSVζ–‡δ»Ά" - -msgid "fileType_Edges_Name" -msgstr "边名单" - -msgid "fileType_GraphViz_Name" -msgstr "Graphvizζ–‡δ»Ά" - -msgid "fileType_DL_Name" -msgstr "DLζ–‡δ»ΆοΌˆUCINETοΌ‰" - -msgid "fileType_VNA_Name" -msgstr "VNAζ–‡δ»Ά" - -msgid "importerGDF_error_dataformat1" -msgstr "θ―₯ζ–‡δ»ΆεΏ…ι‘»δ»₯β€œnodedef>εη§°β€θ‘Œε―εŠ¨γ€‚" - -msgid "importerGDF_error_dataformat2" -msgstr "ι”™θ――ηš„εˆ—ηš„ζ ΌεΌγ€‚ζ―δΈ€εˆ—εΏ…ι‘»εŒ…ε«θ‡³ε°‘δΈ€δΈͺεη§°γ€‚εˆ—εεΏ…ι‘»δΈεŒ…ε«δ»»δ½•coma。" - -msgid "importerGDF_error_dataformat3" -msgstr "无法导ε…₯β€œ{0}β€θŠ‚η‚Ήηš„β€œ{1}β€εˆ—γ€‚ ζ•°ε€Όβ€œ{2}”ζŠ₯错。" - -msgid "importerGDF_error_dataformat4" -msgstr "无法θΎη½ηš„β€œ{0}β€ε±žζ€§β€œ{1}”{2}。" - -msgid "importerGDF_error_dataformat5" -msgstr "ζ•°ζη±»εž‹β€œ{0}β€δΈθ’«θΎ¨θ―†οΌŒη”¨ε­—η¬¦δΈ²ζ₯代替。" - -msgid "importerGDF_error_dataformat6" -msgstr "ζ²‘ζœ‰ζ‰Ύεˆ°β€œ{0}β€εˆ—η±»εž‹οΌŒη”¨ε­—η¬¦δΈ²ζ₯代替。" - -msgid "importerGDF_error_dataformat7" -msgstr "ηΊΏβ€œ{0}β€ε·²θΆ…θΏ‡εœ¨ε€΄ζ–‡δ»ΆδΈ­εšδΉ‰ηš„εˆ—γ€‚θ―·ιͺŒθ―ι€—ε·ηš„ζ•°ι‡γ€‚" - -msgid "importerGDF_error_dataformat8" -msgstr "θŠ‚η‚Ήεˆ—β€œ{0}β€δΈθƒ½θ’«ζ·»εŠ οΌŒε› δΈΊεƒε·²η»ε­˜εœ¨" - -msgid "importerGDF_error_dataformat9" -msgstr "θΎΉεˆ—β€œ{0}β€δΈθƒ½θ’«ζ·»εŠ οΌŒε› δΈΊεƒε·²η»ε­˜εœ¨" - -msgid "importerTPL_error_dataformat1" -msgstr "{0}θ‘Œηš„εθΎΉζ ΌεΌγ€‚" - -msgid "importerNET_error_dataformat1" -msgstr "θ―₯ζ–‡δ»ΆεΏ…ι‘»δ»Žβ€œ*ι‘Άη‚Ήβ€θ‘ŒεΌ€ε§‹γ€‚" - -msgid "importerNET_error_dataformat2" -msgstr "θ‘Œζ£€ζ΅‹ηš„η©Ίη™½θ‘Œ{0}" - -msgid "importerNET_error_dataformat3" -msgstr "{0}θ‘ŒδΈ­δΈεΉ³θ‘‘ηš„οΌˆζˆ–ε€ͺε€šοΌ‰θ‘ŒεΌ•ε·" - -msgid "importerNET_error_dataformat4" -msgstr "β€œι‘Άη‚Ήε·β€{0}β€œδΈεœ¨θŒƒε›΄[1,{1}]ε†…" - -msgid "importerNET_error_dataformat5" -msgstr "{0}θ‘Œηš„ι‘Άη‚Ήεζ ‡θ½¬ζ’ι—ι’˜γ€‚εΏ…ι‘»ζ˜―ζ΅η‚Ήζ•°γ€‚" - -msgid "importerNET_error_dataformat6" -msgstr "{0}θ‘Œηš„ι‘Άη‚Ήε€§ε°ηš„θ½¬ζ’ι—ι’˜γ€‚εΏ…ι‘»ζ˜―ζ΅η‚Ήζ•°γ€‚" - -msgid "importerNET_error_dataformat7" -msgstr "θΎΉηš„ζƒι‡{0}θ‘Œηš„θ§£ζžι—ι’˜γ€‚εΏ…ι‘»ζ˜―δΈ€δΈͺζ΅η‚Ήζ•°γ€‚" - -msgid "importerGraphML_error_syntax1" -msgstr "θ―­ζ³•ι”™θ――οΌŒθ―₯ζ–‡δ»ΆεΏ…ι‘»ε…ˆδ»Žζ ‡θ°γ€‚" - -msgid "importerGraphML_error_syntax2" -msgstr "θ―­ζ³•ι”™θ――οΌŒθŠ‚η‚Ήβ€œ{0}β€εΏ…ι‘»ε΅Œε₯—εœ¨ζ ‡θ°γ€‚" - -msgid "importerGraphML_error_attributeclass" -msgstr "ε±žζ€§η±»ζ‰ΎδΈεˆ°ζˆ–ζœͺηŸ₯ηš„ε±žζ€§β€œ{0} ''。θ―₯ε±žζ€§θ’«εΏ½η•₯。" - -msgid "importerGraphML_error_attributefor" -msgstr "ε±žζ€§β€œδΈΊβ€ζ²‘ζœ‰ε‘ηŽ°ζˆ–ε±žζ€§ζœͺηŸ₯β€œ{0}”。θ―₯ε±žζ€§θ’«εΏ½η•₯。" - -msgid "importerGraphML_error_attributetype1" -msgstr "ε±žζ€§η±»εž‹ζ²‘ζœ‰ζ‰Ύεˆ°ε±žζ€§β€œ{0}”。θΎη½δΈΊι»˜θ€ε­—符串。" - -msgid "importerGraphML_error_attributetype2" -msgstr "β€œ{0}β€ηš„ε±žζ€§η±»εž‹δΈθ’«θΎ¨θ―†γ€‚θ―₯ε±žζ€§θ’«εΏ½η•₯。" - -msgid "importerGraphML_error_attributedefault" -msgstr "ε±žζ€§β€œ{0}β€ηš„ι»˜θ€ε€ΌδΈθƒ½θ’«θ½¬ζ’δΈΊβ€œ{1}β€ηš„η±»εž‹γ€‚" - -msgid "importerGraphML_error_attributecolumn_exist" -msgstr "ε±žζ€§δΈŽIDβ€œ{0}β€ε·²ε­˜εœ¨οΌŒε±žζ€§θ’«εΏ½η•₯" - -msgid "importerGraphML_error_attributeempty" -msgstr "ε±žζ€§θ§£ζžι”™θ――οΌŒθΊ«δ»½θ―δΈ’ε€±γ€‚" - -msgid "importerGraphML_log_nodeproperty" -msgstr "θŠ‚η‚Ήηš„ε±žζ€§οΌš{0}" - -msgid "importerGraphML_log_edgeproperty" -msgstr "θΎΉε±žζ€§οΌš{0}" - -msgid "importerGraphML_log_nodeattribute" -msgstr "θŠ‚η‚Ήηš„ε±žζ€§ε‘ηŽ°'' {0}({1}οΌ‰" - -msgid "importerGraphML_log_edgeattribute" -msgstr "θΎΉε±žζ€§ε‘ηŽ°'' {0}({1}οΌ‰" - -msgid "importerGraphML_log_default" -msgstr "默θ€ε±žζ€§ε€Όε‘ηŽ°οΌš'' {0}({1}οΌ‰" - -msgid "importerGraphML_error_datakey" -msgstr "ζ•°ζηš„ε…³ι”ζ˜―ηΌΊε°‘ηš„ε…ƒη΄ ηš„id = {0}" - -msgid "importerGraphML_error_datavalue" -msgstr "ζ•°ζε€Ό{0}η±»εž‹ε…ƒη΄ ηš„ID = {1}错误。θ―₯值不能蒫θΎη½δΈΊβ€œ{2}β€ηš„ε±žζ€§γ€‚" - -msgid "importerGraphML_error_nodeid" -msgstr "θŠ‚η‚ΉID是倱θΈͺ。θ―₯θŠ‚η‚Ήθ’«εΏ½η•₯。" - -msgid "importerGraphML_error_defaultedgetype" -msgstr "默θ€ηš„θΎΉηš„η±»εž‹β€œ{0}β€ζ˜―δΈζ‰Ώθ€γ€‚θΎη½δΈΊι»˜θ€ηš„β€œζ··εˆβ€γ€‚" - -msgid "importerGraphML_error_edgetype" -msgstr "θΎΉβ€œ{1}β€ηš„η±»εž‹β€œ{0}”不蒫辨识。θΎη½δΈΊι»˜θ€ε€Όγ€‚" - -msgid "importerGML_error_nodeidmissing" -msgstr "θŠ‚η‚ΉIDζ˜―δΈ’ε€±ηš„" - -msgid "importerGML_error_directedgraphparse" -msgstr "ε›Ύβ€œεšε‘β€ε±žζ€§δΈ­ε‡ΊδΉŽζ„ζ–™ηš„ζ•°ε€Ό" - -msgid "importerGML_error_directedparse" -msgstr "β€œ{0} ''θΎΉβ€œεšε‘β€ε±žζ€§δΈ­ε‡ΊδΉŽζ„ζ–™ηš„ζ•°ε€Ό" - -msgid "importerGML_error_badparsing" -msgstr "ζ— ζ•ˆηš„GML解析" - -msgid "importerTPL_error_badparsing" -msgstr "ζ— ζ•ˆηš„TPL解析" - -msgid "importerGEXF_error_attributeclass" -msgstr "ε±žζ€§β€œη±»β€ζœͺζ‰Ύεˆ°ζˆ–ζœͺηŸ₯ηš„ε±žζ€§β€œ{0} ''。θ―₯ε±žζ€§θ’«εΏ½η•₯。" - -msgid "importerGEXF_error_attributeempty" -msgstr "ηΌΊε°‘ε±žζ€§θ§£ζžι”™θ――οΌŒIDζˆ–η±»εž‹ηΌΊε€±γ€‚" - -msgid "importerGEXF_error_attributedefault" -msgstr "ε±žζ€§β€œ{0}β€ηš„ι»˜θ€ε€ΌδΈθƒ½θ’«θ½¬ζ’δΈΊβ€œ{1}β€ηš„η±»εž‹γ€‚" - -msgid "importerGEXF_error_attributeoptions" -msgstr "ε±žζ€§β€œ{0}β€ι€‰ι‘Ήε€ΌδΈθƒ½θ’«θ½¬ζ’δΈΊβ€œ{1}β€ηš„η±»εž‹γ€‚" - -msgid "importerGEXF_error_attributecolumn_exist" -msgstr "ε±žζ€§δΈŽIDβ€œ{0}β€ε·²ε­˜εœ¨οΌŒε±žζ€§θ’«εΏ½η•₯" - -msgid "importerGEXF_error_attributetype1" -msgstr "ε±žζ€§η±»εž‹ζ²‘ζœ‰ζ‰Ύεˆ°ε±žζ€§β€œ{0}”。θΎη½δΈΊι»˜θ€ε­—符串。" - -msgid "importerGEXF_error_attributetype2" -msgstr "β€œ{0}β€ηš„ε±žζ€§η±»εž‹δΈθ’«θΎ¨θ―†γ€‚θ―₯ε±žζ€§θ’«εΏ½η•₯。" - -msgid "importerGEXF_error_datakey" -msgstr "ε…ƒη΄ ηš„id = {0}ηΌΊε°‘ε…³ι”ζ•°ζοΌˆε±žζ€§'οΌ‰" - -msgid "importerGEXF_error_datakey1" -msgstr "ε…ƒη΄ ηš„id = {0}ηΌΊε°‘ε…³ι”ζ•°ζοΌˆε±žζ€§'οΌ‰" - -msgid "importerGEXF_error_dataoptionsvalue" -msgstr "ζ•°ζε€Όβ€œ{0}β€δΈζ˜―ε…ƒη΄ ηš„ID = {1}ηš„ι€‰ι‘Ήγ€‚θ―₯值不能蒫θΎη½δΈΊβ€œ{2}β€ηš„ε±žζ€§γ€‚" - -msgid "importerGEXF_error_datavalue" -msgstr "ε…ƒη΄ {1}ζ•°ζε€Όβ€œ{0}β€η±»εž‹ηš„ι”™θ――γ€‚θ―₯值不能蒫θΎη½δΈΊβ€œ{2}β€ηš„ε±žζ€§γ€‚" - -msgid "importerGEXF_error_defaultedgetype" -msgstr "默θ€ηš„θΎΉη±»εž‹β€œ{0}”不能蒫辨识。θΎη½δΈΊι»˜θ€ηš„β€œζ··εˆβ€γ€‚" - -msgid "importerGEXF_error_edgedouble" -msgstr "θΎΉη±»εž‹β€œεŒη²ΎεΊ¦εž‹β€οΌŒη›ε‰δΈζ”―ζŒγ€‚θΎη½δΈΊι»˜θ€ηš„β€œζ··εˆβ€γ€‚" - -msgid "importerGEXF_error_edgetype" -msgstr "θΎΉβ€œ{1}β€ηš„η±»εž‹β€œ{0}”不能蒫辨识。θΎη½δΈΊι»˜θ€ε€Όγ€‚" - -msgid "importerGEXF_error_edgeid" -msgstr "θΎΉIDδΈ’ε€±γ€‚ε·²η»η”ŸζˆδΈ€δΈͺID。" - -msgid "importerGEXF_error_edgesource" -msgstr "边源丒倱。边蒫忽η•₯。" - -msgid "importerGEXF_error_edgetarget" -msgstr "η›ζ ‡θΎΉδΈ’倱。边蒫忽η•₯。" - -msgid "importerGEXF_error_edgeweight" -msgstr "IDδΈΊβ€œ{0}β€θΎΉηš„ζƒι‡δΈζ˜―ζ΅η‚Ήεž‹ηš„。权重蒫忽η•₯。" - -msgid "importerGEXF_error_nodeid" -msgstr "θŠ‚η‚ΉIDζ˜―δΈ’ε€±ηš„γ€‚θ―₯θŠ‚η‚Ήε°†θ’«εΏ½η•₯。" - -msgid "importerGEXF_error_nodeposition" -msgstr "θŠ‚η‚Ήβ€œ{0}β€ζœ‰δΈ€δΈͺι”™θ――ηš„δ½η½β€œ{1}β€οΌˆδΈζ˜―ζ΅η‚Ήεž‹οΌ‰γ€‚" - -msgid "importerGEXF_error_nodesize" -msgstr "θŠ‚η‚Ήβ€œ{0} ''ζœ‰δΈ€δΈͺι”™θ――ηš„ε€§ε°οΌˆδΈζ˜―ζ΅η‚Ήεž‹οΌ‰γ€‚" - -msgid "importerGEXF_error_notnode" -msgstr "ε…ƒη΄ β€œ{0}β€δΈζ˜―δΈ€δΈͺθŠ‚η‚Ήγ€‚θ―₯ε…ƒη΄ θ’«εΏ½η•₯。" - -msgid "importerGEXF_error_pid_notfound" -msgstr "ζ‰ΎδΈεˆ°θŠ‚η‚Ήβ€œ{1}β€ηš„ηˆΆPIDβ€œ{0}”。" - -msgid "importerGEXF_error_parsingdatetype" -msgstr "ζ—₯ζœŸη±»εž‹β€œ{0}β€ζ˜―δΈθ’«θΎ¨θ―†ηš„γ€‚θΎη½δΈΊι»˜θ€ηš„β€œζ—₯ζœŸβ€γ€‚" - -msgid "importerGEXF_error_parsingmode" -msgstr "θ§£ζžζ¨‘εΌβ€œ{0}β€ζ˜―δΈθ’«θΎ¨θ―†ηš„γ€‚θΎη½δΈΊι»˜θ€β€œι™ζ€β€γ€‚" - -msgid "importerGEXF_error_node_timeinterval_parseerror" -msgstr "θŠ‚η‚Ήβ€œ{0}β€ηš„ζ—Άι—΄ι—΄ιš”δΈθƒ½θ’«θ§£ζžγ€‚δ½Ώη”¨xsd:ζ—₯期,xsd:ζ—₯ζœŸζ—Άι—΄ζˆ–θ€…εŒη²ΎεΊ¦εž‹γ€‚" - -msgid "importerGEXF_error_edge_timeinterval_parseerror" -msgstr "θΎΉβ€œ{0}β€ηš„ζ—Άι—΄ι—΄ιš”δΈθƒ½θ’«θ§£ζžγ€‚δ½Ώη”¨csd:ζ—₯期,xsd:ζ—₯ζœŸζ—Άι—΄ζˆ–θ€…εŒη²ΎεΊ¦εž‹γ€‚" - -msgid "importerGEXF_error_nodeattribute_timeinterval_parseerror" -msgstr "θŠ‚η‚Ήβ€œ{0}β€ε±žζ€§ηš„ζ—Άι—΄ι—΄ιš”δΈθƒ½θ’«θ§£ζžγ€‚δ½Ώη”¨xsd:ζ—₯期,xsd:ζ—₯ζœŸζ—Άι—΄ζˆ–θ€…εŒη²ΎεΊ¦εž‹γ€‚" - -msgid "importerGEXF_error_edgeattribute_timeinterval_parseerror" -msgstr "θΎΉβ€œ{0}β€ε±žζ€§ηš„ζ—Άι—΄ι—΄ιš”δΈθƒ½θ’«θ§£ζžγ€‚δ½Ώη”¨xsd:ζ—₯期,xsd:ζ—₯ζœŸζ—Άι—΄ζˆ–θ€…εŒη²ΎεΊ¦εž‹γ€‚" - -msgid "importerGEXF_error_nodecolorvalue" -msgstr "IDδΈΊβ€œ{1}β€ηš„θŠ‚η‚Ήζœ‰δΈ€δΈͺι”™θ――ηš„ι’œθ‰²ι€šι“β€œ{2}''=''{0}”。εƒεΊ”δΈΊ0 <β€œ{2}”<255。" - -msgid "importerGEXF_error_edgecolorvalue" -msgstr "IDδΈΊβ€œ{1}β€ηš„θΎΉζœ‰δΈ€δΈͺι”™θ――ηš„ι’œθ‰²ι€šι“β€œ{2}''=''{0}”。εƒεΊ”δΈΊ0 <β€œ{2}”<255。" - -msgid "importerGEXF_error_nodeopacityvalue" -msgstr "IDδΈΊβ€œ{1}β€ηš„θŠ‚η‚Ήζœ‰δΈ€δΈͺι”™θ――ηš„δΈι€ζ˜ŽεΊ¦a=''{0}”。εƒεΊ”δΈΊ0 β€œ" - -msgid "importerDL_error_mmissing" -msgstr "DLζ–‡δ»Άε€΄εΏ…ι‘»εŒ…ε«ζ ‡η­Ύβ€œm = β€œ" - -msgid "importerDL_error_labelscount" -msgstr "ζ ‡θ°οΌˆ{0}οΌ‰ηš„ζ•°ι‡δΈεŒδΊŽζ ‡η­ΎοΌˆ{1}οΌ‰" - -msgid "importerDL_error_nodata" -msgstr "ζ²‘ζœ‰ε‘ηŽ°ζ•°ζηΊΏ" - -msgid "importerDL_error_matrixrowscount" -msgstr "ηŸ©ι˜΅ηš„θ‘Œζ•°οΌˆ{0}οΌ‰ζ―”nζ ‡η­ΎοΌˆ{1}οΌ‰ε€š" - -msgid "importerDL_error_matrixrowscount2" -msgstr "ηŸ©ι˜΅ηš„θ‘Œζ•°οΌˆ{0}οΌ‰ζ˜―ζ―”nζ ‡η­ΎοΌˆ{1}οΌ‰ε°‘" - -msgid "importerDL_error_matriciescount" -msgstr "ηŸ©ι˜΅ι›†οΌˆ{0}οΌ‰ηš„ζ•°ι‡ζ˜―δΈεŒδΈŽnmζ ‡η­ΎοΌˆ{1}οΌ‰" - -msgid "importerDL_error_matrixentriescount" -msgstr "矩阡{0}θ‘ŒθΎ“ε…₯ηš„ζ•°ι‡ε·²θΆ…θΏ‡ε…θΈε€ΌοΌˆDLζ–‡δ»Άηš„{2}θ‘ŒοΌ‰" - -msgid "importerDL_error_weightparseerror" -msgstr "ζ— ζ³•θ§£ζžζƒι‡β€œ{0}β€ηŸ©ι˜΅{1}ηš„{2}葌" - -msgid "importerDL_error_edgelistssetscount" -msgstr "θΎΉεˆ—θ‘¨ηš„ι›†εˆοΌˆ{0}οΌ‰ηš„ζ•°ι‡δΈεŒδΈŽnmζ ‡θ°οΌˆ{1}οΌ‰" - -msgid "importerDL_error_edgelistrowparse" -msgstr "ζ— ζ³•θ§£ζžIDδΈΊβ€œ{0}β€ηš„θΎΉεˆ—θ‘¨ηš„η¬¬{1}葌" - -msgid "importerDL_error_edgeparseweight" -msgstr "ζ— ζ³•θ§£ζžIDδΈΊβ€œ{0}β€ηš„θΎΉεˆ—θ‘¨ηš„η¬¬{1}θ‘Œηš„ζƒι‡" - -msgid "importerDOT_error_nothingfound" -msgstr "ζ²‘ζœ‰ζ‰Ύεˆ°β€œε›Ύβ€ζˆ–β€œζœ‰ε‘ε›Ύβ€" - -msgid "importerDOT_error_labelunreachable" -msgstr "ζ— ζ³•ζ‰Ύεˆ°{0}θ‘Œηš„ζ ‡η­Ύ" - -msgid "importerDOT_error_colorunreachable" -msgstr "ζ— ζ³•ζ‰Ύεˆ°{0}θ‘Œηš„ι’œθ‰²" - -msgid "importerDOT_error_edgeparsing" -msgstr "ζ— ζ³•θ§£ζž{0}θ‘Œηš„θΎΉ" - -msgid "importerDOT_error_posunreachable" -msgstr "在{0}θ‘Œζ— ζ³•θ§£ζžθŠ‚η‚Ήηš„δ½η½γ€‚εΏ…ι‘»ζ˜―pos =β€œx,y”。" - -msgid "importerDOT_error_weightunreachable" -msgstr "在{0}θ‘Œζ— ζ³•θ§£ζžθΎΉηš„ζƒι‡" - -msgid "importerDOT_log_nodeattribute" -msgstr "θŠ‚η‚Ήηš„ε±žζ€§ε‘ηŽ°'' {0}β€œοΌˆ{1}οΌ‰" diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/fr.po b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/fr.po deleted file mode 100644 index b91aac5029..0000000000 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/fr.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:02+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ImplΓ©mentation des importeurs standards pour les fichiers et les bases de donnΓ©es" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplΓ©mentation des importeurs standards" diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/ja.po b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/ja.po deleted file mode 100644 index cad5542fb0..0000000000 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-19 05:21+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "標準γγƒ•γ‚‘むルとデータベースγγ‚¨γ‚―スポータγεŸθ£…" - -msgid "OpenIDE-Module-Short-Description" -msgstr "標準γγƒ•γ‚‘むルとデータベースγγ‚¨γ‚―スポータγεŸθ£…" diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/org-gephi-io-importer-plugin.pot b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/org-gephi-io-importer-plugin.pot deleted file mode 100644 index 29fcc92bb1..0000000000 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/org-gephi-io-importer-plugin.pot +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Standard file and database importers implementations" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Standard file and database importers implementations" diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/pt_BR.po b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/pt_BR.po deleted file mode 100644 index 6721bcff97..0000000000 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/pt_BR.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 17:04+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ImplementaΓ§Γ΅es padrΓ£o de importadores de arquivos e bases de dados " - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplementaΓ§Γ΅es padrΓ£o de importadores de arquivos e bases de dados" diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/ru.po b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/ru.po deleted file mode 100644 index 8b7fe01a44..0000000000 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/ru.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 15:29+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "РСализация ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΈΠ· стандартных Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…" - -msgid "OpenIDE-Module-Short-Description" -msgstr "РСализация ΠΈΠΌΠΏΠΎΡ€Ρ‚Π° ΠΈΠ· стандартных Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…" diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/zh_CN.po b/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/zh_CN.po deleted file mode 100644 index 1c1e23032e..0000000000 --- a/modules/ImportPlugin/src/main/resources/org/gephi/io/importer/plugin/zh_CN.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:11+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ζ ‡ε‡†ηš„ζ–‡δ»Άε’Œζ•°ζεΊ“θΎ“ε…₯εžηް" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζ ‡ε‡†ηš„ζ–‡δ»Άε’Œζ•°ζεΊ“θΎ“ε…₯εžηް" diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle.properties new file mode 100644 index 0000000000..1ec0a32d6e --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle.properties @@ -0,0 +1,18 @@ +AppendProcessor.displayName = Append to existing workspace +DefaultProcessor.displayName = New workspace +MergeProcessor.displayName = Merge into new workspace +MultiProcessor.displayName = Create multiple workspaces + +AbstractProcessor.warning.overlappingIntervals=Cannot completely merge overlapping interval sets {0} and {1}. Resulting merged set: {2} +AbstractProcessor.error.columnTypeMismatch=Existing column ''{0}'' in graph with type ''{1}'' is not compatible with imported column type ''{2}''. Keeping original type and values. +AbstractProcessor.error.columnDefaultValueTypeMismatch=Column ''{0}'' default value ''{1}'' with type ''{2}'' is not compatible with the column type ''{3}''. Using null as default value. +AbstractProcessor.error.unavailableColumnType=Attribute type ''{0}'' is unavailable for current time representation: {1}. Cannot add column with id ''{2}''. +AbstractProcessor.error.nodeIdTypeMismatch=Node id type ''{0}'' is not compatible with existing node id type ''{1}'' in the workspace. +AbstractProcessor.error.edgeIdTypeMismatch=Edge id type ''{0}'' is not compatible with existing edge id type ''{1}'' in the workspace. +AbstractProcessor.error.timeRepresentationMismatch=Time representation ''{0}'' is not compatible with existing time representation ''{1}'' in the workspace. +AbstractProcessor.error.edgeWeightTypeMismatch=Edge weight type ''{0}'' is not compatible with existing edge weight type ''{1}'' in the workspace. +AbstractProcessor.error.edgeLabelTypeMismatch=Edge type ''{0}'' is not compatible with existing edge label type ''{1}'' in the workspace. +DefaultProcessor.error.incompatibleEdges=No merge strategy was chosen but the edge {0} cannot be created because it can''t exist at the same time with edge {1} (incompatible). Skipping new edge. +DefaultProcessor.warning.incompatibleEdgeDirectedness=The imported edge {0} cannot be added because it is directionally incompatible with existing edge {1} in the workspace. Skipping. +AppendProcessor.info.overlappingNodes={0} node(s) from the imported graph had matching IDs with existing nodes in the workspace and were merged. +AppendProcessor.info.overlappingEdges={0} edge(s) from the imported graph had matching IDs with existing edges in the workspace and were merged. \ No newline at end of file diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_ar.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_ca.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_ca.properties new file mode 100644 index 0000000000..4bb925d169 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_ca.properties @@ -0,0 +1,9 @@ +AppendProcessor.displayName=Append to existing workspace +DefaultProcessor.displayName=Nou banc de treball +MergeProcessor.displayName=Merge into new worskpace +MultiProcessor.displayName=Crea diversos bancs de treball +AbstractProcessor.warning.overlappingIntervals=Cannot completely merge overlapping interval sets {0} and {1}. Resulting merged set: {2} +AbstractProcessor.error.columnTypeMismatch=Existing column ''{0}'' in graph with type ''{1}'' is not compatible with imported column type ''{2}''. Keeping original type and values. +AbstractProcessor.error.columnDefaultValueTypeMismatch=Column ''{0}'' default value ''{1}'' with type ''{2}'' is not compatible with the column type ''{3}''. Using null as default value. +AbstractProcessor.error.unavailableColumnType=Attribute type ''{0}'' is unavailable for current time representation: {1}. Cannot add column with id ''{2}''. +DefaultProcessor.error.configurationChangeForbidden=Cannot change graph configuration when the graph is not empty. Original configuration: {0}, new wanted configuration: {1} diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_cs.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_cs.properties new file mode 100644 index 0000000000..7bb74258c4 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_cs.properties @@ -0,0 +1,11 @@ +# AppendProcessor.displayName = Append to existing workspace +# DefaultProcessor.displayName = New workspace +# MergeProcessor.displayName = Merge into new worskpace +# MultiProcessor.displayName = Create multiple workspaces + +# AbstractProcessor.warning.overlappingIntervals=Cannot completely merge overlapping interval sets {0} and {1}. Resulting merged set: {2} +# AbstractProcessor.error.columnTypeMismatch=Existing column ''{0}'' in graph with type ''{1}'' is not compatible with imported column type ''{2}''. Keeping original type and values. +# AbstractProcessor.error.columnDefaultValueTypeMismatch=Column ''{0}'' default value ''{1}'' with type ''{2}'' is not compatible with the column type ''{3}''. Using null as default value. +# AbstractProcessor.error.unavailableColumnType=Attribute type ''{0}'' is unavailable for current time representation: {1}. Cannot add column with id ''{2}''. + +# DefaultProcessor.error.configurationChangeForbidden=Cannot change graph configuration when the graph is not empty. Original configuration: {0}, new wanted configuration: {1} diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_de.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_de.properties new file mode 100644 index 0000000000..c854d7a20d --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_de.properties @@ -0,0 +1,13 @@ +# AppendProcessor.displayName = Append to existing workspace +# DefaultProcessor.displayName = New workspace +# MergeProcessor.displayName = Merge into new worskpace +# MultiProcessor.displayName = Create multiple workspaces + +# AbstractProcessor.warning.overlappingIntervals=Cannot completely merge overlapping interval sets {0} and {1}. Resulting merged set: {2} +# AbstractProcessor.error.columnTypeMismatch=Existing column ''{0}'' in graph with type ''{1}'' is not compatible with imported column type ''{2}''. Keeping original type and values. +# AbstractProcessor.error.columnDefaultValueTypeMismatch=Column ''{0}'' default value ''{1}'' with type ''{2}'' is not compatible with the column type ''{3}''. Using null as default value. +# AbstractProcessor.error.unavailableColumnType=Attribute type ''{0}'' is unavailable for current time representation: {1}. Cannot add column with id ''{2}''. + +# DefaultProcessor.error.configurationChangeForbidden=Cannot change graph configuration when the graph is not empty. Original configuration: {0}, new wanted configuration: {1} + +AppendProcessor.displayName=An existierenden Workspace anh\u00E4ngen diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_es.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_es.properties new file mode 100644 index 0000000000..39462438b1 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_es.properties @@ -0,0 +1,10 @@ +AppendProcessor.displayName=A\u00f1adir al espacio de trabajo existente +DefaultProcessor.displayName=Nuevo espacio de trabajo +MergeProcessor.displayName=Unir en un nuevo espacio de trabajo +MultiProcessor.displayName=Crear m\u00faltiples espacios de trabajo +AbstractProcessor.warning.overlappingIntervals=No es posible fusionar completamente los conjuntos de intervalos {0} y {1}. Conjunto fusionado resultante: {2} +AbstractProcessor.error.columnTypeMismatch=La columna existente ''{0}'' en el grafo con tipo ''{1}'' no es compatible con la columna a importar con tipo ''{2}''. Se mantendr\u00e1 el tipo y valores originales. +AbstractProcessor.error.columnDefaultValueTypeMismatch=El valor por defecto ''{1}'' de la columna ''{0}'' con tipo ''{2}'' no es compatible con el tipo de la columna: ''{3}''. Se usar\u00e1 nulo como valor por defecto. +AbstractProcessor.error.unavailableColumnType=El tipo de atributo ''{0}'' no est\u00e1 disponible para la representaci\u00f3n temporal actual: {1}. No es posible a\u00f1adir la columna con id ''{2}''. +DefaultProcessor.error.configurationChangeForbidden=La configuraci\u00F3n del grafo debe coincidir con el espacio de trabajo existente. Configuraci\u00F3n original: {0}, nueva configuraci\u00F3n deseada: {1} +DefaultProcessor.error.incompatibleEdges=No se ha seleccionado ninguna estrategia de combinaci\u00F3n, pero no se puede crear el borde {0} porque no puede existir al mismo tiempo que el borde {1} (incompatible). Salta una nueva ventaja. diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_fr.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_fr.properties new file mode 100644 index 0000000000..810502818e --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_fr.properties @@ -0,0 +1,10 @@ +AppendProcessor.displayName=Ajouter \u00e0 l'espace de travail existant +DefaultProcessor.displayName=Nouvel espace de travail +MergeProcessor.displayName=Fusionner dans un nouvel espace de travail +MultiProcessor.displayName=Cr\u00e9er plusieurs espaces de travail +AbstractProcessor.warning.overlappingIntervals=Impossible de fusionner compl\u00e8tement les ensembles d'intervalle se chevauchant {0} et {1}. Ensemble fusionn\u00e9 r\u00e9sultant : {2} +AbstractProcessor.error.columnTypeMismatch=La colonne existante '' {0} '' dans le graphe avec le type '' {1} '' n'est pas compatible avec le type de colonne import\u00e9 '' {2} ''. Le type et les valeurs d'origine sont conserv\u00e9es. +AbstractProcessor.error.columnDefaultValueTypeMismatch=La colonne '' {0} '' valeur par d\u00e9faut '' {1} '' avec le type '' {2} '' n'est pas compatible avec le type de colonne '' {3} ''. Null est utilis\u00e9e comme valeur par d\u00e9faut. +AbstractProcessor.error.unavailableColumnType=Le type d'attribut '' {0} '' n'est pas disponible pour la repr\u00e9sentation du temps actuelle: {1}. Impossible d'ajouter une colonne avec id '' {2} ''. +DefaultProcessor.error.configurationChangeForbidden=Impossible de modifier la configuration du graphe lorsque le graphe n'est pas vide. Configuration originale: {0}, nouvelle configuration recherch\u00E9e: {1} +DefaultProcessor.error.incompatibleEdges=Aucune strat\u00E9gie de fusion n'a \u00E9t\u00E9 choisi, mais le lien {0} ne peut \u00EAtre cr\u00E9\u00E9 car il ne peut exister en m\u00EAme temps que le lien {1}. Le nouveau lien est ignor\u00E9. diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_he.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_he.properties new file mode 100644 index 0000000000..c9dc0c6357 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_he.properties @@ -0,0 +1,9 @@ +AppendProcessor.displayName=Append to existing workspace +DefaultProcessor.displayName=New workspace +MergeProcessor.displayName=Merge into new worskpace +MultiProcessor.displayName=Create multiple workspaces +AbstractProcessor.warning.overlappingIntervals=Cannot completely merge overlapping interval sets {0} and {1}. Resulting merged set: {2} +AbstractProcessor.error.columnTypeMismatch=Existing column ''{0}'' in graph with type ''{1}'' is not compatible with imported column type ''{2}''. Keeping original type and values. +AbstractProcessor.error.columnDefaultValueTypeMismatch=Column ''{0}'' default value ''{1}'' with type ''{2}'' is not compatible with the column type ''{3}''. Using null as default value. +AbstractProcessor.error.unavailableColumnType=Attribute type ''{0}'' is unavailable for current time representation: {1}. Cannot add column with id ''{2}''. +DefaultProcessor.error.configurationChangeForbidden=Cannot change graph configuration when the graph is not empty. Original configuration: {0}, new wanted configuration: {1} diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_hu.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_hu.properties new file mode 100644 index 0000000000..e604506461 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_hu.properties @@ -0,0 +1,12 @@ + + +AppendProcessor.displayName=Hozz\u00E1f\u0171z\u00E9s a megl\u00E9v\u0151 munkater\u00FClethez +DefaultProcessor.error.incompatibleEdges=Nem v\u00E1lasztottak egyes\u00EDt\u00E9si strat\u00E9gi\u00E1t, de a(z) {0} \u00E9l nem hozhat\u00F3 l\u00E9tre, mert nem l\u00E9tezhet a(z) {1} \u00E9llel egy id\u0151ben (nem kompatibilis). \u00DAj \u00E9l kihagy\u00E1sa. +AbstractProcessor.warning.overlappingIntervals=A(z) {0} \u00E9s {1} \u00E1tfed\u0151 intervallumk\u00E9szletek nem egyes\u00EDthet\u0151k teljesen. Az eredm\u00E9ny\u00FCl kapott egyes\u00EDtett k\u00E9szlet: {2} +DefaultProcessor.displayName=\u00DAj munkater\u00FClet +MergeProcessor.displayName=Egyes\u00FClj\u00F6n \u00FAj munkater\u00FCletre +MultiProcessor.displayName=Hozzon l\u00E9tre t\u00F6bb munkater\u00FCletet +AbstractProcessor.error.columnDefaultValueTypeMismatch=A(z) ''{0}'' oszlop alap\u00E9rtelmezett \u00E9rt\u00E9ke ''{1}'', ''{2}'' t\u00EDpussal, nem kompatibilis a ''{3}'' oszlopt\u00EDpussal. Null haszn\u00E1lata alap\u00E9rtelmezett \u00E9rt\u00E9kk\u00E9nt. +AbstractProcessor.error.unavailableColumnType=A(z) \u201E{0}\u201D attrib\u00FAtumt\u00EDpus nem \u00E9rhet\u0151 el az aktu\u00E1lis id\u0151 megjelen\u00EDt\u00E9s\u00E9hez: {1}. Nem adhat\u00F3 hozz\u00E1 oszlop a k\u00F6vetkez\u0151 azonos\u00EDt\u00F3val: ''{2}''. +AbstractProcessor.error.columnTypeMismatch=A(z) \u201E{1}\u201D t\u00EDpus\u00FA diagram megl\u00E9v\u0151 \u201E{0}\u201D oszlopa nem kompatibilis az import\u00E1lt \u201E{2}\u201D oszlopt\u00EDpussal. Az eredeti t\u00EDpus \u00E9s \u00E9rt\u00E9kek megtart\u00E1sa. +DefaultProcessor.error.configurationChangeForbidden=A grafikon konfigur\u00E1ci\u00F3ja nem m\u00F3dos\u00EDthat\u00F3, ha a grafikon nem \u00FCres. Eredeti konfigur\u00E1ci\u00F3: {0}, \u00FAj keresett konfigur\u00E1ci\u00F3: {1} diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_it.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_it.properties new file mode 100644 index 0000000000..c9dc0c6357 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_it.properties @@ -0,0 +1,9 @@ +AppendProcessor.displayName=Append to existing workspace +DefaultProcessor.displayName=New workspace +MergeProcessor.displayName=Merge into new worskpace +MultiProcessor.displayName=Create multiple workspaces +AbstractProcessor.warning.overlappingIntervals=Cannot completely merge overlapping interval sets {0} and {1}. Resulting merged set: {2} +AbstractProcessor.error.columnTypeMismatch=Existing column ''{0}'' in graph with type ''{1}'' is not compatible with imported column type ''{2}''. Keeping original type and values. +AbstractProcessor.error.columnDefaultValueTypeMismatch=Column ''{0}'' default value ''{1}'' with type ''{2}'' is not compatible with the column type ''{3}''. Using null as default value. +AbstractProcessor.error.unavailableColumnType=Attribute type ''{0}'' is unavailable for current time representation: {1}. Cannot add column with id ''{2}''. +DefaultProcessor.error.configurationChangeForbidden=Cannot change graph configuration when the graph is not empty. Original configuration: {0}, new wanted configuration: {1} diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_ja.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_ja.properties new file mode 100644 index 0000000000..7bb74258c4 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_ja.properties @@ -0,0 +1,11 @@ +# AppendProcessor.displayName = Append to existing workspace +# DefaultProcessor.displayName = New workspace +# MergeProcessor.displayName = Merge into new worskpace +# MultiProcessor.displayName = Create multiple workspaces + +# AbstractProcessor.warning.overlappingIntervals=Cannot completely merge overlapping interval sets {0} and {1}. Resulting merged set: {2} +# AbstractProcessor.error.columnTypeMismatch=Existing column ''{0}'' in graph with type ''{1}'' is not compatible with imported column type ''{2}''. Keeping original type and values. +# AbstractProcessor.error.columnDefaultValueTypeMismatch=Column ''{0}'' default value ''{1}'' with type ''{2}'' is not compatible with the column type ''{3}''. Using null as default value. +# AbstractProcessor.error.unavailableColumnType=Attribute type ''{0}'' is unavailable for current time representation: {1}. Cannot add column with id ''{2}''. + +# DefaultProcessor.error.configurationChangeForbidden=Cannot change graph configuration when the graph is not empty. Original configuration: {0}, new wanted configuration: {1} diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_ko.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_ko.properties new file mode 100644 index 0000000000..4eaf9e2f20 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_ko.properties @@ -0,0 +1,12 @@ + + +AppendProcessor.displayName=\uAE30\uC874 \uC791\uC5C5\uACF5\uAC04\uC5D0 \uCD94\uAC00\uD558\uAE30 +DefaultProcessor.displayName=\uC0C8 \uC791\uC5C5\uACF5\uAC04 +MergeProcessor.displayName=\uC0C8 \uC791\uC5C5\uACF5\uAC04\uC5D0 \uBCD1\uD569\uD558\uAE30 +MultiProcessor.displayName=\uC5EC\uB7EC \uC791\uC5C5\uACF5\uAC04 \uC0DD\uC131\uD558\uAE30 +AbstractProcessor.warning.overlappingIntervals=\uACB9\uCE58\uB294 \uAC04\uACA9 \uC9D1\uD569 {0}\uACFC {1}\uC744 \uC644\uBCBD\uD558\uAC8C \uBCD1\uD569\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uACB0\uACFC\uC801 \uBCD1\uD569 \uC9D1\uD569: {2} +AbstractProcessor.error.columnTypeMismatch=\uADF8\uB798\uD504\uC5D0\uC11C \uD0C0\uC785\uC774 ''{1}''\uC778 \uAE30\uC874 \uC5F4 ''{0}''\uC774(\uAC00) \uAC00\uC838\uC628 \uC5F4 \uD0C0\uC785 "{2}"\uC640 \uD638\uD658\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uC6D0\uB798\uC758 \uD0C0\uC785\uACFC \uAC12\uC774 \uC720\uC9C0\uB429\uB2C8\uB2E4. +AbstractProcessor.error.unavailableColumnType=\uC18D\uC131 \uD0C0\uC785 "{0}"\uC740 \uD604\uC7AC \uC2DC\uAC04 \uD45C\uD604 {1}\uC5D0 \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC544\uC774\uB514 ''{2}''\uC778 \uC5F4\uC744 \uCD94\uAC00\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. +DefaultProcessor.error.configurationChangeForbidden=\uADF8\uB798\uD504\uAC00 \uBE44\uC5B4 \uC788\uC9C0 \uC54A\uC73C\uBA74 \uADF8\uB798\uD504 \uAD6C\uC131\uC744 \uBCC0\uACBD\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. \uC6D0\uB798 \uAD6C\uC131: {0}, \uC0C8\uB86D\uAC8C \uC6D0\uD558\uB294 \uAD6C\uC131: {1} +DefaultProcessor.error.incompatibleEdges=\uBCD1\uD569 \uBC29\uBC95\uC774 \uC120\uD0DD\uB418\uC9C0 \uC54A\uC558\uC9C0\uB9CC, \uC5E3\uC9C0 {0}\uC740 \uC5E3\uC9C0 {1}\uACFC \uB3D9\uC2DC\uC5D0 \uC874\uC7AC\uD560 \uC218 \uC5C6\uC5B4\uC11C \uC0DD\uC131\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. +AbstractProcessor.error.columnDefaultValueTypeMismatch=\uD0C0\uC785 ''{2}''\uC5D0 \uAE30\uBCF8\uAC12 ''{1}''\uC778 \uC5F4 ''{0}''\uC774(\uAC00) \uC5F4 \uD0C0\uC785 ''{3}''\uACFC \uB9DE\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uAE30\uBCF8\uAC12\uC73C\uB85C null\uC744 \uC0AC\uC6A9\uD569\uB2C8\uB2E4. diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_nl.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_nl.properties new file mode 100644 index 0000000000..3b5a0b1678 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_nl.properties @@ -0,0 +1,9 @@ +AppendProcessor.displayName=Toevoegen aan bestaande werkruimte +DefaultProcessor.displayName=Nieuwe werkruimte +MergeProcessor.displayName=Merge into new worskpace +MultiProcessor.displayName=Meerdere werkruimtes maken +AbstractProcessor.warning.overlappingIntervals=Cannot completely merge overlapping interval sets {0} and {1}. Resulting merged set: {2} +AbstractProcessor.error.columnTypeMismatch=Existing column ''{0}'' in graph with type ''{1}'' is not compatible with imported column type ''{2}''. Keeping original type and values. +AbstractProcessor.error.columnDefaultValueTypeMismatch=Column ''{0}'' default value ''{1}'' with type ''{2}'' is not compatible with the column type ''{3}''. Using null as default value. +AbstractProcessor.error.unavailableColumnType=Attribute type ''{0}'' is unavailable for current time representation: {1}. Cannot add column with id ''{2}''. +DefaultProcessor.error.configurationChangeForbidden=Cannot change graph configuration when the graph is not empty. Original configuration: {0}, new wanted configuration: {1} diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_pt_BR.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_pt_BR.properties new file mode 100644 index 0000000000..497d570579 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_pt_BR.properties @@ -0,0 +1,14 @@ +# AppendProcessor.displayName = Append to existing workspace +# DefaultProcessor.displayName = New workspace +# MergeProcessor.displayName = Merge into new worskpace +# MultiProcessor.displayName = Create multiple workspaces + +# AbstractProcessor.warning.overlappingIntervals=Cannot completely merge overlapping interval sets {0} and {1}. Resulting merged set: {2} +# AbstractProcessor.error.columnTypeMismatch=Existing column ''{0}'' in graph with type ''{1}'' is not compatible with imported column type ''{2}''. Keeping original type and values. +# AbstractProcessor.error.columnDefaultValueTypeMismatch=Column ''{0}'' default value ''{1}'' with type ''{2}'' is not compatible with the column type ''{3}''. Using null as default value. +# AbstractProcessor.error.unavailableColumnType=Attribute type ''{0}'' is unavailable for current time representation: {1}. Cannot add column with id ''{2}''. + +# DefaultProcessor.error.configurationChangeForbidden=Cannot change graph configuration when the graph is not empty. Original configuration: {0}, new wanted configuration: {1} + +AppendProcessor.displayName=Adicionar ao espa\u00E7o de trabalho existente +DefaultProcessor.displayName=Novo espa\u00E7o de trabalho diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_ro.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_ro.properties new file mode 100644 index 0000000000..92402397c7 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_ro.properties @@ -0,0 +1,12 @@ + + +AppendProcessor.displayName=Adaug\u0103 la spa\u021Biul de lucru existent +DefaultProcessor.displayName=Spa\u021Biu de lucru nou +MergeProcessor.displayName=\u00CEmbin\u0103 \u00EEntr-un spa\u021Biu de lucru nou +MultiProcessor.displayName=Creaz\u0103 mai multe spa\u021Bii de lucru +AbstractProcessor.warning.overlappingIntervals=Nu se pot \u00EEmbina complet seturile de intervale suprapuse {0} \u0219i {1}. Setul rezultat: {2} +AbstractProcessor.error.columnTypeMismatch=Coloana existent\u0103 ''{0}'' cu tipul ''{1}'' din graf nu este compatibil\u0103 cu tipul de coloan\u0103 importat ''{2}''. Vor fi p\u0103strate tipul \u0219i valorile originale. +AbstractProcessor.error.columnDefaultValueTypeMismatch=Valoarea implicit\u0103 ''{1}'' de tip ''{2}'' pentru coloana ''{0}'' nu este compatibil\u0103 cu tipul de coloana ''{3}''. Se va folosi valoarea implicit\u0103 nul. +AbstractProcessor.error.unavailableColumnType=Tipul de atribut ''{0}'' nu este disponibil pentru reprezentarea de timp curent\u0103: {1}. Nu se poate ad\u0103uga coloana cu id-ul ''{2}''. +DefaultProcessor.error.configurationChangeForbidden=Nu se poate modifica configura\u021Bia graficului c\u00E2nd nu este gol. Configura\u021Bia original\u0103: {0}, noua configura\u021Bie dorit\u0103: {1} +DefaultProcessor.error.incompatibleEdges=Nu a fost aleas\u0103 nicio strategie de \u00EEmbinare, dar muchia {0} nu poate fi creat\u0103 deoarece nu poate exista \u00EEn acela\u0219i timp cu muchia {1} (incompatibile). Muchia nou\u0103 va fi ignorat\u0103. diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_ru.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_ru.properties new file mode 100644 index 0000000000..7bb74258c4 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_ru.properties @@ -0,0 +1,11 @@ +# AppendProcessor.displayName = Append to existing workspace +# DefaultProcessor.displayName = New workspace +# MergeProcessor.displayName = Merge into new worskpace +# MultiProcessor.displayName = Create multiple workspaces + +# AbstractProcessor.warning.overlappingIntervals=Cannot completely merge overlapping interval sets {0} and {1}. Resulting merged set: {2} +# AbstractProcessor.error.columnTypeMismatch=Existing column ''{0}'' in graph with type ''{1}'' is not compatible with imported column type ''{2}''. Keeping original type and values. +# AbstractProcessor.error.columnDefaultValueTypeMismatch=Column ''{0}'' default value ''{1}'' with type ''{2}'' is not compatible with the column type ''{3}''. Using null as default value. +# AbstractProcessor.error.unavailableColumnType=Attribute type ''{0}'' is unavailable for current time representation: {1}. Cannot add column with id ''{2}''. + +# DefaultProcessor.error.configurationChangeForbidden=Cannot change graph configuration when the graph is not empty. Original configuration: {0}, new wanted configuration: {1} diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_th.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_tr.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_tr.properties new file mode 100644 index 0000000000..7bb74258c4 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_tr.properties @@ -0,0 +1,11 @@ +# AppendProcessor.displayName = Append to existing workspace +# DefaultProcessor.displayName = New workspace +# MergeProcessor.displayName = Merge into new worskpace +# MultiProcessor.displayName = Create multiple workspaces + +# AbstractProcessor.warning.overlappingIntervals=Cannot completely merge overlapping interval sets {0} and {1}. Resulting merged set: {2} +# AbstractProcessor.error.columnTypeMismatch=Existing column ''{0}'' in graph with type ''{1}'' is not compatible with imported column type ''{2}''. Keeping original type and values. +# AbstractProcessor.error.columnDefaultValueTypeMismatch=Column ''{0}'' default value ''{1}'' with type ''{2}'' is not compatible with the column type ''{3}''. Using null as default value. +# AbstractProcessor.error.unavailableColumnType=Attribute type ''{0}'' is unavailable for current time representation: {1}. Cannot add column with id ''{2}''. + +# DefaultProcessor.error.configurationChangeForbidden=Cannot change graph configuration when the graph is not empty. Original configuration: {0}, new wanted configuration: {1} diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_uk.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_uk.properties new file mode 100644 index 0000000000..0d1eb52013 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_uk.properties @@ -0,0 +1,10 @@ +AbstractProcessor.error.columnDefaultValueTypeMismatch=\u0417\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0441\u0442\u043E\u0432\u043F\u0446\u044F ''{0}'' \u0437\u0430 \u0443\u043C\u043E\u0432\u0447\u0430\u043D\u043D\u044F\u043C ''{1}'' \u0437 \u0442\u0438\u043F\u043E\u043C ''{2}'' \u043D\u0435\u0441\u0443\u043C\u0456\u0441\u043D\u0435 \u0437 \u0442\u0438\u043F\u043E\u043C \u0441\u0442\u043E\u0432\u043F\u0446\u044F ''{3}''. \u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u0430\u043D\u043D\u044F null \u044F\u043A \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0437\u0430 \u0443\u043C\u043E\u0432\u0447\u0430\u043D\u043D\u044F\u043C. +AppendProcessor.displayName=\u0414\u043E\u0434\u0430\u0442\u0438 \u0434\u043E \u0456\u0441\u043D\u0443\u044E\u0447\u043E\u0457 \u0440\u043E\u0431\u043E\u0447\u043E\u0457 \u043E\u0431\u043B\u0430\u0441\u0442\u0456 +DefaultProcessor.displayName=\u041D\u043E\u0432\u0430 \u0440\u043E\u0431\u043E\u0447\u0430 \u043E\u0431\u043B\u0430\u0441\u0442\u044C +MergeProcessor.displayName=\u041E\u0431\u2019\u0454\u0434\u043D\u0430\u0439\u0442\u0435\u0441\u044F \u0432 \u043D\u043E\u0432\u0443 \u0440\u043E\u0431\u043E\u0447\u0443 \u043E\u0431\u043B\u0430\u0441\u0442\u044C +MultiProcessor.displayName=\u0421\u0442\u0432\u043E\u0440\u0456\u0442\u044C \u043A\u0456\u043B\u044C\u043A\u0430 \u0440\u043E\u0431\u043E\u0447\u0438\u0445 \u043E\u0431\u043B\u0430\u0441\u0442\u0435\u0439 +AbstractProcessor.warning.overlappingIntervals=\u041D\u0435\u043C\u043E\u0436\u043B\u0438\u0432\u043E \u043F\u043E\u0432\u043D\u0456\u0441\u0442\u044E \u043E\u0431\u2019\u0454\u0434\u043D\u0430\u0442\u0438 \u043D\u0430\u0431\u043E\u0440\u0438 \u0456\u043D\u0442\u0435\u0440\u0432\u0430\u043B\u0456\u0432, \u0449\u043E \u043F\u0435\u0440\u0435\u043A\u0440\u0438\u0432\u0430\u044E\u0442\u044C\u0441\u044F, {0} \u0456 {1}. \u041E\u0442\u0440\u0438\u043C\u0430\u043D\u0438\u0439 \u043E\u0431\u2019\u0454\u0434\u043D\u0430\u043D\u0438\u0439 \u043D\u0430\u0431\u0456\u0440: {2} +AbstractProcessor.error.columnTypeMismatch=\u0406\u0441\u043D\u0443\u044E\u0447\u0438\u0439 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C ''{0}'' \u043D\u0430 \u0433\u0440\u0430\u0444\u0456\u043A\u0443 \u0437 \u0442\u0438\u043F\u043E\u043C ''{1}'' \u043D\u0435\u0441\u0443\u043C\u0456\u0441\u043D\u0438\u0439 \u0437 \u0456\u043C\u043F\u043E\u0440\u0442\u043E\u0432\u0430\u043D\u0438\u043C \u0442\u0438\u043F\u043E\u043C \u0441\u0442\u043E\u0432\u043F\u0446\u044F ''{2}''. \u0417\u0431\u0435\u0440\u0435\u0436\u0435\u043D\u043D\u044F \u043E\u0440\u0438\u0433\u0456\u043D\u0430\u043B\u044C\u043D\u043E\u0433\u043E \u0442\u0438\u043F\u0443 \u0442\u0430 \u0437\u043D\u0430\u0447\u0435\u043D\u044C. +AbstractProcessor.error.unavailableColumnType=\u0422\u0438\u043F \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0430 ''{0}'' \u043D\u0435\u0434\u043E\u0441\u0442\u0443\u043F\u043D\u0438\u0439 \u0434\u043B\u044F \u043F\u043E\u0442\u043E\u0447\u043D\u043E\u0433\u043E \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u043D\u044F \u0447\u0430\u0441\u0443: {1}. \u041D\u0435\u043C\u043E\u0436\u043B\u0438\u0432\u043E \u0434\u043E\u0434\u0430\u0442\u0438 \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C \u0437 \u0456\u0434\u0435\u043D\u0442\u0438\u0444\u0456\u043A\u0430\u0442\u043E\u0440\u043E\u043C ''{2}''. +DefaultProcessor.error.incompatibleEdges=\u041D\u0435 \u0431\u0443\u043B\u043E \u0432\u0438\u0431\u0440\u0430\u043D\u043E \u0436\u043E\u0434\u043D\u043E\u0457 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0456\u0457 \u0437\u043B\u0438\u0442\u0442\u044F, \u0430\u043B\u0435 \u043A\u0440\u0430\u0439 {0} \u043D\u0435 \u043C\u043E\u0436\u043D\u0430 \u0441\u0442\u0432\u043E\u0440\u0438\u0442\u0438, \u043E\u0441\u043A\u0456\u043B\u044C\u043A\u0438 \u0432\u0456\u043D \u043D\u0435 \u043C\u043E\u0436\u0435 \u0456\u0441\u043D\u0443\u0432\u0430\u0442\u0438 \u043E\u0434\u043D\u043E\u0447\u0430\u0441\u043D\u043E \u0437 \u0440\u0435\u0431\u0440\u043E\u043C {1} (\u043D\u0435\u0441\u0443\u043C\u0456\u0441\u043D\u0438\u0439). \u041F\u0440\u043E\u043F\u0443\u0441\u043A \u043D\u043E\u0432\u043E\u0433\u043E \u043A\u0440\u0430\u044E. +DefaultProcessor.error.configurationChangeForbidden=\u041A\u043E\u043D\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u044F \u0433\u0440\u0430\u0444\u0456\u043A\u0430 \u043C\u0430\u0454 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u0430\u0442\u0438 \u0456\u0441\u043D\u0443\u044E\u0447\u0456\u0439 \u0440\u043E\u0431\u043E\u0447\u0456\u0439 \u043E\u0431\u043B\u0430\u0441\u0442\u0456. \u041E\u0440\u0438\u0433\u0456\u043D\u0430\u043B\u044C\u043D\u0430 \u043A\u043E\u043D\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u044F: {0}, \u043D\u043E\u0432\u0430 \u043F\u043E\u0442\u0440\u0456\u0431\u043D\u0430 \u043A\u043E\u043D\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u044F: {1} diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_zh_CN.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_zh_CN.properties new file mode 100644 index 0000000000..eed99dd165 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_zh_CN.properties @@ -0,0 +1,19 @@ +# AppendProcessor.displayName = Append to existing workspace +# DefaultProcessor.displayName = New workspace +# MergeProcessor.displayName = Merge into new worskpace +# MultiProcessor.displayName = Create multiple workspaces + +# AbstractProcessor.warning.overlappingIntervals=Cannot completely merge overlapping interval sets {0} and {1}. Resulting merged set: {2} +# AbstractProcessor.error.columnTypeMismatch=Existing column ''{0}'' in graph with type ''{1}'' is not compatible with imported column type ''{2}''. Keeping original type and values. +# AbstractProcessor.error.columnDefaultValueTypeMismatch=Column ''{0}'' default value ''{1}'' with type ''{2}'' is not compatible with the column type ''{3}''. Using null as default value. +# AbstractProcessor.error.unavailableColumnType=Attribute type ''{0}'' is unavailable for current time representation: {1}. Cannot add column with id ''{2}''. + +# DefaultProcessor.error.configurationChangeForbidden=Cannot change graph configuration when the graph is not empty. Original configuration: {0}, new wanted configuration: {1} + +MergeProcessor.displayName=\u5408\u5E76\u5230\u65B0\u5DE5\u4F5C\u533A +MultiProcessor.displayName=\u521B\u5EFA\u591A\u4E2A\u5DE5\u4F5C\u533A +AppendProcessor.displayName=\u6DFB\u52A0\u5230\u73B0\u6709\u5DE5\u4F5C\u533A +DefaultProcessor.displayName=\u65B0\u5EFA\u5DE5\u4F5C\u533A +DefaultProcessor.error.configurationChangeForbidden=\u56FE\u8868\u4E0D\u4E3A\u7A7A\u65F6\u65E0\u6CD5\u66F4\u6539\u56FE\u8868\u914D\u7F6E\u3002 \u539F\u59CB\u914D\u7F6E\uFF1A{0}\uFF0C\u65B0\u60F3\u8981\u7684\u914D\u7F6E\uFF1A{1} +AbstractProcessor.error.columnTypeMismatch=\u5BFC\u5165\u7684\u5217\u7684\u7C7B\u578B\u201C{2}\u201D\u4E0E\u5F53\u524D\u56FE\u8868\u4E2D\u7684\u5217\u201C{0}\u201D\u53CA\u7C7B\u578B\u201C{1}\u201D\u4E0D\u5339\u914D\u3002\u4FDD\u6301\u5F53\u524D\u5217\u7684\u7C7B\u578B\u548C\u503C\u3002 +AbstractProcessor.error.columnDefaultValueTypeMismatch=\u5217\u201C{0}\u201D\u7684\u7F3A\u7701\u503C\u201C{1}\u201D\u4E0E\u7F3A\u7701\u7C7B\u578B\u201C{2}\u201D\u548C\u5217\u7684\u7C7B\u578B\u201C{3}\u201D\u4E0D\u5339\u914D\u3002\u5C06\u4F7F\u7528null\u4F5C\u4E3A\u7F3A\u7701\u503C\u3002 diff --git a/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_zh_TW.properties b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_zh_TW.properties new file mode 100644 index 0000000000..7bb74258c4 --- /dev/null +++ b/modules/ImportPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_zh_TW.properties @@ -0,0 +1,11 @@ +# AppendProcessor.displayName = Append to existing workspace +# DefaultProcessor.displayName = New workspace +# MergeProcessor.displayName = Merge into new worskpace +# MultiProcessor.displayName = Create multiple workspaces + +# AbstractProcessor.warning.overlappingIntervals=Cannot completely merge overlapping interval sets {0} and {1}. Resulting merged set: {2} +# AbstractProcessor.error.columnTypeMismatch=Existing column ''{0}'' in graph with type ''{1}'' is not compatible with imported column type ''{2}''. Keeping original type and values. +# AbstractProcessor.error.columnDefaultValueTypeMismatch=Column ''{0}'' default value ''{1}'' with type ''{2}'' is not compatible with the column type ''{3}''. Using null as default value. +# AbstractProcessor.error.unavailableColumnType=Attribute type ''{0}'' is unavailable for current time representation: {1}. Cannot add column with id ''{2}''. + +# DefaultProcessor.error.configurationChangeForbidden=Cannot change graph configuration when the graph is not empty. Original configuration: {0}, new wanted configuration: {1} diff --git a/modules/ImportPlugin/src/test/java/org/gephi/io/importer/plugin/ImportTest.java b/modules/ImportPlugin/src/test/java/org/gephi/io/importer/plugin/ImportTest.java new file mode 100644 index 0000000000..0a69b8ed38 --- /dev/null +++ b/modules/ImportPlugin/src/test/java/org/gephi/io/importer/plugin/ImportTest.java @@ -0,0 +1,447 @@ +/* +Copyright 2008-2017 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2017 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2017 Gephi Consortium. + */ + +package org.gephi.io.importer.plugin; + +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphController; +import org.gephi.io.importer.api.Container; +import org.gephi.io.importer.api.ContainerLoader; +import org.gephi.io.importer.api.EdgeDraft; +import org.gephi.io.importer.api.EdgeMergeStrategy; +import org.gephi.io.importer.api.ImportController; +import org.gephi.io.importer.api.Issue; +import org.gephi.io.importer.api.NodeDraft; +import org.gephi.io.importer.api.Report; +import org.gephi.io.importer.impl.ImportContainerImpl; +import org.gephi.io.processor.plugin.MergeProcessor; +import org.gephi.io.processor.spi.Processor; +import org.gephi.project.api.ProjectController; +import org.gephi.project.api.Workspace; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TestName; +import org.openide.util.Lookup; + +/** + * @author Eduardo Ramos + */ +public class ImportTest { + + private static final double EPS = 0.001; + private final ProjectController projectController = Lookup.getDefault().lookup(ProjectController.class); + private final ImportController importController = Lookup.getDefault().lookup(ImportController.class); + private final GraphController graphController = Lookup.getDefault().lookup(GraphController.class); + private final Processor defaultProcessor = Lookup.getDefault().lookup(Processor.class); + private final Processor mergeProcessor = new MergeProcessor(); + @Rule + public TestName testName = new TestName(); + private Workspace workspace; + private ImportContainerImpl container, container2, container3; + + @Before + public void setup() { + projectController.newProject(); + workspace = projectController.getCurrentWorkspace(); + + container = new ImportContainerImpl(); + container2 = new ImportContainerImpl(); + container3 = new ImportContainerImpl(); + + container.setReport(new Report()); + container2.setReport(new Report()); + container3.setReport(new Report()); + } + + @After + public void teardown() { + projectController.closeCurrentProject(); + workspace = null; + container = null; + container2 = null; + container3 = null; + } + + private void showReport(Report report) { + System.out.println(report.getText()); + Iterator issuesIterator = report.getIssues(100); + while (issuesIterator.hasNext()) { + Issue issue = issuesIterator.next(); + + System.out.println(issue); + } + } + + private void setEdgesMergeStrategy(EdgeMergeStrategy edgeMergeStrategy) { + container.setEdgesMergeStrategy(edgeMergeStrategy); + container2.setEdgesMergeStrategy(edgeMergeStrategy); + container3.setEdgesMergeStrategy(edgeMergeStrategy); + } + + private NodeDraft buildNode(ContainerLoader container, String id) { + NodeDraft node = container.factory().newNodeDraft(id); + return node; + } + + private EdgeDraft buildEdge(ContainerLoader container, NodeDraft source, NodeDraft target) { + return buildEdge(container, source, target, 1); + } + + private EdgeDraft buildEdge(ContainerLoader container, NodeDraft source, NodeDraft target, double weight) { + return buildEdge(container, source, target, weight, null); + } + + private EdgeDraft buildEdge(ContainerLoader container, NodeDraft source, NodeDraft target, double weight, + Object type) { + EdgeDraft edge = container.factory().newEdgeDraft(); + edge.setSource(source); + edge.setTarget(target); + edge.setWeight(weight); + + edge.setType(type); + + Assert.assertNotNull(edge); + + return edge; + } + + private void buildMergeWeightsTestGraph(boolean multipleContainers) { + buildMergeWeightsTestGraph(multipleContainers, false); + } + + private void buildMergeWeightsTestGraph(boolean multipleContainers, boolean differentTypes) { + if (multipleContainers) { + NodeDraft node1 = buildNode(container, "1"); + NodeDraft node2 = buildNode(container, "2"); + NodeDraft node1_2 = buildNode(container2, "1"); + NodeDraft node2_2 = buildNode(container2, "2"); + NodeDraft node1_3 = buildNode(container3, "1"); + NodeDraft node2_3 = buildNode(container3, "2"); + + container.addNode(node1); + container.addNode(node2); + container2.addNode(node1_2); + container2.addNode(node2_2); + container3.addNode(node1_3); + container3.addNode(node2_3); + + EdgeDraft edge12_1 = buildEdge(container, node1, node2, 1.0, differentTypes ? "1" : null); + EdgeDraft edge12_2 = buildEdge(container2, node1_2, node2_2, 1.0, differentTypes ? "2" : null); + EdgeDraft edge12_3 = buildEdge(container3, node1_3, node2_3, 4.2, differentTypes ? "3" : null); + EdgeDraft edge21 = buildEdge(container3, node2_3, node1_3); + EdgeDraft edge22 = buildEdge(container2, node2_2, node2_2, 1.5); + + container.addEdge(edge12_1); + + container2.addEdge(edge12_2); + container3.addEdge(edge12_3); + + container3.addEdge(edge21); + container2.addEdge(edge22); + } else { + NodeDraft node1 = buildNode(container, "1"); + NodeDraft node2 = buildNode(container, "2"); + + container.addNode(node1); + container.addNode(node2); + + EdgeDraft edge12_1 = buildEdge(container, node1, node2, 1.0, differentTypes ? "1" : null); + EdgeDraft edge12_2 = buildEdge(container, node1, node2, 1.0, differentTypes ? "2" : null); + EdgeDraft edge12_3 = buildEdge(container, node1, node2, 4.2, differentTypes ? "3" : null); + EdgeDraft edge21 = buildEdge(container, node2, node1); + EdgeDraft edge22 = buildEdge(container, node2, node2, 1.5); + + container.addEdge(edge12_1); + + container.addEdge(edge12_2); + container.addEdge(edge12_3); + container.addEdge(edge21); + container.addEdge(edge22); + } + } + + private Graph processMergeWeightsTestGraph(boolean multipleContainers) { + if (multipleContainers) { + importController.process(new Container[] {container, container2, container3}, mergeProcessor, workspace); + + showReport(container.getReport()); + showReport(container2.getReport()); + showReport(container3.getReport()); + showReport(mergeProcessor.getReport()); + Assert.assertFalse(mergeProcessor.getReport().hasIssues()); + } else { + importController.process(container, defaultProcessor, workspace); + showReport(container.getReport()); + showReport(defaultProcessor.getReport()); + Assert.assertFalse(defaultProcessor.getReport().hasIssues()); + } + + Graph graph = graphController.getGraphModel(workspace).getGraph(); + + Edge edge21 = graph.getEdge(graph.getNode("2"), graph.getNode("1")); + Assert.assertNotNull(edge21); + Assert.assertEquals(edge21.getWeight(), 1.0, 0); + + Edge edge22 = graph.getEdge(graph.getNode("2"), graph.getNode("2")); + Assert.assertNotNull(edge22); + Assert.assertEquals(edge22.getWeight(), 1.5, 0); + + return graph; + } + + private void checkWeightsSummed(boolean multipleContainers) { + Graph graph = processMergeWeightsTestGraph(multipleContainers); + + Assert.assertEquals(graph.getNodeCount(), 2); + Assert.assertEquals(graph.getEdgeCount(), 3); + + Edge edge12 = graph.getEdge(graph.getNode("1"), graph.getNode("2")); + Assert.assertNotNull(edge12); + Assert.assertEquals(edge12.getWeight(), 6.2, 0); + } + + private void checkWeightsAveraged(boolean multipleContainers) { + Graph graph = processMergeWeightsTestGraph(multipleContainers); + + Assert.assertEquals(graph.getNodeCount(), 2); + Assert.assertEquals(graph.getEdgeCount(), 3); + + Edge edge12 = graph.getEdge(graph.getNode("1"), graph.getNode("2")); + Assert.assertNotNull(edge12); + Assert.assertEquals(edge12.getWeight(), 2.0666, EPS); + } + + private void checkWeightsMaxKept(boolean multipleContainers) { + Graph graph = processMergeWeightsTestGraph(multipleContainers); + + Assert.assertEquals(graph.getNodeCount(), 2); + Assert.assertEquals(graph.getEdgeCount(), 3); + + Edge edge12 = graph.getEdge(graph.getNode("1"), graph.getNode("2")); + Assert.assertNotNull(edge12); + Assert.assertEquals(edge12.getWeight(), 4.2, 0); + } + + private void checkWeightsMinKept(boolean multipleContainers) { + Graph graph = processMergeWeightsTestGraph(multipleContainers); + + Assert.assertEquals(graph.getNodeCount(), 2); + Assert.assertEquals(graph.getEdgeCount(), 3); + + Edge edge12 = graph.getEdge(graph.getNode("1"), graph.getNode("2")); + Assert.assertNotNull(edge12); + Assert.assertEquals(edge12.getWeight(), 1.0, 0); + } + + private void checkWeightsFirstKept(boolean multipleContainers) { + Graph graph = processMergeWeightsTestGraph(multipleContainers); + + Assert.assertEquals(graph.getNodeCount(), 2); + Assert.assertEquals(graph.getEdgeCount(), 3); + + Edge edge12 = graph.getEdge(graph.getNode("1"), graph.getNode("2")); + Assert.assertNotNull(edge12); + Assert.assertEquals(edge12.getWeight(), 1.0, 0); + } + + private void checkWeightsLastKept(boolean multipleContainers) { + Graph graph = processMergeWeightsTestGraph(multipleContainers); + + Assert.assertEquals(graph.getNodeCount(), 2); + Assert.assertEquals(graph.getEdgeCount(), 3); + + Edge edge12 = graph.getEdge(graph.getNode("1"), graph.getNode("2")); + Assert.assertNotNull(edge12); + Assert.assertEquals(edge12.getWeight(), 4.2, 0); + } + + private void checkWeightsNotMerged(boolean multipleContainers) { + Graph graph = processMergeWeightsTestGraph(multipleContainers); + + Assert.assertEquals(graph.getNodeCount(), 2); + Assert.assertEquals(graph.getEdgeCount(), 5); + + Set allWeights = new HashSet<>(); + double sum = 0; + for (int edgeType : graph.getModel().getEdgeTypes()) { + for (Edge edge : graph.getEdges(graph.getNode("1"), graph.getNode("2"), edgeType)) { + allWeights.add(edge.getWeight()); + sum += edge.getWeight(); + } + } + + Assert.assertTrue(allWeights.contains(1.0)); + Assert.assertTrue(allWeights.contains(4.2)); + Assert.assertEquals(sum, 6.2, EPS); + } + + @Test + public void testProcessContainer_Default_Weights_Merged_as_Sum() { + buildMergeWeightsTestGraph(false); + checkWeightsSummed(false); + } + + @Test + public void testProcessContainer_Weights_Sum() { + buildMergeWeightsTestGraph(false); + setEdgesMergeStrategy(EdgeMergeStrategy.SUM); + checkWeightsSummed(false); + } + + @Test + public void testProcessContainer_Weights_Average() { + buildMergeWeightsTestGraph(false); + setEdgesMergeStrategy(EdgeMergeStrategy.AVG); + checkWeightsAveraged(false); + } + + @Test + public void testProcessContainer_Weights_Max() { + buildMergeWeightsTestGraph(false); + setEdgesMergeStrategy(EdgeMergeStrategy.MAX); + checkWeightsMaxKept(false); + } + + @Test + public void testProcessContainer_Weights_Min() { + buildMergeWeightsTestGraph(false); + setEdgesMergeStrategy(EdgeMergeStrategy.MIN); + checkWeightsMinKept(false); + } + + @Test + public void testProcessContainer_Weights_First() { + buildMergeWeightsTestGraph(false); + setEdgesMergeStrategy(EdgeMergeStrategy.FIRST); + checkWeightsFirstKept(false); + } + + @Test + public void testProcessContainer_Weights_Last() { + buildMergeWeightsTestGraph(false); + setEdgesMergeStrategy(EdgeMergeStrategy.LAST); + checkWeightsLastKept(false); + } + + @Test + public void testProcessContainer_Weights_DifferentTypesNotMerged() { + buildMergeWeightsTestGraph(false, true); + setEdgesMergeStrategy(EdgeMergeStrategy.SUM); + checkWeightsNotMerged(false); + } + + @Test + public void testProcessContainer_Weights_NoMerge() { + buildMergeWeightsTestGraph(false); + setEdgesMergeStrategy(EdgeMergeStrategy.NO_MERGE); + checkWeightsNotMerged(false); + } + + @Test + public void testMultiProcessContainer_Default_Weights_Merged_as_Sum() { + buildMergeWeightsTestGraph(true); + checkWeightsSummed(true); + } + + @Test + public void testMultiProcessContainer_Weights_Sum() { + buildMergeWeightsTestGraph(true); + setEdgesMergeStrategy(EdgeMergeStrategy.SUM); + checkWeightsSummed(true); + } + + @Test + public void testMultiProcessContainer_Weights_Average() { + buildMergeWeightsTestGraph(true); + setEdgesMergeStrategy(EdgeMergeStrategy.AVG); + checkWeightsAveraged(true); + } + + @Test + public void testMultiProcessContainer_Weights_Max() { + buildMergeWeightsTestGraph(true); + setEdgesMergeStrategy(EdgeMergeStrategy.MAX); + checkWeightsMaxKept(true); + } + + @Test + public void testMultiProcessContainer_Weights_Min() { + buildMergeWeightsTestGraph(true); + setEdgesMergeStrategy(EdgeMergeStrategy.MIN); + checkWeightsMinKept(true); + } + + @Test + public void testMultiProcessContainer_Weights_First() { + buildMergeWeightsTestGraph(true); + setEdgesMergeStrategy(EdgeMergeStrategy.FIRST); + checkWeightsFirstKept(true); + } + + @Test + public void testMultiProcessContainer_Weights_Last() { + buildMergeWeightsTestGraph(true); + setEdgesMergeStrategy(EdgeMergeStrategy.LAST); + checkWeightsLastKept(true); + } + + @Test + public void testMultiProcessContainer_Weights_DifferentTypesNotMerged() { + buildMergeWeightsTestGraph(true, true); + setEdgesMergeStrategy(EdgeMergeStrategy.SUM); + checkWeightsNotMerged(true); + } + + @Test + public void testMultiProcessContainer_Weights_NoMerge() { + buildMergeWeightsTestGraph(true); + setEdgesMergeStrategy(EdgeMergeStrategy.NO_MERGE); + checkWeightsNotMerged(true); + } +} diff --git a/modules/ImportPlugin/src/test/java/org/gephi/io/importer/plugin/file/DOTTest.java b/modules/ImportPlugin/src/test/java/org/gephi/io/importer/plugin/file/DOTTest.java new file mode 100644 index 0000000000..98f2974db9 --- /dev/null +++ b/modules/ImportPlugin/src/test/java/org/gephi/io/importer/plugin/file/DOTTest.java @@ -0,0 +1,190 @@ +package org.gephi.io.importer.plugin.file; + +import org.gephi.io.importer.api.Container; +import org.gephi.io.importer.api.EdgeDirectionDefault; +import org.gephi.io.importer.api.EdgeDraft; +import org.gephi.io.importer.api.NodeDraft; +import org.junit.Assert; +import org.junit.Test; + +public class DOTTest { + + @Test + public void testBasic() { + Container container = Utils.importFile(new ImporterDOT(), "dot/basic.dot"); + Assert.assertEquals(container.getUnloader().getEdgeDefault(), EdgeDirectionDefault.DIRECTED); + NodeDraft[] nodes = Utils.toNodesArray(container); + Assert.assertEquals(3, nodes.length); + EdgeDraft[] edges = Utils.toEdgesArray(container); + Utils.assertSameEdges(edges, "A -> B", "B -> C"); + } + + @Test + public void testUndirectedBasic() { + Container container = Utils.importFile(new ImporterDOT(), "dot/undirected.dot"); + Assert.assertEquals(container.getUnloader().getEdgeDefault(), EdgeDirectionDefault.UNDIRECTED); + NodeDraft[] nodes = Utils.toNodesArray(container); + Assert.assertEquals(2, nodes.length); + EdgeDraft[] edges = Utils.toEdgesArray(container); + Utils.assertSameEdges(edges, "A -> B"); + Assert.assertEquals("bar", edges[0].getValue("foo")); + } + + @Test + public void testMultipleEdges() { + Container container = Utils.importFile(new ImporterDOT(), "dot/multipleedgesperline.dot"); + NodeDraft[] nodes = Utils.toNodesArray(container); + Assert.assertEquals(4, nodes.length); + EdgeDraft[] edges = Utils.toEdgesArray(container); + Utils.assertSameEdges(edges, "a -> b", "b -> c", "b -> d"); + } + + @Test + public void testUndirectedMultipleEdges() { + Container container = Utils.importFile(new ImporterDOT(), "dot/multipleedgesperline2.dot"); + Assert.assertEquals(container.getUnloader().getEdgeDefault(), EdgeDirectionDefault.UNDIRECTED); + NodeDraft[] nodes = Utils.toNodesArray(container); + Assert.assertEquals(4, nodes.length); + EdgeDraft[] edges = Utils.toEdgesArray(container); + Utils.assertSameEdges(edges, "a -> b", "b -> c", "b -> d"); + } + + @Test + public void testEmptyFieldsGraph() { + Container container = Utils.importFile(new ImporterDOT(), "dot/emptyfields.dot"); + Assert.assertTrue(container.verify()); + NodeDraft[] nodes = Utils.toNodesArray(container); + Utils.assertSameIds(nodes, "a", "b", "c"); + } + + @Test + public void testNamedGraph() { + Container container = Utils.importFile(new ImporterDOT(), "dot/namedgraph.dot"); + NodeDraft[] nodes = Utils.toNodesArray(container); + Utils.assertSameIds(nodes, "n"); + } + + @Test + public void testSubgraph() { + Container container = Utils.importFile(new ImporterDOT(), "dot/subgraph.dot"); + + NodeDraft[] nodes = Utils.toNodesArray(container); + Assert.assertEquals(2, nodes.length); + Assert.assertEquals("a", nodes[0].getValue("foo")); + Assert.assertEquals("b", nodes[1].getValue("foo")); + Assert.assertEquals(1, Utils.toEdgesArray(container).length); + } + + @Test + public void testIntLabels() { + Container container = Utils.importFile(new ImporterDOT(), "dot/intlabels.dot"); + NodeDraft[] nodes = Utils.toNodesArray(container); + Assert.assertEquals("-1", nodes[0].getLabel()); + } + + @Test + public void testAdjacencyList() { + Container container = Utils.importFile(new ImporterDOT(), "dot/adjacencylist.dot"); + NodeDraft[] nodes = Utils.toNodesArray(container); + Utils.assertSameIds(nodes, "A", "B", "C", "D"); + Assert.assertEquals(5, Utils.toEdgesArray(container).length); + } + + @Test + public void testLabels() { + Container container = Utils.importFile(new ImporterDOT(), "dot/labels.dot"); + NodeDraft[] nodes = Utils.toNodesArray(container); + Utils.assertSameIds(nodes, "A", "B", "C"); + Assert.assertEquals("Node A", nodes[0].getLabel()); + EdgeDraft[] edges = Utils.toEdgesArray(container); + Assert.assertEquals("Edge A to B", edges[0].getLabel()); + Assert.assertEquals("Edge B to C", edges[1].getLabel()); + } + + @Test + public void testHashLineComment() { + Container container = Utils.importFile(new ImporterDOT(), "dot/hashcomment.dot"); + NodeDraft[] nodes = Utils.toNodesArray(container); + Utils.assertSameIds(nodes, "n1", "n2"); + EdgeDraft[] edges = Utils.toEdgesArray(container); + Utils.assertSameEdges(edges, "n1 -> n2"); + } + + @Test + public void testNoSpacesDirected() { + Container container = Utils.importFile(new ImporterDOT(), "dot/nospaces.dot"); + Assert.assertEquals(EdgeDirectionDefault.DIRECTED, container.getUnloader().getEdgeDefault()); + NodeDraft[] nodes = Utils.toNodesArray(container); + Utils.assertSameIds(nodes, "n1", "n2", "n3", "n4"); + EdgeDraft[] edges = Utils.toEdgesArray(container); + Utils.assertSameEdges(edges, "n1 -> n2", "n2 -> n3", "n3 -> n4"); + } + + @Test + public void testNoSpacesUndirected() { + Container container = Utils.importFile(new ImporterDOT(), "dot/nospaces_undirected.dot"); + Assert.assertEquals(EdgeDirectionDefault.UNDIRECTED, container.getUnloader().getEdgeDefault()); + NodeDraft[] nodes = Utils.toNodesArray(container); + Utils.assertSameIds(nodes, "n1", "n2", "n3", "n4"); + EdgeDraft[] edges = Utils.toEdgesArray(container); + Assert.assertEquals(3, edges.length); + } + + @Test + public void testNoSpacesMixed() { + Container container = Utils.importFile(new ImporterDOT(), "dot/nospaces_mixed.dot"); + NodeDraft[] nodes = Utils.toNodesArray(container); + Utils.assertSameIds(nodes, "n1", "n2", "n3", "n4", "n5", "n6"); + EdgeDraft[] edges = Utils.toEdgesArray(container); + Utils.assertSameEdges(edges, "n1 -> n2", "n3 -> n4", "n5 -> n6"); + } + + @Test + public void testNodeAttrStatement() { + // node [shape=box] is an attr_stmt and should be skipped; the graph must still load + Container container = Utils.importFile(new ImporterDOT(), "dot/nodeattrstatement.dot"); + NodeDraft[] nodes = Utils.toNodesArray(container); + Utils.assertSameIds(nodes, "n1", "n2"); + EdgeDraft[] edges = Utils.toEdgesArray(container); + Utils.assertSameEdges(edges, "n1 -> n2"); + } + + @Test + public void testAttrStatements() { + // graph/node/edge attr_stmts must all be skipped; edges and nodes must still load + Container container = Utils.importFile(new ImporterDOT(), "dot/attrstatements.dot"); + NodeDraft[] nodes = Utils.toNodesArray(container); + Utils.assertSameIds(nodes, "A", "B", "C"); + EdgeDraft[] edges = Utils.toEdgesArray(container); + Utils.assertSameEdges(edges, "A -> B", "B -> C"); + } + + @Test + public void testChainedAttrLists() { + // node_id [attr1=val1] [attr2=val2] β€” chained attr_lists must all be parsed + Container container = Utils.importFile(new ImporterDOT(), "dot/chainedattrs.dot"); + NodeDraft[] nodes = Utils.toNodesArray(container); + Assert.assertEquals(2, nodes.length); + for (NodeDraft node : nodes) { + Assert.assertNotNull("label must be set for " + node.getId(), node.getLabel()); + } + EdgeDraft[] edges = Utils.toEdgesArray(container); + Assert.assertEquals(1, edges.length); + Assert.assertEquals("edge_label", edges[0].getLabel()); + } + + @Test + public void testChainedAttrListsInEdgeChain() { + // a -> b [attr1] [attr2] -> c [attr3] [attr4] β€” chained attrs mid-edge-chain + Container container = Utils.importFile(new ImporterDOT(), "dot/chainedattrs_edgechain.dot"); + NodeDraft[] nodes = Utils.toNodesArray(container); + Utils.assertSameIds(nodes, "a", "b", "c"); + EdgeDraft[] edges = Utils.toEdgesArray(container); + Assert.assertEquals(2, edges.length); + Utils.assertSameEdges(edges, "a -> b", "b -> c"); + EdgeDraft ab = edges[0].getSource().getId().equals("a") ? edges[0] : edges[1]; + EdgeDraft bc = edges[0].getSource().getId().equals("b") ? edges[0] : edges[1]; + Assert.assertEquals("ab", ab.getLabel()); + Assert.assertEquals("bc", bc.getLabel()); + } +} diff --git a/modules/ImportPlugin/src/test/java/org/gephi/io/importer/plugin/file/GEXFTest.java b/modules/ImportPlugin/src/test/java/org/gephi/io/importer/plugin/file/GEXFTest.java new file mode 100644 index 0000000000..4874688598 --- /dev/null +++ b/modules/ImportPlugin/src/test/java/org/gephi/io/importer/plugin/file/GEXFTest.java @@ -0,0 +1,122 @@ +package org.gephi.io.importer.plugin.file; + +import java.time.ZoneId; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.types.TimestampDoubleMap; +import org.gephi.graph.api.types.TimestampIntegerMap; +import org.gephi.io.importer.api.Container; +import org.gephi.io.importer.api.EdgeDraft; +import org.gephi.io.importer.api.MetadataDraft; +import org.gephi.io.importer.api.NodeDraft; +import org.gephi.io.importer.impl.ImportContainerImpl; +import org.junit.Assert; +import org.junit.Test; + +public class GEXFTest { + + @Test + public void testBasicGraph() { + ImporterGEXF importer = new ImporterGEXF(); + importer.setReader(Utils.getReader("gexf/basic.gexf")); + + Container container = new ImportContainerImpl(); + importer.execute(container.getLoader()); + + Assert.assertTrue(container.verify()); + + NodeDraft[] nodes = Utils.toNodesArray(container); + EdgeDraft[] edges = Utils.toEdgesArray(container); + + Utils.assertSameIds(nodes, "0", "1"); + Utils.assertSameIds(edges, "0"); + } + + @Test + public void testDoubleInfinity() { + ImporterGEXF importer = new ImporterGEXF(); + importer.setReader(Utils.getReader("gexf/infinity.gexf")); + + Container container = new ImportContainerImpl(); + importer.execute(container.getLoader()); + + NodeDraft node = Utils.getNode(container, "0"); + Assert.assertEquals(Double.POSITIVE_INFINITY, node.getValue("0")); + Assert.assertEquals(Double.NEGATIVE_INFINITY, node.getValue("1")); + } + + @Test + public void testZeroWeight() { + ImporterGEXF importer = new ImporterGEXF(); + importer.setReader(Utils.getReader("gexf/zeroweight.gexf")); + + Container container = new ImportContainerImpl(); + importer.execute(container.getLoader()); + + Assert.assertTrue(container.verify()); + } + + @Test + public void testTimezone() { + ImporterGEXF importer = new ImporterGEXF(); + importer.setReader(Utils.getReader("gexf/timezone.gexf")); + + Container container = new ImportContainerImpl(); + importer.execute(container.getLoader()); + + ZoneId timeZone = container.getUnloader().getTimeZone(); + Assert.assertEquals(ZoneId.of("America/Los_Angeles"), timeZone); + + NodeDraft node0 = Utils.getNode(container, "0"); + NodeDraft node1 = Utils.getNode(container, "1"); + + node0.getTimeSet().contains(AttributeUtils.parseDateTime("2012-01-12T15:00:00", timeZone)); + node1.getTimeSet() + .contains(AttributeUtils.parseDateTime("2012-01-12T15:00:00", ZoneId.of("Europe/Moscow"))); + } + + @Test + public void testMeta() { + ImporterGEXF importer = new ImporterGEXF(); + importer.setReader(Utils.getReader("gexf/meta.gexf")); + + Container container = new ImportContainerImpl(); + importer.execute(container.getLoader()); + + MetadataDraft meta = container.getUnloader().getMetadata(); + Assert.assertEquals("TITLE", meta.getTitle()); + Assert.assertEquals("DESCRIPTION", meta.getDescription()); + } + + @Test + public void testDynamicWeight() { + ImporterGEXF importer = new ImporterGEXF(); + importer.setReader(Utils.getReader("gexf/dynamicedgeweight.gexf")); + + Container container = new ImportContainerImpl(); + importer.execute(container.getLoader()); + + EdgeDraft edge = Utils.getEdge(container, "0"); + Assert.assertEquals(new TimestampDoubleMap(new double[] {2004, 2005}, new double[] {1, 2}), + edge.getValue("weight")); + } + + @Test + public void testSlice() { + ImporterGEXF importer = new ImporterGEXF(); + importer.setReader(Utils.getReader("gexf/slice.gexf")); + + Container container = new ImportContainerImpl(); + importer.execute(container.getLoader()); + + Assert.assertEquals(2007, container.getUnloader().getTimestamp(), 0.0); + Assert.assertTrue(container.getUnloader().getNodeColumn("price").isDynamic()); + Assert.assertTrue(container.getUnloader().getEdgeColumn("weight").isDynamic()); + + NodeDraft node = Utils.getNode(container, "1"); + Assert.assertEquals(new TimestampIntegerMap(new double[] {2007}, new int[] {12}), node.getValue("price")); + + EdgeDraft edge = Utils.getEdge(container, "0"); + Assert.assertEquals(new TimestampDoubleMap(new double[] {2007}, new double[] {2}), + edge.getValue("weight")); + } +} diff --git a/modules/ImportPlugin/src/test/java/org/gephi/io/importer/plugin/file/GMLTest.java b/modules/ImportPlugin/src/test/java/org/gephi/io/importer/plugin/file/GMLTest.java new file mode 100644 index 0000000000..55159ff4ea --- /dev/null +++ b/modules/ImportPlugin/src/test/java/org/gephi/io/importer/plugin/file/GMLTest.java @@ -0,0 +1,41 @@ +package org.gephi.io.importer.plugin.file; + +import org.gephi.io.importer.api.Container; +import org.gephi.io.importer.api.NodeDraft; +import org.gephi.io.importer.impl.ImportContainerImpl; +import org.junit.Assert; +import org.junit.Test; + +public class GMLTest { + + @Test + public void testLabels() { + ImporterGML importer = new ImporterGML(); + importer.setReader(Utils.getReader("label.gml")); + + Container container = new ImportContainerImpl(); + importer.execute(container.getLoader()); + + Assert.assertTrue(container.verify()); + + NodeDraft[] nodes = Utils.toNodesArray(container); + + Utils.assertSameIds(nodes, "A", "B", "C"); + } + + @Test + public void testEmojis() { + ImporterGML importer = new ImporterGML(); + importer.setReader(Utils.getReader("emojis.gml")); + + Container container = new ImportContainerImpl(); + importer.execute(container.getLoader()); + + Assert.assertTrue(container.verify()); + + NodeDraft[] nodes = Utils.toNodesArray(container); + NodeDraft node1 = nodes[0]; + + Assert.assertEquals("βœ…", node1.getLabel()); + } +} diff --git a/modules/ImportPlugin/src/test/java/org/gephi/io/importer/plugin/file/GraphMLTest.java b/modules/ImportPlugin/src/test/java/org/gephi/io/importer/plugin/file/GraphMLTest.java new file mode 100644 index 0000000000..e4d430889c --- /dev/null +++ b/modules/ImportPlugin/src/test/java/org/gephi/io/importer/plugin/file/GraphMLTest.java @@ -0,0 +1,35 @@ +package org.gephi.io.importer.plugin.file; + +import org.gephi.io.importer.api.Container; +import org.gephi.io.importer.impl.ImportContainerImpl; +import org.junit.Assert; +import org.junit.Test; + +public class GraphMLTest { + + @Test + public void testWithDescTag() { + ImporterGraphML importer = new ImporterGraphML(); + importer.setReader(Utils.getReader("withdesc.graphml")); + + Container container = new ImportContainerImpl(); + importer.execute(container.getLoader()); + Assert.assertTrue(container.verify()); + + Utils.assertSameLabels(Utils.toNodesArray(container), "Node Zero", "Node One"); + Utils.assertSameLabels(Utils.toEdgesArray(container), "Edge Zero"); + } + + @Test + public void testCData() { + ImporterGraphML importer = new ImporterGraphML(); + importer.setReader(Utils.getReader("cdata.graphml")); + + Container container = new ImportContainerImpl(); + importer.execute(container.getLoader()); + Assert.assertTrue(container.verify()); + + Utils.assertSameLabels(Utils.toNodesArray(container), "foo", "bar"); + Utils.assertSameLabels(Utils.toEdgesArray(container), "foobar"); + } +} diff --git a/modules/ImportPlugin/src/test/java/org/gephi/io/importer/plugin/file/SpreadsheetTest.java b/modules/ImportPlugin/src/test/java/org/gephi/io/importer/plugin/file/SpreadsheetTest.java new file mode 100644 index 0000000000..e468d79799 --- /dev/null +++ b/modules/ImportPlugin/src/test/java/org/gephi/io/importer/plugin/file/SpreadsheetTest.java @@ -0,0 +1,618 @@ +/* +Copyright 2008-2017 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2017 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2017 Gephi Consortium. + */ + +package org.gephi.io.importer.plugin.file; + +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.math.BigInteger; +import java.net.URISyntaxException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.Map; +import java.util.Set; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.TimeFormat; +import org.gephi.graph.api.TimeRepresentation; +import org.gephi.graph.api.types.IntervalLongMap; +import org.gephi.graph.api.types.IntervalSet; +import org.gephi.io.exporter.plugin.ExporterSpreadsheet; +import org.gephi.io.importer.api.Container; +import org.gephi.io.importer.api.EdgeDirectionDefault; +import org.gephi.io.importer.api.EdgeMergeStrategy; +import org.gephi.io.importer.api.ImportController; +import org.gephi.io.importer.plugin.file.spreadsheet.ImporterSpreadsheetCSV; +import org.gephi.io.importer.plugin.file.spreadsheet.ImporterSpreadsheetExcel; +import org.gephi.io.importer.plugin.file.spreadsheet.process.SpreadsheetGeneralConfiguration.Mode; +import org.gephi.io.processor.plugin.DefaultProcessor; +import org.gephi.project.api.ProjectController; +import org.junit.After; +import org.junit.Assert; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TestName; +import org.openide.filesystems.FileUtil; +import org.openide.util.Lookup; + +/** + * @author Eduardo Ramos + */ +public class SpreadsheetTest { + + private final ProjectController projectController = Lookup.getDefault().lookup(ProjectController.class); + private final ImportController importController = Lookup.getDefault().lookup(ImportController.class); + private final GraphController graphController = Lookup.getDefault().lookup(GraphController.class); + @Rule + public TestName testName = new TestName(); + + @After + public void teardown() { + projectController.closeCurrentProject(); + } + + @Test + public void testAdjacencyList() throws IOException { + File file = FileUtil.archiveOrDirForURL( + SpreadsheetTest.class.getResource("/org/gephi/io/importer/plugin/file/spreadsheet/adj_list.csv")); + + ImporterSpreadsheetCSV importer = new ImporterSpreadsheetCSV(); + + importer.setFile(file); + + Assert.assertEquals(importer.getCharset(), StandardCharsets.UTF_8); + Assert.assertEquals(importer.getFieldDelimiter(), ';'); + Assert.assertEquals(importer.getMode(), Mode.ADJACENCY_LIST); + + Container container = importController.importFile( + file, importer + ); + Assert.assertNotNull(container); + Assert.assertTrue(container.getReport().isEmpty()); + + importController.process(container, new DefaultProcessor(), null); + + checkEdgesSpreadsheet(); + } + + @Test + public void testAdjacencyList_AutoDetectImporter() throws IOException { + File file = FileUtil.archiveOrDirForURL( + SpreadsheetTest.class.getResource("/org/gephi/io/importer/plugin/file/spreadsheet/adj_list.csv")); + + importController.importFile(file); + + Container container = importController.importFile(file); + Assert.assertNotNull(container); + Assert.assertTrue(container.getReport().isEmpty()); + + importController.process(container, new DefaultProcessor(), null); + + checkEdgesSpreadsheet(); + } + + @Test + public void testMatrix_CSV() throws IOException { + File file = FileUtil.archiveOrDirForURL( + SpreadsheetTest.class.getResource("/org/gephi/io/importer/plugin/file/spreadsheet/matrix.csv")); + + ImporterSpreadsheetCSV importer = new ImporterSpreadsheetCSV(); + + importer.setFile(file); + + Assert.assertEquals(importer.getCharset(), StandardCharsets.UTF_8); + Assert.assertEquals(importer.getFieldDelimiter(), ','); + Assert.assertEquals(importer.getMode(), Mode.MATRIX); + + Container container = importController.importFile( + file, importer + ); + Assert.assertNotNull(container); + Assert.assertTrue(container.getReport().isEmpty()); + + importController.process(container, new DefaultProcessor(), null); + + checkEdgesSpreadsheet(); + } + + @Test + public void testMatrix_CSV_AutoDetectImporter() throws IOException { + File file = FileUtil.archiveOrDirForURL( + SpreadsheetTest.class.getResource("/org/gephi/io/importer/plugin/file/spreadsheet/matrix.csv")); + + Container container = importController.importFile(file); + Assert.assertNotNull(container); + Assert.assertTrue(container.getReport().isEmpty()); + + importController.process(container, new DefaultProcessor(), null); + + checkEdgesSpreadsheet(); + } + + @Test + public void testMatrix_Excel() throws IOException { + File file = FileUtil.archiveOrDirForURL( + SpreadsheetTest.class.getResource("/org/gephi/io/importer/plugin/file/spreadsheet/matrix.xlsx")); + + ImporterSpreadsheetExcel importer = new ImporterSpreadsheetExcel(); + + importer.setFile(file); + + Assert.assertEquals(importer.getMode(), Mode.MATRIX); + + Container container = importController.importFile( + file, importer + ); + Assert.assertNotNull(container); + Assert.assertTrue(container.getReport().isEmpty()); + + importController.process(container, new DefaultProcessor(), null); + + checkEdgesSpreadsheet(); + } + + @Test + public void testComplexMatrix() throws IOException { + //File from https://github.com/gephi/gephi/issues/1661 + File file = FileUtil.archiveOrDirForURL( + SpreadsheetTest.class.getResource("/org/gephi/io/importer/plugin/file/spreadsheet/complex_matrix.csv")); + + ImporterSpreadsheetCSV importer = new ImporterSpreadsheetCSV(); + + importer.setFile(file); + + Assert.assertEquals(importer.getCharset(), StandardCharsets.UTF_8); + Assert.assertEquals(importer.getFieldDelimiter(), ';'); + Assert.assertEquals(importer.getMode(), Mode.MATRIX); + + Container container = importController.importFile( + file, importer + ); + Assert.assertNotNull(container); + Assert.assertFalse(container.getReport().isEmpty());//Missing labels at the start + + importController.process(container, new DefaultProcessor(), null); + + checkEdgesSpreadsheet(); + } + + @Test + public void testEdgesTableRepeatedWithIds() throws IOException { + File file = FileUtil.archiveOrDirForURL(SpreadsheetTest.class + .getResource("/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_repeated_with_ids.csv")); + + ImporterSpreadsheetCSV importer = new ImporterSpreadsheetCSV(); + + importer.setFile(file); + + Assert.assertEquals(importer.getCharset(), StandardCharsets.UTF_8); + Assert.assertEquals(importer.getFieldDelimiter(), ','); + Assert.assertEquals(importer.getMode(), Mode.EDGES_TABLE); + + Container container = importController.importFile( + file, importer + ); + Assert.assertNotNull(container); + Assert.assertFalse(container.getReport().isEmpty());//Repeated edge id issue + + importController.process(container, new DefaultProcessor(), null); + + checkEdgesSpreadsheet(); + } + + @Test + public void testEdgesTableRepeatedWithoutIds_Merged() throws IOException { + File file = FileUtil.archiveOrDirForURL(SpreadsheetTest.class + .getResource("/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_repeated_without_ids.csv")); + + ImporterSpreadsheetCSV importer = new ImporterSpreadsheetCSV(); + + importer.setFile(file); + + Assert.assertEquals(importer.getCharset(), StandardCharsets.UTF_8); + Assert.assertEquals(importer.getFieldDelimiter(), ','); + Assert.assertEquals(importer.getMode(), Mode.EDGES_TABLE); + + Container container = importController.importFile( + file, importer + ); + Assert.assertNotNull(container); + + importController.process(container, new DefaultProcessor(), null); + + checkEdgesSpreadsheet(); + } + + @Test + public void testEdgesTableRepeatedWithoutIds_Merge_Disabled() throws IOException { + File file = FileUtil.archiveOrDirForURL(SpreadsheetTest.class + .getResource("/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_repeated_without_ids.csv")); + + ImporterSpreadsheetCSV importer = new ImporterSpreadsheetCSV(); + + importer.setFile(file); + + Assert.assertEquals(importer.getCharset(), StandardCharsets.UTF_8); + Assert.assertEquals(importer.getFieldDelimiter(), ','); + Assert.assertEquals(importer.getMode(), Mode.EDGES_TABLE); + + Container container = importController.importFile( + file, importer + ); + Assert.assertNotNull(container); + container.getLoader().setEdgesMergeStrategy(EdgeMergeStrategy.NO_MERGE); + + importController.process(container, new DefaultProcessor(), null); + + checkEdgesSpreadsheet(); + } + + @Test + public void testEdgesTableWithTimeset_Timestamp() throws IOException { + File file = FileUtil.archiveOrDirForURL(SpreadsheetTest.class + .getResource("/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_with_timeset_timestamps.csv")); + + ImporterSpreadsheetCSV importer = new ImporterSpreadsheetCSV(); + + importer.setFile(file); + + Assert.assertEquals(importer.getCharset(), StandardCharsets.UTF_8); + Assert.assertEquals(importer.getFieldDelimiter(), ' '); + Assert.assertEquals(importer.getMode(), Mode.EDGES_TABLE); + Assert.assertEquals(importer.getTimeRepresentation(), TimeRepresentation.TIMESTAMP); + + Container container = importController.importFile( + file, importer + ); + Assert.assertNotNull(container); + + importController.process(container, new DefaultProcessor(), null); + + graphController.getGraphModel().setTimeFormat(TimeFormat.DATE); + + checkEdgesSpreadsheet(); + } + + @Test + public void testEdgesTableWithTimeset_Interval() throws IOException { + File file = FileUtil.archiveOrDirForURL(SpreadsheetTest.class + .getResource("/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_with_timeset_intervals.csv")); + + ImporterSpreadsheetCSV importer = new ImporterSpreadsheetCSV(); + + importer.setFile(file); + + Assert.assertEquals(importer.getCharset(), StandardCharsets.UTF_8); + Assert.assertEquals(importer.getFieldDelimiter(), ' '); + Assert.assertEquals(importer.getMode(), Mode.EDGES_TABLE); + Assert.assertEquals(importer.getTimeRepresentation(), TimeRepresentation.INTERVAL); + + Container container = importController.importFile( + file, importer + ); + Assert.assertNotNull(container); + + importController.process(container, new DefaultProcessor(), null); + + graphController.getGraphModel().setTimeFormat(TimeFormat.DATE); + + checkEdgesSpreadsheet(); + } + + @Test + public void testEdgesTableDynamicWeightsMerged() throws IOException { + File file = FileUtil.archiveOrDirForURL(SpreadsheetTest.class + .getResource("/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_dynamic_weights.csv")); + + ImporterSpreadsheetCSV importer = new ImporterSpreadsheetCSV(); + + importer.setFile(file); + + Assert.assertEquals(importer.getCharset(), StandardCharsets.UTF_8); + Assert.assertEquals(importer.getFieldDelimiter(), ','); + Assert.assertEquals(importer.getMode(), Mode.EDGES_TABLE); + Assert.assertEquals(importer.getTimeRepresentation(), TimeRepresentation.INTERVAL); + + Container container = importController.importFile( + file, importer + ); + Assert.assertNotNull(container); + + importController.process(container, new DefaultProcessor(), null); + + checkEdgesSpreadsheet(); + } + + @Test + public void testEdgesTableTypesTest() throws IOException { + File file = FileUtil.archiveOrDirForURL(SpreadsheetTest.class + .getResource("/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_types_test.csv")); + + ImporterSpreadsheetCSV importer = new ImporterSpreadsheetCSV(); + + importer.setFile(file); + + Assert.assertEquals(importer.getCharset(), StandardCharsets.UTF_8); + Assert.assertEquals(importer.getFieldDelimiter(), ','); + Assert.assertEquals(importer.getMode(), Mode.EDGES_TABLE); + Assert.assertEquals(importer.getTimeRepresentation(), TimeRepresentation.INTERVAL); + + Map columnsClasses = importer.getColumnsClasses(); + + Assert.assertEquals(columnsClasses.get("id"), String.class); + Assert.assertEquals(columnsClasses.get("label"), String.class); + Assert.assertEquals(columnsClasses.get("source"), String.class); + Assert.assertEquals(columnsClasses.get("target"), String.class); + Assert.assertEquals(columnsClasses.get("kind"), String.class); + Assert.assertEquals(columnsClasses.get("type"), String.class); + Assert.assertEquals(columnsClasses.get("weight"), Double.class); + + Container container = importController.importFile( + file, importer + ); + Assert.assertNotNull(container); + + importController.process(container, new DefaultProcessor(), null); + + checkEdgesSpreadsheet(false); + } + + @Test + public void testEdgesTableTypesTest_AutoDetectImporter() throws IOException { + File file = FileUtil.archiveOrDirForURL(SpreadsheetTest.class + .getResource("/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_types_test.csv")); + + Container container = importController.importFile(file); + Assert.assertNotNull(container); + + importController.process(container, new DefaultProcessor(), null); + + checkEdgesSpreadsheet(false); + } + + @Test + public void testNodesTableTypesTest() throws IOException { + File file = FileUtil.archiveOrDirForURL(SpreadsheetTest.class + .getResource("/org/gephi/io/importer/plugin/file/spreadsheet/nodes_table_types_test.csv")); + + ImporterSpreadsheetCSV importer = new ImporterSpreadsheetCSV(); + + importer.setFile(file); + + Assert.assertEquals(importer.getCharset(), StandardCharsets.UTF_8); + Assert.assertEquals(importer.getFieldDelimiter(), ','); + Assert.assertEquals(importer.getMode(), Mode.NODES_TABLE); + Assert.assertEquals(importer.getTimeRepresentation(), TimeRepresentation.INTERVAL); + + Map columnsClasses = importer.getColumnsClasses(); + + Assert.assertEquals(columnsClasses.get("id"), String.class); + Assert.assertEquals(columnsClasses.get("label"), String.class); + Assert.assertEquals(columnsClasses.get("int"), Integer.class); + Assert.assertEquals(columnsClasses.get("long"), Long.class); + Assert.assertEquals(columnsClasses.get("double"), Double.class); + Assert.assertEquals(columnsClasses.get("boolean"), Boolean.class); + Assert.assertEquals(columnsClasses.get("timeset"), IntervalSet.class); + Assert.assertEquals(columnsClasses.get("string"), String.class); + Assert.assertEquals(columnsClasses.get("intervallongmap"), IntervalLongMap.class); + Assert.assertEquals(columnsClasses.get("bigint"), BigInteger.class); + + Container container = importController.importFile( + file, importer + ); + Assert.assertNotNull(container); + + importController.process(container, new DefaultProcessor(), null); + + checkNodesSpreadsheet(); + } + + @Test + public void testRepeatedHeaders() throws IOException { + File file = FileUtil.archiveOrDirForURL( + SpreadsheetTest.class.getResource("/org/gephi/io/importer/plugin/file/spreadsheet/repeated_headers.xls")); + + ImporterSpreadsheetExcel importer = new ImporterSpreadsheetExcel(); + + importer.setFile(file); + + Assert.assertEquals(importer.getMode(), Mode.NODES_TABLE); + + Map columnsClasses = importer.getColumnsClasses(); + + Assert.assertEquals(columnsClasses.size(), 3); + Assert.assertEquals(columnsClasses.get("id"), String.class); + Assert.assertEquals(columnsClasses.get("string"), String.class); + Assert.assertEquals(columnsClasses.get("String"), String.class); + + Container container = importController.importFile( + file, importer + ); + Assert.assertNotNull(container); + + importController.process(container, new DefaultProcessor(), null); + + checkNodesSpreadsheet(); + } + + @Test + public void testUTF8Chars() throws IOException { + File file = FileUtil.archiveOrDirForURL( + SpreadsheetTest.class.getResource("/org/gephi/io/importer/plugin/file/spreadsheet/test_utf8_chars.csv")); + + ImporterSpreadsheetCSV importer = new ImporterSpreadsheetCSV(); + + importer.setFile(file); + + Assert.assertEquals(importer.getMode(), Mode.NODES_TABLE); + + Container container = importController.importFile( + file, importer + ); + Assert.assertNotNull(container); + + importController.process(container, new DefaultProcessor(), null); + + checkNodesSpreadsheet(); + } + + @Test + public void testUTF8CharsWithBOM() throws IOException { + File file = FileUtil.archiveOrDirForURL(SpreadsheetTest.class + .getResource("/org/gephi/io/importer/plugin/file/spreadsheet/test_utf8_chars_with_bom.csv")); + + ImporterSpreadsheetCSV importer = new ImporterSpreadsheetCSV(); + + importer.setFile(file); + + Assert.assertEquals(importer.getMode(), Mode.NODES_TABLE); + Assert.assertEquals(importer.getCharset().name(), "UTF-8"); + + Container container = importController.importFile( + file, importer + ); + Assert.assertNotNull(container); + + importController.process(container, new DefaultProcessor(), null); + + checkNodesSpreadsheet(); + } + + @Test + public void testEdgesTableOppositeForceUndirected_Merged() throws IOException { + File file = FileUtil.archiveOrDirForURL(SpreadsheetTest.class.getResource( + "/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_opposite_force_undirected_merged.csv")); + + Container container = importController.importFile(file); + Assert.assertNotNull(container); + + //Force undirected: + container.getLoader().setEdgeDefault(EdgeDirectionDefault.UNDIRECTED); + container.getLoader().setEdgesMergeStrategy(EdgeMergeStrategy.SUM); + + importController.process(container, new DefaultProcessor(), null); + + checkEdgesSpreadsheet(); + } + + @Test + public void testEdgesTableOppositeForceUndirected_Issue1848() throws IOException { + //https://github.com/gephi/gephi/issues/1848 + File file = FileUtil.archiveOrDirForURL(SpreadsheetTest.class.getResource( + "/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_opposite_force_undirected_issue_1848.csv")); + + Container container = importController.importFile(file); + Assert.assertNotNull(container); + + //Force undirected: + container.getLoader().setEdgeDefault(EdgeDirectionDefault.UNDIRECTED); + container.getLoader().setEdgesMergeStrategy(EdgeMergeStrategy.SUM); + + importController.process(container, new DefaultProcessor(), null); + + checkEdgesSpreadsheet(); + } + + private void checkEdgesSpreadsheet() throws IOException { + checkEdgesSpreadsheet(true); + } + + private void checkEdgesSpreadsheet(boolean ignoreId) throws IOException { + File tmpFile = File.createTempFile(testName.getMethodName(), ".csv"); + Writer writer = new OutputStreamWriter(new FileOutputStream(tmpFile), StandardCharsets.UTF_8); + + ExporterSpreadsheet exporter = new ExporterSpreadsheet(); + exporter.setWorkspace(projectController.getCurrentWorkspace()); + exporter.setTableToExport(ExporterSpreadsheet.ExportTable.EDGES); + exporter.setWriter(writer); + exporter.setExportDynamic(true); + + if (ignoreId) { + exporter.setExcludedColumns(Set.of("id")); + } + + exporter.execute(); + + String result = new String(Files.readAllBytes(tmpFile.toPath())).trim().replace("\r", ""); + String expected = null; + try { + expected = new String(Files.readAllBytes(Paths + .get(getClass().getResource("/org/gephi/io/importer/plugin/file/spreadsheet/expected/" + + testName.getMethodName().replace("_AutoDetectImporter", "") + "_edges.csv").toURI()))).trim() + .replace("\r", ""); + } catch (URISyntaxException e) { + e.printStackTrace(); + } + + Assert.assertEquals(expected, result); + } + + private void checkNodesSpreadsheet() throws IOException { + File tmpFile = File.createTempFile(testName.getMethodName(), ".csv"); + Writer writer = new OutputStreamWriter(new FileOutputStream(tmpFile), StandardCharsets.UTF_8); + + ExporterSpreadsheet exporter = new ExporterSpreadsheet(); + exporter.setWorkspace(projectController.getCurrentWorkspace()); + exporter.setTableToExport(ExporterSpreadsheet.ExportTable.NODES); + exporter.setWriter(writer); + exporter.setExportDynamic(true); + + exporter.execute(); + + String result = new String(Files.readAllBytes(tmpFile.toPath())).trim().replace("\r", ""); + + String expected = null; + try { + expected = new String(Files.readAllBytes(Paths + .get(getClass().getResource( + "/org/gephi/io/importer/plugin/file/spreadsheet/expected/" + testName.getMethodName() + + "_nodes.csv").toURI()))).trim().replace("\r", ""); + } catch (URISyntaxException e) { + e.printStackTrace(); + } + + Assert.assertEquals(expected, result); + } +} diff --git a/modules/ImportPlugin/src/test/java/org/gephi/io/importer/plugin/file/Utils.java b/modules/ImportPlugin/src/test/java/org/gephi/io/importer/plugin/file/Utils.java new file mode 100644 index 0000000000..afbd52be08 --- /dev/null +++ b/modules/ImportPlugin/src/test/java/org/gephi/io/importer/plugin/file/Utils.java @@ -0,0 +1,81 @@ +package org.gephi.io.importer.plugin.file; + +import java.io.IOException; +import java.io.Reader; +import java.io.StringReader; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; +import java.util.stream.Collectors; +import org.gephi.io.importer.api.Container; +import org.gephi.io.importer.api.EdgeDraft; +import org.gephi.io.importer.api.ElementDraft; +import org.gephi.io.importer.api.NodeDraft; +import org.gephi.io.importer.impl.ImportContainerImpl; +import org.gephi.io.importer.spi.FileImporter; +import org.junit.Assert; + +public class Utils { + + public static Container importFile(FileImporter importer, String path) { + importer.setReader(getReader(path)); + + Container container = new ImportContainerImpl(); + importer.execute(container.getLoader()); + + return container; + } + + public static NodeDraft[] toNodesArray(Container container) { + List result = new ArrayList<>(); + container.getUnloader().getNodes().iterator().forEachRemaining(result::add); + return result.toArray(new NodeDraft[0]); + } + + public static NodeDraft getNode(Container container, String id) { + NodeDraft[] nodes = toNodesArray(container); + return Arrays.stream(nodes).filter(n -> n.getId().equals(id)).findFirst().orElse(null); + } + + public static EdgeDraft getEdge(Container container, String id) { + EdgeDraft[] edges = toEdgesArray(container); + return Arrays.stream(edges).filter(n -> n.getId().equals(id)).findFirst().orElse(null); + } + + public static EdgeDraft[] toEdgesArray(Container container) { + List result = new ArrayList<>(); + container.getUnloader().getEdges().iterator().forEachRemaining(result::add); + return result.toArray(new EdgeDraft[0]); + } + + public static void assertSameIds(ElementDraft[] actual, String... ids) { + Assert.assertEquals(ids.length, actual.length); + Assert.assertEquals(new HashSet<>(Arrays.asList(ids)), + Arrays.stream(actual).map(ElementDraft::getId).collect(Collectors.toSet())); + } + + public static void assertSameEdges(EdgeDraft[] actual, String... edges) { + Assert.assertEquals(edges.length, actual.length); + Assert.assertEquals(new HashSet<>(Arrays.asList(edges)), + Arrays.stream(actual).map(e -> e.getSource().getId() + " -> " + e.getTarget().getId()) + .collect(Collectors.toSet())); + } + + public static void assertSameLabels(ElementDraft[] actual, String... labels) { + Assert.assertEquals(labels.length, actual.length); + Assert.assertEquals(new HashSet<>(Arrays.asList(labels)), + Arrays.stream(actual).map(ElementDraft::getLabel).collect(Collectors.toSet())); + } + + public static Reader getReader(String fileName) { + try { + String content = new String(Utils.class.getResourceAsStream(fileName) + .readAllBytes(), StandardCharsets.UTF_8); + return new StringReader(content); + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/modules/ImportPlugin/src/test/java/org/gephi/io/importer/plugin/file/VNATest.java b/modules/ImportPlugin/src/test/java/org/gephi/io/importer/plugin/file/VNATest.java new file mode 100644 index 0000000000..d40c4ffe20 --- /dev/null +++ b/modules/ImportPlugin/src/test/java/org/gephi/io/importer/plugin/file/VNATest.java @@ -0,0 +1,26 @@ +package org.gephi.io.importer.plugin.file; + +import org.gephi.io.importer.api.Container; +import org.gephi.io.importer.api.NodeDraft; +import org.gephi.io.importer.impl.ImportContainerImpl; +import org.junit.Assert; +import org.junit.Test; + +public class VNATest { + + @Test + public void testEmptyAttribute() { + ImporterVNA importer = new ImporterVNA(); + importer.setReader(Utils.getReader("emptyattribute.vna")); + + Container container = new ImportContainerImpl(); + importer.execute(container.getLoader()); + + Assert.assertTrue(container.verify()); + Assert.assertTrue(container.getReport().getIssuesList(100).isEmpty()); + + NodeDraft[] nodes = Utils.toNodesArray(container); + Utils.assertSameIds(nodes, "1", "2", "3"); + Assert.assertNull(nodes[0].getValue("spots")); + } +} diff --git a/modules/ImportPlugin/src/test/java/org/gephi/io/processor/plugin/DefaultProcessorTest.java b/modules/ImportPlugin/src/test/java/org/gephi/io/processor/plugin/DefaultProcessorTest.java new file mode 100644 index 0000000000..e31092602c --- /dev/null +++ b/modules/ImportPlugin/src/test/java/org/gephi/io/processor/plugin/DefaultProcessorTest.java @@ -0,0 +1,93 @@ +package org.gephi.io.processor.plugin; + +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; +import org.gephi.io.importer.api.ElementIdType; +import org.gephi.io.importer.api.Issue; +import org.gephi.io.importer.api.MetadataDraft; +import org.gephi.io.importer.api.NodeDraft; +import org.gephi.io.importer.api.Report; +import org.gephi.io.importer.impl.ImportContainerImpl; +import org.gephi.io.importer.impl.NodeDraftImpl; +import org.gephi.io.processor.spi.ProcessorConfigurationException; +import org.gephi.project.api.Workspace; +import org.gephi.project.api.WorkspaceMetaData; +import org.gephi.project.impl.WorkspaceImpl; +import org.junit.Assert; +import org.junit.Test; + +public class DefaultProcessorTest { + + @Test + public void testProcess() { + ImportContainerImpl importContainer = new ImportContainerImpl(); + NodeDraft nodeDraft = new NodeDraftImpl(importContainer, "1", 1); + importContainer.addNode(nodeDraft); + + Workspace workspace = new WorkspaceImpl(null, 1); + DefaultProcessor defaultProcessor = new DefaultProcessor(); + defaultProcessor.setContainers(new ImportContainerImpl[] {importContainer}); + defaultProcessor.setWorkspace(workspace); + defaultProcessor.process(); + + GraphModel graphModel = workspace.getLookup().lookup(GraphModel.class); + Node node = graphModel.getGraph().getNode("1"); + Assert.assertNotNull(node); + } + + @Test + public void testMeta() { + ImportContainerImpl importContainer = new ImportContainerImpl(); + importContainer.setMetadata(MetadataDraft.builder().description("foo").title("bar").build()); + + Workspace workspace = new WorkspaceImpl(null, 1); + DefaultProcessor defaultProcessor = new DefaultProcessor(); + defaultProcessor.setContainers(new ImportContainerImpl[] {importContainer}); + defaultProcessor.setWorkspace(workspace); + defaultProcessor.process(); + + WorkspaceMetaData workspaceMetaData = workspace.getWorkspaceMetadata(); + Assert.assertEquals("foo", workspaceMetaData.getDescription()); + Assert.assertEquals("bar", workspaceMetaData.getTitle()); + } + + @Test(expected = ProcessorConfigurationException.class) + public void testConfigurationMismatchThrows() { + // Workspace will be initialized with default INTERVAL time representation + Workspace workspace = new WorkspaceImpl(null, 1); + + // Container uses TIMESTAMP β†’ incompatible with workspace's INTERVAL config + ImportContainerImpl importContainer = new ImportContainerImpl(); + importContainer.setElementIdType(ElementIdType.INTEGER); + + DefaultProcessor processor = new DefaultProcessor(); + processor.setContainers(new ImportContainerImpl[] {importContainer}); + processor.setWorkspace(workspace); + processor.process(); + } + + @Test + public void testConfigurationMismatchLogsIssue() { + Workspace workspace = new WorkspaceImpl(null, 1); + + ImportContainerImpl importContainer = new ImportContainerImpl(); + importContainer.setElementIdType(ElementIdType.INTEGER); + + DefaultProcessor processor = new DefaultProcessor(); + processor.setContainers(new ImportContainerImpl[] {importContainer}); + processor.setWorkspace(workspace); + + try { + processor.process(); + Assert.fail("Expected ProcessorConfigurationException"); + } catch (ProcessorConfigurationException e) { + // expected + } + + Report report = processor.getReport(); + Assert.assertNotNull(report); + boolean hasSevereIssue = report.getIssuesList(Integer.MAX_VALUE).stream() + .anyMatch(issue -> issue.getLevel() == Issue.Level.SEVERE); + Assert.assertTrue("Report should contain a SEVERE issue for configuration mismatch", hasSevereIssue); + } +} diff --git a/modules/ImportPlugin/src/test/java/org/gephi/io/processor/plugin/DynamicEdgeWeightTest.java b/modules/ImportPlugin/src/test/java/org/gephi/io/processor/plugin/DynamicEdgeWeightTest.java new file mode 100644 index 0000000000..c386a34173 --- /dev/null +++ b/modules/ImportPlugin/src/test/java/org/gephi/io/processor/plugin/DynamicEdgeWeightTest.java @@ -0,0 +1,69 @@ +package org.gephi.io.processor.plugin; + +import java.util.Collections; +import org.gephi.graph.GraphGenerator; +import org.gephi.graph.api.Configuration; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.TimeRepresentation; +import org.gephi.graph.api.types.TimestampDoubleMap; +import org.gephi.io.importer.impl.EdgeDraftImpl; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +public class DynamicEdgeWeightTest { + + private Utils.TestProcessor processor; + private EdgeDraftImpl edgeDraft; + private Edge edge; + + @Before + public void setUp() { + Configuration configuration = Configuration.builder() + .edgeWeightType(TimestampDoubleMap.class) + .timeRepresentation(TimeRepresentation.TIMESTAMP).build(); + processor = new Utils.TestProcessor( + GraphGenerator.build(configuration).generateTinyGraph().getGraphModel() + ); + edgeDraft = new EdgeDraftImpl(processor.getContainer(), GraphGenerator.FIRST_EDGE); + processor.getContainer().setTimeRepresentation(TimeRepresentation.TIMESTAMP); + edge = processor.graphModel.getGraph().getEdge(GraphGenerator.FIRST_EDGE); + + } + + @Test + public void testNewEdge() { + processor.getContainer().addEdgeColumn("weight", Double.class, true); + + edgeDraft.setValue("weight", new TimestampDoubleMap(new double[] {2.0}, new double[] {4.0})); + + processor.flushEdgeWeight(processor.getContainer(), edgeDraft, edge, true); + + Assert.assertEquals(Collections.EMPTY_LIST, processor.getReport().getIssuesList(100)); + Assert.assertEquals(4.0, edge.getWeight(2.0), 0.0); + } + + @Test + public void testMergeWeight() { + edge.setWeight(5.0, 1.0); + processor.getContainer().addEdgeColumn("weight", Double.class, true); + edgeDraft.setValue("weight", new TimestampDoubleMap(new double[] {2.0}, new double[] {4.0})); + + processor.flushEdgeWeight(processor.getContainer(), edgeDraft, edge, false); + + Assert.assertEquals(Collections.EMPTY_LIST, processor.getReport().getIssuesList(100)); + Assert.assertEquals(4.0, edge.getWeight(2.0), 0.0); + Assert.assertEquals(5.0, edge.getWeight(1.0), 0.0); + } + + @Test + public void testPreserveEdgeWeight() { + processor.getContainer().addEdgeColumn("weight", Double.class, true); + edge.setWeight(5.0, 1.0); + + processor.flushEdgeWeight(processor.getContainer(), edgeDraft, edge, false); + + Assert.assertEquals(Collections.EMPTY_LIST, processor.getReport().getIssuesList(100)); + Assert.assertEquals(5.0, edge.getWeight(1.0), 0.0); + } +} diff --git a/modules/ImportPlugin/src/test/java/org/gephi/io/processor/plugin/EdgeWeightTest.java b/modules/ImportPlugin/src/test/java/org/gephi/io/processor/plugin/EdgeWeightTest.java new file mode 100644 index 0000000000..738adf89da --- /dev/null +++ b/modules/ImportPlugin/src/test/java/org/gephi/io/processor/plugin/EdgeWeightTest.java @@ -0,0 +1,107 @@ +package org.gephi.io.processor.plugin; + +import org.gephi.graph.GraphGenerator; +import org.gephi.graph.api.Edge; +import org.gephi.io.importer.api.EdgeMergeStrategy; +import org.gephi.io.importer.impl.EdgeDraftImpl; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + +public class EdgeWeightTest { + + private Utils.TestProcessor processor; + private EdgeDraftImpl edgeDraft; + private Edge edge; + + @Before + public void setUp() { + processor = new Utils.TestProcessor( + GraphGenerator.build().generateTinyGraph().getGraphModel() + ); + edgeDraft = new EdgeDraftImpl(processor.getContainer(), GraphGenerator.FIRST_EDGE); + edge = processor.graphModel.getGraph().getEdge(GraphGenerator.FIRST_EDGE); + } + + @Test + public void testSumMergeStrategy() { + edgeDraft.setWeight(42.0); + + processor.flushEdgeWeight(processor.getContainer(), edgeDraft, edge, false); + + Assert.assertEquals(edgeDraft.getWeight() + 1, edge.getWeight(), 0.0); + } + + @Test + public void testFirstMergeStrategy() { + edgeDraft.setWeight(42.0); + processor.getContainer().setEdgesMergeStrategy(EdgeMergeStrategy.FIRST); + + processor.flushEdgeWeight(processor.getContainer(), edgeDraft, edge, false); + + Assert.assertEquals(1, edge.getWeight(), 0.0); + } + + @Test + public void testLastMergeStrategy() { + edgeDraft.setWeight(42.0); + processor.getContainer().setEdgesMergeStrategy(EdgeMergeStrategy.LAST); + + processor.flushEdgeWeight(processor.getContainer(), edgeDraft, edge, false); + + Assert.assertEquals(edgeDraft.getWeight(), edge.getWeight(), 0.0); + } + + @Test + public void testNoMergeStrategy() { + edgeDraft.setWeight(42.0); + processor.getContainer().setEdgesMergeStrategy(EdgeMergeStrategy.NO_MERGE); + + processor.flushEdgeWeight(processor.getContainer(), edgeDraft, edge, false); + + Assert.assertEquals(1, edge.getWeight(), 0.0); + } + + @Test + public void testAvgMergeStrategy() { + edgeDraft.setWeight(42.0); + processor.getContainer().setEdgesMergeStrategy(EdgeMergeStrategy.AVG); + + processor.flushEdgeWeight(processor.getContainer(), edgeDraft, edge, false); + + Assert.assertEquals((edgeDraft.getWeight() + 1) / 2, edge.getWeight(), 0.0); + } + + @Test + public void testAvgMergeStrategyWithThree() { + processor.getContainer().setEdgesMergeStrategy(EdgeMergeStrategy.AVG); + edge.setWeight(4); + + edgeDraft = new EdgeDraftImpl(processor.getContainer(), GraphGenerator.FIRST_EDGE); + edgeDraft.setWeight(10.0); + processor.flushEdgeWeight(processor.getContainer(), edgeDraft, edge, false); + processor.flushEdgeWeight(processor.getContainer(), edgeDraft, edge, false); + + Assert.assertEquals((24.0) / 3, edge.getWeight(), 0.0); + } + + @Test + public void testMinMergeStrategy() { + edgeDraft.setWeight(42.0); + processor.getContainer().setEdgesMergeStrategy(EdgeMergeStrategy.MIN); + + processor.flushEdgeWeight(processor.getContainer(), edgeDraft, edge, false); + + Assert.assertEquals(1, edge.getWeight(), 0.0); + } + + @Test + public void testMaxMergeStrategy() { + edgeDraft.setWeight(42.0); + processor.getContainer().setEdgesMergeStrategy(EdgeMergeStrategy.MAX); + + processor.flushEdgeWeight(processor.getContainer(), edgeDraft, edge, false); + + Assert.assertEquals(edgeDraft.getWeight(), edge.getWeight(), 0.0); + } +} diff --git a/modules/ImportPlugin/src/test/java/org/gephi/io/processor/plugin/Utils.java b/modules/ImportPlugin/src/test/java/org/gephi/io/processor/plugin/Utils.java new file mode 100644 index 0000000000..2c6627684d --- /dev/null +++ b/modules/ImportPlugin/src/test/java/org/gephi/io/processor/plugin/Utils.java @@ -0,0 +1,30 @@ +package org.gephi.io.processor.plugin; + +import org.gephi.graph.api.GraphModel; +import org.gephi.io.importer.impl.ImportContainerImpl; +import org.gephi.project.api.Workspace; + +public class Utils { + + protected static class TestProcessor extends AbstractProcessor { + + public TestProcessor(GraphModel graphModel) { + this.graphModel = graphModel; + this.containers = new ImportContainerImpl[] {new ImportContainerImpl()}; + } + + public ImportContainerImpl getContainer() { + return (ImportContainerImpl) containers[0]; + } + + @Override + public Workspace[] process() { + return new Workspace[0]; + } + + @Override + public String getDisplayName() { + return null; + } + } +} diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/cdata.graphml b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/cdata.graphml new file mode 100644 index 0000000000..350aad7b42 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/cdata.graphml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/adjacencylist.dot b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/adjacencylist.dot new file mode 100644 index 0000000000..fde2fff778 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/adjacencylist.dot @@ -0,0 +1,4 @@ +digraph sample3 { + A -> {B ; C ; D} + C -> {B ; A} +} \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/attrstatements.dot b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/attrstatements.dot new file mode 100644 index 0000000000..c5bcd8c055 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/attrstatements.dot @@ -0,0 +1,7 @@ +digraph { + graph [label="My Graph" rankdir=LR]; + node [shape=box style=filled]; + edge [style=dashed]; + A -> B; + B -> C; +} diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/basic.dot b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/basic.dot new file mode 100644 index 0000000000..e1797b4e9e --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/basic.dot @@ -0,0 +1,4 @@ +digraph sample { + A -> B; + B -> C; +} \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/chainedattrs.dot b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/chainedattrs.dot new file mode 100644 index 0000000000..3999171db6 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/chainedattrs.dot @@ -0,0 +1,5 @@ +digraph test { + Skill_38d2a09ab424df40b347da44c3b7c192 [label="a"] [color="green"]; + Skill_7bf98ed70a7d964b9b3771e26bc44124 [label="b"] [color="green"]; + Skill_38d2a09ab424df40b347da44c3b7c192 -> Skill_7bf98ed70a7d964b9b3771e26bc44124 [label="edge_label"] [color="azure"]; +} diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/chainedattrs_edgechain.dot b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/chainedattrs_edgechain.dot new file mode 100644 index 0000000000..9d554f5fd5 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/chainedattrs_edgechain.dot @@ -0,0 +1,3 @@ +digraph { + a -> b [label="ab"] [color="red"] -> c [label="bc"] [color="blue"]; +} diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/emptyfields.dot b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/emptyfields.dot new file mode 100644 index 0000000000..25b9c42fb7 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/emptyfields.dot @@ -0,0 +1,4 @@ +graph { + a -- b [color=""] + b -- c [color=blue,lhead=""] +} diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/hashcomment.dot b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/hashcomment.dot new file mode 100644 index 0000000000..d1dfe69bc2 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/hashcomment.dot @@ -0,0 +1,4 @@ +digraph{ +#node[]; +n1 -> n2; +} diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/intlabels.dot b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/intlabels.dot new file mode 100644 index 0000000000..228f526f17 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/intlabels.dot @@ -0,0 +1,3 @@ +graph test { + n [label=-1] +} \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/labels.dot b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/labels.dot new file mode 100644 index 0000000000..8c807910fa --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/labels.dot @@ -0,0 +1,5 @@ +digraph sample2 { + A -> B [ label = "Edge A to B" ]; + B -> C [ label = "Edge B to C" ]; + A [label="Node A"]; +} \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/multipleedgesperline.dot b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/multipleedgesperline.dot new file mode 100644 index 0000000000..c101d63f96 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/multipleedgesperline.dot @@ -0,0 +1,4 @@ +digraph graphname { + a -> b -> c; + b -> d; +} \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/multipleedgesperline2.dot b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/multipleedgesperline2.dot new file mode 100644 index 0000000000..f5fbd8800a --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/multipleedgesperline2.dot @@ -0,0 +1,4 @@ +graph graphname { + a -- b -- c; + b -- d; +} \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/namedgraph.dot b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/namedgraph.dot new file mode 100644 index 0000000000..82097d6039 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/namedgraph.dot @@ -0,0 +1,3 @@ +graph test { + n +} \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/nodeattrstatement.dot b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/nodeattrstatement.dot new file mode 100644 index 0000000000..6b68fd6f9c --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/nodeattrstatement.dot @@ -0,0 +1,4 @@ +digraph { + node [shape=box]; + n1 -> n2; +} diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/nospaces.dot b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/nospaces.dot new file mode 100644 index 0000000000..d412056b7a --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/nospaces.dot @@ -0,0 +1,4 @@ +digraph{ +n1->n2; +n2->n3->n4; +} diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/nospaces_mixed.dot b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/nospaces_mixed.dot new file mode 100644 index 0000000000..18372ddf07 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/nospaces_mixed.dot @@ -0,0 +1,5 @@ +digraph{ +n1->n2; +n3 ->n4; +n5-> n6; +} diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/nospaces_undirected.dot b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/nospaces_undirected.dot new file mode 100644 index 0000000000..3102fc628d --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/nospaces_undirected.dot @@ -0,0 +1,4 @@ +graph{ +n1--n2; +n2--n3--n4; +} diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/subgraph.dot b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/subgraph.dot new file mode 100644 index 0000000000..7e05e447d7 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/subgraph.dot @@ -0,0 +1,7 @@ +digraph g { + subgraph cluster_0 { + n0 [foo=a]; + n1 [foo=b]; + } + n0 -> n1; +} \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/undirected.dot b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/undirected.dot new file mode 100644 index 0000000000..3aa163930b --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/dot/undirected.dot @@ -0,0 +1,3 @@ +graph test { + A -- B [foo=bar]; +} \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/emojis.gml b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/emojis.gml new file mode 100644 index 0000000000..2402c42c99 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/emojis.gml @@ -0,0 +1,8 @@ +graph +[ + node + [ + id A + label "βœ…" + ] +] \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/emptyattribute.vna b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/emptyattribute.vna new file mode 100644 index 0000000000..892b3b31a1 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/emptyattribute.vna @@ -0,0 +1,15 @@ +*Node data +ID tvar breed spots fur missing +1 true MICE "" white foo +2 false FROGS true "" foo +3 false FROGS true "" foo +*Node properties +ID x y size color shortlabel +1 -355.93912 -114.81057 10.0 153 1 +2 -170.28754 214.69585 10.0 153 2 +3 526.2267 -99.88528 10.0 153 3 +*Tie data +from to strength breed lvar +1 2 1.0 directed-edges 5.0 +3 1 10.0 undirected-edges "" +1 3 10.0 undirected-edges "" \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/gexf/basic.gexf b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/gexf/basic.gexf new file mode 100644 index 0000000000..dc32f04c15 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/gexf/basic.gexf @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/gexf/data.gexf b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/gexf/data.gexf new file mode 100644 index 0000000000..c8712dcb17 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/gexf/data.gexf @@ -0,0 +1,23 @@ + + + + + + + + true + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/gexf/dynamicedgeweight.gexf b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/gexf/dynamicedgeweight.gexf new file mode 100644 index 0000000000..afdf22d37a --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/gexf/dynamicedgeweight.gexf @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/gexf/infinity.gexf b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/gexf/infinity.gexf new file mode 100644 index 0000000000..7e951cec83 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/gexf/infinity.gexf @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/gexf/meta.gexf b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/gexf/meta.gexf new file mode 100644 index 0000000000..2e54448eb8 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/gexf/meta.gexf @@ -0,0 +1,8 @@ + + + + Gephi + TITLE + DESCRIPTION + + \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/gexf/slice.gexf b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/gexf/slice.gexf new file mode 100755 index 0000000000..fcdd189c5f --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/gexf/slice.gexf @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/gexf/timezone.gexf b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/gexf/timezone.gexf new file mode 100644 index 0000000000..96fb4a04f7 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/gexf/timezone.gexf @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/gexf/zeroweight.gexf b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/gexf/zeroweight.gexf new file mode 100644 index 0000000000..d14de7cf80 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/gexf/zeroweight.gexf @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/label.gml b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/label.gml new file mode 100644 index 0000000000..d56b5294bf --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/label.gml @@ -0,0 +1,30 @@ +graph +[ + node + [ + id A + label "Node A" + ] + node + [ + id B + label "Node B" + ] + node + [ + id C + label "Node C" + ] + edge + [ + source B + target A + label "Edge B to A" + ] + edge + [ + source C + target A + label "Edge C to A" + ] +] \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/adj_list.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/adj_list.csv new file mode 100644 index 0000000000..fc650cef54 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/adj_list.csv @@ -0,0 +1,4 @@ +a;b +b;c;d +e +f; a ;g;h; i \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/complex_matrix.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/complex_matrix.csv new file mode 100644 index 0000000000..91625c6ad2 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/complex_matrix.csv @@ -0,0 +1,28 @@ +"";"";"Bruno Pellaud";"Christian Van Singer";"Christoph Brutschin";"Christophe Darbellay";"Doris Leuthard";"Eric Nussbaumer";"George Piller";"Greenpeace";"Hans Grunder";"Jacqueline Fehr ";"Jacques Bourgeois";"Jean-FranΓ§ois Rime";"Jean-Marc Cavedon";"Jean-Marie Brom";"Jean-Pierre Bommer";"Jean-Pierre Graber ";"Marianne Binder";"Miriam Behrens";"Pascal Gentinetta";"Roger Nordmann";"Rolf Buettiker";"Sofia Majnoni";"Ueli Leuenberger";"Ueli Maurer";"Walter Steinmann";"les Amis de la Terre" +"";0.000000;60.000000;90.000000;15.000000;15.000000;300.000000;45.000000;15.000000;30.000000;15.000000;15.000000;15.000000;15.000000;30.000000;30.000000;15.000000;60.000000;15.000000;15.000000;45.000000;45.000000;105.000000;30.000000;15.000000;75.000000;60.000000;15.000000 +"Bruno Pellaud";60.000000;0.000000;24.000000;4.000000;4.000000;80.000000;12.000000;4.000000;8.000000;4.000000;4.000000;4.000000;4.000000;8.000000;8.000000;4.000000;16.000000;4.000000;4.000000;12.000000;12.000000;28.000000;8.000000;4.000000;20.000000;16.000000;4.000000 +"Christian Van Singer";90.000000;24.000000;0.000000;6.000000;6.000000;120.000000;18.000000;6.000000;12.000000;6.000000;6.000000;6.000000;6.000000;12.000000;12.000000;6.000000;24.000000;6.000000;6.000000;18.000000;18.000000;42.000000;12.000000;6.000000;30.000000;24.000000;6.000000 +"Christoph Brutschin";15.000000;4.000000;6.000000;0.000000;1.000000;20.000000;3.000000;1.000000;2.000000;1.000000;1.000000;1.000000;1.000000;2.000000;2.000000;1.000000;4.000000;1.000000;1.000000;3.000000;3.000000;7.000000;2.000000;1.000000;5.000000;4.000000;1.000000 +"Christophe Darbellay";15.000000;4.000000;6.000000;1.000000;0.000000;20.000000;3.000000;1.000000;2.000000;1.000000;1.000000;1.000000;1.000000;2.000000;2.000000;1.000000;4.000000;1.000000;1.000000;3.000000;3.000000;7.000000;2.000000;1.000000;5.000000;4.000000;1.000000 +"Doris Leuthard";300.000000;80.000000;120.000000;20.000000;20.000000;0.000000;60.000000;20.000000;40.000000;20.000000;20.000000;20.000000;20.000000;40.000000;40.000000;20.000000;80.000000;20.000000;20.000000;60.000000;60.000000;140.000000;40.000000;20.000000;100.000000;80.000000;20.000000 +"Eric Nussbaumer";45.000000;12.000000;18.000000;3.000000;3.000000;60.000000;0.000000;3.000000;6.000000;3.000000;3.000000;3.000000;3.000000;6.000000;6.000000;3.000000;12.000000;3.000000;3.000000;9.000000;9.000000;21.000000;6.000000;3.000000;15.000000;12.000000;3.000000 +"George Piller";15.000000;4.000000;6.000000;1.000000;1.000000;20.000000;3.000000;0.000000;2.000000;1.000000;1.000000;1.000000;1.000000;2.000000;2.000000;1.000000;4.000000;1.000000;1.000000;3.000000;3.000000;7.000000;2.000000;1.000000;5.000000;4.000000;1.000000 +"Greenpeace";30.000000;8.000000;12.000000;2.000000;2.000000;40.000000;6.000000;2.000000;0.000000;2.000000;2.000000;2.000000;2.000000;4.000000;4.000000;2.000000;8.000000;2.000000;2.000000;6.000000;6.000000;14.000000;4.000000;2.000000;10.000000;8.000000;2.000000 +"Hans Grunder";15.000000;4.000000;6.000000;1.000000;1.000000;20.000000;3.000000;1.000000;2.000000;0.000000;1.000000;1.000000;1.000000;2.000000;2.000000;1.000000;4.000000;1.000000;1.000000;3.000000;3.000000;7.000000;2.000000;1.000000;5.000000;4.000000;1.000000 +"Jacqueline Fehr ";15.000000;4.000000;6.000000;1.000000;1.000000;20.000000;3.000000;1.000000;2.000000;1.000000;0.000000;1.000000;1.000000;2.000000;2.000000;1.000000;4.000000;1.000000;1.000000;3.000000;3.000000;7.000000;2.000000;1.000000;5.000000;4.000000;1.000000 +"Jacques Bourgeois";15.000000;4.000000;6.000000;1.000000;1.000000;20.000000;3.000000;1.000000;2.000000;1.000000;1.000000;0.000000;1.000000;2.000000;2.000000;1.000000;4.000000;1.000000;1.000000;3.000000;3.000000;7.000000;2.000000;1.000000;5.000000;4.000000;1.000000 +"Jean-FranΓ§ois Rime";15.000000;4.000000;6.000000;1.000000;1.000000;20.000000;3.000000;1.000000;2.000000;1.000000;1.000000;1.000000;0.000000;2.000000;2.000000;1.000000;4.000000;1.000000;1.000000;3.000000;3.000000;7.000000;2.000000;1.000000;5.000000;4.000000;1.000000 +"Jean-Marc Cavedon";30.000000;8.000000;12.000000;2.000000;2.000000;40.000000;6.000000;2.000000;4.000000;2.000000;2.000000;2.000000;2.000000;0.000000;4.000000;2.000000;8.000000;2.000000;2.000000;6.000000;6.000000;14.000000;4.000000;2.000000;10.000000;8.000000;2.000000 +"Jean-Marie Brom";30.000000;8.000000;12.000000;2.000000;2.000000;40.000000;6.000000;2.000000;4.000000;2.000000;2.000000;2.000000;2.000000;4.000000;0.000000;2.000000;8.000000;2.000000;2.000000;6.000000;6.000000;14.000000;4.000000;2.000000;10.000000;8.000000;2.000000 +"Jean-Pierre Bommer";15.000000;4.000000;6.000000;1.000000;1.000000;20.000000;3.000000;1.000000;2.000000;1.000000;1.000000;1.000000;1.000000;2.000000;2.000000;0.000000;4.000000;1.000000;1.000000;3.000000;3.000000;7.000000;2.000000;1.000000;5.000000;4.000000;1.000000 +"Jean-Pierre Graber ";60.000000;16.000000;24.000000;4.000000;4.000000;80.000000;12.000000;4.000000;8.000000;4.000000;4.000000;4.000000;4.000000;8.000000;8.000000;4.000000;0.000000;4.000000;4.000000;12.000000;12.000000;28.000000;8.000000;4.000000;20.000000;16.000000;4.000000 +"Marianne Binder";15.000000;4.000000;6.000000;1.000000;1.000000;20.000000;3.000000;1.000000;2.000000;1.000000;1.000000;1.000000;1.000000;2.000000;2.000000;1.000000;4.000000;0.000000;1.000000;3.000000;3.000000;7.000000;2.000000;1.000000;5.000000;4.000000;1.000000 +"Miriam Behrens";15.000000;4.000000;6.000000;1.000000;1.000000;20.000000;3.000000;1.000000;2.000000;1.000000;1.000000;1.000000;1.000000;2.000000;2.000000;1.000000;4.000000;1.000000;0.000000;3.000000;3.000000;7.000000;2.000000;1.000000;5.000000;4.000000;1.000000 +"Pascal Gentinetta";45.000000;12.000000;18.000000;3.000000;3.000000;60.000000;9.000000;3.000000;6.000000;3.000000;3.000000;3.000000;3.000000;6.000000;6.000000;3.000000;12.000000;3.000000;3.000000;0.000000;9.000000;21.000000;6.000000;3.000000;15.000000;12.000000;3.000000 +"Roger Nordmann";45.000000;12.000000;18.000000;3.000000;3.000000;60.000000;9.000000;3.000000;6.000000;3.000000;3.000000;3.000000;3.000000;6.000000;6.000000;3.000000;12.000000;3.000000;3.000000;9.000000;0.000000;21.000000;6.000000;3.000000;15.000000;12.000000;3.000000 +"Rolf Buettiker";105.000000;28.000000;42.000000;7.000000;7.000000;140.000000;21.000000;7.000000;14.000000;7.000000;7.000000;7.000000;7.000000;14.000000;14.000000;7.000000;28.000000;7.000000;7.000000;21.000000;21.000000;0.000000;14.000000;7.000000;35.000000;28.000000;7.000000 +"Sofia Majnoni";30.000000;8.000000;12.000000;2.000000;2.000000;40.000000;6.000000;2.000000;4.000000;2.000000;2.000000;2.000000;2.000000;4.000000;4.000000;2.000000;8.000000;2.000000;2.000000;6.000000;6.000000;14.000000;0.000000;2.000000;10.000000;8.000000;2.000000 +"Ueli Leuenberger";15.000000;4.000000;6.000000;1.000000;1.000000;20.000000;3.000000;1.000000;2.000000;1.000000;1.000000;1.000000;1.000000;2.000000;2.000000;1.000000;4.000000;1.000000;1.000000;3.000000;3.000000;7.000000;2.000000;0.000000;5.000000;4.000000;1.000000 +"Ueli Maurer";75.000000;20.000000;30.000000;5.000000;5.000000;100.000000;15.000000;5.000000;10.000000;5.000000;5.000000;5.000000;5.000000;10.000000;10.000000;5.000000;20.000000;5.000000;5.000000;15.000000;15.000000;35.000000;10.000000;5.000000;0.000000;20.000000;5.000000 +"Walter Steinmann";60.000000;16.000000;24.000000;4.000000;4.000000;80.000000;12.000000;4.000000;8.000000;4.000000;4.000000;4.000000;4.000000;8.000000;8.000000;4.000000;16.000000;4.000000;4.000000;12.000000;12.000000;28.000000;8.000000;4.000000;20.000000;0.000000;4.000000 +"les Amis de la Terre";15.000000;4.000000;6.000000;1.000000;1.000000;20.000000;3.000000;1.000000;2.000000;1.000000;1.000000;1.000000;1.000000;2.000000;2.000000;1.000000;4.000000;1.000000;1.000000;3.000000;3.000000;7.000000;2.000000;1.000000;5.000000;4.000000;0.000000 \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_dynamic_weights.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_dynamic_weights.csv new file mode 100644 index 0000000000..bd5cf87931 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_dynamic_weights.csv @@ -0,0 +1,5 @@ +source,target,weight +a,b,"<[1.0, 2, 1]; [2, 3, 2]>" +a,b,"<[3,5.5, 3.25]>" +b,c,"<[1, Infinity, 1]>" +a,b,"<[1.0, 3, 4]>" \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_opposite_force_undirected_issue_1848.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_opposite_force_undirected_issue_1848.csv new file mode 100644 index 0000000000..5bfdc23920 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_opposite_force_undirected_issue_1848.csv @@ -0,0 +1,7347 @@ +source,target +imbabura,loja +loja,elarteviveenloja +imbabura,loja +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,loja +loja,municipiodeloja +felizviernes,loja +loja,elarteviveenloja +videovigilanciaecu911durante,elarteviveenloja +videovigilanciaecu911durante,elarteviveenloja +elarteviveenloja,todaunavida +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,cbamprendo +cbamprendo,artesvivasloja +artesvivasloja,3i +elarteviveenloja,loja +elarteviveenloja,cbamprendo +cbamprendo,3i +elarteviveenloja,loja +loja,municipiodeloja +elarteviveenloja,loja +loja,municipiodeloja +3h,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,loja +loja,municipiodeloja +elarteviveenloja,loja +loja,municipiodeloja +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +acreditacionunl2018,elarteviveenloja +elarteviveenloja,enlanacionaldelojalacorrupcion +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,ecuadorunido +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +unl,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +arcsa,salud +salud,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +acreditacionunl2018,elarteviveenloja +elarteviveenloja,enlanacionaldelojalacorrupcion +unl,sosunl +sosunl,elarteviveenloja +patriciovallejo,elarteviveenloja +sosunl,elarteviveenloja +unl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,loja +elarteviveenloja,loja +elarteviveenloja,todaunavida +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +acreditacionunl2018,elarteviveenloja +elarteviveenloja,enlanacionaldelojalacorrupcion +elarteviveenloja,loja +loja,municipiodeloja +elarteviveenloja,loja +todaunavida,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,videovigilanciaecu911 +loja,elarteviveenloja +elarteviveenloja,videovigilanciaecu911 +loja,elarteviveenloja +elarteviveenloja,fiavl +sosunl,elarteviveenloja +acreditacionunl2018,elarteviveenloja +elarteviveenloja,enlanacionaldelojalacorrupcion +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elscomediants,loja +loja,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,loja +patriciovallejo,elarteviveenloja +elscomediants,loja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +todaunavida,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,loja +elarteviveenloja,sosunl +elarteviveenloja,loja +elarteviveenloja,loja +loja,municipiodeloja +temblor,loja +loja,fiestasdequito +fiestasdequito,elarteviveenloja +elarteviveenloja,ecuadorunido +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +ecu911,elarteviveenloja +elarteviveenloja,loja +loja,municipiodeloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +ecu911,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,loja +loja,municipiodeloja +ecu911,elarteviveenloja +elarteviveenloja,cbamprendo +cbamprendo,3h +ecu911,elarteviveenloja +elarteviveenloja,cbamprendo +cbamprendo,3h +sosunl,elarteviveenloja +elarteviveenloja,loja +loja,municipiodeloja +elarteviveenloja,sosunl +elarteviveenloja,loja +loja,municipiodeloja +loja,elarteviveenloja +elarteviveenloja,fiavl +elarteviveenloja,loja +elarteviveenloja,sosunl +temblor,loja +loja,fiestasdequito +fiestasdequito,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +temblor,loja +loja,fiestasdequito +fiestasdequito,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,loja +loja,municipiodeloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,loja +loja,municipiodeloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +todaunavida,elarteviveenloja +elarteviveenloja,ecuadorunido +todaunavida,elarteviveenloja +elarteviveenloja,loja +loja,elarteviveenloja +elarteviveenloja,fiavl +temblor,loja +loja,fiestasdequito +fiestasdequito,elarteviveenloja +elarteviveenloja,loja +videovigilanciaecu911durante,elarteviveenloja +elarteviveenloja,sosunl +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +acreditacionunl2018,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,loja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +unl,sosunl +sosunl,elarteviveenloja +unl,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,loja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,loja +loja,municipiodeloja +elarteviveenloja,unl +sosunl,elarteviveenloja +loja,temblor +temblor,elarteviveenloja +elarteviveenloja,loja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +unl,ecuador +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +loja,temblor +temblor,elarteviveenloja +elarteviveenloja,ecuador +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,loja +loja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,loja +loja,municipiodeloja +elarteviveenloja,loja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +videovigilanciaecu911durante,elarteviveenloja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +elarteviveenloja,telediario +loja,municipiodeloja +municipiodeloja,elarteviveenloja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,sosunl +felizviernes,loja +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +arcsa,salud +salud,elarteviveenloja +loja,ecuador +ecuador,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,ecuadorunido +elarteviveenloja,sosunl +felizviernes,loja +loja,elarteviveenloja +elarteviveenloja,sosunl +ecuador,elarteviveenloja +ecuador,elarteviveenloja +elarteviveenloja,unl +loja,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +todaunavida,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +loja,ecuador +ecuador,elarteviveenloja +loja,ecuador +ecuador,elarteviveenloja +todaunavida,elarteviveenloja +elarteviveenloja,leninmoreno +leninmoreno,loja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,loja +loja,municipiodeloja +elarteviveenloja,sosunl +loja,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,loja +loja,municipiodeloja +elarteviveenloja,unl +patriciovallejo,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +patriciovallejo,elarteviveenloja +elarteviveenloja,fiestasdeloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +patriciovallejo,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +graph,networkscience +networkscience,fiavl2017 +fiavl2017,elarteviveenloja +elarteviveenloja,unl +unl,ecuador +elarteviveenloja,sosunl +elarteviveenloja,sosunl +patriciovallejo,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +felizviernes,loja +loja,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,unl +unl,ecuador +sosunl,elarteviveenloja +sosunl,elarteviveenloja +todaunavida,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,loja +loja,municipiodeloja +elarteviveenloja,loja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,ecuador +elarteviveenloja,sosunl +elarteviveenloja,loja +loja,municipiodeloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +acreditacionunl2018,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +unl,ecuador +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,leninmoreno +leninmoreno,loja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +felizviernes,loja +loja,elarteviveenloja +elarteviveenloja,leninmoreno +leninmoreno,loja +elarteviveenloja,leninmoreno +leninmoreno,loja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +todaunavida,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,ecuadorunido +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,ecuadorunido +felizviernes,loja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +loja,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,loja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,sosunl +sosunl,atender +loja,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,loja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +elarteviveenloja,loja +sosunl,elarteviveenloja +todaunavida,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,igf2017ec +igf2017ec,loja +loja,ecuador +elarteviveenloja,loja +elarteviveenloja,elarteviveenloja +elarteviveenloja,loja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +elarteviveenloja,sosunl +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +elarteviveenloja,unl +unl,ecuador +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +todaunavida,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +unl,ecuador +elarteviveenloja,igf2017ec +igf2017ec,loja +loja,ecuador +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,igf2017ec +igf2017ec,loja +loja,ecuador +todaunavida,elarteviveenloja +elarteviveenloja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,loja +sosunl,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,sosunl +loja,postalecu911 +todaunavida,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +patriciovallejo,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +acreditacionunl2018,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +unl,ecuador +sosunl,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +loja,municipiodeloja +municipiodeloja,elarteviveenloja +postalecu911,loja +elarteviveenloja,loja +elarteviveenloja,loja +elarteviveenloja,loja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,loja +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,ecuador +elarteviveenloja,unl +unl,ecuador +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +todaunavida,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +todaunavida,elarteviveenloja +sosunl,elarteviveenloja +todaunavida,elarteviveenloja +elarteviveenloja,loja +patriciovallejo,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,loja +todaunavida,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,ecuador +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +elarteviveenloja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +ecu911,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +sosunl,sosunl +sosunl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +todaunavida,elarteviveenloja +elarteviveenloja,zoocarcel +elarteviveenloja,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +loja,unl +unl,elarteviveenloja +sosunl,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,loja +loja,elarteviveenloja +elarteviveenloja,fiavl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,loja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +todaunavida,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +unl,ecuador +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,agendapresidencialec +elarteviveenloja,unl +unl,ecuador +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +acreditacionunl2018,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,loja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +todaunavida,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,agendapresidencialec +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,loja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sueno +sueno,quito +quito,stepbystep +sosunl,elarteviveenloja +todaunavida,elarteviveenloja +sosunl,elarteviveenloja +todaunavida,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,loja +elarteviveenloja,sueno +sueno,quito +quito,stepbystep +elarteviveenloja,sosunl +loja,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +patriciovallejo,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +acreditacionunl2018,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +rectorunl,elarteviveenloja +elarteviveenloja,soslenin +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +rectorunl,elarteviveenloja +elarteviveenloja,soslenin +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +loja,elarteviveenloja +acreditacionunl2018,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +todaunavida,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +acreditacionunl2018,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,loja +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,ecuador +elarteviveenloja,unl +unl,ecuador +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,festivaldeartesvivas +festivaldeartesvivas,loja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,loja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,loja +loja,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +unl,ecuador +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,festivaldeartesvivas +festivaldeartesvivas,loja +elarteviveenloja,festivaldeartesvivas +festivaldeartesvivas,loja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +loja,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,ecuador +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,ecuador +todaunavida,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +unl,ecuador +elarteviveenloja,unl +unl,ecuador +elarteviveenloja,unl +unl,ecuador +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,ecuador +elarteviveenloja,unl +elarteviveenloja,unl +unl,ecuador +loja,elarteviveenloja +elarteviveenloja,fiavl +todaunavida,elarteviveenloja +elarteviveenloja,unl +unl,ecuador +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,ecuador +elarteviveenloja,unl +unl,ecuador +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,loja +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +cryptomonedas,latingrammy +latingrammy,hagamosunpacto +hagamosunpacto,elarteviveenloja +elarteviveenloja,bitcoins +elarteviveenloja,festivaldeartesvivas +festivaldeartesvivas,loja +elarteviveenloja,todaunavida +sosunl,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +elarteviveenloja,loja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,loja +elarteviveenloja,unl +elarteviveenloja,loja +elarteviveenloja,unl +elarteviveenloja,agendapresidencialec +todaunavida,elarteviveenloja +rociodemoreno,elarteviveenloja +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +ecuador,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +loja,elarteviveenloja +todaunavida,elarteviveenloja +elarteviveenloja,agendapresidencialec +graph,networkscience +networkscience,fiavl2017 +fiavl2017,elarteviveenloja +acreditacionunl2018,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,loja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,loja +elarteviveenloja,todaunavida +loja,elarteviveenloja +elarteviveenloja,compromisosocial +elarteviveenloja,loja +elarteviveenloja,todaunavida +arcsa,salud +salud,elarteviveenloja +elarteviveenloja,todaunavida +loja,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +todaunavida,elarteviveenloja +sosunl,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,loja +elarteviveenloja,sosunl +loja,elarteviveenloja +elarteviveenloja,compromisosocial +loja,elarteviveenloja +todaunavida,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,ecuador +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,telediario +elarteviveenloja,telediario +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,fiavl +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,sosunl +sosunl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +loja,elarteviveenloja +elarteviveenloja,sosunl +sosunl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +loja,elarteviveenloja +elarteviveenloja,fiavl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,loja +todaunavida,elarteviveenloja +elarteviveenloja,sosunl +95anosdeluchaobrera,clasicodelastillero +clasicodelastillero,encuentromujeres +encuentromujeres,laconsultamalva +laconsultamalva,elarteviveenloja +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,unl +todaunavida,elarteviveenloja +elarteviveenloja,unl +loja,elarteviveenloja +elarteviveenloja,fiavl +todaunavida,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +todaunavida,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,loja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,loja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +fiav2017,elarteviveenloja +elarteviveenloja,loja +loja,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +todaunavida,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,loja +sosunl,elarteviveenloja +loja,arte +arte,cultura +sosunl,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,loja +sosunl,sosunl +sosunl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +videovigilanciaecu911durante,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,loja +elarteviveenloja,unl +ecu911,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,elscomediants +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +loja,elarteviveenloja +elarteviveenloja,fiavl +elarteviveenloja,sosunl +todaunavida,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +todaunavida,elarteviveenloja +elarteviveenloja,unl +todaunavida,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +todaunavida,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +loja,elarteviveenloja +elarteviveenloja,sosunl +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +moreno,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +moreno,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +fiavl2017,los4mundosdelsur +todaunavida,elarteviveenloja +unl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,loja +sosunl,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +sosunl,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +todaunavida,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +ecuador,elarteviveenloja +elarteviveenloja,loja +sosunl,elarteviveenloja +elarteviveenloja,unl +patriciovallejo,elarteviveenloja +todaunavida,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,todaunavida +elarteviveenloja,loja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +loja,elarteviveenloja +patriciovallejo,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,loja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +ecuador,elarteviveenloja +elarteviveenloja,unl +blogs,educativos +educativos,latinoamerica +elarteviveenloja,loja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,guayaquil +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +ecuador,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,loja +elarteviveenloja,unl +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +elarteviveenloja,loja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,loja +sosunl,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,todaunavida +elarteviveenloja,videovigilanciaecu911 +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,loja +sosunl,sosunl +sosunl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,loja +elarteviveenloja,loja +todaunavida,elarteviveenloja +loja,elarteviveenloja +todaunavida,elarteviveenloja +elarteviveenloja,loja +patriciovallejo,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +patriciovallejo,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,loja +patriciovallejo,elarteviveenloja +revistameets,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,loja +elarteviveenloja,loja +elarteviveenloja,loja +patriciovallejo,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,fiavl2017 +fiavl2017,ilovecrepesncofee +ilovecrepesncofee,undulceantojo +undulceantojo,lojaecuador +elarteviveenloja,loja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,loja +patriciovallejo,elarteviveenloja +patriciovallejo,elarteviveenloja +patriciovallejo,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,loja +elarteviveenloja,loja +loja,elarteviveenloja +elarteviveenloja,loja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +patriciovallejo,elarteviveenloja +patriciovallejo,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,fiavl +patriciovallejo,elarteviveenloja +elarteviveenloja,telediario +elarteviveenloja,telediario +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,todaunavida +elarteviveenloja,todaunavida +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,sosunl +sosunl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,todaunavida +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +ecuador,loja +loja,elarteviveenloja +sebusca,loja +loja,cuckold +cuckold,hotwife +hotwife,imbox +imbox,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,telediario +elarteviveenloja,telediario +elarteviveenloja,loja +elarteviveenloja,loja +elarteviveenloja,sosunl +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,unl +loja,elarteviveenloja +videovigilanciaecu911durante,elarteviveenloja +elarteviveenloja,latingrammystnt +elarteviveenloja,fiavl2017 +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +loja,elarteviveenloja +elarteviveenloja,fiavl2017 +loja,elarteviveenloja +elarteviveenloja,telediario +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,raulpereztorres +elarteviveenloja,unl +elarteviveenloja,telediario +elarteviveenloja,raulpereztorres +elarteviveenloja,telediario +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +loja,ecuador +ecuador,elarteviveenloja +elarteviveenloja,raulpereztorres +sosunl,elarteviveenloja +loja,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,unl +festivalinternacionaldeartesvivas,loja +elarteviveenloja,raulpereztorres +elarteviveenloja,ecuador +sosunl,elarteviveenloja +ecu911,elarteviveenloja +videovigilanciaecu911,elarteviveenloja +ecuador,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,sosunl +sosunl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,unl +loja,teatro +teatro,benjamincarrion +elarteviveenloja,unl +festivalinternacionaldeartesvivas,loja +loja,ecuador +sosunl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,sosunl +sosunl,sosunl +sosunl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,unl +elarteviveenloja,unl +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +loja,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +cultura,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +loja,elarteviveenloja +ecuador,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +95anosdeluchaobrera,clasicodelastillero +clasicodelastillero,encuentromujeres +encuentromujeres,laconsultamalva +laconsultamalva,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,loja +fiavl2017,elarteviveenloja +elarteviveenloja,videovigilanciaecu911 +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,agendapresidencialec +elarteviveenloja,unl +elarteviveenloja,unl +loja,elarteviveenloja +elarteviveenloja,unl +loja,elarteviveenloja +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,unl +elarteviveenloja,loja +videovigilanciaecu911durante,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +ecuador,elarteviveenloja +lojamiciudad,loja +loja,elarteviveenloja +elarteviveenloja,ecuador +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +loja,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +loja,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,unl +loja,elarteviveenloja +loja,ecuador +ecuador,elarteviveenloja +elarteviveenloja,unl +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +loja,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +unl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +loja,elarteviveenloja +sosunl,elarteviveenloja +videovigilanciaecu911,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +ecu911,elarteviveenloja +elarteviveenloja,ecuador +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +loja,elarteviveenloja +videovigilanciaecu911,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +loja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,unl +fiavl2017,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,loja +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,unl +ecuador,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,ecuador +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +loja,ecuador +ecuador,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +loja,ecuador +ecuador,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +unl,sosunl +loja,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +ecu911,loja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +loja,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +loja,ecuador +ecuador,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +loja,ecuador +ecuador,elarteviveenloja +loja,elarteviveenloja +loja,ecuador +ecuador,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +loja,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +loja,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +rectorunl,elarteviveenloja +elarteviveenloja,soslenin +elarteviveenloja,unl +ecuador,elarteviveenloja +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +loja,elarteviveenloja +elarteviveenloja,ecuador +elarteviveenloja,sosunl +cultura,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +fiavl2017,elarteviveenloja +elarteviveenloja,agendapresidencialec +loja,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,agendapresidencialec +elarteviveenloja,sosunl +sosunl,elarteviveenloja +rectorunl,elarteviveenloja +elarteviveenloja,soslenin +elarteviveenloja,unl +elarteviveenloja,agendapresidencialec +elarteviveenloja,unl +elarteviveenloja,agendapresidencialec +elarteviveenloja,unl +elarteviveenloja,agendapresidencialec +loja,elarteviveenloja +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,unl +loja,elarteviveenloja +elarteviveenloja,agendapresidencialec +loja,elarteviveenloja +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,ecuador +loja,elarteviveenloja +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,sosunl +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,unl +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,unl +videovigilanciaecu911durante,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +sosunl,elarteviveenloja +elarteviveenloja,agendapresidencialec +elarteviveenloja,unl +elarteviveenloja,unl +ecu911,loja +unl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +rectorunl,elarteviveenloja +elarteviveenloja,soslenin +ecu911,elarteviveenloja +elarteviveenloja,agendapresidencialec +elarteviveenloja,agendapresidencialec +elarteviveenloja,unl +elarteviveenloja,unl +loja,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +loja,elarteviveenloja +unl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +unl,elarteviveenloja +sosunl,elarteviveenloja +videovigilanciaecu911,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +loja,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +videovigilanciaecu911,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,unl +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +loja,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,sosunl +loja,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,atenter +sosunl,elarteviveenloja +loja,ecuador +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +graph,networkscience +networkscience,fiavl2017 +fiavl2017,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +graph,networkscience +networkscience,fiavl2017 +fiavl2017,elarteviveenloja +loja,elarteviveenloja +ecu911,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,loja +fiavl2017,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,ecuador +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,loja +ecu911,elarteviveenloja +faustomino,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +unl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +loja,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +ecu911,elarteviveenloja +ecu911,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +fiav2017,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,unl +loja,elarteviveenloja +ecu911,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +graph,networkscience +networkscience,fiavl2017 +fiavl2017,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,loja +ecu911,elarteviveenloja +loja,moreno +graph,networkscience +networkscience,fiavl2017 +fiavl2017,elarteviveenloja +graph,networkscience +networkscience,fiavl2017 +fiavl2017,elarteviveenloja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +guayaquil,elarteviveenloja +elarteviveenloja,guadual +sosunl,elarteviveenloja +bsc,mrsanta +mrsanta,emelec +emelec,cell +cell,clasicodelastillero +clasicodelastillero,peru +peru,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,loja +fiavloja2017,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,ecuador +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +criacuervos,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +loja,elarteviveenloja +fiav2017,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +fiavl2017,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,ecuador +sosunl,elarteviveenloja +ecu911,elarteviveenloja +elarteviveenloja,unl +ecuador,elarteviveenloja +elarteviveenloja,manabi +bsc,mrsanta +mrsanta,emelec +emelec,cell +cell,clasicodelastillero +clasicodelastillero,peru +peru,elarteviveenloja +bsc,mrsanta +mrsanta,emelec +emelec,cell +cell,clasicodelastillero +clasicodelastillero,peru +peru,elarteviveenloja +sosunl,elarteviveenloja +bsc,mrsanta +mrsanta,emelec +emelec,cell +cell,clasicodelastillero +clasicodelastillero,peru +peru,elarteviveenloja +ecu911,elarteviveenloja +elarteviveenloja,perualmundial +perualmundial,rusia2018 +rusia2018,gasolinazo +gasolinazo,thursdaythoughts +videovigilanciaecu911durante,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,unl +unl,sosunl +criacuervos,elarteviveenloja +videovigilanciaecu911durante,elarteviveenloja +ecu911,elarteviveenloja +bicifest,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +ecu911,elarteviveenloja +degostudio,todoesdiseno +todoesdiseno,diseno +diseno,design +design,ecuador +ecuador,quito +quito,uio +uio,branding +branding,publicidad +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +unl,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +rectorunl,elarteviveenloja +elarteviveenloja,soslenin +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +ecu911,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,sosunl +sosunl,sosunl +sosunl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,sosunl +fiavl2017,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +fiavloja2017,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,sosunl +sosunl,sosunl +sosunl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +sosunl,elarteviveenloja +sosunl,sosunl +sosunl,sosunl +sosunl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +ecu911,elarteviveenloja +videovigilanciaecu911,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +videovigilanciaecu911,elarteviveenloja +fiavl2017,elarteviveenloja +videovigilanciaecu911,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +ecu911,elarteviveenloja +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,unl +fiavl2017,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +ecu911,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +videovigilanciaecu911,elarteviveenloja +videovigilanciaecu911durante,elarteviveenloja +sosunl,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +videovigilanciaecu911,elarteviveenloja +elarteviveenloja,sosunl +videovigilanciaecu911,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +videovigilanciaecu911durante,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +videovigilanciaecu911durante,elarteviveenloja +ecu911,elarteviveenloja +videovigilanciaecu911durante,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +unl,sosunl +ecu911,elarteviveenloja +videovigilanciaecu911,elarteviveenloja +videovigilanciaecu911,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +fiavl2017,elarteviveenloja +ecu911,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,ecuador +elarteviveenloja,ecuador +elarteviveenloja,ecuador +elarteviveenloja,ecuador +elarteviveenloja,ecuador +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +ecu911,elarteviveenloja +lojamiciudad,elarteviveenloja +ecu911,elarteviveenloja +elarteviveenloja,unl +ecu911,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +rectorunl,elarteviveenloja +elarteviveenloja,soslenin +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +rectorunl,elarteviveenloja +elarteviveenloja,soslenin +elarteviveenloja,sosunl +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,unl +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +arcsa,salud +salud,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,sosunl +sosunl,sosunl +sosunl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +rectorunl,elarteviveenloja +elarteviveenloja,soslenin +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +loja,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,loja +loja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,sosunl +sosunl,sosunl +sosunl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,loja +sosunl,elarteviveenloja +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,loja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +lojamiciudad,elarteviveenloja +sosunl,sosunl +sosunl,sosunl +sosunl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,atenter +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +sosunl,sosunl +sosunl,sosunl +sosunl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,atenter +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,loja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,loja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +rectorunl,elarteviveenloja +elarteviveenloja,soslenin +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +ecu911,elarteviveenloja +arcsa,salud +salud,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +unl,sosunl +fiav2017,calasanz +elarteviveenloja,unl +unl,sosunl +videovigilanciaecu911durante,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,loja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sos,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +loja,elarteviveenloja +elarteviveenloja,ecuador +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +unl,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,ecuador +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,loja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +loja,municipiodeloja +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +unl,sosunl +loja,elarteviveenloja +elarteviveenloja,ecuador +loja,ecuador +elarteviveenloja,unl +unl,sosunl +loja,elarteviveenloja +elarteviveenloja,ecuador +elarteviveenloja,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +videovigilanciaecu911durante,elarteviveenloja +videovigilanciaecu911durante,elarteviveenloja +criacuervos,elarteviveenloja +elarteviveenloja,sosunl +loja,elarteviveenloja +elarteviveenloja,ecuador +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +unl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +criacuervos,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +videovigilanciaecu911durante,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,unl +unl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,loja +loja,sosunl +videovigilanciaecu911durante,elarteviveenloja +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,unl +fiavl2017,elarteviveenloja +elarteviveenloja,unl +unl,sosunl +loja,elarteviveenloja +elarteviveenloja,unl +unl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +criacuervos,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,sosunl +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +loja,elarteviveenloja +elarteviveenloja,fiavl +fiavl,elarteviveenloja +criacuervos,elarteviveenloja +criacuervos,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,sosunl +ecu911,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +elarteviveenloja,unl +loja,ecuador +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +unl,sosunl +fiav2017,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,felizjueves +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,sosunl +ecu911,elarteviveenloja +felizjueves,ecuador +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,unl +unl,sosunl +loja,elarteviveenloja +ecu911,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +loja,palza +fiavloja2017,noviembre +elarteviveenloja,sosunl +loja,elarteviveenloja +elarteviveenloja,ecuador +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,unl +unl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,unl +videovigilanciaecu911,elarteviveenloja +elarteviveenloja,sosunl +loja,unl +elarteviveenloja,unl +loja,unl +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +videovigilanciaecu911,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +elarteviveenloja,unl +loja,elarteviveenloja +elarteviveenloja,ecuador +elarteviveenloja,ecuador +elarteviveenloja,ecuador +elarteviveenloja,ecuador +elarteviveenloja,ecuador +elarteviveenloja,ecuador +elarteviveenloja,ecuador +elarteviveenloja,ecuador +elarteviveenloja,ecuador +elarteviveenloja,ecuador +elarteviveenloja,ecuador +elarteviveenloja,ecuador +elarteviveenloja,ecuador +elarteviveenloja,ecuador +elarteviveenloja,ecuador +elarteviveenloja,ecuador +elarteviveenloja,ecuador +elarteviveenloja,ecuador +elarteviveenloja,ecuador +elarteviveenloja,ecuador +elarteviveenloja,ecuador +elarteviveenloja,ecuador +elarteviveenloja,ecuador +videovigilanciaecu911,elarteviveenloja +videovigilanciaecu911,elarteviveenloja +videovigilanciaecu911,elarteviveenloja +elarteviveenloja,ecuador +elarteviveenloja,loja +elarteviveenloja,sosunl +videovigilanciaecu911,elarteviveenloja +elarteviveenloja,unloja +videovigilanciaecu911,elarteviveenloja +elarteviveenloja,los4mundosdelsur +videovigilanciaecu911,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +salud,elarteviveenloja +arcsa,salud +salud,elarteviveenloja +fiavl2017,elarteviveenloja +arcsa,salud +salud,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,loja +elarteviveenloja,unl +elarteviveenloja,sosunl +videovigilanciaecu911,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +ecu911,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +ecu911,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +ecu911,elarteviveenloja +elarteviveenloja,unl +videovigilanciaecu911durante,elarteviveenloja +elarteviveenloja,unl +ecu911,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +loja,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +videovigilanciaecu911durante,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +fiavl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,coracao +coracao,thehills +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +loja,elarteviveenloja +elarteviveenloja,unl +arcsa,salud +salud,elarteviveenloja +elarteviveenloja,unl +fiav2017,elarteviveenloja +elarteviveenloja,sosunl +fiavl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +loja,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,los4mundosdelsur +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,loja +elarteviveenloja,unl +elarteviveenloja,loja +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +ecu911,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,atender +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,atenter +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +95anosdeluchaobrera,clasicodelastillero +clasicodelastillero,encuentromujeres +encuentromujeres,laconsultamalva +laconsultamalva,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,unl +elarteviveenloja,unl +ecu911,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,atenter +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +ecu911,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +loja,elarteviveenloja +sosunl,elarteviveenloja +ecu911,elarteviveenloja +elarteviveenloja,sosunl +loja,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,loja +loja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +loja,elarteviveenloja +elarteviveenloja,ecuador +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +loja,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +loja,elarteviveenloja +elarteviveenloja,ecuador +ecu911,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +filosofia,elarteviveenloja +elarteviveenloja,sosunl +ecu911,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +ecu911,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,atender +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +filosofia,elarteviveenloja +elarteviveenloja,sosunl +loja,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,loja +loja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +loja,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,ecuador +loja,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,ecuador +sosunl,elarteviveenloja +elarteviveenloja,unl +fiavl2017,elarteviveenloja +elarteviveenloja,sosunl +loja,elarteviveenloja +elarteviveenloja,ecuador +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,unl +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +loja,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,atender +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,atender +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +unl,elarteviveenloja +unl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +elarteviveenloja,fiavl +ecu911,elarteviveenloja +fiavl2017,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +fiavl2017,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,fiavl +fiavl,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +loja,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,atenter +elarteviveenloja,sosunl +elarteviveenloja,unl +loja,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,loja +loja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sebusca,loja +loja,cuckold +cuckold,hotwife +hotwife,imbox +imbox,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,atender +elarteviveenloja,sosunl +sosunl,atender +elarteviveenloja,sosunl +sosunl,atender +elarteviveenloja,unl +unl,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,loja +loja,sosunl +loja,elarteviveenloja +elarteviveenloja,sosunl +sosunl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,loja +loja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +arcsa,salud +salud,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +loja,elarteviveenloja +elarteviveenloja,sosunl +loja,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +loja,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +arcsa,salud +salud,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,sosunl +sosunl,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,los4mundosdelsur +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +loja,festivalartesvivas +festivalartesvivas,elarteviveenloja +sosunl,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,atenter +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +loja,festivalartesvivas +festivalartesvivas,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,loja +loja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,loja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,atenter +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +loja,elarteviveenloja +elarteviveenloja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +loja,elarteviveenloja +elarteviveenloja,sosunl +sosunl,atender +elarteviveenloja,loja +loja,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,atender +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,fiavl +arcsa,salud +salud,elarteviveenloja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +parquerecreacionaljipiro,loja +loja,elarteviveenloja +elarteviveenloja,los4mundosdelsur +loja,elarteviveenloja +elarteviveenloja,fiavl +loja,elarteviveenloja +los4mundosdelsur,parquenacionalpodocarpus +parquenacionalpodocarpus,elarteviveenloja +fiavl2017,elarteviveenloja +loja,elarteviveenloja +arcsa,salud +salud,elarteviveenloja +elarteviveenloja,los4mundosdelsur +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,loja +sosunl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,loja +loja,sosunl +sosunl,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,sosunl +sosunl,elarteviveenloja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +elarteviveenloja,loja +loja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,atenter +loja,municipiodeloja +municipiodeloja,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +fiavl,elarteviveenloja +fiavl,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,atenter +elarteviveenloja,loja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +sosunl,elarteviveenloja +loja,elarteviveenloja +hotwife,loja +loja,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,loja +loja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +ecu911,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,elarteviveenloja +sosunl,elarteviveenloja +videovigilanciaecu911,elarteviveenloja +huesosdebuda,utpl +utpl,ecuador +elarteviveenloja,sosunl +fiavl,elarteviveenloja +elarteviveenloja,loja +loja,sosunl +ecu911,elarteviveenloja +loja,wanted +wanted,sebusca +sebusca,cornudo +cornudo,hotwife +hotwife,cuckold +cuckold,swinger +swinger,loja +loja,zamora +zamora,cuenca +cuenca,machala +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sebusca,loja +loja,cuckold +cuckold,hotwife +hotwife,imbox +imbox,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +loja,elarteviveenloja +elarteviveenloja,fiavl +elarteviveenloja,loja +loja,sosunl +loja,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,sosunl +loja,elarteviveenloja +loja,elarteviveenloja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,loja +loja,sosunl +elarteviveenloja,sosunl +loja,elarteviveenloja +elarteviveenloja,fiavl +elarteviveenloja,loja +loja,sosunl +sosunl,elarteviveenloja +fiavl2017,loja +sosunl,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,sosunl +loja,municipiodeloja +municipiodeloja,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +videovigilanciaecu911,elarteviveenloja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,fiavl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +fiav2017,elarteviveenloja +elarteviveenloja,unl +loja,elarteviveenloja +sosunl,elarteviveenloja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,sosunl +videovigilanciaecu911,elarteviveenloja +sosunl,elarteviveenloja +ecu911,loja +sosunl,elarteviveenloja +fiavl,elarteviveenloja +videovigilanciaecu911durante,elarteviveenloja +sosunl,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +unl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +unl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,elarteviveenloja +unl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,presidencia_ec +salud,elarteviveenloja +sosunl,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +unl,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,fiavl +elarteviveenloja,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +fiavl2017,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,unl +loja,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,fiavl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +ecu911,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +ecu911,elarteviveenloja +unl,elarteviveenloja +ecu911,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +ecu911,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +fiavl2017,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +loja,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +loja,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +ecu911,elarteviveenloja +videovigilanciaecu911durante,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +videovigilanciaecu911durante,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +ecu911,elarteviveenloja +unl,elarteviveenloja +elarteviveenloja,unl +ecu911,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,sosunl +loja,elarteviveenloja +fiavl2017,elarteviveenloja +videovigilanciaecu911durante,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,loja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +ecu911,elarteviveenloja +unl,elarteviveenloja +sosunl,elarteviveenloja +fiavl2017,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +videovigilanciaecu911durante,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unloja +unl,elarteviveenloja +somosculturautpl,elarteviveenloja +elarteviveenloja,unloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +ecu911,elarteviveenloja +videovigilanciaecu911durante,elarteviveenloja +sosunl,elarteviveenloja +loja,elarteviveenloja +ecu911,elarteviveenloja +sosunl,elarteviveenloja +ecu911,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +unl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,fiavl2017 +elarteviveenloja,atenter +ecu911,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +unl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +ecu911,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,loja +elarteviveenloja,sosunl +unl,elarteviveenloja +sosunl,elarteviveenloja +unl,elarteviveenloja +ecu911,elarteviveenloja +elarteviveenloja,unl +unl,sosunl +sosunl,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +elarteviveenloja,sosunl +loja,elarteviveenloja +fiavl2017,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +loja,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +ecu911,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +unl,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +videovigilanciaecu911durante,elarteviveenloja +elarteviveenloja,unl +unl,sosunl +unl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +unl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,atender +elarteviveenloja,sosunl +elarteviveenloja,unloja +fiavl2017,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,loja +sosunl,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,atenter +elarteviveenloja,unl +unl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,atender +sosunl,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,sosunl +fiavl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +unl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unloja +elarteviveenloja,sosunl +elarteviveenloja,atenter +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,atender +elarteviveenloja,sosunl +sosunl,atender +elarteviveenloja,unl +unl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +fiavl2017,elarteviveenloja +sosunl,elarteviveenloja +unl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,atenter +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,atenter +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,atender +elarteviveenloja,atenter +sosunl,elarteviveenloja +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,loja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,atender +elarteviveenloja,unloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,atender +elarteviveenloja,unl +unl,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +unl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +loja,elarteviveenloja +elarteviveenloja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,atender +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,elarteviveenloja +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,sosunl +sosunl,atender +ecu911,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,elarteviveenloja +elarteviveenloja,unl +fiavl2017,elarteviveenloja +elarteviveenloja,sosunl +sosunl,atender +sosunl,elarteviveenloja +elarteviveenloja,loja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,unloja +sosunl,elarteviveenloja +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,elarteviveenloja +ecu911,loja +elarteviveenloja,unl +unl,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +unl,elarteviveenloja +elarteviveenloja,unloja +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,atender +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +unl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +unl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,atender +sosunl,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,unl +unl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,loja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,atender +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,atender +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,loja +sosunl,elarteviveenloja +elarteviveenloja,unl +unl,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,atender +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,atender +elarteviveenloja,unloja +sosunl,elarteviveenloja +unl,elarteviveenloja +fiavl2017,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unloja +sosunl,elarteviveenloja +unl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,loja +sosunl,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,sosunl +sosunl,atender +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +lojamiciudad,elarteviveenloja +elarteviveenloja,unloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +loja,economianaranja +economianaranja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +ecu911,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,unl +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +sosunl,elarteviveenloja +raulperez,elarteviveenloja +elarteviveenloja,unloja +fiavl2017,elarteviveenloja +elarteviveenloja,unloja +loja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +elarteviveenloja,elarteviveenloja +unl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +unl,elarteviveenloja +elarteviveenloja,elarteviveenloja +unl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +fiavl2017,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +unl,elarteviveenloja +sosunl,elarteviveenloja +ecu911,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +ecu911,elarteviveenloja +sosunl,elarteviveenloja +unl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +unl,elarteviveenloja +sosunl,elarteviveenloja +unl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +unl,elarteviveenloja +elarteviveenloja,sosunl +unl,elarteviveenloja +unl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +ecu911,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +unl,elarteviveenloja +unl,elarteviveenloja +unl,elarteviveenloja +unl,elarteviveenloja +unl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +unl,elarteviveenloja +unl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +unl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +unl,elarteviveenloja +sosunl,elarteviveenloja +ecu911,elarteviveenloja +unl,elarteviveenloja +elarteviveenloja,unl +unl,elarteviveenloja +sosunl,elarteviveenloja +unl,elarteviveenloja +ecu911,elarteviveenloja +elarteviveenloja,sosunl +unl,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +unl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +loja,ecuador +elarteviveenloja,unl +loja,elarteviveenloja +elarteviveenloja,sosunl +unl,elarteviveenloja +unl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +unl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +loja,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +ecu911,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +fiavl2017,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +fiavl2017,elarteviveenloja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +loja,elarteviveenloja +elarteviveenloja,sosunl +fiavl2017,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,unl +elarteviveenloja,sosunl +loja,elarteviveenloja +ecu911,elarteviveenloja +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,sosunl +loja,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +elarteviveenloja,sosunl +elarteviveenloja,sosunl +sosunl,elarteviveenloja +elarteviveenloja,unl +loja,elarteviveenloja +elarteviveenloja,unl +ecu911,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +ecu911,elarteviveenloja +sosunl,elarteviveenloja +elarteviveenloja,unl +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +loja,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +sosunl,elarteviveenloja +sosunl,elarteviveenloja +ecu911,loja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +ecu911,elarteviveenloja +utpl,elarteviveenloja +elarteviveenloja,somosculturautpl +loja,ecuador +ecu911,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +fiavl2017,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +loja,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +ecu911,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +argentina,loja +loja,ecuador +ecuador,fiav2017 +fiav2017,elarteviveenloja +ecu911,elarteviveenloja +loja,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +loja,fiavl2017 +fiavl2017,elarteviveenloja +loja,elarteviveenloja +ecu911,elarteviveenloja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +ecu911,elarteviveenloja +loja,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +loja,elarteviveenloja +ecu911,elarteviveenloja +ecu911,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +ecu911,loja +loja,ecu911 +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,los4mundosdelsur +parquerecreacionaljipiro,loja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +fiav2017,loja +loja,elarteviveenloja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +loja,elarteviveenloja +fiav2017,loja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,los4mundosdelsur +loja,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +loja,ecuador +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,foto +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl,elarteviveenloja +fiavl2017,elarteviveenloja +caminoaloja,giavl2017 +raulperez,elarteviveenloja +raulperez,elarteviveenloja +elarteviveenloja,elcisne +fiavl2017,elarteviveenloja +raulperez,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,los4mundosdelsur +elarteviveenloja,loja +elarteviveenloja,lapuertadelaciudaddeloja +elarteviveenloja,los4mundosdelsur +elarteviveenloja,elcisne +elarteviveenloja,los4mundosdelsur +elarteviveenloja,loja +fiav2017,elarteviveenloja +fiav2017,raulperez +raulperez,elarteviveenloja +fiav2017,loja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiav2017,raulperez +raulperez,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,loja +fiav2017,raulperez +raulperez,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +utpl,fiavl2017 +fiavl2017,elarteviveenloja +fiav2017,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,foto +elarteviveenloja,los4mundosdelsur +loja,elarteviveenloja +elarteviveenloja,foto +loja,municipiodeloja +municipiodeloja,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,los4mundosdelsur +elarteviveenloja,los4mundosdelsur +loja,municipiodeloja +municipiodeloja,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,los4mundosdelsur +parquerecreacionaljipiro,loja +loja,elarteviveenloja +parquerecreacionaljipiro,loja +loja,elarteviveenloja +parquerecreacionaljipiro,loja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,elcisne +elarteviveenloja,los4mundosdelsur +felizmiercoles,15nov +15nov,diamundialdeladiabetes +diamundialdeladiabetes,elarteviveenloja +elarteviveenloja,usabienel911 +usabienel911,comienzaelcambio +comienzaelcambio,adelantesedespejaelcamino +felizmiercoles,15nov +15nov,diamundialdeladiabetes +diamundialdeladiabetes,elarteviveenloja +elarteviveenloja,usabienel911 +usabienel911,comienzaelcambio +comienzaelcambio,adelantesedespejaelcamino +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,loja +loja,los4mundosdelsur +fiavl2017,elarteviveenloja +vilcabamba,loja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,los4mundosdelsur +loja,elarteviveenloja +elarteviveenloja,los4mundosdelsur +loja,municipiodeloja +municipiodeloja,elarteviveenloja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,consultapopular +consultapopular,sialaconsulta +sialaconsulta,lojacontigolenin +loja,elarteviveenloja +elarteviveenloja,los4mundosdelsur +los4mundosdelsur,parquenacionalpodoparpus +parquenacionalpodoparpus,elarteviveenloja +elarteviveenloja,loja +loja,los4mundosdelsur +parquerecreacionaljipiro,loja +loja,elarteviveenloja +los4mundosdelsur,parquenacionalpodocarpus +parquenacionalpodocarpus,elarteviveenloja +elarteviveenloja,elcisne +parquerecreacionaljipiro,loja +loja,elarteviveenloja +parquerecreacionaljipiro,loja +loja,elarteviveenloja +elarteviveenloja,loja +loja,los4mundosdelsur +los4mundosdelsur,parquenacionalpodocarpus +parquenacionalpodocarpus,elarteviveenloja +elarteviveenloja,lapuertadelaciudaddeloja +elarteviveenloja,los4mundosdelsur +elarteviveenloja,los4mundosdelsur +elarteviveenloja,elcisne +loja,municipiodeloja +municipiodeloja,elarteviveenloja +fiavl2017,elarteviveenloja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,loja +loja,los4mundosdelsur +fiavl2017,elarteviveenloja +elarteviveenloja,loja +loja,los4mundosdelsur +loja,fiavl2017 +lojamiciudad,elarteviveenloja +conexionecu911,elarteviveenloja +fiavl2017,elarteviveenloja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +fiavl2017,elarteviveenloja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +fiavl2017,elarteviveenloja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +loja,municipiodeloja +municipiodeloja,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,los4mundosdelsur +loja,elarteviveenloja +elarteviveenloja,los4mundosdelsur +elarteviveenloja,lapuertadelaciudaddeloja +elarteviveenloja,los4mundosdelsur +elarteviveenloja,loja +loja,los4mundosdelsur +los4mundosdelsur,parquenacionalpodocarpus +parquenacionalpodocarpus,elarteviveenloja +iwia,loja +loja,elarteviveenloja +elarteviveenloja,los4mundosdelsur +elarteviveenloja,los4mundosdelsur +iwia,loja +loja,elarteviveenloja +elarteviveenloja,los4mundosdelsur +loja,saraguro +elarteviveenloja,elcisne +elarteviveenloja,los4mundosdelsur +elarteviveenloja,los4mundosdelsur +elarteviveenloja,lapuertadelaciudaddeloja +elarteviveenloja,los4mundosdelsur +elarteviveenloja,los4mundosdelsur +los4mundosdelsur,parquenacionalpodoparpus +parquenacionalpodoparpus,elarteviveenloja +elarteviveenloja,los4mundosdelsur +elarteviveenloja,los4mundosdelsur +elarteviveenloja,los4mundosdelsur +elarteviveenloja,loja +loja,los4mundosdelsur +elarteviveenloja,los4mundosdelsur +elarteviveenloja,los4mundosdelsur +elarteviveenloja,loja +loja,los4mundosdelsur +elarteviveenloja,lapuertadelaciudaddeloja +elarteviveenloja,los4mundosdelsur +elarteviveenloja,los4mundosdelsur +elarteviveenloja,los4mundosdelsur +elarteviveenloja,los4mundosdelsur +elarteviveenloja,loja +loja,los4mundosdelsur +elarteviveenloja,lapuertadelaciudaddeloja +elarteviveenloja,los4mundosdelsur +elarteviveenloja,los4mundosdelsur +elarteviveenloja,los4mundosdelsur +elarteviveenloja,los4mundosdelsur +elarteviveenloja,los4mundosdelsur +elarteviveenloja,los4mundosdelsur +elarteviveenloja,los4mundosdelsur +elarteviveenloja,los4mundosdelsur +elarteviveenloja,los4mundosdelsur +elarteviveenloja,elcisne +los4mundosdelsur,parquenacionalpodocarpus +parquenacionalpodocarpus,elarteviveenloja +los4mundosdelsur,parquenacionalpodocarpus +parquenacionalpodocarpus,elarteviveenloja +parquerecreacionaljipiro,loja +loja,elarteviveenloja +elarteviveenloja,elcisne +elarteviveenloja,los4mundosdelsur +elarteviveenloja,los4mundosdelsur +elarteviveenloja,lapuertadelaciudaddeloja +loja,saraguro +loja,saraguro +elarteviveenloja,lapuertadelaciudaddeloja +elarteviveenloja,lapuertadelaciudaddeloja +elarteviveenloja,lapuertadelaciudaddeloja +elarteviveenloja,lapuertadelaciudaddeloja +elarteviveenloja,lapuertadelaciudaddeloja +elarteviveenloja,lapuertadelaciudaddeloja +elarteviveenloja,lapuertadelaciudaddeloja +elarteviveenloja,lapuertadelaciudaddeloja +loja,saraguro +pinas,los4mundosdelsur +loja,saraguro +elarteviveenloja,lapuertadelaciudaddeloja +pinas,los4mundosdelsur +pinas,los4mundosdelsur +elarteviveenloja,elcisne +conexionecu911,elarteviveenloja +pinas,los4mundosdelsur +parquerecreacionaljipiro,loja +elarteviveenloja,elcisne +los4mundosdelsur,parquenacionalpodocarpus +parquenacionalpodocarpus,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,elcisne +los4mundosdelsur,eloro +eloro,islasantaclara +los4mundosdelsur,eloro +eloro,islasantaclara +parquerecreacionaljipiro,loja +loja,elarteviveenloja +elarteviveenloja,lapuertadelaciudaddeloja +elarteviveenloja,loja +loja,los4mundosdelsur +los4mundosdelsur,parquenacionalpodocarpus +parquenacionalpodocarpus,elarteviveenloja +elarteviveenloja,loja +loja,los4mundosdelsur +elarteviveenloja,loja +loja,los4mundosdelsur +elarteviveenloja,loja +loja,los4mundosdelsur +elarteviveenloja,loja +loja,los4mundosdelsur +elarteviveenloja,loja +loja,los4mundosdelsur +elarteviveenloja,loja +loja,los4mundosdelsur +elarteviveenloja,loja +loja,los4mundosdelsur +elarteviveenloja,loja +loja,los4mundosdelsur +parquerecreacionaljipiro,loja +loja,elarteviveenloja +los4mundosdelsur,parquenacionalpodocarpus +parquenacionalpodocarpus,elarteviveenloja +los4mundosdelsur,parquenacionalpodocarpus +parquenacionalpodocarpus,elarteviveenloja +elarteviveenloja,loja +loja,los4mundosdelsur +elarteviveenloja,loja +loja,los4mundosdelsur +elarteviveenloja,loja +loja,los4mundosdelsur +elarteviveenloja,loja +loja,los4mundosdelsur +elarteviveenloja,loja +loja,los4mundosdelsur +elarteviveenloja,loja +loja,los4mundosdelsur +elarteviveenloja,loja +loja,los4mundosdelsur +elarteviveenloja,loja +loja,los4mundosdelsur +los4mundosdelsur,parquenacionalpodocarpus +parquenacionalpodocarpus,elarteviveenloja +los4mundosdelsur,parquenacionalpodocarpus +parquenacionalpodocarpus,elarteviveenloja +elarteviveenloja,loja +loja,los4mundosdelsur +elarteviveenloja,lapuertadelaciudaddeloja +los4mundosdelsur,eloro +eloro,islasantaclara +loja,saraguro +los4mundosdelsur,eloro +eloro,islasantaclara +parquerecreacionaljipiro,loja +loja,elarteviveenloja +parquerecreacionaljipiro,loja +loja,elarteviveenloja +elarteviveenloja,elcisne +elarteviveenloja,elcisne +elarteviveenloja,elcisne +elarteviveenloja,elcisne +elarteviveenloja,elcisne +elarteviveenloja,elcisne +elarteviveenloja,elcisne +pinas,los4mundosdelsur +zamora,parquenacionalpodocarpus +zamora,parquenacionalpodocarpus +elarteviveenloja,elcisne +los4mundosdelsur,parquenacionalpodocarpus +parquenacionalpodocarpus,elarteviveenloja +los4mundosdelsur,eloro +eloro,islasantaclara +pinas,los4mundosdelsur +elarteviveenloja,loja +loja,los4mundosdelsur +parquerecreacionaljipiro,loja +loja,elarteviveenloja +parquerecreacionaljipiro,loja +loja,elarteviveenloja +parquerecreacionaljipiro,loja +loja,elarteviveenloja +parquerecreacionaljipiro,loja +loja,elarteviveenloja +parquerecreacionaljipiro,loja +loja,elarteviveenloja +parquerecreacionaljipiro,loja +loja,elarteviveenloja +parquerecreacionaljipiro,loja +loja,elarteviveenloja +parquerecreacionaljipiro,loja +loja,elarteviveenloja +parquerecreacionaljipiro,loja +loja,elarteviveenloja +parquerecreacionaljipiro,loja +loja,elarteviveenloja +parquerecreacionaljipiro,loja +loja,elarteviveenloja +elarteviveenloja,loja +loja,los4mundosdelsur +elarteviveenloja,loja +loja,los4mundosdelsur +elarteviveenloja,loja +loja,los4mundosdelsur +parquerecreacionaljipiro,loja +loja,elarteviveenloja +elarteviveenloja,loja +loja,los4mundosdelsur +los4mundosdelsur,parquenacionalpodocarpus +parquenacionalpodocarpus,elarteviveenloja +los4mundosdelsur,parquenacionalpodocarpus +parquenacionalpodocarpus,elarteviveenloja +los4mundosdelsur,parquenacionalpodocarpus +parquenacionalpodocarpus,elarteviveenloja +elarteviveenloja,loja +loja,los4mundosdelsur +los4mundosdelsur,parquenacionalpodoparpus +parquenacionalpodoparpus,elarteviveenloja +lojamiciudad,elarteviveenloja +pinas,los4mundosdelsur +conexionecu911,elarteviveenloja +conexionecu911,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +conexionecu911,elarteviveenloja +ecu911,loja +loja,ecu911 +conexionecu911,elarteviveenloja +conexionecu911,elarteviveenloja +loja,elarteviveenloja +lojamiciudad,elarteviveenloja +conexionecu911,elarteviveenloja +conexionecu911,elarteviveenloja +ecu911,loja +loja,conexionecu911 +conexionecu911,elarteviveenloja +lojamiciudad,elarteviveenloja +lojamiciudad,elarteviveenloja +loja,elarteviveenloja +conexionecu911,elarteviveenloja +conexionecu911,elarteviveenloja +conexionecu911,elarteviveenloja +conexionecu911,elarteviveenloja +conexionecu911,elarteviveenloja +conexionecu911,elarteviveenloja +conexionecu911,elarteviveenloja +conexionecu911,elarteviveenloja +conexionecu911,elarteviveenloja +conexionecu911,elarteviveenloja +conexionecu911,elarteviveenloja +conexionecu911,elarteviveenloja +conexionecu911,elarteviveenloja +conexionecu911,elarteviveenloja +conexionecu911,elarteviveenloja +conexionecu911,elarteviveenloja +conexionecu911,elarteviveenloja +conexionecu911,elarteviveenloja +conexionecu911,elarteviveenloja +conexionecu911,elarteviveenloja +conexionecu911,elarteviveenloja +conexionecu911,elarteviveenloja +conexionecu911,elarteviveenloja +conexionecu911,elarteviveenloja +conexionecu911,elarteviveenloja +conexionecu911,elarteviveenloja +loja,elarteviveenloja +elarteviveenloja,revistaviajeromedio +loja,elarteviveenloja +elarteviveenloja,revistaviajeromedio +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,ecuador +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,revistaviajeromedio +loja,elarteviveenloja +elarteviveenloja,revistaviajeromedio +salud,elarteviveenloja +salud,elarteviveenloja +elarteviveenloja,arcsa +loja,elarteviveenloja +loja,elarteviveenloja +fiav2017,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +cinemasin,wayakcirco +elarteviveenloja,campanadehospitalidadturistica +elarteviveenloja,campanadehospitalidadturistica +salud,elarteviveenloja +elarteviveenloja,arcsa +ecuador,elarteviveenloja +elarteviveenloja,campanadehospitalidadturistica +elarteviveenloja,campanadehospitalidadturistica +elarteviveenloja,campanadehospitalidadturistica +elarteviveenloja,campanadehospitalidadturistica +ecuador,elarteviveenloja +elarteviveenloja,campanadehospitalidadturistica +elarteviveenloja,campanadehospitalidadturistica +elarteviveenloja,campanadehospitalidadturistica +elarteviveenloja,campanadehospitalidadturistica +elarteviveenloja,campanadehospitalidadturistica +elarteviveenloja,campanadehospitalidadturistica +elarteviveenloja,campanadehospitalidadturistica +salud,elarteviveenloja +salud,elarteviveenloja +elarteviveenloja,arcsa +salud,elarteviveenloja +elarteviveenloja,arcsa +programacion,loja +loja,elarteviveenloja +elarteviveenloja,fiavl2017 +ecuador,elarteviveenloja +elarteviveenloja,artesvivas +artesvivas,loja +programacion,loja +loja,elarteviveenloja +elarteviveenloja,fiavl2017 +salud,elarteviveenloja +elarteviveenloja,arcsa +salud,elarteviveenloja +elarteviveenloja,arcsa +salud,elarteviveenloja +elarteviveenloja,arcsa +salud,elarteviveenloja +elarteviveenloja,arcsa +salud,elarteviveenloja +elarteviveenloja,arcsa +programacion,loja +loja,elarteviveenloja +elarteviveenloja,fiavl2017 +salud,elarteviveenloja +salud,elarteviveenloja +salud,elarteviveenloja +elarteviveenloja,arcsa +salud,elarteviveenloja +felizviernes,elarteviveenloja +felizviernes,elarteviveenloja +programacion,loja +loja,elarteviveenloja +elarteviveenloja,fiavl2017 +programacion,loja +loja,elarteviveenloja +elarteviveenloja,fiavl2017 +los4mundosdelsur,elarteviveenloja +los4mundosdelsur,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +programacion,loja +loja,elarteviveenloja +elarteviveenloja,fiavl2017 +programacion,loja +loja,elarteviveenloja +elarteviveenloja,fiavl2017 +programacion,loja +loja,elarteviveenloja +elarteviveenloja,fiavl2017 +programacion,loja +loja,elarteviveenloja +elarteviveenloja,fiavl2017 +programacion,loja +loja,elarteviveenloja +elarteviveenloja,fiavl2017 +ecuador,elarteviveenloja +elarteviveenloja,artesvivas +artesvivas,loja +ecuador,elarteviveenloja +elarteviveenloja,artesvivas +artesvivas,loja +ecuador,elarteviveenloja +elarteviveenloja,artesvivas +artesvivas,loja +salud,elarteviveenloja +salud,elarteviveenloja +salud,elarteviveenloja +salud,elarteviveenloja +salud,elarteviveenloja +salud,elarteviveenloja +ecuador,elarteviveenloja +elarteviveenloja,cifiunl2017 +elarteviveenloja,cifiunl2017 +ecuador,elarteviveenloja +ecuador,elarteviveenloja +elarteviveenloja,somosculturautpl +ecuador,elarteviveenloja +los4mundosdelsur,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +elarteviveenloja,somosculturautpl +elarteviveenloja,somosculturautpl +ecuador,elarteviveenloja +loja,elarteviveenloja +ecuador,elarteviveenloja +zaruma,los4mundosdelsur +los4mundosdelsur,elarteviveenloja +ecuador,elarteviveenloja +los4mundosdelsur,elarteviveenloja +los4mundosdelsur,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +los4mundosdelsur,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +ecuador,elarteviveenloja +karcocha,elarteviveenloja +elarteviveenloja,fiav2017 +zaruma,los4mundosdelsur +los4mundosdelsur,elarteviveenloja +los4mundosdelsur,elarteviveenloja +los4mundosdelsur,elarteviveenloja +loja,elarteviveenloja +zaruma,los4mundosdelsur +los4mundosdelsur,elarteviveenloja +los4mundosdelsur,elarteviveenloja +los4mundosdelsur,elarteviveenloja +zaruma,los4mundosdelsur +los4mundosdelsur,elarteviveenloja +loja,elarteviveenloja +los4mundosdelsur,elarteviveenloja +los4mundosdelsur,elarteviveenloja +los4mundosdelsur,elarteviveenloja +zaruma,los4mundosdelsur +los4mundosdelsur,elarteviveenloja +zaruma,los4mundosdelsur +los4mundosdelsur,elarteviveenloja +los4mundosdelsur,elarteviveenloja +los4mundosdelsur,elarteviveenloja +los4mundosdelsur,elarteviveenloja +los4mundosdelsur,elarteviveenloja +zaruma,los4mundosdelsur +los4mundosdelsur,elarteviveenloja +los4mundosdelsur,elarteviveenloja +los4mundosdelsur,elarteviveenloja +los4mundosdelsur,elarteviveenloja +zaruma,los4mundosdelsur +los4mundosdelsur,elarteviveenloja +loja,elarteviveenloja +zaruma,los4mundosdelsur +los4mundosdelsur,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +zaruma,los4mundosdelsur +los4mundosdelsur,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +zaruma,los4mundosdelsur +los4mundosdelsur,elarteviveenloja +zaruma,los4mundosdelsur +los4mundosdelsur,elarteviveenloja +zaruma,los4mundosdelsur +los4mundosdelsur,elarteviveenloja +zaruma,los4mundosdelsur +los4mundosdelsur,elarteviveenloja +zaruma,los4mundosdelsur +los4mundosdelsur,elarteviveenloja +zaruma,los4mundosdelsur +los4mundosdelsur,elarteviveenloja +zaruma,los4mundosdelsur +los4mundosdelsur,elarteviveenloja +zaruma,los4mundosdelsur +los4mundosdelsur,elarteviveenloja +zaruma,los4mundosdelsur +los4mundosdelsur,elarteviveenloja +zaruma,los4mundosdelsur +los4mundosdelsur,elarteviveenloja +los4mundosdelsur,elarteviveenloja +elarteviveenloja,weareproudofyoulauren +weareproudofyoulauren,lavadodeactivos +elarteviveenloja,weareproudofyoulauren +weareproudofyoulauren,lavadodeactivos +karcocha,elarteviveenloja +elarteviveenloja,fiav2017 +karcocha,elarteviveenloja +elarteviveenloja,fiav2017 +karcocha,elarteviveenloja +elarteviveenloja,fiav2017 +los4mundosdelsur,elarteviveenloja +los4mundosdelsur,elarteviveenloja +los4mundosdelsur,elarteviveenloja +los4mundosdelsur,elarteviveenloja +fiav2017,elarteviveenloja +elarteviveenloja,evento +evento,loja +loja,embajadorturistico +elarteviveenloja,evento +evento,loja +loja,embajadorturistico +elarteviveenloja,evento +evento,loja +loja,embajadorturistico +elarteviveenloja,pablopalacio +elarteviveenloja,loja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +loja,festivalartesvivas +festivalartesvivas,elarteviveenloja +fiavl2017,elarteviveenloja +loja,festivalartesvivas +festivalartesvivas,elarteviveenloja +loja,festivalartesvivas +festivalartesvivas,elarteviveenloja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +tena,fiavl2017 +fiavl2017,caminoaloja +caminoaloja,elarteviveenloja +caminoaloja,elarteviveenloja +fiavl2017,elarteviveenloja +caminoaloja,elarteviveenloja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +loja,festivalartesvivas +festivalartesvivas,elarteviveenloja +loja,elarteviveenloja +caminoaloja,elarteviveenloja +caminoaloja,elarteviveenloja +loja,festivalartesvivas +festivalartesvivas,elarteviveenloja +loja,festivalartesvivas +festivalartesvivas,elarteviveenloja +loja,festivalartesvivas +festivalartesvivas,elarteviveenloja +loja,festivalartesvivas +festivalartesvivas,elarteviveenloja +loja,festivalartesvivas +festivalartesvivas,elarteviveenloja +loja,elarteviveenloja +cantanta,todoslospueblostodaslasvoces +todoslospueblostodaslasvoces,elarteviveenloja +elarteviveenloja,artesvivas2017 +fiav2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiav2017,elarteviveenloja +cantanta,todoslospueblostodaslasvoces +todoslospueblostodaslasvoces,elarteviveenloja +elarteviveenloja,artesvivas2017 +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +fiav2017,elarteviveenloja +fiav2017,elarteviveenloja +cafetv,elarteviveenloja +cafetv,elarteviveenloja +cafetv,elarteviveenloja +fiav2017,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +cafetv,elarteviveenloja +cafetv,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +loja,elarteviveenloja +cafetv,elarteviveenloja +cafetv,elarteviveenloja +cafetv,elarteviveenloja +fiavl2017,elarteviveenloja +cafetv,elarteviveenloja +cafetv,elarteviveenloja +fiavl2017,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +fiav2017,elarteviveenloja +fiav2017,elarteviveenloja +elarteviveenloja,loja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,loja +elarteviveenloja,loja +elarteviveenloja,loja +elarteviveenloja,loja +caminoaloja,elarteviveenloja +caminoaloja,elarteviveenloja +tena,fiavl2017 +fiavl2017,caminoaloja +caminoaloja,elarteviveenloja +caminoaloja,maac +maac,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +elarteviveenloja,pablopalacio +fiav2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +caminoaloja,elarteviveenloja +caminoaloja,elarteviveenloja +teamfestivaloff,festivalinternacionaldeartesvivas +festivalinternacionaldeartesvivas,elarteviveenloja +caminoaloja,elarteviveenloja +caminoaloja,elarteviveenloja +caminoaloja,elarteviveenloja +caminoaloja,elarteviveenloja +caminoaloja,elarteviveenloja +caminoaloja,elarteviveenloja +caminoaloja,elarteviveenloja +caminoaloja,elarteviveenloja +caminoaloja,elarteviveenloja +caminoaloja,elarteviveenloja +caminoaloja,elarteviveenloja +caminoaloja,elarteviveenloja +caminoaloja,elarteviveenloja +caminoaloja,elarteviveenloja +fiavl2017,elarteviveenloja +caminoaloja,elarteviveenloja +caminoaloja,elarteviveenloja +caminoaloja,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +caminoaloja,elarteviveenloja +caminoaloja,elarteviveenloja +fiavl2017,elarteviveenloja +caminoaloja,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +caminoaloja,elarteviveenloja +caminoaloja,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +caminoaloja,maac +maac,elarteviveenloja +caminoaloja,maac +maac,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +caminoaloja,maac +maac,elarteviveenloja +ecuador,elarteviveenloja +lima,elarteviveenloja +fiavl2017,elarteviveenloja +caminoaloja,maac +maac,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiav2017,elarteviveenloja +caminoaloja,maac +maac,elarteviveenloja +fiavl2017,elarteviveenloja +caminoaloja,maac +maac,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +caminoaloja,maac +maac,elarteviveenloja +caminoaloja,maac +maac,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +caminoaloja,elarteviveenloja +raulpereztorres,elarteviveenloja +fiavl2017,elarteviveenloja +tena,fiavl2017 +fiavl2017,caminoaloja +caminoaloja,elarteviveenloja +fiavl2017,elarteviveenloja +tena,fiavl2017 +fiavl2017,caminoaloja +caminoaloja,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +tena,fiavl2017 +fiavl2017,caminoaloja +caminoaloja,elarteviveenloja +fiavl2017,elarteviveenloja +tena,fiavl2017 +fiavl2017,caminoaloja +caminoaloja,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +tena,fiavl2017 +fiavl2017,caminoaloja +caminoaloja,elarteviveenloja +tena,fiavl2017 +fiavl2017,caminoaloja +caminoaloja,elarteviveenloja +fiavl2017,elarteviveenloja +tena,fiavl2017 +fiavl2017,caminoaloja +caminoaloja,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +caminoaloja,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +caminoaloja,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +caminoaloja,elarteviveenloja +caminoaloja,elarteviveenloja +fiavl2017,elarteviveenloja +caminoaloja,elarteviveenloja +caminoaloja,elarteviveenloja +caminoaloja,elarteviveenloja +loja,elarteviveenloja +caminoaloja,quito +quito,elarteviveenloja +elarteviveenloja,fiavl2017 +caminoaloja,elarteviveenloja +fiavl2017,elarteviveenloja +caminoaloja,elarteviveenloja +caminoaloja,elarteviveenloja +caminoaloja,quito +quito,elarteviveenloja +elarteviveenloja,fiavl2017 +caminoaloja,elarteviveenloja +caminoaloja,elarteviveenloja +caminoaloja,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiav2017,elarteviveenloja +elarteviveenloja,loja +fiav2017,elarteviveenloja +caminoaloja,quito +quito,elarteviveenloja +elarteviveenloja,fiavl2017 +caminoaloja,quito +quito,elarteviveenloja +elarteviveenloja,fiavl2017 +caminoaloja,quito +quito,elarteviveenloja +elarteviveenloja,fiavl2017 +caminoaloja,quito +quito,elarteviveenloja +elarteviveenloja,fiavl2017 +caminoaloja,quito +quito,elarteviveenloja +elarteviveenloja,fiavl2017 +caminoaloja,quito +quito,elarteviveenloja +elarteviveenloja,fiavl2017 +caminoaloja,quito +quito,elarteviveenloja +elarteviveenloja,fiavl2017 +loja,elarteviveenloja +fiav2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +caminoaloja,quito +quito,elarteviveenloja +elarteviveenloja,fiavl2017 +caminoaloja,elarteviveenloja +caminoaloja,quito +quito,elarteviveenloja +elarteviveenloja,fiavl2017 +caminoaloja,elarteviveenloja +caminoaloja,quito +quito,elarteviveenloja +elarteviveenloja,fiavl2017 +caminoaloja,quito +quito,elarteviveenloja +elarteviveenloja,fiavl2017 +caminoaloja,quito +quito,elarteviveenloja +elarteviveenloja,fiavl2017 +caminoaloja,elarteviveenloja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +fiav2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +loja,elarteviveenloja +raulpereztorres,bogota +bogota,elarteviveenloja +loja,elarteviveenloja +ecuador,elarteviveenloja +raulpereztorres,elarteviveenloja +colombia,elarteviveenloja +raulpereztorres,bogota +bogota,elarteviveenloja +bogota,elarteviveenloja +guayaquil,elarteviveenloja +raulpereztorres,elarteviveenloja +raulpereztorres,elarteviveenloja +fiavl2017,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +mevoyaloja,elarteviveenloja +raulpereztorres,elarteviveenloja +raulpereztorres,elarteviveenloja +esmeraldas,caminoaloja +caminoaloja,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiav2017,elarteviveenloja +loja,elarteviveenloja +fiav2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiav2017,elarteviveenloja +fiavl2017,elarteviveenloja +cafetv,elarteviveenloja +fiavl2017,elarteviveenloja +fiav2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiav2017,elarteviveenloja +fiav2017,elarteviveenloja +lojacunadeartistas,elarteviveenloja +elarteviveenloja,loja +loja,musica +lojacunadeartistas,elarteviveenloja +elarteviveenloja,loja +loja,musica +lojacunadeartistas,elarteviveenloja +elarteviveenloja,loja +loja,musica +fiavl2017,elarteviveenloja +babahoyo,caminoaloja +caminoaloja,elarteviveenloja +esmeraldas,caminoaloja +caminoaloja,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +confirmado,karcocha +karcocha,loja +loja,elarteviveenloja +caminoaloja,fiavl2017 +fiavl2017,elarteviveenloja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +loja,elarteviveenloja +guayaquil,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +fiav2017,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +guayaquil,elarteviveenloja +cafetv,elarteviveenloja +cafetv,elarteviveenloja +cafetv,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +fiavl2017,elarteviveenloja +loja,fiavl2017 +fiavl2017,elarteviveenloja +loja,elarteviveenloja +loja,elarteviveenloja diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_opposite_force_undirected_merged.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_opposite_force_undirected_merged.csv new file mode 100644 index 0000000000..30dfe813f2 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_opposite_force_undirected_merged.csv @@ -0,0 +1,3 @@ +Source,Target +loja,postalecu911 +postalecu911,loja \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_repeated_with_ids.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_repeated_with_ids.csv new file mode 100644 index 0000000000..fc6e707b4c --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_repeated_with_ids.csv @@ -0,0 +1,5 @@ +id,source,target,weight +a,1,2,1 +b,3,4,2 +a,1,2,5 +d,2,3,2 \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_repeated_without_ids.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_repeated_without_ids.csv new file mode 100644 index 0000000000..83ff135374 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_repeated_without_ids.csv @@ -0,0 +1,6 @@ +source,target,weight +1,2,1 +3,4,2 +1,2,5 +2,3,2 +1,2,1.5 \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_types_test.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_types_test.csv new file mode 100644 index 0000000000..e10e61b920 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_types_test.csv @@ -0,0 +1,3 @@ +id,label,source,target,kind,type,weight +1,1,1,2,8,directed,2 +2,2.0,2,1,1,undirected,2 \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_with_timeset_intervals.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_with_timeset_intervals.csv new file mode 100644 index 0000000000..460dee83b4 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_with_timeset_intervals.csv @@ -0,0 +1,6 @@ +Source Target Type timeset +Fred Alice Directed "[2016-02-03, 2016-02-04]" +Alice Fred Directed "[2016-03-04, Infinity]" +Dirk Fred Directed "[-Infinity, 2016-02-04]" +Fred Alice Directed "[2016-02-05, 2016-02-08]" +Dirk Fred Directed "[2016-02-04, 2016-02-26]" diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_with_timeset_timestamps.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_with_timeset_timestamps.csv new file mode 100644 index 0000000000..22eafc1ebd --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/edges_table_with_timeset_timestamps.csv @@ -0,0 +1,6 @@ +Source Target Type timeset +Fred Alice Directed 2016-02-03 +Alice Fred Directed 2016-03-04 +Dirk Fred Directed 2016-02-04 +Fred Alice Directed 2016-02-05 +Dirk Fred Directed 2016-02-05 diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testAdjacencyList_edges.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testAdjacencyList_edges.csv new file mode 100644 index 0000000000..bb437dbaa9 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testAdjacencyList_edges.csv @@ -0,0 +1,8 @@ +Source,Target,Type,Label,Weight +a,b,Directed,,1 +b,c,Directed,,1 +b,d,Directed,,1 +f,a,Directed,,1 +f,g,Directed,,1 +f,h,Directed,,1 +f,i,Directed,,1 \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testComplexMatrix_edges.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testComplexMatrix_edges.csv new file mode 100644 index 0000000000..9c858b85dc --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testComplexMatrix_edges.csv @@ -0,0 +1,651 @@ +Source,Target,Type,Label,Weight +Bruno Pellaud,Christian Van Singer,Directed,,24 +Bruno Pellaud,Christoph Brutschin,Directed,,4 +Bruno Pellaud,Christophe Darbellay,Directed,,4 +Bruno Pellaud,Doris Leuthard,Directed,,80 +Bruno Pellaud,Eric Nussbaumer,Directed,,12 +Bruno Pellaud,George Piller,Directed,,4 +Bruno Pellaud,Greenpeace,Directed,,8 +Bruno Pellaud,Hans Grunder,Directed,,4 +Bruno Pellaud,Jacqueline Fehr,Directed,,4 +Bruno Pellaud,Jacques Bourgeois,Directed,,4 +Bruno Pellaud,Jean-FranΓ§ois Rime,Directed,,4 +Bruno Pellaud,Jean-Marc Cavedon,Directed,,8 +Bruno Pellaud,Jean-Marie Brom,Directed,,8 +Bruno Pellaud,Jean-Pierre Bommer,Directed,,4 +Bruno Pellaud,Jean-Pierre Graber,Directed,,16 +Bruno Pellaud,Marianne Binder,Directed,,4 +Bruno Pellaud,Miriam Behrens,Directed,,4 +Bruno Pellaud,Pascal Gentinetta,Directed,,12 +Bruno Pellaud,Roger Nordmann,Directed,,12 +Bruno Pellaud,Rolf Buettiker,Directed,,28 +Bruno Pellaud,Sofia Majnoni,Directed,,8 +Bruno Pellaud,Ueli Leuenberger,Directed,,4 +Bruno Pellaud,Ueli Maurer,Directed,,20 +Bruno Pellaud,Walter Steinmann,Directed,,16 +Bruno Pellaud,les Amis de la Terre,Directed,,4 +Christian Van Singer,Bruno Pellaud,Directed,,24 +Christian Van Singer,Christoph Brutschin,Directed,,6 +Christian Van Singer,Christophe Darbellay,Directed,,6 +Christian Van Singer,Doris Leuthard,Directed,,120 +Christian Van Singer,Eric Nussbaumer,Directed,,18 +Christian Van Singer,George Piller,Directed,,6 +Christian Van Singer,Greenpeace,Directed,,12 +Christian Van Singer,Hans Grunder,Directed,,6 +Christian Van Singer,Jacqueline Fehr,Directed,,6 +Christian Van Singer,Jacques Bourgeois,Directed,,6 +Christian Van Singer,Jean-FranΓ§ois Rime,Directed,,6 +Christian Van Singer,Jean-Marc Cavedon,Directed,,12 +Christian Van Singer,Jean-Marie Brom,Directed,,12 +Christian Van Singer,Jean-Pierre Bommer,Directed,,6 +Christian Van Singer,Jean-Pierre Graber,Directed,,24 +Christian Van Singer,Marianne Binder,Directed,,6 +Christian Van Singer,Miriam Behrens,Directed,,6 +Christian Van Singer,Pascal Gentinetta,Directed,,18 +Christian Van Singer,Roger Nordmann,Directed,,18 +Christian Van Singer,Rolf Buettiker,Directed,,42 +Christian Van Singer,Sofia Majnoni,Directed,,12 +Christian Van Singer,Ueli Leuenberger,Directed,,6 +Christian Van Singer,Ueli Maurer,Directed,,30 +Christian Van Singer,Walter Steinmann,Directed,,24 +Christian Van Singer,les Amis de la Terre,Directed,,6 +Christoph Brutschin,Bruno Pellaud,Directed,,4 +Christoph Brutschin,Christian Van Singer,Directed,,6 +Christoph Brutschin,Christophe Darbellay,Directed,,1 +Christoph Brutschin,Doris Leuthard,Directed,,20 +Christoph Brutschin,Eric Nussbaumer,Directed,,3 +Christoph Brutschin,George Piller,Directed,,1 +Christoph Brutschin,Greenpeace,Directed,,2 +Christoph Brutschin,Hans Grunder,Directed,,1 +Christoph Brutschin,Jacqueline Fehr,Directed,,1 +Christoph Brutschin,Jacques Bourgeois,Directed,,1 +Christoph Brutschin,Jean-FranΓ§ois Rime,Directed,,1 +Christoph Brutschin,Jean-Marc Cavedon,Directed,,2 +Christoph Brutschin,Jean-Marie Brom,Directed,,2 +Christoph Brutschin,Jean-Pierre Bommer,Directed,,1 +Christoph Brutschin,Jean-Pierre Graber,Directed,,4 +Christoph Brutschin,Marianne Binder,Directed,,1 +Christoph Brutschin,Miriam Behrens,Directed,,1 +Christoph Brutschin,Pascal Gentinetta,Directed,,3 +Christoph Brutschin,Roger Nordmann,Directed,,3 +Christoph Brutschin,Rolf Buettiker,Directed,,7 +Christoph Brutschin,Sofia Majnoni,Directed,,2 +Christoph Brutschin,Ueli Leuenberger,Directed,,1 +Christoph Brutschin,Ueli Maurer,Directed,,5 +Christoph Brutschin,Walter Steinmann,Directed,,4 +Christoph Brutschin,les Amis de la Terre,Directed,,1 +Christophe Darbellay,Bruno Pellaud,Directed,,4 +Christophe Darbellay,Christian Van Singer,Directed,,6 +Christophe Darbellay,Christoph Brutschin,Directed,,1 +Christophe Darbellay,Doris Leuthard,Directed,,20 +Christophe Darbellay,Eric Nussbaumer,Directed,,3 +Christophe Darbellay,George Piller,Directed,,1 +Christophe Darbellay,Greenpeace,Directed,,2 +Christophe Darbellay,Hans Grunder,Directed,,1 +Christophe Darbellay,Jacqueline Fehr,Directed,,1 +Christophe Darbellay,Jacques Bourgeois,Directed,,1 +Christophe Darbellay,Jean-FranΓ§ois Rime,Directed,,1 +Christophe Darbellay,Jean-Marc Cavedon,Directed,,2 +Christophe Darbellay,Jean-Marie Brom,Directed,,2 +Christophe Darbellay,Jean-Pierre Bommer,Directed,,1 +Christophe Darbellay,Jean-Pierre Graber,Directed,,4 +Christophe Darbellay,Marianne Binder,Directed,,1 +Christophe Darbellay,Miriam Behrens,Directed,,1 +Christophe Darbellay,Pascal Gentinetta,Directed,,3 +Christophe Darbellay,Roger Nordmann,Directed,,3 +Christophe Darbellay,Rolf Buettiker,Directed,,7 +Christophe Darbellay,Sofia Majnoni,Directed,,2 +Christophe Darbellay,Ueli Leuenberger,Directed,,1 +Christophe Darbellay,Ueli Maurer,Directed,,5 +Christophe Darbellay,Walter Steinmann,Directed,,4 +Christophe Darbellay,les Amis de la Terre,Directed,,1 +Doris Leuthard,Bruno Pellaud,Directed,,80 +Doris Leuthard,Christian Van Singer,Directed,,120 +Doris Leuthard,Christoph Brutschin,Directed,,20 +Doris Leuthard,Christophe Darbellay,Directed,,20 +Doris Leuthard,Eric Nussbaumer,Directed,,60 +Doris Leuthard,George Piller,Directed,,20 +Doris Leuthard,Greenpeace,Directed,,40 +Doris Leuthard,Hans Grunder,Directed,,20 +Doris Leuthard,Jacqueline Fehr,Directed,,20 +Doris Leuthard,Jacques Bourgeois,Directed,,20 +Doris Leuthard,Jean-FranΓ§ois Rime,Directed,,20 +Doris Leuthard,Jean-Marc Cavedon,Directed,,40 +Doris Leuthard,Jean-Marie Brom,Directed,,40 +Doris Leuthard,Jean-Pierre Bommer,Directed,,20 +Doris Leuthard,Jean-Pierre Graber,Directed,,80 +Doris Leuthard,Marianne Binder,Directed,,20 +Doris Leuthard,Miriam Behrens,Directed,,20 +Doris Leuthard,Pascal Gentinetta,Directed,,60 +Doris Leuthard,Roger Nordmann,Directed,,60 +Doris Leuthard,Rolf Buettiker,Directed,,140 +Doris Leuthard,Sofia Majnoni,Directed,,40 +Doris Leuthard,Ueli Leuenberger,Directed,,20 +Doris Leuthard,Ueli Maurer,Directed,,100 +Doris Leuthard,Walter Steinmann,Directed,,80 +Doris Leuthard,les Amis de la Terre,Directed,,20 +Eric Nussbaumer,Bruno Pellaud,Directed,,12 +Eric Nussbaumer,Christian Van Singer,Directed,,18 +Eric Nussbaumer,Christoph Brutschin,Directed,,3 +Eric Nussbaumer,Christophe Darbellay,Directed,,3 +Eric Nussbaumer,Doris Leuthard,Directed,,60 +Eric Nussbaumer,George Piller,Directed,,3 +Eric Nussbaumer,Greenpeace,Directed,,6 +Eric Nussbaumer,Hans Grunder,Directed,,3 +Eric Nussbaumer,Jacqueline Fehr,Directed,,3 +Eric Nussbaumer,Jacques Bourgeois,Directed,,3 +Eric Nussbaumer,Jean-FranΓ§ois Rime,Directed,,3 +Eric Nussbaumer,Jean-Marc Cavedon,Directed,,6 +Eric Nussbaumer,Jean-Marie Brom,Directed,,6 +Eric Nussbaumer,Jean-Pierre Bommer,Directed,,3 +Eric Nussbaumer,Jean-Pierre Graber,Directed,,12 +Eric Nussbaumer,Marianne Binder,Directed,,3 +Eric Nussbaumer,Miriam Behrens,Directed,,3 +Eric Nussbaumer,Pascal Gentinetta,Directed,,9 +Eric Nussbaumer,Roger Nordmann,Directed,,9 +Eric Nussbaumer,Rolf Buettiker,Directed,,21 +Eric Nussbaumer,Sofia Majnoni,Directed,,6 +Eric Nussbaumer,Ueli Leuenberger,Directed,,3 +Eric Nussbaumer,Ueli Maurer,Directed,,15 +Eric Nussbaumer,Walter Steinmann,Directed,,12 +Eric Nussbaumer,les Amis de la Terre,Directed,,3 +George Piller,Bruno Pellaud,Directed,,4 +George Piller,Christian Van Singer,Directed,,6 +George Piller,Christoph Brutschin,Directed,,1 +George Piller,Christophe Darbellay,Directed,,1 +George Piller,Doris Leuthard,Directed,,20 +George Piller,Eric Nussbaumer,Directed,,3 +George Piller,Greenpeace,Directed,,2 +George Piller,Hans Grunder,Directed,,1 +George Piller,Jacqueline Fehr,Directed,,1 +George Piller,Jacques Bourgeois,Directed,,1 +George Piller,Jean-FranΓ§ois Rime,Directed,,1 +George Piller,Jean-Marc Cavedon,Directed,,2 +George Piller,Jean-Marie Brom,Directed,,2 +George Piller,Jean-Pierre Bommer,Directed,,1 +George Piller,Jean-Pierre Graber,Directed,,4 +George Piller,Marianne Binder,Directed,,1 +George Piller,Miriam Behrens,Directed,,1 +George Piller,Pascal Gentinetta,Directed,,3 +George Piller,Roger Nordmann,Directed,,3 +George Piller,Rolf Buettiker,Directed,,7 +George Piller,Sofia Majnoni,Directed,,2 +George Piller,Ueli Leuenberger,Directed,,1 +George Piller,Ueli Maurer,Directed,,5 +George Piller,Walter Steinmann,Directed,,4 +George Piller,les Amis de la Terre,Directed,,1 +Greenpeace,Bruno Pellaud,Directed,,8 +Greenpeace,Christian Van Singer,Directed,,12 +Greenpeace,Christoph Brutschin,Directed,,2 +Greenpeace,Christophe Darbellay,Directed,,2 +Greenpeace,Doris Leuthard,Directed,,40 +Greenpeace,Eric Nussbaumer,Directed,,6 +Greenpeace,George Piller,Directed,,2 +Greenpeace,Hans Grunder,Directed,,2 +Greenpeace,Jacqueline Fehr,Directed,,2 +Greenpeace,Jacques Bourgeois,Directed,,2 +Greenpeace,Jean-FranΓ§ois Rime,Directed,,2 +Greenpeace,Jean-Marc Cavedon,Directed,,4 +Greenpeace,Jean-Marie Brom,Directed,,4 +Greenpeace,Jean-Pierre Bommer,Directed,,2 +Greenpeace,Jean-Pierre Graber,Directed,,8 +Greenpeace,Marianne Binder,Directed,,2 +Greenpeace,Miriam Behrens,Directed,,2 +Greenpeace,Pascal Gentinetta,Directed,,6 +Greenpeace,Roger Nordmann,Directed,,6 +Greenpeace,Rolf Buettiker,Directed,,14 +Greenpeace,Sofia Majnoni,Directed,,4 +Greenpeace,Ueli Leuenberger,Directed,,2 +Greenpeace,Ueli Maurer,Directed,,10 +Greenpeace,Walter Steinmann,Directed,,8 +Greenpeace,les Amis de la Terre,Directed,,2 +Hans Grunder,Bruno Pellaud,Directed,,4 +Hans Grunder,Christian Van Singer,Directed,,6 +Hans Grunder,Christoph Brutschin,Directed,,1 +Hans Grunder,Christophe Darbellay,Directed,,1 +Hans Grunder,Doris Leuthard,Directed,,20 +Hans Grunder,Eric Nussbaumer,Directed,,3 +Hans Grunder,George Piller,Directed,,1 +Hans Grunder,Greenpeace,Directed,,2 +Hans Grunder,Jacqueline Fehr,Directed,,1 +Hans Grunder,Jacques Bourgeois,Directed,,1 +Hans Grunder,Jean-FranΓ§ois Rime,Directed,,1 +Hans Grunder,Jean-Marc Cavedon,Directed,,2 +Hans Grunder,Jean-Marie Brom,Directed,,2 +Hans Grunder,Jean-Pierre Bommer,Directed,,1 +Hans Grunder,Jean-Pierre Graber,Directed,,4 +Hans Grunder,Marianne Binder,Directed,,1 +Hans Grunder,Miriam Behrens,Directed,,1 +Hans Grunder,Pascal Gentinetta,Directed,,3 +Hans Grunder,Roger Nordmann,Directed,,3 +Hans Grunder,Rolf Buettiker,Directed,,7 +Hans Grunder,Sofia Majnoni,Directed,,2 +Hans Grunder,Ueli Leuenberger,Directed,,1 +Hans Grunder,Ueli Maurer,Directed,,5 +Hans Grunder,Walter Steinmann,Directed,,4 +Hans Grunder,les Amis de la Terre,Directed,,1 +Jacqueline Fehr,Bruno Pellaud,Directed,,4 +Jacqueline Fehr,Christian Van Singer,Directed,,6 +Jacqueline Fehr,Christoph Brutschin,Directed,,1 +Jacqueline Fehr,Christophe Darbellay,Directed,,1 +Jacqueline Fehr,Doris Leuthard,Directed,,20 +Jacqueline Fehr,Eric Nussbaumer,Directed,,3 +Jacqueline Fehr,George Piller,Directed,,1 +Jacqueline Fehr,Greenpeace,Directed,,2 +Jacqueline Fehr,Hans Grunder,Directed,,1 +Jacqueline Fehr,Jacques Bourgeois,Directed,,1 +Jacqueline Fehr,Jean-FranΓ§ois Rime,Directed,,1 +Jacqueline Fehr,Jean-Marc Cavedon,Directed,,2 +Jacqueline Fehr,Jean-Marie Brom,Directed,,2 +Jacqueline Fehr,Jean-Pierre Bommer,Directed,,1 +Jacqueline Fehr,Jean-Pierre Graber,Directed,,4 +Jacqueline Fehr,Marianne Binder,Directed,,1 +Jacqueline Fehr,Miriam Behrens,Directed,,1 +Jacqueline Fehr,Pascal Gentinetta,Directed,,3 +Jacqueline Fehr,Roger Nordmann,Directed,,3 +Jacqueline Fehr,Rolf Buettiker,Directed,,7 +Jacqueline Fehr,Sofia Majnoni,Directed,,2 +Jacqueline Fehr,Ueli Leuenberger,Directed,,1 +Jacqueline Fehr,Ueli Maurer,Directed,,5 +Jacqueline Fehr,Walter Steinmann,Directed,,4 +Jacqueline Fehr,les Amis de la Terre,Directed,,1 +Jacques Bourgeois,Bruno Pellaud,Directed,,4 +Jacques Bourgeois,Christian Van Singer,Directed,,6 +Jacques Bourgeois,Christoph Brutschin,Directed,,1 +Jacques Bourgeois,Christophe Darbellay,Directed,,1 +Jacques Bourgeois,Doris Leuthard,Directed,,20 +Jacques Bourgeois,Eric Nussbaumer,Directed,,3 +Jacques Bourgeois,George Piller,Directed,,1 +Jacques Bourgeois,Greenpeace,Directed,,2 +Jacques Bourgeois,Hans Grunder,Directed,,1 +Jacques Bourgeois,Jacqueline Fehr,Directed,,1 +Jacques Bourgeois,Jean-FranΓ§ois Rime,Directed,,1 +Jacques Bourgeois,Jean-Marc Cavedon,Directed,,2 +Jacques Bourgeois,Jean-Marie Brom,Directed,,2 +Jacques Bourgeois,Jean-Pierre Bommer,Directed,,1 +Jacques Bourgeois,Jean-Pierre Graber,Directed,,4 +Jacques Bourgeois,Marianne Binder,Directed,,1 +Jacques Bourgeois,Miriam Behrens,Directed,,1 +Jacques Bourgeois,Pascal Gentinetta,Directed,,3 +Jacques Bourgeois,Roger Nordmann,Directed,,3 +Jacques Bourgeois,Rolf Buettiker,Directed,,7 +Jacques Bourgeois,Sofia Majnoni,Directed,,2 +Jacques Bourgeois,Ueli Leuenberger,Directed,,1 +Jacques Bourgeois,Ueli Maurer,Directed,,5 +Jacques Bourgeois,Walter Steinmann,Directed,,4 +Jacques Bourgeois,les Amis de la Terre,Directed,,1 +Jean-FranΓ§ois Rime,Bruno Pellaud,Directed,,4 +Jean-FranΓ§ois Rime,Christian Van Singer,Directed,,6 +Jean-FranΓ§ois Rime,Christoph Brutschin,Directed,,1 +Jean-FranΓ§ois Rime,Christophe Darbellay,Directed,,1 +Jean-FranΓ§ois Rime,Doris Leuthard,Directed,,20 +Jean-FranΓ§ois Rime,Eric Nussbaumer,Directed,,3 +Jean-FranΓ§ois Rime,George Piller,Directed,,1 +Jean-FranΓ§ois Rime,Greenpeace,Directed,,2 +Jean-FranΓ§ois Rime,Hans Grunder,Directed,,1 +Jean-FranΓ§ois Rime,Jacqueline Fehr,Directed,,1 +Jean-FranΓ§ois Rime,Jacques Bourgeois,Directed,,1 +Jean-FranΓ§ois Rime,Jean-Marc Cavedon,Directed,,2 +Jean-FranΓ§ois Rime,Jean-Marie Brom,Directed,,2 +Jean-FranΓ§ois Rime,Jean-Pierre Bommer,Directed,,1 +Jean-FranΓ§ois Rime,Jean-Pierre Graber,Directed,,4 +Jean-FranΓ§ois Rime,Marianne Binder,Directed,,1 +Jean-FranΓ§ois Rime,Miriam Behrens,Directed,,1 +Jean-FranΓ§ois Rime,Pascal Gentinetta,Directed,,3 +Jean-FranΓ§ois Rime,Roger Nordmann,Directed,,3 +Jean-FranΓ§ois Rime,Rolf Buettiker,Directed,,7 +Jean-FranΓ§ois Rime,Sofia Majnoni,Directed,,2 +Jean-FranΓ§ois Rime,Ueli Leuenberger,Directed,,1 +Jean-FranΓ§ois Rime,Ueli Maurer,Directed,,5 +Jean-FranΓ§ois Rime,Walter Steinmann,Directed,,4 +Jean-FranΓ§ois Rime,les Amis de la Terre,Directed,,1 +Jean-Marc Cavedon,Bruno Pellaud,Directed,,8 +Jean-Marc Cavedon,Christian Van Singer,Directed,,12 +Jean-Marc Cavedon,Christoph Brutschin,Directed,,2 +Jean-Marc Cavedon,Christophe Darbellay,Directed,,2 +Jean-Marc Cavedon,Doris Leuthard,Directed,,40 +Jean-Marc Cavedon,Eric Nussbaumer,Directed,,6 +Jean-Marc Cavedon,George Piller,Directed,,2 +Jean-Marc Cavedon,Greenpeace,Directed,,4 +Jean-Marc Cavedon,Hans Grunder,Directed,,2 +Jean-Marc Cavedon,Jacqueline Fehr,Directed,,2 +Jean-Marc Cavedon,Jacques Bourgeois,Directed,,2 +Jean-Marc Cavedon,Jean-FranΓ§ois Rime,Directed,,2 +Jean-Marc Cavedon,Jean-Marie Brom,Directed,,4 +Jean-Marc Cavedon,Jean-Pierre Bommer,Directed,,2 +Jean-Marc Cavedon,Jean-Pierre Graber,Directed,,8 +Jean-Marc Cavedon,Marianne Binder,Directed,,2 +Jean-Marc Cavedon,Miriam Behrens,Directed,,2 +Jean-Marc Cavedon,Pascal Gentinetta,Directed,,6 +Jean-Marc Cavedon,Roger Nordmann,Directed,,6 +Jean-Marc Cavedon,Rolf Buettiker,Directed,,14 +Jean-Marc Cavedon,Sofia Majnoni,Directed,,4 +Jean-Marc Cavedon,Ueli Leuenberger,Directed,,2 +Jean-Marc Cavedon,Ueli Maurer,Directed,,10 +Jean-Marc Cavedon,Walter Steinmann,Directed,,8 +Jean-Marc Cavedon,les Amis de la Terre,Directed,,2 +Jean-Marie Brom,Bruno Pellaud,Directed,,8 +Jean-Marie Brom,Christian Van Singer,Directed,,12 +Jean-Marie Brom,Christoph Brutschin,Directed,,2 +Jean-Marie Brom,Christophe Darbellay,Directed,,2 +Jean-Marie Brom,Doris Leuthard,Directed,,40 +Jean-Marie Brom,Eric Nussbaumer,Directed,,6 +Jean-Marie Brom,George Piller,Directed,,2 +Jean-Marie Brom,Greenpeace,Directed,,4 +Jean-Marie Brom,Hans Grunder,Directed,,2 +Jean-Marie Brom,Jacqueline Fehr,Directed,,2 +Jean-Marie Brom,Jacques Bourgeois,Directed,,2 +Jean-Marie Brom,Jean-FranΓ§ois Rime,Directed,,2 +Jean-Marie Brom,Jean-Marc Cavedon,Directed,,4 +Jean-Marie Brom,Jean-Pierre Bommer,Directed,,2 +Jean-Marie Brom,Jean-Pierre Graber,Directed,,8 +Jean-Marie Brom,Marianne Binder,Directed,,2 +Jean-Marie Brom,Miriam Behrens,Directed,,2 +Jean-Marie Brom,Pascal Gentinetta,Directed,,6 +Jean-Marie Brom,Roger Nordmann,Directed,,6 +Jean-Marie Brom,Rolf Buettiker,Directed,,14 +Jean-Marie Brom,Sofia Majnoni,Directed,,4 +Jean-Marie Brom,Ueli Leuenberger,Directed,,2 +Jean-Marie Brom,Ueli Maurer,Directed,,10 +Jean-Marie Brom,Walter Steinmann,Directed,,8 +Jean-Marie Brom,les Amis de la Terre,Directed,,2 +Jean-Pierre Bommer,Bruno Pellaud,Directed,,4 +Jean-Pierre Bommer,Christian Van Singer,Directed,,6 +Jean-Pierre Bommer,Christoph Brutschin,Directed,,1 +Jean-Pierre Bommer,Christophe Darbellay,Directed,,1 +Jean-Pierre Bommer,Doris Leuthard,Directed,,20 +Jean-Pierre Bommer,Eric Nussbaumer,Directed,,3 +Jean-Pierre Bommer,George Piller,Directed,,1 +Jean-Pierre Bommer,Greenpeace,Directed,,2 +Jean-Pierre Bommer,Hans Grunder,Directed,,1 +Jean-Pierre Bommer,Jacqueline Fehr,Directed,,1 +Jean-Pierre Bommer,Jacques Bourgeois,Directed,,1 +Jean-Pierre Bommer,Jean-FranΓ§ois Rime,Directed,,1 +Jean-Pierre Bommer,Jean-Marc Cavedon,Directed,,2 +Jean-Pierre Bommer,Jean-Marie Brom,Directed,,2 +Jean-Pierre Bommer,Jean-Pierre Graber,Directed,,4 +Jean-Pierre Bommer,Marianne Binder,Directed,,1 +Jean-Pierre Bommer,Miriam Behrens,Directed,,1 +Jean-Pierre Bommer,Pascal Gentinetta,Directed,,3 +Jean-Pierre Bommer,Roger Nordmann,Directed,,3 +Jean-Pierre Bommer,Rolf Buettiker,Directed,,7 +Jean-Pierre Bommer,Sofia Majnoni,Directed,,2 +Jean-Pierre Bommer,Ueli Leuenberger,Directed,,1 +Jean-Pierre Bommer,Ueli Maurer,Directed,,5 +Jean-Pierre Bommer,Walter Steinmann,Directed,,4 +Jean-Pierre Bommer,les Amis de la Terre,Directed,,1 +Jean-Pierre Graber,Bruno Pellaud,Directed,,16 +Jean-Pierre Graber,Christian Van Singer,Directed,,24 +Jean-Pierre Graber,Christoph Brutschin,Directed,,4 +Jean-Pierre Graber,Christophe Darbellay,Directed,,4 +Jean-Pierre Graber,Doris Leuthard,Directed,,80 +Jean-Pierre Graber,Eric Nussbaumer,Directed,,12 +Jean-Pierre Graber,George Piller,Directed,,4 +Jean-Pierre Graber,Greenpeace,Directed,,8 +Jean-Pierre Graber,Hans Grunder,Directed,,4 +Jean-Pierre Graber,Jacqueline Fehr,Directed,,4 +Jean-Pierre Graber,Jacques Bourgeois,Directed,,4 +Jean-Pierre Graber,Jean-FranΓ§ois Rime,Directed,,4 +Jean-Pierre Graber,Jean-Marc Cavedon,Directed,,8 +Jean-Pierre Graber,Jean-Marie Brom,Directed,,8 +Jean-Pierre Graber,Jean-Pierre Bommer,Directed,,4 +Jean-Pierre Graber,Marianne Binder,Directed,,4 +Jean-Pierre Graber,Miriam Behrens,Directed,,4 +Jean-Pierre Graber,Pascal Gentinetta,Directed,,12 +Jean-Pierre Graber,Roger Nordmann,Directed,,12 +Jean-Pierre Graber,Rolf Buettiker,Directed,,28 +Jean-Pierre Graber,Sofia Majnoni,Directed,,8 +Jean-Pierre Graber,Ueli Leuenberger,Directed,,4 +Jean-Pierre Graber,Ueli Maurer,Directed,,20 +Jean-Pierre Graber,Walter Steinmann,Directed,,16 +Jean-Pierre Graber,les Amis de la Terre,Directed,,4 +Marianne Binder,Bruno Pellaud,Directed,,4 +Marianne Binder,Christian Van Singer,Directed,,6 +Marianne Binder,Christoph Brutschin,Directed,,1 +Marianne Binder,Christophe Darbellay,Directed,,1 +Marianne Binder,Doris Leuthard,Directed,,20 +Marianne Binder,Eric Nussbaumer,Directed,,3 +Marianne Binder,George Piller,Directed,,1 +Marianne Binder,Greenpeace,Directed,,2 +Marianne Binder,Hans Grunder,Directed,,1 +Marianne Binder,Jacqueline Fehr,Directed,,1 +Marianne Binder,Jacques Bourgeois,Directed,,1 +Marianne Binder,Jean-FranΓ§ois Rime,Directed,,1 +Marianne Binder,Jean-Marc Cavedon,Directed,,2 +Marianne Binder,Jean-Marie Brom,Directed,,2 +Marianne Binder,Jean-Pierre Bommer,Directed,,1 +Marianne Binder,Jean-Pierre Graber,Directed,,4 +Marianne Binder,Miriam Behrens,Directed,,1 +Marianne Binder,Pascal Gentinetta,Directed,,3 +Marianne Binder,Roger Nordmann,Directed,,3 +Marianne Binder,Rolf Buettiker,Directed,,7 +Marianne Binder,Sofia Majnoni,Directed,,2 +Marianne Binder,Ueli Leuenberger,Directed,,1 +Marianne Binder,Ueli Maurer,Directed,,5 +Marianne Binder,Walter Steinmann,Directed,,4 +Marianne Binder,les Amis de la Terre,Directed,,1 +Miriam Behrens,Bruno Pellaud,Directed,,4 +Miriam Behrens,Christian Van Singer,Directed,,6 +Miriam Behrens,Christoph Brutschin,Directed,,1 +Miriam Behrens,Christophe Darbellay,Directed,,1 +Miriam Behrens,Doris Leuthard,Directed,,20 +Miriam Behrens,Eric Nussbaumer,Directed,,3 +Miriam Behrens,George Piller,Directed,,1 +Miriam Behrens,Greenpeace,Directed,,2 +Miriam Behrens,Hans Grunder,Directed,,1 +Miriam Behrens,Jacqueline Fehr,Directed,,1 +Miriam Behrens,Jacques Bourgeois,Directed,,1 +Miriam Behrens,Jean-FranΓ§ois Rime,Directed,,1 +Miriam Behrens,Jean-Marc Cavedon,Directed,,2 +Miriam Behrens,Jean-Marie Brom,Directed,,2 +Miriam Behrens,Jean-Pierre Bommer,Directed,,1 +Miriam Behrens,Jean-Pierre Graber,Directed,,4 +Miriam Behrens,Marianne Binder,Directed,,1 +Miriam Behrens,Pascal Gentinetta,Directed,,3 +Miriam Behrens,Roger Nordmann,Directed,,3 +Miriam Behrens,Rolf Buettiker,Directed,,7 +Miriam Behrens,Sofia Majnoni,Directed,,2 +Miriam Behrens,Ueli Leuenberger,Directed,,1 +Miriam Behrens,Ueli Maurer,Directed,,5 +Miriam Behrens,Walter Steinmann,Directed,,4 +Miriam Behrens,les Amis de la Terre,Directed,,1 +Pascal Gentinetta,Bruno Pellaud,Directed,,12 +Pascal Gentinetta,Christian Van Singer,Directed,,18 +Pascal Gentinetta,Christoph Brutschin,Directed,,3 +Pascal Gentinetta,Christophe Darbellay,Directed,,3 +Pascal Gentinetta,Doris Leuthard,Directed,,60 +Pascal Gentinetta,Eric Nussbaumer,Directed,,9 +Pascal Gentinetta,George Piller,Directed,,3 +Pascal Gentinetta,Greenpeace,Directed,,6 +Pascal Gentinetta,Hans Grunder,Directed,,3 +Pascal Gentinetta,Jacqueline Fehr,Directed,,3 +Pascal Gentinetta,Jacques Bourgeois,Directed,,3 +Pascal Gentinetta,Jean-FranΓ§ois Rime,Directed,,3 +Pascal Gentinetta,Jean-Marc Cavedon,Directed,,6 +Pascal Gentinetta,Jean-Marie Brom,Directed,,6 +Pascal Gentinetta,Jean-Pierre Bommer,Directed,,3 +Pascal Gentinetta,Jean-Pierre Graber,Directed,,12 +Pascal Gentinetta,Marianne Binder,Directed,,3 +Pascal Gentinetta,Miriam Behrens,Directed,,3 +Pascal Gentinetta,Roger Nordmann,Directed,,9 +Pascal Gentinetta,Rolf Buettiker,Directed,,21 +Pascal Gentinetta,Sofia Majnoni,Directed,,6 +Pascal Gentinetta,Ueli Leuenberger,Directed,,3 +Pascal Gentinetta,Ueli Maurer,Directed,,15 +Pascal Gentinetta,Walter Steinmann,Directed,,12 +Pascal Gentinetta,les Amis de la Terre,Directed,,3 +Roger Nordmann,Bruno Pellaud,Directed,,12 +Roger Nordmann,Christian Van Singer,Directed,,18 +Roger Nordmann,Christoph Brutschin,Directed,,3 +Roger Nordmann,Christophe Darbellay,Directed,,3 +Roger Nordmann,Doris Leuthard,Directed,,60 +Roger Nordmann,Eric Nussbaumer,Directed,,9 +Roger Nordmann,George Piller,Directed,,3 +Roger Nordmann,Greenpeace,Directed,,6 +Roger Nordmann,Hans Grunder,Directed,,3 +Roger Nordmann,Jacqueline Fehr,Directed,,3 +Roger Nordmann,Jacques Bourgeois,Directed,,3 +Roger Nordmann,Jean-FranΓ§ois Rime,Directed,,3 +Roger Nordmann,Jean-Marc Cavedon,Directed,,6 +Roger Nordmann,Jean-Marie Brom,Directed,,6 +Roger Nordmann,Jean-Pierre Bommer,Directed,,3 +Roger Nordmann,Jean-Pierre Graber,Directed,,12 +Roger Nordmann,Marianne Binder,Directed,,3 +Roger Nordmann,Miriam Behrens,Directed,,3 +Roger Nordmann,Pascal Gentinetta,Directed,,9 +Roger Nordmann,Rolf Buettiker,Directed,,21 +Roger Nordmann,Sofia Majnoni,Directed,,6 +Roger Nordmann,Ueli Leuenberger,Directed,,3 +Roger Nordmann,Ueli Maurer,Directed,,15 +Roger Nordmann,Walter Steinmann,Directed,,12 +Roger Nordmann,les Amis de la Terre,Directed,,3 +Rolf Buettiker,Bruno Pellaud,Directed,,28 +Rolf Buettiker,Christian Van Singer,Directed,,42 +Rolf Buettiker,Christoph Brutschin,Directed,,7 +Rolf Buettiker,Christophe Darbellay,Directed,,7 +Rolf Buettiker,Doris Leuthard,Directed,,140 +Rolf Buettiker,Eric Nussbaumer,Directed,,21 +Rolf Buettiker,George Piller,Directed,,7 +Rolf Buettiker,Greenpeace,Directed,,14 +Rolf Buettiker,Hans Grunder,Directed,,7 +Rolf Buettiker,Jacqueline Fehr,Directed,,7 +Rolf Buettiker,Jacques Bourgeois,Directed,,7 +Rolf Buettiker,Jean-FranΓ§ois Rime,Directed,,7 +Rolf Buettiker,Jean-Marc Cavedon,Directed,,14 +Rolf Buettiker,Jean-Marie Brom,Directed,,14 +Rolf Buettiker,Jean-Pierre Bommer,Directed,,7 +Rolf Buettiker,Jean-Pierre Graber,Directed,,28 +Rolf Buettiker,Marianne Binder,Directed,,7 +Rolf Buettiker,Miriam Behrens,Directed,,7 +Rolf Buettiker,Pascal Gentinetta,Directed,,21 +Rolf Buettiker,Roger Nordmann,Directed,,21 +Rolf Buettiker,Sofia Majnoni,Directed,,14 +Rolf Buettiker,Ueli Leuenberger,Directed,,7 +Rolf Buettiker,Ueli Maurer,Directed,,35 +Rolf Buettiker,Walter Steinmann,Directed,,28 +Rolf Buettiker,les Amis de la Terre,Directed,,7 +Sofia Majnoni,Bruno Pellaud,Directed,,8 +Sofia Majnoni,Christian Van Singer,Directed,,12 +Sofia Majnoni,Christoph Brutschin,Directed,,2 +Sofia Majnoni,Christophe Darbellay,Directed,,2 +Sofia Majnoni,Doris Leuthard,Directed,,40 +Sofia Majnoni,Eric Nussbaumer,Directed,,6 +Sofia Majnoni,George Piller,Directed,,2 +Sofia Majnoni,Greenpeace,Directed,,4 +Sofia Majnoni,Hans Grunder,Directed,,2 +Sofia Majnoni,Jacqueline Fehr,Directed,,2 +Sofia Majnoni,Jacques Bourgeois,Directed,,2 +Sofia Majnoni,Jean-FranΓ§ois Rime,Directed,,2 +Sofia Majnoni,Jean-Marc Cavedon,Directed,,4 +Sofia Majnoni,Jean-Marie Brom,Directed,,4 +Sofia Majnoni,Jean-Pierre Bommer,Directed,,2 +Sofia Majnoni,Jean-Pierre Graber,Directed,,8 +Sofia Majnoni,Marianne Binder,Directed,,2 +Sofia Majnoni,Miriam Behrens,Directed,,2 +Sofia Majnoni,Pascal Gentinetta,Directed,,6 +Sofia Majnoni,Roger Nordmann,Directed,,6 +Sofia Majnoni,Rolf Buettiker,Directed,,14 +Sofia Majnoni,Ueli Leuenberger,Directed,,2 +Sofia Majnoni,Ueli Maurer,Directed,,10 +Sofia Majnoni,Walter Steinmann,Directed,,8 +Sofia Majnoni,les Amis de la Terre,Directed,,2 +Ueli Leuenberger,Bruno Pellaud,Directed,,4 +Ueli Leuenberger,Christian Van Singer,Directed,,6 +Ueli Leuenberger,Christoph Brutschin,Directed,,1 +Ueli Leuenberger,Christophe Darbellay,Directed,,1 +Ueli Leuenberger,Doris Leuthard,Directed,,20 +Ueli Leuenberger,Eric Nussbaumer,Directed,,3 +Ueli Leuenberger,George Piller,Directed,,1 +Ueli Leuenberger,Greenpeace,Directed,,2 +Ueli Leuenberger,Hans Grunder,Directed,,1 +Ueli Leuenberger,Jacqueline Fehr,Directed,,1 +Ueli Leuenberger,Jacques Bourgeois,Directed,,1 +Ueli Leuenberger,Jean-FranΓ§ois Rime,Directed,,1 +Ueli Leuenberger,Jean-Marc Cavedon,Directed,,2 +Ueli Leuenberger,Jean-Marie Brom,Directed,,2 +Ueli Leuenberger,Jean-Pierre Bommer,Directed,,1 +Ueli Leuenberger,Jean-Pierre Graber,Directed,,4 +Ueli Leuenberger,Marianne Binder,Directed,,1 +Ueli Leuenberger,Miriam Behrens,Directed,,1 +Ueli Leuenberger,Pascal Gentinetta,Directed,,3 +Ueli Leuenberger,Roger Nordmann,Directed,,3 +Ueli Leuenberger,Rolf Buettiker,Directed,,7 +Ueli Leuenberger,Sofia Majnoni,Directed,,2 +Ueli Leuenberger,Ueli Maurer,Directed,,5 +Ueli Leuenberger,Walter Steinmann,Directed,,4 +Ueli Leuenberger,les Amis de la Terre,Directed,,1 +Ueli Maurer,Bruno Pellaud,Directed,,20 +Ueli Maurer,Christian Van Singer,Directed,,30 +Ueli Maurer,Christoph Brutschin,Directed,,5 +Ueli Maurer,Christophe Darbellay,Directed,,5 +Ueli Maurer,Doris Leuthard,Directed,,100 +Ueli Maurer,Eric Nussbaumer,Directed,,15 +Ueli Maurer,George Piller,Directed,,5 +Ueli Maurer,Greenpeace,Directed,,10 +Ueli Maurer,Hans Grunder,Directed,,5 +Ueli Maurer,Jacqueline Fehr,Directed,,5 +Ueli Maurer,Jacques Bourgeois,Directed,,5 +Ueli Maurer,Jean-FranΓ§ois Rime,Directed,,5 +Ueli Maurer,Jean-Marc Cavedon,Directed,,10 +Ueli Maurer,Jean-Marie Brom,Directed,,10 +Ueli Maurer,Jean-Pierre Bommer,Directed,,5 +Ueli Maurer,Jean-Pierre Graber,Directed,,20 +Ueli Maurer,Marianne Binder,Directed,,5 +Ueli Maurer,Miriam Behrens,Directed,,5 +Ueli Maurer,Pascal Gentinetta,Directed,,15 +Ueli Maurer,Roger Nordmann,Directed,,15 +Ueli Maurer,Rolf Buettiker,Directed,,35 +Ueli Maurer,Sofia Majnoni,Directed,,10 +Ueli Maurer,Ueli Leuenberger,Directed,,5 +Ueli Maurer,Walter Steinmann,Directed,,20 +Ueli Maurer,les Amis de la Terre,Directed,,5 +Walter Steinmann,Bruno Pellaud,Directed,,16 +Walter Steinmann,Christian Van Singer,Directed,,24 +Walter Steinmann,Christoph Brutschin,Directed,,4 +Walter Steinmann,Christophe Darbellay,Directed,,4 +Walter Steinmann,Doris Leuthard,Directed,,80 +Walter Steinmann,Eric Nussbaumer,Directed,,12 +Walter Steinmann,George Piller,Directed,,4 +Walter Steinmann,Greenpeace,Directed,,8 +Walter Steinmann,Hans Grunder,Directed,,4 +Walter Steinmann,Jacqueline Fehr,Directed,,4 +Walter Steinmann,Jacques Bourgeois,Directed,,4 +Walter Steinmann,Jean-FranΓ§ois Rime,Directed,,4 +Walter Steinmann,Jean-Marc Cavedon,Directed,,8 +Walter Steinmann,Jean-Marie Brom,Directed,,8 +Walter Steinmann,Jean-Pierre Bommer,Directed,,4 +Walter Steinmann,Jean-Pierre Graber,Directed,,16 +Walter Steinmann,Marianne Binder,Directed,,4 +Walter Steinmann,Miriam Behrens,Directed,,4 +Walter Steinmann,Pascal Gentinetta,Directed,,12 +Walter Steinmann,Roger Nordmann,Directed,,12 +Walter Steinmann,Rolf Buettiker,Directed,,28 +Walter Steinmann,Sofia Majnoni,Directed,,8 +Walter Steinmann,Ueli Leuenberger,Directed,,4 +Walter Steinmann,Ueli Maurer,Directed,,20 +Walter Steinmann,les Amis de la Terre,Directed,,4 +les Amis de la Terre,Bruno Pellaud,Directed,,4 +les Amis de la Terre,Christian Van Singer,Directed,,6 +les Amis de la Terre,Christoph Brutschin,Directed,,1 +les Amis de la Terre,Christophe Darbellay,Directed,,1 +les Amis de la Terre,Doris Leuthard,Directed,,20 +les Amis de la Terre,Eric Nussbaumer,Directed,,3 +les Amis de la Terre,George Piller,Directed,,1 +les Amis de la Terre,Greenpeace,Directed,,2 +les Amis de la Terre,Hans Grunder,Directed,,1 +les Amis de la Terre,Jacqueline Fehr,Directed,,1 +les Amis de la Terre,Jacques Bourgeois,Directed,,1 +les Amis de la Terre,Jean-FranΓ§ois Rime,Directed,,1 +les Amis de la Terre,Jean-Marc Cavedon,Directed,,2 +les Amis de la Terre,Jean-Marie Brom,Directed,,2 +les Amis de la Terre,Jean-Pierre Bommer,Directed,,1 +les Amis de la Terre,Jean-Pierre Graber,Directed,,4 +les Amis de la Terre,Marianne Binder,Directed,,1 +les Amis de la Terre,Miriam Behrens,Directed,,1 +les Amis de la Terre,Pascal Gentinetta,Directed,,3 +les Amis de la Terre,Roger Nordmann,Directed,,3 +les Amis de la Terre,Rolf Buettiker,Directed,,7 +les Amis de la Terre,Sofia Majnoni,Directed,,2 +les Amis de la Terre,Ueli Leuenberger,Directed,,1 +les Amis de la Terre,Ueli Maurer,Directed,,5 +les Amis de la Terre,Walter Steinmann,Directed,,4 \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testEdgesTableDynamicWeightsMerged_edges.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testEdgesTableDynamicWeightsMerged_edges.csv new file mode 100644 index 0000000000..35765218ea --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testEdgesTableDynamicWeightsMerged_edges.csv @@ -0,0 +1,3 @@ +Source,Target,Type,Label,timeset,Weight +a,b,Directed,,,"<[1.0, 2.0, 1.0]; [2.0, 3.0, 2.0]; [3.0, 5.5, 3.25]>" +b,c,Directed,,,"<[1.0, Infinity, 1.0]>" \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testEdgesTableOppositeForceUndirected_Issue1848_edges.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testEdgesTableOppositeForceUndirected_Issue1848_edges.csv new file mode 100644 index 0000000000..00f9e08b37 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testEdgesTableOppositeForceUndirected_Issue1848_edges.csv @@ -0,0 +1,227 @@ +Source,Target,Type,Label,Weight +imbabura,loja,Undirected,,2 +loja,elarteviveenloja,Undirected,,714 +sosunl,elarteviveenloja,Undirected,,2883 +elarteviveenloja,unl,Undirected,,833 +loja,municipiodeloja,Undirected,,58 +felizviernes,loja,Undirected,,6 +videovigilanciaecu911durante,elarteviveenloja,Undirected,,28 +elarteviveenloja,cbamprendo,Undirected,,4 +cbamprendo,artesvivasloja,Undirected,,1 +artesvivasloja,3i,Undirected,,1 +cbamprendo,3i,Undirected,,1 +3h,elarteviveenloja,Undirected,,1 +acreditacionunl2018,elarteviveenloja,Undirected,,12 +elarteviveenloja,enlanacionaldelojalacorrupcion,Undirected,,4 +elarteviveenloja,ecuadorunido,Undirected,,6 +unl,sosunl,Undirected,,71 +arcsa,salud,Undirected,,12 +salud,elarteviveenloja,Undirected,,35 +patriciovallejo,elarteviveenloja,Undirected,,21 +elarteviveenloja,todaunavida,Undirected,,164 +elarteviveenloja,videovigilanciaecu911,Undirected,,29 +elarteviveenloja,fiavl,Undirected,,76 +elscomediants,loja,Undirected,,2 +temblor,loja,Undirected,,6 +loja,fiestasdequito,Undirected,,4 +fiestasdequito,elarteviveenloja,Undirected,,4 +ecu911,elarteviveenloja,Undirected,,130 +cbamprendo,3h,Undirected,,2 +temblor,elarteviveenloja,Undirected,,2 +unl,ecuador,Undirected,,26 +elarteviveenloja,elarteviveenloja,Undirected,,292 +municipiodeloja,elarteviveenloja,Undirected,,38 +elarteviveenloja,telediario,Undirected,,10 +loja,ecuador,Undirected,,70 +ecuador,elarteviveenloja,Undirected,,174 +elarteviveenloja,leninmoreno,Undirected,,4 +leninmoreno,loja,Undirected,,4 +elarteviveenloja,fiestasdeloja,Undirected,,1 +graph,networkscience,Undirected,,7 +networkscience,fiavl2017,Undirected,,7 +fiavl2017,elarteviveenloja,Undirected,,359 +sosunl,atender,Undirected,,27 +elarteviveenloja,igf2017ec,Undirected,,3 +igf2017ec,loja,Undirected,,3 +loja,postalecu911,Undirected,,2 +sosunl,sosunl,Undirected,,51 +elarteviveenloja,zoocarcel,Undirected,,1 +loja,unl,Undirected,,3 +elarteviveenloja,agendapresidencialec,Undirected,,110 +elarteviveenloja,sueno,Undirected,,2 +sueno,quito,Undirected,,2 +quito,stepbystep,Undirected,,2 +rectorunl,elarteviveenloja,Undirected,,10 +elarteviveenloja,soslenin,Undirected,,10 +elarteviveenloja,festivaldeartesvivas,Undirected,,4 +festivaldeartesvivas,loja,Undirected,,4 +cryptomonedas,latingrammy,Undirected,,1 +latingrammy,hagamosunpacto,Undirected,,1 +hagamosunpacto,elarteviveenloja,Undirected,,1 +elarteviveenloja,bitcoins,Undirected,,1 +rociodemoreno,elarteviveenloja,Undirected,,1 +elarteviveenloja,compromisosocial,Undirected,,2 +argentina,loja,Undirected,,48 +ecuador,fiav2017,Undirected,,48 +fiav2017,elarteviveenloja,Undirected,,82 +95anosdeluchaobrera,clasicodelastillero,Undirected,,3 +clasicodelastillero,encuentromujeres,Undirected,,3 +encuentromujeres,laconsultamalva,Undirected,,3 +laconsultamalva,elarteviveenloja,Undirected,,3 +loja,arte,Undirected,,1 +arte,cultura,Undirected,,1 +elarteviveenloja,elscomediants,Undirected,,1 +moreno,elarteviveenloja,Undirected,,2 +fiavl2017,los4mundosdelsur,Undirected,,1 +blogs,educativos,Undirected,,1 +educativos,latinoamerica,Undirected,,1 +revistameets,elarteviveenloja,Undirected,,1 +fiavl2017,ilovecrepesncofee,Undirected,,1 +ilovecrepesncofee,undulceantojo,Undirected,,1 +undulceantojo,lojaecuador,Undirected,,1 +sebusca,loja,Undirected,,3 +loja,cuckold,Undirected,,3 +cuckold,hotwife,Undirected,,4 +hotwife,imbox,Undirected,,3 +imbox,elarteviveenloja,Undirected,,3 +elarteviveenloja,latingrammystnt,Undirected,,1 +elarteviveenloja,raulpereztorres,Undirected,,10 +festivalinternacionaldeartesvivas,loja,Undirected,,2 +loja,teatro,Undirected,,1 +teatro,benjamincarrion,Undirected,,1 +cultura,elarteviveenloja,Undirected,,2 +lojamiciudad,loja,Undirected,,1 +ecu911,loja,Undirected,,10 +elarteviveenloja,atenter,Undirected,,16 +faustomino,elarteviveenloja,Undirected,,1 +loja,moreno,Undirected,,1 +elarteviveenloja,guadual,Undirected,,1 +bsc,mrsanta,Undirected,,4 +mrsanta,emelec,Undirected,,4 +emelec,cell,Undirected,,4 +cell,clasicodelastillero,Undirected,,4 +clasicodelastillero,peru,Undirected,,4 +peru,elarteviveenloja,Undirected,,4 +fiavloja2017,elarteviveenloja,Undirected,,2 +criacuervos,elarteviveenloja,Undirected,,7 +elarteviveenloja,manabi,Undirected,,1 +elarteviveenloja,perualmundial,Undirected,,1 +perualmundial,rusia2018,Undirected,,1 +rusia2018,gasolinazo,Undirected,,1 +gasolinazo,thursdaythoughts,Undirected,,1 +bicifest,elarteviveenloja,Undirected,,1 +degostudio,todoesdiseno,Undirected,,1 +todoesdiseno,diseno,Undirected,,1 +diseno,design,Undirected,,1 +design,ecuador,Undirected,,1 +ecuador,quito,Undirected,,1 +quito,uio,Undirected,,1 +uio,branding,Undirected,,1 +branding,publicidad,Undirected,,1 +lojamiciudad,elarteviveenloja,Undirected,,8 +loja,sosunl,Undirected,,16 +fiav2017,calasanz,Undirected,,1 +sos,elarteviveenloja,Undirected,,1 +elarteviveenloja,felizjueves,Undirected,,1 +felizjueves,ecuador,Undirected,,1 +loja,palza,Undirected,,1 +fiavloja2017,noviembre,Undirected,,1 +elarteviveenloja,unloja,Undirected,,22 +elarteviveenloja,los4mundosdelsur,Undirected,,95 +elarteviveenloja,coracao,Undirected,,1 +coracao,thehills,Undirected,,1 +filosofia,elarteviveenloja,Undirected,,2 +loja,festivalartesvivas,Undirected,,11 +festivalartesvivas,elarteviveenloja,Undirected,,11 +parquerecreacionaljipiro,loja,Undirected,,26 +los4mundosdelsur,parquenacionalpodocarpus,Undirected,,16 +parquenacionalpodocarpus,elarteviveenloja,Undirected,,16 +hotwife,loja,Undirected,,1 +huesosdebuda,utpl,Undirected,,1 +utpl,ecuador,Undirected,,1 +loja,wanted,Undirected,,1 +wanted,sebusca,Undirected,,1 +sebusca,cornudo,Undirected,,1 +cornudo,hotwife,Undirected,,1 +cuckold,swinger,Undirected,,1 +swinger,loja,Undirected,,1 +loja,zamora,Undirected,,1 +zamora,cuenca,Undirected,,1 +cuenca,machala,Undirected,,1 +fiavl2017,loja,Undirected,,4 +elarteviveenloja,presidencia_ec,Undirected,,1 +somosculturautpl,elarteviveenloja,Undirected,,5 +loja,economianaranja,Undirected,,1 +economianaranja,elarteviveenloja,Undirected,,1 +raulperez,elarteviveenloja,Undirected,,7 +utpl,elarteviveenloja,Undirected,,1 +fiav2017,loja,Undirected,,3 +elarteviveenloja,foto,Undirected,,3 +caminoaloja,giavl2017,Undirected,,1 +elarteviveenloja,elcisne,Undirected,,19 +elarteviveenloja,lapuertadelaciudaddeloja,Undirected,,18 +fiav2017,raulperez,Undirected,,3 +utpl,fiavl2017,Undirected,,1 +felizmiercoles,15nov,Undirected,,2 +15nov,diamundialdeladiabetes,Undirected,,2 +diamundialdeladiabetes,elarteviveenloja,Undirected,,2 +elarteviveenloja,usabienel911,Undirected,,2 +usabienel911,comienzaelcambio,Undirected,,2 +comienzaelcambio,adelantesedespejaelcamino,Undirected,,2 +loja,los4mundosdelsur,Undirected,,33 +vilcabamba,loja,Undirected,,1 +elarteviveenloja,consultapopular,Undirected,,1 +consultapopular,sialaconsulta,Undirected,,1 +sialaconsulta,lojacontigolenin,Undirected,,1 +los4mundosdelsur,parquenacionalpodoparpus,Undirected,,3 +parquenacionalpodoparpus,elarteviveenloja,Undirected,,3 +conexionecu911,elarteviveenloja,Undirected,,36 +iwia,loja,Undirected,,2 +loja,saraguro,Undirected,,6 +pinas,los4mundosdelsur,Undirected,,7 +los4mundosdelsur,eloro,Undirected,,5 +eloro,islasantaclara,Undirected,,5 +zamora,parquenacionalpodocarpus,Undirected,,2 +loja,conexionecu911,Undirected,,1 +elarteviveenloja,revistaviajeromedio,Undirected,,4 +elarteviveenloja,arcsa,Undirected,,10 +cinemasin,wayakcirco,Undirected,,1 +elarteviveenloja,campanadehospitalidadturistica,Undirected,,13 +programacion,loja,Undirected,,10 +elarteviveenloja,artesvivas,Undirected,,4 +artesvivas,loja,Undirected,,4 +felizviernes,elarteviveenloja,Undirected,,2 +elarteviveenloja,cifiunl2017,Undirected,,2 +zaruma,los4mundosdelsur,Undirected,,20 +karcocha,elarteviveenloja,Undirected,,4 +elarteviveenloja,weareproudofyoulauren,Undirected,,2 +weareproudofyoulauren,lavadodeactivos,Undirected,,2 +elarteviveenloja,evento,Undirected,,3 +evento,loja,Undirected,,3 +loja,embajadorturistico,Undirected,,3 +elarteviveenloja,pablopalacio,Undirected,,2 +tena,fiavl2017,Undirected,,9 +fiavl2017,caminoaloja,Undirected,,10 +caminoaloja,elarteviveenloja,Undirected,,59 +cantanta,todoslospueblostodaslasvoces,Undirected,,2 +todoslospueblostodaslasvoces,elarteviveenloja,Undirected,,2 +elarteviveenloja,artesvivas2017,Undirected,,2 +cafetv,elarteviveenloja,Undirected,,14 +caminoaloja,maac,Undirected,,9 +maac,elarteviveenloja,Undirected,,9 +teamfestivaloff,festivalinternacionaldeartesvivas,Undirected,,1 +festivalinternacionaldeartesvivas,elarteviveenloja,Undirected,,1 +lima,elarteviveenloja,Undirected,,1 +caminoaloja,quito,Undirected,,14 +quito,elarteviveenloja,Undirected,,14 +raulpereztorres,bogota,Undirected,,2 +bogota,elarteviveenloja,Undirected,,3 +colombia,elarteviveenloja,Undirected,,1 +guayaquil,elarteviveenloja,Undirected,,5 +mevoyaloja,elarteviveenloja,Undirected,,1 +esmeraldas,caminoaloja,Undirected,,2 +lojacunadeartistas,elarteviveenloja,Undirected,,3 +loja,musica,Undirected,,3 +babahoyo,caminoaloja,Undirected,,1 +confirmado,karcocha,Undirected,,1 +karcocha,loja,Undirected,,1 \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testEdgesTableOppositeForceUndirected_Merged_edges.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testEdgesTableOppositeForceUndirected_Merged_edges.csv new file mode 100644 index 0000000000..e7e1014d92 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testEdgesTableOppositeForceUndirected_Merged_edges.csv @@ -0,0 +1,2 @@ +Source,Target,Type,Label,Weight +loja,postalecu911,Undirected,,2 \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testEdgesTableRepeatedWithIds_edges.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testEdgesTableRepeatedWithIds_edges.csv new file mode 100644 index 0000000000..b0a41d203d --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testEdgesTableRepeatedWithIds_edges.csv @@ -0,0 +1,4 @@ +Source,Target,Type,Label,Weight +1,2,Directed,,1 +3,4,Directed,,2 +2,3,Directed,,2 \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testEdgesTableRepeatedWithoutIds_Merge_Disabled_edges.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testEdgesTableRepeatedWithoutIds_Merge_Disabled_edges.csv new file mode 100644 index 0000000000..276548cf5e --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testEdgesTableRepeatedWithoutIds_Merge_Disabled_edges.csv @@ -0,0 +1,6 @@ +Source,Target,Type,Label,Weight +1,2,Directed,,1 +3,4,Directed,,2 +1,2,Directed,,5 +2,3,Directed,,2 +1,2,Directed,,1.5 \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testEdgesTableRepeatedWithoutIds_Merged_edges.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testEdgesTableRepeatedWithoutIds_Merged_edges.csv new file mode 100644 index 0000000000..2078a57165 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testEdgesTableRepeatedWithoutIds_Merged_edges.csv @@ -0,0 +1,4 @@ +Source,Target,Type,Label,Weight +1,2,Directed,,7.5 +3,4,Directed,,2 +2,3,Directed,,2 \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testEdgesTableTypesTest_edges.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testEdgesTableTypesTest_edges.csv new file mode 100644 index 0000000000..3e9f51abcd --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testEdgesTableTypesTest_edges.csv @@ -0,0 +1,3 @@ +Source,Target,Type,Kind,Id,Label,Weight +1,2,Directed,8,1,1,2 +2,1,Undirected,1,2,2.0,2 \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testEdgesTableWithTimeset_Interval_edges.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testEdgesTableWithTimeset_Interval_edges.csv new file mode 100644 index 0000000000..30c0cbf1df --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testEdgesTableWithTimeset_Interval_edges.csv @@ -0,0 +1,4 @@ +Source,Target,Type,Label,timeset,Weight +Fred,Alice,Directed,,"<[2016-02-03, 2016-02-04]; [2016-02-05, 2016-02-08]>",2 +Alice,Fred,Directed,,"<[2016-03-04, Infinity]>",1 +Dirk,Fred,Directed,,"<[-Infinity, 2016-02-04]; [2016-02-04, 2016-02-26]>",2 \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testEdgesTableWithTimeset_Timestamp_edges.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testEdgesTableWithTimeset_Timestamp_edges.csv new file mode 100644 index 0000000000..746dc8cf40 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testEdgesTableWithTimeset_Timestamp_edges.csv @@ -0,0 +1,4 @@ +Source,Target,Type,Label,timeset,Weight +Fred,Alice,Directed,,"<[2016-02-03, 2016-02-05]>",2 +Alice,Fred,Directed,,<[2016-03-04]>,1 +Dirk,Fred,Directed,,"<[2016-02-04, 2016-02-05]>",2 \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testMatrix_CSV_edges.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testMatrix_CSV_edges.csv new file mode 100644 index 0000000000..6bbe45ee39 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testMatrix_CSV_edges.csv @@ -0,0 +1,7 @@ +Source,Target,Type,Label,Weight +A,B,Directed,,1 +A,D,Directed,,2 +B,A,Directed,,1 +C,C,Directed,,1 +D,B,Directed,,3.5 +D,D,Directed,,4.2 \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testMatrix_Excel_edges.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testMatrix_Excel_edges.csv new file mode 100644 index 0000000000..4a265ce10b --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testMatrix_Excel_edges.csv @@ -0,0 +1,7 @@ +Source,Target,Type,Label,Weight +A,B,Directed,,1 +A,D,Directed,,1 +B,A,Directed,,1 +C,C,Directed,,1 +D,B,Directed,,2.8 +D,D,Directed,,1.2 \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testNodesTableTypesTest_nodes.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testNodesTableTypesTest_nodes.csv new file mode 100644 index 0000000000..ad9f4fbbd7 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testNodesTableTypesTest_nodes.csv @@ -0,0 +1,6 @@ +Id,Label,timeset,int,long,double,boolean,string,intervallongmap,bigint +1,1,"<[1.0, 5.0]; [10.0, 10.5]; [11.0, 16.0]>",6,77,1,false,ab,"<[1.0, 2.0, 1]; [2.0, 3.0, 2]>",123456789123456789123456789123456789123456789123456789 +2,,"<[1.0, 5.0]; [10.0, 10.5]; [11.0, 16.0]>",77,77,2,true,cd,"<[1.0, 2.0, 1234872492744446]>",2 +3,,,,,,,,, +4,,,,,,,,, +5,5,"<[1.0, 5.0]; [10.0, 10.5]; [11.0, 16.0]>",88888,8889848888888888,4.6,true,ef,"<[-1.0, 5.0, 0]>",3 \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testRepeatedHeaders_nodes.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testRepeatedHeaders_nodes.csv new file mode 100644 index 0000000000..d23e7ea01f --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testRepeatedHeaders_nodes.csv @@ -0,0 +1,6 @@ +Id,Label,string +1,,a +2,,b +3,, +4,, +5,,c \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testUTF8CharsWithBOM_nodes.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testUTF8CharsWithBOM_nodes.csv new file mode 100644 index 0000000000..a423f1a9da --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testUTF8CharsWithBOM_nodes.csv @@ -0,0 +1,3 @@ +Id,Label,timeset,utf8 +1,uno,"<[1.0, 5.0]; [10.0, 10.5]; [11.0, 16.0]>",ζΌ’θͺž +2,dos,,blabla diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testUTF8Chars_nodes.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testUTF8Chars_nodes.csv new file mode 100644 index 0000000000..a423f1a9da --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/expected/testUTF8Chars_nodes.csv @@ -0,0 +1,3 @@ +Id,Label,timeset,utf8 +1,uno,"<[1.0, 5.0]; [10.0, 10.5]; [11.0, 16.0]>",ζΌ’θͺž +2,dos,,blabla diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/matrix.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/matrix.csv new file mode 100644 index 0000000000..3749ca1433 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/matrix.csv @@ -0,0 +1,6 @@ + ,A,B,C,D,E +A,0,1,0,2,0 +B,1,0,0,0,0 +C,0,0,1,0,0 +D,0,3.5, 0, 4.2 ,0 +E,0,0,0, 0,0 \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/matrix.xlsx b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/matrix.xlsx new file mode 100644 index 0000000000..b6d1ee1e7d Binary files /dev/null and b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/matrix.xlsx differ diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/nodes_table_types_test.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/nodes_table_types_test.csv new file mode 100644 index 0000000000..5b54ce96bd --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/nodes_table_types_test.csv @@ -0,0 +1,10 @@ + +id,label,int,long,double,boolean,timeset,string,intervallongmap,bigint +1,1,6,77,1,false,"[1,5]; [10, 10.5]; [11, 16]",ab,"<[1, 2, 1]; [2, 3, 2]>",123456789123456789123456789123456789123456789123456789 + +2,,77,77,2,true,"[1,5]; [10, 10.5]; [11, 16]",cd,"[1, 2, 1234872492744446];",2 + + +3,,,,,,,,, +4, , , , , , , , , +5,5,88888,8889848888888888,4.6,TRUE,"[1,5]; [10, 10.5]; [11, 16]",ef,"[-1,5,0]",3 diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/repeated_headers.xls b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/repeated_headers.xls new file mode 100644 index 0000000000..7a097104b7 Binary files /dev/null and b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/repeated_headers.xls differ diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/test_utf8_chars.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/test_utf8_chars.csv new file mode 100644 index 0000000000..2818069ca0 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/test_utf8_chars.csv @@ -0,0 +1,5 @@ +id,label,timeset,utf8 +1,uno,"[1,5]; [10, 10.5]; [11, 16];",ζΌ’θͺž +2,dos,,blabla +2,dos,,bla +,, \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/test_utf8_chars_with_bom.csv b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/test_utf8_chars_with_bom.csv new file mode 100644 index 0000000000..a40b967494 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/spreadsheet/test_utf8_chars_with_bom.csv @@ -0,0 +1,5 @@ +ο»Ώid,label,timeset,utf8 +1,uno,"[1,5]; [10, 10.5]; [11, 16];",ζΌ’θͺž +2,dos,,blabla +2,dos,,bla +,, \ No newline at end of file diff --git a/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/withdesc.graphml b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/withdesc.graphml new file mode 100644 index 0000000000..fc8fb30fb4 --- /dev/null +++ b/modules/ImportPlugin/src/test/resources/org/gephi/io/importer/plugin/file/withdesc.graphml @@ -0,0 +1,17 @@ + + + + + Node Zero + + + + + + Edge Zero + + + \ No newline at end of file diff --git a/modules/ImportPluginUI/pom.xml b/modules/ImportPluginUI/pom.xml index 49acf2e70a..d1e9274c1e 100644 --- a/modules/ImportPluginUI/pom.xml +++ b/modules/ImportPluginUI/pom.xml @@ -4,13 +4,12 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. - org.gephi import-plugin-ui - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm ImportPluginUI @@ -20,6 +19,10 @@ ${project.groupId} db-drivers + + ${project.groupId} + graph-api + ${project.groupId} io-importer-api @@ -38,7 +41,11 @@ ${project.groupId} - lib.validation + utils + + + ${project.groupId} + desktop-icons org.netbeans.api @@ -48,6 +55,10 @@ org.netbeans.api org-openide-util + + org.netbeans.api + org-openide-util-ui + org.netbeans.api org-openide-dialogs @@ -61,7 +72,7 @@ - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/EdgeListDatabaseImporterUI.java b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/EdgeListDatabaseImporterUI.java index 191920535c..1013d47903 100644 --- a/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/EdgeListDatabaseImporterUI.java +++ b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/EdgeListDatabaseImporterUI.java @@ -38,7 +38,8 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.ui.importer.plugin; import javax.swing.JPanel; @@ -54,27 +55,26 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = ImporterUI.class) public class EdgeListDatabaseImporterUI implements ImporterUI { private EdgeListPanel panel; - private DatabaseImporter importer; + private DatabaseImporter[] importers; @Override - public void setup(Importer importer) { - this.importer = (DatabaseImporter) importer; + public void setup(Importer[] importers) { + this.importers = (DatabaseImporter[]) importers; if (panel == null) { panel = new EdgeListPanel(); - } + } //Driver Combo SQLDriver[] driverArray = new SQLDriver[0]; driverArray = Lookup.getDefault().lookupAll(SQLDriver.class).toArray(driverArray); panel.setSQLDrivers(driverArray); - + panel.setup(); } @@ -90,10 +90,12 @@ public JPanel getPanel() { public void unsetup(boolean update) { if (update) { Database database = panel.getSelectedDatabase(); - importer.setDatabase(database); + for (DatabaseImporter importer : importers) { + importer.setDatabase(database); + } } panel = null; - importer = null; + importers = null; } @Override diff --git a/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/EdgeListDatabaseManager.java b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/EdgeListDatabaseManager.java index ae89ee2587..7c8dd4d053 100644 --- a/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/EdgeListDatabaseManager.java +++ b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/EdgeListDatabaseManager.java @@ -39,30 +39,29 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.importer.plugin; -import java.io.EOFException; import java.io.IOException; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import org.gephi.io.importer.api.Database; import org.gephi.io.importer.plugin.database.EdgeListDatabaseImpl; -import org.openide.filesystems.FileObject; import org.openide.filesystems.FileLock; +import org.openide.filesystems.FileObject; import org.openide.filesystems.FileUtil; +import org.openide.util.Exceptions; /** - * * @author Andre Panisson */ public class EdgeListDatabaseManager { private FileObject databaseConfigurations; - private List edgeListDatabases = new ArrayList(); + private List edgeListDatabases = new ArrayList<>(); // private Map nameToInstance = new HashMap(); public EdgeListDatabaseManager() { @@ -74,7 +73,7 @@ public List getEdgeListDatabases() { } public List getNames() { - List names = new ArrayList(); + List names = new ArrayList<>(); for (Database db : edgeListDatabases) { names.add(db.getName()); } @@ -95,8 +94,8 @@ public void persist() { private void load() { if (databaseConfigurations == null) { - databaseConfigurations = - FileUtil.getConfigFile("EdgeListDatabase"); + databaseConfigurations + = FileUtil.getConfigFile("EdgeListDatabase"); } if (databaseConfigurations != null) { @@ -109,15 +108,8 @@ private void load() { if (unserialized != null) { edgeListDatabases = unserialized; } - } catch (java.io.InvalidClassException e) { - } catch (EOFException eofe) { - // Empty configuration: do nothing - } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } catch (ClassNotFoundException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + } catch (Exception e) { + Exceptions.printStackTrace(e); } finally { if (is != null) { try { @@ -144,8 +136,7 @@ private void doPersist() { ois = new ObjectOutputStream(databaseConfigurations.getOutputStream(lock)); ois.writeObject(edgeListDatabases); } catch (IOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); + Exceptions.printStackTrace(e); } finally { if (ois != null) { try { diff --git a/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/EdgeListPanel.form b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/EdgeListPanel.form index 4d33584197..a97cc6a236 100644 --- a/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/EdgeListPanel.form +++ b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/EdgeListPanel.form @@ -1,4 +1,4 @@ - + @@ -16,7 +16,7 @@ - + @@ -37,20 +37,20 @@ - + - - - - - - + + + + + + - + - + @@ -68,8 +68,8 @@ - - + + @@ -259,8 +259,8 @@ - - + + @@ -292,8 +292,8 @@ - - + + diff --git a/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/EdgeListPanel.java b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/EdgeListPanel.java index 032ca887b8..6ddcd4145d 100644 --- a/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/EdgeListPanel.java +++ b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/EdgeListPanel.java @@ -39,8 +39,10 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.importer.plugin; +import java.awt.Dimension; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; @@ -49,9 +51,8 @@ Development and Distribution License("CDDL") (collectively, the import java.sql.Connection; import java.sql.SQLException; import java.util.Collection; - +import java.util.logging.Logger; import javax.swing.DefaultComboBoxModel; - import javax.swing.JFileChooser; import javax.swing.SwingUtilities; import org.gephi.io.database.drivers.SQLDriver; @@ -61,36 +62,71 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.ui.utils.DialogFileFilter; import org.netbeans.validation.api.Problems; import org.netbeans.validation.api.Validator; -import org.netbeans.validation.api.builtin.Validators; +import org.netbeans.validation.api.ValidatorUtils; +import org.netbeans.validation.api.builtin.stringvalidation.StringValidators; import org.netbeans.validation.api.ui.ValidationGroup; -import org.netbeans.validation.api.ui.ValidationPanel; +import org.netbeans.validation.api.ui.swing.ValidationPanel; import org.openide.DialogDisplayer; import org.openide.NotifyDescriptor; +import org.openide.util.ImageUtilities; import org.openide.util.NbBundle; import org.openide.util.NbPreferences; /** - * * @author Mathieu Bastian */ public class EdgeListPanel extends javax.swing.JPanel { - private EdgeListDatabaseManager databaseManager; + static ValidationGroup group; + private static final String NEW_CONFIGURATION_NAME + = NbBundle.getMessage(EdgeListPanel.class, + "EdgeListPanel.template.name"); private final String LAST_PATH = "EdgeListPanel_Sqlite_Last_Path"; - private static String NEW_CONFIGURATION_NAME = - NbBundle.getMessage(EdgeListPanel.class, - "EdgeListPanel.template.name"); + private final EdgeListDatabaseManager databaseManager; + private boolean inited = false; - /** Creates new form EdgeListPanel */ + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton browseButton; + private javax.swing.JLabel configNameLabel; + private javax.swing.JTextField configNameTextField; + private javax.swing.JComboBox configurationCombo; + private javax.swing.JLabel configurationLabel; + private javax.swing.JLabel dbLabel; + protected javax.swing.JTextField dbTextField; + private javax.swing.JComboBox driverComboBox; + private javax.swing.JLabel driverLabel; + private javax.swing.JLabel edgeQueryLabel; + protected javax.swing.JTextField edgeQueryTextField; + private javax.swing.JLabel hostLabel; + protected javax.swing.JTextField hostTextField; + private org.jdesktop.swingx.JXHeader jXHeader1; + private javax.swing.JLabel nodeQueryLabel; + protected javax.swing.JTextField nodeQueryTextField; + private javax.swing.JLabel portLabel; + protected javax.swing.JTextField portTextField; + private javax.swing.JLabel pwdLabel; + protected javax.swing.JPasswordField pwdTextField; + private javax.swing.JButton removeConfigurationButton; + private javax.swing.JButton testConnection; + private javax.swing.JLabel userLabel; + protected javax.swing.JTextField userTextField; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form EdgeListPanel + */ public EdgeListPanel() { databaseManager = new EdgeListDatabaseManager(); initComponents(); + jXHeader1.setPreferredSize(new Dimension(100, 100)); driverComboBox.addItemListener(new ItemListener() { @Override - public void itemStateChanged(ItemEvent ie) { - initDriverType((SQLDriver) ie.getItem()); + public void itemStateChanged(ItemEvent e) { + if (e.getStateChange() == ItemEvent.SELECTED) { + initDriverType((SQLDriver) e.getItem()); + } } }); @@ -102,8 +138,10 @@ public void actionPerformed(ActionEvent ae) { String lastPath = NbPreferences.forModule(EdgeListPanel.class).get(LAST_PATH, ""); final JFileChooser chooser = new JFileChooser(lastPath); chooser.setAcceptAllFileFilterUsed(false); - chooser.setDialogTitle(NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.sqliteFileChooser.title")); - DialogFileFilter dialogFileFilter = new DialogFileFilter(NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.sqliteFileChooser.filefilter")); + chooser + .setDialogTitle(NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.sqliteFileChooser.title")); + DialogFileFilter dialogFileFilter = new DialogFileFilter( + NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.sqliteFileChooser.filefilter")); dialogFileFilter.addExtension("sqlite"); dialogFileFilter.addExtension("db"); chooser.addChoosableFileFilter(dialogFileFilter); @@ -120,7 +158,6 @@ public void actionPerformed(ActionEvent ae) { } }); } - static ValidationGroup group; public static ValidationPanel createValidationPanel(EdgeListPanel innerPanel) { ValidationPanel validationPanel = new ValidationPanel(); @@ -132,7 +169,7 @@ public static ValidationPanel createValidationPanel(EdgeListPanel innerPanel) { group = validationPanel.getValidationGroup(); //Validators - group.add(innerPanel.configNameTextField, Validators.REQUIRE_NON_EMPTY_STRING); + group.add(innerPanel.configNameTextField, StringValidators.REQUIRE_NON_EMPTY_STRING); group.add(innerPanel.hostTextField, new HostOrFileValidator(innerPanel)); group.add(innerPanel.dbTextField, new NotEmptyValidator(innerPanel)); group.add(innerPanel.portTextField, new PortValidator(innerPanel)); @@ -141,6 +178,10 @@ public static ValidationPanel createValidationPanel(EdgeListPanel innerPanel) { return validationPanel; } + private static boolean isSqlite(EdgeListPanel panel) { + return panel.getSelectedSQLDriver().getPrefix().equals("sqlite"); + } + private void initDriverType(final SQLDriver driver) { SwingUtilities.invokeLater(new Runnable() { @@ -173,14 +214,14 @@ public void run() { pwdTextField.setEnabled(true); browseButton.setVisible(false); } - group.validateAll(); +// group.performValidation(); } }); } public Database getSelectedDatabase() { - ConfigurationComboModel model = - (ConfigurationComboModel) configurationCombo.getModel(); + ConfigurationComboModel model + = (ConfigurationComboModel) configurationCombo.getModel(); ConfigurationComboItem item = (ConfigurationComboItem) model.getSelectedItem(); populateEdgeListDatabase(item.db); @@ -206,13 +247,11 @@ public void setSQLDrivers(SQLDriver[] drivers) { public void setup() { configurationCombo.setModel(new EdgeListPanel.ConfigurationComboModel()); - ConfigurationComboModel model = - (ConfigurationComboModel) configurationCombo.getModel(); - if (model.getSelectedItem().equals(model.templateConfiguration)) { - this.removeConfigurationButton.setEnabled(false); - } else { - this.removeConfigurationButton.setEnabled(true); - } + ConfigurationComboModel model + = (ConfigurationComboModel) configurationCombo.getModel(); + this.removeConfigurationButton.setEnabled(!model.getSelectedItem().equals(model.templateConfiguration)); + inited = true; + group.performValidation(); } private void populateForm(EdgeListDatabaseImpl db) { @@ -235,7 +274,7 @@ private void populateEdgeListDatabase(EdgeListDatabaseImpl db) { db.setHost(this.hostTextField.getText()); db.setPasswd(new String(this.pwdTextField.getPassword())); db.setPort(!portTextField.getText().isEmpty() - ? Integer.parseInt(portTextField.getText()) : 0); + ? Integer.parseInt(portTextField.getText()) : 0); db.setUsername(this.userTextField.getText()); db.setSQLDriver(this.getSelectedSQLDriver()); db.setNodeQuery(this.nodeQueryTextField.getText()); @@ -244,10 +283,10 @@ private void populateEdgeListDatabase(EdgeListDatabaseImpl db) { db.setEdgeAttributesQuery(""); } - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents @@ -285,38 +324,50 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { } }); - configurationLabel.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.configurationLabel.text")); // NOI18N + configurationLabel.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, + "EdgeListPanel.configurationLabel.text")); // NOI18N - hostLabel.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.hostLabel.text")); // NOI18N + hostLabel.setText( + org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.hostLabel.text")); // NOI18N - portLabel.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.portLabel.text")); // NOI18N + portLabel.setText( + org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.portLabel.text")); // NOI18N hostTextField.setName("host"); // NOI18N portTextField.setName("port"); // NOI18N - userLabel.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.userLabel.text")); // NOI18N + userLabel.setText( + org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.userLabel.text")); // NOI18N - dbLabel.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.dbLabel.text")); // NOI18N + dbLabel.setText( + org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.dbLabel.text")); // NOI18N - pwdLabel.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.pwdLabel.text")); // NOI18N + pwdLabel.setText( + org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.pwdLabel.text")); // NOI18N dbTextField.setName("database"); // NOI18N userTextField.setName("user name"); // NOI18N - driverLabel.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.driverLabel.text")); // NOI18N + driverLabel.setText( + org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.driverLabel.text")); // NOI18N - nodeQueryLabel.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.nodeQueryLabel.text")); // NOI18N + nodeQueryLabel.setText( + org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.nodeQueryLabel.text")); // NOI18N - nodeQueryTextField.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.nodeQueryTextField.text")); // NOI18N + nodeQueryTextField.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, + "EdgeListPanel.nodeQueryTextField.text")); // NOI18N - edgeQueryLabel.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.edgeQueryLabel.text")); // NOI18N + edgeQueryLabel.setText( + org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.edgeQueryLabel.text")); // NOI18N - edgeQueryTextField.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.edgeQueryTextField.text")); // NOI18N + edgeQueryTextField.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, + "EdgeListPanel.edgeQueryTextField.text")); // NOI18N - testConnection.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/ui/importer/plugin/resources/test_connection.png"))); // NOI18N - testConnection.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.testConnection.text")); // NOI18N + testConnection.setIcon(ImageUtilities.loadImageIcon("ImportPluginUI/test_connection.svg", false)); + testConnection.setText( + org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.testConnection.text")); // NOI18N testConnection.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { testConnectionActionPerformed(evt); @@ -327,10 +378,12 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { configNameTextField.setName("configName"); // NOI18N - configNameLabel.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.configNameLabel.text")); // NOI18N + configNameLabel.setText( + org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.configNameLabel.text")); // NOI18N - removeConfigurationButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/ui/importer/plugin/resources/remove_config.png"))); // NOI18N - removeConfigurationButton.setToolTipText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.removeConfigurationButton.toolTipText")); // NOI18N + removeConfigurationButton.setIcon(ImageUtilities.loadImageIcon("ImportPluginUI/remove_config.svg", false)); + removeConfigurationButton.setToolTipText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, + "EdgeListPanel.removeConfigurationButton.toolTipText")); // NOI18N removeConfigurationButton.setMargin(new java.awt.Insets(0, 4, 0, 2)); removeConfigurationButton.setPreferredSize(new java.awt.Dimension(65, 29)); removeConfigurationButton.addActionListener(new java.awt.event.ActionListener() { @@ -339,105 +392,128 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { } }); - jXHeader1.setDescription(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.header")); // NOI18N - jXHeader1.setTitle(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.jXHeader1.title")); // NOI18N + jXHeader1.setDescription( + org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.header")); // NOI18N + jXHeader1.setTitle( + org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.jXHeader1.title")); // NOI18N - browseButton.setText(org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.browseButton.text")); // NOI18N + browseButton.setText( + org.openide.util.NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.browseButton.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jXHeader1, javax.swing.GroupLayout.DEFAULT_SIZE, 655, Short.MAX_VALUE) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(testConnection) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(userLabel) - .addComponent(pwdLabel) - .addComponent(driverLabel) - .addComponent(hostLabel) - .addComponent(portLabel) - .addComponent(dbLabel) - .addComponent(nodeQueryLabel) - .addComponent(edgeQueryLabel) - .addComponent(configNameLabel) - .addComponent(configurationLabel)) - .addGap(36, 36, 36) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addComponent(configurationCombo, 0, 423, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(removeConfigurationButton, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(configNameTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 448, Short.MAX_VALUE) - .addComponent(edgeQueryTextField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 448, Short.MAX_VALUE) - .addComponent(nodeQueryTextField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 448, Short.MAX_VALUE) - .addComponent(portTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 448, Short.MAX_VALUE) - .addComponent(dbTextField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 448, Short.MAX_VALUE) - .addComponent(userTextField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 448, Short.MAX_VALUE) - .addComponent(driverComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 98, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(pwdTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 448, Short.MAX_VALUE) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addComponent(hostTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 351, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(browseButton))))) - .addContainerGap()) + .addComponent(jXHeader1, javax.swing.GroupLayout.DEFAULT_SIZE, 663, Short.MAX_VALUE) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(testConnection) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(userLabel) + .addComponent(pwdLabel) + .addComponent(driverLabel) + .addComponent(hostLabel) + .addComponent(portLabel) + .addComponent(dbLabel) + .addComponent(nodeQueryLabel) + .addComponent(edgeQueryLabel) + .addComponent(configNameLabel) + .addComponent(configurationLabel)) + .addGap(36, 36, 36) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addComponent(configurationCombo, 0, 470, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(removeConfigurationButton, javax.swing.GroupLayout.PREFERRED_SIZE, 21, + javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(configNameTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 497, + Short.MAX_VALUE) + .addComponent(edgeQueryTextField, javax.swing.GroupLayout.Alignment.TRAILING, + javax.swing.GroupLayout.DEFAULT_SIZE, 497, Short.MAX_VALUE) + .addComponent(nodeQueryTextField, javax.swing.GroupLayout.Alignment.TRAILING, + javax.swing.GroupLayout.DEFAULT_SIZE, 497, Short.MAX_VALUE) + .addComponent(portTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 497, Short.MAX_VALUE) + .addComponent(dbTextField, javax.swing.GroupLayout.Alignment.TRAILING, + javax.swing.GroupLayout.DEFAULT_SIZE, 497, Short.MAX_VALUE) + .addComponent(userTextField, javax.swing.GroupLayout.Alignment.TRAILING, + javax.swing.GroupLayout.DEFAULT_SIZE, 497, Short.MAX_VALUE) + .addComponent(driverComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 98, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(pwdTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 497, Short.MAX_VALUE) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addComponent(hostTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 417, + Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(browseButton))))) + .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(jXHeader1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(19, 19, 19) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(removeConfigurationButton, 0, 0, Short.MAX_VALUE) - .addComponent(configurationCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 24, Short.MAX_VALUE) - .addComponent(configurationLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(19, 19, 19) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(configNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(configNameLabel)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(driverLabel) - .addComponent(driverComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(9, 9, 9) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(hostLabel) - .addComponent(hostTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(browseButton)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(portTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(portLabel)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(dbLabel) - .addComponent(dbTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(userLabel) - .addComponent(userTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(pwdLabel) - .addComponent(pwdTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(nodeQueryLabel) - .addComponent(nodeQueryTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(edgeQueryLabel) - .addComponent(edgeQueryTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(testConnection) - .addContainerGap(53, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addComponent(jXHeader1, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(19, 19, 19) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(removeConfigurationButton, 0, 0, Short.MAX_VALUE) + .addComponent(configurationCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) + .addComponent(configurationLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 25, + javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(19, 19, 19) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(configNameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(configNameLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(driverLabel) + .addComponent(driverComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(9, 9, 9) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(hostLabel) + .addComponent(hostTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(browseButton)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(portTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(portLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(dbLabel) + .addComponent(dbTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(userLabel) + .addComponent(userTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(pwdLabel) + .addComponent(pwdTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(nodeQueryLabel) + .addComponent(nodeQueryTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(edgeQueryLabel) + .addComponent(edgeQueryTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(testConnection) + .addContainerGap(53, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - private void testConnectionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_testConnectionActionPerformed + private void testConnectionActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_testConnectionActionPerformed if (!portTextField.getText().isEmpty()) { try { Integer.parseInt(portTextField.getText()); @@ -447,7 +523,9 @@ private void testConnectionActionPerformed(java.awt.event.ActionEvent evt) {//GE } Connection conn = null; try { - conn = getSelectedSQLDriver().getConnection(SQLUtils.getUrl(getSelectedSQLDriver(), hostTextField.getText(), (portTextField.getText().isEmpty() ? 0 : Integer.parseInt(portTextField.getText())), dbTextField.getText()), userTextField.getText(), new String(pwdTextField.getPassword())); + conn = getSelectedSQLDriver().getConnection(SQLUtils.getUrl(getSelectedSQLDriver(), hostTextField.getText(), + (portTextField.getText().isEmpty() ? 0 : Integer.parseInt(portTextField.getText())), + dbTextField.getText()), userTextField.getText(), new String(pwdTextField.getPassword())); String message = NbBundle.getMessage(EdgeListPanel.class, "EdgeListPanel.alert.connection_successful"); NotifyDescriptor.Message e = new NotifyDescriptor.Message(message, NotifyDescriptor.INFORMATION_MESSAGE); DialogDisplayer.getDefault().notifyLater(e); @@ -458,15 +536,18 @@ private void testConnectionActionPerformed(java.awt.event.ActionEvent evt) {//GE if (conn != null) { try { conn.close(); - System.out.println("Database connection terminated"); - } catch (Exception e) { /* ignore close errors */ } + Logger.getLogger("").info("Database connection terminated"); + } catch (Exception e) { + /* ignore close errors */ + } } } }//GEN-LAST:event_testConnectionActionPerformed - private void removeConfigurationButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeConfigurationButtonActionPerformed - ConfigurationComboModel model = - (ConfigurationComboModel) configurationCombo.getModel(); + private void removeConfigurationButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_removeConfigurationButtonActionPerformed + ConfigurationComboModel model + = (ConfigurationComboModel) configurationCombo.getModel(); ConfigurationComboItem item = (ConfigurationComboItem) model.getSelectedItem(); if (databaseManager.removeDatabase(item.db)) { @@ -474,60 +555,104 @@ private void removeConfigurationButtonActionPerformed(java.awt.event.ActionEvent model.removeElement(item); databaseManager.persist(); String message = NbBundle.getMessage(EdgeListPanel.class, - "EdgeListPanel.alert.configuration_removed", item.toString()); + "EdgeListPanel.alert.configuration_removed", item.toString()); NotifyDescriptor.Message e = new NotifyDescriptor.Message( - message, NotifyDescriptor.INFORMATION_MESSAGE); + message, NotifyDescriptor.INFORMATION_MESSAGE); DialogDisplayer.getDefault().notifyLater(e); model.setSelectedItem(model.getElementAt(0)); } else { String message = NbBundle.getMessage(EdgeListPanel.class, - "EdgeListPanel.alert.configuration_unsaved"); + "EdgeListPanel.alert.configuration_unsaved"); NotifyDescriptor.Message e = new NotifyDescriptor.Message( - message, NotifyDescriptor.ERROR_MESSAGE); + message, NotifyDescriptor.ERROR_MESSAGE); DialogDisplayer.getDefault().notifyLater(e); } }//GEN-LAST:event_removeConfigurationButtonActionPerformed - private void configurationComboActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_configurationComboActionPerformed - ConfigurationComboModel model = - (ConfigurationComboModel) configurationCombo.getModel(); + private void configurationComboActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_configurationComboActionPerformed + ConfigurationComboModel model + = (ConfigurationComboModel) configurationCombo.getModel(); ConfigurationComboItem item = (ConfigurationComboItem) model.getSelectedItem(); - if (item.equals(model.templateConfiguration)) { - this.removeConfigurationButton.setEnabled(false); - } else { - this.removeConfigurationButton.setEnabled(true); - } + this.removeConfigurationButton.setEnabled(!item.equals(model.templateConfiguration)); }//GEN-LAST:event_configurationComboActionPerformed - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton browseButton; - private javax.swing.JLabel configNameLabel; - private javax.swing.JTextField configNameTextField; - private javax.swing.JComboBox configurationCombo; - private javax.swing.JLabel configurationLabel; - private javax.swing.JLabel dbLabel; - protected javax.swing.JTextField dbTextField; - private javax.swing.JComboBox driverComboBox; - private javax.swing.JLabel driverLabel; - private javax.swing.JLabel edgeQueryLabel; - protected javax.swing.JTextField edgeQueryTextField; - private javax.swing.JLabel hostLabel; - protected javax.swing.JTextField hostTextField; - private org.jdesktop.swingx.JXHeader jXHeader1; - private javax.swing.JLabel nodeQueryLabel; - protected javax.swing.JTextField nodeQueryTextField; - private javax.swing.JLabel portLabel; - protected javax.swing.JTextField portTextField; - private javax.swing.JLabel pwdLabel; - protected javax.swing.JPasswordField pwdTextField; - private javax.swing.JButton removeConfigurationButton; - private javax.swing.JButton testConnection; - private javax.swing.JLabel userLabel; - protected javax.swing.JTextField userTextField; - // End of variables declaration//GEN-END:variables - public void initEvents() { + private static class HostOrFileValidator implements Validator { + + private final EdgeListPanel panel; + + public HostOrFileValidator(EdgeListPanel panel) { + this.panel = panel; + } + + @Override + public void validate(Problems problems, String compName, String model) { + if (!panel.inited) { + return; + } + if (isSqlite(panel)) { + StringValidators.FILE_MUST_BE_FILE.validate(problems, compName, model); + } else { + StringValidators.REQUIRE_NON_EMPTY_STRING.validate(problems, compName, model); + } + } + + @Override + public Class modelType() { + return String.class; + } + } + + private static class NotEmptyValidator implements Validator { + + private final EdgeListPanel panel; + + public NotEmptyValidator(EdgeListPanel panel) { + this.panel = panel; + } + + @Override + public void validate(Problems problems, String compName, String model) { + if (!panel.inited) { + return; + } + if (!isSqlite(panel)) { + StringValidators.REQUIRE_NON_EMPTY_STRING.validate(problems, compName, model); + } + } + + @Override + public Class modelType() { + return String.class; + } + } + + private static class PortValidator implements Validator { + + private final EdgeListPanel panel; + + public PortValidator(EdgeListPanel panel) { + this.panel = panel; + } + + @Override + public void validate(Problems problems, String compName, String model) { + if (!panel.inited) { + return; + } + if (!isSqlite(panel)) { + ValidatorUtils.merge(StringValidators.REQUIRE_NON_EMPTY_STRING, + StringValidators.REQUIRE_VALID_INTEGER, + StringValidators.numberRange(1, 65535)).validate(problems, compName, model); + } + } + + @Override + public Class modelType() { + return String.class; + } } private class ConfigurationComboModel extends DefaultComboBoxModel { @@ -594,72 +719,4 @@ public String toString() { return name; } } - - private static class HostOrFileValidator implements Validator { - - private EdgeListPanel panel; - - public HostOrFileValidator(EdgeListPanel panel) { - this.panel = panel; - } - - @Override - public boolean validate(Problems problems, String compName, String model) { - if (isSqlite(panel)) { - return Validators.FILE_MUST_BE_FILE.validate(problems, compName, model); - } else { - return Validators.REQUIRE_NON_EMPTY_STRING.validate(problems, compName, model); - } - } - } - - private static boolean isSqlite(EdgeListPanel panel) { - if (panel.databaseManager.getEdgeListDatabases().size() > 0) { - if (panel.databaseManager.getEdgeListDatabases().get(0).getSQLDriver().getPrefix().equals("sqlite")) { - return true; - } - return false; - } else if (panel.getSelectedSQLDriver().getPrefix().equals("sqlite")) { - return true; - } - return false; - } - - private static class NotEmptyValidator implements Validator { - - private EdgeListPanel panel; - - public NotEmptyValidator(EdgeListPanel panel) { - this.panel = panel; - } - - @Override - public boolean validate(Problems problems, String compName, String model) { - if (isSqlite(panel)) { - return true; - } else { - return Validators.REQUIRE_NON_EMPTY_STRING.validate(problems, compName, model); - } - } - } - - private static class PortValidator implements Validator { - - private EdgeListPanel panel; - - public PortValidator(EdgeListPanel panel) { - this.panel = panel; - } - - @Override - public boolean validate(Problems problems, String compName, String model) { - if (isSqlite(panel)) { - return true; - } else { - return Validators.REQUIRE_NON_EMPTY_STRING.validate(problems, compName, model) - && Validators.REQUIRE_VALID_INTEGER.validate(problems, compName, model) - && Validators.numberRange(1, 65535).validate(problems, compName, model); - } - } - } } diff --git a/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/ImporterVnaUI.java b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/ImporterVnaUI.java index c286a101b0..8bcb6edb7b 100644 --- a/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/ImporterVnaUI.java +++ b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/ImporterVnaUI.java @@ -38,7 +38,8 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.ui.importer.plugin; import java.awt.Dimension; @@ -60,24 +61,24 @@ Development and Distribution License("CDDL") (collectively, the /** * VNA importer UI. + * * @author Vojtech Bardiovsky */ @ServiceProvider(service = ImporterUI.class) public class ImporterVnaUI implements ImporterUI { - private ImporterVNA importer; + private final String MESSAGE_LINEAR = NbBundle.getMessage(getClass(), "ImporterVnaUI.message.linear"); + private final String MESSAGE_SQUARE_ROOT = NbBundle.getMessage(getClass(), "ImporterVnaUI.message.square_root"); + private final String MESSAGE_LOGARITHMIC = NbBundle.getMessage(getClass(), "ImporterVnaUI.message.logarithmic"); + private ImporterVNA[] importers; private JComboBox comboBox; private JTextField textField; private JLabel messageLabel; private JPanel panel; - private final String MESSAGE_LINEAR = NbBundle.getMessage(getClass(), "ImporterVnaUI.message.linear"); - private final String MESSAGE_SQUARE_ROOT = NbBundle.getMessage(getClass(), "ImporterVnaUI.message.square_root"); - private final String MESSAGE_LOGARITHMIC = NbBundle.getMessage(getClass(), "ImporterVnaUI.message.logarithmic"); - @Override - public void setup(Importer importer) { - this.importer = (ImporterVNA) importer; + public void setup(Importer[] importers) { + this.importers = (ImporterVNA[]) importers; } @Override @@ -144,15 +145,19 @@ private void comboBoxSelectionChanged(ActionEvent e) { public void unsetup(boolean update) { if (update) { float coefficient = 1; - if (((EdgeWidthFunction.Function) comboBox.getSelectedItem()).equals(EdgeWidthFunction.Function.LINEAR)) { + if (comboBox.getSelectedItem().equals(EdgeWidthFunction.Function.LINEAR)) { try { coefficient = Float.parseFloat(textField.getText()); - } catch (NumberFormatException e) {} + } catch (NumberFormatException e) { + } + } + for (ImporterVNA importer : importers) { + importer.setEdgeWidthFunction( + new EdgeWidthFunction((EdgeWidthFunction.Function) comboBox.getSelectedItem(), coefficient)); } - importer.setEdgeWidthFunction(new EdgeWidthFunction((EdgeWidthFunction.Function) comboBox.getSelectedItem(), coefficient)); } panel = null; - importer = null; + importers = null; textField = null; messageLabel = null; comboBox = null; diff --git a/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/SpreadsheetImporterCSVUI.java b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/SpreadsheetImporterCSVUI.java new file mode 100644 index 0000000000..c9d38bd242 --- /dev/null +++ b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/SpreadsheetImporterCSVUI.java @@ -0,0 +1,101 @@ +/* +Copyright 2008-2016 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2016 Gephi Consortium. + */ + +package org.gephi.ui.importer.plugin.spreadsheet; + +import javax.swing.JPanel; +import org.gephi.io.importer.plugin.file.spreadsheet.ImporterSpreadsheetCSV; +import org.gephi.io.importer.plugin.file.spreadsheet.ImporterSpreadsheetCSVBuilder; +import org.gephi.io.importer.spi.Importer; +import org.gephi.io.importer.spi.ImporterUI; +import org.gephi.ui.importer.plugin.spreadsheet.wizard.ImportCSVUIWizard; +import org.openide.WizardDescriptor; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +/** + * @author Eduardo Ramos + */ +@ServiceProvider(service = ImporterUI.class) +public class SpreadsheetImporterCSVUI implements ImporterUI, ImporterUI.WithWizard { + + private ImporterSpreadsheetCSV[] importers; + private ImportCSVUIWizard wizard; + + @Override + public void setup(Importer[] importers) { + this.importers = (ImporterSpreadsheetCSV[]) importers; + for (ImporterSpreadsheetCSV importer : this.importers) { + importer.refreshAutoDetections(); + } + } + + @Override + public JPanel getPanel() { + return null; + } + + @Override + public void unsetup(boolean update) { + //NOOP + } + + @Override + public String getDisplayName() { + return NbBundle.getMessage(getClass(), "Spreadsheet.displayName", "CSV"); + } + + public String getIdentifier() { + return ImporterSpreadsheetCSVBuilder.IDENTIFER; + } + + @Override + public boolean isUIForImporter(Importer importer) { + return importer instanceof ImporterSpreadsheetCSV; + } + + @Override + public WizardDescriptor getWizardDescriptor() { + this.wizard = new ImportCSVUIWizard(importers); + return wizard.getDescriptor(); + } +} diff --git a/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/SpreadsheetImporterExcelUI.java b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/SpreadsheetImporterExcelUI.java new file mode 100644 index 0000000000..7d4a1cfb8c --- /dev/null +++ b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/SpreadsheetImporterExcelUI.java @@ -0,0 +1,101 @@ +/* +Copyright 2008-2016 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2016 Gephi Consortium. + */ + +package org.gephi.ui.importer.plugin.spreadsheet; + +import javax.swing.JPanel; +import org.gephi.io.importer.plugin.file.spreadsheet.ImporterSpreadsheetCSVBuilder; +import org.gephi.io.importer.plugin.file.spreadsheet.ImporterSpreadsheetExcel; +import org.gephi.io.importer.spi.Importer; +import org.gephi.io.importer.spi.ImporterUI; +import org.gephi.ui.importer.plugin.spreadsheet.wizard.ImportExcelUIWizard; +import org.openide.WizardDescriptor; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +/** + * @author Eduardo Ramos + */ +@ServiceProvider(service = ImporterUI.class) +public class SpreadsheetImporterExcelUI implements ImporterUI, ImporterUI.WithWizard { + + private ImporterSpreadsheetExcel[] importers; + private ImportExcelUIWizard wizard; + + @Override + public void setup(Importer[] importers) { + this.importers = (ImporterSpreadsheetExcel[]) importers; + for (ImporterSpreadsheetExcel importer : this.importers) { + importer.refreshAutoDetections(); + } + } + + @Override + public JPanel getPanel() { + return null; + } + + @Override + public void unsetup(boolean update) { + //NOOP + } + + @Override + public String getDisplayName() { + return NbBundle.getMessage(getClass(), "Spreadsheet.displayName", "Excel"); + } + + public String getIdentifier() { + return ImporterSpreadsheetCSVBuilder.IDENTIFER; + } + + @Override + public boolean isUIForImporter(Importer importer) { + return importer instanceof ImporterSpreadsheetExcel; + } + + @Override + public WizardDescriptor getWizardDescriptor() { + this.wizard = new ImportExcelUIWizard(importers); + return wizard.getDescriptor(); + } +} diff --git a/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/AbstractWizardVisualPanel1.java b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/AbstractWizardVisualPanel1.java new file mode 100644 index 0000000000..0164bd997d --- /dev/null +++ b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/AbstractWizardVisualPanel1.java @@ -0,0 +1,207 @@ +/* +Copyright 2008-2017 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2017 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2017 Gephi Consortium. + */ + +package org.gephi.ui.importer.plugin.spreadsheet.wizard; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.Map; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.SwingUtilities; +import javax.swing.event.TableModelListener; +import javax.swing.table.TableModel; +import org.gephi.io.importer.plugin.file.spreadsheet.AbstractImporterSpreadsheet; +import org.gephi.io.importer.plugin.file.spreadsheet.process.SpreadsheetGeneralConfiguration; +import org.gephi.io.importer.plugin.file.spreadsheet.sheet.SheetParser; +import org.gephi.io.importer.plugin.file.spreadsheet.sheet.SheetRow; + +/** + * @author Eduardo Ramos + */ +public abstract class AbstractWizardVisualPanel1 extends javax.swing.JPanel { + + protected static final int MAX_ROWS_PREVIEW = 25; + + private final AbstractImporterSpreadsheet importer; + protected int columnCount = 0; + protected boolean hasSourceNodeColumn = false; + protected boolean hasTargetNodeColumn = false; + protected boolean hasRowsMissingSourcesOrTargets = false; + + public AbstractWizardVisualPanel1(AbstractImporterSpreadsheet importer) { + this.importer = importer; + } + + public void refreshPreviewTable() { + try (SheetParser parser = importer.createParser()) { + Map headerMap = parser.getHeaderMap(); + final String[] headers = headerMap.keySet().toArray(new String[0]); + + columnCount = headers.length; + + hasSourceNodeColumn = false; + hasTargetNodeColumn = false; + int sourceColumnIndex = 0; + int targetColumnIndex = 0; + + for (String header : headers) { + if (header.equalsIgnoreCase("source")) { + hasSourceNodeColumn = true; + sourceColumnIndex = headerMap.get(header); + } + if (header.equalsIgnoreCase("target")) { + hasTargetNodeColumn = true; + targetColumnIndex = headerMap.get(header); + } + } + + ArrayList records = new ArrayList<>(); + hasRowsMissingSourcesOrTargets = false; + final SpreadsheetGeneralConfiguration.Mode mode = getSelectedMode(); + int maxRowSize = 0; + String[] currentRecord; + + Iterator iterator = parser.iterator(); + + int count = 0; + while (iterator.hasNext() && count < MAX_ROWS_PREVIEW) { + count++; + + final SheetRow row = iterator.next(); + final int rowSize = row.size(); + + maxRowSize = Math.max(maxRowSize, row.size()); + + currentRecord = new String[rowSize]; + for (int i = 0; i < rowSize; i++) { + currentRecord[i] = row.get(i); + } + + // Search for missing source or target columns for edges table + if (mode == SpreadsheetGeneralConfiguration.Mode.EDGES_TABLE) { + if (rowSize <= sourceColumnIndex || rowSize <= targetColumnIndex || + currentRecord[sourceColumnIndex] == null || currentRecord[targetColumnIndex] == null) { + hasRowsMissingSourcesOrTargets = true; + } + } + + records.add(currentRecord); + } + + final String[] columnNames = headers; + final String[][] values = records.toArray(new String[0][]); + final int rowSize = maxRowSize; + + final JTable table = getPreviewTable(); + table.setModel(new TableModel() { + + @Override + public int getRowCount() { + return values.length; + } + + @Override + public int getColumnCount() { + return rowSize; + } + + @Override + public String getColumnName(int columnIndex) { + if (columnIndex > columnNames.length - 1) { + return null; + } + return columnNames[columnIndex]; + } + + @Override + public Class getColumnClass(int columnIndex) { + return String.class; + } + + @Override + public boolean isCellEditable(int rowIndex, int columnIndex) { + return false; + } + + @Override + public Object getValueAt(int rowIndex, int columnIndex) { + if (values[rowIndex].length > columnIndex) { + return values[rowIndex][columnIndex]; + } else { + return null; + } + } + + @Override + public void setValueAt(Object aValue, int rowIndex, int columnIndex) { + } + + @Override + public void addTableModelListener(TableModelListener l) { + } + + @Override + public void removeTableModelListener(TableModelListener l) { + } + }); + + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + boolean needsHeader = headers.length > 0; + getPreviewTableScrollPane().setColumnHeaderView(needsHeader ? table.getTableHeader() : null); + } + }); + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + + protected abstract JTable getPreviewTable(); + + protected abstract JScrollPane getPreviewTableScrollPane(); + + protected abstract SpreadsheetGeneralConfiguration.Mode getSelectedMode(); + +} diff --git a/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/ImportCSVUIWizard.java b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/ImportCSVUIWizard.java new file mode 100644 index 0000000000..c581426f30 --- /dev/null +++ b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/ImportCSVUIWizard.java @@ -0,0 +1,107 @@ +/* +Copyright 2008-2016 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2016 Gephi Consortium. + */ + +package org.gephi.ui.importer.plugin.spreadsheet.wizard; + +import java.awt.Component; +import javax.swing.JComponent; +import org.gephi.io.importer.plugin.file.spreadsheet.ImporterSpreadsheetCSV; +import org.openide.WizardDescriptor; + +public final class ImportCSVUIWizard { + + private final ImporterSpreadsheetCSV[] importers; + private WizardDescriptor.Panel[] panels; + private WizardDescriptor wizardDescriptor; + + public ImportCSVUIWizard(ImporterSpreadsheetCSV[] importers) { + this.importers = importers; + initDescriptor(); + } + + public WizardDescriptor getDescriptor() { + return wizardDescriptor; + } + + public void initDescriptor() { + buildPanels(); + wizardDescriptor = new WizardDescriptor(panels); + } + + /** + * Initialize panels representing individual wizard's steps and sets various properties for them influencing wizard appearance. + */ + private void buildPanels() { + panels = new WizardDescriptor.Panel[importers.length * 2]; + for (int i = 0; i < importers.length; i++) { + ImporterSpreadsheetCSV importer = importers[i]; + WizardPanel1CSV step1 = new WizardPanel1CSV(importer); + WizardPanel2 step2 = new WizardPanel2(importer); + + panels[i * 2] = step1; + panels[i * 2 + 1] = step2; + } + + String[] steps = new String[panels.length]; + + for (int i = 0; i < panels.length; i++) { + Component c = panels[i].getComponent(); + + steps[i] = c.getName(); + + if (c instanceof JComponent) { // assume Swing components + JComponent jc = (JComponent) c; + // Sets step number of a component + // TODO if using org.openide.dialogs >= 7.8, can use WizardDescriptor.PROP_*: + jc.putClientProperty("WizardPanel_contentSelectedIndex", i); + // Sets steps names for a panel + jc.putClientProperty("WizardPanel_contentData", steps); + // Turn on subtitle creation on each step + jc.putClientProperty("WizardPanel_autoWizardStyle", Boolean.TRUE); + // Show steps on the left side with the image on the background + jc.putClientProperty("WizardPanel_contentDisplayed", Boolean.TRUE); + // Turn on numbering of all steps + jc.putClientProperty("WizardPanel_contentNumbered", Boolean.TRUE); + } + } + } +} diff --git a/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/ImportExcelUIWizard.java b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/ImportExcelUIWizard.java new file mode 100644 index 0000000000..6747ec1396 --- /dev/null +++ b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/ImportExcelUIWizard.java @@ -0,0 +1,108 @@ +/* +Copyright 2008-2016 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2016 Gephi Consortium. + */ + +package org.gephi.ui.importer.plugin.spreadsheet.wizard; + +import java.awt.Component; +import javax.swing.JComponent; +import org.gephi.io.importer.plugin.file.spreadsheet.ImporterSpreadsheetExcel; +import org.openide.WizardDescriptor; + +public final class ImportExcelUIWizard { + + private final ImporterSpreadsheetExcel[] importers; + private WizardDescriptor.Panel[] panels; + private WizardDescriptor wizardDescriptor; + + public ImportExcelUIWizard(ImporterSpreadsheetExcel[] importers) { + this.importers = importers; + initDescriptor(); + } + + public WizardDescriptor getDescriptor() { + return wizardDescriptor; + } + + public void initDescriptor() { + buildPanels(); + wizardDescriptor = new WizardDescriptor(panels); + } + + /** + * Initialize panels representing individual wizard's steps and sets various properties for them influencing wizard appearance. + */ + private void buildPanels() { + panels = new WizardDescriptor.Panel[importers.length * 2]; + for (int i = 0; i < importers.length; i++) { + ImporterSpreadsheetExcel importer = importers[i]; + WizardPanel1Excel step1 = new WizardPanel1Excel(importer); + WizardPanel2 step2 = new WizardPanel2(importer); + + panels[i * 2] = step1; + panels[i * 2 + 1] = step2; + } + + String[] steps = new String[panels.length]; + + for (int i = 0; i < panels.length; i++) { + Component c = panels[i].getComponent(); + + steps[i] = c.getName(); + + if (c instanceof JComponent) { // assume Swing components + JComponent jc = (JComponent) c; + + // Sets step number of a component + // TODO if using org.openide.dialogs >= 7.8, can use WizardDescriptor.PROP_*: + jc.putClientProperty("WizardPanel_contentSelectedIndex", i); + // Sets steps names for a panel + jc.putClientProperty("WizardPanel_contentData", steps); + // Turn on subtitle creation on each step + jc.putClientProperty("WizardPanel_autoWizardStyle", Boolean.TRUE); + // Show steps on the left side with the image on the background + jc.putClientProperty("WizardPanel_contentDisplayed", Boolean.TRUE); + // Turn on numbering of all steps + jc.putClientProperty("WizardPanel_contentNumbered", Boolean.TRUE); + } + } + } +} diff --git a/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/ImportModeWrapper.java b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/ImportModeWrapper.java new file mode 100644 index 0000000000..78f6238b3f --- /dev/null +++ b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/ImportModeWrapper.java @@ -0,0 +1,90 @@ +/* +Copyright 2008-2017 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2017 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2017 Gephi Consortium. + */ + +package org.gephi.ui.importer.plugin.spreadsheet.wizard; + +import java.util.Objects; +import org.gephi.io.importer.plugin.file.spreadsheet.process.SpreadsheetGeneralConfiguration; +import org.openide.util.NbBundle; + +/** + * @author Eduardo Ramos + */ +public class ImportModeWrapper { + + private final SpreadsheetGeneralConfiguration.Mode mode; + + public ImportModeWrapper(SpreadsheetGeneralConfiguration.Mode mode) { + this.mode = mode; + } + + public SpreadsheetGeneralConfiguration.Mode getMode() { + return mode; + } + + @Override + public int hashCode() { + int hash = 7; + hash = 43 * hash + Objects.hashCode(this.mode); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final ImportModeWrapper other = (ImportModeWrapper) obj; + return this.mode == other.mode; + } + + @Override + public String toString() { + return NbBundle.getMessage(ImportModeWrapper.class, "ImportModeWrapper.mode." + mode.name()); + } +} diff --git a/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/WizardPanel1CSV.java b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/WizardPanel1CSV.java new file mode 100644 index 0000000000..4dfbf4a3de --- /dev/null +++ b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/WizardPanel1CSV.java @@ -0,0 +1,134 @@ +/* +Copyright 2008-2016 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2016 Gephi Consortium. + */ + +package org.gephi.ui.importer.plugin.spreadsheet.wizard; + +import java.awt.Component; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import org.gephi.io.importer.plugin.file.spreadsheet.ImporterSpreadsheetCSV; +import org.openide.WizardDescriptor; +import org.openide.util.HelpCtx; + +public class WizardPanel1CSV implements WizardDescriptor.Panel { + + private final ImporterSpreadsheetCSV importer; + private final Set listeners = new HashSet<>(1); // or can use ChangeSupport in NB 6.0 + /** + * The visual component that displays this panel. If you need to access the + * component from this class, just use getComponent(). + */ + private WizardVisualPanel1CSV component; + + public WizardPanel1CSV(ImporterSpreadsheetCSV importer) { + this.importer = importer; + } + + // Get the visual component for the panel. In this template, the component + // is kept separate. This can be more efficient: if the wizard is created + // but never displayed, or not all panels are displayed, it is better to + // create only those which really need to be visible. + @Override + public Component getComponent() { + if (component == null) { + component = new WizardVisualPanel1CSV(importer, this); + } + return component.getValidationPanel(); + } + + @Override + public HelpCtx getHelp() { + // Show no Help button for this panel: + return HelpCtx.DEFAULT_HELP; + // If you have context help: + // return new HelpCtx(SampleWizardPanel1.class); + } + + @Override + public boolean isValid() { + return component.isValidData(); + } + + @Override + public final void addChangeListener(ChangeListener l) { + synchronized (listeners) { + listeners.add(l); + } + } + + @Override + public final void removeChangeListener(ChangeListener l) { + synchronized (listeners) { + listeners.remove(l); + } + } + + protected final void fireChangeEvent() { + Iterator it; + synchronized (listeners) { + it = new HashSet<>(listeners).iterator(); + } + ChangeEvent ev = new ChangeEvent(this); + while (it.hasNext()) { + it.next().stateChanged(ev); + } + } + + // You can use a settings object to keep track of state. Normally the + // settings object will be the WizardDescriptor, so you can use + // WizardDescriptor.getProperty & putProperty to store information entered + // by the user. + @Override + public void readSettings(Object settings) { + component.refreshPreviewTable(); + } + + @Override + public void storeSettings(Object settings) { + importer.setFieldDelimiter(component.getSelectedSeparator()); + importer.setMode(component.getSelectedMode()); + importer.setCharset(component.getSelectedCharset()); + } +} diff --git a/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/WizardPanel1Excel.java b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/WizardPanel1Excel.java new file mode 100644 index 0000000000..492ebe5f9a --- /dev/null +++ b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/WizardPanel1Excel.java @@ -0,0 +1,133 @@ +/* +Copyright 2008-2016 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2016 Gephi Consortium. + */ + +package org.gephi.ui.importer.plugin.spreadsheet.wizard; + +import java.awt.Component; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Set; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import org.gephi.io.importer.plugin.file.spreadsheet.ImporterSpreadsheetExcel; +import org.openide.WizardDescriptor; +import org.openide.util.HelpCtx; + +public class WizardPanel1Excel implements WizardDescriptor.Panel { + + private final ImporterSpreadsheetExcel importer; + private final Set listeners = new HashSet<>(1); // or can use ChangeSupport in NB 6.0 + /** + * The visual component that displays this panel. If you need to access the + * component from this class, just use getComponent(). + */ + private WizardVisualPanel1Excel component; + + public WizardPanel1Excel(ImporterSpreadsheetExcel importer) { + this.importer = importer; + } + + // Get the visual component for the panel. In this template, the component + // is kept separate. This can be more efficient: if the wizard is created + // but never displayed, or not all panels are displayed, it is better to + // create only those which really need to be visible. + @Override + public Component getComponent() { + if (component == null) { + component = new WizardVisualPanel1Excel(importer, this); + } + return component.getValidationPanel(); + } + + @Override + public HelpCtx getHelp() { + // Show no Help button for this panel: + return HelpCtx.DEFAULT_HELP; + // If you have context help: + // return new HelpCtx(SampleWizardPanel1.class); + } + + @Override + public boolean isValid() { + return component.isValidData(); + } + + @Override + public final void addChangeListener(ChangeListener l) { + synchronized (listeners) { + listeners.add(l); + } + } + + @Override + public final void removeChangeListener(ChangeListener l) { + synchronized (listeners) { + listeners.remove(l); + } + } + + protected final void fireChangeEvent() { + Iterator it; + synchronized (listeners) { + it = new HashSet<>(listeners).iterator(); + } + ChangeEvent ev = new ChangeEvent(this); + while (it.hasNext()) { + it.next().stateChanged(ev); + } + } + + // You can use a settings object to keep track of state. Normally the + // settings object will be the WizardDescriptor, so you can use + // WizardDescriptor.getProperty & putProperty to store information entered + // by the user. + @Override + public void readSettings(Object settings) { + component.refreshPreviewTable(); + } + + @Override + public void storeSettings(Object settings) { + importer.setMode(component.getSelectedMode()); + importer.setSheetIndex(component.getSelectedSheetIndex()); + } +} diff --git a/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/WizardPanel2.java b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/WizardPanel2.java new file mode 100644 index 0000000000..c5d4f30ed9 --- /dev/null +++ b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/WizardPanel2.java @@ -0,0 +1,140 @@ +/* +Copyright 2008-2016 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2016 Gephi Consortium. + */ + +package org.gephi.ui.importer.plugin.spreadsheet.wizard; + +import java.awt.Component; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.Map; +import java.util.Set; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import org.gephi.io.importer.plugin.file.spreadsheet.AbstractImporterSpreadsheet; +import org.openide.WizardDescriptor; +import org.openide.util.HelpCtx; + +public class WizardPanel2 implements WizardDescriptor.Panel { + + /** + * The visual component that displays this panel. If you need to access the component from this class, just use getComponent(). + */ + private final WizardVisualPanel2 component; + private final AbstractImporterSpreadsheet importer; + private final Set listeners = new HashSet<>(1); // or can use ChangeSupport in NB 6.0 + + WizardPanel2(AbstractImporterSpreadsheet importer) { + this.importer = importer; + this.component = new WizardVisualPanel2(importer, this); + } + + // Get the visual component for the panel. In this template, the component + // is kept separate. This can be more efficient: if the wizard is created + // but never displayed, or not all panels are displayed, it is better to + // create only those which really need to be visible. + @Override + public Component getComponent() { + return component; + } + + @Override + public HelpCtx getHelp() { + // Show no Help button for this panel: + return HelpCtx.DEFAULT_HELP; + // If you have context help: + // return new HelpCtx(SampleWizardPanel1.class); + } + + @Override + public boolean isValid() { + return true; + } + + @Override + public final void addChangeListener(ChangeListener l) { + synchronized (listeners) { + listeners.add(l); + } + } + + @Override + public final void removeChangeListener(ChangeListener l) { + synchronized (listeners) { + listeners.remove(l); + } + } + + protected final void fireChangeEvent() { + Iterator it; + synchronized (listeners) { + it = new HashSet<>(listeners).iterator(); + } + ChangeEvent ev = new ChangeEvent(this); + while (it.hasNext()) { + it.next().stateChanged(ev); + } + } + + // You can use a settings object to keep track of state. Normally the + // settings object will be the WizardDescriptor, so you can use + // WizardDescriptor.getProperty & putProperty to store information entered + // by the user. + @Override + public void readSettings(Object settings) { + component.reloadSettings(); + } + + @Override + public void storeSettings(Object settings) { + String[] columnsToImport = component.getColumnsToImport(); + Class[] columnTypes = component.getColumnsToImportTypes(); + + Map columnsClasses = new HashMap<>(); + for (int i = 0; i < columnsToImport.length; i++) { + columnsClasses.put(columnsToImport[i], columnTypes[i]); + } + + importer.setColumnsClasses(columnsClasses); + importer.setTimeRepresentation(component.getSelectedTimeRepresentation()); + } +} diff --git a/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/WizardVisualPanel1CSV.form b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/WizardVisualPanel1CSV.form new file mode 100644 index 0000000000..d51229ffba --- /dev/null +++ b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/WizardVisualPanel1CSV.form @@ -0,0 +1,175 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/WizardVisualPanel1CSV.java b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/WizardVisualPanel1CSV.java new file mode 100644 index 0000000000..c53af208d4 --- /dev/null +++ b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/WizardVisualPanel1CSV.java @@ -0,0 +1,445 @@ +/* +Copyright 2008-2016 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2016 Gephi Consortium. + */ + +package org.gephi.ui.importer.plugin.spreadsheet.wizard; + +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import org.gephi.io.importer.plugin.file.spreadsheet.ImporterSpreadsheetCSV; +import org.gephi.io.importer.plugin.file.spreadsheet.process.SpreadsheetGeneralConfiguration.Mode; +import org.gephi.utils.CharsetToolkit; +import org.netbeans.validation.api.Problems; +import org.netbeans.validation.api.Severity; +import org.netbeans.validation.api.Validator; +import org.netbeans.validation.api.ui.ValidationGroup; +import org.netbeans.validation.api.ui.swing.ValidationPanel; +import org.openide.util.NbBundle; + +/** + * @author Eduardo Ramos + */ +public class WizardVisualPanel1CSV extends AbstractWizardVisualPanel1 { + + private final ImporterSpreadsheetCSV importer; + + private final WizardPanel1CSV wizard1; + private ValidationPanel validationPanel; + + private boolean initialized = false; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JComboBox charsetComboBox; + private javax.swing.JLabel charsetLabel; + private javax.swing.JLabel filePathLabel; + private javax.swing.JComboBox modeComboBox; + private javax.swing.JLabel modeLabel; + private javax.swing.JTextField pathTextField; + private javax.swing.JLabel previewLabel; + private javax.swing.JTable previewTable; + private javax.swing.JScrollPane scroll; + private javax.swing.JComboBox separatorComboBox; + private javax.swing.JLabel separatorLabel; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form WizardVisualPanel1CSV + */ + public WizardVisualPanel1CSV(ImporterSpreadsheetCSV importer, WizardPanel1CSV wizard1) { + super(importer); + initComponents(); + this.wizard1 = wizard1; + this.importer = importer; + + SeparatorWrapper comma, semicolon, tab, space; + + separatorComboBox.addItem(comma = new SeparatorWrapper((','), getMessage("WizardVisualPanel1CSV.comma"))); + separatorComboBox + .addItem(semicolon = new SeparatorWrapper((';'), getMessage("WizardVisualPanel1CSV.semicolon"))); + separatorComboBox.addItem(tab = new SeparatorWrapper(('\t'), getMessage("WizardVisualPanel1CSV.tab"))); + separatorComboBox.addItem(space = new SeparatorWrapper((' '), getMessage("WizardVisualPanel1CSV.space"))); + + for (Mode mode : Mode.values()) { + modeComboBox.addItem(new ImportModeWrapper(mode)); + } + + for (Charset charset : CharsetToolkit.getAvailableCharsets()) { + charsetComboBox.addItem(charset.name()); + } + + //Setup with initial values: + //Field separator: + char selectedSeparator = importer.getFieldDelimiter(); + switch (selectedSeparator) { + case ',': + separatorComboBox.setSelectedItem(comma); + break; + case ';': + separatorComboBox.setSelectedItem(semicolon); + break; + case '\t': + separatorComboBox.setSelectedItem(tab); + break; + case ' ': + separatorComboBox.setSelectedItem(space); + break; + default: + separatorComboBox.setSelectedItem(String.valueOf(selectedSeparator)); + break; + } + + //Mode: + modeComboBox.setSelectedItem(new ImportModeWrapper(importer.getMode())); + + //Charset: + Charset selectedCharset = importer.getCharset(); + if (selectedCharset != null) { + charsetComboBox.setSelectedItem(selectedCharset.name()); + } else { + charsetComboBox + .setSelectedItem(StandardCharsets.UTF_8.name());//UTF-8 by default, not system default charset + } + + //File path: + final String filePath = importer.getFile().getAbsolutePath(); + pathTextField.setText(filePath); + pathTextField.setToolTipText(filePath); + + initialized = true; + + refreshPreviewTable(); + } + + public ValidationPanel getValidationPanel() { + if (validationPanel != null) { + return validationPanel; + } + validationPanel = new ValidationPanel(); + validationPanel.setInnerComponent(WizardVisualPanel1CSV.this); + ValidationGroup validationGroup = validationPanel.getValidationGroup(); + validationGroup.add(pathTextField, new Validator() { + + @Override + public Class modelType() { + return String.class; + } + + @Override + public void validate(Problems prblms, String string, String t) { + if (!areValidColumnsForTable()) { + prblms.add(getMessage("WizardVisualPanel1CSV.validation.edges.no-source-target-columns")); + } + if (hasRowsMissingSourcesOrTargets()) { + prblms.add(NbBundle.getMessage(WizardVisualPanel1CSV.class, + "WizardVisualPanel1CSV.validation.edges.empty-sources-or-targets" + ), Severity.WARNING); + } + } + }); + validationPanel.setName(getName()); + + return validationPanel; + } + + @Override + public final void refreshPreviewTable() { + super.refreshPreviewTable(); + + wizard1.fireChangeEvent(); + pathTextField.setText(pathTextField.getText());//To fire validation panel messages. + } + + @Override + public String getName() { + return getMessage("WizardVisualPanel1CSV.name"); + } + + public Character getSelectedSeparator() { + Object item = separatorComboBox.getSelectedItem(); + if (item instanceof SeparatorWrapper) { + return ((SeparatorWrapper) item).separator; + } else { + String separatorString = item.toString().trim(); + if (separatorString.isEmpty()) { + separatorString = ","; + } + + return separatorString.charAt(0); + } + } + + @Override + public Mode getSelectedMode() { + if (modeComboBox.getItemCount() == 0) { + return Mode.ADJACENCY_LIST; + } + return ((ImportModeWrapper) modeComboBox.getSelectedItem()).getMode(); + } + + public Charset getSelectedCharset() { + return Charset.forName(charsetComboBox.getSelectedItem().toString()); + } + + public int getColumnCount() { + return columnCount; + } + + public boolean hasColumns() { + return columnCount > 0; + } + + public boolean areValidColumnsForTable() { + switch (getSelectedMode()) { + case EDGES_TABLE: + return hasSourceNodeColumn && hasTargetNodeColumn; + case NODES_TABLE: + return hasColumns(); + default: + return true; + } + } + + public boolean isValidData() { + return areValidColumnsForTable(); + } + + public boolean hasRowsMissingSourcesOrTargets() { + return hasRowsMissingSourcesOrTargets; + } + + @Override + protected JTable getPreviewTable() { + return previewTable; + } + + @Override + protected JScrollPane getPreviewTableScrollPane() { + return scroll; + } + + private String getMessage(String resName) { + return NbBundle.getMessage(WizardVisualPanel1CSV.class, resName); + } + + /** + * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The content of this method is always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + filePathLabel = new javax.swing.JLabel(); + pathTextField = new javax.swing.JTextField(); + separatorLabel = new javax.swing.JLabel(); + separatorComboBox = new javax.swing.JComboBox(); + modeLabel = new javax.swing.JLabel(); + modeComboBox = new javax.swing.JComboBox(); + previewLabel = new javax.swing.JLabel(); + scroll = new javax.swing.JScrollPane(); + previewTable = new javax.swing.JTable(); + charsetLabel = new javax.swing.JLabel(); + charsetComboBox = new javax.swing.JComboBox(); + + filePathLabel.setText(org.openide.util.NbBundle + .getMessage(WizardVisualPanel1CSV.class, "WizardVisualPanel1CSV.filePathLabel.text")); // NOI18N + + pathTextField.setEditable(false); + pathTextField.setText(org.openide.util.NbBundle + .getMessage(WizardVisualPanel1CSV.class, "WizardVisualPanel1CSV.pathTextField.text")); // NOI18N + + separatorLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); + separatorLabel.setText(org.openide.util.NbBundle + .getMessage(WizardVisualPanel1CSV.class, "WizardVisualPanel1CSV.separatorLabel.text")); // NOI18N + + separatorComboBox.setEditable(true); + separatorComboBox.addItemListener(new java.awt.event.ItemListener() { + public void itemStateChanged(java.awt.event.ItemEvent evt) { + separatorComboBoxItemStateChanged(evt); + } + }); + + modeLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); + modeLabel.setText(org.openide.util.NbBundle + .getMessage(WizardVisualPanel1CSV.class, "WizardVisualPanel1CSV.modeLabel.text")); // NOI18N + + modeComboBox.addItemListener(new java.awt.event.ItemListener() { + public void itemStateChanged(java.awt.event.ItemEvent evt) { + modeComboBoxItemStateChanged(evt); + } + }); + + previewLabel.setText(org.openide.util.NbBundle + .getMessage(WizardVisualPanel1CSV.class, "WizardVisualPanel1CSV.previewLabel.text")); // NOI18N + + previewTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF); + scroll.setViewportView(previewTable); + + charsetLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); + charsetLabel.setText(org.openide.util.NbBundle + .getMessage(WizardVisualPanel1CSV.class, "WizardVisualPanel1CSV.charsetLabel.text")); // NOI18N + + charsetComboBox.addItemListener(new java.awt.event.ItemListener() { + public void itemStateChanged(java.awt.event.ItemEvent evt) { + charsetComboBoxItemStateChanged(evt); + } + }); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(scroll, javax.swing.GroupLayout.Alignment.LEADING, + javax.swing.GroupLayout.DEFAULT_SIZE, 537, Short.MAX_VALUE) + .addComponent(filePathLabel, javax.swing.GroupLayout.Alignment.LEADING, + javax.swing.GroupLayout.DEFAULT_SIZE, 537, Short.MAX_VALUE) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(separatorLabel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(separatorComboBox, 0, 90, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(modeLabel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(modeComboBox, 0, 123, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(charsetLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 308, Short.MAX_VALUE) + .addComponent(charsetComboBox, 0, 308, Short.MAX_VALUE))) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() + .addComponent(previewLabel) + .addGap(0, 0, Short.MAX_VALUE)) + .addComponent(pathTextField, javax.swing.GroupLayout.Alignment.LEADING)) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(filePathLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(pathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(layout.createSequentialGroup() + .addComponent(separatorLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(separatorComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(modeLabel) + .addComponent(charsetLabel)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(modeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(charsetComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))) + .addGap(18, 18, 18) + .addComponent(previewLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(scroll, javax.swing.GroupLayout.DEFAULT_SIZE, 150, Short.MAX_VALUE) + .addContainerGap()) + ); + }// //GEN-END:initComponents + + private void separatorComboBoxItemStateChanged( + java.awt.event.ItemEvent evt) {//GEN-FIRST:event_separatorComboBoxItemStateChanged + if (initialized) { + Object item = separatorComboBox.getSelectedItem(); + if (!(item instanceof SeparatorWrapper)) { + String separatorString = item.toString().trim(); + if (separatorString.length() > 1) { + separatorComboBox.setSelectedItem(separatorString.substring(0, 1)); + } + } + + importer.setFieldDelimiter(getSelectedSeparator()); + refreshPreviewTable(); + } + }//GEN-LAST:event_separatorComboBoxItemStateChanged + + private void charsetComboBoxItemStateChanged( + java.awt.event.ItemEvent evt) {//GEN-FIRST:event_charsetComboBoxItemStateChanged + if (initialized) { + importer.setCharset(getSelectedCharset()); + refreshPreviewTable(); + } + }//GEN-LAST:event_charsetComboBoxItemStateChanged + + private void modeComboBoxItemStateChanged( + java.awt.event.ItemEvent evt) {//GEN-FIRST:event_modeComboBoxItemStateChanged + if (initialized) { + importer.setMode(getSelectedMode()); + refreshPreviewTable(); + } + }//GEN-LAST:event_modeComboBoxItemStateChanged + + class SeparatorWrapper { + + private final Character separator; + private String displayText; + + public SeparatorWrapper(Character separator) { + this.separator = separator; + } + + public SeparatorWrapper(Character separator, String displayText) { + this.separator = separator; + this.displayText = displayText; + } + + @Override + public String toString() { + if (displayText != null) { + return displayText; + } else { + return String.valueOf(separator); + } + } + } +} diff --git a/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/WizardVisualPanel1Excel.form b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/WizardVisualPanel1Excel.form new file mode 100644 index 0000000000..93ba48e40c --- /dev/null +++ b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/WizardVisualPanel1Excel.form @@ -0,0 +1,145 @@ + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/WizardVisualPanel1Excel.java b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/WizardVisualPanel1Excel.java new file mode 100644 index 0000000000..6bf8505d19 --- /dev/null +++ b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/WizardVisualPanel1Excel.java @@ -0,0 +1,328 @@ +/* +Copyright 2008-2016 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2016 Gephi Consortium. + */ + +package org.gephi.ui.importer.plugin.spreadsheet.wizard; + +import javax.swing.JScrollPane; +import javax.swing.JTable; +import org.gephi.io.importer.plugin.file.spreadsheet.ImporterSpreadsheetExcel; +import org.gephi.io.importer.plugin.file.spreadsheet.process.SpreadsheetGeneralConfiguration.Mode; +import org.netbeans.validation.api.Problems; +import org.netbeans.validation.api.Severity; +import org.netbeans.validation.api.Validator; +import org.netbeans.validation.api.ui.ValidationGroup; +import org.netbeans.validation.api.ui.swing.ValidationPanel; +import org.openide.util.NbBundle; + +/** + * @author Eduardo Ramos + */ +public class WizardVisualPanel1Excel extends AbstractWizardVisualPanel1 { + + private final ImporterSpreadsheetExcel importer; + + private final WizardPanel1Excel wizard1; + private ValidationPanel validationPanel; + + private boolean initialized = false; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel filePathLabel; + private javax.swing.JComboBox modeComboBox; + private javax.swing.JLabel modeLabel; + private javax.swing.JTextField pathTextField; + private javax.swing.JLabel previewLabel; + private javax.swing.JTable previewTable; + private javax.swing.JScrollPane scroll; + private javax.swing.JLabel separatorLabel; + private javax.swing.JComboBox sheetComboBox; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form WizardVisualPanel1CSV + */ + public WizardVisualPanel1Excel(ImporterSpreadsheetExcel importer, WizardPanel1Excel wizard1) { + super(importer); + initComponents(); + this.wizard1 = wizard1; + this.importer = importer; + + for (Mode mode : Mode.values()) { + modeComboBox.addItem(new ImportModeWrapper(mode)); + } + + //Setup with initial values: + //Sheet: + for (String sheetName : importer.getAvailableSheetNames()) { + sheetComboBox.addItem(sheetName); + } + + //Mode: + modeComboBox.setSelectedItem(new ImportModeWrapper(importer.getMode())); + + //File path: + final String filePath = importer.getFile().getAbsolutePath(); + pathTextField.setText(filePath); + pathTextField.setToolTipText(filePath); + + initialized = true; + + refreshPreviewTable(); + } + + public ValidationPanel getValidationPanel() { + if (validationPanel != null) { + return validationPanel; + } + validationPanel = new ValidationPanel(); + validationPanel.setInnerComponent(WizardVisualPanel1Excel.this); + ValidationGroup validationGroup = validationPanel.getValidationGroup(); + validationGroup.add(pathTextField, new Validator() { + + @Override + public Class modelType() { + return String.class; + } + + @Override + public void validate(Problems prblms, String string, String t) { + if (!areValidColumnsForMode()) { + prblms.add(getMessage("WizardVisualPanel1CSV.validation.edges.no-source-target-columns")); + } + if (hasRowsMissingSourcesOrTargets()) { + prblms.add(NbBundle.getMessage(WizardVisualPanel1Excel.class, + "WizardVisualPanel1CSV.validation.edges.empty-sources-or-targets" + ), Severity.WARNING); + } + } + }); + validationPanel.setName(getName()); + + return validationPanel; + } + + @Override + public final void refreshPreviewTable() { + super.refreshPreviewTable(); + wizard1.fireChangeEvent(); + pathTextField.setText(pathTextField.getText());//To fire validation panel messages. + } + + @Override + public String getName() { + return getMessage("WizardVisualPanel1Excel.name"); + } + + @Override + public Mode getSelectedMode() { + if (modeComboBox.getItemCount() == 0) { + return Mode.ADJACENCY_LIST; + } + return ((ImportModeWrapper) modeComboBox.getSelectedItem()).getMode(); + } + + public int getSelectedSheetIndex() { + return sheetComboBox.getSelectedIndex(); + } + + public int getColumnCount() { + return columnCount; + } + + public boolean hasColumns() { + return getColumnCount() > 0; + } + + public boolean areValidColumnsForMode() { + switch (getSelectedMode()) { + case EDGES_TABLE: + return hasSourceNodeColumn && hasTargetNodeColumn; + case NODES_TABLE: + return getColumnCount() > 0; + default: + return true; + } + } + + public boolean isValidData() { + return areValidColumnsForMode(); + } + + public boolean hasRowsMissingSourcesOrTargets() { + return hasRowsMissingSourcesOrTargets; + } + + private String getMessage(String resName) { + return NbBundle.getMessage(WizardVisualPanel1Excel.class, resName); + } + + @Override + protected JTable getPreviewTable() { + return previewTable; + } + + @Override + protected JScrollPane getPreviewTableScrollPane() { + return scroll; + } + + /** + * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The content of this method is always regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + filePathLabel = new javax.swing.JLabel(); + pathTextField = new javax.swing.JTextField(); + separatorLabel = new javax.swing.JLabel(); + sheetComboBox = new javax.swing.JComboBox(); + modeLabel = new javax.swing.JLabel(); + modeComboBox = new javax.swing.JComboBox(); + previewLabel = new javax.swing.JLabel(); + scroll = new javax.swing.JScrollPane(); + previewTable = new javax.swing.JTable(); + + filePathLabel.setText(org.openide.util.NbBundle + .getMessage(WizardVisualPanel1Excel.class, "WizardVisualPanel1Excel.filePathLabel.text")); // NOI18N + + pathTextField.setEditable(false); + pathTextField.setText(org.openide.util.NbBundle + .getMessage(WizardVisualPanel1Excel.class, "WizardVisualPanel1Excel.pathTextField.text")); // NOI18N + + separatorLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); + separatorLabel.setText(org.openide.util.NbBundle + .getMessage(WizardVisualPanel1Excel.class, "WizardVisualPanel1Excel.separatorLabel.text")); // NOI18N + + sheetComboBox.addItemListener(new java.awt.event.ItemListener() { + public void itemStateChanged(java.awt.event.ItemEvent evt) { + sheetComboBoxItemStateChanged(evt); + } + }); + + modeLabel.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); + modeLabel.setText(org.openide.util.NbBundle + .getMessage(WizardVisualPanel1Excel.class, "WizardVisualPanel1Excel.modeLabel.text")); // NOI18N + + modeComboBox.addItemListener(new java.awt.event.ItemListener() { + public void itemStateChanged(java.awt.event.ItemEvent evt) { + modeComboBoxItemStateChanged(evt); + } + }); + + previewLabel.setText(org.openide.util.NbBundle + .getMessage(WizardVisualPanel1Excel.class, "WizardVisualPanel1Excel.previewLabel.text")); // NOI18N + + previewTable.setAutoResizeMode(javax.swing.JTable.AUTO_RESIZE_OFF); + scroll.setViewportView(previewTable); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(scroll, javax.swing.GroupLayout.Alignment.LEADING, + javax.swing.GroupLayout.DEFAULT_SIZE, 537, Short.MAX_VALUE) + .addComponent(filePathLabel, javax.swing.GroupLayout.Alignment.LEADING, + javax.swing.GroupLayout.DEFAULT_SIZE, 537, Short.MAX_VALUE) + .addComponent(pathTextField, javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() + .addComponent(previewLabel) + .addGap(0, 0, Short.MAX_VALUE)) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(separatorLabel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(sheetComboBox, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(modeLabel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(modeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 123, + javax.swing.GroupLayout.PREFERRED_SIZE)))) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(filePathLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(pathTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(layout.createSequentialGroup() + .addComponent(separatorLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(sheetComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createSequentialGroup() + .addComponent(modeLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(modeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGap(18, 18, 18) + .addComponent(previewLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(scroll, javax.swing.GroupLayout.DEFAULT_SIZE, 150, Short.MAX_VALUE) + .addContainerGap()) + ); + }// //GEN-END:initComponents + + private void sheetComboBoxItemStateChanged( + java.awt.event.ItemEvent evt) {//GEN-FIRST:event_sheetComboBoxItemStateChanged + if (initialized) { + importer.setSheetIndex(getSelectedSheetIndex()); + refreshPreviewTable(); + } + }//GEN-LAST:event_sheetComboBoxItemStateChanged + + private void modeComboBoxItemStateChanged( + java.awt.event.ItemEvent evt) {//GEN-FIRST:event_modeComboBoxItemStateChanged + if (initialized) { + importer.setMode(getSelectedMode()); + refreshPreviewTable(); + } + }//GEN-LAST:event_modeComboBoxItemStateChanged +} diff --git a/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/WizardVisualPanel2.form b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/WizardVisualPanel2.form new file mode 100644 index 0000000000..be611a051b --- /dev/null +++ b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/WizardVisualPanel2.form @@ -0,0 +1,34 @@ + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/WizardVisualPanel2.java b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/WizardVisualPanel2.java new file mode 100644 index 0000000000..ec4049c56c --- /dev/null +++ b/modules/ImportPluginUI/src/main/java/org/gephi/ui/importer/plugin/spreadsheet/wizard/WizardVisualPanel2.java @@ -0,0 +1,248 @@ +/* +Copyright 2008-2016 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2016 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2016 Gephi Consortium. + */ + +package org.gephi.ui.importer.plugin.spreadsheet.wizard; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import javax.swing.JCheckBox; +import javax.swing.JComboBox; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JSeparator; +import net.miginfocom.swing.MigLayout; +import org.gephi.graph.api.TimeRepresentation; +import org.gephi.io.importer.plugin.file.spreadsheet.AbstractImporterSpreadsheet; +import org.gephi.io.importer.plugin.file.spreadsheet.process.SpreadsheetGeneralConfiguration.Mode; +import org.gephi.ui.utils.SupportedColumnTypeWrapper; +import org.gephi.ui.utils.TimeRepresentationWrapper; +import org.openide.util.Exceptions; +import org.openide.util.NbBundle; + +public final class WizardVisualPanel2 extends JPanel { + + private static final String ASSIGN_NEW_NODES_IDS_SAVED_PREFERENCES = "WizardVisualPanel2_assign_new_nodes_ids"; + private static final String CREATE_NEW_NODES_SAVED_PREFERENCES = "WizardVisualPanel2_create_new_nodes"; + private final WizardPanel2 wizard2; + private final ArrayList columnsCheckBoxes = new ArrayList<>(); + private final ArrayList columnsComboBoxes = new ArrayList<>(); + private final AbstractImporterSpreadsheet importer; + private JComboBox timeRepresentationComboBox = new JComboBox(); + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JScrollPane scroll; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form WizardVisualPanel2 + */ + public WizardVisualPanel2(final AbstractImporterSpreadsheet importer, final WizardPanel2 wizard2) { + initComponents(); + this.importer = importer; + this.wizard2 = wizard2; + + timeRepresentationComboBox = new JComboBox(); + for (TimeRepresentation value : TimeRepresentation.values()) { + timeRepresentationComboBox.addItem(new TimeRepresentationWrapper(value)); + } + + timeRepresentationComboBox.setSelectedItem(new TimeRepresentationWrapper(importer.getTimeRepresentation())); + + timeRepresentationComboBox.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + importer.setTimeRepresentation(getSelectedTimeRepresentation()); + reloadSettings(); + } + }); + } + + public void reloadSettings() { + JPanel settingsPanel = new JPanel(); + settingsPanel.setLayout(new MigLayout("fillx")); + createTimeRepresentationComboBox(settingsPanel); + + settingsPanel.add(new JSeparator(), "growx, wrap"); + + loadColumns(settingsPanel); + + scroll.setViewportView(settingsPanel); + wizard2.fireChangeEvent();//Enable/disable finish button + } + + private void createTimeRepresentationComboBox(JPanel settingsPanel) { + JLabel timeRepresentationLabel = new JLabel(getMessage("WizardVisualPanel2.timeRepresentationLabel.text")); + + settingsPanel.add(timeRepresentationLabel, "wrap"); + settingsPanel.add(timeRepresentationComboBox, "wrap 15px"); + } + + private void loadColumns(JPanel settingsPanel) { + try { + columnsCheckBoxes.clear(); + columnsComboBoxes.clear(); + JLabel columnsLabel = new JLabel(getMessage("WizardVisualPanel2.columnsLabel.text")); + settingsPanel.add(columnsLabel, "wrap"); + + final String[] headers = importer.getHeadersMap().keySet().toArray(new String[0]); + + final Mode mode = importer.getMode(); + + for (String header : headers) { + if (header.isEmpty()) { + continue;//Remove empty column headers: + } + + JCheckBox columnCheckBox = new JCheckBox(header, true); + + if (importer.getMode() == Mode.EDGES_TABLE && + (header.equalsIgnoreCase("source") || header.equalsIgnoreCase("target"))) { + columnCheckBox.setEnabled(false); + } + + columnsCheckBoxes.add(columnCheckBox); + JComboBox columnComboBox = new JComboBox(); + + if (mode.isSpecialColumn(header)) { + settingsPanel.add(columnCheckBox, "wrap 15px"); + + //Special columns such as id, label, source and target... don't need a type selector + //The type is not used by the importer anyway + columnsComboBoxes.add(null); + } else { + settingsPanel.add(columnCheckBox, "wrap"); + + columnsComboBoxes.add(columnComboBox); + fillComboBoxWithColumnTypes(header, columnComboBox); + settingsPanel.add(columnComboBox, "wrap 15px"); + } + } + } catch (IOException ex) { + Exceptions.printStackTrace(ex); + } + } + + private void fillComboBoxWithColumnTypes(String column, JComboBox comboBox) { + comboBox.removeAllItems(); + List supportedTypesWrappers = + SupportedColumnTypeWrapper.buildOrderedSupportedTypesList(importer.getTimeRepresentation()); + + for (SupportedColumnTypeWrapper supportedColumnTypeWrapper : supportedTypesWrappers) { + comboBox.addItem(supportedColumnTypeWrapper); + } + + Class defaultClass = importer.getColumnClass(column); + if (defaultClass == null) { + defaultClass = String.class;//Default + } + + SupportedColumnTypeWrapper selection = new SupportedColumnTypeWrapper(defaultClass); + if (!supportedTypesWrappers.contains(selection)) { + selection = new SupportedColumnTypeWrapper(String.class);//Default + } + comboBox.setSelectedItem(selection); + } + + public TimeRepresentation getSelectedTimeRepresentation() { + return ((TimeRepresentationWrapper) timeRepresentationComboBox.getSelectedItem()).getTimeRepresentation(); + } + + public String[] getColumnsToImport() { + ArrayList columns = new ArrayList<>(); + for (JCheckBox columnCheckBox : columnsCheckBoxes) { + if (columnCheckBox.isSelected()) { + columns.add(columnCheckBox.getText()); + } + } + return columns.toArray(new String[0]); + } + + public Class[] getColumnsToImportTypes() { + ArrayList types = new ArrayList<>(); + for (int i = 0; i < columnsCheckBoxes.size(); i++) { + if (columnsCheckBoxes.get(i).isSelected()) { + + JComboBox columnComboBox = columnsComboBoxes.get(i); + Class type; + + if (columnComboBox != null) { + type = ((SupportedColumnTypeWrapper) columnComboBox.getSelectedItem()).getType(); + } else { + type = String.class; + } + types.add(type); + } + } + return types.toArray(new Class[0]); + } + + @Override + public String getName() { + return NbBundle.getMessage(WizardVisualPanel2.class, "WizardVisualPanel2.name"); + } + + private String getMessage(String resName) { + return NbBundle.getMessage(WizardVisualPanel2.class, resName); + } + + /** + * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The content of this method is always regenerated by the Form Editor. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + + scroll = new javax.swing.JScrollPane(); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(scroll, javax.swing.GroupLayout.DEFAULT_SIZE, 290, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(scroll, javax.swing.GroupLayout.DEFAULT_SIZE, 320, Short.MAX_VALUE) + ); + }// //GEN-END:initComponents +} diff --git a/modules/ImportPluginUI/src/main/java/org/gephi/ui/processor/plugin/AppendProcessorUI.java b/modules/ImportPluginUI/src/main/java/org/gephi/ui/processor/plugin/AppendProcessorUI.java new file mode 100644 index 0000000000..3cd1af1b23 --- /dev/null +++ b/modules/ImportPluginUI/src/main/java/org/gephi/ui/processor/plugin/AppendProcessorUI.java @@ -0,0 +1,79 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.ui.processor.plugin; + +import javax.swing.JPanel; +import org.gephi.io.importer.api.Container; +import org.gephi.io.processor.plugin.AppendProcessor; +import org.gephi.io.processor.spi.Processor; +import org.gephi.io.processor.spi.ProcessorUI; +import org.openide.util.lookup.ServiceProvider; + +@ServiceProvider(service = ProcessorUI.class, position = 10000) +public class AppendProcessorUI implements ProcessorUI { + + @Override + public void setup(Processor processor) { + + } + + @Override + public JPanel getPanel() { + return null; + } + + @Override + public void unsetup() { + + } + + @Override + public boolean isUIFoProcessor(Processor processor) { + return processor.getClass().equals(AppendProcessor.class); + } + + @Override + public boolean isValid(Container[] containers) { + return true;//Always available + } +} diff --git a/modules/ImportPluginUI/src/main/java/org/gephi/ui/processor/plugin/DefaultProcessorUI.java b/modules/ImportPluginUI/src/main/java/org/gephi/ui/processor/plugin/DefaultProcessorUI.java new file mode 100644 index 0000000000..9cfc481d1f --- /dev/null +++ b/modules/ImportPluginUI/src/main/java/org/gephi/ui/processor/plugin/DefaultProcessorUI.java @@ -0,0 +1,79 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.ui.processor.plugin; + +import javax.swing.JPanel; +import org.gephi.io.importer.api.Container; +import org.gephi.io.processor.plugin.DefaultProcessor; +import org.gephi.io.processor.spi.Processor; +import org.gephi.io.processor.spi.ProcessorUI; +import org.openide.util.lookup.ServiceProvider; + +@ServiceProvider(service = ProcessorUI.class, position = 1000) +public class DefaultProcessorUI implements ProcessorUI { + + @Override + public void setup(Processor processor) { + + } + + @Override + public JPanel getPanel() { + return null; + } + + @Override + public void unsetup() { + + } + + @Override + public boolean isUIFoProcessor(Processor processor) { + return processor.getClass().equals(DefaultProcessor.class); + } + + @Override + public boolean isValid(Container[] containers) { + return containers.length == 1; + } +} diff --git a/modules/ImportPluginUI/src/main/java/org/gephi/ui/processor/plugin/MergeProcessorUI.java b/modules/ImportPluginUI/src/main/java/org/gephi/ui/processor/plugin/MergeProcessorUI.java new file mode 100644 index 0000000000..a95d106423 --- /dev/null +++ b/modules/ImportPluginUI/src/main/java/org/gephi/ui/processor/plugin/MergeProcessorUI.java @@ -0,0 +1,79 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.ui.processor.plugin; + +import javax.swing.JPanel; +import org.gephi.io.importer.api.Container; +import org.gephi.io.processor.plugin.MergeProcessor; +import org.gephi.io.processor.spi.Processor; +import org.gephi.io.processor.spi.ProcessorUI; +import org.openide.util.lookup.ServiceProvider; + +@ServiceProvider(service = ProcessorUI.class, position = 4000) +public class MergeProcessorUI implements ProcessorUI { + + @Override + public void setup(Processor processor) { + + } + + @Override + public JPanel getPanel() { + return null; + } + + @Override + public void unsetup() { + + } + + @Override + public boolean isUIFoProcessor(Processor processor) { + return processor.getClass().equals(MergeProcessor.class); + } + + @Override + public boolean isValid(Container[] containers) { + return containers.length > 1; + } +} diff --git a/modules/ImportPluginUI/src/main/java/org/gephi/ui/processor/plugin/MultiProcessorUI.java b/modules/ImportPluginUI/src/main/java/org/gephi/ui/processor/plugin/MultiProcessorUI.java new file mode 100644 index 0000000000..0dff18693c --- /dev/null +++ b/modules/ImportPluginUI/src/main/java/org/gephi/ui/processor/plugin/MultiProcessorUI.java @@ -0,0 +1,79 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.ui.processor.plugin; + +import javax.swing.JPanel; +import org.gephi.io.importer.api.Container; +import org.gephi.io.processor.plugin.MultiProcessor; +import org.gephi.io.processor.spi.Processor; +import org.gephi.io.processor.spi.ProcessorUI; +import org.openide.util.lookup.ServiceProvider; + +@ServiceProvider(service = ProcessorUI.class, position = 3000) +public class MultiProcessorUI implements ProcessorUI { + + @Override + public void setup(Processor processor) { + + } + + @Override + public JPanel getPanel() { + return null; + } + + @Override + public void unsetup() { + + } + + @Override + public boolean isUIFoProcessor(Processor processor) { + return processor.getClass().equals(MultiProcessor.class); + } + + @Override + public boolean isValid(Container[] containers) { + return containers.length > 1; + } +} diff --git a/modules/ImportPluginUI/src/main/nbm/manifest.mf b/modules/ImportPluginUI/src/main/nbm/manifest.mf index 2a96aaf065..799ef5ebb9 100644 --- a/modules/ImportPluginUI/src/main/nbm/manifest.mf +++ b/modules/ImportPluginUI/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/ui/importer/plugin/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi UI +OpenIDE-Module-Name: Import Plugin UI \ No newline at end of file diff --git a/modules/ImportPluginUI/src/main/nbm/module.xml b/modules/ImportPluginUI/src/main/nbm/module.xml deleted file mode 100644 index fa0f513d07..0000000000 --- a/modules/ImportPluginUI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle.properties index 73d791ce96..f5b30b431e 100644 --- a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle.properties +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle.properties @@ -1,5 +1,3 @@ -OpenIDE-Module-Display-Category=Gephi UI -OpenIDE-Module-Name=Import Plugin UI OpenIDE-Module-Short-Description=Standard file and database settings UI EdgeListBuilder.displayName = Edge List... diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_ar.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_ca.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_ca.properties new file mode 100644 index 0000000000..702d964952 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_ca.properties @@ -0,0 +1,30 @@ +OpenIDE-Module-Short-Description=Standard file and database settings UI +EdgeListBuilder.displayName=Llista d'arestes... +EdgeListPanel.configurationLabel.text=Configuraciσ +EdgeListPanel.hostLabel.text=Host: +EdgeListPanel.fileLabel.text=Fitxer: +EdgeListPanel.portLabel.text=Port: +EdgeListPanel.dbLabel.text=Base de dades: +EdgeListPanel.userLabel.text=Nom de la persona usuΰria: +EdgeListPanel.pwdLabel.text=Contrasenya: +EdgeListPanel.driverLabel.text=Driver: +EdgeListPanel.nodeQueryLabel.text=Consulta de nodes: +EdgeListPanel.edgeQueryLabel.text=Consulta d'arestes: +EdgeListPanel.nodeQueryTextField.text=SELECT * FROM arestes +EdgeListPanel.testConnection.text=Connexiσ de prova +EdgeListPanel.edgeQueryTextField.text=SELECT * FROM arestes +EdgeListPanel.configNameLabel.text=Nom de la configuraciσ: +EdgeListPanel.alert.connection_successful=S'ha connectat amb θxit! +EdgeListPanel.alert.configuration_removed=Configuration {0} successfully removed. +EdgeListPanel.alert.configuration_unsaved=Aquesta configuraciσ no s'ha desat +EdgeListPanel.template.name=Nova configuraciσ +EdgeListPanel.removeConfigurationButton.toolTipText=Elimina la configuraciσ seleccionada +EdgeListPanel.jXHeader1.title=Base de dades de la llista d'arestes +EdgeListPanel.header=Nodes and edges database with an edge table with two columns: source and target. Name node primary key column "id" and edge columns "source" and "target". Columns "label", "x", "y" and "size" for nodes and "label" and "weight" for edges are optional. For dynamic networks, use 'start' and 'end' columns with type date, datetime or double. +EdgeListPanel.sqliteFileChooser.title=Fitxer de la base de dades +EdgeListPanel.sqliteFileChooser.filefilter=Base de dades SQLite +ImporterVnaUI.displayName=Importa VNA +ImporterVnaUI.message.linear=L'amplada de la lνnia augmenta linearment amb aquest valor +ImporterVnaUI.message.square_root=L'amplada de la lνnia augmenta exponencialment amb aquest valor +ImporterVnaUI.message.logarithmic=L'amplada de la lνnia augmenta logarνtmicament amb aquest valor +EdgeListPanel.browseButton.text=Navega diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_cs.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_cs.properties index a34b123ec0..0d1ddd77de 100644 --- a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_cs.properties +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_cs.properties @@ -1,67 +1,32 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-13 16\:48+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Short-Description=Rozhran\u00ed standardn\u00edho souboru a nastaven\u00ed datab\u00e1ze - -EdgeListBuilder.displayName=Seznam hran... - -EdgeListPanel.configurationLabel.text=Nastaven\u00ed\: - -EdgeListPanel.hostLabel.text=Hostitel\: - -EdgeListPanel.fileLabel.text=Soubor\: - -EdgeListPanel.portLabel.text=Port\: - -EdgeListPanel.dbLabel.text=Datab\u00e1ze\: - -EdgeListPanel.userLabel.text=U\u017eivatelsk\u00e9 jm\u00e9no\: - -EdgeListPanel.pwdLabel.text=Heslo\: - -EdgeListPanel.driverLabel.text=Ovlada\u010d\: - -EdgeListPanel.nodeQueryLabel.text=Dotaz uzlu\: - -EdgeListPanel.edgeQueryLabel.text=Dotaz hrany\: - -EdgeListPanel.nodeQueryTextField.text=Uzly SELECT * FROM - -EdgeListPanel.testConnection.text=Zkou\u0161ka p\u0159ipojen\u00ed - -EdgeListPanel.edgeQueryTextField.text=Hrany SELECT * FROM - -EdgeListPanel.configNameLabel.text=N\u00e1zev nastaven\u00ed\: - -EdgeListPanel.alert.connection_successful=P\u0159ipojen\u00ed bylo \u00fasp\u011b\u0161n\u00e9\! - -EdgeListPanel.alert.configuration_removed=Nastaven\u00ed {0} \u00fasp\u011b\u0161n\u011b odstran\u011bno. - -EdgeListPanel.alert.configuration_unsaved=Toto nastaven\u00ed nen\u00ed ulo\u017eeno. - -EdgeListPanel.template.name=Nov\u00e9 nastaven\u00ed - -EdgeListPanel.removeConfigurationButton.toolTipText=Odstranit vybran\u00e9 nastaven\u00ed - -EdgeListPanel.jXHeader1.title=Datab\u00e1ze seznamu hran - -EdgeListPanel.header=Datab\u00e1ze uzk\u016f a hran s tabulkou hran se dv\u011bma sloupci\: zdroj a c\u00edl. Uzel n\u00e1zvu hlavn\u00ed kl\u00ed\u010d sloupce "id" a sloupce hrany "source" a "target". Sloupce "label", "x", "y" a "size" pro uzle a "label" a "weight" pro hrany jsou nepovinn\u00e9. Pro dynamick\u00e9 s\u00edt\u011b pou\u017eijte sloupce 'start' a 'end' w datov\u00fdm typem datetime nebo double. - -EdgeListPanel.sqliteFileChooser.title=Soubor datab\u00e1ze - -EdgeListPanel.sqliteFileChooser.filefilter=Datab\u00e1ze SQLite - -ImporterVnaUI.displayName=Import VNA - -ImporterVnaUI.message.linear=\u0160\u00ed\u0159ka \u0159\u00e1dku se line\u00e1rn\u011b zvy\u0161uje pomoc\u00ed jej\u00ed hodnoty. - -ImporterVnaUI.message.square_root=\u0160\u00ed\u0159ka \u0159\u00e1dku se zvy\u0161uje pomoc\u00ed odmocniny jej\u00ed hodnoty. - -ImporterVnaUI.message.logarithmic=\u0160\u00ed\u0159ka \u0159\u00e1dku se logaritmicky zvy\u0161uje pomoc\u00ed jej\u00ed hodnoty. - -EdgeListPanel.browseButton.text=Proch\u00e1zet +OpenIDE-Module-Short-Description=Rozhranν standardnνho souboru a nastavenν databαze + +EdgeListBuilder.displayName = Seznam hran... +EdgeListPanel.configurationLabel.text=Nastavenν: +EdgeListPanel.hostLabel.text=Hostitel: +EdgeListPanel.fileLabel.text=Soubor: +EdgeListPanel.portLabel.text=Port: +EdgeListPanel.dbLabel.text=Databαze: +EdgeListPanel.userLabel.text=U\u017eivatelskι jmιno: +EdgeListPanel.pwdLabel.text=Heslo: +EdgeListPanel.driverLabel.text=Ovlada\u010d: +EdgeListPanel.nodeQueryLabel.text=Dotaz uzlu: +EdgeListPanel.edgeQueryLabel.text=Dotaz hrany: +EdgeListPanel.nodeQueryTextField.text=Uzly SELECT * FROM +EdgeListPanel.testConnection.text=Zkou\u0161ka p\u0159ipojenν +EdgeListPanel.edgeQueryTextField.text=Hrany SELECT * FROM +EdgeListPanel.configNameLabel.text=Nαzev nastavenν: +EdgeListPanel.alert.connection_successful=P\u0159ipojenν bylo ϊsp\u011b\u0161nι! +EdgeListPanel.alert.configuration_removed=Nastavenν {0} ϊsp\u011b\u0161n\u011b odstran\u011bno. +EdgeListPanel.alert.configuration_unsaved=Toto nastavenν nenν ulo\u017eeno. +EdgeListPanel.template.name=Novι nastavenν +EdgeListPanel.removeConfigurationButton.toolTipText=Odstranit vybranι nastavenν +EdgeListPanel.jXHeader1.title=Databαze seznamu hran +EdgeListPanel.header=Databαze uzk\u016f a hran s tabulkou hran se dv\u011bma sloupci: zdroj a cνl. Uzel nαzvu hlavnν klν\u010d sloupce "id" a sloupce hrany "source" a "target". Sloupce "label", "x", "y" a "size" pro uzle a "label" a "weight" pro hrany jsou nepovinnι. Pro dynamickι sνt\u011b pou\u017eijte sloupce 'start' a 'end' w datovύm typem datetime nebo double. +EdgeListPanel.sqliteFileChooser.title = Soubor databαze +EdgeListPanel.sqliteFileChooser.filefilter = Databαze SQLite + +ImporterVnaUI.displayName=Import VNA +ImporterVnaUI.message.linear=\u0160ν\u0159ka \u0159αdku se lineαrn\u011b zvy\u0161uje pomocν jejν hodnoty. +ImporterVnaUI.message.square_root=\u0160ν\u0159ka \u0159αdku se zvy\u0161uje pomocν odmocniny jejν hodnoty. +ImporterVnaUI.message.logarithmic=\u0160ν\u0159ka \u0159αdku se logaritmicky zvy\u0161uje pomocν jejν hodnoty. +EdgeListPanel.browseButton.text=Prochαzet diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_de.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_de.properties new file mode 100644 index 0000000000..5f38881c33 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_de.properties @@ -0,0 +1,30 @@ +OpenIDE-Module-Short-Description=Standard Datei- und Datenbank-Einstellungen Benutzeroberflδche +EdgeListBuilder.displayName=Kantenliste... +EdgeListPanel.configurationLabel.text=Konfiguration: +EdgeListPanel.hostLabel.text=Host: +EdgeListPanel.fileLabel.text=Datei: +EdgeListPanel.portLabel.text=Port: +EdgeListPanel.dbLabel.text=Datenbank: +EdgeListPanel.userLabel.text=Benutzername: +EdgeListPanel.pwdLabel.text=Passwort: +EdgeListPanel.driverLabel.text=Treiber: +EdgeListPanel.nodeQueryLabel.text=Knoten-Abfrage: +EdgeListPanel.edgeQueryLabel.text=Kanten-Abfrage: +EdgeListPanel.nodeQueryTextField.text=SELECT * FROM nodes +EdgeListPanel.testConnection.text=Test-Verbindung +EdgeListPanel.edgeQueryTextField.text=SELECT * FROM edges +EdgeListPanel.configNameLabel.text=Konfigurations-Name: +EdgeListPanel.alert.connection_successful=Verbindung erfolgreich! +EdgeListPanel.alert.configuration_removed=Konfiguration {0} erfolgreich entfernt. +EdgeListPanel.alert.configuration_unsaved=Diese Konfiguration ist nicht gespeichert. +EdgeListPanel.template.name=Neue Konfiguration +EdgeListPanel.removeConfigurationButton.toolTipText=Entferne ausgewδhlte Konfiguration +EdgeListPanel.jXHeader1.title=Kantenliste Datenbank +EdgeListPanel.header=Knoten- und Kanten-Datenbank mit einer Kanten-Tabelle mit zwei Spalten: Quelle und Ziel. Benennen Sie die Knoten-Primδrschlόssel-Spalte "id" und die Kanten-Spalten "source" und "target". Spalten "label", "x", "y" und "size" fόr Knoten und "label" und "weight" fόr Kanten sind optional. Fόr dynamische Netzwerke, benutzen Sie 'start' und 'end' Spalten mit Typ date, datetime oder double. +EdgeListPanel.sqliteFileChooser.title=Datenbank-Datei +EdgeListPanel.sqliteFileChooser.filefilter=SQLite Datenbank +ImporterVnaUI.displayName=VNA Import +ImporterVnaUI.message.linear=Linienstδrke nimmt linear mit Wert zu. +ImporterVnaUI.message.square_root=Linienstδrke nimmt im Verhδltnis Wurzel zu Wert zu. +ImporterVnaUI.message.logarithmic=Linienstδrke nimmt logarithmisch zum Wert zu. +EdgeListPanel.browseButton.text=Anzeigen diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_es.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_es.properties index ccdd9fbe78..44942d7166 100644 --- a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_es.properties +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_es.properties @@ -1,68 +1,30 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 22\:11+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Short-Description=Interfaz de usuario est\u00e1ndar para los par\u00e1metros de importar archivos y bases de datos - +OpenIDE-Module-Short-Description=Interfaz de usuario estαndar para los parαmetros de importar archivos y bases de datos EdgeListBuilder.displayName=Lista de aristas... - -EdgeListPanel.configurationLabel.text=Configuraci\u00f3n\: - -EdgeListPanel.hostLabel.text=Servidor\: - -EdgeListPanel.fileLabel.text=Archivo\: - -EdgeListPanel.portLabel.text=Puerto\: - -EdgeListPanel.dbLabel.text=Base de datos\: - -EdgeListPanel.userLabel.text=Nombre de usuario\: - -EdgeListPanel.pwdLabel.text=Contrase\u00f1a\: - -EdgeListPanel.driverLabel.text=Controlador\: - -EdgeListPanel.nodeQueryLabel.text=Consulta para los nodos\: - -EdgeListPanel.edgeQueryLabel.text=Consulta para las aristas\: - -EdgeListPanel.nodeQueryTextField.text=SELECT * FROM nodes - -EdgeListPanel.testConnection.text=Comprobar conexi\u00f3n - -EdgeListPanel.edgeQueryTextField.text=SELECT * FROM edges - -EdgeListPanel.configNameLabel.text=Nombre de la configuraci\u00f3n - -EdgeListPanel.alert.connection_successful=\u00a1Conexi\u00f3n exitosa\! - -EdgeListPanel.alert.configuration_removed=Configuraci\u00f3n {0} suprimida con \u00e9xito. - -EdgeListPanel.alert.configuration_unsaved=Esta configuraci\u00f3n no est\u00e1 guardada. - -EdgeListPanel.template.name=Nueva configuraci\u00f3n - -EdgeListPanel.removeConfigurationButton.toolTipText=Suprimir configuraci\u00f3n seleccionada - +EdgeListPanel.configurationLabel.text=Configuraciσn: +EdgeListPanel.hostLabel.text=Servidor: +EdgeListPanel.fileLabel.text=Archivo: +EdgeListPanel.portLabel.text=Puerto: +EdgeListPanel.dbLabel.text=Base de datos: +EdgeListPanel.userLabel.text=Nombre de usuario: +EdgeListPanel.pwdLabel.text=Contraseρa: +EdgeListPanel.driverLabel.text=Controlador: +EdgeListPanel.nodeQueryLabel.text=Consulta para los nodos: +EdgeListPanel.edgeQueryLabel.text=Consulta para las aristas: +EdgeListPanel.nodeQueryTextField.text=SELECCIONAR * DE nodos +EdgeListPanel.testConnection.text=Comprobar conexiσn +EdgeListPanel.edgeQueryTextField.text=SELECCIONAR * DE los bordes +EdgeListPanel.configNameLabel.text=Nombre de la configuraciσn +EdgeListPanel.alert.connection_successful=‘Conexiσn exitosa! +EdgeListPanel.alert.configuration_removed=Configuraciσn {0} suprimida con ιxito. +EdgeListPanel.alert.configuration_unsaved=Esta configuraciσn no estα guardada. +EdgeListPanel.template.name=Nueva configuraciσn +EdgeListPanel.removeConfigurationButton.toolTipText=Suprimir configuraciσn seleccionada EdgeListPanel.jXHeader1.title=Base de datos de lista de aristas - -EdgeListPanel.header=Base de datos de nodos y aristas con una tabla de aristas con dos columnas\: origen y destino. Nombra la columna clave primaria de los nodos "id" y las columnas de las aristas "source" (origen) y "target" (destino). Las columnas "label" (etiqueta), "x", "y" y "size" (tama\u00f1o) para los nodos y las columnas "label" y "weight" (peso) para las aristas son opcionales. Para redes din\u00e1micas, utiliza columnas 'start' (inicio) y 'end' (fin) de tipo date, datetime o double. - +EdgeListPanel.header=Base de datos de nodos y aristas con una tabla de aristas con dos columnas: origen y destino. Nombra la columna clave primaria de los nodos "id" y las columnas de las aristas "source" (origen) y "target" (destino). Las columnas "label" (etiqueta), "x", "y" y "size" (tamaρo) para los nodos y las columnas "label" y "weight" (peso) para las aristas son opcionales. Para redes dinαmicas, utiliza columnas 'start' (inicio) y 'end' (fin) de tipo date, datetime o double. EdgeListPanel.sqliteFileChooser.title=Archivo de base de datos - EdgeListPanel.sqliteFileChooser.filefilter=Base de datos SQLite - ImporterVnaUI.displayName=Importar VNA - -ImporterVnaUI.message.linear=El ancho de l\u00ednea incrementa linealmente con su valor. - -ImporterVnaUI.message.square_root=El ancho de l\u00ednea incrementa con la raiz cuadrada con su valor. - -ImporterVnaUI.message.logarithmic=El ancho de l\u00ednea incrementa logar\u00edtmicamente con su valor. - +ImporterVnaUI.message.linear=El ancho de lνnea incrementa linealmente con su valor. +ImporterVnaUI.message.square_root=El ancho de lνnea incrementa con la raiz cuadrada con su valor. +ImporterVnaUI.message.logarithmic=El ancho de lνnea incrementa logarνtmicamente con su valor. EdgeListPanel.browseButton.text=Explorar diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_fr.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_fr.properties index e268d2c657..d3f0882dc3 100644 --- a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_fr.properties +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_fr.properties @@ -1,68 +1,30 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-22 17\:49+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=GUI des param\u00e8tres d'import de fichiers et bases de donn\u00e9es - +OpenIDE-Module-Short-Description=GUI des paramθtres d'import de fichiers et bases de donnιes EdgeListBuilder.displayName=Liste de liens... - -EdgeListPanel.configurationLabel.text=Configuration \: - -EdgeListPanel.hostLabel.text=H\u00f4te \: - -EdgeListPanel.fileLabel.text=Fichier \: - -EdgeListPanel.portLabel.text=Port \: - -EdgeListPanel.dbLabel.text=Base de donn\u00e9es \: - -EdgeListPanel.userLabel.text=Nom d'utilisateur \: - -EdgeListPanel.pwdLabel.text=Mot de passe \: - -EdgeListPanel.driverLabel.text=Pilote \: - -EdgeListPanel.nodeQueryLabel.text=Requ\u00eate des noeuds \: - -EdgeListPanel.edgeQueryLabel.text=Requ\u00eate des liens \: - +EdgeListPanel.configurationLabel.text=Configuration : +EdgeListPanel.hostLabel.text=Hτte : +EdgeListPanel.fileLabel.text=Fichier : +EdgeListPanel.portLabel.text=Port : +EdgeListPanel.dbLabel.text=Base de donnιes : +EdgeListPanel.userLabel.text=Nom d'utilisateur : +EdgeListPanel.pwdLabel.text=Mot de passe : +EdgeListPanel.driverLabel.text=Pilote : +EdgeListPanel.nodeQueryLabel.text=Requκte des noeuds : +EdgeListPanel.edgeQueryLabel.text=Requκte des liens : EdgeListPanel.nodeQueryTextField.text=SELECT * FROM nodes - EdgeListPanel.testConnection.text=Tester la connection - EdgeListPanel.edgeQueryTextField.text=SELECT * FROM edges - -EdgeListPanel.configNameLabel.text=Nom de configuration \: - -EdgeListPanel.alert.connection_successful=Connect\u00e9 \! - -EdgeListPanel.alert.configuration_removed=Configuration {0} supprim\u00e9e. - -EdgeListPanel.alert.configuration_unsaved=Cette configuration n'est pas enregistr\u00e9e. - +EdgeListPanel.configNameLabel.text=Nom de configuration : +EdgeListPanel.alert.connection_successful=Connectι ! +EdgeListPanel.alert.configuration_removed=Configuration {0} supprimιe. +EdgeListPanel.alert.configuration_unsaved=Cette configuration n'est pas enregistrιe. EdgeListPanel.template.name=Nouvelle configuration - -EdgeListPanel.removeConfigurationButton.toolTipText=Enlever la configuration s\u00e9lectionn\u00e9e - -EdgeListPanel.jXHeader1.title=Base de donn\u00e9es de liste de liens - -EdgeListPanel.header=Base de donn\u00e9es de noeuds et de liens dont la table de liens contient deux colonnes \: source et destination. Nommez la cl\u00e9 primaire de la table noeud "id", et les colonnes de liens respectivement "source" et "target". Les colonnes "label", "x", "y" et "size" des noeuds ainsi que "label" et "weight" pour les liens sont optionnelles. - -EdgeListPanel.sqliteFileChooser.title=Fichier de base de donn\u00e9e - -EdgeListPanel.sqliteFileChooser.filefilter=Base de donn\u00e9es SQLite - +EdgeListPanel.removeConfigurationButton.toolTipText=Enlever la configuration sιlectionnιe +EdgeListPanel.jXHeader1.title=Base de donnιes de liste de liens +EdgeListPanel.header=Base de donnιes de noeuds et de liens dont la table de liens contient deux colonnes : source et destination. Nommez la clι primaire de la table noeud "id", et les colonnes de liens respectivement "source" et "target". Les colonnes "label", "x", "y" et "size" des noeuds ainsi que "label" et "weight" pour les liens sont optionnelles. +EdgeListPanel.sqliteFileChooser.title=Fichier de base de donnιe +EdgeListPanel.sqliteFileChooser.filefilter=Base de donnιes SQLite ImporterVnaUI.displayName=Import VNA - -ImporterVnaUI.message.linear=La largeur de ligne augmente de fa\u00e7on lin\u00e9aire avec sa valeur. - -ImporterVnaUI.message.square_root=La largeur de ligne augmente de fa\u00e7on quadratique avec sa valeur. - -ImporterVnaUI.message.logarithmic=La largeur de ligne augmente de fa\u00e7on logarithmique avec sa valeur. - +ImporterVnaUI.message.linear=La largeur de ligne augmente de faηon linιaire avec sa valeur. +ImporterVnaUI.message.square_root=La largeur de ligne augmente de faηon quadratique avec sa valeur. +ImporterVnaUI.message.logarithmic=La largeur de ligne augmente de faηon logarithmique avec sa valeur. EdgeListPanel.browseButton.text=Naviguer diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_he.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_he.properties new file mode 100644 index 0000000000..89a653301c --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_he.properties @@ -0,0 +1,30 @@ +OpenIDE-Module-Short-Description=Standard file and database settings UI +EdgeListBuilder.displayName=Edge List... +EdgeListPanel.configurationLabel.text=Configuration: +EdgeListPanel.hostLabel.text=Host: +EdgeListPanel.fileLabel.text=File: +EdgeListPanel.portLabel.text=Port: +EdgeListPanel.dbLabel.text=Database: +EdgeListPanel.userLabel.text=User Name: +EdgeListPanel.pwdLabel.text=Password: +EdgeListPanel.driverLabel.text=Driver: +EdgeListPanel.nodeQueryLabel.text=Node Query: +EdgeListPanel.edgeQueryLabel.text=Edge Query: +EdgeListPanel.nodeQueryTextField.text=SELECT * FROM nodes +EdgeListPanel.testConnection.text=Test Connection +EdgeListPanel.edgeQueryTextField.text=SELECT * FROM edges +EdgeListPanel.configNameLabel.text=Configuration Name: +EdgeListPanel.alert.connection_successful=Connection successful! +EdgeListPanel.alert.configuration_removed=Configuration {0} successfully removed. +EdgeListPanel.alert.configuration_unsaved=This configuration is not saved. +EdgeListPanel.template.name=New Configuration +EdgeListPanel.removeConfigurationButton.toolTipText=Remove selected configuration +EdgeListPanel.jXHeader1.title=Edge List Database +EdgeListPanel.header=Nodes and edges database with an edge table with two columns: source and target. Name node primary key column "id" and edge columns "source" and "target". Columns "label", "x", "y" and "size" for nodes and "label" and "weight" for edges are optional. For dynamic networks, use 'start' and 'end' columns with type date, datetime or double. +EdgeListPanel.sqliteFileChooser.title=Database file +EdgeListPanel.sqliteFileChooser.filefilter=SQLite database +ImporterVnaUI.displayName=VNA import +ImporterVnaUI.message.linear=Line width increases linearly with its value. +ImporterVnaUI.message.square_root=Line width increases with a square root of its value. +ImporterVnaUI.message.logarithmic=Line width increases logarithmically with its value. +EdgeListPanel.browseButton.text=Browse diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_hu.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_hu.properties new file mode 100644 index 0000000000..ee046d6d23 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_hu.properties @@ -0,0 +1,31 @@ + + +EdgeListPanel.browseButton.text=B\u00F6ng\u00E9sz\u00E9s +EdgeListPanel.template.name=\u00DAj konfigur\u00E1ci\u00F3 +EdgeListPanel.driverLabel.text=Meghajt\u00F3: +EdgeListPanel.testConnection.text=Kapcsolat tesztel\u00E9se +ImporterVnaUI.message.linear=A vonal sz\u00E9less\u00E9ge az \u00E9rt\u00E9k\u00E9vel line\u00E1risan n\u00F6vekszik. +EdgeListPanel.configNameLabel.text=Konfigur\u00E1ci\u00F3s n\u00E9v: +EdgeListPanel.edgeQueryLabel.text=\u00C9l lek\u00E9rdez\u00E9s: +EdgeListPanel.dbLabel.text=Adatb\u00E1zis: +EdgeListPanel.pwdLabel.text=Jelsz\u00F3: +EdgeListBuilder.displayName=\u00C9l Lista... +EdgeListPanel.sqliteFileChooser.filefilter=SQLite adatb\u00E1zis +EdgeListPanel.header=Csom\u00F3pontok \u00E9s \u00E9lek adatb\u00E1zisa k\u00E9t oszlopb\u00F3l \u00E1ll\u00F3 \u00E9lt\u00E1bl\u00E1zattal: forr\u00E1s \u00E9s c\u00E9l. Nevezze meg a csom\u00F3pont els\u0151dleges kulcsoszlop\u00E1t \u201Eid\u201D, az \u00E9loszlopokat pedig \u201Esource\u201D \u00E9s \u201Etarget\u201D. A "label", "x", "y" \u00E9s "size" oszlopok a csom\u00F3pontokhoz, valamint a "label" \u00E9s a "weight" oszlopok az \u00E9lekhez nem k\u00F6telez\u0151ek. Dinamikus h\u00E1l\u00F3zatok eset\u00E9n haszn\u00E1lja a "kezd\u0151" \u00E9s a "v\u00E9ge" oszlopokat d\u00E1tum, d\u00E1tum \u00E9s id\u0151 vagy double t\u00EDpussal. +EdgeListPanel.alert.configuration_unsaved=Ez a konfigur\u00E1ci\u00F3 nincs mentve. +EdgeListPanel.alert.connection_successful=Sikeres csatlakoz\u00E1s! +ImporterVnaUI.message.logarithmic=A vonal sz\u00E9less\u00E9ge az \u00E9rt\u00E9k\u00E9nek n\u00E9gyzetgy\u00F6k\u00E9vel n\u00F6vekszik. +EdgeListPanel.removeConfigurationButton.toolTipText=A kiv\u00E1lasztott konfigur\u00E1ci\u00F3 elt\u00E1vol\u00EDt\u00E1sa +EdgeListPanel.nodeQueryTextField.text=SELECT * FROM csom\u00F3pontokb\u00F3l +EdgeListPanel.fileLabel.text=F\u00E1jl: +ImporterVnaUI.displayName=VNA import +EdgeListPanel.userLabel.text=Felhaszn\u00E1l\u00F3n\u00E9v: +EdgeListPanel.edgeQueryTextField.text=SELECT * FROM \u00E9lek +EdgeListPanel.portLabel.text=Port: +EdgeListPanel.jXHeader1.title=\u00C9lek lista adatb\u00E1zis +OpenIDE-Module-Short-Description=Szabv\u00E1nyos f\u00E1jl- \u00E9s adatb\u00E1zisbe\u00E1ll\u00EDt\u00E1sok felhaszn\u00E1l\u00F3i fel\u00FClete +EdgeListPanel.alert.configuration_removed=A(z) {0} konfigur\u00E1ci\u00F3 sikeresen elt\u00E1vol\u00EDtva. +EdgeListPanel.configurationLabel.text=Konfigur\u00E1ci\u00F3: +EdgeListPanel.sqliteFileChooser.title=Adatb\u00E1zis f\u00E1jl +ImporterVnaUI.message.square_root=A vonal sz\u00E9less\u00E9ge az \u00E9rt\u00E9k\u00E9nek n\u00E9gyzetgy\u00F6k\u00E9vel n\u00F6vekszik. +EdgeListPanel.nodeQueryLabel.text=Csom\u00F3pont lek\u00E9rdez\u00E9s: diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_it.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_it.properties new file mode 100644 index 0000000000..89a653301c --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_it.properties @@ -0,0 +1,30 @@ +OpenIDE-Module-Short-Description=Standard file and database settings UI +EdgeListBuilder.displayName=Edge List... +EdgeListPanel.configurationLabel.text=Configuration: +EdgeListPanel.hostLabel.text=Host: +EdgeListPanel.fileLabel.text=File: +EdgeListPanel.portLabel.text=Port: +EdgeListPanel.dbLabel.text=Database: +EdgeListPanel.userLabel.text=User Name: +EdgeListPanel.pwdLabel.text=Password: +EdgeListPanel.driverLabel.text=Driver: +EdgeListPanel.nodeQueryLabel.text=Node Query: +EdgeListPanel.edgeQueryLabel.text=Edge Query: +EdgeListPanel.nodeQueryTextField.text=SELECT * FROM nodes +EdgeListPanel.testConnection.text=Test Connection +EdgeListPanel.edgeQueryTextField.text=SELECT * FROM edges +EdgeListPanel.configNameLabel.text=Configuration Name: +EdgeListPanel.alert.connection_successful=Connection successful! +EdgeListPanel.alert.configuration_removed=Configuration {0} successfully removed. +EdgeListPanel.alert.configuration_unsaved=This configuration is not saved. +EdgeListPanel.template.name=New Configuration +EdgeListPanel.removeConfigurationButton.toolTipText=Remove selected configuration +EdgeListPanel.jXHeader1.title=Edge List Database +EdgeListPanel.header=Nodes and edges database with an edge table with two columns: source and target. Name node primary key column "id" and edge columns "source" and "target". Columns "label", "x", "y" and "size" for nodes and "label" and "weight" for edges are optional. For dynamic networks, use 'start' and 'end' columns with type date, datetime or double. +EdgeListPanel.sqliteFileChooser.title=Database file +EdgeListPanel.sqliteFileChooser.filefilter=SQLite database +ImporterVnaUI.displayName=VNA import +ImporterVnaUI.message.linear=Line width increases linearly with its value. +ImporterVnaUI.message.square_root=Line width increases with a square root of its value. +ImporterVnaUI.message.logarithmic=Line width increases logarithmically with its value. +EdgeListPanel.browseButton.text=Browse diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_ja.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_ja.properties index d3f8491dc6..4f76e25553 100644 --- a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_ja.properties +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_ja.properties @@ -1,67 +1,32 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-04 11\:02+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u6a19\u6e96\u306e\u30d5\u30a1\u30a4\u30eb\u3068\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u8a2d\u5b9aUI - -EdgeListBuilder.displayName=\u8fba\u306e\u30ea\u30b9\u30c8... - -EdgeListPanel.configurationLabel.text=\u8a2d\u5b9a\: - -EdgeListPanel.hostLabel.text=\u30db\u30b9\u30c8\: - -EdgeListPanel.fileLabel.text=\u30d5\u30a1\u30a4\u30eb\: - -EdgeListPanel.portLabel.text=\u30dd\u30fc\u30c8\: - -EdgeListPanel.dbLabel.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\: - -EdgeListPanel.userLabel.text=\u30e6\u30fc\u30b6\u30fc\u540d\: - -EdgeListPanel.pwdLabel.text=\u30d1\u30b9\u30ef\u30fc\u30c9\: - -EdgeListPanel.driverLabel.text=\u30c9\u30e9\u30a4\u30d0\u30fc\: - -EdgeListPanel.nodeQueryLabel.text=\u30ce\u30fc\u30c9\u306e\u30af\u30a8\u30ea\: - -EdgeListPanel.edgeQueryLabel.text=\u8fba\u306e\u30af\u30a8\u30ea\: - -EdgeListPanel.nodeQueryTextField.text=SELECT * FROM \u30ce\u30fc\u30c9 - -EdgeListPanel.testConnection.text=\u30c6\u30b9\u30c8\u9023\u7d50 - -EdgeListPanel.edgeQueryTextField.text=SELECT * FROM \u8fba - -EdgeListPanel.configNameLabel.text=\u8a2d\u5b9a\u540d\: - -EdgeListPanel.alert.connection_successful=\u63a5\u7d9a\u306b\u6210\u529f\uff01 - -EdgeListPanel.alert.configuration_removed=\u8a2d\u5b9a{0}\u306e\u524a\u9664\u306b\u6210\u529f\u3002 - -EdgeListPanel.alert.configuration_unsaved=\u3053\u306e\u8a2d\u5b9a\u306f\u4fdd\u5b58\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 - -EdgeListPanel.template.name=\u65b0\u898f\u8a2d\u5b9a - -EdgeListPanel.removeConfigurationButton.toolTipText=\u9078\u629e\u3057\u305f\u8a2d\u5b9a\u306e\u524a\u9664 - -EdgeListPanel.jXHeader1.title=\u8fba\u306e\u30ea\u30b9\u30c8\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9 - -EdgeListPanel.header=\u30bd\u30fc\u30b9\u3068\u30bf\u30fc\u30b2\u30c3\u30c8\u306e2\u3064\u306e\u5217\u3092\u6301\u3064\u8fba\u306e\u30c6\u30fc\u30d6\u30eb\u3092\u6301\u3064\u30ce\u30fc\u30c9\u3068\u8fba\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3002\u540d\u524d\u306e\u30ce\u30fc\u30c9\u306e\u4e3b\u30ad\u30fc\u306e\u5217\u306f"id"\u3068\u8fba\u306e\u5217"\u30bd\u30fc\u30b9"\u3068"\u30bf\u30fc\u30b2\u30c3\u30c8"\u3002\u5217\u3092"\u30e9\u30d9\u30eb"\u3001"X"\u3001"Y"\u3068\u8fba\u306e\u30ce\u30fc\u30c9\u3068"\u30e9\u30d9\u30eb"\u3068"\u91cd\u307f"\u306e\u305f\u3081\u306e"\u30b5\u30a4\u30ba"\u306f\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u3059\u3002\u52d5\u7684\u306a\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u5834\u5408\u306f\u3001\u65e5\u4ed8\u3001\u65e5\u6642\u307e\u305f\u306f\u30c0\u30d6\u30eb\u306e\u5217\u3067'start'\u3068'end'\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002 - -EdgeListPanel.sqliteFileChooser.title=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb\: - -EdgeListPanel.sqliteFileChooser.filefilter=SQLite\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\: - -ImporterVnaUI.displayName=VNA\u30a4\u30f3\u30dd\u30fc\u30c8 - -ImporterVnaUI.message.linear=\u7dda\u306e\u5e45\u304c\u305d\u306e\u5024\u306b\u6bd4\u4f8b\u3057\u3066\u5897\u52a0\u3002 - -ImporterVnaUI.message.square_root=\u7dda\u306e\u5e45\u306f\u3001\u305d\u306e\u5024\u306e\u5e73\u65b9\u6839\u3067\u5897\u52a0\u3002 - -ImporterVnaUI.message.logarithmic=\u7dda\u306e\u5e45\u304c\u305d\u306e\u5024\u3067\u5bfe\u6570\u7684\u306b\u5897\u52a0\u3002 - -EdgeListPanel.browseButton.text=\u53c2\u7167 +OpenIDE-Module-Short-Description=\u6a19\u6e96\u306e\u30d5\u30a1\u30a4\u30eb\u3068\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u306e\u8a2d\u5b9aUI + +EdgeListBuilder.displayName = \u8fba\u306e\u30ea\u30b9\u30c8... +EdgeListPanel.configurationLabel.text=\u8a2d\u5b9a: +EdgeListPanel.hostLabel.text=\u30db\u30b9\u30c8: +EdgeListPanel.fileLabel.text=\u30d5\u30a1\u30a4\u30eb: +EdgeListPanel.portLabel.text=\u30dd\u30fc\u30c8: +EdgeListPanel.dbLabel.text=\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9: +EdgeListPanel.userLabel.text=\u30e6\u30fc\u30b6\u30fc\u540d: +EdgeListPanel.pwdLabel.text=\u30d1\u30b9\u30ef\u30fc\u30c9: +EdgeListPanel.driverLabel.text=\u30c9\u30e9\u30a4\u30d0\u30fc: +EdgeListPanel.nodeQueryLabel.text=\u30ce\u30fc\u30c9\u306e\u30af\u30a8\u30ea: +EdgeListPanel.edgeQueryLabel.text=\u8fba\u306e\u30af\u30a8\u30ea: +EdgeListPanel.nodeQueryTextField.text=SELECT * FROM \u30ce\u30fc\u30c9 +EdgeListPanel.testConnection.text=\u30c6\u30b9\u30c8\u9023\u7d50 +EdgeListPanel.edgeQueryTextField.text=SELECT * FROM \u8fba +EdgeListPanel.configNameLabel.text=\u8a2d\u5b9a\u540d: +EdgeListPanel.alert.connection_successful=\u63a5\u7d9a\u306b\u6210\u529f\uff01 +EdgeListPanel.alert.configuration_removed=\u8a2d\u5b9a{0}\u306e\u524a\u9664\u306b\u6210\u529f\u3002 +EdgeListPanel.alert.configuration_unsaved=\u3053\u306e\u8a2d\u5b9a\u306f\u4fdd\u5b58\u3055\u308c\u3066\u3044\u307e\u305b\u3093\u3002 +EdgeListPanel.template.name=\u65b0\u898f\u8a2d\u5b9a +EdgeListPanel.removeConfigurationButton.toolTipText=\u9078\u629e\u3057\u305f\u8a2d\u5b9a\u306e\u524a\u9664 +EdgeListPanel.jXHeader1.title=\u8fba\u306e\u30ea\u30b9\u30c8\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9 +EdgeListPanel.header=\u30bd\u30fc\u30b9\u3068\u30bf\u30fc\u30b2\u30c3\u30c8\u306e2\u3064\u306e\u5217\u3092\u6301\u3064\u8fba\u306e\u30c6\u30fc\u30d6\u30eb\u3092\u6301\u3064\u30ce\u30fc\u30c9\u3068\u8fba\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3002\u540d\u524d\u306e\u30ce\u30fc\u30c9\u306e\u4e3b\u30ad\u30fc\u306e\u5217\u306f"id"\u3068\u8fba\u306e\u5217"\u30bd\u30fc\u30b9"\u3068"\u30bf\u30fc\u30b2\u30c3\u30c8"\u3002\u5217\u3092"\u30e9\u30d9\u30eb"\u3001"X"\u3001"Y"\u3068\u8fba\u306e\u30ce\u30fc\u30c9\u3068"\u30e9\u30d9\u30eb"\u3068"\u91cd\u307f"\u306e\u305f\u3081\u306e"\u30b5\u30a4\u30ba"\u306f\u30aa\u30d7\u30b7\u30e7\u30f3\u3067\u3059\u3002\u52d5\u7684\u306a\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u5834\u5408\u306f\u3001\u65e5\u4ed8\u3001\u65e5\u6642\u307e\u305f\u306f\u30c0\u30d6\u30eb\u306e\u5217\u3067'start'\u3068'end'\u3092\u4f7f\u7528\u3057\u3066\u304f\u3060\u3055\u3044\u3002 +EdgeListPanel.sqliteFileChooser.title = \u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u30d5\u30a1\u30a4\u30eb: +EdgeListPanel.sqliteFileChooser.filefilter = SQLite\u306e\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9: + +ImporterVnaUI.displayName=VNA\u30a4\u30f3\u30dd\u30fc\u30c8 +ImporterVnaUI.message.linear=\u7dda\u306e\u5e45\u304c\u305d\u306e\u5024\u306b\u6bd4\u4f8b\u3057\u3066\u5897\u52a0\u3002 +ImporterVnaUI.message.square_root=\u7dda\u306e\u5e45\u306f\u3001\u305d\u306e\u5024\u306e\u5e73\u65b9\u6839\u3067\u5897\u52a0\u3002 +ImporterVnaUI.message.logarithmic=\u7dda\u306e\u5e45\u304c\u305d\u306e\u5024\u3067\u5bfe\u6570\u7684\u306b\u5897\u52a0\u3002 +EdgeListPanel.browseButton.text=\u53c2\u7167 diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_ko.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_ko.properties new file mode 100644 index 0000000000..0f30ad163c --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_ko.properties @@ -0,0 +1,32 @@ + + +OpenIDE-Module-Short-Description=\uD45C\uC900 \uD30C\uC77C \uBC0F \uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uC124\uC815 UI +EdgeListBuilder.displayName=\uC5E3\uC9C0 \uB9AC\uC2A4\uD2B8... +EdgeListPanel.alert.configuration_unsaved=\uD658\uACBD \uAD6C\uC131\uC774 \uC800\uC7A5\uB418\uC9C0 \uC54A\uC74C. +ImporterVnaUI.displayName=VNA \uBD88\uB7EC \uC624\uAE30 +EdgeListPanel.browseButton.text=\uB458\uB7EC\uBCF4\uAE30 +EdgeListPanel.configurationLabel.text=\uD658\uACBD \uAD6C\uC131: +EdgeListPanel.hostLabel.text=\uD638\uC2A4\uD2B8: +EdgeListPanel.fileLabel.text=\uD30C\uC77C: +EdgeListPanel.portLabel.text=\uD3EC\uD2B8: +EdgeListPanel.driverLabel.text=\uB4DC\uB77C\uC774\uBC84: +EdgeListPanel.testConnection.text=\uD14C\uC2A4\uD2B8 \uC5F0\uACB0 +EdgeListPanel.configNameLabel.text=\uD658\uACBD \uAD6C\uC131 \uBA85\uCE6D: +EdgeListPanel.alert.configuration_removed=\uD658\uACBD \uAD6C\uC131 {0}\uC774 \uC131\uACF5\uC801\uC73C\uB85C \uC81C\uAC70\uB428. +EdgeListPanel.dbLabel.text=\uB370\uC774\uD130\uBCA0\uC774\uC2A4: +EdgeListPanel.template.name=\uC0C8 \uD658\uACBD \uAD6C\uC131 +EdgeListPanel.jXHeader1.title=\uC5E3\uC9C0 \uB9AC\uC2A4\uD2B8 \uB370\uC774\uD130\uBCA0\uC774\uC2A4 +EdgeListPanel.userLabel.text=\uC0AC\uC6A9\uC790 \uC774\uB984: +EdgeListPanel.edgeQueryTextField.text=SELECT * FROM edges +EdgeListPanel.pwdLabel.text=\uBE44\uBC00\uBC88\uD638: +EdgeListPanel.nodeQueryLabel.text=\uB178\uB4DC \uC9C8\uC758\uC5B4: +EdgeListPanel.edgeQueryLabel.text=\uC5E3\uC9C0 \uC9C8\uC758\uC5B4: +EdgeListPanel.nodeQueryTextField.text=SELECT * FROM nodes +EdgeListPanel.alert.connection_successful=\uC131\uACF5\uC801\uC73C\uB85C \uC5F0\uACB0\uB428! +EdgeListPanel.removeConfigurationButton.toolTipText=\uC120\uD0DD\uB41C \uD658\uACBD \uAD6C\uC131\uC744 \uC0AD\uC81C\uD558\uAE30 +EdgeListPanel.header=2\uAC1C \uC5F4(\uC18C\uC2A4\uC640 \uD0C0\uAC9F)\uC758 \uC5E3\uC9C0 \uD14C\uC774\uBE14\uC744 \uAC16\uB294 \uB178\uB4DC \uBC0F \uC5E3\uC9C0 \uB370\uC774\uD130\uBCA0\uC774\uC2A4. \uB178\uB4DC\uC5D0 \uB300\uD55C \uAE30\uBCF8 \uD0A4\uB97C "id" \uCEEC\uB7FC\uC73C\uB85C \uC9C0\uC815\uD558\uACE0, \uC5E3\uC9C0\uC5D0 \uB300\uD574\uC11C\uB294 "source"\uC640 "target"\uC73C\uB85C \uC9C0\uC815\uD568. \uB178\uB4DC\uC5D0 \uB300\uD55C "label", "x", "y", "size" \uCEEC\uB7FC\uB4E4\uACFC, \uC5E3\uC9C0\uC5D0 \uB300\uD55C "label", "weight" \uCEEC\uB7FC\uB4E4\uC740 \uC120\uD0DD \uD56D\uBAA9\uC784. \uB3D9\uC801 \uB124\uD2B8\uC6CC\uD06C\uB4E4\uC5D0 \uB300\uD574\uC11C\uB294 \uB370\uC774\uD130 \uD0C0\uC785\uC774 date, datetime\uC774\uB098 double\uD615\uC778 'start'\uC640 'end' \uCEEC\uB7FC\uB4E4\uC744 \uC0AC\uC6A9\uD568. +EdgeListPanel.sqliteFileChooser.filefilter=SQLite \uB370\uC774\uD130\uBCA0\uC774\uC2A4 +EdgeListPanel.sqliteFileChooser.title=\uB370\uC774\uD130\uBCA0\uC774\uC2A4 \uD30C\uC77C +ImporterVnaUI.message.linear=\uC120 \uB450\uAED8\uB294 \uADF8 \uAC12\uC5D0 \uB530\uB77C \uC120\uD615\uC801\uC73C\uB85C \uC99D\uAC00\uD568. +ImporterVnaUI.message.square_root=\uC120 \uB450\uAED8\uB294 \uADF8 \uAC12\uC5D0 \uB530\uB77C \uC81C\uACF1\uADFC\uC801\uC73C\uB85C \uC99D\uAC00\uD568. +ImporterVnaUI.message.logarithmic=\uC120 \uB450\uAED8\uB294 \uADF8 \uAC12\uC5D0 \uB530\uB77C \uB85C\uADF8\uC801\uC73C\uB85C \uC99D\uAC00\uD568. diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_nl.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_nl.properties new file mode 100644 index 0000000000..d778c6e45f --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_nl.properties @@ -0,0 +1,30 @@ +OpenIDE-Module-Short-Description=Standard file and database settings UI +EdgeListBuilder.displayName=Edge List... +EdgeListPanel.configurationLabel.text=Configuratie: +EdgeListPanel.hostLabel.text=Host: +EdgeListPanel.fileLabel.text=Bestand: +EdgeListPanel.portLabel.text=Poort: +EdgeListPanel.dbLabel.text=Database: +EdgeListPanel.userLabel.text=Gebruikersnaam: +EdgeListPanel.pwdLabel.text=Wachtwoord: +EdgeListPanel.driverLabel.text=Stuurprogramma: +EdgeListPanel.nodeQueryLabel.text=Node Query: +EdgeListPanel.edgeQueryLabel.text=Edge Query: +EdgeListPanel.nodeQueryTextField.text=SELECT * FROM nodes +EdgeListPanel.testConnection.text=Verbinding testen +EdgeListPanel.edgeQueryTextField.text=SELECT * FROM edges +EdgeListPanel.configNameLabel.text=Naam configuratie: +EdgeListPanel.alert.connection_successful=Connection successful! +EdgeListPanel.alert.configuration_removed=Configuration {0} successfully removed. +EdgeListPanel.alert.configuration_unsaved=Deze configuratie is niet opgeslagen. +EdgeListPanel.template.name=Nieuwe configuratie +EdgeListPanel.removeConfigurationButton.toolTipText=Geselecteerde configuratie verwijderen +EdgeListPanel.jXHeader1.title=Edge List Database +EdgeListPanel.header=Nodes and edges database with an edge table with two columns: source and target. Name node primary key column "id" and edge columns "source" and "target". Columns "label", "x", "y" and "size" for nodes and "label" and "weight" for edges are optional. For dynamic networks, use 'start' and 'end' columns with type date, datetime or double. +EdgeListPanel.sqliteFileChooser.title=Databasebestand +EdgeListPanel.sqliteFileChooser.filefilter=SQLite-database +ImporterVnaUI.displayName=VNA import +ImporterVnaUI.message.linear=Line width increases linearly with its value. +ImporterVnaUI.message.square_root=Line width increases with a square root of its value. +ImporterVnaUI.message.logarithmic=Line width increases logarithmically with its value. +EdgeListPanel.browseButton.text=Bladeren diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_pt_BR.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_pt_BR.properties index b0820c76c4..23c20285b9 100644 --- a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_pt_BR.properties +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_pt_BR.properties @@ -1,68 +1,30 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -# C\u00e9lio Faria Jr. , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 15\:28+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Interface de usu\u00e1rio de arquivos e bancos de dados padr\u00e3o - +OpenIDE-Module-Short-Description=Interface de usuαrio de arquivos e bancos de dados padrγo EdgeListBuilder.displayName=Lista de arestas... - -EdgeListPanel.configurationLabel.text=Configura\u00e7\u00e3o\: - -EdgeListPanel.hostLabel.text=Servidor\: - -EdgeListPanel.fileLabel.text=Arquivo\: - -EdgeListPanel.portLabel.text=Porta\: - -EdgeListPanel.dbLabel.text=Banco de dados\: - -EdgeListPanel.userLabel.text=Nome de usu\u00e1rio\: - -EdgeListPanel.pwdLabel.text=Senha\: - -EdgeListPanel.driverLabel.text=Driver\: - -EdgeListPanel.nodeQueryLabel.text=Consulta n\u00f3s\: - -EdgeListPanel.edgeQueryLabel.text=Consulta arestas\: - +EdgeListPanel.configurationLabel.text=Configuraηγo: +EdgeListPanel.hostLabel.text=Servidor: +EdgeListPanel.fileLabel.text=Arquivo: +EdgeListPanel.portLabel.text=Porta: +EdgeListPanel.dbLabel.text=Banco de dados: +EdgeListPanel.userLabel.text=Nome de usuαrio: +EdgeListPanel.pwdLabel.text=Senha: +EdgeListPanel.driverLabel.text=Driver: +EdgeListPanel.nodeQueryLabel.text=Consulta nσs: +EdgeListPanel.edgeQueryLabel.text=Consulta arestas: EdgeListPanel.nodeQueryTextField.text=SELECT * FROM nodes - -EdgeListPanel.testConnection.text=Testar conex\u00e3o - +EdgeListPanel.testConnection.text=Testar conexγo EdgeListPanel.edgeQueryTextField.text=SELECT * FROM edges - -EdgeListPanel.configNameLabel.text=Nome da configura\u00e7\u00e3o\: - -EdgeListPanel.alert.connection_successful=Conex\u00e3o bem-sucedida\! - -EdgeListPanel.alert.configuration_removed=Configura\u00e7\u00e3o {0} removida com sucesso. - -EdgeListPanel.alert.configuration_unsaved=Esta configura\u00e7\u00e3o n\u00e3o est\u00e1 salva. - -EdgeListPanel.template.name=Nova configura\u00e7\u00e3o - -EdgeListPanel.removeConfigurationButton.toolTipText=Remover a configura\u00e7\u00e3o selecionada - +EdgeListPanel.configNameLabel.text=Nome da configuraηγo: +EdgeListPanel.alert.connection_successful=Conexγo bem-sucedida! +EdgeListPanel.alert.configuration_removed=Configuraηγo {0} removida com sucesso. +EdgeListPanel.alert.configuration_unsaved=Esta configuraηγo nγo estα salva. +EdgeListPanel.template.name=Nova configuraηγo +EdgeListPanel.removeConfigurationButton.toolTipText=Remover a configuraηγo selecionada EdgeListPanel.jXHeader1.title=Banco de dados de lista de arestas - -EdgeListPanel.header=Banco de dados de n\u00f3s e arestas contendo uma tabela de arestas com duas colunas\: origem e destino. A chave prim\u00e1ria do n\u00f3 \u00e9 a coluna "id" e as colunas de arestas "source" e "target". As colunas "label" (r\u00f3tulo), "x", "y" e "size" para n\u00f3s e "label" e "weight" para as arestas s\u00e3o opcionais. - +EdgeListPanel.header=Banco de dados de nσs e arestas contendo uma tabela de arestas com duas colunas: origem e destino. A chave primαria do nσ ι a coluna "id" e as colunas de arestas "source" e "target". As colunas "label" (rσtulo), "x", "y" e "size" para nσs e "label" e "weight" para as arestas sγo opcionais. EdgeListPanel.sqliteFileChooser.title=Arquivo de banco de dados - EdgeListPanel.sqliteFileChooser.filefilter=Banco de dados SQLite - ImporterVnaUI.displayName=Importar VNA - ImporterVnaUI.message.linear=A largura de linha aumenta linearmente com o seu valor. - ImporterVnaUI.message.square_root=A largura de linha aumenta com o quadrado do seu valor. - ImporterVnaUI.message.logarithmic=A largura de linha aumenta logaritmicamente com o seu valor. - EdgeListPanel.browseButton.text=Procurar diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_ro.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_ro.properties new file mode 100644 index 0000000000..2418949542 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_ro.properties @@ -0,0 +1,32 @@ + + +EdgeListPanel.edgeQueryTextField.text=SELECT * FROM edges +EdgeListPanel.alert.connection_successful=Conexiune reu\u0219it\u0103! +EdgeListPanel.alert.configuration_unsaved=Aceast\u0103 configura\u021Bie nu este salvat\u0103. +EdgeListPanel.testConnection.text=Testeaz\u0103 conexiunea +EdgeListPanel.configNameLabel.text=Nume configura\u021Bie: +EdgeListPanel.removeConfigurationButton.toolTipText=Elimin\u0103 configura\u021Bia selectat\u0103 +EdgeListPanel.template.name=Configura\u021Bie nou\u0103 +ImporterVnaUI.message.square_root=L\u0103\u021Bimea liniei cre\u0219te cu un radical al valorii sale. +ImporterVnaUI.message.linear=L\u0103\u021Bimea liniei cre\u0219te liniar cu valoarea sa. +EdgeListPanel.header=Baz\u0103 de date de noduri \u0219i muchii cu un tabel de muchii cu dou\u0103 coloane: surs\u0103 \u0219i \u021Bint\u0103. Numele nodului cheie primar\u0103 \u00EEn coloana "id" \u0219i coloanele de muchii "source" \u0219i "target". Coloanele "label", "x", "y" \u0219i "size" pentru noduri \u0219i "label" \u0219i "weight" pentru muchii sunt op\u021Bionale. Pentru re\u021Bele dinamice, folose\u0219te coloanele 'start' \u0219i 'end' de tipul "date", "datetime" sau "double". +EdgeListPanel.fileLabel.text=Fi\u015Fier: +OpenIDE-Module-Short-Description=Interfa\u021B\u0103 standard pentru fi\u0219iere \u0219i baze de date +EdgeListBuilder.displayName=List\u0103 de muchii... +EdgeListPanel.configurationLabel.text=Configura\u021Bie: +EdgeListPanel.hostLabel.text=Gazd\u0103: +EdgeListPanel.dbLabel.text=Baz\u0103 de date: +EdgeListPanel.userLabel.text=Nume de utilizator: +EdgeListPanel.driverLabel.text=Tip: +EdgeListPanel.nodeQueryLabel.text=Interogare nod: +EdgeListPanel.edgeQueryLabel.text=Interogare muchie: +EdgeListPanel.nodeQueryTextField.text=SELECT * FROM nodes +EdgeListPanel.jXHeader1.title=Baz\u0103 de date de liste de muchii +EdgeListPanel.sqliteFileChooser.title=Fi\u0219ier baz\u0103 de date +EdgeListPanel.sqliteFileChooser.filefilter=Baz\u0103 de date SQLite +ImporterVnaUI.displayName=Import VNA +ImporterVnaUI.message.logarithmic=L\u0103\u021Bimea liniei cre\u0219te logaritmic cu valoarea sa. +EdgeListPanel.browseButton.text=Navigheaz\u0103 +EdgeListPanel.portLabel.text=Port: +EdgeListPanel.pwdLabel.text=Parol\u0103: +EdgeListPanel.alert.configuration_removed=Configura\u021Bia {0} eliminat\u0103 cu succes. diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_ru.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_ru.properties index 53b457d1a9..11709913f2 100644 --- a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_ru.properties +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_ru.properties @@ -1,67 +1,30 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-15 08\:37+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - OpenIDE-Module-Short-Description=Standard file and database settings UI - EdgeListBuilder.displayName=\u0421\u043f\u0438\u0441\u043e\u043a \u0440\u0451\u0431\u0435\u0440... - -EdgeListPanel.configurationLabel.text=\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f\: - -EdgeListPanel.hostLabel.text=\u0425\u043e\u0441\u0442\: - -EdgeListPanel.fileLabel.text=\u0424\u0430\u0439\u043b\: - -EdgeListPanel.portLabel.text=\u041f\u043e\u0440\u0442\: - -EdgeListPanel.dbLabel.text=\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445\: - -EdgeListPanel.userLabel.text=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\: - -EdgeListPanel.pwdLabel.text=\u041f\u0430\u0440\u043e\u043b\u044c\: - -EdgeListPanel.driverLabel.text=\u0414\u0440\u0430\u0439\u0432\u0435\u0440\: - -EdgeListPanel.nodeQueryLabel.text=\u0417\u0430\u043f\u0440\u043e\u0441 \u0443\u0437\u043b\u043e\u0432\: - -EdgeListPanel.edgeQueryLabel.text=\u0417\u0430\u043f\u0440\u043e\u0441 \u0440\u0451\u0431\u0435\u0440\: - +EdgeListPanel.configurationLabel.text=\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f: +EdgeListPanel.hostLabel.text=\u0425\u043e\u0441\u0442: +EdgeListPanel.fileLabel.text=\u0424\u0430\u0439\u043b: +EdgeListPanel.portLabel.text=\u041f\u043e\u0440\u0442: +EdgeListPanel.dbLabel.text=\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445: +EdgeListPanel.userLabel.text=\u0418\u043c\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f: +EdgeListPanel.pwdLabel.text=\u041f\u0430\u0440\u043e\u043b\u044c: +EdgeListPanel.driverLabel.text=\u0414\u0440\u0430\u0439\u0432\u0435\u0440: +EdgeListPanel.nodeQueryLabel.text=\u0417\u0430\u043f\u0440\u043e\u0441 \u0443\u0437\u043b\u043e\u0432: +EdgeListPanel.edgeQueryLabel.text=\u0417\u0430\u043f\u0440\u043e\u0441 \u0440\u0451\u0431\u0435\u0440: EdgeListPanel.nodeQueryTextField.text=SELECT * FROM nodes - EdgeListPanel.testConnection.text=\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f - EdgeListPanel.edgeQueryTextField.text=SELECT * FROM edges - -EdgeListPanel.configNameLabel.text=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438\: - -EdgeListPanel.alert.connection_successful=\u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e\! - +EdgeListPanel.configNameLabel.text=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438: +EdgeListPanel.alert.connection_successful=\u0421\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u043e \u0443\u0441\u043f\u0435\u0448\u043d\u043e! EdgeListPanel.alert.configuration_removed=\u041a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f {0} \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u0430. - EdgeListPanel.alert.configuration_unsaved=\u0414\u0430\u043d\u043d\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f \u043d\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0430. - EdgeListPanel.template.name=\u041d\u043e\u0432\u0430\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u044f. - EdgeListPanel.removeConfigurationButton.toolTipText=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438. - EdgeListPanel.jXHeader1.title=\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043f\u0438\u0441\u043a\u0430 \u0440\u0451\u0431\u0435\u0440 - -EdgeListPanel.header=\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0443\u0437\u043b\u0430\u043c\u0438 \u0438 \u0440\u0435\u0431\u0440\u0430\u043c\u0438. \u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0441 \u0440\u0451\u0431\u0440\u0430\u043c\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u0432\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438\: source \u0438 target. \u041f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0443\u0437\u043b\u043e\u0432 -- \u043a\u043e\u043b\u043e\u043d\u043a\u0430 "id" and edge columns "source" and "target". \u041a\u043e\u043b\u043e\u043d\u043a\u0438 "label", "x", "y" \u0438 "size" \u0434\u043b\u044f \u0443\u0437\u043b\u043e\u0432 \u0438 "label" \u0438 "weight" \u0434\u043b\u044f \u0440\u0451\u0431\u0435\u0440 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c\u0438. \u0414\u043b\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0433\u0440\u0430\u0444\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 'start' \u0438 'end' \u0441 \u0442\u0438\u043f\u0430\u043c\u0438 date, datetime \u0438\u043b\u0438 double. - +EdgeListPanel.header=\u0411\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u0443\u0437\u043b\u0430\u043c\u0438 \u0438 \u0440\u0435\u0431\u0440\u0430\u043c\u0438. \u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u0441 \u0440\u0451\u0431\u0440\u0430\u043c\u0438 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0434\u0432\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438: source \u0438 target. \u041f\u0435\u0440\u0432\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u044e\u0447 \u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u0435 \u0443\u0437\u043b\u043e\u0432 -- \u043a\u043e\u043b\u043e\u043d\u043a\u0430 "id" and edge columns "source" and "target". \u041a\u043e\u043b\u043e\u043d\u043a\u0438 "label", "x", "y" \u0438 "size" \u0434\u043b\u044f \u0443\u0437\u043b\u043e\u0432 \u0438 "label" \u0438 "weight" \u0434\u043b\u044f \u0440\u0451\u0431\u0435\u0440 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u043c\u0438. \u0414\u043b\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0433\u0440\u0430\u0444\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043a\u043e\u043b\u043e\u043d\u043a\u0438 'start' \u0438 'end' \u0441 \u0442\u0438\u043f\u0430\u043c\u0438 date, datetime \u0438\u043b\u0438 double. EdgeListPanel.sqliteFileChooser.title=\u0424\u0430\u0439\u043b \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445 - -EdgeListPanel.sqliteFileChooser.filefilter=\u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 SQLite - +EdgeListPanel.sqliteFileChooser.filefilter=\u0431\u0430\u0437\u0430 \u0434\u0430\u043d\u043d\u044b\u0445 SQLite ImporterVnaUI.displayName=VNA import - ImporterVnaUI.message.linear=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 \u043b\u0438\u043d\u0438\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043b\u0438\u043d\u0435\u0439\u043d\u043e \u0441 \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. - ImporterVnaUI.message.square_root=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 \u043b\u0438\u043d\u0438\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043a\u043e\u0440\u0435\u043d\u044c \u0438\u0437 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. - ImporterVnaUI.message.logarithmic=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 \u043b\u0438\u043d\u0438\u0438 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043b\u043e\u0433\u0430\u0440\u0438\u0444\u043c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f. - EdgeListPanel.browseButton.text=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440 diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_th.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_tr.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_tr.properties new file mode 100644 index 0000000000..a3af58e687 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_tr.properties @@ -0,0 +1,30 @@ +OpenIDE-Module-Short-Description=Standard file and database settings UI +EdgeListBuilder.displayName=Edge List... +EdgeListPanel.configurationLabel.text=Configuration: +EdgeListPanel.hostLabel.text=Host: +EdgeListPanel.fileLabel.text=Dosya: +EdgeListPanel.portLabel.text=Port: +EdgeListPanel.dbLabel.text=Database: +EdgeListPanel.userLabel.text=User Name: +EdgeListPanel.pwdLabel.text=Password: +EdgeListPanel.driverLabel.text=Driver: +EdgeListPanel.nodeQueryLabel.text=Node Query: +EdgeListPanel.edgeQueryLabel.text=Edge Query: +EdgeListPanel.nodeQueryTextField.text=SELECT * FROM nodes +EdgeListPanel.testConnection.text=Test Connection +EdgeListPanel.edgeQueryTextField.text=SELECT * FROM edges +EdgeListPanel.configNameLabel.text=Configuration Name: +EdgeListPanel.alert.connection_successful=Connection successful! +EdgeListPanel.alert.configuration_removed=Configuration {0} successfully removed. +EdgeListPanel.alert.configuration_unsaved=This configuration is not saved. +EdgeListPanel.template.name=New Configuration +EdgeListPanel.removeConfigurationButton.toolTipText=Remove selected configuration +EdgeListPanel.jXHeader1.title=Edge List Database +EdgeListPanel.header=Nodes and edges database with an edge table with two columns: source and target. Name node primary key column "id" and edge columns "source" and "target". Columns "label", "x", "y" and "size" for nodes and "label" and "weight" for edges are optional. For dynamic networks, use 'start' and 'end' columns with type date, datetime or double. +EdgeListPanel.sqliteFileChooser.title=Database file +EdgeListPanel.sqliteFileChooser.filefilter=SQLite database +ImporterVnaUI.displayName=VNA import +ImporterVnaUI.message.linear=Line width increases linearly with its value. +ImporterVnaUI.message.square_root=Line width increases with a square root of its value. +ImporterVnaUI.message.logarithmic=Line width increases logarithmically with its value. +EdgeListPanel.browseButton.text=Browse diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_uk.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_uk.properties new file mode 100644 index 0000000000..7ac493d100 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_uk.properties @@ -0,0 +1,30 @@ +OpenIDE-Module-Short-Description=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0438\u0439 \u0456\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u0444\u0430\u0439\u043B\u0456\u0432 \u0456 \u0431\u0430\u0437 \u0434\u0430\u043D\u0438\u0445 +EdgeListPanel.header=\u0411\u0430\u0437\u0430 \u0434\u0430\u043D\u0438\u0445 \u0432\u0443\u0437\u043B\u0456\u0432 \u0456 \u0440\u0435\u0431\u0435\u0440 \u0456\u0437 \u0442\u0430\u0431\u043B\u0438\u0446\u0435\u044E \u043A\u0440\u0430\u0457\u0432 \u0456\u0437 \u0434\u0432\u043E\u043C\u0430 \u0441\u0442\u043E\u0432\u043F\u0446\u044F\u043C\u0438: \u0432\u0438\u0445\u0456\u0434\u043D\u0438\u043C \u0456 \u0446\u0456\u043B\u044C\u043E\u0432\u0438\u043C. \u041D\u0430\u0437\u0432\u0456\u0442\u044C \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C \u043F\u0435\u0440\u0432\u0438\u043D\u043D\u043E\u0433\u043E \u043A\u043B\u044E\u0447\u0430 \u0432\u0443\u0437\u043B\u0430 "id", \u0430 \u0441\u0442\u043E\u0432\u043F\u0446\u0456 \u043A\u0440\u0430\u044E "source" \u0456 "target". \u0421\u0442\u043E\u0432\u043F\u0446\u0456 \u00ABlabel\u00BB, \u00ABx\u00BB, \u00ABy\u00BB \u0456 \u00ABsize\u00BB \u0434\u043B\u044F \u0432\u0443\u0437\u043B\u0456\u0432 \u0456 \u00ABlabel\u00BB \u0456 \u00ABweight\u00BB \u0434\u043B\u044F \u043A\u0440\u0430\u0457\u0432 \u0454 \u043D\u0435\u043E\u0431\u043E\u0432\u2019\u044F\u0437\u043A\u043E\u0432\u0438\u043C\u0438. \u0414\u043B\u044F \u0434\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0438\u0445 \u043C\u0435\u0440\u0435\u0436 \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0439\u0442\u0435 \u0441\u0442\u043E\u0432\u043F\u0446\u0456 \u00AB\u043F\u043E\u0447\u0430\u0442\u043E\u043A\u00BB \u0456 \u00AB\u043A\u0456\u043D\u0435\u0446\u044C\u00BB \u0456\u0437 \u0442\u0438\u043F\u043E\u043C date, datetime \u0430\u0431\u043E double. +EdgeListPanel.nodeQueryLabel.text=\u0417\u0430\u043F\u0438\u0442 \u0432\u0443\u0437\u043B\u0430: +EdgeListPanel.alert.connection_successful=\u041F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u044F \u0443\u0441\u043F\u0456\u0448\u043D\u0435! +EdgeListPanel.testConnection.text=\u0422\u0435\u0441\u0442\u043E\u0432\u0435 \u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u043D\u044F +EdgeListPanel.sqliteFileChooser.title=\u0424\u0430\u0439\u043B \u0431\u0430\u0437\u0438 \u0434\u0430\u043D\u0438\u0445 +EdgeListPanel.driverLabel.text=\u0412\u043E\u0434\u0456\u0439: +EdgeListPanel.sqliteFileChooser.filefilter=\u0411\u0430\u0437\u0430 \u0434\u0430\u043D\u0438\u0445 SQLite +EdgeListPanel.hostLabel.text=\u0425\u043E\u0441\u0442: +EdgeListBuilder.displayName=\u0421\u043F\u0438\u0441\u043E\u043A \u043A\u0440\u0430\u0457\u0432... +EdgeListPanel.configurationLabel.text=\u041A\u043E\u043D\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u044F: +EdgeListPanel.fileLabel.text=\u0424\u0430\u0439\u043B: +EdgeListPanel.portLabel.text=\u041F\u043E\u0440\u0442: +EdgeListPanel.dbLabel.text=\u0411\u0430\u0437\u0430 \u0434\u0430\u043D\u0438\u0445: +EdgeListPanel.userLabel.text=\u0406\u043C'\u044F \u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430: +EdgeListPanel.pwdLabel.text=\u041F\u0430\u0440\u043E\u043B\u044C: +EdgeListPanel.edgeQueryTextField.text=\u0412\u0418\u0411\u0420\u0410\u0422\u0418 * \u0412\u0406\u0414 \u043A\u0440\u0430\u0457\u0432 +EdgeListPanel.configNameLabel.text=\u041D\u0430\u0437\u0432\u0430 \u043A\u043E\u043D\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u0457: +EdgeListPanel.alert.configuration_removed=\u041A\u043E\u043D\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u044E {0} \u0443\u0441\u043F\u0456\u0448\u043D\u043E \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u043E. +EdgeListPanel.alert.configuration_unsaved=\u0426\u044F \u043A\u043E\u043D\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u044F \u043D\u0435 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043D\u0430. +EdgeListPanel.template.name=\u041D\u043E\u0432\u0430 \u043A\u043E\u043D\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u044F +EdgeListPanel.removeConfigurationButton.toolTipText=\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u0432\u0438\u0431\u0440\u0430\u043D\u0443 \u043A\u043E\u043D\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u044E +EdgeListPanel.jXHeader1.title=\u0411\u0430\u0437\u0430 \u0434\u0430\u043D\u0438\u0445 Edge List +ImporterVnaUI.displayName=\u0406\u043C\u043F\u043E\u0440\u0442 VNA +ImporterVnaUI.message.linear=\u0428\u0438\u0440\u0438\u043D\u0430 \u043B\u0456\u043D\u0456\u0457 \u043B\u0456\u043D\u0456\u0439\u043D\u043E \u0437\u0440\u043E\u0441\u0442\u0430\u0454 \u0437\u0456 \u0441\u0432\u043E\u0457\u043C \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F\u043C. +ImporterVnaUI.message.square_root=\u0428\u0438\u0440\u0438\u043D\u0430 \u043B\u0456\u043D\u0456\u0457 \u0437\u0431\u0456\u043B\u044C\u0448\u0443\u0454\u0442\u044C\u0441\u044F \u043D\u0430 \u043A\u0432\u0430\u0434\u0440\u0430\u0442\u043D\u0438\u0439 \u043A\u043E\u0440\u0456\u043D\u044C \u0456\u0437 \u0457\u0457 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F. +ImporterVnaUI.message.logarithmic=\u0428\u0438\u0440\u0438\u043D\u0430 \u043B\u0456\u043D\u0456\u0457 \u043B\u043E\u0433\u0430\u0440\u0438\u0444\u043C\u0456\u0447\u043D\u043E \u0437\u0440\u043E\u0441\u0442\u0430\u0454 \u0437\u0456 \u0441\u0432\u043E\u0457\u043C \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F\u043C. +EdgeListPanel.browseButton.text=\u043F\u0435\u0440\u0435\u0433\u043B\u044F\u0434\u0430\u0442\u0438 +EdgeListPanel.edgeQueryLabel.text=\u0413\u0440\u0430\u043D\u0438\u0447\u043D\u0438\u0439 \u0437\u0430\u043F\u0438\u0442: +EdgeListPanel.nodeQueryTextField.text=SELECT * FROM \u0432\u0443\u0437\u043B\u0456\u0432 diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_zh_CN.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_zh_CN.properties index 29b6412d26..77ce196009 100644 --- a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_zh_CN.properties +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_zh_CN.properties @@ -1,66 +1,30 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:11+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - OpenIDE-Module-Short-Description=\u6807\u51c6\u7684\u6587\u4ef6\u548c\u6570\u636e\u5e93\u8bbe\u7f6e\u754c\u9762 - -EdgeListBuilder.displayName=\u8fb9\u540d\u5355... - +EdgeListBuilder.displayName=\u8FB9\u5217\u8868... EdgeListPanel.configurationLabel.text=\u914d\u7f6e\uff1a - EdgeListPanel.hostLabel.text=\u4e3b\u673a\uff1a - EdgeListPanel.fileLabel.text=\u6587\u4ef6\uff1a - EdgeListPanel.portLabel.text=\u7aef\u53e3\uff1a - EdgeListPanel.dbLabel.text=\u6570\u636e\u5e93\uff1a - EdgeListPanel.userLabel.text=\u7528\u6237\u540d\uff1a - EdgeListPanel.pwdLabel.text=\u5bc6\u7801\uff1a - EdgeListPanel.driverLabel.text=\u9a71\u52a8\u7a0b\u5e8f\uff1a - EdgeListPanel.nodeQueryLabel.text=\u8282\u70b9\u67e5\u8be2\uff1a - EdgeListPanel.edgeQueryLabel.text=\u8fb9\u67e5\u8be2\uff1a - -EdgeListPanel.nodeQueryTextField.text=\u4ece\u8282\u70b9\u9009\u62e9* - +EdgeListPanel.nodeQueryTextField.text=SELECT * FROM \u8282\u70B9 EdgeListPanel.testConnection.text=\u6d4b\u8bd5\u8fde\u63a5 - -EdgeListPanel.edgeQueryTextField.text=\u4ece\u8fb9\u9009\u62e9* - +EdgeListPanel.edgeQueryTextField.text=SELECT * FROM \u8FB9 EdgeListPanel.configNameLabel.text=\u914d\u7f6e\u540d\u79f0\uff1a - EdgeListPanel.alert.connection_successful=\u8fde\u63a5\u6210\u529f\uff01 - EdgeListPanel.alert.configuration_removed=\u914d\u7f6e{0}\u6210\u529f\u5220\u9664\u3002 - EdgeListPanel.alert.configuration_unsaved=\u6b64\u914d\u7f6e\u4e0d\u4f1a\u88ab\u4fdd\u5b58\u3002 - EdgeListPanel.template.name=\u65b0\u914d\u7f6e - EdgeListPanel.removeConfigurationButton.toolTipText=\u5220\u9664\u9009\u5b9a\u7684\u914d\u7f6e - EdgeListPanel.jXHeader1.title=\u8fb9\u5217\u8868\u6570\u636e\u5e93 - -EdgeListPanel.header=\u8282\u70b9\u548c\u8fb9\u7684\u6570\u636e\u5e93\u8868\u683c\u6709\u4e24\u5217\uff1a\u6e90\u548c\u76ee\u6807\u3002\u547d\u540d\u8282\u70b9\u7684\u4e3b\u8981\u7684\u5217\u201cID\u201d\u548c\u8fb9\u680f\u201c\u6e90\u201d\u548c\u201c\u76ee\u6807\u201d\u3002\u5217\u201c\u6807\u7b7e\u201d\uff0c\u201cx\u201d\uff0c\u201cy\u201d\u548c\u201c\u5927\u5c0f\u201d\u8282\u70b9\u548c\u8fb9\u7684\u201c\u6807\u7b7e\u201d\u548c\u201c\u6743\u91cd\u201d\u662f\u53ef\u9009\u7684\u3002\u5bf9\u4e8e\u52a8\u6001\u7684\u7f51\u7edc\uff0c\u4f7f\u7528\u201c\u5f00\u59cb\u201d\u548c\u201c\u7ed3\u675f\u201d\u5217\u7c7b\u578b\u65e5\u671f\uff0c\u65e5\u671f\u65f6\u95f4\u6216\u53cc\u7cbe\u5ea6\u578b\u3002 - +EdgeListPanel.header=\u8282\u70B9\u548C\u8FB9\u7684\u6570\u636E\u5E93\u8868\u683C\u6709\u4E24\u5217\uFF1A"source" \u548C "target"\u3002\u8282\u70B9\u4E3B\u952E\u5217\u547D\u540D\u4E3A "id"\uFF0C\u8FB9\u7684\u5217\u547D\u540D\u4E3A "source" \u548C "target"\u3002\u8282\u70B9\u7684 "label"\u3001"x"\u3001"y" \u548C "size" \u5217\u4EE5\u53CA\u8FB9\u7684 "label" \u548C "weight" \u5217\u662F\u53EF\u9009\u7684\u3002\u5BF9\u4E8E\u52A8\u6001\u7F51\u7EDC\uFF0C\u5728 'start' \u548C 'end' \u5217\u4F7F\u7528\u4E3A date\u3001datetime \u6216 double \u7684\u7C7B\u578B\u3002 EdgeListPanel.sqliteFileChooser.title=\u6570\u636e\u5e93\u6587\u4ef6 - EdgeListPanel.sqliteFileChooser.filefilter=SQLite\u6570\u636e\u5e93 - -ImporterVnaUI.displayName=VNA\u7684\u8f93\u5165 - +ImporterVnaUI.displayName=VNA\u8F93\u5165 ImporterVnaUI.message.linear=\u7ebf\u5bbd\u968f\u7740\u5b83\u7684\u503c\u7ebf\u6027\u589e\u52a0\u3002 - ImporterVnaUI.message.square_root=\u7ebf\u5bbd\u968f\u7740\u5176\u503c\u7684\u5e73\u65b9\u6839\u800c\u589e\u52a0\u3002 - ImporterVnaUI.message.logarithmic=\u7ebf\u5bbd\u968f\u7740\u5176\u503c\u7684\u5bf9\u6570\u800c\u589e\u52a0\u3002 - EdgeListPanel.browseButton.text=\u6d4f\u89c8 diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_zh_TW.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_zh_TW.properties new file mode 100644 index 0000000000..89a653301c --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/Bundle_zh_TW.properties @@ -0,0 +1,30 @@ +OpenIDE-Module-Short-Description=Standard file and database settings UI +EdgeListBuilder.displayName=Edge List... +EdgeListPanel.configurationLabel.text=Configuration: +EdgeListPanel.hostLabel.text=Host: +EdgeListPanel.fileLabel.text=File: +EdgeListPanel.portLabel.text=Port: +EdgeListPanel.dbLabel.text=Database: +EdgeListPanel.userLabel.text=User Name: +EdgeListPanel.pwdLabel.text=Password: +EdgeListPanel.driverLabel.text=Driver: +EdgeListPanel.nodeQueryLabel.text=Node Query: +EdgeListPanel.edgeQueryLabel.text=Edge Query: +EdgeListPanel.nodeQueryTextField.text=SELECT * FROM nodes +EdgeListPanel.testConnection.text=Test Connection +EdgeListPanel.edgeQueryTextField.text=SELECT * FROM edges +EdgeListPanel.configNameLabel.text=Configuration Name: +EdgeListPanel.alert.connection_successful=Connection successful! +EdgeListPanel.alert.configuration_removed=Configuration {0} successfully removed. +EdgeListPanel.alert.configuration_unsaved=This configuration is not saved. +EdgeListPanel.template.name=New Configuration +EdgeListPanel.removeConfigurationButton.toolTipText=Remove selected configuration +EdgeListPanel.jXHeader1.title=Edge List Database +EdgeListPanel.header=Nodes and edges database with an edge table with two columns: source and target. Name node primary key column "id" and edge columns "source" and "target". Columns "label", "x", "y" and "size" for nodes and "label" and "weight" for edges are optional. For dynamic networks, use 'start' and 'end' columns with type date, datetime or double. +EdgeListPanel.sqliteFileChooser.title=Database file +EdgeListPanel.sqliteFileChooser.filefilter=SQLite database +ImporterVnaUI.displayName=VNA import +ImporterVnaUI.message.linear=Line width increases linearly with its value. +ImporterVnaUI.message.square_root=Line width increases with a square root of its value. +ImporterVnaUI.message.logarithmic=Line width increases logarithmically with its value. +EdgeListPanel.browseButton.text=Browse diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/cs.po b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/cs.po deleted file mode 100644 index f6c5511323..0000000000 --- a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/cs.po +++ /dev/null @@ -1,109 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-13 16:48+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "RozhranΓ­ standardnΓ­ho souboru a nastavenΓ­ databΓ‘ze" - -msgid "EdgeListBuilder.displayName" -msgstr "Seznam hran..." - -msgid "EdgeListPanel.configurationLabel.text" -msgstr "NastavenΓ­:" - -msgid "EdgeListPanel.hostLabel.text" -msgstr "Hostitel:" - -msgid "EdgeListPanel.fileLabel.text" -msgstr "Soubor:" - -msgid "EdgeListPanel.portLabel.text" -msgstr "Port:" - -msgid "EdgeListPanel.dbLabel.text" -msgstr "DatabΓ‘ze:" - -msgid "EdgeListPanel.userLabel.text" -msgstr "UΕΎivatelskΓ© jmΓ©no:" - -msgid "EdgeListPanel.pwdLabel.text" -msgstr "Heslo:" - -msgid "EdgeListPanel.driverLabel.text" -msgstr "Ovladač:" - -msgid "EdgeListPanel.nodeQueryLabel.text" -msgstr "Dotaz uzlu:" - -msgid "EdgeListPanel.edgeQueryLabel.text" -msgstr "Dotaz hrany:" - -msgid "EdgeListPanel.nodeQueryTextField.text" -msgstr "Uzly SELECT * FROM " - -msgid "EdgeListPanel.testConnection.text" -msgstr "ZkouΕ‘ka pΕ™ipojenΓ­" - -msgid "EdgeListPanel.edgeQueryTextField.text" -msgstr "Hrany SELECT * FROM " - -msgid "EdgeListPanel.configNameLabel.text" -msgstr "NΓ‘zev nastavenΓ­:" - -msgid "EdgeListPanel.alert.connection_successful" -msgstr "PΕ™ipojenΓ­ bylo ΓΊspΔ›Ε‘nΓ©!" - -msgid "EdgeListPanel.alert.configuration_removed" -msgstr "NastavenΓ­ {0} ΓΊspΔ›Ε‘nΔ› odstranΔ›no." - -msgid "EdgeListPanel.alert.configuration_unsaved" -msgstr "Toto nastavenΓ­ nenΓ­ uloΕΎeno." - -msgid "EdgeListPanel.template.name" -msgstr "NovΓ© nastavenΓ­" - -msgid "EdgeListPanel.removeConfigurationButton.toolTipText" -msgstr "Odstranit vybranΓ© nastavenΓ­" - -msgid "EdgeListPanel.jXHeader1.title" -msgstr "DatabΓ‘ze seznamu hran" - -msgid "EdgeListPanel.header" -msgstr "DatabΓ‘ze uzkΕ― a hran s tabulkou hran se dvΔ›ma sloupci: zdroj a cΓ­l. Uzel nΓ‘zvu hlavnΓ­ klíč sloupce \"id\" a sloupce hrany \"source\" a \"target\". Sloupce \"label\", \"x\", \"y\" a \"size\" pro uzle a \"label\" a \"weight\" pro hrany jsou nepovinnΓ©. Pro dynamickΓ© sΓ­tΔ› pouΕΎijte sloupce 'start' a 'end' w datovΓ½m typem datetime nebo double." - -msgid "EdgeListPanel.sqliteFileChooser.title" -msgstr "Soubor databΓ‘ze" - -msgid "EdgeListPanel.sqliteFileChooser.filefilter" -msgstr "DatabΓ‘ze SQLite" - -msgid "ImporterVnaUI.displayName" -msgstr "Import VNA" - -msgid "ImporterVnaUI.message.linear" -msgstr "Ε Γ­Ε™ka Ε™Γ‘dku se lineΓ‘rnΔ› zvyΕ‘uje pomocΓ­ jejΓ­ hodnoty." - -msgid "ImporterVnaUI.message.square_root" -msgstr "Ε Γ­Ε™ka Ε™Γ‘dku se zvyΕ‘uje pomocΓ­ odmocniny jejΓ­ hodnoty." - -msgid "ImporterVnaUI.message.logarithmic" -msgstr "Ε Γ­Ε™ka Ε™Γ‘dku se logaritmicky zvyΕ‘uje pomocΓ­ jejΓ­ hodnoty." - -msgid "EdgeListPanel.browseButton.text" -msgstr "ProchΓ‘zet" diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/es.po b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/es.po deleted file mode 100644 index 303ecc9ccb..0000000000 --- a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/es.po +++ /dev/null @@ -1,110 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 22:11+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interfaz de usuario estΓ‘ndar para los parΓ‘metros de importar archivos y bases de datos" - -msgid "EdgeListBuilder.displayName" -msgstr "Lista de aristas..." - -msgid "EdgeListPanel.configurationLabel.text" -msgstr "ConfiguraciΓ³n:" - -msgid "EdgeListPanel.hostLabel.text" -msgstr "Servidor:" - -msgid "EdgeListPanel.fileLabel.text" -msgstr "Archivo:" - -msgid "EdgeListPanel.portLabel.text" -msgstr "Puerto:" - -msgid "EdgeListPanel.dbLabel.text" -msgstr "Base de datos:" - -msgid "EdgeListPanel.userLabel.text" -msgstr "Nombre de usuario:" - -msgid "EdgeListPanel.pwdLabel.text" -msgstr "ContraseΓ±a:" - -msgid "EdgeListPanel.driverLabel.text" -msgstr "Controlador:" - -msgid "EdgeListPanel.nodeQueryLabel.text" -msgstr "Consulta para los nodos:" - -msgid "EdgeListPanel.edgeQueryLabel.text" -msgstr "Consulta para las aristas:" - -msgid "EdgeListPanel.nodeQueryTextField.text" -msgstr "SELECT * FROM nodes" - -msgid "EdgeListPanel.testConnection.text" -msgstr "Comprobar conexiΓ³n" - -msgid "EdgeListPanel.edgeQueryTextField.text" -msgstr "SELECT * FROM edges" - -msgid "EdgeListPanel.configNameLabel.text" -msgstr "Nombre de la configuraciΓ³n" - -msgid "EdgeListPanel.alert.connection_successful" -msgstr "Β‘ConexiΓ³n exitosa!" - -msgid "EdgeListPanel.alert.configuration_removed" -msgstr "ConfiguraciΓ³n {0} suprimida con Γ©xito." - -msgid "EdgeListPanel.alert.configuration_unsaved" -msgstr "Esta configuraciΓ³n no estΓ‘ guardada." - -msgid "EdgeListPanel.template.name" -msgstr "Nueva configuraciΓ³n" - -msgid "EdgeListPanel.removeConfigurationButton.toolTipText" -msgstr "Suprimir configuraciΓ³n seleccionada" - -msgid "EdgeListPanel.jXHeader1.title" -msgstr "Base de datos de lista de aristas" - -msgid "EdgeListPanel.header" -msgstr "Base de datos de nodos y aristas con una tabla de aristas con dos columnas: origen y destino. Nombra la columna clave primaria de los nodos \"id\" y las columnas de las aristas \"source\" (origen) y \"target\" (destino). Las columnas \"label\" (etiqueta), \"x\", \"y\" y \"size\" (tamaΓ±o) para los nodos y las columnas \"label\" y \"weight\" (peso) para las aristas son opcionales. Para redes dinΓ‘micas, utiliza columnas 'start' (inicio) y 'end' (fin) de tipo date, datetime o double." - -msgid "EdgeListPanel.sqliteFileChooser.title" -msgstr "Archivo de base de datos" - -msgid "EdgeListPanel.sqliteFileChooser.filefilter" -msgstr "Base de datos SQLite" - -msgid "ImporterVnaUI.displayName" -msgstr "Importar VNA" - -msgid "ImporterVnaUI.message.linear" -msgstr "El ancho de lΓ­nea incrementa linealmente con su valor." - -msgid "ImporterVnaUI.message.square_root" -msgstr "El ancho de lΓ­nea incrementa con la raiz cuadrada con su valor." - -msgid "ImporterVnaUI.message.logarithmic" -msgstr "El ancho de lΓ­nea incrementa logarΓ­tmicamente con su valor." - -msgid "EdgeListPanel.browseButton.text" -msgstr "Explorar" diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/fr.po b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/fr.po deleted file mode 100644 index 6bd908b536..0000000000 --- a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/fr.po +++ /dev/null @@ -1,110 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-22 17:49+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "GUI des paramΓ¨tres d'import de fichiers et bases de donnΓ©es" - -msgid "EdgeListBuilder.displayName" -msgstr "Liste de liens..." - -msgid "EdgeListPanel.configurationLabel.text" -msgstr "Configuration :" - -msgid "EdgeListPanel.hostLabel.text" -msgstr "HΓ΄te :" - -msgid "EdgeListPanel.fileLabel.text" -msgstr "Fichier :" - -msgid "EdgeListPanel.portLabel.text" -msgstr "Port :" - -msgid "EdgeListPanel.dbLabel.text" -msgstr "Base de donnΓ©es :" - -msgid "EdgeListPanel.userLabel.text" -msgstr "Nom d'utilisateur :" - -msgid "EdgeListPanel.pwdLabel.text" -msgstr "Mot de passe :" - -msgid "EdgeListPanel.driverLabel.text" -msgstr "Pilote :" - -msgid "EdgeListPanel.nodeQueryLabel.text" -msgstr "RequΓͺte des noeuds :" - -msgid "EdgeListPanel.edgeQueryLabel.text" -msgstr "RequΓͺte des liens :" - -msgid "EdgeListPanel.nodeQueryTextField.text" -msgstr "SELECT * FROM nodes" - -msgid "EdgeListPanel.testConnection.text" -msgstr "Tester la connection" - -msgid "EdgeListPanel.edgeQueryTextField.text" -msgstr "SELECT * FROM edges" - -msgid "EdgeListPanel.configNameLabel.text" -msgstr "Nom de configuration :" - -msgid "EdgeListPanel.alert.connection_successful" -msgstr "ConnectΓ© !" - -msgid "EdgeListPanel.alert.configuration_removed" -msgstr "Configuration {0} supprimΓ©e." - -msgid "EdgeListPanel.alert.configuration_unsaved" -msgstr "Cette configuration n'est pas enregistrΓ©e." - -msgid "EdgeListPanel.template.name" -msgstr "Nouvelle configuration" - -msgid "EdgeListPanel.removeConfigurationButton.toolTipText" -msgstr "Enlever la configuration sΓ©lectionnΓ©e" - -msgid "EdgeListPanel.jXHeader1.title" -msgstr "Base de donnΓ©es de liste de liens" - -msgid "EdgeListPanel.header" -msgstr "Base de donnΓ©es de noeuds et de liens dont la table de liens contient deux colonnes : source et destination. Nommez la clΓ© primaire de la table noeud \"id\", et les colonnes de liens respectivement \"source\" et \"target\". Les colonnes \"label\", \"x\", \"y\" et \"size\" des noeuds ainsi que \"label\" et \"weight\" pour les liens sont optionnelles." - -msgid "EdgeListPanel.sqliteFileChooser.title" -msgstr "Fichier de base de donnΓ©e" - -msgid "EdgeListPanel.sqliteFileChooser.filefilter" -msgstr "Base de donnΓ©es SQLite" - -msgid "ImporterVnaUI.displayName" -msgstr "Import VNA" - -msgid "ImporterVnaUI.message.linear" -msgstr "La largeur de ligne augmente de faΓ§on linΓ©aire avec sa valeur." - -msgid "ImporterVnaUI.message.square_root" -msgstr "La largeur de ligne augmente de faΓ§on quadratique avec sa valeur." - -msgid "ImporterVnaUI.message.logarithmic" -msgstr "La largeur de ligne augmente de faΓ§on logarithmique avec sa valeur." - -msgid "EdgeListPanel.browseButton.text" -msgstr "Naviguer" diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/ja.po b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/ja.po deleted file mode 100644 index f8535bb3de..0000000000 --- a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/ja.po +++ /dev/null @@ -1,109 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-04 11:02+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "標準γγƒ•γ‚‘むルとデータベースγθ¨­εšUI" - -msgid "EdgeListBuilder.displayName" -msgstr "θΎΊγγƒͺγ‚Ήγƒˆ..." - -msgid "EdgeListPanel.configurationLabel.text" -msgstr "θ¨­εš:" - -msgid "EdgeListPanel.hostLabel.text" -msgstr "γƒ›γ‚Ήγƒˆ:" - -msgid "EdgeListPanel.fileLabel.text" -msgstr "フゑむル:" - -msgid "EdgeListPanel.portLabel.text" -msgstr "γƒγƒΌγƒˆ:" - -msgid "EdgeListPanel.dbLabel.text" -msgstr "データベース:" - -msgid "EdgeListPanel.userLabel.text" -msgstr "ユーアー名:" - -msgid "EdgeListPanel.pwdLabel.text" -msgstr "パスワード:" - -msgid "EdgeListPanel.driverLabel.text" -msgstr "ドラむバー:" - -msgid "EdgeListPanel.nodeQueryLabel.text" -msgstr "γƒŽγƒΌγƒ‰γγ‚―エγƒͺ:" - -msgid "EdgeListPanel.edgeQueryLabel.text" -msgstr "θΎΊγγ‚―エγƒͺ:" - -msgid "EdgeListPanel.nodeQueryTextField.text" -msgstr "SELECT * FROM γƒŽγƒΌγƒ‰" - -msgid "EdgeListPanel.testConnection.text" -msgstr "γƒ†γ‚Ήγƒˆι€£η΅" - -msgid "EdgeListPanel.edgeQueryTextField.text" -msgstr "SELECT * FROM θΎΊ" - -msgid "EdgeListPanel.configNameLabel.text" -msgstr "θ¨­εšε:" - -msgid "EdgeListPanel.alert.connection_successful" -msgstr "ζŽ₯碚に成功!" - -msgid "EdgeListPanel.alert.configuration_removed" -msgstr "θ¨­εš{0}γε‰Šι™€γ«ζˆεŠŸγ€‚" - -msgid "EdgeListPanel.alert.configuration_unsaved" -msgstr "こγθ¨­εšγ―δΏε­˜γ•γ‚Œγ¦γ„γΎγ›γ‚“γ€‚" - -msgid "EdgeListPanel.template.name" -msgstr "新規設εš" - -msgid "EdgeListPanel.removeConfigurationButton.toolTipText" -msgstr "ιΈζŠžγ—γŸθ¨­εšγε‰Šι™€" - -msgid "EdgeListPanel.jXHeader1.title" -msgstr "θΎΊγγƒͺγ‚Ήγƒˆγγƒ‡γƒΌγ‚Ώγƒ™γƒΌγ‚Ή" - -msgid "EdgeListPanel.header" -msgstr "γ‚½γƒΌγ‚Ήγ¨γ‚ΏγƒΌγ‚²γƒƒγƒˆγ2぀γεˆ—γ‚’ζŒγ€θΎΊγγƒ†γƒΌγƒ–γƒ«γ‚’ζŒγ€γƒŽγƒΌγƒ‰γ¨θΎΊγγƒ‡γƒΌγ‚Ώγƒ™γƒΌγ‚Ήγ€‚名前γγƒŽγƒΌγƒ‰γδΈ»γ‚­γƒΌγεˆ—は\"id\"と辺γεˆ—\"γ‚½γƒΌγ‚Ή\"と\"γ‚ΏγƒΌγ‚²γƒƒγƒˆ\"γ€‚εˆ—γ‚’\"ラベル\"、\"X\"、\"Y\"と辺γγƒŽγƒΌγƒ‰γ¨\"ラベル\"と\"重み\"γγŸγ‚γ\"γ‚΅γ‚€γ‚Ί\"はγ‚ͺγƒ—γ‚·γƒ§γƒ³γ§γ™γ€‚ε‹•ηš„γͺγƒγƒƒγƒˆγƒ―γƒΌγ‚―γε ΄εˆγ―、ζ—₯δ»˜γ€ζ—₯ζ™‚γΎγŸγ―γƒ€γƒ–γƒ«γεˆ—で'start'と'end'を使用してください。" - -msgid "EdgeListPanel.sqliteFileChooser.title" -msgstr "データベースフゑむル:" - -msgid "EdgeListPanel.sqliteFileChooser.filefilter" -msgstr "SQLiteγγƒ‡γƒΌγ‚Ώγƒ™γƒΌγ‚Ή:" - -msgid "ImporterVnaUI.displayName" -msgstr "VNAγ‚€γƒ³γƒγƒΌγƒˆ" - -msgid "ImporterVnaUI.message.linear" -msgstr "線γεΉ…γŒγγε€€γ«ζ―”δΎ‹γ—γ¦ε’—εŠ γ€‚" - -msgid "ImporterVnaUI.message.square_root" -msgstr "線γεΉ…は、そγε€€γεΉ³ζ–Ήζ Ήγ§ε’—εŠ γ€‚" - -msgid "ImporterVnaUI.message.logarithmic" -msgstr "線γεΉ…γŒγγε€€γ§ε―Ύζ•°ηš„γ«ε’—εŠ γ€‚" - -msgid "EdgeListPanel.browseButton.text" -msgstr "参照" diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/org-gephi-ui-importer-plugin.pot b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/org-gephi-ui-importer-plugin.pot deleted file mode 100644 index 82c6f6a602..0000000000 --- a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/org-gephi-ui-importer-plugin.pot +++ /dev/null @@ -1,111 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Standard file and database settings UI" - -msgid "EdgeListBuilder.displayName" -msgstr "Edge List..." - -msgid "EdgeListPanel.configurationLabel.text" -msgstr "Configuration:" - -msgid "EdgeListPanel.hostLabel.text" -msgstr "Host:" - -msgid "EdgeListPanel.fileLabel.text" -msgstr "File:" - -msgid "EdgeListPanel.portLabel.text" -msgstr "Port:" - -msgid "EdgeListPanel.dbLabel.text" -msgstr "Database:" - -msgid "EdgeListPanel.userLabel.text" -msgstr "User Name:" - -msgid "EdgeListPanel.pwdLabel.text" -msgstr "Password:" - -msgid "EdgeListPanel.driverLabel.text" -msgstr "Driver:" - -msgid "EdgeListPanel.nodeQueryLabel.text" -msgstr "Node Query:" - -msgid "EdgeListPanel.edgeQueryLabel.text" -msgstr "Edge Query:" - -msgid "EdgeListPanel.nodeQueryTextField.text" -msgstr "SELECT * FROM nodes" - -msgid "EdgeListPanel.testConnection.text" -msgstr "Test Connection" - -msgid "EdgeListPanel.edgeQueryTextField.text" -msgstr "SELECT * FROM edges" - -msgid "EdgeListPanel.configNameLabel.text" -msgstr "Configuration Name:" - -msgid "EdgeListPanel.alert.connection_successful" -msgstr "Connection successful!" - -msgid "EdgeListPanel.alert.configuration_removed" -msgstr "Configuration {0} successfully removed." - -msgid "EdgeListPanel.alert.configuration_unsaved" -msgstr "This configuration is not saved." - -msgid "EdgeListPanel.template.name" -msgstr "New Configuration" - -msgid "EdgeListPanel.removeConfigurationButton.toolTipText" -msgstr "Remove selected configuration" - -msgid "EdgeListPanel.jXHeader1.title" -msgstr "Edge List Database" - -msgid "EdgeListPanel.header" -msgstr "" -"Nodes and edges database with an edge table with two columns: source and " -"target. Name node primary key column \"id\" and edge columns \"source\" and " -"\"target\". Columns \"label\", \"x\", \"y\" and \"size\" for nodes and " -"\"label\" and \"weight\" for edges are optional. For dynamic networks, use " -"'start' and 'end' columns with type date, datetime or double." - -msgid "EdgeListPanel.sqliteFileChooser.title" -msgstr "Database file" - -msgid "EdgeListPanel.sqliteFileChooser.filefilter" -msgstr "SQLite database" - -msgid "ImporterVnaUI.displayName" -msgstr "VNA import" - -msgid "ImporterVnaUI.message.linear" -msgstr "Line width increases linearly with its value." - -msgid "ImporterVnaUI.message.square_root" -msgstr "Line width increases with a square root of its value." - -msgid "ImporterVnaUI.message.logarithmic" -msgstr "Line width increases logarithmically with its value." - -msgid "EdgeListPanel.browseButton.text" -msgstr "Browse" diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/pt_BR.po b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/pt_BR.po deleted file mode 100644 index 218a640e81..0000000000 --- a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/pt_BR.po +++ /dev/null @@ -1,110 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -# CΓ©lio Faria Jr. , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 15:28+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interface de usuΓ‘rio de arquivos e bancos de dados padrΓ£o" - -msgid "EdgeListBuilder.displayName" -msgstr "Lista de arestas..." - -msgid "EdgeListPanel.configurationLabel.text" -msgstr "ConfiguraΓ§Γ£o:" - -msgid "EdgeListPanel.hostLabel.text" -msgstr "Servidor:" - -msgid "EdgeListPanel.fileLabel.text" -msgstr "Arquivo:" - -msgid "EdgeListPanel.portLabel.text" -msgstr "Porta:" - -msgid "EdgeListPanel.dbLabel.text" -msgstr "Banco de dados:" - -msgid "EdgeListPanel.userLabel.text" -msgstr "Nome de usuΓ‘rio:" - -msgid "EdgeListPanel.pwdLabel.text" -msgstr "Senha:" - -msgid "EdgeListPanel.driverLabel.text" -msgstr "Driver:" - -msgid "EdgeListPanel.nodeQueryLabel.text" -msgstr "Consulta nΓ³s:" - -msgid "EdgeListPanel.edgeQueryLabel.text" -msgstr "Consulta arestas:" - -msgid "EdgeListPanel.nodeQueryTextField.text" -msgstr "SELECT * FROM nodes" - -msgid "EdgeListPanel.testConnection.text" -msgstr "Testar conexΓ£o" - -msgid "EdgeListPanel.edgeQueryTextField.text" -msgstr "SELECT * FROM edges" - -msgid "EdgeListPanel.configNameLabel.text" -msgstr "Nome da configuraΓ§Γ£o:" - -msgid "EdgeListPanel.alert.connection_successful" -msgstr "ConexΓ£o bem-sucedida!" - -msgid "EdgeListPanel.alert.configuration_removed" -msgstr "ConfiguraΓ§Γ£o {0} removida com sucesso." - -msgid "EdgeListPanel.alert.configuration_unsaved" -msgstr "Esta configuraΓ§Γ£o nΓ£o estΓ‘ salva." - -msgid "EdgeListPanel.template.name" -msgstr "Nova configuraΓ§Γ£o" - -msgid "EdgeListPanel.removeConfigurationButton.toolTipText" -msgstr "Remover a configuraΓ§Γ£o selecionada" - -msgid "EdgeListPanel.jXHeader1.title" -msgstr "Banco de dados de lista de arestas" - -msgid "EdgeListPanel.header" -msgstr "Banco de dados de nΓ³s e arestas contendo uma tabela de arestas com duas colunas: origem e destino. A chave primΓ‘ria do nΓ³ Γ© a coluna \"id\" e as colunas de arestas \"source\" e \"target\". As colunas \"label\" (rΓ³tulo), \"x\", \"y\" e \"size\" para nΓ³s e \"label\" e \"weight\" para as arestas sΓ£o opcionais." - -msgid "EdgeListPanel.sqliteFileChooser.title" -msgstr "Arquivo de banco de dados" - -msgid "EdgeListPanel.sqliteFileChooser.filefilter" -msgstr "Banco de dados SQLite" - -msgid "ImporterVnaUI.displayName" -msgstr "Importar VNA" - -msgid "ImporterVnaUI.message.linear" -msgstr "A largura de linha aumenta linearmente com o seu valor." - -msgid "ImporterVnaUI.message.square_root" -msgstr "A largura de linha aumenta com o quadrado do seu valor." - -msgid "ImporterVnaUI.message.logarithmic" -msgstr "A largura de linha aumenta logaritmicamente com o seu valor." - -msgid "EdgeListPanel.browseButton.text" -msgstr "Procurar" diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/resources/remove_config.png b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/resources/remove_config.png deleted file mode 100644 index 94af849e72..0000000000 Binary files a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/resources/remove_config.png and /dev/null differ diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/resources/test_connection.png b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/resources/test_connection.png deleted file mode 100644 index 22146029b2..0000000000 Binary files a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/resources/test_connection.png and /dev/null differ diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/ru.po b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/ru.po deleted file mode 100644 index 0e209786b1..0000000000 --- a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/ru.po +++ /dev/null @@ -1,109 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-15 08:37+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Standard file and database settings UI" - -msgid "EdgeListBuilder.displayName" -msgstr "Бписок Ρ€Ρ‘Π±Π΅Ρ€..." - -msgid "EdgeListPanel.configurationLabel.text" -msgstr "ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ:" - -msgid "EdgeListPanel.hostLabel.text" -msgstr "Π₯ост:" - -msgid "EdgeListPanel.fileLabel.text" -msgstr "Π€Π°ΠΉΠ»:" - -msgid "EdgeListPanel.portLabel.text" -msgstr "ΠŸΠΎΡ€Ρ‚:" - -msgid "EdgeListPanel.dbLabel.text" -msgstr "Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ…:" - -msgid "EdgeListPanel.userLabel.text" -msgstr "Имя ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ:" - -msgid "EdgeListPanel.pwdLabel.text" -msgstr "ΠŸΠ°Ρ€ΠΎΠ»ΡŒ:" - -msgid "EdgeListPanel.driverLabel.text" -msgstr "Π”Ρ€Π°ΠΉΠ²Π΅Ρ€:" - -msgid "EdgeListPanel.nodeQueryLabel.text" -msgstr "Запрос ΡƒΠ·Π»ΠΎΠ²:" - -msgid "EdgeListPanel.edgeQueryLabel.text" -msgstr "Запрос Ρ€Ρ‘Π±Π΅Ρ€:" - -msgid "EdgeListPanel.nodeQueryTextField.text" -msgstr "SELECT * FROM nodes" - -msgid "EdgeListPanel.testConnection.text" -msgstr "ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° соСдинСния" - -msgid "EdgeListPanel.edgeQueryTextField.text" -msgstr "SELECT * FROM edges" - -msgid "EdgeListPanel.configNameLabel.text" -msgstr "НазваниС ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ:" - -msgid "EdgeListPanel.alert.connection_successful" -msgstr "Π‘ΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»ΠΎ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ!" - -msgid "EdgeListPanel.alert.configuration_removed" -msgstr "ΠšΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡ {0} ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΡƒΠ΄Π°Π»Π΅Π½Π°." - -msgid "EdgeListPanel.alert.configuration_unsaved" -msgstr "Данная конфигурация Π½Π΅ сохранСна." - -msgid "EdgeListPanel.template.name" -msgstr "Новая конфигурация." - -msgid "EdgeListPanel.removeConfigurationButton.toolTipText" -msgstr "Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΈ." - -msgid "EdgeListPanel.jXHeader1.title" -msgstr "Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… списка Ρ€Ρ‘Π±Π΅Ρ€" - -msgid "EdgeListPanel.header" -msgstr "Π‘Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… с ΡƒΠ·Π»Π°ΠΌΠΈ ΠΈ Ρ€Π΅Π±Ρ€Π°ΠΌΠΈ. Π’Π°Π±Π»ΠΈΡ†Π° с Ρ€Ρ‘Π±Ρ€Π°ΠΌΠΈ содСрТит Π΄Π²Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ: source ΠΈ target. ΠŸΠ΅Ρ€Π²ΠΈΡ‡Π½Ρ‹ΠΉ ΠΊΠ»ΡŽΡ‡ Π² Ρ‚Π°Π±Π»ΠΈΡ†Π΅ ΡƒΠ·Π»ΠΎΠ² -- ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ° \"id\" and edge columns \"source\" and \"target\". Колонки \"label\", \"x\", \"y\" ΠΈ \"size\" для ΡƒΠ·Π»ΠΎΠ² ΠΈ \"label\" ΠΈ \"weight\" для Ρ€Ρ‘Π±Π΅Ρ€ ΡΠ²Π»ΡΡŽΡ‚ΡΡ ΠΎΠΏΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ. Для динамичСских Π³Ρ€Π°Ρ„ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ 'start' ΠΈ 'end' с Ρ‚ΠΈΠΏΠ°ΠΌΠΈ date, datetime ΠΈΠ»ΠΈ double." - -msgid "EdgeListPanel.sqliteFileChooser.title" -msgstr "Π€Π°ΠΉΠ» Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…" - -msgid "EdgeListPanel.sqliteFileChooser.filefilter" -msgstr "Π±Π°Π·Π° Π΄Π°Π½Π½Ρ‹Ρ… SQLite " - -msgid "ImporterVnaUI.displayName" -msgstr "VNA import" - -msgid "ImporterVnaUI.message.linear" -msgstr "Π’ΠΎΠ»Ρ‰ΠΈΠ½Π° Π»ΠΈΠ½ΠΈΠΈ увСличиваСтся Π»ΠΈΠ½Π΅ΠΉΠ½ΠΎ с ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ΠΌ значСния." - -msgid "ImporterVnaUI.message.square_root" -msgstr "Π’ΠΎΠ»Ρ‰ΠΈΠ½Π° Π»ΠΈΠ½ΠΈΠΈ увСличиваСтся ΠΊΠ°ΠΊ ΠΊΠΎΡ€Π΅Π½ΡŒ ΠΈΠ· значСния." - -msgid "ImporterVnaUI.message.logarithmic" -msgstr "Π’ΠΎΠ»Ρ‰ΠΈΠ½Π° Π»ΠΈΠ½ΠΈΠΈ увСличиваСтся ΠΊΠ°ΠΊ Π»ΠΎΠ³Π°Ρ€ΠΈΡ„ΠΌ значСния." - -msgid "EdgeListPanel.browseButton.text" -msgstr "ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€" diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle.properties new file mode 100644 index 0000000000..254a909bfe --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle.properties @@ -0,0 +1 @@ +Spreadsheet.displayName = Spreadsheet ({0})... \ No newline at end of file diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_ar.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_ca.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_ca.properties new file mode 100644 index 0000000000..0eafe7c5a2 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_ca.properties @@ -0,0 +1 @@ +Spreadsheet.displayName=Spreadsheet ({0})... diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_es.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_es.properties new file mode 100644 index 0000000000..df183466a7 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_es.properties @@ -0,0 +1,3 @@ + + +Spreadsheet.displayName=Hoja de c\u00E1lculo ({0})... diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_he.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_he.properties new file mode 100644 index 0000000000..0eafe7c5a2 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_he.properties @@ -0,0 +1 @@ +Spreadsheet.displayName=Spreadsheet ({0})... diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_hu.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_hu.properties new file mode 100644 index 0000000000..5342358138 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_hu.properties @@ -0,0 +1,3 @@ + + +Spreadsheet.displayName=T\u00E1bl\u00E1zat ({0})... diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_it.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_it.properties new file mode 100644 index 0000000000..0eafe7c5a2 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_it.properties @@ -0,0 +1 @@ +Spreadsheet.displayName=Spreadsheet ({0})... diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_ko.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_ko.properties new file mode 100644 index 0000000000..1f8dae7689 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_ko.properties @@ -0,0 +1,3 @@ + + +Spreadsheet.displayName=\uC2A4\uD504\uB808\uB4DC\uC2DC\uD2B8 ({0})... diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_nl.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_nl.properties new file mode 100644 index 0000000000..0eafe7c5a2 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_nl.properties @@ -0,0 +1 @@ +Spreadsheet.displayName=Spreadsheet ({0})... diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_ro.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_ro.properties new file mode 100644 index 0000000000..4e62aac843 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_ro.properties @@ -0,0 +1,3 @@ + + +Spreadsheet.displayName=Foaie de calcul ({0})... diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_th.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_tr.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_tr.properties new file mode 100644 index 0000000000..0eafe7c5a2 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_tr.properties @@ -0,0 +1 @@ +Spreadsheet.displayName=Spreadsheet ({0})... diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_uk.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_uk.properties new file mode 100644 index 0000000000..113b2668df --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_uk.properties @@ -0,0 +1 @@ +Spreadsheet.displayName=\u0415\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u0430 \u0442\u0430\u0431\u043B\u0438\u0446\u044F ({0})... diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_zh_CN.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_zh_CN.properties new file mode 100644 index 0000000000..f7d5d502ef --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_zh_CN.properties @@ -0,0 +1,3 @@ + + +Spreadsheet.displayName=\u7535\u5B50\u8868\u683C ({0})... diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_zh_TW.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_zh_TW.properties new file mode 100644 index 0000000000..0eafe7c5a2 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/Bundle_zh_TW.properties @@ -0,0 +1 @@ +Spreadsheet.displayName=Spreadsheet ({0})... diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle.properties new file mode 100644 index 0000000000..bd0c12444d --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle.properties @@ -0,0 +1,37 @@ +ImportCSVUIWizardAction.name=Import spreadsheet +WizardVisualPanel1CSV.name=General CSV options +WizardVisualPanel1CSV.comma=Comma +WizardVisualPanel1CSV.semicolon=Semicolon +WizardVisualPanel1CSV.space=Space +WizardVisualPanel1CSV.tab=Tab +WizardVisualPanel1CSV.filechooser.csvDescription=CSV +WizardVisualPanel1CSV.pathTextField.text= +WizardVisualPanel1CSV.separatorLabel.text=Separator: +WizardVisualPanel1CSV.previewLabel.text=Preview: +WizardVisualPanel1CSV.charsetLabel.text=Charset: +WizardVisualPanel1CSV.validation.invalid-file:Invalid CSV file +WizardVisualPanel1CSV.validation.no-columns:The file does not have any column +WizardVisualPanel1CSV.validation.repeated-columns:The file can't have repeated column names +WizardVisualPanel1CSV.validation.error=Error +WizardVisualPanel1CSV.validation.file-permissions-error=An error happened when reading the file. Make sure the file is not in use and you have permissions. +WizardVisualPanel1CSV.validation.edges.no-source-target-columns=Edges table needs a 'Source' and 'Target' column with nodes ids. +WizardVisualPanel1CSV.validation.edges.empty-sources-or-targets=Found row(s) with empty Source and/or Target columns +WizardVisualPanel1CSV.filePathLabel.text=CSV file to import: + +WizardVisualPanel2.name=Import settings +WizardVisualPanel2.timeRepresentationLabel.text=Time representation +WizardVisualPanel2.columnsLabel.text=Imported columns: + +WizardVisualPanel1Excel.name=General Excel Options +WizardVisualPanel1Excel.separatorLabel.text=Sheet: +WizardVisualPanel1Excel.pathTextField.text= +WizardVisualPanel1Excel.filePathLabel.text=Excel file to import: +WizardVisualPanel1Excel.previewLabel.text=Preview: + +WizardVisualPanel1Excel.modeLabel.text=Import as: + +ImportModeWrapper.mode.NODES_TABLE=Nodes table +ImportModeWrapper.mode.EDGES_TABLE=Edges table +ImportModeWrapper.mode.ADJACENCY_LIST=Adjacency list +ImportModeWrapper.mode.MATRIX=Matrix +WizardVisualPanel1CSV.modeLabel.text=Import as: diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_ar.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_ca.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_ca.properties new file mode 100644 index 0000000000..c846e3ae73 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_ca.properties @@ -0,0 +1,33 @@ +ImportCSVUIWizardAction.name=Import spreadsheet +WizardVisualPanel1CSV.name=General CSV options +WizardVisualPanel1CSV.comma=Coma +WizardVisualPanel1CSV.semicolon=Semicolon +WizardVisualPanel1CSV.space=Espai +WizardVisualPanel1CSV.tab=Tab +WizardVisualPanel1CSV.filechooser.csvDescription=CSV +WizardVisualPanel1CSV.pathTextField.text= +WizardVisualPanel1CSV.separatorLabel.text=Separator: +WizardVisualPanel1CSV.previewLabel.text=Preview: +WizardVisualPanel1CSV.charsetLabel.text=Charset: +WizardVisualPanel1CSV.validation.invalid-file:Invalid CSV file +WizardVisualPanel1CSV.validation.no-columns:The file does not have any column +WizardVisualPanel1CSV.validation.repeated-columns:The file can't have repeated column names +WizardVisualPanel1CSV.validation.error=Error +WizardVisualPanel1CSV.validation.file-permissions-error=An error happened when reading the file. Make sure the file is not in use and you have permissions. +WizardVisualPanel1CSV.validation.edges.no-source-target-columns=Edges table needs a 'Source' and 'Target' column with nodes ids. +WizardVisualPanel1CSV.validation.edges.empty-sources-or-targets=Found row(s) with empty Source and/or Target columns +WizardVisualPanel1CSV.filePathLabel.text=CSV file to import: +WizardVisualPanel2.name=Importa la configuraciσ +WizardVisualPanel2.timeRepresentationLabel.text=Time representation +WizardVisualPanel2.columnsLabel.text=Imported columns: +WizardVisualPanel1Excel.name=General Excel Options +WizardVisualPanel1Excel.separatorLabel.text=Sheet: +WizardVisualPanel1Excel.pathTextField.text= +WizardVisualPanel1Excel.filePathLabel.text=Excel file to import: +WizardVisualPanel1Excel.previewLabel.text=Preview: +WizardVisualPanel1Excel.modeLabel.text=Importa com a: +ImportModeWrapper.mode.NODES_TABLE=Taula dels nodes +ImportModeWrapper.mode.EDGES_TABLE=Edges table +ImportModeWrapper.mode.ADJACENCY_LIST=Adjacency list +ImportModeWrapper.mode.MATRIX=Matriu +WizardVisualPanel1CSV.modeLabel.text=Importa com a: diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_cs.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_cs.properties new file mode 100644 index 0000000000..6a33ca1824 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_cs.properties @@ -0,0 +1,37 @@ +# ImportCSVUIWizardAction.name=Import spreadsheet +# WizardVisualPanel1CSV.name=General CSV options +# WizardVisualPanel1CSV.comma=Comma +# WizardVisualPanel1CSV.semicolon=Semicolon +# WizardVisualPanel1CSV.space=Space +# WizardVisualPanel1CSV.tab=Tab +# WizardVisualPanel1CSV.filechooser.csvDescription=CSV +WizardVisualPanel1CSV.pathTextField.text= +# WizardVisualPanel1CSV.separatorLabel.text=Separator: +# WizardVisualPanel1CSV.previewLabel.text=Preview: +# WizardVisualPanel1CSV.charsetLabel.text=Charset: +# WizardVisualPanel1CSV.validation.invalid-file:Invalid CSV file +# WizardVisualPanel1CSV.validation.no-columns:The file does not have any column +# WizardVisualPanel1CSV.validation.repeated-columns:The file can't have repeated column names +# WizardVisualPanel1CSV.validation.error=Error +# WizardVisualPanel1CSV.validation.file-permissions-error=An error happened when reading the file. Make sure the file is not in use and you have permissions. +# WizardVisualPanel1CSV.validation.edges.no-source-target-columns=Edges table needs a 'Source' and 'Target' column with nodes ids. +# WizardVisualPanel1CSV.validation.edges.empty-sources-or-targets=Found row(s) with empty Source and/or Target columns +# WizardVisualPanel1CSV.filePathLabel.text=CSV file to import: + +# WizardVisualPanel2.name=Import settings +# WizardVisualPanel2.timeRepresentationLabel.text=Time representation +# WizardVisualPanel2.columnsLabel.text=Imported columns: + +# WizardVisualPanel1Excel.name=General Excel Options +# WizardVisualPanel1Excel.separatorLabel.text=Sheet: +WizardVisualPanel1Excel.pathTextField.text= +# WizardVisualPanel1Excel.filePathLabel.text=Excel file to import: +# WizardVisualPanel1Excel.previewLabel.text=Preview: + +# WizardVisualPanel1Excel.modeLabel.text=Import as: + +# ImportModeWrapper.mode.NODES_TABLE=Nodes table +# ImportModeWrapper.mode.EDGES_TABLE=Edges table +# ImportModeWrapper.mode.ADJACENCY_LIST=Adjacency list +# ImportModeWrapper.mode.MATRIX=Matrix +# WizardVisualPanel1CSV.modeLabel.text=Import as: diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_de.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_de.properties new file mode 100644 index 0000000000..14f100c55d --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_de.properties @@ -0,0 +1,39 @@ +# ImportCSVUIWizardAction.name=Import spreadsheet +# WizardVisualPanel1CSV.name=General CSV options +# WizardVisualPanel1CSV.comma=Comma +# WizardVisualPanel1CSV.semicolon=Semicolon +# WizardVisualPanel1CSV.space=Space +# WizardVisualPanel1CSV.tab=Tab +# WizardVisualPanel1CSV.filechooser.csvDescription=CSV +WizardVisualPanel1CSV.pathTextField.text= +# WizardVisualPanel1CSV.separatorLabel.text=Separator: +# WizardVisualPanel1CSV.previewLabel.text=Preview: +# WizardVisualPanel1CSV.charsetLabel.text=Charset: +# WizardVisualPanel1CSV.validation.invalid-file:Invalid CSV file +# WizardVisualPanel1CSV.validation.no-columns:The file does not have any column +# WizardVisualPanel1CSV.validation.repeated-columns:The file can't have repeated column names +# WizardVisualPanel1CSV.validation.error=Error +# WizardVisualPanel1CSV.validation.file-permissions-error=An error happened when reading the file. Make sure the file is not in use and you have permissions. +# WizardVisualPanel1CSV.validation.edges.no-source-target-columns=Edges table needs a 'Source' and 'Target' column with nodes ids. +# WizardVisualPanel1CSV.validation.edges.empty-sources-or-targets=Found row(s) with empty Source and/or Target columns +# WizardVisualPanel1CSV.filePathLabel.text=CSV file to import: + +# WizardVisualPanel2.name=Import settings +# WizardVisualPanel2.timeRepresentationLabel.text=Time representation +# WizardVisualPanel2.columnsLabel.text=Imported columns: + +# WizardVisualPanel1Excel.name=General Excel Options +# WizardVisualPanel1Excel.separatorLabel.text=Sheet: +WizardVisualPanel1Excel.pathTextField.text= +# WizardVisualPanel1Excel.filePathLabel.text=Excel file to import: +# WizardVisualPanel1Excel.previewLabel.text=Preview: + +# WizardVisualPanel1Excel.modeLabel.text=Import as: + +# ImportModeWrapper.mode.NODES_TABLE=Nodes table +# ImportModeWrapper.mode.EDGES_TABLE=Edges table +# ImportModeWrapper.mode.ADJACENCY_LIST=Adjacency list +# ImportModeWrapper.mode.MATRIX=Matrix +# WizardVisualPanel1CSV.modeLabel.text=Import as: + +ImportCSVUIWizardAction.name=Liste importieren diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_es.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_es.properties new file mode 100644 index 0000000000..2904ec4b98 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_es.properties @@ -0,0 +1,37 @@ +ImportCSVUIWizardAction.name=Importar hoja de cαlculo +WizardVisualPanel1CSV.name=Opciones generales de CSV +WizardVisualPanel1CSV.comma=Coma +WizardVisualPanel1CSV.semicolon=Punto y coma +WizardVisualPanel1CSV.space=Espacio +WizardVisualPanel1CSV.tab=Tabulador +WizardVisualPanel1CSV.filechooser.csvDescription=CSV +WizardVisualPanel1CSV.pathTextField.text= +WizardVisualPanel1CSV.separatorLabel.text=Separador: +WizardVisualPanel1CSV.previewLabel.text=Previsualizaciσn: +WizardVisualPanel1CSV.charsetLabel.text=Conjunto de caracteres: +WizardVisualPanel1CSV.validation.invalid-file:Archivo CSV invαlido +WizardVisualPanel1CSV.validation.no-columns:El archivo no contiene ninguna columna +WizardVisualPanel1CSV.validation.repeated-columns:El archivo no puede tener nombres de columnas repetidos +WizardVisualPanel1CSV.validation.error=Error +WizardVisualPanel1CSV.validation.file-permissions-error=Un error ocurriσ al leer el archivo. Asegϊrate de que el archivo no estα en uso y tienes permisos +WizardVisualPanel1CSV.validation.edges.no-source-target-columns=Importar a la tabla de aristas requiere las columnas llamadas 'Source' y 'Target' con las ids de los nodos +WizardVisualPanel1CSV.validation.edges.empty-sources-or-targets=Encontradas fila(s) con las columnas Source y/o Target vacνas +WizardVisualPanel1CSV.filePathLabel.text=Archivo CSV a importar: + +WizardVisualPanel2.name=Parαmetros de importaciσn: +WizardVisualPanel2.timeRepresentationLabel.text=Representaciσn temporal +WizardVisualPanel2.columnsLabel.text=Importar columnas: + +WizardVisualPanel1Excel.name=Opciones generales de Excel +WizardVisualPanel1Excel.separatorLabel.text=Hoja: +WizardVisualPanel1Excel.pathTextField.text= +WizardVisualPanel1Excel.filePathLabel.text=Archivo Excel a importar: +WizardVisualPanel1Excel.previewLabel.text=Previsualizaciσn: + +WizardVisualPanel1Excel.modeLabel.text=Importar como: + +ImportModeWrapper.mode.NODES_TABLE=Tabla de nodos +ImportModeWrapper.mode.EDGES_TABLE=Tabla de aristas +ImportModeWrapper.mode.ADJACENCY_LIST=Lista de adyacencia +ImportModeWrapper.mode.MATRIX=Matriz +WizardVisualPanel1CSV.modeLabel.text=Importar como: diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_fr.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_fr.properties new file mode 100644 index 0000000000..217232ba85 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_fr.properties @@ -0,0 +1,37 @@ +ImportCSVUIWizardAction.name=Importer feuille de calcul +WizardVisualPanel1CSV.name=Options gιnιrales du CSV +WizardVisualPanel1CSV.comma=Virgule +WizardVisualPanel1CSV.semicolon=Point-virgule +WizardVisualPanel1CSV.space=Espace +WizardVisualPanel1CSV.tab=Tabulation +WizardVisualPanel1CSV.filechooser.csvDescription=CSV +WizardVisualPanel1CSV.pathTextField.text= +WizardVisualPanel1CSV.separatorLabel.text=Sιparateur : +WizardVisualPanel1CSV.previewLabel.text=Prιvisualisation : +WizardVisualPanel1CSV.charsetLabel.text=Encodage : +WizardVisualPanel1CSV.validation.invalid-file:Fichier CSV invalide +WizardVisualPanel1CSV.validation.no-columns:Le fichier n'a aucune colonne. +WizardVisualPanel1CSV.validation.repeated-columns:Les noms de colonne doivent κtre unique dans le fichier. +WizardVisualPanel1CSV.validation.error=Erreur +WizardVisualPanel1CSV.validation.file-permissions-error=Erreur lors de la lecture du fichier. Vιrifiez qu'il n'est pas utilisι et que vous avez les bonnes permissions. +WizardVisualPanel1CSV.validation.edges.no-source-target-columns=La tables des liens nιcessite les colonnes 'Source' et 'Target' contenant les ids des noeuds. +WizardVisualPanel1CSV.validation.edges.empty-sources-or-targets=Ligne(s) et/ou colonne(s) dont les Sources et/ou des Cibles sont vides trouvιes +WizardVisualPanel1CSV.filePathLabel.text=Choisissez un fichier CSV ΰ importer : + +WizardVisualPanel2.name=Paramθtres d'import +WizardVisualPanel2.timeRepresentationLabel.text=Reprιsentation temporelle +WizardVisualPanel2.columnsLabel.text=Colonnes importιes : + +WizardVisualPanel1Excel.name=Options gιnιrales d'Excel +WizardVisualPanel1Excel.separatorLabel.text=Feuille : +WizardVisualPanel1Excel.pathTextField.text= +WizardVisualPanel1Excel.filePathLabel.text=Choisissez un fichier Excel ΰ importer : +WizardVisualPanel1Excel.previewLabel.text=Prιvisualisation : + +WizardVisualPanel1Excel.modeLabel.text=Importer en tant que: + +ImportModeWrapper.mode.NODES_TABLE=Table des noeuds +ImportModeWrapper.mode.EDGES_TABLE=Table des liens +ImportModeWrapper.mode.ADJACENCY_LIST=Liste d'adjacence +ImportModeWrapper.mode.MATRIX=Matrice +WizardVisualPanel1CSV.modeLabel.text=Importer en tant que: diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_he.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_he.properties new file mode 100644 index 0000000000..ac041ece3a --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_he.properties @@ -0,0 +1,33 @@ +ImportCSVUIWizardAction.name=Import spreadsheet +WizardVisualPanel1CSV.name=General CSV options +WizardVisualPanel1CSV.comma=Comma +WizardVisualPanel1CSV.semicolon=Semicolon +WizardVisualPanel1CSV.space=Space +WizardVisualPanel1CSV.tab=Tab +WizardVisualPanel1CSV.filechooser.csvDescription=CSV +WizardVisualPanel1CSV.pathTextField.text= +WizardVisualPanel1CSV.separatorLabel.text=Separator: +WizardVisualPanel1CSV.previewLabel.text=Preview: +WizardVisualPanel1CSV.charsetLabel.text=Charset: +WizardVisualPanel1CSV.validation.invalid-file:Invalid CSV file +WizardVisualPanel1CSV.validation.no-columns:The file does not have any column +WizardVisualPanel1CSV.validation.repeated-columns:The file can't have repeated column names +WizardVisualPanel1CSV.validation.error=Error +WizardVisualPanel1CSV.validation.file-permissions-error=An error happened when reading the file. Make sure the file is not in use and you have permissions. +WizardVisualPanel1CSV.validation.edges.no-source-target-columns=Edges table needs a 'Source' and 'Target' column with nodes ids. +WizardVisualPanel1CSV.validation.edges.empty-sources-or-targets=Found row(s) with empty Source and/or Target columns +WizardVisualPanel1CSV.filePathLabel.text=CSV file to import: +WizardVisualPanel2.name=Import settings +WizardVisualPanel2.timeRepresentationLabel.text=Time representation +WizardVisualPanel2.columnsLabel.text=Imported columns: +WizardVisualPanel1Excel.name=General Excel Options +WizardVisualPanel1Excel.separatorLabel.text=Sheet: +WizardVisualPanel1Excel.pathTextField.text= +WizardVisualPanel1Excel.filePathLabel.text=Excel file to import: +WizardVisualPanel1Excel.previewLabel.text=Preview: +WizardVisualPanel1Excel.modeLabel.text=Import as: +ImportModeWrapper.mode.NODES_TABLE=Nodes table +ImportModeWrapper.mode.EDGES_TABLE=Edges table +ImportModeWrapper.mode.ADJACENCY_LIST=Adjacency list +ImportModeWrapper.mode.MATRIX=Matrix +WizardVisualPanel1CSV.modeLabel.text=Import as: diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_hu.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_hu.properties new file mode 100644 index 0000000000..cfcdce9e25 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_hu.properties @@ -0,0 +1,33 @@ + + +WizardVisualPanel1CSV.filePathLabel.text=Import\u00E1land\u00F3 CSV-f\u00E1jl: +WizardVisualPanel1CSV.space=Hely +ImportModeWrapper.mode.EDGES_TABLE=\u00C9lek t\u00E1bl\u00E1zata +WizardVisualPanel2.name=Be\u00E1ll\u00EDt\u00E1sok import\u00E1l\u00E1sa +WizardVisualPanel1Excel.separatorLabel.text=Lap: +ImportCSVUIWizardAction.name=T\u00E1bl\u00E1zat import\u00E1l\u00E1sa +WizardVisualPanel1CSV.name=\u00C1ltal\u00E1nos CSV-be\u00E1ll\u00EDt\u00E1sok +WizardVisualPanel2.timeRepresentationLabel.text=Id\u0151\u00E1br\u00E1zol\u00E1s +WizardVisualPanel1CSV.validation.edges.empty-sources-or-targets=Tal\u00E1lt sor(oka)t \u00FCres Forr\u00E1s \u00E9s/vagy C\u00E9l oszlopokkal +WizardVisualPanel1CSV.tab=Tab +ImportModeWrapper.mode.ADJACENCY_LIST=Szomsz\u00E9ds\u00E1gi lista +ImportModeWrapper.mode.NODES_TABLE=Csom\u00F3pontok t\u00E1bl\u00E1zata +WizardVisualPanel1Excel.modeLabel.text=Import\u00E1l\u00E1s mint: +WizardVisualPanel1CSV.validation.invalid-file:\u00C9rv\u00E9nytelen CSV f\u00E1jl +WizardVisualPanel1CSV.validation.error=Hiba +WizardVisualPanel1CSV.comma=Vessz\u0151 +WizardVisualPanel1Excel.previewLabel.text=El\u0151n\u00E9zet +WizardVisualPanel1CSV.filechooser.csvDescription=CSV +WizardVisualPanel1Excel.name=\u00C1ltal\u00E1nos Excel-be\u00E1ll\u00EDt\u00E1sok +WizardVisualPanel1CSV.separatorLabel.text=Sz\u00E9tv\u00E1laszt\u00F3: +ImportModeWrapper.mode.MATRIX=Matrix +WizardVisualPanel1CSV.validation.file-permissions-error=Hiba t\u00F6rt\u00E9nt a f\u00E1jl olvas\u00E1sa k\u00F6zben. Gy\u0151z\u0151dj\u00F6n meg arr\u00F3l, hogy a f\u00E1jl nincs haszn\u00E1latban, \u00E9s rendelkezik-e jogosults\u00E1gokkal. +WizardVisualPanel1CSV.modeLabel.text=Import\u00E1l\u00E1s mint: +WizardVisualPanel2.columnsLabel.text=Import\u00E1lt oszlopok: +WizardVisualPanel1CSV.charsetLabel.text=Karakterk\u00E9szlet: +WizardVisualPanel1CSV.validation.edges.no-source-target-columns=Az Edges t\u00E1bl\u00E1zatnak sz\u00FCks\u00E9ge van egy \u201EForr\u00E1s\u201D \u00E9s \u201EC\u00E9l\u201D oszlopra csom\u00F3pont-azonos\u00EDt\u00F3kkal. +WizardVisualPanel1CSV.previewLabel.text=El\u0151n\u00E9zet: +WizardVisualPanel1CSV.semicolon=Pontosvessz\u0151 +WizardVisualPanel1CSV.validation.repeated-columns:A f\u00E1jl nem rendelkezhet ism\u00E9tl\u0151d\u0151 oszlopnevekkel +WizardVisualPanel1CSV.validation.no-columns:A f\u00E1jlnak nincs oszlopa +WizardVisualPanel1Excel.filePathLabel.text=Import\u00E1land\u00F3 Excel f\u00E1jl: diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_it.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_it.properties new file mode 100644 index 0000000000..ac041ece3a --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_it.properties @@ -0,0 +1,33 @@ +ImportCSVUIWizardAction.name=Import spreadsheet +WizardVisualPanel1CSV.name=General CSV options +WizardVisualPanel1CSV.comma=Comma +WizardVisualPanel1CSV.semicolon=Semicolon +WizardVisualPanel1CSV.space=Space +WizardVisualPanel1CSV.tab=Tab +WizardVisualPanel1CSV.filechooser.csvDescription=CSV +WizardVisualPanel1CSV.pathTextField.text= +WizardVisualPanel1CSV.separatorLabel.text=Separator: +WizardVisualPanel1CSV.previewLabel.text=Preview: +WizardVisualPanel1CSV.charsetLabel.text=Charset: +WizardVisualPanel1CSV.validation.invalid-file:Invalid CSV file +WizardVisualPanel1CSV.validation.no-columns:The file does not have any column +WizardVisualPanel1CSV.validation.repeated-columns:The file can't have repeated column names +WizardVisualPanel1CSV.validation.error=Error +WizardVisualPanel1CSV.validation.file-permissions-error=An error happened when reading the file. Make sure the file is not in use and you have permissions. +WizardVisualPanel1CSV.validation.edges.no-source-target-columns=Edges table needs a 'Source' and 'Target' column with nodes ids. +WizardVisualPanel1CSV.validation.edges.empty-sources-or-targets=Found row(s) with empty Source and/or Target columns +WizardVisualPanel1CSV.filePathLabel.text=CSV file to import: +WizardVisualPanel2.name=Import settings +WizardVisualPanel2.timeRepresentationLabel.text=Time representation +WizardVisualPanel2.columnsLabel.text=Imported columns: +WizardVisualPanel1Excel.name=General Excel Options +WizardVisualPanel1Excel.separatorLabel.text=Sheet: +WizardVisualPanel1Excel.pathTextField.text= +WizardVisualPanel1Excel.filePathLabel.text=Excel file to import: +WizardVisualPanel1Excel.previewLabel.text=Preview: +WizardVisualPanel1Excel.modeLabel.text=Import as: +ImportModeWrapper.mode.NODES_TABLE=Nodes table +ImportModeWrapper.mode.EDGES_TABLE=Edges table +ImportModeWrapper.mode.ADJACENCY_LIST=Adjacency list +ImportModeWrapper.mode.MATRIX=Matrix +WizardVisualPanel1CSV.modeLabel.text=Import as: diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_ja.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_ja.properties new file mode 100644 index 0000000000..6a33ca1824 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_ja.properties @@ -0,0 +1,37 @@ +# ImportCSVUIWizardAction.name=Import spreadsheet +# WizardVisualPanel1CSV.name=General CSV options +# WizardVisualPanel1CSV.comma=Comma +# WizardVisualPanel1CSV.semicolon=Semicolon +# WizardVisualPanel1CSV.space=Space +# WizardVisualPanel1CSV.tab=Tab +# WizardVisualPanel1CSV.filechooser.csvDescription=CSV +WizardVisualPanel1CSV.pathTextField.text= +# WizardVisualPanel1CSV.separatorLabel.text=Separator: +# WizardVisualPanel1CSV.previewLabel.text=Preview: +# WizardVisualPanel1CSV.charsetLabel.text=Charset: +# WizardVisualPanel1CSV.validation.invalid-file:Invalid CSV file +# WizardVisualPanel1CSV.validation.no-columns:The file does not have any column +# WizardVisualPanel1CSV.validation.repeated-columns:The file can't have repeated column names +# WizardVisualPanel1CSV.validation.error=Error +# WizardVisualPanel1CSV.validation.file-permissions-error=An error happened when reading the file. Make sure the file is not in use and you have permissions. +# WizardVisualPanel1CSV.validation.edges.no-source-target-columns=Edges table needs a 'Source' and 'Target' column with nodes ids. +# WizardVisualPanel1CSV.validation.edges.empty-sources-or-targets=Found row(s) with empty Source and/or Target columns +# WizardVisualPanel1CSV.filePathLabel.text=CSV file to import: + +# WizardVisualPanel2.name=Import settings +# WizardVisualPanel2.timeRepresentationLabel.text=Time representation +# WizardVisualPanel2.columnsLabel.text=Imported columns: + +# WizardVisualPanel1Excel.name=General Excel Options +# WizardVisualPanel1Excel.separatorLabel.text=Sheet: +WizardVisualPanel1Excel.pathTextField.text= +# WizardVisualPanel1Excel.filePathLabel.text=Excel file to import: +# WizardVisualPanel1Excel.previewLabel.text=Preview: + +# WizardVisualPanel1Excel.modeLabel.text=Import as: + +# ImportModeWrapper.mode.NODES_TABLE=Nodes table +# ImportModeWrapper.mode.EDGES_TABLE=Edges table +# ImportModeWrapper.mode.ADJACENCY_LIST=Adjacency list +# ImportModeWrapper.mode.MATRIX=Matrix +# WizardVisualPanel1CSV.modeLabel.text=Import as: diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_ko.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_ko.properties new file mode 100644 index 0000000000..514de2d7d4 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_ko.properties @@ -0,0 +1,33 @@ + + +WizardVisualPanel1CSV.filePathLabel.text=\uBD88\uB7EC\uC62C CSV \uD30C\uC77C: +WizardVisualPanel1CSV.space=\uBE48\uCE78 +ImportModeWrapper.mode.EDGES_TABLE=\uC5E3\uC9C0 \uD14C\uC774\uBE14 +WizardVisualPanel2.name=\uBD88\uB7EC\uC624\uAE30 \uC124\uC815 +WizardVisualPanel1Excel.separatorLabel.text=\uC2DC\uD2B8: +ImportCSVUIWizardAction.name=\uC2A4\uD504\uB808\uB4DC\uC2DC\uD2B8 \uBD88\uB7EC\uC624\uAE30 +WizardVisualPanel1CSV.name=CSV \uC77C\uBC18 \uC635\uC158 +WizardVisualPanel2.timeRepresentationLabel.text=\uC2DC\uAC04 \uD45C\uD604 +WizardVisualPanel1CSV.validation.edges.empty-sources-or-targets=\uBE44\uC5B4\uC788\uB294 Source \uD639\uC740 Target \uC5F4\uC774 \uC788\uC2B5\uB2C8\uB2E4 +WizardVisualPanel1CSV.tab=\uD0ED +ImportModeWrapper.mode.ADJACENCY_LIST=\uC778\uC811 \uBAA9\uB85D +ImportModeWrapper.mode.NODES_TABLE=\uB178\uB4DC \uD14C\uC774\uBE14 +WizardVisualPanel1Excel.modeLabel.text=\uAC00\uC838\uC624\uAE30 \uC774\uB984: +WizardVisualPanel1CSV.validation.invalid-file:\uBB34\uD6A8 CSV \uD30C\uC77C +WizardVisualPanel1CSV.validation.error=\uC624\uB958 +WizardVisualPanel1CSV.comma=\uC27C\uD45C +WizardVisualPanel1Excel.previewLabel.text=\uBBF8\uB9AC\uBCF4\uAE30: +WizardVisualPanel1CSV.filechooser.csvDescription=CSV +WizardVisualPanel1Excel.name=\uC5D1\uC140 \uC77C\uBC18 \uC635\uC158 +WizardVisualPanel1CSV.separatorLabel.text=\uAD6C\uBD84\uC790: +ImportModeWrapper.mode.MATRIX=\uB9E4\uD2B8\uB9AD\uC2A4 +WizardVisualPanel1CSV.validation.file-permissions-error=\uD30C\uC77C\uC744 \uC77D\uB294 \uB3D9\uC548 \uC624\uB958\uAC00 \uBC1C\uC0DD\uD588\uC2B5\uB2C8\uB2E4. \uD30C\uC77C\uC744 \uC0AC\uC6A9 \uC911\uC774\uC9C0 \uC54A\uACE0 \uAD8C\uD55C\uC774 \uC788\uB294\uC9C0 \uD655\uC778\uD558\uC138\uC694. +WizardVisualPanel1CSV.modeLabel.text=\uBD88\uB7EC\uC624\uAE30 \uC774\uB984: +WizardVisualPanel2.columnsLabel.text=\uBD88\uB7EC\uC628 \uC5F4: +WizardVisualPanel1CSV.charsetLabel.text=\uBB38\uC790 \uC9D1\uD569: +WizardVisualPanel1CSV.validation.edges.no-source-target-columns=\uC5E3\uC9C0 \uD14C\uC774\uBE14\uC5D0\uB294 \uB178\uB4DC \uC544\uC774\uB514\uAC00 \uC788\uB294 'Source'\uC640 'Target' \uC5F4\uC774 \uD544\uC694\uD569\uB2C8\uB2E4. +WizardVisualPanel1CSV.previewLabel.text=\uBBF8\uB9AC\uBCF4\uAE30: +WizardVisualPanel1CSV.semicolon=\uC138\uBBF8\uCF5C\uB860 +WizardVisualPanel1CSV.validation.repeated-columns:\uD30C\uC77C\uC5D0 \uBC18\uBCF5\uB418\uB294 \uC5F4 \uC774\uB984\uC744 \uC0AC\uC6A9\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 +WizardVisualPanel1CSV.validation.no-columns:\uD30C\uC77C\uC5D0 \uCF5C\uB860\uC774 \uC5C6\uC2B5\uB2C8\uB2E4 +WizardVisualPanel1Excel.filePathLabel.text=\uBD88\uB7EC\uC62C \uC5D1\uC140 \uD30C\uC77C: diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_nl.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_nl.properties new file mode 100644 index 0000000000..ac51e6c13f --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_nl.properties @@ -0,0 +1,33 @@ +ImportCSVUIWizardAction.name=Spreadsheet importeren +WizardVisualPanel1CSV.name=Algemene CSV-opties +WizardVisualPanel1CSV.comma=Komma +WizardVisualPanel1CSV.semicolon=Puntkomma +WizardVisualPanel1CSV.space=Spatie +WizardVisualPanel1CSV.tab=Tabblad +WizardVisualPanel1CSV.filechooser.csvDescription=CSV +WizardVisualPanel1CSV.pathTextField.text= +WizardVisualPanel1CSV.separatorLabel.text=Scheidingsteken: +WizardVisualPanel1CSV.previewLabel.text=Voorbeeld: +WizardVisualPanel1CSV.charsetLabel.text=Charset: +WizardVisualPanel1CSV.validation.invalid-file:Ongeldig CSV-bestand +WizardVisualPanel1CSV.validation.no-columns:Het bestand heeft geen kolom +WizardVisualPanel1CSV.validation.repeated-columns:The file can't have repeated column names +WizardVisualPanel1CSV.validation.error=Fout +WizardVisualPanel1CSV.validation.file-permissions-error=An error happened when reading the file. Make sure the file is not in use and you have permissions. +WizardVisualPanel1CSV.validation.edges.no-source-target-columns=Edges table needs a 'Source' and 'Target' column with nodes ids. +WizardVisualPanel1CSV.validation.edges.empty-sources-or-targets=Found row(s) with empty Source and/or Target columns +WizardVisualPanel1CSV.filePathLabel.text=CSV file to import: +WizardVisualPanel2.name=Import settings +WizardVisualPanel2.timeRepresentationLabel.text=Time representation +WizardVisualPanel2.columnsLabel.text=Geοmporteerde kolommen: +WizardVisualPanel1Excel.name=Algemene Excel-opties +WizardVisualPanel1Excel.separatorLabel.text=Sheet: +WizardVisualPanel1Excel.pathTextField.text= +WizardVisualPanel1Excel.filePathLabel.text=Excel file to import: +WizardVisualPanel1Excel.previewLabel.text=Voorbeeld: +WizardVisualPanel1Excel.modeLabel.text=Importeren als: +ImportModeWrapper.mode.NODES_TABLE=Knooptabel +ImportModeWrapper.mode.EDGES_TABLE=Edges table +ImportModeWrapper.mode.ADJACENCY_LIST=Bogenlijst +ImportModeWrapper.mode.MATRIX=Matrix +WizardVisualPanel1CSV.modeLabel.text=Importeren als: diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_pt_BR.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_pt_BR.properties new file mode 100644 index 0000000000..f26cda6de6 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_pt_BR.properties @@ -0,0 +1,39 @@ +# ImportCSVUIWizardAction.name=Import spreadsheet +# WizardVisualPanel1CSV.name=General CSV options +# WizardVisualPanel1CSV.comma=Comma +# WizardVisualPanel1CSV.semicolon=Semicolon +# WizardVisualPanel1CSV.space=Space +# WizardVisualPanel1CSV.tab=Tab +# WizardVisualPanel1CSV.filechooser.csvDescription=CSV +WizardVisualPanel1CSV.pathTextField.text= +# WizardVisualPanel1CSV.separatorLabel.text=Separator: +# WizardVisualPanel1CSV.previewLabel.text=Preview: +# WizardVisualPanel1CSV.charsetLabel.text=Charset: +# WizardVisualPanel1CSV.validation.invalid-file:Invalid CSV file +# WizardVisualPanel1CSV.validation.no-columns:The file does not have any column +# WizardVisualPanel1CSV.validation.repeated-columns:The file can't have repeated column names +# WizardVisualPanel1CSV.validation.error=Error +# WizardVisualPanel1CSV.validation.file-permissions-error=An error happened when reading the file. Make sure the file is not in use and you have permissions. +# WizardVisualPanel1CSV.validation.edges.no-source-target-columns=Edges table needs a 'Source' and 'Target' column with nodes ids. +# WizardVisualPanel1CSV.validation.edges.empty-sources-or-targets=Found row(s) with empty Source and/or Target columns +# WizardVisualPanel1CSV.filePathLabel.text=CSV file to import: + +# WizardVisualPanel2.name=Import settings +# WizardVisualPanel2.timeRepresentationLabel.text=Time representation +# WizardVisualPanel2.columnsLabel.text=Imported columns: + +# WizardVisualPanel1Excel.name=General Excel Options +# WizardVisualPanel1Excel.separatorLabel.text=Sheet: +WizardVisualPanel1Excel.pathTextField.text= +# WizardVisualPanel1Excel.filePathLabel.text=Excel file to import: +# WizardVisualPanel1Excel.previewLabel.text=Preview: + +# WizardVisualPanel1Excel.modeLabel.text=Import as: + +# ImportModeWrapper.mode.NODES_TABLE=Nodes table +# ImportModeWrapper.mode.EDGES_TABLE=Edges table +# ImportModeWrapper.mode.ADJACENCY_LIST=Adjacency list +# ImportModeWrapper.mode.MATRIX=Matrix +# WizardVisualPanel1CSV.modeLabel.text=Import as: + +ImportCSVUIWizardAction.name=Importar planilha diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_ro.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_ro.properties new file mode 100644 index 0000000000..32d82d2b22 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_ro.properties @@ -0,0 +1,33 @@ + + +WizardVisualPanel1CSV.validation.file-permissions-error=S-a produs o eroare la citirea fi\u0219ierului. Verific\u0103 permisiunile \u0219i dac\u0103 fi\u0219ierul este \u00EEn uz. +ImportCSVUIWizardAction.name=Import\u0103 foaie de calcul +WizardVisualPanel1CSV.name=Op\u021Biuni generale CSV +WizardVisualPanel1CSV.comma=Virgul\u0103 +WizardVisualPanel1CSV.space=Spa\u021Biu +WizardVisualPanel1CSV.tab=Tab +WizardVisualPanel1CSV.filechooser.csvDescription=CSV +WizardVisualPanel1CSV.previewLabel.text=Previzualizare: +WizardVisualPanel1CSV.validation.invalid-file:Fi\u0219ier CSV nevalid +WizardVisualPanel1CSV.validation.error=Eroare +WizardVisualPanel1CSV.validation.edges.no-source-target-columns=Tabelul de muchii are nevoie de coloane "Surs\u0103" \u0219i "\u021Aint\u0103" cu id-uri de noduri. +WizardVisualPanel1CSV.validation.edges.empty-sources-or-targets=S-au g\u0103sit r\u00E2nduri cu coloane surs\u0103 \u0219i/sau \u021Bint\u0103 goale +WizardVisualPanel1CSV.filePathLabel.text=Fi\u0219ier CSV de importat: +WizardVisualPanel2.name=Set\u0103ri de import +WizardVisualPanel2.timeRepresentationLabel.text=Reprezentarea timpului +WizardVisualPanel2.columnsLabel.text=Coloane importate: +WizardVisualPanel1Excel.name=Op\u021Biuni generale Excel +WizardVisualPanel1Excel.separatorLabel.text=Foaie: +WizardVisualPanel1Excel.filePathLabel.text=Fi\u0219ier Excel de importat: +WizardVisualPanel1Excel.previewLabel.text=Previzualizare: +WizardVisualPanel1Excel.modeLabel.text=Import\u0103 ca: +ImportModeWrapper.mode.NODES_TABLE=Tabel de noduri +ImportModeWrapper.mode.EDGES_TABLE=Tabel de muchii +ImportModeWrapper.mode.ADJACENCY_LIST=List\u0103 de adiacen\u021B\u0103 +ImportModeWrapper.mode.MATRIX=Matrice +WizardVisualPanel1CSV.separatorLabel.text=Separator: +WizardVisualPanel1CSV.charsetLabel.text=Set de caractere: +WizardVisualPanel1CSV.validation.no-columns:Fi\u0219ierul nu are nicio coloan\u0103 +WizardVisualPanel1CSV.modeLabel.text=Import\u0103 ca: +WizardVisualPanel1CSV.semicolon=Punct \u0219i virgul\u0103 +WizardVisualPanel1CSV.validation.repeated-columns:Fi\u0219ierul nu poate avea nume de coloane repetate diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_ru.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_ru.properties new file mode 100644 index 0000000000..6a33ca1824 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_ru.properties @@ -0,0 +1,37 @@ +# ImportCSVUIWizardAction.name=Import spreadsheet +# WizardVisualPanel1CSV.name=General CSV options +# WizardVisualPanel1CSV.comma=Comma +# WizardVisualPanel1CSV.semicolon=Semicolon +# WizardVisualPanel1CSV.space=Space +# WizardVisualPanel1CSV.tab=Tab +# WizardVisualPanel1CSV.filechooser.csvDescription=CSV +WizardVisualPanel1CSV.pathTextField.text= +# WizardVisualPanel1CSV.separatorLabel.text=Separator: +# WizardVisualPanel1CSV.previewLabel.text=Preview: +# WizardVisualPanel1CSV.charsetLabel.text=Charset: +# WizardVisualPanel1CSV.validation.invalid-file:Invalid CSV file +# WizardVisualPanel1CSV.validation.no-columns:The file does not have any column +# WizardVisualPanel1CSV.validation.repeated-columns:The file can't have repeated column names +# WizardVisualPanel1CSV.validation.error=Error +# WizardVisualPanel1CSV.validation.file-permissions-error=An error happened when reading the file. Make sure the file is not in use and you have permissions. +# WizardVisualPanel1CSV.validation.edges.no-source-target-columns=Edges table needs a 'Source' and 'Target' column with nodes ids. +# WizardVisualPanel1CSV.validation.edges.empty-sources-or-targets=Found row(s) with empty Source and/or Target columns +# WizardVisualPanel1CSV.filePathLabel.text=CSV file to import: + +# WizardVisualPanel2.name=Import settings +# WizardVisualPanel2.timeRepresentationLabel.text=Time representation +# WizardVisualPanel2.columnsLabel.text=Imported columns: + +# WizardVisualPanel1Excel.name=General Excel Options +# WizardVisualPanel1Excel.separatorLabel.text=Sheet: +WizardVisualPanel1Excel.pathTextField.text= +# WizardVisualPanel1Excel.filePathLabel.text=Excel file to import: +# WizardVisualPanel1Excel.previewLabel.text=Preview: + +# WizardVisualPanel1Excel.modeLabel.text=Import as: + +# ImportModeWrapper.mode.NODES_TABLE=Nodes table +# ImportModeWrapper.mode.EDGES_TABLE=Edges table +# ImportModeWrapper.mode.ADJACENCY_LIST=Adjacency list +# ImportModeWrapper.mode.MATRIX=Matrix +# WizardVisualPanel1CSV.modeLabel.text=Import as: diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_th.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_tr.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_tr.properties new file mode 100644 index 0000000000..ac041ece3a --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_tr.properties @@ -0,0 +1,33 @@ +ImportCSVUIWizardAction.name=Import spreadsheet +WizardVisualPanel1CSV.name=General CSV options +WizardVisualPanel1CSV.comma=Comma +WizardVisualPanel1CSV.semicolon=Semicolon +WizardVisualPanel1CSV.space=Space +WizardVisualPanel1CSV.tab=Tab +WizardVisualPanel1CSV.filechooser.csvDescription=CSV +WizardVisualPanel1CSV.pathTextField.text= +WizardVisualPanel1CSV.separatorLabel.text=Separator: +WizardVisualPanel1CSV.previewLabel.text=Preview: +WizardVisualPanel1CSV.charsetLabel.text=Charset: +WizardVisualPanel1CSV.validation.invalid-file:Invalid CSV file +WizardVisualPanel1CSV.validation.no-columns:The file does not have any column +WizardVisualPanel1CSV.validation.repeated-columns:The file can't have repeated column names +WizardVisualPanel1CSV.validation.error=Error +WizardVisualPanel1CSV.validation.file-permissions-error=An error happened when reading the file. Make sure the file is not in use and you have permissions. +WizardVisualPanel1CSV.validation.edges.no-source-target-columns=Edges table needs a 'Source' and 'Target' column with nodes ids. +WizardVisualPanel1CSV.validation.edges.empty-sources-or-targets=Found row(s) with empty Source and/or Target columns +WizardVisualPanel1CSV.filePathLabel.text=CSV file to import: +WizardVisualPanel2.name=Import settings +WizardVisualPanel2.timeRepresentationLabel.text=Time representation +WizardVisualPanel2.columnsLabel.text=Imported columns: +WizardVisualPanel1Excel.name=General Excel Options +WizardVisualPanel1Excel.separatorLabel.text=Sheet: +WizardVisualPanel1Excel.pathTextField.text= +WizardVisualPanel1Excel.filePathLabel.text=Excel file to import: +WizardVisualPanel1Excel.previewLabel.text=Preview: +WizardVisualPanel1Excel.modeLabel.text=Import as: +ImportModeWrapper.mode.NODES_TABLE=Nodes table +ImportModeWrapper.mode.EDGES_TABLE=Edges table +ImportModeWrapper.mode.ADJACENCY_LIST=Adjacency list +ImportModeWrapper.mode.MATRIX=Matrix +WizardVisualPanel1CSV.modeLabel.text=Import as: diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_uk.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_uk.properties new file mode 100644 index 0000000000..30199062ff --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_uk.properties @@ -0,0 +1,33 @@ +WizardVisualPanel1Excel.pathTextField.text=\u0406 +WizardVisualPanel1CSV.validation.edges.empty-sources-or-targets=\u0417\u043D\u0430\u0439\u0434\u0435\u043D\u043E \u0440\u044F\u0434\u043A\u0438 \u0437 \u043F\u043E\u0440\u043E\u0436\u043D\u0456\u043C\u0438 \u0441\u0442\u043E\u0432\u043F\u0446\u044F\u043C\u0438 Source \u0456/\u0430\u0431\u043E Target +WizardVisualPanel1CSV.validation.repeated-columns:\u0423 \u0444\u0430\u0439\u043B\u0456 \u043D\u0435 \u043C\u043E\u0436\u0443\u0442\u044C \u043F\u043E\u0432\u0442\u043E\u0440\u044E\u0432\u0430\u0442\u0438\u0441\u044F \u0456\u043C\u0435\u043D\u0430 \u0441\u0442\u043E\u0432\u043F\u0446\u0456\u0432 +WizardVisualPanel1Excel.name=\u0417\u0430\u0433\u0430\u043B\u044C\u043D\u0456 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0438 Excel +WizardVisualPanel1CSV.comma=\u041A\u043E\u043C\u0430 +WizardVisualPanel1CSV.separatorLabel.text=\u0420\u043E\u0437\u0434\u0456\u043B\u044C\u043D\u0438\u043A: +WizardVisualPanel1CSV.semicolon=\u041A\u0440\u0430\u043F\u043A\u0430 \u0437 \u043A\u043E\u043C\u043E\u044E +WizardVisualPanel1CSV.name=\u0417\u0430\u0433\u0430\u043B\u044C\u043D\u0456 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440\u0438 CSV +WizardVisualPanel1CSV.space=\u041A\u043E\u0441\u043C\u043E\u0441 +WizardVisualPanel1CSV.tab=\u0412\u043A\u043B\u0430\u0434\u043A\u0430 +WizardVisualPanel1CSV.filechooser.csvDescription=CSV +WizardVisualPanel1CSV.pathTextField.text=\u0406 +WizardVisualPanel1CSV.previewLabel.text=\u041F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u0456\u0439 \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u0434: +WizardVisualPanel1CSV.charsetLabel.text=\u041A\u043E\u0434\u0443\u0432\u0430\u043D\u043D\u044F: +WizardVisualPanel1CSV.validation.invalid-file:\u041D\u0435\u0434\u0456\u0439\u0441\u043D\u0438\u0439 \u0444\u0430\u0439\u043B CSV +WizardVisualPanel1CSV.validation.no-columns:\u0424\u0430\u0439\u043B \u043D\u0435 \u043C\u0430\u0454 \u0436\u043E\u0434\u043D\u043E\u0433\u043E \u0441\u0442\u043E\u0432\u043F\u0446\u044F +WizardVisualPanel1CSV.validation.error=\u041F\u043E\u043C\u0438\u043B\u043A\u0430 +WizardVisualPanel1CSV.validation.file-permissions-error=\u041F\u0456\u0434 \u0447\u0430\u0441 \u0447\u0438\u0442\u0430\u043D\u043D\u044F \u0444\u0430\u0439\u043B\u0443 \u0441\u0442\u0430\u043B\u0430\u0441\u044F \u043F\u043E\u043C\u0438\u043B\u043A\u0430. \u041F\u0435\u0440\u0435\u043A\u043E\u043D\u0430\u0439\u0442\u0435\u0441\u044F, \u0449\u043E \u0444\u0430\u0439\u043B \u043D\u0435 \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0454\u0442\u044C\u0441\u044F, \u0456 \u0443 \u0432\u0430\u0441 \u0454 \u0434\u043E\u0437\u0432\u043E\u043B\u0438. +WizardVisualPanel1CSV.validation.edges.no-source-target-columns=\u0414\u043B\u044F \u0442\u0430\u0431\u043B\u0438\u0446\u0456 Edges \u043F\u043E\u0442\u0440\u0456\u0431\u0435\u043D \u0441\u0442\u043E\u0432\u043F\u0435\u0446\u044C \u00AB\u0414\u0436\u0435\u0440\u0435\u043B\u043E\u00BB \u0442\u0430 \u00AB\u0426\u0456\u043B\u044C\u00BB \u0437 \u0456\u0434\u0435\u043D\u0442\u0438\u0444\u0456\u043A\u0430\u0442\u043E\u0440\u0430\u043C\u0438 \u0432\u0443\u0437\u043B\u0456\u0432. +WizardVisualPanel1CSV.filePathLabel.text=\u0424\u0430\u0439\u043B CSV \u0434\u043B\u044F \u0456\u043C\u043F\u043E\u0440\u0442\u0443: +WizardVisualPanel2.name=\u0406\u043C\u043F\u043E\u0440\u0442 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u044C +WizardVisualPanel2.timeRepresentationLabel.text=\u041F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u043D\u044F \u0447\u0430\u0441\u0443 +WizardVisualPanel2.columnsLabel.text=\u0406\u043C\u043F\u043E\u0440\u0442\u043E\u0432\u0430\u043D\u0456 \u0441\u0442\u043E\u0432\u043F\u0446\u0456: +WizardVisualPanel1Excel.separatorLabel.text=\u0410\u0440\u043A\u0443\u0448: +WizardVisualPanel1Excel.filePathLabel.text=\u0424\u0430\u0439\u043B Excel \u0434\u043B\u044F \u0456\u043C\u043F\u043E\u0440\u0442\u0443: +WizardVisualPanel1Excel.previewLabel.text=\u041F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u0456\u0439 \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u0434: +WizardVisualPanel1Excel.modeLabel.text=\u0406\u043C\u043F\u043E\u0440\u0442\u0443\u0432\u0430\u0442\u0438 \u044F\u043A: +ImportModeWrapper.mode.NODES_TABLE=\u0422\u0430\u0431\u043B\u0438\u0446\u044F \u0432\u0443\u0437\u043B\u0456\u0432 +ImportModeWrapper.mode.EDGES_TABLE=\u0422\u0430\u0431\u043B\u0438\u0446\u044F \u0440\u0435\u0431\u0435\u0440 +ImportModeWrapper.mode.ADJACENCY_LIST=\u0421\u043F\u0438\u0441\u043E\u043A \u0441\u0443\u043C\u0456\u0436\u043D\u043E\u0441\u0442\u0456 +ImportModeWrapper.mode.MATRIX=\u041C\u0430\u0442\u0440\u0438\u0446\u044F +WizardVisualPanel1CSV.modeLabel.text=\u0406\u043C\u043F\u043E\u0440\u0442\u0443\u0432\u0430\u0442\u0438 \u044F\u043A: +ImportCSVUIWizardAction.name=\u0406\u043C\u043F\u043E\u0440\u0442 \u0435\u043B\u0435\u043A\u0442\u0440\u043E\u043D\u043D\u043E\u0457 \u0442\u0430\u0431\u043B\u0438\u0446\u0456 diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_zh_CN.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_zh_CN.properties new file mode 100644 index 0000000000..c854ff68d8 --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_zh_CN.properties @@ -0,0 +1,33 @@ +ImportCSVUIWizardAction.name=\u5bfc\u5165\u7535\u5b50\u8868\u683c +WizardVisualPanel1CSV.name=CSV \u5e38\u89c4\u9009\u9879 +WizardVisualPanel1CSV.comma=\u9017\u53f7 +WizardVisualPanel1CSV.semicolon=\u5206\u53f7 +WizardVisualPanel1CSV.space=\u7a7a\u683c +WizardVisualPanel1CSV.tab=\u8868\u683c +WizardVisualPanel1CSV.filechooser.csvDescription=CSV +WizardVisualPanel1CSV.pathTextField.text= +WizardVisualPanel1CSV.separatorLabel.text=\u5206\u9694\u7b26\uff1a +WizardVisualPanel1CSV.previewLabel.text=\u9884\u89c8: +WizardVisualPanel1CSV.charsetLabel.text=\u5b57\u7b26\u96c6\uff1a +WizardVisualPanel1CSV.validation.invalid-file:\u65e0\u6548\u7684 CSV \u6587\u4ef6 +WizardVisualPanel1CSV.validation.no-columns:\u8be5\u6587\u4ef6\u6ca1\u6709\u4efb\u4f55\u5217 +WizardVisualPanel1CSV.validation.repeated-columns:\u6587\u4ef6\u4e0d\u5305\u542b\u4efb\u4f55\u5217 +WizardVisualPanel1CSV.validation.error=\u9519\u8bef +WizardVisualPanel1CSV.validation.file-permissions-error=\u8bfb\u6587\u4ef6\u65f6\u62a5\u9519\u3002\u786e\u8ba4\u6587\u4ef6\u662f\u5426\u6b63\u5728\u88ab\u4f7f\u7528\uff0c\u5e76\u786e\u4fdd\u4f60\u6709\u6743\u9650\u3002 +WizardVisualPanel1CSV.validation.edges.no-source-target-columns=\u8fb9\u6570\u636e\u9700\u8981 \u201c\u6e90\u8282\u70b9\u201d \u4e0e \u201c\u76ee\u6807\u8282\u70b9\u201d \u7684\u7f16\u53f7\u3002 +WizardVisualPanel1CSV.validation.edges.empty-sources-or-targets=\u627e\u51fa\u7a7a\uff08\u6e90\u6216\u76ee\u6807\uff09\u7684\u5217\u6216\u884c +WizardVisualPanel1CSV.filePathLabel.text=\u9009\u62e9\u4e00\u4e2aCSV\u6587\u4ef6\u8f93\u5165\uff1a +WizardVisualPanel2.name=\u8f93\u5165\u8bbe\u7f6e +WizardVisualPanel2.timeRepresentationLabel.text=\u65f6\u95f4\u8bbe\u5b9a +WizardVisualPanel2.columnsLabel.text=\u5BFC\u5165\u7684\u5217\uFF1A +WizardVisualPanel1Excel.name=Excel \u5e38\u89c4\u9009\u9879 +WizardVisualPanel1Excel.separatorLabel.text=\u8868\u5355: +WizardVisualPanel1Excel.pathTextField.text= +WizardVisualPanel1Excel.filePathLabel.text=\u9009\u62e9\u4e00\u4e2aCSV\u6587\u4ef6\u8f93\u5165\uff1a +WizardVisualPanel1Excel.previewLabel.text=\u9884\u89c8\uff1a +WizardVisualPanel1Excel.modeLabel.text=\u5BFC\u5165\u4E3A\uFF1A +ImportModeWrapper.mode.NODES_TABLE=\u8282\u70b9\u8868\u683c +ImportModeWrapper.mode.EDGES_TABLE=\u8fb9\u8868\u683c +ImportModeWrapper.mode.ADJACENCY_LIST=\u90bb\u63a5\u540d\u5355 +ImportModeWrapper.mode.MATRIX=\u77e9\u9635 +WizardVisualPanel1CSV.modeLabel.text=\u5BFC\u5165\u4E3A\uFF1A diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_zh_TW.properties b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_zh_TW.properties new file mode 100644 index 0000000000..ac041ece3a --- /dev/null +++ b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/spreadsheet/wizard/Bundle_zh_TW.properties @@ -0,0 +1,33 @@ +ImportCSVUIWizardAction.name=Import spreadsheet +WizardVisualPanel1CSV.name=General CSV options +WizardVisualPanel1CSV.comma=Comma +WizardVisualPanel1CSV.semicolon=Semicolon +WizardVisualPanel1CSV.space=Space +WizardVisualPanel1CSV.tab=Tab +WizardVisualPanel1CSV.filechooser.csvDescription=CSV +WizardVisualPanel1CSV.pathTextField.text= +WizardVisualPanel1CSV.separatorLabel.text=Separator: +WizardVisualPanel1CSV.previewLabel.text=Preview: +WizardVisualPanel1CSV.charsetLabel.text=Charset: +WizardVisualPanel1CSV.validation.invalid-file:Invalid CSV file +WizardVisualPanel1CSV.validation.no-columns:The file does not have any column +WizardVisualPanel1CSV.validation.repeated-columns:The file can't have repeated column names +WizardVisualPanel1CSV.validation.error=Error +WizardVisualPanel1CSV.validation.file-permissions-error=An error happened when reading the file. Make sure the file is not in use and you have permissions. +WizardVisualPanel1CSV.validation.edges.no-source-target-columns=Edges table needs a 'Source' and 'Target' column with nodes ids. +WizardVisualPanel1CSV.validation.edges.empty-sources-or-targets=Found row(s) with empty Source and/or Target columns +WizardVisualPanel1CSV.filePathLabel.text=CSV file to import: +WizardVisualPanel2.name=Import settings +WizardVisualPanel2.timeRepresentationLabel.text=Time representation +WizardVisualPanel2.columnsLabel.text=Imported columns: +WizardVisualPanel1Excel.name=General Excel Options +WizardVisualPanel1Excel.separatorLabel.text=Sheet: +WizardVisualPanel1Excel.pathTextField.text= +WizardVisualPanel1Excel.filePathLabel.text=Excel file to import: +WizardVisualPanel1Excel.previewLabel.text=Preview: +WizardVisualPanel1Excel.modeLabel.text=Import as: +ImportModeWrapper.mode.NODES_TABLE=Nodes table +ImportModeWrapper.mode.EDGES_TABLE=Edges table +ImportModeWrapper.mode.ADJACENCY_LIST=Adjacency list +ImportModeWrapper.mode.MATRIX=Matrix +WizardVisualPanel1CSV.modeLabel.text=Import as: diff --git a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/zh_CN.po b/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/zh_CN.po deleted file mode 100644 index 3de97fa4f3..0000000000 --- a/modules/ImportPluginUI/src/main/resources/org/gephi/ui/importer/plugin/zh_CN.po +++ /dev/null @@ -1,108 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:11+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζ ‡ε‡†ηš„ζ–‡δ»Άε’Œζ•°ζεΊ“θΎη½η•Œι’" - -msgid "EdgeListBuilder.displayName" -msgstr "边名单..." - -msgid "EdgeListPanel.configurationLabel.text" -msgstr "配η½οΌš" - -msgid "EdgeListPanel.hostLabel.text" -msgstr "主机:" - -msgid "EdgeListPanel.fileLabel.text" -msgstr "ζ–‡δ»ΆοΌš" - -msgid "EdgeListPanel.portLabel.text" -msgstr "端口:" - -msgid "EdgeListPanel.dbLabel.text" -msgstr "ζ•°ζεΊ“οΌš" - -msgid "EdgeListPanel.userLabel.text" -msgstr "η”¨ζˆ·εοΌš" - -msgid "EdgeListPanel.pwdLabel.text" -msgstr "ε―†η οΌš" - -msgid "EdgeListPanel.driverLabel.text" -msgstr "ι©±εŠ¨η¨‹εΊοΌš" - -msgid "EdgeListPanel.nodeQueryLabel.text" -msgstr "θŠ‚η‚ΉζŸ₯诒:" - -msgid "EdgeListPanel.edgeQueryLabel.text" -msgstr "θΎΉζŸ₯诒:" - -msgid "EdgeListPanel.nodeQueryTextField.text" -msgstr "δ»ŽθŠ‚η‚Ήι€‰ζ‹©*" - -msgid "EdgeListPanel.testConnection.text" -msgstr "ζ΅‹θ―•θΏžζŽ₯" - -msgid "EdgeListPanel.edgeQueryTextField.text" -msgstr "δ»ŽθΎΉι€‰ζ‹©*" - -msgid "EdgeListPanel.configNameLabel.text" -msgstr "配η½εη§°οΌš" - -msgid "EdgeListPanel.alert.connection_successful" -msgstr "连ζŽ₯成功!" - -msgid "EdgeListPanel.alert.configuration_removed" -msgstr "配η½{0}ζˆεŠŸεˆ ι™€γ€‚" - -msgid "EdgeListPanel.alert.configuration_unsaved" -msgstr "歀配η½δΈδΌšθ’«δΏε­˜γ€‚" - -msgid "EdgeListPanel.template.name" -msgstr "新配η½" - -msgid "EdgeListPanel.removeConfigurationButton.toolTipText" -msgstr "εˆ ι™€ι€‰εšηš„配η½" - -msgid "EdgeListPanel.jXHeader1.title" -msgstr "θΎΉεˆ—θ‘¨ζ•°ζεΊ“" - -msgid "EdgeListPanel.header" -msgstr "θŠ‚η‚Ήε’ŒθΎΉηš„ζ•°ζεΊ“θ‘¨ζ Όζœ‰δΈ€εˆ—οΌšζΊε’Œη›ζ ‡γ€‚ε‘½εθŠ‚η‚Ήηš„δΈ»θ¦ηš„εˆ—β€œIDβ€ε’ŒθΎΉζ β€œζΊβ€ε’Œβ€œη›ζ ‡β€γ€‚εˆ—β€œζ ‡η­Ύβ€οΌŒβ€œxβ€οΌŒβ€œyβ€ε’Œβ€œε€§ε°β€θŠ‚η‚Ήε’ŒθΎΉηš„β€œζ ‡η­Ύβ€ε’Œβ€œζƒι‡β€ζ˜―ε―ι€‰ηš„γ€‚ε―ΉδΊŽεŠ¨ζ€ηš„η½‘η»œοΌŒδ½Ώη”¨β€œεΌ€ε§‹β€ε’Œβ€œη»“ζŸβ€εˆ—η±»εž‹ζ—₯期,ζ—₯ζœŸζ—Άι—΄ζˆ–εŒη²ΎεΊ¦εž‹γ€‚" - -msgid "EdgeListPanel.sqliteFileChooser.title" -msgstr "ζ•°ζεΊ“ζ–‡δ»Ά" - -msgid "EdgeListPanel.sqliteFileChooser.filefilter" -msgstr "SQLiteζ•°ζεΊ“" - -msgid "ImporterVnaUI.displayName" -msgstr "VNAηš„θΎ“ε…₯" - -msgid "ImporterVnaUI.message.linear" -msgstr "ηΊΏε½ιšη€εƒηš„ε€ΌηΊΏζ€§ε’žεŠ γ€‚" - -msgid "ImporterVnaUI.message.square_root" -msgstr "ηΊΏε½ιšη€ε…Άε€Όηš„εΉ³ζ–Ήζ Ήθ€Œε’žεŠ γ€‚" - -msgid "ImporterVnaUI.message.logarithmic" -msgstr "ηΊΏε½ιšη€ε…Άε€Όηš„ε―Ήζ•°θ€Œε’žεŠ γ€‚" - -msgid "EdgeListPanel.browseButton.text" -msgstr "桏览" diff --git a/modules/LayoutAPI/pom.xml b/modules/LayoutAPI/pom.xml index da8ffeb700..0ca13fb201 100644 --- a/modules/LayoutAPI/pom.xml +++ b/modules/LayoutAPI/pom.xml @@ -4,13 +4,13 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi layout-api - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm LayoutAPI @@ -43,14 +43,26 @@ ${project.groupId} utils - ${project.version} + + + + + ${project.groupId} + project-api + test-jar + test + + + ${project.groupId} + ui-utils + test - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/LayoutAPI/src/main/java/org/gephi/layout/LayoutControllerImpl.java b/modules/LayoutAPI/src/main/java/org/gephi/layout/LayoutControllerImpl.java index 1c8da95143..4d81302803 100644 --- a/modules/LayoutAPI/src/main/java/org/gephi/layout/LayoutControllerImpl.java +++ b/modules/LayoutAPI/src/main/java/org/gephi/layout/LayoutControllerImpl.java @@ -39,30 +39,34 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout; import org.gephi.graph.api.GraphController; -import org.gephi.layout.spi.Layout; +import org.gephi.graph.api.GraphModel; import org.gephi.layout.api.LayoutController; -import org.gephi.layout.api.LayoutModel; +import org.gephi.layout.spi.Layout; import org.gephi.project.api.ProjectController; -import org.gephi.utils.longtask.spi.LongTask; -import org.gephi.utils.progress.ProgressTicket; import org.gephi.project.api.Workspace; import org.gephi.project.api.WorkspaceListener; +import org.gephi.project.spi.Controller; +import org.gephi.utils.longtask.spi.LongTask; import org.gephi.utils.progress.Progress; +import org.gephi.utils.progress.ProgressTicket; +import org.openide.util.Exceptions; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; +import org.openide.util.lookup.ServiceProviders; /** - * * @author Mathieu Bastian */ -@ServiceProvider(service = LayoutController.class) -public class LayoutControllerImpl implements LayoutController { +@ServiceProviders({ + @ServiceProvider(service = LayoutController.class), + @ServiceProvider(service = Controller.class)}) +public class LayoutControllerImpl implements LayoutController, Controller { - private LayoutModelImpl model; private LayoutRun layoutRun; public LayoutControllerImpl() { @@ -70,61 +74,68 @@ public LayoutControllerImpl() { @Override public void initialize(Workspace workspace) { - workspace.add(new LayoutModelImpl()); + } @Override public void select(Workspace workspace) { - model = workspace.getLookup().lookup(LayoutModelImpl.class); - if (model == null) { - model = new LayoutModelImpl(); - } - workspace.add(model); + } @Override public void unselect(Workspace workspace) { + LayoutModelImpl model = getModel(workspace); if (model != null && model.getSelectedLayout() != null) { - model.saveProperties(model.getSelectedLayout()); + try { + model.saveProperties(model.getSelectedLayout()); + } catch (Exception e) { + Exceptions.printStackTrace(e); + } } } @Override public void close(Workspace workspace) { - LayoutModelImpl layoutModel = workspace.getLookup().lookup(LayoutModelImpl.class); - if (layoutModel != null) { - layoutModel.getExecutor().cancel(); + LayoutModelImpl model = getModel(workspace); + if (model != null) { + model.getExecutor().cancel(); } } @Override public void disable() { - model = null; } }); + } - ProjectController projectController = Lookup.getDefault().lookup(ProjectController.class); - if (projectController.getCurrentWorkspace() != null) { - model = projectController.getCurrentWorkspace().getLookup().lookup(LayoutModelImpl.class); - if (model == null) { - model = new LayoutModelImpl(); - } - projectController.getCurrentWorkspace().add(model); - } + @Override + public Class getModelClass() { + return LayoutModelImpl.class; } @Override - public LayoutModel getModel() { - return model; + public LayoutModelImpl newModel(Workspace workspace) { + return new LayoutModelImpl(workspace); + } + + @Override + public LayoutModelImpl getModel(Workspace workspace) { + return Controller.super.getModel(workspace); + } + + @Override + public LayoutModelImpl getModel() { + return Controller.super.getModel(); } @Override public void setLayout(Layout layout) { - model.setSelectedLayout(layout); + getModel().setSelectedLayout(layout); } @Override public void executeLayout() { + LayoutModelImpl model = getModel(); if (model.getSelectedLayout() != null) { layoutRun = new LayoutRun(model.getSelectedLayout()); model.getExecutor().execute(layoutRun, layoutRun); @@ -132,8 +143,18 @@ public void executeLayout() { } } + @Override + public void executeLayout(Layout layout) { + GraphController graphController = Lookup.getDefault().lookup(GraphController.class); + GraphModel graphModel = graphController.getGraphModel(); + layout.setGraphModel(graphModel); + layoutRun = new LayoutRun(layout); + layoutRun.run(); + } + @Override public void executeLayout(int numIterations) { + LayoutModelImpl model = getModel(); if (model.getSelectedLayout() != null) { layoutRun = new LayoutRun(model.getSelectedLayout(), numIterations); model.getExecutor().execute(layoutRun, layoutRun); @@ -143,25 +164,28 @@ public void executeLayout(int numIterations) { @Override public boolean canExecute() { + LayoutModelImpl model = getModel(); return model.getSelectedLayout() != null && !model.isRunning(); } @Override public boolean canStop() { + LayoutModelImpl model = getModel(); return model.isRunning(); } @Override public void stopLayout() { + LayoutModelImpl model = getModel(); model.getExecutor().cancel(); } private static class LayoutRun implements LongTask, Runnable { private final Layout layout; + private final Integer iterations; private boolean stopRun = false; private ProgressTicket progressTicket; - private final Integer iterations; public LayoutRun(Layout layout) { this.layout = layout; @@ -188,7 +212,8 @@ public void run() { } layout.endAlgo(); if (i > 1) { - Progress.finish(progressTicket, NbBundle.getMessage(LayoutControllerImpl.class, "LayoutRun.end", layout.getBuilder().getName(), i)); + Progress.finish(progressTicket, + NbBundle.getMessage(LayoutControllerImpl.class, "LayoutRun.end", layout.getBuilder().getName(), i)); } else { Progress.finish(progressTicket); } @@ -197,7 +222,10 @@ public void run() { @Override public boolean cancel() { stopRun = true; - return true; + if (layout instanceof LongTask) { + return ((LongTask) layout).cancel(); + } + return false; } @Override diff --git a/modules/LayoutAPI/src/main/java/org/gephi/layout/LayoutModelImpl.java b/modules/LayoutAPI/src/main/java/org/gephi/layout/LayoutModelImpl.java index b4145ef640..844af16ecc 100644 --- a/modules/LayoutAPI/src/main/java/org/gephi/layout/LayoutModelImpl.java +++ b/modules/LayoutAPI/src/main/java/org/gephi/layout/LayoutModelImpl.java @@ -39,10 +39,12 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; +import java.beans.PropertyEditor; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -54,36 +56,42 @@ Development and Distribution License("CDDL") (collectively, the import javax.xml.stream.XMLStreamReader; import javax.xml.stream.XMLStreamWriter; import javax.xml.stream.events.XMLEvent; +import org.gephi.graph.api.Column; import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; import org.gephi.layout.api.LayoutModel; import org.gephi.layout.spi.Layout; import org.gephi.layout.spi.LayoutBuilder; import org.gephi.layout.spi.LayoutProperty; +import org.gephi.project.api.Workspace; +import org.gephi.project.spi.Model; import org.gephi.utils.Serialization; import org.gephi.utils.longtask.api.LongTaskErrorHandler; import org.gephi.utils.longtask.api.LongTaskExecutor; import org.gephi.utils.longtask.api.LongTaskListener; import org.gephi.utils.longtask.spi.LongTask; +import org.openide.util.Exceptions; import org.openide.util.Lookup; /** - * * @author Mathieu Bastian */ -public class LayoutModelImpl implements LayoutModel { +public class LayoutModelImpl implements LayoutModel, Model { //Listeners private final List listeners; //Data private final Map savedProperties; - private Layout selectedLayout; - private LayoutBuilder selectedBuilder; + private final Workspace workspace; //Util private final LongTaskExecutor executor; + private Layout selectedLayout; + private LayoutBuilder selectedBuilder; - public LayoutModelImpl() { - listeners = new ArrayList(); - savedProperties = new HashMap(); + public LayoutModelImpl(Workspace workspace) { + this.workspace = workspace; + listeners = new ArrayList<>(); + savedProperties = new HashMap<>(); executor = new LongTaskExecutor(true, "layout", 5); executor.setLongTaskListener(new LongTaskListener() { @@ -95,7 +103,7 @@ public void taskFinished(LongTask task) { executor.setDefaultErrorHandler(new LongTaskErrorHandler() { @Override public void fatalError(Throwable t) { - Logger.getLogger("").log(Level.SEVERE, "", t.getCause() != null ? t.getCause() : t); + Exceptions.printStackTrace(t); } }); } @@ -105,19 +113,6 @@ public Layout getSelectedLayout() { return selectedLayout; } - @Override - public LayoutBuilder getSelectedBuilder() { - return selectedBuilder; - } - - @Override - public Layout getLayout(LayoutBuilder layoutBuilder) { - Layout layout = layoutBuilder.buildLayout(); - selectedBuilder = layoutBuilder; - layout.resetPropertiesValues(); - return layout; - } - protected void setSelectedLayout(Layout selectedLayout) { Layout oldValue = this.selectedLayout; this.selectedLayout = selectedLayout; @@ -128,15 +123,36 @@ protected void setSelectedLayout(Layout selectedLayout) { injectGraph(); if (selectedLayout != null) { - loadProperties(selectedLayout); + boolean onlyDefaults = loadProperties(selectedLayout); + firePropertyChangeEvent(SELECTED_LAYOUT, oldValue, selectedLayout); + if (onlyDefaults) { + firePropertyChangeEvent(DEFAULTS_APPLIED, null, null); + } + } else { + firePropertyChangeEvent(SELECTED_LAYOUT, oldValue, null); } - firePropertyChangeEvent(SELECTED_LAYOUT, oldValue, selectedLayout); + } + + @Override + public LayoutBuilder getSelectedBuilder() { + return selectedBuilder; + } + + @Override + public Layout getLayout(LayoutBuilder layoutBuilder) { + Layout layout = layoutBuilder.buildLayout(); + GraphController graphController = Lookup.getDefault().lookup(GraphController.class); + GraphModel graphModel = graphController.getGraphModel(workspace); + layout.setGraphModel(graphModel); + selectedBuilder = layoutBuilder; + layout.resetPropertiesValues(); + return layout; } public void injectGraph() { GraphController graphController = Lookup.getDefault().lookup(GraphController.class); - if (selectedLayout != null && graphController.getGraphModel() != null) { - selectedLayout.setGraphModel(graphController.getGraphModel()); + if (selectedLayout != null && graphController.getGraphModel(workspace) != null) { + selectedLayout.setGraphModel(graphController.getGraphModel(workspace)); } } @@ -163,14 +179,20 @@ public void removePropertyChangeListener(PropertyChangeListener listener) { private void firePropertyChangeEvent(String propertyName, Object oldValue, Object newValue) { PropertyChangeEvent evt = null; - if (propertyName.equals(SELECTED_LAYOUT)) { - evt = new PropertyChangeEvent(this, SELECTED_LAYOUT, oldValue, newValue); - } else if (propertyName.equals(RUNNING)) { - evt = new PropertyChangeEvent(this, RUNNING, oldValue, newValue); - } else { - return; + switch (propertyName) { + case SELECTED_LAYOUT: + evt = new PropertyChangeEvent(this, SELECTED_LAYOUT, oldValue, newValue); + break; + case RUNNING: + evt = new PropertyChangeEvent(this, RUNNING, oldValue, newValue); + break; + case DEFAULTS_APPLIED: + evt = new PropertyChangeEvent(this, DEFAULTS_APPLIED, oldValue, newValue); + break; + default: + return; } - for (PropertyChangeListener l : listeners) { + for (PropertyChangeListener l : new ArrayList<>(listeners)) { l.propertyChange(evt); } } @@ -184,16 +206,56 @@ public void saveProperties(Layout layout) { try { Object value = p.getProperty().getValue(); if (value != null) { - savedProperties.put(new LayoutPropertyKey(p.getCanonicalName(), layout.getClass().getName()), value); + if (value instanceof Column) { + PropertyEditor propertyEditor = p.getProperty().getPropertyEditor(); + value = propertyEditor.getAsText(); + } + savedProperties + .put(new LayoutPropertyKey(p.getCanonicalName(), layout.getClass().getName()), value); } } catch (Exception e) { - e.printStackTrace(); + Logger.getLogger("").log( + Level.WARNING, + String.format("Error while saving layout '%s' property '%s' from saved properties", layout.getBuilder().getName(), p.getCanonicalName()), + e); } } } - public void loadProperties(Layout layout) { - List layoutValues = new ArrayList(); + // Coerce a Number to the target type if there is a mismatch (e.g. Integer saved, Long expected). + private Object coerceNumeric(Object value, Class targetType) { + if (!(value instanceof Number) || targetType == null) { + return value; + } + Number n = (Number) value; + if (targetType == Long.class || targetType == Long.TYPE) { + return n.longValue(); + } + if (targetType == Integer.class || targetType == Integer.TYPE) { + return n.intValue(); + } + if (targetType == Double.class || targetType == Double.TYPE) { + return n.doubleValue(); + } + if (targetType == Float.class || targetType == Float.TYPE) { + return n.floatValue(); + } + if (targetType == Short.class || targetType == Short.TYPE) { + return n.shortValue(); + } + if (targetType == Byte.class || targetType == Byte.TYPE) { + return n.byteValue(); + } + return value; + } + + // Returns true if only the default values were applied (no saved properties) + public boolean loadProperties(Layout layout) { + // In case some properties are only locally defined (like cooling in ForceAtlas) + layout.resetPropertiesValues(); + + boolean onlyDefaults = true; + List layoutValues = new ArrayList<>(); for (LayoutPropertyKey val : savedProperties.keySet()) { if (val.layoutClassName.equals(layout.getClass().getName())) { layoutValues.add(val); @@ -202,59 +264,35 @@ public void loadProperties(Layout layout) { for (LayoutProperty property : layout.getProperties()) { for (LayoutPropertyKey l : layoutValues) { if (property.getCanonicalName().equalsIgnoreCase(l.name) - || property.getProperty().getName().equalsIgnoreCase(l.name)) {//Also compare with property name to maintain compatibility with old saved properties + || property.getProperty().getName().equalsIgnoreCase( + l.name)) {//Also compare with property name to maintain compatibility with old saved properties try { - property.getProperty().setValue(savedProperties.get(l)); + if (property.getProperty().getValueType().isAssignableFrom(Column.class)) { + PropertyEditor propertyEditor = property.getProperty().getPropertyEditor(); + propertyEditor.setAsText(savedProperties.get(l).toString()); + onlyDefaults = false; + } else { + Object val = coerceNumeric(savedProperties.get(l), property.getProperty().getValueType()); + property.getProperty().setValue(val); + onlyDefaults = false; + } } catch (Exception e) { - e.printStackTrace(); + Logger.getLogger("").log( + Level.FINE, + String.format("Skipping incompatible saved value for layout '%s' property '%s'", layout.getBuilder().getName(), property.getCanonicalName())); } } } } + return onlyDefaults; } - private static class LayoutPropertyKey { - - private volatile int hashCode = 0; //Cache hashcode - private final String name; - private final String layoutClassName; - - public LayoutPropertyKey(String name, String layoutClassName) { - this.name = name; - this.layoutClassName = layoutClassName; - } - - @Override - public boolean equals(Object obj) { - if (!(obj instanceof LayoutPropertyKey)) { - return false; - } - if (obj == this) { - return true; - } - LayoutPropertyKey s = (LayoutPropertyKey) obj; - if (s.layoutClassName.equals(layoutClassName) && s.name.equals(name)) { - return true; - } - - return false; - } - - @Override - public int hashCode() { - if (hashCode == 0) { - int hash = 7; - hash += 53 * layoutClassName.hashCode(); - hash += 53 * name.hashCode(); - hashCode = hash; - } - return hashCode; - } + @Override + public Workspace getWorkspace() { + return workspace; } public void writeXML(XMLStreamWriter writer) throws XMLStreamException { - writer.writeStartElement("layoutmodel"); - if (selectedLayout != null) { saveProperties(selectedLayout); writer.writeStartElement("selectedlayoutbuilder"); @@ -276,8 +314,6 @@ public void writeXML(XMLStreamWriter writer) throws XMLStreamException { } writer.writeEndElement(); - - writer.writeEndElement(); } public void readXML(XMLStreamReader reader) throws XMLStreamException { @@ -291,7 +327,8 @@ public void readXML(XMLStreamReader reader) throws XMLStreamException { if (eventType.equals(XMLEvent.START_ELEMENT)) { String name = reader.getLocalName(); if ("property".equalsIgnoreCase(name)) { - key = new LayoutPropertyKey(reader.getAttributeValue(null, "property"), reader.getAttributeValue(null, "layout")); + key = new LayoutPropertyKey(reader.getAttributeValue(null, "property"), + reader.getAttributeValue(null, "layout")); valueClassStr = reader.getAttributeValue(null, "class"); } else if ("selectedlayoutbuilder".equalsIgnoreCase(name)) { selectedLayoutBuilderClass = reader.getAttributeValue(null, "class"); @@ -325,4 +362,38 @@ public void readXML(XMLStreamReader reader) throws XMLStreamException { private Object parse(String classStr, String str) { return Serialization.readValueFromText(str, classStr); } + + private static class LayoutPropertyKey { + + private final String name; + private final String layoutClassName; + private volatile int hashCode = 0; //Cache hashcode + + public LayoutPropertyKey(String name, String layoutClassName) { + this.name = name; + this.layoutClassName = layoutClassName; + } + + @Override + public boolean equals(Object obj) { + if (!(obj instanceof LayoutPropertyKey s)) { + return false; + } + if (obj == this) { + return true; + } + return s.layoutClassName.equals(layoutClassName) && s.name.equals(name); + } + + @Override + public int hashCode() { + if (hashCode == 0) { + int hash = 7; + hash += 53 * layoutClassName.hashCode(); + hash += 53 * name.hashCode(); + hashCode = hash; + } + return hashCode; + } + } } diff --git a/modules/LayoutAPI/src/main/java/org/gephi/layout/LayoutModelPersistenceProvider.java b/modules/LayoutAPI/src/main/java/org/gephi/layout/LayoutModelPersistenceProvider.java index bdc8b1d3e4..ff9ae828ff 100644 --- a/modules/LayoutAPI/src/main/java/org/gephi/layout/LayoutModelPersistenceProvider.java +++ b/modules/LayoutAPI/src/main/java/org/gephi/layout/LayoutModelPersistenceProvider.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout; import javax.xml.stream.XMLStreamException; @@ -46,14 +47,14 @@ Development and Distribution License("CDDL") (collectively, the import javax.xml.stream.XMLStreamWriter; import org.gephi.project.api.Workspace; import org.gephi.project.spi.WorkspacePersistenceProvider; +import org.gephi.project.spi.WorkspaceXMLPersistenceProvider; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = WorkspacePersistenceProvider.class) -public class LayoutModelPersistenceProvider implements WorkspacePersistenceProvider { +public class LayoutModelPersistenceProvider implements WorkspaceXMLPersistenceProvider { @Override public void writeXML(XMLStreamWriter writer, Workspace workspace) { @@ -70,10 +71,6 @@ public void writeXML(XMLStreamWriter writer, Workspace workspace) { @Override public void readXML(XMLStreamReader reader, Workspace workspace) { LayoutModelImpl model = workspace.getLookup().lookup(LayoutModelImpl.class); - if (model == null) { - model = new LayoutModelImpl(); - workspace.add(model); - } try { model.readXML(reader); } catch (XMLStreamException ex) { diff --git a/modules/LayoutAPI/src/main/java/org/gephi/layout/api/LayoutController.java b/modules/LayoutAPI/src/main/java/org/gephi/layout/api/LayoutController.java index 7c90aaafbf..f3a1957239 100644 --- a/modules/LayoutAPI/src/main/java/org/gephi/layout/api/LayoutController.java +++ b/modules/LayoutAPI/src/main/java/org/gephi/layout/api/LayoutController.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.api; import org.gephi.layout.spi.Layout; @@ -50,6 +51,7 @@ Development and Distribution License("CDDL") (collectively, the *

    * This controller is a singleton and can therefore be found in Lookup: *

    LayoutController lc = Lookup.getDefault().lookup(LayoutController.class);
    + * * @author Mathieu Bastian */ public interface LayoutController { @@ -57,40 +59,57 @@ public interface LayoutController { /** * Returns the model of the currently selected {@link Workspace}. */ - public LayoutModel getModel(); + LayoutModel getModel(); + + /** + * Returns the model in the given {@link Workspace}. + * + * @param workspace the workspace to lookup + */ + LayoutModel getModel(Workspace workspace); /** * Sets the Layout to execute. + * * @param layout the layout that is to be selected */ - public void setLayout(Layout layout); + void setLayout(Layout layout); /** * Executes the current Layout. */ - public void executeLayout(); + void executeLayout(); + + /** + * Executes a transformation. Unlike executeLayout(), this executes the layout synchronously and without + * cancellation support. + */ + void executeLayout(Layout transformation); /** * Executes the current layout for numIterations iterations. + * * @param numIterations the number of iterations of the algorithm */ - public void executeLayout(int numIterations); + void executeLayout(int numIterations); /** * Determine if the current Layout can be executed. + * * @return true if the layout is executable. */ - public boolean canExecute(); + boolean canExecute(); /** * Stop the Layout's execution. */ - public void stopLayout(); + void stopLayout(); /** * Determine if the current Layout execution can be stopped. * If the current Layout is not running, it generally cannot be stopped. + * * @return true if the layout can be stopped. */ - public boolean canStop(); + boolean canStop(); } diff --git a/modules/LayoutAPI/src/main/java/org/gephi/layout/api/LayoutModel.java b/modules/LayoutAPI/src/main/java/org/gephi/layout/api/LayoutModel.java index fdf53d0940..c89c05bb7a 100644 --- a/modules/LayoutAPI/src/main/java/org/gephi/layout/api/LayoutModel.java +++ b/modules/LayoutAPI/src/main/java/org/gephi/layout/api/LayoutModel.java @@ -39,11 +39,12 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.api; +import java.beans.PropertyChangeListener; import org.gephi.layout.spi.Layout; import org.gephi.layout.spi.LayoutBuilder; -import java.beans.PropertyChangeListener; import org.gephi.project.api.Workspace; /** @@ -51,19 +52,26 @@ Development and Distribution License("CDDL") (collectively, the * user interface. There is one model per {@link Workspace} *

    * PropertyChangeListener can be used to receive events about - * a change in the model. + * a change in the model. The events are the following: + *

      + *
    • SELECTED_LAYOUT : when the selected layout changes
    • + *
    • RUNNING : when the running flag changes
    • + *
    • DEFAULTS_APPLIED : when the default properties are applied to the layout
    • + *
    + * * @author Mathieu Bastian */ public interface LayoutModel { - public static final String SELECTED_LAYOUT = "selectedLayout"; - public static final String RUNNING = "running"; + String SELECTED_LAYOUT = "selectedLayout"; + String RUNNING = "running"; + String DEFAULTS_APPLIED = "defaultsApplied"; /** * Returns the currently selected layout or null if no * layout is selected. */ - public Layout getSelectedLayout(); + Layout getSelectedLayout(); /** * Return a layout instance for the given layoutBuilder. If @@ -72,34 +80,37 @@ public interface LayoutModel { *

    * Use this method instead of LayoutBuilder.buildLayout() * directly. + * * @param layoutBuilder the layout builder * @return the layout build from layoutBuilder with formely * saved properties. */ - public Layout getLayout(LayoutBuilder layoutBuilder); + Layout getLayout(LayoutBuilder layoutBuilder); /** * Returns the builder used for building the currently selected layout or * null if no layout is selected. */ - public LayoutBuilder getSelectedBuilder(); + LayoutBuilder getSelectedBuilder(); /** * Returns true if a layout is currently running, false * otherwise. */ - public boolean isRunning(); + boolean isRunning(); /** * Add a property change listener for this model. The listener * is notified when layout is selected and when running flag change. + * * @param listener a property change listener */ - public void addPropertyChangeListener(PropertyChangeListener listener); + void addPropertyChangeListener(PropertyChangeListener listener); /** * Remove listerner. + * * @param listener a property change listener. */ - public void removePropertyChangeListener(PropertyChangeListener listener); + void removePropertyChangeListener(PropertyChangeListener listener); } diff --git a/modules/LayoutAPI/src/main/java/org/gephi/layout/spi/Layout.java b/modules/LayoutAPI/src/main/java/org/gephi/layout/spi/Layout.java index 91f714fc15..9578e4aa6c 100644 --- a/modules/LayoutAPI/src/main/java/org/gephi/layout/spi/Layout.java +++ b/modules/LayoutAPI/src/main/java/org/gephi/layout/spi/Layout.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.spi; import org.gephi.graph.api.GraphModel; @@ -54,7 +55,7 @@ Development and Distribution License("CDDL") (collectively, the * properly define the various LayoutProperty returned by the * {@link #getProperties()} method and provide getter and setter for each. * - * @author Helder Suzuki + * @author Helder Suzuki * @see LayoutBuilder */ public interface Layout { @@ -62,49 +63,52 @@ public interface Layout { /** * initAlgo() is called to initialize the algorithm (prepare to run). */ - public void initAlgo(); + void initAlgo(); /** * Injects the graph model for the graph this Layout should operate on. *

    * It's preferable to get visible graph to perform on visualization. - * @param graphModel the graph model that the layout is to be working on + * + * @param graphModel the graph model that the layout is to be working on */ - public void setGraphModel(GraphModel graphModel); + void setGraphModel(GraphModel graphModel); /** * Run a step in the algorithm, should be called only if canAlgo() returns * true. */ - public void goAlgo(); + void goAlgo(); /** * Tests if the algorithm can run, called before each pass. - * @return true if the algorithm can run, - * false otherwise + * + * @return true if the algorithm can run, + * false otherwise */ - public boolean canAlgo(); + boolean canAlgo(); /** * Called when the algorithm is finished (canAlgo() returns false). */ - public void endAlgo(); + void endAlgo(); /** * The properties for this layout. - * @return the layout properties - * @throws NoSuchMethodException + * + * @return the layout properties */ - public LayoutProperty[] getProperties(); + LayoutProperty[] getProperties(); /** * Resets the properties values to the default values. */ - public void resetPropertiesValues(); + void resetPropertiesValues(); /** * The reference to the LayoutBuilder that instanciated this Layout. - * @return the reference to the builder that builts this instance + * + * @return the reference to the builder that builts this instance */ - public LayoutBuilder getBuilder(); + LayoutBuilder getBuilder(); } diff --git a/modules/LayoutAPI/src/main/java/org/gephi/layout/spi/LayoutBuilder.java b/modules/LayoutAPI/src/main/java/org/gephi/layout/spi/LayoutBuilder.java index 44c303fa0a..fbe2036782 100644 --- a/modules/LayoutAPI/src/main/java/org/gephi/layout/spi/LayoutBuilder.java +++ b/modules/LayoutAPI/src/main/java/org/gephi/layout/spi/LayoutBuilder.java @@ -39,45 +39,49 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.spi; /** * A LayoutBuilder provides a specific {@link Layout} instance. The * Builder pattern is more suitable for the Layout instantiation to allow * simpler reusability of Layout's code. - *

    + *

    * Only the LayoutBuilder of a given layout algorithm is exposed, * this way, one can devise different layout algorithms (represented by their * respective LayoutBuilder) that uses a same underlying Layout implementation, * but that differs only by an aggregation, composition or a property that is * set only during instantiation time. - *

    + *

    * See ClockwiseRotate and CounterClockwiseRotate for * a simple example of this pattern. Both are LayoutBuilders that instanciate * Layouts with a different behaviour (the direction of rotation), but both uses * the RotateLayout class. The only difference is the angle provided by the * LayoutBuilder on the time of instantiation of the RotateLayout object. * - * @author Helder Suzuki + * @author Helder Suzuki */ public interface LayoutBuilder { /** * The name of the behaviour of the Layout's provided by this Builder. - * @return the display neame of the layout algorithm + * + * @return the display neame of the layout algorithm */ - public String getName(); + String getName(); /** * User interface attributes (name, description, icon...) for all Layouts * built by this builder. + * * @return a LayoutUI instance */ - public LayoutUI getUI(); + LayoutUI getUI(); /** * Builds an instance of the Layout. - * @return a new Layout instance + * + * @return a new Layout instance */ - public Layout buildLayout(); + Layout buildLayout(); } diff --git a/modules/LayoutAPI/src/main/java/org/gephi/layout/spi/LayoutProperty.java b/modules/LayoutAPI/src/main/java/org/gephi/layout/spi/LayoutProperty.java index 286d675e99..8bc4d62400 100644 --- a/modules/LayoutAPI/src/main/java/org/gephi/layout/spi/LayoutProperty.java +++ b/modules/LayoutAPI/src/main/java/org/gephi/layout/spi/LayoutProperty.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.spi; import java.beans.PropertyEditor; @@ -53,12 +54,12 @@ Development and Distribution License("CDDL") (collectively, the */ public final class LayoutProperty { - protected Property property; - protected String category; + private Property property; + private String category; /** * Should be unique for a property and not localized. */ - protected String canonicalName; + private String canonicalName; public LayoutProperty(Property property, String category, String canonicalName) { this.property = property; @@ -66,44 +67,28 @@ public LayoutProperty(Property property, String category, String canonicalName) this.canonicalName = canonicalName; } - /** - * Return the underlying Property. - * @return the instance of Node.Property - */ - public Property getProperty() { - return property; - } - - /** - * Return the category of the property - */ - public String getCategory() { - return category; - } - - public String getCanonicalName() { - return canonicalName; - } - /** * Create a property. * The parameter propertyName will be used as the canonical name of the LayoutProperty. - * @param layout The layout instance - * @param valueType The type of the property value, ex: Double.class - * @param propertyName The display name of the property - * @param propertyCategory A category string or null for using - * default category + * + * @param layout The layout instance + * @param valueType The type of the property value, ex: Double.class + * @param propertyName The display name of the property + * @param propertyCategory A category string or null for using + * default category * @param propertyDescription A description string for the property - * @param getMethod The name of the get method for this property, must exist - * to make Java reflexion working. - * @param setMethod The name of the set method for this property, must exist - * to make Java reflexion working. + * @param getMethod The name of the get method for this property, must exist + * to make Java reflexion working. + * @param setMethod The name of the set method for this property, must exist + * to make Java reflexion working. * @return the created property * @throws NoSuchMethodException if the getter or setter methods cannot be found */ - public static LayoutProperty createProperty(Layout layout, Class valueType, String propertyName, String propertyCategory, String propertyDescription, String getMethod, String setMethod) throws NoSuchMethodException { + public static LayoutProperty createProperty(Layout layout, Class valueType, String propertyName, + String propertyCategory, String propertyDescription, String getMethod, + String setMethod) throws NoSuchMethodException { Property property = new PropertySupport.Reflection( - layout, valueType, getMethod, setMethod); + layout, valueType, getMethod, setMethod); property.setName(propertyName); property.setShortDescription(propertyDescription); @@ -116,23 +101,27 @@ public static LayoutProperty createProperty(Layout layout, Class valueType, Stri * editor must be specified when the property type don't have a registered * editor class. * The parameter propertyName will be used as the canonical name of the LayoutProperty. - * @param layout The layout instance - * @param valueType The type of the property value, ex: Double.class - * @param propertyName The display name of the property - * @param propertyCategory A category string or null for using - * default category + * + * @param layout The layout instance + * @param valueType The type of the property value, ex: Double.class + * @param propertyName The display name of the property + * @param propertyCategory A category string or null for using + * default category * @param propertyDescription A description string for the property - * @param getMethod The name of the get method for this property, must exist - * to make Java reflexion working. - * @param setMethod The name of the set method for this property, must exist - * to make Java reflexion working. - * @param editorClass A PropertyEditor class for the given type + * @param getMethod The name of the get method for this property, must exist + * to make Java reflexion working. + * @param setMethod The name of the set method for this property, must exist + * to make Java reflexion working. + * @param editorClass A PropertyEditor class for the given type * @return the created property * @throws NoSuchMethodException if the getter or setter methods cannot be found */ - public static LayoutProperty createProperty(Layout layout, Class valueType, String propertyName, String propertyCategory, String propertyDescription, String getMethod, String setMethod, Class editorClass) throws NoSuchMethodException { + public static LayoutProperty createProperty(Layout layout, Class valueType, String propertyName, + String propertyCategory, String propertyDescription, String getMethod, + String setMethod, Class editorClass) + throws NoSuchMethodException { PropertySupport.Reflection property = new PropertySupport.Reflection( - layout, valueType, getMethod, setMethod); + layout, valueType, getMethod, setMethod); property.setName(propertyName); property.setShortDescription(propertyDescription); @@ -144,23 +133,27 @@ public static LayoutProperty createProperty(Layout layout, Class valueType, Stri /** * Create a property. * The parameter propertyName will be used as the canonical name of the LayoutProperty. - * @param layout The layout instance - * @param valueType The type of the property value, ex: Double.class - * @param propertyName The display name of the property - * @param propertyCategory A category string or null for using - * default category + * + * @param layout The layout instance + * @param valueType The type of the property value, ex: Double.class + * @param propertyName The display name of the property + * @param propertyCategory A category string or null for using + * default category * @param propertyCanonicalName Canonical name for the LayoutProperty. It should be unique and not localized - * @param propertyDescription A description string for the property - * @param getMethod The name of the get method for this property, must exist - * to make Java reflexion working. - * @param setMethod The name of the set method for this property, must exist - * to make Java reflexion working. + * @param propertyDescription A description string for the property + * @param getMethod The name of the get method for this property, must exist + * to make Java reflexion working. + * @param setMethod The name of the set method for this property, must exist + * to make Java reflexion working. * @return the created property * @throws NoSuchMethodException if the getter or setter methods cannot be found */ - public static LayoutProperty createProperty(Layout layout, Class valueType, String propertyName, String propertyCategory, String propertyCanonicalName, String propertyDescription, String getMethod, String setMethod) throws NoSuchMethodException { + public static LayoutProperty createProperty(Layout layout, Class valueType, String propertyName, + String propertyCategory, String propertyCanonicalName, + String propertyDescription, String getMethod, String setMethod) + throws NoSuchMethodException { Property property = new PropertySupport.Reflection( - layout, valueType, getMethod, setMethod); + layout, valueType, getMethod, setMethod); property.setName(propertyName); property.setShortDescription(propertyDescription); @@ -173,24 +166,29 @@ public static LayoutProperty createProperty(Layout layout, Class valueType, Stri * editor must be specified when the property type don't have a registered * editor class. * The parameter propertyName will be used as the canonical name of the LayoutProperty. - * @param layout The layout instance - * @param valueType The type of the property value, ex: Double.class - * @param propertyName The display name of the property - * @param propertyCategory A category string or null for using - * default category + * + * @param layout The layout instance + * @param valueType The type of the property value, ex: Double.class + * @param propertyName The display name of the property + * @param propertyCategory A category string or null for using + * default category * @param propertyCanonicalName Canonical name for the LayoutProperty. It should be unique and not localized - * @param propertyDescription A description string for the property - * @param getMethod The name of the get method for this property, must exist - * to make Java reflexion working. - * @param setMethod The name of the set method for this property, must exist - * to make Java reflexion working. - * @param editorClass A PropertyEditor class for the given type + * @param propertyDescription A description string for the property + * @param getMethod The name of the get method for this property, must exist + * to make Java reflexion working. + * @param setMethod The name of the set method for this property, must exist + * to make Java reflexion working. + * @param editorClass A PropertyEditor class for the given type * @return the created property * @throws NoSuchMethodException if the getter or setter methods cannot be found */ - public static LayoutProperty createProperty(Layout layout, Class valueType, String propertyName, String propertyCategory, String propertyCanonicalName, String propertyDescription, String getMethod, String setMethod, Class editorClass) throws NoSuchMethodException { + public static LayoutProperty createProperty(Layout layout, Class valueType, String propertyName, + String propertyCategory, String propertyCanonicalName, + String propertyDescription, String getMethod, String setMethod, + Class editorClass) + throws NoSuchMethodException { PropertySupport.Reflection property = new PropertySupport.Reflection( - layout, valueType, getMethod, setMethod); + layout, valueType, getMethod, setMethod); property.setName(propertyName); property.setShortDescription(propertyDescription); @@ -198,4 +196,24 @@ public static LayoutProperty createProperty(Layout layout, Class valueType, Stri return new LayoutProperty(property, propertyCategory, propertyCanonicalName); } + + /** + * Return the underlying Property. + * + * @return the instance of Node.Property + */ + public Property getProperty() { + return property; + } + + /** + * Return the category of the property + */ + public String getCategory() { + return category; + } + + public String getCanonicalName() { + return canonicalName; + } } diff --git a/modules/LayoutAPI/src/main/java/org/gephi/layout/spi/LayoutUI.java b/modules/LayoutAPI/src/main/java/org/gephi/layout/spi/LayoutUI.java index b1c2633d74..91a7f3e083 100644 --- a/modules/LayoutAPI/src/main/java/org/gephi/layout/spi/LayoutUI.java +++ b/modules/LayoutAPI/src/main/java/org/gephi/layout/spi/LayoutUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.spi; import javax.swing.Icon; @@ -53,38 +54,43 @@ public interface LayoutUI { /** * The description of the layout algorithm purpose. - * @return a description snippet for the algorithm + * + * @return a description snippet for the algorithm */ - public String getDescription(); + String getDescription(); /** * The icon that represents the layout action. - * @return a icon for this particular layout + * + * @return a icon for this particular layout */ - public Icon getIcon(); + Icon getIcon(); /** * A LayoutUI can have a optional settings panel, that will be * displayed instead of the property sheet. + * * @param layout the layout that require a simple panel * @return A simple settings panel for layout or * null */ - public JPanel getSimplePanel(Layout layout); + JPanel getSimplePanel(Layout layout); /** * An appraisal of quality for this algorithm. The rank must be between 1 and * 5. The rank will be displayed tousers to help them to choose a suitable * algorithm. Return -1 if you don't want to display a rank. + * * @return an integer between 1 and 5 or -1 if you don't want to show a rank */ - public int getQualityRank(); + int getQualityRank(); /** * An appraisal of speed for this algorithm. The rank must be between 1 and * 5. The rank will be displayed tousers to help them to choose a suitable * algorithm. Return -1 if you don't want to display a rank. + * * @return an integer between 1 and 5 or -1 if you don't want to show a rank */ - public int getSpeedRank(); + int getSpeedRank(); } diff --git a/modules/LayoutAPI/src/main/nbm/manifest.mf b/modules/LayoutAPI/src/main/nbm/manifest.mf index 292a299189..016fa9a8e8 100644 --- a/modules/LayoutAPI/src/main/nbm/manifest.mf +++ b/modules/LayoutAPI/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/layout/api/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi Core +OpenIDE-Module-Name: Layout API diff --git a/modules/LayoutAPI/src/main/nbm/module.xml b/modules/LayoutAPI/src/main/nbm/module.xml deleted file mode 100644 index 0d8bb62a9b..0000000000 --- a/modules/LayoutAPI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_ar.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_ca.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_ca.properties new file mode 100644 index 0000000000..7145ee9b47 --- /dev/null +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_ca.properties @@ -0,0 +1 @@ +LayoutRun.end = {0} ha acabat a la iteraciσ {1} diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_cs.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_cs.properties index 6b787e2288..753ec5000f 100644 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_cs.properties +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_cs.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-29 19\:36+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -LayoutRun.end={0} skon\u010dilo v opakov\u00e1n\u00ed {1} +LayoutRun.end = {0} skon\u010dilo v opakovαnν {1} diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_de.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_de.properties new file mode 100644 index 0000000000..7cc39068d3 --- /dev/null +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_de.properties @@ -0,0 +1 @@ +LayoutRun.end = {0} bei Iteration {1} beendet diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_es.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_es.properties index 9981040520..f0a8480531 100644 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_es.properties +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_es.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 21\:52+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -LayoutRun.end={0} finaliz\u00f3 en la iteraci\u00f3n {1} +LayoutRun.end = {0} finalizσ en la iteraciσn {1} diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_fr.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_fr.properties index 8af8acd90b..f83cba47f6 100644 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_fr.properties +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_fr.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 11\:37+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -LayoutRun.end={0} a termin\u00e9 \u00e0 l'it\u00e9ration {1} +LayoutRun.end = {0} a terminι ΰ l'itιration {1} diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_he.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_he.properties new file mode 100644 index 0000000000..956fefd226 --- /dev/null +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_he.properties @@ -0,0 +1 @@ +LayoutRun.end={0} ended at iteration {1} diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_hu.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_hu.properties new file mode 100644 index 0000000000..fc5d7f8067 --- /dev/null +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_hu.properties @@ -0,0 +1,3 @@ + + +LayoutRun.end={0} a k\u00F6vetkez\u0151 iter\u00E1ci\u00F3val \u00E9rt v\u00E9get: {1} diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_it.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_it.properties new file mode 100644 index 0000000000..956fefd226 --- /dev/null +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_it.properties @@ -0,0 +1 @@ +LayoutRun.end={0} ended at iteration {1} diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_ja.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_ja.properties index 3a07d2b1d4..e0df92cc56 100644 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_ja.properties +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_ja.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 09\:45+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -LayoutRun.end={0}\u306f\u53cd\u5fa9 {1}\u3067\u7d42\u4e86 +LayoutRun.end = {0}\u306f\u53cd\u5fa9 {1}\u3067\u7d42\u4e86 diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_ko.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_ko.properties new file mode 100644 index 0000000000..bed9d7bc60 --- /dev/null +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_ko.properties @@ -0,0 +1,3 @@ + + +LayoutRun.end={0}\uAC00 \uBC18\uBCF5 {1}\uC5D0\uC11C \uC885\uB8CC\uB418\uC5C8\uC2B5\uB2C8\uB2E4 diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_nl.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_nl.properties new file mode 100644 index 0000000000..956fefd226 --- /dev/null +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_nl.properties @@ -0,0 +1 @@ +LayoutRun.end={0} ended at iteration {1} diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_pt_BR.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_pt_BR.properties index ecc79ff31a..4cd68e21c3 100644 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_pt_BR.properties +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_pt_BR.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio Faria Jr. , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 12\:26+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -LayoutRun.end={0} terminou na itera\u00e7\u00e3o {1} +LayoutRun.end = {0} terminou na iteraηγo {1} diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_ro.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_ro.properties new file mode 100644 index 0000000000..b4ae56cdad --- /dev/null +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_ro.properties @@ -0,0 +1,3 @@ + + +LayoutRun.end={0} s-a \u00EEncheiat la itera\u021Bia {1} diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_ru.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_ru.properties index 1d4f628285..bb30677315 100644 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_ru.properties +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_ru.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-27 07\:31+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -LayoutRun.end={0} \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430 \u043d\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u043e\u043c\u0435\u0440 {1} +LayoutRun.end = {0} \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430 \u043d\u0430 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u043e\u043c\u0435\u0440 {1} diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_th.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_tr.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_tr.properties new file mode 100644 index 0000000000..956fefd226 --- /dev/null +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_tr.properties @@ -0,0 +1 @@ +LayoutRun.end={0} ended at iteration {1} diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_uk.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_uk.properties new file mode 100644 index 0000000000..accd18bfb6 --- /dev/null +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_uk.properties @@ -0,0 +1 @@ +LayoutRun.end={0} \u0437\u0430\u043A\u0456\u043D\u0447\u0438\u0432\u0441\u044F \u043D\u0430 \u0456\u0442\u0435\u0440\u0430\u0446\u0456\u0457 {1} diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_zh_CN.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_zh_CN.properties index bc11ce9f33..d7dd6253ee 100644 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_zh_CN.properties +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_zh_CN.properties @@ -1,8 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:21+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -LayoutRun.end={0} \u5728{1}\u6b21\u8fed\u4ee3\u7ed3\u675f +LayoutRun.end = {0} \u5728{1}\u6b21\u8fed\u4ee3\u7ed3\u675f diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_zh_TW.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_zh_TW.properties new file mode 100644 index 0000000000..956fefd226 --- /dev/null +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/Bundle_zh_TW.properties @@ -0,0 +1 @@ +LayoutRun.end={0} ended at iteration {1} diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle.properties index 20dbe680b9..dd83302b0f 100644 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle.properties +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle.properties @@ -1,5 +1,2 @@ -OpenIDE-Module-Display-Category=Gephi Core -OpenIDE-Module-Long-Description=\ - API/SPI for layout -OpenIDE-Module-Name=Layout API +OpenIDE-Module-Long-Description=API/SPI for layout OpenIDE-Module-Short-Description=API/SPI for layout diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_ar.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_ca.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_ca.properties new file mode 100644 index 0000000000..ca2944eb15 --- /dev/null +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_ca.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI pel disseny +OpenIDE-Module-Short-Description=API/SPI pel disseny diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_cs.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_cs.properties index a059eda48a..02b6d7d208 100644 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_cs.properties +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_cs.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-09 18\:53+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=API/SPI pro rozvr\u017een\u00ed - -OpenIDE-Module-Short-Description=API/SPI pro rozvr\u017een\u00ed +OpenIDE-Module-Long-Description=API/SPI pro rozvr\u017eenν +OpenIDE-Module-Short-Description=API/SPI pro rozvr\u017eenν diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_de.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_de.properties new file mode 100644 index 0000000000..ff7ce9f7f7 --- /dev/null +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_de.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI fόr das Layout +OpenIDE-Module-Short-Description=API/SPI fόr das Layout diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_es.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_es.properties index 5b36ff369c..8afdf71856 100644 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_es.properties +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_es.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:02+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=API/SPI del m\u00f3dulo Layout - -OpenIDE-Module-Short-Description=API/SPI del m\u00f3dulo Layout +OpenIDE-Module-Long-Description=API/SPI del mσdulo Layout +OpenIDE-Module-Short-Description=API/SPI del mσdulo Layout diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_fr.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_fr.properties index 9240880642..4ae60296ac 100644 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_fr.properties +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_fr.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:02+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API/SPI du module Layout - -OpenIDE-Module-Short-Description=API/SPI du module Layout +OpenIDE-Module-Long-Description=API/SPI du module Layout +OpenIDE-Module-Short-Description=API/SPI du module Layout diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_he.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_he.properties new file mode 100644 index 0000000000..ea3fa9a4b5 --- /dev/null +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_he.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI for layout +OpenIDE-Module-Short-Description=API/SPI for layout diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_hu.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_hu.properties new file mode 100644 index 0000000000..2ca886429c --- /dev/null +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_hu.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Short-Description=API/SPI az elrendez\u00E9shez +OpenIDE-Module-Long-Description=API/SPI az elrendez\u00E9shez diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_it.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_it.properties new file mode 100644 index 0000000000..ea3fa9a4b5 --- /dev/null +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_it.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI for layout +OpenIDE-Module-Short-Description=API/SPI for layout diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_ja.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_ja.properties index 10c49643b5..34f694993f 100644 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_ja.properties +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_ja.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-19 05\:57+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u30ec\u30a4\u30a2\u30a6\u30c8\u7528API / SPI - -OpenIDE-Module-Short-Description=\u30ec\u30a4\u30a2\u30a6\u30c8\u7528API / SPI +OpenIDE-Module-Long-Description=\u30ec\u30a4\u30a2\u30a6\u30c8\u7528API / SPI +OpenIDE-Module-Short-Description=\u30ec\u30a4\u30a2\u30a6\u30c8\u7528API / SPI diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_ko.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_ko.properties new file mode 100644 index 0000000000..ed24d0225f --- /dev/null +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_ko.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Short-Description=\uB808\uC774\uC544\uC6C3\uC744 \uC704\uD55C API/SPI +OpenIDE-Module-Long-Description=\uB808\uC774\uC544\uC6C3\uC744 \uC704\uD55C API/SPI diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_nl.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_nl.properties new file mode 100644 index 0000000000..ea3fa9a4b5 --- /dev/null +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_nl.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI for layout +OpenIDE-Module-Short-Description=API/SPI for layout diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_pt_BR.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_pt_BR.properties index eef11482fa..954e96def6 100644 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_pt_BR.properties +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_pt_BR.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 16\:49+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API/SPI de distribui\u00e7\u00e3o - -OpenIDE-Module-Short-Description=API/SPI de distribui\u00e7\u00e3o +OpenIDE-Module-Long-Description=API/SPI de distribuiηγo +OpenIDE-Module-Short-Description=API/SPI de distribuiηγo diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_ro.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_ro.properties new file mode 100644 index 0000000000..0d3bdd321d --- /dev/null +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_ro.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Long-Description=API/SPI pentru aspect +OpenIDE-Module-Short-Description=API/SPI pentru aspect diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_ru.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_ru.properties index 3ca67ff5fb..05a6e25c7c 100644 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_ru.properties +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_ru.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-11-10 07\:08+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=API/SPI \u0434\u043b\u044f \u0443\u043a\u043b\u0430\u0434\u043a\u0438 - -OpenIDE-Module-Short-Description=API/SPI \u0434\u043b\u044f \u0443\u043a\u043b\u0430\u0434\u043a\u0438 +OpenIDE-Module-Long-Description=API/SPI \u0434\u043b\u044f \u0443\u043a\u043b\u0430\u0434\u043a\u0438 +OpenIDE-Module-Short-Description=API/SPI \u0434\u043b\u044f \u0443\u043a\u043b\u0430\u0434\u043a\u0438 diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_th.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_tr.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_tr.properties new file mode 100644 index 0000000000..ea3fa9a4b5 --- /dev/null +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_tr.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI for layout +OpenIDE-Module-Short-Description=API/SPI for layout diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_uk.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_uk.properties new file mode 100644 index 0000000000..db55d87160 --- /dev/null +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_uk.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Short-Description=API/SPI \u0434\u043B\u044F \u043C\u0430\u043A\u0435\u0442\u0430 +OpenIDE-Module-Long-Description=API/SPI \u0434\u043B\u044F \u043C\u0430\u043A\u0435\u0442\u0430 diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_zh_CN.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_zh_CN.properties index eb58a23c03..2d111b8180 100644 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_zh_CN.properties +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_zh_CN.properties @@ -1,10 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:10+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u5e94\u7528\u7a0b\u5e8f\u754c\u9762\u548c\u5355\u4e2a\u7a0b\u5e8f\u5b9e\u73b0\u7684\u8bbe\u8ba1 - -OpenIDE-Module-Short-Description=\u5e94\u7528\u7a0b\u5e8f\u754c\u9762\u548c\u5355\u4e2a\u7a0b\u5e8f\u5b9e\u73b0\u7684\u8bbe\u8ba1 +OpenIDE-Module-Long-Description=\u5e94\u7528\u7a0b\u5e8f\u754c\u9762\u548c\u5355\u4e2a\u7a0b\u5e8f\u5b9e\u73b0\u7684\u8bbe\u8ba1 +OpenIDE-Module-Short-Description=\u5e94\u7528\u7a0b\u5e8f\u754c\u9762\u548c\u5355\u4e2a\u7a0b\u5e8f\u5b9e\u73b0\u7684\u8bbe\u8ba1 diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_zh_TW.properties b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_zh_TW.properties new file mode 100644 index 0000000000..ea3fa9a4b5 --- /dev/null +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/Bundle_zh_TW.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI for layout +OpenIDE-Module-Short-Description=API/SPI for layout diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/cs.po b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/cs.po deleted file mode 100644 index f42857bdde..0000000000 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/cs.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-09 18:53+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI pro rozvrΕΎenΓ­" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI pro rozvrΕΎenΓ­" diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/es.po b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/es.po deleted file mode 100644 index 47d1cf6860..0000000000 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/es.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:02+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI del mΓ³dulo Layout" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI del mΓ³dulo Layout" diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/fr.po b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/fr.po deleted file mode 100644 index 4a221152bf..0000000000 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/fr.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:02+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI du module Layout" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI du module Layout" diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/ja.po b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/ja.po deleted file mode 100644 index 0cd5370521..0000000000 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-19 05:57+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "γƒ¬γ‚€γ‚’γ‚¦γƒˆη”¨API / SPI" - -msgid "OpenIDE-Module-Short-Description" -msgstr "γƒ¬γ‚€γ‚’γ‚¦γƒˆη”¨API / SPI" diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/org-gephi-layout-api.pot b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/org-gephi-layout-api.pot deleted file mode 100644 index 88cf8617ee..0000000000 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/org-gephi-layout-api.pot +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI for layout" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI for layout" diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/package.html b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/package.html index 64d8c2141e..396fd4c8fb 100644 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/package.html +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/package.html @@ -1,15 +1,20 @@ - - - - API for real-time layout algorithm tasks and proper user control. -

    - This API hosts layout algorithms and control their execution. It - registers all the LayoutBuilder implementations and - manages runnging states for serving UI. -

    -

    - The controller hosts the current LayoutModel, that - stores execution states for the workspace it belongs. -

    - - + + + + org.gephi.layout.api + + +

    + API for real-time layout algorithm tasks and proper user control. +

    +

    + This API hosts layout algorithms and control their execution. It + registers all the LayoutBuilder implementations and + manages runnging states for serving UI. +

    +

    + The controller hosts the current LayoutModel, that + stores execution states for the workspace it belongs. +

    + + diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/pt_BR.po b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/pt_BR.po deleted file mode 100644 index 690969867e..0000000000 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/pt_BR.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 16:49+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI de distribuiΓ§Γ£o" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI de distribuiΓ§Γ£o" diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/ru.po b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/ru.po deleted file mode 100644 index 44e9d00ca1..0000000000 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/ru.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-11-10 07:08+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI для ΡƒΠΊΠ»Π°Π΄ΠΊΠΈ" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI для ΡƒΠΊΠ»Π°Π΄ΠΊΠΈ" diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/zh_CN.po b/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/zh_CN.po deleted file mode 100644 index 95a82f49f4..0000000000 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/api/zh_CN.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:10+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "εΊ”η”¨η¨‹εΊη•Œι’ε’Œε•δΈͺ程序εžηŽ°ηš„θΎθ‘" - -msgid "OpenIDE-Module-Short-Description" -msgstr "εΊ”η”¨η¨‹εΊη•Œι’ε’Œε•δΈͺ程序εžηŽ°ηš„θΎθ‘" diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/cs.po b/modules/LayoutAPI/src/main/resources/org/gephi/layout/cs.po deleted file mode 100644 index 2e8a4de5d4..0000000000 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/cs.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-29 19:36+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "LayoutRun.end" -msgstr "{0} skončilo v opakovΓ‘nΓ­ {1}" diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/es.po b/modules/LayoutAPI/src/main/resources/org/gephi/layout/es.po deleted file mode 100644 index fd9c48d061..0000000000 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/es.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 21:52+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "LayoutRun.end" -msgstr "{0} finalizΓ³ en la iteraciΓ³n {1}" diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/fr.po b/modules/LayoutAPI/src/main/resources/org/gephi/layout/fr.po deleted file mode 100644 index 0427725a28..0000000000 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/fr.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 11:37+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "LayoutRun.end" -msgstr "{0} a terminΓ© Γ  l'itΓ©ration {1}" diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/ja.po b/modules/LayoutAPI/src/main/resources/org/gephi/layout/ja.po deleted file mode 100644 index 5d22315a0a..0000000000 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/ja.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 09:45+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "LayoutRun.end" -msgstr "{0}は反復 {1}で硂了" diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/org-gephi-layout.pot b/modules/LayoutAPI/src/main/resources/org/gephi/layout/org-gephi-layout.pot deleted file mode 100644 index 93c487cabb..0000000000 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/org-gephi-layout.pot +++ /dev/null @@ -1,19 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "LayoutRun.end" -msgstr "{0} ended at iteration {1}" diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/pt_BR.po b/modules/LayoutAPI/src/main/resources/org/gephi/layout/pt_BR.po deleted file mode 100644 index 41fefadefe..0000000000 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/pt_BR.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio Faria Jr. , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 12:26+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "LayoutRun.end" -msgstr "{0} terminou na iteraΓ§Γ£o {1}" diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/ru.po b/modules/LayoutAPI/src/main/resources/org/gephi/layout/ru.po deleted file mode 100644 index 0f7f76f59a..0000000000 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/ru.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-27 07:31+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "LayoutRun.end" -msgstr "{0} Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π° Π½Π° ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π½ΠΎΠΌΠ΅Ρ€ {1}" diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/spi/package.html b/modules/LayoutAPI/src/main/resources/org/gephi/layout/spi/package.html index b33a3bac24..ccd5d074f7 100644 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/spi/package.html +++ b/modules/LayoutAPI/src/main/resources/org/gephi/layout/spi/package.html @@ -1,15 +1,30 @@ - - - - Interfaces for creating new layout algorithms. -

    Create a new Layout

    -
    1. Create a new module and set LayoutAPI and - GraphAPI as dependencies.
    2. -
    3. Create a new builder class by implementing LayoutBuilder
    4. -
    5. Add @ServiceProvider annotation to your builder, that it can - be found by the system. Set LayoutBuilder as the - annotation parameter.
    6. -
    7. Create a new class that implements Layout. Set - instantiation code in LayoutBuilder.buildLayout().
    - - + + + + org.gephi.layout.spi + + +

    + Interfaces for creating new layout algorithms. +

    +

    Create a new Layout

    +
      +
    1. + Create a new module and set LayoutAPI and + GraphAPI as dependencies. +
    2. +
    3. + Create a new builder class by implementing LayoutBuilder +
    4. +
    5. + Add @ServiceProvider annotation to your builder, that it can + be found by the system. Set LayoutBuilder as the + annotation parameter. +
    6. +
    7. + Create a new class that implements Layout. Set + instantiation code in LayoutBuilder.buildLayout(). +
    8. +
    + + diff --git a/modules/LayoutAPI/src/main/resources/org/gephi/layout/zh_CN.po b/modules/LayoutAPI/src/main/resources/org/gephi/layout/zh_CN.po deleted file mode 100644 index 50444122ba..0000000000 --- a/modules/LayoutAPI/src/main/resources/org/gephi/layout/zh_CN.po +++ /dev/null @@ -1,21 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:21+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "LayoutRun.end" -msgstr "{0} 在{1}ζ¬‘θΏ­δ»£η»“ζŸ" diff --git a/modules/LayoutAPI/src/main/resources/overview.html b/modules/LayoutAPI/src/main/resources/overview.html index 9417640163..962c2468ff 100644 --- a/modules/LayoutAPI/src/main/resources/overview.html +++ b/modules/LayoutAPI/src/main/resources/overview.html @@ -1,7 +1,12 @@ - + + + Layout API + - Layout API/SPI provides real-time layout algorithms execution. +

    + Layout API/SPI provides real-time layout algorithms execution. +

    The API let users control execution of a layout algorithms. It also gathers various information about an algorithm to present it to the diff --git a/modules/LayoutAPI/src/test/java/org/gephi/layout/LayoutModelImplTest.java b/modules/LayoutAPI/src/test/java/org/gephi/layout/LayoutModelImplTest.java new file mode 100644 index 0000000000..7e42f2a86b --- /dev/null +++ b/modules/LayoutAPI/src/test/java/org/gephi/layout/LayoutModelImplTest.java @@ -0,0 +1,20 @@ +package org.gephi.layout; + +import org.gephi.layout.utils.MockLayout; +import org.gephi.layout.utils.MockLayoutBuilder; +import org.gephi.layout.utils.Utils; +import org.junit.Assert; +import org.junit.Test; + +public class LayoutModelImplTest { + + @Test + public void testLocalPropertyReset() throws Exception { + LayoutModelImpl layoutModel = Utils.newLayoutModel(); + MockLayout layout = new MockLayoutBuilder().buildLayout(); + Assert.assertNotEquals(42.0, layout.getLocalProperty(), 0.0); + layoutModel.setSelectedLayout(layout); + + Assert.assertEquals(42.0, layout.getLocalProperty(), 0.0); + } +} diff --git a/modules/LayoutAPI/src/test/java/org/gephi/layout/PersistenceProviderTest.java b/modules/LayoutAPI/src/test/java/org/gephi/layout/PersistenceProviderTest.java new file mode 100644 index 0000000000..97377f9f1e --- /dev/null +++ b/modules/LayoutAPI/src/test/java/org/gephi/layout/PersistenceProviderTest.java @@ -0,0 +1,66 @@ +package org.gephi.layout; + +import org.gephi.graph.api.Column; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.layout.utils.MockLayout; +import org.gephi.layout.utils.MockLayoutBuilder; +import org.gephi.layout.utils.Utils; +import org.gephi.project.io.utils.GephiFormat; +import org.junit.Test; +import org.netbeans.junit.MockServices; +import org.openide.util.Lookup; + +public class PersistenceProviderTest { + + @Test + public void testEmpty() throws Exception { + LayoutModelImpl layoutModel = Utils.newLayoutModel(); + GephiFormat.testXMLPersistenceProvider(new LayoutModelPersistenceProvider(), layoutModel.getWorkspace()); + } + + @Test + public void testLayoutDefaultProperties() throws Exception { + LayoutModelImpl layoutModel = Utils.newLayoutModel(); + MockLayout layout = new MockLayoutBuilder().buildLayout(); + layoutModel.saveProperties(layout); + layoutModel.loadProperties(layout); + + GephiFormat.testXMLPersistenceProvider(new LayoutModelPersistenceProvider(), layoutModel.getWorkspace()); + } + + @Test + public void testLayoutChangedDoubleProperties() throws Exception { + LayoutModelImpl layoutModel = Utils.newLayoutModel(); + MockLayout layout = new MockLayoutBuilder().buildLayout(); + layout.setAngle(33.0); + layoutModel.saveProperties(layout); + + GephiFormat.testXMLPersistenceProvider(new LayoutModelPersistenceProvider(), layoutModel.getWorkspace()); + } + + @Test + public void testLayoutChangedColumnProperties() throws Exception { + LayoutModelImpl layoutModel = Utils.newLayoutModel(); + GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(layoutModel.getWorkspace()); + Column col = graphModel.getNodeTable().addColumn("foo", Integer.class); + MockLayout layout = new MockLayoutBuilder().buildLayout(); + layout.setColumn(col); + layoutModel.saveProperties(layout); + layoutModel.loadProperties(layout); + + GephiFormat.testXMLPersistenceProvider(new LayoutModelPersistenceProvider(), layoutModel.getWorkspace()); + } + + @Test + public void testSelectedLayout() throws Exception { + LayoutModelImpl layoutModel = Utils.newLayoutModel(); + MockLayout layout = new MockLayoutBuilder().buildLayout(); + layoutModel.setSelectedLayout(layout); + + // Make sure LayoutBuilder is found in Lookup + MockServices.setServices(MockLayoutBuilder.class); + + GephiFormat.testXMLPersistenceProvider(new LayoutModelPersistenceProvider(), layoutModel.getWorkspace()); + } +} diff --git a/modules/LayoutAPI/src/test/java/org/gephi/layout/utils/MockLayout.java b/modules/LayoutAPI/src/test/java/org/gephi/layout/utils/MockLayout.java new file mode 100644 index 0000000000..ef222069b1 --- /dev/null +++ b/modules/LayoutAPI/src/test/java/org/gephi/layout/utils/MockLayout.java @@ -0,0 +1,101 @@ +package org.gephi.layout.utils; + +import java.util.ArrayList; +import java.util.List; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.GraphModel; +import org.gephi.layout.spi.Layout; +import org.gephi.layout.spi.LayoutBuilder; +import org.gephi.layout.spi.LayoutProperty; +import org.gephi.ui.propertyeditor.NodeColumnAllNumbersEditor; +import org.openide.util.Exceptions; + +public class MockLayout implements Layout { + + private final MockLayoutBuilder builder; + private double angle; + private Column column; + private double localProperty = 0.0; + + public MockLayout(MockLayoutBuilder builder) { + this.builder = builder; + } + + @Override + public void initAlgo() { + + } + + @Override + public void setGraphModel(GraphModel graphModel) { + + } + + @Override + public void goAlgo() { + + } + + @Override + public boolean canAlgo() { + return true; + } + + @Override + public void endAlgo() { + + } + + @Override + public LayoutProperty[] getProperties() { + List properties = new ArrayList<>(); + try { + properties.add(LayoutProperty.createProperty( + this, Double.class, + "angle", + null, + "", + "", + "getAngle", "setAngle")); + properties.add(LayoutProperty.createProperty( + this, Column.class, + "column", + null, + "", + "getColumn", "setColumn", NodeColumnAllNumbersEditor.class)); + } catch (Exception e) { + Exceptions.printStackTrace(e); + } + return properties.toArray(new LayoutProperty[0]); + } + + @Override + public void resetPropertiesValues() { + localProperty = 42.0; + } + + public double getLocalProperty() { + return localProperty; + } + + @Override + public LayoutBuilder getBuilder() { + return builder; + } + + public Double getAngle() { + return angle; + } + + public void setAngle(Double angle) { + this.angle = angle; + } + + public Column getColumn() { + return column; + } + + public void setColumn(Column column) { + this.column = column; + } +} diff --git a/modules/LayoutAPI/src/test/java/org/gephi/layout/utils/MockLayoutBuilder.java b/modules/LayoutAPI/src/test/java/org/gephi/layout/utils/MockLayoutBuilder.java new file mode 100644 index 0000000000..fd4c8841ac --- /dev/null +++ b/modules/LayoutAPI/src/test/java/org/gephi/layout/utils/MockLayoutBuilder.java @@ -0,0 +1,26 @@ +package org.gephi.layout.utils; + +import org.gephi.layout.spi.LayoutBuilder; +import org.gephi.layout.spi.LayoutUI; + +public class MockLayoutBuilder implements LayoutBuilder { + + public MockLayoutBuilder() { + + } + + @Override + public String getName() { + return "MockLayout"; + } + + @Override + public LayoutUI getUI() { + return null; + } + + @Override + public MockLayout buildLayout() { + return new MockLayout(this); + } +} diff --git a/modules/LayoutAPI/src/test/java/org/gephi/layout/utils/Utils.java b/modules/LayoutAPI/src/test/java/org/gephi/layout/utils/Utils.java new file mode 100644 index 0000000000..6155b1c650 --- /dev/null +++ b/modules/LayoutAPI/src/test/java/org/gephi/layout/utils/Utils.java @@ -0,0 +1,14 @@ +package org.gephi.layout.utils; + +import org.gephi.layout.LayoutModelImpl; +import org.gephi.project.impl.WorkspaceImpl; + +public class Utils { + + public static LayoutModelImpl newLayoutModel() { + WorkspaceImpl workspace = new WorkspaceImpl(null, 0); + LayoutModelImpl model = new LayoutModelImpl(workspace); + workspace.add(model); + return model; + } +} diff --git a/modules/LayoutPlugin/pom.xml b/modules/LayoutPlugin/pom.xml index 82686e47ac..a351d6a9f2 100644 --- a/modules/LayoutPlugin/pom.xml +++ b/modules/LayoutPlugin/pom.xml @@ -4,22 +4,18 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi layout-plugin - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm LayoutPlugin - - ${project.groupId} - dynamic-api - ${project.groupId} graph-api @@ -32,6 +28,14 @@ ${project.groupId} project-api + + ${project.groupId} + core-library-wrapper + + + ${project.groupId} + utils-longtask + org.netbeans.api org-openide-util-lookup @@ -44,27 +48,29 @@ org.netbeans.api org-openide-nodes + + + + ${project.groupId} + io-importer-api + test + test-jar + + + ${project.groupId} + io-importer-plugin + test + - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin - org.gephi.layout.plugin - org.gephi.layout.plugin.force - org.gephi.layout.plugin.force.quadtree - org.gephi.layout.plugin.force.yifanHu - org.gephi.layout.plugin.forceAtlas - org.gephi.layout.plugin.forceAtlas2 - org.gephi.layout.plugin.fruchterman - org.gephi.layout.plugin.labelAdjust - org.gephi.layout.plugin.multilevel - org.gephi.layout.plugin.random - org.gephi.layout.plugin.rotate - org.gephi.layout.plugin.scale + org.gephi.layout.plugin.* diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/AbstractLayout.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/AbstractLayout.java index 23e01d87f7..34b392d5a8 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/AbstractLayout.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/AbstractLayout.java @@ -39,16 +39,21 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin; +import java.util.Random; +import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.NodeIterable; import org.gephi.layout.spi.Layout; import org.gephi.layout.spi.LayoutBuilder; /** * Base class for layout algorithms. * - * @author Helder Suzuki + * @author Helder Suzuki */ public abstract class AbstractLayout implements Layout { @@ -60,6 +65,47 @@ public AbstractLayout(LayoutBuilder layoutBuilder) { this.layoutBuilder = layoutBuilder; } + /** + * See https://github.com/gephi/gephi/issues/603 Nodes position to NaN on applied layout + * + * @param graphModel + */ + /** + * See https://github.com/gephi/gephi/issues/603 Nodes position to NaN on applied layout + * + * @param graphModel + */ + public static void ensureSafeLayoutNodePositions(GraphModel graphModel) { + ensureSafeLayoutNodePositions(graphModel, new Random().nextLong()); + } + + /** + * See https://github.com/gephi/gephi/issues/603 Nodes position to NaN on applied layout. + *

    + * The {@code seed} controls the random number generator used for initialisation, making the result reproducible. + * + * @param graphModel the graph model + * @param seed seed for the random number generator + */ + public static void ensureSafeLayoutNodePositions(GraphModel graphModel, long seed) { + Graph graph = graphModel.getGraph(); + NodeIterable nodesIterable = graph.getNodes(); + for (Node node : nodesIterable) { + if (node.x() != 0 || node.y() != 0) { + nodesIterable.doBreak(); + return; + } + } + + //All at 0.0, init some random positions + Random random = new Random(seed); + nodesIterable = graph.getNodes(); + for (Node node : nodesIterable) { + node.setX((float) ((0.01 + random.nextDouble()) * 1000) - 500); + node.setY((float) ((0.01 + random.nextDouble()) * 1000) - 500); + } + } + @Override public LayoutBuilder getBuilder() { return layoutBuilder; @@ -75,11 +121,11 @@ public boolean canAlgo() { return !isConverged() && graphModel != null; } - public void setConverged(boolean converged) { - this.converged = converged; - } - public boolean isConverged() { return converged; } + + public void setConverged(boolean converged) { + this.converged = converged; + } } diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/AutoLayout.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/AutoLayout.java index 33d628cbb4..9ebfdfff60 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/AutoLayout.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/AutoLayout.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin; import java.util.ArrayList; @@ -48,6 +49,7 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.layout.spi.Layout; import org.gephi.layout.spi.LayoutProperty; import org.openide.nodes.Node.Property; +import org.openide.util.Exceptions; /** * Class to build layout scenario that runs for a certain duration. Multiple @@ -92,7 +94,20 @@ public class AutoLayout { public AutoLayout(long duration, TimeUnit timeUnit) { this.duration = TimeUnit.MILLISECONDS.convert(duration, timeUnit); - this.layouts = new ArrayList(); + this.layouts = new ArrayList<>(); + } + + public static DynamicProperty createDynamicProperty(String propertyName, Object value, float ratio) { + return new SingleDynamicProperty(propertyName, value, ratio); + } + + public static DynamicProperty createDynamicProperty(String propertyName, Object[] value, float[] ratio) { + return new MultiDynamicProperty(propertyName, value, ratio); + } + + public static DynamicProperty createDynamicProperty(String propertyName, Number[] value, float[] ratio, + Interpolation interpolation) { + return new InterpolateDynamicProperty(propertyName, value, ratio, interpolation); } public void addLayout(Layout layout, float ratio) { @@ -103,7 +118,7 @@ public void addLayout(Layout layout, float ratio, DynamicProperty[] properties) for (int i = 0; i < properties.length; i++) { AbstractDynamicProperty property = (AbstractDynamicProperty) properties[i]; for (LayoutProperty lp : layout.getProperties()) { - if (lp.getCanonicalName().equalsIgnoreCase(property.getCanonicalName()) ) { + if (lp.getCanonicalName().equalsIgnoreCase(property.getCanonicalName())) { property.setProperty(lp.getProperty()); break; } @@ -143,7 +158,7 @@ private void setProperties() { d.getProperty().setValue(val); } } catch (Exception ex) { - ex.printStackTrace(); + Exceptions.printStackTrace(ex); } } } @@ -214,32 +229,20 @@ private void verifiy() { } } - public static DynamicProperty createDynamicProperty(String propertyName, Object value, float ratio) { - return new SingleDynamicProperty(propertyName, value, ratio); - } - - public static DynamicProperty createDynamicProperty(String propertyName, Object[] value, float[] ratio) { - return new MultiDynamicProperty(propertyName, value, ratio); - } + public enum Interpolation { - public static DynamicProperty createDynamicProperty(String propertyName, Number[] value, float[] ratio, Interpolation interpolation) { - return new InterpolateDynamicProperty(propertyName, value, ratio, interpolation); + LINEAR, LOG } - public static interface DynamicProperty { + public interface DynamicProperty { - public Object getValue(float ratio); + Object getValue(float ratio); - public Property getProperty(); + Property getProperty(); - public String getCanonicalName(); + String getCanonicalName(); } - public enum Interpolation { - - LINEAR, LOG - }; - private static abstract class AbstractDynamicProperty implements DynamicProperty { private final String propertyCanonicalName; @@ -283,7 +286,7 @@ public Object getValue(float ratio) { } return property.getValue(); } catch (Exception e) { - e.printStackTrace(); + Exceptions.printStackTrace(e); } return null; } @@ -306,7 +309,7 @@ private static class MultiDynamicProperty extends AbstractDynamicProperty { @Override public Object getValue(float ratio) { - while (thresholds[currentIndex] < ratio && currentIndex < thresholds.length) { + while (currentIndex < thresholds.length && thresholds[currentIndex] < ratio) { currentIndex++; } return value[currentIndex]; @@ -332,13 +335,14 @@ private static class InterpolateDynamicProperty extends AbstractDynamicProperty @Override public Object getValue(float ratio) { - while (thresholds[currentIndex] < ratio && currentIndex < thresholds.length) { + while (currentIndex < thresholds.length && thresholds[currentIndex] < ratio) { currentIndex++; } if (currentIndex > 0) { float r = 1 / (thresholds[currentIndex] - thresholds[currentIndex - 1]); ratio = ((ratio - thresholds[currentIndex - 1]) * r); - return new Double(value[currentIndex - 1].doubleValue() + (value[currentIndex].doubleValue() - value[currentIndex - 1].doubleValue()) * ratio); + return value[currentIndex - 1].doubleValue() + + (value[currentIndex].doubleValue() - value[currentIndex - 1].doubleValue()) * ratio; } return value[currentIndex]; } diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/ForceLayoutData.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/ForceLayoutData.java index 31ab7307b3..2a6dcfc4cb 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/ForceLayoutData.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/ForceLayoutData.java @@ -39,13 +39,13 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin; import org.gephi.layout.plugin.force.ForceVector; /** - * - * @author Helder Suzuki + * @author Helder Suzuki */ public class ForceLayoutData extends ForceVector { diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/ForceVectorNodeLayoutData.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/ForceVectorNodeLayoutData.java index 47f3cfcdbb..c2541eca36 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/ForceVectorNodeLayoutData.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/ForceVectorNodeLayoutData.java @@ -39,13 +39,13 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin; import org.gephi.graph.spi.LayoutData; /** - * * @author Mathieu Bastian */ public class ForceVectorNodeLayoutData implements LayoutData { diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/ForceVectorUtils.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/ForceVectorUtils.java index a88914ddea..725ec47ada 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/ForceVectorUtils.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/ForceVectorUtils.java @@ -39,12 +39,12 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin; import org.gephi.graph.api.Node; /** - * * @author Mathieu Jacomy */ public class ForceVectorUtils { @@ -54,9 +54,9 @@ public static float distance(Node n1, Node n2) { } public static void fcBiRepulsor(Node N1, Node N2, double c) { - double xDist = N1.x() - N2.x(); // distance en x entre les deux noeuds + double xDist = N1.x() - N2.x(); // distance en x entre les deux noeuds double yDist = N1.y() - N2.y(); - double dist = (float) Math.sqrt(xDist * xDist + yDist * yDist); // distance tout court + double dist = (float) Math.sqrt(xDist * xDist + yDist * yDist); // distance tout court if (dist > 0) { double f = repulsion(c, dist); @@ -73,9 +73,9 @@ public static void fcBiRepulsor(Node N1, Node N2, double c) { } public static void fcBiRepulsor_y(Node N1, Node N2, double c, double verticalization) { - double xDist = N1.x() - N2.x(); // distance en x entre les deux noeuds + double xDist = N1.x() - N2.x(); // distance en x entre les deux noeuds double yDist = N1.y() - N2.y(); - double dist = (float) Math.sqrt(xDist * xDist + yDist * yDist); // distance tout court + double dist = (float) Math.sqrt(xDist * xDist + yDist * yDist); // distance tout court if (dist > 0) { double f = repulsion(c, dist); @@ -92,9 +92,10 @@ public static void fcBiRepulsor_y(Node N1, Node N2, double c, double verticaliza } public static void fcBiRepulsor_noCollide(Node N1, Node N2, double c) { - double xDist = N1.x() - N2.x(); // distance en x entre les deux noeuds + double xDist = N1.x() - N2.x(); // distance en x entre les deux noeuds double yDist = N1.y() - N2.y(); - double dist = (float) Math.sqrt(xDist * xDist + yDist * yDist) - N1.size() - N2.size(); // distance (from the border of each node) + double dist = (float) Math.sqrt(xDist * xDist + yDist * yDist) - N1.size() - + N2.size(); // distance (from the border of each node) if (dist > 0) { double f = repulsion(c, dist); @@ -108,7 +109,7 @@ public static void fcBiRepulsor_noCollide(Node N1, Node N2, double c) { N2L.dx -= xDist / dist * f; N2L.dy -= yDist / dist * f; } else if (dist != 0) { - double f = -c; //flat repulsion + double f = -c; //flat repulsion ForceVectorNodeLayoutData N1L = N1.getLayoutData(); ForceVectorNodeLayoutData N2L = N2.getLayoutData(); @@ -122,9 +123,9 @@ public static void fcBiRepulsor_noCollide(Node N1, Node N2, double c) { } public static void fcUniRepulsor(Node N1, Node N2, double c) { - double xDist = N1.x() - N2.x(); // distance en x entre les deux noeuds + double xDist = N1.x() - N2.x(); // distance en x entre les deux noeuds double yDist = N1.y() - N2.y(); - double dist = (float) Math.sqrt(xDist * xDist + yDist * yDist); // distance tout court + double dist = (float) Math.sqrt(xDist * xDist + yDist * yDist); // distance tout court if (dist > 0) { double f = repulsion(c, dist); @@ -137,9 +138,9 @@ public static void fcUniRepulsor(Node N1, Node N2, double c) { } public static void fcBiAttractor(Node N1, Node N2, double c) { - double xDist = N1.x() - N2.x(); // distance en x entre les deux noeuds + double xDist = N1.x() - N2.x(); // distance en x entre les deux noeuds double yDist = N1.y() - N2.y(); - double dist = (float) Math.sqrt(xDist * xDist + yDist * yDist); // distance tout court + double dist = (float) Math.sqrt(xDist * xDist + yDist * yDist); // distance tout court if (dist > 0) { double f = attraction(c, dist); @@ -156,9 +157,10 @@ public static void fcBiAttractor(Node N1, Node N2, double c) { } public static void fcBiAttractor_noCollide(Node N1, Node N2, double c) { - double xDist = N1.x() - N2.x(); // distance en x entre les deux noeuds + double xDist = N1.x() - N2.x(); // distance en x entre les deux noeuds double yDist = N1.y() - N2.y(); - double dist = (float) Math.sqrt(xDist * xDist + yDist * yDist) - N1.size() - N2.size(); // distance (from the border of each node) + double dist = (float) Math.sqrt(xDist * xDist + yDist * yDist) - N1.size() - + N2.size(); // distance (from the border of each node) if (dist > 0) { double f = attraction(c, dist); @@ -175,9 +177,9 @@ public static void fcBiAttractor_noCollide(Node N1, Node N2, double c) { } public static void fcBiFlatAttractor(Node N1, Node N2, double c) { - double xDist = N1.x() - N2.x(); // distance en x entre les deux noeuds + double xDist = N1.x() - N2.x(); // distance en x entre les deux noeuds double yDist = N1.y() - N2.y(); - double dist = (float) Math.sqrt(xDist * xDist + yDist * yDist); // distance tout court + double dist = (float) Math.sqrt(xDist * xDist + yDist * yDist); // distance tout court if (dist > 0) { double f = -c; @@ -194,9 +196,9 @@ public static void fcBiFlatAttractor(Node N1, Node N2, double c) { } public static void fcUniAttractor(Node N1, Node N2, float c) { - double xDist = N1.x() - N2.x(); // distance en x entre les deux noeuds + double xDist = N1.x() - N2.x(); // distance en x entre les deux noeuds double yDist = N1.y() - N2.y(); - double dist = (float) Math.sqrt(xDist * xDist + yDist * yDist); // distance tout court + double dist = (float) Math.sqrt(xDist * xDist + yDist * yDist); // distance tout court if (dist > 0) { double f = attraction(c, dist); diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/AbstractForce.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/AbstractForce.java index 5be280d67c..3ad7e8f8c0 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/AbstractForce.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/AbstractForce.java @@ -39,22 +39,22 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.force; import org.gephi.graph.api.Node; import org.gephi.layout.plugin.ForceVectorUtils; /** - * - * @author Helder Suzuki + * @author Helder Suzuki */ public abstract class AbstractForce { public ForceVector calculateForce(Node node1, Node node2) { return calculateForce(node1, node2, - ForceVectorUtils.distance(node1, node2)); + ForceVectorUtils.distance(node1, node2)); } public abstract ForceVector calculateForce(Node node1, Node node2, - float distance); + float distance); } diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/Displacement.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/Displacement.java index 1c50cb56a7..5ee855f846 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/Displacement.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/Displacement.java @@ -39,17 +39,17 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.force; import org.gephi.graph.api.Node; /** - * - * @author Helder Suzuki + * @author Helder Suzuki */ public interface Displacement { - public void setStep(float step); + void setStep(float step); - public void moveNode(Node node, ForceVector forceData); + void moveNode(Node node, ForceVector forceData); } diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/ForceVector.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/ForceVector.java index 9ea9eb014f..2263215ab5 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/ForceVector.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/ForceVector.java @@ -39,13 +39,13 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.force; import org.gephi.graph.spi.LayoutData; /** - * - * @author Helder Suzuki + * @author Helder Suzuki */ public class ForceVector implements LayoutData { diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/ProportionalDisplacement.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/ProportionalDisplacement.java index 246dd345fc..0eb32f7ce0 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/ProportionalDisplacement.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/ProportionalDisplacement.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.force; import org.gephi.graph.api.Node; @@ -47,7 +48,7 @@ Development and Distribution License("CDDL") (collectively, the * The movement of the node is in the direction of the force and it's * proportional to is module. * - * @author Helder Suzuki + * @author Helder Suzuki */ public class ProportionalDisplacement implements Displacement { diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/StepDisplacement.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/StepDisplacement.java index 718c842007..e73242e25d 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/StepDisplacement.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/StepDisplacement.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.force; import org.gephi.graph.api.Node; @@ -46,7 +47,7 @@ Development and Distribution License("CDDL") (collectively, the /** * The node is moved a fixed distance (step) in the direction of the force. * - * @author Helder Suzuki + * @author Helder Suzuki */ public class StepDisplacement implements Displacement { diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/quadtree/BarnesHut.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/quadtree/BarnesHut.java index 664ef0d3c1..06d0f85f9f 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/quadtree/BarnesHut.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/quadtree/BarnesHut.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.force.quadtree; import org.gephi.graph.api.Node; @@ -49,14 +50,14 @@ Development and Distribution License("CDDL") (collectively, the /** * Barnes-Hut's O(n log n) force calculation algorithm. * - * @author Helder Suzuki + * @author Helder Suzuki */ public class BarnesHut { /* theta is the parameter for Barnes-Hut opening criteria */ private float theta = (float) 1.2; - private AbstractForce force; + private final AbstractForce force; public BarnesHut(AbstractForce force) { this.force = force; @@ -93,11 +94,11 @@ public ForceVector calculateForce(Node node, QuadTree tree) { return f; } - public void setTheta(float theta) { - this.theta = theta; - } - public float getTheta() { return theta; } + + public void setTheta(float theta) { + this.theta = theta; + } } diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/quadtree/QuadTree.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/quadtree/QuadTree.java index b24a1548de..c3f7f58d51 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/quadtree/QuadTree.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/quadtree/QuadTree.java @@ -39,36 +39,56 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.force.quadtree; import java.awt.Color; import java.util.ArrayList; import java.util.List; +import java.util.Map; import java.util.Set; -import org.gephi.attribute.api.Column; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.ColumnIterable; import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphView; +import org.gephi.graph.api.Interval; import org.gephi.graph.api.Node; import org.gephi.graph.api.NodeProperties; +import org.gephi.graph.api.Table; import org.gephi.graph.api.TextProperties; import org.gephi.graph.spi.LayoutData; +interface AddBehaviour { + + boolean addNode(NodeProperties node); +} + /** - * @author Helder Suzuki + * @author Helder Suzuki */ public class QuadTree implements Node { - private float posX; - private float posY; - private float size; + public static final float eps = (float) 1e-6; + private final float posX; + private final float posY; + private final float size; + private final int maxLevel; private float centerMassX; // X and Y position of the center of mass private float centerMassY; private int mass; // Mass of this tree (the number of nodes it contains) - private int maxLevel; private AddBehaviour add; private List children; private boolean isLeaf; - public static final float eps = (float) 1e-6; + + public QuadTree(float posX, float posY, float size, int maxLevel) { + this.posX = posX; + this.posY = posY; + this.size = size; + this.maxLevel = maxLevel; + this.isLeaf = true; + mass = 0; + add = new FirstAdd(); + } public static QuadTree buildTree(Graph graph, int maxLevel) { float minX = Float.POSITIVE_INFINITY; @@ -92,16 +112,6 @@ public static QuadTree buildTree(Graph graph, int maxLevel) { return tree; } - public QuadTree(float posX, float posY, float size, int maxLevel) { - this.posX = posX; - this.posY = posY; - this.size = size; - this.maxLevel = maxLevel; - this.isLeaf = true; - mass = 0; - add = new FirstAdd(); - } - @Override public float size() { return size; @@ -110,14 +120,14 @@ public float size() { private void divideTree() { float childSize = size / 2; - children = new ArrayList(); + children = new ArrayList<>(); children.add(new QuadTree(posX + childSize, posY + childSize, - childSize, maxLevel - 1)); + childSize, maxLevel - 1)); children.add(new QuadTree(posX, posY + childSize, - childSize, maxLevel - 1)); + childSize, maxLevel - 1)); children.add(new QuadTree(posX, posY, childSize, maxLevel - 1)); children.add(new QuadTree(posX + childSize, posY, - childSize, maxLevel - 1)); + childSize, maxLevel - 1)); isLeaf = false; } @@ -162,7 +172,7 @@ public float z() { public boolean addNode(NodeProperties node) { if (posX <= node.x() && node.x() <= posX + size - && posY <= node.y() && node.y() <= posY + size) { + && posY <= node.y() && node.y() <= posY + size) { return add.addNode(node); } else { return false; @@ -201,6 +211,11 @@ public Color getColor() { throw new UnsupportedOperationException("Not supported."); } + @Override + public void setColor(Color color) { + throw new UnsupportedOperationException("Not supported."); + } + @Override public float alpha() { throw new UnsupportedOperationException("Not supported."); @@ -211,11 +226,21 @@ public boolean isFixed() { throw new UnsupportedOperationException("Not supported."); } + @Override + public void setFixed(boolean fixed) { + throw new UnsupportedOperationException("Not supported."); + } + @Override public T getLayoutData() { throw new UnsupportedOperationException("Not supported."); } + @Override + public void setLayoutData(LayoutData layoutData) { + throw new UnsupportedOperationException("Not supported."); + } + @Override public TextProperties getTextProperties() { throw new UnsupportedOperationException("Not supported."); @@ -271,33 +296,23 @@ public void setAlpha(float a) { throw new UnsupportedOperationException("Not supported."); } - @Override - public void setColor(Color color) { - throw new UnsupportedOperationException("Not supported."); - } - @Override public void setSize(float size) { throw new UnsupportedOperationException("Not supported."); } @Override - public void setFixed(boolean fixed) { - throw new UnsupportedOperationException("Not supported."); - } - - @Override - public void setLayoutData(LayoutData layoutData) { + public Object getId() { throw new UnsupportedOperationException("Not supported."); } @Override - public Object getId() { + public String getLabel() { throw new UnsupportedOperationException("Not supported."); } @Override - public String getLabel() { + public void setLabel(String label) { throw new UnsupportedOperationException("Not supported."); } @@ -322,17 +337,17 @@ public Set getAttributeKeys() { } @Override - public Object removeAttribute(String key) { + public ColumnIterable getAttributeColumns() { throw new UnsupportedOperationException("Not supported."); } @Override - public Object removeAttribute(Column column) { + public Object removeAttribute(String key) { throw new UnsupportedOperationException("Not supported."); } @Override - public void setLabel(String label) { + public Object removeAttribute(Column column) { throw new UnsupportedOperationException("Not supported."); } @@ -371,6 +386,11 @@ public double[] getTimestamps() { throw new UnsupportedOperationException("Not supported."); } + @Override + public Interval getTimeBounds() { + throw new UnsupportedOperationException("Not supported."); + } + @Override public void clearAttributes() { throw new UnsupportedOperationException("Not supported."); @@ -401,6 +421,78 @@ public boolean hasTimestamp(double timestamp) { throw new UnsupportedOperationException("Not supported."); } + @Override + public Object getAttribute(String key, Interval interval) { + throw new UnsupportedOperationException("Not supported."); + } + + @Override + public Object getAttribute(Column column, Interval interval) { + throw new UnsupportedOperationException("Not supported."); + } + + @Override + public Iterable getAttributes(Column column) { + throw new UnsupportedOperationException("Not supported."); + } + + @Override + public Object removeAttribute(String key, double timestamp) { + throw new UnsupportedOperationException("Not supported."); + } + + @Override + public Object removeAttribute(Column column, double timestamp) { + throw new UnsupportedOperationException("Not supported."); + } + + @Override + public Object removeAttribute(String key, Interval interval) { + throw new UnsupportedOperationException( + "Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + + @Override + public Object removeAttribute(Column column, Interval interval) { + throw new UnsupportedOperationException("Not supported."); + } + + @Override + public void setAttribute(String key, Object value, Interval interval) { + throw new UnsupportedOperationException("Not supported."); + } + + @Override + public void setAttribute(Column column, Object value, Interval interval) { + throw new UnsupportedOperationException("Not supported."); + } + + @Override + public boolean addInterval(Interval interval) { + throw new UnsupportedOperationException("Not supported."); + } + + @Override + public boolean removeInterval(Interval interval) { + throw new UnsupportedOperationException("Not supported."); + } + + @Override + public boolean hasInterval(Interval interval) { + throw new UnsupportedOperationException("Not supported."); + } + + @Override + public Interval[] getIntervals() { + throw new UnsupportedOperationException("Not supported."); + } + + @Override + public Table getTable() { + throw new UnsupportedOperationException( + "Not supported yet."); //To change body of generated methods, choose Tools | Templates. + } + class FirstAdd implements AddBehaviour { @Override @@ -450,8 +542,3 @@ public boolean addNode(NodeProperties node) { } } } - -interface AddBehaviour { - - public boolean addNode(NodeProperties node); -} diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/yifanHu/YifanHu.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/yifanHu/YifanHu.java index 37e928bb70..9632e4ca02 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/yifanHu/YifanHu.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/yifanHu/YifanHu.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.force.yifanHu; import javax.swing.Icon; @@ -51,13 +52,12 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * - * @author Helder Suzuki + * @author Helder Suzuki */ @ServiceProvider(service = LayoutBuilder.class) public class YifanHu implements LayoutBuilder { - private YifanHuLayoutUI ui = new YifanHuLayoutUI(); + private final YifanHuLayoutUI ui = new YifanHuLayoutUI(); @Override public YifanHuLayout buildLayout() { diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/yifanHu/YifanHuLayout.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/yifanHu/YifanHuLayout.java index 96560446bf..7605d9c6df 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/yifanHu/YifanHuLayout.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/yifanHu/YifanHuLayout.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.force.yifanHu; import java.util.ArrayList; @@ -56,12 +57,13 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.layout.spi.Layout; import org.gephi.layout.spi.LayoutBuilder; import org.gephi.layout.spi.LayoutProperty; +import org.openide.util.Exceptions; import org.openide.util.NbBundle; /** * Hu's basic algorithm * - * @author Helder Suzuki + * @author Helder Suzuki */ public class YifanHuLayout extends AbstractLayout implements Layout { @@ -75,7 +77,7 @@ public class YifanHuLayout extends AbstractLayout implements Layout { private float barnesHutTheta; private float convergenceThreshold; private boolean adaptiveCooling; - private Displacement displacement; + private final Displacement displacement; private double energy0; private double energy; private Graph graph; @@ -145,7 +147,7 @@ public float getAverageEdgeLength(Graph graph) { int count = 1; for (Edge e : graph.getEdges()) { edgeLength += ForceVectorUtils.distance( - e.getSource(), e.getTarget()); + e.getSource(), e.getTarget()); count++; } @@ -154,70 +156,70 @@ public float getAverageEdgeLength(Graph graph) { @Override public LayoutProperty[] getProperties() { - List properties = new ArrayList(); + List properties = new ArrayList<>(); final String YIFANHU_CATEGORY = "Yifan Hu's properties"; final String BARNESHUT_CATEGORY = "Barnes-Hut's properties"; try { properties.add(LayoutProperty.createProperty( - this, Float.class, - NbBundle.getMessage(getClass(), "YifanHu.optimalDistance.name"), - YIFANHU_CATEGORY, - "YifanHu.optimalDistance.name", - NbBundle.getMessage(getClass(), "YifanHu.optimalDistance.desc"), - "getOptimalDistance", "setOptimalDistance")); + this, Float.class, + NbBundle.getMessage(getClass(), "YifanHu.optimalDistance.name"), + YIFANHU_CATEGORY, + "YifanHu.optimalDistance.name", + NbBundle.getMessage(getClass(), "YifanHu.optimalDistance.desc"), + "getOptimalDistance", "setOptimalDistance")); properties.add(LayoutProperty.createProperty( - this, Float.class, - NbBundle.getMessage(getClass(), "YifanHu.relativeStrength.name"), - YIFANHU_CATEGORY, - "YifanHu.relativeStrength.name", - NbBundle.getMessage(getClass(), "YifanHu.relativeStrength.desc"), - "getRelativeStrength", "setRelativeStrength")); + this, Float.class, + NbBundle.getMessage(getClass(), "YifanHu.relativeStrength.name"), + YIFANHU_CATEGORY, + "YifanHu.relativeStrength.name", + NbBundle.getMessage(getClass(), "YifanHu.relativeStrength.desc"), + "getRelativeStrength", "setRelativeStrength")); properties.add(LayoutProperty.createProperty( - this, Float.class, - NbBundle.getMessage(getClass(), "YifanHu.initialStepSize.name"), - YIFANHU_CATEGORY, - "YifanHu.initialStepSize.name", - NbBundle.getMessage(getClass(), "YifanHu.initialStepSize.desc"), - "getInitialStep", "setInitialStep")); + this, Float.class, + NbBundle.getMessage(getClass(), "YifanHu.initialStepSize.name"), + YIFANHU_CATEGORY, + "YifanHu.initialStepSize.name", + NbBundle.getMessage(getClass(), "YifanHu.initialStepSize.desc"), + "getInitialStep", "setInitialStep")); properties.add(LayoutProperty.createProperty( - this, Float.class, - NbBundle.getMessage(getClass(), "YifanHu.stepRatio.name"), - YIFANHU_CATEGORY, - "YifanHu.stepRatio.name", - NbBundle.getMessage(getClass(), "YifanHu.stepRatio.desc"), - "getStepRatio", "setStepRatio")); + this, Float.class, + NbBundle.getMessage(getClass(), "YifanHu.stepRatio.name"), + YIFANHU_CATEGORY, + "YifanHu.stepRatio.name", + NbBundle.getMessage(getClass(), "YifanHu.stepRatio.desc"), + "getStepRatio", "setStepRatio")); properties.add(LayoutProperty.createProperty( - this, Boolean.class, - NbBundle.getMessage(getClass(), "YifanHu.adaptativeCooling.name"), - YIFANHU_CATEGORY, - "YifanHu.adaptativeCooling.name", - NbBundle.getMessage(getClass(), "YifanHu.adaptativeCooling.desc"), - "isAdaptiveCooling", "setAdaptiveCooling")); + this, Boolean.class, + NbBundle.getMessage(getClass(), "YifanHu.adaptativeCooling.name"), + YIFANHU_CATEGORY, + "YifanHu.adaptativeCooling.name", + NbBundle.getMessage(getClass(), "YifanHu.adaptativeCooling.desc"), + "isAdaptiveCooling", "setAdaptiveCooling")); properties.add(LayoutProperty.createProperty( - this, Float.class, - NbBundle.getMessage(getClass(), "YifanHu.convergenceThreshold.name"), - YIFANHU_CATEGORY, - "YifanHu.convergenceThreshold.name", - NbBundle.getMessage(getClass(), "YifanHu.convergenceThreshold.desc"), - "getConvergenceThreshold", "setConvergenceThreshold")); + this, Float.class, + NbBundle.getMessage(getClass(), "YifanHu.convergenceThreshold.name"), + YIFANHU_CATEGORY, + "YifanHu.convergenceThreshold.name", + NbBundle.getMessage(getClass(), "YifanHu.convergenceThreshold.desc"), + "getConvergenceThreshold", "setConvergenceThreshold")); properties.add(LayoutProperty.createProperty( - this, Integer.class, - NbBundle.getMessage(getClass(), "YifanHu.quadTreeMaxLevel.name"), - BARNESHUT_CATEGORY, - "YifanHu.quadTreeMaxLevel.name", - NbBundle.getMessage(getClass(), "YifanHu.quadTreeMaxLevel.desc"), - "getQuadTreeMaxLevel", "setQuadTreeMaxLevel")); + this, Integer.class, + NbBundle.getMessage(getClass(), "YifanHu.quadTreeMaxLevel.name"), + BARNESHUT_CATEGORY, + "YifanHu.quadTreeMaxLevel.name", + NbBundle.getMessage(getClass(), "YifanHu.quadTreeMaxLevel.desc"), + "getQuadTreeMaxLevel", "setQuadTreeMaxLevel")); properties.add(LayoutProperty.createProperty( - this, Float.class, - NbBundle.getMessage(getClass(), "YifanHu.theta.name"), - BARNESHUT_CATEGORY, - "YifanHu.theta.name", - NbBundle.getMessage(getClass(), "YifanHu.theta.desc"), - "getBarnesHutTheta", "setBarnesHutTheta")); + this, Float.class, + NbBundle.getMessage(getClass(), "YifanHu.theta.name"), + BARNESHUT_CATEGORY, + "YifanHu.theta.name", + NbBundle.getMessage(getClass(), "YifanHu.theta.desc"), + "getBarnesHutTheta", "setBarnesHutTheta")); } catch (Exception e) { - e.printStackTrace(); + Exceptions.printStackTrace(e); } return properties.toArray(new LayoutProperty[0]); @@ -229,19 +231,29 @@ public void initAlgo() { return; } graph = graphModel.getGraphVisible(); - energy = Float.POSITIVE_INFINITY; - for (Node n : graph.getNodes()) { - n.setLayoutData(new ForceVector()); + graph.readLock(); + try { + energy = Float.POSITIVE_INFINITY; + for (Node n : graph.getNodes()) { + n.setLayoutData(new ForceVector()); + } + progress = 0; + setConverged(false); + setStep(initialStep); + } finally { + graph.readUnlockAll(); } - progress = 0; - setConverged(false); - setStep(initialStep); } @Override public void endAlgo() { - for (Node n : graph.getNodes()) { - n.setLayoutData(null); + graph.readLock(); + try { + for (Node n : graph.getNodes()) { + n.setLayoutData(null); + } + } finally { + graph.readUnlockAll(); } } @@ -249,68 +261,67 @@ public void endAlgo() { public void goAlgo() { graph = graphModel.getGraphVisible(); graph.readLock(); - Node[] nodes = graph.getNodes().toArray(); - for (Node n : nodes) { - if (n.getLayoutData() == null || !(n.getLayoutData() instanceof ForceVector)) { - n.setLayoutData(new ForceVector()); + try { + Node[] nodes = graph.getNodes().toArray(); + for (Node n : nodes) { + if (n.getLayoutData() == null || !(n.getLayoutData() instanceof ForceVector)) { + n.setLayoutData(new ForceVector()); + } } - } - // Evaluates n^2 inter node forces using BarnesHut. - QuadTree tree = QuadTree.buildTree(graph, getQuadTreeMaxLevel()); + // Evaluates n^2 inter node forces using BarnesHut. + QuadTree tree = QuadTree.buildTree(graph, getQuadTreeMaxLevel()); -// double electricEnergy = 0; /////////////////////// -// double springEnergy = 0; /////////////////////// - BarnesHut barnes = new BarnesHut(getNodeForce()); - barnes.setTheta(getBarnesHutTheta()); - for (Node node : nodes) { - ForceVector layoutData = node.getLayoutData(); + // double electricEnergy = 0; /////////////////////// + // double springEnergy = 0; /////////////////////// + BarnesHut barnes = new BarnesHut(getNodeForce()); + barnes.setTheta(getBarnesHutTheta()); + for (Node node : nodes) { + ForceVector layoutData = node.getLayoutData(); - ForceVector f = barnes.calculateForce(node, tree); - layoutData.add(f); -// electricEnergy += f.getEnergy(); - } - - // Apply edge forces. + ForceVector f = barnes.calculateForce(node, tree); + layoutData.add(f); + // electricEnergy += f.getEnergy(); + } - for (Edge e : graph.getEdges()) { - if (!e.getSource().equals(e.getTarget())) { - Node n1 = e.getSource(); - Node n2 = e.getTarget(); - ForceVector f1 = n1.getLayoutData(); - ForceVector f2 = n2.getLayoutData(); - - ForceVector f = getEdgeForce().calculateForce(n1, n2); - f1.add(f); - f2.subtract(f); + // Apply edge forces. + for (Edge e : graph.getEdges()) { + if (!e.getSource().equals(e.getTarget())) { + Node n1 = e.getSource(); + Node n2 = e.getTarget(); + ForceVector f1 = n1.getLayoutData(); + ForceVector f2 = n2.getLayoutData(); + + ForceVector f = getEdgeForce().calculateForce(n1, n2); + f1.add(f); + f2.subtract(f); + } } - } - // Calculate energy and max force. - energy0 = energy; - energy = 0; - double maxForce = 1; - for (Node n : nodes) { - ForceVector force = n.getLayoutData(); + // Calculate energy and max force. + energy0 = energy; + energy = 0; + double maxForce = 1; + for (Node n : nodes) { + ForceVector force = n.getLayoutData(); - energy += force.getNorm(); - maxForce = Math.max(maxForce, force.getNorm()); - } + energy += force.getNorm(); + maxForce = Math.max(maxForce, force.getNorm()); + } - // Apply displacements on nodes. - for (Node n : nodes) { - if (!n.isFixed()) { - ForceVector force = n.getLayoutData(); + // Apply displacements on nodes. + for (Node n : nodes) { + if (!n.isFixed()) { + ForceVector force = n.getLayoutData(); - force.multiply((float) (1.0 / maxForce)); - getDisplacement().moveNode(n, force); + force.multiply((float) (1.0 / maxForce)); + getDisplacement().moveNode(n, force); + } } + postAlgo(); + } finally { + graph.readUnlockAll(); } - postAlgo(); -// springEnergy = energy - electricEnergy; -// System.out.println("electric: " + electricEnergy + " spring: " + springEnergy); -// System.out.println("energy0 = " + energy0 + " energy = " + energy); - graph.readUnlock(); } @@ -426,7 +437,7 @@ public void setInitialStep(Float initialStep) { /** * Fa = (n2 - n1) * ||n2 - n1|| / K * - * @author Helder Suzuki + * @author Helder Suzuki */ public class SpringForce extends AbstractForce { @@ -438,31 +449,31 @@ public SpringForce(float optimalDistance) { @Override public ForceVector calculateForce(Node node1, Node node2, - float distance) { + float distance) { ForceVector f = new ForceVector(node2.x() - node1.x(), - node2.y() - node1.y()); + node2.y() - node1.y()); f.multiply(distance / optimalDistance); return f; } - public void setOptimalDistance(Float optimalDistance) { - this.optimalDistance = optimalDistance; - } - public Float getOptimalDistance() { return optimalDistance; } + + public void setOptimalDistance(Float optimalDistance) { + this.optimalDistance = optimalDistance; + } } /** * Fr = -C*K*K*(n2-n1)/||n2-n1|| * - * @author Helder Suzuki + * @author Helder Suzuki */ public class ElectricalForce extends AbstractForce { - private float relativeStrength; - private float optimalDistance; + private final float relativeStrength; + private final float optimalDistance; public ElectricalForce(float relativeStrength, float optimalDistance) { this.relativeStrength = relativeStrength; @@ -471,9 +482,9 @@ public ElectricalForce(float relativeStrength, float optimalDistance) { @Override public ForceVector calculateForce(Node node1, Node node2, - float distance) { + float distance) { ForceVector f = new ForceVector(node2.x() - node1.x(), - node2.y() - node1.y()); + node2.y() - node1.y()); float scale = -relativeStrength * optimalDistance * optimalDistance / (distance * distance); if (Float.isNaN(scale) || Float.isInfinite(scale)) { scale = -1; diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/yifanHu/YifanHuProportional.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/yifanHu/YifanHuProportional.java index ee883fae1f..1400684e4d 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/yifanHu/YifanHuProportional.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/force/yifanHu/YifanHuProportional.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.force.yifanHu; import javax.swing.Icon; @@ -51,13 +52,12 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * - * @author Helder Suzuki + * @author Helder Suzuki */ @ServiceProvider(service = LayoutBuilder.class) public class YifanHuProportional implements LayoutBuilder { - private YifanHuProportionalLayoutUI ui = new YifanHuProportionalLayoutUI(); + private final YifanHuProportionalLayoutUI ui = new YifanHuProportionalLayoutUI(); @Override public YifanHuLayout buildLayout() { diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas/ForceAtlas.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas/ForceAtlas.java index 6d3a0f7b69..bf7ba8b273 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas/ForceAtlas.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas/ForceAtlas.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.forceAtlas; import javax.swing.Icon; @@ -50,13 +51,12 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * - * @author Helder Suzuki + * @author Helder Suzuki */ @ServiceProvider(service = LayoutBuilder.class) public class ForceAtlas implements LayoutBuilder { - private ForceAtlasLayoutUI ui = new ForceAtlasLayoutUI(); + private final ForceAtlasLayoutUI ui = new ForceAtlasLayoutUI(); @Override public String getName() { diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas/ForceAtlasLayout.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas/ForceAtlasLayout.java index fe398f1090..f74edb88a2 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas/ForceAtlasLayout.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas/ForceAtlasLayout.java @@ -39,12 +39,15 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.forceAtlas; import java.util.ArrayList; import java.util.List; +import java.util.Random; import org.gephi.graph.api.Edge; import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Interval; import org.gephi.graph.api.Node; import org.gephi.layout.plugin.AbstractLayout; import org.gephi.layout.plugin.ForceVectorNodeLayoutData; @@ -52,18 +55,19 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.layout.spi.Layout; import org.gephi.layout.spi.LayoutBuilder; import org.gephi.layout.spi.LayoutProperty; +import org.openide.util.Exceptions; import org.openide.util.NbBundle; /** - * * @author Mathieu Jacomy */ public class ForceAtlasLayout extends AbstractLayout implements Layout { - //Graph - protected Graph graph; //Properties public double inertia; + //Graph + protected Graph graph; + private long initialisationSeed = new Random().nextLong(); private double repulsionStrength; private double attractionStrength; private double maxDisplacement; @@ -98,137 +102,168 @@ public void resetPropertiesValues() { @Override public void initAlgo() { + ensureSafeLayoutNodePositions(graphModel, initialisationSeed); + } + + public void setInitialisationSeed(long initialisationSeed) { + this.initialisationSeed = initialisationSeed; + } + + private double getEdgeWeight(Edge edge, boolean isDynamicWeight, Interval interval) { + if (isDynamicWeight) { + return edge.getWeight(interval); + } else { + return edge.getWeight(); + } } @Override public void goAlgo() { this.graph = graphModel.getGraphVisible(); graph.readLock(); - Node[] nodes = graph.getNodes().toArray(); - Edge[] edges = graph.getEdges().toArray(); + boolean isDynamicWeight = graphModel.getEdgeTable().getColumn("weight").isDynamic(); + Interval interval = graph.getView().getTimeInterval(); - for (Node n : nodes) { - if (n.getLayoutData() == null || !(n.getLayoutData() instanceof ForceVectorNodeLayoutData)) { - n.setLayoutData(new ForceVectorNodeLayoutData()); - } - } + try { + Node[] nodes = graph.getNodes().toArray(); + Edge[] edges = graph.getEdges().toArray(); - for (Node n : nodes) { - ForceVectorNodeLayoutData layoutData = n.getLayoutData(); - layoutData.old_dx = layoutData.dx; - layoutData.old_dy = layoutData.dy; - layoutData.dx *= inertia; - layoutData.dy *= inertia; - } - // repulsion - if (isAdjustSizes()) { - for (Node n1 : nodes) { - for (Node n2 : nodes) { - if (n1 != n2) { - ForceVectorUtils.fcBiRepulsor_noCollide(n1, n2, getRepulsionStrength() * (1 + graph.getDegree(n1)) * (1 + graph.getDegree(n2))); - } + for (Node n : nodes) { + if (n.getLayoutData() == null || !(n.getLayoutData() instanceof ForceVectorNodeLayoutData)) { + n.setLayoutData(new ForceVectorNodeLayoutData()); } } - } else { - for (Node n1 : nodes) { - for (Node n2 : nodes) { - if (n1 != n2) { - ForceVectorUtils.fcBiRepulsor(n1, n2, getRepulsionStrength() * (1 + graph.getDegree(n1)) * (1 + graph.getDegree(n2))); - } - } + + for (Node n : nodes) { + ForceVectorNodeLayoutData layoutData = n.getLayoutData(); + layoutData.old_dx = layoutData.dx; + layoutData.old_dy = layoutData.dy; + layoutData.dx *= inertia; + layoutData.dy *= inertia; } - } - // attraction - if (isAdjustSizes()) { - if (isOutboundAttractionDistribution()) { - for (Edge e : edges) { - Node nf = e.getSource(); - Node nt = e.getTarget(); - double bonus = (nf.isFixed() || nt.isFixed()) ? (100) : (1); - bonus *= e.getWeight(); - ForceVectorUtils.fcBiAttractor_noCollide(nf, nt, bonus * getAttractionStrength() / (1 + graph.getDegree(nf))); + // repulsion + if (isAdjustSizes()) { + for (Node n1 : nodes) { + for (Node n2 : nodes) { + if (n1 != n2) { + ForceVectorUtils.fcBiRepulsor_noCollide(n1, n2, + getRepulsionStrength() * (1 + graph.getDegree(n1)) * (1 + graph.getDegree(n2))); + } + } } } else { - for (Edge e : edges) { - Node nf = e.getSource(); - Node nt = e.getTarget(); - double bonus = (nf.isFixed() || nt.isFixed()) ? (100) : (1); - bonus *= e.getWeight(); - ForceVectorUtils.fcBiAttractor_noCollide(nf, nt, bonus * getAttractionStrength()); + for (Node n1 : nodes) { + for (Node n2 : nodes) { + if (n1 != n2) { + ForceVectorUtils.fcBiRepulsor(n1, n2, + getRepulsionStrength() * (1 + graph.getDegree(n1)) * (1 + graph.getDegree(n2))); + } + } } } - } else { - if (isOutboundAttractionDistribution()) { - for (Edge e : edges) { - Node nf = e.getSource(); - Node nt = e.getTarget(); - double bonus = (nf.isFixed() || nt.isFixed()) ? (100) : (1); - bonus *= e.getWeight(); - ForceVectorUtils.fcBiAttractor(nf, nt, bonus * getAttractionStrength() / (1 + graph.getDegree(nf))); + // attraction + if (isAdjustSizes()) { + if (isOutboundAttractionDistribution()) { + for (Edge e : edges) { + Node nf = e.getSource(); + Node nt = e.getTarget(); + double bonus = (nf.isFixed() || nt.isFixed()) ? (100) : (1); + bonus *= getEdgeWeight(e, isDynamicWeight, interval); + ForceVectorUtils.fcBiAttractor_noCollide(nf, nt, + bonus * getAttractionStrength() / (1 + graph.getDegree(nf))); + } + } else { + for (Edge e : edges) { + Node nf = e.getSource(); + Node nt = e.getTarget(); + double bonus = (nf.isFixed() || nt.isFixed()) ? (100) : (1); + bonus *= getEdgeWeight(e, isDynamicWeight, interval); + ForceVectorUtils.fcBiAttractor_noCollide(nf, nt, bonus * getAttractionStrength()); + } } } else { - for (Edge e : edges) { - Node nf = e.getSource(); - Node nt = e.getTarget(); - double bonus = (nf.isFixed() || nt.isFixed()) ? (100) : (1); - bonus *= e.getWeight(); - ForceVectorUtils.fcBiAttractor(nf, nt, bonus * getAttractionStrength()); + if (isOutboundAttractionDistribution()) { + for (Edge e : edges) { + Node nf = e.getSource(); + Node nt = e.getTarget(); + double bonus = (nf.isFixed() || nt.isFixed()) ? (100) : (1); + bonus *= getEdgeWeight(e, isDynamicWeight, interval); + ForceVectorUtils + .fcBiAttractor(nf, nt, bonus * getAttractionStrength() / (1 + graph.getDegree(nf))); + } + } else { + for (Edge e : edges) { + Node nf = e.getSource(); + Node nt = e.getTarget(); + double bonus = (nf.isFixed() || nt.isFixed()) ? (100) : (1); + bonus *= getEdgeWeight(e, isDynamicWeight, interval); + ForceVectorUtils.fcBiAttractor(nf, nt, bonus * getAttractionStrength()); + } } } - } - // gravity - for (Node n : nodes) { - - float nx = n.x(); - float ny = n.y(); - double d = 0.0001 + Math.sqrt(nx * nx + ny * ny); - double gf = 0.0001 * getGravity() * d; - ForceVectorNodeLayoutData layoutData = n.getLayoutData(); - layoutData.dx -= gf * nx / d; - layoutData.dy -= gf * ny / d; - } - // speed - if (isFreezeBalance()) { - for (Node n : nodes) { - ForceVectorNodeLayoutData layoutData = n.getLayoutData(); - layoutData.dx *= getSpeed() * 10f; - layoutData.dy *= getSpeed() * 10f; - } - } else { + // gravity for (Node n : nodes) { + + float nx = n.x(); + float ny = n.y(); + double d = 0.0001 + Math.sqrt(nx * nx + ny * ny); + double gf = 0.0001 * getGravity() * d; ForceVectorNodeLayoutData layoutData = n.getLayoutData(); - layoutData.dx *= getSpeed(); - layoutData.dy *= getSpeed(); + layoutData.dx -= gf * nx / d; + layoutData.dy -= gf * ny / d; } - } - // apply forces - for (Node n : nodes) { - ForceVectorNodeLayoutData nLayout = n.getLayoutData(); - if (!n.isFixed()) { - double d = 0.0001 + Math.sqrt(nLayout.dx * nLayout.dx + nLayout.dy * nLayout.dy); - float ratio; - if (isFreezeBalance()) { - nLayout.freeze = (float) (getFreezeInertia() * nLayout.freeze + (1 - getFreezeInertia()) * 0.1 * getFreezeStrength() * (Math.sqrt(Math.sqrt((nLayout.old_dx - nLayout.dx) * (nLayout.old_dx - nLayout.dx) + (nLayout.old_dy - nLayout.dy) * (nLayout.old_dy - nLayout.dy))))); - ratio = (float) Math.min((d / (d * (1f + nLayout.freeze))), getMaxDisplacement() / d); - } else { - ratio = (float) Math.min(1, getMaxDisplacement() / d); + // speed + if (isFreezeBalance()) { + for (Node n : nodes) { + ForceVectorNodeLayoutData layoutData = n.getLayoutData(); + layoutData.dx *= getSpeed() * 10f; + layoutData.dy *= getSpeed() * 10f; } - nLayout.dx *= ratio / getCooling(); - nLayout.dy *= ratio / getCooling(); - float x = n.x() + nLayout.dx; - float y = n.y() + nLayout.dy; + } else { + for (Node n : nodes) { + ForceVectorNodeLayoutData layoutData = n.getLayoutData(); + layoutData.dx *= getSpeed(); + layoutData.dy *= getSpeed(); + } + } + // apply forces + for (Node n : nodes) { + ForceVectorNodeLayoutData nLayout = n.getLayoutData(); + if (!n.isFixed()) { + double d = 0.0001 + Math.sqrt(nLayout.dx * nLayout.dx + nLayout.dy * nLayout.dy); + float ratio; + if (isFreezeBalance()) { + nLayout.freeze = (float) (getFreezeInertia() * nLayout.freeze + + (1 - getFreezeInertia()) * 0.1 * getFreezeStrength() * (Math.sqrt(Math.sqrt( + (nLayout.old_dx - nLayout.dx) * (nLayout.old_dx - nLayout.dx) + + (nLayout.old_dy - nLayout.dy) * (nLayout.old_dy - nLayout.dy))))); + ratio = (float) Math.min((d / (d * (1f + nLayout.freeze))), getMaxDisplacement() / d); + } else { + ratio = (float) Math.min(1, getMaxDisplacement() / d); + } + nLayout.dx *= ratio / getCooling(); + nLayout.dy *= ratio / getCooling(); + float x = n.x() + nLayout.dx; + float y = n.y() + nLayout.dy; - n.setX(x); - n.setY(y); + n.setX(x); + n.setY(y); + } } + } finally { + graph.readUnlockAll(); } - graph.readUnlock(); } @Override public void endAlgo() { - for (Node n : graph.getNodes()) { - n.setLayoutData(null); + graph.readLock(); + try { + for (Node n : graph.getNodes()) { + n.setLayoutData(null); + } + } finally { + graph.readUnlockAll(); } } @@ -239,102 +274,102 @@ public boolean canAlgo() { @Override public LayoutProperty[] getProperties() { - List properties = new ArrayList(); + List properties = new ArrayList<>(); final String FORCE_ATLAS = "Force Atlas"; try { properties.add(LayoutProperty.createProperty( - this, Double.class, - NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.inertia.name"), - FORCE_ATLAS, - "forceAtlas.inertia.name", - NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.inertia.desc"), - "getInertia", "setInertia")); + this, Double.class, + NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.inertia.name"), + FORCE_ATLAS, + "forceAtlas.inertia.name", + NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.inertia.desc"), + "getInertia", "setInertia")); properties.add(LayoutProperty.createProperty( - this, Double.class, - NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.repulsionStrength.name"), - FORCE_ATLAS, - "forceAtlas.repulsionStrength.name", - NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.repulsionStrength.desc"), - "getRepulsionStrength", "setRepulsionStrength")); + this, Double.class, + NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.repulsionStrength.name"), + FORCE_ATLAS, + "forceAtlas.repulsionStrength.name", + NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.repulsionStrength.desc"), + "getRepulsionStrength", "setRepulsionStrength")); properties.add(LayoutProperty.createProperty( - this, Double.class, - NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.attractionStrength.name"), - FORCE_ATLAS, - "forceAtlas.attractionStrength.name", - NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.attractionStrength.desc"), - "getAttractionStrength", "setAttractionStrength")); + this, Double.class, + NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.attractionStrength.name"), + FORCE_ATLAS, + "forceAtlas.attractionStrength.name", + NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.attractionStrength.desc"), + "getAttractionStrength", "setAttractionStrength")); properties.add(LayoutProperty.createProperty( - this, Double.class, - NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.maxDisplacement.name"), - FORCE_ATLAS, - "forceAtlas.maxDisplacement.name", - NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.maxDisplacement.desc"), - "getMaxDisplacement", "setMaxDisplacement")); + this, Double.class, + NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.maxDisplacement.name"), + FORCE_ATLAS, + "forceAtlas.maxDisplacement.name", + NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.maxDisplacement.desc"), + "getMaxDisplacement", "setMaxDisplacement")); properties.add(LayoutProperty.createProperty( - this, Boolean.class, - NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.freezeBalance.name"), - FORCE_ATLAS, - "forceAtlas.freezeBalance.name", - NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.freezeBalance.desc"), - "isFreezeBalance", "setFreezeBalance")); + this, Boolean.class, + NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.freezeBalance.name"), + FORCE_ATLAS, + "forceAtlas.freezeBalance.name", + NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.freezeBalance.desc"), + "isFreezeBalance", "setFreezeBalance")); properties.add(LayoutProperty.createProperty( - this, Double.class, - NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.freezeStrength.name"), - FORCE_ATLAS, - "forceAtlas.freezeStrength.name", - NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.freezeStrength.desc"), - "getFreezeStrength", "setFreezeStrength")); + this, Double.class, + NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.freezeStrength.name"), + FORCE_ATLAS, + "forceAtlas.freezeStrength.name", + NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.freezeStrength.desc"), + "getFreezeStrength", "setFreezeStrength")); properties.add(LayoutProperty.createProperty( - this, Double.class, - NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.freezeInertia.name"), - FORCE_ATLAS, - "forceAtlas.freezeInertia.name", - NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.freezeInertia.desc"), - "getFreezeInertia", "setFreezeInertia")); + this, Double.class, + NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.freezeInertia.name"), + FORCE_ATLAS, + "forceAtlas.freezeInertia.name", + NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.freezeInertia.desc"), + "getFreezeInertia", "setFreezeInertia")); properties.add(LayoutProperty.createProperty( - this, Double.class, - NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.gravity.name"), - FORCE_ATLAS, - "forceAtlas.gravity.name", - NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.gravity.desc"), - "getGravity", "setGravity")); + this, Double.class, + NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.gravity.name"), + FORCE_ATLAS, + "forceAtlas.gravity.name", + NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.gravity.desc"), + "getGravity", "setGravity")); properties.add(LayoutProperty.createProperty( - this, Boolean.class, - NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.outboundAttractionDistribution.name"), - FORCE_ATLAS, - "forceAtlas.outboundAttractionDistribution.name", - NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.outboundAttractionDistribution.desc"), - "isOutboundAttractionDistribution", "setOutboundAttractionDistribution")); + this, Boolean.class, + NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.outboundAttractionDistribution.name"), + FORCE_ATLAS, + "forceAtlas.outboundAttractionDistribution.name", + NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.outboundAttractionDistribution.desc"), + "isOutboundAttractionDistribution", "setOutboundAttractionDistribution")); properties.add(LayoutProperty.createProperty( - this, Boolean.class, - NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.adjustSizes.name"), - FORCE_ATLAS, - "forceAtlas.adjustSizes.name", - NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.adjustSizes.desc"), - "isAdjustSizes", "setAdjustSizes")); + this, Boolean.class, + NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.adjustSizes.name"), + FORCE_ATLAS, + "forceAtlas.adjustSizes.name", + NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.adjustSizes.desc"), + "isAdjustSizes", "setAdjustSizes")); properties.add(LayoutProperty.createProperty( - this, Double.class, - NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.speed.name"), - FORCE_ATLAS, - "forceAtlas.speed.name", - NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.speed.desc"), - "getSpeed", "setSpeed")); + this, Double.class, + NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.speed.name"), + FORCE_ATLAS, + "forceAtlas.speed.name", + NbBundle.getMessage(ForceAtlasLayout.class, "forceAtlas.speed.desc"), + "getSpeed", "setSpeed")); } catch (Exception e) { - e.printStackTrace(); + Exceptions.printStackTrace(e); } return properties.toArray(new LayoutProperty[0]); } - public void setInertia(Double inertia) { - this.inertia = inertia; - } - public Double getInertia() { return inertia; } + public void setInertia(Double inertia) { + this.inertia = inertia; + } + /** * @return the repulsionStrength */ @@ -469,8 +504,7 @@ public Boolean isOutboundAttractionDistribution() { } /** - * @param outboundAttractionDistribution the outboundAttractionDistribution - * to set + * @param outboundAttractionDistribution the outboundAttractionDistribution to set */ public void setOutboundAttractionDistribution(Boolean outboundAttractionDistribution) { this.outboundAttractionDistribution = outboundAttractionDistribution; diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/ForceAtlas2.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/ForceAtlas2.java index bea1f8a82e..157eed32f4 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/ForceAtlas2.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/ForceAtlas2.java @@ -39,18 +39,21 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.forceAtlas2; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.ExecutionException; +import java.util.Random; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import org.gephi.graph.api.Edge; import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Interval; import org.gephi.graph.api.Node; +import org.gephi.layout.plugin.AbstractLayout; import org.gephi.layout.plugin.forceAtlas2.ForceFactory.AttractionForce; import org.gephi.layout.plugin.forceAtlas2.ForceFactory.RepulsionForce; import org.gephi.layout.spi.Layout; @@ -66,25 +69,29 @@ Development and Distribution License("CDDL") (collectively, the */ public class ForceAtlas2 implements Layout { + private final ForceAtlas2Builder layoutBuilder; + double outboundAttCompensation = 1; private GraphModel graphModel; private Graph graph; - private final ForceAtlas2Builder layoutBuilder; private double edgeWeightInfluence; private double jitterTolerance; private double scalingRatio; private double gravity; private double speed; + private double speedEfficiency; private boolean outboundAttractionDistribution; private boolean adjustSizes; private boolean barnesHutOptimize; private double barnesHutTheta; private boolean linLogMode; + private boolean normalizeEdgeWeights; private boolean strongGravityMode; + private boolean invertedEdgeWeightsMode; private int threadCount; private int currentThreadCount; private Region rootRegion; - double outboundAttCompensation = 1; private ExecutorService pool; + private long initialisationSeed = new Random().nextLong(); public ForceAtlas2(ForceAtlas2Builder layoutBuilder) { this.layoutBuilder = layoutBuilder; @@ -93,31 +100,50 @@ public ForceAtlas2(ForceAtlas2Builder layoutBuilder) { @Override public void initAlgo() { + AbstractLayout.ensureSafeLayoutNodePositions(graphModel, initialisationSeed); + speed = 1.; + speedEfficiency = 1.; graph = graphModel.getGraphVisible(); graph.readLock(); - Node[] nodes = graph.getNodes().toArray(); + try { + Node[] nodes = graph.getNodes().toArray(); - // Initialise layout data - for (Node n : nodes) { - if (n.getLayoutData() == null || !(n.getLayoutData() instanceof ForceAtlas2LayoutData)) { - ForceAtlas2LayoutData nLayout = new ForceAtlas2LayoutData(); - n.setLayoutData(nLayout); + // Initialise layout data + for (Node n : nodes) { + if (n.getLayoutData() == null || !(n.getLayoutData() instanceof ForceAtlas2LayoutData)) { + ForceAtlas2LayoutData nLayout = new ForceAtlas2LayoutData(); + n.setLayoutData(nLayout); + } + ForceAtlas2LayoutData nLayout = n.getLayoutData(); + nLayout.mass = 1 + graph.getDegree(n); + nLayout.old_dx = 0; + nLayout.old_dy = 0; + nLayout.dx = 0; + nLayout.dy = 0; } - ForceAtlas2LayoutData nLayout = n.getLayoutData(); - nLayout.mass = 1 + graph.getDegree(n); - nLayout.old_dx = 0; - nLayout.old_dy = 0; - nLayout.dx = 0; - nLayout.dy = 0; + + pool = Executors.newFixedThreadPool(threadCount); + currentThreadCount = threadCount; + } finally { + graph.readUnlockAll(); } + } - pool = Executors.newFixedThreadPool(threadCount); - currentThreadCount = threadCount; + private double getEdgeWeight(Edge edge, boolean isDynamicWeight, Interval interval) { + double w = edge.getWeight(); + if (isDynamicWeight) { + w = edge.getWeight(interval); + } + if (isInvertedEdgeWeightsMode()) { + return w == 0 ? 0 : 1 / w; + } + return w; } + @Override public void goAlgo() { // Initialize graph data @@ -125,140 +151,231 @@ public void goAlgo() { return; } graph = graphModel.getGraphVisible(); - graph.readLock(); - Node[] nodes = graph.getNodes().toArray(); - Edge[] edges = graph.getEdges().toArray(); - - // Initialise layout data - for (Node n : nodes) { - if (n.getLayoutData() == null || !(n.getLayoutData() instanceof ForceAtlas2LayoutData)) { - ForceAtlas2LayoutData nLayout = new ForceAtlas2LayoutData(); - n.setLayoutData(nLayout); - } - ForceAtlas2LayoutData nLayout = n.getLayoutData(); - nLayout.mass = 1 + graph.getDegree(n); - nLayout.old_dx = nLayout.dx; - nLayout.old_dy = nLayout.dy; - nLayout.dx = 0; - nLayout.dy = 0; - } + boolean isDynamicWeight = graphModel.getEdgeTable().getColumn("weight").isDynamic(); + Interval interval = graph.getView().getTimeInterval(); - // If Barnes Hut active, initialize root region - if (isBarnesHutOptimize()) { - rootRegion = new Region(nodes); - rootRegion.buildSubRegions(); - } + try { + Node[] nodes = graph.getNodes().toArray(); + Edge[] edges = graph.getEdges().toArray(); - // If outboundAttractionDistribution active, compensate. - if (isOutboundAttractionDistribution()) { - outboundAttCompensation = 0; + // Initialise layout data for (Node n : nodes) { + if (n.getLayoutData() == null || !(n.getLayoutData() instanceof ForceAtlas2LayoutData)) { + ForceAtlas2LayoutData nLayout = new ForceAtlas2LayoutData(); + n.setLayoutData(nLayout); + } ForceAtlas2LayoutData nLayout = n.getLayoutData(); - outboundAttCompensation += nLayout.mass; + nLayout.mass = 1 + graph.getDegree(n); + nLayout.old_dx = nLayout.dx; + nLayout.old_dy = nLayout.dy; + nLayout.dx = 0; + nLayout.dy = 0; } - outboundAttCompensation /= nodes.length; - } - // Repulsion (and gravity) - // NB: Muti-threaded - RepulsionForce Repulsion = ForceFactory.builder.buildRepulsion(isAdjustSizes(), getScalingRatio()); - - int taskCount = 8 * currentThreadCount; // The threadPool Executor Service will manage the fetching of tasks and threads. - // We make more tasks than threads because some tasks may need more time to compute. - ArrayList threads = new ArrayList(); - for (int t = taskCount; t > 0; t--) { - int from = (int) Math.floor(nodes.length * (t - 1) / taskCount); - int to = (int) Math.floor(nodes.length * t / taskCount); - Future future = pool.submit(new NodesThread(nodes, from, to, isBarnesHutOptimize(), getBarnesHutTheta(), getGravity(), (isStrongGravityMode()) ? (ForceFactory.builder.getStrongGravity(getScalingRatio())) : (Repulsion), getScalingRatio(), rootRegion, Repulsion)); - threads.add(future); - } - for (Future future : threads) { - try { - future.get(); - } catch (InterruptedException ex) { - Exceptions.printStackTrace(ex); - } catch (ExecutionException ex) { - Exceptions.printStackTrace(ex); + // If Barnes Hut active, initialize root region + if (isBarnesHutOptimize()) { + rootRegion = new Region(nodes); + rootRegion.buildSubRegions(); } - } - // Attraction - AttractionForce Attraction = ForceFactory.builder.buildAttraction(isLinLogMode(), isOutboundAttractionDistribution(), isAdjustSizes(), 1 * ((isOutboundAttractionDistribution()) ? (outboundAttCompensation) : (1))); - if (getEdgeWeightInfluence() == 0) { - for (Edge e : edges) { - Attraction.apply(e.getSource(), e.getTarget(), 1); + // If outboundAttractionDistribution active, compensate. + if (isOutboundAttractionDistribution()) { + outboundAttCompensation = 0; + for (Node n : nodes) { + ForceAtlas2LayoutData nLayout = n.getLayoutData(); + outboundAttCompensation += nLayout.mass; + } + outboundAttCompensation /= nodes.length; } - } else if (getEdgeWeightInfluence() == 1) { - for (Edge e : edges) { - Attraction.apply(e.getSource(), e.getTarget(), e.getWeight()); + + // Repulsion (and gravity) + // NB: Muti-threaded + RepulsionForce Repulsion = ForceFactory.builder.buildRepulsion(isAdjustSizes(), getScalingRatio()); + + int taskCount = 8 * + currentThreadCount; // The threadPool Executor Service will manage the fetching of tasks and threads. + // We make more tasks than threads because some tasks may need more time to compute. + ArrayList threads = new ArrayList(); + for (int t = taskCount; t > 0; t--) { + int from = (int) Math.floor(nodes.length * (t - 1) / taskCount); + int to = (int) Math.floor(nodes.length * t / taskCount); + Future future = pool.submit( + new NodesThread(nodes, from, to, isBarnesHutOptimize(), getBarnesHutTheta(), getGravity(), + (isStrongGravityMode()) ? (ForceFactory.builder.getStrongGravity(getScalingRatio())) : + (Repulsion), getScalingRatio(), rootRegion, Repulsion)); + threads.add(future); } - } else { - for (Edge e : edges) { - Attraction.apply(e.getSource(), e.getTarget(), Math.pow(e.getWeight(), getEdgeWeightInfluence())); + for (Future future : threads) { + try { + future.get(); + } catch (Exception e) { + throw new RuntimeException("Unable to layout " + this.getClass().getSimpleName() + ".", e); + } } - } - // Auto adjust speed - double totalSwinging = 0d; // How much irregular movement - double totalEffectiveTraction = 0d; // Hom much useful movement - for (Node n : nodes) { - ForceAtlas2LayoutData nLayout = n.getLayoutData(); - if (!n.isFixed()) { - double swinging = Math.sqrt(Math.pow(nLayout.old_dx - nLayout.dx, 2) + Math.pow(nLayout.old_dy - nLayout.dy, 2)); - totalSwinging += nLayout.mass * swinging; // If the node has a burst change of direction, then it's not converging. - totalEffectiveTraction += nLayout.mass * 0.5 * Math.sqrt(Math.pow(nLayout.old_dx + nLayout.dx, 2) + Math.pow(nLayout.old_dy + nLayout.dy, 2)); + // Attraction + AttractionForce Attraction = ForceFactory.builder + .buildAttraction(isLinLogMode(), isOutboundAttractionDistribution(), isAdjustSizes(), + 1 * ((isOutboundAttractionDistribution()) ? (outboundAttCompensation) : (1))); + if (getEdgeWeightInfluence() == 0) { + for (Edge e : edges) { + Attraction.apply(e.getSource(), e.getTarget(), 1); + } + } else if (getEdgeWeightInfluence() == 1) { + if (isNormalizeEdgeWeights()) { + Double w; + Double edgeWeightMin = Double.MAX_VALUE; + Double edgeWeightMax = Double.MIN_VALUE; + for (Edge e : edges) { + w = getEdgeWeight(e, isDynamicWeight, interval); + edgeWeightMin = Math.min(w, edgeWeightMin); + edgeWeightMax = Math.max(w, edgeWeightMax); + } + if (edgeWeightMin < edgeWeightMax) { + for (Edge e : edges) { + w = (getEdgeWeight(e, isDynamicWeight, interval) - edgeWeightMin) / + (edgeWeightMax - edgeWeightMin); + Attraction.apply(e.getSource(), e.getTarget(), w); + } + } else { + for (Edge e : edges) { + Attraction.apply(e.getSource(), e.getTarget(), 1.); + } + } + } else { + for (Edge e : edges) { + Attraction.apply(e.getSource(), e.getTarget(), getEdgeWeight(e, isDynamicWeight, interval)); + } + } + } else { + if (isNormalizeEdgeWeights()) { + Double w; + Double edgeWeightMin = Double.MAX_VALUE; + Double edgeWeightMax = Double.MIN_VALUE; + for (Edge e : edges) { + w = getEdgeWeight(e, isDynamicWeight, interval); + edgeWeightMin = Math.min(w, edgeWeightMin); + edgeWeightMax = Math.max(w, edgeWeightMax); + } + if (edgeWeightMin < edgeWeightMax) { + for (Edge e : edges) { + w = (getEdgeWeight(e, isDynamicWeight, interval) - edgeWeightMin) / + (edgeWeightMax - edgeWeightMin); + Attraction.apply(e.getSource(), e.getTarget(), + Math.pow(w, getEdgeWeightInfluence())); + } + } else { + for (Edge e : edges) { + Attraction.apply(e.getSource(), e.getTarget(), 1.); + } + } + } else { + for (Edge e : edges) { + Attraction.apply(e.getSource(), e.getTarget(), + Math.pow(getEdgeWeight(e, isDynamicWeight, interval), getEdgeWeightInfluence())); + } + } } - } - // We want that swingingMovement < tolerance * convergenceMovement - double targetSpeed = getJitterTolerance() * getJitterTolerance() * totalEffectiveTraction / totalSwinging; - - // But the speed shoudn't rise too much too quickly, since it would make the convergence drop dramatically. - double maxRise = 0.5; // Max rise: 50% - speed = speed + Math.min(targetSpeed - speed, maxRise * speed); - // Apply forces - if (isAdjustSizes()) { - // If nodes overlap prevention is active, it's not possible to trust the swinging mesure. + // Auto adjust speed + double totalSwinging = 0d; // How much irregular movement + double totalEffectiveTraction = 0d; // Hom much useful movement for (Node n : nodes) { ForceAtlas2LayoutData nLayout = n.getLayoutData(); if (!n.isFixed()) { - - // Adaptive auto-speed: the speed of each node is lowered - // when the node swings. - double swinging = Math.sqrt((nLayout.old_dx - nLayout.dx) * (nLayout.old_dx - nLayout.dx) + (nLayout.old_dy - nLayout.dy) * (nLayout.old_dy - nLayout.dy)); - double factor = 0.1 * speed / (1f + speed * Math.sqrt(swinging)); - - double df = Math.sqrt(Math.pow(nLayout.dx, 2) + Math.pow(nLayout.dy, 2)); - factor = Math.min(factor * df, 10.) / df; - - double x = n.x() + nLayout.dx * factor; - double y = n.y() + nLayout.dy * factor; - - n.setX((float) x); - n.setY((float) y); + double swinging = + Math.sqrt(Math.pow(nLayout.old_dx - nLayout.dx, 2) + Math.pow(nLayout.old_dy - nLayout.dy, 2)); + totalSwinging += nLayout.mass * + swinging; // If the node has a burst change of direction, then it's not converging. + totalEffectiveTraction += nLayout.mass * 0.5 * + Math.sqrt(Math.pow(nLayout.old_dx + nLayout.dx, 2) + Math.pow(nLayout.old_dy + nLayout.dy, 2)); } } - } else { - for (Node n : nodes) { - ForceAtlas2LayoutData nLayout = n.getLayoutData(); - if (!n.isFixed()) { + // We want that swingingMovement < tolerance * convergenceMovement + + // Optimize jitter tolerance + // The 'right' jitter tolerance for this network. Bigger networks need more tolerance. Denser networks need less tolerance. Totally empiric. + double estimatedOptimalJitterTolerance = 0.05 * Math.sqrt(nodes.length); + double minJT = Math.sqrt(estimatedOptimalJitterTolerance); + double maxJT = 10; + double jt = jitterTolerance * Math.max(minJT, + Math.min(maxJT, estimatedOptimalJitterTolerance * totalEffectiveTraction / Math.pow(nodes.length, 2))); + + double minSpeedEfficiency = 0.05; + + // Protection against erratic behavior + if (totalSwinging / totalEffectiveTraction > 2.0) { + if (speedEfficiency > minSpeedEfficiency) { + speedEfficiency *= 0.5; + } + jt = Math.max(jt, jitterTolerance); + } - // Adaptive auto-speed: the speed of each node is lowered - // when the node swings. - double swinging = Math.sqrt((nLayout.old_dx - nLayout.dx) * (nLayout.old_dx - nLayout.dx) + (nLayout.old_dy - nLayout.dy) * (nLayout.old_dy - nLayout.dy)); - //double factor = speed / (1f + Math.sqrt(speed * swinging)); - double factor = speed / (1f + speed * Math.sqrt(swinging)); + double targetSpeed = jt * speedEfficiency * totalEffectiveTraction / totalSwinging; - double x = n.x() + nLayout.dx * factor; - double y = n.y() + nLayout.dy * factor; + // Speed efficiency is how the speed really corresponds to the swinging vs. convergence tradeoff + // We adjust it slowly and carefully + if (totalSwinging > jt * totalEffectiveTraction) { + if (speedEfficiency > minSpeedEfficiency) { + speedEfficiency *= 0.7; + } + } else if (speed < 1000) { + speedEfficiency *= 1.3; + } - n.setX((float) x); - n.setY((float) y); + // But the speed shoudn't rise too much too quickly, since it would make the convergence drop dramatically. + double maxRise = 0.5; // Max rise: 50% + speed = speed + Math.min(targetSpeed - speed, maxRise * speed); + + // Apply forces + if (isAdjustSizes()) { + // If nodes overlap prevention is active, it's not possible to trust the swinging mesure. + for (Node n : nodes) { + ForceAtlas2LayoutData nLayout = n.getLayoutData(); + if (!n.isFixed()) { + + // Adaptive auto-speed: the speed of each node is lowered + // when the node swings. + double swinging = nLayout.mass * Math.sqrt( + (nLayout.old_dx - nLayout.dx) * (nLayout.old_dx - nLayout.dx) + + (nLayout.old_dy - nLayout.dy) * (nLayout.old_dy - nLayout.dy)); + double factor = 0.1 * speed / (1f + Math.sqrt(speed * swinging)); + + double df = Math.sqrt(Math.pow(nLayout.dx, 2) + Math.pow(nLayout.dy, 2)); + factor = Math.min(factor * df, 10.) / df; + + double x = n.x() + nLayout.dx * factor; + double y = n.y() + nLayout.dy * factor; + + n.setX((float) x); + n.setY((float) y); + } + } + } else { + for (Node n : nodes) { + ForceAtlas2LayoutData nLayout = n.getLayoutData(); + if (!n.isFixed()) { + + // Adaptive auto-speed: the speed of each node is lowered + // when the node swings. + double swinging = nLayout.mass * Math.sqrt( + (nLayout.old_dx - nLayout.dx) * (nLayout.old_dx - nLayout.dx) + + (nLayout.old_dy - nLayout.dy) * (nLayout.old_dy - nLayout.dy)); + //double factor = speed / (1f + Math.sqrt(speed * swinging)); + double factor = speed / (1f + Math.sqrt(speed * swinging)); + + double x = n.x() + nLayout.dx * factor; + double y = n.y() + nLayout.dy * factor; + + n.setX((float) x); + n.setY((float) y); + } } } + } finally { + graph.readUnlockAll(); } - graph.readUnlockAll(); } @Override @@ -268,16 +385,20 @@ public boolean canAlgo() { @Override public void endAlgo() { - for (Node n : graph.getNodes()) { - n.setLayoutData(null); + graph.readLock(); + try { + for (Node n : graph.getNodes()) { + n.setLayoutData(null); + } + pool.shutdown(); + } finally { + graph.readUnlockAll(); } - pool.shutdown(); - graph.readUnlockAll(); } @Override public LayoutProperty[] getProperties() { - List properties = new ArrayList(); + List properties = new ArrayList<>(); final String FORCEATLAS2_TUNING = NbBundle.getMessage(getClass(), "ForceAtlas2.tuning"); final String FORCEATLAS2_BEHAVIOR = NbBundle.getMessage(getClass(), "ForceAtlas2.behavior"); final String FORCEATLAS2_PERFORMANCE = NbBundle.getMessage(getClass(), "ForceAtlas2.performance"); @@ -285,95 +406,111 @@ public LayoutProperty[] getProperties() { try { properties.add(LayoutProperty.createProperty( - this, Double.class, - NbBundle.getMessage(getClass(), "ForceAtlas2.scalingRatio.name"), - FORCEATLAS2_TUNING, - "ForceAtlas2.scalingRatio.name", - NbBundle.getMessage(getClass(), "ForceAtlas2.scalingRatio.desc"), - "getScalingRatio", "setScalingRatio")); + this, Double.class, + NbBundle.getMessage(getClass(), "ForceAtlas2.scalingRatio.name"), + FORCEATLAS2_TUNING, + "ForceAtlas2.scalingRatio.name", + NbBundle.getMessage(getClass(), "ForceAtlas2.scalingRatio.desc"), + "getScalingRatio", "setScalingRatio")); + + properties.add(LayoutProperty.createProperty( + this, Boolean.class, + NbBundle.getMessage(getClass(), "ForceAtlas2.strongGravityMode.name"), + FORCEATLAS2_TUNING, + "ForceAtlas2.strongGravityMode.name", + NbBundle.getMessage(getClass(), "ForceAtlas2.strongGravityMode.desc"), + "isStrongGravityMode", "setStrongGravityMode")); + + properties.add(LayoutProperty.createProperty( + this, Double.class, + NbBundle.getMessage(getClass(), "ForceAtlas2.gravity.name"), + FORCEATLAS2_TUNING, + "ForceAtlas2.gravity.name", + NbBundle.getMessage(getClass(), "ForceAtlas2.gravity.desc"), + "getGravity", "setGravity")); properties.add(LayoutProperty.createProperty( - this, Boolean.class, - NbBundle.getMessage(getClass(), "ForceAtlas2.strongGravityMode.name"), - FORCEATLAS2_TUNING, - "ForceAtlas2.strongGravityMode.name", - NbBundle.getMessage(getClass(), "ForceAtlas2.strongGravityMode.desc"), - "isStrongGravityMode", "setStrongGravityMode")); + this, Boolean.class, + NbBundle.getMessage(getClass(), "ForceAtlas2.distributedAttraction.name"), + FORCEATLAS2_BEHAVIOR, + "ForceAtlas2.distributedAttraction.name", + NbBundle.getMessage(getClass(), "ForceAtlas2.distributedAttraction.desc"), + "isOutboundAttractionDistribution", "setOutboundAttractionDistribution")); properties.add(LayoutProperty.createProperty( - this, Double.class, - NbBundle.getMessage(getClass(), "ForceAtlas2.gravity.name"), - FORCEATLAS2_TUNING, - "ForceAtlas2.gravity.name", - NbBundle.getMessage(getClass(), "ForceAtlas2.gravity.desc"), - "getGravity", "setGravity")); + this, Boolean.class, + NbBundle.getMessage(getClass(), "ForceAtlas2.linLogMode.name"), + FORCEATLAS2_BEHAVIOR, + "ForceAtlas2.linLogMode.name", + NbBundle.getMessage(getClass(), "ForceAtlas2.linLogMode.desc"), + "isLinLogMode", "setLinLogMode")); properties.add(LayoutProperty.createProperty( - this, Boolean.class, - NbBundle.getMessage(getClass(), "ForceAtlas2.distributedAttraction.name"), - FORCEATLAS2_BEHAVIOR, - "ForceAtlas2.distributedAttraction.name", - NbBundle.getMessage(getClass(), "ForceAtlas2.distributedAttraction.desc"), - "isOutboundAttractionDistribution", "setOutboundAttractionDistribution")); + this, Boolean.class, + NbBundle.getMessage(getClass(), "ForceAtlas2.adjustSizes.name"), + FORCEATLAS2_BEHAVIOR, + "ForceAtlas2.adjustSizes.name", + NbBundle.getMessage(getClass(), "ForceAtlas2.adjustSizes.desc"), + "isAdjustSizes", "setAdjustSizes")); properties.add(LayoutProperty.createProperty( - this, Boolean.class, - NbBundle.getMessage(getClass(), "ForceAtlas2.linLogMode.name"), - FORCEATLAS2_BEHAVIOR, - "ForceAtlas2.linLogMode.name", - NbBundle.getMessage(getClass(), "ForceAtlas2.linLogMode.desc"), - "isLinLogMode", "setLinLogMode")); + this, Double.class, + NbBundle.getMessage(getClass(), "ForceAtlas2.edgeWeightInfluence.name"), + FORCEATLAS2_BEHAVIOR, + "ForceAtlas2.edgeWeightInfluence.name", + NbBundle.getMessage(getClass(), "ForceAtlas2.edgeWeightInfluence.desc"), + "getEdgeWeightInfluence", "setEdgeWeightInfluence")); properties.add(LayoutProperty.createProperty( - this, Boolean.class, - NbBundle.getMessage(getClass(), "ForceAtlas2.adjustSizes.name"), - FORCEATLAS2_BEHAVIOR, - "ForceAtlas2.adjustSizes.name", - NbBundle.getMessage(getClass(), "ForceAtlas2.adjustSizes.desc"), - "isAdjustSizes", "setAdjustSizes")); + this, Boolean.class, + NbBundle.getMessage(getClass(), "ForceAtlas2.normalizeEdgeWeights.name"), + FORCEATLAS2_BEHAVIOR, + "ForceAtlas2.normalizeEdgeWeights.name", + NbBundle.getMessage(getClass(), "ForceAtlas2.normalizeEdgeWeights.desc"), + "isNormalizeEdgeWeights", "setNormalizeEdgeWeights")); properties.add(LayoutProperty.createProperty( - this, Double.class, - NbBundle.getMessage(getClass(), "ForceAtlas2.edgeWeightInfluence.name"), - FORCEATLAS2_BEHAVIOR, - "ForceAtlas2.edgeWeightInfluence.name", - NbBundle.getMessage(getClass(), "ForceAtlas2.edgeWeightInfluence.desc"), - "getEdgeWeightInfluence", "setEdgeWeightInfluence")); + this, Boolean.class, + NbBundle.getMessage(getClass(), "ForceAtlas2.invertedEdgeWeightsMode.name"), + FORCEATLAS2_BEHAVIOR, + "ForceAtlas2.invertedEdgeWeightsMode.name", + NbBundle.getMessage(getClass(), "ForceAtlas2.invertedEdgeWeightsMode.desc"), + "isInvertedEdgeWeightsMode", "setInvertedEdgeWeightsMode")); properties.add(LayoutProperty.createProperty( - this, Double.class, - NbBundle.getMessage(getClass(), "ForceAtlas2.jitterTolerance.name"), - FORCEATLAS2_PERFORMANCE, - "ForceAtlas2.jitterTolerance.name", - NbBundle.getMessage(getClass(), "ForceAtlas2.jitterTolerance.desc"), - "getJitterTolerance", "setJitterTolerance")); + this, Double.class, + NbBundle.getMessage(getClass(), "ForceAtlas2.jitterTolerance.name"), + FORCEATLAS2_PERFORMANCE, + "ForceAtlas2.jitterTolerance.name", + NbBundle.getMessage(getClass(), "ForceAtlas2.jitterTolerance.desc"), + "getJitterTolerance", "setJitterTolerance")); properties.add(LayoutProperty.createProperty( - this, Boolean.class, - NbBundle.getMessage(getClass(), "ForceAtlas2.barnesHutOptimization.name"), - FORCEATLAS2_PERFORMANCE, - "ForceAtlas2.barnesHutOptimization.name", - NbBundle.getMessage(getClass(), "ForceAtlas2.barnesHutOptimization.desc"), - "isBarnesHutOptimize", "setBarnesHutOptimize")); + this, Boolean.class, + NbBundle.getMessage(getClass(), "ForceAtlas2.barnesHutOptimization.name"), + FORCEATLAS2_PERFORMANCE, + "ForceAtlas2.barnesHutOptimization.name", + NbBundle.getMessage(getClass(), "ForceAtlas2.barnesHutOptimization.desc"), + "isBarnesHutOptimize", "setBarnesHutOptimize")); properties.add(LayoutProperty.createProperty( - this, Double.class, - NbBundle.getMessage(getClass(), "ForceAtlas2.barnesHutTheta.name"), - FORCEATLAS2_PERFORMANCE, - "ForceAtlas2.barnesHutTheta.name", - NbBundle.getMessage(getClass(), "ForceAtlas2.barnesHutTheta.desc"), - "getBarnesHutTheta", "setBarnesHutTheta")); + this, Double.class, + NbBundle.getMessage(getClass(), "ForceAtlas2.barnesHutTheta.name"), + FORCEATLAS2_PERFORMANCE, + "ForceAtlas2.barnesHutTheta.name", + NbBundle.getMessage(getClass(), "ForceAtlas2.barnesHutTheta.desc"), + "getBarnesHutTheta", "setBarnesHutTheta")); properties.add(LayoutProperty.createProperty( - this, Integer.class, - NbBundle.getMessage(getClass(), "ForceAtlas2.threads.name"), - FORCEATLAS2_THREADS, - "ForceAtlas2.threads.name", - NbBundle.getMessage(getClass(), "ForceAtlas2.threads.desc"), - "getThreadsCount", "setThreadsCount")); + this, Integer.class, + NbBundle.getMessage(getClass(), "ForceAtlas2.threads.name"), + FORCEATLAS2_THREADS, + "ForceAtlas2.threads.name", + NbBundle.getMessage(getClass(), "ForceAtlas2.threads.desc"), + "getThreadsCount", "setThreadsCount")); } catch (Exception e) { - e.printStackTrace(); + Exceptions.printStackTrace(e); } return properties.toArray(new LayoutProperty[0]); @@ -394,6 +531,7 @@ public void resetPropertiesValues() { setScalingRatio(10.0); } setStrongGravityMode(false); + setInvertedEdgeWeightsMode(false); setGravity(1.); // Behavior @@ -401,22 +539,13 @@ public void resetPropertiesValues() { setLinLogMode(false); setAdjustSizes(false); setEdgeWeightInfluence(1.); + setNormalizeEdgeWeights(false); // Performance - if (nodesCount >= 50000) { - setJitterTolerance(10d); - } else if (nodesCount >= 5000) { - setJitterTolerance(1d); - } else { - setJitterTolerance(0.1d); - } - if (nodesCount >= 1000) { - setBarnesHutOptimize(true); - } else { - setBarnesHutOptimize(false); - } + setJitterTolerance(1d); + setBarnesHutOptimize(nodesCount >= 1000); setBarnesHutTheta(1.2); - setThreadsCount(2); + setThreadsCount(Math.max(1, Runtime.getRuntime().availableProcessors() - 1)); } @Override @@ -463,6 +592,14 @@ public void setLinLogMode(Boolean linLogMode) { this.linLogMode = linLogMode; } + public Boolean isNormalizeEdgeWeights() { + return normalizeEdgeWeights; + } + + public void setNormalizeEdgeWeights(Boolean normalizeEdgeWeights) { + this.normalizeEdgeWeights = normalizeEdgeWeights; + } + public Double getScalingRatio() { return scalingRatio; } @@ -479,6 +616,15 @@ public void setStrongGravityMode(Boolean strongGravityMode) { this.strongGravityMode = strongGravityMode; } + + public Boolean isInvertedEdgeWeightsMode() { + return invertedEdgeWeightsMode; + } + + public void setInvertedEdgeWeightsMode(Boolean invertedEdgeWeightsMode) { + this.invertedEdgeWeightsMode = invertedEdgeWeightsMode; + } + public Double getGravity() { return gravity; } @@ -492,11 +638,7 @@ public Integer getThreadsCount() { } public void setThreadsCount(Integer threadCount) { - if (threadCount < 1) { - setThreadsCount(1); - } else { - this.threadCount = threadCount; - } + this.threadCount = Math.max(1, threadCount); } public Boolean isOutboundAttractionDistribution() { @@ -522,4 +664,8 @@ public Boolean isBarnesHutOptimize() { public void setBarnesHutOptimize(Boolean barnesHutOptimize) { this.barnesHutOptimize = barnesHutOptimize; } + + public void setInitialisationSeed(long initialisationSeed) { + this.initialisationSeed = initialisationSeed; + } } diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/ForceAtlas2Builder.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/ForceAtlas2Builder.java index f8579f1394..974eb8e7b6 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/ForceAtlas2Builder.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/ForceAtlas2Builder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.forceAtlas2; import javax.swing.Icon; @@ -51,12 +52,13 @@ Development and Distribution License("CDDL") (collectively, the /** * Layout Builder + * * @author Mathieu Jacomy */ @ServiceProvider(service = LayoutBuilder.class) public class ForceAtlas2Builder implements LayoutBuilder { - private ForceAtlas2UI ui = new ForceAtlas2UI(); + private final ForceAtlas2UI ui = new ForceAtlas2UI(); @Override public String getName() { diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/ForceAtlas2LayoutData.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/ForceAtlas2LayoutData.java index 837f5c3452..ac6a0c4d26 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/ForceAtlas2LayoutData.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/ForceAtlas2LayoutData.java @@ -39,12 +39,14 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.forceAtlas2; import org.gephi.graph.spi.LayoutData; /** * Data stored in Nodes and used by ForceAtlas2 + * * @author Mathieu Jacomy */ public class ForceAtlas2LayoutData implements LayoutData { diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/ForceFactory.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/ForceFactory.java index 971a40e28a..157b8fc808 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/ForceFactory.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/ForceFactory.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.forceAtlas2; import org.gephi.graph.api.Node; @@ -56,8 +57,6 @@ public class ForceFactory { private ForceFactory() { } - ; - public RepulsionForce buildRepulsion(boolean adjustBySize, double coefficient) { if (adjustBySize) { return new linRepulsion_antiCollision(coefficient); @@ -70,7 +69,8 @@ public RepulsionForce getStrongGravity(double coefficient) { return new strongGravity(coefficient); } - public AttractionForce buildAttraction(boolean logAttraction, boolean distributedAttraction, boolean adjustBySize, double coefficient) { + public AttractionForce buildAttraction(boolean logAttraction, boolean distributedAttraction, boolean adjustBySize, + double coefficient) { if (adjustBySize) { if (logAttraction) { if (distributedAttraction) { @@ -104,7 +104,8 @@ public AttractionForce buildAttraction(boolean logAttraction, boolean distribute public abstract class AttractionForce { - public abstract void apply(Node n1, Node n2, double e); // Model for node-node attraction (e is for edge weight if needed) + public abstract void apply(Node n1, Node n2, + double e); // Model for node-node attraction (e is for edge weight if needed) } public abstract class RepulsionForce { @@ -121,7 +122,7 @@ public abstract class RepulsionForce { */ private class linRepulsion extends RepulsionForce { - private double coefficient; + private final double coefficient; public linRepulsion(double c) { coefficient = c; @@ -191,7 +192,7 @@ public void apply(Node n, double g) { */ private class linRepulsion_antiCollision extends RepulsionForce { - private double coefficient; + private final double coefficient; public linRepulsion_antiCollision(double c) { coefficient = c; @@ -272,7 +273,7 @@ public void apply(Node n, double g) { private class strongGravity extends RepulsionForce { - private double coefficient; + private final double coefficient; public strongGravity(double c) { coefficient = c; @@ -312,7 +313,7 @@ public void apply(Node n, double g) { */ private class linAttraction extends AttractionForce { - private double coefficient; + private final double coefficient; public linAttraction(double c) { coefficient = c; @@ -343,7 +344,7 @@ public void apply(Node n1, Node n2, double e) { */ private class linAttraction_massDistributed extends AttractionForce { - private double coefficient; + private final double coefficient; public linAttraction_massDistributed(double c) { coefficient = c; @@ -374,7 +375,7 @@ public void apply(Node n1, Node n2, double e) { */ private class logAttraction extends AttractionForce { - private double coefficient; + private final double coefficient; public logAttraction(double c) { coefficient = c; @@ -409,7 +410,7 @@ public void apply(Node n1, Node n2, double e) { */ private class logAttraction_degreeDistributed extends AttractionForce { - private double coefficient; + private final double coefficient; public logAttraction_degreeDistributed(double c) { coefficient = c; @@ -444,7 +445,7 @@ public void apply(Node n1, Node n2, double e) { */ private class linAttraction_antiCollision extends AttractionForce { - private double coefficient; + private final double coefficient; public linAttraction_antiCollision(double c) { coefficient = c; @@ -478,7 +479,7 @@ public void apply(Node n1, Node n2, double e) { */ private class linAttraction_degreeDistributed_antiCollision extends AttractionForce { - private double coefficient; + private final double coefficient; public linAttraction_degreeDistributed_antiCollision(double c) { coefficient = c; @@ -512,7 +513,7 @@ public void apply(Node n1, Node n2, double e) { */ private class logAttraction_antiCollision extends AttractionForce { - private double coefficient; + private final double coefficient; public logAttraction_antiCollision(double c) { coefficient = c; @@ -547,7 +548,7 @@ public void apply(Node n1, Node n2, double e) { */ private class logAttraction_degreeDistributed_antiCollision extends AttractionForce { - private double coefficient; + private final double coefficient; public logAttraction_degreeDistributed_antiCollision(double c) { coefficient = c; diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/NodesThread.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/NodesThread.java index 991546ae30..0dfc9d17af 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/NodesThread.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/NodesThread.java @@ -39,29 +39,30 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.forceAtlas2; import org.gephi.graph.api.Node; import org.gephi.layout.plugin.forceAtlas2.ForceFactory.RepulsionForce; /** - * * @author Mathieu Jacomy */ public class NodesThread implements Runnable { - private Node[] nodes; - private int from; - private int to; - private Region rootRegion; - private boolean barnesHutOptimize; - private RepulsionForce Repulsion; - private double barnesHutTheta; - private double gravity; - private RepulsionForce GravityForce; - private double scaling; + private final Node[] nodes; + private final int from; + private final int to; + private final Region rootRegion; + private final boolean barnesHutOptimize; + private final RepulsionForce Repulsion; + private final double barnesHutTheta; + private final double gravity; + private final RepulsionForce GravityForce; + private final double scaling; - public NodesThread(Node[] nodes, int from, int to, boolean barnesHutOptimize, double barnesHutTheta, double gravity, RepulsionForce GravityForce, double scaling, Region rootRegion, RepulsionForce Repulsion) { + public NodesThread(Node[] nodes, int from, int to, boolean barnesHutOptimize, double barnesHutTheta, double gravity, + RepulsionForce GravityForce, double scaling, Region rootRegion, RepulsionForce Repulsion) { this.nodes = nodes; this.from = from; this.to = to; diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/Operation.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/Operation.java index ea73509754..cea8c25d64 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/Operation.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/Operation.java @@ -39,10 +39,10 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.forceAtlas2; /** - * * @author Mathieu Jacomy */ public abstract class Operation { diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/OperationNodeNodeAttract.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/OperationNodeNodeAttract.java index ddbe474af3..94cb34e333 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/OperationNodeNodeAttract.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/OperationNodeNodeAttract.java @@ -39,13 +39,13 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.forceAtlas2; import org.gephi.graph.api.Node; import org.gephi.layout.plugin.forceAtlas2.ForceFactory.AttractionForce; /** - * * @author Mathieu Jacomy */ public class OperationNodeNodeAttract extends Operation { diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/OperationNodeNodeRepulse.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/OperationNodeNodeRepulse.java index 04c849c88f..e82afc6709 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/OperationNodeNodeRepulse.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/OperationNodeNodeRepulse.java @@ -39,13 +39,13 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.forceAtlas2; import org.gephi.graph.api.Node; import org.gephi.layout.plugin.forceAtlas2.ForceFactory.RepulsionForce; /** - * * @author Mathieu Jacomy */ public class OperationNodeNodeRepulse extends Operation { diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/OperationNodeRegionRepulse.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/OperationNodeRegionRepulse.java index a8fec0b508..bceda60bdc 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/OperationNodeRegionRepulse.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/OperationNodeRegionRepulse.java @@ -39,13 +39,13 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.forceAtlas2; import org.gephi.graph.api.Node; import org.gephi.layout.plugin.forceAtlas2.ForceFactory.RepulsionForce; /** - * * @author Mathieu Jacomy */ public class OperationNodeRegionRepulse extends Operation { diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/OperationNodeRepulse.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/OperationNodeRepulse.java index 5db64b33d7..50690061fc 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/OperationNodeRepulse.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/OperationNodeRepulse.java @@ -39,20 +39,20 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.forceAtlas2; import org.gephi.graph.api.Node; import org.gephi.layout.plugin.forceAtlas2.ForceFactory.RepulsionForce; /** - * * @author Mathieu Jacomy */ public class OperationNodeRepulse extends Operation { - private Node n; - private RepulsionForce f; - private double coefficient; + private final Node n; + private final RepulsionForce f; + private final double coefficient; public OperationNodeRepulse(Node n, RepulsionForce f, double coefficient) { this.n = n; diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/Region.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/Region.java index 94a0dd0ac3..e026dd69af 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/Region.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/forceAtlas2/Region.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.forceAtlas2; import java.util.ArrayList; @@ -54,21 +55,21 @@ Development and Distribution License("CDDL") (collectively, the */ public class Region { + private final List nodes; + private final List subregions = new ArrayList<>(); private double mass; private double massCenterX; private double massCenterY; private double size; - private final List nodes; - private final List subregions = new ArrayList(); public Region(Node[] nodes) { - this.nodes = new ArrayList(); + this.nodes = new ArrayList<>(); this.nodes.addAll(Arrays.asList(nodes)); updateMassAndGeometry(); } public Region(ArrayList nodes) { - this.nodes = new ArrayList(nodes); + this.nodes = new ArrayList<>(nodes); updateMassAndGeometry(); } @@ -90,7 +91,8 @@ private void updateMassAndGeometry() { // Compute size size = Double.MIN_VALUE; for (Node n : nodes) { - double distance = Math.sqrt((n.x() - massCenterX) * (n.x() - massCenterX) + (n.y() - massCenterY) * (n.y() - massCenterY)); + double distance = Math.sqrt( + (n.x() - massCenterX) * (n.x() - massCenterX) + (n.y() - massCenterY) * (n.y() - massCenterY)); size = Math.max(size, 2 * distance); } } @@ -98,22 +100,22 @@ private void updateMassAndGeometry() { public synchronized void buildSubRegions() { if (nodes.size() > 1) { - ArrayList leftNodes = new ArrayList(); - ArrayList rightNodes = new ArrayList(); + ArrayList leftNodes = new ArrayList<>(); + ArrayList rightNodes = new ArrayList<>(); for (Node n : nodes) { ArrayList nodesColumn = (n.x() < massCenterX) ? (leftNodes) : (rightNodes); nodesColumn.add(n); } - ArrayList topleftNodes = new ArrayList(); - ArrayList bottomleftNodes = new ArrayList(); + ArrayList topleftNodes = new ArrayList<>(); + ArrayList bottomleftNodes = new ArrayList<>(); for (Node n : leftNodes) { ArrayList nodesLine = (n.y() < massCenterY) ? (topleftNodes) : (bottomleftNodes); nodesLine.add(n); } - ArrayList bottomrightNodes = new ArrayList(); - ArrayList toprightNodes = new ArrayList(); + ArrayList bottomrightNodes = new ArrayList<>(); + ArrayList toprightNodes = new ArrayList<>(); for (Node n : rightNodes) { ArrayList nodesLine = (n.y() < massCenterY) ? (toprightNodes) : (bottomrightNodes); nodesLine.add(n); @@ -125,7 +127,7 @@ public synchronized void buildSubRegions() { subregions.add(subregion); } else { for (Node n : topleftNodes) { - ArrayList oneNodeList = new ArrayList(); + ArrayList oneNodeList = new ArrayList<>(); oneNodeList.add(n); Region subregion = new Region(oneNodeList); subregions.add(subregion); @@ -138,7 +140,7 @@ public synchronized void buildSubRegions() { subregions.add(subregion); } else { for (Node n : bottomleftNodes) { - ArrayList oneNodeList = new ArrayList(); + ArrayList oneNodeList = new ArrayList<>(); oneNodeList.add(n); Region subregion = new Region(oneNodeList); subregions.add(subregion); @@ -151,7 +153,7 @@ public synchronized void buildSubRegions() { subregions.add(subregion); } else { for (Node n : bottomrightNodes) { - ArrayList oneNodeList = new ArrayList(); + ArrayList oneNodeList = new ArrayList<>(); oneNodeList.add(n); Region subregion = new Region(oneNodeList); subregions.add(subregion); @@ -164,7 +166,7 @@ public synchronized void buildSubRegions() { subregions.add(subregion); } else { for (Node n : toprightNodes) { - ArrayList oneNodeList = new ArrayList(); + ArrayList oneNodeList = new ArrayList<>(); oneNodeList.add(n); Region subregion = new Region(oneNodeList); subregions.add(subregion); @@ -183,7 +185,8 @@ public void applyForce(Node n, RepulsionForce Force, double theta) { Node regionNode = nodes.get(0); Force.apply(n, regionNode); } else { - double distance = Math.sqrt((n.x() - massCenterX) * (n.x() - massCenterX) + (n.y() - massCenterY) * (n.y() - massCenterY)); + double distance = Math.sqrt( + (n.x() - massCenterX) * (n.x() - massCenterX) + (n.y() - massCenterY) * (n.y() - massCenterY)); if (distance * theta > size) { Force.apply(n, this); } else { diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/fruchterman/FruchtermanReingold.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/fruchterman/FruchtermanReingold.java index 6b8a35edaf..15cf5e9e66 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/fruchterman/FruchtermanReingold.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/fruchterman/FruchtermanReingold.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.fruchterman; import java.util.ArrayList; @@ -51,10 +52,10 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.layout.spi.Layout; import org.gephi.layout.spi.LayoutBuilder; import org.gephi.layout.spi.LayoutProperty; +import org.openide.util.Exceptions; import org.openide.util.NbBundle; /** - * * @author Mathieu Jacomy */ public class FruchtermanReingold extends AbstractLayout implements Layout { @@ -87,92 +88,102 @@ public void initAlgo() { public void goAlgo() { this.graph = graphModel.getGraphVisible(); graph.readLock(); - Node[] nodes = graph.getNodes().toArray(); - Edge[] edges = graph.getEdges().toArray(); + try { + Node[] nodes = graph.getNodes().toArray(); + Edge[] edges = graph.getEdges().toArray(); - for (Node n : nodes) { - if (n.getLayoutData() == null || !(n.getLayoutData() instanceof ForceVectorNodeLayoutData)) { - n.setLayoutData(new ForceVectorNodeLayoutData()); + for (Node n : nodes) { + if (n.getLayoutData() == null || !(n.getLayoutData() instanceof ForceVectorNodeLayoutData)) { + n.setLayoutData(new ForceVectorNodeLayoutData()); + } + ForceVectorNodeLayoutData layoutData = n.getLayoutData(); + layoutData.dx = 0; + layoutData.dy = 0; } - ForceVectorNodeLayoutData layoutData = n.getLayoutData(); - layoutData.dx = 0; - layoutData.dy = 0; - } - float maxDisplace = (float) (Math.sqrt(AREA_MULTIPLICATOR * area) / 10f); // DΓ©placement limite : on peut le calibrer... - float k = (float) Math.sqrt((AREA_MULTIPLICATOR * area) / (1f + nodes.length)); // La variable k, l'idΓ©e principale du layout. - - for (Node N1 : nodes) { - for (Node N2 : nodes) { // On fait toutes les paires de noeuds - if (N1 != N2) { - float xDist = N1.x() - N2.x(); // distance en x entre les deux noeuds - float yDist = N1.y() - N2.y(); - float dist = (float) Math.sqrt(xDist * xDist + yDist * yDist); // distance tout court - - if (dist > 0) { - float repulsiveF = k * k / dist; // Force de rΓ©pulsion - ForceVectorNodeLayoutData layoutData = N1.getLayoutData(); - layoutData.dx += xDist / dist * repulsiveF; // on l'applique... - layoutData.dy += yDist / dist * repulsiveF; + float maxDisplace = (float) (Math.sqrt(AREA_MULTIPLICATOR * area) / + 10f); // DΓ©placement limite : on peut le calibrer... + float k = (float) Math.sqrt((AREA_MULTIPLICATOR * area) / + (1f + nodes.length)); // La variable k, l'idΓ©e principale du layout. + + for (Node N1 : nodes) { + for (Node N2 : nodes) { // On fait toutes les paires de noeuds + if (N1 != N2) { + float xDist = N1.x() - N2.x(); // distance en x entre les deux noeuds + float yDist = N1.y() - N2.y(); + float dist = (float) Math.sqrt(xDist * xDist + yDist * yDist); // distance tout court + + if (dist > 0) { + float repulsiveF = k * k / dist; // Force de rΓ©pulsion + ForceVectorNodeLayoutData layoutData = N1.getLayoutData(); + layoutData.dx += xDist / dist * repulsiveF; // on l'applique... + layoutData.dy += yDist / dist * repulsiveF; + } } } } - } - for (Edge E : edges) { - // Idem, pour tous les noeuds on applique la force d'attraction + for (Edge E : edges) { + // Idem, pour tous les noeuds on applique la force d'attraction - Node Nf = E.getSource(); - Node Nt = E.getTarget(); + Node Nf = E.getSource(); + Node Nt = E.getTarget(); - float xDist = Nf.x() - Nt.x(); - float yDist = Nf.y() - Nt.y(); - float dist = (float) Math.sqrt(xDist * xDist + yDist * yDist); + float xDist = Nf.x() - Nt.x(); + float yDist = Nf.y() - Nt.y(); + float dist = (float) Math.sqrt(xDist * xDist + yDist * yDist); - float attractiveF = dist * dist / k; + float attractiveF = dist * dist / k; - if (dist > 0) { - ForceVectorNodeLayoutData sourceLayoutData = Nf.getLayoutData(); - ForceVectorNodeLayoutData targetLayoutData = Nt.getLayoutData(); - sourceLayoutData.dx -= xDist / dist * attractiveF; - sourceLayoutData.dy -= yDist / dist * attractiveF; - targetLayoutData.dx += xDist / dist * attractiveF; - targetLayoutData.dy += yDist / dist * attractiveF; + if (dist > 0) { + ForceVectorNodeLayoutData sourceLayoutData = Nf.getLayoutData(); + ForceVectorNodeLayoutData targetLayoutData = Nt.getLayoutData(); + sourceLayoutData.dx -= xDist / dist * attractiveF; + sourceLayoutData.dy -= yDist / dist * attractiveF; + targetLayoutData.dx += xDist / dist * attractiveF; + targetLayoutData.dy += yDist / dist * attractiveF; + } } - } - // gravity - for (Node n : nodes) { - ForceVectorNodeLayoutData layoutData = n.getLayoutData(); - float d = (float) Math.sqrt(n.x() * n.x() + n.y() * n.y()); - float gf = 0.01f * k * (float) gravity * d; - layoutData.dx -= gf * n.x() / d; - layoutData.dy -= gf * n.y() / d; - } - // speed - for (Node n : nodes) { - ForceVectorNodeLayoutData layoutData = n.getLayoutData(); - layoutData.dx *= speed / SPEED_DIVISOR; - layoutData.dy *= speed / SPEED_DIVISOR; - } - for (Node n : nodes) { - // Maintenant on applique le dΓ©placement calculΓ© sur les noeuds. - // nb : le dΓ©placement Γ  chaque passe "instantannΓ©" correspond Γ  la force : c'est une sorte d'accΓ©lΓ©ration. - ForceVectorNodeLayoutData layoutData = n.getLayoutData(); - float xDist = layoutData.dx; - float yDist = layoutData.dy; - float dist = (float) Math.sqrt(layoutData.dx * layoutData.dx + layoutData.dy * layoutData.dy); - if (dist > 0 && !n.isFixed()) { - float limitedDist = Math.min(maxDisplace * ((float) speed / SPEED_DIVISOR), dist); - n.setX(n.x() + xDist / dist * limitedDist); - n.setY(n.y() + yDist / dist * limitedDist); + // gravity + for (Node n : nodes) { + ForceVectorNodeLayoutData layoutData = n.getLayoutData(); + float d = (float) Math.sqrt(n.x() * n.x() + n.y() * n.y()); + float gf = 0.01f * k * (float) gravity * d; + layoutData.dx -= gf * n.x() / d; + layoutData.dy -= gf * n.y() / d; + } + // speed + for (Node n : nodes) { + ForceVectorNodeLayoutData layoutData = n.getLayoutData(); + layoutData.dx *= speed / SPEED_DIVISOR; + layoutData.dy *= speed / SPEED_DIVISOR; + } + for (Node n : nodes) { + // Maintenant on applique le dΓ©placement calculΓ© sur les noeuds. + // nb : le dΓ©placement Γ  chaque passe "instantannΓ©" correspond Γ  la force : c'est une sorte d'accΓ©lΓ©ration. + ForceVectorNodeLayoutData layoutData = n.getLayoutData(); + float xDist = layoutData.dx; + float yDist = layoutData.dy; + float dist = (float) Math.sqrt(layoutData.dx * layoutData.dx + layoutData.dy * layoutData.dy); + if (dist > 0 && !n.isFixed()) { + float limitedDist = Math.min(maxDisplace * ((float) speed / SPEED_DIVISOR), dist); + n.setX(n.x() + xDist / dist * limitedDist); + n.setY(n.y() + yDist / dist * limitedDist); + } } + } finally { + graph.readUnlockAll(); } - graph.readUnlock(); } @Override public void endAlgo() { - for (Node n : graph.getNodes()) { - n.setLayoutData(null); + graph.readLock(); + try { + for (Node n : graph.getNodes()) { + n.setLayoutData(null); + } + } finally { + graph.readUnlockAll(); } } @@ -183,33 +194,33 @@ public boolean canAlgo() { @Override public LayoutProperty[] getProperties() { - List properties = new ArrayList(); + List properties = new ArrayList<>(); final String FRUCHTERMAN_REINGOLD = "Fruchterman Reingold"; try { properties.add(LayoutProperty.createProperty( - this, Float.class, - NbBundle.getMessage(FruchtermanReingold.class, "fruchtermanReingold.area.name"), - FRUCHTERMAN_REINGOLD, - "fruchtermanReingold.area.name", - NbBundle.getMessage(FruchtermanReingold.class, "fruchtermanReingold.area.desc"), - "getArea", "setArea")); + this, Float.class, + NbBundle.getMessage(FruchtermanReingold.class, "fruchtermanReingold.area.name"), + FRUCHTERMAN_REINGOLD, + "fruchtermanReingold.area.name", + NbBundle.getMessage(FruchtermanReingold.class, "fruchtermanReingold.area.desc"), + "getArea", "setArea")); properties.add(LayoutProperty.createProperty( - this, Double.class, - NbBundle.getMessage(FruchtermanReingold.class, "fruchtermanReingold.gravity.name"), - FRUCHTERMAN_REINGOLD, - "fruchtermanReingold.gravity.name", - NbBundle.getMessage(FruchtermanReingold.class, "fruchtermanReingold.gravity.desc"), - "getGravity", "setGravity")); + this, Double.class, + NbBundle.getMessage(FruchtermanReingold.class, "fruchtermanReingold.gravity.name"), + FRUCHTERMAN_REINGOLD, + "fruchtermanReingold.gravity.name", + NbBundle.getMessage(FruchtermanReingold.class, "fruchtermanReingold.gravity.desc"), + "getGravity", "setGravity")); properties.add(LayoutProperty.createProperty( - this, Double.class, - NbBundle.getMessage(FruchtermanReingold.class, "fruchtermanReingold.speed.name"), - FRUCHTERMAN_REINGOLD, - "fruchtermanReingold.speed.name", - NbBundle.getMessage(FruchtermanReingold.class, "fruchtermanReingold.speed.desc"), - "getSpeed", "setSpeed")); + this, Double.class, + NbBundle.getMessage(FruchtermanReingold.class, "fruchtermanReingold.speed.name"), + FRUCHTERMAN_REINGOLD, + "fruchtermanReingold.speed.name", + NbBundle.getMessage(FruchtermanReingold.class, "fruchtermanReingold.speed.desc"), + "getSpeed", "setSpeed")); } catch (Exception e) { - e.printStackTrace(); + Exceptions.printStackTrace(e); } return properties.toArray(new LayoutProperty[0]); diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/fruchterman/FruchtermanReingoldBuilder.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/fruchterman/FruchtermanReingoldBuilder.java index 5fa98ccb92..2de2e578fc 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/fruchterman/FruchtermanReingoldBuilder.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/fruchterman/FruchtermanReingoldBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.fruchterman; import javax.swing.Icon; @@ -50,13 +51,12 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = LayoutBuilder.class) public class FruchtermanReingoldBuilder implements LayoutBuilder { - private FruchtermanReingoldLayoutUI ui = new FruchtermanReingoldLayoutUI(); + private final FruchtermanReingoldLayoutUI ui = new FruchtermanReingoldLayoutUI(); @Override public String getName() { diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/labelAdjust/LabelAdjust.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/labelAdjust/LabelAdjust.java index e3bd2304e9..5f00e59b5e 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/labelAdjust/LabelAdjust.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/labelAdjust/LabelAdjust.java @@ -39,20 +39,22 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.labelAdjust; import java.util.ArrayList; import java.util.List; import org.gephi.graph.api.Graph; import org.gephi.graph.api.Node; +import org.gephi.graph.api.TextProperties; import org.gephi.layout.plugin.AbstractLayout; import org.gephi.layout.spi.Layout; import org.gephi.layout.spi.LayoutBuilder; import org.gephi.layout.spi.LayoutProperty; +import org.openide.util.Exceptions; import org.openide.util.NbBundle; /** - * * @author Mathieu Jacomy */ public class LabelAdjust extends AbstractLayout implements Layout { @@ -89,101 +91,102 @@ public void initAlgo() { public void goAlgo() { this.graph = graphModel.getGraphVisible(); graph.readLock(); - Node[] nodes = graph.getNodes().toArray(); + try { + Node[] nodes = graph.getNodes().toArray(); - //Reset Layout Data - for (Node n : nodes) { - if (n.getLayoutData() == null || !(n.getLayoutData() instanceof LabelAdjustLayoutData)) { - n.setLayoutData(new LabelAdjustLayoutData()); + //Reset Layout Data + for (Node n : nodes) { + if (n.getLayoutData() == null || !(n.getLayoutData() instanceof LabelAdjustLayoutData)) { + n.setLayoutData(new LabelAdjustLayoutData()); + } + LabelAdjustLayoutData layoutData = n.getLayoutData(); + layoutData.freeze = 0; + layoutData.dx = 0; + layoutData.dy = 0; } - LabelAdjustLayoutData layoutData = n.getLayoutData(); - layoutData.freeze = 0; - layoutData.dx = 0; - layoutData.dy = 0; - } - // Get xmin, xmax, ymin, ymax - xmin = Float.MAX_VALUE; - xmax = Float.MIN_VALUE; - ymin = Float.MAX_VALUE; - ymax = Float.MIN_VALUE; - - List correctNodes = new ArrayList(); - for (Node n : nodes) { - float x = n.x(); - float y = n.y(); -// float w = n.getTextData().getWidth(); -// float h = n.getTextData().getHeight(); - float w = 0f, h = 0f; - float radius = n.size() / 2f; - - if (w > 0 && h > 0) { - // Get the rectangle occupied by the node (size + label) - float nxmin = Math.min(x - w / 2, x - radius); - float nxmax = Math.max(x + w / 2, x + radius); - float nymin = Math.min(y - h / 2, y - radius); - float nymax = Math.max(y + h / 2, y + radius); - - // Update global boundaries - xmin = Math.min(this.xmin, nxmin); - xmax = Math.max(this.xmax, nxmax); - ymin = Math.min(this.ymin, nymin); - ymax = Math.max(this.ymax, nymax); - - correctNodes.add(n); + // Get xmin, xmax, ymin, ymax + xmin = Float.MAX_VALUE; + xmax = Float.MIN_VALUE; + ymin = Float.MAX_VALUE; + ymax = Float.MIN_VALUE; + + List correctNodes = new ArrayList<>(); + for (Node n : nodes) { + float x = n.x(); + float y = n.y(); + TextProperties t = n.getTextProperties(); + float w = t.getWidth(); + float h = t.getHeight(); + float radius = n.size() / 2f; + + if (w > 0 && h > 0) { + // Get the rectangle occupied by the node (size + label) + float nxmin = Math.min(x - w / 2, x - radius); + float nxmax = Math.max(x + w / 2, x + radius); + float nymin = Math.min(y - h / 2, y - radius); + float nymax = Math.max(y + h / 2, y + radius); + + // Update global boundaries + xmin = Math.min(this.xmin, nxmin); + xmax = Math.max(this.xmax, nxmax); + ymin = Math.min(this.ymin, nymin); + ymax = Math.max(this.ymax, nymax); + + correctNodes.add(n); + } } - } - if (correctNodes.isEmpty() || xmin == xmax || ymin == ymax) { - graph.readUnlock(); - return; - } + if (correctNodes.isEmpty() || xmin == xmax || ymin == ymax) { + return; + } - long timeStamp = 1; - boolean someCollision = false; + long timeStamp = 1; + boolean someCollision = false; - //Add all nodes in the quadtree - QuadTree quadTree = new QuadTree(correctNodes.size(), (xmax - xmin) / (ymax - ymin)); - for (Node n : correctNodes) { - quadTree.add(n); - } - - //Compute repulsion - with neighbours in the 8 quadnodes around the node - for (Node n : correctNodes) { - timeStamp++; - LabelAdjustLayoutData layoutData = n.getLayoutData(); - QuadNode quad = quadTree.getQuadNode(layoutData.labelAdjustQuadNode); - - //Repulse with adjacent quad - but only one per pair of nodes, timestamp is guaranteeing that - for (Node neighbour : quadTree.getAdjacentNodes(quad.row, quad.col)) { - LabelAdjustLayoutData neighborLayoutData = neighbour.getLayoutData(); - if (neighbour != n && neighborLayoutData.freeze < timeStamp) { - boolean collision = repulse(n, neighbour); - someCollision = someCollision || collision; - } - neighborLayoutData.freeze = timeStamp; //Use the existing freeze float variable to set timestamp + //Add all nodes in the quadtree + QuadTree quadTree = new QuadTree(correctNodes.size(), (xmax - xmin) / (ymax - ymin)); + for (Node n : correctNodes) { + quadTree.add(n); } - } - if (!someCollision) { - setConverged(true); - } else { - // apply forces + //Compute repulsion - with neighbours in the 8 quadnodes around the node for (Node n : correctNodes) { + timeStamp++; LabelAdjustLayoutData layoutData = n.getLayoutData(); - if (!n.isFixed()) { - layoutData.dx *= speed; - layoutData.dy *= speed; - float x = n.x() + layoutData.dx; - float y = n.y() + layoutData.dy; - - n.setX(x); - n.setY(y); + QuadNode quad = quadTree.getQuadNode(layoutData.labelAdjustQuadNode); + + //Repulse with adjacent quad - but only one per pair of nodes, timestamp is guaranteeing that + for (Node neighbour : quadTree.getAdjacentNodes(quad.row, quad.col)) { + LabelAdjustLayoutData neighborLayoutData = neighbour.getLayoutData(); + if (neighbour != n && neighborLayoutData.freeze < timeStamp) { + boolean collision = repulse(n, neighbour); + someCollision = someCollision || collision; + } + neighborLayoutData.freeze = timeStamp; //Use the existing freeze float variable to set timestamp } } - } - graph.readUnlock(); + if (!someCollision) { + setConverged(true); + } else { + // apply forces + for (Node n : correctNodes) { + LabelAdjustLayoutData layoutData = n.getLayoutData(); + if (!n.isFixed()) { + layoutData.dx *= speed; + layoutData.dy *= speed; + float x = n.x() + layoutData.dx; + float y = n.y() + layoutData.dy; + + n.setX(x); + n.setY(y); + } + } + } + } finally { + graph.readUnlockAll(); + } } private boolean repulse(Node n1, Node n2) { @@ -192,11 +195,12 @@ private boolean repulse(Node n1, Node n2) { float n1y = n1.y(); float n2x = n2.x(); float n2y = n2.y(); -// float n1w = n1.getTextData().getWidth(); -// float n2w = n2.getTextData().getWidth(); -// float n1h = n1.getTextData().getHeight(); -// float n2h = n2.getTextData().getHeight(); - float n1w = 0f, n2w = 0f, n1h = 0f, n2h = 0; + TextProperties t1 = n1.getTextProperties(); + TextProperties t2 = n2.getTextProperties(); + float n1w = t1.getWidth(); + float n2w = t2.getWidth(); + float n1h = t1.getHeight(); + float n2h = t2.getHeight(); LabelAdjustLayoutData n2Data = n2.getLayoutData(); double n1xmin = n1x - 0.5 * n1w; @@ -267,25 +271,25 @@ public void endAlgo() { @Override public LayoutProperty[] getProperties() { - List properties = new ArrayList(); + List properties = new ArrayList<>(); final String LABELADJUST_CATEGORY = "LabelAdjust"; try { properties.add(LayoutProperty.createProperty( - this, Double.class, - NbBundle.getMessage(getClass(), "LabelAdjust.speed.name"), - LABELADJUST_CATEGORY, - "LabelAdjust.speed.name", - NbBundle.getMessage(getClass(), "LabelAdjust.speed.desc"), - "getSpeed", "setSpeed")); + this, Double.class, + NbBundle.getMessage(getClass(), "LabelAdjust.speed.name"), + LABELADJUST_CATEGORY, + "LabelAdjust.speed.name", + NbBundle.getMessage(getClass(), "LabelAdjust.speed.desc"), + "getSpeed", "setSpeed")); properties.add(LayoutProperty.createProperty( - this, Boolean.class, - NbBundle.getMessage(getClass(), "LabelAdjust.adjustBySize.name"), - LABELADJUST_CATEGORY, - "LabelAdjust.adjustBySize.name", - NbBundle.getMessage(getClass(), "LabelAdjust.adjustBySize.desc"), - "isAdjustBySize", "setAdjustBySize")); + this, Boolean.class, + NbBundle.getMessage(getClass(), "LabelAdjust.adjustBySize.name"), + LABELADJUST_CATEGORY, + "LabelAdjust.adjustBySize.name", + NbBundle.getMessage(getClass(), "LabelAdjust.adjustBySize.desc"), + "isAdjustBySize", "setAdjustBySize")); } catch (Exception e) { - e.printStackTrace(); + Exceptions.printStackTrace(e); } return properties.toArray(new LayoutProperty[0]); } @@ -317,7 +321,7 @@ public QuadNode(int index, int row, int col) { this.index = index; this.row = row; this.col = col; - this.nodes = new ArrayList(); + this.nodes = new ArrayList<>(); } public List getNodes() { @@ -354,9 +358,9 @@ public QuadTree(int numberNodes, float aspectRatio) { public void add(Node node) { float x = node.x(); float y = node.y(); -// float w = node.getTextData().getWidth(); -// float h = node.getTextData().getHeight(); - float w = 0f, h = 0f; + TextProperties t = node.getTextProperties(); + float w = t.getWidth(); + float h = t.getHeight(); float radius = node.size(); // Get the rectangle occupied by the node (size + label) @@ -392,7 +396,7 @@ public List getAdjacentNodes(int row, int col) { return quads[0].getNodes(); } - List adjNodes = new ArrayList(); + List adjNodes = new ArrayList<>(); int left = Math.max(0, col - 1); int top = Math.max(0, row - 1); int right = Math.min(COLUMNS - 1, col + 1); diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/labelAdjust/LabelAdjustBuilder.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/labelAdjust/LabelAdjustBuilder.java index c7d2a8ad9a..d48f7834ae 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/labelAdjust/LabelAdjustBuilder.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/labelAdjust/LabelAdjustBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.labelAdjust; import javax.swing.Icon; @@ -50,13 +51,12 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = LayoutBuilder.class) public class LabelAdjustBuilder implements LayoutBuilder { - private LabelAdjustLayoutUI ui = new LabelAdjustLayoutUI(); + private final LabelAdjustLayoutUI ui = new LabelAdjustLayoutUI(); @Override public String getName() { diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/labelAdjust/LabelAdjustLayoutData.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/labelAdjust/LabelAdjustLayoutData.java index 498ee85e5e..b6da9198ec 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/labelAdjust/LabelAdjustLayoutData.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/labelAdjust/LabelAdjustLayoutData.java @@ -39,12 +39,12 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.labelAdjust; import org.gephi.layout.plugin.ForceVectorNodeLayoutData; /** - * * @author Mathieu Bastian */ public class LabelAdjustLayoutData extends ForceVectorNodeLayoutData { diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/mirror/Mirror.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/mirror/Mirror.java new file mode 100644 index 0000000000..f82d6ba145 --- /dev/null +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/mirror/Mirror.java @@ -0,0 +1,59 @@ +package org.gephi.layout.plugin.mirror; + + +import javax.swing.Icon; +import javax.swing.JPanel; +import org.gephi.layout.spi.Layout; +import org.gephi.layout.spi.LayoutBuilder; +import org.gephi.layout.spi.LayoutUI; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +@ServiceProvider(service = LayoutBuilder.class) +public class Mirror implements LayoutBuilder { + + private final MirrorLayoutUI ui = new MirrorLayoutUI(); + + @Override + public MirrorLayout buildLayout() { + return new MirrorLayout(this, false, true); + } + + @Override + public String getName() { + return NbBundle.getMessage(Mirror.class, "mirror.name"); + } + + @Override + public LayoutUI getUI() { + return ui; + } + + private static class MirrorLayoutUI implements LayoutUI { + + @Override + public String getDescription() { + return NbBundle.getMessage(Mirror.class, "mirror.description"); + } + + @Override + public Icon getIcon() { + return null; + } + + @Override + public JPanel getSimplePanel(Layout layout) { + return null; + } + + @Override + public int getQualityRank() { + return -1; + } + + @Override + public int getSpeedRank() { + return -1; + } + } +} diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/mirror/MirrorLayout.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/mirror/MirrorLayout.java new file mode 100644 index 0000000000..af7d50ffab --- /dev/null +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/mirror/MirrorLayout.java @@ -0,0 +1,123 @@ +package org.gephi.layout.plugin.mirror; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.BiConsumer; +import java.util.function.Function; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Node; +import org.gephi.layout.plugin.AbstractLayout; +import org.gephi.layout.spi.LayoutBuilder; +import org.gephi.layout.spi.LayoutProperty; +import org.openide.util.Exceptions; +import org.openide.util.NbBundle; + +public class MirrorLayout extends AbstractLayout { + private record MirrorTransformation(Function nodeGetFunction, BiConsumer nodeSetFunction, + String name) { + } + + + private boolean xAxis; + private final MirrorTransformation xAxisTransformation = new MirrorTransformation(Node::y, Node::setY, "X axis"); + private final MirrorTransformation yAxisTransformation = new MirrorTransformation(Node::x, Node::setX, "Y axis"); + + private boolean yAxis; + + public MirrorLayout(LayoutBuilder layoutBuilder, boolean xAxis, boolean yAxis) { + super(layoutBuilder); + this.xAxis = xAxis; + this.yAxis = yAxis; + + } + + @Override + public void initAlgo() { + setConverged(false); + } + + @Override + public void goAlgo() { + Graph graph = graphModel.getGraphVisible(); + graph.readLock(); + try { + float xMean = 0.f, yMean = 0.f; + for (Node n : graph.getNodes()) { + if (yAxis) { + xMean += yAxisTransformation.nodeGetFunction.apply(n); + } + if (xAxis) { + yMean += xAxisTransformation.nodeGetFunction.apply(n); + } + } + xMean /= graph.getNodeCount(); + yMean /= graph.getNodeCount(); + for (Node node : graph.getNodes()) { + if (!node.isFixed()) { + if (yAxis) { + float delta = ((yAxisTransformation.nodeGetFunction.apply(node) - xMean) * -1.0f); + yAxisTransformation.nodeSetFunction.accept(node, xMean + delta); + } + if (xAxis) { + float delta = ((xAxisTransformation.nodeGetFunction.apply(node) - yMean) * -1.0f); + xAxisTransformation.nodeSetFunction.accept(node, yMean + delta); + } + } + } + setConverged(true); + } finally { + graph.readUnlockAll(); + } + } + + @Override + public void endAlgo() { + + } + + @Override + public LayoutProperty[] getProperties() { + List properties = new ArrayList<>(); + try { + properties.add(LayoutProperty.createProperty( + this, Boolean.class, + NbBundle.getMessage(getClass(), "mirror.xaxis.name"), + null, + "mirror.xaxis.name", + NbBundle.getMessage(getClass(), "mirror.xaxis.desc"), + "isxAxis", "setxAxis")); + properties.add(LayoutProperty.createProperty( + this, Boolean.class, + NbBundle.getMessage(getClass(), "mirror.yaxis.name"), + null, + "mirror.yaxis.name", + NbBundle.getMessage(getClass(), "mirror.yaxis.desc"), + "isyAxis", "setyAxis")); + } catch (Exception e) { + Exceptions.printStackTrace(e); + } + return properties.toArray(new LayoutProperty[0]); + } + + @Override + public void resetPropertiesValues() { + this.setxAxis(false); + this.setyAxis(true); + } + + public Boolean isxAxis() { + return xAxis; + } + + public void setxAxis(Boolean xAxis) { + this.xAxis = xAxis; + } + + public Boolean isyAxis() { + return yAxis; + } + + public void setyAxis(Boolean yAxis) { + this.yAxis = yAxis; + } +} diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/noverlap/NoverlapLayout.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/noverlap/NoverlapLayout.java new file mode 100755 index 0000000000..65c8c6928d --- /dev/null +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/noverlap/NoverlapLayout.java @@ -0,0 +1,475 @@ +/* + Copyright 2008-2011 Gephi + Authors : Mathieu Jacomy + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.layout.plugin.noverlap; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Random; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Node; +import org.gephi.layout.plugin.AbstractLayout; +import org.gephi.layout.spi.Layout; +import org.gephi.layout.spi.LayoutBuilder; +import org.gephi.layout.spi.LayoutProperty; +import org.gephi.utils.longtask.spi.LongTask; +import org.gephi.utils.progress.ProgressTicket; +import org.openide.util.Exceptions; +import org.openide.util.NbBundle; + +/** + * @author Mathieu Jacomy + */ +public class NoverlapLayout extends AbstractLayout implements Layout, LongTask { + + protected boolean cancel; + protected Graph graph; + private Random random; + private long seed; + private double speed; + private double ratio; + private double margin; + private double xmin; + private double xmax; + private double ymin; + private double ymax; + + public NoverlapLayout(LayoutBuilder layoutBuilder) { + super(layoutBuilder); + } + + @Override + public void initAlgo() { + this.graph = graphModel.getGraphVisible(); + random = new Random(seed); + setConverged(false); + cancel = false; + } + + @Override + public void goAlgo() { + setConverged(true); + this.graph = graphModel.getGraphVisible(); + graph.readLock(); + try { + // Reset Layout Data + for (Node n : graph.getNodes()) { + if (n.getLayoutData() == null || !(n.getLayoutData() instanceof NoverlapLayoutData)) { + n.setLayoutData(new NoverlapLayoutData()); + } + NoverlapLayoutData layoutData = n.getLayoutData(); + layoutData.dx = 0; + layoutData.dy = 0; + } + + // Get xmin, xmax, ymin, ymax + this.xmin = Double.MAX_VALUE; + this.xmax = Double.MIN_VALUE; + this.ymin = Double.MAX_VALUE; + this.ymax = Double.MIN_VALUE; + + for (Node n : graph.getNodes()) { + float x = n.x(); + float y = n.y(); + float radius = n.size(); + + // Get the rectangle occupied by the node + double nxmin = x - (radius * ratio + margin); + double nxmax = x + (radius * ratio + margin); + double nymin = y - (radius * ratio + margin); + double nymax = y + (radius * ratio + margin); + + // Update global boundaries + this.xmin = Math.min(this.xmin, nxmin); + this.xmax = Math.max(this.xmax, nxmax); + this.ymin = Math.min(this.ymin, nymin); + this.ymax = Math.max(this.ymax, nymax); + } + + // Secure the bounds + double xwidth = this.xmax - this.xmin; + double yheight = this.ymax - this.ymin; + double xcenter = (this.xmin + this.xmax) / 2; + double ycenter = (this.ymin + this.ymax) / 2; + double securityRatio = 1.05; + this.xmin = xcenter - securityRatio * xwidth / 2; + this.xmax = xcenter + securityRatio * xwidth / 2; + this.ymin = ycenter - securityRatio * yheight / 2; + this.ymax = ycenter + securityRatio * yheight / 2; + + // Estimate necessary number of columns + double area = xwidth * yheight; + double areaPerNode = area / graph.getNodeCount(); + // Explanation for the weird line below: + // If nodes were equally distributed in space, we would like to have grid cells that contain + // a small number of nodes, maybe about a dozen or something. We would like to balance the number of + // nodes per cell with the number of cells. + // But we basically know that in practice, the nodes are very concentrated. Because of this, the practical + // density is probably much higher than the average density. So we should lower the grid size consequently. + // In the end, we can eyeball this as targeting the same order of magnitude, hence the formula below. + // I keep it as such to make explicit that there is a ratio, even if we keep it to 1. + double targetAreaPerNode = 1. * areaPerNode; + double targetGridSize = Math.sqrt(targetAreaPerNode); + int columns_count = (int) Math.ceil(Math.min(xwidth, yheight) / targetGridSize); + + // Create the grid where neighborhood (potential overlap) is computed + SpatialGrid grid = new SpatialGrid(columns_count); + + // Put nodes in their boxes + for (Node n : graph.getNodes()) { + grid.add(n); + } + + // Now we have cells with nodes in it. Nodes that are in the same cell are tested for repulsion. + // But they are not repulsed several times, even if they are in several cells... + // So we build a relation of proximity between nodes. + // Build proximity pairs + Map proximities = new HashMap<>(); + for (int row = 0; row < grid.countRows() && !cancel; row++) { + for (int col = 0; col < grid.countColumns() && !cancel; col++) { + for (Node n : grid.getContent(row, col)) { + int nid = n.getStoreId(); + for (Node n2 : grid.getContent(row, col)) { + int n2id = n2.getStoreId(); + if (n2id < nid) { + Node[] nodePair = new Node[2]; + nodePair[0] = n; + nodePair[1] = n2; + + proximities.put(nid + "|" + n2id, nodePair); + } + } + } + } + } + + // Move colliding nodes as registered in proximity + int collisions = 0; + for (Map.Entry entry : proximities.entrySet()) { + Node[] nodePair = entry.getValue(); + Node n1 = nodePair[0]; + Node n2 = nodePair[1]; + + float n1x = n1.x(); + float n1y = n1.y(); + float n2x = n2.x(); + float n2y = n2.y(); + float n1radius = (float) (n1.size() * ratio + margin); + float n2radius = (float) (n2.size() * ratio + margin); + float n1Weight = n1radius * n1radius; + float n2Weight = n2radius * n2radius; + float n1Ratio = n2Weight / (n1Weight + n2Weight); + float n2Ratio = 1 - n1Ratio; + + // Check sizes + double xDist = n2x - n1x; + double yDist = n2y - n1y; + double dist = Math.sqrt(xDist * xDist + yDist * yDist); + double overlap = n1radius + n2radius - dist; + boolean collision = overlap > 0; + if (collision) { + collisions += 1; + double xOverlap; + double yOverlap; + if (dist > 0) { + overlap += 0.05; // We need to overshoot a bit + double angle = Math.atan2(yDist, xDist); + xOverlap = overlap * Math.cos(angle); + yOverlap = overlap * Math.sin(angle); + } else { + // Same exact position: jitter + xOverlap = 0.01 * (0.5 - random.nextDouble()); + yOverlap = 0.01 * (0.5 - random.nextDouble()); + } + + // n1 and n2 move each other of part of the overlap + NoverlapLayoutData n1ldata = n1.getLayoutData(); + n1ldata.dx -= n1Ratio * xOverlap; + n1ldata.dy -= n1Ratio * yOverlap; + + NoverlapLayoutData n2ldata = n2.getLayoutData(); + n2ldata.dx += n2Ratio * xOverlap; + n2ldata.dy += n2Ratio * yOverlap; + } + + if (cancel) { + break; + } + } + + if (collisions > 0) { + setConverged(false); + } + + for (Node n : graph.getNodes()) { + NoverlapLayoutData layoutData = n.getLayoutData(); + if (!n.isFixed()) { + float x = n.x() + (float) (layoutData.dx * speed); + float y = n.y() + (float) (layoutData.dy * speed); + n.setX(x); + n.setY(y); + } + } + } finally { + graph.readUnlockAll(); + } + } + + @Override + public void endAlgo() { + graph.readLock(); + try { + for (Node n : graph.getNodes()) { + n.setLayoutData(null); + } + } finally { + graph.readUnlockAll(); + } + } + + @Override + public LayoutProperty[] getProperties() { + List properties = new ArrayList<>(); + final String NOVERLAP_CATEGORY = NbBundle.getMessage(getClass(), "name"); + try { + properties.add(LayoutProperty.createProperty( + this, Double.class, + NbBundle.getMessage(getClass(), "Noverlap.speed.name"), + NOVERLAP_CATEGORY, + "Noverlap.speed.name", + NbBundle.getMessage(getClass(), "Noverlap.speed.desc"), + "getSpeed", "setSpeed")); + } catch (Exception e) { + Exceptions.printStackTrace(e); + } + try { + properties.add(LayoutProperty.createProperty( + this, Double.class, + NbBundle.getMessage(getClass(), "Noverlap.ratio.name"), + NOVERLAP_CATEGORY, + "Noverlap.ratio.name", + NbBundle.getMessage(getClass(), "Noverlap.ratio.desc"), + "getRatio", "setRatio")); + } catch (Exception e) { + Exceptions.printStackTrace(e); + } + try { + properties.add(LayoutProperty.createProperty( + this, Double.class, + NbBundle.getMessage(getClass(), "Noverlap.margin.name"), + NOVERLAP_CATEGORY, + "Noverlap.margin.name", + NbBundle.getMessage(getClass(), "Noverlap.margin.desc"), + "getMargin", "setMargin")); + } catch (Exception e) { + Exceptions.printStackTrace(e); + } + try { + properties.add(LayoutProperty.createProperty( + this, Long.class, + NbBundle.getMessage(getClass(), "Noverlap.seed.name"), + NOVERLAP_CATEGORY, + "Noverlap.seed.name", + NbBundle.getMessage(getClass(), "Noverlap.seed.desc"), + "getSeed", "setSeed")); + } catch (Exception e) { + Exceptions.printStackTrace(e); + } + return properties.toArray(new LayoutProperty[0]); + } + + @Override + public void resetPropertiesValues() { + setSpeed(3.); + setRatio(1.2); + setMargin(5.); + setSeed(new Random().nextLong()); + } + + public Double getSpeed() { + return speed; + } + + public void setSpeed(Double speed) { + this.speed = speed; + } + + public Double getRatio() { + return ratio; + } + + public void setRatio(Double ratio) { + this.ratio = ratio; + } + + public Double getMargin() { + return margin; + } + + public void setMargin(Double margin) { + this.margin = margin; + } + + public Long getSeed() { + return seed; + } + + public void setSeed(Long seed) { + this.seed = seed; + } + + @Override + public boolean cancel() { + cancel = true; + return cancel; + } + + @Override + public void setProgressTicket(ProgressTicket progressTicket) { + } + + private static class Cell { + + private final int row; + private final int col; + + public Cell(int row, int col) { + this.row = row; + this.col = col; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final Cell other = (Cell) obj; + if (this.row != other.row) { + return false; + } + return this.col == other.col; + } + + @Override + public int hashCode() { + int hash = 7; + hash = 11 * hash + this.row; + hash = 11 * hash + this.col; + return hash; + } + } + + private class SpatialGrid { + + //Param + private int COLUMNS_ROWS = 20; + //Data + private final Map> data = new HashMap<>(); + + public SpatialGrid() { + for (int row = 0; row < COLUMNS_ROWS; row++) { + for (int col = 0; col < COLUMNS_ROWS; col++) { + List localnodes = new ArrayList<>(); + data.put(new Cell(row, col), localnodes); + } + } + } + + public SpatialGrid(int columns_rows) { + COLUMNS_ROWS = columns_rows; + for (int row = 0; row < COLUMNS_ROWS; row++) { + for (int col = 0; col < COLUMNS_ROWS; col++) { + List localnodes = new ArrayList<>(); + data.put(new Cell(row, col), localnodes); + } + } + } + + public Iterable getContent(int row, int col) { + return data.get(new Cell(row, col)); + } + + public int countColumns() { + return COLUMNS_ROWS; + } + + public int countRows() { + return COLUMNS_ROWS; + } + + public void add(Node node) { + float x = node.x(); + float y = node.y(); + float radius = (float) (node.size() * ratio + margin); + + // Get the rectangle occupied by the node + double nxmin = x - (radius * ratio + margin); + double nxmax = x + (radius * ratio + margin); + double nymin = y - (radius * ratio + margin); + double nymax = y + (radius * ratio + margin); + + // Get the rectangle as boxes + int minXbox = (int) Math.floor((COLUMNS_ROWS - 1) * (nxmin - xmin) / (xmax - xmin)); + int maxXbox = (int) Math.floor((COLUMNS_ROWS - 1) * (nxmax - xmin) / (xmax - xmin)); + int minYbox = (int) Math.floor((COLUMNS_ROWS - 1) * (nymin - ymin) / (ymax - ymin)); + int maxYbox = (int) Math.floor((COLUMNS_ROWS - 1) * (nymax - ymin) / (ymax - ymin)); + for (int col = minXbox; col <= maxXbox; col++) { + for (int row = minYbox; row <= maxYbox; row++) { + try { + data.get(new Cell(row, col)).add(node); + } catch (Exception e) { + //Exceptions.printStackTrace(e); + if (nxmin < xmin || nxmax > xmax) { + } + if (nymin < ymin || nymax > ymax) { + } + } + } + } + } + } +} diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/noverlap/NoverlapLayoutBuilder.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/noverlap/NoverlapLayoutBuilder.java new file mode 100755 index 0000000000..666314df74 --- /dev/null +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/noverlap/NoverlapLayoutBuilder.java @@ -0,0 +1,103 @@ +/* + Copyright 2008-2011 Gephi + Authors : Mathieu Jacomy + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.layout.plugin.noverlap; + +import javax.swing.Icon; +import javax.swing.JPanel; +import org.gephi.layout.spi.Layout; +import org.gephi.layout.spi.LayoutBuilder; +import org.gephi.layout.spi.LayoutUI; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +/** + * @author Mathieu Jacomy + */ +@ServiceProvider(service = LayoutBuilder.class) +public class NoverlapLayoutBuilder implements LayoutBuilder { + + private final NoverlapLayoutUI ui = new NoverlapLayoutUI(); + + @Override + public String getName() { + return NbBundle.getMessage(NoverlapLayoutBuilder.class, "name"); + } + + @Override + public LayoutUI getUI() { + return ui; + } + + @Override + public Layout buildLayout() { + return new NoverlapLayout(this); + } + + private static class NoverlapLayoutUI implements LayoutUI { + + @Override + public String getDescription() { + return NbBundle.getMessage(NoverlapLayoutBuilder.class, "description"); + } + + @Override + public Icon getIcon() { + return null; + } + + @Override + public JPanel getSimplePanel(Layout layout) { + return null; + } + + @Override + public int getQualityRank() { + return -1; + } + + @Override + public int getSpeedRank() { + return -1; + } + } +} diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/noverlap/NoverlapLayoutData.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/noverlap/NoverlapLayoutData.java new file mode 100755 index 0000000000..78a90c8151 --- /dev/null +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/noverlap/NoverlapLayoutData.java @@ -0,0 +1,52 @@ +/* + Copyright 2008-2011 Gephi + Authors : Mathieu Jacomy + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.layout.plugin.noverlap; + +import org.gephi.layout.plugin.ForceVectorNodeLayoutData; + +/** + * @author Mathieu Jacomy + */ +public class NoverlapLayoutData extends ForceVectorNodeLayoutData { + +} diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/openord/Combine.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/openord/Combine.java new file mode 100644 index 0000000000..73e48a5688 --- /dev/null +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/openord/Combine.java @@ -0,0 +1,184 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.layout.plugin.openord; + +import java.text.DecimalFormat; +import java.text.NumberFormat; +import org.gephi.graph.api.Graph; +import org.openide.util.Exceptions; + +/** + * @author Mathieu Bastian + */ +public class Combine implements Runnable { + + private final OpenOrdLayout layout; + private final Object lock = new Object(); + private final Control control; + + public Combine(OpenOrdLayout layout) { + this.layout = layout; + this.control = layout.getControl(); + } + + @Override + public void run() { + //System.out.println("Combine results"); + + Worker[] workers = layout.getWorkers(); + + //Gather positions + Node[] positions = null; + for (Worker w : workers) { + if (positions == null) { + positions = w.getPositions(); + } else { + Node[] workerPositions = w.getPositions(); + for (int i = w.getId(); i < positions.length; i += workers.length) { + positions[i] = workerPositions[i]; + } + } + } + + //Unfix positions if necessary + if (!control.isRealFixed()) { + for (Node n : positions) { + n.fixed = false; + } + } + + //Combine density + for (Worker w : workers) { + DensityGrid densityGrid = w.getDensityGrid(); + boolean fineDensity = w.isFineDensity(); + boolean firstAdd = w.isFirstAdd(); + boolean fineFirstAdd = w.isFineFirstAdd(); + Node[] wNodes = w.getPositions(); + for (Worker z : workers) { + if (w != z) { + Node[] zNodes = w.getPositions(); + for (int i = z.getId(); i < wNodes.length; i += workers.length) { + densityGrid.substract(wNodes[i], firstAdd, fineFirstAdd, fineDensity); + densityGrid.add(zNodes[i], fineDensity); + } + } + } + } + + //Redistribute positions to workers + if (workers.length > 1) { + for (Worker w : workers) { + Node[] positionsCopy = new Node[positions.length]; + for (int i = 0; i < positions.length; i++) { + positionsCopy[i] = positions[i].clone(); + } + w.setPositions(positionsCopy); + } + } + + float totEnergy = getTotEnergy(); + boolean done = !control.udpateStage(totEnergy); + + //Params + for (Worker w : layout.getWorkers()) { + control.initWorker(w); + } + + //Write positions to nodes, normalizing to fill layoutSize + float maxAbsCoord = 0; + for (Node node : positions) { + maxAbsCoord = Math.max(maxAbsCoord, Math.abs(node.x)); + maxAbsCoord = Math.max(maxAbsCoord, Math.abs(node.y)); + } + float outputScale = maxAbsCoord > 0 ? (layout.getLayoutSize() / 2f) / maxAbsCoord : 1f; + Graph graph = layout.getGraph(); + for (org.gephi.graph.api.Node n : graph.getNodes()) { + if (n.getLayoutData() != null && n.getLayoutData() instanceof OpenOrdLayoutData) { + OpenOrdLayoutData layoutData = n.getLayoutData(); + Node node = positions[layoutData.nodeId]; + n.setX(node.x * outputScale); + n.setY(node.y * outputScale); + } + } + + //Finish + if (!layout.canAlgo() || done) { + for (Worker w : layout.getWorkers()) { + w.setDone(true); + } + layout.setRunning(false); + } + + //Synchronize with layout goAlgo() + synchronized (lock) { + lock.notify(); + } + } + + private void printPositions(Node[] nodes) { + NumberFormat formatter = DecimalFormat.getInstance(); + formatter.setMaximumFractionDigits(2); + for (Node node : nodes) { + String xStr = formatter.format(node.x); + String yStr = formatter.format(node.y); + } + } + + public float getTotEnergy() { + float totEnergy = 0; + for (Worker w : layout.getWorkers()) { + totEnergy += w.getTotEnergy(); + } + return totEnergy; + } + + public void waitForIteration() { + try { + synchronized (lock) { + lock.wait(); + } + } catch (InterruptedException ex) { + Exceptions.printStackTrace(ex); + } + } +} diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/openord/Control.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/openord/Control.java new file mode 100644 index 0000000000..1ae20a30eb --- /dev/null +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/openord/Control.java @@ -0,0 +1,329 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.layout.plugin.openord; + +import java.util.logging.Logger; +import org.gephi.utils.progress.Progress; +import org.gephi.utils.progress.ProgressTicket; + +/** + * @author Mathieu Bastian + */ +public class Control { + + private static final Logger LOGGER = Logger.getLogger("OpenOrd"); + + //Settings + private int STAGE; + private int iterations; + private float temperature; + private float attraction; + private float dampingMult; + private float minEdges; + private float cutEnd; + private float cutLengthEnd; + private float cutOffLength; + private float cutRate; + private boolean fineDensity; + //Vars + private float edgeCut; + private float realParm; + //Exec + private long startTime; + private long stopTime; + private int numNodes; + private float highestSimilarity; + private int realIterations; + private boolean realFixed; + private int totIterations; + private int totExpectedIterations; + private long totalTime; + private Params params; + private ProgressTicket progressTicket; + + public void initParams(Params params, int totalIterations) { + this.params = params; + STAGE = 0; + iterations = 0; + initStage(params.getInitial()); + minEdges = 20; + fineDensity = false; + + cutEnd = cutLengthEnd = 40000f * (1f - edgeCut); + if (cutLengthEnd <= 1f) { + cutLengthEnd = 1f; + } + + float cutLengthStart = 4f * cutLengthEnd; + + cutOffLength = cutLengthStart; + cutRate = (cutLengthStart - cutLengthEnd) / 400f; + + totExpectedIterations = totalIterations; + + int fullCompIters = totExpectedIterations + 3; + + if (realParm < 0) { + realIterations = (int) realParm; + } else if (realParm == 1) { + realIterations = fullCompIters + params.getSimmer().getIterationsTotal(totalIterations) + 100; + } else { + realIterations = (int) (realParm * fullCompIters); + } + LOGGER.info("Real iterations " + realIterations); + + realFixed = realIterations > 0; + + Progress.switchToDeterminate(progressTicket, totExpectedIterations); + } + + private void initStage(Params.Stage stage) { + temperature = stage.getTemperature(); + attraction = stage.getAttraction(); + dampingMult = stage.getDampingMult(); + } + + public void initWorker(Worker worker) { + worker.setAttraction(attraction); + worker.setCutOffLength(cutOffLength); + worker.setDampingMult(dampingMult); + worker.setMinEdges(minEdges); + worker.setSTAGE(STAGE); + worker.setTemperature(temperature); + worker.setFineDensity(fineDensity); + } + + public boolean udpateStage(float totEnergy) { + int MIN = 1; + + totIterations++; + if (totIterations >= realIterations) { + realFixed = false; + } + + Progress.progress(progressTicket, totIterations); + //System.out.println("Progress "+progress+"%"); + + if (STAGE == 0) { + + if (iterations == 0) { + startTime = System.currentTimeMillis() / 1000; + LOGGER.info("Entering liquid stage..."); + } + + if (iterations < params.getLiquid().getIterationsTotal(totExpectedIterations)) { + initStage(params.getLiquid()); + iterations++; + } else { + stopTime = System.currentTimeMillis() / 1000; + long timeElapsed = (stopTime - startTime); + totalTime += timeElapsed; + initStage(params.getExpansion()); + iterations = 0; + + LOGGER.info(String.format( + "Liquid stage completed in %d seconds, total energy = %f", + timeElapsed, totEnergy)); + + STAGE = 1; + startTime = System.currentTimeMillis() / 1000; + + LOGGER.info("Entering expansion stage..."); + } + } + + if (STAGE == 1) { + + if (iterations < params.getExpansion().getIterationsTotal(totExpectedIterations)) { + // Play with vars + if (attraction > 1) { + attraction -= .05; + } + if (minEdges > 12) { + minEdges -= .05; + } + cutOffLength -= cutRate; + if (dampingMult > .1) { + dampingMult -= .005; + } + iterations++; + + } else { + + stopTime = System.currentTimeMillis() / 1000; + long timeElapsed = (stopTime - startTime); + totalTime += timeElapsed; + + LOGGER.info(String.format( + "Expansion stage completed in %d seconds, total energy = %f", + timeElapsed, totEnergy)); + + STAGE = 2; + minEdges = 12; + initStage(params.getCooldown()); + iterations = 0; + startTime = System.currentTimeMillis() / 1000; + + LOGGER.info("Entering cool-down stage..."); + } + } else if (STAGE == 2) { + + if (iterations < params.getCooldown().getIterationsTotal(totExpectedIterations)) { + + // Reduce temperature + if (temperature > 50) { + temperature -= 10; + } + + // Reduce cut length + if (cutOffLength > cutLengthEnd) { + cutLengthEnd -= cutRate * 2; + } + if (minEdges > MIN) { + minEdges -= .2; + } + //min_edges = 99; + iterations++; + + } else { + + stopTime = System.currentTimeMillis() / 1000; + long timeElapsed = (stopTime - startTime); + totalTime += timeElapsed; + + cutOffLength = cutLengthEnd; + minEdges = MIN; + //min_edges = 99; // In other words: no more cutting + + LOGGER.info(String.format( + "Cool-down stage completed in %d seconds, total energy = %f", + timeElapsed, totEnergy)); + + STAGE = 3; + iterations = 0; + initStage(params.getCrunch()); + startTime = System.currentTimeMillis() / 1000; + + LOGGER.info("Entering crunch stage..."); + } + } else if (STAGE == 3) { + + if (iterations < params.getCrunch().getIterationsTotal(totExpectedIterations)) { + iterations++; + } else { + stopTime = System.currentTimeMillis() / 1000; + long timeElapsed = (stopTime - startTime); + totalTime += timeElapsed; + + iterations = 0; + initStage(params.getSimmer()); + minEdges = 99; + fineDensity = true; + + LOGGER.info(String.format( + "Crunch stage completed in %d seconds, total energy = %f", + timeElapsed, totEnergy)); + + STAGE = 5; + startTime = System.currentTimeMillis() / 1000; + + LOGGER.info("Entering simmer stage..."); + } + } else if (STAGE == 5) { + + if (iterations < params.getSimmer().getIterationsTotal(totExpectedIterations)) { + if (temperature > 50) { + temperature -= 2; + } + iterations++; + + } else { + stopTime = System.currentTimeMillis() / 1000; + long timeElapsed = (stopTime - startTime); + totalTime += timeElapsed; + + LOGGER.info(String.format( + "Simmer stage completed in %d seconds, total energy = %f", + timeElapsed, totEnergy)); + + STAGE = 6; + + LOGGER.info(String.format( + "Layout completed in %d seconds with %d iterations", + totalTime, totIterations)); + } + } else { + return STAGE != 6; + } + + return true; + } + + public boolean isRealFixed() { + return realFixed; + } + + public float getHighestSimilarity() { + return highestSimilarity; + } + + public void setHighestSimilarity(float highestSimilarity) { + this.highestSimilarity = highestSimilarity; + } + + public void setNumNodes(int numNodes) { + this.numNodes = numNodes; + } + + public void setEdgeCut(float edgeCut) { + this.edgeCut = edgeCut; + } + + public void setRealParm(float realParm) { + this.realParm = realParm; + } + + public void setProgressTicket(ProgressTicket progressTicket) { + this.progressTicket = progressTicket; + } +} diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/openord/DensityGrid.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/openord/DensityGrid.java new file mode 100644 index 0000000000..1e5f6ba502 --- /dev/null +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/openord/DensityGrid.java @@ -0,0 +1,244 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.layout.plugin.openord; + +import java.util.ArrayDeque; + +/** + * @author Mathieu Bastian + */ +public class DensityGrid implements Cloneable { + + private static final int GRID_SIZE = 1000; // size of Density grid + private static final float VIEW_SIZE = 4000; // actual physical size of layout plane + private static final int RADIUS = 10; // radius for density fall-off: + private static final int HALF_VIEW = 2000; + private static final float VIEW_TO_GRID = 0.25f; + private float[][] density; + private float[][] fallOff; + private ArrayDeque[][] bins; + + /** + * Returns the usable coordinate range for layout, excluding boundary padding. + * Used to scale fixed nodes so they fit within the active area of the grid. + */ + public static float getUsableSize() { + return (VIEW_SIZE * 0.8f) - (RADIUS / VIEW_TO_GRID) * 2f; + } + + /** + * Clamps a layout coordinate to the valid range that maps within the density grid bounds. + */ + public static float clampToGrid(float coord) { + float min = RADIUS / VIEW_TO_GRID - HALF_VIEW; + float max = (GRID_SIZE - 1) / VIEW_TO_GRID - HALF_VIEW; + return Math.max(min, Math.min(max, coord)); + } + + public void init() { + density = new float[GRID_SIZE][GRID_SIZE]; + fallOff = new float[RADIUS * 2 + 1][RADIUS * 2 + 1]; + bins = new ArrayDeque[GRID_SIZE][GRID_SIZE]; + + for (int i = -RADIUS; i <= RADIUS; i++) { + for (int j = -RADIUS; j <= RADIUS; j++) { + fallOff[i + RADIUS][j + RADIUS] = ((RADIUS - Math.abs((float) i)) / RADIUS) + * ((RADIUS - Math.abs((float) j)) / RADIUS); + } + } + + /*for (int i = 0; i < GRID_SIZE; i++) { + for (int j = 0; j < GRID_SIZE; j++) { + bins[i][j] = new ArrayDeque(); + } + }*/ + } + + public float getDensity(float nX, float nY, boolean fineDensity) { + int xGrid, yGrid; + float xDist, yDist, distance, density = 0; + int boundary = 10; // boundary around plane + + xGrid = (int) ((nX + HALF_VIEW + .5) * VIEW_TO_GRID); + yGrid = (int) ((nY + HALF_VIEW + .5) * VIEW_TO_GRID); + + // Check for edges of density grid (10000 is arbitrary high density) + if (xGrid > GRID_SIZE - boundary || xGrid < boundary) { + return 10000; + } + if (yGrid > GRID_SIZE - boundary || yGrid < boundary) { + return 10000; + } + + if (fineDensity) { + for (int i = yGrid - 1; i <= yGrid + 1; i++) { + for (int j = xGrid - 1; j <= xGrid + 1; j++) { + ArrayDeque deque = bins[i][j]; + if (deque != null) { + for (Node bi : deque) { + xDist = nX - bi.x; + yDist = nY - bi.y; + distance = xDist * xDist + yDist * yDist; + density += 1e-4 / (distance + 1e-50); + } + } + } + } + } else { + density = this.density[yGrid][xGrid]; + density *= density; + } + return density; + } + + public void add(Node n, boolean fineDensity) { + if (fineDensity) { + fineAdd(n); + } else { + add(n); + } + } + + public void substract(Node n, boolean firstAdd, boolean fineFirstAdd, boolean fineDensity) { + if (fineDensity && !fineFirstAdd) { + fineSubstract(n); + } else if (!firstAdd) { + substract(n); + } + } + + private void substract(Node n) { + int xGrid, yGrid, diam; + + xGrid = (int) ((n.subX + HALF_VIEW + 0.5f) * VIEW_TO_GRID); + yGrid = (int) ((n.subY + HALF_VIEW + 0.5f) * VIEW_TO_GRID); + xGrid -= RADIUS; + yGrid -= RADIUS; + diam = 2 * RADIUS; + + for (int i = 0; i <= diam; i++) { + int oldXGrid = xGrid; + for (int j = 0; j <= diam; j++) { + density[yGrid][xGrid] -= fallOff[i][j]; + xGrid++; + } + yGrid++; + xGrid = oldXGrid; + } + } + + private void add(Node n) { + int xGrid, yGrid, diam; + + xGrid = (int) ((n.x + HALF_VIEW + .5) * VIEW_TO_GRID); + yGrid = (int) ((n.y + HALF_VIEW + .5) * VIEW_TO_GRID); + + n.subX = n.x; + n.subY = n.y; + + xGrid -= RADIUS; + yGrid -= RADIUS; + diam = 2 * RADIUS; + + if ((xGrid + RADIUS >= GRID_SIZE) || (xGrid < 0) + || (yGrid + RADIUS >= GRID_SIZE) || (yGrid < 0)) { + return; + } + + for (int i = 0; i <= diam; i++) { + int oldXGrid = xGrid; + for (int j = 0; j <= diam; j++) { + density[yGrid][xGrid] += fallOff[i][j]; + xGrid++; + } + yGrid++; + xGrid = oldXGrid; + } + } + + private void fineSubstract(Node n) { + int xGrid, yGrid; + + xGrid = (int) ((n.subX + HALF_VIEW + .5) * VIEW_TO_GRID); + yGrid = (int) ((n.subY + HALF_VIEW + .5) * VIEW_TO_GRID); + ArrayDeque deque = bins[yGrid][xGrid]; + if (deque != null) { + deque.pollFirst(); + } + } + + private void fineAdd(Node n) { + int xGrid, yGrid; + + xGrid = (int) ((n.x + HALF_VIEW + .5) * VIEW_TO_GRID); + yGrid = (int) ((n.y + HALF_VIEW + .5) * VIEW_TO_GRID); + + if (xGrid < 0 || xGrid >= GRID_SIZE || yGrid < 0 || yGrid >= GRID_SIZE) { + return; + } + + n.subX = n.x; + n.subY = n.y; + ArrayDeque deque = bins[yGrid][xGrid]; + if (deque == null) { + deque = new ArrayDeque<>(); + bins[yGrid][xGrid] = deque; + } + deque.addLast(n); + } + + /*@Override + protected DensityGrid clone() { + DensityGrid densityGrid = new DensityGrid(); + densityGrid.fallOff = this.fallOff; + densityGrid.density = new float[GRID_SIZE][GRID_SIZE]; + densityGrid.bins = new ArrayDeque[GRID_SIZE][GRID_SIZE]; + for (int i = 0; i < GRID_SIZE; i++) { + System.arraycopy(this.density[i], 0, densityGrid.density[i], 0, GRID_SIZE); + for (int j = 0; j < GRID_SIZE; j++) { + densityGrid.bins[i][j] = bins[i][j].clone(); + } + } + return densityGrid; + }*/ +} diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/openord/Node.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/openord/Node.java new file mode 100644 index 0000000000..0e8cc80cc9 --- /dev/null +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/openord/Node.java @@ -0,0 +1,76 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.layout.plugin.openord; + +/** + * @author Mathieu Bastian + */ +public class Node implements Cloneable { + + final int id; + boolean fixed; + float x; + float y; + float subX; + float subY; + float energy; + + public Node(int id) { + this.id = id; + fixed = false; + x = y = 0; + } + + @Override + protected Node clone() { + Node clone = new Node(id); + clone.fixed = fixed; + clone.energy = energy; + clone.x = x; + clone.y = y; + clone.subX = subX; + clone.subY = subY; + clone.energy = energy; + return clone; + } +} diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/openord/OpenOrdLayout.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/openord/OpenOrdLayout.java new file mode 100644 index 0000000000..618c65340c --- /dev/null +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/openord/OpenOrdLayout.java @@ -0,0 +1,506 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.layout.plugin.openord; + +import gnu.trove.iterator.TIntFloatIterator; +import gnu.trove.map.hash.TIntFloatHashMap; +import gnu.trove.map.hash.TIntIntHashMap; +import java.util.ArrayList; +import java.util.List; +import java.util.Random; +import java.util.concurrent.CyclicBarrier; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Interval; +import org.gephi.layout.spi.Layout; +import org.gephi.layout.spi.LayoutBuilder; +import org.gephi.layout.spi.LayoutProperty; +import org.gephi.utils.longtask.spi.LongTask; +import org.gephi.utils.progress.ProgressTicket; +import org.openide.util.Exceptions; +import org.openide.util.NbBundle; + +/** + * @author Mathieu Bastian + */ +public class OpenOrdLayout implements Layout, LongTask { + + //Architecture + private final LayoutBuilder builder; + private GraphModel graphModel; + private boolean running = true; + private ProgressTicket progressTicket; + //Settings + private Params param = Params.DEFAULT; + private float edgeCut; + private int numThreads; + private long randSeed; + private int numIterations; + private float realTime; + private int layoutSize; + //Layout + private Worker[] workers; + private Combine combine; + private Control control; + private CyclicBarrier barrier; + private Graph graph; + private boolean firstIteration = true; + + public OpenOrdLayout(LayoutBuilder builder) { + this.builder = builder; + } + + @Override + public void resetPropertiesValues() { + edgeCut = 0.8f; + numIterations = 750; + numThreads = Math.max(1, Runtime.getRuntime().availableProcessors() - 1); + Random r = new Random(); + randSeed = r.nextLong(); + running = true; + realTime = 0.2f; + layoutSize = 20000; + param = Params.DEFAULT; + } + + @Override + public void initAlgo() { + //Verify param + if (param.getIterationsSum() != 1f) { + param = Params.DEFAULT; + //throw new RuntimeException("The sum of the time for each stage must be equal to 1"); + } + + //Get graph + graph = graphModel.getUndirectedGraphVisible(); + graph.readLock(); + boolean isDynamicWeight = graphModel.getEdgeTable().getColumn("weight").isDynamic(); + Interval interval = graph.getView().getTimeInterval(); + + try { + int numNodes = graph.getNodeCount(); + + //Prepare data structure - nodes and neighbors map + Node[] nodes = new Node[numNodes]; + TIntFloatHashMap[] neighbors = new TIntFloatHashMap[numNodes]; + + //Load nodes and edges + TIntIntHashMap idMap = new TIntIntHashMap(numNodes, 1f); + org.gephi.graph.api.Node[] graphNodes = graph.getNodes().toArray(); + for (int i = 0; i < numNodes; i++) { + org.gephi.graph.api.Node n = graphNodes[i]; + nodes[i] = new Node(i); + nodes[i].x = n.x(); + nodes[i].y = n.y(); + nodes[i].fixed = n.isFixed(); + OpenOrdLayoutData layoutData = new OpenOrdLayoutData(i); + n.setLayoutData(layoutData); + idMap.put(n.getStoreId(), i); + } + float highestSimilarity = Float.NEGATIVE_INFINITY; + for (Edge e : graph.getEdges()) { + int source = idMap.get(e.getSource().getStoreId()); + int target = idMap.get(e.getTarget().getStoreId()); + if (source != target) { //No self-loop + float weight = (float) (isDynamicWeight ? e.getWeight(interval) : e.getWeight()); + if (neighbors[source] == null) { + neighbors[source] = new TIntFloatHashMap(); + } + if (neighbors[target] == null) { + neighbors[target] = new TIntFloatHashMap(); + } + neighbors[source].put(target, weight); + neighbors[target].put(source, weight); + highestSimilarity = Math.max(highestSimilarity, weight); + } + } + + //Reset position + boolean someFixed = false; + for (Node n : nodes) { + if (!n.fixed) { + n.x = 0; + n.y = 0; + } else { + someFixed = true; + } + } + + //Recenter fixed nodes and rescale to fit into grid + if (someFixed) { + float minX = Float.POSITIVE_INFINITY; + float maxX = Float.NEGATIVE_INFINITY; + float minY = Float.POSITIVE_INFINITY; + float maxY = Float.NEGATIVE_INFINITY; + for (Node n : nodes) { + if (n.fixed) { + minX = Math.min(minX, n.x); + maxX = Math.max(maxX, n.x); + minY = Math.min(minY, n.y); + maxY = Math.max(maxY, n.y); + } + } + float shiftX = minX + (maxX - minX) / 2f; + float shiftY = minY + (maxY - minY) / 2f; + float ratio = + Math.min(DensityGrid.getUsableSize() / (maxX - minX), DensityGrid.getUsableSize() / (maxY - minY)); + ratio = Math.min(1f, ratio); + for (Node n : nodes) { + if (n.fixed) { + n.x = (n.x - shiftX) * ratio; + n.y = (n.y - shiftY) * ratio; + } + } + } + + //Init control and workers + control = new Control(); + combine = new Combine(this); + barrier = new CyclicBarrier(numThreads, combine); + control.setEdgeCut(edgeCut); + control.setRealParm(realTime); + control.setProgressTicket(progressTicket); + control.initParams(param, numIterations); + control.setNumNodes(numNodes); + control.setHighestSimilarity(highestSimilarity); + + workers = new Worker[numThreads]; + for (int i = 0; i < numThreads; ++i) { + workers[i] = new Worker(i, numThreads, barrier); + workers[i].setRandom(new Random(randSeed)); + control.initWorker(workers[i]); + } + + //Load workers with data + //Deep copy of all nodes positions + //Deep copy of a partition of all neighbors for each workers + for (Worker w : workers) { + Node[] nodesCopy = new Node[nodes.length]; + for (int i = 0; i < nodes.length; i++) { + nodesCopy[i] = nodes[i].clone(); + } + TIntFloatHashMap[] neighborsCopy = new TIntFloatHashMap[numNodes]; + for (int i = 0; i < neighbors.length; i++) { + if (i % numThreads == w.getId() && neighbors[i] != null) { + int neighborsCount = neighbors[i].size(); + neighborsCopy[i] = new TIntFloatHashMap(neighborsCount, 1f); + for (TIntFloatIterator itr = neighbors[i].iterator(); itr.hasNext(); ) { + itr.advance(); + float weight = normalizeWeight(itr.value(), highestSimilarity); + neighborsCopy[i].put(itr.key(), weight); + } + } + } + w.setPositions(nodesCopy); + w.setNeighbors(neighborsCopy); + } + + //Add real nodes + for (Node n : nodes) { + if (n.fixed) { + for (Worker w : workers) { + w.getDensityGrid().add(n, w.isFineDensity()); + } + } + } + + running = true; + firstIteration = true; + } finally { + graph.readUnlockAll(); + } + } + + @Override + public void goAlgo() { + if (firstIteration) { + for (int i = 0; i < numThreads; ++i) { + Thread t = new Thread(workers[i]); + t.setDaemon(true); + t.start(); + } + firstIteration = false; + } + + combine.waitForIteration(); + } + + @Override + public void endAlgo() { + running = false; + combine = null; + } + + private float normalizeWeight(float weight, float highestSimilarity) { + weight /= highestSimilarity; + weight = weight * Math.abs(weight); + return weight; + } + + @Override + public boolean canAlgo() { + return running; + } + + @Override + public void setGraphModel(GraphModel graphModel) { + this.graphModel = graphModel; + } + + @Override + public LayoutProperty[] getProperties() { + List properties = new ArrayList<>(); + final String OPENORD = "OpenOrd"; + final String STAGE = "Stages"; + + try { + properties.add(LayoutProperty.createProperty( + this, Float.class, + NbBundle.getMessage(OpenOrdLayout.class, "OpenOrd.properties.edgecut.name"), + OPENORD, + NbBundle.getMessage(OpenOrdLayout.class, "OpenOrd.properties.edgecut.description"), + "getEdgeCut", "setEdgeCut")); + properties.add(LayoutProperty.createProperty( + this, Integer.class, + NbBundle.getMessage(OpenOrdLayout.class, "OpenOrd.properties.numthreads.name"), + OPENORD, + NbBundle.getMessage(OpenOrdLayout.class, "OpenOrd.properties.numthreads.description"), + "getNumThreads", "setNumThreads")); + properties.add(LayoutProperty.createProperty( + this, Integer.class, + NbBundle.getMessage(OpenOrdLayout.class, "OpenOrd.properties.numiterations.name"), + OPENORD, + NbBundle.getMessage(OpenOrdLayout.class, "OpenOrd.properties.numiterations.description"), + "getNumIterations", "setNumIterations")); + properties.add(LayoutProperty.createProperty( + this, Float.class, + NbBundle.getMessage(OpenOrdLayout.class, "OpenOrd.properties.realtime.name"), + OPENORD, + NbBundle.getMessage(OpenOrdLayout.class, "OpenOrd.properties.realtime.description"), + "getRealTime", "setRealTime")); + properties.add(LayoutProperty.createProperty( + this, Long.class, + NbBundle.getMessage(OpenOrdLayout.class, "OpenOrd.properties.seed.name"), + OPENORD, + NbBundle.getMessage(OpenOrdLayout.class, "OpenOrd.properties.seed.description"), + "getRandSeed", "setRandSeed")); + properties.add(LayoutProperty.createProperty( + this, Integer.class, + NbBundle.getMessage(OpenOrdLayout.class, "OpenOrd.properties.layoutsize.name"), + OPENORD, + NbBundle.getMessage(OpenOrdLayout.class, "OpenOrd.properties.layoutsize.description"), + "getLayoutSize", "setLayoutSize")); + properties.add(LayoutProperty.createProperty( + this, Integer.class, + NbBundle.getMessage(OpenOrdLayout.class, "OpenOrd.properties.stage.liquid.name"), + STAGE, + NbBundle.getMessage(OpenOrdLayout.class, "OpenOrd.properties.stage.liquid.description"), + "getLiquidStage", "setLiquidStage")); + properties.add(LayoutProperty.createProperty( + this, Integer.class, + NbBundle.getMessage(OpenOrdLayout.class, "OpenOrd.properties.stage.expansion.name"), + STAGE, + NbBundle.getMessage(OpenOrdLayout.class, "OpenOrd.properties.stage.expansion.description"), + "getExpansionStage", "setExpansionStage")); + properties.add(LayoutProperty.createProperty( + this, Integer.class, + NbBundle.getMessage(OpenOrdLayout.class, "OpenOrd.properties.stage.cooldown.name"), + STAGE, + NbBundle.getMessage(OpenOrdLayout.class, "OpenOrd.properties.stage.cooldown.description"), + "getCooldownStage", "setCooldownStage")); + properties.add(LayoutProperty.createProperty( + this, Integer.class, + NbBundle.getMessage(OpenOrdLayout.class, "OpenOrd.properties.stage.crunch.name"), + STAGE, + NbBundle.getMessage(OpenOrdLayout.class, "OpenOrd.properties.stage.crunch.description"), + "getCrunchStage", "setCrunchStage")); + properties.add(LayoutProperty.createProperty( + this, Integer.class, + NbBundle.getMessage(OpenOrdLayout.class, "OpenOrd.properties.stage.simmer.name"), + STAGE, + NbBundle.getMessage(OpenOrdLayout.class, "OpenOrd.properties.stage.simmer.description"), + "getSimmerStage", "setSimmerStage")); + + } catch (Exception e) { + Exceptions.printStackTrace(e); + } + + return properties.toArray(new LayoutProperty[0]); + } + + public Float getEdgeCut() { + return edgeCut; + } + + public void setEdgeCut(Float edgeCut) { + edgeCut = Math.min(1f, edgeCut); + edgeCut = Math.max(0, edgeCut); + this.edgeCut = edgeCut; + } + + public Integer getNumThreads() { + return numThreads; + } + + public void setNumThreads(Integer numThreads) { + numThreads = Math.max(1, numThreads); + this.numThreads = numThreads; + } + + public Long getRandSeed() { + return randSeed; + } + + public void setRandSeed(Long randSeed) { + this.randSeed = randSeed; + } + + public void setRunning(Boolean running) { + this.running = running; + } + + public Integer getNumIterations() { + return numIterations; + } + + public void setNumIterations(Integer numIterations) { + numIterations = Math.max(100, numIterations); + this.numIterations = numIterations; + } + + public Float getRealTime() { + return realTime; + } + + public void setRealTime(Float realTime) { + realTime = Math.min(1f, realTime); + realTime = Math.max(0, realTime); + this.realTime = realTime; + } + + public Integer getLayoutSize() { + return layoutSize; + } + + public void setLayoutSize(Integer layoutSize) { + this.layoutSize = Math.max(4000, layoutSize); + } + + public Integer getLiquidStage() { + return param.getLiquid().getIterationsPercentage(); + } + + public void setLiquidStage(Integer value) { + int v = Math.min(100, value); + v = Math.max(0, v); + param.getLiquid().setIterations(v / 100f); + } + + public Integer getExpansionStage() { + return param.getExpansion().getIterationsPercentage(); + } + + public void setExpansionStage(Integer value) { + int v = Math.min(100, value); + v = Math.max(0, v); + param.getExpansion().setIterations(v / 100f); + } + + public Integer getCooldownStage() { + return param.getCooldown().getIterationsPercentage(); + } + + public void setCooldownStage(Integer value) { + int v = Math.min(100, value); + v = Math.max(0, v); + param.getCooldown().setIterations(v / 100f); + } + + public Integer getCrunchStage() { + return param.getCrunch().getIterationsPercentage(); + } + + public void setCrunchStage(Integer value) { + int v = Math.min(100, value); + v = Math.max(0, v); + param.getCrunch().setIterations(v / 100f); + } + + public Integer getSimmerStage() { + return param.getSimmer().getIterationsPercentage(); + } + + public void setSimmerStage(Integer value) { + int v = Math.min(100, value); + v = Math.max(0, v); + param.getSimmer().setIterations(v / 100f); + } + + @Override + public LayoutBuilder getBuilder() { + return builder; + } + + public Worker[] getWorkers() { + return workers; + } + + public Graph getGraph() { + return graph; + } + + public Control getControl() { + return control; + } + + @Override + public boolean cancel() { + return true; + } + + @Override + public void setProgressTicket(ProgressTicket progressTicket) { + this.progressTicket = progressTicket; + } +} diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/openord/OpenOrdLayoutBuilder.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/openord/OpenOrdLayoutBuilder.java new file mode 100644 index 0000000000..5ed50c7b31 --- /dev/null +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/openord/OpenOrdLayoutBuilder.java @@ -0,0 +1,103 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.layout.plugin.openord; + +import javax.swing.Icon; +import javax.swing.JPanel; +import org.gephi.layout.spi.Layout; +import org.gephi.layout.spi.LayoutBuilder; +import org.gephi.layout.spi.LayoutUI; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +/** + * @author Mathieu Bastian + */ +@ServiceProvider(service = LayoutBuilder.class) +public class OpenOrdLayoutBuilder implements LayoutBuilder { + + private final OpenOrdLayoutUI ui = new OpenOrdLayoutUI(); + + @Override + public String getName() { + return NbBundle.getMessage(OpenOrdLayoutBuilder.class, "OpenOrd.name"); + } + + @Override + public LayoutUI getUI() { + return ui; + } + + @Override + public Layout buildLayout() { + return new OpenOrdLayout(this); + } + + private static class OpenOrdLayoutUI implements LayoutUI { + + @Override + public String getDescription() { + return NbBundle.getMessage(OpenOrdLayoutBuilder.class, "OpenOrd.description"); + } + + @Override + public Icon getIcon() { + return null; + } + + @Override + public JPanel getSimplePanel(Layout layout) { + return null; + } + + @Override + public int getQualityRank() { + return 3; + } + + @Override + public int getSpeedRank() { + return 5; + } + } +} diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/openord/OpenOrdLayoutData.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/openord/OpenOrdLayoutData.java new file mode 100644 index 0000000000..53bcaf8a99 --- /dev/null +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/openord/OpenOrdLayoutData.java @@ -0,0 +1,57 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.layout.plugin.openord; + +import org.gephi.graph.spi.LayoutData; + +/** + * @author Mathieu Bastian + */ +public class OpenOrdLayoutData implements LayoutData { + + public final int nodeId; + + public OpenOrdLayoutData(int nodeId) { + this.nodeId = nodeId; + } +} diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/openord/Params.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/openord/Params.java new file mode 100644 index 0000000000..62b8b54571 --- /dev/null +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/openord/Params.java @@ -0,0 +1,166 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.layout.plugin.openord; + +/** + * @author Mathieu Bastian + */ +public enum Params { + + DEFAULT(new Stage(0, 2000f, 10f, 1f), + new Stage(0.25f, 2000f, 2f, 1f), + new Stage(0.25f, 2000f, 10f, 1f), + new Stage(0.25f, 2000f, 1f, 0.1f), + new Stage(0.10f, 250f, 1f, 0.25f), + new Stage(0.15f, 250f, 0.5f, 0f)), + COARSEN(new Stage(0, 2000f, 10f, 1f), + new Stage(200, 2000f, 2f, 1f), + new Stage(200, 2000f, 10f, 1f), + new Stage(200, 2000f, 1f, 0.1f), + new Stage(50, 250f, 1f, 0.25f), + new Stage(100, 250f, 0.5f, 0f)), + COARSEST(new Stage(0, 2000f, 10f, 1f), + new Stage(200, 2000f, 2f, 1f), + new Stage(200, 2000f, 10f, 1f), + new Stage(200, 2000f, 1f, 0.1f), + new Stage(200, 250f, 1f, 0.25f), + new Stage(100, 250f, 0.5f, 0f)), + REFINE(new Stage(0, 50f, 0.5f, 0f), + new Stage(0, 2000f, 2f, 1f), + new Stage(50, 500f, 0.1f, 0.25f), + new Stage(50, 200f, 1f, 0.1f), + new Stage(50, 250f, 1f, 0.25f), + new Stage(0, 250f, 0.5f, 0f)), + FINAL(new Stage(0, 50f, 0.5f, 0f), + new Stage(0, 2000f, 2f, 1f), + new Stage(50, 50f, 0.1f, 0.25f), + new Stage(50, 200f, 1f, 0.1f), + new Stage(50, 250f, 1f, 0.25f), + new Stage(25, 250f, 0.5f, 0f)); + private final Stage initial; + private final Stage liquid; + private final Stage expansion; + private final Stage cooldown; + private final Stage crunch; + private final Stage simmer; + + Params(Stage initial, Stage liquid, Stage expansion, Stage cooldown, Stage crunch, Stage simmer) { + this.initial = initial; + this.liquid = liquid; + this.expansion = expansion; + this.cooldown = cooldown; + this.crunch = crunch; + this.simmer = simmer; + } + + public Stage getCooldown() { + return cooldown; + } + + public Stage getCrunch() { + return crunch; + } + + public Stage getExpansion() { + return expansion; + } + + public Stage getInitial() { + return initial; + } + + public Stage getLiquid() { + return liquid; + } + + public Stage getSimmer() { + return simmer; + } + + public float getIterationsSum() { + return liquid.iterations + expansion.iterations + cooldown.iterations + crunch.iterations + simmer.iterations; + } + + public static class Stage { + + private final float temperature; + private final float attraction; + private final float dampingMult; + private float iterations; + + Stage(float iterations, float temperature, float attraction, float dampingMult) { + this.iterations = iterations; + this.temperature = temperature; + this.attraction = attraction; + this.dampingMult = dampingMult; + } + + public float getAttraction() { + return attraction; + } + + public float getDampingMult() { + return dampingMult; + } + + public float getIterations() { + return iterations; + } + + public void setIterations(float iterations) { + this.iterations = iterations; + } + + public int getIterationsTotal(int totalIterations) { + return (int) (iterations * totalIterations); + } + + public int getIterationsPercentage() { + return (int) (iterations * 100f); + } + + public float getTemperature() { + return temperature; + } + } +} diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/openord/Worker.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/openord/Worker.java new file mode 100644 index 0000000000..0fc506b79d --- /dev/null +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/openord/Worker.java @@ -0,0 +1,355 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.layout.plugin.openord; + +import gnu.trove.iterator.TIntFloatIterator; +import gnu.trove.map.hash.TIntFloatHashMap; +import java.util.Random; +import java.util.concurrent.BrokenBarrierException; +import java.util.concurrent.CyclicBarrier; + +/** + * @author Mathieu Bastian + */ +public class Worker implements Runnable { + + //Thread + private final int id; + private final int numThreads; + private final CyclicBarrier barrier; + protected Random random; + private boolean done = false; + //Data + private Node[] positions; + private TIntFloatHashMap[] neighbors; + private DensityGrid densityGrid; + private boolean firstAdd = true; + private boolean fineFirstAdd = true; + //Settings + private float attraction; + private int STAGE; + private float temperature; + private float dampingMult; + private float minEdges; + private float cutEnd; + private float cutOffLength; + private boolean fineDensity; + + public Worker(int id, int numThreads, CyclicBarrier barrier) { + this.barrier = barrier; + this.id = id; + this.numThreads = numThreads; + this.densityGrid = new DensityGrid(); + this.densityGrid.init(); + } + + @Override + public void run() { + while (!isDone()) { + //System.out.println("Execute worker " + id); + + //Updates nodes + for (int i = id; i < positions.length; i += numThreads) { + updateNodePos(i); + } + + //Execute one more random if other threads manage one more node + if (positions.length % numThreads != 0 && id > positions.length % numThreads - 1) { + getNextRandom(); + getNextRandom(); + } + + firstAdd = false; + if (fineDensity) { + fineFirstAdd = false; + } + + try { + barrier.await(); + } catch (InterruptedException ex) { + return; + } catch (BrokenBarrierException ex) { + return; + } + } + } + + private void updateNodePos(int nodeIndex) { + Node n = positions[nodeIndex]; + if (n.fixed) { + getNextRandom(); + getNextRandom(); + return; + } + + float[] energies = new float[2]; + float[][] updatedPos = new float[2][2]; + float jumpLength = 0.01f * temperature; + densityGrid.substract(n, firstAdd, fineFirstAdd, fineDensity); + + energies[0] = getNodeEnergy(nodeIndex); + solveAnalytic(nodeIndex); + updatedPos[0][0] = n.x; + updatedPos[0][1] = n.y; + + updatedPos[1][0] = updatedPos[0][0] + (.5f - getNextRandom()) * jumpLength; + updatedPos[1][1] = updatedPos[0][1] + (.5f - getNextRandom()) * jumpLength; + + n.x = updatedPos[1][0]; + n.y = updatedPos[1][1]; + energies[1] = getNodeEnergy(nodeIndex); + + if (energies[0] < energies[1]) { + n.x = updatedPos[0][0]; + n.y = updatedPos[0][1]; + n.energy = energies[0]; + } else { + n.x = updatedPos[1][0]; + n.y = updatedPos[1][1]; + n.energy = energies[1]; + } + + n.x = DensityGrid.clampToGrid(n.x); + n.y = DensityGrid.clampToGrid(n.y); + densityGrid.add(n, fineDensity); + } + + private float getNodeEnergy(int nodeIndex) { + double attraction_factor = attraction * attraction + * attraction * attraction * 2e-2; + + float xDis, yDis; + float energyDistance; + float nodeEnergy = 0; + + Node n = positions[nodeIndex]; + + if (neighbors[nodeIndex] != null) { + for (TIntFloatIterator itr = neighbors[nodeIndex].iterator(); itr.hasNext(); ) { + itr.advance(); + float weight = itr.value(); + Node m = positions[itr.key()]; + + xDis = n.x - m.x; + yDis = n.y - m.y; + + energyDistance = xDis * xDis + yDis * yDis; + if (STAGE < 2) { + energyDistance *= energyDistance; + } + + if (STAGE == 0) { + energyDistance *= energyDistance; + } + + nodeEnergy += weight * attraction_factor * energyDistance; + } + } + + nodeEnergy += densityGrid.getDensity(n.x, n.y, fineDensity); + + return nodeEnergy; + } + + private void solveAnalytic(int nodeIndex) { + float totalWeight = 0; + float xDis, yDis, xCen = 0, yCen = 0; + float x = 0, y = 0; + float damping; + + TIntFloatHashMap map = neighbors[nodeIndex]; + if (map != null) { + Node n = positions[nodeIndex]; + + for (TIntFloatIterator itr = map.iterator(); itr.hasNext(); ) { + itr.advance(); + float weight = itr.value(); + Node m = positions[itr.key()]; + + totalWeight += weight; + x += weight * m.x; + y += weight * m.y; + } + + if (totalWeight > 0) { + xCen = x / totalWeight; + yCen = y / totalWeight; + damping = 1f - dampingMult; + float posX = damping * n.x + (1f - damping) * xCen; + float posY = damping * n.y + (1f - damping) * yCen; + n.x = posX; + n.y = posY; + } + + if (minEdges == 99) { + return; + } + if (cutEnd >= 39500) { + return; + } + + float maxLength = 0; + int maxIndex = -1; + int neighborsCount = map.size(); + if (neighborsCount >= minEdges) { + for (TIntFloatIterator itr = neighbors[nodeIndex].iterator(); itr.hasNext(); ) { + itr.advance(); + Node m = positions[itr.key()]; + + xDis = xCen - m.x; + yDis = yCen - m.y; + float dis = xDis * xDis + yDis * yDis; + dis *= Math.sqrt(neighborsCount); + if (dis > maxLength) { + maxLength = dis; + maxIndex = itr.key(); + } + } + } + + if (maxLength > cutOffLength && maxIndex != -1) { + map.remove(maxIndex); + } + } + } + + public float getTotEnergy() { + float myTotEnergy = 0; + for (int i = id; i < positions.length; i += numThreads) { + myTotEnergy += positions[i].energy; + } + return myTotEnergy; + } + + public float getNextRandom() { + float rand = 0; + for (int i = 0; i < numThreads; i++) { + if (i == id) { + rand = random.nextFloat(); + } else { + random.nextFloat(); //For other threads + } + } + return rand; + } + + public boolean isDone() { + return done; + } + + public void setDone(boolean done) { + this.done = done; + } + + public Node[] getPositions() { + return positions; + } + + public void setPositions(Node[] positions) { + this.positions = positions; + } + + public boolean isFineDensity() { + return fineDensity; + } + + public void setFineDensity(boolean fineDensity) { + this.fineDensity = fineDensity; + } + + public boolean isFineFirstAdd() { + return fineFirstAdd; + } + + public boolean isFirstAdd() { + return firstAdd; + } + + public DensityGrid getDensityGrid() { + return densityGrid; + } + + public void setDensityGrid(DensityGrid densityGrid) { + this.densityGrid = densityGrid; + } + + public TIntFloatHashMap[] getNeighbors() { + return neighbors; + } + + public void setNeighbors(TIntFloatHashMap[] neighbors) { + this.neighbors = neighbors; + } + + public void setSTAGE(int STAGE) { + this.STAGE = STAGE; + } + + public void setAttraction(float attraction) { + this.attraction = attraction; + } + + public void setCutOffLength(float cutOffLength) { + this.cutOffLength = cutOffLength; + } + + public void setDampingMult(float dampingMult) { + this.dampingMult = dampingMult; + } + + public void setMinEdges(float minEdges) { + this.minEdges = minEdges; + } + + public void setTemperature(float temperature) { + this.temperature = temperature; + } + + public void setRandom(Random random) { + this.random = random; + } + + public int getId() { + return id; + } +} diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/random/Random.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/random/Random.java index b6fc1e5d08..ef7680f4d1 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/random/Random.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/random/Random.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.random; import javax.swing.Icon; @@ -50,13 +51,12 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * - * @author Helder Suzuki + * @author Helder Suzuki */ @ServiceProvider(service = LayoutBuilder.class) public class Random implements LayoutBuilder { - private RandomLayoutUI ui = new RandomLayoutUI(); + private final RandomLayoutUI ui = new RandomLayoutUI(); @Override public String getName() { diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/random/RandomLayout.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/random/RandomLayout.java index c503fea81a..4291c26cda 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/random/RandomLayout.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/random/RandomLayout.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.random; import java.util.ArrayList; @@ -50,11 +51,11 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.layout.spi.Layout; import org.gephi.layout.spi.LayoutBuilder; import org.gephi.layout.spi.LayoutProperty; +import org.openide.util.Exceptions; import org.openide.util.NbBundle; /** - * - * @author Helder Suzuki + * @author Helder Suzuki */ public class RandomLayout extends AbstractLayout implements Layout { @@ -62,26 +63,34 @@ public class RandomLayout extends AbstractLayout implements Layout { private Graph graph; private boolean converged; private double size; + private long seed; public RandomLayout(LayoutBuilder layoutBuilder, double size) { super(layoutBuilder); this.size = size; - random = new Random(); } @Override public void initAlgo() { + random = new Random(seed); converged = false; } @Override public void goAlgo() { graph = graphModel.getGraphVisible(); - for (Node n : graph.getNodes()) { - n.setX((float) (-size / 2 + size * random.nextDouble())); - n.setY((float) (-size / 2 + size * random.nextDouble())); + graph.readLock(); + try { + for (Node n : graph.getNodes()) { + if (!n.isFixed()) { + n.setX((float) (-size / 2 + size * random.nextDouble())); + n.setY((float) (-size / 2 + size * random.nextDouble())); + } + } + converged = true; + } finally { + graph.readUnlockAll(); } - converged = true; } @Override @@ -96,30 +105,51 @@ public void endAlgo() { @Override public LayoutProperty[] getProperties() { - List properties = new ArrayList(); + List properties = new ArrayList<>(); try { properties.add(LayoutProperty.createProperty( - this, Double.class, - NbBundle.getMessage(getClass(), "Random.spaceSize.name"), - null, - "Random.spaceSize.name", - NbBundle.getMessage(getClass(), "Random.spaceSize.desc"), - "getSize", "setSize")); + this, Double.class, + NbBundle.getMessage(getClass(), "Random.spaceSize.name"), + null, + "Random.spaceSize.name", + NbBundle.getMessage(getClass(), "Random.spaceSize.desc"), + "getSize", "setSize")); } catch (Exception e) { - e.printStackTrace(); + Exceptions.printStackTrace(e); + } + try { + properties.add(LayoutProperty.createProperty( + this, Long.class, + NbBundle.getMessage(getClass(), "Random.seed.name"), + null, + "Random.seed.name", + NbBundle.getMessage(getClass(), "Random.seed.desc"), + "getSeed", "setSeed")); + } catch (Exception e) { + Exceptions.printStackTrace(e); } return properties.toArray(new LayoutProperty[0]); } @Override public void resetPropertiesValues() { + setSize(50.0); + setSeed(new Random().nextLong()); + } + + public Double getSize() { + return size; } public void setSize(Double size) { this.size = size; } - public Double getSize() { - return size; + public Long getSeed() { + return seed; + } + + public void setSeed(Long seed) { + this.seed = seed; } } diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/rotate/ClockwiseRotate.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/rotate/ClockwiseRotate.java deleted file mode 100644 index a7e12e5d7e..0000000000 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/rotate/ClockwiseRotate.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Helder Suzuki - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.layout.plugin.rotate; - -import javax.swing.Icon; -import javax.swing.JPanel; -import org.gephi.layout.spi.Layout; -import org.gephi.layout.spi.LayoutBuilder; -import org.gephi.layout.spi.LayoutUI; -import org.openide.util.NbBundle; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Helder Suzuki - */ -@ServiceProvider(service = LayoutBuilder.class) -public class ClockwiseRotate implements LayoutBuilder { - - private ClockwiseRotateLayoutUI ui = new ClockwiseRotateLayoutUI(); - - @Override - public Layout buildLayout() { - return new RotateLayout(this, 90); - } - - @Override - public String getName() { - return NbBundle.getMessage(ClockwiseRotate.class, "clockwise.name"); - } - - @Override - public LayoutUI getUI() { - return ui; - } - - private static class ClockwiseRotateLayoutUI implements LayoutUI { - - @Override - public String getDescription() { - return NbBundle.getMessage(ClockwiseRotate.class, "clockwise.description"); - } - - @Override - public Icon getIcon() { - return null; - } - - @Override - public JPanel getSimplePanel(Layout layout) { - return null; - } - - @Override - public int getQualityRank() { - return -1; - } - - @Override - public int getSpeedRank() { - return -1; - } - } -} diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/rotate/CounterClockwiseRotate.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/rotate/CounterClockwiseRotate.java deleted file mode 100644 index 2ab5463cc4..0000000000 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/rotate/CounterClockwiseRotate.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Helder Suzuki - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.layout.plugin.rotate; - -import javax.swing.Icon; -import javax.swing.JPanel; -import org.gephi.layout.spi.Layout; -import org.gephi.layout.spi.LayoutBuilder; -import org.gephi.layout.spi.LayoutUI; -import org.openide.util.NbBundle; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Helder Suzuki - */ -@ServiceProvider(service = LayoutBuilder.class) -public class CounterClockwiseRotate implements LayoutBuilder { - - private CounterClockwiseRotateLayoutUI ui = new CounterClockwiseRotateLayoutUI(); - - @Override - public Layout buildLayout() { - return new RotateLayout(this, 90); - } - - @Override - public String getName() { - return NbBundle.getMessage(CounterClockwiseRotate.class, "counterclockwise.name"); - } - - @Override - public LayoutUI getUI() { - return ui; - } - - private static class CounterClockwiseRotateLayoutUI implements LayoutUI { - - @Override - public String getDescription() { - return NbBundle.getMessage(CounterClockwiseRotate.class, "counterclockwise.description"); - } - - @Override - public Icon getIcon() { - return null; - } - - @Override - public JPanel getSimplePanel(Layout layout) { - return null; - } - - @Override - public int getQualityRank() { - return -1; - } - - @Override - public int getSpeedRank() { - return -1; - } - } -} diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/rotate/Rotate.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/rotate/Rotate.java new file mode 100644 index 0000000000..c57c981e0e --- /dev/null +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/rotate/Rotate.java @@ -0,0 +1,103 @@ +/* + Copyright 2008-2010 Gephi + Authors : Helder Suzuki + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.layout.plugin.rotate; + +import javax.swing.Icon; +import javax.swing.JPanel; +import org.gephi.layout.spi.Layout; +import org.gephi.layout.spi.LayoutBuilder; +import org.gephi.layout.spi.LayoutUI; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +/** + * @author Helder Suzuki + */ +@ServiceProvider(service = LayoutBuilder.class) +public class Rotate implements LayoutBuilder { + + private final RotateLayoutUI ui = new RotateLayoutUI(); + + @Override + public RotateLayout buildLayout() { + return new RotateLayout(this, 90); + } + + @Override + public String getName() { + return NbBundle.getMessage(Rotate.class, "rotate.name"); + } + + @Override + public LayoutUI getUI() { + return ui; + } + + private static class RotateLayoutUI implements LayoutUI { + + @Override + public String getDescription() { + return NbBundle.getMessage(Rotate.class, "rotate.description"); + } + + @Override + public Icon getIcon() { + return null; + } + + @Override + public JPanel getSimplePanel(Layout layout) { + return null; + } + + @Override + public int getQualityRank() { + return -1; + } + + @Override + public int getSpeedRank() { + return -1; + } + } +} diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/rotate/RotateLayout.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/rotate/RotateLayout.java index 3141d2fbe4..16391dec3a 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/rotate/RotateLayout.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/rotate/RotateLayout.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.rotate; import java.util.ArrayList; @@ -46,22 +47,21 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.graph.api.Graph; import org.gephi.graph.api.Node; import org.gephi.layout.plugin.AbstractLayout; -import org.gephi.layout.spi.Layout; import org.gephi.layout.spi.LayoutBuilder; import org.gephi.layout.spi.LayoutProperty; +import org.openide.util.Exceptions; import org.openide.util.NbBundle; /** * Sample layout that simply rotates the graph. * - * @author Helder Suzuki + * @author Helder Suzuki */ -public class RotateLayout extends AbstractLayout implements Layout { +public class RotateLayout extends AbstractLayout { - private double angle; - private Graph graph; + private float angle; - public RotateLayout(LayoutBuilder layoutBuilder, double angle) { + public RotateLayout(LayoutBuilder layoutBuilder, float angle) { super(layoutBuilder); this.angle = angle; } @@ -73,20 +73,25 @@ public void initAlgo() { @Override public void goAlgo() { - graph = graphModel.getGraphVisible(); - double sin = Math.sin(getAngle() * Math.PI / 180); - double cos = Math.cos(getAngle() * Math.PI / 180); - double px = 0f; - double py = 0f; - - for (Node n : graph.getNodes()) { - double dx = n.x() - px; - double dy = n.y() - py; - - n.setX((float) (px + dx * cos - dy * sin)); - n.setY((float) (py + dy * cos + dx * sin)); + Graph graph = graphModel.getGraphVisible(); + graph.readLock(); + try { + float sin = (float) Math.sin(-getAngle() * Math.PI / 180f); + float cos = (float) Math.cos(-getAngle() * Math.PI / 180f); + float px = 0f; + float py = 0f; + + for (Node n : graph.getNodes()) { + if (!n.isFixed()) { + float dx = n.x() - px; + float dy = n.y() - py; + n.setPosition(px + dx * cos - dy * sin, py + dy * cos + dx * sin); + } + } + setConverged(true); + } finally { + graph.readUnlockAll(); } - setConverged(true); } @Override @@ -95,21 +100,22 @@ public void endAlgo() { @Override public void resetPropertiesValues() { + setAngle(90.0f); } @Override public LayoutProperty[] getProperties() { - List properties = new ArrayList(); + List properties = new ArrayList<>(); try { properties.add(LayoutProperty.createProperty( - this, Double.class, - NbBundle.getMessage(getClass(), "clockwise.angle.name"), - null, - "clockwise.angle.name", - NbBundle.getMessage(getClass(), "clockwise.angle.desc"), - "getAngle", "setAngle")); + this, Float.class, + NbBundle.getMessage(getClass(), "rotate.angle.name"), + null, + "clockwise.angle.name", + NbBundle.getMessage(getClass(), "rotate.angle.desc"), + "getAngle", "setAngle")); } catch (Exception e) { - e.printStackTrace(); + Exceptions.printStackTrace(e); } return properties.toArray(new LayoutProperty[0]); } @@ -117,14 +123,19 @@ public LayoutProperty[] getProperties() { /** * @return the angle */ - public Double getAngle() { + public Float getAngle() { return angle; } /** * @param angle the angle to set */ - public void setAngle(Double angle) { + public void setAngle(Float angle) { this.angle = angle; } + + // Backward compatibility + public void setAngle(Double angle) { + setAngle(angle.floatValue()); + } } diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/scale/AbstractScaleLayout.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/scale/AbstractScaleLayout.java new file mode 100644 index 0000000000..595b2eb305 --- /dev/null +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/scale/AbstractScaleLayout.java @@ -0,0 +1,140 @@ +/* + Copyright 2008-2010 Gephi + Authors : Helder Suzuki + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.layout.plugin.scale; + +import java.util.ArrayList; +import java.util.List; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Node; +import org.gephi.layout.plugin.AbstractLayout; +import org.gephi.layout.spi.LayoutBuilder; +import org.gephi.layout.spi.LayoutProperty; +import org.openide.util.Exceptions; +import org.openide.util.NbBundle; + +/** + * Sample layout that scales the graph. + * + * @author Helder Suzuki + */ +public abstract class AbstractScaleLayout extends AbstractLayout { + + private float scale; + + public AbstractScaleLayout(LayoutBuilder layoutBuilder, float scale) { + super(layoutBuilder); + this.scale = scale; + } + + @Override + public void initAlgo() { + setConverged(false); + } + + @Override + public void goAlgo() { + Graph graph = graphModel.getGraphVisible(); + graph.readLock(); + try { + float xMean = 0, yMean = 0; + for (Node n : graph.getNodes()) { + xMean += n.x(); + yMean += n.y(); + } + xMean /= graph.getNodeCount(); + yMean /= graph.getNodeCount(); + + for (Node n : graph.getNodes()) { + if (!n.isFixed()) { + float dx = (n.x() - xMean) * getScale(); + float dy = (n.y() - yMean) * getScale(); + + n.setPosition(xMean + dx, yMean + dy); + } + } + setConverged(true); + } finally { + graph.readUnlockAll(); + } + } + + @Override + public void endAlgo() { + } + + @Override + public LayoutProperty[] getProperties() { + List properties = new ArrayList<>(); + try { + properties.add(LayoutProperty.createProperty( + this, Float.class, + NbBundle.getMessage(getClass(), "ScaleLayout.scaleFactor.name"), + null, + "ScaleLayout.scaleFactor.name", + NbBundle.getMessage(getClass(), "ScaleLayout.scaleFactor.desc"), + "getScale", "setScale")); + } catch (Exception e) { + Exceptions.printStackTrace(e); + } + return properties.toArray(new LayoutProperty[0]); + } + + /** + * @return the scale + */ + public Float getScale() { + return scale; + } + + /** + * @param scale the scale to set + */ + public void setScale(Float scale) { + this.scale = scale; + } + + // Backward compatibility + public void setScale(Double scale) { + setScale(scale.floatValue()); + } +} diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/scale/Contract.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/scale/Contract.java index ab34314ffd..719f534695 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/scale/Contract.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/scale/Contract.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.scale; import javax.swing.Icon; @@ -50,13 +51,12 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * - * @author Helder Suzuki > + * @author Helder Suzuki */ @ServiceProvider(service = LayoutBuilder.class) public class Contract implements LayoutBuilder { - private ContractLayoutUI ui = new ContractLayoutUI(); + private final ContractLayoutUI ui = new ContractLayoutUI(); @Override public String getName() { @@ -64,8 +64,8 @@ public String getName() { } @Override - public ScaleLayout buildLayout() { - return new ScaleLayout(this, 0.8); + public ContractLayout buildLayout() { + return new ContractLayout(this, 0.8f); } @Override diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/scale/ContractLayout.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/scale/ContractLayout.java new file mode 100644 index 0000000000..9df69c7c14 --- /dev/null +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/scale/ContractLayout.java @@ -0,0 +1,57 @@ +/* + Copyright 2008-2017 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2017 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2017 Gephi Consortium. + */ + +package org.gephi.layout.plugin.scale; + +import org.gephi.layout.spi.LayoutBuilder; + +public class ContractLayout extends AbstractScaleLayout { + + public ContractLayout(LayoutBuilder layoutBuilder, float scale) { + super(layoutBuilder, scale); + } + + @Override + public void resetPropertiesValues() { + setScale(0.8f); + } +} diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/scale/Expand.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/scale/Expand.java index 3c84d3a8f3..1175ebf340 100644 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/scale/Expand.java +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/scale/Expand.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.layout.plugin.scale; import javax.swing.Icon; @@ -50,13 +51,12 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * - * @author Helder Suzuki > + * @author Helder Suzuki */ @ServiceProvider(service = LayoutBuilder.class) public class Expand implements LayoutBuilder { - private ExpandLayoutUI ui = new ExpandLayoutUI(); + private final ExpandLayoutUI ui = new ExpandLayoutUI(); @Override public String getName() { @@ -64,8 +64,8 @@ public String getName() { } @Override - public ScaleLayout buildLayout() { - return new ScaleLayout(this, 1.2); + public ExpandLayout buildLayout() { + return new ExpandLayout(this, 1.2f); } @Override diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/scale/ExpandLayout.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/scale/ExpandLayout.java new file mode 100644 index 0000000000..f42718585e --- /dev/null +++ b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/scale/ExpandLayout.java @@ -0,0 +1,57 @@ +/* + Copyright 2008-2017 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2017 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2017 Gephi Consortium. + */ + +package org.gephi.layout.plugin.scale; + +import org.gephi.layout.spi.LayoutBuilder; + +public class ExpandLayout extends AbstractScaleLayout { + + public ExpandLayout(LayoutBuilder layoutBuilder, float scale) { + super(layoutBuilder, scale); + } + + @Override + public void resetPropertiesValues() { + setScale(1.2f); + } +} diff --git a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/scale/ScaleLayout.java b/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/scale/ScaleLayout.java deleted file mode 100644 index 79e67a70b3..0000000000 --- a/modules/LayoutPlugin/src/main/java/org/gephi/layout/plugin/scale/ScaleLayout.java +++ /dev/null @@ -1,133 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Helder Suzuki - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.layout.plugin.scale; - -import java.util.ArrayList; -import java.util.List; -import org.gephi.graph.api.Graph; -import org.gephi.graph.api.Node; -import org.gephi.layout.plugin.AbstractLayout; -import org.gephi.layout.spi.Layout; -import org.gephi.layout.spi.LayoutBuilder; -import org.gephi.layout.spi.LayoutProperty; -import org.openide.util.NbBundle; - -/** - * Sample layout that scales the graph. - * - * @author Helder Suzuki - */ -public class ScaleLayout extends AbstractLayout implements Layout { - - private double scale; - private Graph graph; - - public ScaleLayout(LayoutBuilder layoutBuilder, double scale) { - super(layoutBuilder); - this.scale = scale; - } - - @Override - public void initAlgo() { - setConverged(false); - } - - @Override - public void goAlgo() { - graph = graphModel.getGraphVisible(); - double xMean = 0, yMean = 0; - for (Node n : graph.getNodes()) { - xMean += n.x(); - yMean += n.y(); - } - xMean /= graph.getNodeCount(); - yMean /= graph.getNodeCount(); - - for (Node n : graph.getNodes()) { - double dx = (n.x() - xMean) * getScale(); - double dy = (n.y() - yMean) * getScale(); - - n.setX((float) (xMean + dx)); - n.setY((float) (yMean + dy)); - } - setConverged(true); - } - - @Override - public void endAlgo() { - } - - @Override - public LayoutProperty[] getProperties() { - List properties = new ArrayList(); - try { - properties.add(LayoutProperty.createProperty( - this, Double.class, - NbBundle.getMessage(getClass(), "ScaleLayout.scaleFactor.name"), - null, - "ScaleLayout.scaleFactor.name", - NbBundle.getMessage(getClass(), "ScaleLayout.scaleFactor.desc"), - "getScale", "setScale")); - } catch (Exception e) { - e.printStackTrace(); - } - return properties.toArray(new LayoutProperty[0]); - } - - @Override - public void resetPropertiesValues() { - } - - /** - * @return the scale - */ - public Double getScale() { - return scale; - } - - /** - * @param scale the scale to set - */ - public void setScale(Double scale) { - this.scale = scale; - } -} diff --git a/modules/LayoutPlugin/src/main/nbm/manifest.mf b/modules/LayoutPlugin/src/main/nbm/manifest.mf index 090ab64729..3c32f6684c 100644 --- a/modules/LayoutPlugin/src/main/nbm/manifest.mf +++ b/modules/LayoutPlugin/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/layout/plugin/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Plugin +OpenIDE-Module-Name: Layout Plugin \ No newline at end of file diff --git a/modules/LayoutPlugin/src/main/nbm/module.xml b/modules/LayoutPlugin/src/main/nbm/module.xml deleted file mode 100644 index 5e87bf8612..0000000000 --- a/modules/LayoutPlugin/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle.properties index 99ac8458ff..8affc388af 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle.properties @@ -1,5 +1,2 @@ -OpenIDE-Module-Display-Category=Plugin -OpenIDE-Module-Long-Description=\ - Standard layout implementations -OpenIDE-Module-Name=Layout Plugin +OpenIDE-Module-Long-Description=Standard layout implementations OpenIDE-Module-Short-Description=Standard layout implementations diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_ar.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_ca.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_ca.properties new file mode 100644 index 0000000000..2e22a5fcc9 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_ca.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Implementacions estΰndard del disseny +OpenIDE-Module-Short-Description=Standard layout implementations diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_cs.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_cs.properties index 5b5e5bf3b8..e0c99eb1d2 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_cs.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_cs.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-25 08\:13+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=Implementace standardn\u00edho rozvr\u017een\u00ed - -OpenIDE-Module-Short-Description=Implementace standardn\u00edho rozvr\u017een\u00ed +OpenIDE-Module-Long-Description=Implementace standardnνho rozvr\u017eenν +OpenIDE-Module-Short-Description=Implementace standardnνho rozvr\u017eenν diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_de.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_de.properties new file mode 100644 index 0000000000..d3861bca1c --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_de.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Standard-Layout-Implementierungen +OpenIDE-Module-Short-Description=Standard-Layout-Implementierungen diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_el.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_el.properties new file mode 100644 index 0000000000..ef8733d208 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_el.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Long-Description=\u03A4\u03C5\u03C0\u03B9\u03BA\u03AD\u03C2 \u03C5\u03BB\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03B9\u03C2 \u03B4\u03B9\u03AC\u03C4\u03B1\u03BE\u03B7\u03C2 +OpenIDE-Module-Short-Description=\u03A4\u03C5\u03C0\u03B9\u03BA\u03AD\u03C2 \u03C5\u03BB\u03BF\u03C0\u03BF\u03B9\u03AE\u03C3\u03B5\u03B9\u03C2 \u03B4\u03B9\u03AC\u03C4\u03B1\u03BE\u03B7\u03C2 diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_es.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_es.properties index 087e8f0c31..7713e66010 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_es.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_es.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:01+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Implementaciones est\u00e1ndar de los algoritmos de distribuci\u00f3n - -OpenIDE-Module-Short-Description=Implementaciones est\u00e1ndar de los algoritmos de distribuci\u00f3n +OpenIDE-Module-Long-Description=Implementaciones estαndar de los algoritmos de distribuciσn +OpenIDE-Module-Short-Description=Implementaciones estαndar de los algoritmos de distribuciσn diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_fr.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_fr.properties index 34a3527906..bb241e3055 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_fr.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_fr.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:01+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Impl\u00e9mentation des algorithmes de spatialisation standards - -OpenIDE-Module-Short-Description=Impl\u00e9mentation des layouts standards +OpenIDE-Module-Long-Description=Implιmentation des algorithmes de spatialisation standards +OpenIDE-Module-Short-Description=Implιmentation des layouts standards diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_he.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_he.properties new file mode 100644 index 0000000000..11a03bd457 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_he.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Standard layout implementations +OpenIDE-Module-Short-Description=Standard layout implementations diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_hu.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_hu.properties new file mode 100644 index 0000000000..64bfff0c09 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_hu.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Short-Description=Szabv\u00E1nyos elrendez\u00E9si megval\u00F3s\u00EDt\u00E1sok +OpenIDE-Module-Long-Description=Szabv\u00E1nyos elrendez\u00E9s megval\u00F3s\u00EDt\u00E1sa diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_it.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_it.properties new file mode 100644 index 0000000000..7818938c9d --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_it.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Implementazioni standard del layout +OpenIDE-Module-Short-Description=Standard layout implementations diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_ja.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_ja.properties index dbbfe87c9e..22e9d3aec7 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_ja.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_ja.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-19 05\:56+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u6a19\u6e96\u30ec\u30a4\u30a2\u30a6\u30c8\u306e\u5b9f\u88c5 - -OpenIDE-Module-Short-Description=\u6a19\u6e96\u30ec\u30a4\u30a2\u30a6\u30c8\u306e\u5b9f\u88c5 +OpenIDE-Module-Long-Description=\u6a19\u6e96\u30ec\u30a4\u30a2\u30a6\u30c8\u306e\u5b9f\u88c5 +OpenIDE-Module-Short-Description=\u6a19\u6e96\u30ec\u30a4\u30a2\u30a6\u30c8\u306e\u5b9f\u88c5 diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_nl.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_nl.properties new file mode 100644 index 0000000000..11a03bd457 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_nl.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Standard layout implementations +OpenIDE-Module-Short-Description=Standard layout implementations diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_pt_BR.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_pt_BR.properties index e5bb96d526..98b5b17ba0 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_pt_BR.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_pt_BR.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 16\:42+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Implementa\u00e7\u00f5es de algoritmos de distribui\u00e7\u00e3o padr\u00e3o - -OpenIDE-Module-Short-Description=Implementa\u00e7\u00f5es de algoritmos de distribui\u00e7\u00e3o padr\u00e3o +OpenIDE-Module-Long-Description=Implementaηυes de algoritmos de distribuiηγo padrγo +OpenIDE-Module-Short-Description=Implementaηυes de algoritmos de distribuiηγo padrγo diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_ro.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_ro.properties new file mode 100644 index 0000000000..af228aa1a1 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_ro.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Long-Description=Implement\u0103ri standard de layout +OpenIDE-Module-Short-Description=Implement\u0103ri standard de layout diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_ru.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_ru.properties index fb64b59f48..ab477c9f0c 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_ru.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_ru.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-08 06\:24+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0443\u043a\u043b\u0430\u0434\u043a\u0438 - -OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0443\u043a\u043b\u0430\u0434\u043a\u0438 +OpenIDE-Module-Long-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0443\u043a\u043b\u0430\u0434\u043a\u0438 +OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0443\u043a\u043b\u0430\u0434\u043a\u0438 diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_th.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_tr.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_tr.properties new file mode 100644 index 0000000000..1d04aff757 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_tr.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Standart d\u00FCzenleme uygulamalar\u0131 +OpenIDE-Module-Short-Description=Standard layout implementations diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_uk.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_uk.properties new file mode 100644 index 0000000000..91ae075682 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_uk.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=\u0420\u0435\u0430\u043B\u0456\u0437\u0430\u0446\u0456\u0457 \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u043E\u0433\u043E \u043C\u0430\u043A\u0435\u0442\u0430 +OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043B\u0456\u0437\u0430\u0446\u0456\u0457 \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u043E\u0433\u043E \u043C\u0430\u043A\u0435\u0442\u0430 diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_zh_CN.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_zh_CN.properties index 39cbe81d66..d9c4596db9 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_zh_CN.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_zh_CN.properties @@ -1,10 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:09+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u6807\u51c6\u5e03\u5c40\u5b9e\u73b0 - -OpenIDE-Module-Short-Description=\u6807\u51c6\u5e03\u5c40\u5b9e\u73b0 +OpenIDE-Module-Long-Description=\u6807\u51c6\u5e03\u5c40\u5b9e\u73b0 +OpenIDE-Module-Short-Description=\u6807\u51c6\u5e03\u5c40\u5b9e\u73b0 diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_zh_TW.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_zh_TW.properties new file mode 100644 index 0000000000..11a03bd457 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/Bundle_zh_TW.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Standard layout implementations +OpenIDE-Module-Short-Description=Standard layout implementations diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/cs.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/cs.po deleted file mode 100644 index 460b0afcbe..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/cs.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-25 08:13+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Implementace standardnΓ­ho rozvrΕΎenΓ­" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implementace standardnΓ­ho rozvrΕΎenΓ­" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/es.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/es.po deleted file mode 100644 index 56f43a977a..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/es.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:01+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Implementaciones estΓ‘ndar de los algoritmos de distribuciΓ³n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implementaciones estΓ‘ndar de los algoritmos de distribuciΓ³n" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle.properties index a82cf963cc..1f9e74c580 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle.properties @@ -16,6 +16,6 @@ YifanHu.adaptativeCooling.desc=Controls the use of adaptive cooling. It is used YifanHu.convergenceThreshold.name=Convergence Threshold YifanHu.convergenceThreshold.desc=Relative energy convergence threshold. Smaller values mean more accuracy. YifanHu.quadTreeMaxLevel.name=Quadtree Max Level -YifanHu.quadTreeMaxLevel.desc=The maximun level to be used in the quadtree representation. Greater values mean more accuracy. +YifanHu.quadTreeMaxLevel.desc=The maximum level to be used in the quadtree representation. Greater values mean more accuracy. YifanHu.theta.name=Theta YifanHu.theta.desc=The theta parameter for Barnes-Hut opening criteria. Smaller values mean more accuracy. \ No newline at end of file diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_ar.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_ca.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_ca.properties new file mode 100644 index 0000000000..25c311dbd8 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_ca.properties @@ -0,0 +1,20 @@ +YifanHu.name=Yifan Hu +YifanHu.description=Model d'atracciσ-repulsiσ original de Yifan-Hu. Redueix els costos computacionals limitant el cΰlcul salvatge al veοnat. Grΰcies al sistema de refrigeraciσ, l'algoritme es pot parar a ell mateix. +YifanHuProportional.name=Yifan Hu Proportional +YifanHuProportional.description=Modified version of Yifan Hu that uses proportional displacement scheme. +YifanHu.optimalDistance.name=Distΰncia ςptima +YifanHu.optimalDistance.desc=Distΰncia natural de les molles. Com mιs gran sigui el valor, mιs separats estaran els nodes +YifanHu.relativeStrength.name=Relative Strength +YifanHu.relativeStrength.desc=The relative strength between electrical force (repulsion) and spring force (attraction). +YifanHu.initialStepSize.name=Initial Step size +YifanHu.initialStepSize.desc=The initial step size used in the integration phase. Set this value to a meaningful size compared to the optimal distance (10% is a good starting point). +YifanHu.stepRatio.name=Step ratio +YifanHu.stepRatio.desc=The ratio used to update the step size across iterations. +YifanHu.adaptativeCooling.name=Adaptive Cooling +YifanHu.adaptativeCooling.desc=Controls the use of adaptive cooling. It is used help the layout algoritm to avoid energy local minima. +YifanHu.convergenceThreshold.name=Convergence Threshold +YifanHu.convergenceThreshold.desc=Relative energy convergence threshold. Smaller values mean more accuracy. +YifanHu.quadTreeMaxLevel.name=Quadtree Max Level +YifanHu.quadTreeMaxLevel.desc=The maximum level to be used in the quadtree representation. Greater values mean more accuracy. +YifanHu.theta.name=Theta +YifanHu.theta.desc=The theta parameter for Barnes-Hut opening criteria. Smaller values mean more accuracy. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_cs.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_cs.properties index e567aa125d..b8470e53c5 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_cs.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_cs.properties @@ -1,47 +1,20 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-09 19\:12+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - YifanHu.name=Yifan Hu - -YifanHu.description=P\u016fvodn\u00ed Yifan H\u016fv model p\u0159ita\u017elivosti-odpudivosti. Sni\u017euje v\u00fdpo\u010detn\u00ed n\u00e1ro\u010dnost omezen\u00edm v\u00fdpo\u010dtu s\u00edly okol\u00ed. Algoritmus se s\u00e1m zastav\u00ed, proto\u017ee m\u00e1 p\u0159izp\u016fsobiv\u00e9 sch\u00e9ma chlazen\u00ed. - -YifanHuProportional.name=Yifan Hu \u00fam\u011brn\u00fd - -YifanHuProportional.description=Upraven\u00e1 verze Yifan Hu, kter\u00e1 pou\u017e\u00edv\u00e1 sch\u00e9ma \u00fam\u011brn\u00e9ho posunut\u00ed. - -YifanHu.optimalDistance.name=Optim\u00e1ln\u00ed vzd\u00e1lenost - -YifanHu.optimalDistance.desc=P\u0159irozen\u00e1 d\u00e9lka pru\u017ein. V\u011bt\u0161\u00ed hodnoty znamenaj\u00ed, \u017ee uzly budou od sebe vzd\u00e1len\u011bj\u0161\u00ed. - -YifanHu.relativeStrength.name=Relativn\u00ed s\u00edla - -YifanHu.relativeStrength.desc=Relativn\u00ed s\u00edla mezi elektrickou silou (odpuzen\u00ed) a silou pru\u017einy (p\u0159ibl\u00ed\u017een\u00ed). - -YifanHu.initialStepSize.name=Velikost po\u010d\u00e1te\u010dn\u00edho kroku - -YifanHu.initialStepSize.desc=Velikost po\u010d\u00e1te\u010dn\u00edho kroku ve f\u00e1zi zaveden\u00ed. Nastavte tuto hodnotu na smysluplnou velikost v porovn\u00e1n\u00ed s optim\u00e1ln\u00ed vzd\u00e1lenost\u00ed (10% je dobr\u00e9 pro po\u010d\u00e1te\u010dn\u00ed bod). - +YifanHu.description=P\u016fvodnν Yifan H\u016fv model p\u0159ita\u017elivosti-odpudivosti. Sni\u017euje vύpo\u010detnν nαro\u010dnost omezenνm vύpo\u010dtu sνly okolν. Algoritmus se sαm zastavν, proto\u017ee mα p\u0159izp\u016fsobivι schιma chlazenν. +YifanHuProportional.name=Yifan Hu ϊm\u011brnύ +YifanHuProportional.description=Upravenα verze Yifan Hu, kterα pou\u017eνvα schιma ϊm\u011brnιho posunutν. +YifanHu.optimalDistance.name=Optimαlnν vzdαlenost +YifanHu.optimalDistance.desc=P\u0159irozenα dιlka pru\u017ein. V\u011bt\u0161ν hodnoty znamenajν, \u017ee uzly budou od sebe vzdαlen\u011bj\u0161ν. +YifanHu.relativeStrength.name=Relativnν sνla +YifanHu.relativeStrength.desc=Relativnν sνla mezi elektrickou silou (odpuzenν) a silou pru\u017einy (p\u0159iblν\u017eenν). +YifanHu.initialStepSize.name=Velikost po\u010dαte\u010dnνho kroku +YifanHu.initialStepSize.desc=Velikost po\u010dαte\u010dnνho kroku ve fαzi zavedenν. Nastavte tuto hodnotu na smysluplnou velikost v porovnαnν s optimαlnν vzdαlenostν (10% je dobrι pro po\u010dαte\u010dnν bod). YifanHu.stepRatio.name=Pom\u011br kroku - -YifanHu.stepRatio.desc=Pom\u011br, kter\u00fd je pou\u017eit pro aktualizaci velikosti kroku v opakov\u00e1n\u00edch. - -YifanHu.adaptativeCooling.name=P\u0159izp\u016fsobiv\u00e9 chlazen\u00ed - -YifanHu.adaptativeCooling.desc=Ovl\u00e1d\u00e1 pou\u017eit\u00ed p\u0159izp\u016fsobiv\u00e9ho chlazen\u00ed. Je pou\u017eit pro pomoc algoritmu rozlo\u017een\u00ed, aby se p\u0159ede\u0161lo m\u00edstn\u00edmu minimu energie. - -YifanHu.convergenceThreshold.name=Pr\u00e1h konvergence - -YifanHu.convergenceThreshold.desc=Relativn\u00ed pr\u00e1h konvergence energie. Men\u0161\u00ed hodnoty znamenaj\u00ed v\u011bt\u0161\u00ed p\u0159esnost. - -YifanHu.quadTreeMaxLevel.name=Max \u00farove\u0148 kvadrantov\u00e9ho stromu - -YifanHu.quadTreeMaxLevel.desc=Maxim\u00e1ln\u00ed \u00farove\u0148, kter\u00e1 bude pou\u017eita pro zn\u00e1zorn\u011bn\u00ed kvadrantov\u00e9ho stromu. Vy\u0161\u0161\u00ed hodnoty znamenaj\u00ed v\u011bt\u0161\u00ed p\u0159esnost. - +YifanHu.stepRatio.desc=Pom\u011br, kterύ je pou\u017eit pro aktualizaci velikosti kroku v opakovαnνch. +YifanHu.adaptativeCooling.name=P\u0159izp\u016fsobivι chlazenν +YifanHu.adaptativeCooling.desc=Ovlαdα pou\u017eitν p\u0159izp\u016fsobivιho chlazenν. Je pou\u017eit pro pomoc algoritmu rozlo\u017eenν, aby se p\u0159ede\u0161lo mνstnνmu minimu energie. +YifanHu.convergenceThreshold.name=Prαh konvergence +YifanHu.convergenceThreshold.desc=Relativnν prαh konvergence energie. Men\u0161ν hodnoty znamenajν v\u011bt\u0161ν p\u0159esnost. +YifanHu.quadTreeMaxLevel.name=Max ϊrove\u0148 kvadrantovιho stromu +# YifanHu.quadTreeMaxLevel.desc=The maximum level to be used in the quadtree representation. Greater values mean more accuracy. YifanHu.theta.name=Theta - -YifanHu.theta.desc=Parametr theta pro vstupn\u00ed krit\u00e9ria Barnes-Hut. Men\u0161\u00ed hodnoty znamenaj\u00ed v\u011bt\u0161\u00ed p\u0159esnost. +YifanHu.theta.desc=Parametr theta pro vstupnν kritιria Barnes-Hut. Men\u0161ν hodnoty znamenajν v\u011bt\u0161ν p\u0159esnost. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_de.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_de.properties new file mode 100644 index 0000000000..3285c6a7fc --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_de.properties @@ -0,0 +1,20 @@ +YifanHu.name=Yifan Hu +YifanHu.description=Originales Yifan-Hu Anziehungs-/Abstoίungs-Modell. Rediziert Berechnungsaufwand durch Beschrδnkung der Berechnung auf die Nachbarschaft. Der Algorithmus stoppt von selbst, da er ein adaptives Abkόhlungsschema nutzt. +YifanHuProportional.name=Yifan Hu Proportional +YifanHuProportional.description=Modifizierte Version des Yifan-Hu-Algorithmus, die ein proportionales Verschiebungs-Verfahren nutzt. +YifanHu.optimalDistance.name=Optimale Distanz +YifanHu.optimalDistance.desc=Die natόrliche Federlδnge. Grφίere Werte bedeuten, dass die Knoten weiter entfernt liegen. +YifanHu.relativeStrength.name=Relative Stδrke +YifanHu.relativeStrength.desc=Die relative Stδrke zwischen elektrischer Kraft (Abstoίung) und Federstδrke (Anziehung). +YifanHu.initialStepSize.name=Initiale Schrittweite +YifanHu.initialStepSize.desc=Die intial in der Integrationsphase benutzte Schrittweite. Setzen Sie diesen Wert auf eine sinnvolle Grφίe im Vergleich zur optimalen Distanz (10% ist ein guter erster Ansatz). +YifanHu.stepRatio.name=Schrittverhδltnis +YifanHu.stepRatio.desc=Das Verhδltnis, das zur Anpassung der Schrittweite zwischen Iterationen genutzt wird. +YifanHu.adaptativeCooling.name=Adaptives Abkόhlen +YifanHu.adaptativeCooling.desc=Steuert die Verwendung des adaptiven Abkόhlens. Hierdurch kann der Layout-Algorithmus lokale Minima όberwinden. +YifanHu.convergenceThreshold.name=Konvergenz-Schwellwert +YifanHu.convergenceThreshold.desc=Relativer Energie-Konvergenz-Schwellwert. Kleinere Werte bedeuten hφhere Genauigkeit. +YifanHu.quadTreeMaxLevel.name=Quadtree Max Level +YifanHu.quadTreeMaxLevel.desc=Maximale Ebene, die in Quadtree-Reprδsentation verwendet wird. Grφίere Werte bedeuten hφhere Genauigkeit. +YifanHu.theta.name=Theta +YifanHu.theta.desc=Der Theta-Parameter des Barnes-Hut Erφffnungskriterium. Kleinere Werte bedeuten hφhere Genauigkeit. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_el.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_el.properties new file mode 100644 index 0000000000..7f0fb81cea --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_el.properties @@ -0,0 +1,22 @@ + + +YifanHuProportional.name=\u0391\u03BD\u03B1\u03BB\u03BF\u03B3\u03B9\u03BA\u03CC Yifan Hu +YifanHu.name=Yifan Hu +YifanHu.relativeStrength.name=\u03A3\u03C7\u03B5\u03C4\u03B9\u03BA\u03AE \u0394\u03CD\u03BD\u03B1\u03BC\u03B7 +YifanHu.relativeStrength.desc=\u0397 \u03C3\u03C7\u03B5\u03C4\u03B9\u03BA\u03AE \u03B4\u03CD\u03BD\u03B1\u03BC\u03B7 \u03BC\u03B5\u03C4\u03B1\u03BE\u03CD \u03C4\u03B7\u03C2 \u03B7\u03BB\u03B5\u03BA\u03C4\u03C1\u03B9\u03BA\u03AE\u03C2 \u03B4\u03CD\u03BD\u03B1\u03BC\u03B7\u03C2 (\u03B1\u03C0\u03CE\u03B8\u03B7\u03C3\u03B7) \u03BA\u03B1\u03B9 \u03C4\u03B7\u03C2 \u03B4\u03CD\u03BD\u03B1\u03BC\u03B7\u03C2 \u03C4\u03BF\u03C5 \u03B5\u03BB\u03B1\u03C4\u03B7\u03C1\u03AF\u03BF\u03C5 (\u03AD\u03BB\u03BE\u03B7). +YifanHu.initialStepSize.name=\u0391\u03C1\u03C7\u03B9\u03BA\u03CC \u03BC\u03AD\u03B3\u03B5\u03B8\u03BF\u03C2 \u03B2\u03AE\u03BC\u03B1\u03C4\u03BF\u03C2 +YifanHu.stepRatio.name=\u0391\u03BD\u03B1\u03BB\u03BF\u03B3\u03AF\u03B1 \u03B2\u03B7\u03BC\u03AC\u03C4\u03C9\u03BD +YifanHu.stepRatio.desc=\u0397 \u03B1\u03BD\u03B1\u03BB\u03BF\u03B3\u03AF\u03B1 \u03C0\u03BF\u03C5 \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF\u03C4\u03B1\u03B9 \u03B3\u03B9\u03B1 \u03C4\u03B7\u03BD \u03B5\u03BD\u03B7\u03BC\u03AD\u03C1\u03C9\u03C3\u03B7 \u03C4\u03BF\u03C5 \u03BC\u03B5\u03B3\u03AD\u03B8\u03BF\u03C5\u03C2 \u03B2\u03AE\u03BC\u03B1\u03C4\u03BF\u03C2 \u03C3\u03B5 \u03CC\u03BB\u03B5\u03C2 \u03C4\u03B9\u03C2 \u03B5\u03C0\u03B1\u03BD\u03B1\u03BB\u03AE\u03C8\u03B5\u03B9\u03C2. +YifanHu.adaptativeCooling.name=\u03A0\u03C1\u03BF\u03C3\u03B1\u03C1\u03BC\u03BF\u03B6\u03CC\u03BC\u03B5\u03BD\u03B7 \u03C8\u03CD\u03BE\u03B7 +YifanHu.initialStepSize.desc=\u03A4\u03BF \u03B1\u03C1\u03C7\u03B9\u03BA\u03CC \u03BC\u03AD\u03B3\u03B5\u03B8\u03BF\u03C2 \u03B2\u03AE\u03BC\u03B1\u03C4\u03BF\u03C2 \u03C0\u03BF\u03C5 \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03AE\u03B8\u03B7\u03BA\u03B5 \u03C3\u03C4\u03B7 \u03C6\u03AC\u03C3\u03B7 \u03B5\u03BD\u03C3\u03C9\u03BC\u03AC\u03C4\u03C9\u03C3\u03B7\u03C2. \u039F\u03C1\u03AF\u03C3\u03C4\u03B5 \u03B1\u03C5\u03C4\u03AE\u03BD \u03C4\u03B7\u03BD \u03C4\u03B9\u03BC\u03AE \u03C3\u03B5 \u03C3\u03B7\u03BC\u03B1\u03BD\u03C4\u03B9\u03BA\u03CC \u03BC\u03AD\u03B3\u03B5\u03B8\u03BF\u03C2 \u03C3\u03B5 \u03C3\u03CD\u03B3\u03BA\u03C1\u03B9\u03C3\u03B7 \u03BC\u03B5 \u03C4\u03B7 \u03B2\u03AD\u03BB\u03C4\u03B9\u03C3\u03C4\u03B7 \u03B1\u03C0\u03CC\u03C3\u03C4\u03B1\u03C3\u03B7 (\u03C4\u03BF 10% \u03B5\u03AF\u03BD\u03B1\u03B9 \u03AD\u03BD\u03B1 \u03BA\u03B1\u03BB\u03CC \u03C3\u03B7\u03BC\u03B5\u03AF\u03BF \u03B5\u03BA\u03BA\u03AF\u03BD\u03B7\u03C3\u03B7\u03C2). +YifanHu.description=\u03A4\u03BF \u03B1\u03C1\u03C7\u03B9\u03BA\u03CC \u03BC\u03BF\u03BD\u03C4\u03AD\u03BB\u03BF \u03AD\u03BB\u03BE\u03B7\u03C2-\u03B1\u03C0\u03CE\u03B8\u03B7\u03C3\u03B7\u03C2 \u03C4\u03BF\u03C5 Yifan Hu. \u039C\u03B5\u03B9\u03CE\u03C3\u03C4\u03B5 \u03C4\u03BF \u03C5\u03C0\u03BF\u03BB\u03BF\u03B3\u03B9\u03C3\u03C4\u03B9\u03BA\u03CC \u03BA\u03CC\u03C3\u03C4\u03BF\u03C2 \u03C0\u03B5\u03C1\u03B9\u03BF\u03C1\u03AF\u03B6\u03BF\u03BD\u03C4\u03B1\u03C2 \u03C4\u03BF\u03BD \u03C5\u03C0\u03BF\u03BB\u03BF\u03B3\u03B9\u03C3\u03BC\u03CC \u03C4\u03B7\u03C2 \u03B4\u03CD\u03BD\u03B1\u03BC\u03B7\u03C2 \u03C3\u03C4\u03B7 \u03B3\u03B5\u03B9\u03C4\u03BF\u03BD\u03B9\u03AC. \u039F \u03B1\u03BB\u03B3\u03CC\u03C1\u03B9\u03B8\u03BC\u03BF\u03C2 \u03C3\u03C4\u03B1\u03BC\u03B1\u03C4\u03AC\u03B5\u03B9, \u03BA\u03B1\u03B8\u03CE\u03C2 \u03AD\u03C7\u03B5\u03B9 \u03AD\u03BD\u03B1 \u03C0\u03C1\u03BF\u03C3\u03B1\u03C1\u03BC\u03BF\u03C3\u03C4\u03B9\u03BA\u03AE \u03BC\u03AD\u03B8\u03BF\u03B4\u03BF \u03C8\u03CD\u03BE\u03B7\u03C2 (cooling scheme). +YifanHuProportional.description=\u03A4\u03C1\u03BF\u03C0\u03BF\u03C0\u03BF\u03B9\u03B7\u03BC\u03AD\u03BD\u03B7 \u03AD\u03BA\u03B4\u03BF\u03C3\u03B7 \u03C4\u03BF\u03C5 Yifan Hu \u03C0\u03BF\u03C5 \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF \u03B1\u03BD\u03B1\u03BB\u03BF\u03B3\u03B9\u03BA\u03CC \u03C3\u03C7\u03AE\u03BC\u03B1 \u03BC\u03B5\u03C4\u03B1\u03C4\u03CC\u03C0\u03B9\u03C3\u03B7\u03C2. +YifanHu.optimalDistance.name=\u0392\u03AD\u03BB\u03C4\u03B9\u03C3\u03C4\u03B7 \u03B1\u03C0\u03CC\u03C3\u03C4\u03B1\u03C3\u03B7 +YifanHu.optimalDistance.desc=\u03A4\u03BF \u03C6\u03C5\u03C3\u03B9\u03BA\u03CC \u03BC\u03AE\u03BA\u03BF\u03C2 \u03C4\u03C9\u03BD \u03B5\u03BB\u03B1\u03C4\u03B7\u03C1\u03AF\u03C9\u03BD. \u039C\u03B5\u03B3\u03B1\u03BB\u03CD\u03C4\u03B5\u03C1\u03B5\u03C2 \u03C4\u03B9\u03BC\u03AD\u03C2 \u03C3\u03B7\u03BC\u03B1\u03AF\u03BD\u03BF\u03C5\u03BD \u03CC\u03C4\u03B9 \u03BF\u03B9 \u03BA\u03CC\u03BC\u03B2\u03BF\u03B9 \u03B8\u03B1 \u03B1\u03C0\u03AD\u03C7\u03BF\u03C5\u03BD \u03C0\u03B5\u03C1\u03B9\u03C3\u03C3\u03CC\u03C4\u03B5\u03C1\u03BF \u03BC\u03B5\u03C4\u03B1\u03BE\u03CD \u03C4\u03BF\u03C5\u03C2. +YifanHu.convergenceThreshold.name=\u039A\u03B1\u03C4\u03CE\u03C6\u03BB\u03B9 \u03C3\u03CD\u03B3\u03BA\u03BB\u03B9\u03C3\u03B7\u03C2 (Convergence Threshold) +YifanHu.convergenceThreshold.desc=\u03A3\u03C7\u03B5\u03C4\u03B9\u03BA\u03CC \u03BA\u03B1\u03C4\u03CE\u03C6\u03BB\u03B9 \u03C3\u03CD\u03B3\u03BA\u03BB\u03B9\u03C3\u03B7\u03C2. \u039C\u03B9\u03BA\u03C1\u03CC\u03C4\u03B5\u03C1\u03B5\u03C2 \u03C4\u03B9\u03BC\u03AD\u03C2 \u03C3\u03B7\u03BC\u03B1\u03AF\u03BD\u03BF\u03C5\u03BD \u03BC\u03B5\u03B3\u03B1\u03BB\u03CD\u03C4\u03B5\u03C1\u03B7 \u03B1\u03BA\u03C1\u03AF\u03B2\u03B5\u03B9\u03B1. +YifanHu.quadTreeMaxLevel.name=\u039C\u03AD\u03B3\u03B9\u03C3\u03C4\u03BF \u0395\u03C0\u03AF\u03C0\u03B5\u03B4\u03BF \u03C4\u03BF\u03C5 Quadtree +YifanHu.theta.name=\u03B8 +YifanHu.theta.desc=\u0397 \u03C0\u03B1\u03C1\u03AC\u03BC\u03B5\u03C4\u03C1\u03BF\u03C2 \u03B8 \u03B3\u03B9\u03B1 \u03C4\u03B9\u03C2 \u03B1\u03C1\u03C7\u03B9\u03BA\u03AD\u03C2 \u03C3\u03C5\u03BD\u03B8\u03AE\u03BA\u03B5\u03C2 \u03C4\u03BF\u03C5 \u03B1\u03BB\u03B3\u03BF\u03C1\u03AF\u03B8\u03BC\u03BF\u03C5 Barnes-Hut. \u039C\u03B9\u03BA\u03C1\u03CC\u03C4\u03B5\u03C1\u03B5\u03C2 \u03C4\u03B9\u03BC\u03AD\u03C2 \u03C3\u03B7\u03BC\u03B1\u03AF\u03BD\u03BF\u03C5\u03BD \u03BC\u03B5\u03B3\u03B1\u03BB\u03CD\u03C4\u03B5\u03C1\u03B7 \u03B1\u03BA\u03C1\u03AF\u03B2\u03B5\u03B9\u03B1. +YifanHu.quadTreeMaxLevel.desc=\u03A4\u03BF \u03BC\u03AD\u03B3\u03B9\u03C3\u03C4\u03BF \u03B5\u03C0\u03AF\u03C0\u03B5\u03B4\u03BF \u03C0\u03BF\u03C5 \u03B8\u03B1 \u03C7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B7\u03B8\u03B5\u03AF \u03C3\u03C4\u03B7\u03BD \u03B1\u03BD\u03B1\u03C0\u03B1\u03C1\u03AC\u03C3\u03C4\u03B1\u03C3\u03B7 \u03BC\u03B5 quadtree. \u039C\u03B5\u03B3\u03B1\u03BB\u03CD\u03C4\u03B5\u03C1\u03B5\u03C2 \u03C4\u03B9\u03BC\u03AD\u03C2 \u03C3\u03B7\u03BC\u03B1\u03AF\u03BD\u03BF\u03C5\u03BD \u03C0\u03B5\u03C1\u03B9\u03C3\u03CC\u03C4\u03B5\u03C1\u03B7 \u03B1\u03BA\u03C1\u03AF\u03B2\u03B5\u03B9\u03B1. +YifanHu.adaptativeCooling.desc=\u0395\u03BB\u03AD\u03B3\u03C7\u03B5\u03B9 \u03C4\u03B7\u03BD \u03C0\u03C1\u03BF\u03C3\u03B1\u03C1\u03BC\u03BF\u03B6\u03CC\u03BC\u03B5\u03BD\u03B7 \u03C8\u03CD\u03BE\u03B7 (adaptive cooling). \u03A7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF\u03C4\u03B1\u03B9 \u03B3\u03B9\u03B1 \u03BD\u03B1 \u03B2\u03BF\u03B7\u03B8\u03AE\u03C3\u03B5\u03B9 \u03C4\u03BF \u03B1\u03BB\u03B3\u03CC\u03C1\u03B9\u03B8\u03BC\u03BF \u03B4\u03B9\u03AC\u03C4\u03B1\u03BE\u03B7\u03C2 \u03C3\u03C4\u03B7\u03BD \u03B1\u03C0\u03BF\u03C6\u03C5\u03B3\u03AE \u03C4\u03BF\u03C0\u03B9\u03BA\u03CE\u03BD \u03B5\u03BB\u03B1\u03C7\u03AF\u03C3\u03C4\u03C9\u03BD \u03C4\u03B9\u03BC\u03CE\u03BD \u03B5\u03BD\u03AD\u03C1\u03B3\u03B5\u03B9\u03B1\u03C2 (energy minima). diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_es.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_es.properties index d59d9b8d22..169ce24467 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_es.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_es.properties @@ -1,47 +1,20 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:02+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - YifanHu.name=Yifan Hu - -YifanHu.description=Modelo original de atracci\u00f3n-repulsi\u00f3n de Yifan Hu. Reducido el coste computacional restringiendo los c\u00e1lculos de fuerzas a los nodos vecinos. El algoritmo se para a s\u00ed mismo ya que tiene un plan de enfriamiento adaptativo. - +YifanHu.description=Modelo original de atracciσn-repulsiσn de Yifan Hu. Reducido el coste computacional restringiendo los cαlculos de fuerzas a los nodos vecinos. El algoritmo se para a sν mismo ya que tiene un plan de enfriamiento adaptativo. YifanHuProportional.name=Yifan Hu Proporcional - -YifanHuProportional.description=Versi\u00f3n modificada de Yifan Hu que usa un plan de desplazamiento proporcional. - -YifanHu.optimalDistance.name=Distancia \u00f3ptima - -YifanHu.optimalDistance.desc=La distancia el\u00e1stica natural. Valores mayores hacen que los nodos queden m\u00e1s alejados. - +YifanHuProportional.description=Versiσn modificada de Yifan Hu que usa un plan de desplazamiento proporcional. +YifanHu.optimalDistance.name=Distancia σptima +YifanHu.optimalDistance.desc=La distancia elαstica natural. Valores mayores hacen que los nodos queden mαs alejados. YifanHu.relativeStrength.name=Fuerza relativa - -YifanHu.relativeStrength.desc=La fuerza relativa entre la fuerza el\u00e9ctrica (repulsi\u00f3n) y la fuerza el\u00e1stica (atracci\u00f3n). - -YifanHu.initialStepSize.name=Tama\u00f1o de paso inicial - -YifanHu.initialStepSize.desc=El tama\u00f1o de paso inicial utilizado en la fase de integraci\u00f3n. Configurar este valor con un tama\u00f1o adecuado comparado a la distancia \u00f3ptima (10% es un buen punto de inicio). - +YifanHu.relativeStrength.desc=La fuerza relativa entre la fuerza elιctrica (repulsiσn) y la fuerza elαstica (atracciσn). +YifanHu.initialStepSize.name=Tamaρo de paso inicial +YifanHu.initialStepSize.desc=El tamaρo de paso inicial utilizado en la fase de integraciσn. Configurar este valor con un tamaρo adecuado comparado a la distancia σptima (10% es un buen punto de inicio). YifanHu.stepRatio.name=Ratio de paso - -YifanHu.stepRatio.desc=El ratio utilizado para actualizar el tama\u00f1o de paso entre iteraciones. - +YifanHu.stepRatio.desc=El ratio utilizado para actualizar el tamaρo de paso entre iteraciones. YifanHu.adaptativeCooling.name=Enfriamiento adaptativo - -YifanHu.adaptativeCooling.desc=Controla el uso del enfriamiento adaptativo. Es utilizado para ayudar al algoritmo a evitar m\u00ednimos locales - +YifanHu.adaptativeCooling.desc=Controla el uso del enfriamiento adaptativo. Es utilizado para ayudar al algoritmo a evitar mνnimos locales YifanHu.convergenceThreshold.name=Umbral de convergencia - -YifanHu.convergenceThreshold.desc=Energ\u00eda relativa de umbral de convergencia. Valores menores mejoran la precisi\u00f3n. - -YifanHu.quadTreeMaxLevel.name=Nivel m\u00e1ximo de Quadtree - -YifanHu.quadTreeMaxLevel.desc=El nivel m\u00e1ximo a utilizar en la representaci\u00f3n del quadtree. Valores mayores mejoran la precisi\u00f3n. - +YifanHu.convergenceThreshold.desc=Energνa relativa de umbral de convergencia. Valores menores mejoran la precisiσn. +YifanHu.quadTreeMaxLevel.name=Nivel mαximo de Quadtree +YifanHu.quadTreeMaxLevel.desc=El nivel mαximo a utilizar en la representaciσn del quadtree. Valores mayores mejoran la precisiσn. YifanHu.theta.name=Theta - -YifanHu.theta.desc=El par\u00e1metro theta para el criterio de Barnes-Hut. Valores menores mejoran la precisi\u00f3n. +YifanHu.theta.desc=El parαmetro theta para el criterio de Barnes-Hut. Valores menores mejoran la precisiσn. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_fr.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_fr.properties index c86ffe83e9..5b034d4195 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_fr.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_fr.properties @@ -1,47 +1,20 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:02+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - YifanHu.name=Yifan Hu - -YifanHu.description=Mod\u00e8le original de l'attraction-r\u00e9pulsion d'Yifan Hu. R\u00e9duit le co\u00fbt computationnel en restreignant le calcul de force aux voisins. L'algorithme s'arr\u00eate tout seul, gr\u00e2ce \u00e0 un sch\u00e9ma de refroidissement adaptatif. - +YifanHu.description=Modθle original de l'attraction-rιpulsion d'Yifan Hu. Rιduit le coϋt computationnel en restreignant le calcul de force aux voisins. L'algorithme s'arrκte tout seul, grβce ΰ un schιma de refroidissement adaptatif. YifanHuProportional.name=Yifan Hu Proportionnel - -YifanHuProportional.description=Version modifi\u00e9e de Yifan Hu utilisant un sch\u00e9ma de d\u00e9placement proportionnel. - +YifanHuProportional.description=Version modifiιe de Yifan Hu utilisant un schιma de dιplacement proportionnel. YifanHu.optimalDistance.name=Distance optimale - YifanHu.optimalDistance.desc=Longueur naturelle des ressorts. Une plus grande valeur signifie que les noeuds se repousseront plus loin. - YifanHu.relativeStrength.name=Force relative - -YifanHu.relativeStrength.desc=Force relative entre la r\u00e9pulsion et l'attraction. - +YifanHu.relativeStrength.desc=Force relative entre la rιpulsion et l'attraction. YifanHu.initialStepSize.name=Taille du pas initial - -YifanHu.initialStepSize.desc=Utilis\u00e9 dans la phase d'int\u00e9gration. Mettez cette valeur \u00e0 une taille signifiante compar\u00e9e \u00e0 la distance optimale (10% est un bon point de d\u00e9part). - +YifanHu.initialStepSize.desc=Utilisι dans la phase d'intιgration. Mettez cette valeur ΰ une taille signifiante comparιe ΰ la distance optimale (10% est un bon point de dιpart). YifanHu.stepRatio.name=Ratio du pas - -YifanHu.stepRatio.desc=Le ratio utilis\u00e9 pour mettre \u00e0 jour la taille du pas entre it\u00e9rations. - +YifanHu.stepRatio.desc=Le ratio utilisι pour mettre ΰ jour la taille du pas entre itιrations. YifanHu.adaptativeCooling.name=Refroidissement adaptatif - -YifanHu.adaptativeCooling.desc=Contr\u00f4le l'usage du refroidissement adaptatif. Aide l'algorithme de spatialisation \u00e0 \u00e9viter les minima locaux d'\u00e9nergie. - +YifanHu.adaptativeCooling.desc=Contrτle l'usage du refroidissement adaptatif. Aide l'algorithme de spatialisation ΰ ιviter les minima locaux d'ιnergie. YifanHu.convergenceThreshold.name=Seuille de Convergence - -YifanHu.convergenceThreshold.desc=Seuil de convergence de l'\u00e9nergie relative. Une petite valeur augmente la pr\u00e9cision. - +YifanHu.convergenceThreshold.desc=Seuil de convergence de l'ιnergie relative. Une petite valeur augmente la prιcision. YifanHu.quadTreeMaxLevel.name=Niveau Max du Quadtree - -YifanHu.quadTreeMaxLevel.desc=Niveau maximal utilis\u00e9 dans la repr\u00e9sentation quadtree. Une grande valeur augmente la pr\u00e9cision. - +YifanHu.quadTreeMaxLevel.desc=Niveau maximal utilisι dans la reprιsentation quadtree. Une grande valeur augmente la prιcision. YifanHu.theta.name=Theta - -YifanHu.theta.desc=Param\u00e8tre theta de l'algorithme Barnes-Hut. Une petite valeur augmente la pr\u00e9cision. +YifanHu.theta.desc=Paramθtre theta de l'algorithme Barnes-Hut. Une petite valeur augmente la prιcision. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_he.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_he.properties new file mode 100644 index 0000000000..45dc917b48 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_he.properties @@ -0,0 +1,20 @@ +YifanHu.name=Yifan Hu +YifanHu.description=Original Yifan Hu's attraction-repulsion model. Reduce the computational cost by restricting force calculation to the neighborhood. The algorithm stops itself, as it has an adaptative cooling sheme. +YifanHuProportional.name=Yifan Hu Proportional +YifanHuProportional.description=Modified version of Yifan Hu that uses proportional displacement scheme. +YifanHu.optimalDistance.name=Optimal Distance +YifanHu.optimalDistance.desc=The natural length of the springs. Bigger values mean nodes will be farther apart. +YifanHu.relativeStrength.name=Relative Strength +YifanHu.relativeStrength.desc=The relative strength between electrical force (repulsion) and spring force (attraction). +YifanHu.initialStepSize.name=Initial Step size +YifanHu.initialStepSize.desc=The initial step size used in the integration phase. Set this value to a meaningful size compared to the optimal distance (10% is a good starting point). +YifanHu.stepRatio.name=Step ratio +YifanHu.stepRatio.desc=The ratio used to update the step size across iterations. +YifanHu.adaptativeCooling.name=Adaptive Cooling +YifanHu.adaptativeCooling.desc=Controls the use of adaptive cooling. It is used help the layout algoritm to avoid energy local minima. +YifanHu.convergenceThreshold.name=Convergence Threshold +YifanHu.convergenceThreshold.desc=Relative energy convergence threshold. Smaller values mean more accuracy. +YifanHu.quadTreeMaxLevel.name=Quadtree Max Level +YifanHu.quadTreeMaxLevel.desc=The maximum level to be used in the quadtree representation. Greater values mean more accuracy. +YifanHu.theta.name=Theta +YifanHu.theta.desc=The theta parameter for Barnes-Hut opening criteria. Smaller values mean more accuracy. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_hu.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_hu.properties new file mode 100644 index 0000000000..4d1f5a7672 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_hu.properties @@ -0,0 +1,22 @@ + + +YifanHu.initialStepSize.desc=Az integr\u00E1ci\u00F3s f\u00E1zisban haszn\u00E1lt kezdeti l\u00E9p\u00E9sm\u00E9ret. \u00C1ll\u00EDtsa be ezt az \u00E9rt\u00E9ket az optim\u00E1lis t\u00E1vols\u00E1ghoz k\u00E9pest \u00E9rtelmes m\u00E9retre (10% j\u00F3 kiindul\u00E1si pont). +YifanHu.relativeStrength.name=Relat\u00EDv er\u0151 +YifanHuProportional.name=Yifan Hu ar\u00E1nyos +YifanHuProportional.description=A Yifan Hu m\u00F3dos\u00EDtott v\u00E1ltozata, amely ar\u00E1nyos eltol\u00E1si s\u00E9m\u00E1t haszn\u00E1l. +YifanHu.relativeStrength.desc=Az elektromos er\u0151 (tasz\u00EDt\u00E1s) \u00E9s a rug\u00F3er\u0151 (vonz\u00E1s) k\u00F6z\u00F6tti relat\u00EDv er\u0151ss\u00E9g. +YifanHu.quadTreeMaxLevel.name=Quadtree Max szint +YifanHu.optimalDistance.name=Optim\u00E1lis t\u00E1vols\u00E1g +YifanHu.adaptativeCooling.desc=Szab\u00E1lyozza az adapt\u00EDv h\u0171t\u00E9s haszn\u00E1lat\u00E1t. Seg\u00EDti az elrendez\u00E9si algoritmust, hogy elker\u00FClje a helyi energiaminimumot. +YifanHu.theta.desc=A th\u00E9ta param\u00E9ter a Barnes-Hut nyit\u00E1si felt\u00E9telekhez. A kisebb \u00E9rt\u00E9kek nagyobb pontoss\u00E1got jelentenek. +YifanHu.theta.name=Theta +YifanHu.stepRatio.desc=A l\u00E9p\u00E9sek m\u00E9ret\u00E9nek friss\u00EDt\u00E9s\u00E9hez haszn\u00E1lt ar\u00E1ny az iter\u00E1ci\u00F3k sor\u00E1n. +YifanHu.optimalDistance.desc=A rug\u00F3k term\u00E9szetes hossza. A nagyobb \u00E9rt\u00E9kek azt jelentik, hogy a csom\u00F3pontok t\u00E1volabb lesznek egym\u00E1st\u00F3l. +YifanHu.stepRatio.name=L\u00E9p\u00E9sar\u00E1ny +YifanHu.quadTreeMaxLevel.desc=A n\u00E9gyfa \u00E1br\u00E1zol\u00E1sban haszn\u00E1lhat\u00F3 maxim\u00E1lis szint. A nagyobb \u00E9rt\u00E9kek nagyobb pontoss\u00E1got jelentenek. +YifanHu.name=Yifan Hu +YifanHu.convergenceThreshold.name=Konvergencia k\u00FCsz\u00F6b +YifanHu.initialStepSize.name=Kezdeti l\u00E9p\u00E9s m\u00E9rete +YifanHu.adaptativeCooling.name=Adapt\u00EDv h\u0171t\u00E9s +YifanHu.description=Eredeti Yifan Hu vonz\u00E1s-tasz\u00EDt\u00F3 modellje. Cs\u00F6kkentse a sz\u00E1m\u00EDt\u00E1si k\u00F6lts\u00E9geket az er\u0151 sz\u00E1m\u00EDt\u00E1s\u00E1nak a k\u00F6rny\u00E9kre val\u00F3 korl\u00E1toz\u00E1s\u00E1val. Az algoritmus le\u00E1ll\u00EDtja mag\u00E1t, mivel adapt\u00EDv h\u0171t\u00E9si v\u00E1zzal rendelkezik. +YifanHu.convergenceThreshold.desc=Relat\u00EDv energiakonvergencia k\u00FCsz\u00F6b. A kisebb \u00E9rt\u00E9kek nagyobb pontoss\u00E1got jelentenek. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_it.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_it.properties new file mode 100644 index 0000000000..45dc917b48 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_it.properties @@ -0,0 +1,20 @@ +YifanHu.name=Yifan Hu +YifanHu.description=Original Yifan Hu's attraction-repulsion model. Reduce the computational cost by restricting force calculation to the neighborhood. The algorithm stops itself, as it has an adaptative cooling sheme. +YifanHuProportional.name=Yifan Hu Proportional +YifanHuProportional.description=Modified version of Yifan Hu that uses proportional displacement scheme. +YifanHu.optimalDistance.name=Optimal Distance +YifanHu.optimalDistance.desc=The natural length of the springs. Bigger values mean nodes will be farther apart. +YifanHu.relativeStrength.name=Relative Strength +YifanHu.relativeStrength.desc=The relative strength between electrical force (repulsion) and spring force (attraction). +YifanHu.initialStepSize.name=Initial Step size +YifanHu.initialStepSize.desc=The initial step size used in the integration phase. Set this value to a meaningful size compared to the optimal distance (10% is a good starting point). +YifanHu.stepRatio.name=Step ratio +YifanHu.stepRatio.desc=The ratio used to update the step size across iterations. +YifanHu.adaptativeCooling.name=Adaptive Cooling +YifanHu.adaptativeCooling.desc=Controls the use of adaptive cooling. It is used help the layout algoritm to avoid energy local minima. +YifanHu.convergenceThreshold.name=Convergence Threshold +YifanHu.convergenceThreshold.desc=Relative energy convergence threshold. Smaller values mean more accuracy. +YifanHu.quadTreeMaxLevel.name=Quadtree Max Level +YifanHu.quadTreeMaxLevel.desc=The maximum level to be used in the quadtree representation. Greater values mean more accuracy. +YifanHu.theta.name=Theta +YifanHu.theta.desc=The theta parameter for Barnes-Hut opening criteria. Smaller values mean more accuracy. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_ja.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_ja.properties index 20752ef209..3d7995cc29 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_ja.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_ja.properties @@ -1,47 +1,21 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-03 02\:26+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -YifanHu.name=\u80e1\u4e00\u51e1 - -YifanHu.description=\u30aa\u30ea\u30b8\u30ca\u30eb\u306e\u80e1\u4e00\u51e1\u306e\u5f15\u529b-\u65a5\u529b\u30e2\u30c7\u30eb\u3002\u96a3\u63a5\u3078\u306e\u529b\u306e\u8a08\u7b97\u3092\u5236\u9650\u3059\u308b\u3053\u3068\u306b\u3088\u308a\u3001\u8a08\u7b97\u30b3\u30b9\u30c8\u3092\u524a\u6e1b\u3002\u305d\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306b\u306f\u9069\u5fdc\u578b\u51b7\u5374\u30b9\u30ad\u30fc\u30e0\u304c\u3042\u308b\u306e\u3067\u3001\u305d\u308c\u81ea\u4f53\u306f\u505c\u6b62\u3057\u307e\u3059\u3002 - -YifanHuProportional.name=\u80e1\u4e00\u51e1\u6bd4\u4f8b\u5f0f - -YifanHuProportional.description=\u6bd4\u4f8b\u5909\u4f4d\u30b9\u30ad\u30fc\u30e0\u3092\u4f7f\u7528\u3057\u305f\u80e1\u4e00\u51e1\u4fee\u6b63\u7248 - -YifanHu.optimalDistance.name=\u6700\u9069\u8ddd\u96e2 - -YifanHu.optimalDistance.desc=\u30d0\u30cd\u306e\u81ea\u7136\u9577\u3002\u5927\u304d\u3044\u5024\u306f\u3001\u30ce\u30fc\u30c9\u304c\u3088\u308a\u9060\u304f\u96e2\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u610f\u5473\u3002 - -YifanHu.relativeStrength.name=\u76f8\u5bfe\u7684\u5f37\u3055 - -YifanHu.relativeStrength.desc=\u96fb\u6c17\u529b(\u65a5\u529b)\u3068\u30d0\u30cd\u529b(\u5f15\u529b)\u3068\u306e\u9593\u306e\u76f8\u5bfe\u7684\u306a\u5f37\u3055\u3002 - -YifanHu.initialStepSize.name=\u521d\u671f\u30b9\u30c6\u30c3\u30d7\u30b5\u30a4\u30ba - -YifanHu.initialStepSize.desc=\u7d71\u5408\u30d5\u30a7\u30fc\u30ba\u3067\u4f7f\u7528\u3055\u308c\u308b\u521d\u671f\u30b9\u30c6\u30c3\u30d7\u30b5\u30a4\u30ba\u3002\u6700\u9069\u306a\u8ddd\u96e2(10\uff05\u306f\u826f\u3044\u51fa\u767a\u70b9\u3067\u3042\u308b)\u3068\u6bd4\u8f03\u3057\u3066\u610f\u5473\u306e\u3042\u308b\u5927\u304d\u3055\u306b\u3053\u306e\u5024\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002 - -YifanHu.stepRatio.name=\u30b9\u30c6\u30c3\u30d7\u6bd4 - -YifanHu.stepRatio.desc=\u6bd4\u7387\u306f\u3001\u53cd\u5fa9\u3054\u3068\u306b\u30b9\u30c6\u30c3\u30d7\u30b5\u30a4\u30ba\u3092\u66f4\u65b0\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3002 - -YifanHu.adaptativeCooling.name=\u9069\u5fdc\u578b\u51b7\u5374 - -YifanHu.adaptativeCooling.desc=\u9069\u5fdc\u578b\u51b7\u5374\u306e\u4f7f\u7528\u3092\u5236\u5fa1\u3057\u307e\u3059\u3002\u30ec\u30a4\u30a2\u30a6\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u304c\u30a8\u30cd\u30eb\u30ae\u30fc\u306e\u6975\u5c0f\u5024\u3092\u907f\u3051\u308b\u306e\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002 - -YifanHu.convergenceThreshold.name=\u53ce\u675f\u95be\u5024 - -YifanHu.convergenceThreshold.desc=\u76f8\u5bfe\u7684\u306a\u30a8\u30cd\u30eb\u30ae\u30fc\u306e\u53ce\u675f\u306e\u95be\u5024\u3002\u5024\u304c\u5c0f\u3055\u3044\u307b\u3069\u7cbe\u78ba\u3002 - -YifanHu.quadTreeMaxLevel.name=\u56db\u5206\u6728\u6700\u5927\u30ec\u30d9\u30eb - -YifanHu.quadTreeMaxLevel.desc=\u56db\u5206\u6728\u8868\u73fe\u3067\u4f7f\u7528\u3055\u308c\u308b\u6700\u5927\u306e\u30ec\u30d9\u30eb\u3002\u5024\u304c\u5927\u304d\u3044\u307b\u3069\u7cbe\u78ba\u3002 - -YifanHu.theta.name=\u03b8\u5024 - -YifanHu.theta.desc=Barnes-Hut\u306e\u958b\u59cb\u57fa\u6e96\u306e\u03b8\u30d1\u30e9\u30e1\u30fc\u30bf\u3002\u5024\u304c\u5c0f\u3055\u3044\u307b\u3069\u7cbe\u78ba\u3002 +YifanHu.name=\u80e1\u4e00\u51e1 +YifanHu.description=\u30aa\u30ea\u30b8\u30ca\u30eb\u306e\u80e1\u4e00\u51e1\u306e\u5f15\u529b-\u65a5\u529b\u30e2\u30c7\u30eb\u3002\u96a3\u63a5\u3078\u306e\u529b\u306e\u8a08\u7b97\u3092\u5236\u9650\u3059\u308b\u3053\u3068\u306b\u3088\u308a\u3001\u8a08\u7b97\u30b3\u30b9\u30c8\u3092\u524a\u6e1b\u3002\u305d\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u306b\u306f\u9069\u5fdc\u578b\u51b7\u5374\u30b9\u30ad\u30fc\u30e0\u304c\u3042\u308b\u306e\u3067\u3001\u305d\u308c\u81ea\u4f53\u306f\u505c\u6b62\u3057\u307e\u3059\u3002 +YifanHuProportional.name=\u80e1\u4e00\u51e1\u6bd4\u4f8b\u5f0f +YifanHuProportional.description=\u6bd4\u4f8b\u5909\u4f4d\u30b9\u30ad\u30fc\u30e0\u3092\u4f7f\u7528\u3057\u305f\u80e1\u4e00\u51e1\u4fee\u6b63\u7248 + +YifanHu.optimalDistance.name=\u6700\u9069\u8ddd\u96e2 +YifanHu.optimalDistance.desc=\u30d0\u30cd\u306e\u81ea\u7136\u9577\u3002\u5927\u304d\u3044\u5024\u306f\u3001\u30ce\u30fc\u30c9\u304c\u3088\u308a\u9060\u304f\u96e2\u308c\u3066\u3044\u308b\u3053\u3068\u3092\u610f\u5473\u3002 +YifanHu.relativeStrength.name=\u76f8\u5bfe\u7684\u5f37\u3055 +YifanHu.relativeStrength.desc=\u96fb\u6c17\u529b(\u65a5\u529b)\u3068\u30d0\u30cd\u529b(\u5f15\u529b)\u3068\u306e\u9593\u306e\u76f8\u5bfe\u7684\u306a\u5f37\u3055\u3002 +YifanHu.initialStepSize.name=\u521d\u671f\u30b9\u30c6\u30c3\u30d7\u30b5\u30a4\u30ba +YifanHu.initialStepSize.desc=\u7d71\u5408\u30d5\u30a7\u30fc\u30ba\u3067\u4f7f\u7528\u3055\u308c\u308b\u521d\u671f\u30b9\u30c6\u30c3\u30d7\u30b5\u30a4\u30ba\u3002\u6700\u9069\u306a\u8ddd\u96e2(10\uff05\u306f\u826f\u3044\u51fa\u767a\u70b9\u3067\u3042\u308b)\u3068\u6bd4\u8f03\u3057\u3066\u610f\u5473\u306e\u3042\u308b\u5927\u304d\u3055\u306b\u3053\u306e\u5024\u3092\u8a2d\u5b9a\u3057\u307e\u3059\u3002 +YifanHu.stepRatio.name=\u30b9\u30c6\u30c3\u30d7\u6bd4 +YifanHu.stepRatio.desc=\u6bd4\u7387\u306f\u3001\u53cd\u5fa9\u3054\u3068\u306b\u30b9\u30c6\u30c3\u30d7\u30b5\u30a4\u30ba\u3092\u66f4\u65b0\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3002 +YifanHu.adaptativeCooling.name=\u9069\u5fdc\u578b\u51b7\u5374 +YifanHu.adaptativeCooling.desc=\u9069\u5fdc\u578b\u51b7\u5374\u306e\u4f7f\u7528\u3092\u5236\u5fa1\u3057\u307e\u3059\u3002\u30ec\u30a4\u30a2\u30a6\u30c8\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u304c\u30a8\u30cd\u30eb\u30ae\u30fc\u306e\u6975\u5c0f\u5024\u3092\u907f\u3051\u308b\u306e\u306b\u4f7f\u7528\u3055\u308c\u307e\u3059\u3002 +YifanHu.convergenceThreshold.name=\u53ce\u675f\u95be\u5024 +YifanHu.convergenceThreshold.desc=\u76f8\u5bfe\u7684\u306a\u30a8\u30cd\u30eb\u30ae\u30fc\u306e\u53ce\u675f\u306e\u95be\u5024\u3002\u5024\u304c\u5c0f\u3055\u3044\u307b\u3069\u7cbe\u78ba\u3002 +YifanHu.quadTreeMaxLevel.name=\u56db\u5206\u6728\u6700\u5927\u30ec\u30d9\u30eb +# YifanHu.quadTreeMaxLevel.desc=The maximum level to be used in the quadtree representation. Greater values mean more accuracy. +YifanHu.theta.name=\u03b8\u5024 +YifanHu.theta.desc=Barnes-Hut\u306e\u958b\u59cb\u57fa\u6e96\u306e\u03b8\u30d1\u30e9\u30e1\u30fc\u30bf\u3002\u5024\u304c\u5c0f\u3055\u3044\u307b\u3069\u7cbe\u78ba\u3002 diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_ko.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_ko.properties new file mode 100644 index 0000000000..2e4ca59b20 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_ko.properties @@ -0,0 +1,22 @@ + + +YifanHu.description=Yifan Hu\uC758 \uC6D0\uC870 \uC778\uB825-\uCC99\uB825 \uBAA8\uB378. \uD798 \uACC4\uC0B0\uC744 \uC774\uC6C3\uC73C\uB85C \uC81C\uD55C\uD558\uC5EC \uACC4\uC0B0 \uBE44\uC6A9\uC744 \uC904\uC778\uB2E4. \uC54C\uACE0\uB9AC\uB4EC\uC740 \uC801\uC751\uD615 \uB0C9\uAC01 \uCCB4\uACC4\uB97C \uAC00\uC9C0\uACE0 \uC788\uAE30 \uB54C\uBB38\uC5D0 \uC2A4\uC2A4\uB85C \uBA48\uCD94\uAC8C \uB41C\uB2E4. +YifanHuProportional.name=Yufab Hu \uBE44\uB840 \uBC30\uCE58 \uC54C\uACE0\uB9AC\uC998 +YifanHuProportional.description=\uBE44\uB840 \uBCC0\uC704 \uBC29\uC2DD\uC744 \uC0AC\uC6A9\uD558\uB294 Yifan Hu\uC758 \uAC1C\uC120\uB41C \uBC84\uC804. +YifanHu.optimalDistance.name=\uCD5C\uC801 \uAC70\uB9AC +YifanHu.optimalDistance.desc=\uC2A4\uD504\uB9C1\uC758 \uC6D0\uB798 \uAE38\uC774. \uB354 \uD070 \uAC12\uC740 \uB178\uB4DC\uAC00 \uB354 \uBA40\uB9AC \uC788\uB2E4\uB294 \uB73B\uC774\uB2E4. +YifanHu.relativeStrength.name=\uC0C1\uB300 \uAC15\uB3C4 +YifanHu.relativeStrength.desc=\uC804\uAE30\uB825(\uCC99\uB825)\uACFC \uC2A4\uD504\uB9C1\uB825(\uC778\uB825) \uC0AC\uC774\uC758 \uC0C1\uB300\uC801 \uAC15\uB3C4. +YifanHu.stepRatio.name=\uC2A4\uD15D \uBE44\uC728 +YifanHu.initialStepSize.name=\uCD08\uAE30 \uC2A4\uD15D \uD06C\uAE30 +YifanHu.initialStepSize.desc=\uD1B5\uD569 \uB2E8\uACC4\uC5D0\uC11C \uC0AC\uC6A9\uB41C \uCD08\uAE30 \uC2A4\uD15D \uD06C\uAE30. \uC774 \uAC12\uC744 \uCD5C\uC801 \uAC70\uB9AC\uC640 \uBE44\uAD50\uD558\uC5EC \uC758\uBBF8 \uC788\uB294 \uD06C\uAE30\uB85C \uC124\uC815\uD558\uC138\uC694(10%\uB294 \uC88B\uC740 \uC2DC\uC791\uC810\uC785\uB2C8\uB2E4). +YifanHu.name=\uC774\uD310\uD6C4(Yifan Hu) +YifanHu.stepRatio.desc=\uC774 \uBE44\uC728\uC740 \uBC18\uBCF5 \uAC04 \uC2A4\uD15D \uD06C\uAE30\uB97C \uC5C5\uB370\uC774\uD2B8\uD558\uB294 \uB370 \uC0AC\uC6A9\uB41C\uB2E4. +YifanHu.adaptativeCooling.name=\uC801\uC751\uD615 \uB0C9\uAC01 +YifanHu.adaptativeCooling.desc=\uC801\uC751\uD615 \uB0C9\uAC01\uC758 \uC0AC\uC6A9\uC744 \uC81C\uC5B4\uD568. \uBC30\uCE58 \uC54C\uACE0\uB9AC\uB4EC\uC5D0\uC11C \uC5D0\uB108\uC9C0 \uB85C\uCEEC \uCD5C\uC800\uCE58\uB97C \uD53C\uD558\uAE30 \uC704\uD574 \uC0AC\uC6A9\uB41C\uB2E4. +YifanHu.convergenceThreshold.name=\uC218\uB834 \uC784\uACC4\uCE58 +YifanHu.convergenceThreshold.desc=\uC0C1\uB300\uC801 \uC5D0\uB108\uC9C0 \uC218\uB834 \uC784\uACC4\uCE58. \uB354 \uC791\uC740 \uAC12\uC774 \uB354 \uC815\uD655\uD568\uC744 \uB73B\uD55C\uB2E4. +YifanHu.quadTreeMaxLevel.name=\uCFFC\uB4DC\uD2B8\uB9AC \uCD5C\uB300 \uC218\uC900 +YifanHu.quadTreeMaxLevel.desc=\uCFFC\uB4DC\uD2B8\uB9AC \uD45C\uD604\uC5D0 \uC0AC\uC6A9\uB420 \uCD5C\uB300 \uC218\uC900. \uB354 \uD070 \uAC12\uC774 \uB354 \uC815\uD655\uD568\uC744 \uC758\uBBF8\uD55C\uB2E4. +YifanHu.theta.name=\uC384\uD0C0 +YifanHu.theta.desc=Barnes-Hut \uAC1C\uBC29 \uAE30\uC900\uC744 \uC704\uD55C \uC384\uD0C0 \uB9E4\uAC1C\uBCC0\uC218 . \uB354 \uC791\uC740 \uAC12\uC774 \uB354 \uC815\uD655\uD568\uC744 \uC758\uBBF8\uD55C\uB2E4. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_nl.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_nl.properties new file mode 100644 index 0000000000..45dc917b48 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_nl.properties @@ -0,0 +1,20 @@ +YifanHu.name=Yifan Hu +YifanHu.description=Original Yifan Hu's attraction-repulsion model. Reduce the computational cost by restricting force calculation to the neighborhood. The algorithm stops itself, as it has an adaptative cooling sheme. +YifanHuProportional.name=Yifan Hu Proportional +YifanHuProportional.description=Modified version of Yifan Hu that uses proportional displacement scheme. +YifanHu.optimalDistance.name=Optimal Distance +YifanHu.optimalDistance.desc=The natural length of the springs. Bigger values mean nodes will be farther apart. +YifanHu.relativeStrength.name=Relative Strength +YifanHu.relativeStrength.desc=The relative strength between electrical force (repulsion) and spring force (attraction). +YifanHu.initialStepSize.name=Initial Step size +YifanHu.initialStepSize.desc=The initial step size used in the integration phase. Set this value to a meaningful size compared to the optimal distance (10% is a good starting point). +YifanHu.stepRatio.name=Step ratio +YifanHu.stepRatio.desc=The ratio used to update the step size across iterations. +YifanHu.adaptativeCooling.name=Adaptive Cooling +YifanHu.adaptativeCooling.desc=Controls the use of adaptive cooling. It is used help the layout algoritm to avoid energy local minima. +YifanHu.convergenceThreshold.name=Convergence Threshold +YifanHu.convergenceThreshold.desc=Relative energy convergence threshold. Smaller values mean more accuracy. +YifanHu.quadTreeMaxLevel.name=Quadtree Max Level +YifanHu.quadTreeMaxLevel.desc=The maximum level to be used in the quadtree representation. Greater values mean more accuracy. +YifanHu.theta.name=Theta +YifanHu.theta.desc=The theta parameter for Barnes-Hut opening criteria. Smaller values mean more accuracy. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_pt_BR.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_pt_BR.properties index 55ca1ab0c6..68c8d33a12 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_pt_BR.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_pt_BR.properties @@ -1,47 +1,20 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 23\:21+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - YifanHu.name=Yifan Hu - -YifanHu.description=Modelo original de atra\u00e7\u00e3o-repuls\u00e3o de Yifan Hu. Reduz o custo computacional por meio da realiza\u00e7\u00e3o do c\u00e1lculo de for\u00e7a apenas em rela\u00e7\u00e3o aos n\u00f3s vizinhos. O algoritmo \u00e9 capaz de parar por si s\u00f3, j\u00e1 que possui um sistema de resfriamento adaptativo. - +YifanHu.description=Modelo original de atraηγo-repulsγo de Yifan Hu. Reduz o custo computacional por meio da realizaηγo do cαlculo de forηa apenas em relaηγo aos nσs vizinhos. O algoritmo ι capaz de parar por si sσ, jα que possui um sistema de resfriamento adaptativo. YifanHuProportional.name=Yifan Hu proporcional - -YifanHuProportional.description=Vers\u00e3o modificada do algoritmo Yifan Hu que usa um plano de deslocamento proporcional. - -YifanHu.optimalDistance.name=Dist\u00e2ncia \u00f3tima - -YifanHu.optimalDistance.desc=Dist\u00e2ncia el\u00e1stica natural. Valores maiores fazem com que os n\u00f3s fiquem mais distantes. - -YifanHu.relativeStrength.name=For\u00e7a Relativa - -YifanHu.relativeStrength.desc=A for\u00e7a relativa entre a for\u00e7a el\u00e9trica (repuls\u00e3o) e a for\u00e7a el\u00e1stica (atra\u00e7\u00e3o). - +YifanHuProportional.description=Versγo modificada do algoritmo Yifan Hu que usa um plano de deslocamento proporcional. +YifanHu.optimalDistance.name=Distβncia σtima +YifanHu.optimalDistance.desc=Distβncia elαstica natural. Valores maiores fazem com que os nσs fiquem mais distantes. +YifanHu.relativeStrength.name=Forηa Relativa +YifanHu.relativeStrength.desc=A forηa relativa entre a forηa elιtrica (repulsγo) e a forηa elαstica (atraηγo). YifanHu.initialStepSize.name=Tamanho inicial do passo - -YifanHu.initialStepSize.desc=Tamanho inicial do passo utilizado na fase de integra\u00e7\u00e3o. Configure este valor para um valor adequado comparado \u00e0 dist\u00e2ncia \u00f3tima (10% \u00e9 um bom ponto de in\u00edcio). - -YifanHu.stepRatio.name=Rela\u00e7\u00e3o de passo - -YifanHu.stepRatio.desc=A raz\u00e3o usada para atualizar o tamanho do passo entre itera\u00e7\u00f5es. - +YifanHu.initialStepSize.desc=Tamanho inicial do passo utilizado na fase de integraηγo. Configure este valor para um valor adequado comparado ΰ distβncia σtima (10% ι um bom ponto de inνcio). +YifanHu.stepRatio.name=Relaηγo de passo +YifanHu.stepRatio.desc=A razγo usada para atualizar o tamanho do passo entre iteraηυes. YifanHu.adaptativeCooling.name=Resfriamento adaptativo - -YifanHu.adaptativeCooling.desc=Controla o uso do resfriamento adaptativo. \u00c9 usado para ajudar o algoritmo de distribui\u00e7\u00e3o a evitar m\u00ednimos locais de energia. - -YifanHu.convergenceThreshold.name=Limiar de converg\u00eancia - -YifanHu.convergenceThreshold.desc=Energia relativa do limiar de converg\u00eancia. Valores menores melhoram a precis\u00e3o. - -YifanHu.quadTreeMaxLevel.name=N\u00edvel m\u00e1ximo Quadtree - -YifanHu.quadTreeMaxLevel.desc=N\u00edvel m\u00e1ximo a ser utilizado pela representa\u00e7\u00e3o quadtree. Valores maiores melhoram a precis\u00e3o. - +YifanHu.adaptativeCooling.desc=Controla o uso do resfriamento adaptativo. Ι usado para ajudar o algoritmo de distribuiηγo a evitar mνnimos locais de energia. +YifanHu.convergenceThreshold.name=Limiar de convergκncia +YifanHu.convergenceThreshold.desc=Energia relativa do limiar de convergκncia. Valores menores melhoram a precisγo. +YifanHu.quadTreeMaxLevel.name=Nνvel mαximo Quadtree +# YifanHu.quadTreeMaxLevel.desc=The maximum level to be used in the quadtree representation. Greater values mean more accuracy. YifanHu.theta.name=Theta - -YifanHu.theta.desc=Par\u00e2metro theta do crit\u00e9rio de Barnes-Hut. Valores menores melhoram a precis\u00e3o. +YifanHu.theta.desc=Parβmetro theta do critιrio de Barnes-Hut. Valores menores melhoram a precisγo. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_ro.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_ro.properties new file mode 100644 index 0000000000..9036217c83 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_ro.properties @@ -0,0 +1,22 @@ + + +YifanHu.optimalDistance.name=Distan\u021Ba optim\u0103 +YifanHu.adaptativeCooling.name=R\u0103cire adaptiv\u0103 +YifanHu.name=Yifan Hu +YifanHu.description=Modelul original de atrac\u021Bie-repulsie al lui Yifan Hu. Reduce costul computa\u021Bional prin limitarea calculului for\u021Bei la vecin\u0103tate. Algoritmul se opre\u0219te singur, deoarece are o shem\u0103 adaptiv\u0103 de "r\u0103cire". +YifanHu.initialStepSize.desc=Dimensiunea pasului ini\u021Bial utilizat \u00EEn faza de integrare. Seteaz\u0103 aceast\u0103 valoare la o dimensiune semnificativ\u0103 relativ la distan\u021Ba optim\u0103 (10% este un bun punct de plecare). +YifanHu.relativeStrength.desc=T\u0103ria relativ\u0103 dintre for\u021Ba electric\u0103 (repulsie) \u0219i for\u021Ba elastic\u0103 (atrac\u021Bie). +YifanHuProportional.name=Yifan Hu Propor\u021Bional +YifanHu.optimalDistance.desc=Lungimea natural\u0103 a arcurilor. O valoare mai mare \u00EEnseamn\u0103 c\u0103 nodurile vor fi mai dep\u0103rtate. +YifanHu.relativeStrength.name=T\u0103rie relativ\u0103 +YifanHu.initialStepSize.name=Dimensiunea pasului ini\u021Bial +YifanHu.stepRatio.name=Raportul pasului +YifanHu.stepRatio.desc=Raportul utilizat pentru actualizarea dimensiunii pasului \u00EEntre itera\u021Bii. +YifanHu.adaptativeCooling.desc=Controleaz\u0103 utilizarea r\u0103cirii adaptive. Ajut\u0103 algoritmul s\u0103 evite minime locale energetice. +YifanHu.convergenceThreshold.name=Pragul de convergen\u021B\u0103 +YifanHu.convergenceThreshold.desc=Pragul relativ de convergen\u021B\u0103 al energiei. O valoare mai mic\u0103 \u00EEnseamn\u0103 mai mult\u0103 precizie. +YifanHu.quadTreeMaxLevel.name=Nivelul maxim Quadtree +YifanHu.quadTreeMaxLevel.desc=Nivelul maxim care urmeaz\u0103 s\u0103 fie utilizat \u00EEn reprezentarea quadtree. O valoare mai mare \u00EEnseamn\u0103 mai mult\u0103 precizie. +YifanHu.theta.name=Teta +YifanHuProportional.description=Versiune modificat\u0103 a algoritmului lui Yifan Hu care utilizeaz\u0103 o schem\u0103 de dislocare propor\u021Bional\u0103. +YifanHu.theta.desc=Parametrul teta pentru criteriul de deschidere Barnes-Hut. O valoare mai mic\u0103 \u00EEnseamn\u0103 mai mult\u0103 precizie. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_ru.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_ru.properties index 20124ecc7b..b1905d5795 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_ru.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_ru.properties @@ -1,47 +1,20 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-14 07\:40+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - YifanHu.name=Yifan Hu - YifanHu.description=\u041c\u043e\u0434\u0435\u043b\u044c \u043f\u0440\u0438\u0442\u044f\u0436\u0435\u043d\u0438\u044f-\u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043d\u0438\u044f Yifan Hu. \u0414\u043b\u044f \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044f \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0440\u0430\u0441\u0447\u0451\u0442 \u0441\u0438\u043b \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432. \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043e\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0441\u0430\u043c. - YifanHuProportional.name=Yifan Hu Proportional - YifanHuProportional.description=\u041c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0443\u043a\u043b\u0430\u0434\u043a\u0438 Yifan Hu, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0430\u044f \u0441\u0445\u0435\u043c\u0443 \u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043c\u0435\u0449\u0435\u043d\u0438\u044f. - YifanHu.optimalDistance.name=\u041e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 - YifanHu.optimalDistance.desc="\u0415\u0441\u0442\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u0430\u044f" \u0434\u043b\u0438\u043d\u0430 \u0440\u0435\u0431\u0435\u0440. \u0423\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0432\u0437\u0430\u0438\u043c\u043d\u043e\u043c\u0443 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044e \u0443\u0437\u043b\u043e\u0432 \u0432 \u0443\u043a\u043b\u0430\u0434\u043a\u0435. - YifanHu.relativeStrength.name=\u041e\u0442\u043d\u043e\u0441\u0438\u0442\u0435\u043b\u044c\u043d\u0430\u044f \u0441\u0438\u043b\u0430 - YifanHu.relativeStrength.desc=\u041f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u0441\u0438\u043b\u043e\u0439 \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043d\u0438\u044f \u0438 \u0441\u0438\u043b\u043e\u0439 \u043f\u0440\u0438\u0442\u044f\u0436\u0435\u043d\u0438\u044f. - YifanHu.initialStepSize.name=\u041d\u0430\u0447\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 \u0448\u0430\u0433\u0430 - YifanHu.initialStepSize.desc=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043d\u0430 \u0441\u0442\u0430\u0434\u0438\u0438 \u0438\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0438\u0438. \u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u0441\u0440\u0430\u0432\u043d\u0438\u043c\u044b\u0435 \u0441\u043e \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435\u043c \u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 10%). - YifanHu.stepRatio.name=\u0418\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0448\u0430\u0433\u0430 - YifanHu.stepRatio.desc=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0448\u0430\u0433\u0430 \u043c\u0435\u0436\u0434\u0443 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f\u043c\u0438 - YifanHu.adaptativeCooling.name=\u0410\u0434\u0430\u043f\u0442\u0438\u0432\u043d\u043e\u0435 \u043e\u0445\u043b\u0430\u0436\u0434\u0435\u043d\u0438\u0435 - YifanHu.adaptativeCooling.desc=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u044f \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0445 \u043c\u0438\u043d\u0438\u043c\u0443\u043c\u043e\u0432 \u044d\u043d\u0435\u0440\u0433\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. - YifanHu.convergenceThreshold.name=\u041f\u043e\u0440\u043e\u0433 \u0441\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 - YifanHu.convergenceThreshold.desc=\u041f\u043e\u0440\u043e\u0433 \u0441\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u043f\u043e \u044d\u043d\u0435\u0440\u0433\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b. \u041c\u0435\u043d\u044c\u0448\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438. - YifanHu.quadTreeMaxLevel.name=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c Quadtree - -YifanHu.quadTreeMaxLevel.desc=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0443\u0440\u043e\u0432\u0435\u043d\u044c \u0432 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 quadtree. \u0411\u043e\u043b\u044c\u0448\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438. - +# YifanHu.quadTreeMaxLevel.desc=The maximum level to be used in the quadtree representation. Greater values mean more accuracy. YifanHu.theta.name=Theta - YifanHu.theta.desc=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0434\u043b\u044f \u043a\u0440\u0438\u0442\u0435\u0440\u0438\u044f Barnes-Hut. \u041c\u0435\u043d\u044c\u0448\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_th.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_tr.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_tr.properties new file mode 100644 index 0000000000..45dc917b48 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_tr.properties @@ -0,0 +1,20 @@ +YifanHu.name=Yifan Hu +YifanHu.description=Original Yifan Hu's attraction-repulsion model. Reduce the computational cost by restricting force calculation to the neighborhood. The algorithm stops itself, as it has an adaptative cooling sheme. +YifanHuProportional.name=Yifan Hu Proportional +YifanHuProportional.description=Modified version of Yifan Hu that uses proportional displacement scheme. +YifanHu.optimalDistance.name=Optimal Distance +YifanHu.optimalDistance.desc=The natural length of the springs. Bigger values mean nodes will be farther apart. +YifanHu.relativeStrength.name=Relative Strength +YifanHu.relativeStrength.desc=The relative strength between electrical force (repulsion) and spring force (attraction). +YifanHu.initialStepSize.name=Initial Step size +YifanHu.initialStepSize.desc=The initial step size used in the integration phase. Set this value to a meaningful size compared to the optimal distance (10% is a good starting point). +YifanHu.stepRatio.name=Step ratio +YifanHu.stepRatio.desc=The ratio used to update the step size across iterations. +YifanHu.adaptativeCooling.name=Adaptive Cooling +YifanHu.adaptativeCooling.desc=Controls the use of adaptive cooling. It is used help the layout algoritm to avoid energy local minima. +YifanHu.convergenceThreshold.name=Convergence Threshold +YifanHu.convergenceThreshold.desc=Relative energy convergence threshold. Smaller values mean more accuracy. +YifanHu.quadTreeMaxLevel.name=Quadtree Max Level +YifanHu.quadTreeMaxLevel.desc=The maximum level to be used in the quadtree representation. Greater values mean more accuracy. +YifanHu.theta.name=Theta +YifanHu.theta.desc=The theta parameter for Barnes-Hut opening criteria. Smaller values mean more accuracy. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_uk.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_uk.properties new file mode 100644 index 0000000000..8e7e32e66e --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_uk.properties @@ -0,0 +1,20 @@ +YifanHu.description=\u041E\u0440\u0438\u0433\u0456\u043D\u0430\u043B\u044C\u043D\u0430 \u043C\u043E\u0434\u0435\u043B\u044C \u043F\u0440\u0438\u0442\u044F\u0433\u0430\u043D\u043D\u044F-\u0432\u0456\u0434\u0448\u0442\u043E\u0432\u0445\u0443\u0432\u0430\u043D\u043D\u044F \u0406\u0444\u0430\u043D\u044C \u0425\u0443. \u0417\u043C\u0435\u043D\u0448\u0442\u0435 \u0432\u0438\u0442\u0440\u0430\u0442\u0438 \u043D\u0430 \u043E\u0431\u0447\u0438\u0441\u043B\u0435\u043D\u043D\u044F, \u043E\u0431\u043C\u0435\u0436\u0438\u0432\u0448\u0438 \u043E\u0431\u0447\u0438\u0441\u043B\u0435\u043D\u043D\u044F \u0441\u0438\u043B\u0438 \u043E\u043A\u043E\u043B\u0438\u0446\u044F\u043C\u0438. \u0410\u043B\u0433\u043E\u0440\u0438\u0442\u043C \u0437\u0443\u043F\u0438\u043D\u044F\u0454\u0442\u044C\u0441\u044F \u0441\u0430\u043C, \u043E\u0441\u043A\u0456\u043B\u044C\u043A\u0438 \u043C\u0430\u0454 \u0430\u0434\u0430\u043F\u0442\u0438\u0432\u043D\u0443 \u0441\u0445\u0435\u043C\u0443 \u043E\u0445\u043E\u043B\u043E\u0434\u0436\u0435\u043D\u043D\u044F. +YifanHu.initialStepSize.desc=\u041F\u043E\u0447\u0430\u0442\u043A\u043E\u0432\u0438\u0439 \u0440\u043E\u0437\u043C\u0456\u0440 \u043A\u0440\u043E\u043A\u0443, \u044F\u043A\u0438\u0439 \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0454\u0442\u044C\u0441\u044F \u043D\u0430 \u0435\u0442\u0430\u043F\u0456 \u0456\u043D\u0442\u0435\u0433\u0440\u0430\u0446\u0456\u0457. \u0412\u0441\u0442\u0430\u043D\u043E\u0432\u0456\u0442\u044C \u0434\u043B\u044F \u0446\u044C\u043E\u0433\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0437\u043D\u0430\u0447\u0443\u0449\u0438\u0439 \u0440\u043E\u0437\u043C\u0456\u0440 \u043F\u043E\u0440\u0456\u0432\u043D\u044F\u043D\u043E \u0437 \u043E\u043F\u0442\u0438\u043C\u0430\u043B\u044C\u043D\u043E\u044E \u0432\u0456\u0434\u0441\u0442\u0430\u043D\u043D\u044E (10\u00A0% \u2014 \u0445\u043E\u0440\u043E\u0448\u0430 \u043F\u043E\u0447\u0430\u0442\u043A\u043E\u0432\u0430 \u0442\u043E\u0447\u043A\u0430). +YifanHuProportional.name=\u0406\u0444\u0430\u043D\u044C \u0425\u0443 \u041F\u0440\u043E\u043F\u043E\u0440\u0446\u0456\u0439\u043D\u0438\u0439 +YifanHuProportional.description=\u041C\u043E\u0434\u0438\u0444\u0456\u043A\u043E\u0432\u0430\u043D\u0430 \u0432\u0435\u0440\u0441\u0456\u044F Yifan Hu, \u044F\u043A\u0430 \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0454 \u0441\u0445\u0435\u043C\u0443 \u043F\u0440\u043E\u043F\u043E\u0440\u0446\u0456\u0439\u043D\u043E\u0433\u043E \u0437\u043C\u0456\u0449\u0435\u043D\u043D\u044F. +YifanHu.name=\u0406\u0444\u0430\u043D\u044C \u0425\u0443 +YifanHu.optimalDistance.desc=\u041F\u0440\u0438\u0440\u043E\u0434\u043D\u0430 \u0434\u043E\u0432\u0436\u0438\u043D\u0430 \u043F\u0440\u0443\u0436\u0438\u043D. \u0411\u0456\u043B\u044C\u0448\u0456 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u043E\u0437\u043D\u0430\u0447\u0430\u044E\u0442\u044C, \u0449\u043E \u0432\u0443\u0437\u043B\u0438 \u0431\u0443\u0434\u0443\u0442\u044C \u0434\u0430\u043B\u0456 \u043E\u0434\u0438\u043D \u0432\u0456\u0434 \u043E\u0434\u043D\u043E\u0433\u043E. +YifanHu.relativeStrength.name=\u0412\u0456\u0434\u043D\u043E\u0441\u043D\u0430 \u0441\u0438\u043B\u0430 +YifanHu.relativeStrength.desc=\u0412\u0456\u0434\u043D\u043E\u0441\u043D\u0430 \u0441\u0438\u043B\u0430 \u043C\u0456\u0436 \u0435\u043B\u0435\u043A\u0442\u0440\u0438\u0447\u043D\u043E\u044E \u0441\u0438\u043B\u043E\u044E (\u0432\u0456\u0434\u0448\u0442\u043E\u0432\u0445\u0443\u0432\u0430\u043D\u043D\u044F) \u0456 \u0441\u0438\u043B\u043E\u044E \u043F\u0440\u0443\u0436\u0438\u043D\u0438 (\u0442\u044F\u0436\u0456\u043D\u043D\u044F). +YifanHu.initialStepSize.name=\u0420\u043E\u0437\u043C\u0456\u0440 \u043F\u043E\u0447\u0430\u0442\u043A\u043E\u0432\u043E\u0433\u043E \u043A\u0440\u043E\u043A\u0443 +YifanHu.stepRatio.name=\u041A\u043E\u0435\u0444\u0456\u0446\u0456\u0454\u043D\u0442 \u043A\u0440\u043E\u043A\u0443 +YifanHu.stepRatio.desc=\u0421\u043F\u0456\u0432\u0432\u0456\u0434\u043D\u043E\u0448\u0435\u043D\u043D\u044F, \u044F\u043A\u0435 \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0454\u0442\u044C\u0441\u044F \u0434\u043B\u044F \u043E\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u044F \u0440\u043E\u0437\u043C\u0456\u0440\u0443 \u043A\u0440\u043E\u043A\u0443 \u043C\u0456\u0436 \u0456\u0442\u0435\u0440\u0430\u0446\u0456\u044F\u043C\u0438. +YifanHu.adaptativeCooling.name=\u0410\u0434\u0430\u043F\u0442\u0438\u0432\u043D\u0435 \u043E\u0445\u043E\u043B\u043E\u0434\u0436\u0435\u043D\u043D\u044F +YifanHu.adaptativeCooling.desc=\u041A\u0435\u0440\u0443\u0454 \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u0430\u043D\u043D\u044F\u043C \u0430\u0434\u0430\u043F\u0442\u0438\u0432\u043D\u043E\u0433\u043E \u043E\u0445\u043E\u043B\u043E\u0434\u0436\u0435\u043D\u043D\u044F. \u0412\u0456\u043D \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0454\u0442\u044C\u0441\u044F \u0434\u043B\u044F \u0434\u043E\u043F\u043E\u043C\u043E\u0433\u0438 \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C\u0443 \u043A\u043E\u043C\u043F\u043E\u043D\u0443\u0432\u0430\u043D\u043D\u044F, \u0449\u043E\u0431 \u0443\u043D\u0438\u043A\u043D\u0443\u0442\u0438 \u043B\u043E\u043A\u0430\u043B\u044C\u043D\u0438\u0445 \u043C\u0456\u043D\u0456\u043C\u0443\u043C\u0456\u0432 \u0435\u043D\u0435\u0440\u0433\u0456\u0457. +YifanHu.convergenceThreshold.desc=\u041F\u043E\u0440\u0456\u0433 \u0432\u0456\u0434\u043D\u043E\u0441\u043D\u043E\u0457 \u0435\u043D\u0435\u0440\u0433\u0435\u0442\u0438\u0447\u043D\u043E\u0457 \u043A\u043E\u043D\u0432\u0435\u0440\u0433\u0435\u043D\u0446\u0456\u0457. \u041C\u0435\u043D\u0448\u0456 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u043E\u0437\u043D\u0430\u0447\u0430\u044E\u0442\u044C \u0431\u0456\u043B\u044C\u0448\u0443 \u0442\u043E\u0447\u043D\u0456\u0441\u0442\u044C. +YifanHu.convergenceThreshold.name=\u041F\u043E\u0440\u0456\u0433 \u043A\u043E\u043D\u0432\u0435\u0440\u0433\u0435\u043D\u0446\u0456\u0457 +YifanHu.quadTreeMaxLevel.name=\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0438\u0439 \u0440\u0456\u0432\u0435\u043D\u044C Quadtree +YifanHu.quadTreeMaxLevel.desc=\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0438\u0439 \u0440\u0456\u0432\u0435\u043D\u044C, \u044F\u043A\u0438\u0439 \u0431\u0443\u0434\u0435 \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0432\u0430\u0442\u0438\u0441\u044F \u0443 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u043D\u0456 \u043A\u0432\u0430\u0434\u0440\u043E\u0434\u0435\u0440\u0435\u0432\u0430. \u0411\u0456\u043B\u044C\u0448\u0456 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u043E\u0437\u043D\u0430\u0447\u0430\u044E\u0442\u044C \u0431\u0456\u043B\u044C\u0448\u0443 \u0442\u043E\u0447\u043D\u0456\u0441\u0442\u044C. +YifanHu.theta.name=\u0422\u0435\u0442\u0430 +YifanHu.theta.desc=\u041F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0442\u0435\u0442\u0430 \u0434\u043B\u044F \u043A\u0440\u0438\u0442\u0435\u0440\u0456\u0457\u0432 \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u0442\u044F Barnes-Hut. \u041C\u0435\u043D\u0448\u0456 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u043E\u0437\u043D\u0430\u0447\u0430\u044E\u0442\u044C \u0431\u0456\u043B\u044C\u0448\u0443 \u0442\u043E\u0447\u043D\u0456\u0441\u0442\u044C. +YifanHu.optimalDistance.name=\u041E\u043F\u0442\u0438\u043C\u0430\u043B\u044C\u043D\u0430 \u0432\u0456\u0434\u0441\u0442\u0430\u043D\u044C diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_zh_CN.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_zh_CN.properties index 846fe00916..3af0cdfd7f 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_zh_CN.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_zh_CN.properties @@ -1,47 +1,20 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 04\:21+0000\nLast-Translator\: Xi-Nian Zuo \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - YifanHu.name=Yifan Hu - -YifanHu.description=\u539f\u4e00\u5e06\u80e1\u9526\u6d9b\u7684\u5438\u5f15\u529b\uff0c\u6392\u65a5\u529b\u6a21\u578b\u3002\u51cf\u5c11\u9650\u5236\u529b\u7684\u8ba1\u7b97\u9644\u8fd1\u8ba1\u7b97\u6210\u672c\u3002\u8be5\u7b97\u6cd5\u505c\u6b62\uff0c\u56e0\u4e3a\u5b83\u6709\u4e00\u4e2a\u9002\u5e94\u6027\u7684\u51b7\u5374sheme\u3002 - +YifanHu.description=\u539f\u80e1\u4e00\u51e1\u5438\u5f15\u529b\u7b97\u6cd5\uff0c\u6392\u65a5\u529b\u6a21\u578b\u3002\u51cf\u5c11\u9650\u5236\u529b\u7684\u8ba1\u7b97\u9644\u8fd1\u8ba1\u7b97\u6210\u672c\u3002\u8be5\u7b97\u6cd5\u505c\u6b62\uff0c\u56e0\u4e3a\u5b83\u6709\u4e00\u4e2a\u9002\u5e94\u6027\u7684\u51b7\u5374sheme\u3002 YifanHuProportional.name=Yifan Hu \u6bd4\u4f8b - YifanHuProportional.description=\u8c03\u6574\u7248\u672c\u7684Yifan Hu\u4f7f\u7528\u6bd4\u4f8b\u4f4d\u79fb\u683c\u5f0f. - YifanHu.optimalDistance.name=\u6700\u4f73\u8ddd\u79bb - YifanHu.optimalDistance.desc=\u5f39\u7c27\u81ea\u7136\u957f\u5ea6\u3002\u66f4\u5927\u7684\u503c\u610f\u5473\u7740\u8282\u70b9\u5c06\u76f8\u8ddd\u8f83\u8fdc\u3002 - YifanHu.relativeStrength.name=\u76f8\u5bf9\u5f3a\u5ea6 - YifanHu.relativeStrength.desc=\u7535\u529b\uff08\u65a5\u529b\uff09\u548c\u5f39\u7c27\u529b\uff08\u5438\u5f15\u529b\uff09\u4e4b\u95f4\u7684\u76f8\u5bf9\u5f3a\u5ea6\u3002 - YifanHu.initialStepSize.name=\u521d\u59cb\u6b65\u957f - YifanHu.initialStepSize.desc=\u5728\u6574\u5408\u9636\u6bb5\u7684\u521d\u59cb\u6b65\u957f\u3002\u5c06\u6b64\u503c\u8bbe\u7f6e\u4e3a\u4e00\u4e2a\u6709\u610f\u4e49\u7684\u5927\u5c0f\uff0c\u76f8\u6bd4\u4e8e\u6700\u4f73\u8ddd\u79bb\uff0810\uff05\u662f\u4e00\u4e2a\u5f88\u597d\u7684\u8d77\u70b9\uff09\u3002 - YifanHu.stepRatio.name=\u6b65\u6bd4\u7387 - YifanHu.stepRatio.desc=\u8be5\u6bd4\u7387\u7528\u4e8e\u66f4\u65b0\u5404\u6b21\u8fed\u4ee3\u7684\u6b65\u957f\u3002 - YifanHu.adaptativeCooling.name=\u81ea\u9002\u5e94\u51b7\u5374 - YifanHu.adaptativeCooling.desc=\u63a7\u5236\u81ea\u9002\u5e94\u51b7\u5374\u7684\u4f7f\u7528\u3002\u5b83\u662f\u7528\u6765\u5e2e\u52a9\u5e03\u5c40\u7b97\u6cd5\u4ee5\u907f\u514d\u80fd\u91cf\u5c40\u90e8\u6781\u5c0f\u3002 - YifanHu.convergenceThreshold.name=\u6536\u655b\u9608\u503c - YifanHu.convergenceThreshold.desc=\u76f8\u5bf9\u80fd\u91cf\u6536\u655b\u95e8\u69db\u3002\u503c\u8d8a\u5c0f\uff0c\u610f\u5473\u7740\u66f4\u51c6\u786e\u3002 - YifanHu.quadTreeMaxLevel.name=\u56db\u53c9\u6811\u7684\u6700\u9ad8\u7b49\u7ea7 - -YifanHu.quadTreeMaxLevel.desc=\u5728\u56db\u53c9\u6811\u8868\u793a\u8981\u4f7f\u7528\u7684\u6700\u9ad8\u6c34\u5e73\u3002\u66f4\u5927\u7684\u4ef7\u503c\u610f\u5473\u7740\u66f4\u51c6\u786e\u3002 - +YifanHu.quadTreeMaxLevel.desc=\u76f8\u5bf9\u80fd\u91cf\u6536\u655b\u95e8\u69db\u3002\u503c\u8d8a\u5c0f\uff0c\u610f\u5473\u7740\u66f4\u51c6\u786e\u3002 YifanHu.theta.name=\u897f\u5854 - YifanHu.theta.desc=Barnes-Hut\u5f00\u653e\u6807\u51c6\u7684\u897f\u5854\u53c2\u6570\u3002\u503c\u8d8a\u5c0f\uff0c\u610f\u5473\u7740\u66f4\u51c6\u786e\u3002 diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_zh_TW.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_zh_TW.properties new file mode 100644 index 0000000000..45dc917b48 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/Bundle_zh_TW.properties @@ -0,0 +1,20 @@ +YifanHu.name=Yifan Hu +YifanHu.description=Original Yifan Hu's attraction-repulsion model. Reduce the computational cost by restricting force calculation to the neighborhood. The algorithm stops itself, as it has an adaptative cooling sheme. +YifanHuProportional.name=Yifan Hu Proportional +YifanHuProportional.description=Modified version of Yifan Hu that uses proportional displacement scheme. +YifanHu.optimalDistance.name=Optimal Distance +YifanHu.optimalDistance.desc=The natural length of the springs. Bigger values mean nodes will be farther apart. +YifanHu.relativeStrength.name=Relative Strength +YifanHu.relativeStrength.desc=The relative strength between electrical force (repulsion) and spring force (attraction). +YifanHu.initialStepSize.name=Initial Step size +YifanHu.initialStepSize.desc=The initial step size used in the integration phase. Set this value to a meaningful size compared to the optimal distance (10% is a good starting point). +YifanHu.stepRatio.name=Step ratio +YifanHu.stepRatio.desc=The ratio used to update the step size across iterations. +YifanHu.adaptativeCooling.name=Adaptive Cooling +YifanHu.adaptativeCooling.desc=Controls the use of adaptive cooling. It is used help the layout algoritm to avoid energy local minima. +YifanHu.convergenceThreshold.name=Convergence Threshold +YifanHu.convergenceThreshold.desc=Relative energy convergence threshold. Smaller values mean more accuracy. +YifanHu.quadTreeMaxLevel.name=Quadtree Max Level +YifanHu.quadTreeMaxLevel.desc=The maximum level to be used in the quadtree representation. Greater values mean more accuracy. +YifanHu.theta.name=Theta +YifanHu.theta.desc=The theta parameter for Barnes-Hut opening criteria. Smaller values mean more accuracy. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/cs.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/cs.po deleted file mode 100644 index a93852d7c0..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/cs.po +++ /dev/null @@ -1,79 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-09 19:12+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "YifanHu.name" -msgstr "Yifan Hu" - -msgid "YifanHu.description" -msgstr "PΕ―vodnΓ­ Yifan HΕ―v model pΕ™itaΕΎlivosti-odpudivosti. SniΕΎuje vΓ½početnΓ­ nΓ‘ročnost omezenΓ­m vΓ½počtu sΓ­ly okolΓ­. Algoritmus se sΓ‘m zastavΓ­, protoΕΎe mΓ‘ pΕ™izpΕ―sobivΓ© schΓ©ma chlazenΓ­." - -msgid "YifanHuProportional.name" -msgstr "Yifan Hu ΓΊmΔ›rnΓ½" - -msgid "YifanHuProportional.description" -msgstr "UpravenΓ‘ verze Yifan Hu, kterΓ‘ pouΕΎΓ­vΓ‘ schΓ©ma ΓΊmΔ›rnΓ©ho posunutΓ­." - -msgid "YifanHu.optimalDistance.name" -msgstr "OptimΓ‘lnΓ­ vzdΓ‘lenost" - -msgid "YifanHu.optimalDistance.desc" -msgstr "PΕ™irozenΓ‘ dΓ©lka pruΕΎin. VΔ›tΕ‘Γ­ hodnoty znamenajΓ­, ΕΎe uzly budou od sebe vzdΓ‘lenΔ›jΕ‘Γ­." - -msgid "YifanHu.relativeStrength.name" -msgstr "RelativnΓ­ sΓ­la" - -msgid "YifanHu.relativeStrength.desc" -msgstr "RelativnΓ­ sΓ­la mezi elektrickou silou (odpuzenΓ­) a silou pruΕΎiny (pΕ™iblΓ­ΕΎenΓ­)." - -msgid "YifanHu.initialStepSize.name" -msgstr "Velikost počÑtečnΓ­ho kroku" - -msgid "YifanHu.initialStepSize.desc" -msgstr "Velikost počÑtečnΓ­ho kroku ve fΓ‘zi zavedenΓ­. Nastavte tuto hodnotu na smysluplnou velikost v porovnΓ‘nΓ­ s optimΓ‘lnΓ­ vzdΓ‘lenostΓ­ (10% je dobrΓ© pro počÑtečnΓ­ bod)." - -msgid "YifanHu.stepRatio.name" -msgstr "PomΔ›r kroku" - -msgid "YifanHu.stepRatio.desc" -msgstr "PomΔ›r, kterΓ½ je pouΕΎit pro aktualizaci velikosti kroku v opakovΓ‘nΓ­ch." - -msgid "YifanHu.adaptativeCooling.name" -msgstr "PΕ™izpΕ―sobivΓ© chlazenΓ­" - -msgid "YifanHu.adaptativeCooling.desc" -msgstr "OvlΓ‘dΓ‘ pouΕΎitΓ­ pΕ™izpΕ―sobivΓ©ho chlazenΓ­. Je pouΕΎit pro pomoc algoritmu rozloΕΎenΓ­, aby se pΕ™edeΕ‘lo mΓ­stnΓ­mu minimu energie." - -msgid "YifanHu.convergenceThreshold.name" -msgstr "PrΓ‘h konvergence" - -msgid "YifanHu.convergenceThreshold.desc" -msgstr "RelativnΓ­ prΓ‘h konvergence energie. MenΕ‘Γ­ hodnoty znamenajΓ­ vΔ›tΕ‘Γ­ pΕ™esnost." - -msgid "YifanHu.quadTreeMaxLevel.name" -msgstr "Max ΓΊroveň kvadrantovΓ©ho stromu" - -msgid "YifanHu.quadTreeMaxLevel.desc" -msgstr "MaximΓ‘lnΓ­ ΓΊroveň, kterΓ‘ bude pouΕΎita pro znΓ‘zornΔ›nΓ­ kvadrantovΓ©ho stromu. VyΕ‘Ε‘Γ­ hodnoty znamenajΓ­ vΔ›tΕ‘Γ­ pΕ™esnost." - -msgid "YifanHu.theta.name" -msgstr "Theta" - -msgid "YifanHu.theta.desc" -msgstr "Parametr theta pro vstupnΓ­ kritΓ©ria Barnes-Hut. MenΕ‘Γ­ hodnoty znamenajΓ­ vΔ›tΕ‘Γ­ pΕ™esnost." diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/es.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/es.po deleted file mode 100644 index a2facdf0d0..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/es.po +++ /dev/null @@ -1,79 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:02+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "YifanHu.name" -msgstr "Yifan Hu" - -msgid "YifanHu.description" -msgstr "Modelo original de atracciΓ³n-repulsiΓ³n de Yifan Hu. Reducido el coste computacional restringiendo los cΓ‘lculos de fuerzas a los nodos vecinos. El algoritmo se para a sΓ­ mismo ya que tiene un plan de enfriamiento adaptativo." - -msgid "YifanHuProportional.name" -msgstr "Yifan Hu Proporcional" - -msgid "YifanHuProportional.description" -msgstr "VersiΓ³n modificada de Yifan Hu que usa un plan de desplazamiento proporcional." - -msgid "YifanHu.optimalDistance.name" -msgstr "Distancia Γ³ptima" - -msgid "YifanHu.optimalDistance.desc" -msgstr "La distancia elΓ‘stica natural. Valores mayores hacen que los nodos queden mΓ‘s alejados." - -msgid "YifanHu.relativeStrength.name" -msgstr "Fuerza relativa" - -msgid "YifanHu.relativeStrength.desc" -msgstr "La fuerza relativa entre la fuerza elΓ©ctrica (repulsiΓ³n) y la fuerza elΓ‘stica (atracciΓ³n)." - -msgid "YifanHu.initialStepSize.name" -msgstr "TamaΓ±o de paso inicial" - -msgid "YifanHu.initialStepSize.desc" -msgstr "El tamaΓ±o de paso inicial utilizado en la fase de integraciΓ³n. Configurar este valor con un tamaΓ±o adecuado comparado a la distancia Γ³ptima (10% es un buen punto de inicio)." - -msgid "YifanHu.stepRatio.name" -msgstr "Ratio de paso" - -msgid "YifanHu.stepRatio.desc" -msgstr "El ratio utilizado para actualizar el tamaΓ±o de paso entre iteraciones." - -msgid "YifanHu.adaptativeCooling.name" -msgstr "Enfriamiento adaptativo" - -msgid "YifanHu.adaptativeCooling.desc" -msgstr "Controla el uso del enfriamiento adaptativo. Es utilizado para ayudar al algoritmo a evitar mΓ­nimos locales" - -msgid "YifanHu.convergenceThreshold.name" -msgstr "Umbral de convergencia" - -msgid "YifanHu.convergenceThreshold.desc" -msgstr "EnergΓ­a relativa de umbral de convergencia. Valores menores mejoran la precisiΓ³n." - -msgid "YifanHu.quadTreeMaxLevel.name" -msgstr "Nivel mΓ‘ximo de Quadtree" - -msgid "YifanHu.quadTreeMaxLevel.desc" -msgstr "El nivel mΓ‘ximo a utilizar en la representaciΓ³n del quadtree. Valores mayores mejoran la precisiΓ³n." - -msgid "YifanHu.theta.name" -msgstr "Theta" - -msgid "YifanHu.theta.desc" -msgstr "El parΓ‘metro theta para el criterio de Barnes-Hut. Valores menores mejoran la precisiΓ³n." diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/fr.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/fr.po deleted file mode 100644 index f3cf3f6942..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/fr.po +++ /dev/null @@ -1,79 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:02+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "YifanHu.name" -msgstr "Yifan Hu" - -msgid "YifanHu.description" -msgstr "ModΓ¨le original de l'attraction-rΓ©pulsion d'Yifan Hu. RΓ©duit le coΓ»t computationnel en restreignant le calcul de force aux voisins. L'algorithme s'arrΓͺte tout seul, grΓ’ce Γ  un schΓ©ma de refroidissement adaptatif." - -msgid "YifanHuProportional.name" -msgstr "Yifan Hu Proportionnel" - -msgid "YifanHuProportional.description" -msgstr "Version modifiΓ©e de Yifan Hu utilisant un schΓ©ma de dΓ©placement proportionnel." - -msgid "YifanHu.optimalDistance.name" -msgstr "Distance optimale" - -msgid "YifanHu.optimalDistance.desc" -msgstr "Longueur naturelle des ressorts. Une plus grande valeur signifie que les noeuds se repousseront plus loin." - -msgid "YifanHu.relativeStrength.name" -msgstr "Force relative" - -msgid "YifanHu.relativeStrength.desc" -msgstr "Force relative entre la rΓ©pulsion et l'attraction." - -msgid "YifanHu.initialStepSize.name" -msgstr "Taille du pas initial" - -msgid "YifanHu.initialStepSize.desc" -msgstr "UtilisΓ© dans la phase d'intΓ©gration. Mettez cette valeur Γ  une taille signifiante comparΓ©e Γ  la distance optimale (10% est un bon point de dΓ©part)." - -msgid "YifanHu.stepRatio.name" -msgstr "Ratio du pas" - -msgid "YifanHu.stepRatio.desc" -msgstr "Le ratio utilisΓ© pour mettre Γ  jour la taille du pas entre itΓ©rations." - -msgid "YifanHu.adaptativeCooling.name" -msgstr "Refroidissement adaptatif" - -msgid "YifanHu.adaptativeCooling.desc" -msgstr "ContrΓ΄le l'usage du refroidissement adaptatif. Aide l'algorithme de spatialisation Γ  Γ©viter les minima locaux d'Γ©nergie." - -msgid "YifanHu.convergenceThreshold.name" -msgstr "Seuille de Convergence" - -msgid "YifanHu.convergenceThreshold.desc" -msgstr "Seuil de convergence de l'Γ©nergie relative. Une petite valeur augmente la prΓ©cision." - -msgid "YifanHu.quadTreeMaxLevel.name" -msgstr "Niveau Max du Quadtree" - -msgid "YifanHu.quadTreeMaxLevel.desc" -msgstr "Niveau maximal utilisΓ© dans la reprΓ©sentation quadtree. Une grande valeur augmente la prΓ©cision." - -msgid "YifanHu.theta.name" -msgstr "Theta" - -msgid "YifanHu.theta.desc" -msgstr "ParamΓ¨tre theta de l'algorithme Barnes-Hut. Une petite valeur augmente la prΓ©cision." diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/ja.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/ja.po deleted file mode 100644 index 61e47897fe..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/ja.po +++ /dev/null @@ -1,79 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-03 02:26+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "YifanHu.name" -msgstr "胑一凑" - -msgid "YifanHu.description" -msgstr "γ‚ͺγƒͺγ‚ΈγƒŠγƒ«γθƒ‘一凑γεΌ•εŠ›-ζ–₯εŠ›γƒ’γƒ‡γƒ«γ€‚ιš£ζŽ₯へγεŠ›γθ¨ˆη—γ‚’εˆΆι™γ™γ‚‹γ“γ¨γ«γ‚ˆγ‚Šγ€θ¨ˆη—γ‚³γ‚Ήγƒˆγ‚’ε‰ŠζΈ›γ€‚γγγ‚’ルゴγƒͺγ‚Ίγƒ γ«γ―ι©εΏœεž‹ε†·ε΄γ‚Ήγ‚­γƒΌγƒ γŒγ‚γ‚‹γγ§γ€γγ‚Œθ‡ͺδ½“γ―εœζ­’γ—γΎγ™γ€‚" - -msgid "YifanHuProportional.name" -msgstr "胑一凑比例式" - -msgid "YifanHuProportional.description" -msgstr "ζ―”δΎ‹ε€‰δ½γ‚Ήγ‚­γƒΌγƒ γ‚’δ½Ώη”¨γ—γŸθƒ‘δΈ€ε‡‘δΏζ­£η‰ˆ" - -msgid "YifanHu.optimalDistance.name" -msgstr "ζœ€ι©θ·ι›’" - -msgid "YifanHu.optimalDistance.desc" -msgstr "バネγθ‡ͺη„Άι•·γ€‚ε€§γγ„ε€€γ―γ€γƒŽγƒΌγƒ‰γŒγ‚ˆγ‚Šι γι›’γ‚Œγ¦γ„γ‚‹γ“γ¨γ‚’ζ„ε‘³γ€‚" - -msgid "YifanHu.relativeStrength.name" -msgstr "η›Έε―Ύηš„εΌ·γ•" - -msgid "YifanHu.relativeStrength.desc" -msgstr "ι›»ζ°—εŠ›(ζ–₯εŠ›)γ¨γƒγƒεŠ›(εΌ•εŠ›)とγι–“γη›Έε―Ύηš„γͺ強さ。" - -msgid "YifanHu.initialStepSize.name" -msgstr "εˆζœŸγ‚Ήγƒ†γƒƒγƒ—γ‚΅γ‚€γ‚Ί" - -msgid "YifanHu.initialStepSize.desc" -msgstr "η΅±εˆγƒ•γ‚§γƒΌγ‚Ίγ§δ½Ώη”¨γ•γ‚Œγ‚‹εˆζœŸγ‚Ήγƒ†γƒƒγƒ—γ‚΅γ‚€γ‚Ίγ€‚ζœ€ι©γͺ距雒(10%は良い出発点である)と比較して意味γγ‚る倧きさにこγε€€γ‚’θ¨­εšγ—ます。" - -msgid "YifanHu.stepRatio.name" -msgstr "ステップ比" - -msgid "YifanHu.stepRatio.desc" -msgstr "ζ―”ηŽ‡γ―γ€εεΎ©γ”γ¨γ«γ‚Ήγƒ†γƒƒγƒ—γ‚΅γ‚€γ‚Ίγ‚’ζ›΄ζ–°γ™γ‚‹γŸγ‚γ«δ½Ώη”¨γ€‚" - -msgid "YifanHu.adaptativeCooling.name" -msgstr "ι©εΏœεž‹ε†·ε΄" - -msgid "YifanHu.adaptativeCooling.desc" -msgstr "ι©εΏœεž‹ε†·ε΄γδ½Ώη”¨γ‚’εˆΆεΎ‘γ—γΎγ™γ€‚γƒ¬γ‚€γ‚’γ‚¦γƒˆγ‚’γƒ«γ‚΄γƒͺγ‚Ίγƒ γŒγ‚¨γƒγƒ«γ‚γƒΌγζ₯΅ε°ε€€γ‚’避けるγγ«δ½Ώη”¨γ•γ‚ŒγΎγ™γ€‚" - -msgid "YifanHu.convergenceThreshold.name" -msgstr "εŽζŸι–Ύε€€" - -msgid "YifanHu.convergenceThreshold.desc" -msgstr "η›Έε―Ύηš„γͺエネルγ‚γƒΌγεŽζŸγι–Ύε€€γ€‚ε€€γŒε°γ•γ„γ»γ©η²Ύη’Ίγ€‚" - -msgid "YifanHu.quadTreeMaxLevel.name" -msgstr "ε››εˆ†ζœ¨ζœ€ε€§γƒ¬γƒ™γƒ«" - -msgid "YifanHu.quadTreeMaxLevel.desc" -msgstr "ε››εˆ†ζœ¨θ‘¨ηΎγ§δ½Ώη”¨γ•γ‚Œγ‚‹ζœ€ε€§γγƒ¬γƒ™γƒ«γ€‚ε€€γŒε€§γγ„γ»γ©η²Ύη’Ίγ€‚" - -msgid "YifanHu.theta.name" -msgstr "ΞΈε€€" - -msgid "YifanHu.theta.desc" -msgstr "Barnes-Hutγι–‹ε§‹εŸΊζΊ–γΞΈγƒ‘γƒ©γƒ‘γƒΌγ‚Ώγ€‚ε€€γŒε°γ•γ„γ»γ©η²Ύη’Ίγ€‚" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/org-gephi-layout-plugin-force-yifanHu.pot b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/org-gephi-layout-plugin-force-yifanHu.pot deleted file mode 100644 index 379df75d33..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/org-gephi-layout-plugin-force-yifanHu.pot +++ /dev/null @@ -1,94 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "YifanHu.name" -msgstr "Yifan Hu" - -msgid "YifanHu.description" -msgstr "" -"Original Yifan Hu's attraction-repulsion model. Reduce the computational " -"cost by restricting force calculation to the neighborhood. The algorithm " -"stops itself, as it has an adaptative cooling sheme." - -msgid "YifanHuProportional.name" -msgstr "Yifan Hu Proportional" - -msgid "YifanHuProportional.description" -msgstr "" -"Modified version of Yifan Hu that uses proportional displacement scheme." - -msgid "YifanHu.optimalDistance.name" -msgstr "Optimal Distance" - -msgid "YifanHu.optimalDistance.desc" -msgstr "" -"The natural length of the springs. Bigger values mean nodes will be farther " -"apart." - -msgid "YifanHu.relativeStrength.name" -msgstr "Relative Strength" - -msgid "YifanHu.relativeStrength.desc" -msgstr "" -"The relative strength between electrical force (repulsion) and spring force " -"(attraction)." - -msgid "YifanHu.initialStepSize.name" -msgstr "Initial Step size" - -msgid "YifanHu.initialStepSize.desc" -msgstr "" -"The initial step size used in the integration phase. Set this value to a " -"meaningful size compared to the optimal distance (10% is a good starting " -"point)." - -msgid "YifanHu.stepRatio.name" -msgstr "Step ratio" - -msgid "YifanHu.stepRatio.desc" -msgstr "The ratio used to update the step size across iterations." - -msgid "YifanHu.adaptativeCooling.name" -msgstr "Adaptive Cooling" - -msgid "YifanHu.adaptativeCooling.desc" -msgstr "" -"Controls the use of adaptive cooling. It is used help the layout algoritm to " -"avoid energy local minima." - -msgid "YifanHu.convergenceThreshold.name" -msgstr "Convergence Threshold" - -msgid "YifanHu.convergenceThreshold.desc" -msgstr "" -"Relative energy convergence threshold. Smaller values mean more accuracy." - -msgid "YifanHu.quadTreeMaxLevel.name" -msgstr "Quadtree Max Level" - -msgid "YifanHu.quadTreeMaxLevel.desc" -msgstr "" -"The maximun level to be used in the quadtree representation. Greater values " -"mean more accuracy." - -msgid "YifanHu.theta.name" -msgstr "Theta" - -msgid "YifanHu.theta.desc" -msgstr "" -"The theta parameter for Barnes-Hut opening criteria. Smaller values mean " -"more accuracy." diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/pt_BR.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/pt_BR.po deleted file mode 100644 index d80b6f8eb7..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/pt_BR.po +++ /dev/null @@ -1,79 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 23:21+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "YifanHu.name" -msgstr "Yifan Hu" - -msgid "YifanHu.description" -msgstr "Modelo original de atraΓ§Γ£o-repulsΓ£o de Yifan Hu. Reduz o custo computacional por meio da realizaΓ§Γ£o do cΓ‘lculo de forΓ§a apenas em relaΓ§Γ£o aos nΓ³s vizinhos. O algoritmo Γ© capaz de parar por si sΓ³, jΓ‘ que possui um sistema de resfriamento adaptativo." - -msgid "YifanHuProportional.name" -msgstr "Yifan Hu proporcional" - -msgid "YifanHuProportional.description" -msgstr "VersΓ£o modificada do algoritmo Yifan Hu que usa um plano de deslocamento proporcional." - -msgid "YifanHu.optimalDistance.name" -msgstr "DistΓ’ncia Γ³tima" - -msgid "YifanHu.optimalDistance.desc" -msgstr "DistΓ’ncia elΓ‘stica natural. Valores maiores fazem com que os nΓ³s fiquem mais distantes." - -msgid "YifanHu.relativeStrength.name" -msgstr "ForΓ§a Relativa" - -msgid "YifanHu.relativeStrength.desc" -msgstr "A forΓ§a relativa entre a forΓ§a elΓ©trica (repulsΓ£o) e a forΓ§a elΓ‘stica (atraΓ§Γ£o)." - -msgid "YifanHu.initialStepSize.name" -msgstr "Tamanho inicial do passo" - -msgid "YifanHu.initialStepSize.desc" -msgstr "Tamanho inicial do passo utilizado na fase de integraΓ§Γ£o. Configure este valor para um valor adequado comparado Γ  distΓ’ncia Γ³tima (10% Γ© um bom ponto de inΓ­cio)." - -msgid "YifanHu.stepRatio.name" -msgstr "RelaΓ§Γ£o de passo" - -msgid "YifanHu.stepRatio.desc" -msgstr "A razΓ£o usada para atualizar o tamanho do passo entre iteraΓ§Γ΅es." - -msgid "YifanHu.adaptativeCooling.name" -msgstr "Resfriamento adaptativo" - -msgid "YifanHu.adaptativeCooling.desc" -msgstr "Controla o uso do resfriamento adaptativo. Γ‰ usado para ajudar o algoritmo de distribuiΓ§Γ£o a evitar mΓ­nimos locais de energia." - -msgid "YifanHu.convergenceThreshold.name" -msgstr "Limiar de convergΓͺncia" - -msgid "YifanHu.convergenceThreshold.desc" -msgstr "Energia relativa do limiar de convergΓͺncia. Valores menores melhoram a precisΓ£o." - -msgid "YifanHu.quadTreeMaxLevel.name" -msgstr "NΓ­vel mΓ‘ximo Quadtree" - -msgid "YifanHu.quadTreeMaxLevel.desc" -msgstr "NΓ­vel mΓ‘ximo a ser utilizado pela representaΓ§Γ£o quadtree. Valores maiores melhoram a precisΓ£o." - -msgid "YifanHu.theta.name" -msgstr "Theta" - -msgid "YifanHu.theta.desc" -msgstr "ParΓ’metro theta do critΓ©rio de Barnes-Hut. Valores menores melhoram a precisΓ£o." diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/ru.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/ru.po deleted file mode 100644 index a6e909c3e9..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/ru.po +++ /dev/null @@ -1,79 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-14 07:40+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "YifanHu.name" -msgstr "Yifan Hu" - -msgid "YifanHu.description" -msgstr "МодСль притяТСния-отталкивания Yifan Hu. Для увСличСния скорости Ρ€Π°Π±ΠΎΡ‚Ρ‹ расчёт сил производится Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для связанных ΡƒΠ·Π»ΠΎΠ². Алгоритм останавливаСтся сам." - -msgid "YifanHuProportional.name" -msgstr "Yifan Hu Proportional" - -msgid "YifanHuProportional.description" -msgstr "ΠœΠΎΠ΄ΠΈΡ„ΠΈΡ†ΠΈΡ€ΠΎΠ²Π°Π½Π½Π°Ρ вСрсия ΡƒΠΊΠ»Π°Π΄ΠΊΠΈ Yifan Hu, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π°Ρ схСму ΠΏΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ смСщСния." - -msgid "YifanHu.optimalDistance.name" -msgstr "ΠžΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ расстояниС" - -msgid "YifanHu.optimalDistance.desc" -msgstr "\"ЕстСствСнная\" Π΄Π»ΠΈΠ½Π° Ρ€Π΅Π±Π΅Ρ€. Π£Π²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ значСния ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Π²Π·Π°ΠΈΠΌΠ½ΠΎΠΌΡƒ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΡŽ ΡƒΠ·Π»ΠΎΠ² Π² ΡƒΠΊΠ»Π°Π΄ΠΊΠ΅." - -msgid "YifanHu.relativeStrength.name" -msgstr "ΠžΡ‚Π½ΠΎΡΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ сила" - -msgid "YifanHu.relativeStrength.desc" -msgstr "ΠŸΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρƒ силой отталкивания ΠΈ силой притяТСния." - -msgid "YifanHu.initialStepSize.name" -msgstr "ΠΠ°Ρ‡Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€ шага" - -msgid "YifanHu.initialStepSize.desc" -msgstr "ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ Π½Π° стадии ΠΈΠ½Ρ‚Π΅Π³Ρ€Π°Ρ†ΠΈΠΈ. Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΡƒΡΡ‚Π°Π½Π°Π²Π»ΠΈΠ²Π°Ρ‚ΡŒ значСния, сравнимыС со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΡ‚ΠΈΠΌΠ°Π»ΡŒΠ½ΠΎΠ³ΠΎ расстояния (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 10%)." - -msgid "YifanHu.stepRatio.name" -msgstr "ИзмСнСниС шага" - -msgid "YifanHu.stepRatio.desc" -msgstr "ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для измСнСния шага ΠΌΠ΅ΠΆΠ΄Ρƒ итСрациями" - -msgid "YifanHu.adaptativeCooling.name" -msgstr "АдаптивноС ΠΎΡ…Π»Π°ΠΆΠ΄Π΅Π½ΠΈΠ΅" - -msgid "YifanHu.adaptativeCooling.desc" -msgstr "Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для избСТания Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΠΎΠ² энСргии систСмы." - -msgid "YifanHu.convergenceThreshold.name" -msgstr "ΠŸΠΎΡ€ΠΎΠ³ сходимости" - -msgid "YifanHu.convergenceThreshold.desc" -msgstr "ΠŸΠΎΡ€ΠΎΠ³ сходимости ΠΏΠΎ энСргии систСмы. МСньшиС значСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ большСй точности." - -msgid "YifanHu.quadTreeMaxLevel.name" -msgstr "ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Quadtree" - -msgid "YifanHu.quadTreeMaxLevel.desc" -msgstr "ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΡƒΡ€ΠΎΠ²Π΅Π½ΡŒ Π² прСдставлСнии quadtree. Π‘ΠΎΠ»ΡŒΡˆΠΈΠ΅ значСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ большСй точности." - -msgid "YifanHu.theta.name" -msgstr "Theta" - -msgid "YifanHu.theta.desc" -msgstr "ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ для критСрия Barnes-Hut. МСньшиС значСния ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ большСй точности." diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/zh_CN.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/zh_CN.po deleted file mode 100644 index 04f1dd670a..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/force/yifanHu/zh_CN.po +++ /dev/null @@ -1,79 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 04:21+0000\n" -"Last-Translator: Xi-Nian Zuo \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "YifanHu.name" -msgstr "Yifan Hu" - -msgid "YifanHu.description" -msgstr "εŽŸδΈ€εΈ†θƒ‘ι”¦ζΆ›ηš„εΈεΌ•εŠ›οΌŒζŽ’ζ–₯εŠ›ζ¨‘εž‹γ€‚ε‡ε°‘ι™εˆΆεŠ›ηš„θ‘η—ι™„θΏ‘θ‘η—ζˆζœ¬γ€‚θ―₯η—ζ³•εœζ­’οΌŒε› δΈΊεƒζœ‰δΈ€δΈͺι€‚εΊ”ζ€§ηš„ε†·ε΄sheme。" - -msgid "YifanHuProportional.name" -msgstr "Yifan Hu ζ―”δΎ‹" - -msgid "YifanHuProportional.description" -msgstr "θ°ƒζ•΄η‰ˆζœ¬ηš„Yifan Hu使用比例位移格式." - -msgid "YifanHu.optimalDistance.name" -msgstr "ζœ€δ½³θ·η¦»" - -msgid "YifanHu.optimalDistance.desc" -msgstr "εΌΉη°§θ‡ͺη„Άι•ΏεΊ¦γ€‚ζ›΄ε€§ηš„ε€Όζ„ε‘³η€θŠ‚η‚Ήε°†η›Έθ·θΎƒθΏœγ€‚" - -msgid "YifanHu.relativeStrength.name" -msgstr "η›Έε―ΉεΌΊεΊ¦" - -msgid "YifanHu.relativeStrength.desc" -msgstr "η”΅εŠ›οΌˆζ–₯εŠ›οΌ‰ε’ŒεΌΉη°§εŠ›οΌˆεΈεΌ•εŠ›οΌ‰δΉ‹ι—΄ηš„η›Έε―ΉεΌΊεΊ¦γ€‚" - -msgid "YifanHu.initialStepSize.name" -msgstr "εˆε§‹ζ­₯ι•Ώ" - -msgid "YifanHu.initialStepSize.desc" -msgstr "εœ¨ζ•΄εˆι˜Άζ΅ηš„εˆε§‹ζ­₯长。将歀值θΎη½δΈΊδΈ€δΈͺζœ‰ζ„δΉ‰ηš„ε€§ε°οΌŒη›Έζ―”δΊŽζœ€δ½³θ·η¦»οΌˆ10οΌ…ζ˜―δΈ€δΈͺ很ε₯½ηš„衷点)。" - -msgid "YifanHu.stepRatio.name" -msgstr "ζ­₯ζ―”ηŽ‡" - -msgid "YifanHu.stepRatio.desc" -msgstr "θ―₯ζ―”ηŽ‡η”¨δΊŽζ›΄ζ–°ε„ζ¬‘θΏ­δ»£ηš„ζ­₯长。" - -msgid "YifanHu.adaptativeCooling.name" -msgstr "θ‡ͺ适应冷却" - -msgid "YifanHu.adaptativeCooling.desc" -msgstr "控刢θ‡ͺι€‚εΊ”ε†·ε΄ηš„δ½Ώη”¨γ€‚εƒζ˜―用ζ₯εΈεŠ©εΈƒε±€η—法δ»₯ιΏε…θƒ½ι‡ε±€ιƒ¨ζžε°γ€‚" - -msgid "YifanHu.convergenceThreshold.name" -msgstr "ζ”Άζ•›ι˜ˆε€Ό" - -msgid "YifanHu.convergenceThreshold.desc" -msgstr "η›Έε―Ήθƒ½ι‡ζ”Άζ•›ι—¨ζ§›γ€‚ε€ΌθΆŠε°οΌŒζ„ε‘³η€ζ›΄ε‡†η‘。" - -msgid "YifanHu.quadTreeMaxLevel.name" -msgstr "ε››ε‰ζ ‘ηš„ζœ€ι«˜η­‰ηΊ§" - -msgid "YifanHu.quadTreeMaxLevel.desc" -msgstr "εœ¨ε››ε‰ζ ‘θ‘¨η€Ίθ¦δ½Ώη”¨ηš„ζœ€ι«˜ζ°΄εΉ³γ€‚ζ›΄ε€§ηš„δ»·ε€Όζ„ε‘³η€ζ›΄ε‡†η‘。" - -msgid "YifanHu.theta.name" -msgstr "θ₯Ώε‘”" - -msgid "YifanHu.theta.desc" -msgstr "Barnes-HutεΌ€ζ”Ύζ ‡ε‡†ηš„θ₯Ώε‘”ε‚ζ•°γ€‚ε€ΌθΆŠε°οΌŒζ„ε‘³η€ζ›΄ε‡†η‘。" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_ar.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_ca.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_ca.properties new file mode 100644 index 0000000000..9a4254b54f --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_ca.properties @@ -0,0 +1,24 @@ +name=Force Atlas +description=ForceAtlas makes graphs more compact, readable, and can show authorities more central than hubs (Attraction Distrib. option). Auto-stabilization improves convergence at the end of the layout. +forceAtlas.inertia.name=Inθrcia +forceAtlas.inertia.desc=Conservation of node speed at each new pass +forceAtlas.repulsionStrength.name=Forηa de repulsiσ +forceAtlas.repulsionStrength.desc=Determina la intensitat amb la qual els nodes es repelen entre ells +forceAtlas.attractionStrength.name=Forηa d'atracciσ +forceAtlas.attractionStrength.desc=Determina la intensitat amb la qual cada parella de nodes connectats s'atrau +forceAtlas.maxDisplacement.name=Maximum displacement +forceAtlas.maxDisplacement.desc=This is limiting each node's displacement (to prevent some super-rejecting when nodes are too close) +forceAtlas.freezeBalance.name=Auto stabilize function +forceAtlas.freezeBalance.desc=Activates the freezing of unstable nodes. Despite some loss of efficiency, this prevents most of nodes flickering +forceAtlas.freezeStrength.name=Autostab Strength +forceAtlas.freezeStrength.desc=Power of the auto stabilize function +forceAtlas.freezeInertia.name=Autostab sensibility +forceAtlas.freezeInertia.desc=[0,1] This parameters represents the auto-adaptiveness of the anti-flickering function (actually, the freezing inertia) +forceAtlas.gravity.name=Gravetat +forceAtlas.gravity.desc=Aquesta forηa atrau tots els nodes cap al centre per evitar la dispersiσ de components desconnectats +forceAtlas.outboundAttractionDistribution.name=Attraction Distrib. +forceAtlas.outboundAttractionDistribution.desc=The attractive force is distributed along outbound links. This tends to push hubs at the periphery and put authorities more central +forceAtlas.adjustSizes.name=Adjust by Sizes +forceAtlas.adjustSizes.desc=Avoid nodes overlapping (depending from the size of each node) +forceAtlas.speed.name=Velocitat +forceAtlas.speed.desc=Value > 0 default 1 ; permits you to increase convergence speed at the price of a precision loss diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_cs.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_cs.properties index 7171620f41..5c126bd809 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_cs.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_cs.properties @@ -1,55 +1,24 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-09 17\:18+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - name=Force Atlas - -description=ForceAtlas d\u011bla grafy kompaktn\u011bj\u0161\u00ed, \u010diteln\u011bj\u0161\u00ed a m\u016f\u017ee zobrazit autority v\u00edce ve st\u0159edu ne\u017e uzle (mo\u017enost Rozd\u011blen\u00ed p\u0159ib.). Automatick\u00e1 stabilizace vylep\u0161uje sbli\u017eov\u00e1n\u00ed na konci rozlo\u017een\u00ed. - +description=ForceAtlas d\u011bla grafy kompaktn\u011bj\u0161ν, \u010diteln\u011bj\u0161ν a m\u016f\u017ee zobrazit autority vνce ve st\u0159edu ne\u017e uzle (mo\u017enost Rozd\u011blenν p\u0159ib.). Automatickα stabilizace vylep\u0161uje sbli\u017eovαnν na konci rozlo\u017eenν. forceAtlas.inertia.name=Setrva\u010dnost - -forceAtlas.inertia.desc=Zachov\u00e1n\u00ed rychlosti uzlu v ka\u017ed\u00e9m nov\u00e9m pr\u016fchodu - -forceAtlas.repulsionStrength.name=S\u00edla odpuzen\u00ed - -forceAtlas.repulsionStrength.desc=Jak siln\u011b se ulzy navz\u00e1jem odpuzuj\u00ed - -forceAtlas.attractionStrength.name=S\u00edla p\u0159ibli\u017eov\u00e1n\u00ed - -forceAtlas.attractionStrength.desc=Jak siln\u011b se ka\u017ed\u00fd p\u00e1r p\u0159ipojen\u00fdch uzl\u016f navz\u00e1jem p\u0159itahuje - -forceAtlas.maxDisplacement.name=Maxim\u00e1ln\u00ed v\u00fdchylka - -forceAtlas.maxDisplacement.desc=Toto omezuje vych\u00fdlen\u00ed ka\u017ed\u00e9ho uzlu (pro zabr\u00e1n\u011bn\u00ed ur\u010dit\u00e9ho velk\u00e9ho odpuzen\u00ed kdy\u017e jsou zly p\u0159\u00edli\u0161 bl\u00edzko) - -forceAtlas.freezeBalance.name=Funkce automatick\u00e9 stabilizace - -forceAtlas.freezeBalance.desc=Aktivuje zmrazen\u00ed nestabiln\u00edch uzl\u016f. Navzdory jist\u00e9 ztr\u00e1ty \u00fa\u010dinnosti toto zabra\u0148uje blik\u00e1n\u00ed u v\u011bt\u0161iny uzl\u016f - -forceAtlas.freezeStrength.name=S\u00edla autostab - -forceAtlas.freezeStrength.desc=S\u00edla autostabiliza\u010dn\u00ed funkce - +forceAtlas.inertia.desc=Zachovαnν rychlosti uzlu v ka\u017edιm novιm pr\u016fchodu +forceAtlas.repulsionStrength.name=Sνla odpuzenν +forceAtlas.repulsionStrength.desc=Jak siln\u011b se ulzy navzαjem odpuzujν +forceAtlas.attractionStrength.name=Sνla p\u0159ibli\u017eovαnν +forceAtlas.attractionStrength.desc=Jak siln\u011b se ka\u017edύ pαr p\u0159ipojenύch uzl\u016f navzαjem p\u0159itahuje +forceAtlas.maxDisplacement.name=Maximαlnν vύchylka +forceAtlas.maxDisplacement.desc=Toto omezuje vychύlenν ka\u017edιho uzlu (pro zabrαn\u011bnν ur\u010ditιho velkιho odpuzenν kdy\u017e jsou zly p\u0159νli\u0161 blνzko) +forceAtlas.freezeBalance.name=Funkce automatickι stabilizace +forceAtlas.freezeBalance.desc=Aktivuje zmrazenν nestabilnνch uzl\u016f. Navzdory jistι ztrαty ϊ\u010dinnosti toto zabra\u0148uje blikαnν u v\u011bt\u0161iny uzl\u016f +forceAtlas.freezeStrength.name=Sνla autostab +forceAtlas.freezeStrength.desc=Sνla autostabiliza\u010dnν funkce forceAtlas.freezeInertia.name=Citlivost autostab - -forceAtlas.freezeInertia.desc=[0,1] Tento parametr p\u0159edstavuje automatickou p\u0159izp\u016fsobivost funkce proti blik\u00e1n\u00ed (ve skute\u010dnosti, setrva\u010dnost zmrazen\u00ed) - +forceAtlas.freezeInertia.desc=[0,1] Tento parametr p\u0159edstavuje automatickou p\u0159izp\u016fsobivost funkce proti blikαnν (ve skute\u010dnosti, setrva\u010dnost zmrazenν) forceAtlas.gravity.name=Gravitace - -forceAtlas.gravity.desc=Tato s\u00edla p\u0159itahuje v\u0161echny uzly do st\u0159edu pro zabr\u00e1n\u011bn\u00ed rozptylu odpojen\u00fdch sou\u010d\u00e1st\u00ed - -forceAtlas.outboundAttractionDistribution.name=Rozd\u011blen\u00ed p\u0159ib. - -forceAtlas.outboundAttractionDistribution.desc=S\u00edla p\u0159ibl\u00ed\u017een\u00ed je rozd\u011blov\u00e1na pod\u00e9l odchoz\u00edch propojen\u00ed. Toto m\u00e1 tendenci odsunovat uzly na okraje a autority d\u00e1vat v\u00edce do st\u0159edu - +forceAtlas.gravity.desc=Tato sνla p\u0159itahuje v\u0161echny uzly do st\u0159edu pro zabrαn\u011bnν rozptylu odpojenύch sou\u010dαstν +forceAtlas.outboundAttractionDistribution.name=Rozd\u011blenν p\u0159ib. +forceAtlas.outboundAttractionDistribution.desc=Sνla p\u0159iblν\u017eenν je rozd\u011blovαna podιl odchozνch propojenν. Toto mα tendenci odsunovat uzly na okraje a autority dαvat vνce do st\u0159edu forceAtlas.adjustSizes.name=Upravit podle velikosti - -forceAtlas.adjustSizes.desc=Vyhnout se p\u0159ekryvu uzl\u016f (v z\u00e1vislosti na velikosti ka\u017ed\u00e9ho uzlu) - +forceAtlas.adjustSizes.desc=Vyhnout se p\u0159ekryvu uzl\u016f (v zαvislosti na velikosti ka\u017edιho uzlu) forceAtlas.speed.name=Rychlost - -forceAtlas.speed.desc=Hodnota > 0 v\u00fdchoz\u00ed 1 ; V\u00e1m umo\u017e\u0148uje zv\u00fd\u0161it rychlost sbli\u017eov\u00e1n\u00ed za cenu ztr\u00e1ty p\u0159esnosti +forceAtlas.speed.desc=Hodnota > 0 vύchozν 1 ; Vαm umo\u017e\u0148uje zvύ\u0161it rychlost sbli\u017eovαnν za cenu ztrαty p\u0159esnosti diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_de.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_de.properties new file mode 100644 index 0000000000..0cd838d986 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_de.properties @@ -0,0 +1,24 @@ +name=Force Atlas +description=ForceAtlas macht den Graph kompakter, lesbar, und zeigt Authorities zentraler als Hubs (Anziehung/Verteilung Option). Auto-Stabilisierung verbessert die Konvergenz zum Ende des Layout-Prozesses. +forceAtlas.inertia.name=Trδgheit +forceAtlas.inertia.desc=Beibehaltung der Knoten-Geschwindigkeit bei jedem neuen Durchgang +forceAtlas.repulsionStrength.name=Stδrke der Abstoίung +forceAtlas.repulsionStrength.desc=Wie stark stφίt jeder Knoten andere ab +forceAtlas.attractionStrength.name=Stδrke der Anziehung +forceAtlas.attractionStrength.desc=Wie stark zieht sich jedes Paar verbundener Knoten sich gegenseitig an +forceAtlas.maxDisplacement.name=Maximale Verdrδngung +forceAtlas.maxDisplacement.desc=Dies beschrδnkt die maximale Verdrδngung eines Knotens (um όbermδssige Verdrδngung zu verhindern, wenn Knoten einander zu nah sind) +forceAtlas.freezeBalance.name=Auto-Stabilisierungs-Funktion +forceAtlas.freezeBalance.desc=Aktiviert das Einfrieren instabiler Knoten. Trotz Effizienzverlust verhindert dies όberwiegend das Flackern von Knoten +forceAtlas.freezeStrength.name=Auto-Stabilisierung Stδrke +forceAtlas.freezeStrength.desc=Stδrke der Auto-Stabilisieren-Funktion +forceAtlas.freezeInertia.name=Auto-Stabilisierung Sesibilitδt +forceAtlas.freezeInertia.desc=[0,1] Diese Parameter reprδsentieren die Selbst-Anpassung der Anti-Flackern-Funktion (Verzφgerung des Einfrierens) +forceAtlas.gravity.name=Anziehungskraft +forceAtlas.gravity.desc=Diese Kraft zieht alle Knoten zum Zentrum um eine zu groίe Streuung unverbundener Komponenten zu vermeiden. +forceAtlas.outboundAttractionDistribution.name=Anziehungs-Verteilung +forceAtlas.outboundAttractionDistribution.desc=Die Anziehungskraft wird entlang ausgehender Verbindungen verteilt. Hubs werden so eher an die Peripherie verschoben und Authorities eher in die Mitte. +forceAtlas.adjustSizes.name=Anhand Grφίe anpassen +forceAtlas.adjustSizes.desc=Vermeide όberlappende Knoten (abhδngig von Grφίe des jeweiligen Knotens) +forceAtlas.speed.name=Geschwindigkeit +forceAtlas.speed.desc=Wert > 0 Default 1 ; Erlaubt Ihnen die Konvergenz-Geschwindigkeit zu erhφhen, um den Preis eines Prδzisionsverlusts diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_es.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_es.properties index b05cfc01c3..b978851da2 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_es.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_es.properties @@ -1,55 +1,24 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:02+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - name=Force Atlas - -description=Force Atlas hace los grafos m\u00e1s compactos, legibles, y puede mostrar las 'authorities' m\u00e1s en el centro que los 'hubs' (opci\u00f3n Distribuci\u00f3n de Atracci\u00f3n). La auto-estabilizaci\u00f3n mejora la convergencia al final del algoritmo. - +description=Force Atlas hace los grafos mαs compactos, legibles, y puede mostrar las 'authorities' mαs en el centro que los 'hubs' (opciσn Distribuciσn de Atracciσn). La auto-estabilizaciσn mejora la convergencia al final del algoritmo. forceAtlas.inertia.name=Inercia - -forceAtlas.inertia.desc=Conservaci\u00f3n de la velocidad de los nodos en cada nuevo paso - -forceAtlas.repulsionStrength.name=Fuerza de repulsi\u00f3n - +forceAtlas.inertia.desc=Conservaciσn de la velocidad de los nodos en cada nuevo paso +forceAtlas.repulsionStrength.name=Fuerza de repulsiσn forceAtlas.repulsionStrength.desc=Fuerza con la que cada nodo repulsa a otros - -forceAtlas.attractionStrength.name=Fuerza de atracci\u00f3n - -forceAtlas.attractionStrength.desc=Fuerza con la que cada par de nodos conectados se atraen entre s\u00ed - -forceAtlas.maxDisplacement.name=M\u00e1ximo desplazamiento - -forceAtlas.maxDisplacement.desc=Limita el desplazamiento de cada nodo (para prevenir super-repulsi\u00f3n cuando los nodos son muy cercanos) - +forceAtlas.attractionStrength.name=Fuerza de atracciσn +forceAtlas.attractionStrength.desc=Fuerza con la que cada par de nodos conectados se atraen entre sν +forceAtlas.maxDisplacement.name=Mαximo desplazamiento +forceAtlas.maxDisplacement.desc=Limita el desplazamiento de cada nodo (para prevenir super-repulsiσn cuando los nodos son muy cercanos) forceAtlas.freezeBalance.name=Auto-estabilizar - -forceAtlas.freezeBalance.desc=Activa el congelamiento de nodos inestables. A pesar de algo de p\u00e9rdida de eficiencia, previene la inestabilidad de los nodos en la mayor\u00eda de los casos - -forceAtlas.freezeStrength.name=Fuerza de auto-estabilizaci\u00f3n - -forceAtlas.freezeStrength.desc=Fuerza de la funci\u00f3n de auto-estabilizaci\u00f3n - -forceAtlas.freezeInertia.name=Sensibilidad de auto-estabilizaci\u00f3n - -forceAtlas.freezeInertia.desc=[0,1] Este par\u00e1metro representa la auto-adaptabilidad de la funci\u00f3n de anti-inestabilidad (la inercia de fijaci\u00f3n) - +forceAtlas.freezeBalance.desc=Activa el congelamiento de nodos inestables. A pesar de algo de pιrdida de eficiencia, previene la inestabilidad de los nodos en la mayorνa de los casos +forceAtlas.freezeStrength.name=Fuerza de auto-estabilizaciσn +forceAtlas.freezeStrength.desc=Fuerza de la funciσn de auto-estabilizaciσn +forceAtlas.freezeInertia.name=Sensibilidad de auto-estabilizaciσn +forceAtlas.freezeInertia.desc=[0,1] Este parαmetro representa la auto-adaptabilidad de la funciσn de anti-inestabilidad (la inercia de fijaciσn) forceAtlas.gravity.name=Gravedad - -forceAtlas.gravity.desc=Esta fuerza atrae todos los nodos hacia el centro para evitar la dispersi\u00f3n de componentes no conectados - -forceAtlas.outboundAttractionDistribution.name=Distrubuci\u00f3n de Atracci\u00f3n - -forceAtlas.outboundAttractionDistribution.desc=La fuerza de atracci\u00f3n es distribuida a lo largo de los enlaces de uni\u00f3n. Esto tiende a empujar los 'hubs' a la periferia y hacer las 'authorities' m\u00e1s centrales - -forceAtlas.adjustSizes.name=Ajustar por tama\u00f1os - -forceAtlas.adjustSizes.desc=Evitar superposici\u00f3n de nodos (dependiendo del tama\u00f1o de cada nodo) - +forceAtlas.gravity.desc=Esta fuerza atrae todos los nodos hacia el centro para evitar la dispersiσn de componentes no conectados +forceAtlas.outboundAttractionDistribution.name=Distrubuciσn de Atracciσn +forceAtlas.outboundAttractionDistribution.desc=La fuerza de atracciσn es distribuida a lo largo de los enlaces de uniσn. Esto tiende a empujar los 'hubs' a la periferia y hacer las 'authorities' mαs centrales +forceAtlas.adjustSizes.name=Ajustar por tamaρos +forceAtlas.adjustSizes.desc=Evitar superposiciσn de nodos (dependiendo del tamaρo de cada nodo) forceAtlas.speed.name=Velocidad - -forceAtlas.speed.desc=Valor > 0, 1 por defecto ; Permite incrementar la velocidad de convergencia al precio de una p\u00e9rdida de precisi\u00f3n +forceAtlas.speed.desc=Valor > 0, 1 por defecto ; Permite incrementar la velocidad de convergencia al precio de una pιrdida de precisiσn diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_fr.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_fr.properties index 616d9790aa..d16480616a 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_fr.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_fr.properties @@ -1,55 +1,24 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:02+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - name=Force Atlas - -description=Force Atlas rend les graphes plus compactes, lisibles, et peut rendre les autorit\u00e9s plus centrales que les hubs (option d'attraction distribu\u00e9e). L'auto-stabilisation am\u00e9liore la convergence \u00e0 la fin du rendu. - +description=Force Atlas rend les graphes plus compactes, lisibles, et peut rendre les autoritιs plus centrales que les hubs (option d'attraction distribuιe). L'auto-stabilisation amιliore la convergence ΰ la fin du rendu. forceAtlas.inertia.name=Inertie - -forceAtlas.inertia.desc=Conservation de la vitesse des noeuds \u00e0 chaque nouvelle passe - -forceAtlas.repulsionStrength.name=Force de r\u00e9pulsion - +forceAtlas.inertia.desc=Conservation de la vitesse des noeuds ΰ chaque nouvelle passe +forceAtlas.repulsionStrength.name=Force de rιpulsion forceAtlas.repulsionStrength.desc=Avec quelle force chaque noeud se repousse - forceAtlas.attractionStrength.name=Force d'attraction - -forceAtlas.attractionStrength.desc=Avec quelle force chaque noeud connect\u00e9 s'attire - -forceAtlas.maxDisplacement.name=D\u00e9placement maximal - -forceAtlas.maxDisplacement.desc=Limite le d\u00e9placement des noeuds lorsque les noeuds sont trop proches. - +forceAtlas.attractionStrength.desc=Avec quelle force chaque noeud connectι s'attire +forceAtlas.maxDisplacement.name=Dιplacement maximal +forceAtlas.maxDisplacement.desc=Limite le dιplacement des noeuds lorsque les noeuds sont trop proches. forceAtlas.freezeBalance.name=Auto-stabilisation - -forceAtlas.freezeBalance.desc=Active la fixation des noeuds instables. En d\u00e9pit d'une perte d'efficacit\u00e9, cela pr\u00e9vient les effets de scintillement. - +forceAtlas.freezeBalance.desc=Active la fixation des noeuds instables. En dιpit d'une perte d'efficacitι, cela prιvient les effets de scintillement. forceAtlas.freezeStrength.name=Force d'auto-stabilisation - forceAtlas.freezeStrength.desc=Puissance de la fonction d'auto-stabilisation - -forceAtlas.freezeInertia.name=Sensibilit\u00e9 de l'auto-stabilisation - -forceAtlas.freezeInertia.desc=[0,1] Ces param\u00e8tres repr\u00e9sentent l'auto-adaptation de la fonction d'anti-scintillement (l'inertie de fixation) - -forceAtlas.gravity.name=Gravit\u00e9 - -forceAtlas.gravity.desc=Cette force attire tous les noeuds vers le centre pour \u00e9viter la dispertion des composantes d\u00e9connect\u00e9es du graphe. - -forceAtlas.outboundAttractionDistribution.name=Attraction distribu\u00e9e - -forceAtlas.outboundAttractionDistribution.desc=La force attractive est r\u00e9partie le ong des liens sortants. Cela tend \u00e0 repousser les hubs \u00e0 la p\u00e9riph\u00e9rie et \u00e0 rapprocher les autorit\u00e9s du centre. - +forceAtlas.freezeInertia.name=Sensibilitι de l'auto-stabilisation +forceAtlas.freezeInertia.desc=[0,1] Ces paramθtres reprιsentent l'auto-adaptation de la fonction d'anti-scintillement (l'inertie de fixation) +forceAtlas.gravity.name=Gravitι +forceAtlas.gravity.desc=Cette force attire tous les noeuds vers le centre pour ιviter la dispertion des composantes dιconnectιes du graphe. +forceAtlas.outboundAttractionDistribution.name=Attraction distribuιe +forceAtlas.outboundAttractionDistribution.desc=La force attractive est rιpartie le ong des liens sortants. Cela tend ΰ repousser les hubs ΰ la pιriphιrie et ΰ rapprocher les autoritιs du centre. forceAtlas.adjustSizes.name=Ajustement par taille - -forceAtlas.adjustSizes.desc=\u00c9vite le chevauchement des noeuds (d\u00e9pend de la taille de chaque noeud) - +forceAtlas.adjustSizes.desc=Ιvite le chevauchement des noeuds (dιpend de la taille de chaque noeud) forceAtlas.speed.name=Vitesse - -forceAtlas.speed.desc=Valeur > 0 d\u00e9faut 1 ; augmente la vitesse de convergence au prix d'une perte de pr\u00e9cision. +forceAtlas.speed.desc=Valeur > 0 dιfaut 1 ; augmente la vitesse de convergence au prix d'une perte de prιcision. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_he.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_he.properties new file mode 100644 index 0000000000..df3759e2ab --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_he.properties @@ -0,0 +1,24 @@ +name=Force Atlas +description=ForceAtlas makes graphs more compact, readable, and can show authorities more central than hubs (Attraction Distrib. option). Auto-stabilization improves convergence at the end of the layout. +forceAtlas.inertia.name=Inertia +forceAtlas.inertia.desc=Conservation of node speed at each new pass +forceAtlas.repulsionStrength.name=Repulsion strength +forceAtlas.repulsionStrength.desc=How strongly does each node reject others +forceAtlas.attractionStrength.name=Attraction strength +forceAtlas.attractionStrength.desc=How strongly does each pair of connected nodes attract each other +forceAtlas.maxDisplacement.name=Maximum displacement +forceAtlas.maxDisplacement.desc=This is limiting each node's displacement (to prevent some super-rejecting when nodes are too close) +forceAtlas.freezeBalance.name=Auto stabilize function +forceAtlas.freezeBalance.desc=Activates the freezing of unstable nodes. Despite some loss of efficiency, this prevents most of nodes flickering +forceAtlas.freezeStrength.name=Autostab Strength +forceAtlas.freezeStrength.desc=Power of the auto stabilize function +forceAtlas.freezeInertia.name=Autostab sensibility +forceAtlas.freezeInertia.desc=[0,1] This parameters represents the auto-adaptiveness of the anti-flickering function (actually, the freezing inertia) +forceAtlas.gravity.name=Gravity +forceAtlas.gravity.desc=This force attracts all nodes to the center to avoid dispersion of disconnected components +forceAtlas.outboundAttractionDistribution.name=Attraction Distrib. +forceAtlas.outboundAttractionDistribution.desc=The attractive force is distributed along outbound links. This tends to push hubs at the periphery and put authorities more central +forceAtlas.adjustSizes.name=Adjust by Sizes +forceAtlas.adjustSizes.desc=Avoid nodes overlapping (depending from the size of each node) +forceAtlas.speed.name=Speed +forceAtlas.speed.desc=Value > 0 default 1 ; permits you to increase convergence speed at the price of a precision loss diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_hu.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_hu.properties new file mode 100644 index 0000000000..56d5d9a294 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_hu.properties @@ -0,0 +1,24 @@ + + +forceAtlas.gravity.name=Gravit\u00E1ci\u00F3 +forceAtlas.adjustSizes.desc=Ker\u00FClje el a csom\u00F3pontok \u00E1tfed\u00E9s\u00E9t (az egyes csom\u00F3pontok m\u00E9ret\u00E9t\u0151l f\u00FCgg\u0151en) +forceAtlas.speed.name=Sebess\u00E9g +forceAtlas.attractionStrength.desc=Milyen er\u0151sen vonzza egym\u00E1st az egyes csom\u00F3pontp\u00E1rok +description=A ForceAtlas kompaktabb\u00E1, olvashat\u00F3bb\u00E1 teszi a grafikonokat, \u00E9s k\u00F6zpontibb m\u00F3don k\u00E9pes megjelen\u00EDteni a hat\u00F3s\u00E1gokat, mint a hubokat (Attraction Distrib. opci\u00F3). Az automatikus stabiliz\u00E1l\u00E1s jav\u00EDtja a konvergenci\u00E1t az elrendez\u00E9s v\u00E9g\u00E9n. +name=Force Atlas +forceAtlas.speed.desc=\u00C9rt\u00E9k > 0 alap\u00E9rtelmezett 1; lehet\u0151v\u00E9 teszi a konvergencia sebess\u00E9g\u00E9nek n\u00F6vel\u00E9s\u00E9t prec\u00EDzi\u00F3s vesztes\u00E9g \u00E1r\u00E1n +forceAtlas.maxDisplacement.name=Maxim\u00E1lis elmozdul\u00E1s +forceAtlas.freezeStrength.desc=Az automatikus stabiliz\u00E1l\u00F3 funkci\u00F3 teljes\u00EDtm\u00E9nye +forceAtlas.freezeBalance.name=Automatikus stabiliz\u00E1l\u00F3 funkci\u00F3 +forceAtlas.repulsionStrength.name=Tasz\u00EDt\u00F3 er\u0151 +forceAtlas.freezeBalance.desc=Aktiv\u00E1lja az instabil csom\u00F3pontok lefagy\u00E1s\u00E1t. A hat\u00E9konys\u00E1g n\u00E9mi cs\u00F6kken\u00E9se ellen\u00E9re ez megakad\u00E1lyozza a legt\u00F6bb csom\u00F3pont villog\u00E1s\u00E1t +forceAtlas.freezeInertia.desc=[0,1] Ez a param\u00E9ter a vill\u00F3dz\u00E1sg\u00E1tl\u00F3 funkci\u00F3 automatikus alkalmazkod\u00F3k\u00E9pess\u00E9g\u00E9t (val\u00F3j\u00E1ban a fagy\u00E1s tehetetlens\u00E9g\u00E9t) jelzi. +forceAtlas.inertia.name=Tehetetlens\u00E9g +forceAtlas.outboundAttractionDistribution.desc=A vonz\u00F3 er\u0151 a kimen\u0151 linkek ment\u00E9n oszlik el. Ez \u00E1ltal\u00E1ban a perif\u00E9ri\u00E1ra szor\u00EDtja a k\u00F6zpontokat, \u00E9s a hat\u00F3s\u00E1gokat helyezi k\u00F6z\u00E9ppontba +forceAtlas.attractionStrength.name=Vonz\u00E1s ereje +forceAtlas.freezeInertia.name=Autostab \u00E9rz\u00E9kenys\u00E9g +forceAtlas.maxDisplacement.desc=Ez korl\u00E1tozza az egyes csom\u00F3pontok elmozdul\u00E1s\u00E1t (hogy elker\u00FClje a szuper-elutas\u00EDt\u00E1st, ha a csom\u00F3pontok t\u00FAl k\u00F6zel vannak) +forceAtlas.gravity.desc=Ez az er\u0151 az \u00F6sszes csom\u00F3pontot a k\u00F6zpontba vonzza, hogy elker\u00FClje a sz\u00E9tkapcsolt alkatr\u00E9szek sz\u00E9tsz\u00F3r\u00F3d\u00E1s\u00E1t +forceAtlas.repulsionStrength.desc=Milyen er\u0151sen utas\u00EDt el minden csom\u00F3pont m\u00E1sokat +forceAtlas.inertia.desc=A csom\u00F3pont sebess\u00E9g\u00E9nek meg\u0151rz\u00E9se minden \u00FAj l\u00E9p\u00E9sn\u00E9l +forceAtlas.adjustSizes.name=\u00C1ll\u00EDtsa be a m\u00E9retek szerint diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_it.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_it.properties new file mode 100644 index 0000000000..df3759e2ab --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_it.properties @@ -0,0 +1,24 @@ +name=Force Atlas +description=ForceAtlas makes graphs more compact, readable, and can show authorities more central than hubs (Attraction Distrib. option). Auto-stabilization improves convergence at the end of the layout. +forceAtlas.inertia.name=Inertia +forceAtlas.inertia.desc=Conservation of node speed at each new pass +forceAtlas.repulsionStrength.name=Repulsion strength +forceAtlas.repulsionStrength.desc=How strongly does each node reject others +forceAtlas.attractionStrength.name=Attraction strength +forceAtlas.attractionStrength.desc=How strongly does each pair of connected nodes attract each other +forceAtlas.maxDisplacement.name=Maximum displacement +forceAtlas.maxDisplacement.desc=This is limiting each node's displacement (to prevent some super-rejecting when nodes are too close) +forceAtlas.freezeBalance.name=Auto stabilize function +forceAtlas.freezeBalance.desc=Activates the freezing of unstable nodes. Despite some loss of efficiency, this prevents most of nodes flickering +forceAtlas.freezeStrength.name=Autostab Strength +forceAtlas.freezeStrength.desc=Power of the auto stabilize function +forceAtlas.freezeInertia.name=Autostab sensibility +forceAtlas.freezeInertia.desc=[0,1] This parameters represents the auto-adaptiveness of the anti-flickering function (actually, the freezing inertia) +forceAtlas.gravity.name=Gravity +forceAtlas.gravity.desc=This force attracts all nodes to the center to avoid dispersion of disconnected components +forceAtlas.outboundAttractionDistribution.name=Attraction Distrib. +forceAtlas.outboundAttractionDistribution.desc=The attractive force is distributed along outbound links. This tends to push hubs at the periphery and put authorities more central +forceAtlas.adjustSizes.name=Adjust by Sizes +forceAtlas.adjustSizes.desc=Avoid nodes overlapping (depending from the size of each node) +forceAtlas.speed.name=Speed +forceAtlas.speed.desc=Value > 0 default 1 ; permits you to increase convergence speed at the price of a precision loss diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_ja.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_ja.properties index eea360a8c6..ef1a92f438 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_ja.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_ja.properties @@ -1,55 +1,24 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-04 09\:37+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - name=Force Atlas - description=ForceAtlas\u306f\u30b0\u30e9\u30d5\u3092\u30b3\u30f3\u30d1\u30af\u30c8\u306b\u3001\u8aad\u307f\u3084\u3059\u304f\u3001\u30cf\u30d6(\u5f15\u529b\u5206\u5e03\u30aa\u30d7\u30b7\u30e7\u30f3)\u3088\u308a\u3082\u6a29\u5a01\u3092\u8868\u793a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u81ea\u52d5\u5b89\u5b9a\u5316\u306f\u30ec\u30a4\u30a2\u30a6\u30c8\u306e\u6700\u5f8c\u306b\u53ce\u675f\u3092\u5411\u4e0a\u3055\u305b\u307e\u3059\u3002 - forceAtlas.inertia.name=\u6163\u6027 - forceAtlas.inertia.desc=\u5404\u65b0\u898f\u30d1\u30b9\u3067\u306e\u30ce\u30fc\u30c9\u306e\u901f\u5ea6\u306e\u4fdd\u6301 - forceAtlas.repulsionStrength.name=\u65a5\u529b - forceAtlas.repulsionStrength.desc=\u3069\u306e\u304f\u3089\u3044\u306e\u5f37\u3055\u3067\u30ce\u30fc\u30c9\u304c\u53cd\u767a\u3057\u3042\u3046\u304b - forceAtlas.attractionStrength.name=\u5f15\u529b - forceAtlas.attractionStrength.desc=\u3069\u306e\u304f\u3089\u3044\u306e\u5f37\u3055\u3067\u9023\u7d50\u3057\u305f\u30ce\u30fc\u30c9\u5f15\u304d\u5408\u3046\u304b - forceAtlas.maxDisplacement.name=\u6700\u5927\u5909\u4f4d - forceAtlas.maxDisplacement.desc=\u3053\u308c\u306f\u5404\u30ce\u30fc\u30c9\u306e\u5909\u4f4d\u3092\u5236\u9650\u3057\u3066\u3044\u307e\u3059(\u30ce\u30fc\u30c9\u304c\u8fd1\u3059\u304e\u308b\u5834\u5408\u306e\u30b9\u30fc\u30d1\u30fc\u62d2\u5426\u3092\u907f\u3051\u308b\u305f\u3081) - forceAtlas.freezeBalance.name=\u81ea\u52d5\u5b89\u5b9a\u5316\u6a5f\u80fd - forceAtlas.freezeBalance.desc=\u4e0d\u5b89\u5b9a\u306a\u30ce\u30fc\u30c9\u306e\u51cd\u7d50\u3092\u30a2\u30af\u30c6\u30a3\u30d6\u306b\u3057\u307e\u3059\u3002\u3042\u308b\u7a0b\u5ea6\u52b9\u7387\u3092\u72a0\u7272\u306b\u3059\u308b\u304c\u3001\u30ce\u30fc\u30c9\u306e\u3061\u3089\u3064\u304d\u306e\u5927\u534a\u3092\u9632\u6b62 - forceAtlas.freezeStrength.name=\u81ea\u52d5\u5b89\u5b9a\u529b - forceAtlas.freezeStrength.desc=\u81ea\u52d5\u5b89\u5b9a\u6a5f\u80fd\u306e\u529b - forceAtlas.freezeInertia.name=\u81ea\u52d5\u5b89\u5b9a\u611f\u5ea6 - forceAtlas.freezeInertia.desc=[0,1]\u3053\u306e\u30d1\u30e9\u30e1\u30fc\u30bf\u306f\u3001\u53cd\u3061\u3089\u3064\u304d\u6a5f\u80fd\u306e\u81ea\u52d5\u9069\u5fdc\u6027(\u5b9f\u969b\u306b\u306f\u3001\u51cd\u7d50\u6163\u6027)\u3092\u8868\u3057\u307e\u3059\u3002 - forceAtlas.gravity.name=\u91cd\u529b - forceAtlas.gravity.desc=\u3053\u306e\u529b\u306f\u3001\u5207\u65ad\u3055\u308c\u305f\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u5206\u6563\u3092\u907f\u3051\u308b\u305f\u3081\u306b\u3001\u4e2d\u592e\u306b\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u3092\u5f15\u304d\u4ed8\u3051\u308b - forceAtlas.outboundAttractionDistribution.name=\u5f15\u529b\u5206\u5e03 - forceAtlas.outboundAttractionDistribution.desc=\u5f15\u529b\u304c\u30a2\u30a6\u30c8\u30d0\u30a6\u30f3\u30c9\u30ea\u30f3\u30af\u306b\u6cbf\u3063\u3066\u5206\u5e03\u3002\u5468\u56f2\u306b\u30cf\u30d6\u3092\u62bc\u3057\u3084\u308a\u30aa\u30fc\u30bd\u30ea\u30c6\u30a3\u3092\u4e2d\u592e\u306b\u914d\u7f6e\u3059\u308b\u50be\u5411\u3002 - forceAtlas.adjustSizes.name=\u5927\u304d\u3055\u306b\u3088\u308b\u8abf\u6574 - forceAtlas.adjustSizes.desc=\u30ce\u30fc\u30c9\u304c\u91cd\u306a\u308b\u306e\u3092\u56de\u907f(\u305d\u308c\u305e\u308c\u306e\u30ce\u30fc\u30c9\u306e\u5927\u304d\u3055\u306b\u4f9d\u5b58) - forceAtlas.speed.name=\u901f\u5ea6 - forceAtlas.speed.desc=\u5024 > 0\u30c7\u30d5\u30a9\u30eb\u30c81 ; \u7cbe\u5ea6\u3092\u72a0\u7272\u306b\u53ce\u675f\u901f\u5ea6\u3092\u4e0a\u3052\u307e\u3059\u3002 diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_nl.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_nl.properties new file mode 100644 index 0000000000..df3759e2ab --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_nl.properties @@ -0,0 +1,24 @@ +name=Force Atlas +description=ForceAtlas makes graphs more compact, readable, and can show authorities more central than hubs (Attraction Distrib. option). Auto-stabilization improves convergence at the end of the layout. +forceAtlas.inertia.name=Inertia +forceAtlas.inertia.desc=Conservation of node speed at each new pass +forceAtlas.repulsionStrength.name=Repulsion strength +forceAtlas.repulsionStrength.desc=How strongly does each node reject others +forceAtlas.attractionStrength.name=Attraction strength +forceAtlas.attractionStrength.desc=How strongly does each pair of connected nodes attract each other +forceAtlas.maxDisplacement.name=Maximum displacement +forceAtlas.maxDisplacement.desc=This is limiting each node's displacement (to prevent some super-rejecting when nodes are too close) +forceAtlas.freezeBalance.name=Auto stabilize function +forceAtlas.freezeBalance.desc=Activates the freezing of unstable nodes. Despite some loss of efficiency, this prevents most of nodes flickering +forceAtlas.freezeStrength.name=Autostab Strength +forceAtlas.freezeStrength.desc=Power of the auto stabilize function +forceAtlas.freezeInertia.name=Autostab sensibility +forceAtlas.freezeInertia.desc=[0,1] This parameters represents the auto-adaptiveness of the anti-flickering function (actually, the freezing inertia) +forceAtlas.gravity.name=Gravity +forceAtlas.gravity.desc=This force attracts all nodes to the center to avoid dispersion of disconnected components +forceAtlas.outboundAttractionDistribution.name=Attraction Distrib. +forceAtlas.outboundAttractionDistribution.desc=The attractive force is distributed along outbound links. This tends to push hubs at the periphery and put authorities more central +forceAtlas.adjustSizes.name=Adjust by Sizes +forceAtlas.adjustSizes.desc=Avoid nodes overlapping (depending from the size of each node) +forceAtlas.speed.name=Speed +forceAtlas.speed.desc=Value > 0 default 1 ; permits you to increase convergence speed at the price of a precision loss diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_pt_BR.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_pt_BR.properties index 7603ea8ddc..d046a139ba 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_pt_BR.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_pt_BR.properties @@ -1,55 +1,24 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 23\:35+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -name=Force Atlas - -description=ForceAtlas faz os grafos mais compactos e leg\u00edveis e pode exibir as 'authorities' mais centralmente do que os 'hubs' (op\u00e7\u00e3o de Distribui\u00e7\u00e3o de Atra\u00e7\u00e3o). A autoestabiliza\u00e7\u00e3o aumenta a converg\u00eancia ao final do algoritmo. - -forceAtlas.inertia.name=In\u00e9rcia - -forceAtlas.inertia.desc=Conserva\u00e7\u00e3o da velocidade dos n\u00f3s a cada novo passo - -forceAtlas.repulsionStrength.name=For\u00e7a de repuls\u00e3o - -forceAtlas.repulsionStrength.desc=For\u00e7a com que cada n\u00f3 repele os demais. - -forceAtlas.attractionStrength.name=For\u00e7a de atra\u00e7\u00e3o - -forceAtlas.attractionStrength.desc=For\u00e7a com que cada par de n\u00f3s conectados se atrai - -forceAtlas.maxDisplacement.name=Deslocamento m\u00e1ximo - -forceAtlas.maxDisplacement.desc=Limita o deslocamento de cada n\u00f3 (para prevenir a super-repuls\u00e3o quando os n\u00f3s est\u00e3o muito pr\u00f3ximos) - -forceAtlas.freezeBalance.name=Fun\u00e7\u00e3o de autoestabiliza\u00e7\u00e3o - -forceAtlas.freezeBalance.desc=Ativa o congelamento de n\u00f3s inst\u00e1veis. Apesar de apresentar alguma perda de efici\u00eancia, esta fun\u00e7\u00e3o previne a instabilidade dos n\u00f3s na maioria dos casos - -forceAtlas.freezeStrength.name=For\u00e7a de autoestabiliza\u00e7\u00e3o - -forceAtlas.freezeStrength.desc=For\u00e7a da fun\u00e7\u00e3o de autoestabiliza\u00e7\u00e3o - -forceAtlas.freezeInertia.name=Sensibilidade da autoestabiliza\u00e7\u00e3o - -forceAtlas.freezeInertia.desc=[0,1] Este par\u00e2metro representa a auto-adaptabilidade da fun\u00e7\u00e3o anti-instabilidade (esta \u00e9, na verdade, a in\u00e9rcia de congelamento) - +name=Atlas da For\u00E7a +description=ForceAtlas faz os grafos mais compactos e legνveis e pode exibir as 'authorities' mais centralmente do que os 'hubs' (opηγo de Distribuiηγo de Atraηγo). A autoestabilizaηγo aumenta a convergκncia ao final do algoritmo. +forceAtlas.inertia.name=Inιrcia +forceAtlas.inertia.desc=Conservaηγo da velocidade dos nσs a cada novo passo +forceAtlas.repulsionStrength.name=Forηa de repulsγo +forceAtlas.repulsionStrength.desc=Forηa com que cada nσ repele os demais. +forceAtlas.attractionStrength.name=Forηa de atraηγo +forceAtlas.attractionStrength.desc=Forηa com que cada par de nσs conectados se atrai +forceAtlas.maxDisplacement.name=Deslocamento mαximo +forceAtlas.maxDisplacement.desc=Limita o deslocamento de cada nσ (para prevenir a super-repulsγo quando os nσs estγo muito prσximos) +forceAtlas.freezeBalance.name=Funηγo de autoestabilizaηγo +forceAtlas.freezeBalance.desc=Ativa o congelamento de nσs instαveis. Apesar de apresentar alguma perda de eficiκncia, esta funηγo previne a instabilidade dos nσs na maioria dos casos +forceAtlas.freezeStrength.name=Forηa de autoestabilizaηγo +forceAtlas.freezeStrength.desc=Forηa da funηγo de autoestabilizaηγo +forceAtlas.freezeInertia.name=Sensibilidade da autoestabilizaηγo +forceAtlas.freezeInertia.desc=[0,1] Este parβmetro representa a auto-adaptabilidade da funηγo anti-instabilidade (esta ι, na verdade, a inιrcia de congelamento) forceAtlas.gravity.name=Gravidade - -forceAtlas.gravity.desc=Esta for\u00e7a atrai todos os n\u00f3s para o centro a fim de evitar a dispers\u00e3o dos componentes desconectados - -forceAtlas.outboundAttractionDistribution.name=Distribui\u00e7\u00e3o da atra\u00e7\u00e3o - -forceAtlas.outboundAttractionDistribution.desc=A for\u00e7a de atra\u00e7\u00e3o \u00e9 distribu\u00edda ao longo das conex\u00f5es de uni\u00e3o. Isso tende a empurrar os 'hubs' para a periferia e trazer as 'authorities' para a parte mais central - +forceAtlas.gravity.desc=Esta forηa atrai todos os nσs para o centro a fim de evitar a dispersγo dos componentes desconectados +forceAtlas.outboundAttractionDistribution.name=Distribuiηγo da atraηγo +forceAtlas.outboundAttractionDistribution.desc=A forηa de atraηγo ι distribuνda ao longo das conexυes de uniγo. Isso tende a empurrar os 'hubs' para a periferia e trazer as 'authorities' para a parte mais central forceAtlas.adjustSizes.name=Ajustar pelos tamanhos - -forceAtlas.adjustSizes.desc=Evitar superposi\u00e7\u00e3o de n\u00f3s (dependendo do tamanho de cada n\u00f3) - +forceAtlas.adjustSizes.desc=Evitar superposiηγo de nσs (dependendo do tamanho de cada nσ) forceAtlas.speed.name=Velocidade - -forceAtlas.speed.desc=Valor > 0, padr\u00e3o 1; permite aumentar a velocidade de converg\u00eancia em troca de perda de precis\u00e3o +forceAtlas.speed.desc=Valor > 0, padrγo 1; permite aumentar a velocidade de convergκncia em troca de perda de precisγo diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_ro.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_ro.properties new file mode 100644 index 0000000000..27ccf6bc61 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_ro.properties @@ -0,0 +1,26 @@ + + +forceAtlas.inertia.name=Iner\u021Bie +forceAtlas.inertia.desc=Conservarea vitezei nodurilor la fiecare itera\u021Bie +forceAtlas.repulsionStrength.name=Putere de respingere +forceAtlas.repulsionStrength.desc=C\u00E2t de puternic le respinge un nod pe celelalte +forceAtlas.maxDisplacement.name=Deplasare maxim\u0103 +forceAtlas.maxDisplacement.desc=Limiteaz\u0103 deplasarea fiec\u0103rui nod (pentru a preveni unele super-respingeri atunci c\u00E2nd nodurile sunt prea aproape) +forceAtlas.freezeInertia.desc=[0,1] Ace\u0219ti parametri reprezint\u0103 auto-adaptivitatea func\u021Biei "anti-p\u00E2lp\u00E2ire" (de fapt, iner\u021Bia de \u00EEnghe\u021B) +forceAtlas.gravity.name=Gravita\u021Bie +forceAtlas.gravity.desc=Aceast\u0103 for\u021B\u0103 atrage toate nodurile spre centru pentru a evita dispersia componentelor deconectate +forceAtlas.outboundAttractionDistribution.name=Atrac\u021Bie Distribuit\u0103 +forceAtlas.outboundAttractionDistribution.desc=For\u021Ba de atrac\u021Bie este distribuit\u0103 de-a lungul leg\u0103turilor de ie\u0219ire. Acest lucru tinde s\u0103 \u00EEmping\u0103 hub-urile la periferie \u0219i s\u0103 plaseze autorit\u0103\u021Bile mai central +forceAtlas.adjustSizes.name=Ajustare dup\u0103 dimensiuni +forceAtlas.adjustSizes.desc=Evit\u0103 suprapunerea nodurilor (\u00EEn func\u021Bie de dimensiunea fiec\u0103ruia) +forceAtlas.speed.name=Vitez\u0103 +forceAtlas.speed.desc=Valoare > 0 implicit 1 ; permite cre\u0219terea vitezei de convergen\u021B\u0103, dar pierde din precizie +name=Force Atlas +description=ForceAtlas face grafurile mai compacte, mai u\u0219or de citit \u0219i poate ar\u0103ta autorit\u0103\u021Bile mai centrale dec\u00E2t hub-urile (op\u021Biunea Attraction Distrib.). Auto-stabilizarea \u00EEmbun\u0103t\u0103\u021Be\u0219te convergen\u021Ba la finalul dispunerii. +forceAtlas.attractionStrength.name=Putere de atrac\u021Bie +forceAtlas.freezeStrength.name=Putere de autostabilizare +forceAtlas.attractionStrength.desc=C\u00E2t de puternic se atrag reciproc nodurile conectate +forceAtlas.freezeBalance.name=Func\u021Bie de stabilizare automat\u0103 +forceAtlas.freezeBalance.desc=Activeaz\u0103 \u00EEnghe\u021Barea nodurilor instabile. \u00CEn ciuda unor pierderi de eficien\u021B\u0103, acest lucru \u00EEmpiedic\u0103 majoritatea nodurilor s\u0103 "p\u00E2lp\u00E2ie" +forceAtlas.freezeStrength.desc=Puterea func\u021Biei de autostabilizare +forceAtlas.freezeInertia.name=Sensibilitate de autostabilizare diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_ru.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_ru.properties index abb05b7d61..eb23b69ee4 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_ru.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_ru.properties @@ -1,55 +1,24 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 15\:37+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - name=Force Atlas - description=ForceAtlas \u0434\u0435\u043b\u0430\u0435\u0442 \u0433\u0440\u0430\u0444 \u0431\u043e\u043b\u0435\u0435 \u043a\u043e\u043c\u043f\u0430\u043a\u0442\u043d\u044b\u043c, \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u043c \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0438\u0442\u044c authorities \u0441\u0440\u0435\u0434\u0438 \u0445\u0430\u0431\u043e\u0432 (\u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u043f\u0446\u0438\u0438 Attraction Distrib.). \u0410\u0432\u0442\u043e\u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u0435\u0442 \u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0443\u043a\u043b\u0430\u0434\u043a\u0438 \u043d\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0445 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u044f\u0445. - forceAtlas.inertia.name=\u0418\u043d\u0435\u0440\u0446\u0438\u044f - forceAtlas.inertia.desc=\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0447\u0430\u0441\u0442\u0438 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0443\u0437\u043b\u0430 \u0441 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 - forceAtlas.repulsionStrength.name=\u0421\u0438\u043b\u0430 \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043d\u0438\u044f - forceAtlas.repulsionStrength.desc=\u0421\u0438\u043b\u0430 \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043a\u0430\u0436\u0434\u044b\u0439 \u0443\u0437\u0435\u043b \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u0435\u0442 \u0434\u0440\u0443\u0433\u0438\u0435 \u0443\u0437\u043b\u044b - forceAtlas.attractionStrength.name=\u0421\u0438\u043b\u0430 \u043f\u0440\u0438\u0442\u044f\u0436\u0435\u043d\u0438\u044f - forceAtlas.attractionStrength.desc=\u0421\u0438\u043b\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u0430\u0440\u0430 \u0443\u0437\u043b\u043e\u0432, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u0440\u0435\u0431\u0440\u043e\u043c, \u043f\u0440\u0438\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430. - forceAtlas.maxDisplacement.name=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043d\u0438\u0435 - forceAtlas.maxDisplacement.desc=\u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u043d\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0443\u0437\u043b\u0430 (\u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c "\u0432\u044b\u0441\u0442\u0440\u0435\u043b\u0438\u0432\u0430\u043d\u0438\u044f" \u0443\u0437\u043b\u043e\u0432, \u043a\u043e\u0433\u0434\u0430 \u043e\u043d\u0438 \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0431\u043b\u0438\u0437\u043a\u043e) - forceAtlas.freezeBalance.name=\u0410\u0432\u0442\u043e\u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u044f - forceAtlas.freezeBalance.desc=\u0420\u0435\u0436\u0438\u043c "\u0437\u0430\u043c\u043e\u0440\u0430\u0436\u0438\u0432\u0430\u043d\u0438\u044f" \u043d\u0435\u0441\u0442\u0430\u0431\u0438\u043b\u044c\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432. \u0412\u0435\u0434\u0435\u0442 \u043a \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u0442\u0435\u0440\u0435 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0438, \u043d\u043e \u043f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u044e "\u043c\u0438\u0433\u0430\u043d\u0438\u044f". - forceAtlas.freezeStrength.name=\u0421\u0438\u043b\u0430 \u0430\u0432\u0442\u043e\u0441\u0442\u0430\u0431\u043b\u0438\u0437\u0438\u0430\u0446\u0438\u0438 - forceAtlas.freezeStrength.desc=\u0421\u0438\u043b\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0430\u0432\u0442\u043e\u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u0438 - forceAtlas.freezeInertia.name=\u0427\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0430\u0432\u0442\u043e\u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u0438 - forceAtlas.freezeInertia.desc=[0,1], \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0447\u0443\u0432\u0441\u0442\u0432\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0430\u0432\u0442\u043e\u0441\u0442\u0430\u0431\u0438\u043b\u0438\u0437\u0430\u0446\u0438\u0438 (\u043f\u043e \u0441\u0443\u0442\u0438, \u0438\u043d\u0435\u0440\u0446\u0438\u044f \u0437\u0430\u043c\u043e\u0440\u043e\u0437\u043a\u0438) - forceAtlas.gravity.name=\u0413\u0440\u0430\u0432\u0438\u0442\u0430\u0446\u0438\u044f - forceAtlas.gravity.desc=\u0421\u0438\u043b\u0430, \u043f\u0440\u0438\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0449\u0430\u044f \u0432\u0441\u0435 \u0443\u0437\u043b\u044b \u043a \u0446\u0435\u043d\u0442\u0440\u0443. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c "\u0440\u0430\u0437\u043b\u0435\u0442\u0430\u043d\u0438\u0435" \u043d\u0435\u0441\u0432\u044f\u0437\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442. - forceAtlas.outboundAttractionDistribution.name=\u041e\u0441\u043b\u0430\u0431\u043b\u0435\u043d\u0438\u0435 \u0445\u0430\u0431\u043e\u0432 - forceAtlas.outboundAttractionDistribution.desc=\u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u0438\u043b\u0443 \u043f\u0440\u0438\u0442\u044f\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u043c \u0440\u0451\u0431\u0440\u0430\u043c. \u0425\u0430\u0431\u044b \u0431\u0443\u0434\u0443\u0442 \u0441\u043b\u0430\u0431\u0435\u0435 \u0441\u0442\u044f\u0433\u0438\u0432\u0430\u0442\u044c \u0443\u0437\u043b\u044b \u0432\u043e\u043a\u0440\u0443\u0433 \u0441\u0435\u0431\u044f. - forceAtlas.adjustSizes.name=\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 - forceAtlas.adjustSizes.desc=\u041f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u043d\u0430\u043b\u043e\u0436\u0435\u043d\u0438\u044e \u0443\u0437\u043b\u044b (\u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0438\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u0430) - forceAtlas.speed.name=\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c - -forceAtlas.speed.desc=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 0. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \= 1. \u0414\u0430\u0451\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u0443\u043a\u043b\u0430\u0434\u043a\u0443 \u0437\u0430 \u0441\u0447\u0451\u0442 \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438. +forceAtlas.speed.desc=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 0. \u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e = 1. \u0414\u0430\u0451\u0442 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0443\u0441\u043a\u043e\u0440\u0438\u0442\u044c \u0443\u043a\u043b\u0430\u0434\u043a\u0443 \u0437\u0430 \u0441\u0447\u0451\u0442 \u0441\u043d\u0438\u0436\u0435\u043d\u0438\u044f \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_th.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_tr.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_tr.properties new file mode 100644 index 0000000000..cd003d7184 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_tr.properties @@ -0,0 +1,24 @@ +name=Force Atlas +description=ForceAtlas makes graphs more compact, readable, and can show authorities more central than hubs (Attraction Distrib. option). Auto-stabilization improves convergence at the end of the layout. +forceAtlas.inertia.name=Inertia +forceAtlas.inertia.desc=Conservation of node speed at each new pass +forceAtlas.repulsionStrength.name=Repulsion strength +forceAtlas.repulsionStrength.desc=How strongly does each node reject others +forceAtlas.attractionStrength.name=Attraction strength +forceAtlas.attractionStrength.desc=How strongly does each pair of connected nodes attract each other +forceAtlas.maxDisplacement.name=Maximum displacement +forceAtlas.maxDisplacement.desc=This is limiting each node's displacement (to prevent some super-rejecting when nodes are too close) +forceAtlas.freezeBalance.name=Auto stabilize function +forceAtlas.freezeBalance.desc=Activates the freezing of unstable nodes. Despite some loss of efficiency, this prevents most of nodes flickering +forceAtlas.freezeStrength.name=Autostab Strength +forceAtlas.freezeStrength.desc=Power of the auto stabilize function +forceAtlas.freezeInertia.name=Autostab sensibility +forceAtlas.freezeInertia.desc=[0,1] This parameters represents the auto-adaptiveness of the anti-flickering function (actually, the freezing inertia) +forceAtlas.gravity.name=Gravity +forceAtlas.gravity.desc=This force attracts all nodes to the center to avoid dispersion of disconnected components +forceAtlas.outboundAttractionDistribution.name=Attraction Distrib. +forceAtlas.outboundAttractionDistribution.desc=The attractive force is distributed along outbound links. This tends to push hubs at the periphery and put authorities more central +forceAtlas.adjustSizes.name=Adjust by Sizes +forceAtlas.adjustSizes.desc=Avoid nodes overlapping (depending from the size of each node) +forceAtlas.speed.name=H\u0131z +forceAtlas.speed.desc=Value > 0 default 1 ; permits you to increase convergence speed at the price of a precision loss diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_uk.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_uk.properties new file mode 100644 index 0000000000..e0edbe3d15 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_uk.properties @@ -0,0 +1,24 @@ +forceAtlas.freezeInertia.name=\u0427\u0443\u0442\u043B\u0438\u0432\u0456\u0441\u0442\u044C \u0430\u0432\u0442\u043E\u0443\u043A\u043E\u043B\u0443 +forceAtlas.freezeInertia.desc=[0,1] \u0426\u0435\u0439 \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u043F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u044F\u0454 \u0430\u0432\u0442\u043E\u0430\u0434\u0430\u043F\u0442\u0438\u0432\u043D\u0456\u0441\u0442\u044C \u0444\u0443\u043D\u043A\u0446\u0456\u0457 \u0437\u0430\u043F\u043E\u0431\u0456\u0433\u0430\u043D\u043D\u044F \u043C\u0435\u0440\u0435\u0445\u0442\u0456\u043D\u043D\u044F (\u0444\u0430\u043A\u0442\u0438\u0447\u043D\u043E, \u0456\u043D\u0435\u0440\u0446\u0456\u044E \u0437\u0430\u043C\u0435\u0440\u0437\u0430\u043D\u043D\u044F) +forceAtlas.maxDisplacement.desc=\u0426\u0435 \u043E\u0431\u043C\u0435\u0436\u0443\u0454 \u0437\u043C\u0456\u0449\u0435\u043D\u043D\u044F \u043A\u043E\u0436\u043D\u043E\u0433\u043E \u0432\u0443\u0437\u043B\u0430 (\u0449\u043E\u0431 \u0437\u0430\u043F\u043E\u0431\u0456\u0433\u0442\u0438 \u0434\u0435\u044F\u043A\u043E\u043C\u0443 \u0441\u0443\u043F\u0435\u0440-\u0432\u0456\u0434\u0445\u0438\u043B\u0435\u043D\u043D\u044E, \u043A\u043E\u043B\u0438 \u0432\u0443\u0437\u043B\u0438 \u0437\u043D\u0430\u0445\u043E\u0434\u044F\u0442\u044C\u0441\u044F \u0437\u0430\u043D\u0430\u0434\u0442\u043E \u0431\u043B\u0438\u0437\u044C\u043A\u043E) +forceAtlas.speed.desc=\u0417\u043D\u0430\u0447\u0435\u043D\u043D\u044F > 0 \u0437\u0430 \u0443\u043C\u043E\u0432\u0447\u0430\u043D\u043D\u044F\u043C 1; \u0434\u043E\u0437\u0432\u043E\u043B\u044F\u0454 \u0437\u0431\u0456\u043B\u044C\u0448\u0438\u0442\u0438 \u0448\u0432\u0438\u0434\u043A\u0456\u0441\u0442\u044C \u043A\u043E\u043D\u0432\u0435\u0440\u0433\u0435\u043D\u0446\u0456\u0457 \u0446\u0456\u043D\u043E\u044E \u0432\u0442\u0440\u0430\u0442\u0438 \u0442\u043E\u0447\u043D\u043E\u0441\u0442\u0456 +forceAtlas.freezeStrength.name=\u0421\u0438\u043B\u0430 \u0430\u0432\u0442\u043E\u0443\u0434\u0430\u0440\u0443 +forceAtlas.freezeBalance.desc=\u0410\u043A\u0442\u0438\u0432\u0443\u0454 \u0437\u0430\u043C\u043E\u0440\u043E\u0436\u0443\u0432\u0430\u043D\u043D\u044F \u043D\u0435\u0441\u0442\u0430\u0431\u0456\u043B\u044C\u043D\u0438\u0445 \u0432\u0443\u0437\u043B\u0456\u0432. \u041D\u0435\u0437\u0432\u0430\u0436\u0430\u044E\u0447\u0438 \u043D\u0430 \u0434\u0435\u044F\u043A\u0443 \u0432\u0442\u0440\u0430\u0442\u0443 \u0435\u0444\u0435\u043A\u0442\u0438\u0432\u043D\u043E\u0441\u0442\u0456, \u0446\u0435 \u0437\u0430\u043F\u043E\u0431\u0456\u0433\u0430\u0454 \u043C\u0435\u0440\u0435\u0445\u0442\u0456\u043D\u043D\u044F \u0431\u0456\u043B\u044C\u0448\u043E\u0441\u0442\u0456 \u0432\u0443\u0437\u043B\u0456\u0432 +forceAtlas.freezeStrength.desc=\u041F\u043E\u0442\u0443\u0436\u043D\u0456\u0441\u0442\u044C \u0444\u0443\u043D\u043A\u0446\u0456\u0457 \u0430\u0432\u0442\u043E\u0441\u0442\u0430\u0431\u0456\u043B\u0456\u0437\u0430\u0446\u0456\u0457 +forceAtlas.adjustSizes.name=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u0442\u0438 \u0437\u0430 \u0440\u043E\u0437\u043C\u0456\u0440\u0430\u043C\u0438 +name=\u0410\u0442\u043B\u0430\u0441 \u0441\u0438\u043B +forceAtlas.inertia.name=\u0406\u043D\u0435\u0440\u0442\u043D\u0456\u0441\u0442\u044C +forceAtlas.inertia.desc=\u0417\u0431\u0435\u0440\u0435\u0436\u0435\u043D\u043D\u044F \u0448\u0432\u0438\u0434\u043A\u043E\u0441\u0442\u0456 \u0432\u0443\u0437\u043B\u0430 \u043F\u0440\u0438 \u043A\u043E\u0436\u043D\u043E\u043C\u0443 \u043D\u043E\u0432\u043E\u043C\u0443 \u043F\u0440\u043E\u0445\u043E\u0434\u0456 +forceAtlas.repulsionStrength.name=\u0421\u0438\u043B\u0430 \u0432\u0456\u0434\u0448\u0442\u043E\u0432\u0445\u0443\u0432\u0430\u043D\u043D\u044F +forceAtlas.repulsionStrength.desc=\u041D\u0430\u0441\u043A\u0456\u043B\u044C\u043A\u0438 \u0441\u0438\u043B\u044C\u043D\u043E \u043A\u043E\u0436\u0435\u043D \u0432\u0443\u0437\u043E\u043B \u0432\u0456\u0434\u043A\u0438\u0434\u0430\u0454 \u0456\u043D\u0448\u0456 +forceAtlas.attractionStrength.name=\u0421\u0438\u043B\u0430 \u0442\u044F\u0436\u0456\u043D\u043D\u044F +forceAtlas.attractionStrength.desc=\u041D\u0430\u0441\u043A\u0456\u043B\u044C\u043A\u0438 \u0441\u0438\u043B\u044C\u043D\u043E \u043A\u043E\u0436\u043D\u0430 \u043F\u0430\u0440\u0430 \u0437\u2019\u0454\u0434\u043D\u0430\u043D\u0438\u0445 \u0432\u0443\u0437\u043B\u0456\u0432 \u043F\u0440\u0438\u0442\u044F\u0433\u0443\u0454 \u043E\u0434\u0438\u043D \u043E\u0434\u043D\u043E\u0433\u043E +forceAtlas.maxDisplacement.name=\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430 \u0432\u043E\u0434\u043E\u0442\u043E\u043D\u043D\u0430\u0436\u043D\u0456\u0441\u0442\u044C +forceAtlas.gravity.desc=\u0426\u044F \u0441\u0438\u043B\u0430 \u043F\u0440\u0438\u0442\u044F\u0433\u0443\u0454 \u0432\u0441\u0456 \u0432\u0443\u0437\u043B\u0438 \u0434\u043E \u0446\u0435\u043D\u0442\u0440\u0443, \u0449\u043E\u0431 \u0443\u043D\u0438\u043A\u043D\u0443\u0442\u0438 \u0440\u043E\u0437\u0441\u0456\u044E\u0432\u0430\u043D\u043D\u044F \u0432\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0445 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0456\u0432 +forceAtlas.outboundAttractionDistribution.name=\u0410\u0442\u0440\u0430\u043A\u0446\u0456\u043E\u043D \u0414\u0438\u0441\u0442\u0440\u0438\u0431. +forceAtlas.speed.name=\u0428\u0432\u0438\u0434\u043A\u0456\u0441\u0442\u044C +description=ForceAtlas \u0440\u043E\u0431\u0438\u0442\u044C \u0433\u0440\u0430\u0444\u0456\u043A\u0438 \u0431\u0456\u043B\u044C\u0448 \u043A\u043E\u043C\u043F\u0430\u043A\u0442\u043D\u0438\u043C\u0438, \u0447\u0438\u0442\u0430\u0431\u0435\u043B\u044C\u043D\u0438\u043C\u0438 \u0442\u0430 \u043C\u043E\u0436\u0435 \u0432\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0430\u0442\u0438 \u043E\u0440\u0433\u0430\u043D\u0438 \u0432\u043B\u0430\u0434\u0438 \u0431\u0456\u043B\u044C\u0448 \u0446\u0435\u043D\u0442\u0440\u0430\u043B\u044C\u043D\u0456, \u043D\u0456\u0436 \u0446\u0435\u043D\u0442\u0440\u0438 (\u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 Attraction Distrib.). \u0410\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u043D\u0430 \u0441\u0442\u0430\u0431\u0456\u043B\u0456\u0437\u0430\u0446\u0456\u044F \u043F\u043E\u043A\u0440\u0430\u0449\u0443\u0454 \u043A\u043E\u043D\u0432\u0435\u0440\u0433\u0435\u043D\u0446\u0456\u044E \u0432 \u043A\u0456\u043D\u0446\u0456 \u043C\u0430\u043A\u0435\u0442\u0430. +forceAtlas.freezeBalance.name=\u0424\u0443\u043D\u043A\u0446\u0456\u044F \u0430\u0432\u0442\u043E\u0441\u0442\u0430\u0431\u0456\u043B\u0456\u0437\u0430\u0446\u0456\u0457 +forceAtlas.gravity.name=\u0421\u0438\u043B\u0430 \u0442\u044F\u0436\u0456\u043D\u043D\u044F +forceAtlas.adjustSizes.desc=\u0423\u043D\u0438\u043A\u0430\u0439\u0442\u0435 \u043D\u0430\u043A\u043B\u0430\u0434\u0430\u043D\u043D\u044F \u0432\u0443\u0437\u043B\u0456\u0432 (\u0437\u0430\u043B\u0435\u0436\u043D\u043E \u0432\u0456\u0434 \u0440\u043E\u0437\u043C\u0456\u0440\u0443 \u043A\u043E\u0436\u043D\u043E\u0433\u043E \u0432\u0443\u0437\u043B\u0430) +forceAtlas.outboundAttractionDistribution.desc=\u0421\u0438\u043B\u0430 \u0442\u044F\u0436\u0456\u043D\u043D\u044F \u0440\u043E\u0437\u043F\u043E\u0434\u0456\u043B\u044F\u0454\u0442\u044C\u0441\u044F \u0432\u0437\u0434\u043E\u0432\u0436 \u0432\u0438\u0445\u0456\u0434\u043D\u0438\u0445 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u044C. \u0426\u0435, \u044F\u043A \u043F\u0440\u0430\u0432\u0438\u043B\u043E, \u0432\u0456\u0434\u0441\u0443\u0432\u0430\u0454 \u0446\u0435\u043D\u0442\u0440\u0438 \u043D\u0430 \u043F\u0435\u0440\u0438\u0444\u0435\u0440\u0456\u044E \u0442\u0430 \u0441\u0442\u0430\u0432\u0438\u0442\u044C \u043E\u0440\u0433\u0430\u043D\u0438 \u0432\u043B\u0430\u0434\u0438 \u0432 \u0446\u0435\u043D\u0442\u0440 diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_zh_CN.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_zh_CN.properties index 2bee84e894..c349ec6b76 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_zh_CN.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_zh_CN.properties @@ -1,55 +1,24 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 04\:18+0000\nLast-Translator\: Xi-Nian Zuo \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - name=Force Atlas - -description=ForceAtlas\u4f7f\u56fe\u66f4\u7d27\u51d1\uff0c\u53ef\u8bfb\u6027\u5f3a\uff0c\u5e76\u663e\u793a\u5927\u4e8ehub\u7684\u4e2d\u5fc3\u5316\u7684\u6743\u9650\uff08\u5438\u5f15\u529b\u5206\u5e03\u9009\u9879\uff09\u3002\u81ea\u52a8\u7a33\u5b9a\u63d0\u9ad8\u5e03\u5c40\u7684\u8854\u63a5\u3002 - +description=ForceAtlas \u4F7F\u56FE\u66F4\u7D27\u51D1\uFF0C\u53EF\u8BFB\u6027\u5F3A\uFF0C\u80FD\u6BD4 hub \u66F4\u4E2D\u5FC3\u5316\u663E\u793A authorities\uFF08\u5438\u5F15\u529B\u5206\u5E03\u9009\u9879\uFF09\u3002\u81EA\u52A8\u7A33\u5B9A\u6539\u5584\u4E86\u5E03\u5C40\u672B\u7AEF\u7684\u6536\u655B\u6027\u3002 forceAtlas.inertia.name=\u60ef\u6027 - forceAtlas.inertia.desc=\u5728\u6bcf\u4e00\u4e2a\u65b0\u7684\u4f20\u9012\u8282\u70b9\u901f\u5ea6\u7684\u4fdd\u62a4 - forceAtlas.repulsionStrength.name=\u65a5\u529b\u5f3a\u5ea6 - forceAtlas.repulsionStrength.desc=\u6bcf\u4e2a\u8282\u70b9\u62d2\u7edd\u5176\u5b83\u8282\u70b9\u662f\u591a\u4e48\u5f3a\u70c8 - forceAtlas.attractionStrength.name=\u5438\u5f15\u5f3a\u5ea6 - forceAtlas.attractionStrength.desc=\u6bcf\u4e2a\u8fde\u63a5\u8282\u70b9\u5bf9\u4e92\u76f8\u5438\u5f15\u662f\u591a\u4e48\u5f3a\u70c8 - forceAtlas.maxDisplacement.name=\u6700\u5927\u4f4d\u79fb\u91cf - forceAtlas.maxDisplacement.desc=\u8fd9\u662f\u9650\u5236\u6bcf\u4e2a\u8282\u70b9\u7684\u4f4d\u79fb\uff08\u5f53\u8282\u70b9\u8ddd\u79bb\u592a\u8fd1\u65f6\u9632\u6b62\u4e00\u4e9b\u8d85\u62d2\u7edd\uff09 - forceAtlas.freezeBalance.name=\u81ea\u52a8\u7a33\u5b9a\u529f\u80fd - -forceAtlas.freezeBalance.desc=\u6fc0\u6d3b\u51bb\u7ed3\u4e0d\u7a33\u5b9a\u8282\u70b9\u3002\u5c3d\u7ba1\u53d6\u5f97\u4e86\u4e00\u4e9b\u6548\u7387\u7684\u635f\u5931\uff0c\u8fd9\u6837\u53ef\u4ee5\u9632\u6b62\u5927\u90e8\u5206\u8282\u70b9\u95ea\u53d8\u3002 - +forceAtlas.freezeBalance.desc=\u6FC0\u6D3B\u51BB\u7ED3\u4E0D\u7A33\u5B9A\u8282\u70B9\u3002\u5C3D\u7BA1\u4F1A\u6709\u4E00\u4E9B\u6548\u7387\u635F\u5931\uFF0C\u4F46\u8FD9\u53EF\u4EE5\u9632\u6B62\u5927\u90E8\u5206\u8282\u70B9\u95EA\u53D8 forceAtlas.freezeStrength.name=\u81ea\u52a8\u7a33\u5b9a\u5f3a\u5ea6 - forceAtlas.freezeStrength.desc=\u7535\u6e90\u7684\u81ea\u52a8\u7a33\u5b9a\u529f\u80fd - forceAtlas.freezeInertia.name=\u81ea\u52a8\u7a33\u5b9a\u654f\u611f\u6027 - forceAtlas.freezeInertia.desc=[0,1]\u8fd9\u4e2a\u53c2\u6570\u4ee3\u8868\u7684\u6297\u95ea\u53d8\u529f\u80fd\u7684\u81ea\u52a8\u9002\u5e94\u80fd\u529b\uff08\u5b9e\u9645\u4e0a\uff0c\u51bb\u7ed3\u7684\u60ef\u6027\uff09 - forceAtlas.gravity.name=\u91cd\u529b - -forceAtlas.gravity.desc=\u8fd9\u79cd\u529b\u91cf\u5438\u5f15\u4e86\u6240\u6709\u7684\u8282\u70b9\u8d8b\u4e8e\u4e2d\u5fc3\u4ee5\u907f\u514d\u5931\u8fde\u63a5\u7684\u6210\u5206\u5206\u6563\u3002 - -forceAtlas.outboundAttractionDistribution.name=\u5438\u5f15\u529b\u5206\u5e03 - -forceAtlas.outboundAttractionDistribution.desc=\u5438\u5f15\u529b\u662f\u5206\u5e03\u5728\u51fa\u7ad9\u94fe\u63a5\u3002\u8fd9\u5f80\u5f80\u63a8\u5728\u5916\u56f4\u7684\u67a2\u7ebd\uff0c\u5e76\u4f7f\u6743\u9650\u66f4\u96c6\u4e2d\u3002 - +forceAtlas.gravity.desc=\u8FD9\u4E2A\u529B\u5C06\u6240\u6709\u8282\u70B9\u5438\u5F15\u5230\u4E2D\u5FC3\uFF0C\u4EE5\u907F\u514D\u4E0D\u76F8\u8FDE\u7684\u90E8\u4EF6\u5206\u6563 +forceAtlas.outboundAttractionDistribution.name=\u5438\u5F15\u529B\u5206\u5E03. +forceAtlas.outboundAttractionDistribution.desc=\u5438\u5F15\u529B\u6CBF\u51FA\u7AD9\u94FE\u63A5\u5206\u5E03\u3002\u8FD9\u5F80\u5F80\u4F1A\u628A\u4E2D\u5FC3\u63A8\u5230\u5916\u56F4\uFF0C\u800C\u628A authorities \u7F6E\u4E8E\u66F4\u4E2D\u5FC3\u7684\u4F4D\u7F6E forceAtlas.adjustSizes.name=\u7531\u5c3a\u5bf8\u8c03\u6574 - forceAtlas.adjustSizes.desc=\u907f\u514d\u8282\u70b9\u91cd\u53e0\uff08\u4ece\u6bcf\u4e2a\u8282\u70b9\u7684\u5927\u5c0f\u800c\u5b9a\uff09 - forceAtlas.speed.name=\u901f\u5ea6 - forceAtlas.speed.desc=\u503c>0\u9ed8\u8ba4\u4e3a1;\u5141\u8bb8\u4f60\u589e\u52a0\u6536\u655b\u901f\u5ea6\uff0c\u4f46\u662f\u8981\u4ee5\u7cbe\u5ea6\u635f\u5931\u4e3a\u4ee3\u4ef7 diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_zh_TW.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_zh_TW.properties new file mode 100644 index 0000000000..df3759e2ab --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/Bundle_zh_TW.properties @@ -0,0 +1,24 @@ +name=Force Atlas +description=ForceAtlas makes graphs more compact, readable, and can show authorities more central than hubs (Attraction Distrib. option). Auto-stabilization improves convergence at the end of the layout. +forceAtlas.inertia.name=Inertia +forceAtlas.inertia.desc=Conservation of node speed at each new pass +forceAtlas.repulsionStrength.name=Repulsion strength +forceAtlas.repulsionStrength.desc=How strongly does each node reject others +forceAtlas.attractionStrength.name=Attraction strength +forceAtlas.attractionStrength.desc=How strongly does each pair of connected nodes attract each other +forceAtlas.maxDisplacement.name=Maximum displacement +forceAtlas.maxDisplacement.desc=This is limiting each node's displacement (to prevent some super-rejecting when nodes are too close) +forceAtlas.freezeBalance.name=Auto stabilize function +forceAtlas.freezeBalance.desc=Activates the freezing of unstable nodes. Despite some loss of efficiency, this prevents most of nodes flickering +forceAtlas.freezeStrength.name=Autostab Strength +forceAtlas.freezeStrength.desc=Power of the auto stabilize function +forceAtlas.freezeInertia.name=Autostab sensibility +forceAtlas.freezeInertia.desc=[0,1] This parameters represents the auto-adaptiveness of the anti-flickering function (actually, the freezing inertia) +forceAtlas.gravity.name=Gravity +forceAtlas.gravity.desc=This force attracts all nodes to the center to avoid dispersion of disconnected components +forceAtlas.outboundAttractionDistribution.name=Attraction Distrib. +forceAtlas.outboundAttractionDistribution.desc=The attractive force is distributed along outbound links. This tends to push hubs at the periphery and put authorities more central +forceAtlas.adjustSizes.name=Adjust by Sizes +forceAtlas.adjustSizes.desc=Avoid nodes overlapping (depending from the size of each node) +forceAtlas.speed.name=Speed +forceAtlas.speed.desc=Value > 0 default 1 ; permits you to increase convergence speed at the price of a precision loss diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/cs.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/cs.po deleted file mode 100644 index 4bab1fc004..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/cs.po +++ /dev/null @@ -1,91 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-09 17:18+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "name" -msgstr "Force Atlas" - -msgid "description" -msgstr "ForceAtlas dΔ›la grafy kompaktnΔ›jΕ‘Γ­, čitelnΔ›jΕ‘Γ­ a mΕ―ΕΎe zobrazit autority vΓ­ce ve stΕ™edu neΕΎ uzle (moΕΎnost RozdΔ›lenΓ­ pΕ™ib.). AutomatickΓ‘ stabilizace vylepΕ‘uje sbliΕΎovΓ‘nΓ­ na konci rozloΕΎenΓ­." - -msgid "forceAtlas.inertia.name" -msgstr "Setrvačnost" - -msgid "forceAtlas.inertia.desc" -msgstr "ZachovΓ‘nΓ­ rychlosti uzlu v kaΕΎdΓ©m novΓ©m prΕ―chodu" - -msgid "forceAtlas.repulsionStrength.name" -msgstr "SΓ­la odpuzenΓ­" - -msgid "forceAtlas.repulsionStrength.desc" -msgstr "Jak silnΔ› se ulzy navzΓ‘jem odpuzujΓ­" - -msgid "forceAtlas.attractionStrength.name" -msgstr "SΓ­la pΕ™ibliΕΎovΓ‘nΓ­" - -msgid "forceAtlas.attractionStrength.desc" -msgstr "Jak silnΔ› se kaΕΎdΓ½ pΓ‘r pΕ™ipojenΓ½ch uzlΕ― navzΓ‘jem pΕ™itahuje" - -msgid "forceAtlas.maxDisplacement.name" -msgstr "MaximΓ‘lnΓ­ vΓ½chylka" - -msgid "forceAtlas.maxDisplacement.desc" -msgstr "Toto omezuje vychΓ½lenΓ­ kaΕΎdΓ©ho uzlu (pro zabrΓ‘nΔ›nΓ­ určitΓ©ho velkΓ©ho odpuzenΓ­ kdyΕΎ jsou zly pΕ™Γ­liΕ‘ blΓ­zko)" - -msgid "forceAtlas.freezeBalance.name" -msgstr "Funkce automatickΓ© stabilizace" - -msgid "forceAtlas.freezeBalance.desc" -msgstr "Aktivuje zmrazenΓ­ nestabilnΓ­ch uzlΕ―. Navzdory jistΓ© ztrΓ‘ty účinnosti toto zabraňuje blikΓ‘nΓ­ u vΔ›tΕ‘iny uzlΕ―" - -msgid "forceAtlas.freezeStrength.name" -msgstr "SΓ­la autostab" - -msgid "forceAtlas.freezeStrength.desc" -msgstr "SΓ­la autostabilizačnΓ­ funkce" - -msgid "forceAtlas.freezeInertia.name" -msgstr "Citlivost autostab" - -msgid "forceAtlas.freezeInertia.desc" -msgstr "[0,1] Tento parametr pΕ™edstavuje automatickou pΕ™izpΕ―sobivost funkce proti blikΓ‘nΓ­ (ve skutečnosti, setrvačnost zmrazenΓ­)" - -msgid "forceAtlas.gravity.name" -msgstr "Gravitace" - -msgid "forceAtlas.gravity.desc" -msgstr "Tato sΓ­la pΕ™itahuje vΕ‘echny uzly do stΕ™edu pro zabrΓ‘nΔ›nΓ­ rozptylu odpojenΓ½ch součÑstΓ­" - -msgid "forceAtlas.outboundAttractionDistribution.name" -msgstr "RozdΔ›lenΓ­ pΕ™ib." - -msgid "forceAtlas.outboundAttractionDistribution.desc" -msgstr "SΓ­la pΕ™iblΓ­ΕΎenΓ­ je rozdΔ›lovΓ‘na podΓ©l odchozΓ­ch propojenΓ­. Toto mΓ‘ tendenci odsunovat uzly na okraje a autority dΓ‘vat vΓ­ce do stΕ™edu" - -msgid "forceAtlas.adjustSizes.name" -msgstr "Upravit podle velikosti" - -msgid "forceAtlas.adjustSizes.desc" -msgstr "Vyhnout se pΕ™ekryvu uzlΕ― (v zΓ‘vislosti na velikosti kaΕΎdΓ©ho uzlu)" - -msgid "forceAtlas.speed.name" -msgstr "Rychlost" - -msgid "forceAtlas.speed.desc" -msgstr "Hodnota > 0 vΓ½chozΓ­ 1 ; VΓ‘m umožňuje zvΓ½Ε‘it rychlost sbliΕΎovΓ‘nΓ­ za cenu ztrΓ‘ty pΕ™esnosti" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/es.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/es.po deleted file mode 100644 index 51c78fc68e..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/es.po +++ /dev/null @@ -1,91 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:02+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "name" -msgstr "Force Atlas" - -msgid "description" -msgstr "Force Atlas hace los grafos mΓ‘s compactos, legibles, y puede mostrar las 'authorities' mΓ‘s en el centro que los 'hubs' (opciΓ³n DistribuciΓ³n de AtracciΓ³n). La auto-estabilizaciΓ³n mejora la convergencia al final del algoritmo." - -msgid "forceAtlas.inertia.name" -msgstr "Inercia" - -msgid "forceAtlas.inertia.desc" -msgstr "ConservaciΓ³n de la velocidad de los nodos en cada nuevo paso" - -msgid "forceAtlas.repulsionStrength.name" -msgstr "Fuerza de repulsiΓ³n" - -msgid "forceAtlas.repulsionStrength.desc" -msgstr "Fuerza con la que cada nodo repulsa a otros" - -msgid "forceAtlas.attractionStrength.name" -msgstr "Fuerza de atracciΓ³n" - -msgid "forceAtlas.attractionStrength.desc" -msgstr "Fuerza con la que cada par de nodos conectados se atraen entre sΓ­" - -msgid "forceAtlas.maxDisplacement.name" -msgstr "MΓ‘ximo desplazamiento" - -msgid "forceAtlas.maxDisplacement.desc" -msgstr "Limita el desplazamiento de cada nodo (para prevenir super-repulsiΓ³n cuando los nodos son muy cercanos)" - -msgid "forceAtlas.freezeBalance.name" -msgstr "Auto-estabilizar" - -msgid "forceAtlas.freezeBalance.desc" -msgstr "Activa el congelamiento de nodos inestables. A pesar de algo de pΓ©rdida de eficiencia, previene la inestabilidad de los nodos en la mayorΓ­a de los casos" - -msgid "forceAtlas.freezeStrength.name" -msgstr "Fuerza de auto-estabilizaciΓ³n" - -msgid "forceAtlas.freezeStrength.desc" -msgstr "Fuerza de la funciΓ³n de auto-estabilizaciΓ³n" - -msgid "forceAtlas.freezeInertia.name" -msgstr "Sensibilidad de auto-estabilizaciΓ³n" - -msgid "forceAtlas.freezeInertia.desc" -msgstr "[0,1] Este parΓ‘metro representa la auto-adaptabilidad de la funciΓ³n de anti-inestabilidad (la inercia de fijaciΓ³n)" - -msgid "forceAtlas.gravity.name" -msgstr "Gravedad" - -msgid "forceAtlas.gravity.desc" -msgstr "Esta fuerza atrae todos los nodos hacia el centro para evitar la dispersiΓ³n de componentes no conectados" - -msgid "forceAtlas.outboundAttractionDistribution.name" -msgstr "DistrubuciΓ³n de AtracciΓ³n" - -msgid "forceAtlas.outboundAttractionDistribution.desc" -msgstr "La fuerza de atracciΓ³n es distribuida a lo largo de los enlaces de uniΓ³n. Esto tiende a empujar los 'hubs' a la periferia y hacer las 'authorities' mΓ‘s centrales" - -msgid "forceAtlas.adjustSizes.name" -msgstr "Ajustar por tamaΓ±os" - -msgid "forceAtlas.adjustSizes.desc" -msgstr "Evitar superposiciΓ³n de nodos (dependiendo del tamaΓ±o de cada nodo)" - -msgid "forceAtlas.speed.name" -msgstr "Velocidad" - -msgid "forceAtlas.speed.desc" -msgstr "Valor > 0, 1 por defecto ; Permite incrementar la velocidad de convergencia al precio de una pΓ©rdida de precisiΓ³n" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/fr.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/fr.po deleted file mode 100644 index 332d7c6ac7..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/fr.po +++ /dev/null @@ -1,91 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:02+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "name" -msgstr "Force Atlas" - -msgid "description" -msgstr "Force Atlas rend les graphes plus compactes, lisibles, et peut rendre les autoritΓ©s plus centrales que les hubs (option d'attraction distribuΓ©e). L'auto-stabilisation amΓ©liore la convergence Γ  la fin du rendu." - -msgid "forceAtlas.inertia.name" -msgstr "Inertie" - -msgid "forceAtlas.inertia.desc" -msgstr "Conservation de la vitesse des noeuds Γ  chaque nouvelle passe" - -msgid "forceAtlas.repulsionStrength.name" -msgstr "Force de rΓ©pulsion" - -msgid "forceAtlas.repulsionStrength.desc" -msgstr "Avec quelle force chaque noeud se repousse" - -msgid "forceAtlas.attractionStrength.name" -msgstr "Force d'attraction" - -msgid "forceAtlas.attractionStrength.desc" -msgstr "Avec quelle force chaque noeud connectΓ© s'attire" - -msgid "forceAtlas.maxDisplacement.name" -msgstr "DΓ©placement maximal" - -msgid "forceAtlas.maxDisplacement.desc" -msgstr "Limite le dΓ©placement des noeuds lorsque les noeuds sont trop proches." - -msgid "forceAtlas.freezeBalance.name" -msgstr "Auto-stabilisation" - -msgid "forceAtlas.freezeBalance.desc" -msgstr "Active la fixation des noeuds instables. En dΓ©pit d'une perte d'efficacitΓ©, cela prΓ©vient les effets de scintillement." - -msgid "forceAtlas.freezeStrength.name" -msgstr "Force d'auto-stabilisation" - -msgid "forceAtlas.freezeStrength.desc" -msgstr "Puissance de la fonction d'auto-stabilisation" - -msgid "forceAtlas.freezeInertia.name" -msgstr "SensibilitΓ© de l'auto-stabilisation" - -msgid "forceAtlas.freezeInertia.desc" -msgstr "[0,1] Ces paramΓ¨tres reprΓ©sentent l'auto-adaptation de la fonction d'anti-scintillement (l'inertie de fixation)" - -msgid "forceAtlas.gravity.name" -msgstr "GravitΓ©" - -msgid "forceAtlas.gravity.desc" -msgstr "Cette force attire tous les noeuds vers le centre pour Γ©viter la dispertion des composantes dΓ©connectΓ©es du graphe." - -msgid "forceAtlas.outboundAttractionDistribution.name" -msgstr "Attraction distribuΓ©e" - -msgid "forceAtlas.outboundAttractionDistribution.desc" -msgstr "La force attractive est rΓ©partie le ong des liens sortants. Cela tend Γ  repousser les hubs Γ  la pΓ©riphΓ©rie et Γ  rapprocher les autoritΓ©s du centre." - -msgid "forceAtlas.adjustSizes.name" -msgstr "Ajustement par taille" - -msgid "forceAtlas.adjustSizes.desc" -msgstr "Γ‰vite le chevauchement des noeuds (dΓ©pend de la taille de chaque noeud)" - -msgid "forceAtlas.speed.name" -msgstr "Vitesse" - -msgid "forceAtlas.speed.desc" -msgstr "Valeur > 0 dΓ©faut 1 ; augmente la vitesse de convergence au prix d'une perte de prΓ©cision." diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/ja.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/ja.po deleted file mode 100644 index 6ef36cbbfb..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/ja.po +++ /dev/null @@ -1,91 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-04 09:37+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "name" -msgstr "Force Atlas" - -msgid "description" -msgstr "ForceAtlasγ―γ‚°γƒ©γƒ•γ‚’γ‚³γƒ³γƒ‘γ‚―γƒˆγ«γ€θͺ­γΏγ‚„すく、ハブ(εΌ•εŠ›εˆ†εΈƒγ‚ͺプション)γ‚ˆγ‚Šγ‚‚ζ¨©ε¨γ‚’θ‘¨η€Ίγ™γ‚‹γ“γ¨γŒγ§γγΎγ™γ€‚θ‡ͺε‹•ε‰εšεŒ–γ―γƒ¬γ‚€γ‚’γ‚¦γƒˆγζœ€εΎŒγ«εŽζŸγ‚’ε‘δΈŠγ•γ›γΎγ™γ€‚" - -msgid "forceAtlas.inertia.name" -msgstr "ζ…£ζ€§" - -msgid "forceAtlas.inertia.desc" -msgstr "各新規パスでγγƒŽγƒΌγƒ‰γι€ŸεΊ¦γδΏζŒ" - -msgid "forceAtlas.repulsionStrength.name" -msgstr "ζ–₯εŠ›" - -msgid "forceAtlas.repulsionStrength.desc" -msgstr "どγγγ‚‰γ„γεΌ·γ•γ§γƒŽγƒΌγƒ‰γŒεη™Ίγ—γ‚γ†γ‹" - -msgid "forceAtlas.attractionStrength.name" -msgstr "εΌ•εŠ›" - -msgid "forceAtlas.attractionStrength.desc" -msgstr "どγγγ‚‰γ„γεΌ·γ•γ§ι€£η΅γ—γŸγƒŽγƒΌγƒ‰εΌ•γεˆγ†γ‹" - -msgid "forceAtlas.maxDisplacement.name" -msgstr "ζœ€ε€§ε€‰δ½" - -msgid "forceAtlas.maxDisplacement.desc" -msgstr "γ“γ‚Œγ―ε„γƒŽγƒΌγƒ‰γε€‰δ½γ‚’εˆΆι™γ—γ¦γ„γΎγ™(γƒŽγƒΌγƒ‰γŒθΏ‘γ™γŽγ‚‹ε ΄εˆγγ‚ΉγƒΌγƒ‘γƒΌζ‹’ε¦γ‚’ιΏγ‘γ‚‹γŸγ‚)" - -msgid "forceAtlas.freezeBalance.name" -msgstr "θ‡ͺε‹•ε‰εšεŒ–ζ©Ÿθƒ½" - -msgid "forceAtlas.freezeBalance.desc" -msgstr "不ε‰εšγͺγƒŽγƒΌγƒ‰γε‡η΅γ‚’γ‚’γ‚―γƒ†γ‚£γƒ–γ«γ—γΎγ™γ€‚γ‚γ‚‹η¨‹εΊ¦εŠΉηŽ‡γ‚’ηŠ η‰²γ«γ™γ‚‹γŒγ€γƒŽγƒΌγƒ‰γγ‘ら぀きγε€§εŠγ‚’ι˜²ζ­’" - -msgid "forceAtlas.freezeStrength.name" -msgstr "θ‡ͺε‹•ε‰εšεŠ›" - -msgid "forceAtlas.freezeStrength.desc" -msgstr "θ‡ͺε‹•ε‰εšζ©Ÿθƒ½γεŠ›" - -msgid "forceAtlas.freezeInertia.name" -msgstr "θ‡ͺε‹•ε‰εšζ„ŸεΊ¦" - -msgid "forceAtlas.freezeInertia.desc" -msgstr "[0,1]こγγƒ‘γƒ©γƒ‘γƒΌγ‚Ώγ―γ€εγ‘γ‚‰γ€γζ©Ÿθƒ½γθ‡ͺε‹•ι©εΏœζ€§(εŸιš›γ«γ―、凍硐慣性)を葨します。" - -msgid "forceAtlas.gravity.name" -msgstr "ι‡εŠ›" - -msgid "forceAtlas.gravity.desc" -msgstr "こγεŠ›γ―γ€εˆ‡ζ–­γ•γ‚ŒγŸγ‚³γƒ³γƒγƒΌγƒγƒ³γƒˆγεˆ†ζ•£γ‚’ιΏγ‘γ‚‹γŸγ‚γ«γ€δΈ­ε€γ«γ™γΉγ¦γγƒŽγƒΌγƒ‰γ‚’εΌ•γδ»˜γ‘γ‚‹" - -msgid "forceAtlas.outboundAttractionDistribution.name" -msgstr "εΌ•εŠ›εˆ†εΈƒ" - -msgid "forceAtlas.outboundAttractionDistribution.desc" -msgstr "εΌ•εŠ›γŒγ‚’γ‚¦γƒˆγƒγ‚¦γƒ³γƒ‰γƒͺγƒ³γ‚―γ«ζ²Ώγ£γ¦εˆ†εΈƒγ€‚ε‘¨ε›²γ«γƒγƒ–γ‚’ζŠΌγ—γ‚„γ‚Šγ‚ͺγƒΌγ‚½γƒͺティを中ε€γ«ι…η½γ™γ‚‹ε‚Ύε‘。" - -msgid "forceAtlas.adjustSizes.name" -msgstr "ε€§γγ•γ«γ‚ˆγ‚‹θͺΏζ•΄" - -msgid "forceAtlas.adjustSizes.desc" -msgstr "γƒŽγƒΌγƒ‰γŒι‡γͺγ‚‹γγ‚’ε›žιΏ(γγ‚Œγžγ‚ŒγγƒŽγƒΌγƒ‰γε€§γγ•γ«δΎε­˜)" - -msgid "forceAtlas.speed.name" -msgstr "ι€ŸεΊ¦" - -msgid "forceAtlas.speed.desc" -msgstr "ε€€ > 0γƒ‡γƒ•γ‚©γƒ«γƒˆ1 ; η²ΎεΊ¦γ‚’ηŠ η‰²γ«εŽζŸι€ŸεΊ¦γ‚’δΈŠγ’γΎγ™γ€‚" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/org-gephi-layout-plugin-forceAtlas.pot b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/org-gephi-layout-plugin-forceAtlas.pot deleted file mode 100644 index 28239e548d..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/org-gephi-layout-plugin-forceAtlas.pot +++ /dev/null @@ -1,103 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "name" -msgstr "Force Atlas" - -msgid "description" -msgstr "" -"ForceAtlas makes graphs more compact, readable, and can show authorities " -"more central than hubs (Attraction Distrib. option). Auto-stabilization " -"improves convergence at the end of the layout." - -msgid "forceAtlas.inertia.name" -msgstr "Inertia" - -msgid "forceAtlas.inertia.desc" -msgstr "Conservation of node speed at each new pass" - -msgid "forceAtlas.repulsionStrength.name" -msgstr "Repulsion strength" - -msgid "forceAtlas.repulsionStrength.desc" -msgstr "How strongly does each node reject others" - -msgid "forceAtlas.attractionStrength.name" -msgstr "Attraction strength" - -msgid "forceAtlas.attractionStrength.desc" -msgstr "How strongly does each pair of connected nodes attract each other" - -msgid "forceAtlas.maxDisplacement.name" -msgstr "Maximum displacement" - -msgid "forceAtlas.maxDisplacement.desc" -msgstr "" -"This is limiting each node's displacement (to prevent some super-rejecting " -"when nodes are too close)" - -msgid "forceAtlas.freezeBalance.name" -msgstr "Auto stabilize function" - -msgid "forceAtlas.freezeBalance.desc" -msgstr "" -"Activates the freezing of unstable nodes. Despite some loss of efficiency, " -"this prevents most of nodes flickering" - -msgid "forceAtlas.freezeStrength.name" -msgstr "Autostab Strength" - -msgid "forceAtlas.freezeStrength.desc" -msgstr "Power of the auto stabilize function" - -msgid "forceAtlas.freezeInertia.name" -msgstr "Autostab sensibility" - -msgid "forceAtlas.freezeInertia.desc" -msgstr "" -"[0,1] This parameters represents the auto-adaptiveness of the anti-" -"flickering function (actually, the freezing inertia)" - -msgid "forceAtlas.gravity.name" -msgstr "Gravity" - -msgid "forceAtlas.gravity.desc" -msgstr "" -"This force attracts all nodes to the center to avoid dispersion of " -"disconnected components" - -msgid "forceAtlas.outboundAttractionDistribution.name" -msgstr "Attraction Distrib." - -msgid "forceAtlas.outboundAttractionDistribution.desc" -msgstr "" -"The attractive force is distributed along outbound links. This tends to push " -"hubs at the periphery and put authorities more central" - -msgid "forceAtlas.adjustSizes.name" -msgstr "Adjust by Sizes" - -msgid "forceAtlas.adjustSizes.desc" -msgstr "Avoid nodes overlapping (depending from the size of each node)" - -msgid "forceAtlas.speed.name" -msgstr "Speed" - -msgid "forceAtlas.speed.desc" -msgstr "" -"Value > 0 default 1 ; permits you to increase convergence speed at the price " -"of a precision loss" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/pt_BR.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/pt_BR.po deleted file mode 100644 index 05cf656ba6..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/pt_BR.po +++ /dev/null @@ -1,91 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 23:35+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "name" -msgstr "Force Atlas" - -msgid "description" -msgstr "ForceAtlas faz os grafos mais compactos e legΓ­veis e pode exibir as 'authorities' mais centralmente do que os 'hubs' (opΓ§Γ£o de DistribuiΓ§Γ£o de AtraΓ§Γ£o). A autoestabilizaΓ§Γ£o aumenta a convergΓͺncia ao final do algoritmo." - -msgid "forceAtlas.inertia.name" -msgstr "InΓ©rcia" - -msgid "forceAtlas.inertia.desc" -msgstr "ConservaΓ§Γ£o da velocidade dos nΓ³s a cada novo passo" - -msgid "forceAtlas.repulsionStrength.name" -msgstr "ForΓ§a de repulsΓ£o" - -msgid "forceAtlas.repulsionStrength.desc" -msgstr "ForΓ§a com que cada nΓ³ repele os demais." - -msgid "forceAtlas.attractionStrength.name" -msgstr "ForΓ§a de atraΓ§Γ£o" - -msgid "forceAtlas.attractionStrength.desc" -msgstr "ForΓ§a com que cada par de nΓ³s conectados se atrai" - -msgid "forceAtlas.maxDisplacement.name" -msgstr "Deslocamento mΓ‘ximo" - -msgid "forceAtlas.maxDisplacement.desc" -msgstr "Limita o deslocamento de cada nΓ³ (para prevenir a super-repulsΓ£o quando os nΓ³s estΓ£o muito prΓ³ximos)" - -msgid "forceAtlas.freezeBalance.name" -msgstr "FunΓ§Γ£o de autoestabilizaΓ§Γ£o" - -msgid "forceAtlas.freezeBalance.desc" -msgstr "Ativa o congelamento de nΓ³s instΓ‘veis. Apesar de apresentar alguma perda de eficiΓͺncia, esta funΓ§Γ£o previne a instabilidade dos nΓ³s na maioria dos casos" - -msgid "forceAtlas.freezeStrength.name" -msgstr "ForΓ§a de autoestabilizaΓ§Γ£o" - -msgid "forceAtlas.freezeStrength.desc" -msgstr "ForΓ§a da funΓ§Γ£o de autoestabilizaΓ§Γ£o" - -msgid "forceAtlas.freezeInertia.name" -msgstr "Sensibilidade da autoestabilizaΓ§Γ£o" - -msgid "forceAtlas.freezeInertia.desc" -msgstr "[0,1] Este parΓ’metro representa a auto-adaptabilidade da funΓ§Γ£o anti-instabilidade (esta Γ©, na verdade, a inΓ©rcia de congelamento)" - -msgid "forceAtlas.gravity.name" -msgstr "Gravidade" - -msgid "forceAtlas.gravity.desc" -msgstr "Esta forΓ§a atrai todos os nΓ³s para o centro a fim de evitar a dispersΓ£o dos componentes desconectados" - -msgid "forceAtlas.outboundAttractionDistribution.name" -msgstr "DistribuiΓ§Γ£o da atraΓ§Γ£o" - -msgid "forceAtlas.outboundAttractionDistribution.desc" -msgstr "A forΓ§a de atraΓ§Γ£o Γ© distribuΓ­da ao longo das conexΓ΅es de uniΓ£o. Isso tende a empurrar os 'hubs' para a periferia e trazer as 'authorities' para a parte mais central" - -msgid "forceAtlas.adjustSizes.name" -msgstr "Ajustar pelos tamanhos" - -msgid "forceAtlas.adjustSizes.desc" -msgstr "Evitar superposiΓ§Γ£o de nΓ³s (dependendo do tamanho de cada nΓ³)" - -msgid "forceAtlas.speed.name" -msgstr "Velocidade" - -msgid "forceAtlas.speed.desc" -msgstr "Valor > 0, padrΓ£o 1; permite aumentar a velocidade de convergΓͺncia em troca de perda de precisΓ£o" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/ru.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/ru.po deleted file mode 100644 index f6a9fed70f..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/ru.po +++ /dev/null @@ -1,91 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 15:37+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "name" -msgstr "Force Atlas" - -msgid "description" -msgstr "ForceAtlas Π΄Π΅Π»Π°Π΅Ρ‚ Π³Ρ€Π°Ρ„ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΠΌΠΏΠ°ΠΊΡ‚Π½Ρ‹ΠΌ, Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌ ΠΈ позволяСт Π²Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ authorities срСди Ρ…Π°Π±ΠΎΠ² (с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΎΠΏΡ†ΠΈΠΈ Attraction Distrib.). Автостабилизация обСспСчиваСт ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΡƒΠΊΠ»Π°Π΄ΠΊΠΈ Π½Π° послСдних итСрациях." - -msgid "forceAtlas.inertia.name" -msgstr "Π˜Π½Π΅Ρ€Ρ†ΠΈΡ" - -msgid "forceAtlas.inertia.desc" -msgstr "Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ части скорости ΡƒΠ·Π»Π° с ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ" - -msgid "forceAtlas.repulsionStrength.name" -msgstr "Π‘ΠΈΠ»Π° отталкивания" - -msgid "forceAtlas.repulsionStrength.desc" -msgstr "Π‘ΠΈΠ»Π° с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΡƒΠ·Π΅Π» ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΡƒΠ·Π»Ρ‹" - -msgid "forceAtlas.attractionStrength.name" -msgstr "Π‘ΠΈΠ»Π° притяТСния" - -msgid "forceAtlas.attractionStrength.desc" -msgstr "Π‘ΠΈΠ»Π°, с ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠ°Ρ€Π° ΡƒΠ·Π»ΠΎΠ², связанных Ρ€Π΅Π±Ρ€ΠΎΠΌ, ΠΏΡ€ΠΈΡ‚ΡΠ³ΠΈΠ²Π°ΡŽΡ‚ Π΄Ρ€ΡƒΠ³ Π΄Ρ€ΡƒΠ³Π°." - -msgid "forceAtlas.maxDisplacement.name" -msgstr "МаксимальноС ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π½ΠΈΠ΅" - -msgid "forceAtlas.maxDisplacement.desc" -msgstr "ΠžΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π½Π° максимальноС ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π΅Π½ΠΈΠ΅ ΡƒΠ·Π»Π° (для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ \"выстрСливания\" ΡƒΠ·Π»ΠΎΠ², ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΈ ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ слишком Π±Π»ΠΈΠ·ΠΊΠΎ)" - -msgid "forceAtlas.freezeBalance.name" -msgstr "Автостабилизация" - -msgid "forceAtlas.freezeBalance.desc" -msgstr "Π Π΅ΠΆΠΈΠΌ \"замораТивания\" Π½Π΅ΡΡ‚Π°Π±ΠΈΠ»ΡŒΠ½Ρ‹Ρ… ΡƒΠ·Π»ΠΎΠ². Π’Π΅Π΄Π΅Ρ‚ ΠΊ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΏΠΎΡ‚Π΅Ρ€Π΅ эффСктивности, Π½ΠΎ прСпятствуСт появлСнию \"мигания\"." - -msgid "forceAtlas.freezeStrength.name" -msgstr "Π‘ΠΈΠ»Π° автостаблизиации" - -msgid "forceAtlas.freezeStrength.desc" -msgstr "Π‘ΠΈΠ»Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ автостабилизации" - -msgid "forceAtlas.freezeInertia.name" -msgstr "Π§ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ автостабилизации" - -msgid "forceAtlas.freezeInertia.desc" -msgstr "[0,1], опрСдСляСт Ρ‡ΡƒΠ²ΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ автостабилизации (ΠΏΠΎ сути, инСрция Π·Π°ΠΌΠΎΡ€ΠΎΠ·ΠΊΠΈ)" - -msgid "forceAtlas.gravity.name" -msgstr "Гравитация" - -msgid "forceAtlas.gravity.desc" -msgstr "Π‘ΠΈΠ»Π°, ΠΏΡ€ΠΈΡ‚ΡΠ³ΠΈΠ²Π°ΡŽΡ‰Π°Ρ всС ΡƒΠ·Π»Ρ‹ ΠΊ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ \"Ρ€Π°Π·Π»Π΅Ρ‚Π°Π½ΠΈΠ΅\" нСсвязных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚." - -msgid "forceAtlas.outboundAttractionDistribution.name" -msgstr "ОслаблСниС Ρ…Π°Π±ΠΎΠ²" - -msgid "forceAtlas.outboundAttractionDistribution.desc" -msgstr "РаспрСдСляСт силу притяТСния ΠΏΠΎ исходящим Ρ€Ρ‘Π±Ρ€Π°ΠΌ. Π₯Π°Π±Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ слабСС ΡΡ‚ΡΠ³ΠΈΠ²Π°Ρ‚ΡŒ ΡƒΠ·Π»Ρ‹ Π²ΠΎΠΊΡ€ΡƒΠ³ сСбя." - -msgid "forceAtlas.adjustSizes.name" -msgstr "Π£Ρ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€" - -msgid "forceAtlas.adjustSizes.desc" -msgstr "ΠŸΡ€Π΅ΠΏΡΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ налоТСнию ΡƒΠ·Π»Ρ‹ (с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ ΠΈΡ… Ρ€Π°Π·ΠΌΠ΅Ρ€Π°)" - -msgid "forceAtlas.speed.name" -msgstr "Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ" - -msgid "forceAtlas.speed.desc" -msgstr "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ большС 0. По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ = 1. Π”Π°Ρ‘Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ ΡƒΠΊΠ»Π°Π΄ΠΊΡƒ Π·Π° счёт сниТСния точности." diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/zh_CN.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/zh_CN.po deleted file mode 100644 index e976a20c42..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas/zh_CN.po +++ /dev/null @@ -1,91 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 04:18+0000\n" -"Last-Translator: Xi-Nian Zuo \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "name" -msgstr "Force Atlas" - -msgid "description" -msgstr "ForceAtlasδ½Ώε›Ύζ›΄η΄§ε‡‘οΌŒε―θ―»ζ€§εΌΊοΌŒεΉΆζ˜Ύη€Ίε€§δΊŽhubηš„δΈ­εΏƒεŒ–ηš„ζƒι™οΌˆεΈεΌ•εŠ›εˆ†εΈƒι€‰ι‘ΉοΌ‰γ€‚θ‡ͺ动稳εšζι«˜εΈƒε±€ηš„θ‘”ζŽ₯。" - -msgid "forceAtlas.inertia.name" -msgstr "ζƒ―ζ€§" - -msgid "forceAtlas.inertia.desc" -msgstr "εœ¨ζ―δΈ€δΈͺζ–°ηš„δΌ ι€’θŠ‚η‚Ήι€ŸεΊ¦ηš„δΏζŠ€" - -msgid "forceAtlas.repulsionStrength.name" -msgstr "ζ–₯εŠ›εΌΊεΊ¦" - -msgid "forceAtlas.repulsionStrength.desc" -msgstr "每δΈͺθŠ‚η‚Ήζ‹’η»ε…ΆεƒθŠ‚η‚Ήζ˜―ε€šδΉˆεΌΊηƒˆ" - -msgid "forceAtlas.attractionStrength.name" -msgstr "吸引强度" - -msgid "forceAtlas.attractionStrength.desc" -msgstr "每δΈͺ连ζŽ₯θŠ‚η‚Ήε―ΉδΊ’η›ΈεΈεΌ•ζ˜―ε€šδΉˆεΌΊηƒˆ" - -msgid "forceAtlas.maxDisplacement.name" -msgstr "ζœ€ε€§δ½η§»ι‡" - -msgid "forceAtlas.maxDisplacement.desc" -msgstr "θΏ™ζ˜―ι™εˆΆζ―δΈͺθŠ‚η‚Ήηš„δ½η§»οΌˆε½“θŠ‚η‚Ήθ·η¦»ε€ͺθΏ‘ζ—Άι˜²ζ­’δΈ€δΊ›θΆ…ζ‹’η»οΌ‰" - -msgid "forceAtlas.freezeBalance.name" -msgstr "θ‡ͺ动稳εšεŠŸθƒ½" - -msgid "forceAtlas.freezeBalance.desc" -msgstr "激活冻结不稳εšθŠ‚η‚Ήγ€‚ε°½η‘ε–εΎ—δΊ†δΈ€δΊ›ζ•ˆηŽ‡ηš„ζŸε€±οΌŒθΏ™ζ ·ε―δ»₯ι˜²ζ­’ε€§ιƒ¨εˆ†θŠ‚η‚Ήι—ͺε˜γ€‚" - -msgid "forceAtlas.freezeStrength.name" -msgstr "θ‡ͺ动稳εšεΌΊεΊ¦" - -msgid "forceAtlas.freezeStrength.desc" -msgstr "η”΅ζΊηš„θ‡ͺ动稳εšεŠŸθƒ½" - -msgid "forceAtlas.freezeInertia.name" -msgstr "θ‡ͺ动稳εšζ•ζ„Ÿζ€§" - -msgid "forceAtlas.freezeInertia.desc" -msgstr "[0,1]θΏ™δΈͺε‚ζ•°δ»£θ‘¨ηš„ζŠ—ι—ͺε˜εŠŸθƒ½ηš„θ‡ͺεŠ¨ι€‚εΊ”θƒ½εŠ›οΌˆεžι™…δΈŠοΌŒε†»η»“ηš„ζƒ―ζ€§οΌ‰" - -msgid "forceAtlas.gravity.name" -msgstr "ι‡εŠ›" - -msgid "forceAtlas.gravity.desc" -msgstr "θΏ™η§εŠ›ι‡εΈεΌ•δΊ†ζ‰€ζœ‰ηš„θŠ‚η‚ΉθΆ‹δΊŽδΈ­εΏƒδ»₯ιΏε…ε€±θΏžζŽ₯ηš„ζˆεˆ†εˆ†ζ•£γ€‚" - -msgid "forceAtlas.outboundAttractionDistribution.name" -msgstr "εΈεΌ•εŠ›εˆ†εΈƒ" - -msgid "forceAtlas.outboundAttractionDistribution.desc" -msgstr "εΈεΌ•εŠ›ζ˜―εˆ†εΈƒεœ¨ε‡Ίη«™ι“ΎζŽ₯γ€‚θΏ™εΎ€εΎ€ζŽ¨εœ¨ε€–ε›΄ηš„ζž’ηΊ½οΌŒεΉΆδ½Ώζƒι™ζ›΄ι›†δΈ­γ€‚" - -msgid "forceAtlas.adjustSizes.name" -msgstr "η”±ε°Ίε―Έθ°ƒζ•΄" - -msgid "forceAtlas.adjustSizes.desc" -msgstr "ιΏε…θŠ‚η‚Ήι‡ε οΌˆδ»Žζ―δΈͺθŠ‚η‚Ήηš„ε€§ε°θ€ŒεšοΌ‰" - -msgid "forceAtlas.speed.name" -msgstr "ι€ŸεΊ¦" - -msgid "forceAtlas.speed.desc" -msgstr "ε€Ό>0默θ€δΈΊ1;允θΈδ½ ε’žεŠ ζ”Άζ•›ι€ŸεΊ¦οΌŒδ½†ζ˜―要δ»₯精度损倱为代价" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle.properties index 7eaf6ca7b2..83ab47fa38 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle.properties @@ -16,6 +16,10 @@ ForceAtlas2.distributedAttraction.name=Dissuade Hubs ForceAtlas2.distributedAttraction.desc=Distributes attraction along outbound edges. Hubs attract less and thus are pushed to the borders. ForceAtlas2.linLogMode.name=LinLog mode ForceAtlas2.linLogMode.desc=Switch ForceAtlas' model from lin-lin to lin-log (tribute to Andreas Noack). Makes clusters more tight. +ForceAtlas2.normalizeEdgeWeights.name=Normalize edge weights +ForceAtlas2.normalizeEdgeWeights.desc=Puts edge weights between 0 and 1. +ForceAtlas2.invertedEdgeWeightsMode.name=Inverted edge weights +ForceAtlas2.invertedEdgeWeightsMode.desc=Use inverted 1/w edge weights ForceAtlas2.adjustSizes.name=Prevent Overlap ForceAtlas2.adjustSizes.desc=Use only when spatialized. Should not be used with "Approximate Repulsion" ForceAtlas2.jitterTolerance.name=Tolerance (speed) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_ar.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_ca.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_ca.properties new file mode 100644 index 0000000000..f8bac5bc76 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_ca.properties @@ -0,0 +1,28 @@ +ForceAtlas2.name=ForceAtlas 2 +ForceAtlas2.description=Quality layout: a linear-attraction linear-repulsion model with few approximations (BarnesHut). Speed automatically computed. +ForceAtlas2.tuning=Tuning +ForceAtlas2.behavior=Behavior Alternatives +ForceAtlas2.performance=Performance +ForceAtlas2.threads=Threads +ForceAtlas2.scalingRatio.name=Escalant +ForceAtlas2.scalingRatio.desc=Quanta repulsiσ vols. Mιs equival a un graf mιs dispers +ForceAtlas2.gravity.name=Gravetat +ForceAtlas2.gravity.desc=Attracts nodes to the center. Prevents islands from drifting away. +ForceAtlas2.strongGravityMode.name=Stronger Gravity +ForceAtlas2.strongGravityMode.desc=A stronger gravity law +ForceAtlas2.distributedAttraction.name=Dissuade Hubs +ForceAtlas2.distributedAttraction.desc=Distributes attraction along outbound edges. Hubs attract less and thus are pushed to the borders. +ForceAtlas2.linLogMode.name=LinLog mode +ForceAtlas2.linLogMode.desc=Switch ForceAtlas' model from lin-lin to lin-log (tribute to Andreas Noack). Makes clusters more tight. +ForceAtlas2.adjustSizes.name=Prevent Overlap +ForceAtlas2.adjustSizes.desc=Use only when spatialized. Should not be used with "Approximate Repulsion" +ForceAtlas2.jitterTolerance.name=Tolerance (speed) +ForceAtlas2.jitterTolerance.desc=How much swinging you allow. Above 1 discouraged. Lower gives less speed and more precision. +ForceAtlas2.barnesHutOptimization.name=Approximate Repulsion +ForceAtlas2.barnesHutOptimization.desc=Barnes Hut optimization: n\u00B2 complexity to n.ln(n) ; allows larger graphs. +ForceAtlas2.barnesHutTheta.name=Aproximaciσ +ForceAtlas2.barnesHutTheta.desc=Theta of the Barnes Hut optimization. +ForceAtlas2.edgeWeightInfluence.name=Edge Weight Influence +ForceAtlas2.edgeWeightInfluence.desc=How much influence you give to the edges weight. 0 is "no influence" and 1 is "normal". +ForceAtlas2.threads.name=Threads number +ForceAtlas2.threads.desc=More threads means more speed if your cores can handle it. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_cs.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_cs.properties index 1faa8a43c0..6c9fd3cd2c 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_cs.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_cs.properties @@ -1,63 +1,28 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-07 19\:25+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - ForceAtlas2.name=ForceAtlas 2 - -ForceAtlas2.description=Rozlo\u017een\u00ed kvality\: model line\u00e1rn\u00edho p\u0159ita\u017een\u00ed-odpuzen\u00ed s p\u00e1r odhady (BarnesHut). Rychlost je automaticky vypo\u010d\u00edt\u00e1na. - -ForceAtlas2.tuning=Lad\u011bn\u00ed - -ForceAtlas2.behavior=Alternativy chov\u00e1n\u00ed - -ForceAtlas2.performance=V\u00fdkon - -ForceAtlas2.threads=Vl\u00e1kna - +ForceAtlas2.description=Rozlo\u017eenν kvality: model lineαrnνho p\u0159ita\u017eenν-odpuzenν s pαr odhady (BarnesHut). Rychlost je automaticky vypo\u010dνtαna. +ForceAtlas2.tuning=Lad\u011bnν +ForceAtlas2.behavior=Alternativy chovαnν +ForceAtlas2.performance=Vύkon +ForceAtlas2.threads=Vlαkna ForceAtlas2.scalingRatio.name=Zm\u011bna velikosti - -ForceAtlas2.scalingRatio.desc=Kolik odpuzen\u00ed chcete. V\u00edce znamen\u00e1 rozpt\u00fdlen\u011bj\u0161\u00ed graf. - +ForceAtlas2.scalingRatio.desc=Kolik odpuzenν chcete. Vνce znamenα rozptύlen\u011bj\u0161ν graf. ForceAtlas2.gravity.name=Gravitace - -ForceAtlas2.gravity.desc=P\u0159itahuje uzly do st\u0159edu. Zabra\u0148uje ostrov\u016fm v odd\u00e1len\u00ed. - -ForceAtlas2.strongGravityMode.name=Siln\u011bj\u0161\u00ed gravitace - -ForceAtlas2.strongGravityMode.desc=Z\u00e1kon siln\u011bj\u0161\u00ed gravitace - +ForceAtlas2.gravity.desc=P\u0159itahuje uzly do st\u0159edu. Zabra\u0148uje ostrov\u016fm v oddαlenν. +ForceAtlas2.strongGravityMode.name=Siln\u011bj\u0161ν gravitace +ForceAtlas2.strongGravityMode.desc=Zαkon siln\u011bj\u0161ν gravitace ForceAtlas2.distributedAttraction.name=Odsunout st\u0159edy - -ForceAtlas2.distributedAttraction.desc=Rozd\u011bluje p\u0159ita\u017elivost mezi odchoz\u00ed hrany. St\u0159edy p\u0159itahuj\u00ed m\u00e9n\u011b a proto jsou odsunuty na okraje. - +ForceAtlas2.distributedAttraction.desc=Rozd\u011bluje p\u0159ita\u017elivost mezi odchozν hrany. St\u0159edy p\u0159itahujν mιn\u011b a proto jsou odsunuty na okraje. ForceAtlas2.linLogMode.name=Re\u017eim Linlog - -ForceAtlas2.linLogMode.desc=P\u0159epnout model ForceAtlas z lin-lin do lin-log (pocta Andreu Noackovi). Shluk je pak v\u00edce pohromad\u011b. - -ForceAtlas2.adjustSizes.name=Zabr\u00e1nit p\u0159ekryt\u00ed - -ForceAtlas2.adjustSizes.desc=Pou\u017e\u00edvejte pouze p\u0159i zobrazen\u00ed prostoru. Nem\u011blo by b\u00fdt pou\u017eito s "P\u0159ibli\u017en\u00fd odpor" - +ForceAtlas2.linLogMode.desc=P\u0159epnout model ForceAtlas z lin-lin do lin-log (pocta Andreu Noackovi). Shluk je pak vνce pohromad\u011b. +ForceAtlas2.adjustSizes.name=Zabrαnit p\u0159ekrytν +ForceAtlas2.adjustSizes.desc=Pou\u017eνvejte pouze p\u0159i zobrazenν prostoru. Nem\u011blo by bύt pou\u017eito s "P\u0159ibli\u017enύ odpor" ForceAtlas2.jitterTolerance.name=Tolerance (rychlost) - -ForceAtlas2.jitterTolerance.desc=Kolik k\u00fdv\u00e1n\u00ed dovol\u00edte. Nad 1 nen\u00ed doporu\u010deno. Ni\u017e\u0161\u00ed d\u00e1v\u00e1 men\u0161\u00ed rychlost a v\u011bt\u0161\u00ed p\u0159esnost. - -ForceAtlas2.barnesHutOptimization.name=P\u0159ibli\u017en\u00fd odpor - -ForceAtlas2.barnesHutOptimization.desc=Optimalizace Barnes Hut\: slo\u017eitost n k n.ln(n) ; umo\u017e\u0148uje vt\u0161\u00ed grafy. - +ForceAtlas2.jitterTolerance.desc=Kolik kύvαnν dovolνte. Nad 1 nenν doporu\u010deno. Ni\u017e\u0161ν dαvα men\u0161ν rychlost a v\u011bt\u0161ν p\u0159esnost. +ForceAtlas2.barnesHutOptimization.name=P\u0159ibli\u017enύ odpor +ForceAtlas2.barnesHutOptimization.desc=Optimalizace Barnes Hut: slo\u017eitost n k n.ln(n) ; umo\u017e\u0148uje vt\u0161ν grafy. ForceAtlas2.barnesHutTheta.name=Odhad - ForceAtlas2.barnesHutTheta.desc=Theta optimalizace Barnes Hut - ForceAtlas2.edgeWeightInfluence.name=Vliv hmotnosti hrany - -ForceAtlas2.edgeWeightInfluence.desc=Jak velk\u00fd vliv d\u00e1v\u00e1te hmotnosti hrany. 0 je "\u017e\u00e1dn\u00fd vliv" a 1 je "norm\u00e1ln\u00ed". - -ForceAtlas2.threads.name=Po\u010det vl\u00e1ken - -ForceAtlas2.threads.desc=V\u00edce vl\u00e1ken znamen\u00e1 v\u011bt\u0161\u00ed rychlost, pokud to Va\u0161e j\u00e1dra zvl\u00e1dnou. +ForceAtlas2.edgeWeightInfluence.desc=Jak velkύ vliv dαvαte hmotnosti hrany. 0 je "\u017eαdnύ vliv" a 1 je "normαlnν". +ForceAtlas2.threads.name=Po\u010det vlαken +ForceAtlas2.threads.desc=Vνce vlαken znamenα v\u011bt\u0161ν rychlost, pokud to Va\u0161e jαdra zvlαdnou. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_de.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_de.properties new file mode 100644 index 0000000000..e50d9fe2eb --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_de.properties @@ -0,0 +1,28 @@ +ForceAtlas2.name=ForceAtlas 2 +ForceAtlas2.description=Qualitδts-Layout: Ein Lineare-Anziehung/Lineare-Abstoίung-Modell mit Nδherungen (BarnesHut). Geschwindigkeit wird automatisch berechnet. +ForceAtlas2.tuning=Leistungsoptimierung +ForceAtlas2.behavior=Verhaltens-Alternativen +ForceAtlas2.performance=Leistung +ForceAtlas2.threads=Threads +ForceAtlas2.scalingRatio.name=Maίstab +ForceAtlas2.scalingRatio.desc=Wie hoch soll die Abstoίung sein. Hφhere Werte erzeugen einen lichteren Graphen. +ForceAtlas2.gravity.name=Anziehungskraft +ForceAtlas2.gravity.desc=Zieht Knoten zum Zentrum. Verhindert, dass Inseln weg driften. +ForceAtlas2.strongGravityMode.name=Stδrkere Anziehungskraft +ForceAtlas2.strongGravityMode.desc=Ein stδrkeres Gravitationsgesetz +ForceAtlas2.distributedAttraction.name=Separiere Hubs +ForceAtlas2.distributedAttraction.desc=Verteilt Anziehung entlang ausgehender Kanten. Hubs werden weniger stark angezogen und so zu den Rδndern gedrδngt. +ForceAtlas2.linLogMode.name=LinLog Modus +ForceAtlas2.linLogMode.desc=Wechselt das ForceAtlas Modell von lin-lin zu lin-log (Dank an Andreas Noack). Strafft Cluster. +ForceAtlas2.adjustSizes.name=Verhindere άberlappung +ForceAtlas2.adjustSizes.desc=Nur verwendenm, wenn verrδumlicht. Sollte nicht mit "Angenδherte Abstoίung" verwendet werden +ForceAtlas2.jitterTolerance.name=Toleranz (Geschwindigkeit) +ForceAtlas2.jitterTolerance.desc=Wieviel Schwingung ist gestattet. Von Werten oberhalb 1 wird abgeraten. Kleinere Werte verlangsamen, lieferen jedoch hφhere Genauigkeit. +ForceAtlas2.barnesHutOptimization.name=Genδherte Abstoίung +ForceAtlas2.barnesHutOptimization.desc=Barnes Hut Optimierung: n² Komplexitδt zu n.ln(n) ; erlaubt grφίere Graphen. +ForceAtlas2.barnesHutTheta.name=Nδherung +ForceAtlas2.barnesHutTheta.desc=Theta derr Barnes Hut Optimierung. +ForceAtlas2.edgeWeightInfluence.name=Einfluss Kantengewicht +ForceAtlas2.edgeWeightInfluence.desc=Welchen Einfluss haben Kantengewichte. 0 bedeutet "kein Einfluss" und 1 ist "normal". +ForceAtlas2.threads.name=Thread-Anzahl +ForceAtlas2.threads.desc=Eine grφίere Thread-Anzahl erhφht die Geschwindigkeit, sofern ihr Prozessor diese unterstόtzt. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_es.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_es.properties index 9124b4267f..93c6c140a6 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_es.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_es.properties @@ -1,63 +1,32 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 21\:42+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - ForceAtlas2.name=ForceAtlas 2 - -ForceAtlas2.description=Distribuci\u00f3n de calidad\: un modelo de atracci\u00f3n lineal y repulsi\u00f3n lineal con unas pocas aproximaciones (BarnesHut). Velocidad calculada autom\u00e1ticamente. - +ForceAtlas2.description=Distribuciσn de calidad: un modelo de atracciσn lineal y repulsiσn lineal con unas pocas aproximaciones (BarnesHut). Velocidad calculada automαticamente. ForceAtlas2.tuning=Puesta a punto - ForceAtlas2.behavior=Alternativas de comportamiento - ForceAtlas2.performance=Rendimiento - ForceAtlas2.threads=Hilos - ForceAtlas2.scalingRatio.name=Escalado - -ForceAtlas2.scalingRatio.desc=La cantidad de repulsi\u00f3n deseada. Valores mayores hacen grafos m\u00e1s dispersos. - +ForceAtlas2.scalingRatio.desc=La cantidad de repulsiσn deseada. Valores mayores hacen grafos mαs dispersos. ForceAtlas2.gravity.name=Gravedad - ForceAtlas2.gravity.desc=Atrae los nodos al centro. Previene que las islas se alejen. - -ForceAtlas2.strongGravityMode.name=Gravedad m\u00e1s fuerte - -ForceAtlas2.strongGravityMode.desc=Una ley de la gravedad m\u00e1s fuerte - +ForceAtlas2.strongGravityMode.name=Gravedad mαs fuerte +ForceAtlas2.strongGravityMode.desc=Una ley de la gravedad mαs fuerte ForceAtlas2.distributedAttraction.name=Disuadir Hubs - -ForceAtlas2.distributedAttraction.desc=Distribuye la atracci\u00f3n a traves de las aristas salientes. Los Hubs atraen menos y por lo tanto son empujados a los bordes. - +ForceAtlas2.distributedAttraction.desc=Distribuye la atracciσn a traves de las aristas salientes. Los Hubs atraen menos y por lo tanto son empujados a los bordes. ForceAtlas2.linLogMode.name=Modo LinLog - -ForceAtlas2.linLogMode.desc=Cambiar el modelo de ForceAtlas de lin-lin a lin-log (tributo a Andreas Noack). Hace a los clusters m\u00e1s tensos. - +ForceAtlas2.linLogMode.desc=Cambiar el modelo de ForceAtlas de lin-lin a lin-log (tributo a Andreas Noack). Hace a los clusters mαs tensos. ForceAtlas2.adjustSizes.name=Evitar el solapamiento - -ForceAtlas2.adjustSizes.desc=Utilizar s\u00f3lo cuando ya est\u00e1 distribuido. No se debe utilizar con "Aproximar Repulsi\u00f3n" - +ForceAtlas2.adjustSizes.desc=Utilizar sσlo cuando ya estα distribuido. No se debe utilizar con "Aproximar Repulsiσn" ForceAtlas2.jitterTolerance.name=Tolerancia (velocidad) - -ForceAtlas2.jitterTolerance.desc=Cu\u00e1nto balanceo permitir. Valores por encima de 1 desaconsejados. Valores menores dan menos velocidad y mayor precisi\u00f3n. - -ForceAtlas2.barnesHutOptimization.name=Aproximar Repulsi\u00f3n - -ForceAtlas2.barnesHutOptimization.desc=Optimizaci\u00f3n Barnes Hut\: complejidad n a complejidad n.ln(n) ; permite grafos mayores. - -ForceAtlas2.barnesHutTheta.name=Aproximaci\u00f3n - -ForceAtlas2.barnesHutTheta.desc=Valor Theta de la optimizaci\u00f3n Barnes Hut. - +ForceAtlas2.jitterTolerance.desc=Cuαnto balanceo permitir. Valores por encima de 1 desaconsejados. Valores menores dan menos velocidad y mayor precisiσn. +ForceAtlas2.barnesHutOptimization.name=Aproximar Repulsiσn +ForceAtlas2.barnesHutOptimization.desc=Optimizaciσn Barnes Hut: complejidad n a complejidad n.ln(n) ; permite grafos mayores. +ForceAtlas2.barnesHutTheta.name=Aproximaciσn +ForceAtlas2.barnesHutTheta.desc=Valor Theta de la optimizaciσn Barnes Hut. ForceAtlas2.edgeWeightInfluence.name=Influencia del peso de las aristas - -ForceAtlas2.edgeWeightInfluence.desc=C\u00faanta influencia dar al peso de las aristas. 0 es "ninguna influencia" y 1 es "normal". - -ForceAtlas2.threads.name=N\u00famero de hilos - -ForceAtlas2.threads.desc=M\u00e1s hilos significa m\u00e1s velocidad si tu procesador puede manejarlos. +ForceAtlas2.edgeWeightInfluence.desc=Cu\u00E1nta influencia dar al peso de las aristas. 0 es "ninguna influencia" y 1 es "normal". +ForceAtlas2.threads.name=Nϊmero de hilos +ForceAtlas2.threads.desc=Mαs hilos significa mαs velocidad si tu procesador puede manejarlos. +ForceAtlas2.invertedEdgeWeightsMode.name=Pesos del borde invertido +ForceAtlas2.normalizeEdgeWeights.name=Normalizar los pesos de los bordes +ForceAtlas2.normalizeEdgeWeights.desc=Establece el peso de la arista entre 0 y 1. +ForceAtlas2.invertedEdgeWeightsMode.desc=Utilice pesos de arista invertidos 1/w diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_fr.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_fr.properties index eab6191786..3253341fe6 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_fr.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_fr.properties @@ -1,63 +1,30 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 12\:07+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - ForceAtlas2.name=Force Atlas 2 - -ForceAtlas2.description=Spatialisation de qualit\u00e9 \: un mod\u00e8le attraction lin\u00e9aire - r\u00e9pulsion lin\u00e9aire avec quelques approximations (Barnes Hut). Vitesse calcul\u00e9e automatiquement. - -ForceAtlas2.tuning=Tuning - +ForceAtlas2.description=Spatialisation de qualitι : un modθle attraction linιaire - rιpulsion linιaire avec quelques approximations (Barnes Hut). Vitesse calculιe automatiquement. +ForceAtlas2.tuning=Optimisation ForceAtlas2.behavior=Comportements alternatifs - ForceAtlas2.performance=Performance - ForceAtlas2.threads=Processus - ForceAtlas2.scalingRatio.name=Echelle - -ForceAtlas2.scalingRatio.desc=Quantit\u00e9 de r\u00e9pulsion d\u00e9sir\u00e9e. L'augmenter donne un graphe plus clairsem\u00e9. - -ForceAtlas2.gravity.name=Gravit\u00e9 - -ForceAtlas2.gravity.desc=Attire les noeuds vers le centre. Emp\u00eache les \u00eeles de d\u00e9river. - -ForceAtlas2.strongGravityMode.name=Gravit\u00e9 plus forte - -ForceAtlas2.strongGravityMode.desc=Une loi de gravit\u00e9 plus forte - +ForceAtlas2.scalingRatio.desc=Quantitι de rιpulsion dιsirιe. L'augmenter donne un graphe plus clairsemι. +ForceAtlas2.gravity.name=Gravitι +ForceAtlas2.gravity.desc=Attire les noeuds vers le centre. Empκche les ξles de dιriver. +ForceAtlas2.strongGravityMode.name=Gravitι plus forte +ForceAtlas2.strongGravityMode.desc=Une loi de gravitι plus forte ForceAtlas2.distributedAttraction.name=Dissuader les Hubs - -ForceAtlas2.distributedAttraction.desc=Distribue l'attraction le long des liens sortants. Les hubs attirent moins et sont ainsi pouss\u00e9s vers les bords. - +ForceAtlas2.distributedAttraction.desc=Distribue l'attraction le long des liens sortants. Les hubs attirent moins et sont ainsi poussιs vers les bords. ForceAtlas2.linLogMode.name=Mode LinLog - -ForceAtlas2.linLogMode.desc=Bascule le mod\u00e8le de lin-lin \u00e0 lin-log (en hommage \u00e0 Andreas Noack). Rend les clusters plus resserr\u00e9s. - -ForceAtlas2.adjustSizes.name=Emp\u00eacher le Recouvrement - -ForceAtlas2.adjustSizes.desc=Utiliser seulement une fois spatialis\u00e9. Ne devrait pas \u00eatre utilis\u00e9 avec "R\u00e9pulsion approximative" - -ForceAtlas2.jitterTolerance.name=Tol\u00e9rance (vitesse) - -ForceAtlas2.jitterTolerance.desc=Quantit\u00e9 de balancement autoris\u00e9. Plus de 1 est d\u00e9conseill\u00e9. Moins r\u00e9duit la vitesse et augmente la pr\u00e9cision. - -ForceAtlas2.barnesHutOptimization.name=R\u00e9pulsion Approximative - -ForceAtlas2.barnesHutOptimization.desc=Optimisation du Barnes Hut \: complexit\u00e9 de n2 \u00e0 n.ln(n); autorise des graphes plus larges. - +ForceAtlas2.linLogMode.desc=Bascule le modθle de lin-lin ΰ lin-log (en hommage ΰ Andreas Noack). Rend les clusters plus resserrιs. +ForceAtlas2.normalizeEdgeWeights.name=Normalise le poids des liens +ForceAtlas2.normalizeEdgeWeights.desc=Fait comme si le poids des liens ιtait compris entre 0 et 1 +ForceAtlas2.adjustSizes.name=Empκcher le Recouvrement +ForceAtlas2.adjustSizes.desc=Utiliser seulement une fois spatialisι. Ne devrait pas κtre utilisι avec "Rιpulsion approximative" +ForceAtlas2.jitterTolerance.name=Tolιrance (vitesse) +ForceAtlas2.jitterTolerance.desc=Quantitι de balancement autorisι. Plus de 1 est dιconseillι. Moins rιduit la vitesse et augmente la prιcision. +ForceAtlas2.barnesHutOptimization.name=Rιpulsion Approximative +ForceAtlas2.barnesHutOptimization.desc=Optimisation du Barnes Hut : complexitι de n2 ΰ n.ln(n); autorise des graphes plus larges. ForceAtlas2.barnesHutTheta.name=Approximation - -ForceAtlas2.barnesHutTheta.desc=Param\u00e8tre Theta de l'optimisation Barnes Hut. - +ForceAtlas2.barnesHutTheta.desc=Paramθtre Theta de l'optimisation Barnes Hut. ForceAtlas2.edgeWeightInfluence.name=Influence du poids des liens - -ForceAtlas2.edgeWeightInfluence.desc=Quantit\u00e9 d'influence donn\u00e9 au poids des liens. 0 \= "pas d'influence" et 1 \= "normal". - +ForceAtlas2.edgeWeightInfluence.desc=Quantitι d'influence donnι au poids des liens. 0 = "pas d'influence" et 1 = "normal". ForceAtlas2.threads.name=Nombre de processus - ForceAtlas2.threads.desc=Plus de processus implique une plus grande vitesse si vos coeurs de processeur le permettent. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_he.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_he.properties new file mode 100644 index 0000000000..3458ebd4d5 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_he.properties @@ -0,0 +1,28 @@ +ForceAtlas2.name=ForceAtlas 2 +ForceAtlas2.description=Quality layout: a linear-attraction linear-repulsion model with few approximations (BarnesHut). Speed automatically computed. +ForceAtlas2.tuning=Tuning +ForceAtlas2.behavior=Behavior Alternatives +ForceAtlas2.performance=Performance +ForceAtlas2.threads=Threads +ForceAtlas2.scalingRatio.name=Scaling +ForceAtlas2.scalingRatio.desc=How much repulsion you want. More makes a more sparse graph. +ForceAtlas2.gravity.name=Gravity +ForceAtlas2.gravity.desc=Attracts nodes to the center. Prevents islands from drifting away. +ForceAtlas2.strongGravityMode.name=Stronger Gravity +ForceAtlas2.strongGravityMode.desc=A stronger gravity law +ForceAtlas2.distributedAttraction.name=Dissuade Hubs +ForceAtlas2.distributedAttraction.desc=Distributes attraction along outbound edges. Hubs attract less and thus are pushed to the borders. +ForceAtlas2.linLogMode.name=LinLog mode +ForceAtlas2.linLogMode.desc=Switch ForceAtlas' model from lin-lin to lin-log (tribute to Andreas Noack). Makes clusters more tight. +ForceAtlas2.adjustSizes.name=Prevent Overlap +ForceAtlas2.adjustSizes.desc=Use only when spatialized. Should not be used with "Approximate Repulsion" +ForceAtlas2.jitterTolerance.name=Tolerance (speed) +ForceAtlas2.jitterTolerance.desc=How much swinging you allow. Above 1 discouraged. Lower gives less speed and more precision. +ForceAtlas2.barnesHutOptimization.name=Approximate Repulsion +ForceAtlas2.barnesHutOptimization.desc=Barnes Hut optimization: n\u00B2 complexity to n.ln(n) ; allows larger graphs. +ForceAtlas2.barnesHutTheta.name=Approximation +ForceAtlas2.barnesHutTheta.desc=Theta of the Barnes Hut optimization. +ForceAtlas2.edgeWeightInfluence.name=Edge Weight Influence +ForceAtlas2.edgeWeightInfluence.desc=How much influence you give to the edges weight. 0 is "no influence" and 1 is "normal". +ForceAtlas2.threads.name=Threads number +ForceAtlas2.threads.desc=More threads means more speed if your cores can handle it. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_hu.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_hu.properties new file mode 100644 index 0000000000..4c973e3d1d --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_hu.properties @@ -0,0 +1,34 @@ + + +ForceAtlas2.gravity.desc=A csom\u00F3pontokat a k\u00F6zpontba vonzza. Megakad\u00E1lyozza a szigetek elsodr\u00F3d\u00E1s\u00E1t. +ForceAtlas2.name=ForceAtlas 2 +ForceAtlas2.jitterTolerance.name=Tolerancia (sebess\u00E9g) +ForceAtlas2.barnesHutTheta.name=K\u00F6zel\u00EDt\u00E9s +ForceAtlas2.description=Min\u0151s\u00E9gi elrendez\u00E9s: line\u00E1ris vonz\u00E1s\u00FA line\u00E1ris tasz\u00EDt\u00E1si modell kev\u00E9s k\u00F6zel\u00EDt\u00E9ssel (BarnesHut). A sebess\u00E9g automatikusan kisz\u00E1m\u00EDtva. +ForceAtlas2.threads.desc=T\u00F6bb sz\u00E1l nagyobb sebess\u00E9get jelent, ha a magok kezelni tudj\u00E1k. +ForceAtlas2.strongGravityMode.name=Er\u0151sebb gravit\u00E1ci\u00F3 +ForceAtlas2.strongGravityMode.desc=Er\u0151sebb gravit\u00E1ci\u00F3s t\u00F6rv\u00E9ny +ForceAtlas2.distributedAttraction.name=Lebesz\u00E9lni a Hubokat +ForceAtlas2.invertedEdgeWeightsMode.name=Ford\u00EDtott \u00E9ls\u00FAlyok +ForceAtlas2.linLogMode.name=LinLog m\u00F3d +ForceAtlas2.scalingRatio.desc=Mennyi tasz\u00EDt\u00E1st akarsz. A More ritk\u00E1bb grafikont eredm\u00E9nyez. +ForceAtlas2.jitterTolerance.desc=Mekkora hint\u00E1z\u00E1st enged meg. 1 felett cs\u00FCggedt. Az alacsonyabb kisebb sebess\u00E9get \u00E9s nagyobb pontoss\u00E1got biztos\u00EDt. +ForceAtlas2.scalingRatio.name=M\u00E9retez\u00E9s +ForceAtlas2.threads=Sz\u00E1lak +ForceAtlas2.edgeWeightInfluence.desc=Mennyi befoly\u00E1st adsz az \u00E9lek s\u00FAly\u00E1ra. A 0 a \u201Enincs hat\u00E1ssal\u201D, az 1 pedig a \u201Enorm\u00E1lis\u201D. +ForceAtlas2.normalizeEdgeWeights.name=Az \u00E9ls\u00FAlyok normaliz\u00E1l\u00E1sa +ForceAtlas2.edgeWeightInfluence.name=\u00C9ls\u0171ly befoly\u00E1sol\u00E1s +ForceAtlas2.linLogMode.desc=V\u00E1ltsa \u00E1t a ForceAtlas modellj\u00E9t lin-linr\u0151l lin-logra (tisztelet Andreas Noack el\u0151tt). Szorosabb\u00E1 teszi a f\u00FCrt\u00F6ket. +ForceAtlas2.normalizeEdgeWeights.desc=Az \u00E9lek s\u00FAly\u00E1t 0 \u00E9s 1 k\u00F6z\u00E9 helyezi. +ForceAtlas2.barnesHutOptimization.name=Hozz\u00E1vet\u0151leges tasz\u00EDt\u00E1s +ForceAtlas2.adjustSizes.desc=Csak t\u00E9rbeli elrendez\u00E9sben haszn\u00E1lja. Nem haszn\u00E1lhat\u00F3 "Hozz\u00E1vet\u0151leges tasz\u00EDt\u00E1ssal" +ForceAtlas2.invertedEdgeWeightsMode.desc=Haszn\u00E1ljon ford\u00EDtott 1/w \u00E9ls\u00FAlyokat +ForceAtlas2.behavior=Viselked\u00E9si alternat\u00EDv\u00E1k +ForceAtlas2.distributedAttraction.desc=Elosztja a vonzer\u0151t a kimen\u0151 \u00E9lek ment\u00E9n. A csom\u00F3pontok kevesebbet vonzanak, \u00E9s \u00EDgy a hat\u00E1rokhoz szorulnak. +ForceAtlas2.barnesHutTheta.desc=Theta of the Barnes Hut optimaliz\u00E1l\u00E1s. +ForceAtlas2.adjustSizes.name=Az \u00E1tfed\u00E9s megel\u0151z\u00E9se +ForceAtlas2.threads.name=Sz\u00E1lak sz\u00E1ma +ForceAtlas2.performance=Teljes\u00EDtm\u00E9ny +ForceAtlas2.barnesHutOptimization.desc=Barnes Hut optimaliz\u00E1l\u00E1s: n\u00B2 komplexit\u00E1s n.ln(n)-ig; nagyobb grafikonokat tesz lehet\u0151v\u00E9. +ForceAtlas2.tuning=Hangol\u00E1s +ForceAtlas2.gravity.name=Gravit\u00E1ci\u00F3 diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_it.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_it.properties new file mode 100644 index 0000000000..3458ebd4d5 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_it.properties @@ -0,0 +1,28 @@ +ForceAtlas2.name=ForceAtlas 2 +ForceAtlas2.description=Quality layout: a linear-attraction linear-repulsion model with few approximations (BarnesHut). Speed automatically computed. +ForceAtlas2.tuning=Tuning +ForceAtlas2.behavior=Behavior Alternatives +ForceAtlas2.performance=Performance +ForceAtlas2.threads=Threads +ForceAtlas2.scalingRatio.name=Scaling +ForceAtlas2.scalingRatio.desc=How much repulsion you want. More makes a more sparse graph. +ForceAtlas2.gravity.name=Gravity +ForceAtlas2.gravity.desc=Attracts nodes to the center. Prevents islands from drifting away. +ForceAtlas2.strongGravityMode.name=Stronger Gravity +ForceAtlas2.strongGravityMode.desc=A stronger gravity law +ForceAtlas2.distributedAttraction.name=Dissuade Hubs +ForceAtlas2.distributedAttraction.desc=Distributes attraction along outbound edges. Hubs attract less and thus are pushed to the borders. +ForceAtlas2.linLogMode.name=LinLog mode +ForceAtlas2.linLogMode.desc=Switch ForceAtlas' model from lin-lin to lin-log (tribute to Andreas Noack). Makes clusters more tight. +ForceAtlas2.adjustSizes.name=Prevent Overlap +ForceAtlas2.adjustSizes.desc=Use only when spatialized. Should not be used with "Approximate Repulsion" +ForceAtlas2.jitterTolerance.name=Tolerance (speed) +ForceAtlas2.jitterTolerance.desc=How much swinging you allow. Above 1 discouraged. Lower gives less speed and more precision. +ForceAtlas2.barnesHutOptimization.name=Approximate Repulsion +ForceAtlas2.barnesHutOptimization.desc=Barnes Hut optimization: n\u00B2 complexity to n.ln(n) ; allows larger graphs. +ForceAtlas2.barnesHutTheta.name=Approximation +ForceAtlas2.barnesHutTheta.desc=Theta of the Barnes Hut optimization. +ForceAtlas2.edgeWeightInfluence.name=Edge Weight Influence +ForceAtlas2.edgeWeightInfluence.desc=How much influence you give to the edges weight. 0 is "no influence" and 1 is "normal". +ForceAtlas2.threads.name=Threads number +ForceAtlas2.threads.desc=More threads means more speed if your cores can handle it. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_ja.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_ja.properties index beda76a273..dd41d0a109 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_ja.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_ja.properties @@ -1,63 +1,28 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-23 07\:46+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - ForceAtlas2.name=ForceAtlas 2 - -ForceAtlas2.description=\u54c1\u8cea\u306e\u30ec\u30a4\u30a2\u30a6\u30c8\:\u5c11\u306a\u3044\u8fd1\u4f3c\u306e\u7dda\u5f62\u5f15\u529b\u7dda\u5f62\u65a5\u529b\u30e2\u30c7\u30eb(BarnesHut)\u3002\u65e9\u304f\u3001\u81ea\u52d5\u7684\u306b\u8a08\u7b97\u3002 - +ForceAtlas2.description=\u54c1\u8cea\u306e\u30ec\u30a4\u30a2\u30a6\u30c8:\u5c11\u306a\u3044\u8fd1\u4f3c\u306e\u7dda\u5f62\u5f15\u529b\u7dda\u5f62\u65a5\u529b\u30e2\u30c7\u30eb(BarnesHut)\u3002\u65e9\u304f\u3001\u81ea\u52d5\u7684\u306b\u8a08\u7b97\u3002 ForceAtlas2.tuning=\u30c1\u30e5\u30fc\u30cb\u30f3\u30b0 - ForceAtlas2.behavior=\u52d5\u4f5c\u306e\u4ee3\u66ff - ForceAtlas2.performance=\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9 - ForceAtlas2.threads=\u30b9\u30ec\u30c3\u30c9 - ForceAtlas2.scalingRatio.name=\u30b9\u30b1\u30fc\u30ea\u30f3\u30b0 - ForceAtlas2.scalingRatio.desc=\u5e0c\u671b\u306e\u53cd\u767a\u306e\u7a0b\u5ea6\u3002\u5927\u304d\u3051\u308c\u3070\u305d\u308c\u3060\u3051\u758e\u306a\u30b0\u30e9\u30d5\u306b\u306a\u308a\u307e\u3059\u3002 - ForceAtlas2.gravity.name=\u5f15\u529b - ForceAtlas2.gravity.desc=\u30ce\u30fc\u30c9\u3092\u4e2d\u5fc3\u306b\u727d\u5f15\u3002\u5cf6\u306e\u6f02\u6d41\u3092\u9632\u3050\u3002 - ForceAtlas2.strongGravityMode.name=\u3088\u308a\u5f37\u3044\u5f15\u529b - ForceAtlas2.strongGravityMode.desc=\u3088\u308a\u5f37\u3044\u5f15\u529b\u306e\u6cd5\u5247 - ForceAtlas2.distributedAttraction.name=\u30cf\u30d6\u3092\u5236\u6b62 - ForceAtlas2.distributedAttraction.desc=\u30a2\u30a6\u30c8\u30d0\u30a6\u30f3\u30c9\u30a8\u30c3\u30b8\u306b\u6cbf\u3063\u3066\u5f15\u529b\u3092\u914d\u7f6e\u3002\u30cf\u30d6\u306e\u5f15\u529b\u306f\u3088\u308a\u5f31\u304f\u3001\u8fba\u7e01\u306b\u62bc\u3057\u3084\u3089\u308c\u307e\u3059\u3002 - ForceAtlas2.linLogMode.name=LinLog \u30e2\u30fc\u30c9 - ForceAtlas2.linLogMode.desc=ForceAtlas\u30e2\u30c7\u30eb\u3092lin-lin\u304b\u3089lin-log\u306b\u5207\u308a\u66ff\u3048\u3002(Andreas Noack\u306b\u6367\u3050)\u3002\u30af\u30e9\u30b9\u30bf\u3092\u3088\u308a\u304d\u3064\u304f\u3057\u307e\u3059\u3002 - ForceAtlas2.adjustSizes.name=\u91cd\u306a\u308a\u306e\u56de\u907f - ForceAtlas2.adjustSizes.desc=spatialized\u6642\u306b\u306e\u307f\u4f7f\u7528\u3002 "\u6982\u7b97\u5f15\u529b"\u3068\u4e00\u7dd2\u306b\u4f7f\u7528\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044 - ForceAtlas2.jitterTolerance.name=\u8a31\u5bb9\u5024(\u901f\u5ea6) - ForceAtlas2.jitterTolerance.desc=\u3069\u306e\u304f\u3089\u3044\u306e\u3076\u308c\u3092\u8a31\u53ef\u3059\u308b\u304b\u3002 1\u4ee5\u4e0a\u3092\u304a\u52e7\u3081\u3002\u4ee5\u4e0b\u3067\u306f\u9045\u3044\u304c\u6b63\u78ba\u3002 - ForceAtlas2.barnesHutOptimization.name=\u65a5\u529b\u306e\u6982\u7b97 - -ForceAtlas2.barnesHutOptimization.desc=Barnes Hut \u6700\u9069\u5316\: n complexity to n.ln(n) ; \u3088\u308a\u5927\u304d\u306a\u30b0\u30e9\u30d5\u3092\u8a31\u53ef - +ForceAtlas2.barnesHutOptimization.desc=Barnes Hut \u6700\u9069\u5316: n complexity to n.ln(n) ; \u3088\u308a\u5927\u304d\u306a\u30b0\u30e9\u30d5\u3092\u8a31\u53ef ForceAtlas2.barnesHutTheta.name=\u8fd1\u4f3c - ForceAtlas2.barnesHutTheta.desc=Barnes Hut\u6700\u9069\u5316\u306e\u03b8 - ForceAtlas2.edgeWeightInfluence.name=\u8fba\u306e\u91cd\u307f\u306e\u5f71\u97ff - ForceAtlas2.edgeWeightInfluence.desc=\u8fba\u306e\u91cd\u307f\u306b\u3069\u306e\u304f\u3089\u3044\u306e\u5f71\u97ff\u3092\u4ed8\u4e0e\u3059\u308b\u304b\u3002 0\u306f"\u5f71\u97ff\u529b\u306a\u3057"\u30011\u306f"\u666e\u901a"\u3067\u3059\u3002 - ForceAtlas2.threads.name=\u30b9\u30ec\u30c3\u30c9\u6570 - ForceAtlas2.threads.desc=\u30b9\u30ec\u30c3\u30c9\u304c\u591a\u3044\u3053\u3068\u306f\u3001\u3042\u306a\u305f\u306e\u30b3\u30a2\u304c\u305d\u308c\u3092\u6271\u3048\u308c\u3070\u3001\u3088\u308a\u9ad8\u901f\u306b\u306a\u308b\u3053\u3068\u3092\u610f\u5473\u3057\u307e\u3059\u3002 diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_nl.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_nl.properties new file mode 100644 index 0000000000..611ee01fda --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_nl.properties @@ -0,0 +1,28 @@ +ForceAtlas2.name=ForceAtlas 2 +ForceAtlas2.description=Quality layout: a linear-attraction linear-repulsion model with few approximations (BarnesHut). Speed automatically computed. +ForceAtlas2.tuning=Afstellen +ForceAtlas2.behavior=Gedragsalternatieven +ForceAtlas2.performance=Performance +ForceAtlas2.threads=Threads +ForceAtlas2.scalingRatio.name=Scaling +ForceAtlas2.scalingRatio.desc=How much repulsion you want. More makes a more sparse graph. +ForceAtlas2.gravity.name=Gravity +ForceAtlas2.gravity.desc=Attracts nodes to the center. Prevents islands from drifting away. +ForceAtlas2.strongGravityMode.name=Stronger Gravity +ForceAtlas2.strongGravityMode.desc=A stronger gravity law +ForceAtlas2.distributedAttraction.name=Dissuade Hubs +ForceAtlas2.distributedAttraction.desc=Distributes attraction along outbound edges. Hubs attract less and thus are pushed to the borders. +ForceAtlas2.linLogMode.name=LinLog mode +ForceAtlas2.linLogMode.desc=Switch ForceAtlas' model from lin-lin to lin-log (tribute to Andreas Noack). Makes clusters more tight. +ForceAtlas2.adjustSizes.name=Overlap voorkomen +ForceAtlas2.adjustSizes.desc=Use only when spatialized. Should not be used with "Approximate Repulsion" +ForceAtlas2.jitterTolerance.name=Tolerantie (snelheid) +ForceAtlas2.jitterTolerance.desc=How much swinging you allow. Above 1 discouraged. Lower gives less speed and more precision. +ForceAtlas2.barnesHutOptimization.name=Approximate Repulsion +ForceAtlas2.barnesHutOptimization.desc=Barnes Hut optimization: n\u00B2 complexity to n.ln(n) ; allows larger graphs. +ForceAtlas2.barnesHutTheta.name=Approximation +ForceAtlas2.barnesHutTheta.desc=Theta of the Barnes Hut optimization. +ForceAtlas2.edgeWeightInfluence.name=Edge Weight Influence +ForceAtlas2.edgeWeightInfluence.desc=How much influence you give to the edges weight. 0 is "no influence" and 1 is "normal". +ForceAtlas2.threads.name=Threads number +ForceAtlas2.threads.desc=More threads means more speed if your cores can handle it. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_pt_BR.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_pt_BR.properties index 50554d6367..bf1c17a2fb 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_pt_BR.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_pt_BR.properties @@ -1,64 +1,28 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -# C\u00e9lio Faria Jr. , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 12\:08+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - ForceAtlas2.name=ForceAtlas 2 - -ForceAtlas2.description=Disposi\u00e7\u00e3o por qualidade\: um modelo de atra\u00e7\u00e3o linear e repuls\u00e3o linear com poucas aproxima\u00e7\u00f5es (BarnesHut). Velocidade calculada automaticamente. - -ForceAtlas2.tuning=Afina\u00e7\u00e3o - +ForceAtlas2.description=Disposiηγo por qualidade: um modelo de atraηγo linear e repulsγo linear com poucas aproximaηυes (BarnesHut). Velocidade calculada automaticamente. +ForceAtlas2.tuning=Afinaηγo ForceAtlas2.behavior=Alternativas de comportamento - ForceAtlas2.performance=Desempenho - ForceAtlas2.threads=Threads - ForceAtlas2.scalingRatio.name=Dimensionamento - -ForceAtlas2.scalingRatio.desc=Quanta repuls\u00e3o voc\u00ea deseja. Valores maiores resultam em grafos mais dispersos. - +ForceAtlas2.scalingRatio.desc=Quanta repulsγo vocκ deseja. Valores maiores resultam em grafos mais dispersos. ForceAtlas2.gravity.name=Gravidade - -ForceAtlas2.gravity.desc=Atrai os n\u00f3s para o centro. Previne que as ilhas se afastem. - +ForceAtlas2.gravity.desc=Atrai os nσs para o centro. Previne que as ilhas se afastem. ForceAtlas2.strongGravityMode.name=Gravidade mais forte - ForceAtlas2.strongGravityMode.desc=Uma lei de gravidade mais forte - ForceAtlas2.distributedAttraction.name=Dissuadir hubs - -ForceAtlas2.distributedAttraction.desc=Distribui a atra\u00e7\u00e3o ao longo das arestas de sa\u00edda. Hubs atraem menos e s\u00e3o, portanto, empurrados para as bordas. - +ForceAtlas2.distributedAttraction.desc=Distribui a atraηγo ao longo das arestas de saνda. Hubs atraem menos e sγo, portanto, empurrados para as bordas. ForceAtlas2.linLogMode.name=Modo LinLog - ForceAtlas2.linLogMode.desc=Alternar o modelo ForceAtlas entre lin-lin e lin-log (homenagem a Andreas Noack). Torna os clusters mais apertado. - -ForceAtlas2.adjustSizes.name=Evitar sobreposi\u00e7\u00e3o - -ForceAtlas2.adjustSizes.desc=Usar apenas quando j\u00e1 est\u00e1 distribu\u00eddo. N\u00e3o deve ser usado juntamente com a op\u00e7\u00e3o "Aproximar repuls\u00e3o" - -ForceAtlas2.jitterTolerance.name=Toler\u00e2ncia (velocidade) - -ForceAtlas2.jitterTolerance.desc=Quanto balan\u00e7o ser\u00e1 permitido. Valores acima de 1 s\u00e3o desaconselhados. Valores menores resultam em menos velocidade e mais precis\u00e3o. - -ForceAtlas2.barnesHutOptimization.name=Aproximar repuls\u00e3o - -ForceAtlas2.barnesHutOptimization.desc=Otimiza\u00e7\u00e3o de Barnes Hut\: complexidade entre n e n.ln(n) ; permite grafos maiores. - -ForceAtlas2.barnesHutTheta.name=Aproxima\u00e7\u00e3o - -ForceAtlas2.barnesHutTheta.desc=Valor Theta da otimiza\u00e7\u00e3o de Barnes Hut. - -ForceAtlas2.edgeWeightInfluence.name=Influ\u00eancia do peso das arestas - -ForceAtlas2.edgeWeightInfluence.desc=Quanto o peso das arestas deve influenciar a disposi\u00e7\u00e3o. 0 significa "nenhuma influ\u00eancia" e 1 \u00e9 "influ\u00eancia normal". - -ForceAtlas2.threads.name=N\u00famero de threads - -ForceAtlas2.threads.desc=Mais threads obt\u00e9m mais velocidade, se os n\u00facleos do seu processador puderem suportar. +ForceAtlas2.adjustSizes.name=Evitar sobreposiηγo +ForceAtlas2.adjustSizes.desc=Usar apenas quando jα estα distribuνdo. Nγo deve ser usado juntamente com a opηγo "Aproximar repulsγo" +ForceAtlas2.jitterTolerance.name=Tolerβncia (velocidade) +ForceAtlas2.jitterTolerance.desc=Quanto balanηo serα permitido. Valores acima de 1 sγo desaconselhados. Valores menores resultam em menos velocidade e mais precisγo. +ForceAtlas2.barnesHutOptimization.name=Aproximar repulsγo +ForceAtlas2.barnesHutOptimization.desc=Otimizaηγo de Barnes Hut: complexidade entre n e n.ln(n) ; permite grafos maiores. +ForceAtlas2.barnesHutTheta.name=Aproximaηγo +ForceAtlas2.barnesHutTheta.desc=Valor Theta da otimizaηγo de Barnes Hut. +ForceAtlas2.edgeWeightInfluence.name=Influκncia do peso das arestas +ForceAtlas2.edgeWeightInfluence.desc=Quanto o peso das arestas deve influenciar a disposiηγo. 0 significa "nenhuma influκncia" e 1 ι "influκncia normal". +ForceAtlas2.threads.name=Nϊmero de threads +ForceAtlas2.threads.desc=Mais threads obtιm mais velocidade, se os nϊcleos do seu processador puderem suportar. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_ro.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_ro.properties new file mode 100644 index 0000000000..f082185aa1 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_ro.properties @@ -0,0 +1,32 @@ + + +ForceAtlas2.tuning=Acordare +ForceAtlas2.scalingRatio.name=Scalare +ForceAtlas2.scalingRatio.desc=C\u00E2t\u0103 repulsie vrei. Mai mult\u0103 face un graf mai rar. +ForceAtlas2.gravity.name=Gravita\u021Bie +ForceAtlas2.gravity.desc=Atrage nodurile c\u0103tre centru. \u00CEmpiedic\u0103 insulele s\u0103 se \u00EEndep\u0103rteze. +ForceAtlas2.strongGravityMode.name=Gravita\u021Bie mai puternic\u0103 +ForceAtlas2.strongGravityMode.desc=O lege a gravita\u021Biei mai puternic\u0103 +ForceAtlas2.linLogMode.name=Mod LinLog +ForceAtlas2.linLogMode.desc=Schimb\u0103 modelul ForceAtlas de la lin-lin la lin-log (gra\u021Bie lui Andreas Noack). Face clusterele mai str\u00E2nse. +ForceAtlas2.normalizeEdgeWeights.desc=Aduce ponderile muchiilor \u00EEntre 0 \u0219i 1. +ForceAtlas2.jitterTolerance.name=Toleran\u021B\u0103 (vitez\u0103) +ForceAtlas2.barnesHutOptimization.name=Repulsie aproximativ\u0103 +ForceAtlas2.barnesHutOptimization.desc=Optimizarea Barnes Hut: scade complexitatea n\u00B2 la n.ln(n); permite grafuri mai mari. +ForceAtlas2.edgeWeightInfluence.name=Influen\u021Ba ponderilor muchiilor +ForceAtlas2.edgeWeightInfluence.desc=C\u00E2t\u0103 influen\u021B\u0103 au ponderile muchiilor. 0 reprezint\u0103 "nicio influen\u021B\u0103" \u0219i 1 reprezint\u0103 "normal". +ForceAtlas2.adjustSizes.desc=A se utiliza numai c\u00E2nd setul de date este spa\u021Bializat. Nu ar trebui s\u0103 fie folosit cu "Repulsie aproximativ\u0103" +ForceAtlas2.threads.name=Num\u0103rul firelor de execu\u021Bie +ForceAtlas2.threads.desc=Mai multe fire de execu\u021Bie \u00EEnseamn\u0103 mai mult\u0103 vitez\u0103, dac\u0103 procesorul are suficiente nuclee. +ForceAtlas2.distributedAttraction.name=Descurajeaz\u0103 hub-urile +ForceAtlas2.threads=Fire de execu\u021Bie +ForceAtlas2.name=ForceAtlas 2 +ForceAtlas2.description=Dispunere calitativ\u0103: un model de atrac\u021Bie-liniar\u0103 repulsie-liniar\u0103, cu c\u00E2teva aproxim\u0103ri (BarnesHut). Viteza este calculat\u0103 automat. +ForceAtlas2.behavior=Alternative de comportament +ForceAtlas2.performance=Performan\u021B\u0103 +ForceAtlas2.adjustSizes.name=Previne suprapunerea +ForceAtlas2.distributedAttraction.desc=Distribuie atrac\u021Bia de-a lungul muchiilor de ie\u0219ire. Hub-urile atrag mai pu\u021Bin \u0219i astfel sunt \u00EEmpinse la margini. +ForceAtlas2.normalizeEdgeWeights.name=Normalizeaz\u0103 ponderile muchiilor +ForceAtlas2.barnesHutTheta.name=Aproxima\u021Bie +ForceAtlas2.barnesHutTheta.desc=Parametrul teta al optimiz\u0103rii Barnes Hut. +ForceAtlas2.jitterTolerance.desc=C\u00E2t balans va fi permis. Valorile peste 1 sunt descurajate. Valorile mai mici ofer\u0103 mai pu\u021Bin\u0103 vitez\u0103 \u0219i mai mult\u0103 precizie. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_ru.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_ru.properties index c0378d540d..2b8179d0aa 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_ru.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_ru.properties @@ -1,63 +1,28 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 15\:36+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - ForceAtlas2.name=ForceAtlas 2 - ForceAtlas2.description=\u041c\u043e\u0434\u0435\u043b\u044c \u0443\u043a\u043b\u0430\u0434\u043a\u0438 \u0441 \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u043c \u043f\u0440\u0438\u0442\u044f\u0436\u0435\u043d\u0438\u0435\u043c \u0438 \u043b\u0438\u043d\u0435\u0439\u043d\u044b\u043c \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043d\u0438\u0435\u043c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0430\u043f\u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0430\u0446\u0438\u0438 (BarnesHut). \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u044f\u0435\u0442\u0441\u044f \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438. - ForceAtlas2.tuning=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 - ForceAtlas2.behavior=\u041e\u043f\u0446\u0438\u0438 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f - ForceAtlas2.performance=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 - ForceAtlas2.threads=\u041f\u043e\u0442\u043e\u043a\u0438 - ForceAtlas2.scalingRatio.name=\u0420\u0430\u0437\u0440\u0435\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c - ForceAtlas2.scalingRatio.desc=\u0421\u0438\u043b\u0430 \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043d\u0438\u044f. \u0411\u043e\u043b\u044c\u0448\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0431\u043e\u043b\u0435\u0435 \u0440\u0430\u0437\u0440\u0435\u0436\u0435\u043d\u043d\u043e\u0439 \u0443\u043a\u043b\u0430\u0434\u043a\u0435. - ForceAtlas2.gravity.name=\u0413\u0440\u0430\u0432\u0438\u0442\u0430\u0446\u0438\u044f - ForceAtlas2.gravity.desc=\u0421\u0438\u043b\u0430 \u043f\u0440\u0438\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0449\u0430\u044f \u0443\u0437\u043b\u044b \u043a \u0446\u0435\u043d\u0442\u0440\u0443. \u041f\u0440\u0435\u043f\u044f\u0442\u0441\u0442\u0432\u0443\u0435\u0442 "\u0440\u0430\u0437\u043b\u0435\u0442\u0430\u043d\u0438\u044e" \u0438\u0437\u043e\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043a\u0443\u0441\u043a\u043e\u0432 - ForceAtlas2.strongGravityMode.name=\u0423\u0441\u0438\u043b\u0435\u043d\u0438\u0435 \u0433\u0440\u0430\u0432\u0438\u0442\u0430\u0446\u0438\u0438 - ForceAtlas2.strongGravityMode.desc=\u0423\u0441\u0438\u043b\u0438\u0442\u044c \u043f\u0440\u0430\u0432\u0438\u043b\u043e \u043f\u0440\u0438\u0442\u044f\u0436\u0435\u043d\u0438\u044f - ForceAtlas2.distributedAttraction.name=\u041e\u0441\u043b\u0430\u0431\u043b\u0435\u043d\u0438\u0435 \u0445\u0430\u0431\u043e\u0432 - ForceAtlas2.distributedAttraction.desc=\u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u0438\u043b\u0443 \u043f\u0440\u0438\u0442\u044f\u0436\u0435\u043d\u0438\u044f \u043f\u043e \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u043c \u0440\u0451\u0431\u0440\u0430\u043c. \u0425\u0430\u0431\u044b \u0431\u0443\u0434\u0443\u0442 \u0441\u043b\u0430\u0431\u0435\u0435 \u0441\u0442\u044f\u0433\u0438\u0432\u0430\u0442\u044c \u0443\u0437\u043b\u044b \u0432\u043e\u043a\u0440\u0443\u0433 \u0441\u0435\u0431\u044f. - ForceAtlas2.linLogMode.name=LinLog \u0440\u0435\u0436\u0438\u043c - ForceAtlas2.linLogMode.desc=\u041f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u043c\u043e\u0434\u0435\u043b\u044c ForceAtlas \u0441 lin-lin \u043d\u0430 lin-log (\u0430\u0432\u0442\u043e\u0440\u0441\u0442\u0432\u043e Andreas Noack). \u041a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u0431\u0443\u0434\u0443\u0442 \u0431\u043e\u043b\u0435\u0435 \u043f\u043b\u043e\u0442\u043d\u044b\u043c\u0438. - ForceAtlas2.adjustSizes.name=\u0417\u0430\u043f\u0440\u0435\u0442 \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u0438\u044f - ForceAtlas2.adjustSizes.desc=\u0421\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0443\u043a\u043b\u0430\u0434\u043a\u0438. \u041d\u0435\u043b\u044c\u0437\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u043c\u0435\u0441\u0442\u0435 \u0441 "\u043f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u043d\u044b\u043c \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043d\u0438\u0435\u043c" - ForceAtlas2.jitterTolerance.name=\u0423\u0441\u0442\u043e\u0439\u0447\u0438\u0432\u043e\u0441\u0442\u044c - ForceAtlas2.jitterTolerance.desc=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0434\u043e\u043f\u0443\u0441\u0442\u0438\u043c\u044b\u0435 \u043e\u0442\u043a\u043b\u043e\u043d\u0435\u043d\u0438\u044f. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043e\u0442 0 \u0434\u043e 1. \u0423\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u043f\u043e\u043d\u0438\u0436\u0435\u043d\u0438\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0438 \u043f\u043e\u0432\u044b\u0448\u0435\u043d\u0438\u044e \u0442\u043e\u0447\u043d\u043e\u0441\u0442\u0438. - ForceAtlas2.barnesHutOptimization.name=\u041f\u0440\u0438\u0431\u043b\u0438\u0436\u0435\u043d\u043d\u043e\u0435 \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043d\u0438\u0435 - ForceAtlas2.barnesHutOptimization.desc=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 Barnes Hut; \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 \u0433\u0440\u0430\u0444\u0430\u043c\u0438 \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u043e\u0431\u044a\u0435\u043c\u0430. - ForceAtlas2.barnesHutTheta.name=Theta - ForceAtlas2.barnesHutTheta.desc=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 theta \u0430\u043f\u043f\u0440\u043e\u043a\u0441\u0438\u043c\u0430\u0446\u0438\u0438 Barnes Hut - ForceAtlas2.edgeWeightInfluence.name=\u0412\u043b\u0438\u044f\u043d\u0438\u0435 \u0432\u0435\u0441\u043e\u0432 \u0440\u0435\u0431\u0451\u0440 - ForceAtlas2.edgeWeightInfluence.desc=\u0421\u0442\u0435\u043f\u0435\u043d\u044c \u0432\u043b\u0438\u044f\u043d\u0438\u044f \u0432\u0435\u0441\u043e\u0432 \u0440\u0451\u0431\u0435\u0440. 0 -- \u043d\u0435 \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f, 1 -- \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0443\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f. - ForceAtlas2.threads.name=\u0427\u0438\u0441\u043b\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432 - ForceAtlas2.threads.desc=\u0411\u043e\u043b\u044c\u0448\u0435\u0435 \u0447\u0438\u0441\u043b\u043e \u043f\u043e\u0442\u043e\u043a\u043e\u0432 \u0434\u0430\u0451\u0442 \u0431\u043e\u043b\u044c\u0448\u0443\u044e \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u044c \u0440\u0430\u0431\u043e\u0442\u044b, \u0435\u0441\u043b\u0438 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u043d\u043e \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_th.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_tr.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_tr.properties new file mode 100644 index 0000000000..3458ebd4d5 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_tr.properties @@ -0,0 +1,28 @@ +ForceAtlas2.name=ForceAtlas 2 +ForceAtlas2.description=Quality layout: a linear-attraction linear-repulsion model with few approximations (BarnesHut). Speed automatically computed. +ForceAtlas2.tuning=Tuning +ForceAtlas2.behavior=Behavior Alternatives +ForceAtlas2.performance=Performance +ForceAtlas2.threads=Threads +ForceAtlas2.scalingRatio.name=Scaling +ForceAtlas2.scalingRatio.desc=How much repulsion you want. More makes a more sparse graph. +ForceAtlas2.gravity.name=Gravity +ForceAtlas2.gravity.desc=Attracts nodes to the center. Prevents islands from drifting away. +ForceAtlas2.strongGravityMode.name=Stronger Gravity +ForceAtlas2.strongGravityMode.desc=A stronger gravity law +ForceAtlas2.distributedAttraction.name=Dissuade Hubs +ForceAtlas2.distributedAttraction.desc=Distributes attraction along outbound edges. Hubs attract less and thus are pushed to the borders. +ForceAtlas2.linLogMode.name=LinLog mode +ForceAtlas2.linLogMode.desc=Switch ForceAtlas' model from lin-lin to lin-log (tribute to Andreas Noack). Makes clusters more tight. +ForceAtlas2.adjustSizes.name=Prevent Overlap +ForceAtlas2.adjustSizes.desc=Use only when spatialized. Should not be used with "Approximate Repulsion" +ForceAtlas2.jitterTolerance.name=Tolerance (speed) +ForceAtlas2.jitterTolerance.desc=How much swinging you allow. Above 1 discouraged. Lower gives less speed and more precision. +ForceAtlas2.barnesHutOptimization.name=Approximate Repulsion +ForceAtlas2.barnesHutOptimization.desc=Barnes Hut optimization: n\u00B2 complexity to n.ln(n) ; allows larger graphs. +ForceAtlas2.barnesHutTheta.name=Approximation +ForceAtlas2.barnesHutTheta.desc=Theta of the Barnes Hut optimization. +ForceAtlas2.edgeWeightInfluence.name=Edge Weight Influence +ForceAtlas2.edgeWeightInfluence.desc=How much influence you give to the edges weight. 0 is "no influence" and 1 is "normal". +ForceAtlas2.threads.name=Threads number +ForceAtlas2.threads.desc=More threads means more speed if your cores can handle it. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_uk.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_uk.properties new file mode 100644 index 0000000000..b2b13792c2 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_uk.properties @@ -0,0 +1,32 @@ +ForceAtlas2.jitterTolerance.desc=\u0421\u043A\u0456\u043B\u044C\u043A\u0438 \u0440\u043E\u0437\u0433\u043E\u0439\u0434\u0443\u0432\u0430\u043D\u043D\u044F \u0432\u0438 \u0434\u043E\u0437\u0432\u043E\u043B\u044F\u0454\u0442\u0435. \u0412\u0438\u0449\u0435 1 \u043D\u0435 \u0440\u0435\u043A\u043E\u043C\u0435\u043D\u0434\u0443\u0454\u0442\u044C\u0441\u044F. \u041D\u0438\u0436\u0447\u0435 \u0434\u0430\u0454 \u043C\u0435\u043D\u0448\u0443 \u0448\u0432\u0438\u0434\u043A\u0456\u0441\u0442\u044C \u0456 \u0431\u0456\u043B\u044C\u0448\u0443 \u0442\u043E\u0447\u043D\u0456\u0441\u0442\u044C. +ForceAtlas2.scalingRatio.desc=\u0421\u043A\u0456\u043B\u044C\u043A\u0438 \u0432\u0456\u0434\u0448\u0442\u043E\u0432\u0445\u0443\u0432\u0430\u043D\u043D\u044F \u0432\u0438 \u0445\u043E\u0447\u0435\u0442\u0435. \u0411\u0456\u043B\u044C\u0448\u0435 \u0440\u043E\u0431\u0438\u0442\u044C \u0433\u0440\u0430\u0444\u0456\u043A \u0431\u0456\u043B\u044C\u0448 \u0440\u043E\u0437\u0440\u0456\u0434\u0436\u0435\u043D\u0438\u043C. +ForceAtlas2.strongGravityMode.name=\u0421\u0438\u043B\u044C\u043D\u0456\u0448\u0430 \u0433\u0440\u0430\u0432\u0456\u0442\u0430\u0446\u0456\u044F +ForceAtlas2.jitterTolerance.name=\u0422\u043E\u043B\u0435\u0440\u0430\u043D\u0442\u043D\u0456\u0441\u0442\u044C (\u0448\u0432\u0438\u0434\u043A\u0456\u0441\u0442\u044C) +ForceAtlas2.barnesHutTheta.name=\u041D\u0430\u0431\u043B\u0438\u0436\u0435\u043D\u043D\u044F +ForceAtlas2.distributedAttraction.name=\u0412\u0456\u0434\u0440\u0430\u0434\u0438\u0442\u0438 \u0445\u0430\u0431\u0438 +ForceAtlas2.gravity.desc=\u041F\u0440\u0438\u0442\u044F\u0433\u0443\u0454 \u0432\u0443\u0437\u043B\u0438 \u0434\u043E \u0446\u0435\u043D\u0442\u0440\u0443. \u0417\u0430\u043F\u043E\u0431\u0456\u0433\u0430\u0454 \u0434\u0440\u0435\u0439\u0444\u0443 \u043E\u0441\u0442\u0440\u043E\u0432\u0456\u0432. +ForceAtlas2.strongGravityMode.desc=\u0411\u0456\u043B\u044C\u0448 \u0441\u0438\u043B\u044C\u043D\u0438\u0439 \u0437\u0430\u043A\u043E\u043D \u0433\u0440\u0430\u0432\u0456\u0442\u0430\u0446\u0456\u0457 +ForceAtlas2.threads.desc=\u0411\u0456\u043B\u044C\u0448\u0435 \u043F\u043E\u0442\u043E\u043A\u0456\u0432 \u043E\u0437\u043D\u0430\u0447\u0430\u0454 \u0431\u0456\u043B\u044C\u0448\u0443 \u0448\u0432\u0438\u0434\u043A\u0456\u0441\u0442\u044C, \u044F\u043A\u0449\u043E \u0432\u0430\u0448\u0456 \u044F\u0434\u0440\u0430 \u043C\u043E\u0436\u0443\u0442\u044C \u0446\u0435 \u0432\u043F\u043E\u0440\u0430\u0442\u0438\u0441\u044F. +ForceAtlas2.name=Force Atlas 2 +ForceAtlas2.tuning=\u0422\u044E\u043D\u0456\u043D\u0433 +ForceAtlas2.behavior=\u0410\u043B\u044C\u0442\u0435\u0440\u043D\u0430\u0442\u0438\u0432\u0438 \u043F\u043E\u0432\u0435\u0434\u0456\u043D\u043A\u0438 +ForceAtlas2.performance=\u041F\u0440\u043E\u0434\u0443\u043A\u0442\u0438\u0432\u043D\u0456\u0441\u0442\u044C +ForceAtlas2.threads=\u041D\u0438\u0442\u043A\u0438 +ForceAtlas2.scalingRatio.name=\u041C\u0430\u0441\u0448\u0442\u0430\u0431\u0443\u0432\u0430\u043D\u043D\u044F +ForceAtlas2.gravity.name=\u0421\u0438\u043B\u0430 \u0442\u044F\u0436\u0456\u043D\u043D\u044F +ForceAtlas2.linLogMode.name=\u0420\u0435\u0436\u0438\u043C LinLog +ForceAtlas2.linLogMode.desc=\u041F\u0435\u0440\u0435\u043C\u043A\u043D\u0456\u0442\u044C \u043C\u043E\u0434\u0435\u043B\u044C ForceAtlas \u0437 lin-lin \u043D\u0430 lin-log (\u0434\u0430\u043D\u0438\u043D\u0430 \u0410\u043D\u0434\u0440\u0435\u0430\u0441\u0443 \u041D\u043E\u0430\u043A\u0443). \u0420\u043E\u0431\u0438\u0442\u044C \u043A\u043B\u0430\u0441\u0442\u0435\u0440\u0438 \u0431\u0456\u043B\u044C\u0448 \u0449\u0456\u043B\u044C\u043D\u0438\u043C\u0438. +ForceAtlas2.normalizeEdgeWeights.name=\u041D\u043E\u0440\u043C\u0430\u043B\u0456\u0437\u0430\u0446\u0456\u044F \u0432\u0430\u0433\u0438 \u043A\u0440\u0430\u0457\u0432 +ForceAtlas2.normalizeEdgeWeights.desc=\u0420\u043E\u0437\u043C\u0456\u0449\u0443\u0454 \u0432\u0430\u0433\u0438 \u0440\u0435\u0431\u0435\u0440 \u043C\u0456\u0436 0 \u0456 1. +ForceAtlas2.invertedEdgeWeightsMode.name=\u0412\u0430\u0433\u0438 \u0437 \u043F\u0435\u0440\u0435\u0432\u0435\u0440\u043D\u0443\u0442\u0438\u043C\u0438 \u043A\u0440\u0430\u044F\u043C\u0438 +ForceAtlas2.invertedEdgeWeightsMode.desc=\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0439\u0442\u0435 \u043F\u0435\u0440\u0435\u0432\u0435\u0440\u043D\u0443\u0442\u0456 \u043E\u0431\u0432\u0430\u0436\u043D\u044E\u0432\u0430\u0447\u0456 1/w +ForceAtlas2.adjustSizes.name=\u0417\u0430\u043F\u043E\u0431\u0456\u0433\u0430\u043D\u043D\u044F \u043F\u0435\u0440\u0435\u043A\u0440\u0438\u0442\u0442\u044E +ForceAtlas2.barnesHutOptimization.name=\u041F\u0440\u0438\u0431\u043B\u0438\u0437\u043D\u0435 \u0432\u0456\u0434\u0448\u0442\u043E\u0432\u0445\u0443\u0432\u0430\u043D\u043D\u044F +ForceAtlas2.edgeWeightInfluence.name=\u0412\u043F\u043B\u0438\u0432 \u0432\u0430\u0433\u0438 \u043A\u0440\u0430\u044E +ForceAtlas2.edgeWeightInfluence.desc=\u042F\u043A\u0438\u0439 \u0432\u043F\u043B\u0438\u0432 \u0432\u0438 \u043D\u0430\u0434\u0430\u0454\u0442\u0435 \u0432\u0430\u0437\u0456 \u043A\u0440\u0430\u0457\u0432. 0 \u043E\u0437\u043D\u0430\u0447\u0430\u0454 \u00AB\u043D\u0435 \u0432\u043F\u043B\u0438\u0432\u0430\u0454\u00BB, \u0430 1 \u043E\u0437\u043D\u0430\u0447\u0430\u0454 \u00AB\u043D\u043E\u0440\u043C\u0430\u043B\u044C\u043D\u043E\u00BB. +ForceAtlas2.description=\u042F\u043A\u0456\u0441\u043D\u0438\u0439 \u043C\u0430\u043A\u0435\u0442: \u043C\u043E\u0434\u0435\u043B\u044C \u043B\u0456\u043D\u0456\u0439\u043D\u043E\u0433\u043E \u043F\u0440\u0438\u0442\u044F\u0433\u0430\u043D\u043D\u044F \u0442\u0430 \u043B\u0456\u043D\u0456\u0439\u043D\u043E\u0433\u043E \u0432\u0456\u0434\u0448\u0442\u043E\u0432\u0445\u0443\u0432\u0430\u043D\u043D\u044F \u0437 \u043A\u0456\u043B\u044C\u043A\u043E\u043C\u0430 \u043D\u0430\u0431\u043B\u0438\u0436\u0435\u043D\u043D\u044F\u043C\u0438 (BarnesHut). \u0428\u0432\u0438\u0434\u043A\u0456\u0441\u0442\u044C \u043E\u0431\u0447\u0438\u0441\u043B\u044E\u0454\u0442\u044C\u0441\u044F \u0430\u0432\u0442\u043E\u043C\u0430\u0442\u0438\u0447\u043D\u043E. +ForceAtlas2.distributedAttraction.desc=\u0420\u043E\u0437\u043F\u043E\u0434\u0456\u043B\u044F\u0454 \u043F\u0440\u0438\u0432\u0430\u0431\u043B\u0438\u0432\u0456\u0441\u0442\u044C \u0443\u0437\u0434\u043E\u0432\u0436 \u0437\u043E\u0432\u043D\u0456\u0448\u043D\u0456\u0445 \u043A\u0440\u0430\u0457\u0432. \u0425\u0430\u0431\u0438 \u043C\u0435\u043D\u0448\u0435 \u043F\u0440\u0438\u0432\u0430\u0431\u043B\u044E\u044E\u0442\u044C \u0456, \u0442\u0430\u043A\u0438\u043C \u0447\u0438\u043D\u043E\u043C, \u0432\u0456\u0434\u0441\u0443\u0432\u0430\u044E\u0442\u044C\u0441\u044F \u0434\u043E \u043A\u043E\u0440\u0434\u043E\u043D\u0456\u0432. +ForceAtlas2.adjustSizes.desc=\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0439\u0442\u0435 \u043B\u0438\u0448\u0435 \u0443 \u043F\u0440\u043E\u0441\u0442\u043E\u0440\u043E\u0432\u043E\u043C\u0443 \u0432\u0438\u0433\u043B\u044F\u0434\u0456. \u041D\u0435 \u0441\u043B\u0456\u0434 \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0432\u0430\u0442\u0438 \u0437 "\u043F\u0440\u0438\u0431\u043B\u0438\u0437\u043D\u0438\u043C \u0432\u0456\u0434\u0448\u0442\u043E\u0432\u0445\u0443\u0432\u0430\u043D\u043D\u044F\u043C" +ForceAtlas2.threads.name=\u041A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u043D\u0438\u0442\u043E\u043A +ForceAtlas2.barnesHutOptimization.desc=\u041E\u043F\u0442\u0438\u043C\u0456\u0437\u0430\u0446\u0456\u044F Barnes Hut: n\u00B2 \u0441\u043A\u043B\u0430\u0434\u043D\u0456\u0441\u0442\u044C \u0434\u043E n.ln(n) ; \u0434\u043E\u0437\u0432\u043E\u043B\u044F\u0454 \u0431\u0456\u043B\u044C\u0448\u0456 \u0433\u0440\u0430\u0444\u0456\u043A\u0438. +ForceAtlas2.barnesHutTheta.desc=\u0422\u0435\u0442\u0430 \u043E\u043F\u0442\u0438\u043C\u0456\u0437\u0430\u0446\u0456\u0457 Barnes Hut. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_zh_CN.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_zh_CN.properties index 95817376fd..8a7ba08c0e 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_zh_CN.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_zh_CN.properties @@ -1,63 +1,28 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 04\:14+0000\nLast-Translator\: Xi-Nian Zuo \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - ForceAtlas2.name=ForceAtlas 2 - ForceAtlas2.description=\u8d28\u91cf\u5e03\u5c40\uff1a\u7ebf\u6027\u5438\u5f15\u6570\u8fd1\u4f3c\u7ebf\u6027\u6392\u65a5\u6a21\u578b\uff08BarnesHut\uff09\u3002\u901f\u5ea6\u81ea\u52a8\u8ba1\u7b97\u3002 - ForceAtlas2.tuning=\u8c03\u97f3 - ForceAtlas2.behavior=\u884c\u4e3a\u66ff\u4ee3 - ForceAtlas2.performance=\u6027\u80fd - ForceAtlas2.threads=\u4e3b\u9898 - ForceAtlas2.scalingRatio.name=\u7f29\u653e - ForceAtlas2.scalingRatio.desc=\u4f60\u60f3\u591a\u5c11\u65a5\u529b\u3002\u66f4\u591a\u7684\u66f4\u7a00\u758f\u56fe\u3002 - ForceAtlas2.gravity.name=\u91cd\u529b - ForceAtlas2.gravity.desc=\u5438\u5f15\u5230\u4e2d\u5fc3\u8282\u70b9\u3002\u9632\u6b62\u5c9b\u5c7f\u6e10\u884c\u6e10\u8fdc\u3002 - ForceAtlas2.strongGravityMode.name=\u66f4\u5f3a\u7684\u91cd\u529b - ForceAtlas2.strongGravityMode.desc=\u4e00\u4e2a\u5f3a\u6709\u529b\u7684\u4e07\u6709\u5f15\u529b\u5b9a\u5f8b - ForceAtlas2.distributedAttraction.name=\u529d\u963bHubs - ForceAtlas2.distributedAttraction.desc=\u6cbf\u8f93\u51fa\u7684\u8fb9\u5206\u5e03\u5438\u5f15\u529b\u3002Hub\u5438\u5f15\u8f83\u5c11\uff0c\u56e0\u6b64\u88ab\u63a8\u5230\u8fb9\u754c\u3002 - ForceAtlas2.linLogMode.name=LinLog\u6a21\u5f0f - ForceAtlas2.linLogMode.desc=\u5207\u6362ForceAtlas\u6a21\u578b\u7684\u7ebf\u6027-\u7ebf\u6027\u5750\u6807\u7cfb\u5230\u7ebf\u6027-\u5bf9\u6570\u5750\u6807\u7cfb(Andreas Noack\u8d21\u732e) \u4f7f\u56e2\u5757\u66f4\u7d27\u51d1. - ForceAtlas2.adjustSizes.name=\u9632\u6b62\u91cd\u53e0 - ForceAtlas2.adjustSizes.desc=\u53ea\u6709\u5f53\u7a7a\u95f4\u5316\u3002\u4e0d\u5e94\u8be5\u7528\u201c\u8fd1\u4f3c\u65a5\u529b\u201d - ForceAtlas2.jitterTolerance.name=\u5bb9\u5dee\uff08\u901f\u5ea6\uff09 - ForceAtlas2.jitterTolerance.desc=\u5141\u8bb8\u591a\u5c11\u6446\u52a8\u3002\u963b\u6b621\u4ee5\u4e0a\u7684\u3002\u5c0f\u7684\u6446\u52a8\u5219\u7ed9\u51fa\u8f83\u5c11\u7684\u901f\u5ea6\u548c\u66f4\u7cbe\u786e\u7684\u7cbe\u5bc6\u5ea6\u3002 - -ForceAtlas2.barnesHutOptimization.name=\u8fd1\u4f3c\u200b\u200b\u65a5\u529b - +ForceAtlas2.barnesHutOptimization.name=\u8FD1\u4F3C\u65A5\u529B ForceAtlas2.barnesHutOptimization.desc=Barnes Hut\u4f18\u5316\uff1an \u590d\u6742\u5ea6\u5230n.ln\uff08n\uff09\uff0c\u5141\u8bb8\u66f4\u5927\u7684\u56fe\u5f62\u3002 - ForceAtlas2.barnesHutTheta.name=\u8fd1\u4f3c - ForceAtlas2.barnesHutTheta.desc=Barnes Hut\u4f18\u5316\u7684\u897f\u5854\u3002 - ForceAtlas2.edgeWeightInfluence.name=\u8fb9\u7684\u6743\u91cd\u7684\u5f71\u54cd - ForceAtlas2.edgeWeightInfluence.desc=\u4f60\u7ed9\u591a\u5c11\u5f71\u54cd\u5230\u8fb9\u7684\u6743\u91cd\u3002 0\u201c\u6ca1\u6709\u5f71\u54cd\u201d\uff0c1\u662f\u201c\u6b63\u5e38\u201d\u3002 - ForceAtlas2.threads.name=\u7ebf\u7a0b\u6570 - ForceAtlas2.threads.desc=\u5982\u679c\u4f60\u7684\u5185\u6838\u53ef\u4ee5\u5904\u7406\u66f4\u591a\u7684\u7ebf\u7a0b\u610f\u5473\u7740\u66f4\u5feb\u7684\u901f\u5ea6\u3002 diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_zh_TW.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_zh_TW.properties new file mode 100644 index 0000000000..3458ebd4d5 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/Bundle_zh_TW.properties @@ -0,0 +1,28 @@ +ForceAtlas2.name=ForceAtlas 2 +ForceAtlas2.description=Quality layout: a linear-attraction linear-repulsion model with few approximations (BarnesHut). Speed automatically computed. +ForceAtlas2.tuning=Tuning +ForceAtlas2.behavior=Behavior Alternatives +ForceAtlas2.performance=Performance +ForceAtlas2.threads=Threads +ForceAtlas2.scalingRatio.name=Scaling +ForceAtlas2.scalingRatio.desc=How much repulsion you want. More makes a more sparse graph. +ForceAtlas2.gravity.name=Gravity +ForceAtlas2.gravity.desc=Attracts nodes to the center. Prevents islands from drifting away. +ForceAtlas2.strongGravityMode.name=Stronger Gravity +ForceAtlas2.strongGravityMode.desc=A stronger gravity law +ForceAtlas2.distributedAttraction.name=Dissuade Hubs +ForceAtlas2.distributedAttraction.desc=Distributes attraction along outbound edges. Hubs attract less and thus are pushed to the borders. +ForceAtlas2.linLogMode.name=LinLog mode +ForceAtlas2.linLogMode.desc=Switch ForceAtlas' model from lin-lin to lin-log (tribute to Andreas Noack). Makes clusters more tight. +ForceAtlas2.adjustSizes.name=Prevent Overlap +ForceAtlas2.adjustSizes.desc=Use only when spatialized. Should not be used with "Approximate Repulsion" +ForceAtlas2.jitterTolerance.name=Tolerance (speed) +ForceAtlas2.jitterTolerance.desc=How much swinging you allow. Above 1 discouraged. Lower gives less speed and more precision. +ForceAtlas2.barnesHutOptimization.name=Approximate Repulsion +ForceAtlas2.barnesHutOptimization.desc=Barnes Hut optimization: n\u00B2 complexity to n.ln(n) ; allows larger graphs. +ForceAtlas2.barnesHutTheta.name=Approximation +ForceAtlas2.barnesHutTheta.desc=Theta of the Barnes Hut optimization. +ForceAtlas2.edgeWeightInfluence.name=Edge Weight Influence +ForceAtlas2.edgeWeightInfluence.desc=How much influence you give to the edges weight. 0 is "no influence" and 1 is "normal". +ForceAtlas2.threads.name=Threads number +ForceAtlas2.threads.desc=More threads means more speed if your cores can handle it. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/cs.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/cs.po deleted file mode 100644 index 9a504b6cbd..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/cs.po +++ /dev/null @@ -1,103 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-07 19:25+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "ForceAtlas2.name" -msgstr "ForceAtlas 2" - -msgid "ForceAtlas2.description" -msgstr "RozloΕΎenΓ­ kvality: model lineΓ‘rnΓ­ho pΕ™itaΕΎenΓ­-odpuzenΓ­ s pΓ‘r odhady (BarnesHut). Rychlost je automaticky vypočítΓ‘na." - -msgid "ForceAtlas2.tuning" -msgstr "LadΔ›nΓ­" - -msgid "ForceAtlas2.behavior" -msgstr "Alternativy chovΓ‘nΓ­" - -msgid "ForceAtlas2.performance" -msgstr "VΓ½kon" - -msgid "ForceAtlas2.threads" -msgstr "VlΓ‘kna" - -msgid "ForceAtlas2.scalingRatio.name" -msgstr "ZmΔ›na velikosti" - -msgid "ForceAtlas2.scalingRatio.desc" -msgstr "Kolik odpuzenΓ­ chcete. VΓ­ce znamenΓ‘ rozptΓ½lenΔ›jΕ‘Γ­ graf." - -msgid "ForceAtlas2.gravity.name" -msgstr "Gravitace" - -msgid "ForceAtlas2.gravity.desc" -msgstr "PΕ™itahuje uzly do stΕ™edu. Zabraňuje ostrovΕ―m v oddΓ‘lenΓ­." - -msgid "ForceAtlas2.strongGravityMode.name" -msgstr "SilnΔ›jΕ‘Γ­ gravitace" - -msgid "ForceAtlas2.strongGravityMode.desc" -msgstr "ZΓ‘kon silnΔ›jΕ‘Γ­ gravitace" - -msgid "ForceAtlas2.distributedAttraction.name" -msgstr "Odsunout stΕ™edy" - -msgid "ForceAtlas2.distributedAttraction.desc" -msgstr "RozdΔ›luje pΕ™itaΕΎlivost mezi odchozΓ­ hrany. StΕ™edy pΕ™itahujΓ­ mΓ©nΔ› a proto jsou odsunuty na okraje." - -msgid "ForceAtlas2.linLogMode.name" -msgstr "ReΕΎim Linlog" - -msgid "ForceAtlas2.linLogMode.desc" -msgstr "PΕ™epnout model ForceAtlas z lin-lin do lin-log (pocta Andreu Noackovi). Shluk je pak vΓ­ce pohromadΔ›." - -msgid "ForceAtlas2.adjustSizes.name" -msgstr "ZabrΓ‘nit pΕ™ekrytΓ­" - -msgid "ForceAtlas2.adjustSizes.desc" -msgstr "PouΕΎΓ­vejte pouze pΕ™i zobrazenΓ­ prostoru. NemΔ›lo by bΓ½t pouΕΎito s \"PΕ™ibliΕΎnΓ½ odpor\"" - -msgid "ForceAtlas2.jitterTolerance.name" -msgstr "Tolerance (rychlost)" - -msgid "ForceAtlas2.jitterTolerance.desc" -msgstr "Kolik kΓ½vΓ‘nΓ­ dovolΓ­te. Nad 1 nenΓ­ doporučeno. NiΕΎΕ‘Γ­ dΓ‘vΓ‘ menΕ‘Γ­ rychlost a vΔ›tΕ‘Γ­ pΕ™esnost." - -msgid "ForceAtlas2.barnesHutOptimization.name" -msgstr "PΕ™ibliΕΎnΓ½ odpor" - -msgid "ForceAtlas2.barnesHutOptimization.desc" -msgstr "Optimalizace Barnes Hut: sloΕΎitost n k n.ln(n) ; umožňuje vtΕ‘Γ­ grafy." - -msgid "ForceAtlas2.barnesHutTheta.name" -msgstr "Odhad" - -msgid "ForceAtlas2.barnesHutTheta.desc" -msgstr "Theta optimalizace Barnes Hut" - -msgid "ForceAtlas2.edgeWeightInfluence.name" -msgstr "Vliv hmotnosti hrany" - -msgid "ForceAtlas2.edgeWeightInfluence.desc" -msgstr "Jak velkΓ½ vliv dΓ‘vΓ‘te hmotnosti hrany. 0 je \"ΕΎΓ‘dnΓ½ vliv\" a 1 je \"normΓ‘lnΓ­\"." - -msgid "ForceAtlas2.threads.name" -msgstr "Počet vlΓ‘ken" - -msgid "ForceAtlas2.threads.desc" -msgstr "VΓ­ce vlΓ‘ken znamenΓ‘ vΔ›tΕ‘Γ­ rychlost, pokud to VaΕ‘e jΓ‘dra zvlΓ‘dnou." diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/es.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/es.po deleted file mode 100644 index e503bcd24b..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/es.po +++ /dev/null @@ -1,103 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 21:42+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "ForceAtlas2.name" -msgstr "ForceAtlas 2" - -msgid "ForceAtlas2.description" -msgstr "DistribuciΓ³n de calidad: un modelo de atracciΓ³n lineal y repulsiΓ³n lineal con unas pocas aproximaciones (BarnesHut). Velocidad calculada automΓ‘ticamente." - -msgid "ForceAtlas2.tuning" -msgstr "Puesta a punto" - -msgid "ForceAtlas2.behavior" -msgstr "Alternativas de comportamiento" - -msgid "ForceAtlas2.performance" -msgstr "Rendimiento" - -msgid "ForceAtlas2.threads" -msgstr "Hilos" - -msgid "ForceAtlas2.scalingRatio.name" -msgstr "Escalado" - -msgid "ForceAtlas2.scalingRatio.desc" -msgstr "La cantidad de repulsiΓ³n deseada. Valores mayores hacen grafos mΓ‘s dispersos." - -msgid "ForceAtlas2.gravity.name" -msgstr "Gravedad" - -msgid "ForceAtlas2.gravity.desc" -msgstr "Atrae los nodos al centro. Previene que las islas se alejen." - -msgid "ForceAtlas2.strongGravityMode.name" -msgstr "Gravedad mΓ‘s fuerte" - -msgid "ForceAtlas2.strongGravityMode.desc" -msgstr "Una ley de la gravedad mΓ‘s fuerte" - -msgid "ForceAtlas2.distributedAttraction.name" -msgstr "Disuadir Hubs" - -msgid "ForceAtlas2.distributedAttraction.desc" -msgstr "Distribuye la atracciΓ³n a traves de las aristas salientes. Los Hubs atraen menos y por lo tanto son empujados a los bordes." - -msgid "ForceAtlas2.linLogMode.name" -msgstr "Modo LinLog" - -msgid "ForceAtlas2.linLogMode.desc" -msgstr "Cambiar el modelo de ForceAtlas de lin-lin a lin-log (tributo a Andreas Noack). Hace a los clusters mΓ‘s tensos." - -msgid "ForceAtlas2.adjustSizes.name" -msgstr "Evitar el solapamiento" - -msgid "ForceAtlas2.adjustSizes.desc" -msgstr "Utilizar sΓ³lo cuando ya estΓ‘ distribuido. No se debe utilizar con \"Aproximar RepulsiΓ³n\"" - -msgid "ForceAtlas2.jitterTolerance.name" -msgstr "Tolerancia (velocidad)" - -msgid "ForceAtlas2.jitterTolerance.desc" -msgstr "CuΓ‘nto balanceo permitir. Valores por encima de 1 desaconsejados. Valores menores dan menos velocidad y mayor precisiΓ³n." - -msgid "ForceAtlas2.barnesHutOptimization.name" -msgstr "Aproximar RepulsiΓ³n" - -msgid "ForceAtlas2.barnesHutOptimization.desc" -msgstr "OptimizaciΓ³n Barnes Hut: complejidad n a complejidad n.ln(n) ; permite grafos mayores." - -msgid "ForceAtlas2.barnesHutTheta.name" -msgstr "AproximaciΓ³n" - -msgid "ForceAtlas2.barnesHutTheta.desc" -msgstr "Valor Theta de la optimizaciΓ³n Barnes Hut." - -msgid "ForceAtlas2.edgeWeightInfluence.name" -msgstr "Influencia del peso de las aristas" - -msgid "ForceAtlas2.edgeWeightInfluence.desc" -msgstr "CΓΊanta influencia dar al peso de las aristas. 0 es \"ninguna influencia\" y 1 es \"normal\"." - -msgid "ForceAtlas2.threads.name" -msgstr "NΓΊmero de hilos" - -msgid "ForceAtlas2.threads.desc" -msgstr "MΓ‘s hilos significa mΓ‘s velocidad si tu procesador puede manejarlos." diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/fr.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/fr.po deleted file mode 100644 index 4be7668e46..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/fr.po +++ /dev/null @@ -1,103 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 12:07+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "ForceAtlas2.name" -msgstr "Force Atlas 2" - -msgid "ForceAtlas2.description" -msgstr "Spatialisation de qualitΓ© : un modΓ¨le attraction linΓ©aire - rΓ©pulsion linΓ©aire avec quelques approximations (Barnes Hut). Vitesse calculΓ©e automatiquement." - -msgid "ForceAtlas2.tuning" -msgstr "Tuning" - -msgid "ForceAtlas2.behavior" -msgstr "Comportements alternatifs" - -msgid "ForceAtlas2.performance" -msgstr "Performance" - -msgid "ForceAtlas2.threads" -msgstr "Processus" - -msgid "ForceAtlas2.scalingRatio.name" -msgstr "Echelle" - -msgid "ForceAtlas2.scalingRatio.desc" -msgstr "QuantitΓ© de rΓ©pulsion dΓ©sirΓ©e. L'augmenter donne un graphe plus clairsemΓ©." - -msgid "ForceAtlas2.gravity.name" -msgstr "GravitΓ©" - -msgid "ForceAtlas2.gravity.desc" -msgstr "Attire les noeuds vers le centre. EmpΓͺche les Γles de dΓ©river." - -msgid "ForceAtlas2.strongGravityMode.name" -msgstr "GravitΓ© plus forte" - -msgid "ForceAtlas2.strongGravityMode.desc" -msgstr "Une loi de gravitΓ© plus forte" - -msgid "ForceAtlas2.distributedAttraction.name" -msgstr "Dissuader les Hubs" - -msgid "ForceAtlas2.distributedAttraction.desc" -msgstr "Distribue l'attraction le long des liens sortants. Les hubs attirent moins et sont ainsi poussΓ©s vers les bords." - -msgid "ForceAtlas2.linLogMode.name" -msgstr "Mode LinLog" - -msgid "ForceAtlas2.linLogMode.desc" -msgstr "Bascule le modΓ¨le de lin-lin Γ  lin-log (en hommage Γ  Andreas Noack). Rend les clusters plus resserrΓ©s." - -msgid "ForceAtlas2.adjustSizes.name" -msgstr "EmpΓͺcher le Recouvrement" - -msgid "ForceAtlas2.adjustSizes.desc" -msgstr "Utiliser seulement une fois spatialisΓ©. Ne devrait pas Γͺtre utilisΓ© avec \"RΓ©pulsion approximative\"" - -msgid "ForceAtlas2.jitterTolerance.name" -msgstr "TolΓ©rance (vitesse)" - -msgid "ForceAtlas2.jitterTolerance.desc" -msgstr "QuantitΓ© de balancement autorisΓ©. Plus de 1 est dΓ©conseillΓ©. Moins rΓ©duit la vitesse et augmente la prΓ©cision." - -msgid "ForceAtlas2.barnesHutOptimization.name" -msgstr "RΓ©pulsion Approximative" - -msgid "ForceAtlas2.barnesHutOptimization.desc" -msgstr "Optimisation du Barnes Hut : complexitΓ© de n2 Γ  n.ln(n); autorise des graphes plus larges." - -msgid "ForceAtlas2.barnesHutTheta.name" -msgstr "Approximation" - -msgid "ForceAtlas2.barnesHutTheta.desc" -msgstr "ParamΓ¨tre Theta de l'optimisation Barnes Hut." - -msgid "ForceAtlas2.edgeWeightInfluence.name" -msgstr "Influence du poids des liens" - -msgid "ForceAtlas2.edgeWeightInfluence.desc" -msgstr "QuantitΓ© d'influence donnΓ© au poids des liens. 0 = \"pas d'influence\" et 1 = \"normal\"." - -msgid "ForceAtlas2.threads.name" -msgstr "Nombre de processus" - -msgid "ForceAtlas2.threads.desc" -msgstr "Plus de processus implique une plus grande vitesse si vos coeurs de processeur le permettent." diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/ja.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/ja.po deleted file mode 100644 index ed861ad56b..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/ja.po +++ /dev/null @@ -1,103 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-23 07:46+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "ForceAtlas2.name" -msgstr "ForceAtlas 2" - -msgid "ForceAtlas2.description" -msgstr "品θ³ͺγγƒ¬γ‚€γ‚’γ‚¦γƒˆ:ε°‘γͺい近似γη·šε½’εΌ•εŠ›η·šε½’ζ–₯εŠ›γƒ’γƒ‡γƒ«(BarnesHut)。早く、θ‡ͺε‹•ηš„γ«θ¨ˆη—。" - -msgid "ForceAtlas2.tuning" -msgstr "チγƒ₯ーニング" - -msgid "ForceAtlas2.behavior" -msgstr "ε‹•δ½œγδ»£ζ›Ώ" - -msgid "ForceAtlas2.performance" -msgstr "γƒ‘γƒ•γ‚©γƒΌγƒžγƒ³γ‚Ή" - -msgid "ForceAtlas2.threads" -msgstr "スレッド" - -msgid "ForceAtlas2.scalingRatio.name" -msgstr "γ‚Ήγ‚±γƒΌγƒͺング" - -msgid "ForceAtlas2.scalingRatio.desc" -msgstr "εΈŒζœ›γεη™Ίγη¨‹εΊ¦γ€‚ε€§γγ‘γ‚Œγ°γγ‚Œγ γ‘η–Žγͺグラフにγͺγ‚ŠγΎγ™γ€‚" - -msgid "ForceAtlas2.gravity.name" -msgstr "εΌ•εŠ›" - -msgid "ForceAtlas2.gravity.desc" -msgstr "γƒŽγƒΌγƒ‰γ‚’δΈ­εΏƒγ«η‰½εΌ•γ€‚ε³ΆγζΌ‚ζ΅γ‚’ι˜²γγ€‚" - -msgid "ForceAtlas2.strongGravityMode.name" -msgstr "γ‚ˆγ‚ŠεΌ·γ„εΌ•εŠ›" - -msgid "ForceAtlas2.strongGravityMode.desc" -msgstr "γ‚ˆγ‚ŠεΌ·γ„εΌ•εŠ›γζ³•則" - -msgid "ForceAtlas2.distributedAttraction.name" -msgstr "γƒγƒ–γ‚’εˆΆζ­’" - -msgid "ForceAtlas2.distributedAttraction.desc" -msgstr "γ‚’γ‚¦γƒˆγƒγ‚¦γƒ³γƒ‰γ‚¨γƒƒγ‚Έγ«ζ²Ώγ£γ¦εΌ•εŠ›γ‚’ι…η½γ€‚ハブγεΌ•εŠ›γ―γ‚ˆγ‚ŠεΌ±γγ€θΎΊηΈγ«ζŠΌγ—γ‚„γ‚‰γ‚ŒγΎγ™γ€‚" - -msgid "ForceAtlas2.linLogMode.name" -msgstr "LinLog ヒード" - -msgid "ForceAtlas2.linLogMode.desc" -msgstr "ForceAtlasヒデルをlin-linからlin-logγ«εˆ‡γ‚Šζ›Ώγˆγ€‚(Andreas Noackに捧ぐ)γ€‚γ‚―γƒ©γ‚Ήγ‚Ώγ‚’γ‚ˆγ‚Šγγ€γγ—γΎγ™γ€‚" - -msgid "ForceAtlas2.adjustSizes.name" -msgstr "重γͺγ‚Šγε›žιΏ" - -msgid "ForceAtlas2.adjustSizes.desc" -msgstr "spatialized時にγγΏδ½Ώη”¨γ€‚ \"概η—εΌ•εŠ›\"と一緒に使用しγͺいでください" - -msgid "ForceAtlas2.jitterTolerance.name" -msgstr "許εΉε€€(ι€ŸεΊ¦)" - -msgid "ForceAtlas2.jitterTolerance.desc" -msgstr "どγγγ‚‰γ„γγΆγ‚Œγ‚’許可するか。 1δ»₯δΈŠγ‚’γŠε‹§γ‚γ€‚δ»₯δΈ‹γ§γ―ι…γ„γŒζ­£η’Ίγ€‚" - -msgid "ForceAtlas2.barnesHutOptimization.name" -msgstr "ζ–₯εŠ›γζ¦‚η—" - -msgid "ForceAtlas2.barnesHutOptimization.desc" -msgstr "Barnes Hut ζœ€ι©εŒ–: n complexity to n.ln(n) ; γ‚ˆγ‚Šε€§γγͺグラフを許可" - -msgid "ForceAtlas2.barnesHutTheta.name" -msgstr "θΏ‘δΌΌ" - -msgid "ForceAtlas2.barnesHutTheta.desc" -msgstr "Barnes Hutζœ€ι©εŒ–γΞΈ" - -msgid "ForceAtlas2.edgeWeightInfluence.name" -msgstr "θΎΊγι‡γΏγε½±ιŸΏ" - -msgid "ForceAtlas2.edgeWeightInfluence.desc" -msgstr "θΎΊγι‡γΏγ«γ©γγγ‚‰γ„γε½±ιŸΏγ‚’δ»˜δΈŽγ™γ‚‹γ‹γ€‚ 0は\"ε½±ιŸΏεŠ›γͺし\"、1は\"ζ™ι€š\"です。" - -msgid "ForceAtlas2.threads.name" -msgstr "スレッド数" - -msgid "ForceAtlas2.threads.desc" -msgstr "γ‚Ήγƒ¬γƒƒγƒ‰γŒε€šγ„γ“γ¨γ―γ€γ‚γͺたγγ‚³γ‚’γŒγγ‚Œγ‚’ζ‰±γˆγ‚Œγ°γ€γ‚ˆγ‚Šι«˜ι€Ÿγ«γͺることを意味します。" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/org-gephi-layout-plugin-forceAtlas2.pot b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/org-gephi-layout-plugin-forceAtlas2.pot deleted file mode 100644 index f8b7455e52..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/org-gephi-layout-plugin-forceAtlas2.pot +++ /dev/null @@ -1,112 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "ForceAtlas2.name" -msgstr "ForceAtlas 2" - -msgid "ForceAtlas2.description" -msgstr "" -"Quality layout: a linear-attraction linear-repulsion model with few " -"approximations (BarnesHut). Speed automatically computed." - -msgid "ForceAtlas2.tuning" -msgstr "Tuning" - -msgid "ForceAtlas2.behavior" -msgstr "Behavior Alternatives" - -msgid "ForceAtlas2.performance" -msgstr "Performance" - -msgid "ForceAtlas2.threads" -msgstr "Threads" - -msgid "ForceAtlas2.scalingRatio.name" -msgstr "Scaling" - -msgid "ForceAtlas2.scalingRatio.desc" -msgstr "How much repulsion you want. More makes a more sparse graph." - -msgid "ForceAtlas2.gravity.name" -msgstr "Gravity" - -msgid "ForceAtlas2.gravity.desc" -msgstr "Attracts nodes to the center. Prevents islands from drifting away." - -msgid "ForceAtlas2.strongGravityMode.name" -msgstr "Stronger Gravity" - -msgid "ForceAtlas2.strongGravityMode.desc" -msgstr "A stronger gravity law" - -msgid "ForceAtlas2.distributedAttraction.name" -msgstr "Dissuade Hubs" - -msgid "ForceAtlas2.distributedAttraction.desc" -msgstr "" -"Distributes attraction along outbound edges. Hubs attract less and thus are " -"pushed to the borders." - -msgid "ForceAtlas2.linLogMode.name" -msgstr "LinLog mode" - -msgid "ForceAtlas2.linLogMode.desc" -msgstr "" -"Switch ForceAtlas' model from lin-lin to lin-log (tribute to Andreas Noack). " -"Makes clusters more tight." - -msgid "ForceAtlas2.adjustSizes.name" -msgstr "Prevent Overlap" - -msgid "ForceAtlas2.adjustSizes.desc" -msgstr "" -"Use only when spatialized. Should not be used with \"Approximate Repulsion\"" - -msgid "ForceAtlas2.jitterTolerance.name" -msgstr "Tolerance (speed)" - -msgid "ForceAtlas2.jitterTolerance.desc" -msgstr "" -"How much swinging you allow. Above 1 discouraged. Lower gives less speed and " -"more precision." - -msgid "ForceAtlas2.barnesHutOptimization.name" -msgstr "Approximate Repulsion" - -msgid "ForceAtlas2.barnesHutOptimization.desc" -msgstr "" -"Barnes Hut optimization: n complexity to n.ln(n) ; allows larger graphs." - -msgid "ForceAtlas2.barnesHutTheta.name" -msgstr "Approximation" - -msgid "ForceAtlas2.barnesHutTheta.desc" -msgstr "Theta of the Barnes Hut optimization." - -msgid "ForceAtlas2.edgeWeightInfluence.name" -msgstr "Edge Weight Influence" - -msgid "ForceAtlas2.edgeWeightInfluence.desc" -msgstr "" -"How much influence you give to the edges weight. 0 is \"no influence\" and 1 " -"is \"normal\"." - -msgid "ForceAtlas2.threads.name" -msgstr "Threads number" - -msgid "ForceAtlas2.threads.desc" -msgstr "More threads means more speed if your cores can handle it." diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/pt_BR.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/pt_BR.po deleted file mode 100644 index 5769997f2e..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/pt_BR.po +++ /dev/null @@ -1,104 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -# CΓ©lio Faria Jr. , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 12:08+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "ForceAtlas2.name" -msgstr "ForceAtlas 2" - -msgid "ForceAtlas2.description" -msgstr "DisposiΓ§Γ£o por qualidade: um modelo de atraΓ§Γ£o linear e repulsΓ£o linear com poucas aproximaΓ§Γ΅es (BarnesHut). Velocidade calculada automaticamente." - -msgid "ForceAtlas2.tuning" -msgstr "AfinaΓ§Γ£o" - -msgid "ForceAtlas2.behavior" -msgstr "Alternativas de comportamento" - -msgid "ForceAtlas2.performance" -msgstr "Desempenho" - -msgid "ForceAtlas2.threads" -msgstr "Threads" - -msgid "ForceAtlas2.scalingRatio.name" -msgstr "Dimensionamento" - -msgid "ForceAtlas2.scalingRatio.desc" -msgstr "Quanta repulsΓ£o vocΓͺ deseja. Valores maiores resultam em grafos mais dispersos." - -msgid "ForceAtlas2.gravity.name" -msgstr "Gravidade" - -msgid "ForceAtlas2.gravity.desc" -msgstr "Atrai os nΓ³s para o centro. Previne que as ilhas se afastem." - -msgid "ForceAtlas2.strongGravityMode.name" -msgstr "Gravidade mais forte" - -msgid "ForceAtlas2.strongGravityMode.desc" -msgstr "Uma lei de gravidade mais forte" - -msgid "ForceAtlas2.distributedAttraction.name" -msgstr "Dissuadir hubs" - -msgid "ForceAtlas2.distributedAttraction.desc" -msgstr "Distribui a atraΓ§Γ£o ao longo das arestas de saΓ­da. Hubs atraem menos e sΓ£o, portanto, empurrados para as bordas." - -msgid "ForceAtlas2.linLogMode.name" -msgstr "Modo LinLog" - -msgid "ForceAtlas2.linLogMode.desc" -msgstr "Alternar o modelo ForceAtlas entre lin-lin e lin-log (homenagem a Andreas Noack). Torna os clusters mais apertado." - -msgid "ForceAtlas2.adjustSizes.name" -msgstr "Evitar sobreposiΓ§Γ£o" - -msgid "ForceAtlas2.adjustSizes.desc" -msgstr "Usar apenas quando jΓ‘ estΓ‘ distribuΓ­do. NΓ£o deve ser usado juntamente com a opΓ§Γ£o \"Aproximar repulsΓ£o\"" - -msgid "ForceAtlas2.jitterTolerance.name" -msgstr "TolerΓ’ncia (velocidade)" - -msgid "ForceAtlas2.jitterTolerance.desc" -msgstr "Quanto balanΓ§o serΓ‘ permitido. Valores acima de 1 sΓ£o desaconselhados. Valores menores resultam em menos velocidade e mais precisΓ£o." - -msgid "ForceAtlas2.barnesHutOptimization.name" -msgstr "Aproximar repulsΓ£o" - -msgid "ForceAtlas2.barnesHutOptimization.desc" -msgstr "OtimizaΓ§Γ£o de Barnes Hut: complexidade entre n e n.ln(n) ; permite grafos maiores." - -msgid "ForceAtlas2.barnesHutTheta.name" -msgstr "AproximaΓ§Γ£o" - -msgid "ForceAtlas2.barnesHutTheta.desc" -msgstr "Valor Theta da otimizaΓ§Γ£o de Barnes Hut." - -msgid "ForceAtlas2.edgeWeightInfluence.name" -msgstr "InfluΓͺncia do peso das arestas" - -msgid "ForceAtlas2.edgeWeightInfluence.desc" -msgstr "Quanto o peso das arestas deve influenciar a disposiΓ§Γ£o. 0 significa \"nenhuma influΓͺncia\" e 1 Γ© \"influΓͺncia normal\"." - -msgid "ForceAtlas2.threads.name" -msgstr "NΓΊmero de threads" - -msgid "ForceAtlas2.threads.desc" -msgstr "Mais threads obtΓ©m mais velocidade, se os nΓΊcleos do seu processador puderem suportar." diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/ru.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/ru.po deleted file mode 100644 index f541bb1c69..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/ru.po +++ /dev/null @@ -1,103 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 15:36+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "ForceAtlas2.name" -msgstr "ForceAtlas 2" - -msgid "ForceAtlas2.description" -msgstr "МодСль ΡƒΠΊΠ»Π°Π΄ΠΊΠΈ с Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌ притяТСниСм ΠΈ Π»ΠΈΠ½Π΅ΠΉΠ½Ρ‹ΠΌ ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ аппроксимации (BarnesHut). ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ скорости вычисляСтся автоматичСски." - -msgid "ForceAtlas2.tuning" -msgstr "Настройки ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠ²" - -msgid "ForceAtlas2.behavior" -msgstr "ΠžΠΏΡ†ΠΈΠΈ повСдСния" - -msgid "ForceAtlas2.performance" -msgstr "Настройки качСства" - -msgid "ForceAtlas2.threads" -msgstr "ΠŸΠΎΡ‚ΠΎΠΊΠΈ" - -msgid "ForceAtlas2.scalingRatio.name" -msgstr "Π Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒ" - -msgid "ForceAtlas2.scalingRatio.desc" -msgstr "Π‘ΠΈΠ»Π° отталкивания. Π‘ΠΎΠ»ΡŒΡˆΠ΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ соотвСтствуСт Π±ΠΎΠ»Π΅Π΅ Ρ€Π°Π·Ρ€Π΅ΠΆΠ΅Π½Π½ΠΎΠΉ ΡƒΠΊΠ»Π°Π΄ΠΊΠ΅." - -msgid "ForceAtlas2.gravity.name" -msgstr "Гравитация" - -msgid "ForceAtlas2.gravity.desc" -msgstr "Π‘ΠΈΠ»Π° ΠΏΡ€ΠΈΡ‚ΡΠ³ΠΈΠ²Π°ΡŽΡ‰Π°Ρ ΡƒΠ·Π»Ρ‹ ΠΊ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ. ΠŸΡ€Π΅ΠΏΡΡ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ \"Ρ€Π°Π·Π»Π΅Ρ‚Π°Π½ΠΈΡŽ\" ΠΈΠ·ΠΎΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… кусков" - -msgid "ForceAtlas2.strongGravityMode.name" -msgstr "УсилСниС Π³Ρ€Π°Π²ΠΈΡ‚Π°Ρ†ΠΈΠΈ" - -msgid "ForceAtlas2.strongGravityMode.desc" -msgstr "Π£ΡΠΈΠ»ΠΈΡ‚ΡŒ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ притяТСния" - -msgid "ForceAtlas2.distributedAttraction.name" -msgstr "ОслаблСниС Ρ…Π°Π±ΠΎΠ²" - -msgid "ForceAtlas2.distributedAttraction.desc" -msgstr "РаспрСдСляСт силу притяТСния ΠΏΠΎ исходящим Ρ€Ρ‘Π±Ρ€Π°ΠΌ. Π₯Π°Π±Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ слабСС ΡΡ‚ΡΠ³ΠΈΠ²Π°Ρ‚ΡŒ ΡƒΠ·Π»Ρ‹ Π²ΠΎΠΊΡ€ΡƒΠ³ сСбя." - -msgid "ForceAtlas2.linLogMode.name" -msgstr "LinLog Ρ€Π΅ΠΆΠΈΠΌ" - -msgid "ForceAtlas2.linLogMode.desc" -msgstr "ΠŸΠ΅Ρ€Π΅ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ модСль ForceAtlas с lin-lin Π½Π° lin-log (авторство Andreas Noack). ΠšΠ»Π°ΡΡ‚Π΅Ρ€Π° Π±ΡƒΠ΄ΡƒΡ‚ Π±ΠΎΠ»Π΅Π΅ ΠΏΠ»ΠΎΡ‚Π½Ρ‹ΠΌΠΈ." - -msgid "ForceAtlas2.adjustSizes.name" -msgstr "Π—Π°ΠΏΡ€Π΅Ρ‚ пСрСкрытия" - -msgid "ForceAtlas2.adjustSizes.desc" -msgstr "Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ послС ΡƒΠΊΠ»Π°Π΄ΠΊΠΈ. НСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вмСстС с \"ΠΏΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½Π½Ρ‹ΠΌ ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π½ΠΈΠ΅ΠΌ\"" - -msgid "ForceAtlas2.jitterTolerance.name" -msgstr "Π£ΡΡ‚ΠΎΠΉΡ‡ΠΈΠ²ΠΎΡΡ‚ΡŒ" - -msgid "ForceAtlas2.jitterTolerance.desc" -msgstr "ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ допустимыС отклонСния. ЗначСния ΠΎΡ‚ 0 Π΄ΠΎ 1. УмСньшСниС значСния ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ пониТСнию скорости Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΈ ΠΏΠΎΠ²Ρ‹ΡˆΠ΅Π½ΠΈΡŽ точности." - -msgid "ForceAtlas2.barnesHutOptimization.name" -msgstr "ΠŸΡ€ΠΈΠ±Π»ΠΈΠΆΠ΅Π½Π½ΠΎΠ΅ ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π½ΠΈΠ΅" - -msgid "ForceAtlas2.barnesHutOptimization.desc" -msgstr "ИспользованиС ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ Barnes Hut; позволяСт Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с Π³Ρ€Π°Ρ„Π°ΠΌΠΈ большСго объСма." - -msgid "ForceAtlas2.barnesHutTheta.name" -msgstr "Theta" - -msgid "ForceAtlas2.barnesHutTheta.desc" -msgstr "ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ theta аппроксимации Barnes Hut" - -msgid "ForceAtlas2.edgeWeightInfluence.name" -msgstr "ВлияниС вСсов Ρ€Π΅Π±Ρ‘Ρ€" - -msgid "ForceAtlas2.edgeWeightInfluence.desc" -msgstr "Π‘Ρ‚Π΅ΠΏΠ΅Π½ΡŒ влияния вСсов Ρ€Ρ‘Π±Π΅Ρ€. 0 -- Π½Π΅ учитываСтся, 1 -- ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ учитываСтся." - -msgid "ForceAtlas2.threads.name" -msgstr "Число ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ²" - -msgid "ForceAtlas2.threads.desc" -msgstr "Π‘ΠΎΠ»ΡŒΡˆΠ΅Π΅ число ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Π΄Π°Ρ‘Ρ‚ Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρ‹, Ссли ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠ°Π½ΠΎ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎ." diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/zh_CN.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/zh_CN.po deleted file mode 100644 index 014a66103d..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/forceAtlas2/zh_CN.po +++ /dev/null @@ -1,103 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 04:14+0000\n" -"Last-Translator: Xi-Nian Zuo \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "ForceAtlas2.name" -msgstr "ForceAtlas 2" - -msgid "ForceAtlas2.description" -msgstr "θ΄¨ι‡εΈƒε±€οΌšηΊΏζ€§εΈεΌ•ζ•°θΏ‘δΌΌηΊΏζ€§ζŽ’ζ–₯ζ¨‘εž‹οΌˆBarnesHutοΌ‰γ€‚ι€ŸεΊ¦θ‡ͺ动θ‘η—。" - -msgid "ForceAtlas2.tuning" -msgstr "θ°ƒιŸ³" - -msgid "ForceAtlas2.behavior" -msgstr "θ‘ŒδΈΊζ›Ώδ»£" - -msgid "ForceAtlas2.performance" -msgstr "性能" - -msgid "ForceAtlas2.threads" -msgstr "主钘" - -msgid "ForceAtlas2.scalingRatio.name" -msgstr "ηΌ©ζ”Ύ" - -msgid "ForceAtlas2.scalingRatio.desc" -msgstr "δ½ ζƒ³ε€šε°‘ζ–₯εŠ›γ€‚ζ›΄ε€šηš„ζ›΄η¨€η–ε›Ύγ€‚" - -msgid "ForceAtlas2.gravity.name" -msgstr "ι‡εŠ›" - -msgid "ForceAtlas2.gravity.desc" -msgstr "εΈεΌ•εˆ°δΈ­εΏƒθŠ‚η‚Ήγ€‚ι˜²ζ­’ε²›ε±ΏζΈθ‘ŒζΈθΏœγ€‚" - -msgid "ForceAtlas2.strongGravityMode.name" -msgstr "ζ›΄εΌΊηš„ι‡εŠ›" - -msgid "ForceAtlas2.strongGravityMode.desc" -msgstr "δΈ€δΈͺεΌΊζœ‰εŠ›ηš„δΈ‡ζœ‰εΌ•εŠ›εšεΎ‹" - -msgid "ForceAtlas2.distributedAttraction.name" -msgstr "劝阻Hubs" - -msgid "ForceAtlas2.distributedAttraction.desc" -msgstr "ζ²ΏθΎ“ε‡Ίηš„θΎΉεˆ†εΈƒεΈεΌ•εŠ›γ€‚HubεΈεΌ•θΎƒε°‘οΌŒε› ζ­€θ’«ζŽ¨εˆ°θΎΉη•Œγ€‚" - -msgid "ForceAtlas2.linLogMode.name" -msgstr "LinLog樑式" - -msgid "ForceAtlas2.linLogMode.desc" -msgstr "εˆ‡ζ’ForceAtlasζ¨‘εž‹ηš„ηΊΏζ€§-ηΊΏζ€§εζ ‡η³»εˆ°ηΊΏζ€§-对数坐标系(Andreas Noackθ΄‘ηŒ) 使囒块更紧凑." - -msgid "ForceAtlas2.adjustSizes.name" -msgstr "ι˜²ζ­’ι‡ε " - -msgid "ForceAtlas2.adjustSizes.desc" -msgstr "εͺζœ‰ε½“η©Ίι—΄εŒ–γ€‚δΈεΊ”θ―₯η”¨β€œθΏ‘δΌΌζ–₯εŠ›β€" - -msgid "ForceAtlas2.jitterTolerance.name" -msgstr "εΉε·οΌˆι€ŸεΊ¦οΌ‰" - -msgid "ForceAtlas2.jitterTolerance.desc" -msgstr "允θΈε€šε°‘ζ‘†εŠ¨γ€‚ι˜»ζ­’1δ»₯δΈŠηš„γ€‚ε°ηš„ζ‘†εŠ¨εˆ™η»™ε‡ΊθΎƒε°‘ηš„ι€ŸεΊ¦ε’Œζ›΄η²Ύη‘ηš„η²Ύε―†εΊ¦γ€‚" - -msgid "ForceAtlas2.barnesHutOptimization.name" -msgstr "近似​​ζ–₯εŠ›" - -msgid "ForceAtlas2.barnesHutOptimization.desc" -msgstr "Barnes HutδΌ˜εŒ–οΌšn ε€ζ‚εΊ¦εˆ°n.ln(nοΌ‰οΌŒε…θΈζ›΄ε€§ηš„ε›Ύε½’。" - -msgid "ForceAtlas2.barnesHutTheta.name" -msgstr "θΏ‘δΌΌ" - -msgid "ForceAtlas2.barnesHutTheta.desc" -msgstr "Barnes HutδΌ˜εŒ–ηš„θ₯Ώε‘”。" - -msgid "ForceAtlas2.edgeWeightInfluence.name" -msgstr "θΎΉηš„ζƒι‡ηš„ε½±ε“" - -msgid "ForceAtlas2.edgeWeightInfluence.desc" -msgstr "δ½ η»™ε€šε°‘ε½±ε“εˆ°θΎΉηš„ζƒι‡γ€‚ 0β€œζ²‘ζœ‰ε½±ε“β€οΌŒ1ζ˜―β€œζ­£εΈΈβ€γ€‚" - -msgid "ForceAtlas2.threads.name" -msgstr "线程数" - -msgid "ForceAtlas2.threads.desc" -msgstr "ε¦‚ζžœδ½ ηš„ε†…ζ Έε―δ»₯ε€„η†ζ›΄ε€šηš„ηΊΏη¨‹ζ„ε‘³η€ζ›΄εΏ«ηš„ι€ŸεΊ¦γ€‚" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fr.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fr.po deleted file mode 100644 index a11cd2ed8b..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fr.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:01+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ImplΓ©mentation des algorithmes de spatialisation standards" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplΓ©mentation des layouts standards" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_ar.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_ca.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_ca.properties new file mode 100644 index 0000000000..a354ce7826 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_ca.properties @@ -0,0 +1,8 @@ +name=Fruchterman Reingold +description=Fruchterman Reingold is a classical layout algorithm, since 1984. +fruchtermanReingold.area.name=ΐrea +fruchtermanReingold.area.desc=The graph size area, for example 1000 for 100 nodes. +fruchtermanReingold.gravity.name=Gravetat +fruchtermanReingold.gravity.desc=Aquesta forηa atrau tots els nodes cap al centre per evitar la dispersiσ de components desconnectats +fruchtermanReingold.speed.name=Velocitat +fruchtermanReingold.speed.desc=Valor > 0 per defecte 1; augmenta la velocitat de convergθncia a canvi de perdre precisiσ diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_cs.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_cs.properties index 10316e3988..d6f2f6e089 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_cs.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_cs.properties @@ -1,23 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-02 20\:32+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - name=Fruchterman Reingold - -description=Fruchterman Reingold je klasick\u00fd algoritmus rozlo\u017een\u00ed, vytvo\u0159en roku 1984. - +description=Fruchterman Reingold je klasickύ algoritmus rozlo\u017eenν, vytvo\u0159en roku 1984. fruchtermanReingold.area.name=Oblast - -fruchtermanReingold.area.desc=Oblast velikosti grafu nap\u0159\u00edklad 1000 pro 100 uzl\u016f. - +fruchtermanReingold.area.desc=Oblast velikosti grafu nap\u0159νklad 1000 pro 100 uzl\u016f. fruchtermanReingold.gravity.name=Gravitace - -fruchtermanReingold.gravity.desc=Tato s\u00edla nut\u00ed v\u0161echny uzle do st\u0159edu aby se p\u0159ede\u0161lo rozpt\u00fdlen\u00ed odpojen\u00fdch sou\u010d\u00e1st\u00ed. - +fruchtermanReingold.gravity.desc=Tato sνla nutν v\u0161echny uzle do st\u0159edu aby se p\u0159ede\u0161lo rozptύlenν odpojenύch sou\u010dαstν. fruchtermanReingold.speed.name=Rychlost - -fruchtermanReingold.speed.desc=Hodnota > 0 v\u00fdchoz\u00ed 1 ; zv\u00fd\u0161\u00ed rychlost sbli\u017eov\u00e1n\u00ed za cenu ztr\u00e1ty p\u0159esnosti. +fruchtermanReingold.speed.desc=Hodnota > 0 vύchozν 1 ; zvύ\u0161ν rychlost sbli\u017eovαnν za cenu ztrαty p\u0159esnosti. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_de.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_de.properties new file mode 100644 index 0000000000..fc99930b7a --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_de.properties @@ -0,0 +1,8 @@ +name=Fruchterman Reingold +description=Fruchterman Reingold (1984) ist ein klassischer Layout-Algorithmus +fruchtermanReingold.area.name=Flδche +fruchtermanReingold.area.desc=Die Grφίer der Graph-Flδche, zum Beispiel 1000 fόr 100 Knoten. +fruchtermanReingold.gravity.name=Anziehungskraft +fruchtermanReingold.gravity.desc=Diese Kraft zieht alle Knoten zum Zentrum um eine Auseinanderdriften unverbundener Komponenten zu vermeiden. +fruchtermanReingold.speed.name=Geschwindigkeit +fruchtermanReingold.speed.desc=Wert > 0, Default 1 ; Erhφhe Konvergenzgeschwindigkeit zu Lasten der Genauigkeit. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_es.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_es.properties index 6dd7ec2dda..8e79d8117c 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_es.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_es.properties @@ -1,23 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:01+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - name=Fruchterman Reingold - -description=Fruchterman Reingold es un algoritmo de distribuci\u00f3n cl\u00e1sico, desde 1984. - -fruchtermanReingold.area.name=\u00c1rea - -fruchtermanReingold.area.desc=El tama\u00f1o del \u00e1rea del grafo, por ejemplo 1000 para 100 nodos. - +description=Fruchterman Reingold es un algoritmo de distribuciσn clαsico, desde 1984. +fruchtermanReingold.area.name=Αrea +fruchtermanReingold.area.desc=El tamaρo del αrea del grafo, por ejemplo 1000 para 100 nodos. fruchtermanReingold.gravity.name=Gravedad - -fruchtermanReingold.gravity.desc=Esta fuerza atrae todos los nodos hacia el centro para evitar la dispersi\u00f3n de componentes no conectados - +fruchtermanReingold.gravity.desc=Esta fuerza atrae todos los nodos hacia el centro para evitar la dispersiσn de componentes no conectados fruchtermanReingold.speed.name=Velocidad - -fruchtermanReingold.speed.desc=Valor > 0, 1 por defecto ; Permite incrementar la velocidad de convergencia al precio de una p\u00e9rdida de precisi\u00f3n +fruchtermanReingold.speed.desc=Valor > 0, 1 por defecto ; Permite incrementar la velocidad de convergencia al precio de una pιrdida de precisiσn diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_fr.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_fr.properties index b543a4578a..1206ad2526 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_fr.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_fr.properties @@ -1,23 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:01+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - name=Fruchterman Reingold - description=Fruchterman Reingold est un algorithme de spatialisation classique depuis 1984. - fruchtermanReingold.area.name=Zone - -fruchtermanReingold.area.desc=La zone de la taille du graphe, par exemple 1000 pour 100 noeuds. - -fruchtermanReingold.gravity.name=Gravit\u00e9 - -fruchtermanReingold.gravity.desc=Cette force attire tous les noeuds au centre pour \u00e9viter la dispertion des composantes d\u00e9connect\u00e9es. - +fruchtermanReingold.area.desc=La zone de la taille du graphe, par exemple 1000 pour 100 n\u0153uds. +fruchtermanReingold.gravity.name=Gravitι +fruchtermanReingold.gravity.desc=Cette force attire tous les noeuds au centre pour ιviter la dispertion des composantes dιconnectιes. fruchtermanReingold.speed.name=Vitesse - -fruchtermanReingold.speed.desc=Valeur > 0 d\u00e9faut 1 ; augmente la vitesse de convergence au prix d'une perte de pr\u00e9cision. +fruchtermanReingold.speed.desc=Valeur > 0 dιfaut 1 ; augmente la vitesse de convergence au prix d'une perte de prιcision. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_he.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_he.properties new file mode 100644 index 0000000000..7edaee2cd8 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_he.properties @@ -0,0 +1,8 @@ +name=Fruchterman Reingold +description=Fruchterman Reingold is a classical layout algorithm, since 1984. +fruchtermanReingold.area.name=Area +fruchtermanReingold.area.desc=The graph size area, for example 1000 for 100 nodes. +fruchtermanReingold.gravity.name=Gravity +fruchtermanReingold.gravity.desc=This force attracts all nodes to the center to avoid dispersion of disconnected components. +fruchtermanReingold.speed.name=Speed +fruchtermanReingold.speed.desc=Value > 0 default 1 ; increase convergence speed at the price of a precision loss. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_hu.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_hu.properties new file mode 100644 index 0000000000..8b80e12d43 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_hu.properties @@ -0,0 +1,10 @@ + + +fruchtermanReingold.speed.name=Sebess\u00E9g +fruchtermanReingold.area.name=Ter\u00FClet +fruchtermanReingold.speed.desc=\u00C9rt\u00E9k > 0 alap\u00E9rtelmezett 1; n\u00F6velje a konvergencia sebess\u00E9g\u00E9t prec\u00EDzi\u00F3s vesztes\u00E9g \u00E1r\u00E1n. +fruchtermanReingold.gravity.name=Gravit\u00E1ci\u00F3 +fruchtermanReingold.gravity.desc=Ez az er\u0151 az \u00F6sszes csom\u00F3pontot a k\u00F6zpontba vonzza, hogy elker\u00FClje a sz\u00E9tkapcsolt alkatr\u00E9szek sz\u00E9tsz\u00F3r\u00F3d\u00E1s\u00E1t. +description=A Fruchterman Reingold egy klasszikus elrendez\u00E9si algoritmus, 1984 \u00F3ta. +name=Fruchterman Reingold +fruchtermanReingold.area.desc=A grafikon m\u00E9ret\u00E9nek ter\u00FClete, p\u00E9ld\u00E1ul 1000 * 100 csom\u00F3pont eset\u00E9n. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_it.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_it.properties new file mode 100644 index 0000000000..6bcfcea085 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_it.properties @@ -0,0 +1,8 @@ +name=Fruchterman Reingold +description=Fruchterman Reingold θ un algoritmo di spazializzazione classica, dal 1984. +fruchtermanReingold.area.name=Area +fruchtermanReingold.area.desc=Area di dimensione del grafo, ad esempio 1000 per 100 nodi. +fruchtermanReingold.gravity.name=Gravitΰ +fruchtermanReingold.gravity.desc=This force attracts all nodes to the center to avoid dispersion of disconnected components. +fruchtermanReingold.speed.name=Velocitΰ +fruchtermanReingold.speed.desc=Valore > 0 predefinito 1 ; aumenta la velocitΰ di convergenza al costo di una perdita di precisione. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_ja.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_ja.properties index f7032eb092..3e93c1fe5d 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_ja.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_ja.properties @@ -1,23 +1,11 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-01 01\:23+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -name=Fruchterman\u3000Reingold - -description=Fruchterman\u3000Reingold\u306f1984\u5e74\u4ee5\u6765\u53e4\u5178\u7684\u306a\u30ec\u30a4\u30a2\u30a6\u30c8\u30fb\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3067\u3059\u3002 - -fruchtermanReingold.area.name=\u30a8\u30ea\u30a2 - -fruchtermanReingold.area.desc=\u30b0\u30e9\u30d5\u30b5\u30a4\u30ba\u9762\u7a4d\u3001\u4f8b\u3048\u3070100\u30ce\u30fc\u30c9\u306e\u305f\u3081\u306b\u306f1000\u3002 - -fruchtermanReingold.gravity.name=\u91cd\u529b - -fruchtermanReingold.gravity.desc=\u3053\u306e\u529b\u306f\u3001\u5207\u65ad\u3055\u308c\u305f\u8981\u7d20\u306e\u5206\u6563\u3092\u907f\u3051\u308b\u305f\u3081\u306b\u3001\u4e2d\u592e\u306b\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u3092\u5f15\u304d\u3064\u3051\u307e\u3059\u3002 - -fruchtermanReingold.speed.name=\u901f\u5ea6 - -fruchtermanReingold.speed.desc=\u5024 > 0 \u30c7\u30d5\u30a9\u30eb\u30c81 ; \u7cbe\u5ea6\u3092\u72a0\u7272\u306b\u53ce\u675f\u901f\u5ea6\u3092\u4e0a\u3052\u307e\u3059\u3002 +name=Fruchterman\u3000Reingold +description=Fruchterman\u3000Reingold\u306f1984\u5e74\u4ee5\u6765\u53e4\u5178\u7684\u306a\u30ec\u30a4\u30a2\u30a6\u30c8\u30fb\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3067\u3059\u3002 + +fruchtermanReingold.area.name = \u30a8\u30ea\u30a2 +fruchtermanReingold.area.desc = \u30b0\u30e9\u30d5\u30b5\u30a4\u30ba\u9762\u7a4d\u3001\u4f8b\u3048\u3070100\u30ce\u30fc\u30c9\u306e\u305f\u3081\u306b\u306f1000\u3002 + +fruchtermanReingold.gravity.name = \u91cd\u529b +fruchtermanReingold.gravity.desc = \u3053\u306e\u529b\u306f\u3001\u5207\u65ad\u3055\u308c\u305f\u8981\u7d20\u306e\u5206\u6563\u3092\u907f\u3051\u308b\u305f\u3081\u306b\u3001\u4e2d\u592e\u306b\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u3092\u5f15\u304d\u3064\u3051\u307e\u3059\u3002 + +fruchtermanReingold.speed.name = \u901f\u5ea6 +fruchtermanReingold.speed.desc = \u5024 > 0 \u30c7\u30d5\u30a9\u30eb\u30c81 ; \u7cbe\u5ea6\u3092\u72a0\u7272\u306b\u53ce\u675f\u901f\u5ea6\u3092\u4e0a\u3052\u307e\u3059\u3002 diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_ko.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_ko.properties new file mode 100644 index 0000000000..b1fcc29a49 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_ko.properties @@ -0,0 +1,10 @@ + + +fruchtermanReingold.area.name=\uC601\uC5ED +fruchtermanReingold.gravity.name=\uC911\uB825 +fruchtermanReingold.gravity.desc=\uC774 \uD798\uC740 \uBAA8\uB4E0 \uB178\uB4DC\uB97C \uC911\uC2EC\uC73C\uB85C \uB04C\uC5B4 \uB2F9\uACA8 \uC5F0\uACB0\uB418\uC9C0 \uC54A\uC740 \uAD6C\uC131 \uC694\uC18C\uB4E4\uC758 \uBD84\uC0B0\uC744 \uBC29\uC9C0\uD55C\uB2E4. +fruchtermanReingold.speed.desc=0\uBCF4\uB2E4 \uD070 \uC774 \uAC12\uC740 \uAE30\uBCF8\uC801\uC73C\uB85C 1\uB85C \uC124\uC815\uB418\uBA70, \uC218\uB834 \uC18D\uB3C4\uB97C \uB192\uC77C \uC218 \uC788\uC9C0\uB9CC \uC815\uBC00\uB3C4\uC5D0 \uC190\uC2E4\uC774 \uC788\uC744 \uC218 \uC788\uB2E4. +name=Fruchterman-Reingold +fruchtermanReingold.area.desc=\uADF8\uB798\uD504 \uD06C\uAE30 \uC601\uC5ED, \uC608\uB97C \uB4E4\uC5B4 100 \uB178\uB4DC \uAE30\uC900\uC73C\uB85C 1000. +description=Fruchterman-Reingold\uB294 1984\uB144 \uC774\uB798\uB85C \uC804\uD1B5\uC801\uC778 \uB808\uC774\uC544\uC6C3 \uC54C\uACE0\uB9AC\uC998\uC774\uB2E4. +fruchtermanReingold.speed.name=\uC18D\uB3C4 diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_nl.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_nl.properties new file mode 100644 index 0000000000..7edaee2cd8 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_nl.properties @@ -0,0 +1,8 @@ +name=Fruchterman Reingold +description=Fruchterman Reingold is a classical layout algorithm, since 1984. +fruchtermanReingold.area.name=Area +fruchtermanReingold.area.desc=The graph size area, for example 1000 for 100 nodes. +fruchtermanReingold.gravity.name=Gravity +fruchtermanReingold.gravity.desc=This force attracts all nodes to the center to avoid dispersion of disconnected components. +fruchtermanReingold.speed.name=Speed +fruchtermanReingold.speed.desc=Value > 0 default 1 ; increase convergence speed at the price of a precision loss. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_pt_BR.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_pt_BR.properties index 58573565c9..7098eaafbb 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_pt_BR.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_pt_BR.properties @@ -1,23 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 15\:40+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - name=Fruchterman Reingold - -description=Fruchterman Reingold \u00e9 um algoritmo de disposi\u00e7\u00e3o cl\u00e1ssico, desde 1984. - -fruchtermanReingold.area.name=\u00c1rea - -fruchtermanReingold.area.desc=O tamanho da \u00e1rea do grafo, por exemplo 1000 para 100 n\u00f3s. - +description=Fruchterman Reingold ι um algoritmo de disposiηγo clαssico, desde 1984. +fruchtermanReingold.area.name=Αrea +fruchtermanReingold.area.desc=O tamanho da αrea do grafo, por exemplo 1000 para 100 nσs. fruchtermanReingold.gravity.name=Gravidade - -fruchtermanReingold.gravity.desc=Esta for\u00e7a atrai todos os n\u00f3s para o centro para evitar a dispers\u00e3o de componentes desconectados. - +fruchtermanReingold.gravity.desc=Esta forηa atrai todos os nσs para o centro para evitar a dispersγo de componentes desconectados. fruchtermanReingold.speed.name=Velocidade - -fruchtermanReingold.speed.desc=Valor > 0 (padr\u00e3o 1); aumenta a velocidade de converg\u00eancia \u00e0s custas de uma perda de precis\u00e3o. +fruchtermanReingold.speed.desc=Valor > 0 (padrγo 1); aumenta a velocidade de convergκncia ΰs custas de uma perda de precisγo. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_ro.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_ro.properties new file mode 100644 index 0000000000..65e7c21b60 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_ro.properties @@ -0,0 +1,10 @@ + + +name=Fruchterman Reingold +description=Fruchterman Reingold este un algoritm clasic de dispunere, din 1984. +fruchtermanReingold.area.name=Arie +fruchtermanReingold.area.desc=Aria grafului, de exemplu 1000 pentru 100 de noduri. +fruchtermanReingold.gravity.name=Gravita\u021Bie +fruchtermanReingold.gravity.desc=Aceast\u0103 for\u021B\u0103 atrage toate nodurile spre centru pentru a evita dispersia componentelor deconectate. +fruchtermanReingold.speed.name=Vitez\u0103 +fruchtermanReingold.speed.desc=Valoare > 0 implicit 1 ; permite cre\u0219terea vitezei de convergen\u021B\u0103, dar pierde din precizie. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_ru.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_ru.properties index 95d2f7c19d..33403f3873 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_ru.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_ru.properties @@ -1,23 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-13 20\:34+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - name=Fruchterman Reingold - description=Fruchterman Reingold -- \u043a\u043b\u0430\u0441\u0441\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0443\u043a\u043b\u0430\u0434\u043a\u0438, \u043e\u043f\u0443\u0431\u043b\u0438\u043a\u043e\u0432\u0430\u043d\u043d\u044b\u0439 \u0432 1984 \u0433\u043e\u0434\u0443. - fruchtermanReingold.area.name=\u041e\u0431\u043b\u0430\u0441\u0442\u044c - fruchtermanReingold.area.desc=\u0420\u0430\u0437\u043c\u0435\u0440 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 \u0443\u043a\u043b\u0430\u0434\u043a\u0438, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, 1000 \u0434\u043b\u044f 100 \u0443\u0437\u043b\u043e\u0432. - fruchtermanReingold.gravity.name=\u0413\u0440\u0430\u0432\u0438\u0442\u0430\u0446\u0438\u044f - -fruchtermanReingold.gravity.desc=\u0421\u0438\u043b\u0430, \u0441\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0449\u0430\u044f \u0432\u0441\u0435 \u0443\u0437\u043b\u044b \u043a \u0446\u0435\u043d\u0442\u0440\u0443. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c "\u0440\u0430\u0437\u043b\u0435\u0442\u0430\u043d\u0438\u044f" \u043d\u0435\u0441\u0432\u044f\u0437\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442. - +fruchtermanReingold.gravity.desc=\u0421\u0438\u043b\u0430, \u0441\u0442\u044f\u0433\u0438\u0432\u0430\u044e\u0449\u0430\u044f \u0432\u0441\u0435 \u0443\u0437\u043b\u044b \u043a \u0446\u0435\u043d\u0442\u0440\u0443. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c "\u0440\u0430\u0437\u043b\u0435\u0442\u0430\u043d\u0438\u044f" \u043d\u0435\u0441\u0432\u044f\u0437\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442. fruchtermanReingold.speed.name=\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c - fruchtermanReingold.speed.desc=\u041f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e 1); \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u0435 \u0432\u0435\u0434\u0435\u0442 \u043a \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044e \u0440\u0430\u0431\u043e\u0442\u044b \u0437\u0430 \u0441\u0447\u0451\u0442 \u043f\u043e\u0442\u0435\u0440\u0438 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_th.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_tr.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_tr.properties new file mode 100644 index 0000000000..2b9a2b1670 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_tr.properties @@ -0,0 +1,8 @@ +name=Fruchterman Reingold +description=Fruchterman Reingold is a classical layout algorithm, since 1984. +fruchtermanReingold.area.name=Area +fruchtermanReingold.area.desc=The graph size area, for example 1000 for 100 nodes. +fruchtermanReingold.gravity.name=Gravity +fruchtermanReingold.gravity.desc=This force attracts all nodes to the center to avoid dispersion of disconnected components. +fruchtermanReingold.speed.name=H\u0131z +fruchtermanReingold.speed.desc=Value > 0 default 1 ; increase convergence speed at the price of a precision loss. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_uk.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_uk.properties new file mode 100644 index 0000000000..b2163a439b --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_uk.properties @@ -0,0 +1,8 @@ +name=\u0424\u0440\u0443\u0445\u0442\u0435\u0440\u043C\u0430\u043D \u0420\u0435\u0439\u043D\u0433\u043E\u043B\u044C\u0434 +description=Fruchterman Reingold \u2014 \u0446\u0435 \u043A\u043B\u0430\u0441\u0438\u0447\u043D\u0438\u0439 \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C \u043A\u043E\u043C\u043F\u043E\u043D\u0443\u0432\u0430\u043D\u043D\u044F \u0437 1984 \u0440\u043E\u043A\u0443. +fruchtermanReingold.area.name=\u041F\u043B\u043E\u0449\u0430 +fruchtermanReingold.area.desc=\u041E\u0431\u043B\u0430\u0441\u0442\u044C \u0440\u043E\u0437\u043C\u0456\u0440\u0443 \u0433\u0440\u0430\u0444\u0456\u043A\u0430, \u043D\u0430\u043F\u0440\u0438\u043A\u043B\u0430\u0434 1000 \u0434\u043B\u044F 100 \u0432\u0443\u0437\u043B\u0456\u0432. +fruchtermanReingold.gravity.name=\u0421\u0438\u043B\u0430 \u0442\u044F\u0436\u0456\u043D\u043D\u044F +fruchtermanReingold.gravity.desc=\u0426\u044F \u0441\u0438\u043B\u0430 \u043F\u0440\u0438\u0442\u044F\u0433\u0443\u0454 \u0432\u0441\u0456 \u0432\u0443\u0437\u043B\u0438 \u0434\u043E \u0446\u0435\u043D\u0442\u0440\u0443, \u0449\u043E\u0431 \u0443\u043D\u0438\u043A\u043D\u0443\u0442\u0438 \u0440\u043E\u0437\u0441\u0456\u044E\u0432\u0430\u043D\u043D\u044F \u0432\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0445 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0456\u0432. +fruchtermanReingold.speed.name=\u0428\u0432\u0438\u0434\u043A\u0456\u0441\u0442\u044C +fruchtermanReingold.speed.desc=\u0417\u043D\u0430\u0447\u0435\u043D\u043D\u044F > 0 \u0437\u0430 \u0443\u043C\u043E\u0432\u0447\u0430\u043D\u043D\u044F\u043C 1; \u0437\u0431\u0456\u043B\u044C\u0448\u0438\u0442\u0438 \u0448\u0432\u0438\u0434\u043A\u0456\u0441\u0442\u044C \u043A\u043E\u043D\u0432\u0435\u0440\u0433\u0435\u043D\u0446\u0456\u0457 \u0446\u0456\u043D\u043E\u044E \u0432\u0442\u0440\u0430\u0442\u0438 \u0442\u043E\u0447\u043D\u043E\u0441\u0442\u0456. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_zh_CN.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_zh_CN.properties index 133e3d6408..22b813fa8a 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_zh_CN.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_zh_CN.properties @@ -1,22 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:10+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - name=Fruchterman Reingold - -description=Fruchterman Reingold\u662f\u4e00\u4e2a\u7ecf\u5178\u7684\u5e03\u5c40\u7b97\u6cd5\uff0c\u63d0\u51fa\u4e8e1984\u5e74\u3002 - +description=Fruchterman Reingold \u662F\u4E00\u4E2A\u7ECF\u5178\u7684\u5E03\u5C40\u7B97\u6CD5\uFF0C\u4E8E1984\u5E74\u63D0\u51FA\u3002 fruchtermanReingold.area.name=\u533a - fruchtermanReingold.area.desc=\u56fe\u5f62\u5927\u5c0f\u9762\u79ef\uff0c\u4f8b\u5982100\u4e2a\u8282\u70b9\u4e3a1000\u3002 - fruchtermanReingold.gravity.name=\u91cd\u529b - -fruchtermanReingold.gravity.desc=\u8fd9\u79cd\u529b\u91cf\u5438\u5f15\u4e86\u6240\u6709\u8282\u70b9\u7684\u4e2d\u5fc3\uff0c\u4ee5\u907f\u514d\u5931\u8fde\u63a5\u7684\u6210\u5206\u7684\u5206\u6563\u3002 - +fruchtermanReingold.gravity.desc=\u8fd9\u79cd\u529b\u91cf\u5438\u5f15\u4e86\u6240\u6709\u8282\u70b9\u7684\u4e2d\u5fc3\uff0c\u4ee5\u907f\u514d\u5931\u8fde\u63a5\u90e8\u4ef6\u7684\u5206\u6563\u3002 fruchtermanReingold.speed.name=\u901f\u5ea6 - fruchtermanReingold.speed.desc=\u503c>0\u9ed8\u8ba4\u4e3a1;\u6536\u655b\u901f\u5ea6\u63d0\u9ad8\u4e86,\u4ee5\u7cbe\u5ea6\u635f\u5931\u4e3a\u4ee3\u4ef7\u3002 diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_zh_TW.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_zh_TW.properties new file mode 100644 index 0000000000..7edaee2cd8 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/Bundle_zh_TW.properties @@ -0,0 +1,8 @@ +name=Fruchterman Reingold +description=Fruchterman Reingold is a classical layout algorithm, since 1984. +fruchtermanReingold.area.name=Area +fruchtermanReingold.area.desc=The graph size area, for example 1000 for 100 nodes. +fruchtermanReingold.gravity.name=Gravity +fruchtermanReingold.gravity.desc=This force attracts all nodes to the center to avoid dispersion of disconnected components. +fruchtermanReingold.speed.name=Speed +fruchtermanReingold.speed.desc=Value > 0 default 1 ; increase convergence speed at the price of a precision loss. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/cs.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/cs.po deleted file mode 100644 index e91d22e7b6..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/cs.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-02 20:32+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "name" -msgstr "Fruchterman Reingold" - -msgid "description" -msgstr "Fruchterman Reingold je klasickΓ½ algoritmus rozloΕΎenΓ­, vytvoΕ™en roku 1984." - -msgid "fruchtermanReingold.area.name" -msgstr "Oblast" - -msgid "fruchtermanReingold.area.desc" -msgstr "Oblast velikosti grafu napΕ™Γ­klad 1000 pro 100 uzlΕ―." - -msgid "fruchtermanReingold.gravity.name" -msgstr "Gravitace" - -msgid "fruchtermanReingold.gravity.desc" -msgstr "Tato sΓ­la nutΓ­ vΕ‘echny uzle do stΕ™edu aby se pΕ™edeΕ‘lo rozptΓ½lenΓ­ odpojenΓ½ch součÑstΓ­." - -msgid "fruchtermanReingold.speed.name" -msgstr "Rychlost" - -msgid "fruchtermanReingold.speed.desc" -msgstr "Hodnota > 0 vΓ½chozΓ­ 1 ; zvΓ½Ε‘Γ­ rychlost sbliΕΎovΓ‘nΓ­ za cenu ztrΓ‘ty pΕ™esnosti." diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/es.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/es.po deleted file mode 100644 index 555ae23a19..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/es.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:01+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "name" -msgstr "Fruchterman Reingold" - -msgid "description" -msgstr "Fruchterman Reingold es un algoritmo de distribuciΓ³n clΓ‘sico, desde 1984." - -msgid "fruchtermanReingold.area.name" -msgstr "Área" - -msgid "fruchtermanReingold.area.desc" -msgstr "El tamaΓ±o del Γ‘rea del grafo, por ejemplo 1000 para 100 nodos." - -msgid "fruchtermanReingold.gravity.name" -msgstr "Gravedad" - -msgid "fruchtermanReingold.gravity.desc" -msgstr "Esta fuerza atrae todos los nodos hacia el centro para evitar la dispersiΓ³n de componentes no conectados" - -msgid "fruchtermanReingold.speed.name" -msgstr "Velocidad" - -msgid "fruchtermanReingold.speed.desc" -msgstr "Valor > 0, 1 por defecto ; Permite incrementar la velocidad de convergencia al precio de una pΓ©rdida de precisiΓ³n" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/fr.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/fr.po deleted file mode 100644 index 4941cb549f..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/fr.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:01+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "name" -msgstr "Fruchterman Reingold" - -msgid "description" -msgstr "Fruchterman Reingold est un algorithme de spatialisation classique depuis 1984." - -msgid "fruchtermanReingold.area.name" -msgstr "Zone" - -msgid "fruchtermanReingold.area.desc" -msgstr "La zone de la taille du graphe, par exemple 1000 pour 100 noeuds." - -msgid "fruchtermanReingold.gravity.name" -msgstr "GravitΓ©" - -msgid "fruchtermanReingold.gravity.desc" -msgstr "Cette force attire tous les noeuds au centre pour Γ©viter la dispertion des composantes dΓ©connectΓ©es." - -msgid "fruchtermanReingold.speed.name" -msgstr "Vitesse" - -msgid "fruchtermanReingold.speed.desc" -msgstr "Valeur > 0 dΓ©faut 1 ; augmente la vitesse de convergence au prix d'une perte de prΓ©cision." diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/ja.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/ja.po deleted file mode 100644 index 11a953df8d..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/ja.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-01 01:23+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "name" -msgstr "Fruchtermanγ€€Reingold" - -msgid "description" -msgstr "Fruchtermanγ€€Reingoldは1984εΉ΄δ»₯ζ₯ε€ε…Έηš„γͺγƒ¬γ‚€γ‚’γ‚¦γƒˆγƒ»γ‚’γƒ«γ‚΄γƒͺズムです。" - -msgid "fruchtermanReingold.area.name" -msgstr "エγƒͺγ‚’" - -msgid "fruchtermanReingold.area.desc" -msgstr "γ‚°γƒ©γƒ•γ‚΅γ‚€γ‚Ίι’η©γ€δΎ‹γˆγ°100γƒŽγƒΌγƒ‰γγŸγ‚γ«γ―1000。" - -msgid "fruchtermanReingold.gravity.name" -msgstr "ι‡εŠ›" - -msgid "fruchtermanReingold.gravity.desc" -msgstr "こγεŠ›γ―γ€εˆ‡ζ–­γ•γ‚ŒγŸθ¦η΄ γεˆ†ζ•£γ‚’ιΏγ‘γ‚‹γŸγ‚γ«γ€δΈ­ε€γ«γ™γΉγ¦γγƒŽγƒΌγƒ‰γ‚’引き぀けます。" - -msgid "fruchtermanReingold.speed.name" -msgstr "ι€ŸεΊ¦" - -msgid "fruchtermanReingold.speed.desc" -msgstr "ε€€ > 0 γƒ‡γƒ•γ‚©γƒ«γƒˆ1 ; η²ΎεΊ¦γ‚’ηŠ η‰²γ«εŽζŸι€ŸεΊ¦γ‚’δΈŠγ’γΎγ™γ€‚" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/org-gephi-layout-plugin-fruchterman.pot b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/org-gephi-layout-plugin-fruchterman.pot deleted file mode 100644 index 64f89db263..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/org-gephi-layout-plugin-fruchterman.pot +++ /dev/null @@ -1,44 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "name" -msgstr "Fruchterman Reingold" - -msgid "description" -msgstr "Fruchterman Reingold is a classical layout algorithm, since 1984." - -msgid "fruchtermanReingold.area.name" -msgstr "Area" - -msgid "fruchtermanReingold.area.desc" -msgstr "The graph size area, for example 1000 for 100 nodes." - -msgid "fruchtermanReingold.gravity.name" -msgstr "Gravity" - -msgid "fruchtermanReingold.gravity.desc" -msgstr "" -"This force attracts all nodes to the center to avoid dispersion of " -"disconnected components." - -msgid "fruchtermanReingold.speed.name" -msgstr "Speed" - -msgid "fruchtermanReingold.speed.desc" -msgstr "" -"Value > 0 default 1 ; increase convergence speed at the price of a precision " -"loss." diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/pt_BR.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/pt_BR.po deleted file mode 100644 index e47750703f..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/pt_BR.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 15:40+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "name" -msgstr "Fruchterman Reingold" - -msgid "description" -msgstr "Fruchterman Reingold Γ© um algoritmo de disposiΓ§Γ£o clΓ‘ssico, desde 1984." - -msgid "fruchtermanReingold.area.name" -msgstr "Área" - -msgid "fruchtermanReingold.area.desc" -msgstr "O tamanho da Γ‘rea do grafo, por exemplo 1000 para 100 nΓ³s." - -msgid "fruchtermanReingold.gravity.name" -msgstr "Gravidade" - -msgid "fruchtermanReingold.gravity.desc" -msgstr "Esta forΓ§a atrai todos os nΓ³s para o centro para evitar a dispersΓ£o de componentes desconectados." - -msgid "fruchtermanReingold.speed.name" -msgstr "Velocidade" - -msgid "fruchtermanReingold.speed.desc" -msgstr "Valor > 0 (padrΓ£o 1); aumenta a velocidade de convergΓͺncia Γ s custas de uma perda de precisΓ£o." diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/ru.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/ru.po deleted file mode 100644 index caa9cf6a2d..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/ru.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-13 20:34+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "name" -msgstr "Fruchterman Reingold" - -msgid "description" -msgstr "Fruchterman Reingold -- классичСский Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ ΡƒΠΊΠ»Π°Π΄ΠΊΠΈ, ΠΎΠΏΡƒΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½Π½Ρ‹ΠΉ Π² 1984 Π³ΠΎΠ΄Ρƒ." - -msgid "fruchtermanReingold.area.name" -msgstr "ΠžΠ±Π»Π°ΡΡ‚ΡŒ" - -msgid "fruchtermanReingold.area.desc" -msgstr "Π Π°Π·ΠΌΠ΅Ρ€ области ΡƒΠΊΠ»Π°Π΄ΠΊΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, 1000 для 100 ΡƒΠ·Π»ΠΎΠ²." - -msgid "fruchtermanReingold.gravity.name" -msgstr "Гравитация" - -msgid "fruchtermanReingold.gravity.desc" -msgstr "Π‘ΠΈΠ»Π°, ΡΡ‚ΡΠ³ΠΈΠ²Π°ΡŽΡ‰Π°Ρ всС ΡƒΠ·Π»Ρ‹ ΠΊ Ρ†Π΅Π½Ρ‚Ρ€Ρƒ. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ \"разлСтания\" нСсвязных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚. " - -msgid "fruchtermanReingold.speed.name" -msgstr "Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ" - -msgid "fruchtermanReingold.speed.desc" -msgstr "ΠŸΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ (ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ 1); ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π²Π΅Π΄Π΅Ρ‚ ΠΊ ΡƒΡΠΊΠΎΡ€Π΅Π½ΠΈΡŽ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π·Π° счёт ΠΏΠΎΡ‚Π΅Ρ€ΠΈ качСства." diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/zh_CN.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/zh_CN.po deleted file mode 100644 index 1fb6c0ee71..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/fruchterman/zh_CN.po +++ /dev/null @@ -1,42 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:10+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "name" -msgstr "Fruchterman Reingold" - -msgid "description" -msgstr "Fruchterman Reingoldζ˜―δΈ€δΈͺη»ε…Έηš„εΈƒε±€η—ζ³•οΌŒζε‡ΊδΊŽ1984年。" - -msgid "fruchtermanReingold.area.name" -msgstr "区" - -msgid "fruchtermanReingold.area.desc" -msgstr "ε›Ύε½’ε€§ε°ι’η§―οΌŒδΎ‹ε¦‚100δΈͺθŠ‚η‚ΉδΈΊ1000。" - -msgid "fruchtermanReingold.gravity.name" -msgstr "ι‡εŠ›" - -msgid "fruchtermanReingold.gravity.desc" -msgstr "θΏ™η§εŠ›ι‡εΈεΌ•δΊ†ζ‰€ζœ‰θŠ‚η‚Ήηš„δΈ­εΏƒοΌŒδ»₯ιΏε…ε€±θΏžζŽ₯ηš„ζˆεˆ†ηš„εˆ†ζ•£γ€‚" - -msgid "fruchtermanReingold.speed.name" -msgstr "ι€ŸεΊ¦" - -msgid "fruchtermanReingold.speed.desc" -msgstr "ε€Ό>0默θ€δΈΊ1;ζ”Άζ•›ι€ŸεΊ¦ζι«˜δΊ†,δ»₯η²ΎεΊ¦ζŸε€±δΈΊδ»£δ»·γ€‚" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/ja.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/ja.po deleted file mode 100644 index 65c70b5a91..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-19 05:56+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ζ¨™ζΊ–γƒ¬γ‚€γ‚’γ‚¦γƒˆγεŸθ£…" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζ¨™ζΊ–γƒ¬γ‚€γ‚’γ‚¦γƒˆγεŸθ£…" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_ar.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_ca.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_ca.properties new file mode 100644 index 0000000000..7c27684f5e --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_ca.properties @@ -0,0 +1,6 @@ +name=Label Adjust +description=Label Adjust works on text size to repulse nodes and therefore makes every label readable. +LabelAdjust.speed.name=Velocitat +LabelAdjust.speed.desc=Factor de velocitat +LabelAdjust.adjustBySize.name=Inclou la mida del node +LabelAdjust.adjustBySize.desc=Inclou la mida del node a la repulsiσ diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_cs.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_cs.properties index 6f52d58caf..18ddac117b 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_cs.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_cs.properties @@ -1,19 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-02 20\:18+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -name=\u00daprava \u0161t\u00edtku - -description=\u00daprava \u0161t\u00edtku pracuje s velikost\u00ed textu pro odra\u017een\u00ed uzl\u016f \u010d\u00edm\u017e bude ka\u017ed\u00fd \u0161t\u00edtek \u010diteln\u00fd. - -LabelAdjust.speed.name=Rychlost - -LabelAdjust.speed.desc=Faktor rychlosti - -LabelAdjust.adjustBySize.name=Zahrnout velikost uzle - -LabelAdjust.adjustBySize.desc=Zahrnout velikost uzle v odra\u017een\u00ed +name=Ϊprava jmenovky +description=Ϊprava jmenovky pracuje s velikostν textu pro odra\u017eenν uzl\u016f \u010dνm\u017e bude ka\u017edύ \u0161tνtek \u010ditelnύ. + +LabelAdjust.speed.name=Rychlost +LabelAdjust.speed.desc=Faktor rychlosti + +LabelAdjust.adjustBySize.name = Zahrnout velikost uzle +LabelAdjust.adjustBySize.desc = Zahrnout velikost uzle v odra\u017eenν diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_de.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_de.properties new file mode 100644 index 0000000000..020598cc20 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_de.properties @@ -0,0 +1,8 @@ +name=Bezeicher-Justierung +description=Bezeichner-Justierung vergrφίert den Abstand zwischen Knoten, so dass jeder Bezeichner lesbar ist. + +LabelAdjust.speed.name=Geschwindigkeit +LabelAdjust.speed.desc=Geschwindigkeitsfaktor + +LabelAdjust.adjustBySize.name = Einbezug Knotengrφίe +LabelAdjust.adjustBySize.desc = Berόcksichtig Knotengrφίe in Abstoίung diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_es.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_es.properties index b510e646f5..a532f2f45d 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_es.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_es.properties @@ -1,19 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:01+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -name=Ajuste de etiquetas - -description=Ajuste de etiquetas tiene en cuenta el tama\u00f1o del texto de las etiquetas para repulsar los nodos de forma que todas las etiquetas sean legibles. - -LabelAdjust.speed.name=Velocidad - -LabelAdjust.speed.desc=Factor de velocidad - -LabelAdjust.adjustBySize.name=Incluir tama\u00f1o de nodo - -LabelAdjust.adjustBySize.desc=Incluir tama\u00f1o de nodo en la repulsi\u00f3n +name=Ajuste de etiquetas +description=Ajuste de etiquetas tiene en cuenta el tamaρo del texto de las etiquetas para repulsar los nodos de forma que todas las etiquetas sean legibles. + +LabelAdjust.speed.name=Velocidad +LabelAdjust.speed.desc=Factor de velocidad + +LabelAdjust.adjustBySize.name = Incluir tamaρo de nodo +LabelAdjust.adjustBySize.desc = Incluir tamaρo de nodo en la repulsiσn diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_fr.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_fr.properties index 6292b1e6b3..fae6f8d1c8 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_fr.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_fr.properties @@ -1,20 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 11\:20+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -name=Ajustement des labels - -description=L'ajustement des labels prend en compte la taille des textes pour repousser les noeuds et ainsi rendre chaque label lisible. - -LabelAdjust.speed.name=Vitesse - -LabelAdjust.speed.desc=Vitesse - -LabelAdjust.adjustBySize.name=Inclure la taille du noeud - -LabelAdjust.adjustBySize.desc=Inclure la taille du noeud dans la r\u00e9pulsion +name=Ajustement des labels +description=L'ajustement des labels prend en compte la taille des textes pour repousser les noeuds et ainsi rendre chaque label lisible. + +LabelAdjust.speed.name=Vitesse +LabelAdjust.speed.desc=Vitesse + +LabelAdjust.adjustBySize.name = Inclure la taille du noeud +LabelAdjust.adjustBySize.desc = Inclure la taille du noeud dans la rιpulsion diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_he.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_he.properties new file mode 100644 index 0000000000..b024c9abb2 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_he.properties @@ -0,0 +1,6 @@ +name=Label Adjust +description=Label Adjust works on text size to repulse nodes and therefore makes every label readable. +LabelAdjust.speed.name=Speed +LabelAdjust.speed.desc=Speed factor +LabelAdjust.adjustBySize.name=Include Node size +LabelAdjust.adjustBySize.desc=Include node size in repulsion diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_hu.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_hu.properties new file mode 100644 index 0000000000..8f1ae45c88 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_hu.properties @@ -0,0 +1,8 @@ + + +description=A Label Adjust a sz\u00F6veg m\u00E9ret\u00E9n dolgozik, hogy tasz\u00EDtsa a csom\u00F3pontokat, \u00E9s ez\u00E9rt minden c\u00EDmk\u00E9t olvashat\u00F3v\u00E1 tesz. +name=C\u00EDmke be\u00E1ll\u00EDt\u00E1sa +LabelAdjust.speed.desc=Sebess\u00E9g t\u00E9nyez\u0151 +LabelAdjust.adjustBySize.desc=Vegye figyelembe a csom\u00F3pont m\u00E9ret\u00E9t a tasz\u00EDt\u00E1sban +LabelAdjust.speed.name=Sebess\u00E9g +LabelAdjust.adjustBySize.name=Tartalmazza a csom\u00F3pont m\u00E9ret\u00E9t diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_it.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_it.properties new file mode 100644 index 0000000000..a280d1ab52 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_it.properties @@ -0,0 +1,6 @@ +name=Aggiustamento dell'etichetta +description=Label Adjust works on text size to repulse nodes and therefore makes every label readable. +LabelAdjust.speed.name=Speed +LabelAdjust.speed.desc=Speed factor +LabelAdjust.adjustBySize.name=Include Node size +LabelAdjust.adjustBySize.desc=Include node size in repulsion diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_ja.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_ja.properties index 80cbb1b53e..a895f734da 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_ja.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_ja.properties @@ -1,19 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-04 09\:46+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -name=\u30e9\u30d9\u30eb\u306e\u8abf\u6574 - -description=\u30e9\u30d9\u30eb\u8abf\u6574\u306f\u30ce\u30fc\u30c9\u3068\u9000\u3051\u308b\u305f\u3081\u306b\u30c6\u30ad\u30b9\u30c8\u30b5\u30a4\u30ba\u306b\u4f5c\u7528\u3059\u308b\u306e\u3067\u3001\u3059\u3079\u3066\u306e\u30e9\u30d9\u30eb\u304c\u8aad\u307f\u3084\u3059\u304f\u306a\u308a\u307e\u3059\u3002 - -LabelAdjust.speed.name=\u901f\u5ea6 - -LabelAdjust.speed.desc=\u901f\u5ea6\u4fc2\u6570 - -LabelAdjust.adjustBySize.name=\u30ce\u30fc\u30c9\u306e\u5927\u304d\u3055\u3092\u542b\u3081\u308b - -LabelAdjust.adjustBySize.desc=\u53cd\u767a\u306e\u5927\u304d\u3055\u3092\u542b\u3081\u308b +name=\u30e9\u30d9\u30eb\u306e\u8abf\u6574 +description=\u30e9\u30d9\u30eb\u8abf\u6574\u306f\u30ce\u30fc\u30c9\u3068\u9000\u3051\u308b\u305f\u3081\u306b\u30c6\u30ad\u30b9\u30c8\u30b5\u30a4\u30ba\u306b\u4f5c\u7528\u3059\u308b\u306e\u3067\u3001\u3059\u3079\u3066\u306e\u30e9\u30d9\u30eb\u304c\u8aad\u307f\u3084\u3059\u304f\u306a\u308a\u307e\u3059\u3002 + +LabelAdjust.speed.name=\u901f\u5ea6 +LabelAdjust.speed.desc=\u901f\u5ea6\u4fc2\u6570 + +LabelAdjust.adjustBySize.name = \u30ce\u30fc\u30c9\u306e\u5927\u304d\u3055\u3092\u542b\u3081\u308b +LabelAdjust.adjustBySize.desc = \u53cd\u767a\u306e\u5927\u304d\u3055\u3092\u542b\u3081\u308b diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_ko.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_ko.properties new file mode 100644 index 0000000000..33ceda2dc7 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_ko.properties @@ -0,0 +1,8 @@ + + +description=\uB77C\uBCA8 \uC870\uC808\uC740 \uB178\uB4DC\uB97C \uBC00\uC5B4\uB0B4\uC5B4 \uAC00\uB3C5\uC131 \uC788\uAC8C \uB9CC\uB4E4\uAE30 \uC704\uD574 \uD14D\uC2A4\uD2B8 \uD06C\uAE30\uC5D0 \uBC18\uC601\uB429\uB2C8\uB2E4. +name=\uB77C\uBCA8 \uC870\uC815 +LabelAdjust.speed.desc=\uC18D\uB3C4 \uC694\uC778 +LabelAdjust.adjustBySize.desc=\uBC18\uBC1C\uB825\uC5D0 \uB178\uB4DC \uD06C\uAE30 \uD3EC\uD568 +LabelAdjust.speed.name=\uC18D\uB3C4 +LabelAdjust.adjustBySize.name=\uB178\uB4DC \uD06C\uAE30 \uD3EC\uD568 diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_nl.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_nl.properties new file mode 100644 index 0000000000..b024c9abb2 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_nl.properties @@ -0,0 +1,6 @@ +name=Label Adjust +description=Label Adjust works on text size to repulse nodes and therefore makes every label readable. +LabelAdjust.speed.name=Speed +LabelAdjust.speed.desc=Speed factor +LabelAdjust.adjustBySize.name=Include Node size +LabelAdjust.adjustBySize.desc=Include node size in repulsion diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_pt_BR.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_pt_BR.properties index 554901c1ca..2eb813de7e 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_pt_BR.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_pt_BR.properties @@ -1,19 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 23\:07+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -name=Ajustar r\u00f3tulos - -description=O ajuste de r\u00f3tulos leva em conta o tamanho do texto dos r\u00f3tulos para repelir os n\u00f3s de maneira que todas os r\u00f3tulos sejam leg\u00edveis. - -LabelAdjust.speed.name=Velocidade - -LabelAdjust.speed.desc=Fator de velocidade - -LabelAdjust.adjustBySize.name=Incluir tamanho do n\u00f3 - -LabelAdjust.adjustBySize.desc=Incluir o tamanho do n\u00f3 na repuls\u00e3o +name=Ajustar rσtulos +description=O ajuste de rσtulos leva em conta o tamanho do texto dos rσtulos para repelir os nσs de maneira que todas os rσtulos sejam legνveis. + +LabelAdjust.speed.name=Velocidade +LabelAdjust.speed.desc=Fator de velocidade + +LabelAdjust.adjustBySize.name = Incluir tamanho do nσ +LabelAdjust.adjustBySize.desc = Incluir o tamanho do nσ na repulsγo diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_ro.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_ro.properties new file mode 100644 index 0000000000..a25417382d --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_ro.properties @@ -0,0 +1,8 @@ + + +name=Ajustare etichete +description=Ajustarea etichetelor ac\u021Bioneaz\u0103 pe baza dimensiunii textului pentru a respinge nodurile \u0219i, prin urmare, face ca fiecare etichet\u0103 s\u0103 fie lizibil\u0103. +LabelAdjust.speed.name=Vitez\u0103 +LabelAdjust.speed.desc=Factor de vitez\u0103 +LabelAdjust.adjustBySize.name=Include dimensiunea nodului +LabelAdjust.adjustBySize.desc=Include dimensiunea nodului \u00EEn repulsie diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_ru.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_ru.properties index edcdcce71a..8eb15b0865 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_ru.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_ru.properties @@ -1,19 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-12 19\:19+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -name=\u0423\u043a\u043b\u0430\u0434\u043a\u0430 \u043c\u0435\u0442\u043e\u043a - -description=\u0423\u043a\u043b\u0430\u0434\u043a\u0430 \u043c\u0435\u0442\u043e\u043a \u0440\u0430\u0437\u0434\u0432\u0438\u0433\u0430\u0435\u0442 \u0443\u0437\u043b\u044b \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043c\u0435\u0442\u043a\u0438 \u0443\u0437\u043b\u043e\u0432 \u043d\u0435 \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0438 \u0431\u044b\u043b\u0438 \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u043c\u0438. - -LabelAdjust.speed.name=\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c - -LabelAdjust.speed.desc=\u0424\u0430\u043a\u0442\u043e\u0440 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 - -LabelAdjust.adjustBySize.name=\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0443\u0437\u043b\u0430 - -LabelAdjust.adjustBySize.desc=\u0423\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0443\u0437\u043b\u0430 \u043f\u0440\u0438 \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043d\u0438\u0438 +name=\u0423\u043a\u043b\u0430\u0434\u043a\u0430 \u043c\u0435\u0442\u043e\u043a +description=\u0423\u043a\u043b\u0430\u0434\u043a\u0430 \u043c\u0435\u0442\u043e\u043a \u0440\u0430\u0437\u0434\u0432\u0438\u0433\u0430\u0435\u0442 \u0443\u0437\u043b\u044b \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043c\u0435\u0442\u043a\u0438 \u0443\u0437\u043b\u043e\u0432 \u043d\u0435 \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0438 \u0431\u044b\u043b\u0438 \u0447\u0438\u0442\u0430\u0435\u043c\u044b\u043c\u0438. + +LabelAdjust.speed.name=\u0421\u043a\u043e\u0440\u043e\u0441\u0442\u044c +LabelAdjust.speed.desc=\u0424\u0430\u043a\u0442\u043e\u0440 \u0441\u043a\u043e\u0440\u043e\u0441\u0442\u0438 + +LabelAdjust.adjustBySize.name = \u0423\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0443\u0437\u043b\u0430 +LabelAdjust.adjustBySize.desc = \u0423\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0443\u0437\u043b\u0430 \u043f\u0440\u0438 \u043e\u0442\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043d\u0438\u0438 diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_th.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_tr.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_tr.properties new file mode 100644 index 0000000000..f40b61ea71 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_tr.properties @@ -0,0 +1,6 @@ +name=Etiket Ayar\u0131 +description=Label Adjust works on text size to repulse nodes and therefore makes every label readable. +LabelAdjust.speed.name=H\u0131z +LabelAdjust.speed.desc=H\u0131z faktφrό +LabelAdjust.adjustBySize.name=Dό\u011fόm bόyόklό\u011fόnό dahil et +LabelAdjust.adjustBySize.desc=Include node size in repulsion diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_uk.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_uk.properties new file mode 100644 index 0000000000..086f8191c2 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_uk.properties @@ -0,0 +1,6 @@ +name=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u043C\u0456\u0442\u043A\u0438 +description=Label Adjust \u043F\u0440\u0430\u0446\u044E\u0454 \u0437 \u0440\u043E\u0437\u043C\u0456\u0440\u043E\u043C \u0442\u0435\u043A\u0441\u0442\u0443, \u0449\u043E\u0431 \u0432\u0456\u0434\u0448\u0442\u043E\u0432\u0445\u043D\u0443\u0442\u0438 \u0432\u0443\u0437\u043B\u0438, \u0456 \u0442\u043E\u043C\u0443 \u0440\u043E\u0431\u0438\u0442\u044C \u043A\u043E\u0436\u043D\u0443 \u043C\u0456\u0442\u043A\u0443 \u0447\u0438\u0442\u0430\u0431\u0435\u043B\u044C\u043D\u043E\u044E. +LabelAdjust.speed.name=\u0428\u0432\u0438\u0434\u043A\u0456\u0441\u0442\u044C +LabelAdjust.speed.desc=\u0424\u0430\u043A\u0442\u043E\u0440 \u0448\u0432\u0438\u0434\u043A\u043E\u0441\u0442\u0456 +LabelAdjust.adjustBySize.name=\u0412\u043A\u043B\u044E\u0447\u0456\u0442\u044C \u0440\u043E\u0437\u043C\u0456\u0440 \u0432\u0443\u0437\u043B\u0430 +LabelAdjust.adjustBySize.desc=\u0412\u043A\u043B\u044E\u0447\u0456\u0442\u044C \u0440\u043E\u0437\u043C\u0456\u0440 \u0432\u0443\u0437\u043B\u0430 \u0432 \u0432\u0456\u0434\u0448\u0442\u043E\u0432\u0445\u0443\u0432\u0430\u043D\u043D\u044F diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_zh_CN.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_zh_CN.properties index 8380a5b5ec..45447fea08 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_zh_CN.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_zh_CN.properties @@ -1,18 +1,6 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:10+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - name=\u6807\u7b7e\u8c03\u6574 - -description=\u6807\u7b7e\u8c03\u6574\u6587\u5b57\u5927\u5c0f\u6765\u63a8\u65a5\u8282\u70b9\uff0c\u56e0\u6b64\u4f7f\u5f97\u6bcf\u4e2a\u6807\u7b7e\u53ef\u8bfb\u3002 - +description=\u6807\u7B7E\u8C03\u6574\u901A\u8FC7\u4F18\u5316\u6587\u672C\u5927\u5C0F\u548C\u8282\u70B9\u95F4\u8DDD\u8FDB\u800C\u5B9E\u73B0\u53EF\u8BFB\u6027\u7684\u63D0\u5347\u3002 LabelAdjust.speed.name=\u901f\u5ea6 - LabelAdjust.speed.desc=\u901f\u5ea6\u56e0\u7d20 - LabelAdjust.adjustBySize.name=\u5305\u62ec\u8282\u70b9\u7684\u5927\u5c0f - LabelAdjust.adjustBySize.desc=\u5728\u6392\u65a5\u4e2d\u5305\u62ec\u8282\u70b9\u7684\u5927\u5c0f diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_zh_TW.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_zh_TW.properties new file mode 100644 index 0000000000..b024c9abb2 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/Bundle_zh_TW.properties @@ -0,0 +1,6 @@ +name=Label Adjust +description=Label Adjust works on text size to repulse nodes and therefore makes every label readable. +LabelAdjust.speed.name=Speed +LabelAdjust.speed.desc=Speed factor +LabelAdjust.adjustBySize.name=Include Node size +LabelAdjust.adjustBySize.desc=Include node size in repulsion diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/cs.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/cs.po deleted file mode 100644 index e0cad658c1..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/cs.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-02 20:18+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "name" -msgstr "Úprava Ε‘tΓ­tku" - -msgid "description" -msgstr "Úprava Ε‘tΓ­tku pracuje s velikostΓ­ textu pro odraΕΎenΓ­ uzlΕ― čímΕΎ bude kaΕΎdΓ½ Ε‘tΓ­tek čitelnΓ½." - -msgid "LabelAdjust.speed.name" -msgstr "Rychlost" - -msgid "LabelAdjust.speed.desc" -msgstr "Faktor rychlosti" - -msgid "LabelAdjust.adjustBySize.name" -msgstr "Zahrnout velikost uzle" - -msgid "LabelAdjust.adjustBySize.desc" -msgstr "Zahrnout velikost uzle v odraΕΎenΓ­" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/es.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/es.po deleted file mode 100644 index 9e25e57a82..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/es.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:01+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "name" -msgstr "Ajuste de etiquetas" - -msgid "description" -msgstr "Ajuste de etiquetas tiene en cuenta el tamaΓ±o del texto de las etiquetas para repulsar los nodos de forma que todas las etiquetas sean legibles." - -msgid "LabelAdjust.speed.name" -msgstr "Velocidad" - -msgid "LabelAdjust.speed.desc" -msgstr "Factor de velocidad" - -msgid "LabelAdjust.adjustBySize.name" -msgstr "Incluir tamaΓ±o de nodo" - -msgid "LabelAdjust.adjustBySize.desc" -msgstr "Incluir tamaΓ±o de nodo en la repulsiΓ³n" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/fr.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/fr.po deleted file mode 100644 index 791e44430c..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/fr.po +++ /dev/null @@ -1,38 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 11:20+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "name" -msgstr "Ajustement des labels" - -msgid "description" -msgstr "L'ajustement des labels prend en compte la taille des textes pour repousser les noeuds et ainsi rendre chaque label lisible." - -msgid "LabelAdjust.speed.name" -msgstr "Vitesse" - -msgid "LabelAdjust.speed.desc" -msgstr "Vitesse" - -msgid "LabelAdjust.adjustBySize.name" -msgstr "Inclure la taille du noeud" - -msgid "LabelAdjust.adjustBySize.desc" -msgstr "Inclure la taille du noeud dans la rΓ©pulsion" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/ja.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/ja.po deleted file mode 100644 index 1172262642..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/ja.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-04 09:46+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "name" -msgstr "ラベルγθͺΏζ•΄" - -msgid "description" -msgstr "ラベルθͺΏζ•΄γ―γƒŽγƒΌγƒ‰γ¨ι€€γ‘γ‚‹γŸγ‚γ«γƒ†γ‚­γ‚Ήγƒˆγ‚΅γ‚€γ‚Ίγ«δ½œη”¨γ™γ‚‹γγ§γ€γ™γΉγ¦γγƒ©γƒ™γƒ«γŒθͺ­γΏγ‚„すくγͺγ‚ŠγΎγ™γ€‚" - -msgid "LabelAdjust.speed.name" -msgstr "ι€ŸεΊ¦" - -msgid "LabelAdjust.speed.desc" -msgstr "ι€ŸεΊ¦δΏ‚ζ•°" - -msgid "LabelAdjust.adjustBySize.name" -msgstr "γƒŽγƒΌγƒ‰γε€§γγ•を含める" - -msgid "LabelAdjust.adjustBySize.desc" -msgstr "反発γε€§γγ•を含める" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/org-gephi-layout-plugin-labelAdjust.pot b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/org-gephi-layout-plugin-labelAdjust.pot deleted file mode 100644 index 4f95df2250..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/org-gephi-layout-plugin-labelAdjust.pot +++ /dev/null @@ -1,36 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "name" -msgstr "Label Adjust" - -msgid "description" -msgstr "" -"Label Adjust works on text size to repulse nodes and therefore makes every " -"label readable." - -msgid "LabelAdjust.speed.name" -msgstr "Speed" - -msgid "LabelAdjust.speed.desc" -msgstr "Speed factor" - -msgid "LabelAdjust.adjustBySize.name" -msgstr "Include Node size" - -msgid "LabelAdjust.adjustBySize.desc" -msgstr "Include node size in repulsion" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/pt_BR.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/pt_BR.po deleted file mode 100644 index 08256ed7ec..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/pt_BR.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 23:07+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "name" -msgstr "Ajustar rΓ³tulos" - -msgid "description" -msgstr "O ajuste de rΓ³tulos leva em conta o tamanho do texto dos rΓ³tulos para repelir os nΓ³s de maneira que todas os rΓ³tulos sejam legΓ­veis." - -msgid "LabelAdjust.speed.name" -msgstr "Velocidade" - -msgid "LabelAdjust.speed.desc" -msgstr "Fator de velocidade" - -msgid "LabelAdjust.adjustBySize.name" -msgstr "Incluir tamanho do nΓ³" - -msgid "LabelAdjust.adjustBySize.desc" -msgstr "Incluir o tamanho do nΓ³ na repulsΓ£o" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/ru.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/ru.po deleted file mode 100644 index 448337839b..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/ru.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-12 19:19+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "name" -msgstr "Π£ΠΊΠ»Π°Π΄ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠΊ" - -msgid "description" -msgstr "Π£ΠΊΠ»Π°Π΄ΠΊΠ° ΠΌΠ΅Ρ‚ΠΎΠΊ Ρ€Π°Π·Π΄Π²ΠΈΠ³Π°Π΅Ρ‚ ΡƒΠ·Π»Ρ‹ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΌΠ΅Ρ‚ΠΊΠΈ ΡƒΠ·Π»ΠΎΠ² Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΊΡ€Ρ‹Π²Π°Π»ΠΈΡΡŒ ΠΈ Π±Ρ‹Π»ΠΈ Ρ‡ΠΈΡ‚Π°Π΅ΠΌΡ‹ΠΌΠΈ." - -msgid "LabelAdjust.speed.name" -msgstr "Π‘ΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ" - -msgid "LabelAdjust.speed.desc" -msgstr "Π€Π°ΠΊΡ‚ΠΎΡ€ скорости" - -msgid "LabelAdjust.adjustBySize.name" -msgstr "Π£Ρ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΡƒΠ·Π»Π°" - -msgid "LabelAdjust.adjustBySize.desc" -msgstr "Π£Ρ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΡƒΠ·Π»Π° ΠΏΡ€ΠΈ ΠΎΡ‚Ρ‚Π°Π»ΠΊΠΈΠ²Π°Π½ΠΈΠΈ" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/zh_CN.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/zh_CN.po deleted file mode 100644 index c202673654..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/labelAdjust/zh_CN.po +++ /dev/null @@ -1,36 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:10+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "name" -msgstr "ζ ‡η­Ύθ°ƒζ•΄" - -msgid "description" -msgstr "标签调整文字倧小ζ₯推ζ–₯θŠ‚η‚ΉοΌŒε› ζ­€δ½ΏεΎ—ζ―δΈͺ标签可读。" - -msgid "LabelAdjust.speed.name" -msgstr "ι€ŸεΊ¦" - -msgid "LabelAdjust.speed.desc" -msgstr "ι€ŸεΊ¦ε› η΄ " - -msgid "LabelAdjust.adjustBySize.name" -msgstr "εŒ…ζ‹¬θŠ‚η‚Ήηš„ε€§ε°" - -msgid "LabelAdjust.adjustBySize.desc" -msgstr "εœ¨ζŽ’ζ–₯δΈ­εŒ…ζ‹¬θŠ‚η‚Ήηš„ε€§ε°" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/mirror/Bundle.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/mirror/Bundle.properties new file mode 100644 index 0000000000..d4c28cce43 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/mirror/Bundle.properties @@ -0,0 +1,8 @@ +mirror.name=Mirror +mirror.description=Mirror the graph on X Axis or Y Axis + +mirror.xaxis.name=X Axis +mirror.xaxis.desc=Mirror the graph on the X Axis based on the Center of the graph + +mirror.yaxis.name=Y Axis +mirror.yaxis.desc=Mirror the graph on the Y Axis based on the Center of the graph \ No newline at end of file diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/mirror/Bundle_ar.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/mirror/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/mirror/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/mirror/Bundle_fr.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/mirror/Bundle_fr.properties new file mode 100644 index 0000000000..1bf0f66ce7 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/mirror/Bundle_fr.properties @@ -0,0 +1,6 @@ +mirror.name=Mirroir +mirror.description=Inverser le graphe selon l\u2019axe X ou l\u2019axe Y +mirror.xaxis.name=Axe X +mirror.xaxis.desc=Inverser le graphe sur l\u2019axe X (centrι sur le graphe) +mirror.yaxis.name=Axe Y +mirror.yaxis.desc=Inverser le graphe sur l\u2019axe Y (centrι sur le graphe) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/mirror/Bundle_th.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/mirror/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/mirror/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle.properties new file mode 100755 index 0000000000..20072331ff --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle.properties @@ -0,0 +1,14 @@ +name=Noverlap +description=Just a repulsion force to prevent nodes overlap (not for the labels, though) + +Noverlap.speed.name=Speed +Noverlap.speed.desc=Higher values make nodes move faster each iteration. + +Noverlap.ratio.name=Ratio +Noverlap.ratio.desc=Multiplier applied to node sizes when computing collision boundaries. + +Noverlap.margin.name=Margin +Noverlap.margin.desc=Extra spacing added around each node beyond its size. + +Noverlap.seed.name=Random seed +Noverlap.seed.desc=Controls the random jitter applied when two nodes share the exact same position. \ No newline at end of file diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_ar.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_ca.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_ca.properties new file mode 100644 index 0000000000..f68323c90d --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_ca.properties @@ -0,0 +1,2 @@ +name=Noverlap +description=Just a repulsion force to prevent nodes overlap (not for the labels, though) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_cs.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_cs.properties new file mode 100644 index 0000000000..c57ab1ab28 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_cs.properties @@ -0,0 +1,2 @@ +name=Zabrαn\u011bnν p\u0159ekryvu +description=Odpudivα sνla pro zabrαn\u011bnν p\u0159ekryvu uzl\u016f (ale ne jejich jmenovek) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_de.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_de.properties new file mode 100644 index 0000000000..87f94a1e15 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_de.properties @@ -0,0 +1,2 @@ +name=Noverlap +description=Abstoίungskraft um zu verhindern, dass Knoten όberlappen (gilt jedoch nicht fόr Beschriftungen) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_es.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_es.properties new file mode 100644 index 0000000000..15d20908c1 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_es.properties @@ -0,0 +1,2 @@ +name=Noverlap +description=Fuerza de repulsiσn para prevenir que los nodos se superpongan (no para las etiquetas) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_fr.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_fr.properties new file mode 100644 index 0000000000..f55a4bbee4 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_fr.properties @@ -0,0 +1,3 @@ +name=Dιchevauchement +description=Force de rιpulsion pour ιviter le chevauchement des noeuds (les labels ne sont pas pris en compte) +Noverlap.speed.name=Vitesse diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_he.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_he.properties new file mode 100644 index 0000000000..f68323c90d --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_he.properties @@ -0,0 +1,2 @@ +name=Noverlap +description=Just a repulsion force to prevent nodes overlap (not for the labels, though) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_hu.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_hu.properties new file mode 100644 index 0000000000..ed930a5900 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_hu.properties @@ -0,0 +1,4 @@ + + +description=Csak egy tasz\u00EDt\u00F3 er\u0151 a csom\u00F3pontok \u00E1tfed\u00E9s\u00E9nek megakad\u00E1lyoz\u00E1s\u00E1ra (b\u00E1r nem a c\u00EDmk\u00E9k eset\u00E9ben) +name=\u00C1tfed\u00E9s diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_it.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_it.properties new file mode 100644 index 0000000000..4f165803aa --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_it.properties @@ -0,0 +1,7 @@ +name=Noverlap (evita sovrapposizioni) +description=Just a repulsion force to prevent nodes overlap (not for the labels, though) +Noverlap.speed.name=Velocitΰ +Noverlap.speed.desc=Valori alti faranno muovere i nodi piω velocemente ad ogni iterazione. +Noverlap.ratio.name=Proprozione +Noverlap.ratio.desc=Moltiplicatore applicato alla dimensione dei nodi durante il calcolo dele collisioni. +Noverlap.margin.name=Margine diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_ja.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_ja.properties new file mode 100644 index 0000000000..4abcdcdce3 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_ja.properties @@ -0,0 +1,2 @@ +# name=Noverlap +# description=Just a repulsion force to prevent nodes overlap (not for the labels, though) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_ko.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_ko.properties new file mode 100644 index 0000000000..e531db4355 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_ko.properties @@ -0,0 +1,4 @@ + + +name=\uACB9\uCE68 \uC5C6\uC74C +description=\uB178\uB4DC\uAC00 \uACB9\uCE58\uB294 \uAC83\uC744 \uBC29\uC9C0\uD558\uAE30 \uC704\uD55C \uBC18\uBC1C\uB825(\uB77C\uBCA8\uC758 \uACBD\uC6B0\uC5D0\uB294 \uC544\uB2D8) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_nl.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_nl.properties new file mode 100644 index 0000000000..f68323c90d --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_nl.properties @@ -0,0 +1,2 @@ +name=Noverlap +description=Just a repulsion force to prevent nodes overlap (not for the labels, though) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_pt_BR.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_pt_BR.properties new file mode 100644 index 0000000000..a40049ff17 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_pt_BR.properties @@ -0,0 +1,2 @@ +name=Nγo sobrepor +description=Apenas uma forηa repulsiva para evitar que os nσs se sobreponham (nγo para os rσtulos, embora) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_ro.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_ro.properties new file mode 100644 index 0000000000..eaa8d1af59 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_ro.properties @@ -0,0 +1,4 @@ + + +name=Evit\u0103 suprapunerea +description=Doar o for\u021B\u0103 de repulsie pentru a preveni suprapunerea nodurilor (nu \u0219i a etichetelor) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_ru.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_ru.properties new file mode 100644 index 0000000000..4abcdcdce3 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_ru.properties @@ -0,0 +1,2 @@ +# name=Noverlap +# description=Just a repulsion force to prevent nodes overlap (not for the labels, though) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_th.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_tr.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_tr.properties new file mode 100644 index 0000000000..f68323c90d --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_tr.properties @@ -0,0 +1,2 @@ +name=Noverlap +description=Just a repulsion force to prevent nodes overlap (not for the labels, though) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_uk.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_uk.properties new file mode 100644 index 0000000000..dbcb8c2868 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_uk.properties @@ -0,0 +1,2 @@ +name=\u041F\u0435\u0440\u0435\u043A\u0440\u0438\u0442\u0442\u044F +description=\u041F\u0440\u043E\u0441\u0442\u043E \u0441\u0438\u043B\u0430 \u0432\u0456\u0434\u0448\u0442\u043E\u0432\u0445\u0443\u0432\u0430\u043D\u043D\u044F, \u0449\u043E\u0431 \u0437\u0430\u043F\u043E\u0431\u0456\u0433\u0442\u0438 \u043F\u0435\u0440\u0435\u043A\u0440\u0438\u0442\u0442\u044E \u0432\u0443\u0437\u043B\u0456\u0432 (\u0430\u043B\u0435 \u043D\u0435 \u0434\u043B\u044F \u043C\u0456\u0442\u043E\u043A) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_zh_CN.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_zh_CN.properties new file mode 100644 index 0000000000..2e7f624692 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_zh_CN.properties @@ -0,0 +1,2 @@ +name=\u9632\u91CD\u53E0 +description=\u4EC5\u901A\u8FC7\u6392\u65A5\u529B\u4F5C\u7528\u4E8E\u8282\u70B9\u95F4\u8DDD\u4F18\u5316\uFF08\u4E0D\u4F5C\u7528\u4E8E\u6807\u7B7E\u4F18\u5316\uFF09\u3002 diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_zh_TW.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_zh_TW.properties new file mode 100644 index 0000000000..f68323c90d --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/noverlap/Bundle_zh_TW.properties @@ -0,0 +1,2 @@ +name=Noverlap +description=Just a repulsion force to prevent nodes overlap (not for the labels, though) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle.properties new file mode 100644 index 0000000000..24afa0d579 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle.properties @@ -0,0 +1,35 @@ +OpenOrd.name=OpenOrd +OpenOrd.description = Force-Directed layout algorithm for real-world large-scale undirected graphs. Can scale to over 1 million nodes, making it ideal for large graphs. However, small graphs (hundreds or less) do not always end up looking so good. This algorithm expects undirected weighted graphs and aims to better distinguish clusters. + +OpenOrd.properties.edgecut.name = Edge Cut +OpenOrd.properties.edgecut.description = 0 means no cutting and 1 maximum cutting. A higher cutting means a more clustered result. + +OpenOrd.properties.numthreads.name = Num Threads +OpenOrd.properties.numthreads.description = The number of threads to use to run the algorithm. Increase this number for multi-core computers. It's recommended to put the number of core minus 1 to keep a thread for display. + +OpenOrd.properties.numiterations.name = Num Iterations +OpenOrd.properties.numiterations.description = Increase this number only for very large graphs. More iterations, more time it takes and less dense the result will be. Minimum is 100 iterations, and default is 750. + +OpenOrd.properties.seed.name = Random seed +OpenOrd.properties.seed.description = The result of the algorithm depends on the seed, the number of iterations and the number of threads. + +OpenOrd.properties.realtime.name = Fixed time +OpenOrd.properties.realtime.description = When some nodes are fixed (Right-click rectangle selection > Settle), it configures the time the fixed nodes will not move. 0 means they will not be fixed and 1 they will remain fixed. + +OpenOrd.properties.stage.liquid.name = Liquid (%) +OpenOrd.properties.stage.liquid.description = Percentage of the time spent in the liquid stage + +OpenOrd.properties.stage.expansion.name = Expansion (%) +OpenOrd.properties.stage.expansion.description = Percentage of the time spent in the expansion stage + +OpenOrd.properties.stage.cooldown.name = Cooldown (%) +OpenOrd.properties.stage.cooldown.description = Percentage of the time spent in the cooldown stage + +OpenOrd.properties.stage.crunch.name = Crunch (%) +OpenOrd.properties.stage.crunch.description = Percentage of the time spent in the crunch stage + +OpenOrd.properties.stage.simmer.name = Simmer (%) +OpenOrd.properties.stage.simmer.description = Percentage of the time spent in the simmer stage + +OpenOrd.properties.layoutsize.name = Layout Size +OpenOrd.properties.layoutsize.description = The total span of the output coordinate space. The furthest node will be placed at Β± half this value. Default is 20000, giving a coordinate range of Β± 10000. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_ar.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_ca.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_ca.properties new file mode 100644 index 0000000000..c950102dff --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_ca.properties @@ -0,0 +1,22 @@ +OpenOrd.name=OpenOrd +OpenOrd.description=Force-Directed layout algorithm for real-world large-scale undirected graphs. Can scale to over 1 million nodes, making it ideal for large graphs. However, small graphs (hundreds or less) do not always end up looking so good. This algorithm expects undirected weighted graphs and aims to better distinguish clusters. +OpenOrd.properties.edgecut.name=Edge Cut +OpenOrd.properties.edgecut.description=0 means no cutting and 1 maximum cutting. A higher cutting means a more clustered result. +OpenOrd.properties.numthreads.name=Num Threads +OpenOrd.properties.numthreads.description=The number of threads to use to run the algorithm. Increase this number for multi-core computers. It's recommended to put the number of core minus 1 to keep a thread for display. +OpenOrd.properties.numiterations.name=Num Iterations +OpenOrd.properties.numiterations.description=Increase this number only for very large graphs. More iterations, more time it takes and less dense the result will be. Minimum is 100 iterations, and default is 750. +OpenOrd.properties.seed.name=Random seed +OpenOrd.properties.seed.description=The result of the algorithm depends on the seed, the number of iterations and the number of threads. +OpenOrd.properties.realtime.name=Fixed time +OpenOrd.properties.realtime.description=When some nodes are fixed (Right-click rectangle selection > Settle), it configures the time the fixed nodes will not move. 0 means they will not be fixed and 1 they will remain fixed. +OpenOrd.properties.stage.liquid.name=Liquid (%) +OpenOrd.properties.stage.liquid.description=Percentage of the time spent in the liquid stage +OpenOrd.properties.stage.expansion.name=Expansiσ (%) +OpenOrd.properties.stage.expansion.description=Percentage of the time spent in the expansion stage +OpenOrd.properties.stage.cooldown.name=Cooldown (%) +OpenOrd.properties.stage.cooldown.description=Percentage of the time spent in the cooldown stage +OpenOrd.properties.stage.crunch.name=Crunch (%) +OpenOrd.properties.stage.crunch.description=Percentage of the time spent in the crunch stage +OpenOrd.properties.stage.simmer.name=Simmer (%) +OpenOrd.properties.stage.simmer.description=Percentage of the time spent in the simmer stage diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_cs.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_cs.properties new file mode 100644 index 0000000000..6f1b074d0e --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_cs.properties @@ -0,0 +1,22 @@ +OpenOrd.name=OpenOrd +OpenOrd.description=Algoritmus s vynucenύm \u0159νzenύm rozlo\u017eenνm pro velkι ne\u0159νzenι grafy zabύvajνcν se skute\u010dnύm sv\u011btem. M\u016f\u017ee mνt a\u017e 1 milion uzl\u016f, co\u017e je pro velkι grafy ideαlnν. Na druhou stranu malι grafy (100 uzl\u016f a mιn\u011b) ne v\u017edy budou vypadat dob\u0159e. Tento algoritmus o\u010dekαvα ne\u0159νzenι vα\u017eenι grafy a mα za cνl lep\u0161ν rozpoznαnν cluster\u016f. +OpenOrd.properties.edgecut.name=O\u0159νznutν hrany +OpenOrd.properties.edgecut.description=0 znamenα bez o\u0159ezαvαnν a 1 mα maximαlnν o\u0159νznutν. Vy\u0161\u0161ν o\u0159νznutν znamenα vνce seskupenύ vύsledek. +OpenOrd.properties.numthreads.name=Po\u010det vlαken +OpenOrd.properties.numthreads.description=Po\u010det vύpo\u010detnνch vlαken pou\u017eitύch k provedenν algoritmu. Zvy\u0161te tento po\u010det u po\u010dνta\u010d\u016f s vνce jαdry. Doporu\u010duje se pou\u017eνt po\u010det jader mνnus 1, kterι bude pou\u017eito pro vykreslenν. +OpenOrd.properties.numiterations.name=Po\u010det opakovαnν +OpenOrd.properties.numiterations.description=Toto \u010dνslo zvy\u0161te pouze u velmi velkύch graf\u016f. \u010cνm vνce opakovαnν, tνm dιle vύpo\u010det trvα a tνm mιn\u011b bude graf hustύ. Minimum je 100 a vύchozν hodnota je 750. +OpenOrd.properties.seed.name=Nαhodnι \u010dνslo +OpenOrd.properties.seed.description=Vύsledek algoritmu zαvisν na nαhodnιm \u010dνsle, po\u010dtu opakovαnν a po\u010dtu vlαken. +OpenOrd.properties.realtime.name=Pevnύ \u010das +OpenOrd.properties.realtime.description=Pokud jsou n\u011bkterι uzly usazenι napevno (Klikn\u011bte pravύm tla\u010dνtkem my\u0161i na obdιlnνkovύ vύb\u011br > Usadit), je nastaven \u010das, kdy se tyto uzly nebudou hύbat. 0 znamenα, \u017ee nebudou usazeny a 1 \u017ee budou. +OpenOrd.properties.stage.liquid.name=Zkapaln\u011bnν (%) +OpenOrd.properties.stage.liquid.description=Procento \u010dasu strαvenιho ve fαzi zkapaln\u011bnν +OpenOrd.properties.stage.expansion.name=Roz\u0161ν\u0159enν (%) +OpenOrd.properties.stage.expansion.description=Procento \u010dasu strαvenιho ve fαzi roz\u0161ν\u0159enν +OpenOrd.properties.stage.cooldown.name=Vychladnutν (%) +OpenOrd.properties.stage.cooldown.description=Procento \u010dasu strαvenιho ve fαzi vychladnutν +OpenOrd.properties.stage.crunch.name=Rozmα\u010dknutν (%) +OpenOrd.properties.stage.crunch.description=Procento \u010dasu strαvenιho ve fαzi rozmα\u010dknutν +OpenOrd.properties.stage.simmer.name=Var (%) +OpenOrd.properties.stage.simmer.description=Procento \u010dasu strαvenιho ve fαzi varu diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_de.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_de.properties new file mode 100644 index 0000000000..6a16349d2f --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_de.properties @@ -0,0 +1,22 @@ +OpenOrd.name=OpenOrd +OpenOrd.description=Krδfte-basierter Layout-Algorithmus fόr groίe, ungerichtete Graphen. Skaliert fόr bis όber 1 Million Knoten. Allerdings werden kleine Graphen (hundert oder weniger Knoten) nicht immer gut gelayoutet. Dieser Algorithmus setzt ungerichtete, gewichtete Graphen voraus und zielt darauf ab, Cluster besser unterscheiden zu kφnnen. +OpenOrd.properties.edgecut.name=Schnitt +OpenOrd.properties.edgecut.description=0 bedeutet keinen Schnitt +OpenOrd.properties.numthreads.name=Anzahl Threads +OpenOrd.properties.numthreads.description=Anzahl Threads um Algorithmus auszufόhren. Erhφhen Sie die Zahl fόr Mehrkern-Prozessoren. Es wird empfohlen, die als Wert Anzahl Kerne - 1 zu wδhlen, um einen Thread fόr die Anzeige zu behalten. +OpenOrd.properties.numiterations.name=Anzahl der Iterationen +OpenOrd.properties.numiterations.description=Erhφhen Sie diese Zahl nur fόr sehr groίe Graphen. Je hφher die Anzahl Iterationen, um so lδnger die Dauer und um so weniger dicht das Resultat. Minimum sind 100 Iterationen, Standard sind 750. +OpenOrd.properties.seed.name=Zufalls-Startwert +OpenOrd.properties.seed.description=Das Ergebnis des Algorithmus hδngt ab vom Startwert, der Anzahl Iterationen und der Anzahl Threads. +OpenOrd.properties.realtime.name=Festgelegte Zeit +OpenOrd.properties.realtime.description=Wenn manche Knoten fixiert sind (Rechtsklick Rechteck-Selektion > Festlegen), konfiguriert dies die Dauer, wδhrend der die fixierten Knoten sich nicht bewegen. 0 bedeutet, dass sie nicht fixiert werden, 1, dass sie fixiert bleiben. +OpenOrd.properties.stage.liquid.name=Flόssig (%) +OpenOrd.properties.stage.liquid.description=Anteil der Zeit in Flόssigphase +OpenOrd.properties.stage.expansion.name=Expansion (%) +OpenOrd.properties.stage.expansion.description=Anteil der Zeit in Expansionsphase +OpenOrd.properties.stage.cooldown.name=Abkόhlen (%) +OpenOrd.properties.stage.cooldown.description=Anteil der Zeit in Abkόhlphase +OpenOrd.properties.stage.crunch.name=Crunch (%) +OpenOrd.properties.stage.crunch.description=Anteil der Zeit in Crunch-Phase +OpenOrd.properties.stage.simmer.name=Sieden (%) +OpenOrd.properties.stage.simmer.description=Anteil der Zeit in Siedephase diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_es.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_es.properties new file mode 100644 index 0000000000..484110ecbe --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_es.properties @@ -0,0 +1,22 @@ +OpenOrd.name=OpenOrd +OpenOrd.description=Algoritmo de distribuciσn dirigido por fuerzas para grafos no dirigidos de gran escala. Puede escalar hasta 1 millσn de nodos, haciιndolo ideal para grafos grandes. Sin embargo, los grafos pequeρos (cientos de nodos o menos) no siempre acaban con un buen aspecto. Este algoritmo estα diseρado para grafos no dirigidos y con pesos, y se centra en distinguir clusters. +OpenOrd.properties.edgecut.name=Corte de arista +OpenOrd.properties.edgecut.description=0 significa sin corte y 1 un corte mαximo. Un corte mαs alto significa un resultado mαs agrupado. +OpenOrd.properties.numthreads.name=Nϊmeros de hilos +OpenOrd.properties.numthreads.description=El nϊmero de hilos a utilizar para ejecutar el algoritmo. Aumente su nϊmero en el caso de computadoras con nϊcleos mϊltiples. Se recomienda asignar el nϊmero de nϊcleos menos 1 para mantener un hilo como muestra. +OpenOrd.properties.numiterations.name=Nϊmero de iteraciones +OpenOrd.properties.numiterations.description=Aumente este nϊmero sσlo en grafos muy grandes. Cuantas mαs iteraciones, mαs tiempo se necesita y menos denso serα el resultado. El mνnimo son 100 iteraciones, y el valor predeterminado es 750. +OpenOrd.properties.seed.name=Germen aleatorio +OpenOrd.properties.seed.description=El resultado del algoritmo depende del germen, el nϊmero de iteraciones y de hilos. +OpenOrd.properties.realtime.name=Tiempo fijo +OpenOrd.properties.realtime.description=Cuando algunos nodos estan fijados (clic derecho > Bloquear), configura el tiempo que los nodos fijados no se moverαn. 0 significa que no serαn fijos y 1 permanecerαn fijos. +OpenOrd.properties.stage.liquid.name=Lνquida (%) +OpenOrd.properties.stage.liquid.description=Porcentaje del tiempo empleado en la fase lνquida +OpenOrd.properties.stage.expansion.name=Expansiσn (%) +OpenOrd.properties.stage.expansion.description=Porcentaje del tiempo empleado en la fase de expansiσn +OpenOrd.properties.stage.cooldown.name=Recuperaciσn (%) +OpenOrd.properties.stage.cooldown.description=Porcentaje del tiempo empleado en la fase de recuperaciσn +OpenOrd.properties.stage.crunch.name=Crisis (%) +OpenOrd.properties.stage.crunch.description=Porcentaje del tiempo empleado en la fase de crisis +OpenOrd.properties.stage.simmer.name=Ebulliciσn (%) +OpenOrd.properties.stage.simmer.description=Porcentaje del tiempo empleado en la fase de ebulliciσn diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_fr.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_fr.properties new file mode 100644 index 0000000000..4e2d581a2f --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_fr.properties @@ -0,0 +1,54 @@ +OpenOrd.name=OpenOrd +# OpenOrd.description = Force-Directed layout algorithm for real-world large-scale undirected graphs. Can scale to over 1 million nodes, making it ideal for large graphs. However, small graphs (hundreds or less) do not always end up looking so good. This algorithm expects undirected weighted graphs and aims to better distinguish clusters. + +# OpenOrd.properties.edgecut.name = Edge Cut +# OpenOrd.properties.edgecut.description = 0 means no cutting and 1 maximum cutting. A higher cutting means a more clustered result. + +OpenOrd.properties.numthreads.name=Nombre d'instances +# OpenOrd.properties.numthreads.description = The number of threads to use to run the algorithm. Increase this number for multi-core computers. It's recommended to put the number of core minus 1 to keep a thread for display. + +OpenOrd.properties.numiterations.name=Nombre d'itιrations +# OpenOrd.properties.numiterations.description = Increase this number only for very large graphs. More iterations, more time it takes and less dense the result will be. Minimum is 100 iterations, and default is 750. + +# OpenOrd.properties.seed.name = Random seed +# OpenOrd.properties.seed.description = The result of the algorithm depends on the seed, the number of iterations and the number of threads. + +# OpenOrd.properties.realtime.name = Fixed time +# OpenOrd.properties.realtime.description = When some nodes are fixed (Right-click rectangle selection > Settle), it configures the time the fixed nodes will not move. 0 means they will not be fixed and 1 they will remain fixed. + +# OpenOrd.properties.stage.liquid.name = Liquid (%) +# OpenOrd.properties.stage.liquid.description = Percentage of the time spent in the liquid stage + +# OpenOrd.properties.stage.expansion.name = Expansion (%) +# OpenOrd.properties.stage.expansion.description = Percentage of the time spent in the expansion stage + +# OpenOrd.properties.stage.cooldown.name = Cooldown (%) +# OpenOrd.properties.stage.cooldown.description = Percentage of the time spent in the cooldown stage + +# OpenOrd.properties.stage.crunch.name = Crunch (%) +# OpenOrd.properties.stage.crunch.description = Percentage of the time spent in the crunch stage + +# OpenOrd.properties.stage.simmer.name = Simmer (%) +# OpenOrd.properties.stage.simmer.description = Percentage of the time spent in the simmer stage + + + +OpenOrd.properties.edgecut.description=A 0 il n'y aura pas de section et \u00E0 1 les sections seront maximales. Un taux de sections \u00E9lev\u00E9 entraine un r\u00E9sultat plus segment\u00E9. +OpenOrd.description=Algorithme de spatialisation bas\u00E9 sur les forces d'attraction et r\u00E9pulsion pour des graphes non dirig\u00E9s \u00E0 grande \u00E9chelle. Fonctionne avec plus de 1 million de n\u0153uds, le rendant id\u00E9al pour les grands graphes. Toutefois, les petits graphes (100 n\u0153uds ou moins) ne rendent pas toujours bien. Cet algorithme fonctionne sur les graphes pond\u00E9r\u00E9s non dirig\u00E9s et a pour but de mieux distinguer les clusters. +OpenOrd.properties.seed.name=Seed al\u00E9atoire +OpenOrd.properties.seed.description=Le r\u00E9sultat de l'algorithme d\u00E9pend de la seed, du nombre d'it\u00E9rations et du nombre de threads. +OpenOrd.properties.realtime.name=Temps d\u00E9fini +OpenOrd.properties.realtime.description=Quand certains n\u0153uds sont fig\u00E9s (Clic Droit sur une s\u00E9lection en rectangle > Settle), cela configure le temps o\u00F9 ces n\u0153uds fig\u00E9s ne bougeront pas. 0 signifie qu'ils ne seront pas fig\u00E9s et 1 qu'ils resteront fixes. +OpenOrd.properties.stage.liquid.name=Liquide (%) +OpenOrd.properties.stage.liquid.description=Pourcentage de temps pass\u00E9 dans la phase liquide +OpenOrd.properties.stage.expansion.description=Pourcentage de temps pass\u00E9 dans la phase d'expansion +OpenOrd.properties.stage.cooldown.name=Temps de refroidissement (%) +OpenOrd.properties.stage.cooldown.description=Pourcentage de temps pass\u00E9 dans la phase de refroidissement +OpenOrd.properties.stage.crunch.description=Pourcentage de temps pass\u00E9 dans la phase d'\u00E9crasement +OpenOrd.properties.stage.simmer.name=\u00C9mulsion (%) +OpenOrd.properties.numthreads.description=Le nombre de threads \u00E0 disposition de l'algorithme. Augmenter ce nombre avec les processeurs multi-c\u0153urs. Il est recommand\u00E9 de choisir le nombre de c\u0153urs de votre processeur moins 1, pour garder un thread disponible pour l'affichage. +OpenOrd.properties.numiterations.description=Augmenter ce nombre pour les tr\u00E8s grands graphes. Plus il y a d'it\u00E9rations, plus le temps d'ex\u00E9cution sera long et moins le r\u00E9sultat sera dense. Le minimum est de 100 it\u00E9rations, et la valeur par d\u00E9faut est 750. +OpenOrd.properties.stage.expansion.name=Expansion (%) +OpenOrd.properties.stage.crunch.name=\u00C9crasement (%) +OpenOrd.properties.stage.simmer.description=Pourcentage de temps pass\u00E9 dans la phase d'\u00E9mulsion +OpenOrd.properties.edgecut.name=Section de lien diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_he.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_he.properties new file mode 100644 index 0000000000..538a8bf0e8 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_he.properties @@ -0,0 +1,22 @@ +OpenOrd.name=OpenOrd +OpenOrd.description=Force-Directed layout algorithm for real-world large-scale undirected graphs. Can scale to over 1 million nodes, making it ideal for large graphs. However, small graphs (hundreds or less) do not always end up looking so good. This algorithm expects undirected weighted graphs and aims to better distinguish clusters. +OpenOrd.properties.edgecut.name=Edge Cut +OpenOrd.properties.edgecut.description=0 means no cutting and 1 maximum cutting. A higher cutting means a more clustered result. +OpenOrd.properties.numthreads.name=Num Threads +OpenOrd.properties.numthreads.description=The number of threads to use to run the algorithm. Increase this number for multi-core computers. It's recommended to put the number of core minus 1 to keep a thread for display. +OpenOrd.properties.numiterations.name=Num Iterations +OpenOrd.properties.numiterations.description=Increase this number only for very large graphs. More iterations, more time it takes and less dense the result will be. Minimum is 100 iterations, and default is 750. +OpenOrd.properties.seed.name=Random seed +OpenOrd.properties.seed.description=The result of the algorithm depends on the seed, the number of iterations and the number of threads. +OpenOrd.properties.realtime.name=Fixed time +OpenOrd.properties.realtime.description=When some nodes are fixed (Right-click rectangle selection > Settle), it configures the time the fixed nodes will not move. 0 means they will not be fixed and 1 they will remain fixed. +OpenOrd.properties.stage.liquid.name=Liquid (%) +OpenOrd.properties.stage.liquid.description=Percentage of the time spent in the liquid stage +OpenOrd.properties.stage.expansion.name=Expansion (%) +OpenOrd.properties.stage.expansion.description=Percentage of the time spent in the expansion stage +OpenOrd.properties.stage.cooldown.name=Cooldown (%) +OpenOrd.properties.stage.cooldown.description=Percentage of the time spent in the cooldown stage +OpenOrd.properties.stage.crunch.name=Crunch (%) +OpenOrd.properties.stage.crunch.description=Percentage of the time spent in the crunch stage +OpenOrd.properties.stage.simmer.name=Simmer (%) +OpenOrd.properties.stage.simmer.description=Percentage of the time spent in the simmer stage diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_hu.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_hu.properties new file mode 100644 index 0000000000..6fcf1014b2 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_hu.properties @@ -0,0 +1,22 @@ + + +OpenOrd.properties.numthreads.name=Sz\u00E1lak sz\u00E1ma +OpenOrd.properties.stage.cooldown.description=A lelassul\u00E1si szakaszban elt\u00F6lt\u00F6tt id\u0151 sz\u00E1zal\u00E9kos ar\u00E1nya +OpenOrd.properties.stage.expansion.description=A b\u0151v\u00EDt\u00E9si szakaszban elt\u00F6lt\u00F6tt id\u0151 sz\u00E1zal\u00E9kos ar\u00E1nya +OpenOrd.properties.seed.description=Az algoritmus eredm\u00E9nye f\u00FCgg a magt\u00F3l, az iter\u00E1ci\u00F3k sz\u00E1m\u00E1t\u00F3l \u00E9s a sz\u00E1lak sz\u00E1m\u00E1t\u00F3l. +OpenOrd.properties.numiterations.description=Csak nagyon nagy grafikonok eset\u00E9n n\u00F6velje ezt a sz\u00E1mot. T\u00F6bb iter\u00E1ci\u00F3, t\u00F6bb id\u0151be telik, \u00E9s kev\u00E9sb\u00E9 s\u0171r\u0171 lesz az eredm\u00E9ny. A minimum 100 iter\u00E1ci\u00F3, az alap\u00E9rtelmezett pedig 750. +OpenOrd.properties.numthreads.description=Az algoritmus futtat\u00E1s\u00E1hoz haszn\u00E1lt sz\u00E1lak sz\u00E1ma. N\u00F6velje ezt a sz\u00E1mot t\u00F6bbmagos sz\u00E1m\u00EDt\u00F3g\u00E9pek eset\u00E9n. Javasoljuk, hogy a mag sz\u00E1m\u00E1t m\u00EDnusz 1-gyel adja meg, hogy egy sz\u00E1l megmaradjon a megjelen\u00EDt\u00E9shez. +OpenOrd.properties.stage.simmer.description=A lassul\u00E1si fokozatban elt\u00F6lt\u00F6tt id\u0151 sz\u00E1zal\u00E9kos ar\u00E1nya +OpenOrd.properties.realtime.description=Ha egyes csom\u00F3pontok r\u00F6gz\u00EDtve vannak (jobb gombbal kattintson a t\u00E9glalap kijel\u00F6l\u00E9se > Le\u00E1ll\u00EDt\u00E1s), akkor konfigur\u00E1lja azt az id\u0151t, amikor a r\u00F6gz\u00EDtett csom\u00F3pontok nem mozdulnak el. A 0 azt jelenti, hogy nem lesznek r\u00F6gz\u00EDtve, az 1 pedig r\u00F6gz\u00EDtve marad. +OpenOrd.properties.numiterations.name=Iter\u00E1ci\u00F3k sz\u00E1ma +OpenOrd.properties.stage.liquid.description=A foly\u00E9kony \u00E1llapotban t\u00F6lt\u00F6tt id\u0151 sz\u00E1zal\u00E9kos ar\u00E1nya +OpenOrd.properties.realtime.name=\u00C1lland\u00F3 id\u0151pont +OpenOrd.properties.edgecut.description=A 0 azt jelenti, hogy nincs v\u00E1g\u00E1s, \u00E9s 1 maxim\u00E1lis v\u00E1g\u00E1s. A magasabb forg\u00E1csol\u00E1s csoportosabb eredm\u00E9nyt jelent. +OpenOrd.name=Rendel\u00E9s nyit\u00E1sa +OpenOrd.properties.stage.crunch.description=A crunch szakaszban elt\u00F6lt\u00F6tt id\u0151 sz\u00E1zal\u00E9kos ar\u00E1nya +OpenOrd.properties.edgecut.name=\u00C9l v\u00E1g\u00E1sa +OpenOrd.properties.stage.simmer.name=Lassul\u00E1s (%) +OpenOrd.properties.seed.name=V\u00E9letlenszer\u0171 mag +OpenOrd.properties.stage.expansion.name=B\u0151v\u00FCl\u00E9s (%) +OpenOrd.description=Force-Directed elrendez\u00E9si algoritmus val\u00F3s, nagym\u00E9ret\u0171 ir\u00E1ny\u00EDtatlan gr\u00E1fokhoz. T\u00F6bb mint 1 milli\u00F3 csom\u00F3pontra sk\u00E1l\u00E1zhat\u00F3, \u00EDgy ide\u00E1lis nagy grafikonokhoz. A kis grafikonok (t\u00F6bb sz\u00E1z vagy kevesebb) azonban nem mindig n\u00E9znek ki olyan j\u00F3l. Ez az algoritmus ir\u00E1ny\u00EDtatlan s\u00FAlyozott gr\u00E1fokat v\u00E1r, \u00E9s c\u00E9lja a klaszterek jobb megk\u00FCl\u00F6nb\u00F6ztet\u00E9se. +OpenOrd.properties.stage.cooldown.name=Lelassul (%) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_it.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_it.properties new file mode 100644 index 0000000000..538a8bf0e8 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_it.properties @@ -0,0 +1,22 @@ +OpenOrd.name=OpenOrd +OpenOrd.description=Force-Directed layout algorithm for real-world large-scale undirected graphs. Can scale to over 1 million nodes, making it ideal for large graphs. However, small graphs (hundreds or less) do not always end up looking so good. This algorithm expects undirected weighted graphs and aims to better distinguish clusters. +OpenOrd.properties.edgecut.name=Edge Cut +OpenOrd.properties.edgecut.description=0 means no cutting and 1 maximum cutting. A higher cutting means a more clustered result. +OpenOrd.properties.numthreads.name=Num Threads +OpenOrd.properties.numthreads.description=The number of threads to use to run the algorithm. Increase this number for multi-core computers. It's recommended to put the number of core minus 1 to keep a thread for display. +OpenOrd.properties.numiterations.name=Num Iterations +OpenOrd.properties.numiterations.description=Increase this number only for very large graphs. More iterations, more time it takes and less dense the result will be. Minimum is 100 iterations, and default is 750. +OpenOrd.properties.seed.name=Random seed +OpenOrd.properties.seed.description=The result of the algorithm depends on the seed, the number of iterations and the number of threads. +OpenOrd.properties.realtime.name=Fixed time +OpenOrd.properties.realtime.description=When some nodes are fixed (Right-click rectangle selection > Settle), it configures the time the fixed nodes will not move. 0 means they will not be fixed and 1 they will remain fixed. +OpenOrd.properties.stage.liquid.name=Liquid (%) +OpenOrd.properties.stage.liquid.description=Percentage of the time spent in the liquid stage +OpenOrd.properties.stage.expansion.name=Expansion (%) +OpenOrd.properties.stage.expansion.description=Percentage of the time spent in the expansion stage +OpenOrd.properties.stage.cooldown.name=Cooldown (%) +OpenOrd.properties.stage.cooldown.description=Percentage of the time spent in the cooldown stage +OpenOrd.properties.stage.crunch.name=Crunch (%) +OpenOrd.properties.stage.crunch.description=Percentage of the time spent in the crunch stage +OpenOrd.properties.stage.simmer.name=Simmer (%) +OpenOrd.properties.stage.simmer.description=Percentage of the time spent in the simmer stage diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_ja.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_ja.properties new file mode 100644 index 0000000000..c30d191542 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_ja.properties @@ -0,0 +1,32 @@ +# OpenOrd.name=OpenOrd +# OpenOrd.description = Force-Directed layout algorithm for real-world large-scale undirected graphs. Can scale to over 1 million nodes, making it ideal for large graphs. However, small graphs (hundreds or less) do not always end up looking so good. This algorithm expects undirected weighted graphs and aims to better distinguish clusters. + +# OpenOrd.properties.edgecut.name = Edge Cut +# OpenOrd.properties.edgecut.description = 0 means no cutting and 1 maximum cutting. A higher cutting means a more clustered result. + +# OpenOrd.properties.numthreads.name = Num Threads +# OpenOrd.properties.numthreads.description = The number of threads to use to run the algorithm. Increase this number for multi-core computers. It's recommended to put the number of core minus 1 to keep a thread for display. + +# OpenOrd.properties.numiterations.name = Num Iterations +# OpenOrd.properties.numiterations.description = Increase this number only for very large graphs. More iterations, more time it takes and less dense the result will be. Minimum is 100 iterations, and default is 750. + +# OpenOrd.properties.seed.name = Random seed +# OpenOrd.properties.seed.description = The result of the algorithm depends on the seed, the number of iterations and the number of threads. + +# OpenOrd.properties.realtime.name = Fixed time +# OpenOrd.properties.realtime.description = When some nodes are fixed (Right-click rectangle selection > Settle), it configures the time the fixed nodes will not move. 0 means they will not be fixed and 1 they will remain fixed. + +# OpenOrd.properties.stage.liquid.name = Liquid (%) +# OpenOrd.properties.stage.liquid.description = Percentage of the time spent in the liquid stage + +# OpenOrd.properties.stage.expansion.name = Expansion (%) +# OpenOrd.properties.stage.expansion.description = Percentage of the time spent in the expansion stage + +# OpenOrd.properties.stage.cooldown.name = Cooldown (%) +# OpenOrd.properties.stage.cooldown.description = Percentage of the time spent in the cooldown stage + +# OpenOrd.properties.stage.crunch.name = Crunch (%) +# OpenOrd.properties.stage.crunch.description = Percentage of the time spent in the crunch stage + +# OpenOrd.properties.stage.simmer.name = Simmer (%) +# OpenOrd.properties.stage.simmer.description = Percentage of the time spent in the simmer stage diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_ko.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_ko.properties new file mode 100644 index 0000000000..fb6ea0f005 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_ko.properties @@ -0,0 +1,24 @@ + + +OpenOrd.name=\uC624\uD508\uC624\uB4DC(OpenOrd) +OpenOrd.properties.edgecut.name=\uC5E3\uC9C0 \uC808\uB2E8 +OpenOrd.properties.numthreads.name=\uC4F0\uB808\uB4DC \uC218 +OpenOrd.properties.numthreads.description=\uC54C\uACE0\uB9AC\uC998\uC744 \uC2E4\uD589\uD558\uB294 \uB370 \uC0AC\uC6A9\uD560 \uC4F0\uB808\uB4DC \uC218\uC774\uB2E4. \uB2E4\uC911 \uCF54\uC5B4 \uCEF4\uD4E8\uD130\uC5D0\uC11C\uB294 \uC774 \uAC12\uC744 \uC99D\uAC00\uC2DC\uD0A4\uBA74 \uB41C\uB2E4. \uB514\uC2A4\uD50C\uB808\uC774\uC6A9 \uC4F0\uB808\uB4DC \uD655\uBCF4\uB97C \uC704\uD574 \uCF54\uC5B4 \uC218\uC5D0\uC11C 1\uC744 \uBE80 \uAC12\uC73C\uB85C \uB123\uAE30\uB97C \uCD94\uCC9C\uD55C\uB2E4. +OpenOrd.properties.numiterations.name=\uBC18\uBCF5 \uD68C\uC218 +OpenOrd.properties.numiterations.description=\uC774 \uC22B\uC790\uB294 \uB9E4\uC6B0 \uD070 \uADF8\uB798\uD504\uC5D0 \uB300\uD574\uC11C\uB9CC \uC99D\uAC00\uC2DC\uCF1C\uB77C. \uBC18\uBCF5 \uD69F\uC218\uAC00 \uB9CE\uC744\uC218\uB85D \uC2DC\uAC04\uC774 \uC624\uB798 \uAC78\uB9AC\uACE0 \uACB0\uACFC\uBB3C\uC740 \uB35C \uBC00\uC9D1\uB420 \uAC83\uC774\uB2E4. \uCD5C\uC18C 100\uBC88\uC758 \uBC18\uBCF5\uC774 \uD544\uC694\uD558\uBA70, \uAE30\uBCF8\uAC12\uC740 750\uBC88\uC774\uB2E4. +OpenOrd.properties.seed.name=\uB09C\uC218 \uCD08\uAE43\uAC12 +OpenOrd.properties.seed.description=\uC54C\uACE0\uB9AC\uC998\uC758 \uACB0\uACFC\uB294 \uB09C\uC218 \uCD08\uAE43\uAC12, \uBC18\uBCF5 \uD68C\uC218 \uADF8\uB9AC\uACE0 \uC4F0\uB808\uB4DC \uC218\uC5D0 \uB530\uB77C \uB2E4\uB974\uB2E4. +OpenOrd.properties.stage.liquid.name=\uC720\uB3D9\uC131 (%) +OpenOrd.properties.stage.liquid.description=\uC720\uB3D9\uC131 \uB2E8\uACC4\uC5D0\uC11C \uC18C\uC694\uB418\uB294 \uC2DC\uAC04\uC758 \uBC31\uBD84\uC728 +OpenOrd.properties.stage.crunch.name=\uCDA9\uB3CC (%) +OpenOrd.properties.stage.crunch.description=\uCDA9\uB3CC \uB2E8\uACC4\uC5D0\uC11C \uC18C\uC694\uB418\uB294 \uC2DC\uAC04\uC758 \uBC31\uBD84\uC728 +OpenOrd.properties.stage.simmer.name=\uB053\uB294 \uC815\uB3C4 (%) +OpenOrd.properties.stage.simmer.description=\uB053\uB294 \uB2E8\uACC4\uC5D0\uC11C \uC18C\uC694\uB418\uB294 \uC2DC\uAC04\uC758 \uBC31\uBD84\uC728 +OpenOrd.description=\uC2E4\uC138\uACC4 \uB300\uADDC\uBAA8 \uBB34\uBC29\uD5A5 \uADF8\uB798\uD504\uB97C \uC704\uD55C Force-Directed \uB808\uC774\uC544\uC6C3 \uC54C\uACE0\uB9AC\uC998\uC774\uB2E4. 100\uB9CC \uAC1C \uC774\uC0C1\uC758 \uB178\uB4DC\uC5D0 \uB300\uC751\uD560 \uC218 \uC788\uC5B4 \uB300\uD615 \uADF8\uB798\uD504\uC5D0 \uC774\uC0C1\uC801\uC774\uB2E4. \uADF8\uB7EC\uB098 \uC18C\uD615 \uADF8\uB798\uD504(\uC218\uBC31 \uAC1C \uC774\uD558)\uC758 \uACBD\uC6B0 \uC88B\uC740 \uACB0\uACFC\uB97C \uC5BB\uC9C0 \uBABB\uD560 \uC218\uB3C4 \uC788\uB2E4. \uC774 \uC54C\uACE0\uB9AC\uC998\uC740 \uBB34\uBC29\uD5A5 \uAC00\uC911 \uADF8\uB798\uD504\uB97C \uAE30\uB300\uD558\uBA70, \uD074\uB7EC\uC2A4\uD130\uB97C \uB354 \uC798 \uAD6C\uBD84\uD558\uAE30 \uC704\uD574 \uC124\uACC4\uB418\uC5C8\uB2E4. +OpenOrd.properties.edgecut.description=0\uC740 \uC808\uB2E8\uC774 \uC5C6\uC74C\uC744 \uC758\uBBF8\uD558\uACE0 1\uC740 \uCD5C\uB300\uD55C \uB9CE\uC740 \uC808\uB2E8\uC744 \uB73B\uD55C\uB2E4. \uB354 \uB192\uC740 \uC808\uB2E8 \uAC12\uC740 \uB354\uC6B1 \uAD70\uC9D1\uD654\uB41C \uACB0\uACFC\uB97C \uC758\uBBF8\uD55C\uB2E4. +OpenOrd.properties.realtime.name=\uACE0\uC815 \uC2DC\uAC04 +OpenOrd.properties.realtime.description=\uC77C\uBD80 \uB178\uB4DC\uAC00 \uACE0\uC815\uB418\uC5B4 \uC788\uC744 \uB54C (\uB9C8\uC6B0\uC2A4 \uC624\uB978\uCABD \uBC84\uD2BC\uC73C\uB85C \uC0AC\uAC01\uD615 \uC120\uD0DD > \uC815\uB82C), \uACE0\uC815\uB41C \uB178\uB4DC\uAC00 \uC6C0\uC9C1\uC774\uC9C0 \uC54A\uC744 \uC2DC\uAC04\uC744 \uC124\uC815\uD55C\uB2E4. 0\uC740 \uACE0\uC815\uB418\uC9C0 \uC54A\uC74C\uC744 \uC758\uBBF8\uD558\uBA70, 1\uC740 \uACE0\uC815\uB41C \uC0C1\uD0DC\uB97C \uC720\uC9C0\uD568\uC744 \uC758\uBBF8\uD55C\uB2E4. +OpenOrd.properties.stage.cooldown.description=\uC218\uB834 \uB2E8\uACC4\uC5D0\uC11C \uC18C\uC694\uB418\uB294 \uC2DC\uAC04\uC758 \uBC31\uBD84\uC728 +OpenOrd.properties.stage.expansion.name=\uD655\uC7A5 (%) +OpenOrd.properties.stage.expansion.description=\uD655\uC7A5 \uB2E8\uACC4\uC5D0\uC11C \uC18C\uC694\uB418\uB294 \uC2DC\uAC04\uC758 \uBC31\uBD84\uC728 +OpenOrd.properties.stage.cooldown.name=\uC218\uB834 \uC18D\uB3C4 (%) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_nl.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_nl.properties new file mode 100644 index 0000000000..538a8bf0e8 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_nl.properties @@ -0,0 +1,22 @@ +OpenOrd.name=OpenOrd +OpenOrd.description=Force-Directed layout algorithm for real-world large-scale undirected graphs. Can scale to over 1 million nodes, making it ideal for large graphs. However, small graphs (hundreds or less) do not always end up looking so good. This algorithm expects undirected weighted graphs and aims to better distinguish clusters. +OpenOrd.properties.edgecut.name=Edge Cut +OpenOrd.properties.edgecut.description=0 means no cutting and 1 maximum cutting. A higher cutting means a more clustered result. +OpenOrd.properties.numthreads.name=Num Threads +OpenOrd.properties.numthreads.description=The number of threads to use to run the algorithm. Increase this number for multi-core computers. It's recommended to put the number of core minus 1 to keep a thread for display. +OpenOrd.properties.numiterations.name=Num Iterations +OpenOrd.properties.numiterations.description=Increase this number only for very large graphs. More iterations, more time it takes and less dense the result will be. Minimum is 100 iterations, and default is 750. +OpenOrd.properties.seed.name=Random seed +OpenOrd.properties.seed.description=The result of the algorithm depends on the seed, the number of iterations and the number of threads. +OpenOrd.properties.realtime.name=Fixed time +OpenOrd.properties.realtime.description=When some nodes are fixed (Right-click rectangle selection > Settle), it configures the time the fixed nodes will not move. 0 means they will not be fixed and 1 they will remain fixed. +OpenOrd.properties.stage.liquid.name=Liquid (%) +OpenOrd.properties.stage.liquid.description=Percentage of the time spent in the liquid stage +OpenOrd.properties.stage.expansion.name=Expansion (%) +OpenOrd.properties.stage.expansion.description=Percentage of the time spent in the expansion stage +OpenOrd.properties.stage.cooldown.name=Cooldown (%) +OpenOrd.properties.stage.cooldown.description=Percentage of the time spent in the cooldown stage +OpenOrd.properties.stage.crunch.name=Crunch (%) +OpenOrd.properties.stage.crunch.description=Percentage of the time spent in the crunch stage +OpenOrd.properties.stage.simmer.name=Simmer (%) +OpenOrd.properties.stage.simmer.description=Percentage of the time spent in the simmer stage diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_pt_BR.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_pt_BR.properties new file mode 100644 index 0000000000..ac2fb6b5ad --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_pt_BR.properties @@ -0,0 +1,33 @@ +# OpenOrd.name=OpenOrd +# OpenOrd.description = Force-Directed layout algorithm for real-world large-scale undirected graphs. Can scale to over 1 million nodes, making it ideal for large graphs. However, small graphs (hundreds or less) do not always end up looking so good. This algorithm expects undirected weighted graphs and aims to better distinguish clusters. + +# OpenOrd.properties.edgecut.name = Edge Cut +# OpenOrd.properties.edgecut.description = 0 means no cutting and 1 maximum cutting. A higher cutting means a more clustered result. + +OpenOrd.properties.numthreads.name=Nϊmero de threads +OpenOrd.properties.numthreads.description=O nϊmero de threads utilizados para executar o algoritmo. Aumente este valor para computadores de mϊltiplos nϊcleos. Ι recomendado inserir um nϊmero de nϊcleos menos 1 para manter um monitor de threads. +OpenOrd.properties.numiterations.name=Nϊmero de iteraηυes +# OpenOrd.properties.numiterations.description = Increase this number only for very large graphs. More iterations, more time it takes and less dense the result will be. Minimum is 100 iterations, and default is 750. + +OpenOrd.properties.seed.name=Semente aleatσria +# OpenOrd.properties.seed.description = The result of the algorithm depends on the seed, the number of iterations and the number of threads. + +OpenOrd.properties.realtime.name=Tempo fixado +# OpenOrd.properties.realtime.description = When some nodes are fixed (Right-click rectangle selection > Settle), it configures the time the fixed nodes will not move. 0 means they will not be fixed and 1 they will remain fixed. + +OpenOrd.properties.stage.liquid.name=Lνquido (%) +OpenOrd.properties.stage.liquid.description=Percentual do tempo gasto no estαgio lνquido +OpenOrd.properties.stage.expansion.name=Expansγo (%) +OpenOrd.properties.stage.expansion.description=Percentual do tempo gasto no estαgio de expansγo + +# OpenOrd.properties.stage.cooldown.name = Cooldown (%) +# OpenOrd.properties.stage.cooldown.description = Percentage of the time spent in the cooldown stage + +# OpenOrd.properties.stage.crunch.name = Crunch (%) +# OpenOrd.properties.stage.crunch.description = Percentage of the time spent in the crunch stage + +# OpenOrd.properties.stage.simmer.name = Simmer (%) +# OpenOrd.properties.stage.simmer.description = Percentage of the time spent in the simmer stage + +OpenOrd.name=Ordem Aberta +OpenOrd.description=Algoritmo de layout Force-Directed para grafos n\u00E3o direcionados de grande escala do mundo real. Pode ser escalado para mais de 1 milh\u00E3o de n\u00F3s, tornando-o ideal para grafos grandes. No entanto, grafos pequenos (centenas ou menos) nem sempre t\u00EAm uma boa apar\u00EAncia. Este algoritmo espera grafos ponderados n\u00E3o direcionados e visa distinguir melhor os clusters. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_ro.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_ro.properties new file mode 100644 index 0000000000..37cc70cef4 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_ro.properties @@ -0,0 +1,24 @@ + + +OpenOrd.name=OpenOrd +OpenOrd.description=Algoritm de dispunere direc\u021Bionat de for\u021Be pentru grafuri neorientate la scar\u0103 larg\u0103 din lumea real\u0103. Poate procesa peste 1 milion de noduri, ceea ce \u00EEl face ideal pentru grafuri mari. Cu toate acestea, grafurile mici (de ordinul sutelor sau mai pu\u021Bin) nu arat\u0103 \u00EEntotdeauna bine. Acest algoritm a\u0219teapt\u0103 grafuri ponderate neorientate \u0219i \u00EE\u0219i propune s\u0103 disting\u0103 mai bine clusterele. +OpenOrd.properties.edgecut.name=T\u0103ierea muchiilor +OpenOrd.properties.edgecut.description=0 \u00EEnseamn\u0103 nicio t\u0103iere \u0219i 1 t\u0103iere maxim\u0103. O valoare mai mare produce un rezultat mai grupat. +OpenOrd.properties.numthreads.name=Num\u0103r fire de execu\u021Bie +OpenOrd.properties.numiterations.name=Num\u0103r de itera\u021Bii +OpenOrd.properties.numiterations.description=Cre\u0219te acest num\u0103r doar pentru grafuri foarte mari. Cu c\u00E2t sunt mai multe itera\u021Bii, cu at\u00E2t mai mult timp este necesar \u0219i rezultatul va fi mai pu\u021Bin dens. Valoarea minim\u0103 este de 100 de itera\u021Bii, iar valoarea implicit\u0103 este de 750. +OpenOrd.properties.seed.name="S\u0103m\u00E2n\u021Ba" aleatorie +OpenOrd.properties.seed.description=Rezultatul algoritmului depinde de "s\u0103m\u00E2n\u021B\u0103", de num\u0103rul de itera\u021Bii \u0219i de num\u0103rul de fire de executie. +OpenOrd.properties.realtime.name=Timp fixare +OpenOrd.properties.realtime.description=C\u00E2nd unele noduri sunt fixate (Selec\u021Bie cu click-dreapta > Fixare), seteaz\u0103 timpul \u00EEn care nodurile fixate nu se vor mi\u0219ca. 0 \u00EEnseamn\u0103 c\u0103 nu vor fi fixate, iar 1 c\u0103 vor r\u0103m\u00E2ne fixe. +OpenOrd.properties.stage.expansion.description=Procentul din timp petrecut \u00EEn etapa de expansiune +OpenOrd.properties.stage.cooldown.name=R\u0103cire (%) +OpenOrd.properties.stage.cooldown.description=Procentul din timp petrecut \u00EEn etapa de r\u0103cire +OpenOrd.properties.stage.crunch.name=Crunch (%) +OpenOrd.properties.stage.crunch.description=Procentul din timp petrecut \u00EEn etapa de "crunch" +OpenOrd.properties.stage.simmer.name=Simmer (%) +OpenOrd.properties.stage.simmer.description=Procentul din timp petrecut \u00EEn etapa de "simmer" +OpenOrd.properties.numthreads.description=Num\u0103rul de fire de execu\u021Bie utilizate pentru a rula algoritmul. Cre\u0219te acest num\u0103r pentru procesoarele cu mai multe nuclee. Se recomand\u0103 s\u0103 se pun\u0103 num\u0103rul de nuclee minus 1 pentru a p\u0103stra unul pentru afi\u0219are. +OpenOrd.properties.stage.liquid.name=Lichid (%) +OpenOrd.properties.stage.liquid.description=Procentul din timp petrecut \u00EEn stadiul lichid +OpenOrd.properties.stage.expansion.name=Expansiune (%) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_ru.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_ru.properties new file mode 100644 index 0000000000..075a0b2c25 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_ru.properties @@ -0,0 +1,34 @@ +# OpenOrd.name=OpenOrd +# OpenOrd.description = Force-Directed layout algorithm for real-world large-scale undirected graphs. Can scale to over 1 million nodes, making it ideal for large graphs. However, small graphs (hundreds or less) do not always end up looking so good. This algorithm expects undirected weighted graphs and aims to better distinguish clusters. + +# OpenOrd.properties.edgecut.name = Edge Cut +# OpenOrd.properties.edgecut.description = 0 means no cutting and 1 maximum cutting. A higher cutting means a more clustered result. + +# OpenOrd.properties.numthreads.name = Num Threads +# OpenOrd.properties.numthreads.description = The number of threads to use to run the algorithm. Increase this number for multi-core computers. It's recommended to put the number of core minus 1 to keep a thread for display. + +# OpenOrd.properties.numiterations.name = Num Iterations +# OpenOrd.properties.numiterations.description = Increase this number only for very large graphs. More iterations, more time it takes and less dense the result will be. Minimum is 100 iterations, and default is 750. + +# OpenOrd.properties.seed.name = Random seed +# OpenOrd.properties.seed.description = The result of the algorithm depends on the seed, the number of iterations and the number of threads. + +# OpenOrd.properties.realtime.name = Fixed time +# OpenOrd.properties.realtime.description = When some nodes are fixed (Right-click rectangle selection > Settle), it configures the time the fixed nodes will not move. 0 means they will not be fixed and 1 they will remain fixed. + +# OpenOrd.properties.stage.liquid.name = Liquid (%) +# OpenOrd.properties.stage.liquid.description = Percentage of the time spent in the liquid stage + +# OpenOrd.properties.stage.expansion.name = Expansion (%) +# OpenOrd.properties.stage.expansion.description = Percentage of the time spent in the expansion stage + +# OpenOrd.properties.stage.cooldown.name = Cooldown (%) +# OpenOrd.properties.stage.cooldown.description = Percentage of the time spent in the cooldown stage + +# OpenOrd.properties.stage.crunch.name = Crunch (%) +# OpenOrd.properties.stage.crunch.description = Percentage of the time spent in the crunch stage + +# OpenOrd.properties.stage.simmer.name = Simmer (%) +# OpenOrd.properties.stage.simmer.description = Percentage of the time spent in the simmer stage + +OpenOrd.name=OpenOrd diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_th.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_tr.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_tr.properties new file mode 100644 index 0000000000..538a8bf0e8 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_tr.properties @@ -0,0 +1,22 @@ +OpenOrd.name=OpenOrd +OpenOrd.description=Force-Directed layout algorithm for real-world large-scale undirected graphs. Can scale to over 1 million nodes, making it ideal for large graphs. However, small graphs (hundreds or less) do not always end up looking so good. This algorithm expects undirected weighted graphs and aims to better distinguish clusters. +OpenOrd.properties.edgecut.name=Edge Cut +OpenOrd.properties.edgecut.description=0 means no cutting and 1 maximum cutting. A higher cutting means a more clustered result. +OpenOrd.properties.numthreads.name=Num Threads +OpenOrd.properties.numthreads.description=The number of threads to use to run the algorithm. Increase this number for multi-core computers. It's recommended to put the number of core minus 1 to keep a thread for display. +OpenOrd.properties.numiterations.name=Num Iterations +OpenOrd.properties.numiterations.description=Increase this number only for very large graphs. More iterations, more time it takes and less dense the result will be. Minimum is 100 iterations, and default is 750. +OpenOrd.properties.seed.name=Random seed +OpenOrd.properties.seed.description=The result of the algorithm depends on the seed, the number of iterations and the number of threads. +OpenOrd.properties.realtime.name=Fixed time +OpenOrd.properties.realtime.description=When some nodes are fixed (Right-click rectangle selection > Settle), it configures the time the fixed nodes will not move. 0 means they will not be fixed and 1 they will remain fixed. +OpenOrd.properties.stage.liquid.name=Liquid (%) +OpenOrd.properties.stage.liquid.description=Percentage of the time spent in the liquid stage +OpenOrd.properties.stage.expansion.name=Expansion (%) +OpenOrd.properties.stage.expansion.description=Percentage of the time spent in the expansion stage +OpenOrd.properties.stage.cooldown.name=Cooldown (%) +OpenOrd.properties.stage.cooldown.description=Percentage of the time spent in the cooldown stage +OpenOrd.properties.stage.crunch.name=Crunch (%) +OpenOrd.properties.stage.crunch.description=Percentage of the time spent in the crunch stage +OpenOrd.properties.stage.simmer.name=Simmer (%) +OpenOrd.properties.stage.simmer.description=Percentage of the time spent in the simmer stage diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_uk.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_uk.properties new file mode 100644 index 0000000000..4fee2a536a --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_uk.properties @@ -0,0 +1,22 @@ +OpenOrd.name=OpenOrd +OpenOrd.properties.edgecut.name=\u0412\u0438\u0440\u0456\u0437\u0430\u043D\u043D\u044F \u043A\u0440\u0430\u044E +OpenOrd.properties.edgecut.description=0 \u043E\u0437\u043D\u0430\u0447\u0430\u0454 \u0432\u0456\u0434\u0441\u0443\u0442\u043D\u0456\u0441\u0442\u044C \u0440\u0456\u0437\u0430\u043D\u043D\u044F \u0442\u0430 1 \u043C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0435 \u0440\u0456\u0437\u0430\u043D\u043D\u044F. \u0412\u0438\u0449\u0438\u0439 \u0437\u0440\u0456\u0437 \u043E\u0437\u043D\u0430\u0447\u0430\u0454 \u0431\u0456\u043B\u044C\u0448 \u043A\u043B\u0430\u0441\u0442\u0435\u0440\u043D\u0438\u0439 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442. +OpenOrd.properties.numthreads.name=\u041A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u043F\u043E\u0442\u043E\u043A\u0456\u0432 +OpenOrd.properties.numthreads.description=\u041A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u043F\u043E\u0442\u043E\u043A\u0456\u0432 \u0434\u043B\u044F \u0432\u0438\u043A\u043E\u043D\u0430\u043D\u043D\u044F \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C\u0443. \u0417\u0431\u0456\u043B\u044C\u0448\u0442\u0435 \u0446\u0435 \u0447\u0438\u0441\u043B\u043E \u0434\u043B\u044F \u0431\u0430\u0433\u0430\u0442\u043E\u044F\u0434\u0435\u0440\u043D\u0438\u0445 \u043A\u043E\u043C\u043F\u2019\u044E\u0442\u0435\u0440\u0456\u0432. \u0420\u0435\u043A\u043E\u043C\u0435\u043D\u0434\u0443\u0454\u0442\u044C\u0441\u044F \u043F\u043E\u0441\u0442\u0430\u0432\u0438\u0442\u0438 \u0447\u0438\u0441\u043B\u043E \u044F\u0434\u0440\u0430 \u043C\u0456\u043D\u0443\u0441 1, \u0449\u043E\u0431 \u0437\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u043F\u043E\u0442\u0456\u043A \u0434\u043B\u044F \u0432\u0456\u0434\u043E\u0431\u0440\u0430\u0436\u0435\u043D\u043D\u044F. +OpenOrd.properties.numiterations.name=\u041A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u0456\u0442\u0435\u0440\u0430\u0446\u0456\u0439 +OpenOrd.properties.numiterations.description=\u0417\u0431\u0456\u043B\u044C\u0448\u0443\u0439\u0442\u0435 \u0446\u0435 \u0447\u0438\u0441\u043B\u043E \u043B\u0438\u0448\u0435 \u0434\u043B\u044F \u0434\u0443\u0436\u0435 \u0432\u0435\u043B\u0438\u043A\u0438\u0445 \u0433\u0440\u0430\u0444\u0456\u043A\u0456\u0432. \u0411\u0456\u043B\u044C\u0448\u0435 \u0456\u0442\u0435\u0440\u0430\u0446\u0456\u0439, \u0431\u0456\u043B\u044C\u0448\u0435 \u0447\u0430\u0441\u0443 \u0439 \u043C\u0435\u043D\u0448 \u0449\u0456\u043B\u044C\u043D\u0438\u0439 \u0440\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442. \u041C\u0456\u043D\u0456\u043C\u0443\u043C \u2014 100 \u0456\u0442\u0435\u0440\u0430\u0446\u0456\u0439, \u0430 \u0437\u0430 \u0437\u0430\u043C\u043E\u0432\u0447\u0443\u0432\u0430\u043D\u043D\u044F\u043C \u2014 750. +OpenOrd.properties.seed.name=\u0412\u0438\u043F\u0430\u0434\u043A\u043E\u0432\u0435 \u043D\u0430\u0441\u0456\u043D\u043D\u044F +OpenOrd.properties.seed.description=\u0420\u0435\u0437\u0443\u043B\u044C\u0442\u0430\u0442 \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C\u0443 \u0437\u0430\u043B\u0435\u0436\u0438\u0442\u044C \u0432\u0456\u0434 \u043F\u043E\u0447\u0430\u0442\u043A\u043E\u0432\u043E\u0433\u043E \u0447\u0438\u0441\u043B\u0430, \u043A\u0456\u043B\u044C\u043A\u043E\u0441\u0442\u0456 \u0456\u0442\u0435\u0440\u0430\u0446\u0456\u0439 \u0456 \u043A\u0456\u043B\u044C\u043A\u043E\u0441\u0442\u0456 \u043F\u043E\u0442\u043E\u043A\u0456\u0432. +OpenOrd.properties.realtime.name=\u0424\u0456\u043A\u0441\u043E\u0432\u0430\u043D\u0438\u0439 \u0447\u0430\u0441 +OpenOrd.properties.stage.liquid.name=\u0420\u0456\u0434\u0438\u043D\u0430 (%) +OpenOrd.properties.stage.liquid.description=\u0412\u0456\u0434\u0441\u043E\u0442\u043E\u043A \u0447\u0430\u0441\u0443, \u043F\u0440\u043E\u0432\u0435\u0434\u0435\u043D\u043E\u0433\u043E \u043D\u0430 \u0441\u0442\u0430\u0434\u0456\u0457 \u0440\u0456\u0434\u0438\u043D\u0438 +OpenOrd.properties.stage.expansion.name=\u0420\u043E\u0437\u0448\u0438\u0440\u0435\u043D\u043D\u044F (%) +OpenOrd.properties.stage.expansion.description=\u0412\u0456\u0434\u0441\u043E\u0442\u043E\u043A \u0447\u0430\u0441\u0443, \u043F\u0440\u043E\u0432\u0435\u0434\u0435\u043D\u043E\u0433\u043E \u043D\u0430 \u0435\u0442\u0430\u043F\u0456 \u0440\u043E\u0437\u0448\u0438\u0440\u0435\u043D\u043D\u044F +OpenOrd.properties.stage.cooldown.name=\u041A\u0443\u043B\u0434\u0430\u0443\u043D (%) +OpenOrd.properties.stage.cooldown.description=\u0412\u0456\u0434\u0441\u043E\u0442\u043E\u043A \u0447\u0430\u0441\u0443, \u043F\u0440\u043E\u0432\u0435\u0434\u0435\u043D\u043E\u0433\u043E \u043D\u0430 \u0435\u0442\u0430\u043F\u0456 \u0432\u0456\u0434\u043D\u043E\u0432\u043B\u0435\u043D\u043D\u044F +OpenOrd.properties.stage.crunch.name=\u0425\u0440\u0443\u0441\u043A\u0456\u0442 (%) +OpenOrd.properties.stage.crunch.description=\u0412\u0456\u0434\u0441\u043E\u0442\u043E\u043A \u0447\u0430\u0441\u0443, \u0432\u0438\u0442\u0440\u0430\u0447\u0435\u043D\u043E\u0433\u043E \u043D\u0430 \u0441\u0442\u0430\u0434\u0456\u044E \u043A\u0440\u0438\u0437\u0443 +OpenOrd.properties.stage.simmer.name=\u0412\u0430\u0440\u0438\u0442\u0438 \u043D\u0430 \u043F\u043E\u0432\u0456\u043B\u044C\u043D\u043E\u043C\u0443 \u0432\u043E\u0433\u043D\u0456 (%) +OpenOrd.properties.stage.simmer.description=\u0412\u0456\u0434\u0441\u043E\u0442\u043E\u043A \u0447\u0430\u0441\u0443, \u043F\u0440\u043E\u0432\u0435\u0434\u0435\u043D\u043E\u0433\u043E \u043D\u0430 \u0441\u0442\u0430\u0434\u0456\u0457 \u043A\u0438\u043F\u0456\u043D\u043D\u044F +OpenOrd.description=\u041F\u0440\u0438\u043C\u0443\u0441\u043E\u0432\u043E \u0441\u043F\u0440\u044F\u043C\u043E\u0432\u0430\u043D\u0438\u0439 \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C \u043C\u0430\u043A\u0435\u0442\u0430 \u0434\u043B\u044F \u043C\u0430\u0441\u0448\u0442\u0430\u0431\u043D\u0438\u0445 \u043D\u0435\u043E\u0440\u0456\u0454\u043D\u0442\u043E\u0432\u0430\u043D\u0438\u0445 \u0433\u0440\u0430\u0444\u0456\u0432 \u0440\u0435\u0430\u043B\u044C\u043D\u043E\u0433\u043E \u0441\u0432\u0456\u0442\u0443. \u041C\u043E\u0436\u0435 \u043C\u0430\u0441\u0448\u0442\u0430\u0431\u0443\u0432\u0430\u0442\u0438\u0441\u044F \u0434\u043E \u043F\u043E\u043D\u0430\u0434 1 \u043C\u0456\u043B\u044C\u0439\u043E\u043D\u0430 \u0432\u0443\u0437\u043B\u0456\u0432, \u0449\u043E \u0440\u043E\u0431\u0438\u0442\u044C \u0439\u043E\u0433\u043E \u0456\u0434\u0435\u0430\u043B\u044C\u043D\u0438\u043C \u0434\u043B\u044F \u0432\u0435\u043B\u0438\u043A\u0438\u0445 \u0433\u0440\u0430\u0444\u0456\u043A\u0456\u0432. \u041E\u0434\u043D\u0430\u043A \u043C\u0430\u043B\u0435\u043D\u044C\u043A\u0456 \u0433\u0440\u0430\u0444\u0456\u043A\u0438 (\u0441\u043E\u0442\u043D\u0456 \u0447\u0438 \u043C\u0435\u043D\u0448\u0435) \u043D\u0435 \u0437\u0430\u0432\u0436\u0434\u0438 \u0432\u0438\u0433\u043B\u044F\u0434\u0430\u044E\u0442\u044C \u0442\u0430\u043A \u0434\u043E\u0431\u0440\u0435. \u0426\u0435\u0439 \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C \u043F\u0435\u0440\u0435\u0434\u0431\u0430\u0447\u0430\u0454 \u043D\u0435\u043E\u0440\u0456\u0454\u043D\u0442\u043E\u0432\u0430\u043D\u0456 \u0437\u0432\u0430\u0436\u0435\u043D\u0456 \u0433\u0440\u0430\u0444\u0438 \u0442\u0430 \u0441\u043F\u0440\u044F\u043C\u043E\u0432\u0430\u043D\u0438\u0439 \u043D\u0430 \u043A\u0440\u0430\u0449\u0435 \u0440\u043E\u0437\u0440\u0456\u0437\u043D\u0435\u043D\u043D\u044F \u043A\u043B\u0430\u0441\u0442\u0435\u0440\u0456\u0432. +OpenOrd.properties.realtime.description=\u041A\u043E\u043B\u0438 \u0434\u0435\u044F\u043A\u0456 \u0432\u0443\u0437\u043B\u0438 \u0444\u0456\u043A\u0441\u043E\u0432\u0430\u043D\u0456 (\u0432\u0438\u0431\u0456\u0440 \u043F\u0440\u044F\u043C\u043E\u043A\u0443\u0442\u043D\u0438\u043A\u0430 \u043F\u0440\u0430\u0432\u043E\u044E \u043A\u043D\u043E\u043F\u043A\u043E\u044E \u043C\u0438\u0448\u0456 > \u0420\u043E\u0437\u0442\u0430\u0448\u0443\u0432\u0430\u0442\u0438), \u0446\u0435 \u043D\u0430\u043B\u0430\u0448\u0442\u043E\u0432\u0443\u0454 \u0447\u0430\u0441, \u043F\u0440\u043E\u0442\u044F\u0433\u043E\u043C \u044F\u043A\u043E\u0433\u043E \u0444\u0456\u043A\u0441\u043E\u0432\u0430\u043D\u0456 \u0432\u0443\u0437\u043B\u0438 \u043D\u0435 \u0440\u0443\u0445\u0430\u0442\u0438\u043C\u0443\u0442\u044C\u0441\u044F. 0 \u043E\u0437\u043D\u0430\u0447\u0430\u0454, \u0449\u043E \u0432\u043E\u043D\u0438 \u043D\u0435 \u0431\u0443\u0434\u0443\u0442\u044C \u0432\u0438\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0456, \u0430 1 \u0432\u043E\u043D\u0438 \u0437\u0430\u043B\u0438\u0448\u0430\u0442\u044C\u0441\u044F \u0432\u0438\u043F\u0440\u0430\u0432\u043B\u0435\u043D\u0438\u043C\u0438. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_zh_CN.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_zh_CN.properties new file mode 100644 index 0000000000..b5a552336d --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_zh_CN.properties @@ -0,0 +1,43 @@ +# OpenOrd.name=OpenOrd +# OpenOrd.description = Force-Directed layout algorithm for real-world large-scale undirected graphs. Can scale to over 1 million nodes, making it ideal for large graphs. However, small graphs (hundreds or less) do not always end up looking so good. This algorithm expects undirected weighted graphs and aims to better distinguish clusters. + +# OpenOrd.properties.edgecut.name = Edge Cut +# OpenOrd.properties.edgecut.description = 0 means no cutting and 1 maximum cutting. A higher cutting means a more clustered result. + +OpenOrd.properties.numthreads.name=\u591a\u7ebf\u7a0b +# OpenOrd.properties.numthreads.description = The number of threads to use to run the algorithm. Increase this number for multi-core computers. It's recommended to put the number of core minus 1 to keep a thread for display. + +OpenOrd.properties.numiterations.name=\u591a\u6b21\u8fed\u4ee3 +# OpenOrd.properties.numiterations.description = Increase this number only for very large graphs. More iterations, more time it takes and less dense the result will be. Minimum is 100 iterations, and default is 750. + +OpenOrd.properties.seed.name=\u968f\u673a\u79cd\u5b50 +OpenOrd.properties.seed.description=\u7b97\u6cd5\u7684\u7ed3\u679c\u53d6\u51b3\u4e8e\u79cd\u5b50\u3001\u8fed\u4ee3\u6b21\u6570\u548c\u7ebf\u7a0b\u6570\u3002 +OpenOrd.properties.realtime.name=\u56fa\u5b9a\u65f6\u95f4 +# OpenOrd.properties.realtime.description = When some nodes are fixed (Right-click rectangle selection > Settle), it configures the time the fixed nodes will not move. 0 means they will not be fixed and 1 they will remain fixed. + +OpenOrd.properties.stage.liquid.name=\u6db2\u4f53 (%) +# OpenOrd.properties.stage.liquid.description = Percentage of the time spent in the liquid stage + +OpenOrd.properties.stage.expansion.name=\u6269\u5f20 (%) +# OpenOrd.properties.stage.expansion.description = Percentage of the time spent in the expansion stage + +OpenOrd.properties.stage.cooldown.name=\u51b7\u5374 (%) +# OpenOrd.properties.stage.cooldown.description = Percentage of the time spent in the cooldown stage + +OpenOrd.properties.stage.crunch.name=\u7d27\u7f29 (%) +# OpenOrd.properties.stage.crunch.description = Percentage of the time spent in the crunch stage + +OpenOrd.properties.stage.simmer.name=Simmer (%) +# OpenOrd.properties.stage.simmer.description = Percentage of the time spent in the simmer stage + + + +OpenOrd.properties.edgecut.name=\u5207\u8FB9 +OpenOrd.properties.edgecut.description=0 \u8868\u793A\u4E0D\u5207\u5272\uFF0C1 \u8868\u793A\u6700\u5927\u5207\u5272\u3002 \u66F4\u9AD8\u7684\u5207\u5272\u610F\u5473\u7740\u66F4\u805A\u96C6\u7684\u7ED3\u679C\u3002 +OpenOrd.description=\u73B0\u5B9E\u4E16\u754C\u5927\u89C4\u6A21\u65E0\u5411\u56FE\u7684\u529B\u5BFC\u5411\u5E03\u5C40\u7B97\u6CD5\u3002 \u53EF\u4EE5\u6269\u5C55\u5230\u8D85\u8FC7 100 \u4E07\u4E2A\u8282\u70B9\uFF0C\u975E\u5E38\u9002\u5408\u5927\u578B\u56FE\u3002 \u7136\u800C\uFF0C\u5C0F\u56FE\uFF08\u6570\u767E\u6216\u66F4\u5C11\uFF09\u5E76\u4E0D\u603B\u662F\u770B\u8D77\u6765\u90A3\u4E48\u597D\u3002 \u8BE5\u7B97\u6CD5\u9700\u8981\u65E0\u5411\u52A0\u6743\u56FE\uFF0C\u65E8\u5728\u66F4\u597D\u5730\u533A\u5206\u805A\u7C7B\u3002 +OpenOrd.properties.numthreads.description=\u7528\u4E8E\u8FD0\u884C\u7B97\u6CD5\u7684\u7EBF\u7A0B\u6570\u3002 \u4E3A\u591A\u6838\u8BA1\u7B97\u673A\u589E\u52A0\u6B64\u6570\u5B57\u3002 \u5EFA\u8BAE\u5C06\u6838\u5FC3\u6570\u51CF1\uFF0C\u4EE5\u4FDD\u7559\u4E00\u4E2A\u7EBF\u7A0B\u8FDB\u884C\u663E\u793A\u3002 +OpenOrd.properties.numiterations.description=\u4EC5\u9488\u5BF9\u975E\u5E38\u5927\u7684\u56FE\u5F62\u589E\u52A0\u6B64\u6570\u5B57\u3002 \u66F4\u591A\u7684\u8FED\u4EE3\uFF0C\u66F4\u591A\u7684\u65F6\u95F4\u548C\u66F4\u5C11\u7684\u7ED3\u679C\u5C06\u662F\u5BC6\u96C6\u7684\u3002 \u6700\u5C0F\u4E3A 100 \u6B21\u8FED\u4EE3\uFF0C\u9ED8\u8BA4\u4E3A 750\u3002 +OpenOrd.properties.realtime.description=\u5F53\u67D0\u4E9B\u8282\u70B9\u88AB\u56FA\u5B9A\u65F6\uFF08\u53F3\u51FB\u77E9\u5F62\u9009\u62E9> Settle\uFF09\uFF0C\u5B83\u914D\u7F6E\u4E86\u56FA\u5B9A\u8282\u70B9\u4E0D\u4F1A\u79FB\u52A8\u7684\u65F6\u95F4\u3002 0 \u8868\u793A\u5B83\u4EEC\u4E0D\u4F1A\u56FA\u5B9A\uFF0C1 \u8868\u793A\u5B83\u4EEC\u5C06\u4FDD\u6301\u56FA\u5B9A\u3002 +OpenOrd.properties.stage.liquid.description=\u5728\u6DB2\u4F53\u9636\u6BB5\u82B1\u8D39\u7684\u65F6\u95F4\u767E\u5206\u6BD4 +OpenOrd.properties.stage.expansion.description=\u5728\u6269\u5C55\u9636\u6BB5\u82B1\u8D39\u7684\u65F6\u95F4\u767E\u5206\u6BD4 +OpenOrd.properties.stage.cooldown.description=\u5728\u51B7\u5374\u9636\u6BB5\u82B1\u8D39\u7684\u65F6\u95F4\u767E\u5206\u6BD4 diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_zh_TW.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_zh_TW.properties new file mode 100644 index 0000000000..538a8bf0e8 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/openord/Bundle_zh_TW.properties @@ -0,0 +1,22 @@ +OpenOrd.name=OpenOrd +OpenOrd.description=Force-Directed layout algorithm for real-world large-scale undirected graphs. Can scale to over 1 million nodes, making it ideal for large graphs. However, small graphs (hundreds or less) do not always end up looking so good. This algorithm expects undirected weighted graphs and aims to better distinguish clusters. +OpenOrd.properties.edgecut.name=Edge Cut +OpenOrd.properties.edgecut.description=0 means no cutting and 1 maximum cutting. A higher cutting means a more clustered result. +OpenOrd.properties.numthreads.name=Num Threads +OpenOrd.properties.numthreads.description=The number of threads to use to run the algorithm. Increase this number for multi-core computers. It's recommended to put the number of core minus 1 to keep a thread for display. +OpenOrd.properties.numiterations.name=Num Iterations +OpenOrd.properties.numiterations.description=Increase this number only for very large graphs. More iterations, more time it takes and less dense the result will be. Minimum is 100 iterations, and default is 750. +OpenOrd.properties.seed.name=Random seed +OpenOrd.properties.seed.description=The result of the algorithm depends on the seed, the number of iterations and the number of threads. +OpenOrd.properties.realtime.name=Fixed time +OpenOrd.properties.realtime.description=When some nodes are fixed (Right-click rectangle selection > Settle), it configures the time the fixed nodes will not move. 0 means they will not be fixed and 1 they will remain fixed. +OpenOrd.properties.stage.liquid.name=Liquid (%) +OpenOrd.properties.stage.liquid.description=Percentage of the time spent in the liquid stage +OpenOrd.properties.stage.expansion.name=Expansion (%) +OpenOrd.properties.stage.expansion.description=Percentage of the time spent in the expansion stage +OpenOrd.properties.stage.cooldown.name=Cooldown (%) +OpenOrd.properties.stage.cooldown.description=Percentage of the time spent in the cooldown stage +OpenOrd.properties.stage.crunch.name=Crunch (%) +OpenOrd.properties.stage.crunch.description=Percentage of the time spent in the crunch stage +OpenOrd.properties.stage.simmer.name=Simmer (%) +OpenOrd.properties.stage.simmer.description=Percentage of the time spent in the simmer stage diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/org-gephi-layout-plugin.pot b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/org-gephi-layout-plugin.pot deleted file mode 100644 index 333cb7f639..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/org-gephi-layout-plugin.pot +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Standard layout implementations" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Standard layout implementations" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/pt_BR.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/pt_BR.po deleted file mode 100644 index 0b67126b05..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/pt_BR.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 16:42+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ImplementaΓ§Γ΅es de algoritmos de distribuiΓ§Γ£o padrΓ£o" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplementaΓ§Γ΅es de algoritmos de distribuiΓ§Γ£o padrΓ£o" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle.properties index d03b3738ea..f5f91e04fa 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle.properties @@ -2,4 +2,7 @@ Random.name=Random Layout Random.description=A random distribution of the nodes Random.spaceSize.name=Space size -Random.spaceSize.desc=The size of the space to randomly distribute the nodes. \ No newline at end of file +Random.spaceSize.desc=The size of the space to randomly distribute the nodes. + +Random.seed.name=Random seed +Random.seed.desc=The seed controls the random number generator, making the layout reproducible. \ No newline at end of file diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_ar.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_ca.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_ca.properties new file mode 100644 index 0000000000..03f05707bd --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_ca.properties @@ -0,0 +1,4 @@ +Random.name=Disseny aleatori +Random.description=Una distribuciσ aleatςria dels nodes +Random.spaceSize.name=Mida de l'espai +Random.spaceSize.desc=The size of the space to randomly distribute the nodes. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_cs.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_cs.properties index 7f9b6e590d..699cdb2f3d 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_cs.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_cs.properties @@ -1,15 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-26 20\:32+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -Random.name=N\u00e1hodn\u00e9 rozvr\u017een\u00ed - -Random.description=N\u00e1hodn\u00e9 rozm\u00edst\u011bn\u00ed uzl\u016f - -Random.spaceSize.name=Velikost prostoru - -Random.spaceSize.desc=Velikost prostoru v kter\u00e9m uzly n\u00e1hodn\u011b rozm\u00edstit +Random.name=Nαhodnι rozvr\u017eenν +Random.description=Nαhodnι rozmνst\u011bnν uzl\u016f + +Random.spaceSize.name=Velikost prostoru +Random.spaceSize.desc=Velikost prostoru v kterιm uzly nαhodn\u011b rozmνstit diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_de.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_de.properties new file mode 100644 index 0000000000..35fb3d675c --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_de.properties @@ -0,0 +1,5 @@ +Random.name=Zufδlliges Layout +Random.description=Eine zufδllige Verteilung der Knoten + +Random.spaceSize.name=Grφίe des Leerraums +Random.spaceSize.desc=Grφίe des Raumes in dem Knoten zufδllig verteilt werden diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_es.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_es.properties index 7c01ee3ecf..bcf5ee65ad 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_es.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_es.properties @@ -1,15 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:01+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -Random.name=Distribuci\u00f3n aleatoria - -Random.description=Distribuci\u00f3n aleatoria de los nodos. - -Random.spaceSize.name=Tama\u00f1o de espacio - -Random.spaceSize.desc=El tama\u00f1o del espacio a utilizar para distribuir los nodos aleatoriamente +Random.name=Distribuciσn aleatoria +Random.description=Distribuciσn aleatoria de los nodos. + +Random.spaceSize.name=Tamaρo de espacio +Random.spaceSize.desc=El tamaρo del espacio a utilizar para distribuir los nodos aleatoriamente diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_fr.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_fr.properties index bd6ff4fde4..0f680fcea9 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_fr.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_fr.properties @@ -1,15 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:01+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -Random.name=Spatialisation al\u00e9atoire - -Random.description=Distribution al\u00e9atoire des noeuds - -Random.spaceSize.name=Taille de l'espace - -Random.spaceSize.desc=Taille de l'espace dans lequel distribuer les noeuds al\u00e9atoirement. +Random.name=Spatialisation alιatoire +Random.description=Distribution alιatoire des noeuds + +Random.spaceSize.name=Taille de l'espace +Random.spaceSize.desc=Taille de l'espace dans lequel distribuer les noeuds alιatoirement. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_he.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_he.properties new file mode 100644 index 0000000000..83b35f0747 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_he.properties @@ -0,0 +1,4 @@ +Random.name=Random Layout +Random.description=A random distribution of the nodes +Random.spaceSize.name=Space size +Random.spaceSize.desc=The size of the space to randomly distribute the nodes. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_hu.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_hu.properties new file mode 100644 index 0000000000..f452e13a47 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_hu.properties @@ -0,0 +1,6 @@ + + +Random.spaceSize.desc=A hely m\u00E9rete a csom\u00F3pontok v\u00E9letlenszer\u0171 eloszt\u00E1s\u00E1hoz. +Random.spaceSize.name=Hely m\u00E9rete +Random.description=A csom\u00F3pontok v\u00E9letlenszer\u0171 eloszl\u00E1sa +Random.name=V\u00E9letlenszer\u0171 elrendez\u00E9s diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_it.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_it.properties new file mode 100644 index 0000000000..2a75e0da97 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_it.properties @@ -0,0 +1,6 @@ +Random.name=Layout Casuale +Random.description=A random distribution of the nodes +Random.spaceSize.name=Space size +Random.spaceSize.desc=The size of the space to randomly distribute the nodes. +Random.seed.desc=Il seme controlla il generatore di numeri casuali, rendendo il layout riproducibile. +Random.seed.name=Seme casuale diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_ja.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_ja.properties index 6fce9839da..c237747938 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_ja.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_ja.properties @@ -1,15 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-18 10\:25+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -Random.name=\u30e9\u30f3\u30c0\u30e0\u30ec\u30a4\u30a2\u30a6\u30c8 - -Random.description=\u30ce\u30fc\u30c9\u306e\u30e9\u30f3\u30c0\u30e0\u5206\u5e03 - -Random.spaceSize.name=\u7a7a\u9593\u306e\u30b5\u30a4\u30ba - -Random.spaceSize.desc=\u30e9\u30f3\u30c0\u30e0\u306b\u30ce\u30fc\u30c9\u3092\u5206\u6563\u3059\u308b\u7a7a\u9593\u306e\u5927\u304d\u3055 +Random.name=\u30e9\u30f3\u30c0\u30e0\u30ec\u30a4\u30a2\u30a6\u30c8 +Random.description=\u30ce\u30fc\u30c9\u306e\u30e9\u30f3\u30c0\u30e0\u5206\u5e03 + +Random.spaceSize.name=\u7a7a\u9593\u306e\u30b5\u30a4\u30ba +Random.spaceSize.desc=\u30e9\u30f3\u30c0\u30e0\u306b\u30ce\u30fc\u30c9\u3092\u5206\u6563\u3059\u308b\u7a7a\u9593\u306e\u5927\u304d\u3055 diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_ko.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_ko.properties new file mode 100644 index 0000000000..fec2455bf7 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_ko.properties @@ -0,0 +1,6 @@ + + +Random.name=\uBB34\uC791\uC704 \uB808\uC774\uC544\uC6C3 +Random.description=\uB178\uB4DC\uC758 \uBB34\uC791\uC704 \uBD84\uD3EC +Random.spaceSize.name=\uACF5\uAC04 \uD06C\uAE30 +Random.spaceSize.desc=\uB178\uB4DC\uB97C \uBB34\uC791\uC704\uB85C \uBD84\uD3EC\uC2DC\uD0AC \uACF5\uAC04 \uD06C\uAE30. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_nl.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_nl.properties new file mode 100644 index 0000000000..1f2e24f560 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_nl.properties @@ -0,0 +1,4 @@ +Random.name=Random Layout +Random.description=Een willekeurige distributie van de knopen +Random.spaceSize.name=Space size +Random.spaceSize.desc=The size of the space to randomly distribute the nodes. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_pt_BR.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_pt_BR.properties index fda172d7db..cf1086d548 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_pt_BR.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_pt_BR.properties @@ -1,15 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 15\:35+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -Random.name=Distribui\u00e7\u00e3o aleat\u00f3ria - -Random.description=Uma distribui\u00e7\u00e3o aleat\u00f3ria dos n\u00f3s - -Random.spaceSize.name=Tamanho do espa\u00e7o - -Random.spaceSize.desc=Tamanho do espa\u00e7o para distribui\u00e7\u00e3o aleat\u00f3ria dos n\u00f3s. +Random.name=Distribuiηγo aleatσria +Random.description=Uma distribuiηγo aleatσria dos nσs + +Random.spaceSize.name=Tamanho do espaηo +Random.spaceSize.desc=Tamanho do espaηo para distribuiηγo aleatσria dos nσs. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_ro.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_ro.properties new file mode 100644 index 0000000000..074fc7ab6e --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_ro.properties @@ -0,0 +1,6 @@ + + +Random.spaceSize.name=Dimensiunea spa\u021Biului +Random.spaceSize.desc=Dimensiunea spa\u021Biului \u00EEn care vor fi distribuite aleatoriu nodurile. +Random.description=O distribu\u021Bie aleatorie a nodurilor +Random.name=Dispunere Aleatorie diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_ru.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_ru.properties index 438e9383be..a955aa6c4e 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_ru.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_ru.properties @@ -1,15 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 15\:35+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -Random.name=\u0421\u043b\u0443\u0447\u0430\u0439\u043d\u0430\u044f \u0443\u043a\u043b\u0430\u0434\u043a\u0430 - -Random.description=\u0421\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0443\u0437\u043b\u043e\u0432 - -Random.spaceSize.name=\u0420\u0430\u0437\u043c\u0435\u0440 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 - -Random.spaceSize.desc=\u0420\u0430\u0437\u043c\u0435\u0440 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u0443\u0437\u043b\u044b +Random.name=\u0421\u043b\u0443\u0447\u0430\u0439\u043d\u0430\u044f \u0443\u043a\u043b\u0430\u0434\u043a\u0430 +Random.description=\u0421\u043b\u0443\u0447\u0430\u0439\u043d\u043e\u0435 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0443\u0437\u043b\u043e\u0432 + +Random.spaceSize.name=\u0420\u0430\u0437\u043c\u0435\u0440 \u043f\u0440\u043e\u0441\u0442\u0440\u0430\u043d\u0441\u0442\u0432\u0430 +Random.spaceSize.desc=\u0420\u0430\u0437\u043c\u0435\u0440 \u043e\u0431\u043b\u0430\u0441\u0442\u0438, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u0443\u0437\u043b\u044b diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_th.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_tr.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_tr.properties new file mode 100644 index 0000000000..e02d66de65 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_tr.properties @@ -0,0 +1,4 @@ +Random.name=Rastgele D\u00FCzenleme +Random.description=A random distribution of the nodes +Random.spaceSize.name=Space size +Random.spaceSize.desc=The size of the space to randomly distribute the nodes. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_zh_CN.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_zh_CN.properties index 630c6c3d8e..b89850678d 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_zh_CN.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_zh_CN.properties @@ -1,14 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:10+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -Random.name=\u968f\u673a\u5e03\u5c40 - -Random.description=\u8282\u70b9\u7684\u4e00\u4e2a\u968f\u673a\u5206\u5e03 - -Random.spaceSize.name=\u7a7a\u95f4\u7684\u5927\u5c0f - -Random.spaceSize.desc=\u968f\u673a\u5206\u5e03\u7684\u8282\u70b9\u7684\u7a7a\u95f4\u5927\u5c0f\u3002 +Random.name=\u968f\u673a\u5e03\u5c40 +Random.description=\u8282\u70b9\u7684\u4e00\u4e2a\u968f\u673a\u5206\u5e03 + +Random.spaceSize.name=\u7a7a\u95f4\u7684\u5927\u5c0f +Random.spaceSize.desc=\u968f\u673a\u5206\u5e03\u7684\u8282\u70b9\u7684\u7a7a\u95f4\u5927\u5c0f\u3002 diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_zh_TW.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_zh_TW.properties new file mode 100644 index 0000000000..83b35f0747 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/Bundle_zh_TW.properties @@ -0,0 +1,4 @@ +Random.name=Random Layout +Random.description=A random distribution of the nodes +Random.spaceSize.name=Space size +Random.spaceSize.desc=The size of the space to randomly distribute the nodes. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/cs.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/cs.po deleted file mode 100644 index 5047572190..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/cs.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-26 20:32+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "Random.name" -msgstr "NΓ‘hodnΓ© rozvrΕΎenΓ­" - -msgid "Random.description" -msgstr "NΓ‘hodnΓ© rozmΓ­stΔ›nΓ­ uzlΕ―" - -msgid "Random.spaceSize.name" -msgstr "Velikost prostoru" - -msgid "Random.spaceSize.desc" -msgstr "Velikost prostoru v kterΓ©m uzly nΓ‘hodnΔ› rozmΓ­stit" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/es.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/es.po deleted file mode 100644 index fe710edf8e..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/es.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:01+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "Random.name" -msgstr "DistribuciΓ³n aleatoria" - -msgid "Random.description" -msgstr "DistribuciΓ³n aleatoria de los nodos." - -msgid "Random.spaceSize.name" -msgstr "TamaΓ±o de espacio" - -msgid "Random.spaceSize.desc" -msgstr "El tamaΓ±o del espacio a utilizar para distribuir los nodos aleatoriamente" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/fr.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/fr.po deleted file mode 100644 index 2239f2c747..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/fr.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:01+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "Random.name" -msgstr "Spatialisation alΓ©atoire" - -msgid "Random.description" -msgstr "Distribution alΓ©atoire des noeuds" - -msgid "Random.spaceSize.name" -msgstr "Taille de l'espace" - -msgid "Random.spaceSize.desc" -msgstr "Taille de l'espace dans lequel distribuer les noeuds alΓ©atoirement." diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/ja.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/ja.po deleted file mode 100644 index 3693205d94..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/ja.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-18 10:25+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "Random.name" -msgstr "γƒ©γƒ³γƒ€γƒ γƒ¬γ‚€γ‚’γ‚¦γƒˆ" - -msgid "Random.description" -msgstr "γƒŽγƒΌγƒ‰γγƒ©γƒ³γƒ€γƒ εˆ†εΈƒ" - -msgid "Random.spaceSize.name" -msgstr "η©Ίι–“γγ‚΅γ‚€γ‚Ί" - -msgid "Random.spaceSize.desc" -msgstr "γƒ©γƒ³γƒ€γƒ γ«γƒŽγƒΌγƒ‰γ‚’εˆ†ζ•£γ™γ‚‹η©Ίι–“γε€§γγ•" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/org-gephi-layout-plugin-random.pot b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/org-gephi-layout-plugin-random.pot deleted file mode 100644 index 5f557827c1..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/org-gephi-layout-plugin-random.pot +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "Random.name" -msgstr "Random Layout" - -msgid "Random.description" -msgstr "A random distribution of the nodes" - -msgid "Random.spaceSize.name" -msgstr "Space size" - -msgid "Random.spaceSize.desc" -msgstr "The size of the space to randomly distribute the nodes." diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/pt_BR.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/pt_BR.po deleted file mode 100644 index 084c3302b1..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/pt_BR.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 15:35+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "Random.name" -msgstr "DistribuiΓ§Γ£o aleatΓ³ria" - -msgid "Random.description" -msgstr "Uma distribuiΓ§Γ£o aleatΓ³ria dos nΓ³s" - -msgid "Random.spaceSize.name" -msgstr "Tamanho do espaΓ§o" - -msgid "Random.spaceSize.desc" -msgstr "Tamanho do espaΓ§o para distribuiΓ§Γ£o aleatΓ³ria dos nΓ³s." diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/ru.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/ru.po deleted file mode 100644 index 3ead6c8472..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/ru.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 15:35+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "Random.name" -msgstr "Блучайная ΡƒΠΊΠ»Π°Π΄ΠΊΠ°" - -msgid "Random.description" -msgstr "Π‘Π»ΡƒΡ‡Π°ΠΉΠ½ΠΎΠ΅ распрСдСлСниС ΡƒΠ·Π»ΠΎΠ²" - -msgid "Random.spaceSize.name" -msgstr "Π Π°Π·ΠΌΠ΅Ρ€ пространства" - -msgid "Random.spaceSize.desc" -msgstr "Π Π°Π·ΠΌΠ΅Ρ€ области, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ случайно Ρ€Π°ΡΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ΡΡ ΡƒΠ·Π»Ρ‹" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/zh_CN.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/zh_CN.po deleted file mode 100644 index 10b64cb9dd..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/random/zh_CN.po +++ /dev/null @@ -1,30 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:10+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "Random.name" -msgstr "ιšζœΊεΈƒε±€" - -msgid "Random.description" -msgstr "θŠ‚η‚Ήηš„δΈ€δΈͺιšζœΊεˆ†εΈƒ" - -msgid "Random.spaceSize.name" -msgstr "η©Ίι—΄ηš„ε€§ε°" - -msgid "Random.spaceSize.desc" -msgstr "ιšζœΊεˆ†εΈƒηš„θŠ‚η‚Ήηš„η©Ίι—΄ε€§ε°γ€‚" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle.properties index 8e35492f3c..53c598a51d 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle.properties @@ -1,7 +1,5 @@ -counterclockwise.name=Counter-Clockwise Rotate -counterclockwise.description=Rotate the graph by -90 degrees -clockwise.name=Clockwise Rotate -clockwise.description=Rotate the graph by 90 degrees +rotate.name=Rotate +rotate.description=Rotate the graph by degrees -clockwise.angle.name=Angle -clockwise.angle.desc=Clockwise rotation angle in degrees \ No newline at end of file +rotate.angle.name=Angle +rotate.angle.desc=Clockwise rotation angle in degrees (can be negative for counter-clockwise) \ No newline at end of file diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_ar.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_ca.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_ca.properties new file mode 100644 index 0000000000..61c89b6cdb --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_ca.properties @@ -0,0 +1,4 @@ +rotate.name=Gira +rotate.description=Rotate the graph by degrees +rotate.angle.name=Angle +rotate.angle.desc=Clockwise rotation angle in degrees (can be negative for counter-clockwise) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_cs.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_cs.properties index deed9ef88d..c0fde99eba 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_cs.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_cs.properties @@ -1,19 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-26 20\:28+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -counterclockwise.name=Oto\u010den proti sm\u011bru hodinov\u00fdch ru\u010di\u010dek - -counterclockwise.description=Oto\u010dit graf o -90 stup\u0148\u016f - -clockwise.name=Oto\u010den po sm\u011bru hodinov\u00fdch ru\u010di\u010dek - -clockwise.description=Oto\u010dit graf o 90 stup\u0148\u016f - -clockwise.angle.name=\u00dahel - -clockwise.angle.desc=\u00dahel oto\u010den\u00ed po sm\u011bru hodinov\u00fdch ru\u010di\u010dek ve stupn\u00edch +# rotate.name=Rotate +# rotate.description=Rotate the graph by degrees + +# rotate.angle.name=Angle +# rotate.angle.desc=Clockwise rotation angle in degrees (can be negative for counter-clockwise) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_de.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_de.properties new file mode 100644 index 0000000000..1710e6fe1c --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_de.properties @@ -0,0 +1,8 @@ +# rotate.name=Rotate +# rotate.description=Rotate the graph by degrees + +# rotate.angle.name=Angle +# rotate.angle.desc=Clockwise rotation angle in degrees (can be negative for counter-clockwise) + +rotate.name=Drehen +rotate.description=Rotiere den Graph in Grad diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_es.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_es.properties index 2bf8e8ece5..a3431f063c 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_es.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_es.properties @@ -1,19 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:01+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -counterclockwise.name=Rotar en el sentido inverso de las agujas del reloj - -counterclockwise.description=Rotar el grafo 90 grados - -clockwise.name=Rotar en el sentido de las agujas del reloj - -clockwise.description=Rotar el grafo 90 grados - -clockwise.angle.name=\u00c1ngulo - -clockwise.angle.desc=\u00c1ngulo de rotaci\u00f3n en el sentido de las agujas del reloj en grados +rotate.name=Rotar +rotate.description=Rotar el grafo en grados + +rotate.angle.name=Αngulo +rotate.angle.desc=Αngulo de rotaciσn en el sentido de las agujas del reloj en grados (puede ser negativo para que sea contrario al sentido de las agujas del reloj) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_fr.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_fr.properties index 82214a9507..ff12b9c209 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_fr.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_fr.properties @@ -1,19 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:01+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -counterclockwise.name=Rotation sens anti-horaire - -counterclockwise.description=Rotation du graphe par -90 degr\u00e9 - -clockwise.name=Rotation sens horaire - -clockwise.description=Rotation du graphe par 90 degr\u00e9 - -clockwise.angle.name=Angle - -clockwise.angle.desc=Angle de rotation dans le sens horaire, en degr\u00e9s. +rotate.name=Rotation +rotate.description=Rotation du graphe par degrι +rotate.angle.name=Angle +rotate.angle.desc=Angle de rotation dans le sens horaire, en degrιs (peut κtre nιgatif en sens anti-horaire). diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_he.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_he.properties new file mode 100644 index 0000000000..b8a948b588 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_he.properties @@ -0,0 +1,4 @@ +rotate.name=Rotate +rotate.description=Rotate the graph by degrees +rotate.angle.name=Angle +rotate.angle.desc=Clockwise rotation angle in degrees (can be negative for counter-clockwise) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_hu.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_hu.properties new file mode 100644 index 0000000000..4de813c599 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_hu.properties @@ -0,0 +1,6 @@ + + +rotate.angle.desc=Az \u00F3ramutat\u00F3 j\u00E1r\u00E1s\u00E1val megegyez\u0151 forg\u00E1si sz\u00F6g fokban (az \u00F3ramutat\u00F3 j\u00E1r\u00E1s\u00E1val ellent\u00E9tes ir\u00E1nyban negat\u00EDv is lehet) +rotate.name=Forog +rotate.description=Forgassa el a grafikont fokkal +rotate.angle.name=Sz\u00F6g diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_it.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_it.properties new file mode 100644 index 0000000000..61cc5c86e6 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_it.properties @@ -0,0 +1,4 @@ +rotate.name=Ruota +rotate.description=Rotate the graph by degrees +rotate.angle.name=Angle +rotate.angle.desc=Clockwise rotation angle in degrees (can be negative for counter-clockwise) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_ja.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_ja.properties index 220996721b..c0fde99eba 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_ja.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_ja.properties @@ -1,19 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-18 09\:43+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -counterclockwise.name=\u53cd\u6642\u8a08\u56de\u308a\u306b\u56de\u8ee2 - -counterclockwise.description=-90\u5ea6\u3067\u30b0\u30e9\u30d5\u3092\u56de\u8ee2 - -clockwise.name=\u6642\u8a08\u56de\u308a\u306b\u56de\u8ee2 - -clockwise.description=90\u5ea6\u3067\u30b0\u30e9\u30d5\u3092\u56de\u8ee2 - -clockwise.angle.name=\u89d2\u5ea6 - -clockwise.angle.desc=\u89d2\u5ea6\u306e\u6642\u8a08\u56de\u308a\u306e\u56de\u8ee2 +# rotate.name=Rotate +# rotate.description=Rotate the graph by degrees + +# rotate.angle.name=Angle +# rotate.angle.desc=Clockwise rotation angle in degrees (can be negative for counter-clockwise) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_ko.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_ko.properties new file mode 100644 index 0000000000..c1786a0da6 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_ko.properties @@ -0,0 +1,6 @@ + + +rotate.angle.desc=\uC2DC\uACC4 \uBC29\uD5A5 \uD68C\uC804 \uAC01\uB3C4 (\uBC18\uC2DC\uACC4 \uBC29\uD5A5\uC740 \uC74C\uC218) +rotate.name=\uD68C\uC804 +rotate.description=\uAC01\uB3C4\uB85C \uADF8\uB798\uD504 \uD68C\uC804\uD558\uAE30 +rotate.angle.name=\uAC01\uB3C4 diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_nl.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_nl.properties new file mode 100644 index 0000000000..f83235c3b2 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_nl.properties @@ -0,0 +1,4 @@ +rotate.name=Rotate +rotate.description=Rotate the graph by degrees +rotate.angle.name=Hoek +rotate.angle.desc=Clockwise rotation angle in degrees (can be negative for counter-clockwise) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_pt_BR.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_pt_BR.properties index 5f3a74f890..5e7bb1e92f 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_pt_BR.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_pt_BR.properties @@ -1,19 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 01\:44+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n +# rotate.name=Rotate +# rotate.description=Rotate the graph by degrees -counterclockwise.name=\ Girar no sentido anti-hor\u00e1rio +# rotate.angle.name=Angle +# rotate.angle.desc=Clockwise rotation angle in degrees (can be negative for counter-clockwise) -counterclockwise.description=Girar o grafo -90 graus - -clockwise.name=\ Girar no sentido hor\u00e1rio - -clockwise.description=Girar o grafo 90 graus - -clockwise.angle.name=\u00c2ngulo - -clockwise.angle.desc=\u00c2ngulo de rota\u00e7\u00e3o no sentido hor\u00e1rio em graus +rotate.name=Girar +rotate.description=Girar o gr\u00E1fico em graus diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_ro.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_ro.properties new file mode 100644 index 0000000000..d456ef74ea --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_ro.properties @@ -0,0 +1,6 @@ + + +rotate.description=Rote\u0219te graful cu un num\u0103r de grade +rotate.angle.desc=Unghiul de rota\u021Bie \u00EEn sensul acelor de ceasornic \u00EEn grade (poate fi negativ pentru sensul invers acelor de ceasornic) +rotate.name=Rota\u021Bie +rotate.angle.name=Unghi diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_ru.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_ru.properties index 34d2743c75..e3c9f4b4e1 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_ru.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_ru.properties @@ -1,19 +1,7 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-09 07\:43+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n +# rotate.name=Rotate +# rotate.description=Rotate the graph by degrees -counterclockwise.name=\u041f\u043e\u0432\u043e\u0440\u043e\u0442 \u043f\u0440\u043e\u0442\u0438\u0432 \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u0438 +# rotate.angle.name=Angle +# rotate.angle.desc=Clockwise rotation angle in degrees (can be negative for counter-clockwise) -counterclockwise.description=\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0433\u0440\u0430\u0444 \u043d\u0430 -90 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432 - -clockwise.name=\u041f\u043e\u0432\u043e\u0440\u043e\u0442 \u043f\u043e \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u0435 - -clockwise.description=\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0433\u0440\u0430\u0444 \u043d\u0430 90 \u0433\u0440\u0430\u0434\u0443\u0441\u043e\u0432 - -clockwise.angle.name=\u0423\u0433\u043e\u043b - -clockwise.angle.desc=\u041f\u043e\u0432\u043e\u0440\u043e\u0442 \u0433\u0440\u0430\u0444\u0430 \u043f\u043e \u0447\u0430\u0441\u043e\u0432\u043e\u0439 \u0441\u0442\u0440\u0435\u043b\u043a\u0435 \u0432 \u0433\u0440\u0430\u0434\u0443\u0441\u0430\u0445 +rotate.angle.name=\u0423\u0433\u043E\u043B diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_th.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_tr.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_tr.properties new file mode 100644 index 0000000000..ad34742485 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_tr.properties @@ -0,0 +1,4 @@ +rotate.name=D\u00F6nd\u00FCrmek +rotate.description=Rotate the graph by degrees +rotate.angle.name=Angle +rotate.angle.desc=Clockwise rotation angle in degrees (can be negative for counter-clockwise) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_uk.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_uk.properties new file mode 100644 index 0000000000..e64160989e --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_uk.properties @@ -0,0 +1,4 @@ +rotate.name=\u041E\u0431\u0435\u0440\u0442\u0430\u0442\u0438 +rotate.description=\u041F\u043E\u0432\u0435\u0440\u043D\u0456\u0442\u044C \u0433\u0440\u0430\u0444\u0456\u043A \u043D\u0430 \u0433\u0440\u0430\u0434\u0443\u0441\u0438 +rotate.angle.name=\u041A\u0443\u0442 +rotate.angle.desc=\u041A\u0443\u0442 \u043F\u043E\u0432\u043E\u0440\u043E\u0442\u0443 \u0437\u0430 \u0433\u043E\u0434\u0438\u043D\u043D\u0438\u043A\u043E\u0432\u043E\u044E \u0441\u0442\u0440\u0456\u043B\u043A\u043E\u044E \u0432 \u0433\u0440\u0430\u0434\u0443\u0441\u0430\u0445 (\u043C\u043E\u0436\u0435 \u0431\u0443\u0442\u0438 \u0432\u0456\u0434\u2019\u0454\u043C\u043D\u0438\u043C \u0434\u043B\u044F \u043F\u043E\u0432\u043E\u0440\u043E\u0442\u0443 \u043F\u0440\u043E\u0442\u0438 \u0433\u043E\u0434\u0438\u043D\u043D\u0438\u043A\u043E\u0432\u043E\u0457 \u0441\u0442\u0440\u0456\u043B\u043A\u0438) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_zh_CN.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_zh_CN.properties index c31a2cf594..de0481a7cf 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_zh_CN.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_zh_CN.properties @@ -1,18 +1,10 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:10+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n +# rotate.name=Rotate +# rotate.description=Rotate the graph by degrees -counterclockwise.name=\u53cd\u987a\u65f6\u9488\u65cb\u8f6c +# rotate.angle.name=Angle +# rotate.angle.desc=Clockwise rotation angle in degrees (can be negative for counter-clockwise) -counterclockwise.description=\u65cb\u8f6c-90\u5ea6\u56fe - -clockwise.name=\u987a\u65f6\u9488\u65cb\u8f6c - -clockwise.description=\u65cb\u8f6c90\u5ea6\u7684\u56fe - -clockwise.angle.name=\u89d2 - -clockwise.angle.desc=\u5ea6\u987a\u65f6\u9488\u65cb\u8f6c\u7684\u89d2\u5ea6 +rotate.name=\u65CB\u8F6C +rotate.description=\u4EE5\u5EA6\u6570\u65CB\u8F6C\u56FE\u5F62 +rotate.angle.name=\u89D2\u5EA6 +rotate.angle.desc=\u4EE5\u5EA6\u4E3A\u5355\u4F4D\u7684\u987A\u65F6\u9488\u65CB\u8F6C\u89D2\u5EA6\uFF08\u9006\u65F6\u9488\u53EF\u4EE5\u4E3A\u8D1F\uFF09 diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_zh_TW.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_zh_TW.properties new file mode 100644 index 0000000000..b8a948b588 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/Bundle_zh_TW.properties @@ -0,0 +1,4 @@ +rotate.name=Rotate +rotate.description=Rotate the graph by degrees +rotate.angle.name=Angle +rotate.angle.desc=Clockwise rotation angle in degrees (can be negative for counter-clockwise) diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/cs.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/cs.po deleted file mode 100644 index 87bb30a9ad..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/cs.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-26 20:28+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "counterclockwise.name" -msgstr "Otočen proti smΔ›ru hodinovΓ½ch ručiček" - -msgid "counterclockwise.description" -msgstr "Otočit graf o -90 stupňů" - -msgid "clockwise.name" -msgstr "Otočen po smΔ›ru hodinovΓ½ch ručiček" - -msgid "clockwise.description" -msgstr "Otočit graf o 90 stupňů" - -msgid "clockwise.angle.name" -msgstr "Úhel" - -msgid "clockwise.angle.desc" -msgstr "Úhel otočenΓ­ po smΔ›ru hodinovΓ½ch ručiček ve stupnΓ­ch" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/es.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/es.po deleted file mode 100644 index e203988d90..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/es.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:01+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "counterclockwise.name" -msgstr "Rotar en el sentido inverso de las agujas del reloj" - -msgid "counterclockwise.description" -msgstr "Rotar el grafo 90 grados" - -msgid "clockwise.name" -msgstr "Rotar en el sentido de las agujas del reloj" - -msgid "clockwise.description" -msgstr "Rotar el grafo 90 grados" - -msgid "clockwise.angle.name" -msgstr "Ángulo" - -msgid "clockwise.angle.desc" -msgstr "Ángulo de rotaciΓ³n en el sentido de las agujas del reloj en grados" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/fr.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/fr.po deleted file mode 100644 index 7bca7f987b..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/fr.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:01+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "counterclockwise.name" -msgstr "Rotation sens anti-horaire" - -msgid "counterclockwise.description" -msgstr "Rotation du graphe par -90 degrΓ©" - -msgid "clockwise.name" -msgstr "Rotation sens horaire" - -msgid "clockwise.description" -msgstr "Rotation du graphe par 90 degrΓ©" - -msgid "clockwise.angle.name" -msgstr "Angle" - -msgid "clockwise.angle.desc" -msgstr "Angle de rotation dans le sens horaire, en degrΓ©s." diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/ja.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/ja.po deleted file mode 100644 index 9e3b02dc98..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/ja.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-18 09:43+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "counterclockwise.name" -msgstr "εζ™‚θ¨ˆε›žγ‚Šγ«ε›žθ»’" - -msgid "counterclockwise.description" -msgstr "-90εΊ¦γ§γ‚°γƒ©γƒ•γ‚’ε›žθ»’" - -msgid "clockwise.name" -msgstr "ζ™‚θ¨ˆε›žγ‚Šγ«ε›žθ»’" - -msgid "clockwise.description" -msgstr "90εΊ¦γ§γ‚°γƒ©γƒ•γ‚’ε›žθ»’" - -msgid "clockwise.angle.name" -msgstr "θ§’εΊ¦" - -msgid "clockwise.angle.desc" -msgstr "θ§’εΊ¦γζ™‚θ¨ˆε›žγ‚Šγε›žθ»’" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/org-gephi-layout-plugin-rotate.pot b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/org-gephi-layout-plugin-rotate.pot deleted file mode 100644 index 17224ce35a..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/org-gephi-layout-plugin-rotate.pot +++ /dev/null @@ -1,34 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "counterclockwise.name" -msgstr "Counter-Clockwise Rotate" - -msgid "counterclockwise.description" -msgstr "Rotate the graph by -90 degrees" - -msgid "clockwise.name" -msgstr "Clockwise Rotate" - -msgid "clockwise.description" -msgstr "Rotate the graph by 90 degrees" - -msgid "clockwise.angle.name" -msgstr "Angle" - -msgid "clockwise.angle.desc" -msgstr "Clockwise rotation angle in degrees" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/pt_BR.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/pt_BR.po deleted file mode 100644 index 763bfa08c5..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/pt_BR.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 01:44+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "counterclockwise.name" -msgstr " Girar no sentido anti-horΓ‘rio" - -msgid "counterclockwise.description" -msgstr "Girar o grafo -90 graus" - -msgid "clockwise.name" -msgstr " Girar no sentido horΓ‘rio" - -msgid "clockwise.description" -msgstr "Girar o grafo 90 graus" - -msgid "clockwise.angle.name" -msgstr "Γ‚ngulo" - -msgid "clockwise.angle.desc" -msgstr "Γ‚ngulo de rotaΓ§Γ£o no sentido horΓ‘rio em graus" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/ru.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/ru.po deleted file mode 100644 index 475d491669..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/ru.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-09 07:43+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "counterclockwise.name" -msgstr "ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ ΠΏΡ€ΠΎΡ‚ΠΈΠ² часовой стрСлки" - -msgid "counterclockwise.description" -msgstr "ΠŸΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π³Ρ€Π°Ρ„ Π½Π° -90 градусов" - -msgid "clockwise.name" -msgstr "ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ ΠΏΠΎ часовой стрСлкС" - -msgid "clockwise.description" -msgstr "ΠŸΠΎΠ²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π³Ρ€Π°Ρ„ Π½Π° 90 градусов" - -msgid "clockwise.angle.name" -msgstr "Π£Π³ΠΎΠ»" - -msgid "clockwise.angle.desc" -msgstr "ΠŸΠΎΠ²ΠΎΡ€ΠΎΡ‚ Π³Ρ€Π°Ρ„Π° ΠΏΠΎ часовой стрСлкС Π² градусах" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/zh_CN.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/zh_CN.po deleted file mode 100644 index 224f7b7626..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/rotate/zh_CN.po +++ /dev/null @@ -1,36 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:10+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "counterclockwise.name" -msgstr "ει‘Ίζ—Άι’ˆζ—‹θ½¬" - -msgid "counterclockwise.description" -msgstr "旋转-90εΊ¦ε›Ύ" - -msgid "clockwise.name" -msgstr "ι‘Ίζ—Άι’ˆζ—‹θ½¬" - -msgid "clockwise.description" -msgstr "旋转90εΊ¦ηš„ε›Ύ" - -msgid "clockwise.angle.name" -msgstr "θ§’" - -msgid "clockwise.angle.desc" -msgstr "εΊ¦ι‘Ίζ—Άι’ˆζ—‹θ½¬ηš„θ§’εΊ¦" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/ru.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/ru.po deleted file mode 100644 index 234a8e3b35..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/ru.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-08 06:24+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "РСализация стандартной ΡƒΠΊΠ»Π°Π΄ΠΊΠΈ" - -msgid "OpenIDE-Module-Short-Description" -msgstr "РСализация стандартной ΡƒΠΊΠ»Π°Π΄ΠΊΠΈ" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_ar.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_ca.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_ca.properties new file mode 100644 index 0000000000..c99c853187 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_ca.properties @@ -0,0 +1,6 @@ +expand.name=Expansiσ +expand.description=Expandeix el disseny a partir del centre +contract.name=Concentraciσ +contract.description=Contracts the layout around its center. +ScaleLayout.scaleFactor.name=Factor d'escalada +ScaleLayout.scaleFactor.desc=Factor d'escalada diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_cs.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_cs.properties index 773bdbe8a2..98cf7e08a4 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_cs.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_cs.properties @@ -1,19 +1,7 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-26 20\:18+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -expand.name=Roz\u0161\u00ed\u0159en\u00ed - -expand.description=Roz\u0161\u00ed\u0159\u00ed rozlo\u017een\u00ed okolo st\u0159edu - -contract.name=Smr\u0161t\u011bn\u00ed - -contract.description=Smr\u0161t\u00ed rozlo\u017een\u00ed okolo st\u0159edu - -ScaleLayout.scaleFactor.name=M\u011b\u0159\u00edtko - -ScaleLayout.scaleFactor.desc=M\u011b\u0159\u00edtko +expand.name=Roz\u0161ν\u0159enν +expand.description=Roz\u0161ν\u0159ν rozlo\u017eenν okolo st\u0159edu +contract.name=Smr\u0161t\u011bnν +contract.description=Smr\u0161tν rozlo\u017eenν okolo st\u0159edu + +ScaleLayout.scaleFactor.name=M\u011b\u0159νtko +ScaleLayout.scaleFactor.desc=M\u011b\u0159νtko diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_de.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_de.properties new file mode 100644 index 0000000000..1380144210 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_de.properties @@ -0,0 +1,6 @@ +expand.name=Expansion +expand.description=Expandiert das Layout um das Zentrum +contract.name=Zusammenziehen +contract.description=Zieht das Layout um das Zentrum herum zusammen +ScaleLayout.scaleFactor.name=Maίstabsfaktor +ScaleLayout.scaleFactor.desc=Maίsstabsfaktor diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_es.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_es.properties index 9e9c5a340e..0485bbddb8 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_es.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_es.properties @@ -1,19 +1,7 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:01+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -expand.name=Expansi\u00f3n - -expand.description=Expande la distribuci\u00f3n alrededor de su centro. - -contract.name=Contracci\u00f3n - -contract.description=Contrae la distribuci\u00f3n alrededor de su centro. - -ScaleLayout.scaleFactor.name=Factor de escalado - -ScaleLayout.scaleFactor.desc=Factor de escalado +expand.name=Expansiσn +expand.description=Expande la distribuciσn alrededor de su centro. +contract.name=Contracciσn +contract.description=Contrae la distribuciσn alrededor de su centro. + +ScaleLayout.scaleFactor.name=Factor de escalado +ScaleLayout.scaleFactor.desc=Factor de escalado diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_fr.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_fr.properties index 08c155e5ba..d080ad7652 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_fr.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_fr.properties @@ -1,19 +1,6 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:01+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - expand.name=Expansion - -expand.description=\u00c9tend la spatialisation autour de son centre. - +expand.description=Ιtend la spatialisation autour de son centre. contract.name=Contraction - contract.description=Contracte la spatialisation autour de son centre. - -ScaleLayout.scaleFactor.name=Facteur d'\u00e9chelle - -ScaleLayout.scaleFactor.desc=Facteur d'\u00e9chelle +ScaleLayout.scaleFactor.name=Facteur d'ιchelle +ScaleLayout.scaleFactor.desc=Facteur d'ιchelle diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_he.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_he.properties new file mode 100644 index 0000000000..7b6ee2654d --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_he.properties @@ -0,0 +1,6 @@ +expand.name=Expansion +expand.description=Expands the layout around its center. +contract.name=Contraction +contract.description=Contracts the layout around its center. +ScaleLayout.scaleFactor.name=Scale factor +ScaleLayout.scaleFactor.desc=Scale factor diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_hu.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_hu.properties new file mode 100644 index 0000000000..4113fb3d11 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_hu.properties @@ -0,0 +1,8 @@ + + +ScaleLayout.scaleFactor.name=Sk\u00E1la t\u00E9nyez\u0151 +contract.name=\u00D6sszeh\u00FAz\u00F3d\u00E1s +ScaleLayout.scaleFactor.desc=L\u00E9pt\u00E9kt\u00E9nyez\u0151 +expand.description=Kib\u0151v\u00EDti az elrendez\u00E9st a k\u00F6z\u00E9ppontja k\u00F6r\u00FCl. +contract.description=\u00D6sszeh\u00FAzza az elrendez\u00E9st a k\u00F6z\u00E9ppontja k\u00F6r\u00FCl. +expand.name=Terjeszked\u00E9s diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_it.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_it.properties new file mode 100644 index 0000000000..0d07363e9b --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_it.properties @@ -0,0 +1,6 @@ +expand.name=Espansione +expand.description=Expands the layout around its center. +contract.name=Contraction +contract.description=Contracts the layout around its center. +ScaleLayout.scaleFactor.name=Scale factor +ScaleLayout.scaleFactor.desc=Scale factor diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_ja.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_ja.properties index feb42e54b7..c6c5da355a 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_ja.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_ja.properties @@ -1,19 +1,7 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-03 10\:38+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -expand.name=\u62e1\u5927 - -expand.description=\u4e2d\u5fc3\u306e\u5468\u308a\u306e\u30ec\u30a4\u30a2\u30a6\u30c8\u3092\u62e1\u5927 - -contract.name=\u7e2e\u5c0f - -contract.description=\u4e2d\u5fc3\u306e\u5468\u308a\u306e\u30ec\u30a4\u30a2\u30a6\u30c8\u3092\u7e2e\u5c0f - -ScaleLayout.scaleFactor.name=\u30b9\u30b1\u30fc\u30eb\u30d5\u30a1\u30af\u30bf - -ScaleLayout.scaleFactor.desc=\u30b9\u30b1\u30fc\u30eb\u30d5\u30a1\u30af\u30bf +expand.name=\u62e1\u5927 +expand.description=\u4e2d\u5fc3\u306e\u5468\u308a\u306e\u30ec\u30a4\u30a2\u30a6\u30c8\u3092\u62e1\u5927 +contract.name=\u7e2e\u5c0f +contract.description=\u4e2d\u5fc3\u306e\u5468\u308a\u306e\u30ec\u30a4\u30a2\u30a6\u30c8\u3092\u7e2e\u5c0f + +ScaleLayout.scaleFactor.name=\u30b9\u30b1\u30fc\u30eb\u30d5\u30a1\u30af\u30bf +ScaleLayout.scaleFactor.desc=\u30b9\u30b1\u30fc\u30eb\u30d5\u30a1\u30af\u30bf diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_ko.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_ko.properties new file mode 100644 index 0000000000..992b1f487f --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_ko.properties @@ -0,0 +1,8 @@ + + +expand.name=\uD655\uC7A5 +contract.name=\uCD95\uC18C +contract.description=\uB808\uC774\uC544\uC6C3\uC744 \uC911\uC2EC \uC8FC\uC704\uB85C \uCD95\uC18C\uD569\uB2C8\uB2E4. +ScaleLayout.scaleFactor.name=\uCD95\uCC99 \uAC12 +ScaleLayout.scaleFactor.desc=\uCD95\uCC99 \uAC12 +expand.description=\uB808\uC774\uC544\uC6C3\uC744 \uC911\uC2EC \uC8FC\uC704\uB85C \uD655\uC7A5\uD569\uB2C8\uB2E4. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_nl.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_nl.properties new file mode 100644 index 0000000000..7b6ee2654d --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_nl.properties @@ -0,0 +1,6 @@ +expand.name=Expansion +expand.description=Expands the layout around its center. +contract.name=Contraction +contract.description=Contracts the layout around its center. +ScaleLayout.scaleFactor.name=Scale factor +ScaleLayout.scaleFactor.desc=Scale factor diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_pt_BR.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_pt_BR.properties index 88e94ad1b3..475af41532 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_pt_BR.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_pt_BR.properties @@ -1,19 +1,7 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 00\:42+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -expand.name=Expans\u00e3o - -expand.description=Expande a distribui\u00e7\u00e3o em torno de seu centro. - -contract.name=Contra\u00e7\u00e3o - -contract.description=Contrai a distribui\u00e7\u00e3o em torno de seu centro. - -ScaleLayout.scaleFactor.name=Fator de escala - -ScaleLayout.scaleFactor.desc=Fator de escala +expand.name=Expansγo +expand.description=Expande a distribuiηγo em torno de seu centro. +contract.name=Contraηγo +contract.description=Contrai a distribuiηγo em torno de seu centro. + +ScaleLayout.scaleFactor.name=Fator de escala +ScaleLayout.scaleFactor.desc=Fator de escala diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_ro.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_ro.properties new file mode 100644 index 0000000000..df53f1fb84 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_ro.properties @@ -0,0 +1,8 @@ + + +contract.description=Contract\u0103 dispunerea grafului \u00EEn jurul centrului. +ScaleLayout.scaleFactor.name=Factor de scar\u0103 +expand.description=Extinde dispunerea grafului \u00EEn jurul centrului. +contract.name=Contrac\u021Bie +expand.name=Expansiune +ScaleLayout.scaleFactor.desc=Factor de scar\u0103 diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_ru.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_ru.properties index e05dfff31e..851aebe3b1 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_ru.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_ru.properties @@ -1,19 +1,7 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-11-18 07\:09+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -expand.name=\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 - -expand.description=\u0420\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442 \u0443\u043a\u043b\u0430\u0434\u043a\u0443 \u0433\u0440\u0430\u0444\u0430 \u0432\u043e\u043a\u0440\u0443\u0433 \u0435\u0451 \u0446\u0435\u043d\u0442\u0440\u0430 - -contract.name=\u0421\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 - -contract.description=\u0421\u0436\u0438\u043c\u0430\u0435\u0442 \u0443\u043a\u043b\u0430\u0434\u043a\u0443 \u0433\u0440\u0430\u0444\u0430 \u0432\u043e\u043a\u0440\u0443\u0433 \u0435\u0451 \u0446\u0435\u043d\u0442\u0440\u0430 - -ScaleLayout.scaleFactor.name=\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f - -ScaleLayout.scaleFactor.desc=\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f +expand.name=\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 +expand.description=\u0420\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u0442 \u0443\u043a\u043b\u0430\u0434\u043a\u0443 \u0433\u0440\u0430\u0444\u0430 \u0432\u043e\u043a\u0440\u0443\u0433 \u0435\u0451 \u0446\u0435\u043d\u0442\u0440\u0430 +contract.name=\u0421\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u0435 +contract.description=\u0421\u0436\u0438\u043c\u0430\u0435\u0442 \u0443\u043a\u043b\u0430\u0434\u043a\u0443 \u0433\u0440\u0430\u0444\u0430 \u0432\u043e\u043a\u0440\u0443\u0433 \u0435\u0451 \u0446\u0435\u043d\u0442\u0440\u0430 + +ScaleLayout.scaleFactor.name=\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f +ScaleLayout.scaleFactor.desc=\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_th.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_tr.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_tr.properties new file mode 100644 index 0000000000..64ef3900f4 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_tr.properties @@ -0,0 +1,6 @@ +expand.name=Geni\u015Flik +expand.description=Expands the layout around its center. +contract.name=Contraction +contract.description=Contracts the layout around its center. +ScaleLayout.scaleFactor.name=Scale factor +ScaleLayout.scaleFactor.desc=Scale factor diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_uk.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_uk.properties new file mode 100644 index 0000000000..3a392c6f97 --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_uk.properties @@ -0,0 +1,6 @@ +expand.name=\u0420\u043E\u0437\u0448\u0438\u0440\u0435\u043D\u043D\u044F +expand.description=\u0420\u043E\u0437\u0433\u043E\u0440\u0442\u0430\u0454 \u043C\u0430\u043A\u0435\u0442 \u043D\u0430\u0432\u043A\u043E\u043B\u043E \u0439\u043E\u0433\u043E \u0446\u0435\u043D\u0442\u0440\u0443. +contract.name=\u0421\u043A\u043E\u0440\u043E\u0447\u0435\u043D\u043D\u044F +ScaleLayout.scaleFactor.name=\u041A\u043E\u0435\u0444\u0456\u0446\u0456\u0454\u043D\u0442 \u043C\u0430\u0441\u0448\u0442\u0430\u0431\u0443 +ScaleLayout.scaleFactor.desc=\u041A\u043E\u0435\u0444\u0456\u0446\u0456\u0454\u043D\u0442 \u043C\u0430\u0441\u0448\u0442\u0430\u0431\u0443 +contract.description=\u0417\u0433\u043E\u0440\u0442\u0430\u0454 \u043C\u0430\u043A\u0435\u0442 \u043D\u0430\u0432\u043A\u043E\u043B\u043E \u0439\u043E\u0433\u043E \u0446\u0435\u043D\u0442\u0440\u0443. diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_zh_CN.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_zh_CN.properties index 7dfbda617f..9716d1c1f3 100644 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_zh_CN.properties +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_zh_CN.properties @@ -1,18 +1,7 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:09+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -expand.name=\u6269\u5c55 - -expand.description=\u56f4\u7ed5\u5176\u4e2d\u5fc3\u5c55\u5f00\u5e03\u5c40\u3002 - -contract.name=\u6536\u7f29 - -contract.description=\u56f4\u7ed5\u4e2d\u5fc3\u7684\u7f29\u5c0f\u5e03\u5c40\u3002 - -ScaleLayout.scaleFactor.name=\u6bd4\u4f8b\u56e0\u5b50 - -ScaleLayout.scaleFactor.desc=\u6bd4\u4f8b\u56e0\u5b50 +expand.name=\u6269\u5c55 +expand.description=\u56f4\u7ed5\u5176\u4e2d\u5fc3\u5c55\u5f00\u5e03\u5c40\u3002 +contract.name=\u6536\u7f29 +contract.description=\u56f4\u7ed5\u4e2d\u5fc3\u7684\u7f29\u5c0f\u5e03\u5c40\u3002 + +ScaleLayout.scaleFactor.name=\u6bd4\u4f8b\u56e0\u5b50 +ScaleLayout.scaleFactor.desc=\u6bd4\u4f8b\u56e0\u5b50 diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_zh_TW.properties b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_zh_TW.properties new file mode 100644 index 0000000000..7b6ee2654d --- /dev/null +++ b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/Bundle_zh_TW.properties @@ -0,0 +1,6 @@ +expand.name=Expansion +expand.description=Expands the layout around its center. +contract.name=Contraction +contract.description=Contracts the layout around its center. +ScaleLayout.scaleFactor.name=Scale factor +ScaleLayout.scaleFactor.desc=Scale factor diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/cs.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/cs.po deleted file mode 100644 index 0bdbcc90c0..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/cs.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-26 20:18+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "expand.name" -msgstr "RozΕ‘Γ­Ε™enΓ­" - -msgid "expand.description" -msgstr "RozΕ‘Γ­Ε™Γ­ rozloΕΎenΓ­ okolo stΕ™edu" - -msgid "contract.name" -msgstr "SmrΕ‘tΔ›nΓ­" - -msgid "contract.description" -msgstr "SmrΕ‘tΓ­ rozloΕΎenΓ­ okolo stΕ™edu" - -msgid "ScaleLayout.scaleFactor.name" -msgstr "MΔ›Ε™Γ­tko" - -msgid "ScaleLayout.scaleFactor.desc" -msgstr "MΔ›Ε™Γ­tko" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/es.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/es.po deleted file mode 100644 index fd5f042a06..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/es.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:01+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "expand.name" -msgstr "ExpansiΓ³n" - -msgid "expand.description" -msgstr "Expande la distribuciΓ³n alrededor de su centro." - -msgid "contract.name" -msgstr "ContracciΓ³n" - -msgid "contract.description" -msgstr "Contrae la distribuciΓ³n alrededor de su centro." - -msgid "ScaleLayout.scaleFactor.name" -msgstr "Factor de escalado" - -msgid "ScaleLayout.scaleFactor.desc" -msgstr "Factor de escalado" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/fr.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/fr.po deleted file mode 100644 index 4b4a7ef007..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/fr.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:01+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "expand.name" -msgstr "Expansion" - -msgid "expand.description" -msgstr "Γ‰tend la spatialisation autour de son centre." - -msgid "contract.name" -msgstr "Contraction" - -msgid "contract.description" -msgstr "Contracte la spatialisation autour de son centre." - -msgid "ScaleLayout.scaleFactor.name" -msgstr "Facteur d'Γ©chelle" - -msgid "ScaleLayout.scaleFactor.desc" -msgstr "Facteur d'Γ©chelle" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/ja.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/ja.po deleted file mode 100644 index e5615186a1..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/ja.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-03 10:38+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "expand.name" -msgstr "ζ‹‘ε€§" - -msgid "expand.description" -msgstr "δΈ­εΏƒγε‘¨γ‚Šγγƒ¬γ‚€γ‚’γ‚¦γƒˆγ‚’ζ‹‘ε€§" - -msgid "contract.name" -msgstr "ηΈε°" - -msgid "contract.description" -msgstr "δΈ­εΏƒγε‘¨γ‚Šγγƒ¬γ‚€γ‚’γ‚¦γƒˆγ‚’ηΈε°" - -msgid "ScaleLayout.scaleFactor.name" -msgstr "スケールフゑクタ" - -msgid "ScaleLayout.scaleFactor.desc" -msgstr "スケールフゑクタ" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/org-gephi-layout-plugin-scale.pot b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/org-gephi-layout-plugin-scale.pot deleted file mode 100644 index 0d83f26a0f..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/org-gephi-layout-plugin-scale.pot +++ /dev/null @@ -1,34 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "expand.name" -msgstr "Expansion" - -msgid "expand.description" -msgstr "Expands the layout around its center." - -msgid "contract.name" -msgstr "Contraction" - -msgid "contract.description" -msgstr "Contracts the layout around its center." - -msgid "ScaleLayout.scaleFactor.name" -msgstr "Scale factor" - -msgid "ScaleLayout.scaleFactor.desc" -msgstr "Scale factor" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/pt_BR.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/pt_BR.po deleted file mode 100644 index e9cb05f450..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/pt_BR.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 00:42+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "expand.name" -msgstr "ExpansΓ£o" - -msgid "expand.description" -msgstr "Expande a distribuiΓ§Γ£o em torno de seu centro." - -msgid "contract.name" -msgstr "ContraΓ§Γ£o" - -msgid "contract.description" -msgstr "Contrai a distribuiΓ§Γ£o em torno de seu centro." - -msgid "ScaleLayout.scaleFactor.name" -msgstr "Fator de escala" - -msgid "ScaleLayout.scaleFactor.desc" -msgstr "Fator de escala" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/ru.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/ru.po deleted file mode 100644 index fb6003ae8e..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/ru.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-11-18 07:09+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "expand.name" -msgstr "Π Π°ΡΡˆΠΈΡ€Π΅Π½ΠΈΠ΅" - -msgid "expand.description" -msgstr "Π Π°ΡΡˆΠΈΡ€ΡΠ΅Ρ‚ ΡƒΠΊΠ»Π°Π΄ΠΊΡƒ Π³Ρ€Π°Ρ„Π° Π²ΠΎΠΊΡ€ΡƒΠ³ Π΅Ρ‘ Ρ†Π΅Π½Ρ‚Ρ€Π°" - -msgid "contract.name" -msgstr "Π‘ΠΎΠΊΡ€Π°Ρ‰Π΅Π½ΠΈΠ΅" - -msgid "contract.description" -msgstr "Π‘ΠΆΠΈΠΌΠ°Π΅Ρ‚ ΡƒΠΊΠ»Π°Π΄ΠΊΡƒ Π³Ρ€Π°Ρ„Π° Π²ΠΎΠΊΡ€ΡƒΠ³ Π΅Ρ‘ Ρ†Π΅Π½Ρ‚Ρ€Π°" - -msgid "ScaleLayout.scaleFactor.name" -msgstr "ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ" - -msgid "ScaleLayout.scaleFactor.desc" -msgstr "ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ ΠΌΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΡ" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/zh_CN.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/zh_CN.po deleted file mode 100644 index 80b1d916ff..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/scale/zh_CN.po +++ /dev/null @@ -1,36 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:09+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "expand.name" -msgstr "扩展" - -msgid "expand.description" -msgstr "围绕兢中心展开布局。" - -msgid "contract.name" -msgstr "ζ”ΆηΌ©" - -msgid "contract.description" -msgstr "ε›΄η»•δΈ­εΏƒηš„ηΌ©ε°εΈƒε±€γ€‚" - -msgid "ScaleLayout.scaleFactor.name" -msgstr "比例因子" - -msgid "ScaleLayout.scaleFactor.desc" -msgstr "比例因子" diff --git a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/zh_CN.po b/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/zh_CN.po deleted file mode 100644 index ebc25fb3d6..0000000000 --- a/modules/LayoutPlugin/src/main/resources/org/gephi/layout/plugin/zh_CN.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:09+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "标准布局εžηް" - -msgid "OpenIDE-Module-Short-Description" -msgstr "标准布局εžηް" diff --git a/modules/LayoutPlugin/src/test/java/org/gephi/layout/plugin/NoverlapTest.java b/modules/LayoutPlugin/src/test/java/org/gephi/layout/plugin/NoverlapTest.java new file mode 100644 index 0000000000..f36e6f3d5e --- /dev/null +++ b/modules/LayoutPlugin/src/test/java/org/gephi/layout/plugin/NoverlapTest.java @@ -0,0 +1,126 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.layout.plugin; + +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; +import org.gephi.io.importer.GraphImporter; +import org.gephi.layout.plugin.noverlap.NoverlapLayout; +import org.gephi.layout.plugin.noverlap.NoverlapLayoutBuilder; +import org.junit.Assert; +import org.junit.Test; + +/** + * @author Mathieu Jacomy + */ +public class NoverlapTest { + + private static final long FIXED_SEED = 42L; + private static final int MAX_ITERATIONS = 100; + + @Test + public void test2nodesNoverlap() { + GraphModel graphModel = GraphImporter.importGraph(NoverlapTest.class, "2nodes.gexf"); + + NoverlapLayout layout = createLayout(graphModel); + runLayout(layout); + layout.endAlgo(); + + Assert.assertTrue("Noverlap should converge for 2 overlapping nodes", layout.isConverged()); + assertNoOverlaps(graphModel, layout); + } + + @Test + public void test10KnodesNoverlap() { + GraphModel graphModel = GraphImporter.importGraph(NoverlapTest.class, "10K_randomlayout.gexf"); + + int nodeCountBefore = graphModel.getGraph().getNodeCount(); + + NoverlapLayout layout = createLayout(graphModel); + runLayout(layout); + layout.endAlgo(); + + Assert.assertEquals("Node count should not change after layout", nodeCountBefore, + graphModel.getGraph().getNodeCount()); + } + + private NoverlapLayout createLayout(GraphModel graphModel) { + NoverlapLayout layout = new NoverlapLayout(new NoverlapLayoutBuilder()); + layout.resetPropertiesValues(); + layout.setSeed(FIXED_SEED); + layout.setGraphModel(graphModel); + layout.initAlgo(); + return layout; + } + + private void runLayout(NoverlapLayout layout) { + for (int i = 0; i < MAX_ITERATIONS; i++) { + layout.goAlgo(); + if (layout.isConverged()) { + break; + } + } + } + + private void assertNoOverlaps(GraphModel graphModel, NoverlapLayout layout) { + Graph graph = graphModel.getGraph(); + Node[] nodes = graph.getNodes().toArray(); + double ratio = layout.getRatio(); + double margin = layout.getMargin(); + for (int i = 0; i < nodes.length; i++) { + for (int j = i + 1; j < nodes.length; j++) { + Node n1 = nodes[i]; + Node n2 = nodes[j]; + double dx = n2.x() - n1.x(); + double dy = n2.y() - n1.y(); + double dist = Math.sqrt(dx * dx + dy * dy); + double r1 = n1.size() * ratio + margin; + double r2 = n2.size() * ratio + margin; + Assert.assertTrue( + "Nodes " + n1.getId() + " and " + n2.getId() + " should not overlap after Noverlap", + dist >= r1 + r2 - 0.01); + } + } + } +} diff --git a/modules/LayoutPlugin/src/test/resources/org/gephi/layout/plugin/10K_randomlayout.gexf b/modules/LayoutPlugin/src/test/resources/org/gephi/layout/plugin/10K_randomlayout.gexf new file mode 100644 index 0000000000..0abecbd605 --- /dev/null +++ b/modules/LayoutPlugin/src/test/resources/org/gephi/layout/plugin/10K_randomlayout.gexf @@ -0,0 +1,50013 @@ + + + + Gephi 0.10.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/LayoutPlugin/src/test/resources/org/gephi/layout/plugin/2nodes.gexf b/modules/LayoutPlugin/src/test/resources/org/gephi/layout/plugin/2nodes.gexf new file mode 100644 index 0000000000..188c19d4d5 --- /dev/null +++ b/modules/LayoutPlugin/src/test/resources/org/gephi/layout/plugin/2nodes.gexf @@ -0,0 +1,23 @@ + + + + Gephi 0.10.1 + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/LayoutPlugin/src/test/resources/org/gephi/layout/plugin/basic.gexf b/modules/LayoutPlugin/src/test/resources/org/gephi/layout/plugin/basic.gexf new file mode 100644 index 0000000000..dc32f04c15 --- /dev/null +++ b/modules/LayoutPlugin/src/test/resources/org/gephi/layout/plugin/basic.gexf @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/LongTaskAPI/pom.xml b/modules/LongTaskAPI/pom.xml index 2ea2fc0507..47e3f38da1 100644 --- a/modules/LongTaskAPI/pom.xml +++ b/modules/LongTaskAPI/pom.xml @@ -4,13 +4,13 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi utils-longtask - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm LongTaskAPI @@ -24,12 +24,23 @@ org.netbeans.api org-openide-util + + + org.mockito + mockito-core + test + + + org.awaitility + awaitility + test + - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/LongTaskAPI/src/main/java/org/gephi/utils/longtask/api/LongTaskErrorHandler.java b/modules/LongTaskAPI/src/main/java/org/gephi/utils/longtask/api/LongTaskErrorHandler.java index cfeebcb1f5..963bed1715 100644 --- a/modules/LongTaskAPI/src/main/java/org/gephi/utils/longtask/api/LongTaskErrorHandler.java +++ b/modules/LongTaskAPI/src/main/java/org/gephi/utils/longtask/api/LongTaskErrorHandler.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.utils.longtask.api; /** @@ -49,5 +50,5 @@ Development and Distribution License("CDDL") (collectively, the */ public interface LongTaskErrorHandler { - public void fatalError(Throwable t); + void fatalError(Throwable t); } diff --git a/modules/LongTaskAPI/src/main/java/org/gephi/utils/longtask/api/LongTaskExecutor.java b/modules/LongTaskAPI/src/main/java/org/gephi/utils/longtask/api/LongTaskExecutor.java index 3730f06b94..28b2d527f7 100644 --- a/modules/LongTaskAPI/src/main/java/org/gephi/utils/longtask/api/LongTaskExecutor.java +++ b/modules/LongTaskAPI/src/main/java/org/gephi/utils/longtask/api/LongTaskExecutor.java @@ -39,11 +39,13 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.utils.longtask.api; import java.util.Timer; import java.util.TimerTask; -import java.util.concurrent.ExecutorService; +import java.util.concurrent.Callable; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.Future; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadFactory; @@ -69,38 +71,37 @@ Development and Distribution License("CDDL") (collectively, the public final class LongTaskExecutor { private final boolean inBackground; - private boolean interruptCancel; private final long interruptDelay; private final String name; - private RunningLongTask runningTask; - private ExecutorService executor; + private boolean interruptCancel; + private ThreadPoolExecutor executor; + private RunningLongTask currentTask; private Timer cancelTimer; private LongTaskListener listener; - private LongTaskErrorHandler errorHandler; private LongTaskErrorHandler defaultErrorHandler; /** * Creates a new long task executor. * * @param doInBackground when true, the task will be executed - * in a separate thread - * @param name the name of the executor, used to recognize threads by names - * @param interruptDelay number of seconds to wait before * - * calling Thread.interrupt() after a cancel request + * in a separate thread + * @param name the name of the executor, used to recognize threads by names + * @param interruptDelay number of seconds to wait before * calling + * Thread.interrupt() after a cancel request */ public LongTaskExecutor(boolean doInBackground, String name, int interruptDelay) { this.inBackground = doInBackground; this.name = name; this.interruptCancel = true; - this.interruptDelay = interruptDelay * 1000; + this.interruptDelay = interruptDelay * 1000L; } /** * Creates a new long task executor. * * @param doInBackground doInBackground when true, the task - * will be executed in a separate thread - * @param name the name of the executor, used to recognize threads by names + * will be executed in a separate thread + * @param name the name of the executor, used to recognize threads by names */ public LongTaskExecutor(boolean doInBackground, String name) { this(doInBackground, name, 0); @@ -111,7 +112,7 @@ public LongTaskExecutor(boolean doInBackground, String name) { * Creates a new long task executor. * * @param doInBackground doInBackground when true, the task - * will be executed in a separate thread + * will be executed in a separate thread */ public LongTaskExecutor(boolean doInBackground) { this(doInBackground, "LongTaskExecutor"); @@ -119,88 +120,134 @@ public LongTaskExecutor(boolean doInBackground) { /** * Execute a long task with cancel and progress support. Task can be - * null. In this case - * runnable will be executed normally, but without cancel and - * progress support. + * null. In this case runnable will be executed + * normally, but without cancel and progress support. * - * @param task the task to be executed, can be null. - * @param runnable the runnable to be executed - * @param taskName the name of the task, is displayed in the status bar if - * available + * @param task the task to be executed, can be null. + * @param runnable the runnable to be executed + * @param taskName the name of the task, is displayed in the status bar if + * available * @param errorHandler error handler for exception retrieval during - * execution - * @throws NullPointerException if runnable * - * or taskName is null + * execution + * @throws NullPointerException if runnable * or + * taskName is null * @throws IllegalStateException if a task is still executing at this time */ - public void execute(LongTask task, final Runnable runnable, String taskName, LongTaskErrorHandler errorHandler) { + public synchronized void execute(LongTask task, final Runnable runnable, String taskName, + LongTaskErrorHandler errorHandler) { if (runnable == null || taskName == null) { throw new NullPointerException(); } - if (runningTask != null) { - throw new IllegalStateException("A task is still executing"); - } - if (executor == null) { - this.executor = new ThreadPoolExecutor(0, 1, 15, TimeUnit.SECONDS, new LinkedBlockingQueue(), new NamedThreadFactory()); - } - if (errorHandler != null) { - this.errorHandler = errorHandler; + execute(new RunningLongTask<>(task, runnable, taskName, errorHandler)); + } + + /** + * Execute a long task with cancel and progress support. Task can be + * null. In this case callable will be executed + * normally, but without cancel and progress support. + * + * @param task the task to be executed, can be null. + * @param callable the callable to be executed + * @param taskName the name of the task, is displayed in the status bar if + * available + * @param errorHandler error handler for exception retrieval during + * execution + * @return a future that can be used to retrieve the result of the task + * @throws NullPointerException if callable * or + * taskName is null + * @throws IllegalStateException if a task is still executing at this time + */ + public synchronized Future execute(LongTask task, final Callable callable, String taskName, + LongTaskErrorHandler errorHandler) { + if (callable == null || taskName == null) { + throw new NullPointerException(); } - runningTask = new RunningLongTask(task, runnable, taskName); + return execute(new RunningLongTask<>(task, callable, taskName, errorHandler)); + } + + private Future execute(RunningLongTask runningLongtask) { if (inBackground) { - runningTask.future = executor.submit(runningTask); + if (executor == null) { + this.executor = new ThreadPoolExecutor(0, 1, 15, TimeUnit.SECONDS, new LinkedBlockingQueue(), + new NamedThreadFactory()); + } + Future result = executor.submit(runningLongtask); + runningLongtask.future = result; + return result; } else { - runningTask.run(); + currentTask = runningLongtask; + runningLongtask.call(); + return runningLongtask.future; } } /** * Execute a long task with cancel and progress support. Task can be - * null. In this case - * runnable will be executed normally, but without cancel and - * progress support. + * null. In this case runnable will be executed + * normally, but without cancel and progress support. * - * @param task the task to be executed, can be null. + * @param task the task to be executed, can be null. * @param runnable the runnable to be executed - * @throws NullPointerException if runnable is null + * @throws NullPointerException if runnable is null * @throws IllegalStateException if a task is still executing at this time */ - public void execute(LongTask task, Runnable runnable) { + public synchronized void execute(LongTask task, Runnable runnable) { execute(task, runnable, "", null); } + /** + * Execute a long task with cancel and progress support. Task can be + * null. In this case callable will be executed + * normally, but without cancel and progress support. + * + * @param task the task to be executed, can be null. + * @param callable the callable to be executed + * @throws NullPointerException if callable is null + * @throws IllegalStateException if a task is still executing at this time + */ + public synchronized Future execute(LongTask task, Callable callable) { + return execute(task, callable, "", null); + } + /** * Cancel the current task. If the task fails to cancel itself and if an * interruptDelay has been specified, the task will be - * interrupted after - * interruptDelay. Using - * Thread.interrupt() may cause hazardous behaviours and should - * be avoided. Therefore any task should be cancellable. + * interrupted after interruptDelay. Using + * Thread.interrupt() may cause hazardous behaviors and should + * be avoided. Therefore any task should be cancelable. */ public synchronized void cancel() { - if (runningTask != null) { - if (runningTask.isCancellable()) { - if (interruptCancel) { - if (!runningTask.cancel()) { + if (inBackground) { + if (executor != null) { + RunningLongTask rlt = currentTask; + if (rlt != null) { + boolean res = rlt.cancel(); + if (interruptCancel && !res) { cancelTimer = new Timer(name + "_cancelTimer"); - cancelTimer.schedule(new InterruptTimerTask(), interruptDelay); + cancelTimer.schedule(new InterruptTimerTask(rlt), interruptDelay); } - } else { - runningTask.cancel(); + } + } + } else { + RunningLongTask rlt = currentTask; + if (rlt != null) { + boolean res = rlt.cancel(); + if (interruptCancel && !res) { + cancelTimer = new Timer(name + "_cancelTimer"); + cancelTimer.schedule(new InterruptTimerTask(rlt), interruptDelay); } } } } /** - * Returns - * true if the executor is executing a task. + * Returns true if the executor is executing a task. * * @return true if a task is running, false * otherwise */ public boolean isRunning() { - return runningTask != null; + return currentTask != null; } /** @@ -225,13 +272,12 @@ public void setDefaultErrorHandler(LongTaskErrorHandler errorHandler) { } } - private synchronized void finished() { + private synchronized void finished(RunningLongTask runningLongTask) { if (cancelTimer != null) { cancelTimer.cancel(); } - LongTask task = runningTask.task; - runningTask = null; - errorHandler = null; + LongTask task = runningLongTask.task; + currentTask = null; if (listener != null) { listener.taskFinished(task); } @@ -240,43 +286,73 @@ private synchronized void finished() { /** * Inner class for associating a task to its Future instance */ - private class RunningLongTask implements Runnable { + protected class RunningLongTask implements Callable { private final LongTask task; private final Runnable runnable; - private Future future; + private final Callable callable; + private final LongTaskErrorHandler errorHandler; + private Future future; private ProgressTicket progress; - public RunningLongTask(LongTask task, Runnable runnable, String taskName) { + public RunningLongTask(LongTask task, Runnable runnable, String taskName, LongTaskErrorHandler errorHandler) { this.task = task; this.runnable = runnable; + this.callable = null; + this.errorHandler = errorHandler; + init(taskName); + } + + public RunningLongTask(LongTask task, Callable callable, String taskName, LongTaskErrorHandler errorHandler) { + this.task = task; + this.runnable = null; + this.callable = callable; + this.errorHandler = errorHandler; + init(taskName); + } + + private void init(String taskName) { ProgressTicketProvider progressProvider = Lookup.getDefault().lookup(ProgressTicketProvider.class); if (progressProvider != null) { - this.progress = progressProvider.createTicket(taskName, new Cancellable() { - @Override - public boolean cancel() { - LongTaskExecutor.this.cancel(); - return true; - } + this.progress = progressProvider.createTicket(taskName, () -> { + LongTaskExecutor.this.cancel(); + return true; }); if (task != null) { task.setProgressTicket(progress); - } else { - progress.start(); } } } @Override - public void run() { + public V call() { + if (task != null && progress != null) { + progress.start(); + } + currentTask = this; + V result = null; try { - runnable.run(); - } catch (Exception e) { + if (runnable != null) { + runnable.run(); + } else if (callable != null) { + result = callable.call(); + if (!inBackground) { + future = CompletableFuture.completedFuture(result); + } + } + + currentTask = null; + + finished(this); + if (progress != null) { + progress.finish(); + } + } catch (Throwable e) { LongTaskErrorHandler err = errorHandler; - finished(); if (progress != null) { progress.finish(); } + currentTask = null; if (err != null) { err.fatalError(e); } else if (defaultErrorHandler != null) { @@ -284,35 +360,25 @@ public void run() { } else { Logger.getLogger("").log(Level.SEVERE, "", e); } + if (!inBackground) { + future = CompletableFuture.failedFuture(e); + } else if (callable != null) { + if (e instanceof RuntimeException) { + throw (RuntimeException) e; + } + throw new RuntimeException(e); + } } - finished(); - if (progress != null) { - progress.finish(); - } + return result; } public boolean cancel() { - /*if (inBackground) { - if (future != null && future.cancel(false)) { - return true; - } - }*/ if (task != null) { return task.cancel(); } return false; } - - public boolean isCancellable() { - if (inBackground) { - if (!future.isCancelled()) { - return true; - } - return false; - } - return true; - } } /** @@ -328,17 +394,31 @@ public Thread newThread(Runnable r) { private class InterruptTimerTask extends TimerTask { + private final RunningLongTask task; + + public InterruptTimerTask(RunningLongTask runningLongTask) { + this.task = runningLongTask; + } + @Override public void run() { - if (runningTask != null) { - System.out.println("Interrupt task"); + if (task != null) { + if (task.future != null) { + task.future.cancel(interruptCancel); + } + if (cancelTimer != null) { + cancelTimer.cancel(); + } cancelTimer = null; - if (runningTask.progress != null) { - runningTask.progress.finish(); + if (task.progress != null) { + task.progress.finish(); + } + finished(task); + + if (!inBackground) { + Logger.getLogger("").warning("Task from " + name + " did not respond to cancellation request. Interrupting thread."); + Thread.currentThread().interrupt(); } - finished(); - executor.shutdownNow(); - executor = null; } } } diff --git a/modules/LongTaskAPI/src/main/java/org/gephi/utils/longtask/api/LongTaskListener.java b/modules/LongTaskAPI/src/main/java/org/gephi/utils/longtask/api/LongTaskListener.java index 713777d7d9..109136c58d 100644 --- a/modules/LongTaskAPI/src/main/java/org/gephi/utils/longtask/api/LongTaskListener.java +++ b/modules/LongTaskAPI/src/main/java/org/gephi/utils/longtask/api/LongTaskListener.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.utils.longtask.api; import org.gephi.utils.longtask.spi.LongTask; @@ -50,5 +51,5 @@ Development and Distribution License("CDDL") (collectively, the */ public interface LongTaskListener { - public void taskFinished(LongTask task); + void taskFinished(LongTask task); } diff --git a/modules/LongTaskAPI/src/main/java/org/gephi/utils/longtask/spi/LongTask.java b/modules/LongTaskAPI/src/main/java/org/gephi/utils/longtask/spi/LongTask.java index b0a3d62e6b..6b174c296a 100644 --- a/modules/LongTaskAPI/src/main/java/org/gephi/utils/longtask/spi/LongTask.java +++ b/modules/LongTaskAPI/src/main/java/org/gephi/utils/longtask/spi/LongTask.java @@ -39,26 +39,29 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.utils.longtask.spi; import org.gephi.utils.progress.ProgressTicket; /** * Interface that any class can implement to support progress and cancellation. - * + * * @author Mathieu Bastian */ public interface LongTask { /** - * Cancel the task. Returns true if the task has been sucessfully cancelled, false otherwise. - * @return true if the task has been sucessfully cancelled, false otherwise + * Cancel the task. Returns true if the task has been successfully cancelled, false otherwise. + * + * @return true if the task has been successfully cancelled, false otherwise */ - public boolean cancel(); + boolean cancel(); /** * Set the progress ticket for the long task. Can't be null. + * * @param progressTicket the progress ticket for this task */ - public void setProgressTicket(ProgressTicket progressTicket); + void setProgressTicket(ProgressTicket progressTicket); } diff --git a/modules/LongTaskAPI/src/main/java/org/gephi/utils/progress/Progress.java b/modules/LongTaskAPI/src/main/java/org/gephi/utils/progress/Progress.java index 96bccd6f47..3ea90e9f0c 100644 --- a/modules/LongTaskAPI/src/main/java/org/gephi/utils/progress/Progress.java +++ b/modules/LongTaskAPI/src/main/java/org/gephi/utils/progress/Progress.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.utils.progress; /** @@ -50,6 +51,7 @@ public class Progress { /** * Finish the progress task. + * * @param progressTicket the progress ticket of the task */ public static void finish(ProgressTicket progressTicket) { @@ -60,8 +62,9 @@ public static void finish(ProgressTicket progressTicket) { /** * Finish the progress task and display a wrap-up message + * * @param progressTicket the progress ticket of the task - * @param finishMessage a message about the finished task + * @param finishMessage a message about the finished task */ public static void finish(ProgressTicket progressTicket, String finishMessage) { if (progressTicket != null) { @@ -71,6 +74,7 @@ public static void finish(ProgressTicket progressTicket, String finishMessage) { /** * Notify the user about a new completed unit. Equivalent to incrementing workunits by one. + * * @param progressTicket the progress ticket of the task */ public static void progress(ProgressTicket progressTicket) { @@ -81,8 +85,9 @@ public static void progress(ProgressTicket progressTicket) { /** * Notify the user about completed workunits. + * * @param progressTicket the progress ticket of the task - * @param workunit a cumulative number of workunits completed so far + * @param workunit a cumulative number of workunits completed so far */ public static void progress(ProgressTicket progressTicket, int workunit) { if (progressTicket != null) { @@ -92,8 +97,9 @@ public static void progress(ProgressTicket progressTicket, int workunit) { /** * Notify the user about progress by showing message with details. + * * @param progressTicket the progress ticket of the task - * @param message details about the status of the task + * @param message details about the status of the task */ public static void progress(ProgressTicket progressTicket, String message) { if (progressTicket != null) { @@ -103,9 +109,10 @@ public static void progress(ProgressTicket progressTicket, String message) { /** * Notify the user about completed workunits and show additional detailed message. + * * @param progressTicket the progress ticket of the task - * @param message details about the status of the task - * @param workunit a cumulative number of workunits completed so far + * @param message details about the status of the task + * @param workunit a cumulative number of workunits completed so far */ public static void progress(ProgressTicket progressTicket, String message, int workunit) { if (progressTicket != null) { @@ -115,6 +122,7 @@ public static void progress(ProgressTicket progressTicket, String message, int w /** * Change the display name of the progress task. Use with care, please make sure the changed name is not completely different, or otherwise it might appear to the user as a different task. + * * @param progressTicket the progress ticket of the task * @param newDisplayName the new display name */ @@ -136,6 +144,7 @@ public static String getDisplayName(ProgressTicket progressTicket) { /** * Start the progress indication for indeterminate task. + * * @param progressTicket the progress ticket of the task */ public static void start(ProgressTicket progressTicket) { @@ -146,8 +155,9 @@ public static void start(ProgressTicket progressTicket) { /** * Start the progress indication for a task with known number of steps. + * * @param progressTicket the progress ticket of the task - * @param workunits total number of workunits that will be processed + * @param workunits total number of workunits that will be processed */ public static void start(ProgressTicket progressTicket, int workunits) { if (progressTicket != null) { @@ -157,8 +167,9 @@ public static void start(ProgressTicket progressTicket, int workunits) { /** * Currently indeterminate task can be switched to show percentage completed. + * * @param progressTicket the progress ticket of the task - * @param workunits workunits total number of workunits that will be processed + * @param workunits workunits total number of workunits that will be processed */ public static void switchToDeterminate(ProgressTicket progressTicket, int workunits) { if (progressTicket != null) { @@ -168,6 +179,7 @@ public static void switchToDeterminate(ProgressTicket progressTicket, int workun /** * Currently determinate task can be switched to indeterminate mode. + * * @param progressTicket the progress ticket of the task */ public static void switchToIndeterminate(ProgressTicket progressTicket) { diff --git a/modules/LongTaskAPI/src/main/java/org/gephi/utils/progress/ProgressTicket.java b/modules/LongTaskAPI/src/main/java/org/gephi/utils/progress/ProgressTicket.java index 44f4aba7e4..d4efc999b8 100644 --- a/modules/LongTaskAPI/src/main/java/org/gephi/utils/progress/ProgressTicket.java +++ b/modules/LongTaskAPI/src/main/java/org/gephi/utils/progress/ProgressTicket.java @@ -39,11 +39,12 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.utils.progress; /** * Progress task following, must be used from {@link Progress} class. - * + * * @author Mathieu Bastian */ public interface ProgressTicket { @@ -52,9 +53,10 @@ public interface ProgressTicket { * Finish the progress task. */ void finish(); - + /** * Finish the progress task and show and wrap-up message + * * @param finishMessage a message about the finished task */ void finish(String finishMessage); @@ -66,35 +68,40 @@ public interface ProgressTicket { /** * Notify the user about completed workunits. - * @param workunit a cumulative number of workunits completed so far + * + * @param workunit a cumulative number of workunits completed so far */ void progress(int workunit); /** * Notify the user about progress by showing message with details. + * * @param message about the status of the task */ void progress(String message); /** * Notify the user about completed workunits and show additional detailed message. - * @param message details about the status of the task + * + * @param message details about the status of the task * @param workunit a cumulative number of workunits completed so far */ void progress(String message, int workunit); - /** - * Change the display name of the progress task. Use with care, please make sure the changed name is not completely different, or otherwise it might appear to the user as a different task. - * @param newDisplayName the new display name - */ - void setDisplayName(String newDisplayName); - /** * Returns the current display name + * * @return the current display name */ String getDisplayName(); + /** + * Change the display name of the progress task. Use with care, please make sure the changed name is not completely different, or otherwise it might appear to the user as a different task. + * + * @param newDisplayName the new display name + */ + void setDisplayName(String newDisplayName); + /** * Start the progress indication for indeterminate task. */ @@ -102,12 +109,14 @@ public interface ProgressTicket { /** * Start the progress indication for a task with known number of steps. + * * @param workunits total number of workunits that will be processed */ void start(int workunits); /** * Currently indeterminate task can be switched to show percentage completed. + * * @param workunits workunits total number of workunits that will be processed */ void switchToDeterminate(int workunits); diff --git a/modules/LongTaskAPI/src/main/java/org/gephi/utils/progress/ProgressTicketProvider.java b/modules/LongTaskAPI/src/main/java/org/gephi/utils/progress/ProgressTicketProvider.java index ca79f4c81f..258160c169 100644 --- a/modules/LongTaskAPI/src/main/java/org/gephi/utils/progress/ProgressTicketProvider.java +++ b/modules/LongTaskAPI/src/main/java/org/gephi/utils/progress/ProgressTicketProvider.java @@ -45,10 +45,9 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.Cancellable; /** - * * @author Mathieu Bastian */ public interface ProgressTicketProvider { - public ProgressTicket createTicket(String taskName, Cancellable cancellable); + ProgressTicket createTicket(String taskName, Cancellable cancellable); } diff --git a/modules/LongTaskAPI/src/main/nbm/manifest.mf b/modules/LongTaskAPI/src/main/nbm/manifest.mf index 55f9fbac0c..d7471d0647 100644 --- a/modules/LongTaskAPI/src/main/nbm/manifest.mf +++ b/modules/LongTaskAPI/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/utils/longtask/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi Core +OpenIDE-Module-Name: LongTask API \ No newline at end of file diff --git a/modules/LongTaskAPI/src/main/nbm/module.xml b/modules/LongTaskAPI/src/main/nbm/module.xml deleted file mode 100644 index 5964f5ff0a..0000000000 --- a/modules/LongTaskAPI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle.properties b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle.properties index af40c9754a..041a3a1749 100644 --- a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle.properties +++ b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle.properties @@ -1,6 +1,3 @@ -OpenIDE-Module-Display-Category=Gephi Core -OpenIDE-Module-Long-Description=\ - API for executing long threaded task. \ +OpenIDE-Module-Long-Description=API for executing long threaded task. \ Provide progress, cancel and integrated UI. -OpenIDE-Module-Name=LongTask API OpenIDE-Module-Short-Description=API for executing long threaded task diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_ar.properties b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_ca.properties b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_ca.properties new file mode 100644 index 0000000000..98b1ca512c --- /dev/null +++ b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_ca.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API for executing long threaded task. Provide progress, cancel and integrated UI. +OpenIDE-Module-Short-Description=API for executing long threaded task diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_cs.properties b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_cs.properties index 4a217b22b9..2db7d5a0b9 100644 --- a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_cs.properties +++ b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_cs.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-25 08\:12+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=API pro spu\u0161t\u011bn\u00ed \u00fakol\u016f s dlouh\u00fdmi vl\u00e1kny. Poskytuje postup, zru\u0161en\u00ed a zaveden\u00e9 rozhran\u00ed. - -OpenIDE-Module-Short-Description=API pro spu\u0161t\u011bn\u00ed \u00fakol\u016f s dlouh\u00fdmi vl\u00e1kny +OpenIDE-Module-Long-Description=API pro spu\u0161t\u011bnν ϊkol\u016f s dlouhύmi vlαkny. Poskytuje postup, zru\u0161enν a zavedenι rozhranν. +OpenIDE-Module-Short-Description=API pro spu\u0161t\u011bnν ϊkol\u016f s dlouhύmi vlαkny diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_de.properties b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_de.properties new file mode 100644 index 0000000000..26e07c140d --- /dev/null +++ b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_de.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API zru Ausfόhrung lang andauernder, nebenlδufiger Aufgaben. Stellen Benutzeroberflδchen zur Fortschrittsanzeige und Abbruch bereit. +OpenIDE-Module-Short-Description=API zur Ausfόhrung lang andauernder nebenlδufiger Aufgaben diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_es.properties b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_es.properties index 27000ca92f..07eed996c5 100644 --- a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_es.properties +++ b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_es.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:01+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=API para ejecutar tareas largas en hilos. Proporcionar progreso, cancelaci\u00f3n e interfaz de usuario integrada. - -OpenIDE-Module-Short-Description=API para ejecutar tareas largas en hilos. +OpenIDE-Module-Long-Description=API para ejecutar tareas largas en hilos. Proporcionar progreso, cancelaciσn e interfaz de usuario integrada. +OpenIDE-Module-Short-Description=API para ejecutar tareas largas en hilos. diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_fr.properties b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_fr.properties index 22951d619b..81c2522b77 100644 --- a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_fr.properties +++ b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_fr.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:01+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API d'ex\u00e9cution de longues t\u00e2ches. Fournit la progression, l'annulation et l'int\u00e9gration de l'interface utilisateur. - -OpenIDE-Module-Short-Description=API d'ex\u00e9cution de longues t\u00e2ches. +OpenIDE-Module-Long-Description=API d'exιcution de longues tβches. Fournit la progression, l'annulation et l'intιgration de l'interface utilisateur. +OpenIDE-Module-Short-Description=API d'exιcution de longues tβches. diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_he.properties b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_he.properties new file mode 100644 index 0000000000..98b1ca512c --- /dev/null +++ b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_he.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API for executing long threaded task. Provide progress, cancel and integrated UI. +OpenIDE-Module-Short-Description=API for executing long threaded task diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_hu.properties b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_hu.properties new file mode 100644 index 0000000000..3168b6d61a --- /dev/null +++ b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_hu.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Short-Description=API hossz\u00FA sz\u00E1las feladatok v\u00E9grehajt\u00E1s\u00E1hoz +OpenIDE-Module-Long-Description=API hossz\u00FA sz\u00E1las feladatok v\u00E9grehajt\u00E1s\u00E1hoz. El\u0151rehalad\u00E1s, t\u00F6rl\u00E9s \u00E9s integr\u00E1lt felhaszn\u00E1l\u00F3i fel\u00FClet biztos\u00EDt\u00E1sa. diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_it.properties b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_it.properties new file mode 100644 index 0000000000..98b1ca512c --- /dev/null +++ b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_it.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API for executing long threaded task. Provide progress, cancel and integrated UI. +OpenIDE-Module-Short-Description=API for executing long threaded task diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_ja.properties b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_ja.properties index b7ad9daded..44e73d9dc3 100644 --- a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_ja.properties +++ b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_ja.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-25 08\:40+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u9577\u3044\u30b9\u30ec\u30c3\u30c9\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306eAPI\u3002\u9032\u6357\u3001\u30ad\u30e3\u30f3\u30bb\u30eb\u3001\u7d71\u5408UI\u3092\u63d0\u4f9b\u3002 - -OpenIDE-Module-Short-Description=\u9577\u3044\u30b9\u30ec\u30c3\u30c9\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306eAPI +OpenIDE-Module-Long-Description=\u9577\u3044\u30b9\u30ec\u30c3\u30c9\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306eAPI\u3002\u9032\u6357\u3001\u30ad\u30e3\u30f3\u30bb\u30eb\u3001\u7d71\u5408UI\u3092\u63d0\u4f9b\u3002 +OpenIDE-Module-Short-Description=\u9577\u3044\u30b9\u30ec\u30c3\u30c9\u30bf\u30b9\u30af\u3092\u5b9f\u884c\u3059\u308b\u305f\u3081\u306eAPI diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_ko.properties b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_ko.properties new file mode 100644 index 0000000000..c971c2c02b --- /dev/null +++ b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_ko.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Short-Description=\uAE34 \uC4F0\uB808\uB4DC \uC791\uC5C5\uC744 \uC704\uD55C API +OpenIDE-Module-Long-Description=\uAE34 \uC4F0\uB808\uB4DC \uC791\uC5C5\uC744 \uC2E4\uD589\uD558\uAE30 \uC704\uD55C API. \uC9C4\uD589\uB960, \uCDE8\uC18C\uD558\uAE30\uC640 \uD1B5\uD569\uB41C UI\uB97C \uC81C\uACF5\uD569\uB2C8\uB2E4. diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_nl.properties b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_nl.properties new file mode 100644 index 0000000000..98b1ca512c --- /dev/null +++ b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_nl.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API for executing long threaded task. Provide progress, cancel and integrated UI. +OpenIDE-Module-Short-Description=API for executing long threaded task diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_pt_BR.properties b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_pt_BR.properties index 90a40275bd..becde3a8b0 100644 --- a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_pt_BR.properties +++ b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_pt_BR.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 16\:37+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API de execu\u00e7\u00e3o de tarefas longas em threads. Fornece acompanhamento de progresso, cancelamento e interface de usu\u00e1rio integrada. - -OpenIDE-Module-Short-Description=API para a execu\u00e7\u00e3o de tarefas longas em threads +OpenIDE-Module-Long-Description=API de execuηγo de tarefas longas em threads. Fornece acompanhamento de progresso, cancelamento e interface de usuαrio integrada. +OpenIDE-Module-Short-Description=API para a execuηγo de tarefas longas em threads diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_ro.properties b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_ro.properties new file mode 100644 index 0000000000..8faa13823c --- /dev/null +++ b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_ro.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Long-Description=API pentru executarea sarcinilor lungi pe mai multe fire de execu\u021Bie. Ofer\u0103 progresul, posibilitatea de anulare \u0219i o interfa\u021B\u0103 integrat\u0103. +OpenIDE-Module-Short-Description=API pentru executarea sarcinilor lungi pe mai multe fire de execu\u021Bie diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_ru.properties b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_ru.properties index ad817c4584..6506b30ee8 100644 --- a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_ru.properties +++ b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_ru.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-08 06\:23+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=API \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447. \u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043c\u0435\u043d\u044b \u0438 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 UI. - -OpenIDE-Module-Short-Description=API \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447. +OpenIDE-Module-Long-Description=API \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447. \u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u0442\u0441\u043b\u0435\u0436\u0438\u0432\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0433\u0440\u0435\u0441\u0441\u0430, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043c\u0435\u043d\u044b \u0438 \u0432\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 UI. +OpenIDE-Module-Short-Description=API \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447. diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_th.properties b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_tr.properties b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_tr.properties new file mode 100644 index 0000000000..98b1ca512c --- /dev/null +++ b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_tr.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API for executing long threaded task. Provide progress, cancel and integrated UI. +OpenIDE-Module-Short-Description=API for executing long threaded task diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_uk.properties b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_uk.properties new file mode 100644 index 0000000000..421643368f --- /dev/null +++ b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_uk.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Short-Description=API \u0434\u043B\u044F \u0432\u0438\u043A\u043E\u043D\u0430\u043D\u043D\u044F \u0434\u043E\u0432\u0433\u043E\u043F\u043E\u0442\u043E\u043A\u043E\u0432\u043E\u0433\u043E \u0437\u0430\u0432\u0434\u0430\u043D\u043D\u044F +OpenIDE-Module-Long-Description=API \u0434\u043B\u044F \u0432\u0438\u043A\u043E\u043D\u0430\u043D\u043D\u044F \u0434\u043E\u0432\u0433\u043E\u043F\u043E\u0442\u043E\u043A\u043E\u0432\u043E\u0433\u043E \u0437\u0430\u0432\u0434\u0430\u043D\u043D\u044F. \u0417\u0430\u0431\u0435\u0437\u043F\u0435\u0447\u0442\u0435 \u043F\u0440\u043E\u0433\u0440\u0435\u0441, \u0441\u043A\u0430\u0441\u0443\u0432\u0430\u043D\u043D\u044F \u0442\u0430 \u0456\u043D\u0442\u0435\u0433\u0440\u043E\u0432\u0430\u043D\u0438\u0439 \u0456\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430. diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_zh_CN.properties b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_zh_CN.properties index 3b43be3857..185d7d12eb 100644 --- a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_zh_CN.properties +++ b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_zh_CN.properties @@ -1,10 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:09+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u6267\u884c\u957f\u7ebf\u7a0b\u4efb\u52a1\u7684\u5e94\u7528\u7a0b\u5e8f\u754c\u9762\u3002\u63d0\u4f9b\u8fdb\u5c55\uff0c\u53d6\u6d88\u548c\u96c6\u6210\u7684\u7528\u6237\u754c\u9762\u3002 - -OpenIDE-Module-Short-Description=\u6267\u884c\u957f\u7ebf\u7a0b\u4efb\u52a1\u7684\u5e94\u7528\u7a0b\u5e8f\u754c\u9762 +OpenIDE-Module-Long-Description=\u6267\u884c\u957f\u7ebf\u7a0b\u4efb\u52a1\u7684\u5e94\u7528\u7a0b\u5e8f\u754c\u9762\u3002\u63d0\u4f9b\u8fdb\u5c55\uff0c\u53d6\u6d88\u548c\u96c6\u6210\u7684\u7528\u6237\u754c\u9762\u3002 +OpenIDE-Module-Short-Description=\u6267\u884c\u957f\u7ebf\u7a0b\u4efb\u52a1\u7684\u5e94\u7528\u7a0b\u5e8f\u754c\u9762 diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_zh_TW.properties b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_zh_TW.properties new file mode 100644 index 0000000000..98b1ca512c --- /dev/null +++ b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/Bundle_zh_TW.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API for executing long threaded task. Provide progress, cancel and integrated UI. +OpenIDE-Module-Short-Description=API for executing long threaded task diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/api/package.html b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/api/package.html index 241348465a..17a4d0fd1d 100644 --- a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/api/package.html +++ b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/api/package.html @@ -1,11 +1,16 @@ - - - - API any module can use for providing long, asynchronous tasks execution. -

    - The LongTaskExecutor can run any Runnable, - but preferably that also implements LongTask interface for - progress and cancellation. -

    - - + + + + org.gephi.utils.longtask.api + + +

    + API any module can use for providing long, asynchronous tasks execution. +

    +

    + The LongTaskExecutor can run any Runnable, + but preferably that also implements LongTask interface for + progress and cancellation. +

    + + diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/cs.po b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/cs.po deleted file mode 100644 index 9d5dc9117c..0000000000 --- a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/cs.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-25 08:12+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API pro spuΕ‘tΔ›nΓ­ ΓΊkolΕ― s dlouhΓ½mi vlΓ‘kny. Poskytuje postup, zruΕ‘enΓ­ a zavedenΓ© rozhranΓ­." - -msgid "OpenIDE-Module-Short-Description" -msgstr "API pro spuΕ‘tΔ›nΓ­ ΓΊkolΕ― s dlouhΓ½mi vlΓ‘kny" diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/es.po b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/es.po deleted file mode 100644 index bcbcd9c8d6..0000000000 --- a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/es.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:01+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API para ejecutar tareas largas en hilos. Proporcionar progreso, cancelaciΓ³n e interfaz de usuario integrada." - -msgid "OpenIDE-Module-Short-Description" -msgstr "API para ejecutar tareas largas en hilos." diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/fr.po b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/fr.po deleted file mode 100644 index fe62d4e98b..0000000000 --- a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/fr.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:01+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API d'exΓ©cution de longues tΓ’ches. Fournit la progression, l'annulation et l'intΓ©gration de l'interface utilisateur." - -msgid "OpenIDE-Module-Short-Description" -msgstr "API d'exΓ©cution de longues tΓ’ches." diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/ja.po b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/ja.po deleted file mode 100644 index 4dd82251f6..0000000000 --- a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-25 08:40+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "長いスレッドタスクをεŸθ‘Œγ™γ‚‹γŸγ‚γAPIγ€‚ι€²ζ—γ€γ‚­γƒ£γƒ³γ‚»γƒ«γ€η΅±εˆUIを提供。" - -msgid "OpenIDE-Module-Short-Description" -msgstr "長いスレッドタスクをεŸθ‘Œγ™γ‚‹γŸγ‚γAPI" diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/org-gephi-utils-longtask.pot b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/org-gephi-utils-longtask.pot deleted file mode 100644 index 569cfb09f8..0000000000 --- a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/org-gephi-utils-longtask.pot +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "" -"API for executing long threaded task. Provide progress, cancel and " -"integrated UI." - -msgid "OpenIDE-Module-Short-Description" -msgstr "API for executing long threaded task" diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/pt_BR.po b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/pt_BR.po deleted file mode 100644 index 69bb64f3b7..0000000000 --- a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/pt_BR.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 16:37+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API de execuΓ§Γ£o de tarefas longas em threads. Fornece acompanhamento de progresso, cancelamento e interface de usuΓ‘rio integrada." - -msgid "OpenIDE-Module-Short-Description" -msgstr "API para a execuΓ§Γ£o de tarefas longas em threads" diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/ru.po b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/ru.po deleted file mode 100644 index 0fd429d9d7..0000000000 --- a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/ru.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-08 06:23+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API для исполнСния Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡. ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ΡΡ отслСТиваниС прогрСсса, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ ΠΎΡ‚ΠΌΠ΅Π½Ρ‹ ΠΈ встроСнный UI." - -msgid "OpenIDE-Module-Short-Description" -msgstr "API для исполнСния Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡." diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/spi/package.html b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/spi/package.html index 92ebc7d106..2a0e0d63ec 100644 --- a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/spi/package.html +++ b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/spi/package.html @@ -1,10 +1,15 @@ - - - - LongTask adds functionalities to any class that wants to be progressable and - cancellable. -

    - These tasks can be executed in a LongTaskExecutor. -

    - - + + + + org.gephi.utils.longtask + + +

    + LongTask adds functionalities to any class that wants to be progressable and + cancellable. +

    +

    + These tasks can be executed in a LongTaskExecutor. +

    + + diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/zh_CN.po b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/zh_CN.po deleted file mode 100644 index 6a8d264638..0000000000 --- a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/longtask/zh_CN.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:09+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ζ‰§θ‘Œι•ΏηΊΏη¨‹δ»»εŠ‘ηš„εΊ”η”¨η¨‹εΊη•Œι’γ€‚ζδΎ›θΏ›ε±•οΌŒε–ζΆˆε’Œι›†ζˆηš„η”¨ζˆ·η•Œι’γ€‚" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζ‰§θ‘Œι•ΏηΊΏη¨‹δ»»εŠ‘ηš„εΊ”η”¨η¨‹εΊη•Œι’" diff --git a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/progress/package.html b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/progress/package.html index 11316372be..14fd515d0d 100644 --- a/modules/LongTaskAPI/src/main/resources/org/gephi/utils/progress/package.html +++ b/modules/LongTaskAPI/src/main/resources/org/gephi/utils/progress/package.html @@ -1,10 +1,15 @@ - - - - Progress support for long tasks execution. -

    - Progress can me manipulated from the Progress class, with - a ProgressTicket that is usually given with. -

    - - + + + + org.gephi.utils.progress + + +

    + Progress support for long tasks execution. +

    +

    + Progress can me manipulated from the Progress class, with + a ProgressTicket that is usually given with. +

    + + diff --git a/modules/LongTaskAPI/src/main/resources/overview.html b/modules/LongTaskAPI/src/main/resources/overview.html index d1a54f60c2..6bdb12e2db 100644 --- a/modules/LongTaskAPI/src/main/resources/overview.html +++ b/modules/LongTaskAPI/src/main/resources/overview.html @@ -1,8 +1,13 @@ - + + + Long Task API + - LongTask API provides utility features for long and asynchronous task - execution. +

    + LongTask API provides utility features for long and asynchronous task + execution. +

    The API can be used by any module to provide a safe way to execute a task in a background thread with native progress and cancellation diff --git a/modules/LongTaskAPI/src/test/java/org/gephi/utils/longtask/api/AsynchronousTest.java b/modules/LongTaskAPI/src/test/java/org/gephi/utils/longtask/api/AsynchronousTest.java new file mode 100644 index 0000000000..10fe3765db --- /dev/null +++ b/modules/LongTaskAPI/src/test/java/org/gephi/utils/longtask/api/AsynchronousTest.java @@ -0,0 +1,110 @@ +package org.gephi.utils.longtask.api; + +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import org.awaitility.Awaitility; +import org.gephi.utils.longtask.spi.LongTask; +import org.hamcrest.core.Is; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.internal.stubbing.answers.AnswersWithDelay; +import org.mockito.junit.MockitoJUnitRunner; + +@RunWith(MockitoJUnitRunner.StrictStubs.class) +public class AsynchronousTest { + + @Mock + Callable callable; + + @Mock + Runnable runnable; + + @Mock + LongTask longTask; + + @Mock + LongTaskErrorHandler errorHandler; + + @Mock + LongTaskListener listener; + + @Rule + public ExpectedException expectedException = ExpectedException.none(); + + private LongTaskExecutor executor; + + private LongTaskExecutor executorWithInterruption; + + @Before + public void setUp() { + executor = new LongTaskExecutor(true); + executorWithInterruption = new LongTaskExecutor(true, "", 1); + } + + @Test + public void testExecuteCallable() throws Exception { + Mockito.doReturn(42).when(callable).call(); + Future res = executor.execute(null, callable); + Assert.assertEquals(42, res.get().intValue()); + } + + @Test + public void testExecuteCallableException() throws Exception { + executor.setLongTaskListener(listener); + Mockito.doThrow(new RuntimeException()).when(callable).call(); + executor.execute(longTask, callable, "", errorHandler); + Awaitility.await().until(executor::isRunning, t -> !t); + Mockito.verify(errorHandler).fatalError(Mockito.any(RuntimeException.class)); + Mockito.verify(listener, Mockito.never()).taskFinished(Mockito.any()); + } + + @Test + public void testExecuteCallableExceptionFuture() throws Exception { + Mockito.doThrow(new RuntimeException()).when(callable).call(); + Future future = executor.execute(longTask, callable, "", errorHandler); + Awaitility.await().until(executor::isRunning, t -> !t); + + expectedException.expect(ExecutionException.class); + expectedException.expectCause(Is.isA(RuntimeException.class)); + future.get(); + } + + @Test + public void testCancel() throws Exception { + executor.setLongTaskListener(listener); + Mockito.doAnswer(new AnswersWithDelay(200, invocation -> 42)).when(callable).call(); + Future future = executor.execute(longTask, callable); + Awaitility.await().until(executor::isRunning); + executor.cancel(); + future.get(); + Mockito.verify(longTask).cancel(); + Mockito.verify(listener).taskFinished(Mockito.any()); + } + + @Test + public void testExecuteTwice() throws Exception { + executor.execute(longTask, callable); + executor.execute(longTask, callable); + Awaitility.await().until(executor::isRunning, t -> !t); + Mockito.verify(callable, Mockito.times(2)).call(); + } + + @Test + public void testCancelRunnableInterrupt() { + Mockito.when(longTask.cancel()).thenReturn(false); + Mockito.doAnswer(new AnswersWithDelay(2000, invocation -> null)).when(runnable).run(); + executorWithInterruption.setLongTaskListener(listener); + executorWithInterruption.execute(longTask, runnable); + Awaitility.await().until(executorWithInterruption::isRunning); + executorWithInterruption.cancel(); + Awaitility.await().until(executorWithInterruption::isRunning, t -> !t); + Mockito.verify(listener).taskFinished(Mockito.any()); + } +} diff --git a/modules/LongTaskAPI/src/test/java/org/gephi/utils/longtask/api/SynchronousTest.java b/modules/LongTaskAPI/src/test/java/org/gephi/utils/longtask/api/SynchronousTest.java new file mode 100644 index 0000000000..aea4568ea7 --- /dev/null +++ b/modules/LongTaskAPI/src/test/java/org/gephi/utils/longtask/api/SynchronousTest.java @@ -0,0 +1,125 @@ +package org.gephi.utils.longtask.api; + +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import org.awaitility.Awaitility; +import org.gephi.utils.longtask.api.LongTaskErrorHandler; +import org.gephi.utils.longtask.api.LongTaskExecutor; +import org.gephi.utils.longtask.api.LongTaskListener; +import org.gephi.utils.longtask.spi.LongTask; +import org.gephi.utils.progress.ProgressTicket; +import org.gephi.utils.progress.ProgressTicketProvider; +import org.hamcrest.core.Is; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.internal.stubbing.answers.AnswersWithDelay; +import org.mockito.junit.MockitoJUnitRunner; +import org.netbeans.junit.MockServices; +import org.openide.util.Cancellable; + +@RunWith(MockitoJUnitRunner.StrictStubs.class) +public class SynchronousTest { + + @Mock + Runnable runnable; + + @Mock + Callable callable; + + @Mock + LongTask longTask; + + @Mock + LongTaskErrorHandler errorHandler; + + @Mock + LongTaskListener listener; + + @Mock + static ProgressTicket progressTicket; + + @Rule + public ExpectedException expectedException = ExpectedException.none(); + + private LongTaskExecutor executor; + + @Before + public void setUp() { + executor = new LongTaskExecutor(false); + MockServices.setServices(MockProgressTicketProvider.class); + } + + @Test + public void testExecuteRunnable() { + executor.execute(null, runnable); + Mockito.verify(runnable).run(); + } + + @Test + public void testExecuteRunnableWithProgress() { + executor.execute(longTask, runnable); + Mockito.verify(longTask).setProgressTicket(Mockito.any(ProgressTicket.class)); + Mockito.verify(progressTicket).start(); + Mockito.verify(progressTicket).finish(); + } + + @Test + public void testExecuteRunnableException() { + executor.setLongTaskListener(listener); + Mockito.doThrow(new RuntimeException()).when(runnable).run(); + executor.execute(longTask, runnable, "", errorHandler); + Mockito.verify(errorHandler).fatalError(Mockito.any(RuntimeException.class)); + Mockito.verify(listener, Mockito.never()).taskFinished(Mockito.any()); + } + + @Test + public void testExecuteRunnableProgressWithException() { + Mockito.doThrow(new RuntimeException()).when(runnable).run(); + executor.execute(longTask, runnable); + Mockito.verify(progressTicket).finish(); + } + + @Test + public void testExecuteRunnableListener() { + executor.setLongTaskListener(listener); + executor.execute(longTask, runnable); + Mockito.verify(listener).taskFinished(Mockito.eq(longTask)); + } + + @Test + public void testExecuteCallable() throws Exception { + Mockito.doReturn(42).when(callable).call(); + Future res = executor.execute(null, callable); + Mockito.verify(callable).call(); + Assert.assertEquals(42, res.get().intValue()); + } + + @Test + public void testExecuteCallableException() throws Exception { + Mockito.doThrow(new RuntimeException()).when(callable).call(); + Future res = executor.execute(null, callable, "", errorHandler); + Mockito.verify(errorHandler).fatalError(Mockito.any(RuntimeException.class)); + + expectedException.expect(ExecutionException.class); + expectedException.expectCause(Is.isA(RuntimeException.class)); + res.get(); + } + + public static class MockProgressTicketProvider implements ProgressTicketProvider { + + public MockProgressTicketProvider() { + } + + @Override + public ProgressTicket createTicket(String taskName, Cancellable cancellable) { + return progressTicket; + } + } +} diff --git a/modules/MostRecentFilesAPI/pom.xml b/modules/MostRecentFilesAPI/pom.xml index a9570fa3bf..25ba1a74a4 100644 --- a/modules/MostRecentFilesAPI/pom.xml +++ b/modules/MostRecentFilesAPI/pom.xml @@ -4,13 +4,13 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi mostrecentfiles-api - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm MostRecentFilesAPI @@ -29,7 +29,7 @@ - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/MostRecentFilesAPI/src/main/java/org/gephi/desktop/mrufiles/api/MostRecentFiles.java b/modules/MostRecentFilesAPI/src/main/java/org/gephi/desktop/mrufiles/api/MostRecentFiles.java index 57e1a15343..adeca04133 100644 --- a/modules/MostRecentFilesAPI/src/main/java/org/gephi/desktop/mrufiles/api/MostRecentFiles.java +++ b/modules/MostRecentFilesAPI/src/main/java/org/gephi/desktop/mrufiles/api/MostRecentFiles.java @@ -39,17 +39,17 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.mrufiles.api; import java.util.List; /** - * * @author Mathieu Bastian */ public interface MostRecentFiles { - public void addFile(String absolutePath); + void addFile(String absolutePath); - public List getMRUFileList(); + List getMRUFileList(); } diff --git a/modules/MostRecentFilesAPI/src/main/java/org/gephi/desktop/mrufiles/impl/MostRecentFilesImpl.java b/modules/MostRecentFilesAPI/src/main/java/org/gephi/desktop/mrufiles/impl/MostRecentFilesImpl.java index 1ce4dae95e..e7f46a6c2f 100644 --- a/modules/MostRecentFilesAPI/src/main/java/org/gephi/desktop/mrufiles/impl/MostRecentFilesImpl.java +++ b/modules/MostRecentFilesAPI/src/main/java/org/gephi/desktop/mrufiles/impl/MostRecentFilesImpl.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.mrufiles.impl; import java.beans.PropertyChangeEvent; @@ -53,24 +54,23 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = MostRecentFiles.class) public class MostRecentFilesImpl implements MostRecentFiles { //http://blogs.kiyut.com/tonny/2007/08/09/netbeans-platform-and-most-recently-used-file-mru/ + public static final String MRU_FILE_LIST_PROPERTY = "MRUFileList"; protected static String DEFAULT_NODE_NAME = "prefs"; protected String nodeName = null; - private EventListenerList listenerList; - public static final String MRU_FILE_LIST_PROPERTY = "MRUFileList"; - private List mruFileList; - private int maxSize; + private final EventListenerList listenerList; + private final List mruFileList; + private final int maxSize; public MostRecentFilesImpl() { nodeName = "mrufiles"; maxSize = 9; // default is 9 - mruFileList = new ArrayList(maxSize); + mruFileList = new ArrayList<>(maxSize); listenerList = new EventListenerList(); retrieve(); } diff --git a/modules/MostRecentFilesAPI/src/main/nbm/manifest.mf b/modules/MostRecentFilesAPI/src/main/nbm/manifest.mf index 77ab8507db..89fe22e66a 100644 --- a/modules/MostRecentFilesAPI/src/main/nbm/manifest.mf +++ b/modules/MostRecentFilesAPI/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 OpenIDE-Module-Localizing-Bundle: org/gephi/desktop/mrufiles/api/Bundle.properties AutoUpdate-Essential-Module: true -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi UI +OpenIDE-Module-Name: MostRecentFilesAPI \ No newline at end of file diff --git a/modules/MostRecentFilesAPI/src/main/nbm/module.xml b/modules/MostRecentFilesAPI/src/main/nbm/module.xml deleted file mode 100644 index 1c4153170d..0000000000 --- a/modules/MostRecentFilesAPI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle.properties b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle.properties index 962c4fcd75..97ed07a34b 100644 --- a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle.properties +++ b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle.properties @@ -1,3 +1 @@ -OpenIDE-Module-Display-Category=Gephi UI -OpenIDE-Module-Name=MostRecentFilesAPI OpenIDE-Module-Short-Description=Access most recent files opened diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_ar.properties b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_ca.properties b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_ca.properties new file mode 100644 index 0000000000..cd8641faf4 --- /dev/null +++ b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_ca.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=Accedeix als ϊltims fitxers oberts diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_cs.properties b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_cs.properties index ac5703e777..fb385cf902 100644 --- a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_cs.properties +++ b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_cs.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-21 21\:47+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Short-Description=Vstoupit do ned\u00e1vno otev\u0159en\u00fdch soubor\u016f +OpenIDE-Module-Short-Description=Vstoupit do nedαvno otev\u0159enύch soubor\u016f diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_de.properties b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_de.properties new file mode 100644 index 0000000000..564fbc30d9 --- /dev/null +++ b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_de.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=Kόrzlich geφffnete Dateien diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_es.properties b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_es.properties index 5f0b73c756..f1e2b13843 100644 --- a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_es.properties +++ b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_es.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:01+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Short-Description=Acceder a los archivos abiertos m\u00e1s recientemente +OpenIDE-Module-Short-Description=Acceder a los archivos abiertos mαs recientemente diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_fr.properties b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_fr.properties index e79dbea68c..283e7df619 100644 --- a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_fr.properties +++ b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_fr.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 23\:01+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Acc\u00e8de aux fichiers ouverts les plus r\u00e9cents. +OpenIDE-Module-Short-Description=Accθde aux fichiers ouverts les plus rιcents. diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_he.properties b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_he.properties new file mode 100644 index 0000000000..1b20c8e170 --- /dev/null +++ b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_he.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=Access most recent files opened diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_hu.properties b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_hu.properties new file mode 100644 index 0000000000..e8c7e9990e --- /dev/null +++ b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_hu.properties @@ -0,0 +1,3 @@ + + +OpenIDE-Module-Short-Description=Hozz\u00E1f\u00E9r\u00E9s a legut\u00F3bb megnyitott f\u00E1jlokhoz diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_it.properties b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_it.properties new file mode 100644 index 0000000000..1b20c8e170 --- /dev/null +++ b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_it.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=Access most recent files opened diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_ja.properties b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_ja.properties index 2a58e47065..d22c7753e4 100644 --- a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_ja.properties +++ b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_ja.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-14 08\:39+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u6700\u8fd1\u958b\u3044\u305f\u30d5\u30a1\u30a4\u30eb\u306b\u30a2\u30af\u30bb\u30b9 +OpenIDE-Module-Short-Description=\u6700\u8fd1\u958b\u3044\u305f\u30d5\u30a1\u30a4\u30eb\u306b\u30a2\u30af\u30bb\u30b9 diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_ko.properties b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_ko.properties new file mode 100644 index 0000000000..d39fb794d5 --- /dev/null +++ b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_ko.properties @@ -0,0 +1,3 @@ + + +OpenIDE-Module-Short-Description=\uCD5C\uADFC \uD30C\uC77C \uC811\uADFC\uD558\uAE30 diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_nl.properties b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_nl.properties new file mode 100644 index 0000000000..1b20c8e170 --- /dev/null +++ b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_nl.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=Access most recent files opened diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_pt_BR.properties b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_pt_BR.properties index 742c78648e..097628f3ca 100644 --- a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_pt_BR.properties +++ b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_pt_BR.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 15\:32+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Acessar arquivos mais recentemente abertos +OpenIDE-Module-Short-Description=Acessar arquivos mais recentemente abertos diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_ro.properties b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_ro.properties new file mode 100644 index 0000000000..a5a49933f7 --- /dev/null +++ b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_ro.properties @@ -0,0 +1,3 @@ + + +OpenIDE-Module-Short-Description=Acceseaz\u0103 fi\u0219ierele deschise cel mai recent diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_ru.properties b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_ru.properties index 78a74af187..6f3b74f3ab 100644 --- a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_ru.properties +++ b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_ru.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-08 06\:22+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Short-Description=\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0432\u0448\u0438\u043c\u0441\u044f \u0444\u0430\u0439\u043b\u0430\u043c +OpenIDE-Module-Short-Description=\u0414\u043e\u0441\u0442\u0443\u043f \u043a \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u043c \u043e\u0442\u043a\u0440\u044b\u0432\u0430\u0432\u0448\u0438\u043c\u0441\u044f \u0444\u0430\u0439\u043b\u0430\u043c diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_th.properties b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_tr.properties b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_tr.properties new file mode 100644 index 0000000000..1b20c8e170 --- /dev/null +++ b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_tr.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=Access most recent files opened diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_uk.properties b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_uk.properties new file mode 100644 index 0000000000..ec7648f939 --- /dev/null +++ b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_uk.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=\u0414\u043E\u0441\u0442\u0443\u043F \u0434\u043E \u043E\u0441\u0442\u0430\u043D\u043D\u0456\u0445 \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u0438\u0445 \u0444\u0430\u0439\u043B\u0456\u0432 diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_zh_CN.properties b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_zh_CN.properties index 0920c01b30..3d2d7dec28 100644 --- a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_zh_CN.properties +++ b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_zh_CN.properties @@ -1,8 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:09+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u4f7f\u7528\u5927\u90e8\u5206\u6253\u5f00\u7684\u6587\u4ef6 +OpenIDE-Module-Short-Description=\u4f7f\u7528\u5927\u90e8\u5206\u6253\u5f00\u7684\u6587\u4ef6 diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_zh_TW.properties b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_zh_TW.properties new file mode 100644 index 0000000000..1b20c8e170 --- /dev/null +++ b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/Bundle_zh_TW.properties @@ -0,0 +1 @@ +OpenIDE-Module-Short-Description=Access most recent files opened diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/cs.po b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/cs.po deleted file mode 100644 index d48483f80e..0000000000 --- a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/cs.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-21 21:47+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Vstoupit do nedΓ‘vno otevΕ™enΓ½ch souborΕ―" diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/es.po b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/es.po deleted file mode 100644 index 9102012731..0000000000 --- a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/es.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:01+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Acceder a los archivos abiertos mΓ‘s recientemente" diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/fr.po b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/fr.po deleted file mode 100644 index 90b7d4049b..0000000000 --- a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/fr.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 23:01+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "AccΓ¨de aux fichiers ouverts les plus rΓ©cents." diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/ja.po b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/ja.po deleted file mode 100644 index e348665b3f..0000000000 --- a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/ja.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-14 08:39+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζœ€θΏ‘ι–‹γ„γŸγƒ•γ‚‘γ‚€γƒ«γ«γ‚’γ‚―γ‚»γ‚Ή" diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/org-gephi-desktop-mrufiles-api.pot b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/org-gephi-desktop-mrufiles-api.pot deleted file mode 100644 index 4cbe5b155e..0000000000 --- a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/org-gephi-desktop-mrufiles-api.pot +++ /dev/null @@ -1,19 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Access most recent files opened" diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/pt_BR.po b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/pt_BR.po deleted file mode 100644 index 5e69c27fe7..0000000000 --- a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/pt_BR.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 15:32+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Acessar arquivos mais recentemente abertos" diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/ru.po b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/ru.po deleted file mode 100644 index e5702f7546..0000000000 --- a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/ru.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-08 06:22+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Доступ ΠΊ послСдним ΠΎΡ‚ΠΊΡ€Ρ‹Π²Π°Π²ΡˆΠΈΠΌΡΡ Ρ„Π°ΠΉΠ»Π°ΠΌ" diff --git a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/zh_CN.po b/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/zh_CN.po deleted file mode 100644 index 3fab93879e..0000000000 --- a/modules/MostRecentFilesAPI/src/main/resources/org/gephi/desktop/mrufiles/api/zh_CN.po +++ /dev/null @@ -1,21 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:09+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "δ½Ώη”¨ε€§ιƒ¨εˆ†ζ‰“εΌ€ηš„ζ–‡δ»Ά" diff --git a/modules/PerspectiveAPI/pom.xml b/modules/PerspectiveAPI/pom.xml index 1b21ed9c6d..11a299022e 100644 --- a/modules/PerspectiveAPI/pom.xml +++ b/modules/PerspectiveAPI/pom.xml @@ -4,13 +4,13 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi perspective-api - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm PerspectiveAPI @@ -24,6 +24,10 @@ org.netbeans.api org-openide-util + + org.netbeans.api + org-openide-util-ui + org.netbeans.api org-openide-windows @@ -41,7 +45,7 @@ - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/PerspectiveAPI/src/main/java/org/gephi/perspective/PerspectiveControllerImpl.java b/modules/PerspectiveAPI/src/main/java/org/gephi/perspective/PerspectiveControllerImpl.java index be74bdc4d8..aea20d7221 100644 --- a/modules/PerspectiveAPI/src/main/java/org/gephi/perspective/PerspectiveControllerImpl.java +++ b/modules/PerspectiveAPI/src/main/java/org/gephi/perspective/PerspectiveControllerImpl.java @@ -39,32 +39,49 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.perspective; import java.awt.Dimension; import java.awt.Frame; import java.awt.Point; +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import javax.swing.SwingUtilities; import org.gephi.perspective.api.PerspectiveController; import org.gephi.perspective.spi.Perspective; import org.openide.util.Lookup; import org.openide.util.NbPreferences; +import org.openide.util.Utilities; import org.openide.util.lookup.ServiceProvider; import org.openide.windows.WindowManager; import org.openide.windows.WindowSystemEvent; import org.openide.windows.WindowSystemListener; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = PerspectiveController.class) public class PerspectiveControllerImpl implements PerspectiveController { + private static final Logger LOGGER = Logger.getLogger(PerspectiveControllerImpl.class.getName()); private static final String SELECTED_PERSPECTIVE_PREFERENCE = "PerspectiveControllerImpl_selectedPerspective"; + + // Matches frame-state="N" attribute (any integer value) inside the .wswmgr XML. + // Used (macOS only) to strip persisted MAXIMIZED state from per-role window layout files, + // which otherwise causes the window to spuriously re-maximize when switching perspectives. + private static final Pattern FRAME_STATE_ATTR_PATTERN = + Pattern.compile("(frame-state=\")(\\d+)(\")"); + + private final Perspective[] perspectives; //Data private String selectedPerspective; - private final Perspective[] perspectives; public PerspectiveControllerImpl() { //Load perspectives @@ -104,16 +121,20 @@ public void beforeLoad(WindowSystemEvent event) { @Override public void afterLoad(WindowSystemEvent event) { Frame mainWindow = WindowManager.getDefault().getMainWindow(); - if (mainWindow != null) { - if (lastDimension != null) { - mainWindow.setSize(lastDimension); - } - if (lastLocation != null) { - mainWindow.setLocation(lastLocation); - } - if (lastState != null) { - mainWindow.setState(lastState); - } + if (mainWindow == null) { + return; + } + if (lastDimension != null) { + mainWindow.setSize(lastDimension); + } + if (lastLocation != null) { + mainWindow.setLocation(lastLocation); + } + if (lastState != null) { + // setExtendedState (post-1.4) is the correct API for MAXIMIZED_BOTH; + // the legacy setState only handles the ICONIFIED bit and is a no-op + // for maximized states, which previously left the frame stuck. + mainWindow.setExtendedState(lastState); } } @@ -129,10 +150,77 @@ public void beforeSave(WindowSystemEvent event) { @Override public void afterSave(WindowSystemEvent event) { + // macOS-only: NetBeans persists frame-state="6" (MAXIMIZED_BOTH) into per-role + // .wswmgr files when the window is maximized. On a later perspective switch, + // loading that role re-applies the maximized state from disk and triggers a + // macOS native zoom that we cannot reliably override. We sidestep the issue by + // stripping the persisted maximized state from the role files right after save. + // In-session preservation of maximization across perspective switches still + // works through lastState/lastDimension/lastLocation captured above. + // On Windows/Linux the persisted state is left untouched so cross-session + // "open maximized" behavior is preserved. + if (Utilities.isMac()) { + sanitizePersistedFrameStateOnMac(); + } } }); } + /** + * Rewrites every {@code WindowManager.wswmgr} file under the user's config directory so + * that any {@code frame-state="N"} attribute is forced to {@code frame-state="0"} + * (NORMAL). All IO failures are caught and logged so that a read-only filesystem, + * a missing file, or a transient lock never breaks a perspective switch. + */ + private static void sanitizePersistedFrameStateOnMac() { + String userdir = System.getProperty("netbeans.user"); + if (userdir == null || userdir.isEmpty()) { + return; + } + File configDir = new File(userdir, "config"); + File[] roleDirs = configDir.listFiles((d, name) -> name.startsWith("Windows2Local")); + if (roleDirs == null) { + return; + } + for (File roleDir : roleDirs) { + File wmFile = new File(roleDir, "WindowManager.wswmgr"); + if (!wmFile.isFile() || !wmFile.canRead()) { + continue; + } + try { + String content = new String(Files.readAllBytes(wmFile.toPath()), StandardCharsets.UTF_8); + Matcher m = FRAME_STATE_ATTR_PATTERN.matcher(content); + StringBuilder sb = new StringBuilder(content.length()); + boolean changed = false; + // Explicitly build the replacement instead of relying on $1/$3 backreferences, + // because the literal "0" we want to insert would otherwise collide with Java's + // $1 / $10 group syntax in replaceAll(). + while (m.find()) { + if (!"0".equals(m.group(2))) { + changed = true; + } + m.appendReplacement(sb, Matcher.quoteReplacement(m.group(1) + "0" + m.group(3))); + } + m.appendTail(sb); + if (!changed) { + continue; + } + if (!wmFile.canWrite()) { + LOGGER.log(Level.FINE, + "[Perspective] cannot sanitize {0}: file not writable", wmFile.getAbsolutePath()); + continue; + } + Files.write(wmFile.toPath(), sb.toString().getBytes(StandardCharsets.UTF_8)); + } catch (IOException | RuntimeException ex) { + // Defensive: never let a sanitization failure break the perspective switch. + // RuntimeException covers SecurityException (read-only FS, sandboxing) and + // any unexpected regex / IO runtime errors. + LOGGER.log(Level.WARNING, + "[Perspective] failed to sanitize " + wmFile.getAbsolutePath() + ": " + ex.getMessage(), ex); + } + } + } + @Override public Perspective[] getPerspectives() { return perspectives; @@ -153,9 +241,7 @@ public void selectPerspective(Perspective perspective) { if (perspective.getName().equals(selectedPerspective)) { return; } - openAndCloseMembers(perspective); - selectedPerspective = perspective.getName(); NbPreferences.root().put(SELECTED_PERSPECTIVE_PREFERENCE, selectedPerspective); } diff --git a/modules/PerspectiveAPI/src/main/java/org/gephi/perspective/api/PerspectiveController.java b/modules/PerspectiveAPI/src/main/java/org/gephi/perspective/api/PerspectiveController.java index ce9d979760..e8ae06ace3 100644 --- a/modules/PerspectiveAPI/src/main/java/org/gephi/perspective/api/PerspectiveController.java +++ b/modules/PerspectiveAPI/src/main/java/org/gephi/perspective/api/PerspectiveController.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.perspective.api; import org.gephi.perspective.spi.Perspective; @@ -55,31 +56,33 @@ Development and Distribution License("CDDL") (collectively, the *

    • org.gephi.perspective.default=OverviewGroup
    • *
    • org.gephi.perspective.default=LaboratoryGroup
    • *
    • org.gephi.perspective.default=PreviewGroup
    - * - * @see Perspective - * @see PerspectiveMember + * * @author Mathieu Bastian + * @see Perspective */ public interface PerspectiveController { /** * Returns the selected perspective or null if no perspective * is selected. By default the 'Overview' perspective is selected. + * * @return the currently selected perspective or null */ - public Perspective getSelectedPerspective(); + Perspective getSelectedPerspective(); /** * Returns all perspectives installed. This is equivalent to * Lookup.getDefault().lookupAll(Perspective.class). + * * @return all installed perspectives */ - public Perspective[] getPerspectives(); + Perspective[] getPerspectives(); /** * Switch the current perspective to the given perspective. Only one perspective * can be selected at a time. + * * @param perspective the perspective to select */ - public void selectPerspective(Perspective perspective); + void selectPerspective(Perspective perspective); } diff --git a/modules/PerspectiveAPI/src/main/java/org/gephi/perspective/spi/Perspective.java b/modules/PerspectiveAPI/src/main/java/org/gephi/perspective/spi/Perspective.java index ce570faa7e..dd66f81c62 100644 --- a/modules/PerspectiveAPI/src/main/java/org/gephi/perspective/spi/Perspective.java +++ b/modules/PerspectiveAPI/src/main/java/org/gephi/perspective/spi/Perspective.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.perspective.spi; import javax.swing.Icon; @@ -47,33 +48,36 @@ Development and Distribution License("CDDL") (collectively, the * Define a group of components which are showed in the banner. Overview, Data * Laboratory and Preview are perspectives. *

    Create a new Perspective

    - *
    1. Create a new module and set Perspective API, + *
      1. Create a new module and set Perspective API, * and Lookup API as dependencies.
      2. *
      3. Create a new implementation of perspective and fill methods.
      4. *
      5. Add @ServiceProvider annotation to your class to be found by * the system, like @ServiceProvider(service = Perspective.class, position = 500).
      6. *
      7. Set the position to define the order of appearance, Overview is 100, Preview is 300.
      8. *
      - * @see PerspectiveMember + * * @author Mathieu Bastian */ public interface Perspective { /** * Return the name to display in the user interface. + * * @return the perspective display name */ - public String getDisplayName(); + String getDisplayName(); /** * Return a unique identifier for this perspective. + * * @return the name of the perspective */ - public String getName(); + String getName(); /** * Return the icon of the perspective. + * * @return the perspective's icon, or null */ - public Icon getIcon(); + Icon getIcon(); } diff --git a/modules/PerspectiveAPI/src/main/nbm/manifest.mf b/modules/PerspectiveAPI/src/main/nbm/manifest.mf index 04cee3017d..944912cb78 100644 --- a/modules/PerspectiveAPI/src/main/nbm/manifest.mf +++ b/modules/PerspectiveAPI/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/perspective/api/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi UI +OpenIDE-Module-Name: Perspective API \ No newline at end of file diff --git a/modules/PerspectiveAPI/src/main/nbm/module.xml b/modules/PerspectiveAPI/src/main/nbm/module.xml deleted file mode 100644 index 7d7bb224e6..0000000000 --- a/modules/PerspectiveAPI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle.properties b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle.properties index 37da90d5c6..578780136b 100644 --- a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle.properties +++ b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle.properties @@ -1,5 +1,2 @@ -OpenIDE-Module-Display-Category=Gephi UI -OpenIDE-Module-Long-Description=\ - API/SPI for perspectives and TopComponent management -OpenIDE-Module-Name=Perspective API +OpenIDE-Module-Long-Description=API/SPI for perspectives and TopComponent management OpenIDE-Module-Short-Description=API/SPI for perspectives and TopComponent management diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_ar.properties b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_ca.properties b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_ca.properties new file mode 100644 index 0000000000..578780136b --- /dev/null +++ b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_ca.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI for perspectives and TopComponent management +OpenIDE-Module-Short-Description=API/SPI for perspectives and TopComponent management diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_cs.properties b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_cs.properties index c876f57b3d..e21870533e 100644 --- a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_cs.properties +++ b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_cs.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 18\:45+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=API/SPI pro perspektivy a spr\u00e1vu TopComponent - -OpenIDE-Module-Short-Description=API/SPI pro perspektivy a spr\u00e1vu TopComponent +OpenIDE-Module-Long-Description=API/SPI pro perspektivy a sprαvu TopComponent +OpenIDE-Module-Short-Description=API/SPI pro perspektivy a sprαvu TopComponent diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_de.properties b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_de.properties new file mode 100644 index 0000000000..fc4ac28b3e --- /dev/null +++ b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_de.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI fόr Perspektiven und Verwaltung der TopComponent +OpenIDE-Module-Short-Description=API/SPI fόr Perspektiven und Verwaltung der TopComponent diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_es.properties b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_es.properties index a128b80d07..82001ab204 100644 --- a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_es.properties +++ b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_es.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-16 23\:11+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=API/SPI para la gesti\u00f3n de perspectivas y TopComponent - -OpenIDE-Module-Short-Description=API/SPI para la gesti\u00f3n de perspectivas y TopComponent +OpenIDE-Module-Long-Description=API/SPI para la gestiσn de perspectivas y TopComponent +OpenIDE-Module-Short-Description=API/SPI para la gestiσn de perspectivas y TopComponent diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_fr.properties b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_fr.properties index f904e81c8b..e06449380d 100644 --- a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_fr.properties +++ b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_fr.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-08 14\:47+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API/SPI for perspectives and TopComponent management - -OpenIDE-Module-Short-Description=API/SPI for perspectives and TopComponent management +OpenIDE-Module-Long-Description=API/SPI pour la gestion des perspectives et TopComponent +OpenIDE-Module-Short-Description=API/SPI pour la gestion des perspectives et TopComponent diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_he.properties b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_he.properties new file mode 100644 index 0000000000..578780136b --- /dev/null +++ b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_he.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI for perspectives and TopComponent management +OpenIDE-Module-Short-Description=API/SPI for perspectives and TopComponent management diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_hu.properties b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_hu.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_hu.properties @@ -0,0 +1 @@ + diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_it.properties b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_it.properties new file mode 100644 index 0000000000..b7325748be --- /dev/null +++ b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_it.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI per la gestione delle prospettive e dei TopComponent +OpenIDE-Module-Short-Description=API/SPI for perspectives and TopComponent management diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_ja.properties b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_ja.properties index b74089064e..c0fe481236 100644 --- a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_ja.properties +++ b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_ja.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-15 02\:14+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u4fef\u77b0\u306e\u305f\u3081\u306eAPI/ASP\u3068TopComponent\u7ba1\u7406 - -OpenIDE-Module-Short-Description=\u4fef\u77b0\u306e\u305f\u3081\u306eAPI/ASP\u3068TopComponent\u7ba1\u7406 +OpenIDE-Module-Long-Description=\u4fef\u77b0\u306e\u305f\u3081\u306eAPI/ASP\u3068TopComponent\u7ba1\u7406 +OpenIDE-Module-Short-Description=\u4fef\u77b0\u306e\u305f\u3081\u306eAPI/ASP\u3068TopComponent\u7ba1\u7406 diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_ko.properties b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_ko.properties new file mode 100644 index 0000000000..c51e5f3aab --- /dev/null +++ b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_ko.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Short-Description=Perspective \uBC0F TopComponent \uAD00\uB9AC\uB97C \uC704\uD55C API/SPI +OpenIDE-Module-Long-Description=Perspective \uBC0F TopComponent \uAD00\uB9AC\uB97C \uC704\uD55C API/SPI diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_nl.properties b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_nl.properties new file mode 100644 index 0000000000..578780136b --- /dev/null +++ b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_nl.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI for perspectives and TopComponent management +OpenIDE-Module-Short-Description=API/SPI for perspectives and TopComponent management diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_pt_BR.properties b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_pt_BR.properties index 138f583888..7974f11f0c 100644 --- a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_pt_BR.properties +++ b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_pt_BR.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio Faria Jr. , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-17 13\:13+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API/SPI para perspectivas e gerenciamento de TopComponent - -OpenIDE-Module-Short-Description=API/SPI para perspectivas e gerenciamento de TopComponent +OpenIDE-Module-Long-Description=API/SPI para perspectivas e gerenciamento de TopComponent +OpenIDE-Module-Short-Description=API/SPI para perspectivas e gerenciamento de TopComponent diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_ro.properties b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_ro.properties new file mode 100644 index 0000000000..c1bf259309 --- /dev/null +++ b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_ro.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Long-Description=API/SPI pentru gestionarea perspectivelor \u0219i a TopComponent-elor +OpenIDE-Module-Short-Description=API/SPI pentru gestionarea perspectivelor \u0219i a TopComponent-elor diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_ru.properties b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_ru.properties index e894e0704b..578780136b 100644 --- a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_ru.properties +++ b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_ru.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-12 21\:44+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - OpenIDE-Module-Long-Description=API/SPI for perspectives and TopComponent management - OpenIDE-Module-Short-Description=API/SPI for perspectives and TopComponent management diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_th.properties b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_tr.properties b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_tr.properties new file mode 100644 index 0000000000..578780136b --- /dev/null +++ b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_tr.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI for perspectives and TopComponent management +OpenIDE-Module-Short-Description=API/SPI for perspectives and TopComponent management diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_uk.properties b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_uk.properties new file mode 100644 index 0000000000..4442b40209 --- /dev/null +++ b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_uk.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI \u0434\u043B\u044F \u043F\u0435\u0440\u0441\u043F\u0435\u043A\u0442\u0438\u0432 \u0456 \u043A\u0435\u0440\u0443\u0432\u0430\u043D\u043D\u044F TopComponent +OpenIDE-Module-Short-Description=API/SPI \u0434\u043B\u044F \u043F\u0435\u0440\u0441\u043F\u0435\u043A\u0442\u0438\u0432 \u0456 \u043A\u0435\u0440\u0443\u0432\u0430\u043D\u043D\u044F TopComponent diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_zh_CN.properties b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_zh_CN.properties index 17f07c13f3..022eaec795 100644 --- a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_zh_CN.properties +++ b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_zh_CN.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-15 09\:58+0000\nLast-Translator\: Xi-Nian Zuo \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u524d\u666f\u548cTopComponent\u7ba1\u7406\u7528\u7684API/SPI - -OpenIDE-Module-Short-Description=\u524d\u666f\u548cTopComponent\u7ba1\u7406\u7528\u7684API/SPI +OpenIDE-Module-Long-Description=\u524d\u666f\u548cTopComponent\u7ba1\u7406\u7528\u7684API/SPI +OpenIDE-Module-Short-Description=\u524d\u666f\u548cTopComponent\u7ba1\u7406\u7528\u7684API/SPI diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_zh_TW.properties b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_zh_TW.properties new file mode 100644 index 0000000000..578780136b --- /dev/null +++ b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/Bundle_zh_TW.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI for perspectives and TopComponent management +OpenIDE-Module-Short-Description=API/SPI for perspectives and TopComponent management diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/cs.po b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/cs.po deleted file mode 100644 index 6c7833118e..0000000000 --- a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/cs.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 18:45+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI pro perspektivy a sprΓ‘vu TopComponent" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI pro perspektivy a sprΓ‘vu TopComponent" diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/es.po b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/es.po deleted file mode 100644 index 697e849824..0000000000 --- a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/es.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-16 23:11+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI para la gestiΓ³n de perspectivas y TopComponent" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI para la gestiΓ³n de perspectivas y TopComponent" diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/fr.po b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/fr.po deleted file mode 100644 index 7928733b5a..0000000000 --- a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/fr.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-08 14:47+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI for perspectives and TopComponent management" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI for perspectives and TopComponent management" diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/ja.po b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/ja.po deleted file mode 100644 index 897bb14d2b..0000000000 --- a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-15 02:14+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "俯瞰γγŸγ‚γAPI/ASPとTopComponentη‘理" - -msgid "OpenIDE-Module-Short-Description" -msgstr "俯瞰γγŸγ‚γAPI/ASPとTopComponentη‘理" diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/org-gephi-perspective-api.pot b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/org-gephi-perspective-api.pot deleted file mode 100644 index a6bd498792..0000000000 --- a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/org-gephi-perspective-api.pot +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI for perspectives and TopComponent management" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI for perspectives and TopComponent management" diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/package.html b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/package.html index 37886cead4..90e232da90 100644 --- a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/package.html +++ b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/package.html @@ -1,18 +1,23 @@ - - - - API for perspective management. -

      - A perspective is a set of panels in the user interface. Overview, - Data Laboratory and Preview are the default perspectives. -

      -

      - The API simply allows to control the currently selected perspective. -

      -

      - The SPI provides the interfaces to implement new perspectives. Top - components can attach themselves to one or several perspectives by - using the @TopComponent.Registration annotation. -

      - - + + + + org.gephi.perspective.api + + +

      + API for perspective management. +

      +

      + A perspective is a set of panels in the user interface. Overview, + Data Laboratory and Preview are the default perspectives. +

      +

      + The API simply allows to control the currently selected perspective. +

      +

      + The SPI provides the interfaces to implement new perspectives. Top + components can attach themselves to one or several perspectives by + using the @TopComponent.Registration annotation. +

      + + diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/pt_BR.po b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/pt_BR.po deleted file mode 100644 index 0b6e6650e0..0000000000 --- a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/pt_BR.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio Faria Jr. , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-17 13:13+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI para perspectivas e gerenciamento de TopComponent" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI para perspectivas e gerenciamento de TopComponent" diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/ru.po b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/ru.po deleted file mode 100644 index 600874f5a1..0000000000 --- a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/ru.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-12 21:44+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI for perspectives and TopComponent management" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI for perspectives and TopComponent management" diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/zh_CN.po b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/zh_CN.po deleted file mode 100644 index e2594659c6..0000000000 --- a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/api/zh_CN.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-15 09:58+0000\n" -"Last-Translator: Xi-Nian Zuo \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ε‰ζ™―ε’ŒTopComponentη‘η†η”¨ηš„API/SPI" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ε‰ζ™―ε’ŒTopComponentη‘η†η”¨ηš„API/SPI" diff --git a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/spi/package.html b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/spi/package.html index df8782b708..7afebd0d9b 100644 --- a/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/spi/package.html +++ b/modules/PerspectiveAPI/src/main/resources/org/gephi/perspective/spi/package.html @@ -1,28 +1,53 @@ - - - - Interfaces for creating new perspectives and perspective members. -

      Create a new Perspective

      -
      1. Create a new module and set Perspective API, - and Lookup API as dependencies.
      2. -
      3. Create a new implementation of perspective and fill methods.
      4. -
      5. Add @ServiceProvider annotation to your class to be found by - the system, like @ServiceProvider(service = Perspective.class, position = 500).
      6. -
      7. Set the position to define the order of appearance, Overview is 100, Preview is 300.
      8. -
      -

      HowTo attach a TopComponent to a perspective

      -
      1. Create a new class which implements the PerspectiveMember interface
      2. -
      3. Implement the isMemberOf() method. Simply test if the given - perspective is the one you want to attach the component. For default perspectives, first - add a dependency to the DesktopPerspective module and then for instance with preview: -
        public boolean isMemberOf(Perspective perspective) {
        -    return perspective instanceof PreviewPerspective;
        -}
      4. -
      5. Return the unique TopComponent identifier for the getTopComponentId() - method. The identifier is defined in the TopComponent annotations.
      6. -
      7. Add @ServiceProvider annotation to your class to be found by - the system, like @ServiceProvider(service = PerspectiveMember.class).
      8. -
      - - - + + + + org.gephi.perspective.spi + + +

      + Interfaces for creating new perspectives and perspective members. +

      +

      Create a new Perspective

      +
        +
      1. + Create a new module and set Perspective API, + and Lookup API as dependencies. +
      2. +
      3. + Create a new implementation of perspective and fill methods. +
      4. +
      5. + Add @ServiceProvider annotation to your class to be found by + the system, like @ServiceProvider(service = Perspective.class, position = 500). +
      6. +
      7. + Set the position to define the order of appearance, Overview is 100, Preview is 300. +
      8. +
      +

      HowTo attach a TopComponent to a perspective

      +
        +
      1. + Create a new class which implements the PerspectiveMember interface +
      2. +
      3. + Implement the isMemberOf() method. Simply test if the given + perspective is the one you want to attach the component. For default perspectives, first + add a dependency to the DesktopPerspective module and then for instance with preview: +
                      
        +public boolean isMemberOf(Perspective perspective) {
        +    return perspective instanceof PreviewPerspective;
        +}
        +                
        +
      4. +
      5. + Return the unique TopComponent identifier for the getTopComponentId() + method. The identifier is defined in the TopComponent annotations. +
      6. +
      7. + Add @ServiceProvider annotation to your class to be found by + the system, like @ServiceProvider(service = PerspectiveMember.class). +
      8. +
      + + + diff --git a/modules/PreviewAPI/pom.xml b/modules/PreviewAPI/pom.xml index 6ea15976d3..f57baf1142 100644 --- a/modules/PreviewAPI/pom.xml +++ b/modules/PreviewAPI/pom.xml @@ -4,13 +4,13 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi preview-api - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm PreviewAPI @@ -24,6 +24,10 @@ ${project.groupId} project-api + + ${project.groupId} + visualization-api + ${project.groupId} utils-longtask @@ -32,6 +36,10 @@ ${project.groupId} core-library-wrapper + + ${project.groupId} + batik-wrapper + org.netbeans.api org-openide-util-lookup @@ -40,17 +48,33 @@ org.netbeans.api org-openide-util + + org.netbeans.api + org-openide-util-ui + ${project.groupId} utils - ${project.version} + + + + ${project.groupId} + project-api + test-jar + test + + + ${project.groupId} + graph-api + test + test-jar - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin @@ -58,7 +82,7 @@ org.gephi.preview.presets org.gephi.preview.spi org.gephi.preview.types - org.gephi.preview.types.propertyeditors + org.gephi.preview.types.editors diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/AbstractRenderTarget.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/AbstractRenderTarget.java index 1cc334284f..69fe7f02af 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/AbstractRenderTarget.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/AbstractRenderTarget.java @@ -39,13 +39,13 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview; import org.gephi.utils.longtask.spi.LongTask; import org.gephi.utils.progress.ProgressTicket; /** - * * @author Mathieu Bastian */ public class AbstractRenderTarget implements LongTask { @@ -63,12 +63,12 @@ public boolean cancel() { return true; } + public ProgressTicket getProgressTicket() { + return progressTicket; + } + @Override public void setProgressTicket(ProgressTicket progressTicket) { this.progressTicket = progressTicket; } - - public ProgressTicket getProgressTicket() { - return progressTicket; - } } diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/G2DRenderTargetBuilder.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/G2DRenderTargetBuilder.java index 69899ecd75..5725410b4b 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/G2DRenderTargetBuilder.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/G2DRenderTargetBuilder.java @@ -39,18 +39,18 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview; import java.awt.Color; -import java.awt.Dimension; import java.awt.Graphics2D; import java.awt.GraphicsConfiguration; import java.awt.GraphicsEnvironment; import java.awt.Image; -import java.awt.Point; import java.awt.RenderingHints; import java.awt.Transparency; import java.awt.geom.AffineTransform; +import org.gephi.preview.api.CanvasSize; import org.gephi.preview.api.G2DTarget; import org.gephi.preview.api.PreviewController; import org.gephi.preview.api.PreviewModel; @@ -62,7 +62,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = RenderTargetBuilder.class) @@ -88,13 +87,11 @@ public String getName() { public static class G2DTargetImpl extends AbstractRenderTarget implements G2DTarget { - private final PreviewController previewController; private final PreviewModel previewModel; private G2DGraphics graphics; public G2DTargetImpl(PreviewModel model, int width, int height) { graphics = new G2DGraphics(width, height); - previewController = Lookup.getDefault().lookup(PreviewController.class); previewModel = model; } @@ -152,9 +149,9 @@ public void reset() { } @Override - public void refresh() { + public synchronized void refresh() { if (graphics != null) { - graphics.refresh(previewController.getModel(), this); + graphics.refresh(previewModel, this); } } } @@ -162,21 +159,21 @@ public void refresh() { public static class G2DGraphics { private final PreviewController previewController = Lookup.getDefault().lookup(PreviewController.class); - private PreviewModel model; - private boolean inited; //Drawing private final Image image; private final int width; private final int height; private final Graphics2D g2; private final Vector trans = new Vector(); + private boolean inited; private float scaling; private Color background = Color.WHITE; public G2DGraphics(int width, int height) { this.width = width; this.height = height; - GraphicsConfiguration graphicsConfiguration = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration(); + GraphicsConfiguration graphicsConfiguration = + GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration(); image = graphicsConfiguration.createCompatibleImage(width, height, Transparency.TRANSLUCENT); g2 = (Graphics2D) image.getGraphics(); @@ -186,33 +183,39 @@ public G2DGraphics(int width, int height) { g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_LCD_HRGB); } - public void refresh(PreviewModel previewModel, RenderTarget target) { - this.model = previewModel; - if (model != null) { - background = model.getProperties().getColorValue(PreviewProperty.BACKGROUND_COLOR); - initAppletLayout(); + public void refresh(PreviewModel m, RenderTarget target) { + if (m == null) { + return; + } + + if (!inited && m.getGraphicsCanvasSize() != null) { + CanvasSize cs = getSheetCanvasSize(m); + scaling = computeDefaultScaling(cs); + fit(cs); + inited = true; + } - g2.clearRect(0, 0, width, height); - g2.setTransform(new AffineTransform()); + g2.setTransform(new AffineTransform()); - if (background != null) { - g2.setColor(background); - g2.fillRect(0, 0, width, height); - } + background = m.getProperties() + .getColorValue(PreviewProperty.BACKGROUND_COLOR); + if (background != null) { + g2.setColor(background); + g2.fillRect(0, 0, width, height); + } - // user zoom - Vector center = new Vector(width / 2f, height / 2f); - Vector scaledCenter = Vector.mult(center, scaling); - Vector scaledTrans = Vector.sub(center, scaledCenter); - g2.translate(scaledTrans.x, scaledTrans.y); - g2.scale(scaling, scaling); + // user zoom + Vector center = new Vector(width / 2F, height / 2F); + Vector scaledCenter = Vector.mult(center, scaling); + Vector scaledTrans = Vector.sub(center, scaledCenter); + g2.translate(scaledTrans.x, scaledTrans.y); + g2.scale(scaling, scaling); - // user move - g2.translate(trans.x, trans.y); + // user move + g2.translate(trans.x, trans.y); - //Draw target - previewController.render(target); - } + //Draw target + previewController.render(target); } public Vector getTranslate() { @@ -247,33 +250,33 @@ public void reset() { inited = false; } - /** - * Initializes the preview applet layout according to the graph's - * dimension. - */ - private void initAppletLayout() { -// graphSheet.setMargin(MARGIN); - if (!inited && model != null && model.getDimensions() != null && model.getTopLeftPosition() != null) { - - // initializes zoom - Dimension dimensions = model.getDimensions(); - Point topLeftPostition = model.getTopLeftPosition(); - Vector box = new Vector((float) dimensions.getWidth(), (float) dimensions.getHeight()); - float ratioWidth = width / box.x; - float ratioHeight = height / box.y; - scaling = ratioWidth < ratioHeight ? ratioWidth : ratioHeight; - - // initializes move - Vector semiBox = Vector.div(box, 2); - Vector topLeftVector = new Vector((float) topLeftPostition.x, (float) topLeftPostition.y); - Vector center = new Vector(width / 2f, height / 2f); - Vector scaledCenter = Vector.add(topLeftVector, semiBox); - trans.set(center); - trans.sub(scaledCenter); -// lastMove.set(trans); + private CanvasSize getSheetCanvasSize(PreviewModel m) { + CanvasSize cs = m.getGraphicsCanvasSize(); + float marginPercentage = m.getProperties() + .getFloatValue(PreviewProperty.MARGIN); + float marginWidth = cs.getWidth() * marginPercentage / 100F; + float marginHeight = cs.getHeight() * marginPercentage / 100F; + return new CanvasSize( + cs.getX() - marginWidth, + cs.getY() - marginHeight, + cs.getWidth() + 2F * marginWidth, + cs.getHeight() + 2F * marginHeight); + } - inited = true; - } + private float computeDefaultScaling(CanvasSize cs) { + float ratioWidth = width / cs.getWidth(); + float ratioHeight = height / cs.getHeight(); + return ratioWidth < ratioHeight ? ratioWidth : ratioHeight; + } + + private void fit(CanvasSize cs) { + Vector box = new Vector(cs.getWidth(), cs.getHeight()); + Vector semiBox = Vector.div(box, 2F); + Vector topLeft = new Vector(cs.getX(), cs.getY()); + Vector center = new Vector(width / 2F, height / 2F); + Vector scaledCenter = Vector.add(topLeft, semiBox); + trans.set(center); + trans.sub(scaledCenter); } } } diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/PDFRenderTargetBuilder.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/PDFRenderTargetBuilder.java index 60e726236f..f8bf9b38ea 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/PDFRenderTargetBuilder.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/PDFRenderTargetBuilder.java @@ -39,73 +39,106 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ -package org.gephi.preview; -import com.itextpdf.text.FontFactory; -import com.itextpdf.text.Rectangle; -import com.itextpdf.text.pdf.BaseFont; -import com.itextpdf.text.pdf.PdfContentByte; +package org.gephi.preview; -import java.awt.geom.AffineTransform; +import java.awt.Color; +import java.awt.Font; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.apache.fontbox.ttf.TrueTypeFont; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.font.FontMappers; +import org.apache.pdfbox.pdmodel.font.FontMapping; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType0Font; +import org.apache.pdfbox.pdmodel.font.PDType1Font; +import org.apache.pdfbox.pdmodel.font.Standard14Fonts; +import org.apache.pdfbox.util.Matrix; +import org.gephi.preview.api.CanvasSize; import org.gephi.preview.api.PDFTarget; import org.gephi.preview.api.PreviewModel; import org.gephi.preview.api.PreviewProperties; +import org.gephi.preview.api.PreviewProperty; import org.gephi.preview.api.RenderTarget; import org.gephi.preview.spi.RenderTargetBuilder; -import org.gephi.utils.progress.Progress; -import org.openide.util.Exceptions; -import org.openide.util.NbBundle; -import org.openide.util.Utilities; import org.openide.util.lookup.ServiceProvider; /** * Default implementation to PDFRenderTargetBuilder. - * + * * @author Mathieu Bastian */ @ServiceProvider(service = RenderTargetBuilder.class) public class PDFRenderTargetBuilder implements RenderTargetBuilder { - + + private static final Logger logger = Logger.getLogger(PDFRenderTargetBuilder.class.getName()); + @Override public String getName() { return RenderTarget.PDF_TARGET; } - + @Override public RenderTarget buildRenderTarget(PreviewModel previewModel) { - double width = previewModel.getDimensions().getWidth(); - double height = previewModel.getDimensions().getHeight(); - width = Math.max(1, width); - height = Math.max(1, height); - int topLeftX = previewModel.getTopLeftPosition().x; - int topLeftY = previewModel.getTopLeftPosition().y; + CanvasSize cs = previewModel.getGraphicsCanvasSize(); PreviewProperties properties = previewModel.getProperties(); float marginBottom = properties.getFloatValue(PDFTarget.MARGIN_BOTTOM); float marginLeft = properties.getFloatValue(PDFTarget.MARGIN_LEFT); float marginRight = properties.getFloatValue(PDFTarget.MARGIN_RIGHT); float marginTop = properties.getFloatValue(PDFTarget.MARGIN_TOP); - Rectangle pageSize = properties.getValue(PDFTarget.PAGESIZE); + final PDRectangle pageSize = properties.getValue(PDFTarget.PAGESIZE); boolean landscape = properties.getBooleanValue(PDFTarget.LANDSCAPE); - PdfContentByte cb = properties.getValue(PDFTarget.PDF_CONTENT_BYTE); - PDFRenderTargetImpl renderTarget = new PDFRenderTargetImpl(cb, width, height, topLeftX, topLeftY, - pageSize, marginLeft, marginRight, marginTop, marginBottom, landscape); + boolean transparentBackground = properties.getBooleanValue(PDFTarget.TRANSPARENT_BACKGROUND); + Color backgroundColor = + transparentBackground ? null : properties.getColorValue(PreviewProperty.BACKGROUND_COLOR); + PDPageContentStream cb = properties.getValue(PDFTarget.PDF_CONTENT_BYTE); + PDDocument doc = properties.getValue(PDFTarget.PDF_DOCUMENT); + PDFRenderTargetImpl renderTarget = new PDFRenderTargetImpl( + doc, + cb, + cs, + pageSize, + backgroundColor, + marginLeft, + marginRight, + marginTop, + marginBottom, + landscape); return renderTarget; } - + public static class PDFRenderTargetImpl extends AbstractRenderTarget implements PDFTarget { - - private final PdfContentByte cb; - private static boolean fontRegistered = false; + + private final PDPageContentStream cb; + private final PDDocument document; //Parameters private final float marginTop; private final float marginBottom; private final float marginLeft; private final float marginRight; private final boolean landscape; - private final Rectangle pageSize; - - public PDFRenderTargetImpl(PdfContentByte cb, double width, double height, double topLeftX, double topLeftY, - Rectangle size, float marginLeft, float marginRight, float marginTop, float marginBottom, boolean landscape) { + private final PDRectangle pageSize; + + private Map fontMap; + + public PDFRenderTargetImpl( + PDDocument doc, + PDPageContentStream cb, + CanvasSize cs, + PDRectangle size, + Color backgroundColor, + float marginLeft, + float marginRight, + float marginTop, + float marginBottom, + boolean landscape) { + this.document = doc; this.cb = cb; this.marginTop = marginTop; this.marginLeft = marginLeft; @@ -113,126 +146,128 @@ public PDFRenderTargetImpl(PdfContentByte cb, double width, double height, doubl this.marginRight = marginRight; this.pageSize = size; this.landscape = landscape; - - double centerX = topLeftX + width / 2; - double centerY = topLeftY + height / 2; + this.fontMap = new HashMap<>(); + + double centerX = cs.getX() + cs.getWidth() / 2; + double centerY = cs.getY() + cs.getHeight() / 2; //Transform double pageWidth = size.getWidth() - marginLeft - marginRight; double pageHeight = size.getHeight() - marginTop - marginBottom; - double ratioWidth = pageWidth / width; - double ratioHeight = pageHeight / height; + double ratioWidth = pageWidth / cs.getWidth(); + double ratioHeight = pageHeight / cs.getHeight(); double scale = (float) (ratioWidth < ratioHeight ? ratioWidth : ratioHeight); double translateX = (marginLeft + pageWidth / 2.) / scale; double translateY = (marginBottom + pageHeight / 2.) / scale; - cb.transform(AffineTransform.getTranslateInstance(-centerX * scale, centerY * scale)); - cb.transform(AffineTransform.getScaleInstance(scale, scale)); - cb.transform(AffineTransform.getTranslateInstance(translateX, translateY)); - - FontFactory.register("/org/gephi/preview/fonts/LiberationSans.ttf", "ArialMT"); + try { + // Background + if (backgroundColor != null) { + cb.setNonStrokingColor(backgroundColor); + cb.addRect(0, 0, size.getWidth(), size.getHeight()); + cb.fill(); + } + + // Transformations + cb.transform(Matrix.getTranslateInstance((float) (-centerX * scale), (float) (centerY * scale))); + cb.transform(Matrix.getScaleInstance((float) scale, (float) scale)); + cb.transform(Matrix.getTranslateInstance((float) translateX, (float) translateY)); + } catch (Exception ex) { + throw new RuntimeException(ex); + } } - + @Override - public PdfContentByte getContentByte() { + public PDPageContentStream getContentStream() { return this.cb; } - - @Override - public BaseFont getBaseFont(java.awt.Font font) { - try { - if (font != null) { - BaseFont baseFont = null; - if (!font.getFontName().equals(FontFactory.COURIER) - && !font.getFontName().equals(FontFactory.COURIER_BOLD) - && !font.getFontName().equals(FontFactory.COURIER_OBLIQUE) - && !font.getFontName().equals(FontFactory.COURIER_BOLDOBLIQUE) - && !font.getFontName().equals(FontFactory.HELVETICA) - && !font.getFontName().equals(FontFactory.HELVETICA_BOLD) - && !font.getFontName().equals(FontFactory.HELVETICA_BOLDOBLIQUE) - && !font.getFontName().equals(FontFactory.HELVETICA_OBLIQUE) - && !font.getFontName().equals(FontFactory.SYMBOL) - && !font.getFontName().equals(FontFactory.TIMES_ROMAN) - && !font.getFontName().equals(FontFactory.TIMES_BOLD) - && !font.getFontName().equals(FontFactory.TIMES_ITALIC) - && !font.getFontName().equals(FontFactory.TIMES_BOLDITALIC) - && !font.getFontName().equals(FontFactory.ZAPFDINGBATS) - && !font.getFontName().equals(FontFactory.COURIER_BOLD) - && !font.getFontName().equals(FontFactory.COURIER_BOLD) - && !font.getFontName().equals(FontFactory.COURIER_BOLD)) { - - com.itextpdf.text.Font itextFont = FontFactory.getFont(font.getFontName(), BaseFont.IDENTITY_H, font.getSize(), font.getStyle()); - baseFont = itextFont.getBaseFont(); - if (baseFont == null && !PDFRenderTargetImpl.fontRegistered) { - - if (progressTicket != null) { - String displayName = progressTicket.getDisplayName(); - Progress.setDisplayName(progressTicket, NbBundle.getMessage(PDFRenderTargetImpl.class, "PDFRenderTargetImpl.font.registration")); - registerFonts(); - Progress.setDisplayName(progressTicket, displayName); - } - - itextFont = FontFactory.getFont(font.getFontName(), BaseFont.IDENTITY_H, font.getSize(), font.getStyle()); - baseFont = itextFont.getBaseFont(); - - PDFRenderTargetImpl.fontRegistered = true; - } - } else { - com.itextpdf.text.Font itextFont = FontFactory.getFont(font.getFontName(), BaseFont.IDENTITY_H, font.getSize(), font.getStyle()); - baseFont = itextFont.getBaseFont(); - } - - if (baseFont != null) { - return baseFont; - } - return BaseFont.createFont(); + + public PDFont getPDFont(java.awt.Font font) { + final String fontKey = font.getPSName(); + return fontMap.computeIfAbsent(fontKey, (key) -> { + // 1. Try the PostScript name directly (e.g. "ArialMT", "Arial-BoldMT"). + // This is the most accurate as PDFBox indexes fonts by PostScript name. + PDFont result = loadFontByName(font.getPSName()); + if (result != null) { + return result; + } + + // 2. Fall back to family + style suffixes (e.g. "Arial-Bold"). + // This can work via PDFBox's substitution tables for common fonts + // (e.g. "Arial-Bold" is a registered substitute for "Helvetica-Bold"). + String familyKey = getFamilyStyleKey(font); + result = loadFontByName(familyKey); + if (result != null) { + return result; + } + + // 3. Fall back to Helvetica + logger.log(Level.WARNING, + "No PDF font found for ''{0}'' (psName=''{1}'', familyKey=''{2}''), falling back to Helvetica", + new Object[] {font.getName(), font.getPSName(), familyKey}); + return new PDType1Font(Standard14Fonts.FontName.HELVETICA_BOLD); + }); + } + + /** + * Tries to load a TrueType font by name via PDFBox's FontMappers. + * Returns null if the font was not found or could not be loaded. + */ + private PDFont loadFontByName(String fontName) { + FontMapping mapping = FontMappers.instance().getTrueTypeFont(fontName, null); + if (mapping != null && !mapping.isFallback()) { + try { + return PDType0Font.load(document, mapping.getFont(), true); + } catch (IOException ex) { + logger.log(Level.WARNING, + "Failed to load PDF font for ''{0}'': {1}", + new Object[] {fontName, ex.getMessage()}); } - return BaseFont.createFont(); - } catch (Exception e) { - Exceptions.printStackTrace(e); } return null; } - - private void registerFonts() { - FontFactory.registerDirectories(); - if (Utilities.isMac()) { - //Add user fonts folder - String userFonts = "/" + System.getProperty("user.home") + "/Library/Fonts"; - FontFactory.registerDirectory(userFonts); - - //Adobe font folder - String adobeFonts = "/Library/Application Support/Adobe/Fonts"; - FontFactory.registerDirectory(adobeFonts); + + /** + * Builds a font lookup key from the font family and style, e.g. "Arial-Bold". + * This format matches PDFBox's substitution table entries for common fonts. + */ + private static String getFamilyStyleKey(Font font) { + StringBuilder name = new StringBuilder(font.getFamily().replace(" ", "-")); + if (font.isBold()) { + name.append("-Bold"); + } + if (font.isItalic()) { + name.append("-Italic"); } + return name.toString(); } - + @Override public float getMarginBottom() { return marginBottom; } - + @Override public float getMarginLeft() { return marginLeft; } - + @Override public float getMarginRight() { return marginRight; } - + @Override public float getMarginTop() { return marginTop; } - + @Override public boolean isLandscape() { return landscape; } - + @Override - public Rectangle getPageSize() { + public PDRectangle getPageSize() { return pageSize; } } diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/PreviewControllerImpl.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/PreviewControllerImpl.java index c93954b207..d966890ef9 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/PreviewControllerImpl.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/PreviewControllerImpl.java @@ -39,96 +39,98 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview; -import java.awt.Dimension; -import java.awt.Point; import java.util.ArrayList; +import java.util.Arrays; import java.util.LinkedHashMap; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.graph.api.*; -import org.gephi.preview.api.*; -import org.gephi.preview.spi.*; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.GraphView; +import org.gephi.graph.api.Node; +import org.gephi.preview.api.Item; +import org.gephi.preview.api.PreviewController; +import org.gephi.preview.api.PreviewModel; +import org.gephi.preview.api.PreviewMouseEvent; +import org.gephi.preview.api.PreviewProperties; +import org.gephi.preview.api.PreviewProperty; +import org.gephi.preview.api.RenderTarget; +import org.gephi.preview.spi.MouseResponsiveRenderer; +import org.gephi.preview.spi.PreviewMouseListener; +import org.gephi.preview.spi.RenderTargetBuilder; +import org.gephi.preview.spi.Renderer; import org.gephi.project.api.ProjectController; import org.gephi.project.api.Workspace; -import org.gephi.project.api.WorkspaceListener; +import org.gephi.project.spi.Controller; import org.gephi.utils.progress.Progress; import org.gephi.utils.progress.ProgressTicket; +import org.gephi.visualization.api.VisualizationModel; import org.openide.util.Exceptions; import org.openide.util.Lookup; import org.openide.util.lookup.ServiceProvider; +import org.openide.util.lookup.ServiceProviders; /** - * * @author Mathieu Bastian */ -@ServiceProvider(service = PreviewController.class) -public class PreviewControllerImpl implements PreviewController { +@ServiceProviders({ + @ServiceProvider(service = PreviewController.class), + @ServiceProvider(service = Controller.class, position = 1000)}) +public class PreviewControllerImpl implements PreviewController, Controller { - private PreviewModelImpl model; - //Other controllers - private final GraphController graphController; //Registered renderers - private Renderer[] registeredRenderers = null; - private Boolean anyPluginRendererRegistered = null; - - public PreviewControllerImpl() { - graphController = Lookup.getDefault().lookup(GraphController.class); - - //Workspace events - ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); - pc.addWorkspaceListener(new WorkspaceListener() { - @Override - public void initialize(Workspace workspace) { - } - - @Override - public void select(Workspace workspace) { - model = workspace.getLookup().lookup(PreviewModelImpl.class); - if (model == null) { - model = new PreviewModelImpl(workspace); - workspace.add(model); - } - } + private boolean mousePressed = false; - @Override - public void unselect(Workspace workspace) { - model = null; - } + @Override + public PreviewModelImpl newModel(Workspace workspace) { + return new PreviewModelImpl(workspace); + } - @Override - public void close(Workspace workspace) { - } + @Override + public Class getModelClass() { + return PreviewModelImpl.class; + } - @Override - public void disable() { - model = null; - } - }); + @Override + public PreviewModelImpl getModel(Workspace workspace) { + return Controller.super.getModel(workspace); + } - if (pc.getCurrentWorkspace() != null) { - model = pc.getCurrentWorkspace().getLookup().lookup(PreviewModelImpl.class); - if (model == null) { - model = new PreviewModelImpl(pc.getCurrentWorkspace(), this); - pc.getCurrentWorkspace().add(model); - } - } + @Override + public PreviewModelImpl getModel() { + return Controller.super.getModel(); } @Override public void refreshPreview() { - refreshPreview(model.getWorkspace()); + refreshPreview(getModel().getWorkspace()); } @Override public synchronized void refreshPreview(Workspace workspace) { - GraphModel graphModel = graphController.getGraphModel(workspace); - AttributeModel attributeModel = graphController.getAttributeModel(model.getWorkspace()); + GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(workspace); PreviewModelImpl previewModel = getModel(workspace); previewModel.clear(); //Directed graph? - previewModel.getProperties().putValue(PreviewProperty.DIRECTED, graphModel.isDirected() || graphModel.isMixed()); + previewModel.getProperties() + .putValue(PreviewProperty.DIRECTED, graphModel.isDirected() || graphModel.isMixed()); + + //Viz engine properties + VisualizationModel vizModel = workspace.getLookup().lookup(VisualizationModel.class); + if (vizModel != null) { + previewModel.getProperties().putValue(PreviewProperty.NODE_SCALE_FACTOR, vizModel.getNodeScale()); + previewModel.getProperties().putValue(PreviewProperty.NODE_LABEL_SCALE, vizModel.getNodeLabelScale()); + previewModel.getProperties().putValue(PreviewProperty.EDGE_SCALE_FACTOR, vizModel.getEdgeScale()); + previewModel.getProperties().putValue(PreviewProperty.EDGE_LABEL_SCALE, vizModel.getEdgeLabelScale()); + } else { + previewModel.getProperties().putValue(PreviewProperty.NODE_SCALE_FACTOR, 1f); + previewModel.getProperties().putValue(PreviewProperty.NODE_LABEL_SCALE, 1f); + previewModel.getProperties().putValue(PreviewProperty.EDGE_SCALE_FACTOR, 1f); + previewModel.getProperties().putValue(PreviewProperty.EDGE_LABEL_SCALE, 1f); + } //Graph Graph graph = graphModel.getGraphVisible(); @@ -147,10 +149,10 @@ public synchronized void refreshPreview(Workspace workspace) { Renderer[] renderers; if (!mousePressed) { - renderers = model.getManagedEnabledRenderers(); + renderers = previewModel.getManagedEnabledRenderers(); } else { - ArrayList renderersList = new ArrayList(); - for (Renderer renderer : model.getManagedEnabledRenderers()) { + ArrayList renderersList = new ArrayList<>(); + for (Renderer renderer : previewModel.getManagedEnabledRenderers()) { //Only mouse responsive renderers will be called while mouse is pressed if (renderer instanceof MouseResponsiveRenderer) { renderersList.add(renderer); @@ -165,79 +167,28 @@ public synchronized void refreshPreview(Workspace workspace) { } //Build items - for (ItemBuilder b : Lookup.getDefault().lookupAll(ItemBuilder.class)) { - //Only build items of this builder if some renderer needs it: - if (isItemBuilderNeeded(b, previewModel.getProperties(), renderers)) { - try { - Item[] items = b.getItems(graph, attributeModel); - if (items != null) { - previewModel.loadItems(b.getType(), items); - } - } catch (Exception e) { - Exceptions.printStackTrace(e); - } - } - } - - //Destrow view - if (previewModel.getProperties().getFloatValue(PreviewProperty.VISIBILITY_RATIO) < 1f) { - graphModel.destroyView(graph.getView()); - } - - //Refresh dimensions - updateDimensions(previewModel, previewModel.getItems(Item.NODE)); - + boolean globalCanvasSize = previewModel.isGlobalCanvasSize() && !graph.getView().isMainView(); + previewModel.buildAndLoadItems(renderers, globalCanvasSize ? graph.getModel().getGraph() : graph); //Pre process renderers - for (Renderer r : renderers) { - r.preProcess(model); - } - } + Arrays.stream(renderers).forEachOrdered(r -> r.preProcess(previewModel)); - private boolean isItemBuilderNeeded(ItemBuilder itemBuilder, PreviewProperties properties, Renderer[] renderers) { - for (Renderer r : renderers) { - if (r.needsItemBuilder(itemBuilder, properties)) { - return true; - } - } - - return false; - } - - public void updateDimensions(PreviewModelImpl model, Item[] nodeItems) { - float margin = model.getProperties().getFloatValue(PreviewProperty.MARGIN); //percentage - float topLeftX = 0f; - float topLeftY = 0f; - float bottomRightX = 0f; - float bottomRightY = 0f; + //Canvas size + previewModel.updateCanvasSize(renderers); - for (Item nodeItem : nodeItems) { - float x = (Float) nodeItem.getData("x"); - float y = (Float) nodeItem.getData("y"); - float s = ((Float) nodeItem.getData("size")) / 2f; + if (globalCanvasSize) { + // Clear and rebuild with just the filtered graph + previewModel.clear(); + previewModel.buildAndLoadItems(renderers, graph); - if (x - s < topLeftX) { - topLeftX = x - s; - } - if (y - s < topLeftY) { - topLeftY = y - s; - } - if (x + s > bottomRightX) { - bottomRightX = x + s; - } - if (y + s > bottomRightY) { - bottomRightY = y + s; - } + //Pre process renderers + Arrays.stream(renderers).forEachOrdered(r -> r.preProcess(previewModel)); } - float marginWidth = (bottomRightX - topLeftX) * (margin / 100f); - float marginHeight = (bottomRightY - topLeftY) * (margin / 100f); - topLeftX -= marginWidth; - topLeftY -= marginHeight; - bottomRightX += marginWidth; - bottomRightY += marginHeight; - model.setDimensions(new Dimension((int) (bottomRightX - topLeftX), (int) (bottomRightY - topLeftY))); - model.setTopLeftPosition(new Point((int) topLeftX, (int) topLeftY)); + //Destroy view + if (previewModel.getProperties().getFloatValue(PreviewProperty.VISIBILITY_RATIO) < 1f) { + graphModel.destroyView(graph.getView()); + } } @Override @@ -259,7 +210,8 @@ public void render(RenderTarget target, Renderer[] renderers) { @Override public void render(RenderTarget target, Renderer[] renderers, Workspace workspace) { - render(target, renderers != null ? renderers : getModel(workspace).getManagedEnabledRenderers(), getModel(workspace)); + render(target, renderers != null ? renderers : getModel(workspace).getManagedEnabledRenderers(), + getModel(workspace)); } private synchronized void render(RenderTarget target, Renderer[] renderers, PreviewModelImpl previewModel) { @@ -272,6 +224,7 @@ private synchronized void render(RenderTarget target, Renderer[] renderers, Prev int tasks = 0; for (Renderer r : renderers) { if (!mousePressed || r instanceof MouseResponsiveRenderer) { + tasks++; for (String type : previewModel.getItemTypes()) { for (Item item : previewModel.getItems(type)) { if (r.isRendererForitem(item, properties)) { @@ -292,40 +245,30 @@ private synchronized void render(RenderTarget target, Renderer[] renderers, Prev for (String type : previewModel.getItemTypes()) { for (Item item : previewModel.getItems(type)) { if (r.isRendererForitem(item, properties)) { - r.render(item, target, properties); + try { + r.render(item, target, properties); + } catch (Exception e) { + Exceptions.printStackTrace(e); + } Progress.progress(progressTicket); if (target instanceof AbstractRenderTarget) { if (((AbstractRenderTarget) target).isCancelled()) { + Progress.finish(progressTicket); return; } } } } } - } - } - } - } - @Override - public synchronized PreviewModelImpl getModel() { - if (model == null) { - ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); - if (pc.getCurrentWorkspace() != null) { - return getModel(pc.getCurrentWorkspace()); + // Call post-process + r.postProcess(previewModel, target, properties); + Progress.progress(progressTicket); + } } - } - return model; - } - @Override - public synchronized PreviewModelImpl getModel(Workspace workspace) { - PreviewModelImpl m = workspace.getLookup().lookup(PreviewModelImpl.class); - if (m == null) { - m = new PreviewModelImpl(workspace); - workspace.add(m); + Progress.finish(progressTicket); } - return m; } @Override @@ -351,39 +294,31 @@ private synchronized RenderTarget getRenderTarget(String name, PreviewModel m) { @Override public Renderer[] getRegisteredRenderers() { - if (registeredRenderers == null) { - LinkedHashMap renderers = new LinkedHashMap(); - for (Renderer r : Lookup.getDefault().lookupAll(Renderer.class)) { - renderers.put(r.getClass().getName(), r); - } + LinkedHashMap renderers = new LinkedHashMap<>(); + for (Renderer r : Lookup.getDefault().lookupAll(Renderer.class)) { + renderers.put(r.getClass().getName(), r); + } - for (Renderer r : renderers.values().toArray(new Renderer[0])) { - Class superClass = r.getClass().getSuperclass(); - if (superClass != null && superClass.getName().startsWith("org.gephi.preview.plugin.renderers.")) { - //Replace default renderer with plugin by removing it - renderers.remove(superClass.getName()); - } + for (Renderer r : renderers.values().toArray(new Renderer[0])) { + Class superClass = r.getClass().getSuperclass(); + if (superClass != null && superClass.getName().startsWith("org.gephi.preview.plugin.renderers.")) { + //Replace default renderer with plugin by removing it + renderers.remove(superClass.getName()); } - - registeredRenderers = renderers.values().toArray(new Renderer[0]); } - return registeredRenderers; + + return renderers.values().toArray(new Renderer[0]); } @Override public boolean isAnyPluginRendererRegistered() { - if (anyPluginRendererRegistered == null) { - anyPluginRendererRegistered = false; - for (Renderer renderer : getRegisteredRenderers()) { - if (!renderer.getClass().getName().startsWith("org.gephi.preview.plugin.renderers.")) { - anyPluginRendererRegistered = true; - break; - } + for (Renderer renderer : getRegisteredRenderers()) { + if (!renderer.getClass().getName().startsWith("org.gephi.preview.plugin.renderers.")) { + return true; } } - return anyPluginRendererRegistered; + return false; } - private boolean mousePressed = false; @Override public boolean sendMouseEvent(PreviewMouseEvent event) { @@ -399,7 +334,8 @@ public boolean sendMouseEvent(PreviewMouseEvent event, Workspace workspace) { PreviewModel previewModel = getModel(workspace); //Avoid drag events arriving to listeners if they did not consume previous press event. - if ((event.type != PreviewMouseEvent.Type.DRAGGED && event.type != PreviewMouseEvent.Type.RELEASED) || mousePressed) { + if ((event.type != PreviewMouseEvent.Type.DRAGGED && event.type != PreviewMouseEvent.Type.RELEASED) || + mousePressed) { for (PreviewMouseListener listener : previewModel.getEnabledMouseListeners()) { switch (event.type) { case CLICKED: @@ -425,4 +361,12 @@ public boolean sendMouseEvent(PreviewMouseEvent event, Workspace workspace) { mousePressed = false;//Avoid drag events arriving to listeners if they did not consume previous press event. return false; } + + @Override + public void setGlobalCanvasSize(boolean globalCanvasSize) { + PreviewModelImpl model = getModel(); + if (model != null) { + model.setGlobalCanvasSize(globalCanvasSize); + } + } } diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/PreviewModelImpl.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/PreviewModelImpl.java index 4a722d9b65..d5ae718afb 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/PreviewModelImpl.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/PreviewModelImpl.java @@ -39,64 +39,75 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview; -import java.awt.Dimension; -import java.awt.Point; import java.beans.PropertyEditorManager; -import java.util.*; +import java.util.AbstractMap; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; import java.util.Map.Entry; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import javax.xml.stream.XMLStreamWriter; -import org.gephi.preview.api.*; +import org.gephi.graph.api.Graph; +import org.gephi.preview.api.CanvasSize; +import org.gephi.preview.api.Item; +import org.gephi.preview.api.ManagedRenderer; +import org.gephi.preview.api.PreviewController; +import org.gephi.preview.api.PreviewModel; +import org.gephi.preview.api.PreviewProperties; +import org.gephi.preview.api.PreviewProperty; import org.gephi.preview.presets.DefaultPreset; +import org.gephi.preview.spi.ItemBuilder; import org.gephi.preview.spi.MouseResponsiveRenderer; import org.gephi.preview.spi.PreviewMouseListener; import org.gephi.preview.spi.Renderer; import org.gephi.preview.types.DependantColor; import org.gephi.preview.types.DependantOriginalColor; import org.gephi.preview.types.EdgeColor; -import org.gephi.preview.types.propertyeditors.BasicDependantColorPropertyEditor; -import org.gephi.preview.types.propertyeditors.BasicDependantOriginalColorPropertyEditor; -import org.gephi.preview.types.propertyeditors.BasicEdgeColorPropertyEditor; +import org.gephi.preview.types.editors.BasicDependantColorPropertyEditor; +import org.gephi.preview.types.editors.BasicDependantOriginalColorPropertyEditor; +import org.gephi.preview.types.editors.BasicEdgeColorPropertyEditor; import org.gephi.project.api.Workspace; +import org.gephi.project.spi.Model; import org.gephi.utils.Serialization; +import org.openide.util.Exceptions; import org.openide.util.Lookup; /** - * * @author Mathieu Bastian */ -public class PreviewModelImpl implements PreviewModel { +public class PreviewModelImpl implements PreviewModel, Model { private final PreviewController previewController; private final Workspace workspace; //Items - private final Map> typeMap; - private final Map sourceMap; + private final Map> itemMaps; + // Canvas size + private CanvasSize canvasSize; + private boolean globalCanvasSize = false; //Renderers private ManagedRenderer[] managedRenderers; //Mouse listeners (of enabled renderers) private PreviewMouseListener[] enabledMouseListeners; //Properties private PreviewProperties properties; - //Dimensions - private Dimension dimensions; - private Point topLeftPosition; public PreviewModelImpl(Workspace workspace) { - this(workspace, null); - } - - public PreviewModelImpl(Workspace workspace, PreviewController previewController) { - if (previewController != null) { - this.previewController = previewController; - } else { - this.previewController = Lookup.getDefault().lookup(PreviewController.class); - } - typeMap = new HashMap>(); - sourceMap = new HashMap(); + previewController = Lookup.getDefault().lookup(PreviewController.class); + itemMaps = new HashMap<>(); this.workspace = workspace; initBasicPropertyEditors(); @@ -112,7 +123,8 @@ private void initBasicPropertyEditors() { PropertyEditorManager.registerEditor(DependantColor.class, BasicDependantColorPropertyEditor.class); } if (PropertyEditorManager.findEditor(DependantOriginalColor.class) == null) { - PropertyEditorManager.registerEditor(DependantOriginalColor.class, BasicDependantOriginalColorPropertyEditor.class); + PropertyEditorManager + .registerEditor(DependantOriginalColor.class, BasicDependantOriginalColorPropertyEditor.class); } if (PropertyEditorManager.findEditor(EdgeColor.class) == null) { PropertyEditorManager.registerEditor(EdgeColor.class, BasicEdgeColorPropertyEditor.class); @@ -125,7 +137,7 @@ private void initBasicPropertyEditors() { private void initManagedRenderers() { Renderer[] registeredRenderers = previewController.getRegisteredRenderers(); - Set replacedRenderers = new HashSet(); + Set replacedRenderers = new HashSet<>(); managedRenderers = new ManagedRenderer[registeredRenderers.length]; for (int i = 0; i < registeredRenderers.length; i++) { @@ -141,19 +153,21 @@ private void initManagedRenderers() { } private void prepareManagedListeners() { - ArrayList listeners = new ArrayList(); + ArrayList listeners = new ArrayList<>(); for (PreviewMouseListener listener : Lookup.getDefault().lookupAll(PreviewMouseListener.class)) { for (Renderer renderer : getManagedEnabledRenderers()) { if (renderer instanceof MouseResponsiveRenderer) { - if (((MouseResponsiveRenderer) renderer).needsPreviewMouseListener(listener) && !listeners.contains(listener)) { + if (((MouseResponsiveRenderer) renderer).needsPreviewMouseListener(listener) && + !listeners.contains(listener)) { listeners.add(listener); } } } } - Collections.reverse(listeners);//First listeners to receive events will be the ones coming from last called renderers. + Collections + .reverse(listeners);//First listeners to receive events will be the ones coming from last called renderers. enabledMouseListeners = listeners.toArray(new PreviewMouseListener[0]); } @@ -172,7 +186,7 @@ private synchronized void initProperties() { //Default preset properties.applyPreset(new DefaultPreset()); - //Defaut values + //Default values properties.putValue(PreviewProperty.VISIBILITY_RATIO, 1f); } } @@ -185,122 +199,137 @@ public PreviewProperties getProperties() { @Override public Item[] getItems(String type) { - List list = typeMap.get(type); - if (list != null) { - return list.toArray(new Item[0]); - } - return new Item[0]; + return itemMaps.getOrDefault(type, Collections.emptyMap()).values().toArray(new Item[0]); } @Override public Item getItem(String type, Object source) { - Item[] items = getItems(source); - for (Item item : items) { - if (item.getType().equals(type)) { - return item; - } - } - return null; + return itemMaps.getOrDefault(type, Collections.emptyMap()).getOrDefault(source, null); } @Override public Item[] getItems(Object source) { - Object value = sourceMap.get(source); - if (value instanceof List) { - return ((List) value).toArray(new Item[0]); - } else if (value instanceof Item) { - return new Item[]{(Item) value}; + List items = new ArrayList<>(); + for (Map itemMap : itemMaps.values()) { + Item item = itemMap.get(source); + if (item != null) { + items.add(item); + } } - return new Item[0]; + return items.toArray(new Item[0]); } public String[] getItemTypes() { - return typeMap.keySet().toArray(new String[0]); + return itemMaps.keySet().toArray(new String[0]); } - public void loadItems(String type, Item[] items) { - //Add to type map - List typeList = typeMap.get(type); - if (typeList == null) { - typeList = new ArrayList(items.length); - typeList.addAll(Arrays.asList(items)); - typeMap.put(type, typeList); - - //Add to source map - for (Item item : items) { - Object value = sourceMap.get(item.getSource()); - if (value == null) { - sourceMap.put(item.getSource(), item); - } else if (value instanceof List) { - ((List) value).add(item); - } else { - List list = new ArrayList(); - list.add((Item) value); - list.add(item); + protected void buildAndLoadItems(Renderer[] renderers, Graph graph) { + Map> groupedItems = Lookup.getDefault() + .lookupAll(ItemBuilder.class) + .parallelStream() + .filter(b -> isItemBuilderNeeded(b, getProperties(), renderers)) + .flatMap(b -> { + try { + Item[] items = b.getItems(graph); + if (items == null || items.length == 0) { + return Stream.>empty(); + } + + return Arrays.stream(items) + .filter(Objects::nonNull) + .map(item -> new AbstractMap.SimpleImmutableEntry<>(b.getType(), item)); + + } catch (Exception e) { + Exceptions.printStackTrace(e); + return Stream.empty(); } + }) + .collect(Collectors.groupingBy( + Entry::getKey, + LinkedHashMap::new, + Collectors., Object, Item, Map>toMap( + e -> e.getValue().getSource(), + Entry::getValue, + this::mergeItems, + LinkedHashMap::new + ) + )); + itemMaps.putAll(groupedItems); + } + + private boolean isItemBuilderNeeded(ItemBuilder itemBuilder, PreviewProperties properties, Renderer[] renderers) { + for (Renderer r : renderers) { + if (r.needsItemBuilder(itemBuilder, properties)) { + return true; } - } else { - //Possible items to merge - for (Item item : items) { - Object value = sourceMap.get(item.getSource()); - if (value == null) { - //No other object attached to this item - typeList.add(item); - sourceMap.put(item.getSource(), item); - } else if (value instanceof Item && ((Item) value).getType().equals(item.getType())) { - //An object already exists with the same type and source, merge them - mergeItems(item, ((Item) value)); - } else if (value instanceof List) { - List list = (List) value; - for (Item itemSameSource : list) { - if (itemSameSource.getType().equals(item.getType())) { - //An object already exists with the same type and source, merge them - mergeItems(item, itemSameSource); - break; - } + } + + return false; + } + + protected void updateCanvasSize(Renderer[] renderers) { + float x1 = Float.MAX_VALUE; + float y1 = Float.MAX_VALUE; + float x2 = -Float.MAX_VALUE; + float y2 = -Float.MAX_VALUE; + PreviewProperties properties = getProperties(); + for (Renderer r : renderers) { + for (String type : getItemTypes()) { + for (Item item : getItems(type)) { + if (r.isRendererForitem(item, properties)) { + CanvasSize cs = r.getCanvasSize(item, properties); + x1 = Math.min(x1, cs.getX()); + y1 = Math.min(y1, cs.getY()); + x2 = Math.max(x2, cs.getMaxX()); + y2 = Math.max(y2, cs.getMaxY()); } } } } + canvasSize = new CanvasSize(x1, y1, x2 - x1, y2 - y1); } private Item mergeItems(Item item, Item toBeMerged) { for (String key : toBeMerged.getKeys()) { - item.setData(key, toBeMerged.getData(key)); + if (!item.hasData(key)) { + item.setData(key, toBeMerged.getData(key)); + } } return item; } public void clear() { - typeMap.clear(); - sourceMap.clear(); + itemMaps.clear(); } + @Override public Workspace getWorkspace() { return workspace; } @Override - public Dimension getDimensions() { - return dimensions; + public CanvasSize getGraphicsCanvasSize() { + return canvasSize; } @Override - public Point getTopLeftPosition() { - return topLeftPosition; - } - - public void setDimensions(Dimension dimensions) { - this.dimensions = dimensions; - } - - public void setTopLeftPosition(Point topLeftPosition) { - this.topLeftPosition = topLeftPosition; + public ManagedRenderer[] getManagedRenderers() { + return managedRenderers; } @Override - public ManagedRenderer[] getManagedRenderers() { - return managedRenderers; + public void setManagedRenderers(ManagedRenderer[] managedRenderers) { + //Validate no null ManagedRenderers + for (ManagedRenderer managedRenderer : managedRenderers) { + if (managedRenderer == null) { + throw new IllegalArgumentException("managedRenderers should not contain null values"); + } + } + + this.managedRenderers = managedRenderers; + completeManagedRenderersListIfNecessary(); + prepareManagedListeners(); + reloadProperties(); } /** @@ -309,12 +338,12 @@ public ManagedRenderer[] getManagedRenderers() { */ private void completeManagedRenderersListIfNecessary() { if (managedRenderers != null) { - Set existing = new HashSet(); + Set existing = new HashSet<>(); for (ManagedRenderer mr : managedRenderers) { existing.add(mr.getRenderer().getClass().getName()); } - List completeManagedRenderersList = new ArrayList(); + List completeManagedRenderersList = new ArrayList<>(); completeManagedRenderersList.addAll(Arrays.asList(managedRenderers)); for (Renderer renderer : previewController.getRegisteredRenderers()) { @@ -331,9 +360,9 @@ private void completeManagedRenderersListIfNecessary() { * Removes unnecessary properties from not enabled renderers */ private void reloadProperties() { - if(properties == null){ + if (properties == null) { initProperties(); - }else{ + } else { PreviewProperties newProperties = new PreviewProperties();//Ensure that the properties object doesn't change //Properties from renderers @@ -359,25 +388,10 @@ private void reloadProperties() { } } - @Override - public void setManagedRenderers(ManagedRenderer[] managedRenderers) { - //Validate no null ManagedRenderers - for (int i = 0; i < managedRenderers.length; i++) { - if (managedRenderers[i] == null) { - throw new IllegalArgumentException("managedRenderers should not contain null values"); - } - } - - this.managedRenderers = managedRenderers; - completeManagedRenderersListIfNecessary(); - prepareManagedListeners(); - reloadProperties(); - } - @Override public Renderer[] getManagedEnabledRenderers() { if (managedRenderers != null) { - ArrayList renderers = new ArrayList(); + ArrayList renderers = new ArrayList<>(); for (ManagedRenderer mr : managedRenderers) { if (mr.isEnabled()) { renderers.add(mr.getRenderer()); @@ -391,15 +405,13 @@ public Renderer[] getManagedEnabledRenderers() { //PERSISTENCE public void writeXML(XMLStreamWriter writer) throws XMLStreamException { - writer.writeStartElement("previewmodel"); - initProperties(); //Write PreviewProperties: for (PreviewProperty property : properties.getProperties()) { String propertyName = property.getName(); Object propertyValue = property.getValue(); if (propertyValue != null) { - String text = Serialization.getValueAsText(propertyValue); + String text = Serialization.getValueAsText(propertyValue, property.getType()); if (text != null) { writer.writeStartElement("previewproperty"); writer.writeAttribute("name", propertyName); @@ -416,14 +428,14 @@ public void writeXML(XMLStreamWriter writer) throws XMLStreamException { simpleValueEntry = simpleValuesIterator.next(); if (simpleValueEntry.getKey().equals("width") - || simpleValueEntry.getKey().equals("height")) { + || simpleValueEntry.getKey().equals("height")) { continue; } Object value = simpleValueEntry.getValue(); if (value != null) { Class clazz = value.getClass(); - String text = Serialization.getValueAsText(value); + String text = Serialization.getValueAsText(value, clazz); if (text != null) { writer.writeStartElement("previewsimplevalue"); writer.writeAttribute("name", simpleValueEntry.getKey()); @@ -444,7 +456,9 @@ public void writeXML(XMLStreamWriter writer) throws XMLStreamException { } } - + //Settings + writer.writeStartElement("globalcanvassize"); + writer.writeAttribute("value", String.valueOf(globalCanvasSize)); writer.writeEndElement(); } @@ -455,8 +469,8 @@ public void readXML(XMLStreamReader reader) throws XMLStreamException { boolean isSimpleValue = false; String simpleValueClass = null; - List managedRenderersList = new ArrayList(); - Map availableRenderers = new HashMap(); + List managedRenderersList = new ArrayList<>(); + Map availableRenderers = new HashMap<>(); for (Renderer renderer : Lookup.getDefault().lookupAll(Renderer.class)) { availableRenderers.put(renderer.getClass().getName(), renderer); Class superClass = renderer.getClass().getSuperclass(); @@ -482,8 +496,11 @@ public void readXML(XMLStreamReader reader) throws XMLStreamException { } else if ("managedrenderer".equalsIgnoreCase(name)) { String rendererClass = reader.getAttributeValue(null, "class"); if (availableRenderers.containsKey(rendererClass)) { - managedRenderersList.add(new ManagedRenderer(availableRenderers.get(rendererClass), Boolean.parseBoolean(reader.getAttributeValue(null, "enabled")))); + managedRenderersList.add(new ManagedRenderer(availableRenderers.get(rendererClass), + Boolean.parseBoolean(reader.getAttributeValue(null, "enabled")))); } + } else if ("globalcanvassize".equalsIgnoreCase(name)) { + this.globalCanvasSize = Boolean.parseBoolean(reader.getAttributeValue(null, "value")); } break; case XMLStreamReader.CHARACTERS: @@ -500,8 +517,9 @@ public void readXML(XMLStreamReader reader) throws XMLStreamException { } else {//Read preview simple value: if (simpleValueClass != null) { if (!propName.equals("width") - && !propName.equals("height")) { - Object value = Serialization.readValueFromText(reader.getText(), simpleValueClass); + && !propName.equals("height")) { + Object value = + Serialization.readValueFromText(reader.getText(), simpleValueClass); if (value != null) { props.putValue(propName, value); } @@ -525,6 +543,15 @@ public void readXML(XMLStreamReader reader) throws XMLStreamException { } } + @Override + public boolean isGlobalCanvasSize() { + return globalCanvasSize; + } + + protected void setGlobalCanvasSize(boolean globalCanvasSize) { + this.globalCanvasSize = globalCanvasSize; + } + @Override public PreviewMouseListener[] getEnabledMouseListeners() { return enabledMouseListeners; diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/PreviewPersistenceProvider.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/PreviewPersistenceProvider.java index 78c6467af7..bdb3064d48 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/PreviewPersistenceProvider.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/PreviewPersistenceProvider.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview; import javax.xml.stream.XMLStreamException; @@ -47,15 +48,15 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.preview.api.PreviewController; import org.gephi.project.api.Workspace; import org.gephi.project.spi.WorkspacePersistenceProvider; +import org.gephi.project.spi.WorkspaceXMLPersistenceProvider; import org.openide.util.Lookup; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = WorkspacePersistenceProvider.class) -public class PreviewPersistenceProvider implements WorkspacePersistenceProvider { +public class PreviewPersistenceProvider implements WorkspaceXMLPersistenceProvider { @Override public void writeXML(XMLStreamWriter writer, Workspace workspace) { @@ -71,11 +72,8 @@ public void writeXML(XMLStreamWriter writer, Workspace workspace) { @Override public void readXML(XMLStreamReader reader, Workspace workspace) { - PreviewModelImpl model = (PreviewModelImpl) Lookup.getDefault().lookup(PreviewController.class).getModel(workspace); - if (model == null) { - model = new PreviewModelImpl(workspace); - workspace.add(model); - } + PreviewModelImpl model = + (PreviewModelImpl) Lookup.getDefault().lookup(PreviewController.class).getModel(workspace); try { model.readXML(reader); } catch (XMLStreamException ex) { diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/PreviewWorkspaceDuplicateProvider.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/PreviewWorkspaceDuplicateProvider.java deleted file mode 100644 index 887e9c4278..0000000000 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/PreviewWorkspaceDuplicateProvider.java +++ /dev/null @@ -1,74 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Eduardo Ramos - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.preview; - -import java.util.Map.Entry; -import org.gephi.preview.api.PreviewController; -import org.gephi.preview.api.PreviewModel; -import org.gephi.preview.api.PreviewProperty; -import org.gephi.project.api.Workspace; -import org.gephi.project.spi.WorkspaceDuplicateProvider; -import org.openide.util.Lookup; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Eduardo Ramos - */ -@ServiceProvider(service=WorkspaceDuplicateProvider.class) -public class PreviewWorkspaceDuplicateProvider implements WorkspaceDuplicateProvider{ - - @Override - public void duplicate(Workspace source, Workspace destination) { - PreviewController previewController=Lookup.getDefault().lookup(PreviewController.class); - PreviewModel sourceModel=previewController.getModel(source); - PreviewModel destModel=previewController.getModel(destination); - - destModel.setManagedRenderers(sourceModel.getManagedRenderers()); - for(PreviewProperty property:sourceModel.getProperties().getProperties()){ - destModel.getProperties().putValue(property.getName(), property.getValue()); - } - for(Entry property:sourceModel.getProperties().getSimpleValues()){ - destModel.getProperties().putValue(property.getKey(), property.getValue()); - } - } -} diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/SVGRenderTargetBuilder.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/SVGRenderTargetBuilder.java index de06bc61f2..d488da6b1a 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/SVGRenderTargetBuilder.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/SVGRenderTargetBuilder.java @@ -39,18 +39,20 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview; import java.awt.Color; import java.util.HashMap; import java.util.Locale; import java.util.Map; +import org.apache.batik.anim.dom.SVGDOMImplementation; import org.apache.batik.bridge.BridgeContext; import org.apache.batik.bridge.DocumentLoader; import org.apache.batik.bridge.GVTBuilder; import org.apache.batik.bridge.UserAgent; import org.apache.batik.bridge.UserAgentAdapter; -import org.apache.batik.dom.svg.SVGDOMImplementation; +import org.gephi.preview.api.CanvasSize; import org.gephi.preview.api.PreviewModel; import org.gephi.preview.api.RenderTarget; import org.gephi.preview.api.SVGTarget; @@ -63,7 +65,6 @@ Development and Distribution License("CDDL") (collectively, the import org.w3c.dom.Text; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = RenderTargetBuilder.class) @@ -71,15 +72,12 @@ public class SVGRenderTargetBuilder implements RenderTargetBuilder { @Override public RenderTarget buildRenderTarget(PreviewModel previewModel) { - int width = (int) previewModel.getDimensions().getWidth(); - int height = (int) previewModel.getDimensions().getHeight(); - width = Math.max(1, width); - height = Math.max(1, height); - int topLeftX = previewModel.getTopLeftPosition().x; - int topLeftY = previewModel.getTopLeftPosition().y; - boolean scaleStrokes = previewModel.getProperties().getBooleanValue(SVGTarget.SCALE_STROKES); - - SVGRenderTargetImpl renderTarget = new SVGRenderTargetImpl(width, height, topLeftX, topLeftY, scaleStrokes); + CanvasSize cs = previewModel.getGraphicsCanvasSize(); + boolean scaleStrokes = previewModel.getProperties() + .getBooleanValue(SVGTarget.SCALE_STROKES); + + SVGRenderTargetImpl renderTarget + = new SVGRenderTargetImpl(cs, scaleStrokes); return renderTarget; } @@ -88,18 +86,50 @@ public String getName() { return RenderTarget.SVG_TARGET; } - public static class SVGRenderTargetImpl extends AbstractRenderTarget implements SVGTarget { + /** + * Enum representing a set of lenght units. + * + * @author JΓ©rΓ©my Subtil + */ + public enum LengthUnit { + + CENTIMETER, + MILLIMETER, + INCH, + PIXELS, + PERCENTAGE; + + @Override + public String toString() { + switch (this) { + case CENTIMETER: + return "cm"; + case MILLIMETER: + return "mm"; + case INCH: + return "in"; + case PIXELS: + return "px"; + default: + case PERCENTAGE: + return "%"; + } + } + } + + public static class SVGRenderTargetImpl + extends AbstractRenderTarget implements SVGTarget { - private Document document; + private final Document document; + private final Map topElements = new HashMap<>(); private float scaleRatio = 1f; - private Map topElements = new HashMap(); - public SVGRenderTargetImpl(int width, int height, int topLeftX, int topLeftY, boolean scaleStrokes) { + public SVGRenderTargetImpl(CanvasSize cs, boolean scaleStrokes) { DOMImplementation impl = SVGDOMImplementation.getDOMImplementation(); DocumentType doctype = impl.createDocumentType( - "-//W3C//DTD SVG 1.1//EN", - "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd", - ""); + "svg", + "-//W3C//DTD SVG 1.1//EN", + "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"); document = impl.createDocument(SVGDOMImplementation.SVG_NAMESPACE_URI, "svg", doctype); // initializes CSS and SVG specific DOM interfaces @@ -111,27 +141,36 @@ public SVGRenderTargetImpl(int width, int height, int topLeftX, int topLeftY, bo builder.build(ctx, document); //Dimension - SupportSize supportSize = new SupportSize(595, 841, LengthUnit.PIXELS); - if (width > height) { - supportSize = new SupportSize(width * supportSize.getHeightInt() / height, supportSize.getHeightInt(), LengthUnit.PIXELS); - } else if (height > width) { - supportSize = new SupportSize(supportSize.getWidthInt(), height * supportSize.getWidthInt() / width, LengthUnit.PIXELS); + SupportSize ss = new SupportSize(595F, 841F, LengthUnit.PIXELS); + if (cs.getWidth() > cs.getHeight()) { + ss = new SupportSize( + cs.getWidth() * ss.getHeightFloat() / cs.getHeight(), + ss.getHeightFloat(), + LengthUnit.PIXELS); + } else if (cs.getHeight() > cs.getWidth()) { + ss = new SupportSize( + ss.getWidthFloat(), + cs.getHeight() * ss.getWidthFloat() / cs.getWidth(), + LengthUnit.PIXELS); } // root element Element svgRoot = document.getDocumentElement(); - svgRoot.setAttributeNS(null, "width", supportSize.getWidth()); - svgRoot.setAttributeNS(null, "height", supportSize.getHeight()); + svgRoot.setAttributeNS(null, "width", cs.getWidth() + ""); + svgRoot.setAttributeNS(null, "height", cs.getHeight() + ""); svgRoot.setAttributeNS(null, "version", "1.1"); - svgRoot.setAttributeNS(null, "viewBox", String.format(Locale.ENGLISH, "%d %d %d %d", - topLeftX, - topLeftY, - width, - height)); + svgRoot.setAttributeNS( + null, + "viewBox", + String.format(Locale.ENGLISH, "%f %f %f %f", + cs.getX(), + cs.getY(), + cs.getWidth(), + cs.getHeight())); //Scale & ratio if (scaleStrokes) { - scaleRatio = supportSize.getWidthInt() / (float) width; + scaleRatio = ss.getWidthFloat() / cs.getWidth(); } } @@ -186,32 +225,32 @@ public String toHexString(Color color) { /** * Implementation of the size of an export support. * - * @author JΓ©rΓ©my Subtil + * @author JΓ©rΓ©my Subtil */ public static class SupportSize { - private final Integer width; - private final Integer height; + private final float width; + private final float height; private final LengthUnit lengthUnit; /** * Constructor. * - * @param width the support's width - * @param height the support's height - * @param lengthUnit the lenght unit + * @param width the support's width + * @param height the support's height + * @param lengthUnit the lenght unit */ - public SupportSize(int width, int height, LengthUnit lengthUnit) { + public SupportSize(float width, float height, LengthUnit lengthUnit) { this.width = width; this.height = height; this.lengthUnit = lengthUnit; } - public Integer getWidthInt() { + public float getWidthFloat() { return width; } - public Integer getHeightInt() { + public float getHeightFloat() { return height; } @@ -221,7 +260,7 @@ public Integer getHeightInt() { * @return the support's width */ public String getWidth() { - return width.toString() + lengthUnit.toString(); + return width + lengthUnit.toString(); } /** @@ -230,38 +269,7 @@ public String getWidth() { * @return the support's height */ public String getHeight() { - return height.toString() + lengthUnit.toString(); - } - } - - /** - * Enum representing a set of lenght units. - * - * @author JΓ©rΓ©my Subtil - */ - public enum LengthUnit { - - CENTIMETER, - MILLIMETER, - INCH, - PIXELS, - PERCENTAGE; - - @Override - public String toString() { - switch (this) { - case CENTIMETER: - return "cm"; - case MILLIMETER: - return "mm"; - case INCH: - return "in"; - case PIXELS: - return "px"; - default: - case PERCENTAGE: - return "%"; - } + return height + lengthUnit.toString(); } } } diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/api/CanvasSize.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/api/CanvasSize.java new file mode 100644 index 0000000000..91138cad29 --- /dev/null +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/api/CanvasSize.java @@ -0,0 +1,143 @@ +/* + Copyright 2008-2011 Gephi + Authors : Jeremy Subtil + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.preview.api; + +/** + * A canvas size, with a top left coordinate, a width and an heigth. + * + * @author Jeremy Subtil + */ +public class CanvasSize { + + private final float x; + private final float y; + private final float width; + private final float height; + + /** + * Constructor. + * + * @param x The x coordinate of the top left position + * @param y The y coordinate of the top left position + * @param width The canvas width + * @param height The canvas height + */ + public CanvasSize(float x, float y, float width, float height) { + this.x = x; + this.y = y; + this.width = width; + this.height = height; + } + + /** + * Constructs the default CanvasSize, with both width and + * height equal to zero. + */ + public CanvasSize() { + this(0F, 0F, 0F, 0F); + } + + /** + * Returns the x coordinate of the top left position. + * + * @return the x coordinate of the top left position + */ + public float getX() { + return x; + } + + /** + * Returns the y coordinate of the top left position. + * + * @return the y coordinate of the top left position + */ + public float getY() { + return y; + } + + /** + * Returns the canvas width. + * + * @return the canvas width + */ + public float getWidth() { + return width; + } + + /** + * Returns the canvas height. + * + * @return the canvas height + */ + public float getHeight() { + return height; + } + + /** + * Returns the x coordinate of the bottom right position. + * + * @return the x coordinate of the bottom right position + */ + public float getMaxX() { + return getX() + getWidth(); + } + + /** + * Returns the y coordinate of the bottom right position. + * + * @return the y coordinate of the bottom right position + */ + public float getMaxY() { + return getY() + getHeight(); + } + + @Override + public String toString() { + return "CanvasSize{" + + "x=" + x + + ", y=" + y + + ", width=" + width + + ", height=" + height + + '}'; + } +} diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/api/G2DTarget.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/api/G2DTarget.java index 9c371bdb16..fd0c90a27d 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/api/G2DTarget.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/api/G2DTarget.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.api; import java.awt.Graphics2D; @@ -59,28 +60,28 @@ public interface G2DTarget extends RenderTarget { * * @return the current graphics to draw to */ - public Graphics2D getGraphics(); + Graphics2D getGraphics(); - public Image getImage(); + Image getImage(); - public int getWidth(); + int getWidth(); - public int getHeight(); + int getHeight(); - public void resize(int width, int height); + void resize(int width, int height); - public void setMoving(boolean moving); + void setMoving(boolean moving); - public Vector getTranslate(); + Vector getTranslate(); - public float getScaling(); + float getScaling(); - public void setScaling(float scaling); + void setScaling(float scaling); - public void reset(); + void reset(); /** * Redraw the Processing canvas */ - public void refresh(); + void refresh(); } diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/api/Item.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/api/Item.java index 9642018727..dbb9d7008a 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/api/Item.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/api/Item.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.api; import org.gephi.preview.spi.ItemBuilder; @@ -46,57 +47,70 @@ Development and Distribution License("CDDL") (collectively, the /** * An item is a visual element built by an {@link ItemBuilder} and later used - * by a {@link Renderer} to be displayed. + * by a {@link Renderer} to be displayed. *

      * An item simply stores the reference to the original object (e.g. node, edge) and * all the information useful for the Renderer like the color, size or * position. *

      * All items can be retrieved from the {@link PreviewModel}. - * + * * @author Yudi Xue, Mathieu Bastian */ public interface Item { - public static final String NODE = "node"; - public static final String EDGE = "edge"; - public static final String NODE_LABEL = "node_label"; - public static final String EDGE_LABEL = "edge_label"; + String NODE = "node"; + String EDGE = "edge"; + String NODE_LABEL = "node_label"; + String EDGE_LABEL = "edge_label"; /** * Returns the source of the item. The source is usually a graph object like * a Node or Edge. + * * @return the item's source object */ - public Object getSource(); + Object getSource(); /** - * Returns the type of the item. Default types are Item.NODE, + * Returns the type of the item. Default types are Item.NODE, * Item.EDGE, Item.NODE_LABEL and Item.EDGE_LABEL. + * * @return the item's type */ - public String getType(); + String getType(); /** * Returns data associated to this item. + * * @param the type of the data * @param key the key * @return the value associated to key, or null if * not exist */ - public D getData(String key); + D getData(String key); /** - * Sets data to this item. + * Returns true if the item has data associated to the given key. + * * @param key the key + * @return true if data associated to key exists + */ + boolean hasData(String key); + + /** + * Sets data to this item. + * + * @param key the key * @param value the value to be associated with key */ - public void setData(String key, Object value); + void setData(String key, Object value); /** * Returns all the keys. That allows to enumerate all data associated with * this item. + * * @return all keys */ - public String[] getKeys(); + String[] getKeys(); } diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/api/ManagedRenderer.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/api/ManagedRenderer.java index ef6546462b..5fbaf0c82f 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/api/ManagedRenderer.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/api/ManagedRenderer.java @@ -39,8 +39,10 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.api; +import java.util.Objects; import org.gephi.preview.spi.Renderer; /** @@ -48,12 +50,12 @@ Development and Distribution License("CDDL") (collectively, the * Renderer and its enabled state. Used for managing renderers in * PreviewModel. * + * @author Eduardo Ramos * @see PreviewModel - * @author Eduardo Ramos */ public class ManagedRenderer { - private Renderer renderer; + private final Renderer renderer; private boolean enabled; public ManagedRenderer(Renderer renderer, boolean enabled) { @@ -73,7 +75,20 @@ public Renderer getRenderer() { return renderer; } - public void setRenderer(Renderer renderer) { - this.renderer = renderer; + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + ManagedRenderer that = (ManagedRenderer) o; + return enabled == that.enabled && renderer.equals(that.renderer); + } + + @Override + public int hashCode() { + return Objects.hash(renderer, enabled); } } diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/api/PDFTarget.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/api/PDFTarget.java index d81925e628..f3b6e05364 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/api/PDFTarget.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/api/PDFTarget.java @@ -39,87 +39,89 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.api; -import com.itextpdf.text.Rectangle; -import com.itextpdf.text.pdf.BaseFont; -import com.itextpdf.text.pdf.PdfContentByte; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.font.PDFont; /** * Rendering target to PDF format. *

      * This target is used by renderers objects to render a graph to PDF and uses - * the iText Java library. + * the PDFBox Java library. *

      - * The target give access to the PDFContentBype object from itext to + * The target give access to the PDPageContentStream object from PDFBox to * draw items. *

      - * When this target is instanciated it uses property values defined in the - * {@link PreviewProperties}. Namely is uses MARGIN_LEFT, - * MARGIN_TOP, MARGIN_BOTTOM, MARGIN_RIGHT, - * LANDCAPE and PAGESIZE. + * When this target is instantiated it uses property values defined in the + * {@link PreviewProperties}. Namely is uses MARGIN_LEFT, + * MARGIN_TOP, MARGIN_BOTTOM, MARGIN_RIGHT, + * LANDSCAPE and PAGESIZE. + * * @author Yudi Xue, Mathieu Bastian */ public interface PDFTarget extends RenderTarget { - public static final String PDF_CONTENT_BYTE = "pdf.contentbyte"; - public static final String MARGIN_LEFT = "pdf.margin.left"; - public static final String MARGIN_TOP = "pdf.margin.top"; - public static final String MARGIN_BOTTOM = "pfd.margin.bottom"; - public static final String MARGIN_RIGHT = "pdf.margin.right"; - public static final String LANDSCAPE = "pdf.landscape"; - public static final String PAGESIZE = "pdf.pagesize"; + String PDF_CONTENT_BYTE = "pdf.contentbyte"; + String MARGIN_LEFT = "pdf.margin.left"; + String MARGIN_TOP = "pdf.margin.top"; + String MARGIN_BOTTOM = "pfd.margin.bottom"; + String MARGIN_RIGHT = "pdf.margin.right"; + String LANDSCAPE = "pdf.landscape"; + String PAGESIZE = "pdf.pagesize"; + String PDF_DOCUMENT = "pdf.document"; + String TRANSPARENT_BACKGROUND = "pdf.transparent.background"; /** - * Returns the PDFContentBype instance of the PDFTarget. PDFContentByte + * Returns the PDPageContentStream instance of the PDFTarget. PDPageContentStream * offers a set of drawing functions which can be used by Renderer objects. - * - * @return a PDFContentBype object + * + * @return a PDPageContentStream object */ - public PdfContentByte getContentByte(); + PDPageContentStream getContentStream(); /** - * Get a the equivalent in iText of the Java font. Base fonts are either - * Type 1 fonts (PDF default's font) or valid system fonts. The first time - * a base font which is not a Type 1 is requested the system will - * register the system fonts in order to find the right font. This might - * take some time up to a minute. + * Get the PDFBox equivalent the Java font. *

      - * If font can't be found in iText's default fonts or registered - * fonts it returns the default Helvetica font. + * If font can't be found it returns the default Helvetica font. + *

      + * Note that each font (regardless of font size) is embedded in the PDF Document. Also note that some fonts might + * miss Unicode characters, which will prevent the text from being rendered properly. * - * @param font the reference Java font - * @return the iText BaseFont, or Helvetica is not found + * @param font the reference Java font + * @return the PDFont, or Helvetica is not found */ - public BaseFont getBaseFont(java.awt.Font font); + PDFont getPDFont(java.awt.Font font); /** * Returns the margin at the bottom of the page. - * + * * @return the bottom margin, in pixels */ - public float getMarginBottom(); + float getMarginBottom(); /** * Returns the margin at the left of the page. * * @return the left margin, in pixels */ - public float getMarginLeft(); + float getMarginLeft(); /** * Returns the margin at the right of the page. * * @return the right margin, in pixels */ - public float getMarginRight(); + float getMarginRight(); /** * Returns the margin at the top of the page. * * @return the top margin, in pixels */ - public float getMarginTop(); + float getMarginTop(); /** * Returns whether the orientation is in landscape or portrait. @@ -127,12 +129,12 @@ public interface PDFTarget extends RenderTarget { * @return true if the orientation is landscape, false * if portrait. */ - public boolean isLandscape(); + boolean isLandscape(); /** * Returns the page's size. * * @return the page size */ - public Rectangle getPageSize(); + PDRectangle getPageSize(); } diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/api/PreviewController.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/api/PreviewController.java index f21ec60d94..7abeac810f 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/api/PreviewController.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/api/PreviewController.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.api; import org.gephi.preview.spi.Renderer; @@ -49,7 +50,7 @@ Development and Distribution License("CDDL") (collectively, the *

      * This controller is a service and can therefore be found in Lookup: *

      PreviewController gc = Lookup.getDefault().lookup(PreviewController.class);
      - + * * @author Yudi Xue, Mathieu Bastian * @see PreviewModel * @see Item @@ -63,125 +64,152 @@ public interface PreviewController { * This task built all items from ItemBuilder implementations, * refresh graph dimensions and call all Renderer.preProcess() * method. + * * @param workspace the workspace to get the preview model from */ - public void refreshPreview(Workspace workspace); + void refreshPreview(Workspace workspace); /** - * Refreshes the current preview model. + * Refreshes the current preview model. *

      * This task built all items from ItemBuilder implementations, * refresh graph dimensions and call all Renderer.preProcess() * method. */ - public void refreshPreview(); + void refreshPreview(); /** * Returns the current preview model in the current workspace. + * * @return the current preview model */ - public PreviewModel getModel(); + PreviewModel getModel(); /** * Returns the preview model in workspace. + * * @param workspace the workspace to lookup * @return the preview model in workspace */ - public PreviewModel getModel(Workspace workspace); + PreviewModel getModel(Workspace workspace); /** * Renders the current preview model to target. *

      * If preview model managedRenderers is null, this task looks for all Renderer implementations in their default order. * Then all items in the preview model are rendered. + * * @param target the target to render items to */ - public void render(RenderTarget target); + void render(RenderTarget target); /** * Renders the preview model in workspace to target. *

      * If preview model managedRenderers is null, this task looks for all Renderer implementations in their default order. * Then all items in the preview model are rendered. - * @param target the target to render items to + * + * @param target the target to render items to * @param workspace the workspace to get the preview model from */ - public void render(RenderTarget target, Workspace workspace); - + void render(RenderTarget target, Workspace workspace); + /** * Renders the current preview model to target. *

      * This task overrides the preview model managedRenderers and uses the given Renderer array, respecting the array order. * Then all items in the preview model are rendered. - * @param target the target to render items to + * + * @param target the target to render items to + * @param renderers renderers to use */ - public void render(RenderTarget target, Renderer[] renderers); - + void render(RenderTarget target, Renderer[] renderers); + /** * Renders the preview model in workspace to target. *

      * This task overrides the preview model managedRenderers and uses the given Renderer array, respecting the array order. * Then all items in the preview model are rendered. - * @param target the target to render items to + * + * @param target the target to render items to + * @param renderers renderers to use * @param workspace the workspace to get the preview model from */ - public void render(RenderTarget target, Renderer[] renderers, Workspace workspace); + void render(RenderTarget target, Renderer[] renderers, Workspace workspace); /** - * Creates a new render target of the given type. + * Creates a new render target of the given type. *

      - * Default render targets names are {@link RenderTarget#PROCESSING_TARGET}, + * Default render targets names are {@link RenderTarget#G2D_TARGET}, * {@link RenderTarget#SVG_TARGET} and {@link RenderTarget#PDF_TARGET}. *

      * Render targets usually need some parameters when built. Parameters values * should simply be put in the PreviewProperties. + * * @param name the name of the render target * @return a new render target or null if name is * unknown */ - public RenderTarget getRenderTarget(String name); + RenderTarget getRenderTarget(String name); /** * Creates a new render target of the given type in the preview model * contained by workspace. *

      - * Default render targets names are {@link RenderTarget#PROCESSING_TARGET}, + * Default render targets names are {@link RenderTarget#G2D_TARGET}, * {@link RenderTarget#SVG_TARGET} and {@link RenderTarget#PDF_TARGET}. *

      * Render targets usually need some parameters when built. Parameters values * should simply be put in the PreviewProperties. - * @param name the name of the render target + * + * @param name the name of the render target * @param workspace the workspace to get the preview model from * @return a new render target or null if name is * unknown */ - public RenderTarget getRenderTarget(String name, Workspace workspace); - + RenderTarget getRenderTarget(String name, Workspace workspace); + /** * Uses Lookup to retrieve registered renderer providers but replaces default renderers with plugins that extend them. - * @see Renderer + * * @return Registered renderers replacing default renderers with their extension plugins in case they exist + * @see Renderer */ - public Renderer[] getRegisteredRenderers(); - + Renderer[] getRegisteredRenderers(); + /** * Returns true if any renderer plugin is registered. + * * @return True if any plugin renderer is found in the system */ - public boolean isAnyPluginRendererRegistered(); - + boolean isAnyPluginRendererRegistered(); + /** * Sends a PreviewMouseEvent to the current workspace, if any. + * * @param event PreviewMouseEvent * @return True if the event was consumed, false otherwise */ - public boolean sendMouseEvent(PreviewMouseEvent event); - + boolean sendMouseEvent(PreviewMouseEvent event); + /** * Sends a PreviewMouseEvent to the given workspace. - * @param event PreviewMouseEvent - * @param workspace + * + * @param event PreviewMouseEvent + * @param workspace workspace * @return True if the event was consumed, false otherwise */ - public boolean sendMouseEvent(PreviewMouseEvent event, Workspace workspace); + boolean sendMouseEvent(PreviewMouseEvent event, Workspace workspace); + + /** + * Sets the canvas size parameter. + *

      + * If true, the {@link PreviewModel#getGraphicsCanvasSize()} will return the canvas boundaries based on the full graph. + * If false, it will be based on the visible graph. + *

      + * The default is false + * + * @param globalCanvasSize global canvas size parameter + */ + void setGlobalCanvasSize(boolean globalCanvasSize); } diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/api/PreviewModel.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/api/PreviewModel.java index db9fa7afcb..4fff2fc9cc 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/api/PreviewModel.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/api/PreviewModel.java @@ -39,16 +39,16 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.api; -import java.awt.Dimension; -import java.awt.Point; import org.gephi.graph.api.Edge; import org.gephi.graph.api.Graph; import org.gephi.graph.api.Node; import org.gephi.preview.spi.ItemBuilder; import org.gephi.preview.spi.PreviewMouseListener; import org.gephi.preview.spi.Renderer; +import org.gephi.project.api.Workspace; /** * The Preview Model contains all items and all preview properties.

      Items are the visual elements built from the {@link Graph} by {@link ItemBuilder} implementations and can be retrieved from this @@ -67,7 +67,7 @@ public interface PreviewModel { * * @return the preview properties */ - public PreviewProperties getProperties(); + PreviewProperties getProperties(); /** * Returns all items with @@ -76,7 +76,7 @@ public interface PreviewModel { * @param type the item's type * @return all items from this type */ - public Item[] getItems(String type); + Item[] getItems(String type); /** * Returns all items attached to @@ -89,7 +89,7 @@ public interface PreviewModel { * @return all items with * source as source */ - public Item[] getItems(Object source); + Item[] getItems(Object source); /** * Returns the item attached to @@ -97,12 +97,12 @@ public interface PreviewModel { * type.

      The source is the graph object behind the item (e.g. * {@link Node} or {@link Edge}) and the type a default or a custom type.

      Default types are {@link Item#NODE}, {@link Item#EDGE}, {@link Item#NODE_LABEL} and {@link Item#EDGE_LABEL}. * - * @param type the item's type + * @param type the item's type * @param source the item's source object * @return the item or * null if not found */ - public Item getItem(String type, Object source); + Item getItem(String type, Object source); /** *

      Returns currently managed renderers, or null.

      If @@ -110,7 +110,7 @@ public interface PreviewModel { * * @return Enabled renderers or null */ - public ManagedRenderer[] getManagedRenderers(); + ManagedRenderer[] getManagedRenderers(); /** *

      Sets an user-defined array of managed renderers to use when rendering.

      Only the renderers marked as enabled will be executed when rendering, and respecting the array @@ -120,7 +120,7 @@ public interface PreviewModel { * * @param managedRenderers Managed renderers for future renderings */ - public void setManagedRenderers(ManagedRenderer[] managedRenderers); + void setManagedRenderers(ManagedRenderer[] managedRenderers); /** * Returns @@ -129,24 +129,32 @@ public interface PreviewModel { * * @return Enabled renderers or null */ - public Renderer[] getManagedEnabledRenderers(); + Renderer[] getManagedEnabledRenderers(); /* * Returns managedPreviewMouseListeners containing the PreviewMouseListeners that are declared by the current enabled managed renderers. */ - public PreviewMouseListener[] getEnabledMouseListeners(); + PreviewMouseListener[] getEnabledMouseListeners(); + + /** + * Computes the graphics canvas size. + * + * @return the graphics canvas size + */ + CanvasSize getGraphicsCanvasSize(); /** - * Returns the width and height of the graph in the graph coordinates. + * Returns true if the canvas size returned by {@link #getGraphicsCanvasSize()} is based on the full graph, + * as opposed to the visible graph. The default is false: the canvas size is based on the visible graph. * - * @return the graph dimensions + * @return true if canvas size is global, false otherwise */ - public Dimension getDimensions(); + boolean isGlobalCanvasSize(); /** - * Returns the top left position in the graph coordinate (i.e. not the preview coordinates). + * Returns the workspace this model is attached to. * - * @return the top left position point + * @return the workspace */ - public Point getTopLeftPosition(); + Workspace getWorkspace(); } diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/api/PreviewMouseEvent.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/api/PreviewMouseEvent.java index dcceb793af..22793e2ec0 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/api/PreviewMouseEvent.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/api/PreviewMouseEvent.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2012 Gephi Consortium. */ + package org.gephi.preview.api; import java.awt.event.KeyEvent; @@ -47,33 +48,20 @@ Development and Distribution License("CDDL") (collectively, the *

      Mouse event for preview. Contains the event type and graph coordinates for the event. * If you attend a PreviewMouseEvent, it should be marked as consumed.

      *

      The public keyEvent field contains the keyboard state for the given mouse event. Can be null.

      - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class PreviewMouseEvent { - public enum Type { - CLICKED, - PRESSED, - RELEASED, - DRAGGED - } - - public enum Button{ - LEFT, - RIGHT, - MIDDLE - } - public final Type type; public final Button button; public final int x; public final int y; - private boolean consumed; - /** * Contains the keyboard state for the given mouse event. Can be null. */ public final KeyEvent keyEvent; + private boolean consumed; public PreviewMouseEvent(int x, int y, Type type, Button button, KeyEvent keyEvent) { this.x = x; @@ -91,4 +79,17 @@ public boolean isConsumed() { public void setConsumed(boolean consumed) { this.consumed = consumed; } + + public enum Type { + CLICKED, + PRESSED, + RELEASED, + DRAGGED + } + + public enum Button { + LEFT, + RIGHT, + MIDDLE + } } diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/api/PreviewPreset.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/api/PreviewPreset.java index 49d911e461..d4e97e234e 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/api/PreviewPreset.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/api/PreviewPreset.java @@ -39,13 +39,12 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.api; import java.util.Collections; import java.util.HashMap; import java.util.Map; -import java.util.Map.Entry; -import org.gephi.preview.presets.DefaultPreset; /** * Read only set of {@link PreviewProperty} values. @@ -58,7 +57,7 @@ public class PreviewPreset implements Comparable { protected final String name; public PreviewPreset(String name) { - properties = new HashMap(); + properties = new HashMap<>(); this.name = name; } @@ -97,9 +96,7 @@ public boolean equals(Object obj) { } if (obj != null && obj instanceof PreviewPreset) { PreviewPreset p = (PreviewPreset) obj; - if (p.name.equals(name) && p.properties.equals(properties)) { - return true; - } + return p.name.equals(name) && p.properties.equals(properties); } return false; } diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/api/PreviewProperties.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/api/PreviewProperties.java index 7af8400e83..313cc9dbf9 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/api/PreviewProperties.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/api/PreviewProperties.java @@ -39,15 +39,12 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.api; import java.awt.Color; import java.awt.Font; -import java.beans.PropertyEditor; -import java.beans.PropertyEditorManager; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Comparator; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; @@ -74,7 +71,7 @@ Development and Distribution License("CDDL") (collectively, the *

      * To batch put a set of property values the best way is to create a PreviewPreset * and call the applyPreset() method. - * + * * @author Mathieu Bastian * @see PreviewPreset */ @@ -84,8 +81,35 @@ public class PreviewProperties { private final Map properties; public PreviewProperties() { - properties = new LinkedHashMap();//Use LinkedHashMap to retrieve properties in insertion order - simpleValues = new HashMap(); + properties = new LinkedHashMap<>();//Use LinkedHashMap to retrieve properties in insertion order + simpleValues = new HashMap<>(); + } + + /** + * Converts any value to a serialized String. + * Uses PropertyEditor for serialization except for values of Font class. + *

      + * Note: Method moved to Utils module (org.gephi.utils.Serialization). + * + * @param value Value to serialize as String + * @return Result String or null if the value can't be serialized with a PropertyEditor + */ + public static String getValueAsText(Object value) { + return Serialization.getValueAsText(value); + } + + /** + * Deserializes a serialized String of the given class. + * Uses PropertyEditor for serialization except for values of Font class. + *

      + * Note: Method moved to Utils module (org.gephi.utils.Serialization). + * + * @param valueStr String to deserialize + * @param valueClass Class of the serialized value + * @return Deserialized value or null if it can't be deserialized with a PropertyEditor + */ + public static Object readValueFromText(String valueStr, Class valueClass) { + return Serialization.readValueFromText(valueStr, valueClass); } /** @@ -93,17 +117,20 @@ public PreviewProperties() { *

      * The property should have a unique name and the method will throw an exception * if not. + * * @param property the property to add to the properties * @throws IllegalArgumentException if property already exists */ public void addProperty(PreviewProperty property) { if (properties.containsKey(property.getName())) { - throw new RuntimeException("The property " + property.getName() + " already exists. Each property name should be unique."); + throw new RuntimeException( + "The property " + property.getName() + " already exists. Each property name should be unique."); } for (String parent : property.dependencies) { PreviewProperty p = properties.get(parent); if (p != null && !p.getType().equals(Boolean.class)) { - throw new IllegalArgumentException("The property " + property.getName() + " has dependencies to non-boolean property " + p.getName()); + throw new IllegalArgumentException( + "The property " + property.getName() + " has dependencies to non-boolean property " + p.getName()); } } properties.put(property.getName(), property); @@ -115,6 +142,7 @@ public void removeProperty(PreviewProperty property) { /** * Returns true if a property name exists. + * * @param name the name of the property to lookup * @return true if the property exists, false otherwise */ @@ -124,7 +152,8 @@ public boolean hasProperty(String name) { /** * Puts the property's value. - * @param name the name of the property + * + * @param name the name of the property * @param value the value */ public void putValue(String name, Object value) { @@ -135,17 +164,19 @@ public void putValue(String name, Object value) { simpleValues.put(name, value); } } - + /** * Removes a simple value if existing + * * @param name Simple value name */ - public void removeSimpleValue(String name){ + public void removeSimpleValue(String name) { simpleValues.remove(name); } /** * Returns the property value as an int. + * * @param property the property's name * @return the property's value or 0 if not found * @throws ClassCastException if the property can't be cast to Number @@ -156,6 +187,7 @@ public int getIntValue(String property) { /** * Returns the property value as a float. + * * @param property the property's name * @return the property's value or 0 if not found * @throws ClassCastException if the property can't be cast to Number @@ -166,6 +198,7 @@ public float getFloatValue(String property) { /** * Returns the property value as a double. + * * @param property the property's name * @return the property's value or 0.0 if not found * @throws ClassCastException if the property can't be cast to Number @@ -177,15 +210,17 @@ public double getDoubleValue(String property) { /** * Returns the property value as an string. If the value is not a String * it calls the toString() method. + * * @param property the property's name * @return the property's value or "" if not found */ public String getStringValue(String property) { - return getValue(property, "").toString(); + return getValue(property, ""); } /** * Returns an the property value as a Color. + * * @param property the property's name * @return the property's value or null if not found * @throws ClassCastException if the property can't be cast to Color @@ -196,6 +231,7 @@ public Color getColorValue(String property) { /** * Returns an the property value as a Font. + * * @param property the property's name * @return the property's value or null if not found * @throws ClassCastException if the property can't be cast to Font @@ -206,6 +242,7 @@ public Font getFontValue(String property) { /** * Returns the property value as a boolean. + * * @param property the property's name * @return the property's value or false if not found * @throws ClassCastException if the property can't be cast to Boolean @@ -216,7 +253,8 @@ public boolean getBooleanValue(String property) { /** * Returns the property value and cast it to the T type. - * @param the type to cast the property value to + * + * @param the type to cast the property value to * @param property the property's name * @return the property's value or null if not found * @throws ClassCastException if the property can't be cast to T @@ -224,7 +262,7 @@ public boolean getBooleanValue(String property) { public T getValue(String property) { PreviewProperty p = getProperty(property); if (p != null && p.getValue() != null) { - T value = (T) p.getValue(); + T value = p.getValue(); return value; } else if (simpleValues.containsKey(property)) { return (T) simpleValues.get(property); @@ -234,8 +272,9 @@ public T getValue(String property) { /** * Returns the property value and cast it to the T type. - * @param the type to cast the property value to - * @param property the property's name + * + * @param the type to cast the property value to + * @param property the property's name * @param defaultValue the default value if not found * @return the property's value or defaultValue if not found * @throws ClassCastException if the property can't be cast to T @@ -243,7 +282,7 @@ public T getValue(String property) { public T getValue(String property, T defaultValue) { PreviewProperty p = getProperty(property); if (p != null && p.getValue() != null) { - T value = (T) p.getValue(); + T value = p.getValue(); return value; } else if (simpleValues.containsKey(property)) { return (T) simpleValues.get(property); @@ -253,7 +292,8 @@ public T getValue(String property, T defaultValue) { /** * Returns the property value as a Number. - * @param property the property's name + * + * @param property the property's name * @param defaultValue the default value if not found * @return the property's value or defaultValue if not found * @throws ClassCastException if the property can't be cast to Number @@ -261,56 +301,42 @@ public T getValue(String property, T defaultValue) { public Number getNumberValue(String property, Number defaultValue) { PreviewProperty p = getProperty(property); if (p != null && p.getValue() != null && p.getValue() instanceof Number) { - Number value = (Number) p.getValue(); + Number value = p.getValue(); return value; } else if (simpleValues.containsKey(property) && simpleValues.get(property) instanceof Number) { return (Number) simpleValues.get(property); } return defaultValue; } - + /** * Return all simple values. + * * @return all simple values */ - public Set> getSimpleValues(){ + public Set> getSimpleValues() { return simpleValues.entrySet(); - } + } /** * Returns all properties. + * * @return all properties */ public PreviewProperty[] getProperties() { - PreviewProperty[] props = properties.values().toArray(new PreviewProperty[0]); - //Reorder to put parents on top: - Arrays.sort(props, new Comparator() { - - @Override - public int compare(PreviewProperty o1, PreviewProperty o2) { - boolean hasParent1 = o1.dependencies.length > 0; - boolean hasParent2 = o2.dependencies.length > 0; - if (hasParent1 && !hasParent2) { - return 1; - } else if (!hasParent1 && hasParent2) { - return -1; - } else { - return 0;//Stable sort will not change original insertion order if no parents. - } - } - }); - return props; + return properties.values().toArray(new PreviewProperty[0]); } /** * Returns all properties with category as category. A property * can belong to only one category. Default categories names are defined in * {@link PreviewProperty}. + * * @param category the category properties belong to * @return all properties in category */ public PreviewProperty[] getProperties(String category) { - List props = new ArrayList(); + List props = new ArrayList<>(); for (PreviewProperty p : properties.values()) { if (p.getCategory().equals(category)) { props.add(p); @@ -321,6 +347,7 @@ public PreviewProperty[] getProperties(String category) { /** * Returns the property defined as name. + * * @param name the property's name * @return the property with this name or null if not found */ @@ -331,11 +358,12 @@ public PreviewProperty getProperty(String name) { /** * Returns all properties with source as source. A property * can belong to only one source. + * * @param source the source properties belong to * @return all properties in source */ public PreviewProperty[] getProperties(Object source) { - List props = new ArrayList(); + List props = new ArrayList<>(); for (PreviewProperty p : properties.values()) { if (p.getSource().equals(source)) { props.add(p); @@ -346,11 +374,12 @@ public PreviewProperty[] getProperties(Object source) { /** * Returns all properties which defined property as a dependency. + * * @param property the parent property * @return all properties with property as a parent property */ public PreviewProperty[] getChildProperties(PreviewProperty property) { - List props = new ArrayList(); + List props = new ArrayList<>(); for (PreviewProperty p : properties.values()) { for (String pn : p.dependencies) { if (pn.equals(property.getName())) { @@ -363,11 +392,12 @@ public PreviewProperty[] getChildProperties(PreviewProperty property) { /** * Returns all properties property defined as dependencies. + * * @param property the property to find parent properties from * @return all properties property depends on */ public PreviewProperty[] getParentProperties(PreviewProperty property) { - List props = new ArrayList(); + List props = new ArrayList<>(); for (PreviewProperty p : properties.values()) { for (String pn : property.dependencies) { if (pn.equals(p.getName())) { @@ -380,6 +410,7 @@ public PreviewProperty[] getParentProperties(PreviewProperty property) { /** * Sets all preset's property values to this properties. + * * @param previewPreset the preset to get values from */ public void applyPreset(PreviewPreset previewPreset) { @@ -392,29 +423,4 @@ public void applyPreset(PreviewPreset previewPreset) { } } } - - /** - * Converts any value to a serialized String. - * Uses PropertyEditor for serialization except for values of Font class. - * - * Note: Method moved to Utils module (org.gephi.utils.Serialization). - * @param value Value to serialize as String - * @return Result String or null if the value can't be serialized with a PropertyEditor - */ - public static String getValueAsText(Object value) { - return Serialization.getValueAsText(value); - } - - /** - * Deserializes a serialized String of the given class. - * Uses PropertyEditor for serialization except for values of Font class. - * - * Note: Method moved to Utils module (org.gephi.utils.Serialization). - * @param valueStr String to deserialize - * @param valueClass Class of the serialized value - * @return Deserialized value or null if it can't be deserialized with a PropertyEditor - */ - public static Object readValueFromText(String valueStr, Class valueClass) { - return Serialization.readValueFromText(valueStr, valueClass); - } } diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/api/PreviewProperty.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/api/PreviewProperty.java index 32a9c1308d..6cec4c609f 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/api/PreviewProperty.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/api/PreviewProperty.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.api; import java.beans.PropertyEditor; @@ -53,22 +54,22 @@ Development and Distribution License("CDDL") (collectively, the * should be rendered. Each property should have a unique name and a type. Users * should use the static createProperty() methods to create instances. *

      - * Static default property names are defined in this class to help renderers to + * Static default property names are defined in this class to help renderers to * reuse external properties and have cleaner code. - *

      - * Properties can be grouped by categories, which default are + *

      + * Properties can be grouped by categories, which default are * PreviewProperty.CATEGORY_NODES, PreviewProperty.CATEGORY_EDGES, * PreviewProperty.CATEGORY_NODE_LABELS, PreviewProperty.CATEGORY_EDGE_LABELS * and PreviewProperty.CATEGORY_EDGE_ARROWS. - * + * * @author Mathieu Bastian - * @see Renderer#getProperties() + * @see Renderer#getProperties() */ public class PreviewProperty { //Constants global /** - * General Boolean property which indicates wheter the graph is directed + * General Boolean property which indicates whether the graph is directed */ public static final String DIRECTED = "directed"; /** @@ -81,12 +82,20 @@ public class PreviewProperty { */ public static final String VISIBILITY_RATIO = "visibility-ratio"; /** - * General Float property in percentage (0-100) describing the + * General Float property in percentage (0-100) describing the * margin size. For instance if the value is 4 the size of the margin is 4% of * the total graph width. */ public static final String MARGIN = "margin"; //Constants nodes + /** + * General Float property defining a global scale factor applied to all nodes sizes + */ + public static final String NODE_SCALE_FACTOR = "node.scale.factor"; + /** + * Node Boolean property which indicates if the border size is either fixed or relative to the node size + */ + public static final String NODE_BORDER_FIXED = "node.border.fixed"; /** * Node Float property defining the node border size. */ @@ -101,11 +110,23 @@ public class PreviewProperty { * 100 means opaque. */ public static final String NODE_OPACITY = "node.opacity"; + + /** + * Node Boolean property indicating whether or not to use the + * opacity value defined as part of the Node color. If true, NODE_OPACITY will + * be ignored. + */ + public static final String NODE_PER_NODE_OPACITY = "node.per.node.opacity"; + //Constants edges /** * Edge Boolean property defining whether to show edges. */ public static final String SHOW_EDGES = "edge.show"; + /** + * General Float property defining a global scale factor applied to all edge thickness + */ + public static final String EDGE_SCALE_FACTOR = "edge.scale.factor"; /** * Edge Float property for the edge's thickness */ @@ -117,7 +138,7 @@ public class PreviewProperty { public static final String EDGE_CURVED = "edge.curved"; /** * Edge EdgeColor property defining the edge color. It could be - * the source's color, the target's color, a mixed color, the edge's original + * the source's color, the target's color, a mixed color, the edge's self * color or a custom color. */ public static final String EDGE_COLOR = "edge.color"; @@ -126,11 +147,24 @@ public class PreviewProperty { * 100 means opaque. */ public static final String EDGE_OPACITY = "edge.opacity"; + /** + * Edge Boolean property defining whether edge's weight should be used + * in edge thickness calculation. + */ + public static final String EDGE_USE_WEIGHT = "edge.use-weight"; /** * Edge Boolean property defining whether edge's weight should be * rescaled between fixed bounds. */ public static final String EDGE_RESCALE_WEIGHT = "edge.rescale-weight"; + /** + * Edge float property defining the minimum weight when edge weight rescaling is enabled. + */ + public static final String EDGE_RESCALE_WEIGHT_MIN = "edge.rescale-weight.min"; + /** + * Edge float property defining the minimum weight when edge weight rescaling is enabled. + */ + public static final String EDGE_RESCALE_WEIGHT_MAX = "edge.rescale-weight.max"; /** * Edge Float property defining an extra distance between the node * and the edge. @@ -146,21 +180,41 @@ public class PreviewProperty { * Node Label Boolean property defining whether to show node labels. */ public static final String SHOW_NODE_LABELS = "node.label.show"; + /** + * When True, uses the node label Font, and otherwise uses the font from the + * Visualization API. + */ + public static final String NODE_LABEL_CUSTOM_FONT = "node.label.customFont"; /** * Node Label Font property defining node label's font. */ public static final String NODE_LABEL_FONT = "node.label.font"; /** - * Node Label Boolean> property defining whether to use node's size + * Node Label Float property defining a global scale factor applied to all node labels sizes. + */ + public static final String NODE_LABEL_SCALE = "node.label.scale"; + /** + * Node Label Boolean property defining whether to use node's size * in label size calculation. */ public static final String NODE_LABEL_PROPORTIONAL_SIZE = "node.label.proportinalSize"; /** * Node Label DependantOriginalColor property defining the color label. - * The color could either be the node's color, the label original color if it has any + * The color could either be the node's color, the label self color if it has any * or a custom color. */ public static final String NODE_LABEL_COLOR = "node.label.color"; + /** + * Node Label Boolean property defining whether to avoid label overlaps. + * When true, a grid-based algorithm hides labels that overlap with labels of larger nodes. + */ + public static final String NODE_LABEL_AVOID_OVERLAP = "node.label.avoidOverlap"; + /** + * Node Label Integer property defining the grid cell size (in graph coordinate units) + * used by the label overlap avoidance algorithm. Larger values create coarser cells and are faster + * but less precise; smaller values give finer resolution. + */ + public static final String NODE_LABEL_OVERLAP_GRID_SIZE = "node.label.overlapGridSize"; /** * Node Label Boolean property defining whether the label is shortened. */ @@ -171,7 +225,7 @@ public class PreviewProperty { */ public static final String NODE_LABEL_MAX_CHAR = "node.label.max-char"; /** - * Node Label Outline Float property defining the outline size. + * Node Label Outline Float property defining the outline size. */ public static final String NODE_LABEL_OUTLINE_SIZE = "node.label.outline.size"; /** @@ -192,13 +246,22 @@ public class PreviewProperty { * Edge Label Boolean property defining whether to show edge labels. */ public static final String SHOW_EDGE_LABELS = "edge.label.show"; + /** + * Edge Label Float property defining a global scale factor applied to all edge labels sizes. + */ + public static final String EDGE_LABEL_SCALE = "edge.label.scale"; + /** + * When True, uses the edge label Font, and otherwise uses the font from the + * Visualization API. + */ + public static final String EDGE_LABEL_CUSTOM_FONT = "edge.label.customFont"; /** * Edge Label Font property defining edge label's font. */ public static final String EDGE_LABEL_FONT = "edge.label.font"; /** * Edge Label DependantOriginalColor property defining the color label. - * The color could either be the edge's color, the label original color if it has any + * The color could either be the edge's color, the label self color if it has any * or a custom color. */ public static final String EDGE_LABEL_COLOR = "edge.label.color"; @@ -212,7 +275,7 @@ public class PreviewProperty { */ public static final String EDGE_LABEL_MAX_CHAR = "edge.label.max-char"; /** - * Edge Label Outline Float property defining the outline size. + * Edge Label Outline Float property defining the outline size. */ public static final String EDGE_LABEL_OUTLINE_SIZE = "edge.label.outline.size"; /** @@ -236,23 +299,28 @@ public class PreviewProperty { /** * Node category */ - public static final String CATEGORY_NODES = NbBundle.getMessage(PreviewProperty.class, "PreviewProperty.Category.Nodes"); + public static final String CATEGORY_NODES = + NbBundle.getMessage(PreviewProperty.class, "PreviewProperty.Category.Nodes"); /** * Edge category */ - public static final String CATEGORY_EDGES = NbBundle.getMessage(PreviewProperty.class, "PreviewProperty.Category.Edges"); + public static final String CATEGORY_EDGES = + NbBundle.getMessage(PreviewProperty.class, "PreviewProperty.Category.Edges"); /** * Node Label category */ - public static final String CATEGORY_NODE_LABELS = NbBundle.getMessage(PreviewProperty.class, "PreviewProperty.Category.NodeLabels"); + public static final String CATEGORY_NODE_LABELS = + NbBundle.getMessage(PreviewProperty.class, "PreviewProperty.Category.NodeLabels"); /** * Edge Label category */ - public static final String CATEGORY_EDGE_LABELS = NbBundle.getMessage(PreviewProperty.class, "PreviewProperty.Category.EdgeLabels"); + public static final String CATEGORY_EDGE_LABELS = + NbBundle.getMessage(PreviewProperty.class, "PreviewProperty.Category.EdgeLabels"); /** * Edge arrow category */ - public static final String CATEGORY_EDGE_ARROWS = NbBundle.getMessage(PreviewProperty.class, "PreviewProperty.Category.EdgeArrows"); + public static final String CATEGORY_EDGE_ARROWS = + NbBundle.getMessage(PreviewProperty.class, "PreviewProperty.Category.EdgeArrows"); //Variables final String name; final String displayName; @@ -262,6 +330,8 @@ public class PreviewProperty { final Class type; Object value; String[] dependencies = new String[0]; + Number minValue; + Number maxValue; PreviewProperty(Object source, String name, Class type, String displayName, String description, String category) { this.source = source; @@ -272,7 +342,8 @@ public class PreviewProperty { this.category = category; } - PreviewProperty(Object source, String name, Class type, String displayName, String description, String category, String[] dependencies) { + PreviewProperty(Object source, String name, Class type, String displayName, String description, String category, + String[] dependencies) { this.source = source; this.name = name; this.type = type; @@ -284,8 +355,9 @@ public class PreviewProperty { /** * Create a new preview property. The name should be unique. + * * @param source the property source, for instance the renderer - * @param name the property's name + * @param name the property's name * @return a new preview property */ public static PreviewProperty createProperty(Object source, String name) { @@ -294,12 +366,13 @@ public static PreviewProperty createProperty(Object source, String name) { /** * Create a new preview property. The name should be unique. If - * the type is different from basic types (Integer, Float, Double, String, + * the type is different from basic types (Integer, Float, Double, String, * Boolean or Color) make sure to implement a {@link PropertyEditor} and register it: *

      PropertyEditorManager.registerEditor(MyType.class, MyTypePropertyEditor.class);
      + * * @param source the property source, for instance the renderer - * @param name the property's name - * @param type the property's value type + * @param name the property's name + * @param type the property's value type * @return a new preview property */ public static PreviewProperty createProperty(Object source, String name, Class type) { @@ -308,7 +381,7 @@ public static PreviewProperty createProperty(Object source, String name, Class t /** * Create a new preview property. The name should be unique. If - * the type is different from basic types (Integer, Float, Double, String, + * the type is different from basic types (Integer, Float, Double, String, * Boolean or Color) make sure to implement a {@link PropertyEditor} and register it: *
      PropertyEditorManager.registerEditor(MyType.class, MyTypePropertyEditor.class);
      * The category can be one of the default categories: @@ -317,21 +390,23 @@ public static PreviewProperty createProperty(Object source, String name, Class t *
    2. PreviewProperty.CATEGORY_NODE_LABELS
    3. *
    4. PreviewProperty.CATEGORY_EDGE_LABELS
    5. *
    6. PreviewProperty.CATEGORY_EDGE_ARROWS
    7. - * @param source the property source, for instance the renderer - * @param name the property's name - * @param type the property's value type + * + * @param source the property source, for instance the renderer + * @param name the property's name + * @param type the property's value type * @param displayName the property's display name * @param description the property's description - * @param category the property's category + * @param category the property's category * @return a new preview property */ - public static PreviewProperty createProperty(Object source, String name, Class type, String displayName, String description, String category) { + public static PreviewProperty createProperty(Object source, String name, Class type, String displayName, + String description, String category) { return new PreviewProperty(source, name, type, displayName, description, category); } /** * Create a new preview property. The name should be unique. If - * the type is different from basic types (Integer, Float, Double, String, + * the type is different from basic types (Integer, Float, Double, String, * Boolean or Color) make sure to implement a {@link PropertyEditor} and register it: *
      PropertyEditorManager.registerEditor(MyType.class, MyTypePropertyEditor.class);
      * The category can be one of the default categories: @@ -343,21 +418,24 @@ public static PreviewProperty createProperty(Object source, String name, Class t * The dependantProperties list is used to automatically disable * the property if the dependant property is not selected. The dependant properties * need to be Boolean type. - * @param source the property source, for instance the renderer - * @param name the property's name - * @param type the property's value type - * @param displayName the property's display name - * @param description the property's description - * @param category the property's category + * + * @param source the property source, for instance the renderer + * @param name the property's name + * @param type the property's value type + * @param displayName the property's display name + * @param description the property's description + * @param category the property's category * @param dependantProperties a list of boolean properties this property depend on * @return a new preview property */ - public static PreviewProperty createProperty(Object source, String name, Class type, String displayName, String description, String category, String... dependantProperties) { + public static PreviewProperty createProperty(Object source, String name, Class type, String displayName, + String description, String category, String... dependantProperties) { return new PreviewProperty(source, name, type, displayName, description, category, dependantProperties); } /** * Returns the property value. + * * @param the return type * @return the property value or null */ @@ -367,16 +445,75 @@ public T getValue() { /** * Sets this property value and return it. The value can be null. + * If min/max bounds have been set via {@link #setMinMax(Number, Number)}, numeric values + * are clamped to those bounds before being stored. + * * @param value the value to be set * @return this property instance */ public PreviewProperty setValue(Object value) { + if (value instanceof Number && (minValue != null || maxValue != null)) { + double v = ((Number) value).doubleValue(); + if (minValue != null) { + v = Math.max(v, minValue.doubleValue()); + } + if (maxValue != null) { + v = Math.min(v, maxValue.doubleValue()); + } + if (value instanceof Integer) { + value = (int) v; + } else if (value instanceof Float) { + value = (float) v; + } else if (value instanceof Double) { + value = v; + } else if (value instanceof Long) { + value = (long) v; + } + } this.value = value; return this; } + /** + * Sets optional minimum and maximum bounds for this property's numeric value. + *

      + * When either bound is non-null, any numeric value passed to {@link #setValue(Object)} + * is clamped to the range {@code [min, max]} before being stored. Pass null + * for either bound to leave that side unbounded. + * + * @param min the inclusive lower bound, or null for no lower bound + * @param max the inclusive upper bound, or null for no upper bound + * @return this property instance + */ + public PreviewProperty setMinMax(Number min, Number max) { + this.minValue = min; + this.maxValue = max; + return this; + } + + /** + * Returns the minimum allowed value for this property, or null if no lower + * bound has been set. + * + * @return the minimum value or null + */ + public Number getMinValue() { + return minValue; + } + + /** + * Returns the maximum allowed value for this property, or null if no upper + * bound has been set. + * + * @return the maximum value or null + */ + public Number getMaxValue() { + return maxValue; + } + /** * Returns the (unique) name of this property. + * * @return the property's name */ public String getName() { @@ -385,6 +522,7 @@ public String getName() { /** * Returns the type of this property. + * * @return this property's type */ public Class getType() { @@ -393,6 +531,7 @@ public Class getType() { /** * Returns the display name of this property or null if not set. + * * @return this property's display name or null */ public String getDisplayName() { @@ -401,6 +540,7 @@ public String getDisplayName() { /** * Returns the description of this property or null if not set. + * * @return this property's description or null */ public String getDescription() { @@ -409,6 +549,7 @@ public String getDescription() { /** * Returns the source object of this property. + * * @return this property's source object */ public Object getSource() { @@ -417,6 +558,7 @@ public Object getSource() { /** * Returns the category of this property or null if not set. + * * @return this property's category or null */ public String getCategory() { diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/api/RenderTarget.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/api/RenderTarget.java index c0ef3a0d8e..951998e5b1 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/api/RenderTarget.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/api/RenderTarget.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.api; import java.awt.Graphics2D; @@ -47,12 +48,11 @@ Development and Distribution License("CDDL") (collectively, the /** * RenderTarget is the graphic container the renderers draw into. *

      - * There are three types of targets: Processing, PDF or + * There are three types of targets: G2D, PDF or * SVG. When the target is G2D, renderers obtain the {@link Graphics2D} * object. For the SVG target, renderers obtain Batik's Document - * instance. As the PDF target rely on the iText library renderers obtain the PdfContentByte + * instance. As the PDF target rely on the PDFBox library, renderers obtain the {@link org.apache.pdfbox.pdmodel.PDPageContentStream} * object. *

      * Render targets are not drawing anything. They just make accessible the canvas @@ -66,7 +66,7 @@ Development and Distribution License("CDDL") (collectively, the */ public interface RenderTarget { - public static final String G2D_TARGET = "g2d"; - public static final String SVG_TARGET = "svg"; - public static final String PDF_TARGET = "pdf"; + String G2D_TARGET = "g2d"; + String SVG_TARGET = "svg"; + String PDF_TARGET = "pdf"; } diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/api/SVGTarget.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/api/SVGTarget.java index 949343f69b..1f2f497790 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/api/SVGTarget.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/api/SVGTarget.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.api; import java.awt.Color; @@ -54,88 +55,95 @@ Development and Distribution License("CDDL") (collectively, the * transcode the SVG DOM in a SVG document. *

      * To allow further document further manipulation the DOM is organized with top - * elements. Top elements are nodes, edges, node-labels, + * elements. Top elements are nodes, edges, node-labels, * edge-labels and arrows and are elements to append * items to. For instance when a node label element is created it should be appended * to the node-label element instead of directly to the root. Use * the getTopElement() method to retrieve or create top elements. + * * @author Mathieu Bastian */ public interface SVGTarget extends RenderTarget { /** - * SVG Boolean property whether to rescale stroke's width/thickness. + * SVG Boolean property whether to rescale stroke's width/thickness. */ - public static final String SCALE_STROKES = "svg.scale.strokes"; + String SCALE_STROKES = "svg.scale.strokes"; /** * Default top element name for nodes */ - public static final String TOP_NODES = "nodes"; + String TOP_NODES = "nodes"; /** * Default top element name for edges */ - public static final String TOP_EDGES = "edges"; + String TOP_EDGES = "edges"; /** * Default top element name for node labels */ - public static final String TOP_NODE_LABELS = "node-labels"; + String TOP_NODE_LABELS = "node-labels"; /** * Default top element name for node labels outline */ - public static final String TOP_NODE_LABELS_OUTLINE = "node-labels-outline"; + String TOP_NODE_LABELS_OUTLINE = "node-labels-outline"; /** * Default top element name for edge labels */ - public static final String TOP_EDGE_LABELS = "edge-labels"; + String TOP_EDGE_LABELS = "edge-labels"; /** * Default top element name for edge labels outline */ - public static final String TOP_EDGE_LABELS_OUTLINE = "edge-labels-outline"; + String TOP_EDGE_LABELS_OUTLINE = "edge-labels-outline"; /** * Default top element name for arrows */ - public static final String TOP_ARROWS = "arrows"; + String TOP_ARROWS = "arrows"; /** * Create a new element qualifiedName in the document. + * * @param qualifiedName the name of the element * @return the newly created element */ - public Element createElement(String qualifiedName); + Element createElement(String qualifiedName); /** * Create a new text node with data in it. + * * @param data the text data * @return the newly created text node */ - public Text createTextNode(String data); + Text createTextNode(String data); /** * Returns the top element name in the document. Top elements are * direct children of the root node and help to organize the SVG document (e.g. * all edges in the same parent DOM node). Create the top element if it missing. + * * @param name the top element name to lookup * @return the top element */ - public Element getTopElement(String name); + Element getTopElement(String name); /** * Returns the SVG document + * * @return the SVG document */ - public Document getDocument(); + Document getDocument(); /** * When SCALE_STROKES property is true returns * the scale ratio to scale strokes with. + * * @return the current scale ratio */ - public float getScaleRatio(); + float getScaleRatio(); /** * Returns color in the hex format (e.g. #ff0000). + * * @param color the color to convert * @return the color in a hex format */ - public String toHexString(Color color); + String toHexString(Color color); } diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/api/Vector.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/api/Vector.java index b01dd918cf..39aaa97db7 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/api/Vector.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/api/Vector.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.api; public class Vector { @@ -54,6 +55,22 @@ public Vector(float x, float y) { this.y = y; } + public static Vector div(Vector v, float n) { + return new Vector(v.x / n, v.y / n); + } + + public static Vector mult(Vector v, float n) { + return new Vector(v.x * n, v.y * n); + } + + public static Vector add(Vector v1, Vector v2) { + return new Vector(v1.x + v2.x, v1.y + v2.y); + } + + public static Vector sub(Vector v1, Vector v2) { + return new Vector(v1.x - v2.x, v1.y - v2.y); + } + public void set(float x, float y) { this.x = x; this.y = y; @@ -81,7 +98,7 @@ public void add(Vector v) { public void add(float a, float b) { x += a; - x += b; + y += b; } public void sub(Vector v) { @@ -105,22 +122,6 @@ public void normalize() { } } - public static Vector div(Vector v, float n) { - return new Vector(v.x / n, v.y / n); - } - - public static Vector mult(Vector v, float n) { - return new Vector(v.x * n, v.y * n); - } - - public static Vector add(Vector v1, Vector v2) { - return new Vector(v1.x + v2.x, v1.y + v2.y); - } - - public static Vector sub(Vector v1, Vector v2) { - return new Vector(v1.x - v2.x, v1.y - v2.y); - } - public float getX() { return x; } @@ -149,9 +150,11 @@ public boolean equals(Object obj) { if (Float.floatToIntBits(this.x) != Float.floatToIntBits(other.x)) { return false; } - if (Float.floatToIntBits(this.y) != Float.floatToIntBits(other.y)) { - return false; - } - return true; + return Float.floatToIntBits(this.y) == Float.floatToIntBits(other.y); + } + + @Override + public String toString() { + return "Vector{" + "x=" + x + ", y=" + y + '}'; } } diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/presets/BlackBackground.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/presets/BlackBackground.java index adb1d21f8c..e098a6e5d3 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/presets/BlackBackground.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/presets/BlackBackground.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.presets; import java.awt.Color; @@ -58,7 +59,7 @@ public BlackBackground() { properties.putAll(defaultPreset.getProperties()); //Custom values - properties.put(PreviewProperty.BACKGROUND_COLOR, Color.BLACK); + properties.put(PreviewProperty.BACKGROUND_COLOR, new Color(52, 55, 57)); properties.put(PreviewProperty.SHOW_EDGE_LABELS, Boolean.TRUE); properties.put(PreviewProperty.SHOW_NODE_LABELS, Boolean.TRUE); properties.put(PreviewProperty.NODE_LABEL_COLOR, new DependantOriginalColor(Color.WHITE)); @@ -66,5 +67,6 @@ public BlackBackground() { properties.put(PreviewProperty.NODE_LABEL_OUTLINE_COLOR, new DependantColor(DependantColor.Mode.PARENT)); properties.put(PreviewProperty.EDGE_LABEL_OUTLINE_COLOR, new DependantColor(DependantColor.Mode.PARENT)); properties.put(PreviewProperty.EDGE_OPACITY, 70f); + properties.put(PreviewProperty.NODE_BORDER_COLOR, new DependantColor(DependantColor.Mode.LIGHTER)); } } diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/presets/DefaultCurved.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/presets/DefaultCurved.java index e268ce4036..f06632e9bf 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/presets/DefaultCurved.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/presets/DefaultCurved.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.presets; import org.gephi.preview.api.PreviewPreset; @@ -46,20 +47,20 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class DefaultCurved extends PreviewPreset { public DefaultCurved() { super(NbBundle.getMessage(DefaultCurved.class, "DefaultCurved.name")); - + //Default DefaultPreset defaultPreset = new DefaultPreset(); properties.putAll(defaultPreset.getProperties()); - + //Custom values properties.put(PreviewProperty.SHOW_EDGE_LABELS, Boolean.TRUE); properties.put(PreviewProperty.SHOW_NODE_LABELS, Boolean.TRUE); + properties.put(PreviewProperty.ARROW_SIZE, 0); } } diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/presets/DefaultPreset.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/presets/DefaultPreset.java index d32010be29..91d5723d51 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/presets/DefaultPreset.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/presets/DefaultPreset.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.presets; import java.awt.Color; @@ -51,7 +52,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class DefaultPreset extends PreviewPreset { @@ -64,12 +64,16 @@ public DefaultPreset() { properties.put(PreviewProperty.EDGE_COLOR, new EdgeColor(EdgeColor.Mode.MIXED)); properties.put(PreviewProperty.EDGE_CURVED, true); + properties.put(PreviewProperty.EDGE_USE_WEIGHT, true); properties.put(PreviewProperty.EDGE_RESCALE_WEIGHT, Boolean.FALSE); + properties.put(PreviewProperty.EDGE_RESCALE_WEIGHT_MIN, 0.4f); + properties.put(PreviewProperty.EDGE_RESCALE_WEIGHT_MAX, 8f); properties.put(PreviewProperty.EDGE_OPACITY, 100f); properties.put(PreviewProperty.EDGE_RADIUS, 0f); properties.put(PreviewProperty.EDGE_THICKNESS, 1f); - properties.put(PreviewProperty.EDGE_LABEL_COLOR, new DependantOriginalColor(DependantOriginalColor.Mode.ORIGINAL)); + properties + .put(PreviewProperty.EDGE_LABEL_COLOR, new DependantOriginalColor(DependantOriginalColor.Mode.ORIGINAL)); properties.put(PreviewProperty.EDGE_LABEL_FONT, new Font("Arial", Font.PLAIN, 10)); properties.put(PreviewProperty.EDGE_LABEL_MAX_CHAR, 30); properties.put(PreviewProperty.EDGE_LABEL_OUTLINE_COLOR, new DependantColor(Color.WHITE)); @@ -77,13 +81,15 @@ public DefaultPreset() { properties.put(PreviewProperty.EDGE_LABEL_OUTLINE_SIZE, 0f); properties.put(PreviewProperty.EDGE_LABEL_SHORTEN, false); - properties.put(PreviewProperty.NODE_BORDER_COLOR, new DependantColor(Color.BLACK)); + properties.put(PreviewProperty.NODE_BORDER_COLOR, new DependantColor(DependantColor.Mode.DARKER)); properties.put(PreviewProperty.NODE_BORDER_WIDTH, 1.0f); + properties.put(PreviewProperty.NODE_BORDER_FIXED, false); properties.put(PreviewProperty.NODE_OPACITY, 100f); properties.put(PreviewProperty.NODE_LABEL_BOX_COLOR, new DependantColor(DependantColor.Mode.PARENT)); properties.put(PreviewProperty.NODE_LABEL_BOX_OPACITY, 100f); properties.put(PreviewProperty.NODE_LABEL_COLOR, new DependantOriginalColor(Color.BLACK)); + properties.put(PreviewProperty.NODE_LABEL_CUSTOM_FONT, false); properties.put(PreviewProperty.NODE_LABEL_FONT, new Font("Arial", Font.PLAIN, 12)); properties.put(PreviewProperty.NODE_LABEL_MAX_CHAR, 30); properties.put(PreviewProperty.NODE_LABEL_OUTLINE_COLOR, new DependantColor(Color.WHITE)); @@ -92,6 +98,8 @@ public DefaultPreset() { properties.put(PreviewProperty.NODE_LABEL_PROPORTIONAL_SIZE, true); properties.put(PreviewProperty.NODE_LABEL_SHORTEN, false); properties.put(PreviewProperty.NODE_LABEL_SHOW_BOX, false); + properties.put(PreviewProperty.NODE_LABEL_AVOID_OVERLAP, Boolean.TRUE); + properties.put(PreviewProperty.NODE_LABEL_OVERLAP_GRID_SIZE, 10); properties.put(PreviewProperty.SHOW_EDGES, Boolean.TRUE); properties.put(PreviewProperty.SHOW_EDGE_LABELS, Boolean.FALSE); diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/presets/DefaultStraight.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/presets/DefaultStraight.java index ef4dcb6674..18a769c8c6 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/presets/DefaultStraight.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/presets/DefaultStraight.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.presets; import org.gephi.preview.api.PreviewPreset; @@ -46,7 +47,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class DefaultStraight extends PreviewPreset { @@ -57,7 +57,7 @@ public DefaultStraight() { //Default DefaultPreset defaultPreset = new DefaultPreset(); properties.putAll(defaultPreset.getProperties()); - + //Custom values properties.put(PreviewProperty.SHOW_EDGE_LABELS, Boolean.TRUE); properties.put(PreviewProperty.SHOW_NODE_LABELS, Boolean.TRUE); diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/presets/EdgesCustomColor.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/presets/EdgesCustomColor.java index 49149e3b9d..b98e5c0723 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/presets/EdgesCustomColor.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/presets/EdgesCustomColor.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.presets; import java.awt.Color; @@ -56,7 +57,7 @@ public EdgesCustomColor() { //Default DefaultPreset defaultPreset = new DefaultPreset(); properties.putAll(defaultPreset.getProperties()); - + //Custom values properties.put(PreviewProperty.NODE_LABEL_SHOW_BOX, Boolean.TRUE); properties.put(PreviewProperty.NODE_LABEL_BOX_COLOR, new DependantColor(Color.WHITE)); diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/presets/TagCloud.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/presets/TagCloud.java index 57c7adb6cb..0da35703a9 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/presets/TagCloud.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/presets/TagCloud.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.presets; import org.gephi.preview.api.PreviewPreset; @@ -53,7 +54,7 @@ public TagCloud() { //Default DefaultPreset defaultPreset = new DefaultPreset(); properties.putAll(defaultPreset.getProperties()); - + //Custom values properties.put(PreviewProperty.NODE_LABEL_SHOW_BOX, Boolean.TRUE); properties.put(PreviewProperty.NODE_LABEL_BOX_OPACITY, 80f); diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/presets/TextOutline.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/presets/TextOutline.java index 4afeb9dff7..a3504ed237 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/presets/TextOutline.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/presets/TextOutline.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.presets; import org.gephi.preview.api.PreviewPreset; diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/spi/ItemBuilder.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/spi/ItemBuilder.java index 22dca779bd..6adf1ad46e 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/spi/ItemBuilder.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/spi/ItemBuilder.java @@ -39,9 +39,9 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.spi; -import org.gephi.attribute.api.AttributeModel; import org.gephi.graph.api.Graph; import org.gephi.preview.api.Item; @@ -66,22 +66,20 @@ Development and Distribution License("CDDL") (collectively, the */ public interface ItemBuilder { - public static final String NODE_BUILDER = Item.NODE; - public static final String NODE_LABEL_BUILDER = Item.NODE_LABEL; - public static final String EDGE_BUILDER = Item.EDGE; - public static final String EDGE_LABEL_BUILDER = Item.EDGE_LABEL; + String NODE_BUILDER = Item.NODE; + String NODE_LABEL_BUILDER = Item.NODE_LABEL; + String EDGE_BUILDER = Item.EDGE; + String EDGE_LABEL_BUILDER = Item.EDGE_LABEL; /** * Build items from the - * graph and - * attributeModel. + * graph. * * @param graph the graph to build items from - * @param attributeModel the attribute model associated to the graph * @return an array of new items, from the same type returned by * {@link #getType()} */ - public Item[] getItems(Graph graph, AttributeModel attributeModel); + Item[] getItems(Graph graph); /** * Returns the type of this builder. @@ -94,5 +92,5 @@ public interface ItemBuilder { * * @return the builder item type. */ - public String getType(); + String getType(); } diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/spi/MouseResponsiveRenderer.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/spi/MouseResponsiveRenderer.java index 29c7c69da3..b02a4749f9 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/spi/MouseResponsiveRenderer.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/spi/MouseResponsiveRenderer.java @@ -39,13 +39,18 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2012 Gephi Consortium. */ + package org.gephi.preview.spi; /** - * Optionally implement this interface in a Renderer that needs to be responsive to mouse events. - * Only renderers that implement this interface will be drawn while mouse events are being attended (such as dragging). - * @author Eduardo Ramos + * Optionally implement this interface in a Renderer that + * needs to be responsive to mouse events. Only renderers that implement this + * interface will be drawn while mouse events are being attended (such as + * dragging). + * + * @author Eduardo Ramos */ public interface MouseResponsiveRenderer { - public boolean needsPreviewMouseListener(PreviewMouseListener previewMouseListener); + + boolean needsPreviewMouseListener(PreviewMouseListener previewMouseListener); } diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/spi/PreviewMouseListener.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/spi/PreviewMouseListener.java index 70db922231..37f73bc2f9 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/spi/PreviewMouseListener.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/spi/PreviewMouseListener.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2012 Gephi Consortium. */ + package org.gephi.preview.spi; import org.gephi.preview.api.PreviewMouseEvent; @@ -48,42 +49,47 @@ Development and Distribution License("CDDL") (collectively, the /** *

      Listener for mouse events in Preview.

      *

      Listeners will always receive left mouse button events. Right button is reserved for zooming and moving the canvas

      - * - *

      In order to enable a PreviewMouseListener, annotate it with ServiceProvider annotation and implement MouseResponsiveRenderer + * + *

      In order to enable a PreviewMouseListener, annotate it with ServiceProvider annotation and implement MouseResponsiveRenderer * in a Renderer and return true for the listener in the needsPreviewMouseListener method.

      - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public interface PreviewMouseListener { - + /** * A single click event. - * @param event Mouse event + * + * @param event Mouse event * @param properties Preview properties for the workspace * @param workspace Current workspace */ - public void mouseClicked(PreviewMouseEvent event, PreviewProperties properties, Workspace workspace); - + void mouseClicked(PreviewMouseEvent event, PreviewProperties properties, Workspace workspace); + /** * A mouse press event. If your listener needs to receive drag or release events, you must mark the previous press event as consumed. - * @param event Mouse event + * + * @param event Mouse event * @param properties Preview properties for the workspace * @param workspace Current workspace */ - public void mousePressed(PreviewMouseEvent event, PreviewProperties properties, Workspace workspace); - + void mousePressed(PreviewMouseEvent event, PreviewProperties properties, Workspace workspace); + /** * If your listener needs to receive drag events, you must mark the previous press event as consumed. - * @param event Mouse event + * + * @param event Mouse event * @param properties Preview properties for the workspace * @param workspace Current workspace */ - public void mouseDragged(PreviewMouseEvent event, PreviewProperties properties, Workspace workspace); - + void mouseDragged(PreviewMouseEvent event, PreviewProperties properties, Workspace workspace); + /** * If your listener needs to receive release events, you must mark the previous press event as consumed. - * @param event Mouse event + * + * @param event Mouse event * @param properties Preview properties for the workspace * @param workspace Current workspace */ - public void mouseReleased(PreviewMouseEvent event, PreviewProperties properties, Workspace workspace); + void mouseReleased(PreviewMouseEvent event, PreviewProperties properties, Workspace workspace); } diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/spi/PreviewUI.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/spi/PreviewUI.java index 8807a118f9..2264ed84d8 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/spi/PreviewUI.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/spi/PreviewUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.spi; import javax.swing.Icon; @@ -59,7 +60,7 @@ Development and Distribution License("CDDL") (collectively, the * following annotation to be recognized by the system: *

      * @ServiceProvider(service=PreviewUI.class) - * + * * @author Mathieu Bastian */ public interface PreviewUI { @@ -68,38 +69,42 @@ public interface PreviewUI { * Initialization method called when a workspace is selected and a panel is * about to be requested. The system first calls this method and then * getPanel(). + * * @param previewModel the model associated to the current workspace */ - public void setup(PreviewModel previewModel); + void setup(PreviewModel previewModel); /** - * Returns the JPanel component to be displayed. + * Returns the JPanel component to be displayed. *

      * This method * is always called after setup() so the implementation * can initialize the panel with the model. Note that the panel is destroyed * after unsetup() is called. In other words, a new panel is * requested at each workspace selection. + * * @return the panel to be displayed */ - public JPanel getPanel(); + JPanel getPanel(); /** * Method called when the UI is unloaded and the panel to be destroyed. This * happens when the workspace changes and before a new PreviewModel * is passed through setup(). */ - public void unsetup(); + void unsetup(); /** * Returns the icon of the tab or null if none + * * @return the tab's icon or null */ - public Icon getIcon(); + Icon getIcon(); /** * Returns the title of the tab + * * @return the tab's title */ - public String getPanelTitle(); + String getPanelTitle(); } diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/spi/RenderTargetBuilder.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/spi/RenderTargetBuilder.java index 8fb3db9123..7e7428d9ec 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/spi/RenderTargetBuilder.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/spi/RenderTargetBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.spi; import org.gephi.preview.api.PreviewModel; @@ -56,22 +57,25 @@ Development and Distribution License("CDDL") (collectively, the * following annotation to be recognized by the system: *

      * @ServiceProvider(service=RenderTargetBuilder.class) + * * @author Mathieu Bastian */ public interface RenderTargetBuilder { - + /** * Builds a new render target using the properties and dimensions defined * in previewModel. + * * @param previewModel the preview model to get the dimensions and properties from * @return a new render target instance */ - public RenderTarget buildRenderTarget(PreviewModel previewModel); - + RenderTarget buildRenderTarget(PreviewModel previewModel); + /** * Returns the name of the target builder. This value is used by the * PreviewController to identify render targets. + * * @return the name of the target builder */ - public String getName(); + String getName(); } diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/spi/Renderer.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/spi/Renderer.java index 20e4c4e0bb..384e4bc0f2 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/spi/Renderer.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/spi/Renderer.java @@ -39,9 +39,18 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.spi; -import org.gephi.preview.api.*; +import org.gephi.preview.api.CanvasSize; +import org.gephi.preview.api.G2DTarget; +import org.gephi.preview.api.Item; +import org.gephi.preview.api.PDFTarget; +import org.gephi.preview.api.PreviewModel; +import org.gephi.preview.api.PreviewProperties; +import org.gephi.preview.api.PreviewProperty; +import org.gephi.preview.api.RenderTarget; +import org.gephi.preview.api.SVGTarget; /** * Renderer describes how a particular {@link Item} object is rendered on a particular @@ -61,7 +70,7 @@ Development and Distribution License("CDDL") (collectively, the * render() which is called many times. *

    8. The isRendererForitem() is then used to determine which renderer * should be used to render an item. The method provides an access to the preview - * properties. For instance, if the properties says the edge display is disabled, + * properties. For instance, if the properties says the edge display is disabled, * the edge renderer should return false for every item. Note that * nothing avoids several renderer to returns true for the same item.
    9. *
    10. The render() method is finally called for every item which @@ -96,55 +105,70 @@ Development and Distribution License("CDDL") (collectively, the *

      * @ServiceProvider(service=Renderer.class, position=XXX) * Position parameter optional but recommended in order to control the default order in which the available renderers are executed. + * * @author Yudi Xue, Mathieu Bastian */ public interface Renderer { - + /** * Provides an user friendly name for the renderer. * This name will appear in the renderers manager UI. + * * @return User friendly renderer name, not null */ - public String getDisplayName(); + String getDisplayName(); /** * This method is called before rendering for all renderers and initializes - * items' additional attributes or run complex algorithms. + * items' additional attributes or run complex algorithms. *

      * This method has access to any item using the getItems() methods * of the preview model. *

      - * No data should be stored in the renderer itself but put in items using + * No data should be stored in the renderer itself but put in items using * {@link Item#setData(java.lang.String, java.lang.Object)}. Global states can - * be stored in properties using + * be stored in properties using * {@link PreviewProperties#putValue(java.lang.String, java.lang.Object)}. + * * @param previewModel the model to get items from */ - public void preProcess(PreviewModel previewModel); + void preProcess(PreviewModel previewModel); /** * Render item to target using the global properties * and item data. *

      - * The target can be one of the default target {@link ProcessingTarget}, - * {@link SVGTarget} or {@link PDFTarget}. Each target contains an access to + * The target can be one of the default target {@link G2DTarget}, + * {@link SVGTarget} or {@link PDFTarget}. Each target contains an access to * it's drawing canvas so the renderer can draw visual items. - * @param item the item to be rendered - * @param target the target to render the item on + * + * @param item the item to be rendered + * @param target the target to render the item on * @param properties the central properties */ - public void render(Item item, RenderTarget target, PreviewProperties properties); - + void render(Item item, RenderTarget target, PreviewProperties properties); + + /** + * This method is called after rendering all items to perform post-processing. + *

      + * This method has access to the model but also to the target and properties. + * + * @param previewModel the model to get items from + * @param target the target to render the item on + * @param properties the central properties + */ + void postProcess(PreviewModel previewModel, RenderTarget target, PreviewProperties properties); + /** * Returns all associated properties for this renderer. Properties can be built - * using static PreviewProperty.createProperty() methods. - * + * using static PreviewProperty.createProperty() methods. + * * @return a properties array */ - public PreviewProperty[] getProperties(); + PreviewProperty[] getProperties(); /** - * Based on properties, determine whether this renderer is + * Based on properties, determine whether this renderer is * valid to render Item. *

      * Additional states in properties helps to make a decision, @@ -155,13 +179,14 @@ public interface Renderer { * is true if the user is currently moving the canvas. Renderers * other than the node renderer usually render nothing while the user is moving * to speeds things up.

    11. - * @param item the item to be tested + * + * @param item the item to be tested * @param properties the current properties * @return true if item can be rendered by this * renderer, false otherwise */ - public boolean isRendererForitem(Item item, PreviewProperties properties); - + boolean isRendererForitem(Item item, PreviewProperties properties); + /** * Based on the itemBuilder class and the properties, * determine whether this renderer needs the given itemBuilder to be @@ -172,7 +197,7 @@ public interface Renderer { * You can simply return true if the builder builds items that this renderer renders, * but you can also check the current properties to see if your renderer is going to produce any graphic. *

      - * + *

      * Additional states in properties helps to make a decision, * including: *

        @@ -181,9 +206,23 @@ public interface Renderer { * is true if the user is currently moving the canvas. Renderers * other than the node renderer usually render nothing while the user is moving * to speeds things up.
      + * * @param itemBuilder builder that your renderer may need - * @param properties Current properties + * @param properties the current properties * @return true if you are going to use built items for rendering, false otherwise */ - public boolean needsItemBuilder(ItemBuilder itemBuilder, PreviewProperties properties); + boolean needsItemBuilder(ItemBuilder itemBuilder, PreviewProperties properties); + + /** + * Compute the canvas size of the item to render. + *

      + * The returned CanvasSize has to embed the whole item to + * render. If the canvas size cannot be computed, a CanvasSize + * with both width and height equlal to zero is returned. + * + * @param item the item to get the canvas size + * @param properties the current properties + * @return the item canvas size + */ + CanvasSize getCanvasSize(Item item, PreviewProperties properties); } diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/types/DependantColor.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/types/DependantColor.java index c62bf9666a..2193e86119 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/types/DependantColor.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/types/DependantColor.java @@ -39,21 +39,20 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.types; import java.awt.Color; +import org.gephi.utils.ColorUtils; /** * A color that can be custom or depend from a parent color. - * + * * @author Mathieu Bastian */ public final class DependantColor { - public enum Mode { - - PARENT, CUSTOM - }; + private static final float DARKEN_FACTOR = 0.498f; private final Color customColor; private final Mode mode; @@ -61,9 +60,9 @@ public DependantColor() { customColor = null; this.mode = Mode.PARENT; } - + public DependantColor(Mode mode) { - customColor = Color.BLACK; + customColor = mode.equals(Mode.CUSTOM) ? Color.BLACK : null; this.mode = mode; } @@ -79,11 +78,20 @@ public Color getCustomColor() { public Mode getMode() { return mode; } - + public Color getColor(Color parentColor) { if (mode.equals(Mode.CUSTOM) && customColor != null) { return customColor; + } else if (mode.equals(Mode.DARKER)) { + return ColorUtils.darken(parentColor, DARKEN_FACTOR); + } else if (mode.equals(Mode.LIGHTER)) { + return ColorUtils.lighten(parentColor, 1f + DARKEN_FACTOR); } return parentColor; } + + public enum Mode { + + PARENT, CUSTOM, DARKER, LIGHTER + } } diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/types/DependantOriginalColor.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/types/DependantOriginalColor.java index 14aac81165..cd27a5f58f 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/types/DependantOriginalColor.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/types/DependantOriginalColor.java @@ -39,26 +39,23 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.types; import java.awt.Color; /** - * A color that depends from another object, but can also have it's own color. - * + * A color that depends on another object, or has its own color. + * * @author Mathieu Bastian */ public final class DependantOriginalColor { - public enum Mode { - - PARENT, CUSTOM, ORIGINAL - }; private final Color customColor; private final Mode mode; public DependantOriginalColor(Mode mode) { - customColor = Color.BLACK; + customColor = mode.equals(DependantOriginalColor.Mode.CUSTOM) ? Color.BLACK : null; this.mode = mode; } @@ -84,4 +81,9 @@ public Color getColor(Color parentColor, Color originalColor) { } return customColor; } + + public enum Mode { + + PARENT, CUSTOM, ORIGINAL + } } diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/types/EdgeColor.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/types/EdgeColor.java index 5654af677b..d18b6499de 100644 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/types/EdgeColor.java +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/types/EdgeColor.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.types; import java.awt.Color; @@ -50,21 +51,17 @@ Development and Distribution License("CDDL") (collectively, the *

    12. TARGET: The target node's color
    13. *
    14. MIXED: An average of source and target color
    15. *
    16. CUSTOM: A custom color
    17. - *
    18. ORIGINAL: The original edge color, if exists
    19. - * + *
    20. ORIGINAL: The self edge color, if exists
    21. + * * @author Mathieu Bastian */ public class EdgeColor { - public enum Mode { - - SOURCE, TARGET, MIXED, CUSTOM, ORIGINAL - }; - private Color customColor; private final Mode mode; + private final Color customColor; public EdgeColor(Mode mode) { - customColor = Color.BLACK; + customColor = mode.equals(Mode.CUSTOM) ? Color.BLACK : null; this.mode = mode; } @@ -91,12 +88,17 @@ public Color getColor(Color edgeColor, Color sourceColor, Color targetColor) { return targetColor; case MIXED: return new Color((int) ((sourceColor.getRed() + targetColor.getRed()) / 2f), - (int) ((sourceColor.getGreen() + targetColor.getGreen()) / 2f), - (int) ((sourceColor.getBlue() + targetColor.getBlue()) / 2f), - (int) ((sourceColor.getAlpha() + targetColor.getAlpha()) / 2f)); + (int) ((sourceColor.getGreen() + targetColor.getGreen()) / 2f), + (int) ((sourceColor.getBlue() + targetColor.getBlue()) / 2f), + (int) ((sourceColor.getAlpha() + targetColor.getAlpha()) / 2f)); case CUSTOM: return customColor; } return null; } + + public enum Mode { + + SOURCE, TARGET, MIXED, CUSTOM, ORIGINAL + } } diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/types/editors/AbstractColorPropertyEditor.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/types/editors/AbstractColorPropertyEditor.java new file mode 100644 index 0000000000..9f20f22422 --- /dev/null +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/types/editors/AbstractColorPropertyEditor.java @@ -0,0 +1,57 @@ +package org.gephi.preview.types.editors; + +import java.awt.Color; +import java.beans.PropertyEditorSupport; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public abstract class AbstractColorPropertyEditor extends PropertyEditorSupport { + + public String getAsSerializableText() { + return getAsText(); + } + + protected String toText(String mode, Color color) { + if (color.getAlpha() < 255) { + return String.format( + "%s [%d,%d,%d,%d]", + mode.toLowerCase(), + color.getRed(), + color.getGreen(), + color.getBlue(), + color.getAlpha()); + } else { + return String.format( + "%s [%d,%d,%d]", + mode.toLowerCase(), + color.getRed(), + color.getGreen(), + color.getBlue()); + } + } + + protected Color toColor(String text) { + Pattern p = Pattern.compile("\\w+\\s*\\[\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,?(\\d+)?\\s*\\]"); + Matcher m = p.matcher(text); + if (m.lookingAt()) { + int r = Integer.valueOf(m.group(1)); + int g = Integer.valueOf(m.group(2)); + int b = Integer.valueOf(m.group(3)); + String alpha = m.group(4); + if (alpha != null) { + int a = Integer.valueOf(alpha); + return new Color(r, g, b, a); + } else { + return new Color(r, g, b); + } + } + return Color.BLACK; + } + + protected boolean matchColorMode(String s, String identifier) { + String regexp = String.format("\\s*%s\\s*", identifier); + Pattern p = Pattern.compile(regexp); + Matcher m = p.matcher(s); + return m.lookingAt(); + } +} diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/types/editors/BasicDependantColorPropertyEditor.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/types/editors/BasicDependantColorPropertyEditor.java new file mode 100644 index 0000000000..8a24ab3ba1 --- /dev/null +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/types/editors/BasicDependantColorPropertyEditor.java @@ -0,0 +1,93 @@ +/* +Copyright 2008-2011 Gephi +Authors : Mathieu Bastian, Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.preview.types.editors; + +import java.awt.Color; +import org.gephi.preview.types.DependantColor; + +/** + * Basic PropertyEditor for DependantColor. It is + * necessary to define this basic editor without CustomEditor support in order + * to deserialize DependantColor values from a project file when + * the full editor (from DesktopPreview module) is not available (when using the + * toolkit or when the Preview UI is not loaded yet). + * + * @author Mathieu Bastian + */ +public class BasicDependantColorPropertyEditor extends AbstractColorPropertyEditor { + + @Override + public String getAsText() { + return getAsSerializableText(); + } + + @Override + public String getAsSerializableText() { + DependantColor c = (DependantColor) getValue(); + if (c.getMode().equals(DependantColor.Mode.CUSTOM)) { + return toText(c.getMode().name(), c.getCustomColor() == null ? Color.BLACK : c.getCustomColor()); + } else { + return c.getMode().name().toLowerCase(); + } + } + + @Override + public void setAsText(String s) { + if (matchColorMode(s, DependantColor.Mode.CUSTOM.name().toLowerCase())) { + setValue(new DependantColor(toColor(s))); + } else if (matchColorMode(s, DependantColor.Mode.PARENT.name().toLowerCase())) { + setValue(new DependantColor(DependantColor.Mode.PARENT)); + } else if (matchColorMode(s, DependantColor.Mode.DARKER.name().toLowerCase())) { + setValue(new DependantColor(DependantColor.Mode.DARKER)); + } else if (matchColorMode(s, DependantColor.Mode.LIGHTER.name().toLowerCase())) { + setValue(new DependantColor(DependantColor.Mode.LIGHTER)); + } + } + + @Override + public boolean supportsCustomEditor() { + return false; + } + + +} diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/types/editors/BasicDependantOriginalColorPropertyEditor.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/types/editors/BasicDependantOriginalColorPropertyEditor.java new file mode 100644 index 0000000000..f374af1c42 --- /dev/null +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/types/editors/BasicDependantOriginalColorPropertyEditor.java @@ -0,0 +1,91 @@ +/* +Copyright 2008-2011 Gephi +Authors : Mathieu Bastian, Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.preview.types.editors; + +import java.awt.Color; +import java.util.Locale; +import org.gephi.preview.types.DependantOriginalColor; + +/** + * Basic PropertyEditor for DependantOriginalColor. It + * is necessary to define this basic editor without CustomEditor support in + * order to deserialize DependantOriginalColor values from a + * project file when the full editor (from DesktopPreview module) is not + * available (when using the toolkit or when the Preview UI is not loaded yet). + * + * @author Mathieu Bastian + */ +public class BasicDependantOriginalColorPropertyEditor extends AbstractColorPropertyEditor { + + @Override + public String getAsSerializableText() { + DependantOriginalColor c = (DependantOriginalColor) getValue(); + if (c.getMode().equals(DependantOriginalColor.Mode.CUSTOM)) { + return toText(c.getMode().name(), c.getCustomColor() == null ? Color.BLACK : c.getCustomColor()); + } else { + return c.getMode().name().toLowerCase(Locale.ROOT); + } + } + + @Override + public String getAsText() { + return getAsSerializableText(); + } + + @Override + public void setAsText(String s) { + + if (matchColorMode(s, DependantOriginalColor.Mode.CUSTOM.name().toLowerCase(Locale.ROOT))) { + setValue(new DependantOriginalColor(toColor(s))); + } else if (matchColorMode(s, DependantOriginalColor.Mode.ORIGINAL.name().toLowerCase(Locale.ROOT))) { + setValue(new DependantOriginalColor(DependantOriginalColor.Mode.ORIGINAL)); + } else if (matchColorMode(s, DependantOriginalColor.Mode.PARENT.name().toLowerCase(Locale.ROOT))) { + setValue(new DependantOriginalColor(DependantOriginalColor.Mode.PARENT)); + } + } + + @Override + public boolean supportsCustomEditor() { + return false; + } +} diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/types/editors/BasicEdgeColorPropertyEditor.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/types/editors/BasicEdgeColorPropertyEditor.java new file mode 100644 index 0000000000..770edcad02 --- /dev/null +++ b/modules/PreviewAPI/src/main/java/org/gephi/preview/types/editors/BasicEdgeColorPropertyEditor.java @@ -0,0 +1,94 @@ +/* +Copyright 2008-2011 Gephi +Authors : Mathieu Bastian, Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.preview.types.editors; + +import java.awt.Color; +import java.util.Locale; +import org.gephi.preview.types.EdgeColor; + +/** + * Basic PropertyEditor for EdgeColor. It is necessary + * to define this basic editor without CustomEditor support in order to + * deserialize EdgeColor values from a project file when the full + * editor (from DesktopPreview module) is not available (when using the toolkit + * or when the Preview UI is not loaded yet). + * + * @author Mathieu Bastian + */ +public class BasicEdgeColorPropertyEditor extends AbstractColorPropertyEditor { + + @Override + public String getAsSerializableText() { + EdgeColor c = (EdgeColor) getValue(); + if (c.getMode().equals(EdgeColor.Mode.CUSTOM)) { + return toText(c.getMode().name(), c.getCustomColor() == null ? Color.BLACK : c.getCustomColor()); + } else { + return c.getMode().name().toLowerCase(Locale.ROOT); + } + } + + @Override + public String getAsText() { + return getAsSerializableText(); + } + + @Override + public void setAsText(String s) { + if (matchColorMode(s, EdgeColor.Mode.CUSTOM.name().toLowerCase(Locale.ROOT))) { + setValue(new EdgeColor(toColor(s))); + } else if (matchColorMode(s, EdgeColor.Mode.MIXED.name().toLowerCase(Locale.ROOT))) { + setValue(new EdgeColor(EdgeColor.Mode.MIXED)); + } else if (matchColorMode(s, EdgeColor.Mode.ORIGINAL.name().toLowerCase(Locale.ROOT))) { + setValue(new EdgeColor(EdgeColor.Mode.ORIGINAL)); + } else if (matchColorMode(s, EdgeColor.Mode.SOURCE.name().toLowerCase(Locale.ROOT))) { + setValue(new EdgeColor(EdgeColor.Mode.SOURCE)); + } else if (matchColorMode(s, EdgeColor.Mode.TARGET.name().toLowerCase(Locale.ROOT))) { + setValue(new EdgeColor(EdgeColor.Mode.TARGET)); + } + } + + @Override + public boolean supportsCustomEditor() { + return false; + } +} diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/types/propertyeditors/BasicDependantColorPropertyEditor.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/types/propertyeditors/BasicDependantColorPropertyEditor.java deleted file mode 100644 index a54d0883fb..0000000000 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/types/propertyeditors/BasicDependantColorPropertyEditor.java +++ /dev/null @@ -1,104 +0,0 @@ -/* -Copyright 2008-2011 Gephi -Authors : Mathieu Bastian, Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.preview.types.propertyeditors; - -import java.awt.Color; -import java.beans.PropertyEditorSupport; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import org.gephi.preview.types.DependantColor; - -/** - * Basic PropertyEditor for DependantColor. - * It is necessary to define this basic editor without CustomEditor support in order to deserialize - * DependantColor values from a project file when the full editor (from DesktopPreview module) - * is not available (when using the toolkit or when the Preview UI is not loaded yet). - * @author Mathieu Bastian - */ -public class BasicDependantColorPropertyEditor extends PropertyEditorSupport { - - @Override - public String getAsText() { - DependantColor c = (DependantColor) getValue(); - if (c.getMode().equals(DependantColor.Mode.CUSTOM)) { - Color color = c.getCustomColor() == null ? Color.BLACK : c.getCustomColor(); - return String.format( - "%s [%d,%d,%d]", - c.getMode().name().toLowerCase(), - color.getRed(), - color.getGreen(), - color.getBlue()); - } else { - return c.getMode().name().toLowerCase(); - } - } - - @Override - public void setAsText(String s) { - - if (matchColorMode(s, DependantColor.Mode.CUSTOM.name().toLowerCase())) { - Pattern p = Pattern.compile("\\w+\\s*\\[\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\]"); - Matcher m = p.matcher(s); - if (m.lookingAt()) { - int r = Integer.valueOf(m.group(1)); - int g = Integer.valueOf(m.group(2)); - int b = Integer.valueOf(m.group(3)); - - setValue(new DependantColor(new Color(r, g, b))); - } - } else if (matchColorMode(s, DependantColor.Mode.PARENT.name().toLowerCase())) { - setValue(new DependantColor()); - } - } - - @Override - public boolean supportsCustomEditor() { - return false; - } - - private boolean matchColorMode(String s, String identifier) { - String regexp = String.format("\\s*%s\\s*", identifier); - Pattern p = Pattern.compile(regexp); - Matcher m = p.matcher(s); - return m.lookingAt(); - } -} diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/types/propertyeditors/BasicDependantOriginalColorPropertyEditor.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/types/propertyeditors/BasicDependantOriginalColorPropertyEditor.java deleted file mode 100644 index bfae341f87..0000000000 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/types/propertyeditors/BasicDependantOriginalColorPropertyEditor.java +++ /dev/null @@ -1,107 +0,0 @@ -/* -Copyright 2008-2011 Gephi -Authors : Mathieu Bastian, Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.preview.types.propertyeditors; - -import java.awt.Color; -import java.beans.PropertyEditorSupport; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import org.gephi.preview.types.DependantOriginalColor; - -/** - * Basic PropertyEditor for DependantOriginalColor. - * It is necessary to define this basic editor without CustomEditor support in order to deserialize - * DependantOriginalColor values from a project file when the full editor (from DesktopPreview module) - * is not available (when using the toolkit or when the Preview UI is not loaded yet). - * @author Mathieu Bastian - */ -public class BasicDependantOriginalColorPropertyEditor extends PropertyEditorSupport { - - @Override - public String getAsText() { - DependantOriginalColor c = (DependantOriginalColor) getValue(); - if (c.getMode().equals(DependantOriginalColor.Mode.CUSTOM)) { - Color color = c.getCustomColor() == null ? Color.BLACK : c.getCustomColor(); - return String.format( - "%s [%d,%d,%d]", - c.getMode().name().toLowerCase(), - color.getRed(), - color.getGreen(), - color.getBlue()); - } else { - return c.getMode().name().toLowerCase(); - } - - } - - @Override - public void setAsText(String s) { - - if (matchColorMode(s, DependantOriginalColor.Mode.CUSTOM.name().toLowerCase())) { - Pattern p = Pattern.compile("\\w+\\s*\\[\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\]"); - Matcher m = p.matcher(s); - if (m.lookingAt()) { - int r = Integer.valueOf(m.group(1)); - int g = Integer.valueOf(m.group(2)); - int b = Integer.valueOf(m.group(3)); - - setValue(new DependantOriginalColor(new Color(r, g, b))); - } - } else if (matchColorMode(s, DependantOriginalColor.Mode.ORIGINAL.name().toLowerCase())) { - setValue(new DependantOriginalColor(DependantOriginalColor.Mode.ORIGINAL)); - } else if (matchColorMode(s, DependantOriginalColor.Mode.PARENT.name().toLowerCase())) { - setValue(new DependantOriginalColor(DependantOriginalColor.Mode.PARENT)); - } - } - - @Override - public boolean supportsCustomEditor() { - return false; - } - - private boolean matchColorMode(String s, String identifier) { - String regexp = String.format("\\s*%s\\s*", identifier); - Pattern p = Pattern.compile(regexp); - Matcher m = p.matcher(s); - return m.lookingAt(); - } -} diff --git a/modules/PreviewAPI/src/main/java/org/gephi/preview/types/propertyeditors/BasicEdgeColorPropertyEditor.java b/modules/PreviewAPI/src/main/java/org/gephi/preview/types/propertyeditors/BasicEdgeColorPropertyEditor.java deleted file mode 100644 index 1e93f20c77..0000000000 --- a/modules/PreviewAPI/src/main/java/org/gephi/preview/types/propertyeditors/BasicEdgeColorPropertyEditor.java +++ /dev/null @@ -1,110 +0,0 @@ -/* -Copyright 2008-2011 Gephi -Authors : Mathieu Bastian, Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.preview.types.propertyeditors; - -import java.awt.Color; -import java.beans.PropertyEditorSupport; -import java.util.regex.Matcher; -import java.util.regex.Pattern; -import org.gephi.preview.types.EdgeColor; - -/** - * Basic PropertyEditor for EdgeColor. - * It is necessary to define this basic editor without CustomEditor support in order to deserialize - * EdgeColor values from a project file when the full editor (from DesktopPreview module) - * is not available (when using the toolkit or when the Preview UI is not loaded yet). - * @author Mathieu Bastian - */ -public class BasicEdgeColorPropertyEditor extends PropertyEditorSupport { - - @Override - public String getAsText() { - EdgeColor c = (EdgeColor) getValue(); - if (c.getMode().equals(EdgeColor.Mode.CUSTOM)) { - Color color = c.getCustomColor() == null ? Color.BLACK : c.getCustomColor(); - return String.format( - "%s [%d,%d,%d]", - c.getMode().name().toLowerCase(), - color.getRed(), - color.getGreen(), - color.getBlue()); - } else { - return c.getMode().name().toLowerCase(); - } - } - - @Override - public void setAsText(String s) { - - if (matchColorMode(s, EdgeColor.Mode.CUSTOM.name().toLowerCase())) { - Pattern p = Pattern.compile("\\w+\\s*\\[\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*\\]"); - Matcher m = p.matcher(s); - if (m.lookingAt()) { - int r = Integer.valueOf(m.group(1)); - int g = Integer.valueOf(m.group(2)); - int b = Integer.valueOf(m.group(3)); - - setValue(new EdgeColor(new Color(r, g, b))); - } - } else if (matchColorMode(s, EdgeColor.Mode.MIXED.name().toLowerCase())) { - setValue(new EdgeColor(EdgeColor.Mode.MIXED)); - } else if (matchColorMode(s, EdgeColor.Mode.ORIGINAL.name().toLowerCase())) { - setValue(new EdgeColor(EdgeColor.Mode.ORIGINAL)); - } else if (matchColorMode(s, EdgeColor.Mode.SOURCE.name().toLowerCase())) { - setValue(new EdgeColor(EdgeColor.Mode.SOURCE)); - } else if (matchColorMode(s, EdgeColor.Mode.TARGET.name().toLowerCase())) { - setValue(new EdgeColor(EdgeColor.Mode.TARGET)); - } - } - - @Override - public boolean supportsCustomEditor() { - return false; - } - - private boolean matchColorMode(String s, String identifier) { - String regexp = String.format("\\s*%s\\s*", identifier); - Pattern p = Pattern.compile(regexp); - Matcher m = p.matcher(s); - return m.lookingAt(); - } -} diff --git a/modules/PreviewAPI/src/main/nbm/manifest.mf b/modules/PreviewAPI/src/main/nbm/manifest.mf index 499bc2a04b..085b5d744d 100644 --- a/modules/PreviewAPI/src/main/nbm/manifest.mf +++ b/modules/PreviewAPI/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/preview/api/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi Core +OpenIDE-Module-Name: Preview API diff --git a/modules/PreviewAPI/src/main/nbm/module.xml b/modules/PreviewAPI/src/main/nbm/module.xml deleted file mode 100644 index f5447bec6b..0000000000 --- a/modules/PreviewAPI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_ar.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_ca.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_ca.properties new file mode 100644 index 0000000000..094fb25427 --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_ca.properties @@ -0,0 +1 @@ +PDFRenderTargetImpl.font.registration=Registering system fonts diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_cs.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_cs.properties index d2b8ba3e0e..3990241d63 100644 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_cs.properties +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_cs.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-18 11\:38+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -PDFRenderTargetImpl.font.registration=Zji\u0161'tov\u00e1n\u00ed typ\u016f p\u00edsma v syst\u00e9mu +PDFRenderTargetImpl.font.registration = Zji\u0161'tovαnν typ\u016f pνsma v systιmu diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_de.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_de.properties new file mode 100644 index 0000000000..e8d985a97a --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_de.properties @@ -0,0 +1 @@ +PDFRenderTargetImpl.font.registration = Systemschriftarten registrieren diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_es.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_es.properties index b32751e91c..be763efb0b 100644 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_es.properties +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_es.properties @@ -1,10 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 22\:00+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -PDFRenderTargetImpl.font.registration=Registrando fuentes del sistema +PDFRenderTargetImpl.font.registration = Registrando fuentes del sistema diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_fr.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_fr.properties index 3730649b57..f55c38755d 100644 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_fr.properties +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_fr.properties @@ -1,10 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-21 21\:31+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -PDFRenderTargetImpl.font.registration=Enregistrement des polices syst\u00e8me. +PDFRenderTargetImpl.font.registration = Enregistrement des polices systθme. diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_he.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_he.properties new file mode 100644 index 0000000000..094fb25427 --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_he.properties @@ -0,0 +1 @@ +PDFRenderTargetImpl.font.registration=Registering system fonts diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_hu.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_hu.properties new file mode 100644 index 0000000000..6d54a941c0 --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_hu.properties @@ -0,0 +1,3 @@ + + +PDFRenderTargetImpl.font.registration=Rendszer bet\u0171t\u00EDpusok regisztr\u00E1l\u00E1sa diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_it.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_it.properties new file mode 100644 index 0000000000..3dbcea513c --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_it.properties @@ -0,0 +1 @@ +PDFRenderTargetImpl.font.registration=Registrazione dei font di sistema diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_ja.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_ja.properties index 171c373900..2d33347d72 100644 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_ja.properties +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_ja.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 09\:41+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -PDFRenderTargetImpl.font.registration=\u30b7\u30b9\u30c6\u30e0\u30d5\u30a9\u30f3\u30c8\u3092\u767b\u9332 +PDFRenderTargetImpl.font.registration = \u30b7\u30b9\u30c6\u30e0\u30d5\u30a9\u30f3\u30c8\u3092\u767b\u9332 diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_ko.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_ko.properties new file mode 100644 index 0000000000..7f8a4e1892 --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_ko.properties @@ -0,0 +1,3 @@ + + +PDFRenderTargetImpl.font.registration=\uC2DC\uC2A4\uD15C \uAE00\uAF34 \uB4F1\uB85D diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_nl.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_nl.properties new file mode 100644 index 0000000000..094fb25427 --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_nl.properties @@ -0,0 +1 @@ +PDFRenderTargetImpl.font.registration=Registering system fonts diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_pt_BR.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_pt_BR.properties index 73fed10d9a..bed7864bdd 100644 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_pt_BR.properties +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_pt_BR.properties @@ -1,10 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -# C\u00e9lio Faria Jr. , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 12\:03+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -PDFRenderTargetImpl.font.registration=Registrando fontes do sistema +PDFRenderTargetImpl.font.registration = Registrando fontes do sistema diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_ro.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_ro.properties new file mode 100644 index 0000000000..b493373ea7 --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_ro.properties @@ -0,0 +1,3 @@ + + +PDFRenderTargetImpl.font.registration=Se \u00EEnregistreaz\u0103 fonturile de sistem diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_ru.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_ru.properties index 46b551821d..aec16acb92 100644 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_ru.properties +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_ru.properties @@ -1,9 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-03 05\:37+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -PDFRenderTargetImpl.font.registration=\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0448\u0440\u0438\u0444\u0442\u043e\u0432 +PDFRenderTargetImpl.font.registration = \u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0448\u0440\u0438\u0444\u0442\u043e\u0432 diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_th.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_tr.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_tr.properties new file mode 100644 index 0000000000..094fb25427 --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_tr.properties @@ -0,0 +1 @@ +PDFRenderTargetImpl.font.registration=Registering system fonts diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_uk.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_uk.properties new file mode 100644 index 0000000000..587824e482 --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_uk.properties @@ -0,0 +1 @@ +PDFRenderTargetImpl.font.registration=\u0420\u0435\u0454\u0441\u0442\u0440\u0430\u0446\u0456\u044F \u0441\u0438\u0441\u0442\u0435\u043C\u043D\u0438\u0445 \u0448\u0440\u0438\u0444\u0442\u0456\u0432 diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_zh_CN.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_zh_CN.properties index ea664e91ff..8da543f940 100644 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_zh_CN.properties +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_zh_CN.properties @@ -1,8 +1 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:08+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -PDFRenderTargetImpl.font.registration=\u6ce8\u518c\u7cfb\u7edf\u5b57\u4f53 +PDFRenderTargetImpl.font.registration = \u6ce8\u518c\u7cfb\u7edf\u5b57\u4f53 diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_zh_TW.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_zh_TW.properties new file mode 100644 index 0000000000..094fb25427 --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/Bundle_zh_TW.properties @@ -0,0 +1 @@ +PDFRenderTargetImpl.font.registration=Registering system fonts diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle.properties index affecd3630..89463d0963 100644 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle.properties +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle.properties @@ -1,7 +1,4 @@ -OpenIDE-Module-Display-Category=Gephi Core -OpenIDE-Module-Long-Description=\ - API/SPI for building the graph preview -OpenIDE-Module-Name=Preview API +OpenIDE-Module-Long-Description=API/SPI for building the graph preview OpenIDE-Module-Short-Description=API/SPI for building the graph preview PreviewProperty.Category.Nodes = Nodes diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_ar.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_ca.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_ca.properties new file mode 100644 index 0000000000..733cf5ec90 --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_ca.properties @@ -0,0 +1,7 @@ +OpenIDE-Module-Long-Description=API/SPI per generar la previsualitzaciσ del graf +OpenIDE-Module-Short-Description=API/SPI per generar la previsualitzaciσ del graf +PreviewProperty.Category.Nodes=Nodes +PreviewProperty.Category.Edges=Arestes +PreviewProperty.Category.NodeLabels=Etiquetes dels nodes +PreviewProperty.Category.EdgeLabels=Etiquetes de les arestes +PreviewProperty.Category.EdgeArrows=Fletxes de les arestes diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_cs.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_cs.properties index bef1f39ab5..fd91ef61a1 100644 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_cs.properties +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_cs.properties @@ -1,21 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-21 20\:35+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=API/SPI pro sestaven\u00ed n\u00e1hledu grafu - -OpenIDE-Module-Short-Description=API/SPI pro sestaven\u00ed n\u00e1hledu grafu - -PreviewProperty.Category.Nodes=Uzle - -PreviewProperty.Category.Edges=Hrany - -PreviewProperty.Category.NodeLabels=\u0160t\u00edtky uzlu - -PreviewProperty.Category.EdgeLabels=\u0160t\u00edtky hrany - -PreviewProperty.Category.EdgeArrows=\u0160ipky hran +OpenIDE-Module-Long-Description=API/SPI pro sestavenν nαhledu grafu +OpenIDE-Module-Short-Description=API/SPI pro sestavenν nαhledu grafu + +PreviewProperty.Category.Nodes = Uzle +PreviewProperty.Category.Edges = Hrany +PreviewProperty.Category.NodeLabels = Jmenovky uzlu +PreviewProperty.Category.EdgeLabels = Jmenovky hrany +PreviewProperty.Category.EdgeArrows = \u0160ipky hran diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_de.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_de.properties new file mode 100644 index 0000000000..16f9e826ba --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_de.properties @@ -0,0 +1,8 @@ +OpenIDE-Module-Long-Description=API/SPI zur Erstellung der Graphenvorschau +OpenIDE-Module-Short-Description=API/SPI zur Erstellung der Graphenvorschau + +PreviewProperty.Category.Nodes = Knoten +PreviewProperty.Category.Edges = Kanten +PreviewProperty.Category.NodeLabels = Knotenbeschriftung +PreviewProperty.Category.EdgeLabels = Kantenbeschriftung +PreviewProperty.Category.EdgeArrows = Kantenpfeile diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_es.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_es.properties index eb517f1bd6..0682f685c7 100644 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_es.properties +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_es.properties @@ -1,22 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 21\:46+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=API para la construcci\u00f3n de la estructura del grafo de previsualizaci\u00f3n - -OpenIDE-Module-Short-Description=API para la construcci\u00f3n de la estructura del grafo de previsualizaci\u00f3n - -PreviewProperty.Category.Nodes=Nodos - -PreviewProperty.Category.Edges=Aristas - -PreviewProperty.Category.NodeLabels=Etiquetas de nodos - -PreviewProperty.Category.EdgeLabels=Etiquetas de aristas - -PreviewProperty.Category.EdgeArrows=Flechas de aristas +OpenIDE-Module-Long-Description=API para la construcciσn de la estructura del grafo de previsualizaciσn +OpenIDE-Module-Short-Description=API para la construcciσn de la estructura del grafo de previsualizaciσn + +PreviewProperty.Category.Nodes = Nodos +PreviewProperty.Category.Edges = Aristas +PreviewProperty.Category.NodeLabels = Etiquetas de nodos +PreviewProperty.Category.EdgeLabels = Etiquetas de aristas +PreviewProperty.Category.EdgeArrows = Flechas de aristas diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_fr.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_fr.properties index 7660921c47..e14495bf29 100644 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_fr.properties +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_fr.properties @@ -1,22 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 11\:32+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API de construction de la structure de pr\u00e9visualisation du graphe - -OpenIDE-Module-Short-Description=API de construction de la structure de pr\u00e9visualisation du graphe - -PreviewProperty.Category.Nodes=Noeuds - -PreviewProperty.Category.Edges=Liens - -PreviewProperty.Category.NodeLabels=Labels de noeud - -PreviewProperty.Category.EdgeLabels=Labels de lien - -PreviewProperty.Category.EdgeArrows=Fl\u00e8ches de lien +OpenIDE-Module-Long-Description=API de construction de la structure de prιvisualisation du graphe +OpenIDE-Module-Short-Description=API de construction de la structure de prιvisualisation du graphe + +PreviewProperty.Category.Nodes = Noeuds +PreviewProperty.Category.Edges = Liens +PreviewProperty.Category.NodeLabels = Labels de noeud +PreviewProperty.Category.EdgeLabels = Labels de lien +PreviewProperty.Category.EdgeArrows = Flθches de lien diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_he.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_he.properties new file mode 100644 index 0000000000..2dcd886afb --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_he.properties @@ -0,0 +1,7 @@ +OpenIDE-Module-Long-Description=API/SPI for building the graph preview +OpenIDE-Module-Short-Description=API/SPI for building the graph preview +PreviewProperty.Category.Nodes=Nodes +PreviewProperty.Category.Edges=Edges +PreviewProperty.Category.NodeLabels=Node Labels +PreviewProperty.Category.EdgeLabels=Edge Labels +PreviewProperty.Category.EdgeArrows=Edge Arrows diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_hu.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_hu.properties new file mode 100644 index 0000000000..442f4b7de3 --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_hu.properties @@ -0,0 +1,9 @@ + + +PreviewProperty.Category.EdgeArrows=\u00C9l nyilak +PreviewProperty.Category.Edges=\u00C9lek +OpenIDE-Module-Short-Description=API/SPI a grafikon el\u0151n\u00E9zet\u00E9nek elk\u00E9sz\u00EDt\u00E9s\u00E9hez +OpenIDE-Module-Long-Description=API/SPI a grafikon el\u0151n\u00E9zet\u00E9nek elk\u00E9sz\u00EDt\u00E9s\u00E9hez +PreviewProperty.Category.Nodes=Csom\u00F3pontok +PreviewProperty.Category.EdgeLabels=\u00C9lc\u00EDmk\u00E9k +PreviewProperty.Category.NodeLabels=Csom\u00F3pont c\u00EDmk\u00E9k diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_it.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_it.properties new file mode 100644 index 0000000000..b40cd2a9ac --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_it.properties @@ -0,0 +1,7 @@ +OpenIDE-Module-Long-Description=API/SPI per creare la preview del grafo +OpenIDE-Module-Short-Description=API/SPI for building the graph preview +PreviewProperty.Category.Nodes=Nodi +PreviewProperty.Category.Edges=Archi +PreviewProperty.Category.NodeLabels=Node Labels +PreviewProperty.Category.EdgeLabels=Edge Labels +PreviewProperty.Category.EdgeArrows=Edge Arrows diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_ja.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_ja.properties index a50e9dc165..0325a003f4 100644 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_ja.properties +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_ja.properties @@ -1,21 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-23 09\:21+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u30b0\u30e9\u30d5\u306e\u30d7\u30ec\u30d3\u30e5\u30fc\u306e\u69cb\u9020\u3092\u69cb\u7bc9\u3059\u308b\u305f\u3081\u306eAPI - -OpenIDE-Module-Short-Description=\u30b0\u30e9\u30d5\u306e\u30d7\u30ec\u30d3\u30e5\u30fc\u306e\u69cb\u9020\u3092\u69cb\u7bc9\u3059\u308b\u305f\u3081\u306eAPI - -PreviewProperty.Category.Nodes=\u30ce\u30fc\u30c9 - -PreviewProperty.Category.Edges=\u8fba - -PreviewProperty.Category.NodeLabels=\u30ce\u30fc\u30c9\u30e9\u30d9\u30eb - -PreviewProperty.Category.EdgeLabels=\u8fba\u30e9\u30d9\u30eb - -PreviewProperty.Category.EdgeArrows=\u8fba\u77e2\u5370 +OpenIDE-Module-Long-Description=\u30b0\u30e9\u30d5\u306e\u30d7\u30ec\u30d3\u30e5\u30fc\u306e\u69cb\u9020\u3092\u69cb\u7bc9\u3059\u308b\u305f\u3081\u306eAPI +OpenIDE-Module-Short-Description=\u30b0\u30e9\u30d5\u306e\u30d7\u30ec\u30d3\u30e5\u30fc\u306e\u69cb\u9020\u3092\u69cb\u7bc9\u3059\u308b\u305f\u3081\u306eAPI + +PreviewProperty.Category.Nodes = \u30ce\u30fc\u30c9 +PreviewProperty.Category.Edges = \u8fba +PreviewProperty.Category.NodeLabels = \u30ce\u30fc\u30c9\u30e9\u30d9\u30eb +PreviewProperty.Category.EdgeLabels = \u8fba\u30e9\u30d9\u30eb +PreviewProperty.Category.EdgeArrows = \u8fba\u77e2\u5370 diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_ko.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_ko.properties new file mode 100644 index 0000000000..17026933d5 --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_ko.properties @@ -0,0 +1,9 @@ + + +PreviewProperty.Category.EdgeArrows=\uC5E3\uC9C0 \uD654\uC0B4\uD45C +PreviewProperty.Category.Edges=\uC5E3\uC9C0 +OpenIDE-Module-Short-Description=\uADF8\uB798\uD504 \uBBF8\uB9AC\uBCF4\uAE30 \uC791\uC131\uC744 \uC704\uD55C API/SPI +OpenIDE-Module-Long-Description=\uADF8\uB798\uD504 \uBBF8\uB9AC\uBCF4\uAE30 \uC791\uC131\uC744 \uC704\uD55C API/SPI +PreviewProperty.Category.Nodes=\uB178\uB4DC +PreviewProperty.Category.EdgeLabels=\uC5E3\uC9C0 \uB77C\uBCA8 +PreviewProperty.Category.NodeLabels=\uB178\uB4DC \uB77C\uBCA8 diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_nl.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_nl.properties new file mode 100644 index 0000000000..93bd570d9e --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_nl.properties @@ -0,0 +1,7 @@ +OpenIDE-Module-Long-Description=API/SPI for building the graph preview +OpenIDE-Module-Short-Description=API/SPI for building the graph preview +PreviewProperty.Category.Nodes=Knopen +PreviewProperty.Category.Edges=Verbindingen +PreviewProperty.Category.NodeLabels=Knooplabels +PreviewProperty.Category.EdgeLabels=Edge Labels +PreviewProperty.Category.EdgeArrows=Edge Arrows diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_pt_BR.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_pt_BR.properties index c71174e90c..56d5abdfbb 100644 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_pt_BR.properties +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_pt_BR.properties @@ -1,22 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -# C\u00e9lio Faria Jr. , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 12\:04+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API de constru\u00e7\u00e3o da estrutura de visualiza\u00e7\u00e3o do grafo - -OpenIDE-Module-Short-Description=API de constru\u00e7\u00e3o da estrutura de visualiza\u00e7\u00e3o do grafo - -PreviewProperty.Category.Nodes=N\u00f3s - -PreviewProperty.Category.Edges=Arestas - -PreviewProperty.Category.NodeLabels=R\u00f3tulos de n\u00f3 - -PreviewProperty.Category.EdgeLabels=R\u00f3tulos de aresta - -PreviewProperty.Category.EdgeArrows=Setas de aresta +OpenIDE-Module-Long-Description=API de construηγo da estrutura de visualizaηγo do grafo +OpenIDE-Module-Short-Description=API de construηγo da estrutura de visualizaηγo do grafo + +PreviewProperty.Category.Nodes = Nσs +PreviewProperty.Category.Edges = Arestas +PreviewProperty.Category.NodeLabels = Rσtulos de nσ +PreviewProperty.Category.EdgeLabels = Rσtulos de aresta +PreviewProperty.Category.EdgeArrows = Setas de aresta diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_ro.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_ro.properties new file mode 100644 index 0000000000..7cc73c24e9 --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_ro.properties @@ -0,0 +1,9 @@ + + +OpenIDE-Module-Long-Description=API/SPI pentru construirea previzualiz\u0103rii grafului +OpenIDE-Module-Short-Description=API/SPI pentru construirea previzualiz\u0103rii grafului +PreviewProperty.Category.Nodes=Noduri +PreviewProperty.Category.EdgeLabels=Etichete de muchii +PreviewProperty.Category.EdgeArrows=S\u0103ge\u021Bi de muchii +PreviewProperty.Category.Edges=Muchii +PreviewProperty.Category.NodeLabels=Etichete de noduri diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_ru.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_ru.properties index ae3bf392ac..7ede5f37b4 100644 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_ru.properties +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_ru.properties @@ -1,21 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-04 06\:35+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=API \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0433\u0440\u0430\u0444\u0430 - -OpenIDE-Module-Short-Description=API \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0433\u0440\u0430\u0444\u0430 - -PreviewProperty.Category.Nodes=\u0423\u0437\u043b\u044b - -PreviewProperty.Category.Edges=\u0420\u0435\u0431\u0440\u0430 - -PreviewProperty.Category.NodeLabels=\u041c\u0435\u0442\u043a\u0438 \u0443\u0437\u043b\u043e\u0432 - -PreviewProperty.Category.EdgeLabels=\u041c\u0435\u0442\u043a\u0438 \u0440\u0435\u0431\u0435\u0440 - -PreviewProperty.Category.EdgeArrows=\u0421\u0442\u0440\u0435\u043b\u043a\u0438 \u0440\u0435\u0431\u0435\u0440 +OpenIDE-Module-Long-Description=API \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0433\u0440\u0430\u0444\u0430 +OpenIDE-Module-Short-Description=API \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0433\u0440\u0430\u0444\u0430 + +PreviewProperty.Category.Nodes = \u0423\u0437\u043b\u044b +PreviewProperty.Category.Edges = \u0420\u0435\u0431\u0440\u0430 +PreviewProperty.Category.NodeLabels = \u041c\u0435\u0442\u043a\u0438 \u0443\u0437\u043b\u043e\u0432 +PreviewProperty.Category.EdgeLabels = \u041c\u0435\u0442\u043a\u0438 \u0440\u0435\u0431\u0435\u0440 +PreviewProperty.Category.EdgeArrows = \u0421\u0442\u0440\u0435\u043b\u043a\u0438 \u0440\u0435\u0431\u0435\u0440 diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_th.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_tr.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_tr.properties new file mode 100644 index 0000000000..2dcd886afb --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_tr.properties @@ -0,0 +1,7 @@ +OpenIDE-Module-Long-Description=API/SPI for building the graph preview +OpenIDE-Module-Short-Description=API/SPI for building the graph preview +PreviewProperty.Category.Nodes=Nodes +PreviewProperty.Category.Edges=Edges +PreviewProperty.Category.NodeLabels=Node Labels +PreviewProperty.Category.EdgeLabels=Edge Labels +PreviewProperty.Category.EdgeArrows=Edge Arrows diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_uk.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_uk.properties new file mode 100644 index 0000000000..dbb6f2b2d6 --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_uk.properties @@ -0,0 +1,7 @@ +PreviewProperty.Category.Edges=\u041A\u0440\u0430\u0457 +PreviewProperty.Category.Nodes=\u0412\u0443\u0437\u043B\u0438 +OpenIDE-Module-Long-Description=API/SPI \u0434\u043B\u044F \u0441\u0442\u0432\u043E\u0440\u0435\u043D\u043D\u044F \u043F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u044C\u043E\u0433\u043E \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u0434\u0443 \u0433\u0440\u0430\u0444\u0456\u043A\u0430 +OpenIDE-Module-Short-Description=API/SPI \u0434\u043B\u044F \u0441\u0442\u0432\u043E\u0440\u0435\u043D\u043D\u044F \u043F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u044C\u043E\u0433\u043E \u043F\u0435\u0440\u0435\u0433\u043B\u044F\u0434\u0443 \u0433\u0440\u0430\u0444\u0456\u043A\u0430 +PreviewProperty.Category.EdgeLabels=\u041A\u0440\u0430\u0439\u043E\u0432\u0456 \u0435\u0442\u0438\u043A\u0435\u0442\u043A\u0438 +PreviewProperty.Category.EdgeArrows=\u041A\u0440\u0430\u0439\u043E\u0432\u0456 \u0441\u0442\u0440\u0456\u043B\u043A\u0438 +PreviewProperty.Category.NodeLabels=\u041C\u0456\u0442\u043A\u0438 \u0432\u0443\u0437\u043B\u0456\u0432 diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_zh_CN.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_zh_CN.properties index 13c08e949e..4a873ac055 100644 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_zh_CN.properties +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_zh_CN.properties @@ -1,20 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:09+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u521b\u5efa\u56fe\u5f62\u9884\u89c8\u7684\u5e94\u7528\u7a0b\u5e8f\u754c\u9762/\u5355\u4e2a\u7a0b\u5e8f\u5b9e\u73b0 - -OpenIDE-Module-Short-Description=\u521b\u5efa\u56fe\u5f62\u9884\u89c8\u7684\u5e94\u7528\u7a0b\u5e8f\u754c\u9762/\u5355\u4e2a\u7a0b\u5e8f\u5b9e\u73b0 - -PreviewProperty.Category.Nodes=\u8282\u70b9 - -PreviewProperty.Category.Edges=\u8fb9 - -PreviewProperty.Category.NodeLabels=\u8282\u70b9\u6807\u7b7e - -PreviewProperty.Category.EdgeLabels=\u8fb9\u6807\u7b7e - -PreviewProperty.Category.EdgeArrows=\u8fb9\u7bad\u5934 +OpenIDE-Module-Long-Description=\u521b\u5efa\u56fe\u5f62\u9884\u89c8\u7684\u5e94\u7528\u7a0b\u5e8f\u754c\u9762/\u5355\u4e2a\u7a0b\u5e8f\u5b9e\u73b0 +OpenIDE-Module-Short-Description=\u521b\u5efa\u56fe\u5f62\u9884\u89c8\u7684\u5e94\u7528\u7a0b\u5e8f\u754c\u9762/\u5355\u4e2a\u7a0b\u5e8f\u5b9e\u73b0 + +PreviewProperty.Category.Nodes = \u8282\u70b9 +PreviewProperty.Category.Edges = \u8fb9 +PreviewProperty.Category.NodeLabels = \u8282\u70b9\u6807\u7b7e +PreviewProperty.Category.EdgeLabels = \u8fb9\u6807\u7b7e +PreviewProperty.Category.EdgeArrows = \u8fb9\u7bad\u5934 diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_zh_TW.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_zh_TW.properties new file mode 100644 index 0000000000..cf32f1cf3c --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/Bundle_zh_TW.properties @@ -0,0 +1,7 @@ +OpenIDE-Module-Long-Description=API/SPI for building the graph preview +OpenIDE-Module-Short-Description=API/SPI for building the graph preview +PreviewProperty.Category.Nodes=\u7bc0\u9ede +PreviewProperty.Category.Edges=\u9023\u7d50 +PreviewProperty.Category.NodeLabels=Node Labels +PreviewProperty.Category.EdgeLabels=Edge Labels +PreviewProperty.Category.EdgeArrows=Edge Arrows diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/cs.po b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/cs.po deleted file mode 100644 index 46a62c77a0..0000000000 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/cs.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-21 20:35+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI pro sestavenΓ­ nΓ‘hledu grafu" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI pro sestavenΓ­ nΓ‘hledu grafu" - -msgid "PreviewProperty.Category.Nodes" -msgstr "Uzle" - -msgid "PreviewProperty.Category.Edges" -msgstr "Hrany" - -msgid "PreviewProperty.Category.NodeLabels" -msgstr "Ε tΓ­tky uzlu" - -msgid "PreviewProperty.Category.EdgeLabels" -msgstr "Ε tΓ­tky hrany" - -msgid "PreviewProperty.Category.EdgeArrows" -msgstr "Ε ipky hran" diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/es.po b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/es.po deleted file mode 100644 index c6ad2c9347..0000000000 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/es.po +++ /dev/null @@ -1,41 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 21:46+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API para la construcciΓ³n de la estructura del grafo de previsualizaciΓ³n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API para la construcciΓ³n de la estructura del grafo de previsualizaciΓ³n" - -msgid "PreviewProperty.Category.Nodes" -msgstr "Nodos" - -msgid "PreviewProperty.Category.Edges" -msgstr "Aristas" - -msgid "PreviewProperty.Category.NodeLabels" -msgstr "Etiquetas de nodos" - -msgid "PreviewProperty.Category.EdgeLabels" -msgstr "Etiquetas de aristas" - -msgid "PreviewProperty.Category.EdgeArrows" -msgstr "Flechas de aristas" diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/fr.po b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/fr.po deleted file mode 100644 index d81507a085..0000000000 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/fr.po +++ /dev/null @@ -1,41 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 11:32+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API de construction de la structure de prΓ©visualisation du graphe" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API de construction de la structure de prΓ©visualisation du graphe" - -msgid "PreviewProperty.Category.Nodes" -msgstr "Noeuds" - -msgid "PreviewProperty.Category.Edges" -msgstr "Liens" - -msgid "PreviewProperty.Category.NodeLabels" -msgstr "Labels de noeud" - -msgid "PreviewProperty.Category.EdgeLabels" -msgstr "Labels de lien" - -msgid "PreviewProperty.Category.EdgeArrows" -msgstr "FlΓ¨ches de lien" diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/ja.po b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/ja.po deleted file mode 100644 index 34194799a6..0000000000 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/ja.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-23 09:21+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "グラフγγƒ—レビγƒ₯γƒΌγζ§‹ι€ γ‚’ζ§‹η―‰γ™γ‚‹γŸγ‚γAPI" - -msgid "OpenIDE-Module-Short-Description" -msgstr "グラフγγƒ—レビγƒ₯γƒΌγζ§‹ι€ γ‚’ζ§‹η―‰γ™γ‚‹γŸγ‚γAPI" - -msgid "PreviewProperty.Category.Nodes" -msgstr "γƒŽγƒΌγƒ‰" - -msgid "PreviewProperty.Category.Edges" -msgstr "θΎΊ" - -msgid "PreviewProperty.Category.NodeLabels" -msgstr "γƒŽγƒΌγƒ‰γƒ©γƒ™γƒ«" - -msgid "PreviewProperty.Category.EdgeLabels" -msgstr "辺ラベル" - -msgid "PreviewProperty.Category.EdgeArrows" -msgstr "辺矒印" diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/org-gephi-preview-api.pot b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/org-gephi-preview-api.pot deleted file mode 100644 index ff39b99032..0000000000 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/org-gephi-preview-api.pot +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI for building the graph preview" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI for building the graph preview" - -msgid "PreviewProperty.Category.Nodes" -msgstr "Nodes" - -msgid "PreviewProperty.Category.Edges" -msgstr "Edges" - -msgid "PreviewProperty.Category.NodeLabels" -msgstr "Node Labels" - -msgid "PreviewProperty.Category.EdgeLabels" -msgstr "Edge Labels" - -msgid "PreviewProperty.Category.EdgeArrows" -msgstr "Edge Arrows" diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/package.html b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/package.html index cbac15a261..5bd6bf10a3 100644 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/package.html +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/package.html @@ -1,20 +1,25 @@ - - - - API for Preview rendering. -

      - This API hosts preview properties, items and renderers to control - preview displays. Preview is using the current Graph to build a set - of visual items. Items have a generic data container and are built - within Item Builders implementations. Renderers are stateless - singletons which renders items to a render target and have a list of - fixed properties. RenderTarget is the graphic container: - Processing, PDF or SVG. -

      -

      - The Preview is highly customizable and allows any plug-in to implement or - override existing renderers or item builders. Consult the SPI package - for more details. -

      - - + + + + org.gephi.preview.api + + +

      + API for Preview rendering. +

      +

      + This API hosts preview properties, items and renderers to control + preview displays. Preview is using the current Graph to build a set + of visual items. Items have a generic data container and are built + within Item Builders implementations. Renderers are stateless + singletons which renders items to a render target and have a list of + fixed properties. RenderTarget is the graphic container: + Java2D, PDF or SVG. +

      +

      + The Preview is highly customizable and allows any plug-in to implement or + override existing renderers or item builders. Consult the SPI package + for more details. +

      + + diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/pt_BR.po b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/pt_BR.po deleted file mode 100644 index 6d41c57299..0000000000 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/pt_BR.po +++ /dev/null @@ -1,41 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -# CΓ©lio Faria Jr. , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 12:04+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API de construΓ§Γ£o da estrutura de visualizaΓ§Γ£o do grafo" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API de construΓ§Γ£o da estrutura de visualizaΓ§Γ£o do grafo" - -msgid "PreviewProperty.Category.Nodes" -msgstr "NΓ³s" - -msgid "PreviewProperty.Category.Edges" -msgstr "Arestas" - -msgid "PreviewProperty.Category.NodeLabels" -msgstr "RΓ³tulos de nΓ³" - -msgid "PreviewProperty.Category.EdgeLabels" -msgstr "RΓ³tulos de aresta" - -msgid "PreviewProperty.Category.EdgeArrows" -msgstr "Setas de aresta" diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/ru.po b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/ru.po deleted file mode 100644 index dc223264c3..0000000000 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/ru.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-04 06:35+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API для построСния прСдпросмотра Π³Ρ€Π°Ρ„Π°" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API для построСния прСдпросмотра Π³Ρ€Π°Ρ„Π°" - -msgid "PreviewProperty.Category.Nodes" -msgstr "Π£Π·Π»Ρ‹" - -msgid "PreviewProperty.Category.Edges" -msgstr "Π Π΅Π±Ρ€Π°" - -msgid "PreviewProperty.Category.NodeLabels" -msgstr "ΠœΠ΅Ρ‚ΠΊΠΈ ΡƒΠ·Π»ΠΎΠ²" - -msgid "PreviewProperty.Category.EdgeLabels" -msgstr "ΠœΠ΅Ρ‚ΠΊΠΈ Ρ€Π΅Π±Π΅Ρ€" - -msgid "PreviewProperty.Category.EdgeArrows" -msgstr "Π‘Ρ‚Ρ€Π΅Π»ΠΊΠΈ Ρ€Π΅Π±Π΅Ρ€" diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/zh_CN.po b/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/zh_CN.po deleted file mode 100644 index 9a980da96e..0000000000 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/api/zh_CN.po +++ /dev/null @@ -1,39 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:09+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "εˆ›ε»Ίε›Ύε½’ι’„θ§ˆηš„εΊ”η”¨η¨‹εΊη•Œι’/单δΈͺ程序εžηް" - -msgid "OpenIDE-Module-Short-Description" -msgstr "εˆ›ε»Ίε›Ύε½’ι’„θ§ˆηš„εΊ”η”¨η¨‹εΊη•Œι’/单δΈͺ程序εžηް" - -msgid "PreviewProperty.Category.Nodes" -msgstr "θŠ‚η‚Ή" - -msgid "PreviewProperty.Category.Edges" -msgstr "θΎΉ" - -msgid "PreviewProperty.Category.NodeLabels" -msgstr "θŠ‚η‚Ήζ ‡η­Ύ" - -msgid "PreviewProperty.Category.EdgeLabels" -msgstr "θΎΉζ ‡η­Ύ" - -msgid "PreviewProperty.Category.EdgeArrows" -msgstr "θΎΉη­ε€΄" diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/cs.po b/modules/PreviewAPI/src/main/resources/org/gephi/preview/cs.po deleted file mode 100644 index 004581f0c3..0000000000 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/cs.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-18 11:38+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "PDFRenderTargetImpl.font.registration" -msgstr "ZjiΕ‘'tovΓ‘nΓ­ typΕ― pΓ­sma v systΓ©mu" diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/es.po b/modules/PreviewAPI/src/main/resources/org/gephi/preview/es.po deleted file mode 100644 index d8e7c75813..0000000000 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/es.po +++ /dev/null @@ -1,23 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 22:00+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "PDFRenderTargetImpl.font.registration" -msgstr "Registrando fuentes del sistema" diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/fonts/LiberationSans.ttf b/modules/PreviewAPI/src/main/resources/org/gephi/preview/fonts/LiberationSans.ttf deleted file mode 100644 index 59d2e251b0..0000000000 Binary files a/modules/PreviewAPI/src/main/resources/org/gephi/preview/fonts/LiberationSans.ttf and /dev/null differ diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/fr.po b/modules/PreviewAPI/src/main/resources/org/gephi/preview/fr.po deleted file mode 100644 index b7a22bb655..0000000000 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/fr.po +++ /dev/null @@ -1,23 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-21 21:31+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "PDFRenderTargetImpl.font.registration" -msgstr "Enregistrement des polices systΓ¨me." diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/ja.po b/modules/PreviewAPI/src/main/resources/org/gephi/preview/ja.po deleted file mode 100644 index 8cb4b4b506..0000000000 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/ja.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 09:41+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "PDFRenderTargetImpl.font.registration" -msgstr "γ‚·γ‚Ήγƒ†γƒ γƒ•γ‚©γƒ³γƒˆγ‚’η™»ιŒ²" diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/org-gephi-preview.pot b/modules/PreviewAPI/src/main/resources/org/gephi/preview/org-gephi-preview.pot deleted file mode 100644 index 147be90b54..0000000000 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/org-gephi-preview.pot +++ /dev/null @@ -1,19 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "PDFRenderTargetImpl.font.registration" -msgstr "Registering system fonts" diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle.properties index e6b56ecfe0..9e69061f9b 100644 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle.properties +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle.properties @@ -4,4 +4,4 @@ DefaultStraight.name = Default Straight DefaultCurved.name = Default Curved EdgesCustomColor.name = Edges Custom Color TextOutline.name = Text outline -BlackBackground.name = Black Background \ No newline at end of file +BlackBackground.name = Dark Background \ No newline at end of file diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_ar.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_ca.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_ca.properties new file mode 100644 index 0000000000..5bae6128a4 --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_ca.properties @@ -0,0 +1,7 @@ +Default.name=Per defecte +TagCloud.name=Nϊvol d'etiquetes +DefaultStraight.name=Recte per defecte +DefaultCurved.name=Corbat per defecte +EdgesCustomColor.name=Edges Custom Color +TextOutline.name=Text outline +BlackBackground.name=Fons negre diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_cs.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_cs.properties index 6c0281f5ae..762452b986 100644 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_cs.properties +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_cs.properties @@ -1,21 +1,7 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-20 21\:36+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -Default.name=V\u00fdchoz\u00ed - +Default.name=Vύchozν TagCloud.name=Mrak zna\u010dek - -DefaultStraight.name=V\u00fdchoz\u00ed p\u0159\u00edm\u00e9 - -DefaultCurved.name=V\u00fdchoz\u00ed zak\u0159iven\u00e9 - -EdgesCustomColor.name=Vlastn\u00ed barva hrany - +DefaultStraight.name=Vύchozν p\u0159νmι +DefaultCurved.name=Vύchozν zak\u0159ivenι +EdgesCustomColor.name=Vlastnν barva hrany TextOutline.name=Obrys textu - -BlackBackground.name=\u010cern\u00e9 pozad\u00ed +BlackBackground.name=\u010Cernι pozadν diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_de.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_de.properties new file mode 100644 index 0000000000..3bb0de6de0 --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_de.properties @@ -0,0 +1,7 @@ +Default.name=Standard +TagCloud.name=Tag Cloud +DefaultStraight.name=Standard - gerade +DefaultCurved.name=Standard - bogenfφrmig +EdgesCustomColor.name=Kanten in festgelegter Farbe +TextOutline.name=Text mit Rand +BlackBackground.name=Schwarzer Hintergrund diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_es.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_es.properties index 79cf69c179..f579e0b649 100644 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_es.properties +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_es.properties @@ -1,22 +1,7 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 21\:43+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - Default.name=Por defecto - TagCloud.name=Nube de etiquetas - DefaultStraight.name=Por defecto - Aristas rectas - DefaultCurved.name=Por defecto - Aristas curvas - EdgesCustomColor.name=Aristas de color personalizado - TextOutline.name=Contorno de texto - BlackBackground.name=Fondo negro diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_fr.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_fr.properties index 4e2a47d4b1..11455b91f2 100644 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_fr.properties +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_fr.properties @@ -1,22 +1,7 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-23 16\:02+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -Default.name=D\u00e9faut - +Default.name=Dιfaut TagCloud.name=Nuage de Mots - -DefaultStraight.name=D\u00e9faut Liens Droits - -DefaultCurved.name=D\u00e9faut Liens Courb\u00e9s - -EdgesCustomColor.name=Couleur des Liens Personnalis\u00e9e - +DefaultStraight.name=Dιfaut Liens Droits +DefaultCurved.name=Dιfaut Liens Courbιs +EdgesCustomColor.name=Couleur des Liens Personnalisιe TextOutline.name=Contour de texte - -BlackBackground.name=Arri\u00e8re-plan noir +BlackBackground.name=Arriθre-plan noir diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_he.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_he.properties new file mode 100644 index 0000000000..eacdfa4122 --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_he.properties @@ -0,0 +1,7 @@ +Default.name=\u05d1\u05e8\u05d9\u05e8\u05ea \u05de\u05d7\u05d3\u05dc +TagCloud.name=Tag Cloud +DefaultStraight.name=Default Straight +DefaultCurved.name=Default Curved +EdgesCustomColor.name=Edges Custom Color +TextOutline.name=Text outline +BlackBackground.name=Black Background diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_hu.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_hu.properties new file mode 100644 index 0000000000..819759412e --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_hu.properties @@ -0,0 +1,9 @@ + + +BlackBackground.name=fekete hαttιr +EdgesCustomColor.name=\u00C9lek egyedi sz\u00EDne +DefaultStraight.name=Alap\u00E9rtelmezett egyenes +TagCloud.name=C\u00EDmkefelh\u0151 +Default.name=Alap\u00E9rtelmezett +DefaultCurved.name=Alap\u00E9rtelmezett g\u00F6rbe +TextOutline.name=Sz\u00F6veg v\u00E1zlata diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_it.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_it.properties new file mode 100644 index 0000000000..dd5098ca4a --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_it.properties @@ -0,0 +1,7 @@ +Default.name=Default +TagCloud.name=Tag Cloud +DefaultStraight.name=Default Straight +DefaultCurved.name=Default Curved +EdgesCustomColor.name=Edges Custom Color +TextOutline.name=Text outline +BlackBackground.name=Black Background diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_ja.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_ja.properties index e2155e167e..cd3a3cfcd6 100644 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_ja.properties +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_ja.properties @@ -1,21 +1,7 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-23 07\:47+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - Default.name=\u30c7\u30d5\u30a9\u30eb\u30c8 - TagCloud.name=\u30bf\u30b0\u30af\u30e9\u30a6\u30c9 - DefaultStraight.name=\u76f4\u7dda\u3092\u30c7\u30d5\u30a9\u30eb\u30c8 - DefaultCurved.name=\u66f2\u7dda\u3092\u30c7\u30d5\u30a9\u30eb\u30c8 - EdgesCustomColor.name=\u8fba\u306e\u30ab\u30b9\u30bf\u30e0\u8272 - TextOutline.name=\u30c6\u30ad\u30b9\u30c8\u306e\u8f2a\u90ed - -BlackBackground.name=\u9ed2\u3044\u80cc\u666f +BlackBackground.name=\u9ED2\u3044\u80CC\u666F diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_ko.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_ko.properties new file mode 100644 index 0000000000..0c17867b00 --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_ko.properties @@ -0,0 +1,9 @@ + + +BlackBackground.name=\uAC80\uC815 \uBC30\uACBD +EdgesCustomColor.name=\uC5E3\uC9C0 \uC0AC\uC6A9\uC790 \uC815\uC758 \uC0C9\uC0C1 +DefaultStraight.name=\uAE30\uBCF8 \uC9C1\uC120 +TagCloud.name=\uD0DC\uADF8 \uAD6C\uB984 +Default.name=\uAE30\uBCF8\uAC12 +DefaultCurved.name=\uAE30\uBCF8 \uACE1\uC120 +TextOutline.name=\uD14D\uC2A4\uD2B8 \uC724\uACFD\uC120 diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_nl.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_nl.properties new file mode 100644 index 0000000000..dd5098ca4a --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_nl.properties @@ -0,0 +1,7 @@ +Default.name=Default +TagCloud.name=Tag Cloud +DefaultStraight.name=Default Straight +DefaultCurved.name=Default Curved +EdgesCustomColor.name=Edges Custom Color +TextOutline.name=Text outline +BlackBackground.name=Black Background diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_pt_BR.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_pt_BR.properties index fe0db2ce1b..e60ec437a3 100644 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_pt_BR.properties +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_pt_BR.properties @@ -1,22 +1,7 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -# C\u00e9lio Faria Jr. , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-26 00\:34+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -Default.name=Padr\u00e3o - +Default.name=Padrγo TagCloud.name=Nuvem de etiquetas - -DefaultStraight.name=Padr\u00e3o com arestas retas - -DefaultCurved.name=Padr\u00e3o com arestas curvas - +DefaultStraight.name=Padrγo com arestas retas +DefaultCurved.name=Padrγo com arestas curvas EdgesCustomColor.name=Arestas de cor personalizada - TextOutline.name=Contorno de texto - BlackBackground.name=Fundo preto diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_ro.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_ro.properties new file mode 100644 index 0000000000..d7b008c593 --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_ro.properties @@ -0,0 +1,9 @@ + + +Default.name=Implicit +TagCloud.name=Nor de etichete +DefaultStraight.name=Implicit Drept +DefaultCurved.name=Implicit Curbat +EdgesCustomColor.name=Culoare Personalizat\u0103 Muchii +TextOutline.name=Contur text +BlackBackground.name=Fundal negru diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_ru.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_ru.properties index 788c436a9c..17fdee4f36 100644 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_ru.properties +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_ru.properties @@ -1,21 +1,7 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-11-18 07\:12+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - Default.name=\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e - TagCloud.name=\u041e\u0431\u043b\u0430\u043a\u043e \u0442\u044d\u0433\u043e\u0432 - DefaultStraight.name=\u041f\u0440\u044f\u043c\u044b\u0435 \u0440\u0435\u0431\u0440\u0430 - DefaultCurved.name=\u041a\u0440\u0438\u0432\u044b\u0435 \u0440\u0435\u0431\u0440\u0430 - EdgesCustomColor.name=\u0423\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u0446\u0432\u0435\u0442 \u0440\u0435\u0431\u0435\u0440 - TextOutline.name=\u0422\u0435\u043a\u0441\u0442 \u0441 \u043e\u0431\u0432\u043e\u0434\u043a\u043e\u0439 - -BlackBackground.name=\u0427\u0451\u0440\u043d\u044b\u0439 \u0444\u043e\u043d +BlackBackground.name=\u0427\u0451\u0440\u043D\u044B\u0439 \u0444\u043E\u043D diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_th.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_tr.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_tr.properties new file mode 100644 index 0000000000..35e64681a6 --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_tr.properties @@ -0,0 +1,7 @@ +Default.name=Varsay\u0131lan +TagCloud.name=Tag Cloud +DefaultStraight.name=Default Straight +DefaultCurved.name=Default Curved +EdgesCustomColor.name=Edges Custom Color +TextOutline.name=Text outline +BlackBackground.name=Black Background diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_uk.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_uk.properties new file mode 100644 index 0000000000..8e83973faf --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_uk.properties @@ -0,0 +1,7 @@ +TagCloud.name=\u0425\u043C\u0430\u0440\u0430 \u0442\u0435\u0433\u0456\u0432 +DefaultCurved.name=\u0412\u0438\u0433\u043D\u0443\u0442\u0438\u0439 \u0437\u0430 \u0437\u0430\u043C\u043E\u0432\u0447\u0443\u0432\u0430\u043D\u043D\u044F\u043C +DefaultStraight.name=\u0422\u0438\u043F\u043E\u0432\u0438\u0439 \u043F\u0440\u044F\u043C\u0438\u0439 +EdgesCustomColor.name=\u0421\u043F\u0435\u0446\u0456\u0430\u043B\u044C\u043D\u0438\u0439 \u043A\u043E\u043B\u0456\u0440 \u043A\u0440\u0430\u0457\u0432 +TextOutline.name=\u041F\u043B\u0430\u043D \u0442\u0435\u043A\u0441\u0442\u0443 +BlackBackground.name=\u0422\u0435\u043C\u043D\u0438\u0439 \u0444\u043E\u043D +Default.name=\u0417\u0430 \u0437\u0430\u043C\u043E\u0432\u0447\u0443\u0432\u0430\u043D\u043D\u044F\u043C diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_zh_CN.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_zh_CN.properties index 1a85708307..ff37f6451f 100644 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_zh_CN.properties +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_zh_CN.properties @@ -1,20 +1,7 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:08+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - Default.name=\u7f3a\u7701\u503c - TagCloud.name=\u6807\u7b7e\u4e91 - DefaultStraight.name=\u7f3a\u7701\u503c\u76f4\u8fb9 - DefaultCurved.name=\u7f3a\u7701\u503c\u5f2f\u8fb9 - EdgesCustomColor.name=\u5b9a\u5236\u8fb9\u7684\u989c\u8272 - TextOutline.name=\u6587\u672c\u8f6e\u5ed3 - -BlackBackground.name=\u9ed1\u8272\u80cc\u666f +BlackBackground.name=\u9ED1\u8272\u80CC\u666F diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_zh_TW.properties b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_zh_TW.properties new file mode 100644 index 0000000000..dd5098ca4a --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/Bundle_zh_TW.properties @@ -0,0 +1,7 @@ +Default.name=Default +TagCloud.name=Tag Cloud +DefaultStraight.name=Default Straight +DefaultCurved.name=Default Curved +EdgesCustomColor.name=Edges Custom Color +TextOutline.name=Text outline +BlackBackground.name=Black Background diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/cs.po b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/cs.po deleted file mode 100644 index 9886c65305..0000000000 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/cs.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-20 21:36+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "Default.name" -msgstr "VΓ½chozΓ­" - -msgid "TagCloud.name" -msgstr "Mrak značek" - -msgid "DefaultStraight.name" -msgstr "VΓ½chozΓ­ pΕ™Γ­mΓ©" - -msgid "DefaultCurved.name" -msgstr "VΓ½chozΓ­ zakΕ™ivenΓ©" - -msgid "EdgesCustomColor.name" -msgstr "VlastnΓ­ barva hrany" - -msgid "TextOutline.name" -msgstr "Obrys textu" - -msgid "BlackBackground.name" -msgstr "ČernΓ© pozadΓ­" diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/es.po b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/es.po deleted file mode 100644 index 6a359cc259..0000000000 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/es.po +++ /dev/null @@ -1,41 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 21:43+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "Default.name" -msgstr "Por defecto" - -msgid "TagCloud.name" -msgstr "Nube de etiquetas" - -msgid "DefaultStraight.name" -msgstr "Por defecto - Aristas rectas" - -msgid "DefaultCurved.name" -msgstr "Por defecto - Aristas curvas" - -msgid "EdgesCustomColor.name" -msgstr "Aristas de color personalizado" - -msgid "TextOutline.name" -msgstr "Contorno de texto" - -msgid "BlackBackground.name" -msgstr "Fondo negro" diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/fr.po b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/fr.po deleted file mode 100644 index 446efb0dcf..0000000000 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/fr.po +++ /dev/null @@ -1,41 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-23 16:02+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "Default.name" -msgstr "DΓ©faut" - -msgid "TagCloud.name" -msgstr "Nuage de Mots" - -msgid "DefaultStraight.name" -msgstr "DΓ©faut Liens Droits" - -msgid "DefaultCurved.name" -msgstr "DΓ©faut Liens CourbΓ©s" - -msgid "EdgesCustomColor.name" -msgstr "Couleur des Liens PersonnalisΓ©e" - -msgid "TextOutline.name" -msgstr "Contour de texte" - -msgid "BlackBackground.name" -msgstr "ArriΓ¨re-plan noir" diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/ja.po b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/ja.po deleted file mode 100644 index fd1cfe5068..0000000000 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/ja.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-23 07:47+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "Default.name" -msgstr "γƒ‡γƒ•γ‚©γƒ«γƒˆ" - -msgid "TagCloud.name" -msgstr "タグクラウド" - -msgid "DefaultStraight.name" -msgstr "η›΄η·šγ‚’γƒ‡γƒ•γ‚©γƒ«γƒˆ" - -msgid "DefaultCurved.name" -msgstr "ζ›²η·šγ‚’γƒ‡γƒ•γ‚©γƒ«γƒˆ" - -msgid "EdgesCustomColor.name" -msgstr "θΎΊγγ‚«γ‚Ήγ‚Ώγƒ θ‰²" - -msgid "TextOutline.name" -msgstr "γƒ†γ‚­γ‚ΉγƒˆγθΌͺιƒ­" - -msgid "BlackBackground.name" -msgstr "ι»’γ„θƒŒζ™―" diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/org-gephi-preview-presets.pot b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/org-gephi-preview-presets.pot deleted file mode 100644 index a42b8c4650..0000000000 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/org-gephi-preview-presets.pot +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "Default.name" -msgstr "Default" - -msgid "TagCloud.name" -msgstr "Tag Cloud" - -msgid "DefaultStraight.name" -msgstr "Default Straight" - -msgid "DefaultCurved.name" -msgstr "Default Curved" - -msgid "EdgesCustomColor.name" -msgstr "Edges Custom Color" - -msgid "TextOutline.name" -msgstr "Text outline" - -msgid "BlackBackground.name" -msgstr "Black Background" diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/package.html b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/package.html index 18f6245b8e..109f191331 100644 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/package.html +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/package.html @@ -1,10 +1,15 @@ - - - - Default preview presets -

      - Preview presets defines a set of property values which can be loaded - in the preview properties. -

      - - + + + + org.gephi.preview.presets + + +

      + Default preview presets +

      +

      + Preview presets defines a set of property values which can be loaded + in the preview properties. +

      + + diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/pt_BR.po b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/pt_BR.po deleted file mode 100644 index 885697c760..0000000000 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/pt_BR.po +++ /dev/null @@ -1,41 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -# CΓ©lio Faria Jr. , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-26 00:34+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "Default.name" -msgstr "PadrΓ£o" - -msgid "TagCloud.name" -msgstr "Nuvem de etiquetas" - -msgid "DefaultStraight.name" -msgstr "PadrΓ£o com arestas retas" - -msgid "DefaultCurved.name" -msgstr "PadrΓ£o com arestas curvas" - -msgid "EdgesCustomColor.name" -msgstr "Arestas de cor personalizada" - -msgid "TextOutline.name" -msgstr "Contorno de texto" - -msgid "BlackBackground.name" -msgstr "Fundo preto" diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/ru.po b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/ru.po deleted file mode 100644 index c85304e0b9..0000000000 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/ru.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-11-18 07:12+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "Default.name" -msgstr "По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ" - -msgid "TagCloud.name" -msgstr "Облако тэгов" - -msgid "DefaultStraight.name" -msgstr "ΠŸΡ€ΡΠΌΡ‹Π΅ Ρ€Π΅Π±Ρ€Π°" - -msgid "DefaultCurved.name" -msgstr "ΠšΡ€ΠΈΠ²Ρ‹Π΅ Ρ€Π΅Π±Ρ€Π°" - -msgid "EdgesCustomColor.name" -msgstr "УправляСмый Ρ†Π²Π΅Ρ‚ Ρ€Π΅Π±Π΅Ρ€" - -msgid "TextOutline.name" -msgstr "ВСкст с ΠΎΠ±Π²ΠΎΠ΄ΠΊΠΎΠΉ" - -msgid "BlackBackground.name" -msgstr "Π§Ρ‘Ρ€Π½Ρ‹ΠΉ Ρ„ΠΎΠ½" diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/zh_CN.po b/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/zh_CN.po deleted file mode 100644 index 711ece5d15..0000000000 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/presets/zh_CN.po +++ /dev/null @@ -1,39 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:08+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "Default.name" -msgstr "ηΌΊηœε€Ό" - -msgid "TagCloud.name" -msgstr "ζ ‡η­ΎδΊ‘" - -msgid "DefaultStraight.name" -msgstr "ηΌΊηœε€Όη›΄θΎΉ" - -msgid "DefaultCurved.name" -msgstr "ηΌΊηœε€ΌεΌ―θΎΉ" - -msgid "EdgesCustomColor.name" -msgstr "εšεˆΆθΎΉηš„ι’œθ‰²" - -msgid "TextOutline.name" -msgstr "ζ–‡ζœ¬θ½ε»“" - -msgid "BlackBackground.name" -msgstr "ι»‘θ‰²θƒŒζ™―" diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/pt_BR.po b/modules/PreviewAPI/src/main/resources/org/gephi/preview/pt_BR.po deleted file mode 100644 index c8b88ffe0f..0000000000 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/pt_BR.po +++ /dev/null @@ -1,23 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -# CΓ©lio Faria Jr. , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 12:03+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "PDFRenderTargetImpl.font.registration" -msgstr "Registrando fontes do sistema" diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/ru.po b/modules/PreviewAPI/src/main/resources/org/gephi/preview/ru.po deleted file mode 100644 index 0fe116420c..0000000000 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/ru.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-03 05:37+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "PDFRenderTargetImpl.font.registration" -msgstr "РСгистрация систСмных ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ²" diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/spi/package.html b/modules/PreviewAPI/src/main/resources/org/gephi/preview/spi/package.html index bf8799f955..1d9f144cfd 100644 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/spi/package.html +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/spi/package.html @@ -1,51 +1,84 @@ - + - - Interfaces for creating new renderers, item builders and render targets. + + org.gephi.preview.spi + + +

      + Interfaces for creating new renderers, item builders and render targets. +

      Create a new Item Builder

      -
      1. Create a new module and set Preview API, +
          +
        1. + Create a new module and set Preview API, Graph API, AttributesAPI and - Lookup as dependencies.
        2. -
        3. Create a new item class which implements Item or + Lookup as dependencies. +
        4. +
        5. + Create a new item class which implements Item or extends AbstractItem. The AbstractItem class is located in the PreviewPlugin module so add it as dependency first. An item should be very simple but has a - unique identifier returned by its getType() method.
        6. -
        7. Create a new builder class that implements ItemBuilder
        8. -
        9. Implement the getType() method and returns the same - identifier than the Item you created earlier.
        10. -
        11. Implement the getItems() method by retrieving objects - from the given graph.
        12. -
        13. Add @ServiceProvider annotation to your builder, that it can + unique identifier returned by its getType() method. +
        14. +
        15. + Create a new builder class that implements ItemBuilder +
        16. +
        17. + Implement the getType() method and returns the same + identifier than the Item you created earlier. +
        18. +
        19. + Implement the getItems() method by retrieving objects + from the given graph. +
        20. +
        21. + Add @ServiceProvider annotation to your builder, that it can be found by the system. Set ItemBuilder as the - annotation parameter.
        22. + annotation parameter. +

        Create a new Renderer

        -
        1. Create a new module and set Preview API, +
            +
          1. + Create a new module and set Preview API, GraphAPI, Processing Wrapper, - iText Wrapper and Lookup as dependencies.
          2. -
          3. Create a new class that implements Renderer.
          4. -
          5. Implement the renderer methods.
          6. -
          7. Add @ServiceProvider annotation to your builder, that it can + iText Wrapper and Lookup as dependencies. +
          8. +
          9. + Create a new class that implements Renderer. +
          10. +
          11. + Implement the renderer methods. +
          12. +
          13. + Add @ServiceProvider annotation to your builder, that it can be found by the system. Set Renderer as the - annotation parameter.
          14. + annotation parameter. +

          Add data to an existing item

          - To add an additional data attribute to a Node or Edge item, you need to create - a new item builder for the specific type. For instance if one want to add - a new attribute to nodes create a new ItemBuilder for the - type Item.Node. Simply return item objects with the data you - want to add. The system will automatically merge your new data to node items. +

          + To add an additional data attribute to a Node or Edge item, you need to create + a new item builder for the specific type. For instance if one want to add + a new attribute to nodes create a new ItemBuilder for the + type Item.Node. Simply return item objects with the data you + want to add. The system will automatically merge your new data to node items. +

          Extend or replace an existing renderer

          -

          To extend or completely replace a default Renderer by your own implementation, - create a new Renderer and set the annotation like below. In addition add Preview Plugin module as a dependency. -

          - @ServiceProvider(service=Renderer.class, position=XXX) +

          + To extend or completely replace a default Renderer by your own implementation, + create a new Renderer and set the annotation like below. In addition add Preview Plugin module as a dependency. +

          +
          @ServiceProvider(service=Renderer.class, position=XXX)
                   public class MyRenderer extends NodeRenderer
          -        
          -        

          Being XXX the new position of the renderer - Then you can reuse parts of the base class or just override them. -

          Default renderers are: +

          +

          + Being XXX the new position of the renderer + Then you can reuse parts of the base class or just override them. +

          +

          + Default renderers are:

          • org.gephi.preview.plugin.renderers.NodeRenderer
          • @@ -55,15 +88,24 @@

            Extend or replace an existing renderer

          • org.gephi.preview.plugin.renderers.ArrowRenderer

          Add a new PreviewUI settings panel

          - Plug-ins can add UI components to the Preview Settings module. Additional components are placed in new tabs and have access to the - current PreviewModel and therefore PreviewProperties. -
          1. Create a new module and set Preview API and - Lookup as dependencies.
          2. -
          3. Create a new class that implements PreviewUI and implements - methods.
          4. -
          5. Add @ServiceProvider annotation to your builder, that it can +

            + Plug-ins can add UI components to the Preview Settings module. Additional components are placed in new tabs and have access to the + current PreviewModel and therefore PreviewProperties. +

            +
              +
            1. + Create a new module and set Preview API and + Lookup as dependencies. +
            2. +
            3. + Create a new class that implements PreviewUI and implements + methods. +
            4. +
            5. + Add @ServiceProvider annotation to your builder, that it can be found by the system. Set PreviewUI as the - 'service' annotation parameter.
            6. + 'service' annotation parameter. +
            \ No newline at end of file diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/types/editors/package.html b/modules/PreviewAPI/src/main/resources/org/gephi/preview/types/editors/package.html new file mode 100644 index 0000000000..d2c5bccc2b --- /dev/null +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/types/editors/package.html @@ -0,0 +1,12 @@ + + + + org.gephi.preview.types.editors + + +

            + Standard beans property editors for preview types. +

            + + + diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/types/package.html b/modules/PreviewAPI/src/main/resources/org/gephi/preview/types/package.html index 29eef6aacb..cf37f80fed 100644 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/types/package.html +++ b/modules/PreviewAPI/src/main/resources/org/gephi/preview/types/package.html @@ -1,16 +1,21 @@ - - - - Additional property types. -

            - Properties values are traditionally basic types like Float or String. - This package defines additional property types which can be used by renderers. -

            -

            - Every new type should also define a PropertyEditor to - provide serialization and cutom UI components to edit the value. - Example are provided in the org.gephi.desktop.preview.propertyeditors - package. -

            - - + + + + org.gephi.preview.types + + +

            + Additional property types. +

            +

            + Properties values are traditionally basic types like Float or String. + This package defines additional property types which can be used by renderers. +

            +

            + Every new type should also define a PropertyEditor to + provide serialization and cutom UI components to edit the value. + Example are provided in the org.gephi.desktop.preview.editors + package. +

            + + diff --git a/modules/PreviewAPI/src/main/resources/org/gephi/preview/zh_CN.po b/modules/PreviewAPI/src/main/resources/org/gephi/preview/zh_CN.po deleted file mode 100644 index dbd5656d92..0000000000 --- a/modules/PreviewAPI/src/main/resources/org/gephi/preview/zh_CN.po +++ /dev/null @@ -1,21 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:08+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "PDFRenderTargetImpl.font.registration" -msgstr "ζ³¨ε†Œη³»η»Ÿε­—δ½“" diff --git a/modules/PreviewAPI/src/test/java/org/gephi/preview/PersistenceProviderTest.java b/modules/PreviewAPI/src/test/java/org/gephi/preview/PersistenceProviderTest.java new file mode 100644 index 0000000000..2ec4607118 --- /dev/null +++ b/modules/PreviewAPI/src/test/java/org/gephi/preview/PersistenceProviderTest.java @@ -0,0 +1,78 @@ +package org.gephi.preview; + +import java.awt.Color; +import org.gephi.preview.api.ManagedRenderer; +import org.gephi.preview.api.PreviewProperties; +import org.gephi.preview.api.PreviewProperty; +import org.gephi.preview.utils.MockRendererA; +import org.gephi.preview.utils.MockRendererB; +import org.gephi.preview.utils.Utils; +import org.gephi.project.io.utils.GephiFormat; +import org.junit.Assert; +import org.junit.Test; +import org.netbeans.junit.MockServices; + +public class PersistenceProviderTest { + + @Test + public void testEmpty() throws Exception { + PreviewModelImpl previewModel = Utils.newPreviewModel(); + GephiFormat.testXMLPersistenceProvider(new PreviewPersistenceProvider(), previewModel.getWorkspace()); + } + + @Test + public void testDefaultRendererOrder() throws Exception { + MockServices.setServices(MockRendererA.class, MockRendererB.class); + + PreviewModelImpl previewModel = Utils.newPreviewModel(); + PreviewModelImpl readModel = Utils.getPreviewModel( + GephiFormat.testXMLPersistenceProvider(new PreviewPersistenceProvider(), previewModel.getWorkspace())); + Assert.assertArrayEquals(previewModel.getManagedRenderers(), readModel.getManagedRenderers()); + } + + @Test + public void testDisabledRenderer() throws Exception { + MockServices.setServices(MockRendererA.class, MockRendererB.class); + + PreviewModelImpl previewModel = Utils.newPreviewModel(); + previewModel.setManagedRenderers(new ManagedRenderer[] {previewModel.getManagedRenderers()[0]}); + + PreviewModelImpl readModel = Utils.getPreviewModel( + GephiFormat.testXMLPersistenceProvider(new PreviewPersistenceProvider(), previewModel.getWorkspace())); + Assert.assertArrayEquals(previewModel.getManagedRenderers(), readModel.getManagedRenderers()); + } + + @Test + public void testChangeRendererOrder() throws Exception { + MockServices.setServices(MockRendererA.class, MockRendererB.class); + + PreviewModelImpl previewModel = Utils.newPreviewModel(); + previewModel.setManagedRenderers(new ManagedRenderer[] {previewModel.getManagedRenderers()[1], previewModel.getManagedRenderers()[0]}); + + PreviewModelImpl readModel = Utils.getPreviewModel( + GephiFormat.testXMLPersistenceProvider(new PreviewPersistenceProvider(), previewModel.getWorkspace())); + Assert.assertArrayEquals(previewModel.getManagedRenderers(), readModel.getManagedRenderers()); + } + + @Test + public void testProperty() throws Exception { + PreviewModelImpl previewModel = Utils.newPreviewModel(); + PreviewProperties properties = previewModel.getProperties(); + properties.putValue(PreviewProperty.BACKGROUND_COLOR, Color.CYAN); + + PreviewModelImpl readModel = Utils.getPreviewModel( + GephiFormat.testXMLPersistenceProvider(new PreviewPersistenceProvider(), previewModel.getWorkspace())); + Assert.assertEquals(Color.CYAN, readModel.getProperties().getValue(PreviewProperty.BACKGROUND_COLOR)); + } + + @Test + public void testGlobalCanvasSize() throws Exception { + PreviewModelImpl previewModel = Utils.newPreviewModel(); + Assert.assertFalse(previewModel.isGlobalCanvasSize()); + previewModel.setGlobalCanvasSize(true); + + PreviewModelImpl readModel = Utils.getPreviewModel( + GephiFormat.testXMLPersistenceProvider(new PreviewPersistenceProvider(), previewModel.getWorkspace())); + Assert.assertTrue(readModel.isGlobalCanvasSize()); + } +} diff --git a/modules/PreviewAPI/src/test/java/org/gephi/preview/PreviewModelTest.java b/modules/PreviewAPI/src/test/java/org/gephi/preview/PreviewModelTest.java new file mode 100644 index 0000000000..75dcf23496 --- /dev/null +++ b/modules/PreviewAPI/src/test/java/org/gephi/preview/PreviewModelTest.java @@ -0,0 +1,66 @@ +package org.gephi.preview; + +import java.util.Arrays; +import java.util.Collection; +import java.util.HashSet; +import java.util.Set; +import org.gephi.graph.GraphGenerator; +import org.gephi.preview.spi.ItemBuilder; +import org.gephi.preview.utils.MockBuilderA; +import org.gephi.preview.utils.MockBuilderB; +import org.gephi.preview.utils.MockRendererA; +import org.gephi.preview.utils.MockRendererB; +import org.gephi.preview.utils.Utils; +import org.junit.Assert; +import org.junit.Test; +import org.netbeans.junit.MockServices; +import org.openide.util.Lookup; + +public class PreviewModelTest { + + @Test + public void testEmpty() { + PreviewModelImpl previewModel = Utils.newPreviewModel(); + Assert.assertEquals(0, previewModel.getItems(MockBuilderA.TYPE).length); + Assert.assertEquals(0, previewModel.getItems(MockBuilderA.SOURCE_1).length); + Assert.assertNull(previewModel.getItem(MockBuilderA.TYPE, MockBuilderA.SOURCE_1)); + Assert.assertEquals(0, previewModel.getItemTypes().length); + } + + @Test + public void testBuildAndLoadSingle() { + MockServices.setServices(MockRendererA.class, MockBuilderA.class); + + GraphGenerator generator = GraphGenerator.build().generateTinyGraph(); + + PreviewModelImpl previewModel = Utils.getPreviewModel(generator.getWorkspace()); + previewModel.buildAndLoadItems(previewModel.getManagedEnabledRenderers(), generator.getGraph()); + Assert.assertArrayEquals(new String[] {MockBuilderA.TYPE}, previewModel.getItemTypes()); + assertArrayEqualsUnordered(new Object[] {MockBuilderA.MOCK_ITEM_1, MockBuilderA.MOCK_ITEM_2}, previewModel.getItems(MockBuilderA.TYPE)); + Assert.assertArrayEquals(new Object[] {MockBuilderA.MOCK_ITEM_1}, previewModel.getItems(MockBuilderA.SOURCE_1)); + Assert.assertEquals(MockBuilderA.MOCK_ITEM_1, previewModel.getItem(MockBuilderA.TYPE, MockBuilderA.SOURCE_1)); + } + + @Test + public void testBuildAndLoadMerge() { + MockServices.setServices(MockRendererA.class, MockRendererB.class, MockBuilderA.class, MockBuilderB.class); + + GraphGenerator generator = GraphGenerator.build().generateTinyGraph(); + + PreviewModelImpl previewModel = Utils.getPreviewModel(generator.getWorkspace()); + previewModel.buildAndLoadItems(previewModel.getManagedEnabledRenderers(), generator.getGraph()); + // Mock item from builder B with same source as item from builder A has been merged, therefore only 3 items + assertArrayEqualsUnordered(new Object[] {MockBuilderA.MOCK_ITEM_1, MockBuilderA.MOCK_ITEM_2, MockBuilderB.MOCK_ITEM_2}, + previewModel.getItems(MockBuilderA.TYPE)); + assertArrayEqualsUnordered(new Object[] {MockBuilderA.MOCK_ITEM_1}, previewModel.getItems(MockBuilderA.SOURCE_1)); + Assert.assertEquals(MockBuilderA.MOCK_ITEM_1, previewModel.getItem(MockBuilderA.TYPE, MockBuilderA.SOURCE_1)); + + Assert.assertEquals("bar", MockBuilderA.MOCK_ITEM_1.getData("foo")); + Assert.assertEquals("42", MockBuilderA.MOCK_ITEM_1.getData("number").toString()); + Assert.assertEquals("foo", MockBuilderA.MOCK_ITEM_1.getData("bar")); + } + + private void assertArrayEqualsUnordered(Object[] expected, Object[] actual) { + Assert.assertEquals(new HashSet<>(Arrays.asList(expected)), new HashSet<>(Arrays.asList(actual))); + } +} diff --git a/modules/PreviewAPI/src/test/java/org/gephi/preview/types/editors/PropertyEditorsTest.java b/modules/PreviewAPI/src/test/java/org/gephi/preview/types/editors/PropertyEditorsTest.java new file mode 100644 index 0000000000..5c44963008 --- /dev/null +++ b/modules/PreviewAPI/src/test/java/org/gephi/preview/types/editors/PropertyEditorsTest.java @@ -0,0 +1,42 @@ +package org.gephi.preview.types.editors; + +import java.awt.Color; +import org.junit.Assert; +import org.junit.Test; + +public class PropertyEditorsTest { + + private static final Color CUSTOM_RGB = new Color(1,2,3); + private static final Color CUSTOM_RGBA = new Color(1,2,3,4); + + @Test + public void testToTextRgb() { + MyColorPropertyEditor propertyEditor = new MyColorPropertyEditor(); + String rgb = propertyEditor.toText("foo", CUSTOM_RGB); + Assert.assertEquals("foo [1,2,3]", rgb); + } + + @Test + public void testToTextRgba() { + MyColorPropertyEditor propertyEditor = new MyColorPropertyEditor(); + String rgba = propertyEditor.toText("foo", CUSTOM_RGBA); + Assert.assertEquals("foo [1,2,3,4]", rgba); + } + + @Test + public void testToColorRgb() { + MyColorPropertyEditor propertyEditor = new MyColorPropertyEditor(); + Color rgb = propertyEditor.toColor("foo [1,2,3]"); + Assert.assertEquals(CUSTOM_RGB, rgb); + } + + @Test + public void testToColorRgba() { + MyColorPropertyEditor propertyEditor = new MyColorPropertyEditor(); + Color rgba = propertyEditor.toColor("foo [1,2,3,4]"); + Assert.assertEquals(CUSTOM_RGBA, rgba); + } + + // Utility + private static class MyColorPropertyEditor extends AbstractColorPropertyEditor { } +} diff --git a/modules/PreviewAPI/src/test/java/org/gephi/preview/utils/MockBuilderA.java b/modules/PreviewAPI/src/test/java/org/gephi/preview/utils/MockBuilderA.java new file mode 100644 index 0000000000..34a4a5d9a1 --- /dev/null +++ b/modules/PreviewAPI/src/test/java/org/gephi/preview/utils/MockBuilderA.java @@ -0,0 +1,25 @@ +package org.gephi.preview.utils; + +import java.util.HashMap; +import java.util.Map; +import org.gephi.graph.api.Graph; +import org.gephi.preview.api.Item; +import org.gephi.preview.spi.ItemBuilder; + +public class MockBuilderA implements ItemBuilder { + + public static final String TYPE = "mock"; + public static final Object SOURCE_1 = new Object(); + public static final MockItem MOCK_ITEM_1 = new MockItem(SOURCE_1, TYPE, new HashMap<>(Map.of("foo", "bar", "number", 42))); + public static final MockItem MOCK_ITEM_2 = new MockItem(new Object(), TYPE, new HashMap<>()); + + @Override + public Item[] getItems(Graph graph) { + return new Item[] { MOCK_ITEM_1, MOCK_ITEM_2 }; + } + + @Override + public String getType() { + return TYPE; + } +} diff --git a/modules/PreviewAPI/src/test/java/org/gephi/preview/utils/MockBuilderB.java b/modules/PreviewAPI/src/test/java/org/gephi/preview/utils/MockBuilderB.java new file mode 100644 index 0000000000..37c8acb5db --- /dev/null +++ b/modules/PreviewAPI/src/test/java/org/gephi/preview/utils/MockBuilderB.java @@ -0,0 +1,23 @@ +package org.gephi.preview.utils; + +import java.util.HashMap; +import java.util.Map; +import org.gephi.graph.api.Graph; +import org.gephi.preview.api.Item; +import org.gephi.preview.spi.ItemBuilder; + +public class MockBuilderB implements ItemBuilder { + + public static final MockItem MOCK_ITEM_1 = new MockItem(MockBuilderA.SOURCE_1, MockBuilderA.TYPE, new HashMap<>(Map.of("bar", "foo", "number", 999))); + public static final MockItem MOCK_ITEM_2 = new MockItem(new Object(), MockBuilderA.TYPE, new HashMap<>()); + + @Override + public Item[] getItems(Graph graph) { + return new Item[] { MOCK_ITEM_1, MOCK_ITEM_2 }; + } + + @Override + public String getType() { + return MockBuilderA.TYPE; + } +} diff --git a/modules/PreviewAPI/src/test/java/org/gephi/preview/utils/MockItem.java b/modules/PreviewAPI/src/test/java/org/gephi/preview/utils/MockItem.java new file mode 100644 index 0000000000..82d8ebc369 --- /dev/null +++ b/modules/PreviewAPI/src/test/java/org/gephi/preview/utils/MockItem.java @@ -0,0 +1,47 @@ +package org.gephi.preview.utils; + +import java.util.Map; +import org.gephi.preview.api.Item; + +public class MockItem implements Item { + + private final Object source; + private final String type; + private final Map data; + + public MockItem(Object source, String type, Map data) { + this.source = source; + this.type = type; + this.data = data; + } + + @Override + public Object getSource() { + return source; + } + + @Override + public String getType() { + return type; + } + + @Override + public D getData(String key) { + return (D) data.get(key); + } + + @Override + public boolean hasData(String key) { + return data.containsKey(key); + } + + @Override + public void setData(String key, Object value) { + data.put(key, value); + } + + @Override + public String[] getKeys() { + return data.keySet().toArray(new String[0]); + } +} diff --git a/modules/PreviewAPI/src/test/java/org/gephi/preview/utils/MockRendererA.java b/modules/PreviewAPI/src/test/java/org/gephi/preview/utils/MockRendererA.java new file mode 100644 index 0000000000..612000804a --- /dev/null +++ b/modules/PreviewAPI/src/test/java/org/gephi/preview/utils/MockRendererA.java @@ -0,0 +1,52 @@ +package org.gephi.preview.utils; + +import org.gephi.preview.api.CanvasSize; +import org.gephi.preview.api.Item; +import org.gephi.preview.api.PreviewModel; +import org.gephi.preview.api.PreviewProperties; +import org.gephi.preview.api.PreviewProperty; +import org.gephi.preview.api.RenderTarget; +import org.gephi.preview.spi.ItemBuilder; +import org.gephi.preview.spi.Renderer; + +public class MockRendererA implements Renderer { + @Override + public String getDisplayName() { + return "A"; + } + + @Override + public void preProcess(PreviewModel previewModel) { + + } + + @Override + public void render(Item item, RenderTarget target, PreviewProperties properties) { + + } + + @Override + public void postProcess(PreviewModel previewModel, RenderTarget target, PreviewProperties properties) { + + } + + @Override + public PreviewProperty[] getProperties() { + return new PreviewProperty[0]; + } + + @Override + public boolean isRendererForitem(Item item, PreviewProperties properties) { + return item instanceof MockItem; + } + + @Override + public boolean needsItemBuilder(ItemBuilder itemBuilder, PreviewProperties properties) { + return itemBuilder instanceof MockBuilderA; + } + + @Override + public CanvasSize getCanvasSize(Item item, PreviewProperties properties) { + return null; + } +} diff --git a/modules/PreviewAPI/src/test/java/org/gephi/preview/utils/MockRendererB.java b/modules/PreviewAPI/src/test/java/org/gephi/preview/utils/MockRendererB.java new file mode 100644 index 0000000000..5bb8c709ee --- /dev/null +++ b/modules/PreviewAPI/src/test/java/org/gephi/preview/utils/MockRendererB.java @@ -0,0 +1,52 @@ +package org.gephi.preview.utils; + +import org.gephi.preview.api.CanvasSize; +import org.gephi.preview.api.Item; +import org.gephi.preview.api.PreviewModel; +import org.gephi.preview.api.PreviewProperties; +import org.gephi.preview.api.PreviewProperty; +import org.gephi.preview.api.RenderTarget; +import org.gephi.preview.spi.ItemBuilder; +import org.gephi.preview.spi.Renderer; + +public class MockRendererB implements Renderer { + @Override + public String getDisplayName() { + return "B"; + } + + @Override + public void preProcess(PreviewModel previewModel) { + + } + + @Override + public void render(Item item, RenderTarget target, PreviewProperties properties) { + + } + + @Override + public void postProcess(PreviewModel previewModel, RenderTarget target, PreviewProperties properties) { + + } + + @Override + public PreviewProperty[] getProperties() { + return new PreviewProperty[0]; + } + + @Override + public boolean isRendererForitem(Item item, PreviewProperties properties) { + return item instanceof MockItem; + } + + @Override + public boolean needsItemBuilder(ItemBuilder itemBuilder, PreviewProperties properties) { + return itemBuilder instanceof MockBuilderB; + } + + @Override + public CanvasSize getCanvasSize(Item item, PreviewProperties properties) { + return null; + } +} diff --git a/modules/PreviewAPI/src/test/java/org/gephi/preview/utils/Utils.java b/modules/PreviewAPI/src/test/java/org/gephi/preview/utils/Utils.java new file mode 100644 index 0000000000..a8792a30c2 --- /dev/null +++ b/modules/PreviewAPI/src/test/java/org/gephi/preview/utils/Utils.java @@ -0,0 +1,19 @@ +package org.gephi.preview.utils; + +import org.gephi.preview.PreviewControllerImpl; +import org.gephi.preview.PreviewModelImpl; +import org.gephi.project.api.Workspace; +import org.gephi.project.impl.WorkspaceImpl; +import org.netbeans.junit.MockServices; + +public class Utils { + + public static PreviewModelImpl newPreviewModel() { + WorkspaceImpl workspace = new WorkspaceImpl(null, 0); + return workspace.getLookup().lookup(PreviewModelImpl.class); + } + + public static PreviewModelImpl getPreviewModel(Workspace workspace) { + return workspace.getLookup().lookup(PreviewModelImpl.class); + } +} diff --git a/modules/PreviewExport/pom.xml b/modules/PreviewExport/pom.xml index c73421bc0b..fd1bfc713e 100644 --- a/modules/PreviewExport/pom.xml +++ b/modules/PreviewExport/pom.xml @@ -4,13 +4,13 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi io-exporter-preview - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm PreviewExport @@ -36,6 +36,10 @@ ${project.groupId} core-library-wrapper + + ${project.groupId} + batik-wrapper + org.netbeans.api org-openide-util @@ -44,12 +48,24 @@ org.netbeans.api org-openide-util-lookup + + + ${project.groupId} + preview-plugin + test + + + ${project.groupId} + graph-api + test + test-jar + - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/ExporterBuilderPDF.java b/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/ExporterBuilderPDF.java index 892e6442ad..8299e569f4 100644 --- a/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/ExporterBuilderPDF.java +++ b/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/ExporterBuilderPDF.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.preview; import org.gephi.io.exporter.api.FileType; @@ -48,21 +49,23 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = VectorFileExporterBuilder.class) public class ExporterBuilderPDF implements VectorFileExporterBuilder { + @Override public VectorExporter buildExporter() { return new PDFExporter(); } + @Override public FileType[] getFileTypes() { FileType ft = new FileType(".pdf", NbBundle.getMessage(ExporterBuilderPDF.class, "fileType_PDF_Name")); - return new FileType[]{ft}; + return new FileType[] {ft}; } + @Override public String getName() { return NbBundle.getMessage(ExporterBuilderPDF.class, "ExporterPDF_name"); } diff --git a/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/ExporterBuilderPNG.java b/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/ExporterBuilderPNG.java index e9bb7117fa..8c7b89eaf3 100644 --- a/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/ExporterBuilderPNG.java +++ b/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/ExporterBuilderPNG.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.preview; import org.gephi.io.exporter.api.FileType; @@ -57,7 +58,8 @@ public VectorExporter buildExporter() { @Override public FileType[] getFileTypes() { - return new FileType[]{new FileType(".png", NbBundle.getMessage(ExporterBuilderPNG.class, "fileType_PNG_Name"))}; + return new FileType[] { + new FileType(".png", NbBundle.getMessage(ExporterBuilderPNG.class, "fileType_PNG_Name"))}; } @Override diff --git a/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/ExporterBuilderSVG.java b/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/ExporterBuilderSVG.java index af4a37e42e..2036c1f2ea 100644 --- a/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/ExporterBuilderSVG.java +++ b/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/ExporterBuilderSVG.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.preview; import org.gephi.io.exporter.api.FileType; @@ -48,21 +49,23 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = VectorFileExporterBuilder.class) public class ExporterBuilderSVG implements VectorFileExporterBuilder { + @Override public VectorExporter buildExporter() { return new SVGExporter(); } + @Override public FileType[] getFileTypes() { FileType ft = new FileType(".svg", NbBundle.getMessage(ExporterBuilderSVG.class, "fileType_SVG_Name")); - return new FileType[]{ft}; + return new FileType[] {ft}; } + @Override public String getName() { return NbBundle.getMessage(ExporterBuilderSVG.class, "ExporterSVG_name"); } diff --git a/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/PDFExporter.java b/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/PDFExporter.java index 07a071bb5d..34f60645dc 100644 --- a/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/PDFExporter.java +++ b/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/PDFExporter.java @@ -40,18 +40,14 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.preview; -import com.itextpdf.text.BaseColor; -import com.itextpdf.text.Document; -import com.itextpdf.text.DocumentException; -import com.itextpdf.text.FontFactory; -import com.itextpdf.text.PageSize; -import com.itextpdf.text.Rectangle; -import com.itextpdf.text.pdf.PdfContentByte; -import com.itextpdf.text.pdf.PdfWriter; -import java.awt.Color; import java.io.OutputStream; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.gephi.io.exporter.spi.ByteExporter; import org.gephi.io.exporter.spi.VectorExporter; import org.gephi.preview.api.PDFTarget; @@ -59,17 +55,17 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.preview.api.PreviewProperties; import org.gephi.preview.api.PreviewProperty; import org.gephi.preview.api.RenderTarget; +import org.gephi.project.api.Workspace; import org.gephi.utils.longtask.spi.LongTask; import org.gephi.utils.progress.Progress; import org.gephi.utils.progress.ProgressTicket; -import org.gephi.project.api.Workspace; import org.openide.util.Exceptions; import org.openide.util.Lookup; /** * Class exporting the preview graph as a PDF file. * - * @author JΓ©rΓ©my Subtil + * @author JΓ©rΓ©my Subtil * @author Mathieu Bastian */ public class PDFExporter implements ByteExporter, VectorExporter, LongTask { @@ -85,8 +81,10 @@ public class PDFExporter implements ByteExporter, VectorExporter, LongTask { private float marginLeft = 18f; private float marginRight = 18f; private boolean landscape = false; - private Rectangle pageSize = PageSize.A4; + private PDRectangle pageSize = PDRectangle.A4; + private boolean transparentBackground = false; + @Override public boolean execute() { Progress.start(progress); @@ -95,53 +93,40 @@ public boolean execute() { controller.refreshPreview(workspace); PreviewProperties props = controller.getModel(workspace).getProperties(); - Rectangle size = new Rectangle(pageSize); - if (landscape) { - size = new Rectangle(pageSize.rotate()); - } - Color col = props.getColorValue(PreviewProperty.BACKGROUND_COLOR); - size.setBackgroundColor(new BaseColor(col.getRed(), col.getGreen(), col.getBlue())); - - Document document = new Document(size); - PdfWriter pdfWriter = null; - try { - pdfWriter = PdfWriter.getInstance(document, stream); - pdfWriter.setPdfVersion(PdfWriter.PDF_VERSION_1_5); - pdfWriter.setFullCompression(); - - } catch (DocumentException ex) { + try (PDDocument doc = new PDDocument()) { + doc.setVersion(1.5f); + + PDRectangle size = landscape ? new PDRectangle(pageSize.getHeight(), pageSize.getWidth()) : pageSize; + PDPage page = new PDPage(size); + doc.addPage(page); + + try (PDPageContentStream contentStream = new PDPageContentStream(doc, page)) { + props.putValue(PDFTarget.LANDSCAPE, landscape); + props.putValue(PDFTarget.PAGESIZE, size); + props.putValue(PDFTarget.MARGIN_TOP, marginTop); + props.putValue(PDFTarget.MARGIN_LEFT, marginLeft); + props.putValue(PDFTarget.MARGIN_BOTTOM, marginBottom); + props.putValue(PDFTarget.MARGIN_RIGHT, marginRight); + props.putValue(PDFTarget.PDF_CONTENT_BYTE, contentStream); + props.putValue(PDFTarget.PDF_DOCUMENT, doc); + props.putValue(PDFTarget.TRANSPARENT_BACKGROUND, transparentBackground); + target = (PDFTarget) controller.getRenderTarget(RenderTarget.PDF_TARGET, workspace); + if (target instanceof LongTask) { + ((LongTask) target).setProgressTicket(progress); + } + + controller.render(target, workspace); + } + doc.save(stream); + } catch (Exception ex) { Exceptions.printStackTrace(ex); - } - document.open(); - PdfContentByte cb = pdfWriter.getDirectContent(); - cb.saveState(); - - props.putValue(PDFTarget.LANDSCAPE, landscape); - props.putValue(PDFTarget.PAGESIZE, size); - props.putValue(PDFTarget.MARGIN_TOP, new Float((float) marginTop)); - props.putValue(PDFTarget.MARGIN_LEFT, new Float((float) marginLeft)); - props.putValue(PDFTarget.MARGIN_BOTTOM, new Float((float) marginBottom)); - props.putValue(PDFTarget.MARGIN_RIGHT, new Float((float) marginRight)); - props.putValue(PDFTarget.PDF_CONTENT_BYTE, cb); - target = (PDFTarget) controller.getRenderTarget(RenderTarget.PDF_TARGET, workspace); - if (target instanceof LongTask) { - ((LongTask) target).setProgressTicket(progress); - } + } finally { + Progress.finish(progress); - try { - controller.render(target, workspace); - } catch (Exception e) { - throw new RuntimeException(e); + props.putValue(PDFTarget.PDF_CONTENT_BYTE, null); + props.putValue(PDFTarget.PAGESIZE, null); + props.putValue(PDFTarget.PDF_DOCUMENT, null); } - - cb.restoreState(); - document.close(); - - Progress.finish(progress); - - props.putValue(PDFTarget.PDF_CONTENT_BYTE, null); - props.putValue(PDFTarget.PAGESIZE, null); - return !cancel; } @@ -149,62 +134,74 @@ public boolean isLandscape() { return landscape; } + public void setLandscape(boolean landscape) { + this.landscape = landscape; + } + public float getMarginBottom() { return marginBottom; } + public void setMarginBottom(float marginBottom) { + this.marginBottom = marginBottom; + } + public float getMarginLeft() { return marginLeft; } + public void setMarginLeft(float marginLeft) { + this.marginLeft = marginLeft; + } + public float getMarginRight() { return marginRight; } - public float getMarginTop() { - return marginTop; + public void setMarginRight(float marginRight) { + this.marginRight = marginRight; } - public Rectangle getPageSize() { - return pageSize; + public float getMarginTop() { + return marginTop; } - public void setMarginBottom(float marginBottom) { - this.marginBottom = marginBottom; + public void setMarginTop(float marginTop) { + this.marginTop = marginTop; } - public void setMarginLeft(float marginLeft) { - this.marginLeft = marginLeft; + public PDRectangle getPageSize() { + return pageSize; } - public void setMarginRight(float marginRight) { - this.marginRight = marginRight; + public void setPageSize(PDRectangle pageSize) { + this.pageSize = pageSize; } - public void setMarginTop(float marginTop) { - this.marginTop = marginTop; + public boolean isTransparentBackground() { + return transparentBackground; } - public void setPageSize(Rectangle pageSize) { - this.pageSize = pageSize; + public void setTransparentBackground(boolean transparentBackground) { + this.transparentBackground = transparentBackground; } + @Override public void setOutputStream(OutputStream stream) { this.stream = stream; } - public void setWorkspace(Workspace workspace) { - this.workspace = workspace; - } - - public void setLandscape(boolean landscape) { - this.landscape = landscape; - } - + @Override public Workspace getWorkspace() { return workspace; } + @Override + public void setWorkspace(Workspace workspace) { + this.workspace = workspace; + } + + @Override public boolean cancel() { this.cancel = true; if (target instanceof LongTask) { @@ -213,6 +210,7 @@ public boolean cancel() { return true; } + @Override public void setProgressTicket(ProgressTicket progressTicket) { this.progress = progressTicket; } diff --git a/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/PNGExporter.java b/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/PNGExporter.java index dded606e65..b8cde0b063 100644 --- a/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/PNGExporter.java +++ b/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/PNGExporter.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.preview; import java.awt.Color; @@ -50,6 +51,7 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.io.exporter.spi.VectorExporter; import org.gephi.preview.api.G2DTarget; import org.gephi.preview.api.PreviewController; +import org.gephi.preview.api.PreviewModel; import org.gephi.preview.api.PreviewProperties; import org.gephi.preview.api.PreviewProperty; import org.gephi.preview.api.RenderTarget; @@ -60,7 +62,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.Lookup; /** - * * @author Mathieu Bastian */ public class PNGExporter implements VectorExporter, ByteExporter, LongTask { @@ -74,32 +75,25 @@ public class PNGExporter implements VectorExporter, ByteExporter, LongTask { private boolean transparentBackground = false; private int margin = 4; private G2DTarget target; + private Color oldColor; @Override public boolean execute() { Progress.start(progress); - PreviewController controller = Lookup.getDefault().lookup(PreviewController.class); - controller.getModel(workspace).getProperties().putValue(PreviewProperty.VISIBILITY_RATIO, 1.0); + PreviewController ctrl + = Lookup.getDefault().lookup(PreviewController.class); + PreviewModel m = ctrl.getModel(workspace); - PreviewProperties props = controller.getModel(workspace).getProperties(); - props.putValue("width", width); - props.putValue("height", height); - Color oldColor = props.getColorValue(PreviewProperty.BACKGROUND_COLOR); - if (transparentBackground) { - props.putValue(PreviewProperty.BACKGROUND_COLOR, new Color(255, 255, 255, 0));//White transparent - } - props.putValue(PreviewProperty.MARGIN, new Float((float) margin)); - controller.refreshPreview(workspace); - target = (G2DTarget) controller.getRenderTarget(RenderTarget.G2D_TARGET, workspace); + setExportProperties(m); + ctrl.refreshPreview(workspace); + + target = (G2DTarget) ctrl.getRenderTarget( + RenderTarget.G2D_TARGET, + workspace); if (target instanceof LongTask) { ((LongTask) target).setProgressTicket(progress); } - //Fix bug caused by keeping width and height in the workspace preview properties. - //When a .gephi file is loaded later with these properties PGraphics will be created instead of a PApplet - props.removeSimpleValue("width"); - props.removeSimpleValue("height"); - props.removeSimpleValue(PreviewProperty.MARGIN); try { target.refresh(); @@ -111,12 +105,12 @@ public boolean execute() { img.getGraphics().drawImage(sourceImg, 0, 0, null); ImageIO.write(img, "png", stream); stream.close(); - - props.putValue(PreviewProperty.BACKGROUND_COLOR, oldColor); } catch (Exception e) { throw new RuntimeException(e); } + discardExportProperties(m); + Progress.finish(progress); return !cancel; @@ -155,13 +149,13 @@ public void setTransparentBackground(boolean transparentBackground) { } @Override - public void setWorkspace(Workspace workspace) { - this.workspace = workspace; + public Workspace getWorkspace() { + return workspace; } @Override - public Workspace getWorkspace() { - return workspace; + public void setWorkspace(Workspace workspace) { + this.workspace = workspace; } @Override @@ -169,6 +163,7 @@ public void setOutputStream(OutputStream stream) { this.stream = stream; } + @Override public boolean cancel() { cancel = true; if (target instanceof LongTask) { @@ -177,7 +172,30 @@ public boolean cancel() { return true; } + @Override public void setProgressTicket(ProgressTicket progressTicket) { this.progress = progressTicket; } + + private synchronized void setExportProperties(PreviewModel m) { + PreviewProperties props = m.getProperties(); + props.putValue(PreviewProperty.VISIBILITY_RATIO, 1.0F); + props.putValue("width", width); + props.putValue("height", height); + oldColor = props.getColorValue(PreviewProperty.BACKGROUND_COLOR); + if (transparentBackground) { + props.putValue( + PreviewProperty.BACKGROUND_COLOR, + null); //Transparent + } + props.putValue(PreviewProperty.MARGIN, new Float(margin)); + } + + private synchronized void discardExportProperties(PreviewModel m) { + PreviewProperties props = m.getProperties(); + props.removeSimpleValue("width"); + props.removeSimpleValue("height"); + props.removeSimpleValue(PreviewProperty.MARGIN); + props.putValue(PreviewProperty.BACKGROUND_COLOR, oldColor); + } } diff --git a/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/SVGExporter.java b/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/SVGExporter.java index 18e2902133..75c2ba08c6 100644 --- a/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/SVGExporter.java +++ b/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/SVGExporter.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.io.exporter.preview; import java.io.Writer; @@ -47,23 +48,22 @@ Development and Distribution License("CDDL") (collectively, the import org.apache.batik.transcoder.svg2svg.SVGTranscoder; import org.gephi.io.exporter.spi.CharacterExporter; import org.gephi.io.exporter.spi.VectorExporter; - import org.gephi.preview.api.PreviewController; import org.gephi.preview.api.PreviewProperties; import org.gephi.preview.api.PreviewProperty; import org.gephi.preview.api.RenderTarget; import org.gephi.preview.api.SVGTarget; -import org.gephi.utils.longtask.spi.LongTask; -import org.gephi.utils.progress.ProgressTicket; import org.gephi.project.api.Workspace; +import org.gephi.utils.longtask.spi.LongTask; import org.gephi.utils.progress.Progress; +import org.gephi.utils.progress.ProgressTicket; import org.openide.util.Lookup; import org.w3c.dom.Document; /** * Class exporting the preview graph as an SVG image. * - * @author JΓ©rΓ©my Subtil + * @author JΓ©rΓ©my Subtil */ public class SVGExporter implements CharacterExporter, VectorExporter, LongTask { @@ -78,14 +78,15 @@ public class SVGExporter implements CharacterExporter, VectorExporter, LongTask private boolean scaleStrokes = false; private float margin = 4; + @Override public boolean execute() { PreviewController controller = Lookup.getDefault().lookup(PreviewController.class); controller.getModel(workspace).getProperties().putValue(PreviewProperty.VISIBILITY_RATIO, 1.0); controller.refreshPreview(workspace); - + PreviewProperties props = controller.getModel(workspace).getProperties(); props.putValue(SVGTarget.SCALE_STROKES, scaleStrokes); - props.putValue(PreviewProperty.MARGIN, new Float((float) margin)); + props.putValue(PreviewProperty.MARGIN, new Float(margin)); target = (SVGTarget) controller.getRenderTarget(RenderTarget.SVG_TARGET, workspace); if (target instanceof LongTask) { ((LongTask) target).setProgressTicket(progress); @@ -118,6 +119,7 @@ public boolean execute() { return !cancel; } + @Override public boolean cancel() { cancel = true; if (target instanceof LongTask) { @@ -126,27 +128,39 @@ public boolean cancel() { return true; } + @Override public void setProgressTicket(ProgressTicket progressTicket) { this.progress = progressTicket; } + @Override public void setWriter(Writer writer) { this.writer = writer; } + @Override public Workspace getWorkspace() { return workspace; } + @Override public void setWorkspace(Workspace workspace) { this.workspace = workspace; } + public boolean isScaleStrokes() { + return scaleStrokes; + } + public void setScaleStrokes(boolean scaleStrokes) { this.scaleStrokes = scaleStrokes; } - public boolean isScaleStrokes() { - return scaleStrokes; + public float getMargin() { + return margin; + } + + public void setMargin(float margin) { + this.margin = margin; } } diff --git a/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/util/LengthUnit.java b/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/util/LengthUnit.java index 3df36e1d46..46990c84c5 100644 --- a/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/util/LengthUnit.java +++ b/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/util/LengthUnit.java @@ -45,7 +45,7 @@ Development and Distribution License("CDDL") (collectively, the /** * Enum representing a set of lenght units. * - * @author JΓ©rΓ©my Subtil + * @author JΓ©rΓ©my Subtil */ public enum LengthUnit { diff --git a/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/util/SupportSize.java b/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/util/SupportSize.java index 9b914bc8de..d15da600cc 100644 --- a/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/util/SupportSize.java +++ b/modules/PreviewExport/src/main/java/org/gephi/io/exporter/preview/util/SupportSize.java @@ -45,7 +45,7 @@ Development and Distribution License("CDDL") (collectively, the /** * Implementation of the size of an export support. * - * @author JΓ©rΓ©my Subtil + * @author JΓ©rΓ©my Subtil */ public class SupportSize { @@ -56,9 +56,9 @@ public class SupportSize { /** * Constructor. * - * @param width the support's width - * @param height the support's height - * @param lengthUnit the lenght unit + * @param width the support's width + * @param height the support's height + * @param lengthUnit the lenght unit */ public SupportSize(int width, int height, LengthUnit lengthUnit) { this.width = width; @@ -80,7 +80,7 @@ public Integer getHeightInt() { * @return the support's width */ public String getWidth() { - return width.toString() + lengthUnit.toString(); + return width + lengthUnit.toString(); } /** @@ -89,6 +89,6 @@ public String getWidth() { * @return the support's height */ public String getHeight() { - return height.toString() + lengthUnit.toString(); + return height + lengthUnit.toString(); } } diff --git a/modules/PreviewExport/src/main/nbm/manifest.mf b/modules/PreviewExport/src/main/nbm/manifest.mf index 16e245c4c8..050e6aaed6 100644 --- a/modules/PreviewExport/src/main/nbm/manifest.mf +++ b/modules/PreviewExport/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/io/exporter/preview/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Plugin +OpenIDE-Module-Name: Preview Export \ No newline at end of file diff --git a/modules/PreviewExport/src/main/nbm/module.xml b/modules/PreviewExport/src/main/nbm/module.xml deleted file mode 100644 index d8d216369e..0000000000 --- a/modules/PreviewExport/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle.properties b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle.properties index 0bbe0cc4d5..2ab5e50858 100644 --- a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle.properties +++ b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle.properties @@ -1,7 +1,4 @@ -OpenIDE-Module-Display-Category=Plugin -OpenIDE-Module-Long-Description=\ - Vector exporters implementations -OpenIDE-Module-Name=Preview Export +OpenIDE-Module-Long-Description=Vector exporters implementations OpenIDE-Module-Short-Description=Vector exporters implementations ExporterPDF_name = PDF diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_ar.properties b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_ca.properties b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_ca.properties new file mode 100644 index 0000000000..563c069651 --- /dev/null +++ b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_ca.properties @@ -0,0 +1,8 @@ +OpenIDE-Module-Long-Description=Implementacions dels exportadors de vectors +OpenIDE-Module-Short-Description=Implementacions dels exportadors de vectors +ExporterPDF_name=PDF +fileType_PDF_Name=Fitxers PDF +fileType_SVG_Name=Fitxers SVG +ExporterSVG_name=SVG +fileType_PNG_Name=Fitxers PNG +ExporterPDF.font.registration=Registering system fonts diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_cs.properties b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_cs.properties index 2a664ae790..b055b31bab 100644 --- a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_cs.properties +++ b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_cs.properties @@ -1,23 +1,12 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-29 19\:41+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=Zaveden\u00ed export\u00e9r\u016f vektor\u016f - -OpenIDE-Module-Short-Description=Zaveden\u00ed export\u00e9r\u016f vektor\u016f - -ExporterPDF_name=PDF - -fileType_PDF_Name=Soubory PDF - -fileType_SVG_Name=Soubory SVG - -ExporterSVG_name=SVG - -fileType_PNG_Name=Soubory PNG - -ExporterPDF.font.registration=Zji\u0161\u0165ov\u00e1n\u00ed p\u00edsem syst\u00e9mu +OpenIDE-Module-Long-Description=Zavedenν exportιr\u016f vektor\u016f +OpenIDE-Module-Short-Description=Zavedenν exportιr\u016f vektor\u016f + +ExporterPDF_name = PDF +fileType_PDF_Name = Soubory PDF + +fileType_SVG_Name = Soubory SVG +ExporterSVG_name = SVG + +fileType_PNG_Name = Soubory PNG + +ExporterPDF.font.registration = Zji\u0161\u0165ovαnν pνsem systιmu diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_de.properties b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_de.properties new file mode 100644 index 0000000000..6bf54e6e9c --- /dev/null +++ b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_de.properties @@ -0,0 +1,12 @@ +OpenIDE-Module-Long-Description=Vektor-Exporter Implementierungen +OpenIDE-Module-Short-Description=Vektor-Exporter Implementierungen + +ExporterPDF_name = PDF +fileType_PDF_Name = PDF Dateien + +fileType_SVG_Name = SVG Dateien +ExporterSVG_name = SVG + +fileType_PNG_Name = PNG Dateien + +ExporterPDF.font.registration = Systemschriftarten registrieren diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_es.properties b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_es.properties index 3721ebd37f..66a5931382 100644 --- a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_es.properties +++ b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_es.properties @@ -1,24 +1,12 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-15 13\:22+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Implementaciones de los exportadores vectoriales - -OpenIDE-Module-Short-Description=Implementaciones de los exportadores vectoriales - -ExporterPDF_name=PDF - -fileType_PDF_Name=Archivos PDF - -fileType_SVG_Name=Archivos SVG - -ExporterSVG_name=SVG - -fileType_PNG_Name=Archivos PNG - -ExporterPDF.font.registration=Registrando fuentes del sistema +OpenIDE-Module-Long-Description=Implementaciones de los exportadores vectoriales +OpenIDE-Module-Short-Description=Implementaciones de los exportadores vectoriales + +ExporterPDF_name = PDF +fileType_PDF_Name = Archivos PDF + +fileType_SVG_Name = Archivos SVG +ExporterSVG_name = SVG + +fileType_PNG_Name = Archivos PNG + +ExporterPDF.font.registration = Registrando fuentes del sistema diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_fr.properties b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_fr.properties index ca0ee50bbb..dfe73d3ae4 100644 --- a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_fr.properties +++ b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_fr.properties @@ -1,24 +1,12 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-17 10\:14+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Impl\u00e9mentation des exports vectoriels - -OpenIDE-Module-Short-Description=Impl\u00e9mentation des exports vectoriels - -ExporterPDF_name=PDF - -fileType_PDF_Name=Fichiers PDF - -fileType_SVG_Name=Fichiers SVG - -ExporterSVG_name=SVG - -fileType_PNG_Name=Fichiers PNG - -ExporterPDF.font.registration=Inscrire les fonts du syst\u00e8me +OpenIDE-Module-Long-Description=Implιmentation des exports vectoriels +OpenIDE-Module-Short-Description=Implιmentation des exports vectoriels + +ExporterPDF_name = PDF +fileType_PDF_Name = Fichiers PDF + +fileType_SVG_Name = Fichiers SVG +ExporterSVG_name = SVG + +fileType_PNG_Name = Fichiers PNG + +ExporterPDF.font.registration = Inscrire les fonts du systθme diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_he.properties b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_he.properties new file mode 100644 index 0000000000..6bd2e94e50 --- /dev/null +++ b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_he.properties @@ -0,0 +1,8 @@ +OpenIDE-Module-Long-Description=Vector exporters implementations +OpenIDE-Module-Short-Description=Vector exporters implementations +ExporterPDF_name=PDF +fileType_PDF_Name=PDF Files +fileType_SVG_Name=SVG Files +ExporterSVG_name=SVG +fileType_PNG_Name=PNG Files +ExporterPDF.font.registration=Registering system fonts diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_hu.properties b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_hu.properties new file mode 100644 index 0000000000..b16bde5869 --- /dev/null +++ b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_hu.properties @@ -0,0 +1,10 @@ + + +ExporterPDF_name=PDF +ExporterPDF.font.registration=Rendszer bet\u0171t\u00EDpusok regisztr\u00E1l\u00E1sa +fileType_SVG_Name=SVG f\u00E1jlok +ExporterSVG_name=SVG +fileType_PNG_Name=PNG f\u00E1jlok +OpenIDE-Module-Short-Description=Vektor export\u0151r\u00F6k megval\u00F3s\u00EDt\u00E1sai +OpenIDE-Module-Long-Description=Vektor export\u0151r\u00F6k megval\u00F3s\u00EDt\u00E1sai +fileType_PDF_Name=PDF f\u00E1jlok diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_it.properties b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_it.properties new file mode 100644 index 0000000000..6bd2e94e50 --- /dev/null +++ b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_it.properties @@ -0,0 +1,8 @@ +OpenIDE-Module-Long-Description=Vector exporters implementations +OpenIDE-Module-Short-Description=Vector exporters implementations +ExporterPDF_name=PDF +fileType_PDF_Name=PDF Files +fileType_SVG_Name=SVG Files +ExporterSVG_name=SVG +fileType_PNG_Name=PNG Files +ExporterPDF.font.registration=Registering system fonts diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_ja.properties b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_ja.properties index 112b19c102..652ce145c9 100644 --- a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_ja.properties +++ b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_ja.properties @@ -1,23 +1,12 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-18 09\:20+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u30d9\u30af\u30c8\u30eb\u30a8\u30af\u30b9\u30dd\u30fc\u30bf\u306e\u5b9f\u88c5 - -OpenIDE-Module-Short-Description=\u30d9\u30af\u30c8\u30eb\u30a8\u30af\u30b9\u30dd\u30fc\u30bf\u306e\u5b9f\u88c5 - -ExporterPDF_name=PDF - -fileType_PDF_Name=PDF\u30d5\u30a1\u30a4\u30eb - -fileType_SVG_Name=SVG\u30d5\u30a1\u30a4\u30eb - -ExporterSVG_name=SVG - -fileType_PNG_Name=PNG\u30d5\u30a1\u30a4\u30eb - -ExporterPDF.font.registration=\u30b7\u30b9\u30c6\u30e0\u30d5\u30a9\u30f3\u30c8\u3092\u767b\u9332\u4e2d +OpenIDE-Module-Long-Description=\u30d9\u30af\u30c8\u30eb\u30a8\u30af\u30b9\u30dd\u30fc\u30bf\u306e\u5b9f\u88c5 +OpenIDE-Module-Short-Description=\u30d9\u30af\u30c8\u30eb\u30a8\u30af\u30b9\u30dd\u30fc\u30bf\u306e\u5b9f\u88c5 + +ExporterPDF_name = PDF +fileType_PDF_Name = PDF\u30d5\u30a1\u30a4\u30eb + +fileType_SVG_Name = SVG\u30d5\u30a1\u30a4\u30eb +ExporterSVG_name = SVG + +fileType_PNG_Name = PNG\u30d5\u30a1\u30a4\u30eb + +ExporterPDF.font.registration = \u30b7\u30b9\u30c6\u30e0\u30d5\u30a9\u30f3\u30c8\u3092\u767b\u9332\u4e2d diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_ko.properties b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_ko.properties new file mode 100644 index 0000000000..75a11ab552 --- /dev/null +++ b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_ko.properties @@ -0,0 +1,10 @@ + + +ExporterPDF_name=PDF +ExporterPDF.font.registration=\uC2DC\uC2A4\uD15C \uAE00\uAF34 \uB4F1\uB85D\uD558\uAE30 +fileType_SVG_Name=SVG \uD30C\uC77C +ExporterSVG_name=SVG +fileType_PNG_Name=PNG \uD30C\uC77C +OpenIDE-Module-Short-Description=\uBCA1\uD130 \uB0B4\uBCF4\uB0B4\uAE30 \uB3C4\uAD6C \uAD6C\uD604 +OpenIDE-Module-Long-Description=\uBCA1\uD130 \uB0B4\uBCF4\uB0B4\uAE30 \uB3C4\uAD6C \uAD6C\uD604 +fileType_PDF_Name=PDF \uD30C\uC77C diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_nl.properties b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_nl.properties new file mode 100644 index 0000000000..b55ca6ae8e --- /dev/null +++ b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_nl.properties @@ -0,0 +1,8 @@ +OpenIDE-Module-Long-Description=Vector exporters implementations +OpenIDE-Module-Short-Description=Vector exporters implementations +ExporterPDF_name=PDF +fileType_PDF_Name=PDF-bestanden +fileType_SVG_Name=SVG-bestanden +ExporterSVG_name=SVG +fileType_PNG_Name=PNG-bestanden +ExporterPDF.font.registration=Registering system fonts diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_oc.properties b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_oc.properties index e6e3b104e3..553df504a9 100644 --- a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_oc.properties +++ b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_oc.properties @@ -1,20 +1,8 @@ -# Occitan (post 1500) translation for gephi -# Copyright (c) 2010 Rosetta Contributors and Canonical Ltd 2010 -# This file is distributed under the same license as the gephi package. -# FIRST AUTHOR , 2010. -# -!=Project-Id-Version\: gephi\nReport-Msgid-Bugs-To\: FULL NAME \nPOT-Creation-Date\: 2010-04-07 13\:16+0200\nPO-Revision-Date\: 2010-10-24 10\:10+0000\nLast-Translator\: C\u00e9dric VALMARY (Tot en \u00f2c) \nLanguage-Team\: Occitan (post 1500) \nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nX-Launchpad-Export-Date\: 2011-03-13 04\:48+0000\nX-Generator\: Launchpad (build 12559)\n - OpenIDE-Module-Long-Description=Algoritmes de basa en teoria dels grafes - -OpenIDE-Module-Short-Description=Int\u00e8gra los generadors dins l'interf\u00e0cia d'utilizaire - -!fileType_PDF_Name= - -!ExporterPDF_name= - -!fileType_SVG_Name= - -!ExporterSVG_name= - -!fileType_PNG_Name = \ No newline at end of file +OpenIDE-Module-Short-Description=Intθgra los generadors dins l'interfΰcia d'utilizaire +ExporterPDF_name=PDF +fileType_PDF_Name=PDF Files +fileType_SVG_Name=SVG Files +ExporterSVG_name=SVG +fileType_PNG_Name=PNG Files +ExporterPDF.font.registration=Registering system fonts diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_pt_BR.properties b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_pt_BR.properties index c1dead0694..e24d251d0f 100644 --- a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_pt_BR.properties +++ b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_pt_BR.properties @@ -1,23 +1,12 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-17 16\:32+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Implementa\u00e7\u00f5es dos exportadores vetoriais - -OpenIDE-Module-Short-Description=Implementa\u00e7\u00f5es dos exportadores vetoriais - -ExporterPDF_name=PDF - -fileType_PDF_Name=Arquivos PDF - -fileType_SVG_Name=Arquivos SVG - -ExporterSVG_name=SVG - -fileType_PNG_Name=Arquivos PNG - -ExporterPDF.font.registration=Registrando fontes do sistema +OpenIDE-Module-Long-Description=Implementaηυes dos exportadores vetoriais +OpenIDE-Module-Short-Description=Implementaηυes dos exportadores vetoriais + +ExporterPDF_name = PDF +fileType_PDF_Name = Arquivos PDF + +fileType_SVG_Name = Arquivos SVG +ExporterSVG_name = SVG + +fileType_PNG_Name = Arquivos PNG + +ExporterPDF.font.registration = Registrando fontes do sistema diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_ro.properties b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_ro.properties new file mode 100644 index 0000000000..c39bc7d343 --- /dev/null +++ b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_ro.properties @@ -0,0 +1,10 @@ + + +OpenIDE-Module-Long-Description=Implement\u0103ri de exportatori vectoriali +OpenIDE-Module-Short-Description=Implement\u0103ri de exportatori vectoriali +fileType_SVG_Name=Fi\u0219iere SVG +ExporterSVG_name=SVG +fileType_PNG_Name=Fi\u0219iere PNG +ExporterPDF.font.registration=Se \u00EEnregistreaz\u0103 fonturile de sistem +ExporterPDF_name=PDF +fileType_PDF_Name=Fi\u0219iere PDF diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_ru.properties b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_ru.properties index 949d568f49..28689fbf93 100644 --- a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_ru.properties +++ b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_ru.properties @@ -1,23 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-06 06\:48+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - OpenIDE-Module-Long-Description=Vector exporters implementations - OpenIDE-Module-Short-Description=Vector exporters implementations - ExporterPDF_name=PDF - fileType_PDF_Name=\u0424\u0430\u0439\u043b\u044b PDF - fileType_SVG_Name=\u0424\u0430\u0439\u043b\u044b SVG - ExporterSVG_name=SVG - fileType_PNG_Name=\u0424\u0430\u0439\u043b\u044b PNG - ExporterPDF.font.registration=\u0420\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u043d\u044b\u0445 \u0448\u0440\u0438\u0444\u0442\u043e\u0432 diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_th.properties b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_tr.properties b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_tr.properties new file mode 100644 index 0000000000..6bd2e94e50 --- /dev/null +++ b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_tr.properties @@ -0,0 +1,8 @@ +OpenIDE-Module-Long-Description=Vector exporters implementations +OpenIDE-Module-Short-Description=Vector exporters implementations +ExporterPDF_name=PDF +fileType_PDF_Name=PDF Files +fileType_SVG_Name=SVG Files +ExporterSVG_name=SVG +fileType_PNG_Name=PNG Files +ExporterPDF.font.registration=Registering system fonts diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_uk.properties b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_uk.properties new file mode 100644 index 0000000000..c7bf557061 --- /dev/null +++ b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_uk.properties @@ -0,0 +1,8 @@ +fileType_SVG_Name=\u0424\u0430\u0439\u043B\u0438 SVG +OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043B\u0456\u0437\u0430\u0446\u0456\u0457 \u0432\u0435\u043A\u0442\u043E\u0440\u043D\u0438\u0445 \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u0435\u0440\u0456\u0432 +fileType_PDF_Name=PDF \u0444\u0430\u0439\u043B\u0438 +ExporterPDF_name=PDF +ExporterSVG_name=SVG +fileType_PNG_Name=\u0424\u0430\u0439\u043B\u0438 PNG +ExporterPDF.font.registration=\u0420\u0435\u0454\u0441\u0442\u0440\u0430\u0446\u0456\u044F \u0441\u0438\u0441\u0442\u0435\u043C\u043D\u0438\u0445 \u0448\u0440\u0438\u0444\u0442\u0456\u0432 +OpenIDE-Module-Long-Description=\u0420\u0435\u0430\u043B\u0456\u0437\u0430\u0446\u0456\u0457 \u0432\u0435\u043A\u0442\u043E\u0440\u043D\u0438\u0445 \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u0435\u0440\u0456\u0432 diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_zh_CN.properties b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_zh_CN.properties index 63c616e6ef..00be10c6c0 100644 --- a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_zh_CN.properties +++ b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_zh_CN.properties @@ -1,22 +1,8 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:09+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - OpenIDE-Module-Long-Description=\u77e2\u91cf\u5bfc\u51fa\u5668\u5b9e\u73b0 - OpenIDE-Module-Short-Description=\u77e2\u91cf\u5bfc\u51fa\u5668\u5b9e\u73b0 - ExporterPDF_name=PDF - -fileType_PDF_Name=PDF\u6587\u4ef6 - -fileType_SVG_Name=SVG\u6587\u4ef6 - +fileType_PDF_Name=PDF \u6587\u4EF6 +fileType_SVG_Name=SVG \u6587\u4EF6 ExporterSVG_name=SVG - -fileType_PNG_Name=PNG\u6587\u4ef6 - +fileType_PNG_Name=PNG \u6587\u4EF6 ExporterPDF.font.registration=\u6ce8\u518c\u7cfb\u7edf\u5b57\u4f53 diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_zh_TW.properties b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_zh_TW.properties new file mode 100644 index 0000000000..6bd2e94e50 --- /dev/null +++ b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/Bundle_zh_TW.properties @@ -0,0 +1,8 @@ +OpenIDE-Module-Long-Description=Vector exporters implementations +OpenIDE-Module-Short-Description=Vector exporters implementations +ExporterPDF_name=PDF +fileType_PDF_Name=PDF Files +fileType_SVG_Name=SVG Files +ExporterSVG_name=SVG +fileType_PNG_Name=PNG Files +ExporterPDF.font.registration=Registering system fonts diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/cs.po b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/cs.po deleted file mode 100644 index 6223226c4a..0000000000 --- a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/cs.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-29 19:41+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ZavedenΓ­ exportΓ©rΕ― vektorΕ―" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ZavedenΓ­ exportΓ©rΕ― vektorΕ―" - -msgid "ExporterPDF_name" -msgstr "PDF" - -msgid "fileType_PDF_Name" -msgstr "Soubory PDF" - -msgid "fileType_SVG_Name" -msgstr "Soubory SVG" - -msgid "ExporterSVG_name" -msgstr "SVG" - -msgid "fileType_PNG_Name" -msgstr "Soubory PNG" - -msgid "ExporterPDF.font.registration" -msgstr "ZjiΕ‘Ε₯ovΓ‘nΓ­ pΓ­sem systΓ©mu" diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/es.po b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/es.po deleted file mode 100644 index f6c87b62ff..0000000000 --- a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/es.po +++ /dev/null @@ -1,44 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-15 13:22+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Implementaciones de los exportadores vectoriales" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implementaciones de los exportadores vectoriales" - -msgid "ExporterPDF_name" -msgstr "PDF" - -msgid "fileType_PDF_Name" -msgstr "Archivos PDF" - -msgid "fileType_SVG_Name" -msgstr "Archivos SVG" - -msgid "ExporterSVG_name" -msgstr "SVG" - -msgid "fileType_PNG_Name" -msgstr "Archivos PNG" - -msgid "ExporterPDF.font.registration" -msgstr "Registrando fuentes del sistema" diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/fr.po b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/fr.po deleted file mode 100644 index c62c4ad25f..0000000000 --- a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/fr.po +++ /dev/null @@ -1,44 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-17 10:14+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ImplΓ©mentation des exports vectoriels" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplΓ©mentation des exports vectoriels" - -msgid "ExporterPDF_name" -msgstr "PDF" - -msgid "fileType_PDF_Name" -msgstr "Fichiers PDF" - -msgid "fileType_SVG_Name" -msgstr "Fichiers SVG" - -msgid "ExporterSVG_name" -msgstr "SVG" - -msgid "fileType_PNG_Name" -msgstr "Fichiers PNG" - -msgid "ExporterPDF.font.registration" -msgstr "Inscrire les fonts du systΓ¨me" diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/ja.po b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/ja.po deleted file mode 100644 index 1f2af0877a..0000000000 --- a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/ja.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-18 09:20+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "γƒ™γ‚―γƒˆγƒ«γ‚¨γ‚―γ‚ΉγƒγƒΌγ‚ΏγεŸθ£…" - -msgid "OpenIDE-Module-Short-Description" -msgstr "γƒ™γ‚―γƒˆγƒ«γ‚¨γ‚―γ‚ΉγƒγƒΌγ‚ΏγεŸθ£…" - -msgid "ExporterPDF_name" -msgstr "PDF" - -msgid "fileType_PDF_Name" -msgstr "PDFフゑむル" - -msgid "fileType_SVG_Name" -msgstr "SVGフゑむル" - -msgid "ExporterSVG_name" -msgstr "SVG" - -msgid "fileType_PNG_Name" -msgstr "PNGフゑむル" - -msgid "ExporterPDF.font.registration" -msgstr "γ‚·γ‚Ήγƒ†γƒ γƒ•γ‚©γƒ³γƒˆγ‚’η™»ιŒ²δΈ­" diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/org-gephi-io-exporter-preview.pot b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/org-gephi-io-exporter-preview.pot deleted file mode 100644 index 41632a9ebc..0000000000 --- a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/org-gephi-io-exporter-preview.pot +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Vector exporters implementations" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Vector exporters implementations" - -msgid "ExporterPDF_name" -msgstr "PDF" - -msgid "fileType_PDF_Name" -msgstr "PDF Files" - -msgid "fileType_SVG_Name" -msgstr "SVG Files" - -msgid "ExporterSVG_name" -msgstr "SVG" - -msgid "fileType_PNG_Name" -msgstr "PNG Files" - -msgid "ExporterPDF.font.registration" -msgstr "Registering system fonts" diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/pt_BR.po b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/pt_BR.po deleted file mode 100644 index 19d0b44c63..0000000000 --- a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/pt_BR.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-17 16:32+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ImplementaΓ§Γ΅es dos exportadores vetoriais" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplementaΓ§Γ΅es dos exportadores vetoriais" - -msgid "ExporterPDF_name" -msgstr "PDF" - -msgid "fileType_PDF_Name" -msgstr "Arquivos PDF" - -msgid "fileType_SVG_Name" -msgstr "Arquivos SVG" - -msgid "ExporterSVG_name" -msgstr "SVG" - -msgid "fileType_PNG_Name" -msgstr "Arquivos PNG" - -msgid "ExporterPDF.font.registration" -msgstr "Registrando fontes do sistema" diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/ru.po b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/ru.po deleted file mode 100644 index 0aff1a8b69..0000000000 --- a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/ru.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-06 06:48+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Vector exporters implementations" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Vector exporters implementations" - -msgid "ExporterPDF_name" -msgstr "PDF" - -msgid "fileType_PDF_Name" -msgstr "Π€Π°ΠΉΠ»Ρ‹ PDF" - -msgid "fileType_SVG_Name" -msgstr "Π€Π°ΠΉΠ»Ρ‹ SVG" - -msgid "ExporterSVG_name" -msgstr "SVG" - -msgid "fileType_PNG_Name" -msgstr "Π€Π°ΠΉΠ»Ρ‹ PNG" - -msgid "ExporterPDF.font.registration" -msgstr "РСгистрация систСмных ΡˆΡ€ΠΈΡ„Ρ‚ΠΎΠ²" diff --git a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/zh_CN.po b/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/zh_CN.po deleted file mode 100644 index a1728fa00e..0000000000 --- a/modules/PreviewExport/src/main/resources/org/gephi/io/exporter/preview/zh_CN.po +++ /dev/null @@ -1,42 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:09+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ηŸ’ι‡ε―Όε‡Ίε™¨εžηް" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ηŸ’ι‡ε―Όε‡Ίε™¨εžηް" - -msgid "ExporterPDF_name" -msgstr "PDF" - -msgid "fileType_PDF_Name" -msgstr "PDFζ–‡δ»Ά" - -msgid "fileType_SVG_Name" -msgstr "SVGζ–‡δ»Ά" - -msgid "ExporterSVG_name" -msgstr "SVG" - -msgid "fileType_PNG_Name" -msgstr "PNGζ–‡δ»Ά" - -msgid "ExporterPDF.font.registration" -msgstr "ζ³¨ε†Œη³»η»Ÿε­—δ½“" diff --git a/modules/PreviewExport/src/test/java/org/gephi/io/exporter/preview/ExporterTest.java b/modules/PreviewExport/src/test/java/org/gephi/io/exporter/preview/ExporterTest.java new file mode 100644 index 0000000000..e6ab55ba46 --- /dev/null +++ b/modules/PreviewExport/src/test/java/org/gephi/io/exporter/preview/ExporterTest.java @@ -0,0 +1,176 @@ +package org.gephi.io.exporter.preview; + +import java.awt.Color; +import java.awt.Font; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.util.List; +import java.util.Random; +import org.gephi.graph.GraphGenerator; +import org.gephi.graph.api.DirectedGraph; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; +import org.gephi.preview.api.PreviewController; +import org.gephi.preview.api.PreviewProperties; +import org.gephi.preview.api.PreviewProperty; +import org.gephi.preview.types.DependantOriginalColor; +import org.gephi.preview.types.EdgeColor; +import org.gephi.project.api.Workspace; +import org.junit.Assert; +import org.junit.Test; +import org.openide.util.Lookup; + +public class ExporterTest { + + private Workspace createRandomGraph() { + // Create a random graph to test that exporters work + Workspace workspace = GraphGenerator.build() + .generateSmallRandomGraph().addRandomPositions().getWorkspace(); + + Random random = new Random(); + for (Node node : workspace.getLookup().lookup(GraphModel.class).getGraph().getNodes()) { + float alpha = Math.max(0.25f, random.nextFloat()); + node.setColor(new Color(random.nextFloat(), random.nextFloat(), random.nextFloat(), alpha)); + node.setLabel("Node" + node.getId()); + } + + PreviewController previewController = Lookup.getDefault().lookup(PreviewController.class); + PreviewProperties props = previewController.getModel(workspace).getProperties(); + props.putValue(PreviewProperty.BACKGROUND_COLOR, Color.CYAN); + props.putValue(PreviewProperty.NODE_PER_NODE_OPACITY, Boolean.TRUE); + props.putValue(PreviewProperty.EDGE_CURVED, Boolean.FALSE); + props.putValue(PreviewProperty.SHOW_NODE_LABELS, Boolean.TRUE); + props.putValue(PreviewProperty.NODE_LABEL_COLOR, + new DependantOriginalColor(DependantOriginalColor.Mode.PARENT)); + props.putValue(PreviewProperty.NODE_LABEL_OUTLINE_SIZE, 4); + props.putValue(PreviewProperty.NODE_LABEL_SHOW_BOX, Boolean.TRUE); + props.putValue(PreviewProperty.NODE_LABEL_BOX_OPACITY, 50f); + +// props.putValue(PreviewProperty.NODE_LABEL_FONT, new Font("Arial Unicode MS", Font.PLAIN, 12)); + return workspace; + } + + private Workspace createCondensedNodeGraph() { + GraphGenerator generator = GraphGenerator.build(); + GraphModel graphModel = generator.getGraphModel(); + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + + final Color nodeColor = new Color(0.8f, 0.8f, 0.8f); + final Color edgeColor = new Color(0.8f, 0.1f, 0.1f); + + // Insert pairs of connected nodes with various degrees of closeness and node sizes + final float[] dist = { + 0f, 5f, 5f, 5f, 5f, + 5f, 5f, 6f, 6f, 6f, + 6f, 5f, 7f, 7f, 7f, + 7f, 10f, 14f, 16f, 20f + }; + final float[] r1 = { + 2f, 20f, 10f, 10f, 9f, + 20f, 6f, 20f, 12f, .5f, + 13f, 8f, 8f, 7f, 6f, + 7f, 7f, 7f, 7f, 7f + }; + final float[] r2 = { + 5f, 6f, 4f, 5f, 4f, + 4f, 1f, 4f, 1f, 1f, + 1f, 6f, 4f, 4f, 4f, + 7f, 7f, 7f, 7f, 7f + }; + + float lowest = 0; + final float margin = 10; + for (int i = 0; i < dist.length; i++) { + // Calculate the position of a pair of nodes + // Where the nodes have sizes from r1 and r2, and their centers are dist apart + // Pairs of nodes share the same y-value + final float dy = Math.max(r1[i], r2[i]); + final float x1 = r1[i]; + final float y1 = lowest - dy; + final float x2 = r1[i] + dist[i]; + final float y2 = y1; + + lowest -= dy * 2 + margin; + + // Create the nodes + Node node1 = graphModel.factory().newNode(); + node1.setX(x1); + node1.setY(y1); + node1.setSize(r1[i]); + node1.setColor(nodeColor); + directedGraph.addNode(node1); + Node node2 = graphModel.factory().newNode(); + node2.setX(x2); + node2.setY(y2); + node2.setSize(r2[i]); + node2.setColor(nodeColor); + directedGraph.addNode(node2); + Edge edge = graphModel.factory().newEdge(node1, node2); + directedGraph.addEdge(edge); + } + + generator.addNodeLabels(); + generator.addEdgeLabels(); + + Workspace workspace = generator.getWorkspace(); + PreviewController previewController = Lookup.getDefault().lookup(PreviewController.class); + PreviewProperties props = previewController.getModel(workspace).getProperties(); + props.putValue(PreviewProperty.BACKGROUND_COLOR, Color.DARK_GRAY); + props.putValue(PreviewProperty.NODE_OPACITY, 20f); + props.putValue(PreviewProperty.EDGE_CURVED, Boolean.TRUE); + props.putValue(PreviewProperty.SHOW_EDGE_LABELS, Boolean.TRUE); + props.putValue(PreviewProperty.SHOW_NODE_LABELS, Boolean.TRUE); + props.putValue(PreviewProperty.NODE_LABEL_COLOR, + new DependantOriginalColor(DependantOriginalColor.Mode.PARENT)); + props.putValue(PreviewProperty.NODE_LABEL_FONT, new Font("Arial", Font.PLAIN, 3)); + props.putValue(PreviewProperty.ARROW_SIZE, 2); + props.putValue(PreviewProperty.EDGE_THICKNESS, 1); + props.putValue(PreviewProperty.EDGE_OPACITY, 80); + props.putValue(PreviewProperty.EDGE_COLOR, new EdgeColor(edgeColor)); + + return workspace; + } + + @Test + public void testPDFExporter() throws IOException { + Workspace workspace = createRandomGraph(); + + PDFExporter pdfExporter = new PDFExporter(); + pdfExporter.setWorkspace(workspace); + File tempFile = new File("testPDFExporter.pdf"); + tempFile.deleteOnExit(); + FileOutputStream fos = new FileOutputStream(tempFile); + pdfExporter.setOutputStream(fos); + pdfExporter.execute(); + fos.close(); + + Assert.assertTrue(tempFile.length() > 0); + } + + @Test + public void testSVGExporter() throws IOException { + Workspace workspace = createCondensedNodeGraph(); + + SVGExporter svgExporter = new SVGExporter(); + svgExporter.setWorkspace(workspace); + File tempFile = new File("testSVGExporter.svg"); + Writer writer = new OutputStreamWriter(new FileOutputStream(tempFile), StandardCharsets.UTF_8); + tempFile.deleteOnExit(); + svgExporter.setWriter(writer); + svgExporter.execute(); + + Assert.assertTrue(tempFile.length() > 0); + + List contents = Files.readAllLines(tempFile.toPath()); + for (String line : contents) { + // NaN is not a valid number, should not be found in path d, or text x/y + Assert.assertFalse(line.contains("NaN")); + } + } +} diff --git a/modules/PreviewExportUI/pom.xml b/modules/PreviewExportUI/pom.xml index 4e78c80ca1..25c87e5fa7 100644 --- a/modules/PreviewExportUI/pom.xml +++ b/modules/PreviewExportUI/pom.xml @@ -4,13 +4,12 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. - org.gephi preview-export-ui - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm PreviewExportUI @@ -46,14 +45,14 @@ ${project.groupId} - lib.validation + ui-utils - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/AbstractExporterSettings.java b/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/AbstractExporterSettings.java new file mode 100644 index 0000000000..6f193507d6 --- /dev/null +++ b/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/AbstractExporterSettings.java @@ -0,0 +1,31 @@ +package org.gephi.ui.exporter.preview; + +import org.openide.util.NbPreferences; + +public abstract class AbstractExporterSettings { + + protected boolean get(String name, boolean defaultValue) { + return NbPreferences.forModule(AbstractExporterSettings.class).getBoolean(name, defaultValue); + } + + protected void put(String name, boolean value) { + NbPreferences.forModule(AbstractExporterSettings.class).putBoolean(name, value); + } + + protected int get(String name, int defaultValue) { + return NbPreferences.forModule(AbstractExporterSettings.class).getInt(name, defaultValue); + } + + protected void put(String name, int value) { + NbPreferences.forModule(AbstractExporterSettings.class).putInt(name, value); + } + + protected float get(String name, float defaultValue) { + return NbPreferences.forModule(AbstractExporterSettings.class).getFloat(name, defaultValue); + } + + protected void put(String name, float value) { + NbPreferences.forModule(AbstractExporterSettings.class).putFloat(name, value); + } +} + diff --git a/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/UIExporterPDF.java b/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/UIExporterPDF.java index 616b786423..2acc1849c9 100644 --- a/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/UIExporterPDF.java +++ b/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/UIExporterPDF.java @@ -39,51 +39,100 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.exporter.preview; import javax.swing.JPanel; +import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.gephi.io.exporter.preview.PDFExporter; import org.gephi.io.exporter.spi.Exporter; import org.gephi.io.exporter.spi.ExporterUI; -import org.netbeans.validation.api.ui.ValidationPanel; +import org.netbeans.validation.api.ui.swing.ValidationPanel; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = ExporterUI.class) public class UIExporterPDF implements ExporterUI { + private final ExporterPDFSettings settings = new ExporterPDFSettings(); private UIExporterPDFPanel panel; private ValidationPanel validationPanel; private PDFExporter exporterPDF; + @Override public void setup(Exporter exporter) { exporterPDF = (PDFExporter) exporter; - panel.setup(exporterPDF); + settings.load(exporterPDF); + if (panel != null) { + panel.setup(exporterPDF); + } } + @Override public void unsetup(boolean update) { if (update) { panel.unsetup(exporterPDF); + settings.save(exporterPDF); } panel = null; exporterPDF = null; } + @Override public JPanel getPanel() { panel = new UIExporterPDFPanel(); validationPanel = UIExporterPDFPanel.createValidationPanel(panel); return validationPanel; } + @Override public boolean isUIForExporter(Exporter exporter) { return exporter instanceof PDFExporter; } + @Override public String getDisplayName() { return NbBundle.getMessage(UIExporterPDF.class, "UIExporterPDF.name"); } + + private static class ExporterPDFSettings extends AbstractExporterSettings { + + // Preference names + private final static String MARGIN_TOP = "PDF_marginTop"; + private final static String MARGIN_BOTTOM = "PDF_marginBottom"; + private final static String MARGIN_LEFT = "PDF_marginLeft"; + private final static String MARGIN_RIGHT = "PDF_marginRight"; + private final static String LANDSCAPE = "PDF_landscape"; + private final static String PAGE_SIZE_WIDTH = "PDF_pageSizeWidth"; + private final static String PAGE_SIZE_HEIGHT = "PDF_pageSizeHeight"; + private final static String TRANSPARENT_BACKGROUND = "PDF_transparentBackground"; + // Default + private final static PDFExporter DEFAULT = new PDFExporter(); + + private void load(PDFExporter exporter) { + exporter.setMarginTop(get(MARGIN_TOP, DEFAULT.getMarginTop())); + exporter.setMarginBottom(get(MARGIN_BOTTOM, DEFAULT.getMarginBottom())); + exporter.setMarginLeft(get(MARGIN_LEFT, DEFAULT.getMarginLeft())); + exporter.setMarginRight(get(MARGIN_RIGHT, DEFAULT.getMarginRight())); + exporter.setLandscape(get(LANDSCAPE, DEFAULT.isLandscape())); + float width = get(PAGE_SIZE_WIDTH, DEFAULT.getPageSize().getWidth()); + float height = get(PAGE_SIZE_HEIGHT, DEFAULT.getPageSize().getHeight()); + exporter.setPageSize(new PDRectangle(width, height)); + exporter.setTransparentBackground(get(TRANSPARENT_BACKGROUND, DEFAULT.isTransparentBackground())); + } + + private void save(PDFExporter exporter) { + put(MARGIN_TOP, exporter.getMarginTop()); + put(MARGIN_BOTTOM, exporter.getMarginBottom()); + put(MARGIN_LEFT, exporter.getMarginLeft()); + put(MARGIN_RIGHT, exporter.getMarginRight()); + put(LANDSCAPE, exporter.isLandscape()); + put(PAGE_SIZE_WIDTH, exporter.getPageSize().getWidth()); + put(PAGE_SIZE_HEIGHT, exporter.getPageSize().getHeight()); + put(TRANSPARENT_BACKGROUND, exporter.isTransparentBackground()); + } + } } diff --git a/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/UIExporterPDFPanel.form b/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/UIExporterPDFPanel.form index 83e77d6e50..3b52836f91 100644 --- a/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/UIExporterPDFPanel.form +++ b/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/UIExporterPDFPanel.form @@ -1,4 +1,4 @@ - +
            @@ -23,67 +23,75 @@ - - - - - + - - - - + + + + - - - + + + + + + + + + + + + + + - + - - + + - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + - - - - - + + + + + + + @@ -136,7 +144,12 @@ - + + + + + + @@ -311,5 +324,19 @@ + + + + + + + + + + + + + + diff --git a/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/UIExporterPDFPanel.java b/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/UIExporterPDFPanel.java index e7d83a6b53..5f642d2f35 100644 --- a/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/UIExporterPDFPanel.java +++ b/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/UIExporterPDFPanel.java @@ -39,10 +39,9 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.exporter.preview; -import com.itextpdf.text.PageSize; -import com.itextpdf.text.Rectangle; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; @@ -51,18 +50,18 @@ Development and Distribution License("CDDL") (collectively, the import java.text.ParseException; import javax.swing.AbstractAction; import javax.swing.DefaultComboBoxModel; +import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.gephi.io.exporter.preview.PDFExporter; import org.gephi.lib.validation.ValidationClient; import org.netbeans.validation.api.Problems; import org.netbeans.validation.api.Validator; -import org.netbeans.validation.api.builtin.Validators; +import org.netbeans.validation.api.builtin.stringvalidation.StringValidators; import org.netbeans.validation.api.ui.ValidationGroup; -import org.netbeans.validation.api.ui.ValidationPanel; +import org.netbeans.validation.api.ui.swing.ValidationPanel; import org.openide.util.NbBundle; import org.openide.util.NbPreferences; /** - * * @author Mathieu Bastian */ public class UIExporterPDFPanel extends javax.swing.JPanel implements ValidationClient { @@ -70,9 +69,36 @@ public class UIExporterPDFPanel extends javax.swing.JPanel implements Validation private static final double INCH = 72.0; private static final double MM = 2.8346456692895527; private final String customSizeString; + private final NumberFormat sizeFormatter; + private final NumberFormat marginFormatter; private boolean millimeter = true; - private NumberFormat sizeFormatter; - private NumberFormat marginFormatter; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JTextField bottomMarginTextField; + private javax.swing.JTextField heightTextField; + private javax.swing.JLabel heightUnitLabel; + private javax.swing.JLabel labelBackground; + private javax.swing.JLabel labelBottom; + private javax.swing.JLabel labelHeight; + private javax.swing.JLabel labelLeft; + private javax.swing.JLabel labelMargins; + private javax.swing.JLabel labelOrientation; + private javax.swing.JLabel labelPageSize; + private javax.swing.JLabel labelRight; + private javax.swing.JLabel labelTop; + private javax.swing.JLabel labelUnit; + private javax.swing.JLabel labelWidth; + private javax.swing.JRadioButton landscapeRadio; + private javax.swing.JTextField leftMarginTextField; + private javax.swing.ButtonGroup orientationButtonGroup; + private javax.swing.JComboBox pageSizeCombo; + private javax.swing.JRadioButton portraitRadio; + private javax.swing.JTextField rightMargintextField; + private javax.swing.JTextField topMarginTextField; + private javax.swing.JCheckBox transparentBackgroundCheckbox; + private org.jdesktop.swingx.JXHyperlink unitLink; + private javax.swing.JTextField widthTextField; + private javax.swing.JLabel widthUnitLabel; + // End of variables declaration//GEN-END:variables public UIExporterPDFPanel() { initComponents(); @@ -84,27 +110,14 @@ public UIExporterPDFPanel() { //Page size model - http://en.wikipedia.org/wiki/Paper_size DefaultComboBoxModel comboBoxModel = new DefaultComboBoxModel(); - comboBoxModel.addElement(new PageSizeItem(PageSize.A0, "A0", 841, 1189, 33.1, 46.8)); - comboBoxModel.addElement(new PageSizeItem(PageSize.A1, "A1", 594, 841, 23.4, 33.1)); - comboBoxModel.addElement(new PageSizeItem(PageSize.A2, "A2", 420, 594, 16.5, 23.4)); - comboBoxModel.addElement(new PageSizeItem(PageSize.A3, "A3", 297, 420, 11.7, 16.5)); - comboBoxModel.addElement(new PageSizeItem(PageSize.A4, "A4", 210, 297, 8.3, 11.7)); - comboBoxModel.addElement(new PageSizeItem(PageSize.A5, "A5", 148, 210, 5.8, 8.3)); - comboBoxModel.addElement(new PageSizeItem(PageSize.ARCH_A, "ARCH A", 229, 305, 9, 12)); - comboBoxModel.addElement(new PageSizeItem(PageSize.ARCH_B, "ARCH B", 305, 457, 12, 18)); - comboBoxModel.addElement(new PageSizeItem(PageSize.ARCH_C, "ARCH C", 457, 610, 18, 24)); - comboBoxModel.addElement(new PageSizeItem(PageSize.ARCH_D, "ARCH D", 610, 914, 24, 36)); - comboBoxModel.addElement(new PageSizeItem(PageSize.ARCH_E, "ARCH E", 914, 1219, 36, 48)); - comboBoxModel.addElement(new PageSizeItem(PageSize.B0, "B0", 1000, 1414, 39.4, 55.7)); - comboBoxModel.addElement(new PageSizeItem(PageSize.B1, "B1", 707, 1000, 27.8, 39.4)); - comboBoxModel.addElement(new PageSizeItem(PageSize.B2, "B2", 500, 707, 19.7, 27.8)); - comboBoxModel.addElement(new PageSizeItem(PageSize.B3, "B3", 353, 500, 13.9, 19.7)); - comboBoxModel.addElement(new PageSizeItem(PageSize.B4, "B4", 250, 353, 9.8, 13.9)); - comboBoxModel.addElement(new PageSizeItem(PageSize.B5, "B5", 176, 250, 6.9, 9.8)); - comboBoxModel.addElement(new PageSizeItem(PageSize.LEDGER, "Ledger", 432, 279, 17, 11)); - comboBoxModel.addElement(new PageSizeItem(PageSize.LEGAL, "Legal", 216, 356, 8.5, 14)); - comboBoxModel.addElement(new PageSizeItem(PageSize.LETTER, "Letter", 216, 279, 8.5, 11)); - comboBoxModel.addElement(new PageSizeItem(PageSize.TABLOID, "Tabloid", 279, 432, 11, 17)); + comboBoxModel.addElement(new PageSizeItem(PDRectangle.A0, "A0", 841, 1189, 33.1, 46.8)); + comboBoxModel.addElement(new PageSizeItem(PDRectangle.A1, "A1", 594, 841, 23.4, 33.1)); + comboBoxModel.addElement(new PageSizeItem(PDRectangle.A2, "A2", 420, 594, 16.5, 23.4)); + comboBoxModel.addElement(new PageSizeItem(PDRectangle.A3, "A3", 297, 420, 11.7, 16.5)); + comboBoxModel.addElement(new PageSizeItem(PDRectangle.A4, "A4", 210, 297, 8.3, 11.7)); + comboBoxModel.addElement(new PageSizeItem(PDRectangle.A5, "A5", 148, 210, 5.8, 8.3)); + comboBoxModel.addElement(new PageSizeItem(PDRectangle.LEGAL, "Legal", 216, 356, 8.5, 14)); + comboBoxModel.addElement(new PageSizeItem(PDRectangle.LETTER, "Letter", 216, 279, 8.5, 11)); customSizeString = NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.pageSize.custom"); comboBoxModel.addElement(customSizeString); @@ -116,6 +129,17 @@ public UIExporterPDFPanel() { refreshUnit(false); } + public static ValidationPanel createValidationPanel(UIExporterPDFPanel innerPanel) { + ValidationPanel validationPanel = new ValidationPanel(); + validationPanel.setInnerComponent(innerPanel); + + ValidationGroup group = validationPanel.getValidationGroup(); + + innerPanel.validate(group); + + return validationPanel; + } + private void loadPreferences() { boolean defaultMM = NbPreferences.forModule(UIExporterPDF.class).getBoolean("Default_Millimeter", false); millimeter = NbPreferences.forModule(UIExporterPDF.class).getBoolean("Millimeter", defaultMM); @@ -128,6 +152,7 @@ private void savePreferences() { private void initEvents() { pageSizeCombo.addItemListener(new ItemListener() { + @Override public void itemStateChanged(ItemEvent e) { Object selectedItem = pageSizeCombo.getSelectedItem(); if (selectedItem != customSizeString) { @@ -139,6 +164,7 @@ public void itemStateChanged(ItemEvent e) { widthTextField.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { updatePageSize(); } @@ -146,12 +172,14 @@ public void actionPerformed(ActionEvent e) { heightTextField.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { updatePageSize(); } }); unitLink.setAction(new AbstractAction() { + @Override public void actionPerformed(ActionEvent e) { millimeter = !millimeter; refreshUnit(true); @@ -159,33 +187,23 @@ public void actionPerformed(ActionEvent e) { }); } - public static ValidationPanel createValidationPanel(UIExporterPDFPanel innerPanel) { - ValidationPanel validationPanel = new ValidationPanel(); - validationPanel.setInnerComponent(innerPanel); - - ValidationGroup group = validationPanel.getValidationGroup(); - - innerPanel.validate(group); - - return validationPanel; - } - + @Override public void validate(ValidationGroup group) { //Size - group.add(widthTextField, Validators.REQUIRE_NON_EMPTY_STRING, - new PositiveSizeValidator(this)); - group.add(heightTextField, Validators.REQUIRE_NON_EMPTY_STRING, - new PositiveSizeValidator(this)); + group.add(widthTextField, StringValidators.REQUIRE_NON_EMPTY_STRING, + new PositiveSizeValidator(this)); + group.add(heightTextField, StringValidators.REQUIRE_NON_EMPTY_STRING, + new PositiveSizeValidator(this)); //Margins - group.add(topMarginTextField, Validators.REQUIRE_NON_EMPTY_STRING, - Validators.REQUIRE_VALID_NUMBER); - group.add(bottomMarginTextField, Validators.REQUIRE_NON_EMPTY_STRING, - Validators.REQUIRE_VALID_NUMBER); - group.add(leftMarginTextField, Validators.REQUIRE_NON_EMPTY_STRING, - Validators.REQUIRE_VALID_NUMBER); - group.add(rightMargintextField, Validators.REQUIRE_NON_EMPTY_STRING, - Validators.REQUIRE_VALID_NUMBER); + group.add(topMarginTextField, StringValidators.REQUIRE_NON_EMPTY_STRING, + StringValidators.REQUIRE_VALID_NUMBER); + group.add(bottomMarginTextField, StringValidators.REQUIRE_NON_EMPTY_STRING, + StringValidators.REQUIRE_VALID_NUMBER); + group.add(leftMarginTextField, StringValidators.REQUIRE_NON_EMPTY_STRING, + StringValidators.REQUIRE_VALID_NUMBER); + group.add(rightMargintextField, StringValidators.REQUIRE_NON_EMPTY_STRING, + StringValidators.REQUIRE_VALID_NUMBER); } public void setup(PDFExporter pdfExporter) { @@ -200,8 +218,10 @@ public void setup(PDFExporter pdfExporter) { } setPageSize(pageSize); - setMargins(pdfExporter.getMarginTop(), pdfExporter.getMarginBottom(), pdfExporter.getMarginLeft(), pdfExporter.getMarginRight()); + setMargins(pdfExporter.getMarginTop(), pdfExporter.getMarginBottom(), pdfExporter.getMarginLeft(), + pdfExporter.getMarginRight()); setOrientation(pdfExporter.isLandscape()); + transparentBackgroundCheckbox.setSelected(pdfExporter.isTransparentBackground()); } public void unsetup(PDFExporter pdfExporter) { @@ -226,13 +246,14 @@ public void unsetup(PDFExporter pdfExporter) { } float w = (float) width; float h = (float) height; - Rectangle rect = new Rectangle(w, h); + PDRectangle rect = new PDRectangle(w, h); pdfExporter.setPageSize(rect); } else { pdfExporter.setPageSize(((PageSizeItem) pageSizeCombo.getSelectedItem()).getPageSize()); } pdfExporter.setLandscape(landscapeRadio.isSelected()); + pdfExporter.setTransparentBackground(transparentBackgroundCheckbox.isSelected()); double top = pdfExporter.getMarginTop(); double bottom = pdfExporter.getMarginBottom(); @@ -274,7 +295,8 @@ public void unsetup(PDFExporter pdfExporter) { } private void updatePageSize() { - if (pageSizeCombo.getSelectedItem() != customSizeString && !widthTextField.getText().isEmpty() && !heightTextField.getText().isEmpty()) { + if (pageSizeCombo.getSelectedItem() != customSizeString && !widthTextField.getText().isEmpty() && + !heightTextField.getText().isEmpty()) { DefaultComboBoxModel comboBoxModel = (DefaultComboBoxModel) pageSizeCombo.getModel(); PageSizeItem item = getItem(widthTextField.getText(), heightTextField.getText()); if (item == null) { @@ -349,8 +371,12 @@ private PageSizeItem getItem(String width, String height) { private void refreshUnit(boolean convert) { - unitLink.setText(millimeter ? NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.unitLink.millimeter") : NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.unitLink.inch")); - widthUnitLabel.setText(millimeter ? NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.labelUnit.millimeter") : NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.labelUnit.inch")); + unitLink.setText( + millimeter ? NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.unitLink.millimeter") : + NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.unitLink.inch")); + widthUnitLabel.setText( + millimeter ? NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.labelUnit.millimeter") : + NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.labelUnit.inch")); heightUnitLabel.setText(widthUnitLabel.getText()); if (convert) { if (pageSizeCombo.getSelectedItem() != customSizeString) { @@ -416,7 +442,8 @@ private void refreshUnit(boolean convert) { } } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -448,6 +475,8 @@ private void initComponents() { rightMargintextField = new javax.swing.JTextField(); labelUnit = new javax.swing.JLabel(); unitLink = new org.jdesktop.swingx.JXHyperlink(); + transparentBackgroundCheckbox = new javax.swing.JCheckBox(); + labelBackground = new javax.swing.JLabel(); labelPageSize.setText(org.openide.util.NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.labelPageSize.text")); // NOI18N @@ -499,6 +528,10 @@ private void initComponents() { unitLink.setToolTipText(org.openide.util.NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.unitLink.toolTipText")); // NOI18N unitLink.setFocusPainted(false); + transparentBackgroundCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.transparentBackgroundCheckbox.text")); // NOI18N + + labelBackground.setText(org.openide.util.NbBundle.getMessage(UIExporterPDFPanel.class, "UIExporterPDFPanel.labelBackground.text")); // NOI18N + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( @@ -506,52 +539,58 @@ private void initComponents() { .addGroup(layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(labelUnit) - .addGap(62, 62, 62) - .addComponent(unitLink, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(labelPageSize) .addComponent(labelOrientation) - .addComponent(labelMargins)) + .addComponent(labelMargins) + .addComponent(labelBackground)) .addGap(27, 27, 27) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) - .addComponent(landscapeRadio, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(portraitRadio, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(labelHeight) - .addComponent(labelWidth)) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(heightTextField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(widthTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE)))) - .addGap(10, 10, 10) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(widthUnitLabel) - .addComponent(heightUnitLabel))) - .addComponent(pageSizeCombo, 0, 224, Short.MAX_VALUE) + .addComponent(pageSizeCombo, 0, 217, Short.MAX_VALUE) + .addComponent(transparentBackgroundCheckbox, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() - .addComponent(labelTop) - .addGap(26, 26, 26) - .addComponent(topMarginTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(labelLeft)) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addComponent(landscapeRadio, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(portraitRadio, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(labelHeight) + .addComponent(labelWidth)) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(heightTextField, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(widthTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 95, javax.swing.GroupLayout.PREFERRED_SIZE)))) + .addGap(10, 10, 10) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(widthUnitLabel) + .addComponent(heightUnitLabel))) .addGroup(layout.createSequentialGroup() - .addComponent(labelBottom) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(bottomMarginTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(labelRight))) - .addGap(21, 21, 21) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(leftMarginTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(rightMargintextField, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)))))) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(labelTop) + .addGap(26, 26, 26) + .addComponent(topMarginTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addComponent(labelLeft)) + .addGroup(layout.createSequentialGroup() + .addComponent(labelBottom) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(bottomMarginTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addComponent(labelRight))) + .addGap(21, 21, 21) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(leftMarginTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(rightMargintextField, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE)))) + .addGap(0, 0, Short.MAX_VALUE)))) + .addGroup(layout.createSequentialGroup() + .addComponent(labelUnit) + .addGap(62, 62, 62) + .addComponent(unitLink, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, Short.MAX_VALUE))) .addContainerGap()) ); layout.setVerticalGroup( @@ -594,20 +633,24 @@ private void initComponents() { .addComponent(labelBottom) .addComponent(labelRight) .addComponent(rightMargintextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(transparentBackgroundCheckbox) + .addComponent(labelBackground)) + .addContainerGap(19, Short.MAX_VALUE)) ); }// //GEN-END:initComponents private static class PageSizeItem { - private final Rectangle pageSize; - private String name = ""; + private final PDRectangle pageSize; private final double inWidth; private final double inHeight; private final double mmWidth; private final double mmHeight; + private String name = ""; - public PageSizeItem(Rectangle pageSize) { + public PageSizeItem(PDRectangle pageSize) { this.pageSize = pageSize; this.inHeight = pageSize.getHeight() / INCH; this.inWidth = pageSize.getWidth() / INCH; @@ -615,7 +658,8 @@ public PageSizeItem(Rectangle pageSize) { this.mmWidth = pageSize.getWidth() / MM; } - public PageSizeItem(Rectangle pageSize, String name, double mmWidth, double mmHeight, double inWidth, double inHeight) { + public PageSizeItem(PDRectangle pageSize, String name, double mmWidth, double mmHeight, double inWidth, + double inHeight) { this.pageSize = pageSize; this.name = name; this.inHeight = inHeight; @@ -624,7 +668,7 @@ public PageSizeItem(Rectangle pageSize, String name, double mmWidth, double mmHe this.mmWidth = mmWidth; } - public Rectangle getPageSize() { + public PDRectangle getPageSize() { return pageSize; } @@ -653,10 +697,7 @@ public boolean equals(Object obj) { return false; } final PageSizeItem other = (PageSizeItem) obj; - if (this.pageSize != other.pageSize && (this.pageSize == null || !this.pageSize.equals(other.pageSize))) { - return false; - } - return true; + return this.pageSize == other.pageSize || (this.pageSize != null && this.pageSize.equals(other.pageSize)); } @Override @@ -674,14 +715,19 @@ public String toString() { private static class PositiveSizeValidator implements Validator { - private UIExporterPDFPanel panel; + private final UIExporterPDFPanel panel; public PositiveSizeValidator(UIExporterPDFPanel panel) { this.panel = panel; } @Override - public boolean validate(Problems problems, String compName, String model) { + public Class modelType() { + return String.class; + } + + @Override + public void validate(Problems problems, String compName, String model) { boolean result = false; try { double i = panel.sizeFormatter.parse(panel.widthTextField.getText()).doubleValue(); @@ -690,35 +736,9 @@ public boolean validate(Problems problems, String compName, String model) { } if (!result) { String message = NbBundle.getMessage(getClass(), - "PositiveSizeValidator.NEGATIVE", model); + "PositiveSizeValidator.NEGATIVE", model); problems.add(message); } - return result; } } - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JTextField bottomMarginTextField; - private javax.swing.JTextField heightTextField; - private javax.swing.JLabel heightUnitLabel; - private javax.swing.JLabel labelBottom; - private javax.swing.JLabel labelHeight; - private javax.swing.JLabel labelLeft; - private javax.swing.JLabel labelMargins; - private javax.swing.JLabel labelOrientation; - private javax.swing.JLabel labelPageSize; - private javax.swing.JLabel labelRight; - private javax.swing.JLabel labelTop; - private javax.swing.JLabel labelUnit; - private javax.swing.JLabel labelWidth; - private javax.swing.JRadioButton landscapeRadio; - private javax.swing.JTextField leftMarginTextField; - private javax.swing.ButtonGroup orientationButtonGroup; - private javax.swing.JComboBox pageSizeCombo; - private javax.swing.JRadioButton portraitRadio; - private javax.swing.JTextField rightMargintextField; - private javax.swing.JTextField topMarginTextField; - private org.jdesktop.swingx.JXHyperlink unitLink; - private javax.swing.JTextField widthTextField; - private javax.swing.JLabel widthUnitLabel; - // End of variables declaration//GEN-END:variables } diff --git a/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/UIExporterPNG.java b/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/UIExporterPNG.java index ea4e94e62f..a960575033 100644 --- a/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/UIExporterPNG.java +++ b/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/UIExporterPNG.java @@ -39,26 +39,26 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.exporter.preview; -import org.gephi.io.exporter.preview.PNGExporter; import javax.swing.JPanel; +import org.gephi.io.exporter.preview.PNGExporter; import org.gephi.io.exporter.spi.Exporter; import org.gephi.io.exporter.spi.ExporterUI; -import org.netbeans.validation.api.ui.ValidationPanel; +import org.netbeans.validation.api.ui.swing.ValidationPanel; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Taras Klaskovsky */ @ServiceProvider(service = ExporterUI.class) public class UIExporterPNG implements ExporterUI { + private final ExporterPNGSettings settings = new ExporterPNGSettings(); private UIExporterPNGPanel panel; private PNGExporter exporter; - private ExporterPNGSettings settings = new ExporterPNGSettings(); private ValidationPanel validationPanel; @Override @@ -72,7 +72,9 @@ public JPanel getPanel() { public void setup(Exporter exporter) { this.exporter = (PNGExporter) exporter; settings.load(this.exporter); - panel.setup(this.exporter); + if (panel != null) { + panel.setup(this.exporter); + } } @Override @@ -96,25 +98,28 @@ public String getDisplayName() { return NbBundle.getMessage(UIExporterPDF.class, "UIExporterPNG.name"); } - private static class ExporterPNGSettings { + private static class ExporterPNGSettings extends AbstractExporterSettings { - private int width = 1024; - private int height = 1024; - private int margin = 4; - private boolean transparentBackground; + // Preference names + private final static String WIDTH = "PNG_width"; + private final static String HEIGHT = "PNG_height"; + private final static String MARGIN = "PNG_margin"; + private final static String TRANSPARENT_BACKGROUND = "PNG_transparentBackground"; + // Default + private final static PNGExporter DEFAULT = new PNGExporter(); void load(PNGExporter exporter) { - exporter.setHeight(height); - exporter.setWidth(width); - exporter.setMargin(margin); - exporter.setTransparentBackground(transparentBackground); + exporter.setHeight(get(HEIGHT, DEFAULT.getHeight())); + exporter.setWidth(get(WIDTH, DEFAULT.getWidth())); + exporter.setMargin(get(MARGIN, DEFAULT.getMargin())); + exporter.setTransparentBackground(get(TRANSPARENT_BACKGROUND, DEFAULT.isTransparentBackground())); } void save(PNGExporter exporter) { - height = exporter.getHeight(); - width = exporter.getWidth(); - margin = exporter.getMargin(); - transparentBackground = exporter.isTransparentBackground(); + put(HEIGHT, exporter.getHeight()); + put(WIDTH, exporter.getWidth()); + put(MARGIN, exporter.getMargin()); + put(TRANSPARENT_BACKGROUND, exporter.isTransparentBackground()); } } } diff --git a/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/UIExporterPNGPanel.java b/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/UIExporterPNGPanel.java index d4f18ac266..367c7b455f 100644 --- a/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/UIExporterPNGPanel.java +++ b/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/UIExporterPNGPanel.java @@ -39,16 +39,44 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.exporter.preview; import org.gephi.io.exporter.preview.PNGExporter; import org.gephi.lib.validation.ValidationClient; -import org.netbeans.validation.api.builtin.Validators; +import org.netbeans.validation.api.builtin.stringvalidation.StringValidators; import org.netbeans.validation.api.ui.ValidationGroup; -import org.netbeans.validation.api.ui.ValidationPanel; +import org.netbeans.validation.api.ui.swing.ValidationPanel; public class UIExporterPNGPanel extends javax.swing.JPanel implements ValidationClient { + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel heightLabel; + private javax.swing.JTextField heightTextField; + private javax.swing.JLabel labelHpx; + private javax.swing.JLabel labelMargin; + private javax.swing.JLabel labelMperc; + private javax.swing.JLabel labelWpx; + private javax.swing.JTextField marginTextField; + private javax.swing.JCheckBox transparentBackgroundCheckbox; + private javax.swing.JLabel widthLabel; + private javax.swing.JTextField widthTextField; + // End of variables declaration//GEN-END:variables + + public UIExporterPNGPanel() { + initComponents(); + } + + public static ValidationPanel createValidationPanel(UIExporterPNGPanel innerPanel) { + ValidationPanel validationPanel = new ValidationPanel(); + validationPanel.setInnerComponent(innerPanel); + + ValidationGroup group = validationPanel.getValidationGroup(); + innerPanel.validate(group); + + return validationPanel; + } + void setup(PNGExporter exporter) { heightTextField.setText(Integer.toString(exporter.getHeight())); widthTextField.setText(Integer.toString(exporter.getWidth())); @@ -66,11 +94,8 @@ void unsetup(PNGExporter exporter) { } } - public UIExporterPNGPanel() { - initComponents(); - } - - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the FormEditor. @@ -93,9 +118,11 @@ private void initComponents() { heightTextField.setName("height"); // NOI18N - widthLabel.setText(org.openide.util.NbBundle.getMessage(UIExporterPNGPanel.class, "UIExporterPNGPanel.widthLabel.text")); // NOI18N + widthLabel.setText(org.openide.util.NbBundle + .getMessage(UIExporterPNGPanel.class, "UIExporterPNGPanel.widthLabel.text")); // NOI18N - heightLabel.setText(org.openide.util.NbBundle.getMessage(UIExporterPNGPanel.class, "UIExporterPNGPanel.heightLabel.text")); // NOI18N + heightLabel.setText(org.openide.util.NbBundle + .getMessage(UIExporterPNGPanel.class, "UIExporterPNGPanel.heightLabel.text")); // NOI18N labelWpx.setText("px"); @@ -113,84 +140,70 @@ private void initComponents() { this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addComponent(widthLabel) - .addGap(16, 16, 16) - .addComponent(widthTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 87, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(labelWpx) - .addGap(49, 49, 49)) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) - .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() - .addComponent(labelMargin) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(marginTextField)) - .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() - .addComponent(heightLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(heightTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 87, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(labelMperc) - .addComponent(labelHpx)))) - .addComponent(transparentBackgroundCheckbox)) - .addContainerGap(123, Short.MAX_VALUE)) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addComponent(widthLabel) + .addGap(16, 16, 16) + .addComponent(widthTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 87, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(labelWpx) + .addGap(49, 49, 49)) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() + .addComponent(labelMargin) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(marginTextField)) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() + .addComponent(heightLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(heightTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 87, + javax.swing.GroupLayout.PREFERRED_SIZE))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(labelMperc) + .addComponent(labelHpx)))) + .addComponent(transparentBackgroundCheckbox)) + .addContainerGap(123, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(widthLabel) - .addComponent(widthTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelWpx)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(heightLabel) - .addComponent(heightTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelHpx)) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(labelMargin) - .addComponent(marginTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelMperc)) - .addGap(18, 18, 18) - .addComponent(transparentBackgroundCheckbox) - .addContainerGap(49, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(widthLabel) + .addComponent(widthTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(labelWpx)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(heightLabel) + .addComponent(heightTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(labelHpx)) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelMargin) + .addComponent(marginTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(labelMperc)) + .addGap(18, 18, 18) + .addComponent(transparentBackgroundCheckbox) + .addContainerGap(49, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JLabel heightLabel; - private javax.swing.JTextField heightTextField; - private javax.swing.JLabel labelHpx; - private javax.swing.JLabel labelMargin; - private javax.swing.JLabel labelMperc; - private javax.swing.JLabel labelWpx; - private javax.swing.JTextField marginTextField; - private javax.swing.JCheckBox transparentBackgroundCheckbox; - private javax.swing.JLabel widthLabel; - private javax.swing.JTextField widthTextField; - // End of variables declaration//GEN-END:variables - - public static ValidationPanel createValidationPanel(UIExporterPNGPanel innerPanel) { - ValidationPanel validationPanel = new ValidationPanel(); - validationPanel.setInnerComponent(innerPanel); - - ValidationGroup group = validationPanel.getValidationGroup(); - innerPanel.validate(group); - - return validationPanel; - } @Override public void validate(ValidationGroup group) { - group.add(widthTextField, Validators.REQUIRE_NON_EMPTY_STRING, Validators.REQUIRE_VALID_INTEGER, Validators.numberRange(1, Integer.MAX_VALUE)); - group.add(heightTextField, Validators.REQUIRE_NON_EMPTY_STRING, Validators.REQUIRE_VALID_INTEGER, Validators.numberRange(1, Integer.MAX_VALUE)); - group.add(marginTextField, Validators.REQUIRE_NON_EMPTY_STRING, Validators.REQUIRE_VALID_INTEGER, Validators.numberRange(0, 100)); + group.add(widthTextField, StringValidators.REQUIRE_NON_EMPTY_STRING, StringValidators.REQUIRE_VALID_INTEGER, + StringValidators.numberRange(1, Integer.MAX_VALUE)); + group.add(heightTextField, StringValidators.REQUIRE_NON_EMPTY_STRING, StringValidators.REQUIRE_VALID_INTEGER, + StringValidators.numberRange(1, Integer.MAX_VALUE)); + group.add(marginTextField, StringValidators.REQUIRE_NON_EMPTY_STRING, StringValidators.REQUIRE_VALID_INTEGER, + StringValidators.numberRange(0, 100)); } } diff --git a/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/UIExporterSVG.java b/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/UIExporterSVG.java index 1f07420d17..2a804cef16 100644 --- a/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/UIExporterSVG.java +++ b/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/UIExporterSVG.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.exporter.preview; import javax.swing.JPanel; @@ -46,53 +47,69 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.io.exporter.spi.Exporter; import org.gephi.io.exporter.spi.ExporterUI; import org.openide.util.NbBundle; -import org.openide.util.NbPreferences; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = ExporterUI.class) public class UIExporterSVG implements ExporterUI { + private final ExporterSVGSettings settings = new ExporterSVGSettings(); private UIExporterSVGPanel panel; private SVGExporter exporterSVG; + @Override public void setup(Exporter exporter) { exporterSVG = (SVGExporter) exporter; - loadPreferences(); - panel.setup(exporterSVG); + settings.load(exporterSVG); + if (panel != null) { + panel.setup(exporterSVG); + } } + @Override public void unsetup(boolean update) { if (update) { panel.unsetup(exporterSVG); - savePreferences(); + settings.save(exporterSVG); } panel = null; exporterSVG = null; } + @Override public JPanel getPanel() { panel = new UIExporterSVGPanel(); return panel; } + @Override public boolean isUIForExporter(Exporter exporter) { return exporter instanceof SVGExporter; } + @Override public String getDisplayName() { return NbBundle.getMessage(UIExporterPDF.class, "UIExporterSVG.name"); } - private void loadPreferences() { - boolean strokeScale = NbPreferences.forModule(UIExporterSVG.class).getBoolean("ScaleStrokeWidth", false); - exporterSVG.setScaleStrokes(strokeScale); - } + private static class ExporterSVGSettings extends AbstractExporterSettings { + + // Preference names + private final static String SCALE_STROKES = "SVG_strokeScale"; + private final static String MARGIN = "SVG_margin"; + // Default + private final static SVGExporter DEFAULT = new SVGExporter(); - private void savePreferences() { - NbPreferences.forModule(UIExporterSVG.class).putBoolean("ScaleStrokeWidth", exporterSVG.isScaleStrokes()); + void load(SVGExporter exporter) { + exporter.setScaleStrokes(get(SCALE_STROKES, DEFAULT.isScaleStrokes())); + exporter.setMargin(get(MARGIN, DEFAULT.getMargin())); + } + + void save(SVGExporter exporter) { + put(SCALE_STROKES, exporter.isScaleStrokes()); + put(MARGIN, exporter.getMargin()); + } } } diff --git a/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/UIExporterSVGPanel.java b/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/UIExporterSVGPanel.java index b2015aef3a..1bc2ac760b 100644 --- a/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/UIExporterSVGPanel.java +++ b/modules/PreviewExportUI/src/main/java/org/gephi/ui/exporter/preview/UIExporterSVGPanel.java @@ -39,16 +39,21 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.exporter.preview; import org.gephi.io.exporter.preview.SVGExporter; /** - * * @author Mathieu Bastian */ public class UIExporterSVGPanel extends javax.swing.JPanel { + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel labelStrokeScale; + private javax.swing.JCheckBox strokeScaleCheckbox; + // End of variables declaration//GEN-END:variables + public UIExporterSVGPanel() { initComponents(); } @@ -61,7 +66,8 @@ public void unsetup(SVGExporter svgExporter) { svgExporter.setScaleStrokes(strokeScaleCheckbox.isSelected()); } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -73,35 +79,34 @@ private void initComponents() { strokeScaleCheckbox = new javax.swing.JCheckBox(); labelStrokeScale = new javax.swing.JLabel(); - strokeScaleCheckbox.setText(org.openide.util.NbBundle.getMessage(UIExporterSVGPanel.class, "UIExporterSVGPanel.strokeScaleCheckbox.text")); // NOI18N + strokeScaleCheckbox.setText(org.openide.util.NbBundle + .getMessage(UIExporterSVGPanel.class, "UIExporterSVGPanel.strokeScaleCheckbox.text")); // NOI18N - labelStrokeScale.setFont(labelStrokeScale.getFont().deriveFont((labelStrokeScale.getFont().getStyle() | java.awt.Font.ITALIC))); + labelStrokeScale.setFont( + labelStrokeScale.getFont().deriveFont((labelStrokeScale.getFont().getStyle() | java.awt.Font.ITALIC))); labelStrokeScale.setForeground(new java.awt.Color(153, 153, 153)); - labelStrokeScale.setText(org.openide.util.NbBundle.getMessage(UIExporterSVGPanel.class, "UIExporterSVGPanel.labelStrokeScale.text")); // NOI18N + labelStrokeScale.setText(org.openide.util.NbBundle + .getMessage(UIExporterSVGPanel.class, "UIExporterSVGPanel.labelStrokeScale.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(strokeScaleCheckbox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(labelStrokeScale, javax.swing.GroupLayout.DEFAULT_SIZE, 261, Short.MAX_VALUE) - .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(strokeScaleCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(labelStrokeScale, javax.swing.GroupLayout.DEFAULT_SIZE, 261, Short.MAX_VALUE) + .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(strokeScaleCheckbox) - .addComponent(labelStrokeScale)) - .addContainerGap(158, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(strokeScaleCheckbox) + .addComponent(labelStrokeScale)) + .addContainerGap(158, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JLabel labelStrokeScale; - private javax.swing.JCheckBox strokeScaleCheckbox; - // End of variables declaration//GEN-END:variables } diff --git a/modules/PreviewExportUI/src/main/nbm/manifest.mf b/modules/PreviewExportUI/src/main/nbm/manifest.mf index a735c6b200..41be5e3938 100644 --- a/modules/PreviewExportUI/src/main/nbm/manifest.mf +++ b/modules/PreviewExportUI/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 OpenIDE-Module-Localizing-Bundle: org/gephi/ui/exporter/preview/Bundle.properties AutoUpdate-Essential-Module: true -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Plugin +OpenIDE-Module-Name: Preview Export UI \ No newline at end of file diff --git a/modules/PreviewExportUI/src/main/nbm/module.xml b/modules/PreviewExportUI/src/main/nbm/module.xml deleted file mode 100644 index 2005eefb07..0000000000 --- a/modules/PreviewExportUI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle.properties b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle.properties index 46bb64474c..6942e7be42 100644 --- a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle.properties +++ b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle.properties @@ -1,5 +1,3 @@ -OpenIDE-Module-Display-Category=Plugin -OpenIDE-Module-Name=Preview Export UI OpenIDE-Module-Short-Description=Vectorial exporters user interfaces UIExporterPDF.name = PDF @@ -38,3 +36,5 @@ UIExporterSVGPanel.strokeScaleCheckbox.text=Scale stroke-width UIExporterSVGPanel.labelStrokeScale.text=Recommended for Adobe Illustrator UIExporterPNGPanel.widthLabel.text=Width: UIExporterPNGPanel.heightLabel.text=Height: +UIExporterPDFPanel.labelBackground.text=Background: +UIExporterPDFPanel.transparentBackgroundCheckbox.text=Transparent background diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_ar.properties b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_ca.properties b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_ca.properties new file mode 100644 index 0000000000..32645c2b83 --- /dev/null +++ b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_ca.properties @@ -0,0 +1,35 @@ +OpenIDE-Module-Short-Description=Vectorial exporters user interfaces +UIExporterPDF.name=PDF +UIExporterSVG.name=SVG +UIExporterPNG.name=PNG +UIExporterPDFPanel.labelPageSize.text=Mida de la pΰgina +UIExporterPDFPanel.widthTextField.text= +UIExporterPDFPanel.labelWidth.text=Amplada: +UIExporterPDFPanel.labelHeight.text=Alηada: +UIExporterPDFPanel.heightTextField.text= +UIExporterPDFPanel.portraitRadio.text=Vertical +UIExporterPDFPanel.landscapeRadio.text=Horitzontal +UIExporterPDFPanel.labelOrientation.text=Orientaciσ: +UIExporterPDFPanel.labelTop.text=A dalt: +UIExporterPDFPanel.labelBottom.text=A baix: +UIExporterPDFPanel.topMarginTextField.text= +UIExporterPDFPanel.bottomMarginTextField.text= +UIExporterPDFPanel.labelMargins.text=Marges: +UIExporterPDFPanel.labelLeft.text=Esquerra: +UIExporterPDFPanel.labelRight.text=Dreta: +UIExporterPDFPanel.leftMarginTextField.text= +UIExporterPDFPanel.rightMargintextField.text= +UIExporterPDFPanel.pageSize.custom=Custom... +UIExporterPDFPanel.widthUnitLabel.text= +UIExporterPDFPanel.heightUnitLabel.text= +UIExporterPDFPanel.labelUnit.text=Unitat +UIExporterPDFPanel.unitLink.millimeter=Mil·lνmetre +UIExporterPDFPanel.unitLink.inch=Polzada +UIExporterPDFPanel.labelUnit.millimeter=mm +UIExporterPDFPanel.labelUnit.inch=polzades +PositiveSizeValidator.NEGATIVE={0} ha de ser positiu +UIExporterPDFPanel.unitLink.toolTipText=Canvia la unitat: mil·lνmetres/polzades +UIExporterSVGPanel.strokeScaleCheckbox.text=Scale stroke-width +UIExporterSVGPanel.labelStrokeScale.text=Recommended for Adobe Illustrator +UIExporterPNGPanel.widthLabel.text=Amplada: +UIExporterPNGPanel.heightLabel.text=Alηada: diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_cs.properties b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_cs.properties index 1d9424bb88..f80f7b8b8c 100644 --- a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_cs.properties +++ b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_cs.properties @@ -1,61 +1,38 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-20 21\:49+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Short-Description=U\u017eivatelsk\u00e9 rozhran\u00ed vektorov\u00fdch export\u00e9r\u016f - -UIExporterPDF.name=PDF - -UIExporterSVG.name=SVG - -UIExporterPNG.name=PNG - -UIExporterPDFPanel.labelPageSize.text=Velikost str\u00e1nky\: - -UIExporterPDFPanel.labelWidth.text=\u0160\u00ed\u0159ka\: - -UIExporterPDFPanel.labelHeight.text=V\u00fd\u0161ka\: - -UIExporterPDFPanel.portraitRadio.text=Na v\u00fd\u0161ku - -UIExporterPDFPanel.landscapeRadio.text=Na \u0161\u00ed\u0159ku - -UIExporterPDFPanel.labelOrientation.text=Orientace\: - -UIExporterPDFPanel.labelTop.text=Naho\u0159e\: - -UIExporterPDFPanel.labelBottom.text=Dole\: - -UIExporterPDFPanel.labelMargins.text=Okraje\: - -UIExporterPDFPanel.labelLeft.text=Vlevo\: - -UIExporterPDFPanel.labelRight.text=Vpravo\: - -UIExporterPDFPanel.pageSize.custom=Vlastn\u00ed... - -UIExporterPDFPanel.labelUnit.text=Jednotka\: - -UIExporterPDFPanel.unitLink.millimeter=Milimetr - -UIExporterPDFPanel.unitLink.inch=Palec - -UIExporterPDFPanel.labelUnit.millimeter=mm - -UIExporterPDFPanel.labelUnit.inch=in - -PositiveSizeValidator.NEGATIVE={0} mus\u00ed b\u00fdt kladn\u00e9 - -UIExporterPDFPanel.unitLink.toolTipText=Zm\u011bnit jednotku na milimetr/palec - -UIExporterSVGPanel.strokeScaleCheckbox.text=M\u011b\u0159\u00edtko \u0161\u00ed\u0159ky tahu - -UIExporterSVGPanel.labelStrokeScale.text=Doporu\u010deno pro Adobe Illustrator - -UIExporterPNGPanel.widthLabel.text=\u0160\u00ed\u0159ka\: - -UIExporterPNGPanel.heightLabel.text=V\u00fd\u0161ka\: +OpenIDE-Module-Short-Description=U\u017eivatelskι rozhranν vektorovύch exportιr\u016f + +UIExporterPDF.name = PDF +UIExporterSVG.name = SVG +UIExporterPNG.name = PNG + +UIExporterPDFPanel.labelPageSize.text=Velikost strαnky: +UIExporterPDFPanel.widthTextField.text= +UIExporterPDFPanel.labelWidth.text=\u0160ν\u0159ka: +UIExporterPDFPanel.labelHeight.text=Vύ\u0161ka: +UIExporterPDFPanel.heightTextField.text= +UIExporterPDFPanel.portraitRadio.text=Na vύ\u0161ku +UIExporterPDFPanel.landscapeRadio.text=Na \u0161ν\u0159ku +UIExporterPDFPanel.labelOrientation.text=Orientace: +UIExporterPDFPanel.labelTop.text=Naho\u0159e: +UIExporterPDFPanel.labelBottom.text=Dole: +UIExporterPDFPanel.topMarginTextField.text= +UIExporterPDFPanel.bottomMarginTextField.text= +UIExporterPDFPanel.labelMargins.text=Okraje: +UIExporterPDFPanel.labelLeft.text=Vlevo: +UIExporterPDFPanel.labelRight.text=Vpravo: +UIExporterPDFPanel.leftMarginTextField.text= +UIExporterPDFPanel.rightMargintextField.text= + +UIExporterPDFPanel.pageSize.custom=Vlastnν... +UIExporterPDFPanel.widthUnitLabel.text= +UIExporterPDFPanel.heightUnitLabel.text= +UIExporterPDFPanel.labelUnit.text=Jednotka: +UIExporterPDFPanel.unitLink.millimeter=Milimetr +UIExporterPDFPanel.unitLink.inch=Palec +UIExporterPDFPanel.labelUnit.millimeter=mm +UIExporterPDFPanel.labelUnit.inch=in +PositiveSizeValidator.NEGATIVE = {0} musν bύt kladnι +UIExporterPDFPanel.unitLink.toolTipText=Zm\u011bnit jednotku na milimetr/palec +UIExporterSVGPanel.strokeScaleCheckbox.text=M\u011b\u0159νtko \u0161ν\u0159ky tahu +UIExporterSVGPanel.labelStrokeScale.text=Doporu\u010deno pro Adobe Illustrator +UIExporterPNGPanel.widthLabel.text=\u0160ν\u0159ka: +UIExporterPNGPanel.heightLabel.text=Vύ\u0161ka: diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_de.properties b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_de.properties new file mode 100644 index 0000000000..49b7f329e7 --- /dev/null +++ b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_de.properties @@ -0,0 +1,35 @@ +OpenIDE-Module-Short-Description=Benutzeroberflδche fόr Vektor-Exporter +UIExporterPDF.name=PDF +UIExporterSVG.name=SVG +UIExporterPNG.name=PNG +UIExporterPDFPanel.labelPageSize.text=Seitengrφίe: +UIExporterPDFPanel.widthTextField.text= +UIExporterPDFPanel.labelWidth.text=Breite: +UIExporterPDFPanel.labelHeight.text=Hφhe: +UIExporterPDFPanel.heightTextField.text= +UIExporterPDFPanel.portraitRadio.text=Hochformat +UIExporterPDFPanel.landscapeRadio.text=Querformat +UIExporterPDFPanel.labelOrientation.text=Ausrichtung: +UIExporterPDFPanel.labelTop.text=Oben: +UIExporterPDFPanel.labelBottom.text=Unten: +UIExporterPDFPanel.topMarginTextField.text= +UIExporterPDFPanel.bottomMarginTextField.text= +UIExporterPDFPanel.labelMargins.text=Rδnder: +UIExporterPDFPanel.labelLeft.text=Links: +UIExporterPDFPanel.labelRight.text=Rechts: +UIExporterPDFPanel.leftMarginTextField.text= +UIExporterPDFPanel.rightMargintextField.text= +UIExporterPDFPanel.pageSize.custom=Benutzerdefiniert... +UIExporterPDFPanel.widthUnitLabel.text= +UIExporterPDFPanel.heightUnitLabel.text= +UIExporterPDFPanel.labelUnit.text=Einheit: +UIExporterPDFPanel.unitLink.millimeter=Millimeter +UIExporterPDFPanel.unitLink.inch=Inch +UIExporterPDFPanel.labelUnit.millimeter=mm +UIExporterPDFPanel.labelUnit.inch=in +PositiveSizeValidator.NEGATIVE={0} muss positiv sein +UIExporterPDFPanel.unitLink.toolTipText=Einheit Millimeter/Inches δndern +UIExporterSVGPanel.strokeScaleCheckbox.text=Linienbreite einstellen +UIExporterSVGPanel.labelStrokeScale.text=Fόr Adobe Illustrator empfohlen +UIExporterPNGPanel.widthLabel.text=Breite: +UIExporterPNGPanel.heightLabel.text=Hφhe: diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_es.properties b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_es.properties index 2f4b428ba4..dd219d7779 100644 --- a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_es.properties +++ b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_es.properties @@ -1,62 +1,37 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-21 21\:21+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - OpenIDE-Module-Short-Description=Interfaz de usuario de exportadores vectoriales - UIExporterPDF.name=PDF - UIExporterSVG.name=SVG - UIExporterPNG.name=PNG - -UIExporterPDFPanel.labelPageSize.text=Tama\u00f1o de p\u00e1gina\: - -UIExporterPDFPanel.labelWidth.text=Ancho\: - -UIExporterPDFPanel.labelHeight.text=Alto\: - +UIExporterPDFPanel.labelPageSize.text=Tamaρo de pαgina: +UIExporterPDFPanel.widthTextField.text= +UIExporterPDFPanel.labelWidth.text=Ancho: +UIExporterPDFPanel.labelHeight.text=Alto: +UIExporterPDFPanel.heightTextField.text= UIExporterPDFPanel.portraitRadio.text=Vertical - UIExporterPDFPanel.landscapeRadio.text=Horizontal - -UIExporterPDFPanel.labelOrientation.text=Orientaci\u00f3n\: - -UIExporterPDFPanel.labelTop.text=Superior\: - -UIExporterPDFPanel.labelBottom.text=Inferior\: - -UIExporterPDFPanel.labelMargins.text=M\u00e1rgenes\: - -UIExporterPDFPanel.labelLeft.text=Izquierdo\: - -UIExporterPDFPanel.labelRight.text=Derecho\: - +UIExporterPDFPanel.labelOrientation.text=Orientaciσn: +UIExporterPDFPanel.labelTop.text=Superior: +UIExporterPDFPanel.labelBottom.text=Inferior: +UIExporterPDFPanel.topMarginTextField.text= +UIExporterPDFPanel.bottomMarginTextField.text= +UIExporterPDFPanel.labelMargins.text=Mαrgenes: +UIExporterPDFPanel.labelLeft.text=Izquierdo: +UIExporterPDFPanel.labelRight.text=Derecho: +UIExporterPDFPanel.leftMarginTextField.text= +UIExporterPDFPanel.rightMargintextField.text= UIExporterPDFPanel.pageSize.custom=Personalizado... - -UIExporterPDFPanel.labelUnit.text=Unidades\: - -UIExporterPDFPanel.unitLink.millimeter=Mil\u00edmetros - +UIExporterPDFPanel.widthUnitLabel.text= +UIExporterPDFPanel.heightUnitLabel.text= +UIExporterPDFPanel.labelUnit.text=Unidades: +UIExporterPDFPanel.unitLink.millimeter=Milνmetros UIExporterPDFPanel.unitLink.inch=Pulgadas - UIExporterPDFPanel.labelUnit.millimeter=mm - UIExporterPDFPanel.labelUnit.inch=in - PositiveSizeValidator.NEGATIVE={0} debe ser positivo - -UIExporterPDFPanel.unitLink.toolTipText=Cambiar unidades entre mil\u00edmetros/pulgadas - +UIExporterPDFPanel.unitLink.toolTipText=Cambiar unidades entre milνmetros/pulgadas UIExporterSVGPanel.strokeScaleCheckbox.text=Escalar anchura del trazo - UIExporterSVGPanel.labelStrokeScale.text=Recomendado para Adobe Illustrator - -UIExporterPNGPanel.widthLabel.text=Ancho\: - -UIExporterPNGPanel.heightLabel.text=Alto\: +UIExporterPNGPanel.widthLabel.text=Ancho: +UIExporterPNGPanel.heightLabel.text=Alto: +UIExporterPDFPanel.transparentBackgroundCheckbox.text=Fondo transparente +UIExporterPDFPanel.labelBackground.text=Fondo: diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_fr.properties b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_fr.properties index 606cfbb6dc..3eae809068 100644 --- a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_fr.properties +++ b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_fr.properties @@ -1,62 +1,38 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-21 21\:21+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Interface utilisateur des exports vectoriels - -UIExporterPDF.name=PDF - -UIExporterSVG.name=SVG - -UIExporterPNG.name=PNG - -UIExporterPDFPanel.labelPageSize.text=Format de page \: - -UIExporterPDFPanel.labelWidth.text=Largeur \: - -UIExporterPDFPanel.labelHeight.text=Hauteur \: - -UIExporterPDFPanel.portraitRadio.text=Portrait - -UIExporterPDFPanel.landscapeRadio.text=Paysage - -UIExporterPDFPanel.labelOrientation.text=Orientation \: - -UIExporterPDFPanel.labelTop.text=Haut \: - -UIExporterPDFPanel.labelBottom.text=Bas \: - -UIExporterPDFPanel.labelMargins.text=Marges \: - -UIExporterPDFPanel.labelLeft.text=Gauche \: - -UIExporterPDFPanel.labelRight.text=Droite \: - -UIExporterPDFPanel.pageSize.custom=Personnaliser... - -UIExporterPDFPanel.labelUnit.text=Unit\u00e9 \: - -UIExporterPDFPanel.unitLink.millimeter=Millim\u00e8tre - -UIExporterPDFPanel.unitLink.inch=Pouce - -UIExporterPDFPanel.labelUnit.millimeter=mm - -UIExporterPDFPanel.labelUnit.inch=in - -PositiveSizeValidator.NEGATIVE={0} doit \u00eatre positif - -UIExporterPDFPanel.unitLink.toolTipText=Changer l'unit\u00e9 millim\u00e8tre/pouce - -UIExporterSVGPanel.strokeScaleCheckbox.text=Mettre l'\u00e9paisseur du trait \u00e0 l'\u00e9chelle - -UIExporterSVGPanel.labelStrokeScale.text=Recommand\u00e9 pour Adobe Illustrator - -UIExporterPNGPanel.widthLabel.text=Largeur \: - -UIExporterPNGPanel.heightLabel.text=Hauteur \: +OpenIDE-Module-Short-Description=Interface utilisateur des exports vectoriels + +UIExporterPDF.name = PDF +UIExporterSVG.name = SVG +UIExporterPNG.name = PNG + +UIExporterPDFPanel.labelPageSize.text=Format de page : +UIExporterPDFPanel.widthTextField.text= +UIExporterPDFPanel.labelWidth.text=Largeur : +UIExporterPDFPanel.labelHeight.text=Hauteur : +UIExporterPDFPanel.heightTextField.text= +UIExporterPDFPanel.portraitRadio.text=Portrait +UIExporterPDFPanel.landscapeRadio.text=Paysage +UIExporterPDFPanel.labelOrientation.text=Orientation : +UIExporterPDFPanel.labelTop.text=Haut : +UIExporterPDFPanel.labelBottom.text=Bas : +UIExporterPDFPanel.topMarginTextField.text= +UIExporterPDFPanel.bottomMarginTextField.text= +UIExporterPDFPanel.labelMargins.text=Marges : +UIExporterPDFPanel.labelLeft.text=Gauche : +UIExporterPDFPanel.labelRight.text=Droite : +UIExporterPDFPanel.leftMarginTextField.text= +UIExporterPDFPanel.rightMargintextField.text= + +UIExporterPDFPanel.pageSize.custom=Personnaliser... +UIExporterPDFPanel.widthUnitLabel.text= +UIExporterPDFPanel.heightUnitLabel.text= +UIExporterPDFPanel.labelUnit.text=Unitι : +UIExporterPDFPanel.unitLink.millimeter=Millimθtre +UIExporterPDFPanel.unitLink.inch=Pouce +UIExporterPDFPanel.labelUnit.millimeter=mm +UIExporterPDFPanel.labelUnit.inch=in +PositiveSizeValidator.NEGATIVE = {0} doit κtre positif +UIExporterPDFPanel.unitLink.toolTipText=Changer l'unitι millimθtre/pouce +UIExporterSVGPanel.strokeScaleCheckbox.text=Mettre l'ιpaisseur du trait ΰ l'ιchelle +UIExporterSVGPanel.labelStrokeScale.text=Recommandι pour Adobe Illustrator +UIExporterPNGPanel.widthLabel.text=Largeur : +UIExporterPNGPanel.heightLabel.text=Hauteur : diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_he.properties b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_he.properties new file mode 100644 index 0000000000..31f329cf0a --- /dev/null +++ b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_he.properties @@ -0,0 +1,35 @@ +OpenIDE-Module-Short-Description=Vectorial exporters user interfaces +UIExporterPDF.name=PDF +UIExporterSVG.name=SVG +UIExporterPNG.name=PNG +UIExporterPDFPanel.labelPageSize.text=Page size: +UIExporterPDFPanel.widthTextField.text= +UIExporterPDFPanel.labelWidth.text=\u05e8\u05d5\u05d7\u05d1: +UIExporterPDFPanel.labelHeight.text=\u05d2\u05d5\u05d1\u05d4: +UIExporterPDFPanel.heightTextField.text= +UIExporterPDFPanel.portraitRadio.text=Portrait +UIExporterPDFPanel.landscapeRadio.text=Landscape +UIExporterPDFPanel.labelOrientation.text=Orientation: +UIExporterPDFPanel.labelTop.text=Top: +UIExporterPDFPanel.labelBottom.text=Bottom: +UIExporterPDFPanel.topMarginTextField.text= +UIExporterPDFPanel.bottomMarginTextField.text= +UIExporterPDFPanel.labelMargins.text=Margins: +UIExporterPDFPanel.labelLeft.text=Left: +UIExporterPDFPanel.labelRight.text=Right: +UIExporterPDFPanel.leftMarginTextField.text= +UIExporterPDFPanel.rightMargintextField.text= +UIExporterPDFPanel.pageSize.custom=Custom... +UIExporterPDFPanel.widthUnitLabel.text= +UIExporterPDFPanel.heightUnitLabel.text= +UIExporterPDFPanel.labelUnit.text=Unit: +UIExporterPDFPanel.unitLink.millimeter=Millimeter +UIExporterPDFPanel.unitLink.inch=Inch +UIExporterPDFPanel.labelUnit.millimeter=mm +UIExporterPDFPanel.labelUnit.inch=in +PositiveSizeValidator.NEGATIVE={0} must be positive +UIExporterPDFPanel.unitLink.toolTipText=Change Unit Millimeter/Inches +UIExporterSVGPanel.strokeScaleCheckbox.text=Scale stroke-width +UIExporterSVGPanel.labelStrokeScale.text=Recommended for Adobe Illustrator +UIExporterPNGPanel.widthLabel.text=\u05e8\u05d5\u05d7\u05d1: +UIExporterPNGPanel.heightLabel.text=\u05d2\u05d5\u05d1\u05d4: diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_hu.properties b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_hu.properties new file mode 100644 index 0000000000..ead18d0e59 --- /dev/null +++ b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_hu.properties @@ -0,0 +1,31 @@ + + +UIExporterPDFPanel.transparentBackgroundCheckbox.text=\u00C1tl\u00E1tsz\u00F3 h\u00E1tt\u00E9r +UIExporterPDFPanel.landscapeRadio.text=T\u00E1jk\u00E9p +UIExporterPDF.name=PDF +UIExporterPDFPanel.labelTop.text=Fels\u0151: +UIExporterPDFPanel.labelMargins.text=Marg\u00F3k: +UIExporterPNGPanel.widthLabel.text=Sz\u00E9less\u00E9g: +PositiveSizeValidator.NEGATIVE=A(z) {0} \u00E9rt\u00E9knek pozit\u00EDvnak kell lennie +UIExporterPDFPanel.labelBackground.text=H\u00E1tt\u00E9r +UIExporterPDFPanel.labelPageSize.text=Oldalm\u00E9ret: +UIExporterPDFPanel.labelWidth.text=Sz\u00E9less\u00E9g: +UIExporterPDFPanel.labelUnit.millimeter=mm +UIExporterPDFPanel.unitLink.inch=H\u00FCvelyk +UIExporterPDFPanel.labelOrientation.text=Ir\u00E1nyults\u00E1g: +UIExporterPDFPanel.labelUnit.text=M\u00E9rt\u00E9kegys\u00E9g: +UIExporterPNGPanel.heightLabel.text=Magass\u00E1g: +UIExporterSVGPanel.labelStrokeScale.text=Adobe Illustratorhoz aj\u00E1nlott +UIExporterPDFPanel.unitLink.millimeter=Millim\u00E9ter +UIExporterSVGPanel.strokeScaleCheckbox.text=Sk\u00E1la l\u00F6ketsz\u00E9less\u00E9g +UIExporterPDFPanel.labelUnit.inch=in +OpenIDE-Module-Short-Description=Vektori\u00E1lis export\u0151r\u00F6k felhaszn\u00E1l\u00F3i fel\u00FCletei +UIExporterSVG.name=SVG +UIExporterPDFPanel.labelHeight.text=Magass\u00E1g: +UIExporterPDFPanel.portraitRadio.text=portr\u00E9 +UIExporterPDFPanel.pageSize.custom=Egyedi... +UIExporterPDFPanel.labelRight.text=Jobb: +UIExporterPNG.name=PNG +UIExporterPDFPanel.labelLeft.text=Bal: +UIExporterPDFPanel.unitLink.toolTipText=M\u00E9rt\u00E9kegys\u00E9g m\u00F3dos\u00EDt\u00E1sa millim\u00E9ter/h\u00FCvelyk +UIExporterPDFPanel.labelBottom.text=Als\u00F3: diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_it.properties b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_it.properties new file mode 100644 index 0000000000..330b4c12cf --- /dev/null +++ b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_it.properties @@ -0,0 +1,35 @@ +OpenIDE-Module-Short-Description=Vectorial exporters user interfaces +UIExporterPDF.name=PDF +UIExporterSVG.name=SVG +UIExporterPNG.name=PNG +UIExporterPDFPanel.labelPageSize.text=Page size: +UIExporterPDFPanel.widthTextField.text= +UIExporterPDFPanel.labelWidth.text=Larghezza: +UIExporterPDFPanel.labelHeight.text=Altezza: +UIExporterPDFPanel.heightTextField.text= +UIExporterPDFPanel.portraitRadio.text=Portrait +UIExporterPDFPanel.landscapeRadio.text=Landscape +UIExporterPDFPanel.labelOrientation.text=Orientation: +UIExporterPDFPanel.labelTop.text=Top: +UIExporterPDFPanel.labelBottom.text=Bottom: +UIExporterPDFPanel.topMarginTextField.text= +UIExporterPDFPanel.bottomMarginTextField.text= +UIExporterPDFPanel.labelMargins.text=Margins: +UIExporterPDFPanel.labelLeft.text=Left: +UIExporterPDFPanel.labelRight.text=Right: +UIExporterPDFPanel.leftMarginTextField.text= +UIExporterPDFPanel.rightMargintextField.text= +UIExporterPDFPanel.pageSize.custom=Custom... +UIExporterPDFPanel.widthUnitLabel.text= +UIExporterPDFPanel.heightUnitLabel.text= +UIExporterPDFPanel.labelUnit.text=Unit: +UIExporterPDFPanel.unitLink.millimeter=Millimeter +UIExporterPDFPanel.unitLink.inch=Inch +UIExporterPDFPanel.labelUnit.millimeter=mm +UIExporterPDFPanel.labelUnit.inch=in +PositiveSizeValidator.NEGATIVE={0} must be positive +UIExporterPDFPanel.unitLink.toolTipText=Change Unit Millimeter/Inches +UIExporterSVGPanel.strokeScaleCheckbox.text=Scale stroke-width +UIExporterSVGPanel.labelStrokeScale.text=Recommended for Adobe Illustrator +UIExporterPNGPanel.widthLabel.text=Larghezza: +UIExporterPNGPanel.heightLabel.text=Altezza: diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_ja.properties b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_ja.properties index 3f391a8141..5678a12987 100644 --- a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_ja.properties +++ b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_ja.properties @@ -1,61 +1,38 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-21 21\:21+0000\nLast-Translator\: gephi \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u30d9\u30af\u30c8\u30eb\u30a8\u30af\u30b9\u30dd\u30fc\u30bf\u306e\u30e6\u30fc\u30b6\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9 - -UIExporterPDF.name=PDF - -UIExporterSVG.name=SVG - -UIExporterPNG.name=PNG - -UIExporterPDFPanel.labelPageSize.text=\u30da\u30fc\u30b8\u30fb\u30b5\u30a4\u30ba\: - -UIExporterPDFPanel.labelWidth.text=\u5e45\: - -UIExporterPDFPanel.labelHeight.text=\u9ad8\u3055\: - -UIExporterPDFPanel.portraitRadio.text=\u30dd\u30fc\u30c8\u30ec\u30fc\u30c8 - -UIExporterPDFPanel.landscapeRadio.text=\u98a8\u666f - -UIExporterPDFPanel.labelOrientation.text=\u65b9\u5411\: - -UIExporterPDFPanel.labelTop.text=\u30c8\u30c3\u30d7\: - -UIExporterPDFPanel.labelBottom.text=\u30dc\u30c8\u30e0\: - -UIExporterPDFPanel.labelMargins.text=\u30de\u30fc\u30b8\u30f3\: - -UIExporterPDFPanel.labelLeft.text=\u5de6\: - -UIExporterPDFPanel.labelRight.text=\u53f3\: - -UIExporterPDFPanel.pageSize.custom=\u30ab\u30b9\u30bf\u30e0... - -UIExporterPDFPanel.labelUnit.text=\u5358\u4f4d\: - -UIExporterPDFPanel.unitLink.millimeter=\u30df\u30ea\u30e1\u30fc\u30bf - -UIExporterPDFPanel.unitLink.inch=\u30a4\u30f3\u30c1 - -UIExporterPDFPanel.labelUnit.millimeter=mm - -UIExporterPDFPanel.labelUnit.inch=in - -PositiveSizeValidator.NEGATIVE={0}\u306f\u6b63\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093 - -UIExporterPDFPanel.unitLink.toolTipText=\u5358\u4f4d\u30df\u30ea/\u30a4\u30f3\u30c1\u3092\u5909\u66f4 - -UIExporterSVGPanel.strokeScaleCheckbox.text=\u7dda\u5e45\u3092\u30b9\u30b1\u30fc\u30eb - -UIExporterSVGPanel.labelStrokeScale.text=Adobe Illustrator\u3092\u5bfe\u8c61 - -UIExporterPNGPanel.widthLabel.text=\u5e45\: - -UIExporterPNGPanel.heightLabel.text=\u9ad8\u3055\: +OpenIDE-Module-Short-Description=\u30d9\u30af\u30c8\u30eb\u30a8\u30af\u30b9\u30dd\u30fc\u30bf\u306e\u30e6\u30fc\u30b6\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9 + +UIExporterPDF.name = PDF +UIExporterSVG.name = SVG +UIExporterPNG.name = PNG + +UIExporterPDFPanel.labelPageSize.text=\u30da\u30fc\u30b8\u30fb\u30b5\u30a4\u30ba: +UIExporterPDFPanel.widthTextField.text= +UIExporterPDFPanel.labelWidth.text=\u5e45: +UIExporterPDFPanel.labelHeight.text=\u9ad8\u3055: +UIExporterPDFPanel.heightTextField.text= +UIExporterPDFPanel.portraitRadio.text=\u30dd\u30fc\u30c8\u30ec\u30fc\u30c8 +UIExporterPDFPanel.landscapeRadio.text=\u98a8\u666f +UIExporterPDFPanel.labelOrientation.text=\u65b9\u5411: +UIExporterPDFPanel.labelTop.text=\u30c8\u30c3\u30d7: +UIExporterPDFPanel.labelBottom.text=\u30dc\u30c8\u30e0: +UIExporterPDFPanel.topMarginTextField.text= +UIExporterPDFPanel.bottomMarginTextField.text= +UIExporterPDFPanel.labelMargins.text=\u30de\u30fc\u30b8\u30f3: +UIExporterPDFPanel.labelLeft.text=\u5de6: +UIExporterPDFPanel.labelRight.text=\u53f3: +UIExporterPDFPanel.leftMarginTextField.text= +UIExporterPDFPanel.rightMargintextField.text= + +UIExporterPDFPanel.pageSize.custom=\u30ab\u30b9\u30bf\u30e0... +UIExporterPDFPanel.widthUnitLabel.text= +UIExporterPDFPanel.heightUnitLabel.text= +UIExporterPDFPanel.labelUnit.text=\u5358\u4f4d: +UIExporterPDFPanel.unitLink.millimeter=\u30df\u30ea\u30e1\u30fc\u30bf +UIExporterPDFPanel.unitLink.inch=\u30a4\u30f3\u30c1 +UIExporterPDFPanel.labelUnit.millimeter=mm +UIExporterPDFPanel.labelUnit.inch=in +PositiveSizeValidator.NEGATIVE = {0}\u306f\u6b63\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093 +UIExporterPDFPanel.unitLink.toolTipText=\u5358\u4f4d\u30df\u30ea/\u30a4\u30f3\u30c1\u3092\u5909\u66f4 +UIExporterSVGPanel.strokeScaleCheckbox.text=\u7dda\u5e45\u3092\u30b9\u30b1\u30fc\u30eb +UIExporterSVGPanel.labelStrokeScale.text=Adobe Illustrator\u3092\u5bfe\u8c61 +UIExporterPNGPanel.widthLabel.text=\u5e45: +UIExporterPNGPanel.heightLabel.text=\u9ad8\u3055: diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_ko.properties b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_ko.properties new file mode 100644 index 0000000000..eb1667c50b --- /dev/null +++ b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_ko.properties @@ -0,0 +1,31 @@ + + +OpenIDE-Module-Short-Description=\uBCA1\uD130 \uB0B4\uBCF4\uB0B4\uAE30 \uC0AC\uC6A9\uC790 \uC778\uD130\uD398\uC774\uC2A4 +UIExporterPDF.name=PDF +UIExporterSVG.name=SVG +UIExporterPDFPanel.labelPageSize.text=\uD398\uC774\uC9C0 \uD06C\uAE30: +UIExporterPDFPanel.labelWidth.text=\uB108\uBE44: +UIExporterPDFPanel.labelHeight.text=\uB192\uC774: +UIExporterPDFPanel.portraitRadio.text=\uC138\uB85C\uD615 +UIExporterPDFPanel.landscapeRadio.text=\uAC00\uB85C\uD615 +UIExporterPDFPanel.labelOrientation.text=\uBC29\uD5A5: +UIExporterPDFPanel.labelTop.text=\uB9E8 \uC704: +UIExporterPDFPanel.labelMargins.text=\uC5EC\uBC31: +UIExporterPDFPanel.labelRight.text=\uC624\uB978\uCABD: +UIExporterPDFPanel.pageSize.custom=\uB9DE\uCDA4 ... +UIExporterPDFPanel.labelUnit.text=\uB2E8\uC704: +UIExporterPDFPanel.unitLink.millimeter=mm +UIExporterPDFPanel.unitLink.inch=\uC778\uCE58 +UIExporterPDFPanel.labelUnit.millimeter=mm +PositiveSizeValidator.NEGATIVE={0}\uC740 \uC591\uC218\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4 +UIExporterPDFPanel.unitLink.toolTipText=\uBC00\uB9AC\uBBF8\uD130/\uC778\uCE58 \uB2E8\uC704 \uBCC0\uACBD +UIExporterSVGPanel.strokeScaleCheckbox.text=\uC2A4\uD2B8\uB85C\uD06C-\uD3ED \uD06C\uAE30 \uC870\uC815 +UIExporterSVGPanel.labelStrokeScale.text=Adobe Illustrator\uC5D0 \uAD8C\uC7A5\uB428 +UIExporterPNGPanel.widthLabel.text=\uB108\uBE44: +UIExporterPNGPanel.heightLabel.text=\uB192\uC774: +UIExporterPDFPanel.labelBackground.text=\uBC30\uACBD: +UIExporterPDFPanel.transparentBackgroundCheckbox.text=\uD22C\uBA85 \uBC30\uACBD +UIExporterPNG.name=PNG +UIExporterPDFPanel.labelLeft.text=\uC67C\uCABD: +UIExporterPDFPanel.labelBottom.text=\uBC14\uB2E5: +UIExporterPDFPanel.labelUnit.inch=in diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_nl.properties b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_nl.properties new file mode 100644 index 0000000000..20828d8745 --- /dev/null +++ b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_nl.properties @@ -0,0 +1,35 @@ +OpenIDE-Module-Short-Description=Vectorial exporters user interfaces +UIExporterPDF.name=PDF +UIExporterSVG.name=SVG +UIExporterPNG.name=PNG +UIExporterPDFPanel.labelPageSize.text=Paginagrootte: +UIExporterPDFPanel.widthTextField.text= +UIExporterPDFPanel.labelWidth.text=Breedte: +UIExporterPDFPanel.labelHeight.text=Hoogte: +UIExporterPDFPanel.heightTextField.text= +UIExporterPDFPanel.portraitRadio.text=Portret +UIExporterPDFPanel.landscapeRadio.text=Landschap +UIExporterPDFPanel.labelOrientation.text=Oriλntatie: +UIExporterPDFPanel.labelTop.text=Boven: +UIExporterPDFPanel.labelBottom.text=Onder: +UIExporterPDFPanel.topMarginTextField.text= +UIExporterPDFPanel.bottomMarginTextField.text= +UIExporterPDFPanel.labelMargins.text=Marges: +UIExporterPDFPanel.labelLeft.text=Links: +UIExporterPDFPanel.labelRight.text=Rechts: +UIExporterPDFPanel.leftMarginTextField.text= +UIExporterPDFPanel.rightMargintextField.text= +UIExporterPDFPanel.pageSize.custom=Aangepast... +UIExporterPDFPanel.widthUnitLabel.text= +UIExporterPDFPanel.heightUnitLabel.text= +UIExporterPDFPanel.labelUnit.text=Eenheid: +UIExporterPDFPanel.unitLink.millimeter=Millimeter +UIExporterPDFPanel.unitLink.inch=Inch +UIExporterPDFPanel.labelUnit.millimeter=mm +UIExporterPDFPanel.labelUnit.inch=in +PositiveSizeValidator.NEGATIVE={0} moet positief zijn +UIExporterPDFPanel.unitLink.toolTipText=Change Unit Millimeter/Inches +UIExporterSVGPanel.strokeScaleCheckbox.text=Scale stroke-width +UIExporterSVGPanel.labelStrokeScale.text=Aanbevolen voor Adobe Illustrator +UIExporterPNGPanel.widthLabel.text=Breedte: +UIExporterPNGPanel.heightLabel.text=Hoogte: diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_pt_BR.properties b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_pt_BR.properties index a0d82d6b22..593df06f39 100644 --- a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_pt_BR.properties +++ b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_pt_BR.properties @@ -1,61 +1,38 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-21 21\:21+0000\nLast-Translator\: gephi \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Interface de usu\u00e1rio dos exportadores vetoriais - -UIExporterPDF.name=PDF - -UIExporterSVG.name=SVG - -UIExporterPNG.name=PNG - -UIExporterPDFPanel.labelPageSize.text=Tamanho da p\u00e1gina\: - -UIExporterPDFPanel.labelWidth.text=Largura\: - -UIExporterPDFPanel.labelHeight.text=Altura\: - -UIExporterPDFPanel.portraitRadio.text=Retrato - -UIExporterPDFPanel.landscapeRadio.text=Paisagem - -UIExporterPDFPanel.labelOrientation.text=Orienta\u00e7\u00e3o\: - -UIExporterPDFPanel.labelTop.text=Superior\: - -UIExporterPDFPanel.labelBottom.text=Inferior\: - -UIExporterPDFPanel.labelMargins.text=Margens\: - -UIExporterPDFPanel.labelLeft.text=Esquerda\: - -UIExporterPDFPanel.labelRight.text=Direita\: - -UIExporterPDFPanel.pageSize.custom=Personalizado... - -UIExporterPDFPanel.labelUnit.text=Unidade\: - -UIExporterPDFPanel.unitLink.millimeter=Mil\u00edmetro - -UIExporterPDFPanel.unitLink.inch=Polegada - -UIExporterPDFPanel.labelUnit.millimeter=mm - -UIExporterPDFPanel.labelUnit.inch=in - -PositiveSizeValidator.NEGATIVE={0} deve ser positivo - -UIExporterPDFPanel.unitLink.toolTipText=Alterar unidade entre mil\u00edmetros/polegadas - -UIExporterSVGPanel.strokeScaleCheckbox.text=Definir largura do tra\u00e7o - -UIExporterSVGPanel.labelStrokeScale.text=Recomendado para Adobe Illustrator - -UIExporterPNGPanel.widthLabel.text=Largura\: - -UIExporterPNGPanel.heightLabel.text=Altura\: +OpenIDE-Module-Short-Description=Interface de usuαrio dos exportadores vetoriais + +UIExporterPDF.name = PDF +UIExporterSVG.name = SVG +UIExporterPNG.name = PNG + +UIExporterPDFPanel.labelPageSize.text=Tamanho da pαgina: +UIExporterPDFPanel.widthTextField.text= +UIExporterPDFPanel.labelWidth.text=Largura: +UIExporterPDFPanel.labelHeight.text=Altura: +UIExporterPDFPanel.heightTextField.text= +UIExporterPDFPanel.portraitRadio.text=Retrato +UIExporterPDFPanel.landscapeRadio.text=Paisagem +UIExporterPDFPanel.labelOrientation.text=Orientaηγo: +UIExporterPDFPanel.labelTop.text=Superior: +UIExporterPDFPanel.labelBottom.text=Inferior: +UIExporterPDFPanel.topMarginTextField.text= +UIExporterPDFPanel.bottomMarginTextField.text= +UIExporterPDFPanel.labelMargins.text=Margens: +UIExporterPDFPanel.labelLeft.text=Esquerda: +UIExporterPDFPanel.labelRight.text=Direita: +UIExporterPDFPanel.leftMarginTextField.text= +UIExporterPDFPanel.rightMargintextField.text= + +UIExporterPDFPanel.pageSize.custom=Personalizado... +UIExporterPDFPanel.widthUnitLabel.text= +UIExporterPDFPanel.heightUnitLabel.text= +UIExporterPDFPanel.labelUnit.text=Unidade: +UIExporterPDFPanel.unitLink.millimeter=Milνmetro +UIExporterPDFPanel.unitLink.inch=Polegada +UIExporterPDFPanel.labelUnit.millimeter=mm +UIExporterPDFPanel.labelUnit.inch=in +PositiveSizeValidator.NEGATIVE = {0} deve ser positivo +UIExporterPDFPanel.unitLink.toolTipText=Alterar unidade entre milνmetros/polegadas +UIExporterSVGPanel.strokeScaleCheckbox.text=Definir largura do traηo +UIExporterSVGPanel.labelStrokeScale.text=Recomendado para Adobe Illustrator +UIExporterPNGPanel.widthLabel.text=Largura: +UIExporterPNGPanel.heightLabel.text=Altura: diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_ro.properties b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_ro.properties new file mode 100644 index 0000000000..754508ff59 --- /dev/null +++ b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_ro.properties @@ -0,0 +1,29 @@ + + +OpenIDE-Module-Short-Description=Interfe\u021Be utilizator pentru exportatori vectoriali +UIExporterPDF.name=PDF +UIExporterPNG.name=PNG +UIExporterSVG.name=SVG +UIExporterPDFPanel.labelPageSize.text=Dimensiunea paginii: +UIExporterPDFPanel.labelWidth.text=L\u0103\u021Bime: +UIExporterPDFPanel.portraitRadio.text=Portret +UIExporterPDFPanel.labelUnit.text=Unitate: +UIExporterPDFPanel.unitLink.toolTipText=Schimb\u0103 unitatea milimetri/inchi +UIExporterPDFPanel.pageSize.custom=Personalizat\u0103... +UIExporterPDFPanel.unitLink.millimeter=Milimetru +UIExporterPDFPanel.labelUnit.millimeter=mm +UIExporterPDFPanel.labelUnit.inch=in +UIExporterPDFPanel.labelHeight.text=\u00CEn\u0103l\u021Bime: +UIExporterPDFPanel.labelMargins.text=Margini: +UIExporterPNGPanel.widthLabel.text=L\u0103\u021Bime: +UIExporterPNGPanel.heightLabel.text=\u00CEn\u0103l\u021Bime: +UIExporterPDFPanel.landscapeRadio.text=Peisaj +UIExporterPDFPanel.labelOrientation.text=Orientare: +UIExporterPDFPanel.labelTop.text=Sus: +UIExporterPDFPanel.labelBottom.text=Jos: +UIExporterPDFPanel.labelLeft.text=St\u00E2nga: +UIExporterPDFPanel.labelRight.text=Dreapta: +UIExporterPDFPanel.unitLink.inch=Inch +PositiveSizeValidator.NEGATIVE={0} trebuie s\u0103 fie pozitiv +UIExporterSVGPanel.labelStrokeScale.text=Recomandat pentru Adobe Illustrator +UIExporterSVGPanel.strokeScaleCheckbox.text=Scaleaz\u0103 l\u0103\u021Bimea conturului diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_ru.properties b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_ru.properties index 08c3e29d38..12bd0f9aab 100644 --- a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_ru.properties +++ b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_ru.properties @@ -1,61 +1,38 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-06 06\:47+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Short-Description=UI \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 - -UIExporterPDF.name=PDF - -UIExporterSVG.name=SVG - -UIExporterPNG.name=PNG - -UIExporterPDFPanel.labelPageSize.text=\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b\: - -UIExporterPDFPanel.labelWidth.text=\u0428\u0438\u0440\u0438\u043d\u0430\: - -UIExporterPDFPanel.labelHeight.text=\u0412\u044b\u0441\u043e\u0442\u0430\: - -UIExporterPDFPanel.portraitRadio.text=\u041f\u043e\u0440\u0442\u0440\u0435\u0442\u043d\u0430\u044f - -UIExporterPDFPanel.landscapeRadio.text=\u041b\u0430\u043d\u0434\u0448\u0430\u0444\u0442\u043d\u0430\u044f - -UIExporterPDFPanel.labelOrientation.text=\u041e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044f\: - -UIExporterPDFPanel.labelTop.text=\u0421\u0432\u0435\u0440\u0445\u0443\: - -UIExporterPDFPanel.labelBottom.text=\u0421\u043d\u0438\u0437\u0443\: - -UIExporterPDFPanel.labelMargins.text=\u041e\u0442\u0441\u0442\u0443\u043f\u044b\: - -UIExporterPDFPanel.labelLeft.text=\u0421\u043b\u0435\u0432\u0430\: - -UIExporterPDFPanel.labelRight.text=\u0421\u043f\u0440\u0430\u0432\u0430\: - -UIExporterPDFPanel.pageSize.custom=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c... - -UIExporterPDFPanel.labelUnit.text=\u0415\u0434\u0438\u043d\u0438\u0446\u044b\: - -UIExporterPDFPanel.unitLink.millimeter=\u041c\u0438\u043b\u043b\u0438\u043c\u0435\u0442\u0440\u044b - -UIExporterPDFPanel.unitLink.inch=\u0414\u044e\u0439\u043c\u044b - -UIExporterPDFPanel.labelUnit.millimeter=mm - -UIExporterPDFPanel.labelUnit.inch=in - -PositiveSizeValidator.NEGATIVE=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {0} \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c - -UIExporterPDFPanel.unitLink.toolTipText=\u0421\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u043d\u0430 \u043c\u0438\u043b\u043b\u0438\u043c\u0435\u0442\u0440\u044b/\u0434\u044e\u0439\u043c\u044b - -UIExporterSVGPanel.strokeScaleCheckbox.text=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 \u0448\u0442\u0440\u0438\u0445\u0430 - -UIExporterSVGPanel.labelStrokeScale.text=\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f Adobe Illustrator - -UIExporterPNGPanel.widthLabel.text=\u0428\u0438\u0440\u0438\u043d\u0430\: - -UIExporterPNGPanel.heightLabel.text=\u0412\u044b\u0441\u043e\u0442\u0430\: +OpenIDE-Module-Short-Description=UI \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0430 \u0432 \u0432\u0435\u043a\u0442\u043e\u0440\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u0430\u0445 + +UIExporterPDF.name = PDF +UIExporterSVG.name = SVG +UIExporterPNG.name = PNG + +UIExporterPDFPanel.labelPageSize.text=\u0420\u0430\u0437\u043c\u0435\u0440 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b: +UIExporterPDFPanel.widthTextField.text= +UIExporterPDFPanel.labelWidth.text=\u0428\u0438\u0440\u0438\u043d\u0430: +UIExporterPDFPanel.labelHeight.text=\u0412\u044b\u0441\u043e\u0442\u0430: +UIExporterPDFPanel.heightTextField.text= +UIExporterPDFPanel.portraitRadio.text=\u041f\u043e\u0440\u0442\u0440\u0435\u0442\u043d\u0430\u044f +UIExporterPDFPanel.landscapeRadio.text=\u041b\u0430\u043d\u0434\u0448\u0430\u0444\u0442\u043d\u0430\u044f +UIExporterPDFPanel.labelOrientation.text=\u041e\u0440\u0438\u0435\u043d\u0442\u0430\u0446\u0438\u044f: +UIExporterPDFPanel.labelTop.text=\u0421\u0432\u0435\u0440\u0445\u0443: +UIExporterPDFPanel.labelBottom.text=\u0421\u043d\u0438\u0437\u0443: +UIExporterPDFPanel.topMarginTextField.text= +UIExporterPDFPanel.bottomMarginTextField.text= +UIExporterPDFPanel.labelMargins.text=\u041e\u0442\u0441\u0442\u0443\u043f\u044b: +UIExporterPDFPanel.labelLeft.text=\u0421\u043b\u0435\u0432\u0430: +UIExporterPDFPanel.labelRight.text=\u0421\u043f\u0440\u0430\u0432\u0430: +UIExporterPDFPanel.leftMarginTextField.text= +UIExporterPDFPanel.rightMargintextField.text= + +UIExporterPDFPanel.pageSize.custom=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c... +UIExporterPDFPanel.widthUnitLabel.text= +UIExporterPDFPanel.heightUnitLabel.text= +UIExporterPDFPanel.labelUnit.text=\u0415\u0434\u0438\u043d\u0438\u0446\u044b: +UIExporterPDFPanel.unitLink.millimeter=\u041c\u0438\u043b\u043b\u0438\u043c\u0435\u0442\u0440\u044b +UIExporterPDFPanel.unitLink.inch=\u0414\u044e\u0439\u043c\u044b +UIExporterPDFPanel.labelUnit.millimeter=mm +UIExporterPDFPanel.labelUnit.inch=in +PositiveSizeValidator.NEGATIVE = \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {0} \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c +UIExporterPDFPanel.unitLink.toolTipText=\u0421\u043c\u0435\u043d\u0438\u0442\u044c \u0435\u0434\u0438\u043d\u0438\u0446\u044b \u043d\u0430 \u043c\u0438\u043b\u043b\u0438\u043c\u0435\u0442\u0440\u044b/\u0434\u044e\u0439\u043c\u044b +UIExporterSVGPanel.strokeScaleCheckbox.text=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 \u0448\u0442\u0440\u0438\u0445\u0430 +UIExporterSVGPanel.labelStrokeScale.text=\u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f Adobe Illustrator +UIExporterPNGPanel.widthLabel.text=\u0428\u0438\u0440\u0438\u043d\u0430: +UIExporterPNGPanel.heightLabel.text=\u0412\u044b\u0441\u043e\u0442\u0430: diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_th.properties b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_tr.properties b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_tr.properties new file mode 100644 index 0000000000..480b42758b --- /dev/null +++ b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_tr.properties @@ -0,0 +1,35 @@ +OpenIDE-Module-Short-Description=Vectorial exporters user interfaces +UIExporterPDF.name=PDF +UIExporterSVG.name=SVG +UIExporterPNG.name=PNG +UIExporterPDFPanel.labelPageSize.text=Page size: +UIExporterPDFPanel.widthTextField.text= +UIExporterPDFPanel.labelWidth.text=Width: +UIExporterPDFPanel.labelHeight.text=Height: +UIExporterPDFPanel.heightTextField.text= +UIExporterPDFPanel.portraitRadio.text=Portrait +UIExporterPDFPanel.landscapeRadio.text=Landscape +UIExporterPDFPanel.labelOrientation.text=Orientation: +UIExporterPDFPanel.labelTop.text=Top: +UIExporterPDFPanel.labelBottom.text=Bottom: +UIExporterPDFPanel.topMarginTextField.text= +UIExporterPDFPanel.bottomMarginTextField.text= +UIExporterPDFPanel.labelMargins.text=Margins: +UIExporterPDFPanel.labelLeft.text=Left: +UIExporterPDFPanel.labelRight.text=Right: +UIExporterPDFPanel.leftMarginTextField.text= +UIExporterPDFPanel.rightMargintextField.text= +UIExporterPDFPanel.pageSize.custom=Custom... +UIExporterPDFPanel.widthUnitLabel.text= +UIExporterPDFPanel.heightUnitLabel.text= +UIExporterPDFPanel.labelUnit.text=Unit: +UIExporterPDFPanel.unitLink.millimeter=Millimeter +UIExporterPDFPanel.unitLink.inch=Inch +UIExporterPDFPanel.labelUnit.millimeter=mm +UIExporterPDFPanel.labelUnit.inch=in +PositiveSizeValidator.NEGATIVE={0} must be positive +UIExporterPDFPanel.unitLink.toolTipText=Change Unit Millimeter/Inches +UIExporterSVGPanel.strokeScaleCheckbox.text=Scale stroke-width +UIExporterSVGPanel.labelStrokeScale.text=Recommended for Adobe Illustrator +UIExporterPNGPanel.widthLabel.text=Width: +UIExporterPNGPanel.heightLabel.text=Height: diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_uk.properties b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_uk.properties new file mode 100644 index 0000000000..b98c12fe66 --- /dev/null +++ b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_uk.properties @@ -0,0 +1,37 @@ +UIExporterPDF.name=PDF +UIExporterPNG.name=PNG +UIExporterPDFPanel.labelLeft.text=\u041B\u0456\u0432\u043E\u0440\u0443\u0447: +UIExporterPDFPanel.labelBottom.text=\u0412\u043D\u0438\u0437: +UIExporterPDFPanel.labelMargins.text=\u041F\u043E\u043B\u044F: +UIExporterPDFPanel.labelUnit.text=\u041E\u0434\u0438\u043D\u0438\u0446\u044F: +UIExporterSVGPanel.labelStrokeScale.text=\u0420\u0435\u043A\u043E\u043C\u0435\u043D\u0434\u043E\u0432\u0430\u043D\u043E \u0434\u043B\u044F Adobe Illustrator +UIExporterPDFPanel.widthUnitLabel.text=\u0406 +UIExporterPDFPanel.unitLink.inch=\u0434\u044E\u0439\u043C +OpenIDE-Module-Short-Description=\u0406\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0438 \u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430 \u0432\u0435\u043A\u0442\u043E\u0440\u043D\u0438\u0445 \u0435\u043A\u0441\u043F\u043E\u0440\u0442\u0435\u0440\u0456\u0432 +UIExporterPDFPanel.heightTextField.text=\u0406 +UIExporterPDFPanel.portraitRadio.text=\u041F\u043E\u0440\u0442\u0440\u0435\u0442 +UIExporterPDFPanel.pageSize.custom=\u0421\u043F\u0435\u0446\u0456\u0430\u043B\u044C\u043D\u0456... +UIExporterPDFPanel.landscapeRadio.text=\u041F\u0435\u0439\u0437\u0430\u0436 +UIExporterPDFPanel.bottomMarginTextField.text=\u0406 +UIExporterPDFPanel.leftMarginTextField.text=\u0406 +UIExporterPDFPanel.labelOrientation.text=\u041E\u0440\u0456\u0454\u043D\u0442\u0430\u0446\u0456\u044F: +UIExporterPDFPanel.topMarginTextField.text=\u0406 +UIExporterPDFPanel.labelUnit.millimeter=\u043C\u043C +UIExporterPDFPanel.labelUnit.inch=\u0432 +PositiveSizeValidator.NEGATIVE={0} \u043C\u0430\u0454 \u0431\u0443\u0442\u0438 \u043F\u043E\u0437\u0438\u0442\u0438\u0432\u043D\u0438\u043C +UIExporterPDFPanel.unitLink.toolTipText=\u0417\u043C\u0456\u043D\u0438\u0442\u0438 \u043E\u0434\u0438\u043D\u0438\u0446\u044E \u0432\u0438\u043C\u0456\u0440\u044E\u0432\u0430\u043D\u043D\u044F \u043C\u0456\u043B\u0456\u043C\u0435\u0442\u0440/\u0434\u044E\u0439\u043C +UIExporterSVGPanel.strokeScaleCheckbox.text=\u0428\u0438\u0440\u0438\u043D\u0430 \u0448\u0442\u0440\u0438\u0445\u0430 \u0448\u043A\u0430\u043B\u0438 +UIExporterPNGPanel.widthLabel.text=\u0428\u0438\u0440\u0438\u043D\u0430: +UIExporterPNGPanel.heightLabel.text=\u0412\u0438\u0441\u043E\u0442\u0430: +UIExporterPDFPanel.labelBackground.text=\u0424\u043E\u043D: +UIExporterPDFPanel.transparentBackgroundCheckbox.text=\u041F\u0440\u043E\u0437\u043E\u0440\u0438\u0439 \u0444\u043E\u043D +UIExporterPDFPanel.labelWidth.text=\u0428\u0438\u0440\u0438\u043D\u0430: +UIExporterPDFPanel.labelTop.text=\u0422\u043E\u043F: +UIExporterPDFPanel.labelRight.text=\u041F\u0440\u0430\u0432\u043E\u0440\u0443\u0447: +UIExporterPDFPanel.rightMargintextField.text=\u0406 +UIExporterPDFPanel.heightUnitLabel.text=\u0406 +UIExporterPDFPanel.unitLink.millimeter=\u041C\u0456\u043B\u0456\u043C\u0435\u0442\u0440 +UIExporterPDFPanel.labelHeight.text=\u0412\u0438\u0441\u043E\u0442\u0430: +UIExporterPDFPanel.labelPageSize.text=\u0420\u043E\u0437\u043C\u0456\u0440 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438: +UIExporterPDFPanel.widthTextField.text=\u0406 +UIExporterSVG.name=SVG diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_zh_CN.properties b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_zh_CN.properties index cac1b23ddb..4da5d00af4 100644 --- a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_zh_CN.properties +++ b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_zh_CN.properties @@ -1,60 +1,38 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:09+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u77e2\u91cf\u8f93\u51fa\u7684\u7528\u6237\u754c\u9762 - -UIExporterPDF.name=PDF\u683c\u5f0f - -UIExporterSVG.name=SVG - -UIExporterPNG.name=PNG - -UIExporterPDFPanel.labelPageSize.text=\u9875\u9762\u5c3a\u5bf8\uff1a - -UIExporterPDFPanel.labelWidth.text=\u5bbd\u5ea6\uff1a - -UIExporterPDFPanel.labelHeight.text=\u9ad8\uff1a - -UIExporterPDFPanel.portraitRadio.text=\u63cf\u5199 - -UIExporterPDFPanel.landscapeRadio.text=\u7f8e\u5316 - -UIExporterPDFPanel.labelOrientation.text=\u65b9\u5411\uff1a - -UIExporterPDFPanel.labelTop.text=\u9876\uff1a - -UIExporterPDFPanel.labelBottom.text=\u5e95\u90e8\uff1a - -UIExporterPDFPanel.labelMargins.text=\u9875\u8fb9\u8ddd\uff1a - -UIExporterPDFPanel.labelLeft.text=\u5de6\uff1a - -UIExporterPDFPanel.labelRight.text=\u53f3\uff1a - -UIExporterPDFPanel.pageSize.custom=\u81ea\u5b9a\u4e49... - -UIExporterPDFPanel.labelUnit.text=\u5355\u4f4d\uff1a - -UIExporterPDFPanel.unitLink.millimeter=\u6beb\u7c73 - -UIExporterPDFPanel.unitLink.inch=\u82f1\u5bf8 - -UIExporterPDFPanel.labelUnit.millimeter=\u6beb\u7c73 - -UIExporterPDFPanel.labelUnit.inch=\u5728 - -PositiveSizeValidator.NEGATIVE={0}\u5fc5\u987b\u662f\u6b63\u6570 - -UIExporterPDFPanel.unitLink.toolTipText=\u6539\u53d8\u5355\u4f4d\u6beb\u7c73/\u82f1\u5bf8 - -UIExporterSVGPanel.strokeScaleCheckbox.text=\u4f9d\u6bd4\u4f8b\u51b3\u5b9a\u5f62\u6210\u5bbd\u5ea6 - -UIExporterSVGPanel.labelStrokeScale.text=\u63a8\u8350Adobe\u8bbe\u8ba1\u7ed8\u56fe - -UIExporterPNGPanel.widthLabel.text=\u5bbd\u5ea6\uff1a - -UIExporterPNGPanel.heightLabel.text=\u9ad8\uff1a +OpenIDE-Module-Short-Description=\u77e2\u91cf\u8f93\u51fa\u7684\u7528\u6237\u754c\u9762 + +UIExporterPDF.name = PDF\u683c\u5f0f +UIExporterSVG.name = SVG +UIExporterPNG.name = PNG + +UIExporterPDFPanel.labelPageSize.text=\u9875\u9762\u5c3a\u5bf8\uff1a +UIExporterPDFPanel.widthTextField.text= +UIExporterPDFPanel.labelWidth.text=\u5bbd\u5ea6\uff1a +UIExporterPDFPanel.labelHeight.text=\u9ad8\uff1a +UIExporterPDFPanel.heightTextField.text= +UIExporterPDFPanel.portraitRadio.text=\u63cf\u5199 +UIExporterPDFPanel.landscapeRadio.text=\u7f8e\u5316 +UIExporterPDFPanel.labelOrientation.text=\u65b9\u5411\uff1a +UIExporterPDFPanel.labelTop.text=\u9876\uff1a +UIExporterPDFPanel.labelBottom.text=\u5e95\u90e8\uff1a +UIExporterPDFPanel.topMarginTextField.text= +UIExporterPDFPanel.bottomMarginTextField.text= +UIExporterPDFPanel.labelMargins.text=\u9875\u8fb9\u8ddd\uff1a +UIExporterPDFPanel.labelLeft.text=\u5de6\uff1a +UIExporterPDFPanel.labelRight.text=\u53f3\uff1a +UIExporterPDFPanel.leftMarginTextField.text= +UIExporterPDFPanel.rightMargintextField.text= + +UIExporterPDFPanel.pageSize.custom=\u81ea\u5b9a\u4e49... +UIExporterPDFPanel.widthUnitLabel.text= +UIExporterPDFPanel.heightUnitLabel.text= +UIExporterPDFPanel.labelUnit.text=\u5355\u4f4d\uff1a +UIExporterPDFPanel.unitLink.millimeter=\u6beb\u7c73 +UIExporterPDFPanel.unitLink.inch=\u82f1\u5bf8 +UIExporterPDFPanel.labelUnit.millimeter=\u6beb\u7c73 +UIExporterPDFPanel.labelUnit.inch=\u5728 +PositiveSizeValidator.NEGATIVE = {0}\u5fc5\u987b\u662f\u6b63\u6570 +UIExporterPDFPanel.unitLink.toolTipText=\u6539\u53d8\u5355\u4f4d\u6beb\u7c73/\u82f1\u5bf8 +UIExporterSVGPanel.strokeScaleCheckbox.text=\u4f9d\u6bd4\u4f8b\u51b3\u5b9a\u5f62\u6210\u5bbd\u5ea6 +UIExporterSVGPanel.labelStrokeScale.text=\u63a8\u8350Adobe\u8bbe\u8ba1\u7ed8\u56fe +UIExporterPNGPanel.widthLabel.text=\u5bbd\u5ea6\uff1a +UIExporterPNGPanel.heightLabel.text=\u9ad8\uff1a diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_zh_TW.properties b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_zh_TW.properties new file mode 100644 index 0000000000..480b42758b --- /dev/null +++ b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/Bundle_zh_TW.properties @@ -0,0 +1,35 @@ +OpenIDE-Module-Short-Description=Vectorial exporters user interfaces +UIExporterPDF.name=PDF +UIExporterSVG.name=SVG +UIExporterPNG.name=PNG +UIExporterPDFPanel.labelPageSize.text=Page size: +UIExporterPDFPanel.widthTextField.text= +UIExporterPDFPanel.labelWidth.text=Width: +UIExporterPDFPanel.labelHeight.text=Height: +UIExporterPDFPanel.heightTextField.text= +UIExporterPDFPanel.portraitRadio.text=Portrait +UIExporterPDFPanel.landscapeRadio.text=Landscape +UIExporterPDFPanel.labelOrientation.text=Orientation: +UIExporterPDFPanel.labelTop.text=Top: +UIExporterPDFPanel.labelBottom.text=Bottom: +UIExporterPDFPanel.topMarginTextField.text= +UIExporterPDFPanel.bottomMarginTextField.text= +UIExporterPDFPanel.labelMargins.text=Margins: +UIExporterPDFPanel.labelLeft.text=Left: +UIExporterPDFPanel.labelRight.text=Right: +UIExporterPDFPanel.leftMarginTextField.text= +UIExporterPDFPanel.rightMargintextField.text= +UIExporterPDFPanel.pageSize.custom=Custom... +UIExporterPDFPanel.widthUnitLabel.text= +UIExporterPDFPanel.heightUnitLabel.text= +UIExporterPDFPanel.labelUnit.text=Unit: +UIExporterPDFPanel.unitLink.millimeter=Millimeter +UIExporterPDFPanel.unitLink.inch=Inch +UIExporterPDFPanel.labelUnit.millimeter=mm +UIExporterPDFPanel.labelUnit.inch=in +PositiveSizeValidator.NEGATIVE={0} must be positive +UIExporterPDFPanel.unitLink.toolTipText=Change Unit Millimeter/Inches +UIExporterSVGPanel.strokeScaleCheckbox.text=Scale stroke-width +UIExporterSVGPanel.labelStrokeScale.text=Recommended for Adobe Illustrator +UIExporterPNGPanel.widthLabel.text=Width: +UIExporterPNGPanel.heightLabel.text=Height: diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/cs.po b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/cs.po deleted file mode 100644 index 053739868d..0000000000 --- a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/cs.po +++ /dev/null @@ -1,100 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-20 21:49+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "UΕΎivatelskΓ© rozhranΓ­ vektorovΓ½ch exportΓ©rΕ―" - -msgid "UIExporterPDF.name" -msgstr "PDF" - -msgid "UIExporterSVG.name" -msgstr "SVG" - -msgid "UIExporterPNG.name" -msgstr "PNG" - -msgid "UIExporterPDFPanel.labelPageSize.text" -msgstr "Velikost strΓ‘nky:" - -msgid "UIExporterPDFPanel.labelWidth.text" -msgstr "Ε Γ­Ε™ka:" - -msgid "UIExporterPDFPanel.labelHeight.text" -msgstr "VΓ½Ε‘ka:" - -msgid "UIExporterPDFPanel.portraitRadio.text" -msgstr "Na vΓ½Ε‘ku" - -msgid "UIExporterPDFPanel.landscapeRadio.text" -msgstr "Na Ε‘Γ­Ε™ku" - -msgid "UIExporterPDFPanel.labelOrientation.text" -msgstr "Orientace:" - -msgid "UIExporterPDFPanel.labelTop.text" -msgstr "NahoΕ™e:" - -msgid "UIExporterPDFPanel.labelBottom.text" -msgstr "Dole:" - -msgid "UIExporterPDFPanel.labelMargins.text" -msgstr "Okraje:" - -msgid "UIExporterPDFPanel.labelLeft.text" -msgstr "Vlevo:" - -msgid "UIExporterPDFPanel.labelRight.text" -msgstr "Vpravo:" - -msgid "UIExporterPDFPanel.pageSize.custom" -msgstr "VlastnΓ­..." - -msgid "UIExporterPDFPanel.labelUnit.text" -msgstr "Jednotka:" - -msgid "UIExporterPDFPanel.unitLink.millimeter" -msgstr "Milimetr" - -msgid "UIExporterPDFPanel.unitLink.inch" -msgstr "Palec" - -msgid "UIExporterPDFPanel.labelUnit.millimeter" -msgstr "mm" - -msgid "UIExporterPDFPanel.labelUnit.inch" -msgstr "in" - -msgid "PositiveSizeValidator.NEGATIVE" -msgstr "{0} musΓ­ bΓ½t kladnΓ©" - -msgid "UIExporterPDFPanel.unitLink.toolTipText" -msgstr "ZmΔ›nit jednotku na milimetr/palec" - -msgid "UIExporterSVGPanel.strokeScaleCheckbox.text" -msgstr "MΔ›Ε™Γ­tko Ε‘Γ­Ε™ky tahu" - -msgid "UIExporterSVGPanel.labelStrokeScale.text" -msgstr "Doporučeno pro Adobe Illustrator" - -msgid "UIExporterPNGPanel.widthLabel.text" -msgstr "Ε Γ­Ε™ka:" - -msgid "UIExporterPNGPanel.heightLabel.text" -msgstr "VΓ½Ε‘ka:" diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/es.po b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/es.po deleted file mode 100644 index bc34e88918..0000000000 --- a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/es.po +++ /dev/null @@ -1,101 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-21 21:21+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interfaz de usuario de exportadores vectoriales" - -msgid "UIExporterPDF.name" -msgstr "PDF" - -msgid "UIExporterSVG.name" -msgstr "SVG" - -msgid "UIExporterPNG.name" -msgstr "PNG" - -msgid "UIExporterPDFPanel.labelPageSize.text" -msgstr "TamaΓ±o de pΓ‘gina:" - -msgid "UIExporterPDFPanel.labelWidth.text" -msgstr "Ancho:" - -msgid "UIExporterPDFPanel.labelHeight.text" -msgstr "Alto:" - -msgid "UIExporterPDFPanel.portraitRadio.text" -msgstr "Vertical" - -msgid "UIExporterPDFPanel.landscapeRadio.text" -msgstr "Horizontal" - -msgid "UIExporterPDFPanel.labelOrientation.text" -msgstr "OrientaciΓ³n:" - -msgid "UIExporterPDFPanel.labelTop.text" -msgstr "Superior:" - -msgid "UIExporterPDFPanel.labelBottom.text" -msgstr "Inferior:" - -msgid "UIExporterPDFPanel.labelMargins.text" -msgstr "MΓ‘rgenes:" - -msgid "UIExporterPDFPanel.labelLeft.text" -msgstr "Izquierdo:" - -msgid "UIExporterPDFPanel.labelRight.text" -msgstr "Derecho:" - -msgid "UIExporterPDFPanel.pageSize.custom" -msgstr "Personalizado..." - -msgid "UIExporterPDFPanel.labelUnit.text" -msgstr "Unidades:" - -msgid "UIExporterPDFPanel.unitLink.millimeter" -msgstr "MilΓ­metros" - -msgid "UIExporterPDFPanel.unitLink.inch" -msgstr "Pulgadas" - -msgid "UIExporterPDFPanel.labelUnit.millimeter" -msgstr "mm" - -msgid "UIExporterPDFPanel.labelUnit.inch" -msgstr "in" - -msgid "PositiveSizeValidator.NEGATIVE" -msgstr "{0} debe ser positivo" - -msgid "UIExporterPDFPanel.unitLink.toolTipText" -msgstr "Cambiar unidades entre milΓ­metros/pulgadas" - -msgid "UIExporterSVGPanel.strokeScaleCheckbox.text" -msgstr "Escalar anchura del trazo" - -msgid "UIExporterSVGPanel.labelStrokeScale.text" -msgstr "Recomendado para Adobe Illustrator" - -msgid "UIExporterPNGPanel.widthLabel.text" -msgstr "Ancho:" - -msgid "UIExporterPNGPanel.heightLabel.text" -msgstr "Alto:" diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/fr.po b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/fr.po deleted file mode 100644 index 3e9d16b4f6..0000000000 --- a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/fr.po +++ /dev/null @@ -1,101 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-21 21:21+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interface utilisateur des exports vectoriels" - -msgid "UIExporterPDF.name" -msgstr "PDF" - -msgid "UIExporterSVG.name" -msgstr "SVG" - -msgid "UIExporterPNG.name" -msgstr "PNG" - -msgid "UIExporterPDFPanel.labelPageSize.text" -msgstr "Format de page :" - -msgid "UIExporterPDFPanel.labelWidth.text" -msgstr "Largeur :" - -msgid "UIExporterPDFPanel.labelHeight.text" -msgstr "Hauteur :" - -msgid "UIExporterPDFPanel.portraitRadio.text" -msgstr "Portrait" - -msgid "UIExporterPDFPanel.landscapeRadio.text" -msgstr "Paysage" - -msgid "UIExporterPDFPanel.labelOrientation.text" -msgstr "Orientation :" - -msgid "UIExporterPDFPanel.labelTop.text" -msgstr "Haut :" - -msgid "UIExporterPDFPanel.labelBottom.text" -msgstr "Bas :" - -msgid "UIExporterPDFPanel.labelMargins.text" -msgstr "Marges :" - -msgid "UIExporterPDFPanel.labelLeft.text" -msgstr "Gauche :" - -msgid "UIExporterPDFPanel.labelRight.text" -msgstr "Droite :" - -msgid "UIExporterPDFPanel.pageSize.custom" -msgstr "Personnaliser..." - -msgid "UIExporterPDFPanel.labelUnit.text" -msgstr "UnitΓ© :" - -msgid "UIExporterPDFPanel.unitLink.millimeter" -msgstr "MillimΓ¨tre" - -msgid "UIExporterPDFPanel.unitLink.inch" -msgstr "Pouce" - -msgid "UIExporterPDFPanel.labelUnit.millimeter" -msgstr "mm" - -msgid "UIExporterPDFPanel.labelUnit.inch" -msgstr "in" - -msgid "PositiveSizeValidator.NEGATIVE" -msgstr "{0} doit Γͺtre positif" - -msgid "UIExporterPDFPanel.unitLink.toolTipText" -msgstr "Changer l'unitΓ© millimΓ¨tre/pouce" - -msgid "UIExporterSVGPanel.strokeScaleCheckbox.text" -msgstr "Mettre l'Γ©paisseur du trait Γ  l'Γ©chelle" - -msgid "UIExporterSVGPanel.labelStrokeScale.text" -msgstr "RecommandΓ© pour Adobe Illustrator" - -msgid "UIExporterPNGPanel.widthLabel.text" -msgstr "Largeur :" - -msgid "UIExporterPNGPanel.heightLabel.text" -msgstr "Hauteur :" diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/ja.po b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/ja.po deleted file mode 100644 index c78b7a4c58..0000000000 --- a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/ja.po +++ /dev/null @@ -1,100 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-21 21:21+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "γƒ™γ‚―γƒˆγƒ«γ‚¨γ‚―γ‚ΉγƒγƒΌγ‚Ώγγƒ¦γƒΌγ‚Άγ‚€γƒ³γ‚Ώγƒ•γ‚§γƒΌγ‚Ή" - -msgid "UIExporterPDF.name" -msgstr "PDF" - -msgid "UIExporterSVG.name" -msgstr "SVG" - -msgid "UIExporterPNG.name" -msgstr "PNG" - -msgid "UIExporterPDFPanel.labelPageSize.text" -msgstr "γƒšγƒΌγ‚Έγƒ»γ‚΅γ‚€γ‚Ί:" - -msgid "UIExporterPDFPanel.labelWidth.text" -msgstr "εΉ…:" - -msgid "UIExporterPDFPanel.labelHeight.text" -msgstr "ι«˜γ•:" - -msgid "UIExporterPDFPanel.portraitRadio.text" -msgstr "γƒγƒΌγƒˆγƒ¬γƒΌγƒˆ" - -msgid "UIExporterPDFPanel.landscapeRadio.text" -msgstr "ι’¨ζ™―" - -msgid "UIExporterPDFPanel.labelOrientation.text" -msgstr "方向:" - -msgid "UIExporterPDFPanel.labelTop.text" -msgstr "γƒˆγƒƒγƒ—:" - -msgid "UIExporterPDFPanel.labelBottom.text" -msgstr "γƒœγƒˆγƒ :" - -msgid "UIExporterPDFPanel.labelMargins.text" -msgstr "γƒžγƒΌγ‚Έγƒ³:" - -msgid "UIExporterPDFPanel.labelLeft.text" -msgstr "ε·¦:" - -msgid "UIExporterPDFPanel.labelRight.text" -msgstr "右:" - -msgid "UIExporterPDFPanel.pageSize.custom" -msgstr "γ‚«γ‚Ήγ‚Ώγƒ ..." - -msgid "UIExporterPDFPanel.labelUnit.text" -msgstr "単位:" - -msgid "UIExporterPDFPanel.unitLink.millimeter" -msgstr "γƒŸγƒͺパータ" - -msgid "UIExporterPDFPanel.unitLink.inch" -msgstr "むンチ" - -msgid "UIExporterPDFPanel.labelUnit.millimeter" -msgstr "mm" - -msgid "UIExporterPDFPanel.labelUnit.inch" -msgstr "in" - -msgid "PositiveSizeValidator.NEGATIVE" -msgstr "{0}は正でγͺγ‘γ‚Œγ°γͺγ‚ŠγΎγ›γ‚“" - -msgid "UIExporterPDFPanel.unitLink.toolTipText" -msgstr "ε˜δ½γƒŸγƒͺ/むンチを倉更" - -msgid "UIExporterSVGPanel.strokeScaleCheckbox.text" -msgstr "η·šεΉ…γ‚’γ‚Ήγ‚±γƒΌγƒ«" - -msgid "UIExporterSVGPanel.labelStrokeScale.text" -msgstr "Adobe Illustratorを対豑" - -msgid "UIExporterPNGPanel.widthLabel.text" -msgstr "εΉ…:" - -msgid "UIExporterPNGPanel.heightLabel.text" -msgstr "ι«˜γ•:" diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/org-gephi-ui-exporter-preview.pot b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/org-gephi-ui-exporter-preview.pot deleted file mode 100644 index 8890d92540..0000000000 --- a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/org-gephi-ui-exporter-preview.pot +++ /dev/null @@ -1,97 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Vectorial exporters user interfaces" - -msgid "UIExporterPDF.name" -msgstr "PDF" - -msgid "UIExporterSVG.name" -msgstr "SVG" - -msgid "UIExporterPNG.name" -msgstr "PNG" - -msgid "UIExporterPDFPanel.labelPageSize.text" -msgstr "Page size:" - -msgid "UIExporterPDFPanel.labelWidth.text" -msgstr "Width:" - -msgid "UIExporterPDFPanel.labelHeight.text" -msgstr "Height:" - -msgid "UIExporterPDFPanel.portraitRadio.text" -msgstr "Portrait" - -msgid "UIExporterPDFPanel.landscapeRadio.text" -msgstr "Landscape" - -msgid "UIExporterPDFPanel.labelOrientation.text" -msgstr "Orientation:" - -msgid "UIExporterPDFPanel.labelTop.text" -msgstr "Top:" - -msgid "UIExporterPDFPanel.labelBottom.text" -msgstr "Bottom:" - -msgid "UIExporterPDFPanel.labelMargins.text" -msgstr "Margins:" - -msgid "UIExporterPDFPanel.labelLeft.text" -msgstr "Left:" - -msgid "UIExporterPDFPanel.labelRight.text" -msgstr "Right:" - -msgid "UIExporterPDFPanel.pageSize.custom" -msgstr "Custom..." - -msgid "UIExporterPDFPanel.labelUnit.text" -msgstr "Unit:" - -msgid "UIExporterPDFPanel.unitLink.millimeter" -msgstr "Millimeter" - -msgid "UIExporterPDFPanel.unitLink.inch" -msgstr "Inch" - -msgid "UIExporterPDFPanel.labelUnit.millimeter" -msgstr "mm" - -msgid "UIExporterPDFPanel.labelUnit.inch" -msgstr "in" - -msgid "PositiveSizeValidator.NEGATIVE" -msgstr "{0} must be positive" - -msgid "UIExporterPDFPanel.unitLink.toolTipText" -msgstr "Change Unit Millimeter/Inches" - -msgid "UIExporterSVGPanel.strokeScaleCheckbox.text" -msgstr "Scale stroke-width" - -msgid "UIExporterSVGPanel.labelStrokeScale.text" -msgstr "Recommended for Adobe Illustrator" - -msgid "UIExporterPNGPanel.widthLabel.text" -msgstr "Width:" - -msgid "UIExporterPNGPanel.heightLabel.text" -msgstr "Height:" diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/pt_BR.po b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/pt_BR.po deleted file mode 100644 index 35ce0623ec..0000000000 --- a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/pt_BR.po +++ /dev/null @@ -1,100 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-21 21:21+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interface de usuΓ‘rio dos exportadores vetoriais " - -msgid "UIExporterPDF.name" -msgstr "PDF" - -msgid "UIExporterSVG.name" -msgstr "SVG" - -msgid "UIExporterPNG.name" -msgstr "PNG" - -msgid "UIExporterPDFPanel.labelPageSize.text" -msgstr "Tamanho da pΓ‘gina:" - -msgid "UIExporterPDFPanel.labelWidth.text" -msgstr "Largura:" - -msgid "UIExporterPDFPanel.labelHeight.text" -msgstr "Altura:" - -msgid "UIExporterPDFPanel.portraitRadio.text" -msgstr "Retrato" - -msgid "UIExporterPDFPanel.landscapeRadio.text" -msgstr "Paisagem" - -msgid "UIExporterPDFPanel.labelOrientation.text" -msgstr "OrientaΓ§Γ£o:" - -msgid "UIExporterPDFPanel.labelTop.text" -msgstr "Superior:" - -msgid "UIExporterPDFPanel.labelBottom.text" -msgstr "Inferior:" - -msgid "UIExporterPDFPanel.labelMargins.text" -msgstr "Margens:" - -msgid "UIExporterPDFPanel.labelLeft.text" -msgstr "Esquerda:" - -msgid "UIExporterPDFPanel.labelRight.text" -msgstr "Direita:" - -msgid "UIExporterPDFPanel.pageSize.custom" -msgstr "Personalizado..." - -msgid "UIExporterPDFPanel.labelUnit.text" -msgstr "Unidade:" - -msgid "UIExporterPDFPanel.unitLink.millimeter" -msgstr "MilΓ­metro" - -msgid "UIExporterPDFPanel.unitLink.inch" -msgstr "Polegada" - -msgid "UIExporterPDFPanel.labelUnit.millimeter" -msgstr "mm" - -msgid "UIExporterPDFPanel.labelUnit.inch" -msgstr "in" - -msgid "PositiveSizeValidator.NEGATIVE" -msgstr "{0} deve ser positivo" - -msgid "UIExporterPDFPanel.unitLink.toolTipText" -msgstr "Alterar unidade entre milΓ­metros/polegadas" - -msgid "UIExporterSVGPanel.strokeScaleCheckbox.text" -msgstr "Definir largura do traΓ§o" - -msgid "UIExporterSVGPanel.labelStrokeScale.text" -msgstr "Recomendado para Adobe Illustrator" - -msgid "UIExporterPNGPanel.widthLabel.text" -msgstr "Largura:" - -msgid "UIExporterPNGPanel.heightLabel.text" -msgstr "Altura:" diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/ru.po b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/ru.po deleted file mode 100644 index 80d786cb10..0000000000 --- a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/ru.po +++ /dev/null @@ -1,100 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-06 06:47+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "UI для экспорта Π² Π²Π΅ΠΊΡ‚ΠΎΡ€Π½Ρ‹Ρ… Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π°Ρ…" - -msgid "UIExporterPDF.name" -msgstr "PDF" - -msgid "UIExporterSVG.name" -msgstr "SVG" - -msgid "UIExporterPNG.name" -msgstr "PNG" - -msgid "UIExporterPDFPanel.labelPageSize.text" -msgstr "Π Π°Π·ΠΌΠ΅Ρ€ страницы:" - -msgid "UIExporterPDFPanel.labelWidth.text" -msgstr "Π¨ΠΈΡ€ΠΈΠ½Π°:" - -msgid "UIExporterPDFPanel.labelHeight.text" -msgstr "Высота:" - -msgid "UIExporterPDFPanel.portraitRadio.text" -msgstr "ΠŸΠΎΡ€Ρ‚Ρ€Π΅Ρ‚Π½Π°Ρ" - -msgid "UIExporterPDFPanel.landscapeRadio.text" -msgstr "Π›Π°Π½Π΄ΡˆΠ°Ρ„Ρ‚Π½Π°Ρ" - -msgid "UIExporterPDFPanel.labelOrientation.text" -msgstr "ΠžΡ€ΠΈΠ΅Π½Ρ‚Π°Ρ†ΠΈΡ:" - -msgid "UIExporterPDFPanel.labelTop.text" -msgstr "Π‘Π²Π΅Ρ€Ρ…Ρƒ:" - -msgid "UIExporterPDFPanel.labelBottom.text" -msgstr "Π‘Π½ΠΈΠ·Ρƒ:" - -msgid "UIExporterPDFPanel.labelMargins.text" -msgstr "ΠžΡ‚ΡΡ‚ΡƒΠΏΡ‹:" - -msgid "UIExporterPDFPanel.labelLeft.text" -msgstr "Π‘Π»Π΅Π²Π°:" - -msgid "UIExporterPDFPanel.labelRight.text" -msgstr "Π‘ΠΏΡ€Π°Π²Π°:" - -msgid "UIExporterPDFPanel.pageSize.custom" -msgstr "ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ..." - -msgid "UIExporterPDFPanel.labelUnit.text" -msgstr "Π•Π΄ΠΈΠ½ΠΈΡ†Ρ‹: " - -msgid "UIExporterPDFPanel.unitLink.millimeter" -msgstr "ΠœΠΈΠ»Π»ΠΈΠΌΠ΅Ρ‚Ρ€Ρ‹" - -msgid "UIExporterPDFPanel.unitLink.inch" -msgstr "Π”ΡŽΠΉΠΌΡ‹" - -msgid "UIExporterPDFPanel.labelUnit.millimeter" -msgstr "mm" - -msgid "UIExporterPDFPanel.labelUnit.inch" -msgstr "in" - -msgid "PositiveSizeValidator.NEGATIVE" -msgstr "Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ {0} Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ" - -msgid "UIExporterPDFPanel.unitLink.toolTipText" -msgstr "Π‘ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π΄ΠΈΠ½ΠΈΡ†Ρ‹ Π½Π° ΠΌΠΈΠ»Π»ΠΈΠΌΠ΅Ρ‚Ρ€Ρ‹/Π΄ΡŽΠΉΠΌΡ‹" - -msgid "UIExporterSVGPanel.strokeScaleCheckbox.text" -msgstr "Π’ΠΎΠ»Ρ‰ΠΈΠ½Π° ΡˆΡ‚Ρ€ΠΈΡ…Π°" - -msgid "UIExporterSVGPanel.labelStrokeScale.text" -msgstr "РСкомСндуСтся для Adobe Illustrator" - -msgid "UIExporterPNGPanel.widthLabel.text" -msgstr "Π¨ΠΈΡ€ΠΈΠ½Π°:" - -msgid "UIExporterPNGPanel.heightLabel.text" -msgstr "Высота:" diff --git a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/zh_CN.po b/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/zh_CN.po deleted file mode 100644 index 077a5a6eb7..0000000000 --- a/modules/PreviewExportUI/src/main/resources/org/gephi/ui/exporter/preview/zh_CN.po +++ /dev/null @@ -1,99 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:09+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ηŸ’ι‡θΎ“ε‡Ίηš„η”¨ζˆ·η•Œι’" - -msgid "UIExporterPDF.name" -msgstr "PDF格式" - -msgid "UIExporterSVG.name" -msgstr "SVG" - -msgid "UIExporterPNG.name" -msgstr "PNG" - -msgid "UIExporterPDFPanel.labelPageSize.text" -msgstr "鑡青尺寸:" - -msgid "UIExporterPDFPanel.labelWidth.text" -msgstr "ε½εΊ¦οΌš" - -msgid "UIExporterPDFPanel.labelHeight.text" -msgstr "高:" - -msgid "UIExporterPDFPanel.portraitRadio.text" -msgstr "描写" - -msgid "UIExporterPDFPanel.landscapeRadio.text" -msgstr "ηΎŽεŒ–" - -msgid "UIExporterPDFPanel.labelOrientation.text" -msgstr "ζ–Ήε‘οΌš" - -msgid "UIExporterPDFPanel.labelTop.text" -msgstr "鑢:" - -msgid "UIExporterPDFPanel.labelBottom.text" -msgstr "εΊ•ιƒ¨οΌš" - -msgid "UIExporterPDFPanel.labelMargins.text" -msgstr "鑡边距:" - -msgid "UIExporterPDFPanel.labelLeft.text" -msgstr "左:" - -msgid "UIExporterPDFPanel.labelRight.text" -msgstr "右:" - -msgid "UIExporterPDFPanel.pageSize.custom" -msgstr "θ‡ͺεšδΉ‰..." - -msgid "UIExporterPDFPanel.labelUnit.text" -msgstr "ε•δ½οΌš" - -msgid "UIExporterPDFPanel.unitLink.millimeter" -msgstr "ζ―«η±³" - -msgid "UIExporterPDFPanel.unitLink.inch" -msgstr "θ‹±ε―Έ" - -msgid "UIExporterPDFPanel.labelUnit.millimeter" -msgstr "ζ―«η±³" - -msgid "UIExporterPDFPanel.labelUnit.inch" -msgstr "在" - -msgid "PositiveSizeValidator.NEGATIVE" -msgstr "{0}εΏ…ι‘»ζ˜―ζ­£ζ•°" - -msgid "UIExporterPDFPanel.unitLink.toolTipText" -msgstr "ζ”Ήε˜ε•δ½ζ―«η±³/θ‹±ε―Έ" - -msgid "UIExporterSVGPanel.strokeScaleCheckbox.text" -msgstr "依比例决εšε½’成ε½εΊ¦" - -msgid "UIExporterSVGPanel.labelStrokeScale.text" -msgstr "推荐AdobeθΎθ‘η»˜ε›Ύ" - -msgid "UIExporterPNGPanel.widthLabel.text" -msgstr "ε½εΊ¦οΌš" - -msgid "UIExporterPNGPanel.heightLabel.text" -msgstr "高:" diff --git a/modules/PreviewPlugin/pom.xml b/modules/PreviewPlugin/pom.xml index 045d8f197d..de697a7a31 100644 --- a/modules/PreviewPlugin/pom.xml +++ b/modules/PreviewPlugin/pom.xml @@ -4,13 +4,13 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi preview-plugin - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm PreviewPlugin @@ -32,6 +32,10 @@ ${project.groupId} core-library-wrapper + + ${project.groupId} + batik-wrapper + ${project.groupId} visualization-api @@ -44,12 +48,29 @@ org.netbeans.api org-openide-util-lookup + + ${project.groupId} + utils + + + + + ${project.groupId} + graph-api + test + test-jar + + + ${project.groupId} + visualization + test + - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/builders/AbstractLabelBuilder.java b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/builders/AbstractLabelBuilder.java new file mode 100644 index 0000000000..be232a52f6 --- /dev/null +++ b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/builders/AbstractLabelBuilder.java @@ -0,0 +1,47 @@ +/* + Copyright 2008-2011 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.preview.plugin.builders; + +public abstract class AbstractLabelBuilder { + +} diff --git a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/builders/EdgeBuilder.java b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/builders/EdgeBuilder.java index 66dfc302ef..2a6d829224 100644 --- a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/builders/EdgeBuilder.java +++ b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/builders/EdgeBuilder.java @@ -39,39 +39,37 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.plugin.builders; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.graph.api.*; +import org.gephi.graph.api.DirectedGraph; +import org.gephi.graph.api.Graph; import org.gephi.preview.api.Item; import org.gephi.preview.plugin.items.EdgeItem; import org.gephi.preview.spi.ItemBuilder; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = ItemBuilder.class, position = 300) public class EdgeBuilder implements ItemBuilder { @Override - public Item[] getItems(Graph graph, AttributeModel attributeModel) { - - EdgeItem[] items = new EdgeItem[graph.getEdgeCount()]; - int i = 0; - for (Edge e : graph.getEdges()) { - EdgeItem item = new EdgeItem(e); - item.setData(EdgeItem.WEIGHT, e.getWeight(graph.getView())); - item.setData(EdgeItem.DIRECTED, e.isDirected()); - if (graph.isDirected(e)) { - item.setData(EdgeItem.MUTUAL, ((DirectedGraph) graph).getMutualEdge(e) != null); + public Item[] getItems(Graph graph) { + return graph.getEdges().stream().map( + e -> { + EdgeItem item = new EdgeItem(e); + item.setData(EdgeItem.WEIGHT, e.getWeight(graph.getView())); + item.setData(EdgeItem.DIRECTED, e.isDirected()); + if (graph.isDirected(e)) { + item.setData(EdgeItem.MUTUAL, ((DirectedGraph) graph).getMutualEdge(e) != null); + } + item.setData(EdgeItem.SELF_LOOP, e.isSelfLoop()); + item.setData(EdgeItem.COLOR, e.getColor()); + return item; } - item.setData(EdgeItem.SELF_LOOP, e.isSelfLoop()); - item.setData(EdgeItem.COLOR, e.alpha() == 0 ? null : e.getColor()); - items[i++] = item; - } - return items; + ).toArray(EdgeItem[]::new); } @Override diff --git a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/builders/EdgeLabelBuilder.java b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/builders/EdgeLabelBuilder.java index b09f1bab1b..156b90ab1a 100644 --- a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/builders/EdgeLabelBuilder.java +++ b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/builders/EdgeLabelBuilder.java @@ -39,85 +39,55 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.plugin.builders; -import java.util.ArrayList; -import java.util.List; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.attribute.api.Column; -import org.gephi.graph.api.*; +import java.util.Objects; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphView; +import org.gephi.graph.api.TextProperties; import org.gephi.preview.api.Item; import org.gephi.preview.plugin.items.EdgeLabelItem; import org.gephi.preview.spi.ItemBuilder; +import org.gephi.project.api.Workspace; import org.gephi.visualization.api.VisualizationController; +import org.gephi.visualization.api.VisualizationModel; import org.openide.util.Lookup; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = ItemBuilder.class) -public class EdgeLabelBuilder implements ItemBuilder { +public class EdgeLabelBuilder extends AbstractLabelBuilder implements ItemBuilder { @Override - public Item[] getItems(Graph graph, AttributeModel attributeModel) { - - boolean useTextData = false; - for (Edge e : graph.getEdges()) { - TextProperties textData = e.getTextProperties(); - if (textData != null && textData.getText() != null && !textData.getText().isEmpty()) { - useTextData = true; - } - } + public Item[] getItems(Graph graph) { + Workspace workspace = WorkspaceHelper.getWorkspace(graph); //Build text VisualizationController vizController = Lookup.getDefault().lookup(VisualizationController.class); - Column[] edgeColumns = vizController != null ? vizController.getEdgeTextColumns() : null; + VisualizationModel vizModel = vizController != null ? vizController.getModel(workspace) : null; + GraphView graphView = graph.getView(); - List items = new ArrayList(); - for (Edge e : graph.getEdges()) { - EdgeLabelItem labelItem = new EdgeLabelItem(e); - String label = getLabel(e, edgeColumns, graph.getView()); - labelItem.setData(EdgeLabelItem.LABEL, label); - TextProperties textData = e.getTextProperties(); - if (textData != null && useTextData) { - if (textData.getAlpha() != 0) { - labelItem.setData(EdgeLabelItem.COLOR, textData.getColor()); - } -// labelItem.setData(EdgeLabelItem.WIDTH, textData.getWidth()); -// labelItem.setData(EdgeLabelItem.HEIGHT, textData.getHeight()); - labelItem.setData(EdgeLabelItem.SIZE, textData.getSize()); - labelItem.setData(EdgeLabelItem.VISIBLE, textData.isVisible()); - if (textData.isVisible() && textData.getText() != null && !textData.getText().isEmpty()) { - items.add(labelItem); - } - } else if (label != null && !label.isEmpty()) { - items.add(labelItem); - } - } - return items.toArray(new Item[0]); - } + return graph.getEdges().stream().map( + e -> { + TextProperties textData = e.getTextProperties(); + if (textData != null && textData.isVisible()) { + EdgeLabelItem labelItem = new EdgeLabelItem(e); + String label = vizModel != null ? vizModel.getEdgeLabel(e, graphView) : e.getLabel(); + labelItem.setData(EdgeLabelItem.LABEL, label); - private String getLabel(Edge e, Column[] cols, GraphView view) { - String str = ""; - if (cols != null) { - int i = 0; - for (Column c : cols) { - if (i++ > 0) { - str += " - "; + if (label != null && !label.isEmpty()) { + labelItem.setData(EdgeLabelItem.COLOR, textData.getColor()); + labelItem.setData(EdgeLabelItem.SIZE, textData.getSize()); + labelItem.setData(EdgeLabelItem.VISIBLE, textData.isVisible()); + return labelItem; + } } - Object val = e.getAttribute(c, view); - str += val != null ? val : ""; + return null; } - } - if (str.isEmpty()) { - str = e.getLabel(); - } - if (str == null) { - str = ""; - } - return str; + ).filter(Objects::nonNull).toArray(EdgeLabelItem[]::new); } @Override diff --git a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/builders/NodeBuilder.java b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/builders/NodeBuilder.java index 6ef8cc6133..2ed8599d6f 100644 --- a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/builders/NodeBuilder.java +++ b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/builders/NodeBuilder.java @@ -39,38 +39,34 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.plugin.builders; -import org.gephi.attribute.api.AttributeModel; import org.gephi.graph.api.Graph; -import org.gephi.graph.api.Node; import org.gephi.preview.api.Item; import org.gephi.preview.plugin.items.NodeItem; import org.gephi.preview.spi.ItemBuilder; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = ItemBuilder.class, position = 100) public class NodeBuilder implements ItemBuilder { @Override - public Item[] getItems(Graph graph, AttributeModel attributeModel) { - - Item[] items = new NodeItem[graph.getNodeCount()]; - int i = 0; - for (Node n : graph.getNodes()) { - NodeItem nodeItem = new NodeItem(n); - nodeItem.setData(NodeItem.X, n.x()); - nodeItem.setData(NodeItem.Y, -n.y()); - nodeItem.setData(NodeItem.Z, n.z()); - nodeItem.setData(NodeItem.SIZE, n.size() * 2f); - nodeItem.setData(NodeItem.COLOR, n.getColor()); - items[i++] = nodeItem; - } - return items; + public Item[] getItems(Graph graph) { + return graph.getNodes().stream().map( + n -> { + NodeItem nodeItem = new NodeItem(n); + nodeItem.setData(NodeItem.X, n.x()); + nodeItem.setData(NodeItem.Y, -n.y()); + nodeItem.setData(NodeItem.Z, n.z()); + nodeItem.setData(NodeItem.SIZE, n.size() * 2f); + nodeItem.setData(NodeItem.COLOR, n.getColor()); + return nodeItem; + } + ).toArray(NodeItem[]::new); } @Override diff --git a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/builders/NodeLabelBuilder.java b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/builders/NodeLabelBuilder.java index c05a9fb25f..910ee4a187 100644 --- a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/builders/NodeLabelBuilder.java +++ b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/builders/NodeLabelBuilder.java @@ -39,93 +39,55 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.plugin.builders; -import java.awt.Color; -import java.util.ArrayList; -import java.util.List; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.attribute.api.Column; +import java.util.Objects; import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphView; -import org.gephi.graph.api.Node; import org.gephi.graph.api.TextProperties; import org.gephi.preview.api.Item; import org.gephi.preview.plugin.items.NodeLabelItem; import org.gephi.preview.spi.ItemBuilder; +import org.gephi.project.api.Workspace; import org.gephi.visualization.api.VisualizationController; +import org.gephi.visualization.api.VisualizationModel; import org.openide.util.Lookup; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = ItemBuilder.class, position = 200) -public class NodeLabelBuilder implements ItemBuilder { +public class NodeLabelBuilder extends AbstractLabelBuilder implements ItemBuilder { @Override - public Item[] getItems(Graph graph, AttributeModel attributeModel) { - - boolean useTextData = false; - for (Node n : graph.getNodes()) { - TextProperties textData = n.getTextProperties(); - if (textData != null && textData.getText() != null && !textData.getText().isEmpty()) { - useTextData = true; - } - } + public Item[] getItems(Graph graph) { + Workspace workspace = WorkspaceHelper.getWorkspace(graph); //Build text VisualizationController vizController = Lookup.getDefault().lookup(VisualizationController.class); - Column[] nodeColumns = vizController != null ? vizController.getNodeTextColumns() : null; + VisualizationModel vizModel = vizController != null ? vizController.getModel(workspace) : null; + GraphView graphView = graph.getView(); - List items = new ArrayList(); - for (Node n : graph.getNodes()) { - NodeLabelItem labelItem = new NodeLabelItem(n); - String label = getLabel(n, nodeColumns, graph.getView()); - labelItem.setData(NodeLabelItem.LABEL, label); - TextProperties textData = n.getTextProperties(); - if (textData != null && useTextData) { - if (textData.getR() != -1) { - labelItem.setData(NodeLabelItem.COLOR, new Color((int) (textData.getR() * 255), - (int) (textData.getG() * 255), - (int) (textData.getB() * 255), - (int) (textData.getAlpha() * 255))); - } -// labelItem.setData(NodeLabelItem.WIDTH, textData.getWidth()); -// labelItem.setData(NodeLabelItem.HEIGHT, textData.getHeight()); - labelItem.setData(NodeLabelItem.SIZE, textData.getSize()); - labelItem.setData(NodeLabelItem.VISIBLE, textData.isVisible()); - labelItem.setData(NodeLabelItem.LABEL, textData.getText()); - if (textData.isVisible() && label != null && !label.isEmpty()) { - items.add(labelItem); - } - } else if (label != null && !label.isEmpty()) { - items.add(labelItem); - } - } - return items.toArray(new Item[0]); - } + return graph.getNodes().stream().map( + n -> { + TextProperties textData = n.getTextProperties(); + if (textData != null && textData.isVisible()) { + NodeLabelItem labelItem = new NodeLabelItem(n); + String label = vizModel != null ? vizModel.getNodeLabel(n, graphView) : n.getLabel(); + labelItem.setData(NodeLabelItem.LABEL, label); - private String getLabel(Node n, Column[] cols, GraphView view) { - String str = ""; - if (cols != null) { - int i = 0; - for (Column c : cols) { - if (i++ > 0) { - str += " - "; + if (label != null && !label.isEmpty()) { + labelItem.setData(NodeLabelItem.COLOR, textData.getColor()); + labelItem.setData(NodeLabelItem.SIZE, textData.getSize()); + labelItem.setData(NodeLabelItem.VISIBLE, textData.isVisible()); + return labelItem; + } } - Object val = n.getAttribute(c, view); - str += val != null ? val : ""; + return null; } - } - if (str.isEmpty()) { - str = n.getLabel(); - } - if (str == null) { - str = ""; - } - return str; + ).filter(Objects::nonNull).toArray(NodeLabelItem[]::new); } @Override diff --git a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/builders/WorkspaceHelper.java b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/builders/WorkspaceHelper.java new file mode 100644 index 0000000000..7f70db6056 --- /dev/null +++ b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/builders/WorkspaceHelper.java @@ -0,0 +1,32 @@ +package org.gephi.preview.plugin.builders; + +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphModel; +import org.gephi.project.api.Project; +import org.gephi.project.api.ProjectController; +import org.gephi.project.api.Workspace; +import org.openide.util.Lookup; + +public class WorkspaceHelper { + + /** + * Hack functions that allows to get the Workspace from a given graph. + * + * @param graph graph + * @return workspace this graph belongs to + */ + public static Workspace getWorkspace(Graph graph) { + ProjectController projectController = Lookup.getDefault().lookup(ProjectController.class); + if (projectController.getCurrentProject() == null) { + return null; + } + Project project = projectController.getCurrentProject(); + for (Workspace workspace : project.getWorkspaces()) { + GraphModel graphModel = workspace.getLookup().lookup(GraphModel.class); + if (graphModel == graph.getModel()) { + return workspace; + } + } + throw new RuntimeException("The workspace can't be found"); + } +} diff --git a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/items/AbstractItem.java b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/items/AbstractItem.java index 046515fb37..8e4d54da03 100644 --- a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/items/AbstractItem.java +++ b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/items/AbstractItem.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.plugin.items; import java.util.HashMap; @@ -46,7 +47,6 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.preview.api.Item; /** - * * @author Mathieu Bastian */ public abstract class AbstractItem implements Item { @@ -58,7 +58,7 @@ public abstract class AbstractItem implements Item { public AbstractItem(Object source, String type) { this.type = type; this.source = source; - this.data = new HashMap(); + this.data = new HashMap<>(); } @Override @@ -76,6 +76,11 @@ public D getData(String key) { return (D) data.get(key); } + @Override + public boolean hasData(String key) { + return data.containsKey(key); + } + @Override public void setData(String key, Object value) { data.put(key, value); diff --git a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/items/EdgeItem.java b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/items/EdgeItem.java index b8b4411f5c..d6e2c48eb7 100644 --- a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/items/EdgeItem.java +++ b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/items/EdgeItem.java @@ -39,13 +39,13 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.plugin.items; import org.gephi.graph.api.Edge; import org.gephi.preview.api.Item; /** - * * @author Mathieu Bastian */ public class EdgeItem extends AbstractItem { diff --git a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/items/EdgeLabelItem.java b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/items/EdgeLabelItem.java index 5f3d23467d..06b4d07ec4 100644 --- a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/items/EdgeLabelItem.java +++ b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/items/EdgeLabelItem.java @@ -39,13 +39,13 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.plugin.items; import org.gephi.graph.api.Edge; import org.gephi.preview.api.Item; /** - * * @author Mathieu Bastian */ public class EdgeLabelItem extends AbstractItem { diff --git a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/items/NodeItem.java b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/items/NodeItem.java index a828fb0a78..4cde4d3d70 100644 --- a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/items/NodeItem.java +++ b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/items/NodeItem.java @@ -39,13 +39,13 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.plugin.items; import org.gephi.graph.api.Node; import org.gephi.preview.api.Item; /** - * * @author Mathieu Bastian */ public class NodeItem extends AbstractItem { @@ -53,9 +53,9 @@ public class NodeItem extends AbstractItem { public static final String X = "x"; public static final String Y = "y"; public static final String Z = "z"; - public static final String SIZE ="size"; + public static final String SIZE = "size"; public static final String COLOR = "color"; - + public NodeItem(Node source) { super(source, Item.NODE); } diff --git a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/items/NodeLabelItem.java b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/items/NodeLabelItem.java index 6f4f2cd065..605cdd5433 100644 --- a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/items/NodeLabelItem.java +++ b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/items/NodeLabelItem.java @@ -39,13 +39,13 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.plugin.items; import org.gephi.graph.api.Node; import org.gephi.preview.api.Item; /** - * * @author Mathieu Bastian */ public class NodeLabelItem extends AbstractItem { diff --git a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/ArrowRenderer.java b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/ArrowRenderer.java index 1203434566..982ba5c653 100644 --- a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/ArrowRenderer.java +++ b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/ArrowRenderer.java @@ -39,172 +39,248 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.plugin.renderers; -import com.itextpdf.text.pdf.PdfContentByte; -import com.itextpdf.text.pdf.PdfGState; import java.awt.Color; import java.awt.Graphics2D; import java.awt.geom.GeneralPath; +import java.io.IOException; import java.util.Locale; -import org.gephi.graph.api.Edge; -import org.gephi.preview.api.*; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState; +import org.gephi.graph.api.Node; +import org.gephi.preview.api.CanvasSize; +import org.gephi.preview.api.G2DTarget; +import org.gephi.preview.api.Item; +import org.gephi.preview.api.PDFTarget; +import org.gephi.preview.api.PreviewModel; +import org.gephi.preview.api.PreviewProperties; +import org.gephi.preview.api.PreviewProperty; +import org.gephi.preview.api.RenderTarget; +import org.gephi.preview.api.SVGTarget; +import org.gephi.preview.api.Vector; import org.gephi.preview.plugin.builders.EdgeBuilder; import org.gephi.preview.plugin.builders.NodeBuilder; import org.gephi.preview.plugin.items.EdgeItem; import org.gephi.preview.plugin.items.NodeItem; import org.gephi.preview.spi.ItemBuilder; import org.gephi.preview.spi.Renderer; -import org.gephi.preview.types.EdgeColor; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; import org.w3c.dom.Element; /** - * - * @author Yudi Xue, Mathieu Bastian + * @author Yudi Xue, Mathieu Bastian, Mathieu Jacomy */ @ServiceProvider(service = Renderer.class, position = 200) public class ArrowRenderer implements Renderer { //Const protected final float BASE_RATIO = 0.5f; + public static final String ARC_CURVENESS = "edge.arc-curveness"; + public static final String TARGET_RADIUS = "edge.target.radius"; //Default values protected float defaultArrowSize = 3f; @Override public void preProcess(PreviewModel previewModel) { + final PreviewProperties properties = previewModel.getProperties(); + //Put arc curveness in properties + if (!properties.hasProperty(ARC_CURVENESS)) { + properties.putValue(ARC_CURVENESS, EdgeRenderer.defaultArcCurviness); + } } @Override - public void render(Item item, RenderTarget target, PreviewProperties properties) { - float size = properties.getFloatValue(PreviewProperty.ARROW_SIZE); - if (size > 0) { - //Get nodes - Item sourceItem = item.getData(EdgeRenderer.SOURCE); - Item targetItem = item.getData(EdgeRenderer.TARGET); - - //Weight and color - Double weight = item.getData(EdgeItem.WEIGHT); - EdgeColor edgeColor = (EdgeColor) properties.getValue(PreviewProperty.EDGE_COLOR); - Color color = edgeColor.getColor((Color) item.getData(EdgeItem.COLOR), - (Color) sourceItem.getData(NodeItem.COLOR), - (Color) targetItem.getData(NodeItem.COLOR)); - int alpha = (int) ((properties.getFloatValue(PreviewProperty.EDGE_OPACITY) / 100f) * 255f); - color = new Color(color.getRed(), color.getGreen(), color.getBlue(), alpha); - - //Size and radius - float radius = properties.getFloatValue(PreviewProperty.EDGE_RADIUS); - - size *= weight; - radius = -(radius + (Float) targetItem.getData(NodeItem.SIZE) / 2f + Math.max(0, properties.getFloatValue(PreviewProperty.NODE_BORDER_WIDTH))); - - //Avoid arrow from passing the node's center: - if (radius > 0) { - radius = 0; - } - - //3 points - Float x1 = sourceItem.getData(NodeItem.X); - Float x2 = targetItem.getData(NodeItem.X); - Float y1 = sourceItem.getData(NodeItem.Y); - Float y2 = targetItem.getData(NodeItem.Y); - - if (properties.getBooleanValue(PreviewProperty.EDGE_CURVED)) { - } else { - renderStraight(target, item, x1, y1, x2, y2, radius, size, color); - } + public void render( + final Item item, + final RenderTarget target, + final PreviewProperties properties) { + final Helper h = new Helper(item, properties); + // Do not draw an arrow when nodes are at the same position (zero-length edge) + if (h.length == 0f) { + return; } - } - - public void renderStraight(RenderTarget target, Item item, float x1, float y1, float x2, float y2, float radius, float size, Color color) { - Edge edge = (Edge) item.getSource(); - Vector direction = new Vector(x2, y2); - direction.sub(new Vector(x1, y1)); - direction.normalize(); - - Vector p1 = new Vector(direction.x, direction.y); - p1.mult(radius); - p1.add(new Vector(x2, y2)); - - Vector p1r = new Vector(direction.x, direction.y); - p1r.mult(radius - size); - p1r.add(new Vector(x2, y2)); - - Vector p2 = new Vector(-direction.y, direction.x); - p2.mult(size * BASE_RATIO); - p2.add(p1r); - - Vector p3 = new Vector(direction.y, -direction.x); - p3.mult(size * BASE_RATIO); - p3.add(p1r); + final Color color = EdgeRenderer.getColor(item, properties); if (target instanceof G2DTarget) { Graphics2D graphics = ((G2DTarget) target).getGraphics(); graphics.setColor(color); - GeneralPath gpath = new GeneralPath(); - gpath.moveTo(p1.x, p1.y); - gpath.lineTo(p2.x, p2.y); - gpath.lineTo(p3.x, p3.y); + final GeneralPath gpath = new GeneralPath(); + gpath.moveTo(h.p1.x, h.p1.y); + gpath.lineTo(h.p2.x, h.p2.y); + gpath.lineTo(h.p3.x, h.p3.y); gpath.closePath(); graphics.fill(gpath); } else if (target instanceof SVGTarget) { - SVGTarget svgTarget = (SVGTarget) target; - Element arrowElem = svgTarget.createElement("polyline"); - arrowElem.setAttribute("points", String.format(Locale.ENGLISH, "%f,%f %f,%f %f,%f", - p1.x, p1.y, p2.x, p2.y, p3.x, p3.y)); - arrowElem.setAttribute("class", edge.getSource().getId() + " " + edge.getTarget().getId()); + final SVGTarget svgTarget = (SVGTarget) target; + final Element arrowElem = svgTarget.createElement("polyline"); + arrowElem.setAttribute("points", String.format( + Locale.ENGLISH, + "%f,%f %f,%f %f,%f", + h.p1.x, h.p1.y, h.p2.x, h.p2.y, h.p3.x, h.p3.y)); + arrowElem.setAttribute("class", String.format( + "%s %s", + SVGUtils.idAsClassAttribute(((Node) h.sourceItem.getSource()).getId()), + SVGUtils.idAsClassAttribute(((Node) h.targetItem.getSource()).getId()) + )); arrowElem.setAttribute("fill", svgTarget.toHexString(color)); arrowElem.setAttribute("fill-opacity", (color.getAlpha() / 255f) + ""); arrowElem.setAttribute("stroke", "none"); svgTarget.getTopElement(SVGTarget.TOP_ARROWS).appendChild(arrowElem); } else if (target instanceof PDFTarget) { - PDFTarget pdfTarget = (PDFTarget) target; - PdfContentByte cb = pdfTarget.getContentByte(); - cb.moveTo(p1.x, -p1.y); - cb.lineTo(p2.x, -p2.y); - cb.lineTo(p3.x, -p3.y); - cb.closePath(); - cb.setRGBColorFill(color.getRed(), color.getGreen(), color.getBlue()); - if (color.getAlpha() < 255) { - cb.saveState(); - float alpha = color.getAlpha() / 255f; - PdfGState gState = new PdfGState(); - gState.setFillOpacity(alpha); - cb.setGState(gState); - } - cb.fill(); - if (color.getAlpha() < 255) { - cb.restoreState(); + final PDFTarget pdfTarget = (PDFTarget) target; + final PDPageContentStream cb = pdfTarget.getContentStream(); + + try { + cb.moveTo(h.p1.x, -h.p1.y); + cb.lineTo(h.p2.x, -h.p2.y); + cb.lineTo(h.p3.x, -h.p3.y); + cb.closePath(); + cb.setNonStrokingColor(color); + if (color.getAlpha() < 255) { + float alpha = color.getAlpha() / 255f; + PDExtendedGraphicsState graphicsState = new PDExtendedGraphicsState(); + graphicsState.setNonStrokingAlphaConstant(alpha); + cb.saveGraphicsState(); + cb.setGraphicsStateParameters(graphicsState); + } + cb.fill(); + if (color.getAlpha() < 255) { + cb.restoreGraphicsState(); + } + } catch (IOException e) { + throw new RuntimeException(e); } } } + @Override + public void postProcess(PreviewModel previewModel, RenderTarget renderTarget, PreviewProperties properties) { + } + + @Override + public CanvasSize getCanvasSize( + final Item item, + final PreviewProperties properties) { + final Helper h = new Helper(item, properties); + final float minX = Math.min(Math.min(h.p1.x, h.p2.x), h.p3.x); + final float minY = Math.min(Math.min(h.p1.y, h.p2.y), h.p3.y); + final float maxX = Math.max(Math.max(h.p1.x, h.p2.x), h.p3.x); + final float maxY = Math.max(Math.max(h.p1.y, h.p2.y), h.p3.y); + return new CanvasSize(minX, minY, maxX - minX, maxY - minY); + } + @Override public PreviewProperty[] getProperties() { - return new PreviewProperty[]{ + return new PreviewProperty[] { PreviewProperty.createProperty(this, PreviewProperty.ARROW_SIZE, Float.class, - NbBundle.getMessage(EdgeRenderer.class, "ArrowRenderer.property.size.displayName"), - NbBundle.getMessage(EdgeRenderer.class, "ArrowRenderer.property.size.description"), - PreviewProperty.CATEGORY_EDGE_ARROWS, PreviewProperty.SHOW_EDGES).setValue(defaultArrowSize)}; + NbBundle.getMessage(EdgeRenderer.class, "ArrowRenderer.property.size.displayName"), + NbBundle.getMessage(EdgeRenderer.class, "ArrowRenderer.property.size.description"), + PreviewProperty.CATEGORY_EDGE_ARROWS, PreviewProperty.SHOW_EDGES).setMinMax(0f, null).setValue( + defaultArrowSize)}; } private boolean showArrows(PreviewProperties properties) { - return properties.getBooleanValue(PreviewProperty.SHOW_EDGES) && properties.getBooleanValue(PreviewProperty.DIRECTED) && !properties.getBooleanValue(PreviewProperty.MOVING); + return properties.getBooleanValue(PreviewProperty.SHOW_EDGES) + && properties.getBooleanValue(PreviewProperty.DIRECTED) + && !properties.getBooleanValue(PreviewProperty.MOVING); } @Override public boolean isRendererForitem(Item item, PreviewProperties properties) { - return item instanceof EdgeItem && showArrows(properties) && (Boolean) item.getData(EdgeItem.DIRECTED) && !(Boolean) item.getData(EdgeItem.SELF_LOOP); + return item instanceof EdgeItem + && showArrows(properties) + && (Boolean) item.getData(EdgeItem.DIRECTED) + && !(Boolean) item.getData(EdgeItem.SELF_LOOP); } @Override public boolean needsItemBuilder(ItemBuilder itemBuilder, PreviewProperties properties) { - return (itemBuilder instanceof EdgeBuilder || itemBuilder instanceof NodeBuilder) && showArrows(properties);//Needs some properties of nodes + return (itemBuilder instanceof EdgeBuilder + || itemBuilder instanceof NodeBuilder) + && showArrows(properties);//Needs some properties of nodes } @Override public String getDisplayName() { return NbBundle.getMessage(ArrowRenderer.class, "ArrowRenderer.name"); } + + private class Helper { + + public final Item sourceItem; + public final Item targetItem; + public final float length; + public final Vector p1; + public final Vector p2; + public final Vector p3; + + public Helper( + final Item item, + final PreviewProperties properties) { + sourceItem = item.getData(EdgeRenderer.SOURCE); + targetItem = item.getData(EdgeRenderer.TARGET); + + final Float x1 = sourceItem.getData(NodeItem.X); + final Float x2 = targetItem.getData(NodeItem.X); + final Float y1 = sourceItem.getData(NodeItem.Y); + final Float y2 = targetItem.getData(NodeItem.Y); + + final Double weight = item.getData(EdgeItem.WEIGHT); + final float size = properties.getFloatValue(PreviewProperty.ARROW_SIZE) + * weight.floatValue(); + float radius = -(properties.getFloatValue(PreviewProperty.EDGE_RADIUS) + + SizeUtils.getNodeSize(targetItem, properties) / 2f); + + //Avoid arrow from passing the node's center: + if (radius > 0) { + radius = 0; + } + + Vector direction = new Vector(x2, y2); + direction.sub(new Vector(x1, y1)); + length = direction.mag(); + if (length == 0f) { + // Nodes overlap; p1/p2/p3 are unused (render() returns early). + p1 = p2 = p3 = new Vector(x1, y1); + return; + } + direction.normalize(); + + if (properties.getBooleanValue(PreviewProperty.EDGE_CURVED)) { + // Change the direction to account for the curvature + // The direction won't be changed if no edge is drawn. + double newAngle = Math.atan2(direction.y, direction.x); + double curvature = properties.getDoubleValue(ARC_CURVENESS); + double r = length / curvature; + final Float targetRadius = item.getData(TARGET_RADIUS); + double rt = Math.max(0., -targetRadius); + + if (r >= rt / 2) { + double h = Math.sqrt(Math.pow(r, 2) - Math.pow(length / 2, 2)); + newAngle += Math.PI / 2 - Math.atan2(h, length / 2); + double h2 = Math.sqrt(Math.pow(r, 2) - Math.pow(rt / 2, 2)); + newAngle -= Math.PI / 2 - Math.atan2(h2, rt / 2); + direction = new Vector((float) Math.cos(newAngle), (float) Math.sin(newAngle)); + } + } + p1 = new Vector(direction.x, direction.y); + p1.mult(radius); + p1.add(new Vector(x2, y2)); + + final Vector p1r = new Vector(direction.x, direction.y); + p1r.mult(radius - size); + p1r.add(new Vector(x2, y2)); + + p2 = new Vector(-direction.y, direction.x); + p2.mult(size * BASE_RATIO); + p2.add(p1r); + + p3 = new Vector(direction.y, -direction.x); + p3.mult(size * BASE_RATIO); + p3.add(p1r); + } + } } diff --git a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/EdgeLabelRenderer.java b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/EdgeLabelRenderer.java index 4429029f68..f6c1929b02 100644 --- a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/EdgeLabelRenderer.java +++ b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/EdgeLabelRenderer.java @@ -39,34 +39,53 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.plugin.renderers; -import com.itextpdf.text.pdf.BaseFont; -import com.itextpdf.text.pdf.PdfContentByte; -import com.itextpdf.text.pdf.PdfGState; -import java.awt.*; +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Graphics2D; +import java.awt.Shape; import java.awt.font.FontRenderContext; import java.awt.font.GlyphVector; +import java.awt.geom.AffineTransform; +import java.awt.geom.Rectangle2D; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState; +import org.apache.pdfbox.pdmodel.graphics.state.RenderingMode; import org.gephi.graph.api.Edge; -import org.gephi.preview.api.*; +import org.gephi.preview.api.CanvasSize; +import org.gephi.preview.api.G2DTarget; +import org.gephi.preview.api.Item; +import org.gephi.preview.api.PDFTarget; +import org.gephi.preview.api.PreviewModel; +import org.gephi.preview.api.PreviewProperties; +import org.gephi.preview.api.PreviewProperty; +import org.gephi.preview.api.RenderTarget; +import org.gephi.preview.api.SVGTarget; +import org.gephi.preview.api.Vector; import org.gephi.preview.plugin.builders.EdgeBuilder; import org.gephi.preview.plugin.builders.EdgeLabelBuilder; import org.gephi.preview.plugin.builders.NodeBuilder; -import org.gephi.preview.plugin.items.EdgeItem; import org.gephi.preview.plugin.items.EdgeLabelItem; import org.gephi.preview.plugin.items.NodeItem; import org.gephi.preview.spi.ItemBuilder; import org.gephi.preview.spi.Renderer; import org.gephi.preview.types.DependantColor; import org.gephi.preview.types.DependantOriginalColor; -import org.gephi.preview.types.EdgeColor; +import org.gephi.visualization.api.VisualizationModel; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; import org.w3c.dom.Element; import org.w3c.dom.Text; /** - * * @author Yudi Xue, Mathieu Bastian */ @ServiceProvider(service = Renderer.class, position = 500) @@ -74,19 +93,24 @@ public class EdgeLabelRenderer implements Renderer { //Custom properties public static final String EDGE_COLOR = "edge.label.edgeColor"; + public static final String EDGE_THICKNESS = "edge.label.edgeThickness"; public static final String LABEL_X = "edge.label.x"; public static final String LABEL_Y = "edge.label.y"; + public static final String FONT_SIZE = "edge.label.fontSize"; //Default values protected final boolean defaultShowLabels = true; + protected final boolean defaultCustomFont = false; protected final Font defaultFont = new Font("Arial", Font.PLAIN, 10); protected final boolean defaultShorten = false; - protected final DependantOriginalColor defaultColor = new DependantOriginalColor(DependantOriginalColor.Mode.ORIGINAL); + protected final DependantOriginalColor defaultColor = + new DependantOriginalColor(DependantOriginalColor.Mode.ORIGINAL); protected final int defaultMaxChar = 30; protected final float defaultOutlineSize = 2; protected final DependantColor defaultOutlineColor = new DependantColor(Color.WHITE); protected final float defaultOutlineOpacity = 40; //Font cache - protected Font font; + protected final Map fontCache = new HashMap<>(); + protected final FontRenderContext frc = new FontRenderContext(new AffineTransform(), true, true); @Override public void preProcess(PreviewModel previewModel) { @@ -105,33 +129,34 @@ public void preProcess(PreviewModel previewModel) { } } + //Put nodes in edge item (in case it was not done yet by EdgeRenderer) + EdgeRenderer.putNodesInEdgeItems(previewModel, previewModel.getItems(Item.EDGE)); + //Put parent color, and calculate position for (Item item : previewModel.getItems(Item.EDGE_LABEL)) { Edge edge = (Edge) item.getSource(); Item edgeItem = previewModel.getItem(Item.EDGE, edge); - EdgeColor edgeColor = (EdgeColor) properties.getValue(PreviewProperty.EDGE_COLOR); - NodeItem sourceItem = (NodeItem) edgeItem.getData(EdgeRenderer.SOURCE); - NodeItem targetItem = (NodeItem) edgeItem.getData(EdgeRenderer.TARGET); - Color color = edgeColor.getColor((Color) item.getData(EdgeItem.COLOR), - (Color) sourceItem.getData(NodeItem.COLOR), - (Color) targetItem.getData(NodeItem.COLOR)); - item.setData(EDGE_COLOR, color); + NodeItem sourceItem = edgeItem.getData(EdgeRenderer.SOURCE); + NodeItem targetItem = edgeItem.getData(EdgeRenderer.TARGET); + + item.setData(EDGE_COLOR, EdgeRenderer.getColor(edgeItem, properties)); + item.setData(EDGE_THICKNESS, EdgeRenderer.getThickness(edgeItem)); + if (edge.isSelfLoop()) { - //Middle + // Position label near the self-loop, accounting for node size and edge thickness. + // Matches the VisualizationEngine EdgeLabelUpdater formula: + // loopRadius = nodeRadius * 0.5 + strokeWidth * 0.33 (strokeWidth = thickness * 1.3) + // Label is placed at 45Β° (upper-right in screen space) on the loop circumference. Float x = sourceItem.getData(NodeItem.X); Float y = sourceItem.getData(NodeItem.Y); - Float size = sourceItem.getData(NodeItem.SIZE); - - Vector v1 = new Vector(x, y); - v1.add(size, -size); - - Vector v2 = new Vector(x, y); - v2.add(size, size); - - Vector middle = bezierPoint(x, y, v1.x, v1.y, v2.x, v2.y, x, y, 0.5f); - item.setData(LABEL_X, middle.x); - item.setData(LABEL_Y, middle.y); + float sourceRadius = SizeUtils.getNodeSize(sourceItem, properties) / 2f; + float thickness = EdgeRenderer.getThickness(edgeItem); + float loopRadius = sourceRadius * 0.5f + thickness * EdgeRenderer.STROKE_MULTIPLIER * 0.33f; + final float cos45 = 0.707f; + // In Preview (y increases downward), upper-right = x+, y- + item.setData(LABEL_X, x + loopRadius * (1 + cos45)); + item.setData(LABEL_Y, y - loopRadius * (1 + cos45)); } else if (properties.getBooleanValue(PreviewProperty.EDGE_CURVED)) { //Middle of the curve @@ -140,43 +165,120 @@ public void preProcess(PreviewModel previewModel) { Float y1 = sourceItem.getData(NodeItem.Y); Float y2 = targetItem.getData(NodeItem.Y); - //Curved edgs - Vector direction = new Vector(x2, y2); + //Curved edges + final Vector direction = new Vector(x2, y2); direction.sub(new Vector(x1, y1)); - float length = direction.mag(); - direction.normalize(); - - float factor = properties.getFloatValue(EdgeRenderer.BEZIER_CURVENESS) * length; - - // normal vector to the edge - Vector n = new Vector(direction.y, -direction.x); - n.mult(factor); - - // first control point - Vector v1 = new Vector(direction.x, direction.y); - v1.mult(factor); - v1.add(new Vector(x1, y1)); - v1.add(n); - - // second control point - Vector v2 = new Vector(direction.x, direction.y); - v2.mult(-factor); - v2.add(new Vector(x2, y2)); - v2.add(n); - - Vector middle = bezierPoint(x1, y1, v1.x, v1.y, v2.x, v2.y, x2, y2, 0.5f); - item.setData(LABEL_X, middle.x); - item.setData(LABEL_Y, middle.y); - } else { - Float x = ((Float) sourceItem.getData(NodeItem.X) + (Float) targetItem.getData(NodeItem.X)) / 2f; - Float y = ((Float) sourceItem.getData(NodeItem.Y) + (Float) targetItem.getData(NodeItem.Y)) / 2f; + final float length = direction.mag(); + // Arc radius + double r = length / properties.getDoubleValue(EdgeRenderer.ARC_CURVENESS); + // Arc bounding box + Double _xa = 0.5 * (x1 - x2); + Double _ya = 0.5 * (y1 - y2); + Double _x0 = x2 + _xa; + Double _y0 = y2 + _ya; + Double _a = Math.sqrt(Math.pow(_xa, 2) + Math.pow(_ya, 2)); + Double _b = 0.; + if (_a < r) { + _b = Math.sqrt(Math.pow(r, 2) - Math.pow(_a, 2)); + } + Double xc = _x0 + (_b * _ya) / _a; + Double yc = _y0 - (_b * _xa / _a); + Double angle1 = Math.atan2(y1 - yc, x1 - xc); + Double angle2 = Math.atan2(y2 - yc, x2 - xc); + while (angle2 < angle1) { + angle2 += 2 * Math.PI; + } + double arcAngle = Math.abs(angle2 - angle1); + while (arcAngle >= Math.PI) { + arcAngle -= Math.PI; + } + // Target radius - to start at the base of the arrow + final Float targetRadius = edgeItem.getData(EdgeRenderer.TARGET_RADIUS); + // Offset due to the source node + if (targetRadius != null && targetRadius < 0) { + Double targetOffset = computeTruncateAngle(r, (double) targetRadius, (double) arcAngle); + angle2 += targetOffset; + } + // Source radius + final Float sourceRadius = edgeItem.getData(EdgeRenderer.SOURCE_RADIUS); + // Avoid edge from passing the node's center: + if (sourceRadius != null && sourceRadius < 0) { + Double sourceOffset = computeTruncateAngle(r, (double) targetRadius, (double) arcAngle); + angle1 -= sourceOffset; + } + // Label coordinates + final Double lAngle = (angle1 + angle2) / 2; + final Float x = length != 0 ? (float) (xc + r * Math.cos(lAngle)) : x1; + final Float y = length != 0 ? (float) (yc + r * Math.sin(lAngle)) : y1; item.setData(LABEL_X, x); item.setData(LABEL_Y, y); + + } else { + // Straight edges: position label along the visible edge (accounting for node sizes). + // Matches the VisualizationEngine EdgeLabelUpdater formula: + // - Undirected: midpoint of visible edge (1/2 fraction) + // - Directed: 2/3 from source along visible edge (label closer to the arrow target) + Float x1 = sourceItem.getData(NodeItem.X); + Float y1 = sourceItem.getData(NodeItem.Y); + Float x2 = targetItem.getData(NodeItem.X); + Float y2 = targetItem.getData(NodeItem.Y); + + float dx = x2 - x1; + float dy = y2 - y1; + float edgeLength = (float) Math.sqrt(dx * dx + dy * dy); + + float labelX, labelY; + if (edgeLength > 0) { + float sourceRadius = SizeUtils.getNodeSize(sourceItem, properties) / 2f; + float targetRadius = SizeUtils.getNodeSize(targetItem, properties) / 2f; + float ndx = dx / edgeLength; + float ndy = dy / edgeLength; + + float offsetFromSource; + if (edge.isDirected()) { + // 2/3 along the visible edge (between the node borders) + offsetFromSource = sourceRadius + (edgeLength - sourceRadius - targetRadius) * 2f / 3f; + } else { + // Midpoint of the visible edge (between the node borders) + offsetFromSource = sourceRadius + (edgeLength - sourceRadius - targetRadius) * 0.5f; + } + + labelX = x1 + ndx * offsetFromSource; + labelY = y1 + ndy * offsetFromSource; + } else { + // Overlapping nodes: fall back to source node center + labelX = x1; + labelY = y1; + } + item.setData(LABEL_X, labelX); + item.setData(LABEL_Y, labelY); } } - //Property font - font = properties.getFontValue(PreviewProperty.EDGE_LABEL_FONT); + // Get Viz model + final VisualizationModel vizModel = previewModel.getWorkspace().getLookup().lookup(VisualizationModel.class); + + // Get font + Font font = properties.getFontValue(PreviewProperty.EDGE_LABEL_FONT); + if (!properties.getBooleanValue(PreviewProperty.EDGE_LABEL_CUSTOM_FONT)) { + // Use font from visualization model for consistent font family and style with the graph view + if (vizModel != null && vizModel.getEdgeLabelFont() != null) { + font = vizModel.getEdgeLabelFont(); + } + } + + //Calculate font size and cache fonts + final float baseFontSize = font.getSize() * properties.getFloatValue(PreviewProperty.EDGE_LABEL_SCALE); + for (Item item : previewModel.getItems(Item.EDGE_LABEL)) { + float fontSize = baseFontSize; + if (item.getData(EdgeLabelItem.SIZE) != null) { + Float labelSize = item.getData(EdgeLabelItem.SIZE); + fontSize *= (float) Math.sqrt(labelSize); + } + Font labelFont = font.deriveFont(fontSize); + fontCache.put(labelFont.getSize(), labelFont); + item.setData(FONT_SIZE, labelFont.getSize()); + } } @Override @@ -188,164 +290,254 @@ public void render(Item item, RenderTarget target, PreviewProperties properties) DependantOriginalColor propColor = properties.getValue(PreviewProperty.EDGE_LABEL_COLOR); color = propColor.getColor(edgeColor, color); String label = item.getData(EdgeLabelItem.LABEL); + Integer fontSize = item.getData(FONT_SIZE); Float x = item.getData(LABEL_X); Float y = item.getData(LABEL_Y); + //Skip if empty + if (label == null || label.trim().isEmpty()) { + return; + } + //Outline DependantColor outlineDependantColor = properties.getValue(PreviewProperty.EDGE_LABEL_OUTLINE_COLOR); Float outlineSize = properties.getFloatValue(PreviewProperty.EDGE_LABEL_OUTLINE_SIZE); - outlineSize = outlineSize * (font.getSize() / 32f); + outlineSize = outlineSize * (fontSize / 32f); int outlineAlpha = (int) ((properties.getFloatValue(PreviewProperty.EDGE_LABEL_OUTLINE_OPACITY) / 100f) * 255f); - if (outlineAlpha > 255) { - outlineAlpha = 255; - } Color outlineColor = outlineDependantColor.getColor(edgeColor); outlineColor = new Color(outlineColor.getRed(), outlineColor.getGreen(), outlineColor.getBlue(), outlineAlpha); if (target instanceof G2DTarget) { - renderG2D((G2DTarget) target, label, x, y, color, outlineSize, outlineColor); + renderG2D((G2DTarget) target, label, fontSize, x, y, color, outlineSize, outlineColor); } else if (target instanceof SVGTarget) { - renderSVG((SVGTarget) target, edge, label, x, y, color, outlineSize, outlineColor); + renderSVG((SVGTarget) target, edge, label, fontSize, x, y, color, outlineSize, outlineColor); } else if (target instanceof PDFTarget) { - renderPDF(((PDFTarget) target), label, x, y, color, outlineSize, outlineColor); + renderPDF(((PDFTarget) target), label, fontSize, x, y, color, outlineSize, outlineColor); } } - public void renderG2D(G2DTarget target, String label, float x, float y, Color color, float outlineSize, Color outlineColor) { + @Override + public void postProcess(PreviewModel previewModel, RenderTarget renderTarget, PreviewProperties properties) { + } + + @Override + public CanvasSize getCanvasSize( + final Item item, + final PreviewProperties properties) { + //FIXME Compute the label canvas + return new CanvasSize(); + } + + public void renderG2D(G2DTarget target, String label, int fontSize, float x, float y, Color color, + float outlineSize, + Color outlineColor) { Graphics2D graphics = target.getGraphics(); + Font font = fontCache.get(fontSize); graphics.setFont(font); FontMetrics fm = graphics.getFontMetrics(); float posX = x - fm.stringWidth(label) / 2f; - float posY = y + fm.getAscent() / 2f; + // Center text vertically: baseline = centerY + (ascent - descent) / 2 + // Matches NodeLabelRenderer and TextRenderer approaches for consistent positioning + float posY = y + (fm.getAscent() - fm.getDescent()) / 2f; + + Shape outlineGlyph = null; if (outlineSize > 0) { FontRenderContext frc = graphics.getFontRenderContext(); GlyphVector gv = font.createGlyphVector(frc, label); - Shape glyph = gv.getOutline(posX, posY); + outlineGlyph = gv.getOutline(posX, posY); graphics.setColor(outlineColor); graphics.setStroke(new BasicStroke(outlineSize, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); - graphics.draw(glyph); + graphics.draw(outlineGlyph); } graphics.setColor(color); - graphics.drawString(label, posX, posY); + if (null == outlineGlyph) { + graphics.drawString(label, posX, posY); + } else { + graphics.fill(outlineGlyph); + } } - public void renderSVG(SVGTarget target, Edge edge, String label, float x, float y, Color color, float outlineSize, Color outlineColor) { + private Double computeTruncateAngle(Double radius_curvature_edge, Double truncature_length, Double arc_angle) { + // The edge is an arc of a circle. + // We want to truncate that arc so that truncated part has a chord of a given length. + // i.e. not the length along the arc, but as a straight segment (like the string of a bow) + // We give back the result as an angle, as it's how it's useful to us. + Double rt = truncature_length; + Double r = radius_curvature_edge; + Double s = r * arc_angle; + if (s <= -rt) { + // Can't truncate more than the arc length + // Return 0 so the node's center is used to determine + // where to draw the label + return 0.; + } + // If you take a sector from a circle with radius r, and chord length |rt|, + // x is the length bisecting the two radii. + double x = Math.sqrt(Math.pow(r, 2) - Math.pow(rt / 2, 2)); + return 2 * Math.atan2(rt / 2, x); + } + + public void renderSVG(SVGTarget target, Edge edge, String label, int fontSize, float x, float y, Color color, + float outlineSize, + Color outlineColor) { Text labelText = target.createTextNode(label); + Font font = fontCache.get(fontSize); + + // Calculate proper baseline Y position using font metrics + // Matches G2D and TextRenderer approaches for consistent positioning across renderers + Rectangle2D bounds = font.getStringBounds(label, frc); + float ascent = (float) -bounds.getY(); + float descent = (float) (bounds.getHeight() + bounds.getY()); + float baselineY = y + (ascent - descent) / 2f; if (outlineSize > 0) { Text labelTextOutline = target.createTextNode(label); Element outlineElem = target.createElement("text"); - outlineElem.setAttribute("class", edge.getId().toString()); + outlineElem.setAttribute("class", SVGUtils.idAsClassAttribute(edge.getId())); outlineElem.setAttribute("x", String.valueOf(x)); - outlineElem.setAttribute("y", String.valueOf(y)); - outlineElem.setAttribute("style", "text-anchor: middle; dominant-baseline: central;"); - outlineElem.setAttribute("fill", target.toHexString(color)); + outlineElem.setAttribute("y", String.valueOf(baselineY)); + outlineElem.setAttribute("style", "text-anchor: middle;"); + outlineElem.setAttribute("fill", "none"); outlineElem.setAttribute("font-family", font.getFamily()); outlineElem.setAttribute("font-size", font.getSize() + ""); + if (font.isBold()) { + outlineElem.setAttribute("font-weight", "bold"); + } + if (font.isItalic()) { + outlineElem.setAttribute("font-style", "italic"); + } outlineElem.setAttribute("stroke", target.toHexString(outlineColor)); outlineElem.setAttribute("stroke-width", (outlineSize * target.getScaleRatio()) + "px"); outlineElem.setAttribute("stroke-linecap", "round"); outlineElem.setAttribute("stroke-linejoin", "round"); outlineElem.setAttribute("stroke-opacity", String.valueOf(outlineColor.getAlpha() / 255f)); outlineElem.appendChild(labelTextOutline); - target.getTopElement(SVGTarget.TOP_NODE_LABELS_OUTLINE).appendChild(outlineElem); + target.getTopElement(SVGTarget.TOP_EDGE_LABELS_OUTLINE).appendChild(outlineElem); } Element labelElem = target.createElement("text"); - labelElem.setAttribute("class", edge.getId().toString()); + labelElem.setAttribute("class", SVGUtils.idAsClassAttribute(edge.getId())); labelElem.setAttribute("x", x + ""); - labelElem.setAttribute("y", y + ""); - labelElem.setAttribute("style", "text-anchor: middle; dominant-baseline: central;"); + labelElem.setAttribute("y", baselineY + ""); + labelElem.setAttribute("style", "text-anchor: middle;"); labelElem.setAttribute("fill", target.toHexString(color)); labelElem.setAttribute("font-family", font.getFamily()); labelElem.setAttribute("font-size", font.getSize() + ""); + if (font.isBold()) { + labelElem.setAttribute("font-weight", "bold"); + } + if (font.isItalic()) { + labelElem.setAttribute("font-style", "italic"); + } labelElem.appendChild(labelText); target.getTopElement(SVGTarget.TOP_EDGE_LABELS).appendChild(labelElem); } - public void renderPDF(PDFTarget target, String label, float x, float y, Color color, float outlineSize, Color outlineColor) { - PdfContentByte cb = target.getContentByte(); - cb.setRGBColorFill(color.getRed(), color.getGreen(), color.getBlue()); - BaseFont bf = target.getBaseFont(font); - float textHeight = getTextHeight(bf, font.getSize(), label); - if (outlineSize > 0) { - cb.setTextRenderingMode(PdfContentByte.TEXT_RENDER_MODE_STROKE); - cb.setRGBColorStroke(outlineColor.getRed(), outlineColor.getGreen(), outlineColor.getBlue()); - cb.setLineWidth(outlineSize); - cb.setLineJoin(PdfContentByte.LINE_JOIN_ROUND); - cb.setLineCap(PdfContentByte.LINE_CAP_ROUND); - if (outlineColor.getAlpha() < 255) { - cb.saveState(); - float alpha = outlineColor.getAlpha() / 255f; - PdfGState gState = new PdfGState(); - gState.setStrokeOpacity(alpha); - cb.setGState(gState); + public void renderPDF(PDFTarget target, String label, int fontSize, float x, float y, Color color, + float outlineSize, + Color outlineColor) { + PDPageContentStream contentStream = target.getContentStream(); + + Font font = fontCache.get(fontSize); + PDFont pdFont = target.getPDFont(font); + + try { + float textHeight = PDFUtils.getTextHeight(pdFont, fontSize); + float textWidth = PDFUtils.getTextWidth(pdFont, fontSize, label); + + if (outlineSize > 0) { + contentStream.setRenderingMode(RenderingMode.STROKE); + contentStream.setStrokingColor(outlineColor); + contentStream.setLineWidth(outlineSize); + contentStream.setLineJoinStyle(1); //round + contentStream.setLineCapStyle(1); //round + if (outlineColor.getAlpha() < 255) { + PDExtendedGraphicsState graphicsState = new PDExtendedGraphicsState(); + graphicsState.setStrokingAlphaConstant(outlineColor.getAlpha() / 255f); + contentStream.saveGraphicsState(); + contentStream.setGraphicsStateParameters(graphicsState); + } + contentStream.beginText(); + contentStream.setFont(pdFont, fontSize); + contentStream.newLineAtOffset(x - (textWidth / 2f), -y - (textHeight / 2f)); + contentStream.showText(label); + contentStream.endText(); + if (outlineColor.getAlpha() < 255) { + contentStream.restoreGraphicsState(); + } + } + + if (color.getAlpha() < 255) { + PDExtendedGraphicsState graphicsState = new PDExtendedGraphicsState(); + graphicsState.setNonStrokingAlphaConstant(color.getAlpha() / 255f); + contentStream.saveGraphicsState(); + contentStream.setGraphicsStateParameters(graphicsState); } - cb.beginText(); - cb.setFontAndSize(bf, font.getSize()); - cb.showTextAligned(PdfContentByte.ALIGN_CENTER, label, x, -y - (textHeight / 2f), 0f); - cb.endText(); - if (outlineColor.getAlpha() < 255) { - cb.restoreState(); + contentStream.beginText(); + contentStream.setFont(pdFont, fontSize); + contentStream.setNonStrokingColor(color); + contentStream.setRenderingMode(RenderingMode.FILL); + contentStream.newLineAtOffset(x - (textWidth / 2f), -y - (textHeight / 2f)); + contentStream.showText(label); + contentStream.endText(); + if (color.getAlpha() < 255) { + contentStream.restoreGraphicsState(); } + } catch (IOException ex) { + throw new RuntimeException(ex); } - cb.setTextRenderingMode(PdfContentByte.TEXT_RENDER_MODE_FILL); - cb.beginText(); - cb.setFontAndSize(bf, font.getSize()); - cb.showTextAligned(PdfContentByte.ALIGN_CENTER, label, x, -y - (textHeight / 2f), 0f); - cb.endText(); - } - - private float getTextHeight(BaseFont baseFont, float fontSize, String text) { - float ascend = baseFont.getAscentPoint(text, fontSize); - float descend = baseFont.getDescentPoint(text, fontSize); - return ascend + descend; } @Override public PreviewProperty[] getProperties() { - return new PreviewProperty[]{ + return new PreviewProperty[] { PreviewProperty.createProperty(this, PreviewProperty.SHOW_EDGE_LABELS, Boolean.class, - NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.display.displayName"), - NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.display.description"), - PreviewProperty.CATEGORY_EDGE_LABELS).setValue(defaultShowLabels), + NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.display.displayName"), + NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.display.description"), + PreviewProperty.CATEGORY_EDGE_LABELS).setValue(defaultShowLabels), + PreviewProperty.createProperty(this, PreviewProperty.EDGE_LABEL_CUSTOM_FONT, Boolean.class, + NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.customFont.displayName"), + NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.customFont.description"), + PreviewProperty.CATEGORY_EDGE_LABELS, PreviewProperty.SHOW_EDGE_LABELS).setValue(defaultCustomFont), PreviewProperty.createProperty(this, PreviewProperty.EDGE_LABEL_FONT, Font.class, - NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.font.displayName"), - NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.font.description"), - PreviewProperty.CATEGORY_EDGE_LABELS, PreviewProperty.SHOW_EDGE_LABELS).setValue(defaultFont), + NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.font.displayName"), + NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.font.description"), + PreviewProperty.CATEGORY_EDGE_LABELS, PreviewProperty.SHOW_EDGE_LABELS).setValue(defaultFont), PreviewProperty.createProperty(this, PreviewProperty.EDGE_LABEL_COLOR, DependantOriginalColor.class, - NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.color.displayName"), - NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.color.description"), - PreviewProperty.CATEGORY_EDGE_LABELS, PreviewProperty.SHOW_EDGE_LABELS).setValue(defaultColor), + NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.color.displayName"), + NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.color.description"), + PreviewProperty.CATEGORY_EDGE_LABELS, PreviewProperty.SHOW_EDGE_LABELS).setValue(defaultColor), PreviewProperty.createProperty(this, PreviewProperty.EDGE_LABEL_SHORTEN, Boolean.class, - NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.shorten.displayName"), - NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.shorten.description"), - PreviewProperty.CATEGORY_EDGE_LABELS, PreviewProperty.SHOW_EDGE_LABELS).setValue(defaultShorten), + NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.shorten.displayName"), + NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.shorten.description"), + PreviewProperty.CATEGORY_EDGE_LABELS, PreviewProperty.SHOW_EDGE_LABELS).setValue(defaultShorten), PreviewProperty.createProperty(this, PreviewProperty.EDGE_LABEL_MAX_CHAR, Integer.class, - NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.maxchar.displayName"), - NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.maxchar.description"), - PreviewProperty.CATEGORY_EDGE_LABELS, PreviewProperty.SHOW_EDGE_LABELS).setValue(defaultMaxChar), + NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.maxchar.displayName"), + NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.maxchar.description"), + PreviewProperty.CATEGORY_EDGE_LABELS, PreviewProperty.SHOW_EDGE_LABELS).setValue(defaultMaxChar), PreviewProperty.createProperty(this, PreviewProperty.EDGE_LABEL_OUTLINE_SIZE, Float.class, - NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.outlineSize.displayName"), - NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.outlineSize.description"), - PreviewProperty.CATEGORY_EDGE_LABELS, PreviewProperty.SHOW_EDGE_LABELS).setValue(defaultOutlineSize), + NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.outlineSize.displayName"), + NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.outlineSize.description"), + PreviewProperty.CATEGORY_EDGE_LABELS, PreviewProperty.SHOW_EDGE_LABELS).setMinMax(0f, null).setValue( + defaultOutlineSize), PreviewProperty.createProperty(this, PreviewProperty.EDGE_LABEL_OUTLINE_COLOR, DependantColor.class, - NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.outlineColor.displayName"), - NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.outlineColor.description"), - PreviewProperty.CATEGORY_EDGE_LABELS, PreviewProperty.SHOW_EDGE_LABELS).setValue(defaultOutlineColor), + NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.outlineColor.displayName"), + NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.outlineColor.description"), + PreviewProperty.CATEGORY_EDGE_LABELS, PreviewProperty.SHOW_EDGE_LABELS).setValue(defaultOutlineColor), PreviewProperty.createProperty(this, PreviewProperty.EDGE_LABEL_OUTLINE_OPACITY, Float.class, - NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.outlineOpacity.displayName"), - NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.outlineOpacity.description"), - PreviewProperty.CATEGORY_EDGE_LABELS, PreviewProperty.SHOW_EDGE_LABELS).setValue(defaultOutlineOpacity),}; + NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.outlineOpacity.displayName"), + NbBundle.getMessage(EdgeLabelRenderer.class, "EdgeLabelRenderer.property.outlineOpacity.description"), + PreviewProperty.CATEGORY_EDGE_LABELS, PreviewProperty.SHOW_EDGE_LABELS).setMinMax(0f, 100f).setValue( + defaultOutlineOpacity),}; } private boolean showEdgeLabels(PreviewProperties properties) { return properties.getBooleanValue(PreviewProperty.SHOW_EDGE_LABELS) - && !properties.getBooleanValue(PreviewProperty.MOVING); + && !properties.getBooleanValue(PreviewProperty.MOVING); } @Override @@ -355,10 +547,12 @@ public boolean isRendererForitem(Item item, PreviewProperties properties) { @Override public boolean needsItemBuilder(ItemBuilder itemBuilder, PreviewProperties properties) { - return (itemBuilder instanceof EdgeLabelBuilder || itemBuilder instanceof NodeBuilder || itemBuilder instanceof EdgeBuilder) && showEdgeLabels(properties);//Needs some properties of nodes and edges + return (itemBuilder instanceof EdgeLabelBuilder || itemBuilder instanceof NodeBuilder || + itemBuilder instanceof EdgeBuilder) && showEdgeLabels(properties);//Needs some properties of nodes and edges } - protected Vector bezierPoint(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4, float c) { + protected Vector bezierPoint(float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4, + float c) { Vector ab = linearInterpolation(x1, y1, x2, y2, c); Vector bc = linearInterpolation(x2, y2, x3, y3, c); Vector cd = linearInterpolation(x3, y3, x4, y4, c); diff --git a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/EdgeRenderer.java b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/EdgeRenderer.java index 82b881fb41..7b6990e72e 100644 --- a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/EdgeRenderer.java +++ b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/EdgeRenderer.java @@ -39,20 +39,32 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.plugin.renderers; -import com.itextpdf.text.pdf.PdfContentByte; -import com.itextpdf.text.pdf.PdfGState; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics2D; -import java.awt.geom.GeneralPath; +import java.awt.geom.Arc2D; +import java.awt.geom.Ellipse2D; import java.awt.geom.Line2D; -import java.text.DecimalFormat; +import java.awt.geom.Rectangle2D; +import java.io.IOException; import java.util.Locale; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState; import org.gephi.graph.api.Edge; import org.gephi.graph.api.Node; -import org.gephi.preview.api.*; +import org.gephi.preview.api.CanvasSize; +import org.gephi.preview.api.G2DTarget; +import org.gephi.preview.api.Item; +import org.gephi.preview.api.PDFTarget; +import org.gephi.preview.api.PreviewModel; +import org.gephi.preview.api.PreviewProperties; +import org.gephi.preview.api.PreviewProperty; +import org.gephi.preview.api.RenderTarget; +import org.gephi.preview.api.SVGTarget; +import org.gephi.preview.api.Vector; import org.gephi.preview.plugin.builders.EdgeBuilder; import org.gephi.preview.plugin.builders.NodeBuilder; import org.gephi.preview.plugin.items.EdgeItem; @@ -60,13 +72,13 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.preview.spi.ItemBuilder; import org.gephi.preview.spi.Renderer; import org.gephi.preview.types.EdgeColor; +import org.gephi.utils.NumberUtils; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; import org.w3c.dom.Element; /** - * - * @author Yudi Xue, Mathieu Bastian + * @author Yudi Xue, Mathieu Bastian, Mathieu Jacomy */ @ServiceProvider(service = Renderer.class, position = 100) public class EdgeRenderer implements Renderer { @@ -74,362 +86,277 @@ public class EdgeRenderer implements Renderer { //Custom properties public static final String EDGE_MIN_WEIGHT = "edge.min-weight"; public static final String EDGE_MAX_WEIGHT = "edge.max-weight"; + // Same multiplier as the GLSL selfloop.vert shader constant + public static final float STROKE_MULTIPLIER = 1.3f; + // Stores the source node radius for self-loops (used for partial arc clipping) + public static final String SELF_LOOP_NODE_RADIUS = "edge.selfloop.nodeRadius"; + /** + * @deprecated We now use circle arcs to draw curved edges. See ARC_CURVENESS instead. + */ + @Deprecated public static final String BEZIER_CURVENESS = "edge.bezier-curveness"; + public static final String ARC_CURVENESS = "edge.arc-curveness"; public static final String SOURCE = "source"; public static final String TARGET = "target"; public static final String TARGET_RADIUS = "edge.target.radius"; public static final String SOURCE_RADIUS = "edge.source.radius"; + private static final StraightEdgeRenderer STRAIGHT_RENDERER + = new StraightEdgeRenderer(); + private static final CurvedEdgeRenderer CURVED_RENDERER + = new CurvedEdgeRenderer(); + private static final SelfLoopEdgeRenderer SELF_LOOP_RENDERER + = new SelfLoopEdgeRenderer(); //Default values protected boolean defaultShowEdges = true; protected float defaultThickness = 1; + protected boolean defaultUseWeight = true; protected boolean defaultRescaleWeight = true; + protected float defaultRescaleWeightMin = 0.4f; + protected float defaultRescaleWeightMax = 8f; protected EdgeColor defaultColor = new EdgeColor(EdgeColor.Mode.MIXED); protected boolean defaultEdgeCurved = true; - protected float defaultBezierCurviness = 0.2f; + protected static float defaultArcCurviness = 1.2f; protected int defaultOpacity = 100; protected float defaultRadius = 0f; - @Override - public void preProcess(PreviewModel previewModel) { - PreviewProperties properties = previewModel.getProperties(); - Item[] edgeItems = previewModel.getItems(Item.EDGE); + public static Color getColor( + final Item item, + final PreviewProperties properties) { + final Item sourceItem = item.getData(SOURCE); + final Item targetItem = item.getData(TARGET); + final EdgeColor edgeColor + = properties.getValue(PreviewProperty.EDGE_COLOR); + final Color color = edgeColor.getColor( + item.getData(EdgeItem.COLOR), + sourceItem.getData(NodeItem.COLOR), + targetItem.getData(NodeItem.COLOR)); + float opacity = properties.getIntValue(PreviewProperty.EDGE_OPACITY) / 100F; + + return new Color( + color.getRed(), + color.getGreen(), + color.getBlue(), + (int) (color.getAlpha() * opacity)); + } - //Put nodes in edge item - for (Item item : edgeItems) { - Edge edge = (Edge) item.getSource(); - Node source = edge.getSource(); - Node target = edge.getTarget(); - Item nodeSource = previewModel.getItem(Item.NODE, source); - Item nodeTarget = previewModel.getItem(Item.NODE, target); + private static boolean isSelfLoopEdge(final Item item) { + final Item sourceItem = item.getData(SOURCE); + final Item targetItem = item.getData(TARGET); + return item instanceof EdgeItem && sourceItem == targetItem; + } + + public static float getThickness(final Item item) { + return ((Double) item.getData(EdgeItem.WEIGHT)).floatValue(); + } + + protected static void putNodesInEdgeItems(PreviewModel previewModel, Item[] edgeItems) { + for (final Item item : edgeItems) { + final Edge edge = (Edge) item.getSource(); + final Node source = edge.getSource(); + final Node target = edge.getTarget(); + final Item nodeSource = previewModel.getItem(Item.NODE, source); + final Item nodeTarget = previewModel.getItem(Item.NODE, target); item.setData(SOURCE, nodeSource); item.setData(TARGET, nodeTarget); } + } + + @Override + public void preProcess(PreviewModel previewModel) { + final PreviewProperties properties = previewModel.getProperties(); + final Item[] edgeItems = previewModel.getItems(Item.EDGE); + + //Put nodes in edge item + putNodesInEdgeItems(previewModel, edgeItems); //Calculate max and min weight double minWeight = Double.POSITIVE_INFINITY; double maxWeight = Double.NEGATIVE_INFINITY; for (Item edge : edgeItems) { - minWeight = Math.min(minWeight, (Double) edge.getData(EdgeItem.WEIGHT)); - maxWeight = Math.max(maxWeight, (Double) edge.getData(EdgeItem.WEIGHT)); + minWeight = Math.min( + minWeight, + edge.getData(EdgeItem.WEIGHT)); + maxWeight = Math.max( + maxWeight, + edge.getData(EdgeItem.WEIGHT)); } properties.putValue(EDGE_MIN_WEIGHT, minWeight); properties.putValue(EDGE_MAX_WEIGHT, maxWeight); - //Put bezier curveness in properties - if (!properties.hasProperty(BEZIER_CURVENESS)) { - properties.putValue(BEZIER_CURVENESS, defaultBezierCurviness); + //Put arc curveness in properties + if (!properties.hasProperty(ARC_CURVENESS)) { + properties.putValue(ARC_CURVENESS, defaultArcCurviness); } //Rescale weight if necessary - and avoid negative weights - boolean rescaleWeight = properties.getBooleanValue(PreviewProperty.EDGE_RESCALE_WEIGHT); - for (Item item : edgeItems) { - double weight = (Double) item.getData(EdgeItem.WEIGHT); - - //Rescale weight - if (rescaleWeight) { - if (!Double.isInfinite(minWeight) && !Double.isInfinite(maxWeight) && maxWeight != minWeight) { - double ratio = 1.0 / (maxWeight - minWeight); - weight = (weight - minWeight) * ratio; + final boolean useWeight = properties.getBooleanValue( + PreviewProperty.EDGE_USE_WEIGHT); + final boolean rescaleWeight = properties.getBooleanValue( + PreviewProperty.EDGE_RESCALE_WEIGHT); + + // Get thickness + double thickness = properties.getFloatValue(PreviewProperty.EDGE_THICKNESS); + thickness *= properties.getFloatValue(PreviewProperty.EDGE_SCALE_FACTOR); + + if (useWeight && rescaleWeight) { + final double weightDiff = maxWeight - minWeight; + double minRescaledWeight = properties.getFloatValue(PreviewProperty.EDGE_RESCALE_WEIGHT_MIN); + double maxRescaledWeight = properties.getFloatValue(PreviewProperty.EDGE_RESCALE_WEIGHT_MAX); + + if (minRescaledWeight > maxRescaledWeight) { + minRescaledWeight = maxRescaledWeight; + } + + final double rescaledWeightsDiff = maxRescaledWeight - minRescaledWeight; + + if (!Double.isInfinite(minWeight) + && !Double.isInfinite(maxWeight) + && !NumberUtils.equalsEpsilon(maxWeight, minWeight)) { + for (final Item item : edgeItems) { + double weight = item.getData(EdgeItem.WEIGHT); + weight = rescaledWeightsDiff * (weight - minWeight) / weightDiff + minRescaledWeight; + item.setData(EdgeItem.WEIGHT, weight * thickness); + } + } else { + for (final Item item : edgeItems) { + item.setData(EdgeItem.WEIGHT, thickness); + } + } + } else if (useWeight) { + for (final Item item : edgeItems) { + double weight = item.getData(EdgeItem.WEIGHT); + + if (minWeight <= 0) { + //Avoid negative weight + weight += Math.abs(minWeight) + 1; } - } else if (minWeight <= 0) { - //Avoid negative weight - weight += Math.abs(minWeight) + 1; + + //Multiply by thickness + item.setData(EdgeItem.WEIGHT, weight * thickness); + } + } else { + for (final Item item : edgeItems) { + item.setData(EdgeItem.WEIGHT, thickness); } - //Multiply by thickness - weight *= properties.getFloatValue(PreviewProperty.EDGE_THICKNESS); - item.setData(EdgeItem.WEIGHT, weight); } //Radius - for (Item item : edgeItems) { + for (final Item item : edgeItems) { if (!(Boolean) item.getData(EdgeItem.SELF_LOOP)) { - float edgeRadius = properties.getFloatValue(PreviewProperty.EDGE_RADIUS); - float targetRadius = 0; - if ((Boolean) item.getData(EdgeItem.DIRECTED) || edgeRadius > 0f) { - //Target - Item targetItem = (Item) item.getData(TARGET); - Double weight = item.getData(EdgeItem.WEIGHT); - //Avoid negative arrow size: - float arrowSize = properties.getFloatValue(PreviewProperty.ARROW_SIZE); - if (arrowSize < 0) { - arrowSize = 0; - } - float size = arrowSize * weight.floatValue(); - targetRadius = -(edgeRadius + (Float) targetItem.getData(NodeItem.SIZE) / 2f + properties.getFloatValue(PreviewProperty.NODE_BORDER_WIDTH)); - item.setData(TARGET_RADIUS, targetRadius - size); - } - if (edgeRadius > 0) { - //Source - Item sourceItem = (Item) item.getData(SOURCE); - float sourceRadius = -(edgeRadius + (Float) sourceItem.getData(NodeItem.SIZE) / 2f + properties.getFloatValue(PreviewProperty.NODE_BORDER_WIDTH)); - item.setData(SOURCE_RADIUS, sourceRadius); - } + final float edgeRadius + = properties.getFloatValue(PreviewProperty.EDGE_RADIUS); + + boolean isDirected = item.getData(EdgeItem.DIRECTED); + + //Target + final Item targetItem = item.getData(TARGET); + final Double weight = item.getData(EdgeItem.WEIGHT); + final float arrowSize = properties.getFloatValue(PreviewProperty.ARROW_SIZE); + final float arrowRadiusSize = isDirected ? arrowSize * weight.floatValue() : 0f; + + final float targetRadius = -(edgeRadius + + SizeUtils.getNodeSize(targetItem, properties) / 2f + + arrowRadiusSize); + item.setData(TARGET_RADIUS, targetRadius); + + //Source + final Item sourceItem = item.getData(SOURCE); + final float sourceRadius = -(edgeRadius + + SizeUtils.getNodeSize(sourceItem, properties) / 2f); + item.setData(SOURCE_RADIUS, sourceRadius); + } else { + // Self-loop: precompute loopRadius matching the GLSL selfloop.vert shader formula: + // loopRadius = scaledNodeSize * 0.5 + strokeWidth * 0.33 + // strokeWidth = thickness * STROKE_MULTIPLIER + final Item sourceItem = item.getData(SOURCE); + final float nodeRadius = SizeUtils.getNodeSize(sourceItem, properties) / 2f; + final float strokeWidth = getThickness(item) * STROKE_MULTIPLIER; + final float loopRadius = nodeRadius * 0.5f + strokeWidth * 0.33f; + item.setData(SOURCE_RADIUS, loopRadius); + item.setData(SELF_LOOP_NODE_RADIUS, nodeRadius); } } } @Override - public void render(Item item, RenderTarget target, PreviewProperties properties) { - //Get nodes - Item sourceItem = item.getData(SOURCE); - Item targetItem = item.getData(TARGET); - - //Weight and color - Double weight = item.getData(EdgeItem.WEIGHT); - EdgeColor edgeColor = (EdgeColor) properties.getValue(PreviewProperty.EDGE_COLOR); - Color color = edgeColor.getColor((Color) item.getData(EdgeItem.COLOR), - (Color) sourceItem.getData(NodeItem.COLOR), - (Color) targetItem.getData(NodeItem.COLOR)); - int alpha = (int) ((properties.getIntValue(PreviewProperty.EDGE_OPACITY) / 100f) * 255f); - color = new Color(color.getRed(), color.getGreen(), color.getBlue(), alpha); - - if (sourceItem == targetItem) { - renderSelfLoop(sourceItem, weight.floatValue(), color, properties, target); + public void render( + Item item, + RenderTarget target, + PreviewProperties properties) { + if (isSelfLoopEdge(item)) { + SELF_LOOP_RENDERER.render(item, target, properties); } else if (properties.getBooleanValue(PreviewProperty.EDGE_CURVED)) { - renderCurvedEdge(item, sourceItem, targetItem, weight.floatValue(), color, properties, target); + CURVED_RENDERER.render(item, target, properties); } else { - renderStraightEdge(item, sourceItem, targetItem, weight.floatValue(), color, properties, target); + STRAIGHT_RENDERER.render(item, target, properties); } } - public void renderSelfLoop(Item nodeItem, float thickness, Color color, PreviewProperties properties, RenderTarget renderTarget) { - Float x = nodeItem.getData(NodeItem.X); - Float y = nodeItem.getData(NodeItem.Y); - Float size = nodeItem.getData(NodeItem.SIZE); - Node node = (Node) nodeItem.getSource(); - - Vector v1 = new Vector(x, y); - v1.add(size, -size); - - Vector v2 = new Vector(x, y); - v2.add(size, size); - - if (renderTarget instanceof G2DTarget) { - Graphics2D graphics = ((G2DTarget) renderTarget).getGraphics(); - - graphics.setStroke(new BasicStroke(thickness)); - graphics.setColor(color); - GeneralPath gp = new GeneralPath(GeneralPath.WIND_NON_ZERO); - gp.moveTo(x, y); - gp.curveTo(v1.x, v1.y, v1.x, v2.y, x, y); - graphics.draw(gp); - - } else if (renderTarget instanceof SVGTarget) { - SVGTarget svgTarget = (SVGTarget) renderTarget; - - Element selfLoopElem = svgTarget.createElement("path"); - selfLoopElem.setAttribute("d", String.format(Locale.ENGLISH, "M %f,%f C %f,%f %f,%f %f,%f", - x, y, v1.x, v1.y, v2.x, v2.y, x, y)); - selfLoopElem.setAttribute("class", node.getId().toString()); - selfLoopElem.setAttribute("stroke", svgTarget.toHexString(color)); - selfLoopElem.setAttribute("stroke-opacity", (color.getAlpha() / 255f) + ""); - selfLoopElem.setAttribute("stroke-width", Float.toString(thickness * svgTarget.getScaleRatio())); - selfLoopElem.setAttribute("fill", "none"); - svgTarget.getTopElement(SVGTarget.TOP_EDGES).appendChild(selfLoopElem); - } else if (renderTarget instanceof PDFTarget) { - PDFTarget pdfTarget = (PDFTarget) renderTarget; - PdfContentByte cb = pdfTarget.getContentByte(); - cb.moveTo(x, -y); - cb.curveTo(v1.x, -v1.y, v2.x, -v2.y, x, -y); - cb.setRGBColorStroke(color.getRed(), color.getGreen(), color.getBlue()); - cb.setLineWidth(thickness); - if (color.getAlpha() < 255) { - cb.saveState(); - float alpha = color.getAlpha() / 255f; - PdfGState gState = new PdfGState(); - gState.setStrokeOpacity(alpha); - cb.setGState(gState); - } - cb.stroke(); - if (color.getAlpha() < 255) { - cb.restoreState(); - } - } - } - - public void renderCurvedEdge(Item edgeItem, Item sourceItem, Item targetItem, float thickness, Color color, PreviewProperties properties, RenderTarget renderTarget) { - Edge edge = (Edge) edgeItem.getSource(); - Float x1 = sourceItem.getData(NodeItem.X); - Float x2 = targetItem.getData(NodeItem.X); - Float y1 = sourceItem.getData(NodeItem.Y); - Float y2 = targetItem.getData(NodeItem.Y); - - //Curved edgs - Vector direction = new Vector(x2, y2); - direction.sub(new Vector(x1, y1)); - float length = direction.mag(); - direction.normalize(); - - float factor = properties.getFloatValue(BEZIER_CURVENESS) * length; - - // normal vector to the edge - Vector n = new Vector(direction.y, -direction.x); - n.mult(factor); - - // first control point - Vector v1 = new Vector(direction.x, direction.y); - v1.mult(factor); - v1.add(new Vector(x1, y1)); - v1.add(n); - - // second control point - Vector v2 = new Vector(direction.x, direction.y); - v2.mult(-factor); - v2.add(new Vector(x2, y2)); - v2.add(n); - - if (renderTarget instanceof G2DTarget) { - Graphics2D graphics = ((G2DTarget) renderTarget).getGraphics(); - - graphics.setStroke(new BasicStroke(thickness)); - graphics.setColor(color); - GeneralPath gp = new GeneralPath(GeneralPath.WIND_NON_ZERO); - gp.moveTo(x1, y1); - gp.curveTo(v1.x, v1.y, v2.x, v2.y, x2, y2); - graphics.draw(gp); - - } else if (renderTarget instanceof SVGTarget) { - SVGTarget svgTarget = (SVGTarget) renderTarget; - Element edgeElem = svgTarget.createElement("path"); - edgeElem.setAttribute("class", edge.getSource().getId() + " " + edge.getTarget().getId()); - edgeElem.setAttribute("d", String.format(Locale.ENGLISH, "M %f,%f C %f,%f %f,%f %f,%f", - x1, y1, v1.x, v1.y, v2.x, v2.y, x2, y2)); - edgeElem.setAttribute("stroke", svgTarget.toHexString(color)); - edgeElem.setAttribute("stroke-width", Float.toString(thickness * svgTarget.getScaleRatio())); - edgeElem.setAttribute("stroke-opacity", (color.getAlpha() / 255f) + ""); - edgeElem.setAttribute("fill", "none"); - svgTarget.getTopElement(SVGTarget.TOP_EDGES).appendChild(edgeElem); - } else if (renderTarget instanceof PDFTarget) { - PDFTarget pdfTarget = (PDFTarget) renderTarget; - PdfContentByte cb = pdfTarget.getContentByte(); - cb.moveTo(x1, -y1); - cb.curveTo(v1.x, -v1.y, v2.x, -v2.y, x2, -y2); - cb.setRGBColorStroke(color.getRed(), color.getGreen(), color.getBlue()); - cb.setLineWidth(thickness); - if (color.getAlpha() < 255) { - cb.saveState(); - float alpha = color.getAlpha() / 255f; - PdfGState gState = new PdfGState(); - gState.setStrokeOpacity(alpha); - cb.setGState(gState); - } - cb.stroke(); - if (color.getAlpha() < 255) { - cb.restoreState(); - } - } + @Override + public void postProcess(PreviewModel previewModel, RenderTarget renderTarget, PreviewProperties properties) { } - public void renderStraightEdge(Item edgeItem, Item sourceItem, Item targetItem, float thickness, Color color, PreviewProperties properties, RenderTarget renderTarget) { - Edge edge = (Edge) edgeItem.getSource(); - Float x1 = sourceItem.getData(NodeItem.X); - Float x2 = targetItem.getData(NodeItem.X); - Float y1 = sourceItem.getData(NodeItem.Y); - Float y2 = targetItem.getData(NodeItem.Y); - - //Target radius - to start at the base of the arrow - Float targetRadius = edgeItem.getData(TARGET_RADIUS); - //Avoid edge from passing the node's center: - if (targetRadius != null && targetRadius < 0) { - Vector direction = new Vector(x2, y2); - direction.sub(new Vector(x1, y1)); - direction.normalize(); - direction = new Vector(direction.x, direction.y); - direction.mult(targetRadius); - direction.add(new Vector(x2, y2)); - x2 = direction.x; - y2 = direction.y; - } - //Source radius - Float sourceRadius = edgeItem.getData(SOURCE_RADIUS); - //Avoid edge from passing the node's center: - if (sourceRadius != null && sourceRadius < 0) { - Vector direction = new Vector(x1, y1); - direction.sub(new Vector(x2, y2)); - direction.normalize(); - direction = new Vector(direction.x, direction.y); - direction.mult(sourceRadius); - direction.add(new Vector(x1, y1)); - x1 = direction.x; - y1 = direction.y; - } - - if (renderTarget instanceof G2DTarget) { - Graphics2D graphics = ((G2DTarget) renderTarget).getGraphics(); - graphics.setStroke(new BasicStroke(thickness, BasicStroke.CAP_SQUARE, BasicStroke.JOIN_MITER)); - graphics.setColor(color); - Line2D.Float line = new Line2D.Float(x1, y1, x2, y2); - graphics.draw(line); - } else if (renderTarget instanceof SVGTarget) { - SVGTarget svgTarget = (SVGTarget) renderTarget; - Element edgeElem = svgTarget.createElement("path"); - edgeElem.setAttribute("class", edge.getSource().getId() + " " + edge.getTarget().getId()); - edgeElem.setAttribute("d", String.format(Locale.ENGLISH, "M %f,%f L %f,%f", - x1, y1, x2, y2)); - edgeElem.setAttribute("stroke", svgTarget.toHexString(color)); - DecimalFormat df = new DecimalFormat("#.########"); - edgeElem.setAttribute("stroke-width", df.format(thickness * svgTarget.getScaleRatio())); - edgeElem.setAttribute("stroke-opacity", (color.getAlpha() / 255f) + ""); - edgeElem.setAttribute("fill", "none"); - svgTarget.getTopElement(SVGTarget.TOP_EDGES).appendChild(edgeElem); - } else if (renderTarget instanceof PDFTarget) { - PDFTarget pdfTarget = (PDFTarget) renderTarget; - PdfContentByte cb = pdfTarget.getContentByte(); - cb.moveTo(x1, -y1); - cb.lineTo(x2, -y2); - cb.setRGBColorStroke(color.getRed(), color.getGreen(), color.getBlue()); - cb.setLineWidth(thickness); - if (color.getAlpha() < 255) { - cb.saveState(); - float alpha = color.getAlpha() / 255f; - PdfGState gState = new PdfGState(); - gState.setStrokeOpacity(alpha); - cb.setGState(gState); - } - cb.stroke(); - if (color.getAlpha() < 255) { - cb.restoreState(); - } + @Override + public CanvasSize getCanvasSize(Item item, PreviewProperties properties) { + if (isSelfLoopEdge(item)) { + return SELF_LOOP_RENDERER.getCanvasSize(item, properties); + } else if (properties.getBooleanValue(PreviewProperty.EDGE_CURVED)) { + return CURVED_RENDERER.getCanvasSize(item, properties); + } else { + return STRAIGHT_RENDERER.getCanvasSize(item, properties); } } @Override public PreviewProperty[] getProperties() { - return new PreviewProperty[]{ + return new PreviewProperty[] { PreviewProperty.createProperty(this, PreviewProperty.SHOW_EDGES, Boolean.class, - NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.display.displayName"), - NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.display.description"), - PreviewProperty.CATEGORY_EDGES).setValue(defaultShowEdges), + NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.display.displayName"), + NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.display.description"), + PreviewProperty.CATEGORY_EDGES).setValue(defaultShowEdges), PreviewProperty.createProperty(this, PreviewProperty.EDGE_THICKNESS, Float.class, - NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.thickness.displayName"), - NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.thickness.description"), - PreviewProperty.CATEGORY_EDGES, PreviewProperty.SHOW_EDGES).setValue(defaultThickness), + NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.thickness.displayName"), + NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.thickness.description"), + PreviewProperty.CATEGORY_EDGES, PreviewProperty.SHOW_EDGES).setMinMax(0f, null).setValue( + defaultThickness), + PreviewProperty.createProperty(this, PreviewProperty.EDGE_USE_WEIGHT, Boolean.class, + NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.useWeight.displayName"), + NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.useWeight.description"), + PreviewProperty.CATEGORY_EDGES, PreviewProperty.SHOW_EDGES).setValue(defaultUseWeight), PreviewProperty.createProperty(this, PreviewProperty.EDGE_RESCALE_WEIGHT, Boolean.class, - NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.rescaleWeight.displayName"), - NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.rescaleWeight.description"), - PreviewProperty.CATEGORY_EDGES, PreviewProperty.SHOW_EDGES).setValue(defaultRescaleWeight), + NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.rescaleWeight.displayName"), + NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.rescaleWeight.description"), + PreviewProperty.CATEGORY_EDGES, PreviewProperty.SHOW_EDGES, PreviewProperty.EDGE_USE_WEIGHT).setValue( + defaultRescaleWeight), + PreviewProperty.createProperty(this, PreviewProperty.EDGE_RESCALE_WEIGHT_MIN, Float.class, + NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.rescaleWeight.min.displayName"), + NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.rescaleWeight.min.description"), + PreviewProperty.CATEGORY_EDGES, PreviewProperty.SHOW_EDGES, PreviewProperty.EDGE_RESCALE_WEIGHT, + PreviewProperty.EDGE_USE_WEIGHT).setMinMax(0f, null).setValue(defaultRescaleWeightMin), + PreviewProperty.createProperty(this, PreviewProperty.EDGE_RESCALE_WEIGHT_MAX, Float.class, + NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.rescaleWeight.max.displayName"), + NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.rescaleWeight.max.description"), + PreviewProperty.CATEGORY_EDGES, PreviewProperty.SHOW_EDGES, PreviewProperty.EDGE_RESCALE_WEIGHT, + PreviewProperty.EDGE_USE_WEIGHT).setMinMax(0f, null).setValue(defaultRescaleWeightMax), PreviewProperty.createProperty(this, PreviewProperty.EDGE_COLOR, EdgeColor.class, - NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.color.displayName"), - NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.color.description"), - PreviewProperty.CATEGORY_EDGES, PreviewProperty.SHOW_EDGES).setValue(defaultColor), + NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.color.displayName"), + NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.color.description"), + PreviewProperty.CATEGORY_EDGES, PreviewProperty.SHOW_EDGES).setValue(defaultColor), PreviewProperty.createProperty(this, PreviewProperty.EDGE_OPACITY, Float.class, - NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.opacity.displayName"), - NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.opacity.description"), - PreviewProperty.CATEGORY_EDGES, PreviewProperty.SHOW_EDGES).setValue(defaultOpacity), + NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.opacity.displayName"), + NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.opacity.description"), + PreviewProperty.CATEGORY_EDGES, PreviewProperty.SHOW_EDGES).setMinMax(0f, 100f).setValue( + defaultOpacity), PreviewProperty.createProperty(this, PreviewProperty.EDGE_CURVED, Boolean.class, - NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.curvedEdges.displayName"), - NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.curvedEdges.description"), - PreviewProperty.CATEGORY_EDGES, PreviewProperty.SHOW_EDGES).setValue(defaultEdgeCurved), + NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.curvedEdges.displayName"), + NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.curvedEdges.description"), + PreviewProperty.CATEGORY_EDGES, PreviewProperty.SHOW_EDGES).setValue(defaultEdgeCurved), PreviewProperty.createProperty(this, PreviewProperty.EDGE_RADIUS, Float.class, - NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.radius.displayName"), - NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.radius.description"), - PreviewProperty.CATEGORY_EDGES, PreviewProperty.SHOW_EDGES).setValue(defaultRadius),}; - } - - private boolean showEdges(PreviewProperties properties) { - return properties.getBooleanValue(PreviewProperty.SHOW_EDGES) - && !properties.getBooleanValue(PreviewProperty.MOVING); + NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.radius.displayName"), + NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.property.radius.description"), + PreviewProperty.CATEGORY_EDGES, PreviewProperty.SHOW_EDGES).setMinMax(0f, null).setValue( + defaultRadius),}; } @Override @@ -442,11 +369,646 @@ public boolean isRendererForitem(Item item, PreviewProperties properties) { @Override public boolean needsItemBuilder(ItemBuilder itemBuilder, PreviewProperties properties) { - return (itemBuilder instanceof EdgeBuilder || itemBuilder instanceof NodeBuilder) && showEdges(properties);//Needs some properties of nodes + return (itemBuilder instanceof EdgeBuilder + || itemBuilder instanceof NodeBuilder) + && showEdges(properties);//Needs some properties of nodes } @Override public String getDisplayName() { return NbBundle.getMessage(EdgeRenderer.class, "EdgeRenderer.name"); } + + private boolean showEdges(PreviewProperties properties) { + return properties.getBooleanValue(PreviewProperty.SHOW_EDGES) + && !properties.getBooleanValue(PreviewProperty.MOVING); + } + + private static class StraightEdgeRenderer { + + public void render( + final Item item, + final RenderTarget target, + final PreviewProperties properties) { + final Helper h = new Helper(item); + final Color color = getColor(item, properties); + + if (target instanceof G2DTarget) { + final Graphics2D graphics = ((G2DTarget) target).getGraphics(); + graphics.setStroke(new BasicStroke( + getThickness(item), + BasicStroke.CAP_BUTT, + BasicStroke.JOIN_MITER)); + graphics.setColor(color); + final Line2D.Float line + = new Line2D.Float(h.x1, h.y1, h.x2, h.y2); + graphics.draw(line); + } else if (target instanceof SVGTarget) { + final SVGTarget svgTarget = (SVGTarget) target; + final Element edgeElem = svgTarget.createElement("path"); + edgeElem.setAttribute("class", String.format( + "%s %s", + SVGUtils.idAsClassAttribute(((Node) h.sourceItem.getSource()).getId()), + SVGUtils.idAsClassAttribute(((Node) h.targetItem.getSource()).getId()) + )); + edgeElem.setAttribute("d", String.format( + Locale.ENGLISH, + "M %f,%f L %f,%f", + h.x1, h.y1, h.x2, h.y2)); + edgeElem.setAttribute("stroke", svgTarget.toHexString(color)); + edgeElem.setAttribute( + "stroke-width", + Float.toString(getThickness(item) + * svgTarget.getScaleRatio())); + edgeElem.setAttribute( + "stroke-opacity", + (color.getAlpha() / 255f) + ""); + edgeElem.setAttribute("fill", "none"); + svgTarget.getTopElement(SVGTarget.TOP_EDGES) + .appendChild(edgeElem); + } else if (target instanceof PDFTarget) { + final PDFTarget pdfTarget = (PDFTarget) target; + final PDPageContentStream cb = pdfTarget.getContentStream(); + try { + cb.moveTo(h.x1, -h.y1); + cb.lineTo(h.x2, -h.y2); + cb.setStrokingColor(color); + cb.setLineWidth(getThickness(item)); + if (color.getAlpha() < 255) { + PDExtendedGraphicsState graphicsState = new PDExtendedGraphicsState(); + graphicsState.setStrokingAlphaConstant(color.getAlpha() / 255f); + cb.saveGraphicsState(); + cb.setGraphicsStateParameters(graphicsState); + } + cb.stroke(); + if (color.getAlpha() < 255) { + cb.restoreGraphicsState(); + } + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + } + + public CanvasSize getCanvasSize( + final Item item, + final PreviewProperties properties) { + final Item sourceItem = item.getData(SOURCE); + final Item targetItem = item.getData(TARGET); + final Float x1 = sourceItem.getData(NodeItem.X); + final Float x2 = targetItem.getData(NodeItem.X); + final Float y1 = sourceItem.getData(NodeItem.Y); + final Float y2 = targetItem.getData(NodeItem.Y); + final float minX = Math.min(x1, x2); + final float minY = Math.min(y1, y2); + final float maxX = Math.max(x1, x2); + final float maxY = Math.max(y1, y2); + return new CanvasSize(minX, minY, maxX - minX, maxY - minY); + } + + private static class Helper { + + public final Item sourceItem; + public final Item targetItem; + public final Float x1; + public final Float x2; + public final Float y1; + public final Float y2; + + public Helper(final Item item) { + sourceItem = item.getData(SOURCE); + targetItem = item.getData(TARGET); + + Float _x1 = sourceItem.getData(NodeItem.X); + Float _x2 = targetItem.getData(NodeItem.X); + Float _y1 = sourceItem.getData(NodeItem.Y); + Float _y2 = targetItem.getData(NodeItem.Y); + + //Target radius - to start at the base of the arrow + final Float targetRadius = item.getData(TARGET_RADIUS); + //Avoid edge from passing the node's center: + if (targetRadius != null && targetRadius < 0) { + Vector direction = new Vector(_x2, _y2); + direction.sub(new Vector(_x1, _y1)); + // Guard: skip offset when nodes overlap to avoid NaN from normalize() + if (direction.mag() > 0) { + direction.normalize(); + direction.mult(targetRadius); + direction.add(new Vector(_x2, _y2)); + _x2 = direction.x; + _y2 = direction.y; + } + } + + //Source radius + final Float sourceRadius = item.getData(SOURCE_RADIUS); + //Avoid edge from passing the node's center: + if (sourceRadius != null && sourceRadius < 0) { + Vector direction = new Vector(_x1, _y1); + direction.sub(new Vector(_x2, _y2)); + // Guard: skip offset when nodes overlap to avoid NaN from normalize() + if (direction.mag() > 0) { + direction.normalize(); + direction.mult(sourceRadius); + direction.add(new Vector(_x1, _y1)); + _x1 = direction.x; + _y1 = direction.y; + } + } + + x1 = _x1; + y1 = _y1; + x2 = _x2; + y2 = _y2; + } + } + } + + private static class CurvedEdgeRenderer { + + public void render( + final Item item, + final RenderTarget target, + final PreviewProperties properties) { + final Helper h = new Helper(item, properties); + final Color color = getColor(item, properties); + + // Do not draw the edge if negative length + if (h.asweep == 0) { + return; + } + + if (target instanceof G2DTarget) { + final Graphics2D graphics = ((G2DTarget) target).getGraphics(); + graphics.setStroke(new BasicStroke( + getThickness(item), + BasicStroke.CAP_ROUND, + BasicStroke.JOIN_MITER)); + graphics.setColor(color); + // Arc + graphics.draw(new Arc2D.Double(h.bbx, h.bby, h.bbw, h.bbh, h.astart, h.asweep, Arc2D.OPEN)); + } else if (target instanceof SVGTarget) { + final SVGTarget svgTarget = (SVGTarget) target; + final Element edgeElem = svgTarget.createElement("path"); + edgeElem.setAttribute("class", String.format( + "%s %s", + SVGUtils.idAsClassAttribute(((Node) h.sourceItem.getSource()).getId()), + SVGUtils.idAsClassAttribute(((Node) h.targetItem.getSource()).getId()) + )); + // Elliptical arc + String path = String.format( + Locale.ENGLISH, + "M %f,%f A %f,%f %d,%d %d,%f,%f", + h.x1WithRadius, h.y1WithRadius, + h.r, h.r, 0, 0, 1, h.x2WithRadius, h.y2WithRadius); + edgeElem.setAttribute("d", path); + edgeElem.setAttribute("stroke", svgTarget.toHexString(color)); + edgeElem.setAttribute( + "stroke-width", + Float.toString(getThickness(item) + * svgTarget.getScaleRatio())); + edgeElem.setAttribute("stroke-linecap", "round"); + edgeElem.setAttribute( + "stroke-opacity", + (color.getAlpha() / 255f) + ""); + edgeElem.setAttribute("fill", "none"); + svgTarget.getTopElement(SVGTarget.TOP_EDGES) + .appendChild(edgeElem); + } else if (target instanceof PDFTarget) { + final PDFTarget pdfTarget = (PDFTarget) target; + final PDPageContentStream cb = pdfTarget.getContentStream(); + try { + PDFUtils.drawArc(cb, (float) h.bbx, (float) -h.bby, (float) (h.bbx + h.bbw), + (float) -(h.bby + h.bbh), (float) h.astart, (float) h.asweep); + cb.setStrokingColor(color); + cb.setLineWidth(getThickness(item)); + cb.setLineJoinStyle(1); //round + cb.setLineCapStyle(1); //round + if (color.getAlpha() < 255) { + PDExtendedGraphicsState graphicsState = new PDExtendedGraphicsState(); + graphicsState.setStrokingAlphaConstant(color.getAlpha() / 255f); + cb.saveGraphicsState(); + cb.setGraphicsStateParameters(graphicsState); + } + cb.stroke(); + if (color.getAlpha() < 255) { + cb.restoreGraphicsState(); + } + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + } + + public CanvasSize getCanvasSize( + final Item item, + final PreviewProperties properties + ) { + final Helper h = new Helper(item, properties); + if (h.asweep == 0) { + // Edge not rendered (too short/swallowed by nodes); fall back to endpoint bbox + final float minX = Math.min(h.x1, h.x2); + final float minY = Math.min(h.y1, h.y2); + return new CanvasSize(minX, minY, Math.abs(h.x2 - h.x1), Math.abs(h.y2 - h.y1)); + } + // The arc can bow significantly beyond its endpoints (e.g. for near-vertical edges). + // Use Arc2D.getBounds2D() which computes the exact tight bounding box of the arc, + // accounting for any cardinal-angle extrema the sweep passes through. + final Rectangle2D bounds = new Arc2D.Double( + h.bbx, h.bby, h.bbw, h.bbh, h.astart, h.asweep, Arc2D.OPEN).getBounds2D(); + return new CanvasSize( + (float) bounds.getX(), (float) bounds.getY(), + (float) bounds.getWidth(), (float) bounds.getHeight()); + } + + private static class Helper { + + public final Item sourceItem; + public final Item targetItem; + public final Float x1; + public final Float x2; + public final Float y1; + public final Float y2; + public final double r; + public final double bbx; + public final double bby; + public final double bbw; + public final double bbh; + public final double astart; + public final double asweep; + public final Float x1WithRadius; + public final Float x2WithRadius; + public final Float y1WithRadius; + public final Float y2WithRadius; + + public Helper( + final Item item, + final PreviewProperties properties) { + sourceItem = item.getData(SOURCE); + targetItem = item.getData(TARGET); + + x1 = sourceItem.getData(NodeItem.X); + x2 = targetItem.getData(NodeItem.X); + y1 = sourceItem.getData(NodeItem.Y); + y2 = targetItem.getData(NodeItem.Y); + + final Vector direction = new Vector(x2, y2); + direction.sub(new Vector(x1, y1)); + + final float length = direction.mag(); + + direction.normalize(); + + // Arc radius + r = length / properties.getDoubleValue(ARC_CURVENESS); + + // Arc bounding box (for Graphics2D) + // Formulas from https://math.stackexchange.com/questions/1781438/finding-the-center-of-a-circle-given-two-points-and-a-radius-algebraically + double _xa = 0.5 * (x1 - x2); + double _ya = 0.5 * (y1 - y2); + double _x0 = x2 + _xa; + double _y0 = y2 + _ya; + double _a = Math.sqrt(Math.pow(_xa, 2) + Math.pow(_ya, 2)); + double _b = 0.; + if (_a < r) { + // Note: geometrically, _a <= r is granted. + // But in practice, we can have _a very close to r + // and numerical approximations may produce _a > r. + // This just corresponds to _b=0, but it would give a NaN. + // This is why we have to do the check. + _b = Math.sqrt(Math.pow(r, 2) - Math.pow(_a, 2)); + } + double xc = _x0 + (_b * _ya) / _a; + double yc = _y0 - (_b * _xa / _a); + double angle1 = Math.atan2(y1 - yc, x1 - xc); + double angle2 = Math.atan2(y2 - yc, x2 - xc); + + while (angle2 < angle1) { + angle2 += 2 * Math.PI; + } + double arcAngle = Math.abs(angle2 - angle1); + while (arcAngle >= Math.PI) { + arcAngle -= Math.PI; + } + + // Target radius - to start at the base of the arrow + final Float targetRadius = item.getData(TARGET_RADIUS); + // Note: calling this a "radius" may be confusing. + // Clarification: + // This is about offsetting the arc at the end, using the + // node radius + the arrow size. It is a radius in the same + // sense as "node radius". It's not the radius of the edge curve. + // The same goes for sourceRadius below. + + // Offset due to the target node radius + if (targetRadius != null && targetRadius < 0) { + Double targetOffset = this.computeTruncateAngle(r, (double) targetRadius, (double) arcAngle); + angle2 += targetOffset; + + x2WithRadius = (float) (r * Math.cos(angle2) + xc); + y2WithRadius = (float) (r * Math.sin(angle2) + yc); + } else { + x2WithRadius = x2; + y2WithRadius = y2; + } + + // Source radius + final Float sourceRadius = item.getData(SOURCE_RADIUS); + // Avoid edge from passing the node's center: + if (sourceRadius != null && sourceRadius < 0) { + Double sourceOffset = this.computeTruncateAngle(r, (double) sourceRadius, (double) arcAngle); + angle1 -= sourceOffset; + + x1WithRadius = (float) (r * Math.cos(angle1) + xc); + y1WithRadius = (float) (r * Math.sin(angle1) + yc); + } else { + x1WithRadius = x1; + y1WithRadius = y1; + } + + bbx = xc - r; + bby = yc - r; + bbw = 2 * r; + bbh = 2 * r; + astart = -180 * (angle1) / Math.PI; + if (0. <= angle1 - angle2 || length == 0) { + // This case corresponds to a negative length of the edge. + // It may happen because the arrow or the nodes are too big and "swallow" the edge. + // In that case we do not trace the edge (null length). + // length is 0 when nodes occupy the same position. + asweep = 0.; + } else { + asweep = (180 * (angle1 - angle2) / Math.PI + 720) % 360 - 360; + } + } + + private Double computeTruncateAngle(Double radius_curvature_edge, Double truncature_length, + Double arc_angle) { + // The edge is an arc of a circle. + // We want to truncate that arc so that truncated part has a chord of a given length. + // i.e. not the length along the arc, but as a straight segment (like the string of a bow) + // We give back the result as an angle, as it's how it's useful to us. + Double rt = truncature_length; + Double r = radius_curvature_edge; + Double s = r * arc_angle; + if (s <= -rt) { + // Can't truncate more than the arc length + // Return a large value so later on we know the + // edge shouldn't get drawn. + return -arc_angle - 20; + } + // If you take a sector from a circle with radius r, and chord length |rt|, + // x is the length bisecting the two radii. + double x = Math.sqrt(Math.pow(r, 2) - Math.pow(rt / 2, 2)); + return 2 * Math.atan2(rt / 2, x); + } + } + } + + private static class SelfLoopEdgeRenderer { + + // Bezier kappa constant for approximating a circle with 4 cubic segments + public void render( + final Item item, + final RenderTarget target, + final PreviewProperties properties) { + final Helper h = new Helper(item); + final Color color = getColor(item, properties); + + if (target instanceof G2DTarget) { + final Graphics2D graphics = ((G2DTarget) target).getGraphics(); + graphics.setStroke(new BasicStroke( + h.strokeWidth, + BasicStroke.CAP_ROUND, + BasicStroke.JOIN_ROUND)); + graphics.setColor(color); + if (h.fullCircle) { + graphics.draw(new Ellipse2D.Float( + h.cx - h.loopRadius, h.cy - h.loopRadius, + 2 * h.loopRadius, 2 * h.loopRadius)); + } else { + // Partial arc: endpoints touch the node circle. + // CAP_ROUND extends the stroke by strokeWidth/2 beyond each endpoint, + // visually hiding the gap between the arc and the node. + // arcExtent is negative = CW on screen (outer arc, away from node). + graphics.draw(new Arc2D.Float( + h.cx - h.loopRadius, h.cy - h.loopRadius, + 2 * h.loopRadius, 2 * h.loopRadius, + h.arcStart, h.arcExtent, Arc2D.OPEN)); + } + } else if (target instanceof SVGTarget) { + final SVGTarget svgTarget = (SVGTarget) target; + final Element selfLoopElem; + + if (h.fullCircle) { + selfLoopElem = svgTarget.createElement("circle"); + selfLoopElem.setAttribute("cx", String.format(Locale.ENGLISH, "%f", h.cx)); + selfLoopElem.setAttribute("cy", String.format(Locale.ENGLISH, "%f", h.cy)); + selfLoopElem.setAttribute("r", String.format(Locale.ENGLISH, "%f", h.loopRadius)); + } else { + // SVG arc: M startPoint A rx,ry 0 largeArcFlag,sweep endPoint + // sweep=1 = CW in SVG (y+ down) = CW on screen = outer arc direction. + // stroke-linecap="round" visually bridges the gap into the node, + // matching G2D's CAP_ROUND behaviour. + selfLoopElem = svgTarget.createElement("path"); + selfLoopElem.setAttribute("d", String.format(Locale.ENGLISH, + "M %f,%f A %f,%f 0 %d,1 %f,%f", + h.svgSx, h.svgSy, + h.loopRadius, h.loopRadius, + h.svgLargeArcFlag, + h.svgEx, h.svgEy)); + selfLoopElem.setAttribute("stroke-linecap", "round"); + } + selfLoopElem.setAttribute("class", SVGUtils.idAsClassAttribute(h.node.getId())); + selfLoopElem.setAttribute("stroke", svgTarget.toHexString(color)); + selfLoopElem.setAttribute("stroke-opacity", (color.getAlpha() / 255f) + ""); + selfLoopElem.setAttribute("stroke-width", + Float.toString(h.strokeWidth * svgTarget.getScaleRatio())); + selfLoopElem.setAttribute("fill", "none"); + svgTarget.getTopElement(SVGTarget.TOP_EDGES).appendChild(selfLoopElem); + } else if (target instanceof PDFTarget) { + final PDFTarget pdfTarget = (PDFTarget) target; + final PDPageContentStream cb = pdfTarget.getContentStream(); + try { + // PDF uses y+ up, so negate y relative to Preview/G2D coordinates. + final float pdfCx = h.cx; + final float pdfCy = -h.cy; + final float r = h.loopRadius; + + if (h.fullCircle) { + // Full circle: 4-segment bezier approximation (kappa = 0.5523) + final float k = 0.5523f * r; + cb.moveTo(pdfCx + r, pdfCy); + cb.curveTo(pdfCx + r, pdfCy + k, pdfCx + k, pdfCy + r, pdfCx, pdfCy + r); + cb.curveTo(pdfCx - k, pdfCy + r, pdfCx - r, pdfCy + k, pdfCx - r, pdfCy); + cb.curveTo(pdfCx - r, pdfCy - k, pdfCx - k, pdfCy - r, pdfCx, pdfCy - r); + cb.curveTo(pdfCx + k, pdfCy - r, pdfCx + r, pdfCy - k, pdfCx + r, pdfCy); + cb.closePath(); + } else { + // Partial arc: arc endpoints are already extended into the node (capExt + // baked into pdfArcAlpha/pdfArcBeta in Helper), so round caps are hidden. + cb.moveTo(pdfCx + r * (float) Math.cos(h.pdfArcAlpha), + pdfCy + r * (float) Math.sin(h.pdfArcAlpha)); + appendCWArcPDF(cb, pdfCx, pdfCy, r, h.pdfArcAlpha, h.pdfArcBeta); + } + + cb.setStrokingColor(color); + cb.setLineWidth(h.strokeWidth); + cb.setLineJoinStyle(1); // round + cb.setLineCapStyle(1); // round + if (color.getAlpha() < 255) { + PDExtendedGraphicsState graphicsState = new PDExtendedGraphicsState(); + graphicsState.setStrokingAlphaConstant(color.getAlpha() / 255f); + cb.saveGraphicsState(); + cb.setGraphicsStateParameters(graphicsState); + } + cb.stroke(); + if (color.getAlpha() < 255) { + cb.restoreGraphicsState(); + } + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } + } + + /** + * Appends a clockwise arc in PDF coordinate space (y+ up) using cubic bezier approximation. + * Splits into ≀90Β° segments for accuracy. + * CW direction = decreasing angle, so {@code startAngle > endAngle}. + */ + private static void appendCWArcPDF(final PDPageContentStream cb, + final float cx, final float cy, final float r, + final float startAngle, final float endAngle) + throws IOException { + final float span = startAngle - endAngle; // positive for CW + final int nSegments = Math.max(1, (int) Math.ceil(span / (Math.PI / 2))); + final float segSpan = span / nSegments; + + float angle = startAngle; + for (int i = 0; i < nSegments; i++) { + final float next = angle - segSpan; + final float k = (4f / 3f) * (float) Math.tan(segSpan / 4f); + final float cosA = (float) Math.cos(angle), sinA = (float) Math.sin(angle); + final float cosB = (float) Math.cos(next), sinB = (float) Math.sin(next); + // CW tangent at angle a: (sin a, βˆ’cos a); at b: (sin b, βˆ’cos b) + cb.curveTo( + cx + r * (cosA + k * sinA), cy + r * (sinA - k * cosA), + cx + r * (cosB - k * sinB), cy + r * (sinB + k * cosB), + cx + r * cosB, cy + r * sinB); + angle = next; + } + } + + public CanvasSize getCanvasSize( + final Item item, + final PreviewProperties properties) { + final Helper h = new Helper(item); + final float halfStroke = h.strokeWidth / 2f; + final float extent = h.loopRadius + halfStroke; + return new CanvasSize(h.cx - extent, h.cy - extent, 2 * extent, 2 * extent); + } + + private static class Helper { + + public final float x; + public final float y; + public final Node node; + // Loop circle center in Preview/G2D coordinates (y+ down): + // placed upper-right of node to match VisualizationEngine's selfloop shader + public final float cx; + public final float cy; + public final float loopRadius; + public final float strokeWidth; + + // true when the loop and node circles don't intersect: fall back to full circle + public final boolean fullCircle; + // G2D Arc2D parameters (valid when !fullCircle): + // arcExtent is negative = CW on screen = outer arc (away from node) + public final float arcStart; + public final float arcExtent; + // SVG arc: start/end points on loop circle, and large-arc flag + public final float svgSx, svgSy; + public final float svgEx, svgEy; + public final int svgLargeArcFlag; // 0 if arc < 180Β°, 1 if >= 180Β° + // PDF arc angles in PDF y+ up convention; CW = decreasing, pdfArcAlpha > pdfArcBeta + public final float pdfArcAlpha; + public final float pdfArcBeta; + + public Helper(final Item item) { + node = ((Edge) item.getSource()).getSource(); + + final Item nodeSource = item.getData(SOURCE); + x = nodeSource.getData(NodeItem.X); + y = nodeSource.getData(NodeItem.Y); + // loopRadius was precomputed in preProcess (shader formula): + // loopRadius = nodeRadius * 0.5 + strokeWidth * 0.33 + loopRadius = item.getData(SOURCE_RADIUS); + strokeWidth = getThickness(item) * STROKE_MULTIPLIER; + // Circle center: upper-right in screen space. + // In Preview (y+ down), "up" = negative y direction. + cx = x + loopRadius; + cy = y - loopRadius; + + // ── Compute intersection of the loop circle with the node circle ────────────── + // + // A point on the loop circle at angle ΞΈ (G2D atan2, y+ down): + // P = (cx + RΒ·cos ΞΈ, cy + RΒ·sin ΞΈ) + // = (nx + RΒ·(1 + cos ΞΈ), ny βˆ’ RΒ·(1 βˆ’ sin ΞΈ)) + // + // Substituting into XΒ² + YΒ² = nodeRadiusΒ² and simplifying: + // cos ΞΈ βˆ’ sin ΞΈ = C, C = (nodeRadiusΒ² βˆ’ 3Β·RΒ²) / (2Β·RΒ²) + // + // Identity: cos ΞΈ βˆ’ sin ΞΈ = √2Β·cos(ΞΈ + Ο€/4) + // ⟹ ΞΈ = βˆ’Ο€/4 Β± arccos(C / √2) + // + // Outer arc (away from node): ΞΈβ‚‚ β†’ θ₁ clockwise on screen, + // spanning 2Β·arccos(C/√2) degrees. + final Float nodeRadiusData = item.getData(SELF_LOOP_NODE_RADIUS); + final float nodeRadius = nodeRadiusData != null ? nodeRadiusData : loopRadius; + final float R = loopRadius; + + final float C = (nodeRadius * nodeRadius - 3 * R * R) / (2 * R * R); + final float cosArg = C / (float) Math.sqrt(2); + + if (Math.abs(cosArg) > 1f) { + // No intersection: fall back to full circle + fullCircle = true; + arcStart = arcExtent = 0; + svgSx = svgSy = svgEx = svgEy = 0; + svgLargeArcFlag = 0; + pdfArcAlpha = pdfArcBeta = 0; + } else { + fullCircle = false; + final float alpha = (float) Math.acos(cosArg); + final float theta1 = (float) (-Math.PI / 4) + alpha; // arc end (lower-right) + final float theta2 = (float) (-Math.PI / 4) - alpha; // arc start (upper-left) + + // Extend arc endpoints slightly into the node so that the round stroke caps + // are fully hidden behind the node boundary in all renderers (G2D, SVG, PDF). + // arcsin(strokeWidth/2 / R) is the angle whose chord equals the stroke half-width. + final float capExt = (float) Math.asin(Math.min(1f, strokeWidth / (2 * R))); + final float extTheta1 = theta1 + capExt; // extend arc end further CW + final float extTheta2 = theta2 - capExt; // extend arc start further CCW + + // G2D Arc2D: negate atan2 angle β†’ Arc2D convention (y+ up math). + // Negative extent = CW on screen. + arcStart = -(float) Math.toDegrees(extTheta2); + arcExtent = -(float) Math.toDegrees(extTheta1 - extTheta2); + + // SVG arc endpoints (using extended angles) + svgSx = cx + R * (float) Math.cos(extTheta2); + svgSy = cy + R * (float) Math.sin(extTheta2); + svgEx = cx + R * (float) Math.cos(extTheta1); + svgEy = cy + R * (float) Math.sin(extTheta1); + svgLargeArcFlag = (extTheta1 - extTheta2 >= Math.PI) ? 1 : 0; + + // PDF: y-flip maps G2D atan2 angle ΞΈ β†’ PDF angle βˆ’ΞΈ. + // CW in PDF = decreasing angle β†’ pdfArcAlpha > pdfArcBeta. + pdfArcAlpha = -extTheta2; // start (larger angle) + pdfArcBeta = -extTheta1; // end (smaller angle) + } + } + } + } } diff --git a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/NodeLabelRenderer.java b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/NodeLabelRenderer.java index 9fff6992eb..75fb3aa0f3 100644 --- a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/NodeLabelRenderer.java +++ b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/NodeLabelRenderer.java @@ -39,19 +39,37 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.plugin.renderers; -import com.itextpdf.text.pdf.BaseFont; -import com.itextpdf.text.pdf.PdfContentByte; -import com.itextpdf.text.pdf.PdfGState; -import java.awt.*; +import java.awt.BasicStroke; +import java.awt.Color; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Graphics2D; +import java.awt.Shape; import java.awt.font.FontRenderContext; import java.awt.font.GlyphVector; +import java.awt.geom.AffineTransform; import java.awt.geom.Rectangle2D; +import java.io.IOException; +import java.util.Arrays; import java.util.HashMap; import java.util.Map; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState; +import org.apache.pdfbox.pdmodel.graphics.state.RenderingMode; import org.gephi.graph.api.Node; -import org.gephi.preview.api.*; +import org.gephi.preview.api.CanvasSize; +import org.gephi.preview.api.G2DTarget; +import org.gephi.preview.api.Item; +import org.gephi.preview.api.PDFTarget; +import org.gephi.preview.api.PreviewModel; +import org.gephi.preview.api.PreviewProperties; +import org.gephi.preview.api.PreviewProperty; +import org.gephi.preview.api.RenderTarget; +import org.gephi.preview.api.SVGTarget; import org.gephi.preview.plugin.builders.NodeBuilder; import org.gephi.preview.plugin.builders.NodeLabelBuilder; import org.gephi.preview.plugin.items.NodeItem; @@ -60,15 +78,13 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.preview.spi.Renderer; import org.gephi.preview.types.DependantColor; import org.gephi.preview.types.DependantOriginalColor; +import org.gephi.visualization.api.VisualizationModel; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; import org.w3c.dom.Element; import org.w3c.dom.Text; -import org.w3c.dom.svg.SVGLocatable; -import org.w3c.dom.svg.SVGRect; /** - * * @author Yudi Xue, Mathieu Bastian */ @ServiceProvider(service = Renderer.class, position = 400) @@ -80,11 +96,15 @@ public class NodeLabelRenderer implements Renderer { public static final String NODE_X = "node.x"; public static final String NODE_Y = "node.y"; public static final String FONT_SIZE = "node.label.fontSize"; + public static final String FONT_SIZE_FLOAT = "node.label.fontSizeFloat"; + public static final String HIDDEN = "node.label.hidden"; //Default values - protected final boolean defaultShowLabels = true; + protected final boolean defaultShowLabels = false; + protected final boolean defaultCustomFont = false; protected final Font defaultFont = new Font("Arial", Font.PLAIN, 12); protected final boolean defaultShorten = false; - protected final DependantOriginalColor defaultColor = new DependantOriginalColor(DependantOriginalColor.Mode.ORIGINAL); + protected final DependantOriginalColor defaultColor = + new DependantOriginalColor(DependantOriginalColor.Mode.ORIGINAL); protected final int defaultMaxChar = 30; protected final boolean defaultProportinalSize = true; protected final float defaultOutlineSize = 4; @@ -93,16 +113,19 @@ public class NodeLabelRenderer implements Renderer { protected final boolean defaultShowBox = false; protected final DependantColor defaultBoxColor = new DependantColor(DependantColor.Mode.PARENT); protected final int defaultBoxOpacity = 100; + protected final boolean defaultAvoidOverlap = true; + protected final int defaultOverlapGridSize = 10; //Font cache - protected Map fontCache; + protected final Map fontCache = new HashMap<>(); + protected final FontRenderContext frc = new FontRenderContext(new AffineTransform(), true, true); @Override public void preProcess(PreviewModel previewModel) { + final Item[] nodeLabelsItems = previewModel.getItems(Item.NODE_LABEL); + PreviewProperties properties = previewModel.getProperties(); if (properties.getBooleanValue(PreviewProperty.NODE_LABEL_SHORTEN)) { //Shorten labels - Item[] nodeLabelsItems = previewModel.getItems(Item.NODE_LABEL); - int maxChars = properties.getIntValue(PreviewProperty.NODE_LABEL_MAX_CHAR); for (Item item : nodeLabelsItems) { String label = item.getData(NodeLabelItem.LABEL); @@ -114,36 +137,175 @@ public void preProcess(PreviewModel previewModel) { } //Put parent color, size and position - for (Item item : previewModel.getItems(Item.NODE_LABEL)) { + for (Item item : nodeLabelsItems) { Node node = (Node) item.getSource(); Item nodeItem = previewModel.getItem(Item.NODE, node); item.setData(NODE_COLOR, nodeItem.getData(NodeItem.COLOR)); - item.setData(NODE_SIZE, nodeItem.getData(NodeItem.SIZE)); + item.setData(NODE_SIZE, SizeUtils.getNodeSize(nodeItem, properties) / 2f); item.setData(NODE_X, nodeItem.getData(NodeItem.X)); item.setData(NODE_Y, nodeItem.getData(NodeItem.Y)); + + // Initialize label as visible (not hidden by overlap avoidance) + item.setData(HIDDEN, false); } - //Calculate font size and cache fonts - fontCache = new HashMap(); + // Get Viz model + final VisualizationModel vizModel = previewModel.getWorkspace().getLookup().lookup(VisualizationModel.class); + + // Get font Font font = properties.getFontValue(PreviewProperty.NODE_LABEL_FONT); - for (Item item : previewModel.getItems(Item.NODE_LABEL)) { - Float nodeSize = item.getData(NODE_SIZE); - Float fontSize = 1f; - if (item.getData(NodeLabelItem.SIZE) != null) { - fontSize = item.getData(NodeLabelItem.SIZE); + if (!properties.getBooleanValue(PreviewProperty.NODE_LABEL_CUSTOM_FONT)) { + // Use font from visualization model for consistent font family and style with the graph view + if (vizModel != null && vizModel.getNodeLabelFont() != null) { + font = vizModel.getNodeLabelFont(); } + } + + // TODO: Access those values directly from GraphRenderingOptions + float fitNodeLabelsToNodeSizeFactor = 0.05f; + + //Calculate font size and cache fonts + final float baseFontSize = font.getSize() * properties.getFloatValue(PreviewProperty.NODE_LABEL_SCALE); + for (Item item : nodeLabelsItems) { + float nodeSize = item.getData(NODE_SIZE); + float fontSize = baseFontSize; if (properties.getBooleanValue(PreviewProperty.NODE_LABEL_PROPORTIONAL_SIZE)) { - fontSize *= nodeSize / 10f; + fontSize *= nodeSize * fitNodeLabelsToNodeSizeFactor; + } else { + // Add tiny bias (<1%) based on node size to prioritize labels of larger nodes in overlap detection + fontSize *= (1.0f + nodeSize * 0.00001f); + } + if (item.getData(NodeLabelItem.SIZE) != null) { + Float labelSize = item.getData(NodeLabelItem.SIZE); + fontSize *= (float) Math.sqrt(labelSize); } - fontSize *= font.getSize(); - Font labelFont = font.deriveFont((float) fontSize); + item.setData(FONT_SIZE_FLOAT, fontSize); + Font labelFont = font.deriveFont(fontSize); fontCache.put(labelFont.getSize(), labelFont); item.setData(FONT_SIZE, labelFont.getSize()); } + + //Grid-based label overlap avoidance (mirrors NodeLabelUpdater algorithm) + if (properties.getBooleanValue(PreviewProperty.NODE_LABEL_AVOID_OVERLAP) && nodeLabelsItems.length > 1) { + int gridSize = properties.getIntValue(PreviewProperty.NODE_LABEL_OVERLAP_GRID_SIZE); + + //Compute graph bounds from node positions + float minX = Float.MAX_VALUE, minY = Float.MAX_VALUE; + float maxX = -Float.MAX_VALUE, maxY = -Float.MAX_VALUE; + for (Item item : nodeLabelsItems) { + Float x = item.getData(NODE_X); + Float y = item.getData(NODE_Y); + if (x != null && y != null) { + if (x < minX) { + minX = x; + } + if (x > maxX) { + maxX = x; + } + if (y < minY) { + minY = y; + } + if (y > maxY) { + maxY = y; + } + } + } + + float gridMinX = minX - gridSize; + float gridMinY = minY - gridSize; + float gridWidth = maxX + gridSize - gridMinX; + float gridHeight = maxY + gridSize - gridMinY; + + if (gridWidth > 0 && gridHeight > 0) { + int gridCols = (int) Math.ceil(gridWidth / gridSize); + int gridRows = (int) Math.ceil(gridHeight / gridSize); + Map gridOccupancy = new HashMap<>(); // cell index β†’ occupied + + // Sort by descending float font size so larger (higher-priority) labels are placed first. + // This uses the pre-rounding float value, preserving distinctions that would be lost + // after deriveFont rounds to an integer size. + Item[] sortedItems = Arrays.copyOf(nodeLabelsItems, nodeLabelsItems.length); + Arrays.sort(sortedItems, (a, b) -> { + Float fsA = a.getData(FONT_SIZE_FLOAT); + Float fsB = b.getData(FONT_SIZE_FLOAT); + if (fsA == null) { + fsA = 0f; + } + if (fsB == null) { + fsB = 0f; + } + return Float.compare(fsB, fsA); + }); + + for (Item item : sortedItems) { + String label = item.getData(NodeLabelItem.LABEL); + if (label == null || label.trim().isEmpty()) { + continue; + } + + Float x = item.getData(NODE_X); + Float y = item.getData(NODE_Y); + Integer fontSize = item.getData(FONT_SIZE); + if (x == null || y == null || fontSize == null) { + continue; + } + + Font itemFont = fontCache.get(fontSize); + if (itemFont == null) { + continue; + } + + Rectangle2D bounds = itemFont.getStringBounds(label, frc); + float width = (float) bounds.getWidth(); + float height = (float) bounds.getHeight(); + if (width <= 0 || height <= 0) { + continue; + } + + float labelMinX = x - width / 2f; + float labelMaxX = x + width / 2f; + float labelMinY = y - height / 2f; + float labelMaxY = y + height / 2f; + + int minCol = Math.max(0, (int) ((labelMinX - gridMinX) / gridSize)); + int maxCol = Math.min(gridCols - 1, (int) ((labelMaxX - gridMinX) / gridSize)); + int minRow = Math.max(0, (int) ((labelMinY - gridMinY) / gridSize)); + int maxRow = Math.min(gridRows - 1, (int) ((labelMaxY - gridMinY) / gridSize)); + + // Since items are processed largest-first, any occupied cell means a higher-priority + // label has already claimed it β€” hide the current one unconditionally. + boolean shouldRender = true; + outer: + for (int row = minRow; row <= maxRow; row++) { + for (int col = minCol; col <= maxCol; col++) { + if (gridOccupancy.containsKey(row * gridCols + col)) { + shouldRender = false; + break outer; + } + } + } + + if (shouldRender) { + for (int row = minRow; row <= maxRow; row++) { + for (int col = minCol; col <= maxCol; col++) { + gridOccupancy.put(row * gridCols + col, Boolean.TRUE); + } + } + } else { + item.setData(HIDDEN, true); + } + } + } + } } @Override public void render(Item item, RenderTarget target, PreviewProperties properties) { + //Skip labels hidden by overlap avoidance + if (Boolean.TRUE.equals((Boolean) item.getData(HIDDEN))) { + return; + } + Node node = (Node) item.getSource(); //Label Color nodeColor = item.getData(NODE_COLOR); @@ -155,37 +317,61 @@ public void render(Item item, RenderTarget target, PreviewProperties properties) Float x = item.getData(NODE_X); Float y = item.getData(NODE_Y); + //Skip if empty + if (label == null || label.trim().isEmpty()) { + return; + } + //Outline DependantColor outlineDependantColor = properties.getValue(PreviewProperty.NODE_LABEL_OUTLINE_COLOR); - Float outlineSize = properties.getFloatValue(PreviewProperty.NODE_LABEL_OUTLINE_SIZE); + float outlineSize = properties.getFloatValue(PreviewProperty.NODE_LABEL_OUTLINE_SIZE); outlineSize = outlineSize * (fontSize / 32f); int outlineAlpha = (int) ((properties.getFloatValue(PreviewProperty.NODE_LABEL_OUTLINE_OPACITY) / 100f) * 255f); - if (outlineAlpha > 255) { - outlineAlpha = 255; - } Color outlineColor = outlineDependantColor.getColor(nodeColor); outlineColor = new Color(outlineColor.getRed(), outlineColor.getGreen(), outlineColor.getBlue(), outlineAlpha); //Box Boolean showBox = properties.getValue(PreviewProperty.NODE_LABEL_SHOW_BOX); + float borderWidth = SizeUtils.getBorderWidth(properties, item.getData(NODE_SIZE)); DependantColor boxDependantColor = properties.getValue(PreviewProperty.NODE_LABEL_BOX_COLOR); Color boxColor = boxDependantColor.getColor(nodeColor); int boxAlpha = (int) ((properties.getFloatValue(PreviewProperty.NODE_LABEL_BOX_OPACITY) / 100f) * 255f); - if (boxAlpha > 255) { - boxAlpha = 255; - } boxColor = new Color(boxColor.getRed(), boxColor.getGreen(), boxColor.getBlue(), boxAlpha); if (target instanceof G2DTarget) { - renderG2D((G2DTarget) target, label, x, y, fontSize, color, outlineSize, outlineColor, showBox, boxColor); + renderG2D((G2DTarget) target, label, x, y, fontSize, color, outlineSize, outlineColor, showBox, + boxColor, borderWidth); } else if (target instanceof SVGTarget) { - renderSVG((SVGTarget) target, node, label, x, y, fontSize, color, outlineSize, outlineColor, showBox, boxColor); + renderSVG((SVGTarget) target, node, label, x, y, fontSize, color, outlineSize, outlineColor, showBox, + boxColor, borderWidth); } else if (target instanceof PDFTarget) { - renderPDF((PDFTarget) target, node, label, x, y, fontSize, color, outlineSize, outlineColor, showBox, boxColor); + renderPDF((PDFTarget) target, node, label, x, y, fontSize, color, outlineSize, outlineColor, showBox, + boxColor, borderWidth); } } - public void renderG2D(G2DTarget target, String label, float x, float y, int fontSize, Color color, float outlineSize, Color outlineColor, boolean showBox, Color boxColor) { + @Override + public void postProcess(PreviewModel previewModel, RenderTarget renderTarget, PreviewProperties properties) { + } + + @Override + public CanvasSize getCanvasSize( + final Item item, + final PreviewProperties properties) { + float x = item.getData(NODE_X); + float y = item.getData(NODE_Y); + Integer fontSize = item.getData(FONT_SIZE); + + Font font = fontCache.get(fontSize); + String label = item.getData(NodeLabelItem.LABEL); + float textWidth = (float) font.getStringBounds(label, frc).getWidth(); + float textHeight = (float) font.getStringBounds(label, frc).getHeight(); + + return new CanvasSize(x - textWidth / 2f, y - textHeight / 2f, textWidth, textHeight); + } + + public void renderG2D(G2DTarget target, String label, float x, float y, int fontSize, Color color, + float outlineSize, Color outlineColor, boolean showBox, Color boxColor, float boxStrokeSize) { Graphics2D graphics = target.getGraphics(); Font font = fontCache.get(fontSize); @@ -193,16 +379,21 @@ public void renderG2D(G2DTarget target, String label, float x, float y, int font FontMetrics fm = graphics.getFontMetrics(); float posX = x - fm.stringWidth(label) / 2f; - float posY = y + fm.getDescent(); + // Center text vertically: baseline = centerY + (ascent - descent) / 2 + // This matches the TextRenderer approach for consistent positioning + float posY = y + (fm.getAscent() - fm.getDescent()) / 2f; + + Shape outlineGlyph = null; //Box if (showBox) { + graphics.setStroke(new BasicStroke(boxStrokeSize, BasicStroke.CAP_ROUND, BasicStroke.JOIN_MITER)); graphics.setColor(boxColor); Rectangle2D.Float rect = new Rectangle2D.Float(); - rect.setFrame(posX - outlineSize / 2f, - y - (fm.getAscent() + fm.getDescent()) / 2f - outlineSize / 2f, - fm.stringWidth(label) + outlineSize, - fm.getAscent() + fm.getDescent() + outlineSize); + rect.setFrame(posX - (outlineSize + boxStrokeSize) / 2f, + y - (fm.getAscent() + fm.getDescent()) / 2f - (outlineSize + boxStrokeSize) / 2f, + fm.stringWidth(label) + outlineSize + boxStrokeSize, + fm.getAscent() + fm.getDescent() + outlineSize + boxStrokeSize); graphics.draw(rect); } @@ -210,196 +401,251 @@ public void renderG2D(G2DTarget target, String label, float x, float y, int font if (outlineSize > 0) { FontRenderContext frc = graphics.getFontRenderContext(); GlyphVector gv = font.createGlyphVector(frc, label); - Shape glyph = gv.getOutline(posX, posY); + outlineGlyph = gv.getOutline(posX, posY); graphics.setColor(outlineColor); graphics.setStroke(new BasicStroke(outlineSize, BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND)); - graphics.draw(glyph); + graphics.draw(outlineGlyph); } graphics.setColor(color); - graphics.drawString(label, posX, posY); + if (null == outlineGlyph) { + graphics.drawString(label, posX, posY); + } else { + graphics.fill(outlineGlyph); + } } - public void renderSVG(SVGTarget target, Node node, String label, float x, float y, int fontSize, Color color, float outlineSize, Color outlineColor, boolean showBox, Color boxColor) { + public void renderSVG(SVGTarget target, Node node, String label, float x, float y, int fontSize, Color color, + float outlineSize, Color outlineColor, boolean showBox, Color boxColor, float boxStrokeSize) { Text labelText = target.createTextNode(label); Font font = fontCache.get(fontSize); + // Calculate proper baseline Y position using font metrics + // This matches G2D and TextRenderer approaches for consistency + + Rectangle2D bounds = font.getStringBounds(label, frc); + float ascent = (float) -bounds.getY(); + float descent = (float) (bounds.getHeight() + bounds.getY()); + float baselineY = y + (ascent - descent) / 2f; + if (outlineSize > 0) { Text labelTextOutline = target.createTextNode(label); Element outlineElem = target.createElement("text"); - outlineElem.setAttribute("class", node.getId().toString()); + outlineElem.setAttribute("class", SVGUtils.idAsClassAttribute(node.getId())); outlineElem.setAttribute("x", String.valueOf(x)); - outlineElem.setAttribute("y", String.valueOf(y)); - outlineElem.setAttribute("style", "text-anchor: middle; dominant-baseline: central;"); - outlineElem.setAttribute("fill", target.toHexString(color)); + outlineElem.setAttribute("y", String.valueOf(baselineY)); + outlineElem.setAttribute("style", "text-anchor: middle;"); outlineElem.setAttribute("font-family", font.getFamily()); outlineElem.setAttribute("font-size", String.valueOf(fontSize)); + if (font.isBold()) { + outlineElem.setAttribute("font-weight", "bold"); + } + if (font.isItalic()) { + outlineElem.setAttribute("font-style", "italic"); + } + outlineElem.setAttribute("fill", "none"); outlineElem.setAttribute("stroke", target.toHexString(outlineColor)); - outlineElem.setAttribute("stroke-width", (outlineSize * target.getScaleRatio()) + "px"); + outlineElem.setAttribute("stroke-width", Float.toString(outlineSize * target.getScaleRatio())); outlineElem.setAttribute("stroke-linecap", "round"); outlineElem.setAttribute("stroke-linejoin", "round"); outlineElem.setAttribute("stroke-opacity", String.valueOf(outlineColor.getAlpha() / 255f)); outlineElem.appendChild(labelTextOutline); target.getTopElement(SVGTarget.TOP_NODE_LABELS_OUTLINE).appendChild(outlineElem); - - //Trick to center text vertically on node: - SVGRect rect = ((SVGLocatable) outlineElem).getBBox(); - outlineElem.setAttribute("y", String.valueOf(y + rect.getHeight() / 4f)); } Element labelElem = target.createElement("text"); - labelElem.setAttribute("class", node.getId().toString()); + labelElem.setAttribute("class", SVGUtils.idAsClassAttribute(node.getId())); labelElem.setAttribute("x", String.valueOf(x)); - labelElem.setAttribute("y", String.valueOf(y)); - labelElem.setAttribute("style", "text-anchor: middle; dominant-baseline: central;"); + labelElem.setAttribute("y", String.valueOf(baselineY)); + labelElem.setAttribute("style", "text-anchor: middle;"); labelElem.setAttribute("fill", target.toHexString(color)); + labelElem.setAttribute("fill-opacity", String.valueOf(color.getAlpha() / 255f)); labelElem.setAttribute("font-family", font.getFamily()); labelElem.setAttribute("font-size", String.valueOf(fontSize)); + if (font.isBold()) { + labelElem.setAttribute("font-weight", "bold"); + } + if (font.isItalic()) { + labelElem.setAttribute("font-style", "italic"); + } labelElem.appendChild(labelText); target.getTopElement(SVGTarget.TOP_NODE_LABELS).appendChild(labelElem); - //Trick to center text vertically on node: - SVGRect rect = ((SVGLocatable) labelElem).getBBox(); - labelElem.setAttribute("y", String.valueOf(y + rect.getHeight() / 4f)); - //Box if (showBox) { - rect = ((SVGLocatable) labelElem).getBBox(); + // Calculate box dimensions using font metrics to match G2D rendering + // Using ascent + descent ensures consistent box height across renderers + float textWidth = (float) bounds.getWidth(); + float textHeight = ascent + descent; + Element boxElem = target.createElement("rect"); - boxElem.setAttribute("x", Float.toString(rect.getX() - outlineSize / 2f)); - boxElem.setAttribute("y", Float.toString(rect.getY() - outlineSize / 2f)); - boxElem.setAttribute("width", Float.toString(rect.getWidth() + outlineSize)); - boxElem.setAttribute("height", Float.toString(rect.getHeight() + outlineSize)); - boxElem.setAttribute("fill", target.toHexString(boxColor)); + float strokeWidth = boxStrokeSize * target.getScaleRatio(); + float padding = strokeWidth + outlineSize * target.getScaleRatio(); + boxElem.setAttribute("x", Float.toString(x - textWidth / 2f - padding / 2f)); + boxElem.setAttribute("y", Float.toString(y - textHeight / 2f - padding / 2f)); + boxElem.setAttribute("width", Float.toString(textWidth + padding)); + boxElem.setAttribute("height", Float.toString(textHeight + padding)); + boxElem.setAttribute("fill", "none"); + boxElem.setAttribute("stroke", target.toHexString(boxColor)); + boxElem.setAttribute("stroke-opacity", String.valueOf(boxColor.getAlpha() / 255f)); + boxElem.setAttribute("stroke-width", Float.toString(strokeWidth)); boxElem.setAttribute("opacity", String.valueOf(boxColor.getAlpha() / 255f)); target.getTopElement(SVGTarget.TOP_NODE_LABELS).insertBefore(boxElem, labelElem); } } - public void renderPDF(PDFTarget target, Node node, String label, float x, float y, int fontSize, Color color, float outlineSize, Color outlineColor, boolean showBox, Color boxColor) { + public void renderPDF(PDFTarget target, Node node, String label, float x, float y, int fontSize, Color color, + float outlineSize, Color outlineColor, boolean showBox, Color boxColor, float boxStrokeSize) { + PDPageContentStream contentStream = target.getContentStream(); Font font = fontCache.get(fontSize); - PdfContentByte cb = target.getContentByte(); - BaseFont bf = target.getBaseFont(font); + PDFont pdFont = target.getPDFont(font); + + try { + float textHeight = PDFUtils.getTextHeight(pdFont, fontSize); + float textMaxHeight = PDFUtils.getMaxTextHeight(pdFont, fontSize); + float textWidth = PDFUtils.getTextWidth(pdFont, fontSize, label); + + if (showBox) { + contentStream.setStrokingColor(boxColor); + contentStream.setRenderingMode(RenderingMode.STROKE); + contentStream.setLineJoinStyle(0); //miter + contentStream.setLineWidth(boxStrokeSize); + if (boxColor.getAlpha() < 255) { + PDExtendedGraphicsState graphicsState = new PDExtendedGraphicsState(); + graphicsState.setStrokingAlphaConstant(boxColor.getAlpha() / 255f); + contentStream.saveGraphicsState(); + contentStream.setGraphicsStateParameters(graphicsState); + } - //Box - if (showBox) { - cb.setRGBColorFill(boxColor.getRed(), boxColor.getGreen(), boxColor.getBlue()); - if (boxColor.getAlpha() < 255) { - cb.saveState(); - float alpha = boxColor.getAlpha() / 255f; - PdfGState gState = new PdfGState(); - gState.setFillOpacity(alpha); - cb.setGState(gState); - } - float textWidth = getTextWidth(bf, fontSize, label); - float textHeight = getTextHeight(bf, fontSize, label); + contentStream.addRect(x - (textWidth + outlineSize + boxStrokeSize) / 2f, + -y - (textMaxHeight + outlineSize + boxStrokeSize) / 2f, + textWidth + outlineSize + boxStrokeSize, + textMaxHeight + outlineSize + boxStrokeSize); - //A height of just textHeight seems to be half the text height sometimes - //BaseFont getAscentPoint and getDescentPoint may be not very precise - cb.rectangle(x - textWidth / 2f - outlineSize / 2f, -y - outlineSize / 2f - textHeight, textWidth + outlineSize, textHeight * 2f + outlineSize); + contentStream.stroke(); + if (boxColor.getAlpha() < 255) { + contentStream.restoreGraphicsState(); + } + } - cb.fill(); - if (boxColor.getAlpha() < 255) { - cb.restoreState(); + if (outlineSize > 0) { + contentStream.setRenderingMode(RenderingMode.STROKE); + contentStream.setStrokingColor(outlineColor); + contentStream.setLineWidth(outlineSize); + contentStream.setLineJoinStyle(1); //round + contentStream.setLineCapStyle(1); //round + if (outlineColor.getAlpha() < 255) { + PDExtendedGraphicsState graphicsState = new PDExtendedGraphicsState(); + graphicsState.setStrokingAlphaConstant(outlineColor.getAlpha() / 255f); + contentStream.saveGraphicsState(); + contentStream.setGraphicsStateParameters(graphicsState); + } + contentStream.beginText(); + contentStream.setFont(pdFont, fontSize); + contentStream.newLineAtOffset(x - (textWidth / 2f), -y - (textHeight / 2f)); + contentStream.showText(label); + contentStream.endText(); + if (outlineColor.getAlpha() < 255) { + contentStream.restoreGraphicsState(); + } } - } - cb.setRGBColorFill(color.getRed(), color.getGreen(), color.getBlue()); - float textHeight = getTextHeight(bf, fontSize, label); - if (outlineSize > 0) { - cb.setTextRenderingMode(PdfContentByte.TEXT_RENDER_MODE_STROKE); - cb.setRGBColorStroke(outlineColor.getRed(), outlineColor.getGreen(), outlineColor.getBlue()); - cb.setLineWidth(outlineSize); - cb.setLineJoin(PdfContentByte.LINE_JOIN_ROUND); - cb.setLineCap(PdfContentByte.LINE_CAP_ROUND); - if (outlineColor.getAlpha() < 255) { - cb.saveState(); - float alpha = outlineColor.getAlpha() / 255f; - PdfGState gState = new PdfGState(); - gState.setStrokeOpacity(alpha); - cb.setGState(gState); + if (color.getAlpha() < 255) { + PDExtendedGraphicsState graphicsState = new PDExtendedGraphicsState(); + graphicsState.setNonStrokingAlphaConstant(color.getAlpha() / 255f); + contentStream.saveGraphicsState(); + contentStream.setGraphicsStateParameters(graphicsState); } - cb.beginText(); - cb.setFontAndSize(bf, font.getSize()); - cb.showTextAligned(PdfContentByte.ALIGN_CENTER, label, x, -y - (textHeight / 2f), 0f); - cb.endText(); - if (outlineColor.getAlpha() < 255) { - cb.restoreState(); + contentStream.beginText(); + contentStream.setFont(pdFont, fontSize); + contentStream.setNonStrokingColor(color); + contentStream.setRenderingMode(RenderingMode.FILL); + contentStream.newLineAtOffset(x - (textWidth / 2f), -y - (textHeight / 2f)); + contentStream.showText(label); + contentStream.endText(); + if (color.getAlpha() < 255) { + contentStream.restoreGraphicsState(); } + } catch (IOException ex) { + throw new RuntimeException(ex); } - cb.setTextRenderingMode(PdfContentByte.TEXT_RENDER_MODE_FILL); - cb.beginText(); - cb.setFontAndSize(bf, font.getSize()); - cb.showTextAligned(PdfContentByte.ALIGN_CENTER, label, x, -y - (textHeight / 2f), 0f); - cb.endText(); - } - - private float getTextHeight(BaseFont baseFont, float fontSize, String text) { - float ascend = baseFont.getAscentPoint(text, fontSize); - float descend = baseFont.getDescentPoint(text, fontSize); - return ascend + descend; - } - - private float getTextWidth(BaseFont baseFont, float fontSize, String text) { - return baseFont.getWidthPoint(text, fontSize); } @Override public PreviewProperty[] getProperties() { - return new PreviewProperty[]{ + return new PreviewProperty[] { PreviewProperty.createProperty(this, PreviewProperty.SHOW_NODE_LABELS, Boolean.class, - NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.display.displayName"), - NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.display.description"), - PreviewProperty.CATEGORY_NODE_LABELS).setValue(defaultShowLabels), + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.display.displayName"), + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.display.description"), + PreviewProperty.CATEGORY_NODE_LABELS).setValue(defaultShowLabels), + PreviewProperty.createProperty(this, PreviewProperty.NODE_LABEL_CUSTOM_FONT, Boolean.class, + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.customFont.displayName"), + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.customFont.description"), + PreviewProperty.CATEGORY_NODE_LABELS, PreviewProperty.SHOW_NODE_LABELS).setValue(defaultCustomFont), PreviewProperty.createProperty(this, PreviewProperty.NODE_LABEL_FONT, Font.class, - NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.font.displayName"), - NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.font.description"), - PreviewProperty.CATEGORY_NODE_LABELS, PreviewProperty.SHOW_NODE_LABELS).setValue(defaultFont), + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.font.displayName"), + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.font.description"), + PreviewProperty.CATEGORY_NODE_LABELS, PreviewProperty.SHOW_NODE_LABELS, + PreviewProperty.NODE_LABEL_CUSTOM_FONT).setValue(defaultFont), PreviewProperty.createProperty(this, PreviewProperty.NODE_LABEL_PROPORTIONAL_SIZE, Boolean.class, - NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.proportionalSize.displayName"), - NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.proportionalSize.description"), - PreviewProperty.CATEGORY_NODE_LABELS, PreviewProperty.SHOW_NODE_LABELS).setValue(defaultProportinalSize), + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.proportionalSize.displayName"), + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.proportionalSize.description"), + PreviewProperty.CATEGORY_NODE_LABELS, PreviewProperty.SHOW_NODE_LABELS).setValue( + defaultProportinalSize), PreviewProperty.createProperty(this, PreviewProperty.NODE_LABEL_COLOR, DependantOriginalColor.class, - NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.color.displayName"), - NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.color.description"), - PreviewProperty.CATEGORY_NODE_LABELS, PreviewProperty.SHOW_NODE_LABELS).setValue(defaultColor), + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.color.displayName"), + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.color.description"), + PreviewProperty.CATEGORY_NODE_LABELS, PreviewProperty.SHOW_NODE_LABELS).setValue(defaultColor), PreviewProperty.createProperty(this, PreviewProperty.NODE_LABEL_SHORTEN, Boolean.class, - NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.shorten.displayName"), - NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.shorten.description"), - PreviewProperty.CATEGORY_NODE_LABELS, PreviewProperty.SHOW_NODE_LABELS).setValue(defaultShorten), + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.shorten.displayName"), + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.shorten.description"), + PreviewProperty.CATEGORY_NODE_LABELS, PreviewProperty.SHOW_NODE_LABELS).setValue(defaultShorten), + PreviewProperty.createProperty(this, PreviewProperty.NODE_LABEL_AVOID_OVERLAP, Boolean.class, + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.avoidOverlap.displayName"), + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.avoidOverlap.description"), + PreviewProperty.CATEGORY_NODE_LABELS, PreviewProperty.SHOW_NODE_LABELS).setValue(defaultAvoidOverlap), + PreviewProperty.createProperty(this, PreviewProperty.NODE_LABEL_OVERLAP_GRID_SIZE, Integer.class, + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.overlapGridSize.displayName"), + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.overlapGridSize.description"), + PreviewProperty.CATEGORY_NODE_LABELS, PreviewProperty.SHOW_NODE_LABELS, + PreviewProperty.NODE_LABEL_AVOID_OVERLAP).setMinMax(1, null).setValue(defaultOverlapGridSize), PreviewProperty.createProperty(this, PreviewProperty.NODE_LABEL_MAX_CHAR, Integer.class, - NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.maxchar.displayName"), - NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.maxchar.description"), - PreviewProperty.CATEGORY_NODE_LABELS, PreviewProperty.SHOW_NODE_LABELS).setValue(defaultMaxChar), + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.maxchar.displayName"), + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.maxchar.description"), + PreviewProperty.CATEGORY_NODE_LABELS, PreviewProperty.SHOW_NODE_LABELS).setValue(defaultMaxChar), PreviewProperty.createProperty(this, PreviewProperty.NODE_LABEL_OUTLINE_SIZE, Float.class, - NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.outlineSize.displayName"), - NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.outlineSize.description"), - PreviewProperty.CATEGORY_NODE_LABELS, PreviewProperty.SHOW_NODE_LABELS).setValue(defaultOutlineSize), + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.outlineSize.displayName"), + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.outlineSize.description"), + PreviewProperty.CATEGORY_NODE_LABELS, PreviewProperty.SHOW_NODE_LABELS).setMinMax(0f, null).setValue( + defaultOutlineSize), PreviewProperty.createProperty(this, PreviewProperty.NODE_LABEL_OUTLINE_COLOR, DependantColor.class, - NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.outlineColor.displayName"), - NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.outlineColor.description"), - PreviewProperty.CATEGORY_NODE_LABELS, PreviewProperty.SHOW_NODE_LABELS).setValue(defaultOutlineColor), + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.outlineColor.displayName"), + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.outlineColor.description"), + PreviewProperty.CATEGORY_NODE_LABELS, PreviewProperty.SHOW_NODE_LABELS).setValue(defaultOutlineColor), PreviewProperty.createProperty(this, PreviewProperty.NODE_LABEL_OUTLINE_OPACITY, Float.class, - NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.outlineOpacity.displayName"), - NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.outlineOpacity.description"), - PreviewProperty.CATEGORY_NODE_LABELS, PreviewProperty.SHOW_NODE_LABELS).setValue(defaultOutlineOpacity), + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.outlineOpacity.displayName"), + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.outlineOpacity.description"), + PreviewProperty.CATEGORY_NODE_LABELS, PreviewProperty.SHOW_NODE_LABELS).setMinMax(0f, 100f).setValue( + defaultOutlineOpacity), PreviewProperty.createProperty(this, PreviewProperty.NODE_LABEL_SHOW_BOX, Boolean.class, - NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.box.displayName"), - NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.box.description"), - PreviewProperty.CATEGORY_NODE_LABELS, PreviewProperty.SHOW_NODE_LABELS).setValue(defaultShowBox), + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.box.displayName"), + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.box.description"), + PreviewProperty.CATEGORY_NODE_LABELS, PreviewProperty.SHOW_NODE_LABELS).setValue(defaultShowBox), PreviewProperty.createProperty(this, PreviewProperty.NODE_LABEL_BOX_COLOR, DependantColor.class, - NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.box.color.displayName"), - NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.box.color.description"), - PreviewProperty.CATEGORY_NODE_LABELS, PreviewProperty.NODE_LABEL_SHOW_BOX, PreviewProperty.SHOW_NODE_LABELS).setValue(defaultBoxColor), + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.box.color.displayName"), + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.box.color.description"), + PreviewProperty.CATEGORY_NODE_LABELS, PreviewProperty.NODE_LABEL_SHOW_BOX, + PreviewProperty.SHOW_NODE_LABELS).setValue(defaultBoxColor), PreviewProperty.createProperty(this, PreviewProperty.NODE_LABEL_BOX_OPACITY, Float.class, - NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.box.opacity.displayName"), - NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.box.opacity.description"), - PreviewProperty.CATEGORY_NODE_LABELS, PreviewProperty.NODE_LABEL_SHOW_BOX, PreviewProperty.SHOW_NODE_LABELS).setValue(defaultBoxOpacity),}; + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.box.opacity.displayName"), + NbBundle.getMessage(NodeLabelRenderer.class, "NodeLabelRenderer.property.box.opacity.description"), + PreviewProperty.CATEGORY_NODE_LABELS, PreviewProperty.NODE_LABEL_SHOW_BOX, + PreviewProperty.SHOW_NODE_LABELS).setMinMax(0f, 100f).setValue(defaultBoxOpacity)}; } private boolean showNodeLabels(PreviewProperties properties) { return properties.getBooleanValue(PreviewProperty.SHOW_NODE_LABELS) - && !properties.getBooleanValue(PreviewProperty.MOVING); + && !properties.getBooleanValue(PreviewProperty.MOVING); } @Override @@ -409,7 +655,8 @@ public boolean isRendererForitem(Item item, PreviewProperties properties) { @Override public boolean needsItemBuilder(ItemBuilder itemBuilder, PreviewProperties properties) { - return (itemBuilder instanceof NodeLabelBuilder || itemBuilder instanceof NodeBuilder) && showNodeLabels(properties);//Needs some properties of nodes + return (itemBuilder instanceof NodeLabelBuilder || itemBuilder instanceof NodeBuilder) && + showNodeLabels(properties);//Needs some properties of nodes } @Override diff --git a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/NodeRenderer.java b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/NodeRenderer.java index 374c9d9b66..25eb1c5db4 100644 --- a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/NodeRenderer.java +++ b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/NodeRenderer.java @@ -39,16 +39,26 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.preview.plugin.renderers; -import com.itextpdf.text.pdf.PdfContentByte; -import com.itextpdf.text.pdf.PdfGState; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Graphics2D; import java.awt.geom.Ellipse2D; +import java.io.IOException; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState; import org.gephi.graph.api.Node; -import org.gephi.preview.api.*; +import org.gephi.preview.api.CanvasSize; +import org.gephi.preview.api.G2DTarget; +import org.gephi.preview.api.Item; +import org.gephi.preview.api.PDFTarget; +import org.gephi.preview.api.PreviewModel; +import org.gephi.preview.api.PreviewProperties; +import org.gephi.preview.api.PreviewProperty; +import org.gephi.preview.api.RenderTarget; +import org.gephi.preview.api.SVGTarget; import org.gephi.preview.plugin.builders.NodeBuilder; import org.gephi.preview.plugin.items.NodeItem; import org.gephi.preview.spi.ItemBuilder; @@ -59,7 +69,6 @@ Development and Distribution License("CDDL") (collectively, the import org.w3c.dom.Element; /** - * * @author Yudi Xue, Mathieu Bastian */ @ServiceProvider(service = Renderer.class, position = 300) @@ -69,6 +78,8 @@ public class NodeRenderer implements Renderer { protected float defaultBorderWidth = 1f; protected DependantColor defaultBorderColor = new DependantColor(Color.BLACK); protected float defaultOpacity = 100f; + protected boolean defaultPerNodeOpacity = false; + protected boolean defaultFixedNodeBorder = true; @Override public void preProcess(PreviewModel previewModel) { @@ -85,33 +96,70 @@ public void render(Item item, RenderTarget target, PreviewProperties properties) } } + @Override + public void postProcess(PreviewModel previewModel, RenderTarget renderTarget, PreviewProperties properties) { + } + + @Override + public CanvasSize getCanvasSize( + final Item item, + final PreviewProperties properties) { + final float x = item.getData(NodeItem.X); + final float y = item.getData(NodeItem.Y); + final float s = SizeUtils.getNodeSize(item, properties); + final float r = s / 2F; + final int intS = Math.round(s); + return new CanvasSize( + Math.round(x - r), + Math.round(y - r), + intS, + intS); + } + public void renderG2D(Item item, G2DTarget target, PreviewProperties properties) { //Params Float x = item.getData(NodeItem.X); Float y = item.getData(NodeItem.Y); - Float size = item.getData(NodeItem.SIZE); + float size = SizeUtils.getNodeSize(item, properties); Color color = item.getData(NodeItem.COLOR); Color borderColor = ((DependantColor) properties.getValue(PreviewProperty.NODE_BORDER_COLOR)).getColor(color); - float borderSize = properties.getFloatValue(PreviewProperty.NODE_BORDER_WIDTH); - int alpha = (int) ((properties.getFloatValue(PreviewProperty.NODE_OPACITY) / 100f) * 255f); - if (alpha > 255) { - alpha = 255; - } + float borderSize = SizeUtils.getBorderWidth(properties, size); + + int alpha = properties.getBooleanValue(PreviewProperty.NODE_PER_NODE_OPACITY) ? + color.getAlpha() : + (int) ((properties.getFloatValue(PreviewProperty.NODE_OPACITY) / 100f) * 255f); //Graphics Graphics2D graphics = target.getGraphics(); + //Border can't be larger than size + borderSize = Math.min(borderSize, size / 2f); + + // Set size and pos + size = size - borderSize; x = x - (size / 2f); y = y - (size / 2f); - Ellipse2D.Float ellipse = new Ellipse2D.Float(x, y, size, size); + + //Draw fill + Ellipse2D.Float ellipse; + if (alpha == 255) { + // Allow the border and the fill to overlap a bit to avoid rendering artifacts + ellipse = new Ellipse2D.Float(x + borderSize / 4f, y + borderSize / 4f, size - borderSize / 2f, + size - borderSize / 2f); + } else { + // Special case making sure the border and the fill are not overlapping + ellipse = + new Ellipse2D.Float(x + borderSize / 2f, y + borderSize / 2f, size - borderSize, size - borderSize); + } + graphics.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(), alpha)); + graphics.fill(ellipse); + if (borderSize > 0) { + Ellipse2D.Float borderEllipse = new Ellipse2D.Float(x, y, size, size); graphics.setColor(new Color(borderColor.getRed(), borderColor.getGreen(), borderColor.getBlue(), alpha)); graphics.setStroke(new BasicStroke(borderSize)); - graphics.draw(ellipse); + graphics.draw(borderEllipse); } - - graphics.setColor(new Color(color.getRed(), color.getGreen(), color.getBlue(), alpha)); - graphics.fill(ellipse); } public void renderSVG(Item item, SVGTarget target, PreviewProperties properties) { @@ -119,78 +167,124 @@ public void renderSVG(Item item, SVGTarget target, PreviewProperties properties) //Params Float x = item.getData(NodeItem.X); Float y = item.getData(NodeItem.Y); - Float size = item.getData(NodeItem.SIZE); - size /= 2f; + float size = SizeUtils.getNodeSize(item, properties); Color color = item.getData(NodeItem.COLOR); Color borderColor = ((DependantColor) properties.getValue(PreviewProperty.NODE_BORDER_COLOR)).getColor(color); - float borderSize = properties.getFloatValue(PreviewProperty.NODE_BORDER_WIDTH); - float alpha = properties.getFloatValue(PreviewProperty.NODE_OPACITY) / 100f; + float borderSize = SizeUtils.getBorderWidth(properties, size); + float alpha = properties.getBooleanValue(PreviewProperty.NODE_PER_NODE_OPACITY) ? + color.getAlpha() / 255f : + properties.getFloatValue(PreviewProperty.NODE_OPACITY) / 100f; if (alpha > 1) { alpha = 1; } + // Border can't be larger than size + borderSize = Math.min(borderSize, size / 2f); + Element nodeElem = target.createElement("circle"); - nodeElem.setAttribute("class", node.getId().toString()); + Element nodeBorderElem = nodeElem; + nodeElem.setAttribute("class", SVGUtils.idAsClassAttribute(node.getId())); nodeElem.setAttribute("cx", x.toString()); nodeElem.setAttribute("cy", y.toString()); - nodeElem.setAttribute("r", size.toString()); nodeElem.setAttribute("fill", target.toHexString(color)); nodeElem.setAttribute("fill-opacity", "" + alpha); + if (borderSize > 0) { - nodeElem.setAttribute("stroke", target.toHexString(borderColor)); - nodeElem.setAttribute("stroke-width", new Float(borderSize * target.getScaleRatio()).toString()); - nodeElem.setAttribute("stroke-opacity", "" + alpha); + if (alpha < 1) { + // Special case making sure the border and the fill are not overlapping + nodeBorderElem = target.createElement("circle"); + nodeBorderElem.setAttribute("cx", x.toString()); + nodeBorderElem.setAttribute("cy", y.toString()); + nodeBorderElem.setAttribute("r", Float.toString((size / 2f) - borderSize / 2f)); + nodeBorderElem.setAttribute("fill", "none"); + + nodeElem.setAttribute("r", Float.toString((size / 2f) - borderSize)); + target.getTopElement(SVGTarget.TOP_NODES).appendChild(nodeElem); + } else { + nodeElem.setAttribute("r", Float.toString((size - borderSize) / 2f)); + } + nodeBorderElem.setAttribute("stroke", target.toHexString(borderColor)); + nodeBorderElem.setAttribute( + "stroke-width", + Float.toString(borderSize * target.getScaleRatio())); + nodeBorderElem.setAttribute("stroke-opacity", "" + alpha); + } else { + nodeElem.setAttribute("r", Float.toString((size - borderSize) / 2f)); } - target.getTopElement(SVGTarget.TOP_NODES).appendChild(nodeElem); + + target.getTopElement(SVGTarget.TOP_NODES).appendChild(nodeBorderElem); } public void renderPDF(Item item, PDFTarget target, PreviewProperties properties) { Float x = item.getData(NodeItem.X); Float y = item.getData(NodeItem.Y); - Float size = item.getData(NodeItem.SIZE); - size /= 2f; + float size = SizeUtils.getNodeSize(item, properties); Color color = item.getData(NodeItem.COLOR); Color borderColor = ((DependantColor) properties.getValue(PreviewProperty.NODE_BORDER_COLOR)).getColor(color); - float borderSize = properties.getFloatValue(PreviewProperty.NODE_BORDER_WIDTH); - float alpha = properties.getFloatValue(PreviewProperty.NODE_OPACITY) / 100f; - - PdfContentByte cb = target.getContentByte(); - cb.setRGBColorStroke(borderColor.getRed(), borderColor.getGreen(), borderColor.getBlue()); - cb.setLineWidth(borderSize); - cb.setRGBColorFill(color.getRed(), color.getGreen(), color.getBlue()); - if (alpha < 1f) { - cb.saveState(); - PdfGState gState = new PdfGState(); - gState.setFillOpacity(alpha); - gState.setStrokeOpacity(alpha); - cb.setGState(gState); - } - cb.circle(x, -y, size); - if (borderSize > 0) { - cb.fillStroke(); - } else { - cb.fill(); - } - if (alpha < 1f) { - cb.restoreState(); + float borderSize = SizeUtils.getBorderWidth(properties, size); + float alpha = properties.getBooleanValue(PreviewProperty.NODE_PER_NODE_OPACITY) ? + color.getAlpha() / 255f : + properties.getFloatValue(PreviewProperty.NODE_OPACITY) / 100f; + + // Border can't be larger than size + borderSize = Math.min(borderSize, size / 2f); + + PDPageContentStream cb = target.getContentStream(); + try { + cb.setStrokingColor(borderColor); + cb.setLineWidth(borderSize); + cb.setNonStrokingColor(color); + if (alpha < 1f) { + PDExtendedGraphicsState graphicsState = new PDExtendedGraphicsState(); + graphicsState.setStrokingAlphaConstant(alpha); + graphicsState.setNonStrokingAlphaConstant(alpha); + cb.saveGraphicsState(); + cb.setGraphicsStateParameters(graphicsState); + } + PDFUtils.drawCircle(cb, x, -y, (size / 2f) - borderSize / 2f); + if (borderSize > 0 && alpha == 1f) { + cb.fillAndStroke(); + } else if (borderSize > 0 && alpha < 1f) { + // Special case to make sure the border and the fill are not overlapping + cb.stroke(); + PDFUtils.drawCircle(cb, x, -y, (size / 2f) - borderSize); + cb.fill(); + } else { + cb.fill(); + } + if (alpha < 1f) { + cb.restoreGraphicsState(); + } + } catch (IOException ex) { + throw new RuntimeException(ex); } } @Override public PreviewProperty[] getProperties() { - return new PreviewProperty[]{ + return new PreviewProperty[] { + PreviewProperty.createProperty(this, PreviewProperty.NODE_BORDER_FIXED, Boolean.class, + NbBundle.getMessage(NodeRenderer.class, "NodeRenderer.property.fixedBorderWidth.displayName"), + NbBundle.getMessage(NodeRenderer.class, "NodeRenderer.property.fixedBorderWidth.description"), + PreviewProperty.CATEGORY_NODES).setValue(defaultFixedNodeBorder), PreviewProperty.createProperty(this, PreviewProperty.NODE_BORDER_WIDTH, Float.class, - NbBundle.getMessage(NodeRenderer.class, "NodeRenderer.property.borderWidth.displayName"), - NbBundle.getMessage(NodeRenderer.class, "NodeRenderer.property.borderWidth.description"), - PreviewProperty.CATEGORY_NODES).setValue(defaultBorderWidth), + NbBundle.getMessage(NodeRenderer.class, "NodeRenderer.property.borderWidth.displayName"), + NbBundle.getMessage(NodeRenderer.class, "NodeRenderer.property.borderWidth.description"), + PreviewProperty.CATEGORY_NODES, PreviewProperty.NODE_BORDER_FIXED).setMinMax(0f, null).setValue( + defaultBorderWidth), PreviewProperty.createProperty(this, PreviewProperty.NODE_BORDER_COLOR, DependantColor.class, - NbBundle.getMessage(NodeRenderer.class, "NodeRenderer.property.borderColor.displayName"), - NbBundle.getMessage(NodeRenderer.class, "NodeRenderer.property.borderColor.description"), - PreviewProperty.CATEGORY_NODES).setValue(defaultBorderColor), + NbBundle.getMessage(NodeRenderer.class, "NodeRenderer.property.borderColor.displayName"), + NbBundle.getMessage(NodeRenderer.class, "NodeRenderer.property.borderColor.description"), + PreviewProperty.CATEGORY_NODES).setValue(defaultBorderColor), PreviewProperty.createProperty(this, PreviewProperty.NODE_OPACITY, Float.class, - NbBundle.getMessage(NodeRenderer.class, "NodeRenderer.property.opacity.displayName"), - NbBundle.getMessage(NodeRenderer.class, "NodeRenderer.property.opacity.description"), - PreviewProperty.CATEGORY_NODES).setValue(defaultOpacity)}; + NbBundle.getMessage(NodeRenderer.class, "NodeRenderer.property.opacity.displayName"), + NbBundle.getMessage(NodeRenderer.class, "NodeRenderer.property.opacity.description"), + PreviewProperty.CATEGORY_NODES).setMinMax(0f, 100f).setValue(defaultOpacity), + PreviewProperty.createProperty(this, PreviewProperty.NODE_PER_NODE_OPACITY, Boolean.class, + NbBundle.getMessage(NodeRenderer.class, "NodeRenderer.property.perNodeOpacity.displayName"), + NbBundle.getMessage(NodeRenderer.class, "NodeRenderer.property.perNodeOpacity.description"), + PreviewProperty.CATEGORY_NODES).setValue(defaultPerNodeOpacity) + }; } private boolean showNodes(PreviewProperties properties) { diff --git a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/PDFUtils.java b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/PDFUtils.java new file mode 100644 index 0000000000..89a9b02da2 --- /dev/null +++ b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/PDFUtils.java @@ -0,0 +1,109 @@ +package org.gephi.preview.plugin.renderers; + + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.font.PDFont; + +public class PDFUtils { + + public static void drawCircle(PDPageContentStream stream, final float x, final float y, final float r) + throws IOException { + float b = 0.5523f; + stream.moveTo(x + r, y); + stream.curveTo(x + r, y + r * b, x + r * b, y + r, x, y + r); + stream.curveTo(x - r * b, y + r, x - r, y + r * b, x - r, y); + stream.curveTo(x - r, y - r * b, x - r * b, y - r, x, y - r); + stream.curveTo(x + r * b, y - r, x + r, y - r * b, x + r, y); + } + + public static void drawArc(PDPageContentStream stream, final float x1, final float y1, final float x2, + final float y2, + final float startAng, final float extent) throws IOException { + List ar = bezierArc(x1, y1, x2, y2, startAng, extent); + if (ar.isEmpty()) { + return; + } + float[] pt = ar.get(0); + stream.moveTo(pt[0], pt[1]); + for (float[] floats : ar) { + pt = floats; + stream.curveTo(pt[2], pt[3], pt[4], pt[5], pt[6], pt[7]); + } + } + + private static List bezierArc(float x1, float y1, float x2, float y2, final float startAng, + final float extent) { + float tmp; + if (x1 > x2) { + tmp = x1; + x1 = x2; + x2 = tmp; + } + if (y2 > y1) { + tmp = y1; + y1 = y2; + y2 = tmp; + } + + float fragAngle; + int Nfrag; + if (Math.abs(extent) <= 90f) { + fragAngle = extent; + Nfrag = 1; + } else { + Nfrag = (int) Math.ceil(Math.abs(extent) / 90f); + fragAngle = extent / Nfrag; + } + float x_cen = (x1 + x2) / 2f; + float y_cen = (y1 + y2) / 2f; + float rx = (x2 - x1) / 2f; + float ry = (y2 - y1) / 2f; + float halfAng = (float) (fragAngle * Math.PI / 360.); + float kappa = (float) Math.abs(4. / 3. * (1. - Math.cos(halfAng)) / Math.sin(halfAng)); + List pointList = new ArrayList<>(); + for (int i = 0; i < Nfrag; ++i) { + float theta0 = (float) ((startAng + i * fragAngle) * Math.PI / 180.); + float theta1 = (float) ((startAng + (i + 1) * fragAngle) * Math.PI / 180.); + float cos0 = (float) Math.cos(theta0); + float cos1 = (float) Math.cos(theta1); + float sin0 = (float) Math.sin(theta0); + float sin1 = (float) Math.sin(theta1); + if (fragAngle > 0f) { + pointList.add(new float[] {x_cen + rx * cos0, + y_cen - ry * sin0, + x_cen + rx * (cos0 - kappa * sin0), + y_cen - ry * (sin0 + kappa * cos0), + x_cen + rx * (cos1 + kappa * sin1), + y_cen - ry * (sin1 - kappa * cos1), + x_cen + rx * cos1, + y_cen - ry * sin1}); + } else { + pointList.add(new float[] {x_cen + rx * cos0, + y_cen - ry * sin0, + x_cen + rx * (cos0 + kappa * sin0), + y_cen - ry * (sin0 - kappa * cos0), + x_cen + rx * (cos1 - kappa * sin1), + y_cen - ry * (sin1 + kappa * cos1), + x_cen + rx * cos1, + y_cen - ry * sin1}); + } + } + return pointList; + } + + public static float getTextHeight(PDFont pdFont, float fontSize) throws IOException { + return pdFont.getFontDescriptor().getCapHeight() / 1000 * fontSize; + } + + public static float getMaxTextHeight(PDFont pdFont, float fontSize) throws IOException { + return pdFont.getBoundingBox().getHeight() / 1000 * fontSize; + } + + public static float getTextWidth(PDFont pdFont, float fontSize, String text) throws IOException { + return pdFont.getStringWidth(text) / 1000 * fontSize; + } + +} diff --git a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/SVGUtils.java b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/SVGUtils.java new file mode 100644 index 0000000000..e83e94d516 --- /dev/null +++ b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/SVGUtils.java @@ -0,0 +1,53 @@ +/* + Copyright 2008-2017 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2017 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2017 Gephi Consortium. + */ + +package org.gephi.preview.plugin.renderers; + +/** + * @author Eduardo Ramos + */ +public class SVGUtils { + + public static String idAsClassAttribute(Object id) { + return "id_" + id.toString().replaceAll(" ", "_"); + } +} diff --git a/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/SizeUtils.java b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/SizeUtils.java new file mode 100644 index 0000000000..bff48f0e52 --- /dev/null +++ b/modules/PreviewPlugin/src/main/java/org/gephi/preview/plugin/renderers/SizeUtils.java @@ -0,0 +1,40 @@ +package org.gephi.preview.plugin.renderers; + +import org.gephi.preview.api.Item; +import org.gephi.preview.api.PreviewProperties; +import org.gephi.preview.api.PreviewProperty; +import org.gephi.preview.plugin.items.NodeItem; + +public class SizeUtils { + + // Same as overview + protected static float defaultBorderWidthFactor = 0.16f; + + /** + * Get the node size to render, taking into account the node size and the node scale factor. + * + * @param item the node item + * @param properties the preview properties + * @return the node size to render + */ + public static float getNodeSize(Item item, PreviewProperties properties) { + float scale = properties.getFloatValue(PreviewProperty.NODE_SCALE_FACTOR); + Float size = item.getData(NodeItem.SIZE); + return size * scale; + } + + /** + * Get the node border width to render, taking into account the node size and the node border width factor. + * + * @param properties the preview properties + * @param nodeSize the node size to render + * @return the node border width to render + */ + public static float getBorderWidth(PreviewProperties properties, float nodeSize) { + if (properties.getBooleanValue(PreviewProperty.NODE_BORDER_FIXED)) { + return properties.getFloatValue(PreviewProperty.NODE_BORDER_WIDTH); + } else { + return nodeSize * defaultBorderWidthFactor / 2f; + } + } +} diff --git a/modules/PreviewPlugin/src/main/nbm/manifest.mf b/modules/PreviewPlugin/src/main/nbm/manifest.mf index 9ba48b4a06..5bbdc67115 100644 --- a/modules/PreviewPlugin/src/main/nbm/manifest.mf +++ b/modules/PreviewPlugin/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/preview/plugin/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi Core +OpenIDE-Module-Name: Preview Plugin \ No newline at end of file diff --git a/modules/PreviewPlugin/src/main/nbm/module.xml b/modules/PreviewPlugin/src/main/nbm/module.xml deleted file mode 100644 index c8320fdabd..0000000000 --- a/modules/PreviewPlugin/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle.properties index ba57c00d3b..79bda8f77f 100644 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle.properties +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle.properties @@ -1,5 +1,2 @@ -OpenIDE-Module-Display-Category=Gephi Core -OpenIDE-Module-Long-Description=\ - Implementations of Item Builders, Renderers ans RenderTargets -OpenIDE-Module-Name=Preview Plugin +OpenIDE-Module-Long-Description=Implementations of Item Builders, Renderers and RenderTargets OpenIDE-Module-Short-Description=Implementation of Preview SPI diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_ar.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_ca.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_ca.properties new file mode 100644 index 0000000000..79bda8f77f --- /dev/null +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_ca.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Implementations of Item Builders, Renderers and RenderTargets +OpenIDE-Module-Short-Description=Implementation of Preview SPI diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_cs.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_cs.properties index 7cadc5ee0c..5a9791c22b 100644 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_cs.properties +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_cs.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-29 19\:27+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=Zaveden\u00ed sestavitel\u016f polo\u017eek, vykreslova\u010d\u016f a c\u00edle vykreslen\u00ed - -OpenIDE-Module-Short-Description=Zaveden\u00ed n\u00e1hledu SPI +OpenIDE-Module-Long-Description=Zavedenν sestavitel\u016f polo\u017eek, vykreslova\u010d\u016f a cνle vykreslenν +OpenIDE-Module-Short-Description=Zavedenν nαhledu SPI diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_de.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_de.properties new file mode 100644 index 0000000000..6d351ca8c8 --- /dev/null +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_de.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Implementierungen von ItemBuilders, Renderern und RenderTargets +OpenIDE-Module-Short-Description=Implementierung Vorschau SPI diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_es.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_es.properties index 39801117b0..458c32a42e 100644 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_es.properties +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_es.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 21\:59+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Implementaciones de Item Builders, Renderers y RenderTargets - -OpenIDE-Module-Short-Description=Implementaci\u00f3n de la SPI de Preview +OpenIDE-Module-Long-Description=Implementaciones de Item Builders, Renderers y RenderTargets +OpenIDE-Module-Short-Description=Implementaciσn de la SPI de Preview diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_fr.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_fr.properties index 48a8b432a6..523e498713 100644 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_fr.properties +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_fr.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 12\:51+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Impl\u00e9mentation des Item Builders, Renderers et RenderTargets - -OpenIDE-Module-Short-Description=Impl\u00e9mentation du Preview SPI +OpenIDE-Module-Long-Description=Implιmentation des Item Builders, Renderers et RenderTargets +OpenIDE-Module-Short-Description=Implιmentation du Preview SPI diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_he.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_he.properties new file mode 100644 index 0000000000..79bda8f77f --- /dev/null +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_he.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Implementations of Item Builders, Renderers and RenderTargets +OpenIDE-Module-Short-Description=Implementation of Preview SPI diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_hu.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_hu.properties new file mode 100644 index 0000000000..0674501460 --- /dev/null +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_hu.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Short-Description=Preview SPI v\u00E9grehajt\u00E1sa +OpenIDE-Module-Long-Description=Az elemgy\u00E1rt\u00F3k, Renderers \u00E9s RenderTargets v\u00E9grehajt\u00E1sa diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_it.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_it.properties new file mode 100644 index 0000000000..79bda8f77f --- /dev/null +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_it.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Implementations of Item Builders, Renderers and RenderTargets +OpenIDE-Module-Short-Description=Implementation of Preview SPI diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_ja.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_ja.properties index 1f3e7ab411..e586d2a610 100644 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_ja.properties +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_ja.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 09\:48+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=Item Builders, Renderers \u53ca\u3073 RenderTargets\u306e\u5b9f\u88c5 - -OpenIDE-Module-Short-Description=Preview SPI\u306e\u5b9f\u88c5 +OpenIDE-Module-Long-Description=Item Builders, Renderers \u53ca\u3073 RenderTargets\u306e\u5b9f\u88c5 +OpenIDE-Module-Short-Description=Preview SPI\u306e\u5b9f\u88c5 diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_ko.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_ko.properties new file mode 100644 index 0000000000..a41dd56cf9 --- /dev/null +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_ko.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Short-Description=SPI \uBBF8\uB9AC\uBCF4\uAE30 \uAD6C\uD604 +OpenIDE-Module-Long-Description=\uC544\uC774\uD15C \uBE4C\uB354, \uB80C\uB354 \uB3C4\uAD6C \uBC0F \uB80C\uB354 \uB300\uC0C1\uC758 \uAD6C\uD604 diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_nl.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_nl.properties new file mode 100644 index 0000000000..79bda8f77f --- /dev/null +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_nl.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Implementations of Item Builders, Renderers and RenderTargets +OpenIDE-Module-Short-Description=Implementation of Preview SPI diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_pt_BR.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_pt_BR.properties index d8f5a3a065..585b8f1453 100644 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_pt_BR.properties +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_pt_BR.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio Faria Jr. , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 12\:29+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Implementa\u00e7\u00f5es de Item Builders, Renderers e RenderTargets - -OpenIDE-Module-Short-Description=Implementa\u00e7\u00e3o da SPI de pr\u00e9-visualiza\u00e7\u00e3o +OpenIDE-Module-Long-Description=Implementaηυes de Item Builders, Renderers e RenderTargets +OpenIDE-Module-Short-Description=Implementaηγo da SPI de prι-visualizaηγo diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_ro.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_ro.properties new file mode 100644 index 0000000000..23475ec013 --- /dev/null +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_ro.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Long-Description=Implement\u0103ri ale constructorilor de elemente, randatorilor \u0219i \u021Bintelor de randare +OpenIDE-Module-Short-Description=Implementarea SPI-ului de previzualizare diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_ru.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_ru.properties index dd6258152f..d18d19c24e 100644 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_ru.properties +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_ru.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-23 07\:20+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043b\u044f Item Builders, Renderers \u0438 RenderTargets - -OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f Preview SPI +OpenIDE-Module-Long-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043b\u044f Item Builders, Renderers \u0438 RenderTargets +OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f Preview SPI diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_th.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_tr.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_tr.properties new file mode 100644 index 0000000000..79bda8f77f --- /dev/null +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_tr.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Implementations of Item Builders, Renderers and RenderTargets +OpenIDE-Module-Short-Description=Implementation of Preview SPI diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_uk.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_uk.properties new file mode 100644 index 0000000000..9437c7b95c --- /dev/null +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_uk.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=\u0420\u0435\u0430\u043B\u0456\u0437\u0430\u0446\u0456\u0457 Item Builders, Renderers \u0456 RenderTargets +OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043B\u0456\u0437\u0430\u0446\u0456\u044F Preview SPI diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_zh_CN.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_zh_CN.properties index dd672b04b1..8ebd81fbd5 100644 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_zh_CN.properties +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_zh_CN.properties @@ -1,10 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:21+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u5143\u4ef6\u4ea7\u751f\u5668\u3001\u6e32\u67d3\u5668\u548c\u6e32\u67d3\u5668\u76ee\u6807\u7684\u5b9e\u73b0 - -OpenIDE-Module-Short-Description=\u9884\u89c8SPI\u7684\u5b9e\u73b0 +OpenIDE-Module-Long-Description=\u5143\u4ef6\u4ea7\u751f\u5668\u3001\u6e32\u67d3\u5668\u548c\u6e32\u67d3\u5668\u76ee\u6807\u7684\u5b9e\u73b0 +OpenIDE-Module-Short-Description=\u9884\u89c8SPI\u7684\u5b9e\u73b0 diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_zh_TW.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_zh_TW.properties new file mode 100644 index 0000000000..79bda8f77f --- /dev/null +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/Bundle_zh_TW.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Implementations of Item Builders, Renderers and RenderTargets +OpenIDE-Module-Short-Description=Implementation of Preview SPI diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/cs.po b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/cs.po deleted file mode 100644 index 9698044e03..0000000000 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/cs.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-29 19:27+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ZavedenΓ­ sestavitelΕ― poloΕΎek, vykreslovačů a cΓ­le vykreslenΓ­" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ZavedenΓ­ nΓ‘hledu SPI" diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/es.po b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/es.po deleted file mode 100644 index 81cc0fda74..0000000000 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/es.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 21:59+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Implementaciones de Item Builders, Renderers y RenderTargets" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplementaciΓ³n de la SPI de Preview" diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/fr.po b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/fr.po deleted file mode 100644 index afd86627cd..0000000000 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/fr.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 12:51+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ImplΓ©mentation des Item Builders, Renderers et RenderTargets" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplΓ©mentation du Preview SPI" diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/ja.po b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/ja.po deleted file mode 100644 index 532fb6cc09..0000000000 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 09:48+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Item Builders, Renderers 及び RenderTargetsγεŸθ£…" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Preview SPIγεŸθ£…" diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/org-gephi-preview-plugin.pot b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/org-gephi-preview-plugin.pot deleted file mode 100644 index 9345b9e3a8..0000000000 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/org-gephi-preview-plugin.pot +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Implementations of Item Builders, Renderers ans RenderTargets" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implementation of Preview SPI" diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/pt_BR.po b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/pt_BR.po deleted file mode 100644 index b51a77af3c..0000000000 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/pt_BR.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio Faria Jr. , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 12:29+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ImplementaΓ§Γ΅es de Item Builders, Renderers e RenderTargets" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplementaΓ§Γ£o da SPI de prΓ©-visualizaΓ§Γ£o" diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle.properties index 9979a18ce7..91b4f55170 100644 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle.properties +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle.properties @@ -1,71 +1,89 @@ -NodeRenderer.name = Default nodes -NodeRenderer.property.borderWidth.displayName = Border Width -NodeRenderer.property.borderWidth.description = -NodeRenderer.property.borderColor.displayName = Border Color -NodeRenderer.property.borderColor.description = -NodeRenderer.property.opacity.displayName = opacity -NodeRenderer.property.opacity.description = - -EdgeRenderer.name = Default edges -EdgeRenderer.property.display.displayName = Show Edges -EdgeRenderer.property.display.description = -EdgeRenderer.property.thickness.displayName = Thickness -EdgeRenderer.property.thickness.description = -EdgeRenderer.property.rescaleWeight.displayName = Rescale weight -EdgeRenderer.property.rescaleWeight.description = -EdgeRenderer.property.curvedEdges.displayName = Curved -EdgeRenderer.property.curvedEdges.description = -EdgeRenderer.property.color.displayName = Color -EdgeRenderer.property.color.description = -EdgeRenderer.property.opacity.displayName = Opacity -EdgeRenderer.property.opacity.description = -EdgeRenderer.property.radius.displayName = Radius -EdgeRenderer.property.radius.description = - -NodeLabelRenderer.name = Default node labels -NodeLabelRenderer.property.display.displayName = Show Labels -NodeLabelRenderer.property.display.description = -NodeLabelRenderer.property.font.displayName = Font -NodeLabelRenderer.property.font.description = -NodeLabelRenderer.property.proportionalSize.displayName = Proportional size -NodeLabelRenderer.property.proportionalSize.description = -NodeLabelRenderer.property.color.displayName = Color -NodeLabelRenderer.property.color.description = -NodeLabelRenderer.property.shorten.displayName = Shorten label -NodeLabelRenderer.property.shorten.description = -NodeLabelRenderer.property.maxchar.displayName = Max characters -NodeLabelRenderer.property.maxchar.description = -NodeLabelRenderer.property.outlineSize.displayName = Outline size -NodeLabelRenderer.property.outlineSize.description = -NodeLabelRenderer.property.outlineColor.displayName = Outline color -NodeLabelRenderer.property.outlineColor.description = -NodeLabelRenderer.property.outlineOpacity.displayName = Outline opacity -NodeLabelRenderer.property.outlineOpacity.description = -NodeLabelRenderer.property.box.displayName = Box -NodeLabelRenderer.property.box.description = -NodeLabelRenderer.property.box.color.displayName = Box color -NodeLabelRenderer.property.box.color.description = -NodeLabelRenderer.property.box.opacity.displayName = Box opacity -NodeLabelRenderer.property.box.opacity.description = - -EdgeLabelRenderer.name = Default edge labels -EdgeLabelRenderer.property.display.displayName = Show Labels -EdgeLabelRenderer.property.display.description = -EdgeLabelRenderer.property.font.displayName = Font -EdgeLabelRenderer.property.font.description = -EdgeLabelRenderer.property.color.displayName = Color -EdgeLabelRenderer.property.color.description = -EdgeLabelRenderer.property.shorten.displayName = Shorten label -EdgeLabelRenderer.property.shorten.description = -EdgeLabelRenderer.property.maxchar.displayName = Max characters -EdgeLabelRenderer.property.maxchar.description = -EdgeLabelRenderer.property.outlineSize.displayName = Outline size -EdgeLabelRenderer.property.outlineSize.description = -EdgeLabelRenderer.property.outlineColor.displayName = Outline color -EdgeLabelRenderer.property.outlineColor.description = -EdgeLabelRenderer.property.outlineOpacity.displayName = Outline opacity -EdgeLabelRenderer.property.outlineOpacity.description = - -ArrowRenderer.name = Default edge arrows -ArrowRenderer.property.size.displayName = Size +NodeRenderer.name = Default nodes +NodeRenderer.property.fixedBorderWidth.displayName = Fixed Border Width +NodeRenderer.property.fixedBorderWidth.description = The border has a fixed size. If false, it scales with the node size like in "Overview". +NodeRenderer.property.borderWidth.displayName = Border Width +NodeRenderer.property.borderWidth.description = +NodeRenderer.property.borderColor.displayName = Border Color +NodeRenderer.property.borderColor.description = +NodeRenderer.property.opacity.displayName = Opacity +NodeRenderer.property.opacity.description = +NodeRenderer.property.perNodeOpacity.displayName = Per-Node Opacity +NodeRenderer.property.perNodeOpacity.description = Use opacity defined at node level. If true, renderer's opacity property will be ignored. + +EdgeRenderer.name = Default edges +EdgeRenderer.property.display.displayName = Show Edges +EdgeRenderer.property.display.description = +EdgeRenderer.property.thickness.displayName = Thickness +EdgeRenderer.property.thickness.description = +EdgeRenderer.property.useWeight.displayName = Use weight +EdgeRenderer.property.useWeight.description = Use edge weight to determine thickness +EdgeRenderer.property.rescaleWeight.displayName = Rescale weight +EdgeRenderer.property.rescaleWeight.description = Rescale edge weights to a normalized range +EdgeRenderer.property.rescaleWeight.min.displayName = Min. rescaled weight +EdgeRenderer.property.rescaleWeight.min.description = Minimum allowed weight after rescaling +EdgeRenderer.property.rescaleWeight.max.displayName = Max. rescaled weight +EdgeRenderer.property.rescaleWeight.max.description = Maximum allowed weight after rescaling +EdgeRenderer.property.curvedEdges.displayName = Curved +EdgeRenderer.property.curvedEdges.description = +EdgeRenderer.property.color.displayName = Color +EdgeRenderer.property.color.description = +EdgeRenderer.property.opacity.displayName = Opacity +EdgeRenderer.property.opacity.description = +EdgeRenderer.property.radius.displayName = Radius +EdgeRenderer.property.radius.description = + +NodeLabelRenderer.name = Default node labels +NodeLabelRenderer.property.display.displayName = Show Labels +NodeLabelRenderer.property.display.description = +NodeLabelRenderer.property.customFont.displayName = Customize Font +NodeLabelRenderer.property.customFont.description = If not, uses the same font as Overview +NodeLabelRenderer.property.font.displayName = Font +NodeLabelRenderer.property.font.description = +NodeLabelRenderer.property.proportionalSize.displayName = Proportional size +NodeLabelRenderer.property.proportionalSize.description = +NodeLabelRenderer.property.color.displayName = Color +NodeLabelRenderer.property.color.description = +NodeLabelRenderer.property.shorten.displayName = Shorten label +NodeLabelRenderer.property.shorten.description = +NodeLabelRenderer.property.maxchar.displayName = Max characters +NodeLabelRenderer.property.maxchar.description = +NodeLabelRenderer.property.outlineSize.displayName = Outline size +NodeLabelRenderer.property.outlineSize.description = +NodeLabelRenderer.property.outlineColor.displayName = Outline color +NodeLabelRenderer.property.outlineColor.description = +NodeLabelRenderer.property.outlineOpacity.displayName = Outline opacity +NodeLabelRenderer.property.outlineOpacity.description = +NodeLabelRenderer.property.box.displayName = Box +NodeLabelRenderer.property.box.description = +NodeLabelRenderer.property.box.color.displayName = Box color +NodeLabelRenderer.property.box.color.description = +NodeLabelRenderer.property.box.opacity.displayName = Box opacity +NodeLabelRenderer.property.box.opacity.description = +NodeLabelRenderer.property.avoidOverlap.displayName = Avoid label overlap +NodeLabelRenderer.property.avoidOverlap.description = Hide node labels that overlap with labels of larger nodes +NodeLabelRenderer.property.overlapGridSize.displayName = Overlap grid size +NodeLabelRenderer.property.overlapGridSize.description = Grid cell size (in graph coordinate units) used by the label overlap avoidance algorithm, the smaller the value, the more precise the overlap avoidance is. + +EdgeLabelRenderer.name = Default edge labels +EdgeLabelRenderer.property.display.displayName = Show Labels +EdgeLabelRenderer.property.display.description = +EdgeLabelRenderer.property.customFont.displayName = Customize Font +EdgeLabelRenderer.property.customFont.description = If not, uses the same font as Overview +EdgeLabelRenderer.property.font.displayName = Font +EdgeLabelRenderer.property.font.description = +EdgeLabelRenderer.property.color.displayName = Color +EdgeLabelRenderer.property.color.description = +EdgeLabelRenderer.property.shorten.displayName = Shorten label +EdgeLabelRenderer.property.shorten.description = +EdgeLabelRenderer.property.maxchar.displayName = Max characters +EdgeLabelRenderer.property.maxchar.description = +EdgeLabelRenderer.property.outlineSize.displayName = Outline size +EdgeLabelRenderer.property.outlineSize.description = +EdgeLabelRenderer.property.outlineColor.displayName = Outline color +EdgeLabelRenderer.property.outlineColor.description = +EdgeLabelRenderer.property.outlineOpacity.displayName = Outline opacity +EdgeLabelRenderer.property.outlineOpacity.description = + +ArrowRenderer.name = Default edge arrows +ArrowRenderer.property.size.displayName = Size ArrowRenderer.property.size.description = \ No newline at end of file diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_ar.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_ca.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_ca.properties new file mode 100644 index 0000000000..6ff80ffb93 --- /dev/null +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_ca.properties @@ -0,0 +1,73 @@ +NodeRenderer.name=Nodes predeterminats +NodeRenderer.property.borderWidth.displayName=Amplada de la vora +NodeRenderer.property.borderWidth.description= +NodeRenderer.property.borderColor.displayName=Color de la vora +NodeRenderer.property.borderColor.description= +NodeRenderer.property.opacity.displayName=opacitat +NodeRenderer.property.opacity.description= +NodeRenderer.property.perNodeOpacity.displayName=Per-Node Opacity +NodeRenderer.property.perNodeOpacity.description=Use opacity defined at node level. If true, renderer's opacity property will be ignored. +EdgeRenderer.name=Arestes predeterminades +EdgeRenderer.property.display.displayName=Mostra les arestes +EdgeRenderer.property.display.description= +EdgeRenderer.property.thickness.displayName=Thickness +EdgeRenderer.property.thickness.description= +EdgeRenderer.property.rescaleWeight.displayName=Redimensiona el pes +EdgeRenderer.property.rescaleWeight.description=Rescale edge weights to a normalized range +EdgeRenderer.property.rescaleWeight.min.displayName=Min. rescaled weight +EdgeRenderer.property.rescaleWeight.min.description=Mininum allowed weight after rescaling +EdgeRenderer.property.rescaleWeight.max.displayName=Max. rescaled weight +EdgeRenderer.property.rescaleWeight.max.description=Maximum allowed weight after rescaling +EdgeRenderer.property.curvedEdges.displayName=Curvat +EdgeRenderer.property.curvedEdges.description= +EdgeRenderer.property.color.displayName=Color +EdgeRenderer.property.color.description= +EdgeRenderer.property.opacity.displayName=Opacitat +EdgeRenderer.property.opacity.description= +EdgeRenderer.property.radius.displayName=Radi +EdgeRenderer.property.radius.description= +NodeLabelRenderer.name=Etiquetes del node predeterminades +NodeLabelRenderer.property.display.displayName=Mostra les etiquetes +NodeLabelRenderer.property.display.description= +NodeLabelRenderer.property.font.displayName=Tipus de lletra +NodeLabelRenderer.property.font.description= +NodeLabelRenderer.property.proportionalSize.displayName=Mida proporcional +NodeLabelRenderer.property.proportionalSize.description= +NodeLabelRenderer.property.color.displayName=Color +NodeLabelRenderer.property.color.description= +NodeLabelRenderer.property.shorten.displayName=Escurηa l'etiqueta +NodeLabelRenderer.property.shorten.description= +NodeLabelRenderer.property.maxchar.displayName=Nombre mΰxim de carΰcters +NodeLabelRenderer.property.maxchar.description= +NodeLabelRenderer.property.outlineSize.displayName=Outline size +NodeLabelRenderer.property.outlineSize.description= +NodeLabelRenderer.property.outlineColor.displayName=Outline color +NodeLabelRenderer.property.outlineColor.description= +NodeLabelRenderer.property.outlineOpacity.displayName=Outline opacity +NodeLabelRenderer.property.outlineOpacity.description= +NodeLabelRenderer.property.box.displayName=Caixa +NodeLabelRenderer.property.box.description= +NodeLabelRenderer.property.box.color.displayName=Color de la caixa +NodeLabelRenderer.property.box.color.description= +NodeLabelRenderer.property.box.opacity.displayName=Opacitat de la caixa +NodeLabelRenderer.property.box.opacity.description= +EdgeLabelRenderer.name=Default edge labels +EdgeLabelRenderer.property.display.displayName=Mostra les etiquetes +EdgeLabelRenderer.property.display.description= +EdgeLabelRenderer.property.font.displayName=Tipus de lletra +EdgeLabelRenderer.property.font.description= +EdgeLabelRenderer.property.color.displayName=Color +EdgeLabelRenderer.property.color.description= +EdgeLabelRenderer.property.shorten.displayName=Escurηa l'etiqueta +EdgeLabelRenderer.property.shorten.description= +EdgeLabelRenderer.property.maxchar.displayName=Nombre mΰxim de carΰcters +EdgeLabelRenderer.property.maxchar.description= +EdgeLabelRenderer.property.outlineSize.displayName=Outline size +EdgeLabelRenderer.property.outlineSize.description= +EdgeLabelRenderer.property.outlineColor.displayName=Outline color +EdgeLabelRenderer.property.outlineColor.description= +EdgeLabelRenderer.property.outlineOpacity.displayName=Outline opacity +EdgeLabelRenderer.property.outlineOpacity.description= +ArrowRenderer.name=Fletxes de les arestes per defecte +ArrowRenderer.property.size.displayName=Mida +ArrowRenderer.property.size.description= diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_cs.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_cs.properties index 039c9be04c..ce1f8f53b3 100644 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_cs.properties +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_cs.properties @@ -1,79 +1,77 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-12 12\:58+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -NodeRenderer.name=V\u00fdchoz\u00ed uzly - -NodeRenderer.property.borderWidth.displayName=\u0160\u00ed\u0159ka ohrani\u010den\u00ed - -NodeRenderer.property.borderColor.displayName=Barva ohrani\u010den\u00ed - -NodeRenderer.property.opacity.displayName=nepr\u016fhlednost - -EdgeRenderer.name=V\u00fdchoz\u00ed hrany - -EdgeRenderer.property.display.displayName=Zobrazit hrany - -EdgeRenderer.property.thickness.displayName=Tlou\u0161\u0165ka - -EdgeRenderer.property.rescaleWeight.displayName=Znovu zm\u011b\u0159it v\u00e1hu - -EdgeRenderer.property.curvedEdges.displayName=Obl\u00e9 - -EdgeRenderer.property.color.displayName=Barva - -EdgeRenderer.property.opacity.displayName=Nepr\u016fhlednost - -EdgeRenderer.property.radius.displayName=Polom\u011br - -NodeLabelRenderer.name=V\u00fdchoz\u00ed \u0161t\u00edtky uzlu - -NodeLabelRenderer.property.display.displayName=Zobrazit \u0161t\u00edtky - -NodeLabelRenderer.property.font.displayName=P\u00edsmo - -NodeLabelRenderer.property.proportionalSize.displayName=Pom\u011br velikosti - -NodeLabelRenderer.property.color.displayName=Barva - -NodeLabelRenderer.property.shorten.displayName=Zkr\u00e1tit \u0161t\u00edtek - -NodeLabelRenderer.property.maxchar.displayName=Max znak\u016f - -NodeLabelRenderer.property.outlineSize.displayName=Velikost obrysu - -NodeLabelRenderer.property.outlineColor.displayName=Barva obrysu - -NodeLabelRenderer.property.outlineOpacity.displayName=Nepr\u016fhlednost obrysu - -NodeLabelRenderer.property.box.displayName=R\u00e1me\u010dek - -NodeLabelRenderer.property.box.color.displayName=Barva r\u00e1me\u010dku - -NodeLabelRenderer.property.box.opacity.displayName=Nepr\u016fhlednost r\u00e1me\u010dku - -EdgeLabelRenderer.name=V\u00fdchoz\u00ed \u0161t\u00edtky hrany - -EdgeLabelRenderer.property.display.displayName=Zobrazit \u0161t\u00edtky - -EdgeLabelRenderer.property.font.displayName=P\u00edsmo - -EdgeLabelRenderer.property.color.displayName=Barva - -EdgeLabelRenderer.property.shorten.displayName=Zkr\u00e1tit \u0161t\u00edtek - -EdgeLabelRenderer.property.maxchar.displayName=Max znak\u016f - -EdgeLabelRenderer.property.outlineSize.displayName=Velikost obrysu - -EdgeLabelRenderer.property.outlineColor.displayName=Barva obrysu - -EdgeLabelRenderer.property.outlineOpacity.displayName=Nepr\u016fhlednost obrysu - -ArrowRenderer.name=V\u00fdchoz\u00ed \u0161ipky hrany - -ArrowRenderer.property.size.displayName=Velikost +NodeRenderer.name = Vύchozν uzly +NodeRenderer.property.borderWidth.displayName = \u0160ν\u0159ka ohrani\u010denν +NodeRenderer.property.borderWidth.description = +NodeRenderer.property.borderColor.displayName = Barva ohrani\u010denν +NodeRenderer.property.borderColor.description = +NodeRenderer.property.opacity.displayName = nepr\u016fhlednost +NodeRenderer.property.opacity.description = +# NodeRenderer.property.perNodeOpacity.displayName = Per-Node Opacity +# NodeRenderer.property.perNodeOpacity.description = Use opacity defined at node level. If true, renderer's opacity property will be ignored. + +EdgeRenderer.name = Vύchozν hrany +EdgeRenderer.property.display.displayName = Zobrazit hrany +EdgeRenderer.property.display.description = +EdgeRenderer.property.thickness.displayName = Tlou\u0161\u0165ka +EdgeRenderer.property.thickness.description = +EdgeRenderer.property.rescaleWeight.displayName = Znovu zm\u011b\u0159it vαhu +# EdgeRenderer.property.rescaleWeight.description = Rescale edge weights to a normalized range +# EdgeRenderer.property.rescaleWeight.min.displayName = Min. rescaled weight +# EdgeRenderer.property.rescaleWeight.min.description = Mininum allowed weight after rescaling +# EdgeRenderer.property.rescaleWeight.max.displayName = Max. rescaled weight +# EdgeRenderer.property.rescaleWeight.max.description = Maximum allowed weight after rescaling +EdgeRenderer.property.curvedEdges.displayName = Oblι +EdgeRenderer.property.curvedEdges.description = +EdgeRenderer.property.color.displayName = Barva +EdgeRenderer.property.color.description = +EdgeRenderer.property.opacity.displayName = Nepr\u016fhlednost +EdgeRenderer.property.opacity.description = +EdgeRenderer.property.radius.displayName = Polom\u011br +EdgeRenderer.property.radius.description = + +NodeLabelRenderer.name = Vύchozν \u0161tνtky jmenovky +NodeLabelRenderer.property.display.displayName = Zobrazit jmenovky +NodeLabelRenderer.property.display.description = +NodeLabelRenderer.property.font.displayName = Pνsmo +NodeLabelRenderer.property.font.description = +NodeLabelRenderer.property.proportionalSize.displayName = Pom\u011br velikosti +NodeLabelRenderer.property.proportionalSize.description = +NodeLabelRenderer.property.color.displayName = Barva +NodeLabelRenderer.property.color.description = +NodeLabelRenderer.property.shorten.displayName = Zkrαtit jmenovku +NodeLabelRenderer.property.shorten.description = +NodeLabelRenderer.property.maxchar.displayName = Max znak\u016f +NodeLabelRenderer.property.maxchar.description = +NodeLabelRenderer.property.outlineSize.displayName = Velikost obrysu +NodeLabelRenderer.property.outlineSize.description = +NodeLabelRenderer.property.outlineColor.displayName = Barva obrysu +NodeLabelRenderer.property.outlineColor.description = +NodeLabelRenderer.property.outlineOpacity.displayName = Nepr\u016fhlednost obrysu +NodeLabelRenderer.property.outlineOpacity.description = +NodeLabelRenderer.property.box.displayName = Rαme\u010dek +NodeLabelRenderer.property.box.description = +NodeLabelRenderer.property.box.color.displayName = Barva rαme\u010dku +NodeLabelRenderer.property.box.color.description = +NodeLabelRenderer.property.box.opacity.displayName = Nepr\u016fhlednost rαme\u010dku +NodeLabelRenderer.property.box.opacity.description = + +EdgeLabelRenderer.name = Vύchozν jmenovky hrany +EdgeLabelRenderer.property.display.displayName = Zobrazit jmenovky +EdgeLabelRenderer.property.display.description = +EdgeLabelRenderer.property.font.displayName = Pνsmo +EdgeLabelRenderer.property.font.description = +EdgeLabelRenderer.property.color.displayName = Barva +EdgeLabelRenderer.property.color.description = +EdgeLabelRenderer.property.shorten.displayName = Zkrαtit jmenovky +EdgeLabelRenderer.property.shorten.description = +EdgeLabelRenderer.property.maxchar.displayName = Max znak\u016f +EdgeLabelRenderer.property.maxchar.description = +EdgeLabelRenderer.property.outlineSize.displayName = Velikost obrysu +EdgeLabelRenderer.property.outlineSize.description = +EdgeLabelRenderer.property.outlineColor.displayName = Barva obrysu +EdgeLabelRenderer.property.outlineColor.description = +EdgeLabelRenderer.property.outlineOpacity.displayName = Nepr\u016fhlednost obrysu +EdgeLabelRenderer.property.outlineOpacity.description = + +ArrowRenderer.name = Vύchozν \u0161ipky hrany +ArrowRenderer.property.size.displayName = Velikost +ArrowRenderer.property.size.description = diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_de.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_de.properties new file mode 100644 index 0000000000..c5088a56d6 --- /dev/null +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_de.properties @@ -0,0 +1,77 @@ +NodeRenderer.name = Standardknoten +NodeRenderer.property.borderWidth.displayName = Rahmenbreite +NodeRenderer.property.borderWidth.description = +NodeRenderer.property.borderColor.displayName = Rahmenfarbe +NodeRenderer.property.borderColor.description = +NodeRenderer.property.opacity.displayName = Deckkraft +NodeRenderer.property.opacity.description = +# NodeRenderer.property.perNodeOpacity.displayName = Per-Node Opacity +# NodeRenderer.property.perNodeOpacity.description = Use opacity defined at node level. If true, renderer's opacity property will be ignored. + +EdgeRenderer.name = Standardkante +EdgeRenderer.property.display.displayName = Kanten anzeigen +EdgeRenderer.property.display.description = +EdgeRenderer.property.thickness.displayName = Dicke +EdgeRenderer.property.thickness.description = +EdgeRenderer.property.rescaleWeight.displayName = Gewicht neu skalieren +# EdgeRenderer.property.rescaleWeight.description = Rescale edge weights to a normalized range +# EdgeRenderer.property.rescaleWeight.min.displayName = Min. rescaled weight +# EdgeRenderer.property.rescaleWeight.min.description = Mininum allowed weight after rescaling +# EdgeRenderer.property.rescaleWeight.max.displayName = Max. rescaled weight +# EdgeRenderer.property.rescaleWeight.max.description = Maximum allowed weight after rescaling +EdgeRenderer.property.curvedEdges.displayName = Bogenfφrmig +EdgeRenderer.property.curvedEdges.description = +EdgeRenderer.property.color.displayName = Farbe +EdgeRenderer.property.color.description = +EdgeRenderer.property.opacity.displayName = Deckkraft +EdgeRenderer.property.opacity.description = +EdgeRenderer.property.radius.displayName = Radius +EdgeRenderer.property.radius.description = + +NodeLabelRenderer.name = Standard Knotenbeschriftung +NodeLabelRenderer.property.display.displayName = Beschriftung anzeigen +NodeLabelRenderer.property.display.description = +NodeLabelRenderer.property.font.displayName = Schriftart +NodeLabelRenderer.property.font.description = +NodeLabelRenderer.property.proportionalSize.displayName = Proportionale Grφίe +NodeLabelRenderer.property.proportionalSize.description = +NodeLabelRenderer.property.color.displayName = Farbe +NodeLabelRenderer.property.color.description = +NodeLabelRenderer.property.shorten.displayName = Beschriftung abkόrzen +NodeLabelRenderer.property.shorten.description = +NodeLabelRenderer.property.maxchar.displayName = Maximale Zeichen +NodeLabelRenderer.property.maxchar.description = +NodeLabelRenderer.property.outlineSize.displayName = Outline Grφίe +NodeLabelRenderer.property.outlineSize.description = +NodeLabelRenderer.property.outlineColor.displayName = Outline Farbe +NodeLabelRenderer.property.outlineColor.description = +NodeLabelRenderer.property.outlineOpacity.displayName = Outline Deckkraft +NodeLabelRenderer.property.outlineOpacity.description = +NodeLabelRenderer.property.box.displayName = Box +NodeLabelRenderer.property.box.description = +NodeLabelRenderer.property.box.color.displayName = Box Farbe +NodeLabelRenderer.property.box.color.description = +NodeLabelRenderer.property.box.opacity.displayName = Box Deckkraft +NodeLabelRenderer.property.box.opacity.description = + +EdgeLabelRenderer.name = Standard Kantenbeschriftung +EdgeLabelRenderer.property.display.displayName = Beschriftung anzeigen +EdgeLabelRenderer.property.display.description = +EdgeLabelRenderer.property.font.displayName = Schriftart +EdgeLabelRenderer.property.font.description = +EdgeLabelRenderer.property.color.displayName = Farbe +EdgeLabelRenderer.property.color.description = +EdgeLabelRenderer.property.shorten.displayName = Beschriftung abkόrzen +EdgeLabelRenderer.property.shorten.description = +EdgeLabelRenderer.property.maxchar.displayName = Maximale Zeichen +EdgeLabelRenderer.property.maxchar.description = +EdgeLabelRenderer.property.outlineSize.displayName = Outline Grφίe +EdgeLabelRenderer.property.outlineSize.description = +EdgeLabelRenderer.property.outlineColor.displayName = Outline Farbe +EdgeLabelRenderer.property.outlineColor.description = +EdgeLabelRenderer.property.outlineOpacity.displayName = Outline Deckkraft +EdgeLabelRenderer.property.outlineOpacity.description = + +ArrowRenderer.name = Standard Kantenpfeile +ArrowRenderer.property.size.displayName = Grφίe +ArrowRenderer.property.size.description = diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_es.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_es.properties index 3c25f9ae23..38060be43e 100644 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_es.properties +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_es.properties @@ -1,79 +1,75 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-10 21\:58+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - NodeRenderer.name=Nodos por defecto - NodeRenderer.property.borderWidth.displayName=Ancho de borde - +NodeRenderer.property.borderWidth.description= NodeRenderer.property.borderColor.displayName=Color de borde - +NodeRenderer.property.borderColor.description= NodeRenderer.property.opacity.displayName=Opacidad - +NodeRenderer.property.opacity.description= +NodeRenderer.property.perNodeOpacity.displayName=Opacidad por nodo +NodeRenderer.property.perNodeOpacity.description=Utilizar opacidad definida a nivel de nodo. Si estα activado, la propiedad de opacidad global del renderer serα ignorada. EdgeRenderer.name=Aristas por defecto - EdgeRenderer.property.display.displayName=Mostrar aristas - +EdgeRenderer.property.display.description= EdgeRenderer.property.thickness.displayName=Grosor - +EdgeRenderer.property.thickness.description= EdgeRenderer.property.rescaleWeight.displayName=Reescalar pesos - +EdgeRenderer.property.rescaleWeight.description=Reescalar pesos de las aristas a un rango normalizado +EdgeRenderer.property.rescaleWeight.min.displayName=Peso reescalado mνnimo +EdgeRenderer.property.rescaleWeight.min.description=Peso m\u00EDnimo autorizado tras el reajuste +EdgeRenderer.property.rescaleWeight.max.displayName=Peso reescalado mαximo +EdgeRenderer.property.rescaleWeight.max.description=Peso mαxio permitido al reescalar EdgeRenderer.property.curvedEdges.displayName=Curvas - +EdgeRenderer.property.curvedEdges.description= EdgeRenderer.property.color.displayName=Color - +EdgeRenderer.property.color.description= EdgeRenderer.property.opacity.displayName=Opacidad - +EdgeRenderer.property.opacity.description= EdgeRenderer.property.radius.displayName=Radio - +EdgeRenderer.property.radius.description= NodeLabelRenderer.name=Etiquetas de nodos por defecto - NodeLabelRenderer.property.display.displayName=Mostrar etiquetas - +NodeLabelRenderer.property.display.description= NodeLabelRenderer.property.font.displayName=Fuente - -NodeLabelRenderer.property.proportionalSize.displayName=Tama\u00f1o proporcional - +NodeLabelRenderer.property.font.description= +NodeLabelRenderer.property.proportionalSize.displayName=Tamaρo proporcional +NodeLabelRenderer.property.proportionalSize.description= NodeLabelRenderer.property.color.displayName=Color - +NodeLabelRenderer.property.color.description= NodeLabelRenderer.property.shorten.displayName=Acortar etiquetas - -NodeLabelRenderer.property.maxchar.displayName=Car\u00e1cteres m\u00e1ximos - -NodeLabelRenderer.property.outlineSize.displayName=Tama\u00f1o del contorno - +NodeLabelRenderer.property.shorten.description= +NodeLabelRenderer.property.maxchar.displayName=Carαcteres mαximos +NodeLabelRenderer.property.maxchar.description= +NodeLabelRenderer.property.outlineSize.displayName=Tamaρo del contorno +NodeLabelRenderer.property.outlineSize.description= NodeLabelRenderer.property.outlineColor.displayName=Color del contorno - +NodeLabelRenderer.property.outlineColor.description= NodeLabelRenderer.property.outlineOpacity.displayName=Opacidad del contorno - +NodeLabelRenderer.property.outlineOpacity.description= NodeLabelRenderer.property.box.displayName=Caja - +NodeLabelRenderer.property.box.description= NodeLabelRenderer.property.box.color.displayName=Color de la caja - +NodeLabelRenderer.property.box.color.description= NodeLabelRenderer.property.box.opacity.displayName=Opacidad de la caja - +NodeLabelRenderer.property.box.opacity.description= EdgeLabelRenderer.name=Etiquetas de aristas por defecto - EdgeLabelRenderer.property.display.displayName=Mostrar etiquetas - +EdgeLabelRenderer.property.display.description= EdgeLabelRenderer.property.font.displayName=Fuente - +EdgeLabelRenderer.property.font.description= EdgeLabelRenderer.property.color.displayName=Color - +EdgeLabelRenderer.property.color.description= EdgeLabelRenderer.property.shorten.displayName=Acortar etiquetas - -EdgeLabelRenderer.property.maxchar.displayName=Car\u00e1cteres m\u00e1ximos - -EdgeLabelRenderer.property.outlineSize.displayName=Tama\u00f1o del contorno - +EdgeLabelRenderer.property.shorten.description= +EdgeLabelRenderer.property.maxchar.displayName=Carαcteres mαximos +EdgeLabelRenderer.property.maxchar.description= +EdgeLabelRenderer.property.outlineSize.displayName=Tamaρo del contorno +EdgeLabelRenderer.property.outlineSize.description= EdgeLabelRenderer.property.outlineColor.displayName=Color del contorno - +EdgeLabelRenderer.property.outlineColor.description= EdgeLabelRenderer.property.outlineOpacity.displayName=Opacidad del contorno - +EdgeLabelRenderer.property.outlineOpacity.description= ArrowRenderer.name=Flechas de aristas por defecto - -ArrowRenderer.property.size.displayName=Tama\u00f1o +ArrowRenderer.property.size.displayName=Tamaρo +ArrowRenderer.property.size.description= +NodeRenderer.property.fixedBorderWidth.displayName=Anchura fija del borde +NodeRenderer.property.fixedBorderWidth.description=El borde tiene un tama\u00F1o fijo. Si es falso, se escala con el tama\u00F1o del nodo como en la "Descripci\u00F3n general". diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_fr.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_fr.properties index 88393d6495..5475468686 100644 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_fr.properties +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_fr.properties @@ -1,79 +1,78 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-15 14\:03+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -NodeRenderer.name=Noeuds par d\u00e9faut - +NodeRenderer.name=Noeuds par dιfaut NodeRenderer.property.borderWidth.displayName=Largeur de la bordure - +NodeRenderer.property.borderWidth.description= NodeRenderer.property.borderColor.displayName=Couleur de la bordure - -NodeRenderer.property.opacity.displayName=Opacit\u00e9 - -EdgeRenderer.name=Liens par d\u00e9faut - +NodeRenderer.property.borderColor.description= +NodeRenderer.property.opacity.displayName=Opacitι +NodeRenderer.property.opacity.description= +NodeRenderer.property.perNodeOpacity.displayName=Opacitι par n\u0153ud +NodeRenderer.property.perNodeOpacity.description=Utiliser l'opacitι dιfinie au niveau des n\u0153uds. Si vrai, la propriιtι d'opacitι du renderer sera ignorι. +EdgeRenderer.name=Liens par dιfaut EdgeRenderer.property.display.displayName=Afficher les liens - -EdgeRenderer.property.thickness.displayName=\u00c9paisseur - +EdgeRenderer.property.display.description= +EdgeRenderer.property.thickness.displayName=Ιpaisseur +EdgeRenderer.property.thickness.description= EdgeRenderer.property.rescaleWeight.displayName=Redimensionner le poids - +# EdgeRenderer.property.rescaleWeight.description = Rescale edge weights to a normalized range +# EdgeRenderer.property.rescaleWeight.min.displayName = Min. rescaled weight +EdgeRenderer.property.rescaleWeight.min.description=Poids minimum autorisι aprθs redimensionnement +# EdgeRenderer.property.rescaleWeight.max.displayName = Max. rescaled weight +EdgeRenderer.property.rescaleWeight.max.description=Poids maximal autorisι aprθs redimensionnement EdgeRenderer.property.curvedEdges.displayName=Courbes - +EdgeRenderer.property.curvedEdges.description= EdgeRenderer.property.color.displayName=Couleur - -EdgeRenderer.property.opacity.displayName=Opacit\u00e9 - +EdgeRenderer.property.color.description= +EdgeRenderer.property.opacity.displayName=Opacitι +EdgeRenderer.property.opacity.description= EdgeRenderer.property.radius.displayName=Rayon - -NodeLabelRenderer.name=Labels de noeud par d\u00e9faut - +EdgeRenderer.property.radius.description= +NodeLabelRenderer.name=Labels de noeud par dιfaut NodeLabelRenderer.property.display.displayName=Afficher les labels - +NodeLabelRenderer.property.display.description= NodeLabelRenderer.property.font.displayName=Police - +NodeLabelRenderer.property.font.description= NodeLabelRenderer.property.proportionalSize.displayName=Taille proportionnelle - +NodeLabelRenderer.property.proportionalSize.description= NodeLabelRenderer.property.color.displayName=Couleur - +NodeLabelRenderer.property.color.description= NodeLabelRenderer.property.shorten.displayName=Raccourcir les labels - -NodeLabelRenderer.property.maxchar.displayName=Caract\u00e8res max - +NodeLabelRenderer.property.shorten.description= +NodeLabelRenderer.property.maxchar.displayName=Caractθres max +NodeLabelRenderer.property.maxchar.description= NodeLabelRenderer.property.outlineSize.displayName=Taille de contour - +NodeLabelRenderer.property.outlineSize.description= NodeLabelRenderer.property.outlineColor.displayName=Couleur de contour - -NodeLabelRenderer.property.outlineOpacity.displayName=Opacit\u00e9 de contour - +NodeLabelRenderer.property.outlineColor.description= +NodeLabelRenderer.property.outlineOpacity.displayName=Opacitι de contour +NodeLabelRenderer.property.outlineOpacity.description= NodeLabelRenderer.property.box.displayName=Boite - +NodeLabelRenderer.property.box.description= NodeLabelRenderer.property.box.color.displayName=Couleur de boite - -NodeLabelRenderer.property.box.opacity.displayName=Opacit\u00e9 de la boite - -EdgeLabelRenderer.name=Labels de lien par d\u00e9faut - +NodeLabelRenderer.property.box.color.description= +NodeLabelRenderer.property.box.opacity.displayName=Opacitι de la boite +NodeLabelRenderer.property.box.opacity.description= +EdgeLabelRenderer.name=Labels de lien par dιfaut EdgeLabelRenderer.property.display.displayName=Afficher les labels - +EdgeLabelRenderer.property.display.description= EdgeLabelRenderer.property.font.displayName=Police - +EdgeLabelRenderer.property.font.description= EdgeLabelRenderer.property.color.displayName=Couleur - +EdgeLabelRenderer.property.color.description= EdgeLabelRenderer.property.shorten.displayName=Raccourcir les labels - -EdgeLabelRenderer.property.maxchar.displayName=Caract\u00e8res max - +EdgeLabelRenderer.property.shorten.description= +EdgeLabelRenderer.property.maxchar.displayName=Caractθres max +EdgeLabelRenderer.property.maxchar.description= EdgeLabelRenderer.property.outlineSize.displayName=Taille de contour - +EdgeLabelRenderer.property.outlineSize.description= EdgeLabelRenderer.property.outlineColor.displayName=Couleur de contour - -EdgeLabelRenderer.property.outlineOpacity.displayName=Opacit\u00e9 de contour - -ArrowRenderer.name=Fl\u00e8ches de lien par d\u00e9faut - +EdgeLabelRenderer.property.outlineColor.description= +EdgeLabelRenderer.property.outlineOpacity.displayName=Opacitι de contour +EdgeLabelRenderer.property.outlineOpacity.description= +ArrowRenderer.name=Flθches de lien par dιfaut ArrowRenderer.property.size.displayName=Taille +ArrowRenderer.property.size.description= +EdgeRenderer.property.rescaleWeight.min.displayName=Poids min. de la remise \u00E0 l'\u00E9chelle +EdgeRenderer.property.rescaleWeight.max.displayName=Poids max. de la remise \u00E0 l'\u00E9chelle +EdgeRenderer.property.rescaleWeight.description=Mise \u00E0 l'\u00E9chelle du poids des liens vers un intervalle normalis\u00E9 +NodeRenderer.property.fixedBorderWidth.displayName=Largeur de la bordure fixιe +NodeRenderer.property.fixedBorderWidth.description=La bordure a une taille fixe. Si cette option est dιsactivιe, elle s\u2019ajuste ΰ la taille du n\u0153ud, comme dans « Vue d\u2019ensemble ». diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_he.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_he.properties new file mode 100644 index 0000000000..9b72a7ec8f --- /dev/null +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_he.properties @@ -0,0 +1,73 @@ +NodeRenderer.name=Default nodes +NodeRenderer.property.borderWidth.displayName=Border Width +NodeRenderer.property.borderWidth.description= +NodeRenderer.property.borderColor.displayName=Border Color +NodeRenderer.property.borderColor.description= +NodeRenderer.property.opacity.displayName=opacity +NodeRenderer.property.opacity.description= +NodeRenderer.property.perNodeOpacity.displayName=Per-Node Opacity +NodeRenderer.property.perNodeOpacity.description=Use opacity defined at node level. If true, renderer's opacity property will be ignored. +EdgeRenderer.name=Default edges +EdgeRenderer.property.display.displayName=Show Edges +EdgeRenderer.property.display.description= +EdgeRenderer.property.thickness.displayName=Thickness +EdgeRenderer.property.thickness.description= +EdgeRenderer.property.rescaleWeight.displayName=Rescale weight +EdgeRenderer.property.rescaleWeight.description=Rescale edge weights to a normalized range +EdgeRenderer.property.rescaleWeight.min.displayName=Min. rescaled weight +EdgeRenderer.property.rescaleWeight.min.description=Mininum allowed weight after rescaling +EdgeRenderer.property.rescaleWeight.max.displayName=Max. rescaled weight +EdgeRenderer.property.rescaleWeight.max.description=Maximum allowed weight after rescaling +EdgeRenderer.property.curvedEdges.displayName=Curved +EdgeRenderer.property.curvedEdges.description= +EdgeRenderer.property.color.displayName=\u05e6\u05d1\u05e2 +EdgeRenderer.property.color.description= +EdgeRenderer.property.opacity.displayName=Opacity +EdgeRenderer.property.opacity.description= +EdgeRenderer.property.radius.displayName=Radius +EdgeRenderer.property.radius.description= +NodeLabelRenderer.name=Default node labels +NodeLabelRenderer.property.display.displayName=Show Labels +NodeLabelRenderer.property.display.description= +NodeLabelRenderer.property.font.displayName=Font +NodeLabelRenderer.property.font.description= +NodeLabelRenderer.property.proportionalSize.displayName=Proportional size +NodeLabelRenderer.property.proportionalSize.description= +NodeLabelRenderer.property.color.displayName=\u05e6\u05d1\u05e2 +NodeLabelRenderer.property.color.description= +NodeLabelRenderer.property.shorten.displayName=Shorten label +NodeLabelRenderer.property.shorten.description= +NodeLabelRenderer.property.maxchar.displayName=Max characters +NodeLabelRenderer.property.maxchar.description= +NodeLabelRenderer.property.outlineSize.displayName=Outline size +NodeLabelRenderer.property.outlineSize.description= +NodeLabelRenderer.property.outlineColor.displayName=Outline color +NodeLabelRenderer.property.outlineColor.description= +NodeLabelRenderer.property.outlineOpacity.displayName=Outline opacity +NodeLabelRenderer.property.outlineOpacity.description= +NodeLabelRenderer.property.box.displayName=Box +NodeLabelRenderer.property.box.description= +NodeLabelRenderer.property.box.color.displayName=Box color +NodeLabelRenderer.property.box.color.description= +NodeLabelRenderer.property.box.opacity.displayName=Box opacity +NodeLabelRenderer.property.box.opacity.description= +EdgeLabelRenderer.name=Default edge labels +EdgeLabelRenderer.property.display.displayName=Show Labels +EdgeLabelRenderer.property.display.description= +EdgeLabelRenderer.property.font.displayName=Font +EdgeLabelRenderer.property.font.description= +EdgeLabelRenderer.property.color.displayName=\u05e6\u05d1\u05e2 +EdgeLabelRenderer.property.color.description= +EdgeLabelRenderer.property.shorten.displayName=Shorten label +EdgeLabelRenderer.property.shorten.description= +EdgeLabelRenderer.property.maxchar.displayName=Max characters +EdgeLabelRenderer.property.maxchar.description= +EdgeLabelRenderer.property.outlineSize.displayName=Outline size +EdgeLabelRenderer.property.outlineSize.description= +EdgeLabelRenderer.property.outlineColor.displayName=Outline color +EdgeLabelRenderer.property.outlineColor.description= +EdgeLabelRenderer.property.outlineOpacity.displayName=Outline opacity +EdgeLabelRenderer.property.outlineOpacity.description= +ArrowRenderer.name=Default edge arrows +ArrowRenderer.property.size.displayName=Size +ArrowRenderer.property.size.description= diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_hu.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_hu.properties new file mode 100644 index 0000000000..c883748ecc --- /dev/null +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_hu.properties @@ -0,0 +1,47 @@ + + +EdgeRenderer.property.curvedEdges.displayName=\u00CDvelt +EdgeLabelRenderer.property.shorten.displayName=R\u00F6vid\u00EDtse le a c\u00EDmk\u00E9t +EdgeLabelRenderer.property.maxchar.displayName=Max karakterek +NodeLabelRenderer.property.box.opacity.displayName=Doboz \u00E1tl\u00E1tszatlans\u00E1ga +NodeLabelRenderer.property.box.color.displayName=Doboz sz\u00EDne +NodeRenderer.property.fixedBorderWidth.description=A szeg\u00E9ly fix m\u00E9ret\u0171. Ha hamis, akkor a csom\u00F3pont m\u00E9ret\u00E9vel sk\u00E1l\u00E1z\u00F3dik, mint az "\u00C1ttekint\u00E9s"-ben. +EdgeRenderer.property.rescaleWeight.max.displayName=Max. \u00E1tm\u00E9retezett s\u00FAly +ArrowRenderer.name=Alap\u00E9rtelmezett \u00E9lnyilak +NodeRenderer.property.borderWidth.displayName=Hat\u00E1r sz\u00E9less\u00E9ge +ArrowRenderer.property.size.displayName=M\u00E9ret +EdgeRenderer.property.color.displayName=Sz\u00EDn +EdgeRenderer.property.thickness.displayName=Vastags\u00E1g +NodeLabelRenderer.property.display.displayName=C\u00EDmk\u00E9k megjelen\u00EDt\u00E9se +EdgeLabelRenderer.name=Alap\u00E9rtelmezett \u00E9lc\u00EDmk\u00E9k +EdgeLabelRenderer.property.outlineSize.displayName=K\u00F6rvonal m\u00E9rete +EdgeLabelRenderer.property.display.displayName=C\u00EDmk\u00E9k megjelen\u00EDt\u00E9se +NodeRenderer.property.fixedBorderWidth.displayName=Fix hat\u00E1rsz\u00E9less\u00E9g +NodeLabelRenderer.property.proportionalSize.displayName=Ar\u00E1nyos m\u00E9ret +NodeLabelRenderer.property.font.displayName=Bet\u0171t\u00EDpus +EdgeRenderer.property.rescaleWeight.min.description=Minim\u00E1lis megengedett s\u00FAly az \u00E1tm\u00E9retez\u00E9s ut\u00E1n +NodeLabelRenderer.property.maxchar.displayName=Max karakterek +EdgeRenderer.property.rescaleWeight.description=\u00C1tm\u00E9retezi az \u00E9ls\u00FAlyokat egy normaliz\u00E1lt tartom\u00E1nyba +EdgeRenderer.property.rescaleWeight.max.description=Maxim\u00E1lis megengedett s\u00FAly az \u00E1tm\u00E9retez\u00E9s ut\u00E1n +EdgeRenderer.property.display.displayName=\u00C9lek megjelen\u00EDt\u00E9se +NodeLabelRenderer.property.outlineSize.displayName=K\u00F6rvonal m\u00E9rete +EdgeRenderer.name=Alap\u00E9rtelmezett \u00E9lek +NodeLabelRenderer.property.box.displayName=Doboz +NodeLabelRenderer.property.color.displayName=Sz\u00EDn +EdgeLabelRenderer.property.outlineColor.displayName=V\u00E1zlat sz\u00EDne +EdgeRenderer.property.radius.displayName=Sug\u00E1r +EdgeRenderer.property.opacity.displayName=\u00C1tl\u00E1tszatlans\u00E1g +NodeRenderer.property.opacity.displayName=\u00C1tl\u00E1tszatlans\u00E1g +EdgeLabelRenderer.property.font.displayName=Bet\u0171t\u00EDpus +NodeRenderer.property.perNodeOpacity.description=Haszn\u00E1lja a csom\u00F3pont szintj\u00E9n meghat\u00E1rozott \u00E1tl\u00E1tszatlans\u00E1got. Ha igaz, a rendszer figyelmen k\u00EDv\u00FCl hagyja a megjelen\u00EDt\u0151 \u00E1tl\u00E1tszatlans\u00E1gi tulajdons\u00E1g\u00E1t. +EdgeLabelRenderer.property.color.displayName=Sz\u00EDn +NodeLabelRenderer.property.outlineColor.displayName=V\u00E1zlat sz\u00EDne +NodeRenderer.property.borderColor.displayName=Szeg\u00E9ly sz\u00EDne +NodeLabelRenderer.property.outlineOpacity.displayName=V\u00E1zlat \u00E1tl\u00E1tszatlans\u00E1ga +EdgeRenderer.property.rescaleWeight.min.displayName=Min. \u00E1tm\u00E9retezett s\u00FAly +EdgeRenderer.property.rescaleWeight.displayName=M\u00E9retezze \u00E1t a s\u00FAlyt +NodeLabelRenderer.name=Alap\u00E9rtelmezett csom\u00F3 c\u00EDmk\u00E9k +NodeRenderer.property.perNodeOpacity.displayName=Csom\u00F3pontonk\u00E9nti \u00E1tl\u00E1tszatlans\u00E1g +NodeLabelRenderer.property.shorten.displayName=R\u00F6vid\u00EDtse le a c\u00EDmk\u00E9t +NodeRenderer.name=Alap\u00E9rtelmezett csom\u00F3pontok +EdgeLabelRenderer.property.outlineOpacity.displayName=V\u00E1zlat \u00E1tl\u00E1tszatlans\u00E1ga diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_it.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_it.properties new file mode 100644 index 0000000000..0d2becf2e2 --- /dev/null +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_it.properties @@ -0,0 +1,75 @@ +NodeRenderer.name=Default nodes +NodeRenderer.property.borderWidth.displayName=Border Width +NodeRenderer.property.borderWidth.description= +NodeRenderer.property.borderColor.displayName=Border Color +NodeRenderer.property.borderColor.description= +NodeRenderer.property.opacity.displayName=opacity +NodeRenderer.property.opacity.description= +NodeRenderer.property.perNodeOpacity.displayName=Per-Node Opacity +NodeRenderer.property.perNodeOpacity.description=Use opacity defined at node level. If true, renderer's opacity property will be ignored. +EdgeRenderer.name=Default edges +EdgeRenderer.property.display.displayName=Show Edges +EdgeRenderer.property.display.description= +EdgeRenderer.property.thickness.displayName=Thickness +EdgeRenderer.property.thickness.description= +EdgeRenderer.property.rescaleWeight.displayName=Rescale weight +EdgeRenderer.property.rescaleWeight.description=Rescale edge weights to a normalized range +EdgeRenderer.property.rescaleWeight.min.displayName=Min. rescaled weight +EdgeRenderer.property.rescaleWeight.min.description=Mininum allowed weight after rescaling +EdgeRenderer.property.rescaleWeight.max.displayName=Max. rescaled weight +EdgeRenderer.property.rescaleWeight.max.description=Maximum allowed weight after rescaling +EdgeRenderer.property.curvedEdges.displayName=Curved +EdgeRenderer.property.curvedEdges.description= +EdgeRenderer.property.color.displayName=Color +EdgeRenderer.property.color.description= +EdgeRenderer.property.opacity.displayName=Opacity +EdgeRenderer.property.opacity.description= +EdgeRenderer.property.radius.displayName=Radius +EdgeRenderer.property.radius.description= +NodeLabelRenderer.name=Default node labels +NodeLabelRenderer.property.display.displayName=Show Labels +NodeLabelRenderer.property.display.description= +NodeLabelRenderer.property.font.displayName=Font +NodeLabelRenderer.property.font.description= +NodeLabelRenderer.property.proportionalSize.displayName=Proportional size +NodeLabelRenderer.property.proportionalSize.description= +NodeLabelRenderer.property.color.displayName=Color +NodeLabelRenderer.property.color.description= +NodeLabelRenderer.property.shorten.displayName=Shorten label +NodeLabelRenderer.property.shorten.description= +NodeLabelRenderer.property.maxchar.displayName=Max characters +NodeLabelRenderer.property.maxchar.description= +NodeLabelRenderer.property.outlineSize.displayName=Outline size +NodeLabelRenderer.property.outlineSize.description= +NodeLabelRenderer.property.outlineColor.displayName=Outline color +NodeLabelRenderer.property.outlineColor.description= +NodeLabelRenderer.property.outlineOpacity.displayName=Outline opacity +NodeLabelRenderer.property.outlineOpacity.description= +NodeLabelRenderer.property.box.displayName=Box +NodeLabelRenderer.property.box.description= +NodeLabelRenderer.property.box.color.displayName=Box color +NodeLabelRenderer.property.box.color.description= +NodeLabelRenderer.property.box.opacity.displayName=Box opacity +NodeLabelRenderer.property.box.opacity.description= +EdgeLabelRenderer.name=Default edge labels +EdgeLabelRenderer.property.display.displayName=Show Labels +EdgeLabelRenderer.property.display.description= +EdgeLabelRenderer.property.font.displayName=Font +EdgeLabelRenderer.property.font.description= +EdgeLabelRenderer.property.color.displayName=Color +EdgeLabelRenderer.property.color.description= +EdgeLabelRenderer.property.shorten.displayName=Shorten label +EdgeLabelRenderer.property.shorten.description= +EdgeLabelRenderer.property.maxchar.displayName=Max characters +EdgeLabelRenderer.property.maxchar.description= +EdgeLabelRenderer.property.outlineSize.displayName=Outline size +EdgeLabelRenderer.property.outlineSize.description= +EdgeLabelRenderer.property.outlineColor.displayName=Outline color +EdgeLabelRenderer.property.outlineColor.description= +EdgeLabelRenderer.property.outlineOpacity.displayName=Outline opacity +EdgeLabelRenderer.property.outlineOpacity.description= +ArrowRenderer.name=Default edge arrows +ArrowRenderer.property.size.displayName=Size +ArrowRenderer.property.size.description= +NodeRenderer.property.fixedBorderWidth.displayName=Larghezza del bordo fisso +NodeRenderer.property.fixedBorderWidth.description=Il bordo ha una larghezza fissa. Se falso, verrΰ scalato proporzionalmente alla dimensione del nodo in "Overview". diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_ja.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_ja.properties index 731243a4d0..1aa4292360 100644 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_ja.properties +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_ja.properties @@ -1,79 +1,77 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-15 09\:25+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -NodeRenderer.name=\u65e2\u5b9a\u30ce\u30fc\u30c9 - -NodeRenderer.property.borderWidth.displayName=\u5883\u754c\u306e\u5e45 - -NodeRenderer.property.borderColor.displayName=\u5883\u754c\u306e\u8272 - -NodeRenderer.property.opacity.displayName=\u4e0d\u900f\u904e\u5ea6 - -EdgeRenderer.name=\u65e2\u5b9a\u8fba - -EdgeRenderer.property.display.displayName=\u8fba\u3092\u8868\u793a - -EdgeRenderer.property.thickness.displayName=\u539a\u3055 - -EdgeRenderer.property.rescaleWeight.displayName=\u91cd\u307f\u306e\u518d\u8a55\u4fa1 - -EdgeRenderer.property.curvedEdges.displayName=\u66f2\u7dda - -EdgeRenderer.property.color.displayName=\u8272 - -EdgeRenderer.property.opacity.displayName=\u4e0d\u900f\u904e\u5ea6 - -EdgeRenderer.property.radius.displayName=\u534a\u5f84 - -NodeLabelRenderer.name=\u65e2\u5b9a\u30ce\u30fc\u30c9\u30e9\u30d9\u30eb - -NodeLabelRenderer.property.display.displayName=\u30e9\u30d9\u30eb\u306e\u8868\u793a - -NodeLabelRenderer.property.font.displayName=\u30d5\u30a9\u30f3\u30c8 - -NodeLabelRenderer.property.proportionalSize.displayName=\u7e26\u6a2a\u6bd4\u3092\u4fdd\u6301\u3057\u305f\u30b5\u30a4\u30ba - -NodeLabelRenderer.property.color.displayName=\u8272 - -NodeLabelRenderer.property.shorten.displayName=\u30e9\u30d9\u30eb\u306e\u77ed\u7e2e - -NodeLabelRenderer.property.maxchar.displayName=\u6700\u5927\u6587\u5b57 - -NodeLabelRenderer.property.outlineSize.displayName=\u8f2a\u90ed\u306e\u30b5\u30a4\u30ba - -NodeLabelRenderer.property.outlineColor.displayName=\u8f2a\u90ed\u306e\u8272 - -NodeLabelRenderer.property.outlineOpacity.displayName=\u8f2a\u90ed\u306e\u4e0d\u900f\u904e\u5ea6 - -NodeLabelRenderer.property.box.displayName=\u7bb1 - -NodeLabelRenderer.property.box.color.displayName=\u7bb1\u306e\u8272 - -NodeLabelRenderer.property.box.opacity.displayName=\u7bb1\u306e\u4e0d\u900f\u904e\u5ea6 - -EdgeLabelRenderer.name=\u65e2\u5b9a\u8fba\u30e9\u30d9\u30eb - -EdgeLabelRenderer.property.display.displayName=\u30e9\u30d9\u30eb\u3092\u77ed\u7e2e - -EdgeLabelRenderer.property.font.displayName=\u30d5\u30a9\u30f3\u30c8 - -EdgeLabelRenderer.property.color.displayName=\u8272 - -EdgeLabelRenderer.property.shorten.displayName=\u30e9\u30d9\u30eb\u3092\u77ed\u7e2e - -EdgeLabelRenderer.property.maxchar.displayName=\u6700\u5927\u6587\u5b57 - -EdgeLabelRenderer.property.outlineSize.displayName=\u8f2a\u90ed\u30b5\u30a4\u30ba - -EdgeLabelRenderer.property.outlineColor.displayName=\u8f2a\u90ed\u306e\u8272 - -EdgeLabelRenderer.property.outlineOpacity.displayName=\u8f2a\u90ed\u306e\u4e0d\u900f\u904e\u5ea6 - -ArrowRenderer.name=\u65e2\u5b9a\u8fba\u77e2\u5370 - -ArrowRenderer.property.size.displayName=\u30b5\u30a4\u30ba +NodeRenderer.name = \u65e2\u5b9a\u30ce\u30fc\u30c9 +NodeRenderer.property.borderWidth.displayName = \u5883\u754c\u306e\u5e45 +NodeRenderer.property.borderWidth.description = +NodeRenderer.property.borderColor.displayName = \u5883\u754c\u306e\u8272 +NodeRenderer.property.borderColor.description = +NodeRenderer.property.opacity.displayName = \u4e0d\u900f\u904e\u5ea6 +NodeRenderer.property.opacity.description = +# NodeRenderer.property.perNodeOpacity.displayName = Per-Node Opacity +# NodeRenderer.property.perNodeOpacity.description = Use opacity defined at node level. If true, renderer's opacity property will be ignored. + +EdgeRenderer.name = \u65e2\u5b9a\u8fba +EdgeRenderer.property.display.displayName = \u8fba\u3092\u8868\u793a +EdgeRenderer.property.display.description = +EdgeRenderer.property.thickness.displayName = \u539a\u3055 +EdgeRenderer.property.thickness.description = +EdgeRenderer.property.rescaleWeight.displayName = \u91cd\u307f\u306e\u518d\u8a55\u4fa1 +# EdgeRenderer.property.rescaleWeight.description = Rescale edge weights to a normalized range +# EdgeRenderer.property.rescaleWeight.min.displayName = Min. rescaled weight +# EdgeRenderer.property.rescaleWeight.min.description = Mininum allowed weight after rescaling +# EdgeRenderer.property.rescaleWeight.max.displayName = Max. rescaled weight +# EdgeRenderer.property.rescaleWeight.max.description = Maximum allowed weight after rescaling +EdgeRenderer.property.curvedEdges.displayName = \u66f2\u7dda +EdgeRenderer.property.curvedEdges.description = +EdgeRenderer.property.color.displayName = \u8272 +EdgeRenderer.property.color.description = +EdgeRenderer.property.opacity.displayName = \u4e0d\u900f\u904e\u5ea6 +EdgeRenderer.property.opacity.description = +EdgeRenderer.property.radius.displayName = \u534a\u5f84 +EdgeRenderer.property.radius.description = + +NodeLabelRenderer.name = \u65e2\u5b9a\u30ce\u30fc\u30c9\u30e9\u30d9\u30eb +NodeLabelRenderer.property.display.displayName = \u30e9\u30d9\u30eb\u306e\u8868\u793a +NodeLabelRenderer.property.display.description = +NodeLabelRenderer.property.font.displayName = \u30d5\u30a9\u30f3\u30c8 +NodeLabelRenderer.property.font.description = +NodeLabelRenderer.property.proportionalSize.displayName = \u7e26\u6a2a\u6bd4\u3092\u4fdd\u6301\u3057\u305f\u30b5\u30a4\u30ba +NodeLabelRenderer.property.proportionalSize.description = +NodeLabelRenderer.property.color.displayName = \u8272 +NodeLabelRenderer.property.color.description = +NodeLabelRenderer.property.shorten.displayName = \u30e9\u30d9\u30eb\u306e\u77ed\u7e2e +NodeLabelRenderer.property.shorten.description = +NodeLabelRenderer.property.maxchar.displayName = \u6700\u5927\u6587\u5b57 +NodeLabelRenderer.property.maxchar.description = +NodeLabelRenderer.property.outlineSize.displayName = \u8f2a\u90ed\u306e\u30b5\u30a4\u30ba +NodeLabelRenderer.property.outlineSize.description = +NodeLabelRenderer.property.outlineColor.displayName = \u8f2a\u90ed\u306e\u8272 +NodeLabelRenderer.property.outlineColor.description = +NodeLabelRenderer.property.outlineOpacity.displayName = \u8f2a\u90ed\u306e\u4e0d\u900f\u904e\u5ea6 +NodeLabelRenderer.property.outlineOpacity.description = +NodeLabelRenderer.property.box.displayName = \u7bb1 +NodeLabelRenderer.property.box.description = +NodeLabelRenderer.property.box.color.displayName = \u7bb1\u306e\u8272 +NodeLabelRenderer.property.box.color.description = +NodeLabelRenderer.property.box.opacity.displayName = \u7bb1\u306e\u4e0d\u900f\u904e\u5ea6 +NodeLabelRenderer.property.box.opacity.description = + +EdgeLabelRenderer.name = \u65e2\u5b9a\u8fba\u30e9\u30d9\u30eb +EdgeLabelRenderer.property.display.displayName = \u30e9\u30d9\u30eb\u3092\u77ed\u7e2e +EdgeLabelRenderer.property.display.description = +EdgeLabelRenderer.property.font.displayName = \u30d5\u30a9\u30f3\u30c8 +EdgeLabelRenderer.property.font.description = +EdgeLabelRenderer.property.color.displayName = \u8272 +EdgeLabelRenderer.property.color.description = +EdgeLabelRenderer.property.shorten.displayName = \u30e9\u30d9\u30eb\u3092\u77ed\u7e2e +EdgeLabelRenderer.property.shorten.description = +EdgeLabelRenderer.property.maxchar.displayName = \u6700\u5927\u6587\u5b57 +EdgeLabelRenderer.property.maxchar.description = +EdgeLabelRenderer.property.outlineSize.displayName = \u8f2a\u90ed\u30b5\u30a4\u30ba +EdgeLabelRenderer.property.outlineSize.description = +EdgeLabelRenderer.property.outlineColor.displayName = \u8f2a\u90ed\u306e\u8272 +EdgeLabelRenderer.property.outlineColor.description = +EdgeLabelRenderer.property.outlineOpacity.displayName = \u8f2a\u90ed\u306e\u4e0d\u900f\u904e\u5ea6 +EdgeLabelRenderer.property.outlineOpacity.description = + +ArrowRenderer.name = \u65e2\u5b9a\u8fba\u77e2\u5370 +ArrowRenderer.property.size.displayName = \u30b5\u30a4\u30ba +ArrowRenderer.property.size.description = diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_ko.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_ko.properties new file mode 100644 index 0000000000..e733ba0eca --- /dev/null +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_ko.properties @@ -0,0 +1,47 @@ + + +NodeRenderer.property.borderWidth.displayName=\uD14C\uB450\uB9AC \uB108\uBE44 +NodeRenderer.property.borderColor.displayName=\uD14C\uB450\uB9AC \uC0C9\uC0C1 +NodeRenderer.property.perNodeOpacity.displayName=\uB178\uB4DC\uB2F9 \uBD88\uD22C\uBA85\uB3C4 +NodeRenderer.property.opacity.displayName=\uBD88\uD22C\uBA85\uB3C4 +EdgeRenderer.name=\uAE30\uBCF8 \uC5E3\uC9C0\uB4E4 +EdgeRenderer.property.thickness.displayName=\uAD75\uAE30 +EdgeRenderer.property.rescaleWeight.displayName=\uAC00\uC911\uCE58 \uC870\uC815\uD558\uAE30 +EdgeRenderer.property.rescaleWeight.max.displayName=\uC7AC\uC870\uC815\uB41C \uAC00\uC911\uCE58 \uCD5C\uB313\uAC12 +EdgeRenderer.property.rescaleWeight.max.description=\uC7AC\uC870\uC815 \uD6C4 \uD5C8\uC6A9\uB418\uB294 \uAC00\uC911\uCE58\uC758 \uCD5C\uB313\uAC12 +EdgeRenderer.property.curvedEdges.displayName=\uACE1\uC120\uD615 +EdgeRenderer.property.color.displayName=\uC0C9\uC0C1 +EdgeRenderer.property.rescaleWeight.min.displayName=\uCD5C\uC18C \uC870\uC815\uB41C \uAC00\uC911\uCE58 +EdgeRenderer.property.radius.displayName=\uBC18\uC9C0\uB984 +NodeLabelRenderer.property.proportionalSize.displayName=\uBE44\uB840 \uD06C\uAE30 +NodeLabelRenderer.property.color.displayName=\uC0C9\uC0C1 +NodeLabelRenderer.property.maxchar.displayName=\uCD5C\uB300 \uAE00\uC790 \uC218 +NodeLabelRenderer.property.outlineSize.displayName=\uC724\uACFD \uD06C\uAE30 +NodeLabelRenderer.property.outlineColor.displayName=\uC724\uACFD \uC0C9\uC0C1 +NodeLabelRenderer.property.outlineOpacity.displayName=\uC724\uACFD \uBD88\uD22C\uBA85\uB3C4 +NodeLabelRenderer.property.box.color.displayName=\uC0AC\uAC01\uD615 \uC0C9\uC0C1 +NodeLabelRenderer.property.box.opacity.displayName=\uC0AC\uAC01\uD615 \uBD88\uD22C\uBA85\uB3C4 +NodeRenderer.property.fixedBorderWidth.description=\uD14C\uB450\uB9AC\uB294 \uD06C\uAE30\uAC00 \uACE0\uC815\uB418\uC5B4 \uC788\uC2B5\uB2C8\uB2E4. false\uC778 \uACBD\uC6B0 "\uAC1C\uC694"\uC5D0\uC11C\uC640 \uAC19\uC774 \uB178\uB4DC \uD06C\uAE30\uC5D0 \uB530\uB77C \uD655\uC7A5\uB429\uB2C8\uB2E4. +NodeRenderer.property.perNodeOpacity.description=\uB178\uB4DC \uC218\uC900\uC5D0\uC11C \uC815\uC758\uB41C \uBD88\uD22C\uBA85\uB3C4\uB97C \uC0AC\uC6A9\uD569\uB2C8\uB2E4. true\uC77C \uACBD\uC6B0 \uB80C\uB354\uB7EC\uC758 \uBD88\uD22C\uBA85\uB3C4 \uC18D\uC131\uC740 \uBB34\uC2DC\uB429\uB2C8\uB2E4. +EdgeRenderer.property.display.displayName=\uC5E3\uC9C0 \uD45C\uC2DC\uD558\uAE30 +EdgeRenderer.property.rescaleWeight.description=\uC5E3\uC9C0 \uAC00\uC911\uCE58\uB97C \uC815\uADDC\uD654\uB41C \uBC94\uC704\uB85C \uC870\uC815\uD569\uB2C8\uB2E4 +EdgeRenderer.property.opacity.displayName=\uBD88\uD22C\uBA85\uB3C4 +NodeLabelRenderer.property.display.displayName=\uB77C\uBCA8 \uD45C\uC2DC\uD558\uAE30 +NodeLabelRenderer.name=\uB178\uB4DC \uB77C\uBCA8 \uAE30\uBCF8\uAC12 +NodeLabelRenderer.property.font.displayName=\uAE00\uAF34 +NodeLabelRenderer.property.shorten.displayName=\uCD95\uC57D\uB41C \uB77C\uBCA8 +NodeLabelRenderer.property.box.displayName=\uC0AC\uAC01\uD615 +EdgeLabelRenderer.name=\uC5E3\uC9C0 \uB77C\uBCA8 \uAE30\uBCF8\uAC12 +EdgeRenderer.property.rescaleWeight.min.description=\uC7AC\uC870\uC815 \uD6C4 \uD5C8\uC6A9\uB418\uB294 \uAC00\uC911\uCE58\uC758 \uCD5C\uC19F\uAC12 +NodeRenderer.name=\uAE30\uBCF8 \uB178\uB4DC +NodeRenderer.property.fixedBorderWidth.displayName=\uACE0\uC815 \uD14C\uB450\uB9AC \uB108\uBE44 +EdgeLabelRenderer.property.font.displayName=\uAE00\uAF34 +EdgeLabelRenderer.property.color.displayName=\uC0C9\uC0C1 +EdgeLabelRenderer.property.shorten.displayName=\uCD95\uC57D\uD615 \uB77C\uBCA8 +EdgeLabelRenderer.property.maxchar.displayName=\uCD5C\uB300 \uAE00\uC790\uC218 +EdgeLabelRenderer.property.outlineSize.displayName=\uC724\uACFD\uC120 \uD06C\uAE30 +EdgeLabelRenderer.property.outlineColor.displayName=\uC724\uACFD\uC120 \uC0C9\uC0C1 +ArrowRenderer.name=\uB05D \uD654\uC0B4\uD45C \uAE30\uBCF8\uAC12 +ArrowRenderer.property.size.displayName=\uD06C\uAE30 +EdgeLabelRenderer.property.display.displayName=\uB77C\uBCA8 \uBCF4\uC774\uAE30 +EdgeLabelRenderer.property.outlineOpacity.displayName=\uC724\uACFD\uC120 \uBD88\uD22C\uBA85\uB3C4 diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_nl.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_nl.properties new file mode 100644 index 0000000000..1fc039d0b9 --- /dev/null +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_nl.properties @@ -0,0 +1,73 @@ +NodeRenderer.name=Standaard knopen +NodeRenderer.property.borderWidth.displayName=Border Width +NodeRenderer.property.borderWidth.description= +NodeRenderer.property.borderColor.displayName=Border Color +NodeRenderer.property.borderColor.description= +NodeRenderer.property.opacity.displayName=opacity +NodeRenderer.property.opacity.description= +NodeRenderer.property.perNodeOpacity.displayName=Per-Node Opacity +NodeRenderer.property.perNodeOpacity.description=Use opacity defined at node level. If true, renderer's opacity property will be ignored. +EdgeRenderer.name=Default edges +EdgeRenderer.property.display.displayName=Show Edges +EdgeRenderer.property.display.description= +EdgeRenderer.property.thickness.displayName=Thickness +EdgeRenderer.property.thickness.description= +EdgeRenderer.property.rescaleWeight.displayName=Rescale weight +EdgeRenderer.property.rescaleWeight.description=Rescale edge weights to a normalized range +EdgeRenderer.property.rescaleWeight.min.displayName=Min. rescaled weight +EdgeRenderer.property.rescaleWeight.min.description=Mininum allowed weight after rescaling +EdgeRenderer.property.rescaleWeight.max.displayName=Max. rescaled weight +EdgeRenderer.property.rescaleWeight.max.description=Maximum allowed weight after rescaling +EdgeRenderer.property.curvedEdges.displayName=Curved +EdgeRenderer.property.curvedEdges.description= +EdgeRenderer.property.color.displayName=Kleur +EdgeRenderer.property.color.description= +EdgeRenderer.property.opacity.displayName=Opacity +EdgeRenderer.property.opacity.description= +EdgeRenderer.property.radius.displayName=Straal +EdgeRenderer.property.radius.description= +NodeLabelRenderer.name=Standaard knooplabels +NodeLabelRenderer.property.display.displayName=Show Labels +NodeLabelRenderer.property.display.description= +NodeLabelRenderer.property.font.displayName=Lettertype +NodeLabelRenderer.property.font.description= +NodeLabelRenderer.property.proportionalSize.displayName=Proportional size +NodeLabelRenderer.property.proportionalSize.description= +NodeLabelRenderer.property.color.displayName=Kleur +NodeLabelRenderer.property.color.description= +NodeLabelRenderer.property.shorten.displayName=Shorten label +NodeLabelRenderer.property.shorten.description= +NodeLabelRenderer.property.maxchar.displayName=Max. aantal tekens +NodeLabelRenderer.property.maxchar.description= +NodeLabelRenderer.property.outlineSize.displayName=Outline size +NodeLabelRenderer.property.outlineSize.description= +NodeLabelRenderer.property.outlineColor.displayName=Outline color +NodeLabelRenderer.property.outlineColor.description= +NodeLabelRenderer.property.outlineOpacity.displayName=Outline opacity +NodeLabelRenderer.property.outlineOpacity.description= +NodeLabelRenderer.property.box.displayName=Box +NodeLabelRenderer.property.box.description= +NodeLabelRenderer.property.box.color.displayName=Box color +NodeLabelRenderer.property.box.color.description= +NodeLabelRenderer.property.box.opacity.displayName=Box opacity +NodeLabelRenderer.property.box.opacity.description= +EdgeLabelRenderer.name=Default edge labels +EdgeLabelRenderer.property.display.displayName=Show Labels +EdgeLabelRenderer.property.display.description= +EdgeLabelRenderer.property.font.displayName=Lettertype +EdgeLabelRenderer.property.font.description= +EdgeLabelRenderer.property.color.displayName=Kleur +EdgeLabelRenderer.property.color.description= +EdgeLabelRenderer.property.shorten.displayName=Shorten label +EdgeLabelRenderer.property.shorten.description= +EdgeLabelRenderer.property.maxchar.displayName=Max. aantal tekens +EdgeLabelRenderer.property.maxchar.description= +EdgeLabelRenderer.property.outlineSize.displayName=Outline size +EdgeLabelRenderer.property.outlineSize.description= +EdgeLabelRenderer.property.outlineColor.displayName=Outline color +EdgeLabelRenderer.property.outlineColor.description= +EdgeLabelRenderer.property.outlineOpacity.displayName=Outline opacity +EdgeLabelRenderer.property.outlineOpacity.description= +ArrowRenderer.name=Default edge arrows +ArrowRenderer.property.size.displayName=Grootte +ArrowRenderer.property.size.description= diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_pt.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_pt.properties new file mode 100644 index 0000000000..5cfbb1ef5c --- /dev/null +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_pt.properties @@ -0,0 +1,36 @@ +ArrowRenderer.name=Setas das arestas padr\u00E3o +ArrowRenderer.property.size.displayName=Tamanho +NodeRenderer.name=N\u00F3s padr\u00E3o +NodeRenderer.property.borderWidth.displayName=Largura da borda +NodeRenderer.property.borderColor.displayName=Cor da borda +NodeRenderer.property.opacity.displayName=opacidade +EdgeRenderer.name=Arestas padr\u00E3o +EdgeRenderer.property.display.displayName=Mostrar arestas +EdgeRenderer.property.thickness.displayName=Espessura +EdgeRenderer.property.rescaleWeight.displayName=Reescalonar peso +EdgeRenderer.property.curvedEdges.displayName=Curvo +EdgeRenderer.property.color.displayName=Cor +EdgeRenderer.property.opacity.displayName=Opacidade +EdgeRenderer.property.radius.displayName=Raio +NodeLabelRenderer.name=R\u00F3tulos dos n\u00F3s padr\u00E3o +NodeLabelRenderer.property.display.displayName=Mostrar r\u00F3tulos +NodeLabelRenderer.property.font.displayName=Fonte +NodeLabelRenderer.property.proportionalSize.displayName=Tamanho proporcional +NodeLabelRenderer.property.color.displayName=Cor +NodeLabelRenderer.property.shorten.displayName=Limitar r\u00F3tulos +NodeLabelRenderer.property.maxchar.displayName=N\u00FAmero m\u00E1ximo de caracteres +NodeLabelRenderer.property.outlineSize.displayName=Tamanho do contorno +NodeLabelRenderer.property.outlineColor.displayName=Cor do contorno +NodeLabelRenderer.property.outlineOpacity.displayName=Opacidade do contorno +NodeLabelRenderer.property.box.displayName=Caixa +NodeLabelRenderer.property.box.color.displayName=Cor da caixa +NodeLabelRenderer.property.box.opacity.displayName=Opacidade da caixa +EdgeLabelRenderer.name=R\u00F3tulos das arestas padr\u00E3o +EdgeLabelRenderer.property.display.displayName=Mostrar r\u00F3tulos +EdgeLabelRenderer.property.font.displayName=Fonte +EdgeLabelRenderer.property.color.displayName=Cor +EdgeLabelRenderer.property.shorten.displayName=Limitar r\u00F3tulos +EdgeLabelRenderer.property.maxchar.displayName=N\u00FAmero m\u00E1ximo de caracteres +EdgeLabelRenderer.property.outlineColor.displayName=Cor do contorno +EdgeLabelRenderer.property.outlineSize.displayName=Tamanho do contorno +EdgeLabelRenderer.property.outlineOpacity.displayName=Opacidade do contorno diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_pt_BR.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_pt_BR.properties index 81a80bb045..2762b36aba 100644 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_pt_BR.properties +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_pt_BR.properties @@ -1,79 +1,77 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio Faria Jr. , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-12 12\:39+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -NodeRenderer.name=N\u00f3s padr\u00e3o - -NodeRenderer.property.borderWidth.displayName=Largura da borda - -NodeRenderer.property.borderColor.displayName=Cor da borda - -NodeRenderer.property.opacity.displayName=opacidade - -EdgeRenderer.name=Arestas padr\u00e3o - -EdgeRenderer.property.display.displayName=Mostrar arestas - -EdgeRenderer.property.thickness.displayName=Espessura - -EdgeRenderer.property.rescaleWeight.displayName=Reescalonar peso - -EdgeRenderer.property.curvedEdges.displayName=Curvo - -EdgeRenderer.property.color.displayName=Cor - -EdgeRenderer.property.opacity.displayName=Opacidade - -EdgeRenderer.property.radius.displayName=Raio - -NodeLabelRenderer.name=R\u00f3tulos dos n\u00f3s padr\u00e3o - -NodeLabelRenderer.property.display.displayName=Mostrar r\u00f3tulos - -NodeLabelRenderer.property.font.displayName=Fonte - -NodeLabelRenderer.property.proportionalSize.displayName=Tamanho proporcional - -NodeLabelRenderer.property.color.displayName=Cor - -NodeLabelRenderer.property.shorten.displayName=Limitar r\u00f3tulos - -NodeLabelRenderer.property.maxchar.displayName=N\u00famero m\u00e1ximo de caracteres - -NodeLabelRenderer.property.outlineSize.displayName=Tamanho do contorno - -NodeLabelRenderer.property.outlineColor.displayName=Cor do contorno - -NodeLabelRenderer.property.outlineOpacity.displayName=Opacidade do contorno - -NodeLabelRenderer.property.box.displayName=Caixa - -NodeLabelRenderer.property.box.color.displayName=Cor da caixa - -NodeLabelRenderer.property.box.opacity.displayName=Opacidade da caixa - -EdgeLabelRenderer.name=R\u00f3tulos das arestas padr\u00e3o - -EdgeLabelRenderer.property.display.displayName=Mostrar r\u00f3tulos - -EdgeLabelRenderer.property.font.displayName=Fonte - -EdgeLabelRenderer.property.color.displayName=Cor - -EdgeLabelRenderer.property.shorten.displayName=Limitar r\u00f3tulos - -EdgeLabelRenderer.property.maxchar.displayName=N\u00famero m\u00e1ximo de caracteres - -EdgeLabelRenderer.property.outlineSize.displayName=Tamanho do contorno - -EdgeLabelRenderer.property.outlineColor.displayName=Cor do contorno - -EdgeLabelRenderer.property.outlineOpacity.displayName=Opacidade do contorno - -ArrowRenderer.name=Setas das arestas padr\u00e3o - -ArrowRenderer.property.size.displayName=Tamanho +NodeRenderer.name = Nσs padrγo +NodeRenderer.property.borderWidth.displayName = Largura da borda +NodeRenderer.property.borderWidth.description = +NodeRenderer.property.borderColor.displayName = Cor da borda +NodeRenderer.property.borderColor.description = +NodeRenderer.property.opacity.displayName = opacidade +NodeRenderer.property.opacity.description = +# NodeRenderer.property.perNodeOpacity.displayName = Per-Node Opacity +# NodeRenderer.property.perNodeOpacity.description = Use opacity defined at node level. If true, renderer's opacity property will be ignored. + +EdgeRenderer.name = Arestas padrγo +EdgeRenderer.property.display.displayName = Mostrar arestas +EdgeRenderer.property.display.description = +EdgeRenderer.property.thickness.displayName = Espessura +EdgeRenderer.property.thickness.description = +EdgeRenderer.property.rescaleWeight.displayName = Reescalonar peso +# EdgeRenderer.property.rescaleWeight.description = Rescale edge weights to a normalized range +# EdgeRenderer.property.rescaleWeight.min.displayName = Min. rescaled weight +# EdgeRenderer.property.rescaleWeight.min.description = Mininum allowed weight after rescaling +# EdgeRenderer.property.rescaleWeight.max.displayName = Max. rescaled weight +# EdgeRenderer.property.rescaleWeight.max.description = Maximum allowed weight after rescaling +EdgeRenderer.property.curvedEdges.displayName = Curvo +EdgeRenderer.property.curvedEdges.description = +EdgeRenderer.property.color.displayName = Cor +EdgeRenderer.property.color.description = +EdgeRenderer.property.opacity.displayName = Opacidade +EdgeRenderer.property.opacity.description = +EdgeRenderer.property.radius.displayName = Raio +EdgeRenderer.property.radius.description = + +NodeLabelRenderer.name = Rσtulos dos nσs padrγo +NodeLabelRenderer.property.display.displayName = Mostrar rσtulos +NodeLabelRenderer.property.display.description = +NodeLabelRenderer.property.font.displayName = Fonte +NodeLabelRenderer.property.font.description = +NodeLabelRenderer.property.proportionalSize.displayName = Tamanho proporcional +NodeLabelRenderer.property.proportionalSize.description = +NodeLabelRenderer.property.color.displayName = Cor +NodeLabelRenderer.property.color.description = +NodeLabelRenderer.property.shorten.displayName = Limitar rσtulos +NodeLabelRenderer.property.shorten.description = +NodeLabelRenderer.property.maxchar.displayName = Nϊmero mαximo de caracteres +NodeLabelRenderer.property.maxchar.description = +NodeLabelRenderer.property.outlineSize.displayName = Tamanho do contorno +NodeLabelRenderer.property.outlineSize.description = +NodeLabelRenderer.property.outlineColor.displayName = Cor do contorno +NodeLabelRenderer.property.outlineColor.description = +NodeLabelRenderer.property.outlineOpacity.displayName = Opacidade do contorno +NodeLabelRenderer.property.outlineOpacity.description = +NodeLabelRenderer.property.box.displayName = Caixa +NodeLabelRenderer.property.box.description = +NodeLabelRenderer.property.box.color.displayName = Cor da caixa +NodeLabelRenderer.property.box.color.description = +NodeLabelRenderer.property.box.opacity.displayName = Opacidade da caixa +NodeLabelRenderer.property.box.opacity.description = + +EdgeLabelRenderer.name = Rσtulos das arestas padrγo +EdgeLabelRenderer.property.display.displayName = Mostrar rσtulos +EdgeLabelRenderer.property.display.description = +EdgeLabelRenderer.property.font.displayName = Fonte +EdgeLabelRenderer.property.font.description = +EdgeLabelRenderer.property.color.displayName = Cor +EdgeLabelRenderer.property.color.description = +EdgeLabelRenderer.property.shorten.displayName = Limitar rσtulos +EdgeLabelRenderer.property.shorten.description = +EdgeLabelRenderer.property.maxchar.displayName = Nϊmero mαximo de caracteres +EdgeLabelRenderer.property.maxchar.description = +EdgeLabelRenderer.property.outlineSize.displayName = Tamanho do contorno +EdgeLabelRenderer.property.outlineSize.description = +EdgeLabelRenderer.property.outlineColor.displayName = Cor do contorno +EdgeLabelRenderer.property.outlineColor.description = +EdgeLabelRenderer.property.outlineOpacity.displayName = Opacidade do contorno +EdgeLabelRenderer.property.outlineOpacity.description = + +ArrowRenderer.name = Setas das arestas padrγo +ArrowRenderer.property.size.displayName = Tamanho +ArrowRenderer.property.size.description = diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_ro.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_ro.properties new file mode 100644 index 0000000000..00338eb572 --- /dev/null +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_ro.properties @@ -0,0 +1,45 @@ + + +NodeLabelRenderer.property.display.displayName=Afi\u0219are etichete +NodeLabelRenderer.property.font.displayName=Font +NodeRenderer.name=Noduri implicite +NodeRenderer.property.borderWidth.displayName=L\u0103\u021Bime bordur\u0103 +NodeRenderer.property.borderColor.displayName=Culoare bordur\u0103 +NodeRenderer.property.opacity.displayName=Opacitate +NodeRenderer.property.perNodeOpacity.displayName=Opacitate per nod +NodeRenderer.property.perNodeOpacity.description=Folose\u0219te opacitatea definit\u0103 la nivel de nod. Dac\u0103 este activat\u0103, opacitatea randarii va fi ignorat\u0103. +EdgeRenderer.name=Muchii implicite +NodeLabelRenderer.property.box.color.displayName=Culoare caset\u0103 +NodeLabelRenderer.property.box.opacity.displayName=Opacitate caset\u0103 +EdgeLabelRenderer.name=Etichete de muchii implicite +EdgeLabelRenderer.property.display.displayName=Afi\u0219are etichete +EdgeLabelRenderer.property.font.displayName=Font +EdgeLabelRenderer.property.color.displayName=Culoare +EdgeLabelRenderer.property.shorten.displayName=Scurteaz\u0103 eticheta +EdgeLabelRenderer.property.maxchar.displayName=Maxim caractere +EdgeLabelRenderer.property.outlineColor.displayName=Culoare contur +EdgeLabelRenderer.property.outlineOpacity.displayName=Opacitate contur +ArrowRenderer.name=S\u0103ge\u021Bi de muchii implicite +ArrowRenderer.property.size.displayName=Dimensiune +EdgeRenderer.property.display.displayName=Afi\u0219are muchii +EdgeRenderer.property.rescaleWeight.max.displayName=Pondere redimensionat\u0103 maxim\u0103 +EdgeRenderer.property.opacity.displayName=Opacitate +EdgeRenderer.property.thickness.displayName=Grosime +EdgeRenderer.property.rescaleWeight.displayName=Redimensioneaz\u0103 ponderile +EdgeRenderer.property.rescaleWeight.min.displayName=Pondere redimensionat\u0103 minim\u0103 +EdgeRenderer.property.rescaleWeight.min.description=Ponderea minim\u0103 permis\u0103 dup\u0103 redimensionare +NodeLabelRenderer.property.shorten.displayName=Scurteaz\u0103 eticheta +EdgeRenderer.property.rescaleWeight.description=Redimensioneaz\u0103 ponderile muchiilor la un interval normalizat +EdgeRenderer.property.curvedEdges.displayName=Curbate +EdgeRenderer.property.radius.displayName=Raz\u0103 +NodeLabelRenderer.property.proportionalSize.displayName=Dimensiune propor\u021Bional\u0103 +NodeLabelRenderer.property.color.displayName=Culoare +EdgeRenderer.property.rescaleWeight.max.description=Ponderea maxim\u0103 permis\u0103 dup\u0103 redimensionare +EdgeRenderer.property.color.displayName=Culoare +NodeLabelRenderer.property.maxchar.displayName=Maxim caractere +NodeLabelRenderer.property.box.displayName=Caset\u0103 +NodeLabelRenderer.property.outlineSize.displayName=Dimensiune contur +NodeLabelRenderer.property.outlineColor.displayName=Culoare contur +NodeLabelRenderer.property.outlineOpacity.displayName=Opacitate contur +NodeLabelRenderer.name=Etichete de noduri implicite +EdgeLabelRenderer.property.outlineSize.displayName=Dimensiune contur diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_ru.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_ru.properties index f02501cc26..88119b3d59 100644 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_ru.properties +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_ru.properties @@ -1,79 +1,77 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-14 06\:18+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -NodeRenderer.name=\u0423\u0437\u043b\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e - -NodeRenderer.property.borderWidth.displayName=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 \u043e\u0431\u0432\u043e\u0434\u043a\u0438 - -NodeRenderer.property.borderColor.displayName=\u0426\u0432\u0435\u0442 \u043e\u0431\u0432\u043e\u0434\u043a\u0438 - -NodeRenderer.property.opacity.displayName=\u041f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c - -EdgeRenderer.name=\u0420\u0451\u0431\u0440\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e - -EdgeRenderer.property.display.displayName=\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0440\u0451\u0431\u0440\u0430 - -EdgeRenderer.property.thickness.displayName=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 - -EdgeRenderer.property.rescaleWeight.displayName=\u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0441 - -EdgeRenderer.property.curvedEdges.displayName=\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0440\u0451\u0431\u0440\u0430 \u043a\u0440\u0438\u0432\u044b\u043c\u0438 - -EdgeRenderer.property.color.displayName=\u0426\u0432\u0435\u0442 - -EdgeRenderer.property.opacity.displayName=\u041f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c - -EdgeRenderer.property.radius.displayName=\u0420\u0430\u0434\u0438\u0443\u0441 - -NodeLabelRenderer.name=\u041c\u0435\u0442\u043a\u0438 \u0443\u0437\u043b\u043e\u0432 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e - -NodeLabelRenderer.property.display.displayName=\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043c\u0435\u0442\u043a\u0438 - -NodeLabelRenderer.property.font.displayName=\u0428\u0440\u0438\u0444\u0442 - -NodeLabelRenderer.property.proportionalSize.displayName=\u041f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 - -NodeLabelRenderer.property.color.displayName=\u0426\u0432\u0435\u0442 - -NodeLabelRenderer.property.shorten.displayName=\u0423\u043a\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043a\u0438 - -NodeLabelRenderer.property.maxchar.displayName=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 - -NodeLabelRenderer.property.outlineSize.displayName=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 \u043e\u0431\u0432\u043e\u0434\u043a\u0438 - -NodeLabelRenderer.property.outlineColor.displayName=\u0426\u0432\u0435\u0442 \u043e\u0431\u0432\u043e\u0434\u043a\u0438 - -NodeLabelRenderer.property.outlineOpacity.displayName=\u041f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0432\u043e\u0434\u043a\u0438 - -NodeLabelRenderer.property.box.displayName=\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0440\u0430\u043c\u043a\u0438 \u043c\u0435\u0442\u043e\u043a - -NodeLabelRenderer.property.box.color.displayName=\u0426\u0432\u0435\u0442 \u0440\u0430\u043c\u043a\u0438 \u043c\u0435\u0442\u043e\u043a - -NodeLabelRenderer.property.box.opacity.displayName=\u041f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u043c\u043a\u0438 \u043c\u0435\u0442\u043e\u043a - -EdgeLabelRenderer.name=\u041c\u0435\u0442\u043a\u0438 \u0440\u0451\u0431\u0435\u0440 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e - -EdgeLabelRenderer.property.display.displayName=\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043c\u0435\u0442\u043a\u0438 - -EdgeLabelRenderer.property.font.displayName=\u0428\u0440\u0438\u0444\u0442 - -EdgeLabelRenderer.property.color.displayName=\u0426\u0432\u0435\u0442 - -EdgeLabelRenderer.property.shorten.displayName=\u0423\u043a\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043a\u0438 - -EdgeLabelRenderer.property.maxchar.displayName=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 - -EdgeLabelRenderer.property.outlineSize.displayName=\u0422\u043e\u043b\u0449\u0438\u043d\u0430 \u043e\u0431\u0432\u043e\u0434\u043a\u0438 \u043c\u0435\u0442\u043e\u043a - -EdgeLabelRenderer.property.outlineColor.displayName=\u0426\u0432\u0435\u0442 \u043e\u0431\u0432\u043e\u0434\u043a\u0438 \u043c\u0435\u0442\u043e\u043a - -EdgeLabelRenderer.property.outlineOpacity.displayName=\u041f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0432\u043e\u0434\u043a\u0438 \u043c\u0435\u0442\u043e\u043a - -ArrowRenderer.name=\u0421\u0442\u0440\u0435\u043b\u043a\u0438 \u0440\u0451\u0431\u0435\u0440 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e - -ArrowRenderer.property.size.displayName=\u0420\u0430\u0437\u043c\u0435\u0440 +NodeRenderer.name = \u0423\u0437\u043b\u044b \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e +NodeRenderer.property.borderWidth.displayName = \u0422\u043e\u043b\u0449\u0438\u043d\u0430 \u043e\u0431\u0432\u043e\u0434\u043a\u0438 +NodeRenderer.property.borderWidth.description = +NodeRenderer.property.borderColor.displayName = \u0426\u0432\u0435\u0442 \u043e\u0431\u0432\u043e\u0434\u043a\u0438 +NodeRenderer.property.borderColor.description = +NodeRenderer.property.opacity.displayName = \u041f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c +NodeRenderer.property.opacity.description = +# NodeRenderer.property.perNodeOpacity.displayName = Per-Node Opacity +# NodeRenderer.property.perNodeOpacity.description = Use opacity defined at node level. If true, renderer's opacity property will be ignored. + +EdgeRenderer.name = \u0420\u0451\u0431\u0440\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e +EdgeRenderer.property.display.displayName = \u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0440\u0451\u0431\u0440\u0430 +EdgeRenderer.property.display.description = +EdgeRenderer.property.thickness.displayName = \u0422\u043e\u043b\u0449\u0438\u043d\u0430 +EdgeRenderer.property.thickness.description = +EdgeRenderer.property.rescaleWeight.displayName = \u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0441 +# EdgeRenderer.property.rescaleWeight.description = Rescale edge weights to a normalized range +# EdgeRenderer.property.rescaleWeight.min.displayName = Min. rescaled weight +# EdgeRenderer.property.rescaleWeight.min.description = Mininum allowed weight after rescaling +# EdgeRenderer.property.rescaleWeight.max.displayName = Max. rescaled weight +# EdgeRenderer.property.rescaleWeight.max.description = Maximum allowed weight after rescaling +EdgeRenderer.property.curvedEdges.displayName = \u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0440\u0451\u0431\u0440\u0430 \u043a\u0440\u0438\u0432\u044b\u043c\u0438 +EdgeRenderer.property.curvedEdges.description = +EdgeRenderer.property.color.displayName = \u0426\u0432\u0435\u0442 +EdgeRenderer.property.color.description = +EdgeRenderer.property.opacity.displayName = \u041f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c +EdgeRenderer.property.opacity.description = +EdgeRenderer.property.radius.displayName = \u0420\u0430\u0434\u0438\u0443\u0441 +EdgeRenderer.property.radius.description = + +NodeLabelRenderer.name = \u041c\u0435\u0442\u043a\u0438 \u0443\u0437\u043b\u043e\u0432 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e +NodeLabelRenderer.property.display.displayName = \u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043c\u0435\u0442\u043a\u0438 +NodeLabelRenderer.property.display.description = +NodeLabelRenderer.property.font.displayName = \u0428\u0440\u0438\u0444\u0442 +NodeLabelRenderer.property.font.description = +NodeLabelRenderer.property.proportionalSize.displayName = \u041f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440 +NodeLabelRenderer.property.proportionalSize.description = +NodeLabelRenderer.property.color.displayName = \u0426\u0432\u0435\u0442 +NodeLabelRenderer.property.color.description = +NodeLabelRenderer.property.shorten.displayName = \u0423\u043a\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043a\u0438 +NodeLabelRenderer.property.shorten.description = +NodeLabelRenderer.property.maxchar.displayName = \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 +NodeLabelRenderer.property.maxchar.description = +NodeLabelRenderer.property.outlineSize.displayName = \u0422\u043e\u043b\u0449\u0438\u043d\u0430 \u043e\u0431\u0432\u043e\u0434\u043a\u0438 +NodeLabelRenderer.property.outlineSize.description = +NodeLabelRenderer.property.outlineColor.displayName = \u0426\u0432\u0435\u0442 \u043e\u0431\u0432\u043e\u0434\u043a\u0438 +NodeLabelRenderer.property.outlineColor.description = +NodeLabelRenderer.property.outlineOpacity.displayName = \u041f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0432\u043e\u0434\u043a\u0438 +NodeLabelRenderer.property.outlineOpacity.description = +NodeLabelRenderer.property.box.displayName = \u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0440\u0430\u043c\u043a\u0438 \u043c\u0435\u0442\u043e\u043a +NodeLabelRenderer.property.box.description = +NodeLabelRenderer.property.box.color.displayName = \u0426\u0432\u0435\u0442 \u0440\u0430\u043c\u043a\u0438 \u043c\u0435\u0442\u043e\u043a +NodeLabelRenderer.property.box.color.description = +NodeLabelRenderer.property.box.opacity.displayName = \u041f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u0440\u0430\u043c\u043a\u0438 \u043c\u0435\u0442\u043e\u043a +NodeLabelRenderer.property.box.opacity.description = + +EdgeLabelRenderer.name = \u041c\u0435\u0442\u043a\u0438 \u0440\u0451\u0431\u0435\u0440 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e +EdgeLabelRenderer.property.display.displayName = \u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043c\u0435\u0442\u043a\u0438 +EdgeLabelRenderer.property.display.description = +EdgeLabelRenderer.property.font.displayName = \u0428\u0440\u0438\u0444\u0442 +EdgeLabelRenderer.property.font.description = +EdgeLabelRenderer.property.color.displayName = \u0426\u0432\u0435\u0442 +EdgeLabelRenderer.property.color.description = +EdgeLabelRenderer.property.shorten.displayName = \u0423\u043a\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u0442\u044c \u043c\u0435\u0442\u043a\u0438 +EdgeLabelRenderer.property.shorten.description = +EdgeLabelRenderer.property.maxchar.displayName = \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0441\u0438\u043c\u0432\u043e\u043b\u043e\u0432 +EdgeLabelRenderer.property.maxchar.description = +EdgeLabelRenderer.property.outlineSize.displayName = \u0422\u043e\u043b\u0449\u0438\u043d\u0430 \u043e\u0431\u0432\u043e\u0434\u043a\u0438 \u043c\u0435\u0442\u043e\u043a +EdgeLabelRenderer.property.outlineSize.description = +EdgeLabelRenderer.property.outlineColor.displayName = \u0426\u0432\u0435\u0442 \u043e\u0431\u0432\u043e\u0434\u043a\u0438 \u043c\u0435\u0442\u043e\u043a +EdgeLabelRenderer.property.outlineColor.description = +EdgeLabelRenderer.property.outlineOpacity.displayName = \u041f\u0440\u043e\u0437\u0440\u0430\u0447\u043d\u043e\u0441\u0442\u044c \u043e\u0431\u0432\u043e\u0434\u043a\u0438 \u043c\u0435\u0442\u043e\u043a +EdgeLabelRenderer.property.outlineOpacity.description = + +ArrowRenderer.name = \u0421\u0442\u0440\u0435\u043b\u043a\u0438 \u0440\u0451\u0431\u0435\u0440 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e +ArrowRenderer.property.size.displayName = \u0420\u0430\u0437\u043c\u0435\u0440 +ArrowRenderer.property.size.description = diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_th.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_tr.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_tr.properties new file mode 100644 index 0000000000..fea42e28e4 --- /dev/null +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_tr.properties @@ -0,0 +1,73 @@ +NodeRenderer.name=Default nodes +NodeRenderer.property.borderWidth.displayName=Border Width +NodeRenderer.property.borderWidth.description= +NodeRenderer.property.borderColor.displayName=Border Color +NodeRenderer.property.borderColor.description= +NodeRenderer.property.opacity.displayName=opacity +NodeRenderer.property.opacity.description= +NodeRenderer.property.perNodeOpacity.displayName=Per-Node Opacity +NodeRenderer.property.perNodeOpacity.description=Use opacity defined at node level. If true, renderer's opacity property will be ignored. +EdgeRenderer.name=Default edges +EdgeRenderer.property.display.displayName=Show Edges +EdgeRenderer.property.display.description= +EdgeRenderer.property.thickness.displayName=Thickness +EdgeRenderer.property.thickness.description= +EdgeRenderer.property.rescaleWeight.displayName=Rescale weight +EdgeRenderer.property.rescaleWeight.description=Rescale edge weights to a normalized range +EdgeRenderer.property.rescaleWeight.min.displayName=Min. rescaled weight +EdgeRenderer.property.rescaleWeight.min.description=Mininum allowed weight after rescaling +EdgeRenderer.property.rescaleWeight.max.displayName=Max. rescaled weight +EdgeRenderer.property.rescaleWeight.max.description=Maximum allowed weight after rescaling +EdgeRenderer.property.curvedEdges.displayName=Curved +EdgeRenderer.property.curvedEdges.description= +EdgeRenderer.property.color.displayName=Renk +EdgeRenderer.property.color.description= +EdgeRenderer.property.opacity.displayName=Opacity +EdgeRenderer.property.opacity.description= +EdgeRenderer.property.radius.displayName=Radius +EdgeRenderer.property.radius.description= +NodeLabelRenderer.name=Default node labels +NodeLabelRenderer.property.display.displayName=Show Labels +NodeLabelRenderer.property.display.description= +NodeLabelRenderer.property.font.displayName=Font +NodeLabelRenderer.property.font.description= +NodeLabelRenderer.property.proportionalSize.displayName=Proportional size +NodeLabelRenderer.property.proportionalSize.description= +NodeLabelRenderer.property.color.displayName=Renk +NodeLabelRenderer.property.color.description= +NodeLabelRenderer.property.shorten.displayName=Shorten label +NodeLabelRenderer.property.shorten.description= +NodeLabelRenderer.property.maxchar.displayName=Max characters +NodeLabelRenderer.property.maxchar.description= +NodeLabelRenderer.property.outlineSize.displayName=Outline size +NodeLabelRenderer.property.outlineSize.description= +NodeLabelRenderer.property.outlineColor.displayName=Outline color +NodeLabelRenderer.property.outlineColor.description= +NodeLabelRenderer.property.outlineOpacity.displayName=Outline opacity +NodeLabelRenderer.property.outlineOpacity.description= +NodeLabelRenderer.property.box.displayName=Box +NodeLabelRenderer.property.box.description= +NodeLabelRenderer.property.box.color.displayName=Box color +NodeLabelRenderer.property.box.color.description= +NodeLabelRenderer.property.box.opacity.displayName=Box opacity +NodeLabelRenderer.property.box.opacity.description= +EdgeLabelRenderer.name=Default edge labels +EdgeLabelRenderer.property.display.displayName=Show Labels +EdgeLabelRenderer.property.display.description= +EdgeLabelRenderer.property.font.displayName=Font +EdgeLabelRenderer.property.font.description= +EdgeLabelRenderer.property.color.displayName=Renk +EdgeLabelRenderer.property.color.description= +EdgeLabelRenderer.property.shorten.displayName=Shorten label +EdgeLabelRenderer.property.shorten.description= +EdgeLabelRenderer.property.maxchar.displayName=Max characters +EdgeLabelRenderer.property.maxchar.description= +EdgeLabelRenderer.property.outlineSize.displayName=Outline size +EdgeLabelRenderer.property.outlineSize.description= +EdgeLabelRenderer.property.outlineColor.displayName=Outline color +EdgeLabelRenderer.property.outlineColor.description= +EdgeLabelRenderer.property.outlineOpacity.displayName=Outline opacity +EdgeLabelRenderer.property.outlineOpacity.description= +ArrowRenderer.name=Default edge arrows +ArrowRenderer.property.size.displayName=Boyut +ArrowRenderer.property.size.description= diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_uk.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_uk.properties new file mode 100644 index 0000000000..5b2057b947 --- /dev/null +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_uk.properties @@ -0,0 +1,75 @@ +NodeRenderer.property.fixedBorderWidth.description=\u0420\u0430\u043C\u043A\u0430 \u043C\u0430\u0454 \u0444\u0456\u043A\u0441\u043E\u0432\u0430\u043D\u0438\u0439 \u0440\u043E\u0437\u043C\u0456\u0440. \u042F\u043A\u0449\u043E false, \u0432\u0456\u043D \u043C\u0430\u0441\u0448\u0442\u0430\u0431\u0443\u0454\u0442\u044C\u0441\u044F \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u043D\u043E \u0434\u043E \u0440\u043E\u0437\u043C\u0456\u0440\u0443 \u0432\u0443\u0437\u043B\u0430, \u044F\u043A \u0443 \u00AB\u041E\u0433\u043B\u044F\u0434\u0456\u00BB. +NodeRenderer.property.fixedBorderWidth.displayName=\u0424\u0456\u043A\u0441\u043E\u0432\u0430\u043D\u0430 \u0448\u0438\u0440\u0438\u043D\u0430 \u043C\u0435\u0436\u0456 +NodeRenderer.name=\u0412\u0443\u0437\u043B\u0438 \u0437\u0430 \u0437\u0430\u043C\u043E\u0432\u0447\u0443\u0432\u0430\u043D\u043D\u044F\u043C +NodeLabelRenderer.property.proportionalSize.description=\u0406 +EdgeRenderer.property.display.displayName=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u0438 \u0440\u0435\u0431\u0440\u0430 +NodeLabelRenderer.property.box.displayName=\u041A\u043E\u0440\u043E\u0431\u043A\u0430 +NodeLabelRenderer.property.box.color.displayName=\u041A\u043E\u043B\u0456\u0440 \u043A\u043E\u0440\u043E\u0431\u043A\u0438 +EdgeRenderer.property.display.description=\u0406 +NodeLabelRenderer.property.proportionalSize.displayName=\u041F\u0440\u043E\u043F\u043E\u0440\u0446\u0456\u0439\u043D\u0438\u0439 \u0440\u043E\u0437\u043C\u0456\u0440 +NodeRenderer.property.perNodeOpacity.description=\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0439\u0442\u0435 \u043D\u0435\u043F\u0440\u043E\u0437\u043E\u0440\u0456\u0441\u0442\u044C, \u0432\u0438\u0437\u043D\u0430\u0447\u0435\u043D\u0443 \u043D\u0430 \u0440\u0456\u0432\u043D\u0456 \u0432\u0443\u0437\u043B\u0430. \u042F\u043A\u0449\u043E \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F true, \u0432\u043B\u0430\u0441\u0442\u0438\u0432\u0456\u0441\u0442\u044C \u043D\u0435\u043F\u0440\u043E\u0437\u043E\u0440\u043E\u0441\u0442\u0456 \u0440\u0435\u043D\u0434\u0435\u0440\u0435\u0440\u0430 \u0456\u0433\u043D\u043E\u0440\u0443\u0432\u0430\u0442\u0438\u043C\u0435\u0442\u044C\u0441\u044F. +EdgeRenderer.property.thickness.description=\u0406 +NodeLabelRenderer.property.box.color.description=\u0406 +NodeLabelRenderer.property.outlineSize.displayName=\u041A\u043E\u043D\u0442\u0443\u0440\u043D\u0438\u0439 \u0440\u043E\u0437\u043C\u0456\u0440 +NodeLabelRenderer.property.outlineOpacity.description=\u0406 +EdgeRenderer.name=\u041A\u0440\u0430\u0457 \u0437\u0430 \u0437\u0430\u043C\u043E\u0432\u0447\u0443\u0432\u0430\u043D\u043D\u044F\u043C +NodeLabelRenderer.property.maxchar.displayName=\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430 \u043A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432 +NodeLabelRenderer.property.box.description=\u0406 +NodeLabelRenderer.property.maxchar.description=\u0406 +NodeRenderer.property.borderWidth.displayName=\u0428\u0438\u0440\u0438\u043D\u0430 \u043A\u043E\u0440\u0434\u043E\u043D\u0443 +NodeRenderer.property.borderWidth.description=\u0406 +NodeRenderer.property.borderColor.displayName=\u041A\u043E\u043B\u0456\u0440 \u0440\u0430\u043C\u043A\u0438 +NodeRenderer.property.borderColor.description=\u0406 +NodeRenderer.property.opacity.displayName=\u041D\u0435\u043F\u0440\u043E\u0437\u043E\u0440\u0456\u0441\u0442\u044C +NodeRenderer.property.opacity.description=\u0406 +NodeRenderer.property.perNodeOpacity.displayName=\u041D\u0435\u043F\u0440\u043E\u0437\u043E\u0440\u0456\u0441\u0442\u044C \u043A\u043E\u0436\u043D\u043E\u0433\u043E \u0432\u0443\u0437\u043B\u0430 +EdgeRenderer.property.thickness.displayName=\u0422\u043E\u0432\u0449\u0438\u043D\u0430 +EdgeRenderer.property.rescaleWeight.displayName=\u0417\u043C\u0456\u043D\u0438\u0442\u0438 \u043C\u0430\u0441\u0448\u0442\u0430\u0431 \u0432\u0430\u0433\u0438 +EdgeRenderer.property.rescaleWeight.description=\u041F\u0435\u0440\u0435\u043C\u0430\u0441\u0448\u0442\u0430\u0431\u0443\u0432\u0430\u0442\u0438 \u0432\u0430\u0433\u0438 \u043A\u0440\u0430\u0457\u0432 \u0434\u043E \u043D\u043E\u0440\u043C\u0430\u043B\u0456\u0437\u043E\u0432\u0430\u043D\u043E\u0433\u043E \u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D\u0443 +EdgeRenderer.property.rescaleWeight.min.displayName=\u0425\u0432. \u043F\u0435\u0440\u0435\u0440\u0430\u0445\u043E\u0432\u0430\u043D\u0430 \u0432\u0430\u0433\u0430 +EdgeRenderer.property.rescaleWeight.min.description=\u041C\u0456\u043D\u0456\u043C\u0430\u043B\u044C\u043D\u043E \u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u0430 \u0432\u0430\u0433\u0430 \u043F\u0456\u0441\u043B\u044F \u043F\u0435\u0440\u0435\u0440\u0430\u0445\u0443\u043D\u043A\u0443 +EdgeRenderer.property.rescaleWeight.max.displayName=\u041C\u0430\u043A\u0441. \u043F\u0435\u0440\u0435\u0440\u0430\u0445\u043E\u0432\u0430\u043D\u0430 \u0432\u0430\u0433\u0430 +EdgeRenderer.property.rescaleWeight.max.description=\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u043E \u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u0430 \u0432\u0430\u0433\u0430 \u043F\u0456\u0441\u043B\u044F \u043F\u0435\u0440\u0435\u0440\u0430\u0445\u0443\u043D\u043A\u0443 +EdgeRenderer.property.curvedEdges.displayName=\u0412\u0438\u0433\u043D\u0443\u0442\u0438\u0439 +EdgeRenderer.property.curvedEdges.description=\u0406 +EdgeRenderer.property.color.displayName=\u041A\u043E\u043B\u0456\u0440 +EdgeRenderer.property.color.description=\u0406 +EdgeRenderer.property.opacity.displayName=\u041D\u0435\u043F\u0440\u043E\u0437\u043E\u0440\u0456\u0441\u0442\u044C +EdgeRenderer.property.opacity.description=\u0406 +EdgeRenderer.property.radius.displayName=\u0420\u0430\u0434\u0456\u0443\u0441 +EdgeRenderer.property.radius.description=\u0406 +NodeLabelRenderer.name=\u041C\u0456\u0442\u043A\u0438 \u0432\u0443\u0437\u043B\u0456\u0432 \u0437\u0430 \u0437\u0430\u043C\u043E\u0432\u0447\u0443\u0432\u0430\u043D\u043D\u044F\u043C +NodeLabelRenderer.property.display.displayName=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u0438 \u043C\u0456\u0442\u043A\u0438 +NodeLabelRenderer.property.display.description=\u0406 +NodeLabelRenderer.property.font.displayName=\u0428\u0440\u0438\u0444\u0442 +NodeLabelRenderer.property.font.description=\u0406 +NodeLabelRenderer.property.color.displayName=\u041A\u043E\u043B\u0456\u0440 +NodeLabelRenderer.property.color.description=\u0406 +NodeLabelRenderer.property.shorten.displayName=\u0421\u043A\u043E\u0440\u043E\u0442\u0438\u0442\u0438 \u0435\u0442\u0438\u043A\u0435\u0442\u043A\u0443 +NodeLabelRenderer.property.shorten.description=\u0406 +NodeLabelRenderer.property.outlineSize.description=\u0406 +NodeLabelRenderer.property.outlineColor.displayName=\u041A\u043E\u043B\u0456\u0440 \u043A\u043E\u043D\u0442\u0443\u0440\u0443 +NodeLabelRenderer.property.outlineColor.description=\u0406 +NodeLabelRenderer.property.outlineOpacity.displayName=\u041D\u0435\u043F\u0440\u043E\u0437\u043E\u0440\u0456\u0441\u0442\u044C \u043A\u043E\u043D\u0442\u0443\u0440\u0443 +EdgeLabelRenderer.property.outlineOpacity.displayName=\u041D\u0435\u043F\u0440\u043E\u0437\u043E\u0440\u0456\u0441\u0442\u044C \u043A\u043E\u043D\u0442\u0443\u0440\u0443 +EdgeLabelRenderer.property.display.displayName=\u041F\u043E\u043A\u0430\u0437\u0430\u0442\u0438 \u043C\u0456\u0442\u043A\u0438 +EdgeLabelRenderer.property.display.description=\u0406 +EdgeLabelRenderer.property.maxchar.description=\u0406 +ArrowRenderer.name=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0456 \u043A\u0440\u0430\u0439\u043E\u0432\u0456 \u0441\u0442\u0440\u0456\u043B\u043A\u0438 +NodeLabelRenderer.property.box.opacity.description=\u0406 +EdgeLabelRenderer.property.shorten.description=\u0406 +EdgeLabelRenderer.property.outlineSize.displayName=\u041A\u043E\u043D\u0442\u0443\u0440\u043D\u0438\u0439 \u0440\u043E\u0437\u043C\u0456\u0440 +EdgeLabelRenderer.name=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0456 \u043F\u043E\u0437\u043D\u0430\u0447\u043A\u0438 \u043A\u0440\u0430\u0457\u0432 +NodeLabelRenderer.property.box.opacity.displayName=\u041D\u0435\u043F\u0440\u043E\u0437\u043E\u0440\u0456\u0441\u0442\u044C \u043A\u043E\u0440\u043E\u0431\u043A\u0438 +EdgeLabelRenderer.property.outlineColor.description=\u0406 +EdgeLabelRenderer.property.color.displayName=\u041A\u043E\u043B\u0456\u0440 +EdgeLabelRenderer.property.font.description=\u0406 +EdgeLabelRenderer.property.outlineSize.description=\u0406 +EdgeLabelRenderer.property.outlineColor.displayName=\u041A\u043E\u043B\u0456\u0440 \u043A\u043E\u043D\u0442\u0443\u0440\u0443 +ArrowRenderer.property.size.description=\u0406 +EdgeLabelRenderer.property.shorten.displayName=\u0421\u043A\u043E\u0440\u043E\u0442\u0438\u0442\u0438 \u0435\u0442\u0438\u043A\u0435\u0442\u043A\u0443 +EdgeLabelRenderer.property.outlineOpacity.description=\u0406 +ArrowRenderer.property.size.displayName=\u0420\u043E\u0437\u043C\u0456\u0440 +EdgeLabelRenderer.property.font.displayName=\u0428\u0440\u0438\u0444\u0442 +EdgeLabelRenderer.property.color.description=\u0406 +EdgeLabelRenderer.property.maxchar.displayName=\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430 \u043A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u0441\u0438\u043C\u0432\u043E\u043B\u0456\u0432 diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_zh_CN.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_zh_CN.properties index 29ff21c131..da00d7b5a3 100644 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_zh_CN.properties +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_zh_CN.properties @@ -1,79 +1,79 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-15 09\:15+0000\nLast-Translator\: Xi-Nian Zuo \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - NodeRenderer.name=\u7f3a\u7701\u8282\u70b9 - NodeRenderer.property.borderWidth.displayName=\u8fb9\u6846\u5bbd\u5ea6 - +NodeRenderer.property.borderWidth.description= NodeRenderer.property.borderColor.displayName=\u8fb9\u6846\u989c\u8272 - +NodeRenderer.property.borderColor.description= NodeRenderer.property.opacity.displayName=\u900f\u660e\u5ea6 +NodeRenderer.property.opacity.description= +# NodeRenderer.property.perNodeOpacity.displayName = Per-Node Opacity +# NodeRenderer.property.perNodeOpacity.description = Use opacity defined at node level. If true, renderer's opacity property will be ignored. EdgeRenderer.name=\u7f3a\u7701\u8fb9 - EdgeRenderer.property.display.displayName=\u663e\u793a\u8fb9 - +EdgeRenderer.property.display.description= EdgeRenderer.property.thickness.displayName=\u539a\u5ea6 - +EdgeRenderer.property.thickness.description= EdgeRenderer.property.rescaleWeight.displayName=\u91cd\u65b0\u8c03\u6574\u6743\u91cd - +# EdgeRenderer.property.rescaleWeight.description = Rescale edge weights to a normalized range +# EdgeRenderer.property.rescaleWeight.min.displayName = Min. rescaled weight +# EdgeRenderer.property.rescaleWeight.min.description = Mininum allowed weight after rescaling +# EdgeRenderer.property.rescaleWeight.max.displayName = Max. rescaled weight +# EdgeRenderer.property.rescaleWeight.max.description = Maximum allowed weight after rescaling EdgeRenderer.property.curvedEdges.displayName=\u5f2f\u66f2 - +EdgeRenderer.property.curvedEdges.description= EdgeRenderer.property.color.displayName=\u989c\u8272 - +EdgeRenderer.property.color.description= EdgeRenderer.property.opacity.displayName=\u900f\u660e\u5ea6 - +EdgeRenderer.property.opacity.description= EdgeRenderer.property.radius.displayName=\u534a\u5f84 - +EdgeRenderer.property.radius.description= NodeLabelRenderer.name=\u7f3a\u7701\u8282\u70b9\u6807\u7b7e - NodeLabelRenderer.property.display.displayName=\u663e\u793a\u6807\u7b7e - +NodeLabelRenderer.property.display.description= NodeLabelRenderer.property.font.displayName=\u5b57\u4f53 - +NodeLabelRenderer.property.font.description= NodeLabelRenderer.property.proportionalSize.displayName=\u6bd4\u4f8b\u5927\u5c0f - +NodeLabelRenderer.property.proportionalSize.description= NodeLabelRenderer.property.color.displayName=\u989c\u8272 - +NodeLabelRenderer.property.color.description= NodeLabelRenderer.property.shorten.displayName=\u7f29\u77ed\u6807\u7b7e - +NodeLabelRenderer.property.shorten.description= NodeLabelRenderer.property.maxchar.displayName=\u6700\u5927\u5b57\u4f53 - +NodeLabelRenderer.property.maxchar.description= NodeLabelRenderer.property.outlineSize.displayName=\u8f6e\u5ed3\u5c3a\u5bf8 - +NodeLabelRenderer.property.outlineSize.description= NodeLabelRenderer.property.outlineColor.displayName=\u8f6e\u5ed3\u989c\u8272 - +NodeLabelRenderer.property.outlineColor.description= NodeLabelRenderer.property.outlineOpacity.displayName=\u8f6e\u5ed3\u900f\u660e\u5ea6 - +NodeLabelRenderer.property.outlineOpacity.description= NodeLabelRenderer.property.box.displayName=\u6846 - +NodeLabelRenderer.property.box.description= NodeLabelRenderer.property.box.color.displayName=\u6846\u7684\u989c\u8272 - +NodeLabelRenderer.property.box.color.description= NodeLabelRenderer.property.box.opacity.displayName=\u6846\u900f\u660e - +NodeLabelRenderer.property.box.opacity.description= EdgeLabelRenderer.name=\u7f3a\u7701\u8fb9\u6807\u7b7e - EdgeLabelRenderer.property.display.displayName=\u663e\u793a\u6807\u7b7e - +EdgeLabelRenderer.property.display.description= EdgeLabelRenderer.property.font.displayName=\u5b57\u4f53 - +EdgeLabelRenderer.property.font.description= EdgeLabelRenderer.property.color.displayName=\u989c\u8272 - +EdgeLabelRenderer.property.color.description= EdgeLabelRenderer.property.shorten.displayName=\u7f29\u77ed\u6807\u7b7e - +EdgeLabelRenderer.property.shorten.description= EdgeLabelRenderer.property.maxchar.displayName=\u6700\u591a\u4e2a\u5b57\u5143 - +EdgeLabelRenderer.property.maxchar.description= EdgeLabelRenderer.property.outlineSize.displayName=\u8f6e\u5ed3\u5c3a\u5bf8 - +EdgeLabelRenderer.property.outlineSize.description= EdgeLabelRenderer.property.outlineColor.displayName=\u8f6e\u5ed3\u989c\u8272 - +EdgeLabelRenderer.property.outlineColor.description= EdgeLabelRenderer.property.outlineOpacity.displayName=\u8f6e\u5ed3\u900f\u660e\u5ea6 - +EdgeLabelRenderer.property.outlineOpacity.description= ArrowRenderer.name=\u7f3a\u7701\u8fb9\u7bad\u5934 - ArrowRenderer.property.size.displayName=\u5c3a\u5bf8 +ArrowRenderer.property.size.description= +NodeRenderer.property.perNodeOpacity.displayName=\u8282\u70B9\u4E0D\u900F\u660E\u5EA6 +NodeRenderer.property.perNodeOpacity.description=\u4F7F\u7528\u5728\u8282\u70B9\u7EA7\u522B\u5B9A\u4E49\u7684\u4E0D\u900F\u660E\u5EA6\u3002 \u5982\u679C\u4E3A true\uFF0C\u6E32\u67D3\u5668\u7684 opacity \u5C5E\u6027\u5C06\u88AB\u5FFD\u7565\u3002 +EdgeRenderer.property.rescaleWeight.description=\u5C06\u8FB9\u7F18\u6743\u91CD\u91CD\u65B0\u7F29\u653E\u5230\u6807\u51C6\u5316\u8303\u56F4 +EdgeRenderer.property.rescaleWeight.min.description=\u91CD\u65B0\u7F29\u653E\u540E\u5141\u8BB8\u7684\u6700\u5C0F\u6743\u91CD +NodeRenderer.property.fixedBorderWidth.displayName=\u56FA\u5B9A\u8FB9\u6846\u5BBD\u5EA6 diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_zh_TW.properties b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_zh_TW.properties new file mode 100644 index 0000000000..d51cf04e10 --- /dev/null +++ b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/Bundle_zh_TW.properties @@ -0,0 +1,73 @@ +NodeRenderer.name=Default nodes +NodeRenderer.property.borderWidth.displayName=Border Width +NodeRenderer.property.borderWidth.description= +NodeRenderer.property.borderColor.displayName=Border Color +NodeRenderer.property.borderColor.description= +NodeRenderer.property.opacity.displayName=opacity +NodeRenderer.property.opacity.description= +NodeRenderer.property.perNodeOpacity.displayName=Per-Node Opacity +NodeRenderer.property.perNodeOpacity.description=Use opacity defined at node level. If true, renderer's opacity property will be ignored. +EdgeRenderer.name=Default edges +EdgeRenderer.property.display.displayName=Show Edges +EdgeRenderer.property.display.description= +EdgeRenderer.property.thickness.displayName=Thickness +EdgeRenderer.property.thickness.description= +EdgeRenderer.property.rescaleWeight.displayName=Rescale weight +EdgeRenderer.property.rescaleWeight.description=Rescale edge weights to a normalized range +EdgeRenderer.property.rescaleWeight.min.displayName=Min. rescaled weight +EdgeRenderer.property.rescaleWeight.min.description=Mininum allowed weight after rescaling +EdgeRenderer.property.rescaleWeight.max.displayName=Max. rescaled weight +EdgeRenderer.property.rescaleWeight.max.description=Maximum allowed weight after rescaling +EdgeRenderer.property.curvedEdges.displayName=Curved +EdgeRenderer.property.curvedEdges.description= +EdgeRenderer.property.color.displayName=Color +EdgeRenderer.property.color.description= +EdgeRenderer.property.opacity.displayName=Opacity +EdgeRenderer.property.opacity.description= +EdgeRenderer.property.radius.displayName=Radius +EdgeRenderer.property.radius.description= +NodeLabelRenderer.name=Default node labels +NodeLabelRenderer.property.display.displayName=Show Labels +NodeLabelRenderer.property.display.description= +NodeLabelRenderer.property.font.displayName=Font +NodeLabelRenderer.property.font.description= +NodeLabelRenderer.property.proportionalSize.displayName=Proportional size +NodeLabelRenderer.property.proportionalSize.description= +NodeLabelRenderer.property.color.displayName=Color +NodeLabelRenderer.property.color.description= +NodeLabelRenderer.property.shorten.displayName=Shorten label +NodeLabelRenderer.property.shorten.description= +NodeLabelRenderer.property.maxchar.displayName=Max characters +NodeLabelRenderer.property.maxchar.description= +NodeLabelRenderer.property.outlineSize.displayName=Outline size +NodeLabelRenderer.property.outlineSize.description= +NodeLabelRenderer.property.outlineColor.displayName=Outline color +NodeLabelRenderer.property.outlineColor.description= +NodeLabelRenderer.property.outlineOpacity.displayName=Outline opacity +NodeLabelRenderer.property.outlineOpacity.description= +NodeLabelRenderer.property.box.displayName=Box +NodeLabelRenderer.property.box.description= +NodeLabelRenderer.property.box.color.displayName=Box color +NodeLabelRenderer.property.box.color.description= +NodeLabelRenderer.property.box.opacity.displayName=Box opacity +NodeLabelRenderer.property.box.opacity.description= +EdgeLabelRenderer.name=Default edge labels +EdgeLabelRenderer.property.display.displayName=Show Labels +EdgeLabelRenderer.property.display.description= +EdgeLabelRenderer.property.font.displayName=Font +EdgeLabelRenderer.property.font.description= +EdgeLabelRenderer.property.color.displayName=Color +EdgeLabelRenderer.property.color.description= +EdgeLabelRenderer.property.shorten.displayName=Shorten label +EdgeLabelRenderer.property.shorten.description= +EdgeLabelRenderer.property.maxchar.displayName=Max characters +EdgeLabelRenderer.property.maxchar.description= +EdgeLabelRenderer.property.outlineSize.displayName=Outline size +EdgeLabelRenderer.property.outlineSize.description= +EdgeLabelRenderer.property.outlineColor.displayName=Outline color +EdgeLabelRenderer.property.outlineColor.description= +EdgeLabelRenderer.property.outlineOpacity.displayName=Outline opacity +EdgeLabelRenderer.property.outlineOpacity.description= +ArrowRenderer.name=Default edge arrows +ArrowRenderer.property.size.displayName=Size +ArrowRenderer.property.size.description= diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/cs.po b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/cs.po deleted file mode 100644 index c03af2e1bb..0000000000 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/cs.po +++ /dev/null @@ -1,127 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-12 12:58+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "NodeRenderer.name" -msgstr "VΓ½chozΓ­ uzly" - -msgid "NodeRenderer.property.borderWidth.displayName" -msgstr "Ε Γ­Ε™ka ohraničenΓ­" - -msgid "NodeRenderer.property.borderColor.displayName" -msgstr "Barva ohraničenΓ­" - -msgid "NodeRenderer.property.opacity.displayName" -msgstr "neprΕ―hlednost" - -msgid "EdgeRenderer.name" -msgstr "VΓ½chozΓ­ hrany" - -msgid "EdgeRenderer.property.display.displayName" -msgstr "Zobrazit hrany" - -msgid "EdgeRenderer.property.thickness.displayName" -msgstr "TlouΕ‘Ε₯ka" - -msgid "EdgeRenderer.property.rescaleWeight.displayName" -msgstr "Znovu zmΔ›Ε™it vΓ‘hu" - -msgid "EdgeRenderer.property.curvedEdges.displayName" -msgstr "OblΓ©" - -msgid "EdgeRenderer.property.color.displayName" -msgstr "Barva" - -msgid "EdgeRenderer.property.opacity.displayName" -msgstr "NeprΕ―hlednost" - -msgid "EdgeRenderer.property.radius.displayName" -msgstr "PolomΔ›r" - -msgid "NodeLabelRenderer.name" -msgstr "VΓ½chozΓ­ Ε‘tΓ­tky uzlu" - -msgid "NodeLabelRenderer.property.display.displayName" -msgstr "Zobrazit Ε‘tΓ­tky" - -msgid "NodeLabelRenderer.property.font.displayName" -msgstr "PΓ­smo" - -msgid "NodeLabelRenderer.property.proportionalSize.displayName" -msgstr "PomΔ›r velikosti" - -msgid "NodeLabelRenderer.property.color.displayName" -msgstr "Barva" - -msgid "NodeLabelRenderer.property.shorten.displayName" -msgstr "ZkrΓ‘tit Ε‘tΓ­tek" - -msgid "NodeLabelRenderer.property.maxchar.displayName" -msgstr "Max znakΕ―" - -msgid "NodeLabelRenderer.property.outlineSize.displayName" -msgstr "Velikost obrysu" - -msgid "NodeLabelRenderer.property.outlineColor.displayName" -msgstr "Barva obrysu" - -msgid "NodeLabelRenderer.property.outlineOpacity.displayName" -msgstr "NeprΕ―hlednost obrysu" - -msgid "NodeLabelRenderer.property.box.displayName" -msgstr "RΓ‘meček" - -msgid "NodeLabelRenderer.property.box.color.displayName" -msgstr "Barva rΓ‘mečku" - -msgid "NodeLabelRenderer.property.box.opacity.displayName" -msgstr "NeprΕ―hlednost rΓ‘mečku" - -msgid "EdgeLabelRenderer.name" -msgstr "VΓ½chozΓ­ Ε‘tΓ­tky hrany" - -msgid "EdgeLabelRenderer.property.display.displayName" -msgstr "Zobrazit Ε‘tΓ­tky" - -msgid "EdgeLabelRenderer.property.font.displayName" -msgstr "PΓ­smo" - -msgid "EdgeLabelRenderer.property.color.displayName" -msgstr "Barva" - -msgid "EdgeLabelRenderer.property.shorten.displayName" -msgstr "ZkrΓ‘tit Ε‘tΓ­tek" - -msgid "EdgeLabelRenderer.property.maxchar.displayName" -msgstr "Max znakΕ―" - -msgid "EdgeLabelRenderer.property.outlineSize.displayName" -msgstr "Velikost obrysu" - -msgid "EdgeLabelRenderer.property.outlineColor.displayName" -msgstr "Barva obrysu" - -msgid "EdgeLabelRenderer.property.outlineOpacity.displayName" -msgstr "NeprΕ―hlednost obrysu" - -msgid "ArrowRenderer.name" -msgstr "VΓ½chozΓ­ Ε‘ipky hrany" - -msgid "ArrowRenderer.property.size.displayName" -msgstr "Velikost" diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/es.po b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/es.po deleted file mode 100644 index 1dbe837e9f..0000000000 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/es.po +++ /dev/null @@ -1,127 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-10 21:58+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "NodeRenderer.name" -msgstr "Nodos por defecto" - -msgid "NodeRenderer.property.borderWidth.displayName" -msgstr "Ancho de borde" - -msgid "NodeRenderer.property.borderColor.displayName" -msgstr "Color de borde" - -msgid "NodeRenderer.property.opacity.displayName" -msgstr "Opacidad" - -msgid "EdgeRenderer.name" -msgstr "Aristas por defecto" - -msgid "EdgeRenderer.property.display.displayName" -msgstr "Mostrar aristas" - -msgid "EdgeRenderer.property.thickness.displayName" -msgstr "Grosor" - -msgid "EdgeRenderer.property.rescaleWeight.displayName" -msgstr "Reescalar pesos" - -msgid "EdgeRenderer.property.curvedEdges.displayName" -msgstr "Curvas" - -msgid "EdgeRenderer.property.color.displayName" -msgstr "Color" - -msgid "EdgeRenderer.property.opacity.displayName" -msgstr "Opacidad" - -msgid "EdgeRenderer.property.radius.displayName" -msgstr "Radio" - -msgid "NodeLabelRenderer.name" -msgstr "Etiquetas de nodos por defecto" - -msgid "NodeLabelRenderer.property.display.displayName" -msgstr "Mostrar etiquetas" - -msgid "NodeLabelRenderer.property.font.displayName" -msgstr "Fuente" - -msgid "NodeLabelRenderer.property.proportionalSize.displayName" -msgstr "TamaΓ±o proporcional" - -msgid "NodeLabelRenderer.property.color.displayName" -msgstr "Color" - -msgid "NodeLabelRenderer.property.shorten.displayName" -msgstr "Acortar etiquetas" - -msgid "NodeLabelRenderer.property.maxchar.displayName" -msgstr "CarΓ‘cteres mΓ‘ximos" - -msgid "NodeLabelRenderer.property.outlineSize.displayName" -msgstr "TamaΓ±o del contorno" - -msgid "NodeLabelRenderer.property.outlineColor.displayName" -msgstr "Color del contorno" - -msgid "NodeLabelRenderer.property.outlineOpacity.displayName" -msgstr "Opacidad del contorno" - -msgid "NodeLabelRenderer.property.box.displayName" -msgstr "Caja" - -msgid "NodeLabelRenderer.property.box.color.displayName" -msgstr "Color de la caja" - -msgid "NodeLabelRenderer.property.box.opacity.displayName" -msgstr "Opacidad de la caja" - -msgid "EdgeLabelRenderer.name" -msgstr "Etiquetas de aristas por defecto" - -msgid "EdgeLabelRenderer.property.display.displayName" -msgstr "Mostrar etiquetas" - -msgid "EdgeLabelRenderer.property.font.displayName" -msgstr "Fuente" - -msgid "EdgeLabelRenderer.property.color.displayName" -msgstr "Color" - -msgid "EdgeLabelRenderer.property.shorten.displayName" -msgstr "Acortar etiquetas" - -msgid "EdgeLabelRenderer.property.maxchar.displayName" -msgstr "CarΓ‘cteres mΓ‘ximos" - -msgid "EdgeLabelRenderer.property.outlineSize.displayName" -msgstr "TamaΓ±o del contorno" - -msgid "EdgeLabelRenderer.property.outlineColor.displayName" -msgstr "Color del contorno" - -msgid "EdgeLabelRenderer.property.outlineOpacity.displayName" -msgstr "Opacidad del contorno" - -msgid "ArrowRenderer.name" -msgstr "Flechas de aristas por defecto" - -msgid "ArrowRenderer.property.size.displayName" -msgstr "TamaΓ±o" diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/fr.po b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/fr.po deleted file mode 100644 index f97480d9ba..0000000000 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/fr.po +++ /dev/null @@ -1,127 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-15 14:03+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "NodeRenderer.name" -msgstr "Noeuds par dΓ©faut" - -msgid "NodeRenderer.property.borderWidth.displayName" -msgstr "Largeur de la bordure" - -msgid "NodeRenderer.property.borderColor.displayName" -msgstr "Couleur de la bordure" - -msgid "NodeRenderer.property.opacity.displayName" -msgstr "OpacitΓ©" - -msgid "EdgeRenderer.name" -msgstr "Liens par dΓ©faut" - -msgid "EdgeRenderer.property.display.displayName" -msgstr "Afficher les liens" - -msgid "EdgeRenderer.property.thickness.displayName" -msgstr "Γ‰paisseur" - -msgid "EdgeRenderer.property.rescaleWeight.displayName" -msgstr "Redimensionner le poids" - -msgid "EdgeRenderer.property.curvedEdges.displayName" -msgstr "Courbes" - -msgid "EdgeRenderer.property.color.displayName" -msgstr "Couleur" - -msgid "EdgeRenderer.property.opacity.displayName" -msgstr "OpacitΓ©" - -msgid "EdgeRenderer.property.radius.displayName" -msgstr "Rayon" - -msgid "NodeLabelRenderer.name" -msgstr "Labels de noeud par dΓ©faut" - -msgid "NodeLabelRenderer.property.display.displayName" -msgstr "Afficher les labels" - -msgid "NodeLabelRenderer.property.font.displayName" -msgstr "Police" - -msgid "NodeLabelRenderer.property.proportionalSize.displayName" -msgstr "Taille proportionnelle" - -msgid "NodeLabelRenderer.property.color.displayName" -msgstr "Couleur" - -msgid "NodeLabelRenderer.property.shorten.displayName" -msgstr "Raccourcir les labels" - -msgid "NodeLabelRenderer.property.maxchar.displayName" -msgstr "CaractΓ¨res max" - -msgid "NodeLabelRenderer.property.outlineSize.displayName" -msgstr "Taille de contour" - -msgid "NodeLabelRenderer.property.outlineColor.displayName" -msgstr "Couleur de contour" - -msgid "NodeLabelRenderer.property.outlineOpacity.displayName" -msgstr "OpacitΓ© de contour" - -msgid "NodeLabelRenderer.property.box.displayName" -msgstr "Boite" - -msgid "NodeLabelRenderer.property.box.color.displayName" -msgstr "Couleur de boite" - -msgid "NodeLabelRenderer.property.box.opacity.displayName" -msgstr "OpacitΓ© de la boite" - -msgid "EdgeLabelRenderer.name" -msgstr "Labels de lien par dΓ©faut" - -msgid "EdgeLabelRenderer.property.display.displayName" -msgstr "Afficher les labels" - -msgid "EdgeLabelRenderer.property.font.displayName" -msgstr "Police" - -msgid "EdgeLabelRenderer.property.color.displayName" -msgstr "Couleur" - -msgid "EdgeLabelRenderer.property.shorten.displayName" -msgstr "Raccourcir les labels" - -msgid "EdgeLabelRenderer.property.maxchar.displayName" -msgstr "CaractΓ¨res max" - -msgid "EdgeLabelRenderer.property.outlineSize.displayName" -msgstr "Taille de contour" - -msgid "EdgeLabelRenderer.property.outlineColor.displayName" -msgstr "Couleur de contour" - -msgid "EdgeLabelRenderer.property.outlineOpacity.displayName" -msgstr "OpacitΓ© de contour" - -msgid "ArrowRenderer.name" -msgstr "FlΓ¨ches de lien par dΓ©faut" - -msgid "ArrowRenderer.property.size.displayName" -msgstr "Taille" diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/ja.po b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/ja.po deleted file mode 100644 index 3834bc9546..0000000000 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/ja.po +++ /dev/null @@ -1,127 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-15 09:25+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "NodeRenderer.name" -msgstr "ζ—’εšγƒŽγƒΌγƒ‰" - -msgid "NodeRenderer.property.borderWidth.displayName" -msgstr "ε’ƒη•ŒγεΉ…" - -msgid "NodeRenderer.property.borderColor.displayName" -msgstr "ε’ƒη•Œγθ‰²" - -msgid "NodeRenderer.property.opacity.displayName" -msgstr "δΈι€ιŽεΊ¦" - -msgid "EdgeRenderer.name" -msgstr "ζ—’εšθΎΊ" - -msgid "EdgeRenderer.property.display.displayName" -msgstr "辺を葨瀺" - -msgid "EdgeRenderer.property.thickness.displayName" -msgstr "εŽšγ•" - -msgid "EdgeRenderer.property.rescaleWeight.displayName" -msgstr "重みγε†θ©•δΎ‘" - -msgid "EdgeRenderer.property.curvedEdges.displayName" -msgstr "ζ›²η·š" - -msgid "EdgeRenderer.property.color.displayName" -msgstr "色" - -msgid "EdgeRenderer.property.opacity.displayName" -msgstr "δΈι€ιŽεΊ¦" - -msgid "EdgeRenderer.property.radius.displayName" -msgstr "εŠεΎ„" - -msgid "NodeLabelRenderer.name" -msgstr "ζ—’εšγƒŽγƒΌγƒ‰γƒ©γƒ™γƒ«" - -msgid "NodeLabelRenderer.property.display.displayName" -msgstr "ラベルγθ‘¨η€Ί" - -msgid "NodeLabelRenderer.property.font.displayName" -msgstr "γƒ•γ‚©γƒ³γƒˆ" - -msgid "NodeLabelRenderer.property.proportionalSize.displayName" -msgstr "ηΈ¦ζ¨ͺζ―”γ‚’δΏζŒγ—γŸγ‚΅γ‚€γ‚Ί" - -msgid "NodeLabelRenderer.property.color.displayName" -msgstr "色" - -msgid "NodeLabelRenderer.property.shorten.displayName" -msgstr "ラベルγηŸ­ηΈ" - -msgid "NodeLabelRenderer.property.maxchar.displayName" -msgstr "ζœ€ε€§ζ–‡ε­—" - -msgid "NodeLabelRenderer.property.outlineSize.displayName" -msgstr "θΌͺιƒ­γγ‚΅γ‚€γ‚Ί" - -msgid "NodeLabelRenderer.property.outlineColor.displayName" -msgstr "θΌͺιƒ­γθ‰²" - -msgid "NodeLabelRenderer.property.outlineOpacity.displayName" -msgstr "θΌͺιƒ­γδΈι€ιŽεΊ¦" - -msgid "NodeLabelRenderer.property.box.displayName" -msgstr "η±" - -msgid "NodeLabelRenderer.property.box.color.displayName" -msgstr "η±γθ‰²" - -msgid "NodeLabelRenderer.property.box.opacity.displayName" -msgstr "η±γδΈι€ιŽεΊ¦" - -msgid "EdgeLabelRenderer.name" -msgstr "ζ—’εšθΎΊγƒ©γƒ™γƒ«" - -msgid "EdgeLabelRenderer.property.display.displayName" -msgstr "γƒ©γƒ™γƒ«γ‚’ηŸ­ηΈ" - -msgid "EdgeLabelRenderer.property.font.displayName" -msgstr "γƒ•γ‚©γƒ³γƒˆ" - -msgid "EdgeLabelRenderer.property.color.displayName" -msgstr "色" - -msgid "EdgeLabelRenderer.property.shorten.displayName" -msgstr "γƒ©γƒ™γƒ«γ‚’ηŸ­ηΈ" - -msgid "EdgeLabelRenderer.property.maxchar.displayName" -msgstr "ζœ€ε€§ζ–‡ε­—" - -msgid "EdgeLabelRenderer.property.outlineSize.displayName" -msgstr "θΌͺιƒ­γ‚΅γ‚€γ‚Ί" - -msgid "EdgeLabelRenderer.property.outlineColor.displayName" -msgstr "θΌͺιƒ­γθ‰²" - -msgid "EdgeLabelRenderer.property.outlineOpacity.displayName" -msgstr "θΌͺιƒ­γδΈι€ιŽεΊ¦" - -msgid "ArrowRenderer.name" -msgstr "ζ—’εšθΎΊηŸ’印" - -msgid "ArrowRenderer.property.size.displayName" -msgstr "γ‚΅γ‚€γ‚Ί" diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/org-gephi-preview-plugin-renderers.pot b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/org-gephi-preview-plugin-renderers.pot deleted file mode 100644 index 1524afff06..0000000000 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/org-gephi-preview-plugin-renderers.pot +++ /dev/null @@ -1,124 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "NodeRenderer.name" -msgstr "Default nodes" - -msgid "NodeRenderer.property.borderWidth.displayName" -msgstr "Border Width" - -msgid "NodeRenderer.property.borderColor.displayName" -msgstr "Border Color" - -msgid "NodeRenderer.property.opacity.displayName" -msgstr "opacity" - -msgid "EdgeRenderer.name" -msgstr "Default edges" - -msgid "EdgeRenderer.property.display.displayName" -msgstr "Show Edges" - -msgid "EdgeRenderer.property.thickness.displayName" -msgstr "Thickness" - -msgid "EdgeRenderer.property.rescaleWeight.displayName" -msgstr "Rescale weight" - -msgid "EdgeRenderer.property.curvedEdges.displayName" -msgstr "Curved" - -msgid "EdgeRenderer.property.color.displayName" -msgstr "Color" - -msgid "EdgeRenderer.property.opacity.displayName" -msgstr "Opacity" - -msgid "EdgeRenderer.property.radius.displayName" -msgstr "Radius" - -msgid "NodeLabelRenderer.name" -msgstr "Default node labels" - -msgid "NodeLabelRenderer.property.display.displayName" -msgstr "Show Labels" - -msgid "NodeLabelRenderer.property.font.displayName" -msgstr "Font" - -msgid "NodeLabelRenderer.property.proportionalSize.displayName" -msgstr "Proportional size" - -msgid "NodeLabelRenderer.property.color.displayName" -msgstr "Color" - -msgid "NodeLabelRenderer.property.shorten.displayName" -msgstr "Shorten label" - -msgid "NodeLabelRenderer.property.maxchar.displayName" -msgstr "Max characters" - -msgid "NodeLabelRenderer.property.outlineSize.displayName" -msgstr "Outline size" - -msgid "NodeLabelRenderer.property.outlineColor.displayName" -msgstr "Outline color" - -msgid "NodeLabelRenderer.property.outlineOpacity.displayName" -msgstr "Outline opacity" - -msgid "NodeLabelRenderer.property.box.displayName" -msgstr "Box" - -msgid "NodeLabelRenderer.property.box.color.displayName" -msgstr "Box color" - -msgid "NodeLabelRenderer.property.box.opacity.displayName" -msgstr "Box opacity" - -msgid "EdgeLabelRenderer.name" -msgstr "Default edge labels" - -msgid "EdgeLabelRenderer.property.display.displayName" -msgstr "Show Labels" - -msgid "EdgeLabelRenderer.property.font.displayName" -msgstr "Font" - -msgid "EdgeLabelRenderer.property.color.displayName" -msgstr "Color" - -msgid "EdgeLabelRenderer.property.shorten.displayName" -msgstr "Shorten label" - -msgid "EdgeLabelRenderer.property.maxchar.displayName" -msgstr "Max characters" - -msgid "EdgeLabelRenderer.property.outlineSize.displayName" -msgstr "Outline size" - -msgid "EdgeLabelRenderer.property.outlineColor.displayName" -msgstr "Outline color" - -msgid "EdgeLabelRenderer.property.outlineOpacity.displayName" -msgstr "Outline opacity" - -msgid "ArrowRenderer.name" -msgstr "Default edge arrows" - -msgid "ArrowRenderer.property.size.displayName" -msgstr "Size" diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/pt_BR.po b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/pt_BR.po deleted file mode 100644 index c63ba69fe6..0000000000 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/pt_BR.po +++ /dev/null @@ -1,127 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio Faria Jr. , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-12 12:39+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "NodeRenderer.name" -msgstr "NΓ³s padrΓ£o" - -msgid "NodeRenderer.property.borderWidth.displayName" -msgstr "Largura da borda" - -msgid "NodeRenderer.property.borderColor.displayName" -msgstr "Cor da borda" - -msgid "NodeRenderer.property.opacity.displayName" -msgstr "opacidade" - -msgid "EdgeRenderer.name" -msgstr "Arestas padrΓ£o" - -msgid "EdgeRenderer.property.display.displayName" -msgstr "Mostrar arestas" - -msgid "EdgeRenderer.property.thickness.displayName" -msgstr "Espessura" - -msgid "EdgeRenderer.property.rescaleWeight.displayName" -msgstr "Reescalonar peso" - -msgid "EdgeRenderer.property.curvedEdges.displayName" -msgstr "Curvo" - -msgid "EdgeRenderer.property.color.displayName" -msgstr "Cor" - -msgid "EdgeRenderer.property.opacity.displayName" -msgstr "Opacidade" - -msgid "EdgeRenderer.property.radius.displayName" -msgstr "Raio" - -msgid "NodeLabelRenderer.name" -msgstr "RΓ³tulos dos nΓ³s padrΓ£o" - -msgid "NodeLabelRenderer.property.display.displayName" -msgstr "Mostrar rΓ³tulos" - -msgid "NodeLabelRenderer.property.font.displayName" -msgstr "Fonte" - -msgid "NodeLabelRenderer.property.proportionalSize.displayName" -msgstr "Tamanho proporcional" - -msgid "NodeLabelRenderer.property.color.displayName" -msgstr "Cor" - -msgid "NodeLabelRenderer.property.shorten.displayName" -msgstr "Limitar rΓ³tulos" - -msgid "NodeLabelRenderer.property.maxchar.displayName" -msgstr "NΓΊmero mΓ‘ximo de caracteres" - -msgid "NodeLabelRenderer.property.outlineSize.displayName" -msgstr "Tamanho do contorno" - -msgid "NodeLabelRenderer.property.outlineColor.displayName" -msgstr "Cor do contorno" - -msgid "NodeLabelRenderer.property.outlineOpacity.displayName" -msgstr "Opacidade do contorno" - -msgid "NodeLabelRenderer.property.box.displayName" -msgstr "Caixa" - -msgid "NodeLabelRenderer.property.box.color.displayName" -msgstr "Cor da caixa" - -msgid "NodeLabelRenderer.property.box.opacity.displayName" -msgstr "Opacidade da caixa" - -msgid "EdgeLabelRenderer.name" -msgstr "RΓ³tulos das arestas padrΓ£o" - -msgid "EdgeLabelRenderer.property.display.displayName" -msgstr "Mostrar rΓ³tulos" - -msgid "EdgeLabelRenderer.property.font.displayName" -msgstr "Fonte" - -msgid "EdgeLabelRenderer.property.color.displayName" -msgstr "Cor" - -msgid "EdgeLabelRenderer.property.shorten.displayName" -msgstr "Limitar rΓ³tulos" - -msgid "EdgeLabelRenderer.property.maxchar.displayName" -msgstr "NΓΊmero mΓ‘ximo de caracteres" - -msgid "EdgeLabelRenderer.property.outlineSize.displayName" -msgstr "Tamanho do contorno" - -msgid "EdgeLabelRenderer.property.outlineColor.displayName" -msgstr "Cor do contorno" - -msgid "EdgeLabelRenderer.property.outlineOpacity.displayName" -msgstr "Opacidade do contorno" - -msgid "ArrowRenderer.name" -msgstr "Setas das arestas padrΓ£o" - -msgid "ArrowRenderer.property.size.displayName" -msgstr "Tamanho" diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/ru.po b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/ru.po deleted file mode 100644 index ce0e58132c..0000000000 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/ru.po +++ /dev/null @@ -1,127 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-14 06:18+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "NodeRenderer.name" -msgstr "Π£Π·Π»Ρ‹ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ" - -msgid "NodeRenderer.property.borderWidth.displayName" -msgstr "Π’ΠΎΠ»Ρ‰ΠΈΠ½Π° ΠΎΠ±Π²ΠΎΠ΄ΠΊΠΈ" - -msgid "NodeRenderer.property.borderColor.displayName" -msgstr "Π¦Π²Π΅Ρ‚ ΠΎΠ±Π²ΠΎΠ΄ΠΊΠΈ" - -msgid "NodeRenderer.property.opacity.displayName" -msgstr "ΠŸΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ" - -msgid "EdgeRenderer.name" -msgstr "Π Ρ‘Π±Ρ€Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ" - -msgid "EdgeRenderer.property.display.displayName" -msgstr "ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Ρ€Ρ‘Π±Ρ€Π°" - -msgid "EdgeRenderer.property.thickness.displayName" -msgstr "Π’ΠΎΠ»Ρ‰ΠΈΠ½Π°" - -msgid "EdgeRenderer.property.rescaleWeight.displayName" -msgstr "ΠœΠ°ΡΡˆΡ‚Π°Π±ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ вСс" - -msgid "EdgeRenderer.property.curvedEdges.displayName" -msgstr "ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Ρ€Ρ‘Π±Ρ€Π° ΠΊΡ€ΠΈΠ²Ρ‹ΠΌΠΈ" - -msgid "EdgeRenderer.property.color.displayName" -msgstr "Π¦Π²Π΅Ρ‚" - -msgid "EdgeRenderer.property.opacity.displayName" -msgstr "ΠŸΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ" - -msgid "EdgeRenderer.property.radius.displayName" -msgstr "Радиус" - -msgid "NodeLabelRenderer.name" -msgstr "ΠœΠ΅Ρ‚ΠΊΠΈ ΡƒΠ·Π»ΠΎΠ² ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ" - -msgid "NodeLabelRenderer.property.display.displayName" -msgstr "ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΠΈ" - -msgid "NodeLabelRenderer.property.font.displayName" -msgstr "Π¨Ρ€ΠΈΡ„Ρ‚" - -msgid "NodeLabelRenderer.property.proportionalSize.displayName" -msgstr "ΠŸΡ€ΠΎΠΏΠΎΡ€Ρ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€" - -msgid "NodeLabelRenderer.property.color.displayName" -msgstr "Π¦Π²Π΅Ρ‚" - -msgid "NodeLabelRenderer.property.shorten.displayName" -msgstr "Π£ΠΊΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΠΈ" - -msgid "NodeLabelRenderer.property.maxchar.displayName" -msgstr "МаксимальноС число символов" - -msgid "NodeLabelRenderer.property.outlineSize.displayName" -msgstr "Π’ΠΎΠ»Ρ‰ΠΈΠ½Π° ΠΎΠ±Π²ΠΎΠ΄ΠΊΠΈ" - -msgid "NodeLabelRenderer.property.outlineColor.displayName" -msgstr "Π¦Π²Π΅Ρ‚ ΠΎΠ±Π²ΠΎΠ΄ΠΊΠΈ" - -msgid "NodeLabelRenderer.property.outlineOpacity.displayName" -msgstr "ΠŸΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ ΠΎΠ±Π²ΠΎΠ΄ΠΊΠΈ" - -msgid "NodeLabelRenderer.property.box.displayName" -msgstr "ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ Ρ€Π°ΠΌΠΊΠΈ ΠΌΠ΅Ρ‚ΠΎΠΊ" - -msgid "NodeLabelRenderer.property.box.color.displayName" -msgstr "Π¦Π²Π΅Ρ‚ Ρ€Π°ΠΌΠΊΠΈ ΠΌΠ΅Ρ‚ΠΎΠΊ" - -msgid "NodeLabelRenderer.property.box.opacity.displayName" -msgstr "ΠŸΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ Ρ€Π°ΠΌΠΊΠΈ ΠΌΠ΅Ρ‚ΠΎΠΊ" - -msgid "EdgeLabelRenderer.name" -msgstr "ΠœΠ΅Ρ‚ΠΊΠΈ Ρ€Ρ‘Π±Π΅Ρ€ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ" - -msgid "EdgeLabelRenderer.property.display.displayName" -msgstr "ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΠΈ" - -msgid "EdgeLabelRenderer.property.font.displayName" -msgstr "Π¨Ρ€ΠΈΡ„Ρ‚" - -msgid "EdgeLabelRenderer.property.color.displayName" -msgstr "Π¦Π²Π΅Ρ‚" - -msgid "EdgeLabelRenderer.property.shorten.displayName" -msgstr "Π£ΠΊΠΎΡ€Π°Ρ‡ΠΈΠ²Π°Ρ‚ΡŒ ΠΌΠ΅Ρ‚ΠΊΠΈ" - -msgid "EdgeLabelRenderer.property.maxchar.displayName" -msgstr "МаксимальноС число символов" - -msgid "EdgeLabelRenderer.property.outlineSize.displayName" -msgstr "Π’ΠΎΠ»Ρ‰ΠΈΠ½Π° ΠΎΠ±Π²ΠΎΠ΄ΠΊΠΈ ΠΌΠ΅Ρ‚ΠΎΠΊ" - -msgid "EdgeLabelRenderer.property.outlineColor.displayName" -msgstr "Π¦Π²Π΅Ρ‚ ΠΎΠ±Π²ΠΎΠ΄ΠΊΠΈ ΠΌΠ΅Ρ‚ΠΎΠΊ" - -msgid "EdgeLabelRenderer.property.outlineOpacity.displayName" -msgstr "ΠŸΡ€ΠΎΠ·Ρ€Π°Ρ‡Π½ΠΎΡΡ‚ΡŒ ΠΎΠ±Π²ΠΎΠ΄ΠΊΠΈ ΠΌΠ΅Ρ‚ΠΎΠΊ" - -msgid "ArrowRenderer.name" -msgstr "Π‘Ρ‚Ρ€Π΅Π»ΠΊΠΈ Ρ€Ρ‘Π±Π΅Ρ€ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ" - -msgid "ArrowRenderer.property.size.displayName" -msgstr "Π Π°Π·ΠΌΠ΅Ρ€" diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/zh_CN.po b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/zh_CN.po deleted file mode 100644 index 0915a38718..0000000000 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/renderers/zh_CN.po +++ /dev/null @@ -1,127 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-15 09:15+0000\n" -"Last-Translator: Xi-Nian Zuo \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "NodeRenderer.name" -msgstr "ηΌΊηœθŠ‚η‚Ή" - -msgid "NodeRenderer.property.borderWidth.displayName" -msgstr "边摆ε½εΊ¦" - -msgid "NodeRenderer.property.borderColor.displayName" -msgstr "θΎΉζ‘†ι’œθ‰²" - -msgid "NodeRenderer.property.opacity.displayName" -msgstr "ι€ζ˜ŽεΊ¦" - -msgid "EdgeRenderer.name" -msgstr "缺省边" - -msgid "EdgeRenderer.property.display.displayName" -msgstr "显瀺边" - -msgid "EdgeRenderer.property.thickness.displayName" -msgstr "厚度" - -msgid "EdgeRenderer.property.rescaleWeight.displayName" -msgstr "重新调整权重" - -msgid "EdgeRenderer.property.curvedEdges.displayName" -msgstr "εΌ―ζ›²" - -msgid "EdgeRenderer.property.color.displayName" -msgstr "ι’œθ‰²" - -msgid "EdgeRenderer.property.opacity.displayName" -msgstr "ι€ζ˜ŽεΊ¦" - -msgid "EdgeRenderer.property.radius.displayName" -msgstr "εŠεΎ„" - -msgid "NodeLabelRenderer.name" -msgstr "ηΌΊηœθŠ‚η‚Ήζ ‡η­Ύ" - -msgid "NodeLabelRenderer.property.display.displayName" -msgstr "ζ˜Ύη€Ίζ ‡η­Ύ" - -msgid "NodeLabelRenderer.property.font.displayName" -msgstr "字体" - -msgid "NodeLabelRenderer.property.proportionalSize.displayName" -msgstr "比例倧小" - -msgid "NodeLabelRenderer.property.color.displayName" -msgstr "ι’œθ‰²" - -msgid "NodeLabelRenderer.property.shorten.displayName" -msgstr "ηΌ©ηŸ­ζ ‡η­Ύ" - -msgid "NodeLabelRenderer.property.maxchar.displayName" -msgstr "ζœ€ε€§ε­—δ½“" - -msgid "NodeLabelRenderer.property.outlineSize.displayName" -msgstr "θ½ε»“ε°Ίε―Έ" - -msgid "NodeLabelRenderer.property.outlineColor.displayName" -msgstr "θ½ε»“ι’œθ‰²" - -msgid "NodeLabelRenderer.property.outlineOpacity.displayName" -msgstr "θ½ε»“ι€ζ˜ŽεΊ¦" - -msgid "NodeLabelRenderer.property.box.displayName" -msgstr "摆" - -msgid "NodeLabelRenderer.property.box.color.displayName" -msgstr "ζ‘†ηš„ι’œθ‰²" - -msgid "NodeLabelRenderer.property.box.opacity.displayName" -msgstr "ζ‘†ι€ζ˜Ž" - -msgid "EdgeLabelRenderer.name" -msgstr "ηΌΊηœθΎΉζ ‡η­Ύ" - -msgid "EdgeLabelRenderer.property.display.displayName" -msgstr "ζ˜Ύη€Ίζ ‡η­Ύ" - -msgid "EdgeLabelRenderer.property.font.displayName" -msgstr "字体" - -msgid "EdgeLabelRenderer.property.color.displayName" -msgstr "ι’œθ‰²" - -msgid "EdgeLabelRenderer.property.shorten.displayName" -msgstr "ηΌ©ηŸ­ζ ‡η­Ύ" - -msgid "EdgeLabelRenderer.property.maxchar.displayName" -msgstr "ζœ€ε€šδΈͺε­—ε…ƒ" - -msgid "EdgeLabelRenderer.property.outlineSize.displayName" -msgstr "θ½ε»“ε°Ίε―Έ" - -msgid "EdgeLabelRenderer.property.outlineColor.displayName" -msgstr "θ½ε»“ι’œθ‰²" - -msgid "EdgeLabelRenderer.property.outlineOpacity.displayName" -msgstr "θ½ε»“ι€ζ˜ŽεΊ¦" - -msgid "ArrowRenderer.name" -msgstr "缺省边η­ε€΄" - -msgid "ArrowRenderer.property.size.displayName" -msgstr "ε°Ίε―Έ" diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/ru.po b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/ru.po deleted file mode 100644 index b000f7e7c2..0000000000 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/ru.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-23 07:20+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Π Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ для Item Builders, Renderers ΠΈ RenderTargets" - -msgid "OpenIDE-Module-Short-Description" -msgstr "РСализация Preview SPI" diff --git a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/zh_CN.po b/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/zh_CN.po deleted file mode 100644 index c04e745098..0000000000 --- a/modules/PreviewPlugin/src/main/resources/org/gephi/preview/plugin/zh_CN.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:21+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ε…ƒδ»ΆδΊ§η”Ÿε™¨γ€ζΈ²ζŸ“ε™¨ε’ŒζΈ²ζŸ“ε™¨η›ζ ‡ηš„εžηް" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ι’„θ§ˆSPIηš„εžηް" diff --git a/modules/PreviewPlugin/src/test/java/org/gephi/preview/plugin/LabelBuilderTest.java b/modules/PreviewPlugin/src/test/java/org/gephi/preview/plugin/LabelBuilderTest.java new file mode 100644 index 0000000000..1949fc69d4 --- /dev/null +++ b/modules/PreviewPlugin/src/test/java/org/gephi/preview/plugin/LabelBuilderTest.java @@ -0,0 +1,80 @@ +package org.gephi.preview.plugin; + +import java.util.Arrays; +import org.gephi.graph.GraphGenerator; +import org.gephi.graph.api.Graph; +import org.gephi.preview.api.Item; +import org.gephi.preview.plugin.builders.EdgeLabelBuilder; +import org.gephi.preview.plugin.builders.NodeLabelBuilder; +import org.gephi.preview.plugin.items.EdgeLabelItem; +import org.gephi.preview.plugin.items.NodeLabelItem; +import org.gephi.project.api.Project; +import org.gephi.project.api.ProjectController; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.openide.util.Lookup; + +public class LabelBuilderTest { + + private Project project; + + @Before + public void setUp() { + ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); + project = pc.newProject(); + } + + @After + public void cleanUp() { + ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); + pc.closeCurrentProject(); + project = null; + } + + @Test + public void testDefaultNullNodes() { + Graph graph = GraphGenerator.build(project.getCurrentWorkspace()).generateTinyGraph().getGraph(); + + Item[] items = new NodeLabelBuilder().getItems(graph); + Assert.assertEquals(0, items.length); + } + + @Test + public void testDefaultNullEdges() { + Graph graph = GraphGenerator.build(project.getCurrentWorkspace()).generateTinyGraph().getGraph(); + + Item[] items = new EdgeLabelBuilder().getItems(graph); + Assert.assertEquals(0, items.length); + } + + @Test + public void testEmptyNodeLabel() { + Graph graph = GraphGenerator.build(project.getCurrentWorkspace()).generateTinyGraph().getGraph(); + graph.getNode(GraphGenerator.FIRST_NODE).setLabel(""); + + Item[] items = new NodeLabelBuilder().getItems(graph); + Assert.assertEquals(0, items.length); + } + + @Test + public void testNodeLabels() { + Graph graph = GraphGenerator.build(project.getCurrentWorkspace()).generateTinyGraph().addNodeLabels().getGraph(); + + Item[] items = new NodeLabelBuilder().getItems(graph); + Assert.assertEquals(graph.getNodeCount(), items.length); + Arrays.stream(items).forEach(i -> Assert.assertTrue(i instanceof NodeLabelItem)); + Assert.assertEquals(graph.getNode(GraphGenerator.FIRST_NODE).getLabel(), items[0].getData(NodeLabelItem.LABEL)); + } + + @Test + public void testEdgeLabels() { + Graph graph = GraphGenerator.build(project.getCurrentWorkspace()).generateTinyGraph().addEdgeLabels().getGraph(); + + Item[] items = new EdgeLabelBuilder().getItems(graph); + Assert.assertEquals(graph.getEdgeCount(), items.length); + Arrays.stream(items).forEach(i -> Assert.assertTrue(i instanceof EdgeLabelItem)); + Assert.assertEquals(graph.getEdge(GraphGenerator.FIRST_EDGE).getLabel(), items[0].getData(EdgeLabelItem.LABEL)); + } +} diff --git a/modules/ProcessorPlugin/pom.xml b/modules/ProcessorPlugin/pom.xml deleted file mode 100644 index cad79d3b23..0000000000 --- a/modules/ProcessorPlugin/pom.xml +++ /dev/null @@ -1,58 +0,0 @@ - - - 4.0.0 - - gephi-parent - org.gephi - 0.9-SNAPSHOT - ../.. - - - org.gephi - io-processor-plugin - 0.9-SNAPSHOT - nbm - - ProcessorPlugin - - - - ${project.groupId} - dynamic-api - - - ${project.groupId} - graph-api - - - ${project.groupId} - project-api - - - ${project.groupId} - io-importer-api - - - org.netbeans.api - org-openide-util - - - org.netbeans.api - org-openide-util-lookup - - - - - - - org.codehaus.mojo - nbm-maven-plugin - - - org.gephi.io.processor.plugin - - - - - - diff --git a/modules/ProcessorPlugin/src/main/java/org/gephi/io/processor/plugin/AbstractProcessor.java b/modules/ProcessorPlugin/src/main/java/org/gephi/io/processor/plugin/AbstractProcessor.java deleted file mode 100644 index 35813971d9..0000000000 --- a/modules/ProcessorPlugin/src/main/java/org/gephi/io/processor/plugin/AbstractProcessor.java +++ /dev/null @@ -1,206 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.io.processor.plugin; - -import java.awt.Color; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.attribute.api.AttributeUtils; -import org.gephi.attribute.api.Origin; -import org.gephi.attribute.api.Table; -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.Node; -import org.gephi.io.importer.api.ColumnDraft; -import org.gephi.io.importer.api.ContainerUnloader; -import org.gephi.io.importer.api.EdgeDraft; -import org.gephi.io.importer.api.NodeDraft; -import org.gephi.project.api.Workspace; - -/** - * - * @author Mathieu Bastian - */ -public abstract class AbstractProcessor { - - protected Workspace workspace; - protected ContainerUnloader container; - protected AttributeModel attributeModel; - - protected void flushColumns() { - Table nodeTable = attributeModel.getNodeTable(); - for (ColumnDraft col : container.getNodeColumns()) { - if (!nodeTable.hasColumn(col.getId())) { - Class typeClass = col.getTypeClass(); - if (col.isDynamic()) { - typeClass = AttributeUtils.getDynamicType(typeClass); - } - nodeTable.addColumn(col.getId(), col.getTitle(), typeClass, Origin.DATA, col.getDefaultValue(), true); - } - } - Table edgeTable = attributeModel.getEdgeTable(); - for (ColumnDraft col : container.getEdgeColumns()) { - if (!edgeTable.hasColumn(col.getId())) { - Class typeClass = col.getTypeClass(); - if (col.isDynamic()) { - typeClass = AttributeUtils.getDynamicType(typeClass); - } - edgeTable.addColumn(col.getId(), col.getTitle(), typeClass, Origin.DATA, col.getDefaultValue(), true); - } - } - } - - protected void flushToNode(NodeDraft nodeDraft, Node node) { - if (nodeDraft.getColor() != null) { - node.setColor(nodeDraft.getColor()); - } - - if (nodeDraft.getLabel() != null) { - node.setLabel(nodeDraft.getLabel()); - } - - if (node.getTextProperties() != null) { - node.getTextProperties().setVisible(nodeDraft.isLabelVisible()); - } - - if (nodeDraft.getLabelColor() != null && node.getTextProperties() != null) { - Color labelColor = nodeDraft.getLabelColor(); - node.getTextProperties().setColor(labelColor); - } - - if (nodeDraft.getLabelSize() != -1f && node.getTextProperties() != null) { - node.getTextProperties().setSize(nodeDraft.getLabelSize()); - } - - node.setX(nodeDraft.getX()); - node.setY(nodeDraft.getY()); - node.setZ(nodeDraft.getZ()); - - if (nodeDraft.getSize() != 0 && !Float.isNaN(nodeDraft.getSize())) { - node.setSize(nodeDraft.getSize()); - } else { - node.setSize(10f); - } - - //Attributes - flushToNodeAttributes(nodeDraft, node); - } - - protected void flushToNodeAttributes(NodeDraft nodeDraft, Node node) { - for (ColumnDraft col : container.getNodeColumns()) { - if (col.isDynamic()) { - double[] timestamps = nodeDraft.getTimestamps(col.getId()); - if (timestamps != null) { - for (double d : timestamps) { - Object val = nodeDraft.getValue(col.getId(), d); - if (val != null) { - node.setAttribute(col.getId(), val, d); - } - } - } - } else { - Object val = nodeDraft.getValue(col.getId()); - if (val != null) { - node.setAttribute(col.getId(), val); - } - } - } - } - - protected void flushToEdge(EdgeDraft edgeDraft, Edge edge) { - if (edgeDraft.getColor() != null) { - edge.setColor(edgeDraft.getColor()); - } else { - edge.setR(0f); - edge.setG(0f); - edge.setB(0f); - edge.setAlpha(0f); - } - - if (edgeDraft.getLabel() != null) { - edge.setLabel(edgeDraft.getLabel()); - } - - if (edge.getTextProperties() != null) { - edge.getTextProperties().setVisible(edgeDraft.isLabelVisible()); - } - - if (edgeDraft.getLabelSize() != -1f && edge.getTextProperties() != null) { - edge.getTextProperties().setSize(edgeDraft.getLabelSize()); - } - - if (edgeDraft.getLabelColor() != null && edge.getTextProperties() != null) { - Color labelColor = edgeDraft.getLabelColor(); - edge.getTextProperties().setColor(labelColor); - } - - //Attributes - flushToEdgeAttributes(edgeDraft, edge); - } - - protected void flushToEdgeAttributes(EdgeDraft edgeDraft, Edge edge) { - for (ColumnDraft col : container.getEdgeColumns()) { - if (col.isDynamic()) { - double[] timestamps = edgeDraft.getTimestamps(col.getId()); - if (timestamps != null) { - for (double d : timestamps) { - Object val = edgeDraft.getValue(col.getId(), d); - if (val != null) { - edge.setAttribute(col.getId(), val, d); - } - } - } - } else { - Object val = edgeDraft.getValue(col.getId()); - if (val != null) { - edge.setAttribute(col.getId(), val); - } - } - } - } - - public void setWorkspace(Workspace workspace) { - this.workspace = workspace; - } - - public void setContainer(ContainerUnloader container) { - this.container = container; - } -} diff --git a/modules/ProcessorPlugin/src/main/java/org/gephi/io/processor/plugin/AppendProcessor.java b/modules/ProcessorPlugin/src/main/java/org/gephi/io/processor/plugin/AppendProcessor.java deleted file mode 100644 index b4fe9cb325..0000000000 --- a/modules/ProcessorPlugin/src/main/java/org/gephi/io/processor/plugin/AppendProcessor.java +++ /dev/null @@ -1,155 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.io.processor.plugin; - -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.Graph; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.GraphFactory; -import org.gephi.graph.api.GraphModel; -import org.gephi.graph.api.Node; -import org.gephi.io.importer.api.EdgeDirection; -import org.gephi.io.importer.api.EdgeDraft; -import org.gephi.io.importer.api.NodeDraft; -import org.gephi.io.processor.spi.Processor; -import org.gephi.project.api.ProjectController; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; -import org.openide.util.lookup.ServiceProvider; - -/** - * Processor 'Append graph' that tries to find in the current workspace nodes - * and edges in the container to only append new elements. It uses elements' id - * and label to do the matching. - *

            - * The attibutes are not merged and values are from the latest element imported. - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = Processor.class) -public class AppendProcessor extends AbstractProcessor implements Processor { - - @Override - public String getDisplayName() { - return NbBundle.getMessage(AppendProcessor.class, "AppendProcessor.displayName"); - } - - @Override - public void process() { - ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); - //Workspace - if (workspace == null) { - workspace = pc.getCurrentWorkspace(); - if (workspace == null) { - //Append mode but no workspace - workspace = pc.newWorkspace(pc.getCurrentProject()); - pc.openWorkspace(workspace); - } - } - if (container.getSource() != null) { - pc.setSource(workspace, container.getSource()); - } - - //Architecture - GraphController graphController = Lookup.getDefault().lookup(GraphController.class); - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - - Graph graph = graphModel.getGraph(); - GraphFactory factory = graphModel.factory(); - - //Attributes - Creates columns for properties - attributeModel = graphController.getAttributeModel(); - flushColumns(); - - //Dynamic -// if (container.getTimeFormat() != null) { -// DynamicController dynamicController = Lookup.getDefault().lookup(DynamicController.class); -// dynamicController.setTimeFormat(container.getTimeFormat()); -// } - - int nodeCount = 0; - //Create all nodes - for (NodeDraft draftNode : container.getNodes()) { - String id = draftNode.getId(); - Node node = graph.getNode(id); - if (node == null) { - node = factory.newNode(id); - graph.addNode(node); - nodeCount++; - } - flushToNode(draftNode, node); - } - - //Create all edges and push to data structure - int edgeCount = 0; - for (EdgeDraft draftEdge : container.getEdges()) { - String id = draftEdge.getId(); - String sourceId = draftEdge.getSource().getId(); - String targetId = draftEdge.getTarget().getId(); - Node source = graph.getNode(sourceId); - Node target = graph.getNode(targetId); - Object type = draftEdge.getType(); - int edgeType = graphModel.addEdgeType(type); - - Edge edge = graph.getEdge(source, target, edgeType); - if (edge == null) { - switch (container.getEdgeDefault()) { - case DIRECTED: - edge = factory.newEdge(id, source, target, edgeType, draftEdge.getWeight(), true); - break; - case UNDIRECTED: - edge = factory.newEdge(id, source, target, edgeType, draftEdge.getWeight(), true); - break; - case MIXED: - boolean directed = draftEdge.getDirection().equals(EdgeDirection.UNDIRECTED) ? false : true; - edge = factory.newEdge(id, source, target, edgeType, draftEdge.getWeight(), directed); - } - edgeCount++; - graph.addEdge(edge); - } - flushToEdge(draftEdge, edge); - } - - System.out.println("# New Nodes appended: " + nodeCount + "\n# New Edges appended: " + edgeCount); - workspace = null; - } -} diff --git a/modules/ProcessorPlugin/src/main/java/org/gephi/io/processor/plugin/DefaultProcessor.java b/modules/ProcessorPlugin/src/main/java/org/gephi/io/processor/plugin/DefaultProcessor.java deleted file mode 100644 index 994e1b740d..0000000000 --- a/modules/ProcessorPlugin/src/main/java/org/gephi/io/processor/plugin/DefaultProcessor.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.io.processor.plugin; - -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.Graph; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.GraphFactory; -import org.gephi.graph.api.GraphModel; -import org.gephi.graph.api.Node; -import org.gephi.io.importer.api.EdgeDirection; -import org.gephi.io.importer.api.EdgeDraft; -import org.gephi.io.importer.api.NodeDraft; -import org.gephi.io.processor.spi.Processor; -import org.gephi.project.api.ProjectController; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; -import org.openide.util.lookup.ServiceProvider; - -/** - * Processor 'Add full graph' that unloads the complete container into the - * workspace. - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = Processor.class, position = 10) -public class DefaultProcessor extends AbstractProcessor implements Processor { - - @Override - public String getDisplayName() { - return NbBundle.getMessage(DefaultProcessor.class, "DefaultProcessor.displayName"); - } - - @Override - public void process() { - //Workspace - ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); - if (workspace == null) { - workspace = pc.newWorkspace(pc.getCurrentProject()); - pc.openWorkspace(workspace); - } - if (container.getSource() != null) { - pc.setSource(workspace, container.getSource()); - } - - //Architecture - GraphController graphController = Lookup.getDefault().lookup(GraphController.class); - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - - Graph graph = graphModel.getGraph();; - GraphFactory factory = graphModel.factory(); - - //Attributes - Creates columns for properties - attributeModel = graphController.getAttributeModel(); - flushColumns(); - - //Dynamic -// if (container.getTimeFormat() != null) { -// DynamicController dynamicController = Lookup.getDefault().lookup(DynamicController.class); -// if (dynamicController != null) { -// dynamicController.setTimeFormat(container.getTimeFormat()); -// } -// } - - int nodeCount = 0; - //Create all nodes - for (NodeDraft draftNode : container.getNodes()) { - String id = draftNode.getId(); - Node node = factory.newNode(id); - graph.addNode(node); - nodeCount++; - flushToNode(draftNode, node); - } - - //Create all edges and push to data structure - int edgeCount = 0; - for (EdgeDraft draftEdge : container.getEdges()) { - String id = draftEdge.getId(); - String sourceId = draftEdge.getSource().getId(); - String targetId = draftEdge.getTarget().getId(); - Node source = graph.getNode(sourceId); - Node target = graph.getNode(targetId); - Object type = draftEdge.getType(); - int edgeType = graphModel.addEdgeType(type); - - Edge edge = graph.getEdge(source, target, edgeType); - switch (container.getEdgeDefault()) { - case DIRECTED: - edge = factory.newEdge(id, source, target, edgeType, draftEdge.getWeight(), true); - break; - case UNDIRECTED: - edge = factory.newEdge(id, source, target, edgeType, draftEdge.getWeight(), false); - break; - case MIXED: - boolean directed = draftEdge.getDirection() != null && draftEdge.getDirection().equals(EdgeDirection.UNDIRECTED) ? false : true; - edge = factory.newEdge(id, source, target, edgeType, draftEdge.getWeight(), directed); - } - edgeCount++; - graph.addEdge(edge); - - flushToEdge(draftEdge, edge); - } - System.out.println("# Nodes loaded: " + nodeCount + "\n# Edges loaded: " + edgeCount); - workspace = null; - } -} diff --git a/modules/ProcessorPlugin/src/main/nbm/manifest.mf b/modules/ProcessorPlugin/src/main/nbm/manifest.mf deleted file mode 100644 index d1e37f5f27..0000000000 --- a/modules/ProcessorPlugin/src/main/nbm/manifest.mf +++ /dev/null @@ -1,4 +0,0 @@ -Manifest-Version: 1.0 -AutoUpdate-Essential-Module: true -OpenIDE-Module-Localizing-Bundle: org/gephi/io/processor/plugin/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file diff --git a/modules/ProcessorPlugin/src/main/nbm/module.xml b/modules/ProcessorPlugin/src/main/nbm/module.xml deleted file mode 100644 index cc44444936..0000000000 --- a/modules/ProcessorPlugin/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle.properties b/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle.properties deleted file mode 100644 index 96e2968d94..0000000000 --- a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle.properties +++ /dev/null @@ -1,7 +0,0 @@ -OpenIDE-Module-Display-Category=Plugin -OpenIDE-Module-Name=Processor Plugin -OpenIDE-Module-Short-Description=Processor implementations, control how data are appened from Import to Graph - -AppendProcessor.displayName = Append Graph -DefaultProcessor.displayName = New graph -DynamicProcessor.displayName = Time frame \ No newline at end of file diff --git a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_cs.properties b/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_cs.properties deleted file mode 100644 index 574c4e16b1..0000000000 --- a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_cs.properties +++ /dev/null @@ -1,15 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-16 21\:54+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Short-Description=Zaveden\u00ed procesoru, kontrolujte, jak jsou data p\u0159ipojov\u00e1na z importu do grafu - -AppendProcessor.displayName=P\u0159ipojit graf - -DefaultProcessor.displayName=Nov\u00fd graf - -DynamicProcessor.displayName=\u010casov\u00fd r\u00e1mec diff --git a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_es.properties b/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_es.properties deleted file mode 100644 index 46c6365578..0000000000 --- a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_es.properties +++ /dev/null @@ -1,15 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:59+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Short-Description=Implementaciones de procesadores, controlar como los datos son a\u00f1adidos desde el importador al grafo - -AppendProcessor.displayName=A\u00f1adir al grafo - -DefaultProcessor.displayName=A\u00f1adir grafo completo - -DynamicProcessor.displayName=Marco temporal diff --git a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_fr.properties b/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_fr.properties deleted file mode 100644 index ea7e002583..0000000000 --- a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_fr.properties +++ /dev/null @@ -1,15 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:59+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Impl\u00e9mentation du processeur, contr\u00f4le comment les donn\u00e9es sont ajout\u00e9es \u00e0 l'import. - -AppendProcessor.displayName=Ajouter au graphe - -DefaultProcessor.displayName=Nouveau graphe - -DynamicProcessor.displayName=Tranche temporelle diff --git a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_ja.properties b/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_ja.properties deleted file mode 100644 index f508431d8f..0000000000 --- a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_ja.properties +++ /dev/null @@ -1,15 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-03 11\:09+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u30d7\u30ed\u30bb\u30c3\u30b5\u306e\u5b9f\u88c5\u3001\u30c7\u30fc\u30bf\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u304b\u3089\u30b0\u30e9\u30d5\u306b\u52a0\u3048\u308b\u65b9\u6cd5\u3092\u5236\u5fa1\u3059\u308b - -AppendProcessor.displayName=\u30b0\u30e9\u30d5\u3092\u8ffd\u52a0 - -DefaultProcessor.displayName=\u65b0\u898f\u30b0\u30e9\u30d5 - -DynamicProcessor.displayName=\u30bf\u30a4\u30e0\u30d5\u30ec\u30fc\u30e0 diff --git a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_pt_BR.properties b/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_pt_BR.properties deleted file mode 100644 index 97e5b85405..0000000000 --- a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_pt_BR.properties +++ /dev/null @@ -1,15 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 15\:08+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Implementa\u00e7\u00f5es de Processadores, que controlam como os dados s\u00e3o importados pela op\u00e7\u00e3o "Importa\u00e7\u00e3o para Grafo" - -AppendProcessor.displayName=Anexar grafo - -DefaultProcessor.displayName=Novo grafo - -DynamicProcessor.displayName=Per\u00edodo de tempo diff --git a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_ru.properties b/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_ru.properties deleted file mode 100644 index b475e3ab16..0000000000 --- a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_ru.properties +++ /dev/null @@ -1,15 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-11-09 08\:06+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u043f\u0440\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438 \u0433\u0440\u0430\u0444\u0430 - -AppendProcessor.displayName=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043a \u0433\u0440\u0430\u0444\u0443 - -DefaultProcessor.displayName=\u041d\u043e\u0432\u044b\u0439 \u0433\u0440\u0430\u0444 - -DynamicProcessor.displayName=\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0441\u0440\u0435\u0437 diff --git a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_zh_CN.properties b/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_zh_CN.properties deleted file mode 100644 index 810c975513..0000000000 --- a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/Bundle_zh_CN.properties +++ /dev/null @@ -1,14 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:08+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u5904\u7406\u5668\u5b9e\u73b0\uff0c\u63a7\u5236\u6570\u636e\u662f\u5982\u4f55\u4ece\u5bfc\u5165\u5230\u8ffd\u52a0\u56fe - -AppendProcessor.displayName=\u8ffd\u52a0\u56fe - -DefaultProcessor.displayName=\u65b0\u56fe - -DynamicProcessor.displayName=\u65f6\u95f4\u5e27 diff --git a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/cs.po b/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/cs.po deleted file mode 100644 index 6b7a4a4939..0000000000 --- a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/cs.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-16 21:54+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ZavedenΓ­ procesoru, kontrolujte, jak jsou data pΕ™ipojovΓ‘na z importu do grafu" - -msgid "AppendProcessor.displayName" -msgstr "PΕ™ipojit graf" - -msgid "DefaultProcessor.displayName" -msgstr "NovΓ½ graf" - -msgid "DynamicProcessor.displayName" -msgstr "ČasovΓ½ rΓ‘mec" diff --git a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/es.po b/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/es.po deleted file mode 100644 index 82a57e6046..0000000000 --- a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/es.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:59+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implementaciones de procesadores, controlar como los datos son aΓ±adidos desde el importador al grafo" - -msgid "AppendProcessor.displayName" -msgstr "AΓ±adir al grafo" - -msgid "DefaultProcessor.displayName" -msgstr "AΓ±adir grafo completo" - -msgid "DynamicProcessor.displayName" -msgstr "Marco temporal" diff --git a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/fr.po b/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/fr.po deleted file mode 100644 index d5ddeba0d2..0000000000 --- a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/fr.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:59+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplΓ©mentation du processeur, contrΓ΄le comment les donnΓ©es sont ajoutΓ©es Γ  l'import." - -msgid "AppendProcessor.displayName" -msgstr "Ajouter au graphe" - -msgid "DefaultProcessor.displayName" -msgstr "Nouveau graphe" - -msgid "DynamicProcessor.displayName" -msgstr "Tranche temporelle" diff --git a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/ja.po b/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/ja.po deleted file mode 100644 index 1865baf1a3..0000000000 --- a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/ja.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-03 11:09+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "プロセッァγεŸθ£…γ€γƒ‡γƒΌγ‚Ώγ‚’γ‚€γƒ³γƒγƒΌγƒˆγ‹γ‚‰γ‚°γƒ©γƒ•γ«εŠ γˆγ‚‹ζ–Ήζ³•γ‚’εˆΆεΎ‘する" - -msgid "AppendProcessor.displayName" -msgstr "γ‚°γƒ©γƒ•γ‚’θΏ½εŠ " - -msgid "DefaultProcessor.displayName" -msgstr "新規グラフ" - -msgid "DynamicProcessor.displayName" -msgstr "タむムフレーム" diff --git a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/org-gephi-io-processor-plugin.pot b/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/org-gephi-io-processor-plugin.pot deleted file mode 100644 index f74a47ebcc..0000000000 --- a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/org-gephi-io-processor-plugin.pot +++ /dev/null @@ -1,29 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "" -"Processor implementations, control how data are appened from Import to Graph" - -msgid "AppendProcessor.displayName" -msgstr "Append Graph" - -msgid "DefaultProcessor.displayName" -msgstr "New graph" - -msgid "DynamicProcessor.displayName" -msgstr "Time frame" diff --git a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/pt_BR.po b/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/pt_BR.po deleted file mode 100644 index b869922d5d..0000000000 --- a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/pt_BR.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 15:08+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplementaΓ§Γ΅es de Processadores, que controlam como os dados sΓ£o importados pela opΓ§Γ£o \"ImportaΓ§Γ£o para Grafo\"" - -msgid "AppendProcessor.displayName" -msgstr "Anexar grafo" - -msgid "DefaultProcessor.displayName" -msgstr "Novo grafo" - -msgid "DynamicProcessor.displayName" -msgstr "PerΓ­odo de tempo" diff --git a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/ru.po b/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/ru.po deleted file mode 100644 index a29a0b8e00..0000000000 --- a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/ru.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-11-09 08:06+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "РСализация ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Ρ… ΠΏΡ€ΠΈ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π³Ρ€Π°Ρ„Π°" - -msgid "AppendProcessor.displayName" -msgstr "Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΊ Π³Ρ€Π°Ρ„Ρƒ" - -msgid "DefaultProcessor.displayName" -msgstr "Новый Π³Ρ€Π°Ρ„" - -msgid "DynamicProcessor.displayName" -msgstr "Π’Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ срСз" diff --git a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/zh_CN.po b/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/zh_CN.po deleted file mode 100644 index 897c12b749..0000000000 --- a/modules/ProcessorPlugin/src/main/resources/org/gephi/io/processor/plugin/zh_CN.po +++ /dev/null @@ -1,30 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:08+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "倄理器εžηŽ°οΌŒζŽ§εˆΆζ•°ζζ˜―ε¦‚δ½•δ»Žε―Όε…₯εˆ°θΏ½εŠ ε›Ύ" - -msgid "AppendProcessor.displayName" -msgstr "θΏ½εŠ ε›Ύ" - -msgid "DefaultProcessor.displayName" -msgstr "ζ–°ε›Ύ" - -msgid "DynamicProcessor.displayName" -msgstr "ζ—Άι—΄εΈ§" diff --git a/modules/ProcessorPluginUI/pom.xml b/modules/ProcessorPluginUI/pom.xml deleted file mode 100644 index fb6934a74a..0000000000 --- a/modules/ProcessorPluginUI/pom.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - 4.0.0 - - gephi-parent - org.gephi - 0.9-SNAPSHOT - ../.. - - - org.gephi - processor-plugin-ui - 0.9-SNAPSHOT - nbm - - ProcessorPluginUI - - - - ${project.groupId} - dynamic-api - - - ${project.groupId} - io-importer-api - - - ${project.groupId} - io-processor-plugin - - - ${project.groupId} - lib.validation - - - ${project.groupId} - project-api - - - ${project.groupId} - ui-library-wrapper - - - org.netbeans.api - org-openide-util - - - org.netbeans.api - org-openide-util-lookup - - - - - - - org.codehaus.mojo - nbm-maven-plugin - - - - - - - - diff --git a/modules/ProcessorPluginUI/src/main/nbm/manifest.mf b/modules/ProcessorPluginUI/src/main/nbm/manifest.mf deleted file mode 100644 index c55c1f38b0..0000000000 --- a/modules/ProcessorPluginUI/src/main/nbm/manifest.mf +++ /dev/null @@ -1,4 +0,0 @@ -Manifest-Version: 1.0 -AutoUpdate-Essential-Module: true -OpenIDE-Module-Localizing-Bundle: org/gephi/ui/processor/plugin/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file diff --git a/modules/ProcessorPluginUI/src/main/nbm/module.xml b/modules/ProcessorPluginUI/src/main/nbm/module.xml deleted file mode 100644 index 11408e7037..0000000000 --- a/modules/ProcessorPluginUI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/Bundle.properties b/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/Bundle.properties deleted file mode 100644 index 1416ddb647..0000000000 --- a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/Bundle.properties +++ /dev/null @@ -1,13 +0,0 @@ -OpenIDE-Module-Display-Category=Plugin -OpenIDE-Module-Long-Description=\ - Provide settings panels for processors -OpenIDE-Module-Name=ProcessorPluginUI -OpenIDE-Module-Short-Description=Provide settings panels for processors -DynamicProcessorPanel.header.title=Time Frame -DynamicProcessorPanel.header.description=Append data as a new time frame. Use dynamic analysis features by importing the same network at different time. Time could be dates or timestamps. Be careful to use same node identifiers to be able to recognize nodes between files. -DynamicProcessorPanel.dateRadio.text=Date -DynamicProcessorPanel.labelDate.text=Select date -DynamicProcessorPanel.timeStampRadio.text=Timestamp -DynamicProcessorPanel.labelTime.text=Select natural or real number -DynamicProcessorPanel.labelLastFrame.text=Last frame found: -DynamicProcessorPanel.labelMatchingCheckbox.text=Use labels for identifiers instead of ids diff --git a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/Bundle_cs.properties b/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/Bundle_cs.properties deleted file mode 100644 index fc53761291..0000000000 --- a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/Bundle_cs.properties +++ /dev/null @@ -1,27 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-16 21\:53+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=Poskytnout panely nastaven\u00ed pro procesory - -OpenIDE-Module-Short-Description=Poskytnout panely nastaven\u00ed pro procesory - -DynamicProcessorPanel.header.title=\u010casov\u00fd r\u00e1mec - -DynamicProcessorPanel.header.description=P\u0159ipojit data jako nov\u00fd \u010dasov\u00fd r\u00e1mec. Pou\u017eijte funkce dynamick\u00e9ho zpracov\u00e1n\u00ed importov\u00e1n\u00edm stejn\u00e9 s\u00edt\u011b v jin\u00fd \u010das. \u010cas m\u016f\u017eou b\u00fdt data nebo \u010dasov\u00e1 raz\u00edtka. Ujist\u011bte se, \u017ee pou\u017eijete stejn\u00e9 identifik\u00e1tory uzl\u016f, aby bylo mo\u017eno rozeznat uzle mezi soubory. - -DynamicProcessorPanel.dateRadio.text=Datum - -DynamicProcessorPanel.labelDate.text=Vyberte datum - -DynamicProcessorPanel.timeStampRadio.text=\u010casov\u00e9 raz\u00edtko - -DynamicProcessorPanel.labelTime.text=Vyberte p\u0159irozen\u00e9 nebo re\u00e1ln\u00e9 \u010d\u00edslo - -DynamicProcessorPanel.labelLastFrame.text=Posledn\u00ed nalezen\u00fd r\u00e1mec\: - -DynamicProcessorPanel.labelMatchingCheckbox.text=Pou\u017e\u00edt \u0161t\u00edtky nebo identifik\u00e1tory m\u00edsto id diff --git a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/Bundle_es.properties b/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/Bundle_es.properties deleted file mode 100644 index 0a3be1df6d..0000000000 --- a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/Bundle_es.properties +++ /dev/null @@ -1,27 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:59+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Proporciona paneles de preferencias para procesadores - -OpenIDE-Module-Short-Description=Proporciona paneles de preferencias para procesadores - -DynamicProcessorPanel.header.title=Periodo de tiempo - -DynamicProcessorPanel.header.description=A\u00f1adir datos como un nuevo periodo de tiempo. Utiliza las caracter\u00edsticas de an\u00e1lisis din\u00e1mico importando la misma red en diferentes tiempos. El tiempo pueden ser fechas o timestamps. Ten cuidado de utilizar los mismos identificadores para los nodos para poder reconocer nodos de diferentes archivos. - -DynamicProcessorPanel.dateRadio.text=Fecha - -DynamicProcessorPanel.labelDate.text=Seleccionar fecha - -DynamicProcessorPanel.timeStampRadio.text=Timestamp - -DynamicProcessorPanel.labelTime.text=Seleccionar n\u00famero natural o real - -DynamicProcessorPanel.labelLastFrame.text=\u00daltimo instante encontrado\: - -DynamicProcessorPanel.labelMatchingCheckbox.text=Utilizar etiquetas como identificadores en lugar de ids diff --git a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/Bundle_fr.properties b/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/Bundle_fr.properties deleted file mode 100644 index 9677196def..0000000000 --- a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/Bundle_fr.properties +++ /dev/null @@ -1,27 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:59+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Fournit les panneaux de param\u00e8tres pour les processeurs - -OpenIDE-Module-Short-Description=Fournit les panneaux de param\u00e8tres pour les processeurs - -DynamicProcessorPanel.header.title=Tranche temporelle - -DynamicProcessorPanel.header.description=Ajouter les donn\u00e9es en tant que nouvelle tranche temporelle. Utilise l'analyse dynamique pour importer le m\u00eame r\u00e9seau \u00e0 des moments diff\u00e9rentes, exprim\u00e9s par des dates ou des timestamps. Attention d'utiliser les m\u00eames identifiants de noeuds pour les reconna\u00eetre \u00e0 travers diff\u00e9rents fichiers. - -DynamicProcessorPanel.dateRadio.text=Date - -DynamicProcessorPanel.labelDate.text=S\u00e9lectionnez une date - -DynamicProcessorPanel.timeStampRadio.text=Timestamp - -DynamicProcessorPanel.labelTime.text=S\u00e9lectionnez un nombre naturel ou r\u00e9el - -DynamicProcessorPanel.labelLastFrame.text=Derni\u00e8re tranche temporelle trouv\u00e9e \: - -DynamicProcessorPanel.labelMatchingCheckbox.text=Utiliser les labels en tant qu'identifiant \u00e0 la place des ids diff --git a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/Bundle_ja.properties b/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/Bundle_ja.properties deleted file mode 100644 index b15b42e8f9..0000000000 --- a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/Bundle_ja.properties +++ /dev/null @@ -1,27 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-03 10\:57+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u30d7\u30ed\u30bb\u30c3\u30b5\u7528\u306e\u8a2d\u5b9a\u30d1\u30cd\u30eb\u3092\u63d0\u4f9b\u3059\u308b - -OpenIDE-Module-Short-Description=\u30d7\u30ed\u30bb\u30c3\u30b5\u7528\u306e\u8a2d\u5b9a\u30d1\u30cd\u30eb\u3092\u63d0\u4f9b\u3059\u308b - -DynamicProcessorPanel.header.title=\u30bf\u30a4\u30e0\u30d5\u30ec\u30fc\u30e0 - -DynamicProcessorPanel.header.description=\u65b0\u3057\u3044\u30bf\u30a4\u30e0\u30d5\u30ec\u30fc\u30e0\u3068\u3057\u3066\u30c7\u30fc\u30bf\u3092\u8ffd\u52a0\u3002\u7570\u306a\u308b\u6642\u9593\u306b\u540c\u3058\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3092\u30a4\u30f3\u30dd\u30fc\u30c8\u3059\u308b\u3053\u3068\u306b\u3088\u3063\u3066\u3001\u52d5\u7684\u89e3\u6790\u306e\u6a5f\u80fd\u3092\u4f7f\u7528\u3002\u6642\u9593\u306f\u3001\u65e5\u4ed8\u307e\u305f\u306f\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7\u3067\u3042\u308a\u3048\u308b\u3002\u30d5\u30a1\u30a4\u30eb\u9593\u306e\u30ce\u30fc\u30c9\u3092\u8a8d\u8b58\u3067\u304d\u308b\u3088\u3046\u306b\u3059\u308b\u306b\u306f\u3001\u540c\u3058\u30ce\u30fc\u30c9\u306e\u8b58\u5225\u5b50\u3092\u4f7f\u7528\u3059\u308b\u3088\u3046\u306b\u6ce8\u610f\u3057\u3066\u304f\u3060\u3055\u3044\u3002 - -DynamicProcessorPanel.dateRadio.text=\u65e5\u4ed8 - -DynamicProcessorPanel.labelDate.text=\u65e5\u4ed8\u306e\u9078\u629e - -DynamicProcessorPanel.timeStampRadio.text=\u30bf\u30a4\u30e0\u30b9\u30bf\u30f3\u30d7 - -DynamicProcessorPanel.labelTime.text=\u81ea\u7136\u6570\u304b\u5b9f\u6570\u3092\u9078\u629e - -DynamicProcessorPanel.labelLastFrame.text=\u6700\u5f8c\u306e\u30d5\u30ec\u30fc\u30e0\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f\: - -DynamicProcessorPanel.labelMatchingCheckbox.text=id\u306e\u4ee3\u308f\u308a\u306b\u8b58\u5225\u5b50\u306e\u30e9\u30d9\u30eb\u3092\u4f7f\u7528 diff --git a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/Bundle_pt_BR.properties b/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/Bundle_pt_BR.properties deleted file mode 100644 index 309f9b3245..0000000000 --- a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/Bundle_pt_BR.properties +++ /dev/null @@ -1,27 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 15\:11+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Fornece pain\u00e9is de configura\u00e7\u00e3o para processadores - -OpenIDE-Module-Short-Description=Fornece pain\u00e9is de configura\u00e7\u00e3o para processadores - -DynamicProcessorPanel.header.title=Cronograma - -DynamicProcessorPanel.header.description=Anexar dados como um novo per\u00edodo de tempo. Usar os recursos de an\u00e1lise din\u00e2mica para importar a mesma rede em uma data/hora diferente. A data/hora pode ser representada por datas ou timestamps. Tenha o cuidado de utilizar os mesmos identificadores para os n\u00f3s a fim de poder reconhecer n\u00f3s de diferentes arquivos. - -DynamicProcessorPanel.dateRadio.text=Data - -DynamicProcessorPanel.labelDate.text=Selecionar data - -DynamicProcessorPanel.timeStampRadio.text=Timestamp - -DynamicProcessorPanel.labelTime.text=Selecione n\u00famero natural ou real - -DynamicProcessorPanel.labelLastFrame.text=\u00daltimo instante encontrado\: - -DynamicProcessorPanel.labelMatchingCheckbox.text=Usar r\u00f3tulos como identificadores em vez de ids diff --git a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/Bundle_ru.properties b/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/Bundle_ru.properties deleted file mode 100644 index d4e36302d6..0000000000 --- a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/Bundle_ru.properties +++ /dev/null @@ -1,27 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-05 07\:12+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0430\u043d\u0435\u043b\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 - -OpenIDE-Module-Short-Description=\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043f\u0430\u043d\u0435\u043b\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u043e\u0432 - -DynamicProcessorPanel.header.title=\u0412\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0448\u043a\u0430\u043b\u0430 - -DynamicProcessorPanel.header.description=\u0414\u043e\u0431\u0430\u0432\u044c\u0442\u0435 \u0434\u0430\u043d\u043d\u044b\u0435 \u043a\u0430\u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043f\u0435\u0440\u0438\u043e\u0434. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0440\u0435\u0437\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0434\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0441\u0435\u0442\u0438 \u0432\u043e \u0432\u0440\u0435\u043c\u0435\u043d\u0438. \u0412\u0440\u0435\u043c\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0443\u043a\u0430\u0437\u0430\u043d\u043e \u043a\u0430\u043a \u0434\u0430\u0442\u044b \u0438\u043b\u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 timestamp. \u0411\u0443\u0434\u044c\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c\u043d\u044b, \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u044b \u043e\u0434\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430 \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0440\u0435\u0437\u0430\u0445 \u0434\u043e\u043b\u0436\u043d\u044b \u0441\u043e\u0432\u043f\u0430\u0434\u0430\u0442\u044c. - -DynamicProcessorPanel.dateRadio.text=\u0414\u0430\u0442\u0430 - -DynamicProcessorPanel.labelDate.text=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u0430\u0442\u0443 - -DynamicProcessorPanel.timeStampRadio.text=Timestamp - -DynamicProcessorPanel.labelTime.text=\u0423\u043a\u0430\u0436\u0438\u0442\u0435 \u0446\u0435\u043b\u043e\u0435 \u0438\u043b\u0438 \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0447\u0438\u0441\u043b\u043e - -DynamicProcessorPanel.labelLastFrame.text=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u043d\u0430\u0439\u0434\u0435\u043d\u043d\u044b\u0439 \u0441\u0440\u0435\u0437\: - -DynamicProcessorPanel.labelMatchingCheckbox.text=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u0434\u0435\u043d\u0442\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u043f\u043e\u043b\u0435 Label \u0432\u043c\u0435\u0441\u0442\u043e \u043f\u043e\u043b\u044f id diff --git a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/Bundle_zh_CN.properties b/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/Bundle_zh_CN.properties deleted file mode 100644 index 3bf9ce3483..0000000000 --- a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/Bundle_zh_CN.properties +++ /dev/null @@ -1,26 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:08+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u63d0\u4f9b\u5904\u7406\u5668\u7684\u8bbe\u7f6e\u9762\u677f - -OpenIDE-Module-Short-Description=\u63d0\u4f9b\u5904\u7406\u5668\u7684\u8bbe\u7f6e\u9762\u677f - -DynamicProcessorPanel.header.title=\u65f6\u95f4\u5e27 - -DynamicProcessorPanel.header.description=\u8ffd\u52a0\u4e00\u4e2a\u65b0\u7684\u65f6\u95f4\u5e27\u3002\u901a\u8fc7\u5bfc\u5165\u5728\u4e0d\u540c\u65f6\u95f4\u7684\u540c\u4e00\u7f51\u7edc\u6765\u4f7f\u7528\u52a8\u6001\u5206\u6790\u529f\u80fd\u3002\u65f6\u95f4\u53ef\u4ee5\u662f\u65e5\u671f\u6216\u65f6\u95f4\u6233\u3002\u8981\u6ce8\u610f\u4f7f\u7528\u76f8\u540c\u7684\u8282\u70b9\u6807\u8bc6\u7b26\u4ee5\u80fd\u591f\u8bc6\u522b\u4e0d\u540c\u6587\u4ef6\u4e4b\u95f4\u7684\u8282\u70b9\u3002 - -DynamicProcessorPanel.dateRadio.text=\u65e5\u671f - -DynamicProcessorPanel.labelDate.text=\u9009\u62e9\u65e5\u671f - -DynamicProcessorPanel.timeStampRadio.text=\u65f6\u95f4\u6233 - -DynamicProcessorPanel.labelTime.text=\u9009\u62e9\u81ea\u7136\u6216\u5b9e\u6570 - -DynamicProcessorPanel.labelLastFrame.text=\u53d1\u73b0\u6700\u540e\u4e00\u5e27\u7684\: - -DynamicProcessorPanel.labelMatchingCheckbox.text=\u4f7f\u7528\u6807\u7b7e\u800c\u975eIDS\u6807\u8bc6\u7b26 diff --git a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/cs.po b/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/cs.po deleted file mode 100644 index 5d6c29f94a..0000000000 --- a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/cs.po +++ /dev/null @@ -1,49 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-16 21:53+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Poskytnout panely nastavenΓ­ pro procesory" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Poskytnout panely nastavenΓ­ pro procesory" - -msgid "DynamicProcessorPanel.header.title" -msgstr "ČasovΓ½ rΓ‘mec" - -msgid "DynamicProcessorPanel.header.description" -msgstr "PΕ™ipojit data jako novΓ½ časovΓ½ rΓ‘mec. PouΕΎijte funkce dynamickΓ©ho zpracovΓ‘nΓ­ importovΓ‘nΓ­m stejnΓ© sΓ­tΔ› v jinΓ½ čas. Čas mΕ―ΕΎou bΓ½t data nebo časovΓ‘ razΓ­tka. UjistΔ›te se, ΕΎe pouΕΎijete stejnΓ© identifikΓ‘tory uzlΕ―, aby bylo moΕΎno rozeznat uzle mezi soubory." - -msgid "DynamicProcessorPanel.dateRadio.text" -msgstr "Datum" - -msgid "DynamicProcessorPanel.labelDate.text" -msgstr "Vyberte datum" - -msgid "DynamicProcessorPanel.timeStampRadio.text" -msgstr "ČasovΓ© razΓ­tko" - -msgid "DynamicProcessorPanel.labelTime.text" -msgstr "Vyberte pΕ™irozenΓ© nebo reΓ‘lnΓ© číslo" - -msgid "DynamicProcessorPanel.labelLastFrame.text" -msgstr "PoslednΓ­ nalezenΓ½ rΓ‘mec:" - -msgid "DynamicProcessorPanel.labelMatchingCheckbox.text" -msgstr "PouΕΎΓ­t Ε‘tΓ­tky nebo identifikΓ‘tory mΓ­sto id" diff --git a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/es.po b/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/es.po deleted file mode 100644 index f3c4595487..0000000000 --- a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/es.po +++ /dev/null @@ -1,49 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:59+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Proporciona paneles de preferencias para procesadores" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Proporciona paneles de preferencias para procesadores" - -msgid "DynamicProcessorPanel.header.title" -msgstr "Periodo de tiempo" - -msgid "DynamicProcessorPanel.header.description" -msgstr "AΓ±adir datos como un nuevo periodo de tiempo. Utiliza las caracterΓ­sticas de anΓ‘lisis dinΓ‘mico importando la misma red en diferentes tiempos. El tiempo pueden ser fechas o timestamps. Ten cuidado de utilizar los mismos identificadores para los nodos para poder reconocer nodos de diferentes archivos." - -msgid "DynamicProcessorPanel.dateRadio.text" -msgstr "Fecha" - -msgid "DynamicProcessorPanel.labelDate.text" -msgstr "Seleccionar fecha" - -msgid "DynamicProcessorPanel.timeStampRadio.text" -msgstr "Timestamp" - -msgid "DynamicProcessorPanel.labelTime.text" -msgstr "Seleccionar nΓΊmero natural o real" - -msgid "DynamicProcessorPanel.labelLastFrame.text" -msgstr "Último instante encontrado:" - -msgid "DynamicProcessorPanel.labelMatchingCheckbox.text" -msgstr "Utilizar etiquetas como identificadores en lugar de ids" diff --git a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/fr.po b/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/fr.po deleted file mode 100644 index 1d31b0708b..0000000000 --- a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/fr.po +++ /dev/null @@ -1,49 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:59+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Fournit les panneaux de paramΓ¨tres pour les processeurs" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Fournit les panneaux de paramΓ¨tres pour les processeurs" - -msgid "DynamicProcessorPanel.header.title" -msgstr "Tranche temporelle" - -msgid "DynamicProcessorPanel.header.description" -msgstr "Ajouter les donnΓ©es en tant que nouvelle tranche temporelle. Utilise l'analyse dynamique pour importer le mΓͺme rΓ©seau Γ  des moments diffΓ©rentes, exprimΓ©s par des dates ou des timestamps. Attention d'utiliser les mΓͺmes identifiants de noeuds pour les reconnaΓtre Γ  travers diffΓ©rents fichiers." - -msgid "DynamicProcessorPanel.dateRadio.text" -msgstr "Date" - -msgid "DynamicProcessorPanel.labelDate.text" -msgstr "SΓ©lectionnez une date" - -msgid "DynamicProcessorPanel.timeStampRadio.text" -msgstr "Timestamp" - -msgid "DynamicProcessorPanel.labelTime.text" -msgstr "SΓ©lectionnez un nombre naturel ou rΓ©el" - -msgid "DynamicProcessorPanel.labelLastFrame.text" -msgstr "DerniΓ¨re tranche temporelle trouvΓ©e :" - -msgid "DynamicProcessorPanel.labelMatchingCheckbox.text" -msgstr "Utiliser les labels en tant qu'identifiant Γ  la place des ids" diff --git a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/ja.po b/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/ja.po deleted file mode 100644 index 7bf607f230..0000000000 --- a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/ja.po +++ /dev/null @@ -1,49 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-03 10:57+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "プロセッァ用γθ¨­εšγƒ‘ネルを提供する" - -msgid "OpenIDE-Module-Short-Description" -msgstr "プロセッァ用γθ¨­εšγƒ‘ネルを提供する" - -msgid "DynamicProcessorPanel.header.title" -msgstr "タむムフレーム" - -msgid "DynamicProcessorPanel.header.description" -msgstr "ζ–°γ—γ„γ‚Ώγ‚€γƒ γƒ•γƒ¬γƒΌγƒ γ¨γ—γ¦γƒ‡γƒΌγ‚Ώγ‚’θΏ½εŠ γ€‚η•°γͺγ‚‹ζ™‚ι–“γ«εŒγ˜γƒγƒƒγƒˆγƒ―γƒΌγ‚―γ‚’γ‚€γƒ³γƒγƒΌγƒˆγ™γ‚‹γ“γ¨γ«γ‚ˆγ£γ¦γ€ε‹•ηš„θ§£ζžγζ©Ÿθƒ½γ‚’使用。時間は、ζ—₯δ»˜γΎγŸγ―γ‚Ώγ‚€γƒ γ‚Ήγ‚Ώγƒ³γƒ—γ§γ‚γ‚Šγˆγ‚‹γ€‚γƒ•γ‚‘γ‚€γƒ«ι–“γγƒŽγƒΌγƒ‰γ‚’θͺθ­˜γ§γγ‚‹γ‚ˆγ†γ«γ™γ‚‹γ«γ―γ€εŒγ˜γƒŽγƒΌγƒ‰γθ­˜εˆ₯ε­γ‚’δ½Ώη”¨γ™γ‚‹γ‚ˆγ†γ«ζ³¨ζ„γ—γ¦γγ γ•γ„γ€‚" - -msgid "DynamicProcessorPanel.dateRadio.text" -msgstr "ζ—₯付" - -msgid "DynamicProcessorPanel.labelDate.text" -msgstr "ζ—₯付γιΈζŠž" - -msgid "DynamicProcessorPanel.timeStampRadio.text" -msgstr "タむムスタンプ" - -msgid "DynamicProcessorPanel.labelTime.text" -msgstr "θ‡ͺ焢数かεŸζ•°γ‚’ιΈζŠž" - -msgid "DynamicProcessorPanel.labelLastFrame.text" -msgstr "ζœ€εΎŒγγƒ•γƒ¬γƒΌγƒ γŒθ¦‹γ€γ‹γ‚ŠγΎγ—γŸ:" - -msgid "DynamicProcessorPanel.labelMatchingCheckbox.text" -msgstr "idγδ»£γ‚γ‚Šγ«θ­˜εˆ₯子γγƒ©γƒ™γƒ«γ‚’使用" diff --git a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/org-gephi-ui-processor-plugin.pot b/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/org-gephi-ui-processor-plugin.pot deleted file mode 100644 index 5f53caef01..0000000000 --- a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/org-gephi-ui-processor-plugin.pot +++ /dev/null @@ -1,50 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Provide settings panels for processors" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Provide settings panels for processors" - -msgid "DynamicProcessorPanel.header.title" -msgstr "Time Frame" - -msgid "DynamicProcessorPanel.header.description" -msgstr "" -"Append data as a new time frame. Use dynamic analysis features by importing " -"the same network at different time. Time could be dates or timestamps. Be " -"careful to use same node identifiers to be able to recognize nodes between " -"files." - -msgid "DynamicProcessorPanel.dateRadio.text" -msgstr "Date" - -msgid "DynamicProcessorPanel.labelDate.text" -msgstr "Select date" - -msgid "DynamicProcessorPanel.timeStampRadio.text" -msgstr "Timestamp" - -msgid "DynamicProcessorPanel.labelTime.text" -msgstr "Select natural or real number" - -msgid "DynamicProcessorPanel.labelLastFrame.text" -msgstr "Last frame found:" - -msgid "DynamicProcessorPanel.labelMatchingCheckbox.text" -msgstr "Use labels for identifiers instead of ids" diff --git a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/pt_BR.po b/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/pt_BR.po deleted file mode 100644 index d9e67cdc62..0000000000 --- a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/pt_BR.po +++ /dev/null @@ -1,49 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 15:11+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Fornece painΓ©is de configuraΓ§Γ£o para processadores" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Fornece painΓ©is de configuraΓ§Γ£o para processadores" - -msgid "DynamicProcessorPanel.header.title" -msgstr "Cronograma" - -msgid "DynamicProcessorPanel.header.description" -msgstr "Anexar dados como um novo perΓ­odo de tempo. Usar os recursos de anΓ‘lise dinΓ’mica para importar a mesma rede em uma data/hora diferente. A data/hora pode ser representada por datas ou timestamps. Tenha o cuidado de utilizar os mesmos identificadores para os nΓ³s a fim de poder reconhecer nΓ³s de diferentes arquivos." - -msgid "DynamicProcessorPanel.dateRadio.text" -msgstr "Data" - -msgid "DynamicProcessorPanel.labelDate.text" -msgstr "Selecionar data" - -msgid "DynamicProcessorPanel.timeStampRadio.text" -msgstr "Timestamp" - -msgid "DynamicProcessorPanel.labelTime.text" -msgstr "Selecione nΓΊmero natural ou real" - -msgid "DynamicProcessorPanel.labelLastFrame.text" -msgstr "Último instante encontrado:" - -msgid "DynamicProcessorPanel.labelMatchingCheckbox.text" -msgstr "Usar rΓ³tulos como identificadores em vez de ids" diff --git a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/ru.po b/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/ru.po deleted file mode 100644 index 81ca7bc8b8..0000000000 --- a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/ru.po +++ /dev/null @@ -1,49 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-05 07:12+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ ΠΏΠ°Π½Π΅Π»ΠΈ настроСк для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ ΠΏΠ°Π½Π΅Π»ΠΈ настроСк для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ²" - -msgid "DynamicProcessorPanel.header.title" -msgstr "ВрСмСнная шкала" - -msgid "DynamicProcessorPanel.header.description" -msgstr "Π”ΠΎΠ±Π°Π²ΡŒΡ‚Π΅ Π΄Π°Π½Π½Ρ‹Π΅ ΠΊΠ°ΠΊ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΉ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€ΠΈΠΎΠ΄. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ нСсколько срСзов, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π·Π°Π΄Π°Ρ‚ΡŒ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ сСти Π²ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ. ВрСмя ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½ΠΎ ΠΊΠ°ΠΊ Π΄Π°Ρ‚Ρ‹ ΠΈΠ»ΠΈ Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ timestamp. Π‘ΡƒΠ΄ΡŒΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»ΡŒΠ½Ρ‹, ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Ρ‹ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° Π² Ρ€Π°Π·Π½Ρ‹Ρ… срСзах Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ." - -msgid "DynamicProcessorPanel.dateRadio.text" -msgstr "Π”Π°Ρ‚Π°" - -msgid "DynamicProcessorPanel.labelDate.text" -msgstr "Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π΄Π°Ρ‚Ρƒ" - -msgid "DynamicProcessorPanel.timeStampRadio.text" -msgstr "Timestamp" - -msgid "DynamicProcessorPanel.labelTime.text" -msgstr "Π£ΠΊΠ°ΠΆΠΈΡ‚Π΅ Ρ†Π΅Π»ΠΎΠ΅ ΠΈΠ»ΠΈ вСщСствСнноС число" - -msgid "DynamicProcessorPanel.labelLastFrame.text" -msgstr "ПослСдний Π½Π°ΠΉΠ΄Π΅Π½Π½Ρ‹ΠΉ срСз:" - -msgid "DynamicProcessorPanel.labelMatchingCheckbox.text" -msgstr "Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π² качСствС ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€Π° ΠΏΠΎΠ»Π΅ Label вмСсто поля id" diff --git a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/zh_CN.po b/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/zh_CN.po deleted file mode 100644 index dcae94c8d3..0000000000 --- a/modules/ProcessorPluginUI/src/main/resources/org/gephi/ui/processor/plugin/zh_CN.po +++ /dev/null @@ -1,48 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:08+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ζδΎ›ε€„η†ε™¨ηš„θΎη½ι’板" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζδΎ›ε€„η†ε™¨ηš„θΎη½ι’板" - -msgid "DynamicProcessorPanel.header.title" -msgstr "ζ—Άι—΄εΈ§" - -msgid "DynamicProcessorPanel.header.description" -msgstr "θΏ½εŠ δΈ€δΈͺζ–°ηš„ζ—Άι—΄εΈ§γ€‚ι€šθΏ‡ε―Όε…₯εœ¨δΈεŒζ—Άι—΄ηš„εŒδΈ€η½‘η»œζ₯δ½Ώη”¨εŠ¨ζ€εˆ†ζžεŠŸθƒ½γ€‚ζ—Άι—΄ε―δ»₯是ζ—₯ζœŸζˆ–ζ—Άι—΄ζˆ³γ€‚θ¦ζ³¨ζ„δ½Ώη”¨η›ΈεŒηš„θŠ‚η‚Ήζ ‡θ―†η¬¦δ»₯θƒ½ε€Ÿθ―†εˆ«δΈεŒζ–‡δ»ΆδΉ‹ι—΄ηš„θŠ‚η‚Ήγ€‚" - -msgid "DynamicProcessorPanel.dateRadio.text" -msgstr "ζ—₯期" - -msgid "DynamicProcessorPanel.labelDate.text" -msgstr "选择ζ—₯期" - -msgid "DynamicProcessorPanel.timeStampRadio.text" -msgstr "ζ—Άι—΄ζˆ³" - -msgid "DynamicProcessorPanel.labelTime.text" -msgstr "选择θ‡ͺη„Άζˆ–εžζ•°" - -msgid "DynamicProcessorPanel.labelLastFrame.text" -msgstr "ε‘ηŽ°ζœ€εŽδΈ€εΈ§ηš„:" - -msgid "DynamicProcessorPanel.labelMatchingCheckbox.text" -msgstr "δ½Ώη”¨ζ ‡η­Ύθ€ŒιžIDS标识符" diff --git a/modules/ProjectAPI/pom.xml b/modules/ProjectAPI/pom.xml index 41ff6f18a4..64a739e105 100644 --- a/modules/ProjectAPI/pom.xml +++ b/modules/ProjectAPI/pom.xml @@ -4,13 +4,13 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi project-api - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm ProjectAPI @@ -32,12 +32,25 @@ ${project.groupId} utils-longtask + + + + org.netbeans.modules + org-netbeans-modules-masterfs + test + + + org.mockito + mockito-core + test + + - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin @@ -48,6 +61,19 @@ + + + + org.apache.maven.plugins + maven-jar-plugin + + + + test-jar + + + + diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/io/GephiFormatException.java b/modules/ProjectAPI/src/main/java/org/gephi/project/api/GephiFormatException.java similarity index 77% rename from modules/ProjectAPI/src/main/java/org/gephi/project/io/GephiFormatException.java rename to modules/ProjectAPI/src/main/java/org/gephi/project/api/GephiFormatException.java index 888bfdfbb6..f98d68807e 100644 --- a/modules/ProjectAPI/src/main/java/org/gephi/project/io/GephiFormatException.java +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/api/GephiFormatException.java @@ -38,13 +38,15 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.project.io; + */ + +package org.gephi.project.api; +import org.gephi.project.io.GephiReader; +import org.gephi.project.io.LoadTask; import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class GephiFormatException extends RuntimeException { @@ -56,7 +58,7 @@ public class GephiFormatException extends RuntimeException { public GephiFormatException(Class source, Throwable cause) { super(cause); this.cause = cause; - if (source.equals(GephiReader.class)) { + if (source.equals(GephiReader.class) || source.equals(LoadTask.class)) { isImport = true; } } @@ -83,14 +85,23 @@ public String getLocalizedMessage() { Object[] params = new Object[4]; params[0] = cause.getClass().getSimpleName(); params[1] = cause.getLocalizedMessage(); - params[2] = cause.getStackTrace()[0].getClassName(); - params[3] = cause.getStackTrace()[0].getLineNumber(); + + StackTraceElement[] stackTrace = cause.getStackTrace(); + if (stackTrace != null && stackTrace.length > 0) { + params[2] = stackTrace[0].getClassName(); + params[3] = stackTrace[0].getLineNumber(); + } else { + params[2] = "Unknown"; + params[3] = "Unknown"; + } if (isImport) { - return String.format(NbBundle.getMessage(GephiFormatException.class, "gephiFormatException_import"), params); + return String + .format(NbBundle.getMessage(GephiFormatException.class, "gephiFormatException_import"), params); } else //Export { - return String.format(NbBundle.getMessage(GephiFormatException.class, "gephiFormatException_export"), params); + return String + .format(NbBundle.getMessage(GephiFormatException.class, "gephiFormatException_export"), params); } } diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/api/LegacyGephiFormatException.java b/modules/ProjectAPI/src/main/java/org/gephi/project/api/LegacyGephiFormatException.java new file mode 100644 index 0000000000..dc4b6d22ea --- /dev/null +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/api/LegacyGephiFormatException.java @@ -0,0 +1,62 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.project.api; + +import org.openide.util.NbBundle; + +/** + * @author Mathieu Bastian + */ +public class LegacyGephiFormatException extends RuntimeException { + + @Override + public String getMessage() { + return getLocalizedMessage(); + } + + @Override + public String getLocalizedMessage() { + return String + .format(NbBundle.getMessage(LegacyGephiFormatException.class, "gephiLegacyFormatException")); + } +} diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/api/Project.java b/modules/ProjectAPI/src/main/java/org/gephi/project/api/Project.java index ed78dc5043..232cf3e921 100644 --- a/modules/ProjectAPI/src/main/java/org/gephi/project/api/Project.java +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/api/Project.java @@ -39,8 +39,11 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.project.api; +import java.io.File; +import java.util.Collection; import org.openide.util.Lookup; /** @@ -55,29 +58,134 @@ Development and Distribution License("CDDL") (collectively, the public interface Project extends Lookup.Provider { /** - * Adds an abilities to this project. + * Adds an object to this project. * * @param instance the instance that is to be added to the lookup */ - public void add(Object instance); + void add(Object instance); /** - * Removes an abilities to this project. + * Removes an object to this project. * * @param instance the instance that is to be removed from the lookup */ - public void remove(Object instance); + void remove(Object instance); /** - * Gets any optional abilities of this project. + * Gets any optional object from this project. *

            * May contains: - *

            1. {@link ProjectInformation}
            2. *
            3. {@link ProjectMetaData}
            4. - *
            5. {@link WorkspaceProvider}
            * * @return the project's lookup */ @Override - public Lookup getLookup(); + Lookup getLookup(); + + /** + * Returns the current workspace. + * + * @return current workspace or null if no workspace is set. + */ + Workspace getCurrentWorkspace(); + + /** + * Returns true if the project has a current workspace. + * + * @return true if it has a current workspace, false otherwise + */ + boolean hasCurrentWorkspace(); + + /** + * Returns all the workspaces. + *

            + * Returns an empty collection if no workspaces. + * + * @return a list of all workspaces, unmodifiable + */ + Collection getWorkspaces(); + + /** + * Retrieve a workspace based on its unique identifier. + * + * @param id workspace's unique identifier + * @return found workspace or null if not found + */ + Workspace getWorkspace(int id); + + /** + * Returns true if the project is open. + * + * @return true if open, false otherwise + */ + boolean isOpen(); + + /** + * Returns true if the project is closed. + * + * @return true if closed, false otherwise + */ + boolean isClosed(); + + /** + * Returns true if the project is invalid. + * + * @return true if invalid, false otherwise + */ + boolean isInvalid(); + + /** + * Returns the name of the project. + *

            + * The name can't be null and has a default value (e.g. Project 1). + * + * @return the project's name + */ + String getName(); + + /** + * Returns the project's unique identifier. + *

            + * This identifier is assigned at the project creation and is unique. + * + * @return the project's unique identifier + */ + String getUniqueIdentifier(); + + /** + * Returns true if the project is associated with a file. + *

            + * A project is associated with a file if it has been saved/loaded to/from a + * file. + * + * @return true if associated with a file, false otherwise + */ + boolean hasFile(); + + /** + * Returns the filename associated with this project. + *

            + * Returns an empty string if the project isn't associated with a file. + * + * @return file name + * @see #hasFile() + */ + String getFileName(); + + /** + * Returns the file associated with this project. + *

            + * Returns null if the project isn't associated with a file. + * + * @return file or null if none + * @see #hasFile() + */ + File getFile(); + + /** + * Returns the project's metadata. + * + * @return project metadata + */ + ProjectMetaData getProjectMetadata(); } diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/api/ProjectController.java b/modules/ProjectAPI/src/main/java/org/gephi/project/api/ProjectController.java index 8dd4b263dd..d26202bac6 100644 --- a/modules/ProjectAPI/src/main/java/org/gephi/project/api/ProjectController.java +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/api/ProjectController.java @@ -39,15 +39,23 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.project.api; import java.io.File; +import java.util.Collection; /** * Project controller, manage projects and workspaces states. *

            * This controller is a service and can therefore be found in Lookup: *

            ProjectController pc = Lookup.getDefault().lookup(ProjectController.class);
            + *

            + * Only a single project can be opened at a time. It can be retrieved from {@link #getCurrentProject()}.} + *

            + * At startup, no project is opened. To open a project, use {@link #openProject(java.io.File)} or create a new one with {@link #newProject()}. + *

            + * A project contains one or more workspaces. A project can have only one workspace selected at a time. By default, a project starts with one workspace. * * @author Mathieu Bastian * @see Project @@ -55,45 +63,193 @@ Development and Distribution License("CDDL") (collectively, the */ public interface ProjectController { - public void startup(); - - public void newProject(); - - public Runnable openProject(File file); - - public Runnable saveProject(Project project); - - public Runnable saveProject(Project project, File file); - - public void closeCurrentProject(); - - public void removeProject(Project project); - - public Projects getProjects(); - - public Workspace newWorkspace(Project project); - - public void deleteWorkspace(Workspace workspace); - - public void renameWorkspace(Workspace workspace, String name); - - public Project getCurrentProject(); - - public void renameProject(Project project, String name); - - public Workspace getCurrentWorkspace(); - - public void openWorkspace(Workspace workspace); - - public void closeCurrentWorkspace(); - - public void cleanWorkspace(Workspace workspace); - - public Workspace duplicateWorkspace(Workspace workspace); - - public void setSource(Workspace workspace, String source); - - public void addWorkspaceListener(WorkspaceListener workspaceListener); - - public void removeWorkspaceListener(WorkspaceListener workspaceListener); + /** + * Creates and open a new project. + *

            + * If a project is currently opened, it will be closed first. + * + * @return newly created project + */ + Project newProject(); + + /** + * Opens a project from a .gephi file. + *

            + * If a project is currently opened, it will be closed first. + * + * @param file project file + * @return opened project + */ + Project openProject(File file); + + /** + * Opens a project from the list of active projects. + *

            + * If a project is currently opened, it will be closed first. + * + * @param project project to open + * @throws IllegalArgumentException if the project doesn't belong to the list of active projects + */ + void openProject(Project project); + + /** + * Saves the current project to its .gephi file. + * + * @param project project to save + * @throws IllegalStateException is the project hasn't a file configured + */ + void saveProject(Project project); + + /** + * Saves the current project to a new .gephi file. + *

            + * The project file is updated with the new file. + * + * @param project project to save + * @param file file to be written + */ + void saveProject(Project project, File file); + + /** + * Closes the current project. + */ + void closeCurrentProject(); + + /** + * Removes the project from the active project list. + *

            + * It won't delete any .gephi files. + * + * @param project project to remove + */ + void removeProject(Project project); + + /** + * Gets the set of active projects. + * + * @return projects + * @deprecated Directly use this class instead as all the methods have been ported. + */ + Projects getProjects(); + + /** + * Returns true if a project is selected. + * + * @return true if current project, false otherwise + */ + boolean hasCurrentProject(); + + /** + * Returns the current opened project. + * + * @return current open project or null if missing + */ + Project getCurrentProject(); + + /** + * Gets all active projects + * + * @return project array + */ + Collection getAllProjects(); + + /** + * Creates and adds a new workspace to the given project. + *

            + * The new workspace is not selected. Call {@link #openWorkspace(Workspace)} (org.gephi.project.api.Workspace)} to select it. + * + * @param project project to add the workspace to + * @return workspace + */ + Workspace newWorkspace(Project project); + + /** + * Creates and adds a new workspace to the given project and adds objects to the workspace lookup. + *

            + * The new workspace is not selected. Call {@link #openWorkspace(Workspace)} (org.gephi.project.api.Workspace)} to select it. + * + * @param project project to add the workspace to + * @param objectsForLookup objects to add to the workspace lookup + * @return workspace + */ + Workspace newWorkspace(Project project, Object... objectsForLookup); + + /** + * Deletes the given workspace from its project. + *

            + * If the workspace is currently selected, it's preceding workspace will be selected. + *

            + * If this workspace is the unique workspace in the project, the project will be closed. + * + * @param workspace workspace to delete + */ + void deleteWorkspace(Workspace workspace); + + /** + * Renames the given workspace with the provided string. + * + * @param workspace workspace to rename + * @param name new name + */ + void renameWorkspace(Workspace workspace, String name); + + /** + * Renames the given project with the provided string. + * + * @param project project to rename + * @param name new name + */ + void renameProject(Project project, String name); + + /** + * Returns the selected workspace of the current project. + * + * @return selected workspace or null if no current project + */ + Workspace getCurrentWorkspace(); + + /** + * Selects the given workspace as the current workspace of the project. + *

            + * This method calls {@link #closeCurrentWorkspace()} beforehand. + * + * @param workspace workspace to select + */ + void openWorkspace(Workspace workspace); + + /** + * Creates and open a new workspace in the current project. If not project is opened, a new one is created. + */ + Workspace openNewWorkspace(); + + /** + * Creates and open a new workspace in the current project and adds objects to the workspace lookup. + *

            + * + * If not project is opened, a new one is created. + * + * @param objectsForLookup objects to add to the workspace lookup + */ + Workspace openNewWorkspace(Object... objectsForLookup); + + /** + * Unselects the current workspace. + */ + void closeCurrentWorkspace(); + + /** + * Duplicates the given workspace and adds it to the project. + *

            + * The new workspace is automatically selected. + * + * @param workspace workspace to duplicate + * @return duplicated workspace + */ + Workspace duplicateWorkspace(Workspace workspace); + + void setSource(Workspace workspace, String source); + + void addWorkspaceListener(WorkspaceListener workspaceListener); + + void removeWorkspaceListener(WorkspaceListener workspaceListener); } diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/api/ProjectInformation.java b/modules/ProjectAPI/src/main/java/org/gephi/project/api/ProjectInformation.java index 5567ef6896..b60c46db0a 100644 --- a/modules/ProjectAPI/src/main/java/org/gephi/project/api/ProjectInformation.java +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/api/ProjectInformation.java @@ -38,37 +38,116 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.project.api; +import java.beans.PropertyChangeListener; import java.io.File; -import javax.swing.event.ChangeListener; /** - * Hosts various information about a project the module is maintaining. + * Hosts various information about a project. * * @author Mathieu Bastian * @see Project + * @deprecated Relevant methods have been ported to {@link Project} directly. + * + *

            + * Clients can subscribe to changes by using the + * {@link #addChangeListener(java.beans.PropertyChangeListener) } method. It + * triggers the following events: + *

              + *
            • EVENT_OPEN: Project opened + *
            • EVENT_CLOSE: Project closed + *
            • EVENT_RENAME: Project renamed + *
            • EVENT_SET_FILE: Project file set + *
            */ public interface ProjectInformation { - public boolean isOpen(); - - public boolean isClosed(); - - public boolean isInvalid(); - - public String getName(); - - public boolean hasFile(); - - public String getFileName(); - - public File getFile(); - - public Project getProject(); - - public void addChangeListener(ChangeListener listener); - - public void removeChangeListener(ChangeListener listener); + String EVENT_OPEN = "open"; + String EVENT_CLOSE = "close"; + String EVENT_RENAME = "rename"; + String EVENT_SET_FILE = "setFile"; + + /** + * Returns true if the project is open. + * + * @return true if open, false otherwise + */ + boolean isOpen(); + + /** + * Returns true if the project is closed. + * + * @return true if closed, false otherwise + */ + boolean isClosed(); + + /** + * Returns true if the project is invalid. + * + * @return true if invalid, false otherwise + */ + boolean isInvalid(); + + /** + * Returns the name of the project. + *

            + * The name can't be null and has a default value (e.g. Project 1). + * + * @return the project's name + */ + String getName(); + + /** + * Returns true if the project is associated with a file. + *

            + * A project is associated with a file if it has been saved/loaded to/from a + * file. + * + * @return true if associated with a file, false otherwise + */ + boolean hasFile(); + + /** + * Returns the filename associated with this project. + *

            + * Returns an empty string if the project isn't associated with a file. + * + * @return file name + * @see #hasFile() + */ + String getFileName(); + + /** + * Returns the file associated with this project. + *

            + * Returns null if the project isn't associated with a file. + * + * @return file or null if none + * @see #hasFile() + */ + File getFile(); + + /** + * Returns the project this information class belongs to. + * + * @return project reference + */ + Project getProject(); + + /** + * Add change listener. + * + * @param listener change listener + */ + void addChangeListener(PropertyChangeListener listener); + + /** + * Remove change listener. + * + * @param listener change listener + */ + void removeChangeListener(PropertyChangeListener listener); } diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/api/ProjectListener.java b/modules/ProjectAPI/src/main/java/org/gephi/project/api/ProjectListener.java new file mode 100644 index 0000000000..70d091241d --- /dev/null +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/api/ProjectListener.java @@ -0,0 +1,49 @@ +package org.gephi.project.api; + +import java.util.EventListener; + +/** + * Project listener. + */ +public interface ProjectListener extends EventListener { + + void lock(); + + void unlock(); + + /** + * Called when a project was successfully saved. + * + * @param project project that was saved + */ + void saved(Project project); + + /** + * Called when a project was successfully opened. + * + * @param project project that was opened + */ + void opened(Project project); + + /** + * Called when an error occurred in project manipulation. + * + * @param project project that was manipulated, could be null + * @param throwable error that occurred + */ + void error(Project project, Throwable throwable); + + /** + * Called when a project was closed. + * + * @param project project that was closed + */ + void closed(Project project); + + /** + * Called when a project was changer, for instance renamed. + * + * @param project project that was changed + */ + void changed(Project project); +} diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/api/ProjectMetaData.java b/modules/ProjectAPI/src/main/java/org/gephi/project/api/ProjectMetaData.java index 40def20150..41bcb947dc 100644 --- a/modules/ProjectAPI/src/main/java/org/gephi/project/api/ProjectMetaData.java +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/api/ProjectMetaData.java @@ -38,30 +38,74 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.project.api; /** - * Hosts user data about a project. These information are usually saved to the - * project file. + * Hosts user data about a project. + *

            + * This information is also saved to the project file. * * @author Mathieu Bastian */ public interface ProjectMetaData { - public String getKeywords(); - - public String getAuthor(); - - public String getDescription(); - - public String getTitle(); - - public void setAuthor(String author); - - public void setDescription(String description); - - public void setKeywords(String keywords); - - public void setTitle(String title); + /** + * Returns the keywords of this project. + * + * @return the project's keywords or empty string if missing + */ + String getKeywords(); + + /** + * Sets the project's keywords. + * + * @param keywords keywords + */ + void setKeywords(String keywords); + + /** + * Returns the author of this project. + *

            + * The default value is the computer's user name. + * + * @return project's author + */ + String getAuthor(); + + /** + * Sets the project's author. + * + * @param author author + */ + void setAuthor(String author); + + /** + * Returns the description of this project. + * + * @return the project's description or empty string if missing + */ + String getDescription(); + + /** + * Sets the project's description. + * + * @param description description + */ + void setDescription(String description); + + /** + * Returns the title of this project. + * + * @return the project's title or empty string if missing + */ + String getTitle(); + + /** + * Sets the project's title. + * + * @param title title + */ + void setTitle(String title); } diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/api/Projects.java b/modules/ProjectAPI/src/main/java/org/gephi/project/api/Projects.java index 134eb870f1..03b9d1d22d 100644 --- a/modules/ProjectAPI/src/main/java/org/gephi/project/api/Projects.java +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/api/Projects.java @@ -38,19 +38,42 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.project.api; +import java.io.File; +import java.io.IOException; + /** * Hosts the project lists and the currently selected project. - * + * * @author Mathieu Bastian */ public interface Projects { - public boolean hasCurrentProject(); + /** + * Returns true if a project is selected. + * + * @return true if current project, false otherwise + */ + boolean hasCurrentProject(); + + /** + * Returns the current project.. + * + * @return current project or null if missing + */ + Project getCurrentProject(); + + /** + * Returns an array of all projects. + * + * @return project array + */ + Project[] getProjects(); - public Project getCurrentProject(); + void saveProjects(File file) throws IOException; - public Project[] getProjects(); + void loadProjects(File file) throws IOException; } diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/api/Workspace.java b/modules/ProjectAPI/src/main/java/org/gephi/project/api/Workspace.java index c216c211b7..15c8ede0b3 100644 --- a/modules/ProjectAPI/src/main/java/org/gephi/project/api/Workspace.java +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/api/Workspace.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.project.api; import org.gephi.project.spi.WorkspacePersistenceProvider; @@ -61,11 +62,11 @@ Development and Distribution License("CDDL") (collectively, the * add() method when initialize: *

            public void initialize(Workspace workspace) {
              *      workspace.add(new MyDataModel())
            - *}
            + * }
              * 
            When a workspace is selected, retrieve the workspace's data model: *
            public void select(Workspace workspace) {
              *      MyDataModel model = workspace.getLookup().lookup(MyDataModel.class);
            - *}
            + * }
              * 
            * * @author Mathieu Bastian @@ -77,46 +78,95 @@ public interface Workspace extends Lookup.Provider { * * @param instance the instance that is to be pushed to the lookup */ - public void add(Object instance); + void add(Object instance); /** * Removes an instance from this workspaces lookup. * * @param instance the instance that is to be removed from the lookup */ - public void remove(Object instance); + void remove(Object instance); /** * Get any instance in the current lookup. All important API in Gephi are * storing models in this lookup. *

            * May contains: - *

            1. GraphModel
            2. - *
            3. AttributeModel
            4. + *
              • GraphModel
              • *
              • LayoutModel
              • *
              • StatisticsModel
              • *
              • FiltersModel
              • *
              • PreviewModel
              • - *
              • VizModel
              • *
              • ...
              • - *
            + * * * @return the workspace's lookup */ @Override - public Lookup getLookup(); + Lookup getLookup(); /** * Returns the project this workspace belong to * * @return the workspace's project */ - public Project getProject(); + Project getProject(); /** * Returns the workspace unique identifier * * @return the workspace id */ - public int getId(); + int getId(); + + /** + * Returns true if the workspace is open. + * + * @return true if open, false otherwise + */ + boolean isOpen(); + + /** + * Returns true if the workspace is closed. + * + * @return true if closed, false otherwise + */ + boolean isClosed(); + + /** + * Returns true if the workspace is invalid. + * + * @return true if invalid, false otherwise + */ + boolean isInvalid(); + + /** + * Returns the name of the workspace. + *

            + * The name can't be null and has a default value (e.g. Workspace 1). + * + * @return the workspace's name + */ + String getName(); + + /** + * Returns true if the workspace has a source. + * + * @return true if has a source, false otherwise + */ + boolean hasSource(); + + /** + * Returns the workspace's source or null if missing. + * + * @return workspace's source or null if missing + */ + String getSource(); + + /** + * Returns the workspace's metadata. + * + * @return workspace metadata + */ + WorkspaceMetaData getWorkspaceMetadata(); } diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/api/WorkspaceInformation.java b/modules/ProjectAPI/src/main/java/org/gephi/project/api/WorkspaceInformation.java index 73fc39872c..01bd7f9e87 100644 --- a/modules/ProjectAPI/src/main/java/org/gephi/project/api/WorkspaceInformation.java +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/api/WorkspaceInformation.java @@ -39,31 +39,90 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.project.api; -import javax.swing.event.ChangeListener; +import java.beans.PropertyChangeListener; /** - * Hosts various information about a workspace the module is maintaining. + * Hosts various information about a workspace. * * @author Mathieu Bastian * @see Workspace + * @deprecated Relevant methods have been ported to {@link Workspace} directly. + *

            + * Clients can subscribe to changes by using the + * {@link #addChangeListener(java.beans.PropertyChangeListener) } method. It + * triggers the following events: + *

              + *
            • EVENT_OPEN: Workspace opened + *
            • EVENT_CLOSE: Workspace closed + *
            • EVENT_RENAME: Workspace renamed + *
            • EVENT_SET_SOURCE: Workspace source set + *
            */ public interface WorkspaceInformation { - public boolean isOpen(); - - public boolean isClosed(); - - public boolean isInvalid(); - - public boolean hasSource(); - - public String getSource(); - - public String getName(); - - public void addChangeListener(ChangeListener listener); - - public void removeChangeListener(ChangeListener listener); + String EVENT_OPEN = "open"; + String EVENT_CLOSE = "close"; + String EVENT_RENAME = "rename"; + String EVENT_SET_SOURCE = "setSource"; + + /** + * Returns true if the workspace is open. + * + * @return true if open, false otherwise + */ + boolean isOpen(); + + /** + * Returns true if the workspace is closed. + * + * @return true if closed, false otherwise + */ + boolean isClosed(); + + /** + * Returns true if the workspace is invalid. + * + * @return true if invalid, false otherwise + */ + boolean isInvalid(); + + /** + * Returns the name of the workspace. + *

            + * The name can't be null and has a default value (e.g. Workspace 1). + * + * @return the workspace's name + */ + String getName(); + + /** + * Returns true if the workspace has a source. + * + * @return true if has a source, false otherwise + */ + boolean hasSource(); + + /** + * Returns the workspace's source or null if missing. + * + * @return workspace's source or null if missing + */ + String getSource(); + + /** + * Add change listener. + * + * @param listener change listener + */ + void addChangeListener(PropertyChangeListener listener); + + /** + * Remove change listener. + * + * @param listener change listener + */ + void removeChangeListener(PropertyChangeListener listener); } diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/api/WorkspaceListener.java b/modules/ProjectAPI/src/main/java/org/gephi/project/api/WorkspaceListener.java index 21d0d6a53a..e3c206f49c 100644 --- a/modules/ProjectAPI/src/main/java/org/gephi/project/api/WorkspaceListener.java +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/api/WorkspaceListener.java @@ -38,7 +38,8 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.project.api; /** @@ -50,31 +51,37 @@ public interface WorkspaceListener { /** * Notify a workspace has been created. + * * @param workspace the workspace that was created */ - public void initialize(Workspace workspace); + void initialize(Workspace workspace); /** * Notify a workspace has become the selected workspace. + * * @param workspace the workspace that was made current workspace */ - public void select(Workspace workspace); + void select(Workspace workspace); /** - * Notify another workspace will be selected. The select() always - * follows. + * Notify another workspace will be selected. The select() + * always follows, unless the project is being closed. + * * @param workspace the workspace that is currently the selected workspace */ - public void unselect(Workspace workspace); + void unselect(Workspace workspace); /** * Notify a workspace will be closed, all data must be destroyed. + * * @param workspace the workspace that is to be closed */ - public void close(Workspace workspace); + void close(Workspace workspace); /** * Notify no more workspace is currently selected, the project is empty. + *

            + * close() is called beforehand for each workspace. */ - public void disable(); + void disable(); } diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/api/WorkspaceMetaData.java b/modules/ProjectAPI/src/main/java/org/gephi/project/api/WorkspaceMetaData.java new file mode 100644 index 0000000000..e3038ae469 --- /dev/null +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/api/WorkspaceMetaData.java @@ -0,0 +1,39 @@ +package org.gephi.project.api; + +/** + * Hosts user data about a workspace. + *

            + * This information is also saved to the project file. + * + * @author Mathieu Bastian + */ +public interface WorkspaceMetaData { + + /** + * Returns the description of this workspace. + * + * @return the workspace's description or empty string if missing + */ + String getDescription(); + + /** + * Sets the workspace's description. + * + * @param description description + */ + void setDescription(String description); + + /** + * Returns the title of this workspace. + * + * @return the workspace's title or empty string if missing + */ + String getTitle(); + + /** + * Sets the workspace's title. + * + * @param title title + */ + void setTitle(String title); +} diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/api/WorkspaceProvider.java b/modules/ProjectAPI/src/main/java/org/gephi/project/api/WorkspaceProvider.java index 5c8d5e1708..2cbfecf522 100644 --- a/modules/ProjectAPI/src/main/java/org/gephi/project/api/WorkspaceProvider.java +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/api/WorkspaceProvider.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.project.api; /** @@ -46,14 +47,45 @@ Development and Distribution License("CDDL") (collectively, the * * @author Mathieu Bastian * @see Project + * @deprecated All methods have been ported to {@link Project} directly. */ public interface WorkspaceProvider { - public Workspace getCurrentWorkspace(); + /** + * Returns the current workspace or null if none. + * + * @return current workspace or null if missing + */ + Workspace getCurrentWorkspace(); + + /** + * Returns true if the project has a current workspace. + * + * @return true if has a current workspace, false otherwise + */ + boolean hasCurrentWorkspace(); - public boolean hasCurrentWorkspace(); + /** + * Returns all the workspaces. + *

            + * Returns an empty array if no workspaces. + * + * @return an array of all workspaces + */ + Workspace[] getWorkspaces(); - public Workspace[] getWorkspaces(); + /** + * Retrieve a workspace based on its unique identifier. + * + * @param id workspace's unique identifier + * @return found workspace or null if not found + */ + Workspace getWorkspace(int id); - public Workspace getWorkspace(int id); + /** + * Return the next available workspace identifier. + * + * @return next available workspace identifier + */ + int getNextWorkspaceId(); } diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/impl/ProjectControllerImpl.java b/modules/ProjectAPI/src/main/java/org/gephi/project/impl/ProjectControllerImpl.java index 46d2ff916f..2b31298c19 100644 --- a/modules/ProjectAPI/src/main/java/org/gephi/project/impl/ProjectControllerImpl.java +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/impl/ProjectControllerImpl.java @@ -39,49 +39,50 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.project.impl; import java.beans.PropertyEditorManager; import java.io.File; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import java.util.List; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.Future; +import java.util.function.Consumer; +import org.gephi.project.api.GephiFormatException; +import org.gephi.project.api.LegacyGephiFormatException; import org.gephi.project.api.Project; import org.gephi.project.api.ProjectController; +import org.gephi.project.api.ProjectListener; import org.gephi.project.api.Workspace; import org.gephi.project.api.WorkspaceListener; -import org.gephi.project.api.WorkspaceProvider; +import org.gephi.project.io.DuplicateTask; import org.gephi.project.io.LoadTask; import org.gephi.project.io.SaveTask; -import org.gephi.project.spi.WorkspaceDuplicateProvider; -import org.gephi.workspace.impl.WorkspaceImpl; -import org.gephi.workspace.impl.WorkspaceInformationImpl; +import org.gephi.utils.longtask.api.LongTaskExecutor; +import org.openide.util.Exceptions; import org.openide.util.Lookup; -import org.openide.util.NbPreferences; +import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = ProjectController.class) public class ProjectControllerImpl implements ProjectController { - private enum EventType { - - INITIALIZE, SELECT, UNSELECT, CLOSE, DISABLE - }; //Data private final ProjectsImpl projects = new ProjectsImpl(); - private final List listeners; - private WorkspaceImpl temporaryOpeningWorkspace; + private final List workspaceListeners = new ArrayList<>(); - public ProjectControllerImpl() { + private final List projectListeners = new ArrayList<>(); - //Listeners - listeners = new ArrayList(); - listeners.addAll(Lookup.getDefault().lookupAll(WorkspaceListener.class)); + private final LongTaskExecutor longTaskExecutor = new LongTaskExecutor(false, "ProjectController"); + public ProjectControllerImpl() { registerNetbeansPropertyEditors(); } @@ -91,7 +92,7 @@ public ProjectControllerImpl() { * read project files. */ private void registerNetbeansPropertyEditors() { - List list = new ArrayList(Arrays.asList(PropertyEditorManager.getEditorSearchPath())); + List list = new ArrayList<>(Arrays.asList(PropertyEditorManager.getEditorSearchPath())); if (!list.contains("org.netbeans.beaninfo.editors")) { list.add(0, "org.netbeans.beaninfo.editors");//Add first for more preference PropertyEditorManager.setEditorSearchPath(list.toArray(new String[list.size()])); @@ -99,74 +100,144 @@ private void registerNetbeansPropertyEditors() { } @Override - public void startup() { - final String OPEN_LAST_PROJECT_ON_STARTUP = "Open_Last_Project_On_Startup"; - final String NEW_PROJECT_ON_STARTUP = "New_Project_On_Startup"; - boolean openLastProject = NbPreferences.forModule(ProjectControllerImpl.class).getBoolean(OPEN_LAST_PROJECT_ON_STARTUP, false); - boolean newProjectStartup = NbPreferences.forModule(ProjectControllerImpl.class).getBoolean(NEW_PROJECT_ON_STARTUP, false); - - //Default project - if (!openLastProject && newProjectStartup) { - newProject(); + public ProjectImpl newProject() { + return this.newProjectInternal(); + } + + + private ProjectImpl newProjectInternal(Object... objectsForLookup) { + synchronized (this) { + fireProjectEvent(ProjectListener::lock); + ProjectImpl project = null; + try { + closeCurrentProject(); + project = new ProjectImpl(projects.nextUntitledProjectName()); + projects.addProject(project); + openProjectInternal(project, objectsForLookup); + ProjectImpl finalProject = project; + fireProjectEvent((pl) -> pl.opened(finalProject)); + return project; + } catch (Exception e) { + return handleException(project, e); + } } } + private ProjectImpl handleException(Project project, Throwable t) { + fireProjectEvent((pl) -> pl.error(project, t)); + if (t instanceof GephiFormatException) { + throw (GephiFormatException) t; + } else if (t instanceof LegacyGephiFormatException) { + throw (LegacyGephiFormatException) t; + } else if (t instanceof RuntimeException) { + throw (RuntimeException) t; + } + throw new RuntimeException(t); + } + @Override - public void newProject() { - closeCurrentProject(); - ProjectImpl project = new ProjectImpl(projects.nextProjectId()); - projects.addProject(project); - openProject(project); + public Project openProject(File file) { + synchronized (this) { + fireProjectEvent(ProjectListener::lock); + LoadTask loadTask = new LoadTask(file); + Future res = longTaskExecutor.execute(loadTask, () -> { + ProjectImpl project = loadTask.execute(getProjects()); + // Null if cancelled + if (project != null) { + openProjectInternal(project); + fireProjectEvent((pl) -> pl.opened(project)); + } else { + fireProjectEvent(ProjectListener::unlock); + } + return project; + }, "", t -> handleException(null, t)); + try { + return res.get(); + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); + } + } } @Override - public Runnable openProject(File file) { - return new LoadTask(file); + public void openProject(Project project) { + if (!projects.containsProject(project)) { + throw new IllegalArgumentException( + "Project " + project.getUniqueIdentifier() + " does not belong to the list of active projects"); + } + File file = project.getFile(); + if (file == null) { + throw new IllegalArgumentException("Project " + project.getUniqueIdentifier() + " has no file associated"); + } + openProject(file); } @Override - public Runnable saveProject(Project project) { - if (project.getLookup().lookup(ProjectInformationImpl.class).hasFile()) { - File file = project.getLookup().lookup(ProjectInformationImpl.class).getFile(); - return saveProject(project, file); + public void saveProject(Project project) { + synchronized (this) { + if (project.getLookup().lookup(ProjectInformationImpl.class).hasFile()) { + File file = project.getLookup().lookup(ProjectInformationImpl.class).getFile(); + saveProject(project, file); + } else { + throw new IllegalStateException("Project has no file"); + } } - return null; } @Override - public Runnable saveProject(Project project, File file) { - project.getLookup().lookup(ProjectInformationImpl.class).setFile(file); - SaveTask saveTask = new SaveTask(project, file); - return saveTask; + public void saveProject(Project project, File file) { + synchronized (this) { + fireProjectEvent(ProjectListener::lock); + SaveTask saveTask = new SaveTask(project, file); + longTaskExecutor.execute(saveTask, () -> { + project.getLookup().lookup(ProjectInformationImpl.class).setFile(file); + if (saveTask.run()) { + ((ProjectImpl) project).setLastOpened(); + fireProjectEvent((pl) -> pl.saved(project)); + } else { + fireProjectEvent(ProjectListener::unlock); + } + }, "", t -> handleException(project, t)); + } } @Override public void closeCurrentProject() { - if (projects.hasCurrentProject()) { - ProjectImpl currentProject = projects.getCurrentProject(); - - //Event - if (currentProject.getLookup().lookup(WorkspaceProvider.class).hasCurrentWorkspace()) { - fireWorkspaceEvent(EventType.UNSELECT, currentProject.getLookup().lookup(WorkspaceProvider.class).getCurrentWorkspace()); - } - for (Workspace ws : currentProject.getLookup().lookup(WorkspaceProviderImpl.class).getWorkspaces()) { - fireWorkspaceEvent(EventType.CLOSE, ws); + synchronized (this) { + if (projects.hasCurrentProject()) { + fireProjectEvent(ProjectListener::lock); + Project project = projects.getCurrentProject(); + + try { + //Event + if (project.hasCurrentWorkspace()) { + fireWorkspaceEvent(ProjectControllerImpl.EventType.UNSELECT, + project.getCurrentWorkspace()); + } + for (Workspace ws : project.getWorkspaces()) { + fireWorkspaceEvent(ProjectControllerImpl.EventType.CLOSE, ws); + } + + //Close + projects.closeCurrentProject(); + + fireWorkspaceEvent(ProjectControllerImpl.EventType.DISABLE, null); + fireProjectEvent((pl) -> pl.closed(project)); + } catch (Exception e) { + handleException(project, e); + } } - - //Close - currentProject.getLookup().lookup(ProjectInformationImpl.class).close(); - projects.closeCurrentProject(); - - fireWorkspaceEvent(EventType.DISABLE, null); } } @Override public void removeProject(Project project) { - if (projects.getCurrentProject() == project) { - closeCurrentProject(); + synchronized (this) { + if (projects.getCurrentProject() == project) { + closeCurrentProject(); + } + projects.removeProject((ProjectImpl) project); } - projects.removeProject(project); } @Override @@ -175,62 +246,85 @@ public ProjectsImpl getProjects() { } @Override - public Workspace newWorkspace(Project project) { - Workspace workspace = project.getLookup().lookup(WorkspaceProviderImpl.class).newWorkspace(); + public Collection getAllProjects() { + return Collections.unmodifiableList(Arrays.asList(projects.getProjects())); + } - //Event - fireWorkspaceEvent(EventType.INITIALIZE, workspace); - return workspace; + @Override + public boolean hasCurrentProject() { + return projects.hasCurrentProject(); } @Override - public void deleteWorkspace(Workspace workspace) { - Project project = workspace.getProject(); - WorkspaceProviderImpl workspaceProvider = project.getLookup().lookup(WorkspaceProviderImpl.class); + public Workspace newWorkspace(Project project) { + return newWorkspaceInternal(project); + } + + @Override + public Workspace newWorkspace(Project project, Object... objectsForLookup) { + return newWorkspaceInternal(project, objectsForLookup); + } + + private Workspace newWorkspaceInternal(Project project, Object... objectsForLookup) { + synchronized (this) { + WorkspaceProviderImpl workspaceProvider = project.getLookup().lookup(WorkspaceProviderImpl.class); + Workspace workspace = workspaceProvider.newWorkspace(workspaceProvider.getProject().nextWorkspaceId(), objectsForLookup); - Workspace toSelectWorkspace = null; - if (getCurrentWorkspace() == workspace) { - toSelectWorkspace = workspaceProvider.getPrecedingWorkspace(workspace); + //Event + fireWorkspaceEvent(EventType.INITIALIZE, workspace); + return workspace; } + } - workspaceProvider.removeWorkspace(workspace); + @Override + public void deleteWorkspace(Workspace workspace) { + synchronized (this) { + Project project = workspace.getProject(); + WorkspaceProviderImpl workspaceProvider = project.getLookup().lookup(WorkspaceProviderImpl.class); - //Event - fireWorkspaceEvent(EventType.CLOSE, workspace); + Workspace toSelectWorkspace = null; + if (getCurrentWorkspace() == workspace) { + toSelectWorkspace = workspaceProvider.getPrecedingWorkspace(workspace); + } - if (getCurrentWorkspace() == workspace) { - //Select the one before, or after - if (toSelectWorkspace == null) { - closeCurrentProject(); - } else { - openWorkspace(toSelectWorkspace); + workspaceProvider.removeWorkspace(workspace); + + //Event + fireWorkspaceEvent(EventType.CLOSE, workspace); + + if (getCurrentWorkspace() == workspace) { + //Select the one before, or after + if (toSelectWorkspace == null) { + closeCurrentProject(); + } else { + openWorkspace(toSelectWorkspace); + } } } - } - public void openProject(Project project) { - final ProjectImpl projectImpl = (ProjectImpl) project; - final ProjectInformationImpl projectInformationImpl = projectImpl.getLookup().lookup(ProjectInformationImpl.class); - final WorkspaceProviderImpl workspaceProviderImpl = project.getLookup().lookup(WorkspaceProviderImpl.class); - + private void openProjectInternal(Project project, Object... objectsForLookup) { + ProjectImpl projectImpl = (ProjectImpl) project; if (projects.hasCurrentProject()) { closeCurrentProject(); } - projects.addProject(projectImpl); + projects.addOrReplaceProject(projectImpl); projects.setCurrentProject(projectImpl); - projectInformationImpl.open(); - if (!workspaceProviderImpl.hasCurrentWorkspace()) { - if (workspaceProviderImpl.getWorkspaces().length == 0) { - Workspace workspace = newWorkspace(project); + for (Workspace ws : projectImpl.getWorkspaces()) { + fireWorkspaceEvent(EventType.INITIALIZE, ws); + } + + if (!projectImpl.hasCurrentWorkspace()) { + if (projectImpl.getWorkspaces().isEmpty()) { + Workspace workspace = newWorkspace(project, objectsForLookup); openWorkspace(workspace); } else { - Workspace workspace = workspaceProviderImpl.getWorkspaces()[0]; + Workspace workspace = projectImpl.getWorkspaces().get(0); openWorkspace(workspace); } } else { - fireWorkspaceEvent(EventType.SELECT, workspaceProviderImpl.getCurrentWorkspace()); + fireWorkspaceEvent(EventType.SELECT, projectImpl.getCurrentWorkspace()); } } @@ -241,118 +335,183 @@ public ProjectImpl getCurrentProject() { @Override public WorkspaceImpl getCurrentWorkspace() { - if (projects.hasCurrentProject()) { - temporaryOpeningWorkspace = null; - return getCurrentProject().getLookup().lookup(WorkspaceProviderImpl.class).getCurrentWorkspace(); - } else if (temporaryOpeningWorkspace != null) { - return temporaryOpeningWorkspace; - } - return null; + // Read-only access; do not acquire the controller-wide monitor here, as long-running + // write operations (open/save/load) hold it and the EDT frequently calls this method. + ProjectImpl current = projects.getCurrentProject(); + return current != null ? current.getCurrentWorkspace() : null; } @Override public void closeCurrentWorkspace() { - WorkspaceImpl workspace = getCurrentWorkspace(); - if (workspace != null) { - workspace.getLookup().lookup(WorkspaceInformationImpl.class).close(); + synchronized (this) { + WorkspaceImpl workspace = getCurrentWorkspace(); + if (workspace != null) { + workspace.getLookup().lookup(WorkspaceInformationImpl.class).close(); - //Event - fireWorkspaceEvent(EventType.UNSELECT, workspace); + //Event + fireWorkspaceEvent(EventType.UNSELECT, workspace); + } } } @Override public void openWorkspace(Workspace workspace) { - closeCurrentWorkspace(); - getCurrentProject().getLookup().lookup(WorkspaceProviderImpl.class).setCurrentWorkspace(workspace); - workspace.getLookup().lookup(WorkspaceInformationImpl.class).open(); + synchronized (this) { + closeCurrentWorkspace(); + getCurrentProject().setCurrentWorkspace(workspace); - //Event - fireWorkspaceEvent(EventType.SELECT, workspace); + //Event + fireWorkspaceEvent(EventType.SELECT, workspace); + } + } + + @Override + public Workspace openNewWorkspace() { + return openNewWorkspaceInternal(); } @Override - public void cleanWorkspace(Workspace workspace) { + public Workspace openNewWorkspace(Object... objectsForLookup) { + return openNewWorkspaceInternal(objectsForLookup); + } + + private Workspace openNewWorkspaceInternal(Object... objectsForLookup) { + synchronized (this) { + Project project; + Workspace workspace; + if (hasCurrentProject()) { + project = getCurrentProject(); + workspace = newWorkspace(project, objectsForLookup); + openWorkspace(workspace); + } else { + project = newProjectInternal(objectsForLookup); + workspace = project.getCurrentWorkspace(); + } + return workspace; + } } @Override public Workspace duplicateWorkspace(Workspace workspace) { - if (projects.hasCurrentProject()) { - Workspace duplicate = newWorkspace(projects.getCurrentProject()); - for (WorkspaceDuplicateProvider dp : Lookup.getDefault().lookupAll(WorkspaceDuplicateProvider.class)) { - dp.duplicate(workspace, duplicate); + synchronized (this) { + DuplicateTask duplicateTask = new DuplicateTask(workspace); + Future res = longTaskExecutor.execute(duplicateTask, () -> { + WorkspaceImpl newWorkspace = duplicateTask.run(); + // Null if cancelled + if (newWorkspace != null) { + newWorkspace.getLookup().lookup(WorkspaceInformationImpl.class).setName( + NbBundle.getMessage(ProjectControllerImpl.class, "Workspace.duplicated.name", + workspace.getName())); + fireWorkspaceEvent(EventType.INITIALIZE, newWorkspace); + + openWorkspace(newWorkspace); + } + return newWorkspace; + }, "", t -> handleException(workspace.getProject(), t)); + try { + return res.get(); + } catch (InterruptedException | ExecutionException e) { + throw new RuntimeException(e); } - openWorkspace(duplicate); - return duplicate; } - return null; } @Override public void renameProject(Project project, final String name) { - project.getLookup().lookup(ProjectInformationImpl.class).setName(name); + synchronized (this) { + project.getLookup().lookup(ProjectInformationImpl.class).setName(name); + fireProjectEvent((pl) -> pl.changed(project)); + } } @Override public void renameWorkspace(Workspace workspace, String name) { - workspace.getLookup().lookup(WorkspaceInformationImpl.class).setName(name); + synchronized (this) { + workspace.getLookup().lookup(WorkspaceInformationImpl.class).setName(name); + } } @Override public void setSource(Workspace workspace, String source) { - workspace.getLookup().lookup(WorkspaceInformationImpl.class).setSource(source); - } - - /** - * Hack to have a current workpace when opening workspace - * - * @param temporaryOpeningWorkspace the opening workspace or null - */ - public void setTemporaryOpeningWorkspace(WorkspaceImpl temporaryOpeningWorkspace) { - this.temporaryOpeningWorkspace = temporaryOpeningWorkspace; - if (temporaryOpeningWorkspace != null) { - //Init controllers with empty models - fireWorkspaceEvent(EventType.INITIALIZE, temporaryOpeningWorkspace); + synchronized (this) { + workspace.getLookup().lookup(WorkspaceInformationImpl.class).setSource(source); } } @Override public void addWorkspaceListener(WorkspaceListener workspaceListener) { - synchronized (listeners) { - listeners.add(workspaceListener); + synchronized (workspaceListeners) { + workspaceListeners.add(workspaceListener); } } @Override public void removeWorkspaceListener(WorkspaceListener workspaceListener) { - synchronized (listeners) { - listeners.remove(workspaceListener); + synchronized (workspaceListeners) { + workspaceListeners.remove(workspaceListener); + } + } + + protected void addProjectListener(ProjectListener projectListener) { + synchronized (projectListeners) { + projectListeners.add(projectListener); + } + } + + protected void removeProjectListener(ProjectListener projectListener) { + synchronized (projectListeners) { + projectListeners.remove(projectListener); + } + } + + private void fireProjectEvent(Consumer consumer) { + List listeners; + synchronized (projectListeners) { + listeners = new ArrayList<>(projectListeners); + listeners.addAll(Lookup.getDefault().lookupAll(ProjectListener.class)); + } + for (ProjectListener listener : listeners) { + try { + consumer.accept(listener); + } catch (Exception ex) { + Exceptions.printStackTrace(ex); + } } } private void fireWorkspaceEvent(EventType event, Workspace workspace) { - WorkspaceListener[] listenersArray; - synchronized (listeners) { - listenersArray = listeners.toArray(new WorkspaceListener[0]); + List listeners; + synchronized (workspaceListeners) { + listeners = new ArrayList<>(workspaceListeners); + listeners.addAll(Lookup.getDefault().lookupAll(WorkspaceListener.class)); } - for (WorkspaceListener wl : listenersArray) { - switch (event) { - case INITIALIZE: - wl.initialize(workspace); - break; - case SELECT: - wl.select(workspace); - break; - case UNSELECT: - wl.unselect(workspace); - break; - case CLOSE: - wl.close(workspace); - break; - case DISABLE: - wl.disable(); - break; + for (WorkspaceListener wl : listeners) { + try { + switch (event) { + case INITIALIZE: + wl.initialize(workspace); + break; + case SELECT: + wl.select(workspace); + break; + case UNSELECT: + wl.unselect(workspace); + break; + case CLOSE: + wl.close(workspace); + break; + case DISABLE: + wl.disable(); + break; + } + } catch (Exception e) { + Exceptions.printStackTrace(e); } } } + + public enum EventType { + + INITIALIZE, SELECT, UNSELECT, CLOSE, DISABLE + } } diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/impl/ProjectImpl.java b/modules/ProjectAPI/src/main/java/org/gephi/project/impl/ProjectImpl.java index 358e26cf17..db9fc816cd 100644 --- a/modules/ProjectAPI/src/main/java/org/gephi/project/impl/ProjectImpl.java +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/impl/ProjectImpl.java @@ -39,44 +39,63 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.project.impl; -import java.io.Serializable; +import java.io.File; +import java.time.Instant; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.UUID; import java.util.concurrent.atomic.AtomicInteger; import org.gephi.project.api.Project; +import org.gephi.project.api.ProjectMetaData; +import org.gephi.project.api.Workspace; import org.openide.util.Lookup; -import org.openide.util.NbBundle; import org.openide.util.lookup.AbstractLookup; import org.openide.util.lookup.InstanceContent; /** - * * @author Mathieu Bastian */ -public class ProjectImpl implements Project, Lookup.Provider, Serializable { +public class ProjectImpl implements Project, Comparable, Lookup.Provider { - //Lookup - private transient InstanceContent instanceContent; - private transient AbstractLookup lookup; //Workspace ids private final AtomicInteger workspaceIds; + //Lookup + private final transient InstanceContent instanceContent; + private final transient AbstractLookup lookup; - public ProjectImpl(int id) { - this(NbBundle.getMessage(ProjectImpl.class, "Project.default.prefix") + " " + id); - } + private final WorkspaceProviderImpl workspaceProvider; + private final ProjectInformationImpl projectInformation; + private final ProjectMetaDataImpl projectMetaData; + private final String uniqueIdentifier; + + private Instant lastOpened; public ProjectImpl(String name) { + this(UUID.randomUUID().toString(), name); + } + + public ProjectImpl(String uniqueIdentifier, String name) { + if (name == null || name.isEmpty()) { + throw new IllegalArgumentException("Project name cannot be null or empty"); + } + if (uniqueIdentifier == null || uniqueIdentifier.isEmpty()) { + throw new IllegalArgumentException("Project unique identifier cannot be null or empty"); + } + this.uniqueIdentifier = uniqueIdentifier; instanceContent = new InstanceContent(); lookup = new AbstractLookup(instanceContent); workspaceIds = new AtomicInteger(1); - //Init Default Content - ProjectMetaDataImpl metaDataImpl = new ProjectMetaDataImpl(); - instanceContent.add(metaDataImpl); - ProjectInformationImpl projectInformationImpl = new ProjectInformationImpl(this, name); - instanceContent.add(projectInformationImpl); - WorkspaceProviderImpl workspaceProviderImpl = new WorkspaceProviderImpl(this); - instanceContent.add(workspaceProviderImpl); + workspaceProvider = new WorkspaceProviderImpl(this); + projectInformation = new ProjectInformationImpl(this, name); + projectMetaData = new ProjectMetaDataImpl(); + instanceContent.add(projectMetaData); + instanceContent.add(projectInformation); + instanceContent.add(workspaceProvider); } @Override @@ -94,15 +113,164 @@ public Lookup getLookup() { return lookup; } + @Override + public WorkspaceImpl getCurrentWorkspace() { + return workspaceProvider.getCurrentWorkspace(); + } + + @Override + public boolean hasCurrentWorkspace() { + return workspaceProvider.hasCurrentWorkspace(); + } + + public Instant getLastOpened() { + return lastOpened; + } + + public void setCurrentWorkspace(Workspace workspace) { + workspaceProvider.setCurrentWorkspace(workspace); + } + + public WorkspaceImpl newWorkspace() { + return workspaceProvider.newWorkspace(workspaceProvider.getProject().nextWorkspaceId()); + } + + public WorkspaceImpl newWorkspace(int id) { + return workspaceProvider.newWorkspace(id); + } + + public WorkspaceImpl newWorkspaceWithoutModels(int id) { + return workspaceProvider.newWorkspaceWithoutModels(id); + } + + public WorkspaceImpl newWorkspace(int id, Object... objectsForLookup) { + return workspaceProvider.newWorkspace(id, objectsForLookup); + } + + @Override + public List getWorkspaces() { + return Collections.unmodifiableList(Arrays.asList(workspaceProvider.getWorkspaces())); + } + + @Override + public Workspace getWorkspace(int id) { + return workspaceProvider.getWorkspace(id); + } + + protected void setLastOpened() { + lastOpened = Instant.now(); + } + + protected void setLastOpened(Instant lastOpened) { + this.lastOpened = lastOpened; + } + + protected void open() { + setLastOpened(); + projectInformation.open(); + } + + protected void close() { + projectInformation.close(); + workspaceProvider.purge(); + } + + @Override + public boolean isOpen() { + return projectInformation.isOpen(); + } + + @Override + public boolean isClosed() { + return projectInformation.isClosed(); + } + + @Override + public boolean isInvalid() { + return projectInformation.isInvalid(); + } + + @Override + public String getName() { + return projectInformation.getName(); + } + + @Override + public String getUniqueIdentifier() { + return uniqueIdentifier; + } + + @Override + public boolean hasFile() { + return projectInformation.hasFile(); + } + + @Override + public String getFileName() { + return projectInformation.getFileName(); + } + + @Override + public File getFile() { + return projectInformation.getFile(); + } + + protected void setFile(File file) { + projectInformation.setFile(file); + } + public int nextWorkspaceId() { return workspaceIds.getAndIncrement(); } + public int getWorkspaceIds() { + return workspaceIds.get(); + } + public void setWorkspaceIds(int ids) { workspaceIds.set(ids); } - public int getWorkspaceIds() { - return workspaceIds.get(); + @Override + public ProjectMetaData getProjectMetadata() { + return projectMetaData; + } + + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + ProjectImpl project = (ProjectImpl) o; + + return uniqueIdentifier.equals(project.uniqueIdentifier); + } + + @Override + public int hashCode() { + return uniqueIdentifier.hashCode(); + } + + @Override + public String toString() { + return "ProjectImpl {" + + "uniqueIdentifier='" + uniqueIdentifier + '\'' + + '}'; + } + + @Override + public int compareTo(ProjectImpl o) { + if (o.getLastOpened() == null) { + return -1; + } else if (getLastOpened() == null) { + return 1; + } else { + return o.getLastOpened().compareTo(getLastOpened()); + } } } diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/impl/ProjectInformationImpl.java b/modules/ProjectAPI/src/main/java/org/gephi/project/impl/ProjectInformationImpl.java index 98787bc34a..26d01cd0f6 100644 --- a/modules/ProjectAPI/src/main/java/org/gephi/project/impl/ProjectInformationImpl.java +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/impl/ProjectInformationImpl.java @@ -39,49 +39,46 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.project.impl; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.io.File; import java.util.ArrayList; import java.util.List; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; import org.gephi.project.api.Project; import org.gephi.project.api.ProjectInformation; /** - * * @author Mathieu Bastian */ public class ProjectInformationImpl implements ProjectInformation { - public enum Status { - - NEW, OPEN, CLOSED, INVALID - }; //Data private final Project project; + //Event + private final transient List listeners; private String name; private Status status = Status.CLOSED; private File file; - //Event - private final transient List listeners; public ProjectInformationImpl(Project project, String name) { this.project = project; this.name = name; - listeners = new ArrayList(); - status = Status.CLOSED; + listeners = new ArrayList<>(); } public void open() { - this.status = Status.OPEN; - fireChangeEvent(); + Status oldStatus = status; + status = Status.OPEN; + fireChangeEvent(ProjectInformation.EVENT_OPEN, oldStatus, status); } public void close() { - this.status = Status.CLOSED; - fireChangeEvent(); + Status oldStatus = status; + status = Status.CLOSED; + fireChangeEvent(ProjectInformation.EVENT_CLOSE, oldStatus, status); } @Override @@ -119,41 +116,54 @@ public String getFileName() { } } - public void setName(String name) { - this.name = name; - fireChangeEvent(); - } - @Override public String getName() { return name; } + public void setName(String name) { + if (name == null || name.isEmpty()) { + throw new IllegalArgumentException("Project name cannot be null or empty"); + } + String oldName = this.name; + this.name = name; + fireChangeEvent(ProjectInformation.EVENT_RENAME, oldName, name); + } + @Override public File getFile() { return file; } public void setFile(File file) { + File oldFile = this.file; this.file = file; - fireChangeEvent(); + fireChangeEvent(ProjectInformation.EVENT_SET_FILE, oldFile, file); } //EVENTS @Override - public void addChangeListener(ChangeListener listener) { + public void addChangeListener(PropertyChangeListener listener) { listeners.add(listener); } @Override - public void removeChangeListener(ChangeListener listener) { + public void removeChangeListener(PropertyChangeListener listener) { listeners.remove(listener); } - public void fireChangeEvent() { - ChangeEvent event = new ChangeEvent(this); - for (ChangeListener listener : listeners) { - listener.stateChanged(event); + public void fireChangeEvent(String eventName, Object oldValue, Object newValue) { + if ((oldValue == null && newValue != null) || (oldValue != null && newValue == null) + || (oldValue != null && !oldValue.equals(newValue))) { + PropertyChangeEvent event = new PropertyChangeEvent(this, eventName, oldValue, newValue); + for (PropertyChangeListener listener : listeners) { + listener.propertyChange(event); + } } } + + public enum Status { + + NEW, OPEN, CLOSED, INVALID + } } diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/impl/ProjectMetaDataImpl.java b/modules/ProjectAPI/src/main/java/org/gephi/project/impl/ProjectMetaDataImpl.java index 774c8efa72..28bc7b4d95 100644 --- a/modules/ProjectAPI/src/main/java/org/gephi/project/impl/ProjectMetaDataImpl.java +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/impl/ProjectMetaDataImpl.java @@ -39,16 +39,16 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.project.impl; -import java.io.Serializable; +import java.util.Objects; import org.gephi.project.api.ProjectMetaData; /** - * * @author Mathieu Bastian */ -public class ProjectMetaDataImpl implements ProjectMetaData, Serializable { +public class ProjectMetaDataImpl implements ProjectMetaData { private String author; private String title = ""; @@ -67,38 +67,70 @@ public String getAuthor() { return author; } + @Override + public void setAuthor(String author) { + this.author = author; + } + @Override public String getDescription() { return description; } + @Override + public void setDescription(String description) { + this.description = description; + } + @Override public String getKeywords() { return keywords; } @Override - public String getTitle() { - return title; + public void setKeywords(String keywords) { + this.keywords = keywords; } @Override - public void setAuthor(String author) { - this.author = author; + public String getTitle() { + return title; } @Override - public void setDescription(String description) { - this.description = description; + public void setTitle(String title) { + this.title = title; } @Override - public void setKeywords(String keywords) { - this.keywords = keywords; + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + ProjectMetaDataImpl that = (ProjectMetaDataImpl) o; + + if (!Objects.equals(author, that.author)) { + return false; + } + if (!Objects.equals(title, that.title)) { + return false; + } + if (!Objects.equals(keywords, that.keywords)) { + return false; + } + return Objects.equals(description, that.description); } @Override - public void setTitle(String title) { - this.title = title; + public int hashCode() { + int result = author != null ? author.hashCode() : 0; + result = 31 * result + (title != null ? title.hashCode() : 0); + result = 31 * result + (keywords != null ? keywords.hashCode() : 0); + result = 31 * result + (description != null ? description.hashCode() : 0); + return result; } } diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/impl/ProjectsImpl.java b/modules/ProjectAPI/src/main/java/org/gephi/project/impl/ProjectsImpl.java index 7a186be610..3c63144f82 100644 --- a/modules/ProjectAPI/src/main/java/org/gephi/project/impl/ProjectsImpl.java +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/impl/ProjectsImpl.java @@ -39,74 +39,235 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.project.impl; -import java.io.Serializable; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.time.Instant; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; -import java.util.concurrent.atomic.AtomicInteger; +import java.util.logging.Logger; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; +import javax.xml.stream.XMLStreamWriter; import org.gephi.project.api.Project; import org.gephi.project.api.Projects; +import org.gephi.project.io.SaveTask; +import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ -public class ProjectsImpl implements Projects, Serializable { +public class ProjectsImpl implements Projects { //Project - private final List projects; - private ProjectImpl currentProject; + private final List projects; //Workspace ids - private final AtomicInteger projectIds; + private ProjectImpl currentProject; public ProjectsImpl() { - projects = new ArrayList(); - projectIds = new AtomicInteger(1); + projects = new ArrayList<>(); + } + + public void addProject(ProjectImpl project) { + synchronized (projects) { + if (!projects.contains(project)) { + projects.add(project); + } else { + throw new IllegalArgumentException("The project " + project.getUniqueIdentifier() + " already exists"); + } + } } - public synchronized void addProject(Project project) { - if (!projects.contains(project)) { - projects.add(project); + public boolean containsProject(Project project) { + synchronized (projects) { + return projects.contains(project); } } - public synchronized void removeProject(Project project) { - projects.remove(project); + public ProjectImpl getProjectByIdentifier(String identifier) { + synchronized (projects) { + for (Project p : projects) { + if (p.getUniqueIdentifier().equals(identifier)) { + return (ProjectImpl) p; + } + } + } + return null; } - @Override - public synchronized Project[] getProjects() { - return projects.toArray(new Project[0]); + public void addOrReplaceProject(ProjectImpl project) { + synchronized (projects) { + if (projects.contains(project)) { + projects.remove(project); + projects.add(project); + } else { + ProjectImpl projectWithSameFileName = findProjectByFile(project.getFile()); + if (projectWithSameFileName != null && projectWithSameFileName != project) { + projects.remove(projectWithSameFileName); + } + projects.add(project); + } + } + } + + private ProjectImpl findProjectByFile(File file) { + if (file != null) { + synchronized (projects) { + for (ProjectImpl p : projects) { + if (p.getFile() != null && p.getFile().equals(file)) { + return p; + } + } + } + } + return null; + } + + public void removeProject(ProjectImpl project) { + synchronized (projects) { + projects.remove(project); + } } @Override - public synchronized ProjectImpl getCurrentProject() { - return currentProject; + public ProjectImpl[] getProjects() { + synchronized (projects) { + ProjectImpl[] res = projects.toArray(new ProjectImpl[0]); + Arrays.sort(res); + return res; + } } @Override - public synchronized boolean hasCurrentProject() { - return currentProject != null; + public ProjectImpl getCurrentProject() { + synchronized (projects) { + return currentProject; + } } - public synchronized void setCurrentProject(ProjectImpl currentProject) { - this.currentProject = currentProject; + public void setCurrentProject(ProjectImpl currentProject) { + synchronized (projects) { + this.currentProject = currentProject; + if (currentProject != null) { + currentProject.open(); + } + } } - public synchronized void closeCurrentProject() { - this.currentProject = null; + @Override + public boolean hasCurrentProject() { + synchronized (projects) { + return currentProject != null; + } } - public int nextProjectId() { - return projectIds.getAndIncrement(); + public void closeCurrentProject() { + synchronized (projects) { + if (currentProject != null) { + currentProject.close(); + } + this.currentProject = null; + } } - public void setProjectIds(int id) { - projectIds.set(id); + protected String nextUntitledProjectName() { + int i = 0; + while (true) { + final String name = + NbBundle.getMessage(ProjectImpl.class, "Project.default.prefix") + (i > 0 ? " " + i : ""); + if (projects.stream().noneMatch((p) -> (p.getName().equals(name)))) { + return name; + } + i++; + } } - public int getProjectIds() { - return projectIds.get(); + @Override + public void saveProjects(File file) throws IOException { + synchronized (projects) { + try (FileOutputStream fos = new FileOutputStream(file)) { + XMLStreamWriter writer = SaveTask.newXMLWriter(fos); + writer.writeStartDocument("UTF-8", "1.0"); + writer.writeStartElement("projects"); + for (ProjectImpl p : getProjects()) { + if ((!p.hasFile() && p.isOpen()) || (p.hasFile() && p.getFile().exists())) { + writer.writeStartElement("project"); + if (p.hasFile()) { + writer.writeAttribute("file", p.getFile().getAbsolutePath()); + } + writer.writeAttribute("id", p.getUniqueIdentifier()); + writer.writeAttribute("name", p.getName()); + if (p.getLastOpened() != null) { + writer.writeAttribute("lastOpened", String.valueOf(p.getLastOpened().toEpochMilli())); + } + writer.writeEndElement(); + } else if (p.hasFile()) { + Logger.getLogger(ProjectsImpl.class.getName()) + .warning("Project " + p.getName() + " file does not exist"); + } + } + writer.writeEndDocument(); + } catch (XMLStreamException ex) { + throw new IOException(ex); + } + } + } + + @Override + public void loadProjects(File file) throws IOException { + synchronized (projects) { + XMLInputFactory inputFactory = XMLInputFactory.newInstance(); + if (inputFactory.isPropertySupported("javax.xml.stream.isValidating")) { + inputFactory.setProperty("javax.xml.stream.isValidating", Boolean.FALSE); + } + try (FileInputStream fis = new FileInputStream(file)) { + XMLStreamReader reader = inputFactory.createXMLStreamReader(fis, "UTF-8"); + + boolean end = false; + while (reader.hasNext() && !end) { + int type = reader.next(); + + switch (type) { + case XMLStreamReader.START_ELEMENT: + String name = reader.getLocalName(); + if ("project".equalsIgnoreCase(name)) { + String filePath = reader.getAttributeValue(null, "file"); + String id = reader.getAttributeValue(null, "id"); + String projectName = reader.getAttributeValue(null, "name"); + String lastOpened = reader.getAttributeValue(null, "lastOpened"); + + if (filePath == null || new File(filePath).exists()) { + ProjectImpl project = new ProjectImpl(id, projectName); + if (filePath != null) { + project.setFile(new File(filePath)); + } + if (lastOpened != null) { + project.setLastOpened(Instant.ofEpochMilli(Long.parseLong(lastOpened))); + } + addOrReplaceProject(project); + } else { + Logger.getLogger(ProjectsImpl.class.getName()) + .warning("Project " + projectName + " file does not exist"); + } + } + break; + case XMLStreamReader.END_ELEMENT: + if ("projects".equalsIgnoreCase(reader.getLocalName())) { + end = true; + } + break; + } + } + reader.close(); + } catch (XMLStreamException ex) { + throw new IOException(ex); + } + } } } diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/impl/WorkspaceImpl.java b/modules/ProjectAPI/src/main/java/org/gephi/project/impl/WorkspaceImpl.java new file mode 100644 index 0000000000..6a6f08784a --- /dev/null +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/impl/WorkspaceImpl.java @@ -0,0 +1,179 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.project.impl; + +import org.gephi.project.api.Workspace; +import org.gephi.project.api.WorkspaceMetaData; +import org.gephi.project.spi.Controller; +import org.gephi.project.spi.Model; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; +import org.openide.util.lookup.AbstractLookup; +import org.openide.util.lookup.InstanceContent; + +/** + * @author Mathieu Bastian + */ +public class WorkspaceImpl implements Workspace { + + private final transient InstanceContent instanceContent; + private final transient Lookup lookup; + private final int id; + private final ProjectImpl project; + private final WorkspaceInformationImpl workspaceInformation; + private final WorkspaceMetaDataImpl workspaceMetaData; + + public WorkspaceImpl(ProjectImpl project, int id, Object... objectsForLookup) { + this(project, id, true, objectsForLookup); + } + + public WorkspaceImpl(ProjectImpl project, int id, boolean initModels, Object... objectsForLookup) { + this.instanceContent = new InstanceContent(); + this.lookup = new AbstractLookup(instanceContent); + this.id = id; + this.project = project; + + //Init Default Content + workspaceInformation = new WorkspaceInformationImpl(NbBundle.getMessage(WorkspaceImpl.class, "Workspace.default.prefix") + " " + id); + instanceContent.add(workspaceInformation); + for (Object o : objectsForLookup) { + if (o != null) { + instanceContent.add(o); + } + } + + workspaceMetaData = new WorkspaceMetaDataImpl(); + + // Models + if (initModels) { + initModels(); + } + } + + public void initModels() { + Lookup.getDefault().lookupAll(Controller.class).forEach(c -> { + Model model = c.newModel(this); + // Check if it doesn't already exist + if (lookup.lookup(model.getClass()) != null) { + throw new IllegalStateException("Model already exists"); + } + add(model); + }); + } + + @Override + public void add(Object instance) { + instanceContent.add(instance); + } + + @Override + public void remove(Object instance) { + instanceContent.remove(instance); + } + + @Override + public Lookup getLookup() { + return lookup; + } + + @Override + public ProjectImpl getProject() { + return project; + } + + @Override + public int getId() { + return id; + } + + @Override + public boolean isOpen() { + return workspaceInformation.isOpen(); + } + + @Override + public boolean isClosed() { + return workspaceInformation.isClosed(); + } + + @Override + public boolean isInvalid() { + return workspaceInformation.isInvalid(); + } + + protected void close() { + workspaceInformation.close(); + } + + protected void open() { + workspaceInformation.open(); + } + + public String getName() { + return lookup.lookup(WorkspaceInformationImpl.class).getName(); + } + + @Override + public boolean hasSource() { + return workspaceInformation.hasSource(); + } + + @Override + public String getSource() { + return workspaceInformation.getSource(); + } + + @Override + public WorkspaceMetaData getWorkspaceMetadata() { + return workspaceMetaData; + } + + @Override + public String toString() { + WorkspaceInformationImpl information = lookup.lookup(WorkspaceInformationImpl.class); + if (information != null) { + return information.getName(); + } + return "null"; + } +} diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/impl/WorkspaceInformationImpl.java b/modules/ProjectAPI/src/main/java/org/gephi/project/impl/WorkspaceInformationImpl.java new file mode 100644 index 0000000000..6fd26462c8 --- /dev/null +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/impl/WorkspaceInformationImpl.java @@ -0,0 +1,161 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.project.impl; + +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.ArrayList; +import java.util.List; +import org.gephi.project.api.WorkspaceInformation; + +/** + * @author Mathieu Bastian + */ +public class WorkspaceInformationImpl implements WorkspaceInformation { + + //Lookup + private final transient List listeners = new ArrayList<>(); + private String name; + private Status status = Status.CLOSED; + private String source; + + public WorkspaceInformationImpl(String name) { + this.name = name; + } + + @Override + public String toString() { + return name; + } + + @Override + public String getName() { + return name; + } + + public void setName(String name) { + String oldValue = this.name; + this.name = name; + fireChangeEvent(WorkspaceInformation.EVENT_RENAME, oldValue, name); + } + + public Status getStatus() { + return status; + } + + @Override + public String getSource() { + return source; + } + + public void setSource(String source) { + String oldValue = this.source; + this.source = source; + fireChangeEvent(WorkspaceInformation.EVENT_SET_SOURCE, oldValue, source); + } + + @Override + public boolean hasSource() { + return source != null; + } + + public void open() { + Status oldValue = status; + status = Status.OPEN; + fireChangeEvent(WorkspaceInformation.EVENT_OPEN, oldValue, status); + } + + public void close() { + Status oldValue = status; + status = Status.CLOSED; + fireChangeEvent(WorkspaceInformation.EVENT_CLOSE, oldValue, status); + } + + public void setStatus(Status status) { + this.status = status; + } + + public void invalid() { + this.status = Status.INVALID; + } + + @Override + public boolean isOpen() { + return status == Status.OPEN; + } + + @Override + public boolean isClosed() { + return status == Status.CLOSED; + } + + @Override + public boolean isInvalid() { + return status == Status.INVALID; + } + + @Override + public void addChangeListener(PropertyChangeListener listener) { + listeners.add(listener); + } + + @Override + public void removeChangeListener(PropertyChangeListener listener) { + listeners.remove(listener); + } + + public void fireChangeEvent(String eventName, Object oldValue, Object newValue) { + if ((oldValue == null && newValue != null) || (oldValue != null && newValue == null) + || (oldValue != null && !oldValue.equals(newValue))) { + PropertyChangeEvent event = new PropertyChangeEvent(this, eventName, oldValue, newValue); + for (PropertyChangeListener listener : listeners) { + listener.propertyChange(event); + } + } + } + + public enum Status { + + OPEN, CLOSED, INVALID + } +} diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/impl/WorkspaceMetaDataImpl.java b/modules/ProjectAPI/src/main/java/org/gephi/project/impl/WorkspaceMetaDataImpl.java new file mode 100644 index 0000000000..cebbbb2f93 --- /dev/null +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/impl/WorkspaceMetaDataImpl.java @@ -0,0 +1,53 @@ +package org.gephi.project.impl; + +import org.gephi.project.api.WorkspaceMetaData; + +public class WorkspaceMetaDataImpl implements WorkspaceMetaData { + + private String description = ""; + private String title = ""; + + @Override + public String getDescription() { + return description; + } + + @Override + public void setDescription(String description) { + this.description = description == null ? "" : description; + } + + @Override + public String getTitle() { + return title; + } + + @Override + public void setTitle(String title) { + this.title = title == null ? "" : title; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + WorkspaceMetaDataImpl that = (WorkspaceMetaDataImpl) o; + + if (!getDescription().equals(that.getDescription())) { + return false; + } + return getTitle().equals(that.getTitle()); + } + + @Override + public int hashCode() { + int result = getDescription().hashCode(); + result = 31 * result + getTitle().hashCode(); + return result; + } +} diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/impl/WorkspaceProviderImpl.java b/modules/ProjectAPI/src/main/java/org/gephi/project/impl/WorkspaceProviderImpl.java index 79695efcae..8c2382584b 100644 --- a/modules/ProjectAPI/src/main/java/org/gephi/project/impl/WorkspaceProviderImpl.java +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/impl/WorkspaceProviderImpl.java @@ -39,50 +39,51 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.project.impl; import java.util.ArrayList; import java.util.List; import org.gephi.project.api.Workspace; import org.gephi.project.api.WorkspaceProvider; -import org.gephi.workspace.impl.WorkspaceImpl; /** - * * @author Mathieu Bastian */ public class WorkspaceProviderImpl implements WorkspaceProvider { - private transient WorkspaceImpl currentWorkspace; - private final transient ProjectImpl project; - private final transient List workspaces; + private final ProjectImpl project; + private final List workspaces; + private WorkspaceImpl currentWorkspace; public WorkspaceProviderImpl(ProjectImpl project) { this.project = project; - workspaces = new ArrayList(); - } - - public synchronized WorkspaceImpl newWorkspace() { - WorkspaceImpl workspace = new WorkspaceImpl(project, project.nextWorkspaceId()); - workspaces.add(workspace); - return workspace; + workspaces = new ArrayList<>(); } - public synchronized WorkspaceImpl newWorkspace(int id) { - WorkspaceImpl workspace = new WorkspaceImpl(project, id); - workspaces.add(workspace); - return workspace; + protected WorkspaceImpl newWorkspace(int id, Object... objectsForLookup) { + synchronized (workspaces) { + WorkspaceImpl workspace = new WorkspaceImpl(project, id, true, objectsForLookup); + workspaces.add(workspace); + return workspace; + } } - public synchronized void addWorkspace(Workspace workspace) { - workspaces.add(workspace); + protected WorkspaceImpl newWorkspaceWithoutModels(int id, Object... objectsForLookup) { + synchronized (workspaces) { + WorkspaceImpl workspace = new WorkspaceImpl(project, id, false, objectsForLookup); + workspaces.add(workspace); + return workspace; + } } - public synchronized void removeWorkspace(Workspace workspace) { - workspaces.remove(workspace); + protected void removeWorkspace(Workspace workspace) { + synchronized (workspaces) { + workspaces.remove(workspace); + } } - public synchronized Workspace getPrecedingWorkspace(Workspace workspace) { + protected Workspace getPrecedingWorkspace(Workspace workspace) { Workspace[] ws = getWorkspaces(); int index = -1; for (int i = 0; i < ws.length; i++) { @@ -90,7 +91,7 @@ public synchronized Workspace getPrecedingWorkspace(Workspace workspace) { index = i; } } - if (index != -1 && index >= 1) { + if (index >= 1) { //Get preceding return ws[index - 1]; } else if (index == 0 && ws.length > 1) { @@ -101,31 +102,61 @@ public synchronized Workspace getPrecedingWorkspace(Workspace workspace) { } @Override - public synchronized WorkspaceImpl getCurrentWorkspace() { - return currentWorkspace; + public WorkspaceImpl getCurrentWorkspace() { + synchronized (workspaces) { + return currentWorkspace; + } + } + + public ProjectImpl getProject() { + return project; + } + + protected void purge() { + synchronized (workspaces) { + workspaces.clear(); + this.currentWorkspace = null; + } + } + + protected void setCurrentWorkspace(Workspace currentWorkspace) { + synchronized (workspaces) { + if (this.currentWorkspace != null) { + this.currentWorkspace.close(); + } + this.currentWorkspace = (WorkspaceImpl) currentWorkspace; + this.currentWorkspace.open(); + } } @Override - public synchronized Workspace[] getWorkspaces() { - return workspaces.toArray(new Workspace[0]); + public Workspace[] getWorkspaces() { + synchronized (workspaces) { + return workspaces.toArray(new Workspace[0]); + } } @Override - public synchronized Workspace getWorkspace(int id) { - for (Workspace w : workspaces) { - if (w.getId() == id) { - return w; + public Workspace getWorkspace(int id) { + synchronized (workspaces) { + for (Workspace w : workspaces) { + if (w.getId() == id) { + return w; + } } + return null; } - return null; } - public synchronized void setCurrentWorkspace(Workspace currentWorkspace) { - this.currentWorkspace = (WorkspaceImpl) currentWorkspace; + @Override + public boolean hasCurrentWorkspace() { + synchronized (workspaces) { + return currentWorkspace != null; + } } @Override - public synchronized boolean hasCurrentWorkspace() { - return currentWorkspace != null; + public int getNextWorkspaceId() { + return project.getWorkspaceIds(); } } diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/io/DuplicateTask.java b/modules/ProjectAPI/src/main/java/org/gephi/project/io/DuplicateTask.java new file mode 100644 index 0000000000..3846957e9b --- /dev/null +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/io/DuplicateTask.java @@ -0,0 +1,133 @@ +package org.gephi.project.io; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.DataInputStream; +import java.io.DataOutputStream; +import java.io.PipedInputStream; +import java.io.PipedOutputStream; +import java.util.Collection; +import javax.xml.stream.XMLStreamReader; +import javax.xml.stream.XMLStreamWriter; +import org.gephi.project.api.Workspace; +import org.gephi.project.impl.ProjectImpl; +import org.gephi.project.impl.WorkspaceImpl; +import org.gephi.project.impl.WorkspaceInformationImpl; +import org.gephi.project.spi.WorkspaceBytesPersistenceProvider; +import org.gephi.project.spi.WorkspacePersistenceProvider; +import org.gephi.project.spi.WorkspaceXMLPersistenceProvider; +import org.gephi.utils.longtask.spi.LongTask; +import org.gephi.utils.progress.Progress; +import org.gephi.utils.progress.ProgressTicket; +import org.openide.util.NbBundle; + +public class DuplicateTask implements LongTask { + + private final Workspace workspace; + + private boolean cancel = false; + + private ProgressTicket progressTicket; + + public DuplicateTask(Workspace workspace) { + this.workspace = workspace; + } + + public WorkspaceImpl run() { + Progress.start(progressTicket); + Progress.setDisplayName(progressTicket, NbBundle.getMessage(DuplicateTask.class, "DuplicateTask.name")); + + try { + WorkspaceImpl newWorkspace = duplicateWorkspace(workspace); + + Collection providers = PersistenceProviderUtils.getPersistenceProviders(); + + // First the bytes model + for (WorkspacePersistenceProvider provider : providers) { + if (cancel) { + return null; + } + if (provider instanceof WorkspaceBytesPersistenceProvider) { + duplicateWorkspaceModel(workspace, newWorkspace, (WorkspaceBytesPersistenceProvider) provider); + } + } + + // Init models + newWorkspace.initModels(); + + // And then the XML ones + for (WorkspacePersistenceProvider provider : providers) { + if (cancel) { + return null; + } + if (provider instanceof WorkspaceXMLPersistenceProvider) { + duplicateWorkspaceModel(workspace, newWorkspace, (WorkspaceXMLPersistenceProvider) provider); + } + } + + return newWorkspace; + } catch (Exception e) { + throw new RuntimeException(e); + } finally { + Progress.finish(progressTicket); + } + } + + private void duplicateWorkspaceModel(Workspace workspace, Workspace newWorkspace, + WorkspaceBytesPersistenceProvider persistenceProvider) throws Exception { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + DataOutputStream dos = new DataOutputStream(bos); + persistenceProvider.writeBytes(dos, workspace); + bos.close(); + + ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); + DataInputStream dis = new DataInputStream(bis); + persistenceProvider.readBytes(dis, newWorkspace); + bis.close(); + } + + private void duplicateWorkspaceModel(Workspace workspace, Workspace newWorkspace, + WorkspaceXMLPersistenceProvider persistenceProvider) throws Exception { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + XMLStreamWriter writer = SaveTask.newXMLWriter(bos); + GephiWriter.writeWorkspaceChildren(writer, workspace, persistenceProvider); + writer.close(); + bos.close(); + + ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); + XMLStreamReader reader = LoadTask.newXMLReader(bis); + GephiReader.readWorkspaceChildren(newWorkspace, reader, persistenceProvider); + reader.close(); + bis.close(); + } + + private WorkspaceImpl duplicateWorkspace(Workspace workspace) throws Exception { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + XMLStreamWriter writer = SaveTask.newXMLWriter(bos); + GephiWriter.writeWorkspace(writer, workspace); + writer.close(); + bos.flush(); + + ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); + XMLStreamReader reader = LoadTask.newXMLReader(bis); + WorkspaceImpl newWorkspace = GephiReader.readWorkspace(reader, (ProjectImpl) workspace.getProject()); + // Set to closed as the status should be controlled upstream + WorkspaceInformationImpl info = newWorkspace.getLookup().lookup(WorkspaceInformationImpl.class); + info.setStatus(WorkspaceInformationImpl.Status.CLOSED); + + reader.close(); + bis.close(); + return newWorkspace; + } + + @Override + public boolean cancel() { + cancel = true; + return true; + } + + @Override + public void setProgressTicket(ProgressTicket progressTicket) { + this.progressTicket = progressTicket; + } +} diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/io/GephiReader.java b/modules/ProjectAPI/src/main/java/org/gephi/project/io/GephiReader.java index 29e3f926c7..cb79b57367 100644 --- a/modules/ProjectAPI/src/main/java/org/gephi/project/io/GephiReader.java +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/io/GephiReader.java @@ -39,58 +39,65 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.project.io; import javax.xml.stream.XMLStreamReader; import javax.xml.stream.events.XMLEvent; +import org.gephi.project.api.GephiFormatException; import org.gephi.project.api.Workspace; -import org.gephi.project.impl.ProjectControllerImpl; import org.gephi.project.impl.ProjectImpl; import org.gephi.project.impl.ProjectsImpl; +import org.gephi.project.impl.WorkspaceImpl; +import org.gephi.project.impl.WorkspaceInformationImpl; import org.gephi.project.impl.WorkspaceProviderImpl; -import org.gephi.project.spi.WorkspacePersistenceProvider; -import org.gephi.workspace.impl.WorkspaceImpl; -import org.gephi.workspace.impl.WorkspaceInformationImpl; -import org.openide.util.Cancellable; -import org.openide.util.Lookup; - -/** - * - * @author Mathieu Bastian - */ -public class GephiReader implements Cancellable { +import org.gephi.project.spi.WorkspaceXMLPersistenceProvider; - private boolean cancel = false; - private WorkspacePersistenceProvider currentProvider; +public class GephiReader { - @Override - public boolean cancel() { - cancel = true; - return true; - } + static final String VERSION = "0.9"; - public ProjectImpl readProject(XMLStreamReader reader, ProjectsImpl projects) throws Exception { + public static ProjectImpl readProject(XMLStreamReader reader, ProjectsImpl projects) throws Exception { ProjectImpl project = null; boolean end = false; while (reader.hasNext() && !end) { Integer eventType = reader.next(); if (eventType.equals(XMLEvent.START_ELEMENT)) { String name = reader.getLocalName(); - if ("projectFile".equalsIgnoreCase(name)) { + if ("projectFile".equalsIgnoreCase(name) || "gephiFile".equalsIgnoreCase(name)) { //Version String version = reader.getAttributeValue(null, "version"); - if (version == null || version.isEmpty() || Double.parseDouble(version) < 0.7) { - throw new GephiFormatException("Gephi project file version must be at least 0.7"); + if (version == null || version.isEmpty() || + Double.parseDouble(version) < Double.parseDouble(VERSION)) { + throw new GephiFormatException( + "Gephi project file version must be at least of version " + VERSION); } } else if ("project".equalsIgnoreCase(name)) { String projectName = reader.getAttributeValue(null, "name"); - project = new ProjectImpl(projectName); + if (projectName == null || projectName.trim().isEmpty()) { + projectName = "Untitled"; + } + String projectId = reader.getAttributeValue(null, "id"); + if (projectId == null) { + // Before 0.10 version we didn't have unique project ids + project = new ProjectImpl(projectName); + } else { + if (projects != null) { + project = projects.getProjectByIdentifier(projectId); + } + if (project == null) { + project = new ProjectImpl(projectId, projectName); + } + } + project.getLookup().lookup(WorkspaceProviderImpl.class); if (reader.getAttributeValue(null, "ids") != null) { - Integer workspaceIds = Integer.parseInt(reader.getAttributeValue(null, "ids")); + int workspaceIds = Integer.parseInt(reader.getAttributeValue(null, "ids")); project.setWorkspaceIds(workspaceIds); } + } else if ("metadata".equalsIgnoreCase(name)) { + readProjectMetadata(reader, project); } } else if (eventType.equals(XMLStreamReader.END_ELEMENT)) { if ("project".equalsIgnoreCase(reader.getLocalName())) { @@ -102,29 +109,24 @@ public ProjectImpl readProject(XMLStreamReader reader, ProjectsImpl projects) th return project; } - public Workspace readWorkspace(XMLStreamReader reader, ProjectImpl project) throws Exception { + public static WorkspaceImpl readWorkspace(XMLStreamReader reader, ProjectImpl project) throws Exception { WorkspaceImpl workspace = null; boolean end = false; while (reader.hasNext() && !end) { Integer eventType = reader.next(); if (eventType.equals(XMLEvent.START_ELEMENT)) { String name = reader.getLocalName(); - if ("workspaceFile".equalsIgnoreCase(name)) { - //Version - String version = reader.getAttributeValue(null, "version"); - if (version == null || version.isEmpty() || Double.parseDouble(version) < 0.7) { - throw new GephiFormatException("Gephi project file version must be at least 0.7"); - } - } else if ("workspace".equalsIgnoreCase(name)) { + if ("workspace".equalsIgnoreCase(name)) { //Id Integer workspaceId; - if (reader.getAttributeValue(null, "id") == null) { + if (reader.getAttributeValue(null, "id") == null || + project.getWorkspace(Integer.parseInt(reader.getAttributeValue(null, "id"))) != null) { workspaceId = project.nextWorkspaceId(); } else { workspaceId = Integer.parseInt(reader.getAttributeValue(null, "id")); } - workspace = project.getLookup().lookup(WorkspaceProviderImpl.class).newWorkspace(workspaceId); + workspace = project.newWorkspaceWithoutModels(workspaceId); WorkspaceInformationImpl info = workspace.getLookup().lookup(WorkspaceInformationImpl.class); //Name @@ -132,31 +134,15 @@ public Workspace readWorkspace(XMLStreamReader reader, ProjectImpl project) thro //Status String workspaceStatus = reader.getAttributeValue(null, "status"); - if (workspaceStatus.equals("open")) { - info.open(); - } else if (workspaceStatus.equals("closed")) { - info.close(); + if ("open".equals(workspaceStatus)) { + info.setStatus(WorkspaceInformationImpl.Status.OPEN); + } else if ("closed".equals(workspaceStatus)) { + info.setStatus(WorkspaceInformationImpl.Status.CLOSED); } else { info.invalid(); } - - //Hack to set this workspace active, when readers need to use attributes for instance - ProjectControllerImpl pc = Lookup.getDefault().lookup(ProjectControllerImpl.class); - pc.setTemporaryOpeningWorkspace(workspace); - - //WorkspacePersistent - readWorkspaceChildren(workspace, reader); - if (currentProvider != null) { - //One provider not correctly closed - throw new GephiFormatException("The '" + currentProvider.getIdentifier() + "' persistence provider is not ending read."); - } - pc.setTemporaryOpeningWorkspace(null); - - //Current workspace - if (info.isOpen()) { - WorkspaceProviderImpl workspaces = project.getLookup().lookup(WorkspaceProviderImpl.class); - workspaces.setCurrentWorkspace(workspace); - } + } else if ("metadata".equalsIgnoreCase(name)) { + readWorkspaceMetadata(reader, workspace); } } else if (eventType.equals(XMLStreamReader.END_ELEMENT)) { if ("workspace".equalsIgnoreCase(reader.getLocalName())) { @@ -168,24 +154,76 @@ public Workspace readWorkspace(XMLStreamReader reader, ProjectImpl project) thro return workspace; } - public void readWorkspaceChildren(Workspace workspace, XMLStreamReader reader) throws Exception { + private static void readWorkspaceMetadata(XMLStreamReader reader, Workspace workspace) throws Exception { + String property = null; + while (reader.hasNext()) { + Integer eventType = reader.next(); + if (eventType.equals(XMLEvent.START_ELEMENT)) { + property = reader.getLocalName(); + } else if (eventType.equals(XMLStreamReader.CHARACTERS)) { + if (property != null && property.equals("description")) { + String desc = reader.getText(); + workspace.getWorkspaceMetadata().setDescription(desc); + } else if (property != null && property.equals("title")) { + String title = reader.getText(); + workspace.getWorkspaceMetadata().setTitle(title); + } + } else if (eventType.equals(XMLStreamReader.END_ELEMENT)) { + if ("metadata".equalsIgnoreCase(reader.getLocalName())) { + return; + } + } + } + } + + private static void readProjectMetadata(XMLStreamReader reader, ProjectImpl project) throws Exception { + String property = null; + while (reader.hasNext()) { + Integer eventType = reader.next(); + if (eventType.equals(XMLEvent.START_ELEMENT)) { + property = reader.getLocalName(); + } else if (eventType.equals(XMLStreamReader.CHARACTERS)) { + if (property != null) { + switch (property) { + case "title": + project.getProjectMetadata().setTitle(reader.getText()); + break; + case "author": + project.getProjectMetadata().setAuthor(reader.getText()); + break; + case "description": + project.getProjectMetadata().setDescription(reader.getText()); + break; + case "keywords": + project.getProjectMetadata().setKeywords(reader.getText()); + break; + } + } + } else if (eventType.equals(XMLStreamReader.END_ELEMENT)) { + if ("metadata".equalsIgnoreCase(reader.getLocalName())) { + return; + } + } + } + } + + public static void readWorkspaceChildren(Workspace workspace, XMLStreamReader reader, + WorkspaceXMLPersistenceProvider persistenceProvider) throws Exception { + String identifier = persistenceProvider.getIdentifier(); boolean end = false; while (reader.hasNext() && !end) { Integer eventType = reader.next(); if (eventType.equals(XMLEvent.START_ELEMENT)) { String name = reader.getLocalName(); - WorkspacePersistenceProvider pp = PersistenceProviderUtils.getXMLPersistenceProviders().get(name); - if (pp != null) { - currentProvider = pp; + if (identifier.equals(name)) { try { - pp.readXML(reader, workspace); + persistenceProvider.readXML(reader, workspace); } catch (UnsupportedOperationException e) { } } } else if (eventType.equals(XMLStreamReader.END_ELEMENT)) { - if ("workspace".equalsIgnoreCase(reader.getLocalName())) { + if (identifier.equalsIgnoreCase(reader.getLocalName())) { end = true; - currentProvider = null; } } } diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/io/GephiWriter.java b/modules/ProjectAPI/src/main/java/org/gephi/project/io/GephiWriter.java index c801194079..badd603ab8 100644 --- a/modules/ProjectAPI/src/main/java/org/gephi/project/io/GephiWriter.java +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/io/GephiWriter.java @@ -39,44 +39,50 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.project.io; import java.text.MessageFormat; import java.text.SimpleDateFormat; import java.util.Calendar; -import java.util.Map; import java.util.TimeZone; +import java.util.logging.Level; +import java.util.logging.Logger; import javax.xml.stream.XMLStreamWriter; import org.gephi.project.api.Project; -import org.gephi.project.api.ProjectInformation; import org.gephi.project.api.ProjectMetaData; import org.gephi.project.api.Workspace; import org.gephi.project.api.WorkspaceInformation; +import org.gephi.project.api.WorkspaceMetaData; import org.gephi.project.impl.ProjectImpl; -import org.gephi.project.spi.WorkspacePersistenceProvider; -import org.openide.util.Cancellable; +import org.gephi.project.spi.WorkspaceXMLPersistenceProvider; import org.openide.util.NbBundle; -/** - * - * @author Mathieu - */ -public class GephiWriter implements Cancellable { +public class GephiWriter { - private static final String VERSION = "0.9"; + static final String VERSION = "0.9"; - public void writeProject(XMLStreamWriter writer, Project project) throws Exception { + public static void writeProject(XMLStreamWriter writer, Project project) throws Exception { writer.writeStartDocument("UTF-8", "1.0"); writer.writeStartElement("projectFile"); - writeHeader(writer); + // Header + writer.writeAttribute("version", VERSION); + writer.writeStartElement("lastModifiedDate"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + Calendar cal = Calendar.getInstance(); + sdf.setTimeZone(TimeZone.getTimeZone("UTC")); + writer.writeCharacters(sdf.format(cal.getTime())); + writer.writeComment("yyyy-MM-dd HH:mm:ss"); + writer.writeEndElement(); + writer.writeComment("File saved with " + getVersion()); - ProjectInformation info = project.getLookup().lookup(ProjectInformation.class); ProjectMetaData metaData = project.getLookup().lookup(ProjectMetaData.class); //Start Project writer.writeStartElement("project"); - writer.writeAttribute("name", info.getName()); + writer.writeAttribute("id", project.getUniqueIdentifier()); + writer.writeAttribute("name", project.getName()); writer.writeAttribute("ids", String.valueOf(((ProjectImpl) project).getWorkspaceIds())); //MetaData @@ -108,15 +114,12 @@ public void writeProject(XMLStreamWriter writer, Project project) throws Excepti writer.writeEndDocument(); } - public void writeWorkspace(XMLStreamWriter writer, Workspace workspace) throws Exception { + public static void writeWorkspace(XMLStreamWriter writer, Workspace workspace) throws Exception { writer.writeStartDocument("UTF-8", "1.0"); - writer.writeStartElement("workspaceFile"); - - writeHeader(writer); + writer.writeStartElement("workspace"); WorkspaceInformation info = workspace.getLookup().lookup(WorkspaceInformation.class); - writer.writeStartElement("workspace"); writer.writeAttribute("name", info.getName()); writer.writeAttribute("id", String.valueOf(workspace.getId())); if (info.isOpen()) { @@ -127,54 +130,49 @@ public void writeWorkspace(XMLStreamWriter writer, Workspace workspace) throws E writer.writeAttribute("status", "invalid"); } - writeWorkspaceChildren(writer, workspace); + //MetaData + WorkspaceMetaData workspaceMetaData = workspace.getWorkspaceMetadata(); + writer.writeStartElement("metadata"); + writer.writeStartElement("title"); + writer.writeCharacters(workspaceMetaData.getTitle()); writer.writeEndElement(); + writer.writeStartElement("description"); + writer.writeCharacters(workspaceMetaData.getDescription()); + writer.writeEndElement(); + //End MetaData + writer.writeEndElement(); writer.writeEndDocument(); } - public void writeWorkspaceChildren(XMLStreamWriter writer, Workspace workspace) throws Exception { - for (Map.Entry entry : PersistenceProviderUtils.getXMLPersistenceProviders().entrySet()) { - try { - String identifier = entry.getKey(); - WorkspacePersistenceProvider pp = entry.getValue(); - writer.writeComment("Persistence from '" + identifier + "' (" + pp.getClass().getName() + ")"); - pp.writeXML(writer, workspace); - } catch (UnsupportedOperationException e) { - } + public static void writeWorkspaceChildren(XMLStreamWriter writer, Workspace workspace, + WorkspaceXMLPersistenceProvider persistenceProvider) throws Exception { + String identifier = persistenceProvider.getIdentifier(); + writer.writeStartDocument("UTF-8", "1.0"); + writer.writeStartElement(identifier); + writer.writeComment("Persistence from '" + identifier + "' (" + persistenceProvider.getClass().getName() + ")"); + try { + persistenceProvider.writeXML(writer, workspace); + } catch (Exception e) { + Logger.getLogger("").log( + Level.SEVERE, + "Error while writing XML workspace persistence provider '" + identifier + "'", + e); } - } - - private void writeHeader(XMLStreamWriter writer) throws Exception { - writer.writeAttribute("version", VERSION); - - //LastModifiedDate - writer.writeStartElement("lastModifiedDate"); - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - Calendar cal = Calendar.getInstance(); - sdf.setTimeZone(TimeZone.getTimeZone("UTC")); - writer.writeCharacters(sdf.format(cal.getTime())); - writer.writeComment("yyyy-MM-dd HH:mm:ss"); writer.writeEndElement(); - - writer.writeComment("File saved with " + getVersion()); + writer.writeEndDocument(); } - private String getVersion() { + private static String getVersion() { try { return MessageFormat.format( - NbBundle.getBundle("org.netbeans.core.startup.Bundle").getString("currentVersion"), // NOI18N - new Object[]{System.getProperty("netbeans.buildnumber")} // NOI18N - ); + NbBundle.getBundle("org.netbeans.core.startup.Bundle").getString("currentVersion"), // NOI18N + // NOI18N + System.getProperty("netbeans.buildnumber")); } catch (Exception e) { return "?"; } } - - @Override - public boolean cancel() { - return true; - } } diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/io/LoadTask.java b/modules/ProjectAPI/src/main/java/org/gephi/project/io/LoadTask.java index eba0c9b687..aec37ba986 100644 --- a/modules/ProjectAPI/src/main/java/org/gephi/project/io/LoadTask.java +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/io/LoadTask.java @@ -39,15 +39,22 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.project.io; +import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.File; +import java.io.FileNotFoundException; import java.io.InputStream; import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Collection; import java.util.Enumeration; -import java.util.regex.Matcher; -import java.util.regex.Pattern; +import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import javax.xml.stream.Location; @@ -55,27 +62,27 @@ Development and Distribution License("CDDL") (collectively, the import javax.xml.stream.XMLReporter; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; +import org.gephi.project.api.GephiFormatException; +import org.gephi.project.api.LegacyGephiFormatException; import org.gephi.project.api.Workspace; -import org.gephi.project.impl.ProjectControllerImpl; import org.gephi.project.impl.ProjectImpl; import org.gephi.project.impl.ProjectInformationImpl; import org.gephi.project.impl.ProjectsImpl; -import org.gephi.project.impl.WorkspaceProviderImpl; +import org.gephi.project.impl.WorkspaceImpl; import org.gephi.project.spi.WorkspaceBytesPersistenceProvider; +import org.gephi.project.spi.WorkspacePersistenceProvider; +import org.gephi.project.spi.WorkspaceXMLPersistenceProvider; import org.gephi.utils.longtask.spi.LongTask; import org.gephi.utils.progress.Progress; import org.gephi.utils.progress.ProgressTicket; -import org.openide.util.Lookup; import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ -public class LoadTask implements LongTask, Runnable { +public class LoadTask implements LongTask { - private File file; - private GephiReader gephiReader; + private final File file; private boolean cancel = false; private ProgressTicket progressTicket; @@ -83,86 +90,117 @@ public LoadTask(File file) { this.file = file; } - @Override - public void run() { + public static XMLStreamReader newXMLReader(InputStream is) throws XMLStreamException { + XMLInputFactory inputFactory = XMLInputFactory.newInstance(); + if (inputFactory.isPropertySupported("javax.xml.stream.isValidating")) { + inputFactory.setProperty("javax.xml.stream.isValidating", Boolean.FALSE); + } + inputFactory.setXMLReporter(new XMLReporter() { + @Override + public void report(String message, String errorType, Object relatedInformation, + Location location) throws XMLStreamException { + } + }); + InputStreamReader isReader = new InputStreamReader(is, StandardCharsets.UTF_8); + Xml10FilterReader filterReader = new Xml10FilterReader(isReader); + return inputFactory.createXMLStreamReader(filterReader); + } + + public ProjectImpl execute(ProjectsImpl projects) { Progress.start(progressTicket); Progress.setDisplayName(progressTicket, NbBundle.getMessage(LoadTask.class, "LoadTask.name")); try { - ProjectImpl project = null; ZipFile zip = null; try { + if (!file.exists()) { + throw new FileNotFoundException("File " + file.getPath() + " not found"); + } + if (file.length() == 0) { + throw new GephiFormatException( + "The project file is empty and may be corrupt: " + file.getName()); + } zip = new ZipFile(file); - //Reader - gephiReader = new GephiReader(); - - //Project - ZipEntry entry = zip.getEntry("Project_xml"); - if (entry != null) { - InputStream is = null; - try { - is = zip.getInputStream(entry); - project = readProject(is); - } finally { - if (is != null) { - is.close(); + ProjectImpl project = readProject(zip, projects); + + if (project != null) { + // Enumerate workspaces + List workspaceEntries = new ArrayList<>(); + for (Enumeration e = zip.entries(); e.hasMoreElements(); ) { + ZipEntry entry = e.nextElement(); + if (entry.getName().matches("Workspace_[0-9]*_xml")) { + workspaceEntries.add(entry.getName()); } } - } - //Workspace Xml - if (project != null) { - for (Enumeration e = zip.entries(); e.hasMoreElements();) { - entry = e.nextElement(); - InputStream is = null; - String name = entry.getName(); - if (name.matches("Workspace_[0-9]*_xml")) { - try { - is = zip.getInputStream(entry); - readWorkspace(is, project); - } finally { - if (is != null) { - is.close(); + // Get providers + Collection providers = + PersistenceProviderUtils.getPersistenceProviders(); + + //Setup progress + Progress.switchToDeterminate(progressTicket, (1 + providers.size()) * workspaceEntries.size()); + + // Read workspaces + for (String workspaceEntry : workspaceEntries) { + WorkspaceImpl workspace = readWorkspace(project, workspaceEntry, zip); + + Progress.progress(progressTicket); + + if (workspace != null) { + // Read first the bytes ones + for (WorkspacePersistenceProvider provider : providers) { + if (provider instanceof WorkspaceBytesPersistenceProvider) { + readWorkspaceChildrenBytes((WorkspaceBytesPersistenceProvider) provider, workspace, + zip); + Progress.progress(progressTicket); } } - } - } - } - //Other Workspace data - if (project != null) { - for (Enumeration e = zip.entries(); e.hasMoreElements();) { - entry = e.nextElement(); - InputStream is = null; - String name = entry.getName(); - if (name.matches("Workspace_[0-9]*_.*_bytes")) { - try { - is = zip.getInputStream(entry); - Matcher matcher = Pattern.compile("Workspace_([0-9]*)_(.*)_bytes").matcher(name); - matcher.find(); - String workspaceId = matcher.group(1); - String providerId = matcher.group(2); - WorkspaceProviderImpl workspaceProvider = project.getLookup().lookup(WorkspaceProviderImpl.class); - Workspace workspace = workspaceProvider.getWorkspace(Integer.parseInt(workspaceId)); - if (workspace != null) { - readWorkspaceBytes(is, workspace, providerId); + // Init models, this is needed because when the workspace is created we don't init models + // to make sure the GraphModel is loaded first + workspace.initModels(); + + // Then the XML ones + for (WorkspacePersistenceProvider provider : providers) { + if (provider instanceof WorkspaceXMLPersistenceProvider) { + try { + readWorkspaceChildrenXML((WorkspaceXMLPersistenceProvider) provider, workspace, + zip); + } catch (Exception e) { + Logger.getLogger("").log( + Level.SEVERE, + "Error while reading XML workspace persistence provider '" + + provider.getIdentifier() + "'", + e); + } } - } finally { - if (is != null) { - is.close(); + Progress.progress(progressTicket); + if (cancel) { + break; } } } + if (cancel) { + break; + } } } + Progress.switchToIndeterminate(progressTicket); //Add project - ProjectControllerImpl projectController = Lookup.getDefault().lookup(ProjectControllerImpl.class); - if (project != null) { - if (!cancel) { - projectController.openProject(project); + if (!cancel && project != null) { + + //Set current workspace + for (Workspace workspace : project.getWorkspaces()) { + if (workspace.isOpen()) { + project.setCurrentWorkspace(workspace); + break; + } } + + Progress.finish(progressTicket); + return project; } } finally { if (zip != null) { @@ -170,93 +208,184 @@ public void run() { } } } catch (Exception ex) { + Progress.finish(progressTicket); + if (ex instanceof GephiFormatException) { throw (GephiFormatException) ex; + } else if (ex instanceof LegacyGephiFormatException) { + throw (LegacyGephiFormatException) ex; + } else if (ex instanceof FileNotFoundException) { + throw new RuntimeException(ex); } throw new GephiFormatException(GephiReader.class, ex); } Progress.finish(progressTicket); + return null; } - private ProjectImpl readProject(InputStream inputStream) throws Exception { - InputStreamReader isReader = null; - Xml10FilterReader filterReader = null; - XMLStreamReader reader = null; - try { - XMLInputFactory inputFactory = XMLInputFactory.newInstance(); - if (inputFactory.isPropertySupported("javax.xml.stream.isValidating")) { - inputFactory.setProperty("javax.xml.stream.isValidating", Boolean.FALSE); + private ProjectImpl readProject(ZipFile zipFile, ProjectsImpl projects) throws Exception { + ZipEntry entry = zipFile.getEntry("Project_xml"); + if (entry == null) { + // Try legacy + entry = zipFile.getEntry("Project"); + if (entry != null) { + throw new LegacyGephiFormatException(); + } else { + throw new GephiFormatException(LoadTask.class, + new RuntimeException("Project can't be found in the zip")); } - inputFactory.setXMLReporter(new XMLReporter() { - @Override - public void report(String message, String errorType, Object relatedInformation, Location location) throws XMLStreamException { - System.out.println("Error:" + errorType + ", message : " + message); + } + InputStream is = null; + try { + is = zipFile.getInputStream(entry); + InputStreamReader isReader = null; + Xml10FilterReader filterReader = null; + XMLStreamReader reader = null; + try { + XMLInputFactory inputFactory = XMLInputFactory.newInstance(); + if (inputFactory.isPropertySupported("javax.xml.stream.isValidating")) { + inputFactory.setProperty("javax.xml.stream.isValidating", Boolean.FALSE); + } + inputFactory.setXMLReporter(new XMLReporter() { + @Override + public void report(String message, String errorType, Object relatedInformation, + Location location) throws XMLStreamException { + } + }); + isReader = new InputStreamReader(is, StandardCharsets.UTF_8); + filterReader = new Xml10FilterReader(isReader); + reader = inputFactory.createXMLStreamReader(filterReader); + + ProjectImpl project = GephiReader.readProject(reader, projects); + project.getLookup().lookup(ProjectInformationImpl.class).setFile(file); + return project; + } finally { + if (reader != null) { + reader.close(); + } + if (filterReader != null) { + filterReader.close(); } - }); - isReader = new InputStreamReader(inputStream, "UTF-8"); - filterReader = new Xml10FilterReader(isReader); - reader = inputFactory.createXMLStreamReader(filterReader); - - ProjectControllerImpl projectController = Lookup.getDefault().lookup(ProjectControllerImpl.class); - ProjectsImpl projects = projectController.getProjects(); - ProjectImpl project = gephiReader.readProject(reader, projects); - project.getLookup().lookup(ProjectInformationImpl.class).setFile(file); - return project; - } finally { - if (reader != null) { - reader.close(); } - if (filterReader != null) { - filterReader.close(); + + } finally { + if (is != null) { + is.close(); } } } - private void readWorkspace(InputStream inputStream, ProjectImpl project) throws Exception { - InputStreamReader isReader = null; - Xml10FilterReader filterReader = null; - XMLStreamReader reader = null; - try { - XMLInputFactory inputFactory = XMLInputFactory.newInstance(); - if (inputFactory.isPropertySupported("javax.xml.stream.isValidating")) { - inputFactory.setProperty("javax.xml.stream.isValidating", Boolean.FALSE); - } - inputFactory.setXMLReporter(new XMLReporter() { - @Override - public void report(String message, String errorType, Object relatedInformation, Location location) throws XMLStreamException { - System.out.println("Error:" + errorType + ", message : " + message); - } - }); - isReader = new InputStreamReader(inputStream, "UTF-8"); - filterReader = new Xml10FilterReader(isReader); - reader = inputFactory.createXMLStreamReader(filterReader); + private WorkspaceImpl readWorkspace(ProjectImpl project, String entryName, ZipFile zipFile) throws Exception { + ZipEntry entry = zipFile.getEntry(entryName); + if (entry != null) { + InputStream is = null; + try { + is = zipFile.getInputStream(entry); - gephiReader.readWorkspace(reader, project); - } finally { - if (reader != null) { - reader.close(); - } - if (filterReader != null) { - filterReader.close(); - } - if (isReader != null) { - isReader.close(); + InputStreamReader isReader = null; + Xml10FilterReader filterReader = null; + XMLStreamReader reader = null; + try { + XMLInputFactory inputFactory = XMLInputFactory.newInstance(); + if (inputFactory.isPropertySupported("javax.xml.stream.isValidating")) { + inputFactory.setProperty("javax.xml.stream.isValidating", Boolean.FALSE); + } + inputFactory.setXMLReporter(new XMLReporter() { + @Override + public void report(String message, String errorType, Object relatedInformation, + Location location) throws XMLStreamException { + } + }); + isReader = new InputStreamReader(is, StandardCharsets.UTF_8); + filterReader = new Xml10FilterReader(isReader); + reader = inputFactory.createXMLStreamReader(filterReader); + + return GephiReader.readWorkspace(reader, project); + } finally { + if (reader != null) { + reader.close(); + } + if (filterReader != null) { + filterReader.close(); + } + if (isReader != null) { + isReader.close(); + } + } + } finally { + if (is != null) { + is.close(); + } } } + return null; } - private void readWorkspaceBytes(InputStream inputstream, Workspace workspace, String providerId) throws Exception { - WorkspaceBytesPersistenceProvider provider = PersistenceProviderUtils.getBytesPersistenceProviders().get(providerId); + private void readWorkspaceChildrenXML(WorkspaceXMLPersistenceProvider persistenceProvider, Workspace workspace, + ZipFile zipFile) throws Exception { + String identifier = persistenceProvider.getIdentifier(); + ZipEntry entry = zipFile.getEntry("Workspace_" + workspace.getId() + "_" + identifier + "_xml"); + if (entry != null) { + InputStream is = null; + try { + is = zipFile.getInputStream(entry); + + InputStreamReader isReader = null; + Xml10FilterReader filterReader = null; + XMLStreamReader reader = null; + try { + XMLInputFactory inputFactory = XMLInputFactory.newInstance(); + if (inputFactory.isPropertySupported("javax.xml.stream.isValidating")) { + inputFactory.setProperty("javax.xml.stream.isValidating", Boolean.FALSE); + } + inputFactory.setXMLReporter(new XMLReporter() { + @Override + public void report(String message, String errorType, Object relatedInformation, + Location location) throws XMLStreamException { + } + }); + isReader = new InputStreamReader(is, StandardCharsets.UTF_8); + filterReader = new Xml10FilterReader(isReader); + reader = inputFactory.createXMLStreamReader(filterReader); - if (provider != null) { + persistenceProvider.readXML(reader, workspace); + } finally { + if (reader != null) { + reader.close(); + } + if (filterReader != null) { + filterReader.close(); + } + if (isReader != null) { + isReader.close(); + } + } + } finally { + if (is != null) { + is.close(); + } + } + } + } + + private void readWorkspaceChildrenBytes(WorkspaceBytesPersistenceProvider persistenceProvider, Workspace workspace, + ZipFile zipFile) throws Exception { + String identifier = persistenceProvider.getIdentifier(); + ZipEntry entry = zipFile.getEntry("Workspace_" + workspace.getId() + "_" + identifier + "_bytes"); + if (entry != null) { + InputStream is = null; DataInputStream stream = null; try { - stream = new DataInputStream(inputstream); - provider.readBytes(stream, workspace); + is = new BufferedInputStream(zipFile.getInputStream(entry)); + stream = new DataInputStream(is); + persistenceProvider.readBytes(stream, workspace); } finally { if (stream != null) { stream.close(); } + if (is != null) { + is.close(); + } } } } @@ -264,9 +393,6 @@ private void readWorkspaceBytes(InputStream inputstream, Workspace workspace, St @Override public boolean cancel() { cancel = true; - if (gephiReader != null) { - gephiReader.cancel(); - } return true; } diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/io/PersistenceProviderUtils.java b/modules/ProjectAPI/src/main/java/org/gephi/project/io/PersistenceProviderUtils.java index 93dedc9be0..e122657298 100644 --- a/modules/ProjectAPI/src/main/java/org/gephi/project/io/PersistenceProviderUtils.java +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/io/PersistenceProviderUtils.java @@ -39,45 +39,33 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.project.io; +import java.util.Collection; import java.util.LinkedHashMap; import java.util.Map; -import org.gephi.project.spi.WorkspaceBytesPersistenceProvider; import org.gephi.project.spi.WorkspacePersistenceProvider; import org.openide.util.Lookup; -/** - * - * @author mbastian - */ public class PersistenceProviderUtils { - public static Map getXMLPersistenceProviders() { - Map providers = new LinkedHashMap(); - for (WorkspacePersistenceProvider w : Lookup.getDefault().lookupAll(WorkspacePersistenceProvider.class)) { - try { - String id = w.getIdentifier(); - if (id != null && !id.isEmpty()) { - providers.put(w.getIdentifier(), w); - } - } catch (Exception e) { - } - } - return providers; - } + public static Collection getPersistenceProviders() { + Map providers = new LinkedHashMap<>(); - public static Map getBytesPersistenceProviders() { - Map providers = new LinkedHashMap(); - for (WorkspaceBytesPersistenceProvider w : Lookup.getDefault().lookupAll(WorkspaceBytesPersistenceProvider.class)) { + for (WorkspacePersistenceProvider w : Lookup.getDefault().lookupAll(WorkspacePersistenceProvider.class)) { try { String id = w.getIdentifier(); if (id != null && !id.isEmpty()) { + if (providers.containsKey(w.getIdentifier())) { + throw new RuntimeException( + "Found a duplicate workspace persistence provider with the idenfier '" + id + "'"); + } providers.put(w.getIdentifier(), w); } } catch (Exception e) { } } - return providers; + return providers.values(); } } diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/io/SaveTask.java b/modules/ProjectAPI/src/main/java/org/gephi/project/io/SaveTask.java index efab9ee51d..d80e9e788c 100644 --- a/modules/ProjectAPI/src/main/java/org/gephi/project/io/SaveTask.java +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/io/SaveTask.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.project.io; import java.io.BufferedOutputStream; @@ -47,34 +48,37 @@ Development and Distribution License("CDDL") (collectively, the import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; -import java.util.Map; +import java.nio.file.Files; +import java.nio.file.StandardCopyOption; +import java.util.Collection; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; import javax.xml.stream.XMLOutputFactory; +import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamWriter; +import org.gephi.project.api.GephiFormatException; import org.gephi.project.api.Project; import org.gephi.project.api.Workspace; import org.gephi.project.impl.WorkspaceProviderImpl; import org.gephi.project.spi.WorkspaceBytesPersistenceProvider; +import org.gephi.project.spi.WorkspacePersistenceProvider; +import org.gephi.project.spi.WorkspaceXMLPersistenceProvider; import org.gephi.utils.longtask.spi.LongTask; import org.gephi.utils.progress.Progress; import org.gephi.utils.progress.ProgressTicket; -import org.openide.filesystems.FileLock; import org.openide.filesystems.FileObject; import org.openide.filesystems.FileUtil; import org.openide.util.NbBundle; import org.openide.util.NbPreferences; /** - * * @author Mathieu Bastian */ -public class SaveTask implements LongTask, Runnable { +public class SaveTask implements LongTask { private static final String ZIP_LEVEL_PREFERENCE = "ProjectIO_Save_ZipLevel_0_TO_9"; - private File file; - private Project project; - private GephiWriter gephiWriter; + private final File file; + private final Project project; private boolean cancel = false; private ProgressTicket progressTicket; @@ -83,15 +87,40 @@ public SaveTask(Project project, File file) { this.file = file; } - @Override - public void run() { + public static XMLStreamWriter newXMLWriter(OutputStream outputStream) throws XMLStreamException { + XMLOutputFactory outputFactory = XMLOutputFactory.newInstance(); + outputFactory.setProperty("javax.xml.stream.isRepairingNamespaces", Boolean.FALSE); + return outputFactory.createXMLStreamWriter(outputStream, "UTF-8"); + } + + private static String getFileExtension(File file) { + String name = file.getName(); + try { + return name.substring(name.lastIndexOf(".") + 1); + } catch (Exception e) { + return ""; + } + } + + private static String getFileNameWithoutExt(File file) { + String fileName = file.getName(); + int pos = fileName.lastIndexOf("."); + if (pos > 0) { + fileName = fileName.substring(0, pos); + } + return fileName; + } + + public boolean run() { Progress.start(progressTicket); Progress.setDisplayName(progressTicket, NbBundle.getMessage(SaveTask.class, "SaveTask.name")); - File writeFile = null; + File writeFile = file; try { - String tempFileName = file.getName() + "_temp" + System.currentTimeMillis(); - writeFile = new File(file.getParent(), tempFileName); + if (file.exists() && file.length() > 0) { + String tempFileName = file.getName() + "_temp" + System.currentTimeMillis(); + writeFile = new File(file.getParent(), tempFileName); + } FileOutputStream outputStream = null; ZipOutputStream zipOut = null; @@ -106,20 +135,39 @@ public void run() { bos = new BufferedOutputStream(zipOut); dos = new DataOutputStream(bos); - //Writer - gephiWriter = new GephiWriter(); + //Providers and workspace + Collection providers = PersistenceProviderUtils.getPersistenceProviders(); + Workspace[] workspaces = project.getLookup().lookup(WorkspaceProviderImpl.class).getWorkspaces(); + + //Setup progress + Progress.switchToDeterminate(progressTicket, 1 + (1 + providers.size()) * workspaces.length); //Write Project - writeProject(gephiWriter, bos, zipOut); + writeProject(dos, zipOut); + Progress.progress(progressTicket); //Write Workspace files - for (Workspace ws : project.getLookup().lookup(WorkspaceProviderImpl.class).getWorkspaces()) { - writeWorkspace(ws, gephiWriter, dos, zipOut); - writeWorkspaceBytes(ws, dos, zipOut); + for (Workspace ws : workspaces) { + writeWorkspace(ws, dos, zipOut); + Progress.progress(progressTicket); + + for (WorkspacePersistenceProvider provider : providers) { + if (provider instanceof WorkspaceXMLPersistenceProvider) { + writeWorkspaceChildrenXML(ws, (WorkspaceXMLPersistenceProvider) provider, dos, zipOut); + } else if (provider instanceof WorkspaceBytesPersistenceProvider) { + writeWorkspaceChildrenBytes(ws, (WorkspaceBytesPersistenceProvider) provider, dos, zipOut); + } + + Progress.progress(progressTicket); + if (cancel) { + break; + } + } if (cancel) { break; } } + Progress.switchToIndeterminate(progressTicket); zipOut.finish(); } finally { @@ -148,51 +196,40 @@ public void run() { } } } + Progress.finish(progressTicket); //Rename file - if (!cancel && writeFile.exists()) { - FileObject fileObject = FileUtil.toFileObject(file); - String name = fileObject.getName(); - String ext = fileObject.getExt(); - - //Delete original file - fileObject.delete(); - - //Rename - FileObject tempFileObject = FileUtil.toFileObject(writeFile); - FileLock lock = tempFileObject.lock(); - tempFileObject.rename(lock, name, ext); - lock.releaseLock(); + if (!cancel && writeFile.exists() && file != writeFile) { + Files.move(writeFile.toPath(), file.toPath(), StandardCopyOption.REPLACE_EXISTING); } - } catch (Exception ex) { if (ex instanceof GephiFormatException) { throw (GephiFormatException) ex; } throw new GephiFormatException(SaveTask.class, ex); } finally { - if (writeFile != null && writeFile.exists()) { + if (writeFile != null && writeFile.exists() && writeFile != file) { FileObject tempFileObject = FileUtil.toFileObject(writeFile); - try { - tempFileObject.delete(); - } catch (IOException ex) { + if (tempFileObject != null) { + try { + tempFileObject.delete(); + } catch (IOException ex) { + } } } } - Progress.finish(progressTicket); + return !cancel; } - private void writeProject(GephiWriter gephiWriter, OutputStream outputStream, ZipOutputStream zipOut) throws Exception { + private void writeProject(OutputStream outputStream, ZipOutputStream zipOut) throws Exception { XMLStreamWriter writer = null; + //Write Project file zipOut.putNextEntry(new ZipEntry("Project_xml")); try { - //Create Writer and write project - XMLOutputFactory outputFactory = XMLOutputFactory.newInstance(); - outputFactory.setProperty("javax.xml.stream.isRepairingNamespaces", Boolean.FALSE); - writer = outputFactory.createXMLStreamWriter(outputStream, "UTF-8"); - gephiWriter.writeProject(writer, project); + writer = newXMLWriter(outputStream); + GephiWriter.writeProject(writer, project); } finally { if (writer != null) { writer.close(); @@ -203,18 +240,38 @@ private void writeProject(GephiWriter gephiWriter, OutputStream outputStream, Zi zipOut.closeEntry(); } - private void writeWorkspace(Workspace workspace, GephiWriter gephiWriter, OutputStream outputStream, ZipOutputStream zipOut) throws Exception { + private void writeWorkspace(Workspace workspace, OutputStream outputStream, ZipOutputStream zipOut) + throws Exception { //Write Project file zipOut.putNextEntry(new ZipEntry("Workspace_" + workspace.getId() + "_xml")); XMLStreamWriter writer = null; try { //Create Writer and write project - XMLOutputFactory outputFactory = XMLOutputFactory.newInstance(); - outputFactory.setProperty("javax.xml.stream.isRepairingNamespaces", Boolean.FALSE); - writer = outputFactory.createXMLStreamWriter(outputStream, "UTF-8"); - gephiWriter.writeWorkspace(writer, workspace); + writer = newXMLWriter(outputStream); + GephiWriter.writeWorkspace(writer, workspace); + } finally { + if (writer != null) { + writer.close(); + } + } + //Close Project file + zipOut.closeEntry(); + } + + private void writeWorkspaceChildrenXML(Workspace workspace, WorkspaceXMLPersistenceProvider persistenceProvider, + OutputStream outputStream, ZipOutputStream zipOut) throws Exception { + String identifier = persistenceProvider.getIdentifier(); + + //Write Project file + zipOut.putNextEntry(new ZipEntry("Workspace_" + workspace.getId() + "_" + identifier + "_xml")); + + XMLStreamWriter writer = null; + try { + //Create Writer and write project + writer = newXMLWriter(outputStream); + GephiWriter.writeWorkspaceChildren(writer, workspace, persistenceProvider); } finally { if (writer != null) { writer.close(); @@ -225,26 +282,24 @@ private void writeWorkspace(Workspace workspace, GephiWriter gephiWriter, Output zipOut.closeEntry(); } - private void writeWorkspaceBytes(Workspace workspace, DataOutputStream outputStream, ZipOutputStream zipOut) throws Exception { - for (Map.Entry entry : PersistenceProviderUtils.getBytesPersistenceProviders().entrySet()) { - String name = entry.getKey(); - WorkspaceBytesPersistenceProvider provider = entry.getValue(); + private void writeWorkspaceChildrenBytes(Workspace workspace, WorkspaceBytesPersistenceProvider persistenceProvider, + DataOutputStream outputStream, ZipOutputStream zipOut) throws Exception { + String identifier = persistenceProvider.getIdentifier(); + + //Write Project file + zipOut.putNextEntry(new ZipEntry("Workspace_" + workspace.getId() + "_" + identifier + "_bytes")); - //Write Project file - zipOut.putNextEntry(new ZipEntry("Workspace_" + workspace.getId() + "_" + name + "_bytes")); + persistenceProvider.writeBytes(outputStream, workspace); - provider.writeBytes(outputStream, workspace); + outputStream.flush(); - //Close Project file - zipOut.closeEntry(); - } + //Close Project file + zipOut.closeEntry(); } @Override public boolean cancel() { - if (gephiWriter != null) { - gephiWriter.cancel(); - } + cancel = true; return true; } diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/io/XMLChar.java b/modules/ProjectAPI/src/main/java/org/gephi/project/io/XMLChar.java index a097583b7d..e2aa7d4089 100644 --- a/modules/ProjectAPI/src/main/java/org/gephi/project/io/XMLChar.java +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/io/XMLChar.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.project.io; import java.util.Arrays; @@ -51,14 +52,14 @@ public class XMLChar { // // Constants // - /** - * Character flags. - */ - private static final byte[] CHARS = new byte[1 << 16]; /** * Valid character mask. */ public static final int MASK_VALID = 0x01; + /** + * Character flags. + */ + private static final byte[] CHARS = new byte[1 << 16]; // // Static initialization @@ -702,7 +703,7 @@ public class XMLChar { */ public static boolean isValid(int c) { return (c < 0x10000 && (CHARS[c] & MASK_VALID) != 0) - || (0x10000 <= c && c <= 0x10FFFF); + || (0x10000 <= c && c <= 0x10FFFF); } // isValid(int):boolean } // class XMLChar diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/io/Xml10FilterReader.java b/modules/ProjectAPI/src/main/java/org/gephi/project/io/Xml10FilterReader.java index f7a73b265e..6014b0aeaf 100644 --- a/modules/ProjectAPI/src/main/java/org/gephi/project/io/Xml10FilterReader.java +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/io/Xml10FilterReader.java @@ -27,7 +27,8 @@ public Xml10FilterReader(Reader in) { /** * Every overload of {@link Reader#read()} method delegates to this one so - * it is enough to override only this one.
            + * it is enough to override only this one. + *

            * To skip invalid characters this method shifts only valid chars to left * and returns decreased value of the original read method. So after last * valid character there will be some unused chars in the buffer. diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/spi/Controller.java b/modules/ProjectAPI/src/main/java/org/gephi/project/spi/Controller.java new file mode 100644 index 0000000000..521c18d642 --- /dev/null +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/spi/Controller.java @@ -0,0 +1,62 @@ +package org.gephi.project.spi; + +import org.gephi.project.api.ProjectController; +import org.gephi.project.api.Workspace; +import org.openide.util.Lookup; + +/** + * Singleton controllers that want to store data in workspaces can implement this interface. + *

            + * When a new workspace is created, the project controller will be requesting from this singleton a new model via + * {@link #newModel(Workspace)} to be put in the workspace's lookup. + *

            + * Implementations should register themselves in the default lookup via the {@link org.openide.util.lookup.ServiceProvider} annotation. + * + * @param the model class this controller handles + * @see Model + */ +public interface Controller { + + /** + * Creates a new model instance for the given workspace. + *

            + * The model is not added to the workspace, it is the responsibility of the caller to do so. + * + * @param workspace the workspace to create the model for + * @return new instance of a model + */ + T newModel(Workspace workspace); + + /** + * Returns the model class this controller handles. + * + * @return the model class + */ + Class getModelClass(); + + /** + * Returns the model of the given workspace. If the model is not found, it returns null. + *

            + * This method is just a wrapper to workspace.getLookup().lookup(getModelClass()). + * + * @param workspace workspace to retrieve the model from + * @return the model of the given workspace or null if not found + */ + default T getModel(Workspace workspace) { + return workspace.getLookup().lookup(getModelClass()); + } + + /** + * Returns the model of the current workspace, or null if no workspace is selected. + * + * @return model associated with the current workspace if it exists, or null otherwise + */ + default T getModel() { + ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); + Workspace workspace = pc.getCurrentWorkspace(); + if (workspace != null) { + return getModel(workspace); + } + return null; + } +} diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/spi/Model.java b/modules/ProjectAPI/src/main/java/org/gephi/project/spi/Model.java new file mode 100644 index 0000000000..bc99ae3645 --- /dev/null +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/spi/Model.java @@ -0,0 +1,20 @@ +package org.gephi.project.spi; + +import org.gephi.project.api.Workspace; + +/** + * Model interface that can be used in combination with {@link Controller} to store data in workspaces. This model + * should work as a one-to-one relationship with the workspace so that a unique instance of this model is created for + * each workspace during its lifetime. + * + * @see Controller + */ +public interface Model { + + /** + * Returns the workspace this model is associated with. + * + * @return the workspace + */ + Workspace getWorkspace(); +} diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/spi/ProjectPropertiesUI.java b/modules/ProjectAPI/src/main/java/org/gephi/project/spi/ProjectPropertiesUI.java deleted file mode 100644 index 7c214e8051..0000000000 --- a/modules/ProjectAPI/src/main/java/org/gephi/project/spi/ProjectPropertiesUI.java +++ /dev/null @@ -1,59 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.project.spi; - -import javax.swing.JPanel; -import org.gephi.project.api.Project; - -/** - * Interface for setting project meta-data dialog. - * - * @author Mathieu Bastian - */ -public interface ProjectPropertiesUI { - - public JPanel getPanel(); - - public void setup(Project project); - - public void unsetup(Project project); -} diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/spi/WorkspaceBytesPersistenceProvider.java b/modules/ProjectAPI/src/main/java/org/gephi/project/spi/WorkspaceBytesPersistenceProvider.java index aef590348f..28a294ce45 100644 --- a/modules/ProjectAPI/src/main/java/org/gephi/project/spi/WorkspaceBytesPersistenceProvider.java +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/spi/WorkspaceBytesPersistenceProvider.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.project.spi; import java.io.DataInputStream; @@ -46,41 +47,23 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.project.api.Workspace; /** - * - * @author mbastian + * Binary Workspace persistence provider. */ -public interface WorkspaceBytesPersistenceProvider { - - /** - *

            This is automatically called when saving a project file.

            - *

            Your implementation must enclose all your data xml in a tag with the - * name provided in your - * getIdentifier method.

            - * - * @param writer XMLStreamWriter for xml serialization of this persistence - * provider data - * @param workspace Current workspace being serialized - */ - public void writeBytes(DataOutputStream stream, Workspace workspace); +public interface WorkspaceBytesPersistenceProvider extends WorkspacePersistenceProvider { /** - *

            This is automatically called when a start element with the tag name - * provided in your - * getIdentifier method.

            - *

            Your implementation must detect the tag end element to stop - * reading.

            + * This is automatically called when saving a project file. * - * @param reader XMLStreamReader for deserialization of this persistence - * provider data previously serialized - * @param workspace Current workspace being deserialized + * @param stream DataOutputStream stream to write to + * @param workspace current workspace being serialized */ - public void readBytes(DataInputStream stream, Workspace workspace); + void writeBytes(DataOutputStream stream, Workspace workspace); /** - * Unique XML tag identifier for your - * WorkspacePersistenceProvider + * This is automatically called when loading a project file. * - * @return Unique identifier describing your data + * @param stream DataInputStream stream to read from + * @param workspace current workspace being deserialized */ - public String getIdentifier(); + void readBytes(DataInputStream stream, Workspace workspace); } diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/spi/WorkspaceDuplicateProvider.java b/modules/ProjectAPI/src/main/java/org/gephi/project/spi/WorkspaceDuplicateProvider.java deleted file mode 100644 index f79c88fed4..0000000000 --- a/modules/ProjectAPI/src/main/java/org/gephi/project/spi/WorkspaceDuplicateProvider.java +++ /dev/null @@ -1,53 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.project.spi; - -import org.gephi.project.api.Workspace; - -/** - * - * @author Mathieu Bastian - */ -public interface WorkspaceDuplicateProvider { - - public void duplicate(Workspace source, Workspace destination); -} diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/spi/WorkspacePersistenceProvider.java b/modules/ProjectAPI/src/main/java/org/gephi/project/spi/WorkspacePersistenceProvider.java index 9172417770..7e27f63ca6 100644 --- a/modules/ProjectAPI/src/main/java/org/gephi/project/spi/WorkspacePersistenceProvider.java +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/spi/WorkspacePersistenceProvider.java @@ -38,62 +38,48 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.project.spi; -import javax.xml.stream.XMLStreamReader; -import javax.xml.stream.XMLStreamWriter; import org.gephi.project.api.Workspace; /** - * Interface modules implement to notify the system they can read/write part - * of the .gephi project file to serialize states and data. + * Interface modules implement to notify the system they can read/write part of + * the .gephi project file to serialize states and data. *

            How saving a project works

            - *
            1. The saving task is looking for all implementations of this interface and - * asks to return an XML element that represents data for each workspace.
            2. - *
            3. All of these elements are written in the .gephi project file.
            + *
            1. The saving task is looking for all implementations of this interface + * and ask each of them to write data either in XML or binary. Each + * implementation is identified by its identifier, which is provided through + * getIdentifier(). + *
            2. All of these elements are written in the .gephi project file. + *
            *

            How loading a project works

            - *
            1. The loading task is looking for all implementations of this interface and - * asks for the identifier returned by getIdentifier().
            2. - *
            3. When traversing the gephi project XML document it tries to match markups with - * identifiers. When match, call this provider readXML() method - * with the XML element.
            - * - *

            Thus this interface allows any module to serialize and deserialize its data - * to gephi project files.

            - * + *
            1. The loading task is looking for all implementations of this interface + * and asks for the identifier returned by getIdentifier(). + *
            2. When traversing the gephi project document it call the provider read + * method. + *
            *

            - * In order to have your WorkspacePersistenceProvider called, - * you must annotate it with @ServiceProvider(service = WorkspacePersistenceProvider.class, position = xy) - *

            + * Thus this interface allows any module to serialize and deserialize its data + * to gephi project files. *

            - * The position parameter is optional but often useful when when you need other WorkspacePersistenceProvider data deserialized before yours. - *

            - * + * In order to have your WorkspacePersistenceProvider called, you + * must annotate it with + *
            @ServiceProvider(service = WorkspacePersistenceProvider.class, position = xy)
            + * The position parameter is optional but often useful when when + * you need other WorkspacePersistenceProvider data deserialized + * before yours. + * * @author Mathieu Bastian * @see Workspace */ public interface WorkspacePersistenceProvider { /** - *

            This is automatically called when saving a project file.

            - *

            Your implementation must enclose all your data xml in a tag with the name provided in your getIdentifier method.

            - * @param writer XMLStreamWriter for xml serialization of this persistence provider data - * @param workspace Current workspace being serialized - */ - public void writeXML(XMLStreamWriter writer, Workspace workspace); - - /** - *

            This is automatically called when a start element with the tag name provided in your getIdentifier method.

            - *

            Your implementation must detect the tag end element to stop reading.

            - * @param reader XMLStreamReader for deserialization of this persistence provider data previously serialized - * @param workspace Current workspace being deserialized - */ - public void readXML(XMLStreamReader reader, Workspace workspace); - - /** - * Unique XML tag identifier for your WorkspacePersistenceProvider + * Unique identifier for your WorkspacePersistenceProvider. + * * @return Unique identifier describing your data */ - public String getIdentifier(); + String getIdentifier(); } diff --git a/modules/ProjectAPI/src/main/java/org/gephi/project/spi/WorkspaceXMLPersistenceProvider.java b/modules/ProjectAPI/src/main/java/org/gephi/project/spi/WorkspaceXMLPersistenceProvider.java new file mode 100644 index 0000000000..d85c315844 --- /dev/null +++ b/modules/ProjectAPI/src/main/java/org/gephi/project/spi/WorkspaceXMLPersistenceProvider.java @@ -0,0 +1,77 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.project.spi; + +import javax.xml.stream.XMLStreamReader; +import javax.xml.stream.XMLStreamWriter; +import org.gephi.project.api.Workspace; + +/** + * XML Workspace persistence provider. + */ +public interface WorkspaceXMLPersistenceProvider extends WorkspacePersistenceProvider { + + /** + * This is automatically called when saving a project file. + *

            + * Your implementation must enclose all your data xml in a tag with the name + * provided in your getIdentifier method. + * + * @param writer XMLStreamWriter for xml serialization of this persistence + * provider data + * @param workspace Current workspace being serialized + */ + void writeXML(XMLStreamWriter writer, Workspace workspace); + + /** + * This is automatically called when a start element with the tag name + * provided in your getIdentifier method. + *

            + * Your implementation must detect the tag end element to stop reading. + * + * @param reader XMLStreamReader for deserialization of this persistence + * provider data previously serialized + * @param workspace Current workspace being deserialized + */ + void readXML(XMLStreamReader reader, Workspace workspace); +} diff --git a/modules/ProjectAPI/src/main/java/org/gephi/workspace/impl/WorkspaceImpl.java b/modules/ProjectAPI/src/main/java/org/gephi/workspace/impl/WorkspaceImpl.java deleted file mode 100644 index 27a312df37..0000000000 --- a/modules/ProjectAPI/src/main/java/org/gephi/workspace/impl/WorkspaceImpl.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.workspace.impl; - -import org.gephi.project.api.Project; -import org.gephi.project.api.Workspace; -import org.gephi.project.impl.ProjectImpl; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; -import org.openide.util.lookup.AbstractLookup; -import org.openide.util.lookup.InstanceContent; - -/** - * - * @author Mathieu Bastian - */ -public class WorkspaceImpl implements Workspace { - - private final transient InstanceContent instanceContent; - private final transient Lookup lookup; - private final int id; - private final ProjectImpl project; - - public WorkspaceImpl(ProjectImpl project, int id) { - this(project, id, NbBundle.getMessage(WorkspaceImpl.class, "Workspace.default.prefix") + " " + id); - } - - public WorkspaceImpl(ProjectImpl project, int id, String name) { - this.instanceContent = new InstanceContent(); - this.lookup = new AbstractLookup(instanceContent); - this.id = id; - this.project = project; - - //Init Default Content - WorkspaceInformationImpl workspaceInformationImpl = new WorkspaceInformationImpl(name); - instanceContent.add(workspaceInformationImpl); - } - - @Override - public void add(Object instance) { - instanceContent.add(instance); - } - - @Override - public void remove(Object instance) { - instanceContent.remove(instance); - } - - @Override - public Lookup getLookup() { - return lookup; - } - - @Override - public Project getProject() { - return project; - } - - @Override - public int getId() { - return id; - } -} diff --git a/modules/ProjectAPI/src/main/java/org/gephi/workspace/impl/WorkspaceInformationImpl.java b/modules/ProjectAPI/src/main/java/org/gephi/workspace/impl/WorkspaceInformationImpl.java deleted file mode 100644 index e6d367ef78..0000000000 --- a/modules/ProjectAPI/src/main/java/org/gephi/workspace/impl/WorkspaceInformationImpl.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.workspace.impl; - -import java.util.ArrayList; -import java.util.List; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import org.gephi.project.api.WorkspaceInformation; - -/** - * - * @author Mathieu Bastian - */ -public class WorkspaceInformationImpl implements WorkspaceInformation { - - public enum Status { - - OPEN, CLOSED, INVALID - }; - private String name; - private Status status = Status.CLOSED; - private String source; - //Lookup - private final transient List listeners = new ArrayList(); - - public WorkspaceInformationImpl(String name) { - this.name = name; - } - - @Override - public String toString() { - return name; - } - - @Override - public String getName() { - return name; - } - - public Status getStatus() { - return status; - } - - public void setName(String name) { - this.name = name; - fireChangeEvent(); - } - - public void setSource(String source) { - this.source = source; - } - - @Override - public String getSource() { - return source; - } - - @Override - public boolean hasSource() { - return source != null; - } - - public void open() { - this.status = Status.OPEN; - fireChangeEvent(); - } - - public void close() { - this.status = Status.CLOSED; - fireChangeEvent(); - } - - public void invalid() { - this.status = Status.INVALID; - } - - @Override - public boolean isOpen() { - return status == Status.OPEN; - } - - @Override - public boolean isClosed() { - return status == Status.CLOSED; - } - - @Override - public boolean isInvalid() { - return status == Status.INVALID; - } - - @Override - public void addChangeListener(ChangeListener listener) { - listeners.add(listener); - } - - @Override - public void removeChangeListener(ChangeListener listener) { - listeners.remove(listener); - } - - public void fireChangeEvent() { - ChangeEvent event = new ChangeEvent(this); - for (ChangeListener listener : listeners) { - listener.stateChanged(event); - } - } -} diff --git a/modules/ProjectAPI/src/main/nbm/manifest.mf b/modules/ProjectAPI/src/main/nbm/manifest.mf index 0eea81ce4a..33a655f4e2 100644 --- a/modules/ProjectAPI/src/main/nbm/manifest.mf +++ b/modules/ProjectAPI/src/main/nbm/manifest.mf @@ -2,4 +2,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Layer: org/gephi/project/api/layer.xml OpenIDE-Module-Localizing-Bundle: org/gephi/project/api/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi Core +OpenIDE-Module-Name: Project API \ No newline at end of file diff --git a/modules/ProjectAPI/src/main/nbm/module.xml b/modules/ProjectAPI/src/main/nbm/module.xml deleted file mode 100644 index ced9d6588b..0000000000 --- a/modules/ProjectAPI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle.properties index 50248061f1..ae7f11cadf 100644 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle.properties +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle.properties @@ -1,5 +1,5 @@ -OpenIDE-Module-Display-Category=Gephi Core -OpenIDE-Module-Long-Description=\ - API for projects and workspaces manipulation -OpenIDE-Module-Name=Project API +OpenIDE-Module-Long-Description=API for projects and workspaces manipulation OpenIDE-Module-Short-Description=API for projects and workspaces manipulation +gephiLegacyFormatException = Since 0.9.3, Gephi only supports project files created from 0.9.x versions. Please open this project on version 0.9.2 and save it again so it's compatible. +gephiFormatException_import = Gephi failed importing the project.\n\nException: %s : %s\nFile: %s\nLine : %d +gephiFormatException_export = Gephi failed saving the project.\n\nException: %s : %s\nFile: %s\nLine : %d \ No newline at end of file diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_ar.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_ca.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_ca.properties new file mode 100644 index 0000000000..e1c9650b4b --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_ca.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API per la manipulaciσ de projectes i bancs de treball +OpenIDE-Module-Short-Description=API per la manipulaciσ de projectes i bancs de treball diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_cs.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_cs.properties index 9c8b9b243a..be395557ba 100644 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_cs.properties +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_cs.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-16 21\:49+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=API pro projekty a manipulaci s pracovn\u00edm prostorem - -OpenIDE-Module-Short-Description=API pro projekty a manipulaci s pracovn\u00edm prostorem +OpenIDE-Module-Long-Description=API pro projekty a manipulaci s pracovnνm prostorem +OpenIDE-Module-Short-Description=API pro projekty a manipulaci s pracovnνm prostorem diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_de.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_de.properties new file mode 100644 index 0000000000..ec92761cf4 --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_de.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API fόr Projekte und Workspace Handhabung +OpenIDE-Module-Short-Description=API fόr Projekte und Workspace Handhabung diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_es.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_es.properties index a673cb0c05..1a5a3ada5a 100644 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_es.properties +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_es.properties @@ -1,11 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:59+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=API para la manipulaci\u00f3n de proyectos y espacios de trabajo - -OpenIDE-Module-Short-Description=API para la manipulaci\u00f3n de proyectos y espacios de trabajo +OpenIDE-Module-Long-Description=API para la manipulaciοΏ½n de proyectos y espacios de trabajo +OpenIDE-Module-Short-Description=API para la manipulaciοΏ½n de proyectos y espacios de trabajo +gephiFormatException_import=Fallo al importar el proyecto.\n\nExcepciοΏ½n: %s : %s\nArchivo: %s\nLοΏ½nea: %d +gephiFormatException_export=Fallo al guardar el proyecto.\n\nExcepciοΏ½n: %s : %s\nArchivo: %s\nLοΏ½nea: %d +gephiLegacyFormatException=Desde 0.9.3, Gephi solo soporta ficheros de proyecto creados con versiones a partir de 0.9.x. Por favor abre este proyecto usando la versi\u00F3n 0.9.2 y gu\u00E1rdalo para que sea compatible. diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_fr.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_fr.properties index 24d6e781f2..e9860376bb 100644 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_fr.properties +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_fr.properties @@ -1,11 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:59+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - OpenIDE-Module-Long-Description=API de manipulation des projets et des espaces de travail - OpenIDE-Module-Short-Description=API de manipulation des projets et des espaces de travail +gephiFormatException_import=Echec de l'import du projet.\n\nException: %s : %s\nFichier: %s\nLigne : %d +gephiFormatException_export=Echec de l'export du projet.\n\nException: %s : %s\nFichier: %s\nLigne : %d +gephiLegacyFormatException=Depuis la version 0.9.3, Gephi ne supporte plus que les fichiers de projets g\u00E9n\u00E9r\u00E9s depuis les versions 0.9.x versions. Merci d'ouvrir ce projet sur la version 0.9.2 et de le sauvegarder \u00E0 nouveau pour qu'il devienne compatible. diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_he.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_he.properties new file mode 100644 index 0000000000..522b79ae0c --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_he.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API for projects and workspaces manipulation +OpenIDE-Module-Short-Description=API for projects and workspaces manipulation diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_hu.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_hu.properties new file mode 100644 index 0000000000..60baa3a2ac --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_hu.properties @@ -0,0 +1,7 @@ + + +OpenIDE-Module-Short-Description=API projektek \u00E9s munkater\u00FCletek kezel\u00E9s\u00E9hez +OpenIDE-Module-Long-Description=API projektek \u00E9s munkater\u00FCletek kezel\u00E9s\u00E9hez +gephiFormatException_import=Gephinek nem siker\u00FClt import\u00E1lnia a projektet.\n\nKiv\u00E9tel: %s : %s\nF\u00E1jl: %s\nsor: %d +gephiLegacyFormatException=A 0.9.3 \u00F3ta a Gephi csak a 0.9.x verzi\u00F3kb\u00F3l k\u00E9sz\u00EDtett projektf\u00E1jlokat t\u00E1mogatja. K\u00E9rj\u00FCk, nyissa meg ezt a projektet a 0.9.2-es verzi\u00F3n, \u00E9s mentse \u00FAjra, hogy kompatibilis legyen. +gephiFormatException_export=Gephinek nem siker\u00FClt megmentenie a projektet.\n\nKiv\u00E9tel: %s : %s\nF\u00E1jl: %s\nsor: %d diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_it.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_it.properties new file mode 100644 index 0000000000..a74736f3a5 --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_it.properties @@ -0,0 +1,5 @@ +OpenIDE-Module-Long-Description=API for projects and workspaces manipulation +OpenIDE-Module-Short-Description=API for projects and workspaces manipulation +gephiLegacyFormatException=Dalla versione 0.9.3, Gephi supporta solo files creati con una versione 0.9.2 o superiore. Apri questo file nelle versione 0.9.2 e salvalo per renderlo compatibile. +gephiFormatException_import=Gephi non θ riuscito ad importare il progetto.\n\nErrore %s: %s\nFile: %s\nRiga: %d +gephiFormatException_export=Gephi non θ riuscito a salvare il progetto.\n\nErrore %s: %s\nFile: %s\nRiga: %d diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_ja.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_ja.properties index f8a1ba7c36..80e9494410 100644 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_ja.properties +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_ja.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-19 05\:42+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3092\u64cd\u4f5c\u3059\u308b\u305f\u3081\u306eAPI - -OpenIDE-Module-Short-Description=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3092\u64cd\u4f5c\u3059\u308b\u305f\u3081\u306eAPI +OpenIDE-Module-Long-Description=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3092\u64cd\u4f5c\u3059\u308b\u305f\u3081\u306eAPI +OpenIDE-Module-Short-Description=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3068\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3092\u64cd\u4f5c\u3059\u308b\u305f\u3081\u306eAPI diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_ko.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_ko.properties new file mode 100644 index 0000000000..e4345d77c3 --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_ko.properties @@ -0,0 +1,7 @@ + + +OpenIDE-Module-Short-Description=\uD504\uB85C\uC81D\uD2B8 \uBC0F \uC791\uC5C5 \uACF5\uAC04 \uC870\uC791\uC744 \uC704\uD55C API +OpenIDE-Module-Long-Description=\uD504\uB85C\uC81D\uD2B8 \uBC0F \uC791\uC5C5 \uACF5\uAC04 \uC870\uC791\uC744 \uC704\uD55C API +gephiFormatException_import=Gephi\uAC00 \uD504\uB85C\uC81D\uD2B8 \uBD88\uB7EC\uC624\uAE30\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4.\n\nException: %s : %s\nFile: %s\nLine : %d +gephiLegacyFormatException=0.9.3\uBD80\uD130 Gephi\uB294 0.9.x \uBC84\uC804\uC5D0\uC11C \uC0DD\uC131\uB41C \uD504\uB85C\uC81D\uD2B8 \uD30C\uC77C\uB9CC \uC9C0\uC6D0\uD569\uB2C8\uB2E4. \uC774 \uD504\uB85C\uC81D\uD2B8\uB97C \uBC84\uC804 0.9.2\uC5D0\uC11C \uC5F4\uACE0 \uB2E4\uC2DC \uC800\uC7A5\uD558\uC5EC \uD638\uD658\uB418\uB3C4\uB85D \uD558\uC138\uC694. +gephiFormatException_export=Gephi\uAC00 \uD504\uB85C\uC81D\uD2B8 \uC800\uC7A5\uC5D0 \uC2E4\uD328\uD588\uC2B5\uB2C8\uB2E4.\n\nException: %s : %s\nFile: %s\nLine : %d diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_nl.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_nl.properties new file mode 100644 index 0000000000..522b79ae0c --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_nl.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API for projects and workspaces manipulation +OpenIDE-Module-Short-Description=API for projects and workspaces manipulation diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_pt_BR.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_pt_BR.properties index 0ed3821e65..001b095e5a 100644 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_pt_BR.properties +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_pt_BR.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 16\:18+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API para manipula\u00e7\u00e3o de projetos e \u00c1reas de Trabalho - -OpenIDE-Module-Short-Description=API para manipula\u00e7\u00e3o de projetos e \u00c1reas de Trabalho +OpenIDE-Module-Long-Description=API para manipulaηγo de projetos e Αreas de Trabalho +OpenIDE-Module-Short-Description=API para manipulaηγo de projetos e Αreas de Trabalho diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_ro.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_ro.properties new file mode 100644 index 0000000000..1b2ca0e969 --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_ro.properties @@ -0,0 +1,7 @@ + + +OpenIDE-Module-Short-Description=API pentru manipularea proiectelor \u0219i spa\u021Biilor de lucru +gephiLegacyFormatException=\u00CEncep\u00E2nd cu versiunea 0.9.3, Gephi suport\u0103 numai fi\u0219ierele de proiect create de versiunile 0.9.x. Deschide acest proiect pe versiunea 0.9.2 \u0219i salveaz\u0103-l din nou pentru a fi compatibil. +gephiFormatException_import=Gephi nu a reu\u0219it s\u0103 importe proiectul.\n\nExcep\u021Bie: %s : %s\nFi\u0219ier: %s\nLinia : %d +gephiFormatException_export=Gephi nu a reu\u0219it s\u0103 salveze proiectul.\n\nExcep\u021Bie: %s : %s\nFi\u0219ier: %s\nLinia : %d +OpenIDE-Module-Long-Description=API pentru manipularea proiectelor \u0219i spa\u021Biilor de lucru diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_ru.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_ru.properties index 0ee49c5e86..268f606293 100644 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_ru.properties +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_ru.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-05 07\:03+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=API \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438 \u0438 \u0440\u0430\u0431\u043e\u0447\u0438\u043c\u0438 \u043e\u0431\u043b\u0430\u0441\u0442\u044f\u043c\u0438 - -OpenIDE-Module-Short-Description=API \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438 \u0438 \u0440\u0430\u0431\u043e\u0447\u0438\u043c\u0438 \u043e\u0431\u043b\u0430\u0441\u0442\u044f\u043c\u0438 +OpenIDE-Module-Long-Description=API \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438 \u0438 \u0440\u0430\u0431\u043e\u0447\u0438\u043c\u0438 \u043e\u0431\u043b\u0430\u0441\u0442\u044f\u043c\u0438 +OpenIDE-Module-Short-Description=API \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438 \u0438 \u0440\u0430\u0431\u043e\u0447\u0438\u043c\u0438 \u043e\u0431\u043b\u0430\u0441\u0442\u044f\u043c\u0438 diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_th.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_tr.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_tr.properties new file mode 100644 index 0000000000..522b79ae0c --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_tr.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API for projects and workspaces manipulation +OpenIDE-Module-Short-Description=API for projects and workspaces manipulation diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_uk.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_uk.properties new file mode 100644 index 0000000000..aa50ad0a99 --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_uk.properties @@ -0,0 +1,5 @@ +gephiFormatException_import=Gephi \u043D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u0456\u043C\u043F\u043E\u0440\u0442\u0443\u0432\u0430\u0442\u0438 \u043F\u0440\u043E\u0435\u043A\u0442.\n\n\u0412\u0438\u043D\u044F\u0442\u043E\u043A: %s : %s\n\u0424\u0430\u0439\u043B: %s\n\u0420\u044F\u0434\u043E\u043A: %d +OpenIDE-Module-Short-Description=API \u0434\u043B\u044F \u0440\u043E\u0431\u043E\u0442\u0438 \u0437 \u043F\u0440\u043E\u0435\u043A\u0442\u0430\u043C\u0438 \u0442\u0430 \u0440\u043E\u0431\u043E\u0447\u0438\u043C\u0438 \u043F\u0440\u043E\u0441\u0442\u043E\u0440\u0430\u043C\u0438 +gephiFormatException_export=Gephi \u043D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u0437\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u043F\u0440\u043E\u0435\u043A\u0442.\n\n\u0412\u0438\u043D\u044F\u0442\u043E\u043A: %s : %s\n\u0424\u0430\u0439\u043B: %s\n\u0420\u044F\u0434\u043E\u043A: %d +OpenIDE-Module-Long-Description=API \u0434\u043B\u044F \u0440\u043E\u0431\u043E\u0442\u0438 \u0437 \u043F\u0440\u043E\u0435\u043A\u0442\u0430\u043C\u0438 \u0442\u0430 \u0440\u043E\u0431\u043E\u0447\u0438\u043C\u0438 \u043F\u0440\u043E\u0441\u0442\u043E\u0440\u0430\u043C\u0438 +gephiLegacyFormatException=\u041F\u043E\u0447\u0438\u043D\u0430\u044E\u0447\u0438 \u0437 0.9.3, Gephi \u043F\u0456\u0434\u0442\u0440\u0438\u043C\u0443\u0454 \u043B\u0438\u0448\u0435 \u0444\u0430\u0439\u043B\u0438 \u043F\u0440\u043E\u0435\u043A\u0442\u0456\u0432, \u0441\u0442\u0432\u043E\u0440\u0435\u043D\u0456 \u0437 \u0432\u0435\u0440\u0441\u0456\u0439 0.9.x. \u0411\u0443\u0434\u044C \u043B\u0430\u0441\u043A\u0430, \u0432\u0456\u0434\u043A\u0440\u0438\u0439\u0442\u0435 \u0446\u0435\u0439 \u043F\u0440\u043E\u0435\u043A\u0442 \u0443 \u0432\u0435\u0440\u0441\u0456\u0457 0.9.2 \u0456 \u0437\u0431\u0435\u0440\u0435\u0436\u0456\u0442\u044C \u0439\u043E\u0433\u043E \u0437\u043D\u043E\u0432\u0443, \u0449\u043E\u0431 \u0432\u0456\u043D \u0431\u0443\u0432 \u0441\u0443\u043C\u0456\u0441\u043D\u0438\u0439. diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_zh_CN.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_zh_CN.properties index 6c96b0f50f..0d26f923cc 100644 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_zh_CN.properties +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_zh_CN.properties @@ -1,10 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:08+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - OpenIDE-Module-Long-Description=\u9879\u76ee\u548c\u5de5\u4f5c\u533a\u64cd\u63a7\u7684\u5e94\u7528\u7a0b\u5e8f\u63a5\u53e3API - OpenIDE-Module-Short-Description=\u9879\u76ee\u548c\u5de5\u4f5c\u533a\u64cd\u63a7\u7684\u5e94\u7528\u7a0b\u5e8f\u63a5\u53e3API +gephiLegacyFormatException=\u4ECE 0.9.3 \u5F00\u59CB\uFF0CGephi \u4EC5\u652F\u6301\u4ECE 0.9.x \u7248\u672C\u521B\u5EFA\u7684\u9879\u76EE\u6587\u4EF6\u3002 \u8BF7\u5728 0.9.2 \u7248\u672C\u4E0A\u6253\u5F00\u6B64\u9879\u76EE\u5E76\u518D\u6B21\u4FDD\u5B58\u4EE5\u4F7F\u5176\u517C\u5BB9\u3002 +gephiFormatException_import=\u683C\u6590\u5BFC\u5165\u5DE5\u7A0B\u5931\u8D25\u3002\n\n\u5F02\u5E38\u4FE1\u606F\uFF1A%s:%s\n\u6587\u4EF6:%s\n\u884C\u53F7:%d +gephiFormatException_export=Gephi\u4FDD\u5B58\u5DE5\u7A0B\u5931\u8D25\u3002\n\n\u5F02\u5E38\u4FE1\u606F\uFF1A%s : %s\n\u6587\u4EF6\uFF1A%s\n\u884C\u53F7\uFF1A%d diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_zh_TW.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_zh_TW.properties new file mode 100644 index 0000000000..522b79ae0c --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/Bundle_zh_TW.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API for projects and workspaces manipulation +OpenIDE-Module-Short-Description=API for projects and workspaces manipulation diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/cs.po b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/cs.po deleted file mode 100644 index 33b18f2d5e..0000000000 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/cs.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-16 21:49+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API pro projekty a manipulaci s pracovnΓ­m prostorem" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API pro projekty a manipulaci s pracovnΓ­m prostorem" diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/es.po b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/es.po deleted file mode 100644 index 9e456d26d6..0000000000 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/es.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:59+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API para la manipulaciΓ³n de proyectos y espacios de trabajo" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API para la manipulaciΓ³n de proyectos y espacios de trabajo" diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/fr.po b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/fr.po deleted file mode 100644 index 3fc5df9601..0000000000 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/fr.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:59+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API de manipulation des projets et des espaces de travail" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API de manipulation des projets et des espaces de travail" diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/ja.po b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/ja.po deleted file mode 100644 index 054050bb41..0000000000 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-19 05:42+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "γƒ—γƒ­γ‚Έγ‚§γ‚―γƒˆγ¨γƒ―γƒΌγ‚―γ‚ΉγƒšγƒΌγ‚Ήγ‚’ζ“δ½œγ™γ‚‹γŸγ‚γAPI" - -msgid "OpenIDE-Module-Short-Description" -msgstr "γƒ—γƒ­γ‚Έγ‚§γ‚―γƒˆγ¨γƒ―γƒΌγ‚―γ‚ΉγƒšγƒΌγ‚Ήγ‚’ζ“δ½œγ™γ‚‹γŸγ‚γAPI" diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/org-gephi-project-api.pot b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/org-gephi-project-api.pot deleted file mode 100644 index 983eb1b96f..0000000000 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/org-gephi-project-api.pot +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API for projects and workspaces manipulation" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API for projects and workspaces manipulation" diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/package.html b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/package.html index cfbab79e6a..4630916e1f 100644 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/package.html +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/package.html @@ -1,16 +1,25 @@ - - - - API for project and workspace management. -

            - From ProjectController, project and workspaces can - be managed. -

            -

            - Workspaces, where modules are interacting can be accessed from - the current project and by listening through WorkspaceListener. - Workspaces are suitable for hosting any type of data modules wants - to. -

            - + + + + org.gephi.project.api + + +

            + API for project and workspace management. +

            +

            + From ProjectController, projects and workspaces can + be managed. A project is a collection of workspaces, of which one and only one can be active at a time. By + default, a new project has one workspace. +

            +

            + Only one project can be open at the time. The ProjectController can manage a list of projects + but it's assumed that a project has an existing project file so that it can be opened. +

            +

            + Workspaces, where modules are interacting can be accessed from + the current project and by listening through WorkspaceListener. + Workspaces are suitable for hosting any type of data modules wants to. +

            + \ No newline at end of file diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/pt_BR.po b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/pt_BR.po deleted file mode 100644 index 108e4fee10..0000000000 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/pt_BR.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 16:18+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API para manipulaΓ§Γ£o de projetos e Áreas de Trabalho" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API para manipulaΓ§Γ£o de projetos e Áreas de Trabalho" diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/ru.po b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/ru.po deleted file mode 100644 index c5b296a0c3..0000000000 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/ru.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-05 07:03+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌΠΈ областями" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API для Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°ΠΌΠΈ ΠΈ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌΠΈ областями" diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/zh_CN.po b/modules/ProjectAPI/src/main/resources/org/gephi/project/api/zh_CN.po deleted file mode 100644 index 021a7d1277..0000000000 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/api/zh_CN.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:08+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ι‘Ήη›ε’Œε·₯δ½œεŒΊζ“ζŽ§ηš„εΊ”η”¨η¨‹εΊζŽ₯口API" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ι‘Ήη›ε’Œε·₯δ½œεŒΊζ“ζŽ§ηš„εΊ”η”¨η¨‹εΊζŽ₯口API" diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle.properties index c51c98c455..b4f415ef10 100644 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle.properties +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle.properties @@ -1,6 +1,5 @@ -OpenIDE-Module-Name=Project Impl Services/MIMEResolver/GephiResolver.xml=Gephi Files Templates/Other/GephiTemplate.gephi=Empty Gephi file - - -Project.default.prefix=Project \ No newline at end of file +Project.default.prefix=Untitled +Workspace.default.prefix=Workspace +Workspace.duplicated.name=Copy of {0} \ No newline at end of file diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_ar.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_ca.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_ca.properties new file mode 100644 index 0000000000..cdef1386f8 --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_ca.properties @@ -0,0 +1,4 @@ +Services/MIMEResolver/GephiResolver.xml=Fitxers de Gephi +Templates/Other/GephiTemplate.gephi=Fitxer de Gephi buit +Project.default.prefix=Projecte +Workspace.default.prefix=Banc de treball \ No newline at end of file diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_cs.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_cs.properties index 1f90e5c272..b400b10b7c 100644 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_cs.properties +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_cs.properties @@ -1,11 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-16 21\:48+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -Services/MIMEResolver/GephiResolver.xml=Soubory Gephi - -Templates/Other/GephiTemplate.gephi=Pr\u00e1zdn\u00fd soubor Gephi +Services/MIMEResolver/GephiResolver.xml=Soubory Gephi +Templates/Other/GephiTemplate.gephi=Prαzdnύ soubor Gephi +Project.default.prefix=Projekt +Workspace.default.prefix=Pracovnν prostor diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_de.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_de.properties new file mode 100644 index 0000000000..e1fd6e3291 --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_de.properties @@ -0,0 +1,4 @@ +Services/MIMEResolver/GephiResolver.xml=Gephi Dateien +Templates/Other/GephiTemplate.gephi=Leere Gephi Datei +Project.default.prefix=Projekt +Workspace.default.prefix=Arbeitsbereich diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_es.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_es.properties index 31735ee0f0..244d4f4fd2 100644 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_es.properties +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_es.properties @@ -1,11 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:59+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - Services/MIMEResolver/GephiResolver.xml=Archivos Gephi - -Templates/Other/GephiTemplate.gephi=Fichero Gephi vac\u00edo +Templates/Other/GephiTemplate.gephi=Archivo Gephi vac\u00EDo +Project.default.prefix=Sin t\u00EDtulo +Workspace.default.prefix=Espacio de trabajo +Workspace.duplicated.name=Copiar de {0} diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_fr.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_fr.properties index e367690728..e91c5b065a 100644 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_fr.properties +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_fr.properties @@ -1,11 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:59+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - Services/MIMEResolver/GephiResolver.xml=Fichiers Gephi - Templates/Other/GephiTemplate.gephi=Fichier Gephi vide +Project.default.prefix=Projet +Workspace.default.prefix=Espace de travail +Workspace.duplicated.name=Copy de {0} diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_he.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_he.properties new file mode 100644 index 0000000000..21511d4d54 --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_he.properties @@ -0,0 +1,4 @@ +Services/MIMEResolver/GephiResolver.xml=Gephi Files +Templates/Other/GephiTemplate.gephi=Empty Gephi file +Project.default.prefix=Project +Workspace.default.prefix=\u05e1\u05d1\u05d9\u05d1\u05ea \u05e2\u05d1\u05d5\u05d3\u05d4 diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_hu.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_hu.properties new file mode 100644 index 0000000000..837e13c59f --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_hu.properties @@ -0,0 +1,7 @@ + + +Templates/Other/GephiTemplate.gephi=\u00DCres Gephi f\u00E1jl +Project.default.prefix=N\u00E9vtelen +Workspace.default.prefix=Munkater\u00FClet +Workspace.duplicated.name={0} m\u00E1solata +Services/MIMEResolver/GephiResolver.xml=Gephi f\u00E1jlok diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_it.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_it.properties new file mode 100644 index 0000000000..75ca33383d --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_it.properties @@ -0,0 +1,5 @@ +Services/MIMEResolver/GephiResolver.xml=Gephi Files +Templates/Other/GephiTemplate.gephi=Empty Gephi file +Project.default.prefix=Project +Workspace.default.prefix=Workspace +Workspace.duplicated.name=Copia di {0} diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_ja.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_ja.properties index 59c13654ca..3c3d71123b 100644 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_ja.properties +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_ja.properties @@ -1,11 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-19 05\:41+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -Services/MIMEResolver/GephiResolver.xml=Gephi\u30d5\u30a1\u30a4\u30eb - -Templates/Other/GephiTemplate.gephi=\u7a7a\u306eGephi\u30d5\u30a1\u30a4\u30eb +Services/MIMEResolver/GephiResolver.xml=Gephi\u30d5\u30a1\u30a4\u30eb +Templates/Other/GephiTemplate.gephi=\u7a7a\u306eGephi\u30d5\u30a1\u30a4\u30eb +# Project.default.prefix=Project +Workspace.default.prefix=\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9 diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_ko.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_ko.properties new file mode 100644 index 0000000000..f9352f4774 --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_ko.properties @@ -0,0 +1,7 @@ + + +Templates/Other/GephiTemplate.gephi=\uBE48 Gephi \uD30C\uC77C +Workspace.default.prefix=\uC791\uC5C5 \uACF5\uAC04 +Workspace.duplicated.name={0}\uC758 \uBCF5\uC0AC\uBCF8 +Services/MIMEResolver/GephiResolver.xml=Gephi \uD30C\uC77C\uB4E4 +Project.default.prefix=\uC81C\uBAA9 \uC5C6\uC74C diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_nl.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_nl.properties new file mode 100644 index 0000000000..366ab5e47e --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_nl.properties @@ -0,0 +1,4 @@ +Services/MIMEResolver/GephiResolver.xml=Gephi-bestanden +Templates/Other/GephiTemplate.gephi=Empty Gephi file +Project.default.prefix=Project +Workspace.default.prefix=Werkruimte diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_pt_BR.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_pt_BR.properties index bb0d7a85bf..f85d02513a 100644 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_pt_BR.properties +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_pt_BR.properties @@ -1,11 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 16\:16+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -Services/MIMEResolver/GephiResolver.xml=Arquivos Gephi - -Templates/Other/GephiTemplate.gephi=Arquivo Gephi vazio +Services/MIMEResolver/GephiResolver.xml=Arquivos Gephi +Templates/Other/GephiTemplate.gephi=Arquivo Gephi vazio +Project.default.prefix=Projeto +Workspace.default.prefix=Αrea de Trabalho diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_ro.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_ro.properties new file mode 100644 index 0000000000..93f2c58784 --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_ro.properties @@ -0,0 +1,4 @@ +Services/MIMEResolver/GephiResolver.xml=Fi\u0219iere Gephi +Templates/Other/GephiTemplate.gephi=Fi\u0219ier Gephi gol +Project.default.prefix=Proiect +Workspace.default.prefix=Spa\u021Biu de lucru \ No newline at end of file diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_ru.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_ru.properties index bcc6d110f7..425c30cc52 100644 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_ru.properties +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_ru.properties @@ -1,11 +1,6 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-05 06\:59+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - Services/MIMEResolver/GephiResolver.xml=\u0424\u0430\u0439\u043b\u044b Gephi - Templates/Other/GephiTemplate.gephi=\u041f\u0443\u0441\u0442\u043e\u0439 \u0444\u0430\u0439\u043b Gephi +# Project.default.prefix=Project + +Project.default.prefix=\u041F\u0440\u043E\u0435\u043A\u0442 +Workspace.default.prefix=\u0420\u0430\u0431\u043e\u0447\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_th.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_tr.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_tr.properties new file mode 100644 index 0000000000..f00a82e4ac --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_tr.properties @@ -0,0 +1,4 @@ +Services/MIMEResolver/GephiResolver.xml=Gephi Files +Templates/Other/GephiTemplate.gephi=Empty Gephi file +Project.default.prefix=Project +Workspace.default.prefix=Ηal\u0131\u015fma alan\u0131 diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_uk.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_uk.properties new file mode 100644 index 0000000000..ca7b9247ff --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_uk.properties @@ -0,0 +1,5 @@ +Services/MIMEResolver/GephiResolver.xml=\u0424\u0430\u0439\u043B\u0438 Gephi +Workspace.duplicated.name=\u041A\u043E\u043F\u0456\u044F {0} +Workspace.default.prefix=\u0420\u043E\u0431\u043E\u0447\u0430 \u043E\u0431\u043B\u0430\u0441\u0442\u044C +Project.default.prefix=\u0411\u0435\u0437 \u043D\u0430\u0437\u0432\u0438 +Templates/Other/GephiTemplate.gephi=\u041F\u043E\u0440\u043E\u0436\u043D\u0456\u0439 \u0444\u0430\u0439\u043B Gephi diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_zh_CN.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_zh_CN.properties index 0d83b7e886..f31d8b6f3b 100644 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_zh_CN.properties +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_zh_CN.properties @@ -1,10 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:08+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - Services/MIMEResolver/GephiResolver.xml=Gephi\u6587\u4ef6 - Templates/Other/GephiTemplate.gephi=\u7a7aGephi\u6587\u4ef6 +Project.default.prefix=\u65E0\u6807\u9898 +Workspace.default.prefix=\u5de5\u4f5c\u533a diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_zh_TW.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_zh_TW.properties new file mode 100644 index 0000000000..2b397e628c --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/Bundle_zh_TW.properties @@ -0,0 +1,4 @@ +Services/MIMEResolver/GephiResolver.xml=Gephi \u6a94\u6848 +Templates/Other/GephiTemplate.gephi=Empty Gephi file +Project.default.prefix=Project +Workspace.default.prefix=\u5de5\u4f5c\u5340 diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/cs.po b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/cs.po deleted file mode 100644 index 101a4d90a9..0000000000 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/cs.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-16 21:48+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "Services/MIMEResolver/GephiResolver.xml" -msgstr "Soubory Gephi" - -msgid "Templates/Other/GephiTemplate.gephi" -msgstr "PrΓ‘zdnΓ½ soubor Gephi" diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/es.po b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/es.po deleted file mode 100644 index 422f6f7e38..0000000000 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/es.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:59+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "Services/MIMEResolver/GephiResolver.xml" -msgstr "Archivos Gephi" - -msgid "Templates/Other/GephiTemplate.gephi" -msgstr "Fichero Gephi vacΓ­o" diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/fr.po b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/fr.po deleted file mode 100644 index 5d8e12dc24..0000000000 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/fr.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:59+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "Services/MIMEResolver/GephiResolver.xml" -msgstr "Fichiers Gephi" - -msgid "Templates/Other/GephiTemplate.gephi" -msgstr "Fichier Gephi vide" diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/ja.po b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/ja.po deleted file mode 100644 index a57f846e75..0000000000 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-19 05:41+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "Services/MIMEResolver/GephiResolver.xml" -msgstr "Gephiフゑむル" - -msgid "Templates/Other/GephiTemplate.gephi" -msgstr "η©ΊγGephiフゑむル" diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/org-gephi-project-impl.pot b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/org-gephi-project-impl.pot deleted file mode 100644 index d1cff33946..0000000000 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/org-gephi-project-impl.pot +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "Services/MIMEResolver/GephiResolver.xml" -msgstr "Gephi Files" - -msgid "Templates/Other/GephiTemplate.gephi" -msgstr "Empty Gephi file" diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/pt_BR.po b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/pt_BR.po deleted file mode 100644 index f9ae488e66..0000000000 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/pt_BR.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 16:16+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "Services/MIMEResolver/GephiResolver.xml" -msgstr "Arquivos Gephi" - -msgid "Templates/Other/GephiTemplate.gephi" -msgstr "Arquivo Gephi vazio" diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/ru.po b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/ru.po deleted file mode 100644 index 0a1014beaa..0000000000 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/ru.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-05 06:59+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "Services/MIMEResolver/GephiResolver.xml" -msgstr "Π€Π°ΠΉΠ»Ρ‹ Gephi" - -msgid "Templates/Other/GephiTemplate.gephi" -msgstr "ΠŸΡƒΡΡ‚ΠΎΠΉ Ρ„Π°ΠΉΠ» Gephi" diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/zh_CN.po b/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/zh_CN.po deleted file mode 100644 index db89e56c0c..0000000000 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/impl/zh_CN.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:08+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "Services/MIMEResolver/GephiResolver.xml" -msgstr "Gephiζ–‡δ»Ά" - -msgid "Templates/Other/GephiTemplate.gephi" -msgstr "η©ΊGephiζ–‡δ»Ά" diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle.properties index b98f60dbf7..1e8ce10140 100644 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle.properties +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle.properties @@ -1,8 +1,7 @@ -gephiFormatException_import = Gephi failed importing the project.\n\nException: %s : %s\nFile: %s\nLine : %d -gephiFormatException_export = Gephi failed saving the project.\n\nException: %s : %s\nFile: %s\nLine : %d LBL_Gephi_loader_name=Gephi Files Services/MIMEResolver/GephiResolver.xml=Gephi Files Templates/Other/GephiTemplate.gephi=Empty Gephi file LoadTask.name=Opening project SaveTask.name=Saving project +DuplicateTask.name=Duplicating workspace \ No newline at end of file diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_ar.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_ca.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_ca.properties new file mode 100644 index 0000000000..4e5172c262 --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_ca.properties @@ -0,0 +1,6 @@ +LBL_Gephi_loader_name=Fitxers de Gephi +Services/MIMEResolver/GephiResolver.xml=Fitxers de Gephi +Templates/Other/GephiTemplate.gephi=Fitxer de Gephi buit + +LoadTask.name=Obrint el projecte +SaveTask.name=Desant el projecte diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_cs.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_cs.properties index 366a88a95c..6f9511c1f9 100644 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_cs.properties +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_cs.properties @@ -1,21 +1,6 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-16 21\:47+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -gephiFormatException_import=Gephi selhal p\u0159i importu projektu.\n\nV\u00fdjimka\: %s \: %s\nSoubor\: %s\n\u0158\u00e1dek \: %d - -gephiFormatException_export=Gephi selhal p\u0159i ulo\u017een\u00ed projektu.\n\nV\u00fdjimka\: %s \: %s\nSoubor\: %s\n\u0158\u00e1dek \: %d - -LBL_Gephi_loader_name=Soubory Gephi - -Services/MIMEResolver/GephiResolver.xml=Soubory Gephi - -Templates/Other/GephiTemplate.gephi=Pr\u00e1zdn\u00fd soubor Gephi - -LoadTask.name=Otev\u00edr\u00e1n\u00ed projektu - -SaveTask.name=Ukl\u00e1d\u00e1n\u00ed projektu +LBL_Gephi_loader_name=Soubory Gephi +Services/MIMEResolver/GephiResolver.xml=Soubory Gephi +Templates/Other/GephiTemplate.gephi=PrοΏ½zdnοΏ½ soubor Gephi + +LoadTask.name=OtevοΏ½rοΏ½nοΏ½ projektu +SaveTask.name=UklοΏ½dοΏ½nοΏ½ projektu diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_de.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_de.properties new file mode 100644 index 0000000000..93aee2676b --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_de.properties @@ -0,0 +1,6 @@ +LBL_Gephi_loader_name=Gephi Dateien +Services/MIMEResolver/GephiResolver.xml=Gephi Dateien +Templates/Other/GephiTemplate.gephi=Leere Gephi Datei + +LoadTask.name=οΏ½ffne Projekt +SaveTask.name=Projekt speichern diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_es.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_es.properties index f0e542c570..87c756e7ab 100644 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_es.properties +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_es.properties @@ -1,22 +1,6 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-31 12\:45+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -gephiFormatException_import=Fallo al importar el proyecto.\n\nExcepci\u00f3n\: %s \: %s\nArchivo\: %s\nL\u00ednea \: %d - -gephiFormatException_export=Fallo al guardar el proyecto.\n\nExcepci\u00f3n\: %s \: %s\nArchivo\: %s\nL\u00ednea \: %d - LBL_Gephi_loader_name=Archivos Gephi - Services/MIMEResolver/GephiResolver.xml=Archivos Gephi - -Templates/Other/GephiTemplate.gephi=Fichero Gephi vac\u00edo - +Templates/Other/GephiTemplate.gephi=Archivo Gephi vac\u00EDo LoadTask.name=Abriendo proyecto - SaveTask.name=Guardando proyecto +DuplicateTask.name=Duplicar el espacio de trabajo diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_fr.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_fr.properties index 3086d9134a..6009fe2221 100644 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_fr.properties +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_fr.properties @@ -1,22 +1,6 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-31 13\:02+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -gephiFormatException_import=Echec de l'import du projet.\n\nException\: %s \: %s\nFichier\: %s\nLigne \: %d - -gephiFormatException_export=Echec de l'export du projet.\n\nException\: %s \: %s\nFichier\: %s\nLigne \: %d - -LBL_Gephi_loader_name=Fichiers Gephi - -Services/MIMEResolver/GephiResolver.xml=Fichiers Gephi - -Templates/Other/GephiTemplate.gephi=Fichier Gephi vide - -LoadTask.name=Ouverture du projet - -SaveTask.name=Enregistrement du projet +LBL_Gephi_loader_name=Fichiers Gephi +Services/MIMEResolver/GephiResolver.xml=Fichiers Gephi +Templates/Other/GephiTemplate.gephi=Fichier Gephi vide + +LoadTask.name=Ouverture du projet +SaveTask.name=Enregistrement du projet diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_he.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_he.properties new file mode 100644 index 0000000000..89e2be71a8 --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_he.properties @@ -0,0 +1,5 @@ +LBL_Gephi_loader_name=Gephi Files +Services/MIMEResolver/GephiResolver.xml=Gephi Files +Templates/Other/GephiTemplate.gephi=Empty Gephi file +LoadTask.name=Opening project +SaveTask.name=Saving project diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_hu.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_hu.properties new file mode 100644 index 0000000000..2440aad4fd --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_hu.properties @@ -0,0 +1,8 @@ + + +Templates/Other/GephiTemplate.gephi=\u00DCres Gephi f\u00E1jl +LoadTask.name=Projekt megnyit\u00E1sa +LBL_Gephi_loader_name=Gephi f\u00E1jlok +Services/MIMEResolver/GephiResolver.xml=Gephi f\u00E1jlok +DuplicateTask.name=A munkater\u00FClet megkett\u0151z\u00E9se +SaveTask.name=Projekt ment\u00E9se diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_it.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_it.properties new file mode 100644 index 0000000000..f66f6f9dcf --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_it.properties @@ -0,0 +1,6 @@ +LBL_Gephi_loader_name=Gephi Files +Services/MIMEResolver/GephiResolver.xml=Gephi Files +Templates/Other/GephiTemplate.gephi=Empty Gephi file +LoadTask.name=Opening project +SaveTask.name=Saving project +DuplicateTask.name=Duplicazione dello spazio di lavoro diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_ja.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_ja.properties index 6c2b21f52b..a71993e906 100644 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_ja.properties +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_ja.properties @@ -1,21 +1,6 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-21 08\:50+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -gephiFormatException_import=Gephi\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30a4\u30f3\u30dd\u30fc\u30c8\u306b\u5931\u6557\n\n\u4f8b\u5916\: %s \: %s\n\u30d5\u30a1\u30a4\u30eb\: %s\n\u884c \: %d - -gephiFormatException_export=Gephi\u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u30a4\u30f3\u30dd\u30fc\u30c8\u306b\u5931\u6557\n\n\u4f8b\u5916\: %s \: %s\n\u30d5\u30a1\u30a4\u30eb\: %s\n\u884c \: %d - -LBL_Gephi_loader_name=Gephi\u30d5\u30a1\u30a4\u30eb - -Services/MIMEResolver/GephiResolver.xml=Gephi\u30d5\u30a1\u30a4\u30eb - -Templates/Other/GephiTemplate.gephi=\u7a7a\u306eGephi\u30d5\u30a1\u30a4\u30eb - -LoadTask.name=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u958b\u304f - -SaveTask.name=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4fdd\u5b58 +LBL_Gephi_loader_name=Gephi\u30d5\u30a1\u30a4\u30eb +Services/MIMEResolver/GephiResolver.xml=Gephi\u30d5\u30a1\u30a4\u30eb +Templates/Other/GephiTemplate.gephi=\u7a7a\u306eGephi\u30d5\u30a1\u30a4\u30eb + +LoadTask.name=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u3092\u958b\u304f +SaveTask.name=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306e\u4fdd\u5b58 diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_ko.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_ko.properties new file mode 100644 index 0000000000..1cc70dd442 --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_ko.properties @@ -0,0 +1,8 @@ + + +Services/MIMEResolver/GephiResolver.xml=Gephi \uD30C\uC77C\uB4E4 +LBL_Gephi_loader_name=Gephi \uD30C\uC77C\uB4E4 +Templates/Other/GephiTemplate.gephi=\uBE48 Gephi \uD30C\uC77C +LoadTask.name=\uD504\uB85C\uC81D\uD2B8 \uC5F4\uAE30 +SaveTask.name=\uD504\uB85C\uC81D\uD2B8 \uC800\uC7A5\uD558\uAE30 +DuplicateTask.name=\uC791\uC5C5 \uACF5\uAC04 \uBCF5\uC81C\uD558\uAE30 diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_nl.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_nl.properties new file mode 100644 index 0000000000..193a93e6a8 --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_nl.properties @@ -0,0 +1,6 @@ +LBL_Gephi_loader_name=Gephi-bestanden +Services/MIMEResolver/GephiResolver.xml=Gephi-bestanden +Templates/Other/GephiTemplate.gephi=Leeg Gephi-bestand + +LoadTask.name=Project wordt geopend +SaveTask.name=Project wordt opgeslagen diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_pt_BR.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_pt_BR.properties index 680941cc6e..d6af3dd667 100644 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_pt_BR.properties +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_pt_BR.properties @@ -1,21 +1,6 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 18\:24+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -gephiFormatException_import=Ocorreu uma falha ao importar o projeto.\n\nExce\u00e7\u00e3o\: %s \: %s\nArquivo\: %s\nLinha \: %d - -gephiFormatException_export=Ocorreu uma falha ao salvar o projeto.\n\nExce\u00e7\u00e3o\: %s \: %s\nArquivo\: %s\nLinha \: %d - -LBL_Gephi_loader_name=Arquivos Gephi - -Services/MIMEResolver/GephiResolver.xml=Arquivos Gephi - -Templates/Other/GephiTemplate.gephi=Arquivo Gephi vazio - -LoadTask.name=Abrindo o projeto - -SaveTask.name=Salvando o projeto +LBL_Gephi_loader_name=Arquivos Gephi +Services/MIMEResolver/GephiResolver.xml=Arquivos Gephi +Templates/Other/GephiTemplate.gephi=Arquivo Gephi vazio + +LoadTask.name=Abrindo o projeto +SaveTask.name=Salvando o projeto diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_ro.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_ro.properties new file mode 100644 index 0000000000..a638bf7534 --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_ro.properties @@ -0,0 +1,7 @@ + + +LBL_Gephi_loader_name=Fi\u0219iere Gephi +Services/MIMEResolver/GephiResolver.xml=Fi\u0219iere Gephi +Templates/Other/GephiTemplate.gephi=Fi\u0219ier Gephi gol +LoadTask.name=Deschidere proiect +SaveTask.name=Salvare proiect diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_ru.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_ru.properties index b69a0a3ace..148f45ea55 100644 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_ru.properties +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_ru.properties @@ -1,21 +1,6 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-03 05\:37+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -gephiFormatException_import=Gephi \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442.\n\n\u041e\u0448\u0438\u0431\u043a\u0430\: %s \: %s\n\u0424\u0430\u0439\u043b\: %s\n\u0421\u0442\u0440\u043e\u043a\u0430 \: %d - -gephiFormatException_export=Gephi \u043d\u0435 \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u0440\u043e\u0435\u043a\u0442.\n\n\u041e\u0448\u0438\u0431\u043a\u0430\: %s \: %s\n\u0424\u0430\u0439\u043b\: %s\n\u0421\u0442\u0440\u043e\u043a\u0430 \: %d - -LBL_Gephi_loader_name=\u0424\u0430\u0439\u043b\u044b \u0444\u043e\u0440\u043c\u0430\u0442\u0430 Gephi - -Services/MIMEResolver/GephiResolver.xml=\u0424\u0430\u0439\u043b\u044b \u0444\u043e\u0440\u043c\u0430\u0442\u0430 Gephi - -Templates/Other/GephiTemplate.gephi=\u041f\u0443\u0441\u0442\u043e\u0439 \u0444\u0430\u0439\u043b \u0444\u043e\u0440\u043c\u0430\u0442\u0430 Gephi - -LoadTask.name=\u041e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 - -SaveTask.name=\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 +LBL_Gephi_loader_name=\u0424\u0430\u0439\u043b\u044b \u0444\u043e\u0440\u043c\u0430\u0442\u0430 Gephi +Services/MIMEResolver/GephiResolver.xml=\u0424\u0430\u0439\u043b\u044b \u0444\u043e\u0440\u043c\u0430\u0442\u0430 Gephi +Templates/Other/GephiTemplate.gephi=\u041f\u0443\u0441\u0442\u043e\u0439 \u0444\u0430\u0439\u043b \u0444\u043e\u0440\u043c\u0430\u0442\u0430 Gephi + +LoadTask.name=\u041e\u0442\u043a\u0440\u044b\u0442\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 +SaveTask.name=\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_th.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_tr.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_tr.properties new file mode 100644 index 0000000000..89e2be71a8 --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_tr.properties @@ -0,0 +1,5 @@ +LBL_Gephi_loader_name=Gephi Files +Services/MIMEResolver/GephiResolver.xml=Gephi Files +Templates/Other/GephiTemplate.gephi=Empty Gephi file +LoadTask.name=Opening project +SaveTask.name=Saving project diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_uk.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_uk.properties new file mode 100644 index 0000000000..c7c2c32d02 --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_uk.properties @@ -0,0 +1,6 @@ +DuplicateTask.name=\u0414\u0443\u0431\u043B\u044E\u0432\u0430\u043D\u043D\u044F \u0440\u043E\u0431\u043E\u0447\u043E\u0433\u043E \u043F\u0440\u043E\u0441\u0442\u043E\u0440\u0443 +LBL_Gephi_loader_name=\u0424\u0430\u0439\u043B\u0438 Gephi +Services/MIMEResolver/GephiResolver.xml=\u0424\u0430\u0439\u043B\u0438 Gephi +Templates/Other/GephiTemplate.gephi=\u041F\u043E\u0440\u043E\u0436\u043D\u0456\u0439 \u0444\u0430\u0439\u043B Gephi +SaveTask.name=\u0417\u0431\u0435\u0440\u0435\u0436\u0435\u043D\u043D\u044F \u043F\u0440\u043E\u0435\u043A\u0442\u0443 +LoadTask.name=\u041F\u0440\u043E\u0435\u043A\u0442 \u0432\u0456\u0434\u043A\u0440\u0438\u0442\u0442\u044F diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_zh_CN.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_zh_CN.properties index 94d1b13cdf..c58a509e10 100644 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_zh_CN.properties +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_zh_CN.properties @@ -1,20 +1,6 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:08+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -gephiFormatException_import=Gephi\u672a\u80fd\u5bfc\u5165\u9879\u76ee\u3002\n\u5f02\u5e38\: %s \: %s\n\u6587\u4ef6\: %s\n\u200b\u200b\u884c\u6570\: %d - -gephiFormatException_export=Gephi\u672a\u80fd\u5bfc\u5165\u9879\u76ee\u3002\n\u5f02\u5e38\: %s \: %s\n\u6587\u4ef6\: %s\n\u200b\u200b\u884c\u6570\: %d - -LBL_Gephi_loader_name=Gephi\u6587\u4ef6 - -Services/MIMEResolver/GephiResolver.xml=Gephi\u6587\u4ef6 - -Templates/Other/GephiTemplate.gephi=\u7a7aGephi\u6587\u4ef6 - -LoadTask.name=\u6253\u5f00\u9879\u76ee - -SaveTask.name=\u4fdd\u5b58\u9879\u76ee +LBL_Gephi_loader_name=Gephi\u6587\u4ef6 +Services/MIMEResolver/GephiResolver.xml=Gephi\u6587\u4ef6 +Templates/Other/GephiTemplate.gephi=\u7a7aGephi\u6587\u4ef6 + +LoadTask.name=\u6253\u5f00\u9879\u76ee +SaveTask.name=\u4fdd\u5b58\u9879\u76ee diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_zh_TW.properties b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_zh_TW.properties new file mode 100644 index 0000000000..10942412b9 --- /dev/null +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/Bundle_zh_TW.properties @@ -0,0 +1,5 @@ +LBL_Gephi_loader_name=Gephi \u6a94\u6848 +Services/MIMEResolver/GephiResolver.xml=Gephi \u6a94\u6848 +Templates/Other/GephiTemplate.gephi=Empty Gephi file +LoadTask.name=Opening project +SaveTask.name=Saving project diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/cs.po b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/cs.po deleted file mode 100644 index a3d3e128aa..0000000000 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/cs.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-16 21:47+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "gephiFormatException_import" -msgstr "Gephi selhal pΕ™i importu projektu.\n\nVΓ½jimka: %s : %s\nSoubor: %s\nŘÑdek : %d" - -msgid "gephiFormatException_export" -msgstr "Gephi selhal pΕ™i uloΕΎenΓ­ projektu.\n\nVΓ½jimka: %s : %s\nSoubor: %s\nŘÑdek : %d" - -msgid "LBL_Gephi_loader_name" -msgstr "Soubory Gephi" - -msgid "Services/MIMEResolver/GephiResolver.xml" -msgstr "Soubory Gephi" - -msgid "Templates/Other/GephiTemplate.gephi" -msgstr "PrΓ‘zdnΓ½ soubor Gephi" - -msgid "LoadTask.name" -msgstr "OtevΓ­rΓ‘nΓ­ projektu" - -msgid "SaveTask.name" -msgstr "UklΓ‘dΓ‘nΓ­ projektu" diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/es.po b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/es.po deleted file mode 100644 index 110408f62e..0000000000 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/es.po +++ /dev/null @@ -1,41 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-31 12:45+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "gephiFormatException_import" -msgstr "Fallo al importar el proyecto.\n\nExcepciΓ³n: %s : %s\nArchivo: %s\nLΓ­nea : %d" - -msgid "gephiFormatException_export" -msgstr "Fallo al guardar el proyecto.\n\nExcepciΓ³n: %s : %s\nArchivo: %s\nLΓ­nea : %d" - -msgid "LBL_Gephi_loader_name" -msgstr "Archivos Gephi" - -msgid "Services/MIMEResolver/GephiResolver.xml" -msgstr "Archivos Gephi" - -msgid "Templates/Other/GephiTemplate.gephi" -msgstr "Fichero Gephi vacΓ­o" - -msgid "LoadTask.name" -msgstr "Abriendo proyecto" - -msgid "SaveTask.name" -msgstr "Guardando proyecto" diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/fr.po b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/fr.po deleted file mode 100644 index 030038bec2..0000000000 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/fr.po +++ /dev/null @@ -1,41 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-31 13:02+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "gephiFormatException_import" -msgstr "Echec de l'import du projet.\n\nException: %s : %s\nFichier: %s\nLigne : %d" - -msgid "gephiFormatException_export" -msgstr "Echec de l'export du projet.\n\nException: %s : %s\nFichier: %s\nLigne : %d" - -msgid "LBL_Gephi_loader_name" -msgstr "Fichiers Gephi" - -msgid "Services/MIMEResolver/GephiResolver.xml" -msgstr "Fichiers Gephi" - -msgid "Templates/Other/GephiTemplate.gephi" -msgstr "Fichier Gephi vide" - -msgid "LoadTask.name" -msgstr "Ouverture du projet" - -msgid "SaveTask.name" -msgstr "Enregistrement du projet" diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/icon16.png b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/icon16.png deleted file mode 100644 index 9ee506e881..0000000000 Binary files a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/icon16.png and /dev/null differ diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/ja.po b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/ja.po deleted file mode 100644 index 88d0d70c94..0000000000 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/ja.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-21 08:50+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "gephiFormatException_import" -msgstr "Gephiγ―γƒ—γƒ­γ‚Έγ‚§γ‚―γƒˆγγ‚€γƒ³γƒγƒΌγƒˆγ«ε€±ζ•—\n\nδΎ‹ε€–: %s : %s\nフゑむル: %s\n葌 : %d" - -msgid "gephiFormatException_export" -msgstr "Gephiγ―γƒ—γƒ­γ‚Έγ‚§γ‚―γƒˆγγ‚€γƒ³γƒγƒΌγƒˆγ«ε€±ζ•—\n\nδΎ‹ε€–: %s : %s\nフゑむル: %s\n葌 : %d" - -msgid "LBL_Gephi_loader_name" -msgstr "Gephiフゑむル" - -msgid "Services/MIMEResolver/GephiResolver.xml" -msgstr "Gephiフゑむル" - -msgid "Templates/Other/GephiTemplate.gephi" -msgstr "η©ΊγGephiフゑむル" - -msgid "LoadTask.name" -msgstr "γƒ—γƒ­γ‚Έγ‚§γ‚―γƒˆγ‚’ι–‹γ" - -msgid "SaveTask.name" -msgstr "γƒ—γƒ­γ‚Έγ‚§γ‚―γƒˆγδΏε­˜" diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/org-gephi-project-io.pot b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/org-gephi-project-io.pot deleted file mode 100644 index bc9b6a5452..0000000000 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/org-gephi-project-io.pot +++ /dev/null @@ -1,47 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "gephiFormatException_import" -msgstr "" -"Gephi failed importing the project.\n" -"\n" -"Exception: %s : %s\n" -"File: %s\n" -"Line : %d" - -msgid "gephiFormatException_export" -msgstr "" -"Gephi failed saving the project.\n" -"\n" -"Exception: %s : %s\n" -"File: %s\n" -"Line : %d" - -msgid "LBL_Gephi_loader_name" -msgstr "Gephi Files" - -msgid "Services/MIMEResolver/GephiResolver.xml" -msgstr "Gephi Files" - -msgid "Templates/Other/GephiTemplate.gephi" -msgstr "Empty Gephi file" - -msgid "LoadTask.name" -msgstr "Opening project" - -msgid "SaveTask.name" -msgstr "Saving project" diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/pt_BR.po b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/pt_BR.po deleted file mode 100644 index bd8ba7910f..0000000000 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/pt_BR.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 18:24+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "gephiFormatException_import" -msgstr "Ocorreu uma falha ao importar o projeto.\n\nExceΓ§Γ£o: %s : %s\nArquivo: %s\nLinha : %d" - -msgid "gephiFormatException_export" -msgstr "Ocorreu uma falha ao salvar o projeto.\n\nExceΓ§Γ£o: %s : %s\nArquivo: %s\nLinha : %d" - -msgid "LBL_Gephi_loader_name" -msgstr "Arquivos Gephi" - -msgid "Services/MIMEResolver/GephiResolver.xml" -msgstr "Arquivos Gephi" - -msgid "Templates/Other/GephiTemplate.gephi" -msgstr "Arquivo Gephi vazio" - -msgid "LoadTask.name" -msgstr "Abrindo o projeto" - -msgid "SaveTask.name" -msgstr "Salvando o projeto" diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/ru.po b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/ru.po deleted file mode 100644 index 8428c38f69..0000000000 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/ru.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-03 05:37+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "gephiFormatException_import" -msgstr "Gephi Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.\n\nОшибка: %s : %s\nΠ€Π°ΠΉΠ»: %s\nΠ‘Ρ‚Ρ€ΠΎΠΊΠ° : %d" - -msgid "gephiFormatException_export" -msgstr "Gephi Π½Π΅ ΡƒΠ΄Π°Π»ΠΎΡΡŒ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚.\n\nОшибка: %s : %s\nΠ€Π°ΠΉΠ»: %s\nΠ‘Ρ‚Ρ€ΠΎΠΊΠ° : %d" - -msgid "LBL_Gephi_loader_name" -msgstr "Π€Π°ΠΉΠ»Ρ‹ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Gephi" - -msgid "Services/MIMEResolver/GephiResolver.xml" -msgstr "Π€Π°ΠΉΠ»Ρ‹ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Gephi" - -msgid "Templates/Other/GephiTemplate.gephi" -msgstr "ΠŸΡƒΡΡ‚ΠΎΠΉ Ρ„Π°ΠΉΠ» Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Gephi" - -msgid "LoadTask.name" -msgstr "ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°" - -msgid "SaveTask.name" -msgstr "Π‘ΠΎΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°" diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/zh_CN.po b/modules/ProjectAPI/src/main/resources/org/gephi/project/io/zh_CN.po deleted file mode 100644 index be1faa09b2..0000000000 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/io/zh_CN.po +++ /dev/null @@ -1,39 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:08+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "gephiFormatException_import" -msgstr "Gephiζœͺ能导ε…₯ι‘Ήη›γ€‚\nεΌ‚εΈΈ: %s : %s\nζ–‡δ»Ά: %s\nβ€‹β€‹θ‘Œζ•°: %d" - -msgid "gephiFormatException_export" -msgstr "Gephiζœͺ能导ε…₯ι‘Ήη›γ€‚\nεΌ‚εΈΈ: %s : %s\nζ–‡δ»Ά: %s\nβ€‹β€‹θ‘Œζ•°: %d" - -msgid "LBL_Gephi_loader_name" -msgstr "Gephiζ–‡δ»Ά" - -msgid "Services/MIMEResolver/GephiResolver.xml" -msgstr "Gephiζ–‡δ»Ά" - -msgid "Templates/Other/GephiTemplate.gephi" -msgstr "η©ΊGephiζ–‡δ»Ά" - -msgid "LoadTask.name" -msgstr "打开鑹η›" - -msgid "SaveTask.name" -msgstr "保存鑹η›" diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/project/spi/package.html b/modules/ProjectAPI/src/main/resources/org/gephi/project/spi/package.html index 832608f2ca..a2aee0bc79 100644 --- a/modules/ProjectAPI/src/main/resources/org/gephi/project/spi/package.html +++ b/modules/ProjectAPI/src/main/resources/org/gephi/project/spi/package.html @@ -1,10 +1,15 @@ - - - - SPI for workspace capabilities and project managment UI. -

            - Modules can implement workspace capabilites to interact with workspace - life cycle. -

            - + + + + org.gephi.project.spi + + +

            + SPI for associating models to workspaces and manage persistence. +

            +

            + Workspaces are suitable for hosting any type of data modules wants to. By implementing a + Controller service, modules can attach a model to a workspace. +

            + \ No newline at end of file diff --git a/modules/ProjectAPI/src/main/resources/org/gephi/workspace/impl/Bundle.properties b/modules/ProjectAPI/src/main/resources/org/gephi/workspace/impl/Bundle.properties deleted file mode 100644 index 3cd9f1c28f..0000000000 --- a/modules/ProjectAPI/src/main/resources/org/gephi/workspace/impl/Bundle.properties +++ /dev/null @@ -1 +0,0 @@ -Workspace.default.prefix=Workspace \ No newline at end of file diff --git a/modules/ProjectAPI/src/main/resources/overview.html b/modules/ProjectAPI/src/main/resources/overview.html index 17d91898a3..35cd5f493f 100644 --- a/modules/ProjectAPI/src/main/resources/overview.html +++ b/modules/ProjectAPI/src/main/resources/overview.html @@ -1,19 +1,26 @@ - + + + Project API + - Project API/SPI for project and worskpaces manipulation. +

            + Project API/SPI for project and workspaces manipulation. +

            The API defines Project and Workspace interface. Most of modules will use these interfaces to watch - the application lifecycle. The API therefore define the - WorkspaceListener interface, which is essential for tracking - workspace events. The ProjectController service manage - the system. + the application lifecycle. The ProjectController service manage + the system. A ProjectListener interface can be used to track project events. +

            +

            + The SPI notably defines how modules can interact with the workspace lifecycle. The most common need is for + a module to attach a unique model to each workspace. The best way to do that is to implement a + Controller service. This controller will be called when a new workspace is created. The alternative + way is to implement a WorkspaceListener service to listen to the project lifecycle.

            - The SPI notably defines how modules can interact more with the - worspace lifecyle. See WorkspacePersistenceProvider for - project saving/loading. + See WorkspacePersistenceProvider for project saving/loading.

            \ No newline at end of file diff --git a/modules/ProjectAPI/src/test/java/org/gephi/project/impl/ProjectControllerImplTest.java b/modules/ProjectAPI/src/test/java/org/gephi/project/impl/ProjectControllerImplTest.java new file mode 100644 index 0000000000..4298aa3300 --- /dev/null +++ b/modules/ProjectAPI/src/test/java/org/gephi/project/impl/ProjectControllerImplTest.java @@ -0,0 +1,373 @@ +package org.gephi.project.impl; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import org.gephi.project.api.Project; +import org.gephi.project.api.ProjectListener; +import org.gephi.project.api.Workspace; +import org.gephi.project.api.WorkspaceListener; +import org.gephi.project.spi.Controller; +import org.gephi.project.spi.Model; +import org.junit.Assert; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.rules.TemporaryFolder; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.junit.MockitoJUnitRunner; +import org.netbeans.junit.MockServices; + +@RunWith(MockitoJUnitRunner.class) +public class ProjectControllerImplTest { + + @Rule + public TemporaryFolder tempFolder = new TemporaryFolder(); + + @Rule + public ExpectedException expectedException = ExpectedException.none(); + + @Mock + private ProjectListener projectListener; + + @Mock + private WorkspaceListener workspaceListener; + + @Test + public void testInit() { + ProjectControllerImpl pc = new ProjectControllerImpl(); + Assert.assertFalse(pc.hasCurrentProject()); + Assert.assertTrue(pc.getAllProjects().isEmpty()); + Assert.assertNull(pc.getCurrentProject()); + Assert.assertNull(pc.getCurrentWorkspace()); + } + + @Test + public void testNewProject() { + MockServices.setServices(MockController.class); + + ProjectControllerImpl pc = new ProjectControllerImpl(); + pc.addProjectListener(projectListener); + Project project = pc.newProject(); + Assert.assertTrue(pc.hasCurrentProject()); + Assert.assertFalse(pc.getAllProjects().isEmpty()); + Assert.assertSame(project, pc.getCurrentProject()); + Assert.assertTrue(project.isOpen()); + Mockito.verify(projectListener).opened(project); + Assert.assertNotNull(project.getCurrentWorkspace().getLookup().lookup(MockModel.class)); + } + + @Test + public void testCloseProject() { + ProjectControllerImpl pc = new ProjectControllerImpl(); + pc.addProjectListener(projectListener); + Project project = pc.newProject(); + pc.closeCurrentProject(); + Assert.assertFalse(pc.hasCurrentProject()); + Assert.assertFalse(pc.getAllProjects().isEmpty()); + Assert.assertFalse(project.isOpen()); + Assert.assertTrue(project.isClosed()); + Mockito.verify(projectListener).closed(project); + } + + @Test + public void testRemoveProject() { + ProjectControllerImpl pc = new ProjectControllerImpl(); + pc.addProjectListener(projectListener); + Project project = pc.newProject(); + pc.removeProject(project); + Assert.assertFalse(pc.hasCurrentProject()); + Assert.assertTrue(pc.getAllProjects().isEmpty()); + Assert.assertTrue(project.isClosed()); + Mockito.verify(projectListener).closed(project); + } + + @Test + public void testMultipleProjects() { + ProjectControllerImpl pc = new ProjectControllerImpl(); + Project project1 = pc.newProject(); + Project project2 = pc.newProject(); + Assert.assertSame(project2, pc.getCurrentProject()); + Assert.assertTrue(project1.isClosed()); + Assert.assertEquals(2, pc.getAllProjects().size()); + } + + @Test + public void testSave() throws IOException { + ProjectControllerImpl pc = new ProjectControllerImpl(); + pc.addProjectListener(projectListener); + Project project = pc.newProject(); + File file = tempFolder.newFile("save.gephi"); + pc.saveProject(project, file); + Assert.assertTrue(file.exists()); + Assert.assertTrue(project.hasFile()); + Assert.assertSame(file, project.getFile()); + Mockito.verify(projectListener).saved(project); + } + + @Test + public void testLoad() throws IOException { + MockServices.setServices(MockController.class); + + ProjectControllerImpl pc = new ProjectControllerImpl(); + pc.addProjectListener(projectListener); + Project project = pc.newProject(); + File file = tempFolder.newFile("save.gephi"); + pc.saveProject(project, file); + project = pc.openProject(file); + Assert.assertNotNull(project); + Assert.assertTrue(project.isOpen()); + Mockito.verify(projectListener, Mockito.times(2)).opened(project); + Assert.assertNotNull(project.getCurrentWorkspace().getLookup().lookup(MockModel.class)); + } + + @Test + public void testOpenFileNotFound() throws IOException { + expectedException.expect(RuntimeException.class); + expectedException.expectCause(new org.hamcrest.core.IsInstanceOf(FileNotFoundException.class)); + + ProjectControllerImpl pc = new ProjectControllerImpl(); + pc.addProjectListener(projectListener); + File file = tempFolder.newFile("foo.gephi"); + file.delete(); + pc.openProject(file); + Mockito.verify(projectListener).error(Mockito.isNull(), Mockito.any(RuntimeException.class)); + } + + @Test + public void testDefaultWorkspace() { + ProjectControllerImpl pc = new ProjectControllerImpl(); + pc.addWorkspaceListener(workspaceListener); + Project project = pc.newProject(); + + Assert.assertNotNull(pc.getCurrentWorkspace()); + Assert.assertSame(project, pc.getCurrentWorkspace().getProject()); + Assert.assertTrue(project.hasCurrentWorkspace()); + Assert.assertSame(pc.getCurrentWorkspace(), project.getCurrentWorkspace()); + Assert.assertTrue(project.getWorkspaces().contains(pc.getCurrentWorkspace())); + Mockito.verify(workspaceListener).initialize(pc.getCurrentWorkspace()); + Mockito.verify(workspaceListener).select(pc.getCurrentWorkspace()); + } + + @Test + public void testAddWorkspace() { + MockServices.setServices(MockController.class); + + ProjectControllerImpl pc = new ProjectControllerImpl(); + pc.addWorkspaceListener(workspaceListener); + Project project = pc.newProject(); + Workspace workspace = pc.newWorkspace(project); + + Assert.assertNotSame(workspace, pc.getCurrentWorkspace()); + Assert.assertTrue(workspace.isClosed()); + Assert.assertTrue(project.hasCurrentWorkspace()); + Assert.assertSame(workspace.getProject(), project); + Assert.assertEquals(2, project.getWorkspaces().size()); + Mockito.verify(workspaceListener).initialize(workspace); + Assert.assertNotNull(workspace.getLookup().lookup(MockModel.class)); + } + + @Test + public void testDeleteWorkspace() { + ProjectControllerImpl pc = new ProjectControllerImpl(); + pc.addWorkspaceListener(workspaceListener); + Project project = pc.newProject(); + Workspace originalWorkspace = pc.getCurrentWorkspace(); + Workspace workspace = pc.newWorkspace(project); + pc.deleteWorkspace(workspace); + + Assert.assertTrue(workspace.isClosed()); + Assert.assertSame(originalWorkspace, pc.getCurrentWorkspace()); + Assert.assertTrue(project.getWorkspaces().contains(originalWorkspace)); + Mockito.verify(workspaceListener).close(workspace); + Mockito.verify(workspaceListener, Mockito.never()).unselect(workspace); + } + + @Test + public void testDeleteSelectedWorkspace() { + ProjectControllerImpl pc = new ProjectControllerImpl(); + pc.addWorkspaceListener(workspaceListener); + Project project = pc.newProject(); + Workspace originalWorkspace = pc.getCurrentWorkspace(); + Workspace workspace = pc.newWorkspace(project); + pc.deleteWorkspace(originalWorkspace); + + Assert.assertSame(workspace, pc.getCurrentWorkspace()); + Mockito.verify(workspaceListener).close(originalWorkspace); + Mockito.verify(workspaceListener).select(workspace); + Mockito.verify(workspaceListener).unselect(originalWorkspace); + } + + @Test + public void testDeleteLastWorkspace() { + ProjectControllerImpl pc = new ProjectControllerImpl(); + pc.addWorkspaceListener(workspaceListener); + pc.addProjectListener(projectListener); + Project project = pc.newProject(); + Workspace workspace = pc.getCurrentWorkspace(); + pc.deleteWorkspace(workspace); + + Assert.assertTrue(project.isClosed()); + Assert.assertNull(pc.getCurrentProject()); + Mockito.verify(workspaceListener).unselect(workspace); + Mockito.verify(workspaceListener).close(workspace); + Mockito.verify(projectListener).closed(project); + } + + @Test + public void testOpenWorkspace() { + ProjectControllerImpl pc = new ProjectControllerImpl(); + pc.addWorkspaceListener(workspaceListener); + Project project = pc.newProject(); + Workspace originalWorkspace = pc.getCurrentWorkspace(); + Workspace workspace = pc.newWorkspace(project); + pc.openWorkspace(workspace); + + Assert.assertSame(workspace, pc.getCurrentWorkspace()); + Assert.assertTrue(originalWorkspace.isClosed()); + Assert.assertTrue(workspace.isOpen()); + Mockito.verify(workspaceListener).unselect(originalWorkspace); + Mockito.verify(workspaceListener).select(workspace); + } + + @Test + public void testCloseWorkspace() { + ProjectControllerImpl pc = new ProjectControllerImpl(); + pc.newProject(); + Workspace workspace = pc.getCurrentWorkspace(); + pc.closeCurrentWorkspace(); + + Assert.assertTrue(workspace.isClosed()); + // TODO: Should we make it null? +// Assert.assertNull(pc.getCurrentWorkspace()); + } + + @Test + public void testOpenNewWorkspace() { + MockServices.setServices(MockController.class); + + ProjectControllerImpl pc = new ProjectControllerImpl(); + pc.addWorkspaceListener(workspaceListener); + pc.newProject(); + Workspace workspace = pc.openNewWorkspace(); + Assert.assertNotNull(workspace); + Assert.assertTrue(workspace.isOpen()); + Assert.assertSame(workspace, pc.getCurrentWorkspace()); + Assert.assertEquals(2, pc.getCurrentProject().getWorkspaces().size()); + Mockito.verify(workspaceListener).initialize(workspace); + Mockito.verify(workspaceListener).select(workspace); + Assert.assertNotNull(workspace.getLookup().lookup(MockModel.class)); + } + + @Test + public void testOpenNewWorkspaceNoProject() { + MockServices.setServices(MockController.class); + + ProjectControllerImpl pc = new ProjectControllerImpl(); + pc.addWorkspaceListener(workspaceListener); + Workspace workspace = pc.openNewWorkspace(); + Assert.assertNotNull(workspace); + Assert.assertTrue(workspace.isOpen()); + Assert.assertSame(workspace, pc.getCurrentWorkspace()); + Assert.assertEquals(1, pc.getCurrentProject().getWorkspaces().size()); + Mockito.verify(workspaceListener).initialize(workspace); + Mockito.verify(workspaceListener).select(workspace); + Assert.assertNotNull(workspace.getLookup().lookup(MockModel.class)); + } + + @Test + public void testRenameProject() { + ProjectControllerImpl pc = new ProjectControllerImpl(); + pc.addProjectListener(projectListener); + Project project = pc.newProject(); + pc.renameProject(project, "foo"); + Assert.assertEquals("foo", project.getName()); + Mockito.verify(projectListener).changed(project); + } + + @Test + public void testOpenAnotherProject() throws IOException { + ProjectControllerImpl pc = new ProjectControllerImpl(); + pc.addProjectListener(projectListener); + pc.addWorkspaceListener(workspaceListener); + Project project = pc.newProject(); + File file = tempFolder.newFile("project.gephi"); + pc.saveProject(project, file); + pc.closeCurrentProject(); + pc.openProject(project); + Assert.assertTrue(project.isOpen()); + Assert.assertSame(project, pc.getCurrentProject()); + Mockito.verify(projectListener, Mockito.times(2)).opened(project); + Mockito.verify(workspaceListener).initialize(pc.getCurrentWorkspace()); + } + + @Test + public void testDuplicateWorkspace() { + MockServices.setServices(MockController.class); + + ProjectControllerImpl pc = new ProjectControllerImpl(); + pc.addWorkspaceListener(workspaceListener); + pc.newProject(); + Workspace duplicate = pc.duplicateWorkspace(pc.getCurrentWorkspace()); + Assert.assertNotNull(duplicate); + Assert.assertTrue(duplicate.isOpen()); + Assert.assertSame(duplicate, pc.getCurrentWorkspace()); + Assert.assertEquals(2, pc.getCurrentProject().getWorkspaces().size()); + Mockito.verify(workspaceListener).initialize(duplicate); + Mockito.verify(workspaceListener).select(duplicate); + Assert.assertNotNull(duplicate.getLookup().lookup(MockModel.class)); + } + + @Test + public void testNewWorkspaceWithLookupObjects() { + MockServices.setServices(MockController.class); + + ProjectControllerImpl pc = new ProjectControllerImpl(); + pc.addWorkspaceListener(workspaceListener); + Project project = pc.newProject(); + String foo = "foo"; + Workspace workspace = pc.newWorkspace(project, foo); + Assert.assertEquals(foo, workspace.getLookup().lookup(String.class)); + } + + @Test + public void testOpenNewWorkspaceWithLookupObjects() { + MockServices.setServices(MockController.class); + + ProjectControllerImpl pc = new ProjectControllerImpl(); + pc.addWorkspaceListener(workspaceListener); + String foo = "foo"; + Workspace workspace = pc.openNewWorkspace(foo); + Assert.assertEquals(foo, workspace.getLookup().lookup(String.class)); + } + + public static class MockModel implements Model { + + private final Workspace workspace; + + public MockModel(Workspace workspace) { + this.workspace = workspace; + } + + @Override + public Workspace getWorkspace() { + return workspace; + } + } + + public static class MockController implements Controller { + + + @Override + public Model newModel(Workspace workspace) { + return new MockModel(workspace); + } + + @Override + public Class getModelClass() { + return MockModel.class; + } + } +} diff --git a/modules/ProjectAPI/src/test/java/org/gephi/project/impl/ProjectsImplTest.java b/modules/ProjectAPI/src/test/java/org/gephi/project/impl/ProjectsImplTest.java new file mode 100644 index 0000000000..7be80f3448 --- /dev/null +++ b/modules/ProjectAPI/src/test/java/org/gephi/project/impl/ProjectsImplTest.java @@ -0,0 +1,129 @@ +package org.gephi.project.impl; + +import java.io.File; +import java.io.IOException; +import org.gephi.project.api.Project; +import org.junit.Assert; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; + +public class ProjectsImplTest { + + @Rule + public TemporaryFolder tempFolder = new TemporaryFolder(); + + @Test + public void testProjectsSort() throws InterruptedException { + ProjectsImpl projects = new ProjectsImpl(); + ProjectImpl p1 = new ProjectImpl("p1", "p1"); + p1.open(); + Thread.sleep(10); + ProjectImpl p2 = new ProjectImpl("p2", "p2"); + p2.open(); + Thread.sleep(10); + ProjectImpl p3 = new ProjectImpl("p3", "p3"); + + projects.addProject(p3); + projects.addProject(p1); + projects.addProject(p2); + + Project[] res = projects.getProjects(); + Project[] expected = new Project[] {p2, p1, p3}; + Assert.assertArrayEquals(expected, res); + } + + @Test + public void testEmptyPersistence() throws IOException { + ProjectsImpl projects = new ProjectsImpl(); + File file = tempFolder.newFile("projects.xml"); + projects.saveProjects(file); + + projects = new ProjectsImpl(); + projects.loadProjects(file); + Assert.assertEquals(0, projects.getProjects().length); + } + + @Test + public void testPersistenceNoFile() throws IOException { + ProjectsImpl projects = new ProjectsImpl(); + ProjectImpl p1 = new ProjectImpl("i1", "p1"); + p1.open(); + projects.addProject(p1); + + File file = tempFolder.newFile("projects.xml"); + projects.saveProjects(file); + + projects = new ProjectsImpl(); + projects.loadProjects(file); + Assert.assertEquals(1, projects.getProjects().length); + } + + @Test + public void testPersistenceNoFileClosed() throws IOException { + ProjectsImpl projects = new ProjectsImpl(); + ProjectImpl p1 = new ProjectImpl("i1", "p1"); + projects.addProject(p1); + + File file = tempFolder.newFile("projects.xml"); + projects.saveProjects(file); + + projects = new ProjectsImpl(); + projects.loadProjects(file); + Assert.assertEquals(0, projects.getProjects().length); + } + + @Test + public void testPersistenceFileNotExist() throws IOException { + ProjectsImpl projects = new ProjectsImpl(); + ProjectImpl p1 = new ProjectImpl("i1", "p1"); + p1.setFile(new File("notexist.gephi")); + projects.addProject(p1); + + File file = tempFolder.newFile("projects.xml"); + projects.saveProjects(file); + + projects = new ProjectsImpl(); + projects.loadProjects(file); + Assert.assertEquals(0, projects.getProjects().length); + } + + @Test + public void testPersistence() throws IOException { + ProjectsImpl projects = new ProjectsImpl(); + ProjectImpl p1 = new ProjectImpl("i1", "p1"); + p1.setFile(tempFolder.newFile("p1.gephi")); + ProjectImpl p2 = new ProjectImpl("i2", "p2"); + p2.setFile(tempFolder.newFile("p2.gephi")); + + projects.addProject(p1); + projects.addProject(p2); + + File file = tempFolder.newFile("projects.xml"); + projects.saveProjects(file); + + projects = new ProjectsImpl(); + projects.loadProjects(file); + Assert.assertEquals(2, projects.getProjects().length); + Assert.assertEquals("p1", projects.getProjectByIdentifier("i1").getName()); + Assert.assertEquals("p2", projects.getProjectByIdentifier("i2").getName()); + } + + @Test + public void testCleanupProjectSameFile() throws IOException { + ProjectsImpl projects = new ProjectsImpl(); + ProjectImpl p1 = new ProjectImpl("i1", "p1"); + projects.addOrReplaceProject(p1); + Assert.assertTrue(projects.containsProject(p1)); + + File file = tempFolder.newFile("p1.gephi"); + p1.setFile(file); + + ProjectImpl p2 = new ProjectImpl("i2", "p2"); + p2.setFile(file); + projects.addOrReplaceProject(p2); + + Assert.assertTrue(projects.containsProject(p2)); + Assert.assertFalse(projects.containsProject(p1)); + } +} diff --git a/modules/ProjectAPI/src/test/java/org/gephi/project/io/GephiWriterReaderTest.java b/modules/ProjectAPI/src/test/java/org/gephi/project/io/GephiWriterReaderTest.java new file mode 100644 index 0000000000..fd9562a11f --- /dev/null +++ b/modules/ProjectAPI/src/test/java/org/gephi/project/io/GephiWriterReaderTest.java @@ -0,0 +1,115 @@ +package org.gephi.project.io; + +import java.io.StringReader; +import java.io.StringWriter; +import javax.xml.stream.XMLStreamReader; +import javax.xml.stream.XMLStreamWriter; +import org.gephi.project.api.Workspace; +import org.gephi.project.impl.ProjectImpl; +import org.gephi.project.impl.WorkspaceImpl; +import org.gephi.project.impl.WorkspaceInformationImpl; +import org.gephi.project.io.utils.GephiFormat; +import org.gephi.project.io.utils.MockXMLPersistenceProvider; +import org.gephi.project.io.utils.Utils; +import org.junit.Assert; +import org.junit.Test; + +public class GephiWriterReaderTest { + + @Test + public void testProject() throws Exception { + ProjectImpl project = Utils.newProject(); + ProjectImpl readProject = writeAndReadProject(project); + + //TODO Implement deepEquals in ProjectImpl + Assert.assertNotNull(readProject); + Assert.assertEquals(Utils.PROJECT_NAME, readProject.getName()); + Assert.assertEquals(project, readProject); + } + + @Test + public void testProjectMetadata() throws Exception { + ProjectImpl project = Utils.newProject(); + project.getProjectMetadata().setDescription("desc"); + project.getProjectMetadata().setTitle("title"); + project.getProjectMetadata().setKeywords("keywords"); + project.getProjectMetadata().setAuthor("author"); + ProjectImpl readProject = writeAndReadProject(project); + + //TODO Implement deepEquals in ProjectImpl + Assert.assertNotNull(readProject); + Assert.assertEquals(Utils.PROJECT_NAME, readProject.getName()); + Assert.assertEquals(project, readProject); + Assert.assertEquals(project.getProjectMetadata(), readProject.getProjectMetadata()); + } + + @Test + public void testWorkspace() throws Exception { + WorkspaceImpl workspace = Utils.newWorkspace(); + workspace.getLookup().lookup(WorkspaceInformationImpl.class).setName("foo"); + Workspace read = writeAndReadWorkspace(workspace); + + //TODO Implement deepEquals in ProjectImpl + Assert.assertNotNull(read); + Assert.assertEquals(workspace.getName(), read.getName()); + } + + @Test + public void testWorkspaceMetadata() throws Exception { + Workspace workspace = Utils.newWorkspace(); + workspace.getWorkspaceMetadata().setDescription("foo"); + workspace.getWorkspaceMetadata().setTitle("bar"); + + Workspace read = writeAndReadWorkspace(workspace); + Assert.assertEquals(workspace.getWorkspaceMetadata(), read.getWorkspaceMetadata()); + } + + @Test + public void testPersistenceProvider() throws Exception { + MockXMLPersistenceProvider pp = new MockXMLPersistenceProvider(); + + StringWriter stringWriter = new StringWriter(); + XMLStreamWriter writer = GephiFormat.newXMLWriter(stringWriter); + GephiWriter.writeWorkspaceChildren(writer, Utils.newWorkspace(), pp); + + StringReader stringReader = new StringReader(stringWriter.toString()); + XMLStreamReader reader = GephiFormat.newXMLReader(stringReader); + GephiReader.readWorkspaceChildren(Utils.newWorkspace(), reader, pp); + Assert.assertEquals(MockXMLPersistenceProvider.TXT, pp.getReadText()); + } + + @Test + public void testWorkspaceMissingStatusAttribute() throws Exception { + String xml = "" + + "" + + "<description/></metadata>" + + "</workspace>"; + StringReader stringReader = new StringReader(xml); + XMLStreamReader reader = GephiFormat.newXMLReader(stringReader); + Workspace workspace = GephiReader.readWorkspace(reader, Utils.newProject()); + Assert.assertNotNull(workspace); + Assert.assertTrue(workspace.isInvalid()); + } + + // Utils + + private ProjectImpl writeAndReadProject(ProjectImpl project) throws Exception { + StringWriter stringWriter = new StringWriter(); + XMLStreamWriter writer = GephiFormat.newXMLWriter(stringWriter); + GephiWriter.writeProject(writer, project); + + StringReader stringReader = new StringReader(stringWriter.toString()); + XMLStreamReader reader = GephiFormat.newXMLReader(stringReader); + return GephiReader.readProject(reader, null); + } + + private Workspace writeAndReadWorkspace(Workspace source) throws Exception { + StringWriter stringWriter = new StringWriter(); + XMLStreamWriter writer = GephiFormat.newXMLWriter(stringWriter); + GephiWriter.writeWorkspace(writer, source); + + StringReader stringReader = new StringReader(stringWriter.toString()); + XMLStreamReader reader = GephiFormat.newXMLReader(stringReader); + return GephiReader.readWorkspace(reader, Utils.newProject()); + } +} diff --git a/modules/ProjectAPI/src/test/java/org/gephi/project/io/SaveAndLoadTaskTest.java b/modules/ProjectAPI/src/test/java/org/gephi/project/io/SaveAndLoadTaskTest.java new file mode 100644 index 0000000000..6f55c36b72 --- /dev/null +++ b/modules/ProjectAPI/src/test/java/org/gephi/project/io/SaveAndLoadTaskTest.java @@ -0,0 +1,130 @@ +package org.gephi.project.io; + +import java.io.File; +import java.io.IOException; +import java.util.Objects; +import org.gephi.project.impl.ProjectImpl; +import org.gephi.project.impl.WorkspaceImpl; +import org.gephi.project.io.utils.MockXMLPersistenceProvider; +import org.gephi.project.io.utils.MockXMLPersistenceProviderFailRead; +import org.gephi.project.io.utils.MockXMLPersistenceProviderFailWrite; +import org.gephi.project.io.utils.Utils; +import org.junit.Assert; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.TemporaryFolder; +import org.netbeans.junit.MockServices; +import org.openide.util.Lookup; + +public class SaveAndLoadTaskTest { + + @Rule + public TemporaryFolder tempFolder = new TemporaryFolder(); + + @Test + public void testEmptyProject() throws Exception { + ProjectImpl project = Utils.newProject(); + ProjectImpl readProject = saveAndLoad(project); + Assert.assertNotNull(readProject); + // TODO: DeepEquals + } + + @Test + public void testEmptyProjectFileOverwrite() throws Exception { + ProjectImpl project = Utils.newProject(); + ProjectImpl readProject = saveAndLoadOverwrite(project); + Assert.assertNotNull(readProject); + } + + @Test + public void testNotDeleteOnCancel() throws Exception { + ProjectImpl project = Utils.newProject(); + File file = tempFolder.newFile("project.gephi"); + SaveTask saveTask = new SaveTask(project, file); + saveTask.cancel(); + saveTask.run(); + Assert.assertTrue(file.exists()); + } + + @Test + public void testEmptyWorkspace() throws Exception { + WorkspaceImpl workspace = Utils.newWorkspace(); + ProjectImpl readProject = saveAndLoad(workspace.getProject()); + WorkspaceImpl readWorkspace = Utils.getCurrentWorkspace(readProject); + Assert.assertNotNull(readWorkspace); + // TODO: DeepEquals + } + + @Test + public void testPersistenceProvider() throws Exception { + MockServices.setServices(MockXMLPersistenceProvider.class); + + WorkspaceImpl workspace = Utils.newWorkspace(); + saveAndLoad(workspace.getProject()); + + Assert.assertEquals(MockXMLPersistenceProvider.TXT, + Lookup.getDefault().lookup(MockXMLPersistenceProvider.class).getReadText()); + } + + @Test + public void testPersistenceProviderFailWrite() throws Exception { + MockServices.setServices(MockXMLPersistenceProviderFailWrite.class); + + WorkspaceImpl workspace = Utils.newWorkspace(); + saveAndLoad(workspace.getProject()); + } + + @Test + public void testPersistenceProviderFailRead() throws Exception { + MockServices.setServices(MockXMLPersistenceProviderFailRead.class); + + WorkspaceImpl workspace = Utils.newWorkspace(); + saveAndLoad(workspace.getProject()); + } + + @Test + public void testDuplicateTaskCancelReturnsNull() { + MockServices.setServices(MockXMLPersistenceProvider.class); + + WorkspaceImpl workspace = Utils.newWorkspace(); + DuplicateTask task = new DuplicateTask(workspace); + task.cancel(); + WorkspaceImpl result = task.run(); + Assert.assertNull(result); + } + + private ProjectImpl saveAndLoad(ProjectImpl project) throws IOException { + final File tempFile = new File(tempFolder.getRoot(), "tmp.gephi"); + + return saveAndLoad(project, tempFile); + } + + private ProjectImpl saveAndLoadOverwrite(ProjectImpl project) throws IOException { + final File tempFile = tempFolder.newFile("tmp.gephi"); + + return saveAndLoad(project, tempFile); + } + + private ProjectImpl saveAndLoad(ProjectImpl project, File file) { + int countWorkspaces = project.getWorkspaces().size(); + WorkspaceImpl w = project.newWorkspace(); + w.getWorkspaceMetadata().setTitle("Test"); + int workspaceId = w.getId(); + + project.getProjectMetadata().setTitle("Test"); + SaveTask saveTask = new SaveTask(project, file); + saveTask.run(); + Assert.assertTrue(file.exists()); + Assert.assertTrue(file.length() > 0); + Assert.assertEquals(1, Objects.requireNonNull(file.getParentFile().list()).length); + + LoadTask loadTask = new LoadTask(file); + ProjectImpl readProject = loadTask.execute(null); + Assert.assertNotNull(readProject); + Assert.assertEquals("Test", readProject.getProjectMetadata().getTitle()); + Assert.assertEquals(countWorkspaces + 1, readProject.getWorkspaces().size()); + Assert.assertEquals("Test", readProject.getWorkspace(workspaceId).getWorkspaceMetadata().getTitle()); + + return readProject; + } +} diff --git a/modules/ProjectAPI/src/test/java/org/gephi/project/io/utils/GephiFormat.java b/modules/ProjectAPI/src/test/java/org/gephi/project/io/utils/GephiFormat.java new file mode 100644 index 0000000000..1ec23a7ea0 --- /dev/null +++ b/modules/ProjectAPI/src/test/java/org/gephi/project/io/utils/GephiFormat.java @@ -0,0 +1,74 @@ +package org.gephi.project.io.utils; + +import java.io.IOException; +import java.io.Reader; +import java.io.StringReader; +import java.io.StringWriter; +import java.io.Writer; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLOutputFactory; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; +import javax.xml.stream.XMLStreamWriter; +import org.gephi.project.api.Workspace; +import org.gephi.project.impl.WorkspaceImpl; +import org.gephi.project.spi.WorkspaceXMLPersistenceProvider; +import org.junit.Assert; + +public class GephiFormat { + + public static Workspace testXMLPersistenceProvider(WorkspaceXMLPersistenceProvider provider, + Workspace workspace) throws Exception { + Assert.assertNotNull(provider.getIdentifier()); + + String xmlString = toString(provider, workspace); + Workspace newWorkspace = fromString(provider, xmlString); + String xmlStringAgain = toString(provider, newWorkspace); + + Assert.assertEquals(xmlString, xmlStringAgain); + return newWorkspace; + } + + private static Workspace fromString(WorkspaceXMLPersistenceProvider provider, String xmlString) + throws XMLStreamException, IOException { + Workspace destinationWorkspace = new WorkspaceImpl(null, 0); + + StringReader stringReader = new StringReader(xmlString); + XMLStreamReader reader = newXMLReader(stringReader); + provider.readXML(reader, destinationWorkspace); + reader.close(); + stringReader.close(); + return destinationWorkspace; + } + + private static String toString(WorkspaceXMLPersistenceProvider provider, Workspace workspace) + throws XMLStreamException, IOException { + StringWriter stringWriter = new StringWriter(); + XMLStreamWriter writer = newXMLWriter(stringWriter); + + String identifier = provider.getIdentifier(); + writer.writeStartDocument("UTF-8", "1.0"); + writer.writeStartElement(identifier); + provider.writeXML(writer, workspace); + writer.writeEndElement(); + writer.writeEndDocument(); + + writer.close(); + stringWriter.close(); + return stringWriter.toString(); + } + + public static XMLStreamReader newXMLReader(Reader reader) throws XMLStreamException { + XMLInputFactory inputFactory = XMLInputFactory.newInstance(); + if (inputFactory.isPropertySupported("javax.xml.stream.isValidating")) { + inputFactory.setProperty("javax.xml.stream.isValidating", Boolean.FALSE); + } + return inputFactory.createXMLStreamReader(reader); + } + + public static XMLStreamWriter newXMLWriter(Writer writer) throws XMLStreamException { + XMLOutputFactory outputFactory = XMLOutputFactory.newInstance(); + outputFactory.setProperty("javax.xml.stream.isRepairingNamespaces", Boolean.FALSE); + return outputFactory.createXMLStreamWriter(writer); + } +} diff --git a/modules/ProjectAPI/src/test/java/org/gephi/project/io/utils/MockXMLPersistenceProvider.java b/modules/ProjectAPI/src/test/java/org/gephi/project/io/utils/MockXMLPersistenceProvider.java new file mode 100644 index 0000000000..4a9cfe94a3 --- /dev/null +++ b/modules/ProjectAPI/src/test/java/org/gephi/project/io/utils/MockXMLPersistenceProvider.java @@ -0,0 +1,49 @@ +package org.gephi.project.io.utils; + +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; +import javax.xml.stream.XMLStreamWriter; +import javax.xml.stream.events.XMLEvent; +import org.gephi.project.api.Workspace; +import org.gephi.project.spi.WorkspaceXMLPersistenceProvider; + +public class MockXMLPersistenceProvider implements WorkspaceXMLPersistenceProvider { + + public static final String TXT = "txt"; + private String readText; + + public MockXMLPersistenceProvider() { + } + + @Override + public String getIdentifier() { + return "mock"; + } + + @Override + public void writeXML(XMLStreamWriter writer, Workspace workspace) { + try { + writer.writeCharacters(TXT); + } catch (XMLStreamException ex) { + throw new RuntimeException(ex); + } + } + + @Override + public void readXML(XMLStreamReader reader, Workspace workspace) { + try { + while (reader.hasNext()) { + Integer eventType = reader.next(); + if (eventType.equals(XMLEvent.CHARACTERS)) { + readText = reader.getText(); + } + } + } catch (XMLStreamException ex) { + throw new RuntimeException(ex); + } + } + + public String getReadText() { + return readText; + } +} diff --git a/modules/ProjectAPI/src/test/java/org/gephi/project/io/utils/MockXMLPersistenceProviderFailRead.java b/modules/ProjectAPI/src/test/java/org/gephi/project/io/utils/MockXMLPersistenceProviderFailRead.java new file mode 100644 index 0000000000..0aa9b927fc --- /dev/null +++ b/modules/ProjectAPI/src/test/java/org/gephi/project/io/utils/MockXMLPersistenceProviderFailRead.java @@ -0,0 +1,12 @@ +package org.gephi.project.io.utils; + +import javax.xml.stream.XMLStreamReader; +import org.gephi.project.api.Workspace; + +public class MockXMLPersistenceProviderFailRead extends MockXMLPersistenceProvider { + + @Override + public void readXML(XMLStreamReader reader, Workspace workspace) { + throw new RuntimeException("Failed to write"); + } +} diff --git a/modules/ProjectAPI/src/test/java/org/gephi/project/io/utils/MockXMLPersistenceProviderFailWrite.java b/modules/ProjectAPI/src/test/java/org/gephi/project/io/utils/MockXMLPersistenceProviderFailWrite.java new file mode 100644 index 0000000000..e6e9dbb434 --- /dev/null +++ b/modules/ProjectAPI/src/test/java/org/gephi/project/io/utils/MockXMLPersistenceProviderFailWrite.java @@ -0,0 +1,12 @@ +package org.gephi.project.io.utils; + +import javax.xml.stream.XMLStreamWriter; +import org.gephi.project.api.Workspace; + +public class MockXMLPersistenceProviderFailWrite extends MockXMLPersistenceProvider { + + @Override + public void writeXML(XMLStreamWriter writer, Workspace workspace) { + throw new RuntimeException("Failed to write"); + } +} diff --git a/modules/ProjectAPI/src/test/java/org/gephi/project/io/utils/Utils.java b/modules/ProjectAPI/src/test/java/org/gephi/project/io/utils/Utils.java new file mode 100644 index 0000000000..8e2e480299 --- /dev/null +++ b/modules/ProjectAPI/src/test/java/org/gephi/project/io/utils/Utils.java @@ -0,0 +1,31 @@ +package org.gephi.project.io.utils; + +import org.gephi.project.impl.ProjectControllerImpl; +import org.gephi.project.impl.ProjectImpl; +import org.gephi.project.impl.WorkspaceImpl; +import org.gephi.project.impl.WorkspaceProviderImpl; +import org.openide.util.Lookup; + +public class Utils { + + public static final String PROJECT_NAME = "Project"; + + public static ProjectImpl newProject() { + return new ProjectImpl(PROJECT_NAME); + } + + public static WorkspaceImpl newWorkspace() { + ProjectImpl project = newProject(); + WorkspaceImpl workspace = project.newWorkspace(); + project.setCurrentWorkspace(project.newWorkspace()); + return workspace; + } + + public static ProjectImpl getCurrentProject() { + return Lookup.getDefault().lookup(ProjectControllerImpl.class).getCurrentProject(); + } + + public static WorkspaceImpl getCurrentWorkspace(ProjectImpl project) { + return project.getLookup().lookup(WorkspaceProviderImpl.class).getCurrentWorkspace(); + } +} diff --git a/modules/ProjectUI/pom.xml b/modules/ProjectUI/pom.xml deleted file mode 100644 index 31435b1551..0000000000 --- a/modules/ProjectUI/pom.xml +++ /dev/null @@ -1,45 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <artifactId>gephi-parent</artifactId> - <groupId>org.gephi</groupId> - <version>0.9-SNAPSHOT</version> - <relativePath>../..</relativePath> - </parent> - - <groupId>org.gephi</groupId> - <artifactId>project-ui</artifactId> - <version>0.9-SNAPSHOT</version> - <packaging>nbm</packaging> - - <name>ProjectUI</name> - - <dependencies> - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>project-api</artifactId> - </dependency> - <dependency> - <groupId>org.netbeans.api</groupId> - <artifactId>org-openide-util-lookup</artifactId> - </dependency> - <dependency> - <groupId>org.netbeans.api</groupId> - <artifactId>org-openide-util</artifactId> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>nbm-maven-plugin</artifactId> - <configuration> - <publicPackages> - </publicPackages> - </configuration> - </plugin> - </plugins> - </build> -</project> diff --git a/modules/ProjectUI/src/main/java/org/gephi/ui/project/ProjectPropertiesEditor.java b/modules/ProjectUI/src/main/java/org/gephi/ui/project/ProjectPropertiesEditor.java deleted file mode 100644 index a99b882adf..0000000000 --- a/modules/ProjectUI/src/main/java/org/gephi/ui/project/ProjectPropertiesEditor.java +++ /dev/null @@ -1,235 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian <mathieu.bastian@gephi.org> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.ui.project; - -import org.gephi.project.api.Project; -import org.gephi.project.api.ProjectController; -import org.gephi.project.api.ProjectInformation; -import org.gephi.project.api.ProjectMetaData; -import org.openide.util.Lookup; - -/** - * - * @author Mathieu Bastian - */ -public class ProjectPropertiesEditor extends javax.swing.JPanel { - - /** Creates new form ProjectPropertiesEditor */ - public ProjectPropertiesEditor() { - initComponents(); - } - - public void load(Project project) { - ProjectInformation info = project.getLookup().lookup(ProjectInformation.class); - if (info != null) { - nameTextField.setText(info.getName()); - if (info.getFile() != null) { - fileLabel.setText(info.getFile().getName()); - } - } - - ProjectMetaData metaData = project.getLookup().lookup(ProjectMetaData.class); - if (metaData != null) { - titleTextField.setText(metaData.getTitle()); - authorTextField.setText(metaData.getAuthor()); - keywordsTextField.setText(metaData.getKeywords()); - descriptionTextArea.setText(metaData.getDescription()); - } - } - - public void save(Project project) { - ProjectInformation info = project.getLookup().lookup(ProjectInformation.class); - if (info != null) { - if (!nameTextField.getText().isEmpty() && !nameTextField.getText().equals(info.getName())) { - ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); - pc.renameProject(project, nameTextField.getText()); - } - } - ProjectMetaData metaData = project.getLookup().lookup(ProjectMetaData.class); - if (metaData != null) { - metaData.setTitle(titleTextField.getText()); - - metaData.setAuthor(authorTextField.getText()); - metaData.setKeywords(keywordsTextField.getText()); - metaData.setDescription(descriptionTextArea.getText()); - } - } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents - private void initComponents() { - - descriptionPanel = new javax.swing.JPanel(); - descriptionScrollPane = new javax.swing.JScrollPane(); - descriptionTextArea = new javax.swing.JTextArea(); - labelDescription = new javax.swing.JLabel(); - labelKeywords = new javax.swing.JLabel(); - keywordsTextField = new javax.swing.JTextField(); - authorTextField = new javax.swing.JTextField(); - labelAuthor = new javax.swing.JLabel(); - labelName = new javax.swing.JLabel(); - nameTextField = new javax.swing.JTextField(); - fileLabel = new javax.swing.JLabel(); - labelFile = new javax.swing.JLabel(); - labelTitle = new javax.swing.JLabel(); - titleTextField = new javax.swing.JTextField(); - - descriptionPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(ProjectPropertiesEditor.class, "ProjectPropertiesEditor.descriptionPanel.border.title"))); // NOI18N - - descriptionTextArea.setColumns(20); - descriptionTextArea.setRows(3); - descriptionScrollPane.setViewportView(descriptionTextArea); - - labelDescription.setText(org.openide.util.NbBundle.getMessage(ProjectPropertiesEditor.class, "ProjectPropertiesEditor.labelDescription.text")); // NOI18N - - labelKeywords.setText(org.openide.util.NbBundle.getMessage(ProjectPropertiesEditor.class, "ProjectPropertiesEditor.labelKeywords.text")); // NOI18N - - keywordsTextField.setText(org.openide.util.NbBundle.getMessage(ProjectPropertiesEditor.class, "ProjectPropertiesEditor.keywordsTextField.text")); // NOI18N - - authorTextField.setText(org.openide.util.NbBundle.getMessage(ProjectPropertiesEditor.class, "ProjectPropertiesEditor.authorTextField.text")); // NOI18N - - labelAuthor.setText(org.openide.util.NbBundle.getMessage(ProjectPropertiesEditor.class, "ProjectPropertiesEditor.labelAuthor.text")); // NOI18N - - labelName.setText(org.openide.util.NbBundle.getMessage(ProjectPropertiesEditor.class, "ProjectPropertiesEditor.labelName.text")); // NOI18N - - nameTextField.setText(org.openide.util.NbBundle.getMessage(ProjectPropertiesEditor.class, "ProjectPropertiesEditor.nameTextField.text")); // NOI18N - - fileLabel.setText(org.openide.util.NbBundle.getMessage(ProjectPropertiesEditor.class, "ProjectPropertiesEditor.fileLabel.text")); // NOI18N - - labelFile.setText(org.openide.util.NbBundle.getMessage(ProjectPropertiesEditor.class, "ProjectPropertiesEditor.labelFile.text")); // NOI18N - - labelTitle.setText(org.openide.util.NbBundle.getMessage(ProjectPropertiesEditor.class, "ProjectPropertiesEditor.labelTitle.text")); // NOI18N - - titleTextField.setText(org.openide.util.NbBundle.getMessage(ProjectPropertiesEditor.class, "ProjectPropertiesEditor.titleTextField.text")); // NOI18N - - javax.swing.GroupLayout descriptionPanelLayout = new javax.swing.GroupLayout(descriptionPanel); - descriptionPanel.setLayout(descriptionPanelLayout); - descriptionPanelLayout.setHorizontalGroup( - descriptionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(descriptionPanelLayout.createSequentialGroup() - .addContainerGap() - .addGroup(descriptionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(labelTitle) - .addComponent(labelAuthor) - .addComponent(labelFile) - .addComponent(labelName) - .addComponent(labelKeywords) - .addComponent(labelDescription)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(descriptionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(descriptionScrollPane, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 377, Short.MAX_VALUE) - .addComponent(fileLabel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 377, Short.MAX_VALUE) - .addComponent(nameTextField, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 377, Short.MAX_VALUE) - .addComponent(keywordsTextField, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 377, Short.MAX_VALUE) - .addComponent(authorTextField, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 377, Short.MAX_VALUE) - .addComponent(titleTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 377, Short.MAX_VALUE)) - .addContainerGap()) - ); - descriptionPanelLayout.setVerticalGroup( - descriptionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(descriptionPanelLayout.createSequentialGroup() - .addContainerGap() - .addGroup(descriptionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(fileLabel) - .addComponent(labelFile)) - .addGap(12, 12, 12) - .addGroup(descriptionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(nameTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelName)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(descriptionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(labelTitle) - .addComponent(titleTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(descriptionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(labelAuthor) - .addComponent(authorTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(descriptionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(keywordsTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelKeywords)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(descriptionPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(labelDescription) - .addComponent(descriptionScrollPane, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(24, Short.MAX_VALUE)) - ); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(descriptionPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addContainerGap()) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(descriptionPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(148, Short.MAX_VALUE)) - ); - }// </editor-fold>//GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JTextField authorTextField; - private javax.swing.JPanel descriptionPanel; - private javax.swing.JScrollPane descriptionScrollPane; - private javax.swing.JTextArea descriptionTextArea; - private javax.swing.JLabel fileLabel; - private javax.swing.JTextField keywordsTextField; - private javax.swing.JLabel labelAuthor; - private javax.swing.JLabel labelDescription; - private javax.swing.JLabel labelFile; - private javax.swing.JLabel labelKeywords; - private javax.swing.JLabel labelName; - private javax.swing.JLabel labelTitle; - private javax.swing.JTextField nameTextField; - private javax.swing.JTextField titleTextField; - // End of variables declaration//GEN-END:variables -} diff --git a/modules/ProjectUI/src/main/java/org/gephi/ui/project/ProjectPropertiesUIImpl.java b/modules/ProjectUI/src/main/java/org/gephi/ui/project/ProjectPropertiesUIImpl.java deleted file mode 100644 index f025a21e4e..0000000000 --- a/modules/ProjectUI/src/main/java/org/gephi/ui/project/ProjectPropertiesUIImpl.java +++ /dev/null @@ -1,71 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian <mathieu.bastian@gephi.org> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.ui.project; - -import javax.swing.JPanel; -import org.gephi.project.api.Project; -import org.gephi.project.spi.ProjectPropertiesUI; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = ProjectPropertiesUI.class) -public class ProjectPropertiesUIImpl implements ProjectPropertiesUI { - - private ProjectPropertiesEditor panel; - - public JPanel getPanel() { - panel = new ProjectPropertiesEditor(); - return panel; - } - - public void setup(Project project) { - panel.load(project); - } - - public void unsetup(Project project) { - panel.save(project); - panel = null; - } -} diff --git a/modules/ProjectUI/src/main/nbm/manifest.mf b/modules/ProjectUI/src/main/nbm/manifest.mf deleted file mode 100644 index ccf5481aed..0000000000 --- a/modules/ProjectUI/src/main/nbm/manifest.mf +++ /dev/null @@ -1,4 +0,0 @@ -Manifest-Version: 1.0 -AutoUpdate-Essential-Module: true -OpenIDE-Module-Localizing-Bundle: org/gephi/ui/project/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file diff --git a/modules/ProjectUI/src/main/nbm/module.xml b/modules/ProjectUI/src/main/nbm/module.xml deleted file mode 100644 index e8e5bc004c..0000000000 --- a/modules/ProjectUI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<nbm> - <!-- - <moduleType>autoload</moduleType> - <codeNameBase>org.gephi.ui.project/1</codeNameBase> - <licenseName>Apache License, Version 2.0</licenseName> - <licenseFile>license.txt</licenseFile> - --> -</nbm> diff --git a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/Bundle.properties b/modules/ProjectUI/src/main/resources/org/gephi/ui/project/Bundle.properties deleted file mode 100644 index d069061993..0000000000 --- a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/Bundle.properties +++ /dev/null @@ -1,17 +0,0 @@ -OpenIDE-Module-Display-Category=Gephi UI -OpenIDE-Module-Name=Project UI -OpenIDE-Module-Short-Description=Project management UI -ProjectPropertiesEditor.labelName.text=Name: -ProjectPropertiesEditor.labelAuthor.text=Author: -ProjectPropertiesEditor.authorTextField.text= -ProjectPropertiesEditor.keywordsTextField.text= -ProjectPropertiesEditor.labelKeywords.text=Keywords: -ProjectPropertiesEditor.titleTextField.text= -ProjectPropertiesEditor.labelDescription.text=Description: -ProjectPropertiesEditor.labelTitle.text=Title: -ProjectPropertiesEditor.nameTextField.text= -ProjectPropertiesEditor.descriptionPanel.border.title=Description - -ProjectPropertiesEditor.fileLabel.text= - -ProjectPropertiesEditor.labelFile.text=File: diff --git a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/Bundle_cs.properties b/modules/ProjectUI/src/main/resources/org/gephi/ui/project/Bundle_cs.properties deleted file mode 100644 index 57387b2a69..0000000000 --- a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/Bundle_cs.properties +++ /dev/null @@ -1,23 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz <zbynek.schwarz@gmail.com>, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-15 21\:18+0000\nLast-Translator\: Zbyn\u011bk Schwarz <zbynek.schwarz@gmail.com>\nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Short-Description=Rozhran\u00ed spr\u00e1vy projektu - -ProjectPropertiesEditor.labelName.text=Jm\u00e9no\: - -ProjectPropertiesEditor.labelAuthor.text=Autor\: - -ProjectPropertiesEditor.labelKeywords.text=Kl\u00ed\u010dov\u00e1 slova\: - -ProjectPropertiesEditor.labelDescription.text=Popis\: - -ProjectPropertiesEditor.labelTitle.text=N\u00e1zev\: - -ProjectPropertiesEditor.descriptionPanel.border.title=Popis - -ProjectPropertiesEditor.labelFile.text=Soubor\: diff --git a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/Bundle_es.properties b/modules/ProjectUI/src/main/resources/org/gephi/ui/project/Bundle_es.properties deleted file mode 100644 index ca00fa21e8..0000000000 --- a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/Bundle_es.properties +++ /dev/null @@ -1,23 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:59+0000\nLast-Translator\: gephi <sebastien.heymann@gmail.com>\nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Short-Description=Interfaz de usuario de gesti\u00f3n de proyecto - -ProjectPropertiesEditor.labelName.text=Nombre\: - -ProjectPropertiesEditor.labelAuthor.text=Autor\: - -ProjectPropertiesEditor.labelKeywords.text=Palabras clave\: - -ProjectPropertiesEditor.labelDescription.text=Descripci\u00f3n\: - -ProjectPropertiesEditor.labelTitle.text=T\u00edtulo\: - -ProjectPropertiesEditor.descriptionPanel.border.title=Descripci\u00f3n - -ProjectPropertiesEditor.labelFile.text=Archivo\: diff --git a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/Bundle_fr.properties b/modules/ProjectUI/src/main/resources/org/gephi/ui/project/Bundle_fr.properties deleted file mode 100644 index b56e8ccb09..0000000000 --- a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/Bundle_fr.properties +++ /dev/null @@ -1,23 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:59+0000\nLast-Translator\: gephi <sebastien.heymann@gmail.com>\nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Interface utilisateur de gestion de projet - -ProjectPropertiesEditor.labelName.text=Nom \: - -ProjectPropertiesEditor.labelAuthor.text=Auteur \: - -ProjectPropertiesEditor.labelKeywords.text=Mots cl\u00e9s \: - -ProjectPropertiesEditor.labelDescription.text=Description \: - -ProjectPropertiesEditor.labelTitle.text=Titre \: - -ProjectPropertiesEditor.descriptionPanel.border.title=Description - -ProjectPropertiesEditor.labelFile.text=Fichier \: diff --git a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/Bundle_ja.properties b/modules/ProjectUI/src/main/resources/org/gephi/ui/project/Bundle_ja.properties deleted file mode 100644 index d7e82a176c..0000000000 --- a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/Bundle_ja.properties +++ /dev/null @@ -1,23 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida <kida.siro@gmail.com>, 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-11 09\:47+0000\nLast-Translator\: Siro Kida <kida.siro@gmail.com>\nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u7ba1\u7406UI - -ProjectPropertiesEditor.labelName.text=\u540d\u524d\: - -ProjectPropertiesEditor.labelAuthor.text=\u5236\u4f5c\u8005\: - -ProjectPropertiesEditor.labelKeywords.text=\u30ad\u30fc\u30ef\u30fc\u30c9\: - -ProjectPropertiesEditor.labelDescription.text=\u8a18\u8ff0\: - -ProjectPropertiesEditor.labelTitle.text=\u30bf\u30a4\u30c8\u30eb\: - -ProjectPropertiesEditor.descriptionPanel.border.title=\u8a18\u8ff0 - -ProjectPropertiesEditor.labelFile.text=\u30d5\u30a1\u30a4\u30eb\: diff --git a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/Bundle_pt_BR.properties b/modules/ProjectUI/src/main/resources/org/gephi/ui/project/Bundle_pt_BR.properties deleted file mode 100644 index 9de643eb30..0000000000 --- a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/Bundle_pt_BR.properties +++ /dev/null @@ -1,23 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr <celiofariajr@gmail.com>, 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 00\:10+0000\nLast-Translator\: C\u00e9lio Faria Jr. <celiofariajr@gmail.com>\nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Interface de usu\u00e1rio de gerenciamento de projetos - -ProjectPropertiesEditor.labelName.text=Nome\: - -ProjectPropertiesEditor.labelAuthor.text=Autor\: - -ProjectPropertiesEditor.labelKeywords.text=Palavras-chave\: - -ProjectPropertiesEditor.labelDescription.text=Descri\u00e7\u00e3o\: - -ProjectPropertiesEditor.labelTitle.text=T\u00edtulo\: - -ProjectPropertiesEditor.descriptionPanel.border.title=Descri\u00e7\u00e3o - -ProjectPropertiesEditor.labelFile.text=Arquivo\: diff --git a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/Bundle_ru.properties b/modules/ProjectUI/src/main/resources/org/gephi/ui/project/Bundle_ru.properties deleted file mode 100644 index bad8978d27..0000000000 --- a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/Bundle_ru.properties +++ /dev/null @@ -1,23 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# <altsoph@gmail.com>, 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-08 06\:21+0000\nLast-Translator\: Altsoph <altsoph@gmail.com>\nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Short-Description=Project management UI - -ProjectPropertiesEditor.labelName.text=\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\: - -ProjectPropertiesEditor.labelAuthor.text=\u0410\u0432\u0442\u043e\u0440\: - -ProjectPropertiesEditor.labelKeywords.text=\u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u0441\u043b\u043e\u0432\u0430\: - -ProjectPropertiesEditor.labelDescription.text=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435\: - -ProjectPropertiesEditor.labelTitle.text=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a\: - -ProjectPropertiesEditor.descriptionPanel.border.title=\u041e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 - -ProjectPropertiesEditor.labelFile.text=\u0424\u0430\u0439\u043b\: diff --git a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/Bundle_zh_CN.properties b/modules/ProjectUI/src/main/resources/org/gephi/ui/project/Bundle_zh_CN.properties deleted file mode 100644 index 2e23423eae..0000000000 --- a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/Bundle_zh_CN.properties +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:08+0000\nLast-Translator\: gephi <sebastien.heymann@gmail.com>\nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u9879\u76ee\u7ba1\u7406UI - -ProjectPropertiesEditor.labelName.text=\u540d\u79f0\: - -ProjectPropertiesEditor.labelAuthor.text=\u4f5c\u8005\: - -ProjectPropertiesEditor.labelKeywords.text=\u5173\u952e\u8bcd\: - -ProjectPropertiesEditor.labelDescription.text=\u8bf4\u660e\: - -ProjectPropertiesEditor.labelTitle.text=\u6807\u9898\: - -ProjectPropertiesEditor.descriptionPanel.border.title=\u8bf4\u660e - -ProjectPropertiesEditor.labelFile.text=\u6587\u4ef6\: diff --git a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/cs.po b/modules/ProjectUI/src/main/resources/org/gephi/ui/project/cs.po deleted file mode 100644 index e0d955be1a..0000000000 --- a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/cs.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz <zbynek.schwarz@gmail.com>, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-15 21:18+0000\n" -"Last-Translator: ZbynΔ›k Schwarz <zbynek.schwarz@gmail.com>\n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "RozhranΓ­ sprΓ‘vy projektu" - -msgid "ProjectPropertiesEditor.labelName.text" -msgstr "JmΓ©no:" - -msgid "ProjectPropertiesEditor.labelAuthor.text" -msgstr "Autor:" - -msgid "ProjectPropertiesEditor.labelKeywords.text" -msgstr "KlíčovΓ‘ slova:" - -msgid "ProjectPropertiesEditor.labelDescription.text" -msgstr "Popis:" - -msgid "ProjectPropertiesEditor.labelTitle.text" -msgstr "NΓ‘zev:" - -msgid "ProjectPropertiesEditor.descriptionPanel.border.title" -msgstr "Popis" - -msgid "ProjectPropertiesEditor.labelFile.text" -msgstr "Soubor:" diff --git a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/es.po b/modules/ProjectUI/src/main/resources/org/gephi/ui/project/es.po deleted file mode 100644 index 65c401ff1c..0000000000 --- a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/es.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:59+0000\n" -"Last-Translator: gephi <sebastien.heymann@gmail.com>\n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interfaz de usuario de gestiΓ³n de proyecto" - -msgid "ProjectPropertiesEditor.labelName.text" -msgstr "Nombre:" - -msgid "ProjectPropertiesEditor.labelAuthor.text" -msgstr "Autor:" - -msgid "ProjectPropertiesEditor.labelKeywords.text" -msgstr "Palabras clave:" - -msgid "ProjectPropertiesEditor.labelDescription.text" -msgstr "DescripciΓ³n:" - -msgid "ProjectPropertiesEditor.labelTitle.text" -msgstr "TΓ­tulo:" - -msgid "ProjectPropertiesEditor.descriptionPanel.border.title" -msgstr "DescripciΓ³n" - -msgid "ProjectPropertiesEditor.labelFile.text" -msgstr "Archivo:" diff --git a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/fr.po b/modules/ProjectUI/src/main/resources/org/gephi/ui/project/fr.po deleted file mode 100644 index d72cd45645..0000000000 --- a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/fr.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:59+0000\n" -"Last-Translator: gephi <sebastien.heymann@gmail.com>\n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interface utilisateur de gestion de projet" - -msgid "ProjectPropertiesEditor.labelName.text" -msgstr "Nom :" - -msgid "ProjectPropertiesEditor.labelAuthor.text" -msgstr "Auteur :" - -msgid "ProjectPropertiesEditor.labelKeywords.text" -msgstr "Mots clΓ©s :" - -msgid "ProjectPropertiesEditor.labelDescription.text" -msgstr "Description :" - -msgid "ProjectPropertiesEditor.labelTitle.text" -msgstr "Titre :" - -msgid "ProjectPropertiesEditor.descriptionPanel.border.title" -msgstr "Description" - -msgid "ProjectPropertiesEditor.labelFile.text" -msgstr "Fichier :" diff --git a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/ja.po b/modules/ProjectUI/src/main/resources/org/gephi/ui/project/ja.po deleted file mode 100644 index c16d9c8f30..0000000000 --- a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/ja.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida <kida.siro@gmail.com>, 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-11 09:47+0000\n" -"Last-Translator: Siro Kida <kida.siro@gmail.com>\n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "γƒ—γƒ­γ‚Έγ‚§γ‚―γƒˆη‘理UI" - -msgid "ProjectPropertiesEditor.labelName.text" -msgstr "名前:" - -msgid "ProjectPropertiesEditor.labelAuthor.text" -msgstr "εˆΆδ½œθ€…:" - -msgid "ProjectPropertiesEditor.labelKeywords.text" -msgstr "キーワード:" - -msgid "ProjectPropertiesEditor.labelDescription.text" -msgstr "記述:" - -msgid "ProjectPropertiesEditor.labelTitle.text" -msgstr "γ‚Ώγ‚€γƒˆγƒ«:" - -msgid "ProjectPropertiesEditor.descriptionPanel.border.title" -msgstr "記述" - -msgid "ProjectPropertiesEditor.labelFile.text" -msgstr "フゑむル:" diff --git a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/org-gephi-ui-project.pot b/modules/ProjectUI/src/main/resources/org/gephi/ui/project/org-gephi-ui-project.pot deleted file mode 100644 index d4146e17de..0000000000 --- a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/org-gephi-ui-project.pot +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team <gephi.team@lists.launchpad.net>, 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian <gephi.team@lists.launchpad.net>\n" -"Language-Team: English <https://launchpad.net/~gephi.team>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Project management UI" - -msgid "ProjectPropertiesEditor.labelName.text" -msgstr "Name:" - -msgid "ProjectPropertiesEditor.labelAuthor.text" -msgstr "Author:" - -msgid "ProjectPropertiesEditor.labelKeywords.text" -msgstr "Keywords:" - -msgid "ProjectPropertiesEditor.labelDescription.text" -msgstr "Description:" - -msgid "ProjectPropertiesEditor.labelTitle.text" -msgstr "Title:" - -msgid "ProjectPropertiesEditor.descriptionPanel.border.title" -msgstr "Description" - -msgid "ProjectPropertiesEditor.labelFile.text" -msgstr "File:" diff --git a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/pt_BR.po b/modules/ProjectUI/src/main/resources/org/gephi/ui/project/pt_BR.po deleted file mode 100644 index 9b84b5e508..0000000000 --- a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/pt_BR.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr <celiofariajr@gmail.com>, 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 00:10+0000\n" -"Last-Translator: CΓ©lio Faria Jr. <celiofariajr@gmail.com>\n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interface de usuΓ‘rio de gerenciamento de projetos " - -msgid "ProjectPropertiesEditor.labelName.text" -msgstr "Nome:" - -msgid "ProjectPropertiesEditor.labelAuthor.text" -msgstr "Autor:" - -msgid "ProjectPropertiesEditor.labelKeywords.text" -msgstr "Palavras-chave:" - -msgid "ProjectPropertiesEditor.labelDescription.text" -msgstr "DescriΓ§Γ£o:" - -msgid "ProjectPropertiesEditor.labelTitle.text" -msgstr "TΓ­tulo:" - -msgid "ProjectPropertiesEditor.descriptionPanel.border.title" -msgstr "DescriΓ§Γ£o" - -msgid "ProjectPropertiesEditor.labelFile.text" -msgstr "Arquivo:" diff --git a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/ru.po b/modules/ProjectUI/src/main/resources/org/gephi/ui/project/ru.po deleted file mode 100644 index 7bf8cbe89d..0000000000 --- a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/ru.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# <altsoph@gmail.com>, 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-08 06:21+0000\n" -"Last-Translator: Altsoph <altsoph@gmail.com>\n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Project management UI" - -msgid "ProjectPropertiesEditor.labelName.text" -msgstr "НазваниС:" - -msgid "ProjectPropertiesEditor.labelAuthor.text" -msgstr "Автор:" - -msgid "ProjectPropertiesEditor.labelKeywords.text" -msgstr "ΠšΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ слова:" - -msgid "ProjectPropertiesEditor.labelDescription.text" -msgstr "ОписаниС:" - -msgid "ProjectPropertiesEditor.labelTitle.text" -msgstr "Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ:" - -msgid "ProjectPropertiesEditor.descriptionPanel.border.title" -msgstr "ОписаниС" - -msgid "ProjectPropertiesEditor.labelFile.text" -msgstr "Π€Π°ΠΉΠ»:" diff --git a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/zh_CN.po b/modules/ProjectUI/src/main/resources/org/gephi/ui/project/zh_CN.po deleted file mode 100644 index 066480df8d..0000000000 --- a/modules/ProjectUI/src/main/resources/org/gephi/ui/project/zh_CN.po +++ /dev/null @@ -1,42 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:08+0000\n" -"Last-Translator: gephi <sebastien.heymann@gmail.com>\n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ι‘Ήη›η‘理UI" - -msgid "ProjectPropertiesEditor.labelName.text" -msgstr "名称:" - -msgid "ProjectPropertiesEditor.labelAuthor.text" -msgstr "δ½œθ€…:" - -msgid "ProjectPropertiesEditor.labelKeywords.text" -msgstr "ε…³ι”词:" - -msgid "ProjectPropertiesEditor.labelDescription.text" -msgstr "说明:" - -msgid "ProjectPropertiesEditor.labelTitle.text" -msgstr "ζ ‡ι’˜:" - -msgid "ProjectPropertiesEditor.descriptionPanel.border.title" -msgstr "说明" - -msgid "ProjectPropertiesEditor.labelFile.text" -msgstr "ζ–‡δ»Ά:" diff --git a/modules/RankingAPI/pom.xml b/modules/RankingAPI/pom.xml deleted file mode 100644 index c9d33861ac..0000000000 --- a/modules/RankingAPI/pom.xml +++ /dev/null @@ -1,52 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <artifactId>gephi-parent</artifactId> - <groupId>org.gephi</groupId> - <version>0.9-SNAPSHOT</version> - <relativePath>../..</relativePath> - </parent> - - <groupId>org.gephi</groupId> - <artifactId>ranking-api</artifactId> - <version>0.9-SNAPSHOT</version> - <packaging>nbm</packaging> - - <name>RankingAPI</name> - - <dependencies> - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>graph-api</artifactId> - </dependency> - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>project-api</artifactId> - </dependency> - <dependency> - <groupId>org.netbeans.api</groupId> - <artifactId>org-openide-util</artifactId> - </dependency> - <dependency> - <groupId>org.netbeans.api</groupId> - <artifactId>org-openide-util-lookup</artifactId> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>nbm-maven-plugin</artifactId> - <configuration> - <publicPackages> - <publicPackage>org.gephi.ranking.api</publicPackage> - <publicPackage>org.gephi.ranking.impl</publicPackage> - <publicPackage>org.gephi.ranking.spi</publicPackage> - </publicPackages> - </configuration> - </plugin> - </plugins> - </build> -</project> diff --git a/modules/RankingAPI/src/main/java/org/gephi/ranking/ColumnObserver.java b/modules/RankingAPI/src/main/java/org/gephi/ranking/ColumnObserver.java deleted file mode 100644 index 0307a2ed9a..0000000000 --- a/modules/RankingAPI/src/main/java/org/gephi/ranking/ColumnObserver.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian, Mathieu Jacomy, Julian Bilcke - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ranking; - -import java.util.Timer; -import java.util.TimerTask; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.graph.api.GraphController; -import org.gephi.ranking.api.RankingEvent; -import org.openide.util.Lookup; - -/** - * - * @author mbastian - */ -public class ColumnObserver extends TimerTask { - - private static final int INTERVAL = 1000; - private final Timer timer; - private final RankingModelImpl model; - private final AttributeModel attributeModel; - //Hashcodes - private int nodeTableHash; - private int edgeTableHash; - - public ColumnObserver(RankingModelImpl rankingModel) { - timer = new Timer("RankingColumnObserver", true); - model = rankingModel; - - GraphController graphController = Lookup.getDefault().lookup(GraphController.class); - - attributeModel = graphController.getAttributeModel(rankingModel.getWorkspace()); - nodeTableHash = attributeModel.getNodeTable().hashCode(); - edgeTableHash = attributeModel.getEdgeTable().hashCode(); - } - - @Override - public void run() { - boolean changed = false; - int nodeHash = attributeModel.getNodeTable().hashCode(); - if (nodeHash != nodeTableHash) { - changed = true; - } - nodeTableHash = nodeHash; - - int edgeHash = attributeModel.getEdgeTable().hashCode(); - if (edgeHash != edgeTableHash) { - changed = true; - } - edgeTableHash = edgeHash; - - if (changed) { - RankingEvent rankingEvent = new RankingEventImpl(RankingEvent.EventType.REFRESH_RANKING, model); - model.fireRankingListener(rankingEvent); - } - } - - public void start() { - timer.schedule(this, INTERVAL, INTERVAL); - } - - public void stop() { - timer.cancel(); - } -} diff --git a/modules/RankingAPI/src/main/java/org/gephi/ranking/GraphViewObserver.java b/modules/RankingAPI/src/main/java/org/gephi/ranking/GraphViewObserver.java deleted file mode 100644 index 1c3280502e..0000000000 --- a/modules/RankingAPI/src/main/java/org/gephi/ranking/GraphViewObserver.java +++ /dev/null @@ -1,91 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian, Mathieu Jacomy, Julian Bilcke - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ranking; - -import java.util.Timer; -import java.util.TimerTask; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.GraphModel; -import org.gephi.ranking.api.RankingEvent; -import org.openide.util.Lookup; - -/** - * - * @author mbastian - */ -public class GraphViewObserver extends TimerTask { - - private static final int INTERVAL = 1000; - private final Timer timer; - private final RankingModelImpl model; - private final GraphModel graphModel; - //Hashcodes - private int viewHash; - - public GraphViewObserver(RankingModelImpl rankingModel) { - timer = new Timer("RankingGraphViewObserver", true); - model = rankingModel; - - GraphController graphController = Lookup.getDefault().lookup(GraphController.class); - - graphModel = graphController.getGraphModel(rankingModel.getWorkspace()); - viewHash = graphModel.getVisibleView().hashCode(); - } - - @Override - public void run() { - int hash = graphModel.getVisibleView().hashCode(); - if (hash != viewHash) { - RankingEvent rankingEvent = new RankingEventImpl(RankingEvent.EventType.REFRESH_VIEW, model); - model.fireRankingListener(rankingEvent); - viewHash = hash; - } - } - - public void start() { - timer.schedule(this, INTERVAL, INTERVAL); - } - - public void stop() { - timer.cancel(); - } -} diff --git a/modules/RankingAPI/src/main/java/org/gephi/ranking/RankingAutoTransformer.java b/modules/RankingAPI/src/main/java/org/gephi/ranking/RankingAutoTransformer.java deleted file mode 100644 index 1b4df96f0b..0000000000 --- a/modules/RankingAPI/src/main/java/org/gephi/ranking/RankingAutoTransformer.java +++ /dev/null @@ -1,180 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian, Mathieu Jacomy, Julian Bilcke - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ranking; - -/** - * Scheduled thread executor executing the ranking at a fixed delay. - * - * @author Mathieu Bastian - */ -public class RankingAutoTransformer implements Runnable { -// private static final long DEFAULT_DELAY = 500; //ms -// private ScheduledExecutorService executor; -// private final RankingModelImpl model; -// private final GraphController graphController; -// private final DynamicController dynamicController; -// private final AttributeModel attributeModel; -// private final GraphModel graphModel; -// private final DynamicModel dynamicModel; -// //Verisonning states -// private int lastView = -1; -// private int lastVersion = -1; -// private boolean lastLocalScaleFlag = false; -// private TimeInterval lastTimeInterval = null; -// private boolean valueChanged = false; -// private Interpolator lastInterpolator; -// - - public RankingAutoTransformer(RankingModelImpl model) { -// this.model = model; -// graphController = Lookup.getDefault().lookup(GraphController.class); -// graphModel = graphController.getGraphModel(model.getWorkspace()); -// dynamicController = Lookup.getDefault().lookup(DynamicController.class); -// attributeModel = Lookup.getDefault().lookup(AttributeController.class).getModel(model.getWorkspace()); -// dynamicModel = dynamicController.getModel(model.getWorkspace()); -// lastLocalScaleFlag = model.useLocalScale(); - } -// - - public void start() { -// if (executor == null) { -// //Attribute listening -// attributeModel.addAttributeListener(this); -// lastInterpolator = model.getInterpolator(); -// lastLocalScaleFlag = model.useLocalScale(); -// -// executor = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() { -// @Override -// public Thread newThread(Runnable r) { -// Thread t = new Thread(r, "Ranking Auto Transformer"); -// return t; -// } -// }); -// executor.scheduleWithFixedDelay(this, 0, getDelayInMs(), TimeUnit.MILLISECONDS); -// } - } -// - - public void stop() { -// //Attribute stop listening -// attributeModel.removeAttributeListener(this); -// lastVersion = -1; -// lastView = -1; -// lastTimeInterval = null; -// valueChanged = false; -// lastLocalScaleFlag = model.useLocalScale(); -// -// if (executor != null && !executor.isShutdown()) { -// executor.shutdown(); -// executor = null; -// } - } -// - - @Override - public void run() { -// Graph graph = graphModel.getGraphVisible(); -// int nodeVersion = graph.getNodeVersion(); -// int edgeVersion = graph.getEdgeVersion(); -// int viewId = graphModel.getVisibleView().getViewId(); -// Interpolator interpolator = model.getInterpolator(); -// TimeInterval timeInterval = dynamicModel.getVisibleInterval(); -// boolean localScale = model.useLocalScale(); -// -// //Test if something changed -// if (viewId == lastView -// && (nodeVersion + edgeVersion) == lastVersion -// && !valueChanged -// && lastInterpolator.equals(interpolator) -// && ((timeInterval == null && lastTimeInterval == null) || timeInterval.equals(lastTimeInterval)) -// && localScale == lastLocalScaleFlag) { -// return; -// } -// lastView = viewId; -// lastVersion = edgeVersion + nodeVersion; -// valueChanged = false; -// lastInterpolator = interpolator; -// lastTimeInterval = timeInterval; -// lastLocalScaleFlag = localScale; -// -// for (RankingModelImpl.AutoRanking autoRanking : model.getAutoRankings()) { -// -// Ranking ranking = autoRanking.getRanking(); -// Transformer transformer = autoRanking.getTransformer(); -// -// if (ranking.getElementType().equals(Ranking.NODE_ELEMENT)) { -// for (Node node : graph.getNodes().toArray()) { -// Number value = ranking.getValue(node); -// if (value != null) { -// float normalizedValue = ranking.normalize(value); -// if (transformer.isInBounds(normalizedValue)) { -// normalizedValue = interpolator.interpolate(normalizedValue); -// transformer.transform(node.getNodeData(), normalizedValue); -// } -// } -// } -// } else if (ranking.getElementType().equals(Ranking.EDGE_ELEMENT)) { -// for (Edge edge : graph.getEdgesAndMetaEdges().toArray()) { -// Number value = ranking.getValue(edge); -// if (value != null) { -// float normalizedValue = ranking.normalize(value); -// if (transformer.isInBounds(normalizedValue)) { -// normalizedValue = interpolator.interpolate(normalizedValue); -// transformer.transform(edge.getEdgeData(), normalizedValue); -// } -// } -// } -// } -// } - } -// -// public void attributesChanged(AttributeEvent event) { -// if (event.getEventType().equals(AttributeEvent.EventType.SET_VALUE)) { -// valueChanged = true; -// } -// } -// -// private long getDelayInMs() { -// long defaultDelay = NbPreferences.forModule(RankingAutoTransformer.class).getLong("Ranking_Auto_Transformer_Default_Delay", DEFAULT_DELAY); -// return NbPreferences.forModule(RankingAutoTransformer.class).getLong("Ranking_Auto_Transformer_Delay", defaultDelay); -// } -} diff --git a/modules/RankingAPI/src/main/java/org/gephi/ranking/RankingControllerImpl.java b/modules/RankingAPI/src/main/java/org/gephi/ranking/RankingControllerImpl.java deleted file mode 100644 index 960bd96a29..0000000000 --- a/modules/RankingAPI/src/main/java/org/gephi/ranking/RankingControllerImpl.java +++ /dev/null @@ -1,201 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian <mathieu.bastian@gephi.org> - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ranking; - -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.Graph; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.GraphModel; -import org.gephi.graph.api.Node; -import org.gephi.project.api.ProjectController; -import org.gephi.project.api.Workspace; -import org.gephi.project.api.WorkspaceListener; -import org.gephi.ranking.api.Interpolator; -import org.gephi.ranking.api.Ranking; -import org.gephi.ranking.api.RankingController; -import org.gephi.ranking.api.RankingEvent; -import org.gephi.ranking.api.RankingModel; -import org.gephi.ranking.api.Transformer; -import org.openide.util.Lookup; -import org.openide.util.lookup.ServiceProvider; - -/** - * Implementation of the - * <code>RankingController</code> interface. - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = RankingController.class) -public class RankingControllerImpl implements RankingController { - - private final GraphController graphController; - private RankingModelImpl model; - - public RankingControllerImpl() { - graphController = Lookup.getDefault().lookup(GraphController.class); - - //Workspace events - ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); - pc.addWorkspaceListener(new WorkspaceListener() { - @Override - public void initialize(Workspace workspace) { - } - - @Override - public void select(Workspace workspace) { - model = workspace.getLookup().lookup(RankingModelImpl.class); - if (model == null) { - model = new RankingModelImpl(workspace); - workspace.add(model); - } - model.select(); - } - - @Override - public void unselect(Workspace workspace) { - model.unselect(); - model = null; - } - - @Override - public void close(Workspace workspace) { - } - - @Override - public void disable() { - model = null; - } - }); - - if (pc.getCurrentWorkspace() != null) { - model = pc.getCurrentWorkspace().getLookup().lookup(RankingModelImpl.class); - if (model == null) { - model = new RankingModelImpl(pc.getCurrentWorkspace()); - pc.getCurrentWorkspace().add(model); - } - } - } - - @Override - public RankingModel getModel() { - return model; - } - - @Override - public RankingModel getModel(Workspace workspace) { - RankingModel m = workspace.getLookup().lookup(RankingModelImpl.class); - if (m == null) { - m = new RankingModelImpl(workspace); - workspace.add(m); - } - return m; - } - - @Override - public void setInterpolator(Interpolator interpolator) { - if (model != null) { - model.setInterpolator(interpolator); - } - } - - @Override - public void setUseLocalScale(boolean useLocalScale) { - if (model != null) { - model.setLocalScale(useLocalScale); - } - } - - @Override - public void transform(Ranking ranking, Transformer transformer) { - //Refresh ranking - ranking = model.getRanking(ranking.getElementType(), ranking.getName()); - - Workspace workspace = model.getWorkspace(); - GraphModel graphModel = graphController.getGraphModel(workspace); - Graph graph = graphModel.getGraphVisible(); - Interpolator interpolator = model.getInterpolator(); - - if (ranking.getElementType().equals(Ranking.NODE_ELEMENT)) { - for (Node node : graph.getNodes()) { - Number value = ranking.getValue(node); - if (value != null) { - float normalizedValue = ranking.normalize(value); - if (transformer.isInBounds(normalizedValue)) { - normalizedValue = interpolator.interpolate(normalizedValue); - transformer.transform(node, normalizedValue); - } - } - } - } else if (ranking.getElementType().equals(Ranking.EDGE_ELEMENT)) { - for (Edge edge : graph.getEdges()) { - Number value = ranking.getValue(edge); - if (value != null) { - float normalizedValue = ranking.normalize(value); - if (transformer.isInBounds(normalizedValue)) { - normalizedValue = interpolator.interpolate(normalizedValue); - transformer.transform(edge, normalizedValue); - } - } - } - } - - //Send Event - model.fireRankingListener(new RankingEventImpl(RankingEvent.EventType.APPLY_TRANSFORMER, model, ranking, transformer)); - } - - @Override - public void startAutoTransform(Ranking ranking, Transformer transformer) { - model.addAutoRanking(ranking, transformer); - - //Send Event - model.fireRankingListener(new RankingEventImpl(RankingEvent.EventType.START_AUTO_TRANSFORM, model, ranking, transformer)); - } - - @Override - public void stopAutoTransform(Transformer transformer) { - Ranking ranking = model.getAutoTransformerRanking(transformer); - model.removeAutoRanking(transformer); - - //Send Event - model.fireRankingListener(new RankingEventImpl(RankingEvent.EventType.STOP_AUTO_TRANSFORM, model, ranking, transformer)); - } -} diff --git a/modules/RankingAPI/src/main/java/org/gephi/ranking/RankingEventImpl.java b/modules/RankingAPI/src/main/java/org/gephi/ranking/RankingEventImpl.java deleted file mode 100644 index bcc8855363..0000000000 --- a/modules/RankingAPI/src/main/java/org/gephi/ranking/RankingEventImpl.java +++ /dev/null @@ -1,101 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian <mathieu.bastian@gephi.org> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ranking; - -import org.gephi.ranking.api.Ranking; -import org.gephi.ranking.api.RankingEvent; -import org.gephi.ranking.api.RankingModel; -import org.gephi.ranking.api.Transformer; - -/** - * Implementation of the <code>RankingEvent</code> interface. - * - * @author Mathieu Bastian - */ -public class RankingEventImpl implements RankingEvent { - - private final EventType eventType; - private final RankingModel source; - private final Ranking ranking; - private final Transformer transformer; - - public RankingEventImpl(EventType eventType, RankingModel source, Ranking ranking, Transformer transformer) { - this.eventType = eventType; - this.source = source; - this.ranking = ranking; - this.transformer = transformer; - } - - public RankingEventImpl(EventType eventType, RankingModel source) { - this(eventType, source, null, null); - } - - @Override - public EventType getEventType() { - return eventType; - } - - @Override - public RankingModel getSource() { - return source; - } - - @Override - public Ranking getRanking() { - return ranking; - } - - @Override - public Transformer getTransformer() { - return transformer; - } - - @Override - public boolean is(EventType... type) { - for (EventType e : type) { - if (e.equals(eventType)) { - return true; - } - } - return false; - } -} diff --git a/modules/RankingAPI/src/main/java/org/gephi/ranking/RankingModelImpl.java b/modules/RankingAPI/src/main/java/org/gephi/ranking/RankingModelImpl.java deleted file mode 100644 index cdc97a6ac3..0000000000 --- a/modules/RankingAPI/src/main/java/org/gephi/ranking/RankingModelImpl.java +++ /dev/null @@ -1,275 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian <mathieu.bastian@gephi.org> - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ranking; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import org.gephi.project.api.Workspace; -import org.gephi.ranking.api.*; -import org.gephi.ranking.spi.RankingBuilder; -import org.gephi.ranking.spi.TransformerBuilder; -import org.openide.util.Lookup; - -/** - * Implementation of the - * <code>RankingModel</code> interface. - * - * @author Mathieu Bastian - */ -public class RankingModelImpl implements RankingModel { - - private final Workspace workspace; - private final List<RankingListener> listeners; - private final List<AutoRanking> autoRankings; - private final RankingAutoTransformer autoTransformer; - private ColumnObserver columnObserver; - private GraphViewObserver graphViewObserver; - private Interpolator interpolator; - private boolean localScale = false; - - public RankingModelImpl(Workspace workspace) { - this.workspace = workspace; - this.listeners = Collections.synchronizedList(new ArrayList<RankingListener>()); - this.autoRankings = Collections.synchronizedList(new ArrayList<AutoRanking>()); - this.interpolator = Interpolator.LINEAR; - this.autoTransformer = new RankingAutoTransformer(this); - } - - public void select() { - if (!autoRankings.isEmpty()) { - autoTransformer.start(); - } - columnObserver = new ColumnObserver(this); - graphViewObserver = new GraphViewObserver(this); - - columnObserver.start(); - graphViewObserver.start(); - } - - public void unselect() { - autoTransformer.stop(); - if (columnObserver != null) { - columnObserver.stop(); - columnObserver = null; - } - if (graphViewObserver != null) { - graphViewObserver.stop(); - graphViewObserver = null; - } - } - - @Override - public Workspace getWorkspace() { - return workspace; - } - - @Override - public Ranking[] getNodeRankings() { - return getRankings(Ranking.NODE_ELEMENT); - } - - @Override - public Ranking[] getEdgeRankings() { - return getRankings(Ranking.EDGE_ELEMENT); - } - - @Override - public Ranking[] getRankings(String elementType) { - List<Ranking> rankings = new ArrayList<Ranking>(); - Collection<? extends RankingBuilder> builders = Lookup.getDefault().lookupAll(RankingBuilder.class); - for (RankingBuilder builder : builders) { - Ranking[] builtRankings = builder.buildRanking(this); - if (builtRankings != null) { - for (Ranking r : builtRankings) { - if (r.getElementType().equals(elementType)) { - rankings.add(r); - } - } - } - } - return rankings.toArray(new Ranking[0]); - } - - @Override - public Ranking getRanking(String elementType, String name) { - Ranking[] rankings = getRankings(elementType); - for (Ranking r : rankings) { - if (r.getName().equals(name)) { - return r; - } - } - return null; - } - - @Override - public Transformer getTransformer(String elementType, String name) { - for (TransformerBuilder builder : Lookup.getDefault().lookupAll(TransformerBuilder.class)) { - if (builder.isTransformerForElement(elementType) && builder.getName().equals(name)) { - return builder.buildTransformer(); - } - } - return null; - } - - @Override - public Transformer[] getTransformers(String elementType) { - List<Transformer> transformers = new ArrayList<Transformer>(); - for (TransformerBuilder builder : Lookup.getDefault().lookupAll(TransformerBuilder.class)) { - if (builder.isTransformerForElement(elementType)) { - transformers.add(builder.buildTransformer()); - } - } - return transformers.toArray(new Transformer[0]); - } - - @Override - public Interpolator getInterpolator() { - return interpolator; - } - - public void setInterpolator(Interpolator interpolator) { - if (interpolator == null) { - throw new NullPointerException(); - } - this.interpolator = interpolator; - } - - public void addAutoRanking(Ranking ranking, Transformer transformer) { - AutoRanking autoRanking = new AutoRanking(ranking, transformer); - removeAutoRanking(transformer); - autoRankings.add(autoRanking); - autoTransformer.start(); - } - - public void removeAutoRanking(Transformer transformer) { - for (AutoRanking r : autoRankings.toArray(new AutoRanking[0])) { - if (r.getTransformer().equals(transformer)) { - autoRankings.remove(r); - } - } - if (autoRankings.isEmpty()) { - autoTransformer.stop(); - } - } - - @Override - public Ranking getAutoTransformerRanking(Transformer transformer) { - for (AutoRanking autoRanking : autoRankings) { - if (autoRanking.getTransformer().equals(transformer)) { - return autoRanking.getRanking(); - } - } - return null; - } - - public List<AutoRanking> getAutoRankings() { - return autoRankings; - } - - @Override - public boolean useLocalScale() { - return localScale; - } - - public void setLocalScale(boolean localScale) { - this.localScale = localScale; - } - - @Override - public void addRankingListener(RankingListener listener) { - if (!listeners.contains(listener)) { - listeners.add(listener); - } - } - - @Override - public void removeRankingListener(RankingListener listener) { - listeners.remove(listener); - } - - public void fireRankingListener(RankingEvent rankingEvent) { - for (RankingListener listener : listeners) { - listener.rankingChanged(rankingEvent); - } - } - - public class AutoRanking { - - private final RankingBuilder builder; - private final Ranking ranking; - private final Transformer transformer; - - public AutoRanking(Ranking ranking, Transformer transformer) { - this.ranking = ranking; - this.transformer = transformer; - this.builder = getBuilder(ranking); - } - - public Ranking getRanking() { - if (builder != null) { - return builder.refreshRanking(ranking); - } - return ranking; - } - - public Transformer getTransformer() { - return transformer; - } - - private RankingBuilder getBuilder(Ranking ranking) { - Collection<? extends RankingBuilder> builders = Lookup.getDefault().lookupAll(RankingBuilder.class); - for (RankingBuilder b : builders) { - Ranking[] builtRankings = b.buildRanking(RankingModelImpl.this); - if (builtRankings != null) { - for (Ranking r : builtRankings) { - if (r.getElementType().equals(ranking.getElementType()) && r.getName().equals(ranking.getName())) { - return b; - } - } - } - } - return null; - } - } -} diff --git a/modules/RankingAPI/src/main/java/org/gephi/ranking/api/Interpolator.java b/modules/RankingAPI/src/main/java/org/gephi/ranking/api/Interpolator.java deleted file mode 100644 index 28948a1184..0000000000 --- a/modules/RankingAPI/src/main/java/org/gephi/ranking/api/Interpolator.java +++ /dev/null @@ -1,311 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian <mathieu.bastian@gephi.org> - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ranking.api; - -/** - * Abstract clas that defines the single {@link #interpolate(float)} method. - * This abstract class is implemented by built-in interpolators. - * - * @author Mathieu Bastian - */ -public abstract class Interpolator { - - /** - * Linear interpolation - * <code>x = interpolate(x) - * <code> - */ - public static final Interpolator LINEAR = new Interpolator() { - @Override - public float interpolate(float x) { - return x; - } - }; - /** - * Log2 interpolation - * <code>Math.log(1 + x)/Math.log(2) = interpolate(x)</code> - */ - public static final Interpolator LOG2 = new Interpolator() { - @Override - public float interpolate(float x) { - return (float) (Math.log(1 + x) / Math.log(2)); - } - }; - - /** - * Builds a bezier interpolator with two control points (px1, py1) and (px2, - * py2). The points should all be in range [0, 1]. - * - * @param px1 the x-coordinate of first control point, between [0, 1] - * @param py1 the y-coordinate of first control point, between [0, 1] - * @param px2 the x-coordinate of second control point, between [0, 1] - * @param py2 the y-coordinate of second control point, between [0, 1] - * @return new bezier interpolator - */ - public static Interpolator newBezierInterpolator(float px1, float py1, float px2, float py2) { - return new BezierInterpolator(px1, py1, px2, py2); - } - - /** - * This function takes an input value between 0 and 1 and returns another - * value, also between 0 and 1. - * - * @param x a value between 0 and 1 - * @return a value between 0 and 1. Values outside of this boundary may be - * clamped to the interval [0,1] and cause undefined results. - */ - public abstract float interpolate(float x); - - /** - * Bezier curve interpolator. - * <p> - * Basically, a cubic Bezier curve is created with start point (0,0) and - * endpoint (1,1). The other two control points (px1, py1) and (px2, py2) - * are given by the user, where px1, py1, px1, and px2 are all in the range - * [0,1]. - * </p> - */ - //Author David C. Browne - public static class BezierInterpolator extends Interpolator { - - /** - * the coordinates of the 2 2D control points for a cubic Bezier curve, - * with implicit start point (0,0) and end point (1,1) -- each - * individual coordinate value must be in range [0,1] - */ - private final float x1, y1, x2, y2; - /** - * do the input control points form a line with (0,0) and (1,1), i.e., - * x1 == y1 and x2 == y2 -- if so, then all x(t) == y(t) for the curve - */ - private final boolean isCurveLinear; - /** - * power of 2 sample size for lookup table of x values - */ - private static final int SAMPLE_SIZE = 16; - /** - * difference in t used to calculate each of the xSamples values -- - * power of 2 sample size should provide exact representation of this - * value and its integer multiples (integer in range of [0..SAMPLE_SIZE] - */ - private static final float SAMPLE_INCREMENT = 1f / SAMPLE_SIZE; - /** - * x values for the bezier curve, sampled at increments of 1/SAMPLE_SIZE - * -- this is used to find the good initial guess for parameter t, given - * an x - */ - private final float[] xSamples = new float[SAMPLE_SIZE + 1]; - - /** - * constructor -- cubic bezier curve will be represented by control - * points (0,0) (px1,py1) (px2,py2) (1,1) -- px1, py1, px2, py2 all in - * range [0,1] - * - * @param px1 is x-coordinate of first control point, in range [0,1] - * @param py1 is y-coordinate of first control point, in range [0,1] - * @param px2 is x-coordinate of second control point, in range [0,1] - * @param py2 is y-coordinate of second control point, in range [0,1] - */ - public BezierInterpolator(float px1, float py1, float px2, float py2) { - // check user input for precondition - if (px1 < 0 || px1 > 1 || py1 < 0 || py1 > 1 - || px2 < 0 || px2 > 1 || py2 < 0 || py2 > 1) { - throw new IllegalArgumentException("control point coordinates must " - + "all be in range [0,1]"); - } - - // save control point data - x1 = px1; - y1 = py1; - x2 = px2; - y2 = py2; - - // calc linearity/identity curve - isCurveLinear = ((x1 == y1) && (x2 == y2)); - - // make the array of x value samples - if (!isCurveLinear) { - for (int i = 0; i < SAMPLE_SIZE + 1; ++i) { - xSamples[i] = eval(i * SAMPLE_INCREMENT, x1, x2); - } - } - } - - /** - * get the y-value of the cubic bezier curve that corresponds to the x - * input - * - * @param x is x-value of cubic bezier curve, in range [0,1] - * @return corresponding y-value of cubic bezier curve -- in range [0,1] - */ - @Override - public float interpolate(float x) { - // check user input for precondition - if (x < 0) { - x = 0; - } else if (x > 1) { - x = 1; - } - - // check quick exit identity cases (linear curve or curve endpoints) - if (isCurveLinear || x == 0 || x == 1) { - return x; - } - - // find the t parameter for a given x value, and use this t to calculate - // the corresponding y value - return eval(findTForX(x), y1, y2); - } - - /** - * use Bernstein basis to evaluate 1D cubic Bezier curve (quicker and - * more numerically stable than power basis) -- 1D control coordinates - * are (0, p1, p2, 1), where p1 and p2 are in range [0,1], and there is - * no ordering constraint on p1 and p2, i.e., p1 <= p2 does not have to - * be true @param t is the pa - * - * ramaterized value in range [0,1] - * @param p1 is 1st control point coordinate in range [0,1] - * @param p2 is 2nd control point coordinate in range [0,1] - * @return the value of the Bezier curve at parameter t - */ - private float eval(float t, float p1, float p2) { - // Use optimzied version of the normal Bernstein basis form of Bezier: - // (3*(1-t)*(1-t)*t*p1)+(3*(1-t)*t*t*p2)+(t*t*t), since p0=0, p3=1 - // The above unoptimized version is best using -server, but since we are - // probably doing client-side animation, this is faster. - float compT = 1 - t; - return t * (3 * compT * (compT * p1 + t * p2) + (t * t)); - } - - /** - * evaluate Bernstein basis derivative of 1D cubic Bezier curve, where - * 1D control points are (0, p1, p2, 1), where p1 and p2 are in range - * [0,1], and there is no ordering constraint on p1 and p2, i.e., p1 <= - * p2 does not have to be true @param t is the paramaterized - * - * value in range [0,1] - * @param p1 is 1st control point coordinate in range [0,1] - * @param p2 is 2nd control point coordinate in range [0,1] - * @return the value of the Bezier curve at parameter t - */ - private float evalDerivative(float t, float p1, float p2) { - // use optimzed version of Berstein basis Bezier derivative: - // (3*(1-t)*(1-t)*p1)+(6*(1-t)*t*(p2-p1))+(3*t*t*(1-p2)), since p0=0, p3=1 - // The above unoptimized version is best using -server, but since we are - // probably doing client-side animation, this is faster. - float compT = 1 - t; - return 3 * (compT * (compT * p1 + 2 * t * (p2 - p1)) + t * t * (1 - p2)); - } - - /** - * find an initial good guess for what parameter t might produce the - * x-value on the Bezier curve -- uses linear interpolation on the - * x-value sample array that was created on construction - * - * @param x is x-value of cubic bezier curve, in range [0,1] - * @return a good initial guess for parameter t (in range [0,1]) that - * gives x - */ - private float getInitialGuessForT(float x) { - // find which places in the array that x would be sandwiched between, - // and then linearly interpolate a reasonable value of t -- array values - // are ascending (or at least never descending) -- binary search is - // probably more trouble than it is worth here - for (int i = 1; i < SAMPLE_SIZE + 1; ++i) { - if (xSamples[i] >= x) { - float xRange = xSamples[i] - xSamples[i - 1]; - if (xRange == 0) { - // no change in value between samples, so use earlier time - return (i - 1) * SAMPLE_INCREMENT; - } else { - // linearly interpolate the time value - return ((i - 1) + ((x - xSamples[i - 1]) / xRange)) - * SAMPLE_INCREMENT; - } - } - } - - // shouldn't get here since 0 <= x <= 1, and xSamples[0] == 0 and - // xSamples[SAMPLE_SIZE] == 1 (using power of 2 SAMPLE_SIZE for more - // exact increment arithmetic) - return 1; - } - - /** - * find the parameter t that produces the given x-value for the curve -- - * uses Newton-Raphson to refine the value as opposed to subdividing - * until we are within some tolerance - * - * @param x is x-value of cubic bezier curve, in range [0,1] - * @return the parameter t (in range [0,1]) that produces x - */ - private float findTForX(float x) { - // get an initial good guess for t - float t = getInitialGuessForT(x); - - // use Newton-Raphson to refine the value for t -- for this constrained - // Bezier with float accuracy (7 digits), any value not converged by 4 - // iterations is cycling between values, which can minutely affect the - // accuracy of the last digit - final int numIterations = 4; - for (int i = 0; i < numIterations; ++i) { - // stop if this value of t gives us exactly x - float xT = (eval(t, x1, x2) - x); - if (xT == 0) { - break; - } - - // stop if derivative is 0 - float dXdT = evalDerivative(t, x1, x2); - if (dXdT == 0) { - break; - } - - // refine t - t -= xT / dXdT; - } - - return t; - } - } -} diff --git a/modules/RankingAPI/src/main/java/org/gephi/ranking/api/Ranking.java b/modules/RankingAPI/src/main/java/org/gephi/ranking/api/Ranking.java deleted file mode 100644 index 0af0f58792..0000000000 --- a/modules/RankingAPI/src/main/java/org/gephi/ranking/api/Ranking.java +++ /dev/null @@ -1,157 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian <mathieu.bastian@gephi.org> - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ranking.api; - -/** - * Rankings role is to provide numerical values from objects. These values are - * then send to transformer to be converted in visual signs (e.g. color or - * size). - * <p> - * For instance for nodes, ranking can be the degree of the node or a numerical - * value like an 'age' or 'duration'. - * <p> - * The - * <code>getElementType()</code> method should return either - * <code>Ranking.NODE_ELEMENT</code> or - * <code>Ranking.EDGE_ELEMENT</code> to define if it works with node or edge - * elements. This is important because it defines which objects the - * <code>getValue()</code> eventually receives. For nodes, it is given a - * {@link NodeData} object and for edges a {@link EdgeData}. - * <p> - * One can reuse the - * <code>AbstractRanking</code> class defined in the - * <code>RankingPlugin</code> module. - * - * @see Transformer - * @author Mathieu Bastian - */ -public interface Ranking<Element> { - - /** - * Element type for nodes. The ranking receives a - * <code>NodeData</code> object. - */ - public static final String NODE_ELEMENT = "nodes"; - /** - * Element type for edges. The ranking receives a - * <code>EdgeData</code> object. - */ - public static final String EDGE_ELEMENT = "edges"; - /** - * Default in degree ranking's name - */ - public static final String DEGREE_RANKING = "degree"; - /** - * Default out degree ranking's name - */ - public static final String INDEGREE_RANKING = "indegree"; - /** - * Default out degree ranking's name - */ - public static final String OUTDEGREE_RANKING = "outdegree"; - - /** - * Returns the value of the element. - * - * @param element the element to get the value from - * @return the element's value - */ - public Number getValue(Element element); - - /** - * Returns the minimum value of this ranking. - * - * @return the minimum value - */ - public Number getMinimumValue(); - - /** - * Returns the maximum value of this ranking. - * - * @return the maximum value - */ - public Number getMaximumValue(); - - /** - * Normalize - * <code>value</code> between 0 and 1 using the minimum and the maximum - * value. For example if - * <code>value</code> is equal to the maximum, it returns 1.0. - * - * @param value the value to normalize - * @return the normalized value between zero and one - */ - public float normalize(Number value); - - /** - * Unnormalize - * <code>normalizedValue</code> and returns the original element value. - * - * @param normalizedValue the value to unnormalize - * @return the original value of the element - */ - public Number unNormalize(float normalizedValue); - - /** - * Returns the display name of this ranking. - * - * @return the display name of this ranking - */ - public String getDisplayName(); - - /** - * Returns the name of this ranking. It should be unique. - * - * @return the name of this ranking - */ - public String getName(); - - /** - * Return the type of element this ranking is manipulating. Value can either - * be - * <code>Ranking.NODE_ELEMENT</code> or - * <code>Ranking.EDGE_ELEMENT</code>. - * - * @return the type of element this ranking is manipulating - */ - public String getElementType(); -} diff --git a/modules/RankingAPI/src/main/java/org/gephi/ranking/api/RankingController.java b/modules/RankingAPI/src/main/java/org/gephi/ranking/api/RankingController.java deleted file mode 100644 index b83054e7d0..0000000000 --- a/modules/RankingAPI/src/main/java/org/gephi/ranking/api/RankingController.java +++ /dev/null @@ -1,123 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian <mathieu.bastian@gephi.org> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ranking.api; - -import org.gephi.project.api.Workspace; - -/** - * Controller that maintains the ranking models, one per workspace. - * <p> - * This controller is a service and can therefore be found in Lookup: - * <pre>RankingController rc = Lookup.getDefault().lookup(RankingController.class);</pre> - * <p> - * Use <code>transform()</code> to apply transformers on ranking's elements. Transform - * is a one shot action. For continuous transformation, start an auto transformer - * using <code>startAutoTransform()</code>. - * @see RankingModel - * @author Mathieu Bastian - */ -public interface RankingController { - - /** - * Returns the ranking model of the current workspace. - * @return the ranking model of the current workspace - */ - public RankingModel getModel(); - - /** - * Returns the ranking model of <code>workspace</code>. If it doesn't exists, - * it creates one and put it in the workspace. - * @param workspace the workspace containing the model - * @return the ranking model of this workspace - */ - public RankingModel getModel(Workspace workspace); - - /** - * Sets the interpolator to be used when transforming values. This is set to the - * current model only. If the model is changed (i.e. switch workspace), call - * this again. - * <p> - * Default interpolator implementations can be found in the {@link Interpolator} - * class. - * @param interpolator the interpolator to use for transformation. - */ - public void setInterpolator(Interpolator interpolator); - - /** - * Sets whether rankings use a local or a global scale. When calculating the - * minimum and maximum value (i.e. the scale) rankings can use the complete graph - * or only the currently visible graph. When using the visible graph it is called - * the <b>local</b> scale. - * @param useLocalScale <code>true</code> for local, <code>false</code> for global - */ - public void setUseLocalScale(boolean useLocalScale); - - /** - * Apply the transformation of <code>transformer</code> on <code>ranking</code>. - * The transformer will modify element's color or size according to the values - * returned by the ranking. Before passing values to the transformer, they may - * be transformer by the current interpolator. - * @param ranking the ranking to give to the transformer - * @param transformer the transformer to apply on the ranking's elements - */ - public void transform(Ranking ranking, Transformer transformer); - - /** - * Starts an auto transformation using <code>ranking</code> and - * <code>transformer</code>. The transformation is continuously applied to - * the current graph. The operation is the same as <code>transform()</code>, - * except it is applied in a loop until <code>stopAutoTransform()</code> is - * called. - * <p> - * Note that auto transformation work only in the current workspace and are - * paused when the workspace is not current. - * @param ranking the ranking to give to the transformer - * @param transformer the transformer to apply on the ranking's elements - */ - public void startAutoTransform(Ranking ranking, Transformer transformer); - - /** - * Stops the auto transformation of <code>transfromer</code>. - * @param transformer the transformer to stop auto transformation - */ - public void stopAutoTransform(Transformer transformer); -} diff --git a/modules/RankingAPI/src/main/java/org/gephi/ranking/api/RankingEvent.java b/modules/RankingAPI/src/main/java/org/gephi/ranking/api/RankingEvent.java deleted file mode 100644 index 63776c0c3c..0000000000 --- a/modules/RankingAPI/src/main/java/org/gephi/ranking/api/RankingEvent.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian <mathieu.bastian@gephi.org> - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ranking.api; - -/** - * Event generated by the {@link RankingModel} and sent to listeners registered - * by the model. - * <p> - * The types of events: - * <ul> - * <li><b>REFRESH_RANKING:</b> The list of available ranking has been updated. - * The listeners can call - * <code>RankingModel.getRankings()</code> to get the newly created - * rankings</li> - * <li><b>APPLY_TRANSFORMER:</b> A transformer has just been applied. The - * listeners can retried the transformer and ranking directly from the - * event.</li> - * <li><b>START_AUTO_TRANSFORM:</b> A auto transformer has just been - * started.</li> - * <li><b>STOP_AUTO_TRANSFORM:</b> A auto transformer has just been - * stopped.</li> - * </ul> - * - * @see RankingListener - * @author Mathieu Bastian - */ -public interface RankingEvent { - - /** - * <ul> - * <li><b>REFRESH_RANKING:</b> The list of available ranking has been - * updated. The listeners can call - * <code>RankingModel.getRankings()</code> to get the newly created - * rankings</li> - * <li><b>REFRESH_VIEW:</b> The graph view has changed</li> - * <li><b>APPLY_TRANSFORMER:</b> A transformer has just been applied. The - * listeners can retried the transformer and ranking directly from the - * event.</li> - * <li><b>START_AUTO_TRANSFORM:</b> A auto transformer has just been - * started.</li> - * <li><b>STOP_AUTO_TRANSFORM:</b> A auto transformer has just been - * stopped.</li> - * </ul> - */ - public enum EventType { - - REFRESH_RANKING, REFRESH_VIEW, APPLY_TRANSFORMER, START_AUTO_TRANSFORM, STOP_AUTO_TRANSFORM - }; - - /** - * Returns the type of event. - * - * @return the type of this event - */ - public EventType getEventType(); - - /** - * Returns the ranking model that generated the event. - * - * @return the source of the event - */ - public RankingModel getSource(); - - /** - * Returns the ranking associated to the event, or - * <code>null</code>. - * - * @return the ranking associated to the event or <code>null</code> - */ - public Ranking getRanking(); - - /** - * Returns the transformer associated to the event, or - * <code>null</code>. - * - * @return the ranking associated to the event or <code>null</code> - */ - public Transformer getTransformer(); - - /** - * Returns - * <code>true</code> if this event is one of these in parameters. - * - * @param type the event types that are to be compared with this event - * @return <code>true</code> if this event is <code>type</code>, - * <code>false</code> otherwise - */ - public boolean is(EventType... type); -} diff --git a/modules/RankingAPI/src/main/java/org/gephi/ranking/api/RankingListener.java b/modules/RankingAPI/src/main/java/org/gephi/ranking/api/RankingListener.java deleted file mode 100644 index 545b00df75..0000000000 --- a/modules/RankingAPI/src/main/java/org/gephi/ranking/api/RankingListener.java +++ /dev/null @@ -1,60 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian <mathieu.bastian@gephi.org> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ranking.api; - -import java.util.EventListener; - -/** - * Event listener for ranking events. The listeners receives events when the - * ranking model is changed. - * - * @see RankingEvent - * @author Mathieu Bastian - */ -public interface RankingListener extends EventListener { - - /** - * The ranking model has changed. - * @param event the event sent from the <code>RankingModel</code> - */ - public void rankingChanged(RankingEvent event); -} diff --git a/modules/RankingAPI/src/main/java/org/gephi/ranking/api/RankingModel.java b/modules/RankingAPI/src/main/java/org/gephi/ranking/api/RankingModel.java deleted file mode 100644 index 326d59fae5..0000000000 --- a/modules/RankingAPI/src/main/java/org/gephi/ranking/api/RankingModel.java +++ /dev/null @@ -1,163 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian <mathieu.bastian@gephi.org> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ranking.api; - -import org.gephi.project.api.Workspace; - -/** - * Model for ranking data. - * <p> - * That includes the list of rankings currently available, - * separated in categories with different element types. It can returns all rankings - * for nodes or edges, or any element type. - * <p> - * Rankings are builds thanks to <code>RankingBuilder</code> implementation. Implement - * a new <code>RankingBuider</code> service to create new rankings. - * <p> - * The model also hosts the currently defined interpolator. - * - * @see Ranking - * @see Transformer - * @author Mathieu Bastian - */ -public interface RankingModel { - - /** - * Get all rankings for node elements. Rankings are classified with the type - * of element they are manipulating. Rankings specific to node elements are - * defined by the <code>Ranking.NODE_ELEMENT</code>. - * @return All rankings for node elements - */ - public Ranking[] getNodeRankings(); - - /** - * Get all rankings for edge elements. Rankings are classified with the type - * of element they are manipulating. Rankings specific to edge elements are - * defined by the <code>Ranking.EDGE_ELEMENT</code>. - * @return All rankings for edge elements - */ - public Ranking[] getEdgeRankings(); - - /** - * Get all rankings for <code>elementType</code> elements. Rankings are - * classified with the type of element they are manipulating. If - * <code>elementType</code> equals <code>Ranking.NODE_ELEMENT</code> this is - * equivalent to {@link RankingModel#getNodeRankings() } method - * @param elementType the element type of the rankings - * @return All rankings for <code>elementType</code> - */ - public Ranking[] getRankings(String elementType); - - /** - * Return the specific ranking for <code>elementType</code> and with - * the given <code>name</code>. Returns <code>null</code> if not found. - * <p> - * Default ranking names can be found in the {@link Ranking} interface. For - * attribute rankings, simply use the column identifier. - * @param elementType the element type of the ranking - * @param name the name of the ranking - * @return the found ranking or <code>null</code> if not found - */ - public Ranking getRanking(String elementType, String name); - - /** - * Return all transformers specific to <code>elementType</code>. A transformer - * defines his ability to transformer different element types. - * @param elementType the element type of the transformers - * @return all transformers working with <code>elementType</code> - */ - public Transformer[] getTransformers(String elementType); - - /** - * Returns the specific transformer for <code>elementType</code> and with the - * given <code>name</code>. Returns <code>null</code> if not found. - * <p> - * Default transformers name can be found in the {@link Transformer} interface. - * @param elementType the element type of the transformer - * @param name the name of the transformer - * @return the transformer defined as <code>name</code> and <code>elementType</code> - * or <code>null</code> if not found - */ - public Transformer getTransformer(String elementType, String name); - - /** - * Returns the current interpolator. The default interpolator is a simple - * linear interpolation. - * @return the current interpolator - */ - public Interpolator getInterpolator(); - - /** - * Return the workspace this model is associated with - * @return the workspace of this model - */ - public Workspace getWorkspace(); - - /** - * Returns <code>true</code> if rankings are using the currently visible - * graph as a scale. If <code>false</code> the complete graph is used to determine - * minimum and maximum values, the ranking scale. - * @return <code>true</code> if using a local scale, <code>false</code> if - * global scale - */ - public boolean useLocalScale(); - - /** - * If <code>transformer</code> is an auto transformer, returns the ranking - * associated to it. - * @param transformer the transformer to obtain the ranking from - * @return the ranking associated to <code>transformer</code> or <code>null</code> - */ - public Ranking getAutoTransformerRanking(Transformer transformer); - - /** - * Add <code>listener</code> as a ranking listener of this model - * @param listener the listener to add - */ - public void addRankingListener(RankingListener listener); - - /** - * Remove <code>listener</code> as a ranking listener of this model - * @param listener the listener to remove - */ - public void removeRankingListener(RankingListener listener); -} diff --git a/modules/RankingAPI/src/main/java/org/gephi/ranking/api/Transformer.java b/modules/RankingAPI/src/main/java/org/gephi/ranking/api/Transformer.java deleted file mode 100644 index 86d8f9b982..0000000000 --- a/modules/RankingAPI/src/main/java/org/gephi/ranking/api/Transformer.java +++ /dev/null @@ -1,117 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian <mathieu.bastian@gephi.org> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ranking.api; - -/** - * Transformers role is to transform nodes/edges numerical attributes - * to visual signs (e.g. color or sizes). It uses a normalized real number - * between zero and one to output a meaningful value. - * <p> - * Transformers can be applied to a subset of values using lower/bound filter - * values. - * <p> - * Default transformers implemented in the RankingPlugin: - * <ul><li><b>RENDERABLE_COLOR:</b> Sets node/edge color</li> - * <li><b>RENDERABLE_SIZE:</b> Sets node/edge size. For edges, the size is the weight.</li> - * <li><b>LABEL_COLOR:</b> Sets label color.</li> - * <li><b>LABEL_SIZE:</b> Sets label size. Note this is a multiplier.</li> - * - * @see Ranking - * @author Mathieu Bastian - */ -public interface Transformer<Target> { - - public static final String RENDERABLE_COLOR = "renderable_color"; - public static final String RENDERABLE_SIZE = "renderable_size"; - public static final String LABEL_COLOR = "label_color"; - public static final String LABEL_SIZE = "label_size"; - - /** - * Sets the lower filter bound. Values lower than this value won't be - * transformed. By default the bound is set to zero, so no filtering. - * @param lowerBound the lower bound filter value - */ - public void setLowerBound(float lowerBound); - - /** - * Sets the upper filter bound. Values upper than this value won't be - * transformed. By default the bound is set to one, so no filtering. - * @param upperBound the upper bound filter value - */ - public void setUpperBound(float upperBound); - - /** - * Returns the lower bound filter value. By default it's set to zero, so - * filtering is disabled. - * @return the lower bound filter value - */ - public float getLowerBound(); - - /** - * Returns the upper bound filter value. By default it's set to one, so - * filtering is disabled. - * @return the upper bound filter value - */ - public float getUpperBound(); - - /** - * Returns <code>true</code> if <code>value</code> is within the lower and - * the upper bound. Typically, this is called before <code>transform()</code> - * to know if a value can be processed. By default, this always returns <code> - * true</code>, as lower bound is set ot zero and upper bound to one. - * @param value the value to test if in bounds - * @return <code>true</code> if value superior or equal to lowerBound and - * value inferior or equal to upperBound, <code>false</code> otherwise - * - */ - public boolean isInBounds(float value); - - /** - * Transforms <code>target</code> with <code>normalizedValue</code> between - * zero and one. The method also returns the transformed value, like the color - * for instance for a color transformer. - * @param target the object to transform - * @param normalizedValue the ranking normalized value - * @return the transformed value, or <code>null</code> - */ - public Object transform(Target target, float normalizedValue); -} diff --git a/modules/RankingAPI/src/main/java/org/gephi/ranking/spi/RankingBuilder.java b/modules/RankingAPI/src/main/java/org/gephi/ranking/spi/RankingBuilder.java deleted file mode 100644 index c0858c6944..0000000000 --- a/modules/RankingAPI/src/main/java/org/gephi/ranking/spi/RankingBuilder.java +++ /dev/null @@ -1,73 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian <mathieu.bastian@gephi.org> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ranking.spi; - -import org.gephi.ranking.api.Ranking; -import org.gephi.ranking.api.RankingModel; - -/** - * Ranking builder, creating <code>Ranking</code> instances suitable to the given - * {@link RankingModel}. - * <p> - * Implementors should add the <code>@ServiceProvider</code> annotation to be - * registered by the system. - * <p> - * @author Mathieu Bastian - */ -public interface RankingBuilder { - - /** - * Return an array of newly created rankings. The <code>model</code> is useful - * to know which <code>workspace</code> to create rankings for, - * @param model the model to be used in the building - * @return an array of rankings - */ - public Ranking[] buildRanking(RankingModel model); - - /** - * Return a new instance of the same ranking, but with refresh minimum and - * maximum value. - * @param ranking the ranking to refresh - * @return a new instance of the same ranking, but refreshed - */ - public Ranking refreshRanking(Ranking ranking); -} diff --git a/modules/RankingAPI/src/main/java/org/gephi/ranking/spi/TransformerBuilder.java b/modules/RankingAPI/src/main/java/org/gephi/ranking/spi/TransformerBuilder.java deleted file mode 100644 index 046904992f..0000000000 --- a/modules/RankingAPI/src/main/java/org/gephi/ranking/spi/TransformerBuilder.java +++ /dev/null @@ -1,80 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian <mathieu.bastian@gephi.org> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ranking.spi; - -import org.gephi.ranking.api.Transformer; - -/** - * Transformer builder, creating <code>Transformer</code> instances. - * <p> - * Implementors should add the <code>@ServiceProvider</code> annotation to be - * registered by the system. - * <p> - * @see Transformer - * @author Mathieu Bastian - */ -public interface TransformerBuilder { - - /** - * Build a new <code>transformer</code> instance. - * @return a new transformer - */ - public Transformer buildTransformer(); - - /** - * Returns <code>true</code> if this builder is creating transformers - * working with <code>elementType</code>. Element types can be - * <code>Ranking.NODE_ELEMENT</code> or <code>Ranking.EDGE_ELEMENT</code> and - * defines the type of element rankings and transformers can manipulate. - * @param elementType the type of element - * @return <code>true</code> if the transformer can be used on <code>elementType</code>, - * <code>false</code> otherwise. - */ - public boolean isTransformerForElement(String elementType); - - /** - * Returns the name of the transformer built by this builder. Default names - * are defined in the {@link Transformer} interface. - * @return the name of the transformer - */ - public String getName(); -} diff --git a/modules/RankingAPI/src/main/java/org/gephi/ranking/spi/TransformerUI.java b/modules/RankingAPI/src/main/java/org/gephi/ranking/spi/TransformerUI.java deleted file mode 100644 index 6bff6d3b2a..0000000000 --- a/modules/RankingAPI/src/main/java/org/gephi/ranking/spi/TransformerUI.java +++ /dev/null @@ -1,90 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian <mathieu.bastian@gephi.org> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.ranking.spi; - -import org.gephi.ranking.api.Transformer; -import javax.swing.Icon; -import javax.swing.JPanel; -import org.gephi.ranking.api.Ranking; - -/** - * Transformer user interface. Implement this interface to create panels associated - * to a particular transformer. - * <p> - * The icon and display name are used to create the transformer button in the UI. - * <p> - * Implementors should add the <code>@ServiceProvider</code> annotation to be - * registered by the system. - * - * @see Transformer - * @author Mathieu Bastian - */ -public interface TransformerUI { - - /** - * Returns the transformer's icon - * @return the icon of this transformer - */ - public Icon getIcon(); - - /** - * Returns the display name of the transformer - * @return the display name of this transformer - */ - public String getDisplayName(); - - /** - * Returns the panel associated to this transformer. - * @param transformer the transformer to build the panel for - * @param ranking the ranking to be used by the transformer - * @return the panel of this transformer - */ - public JPanel getPanel(Transformer transformer, Ranking ranking); - - /** - * Returns <code>true</code> if this UI is built for <code>transformer</code>. - * @param transformer the transformer to test ownership - * @return <code>true</code> if this UI is associated to <code>transformer</code>, - * <code>false</code> otherwise - */ - public boolean isUIForTransformer(Transformer transformer); -} diff --git a/modules/RankingAPI/src/main/nbm/manifest.mf b/modules/RankingAPI/src/main/nbm/manifest.mf deleted file mode 100644 index bc9f72a6d3..0000000000 --- a/modules/RankingAPI/src/main/nbm/manifest.mf +++ /dev/null @@ -1,4 +0,0 @@ -Manifest-Version: 1.0 -AutoUpdate-Essential-Module: true -OpenIDE-Module-Localizing-Bundle: org/gephi/ranking/api/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file diff --git a/modules/RankingAPI/src/main/nbm/module.xml b/modules/RankingAPI/src/main/nbm/module.xml deleted file mode 100644 index bb485cdb4a..0000000000 --- a/modules/RankingAPI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<nbm> - <!-- - <moduleType>autoload</moduleType> - <codeNameBase>org.gephi.ranking.api/1</codeNameBase> - <licenseName>Apache License, Version 2.0</licenseName> - <licenseFile>license.txt</licenseFile> - --> -</nbm> diff --git a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/Bundle.properties b/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/Bundle.properties deleted file mode 100644 index 6d50639755..0000000000 --- a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/Bundle.properties +++ /dev/null @@ -1,5 +0,0 @@ -OpenIDE-Module-Display-Category=Gephi Core -OpenIDE-Module-Long-Description=\ - API/SPI for ranking data values and create transformers. -OpenIDE-Module-Name=Ranking API -OpenIDE-Module-Short-Description=API/SPI for ranking data values and create transformers diff --git a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/Bundle_cs.properties b/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/Bundle_cs.properties deleted file mode 100644 index 9b083481d5..0000000000 --- a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/Bundle_cs.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz <zbynek.schwarz@gmail.com>, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-15 21\:01+0000\nLast-Translator\: Zbyn\u011bk Schwarz <zbynek.schwarz@gmail.com>\nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=API/SPI pro hodnocen\u00ed datov\u00fdch hodnot a vytv\u00e1\u0159en\u00ed transform\u00e1tor\u016f. - -OpenIDE-Module-Short-Description=API/SPI pro hodnocen\u00ed datov\u00fdch hodnot a vytv\u00e1\u0159en\u00ed transform\u00e1tor\u016f. diff --git a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/Bundle_es.properties b/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/Bundle_es.properties deleted file mode 100644 index 1598210daa..0000000000 --- a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/Bundle_es.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 11\:00+0000\nLast-Translator\: gephi <sebastien.heymann@gmail.com>\nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=API/SPI para la clasificaci\u00f3n de los datos y crear transformadores - -OpenIDE-Module-Short-Description=API/SPI para la clasificaci\u00f3n de los datos y crear transformadores diff --git a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/Bundle_fr.properties b/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/Bundle_fr.properties deleted file mode 100644 index 70e8d3ec75..0000000000 --- a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/Bundle_fr.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 11\:00+0000\nLast-Translator\: gephi <sebastien.heymann@gmail.com>\nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API/SPI pour le classement des donn\u00e9es, et cr\u00e9\u00e9 les transformeurs. - -OpenIDE-Module-Short-Description=API/SPI pour le classement des donn\u00e9es, et cr\u00e9\u00e9 les transformeurs. diff --git a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/Bundle_ja.properties b/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/Bundle_ja.properties deleted file mode 100644 index c1fe27508b..0000000000 --- a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/Bundle_ja.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida <kida.siro@gmail.com>, 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-19 05\:33+0000\nLast-Translator\: Siro Kida <kida.siro@gmail.com>\nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u30e9\u30f3\u30ad\u30f3\u30b0\u30c7\u30fc\u30bf\u5024\u306e\u305f\u3081\u306eAPI / SPI\u3068\u30c8\u30e9\u30f3\u30b9\u30d5\u30a9\u30fc\u30de\u306e\u751f\u6210 - -OpenIDE-Module-Short-Description=\u30e9\u30f3\u30ad\u30f3\u30b0\u30c7\u30fc\u30bf\u5024\u306e\u305f\u3081\u306eAPI / SPI\u3068\u30c8\u30e9\u30f3\u30b9\u30d5\u30a9\u30fc\u30de\u306e\u751f\u6210 diff --git a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/Bundle_pt_BR.properties b/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/Bundle_pt_BR.properties deleted file mode 100644 index 42ff62e502..0000000000 --- a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/Bundle_pt_BR.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr <celiofariajr@gmail.com>, 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 16\:11+0000\nLast-Translator\: C\u00e9lio Faria Jr. <celiofariajr@gmail.com>\nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API/SPI de classifica\u00e7\u00e3o de dados e cria\u00e7\u00e3o de transformadores. - -OpenIDE-Module-Short-Description=API/SPI de classifica\u00e7\u00e3o de dados e cria\u00e7\u00e3o de transformadores diff --git a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/Bundle_ru.properties b/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/Bundle_ru.properties deleted file mode 100644 index 794da1c0ca..0000000000 --- a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/Bundle_ru.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# <altsoph@gmail.com>, 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-10 05\:46+0000\nLast-Translator\: Altsoph <altsoph@gmail.com>\nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=API/SPI \u0434\u043b\u044f \u0440\u0430\u043d\u0436\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0440\u043e\u0432 \u0432 \u0446\u0432\u0435\u0442\u0430 \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u044b. - -OpenIDE-Module-Short-Description=API/SPI \u0434\u043b\u044f \u0440\u0430\u043d\u0436\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0440\u043e\u0432 \u0432 \u0446\u0432\u0435\u0442\u0430 \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u044b diff --git a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/Bundle_zh_CN.properties b/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/Bundle_zh_CN.properties deleted file mode 100644 index 54e2eadf14..0000000000 --- a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/Bundle_zh_CN.properties +++ /dev/null @@ -1,10 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:08+0000\nLast-Translator\: gephi <sebastien.heymann@gmail.com>\nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u6392\u540d\u6570\u503c\u548c\u521b\u5efa\u53d8\u6362\u7684\u5e94\u7528\u7a0b\u5e8f\u63a5\u53e3\u548c\u670d\u52a1\u63d0\u4f9b\u501f\u53e3\u3002 - -OpenIDE-Module-Short-Description=\u6392\u540d\u6570\u503c\u548c\u521b\u5efa\u53d8\u6362\u7684\u5e94\u7528\u7a0b\u5e8f\u63a5\u53e3\u548c\u670d\u52a1\u63d0\u4f9b\u501f\u53e3\u3002 diff --git a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/cs.po b/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/cs.po deleted file mode 100644 index 208b3d77f7..0000000000 --- a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/cs.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz <zbynek.schwarz@gmail.com>, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-15 21:01+0000\n" -"Last-Translator: ZbynΔ›k Schwarz <zbynek.schwarz@gmail.com>\n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI pro hodnocenΓ­ datovΓ½ch hodnot a vytvΓ‘Ε™enΓ­ transformΓ‘torΕ―." - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI pro hodnocenΓ­ datovΓ½ch hodnot a vytvΓ‘Ε™enΓ­ transformΓ‘torΕ―." diff --git a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/es.po b/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/es.po deleted file mode 100644 index 71dc8b40f2..0000000000 --- a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/es.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 11:00+0000\n" -"Last-Translator: gephi <sebastien.heymann@gmail.com>\n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI para la clasificaciΓ³n de los datos y crear transformadores" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI para la clasificaciΓ³n de los datos y crear transformadores" diff --git a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/fr.po b/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/fr.po deleted file mode 100644 index 078a056d7a..0000000000 --- a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/fr.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 11:00+0000\n" -"Last-Translator: gephi <sebastien.heymann@gmail.com>\n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI pour le classement des donnΓ©es, et créé les transformeurs." - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI pour le classement des donnΓ©es, et créé les transformeurs." diff --git a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/ja.po b/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/ja.po deleted file mode 100644 index d076882048..0000000000 --- a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida <kida.siro@gmail.com>, 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-19 05:33+0000\n" -"Last-Translator: Siro Kida <kida.siro@gmail.com>\n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ランキングデータ倀γγŸγ‚γAPI / SPIγ¨γƒˆγƒ©γƒ³γ‚Ήγƒ•γ‚©γƒΌγƒžγη”Ÿζˆ" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ランキングデータ倀γγŸγ‚γAPI / SPIγ¨γƒˆγƒ©γƒ³γ‚Ήγƒ•γ‚©γƒΌγƒžγη”Ÿζˆ" diff --git a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/org-gephi-ranking-api.pot b/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/org-gephi-ranking-api.pot deleted file mode 100644 index 786ed53d49..0000000000 --- a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/org-gephi-ranking-api.pot +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team <gephi.team@lists.launchpad.net>, 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian <gephi.team@lists.launchpad.net>\n" -"Language-Team: English <https://launchpad.net/~gephi.team>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI for ranking data values and create transformers." - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI for ranking data values and create transformers" diff --git a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/package.html b/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/package.html deleted file mode 100644 index d90e67803f..0000000000 --- a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/package.html +++ /dev/null @@ -1,18 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<html> - <body bgcolor="white"> - Ranking API - <p> - Provides built-in ranking and transformers to apply to the current - workspace. For instance for nodes, ranking can be the degree of the - node or a numerical value like an 'age' or 'duration'. By default, the - <code>RankingModel</code> have 'Degree', 'InDegree', 'OutDegree' and - one ranking per numerical attribute. Ranking exists for both nodes and - edges and these are called element types. - </p> - <p> - See the <code>org.gephi.ranking.spi</code> package to know how to - implement new ranking or transformer builders. - </p> -</body> -</html> \ No newline at end of file diff --git a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/pt_BR.po b/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/pt_BR.po deleted file mode 100644 index 0c8ff39a7a..0000000000 --- a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/pt_BR.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr <celiofariajr@gmail.com>, 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 16:11+0000\n" -"Last-Translator: CΓ©lio Faria Jr. <celiofariajr@gmail.com>\n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI de classificaΓ§Γ£o de dados e criaΓ§Γ£o de transformadores." - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI de classificaΓ§Γ£o de dados e criaΓ§Γ£o de transformadores" diff --git a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/ru.po b/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/ru.po deleted file mode 100644 index 8bd1a9057e..0000000000 --- a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/ru.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# <altsoph@gmail.com>, 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-10 05:46+0000\n" -"Last-Translator: Altsoph <altsoph@gmail.com>\n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI для ранТирования Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ построСния трансформаторов Π² Ρ†Π²Π΅Ρ‚Π° ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹." - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI для ранТирования Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π΄Π°Π½Π½Ρ‹Ρ… ΠΈ построСния трансформаторов Π² Ρ†Π²Π΅Ρ‚Π° ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€Ρ‹" diff --git a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/zh_CN.po b/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/zh_CN.po deleted file mode 100644 index 0b63b92297..0000000000 --- a/modules/RankingAPI/src/main/resources/org/gephi/ranking/api/zh_CN.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:08+0000\n" -"Last-Translator: gephi <sebastien.heymann@gmail.com>\n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ζŽ’εζ•°ε€Όε’Œεˆ›ε»Ίε˜ζ’ηš„εΊ”η”¨η¨‹εΊζŽ₯ε£ε’ŒζœεŠ‘ζδΎ›ε€Ÿε£γ€‚" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζŽ’εζ•°ε€Όε’Œεˆ›ε»Ίε˜ζ’ηš„εΊ”η”¨η¨‹εΊζŽ₯ε£ε’ŒζœεŠ‘ζδΎ›ε€Ÿε£γ€‚" diff --git a/modules/RankingAPI/src/main/resources/org/gephi/ranking/spi/package.html b/modules/RankingAPI/src/main/resources/org/gephi/ranking/spi/package.html deleted file mode 100644 index 22f28c40bd..0000000000 --- a/modules/RankingAPI/src/main/resources/org/gephi/ranking/spi/package.html +++ /dev/null @@ -1,40 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<html> - <body bgcolor="white"> - Interfaces for creating new rankings and transformer. <code>RankingBuilder</code> - feeds the list of available rankings. The default rankings include for - instance 'Degree' or numerical attribute columns. Transformers apply for - instance color or size transformation to objects. - <h3>Create a new Transformer</h3> - <ol><li>Create a new module and set <code>RankingAPI</code>, <code>GraphAPI</code> - and <code>Lookup</code> as dependencies.</li> - <li>Create a new builder class by implementing <code>TransformerBuilderr</code>, - this class is basically a factory that will create the transformer on demand.</li> - <li>Add <b>@ServiceProvider</b> annotation to your builder, that it can - be found by the system. Set <code>TransformerBuilder</code> as the - annotation parameter. You can also add a position to define the order - your transformer should be displayed. Put 1000 to be displayed after - the default one.</li> - <li>Implement the <code>isTransformerForElement()</code> method. If your - transformer manipulates both nodes and edges, return <code>true</code> - when the element type is <code>Ranking.NODE_ELEMENT</code> or - <code>Ranking.EDGE_ELEMENT</code>. If it manipulates only one element, - restrict in consequences.</li> - <li>Create a new class that implements <code>Transformer</code>. One can - add a dependency to the RankingPlugin module and extends the - <code>AbstractRanking</code>.</li> - <li>Configure the Target type of you transformer. If your transformer works only - with nodes, put <code>NodeData</code>, if it works only with edges, put - <code>EdgeData</code>. If it works with both, put <code>Renderable</code> or - <code>Attributable</code>. These are interfaces both nodes and edges implement.</li> - <li>Implement the <code>transform()</code> method of the transformer.</li> - <li>If the transformer needs an UI, create a new class that implements the - <code>TransformerUI</code> interface. Add <b>@ServiceProvider</b> annotation - to your class, that it can be found by the system. Set <code>TransformerUI</code> - as the service annotation parameter.</li> - <li>Configure the <code>isUIForTransformer()</code> to return <code>true</code> only - when the given transformer is an instance of the Transformer you defined earlier.</li> - <li>Implement a user interface and set the <code>getPanel()</code> method to return it.</li> - </ol> - </body> -</html> diff --git a/modules/RankingAPI/src/main/resources/overview.html b/modules/RankingAPI/src/main/resources/overview.html deleted file mode 100644 index 652cf72074..0000000000 --- a/modules/RankingAPI/src/main/resources/overview.html +++ /dev/null @@ -1,17 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<html> - <body> - Ranking API transform numerical node/edge attributes in visual signs like - size or colors. - <p> - A <b>ranking</b> function provides values for a particular element (e.g node or edge). - For instance if the node has an 'age' attribute, the ranking function - provides the age value rescaled between 0 and 1. Then, <b>transformers</b> take - the value between zero and one and apply a visual sign to the element. - </p> - <p> - Check the <code>org.gephi.ranking.spi</code> package to learn how to - create new transformers. - </p> - </body> -</html> diff --git a/modules/RankingPlugin/pom.xml b/modules/RankingPlugin/pom.xml deleted file mode 100644 index db477c78ea..0000000000 --- a/modules/RankingPlugin/pom.xml +++ /dev/null @@ -1,55 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <artifactId>gephi-parent</artifactId> - <groupId>org.gephi</groupId> - <version>0.9-SNAPSHOT</version> - <relativePath>../..</relativePath> - </parent> - - <groupId>org.gephi</groupId> - <artifactId>ranking-plugin</artifactId> - <version>0.9-SNAPSHOT</version> - <packaging>nbm</packaging> - - <name>RankingPlugin</name> - - <dependencies> - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>graph-api</artifactId> - </dependency> - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>project-api</artifactId> - </dependency> - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>ranking-api</artifactId> - </dependency> - <dependency> - <groupId>org.netbeans.api</groupId> - <artifactId>org-openide-util</artifactId> - </dependency> - <dependency> - <groupId>org.netbeans.api</groupId> - <artifactId>org-openide-util-lookup</artifactId> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>nbm-maven-plugin</artifactId> - <configuration> - <publicPackages> - <publicPackage>org.gephi.ranking.plugin</publicPackage> - <publicPackage>org.gephi.ranking.plugin.transformer</publicPackage> - </publicPackages> - </configuration> - </plugin> - </plugins> - </build> -</project> diff --git a/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/AbstractRanking.java b/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/AbstractRanking.java deleted file mode 100644 index 274ed3064b..0000000000 --- a/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/AbstractRanking.java +++ /dev/null @@ -1,195 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian <mathieu.bastian@gephi.org> - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ranking.plugin; - -import java.util.ArrayList; -import java.util.List; -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.Graph; -import org.gephi.graph.api.Node; -import org.gephi.ranking.api.Ranking; -import org.gephi.ranking.api.RankingModel; - -/** - * Abstract ranking implementation, providing min/max storage. - * <p> - * It also has convenient static methods: - * <ul><li><b>refreshMinMax:</b> Refresh the minimum and maximum of the ranking - * for the given graph.</li> - * <li><b>getMin:</b> Returns the minimum of a Comparable array.</li> - * <li><b>getMax:</b> Returns the maximum of a Comparable array.</li></ul> - * - * @author Mathieu Bastian - */ -public abstract class AbstractRanking<Element> implements Ranking<Element> { - - protected final RankingModel rankingModel; - private final String name; - protected final String elementType; - protected Number minimum; - protected Number maximum; - - public AbstractRanking(String elementType, String name, RankingModel rankingModel) { - this.elementType = elementType; - this.rankingModel = rankingModel; - this.name = name; - } - - @Override - public Number getMinimumValue() { - return minimum; - } - - @Override - public Number getMaximumValue() { - return maximum; - } - - public void setMinimumValue(Number value) { - this.minimum = value; - } - - public void setMaximumValue(Number value) { - this.maximum = value; - } - - @Override - public String getElementType() { - return elementType; - } - - @Override - public String getName() { - return name; - } - - /** - * Refresh the min and max of - * <code>ranking</code>. - * - * @param ranking the ranking to find min and ma - * @param graph the graph where values are from - */ - public static void refreshMinMax(AbstractRanking ranking, Graph graph) { - if (ranking.getElementType().equals(Ranking.NODE_ELEMENT)) { - List<Comparable> objects = new ArrayList<Comparable>(); - for (Node node : graph.getNodes().toArray()) { - Comparable value = (Comparable) ranking.getValue(node); - if (value != null) { - objects.add(value); - } - } - ranking.setMinimumValue((Number) getMin(objects.toArray(new Comparable[0]))); - ranking.setMaximumValue((Number) getMax(objects.toArray(new Comparable[0]))); - } else if (ranking.getElementType().equals(Ranking.EDGE_ELEMENT)) { - List<Comparable> objects = new ArrayList<Comparable>(); - for (Edge edge : graph.getEdges().toArray()) { - Comparable value = (Comparable) ranking.getValue(edge); - if (value != null) { - objects.add(value); - } - } - ranking.setMinimumValue((Number) getMin(objects.toArray(new Comparable[0]))); - ranking.setMaximumValue((Number) getMax(objects.toArray(new Comparable[0]))); - } - } - - /** - * Return the minimum of - * <code>values</code>. Return - * <code>NaN</code> if - * <code>values</code> is empty. - * - * @param values the values to find the minimum - * @return the minimum of <code>values</code> or <code>NaN</code> - */ - public static Object getMin(Comparable[] values) { - switch (values.length) { - case 0: - return Double.NaN; - case 1: - return values[0]; - // values.length > 1 - default: - Comparable<?> min = values[0]; - - for (int index = 1; index < values.length; index++) { - Comparable o = values[index]; - if (o.compareTo(min) < 0) { - min = o; - } - } - - return min; - } - } - - /** - * Return the maximum of - * <code>values</code>. Return - * <code>NaN</code> if - * <code>values</code> is empty. - * - * @param values the values to find the maximum - * @return the maximum of <code>values</code> or <code>NaN</code> - */ - public static Object getMax(Comparable[] values) { - switch (values.length) { - case 0: - return Double.NaN; - case 1: - return values[0]; - // values.length > 1 - default: - Comparable<?> max = values[0]; - - for (int index = 1; index < values.length; index++) { - Comparable o = values[index]; - if (o.compareTo(max) > 0) { - max = o; - } - } - - return max; - } - } -} diff --git a/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/AttributeRankingBuilder.java b/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/AttributeRankingBuilder.java deleted file mode 100644 index e7e739f46a..0000000000 --- a/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/AttributeRankingBuilder.java +++ /dev/null @@ -1,196 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian <mathieu.bastian@gephi.org> - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ranking.plugin; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Comparator; -import java.util.List; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.attribute.api.AttributeUtils; -import org.gephi.attribute.api.Column; -import org.gephi.attribute.time.TimestampValueSet; -import org.gephi.graph.api.*; -import org.gephi.ranking.api.Ranking; -import org.gephi.ranking.api.RankingModel; -import org.gephi.ranking.spi.RankingBuilder; -import org.openide.util.Lookup; -import org.openide.util.lookup.ServiceProvider; - -/** - * Ranking builder for attributes. Builds the {@link Ranking} instances that - * maps to all numerical attribute columns. <p> The ranking is built for the - * workspace associated to the given {@link RankingModel}. <p> When the column - * is dynamic, the ranking uses the current time interval defined in the - * DynamicAPI. The time interval value is set when the ranking is built and - * won't be updated. - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = RankingBuilder.class) -public class AttributeRankingBuilder implements RankingBuilder { - - private final GraphController graphController; - - public AttributeRankingBuilder() { - graphController = Lookup.getDefault().lookup(GraphController.class); - } - - @Override - public Ranking[] buildRanking(RankingModel model) { - AttributeModel attributeModel = graphController.getAttributeModel(model.getWorkspace()); - List<Ranking> rankings = new ArrayList<Ranking>(); - GraphModel graphModel = graphController.getGraphModel(model.getWorkspace()); - - //Nodes - for (Column col : attributeModel.getNodeTable()) { - if (!col.isProperty() && col.isNumber()) { - AttributeRanking ranking = new AttributeRanking(Ranking.NODE_ELEMENT, col, graphModel, model); - rankings.add(ranking); - } - } - - //Edges - for (Column col : attributeModel.getEdgeTable()) { - if (!col.isProperty() && col.isNumber()) { - AttributeRanking ranking = new AttributeRanking(Ranking.EDGE_ELEMENT, col, graphModel, model); - rankings.add(ranking); - } - } - - //Sort attributes by alphabetical order - Ranking[] rankingArray = rankings.toArray(new Ranking[0]); - Arrays.sort(rankingArray, new Comparator<Ranking>() { - @Override - public int compare(Ranking a, Ranking b) { - return (a.toString().compareTo(b.toString())); - } - }); - - return rankingArray; - } - - @Override - public Ranking refreshRanking(Ranking ranking) { - if (ranking == null) { - throw new NullPointerException(); - } - if (ranking instanceof AttributeRanking) { - return ((AttributeRanking) ranking).clone(); - } else { - throw new IllegalArgumentException("Ranking must be an AttributeRanking"); - } - } - - public static class AttributeRanking extends AbstractRanking<Element> { - - private final Column column; - private final Graph graph; - - public AttributeRanking(String elementType, Column column, GraphModel graphModel, RankingModel rankingModel) { - super(elementType, column.getId(), rankingModel); - this.column = column; - this.graph = rankingModel.useLocalScale() ? graphModel.getGraphVisible() : graphModel.getGraph(); - } - - @Override - public Number getValue(Element attributable) { - return (Number) attributable.getAttribute(column, graph.getView()); - } - - @Override - public float normalize(Number value) { - return (value.floatValue() - getMinimumValue().floatValue()) / (float) (getMaximumValue().floatValue() - getMinimumValue().floatValue()); - } - - @Override - public Number unNormalize(float normalizedValue) { - double val = (normalizedValue * (getMaximumValue().doubleValue() - getMinimumValue().doubleValue())) + getMinimumValue().doubleValue(); - Class type = column.getTypeClass(); - if (column.isDynamic()) { - type = AttributeUtils.getStaticType((Class<? extends TimestampValueSet>) type); - } - if (type.equals(Double.class)) { - return new Double(val); - } else if (type.equals(Integer.class)) { - return new Integer((int) val); - } else if (type.equals(Float.class)) { - return new Float(val); - } else if (type.equals(Long.class)) { - return new Long((long) val); - } else if (type.equals(Short.class)) { - return new Short((short) val); - } else if (type.equals(Byte.class)) { - return new Byte((byte) val); - } - return new Double(val); - } - - @Override - public String getDisplayName() { - return column.getTitle(); - } - - @Override - public Number getMaximumValue() { - if (maximum == null) { - AbstractRanking.refreshMinMax(this, graph); - } - return maximum; - } - - @Override - public Number getMinimumValue() { - if (minimum == null) { - AbstractRanking.refreshMinMax(this, graph); - } - return minimum; - } - - @Override - protected AttributeRanking clone() { - GraphModel graphModel = graph.getView().getGraphModel(); - AttributeRanking newRanking = new AttributeRanking(elementType, column, graphModel, rankingModel); - return newRanking; - } - } -} diff --git a/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/DegreeRankingBuilder.java b/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/DegreeRankingBuilder.java deleted file mode 100644 index 04b2b31c05..0000000000 --- a/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/DegreeRankingBuilder.java +++ /dev/null @@ -1,145 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian <mathieu.bastian@gephi.org> - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ranking.plugin; - -import org.gephi.graph.api.Graph; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.GraphModel; -import org.gephi.graph.api.Node; -import org.gephi.project.api.Workspace; -import org.gephi.ranking.api.Ranking; -import org.gephi.ranking.api.RankingModel; -import org.gephi.ranking.spi.RankingBuilder; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; -import org.openide.util.lookup.ServiceProvider; - -/** - * Ranking builder for graph degree. Builds the {@link Ranking} instances that - * performs the ranking for node degrees. - * <p> - * The ranking is built for the workspace associated to the given - * {@link RankingModel}. - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = RankingBuilder.class, position = 100) -public class DegreeRankingBuilder implements RankingBuilder { - - private final GraphController graphController; - - public DegreeRankingBuilder() { - graphController = Lookup.getDefault().lookup(GraphController.class); - } - - @Override - public Ranking[] buildRanking(RankingModel model) { - Workspace workspace = model.getWorkspace(); - GraphModel graphModel = graphController.getGraphModel(workspace); - - return new Ranking[]{new DegreeRanking(Ranking.NODE_ELEMENT, graphModel, model)}; - } - - @Override - public Ranking refreshRanking(Ranking ranking) { - if (ranking == null) { - throw new NullPointerException(); - } - if (ranking instanceof DegreeRanking) { - return ((DegreeRanking) ranking).clone(); - } else { - throw new IllegalArgumentException("Ranking must be an DegreeRanking"); - } - } - - private static class DegreeRanking extends AbstractRanking<Node> { - - private final Graph graph; - - public DegreeRanking(String elementType, GraphModel graphModel, RankingModel rankingModel) { - super(elementType, Ranking.DEGREE_RANKING, rankingModel); - this.graph = rankingModel.useLocalScale() ? graphModel.getGraphVisible() : graphModel.getGraph();; - } - - @Override - public Integer getValue(Node element) { - return graph.getDegree(element); - } - - @Override - public float normalize(Number value) { - return (float) ((value.intValue() - getMinimumValue().intValue()) / (float) (getMaximumValue().intValue() - getMinimumValue().intValue())); - } - - @Override - public Integer unNormalize(float normalizedValue) { - return (int) (normalizedValue * (getMaximumValue().intValue() - getMinimumValue().intValue())) + getMinimumValue().intValue(); - } - - @Override - public String getDisplayName() { - return NbBundle.getMessage(DegreeRankingBuilder.class, "DegreeRanking.name"); - } - - @Override - public Number getMaximumValue() { - if (maximum == null) { - AbstractRanking.refreshMinMax(this, graph); - } - return maximum; - } - - @Override - public Number getMinimumValue() { - if (minimum == null) { - AbstractRanking.refreshMinMax(this, graph); - } - return minimum; - } - - @Override - protected DegreeRanking clone() { - GraphModel graphModel = graph.getView().getGraphModel(); - return new DegreeRanking(elementType, graphModel, rankingModel); - } - } -} diff --git a/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/InDegreeRankingBuilder.java b/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/InDegreeRankingBuilder.java deleted file mode 100644 index 8505efada0..0000000000 --- a/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/InDegreeRankingBuilder.java +++ /dev/null @@ -1,148 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian <mathieu.bastian@gephi.org> - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ranking.plugin; - -import org.gephi.graph.api.DirectedGraph; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.GraphModel; -import org.gephi.graph.api.Node; -import org.gephi.project.api.Workspace; -import org.gephi.ranking.api.Ranking; -import org.gephi.ranking.api.RankingModel; -import org.gephi.ranking.spi.RankingBuilder; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; -import org.openide.util.lookup.ServiceProvider; - -/** - * Ranking builder for graph in degree. Builds the {@link Ranking} instances - * that performs the ranking for node in degrees. - * <p> - * The ranking is built for the workspace associated to the given - * {@link RankingModel}. - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = RankingBuilder.class, position = 200) -public class InDegreeRankingBuilder implements RankingBuilder { - - private final GraphController graphController; - - public InDegreeRankingBuilder() { - graphController = Lookup.getDefault().lookup(GraphController.class); - } - - @Override - public Ranking[] buildRanking(RankingModel model) { - Workspace workspace = model.getWorkspace(); - GraphModel graphModel = graphController.getGraphModel(workspace); - if (graphModel.isDirected() || graphModel.isMixed()) { - return new Ranking[]{new InDegreeRanking(Ranking.NODE_ELEMENT, graphModel, model)}; - } - - return null; - } - - @Override - public Ranking refreshRanking(Ranking ranking) { - if (ranking == null) { - throw new NullPointerException(); - } - if (ranking instanceof InDegreeRanking) { - return ((InDegreeRanking) ranking).clone(); - } else { - throw new IllegalArgumentException("Ranking must be an DegreeRanking"); - } - } - - private static class InDegreeRanking extends AbstractRanking<Node> { - - private final DirectedGraph graph; - - public InDegreeRanking(String elementType, GraphModel graphModel, RankingModel rankingModel) { - super(elementType, Ranking.INDEGREE_RANKING, rankingModel); - this.graph = rankingModel.useLocalScale() ? graphModel.getDirectedGraphVisible() : graphModel.getDirectedGraph();; - } - - @Override - public Integer getValue(Node element) { - return graph.getInDegree(element); - } - - @Override - public float normalize(Number value) { - return (float) ((value.intValue() - getMinimumValue().intValue()) / (float) (getMaximumValue().intValue() - getMinimumValue().intValue())); - } - - @Override - public Integer unNormalize(float normalizedValue) { - return (int) (normalizedValue * (getMaximumValue().intValue() - getMinimumValue().intValue())) + getMinimumValue().intValue(); - } - - @Override - public String getDisplayName() { - return NbBundle.getMessage(InDegreeRankingBuilder.class, "InDegreeRanking.name"); - } - - @Override - public Number getMaximumValue() { - if (maximum == null) { - AbstractRanking.refreshMinMax(this, graph); - } - return maximum; - } - - @Override - public Number getMinimumValue() { - if (minimum == null) { - AbstractRanking.refreshMinMax(this, graph); - } - return minimum; - } - - @Override - protected InDegreeRanking clone() { - GraphModel graphModel = graph.getView().getGraphModel(); - return new InDegreeRanking(elementType, graphModel, rankingModel); - } - } -} diff --git a/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/OutDegreeRankingBuilder.java b/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/OutDegreeRankingBuilder.java deleted file mode 100644 index bbccca09df..0000000000 --- a/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/OutDegreeRankingBuilder.java +++ /dev/null @@ -1,146 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian <mathieu.bastian@gephi.org> - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ranking.plugin; - -import org.gephi.graph.api.DirectedGraph; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.GraphModel; -import org.gephi.graph.api.Node; -import org.gephi.project.api.Workspace; -import org.gephi.ranking.api.Ranking; -import org.gephi.ranking.api.RankingModel; -import org.gephi.ranking.spi.RankingBuilder; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; -import org.openide.util.lookup.ServiceProvider; - -/** - * Ranking builder for graph out degree. Builds the {@link Ranking} instances - * that performs the ranking for node out degrees. <p> The ranking is built for - * the workspace associated to the given {@link RankingModel}. - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = RankingBuilder.class, position = 300) -public class OutDegreeRankingBuilder implements RankingBuilder { - - private final GraphController graphController; - - public OutDegreeRankingBuilder() { - graphController = Lookup.getDefault().lookup(GraphController.class); - } - - @Override - public Ranking[] buildRanking(RankingModel model) { - Workspace workspace = model.getWorkspace(); - GraphModel graphModel = graphController.getGraphModel(workspace); - if (graphModel.isDirected() || graphModel.isMixed()) { - return new Ranking[]{new OutDegreeRanking(Ranking.NODE_ELEMENT, graphModel, model)}; - } - - return null; - } - - @Override - public Ranking refreshRanking(Ranking ranking) { - if (ranking == null) { - throw new NullPointerException(); - } - if (ranking instanceof OutDegreeRanking) { - return ((OutDegreeRanking) ranking).clone(); - } else { - throw new IllegalArgumentException("Ranking must be an DegreeRanking"); - } - } - - private static class OutDegreeRanking extends AbstractRanking<Node> { - - private final DirectedGraph graph; - - public OutDegreeRanking(String elementType, GraphModel graphModel, RankingModel rankingModel) { - super(elementType, Ranking.OUTDEGREE_RANKING, rankingModel); - this.graph = rankingModel.useLocalScale() ? graphModel.getDirectedGraphVisible() : graphModel.getDirectedGraph();; - } - - @Override - public Integer getValue(Node element) { - return graph.getOutDegree(element); - } - - @Override - public float normalize(Number value) { - return (float) ((value.intValue() - getMinimumValue().intValue()) / (float) (getMaximumValue().intValue() - getMinimumValue().intValue())); - } - - @Override - public Integer unNormalize(float normalizedValue) { - return (int) (normalizedValue * (getMaximumValue().intValue() - getMinimumValue().intValue())) + getMinimumValue().intValue(); - } - - @Override - public String getDisplayName() { - return NbBundle.getMessage(OutDegreeRankingBuilder.class, "OutDegreeRanking.name"); - } - - @Override - public Number getMaximumValue() { - if (maximum == null) { - AbstractRanking.refreshMinMax(this, graph); - } - return maximum; - } - - @Override - public Number getMinimumValue() { - if (minimum == null) { - AbstractRanking.refreshMinMax(this, graph); - } - return minimum; - } - - @Override - protected OutDegreeRanking clone() { - GraphModel graphModel = graph.getView().getGraphModel(); - return new OutDegreeRanking(elementType, graphModel, rankingModel); - } - } -} diff --git a/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/transformer/AbstractColorTransformer.java b/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/transformer/AbstractColorTransformer.java deleted file mode 100644 index e5e6868024..0000000000 --- a/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/transformer/AbstractColorTransformer.java +++ /dev/null @@ -1,200 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian, Mathieu Jacomy, Julian Bilcke -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ranking.plugin.transformer; - -import java.awt.Color; -import java.io.Serializable; -import java.util.Arrays; -import org.gephi.ranking.api.Transformer; -import org.openide.util.Exceptions; - -/** - * Color transformer. Uses a linear gradient to apply colors to objects. - * - * @see Transformer - * @author Mathieu Bastian - */ -public abstract class AbstractColorTransformer<Target> extends AbstractTransformer<Target> { - - protected LinearGradient linearGradient = new LinearGradient(new Color[]{Color.WHITE, Color.BLACK}, new float[]{0f, 1f}); - - public AbstractColorTransformer() { - } - - public AbstractColorTransformer(float lowerBound, float upperBound) { - super(lowerBound, upperBound); - } - - public AbstractColorTransformer(float lowerBound, float upperBound, Color[] colors, float[] positions) { - super(lowerBound, upperBound); - this.linearGradient = new LinearGradient(colors, positions); - } - - public AbstractColorTransformer(Color[] colors, float[] positions) { - this.linearGradient = new LinearGradient(colors, positions); - } - - public LinearGradient getLinearGradient() { - try { - return (LinearGradient)linearGradient.clone(); - } catch (CloneNotSupportedException ex) { - Exceptions.printStackTrace(ex); - } - return null; - } - - public void setLinearGradient(LinearGradient linearGradient) { - this.linearGradient = linearGradient; - } - - public float[] getColorPositions() { - return linearGradient.getPositions(); - } - - public Color[] getColors() { - return linearGradient.getColors(); - } - - public void setColorPositions(float[] positions) { - linearGradient.setPositions(positions); - } - - public void setColors(Color[] colors) { - linearGradient.setColors(colors); - } - - public Color getColor(float normalizedValue) { - return linearGradient.getValue(normalizedValue); - } - - public static class LinearGradient implements Serializable, Cloneable { - - private Color[] colors; - private float[] positions; - - public LinearGradient(Color colors[], float[] positions) { - if (colors == null || positions == null) { - throw new NullPointerException(); - } - if (colors.length != positions.length) { - throw new IllegalArgumentException(); - } - this.colors = colors; - this.positions = positions; - } - - public Color getValue(float pos) { - for (int a = 0; a < positions.length - 1; a++) { - if (positions[a] == pos) { - return colors[a]; - } - if (positions[a] < pos && pos < positions[a + 1]) { - float v = (pos - positions[a]) / (positions[a + 1] - positions[a]); - return tween(colors[a], colors[a + 1], v); - } - } - if (pos <= positions[0]) { - return colors[0]; - } - if (pos >= positions[positions.length - 1]) { - return colors[colors.length - 1]; - } - return null; - } - - private Color tween(Color c1, Color c2, float p) { - return new Color( - (int) (c1.getRed() * (1 - p) + c2.getRed() * (p)), - (int) (c1.getGreen() * (1 - p) + c2.getGreen() * (p)), - (int) (c1.getBlue() * (1 - p) + c2.getBlue() * (p)), - (int) (c1.getAlpha() * (1 - p) + c2.getAlpha() * (p))); - } - - public Color[] getColors() { - return colors; - } - - public float[] getPositions() { - return positions; - } - - public void setColors(Color[] colors) { - this.colors = colors; - } - - public void setPositions(float[] positions) { - this.positions = positions; - } - - @Override - public boolean equals(Object obj) { - if (obj == null) { - return false; - } - if (getClass() != obj.getClass()) { - return false; - } - final LinearGradient other = (LinearGradient) obj; - if (!Arrays.deepEquals(this.colors, other.colors)) { - return false; - } - if (!Arrays.equals(this.positions, other.positions)) { - return false; - } - return true; - } - - @Override - public int hashCode() { - int hash = 3; - hash = 17 * hash + Arrays.deepHashCode(this.colors); - hash = 17 * hash + Arrays.hashCode(this.positions); - return hash; - } - - @Override - protected Object clone() throws CloneNotSupportedException { - LinearGradient cl = new LinearGradient(colors, positions); - return cl; - } - } -} diff --git a/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/transformer/AbstractSizeTransformer.java b/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/transformer/AbstractSizeTransformer.java deleted file mode 100644 index 9e79ac01f2..0000000000 --- a/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/transformer/AbstractSizeTransformer.java +++ /dev/null @@ -1,90 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian, Mathieu Jacomy, Julian Bilcke -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ranking.plugin.transformer; - -import org.gephi.ranking.api.Transformer; - -/** - * Size transformer. Use a linear scale + the interpolator to compute object's - * size. - * - * @see Transformer - * @author Mathieu Bastian - */ -public abstract class AbstractSizeTransformer<Target> extends AbstractTransformer<Target> { - - protected float minSize = 1f; - protected float maxSize = 4f; - - public AbstractSizeTransformer() { - } - - public AbstractSizeTransformer(float lowerBound, float upperBound) { - super(lowerBound, upperBound); - } - - public AbstractSizeTransformer(float lowerBound, float upperBound, float minSize, float maxSize) { - super(lowerBound, upperBound); - this.minSize = minSize; - this.maxSize = maxSize; - } - - public float getMinSize() { - return minSize; - } - - public float getMaxSize() { - return maxSize; - } - - public void setMinSize(float minSize) { - this.minSize = minSize; - } - - public void setMaxSize(float maxSize) { - this.maxSize = maxSize; - } - - public float getSize(float normalizedValue) { - return normalizedValue * (maxSize - minSize) + minSize; - } -} diff --git a/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/transformer/AbstractTransformer.java b/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/transformer/AbstractTransformer.java deleted file mode 100644 index 67db1aecef..0000000000 --- a/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/transformer/AbstractTransformer.java +++ /dev/null @@ -1,90 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian, Mathieu Jacomy, Julian Bilcke -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ranking.plugin.transformer; - -import java.io.Serializable; -import org.gephi.ranking.api.Transformer; - -/** - * Abstract transformer implementation. Use the given ranking and interpolator to - * transform object's appearance. - * - * @author Mathieu Bastian - */ -public abstract class AbstractTransformer<Target> implements Transformer<Target>, Serializable { - - protected float lowerBound = 0f; - protected float upperBound = 1f; - - public AbstractTransformer() { - } - - public AbstractTransformer(float lowerBound, float upperBound) { - this.lowerBound = lowerBound; - this.upperBound = upperBound; - } - - @Override - public float getLowerBound() { - return lowerBound; - } - - @Override - public void setLowerBound(float lowerBound) { - this.lowerBound = lowerBound; - } - - @Override - public float getUpperBound() { - return upperBound; - } - - @Override - public void setUpperBound(float upperBound) { - this.upperBound = upperBound; - } - - @Override - public boolean isInBounds(float value) { - return value >= lowerBound && value <= upperBound; - } -} diff --git a/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/transformer/ElementColorTransformerBuilder.java b/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/transformer/ElementColorTransformerBuilder.java deleted file mode 100644 index 6f35dbe0b9..0000000000 --- a/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/transformer/ElementColorTransformerBuilder.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian, Mathieu Jacomy, Julian Bilcke - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ranking.plugin.transformer; - -import java.awt.Color; -import org.gephi.graph.api.Element; -import org.gephi.ranking.api.Ranking; -import org.gephi.ranking.api.Transformer; -import org.gephi.ranking.spi.TransformerBuilder; -import org.openide.util.lookup.ServiceProvider; - -/** - * Renderable color transformer builder. Builds - * <code>RenderableColorTransformer</code> instances, that receives - * {@link Renderable} targets. Renderable can be nodes or edges data. - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = TransformerBuilder.class, position = 100) -public class ElementColorTransformerBuilder implements TransformerBuilder { - - @Override - public Transformer buildTransformer() { - return new RenderableColorTransformer(); - } - - @Override - public boolean isTransformerForElement(String elementType) { - return elementType.equals(Ranking.NODE_ELEMENT) || elementType.equals(Ranking.EDGE_ELEMENT); - } - - @Override - public String getName() { - return Transformer.RENDERABLE_COLOR; - } - - public static class RenderableColorTransformer extends AbstractColorTransformer<Element> { - - @Override - public Object transform(Element target, float normalizedValue) { - Color color = getColor(normalizedValue); - target.setColor(color); - return color; - } - } -} diff --git a/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/transformer/ElementSizeTransformerBuilder.java b/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/transformer/ElementSizeTransformerBuilder.java deleted file mode 100644 index f0a256b391..0000000000 --- a/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/transformer/ElementSizeTransformerBuilder.java +++ /dev/null @@ -1,90 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian, Mathieu Jacomy, Julian Bilcke - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ranking.plugin.transformer; - -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.Element; -import org.gephi.graph.api.Node; -import org.gephi.ranking.api.Ranking; -import org.gephi.ranking.api.Transformer; -import org.gephi.ranking.spi.TransformerBuilder; -import org.openide.util.lookup.ServiceProvider; - -/** - * Renderable size transformer builder. Builds - * <code>RenderableSizeTransformer</code> instances, that receives - * {@link Renderable} targets. Renderable can be nodes or edges data. - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = TransformerBuilder.class, position = 200) -public class ElementSizeTransformerBuilder implements TransformerBuilder { - - @Override - public Transformer buildTransformer() { - return new RenderableSizeTransformer(); - } - - @Override - public boolean isTransformerForElement(String elementType) { - return elementType.equals(Ranking.NODE_ELEMENT); - } - - @Override - public String getName() { - return Transformer.RENDERABLE_SIZE; - } - - public static class RenderableSizeTransformer extends AbstractSizeTransformer<Element> { - - @Override - public Object transform(Element target, float normalizedValue) { - float size = getSize(normalizedValue); - if (target instanceof Node) { - ((Node) target).setSize(size); - } else if (target instanceof Edge) { - ((Edge) target).setWeight(size); - } - return Float.valueOf(size); - } - } -} diff --git a/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/transformer/LabelColorTransformerBuilder.java b/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/transformer/LabelColorTransformerBuilder.java deleted file mode 100644 index dc77c79950..0000000000 --- a/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/transformer/LabelColorTransformerBuilder.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian, Mathieu Jacomy, Julian Bilcke - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ranking.plugin.transformer; - -import java.awt.Color; -import org.gephi.graph.api.Element; -import org.gephi.ranking.api.Ranking; -import org.gephi.ranking.api.Transformer; -import org.gephi.ranking.spi.TransformerBuilder; -import org.openide.util.lookup.ServiceProvider; - -/** - * Label color transformer builder. Builds - * <code>LabelColorTransformer</code> instances, that receives - * {@link Renderable} targets. - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = TransformerBuilder.class, position = 300) -public class LabelColorTransformerBuilder implements TransformerBuilder { - - @Override - public Transformer buildTransformer() { - return new LabelColorTransformer(); - } - - @Override - public boolean isTransformerForElement(String elementType) { - return elementType.equals(Ranking.NODE_ELEMENT) || elementType.equals(Ranking.EDGE_ELEMENT); - } - - @Override - public String getName() { - return Transformer.LABEL_COLOR; - } - - public static class LabelColorTransformer extends AbstractColorTransformer<Element> { - - @Override - public Object transform(Element target, float normalizedValue) { - Color color = getColor(normalizedValue); - target.getTextProperties().setColor(color); - return color; - } - } -} diff --git a/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/transformer/LabelSizeTransformerBuilder.java b/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/transformer/LabelSizeTransformerBuilder.java deleted file mode 100644 index 8d37b97fb0..0000000000 --- a/modules/RankingPlugin/src/main/java/org/gephi/ranking/plugin/transformer/LabelSizeTransformerBuilder.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian, Mathieu Jacomy, Julian Bilcke - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ranking.plugin.transformer; - -import org.gephi.graph.api.Element; -import org.gephi.ranking.api.Ranking; -import org.gephi.ranking.api.Transformer; -import org.gephi.ranking.spi.TransformerBuilder; -import org.openide.util.lookup.ServiceProvider; - -/** - * Label size transformer builder. Builds - * <code>LabelSizeTransformer</code> instances, that receives {@link Renderable} - * targets. - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = TransformerBuilder.class, position = 400) -public class LabelSizeTransformerBuilder implements TransformerBuilder { - - @Override - public Transformer buildTransformer() { - return new LabelSizeTransformer(); - } - - @Override - public boolean isTransformerForElement(String elementType) { - return elementType.equals(Ranking.NODE_ELEMENT) || elementType.equals(Ranking.EDGE_ELEMENT); - } - - @Override - public String getName() { - return Transformer.LABEL_SIZE; - } - - public static class LabelSizeTransformer extends AbstractSizeTransformer<Element> { - - @Override - public Object transform(Element target, float normalizedValue) { - float size = getSize(normalizedValue); - target.getTextProperties().setSize(size); - return Float.valueOf(size); - } - } -} diff --git a/modules/RankingPlugin/src/main/nbm/manifest.mf b/modules/RankingPlugin/src/main/nbm/manifest.mf deleted file mode 100644 index 844c106a07..0000000000 --- a/modules/RankingPlugin/src/main/nbm/manifest.mf +++ /dev/null @@ -1,4 +0,0 @@ -Manifest-Version: 1.0 -AutoUpdate-Essential-Module: true -OpenIDE-Module-Localizing-Bundle: org/gephi/ranking/plugin/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file diff --git a/modules/RankingPlugin/src/main/nbm/module.xml b/modules/RankingPlugin/src/main/nbm/module.xml deleted file mode 100644 index 866e98df3b..0000000000 --- a/modules/RankingPlugin/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<nbm> - <!-- - <moduleType>autoload</moduleType> - <codeNameBase>org.gephi.ranking.plugin/1</codeNameBase> - <licenseName>Apache License, Version 2.0</licenseName> - <licenseFile>license.txt</licenseFile> - --> -</nbm> diff --git a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/Bundle.properties b/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/Bundle.properties deleted file mode 100644 index 94c1231202..0000000000 --- a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/Bundle.properties +++ /dev/null @@ -1,11 +0,0 @@ -OpenIDE-Module-Display-Category=Plugin -OpenIDE-Module-Long-Description=\ - Implement Ranking and Transformer builders. \ - Ranking builders provide the source of rankings (e.g. \ - Degree, Attributes) and transformers the method to convert numerical values to color or sizes. -OpenIDE-Module-Name=Ranking Plugin -OpenIDE-Module-Short-Description=Implement Ranking and Transformer builders - -DegreeRanking.name = Degree -InDegreeRanking.name = InDegree -OutDegreeRanking.name = OutDegree diff --git a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/Bundle_cs.properties b/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/Bundle_cs.properties deleted file mode 100644 index 4ed82e28b4..0000000000 --- a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/Bundle_cs.properties +++ /dev/null @@ -1,17 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz <zbynek.schwarz@gmail.com>, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-15 20\:56+0000\nLast-Translator\: Zbyn\u011bk Schwarz <zbynek.schwarz@gmail.com>\nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=Zav\u00e9st tv\u016frce hodnocen\u00ed a transformace. Tv\u016frci hodnocen\u00ed poskytuj\u00ed zdroj hodnocen\u00ed (nap\u0159. stupe\u0148, vlastnosti) a tv\u016frci transformace metodu pro p\u0159evod \u010d\u00edseln\u00fdch hodnot na barvu \u010di velikosti. - -OpenIDE-Module-Short-Description=Zav\u00e9st tv\u016frce hodnocen\u00ed a transformace - -DegreeRanking.name=Stupe\u0148 - -InDegreeRanking.name=Stupe\u0148Dovnit\u0159 - -OutDegreeRanking.name=Stupe\u0148Ven diff --git a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/Bundle_es.properties b/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/Bundle_es.properties deleted file mode 100644 index 94327576da..0000000000 --- a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/Bundle_es.properties +++ /dev/null @@ -1,17 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos <eduramiba@gmail.com>, 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-07 11\:29+0000\nLast-Translator\: Eduardo Ramos <eduramiba@gmail.com>\nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Implementa constructores de Ranking y Transformer. Los constructores de Ranking proporcionan la fuente de clasificaciones (por ejemplo Grado, Atributos) y los Transformer el m\u00e9todo para convertir valores num\u00e9ricos a colores o tama\u00f1os. - -OpenIDE-Module-Short-Description=Implementa constructores de Ranking y Transformer - -DegreeRanking.name=Grado - -InDegreeRanking.name=Grado de entrada - -OutDegreeRanking.name=Grado de salida diff --git a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/Bundle_fr.properties b/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/Bundle_fr.properties deleted file mode 100644 index 49ee022c59..0000000000 --- a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/Bundle_fr.properties +++ /dev/null @@ -1,17 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# <sebastien.heymann@gmail.com>, 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-07 11\:06+0000\nLast-Translator\: gephi <sebastien.heymann@gmail.com>\nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Impl\u00e9mente Ranking et les Transformer builders. Les Ranking builders fournissent la source de classement (ex. Degr\u00e9, Attributs) et les transformers les m\u00e9thode conversion num\u00e9rique des valeurs en couleur et taille. - -OpenIDE-Module-Short-Description=Impl\u00e9mente Ranking et les Transformer builders - -DegreeRanking.name=Degr\u00e9 - -InDegreeRanking.name=Degr\u00e9 entrant - -OutDegreeRanking.name=Degr\u00e9 sortant diff --git a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/Bundle_ja.properties b/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/Bundle_ja.properties deleted file mode 100644 index 35c0d6a1ef..0000000000 --- a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/Bundle_ja.properties +++ /dev/null @@ -1,17 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida <kida.siro@gmail.com>, 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-04 09\:40+0000\nLast-Translator\: Siro Kida <kida.siro@gmail.com>\nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u30e9\u30f3\u30ad\u30f3\u30b0\u3068\u30c8\u30e9\u30f3\u30b9\u30d5\u30a9\u30fc\u30de\u306e\u30d3\u30eb\u30c0\u30fc\u3092\u5b9f\u88c5\u3002\u30e9\u30f3\u30ad\u30f3\u30b0\u30d3\u30eb\u30c0\u30fc\u306f\u3001\u30e9\u30f3\u30ad\u30f3\u30b0\u306e\u30bd\u30fc\u30b9(\u4f8b\u3048\u3070\u6b21\u6570\u3001\u5c5e\u6027)\u3092\u3001\u30c8\u30e9\u30f3\u30b9\u30d5\u30a9\u30fc\u30de\u30fc\u306f\u6570\u5024\u3092\u8272\u3084\u30b5\u30a4\u30ba\u306b\u5909\u63db\u3059\u308b\u65b9\u6cd5\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002 - -OpenIDE-Module-Short-Description=\u30e9\u30f3\u30ad\u30f3\u30b0\u3068\u30c8\u30e9\u30f3\u30b9\u30d5\u30a9\u30fc\u30de\u30d3\u30eb\u30c0\u30fc\u3092\u5b9f\u88c5 - -DegreeRanking.name=\u6b21\u6570 - -InDegreeRanking.name=\u5165\u6b21\u6570 - -OutDegreeRanking.name=\u51fa\u6b21\u6570 diff --git a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/Bundle_pt_BR.properties b/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/Bundle_pt_BR.properties deleted file mode 100644 index 5826418119..0000000000 --- a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/Bundle_pt_BR.properties +++ /dev/null @@ -1,17 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr <celiofariajr@gmail.com>, 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 14\:28+0000\nLast-Translator\: C\u00e9lio Faria Jr. <celiofariajr@gmail.com>\nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Implementar construtores de Classifica\u00e7\u00e3o e Transforma\u00e7\u00e3o. Construtores de Classifica\u00e7\u00e3o fornecem a fonte das classifica\u00e7\u00f5es (por exemplo, Grau, Atributos) e os de Transforma\u00e7\u00e3o fornecem os m\u00e9todos de convers\u00e3o de valores num\u00e9ricos para cores ou tamanhos. - -OpenIDE-Module-Short-Description=Implementar construtores de Classifica\u00e7\u00e3o e Transforma\u00e7\u00e3o - -DegreeRanking.name=Grau - -InDegreeRanking.name=Grau de entrada - -OutDegreeRanking.name=Grau de sa\u00edda diff --git a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/Bundle_ru.properties b/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/Bundle_ru.properties deleted file mode 100644 index 5f4254e1a3..0000000000 --- a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/Bundle_ru.properties +++ /dev/null @@ -1,17 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# <altsoph@gmail.com>, 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 15\:38+0000\nLast-Translator\: Altsoph <altsoph@gmail.com>\nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u0435\u0439 \u0440\u0430\u043d\u0436\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0440\u043e\u0432. \u041f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u0438 \u0440\u0430\u043d\u0436\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0442 \u043e\u0441\u043d\u043e\u0432\u0443 \u0434\u043b\u044f \u0440\u0430\u043d\u0436\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u044b, \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0438 \u0443\u0437\u043b\u043e\u0432). \u0422\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0440\u044b \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u0434\u043b\u044f \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u0446\u0432\u0435\u0442 \u0438 \u0440\u0430\u0437\u043c\u0435\u0440. - -OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u0435\u0439 \u0440\u0430\u043d\u0436\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0440\u043e\u0432 - -DegreeRanking.name=\u041c\u043e\u0449\u043d\u043e\u0441\u0442\u044c \u0443\u0437\u043b\u0430 - -InDegreeRanking.name=\u0412\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c \u0443\u0437\u043b\u0430 - -OutDegreeRanking.name=\u0418\u0441\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c \u0443\u0437\u043b\u0430 diff --git a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/Bundle_zh_CN.properties b/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/Bundle_zh_CN.properties deleted file mode 100644 index 6ef980b265..0000000000 --- a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/Bundle_zh_CN.properties +++ /dev/null @@ -1,16 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:07+0000\nLast-Translator\: gephi <sebastien.heymann@gmail.com>\nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u5b9e\u73b0\u6392\u540d\u548c\u53d8\u6362\u6784\u5efa\u5668\u3002\u6392\u540d\u6784\u5efa\u5668\u63d0\u4f9b\u6392\u540d\u8d44\u6e90(\u5982\u5ea6\uff0c\u5c5e\u6027) \u548c\u53d8\u6362\uff0c\u4ee5\u53ca\u628a\u6570\u503c\u8f6c\u6362\u6210\u989c\u8272\u6216\u5927\u5c0f\u7684\u53d8\u6362\u65b9\u6cd5\u3002 - -OpenIDE-Module-Short-Description=\u5b9e\u65bd\u6392\u540d\u548c\u53d8\u6362\u6784\u5efa\u5668 - -DegreeRanking.name=\u5ea6 - -InDegreeRanking.name=\u5165\u5ea6 - -OutDegreeRanking.name=\u51fa\u5ea6 diff --git a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/cs.po b/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/cs.po deleted file mode 100644 index d8976fbf8a..0000000000 --- a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/cs.po +++ /dev/null @@ -1,34 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz <zbynek.schwarz@gmail.com>, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-15 20:56+0000\n" -"Last-Translator: ZbynΔ›k Schwarz <zbynek.schwarz@gmail.com>\n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ZavΓ©st tvΕ―rce hodnocenΓ­ a transformace. TvΕ―rci hodnocenΓ­ poskytujΓ­ zdroj hodnocenΓ­ (napΕ™. stupeň, vlastnosti) a tvΕ―rci transformace metodu pro pΕ™evod číselnΓ½ch hodnot na barvu či velikosti." - -msgid "OpenIDE-Module-Short-Description" -msgstr "ZavΓ©st tvΕ―rce hodnocenΓ­ a transformace" - -msgid "DegreeRanking.name" -msgstr "Stupeň" - -msgid "InDegreeRanking.name" -msgstr "StupeňDovnitΕ™" - -msgid "OutDegreeRanking.name" -msgstr "StupeňVen" diff --git a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/es.po b/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/es.po deleted file mode 100644 index bda5562af2..0000000000 --- a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/es.po +++ /dev/null @@ -1,34 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos <eduramiba@gmail.com>, 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-07 11:29+0000\n" -"Last-Translator: Eduardo Ramos <eduramiba@gmail.com>\n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Implementa constructores de Ranking y Transformer. Los constructores de Ranking proporcionan la fuente de clasificaciones (por ejemplo Grado, Atributos) y los Transformer el mΓ©todo para convertir valores numΓ©ricos a colores o tamaΓ±os." - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implementa constructores de Ranking y Transformer" - -msgid "DegreeRanking.name" -msgstr "Grado" - -msgid "InDegreeRanking.name" -msgstr "Grado de entrada" - -msgid "OutDegreeRanking.name" -msgstr "Grado de salida" diff --git a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/fr.po b/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/fr.po deleted file mode 100644 index 0a534f3204..0000000000 --- a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/fr.po +++ /dev/null @@ -1,34 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# <sebastien.heymann@gmail.com>, 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-07 11:06+0000\n" -"Last-Translator: gephi <sebastien.heymann@gmail.com>\n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ImplΓ©mente Ranking et les Transformer builders. Les Ranking builders fournissent la source de classement (ex. DegrΓ©, Attributs) et les transformers les mΓ©thode conversion numΓ©rique des valeurs en couleur et taille." - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplΓ©mente Ranking et les Transformer builders" - -msgid "DegreeRanking.name" -msgstr "DegrΓ©" - -msgid "InDegreeRanking.name" -msgstr "DegrΓ© entrant" - -msgid "OutDegreeRanking.name" -msgstr "DegrΓ© sortant" diff --git a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/ja.po b/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/ja.po deleted file mode 100644 index c5edb0bd42..0000000000 --- a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/ja.po +++ /dev/null @@ -1,34 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida <kida.siro@gmail.com>, 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-04 09:40+0000\n" -"Last-Translator: Siro Kida <kida.siro@gmail.com>\n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "γƒ©γƒ³γ‚­γƒ³γ‚°γ¨γƒˆγƒ©γƒ³γ‚Ήγƒ•γ‚©γƒΌγƒžγγƒ“ルダーをεŸθ£…。ランキングビルダーは、ランキングγγ‚½γƒΌγ‚Ή(δΎ‹γˆγ°ζ¬‘ζ•°γ€ε±žζ€§)γ‚’γ€γƒˆγƒ©γƒ³γ‚Ήγƒ•γ‚©γƒΌγƒžγƒΌγ―ζ•°ε€€γ‚’θ‰²γ‚„γ‚΅γ‚€γ‚Ίγ«ε€‰ζ›γ™γ‚‹ζ–Ήζ³•γ‚’ζδΎ›γ—γΎγ™γ€‚" - -msgid "OpenIDE-Module-Short-Description" -msgstr "γƒ©γƒ³γ‚­γƒ³γ‚°γ¨γƒˆγƒ©γƒ³γ‚Ήγƒ•γ‚©γƒΌγƒžγƒ“γƒ«γƒ€γƒΌγ‚’εŸθ£…" - -msgid "DegreeRanking.name" -msgstr "欑数" - -msgid "InDegreeRanking.name" -msgstr "ε…₯欑数" - -msgid "OutDegreeRanking.name" -msgstr "出欑数" diff --git a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/org-gephi-ranking-plugin.pot b/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/org-gephi-ranking-plugin.pot deleted file mode 100644 index 75bbb87999..0000000000 --- a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/org-gephi-ranking-plugin.pot +++ /dev/null @@ -1,34 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team <gephi.team@lists.launchpad.net>, 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian <gephi.team@lists.launchpad.net>\n" -"Language-Team: English <https://launchpad.net/~gephi.team>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "" -"Implement Ranking and Transformer builders. Ranking builders provide the " -"source of rankings (e.g. Degree, Attributes) and transformers the method to " -"convert numerical values to color or sizes." - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implement Ranking and Transformer builders" - -msgid "DegreeRanking.name" -msgstr "Degree" - -msgid "InDegreeRanking.name" -msgstr "InDegree" - -msgid "OutDegreeRanking.name" -msgstr "OutDegree" diff --git a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/package.html b/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/package.html deleted file mode 100644 index 6460f3f4c9..0000000000 --- a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/package.html +++ /dev/null @@ -1,13 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<html> - <body bgcolor="white"> - Ranking Builders - <p> - Implementation of <code>RankingBuilder</code> defined in RankingAPI. - </p> - <p> - Ranking builders feeds the list of available rankings. By default, - ranking for degree, in-dgree, out-degree and attributes are provided. - </p> -</body> -</html> \ No newline at end of file diff --git a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/pt_BR.po b/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/pt_BR.po deleted file mode 100644 index acd18dea56..0000000000 --- a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/pt_BR.po +++ /dev/null @@ -1,34 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr <celiofariajr@gmail.com>, 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 14:28+0000\n" -"Last-Translator: CΓ©lio Faria Jr. <celiofariajr@gmail.com>\n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Implementar construtores de ClassificaΓ§Γ£o e TransformaΓ§Γ£o. Construtores de ClassificaΓ§Γ£o fornecem a fonte das classificaΓ§Γ΅es (por exemplo, Grau, Atributos) e os de TransformaΓ§Γ£o fornecem os mΓ©todos de conversΓ£o de valores numΓ©ricos para cores ou tamanhos." - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implementar construtores de ClassificaΓ§Γ£o e TransformaΓ§Γ£o" - -msgid "DegreeRanking.name" -msgstr "Grau" - -msgid "InDegreeRanking.name" -msgstr "Grau de entrada" - -msgid "OutDegreeRanking.name" -msgstr "Grau de saΓ­da" diff --git a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/ru.po b/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/ru.po deleted file mode 100644 index 00cfe92640..0000000000 --- a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/ru.po +++ /dev/null @@ -1,34 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# <altsoph@gmail.com>, 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 15:38+0000\n" -"Last-Translator: Altsoph <altsoph@gmail.com>\n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "РСализация построитСлСй ранТирования ΠΈ трансформаторов. ΠŸΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚Π΅Π»ΠΈ ранТирования ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ основу для ранТирования (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Ρ‹, мощности ΡƒΠ·Π»ΠΎΠ²). Врансформаторы ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Ρ‹ для прСобразования числСнных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² Ρ†Π²Π΅Ρ‚ ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€." - -msgid "OpenIDE-Module-Short-Description" -msgstr "РСализация построитСлСй ранТирования ΠΈ трансформаторов" - -msgid "DegreeRanking.name" -msgstr "ΠœΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ ΡƒΠ·Π»Π°" - -msgid "InDegreeRanking.name" -msgstr "Входящая ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ ΡƒΠ·Π»Π°" - -msgid "OutDegreeRanking.name" -msgstr "Π˜ΡΡ…ΠΎΠ΄ΡΡ‰Π°Ρ ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ ΡƒΠ·Π»Π°" diff --git a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/transformer/package.html b/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/transformer/package.html deleted file mode 100644 index acfde44ea9..0000000000 --- a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/transformer/package.html +++ /dev/null @@ -1,21 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<html> - <body bgcolor="white"> - Ranking Transformers - <p> - Implementation of <code>Transformer</code> defined in RankingAPI. - </p> - <p> - Use these transformers to: - <ul><li><b>RenderableColorTransformer:</b> Color nodes or edges. Input <code>NodeData</code> - or <code>EdgeData</code> elements.</li> - <li><b>RenderableSizerTransformer:</b> Size nodes or edges. Input <code>NodeData</code> - or <code>EdgeData</code> elements.</li> - <li><b>LabelColorTransformer:</b> Color node or edge labels. Input <code>NodeData</code> - or <code>EdgeData</code> elements.</li> - <li><b>LabelSizeTransformer:</b> Size node or edges labels. Input <code>NodeData</code> - or <code>EdgeData</code> elements.</li> - </ul> - </p> -</body> -</html> \ No newline at end of file diff --git a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/zh_CN.po b/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/zh_CN.po deleted file mode 100644 index ff4d54d15b..0000000000 --- a/modules/RankingPlugin/src/main/resources/org/gephi/ranking/plugin/zh_CN.po +++ /dev/null @@ -1,33 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:07+0000\n" -"Last-Translator: gephi <sebastien.heymann@gmail.com>\n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "εžηŽ°ζŽ’εε’Œε˜ζ’ζž„ε»Ίε™¨γ€‚ζŽ’εζž„ε»Ίε™¨ζδΎ›ζŽ’εθ΅„ζΊ(ε¦‚εΊ¦οΌŒε±žζ€§) ε’Œε˜ζ’οΌŒδ»₯εŠζŠŠζ•°ε€Όθ½¬ζ’ζˆι’œθ‰²ζˆ–ε€§ε°ηš„ε˜ζ’ζ–Ήζ³•γ€‚" - -msgid "OpenIDE-Module-Short-Description" -msgstr "εžζ–½ζŽ’εε’Œε˜ζ’ζž„ε»Ίε™¨" - -msgid "DegreeRanking.name" -msgstr "εΊ¦" - -msgid "InDegreeRanking.name" -msgstr "ε…₯εΊ¦" - -msgid "OutDegreeRanking.name" -msgstr "ε‡ΊεΊ¦" diff --git a/modules/RankingPluginUI/pom.xml b/modules/RankingPluginUI/pom.xml deleted file mode 100644 index fbd0d1ddfa..0000000000 --- a/modules/RankingPluginUI/pom.xml +++ /dev/null @@ -1,57 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <artifactId>gephi-parent</artifactId> - <groupId>org.gephi</groupId> - <version>0.9-SNAPSHOT</version> - <relativePath>../..</relativePath> - </parent> - - <groupId>org.gephi</groupId> - <artifactId>ranking-plugin-ui</artifactId> - <version>0.9-SNAPSHOT</version> - <packaging>nbm</packaging> - - <name>RankingPluginUI</name> - - <dependencies> - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>ranking-api</artifactId> - </dependency> - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>ranking-plugin</artifactId> - </dependency> - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>ui-components</artifactId> - </dependency> - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>utils</artifactId> - </dependency> - <dependency> - <groupId>org.netbeans.api</groupId> - <artifactId>org-openide-util</artifactId> - </dependency> - <dependency> - <groupId>org.netbeans.api</groupId> - <artifactId>org-openide-util-lookup</artifactId> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>nbm-maven-plugin</artifactId> - <configuration> - <publicPackages> - </publicPackages> - </configuration> - </plugin> - </plugins> - </build> -</project> diff --git a/modules/RankingPluginUI/src/main/java/org/gephi/ui/ranking/plugin/ColorTransformerPanel.form b/modules/RankingPluginUI/src/main/java/org/gephi/ui/ranking/plugin/ColorTransformerPanel.form deleted file mode 100644 index fd2b93190b..0000000000 --- a/modules/RankingPluginUI/src/main/java/org/gephi/ui/ranking/plugin/ColorTransformerPanel.form +++ /dev/null @@ -1,165 +0,0 @@ -<?xml version="1.1" encoding="UTF-8" ?> - -<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> - <Properties> - <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[225, 114]"/> - </Property> - </Properties> - <AuxValues> - <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> - <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> - <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> - <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> - <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> - <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> - </AuxValues> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="1" attributes="0"> - <EmptySpace max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <Component id="labelColor" min="-2" max="-2" attributes="0"/> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Component id="gradientPanel" min="-2" pref="160" max="-2" attributes="0"/> - </Group> - <Group type="102" alignment="0" attributes="0"> - <Component id="labelRange" min="-2" max="-2" attributes="0"/> - <EmptySpace type="unrelated" max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace min="10" pref="10" max="10" attributes="0"/> - <Component id="lowerBoundLabel" min="-2" pref="75" max="-2" attributes="0"/> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Component id="upperBoundLabel" min="-2" pref="46" max="-2" attributes="0"/> - </Group> - <Component id="rangeSlider" alignment="0" min="-2" pref="162" max="-2" attributes="1"/> - </Group> - </Group> - </Group> - <EmptySpace pref="8" max="32767" attributes="0"/> - <Component id="colorSwatchToolbar" min="-2" max="-2" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" attributes="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="colorSwatchToolbar" alignment="0" min="-2" pref="22" max="-2" attributes="0"/> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace max="-2" attributes="0"/> - <Group type="103" groupAlignment="1" attributes="0"> - <Component id="labelColor" min="-2" pref="20" max="-2" attributes="1"/> - <Component id="gradientPanel" min="-2" pref="17" max="-2" attributes="1"/> - </Group> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="rangeSlider" min="-2" max="-2" attributes="1"/> - <Component id="labelRange" alignment="0" min="-2" pref="23" max="-2" attributes="1"/> - </Group> - <EmptySpace max="-2" attributes="0"/> - <Group type="103" groupAlignment="3" attributes="0"> - <Component id="lowerBoundLabel" alignment="3" min="-2" max="-2" attributes="1"/> - <Component id="upperBoundLabel" alignment="3" min="-2" max="-2" attributes="1"/> - </Group> - </Group> - </Group> - <EmptySpace max="32767" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Component class="javax.swing.JLabel" name="labelColor"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/ranking/plugin/Bundle.properties" key="ColorTransformerPanel.labelColor.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Container class="javax.swing.JPanel" name="gradientPanel"> - <Properties> - <Property name="opaque" type="boolean" value="false"/> - </Properties> - - <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBorderLayout"/> - </Container> - <Component class="javax.swing.JSlider" name="rangeSlider"> - <Properties> - <Property name="focusable" type="boolean" value="false"/> - <Property name="opaque" type="boolean" editor="org.netbeans.modules.form.RADConnectionPropertyEditor"> - <Connection code="false" type="code"/> - </Property> - </Properties> - <AuxValues> - <AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new JRangeSlider()"/> - </AuxValues> - </Component> - <Component class="javax.swing.JLabel" name="labelRange"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/ranking/plugin/Bundle.properties" key="ColorTransformerPanel.labelRange.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="upperBoundLabel"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Tahoma" size="10" style="0"/> - </Property> - <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="66" green="66" red="66" type="rgb"/> - </Property> - <Property name="horizontalAlignment" type="int" value="4"/> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/ranking/plugin/Bundle.properties" key="ColorTransformerPanel.upperBoundLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="lowerBoundLabel"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Tahoma" size="10" style="0"/> - </Property> - <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="66" green="66" red="66" type="rgb"/> - </Property> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/ranking/plugin/Bundle.properties" key="ColorTransformerPanel.lowerBoundLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Container class="javax.swing.JToolBar" name="colorSwatchToolbar"> - <Properties> - <Property name="floatable" type="boolean" value="false"/> - <Property name="rollover" type="boolean" value="true"/> - <Property name="opaque" type="boolean" value="false"/> - </Properties> - - <Layout class="org.netbeans.modules.form.compat2.layouts.DesignBoxLayout"/> - <SubComponents> - <Component class="javax.swing.JButton" name="colorSwatchButton"> - <Properties> - <Property name="icon" type="javax.swing.Icon" editor="org.netbeans.modules.form.editors2.IconEditor"> - <Image iconType="3" name="/org/gephi/ui/ranking/plugin/resources/color-swatch.png"/> - </Property> - <Property name="focusable" type="boolean" value="false"/> - <Property name="horizontalTextPosition" type="int" value="0"/> - <Property name="iconTextGap" type="int" value="0"/> - <Property name="margin" type="java.awt.Insets" editor="org.netbeans.beaninfo.editors.InsetsEditor"> - <Insets value="[0, 0, 0, 0]"/> - </Property> - <Property name="verticalTextPosition" type="int" value="3"/> - </Properties> - </Component> - </SubComponents> - </Container> - </SubComponents> -</Form> diff --git a/modules/RankingPluginUI/src/main/java/org/gephi/ui/ranking/plugin/ColorTransformerPanel.java b/modules/RankingPluginUI/src/main/java/org/gephi/ui/ranking/plugin/ColorTransformerPanel.java deleted file mode 100644 index 447824fd70..0000000000 --- a/modules/RankingPluginUI/src/main/java/org/gephi/ui/ranking/plugin/ColorTransformerPanel.java +++ /dev/null @@ -1,441 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian <mathieu.bastian@gephi.org> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ui.ranking.plugin; - -import java.awt.BorderLayout; -import java.awt.Color; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.util.Arrays; -import javax.swing.JMenu; -import javax.swing.JMenuItem; -import javax.swing.JPopupMenu; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import org.gephi.ranking.api.Ranking; -import org.gephi.ranking.api.RankingController; -import org.gephi.ranking.api.RankingEvent; -import org.gephi.ranking.api.RankingListener; -import org.gephi.ranking.api.RankingModel; -import org.gephi.ranking.plugin.transformer.AbstractColorTransformer; -import org.gephi.ranking.api.Transformer; -import org.gephi.ui.components.JRangeSlider; -import org.gephi.ui.components.PaletteIcon; -import org.gephi.ui.components.gradientslider.GradientSlider; -import org.gephi.utils.PaletteUtils; -import org.gephi.utils.PaletteUtils.Palette; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; -import org.openide.util.NbPreferences; - -/** - * @author Mathieu Bastian - */ -public class ColorTransformerPanel extends javax.swing.JPanel { - - private static final int SLIDER_MAXIMUM = 100; - private AbstractColorTransformer colorTransformer; - private GradientSlider gradientSlider; - private final RecentPalettes recentPalettes; - private final Ranking ranking; - - public ColorTransformerPanel(final Transformer transformer, Ranking ranking) { - initComponents(); - - final String POSITIONS = "ColorTransformerPanel_" + transformer.getClass().getSimpleName() + "_positions"; - final String COLORS = "ColorTransformerPanel_" + transformer.getClass().getSimpleName() + "_colors"; - - colorTransformer = (AbstractColorTransformer) transformer; - this.ranking = ranking; - this.recentPalettes = new RecentPalettes(); - - float[] positionsStart = colorTransformer.getColorPositions(); - Color[] colorsStart = colorTransformer.getColors(); - - try { - positionsStart = deserializePositions(NbPreferences.forModule(ColorTransformerPanel.class).getByteArray(POSITIONS, serializePositions(positionsStart))); - colorsStart = deserializeColors(NbPreferences.forModule(ColorTransformerPanel.class).getByteArray(COLORS, serializeColors(colorsStart))); - colorTransformer.setColorPositions(positionsStart); - colorTransformer.setColors(colorsStart); - } catch (Exception e) { - e.printStackTrace(); - } - //Gradient - gradientSlider = new GradientSlider(GradientSlider.HORIZONTAL, positionsStart, colorsStart); - gradientSlider.putClientProperty("GradientSlider.includeOpacity", "false"); - gradientSlider.addChangeListener(new ChangeListener() { - - public void stateChanged(ChangeEvent e) { - Color[] colors = gradientSlider.getColors(); - float[] positions = gradientSlider.getThumbPositions(); - colorTransformer.setColors(Arrays.copyOf(colors, colors.length)); - colorTransformer.setColorPositions(Arrays.copyOf(positions, positions.length)); - try { - NbPreferences.forModule(ColorTransformerPanel.class).putByteArray(POSITIONS, serializePositions(positions)); - NbPreferences.forModule(ColorTransformerPanel.class).putByteArray(COLORS, serializeColors(colors)); - } catch (Exception ex) { - ex.printStackTrace(); - } - prepareGradientTooltip(); - } - }); - gradientPanel.add(gradientSlider, BorderLayout.CENTER); - - //Range - JRangeSlider slider = (JRangeSlider) rangeSlider; - slider.setMinimum(0); - slider.setMaximum(SLIDER_MAXIMUM); - slider.setValue(0); - slider.setUpperValue(SLIDER_MAXIMUM); - slider.addChangeListener(new ChangeListener() { - - public void stateChanged(ChangeEvent e) { - JRangeSlider source = (JRangeSlider) e.getSource(); - if (!source.getValueIsAdjusting()) { - setRangeValues(); - } - prepareGradientTooltip(); - } - }); - refreshRangeValues(); - prepareGradientTooltip(); - - //Context -// setComponentPopupMenu(getPalettePopupMenu()); - addMouseListener(new MouseAdapter() { - - public void mousePressed(MouseEvent evt) { - if (evt.isPopupTrigger()) { - JPopupMenu popupMenu = getPalettePopupMenu(); - popupMenu.show(evt.getComponent(), evt.getX(), evt.getY()); - } - } - - public void mouseReleased(MouseEvent evt) { - if (evt.isPopupTrigger()) { - JPopupMenu popupMenu = getPalettePopupMenu(); - popupMenu.show(evt.getComponent(), evt.getX(), evt.getY()); - } - } - }); - - //Color Swatch - colorSwatchButton.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent ae) { - JPopupMenu popupMenu = getPalettePopupMenu(); - popupMenu.show(colorSwatchToolbar, -popupMenu.getPreferredSize().width, 0); - } - }); - - //Listen to apply button to add recent palettes - RankingController rankingController = Lookup.getDefault().lookup(RankingController.class); - RankingModel rankingModel = rankingController.getModel(); - rankingModel.addRankingListener(new RankingListener() { - - public void rankingChanged(RankingEvent event) { - if (event.is(RankingEvent.EventType.APPLY_TRANSFORMER)) { - if (transformer == event.getTransformer()) { - addRecentPalette(); - } - } - } - }); - } - - private void prepareGradientTooltip() { - StringBuilder sb = new StringBuilder(); - final double min = ((Number) ranking.unNormalize(colorTransformer.getLowerBound())).doubleValue(); - final double max = ((Number) ranking.unNormalize(colorTransformer.getUpperBound())).doubleValue(); - final double range = max - min; - float[] positions = gradientSlider.getThumbPositions(); - for (int i = 0; i < positions.length - 1; i++) { - sb.append(min + range * positions[i]); - sb.append(", "); - } - sb.append(min + range * positions[positions.length - 1]); - gradientSlider.setToolTipText(sb.toString()); - } - - private void setRangeValues() { - JRangeSlider slider = (JRangeSlider) rangeSlider; - float low = slider.getValue() / 100f; - float high = slider.getUpperValue() / 100f; - colorTransformer.setLowerBound(low); - colorTransformer.setUpperBound(high); - - lowerBoundLabel.setText(ranking.unNormalize(colorTransformer.getLowerBound()).toString()); - upperBoundLabel.setText(ranking.unNormalize(colorTransformer.getUpperBound()).toString()); - } - - private void refreshRangeValues() { - JRangeSlider slider = (JRangeSlider) rangeSlider; - slider.setValue((int) (colorTransformer.getLowerBound() * 100f)); - slider.setUpperValue((int) (colorTransformer.getUpperBound() * 100f)); - - lowerBoundLabel.setText(ranking.unNormalize(colorTransformer.getLowerBound()).toString()); - upperBoundLabel.setText(ranking.unNormalize(colorTransformer.getUpperBound()).toString()); - } - - private JPopupMenu getPalettePopupMenu() { - JPopupMenu popupMenu = new JPopupMenu(); - JMenu defaultMenu = new JMenu(NbBundle.getMessage(ColorTransformerPanel.class, "PalettePopup.default")); - for (Palette p : PaletteUtils.getSequencialPalettes()) { - final Palette p3 = PaletteUtils.get3ClassPalette(p); - JMenuItem item = new JMenuItem(new PaletteIcon(p3.getColors())); - item.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - gradientSlider.setValues(p3.getPositions(), p3.getColors()); - } - }); - defaultMenu.add(item); - } - for (Palette p : PaletteUtils.getDivergingPalettes()) { - final Palette p3 = PaletteUtils.get3ClassPalette(p); - JMenuItem item = new JMenuItem(new PaletteIcon(p3.getColors())); - item.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - gradientSlider.setValues(p3.getPositions(), p3.getColors()); - } - }); - defaultMenu.add(item); - } - popupMenu.add(defaultMenu); - - //Invert - JMenuItem invertItem = new JMenuItem(NbBundle.getMessage(ColorTransformerPanel.class, "PalettePopup.invert")); - invertItem.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - gradientSlider.setValues(invert(gradientSlider.getThumbPositions()), invert(gradientSlider.getColors())); - } - }); - popupMenu.add(invertItem); - - //Recent - JMenu recentMenu = new JMenu(NbBundle.getMessage(ColorTransformerPanel.class, "PalettePopup.recent")); - for (final AbstractColorTransformer.LinearGradient gradient : recentPalettes.getPalettes()) { - JMenuItem item = new JMenuItem(new PaletteIcon(gradient.getColors())); - item.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - gradientSlider.setValues(gradient.getPositions(), gradient.getColors()); - } - }); - recentMenu.add(item); - } - popupMenu.add(recentMenu); - - return popupMenu; - } - - private void addRecentPalette() { - AbstractColorTransformer.LinearGradient gradient = colorTransformer.getLinearGradient(); - recentPalettes.add(gradient); - } - - private Color[] invert(Color[] source) { - int len = source.length; - Color[] res = new Color[len]; - for (int i = 0; i < len; i++) { - res[i] = source[len - 1 - i]; - } - return res; - } - - private float[] invert(float[] source) { - int len = source.length; - float[] res = new float[len]; - for (int i = 0; i < len; i++) { - res[i] = 1 - source[len - 1 - i]; - } - - return res; - } - - private byte[] serializePositions(float[] positions) throws Exception { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - ObjectOutputStream out = new ObjectOutputStream(bos); - out.writeObject(positions); - out.close(); - return bos.toByteArray(); - } - - private float[] deserializePositions(byte[] positions) throws Exception { - ByteArrayInputStream bis = new ByteArrayInputStream(positions); - ObjectInputStream in = new ObjectInputStream(bis); - float[] array = (float[]) in.readObject(); - in.close(); - return array; - } - - private byte[] serializeColors(Color[] colors) throws Exception { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - ObjectOutputStream out = new ObjectOutputStream(bos); - out.writeObject(colors); - out.close(); - return bos.toByteArray(); - } - - private Color[] deserializeColors(byte[] colors) throws Exception { - ByteArrayInputStream bis = new ByteArrayInputStream(colors); - ObjectInputStream in = new ObjectInputStream(bis); - Color[] array = (Color[]) in.readObject(); - in.close(); - return array; - } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents - private void initComponents() { - - labelColor = new javax.swing.JLabel(); - gradientPanel = new javax.swing.JPanel(); - rangeSlider = new JRangeSlider(); - labelRange = new javax.swing.JLabel(); - upperBoundLabel = new javax.swing.JLabel(); - lowerBoundLabel = new javax.swing.JLabel(); - colorSwatchToolbar = new javax.swing.JToolBar(); - colorSwatchButton = new javax.swing.JButton(); - - setPreferredSize(new java.awt.Dimension(225, 114)); - - labelColor.setText(org.openide.util.NbBundle.getMessage(ColorTransformerPanel.class, "ColorTransformerPanel.labelColor.text")); // NOI18N - - gradientPanel.setOpaque(false); - gradientPanel.setLayout(new java.awt.BorderLayout()); - - rangeSlider.setFocusable(false); - rangeSlider.setOpaque(false); - - labelRange.setText(org.openide.util.NbBundle.getMessage(ColorTransformerPanel.class, "ColorTransformerPanel.labelRange.text")); // NOI18N - - upperBoundLabel.setFont(new java.awt.Font("Tahoma", 0, 10)); - upperBoundLabel.setForeground(new java.awt.Color(102, 102, 102)); - upperBoundLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); - upperBoundLabel.setText(org.openide.util.NbBundle.getMessage(ColorTransformerPanel.class, "ColorTransformerPanel.upperBoundLabel.text")); // NOI18N - - lowerBoundLabel.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N - lowerBoundLabel.setForeground(new java.awt.Color(102, 102, 102)); - lowerBoundLabel.setText(org.openide.util.NbBundle.getMessage(ColorTransformerPanel.class, "ColorTransformerPanel.lowerBoundLabel.text")); // NOI18N - - colorSwatchToolbar.setFloatable(false); - colorSwatchToolbar.setRollover(true); - colorSwatchToolbar.setOpaque(false); - - colorSwatchButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/ui/ranking/plugin/resources/color-swatch.png"))); // NOI18N - colorSwatchButton.setFocusable(false); - colorSwatchButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); - colorSwatchButton.setIconTextGap(0); - colorSwatchButton.setMargin(new java.awt.Insets(0, 0, 0, 0)); - colorSwatchButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - colorSwatchToolbar.add(colorSwatchButton); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(labelColor) - .addGap(18, 18, 18) - .addComponent(gradientPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 160, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGroup(layout.createSequentialGroup() - .addComponent(labelRange) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGap(10, 10, 10) - .addComponent(lowerBoundLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 75, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(upperBoundLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(rangeSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 162, javax.swing.GroupLayout.PREFERRED_SIZE)))) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 8, Short.MAX_VALUE) - .addComponent(colorSwatchToolbar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(colorSwatchToolbar, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(labelColor, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(gradientPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 17, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(rangeSlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelRange, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(lowerBoundLabel) - .addComponent(upperBoundLabel)))) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - }// </editor-fold>//GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton colorSwatchButton; - private javax.swing.JToolBar colorSwatchToolbar; - private javax.swing.JPanel gradientPanel; - private javax.swing.JLabel labelColor; - private javax.swing.JLabel labelRange; - private javax.swing.JLabel lowerBoundLabel; - private javax.swing.JSlider rangeSlider; - private javax.swing.JLabel upperBoundLabel; - // End of variables declaration//GEN-END:variables -} diff --git a/modules/RankingPluginUI/src/main/java/org/gephi/ui/ranking/plugin/ColorTransformerUI.java b/modules/RankingPluginUI/src/main/java/org/gephi/ui/ranking/plugin/ColorTransformerUI.java deleted file mode 100644 index 846a5bac6c..0000000000 --- a/modules/RankingPluginUI/src/main/java/org/gephi/ui/ranking/plugin/ColorTransformerUI.java +++ /dev/null @@ -1,76 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian <mathieu.bastian@gephi.org> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ui.ranking.plugin; - -import javax.swing.Icon; -import javax.swing.ImageIcon; -import javax.swing.JPanel; -import org.gephi.ranking.api.Ranking; -import org.gephi.ranking.plugin.transformer.ElementColorTransformerBuilder.RenderableColorTransformer; -import org.gephi.ranking.api.Transformer; -import org.gephi.ranking.spi.TransformerUI; -import org.openide.util.NbBundle; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = TransformerUI.class, position = 100) -public class ColorTransformerUI implements TransformerUI { - - public Icon getIcon() { - return new ImageIcon(getClass().getResource("/org/gephi/ui/ranking/plugin/resources/color.png")); - } - - public boolean isUIForTransformer(Transformer transformer) { - return transformer instanceof RenderableColorTransformer; - } - - public JPanel getPanel(Transformer transformer, Ranking ranking) { - return new ColorTransformerPanel(transformer, ranking); - } - - public String getDisplayName() { - return NbBundle.getMessage(ColorTransformerUI.class, "ColorTransformerUI.name"); - } -} diff --git a/modules/RankingPluginUI/src/main/java/org/gephi/ui/ranking/plugin/LabelColorTransformerUI.java b/modules/RankingPluginUI/src/main/java/org/gephi/ui/ranking/plugin/LabelColorTransformerUI.java deleted file mode 100644 index 2048da5aea..0000000000 --- a/modules/RankingPluginUI/src/main/java/org/gephi/ui/ranking/plugin/LabelColorTransformerUI.java +++ /dev/null @@ -1,76 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian <mathieu.bastian@gephi.org> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.ui.ranking.plugin; - -import javax.swing.Icon; -import javax.swing.ImageIcon; -import javax.swing.JPanel; -import org.gephi.ranking.api.Ranking; -import org.gephi.ranking.plugin.transformer.LabelColorTransformerBuilder.LabelColorTransformer; -import org.gephi.ranking.api.Transformer; -import org.gephi.ranking.spi.TransformerUI; -import org.openide.util.NbBundle; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = TransformerUI.class, position = 300) -public class LabelColorTransformerUI implements TransformerUI { - - public Icon getIcon() { - return new ImageIcon(getClass().getResource("/org/gephi/ui/ranking/plugin/resources/labelcolor.png")); - } - - public String getDisplayName() { - return NbBundle.getMessage(LabelColorTransformerUI.class, "LabelColorTransformerUI.name"); - } - - public boolean isUIForTransformer(Transformer transformer) { - return transformer instanceof LabelColorTransformer; - } - - public JPanel getPanel(Transformer transformer, Ranking ranking) { - return new ColorTransformerPanel(transformer, ranking); - } -} diff --git a/modules/RankingPluginUI/src/main/java/org/gephi/ui/ranking/plugin/LabelSizeTransformerUI.java b/modules/RankingPluginUI/src/main/java/org/gephi/ui/ranking/plugin/LabelSizeTransformerUI.java deleted file mode 100644 index 9b489b6efc..0000000000 --- a/modules/RankingPluginUI/src/main/java/org/gephi/ui/ranking/plugin/LabelSizeTransformerUI.java +++ /dev/null @@ -1,76 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian <mathieu.bastian@gephi.org> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.ui.ranking.plugin; - -import javax.swing.Icon; -import javax.swing.ImageIcon; -import javax.swing.JPanel; -import org.gephi.ranking.api.Ranking; -import org.gephi.ranking.plugin.transformer.LabelSizeTransformerBuilder.LabelSizeTransformer; -import org.gephi.ranking.api.Transformer; -import org.gephi.ranking.spi.TransformerUI; -import org.openide.util.NbBundle; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = TransformerUI.class, position = 400) -public class LabelSizeTransformerUI implements TransformerUI { - - public Icon getIcon() { - return new ImageIcon(getClass().getResource("/org/gephi/ui/ranking/plugin/resources/labelsize.png")); - } - - public String getDisplayName() { - return NbBundle.getMessage(LabelSizeTransformerUI.class, "LabelSizeTransformerUI.name"); - } - - public boolean isUIForTransformer(Transformer transformer) { - return transformer instanceof LabelSizeTransformer; - } - - public JPanel getPanel(Transformer transformer, Ranking ranking) { - return new SizeTransformerPanel(transformer, ranking); - } -} diff --git a/modules/RankingPluginUI/src/main/java/org/gephi/ui/ranking/plugin/RecentPalettes.java b/modules/RankingPluginUI/src/main/java/org/gephi/ui/ranking/plugin/RecentPalettes.java deleted file mode 100644 index 41eef37ec1..0000000000 --- a/modules/RankingPluginUI/src/main/java/org/gephi/ui/ranking/plugin/RecentPalettes.java +++ /dev/null @@ -1,182 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian <mathieu.bastian@gephi.org> - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ui.ranking.plugin; - -import java.awt.Color; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.util.ArrayList; -import java.util.List; -import java.util.prefs.BackingStoreException; -import java.util.prefs.Preferences; -import org.gephi.ranking.plugin.transformer.AbstractColorTransformer.LinearGradient; -import org.openide.util.NbPreferences; - -/** - * - * @author Mathieu Bastian - */ -public class RecentPalettes { - - protected static String DEFAULT_NODE_NAME = "prefs"; - public static final String COLORS = "PaletteColors"; - public static final String POSITIONS = "PalettePositions"; - private List<LinearGradient> gradients; - private int maxSize; - protected String nodeName = null; - - public RecentPalettes() { - nodeName = "recentpalettes"; - maxSize = 14; - gradients = new ArrayList<LinearGradient>(maxSize); - retrieve(); - } - - public void add(LinearGradient gradient) { - //Remove the old - gradients.remove(gradient); - - // add to the top - gradients.add(0, gradient); - while (gradients.size() > maxSize) { - gradients.remove(gradients.size() - 1); - } - - store(); - } - - public LinearGradient[] getPalettes() { - return gradients.toArray(new LinearGradient[0]); - } - - protected void store() { - Preferences prefs = getPreferences(); - - // clear the backing store - try { - prefs.clear(); - } catch (BackingStoreException ex) { - } - - for (int i = 0; i < gradients.size(); i++) { - LinearGradient gradient = gradients.get(i); - try { - prefs.putByteArray(COLORS + i, serializeColors(gradient.getColors())); - prefs.putByteArray(POSITIONS + i, serializePositions(gradient.getPositions())); - } catch (Exception e) { - e.printStackTrace(); - } - } - } - - protected void retrieve() { - gradients.clear(); - Preferences prefs = getPreferences(); - - for (int i = 0; i < maxSize; i++) { - byte[] cols = prefs.getByteArray(COLORS + i, null); - byte[] poss = prefs.getByteArray(POSITIONS + i, null); - if (cols != null && poss != null) { - try { - Color[] colors = deserializeColors(cols); - float[] posisitons = deserializePositions(poss); - LinearGradient linearGradient = new LinearGradient(colors, posisitons); - gradients.add(linearGradient); - } catch (Exception e) { - e.printStackTrace(); - } - } else { - break; - } - } - } - - /** - * Return the backing store Preferences - * - * @return Preferences - */ - protected final Preferences getPreferences() { - String name = DEFAULT_NODE_NAME; - if (nodeName != null) { - name = nodeName; - } - - Preferences prefs = NbPreferences.forModule(this.getClass()).node("options").node(name); - - return prefs; - } - - private byte[] serializePositions(float[] positions) throws Exception { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - ObjectOutputStream out = new ObjectOutputStream(bos); - out.writeObject(positions); - out.close(); - return bos.toByteArray(); - } - - private float[] deserializePositions(byte[] positions) throws Exception { - ByteArrayInputStream bis = new ByteArrayInputStream(positions); - ObjectInputStream in = new ObjectInputStream(bis); - float[] array = (float[]) in.readObject(); - in.close(); - return array; - } - - private byte[] serializeColors(Color[] colors) throws Exception { - ByteArrayOutputStream bos = new ByteArrayOutputStream(); - ObjectOutputStream out = new ObjectOutputStream(bos); - out.writeObject(colors); - out.close(); - return bos.toByteArray(); - } - - private Color[] deserializeColors(byte[] colors) throws Exception { - ByteArrayInputStream bis = new ByteArrayInputStream(colors); - ObjectInputStream in = new ObjectInputStream(bis); - Color[] array = (Color[]) in.readObject(); - in.close(); - return array; - } -} diff --git a/modules/RankingPluginUI/src/main/java/org/gephi/ui/ranking/plugin/SizeTransformerPanel.form b/modules/RankingPluginUI/src/main/java/org/gephi/ui/ranking/plugin/SizeTransformerPanel.form deleted file mode 100644 index 01684175d9..0000000000 --- a/modules/RankingPluginUI/src/main/java/org/gephi/ui/ranking/plugin/SizeTransformerPanel.form +++ /dev/null @@ -1,167 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> - -<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> - <Properties> - <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[225, 114]"/> - </Property> - </Properties> - <AuxValues> - <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> - <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> - <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> - <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> - <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> - <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> - </AuxValues> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" max="-2" attributes="0"> - <Group type="102" attributes="0"> - <Component id="labelMinSize" min="-2" max="-2" attributes="0"/> - <EmptySpace min="-2" pref="8" max="-2" attributes="0"/> - <Component id="minSize" min="-2" pref="55" max="-2" attributes="1"/> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Component id="labelMaxSize" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="maxSize" min="-2" pref="55" max="-2" attributes="1"/> - </Group> - <Group type="102" alignment="0" attributes="0"> - <Component id="labelRange" min="-2" max="-2" attributes="0"/> - <EmptySpace type="unrelated" max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="rangeSlider" min="0" pref="0" max="32767" attributes="0"/> - <Group type="102" attributes="0"> - <EmptySpace min="6" pref="6" max="-2" attributes="0"/> - <Component id="lowerBoundLabel" min="-2" pref="96" max="-2" attributes="1"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="upperBoundLabel" min="-2" pref="80" max="-2" attributes="0"/> - <EmptySpace min="0" pref="0" max="32767" attributes="0"/> - </Group> - </Group> - </Group> - </Group> - <EmptySpace pref="19" max="32767" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" attributes="0"> - <Group type="103" groupAlignment="3" attributes="0"> - <Component id="minSize" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="maxSize" alignment="3" min="-2" max="-2" attributes="0"/> - </Group> - <EmptySpace min="-2" pref="12" max="-2" attributes="0"/> - </Group> - <Group type="102" alignment="1" attributes="0"> - <Component id="labelMinSize" min="-2" max="-2" attributes="0"/> - <EmptySpace type="separate" max="-2" attributes="0"/> - </Group> - </Group> - <Group type="102" alignment="1" attributes="0"> - <Component id="labelMaxSize" min="-2" max="-2" attributes="0"/> - <EmptySpace type="separate" max="-2" attributes="0"/> - </Group> - </Group> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="labelRange" alignment="0" min="-2" pref="23" max="-2" attributes="1"/> - <Component id="rangeSlider" alignment="0" min="-2" max="-2" attributes="1"/> - </Group> - <EmptySpace max="-2" attributes="0"/> - <Group type="103" groupAlignment="3" attributes="0"> - <Component id="lowerBoundLabel" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="upperBoundLabel" alignment="3" min="-2" max="-2" attributes="0"/> - </Group> - <EmptySpace pref="20" max="32767" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Component class="javax.swing.JLabel" name="labelMinSize"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/ranking/plugin/Bundle.properties" key="SizeTransformerPanel.labelMinSize.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JSpinner" name="minSize"> - <Properties> - <Property name="model" type="javax.swing.SpinnerModel" editor="org.netbeans.modules.form.editors2.SpinnerModelEditor"> - <SpinnerModel initial="1.0" minimum="0.1" numberType="java.lang.Float" stepSize="0.5" type="number"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="labelMaxSize"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/ranking/plugin/Bundle.properties" key="SizeTransformerPanel.labelMaxSize.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JSpinner" name="maxSize"> - <Properties> - <Property name="model" type="javax.swing.SpinnerModel" editor="org.netbeans.modules.form.editors2.SpinnerModelEditor"> - <SpinnerModel initial="4.0" minimum="0.5" numberType="java.lang.Float" stepSize="0.5" type="number"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="labelRange"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/ranking/plugin/Bundle.properties" key="SizeTransformerPanel.labelRange.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JSlider" name="rangeSlider"> - <Properties> - <Property name="focusable" type="boolean" value="false"/> - <Property name="opaque" type="boolean" editor="org.netbeans.modules.form.RADConnectionPropertyEditor"> - <Connection code="false" type="code"/> - </Property> - </Properties> - <AuxValues> - <AuxValue name="JavaCodeGenerator_CreateCodeCustom" type="java.lang.String" value="new JRangeSlider()"/> - </AuxValues> - </Component> - <Component class="javax.swing.JLabel" name="upperBoundLabel"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Tahoma" size="10" style="0"/> - </Property> - <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="66" green="66" red="66" type="rgb"/> - </Property> - <Property name="horizontalAlignment" type="int" value="4"/> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/ranking/plugin/Bundle.properties" key="SizeTransformerPanel.upperBoundLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="lowerBoundLabel"> - <Properties> - <Property name="font" type="java.awt.Font" editor="org.netbeans.beaninfo.editors.FontEditor"> - <Font name="Tahoma" size="10" style="0"/> - </Property> - <Property name="foreground" type="java.awt.Color" editor="org.netbeans.beaninfo.editors.ColorEditor"> - <Color blue="66" green="66" red="66" type="rgb"/> - </Property> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/ranking/plugin/Bundle.properties" key="SizeTransformerPanel.lowerBoundLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - </SubComponents> -</Form> diff --git a/modules/RankingPluginUI/src/main/java/org/gephi/ui/ranking/plugin/SizeTransformerPanel.java b/modules/RankingPluginUI/src/main/java/org/gephi/ui/ranking/plugin/SizeTransformerPanel.java deleted file mode 100644 index f85f799b24..0000000000 --- a/modules/RankingPluginUI/src/main/java/org/gephi/ui/ranking/plugin/SizeTransformerPanel.java +++ /dev/null @@ -1,238 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian <mathieu.bastian@gephi.org> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ui.ranking.plugin; - -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import org.gephi.ranking.api.Ranking; -import org.gephi.ranking.plugin.transformer.AbstractSizeTransformer; -import org.gephi.ranking.api.Transformer; -import org.gephi.ui.components.JRangeSlider; -import org.openide.util.NbPreferences; - -/** - * - * @author Mathieu Bastian - */ -public class SizeTransformerPanel extends javax.swing.JPanel { - - private static final int SLIDER_MAXIMUM = 100; - private AbstractSizeTransformer sizeTransformer; - private Ranking ranking; - - public SizeTransformerPanel(Transformer transformer, Ranking ranking) { - initComponents(); - - final String MIN_SIZE = "SizeTransformerPanel_" + transformer.getClass().getSimpleName() + "_min"; - final String MAX_SIZE = "SizeTransformerPanel_" + transformer.getClass().getSimpleName() + "_max"; - - sizeTransformer = (AbstractSizeTransformer) transformer; - this.ranking = ranking; - - float minSizeStart = NbPreferences.forModule(SizeTransformerPanel.class).getFloat(MIN_SIZE, sizeTransformer.getMinSize()); - float maxSizeStart = NbPreferences.forModule(SizeTransformerPanel.class).getFloat(MAX_SIZE, sizeTransformer.getMaxSize()); - sizeTransformer.setMinSize(minSizeStart); - sizeTransformer.setMaxSize(maxSizeStart); - - minSize.setValue(minSizeStart); - maxSize.setValue(maxSizeStart); - minSize.addChangeListener(new ChangeListener() { - - public void stateChanged(ChangeEvent e) { - sizeTransformer.setMinSize((Float) minSize.getValue()); - NbPreferences.forModule(SizeTransformerPanel.class).putFloat(MIN_SIZE, (Float) minSize.getValue()); - } - }); - maxSize.addChangeListener(new ChangeListener() { - - public void stateChanged(ChangeEvent e) { - sizeTransformer.setMaxSize((Float) maxSize.getValue()); - NbPreferences.forModule(SizeTransformerPanel.class).putFloat(MAX_SIZE, (Float) maxSize.getValue()); - } - }); - - //Range - JRangeSlider slider = (JRangeSlider) rangeSlider; - slider.setMinimum(0); - slider.setMaximum(SLIDER_MAXIMUM); - slider.setValue(0); - slider.setUpperValue(SLIDER_MAXIMUM); - slider.addChangeListener(new ChangeListener() { - - public void stateChanged(ChangeEvent e) { - JRangeSlider source = (JRangeSlider) e.getSource(); - if (!source.getValueIsAdjusting()) { - setRangeValues(); - } - } - }); - refreshRangeValues(); - } - - private void setRangeValues() { - JRangeSlider slider = (JRangeSlider) rangeSlider; - float low = slider.getValue() / 100f; - float high = slider.getUpperValue() / 100f; - sizeTransformer.setLowerBound(low); - sizeTransformer.setUpperBound(high); - - lowerBoundLabel.setText(ranking.unNormalize(sizeTransformer.getLowerBound()).toString()); - upperBoundLabel.setText(ranking.unNormalize(sizeTransformer.getUpperBound()).toString()); - } - - private void refreshRangeValues() { - JRangeSlider slider = (JRangeSlider) rangeSlider; - slider.setValue((int) (sizeTransformer.getLowerBound() * 100f)); - slider.setUpperValue((int) (sizeTransformer.getUpperBound() * 100f)); - - lowerBoundLabel.setText(ranking.unNormalize(sizeTransformer.getLowerBound()).toString()); - upperBoundLabel.setText(ranking.unNormalize(sizeTransformer.getUpperBound()).toString()); - } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents - private void initComponents() { - - labelMinSize = new javax.swing.JLabel(); - minSize = new javax.swing.JSpinner(); - labelMaxSize = new javax.swing.JLabel(); - maxSize = new javax.swing.JSpinner(); - labelRange = new javax.swing.JLabel(); - rangeSlider = new JRangeSlider(); - upperBoundLabel = new javax.swing.JLabel(); - lowerBoundLabel = new javax.swing.JLabel(); - - setPreferredSize(new java.awt.Dimension(225, 114)); - - labelMinSize.setText(org.openide.util.NbBundle.getMessage(SizeTransformerPanel.class, "SizeTransformerPanel.labelMinSize.text")); // NOI18N - - minSize.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(1.0f), Float.valueOf(0.1f), null, Float.valueOf(0.5f))); - - labelMaxSize.setText(org.openide.util.NbBundle.getMessage(SizeTransformerPanel.class, "SizeTransformerPanel.labelMaxSize.text")); // NOI18N - - maxSize.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(4.0f), Float.valueOf(0.5f), null, Float.valueOf(0.5f))); - - labelRange.setText(org.openide.util.NbBundle.getMessage(SizeTransformerPanel.class, "SizeTransformerPanel.labelRange.text")); // NOI18N - - rangeSlider.setFocusable(false); - rangeSlider.setOpaque(false); - - upperBoundLabel.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N - upperBoundLabel.setForeground(new java.awt.Color(102, 102, 102)); - upperBoundLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); - upperBoundLabel.setText(org.openide.util.NbBundle.getMessage(SizeTransformerPanel.class, "SizeTransformerPanel.upperBoundLabel.text")); // NOI18N - - lowerBoundLabel.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N - lowerBoundLabel.setForeground(new java.awt.Color(102, 102, 102)); - lowerBoundLabel.setText(org.openide.util.NbBundle.getMessage(SizeTransformerPanel.class, "SizeTransformerPanel.lowerBoundLabel.text")); // NOI18N - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addGroup(layout.createSequentialGroup() - .addComponent(labelMinSize) - .addGap(8, 8, 8) - .addComponent(minSize, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(labelMaxSize) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(maxSize, javax.swing.GroupLayout.PREFERRED_SIZE, 55, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGroup(layout.createSequentialGroup() - .addComponent(labelRange) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(rangeSlider, 0, 0, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addGap(6, 6, 6) - .addComponent(lowerBoundLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 96, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(upperBoundLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(0, 0, Short.MAX_VALUE))))) - .addContainerGap(19, Short.MAX_VALUE)) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(minSize, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(maxSize, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(12, 12, 12)) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addComponent(labelMinSize) - .addGap(18, 18, 18))) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addComponent(labelMaxSize) - .addGap(18, 18, 18))) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(labelRange, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(rangeSlider, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(lowerBoundLabel) - .addComponent(upperBoundLabel)) - .addContainerGap(20, Short.MAX_VALUE)) - ); - }// </editor-fold>//GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JLabel labelMaxSize; - private javax.swing.JLabel labelMinSize; - private javax.swing.JLabel labelRange; - private javax.swing.JLabel lowerBoundLabel; - private javax.swing.JSpinner maxSize; - private javax.swing.JSpinner minSize; - private javax.swing.JSlider rangeSlider; - private javax.swing.JLabel upperBoundLabel; - // End of variables declaration//GEN-END:variables -} diff --git a/modules/RankingPluginUI/src/main/java/org/gephi/ui/ranking/plugin/SizeTransformerUI.java b/modules/RankingPluginUI/src/main/java/org/gephi/ui/ranking/plugin/SizeTransformerUI.java deleted file mode 100644 index 3b4ca8f910..0000000000 --- a/modules/RankingPluginUI/src/main/java/org/gephi/ui/ranking/plugin/SizeTransformerUI.java +++ /dev/null @@ -1,76 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian <mathieu.bastian@gephi.org> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ui.ranking.plugin; - -import javax.swing.Icon; -import javax.swing.ImageIcon; -import javax.swing.JPanel; -import org.gephi.ranking.api.Ranking; -import org.gephi.ranking.plugin.transformer.ElementSizeTransformerBuilder.RenderableSizeTransformer; -import org.gephi.ranking.api.Transformer; -import org.gephi.ranking.spi.TransformerUI; -import org.openide.util.NbBundle; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = TransformerUI.class, position = 200) -public class SizeTransformerUI implements TransformerUI { - - public Icon getIcon() { - return new ImageIcon(getClass().getResource("/org/gephi/ui/ranking/plugin/resources/size.png")); - } - - public String getDisplayName() { - return NbBundle.getMessage(SizeTransformerUI.class, "SizeTransformerUI.name"); - } - - public boolean isUIForTransformer(Transformer transformer) { - return transformer instanceof RenderableSizeTransformer; - } - - public JPanel getPanel(Transformer transformer, Ranking ranking) { - return new SizeTransformerPanel(transformer, ranking); - } -} diff --git a/modules/RankingPluginUI/src/main/nbm/manifest.mf b/modules/RankingPluginUI/src/main/nbm/manifest.mf deleted file mode 100644 index e62fad8693..0000000000 --- a/modules/RankingPluginUI/src/main/nbm/manifest.mf +++ /dev/null @@ -1,4 +0,0 @@ -Manifest-Version: 1.0 -AutoUpdate-Essential-Module: true -OpenIDE-Module-Localizing-Bundle: org/gephi/ui/ranking/plugin/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file diff --git a/modules/RankingPluginUI/src/main/nbm/module.xml b/modules/RankingPluginUI/src/main/nbm/module.xml deleted file mode 100644 index d4977e1d0e..0000000000 --- a/modules/RankingPluginUI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<nbm> - <!-- - <moduleType>autoload</moduleType> - <codeNameBase>org.gephi.ui.ranking.plugin/1</codeNameBase> - <licenseName>Apache License, Version 2.0</licenseName> - <licenseFile>license.txt</licenseFile> - --> -</nbm> diff --git a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/Bundle.properties b/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/Bundle.properties deleted file mode 100644 index aab5398709..0000000000 --- a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/Bundle.properties +++ /dev/null @@ -1,24 +0,0 @@ -OpenIDE-Module-Display-Category=Plugin -OpenIDE-Module-Long-Description=\ - Implements user interface for transformers -OpenIDE-Module-Name=Ranking Plugin UI - -ColorTransformerUI.name = Color -OpenIDE-Module-Short-Description=Ranking transformers UI implementations -SizeTransformerUI.name = Size/Weight -LabelColorTransformerUI.name = Label Color -LabelSizeTransformerUI.name = Label Size - -ColorTransformerPanel.labelColor.text=Color: -ColorTransformerPanel.labelRange.text=Range: -SizeTransformerPanel.labelMaxSize.text=Max size: -SizeTransformerPanel.labelMinSize.text=Min size: -SizeTransformerPanel.labelRange.text=Range: -SizeTransformerPanel.lowerBoundLabel.text=NaN -SizeTransformerPanel.upperBoundLabel.text=NaN -ColorTransformerPanel.lowerBoundLabel.text=NaN -ColorTransformerPanel.upperBoundLabel.text=NaN - -PalettePopup.default = Default -PalettePopup.invert = Invert -PalettePopup.recent = Recent diff --git a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/Bundle_cs.properties b/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/Bundle_cs.properties deleted file mode 100644 index 5edc00a108..0000000000 --- a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/Bundle_cs.properties +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz <zbynek.schwarz@gmail.com>, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-12 21\:45+0000\nLast-Translator\: Zbyn\u011bk Schwarz <zbynek.schwarz@gmail.com>\nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=Zav\u00e1d\u00ed u\u017eivatelsk\u00e9 rozhran\u00ed pro transform\u00e1tory - -ColorTransformerUI.name=Barva - -OpenIDE-Module-Short-Description=Zaveden\u00ed rozhran\u00ed transform\u00e1tor\u016f hodnocen\u00ed - -SizeTransformerUI.name=Velikost/V\u00e1ha - -LabelColorTransformerUI.name=Barva \u0161t\u00edtku - -LabelSizeTransformerUI.name=Velikost \u0161t\u00edtku - -ColorTransformerPanel.labelColor.text=Barva\: - -ColorTransformerPanel.labelRange.text=Rozsah\: - -SizeTransformerPanel.labelMaxSize.text=Max velikost\: - -SizeTransformerPanel.labelMinSize.text=Min velikost\: - -SizeTransformerPanel.labelRange.text=Rozsah\: - -SizeTransformerPanel.lowerBoundLabel.text=NaN - -SizeTransformerPanel.upperBoundLabel.text=NaN - -ColorTransformerPanel.lowerBoundLabel.text=NaN - -ColorTransformerPanel.upperBoundLabel.text=NaN - -PalettePopup.default=V\u00fdchoz\u00ed - -PalettePopup.invert=P\u0159evr\u00e1tit - -PalettePopup.recent=Ned\u00e1vn\u00e9 diff --git a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/Bundle_es.properties b/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/Bundle_es.properties deleted file mode 100644 index 9c458d4def..0000000000 --- a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/Bundle_es.properties +++ /dev/null @@ -1,44 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos <eduramiba@gmail.com>, 2011. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-07 11\:41+0000\nLast-Translator\: Eduardo Ramos <eduramiba@gmail.com>\nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Implementa la interfaz de usuario para transformadores - -ColorTransformerUI.name=Color - -OpenIDE-Module-Short-Description=Implementaciones de los transformadores de clasificaci\u00f3n - -SizeTransformerUI.name=Tama\u00f1o/Peso - -LabelColorTransformerUI.name=Color de etiqueta - -LabelSizeTransformerUI.name=Tama\u00f1o de etiqueta - -ColorTransformerPanel.labelColor.text=Color\: - -ColorTransformerPanel.labelRange.text=Rango\: - -SizeTransformerPanel.labelMaxSize.text=Tama\u00f1o max\: - -SizeTransformerPanel.labelMinSize.text=Tama\u00f1o min\: - -SizeTransformerPanel.labelRange.text=Rango\: - -SizeTransformerPanel.lowerBoundLabel.text=NaN - -SizeTransformerPanel.upperBoundLabel.text=NaN - -ColorTransformerPanel.lowerBoundLabel.text=NaN - -ColorTransformerPanel.upperBoundLabel.text=NaN - -PalettePopup.default=Por defecto - -PalettePopup.invert=Invertir - -PalettePopup.recent=Recientes diff --git a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/Bundle_fr.properties b/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/Bundle_fr.properties deleted file mode 100644 index ee05debbf7..0000000000 --- a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/Bundle_fr.properties +++ /dev/null @@ -1,44 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -# <sebastien.heymann@gmail.com>, 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-07 11\:22+0000\nLast-Translator\: gephi <sebastien.heymann@gmail.com>\nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Impl\u00e9mente l'interface utilisateur des transformers. - -ColorTransformerUI.name=Couleur - -OpenIDE-Module-Short-Description=Impl\u00e9mentation des transformeurs de classement - -SizeTransformerUI.name=Taille/Poids - -LabelColorTransformerUI.name=Couleur des labels - -LabelSizeTransformerUI.name=Taille des labels - -ColorTransformerPanel.labelColor.text=Couleur \: - -ColorTransformerPanel.labelRange.text=\u00c9tendue \: - -SizeTransformerPanel.labelMaxSize.text=Taille max \: - -SizeTransformerPanel.labelMinSize.text=Taille min \: - -SizeTransformerPanel.labelRange.text=\u00c9tendue \: - -SizeTransformerPanel.lowerBoundLabel.text=NaN - -SizeTransformerPanel.upperBoundLabel.text=NaN - -ColorTransformerPanel.lowerBoundLabel.text=NaN - -ColorTransformerPanel.upperBoundLabel.text=NaN - -PalettePopup.default=D\u00e9faut - -PalettePopup.invert=Inverser - -PalettePopup.recent=R\u00e9cent diff --git a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/Bundle_ja.properties b/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/Bundle_ja.properties deleted file mode 100644 index b6a7131bea..0000000000 --- a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/Bundle_ja.properties +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida <kida.siro@gmail.com>, 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-29 18\:43+0000\nLast-Translator\: Siro Kida <kida.siro@gmail.com>\nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u30c8\u30e9\u30f3\u30b9\u30d5\u30a9\u30fc\u30de\u7528\u306e\u30e6\u30fc\u30b6\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u3092\u5b9f\u88c5 - -ColorTransformerUI.name=\u8272 - -OpenIDE-Module-Short-Description=\u30e9\u30f3\u30ad\u30f3\u30b0\u30c8\u30e9\u30f3\u30b9\u30d5\u30a9\u30fc\u30deUI\u306e\u5b9f\u88c5 - -SizeTransformerUI.name=\u30b5\u30a4\u30ba/\u91cd\u307f - -LabelColorTransformerUI.name=\u30e9\u30d9\u30eb\u306e\u8272 - -LabelSizeTransformerUI.name=\u30e9\u30d9\u30eb\u306e\u5927\u304d\u3055 - -ColorTransformerPanel.labelColor.text=\u8272\: - -ColorTransformerPanel.labelRange.text=\u7bc4\u56f2\: - -SizeTransformerPanel.labelMaxSize.text=\u6700\u5927\u30b5\u30a4\u30ba\: - -SizeTransformerPanel.labelMinSize.text=\u6700\u5c0f\u30b5\u30a4\u30ba\: - -SizeTransformerPanel.labelRange.text=\u7bc4\u56f2 - -SizeTransformerPanel.lowerBoundLabel.text=NaN - -SizeTransformerPanel.upperBoundLabel.text=NaN - -ColorTransformerPanel.lowerBoundLabel.text=NaN - -ColorTransformerPanel.upperBoundLabel.text=NaN - -PalettePopup.default=\u30c7\u30d5\u30a9\u30eb\u30c8 - -PalettePopup.invert=\u53cd\u8ee2 - -PalettePopup.recent=\u6700\u8fd1\u4f7f\u7528\u3057\u305f diff --git a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/Bundle_pt_BR.properties b/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/Bundle_pt_BR.properties deleted file mode 100644 index 4a7906b61c..0000000000 --- a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/Bundle_pt_BR.properties +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr <celiofariajr@gmail.com>, 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 01\:26+0000\nLast-Translator\: C\u00e9lio Faria Jr. <celiofariajr@gmail.com>\nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Implementa a interface de usu\u00e1rio para transformadores - -ColorTransformerUI.name=Cor - -OpenIDE-Module-Short-Description=Implementa\u00e7\u00f5es dos transformadores de classifica\u00e7\u00e3o - -SizeTransformerUI.name=Tamanho/Peso - -LabelColorTransformerUI.name=Cor do r\u00f3tulo - -LabelSizeTransformerUI.name=Tamanho do r\u00f3tulo - -ColorTransformerPanel.labelColor.text=Cor\: - -ColorTransformerPanel.labelRange.text=Intervalo\: - -SizeTransformerPanel.labelMaxSize.text=Tamanho m\u00e1x\: - -SizeTransformerPanel.labelMinSize.text=Tamanho m\u00edn\: - -SizeTransformerPanel.labelRange.text=Intervalo\: - -SizeTransformerPanel.lowerBoundLabel.text=NaN - -SizeTransformerPanel.upperBoundLabel.text=NaN - -ColorTransformerPanel.lowerBoundLabel.text=NaN - -ColorTransformerPanel.upperBoundLabel.text=NaN - -PalettePopup.default=Padr\u00e3o - -PalettePopup.invert=Inverter - -PalettePopup.recent=Recente diff --git a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/Bundle_ru.properties b/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/Bundle_ru.properties deleted file mode 100644 index fede69e080..0000000000 --- a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/Bundle_ru.properties +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# <altsoph@gmail.com>, 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-11 06\:25+0000\nLast-Translator\: Altsoph <altsoph@gmail.com>\nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0438\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0440\u043e\u0432 \u0440\u0430\u043d\u0436\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f - -ColorTransformerUI.name=\u0426\u0432\u0435\u0442 - -OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f UI \u0434\u043b\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0440\u043e\u0432 \u0440\u0430\u043d\u0436\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f - -SizeTransformerUI.name=\u0420\u0430\u0437\u043c\u0435\u0440/\u0412\u0435\u0441 - -LabelColorTransformerUI.name=\u0426\u0432\u0435\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 - -LabelSizeTransformerUI.name=\u0420\u0430\u0437\u043c\u0435\u0440 \u043f\u043e\u0434\u043f\u0438\u0441\u0438 - -ColorTransformerPanel.labelColor.text=\u0426\u0432\u0435\u0442\: - -ColorTransformerPanel.labelRange.text=\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d\: - -SizeTransformerPanel.labelMaxSize.text=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440\: - -SizeTransformerPanel.labelMinSize.text=\u041c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0435\u0440\: - -SizeTransformerPanel.labelRange.text=\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d\: - -SizeTransformerPanel.lowerBoundLabel.text=NaN - -SizeTransformerPanel.upperBoundLabel.text=NaN - -ColorTransformerPanel.lowerBoundLabel.text=NaN - -ColorTransformerPanel.upperBoundLabel.text=NaN - -PalettePopup.default=\u041f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e - -PalettePopup.invert=\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u044c - -PalettePopup.recent=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u043d\u044b\u0439 diff --git a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/Bundle_zh_CN.properties b/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/Bundle_zh_CN.properties deleted file mode 100644 index 5b79cd98c6..0000000000 --- a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/Bundle_zh_CN.properties +++ /dev/null @@ -1,42 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:07+0000\nLast-Translator\: gephi <sebastien.heymann@gmail.com>\nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u4e3a\u53d8\u6362\u5b9e\u73b0\u7528\u6237\u754c\u9762 - -ColorTransformerUI.name=\u989c\u8272 - -OpenIDE-Module-Short-Description=\u6392\u540d\u53d8\u6362\u7528\u6237\u754c\u9762UI\u5b9e\u73b0 - -SizeTransformerUI.name=\u5c3a\u5bf8/\u6743\u91cd - -LabelColorTransformerUI.name=\u6807\u7b7e\u989c\u8272 - -LabelSizeTransformerUI.name=\u6807\u7b7e\u5c3a\u5bf8 - -ColorTransformerPanel.labelColor.text=\u989c\u8272\: - -ColorTransformerPanel.labelRange.text=\u8303\u56f4\: - -SizeTransformerPanel.labelMaxSize.text=\u6700\u5927\u5c3a\u5bf8\: - -SizeTransformerPanel.labelMinSize.text=\u6700\u5c0f\u5c3a\u5bf8\: - -SizeTransformerPanel.labelRange.text=\u8303\u56f4\: - -SizeTransformerPanel.lowerBoundLabel.text=\u975e\u6570\u503c - -SizeTransformerPanel.upperBoundLabel.text=\u975e\u6570\u503c - -ColorTransformerPanel.lowerBoundLabel.text=\u975e\u6570\u503c - -ColorTransformerPanel.upperBoundLabel.text=\u975e\u6570\u503c - -PalettePopup.default=\u7f3a\u7701 - -PalettePopup.invert=\u98a0\u5012 - -PalettePopup.recent=\u6700\u8fd1 diff --git a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/cs.po b/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/cs.po deleted file mode 100644 index 6c23d55889..0000000000 --- a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/cs.po +++ /dev/null @@ -1,73 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz <zbynek.schwarz@gmail.com>, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-12 21:45+0000\n" -"Last-Translator: ZbynΔ›k Schwarz <zbynek.schwarz@gmail.com>\n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ZavΓ‘dΓ­ uΕΎivatelskΓ© rozhranΓ­ pro transformΓ‘tory" - -msgid "ColorTransformerUI.name" -msgstr "Barva" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ZavedenΓ­ rozhranΓ­ transformΓ‘torΕ― hodnocenΓ­" - -msgid "SizeTransformerUI.name" -msgstr "Velikost/VΓ‘ha" - -msgid "LabelColorTransformerUI.name" -msgstr "Barva Ε‘tΓ­tku" - -msgid "LabelSizeTransformerUI.name" -msgstr "Velikost Ε‘tΓ­tku" - -msgid "ColorTransformerPanel.labelColor.text" -msgstr "Barva:" - -msgid "ColorTransformerPanel.labelRange.text" -msgstr "Rozsah:" - -msgid "SizeTransformerPanel.labelMaxSize.text" -msgstr "Max velikost:" - -msgid "SizeTransformerPanel.labelMinSize.text" -msgstr "Min velikost:" - -msgid "SizeTransformerPanel.labelRange.text" -msgstr "Rozsah:" - -msgid "SizeTransformerPanel.lowerBoundLabel.text" -msgstr "NaN" - -msgid "SizeTransformerPanel.upperBoundLabel.text" -msgstr "NaN" - -msgid "ColorTransformerPanel.lowerBoundLabel.text" -msgstr "NaN" - -msgid "ColorTransformerPanel.upperBoundLabel.text" -msgstr "NaN" - -msgid "PalettePopup.default" -msgstr "VΓ½chozΓ­" - -msgid "PalettePopup.invert" -msgstr "PΕ™evrΓ‘tit" - -msgid "PalettePopup.recent" -msgstr "NedΓ‘vnΓ©" diff --git a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/es.po b/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/es.po deleted file mode 100644 index e6dc1c7ee8..0000000000 --- a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/es.po +++ /dev/null @@ -1,74 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos <eduramiba@gmail.com>, 2011. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-07 11:41+0000\n" -"Last-Translator: Eduardo Ramos <eduramiba@gmail.com>\n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Implementa la interfaz de usuario para transformadores" - -msgid "ColorTransformerUI.name" -msgstr "Color" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implementaciones de los transformadores de clasificaciΓ³n" - -msgid "SizeTransformerUI.name" -msgstr "TamaΓ±o/Peso" - -msgid "LabelColorTransformerUI.name" -msgstr "Color de etiqueta" - -msgid "LabelSizeTransformerUI.name" -msgstr "TamaΓ±o de etiqueta" - -msgid "ColorTransformerPanel.labelColor.text" -msgstr "Color:" - -msgid "ColorTransformerPanel.labelRange.text" -msgstr "Rango:" - -msgid "SizeTransformerPanel.labelMaxSize.text" -msgstr "TamaΓ±o max:" - -msgid "SizeTransformerPanel.labelMinSize.text" -msgstr "TamaΓ±o min:" - -msgid "SizeTransformerPanel.labelRange.text" -msgstr "Rango:" - -msgid "SizeTransformerPanel.lowerBoundLabel.text" -msgstr "NaN" - -msgid "SizeTransformerPanel.upperBoundLabel.text" -msgstr "NaN" - -msgid "ColorTransformerPanel.lowerBoundLabel.text" -msgstr "NaN" - -msgid "ColorTransformerPanel.upperBoundLabel.text" -msgstr "NaN" - -msgid "PalettePopup.default" -msgstr "Por defecto" - -msgid "PalettePopup.invert" -msgstr "Invertir" - -msgid "PalettePopup.recent" -msgstr "Recientes" diff --git a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/fr.po b/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/fr.po deleted file mode 100644 index 7e7a5ddba6..0000000000 --- a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/fr.po +++ /dev/null @@ -1,74 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -# <sebastien.heymann@gmail.com>, 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-07 11:22+0000\n" -"Last-Translator: gephi <sebastien.heymann@gmail.com>\n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ImplΓ©mente l'interface utilisateur des transformers." - -msgid "ColorTransformerUI.name" -msgstr "Couleur" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplΓ©mentation des transformeurs de classement" - -msgid "SizeTransformerUI.name" -msgstr "Taille/Poids" - -msgid "LabelColorTransformerUI.name" -msgstr "Couleur des labels" - -msgid "LabelSizeTransformerUI.name" -msgstr "Taille des labels" - -msgid "ColorTransformerPanel.labelColor.text" -msgstr "Couleur :" - -msgid "ColorTransformerPanel.labelRange.text" -msgstr "Γ‰tendue :" - -msgid "SizeTransformerPanel.labelMaxSize.text" -msgstr "Taille max :" - -msgid "SizeTransformerPanel.labelMinSize.text" -msgstr "Taille min :" - -msgid "SizeTransformerPanel.labelRange.text" -msgstr "Γ‰tendue :" - -msgid "SizeTransformerPanel.lowerBoundLabel.text" -msgstr "NaN" - -msgid "SizeTransformerPanel.upperBoundLabel.text" -msgstr "NaN" - -msgid "ColorTransformerPanel.lowerBoundLabel.text" -msgstr "NaN" - -msgid "ColorTransformerPanel.upperBoundLabel.text" -msgstr "NaN" - -msgid "PalettePopup.default" -msgstr "DΓ©faut" - -msgid "PalettePopup.invert" -msgstr "Inverser" - -msgid "PalettePopup.recent" -msgstr "RΓ©cent" diff --git a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/ja.po b/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/ja.po deleted file mode 100644 index a2fafa1d57..0000000000 --- a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/ja.po +++ /dev/null @@ -1,73 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida <kida.siro@gmail.com>, 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-29 18:43+0000\n" -"Last-Translator: Siro Kida <kida.siro@gmail.com>\n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "γƒˆγƒ©γƒ³γ‚Ήγƒ•γ‚©γƒΌγƒžη”¨γγƒ¦γƒΌγ‚Άγ‚€γƒ³γ‚Ώγƒ•γ‚§γƒΌγ‚Ήγ‚’εŸθ£…" - -msgid "ColorTransformerUI.name" -msgstr "色" - -msgid "OpenIDE-Module-Short-Description" -msgstr "γƒ©γƒ³γ‚­γƒ³γ‚°γƒˆγƒ©γƒ³γ‚Ήγƒ•γ‚©γƒΌγƒžUIγεŸθ£…" - -msgid "SizeTransformerUI.name" -msgstr "γ‚΅γ‚€γ‚Ί/重み" - -msgid "LabelColorTransformerUI.name" -msgstr "ラベルγθ‰²" - -msgid "LabelSizeTransformerUI.name" -msgstr "ラベルγε€§γγ•" - -msgid "ColorTransformerPanel.labelColor.text" -msgstr "色:" - -msgid "ColorTransformerPanel.labelRange.text" -msgstr "η―„ε›²:" - -msgid "SizeTransformerPanel.labelMaxSize.text" -msgstr "ζœ€ε€§γ‚΅γ‚€γ‚Ί:" - -msgid "SizeTransformerPanel.labelMinSize.text" -msgstr "ζœ€ε°γ‚΅γ‚€γ‚Ί:" - -msgid "SizeTransformerPanel.labelRange.text" -msgstr "η―„ε›²" - -msgid "SizeTransformerPanel.lowerBoundLabel.text" -msgstr "NaN" - -msgid "SizeTransformerPanel.upperBoundLabel.text" -msgstr "NaN" - -msgid "ColorTransformerPanel.lowerBoundLabel.text" -msgstr "NaN" - -msgid "ColorTransformerPanel.upperBoundLabel.text" -msgstr "NaN" - -msgid "PalettePopup.default" -msgstr "γƒ‡γƒ•γ‚©γƒ«γƒˆ" - -msgid "PalettePopup.invert" -msgstr "反軒" - -msgid "PalettePopup.recent" -msgstr "ζœ€θΏ‘δ½Ώη”¨γ—γŸ" diff --git a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/org-gephi-ui-ranking-plugin.pot b/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/org-gephi-ui-ranking-plugin.pot deleted file mode 100644 index 2458d41064..0000000000 --- a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/org-gephi-ui-ranking-plugin.pot +++ /dev/null @@ -1,70 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team <gephi.team@lists.launchpad.net>, 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian <gephi.team@lists.launchpad.net>\n" -"Language-Team: English <https://launchpad.net/~gephi.team>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Implements user interface for transformers" - -msgid "ColorTransformerUI.name" -msgstr "Color" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Ranking transformers UI implementations" - -msgid "SizeTransformerUI.name" -msgstr "Size/Weight" - -msgid "LabelColorTransformerUI.name" -msgstr "Label Color" - -msgid "LabelSizeTransformerUI.name" -msgstr "Label Size" - -msgid "ColorTransformerPanel.labelColor.text" -msgstr "Color:" - -msgid "ColorTransformerPanel.labelRange.text" -msgstr "Range:" - -msgid "SizeTransformerPanel.labelMaxSize.text" -msgstr "Max size:" - -msgid "SizeTransformerPanel.labelMinSize.text" -msgstr "Min size:" - -msgid "SizeTransformerPanel.labelRange.text" -msgstr "Range:" - -msgid "SizeTransformerPanel.lowerBoundLabel.text" -msgstr "NaN" - -msgid "SizeTransformerPanel.upperBoundLabel.text" -msgstr "NaN" - -msgid "ColorTransformerPanel.lowerBoundLabel.text" -msgstr "NaN" - -msgid "ColorTransformerPanel.upperBoundLabel.text" -msgstr "NaN" - -msgid "PalettePopup.default" -msgstr "Default" - -msgid "PalettePopup.invert" -msgstr "Invert" - -msgid "PalettePopup.recent" -msgstr "Recent" diff --git a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/pt_BR.po b/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/pt_BR.po deleted file mode 100644 index dd78ca3a27..0000000000 --- a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/pt_BR.po +++ /dev/null @@ -1,73 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr <celiofariajr@gmail.com>, 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 01:26+0000\n" -"Last-Translator: CΓ©lio Faria Jr. <celiofariajr@gmail.com>\n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Implementa a interface de usuΓ‘rio para transformadores" - -msgid "ColorTransformerUI.name" -msgstr "Cor" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplementaΓ§Γ΅es dos transformadores de classificaΓ§Γ£o" - -msgid "SizeTransformerUI.name" -msgstr "Tamanho/Peso" - -msgid "LabelColorTransformerUI.name" -msgstr "Cor do rΓ³tulo" - -msgid "LabelSizeTransformerUI.name" -msgstr "Tamanho do rΓ³tulo" - -msgid "ColorTransformerPanel.labelColor.text" -msgstr "Cor:" - -msgid "ColorTransformerPanel.labelRange.text" -msgstr "Intervalo:" - -msgid "SizeTransformerPanel.labelMaxSize.text" -msgstr "Tamanho mΓ‘x:" - -msgid "SizeTransformerPanel.labelMinSize.text" -msgstr "Tamanho mΓ­n:" - -msgid "SizeTransformerPanel.labelRange.text" -msgstr "Intervalo:" - -msgid "SizeTransformerPanel.lowerBoundLabel.text" -msgstr "NaN" - -msgid "SizeTransformerPanel.upperBoundLabel.text" -msgstr "NaN" - -msgid "ColorTransformerPanel.lowerBoundLabel.text" -msgstr "NaN" - -msgid "ColorTransformerPanel.upperBoundLabel.text" -msgstr "NaN" - -msgid "PalettePopup.default" -msgstr "PadrΓ£o" - -msgid "PalettePopup.invert" -msgstr "Inverter" - -msgid "PalettePopup.recent" -msgstr "Recente" diff --git a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/resources/color-swatch.png b/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/resources/color-swatch.png deleted file mode 100755 index 85330f2a6b..0000000000 Binary files a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/resources/color-swatch.png and /dev/null differ diff --git a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/resources/color.png b/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/resources/color.png deleted file mode 100644 index 809fb00e5a..0000000000 Binary files a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/resources/color.png and /dev/null differ diff --git a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/resources/labelcolor.png b/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/resources/labelcolor.png deleted file mode 100644 index ab543cc28a..0000000000 Binary files a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/resources/labelcolor.png and /dev/null differ diff --git a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/resources/labelsize.png b/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/resources/labelsize.png deleted file mode 100644 index 52c26f9c49..0000000000 Binary files a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/resources/labelsize.png and /dev/null differ diff --git a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/resources/size.png b/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/resources/size.png deleted file mode 100644 index f763a16880..0000000000 Binary files a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/resources/size.png and /dev/null differ diff --git a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/ru.po b/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/ru.po deleted file mode 100644 index 50ba587d4b..0000000000 --- a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/ru.po +++ /dev/null @@ -1,73 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# <altsoph@gmail.com>, 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-11 06:25+0000\n" -"Last-Translator: Altsoph <altsoph@gmail.com>\n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Π Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ интСрфСйс для трансформаторов ранТирования" - -msgid "ColorTransformerUI.name" -msgstr "Π¦Π²Π΅Ρ‚" - -msgid "OpenIDE-Module-Short-Description" -msgstr "РСализация UI для трансформаторов ранТирования" - -msgid "SizeTransformerUI.name" -msgstr "Π Π°Π·ΠΌΠ΅Ρ€/ВСс" - -msgid "LabelColorTransformerUI.name" -msgstr "Π¦Π²Π΅Ρ‚ подписи" - -msgid "LabelSizeTransformerUI.name" -msgstr "Π Π°Π·ΠΌΠ΅Ρ€ подписи" - -msgid "ColorTransformerPanel.labelColor.text" -msgstr "Π¦Π²Π΅Ρ‚:" - -msgid "ColorTransformerPanel.labelRange.text" -msgstr "Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½:" - -msgid "SizeTransformerPanel.labelMaxSize.text" -msgstr "ΠœΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€:" - -msgid "SizeTransformerPanel.labelMinSize.text" -msgstr "ΠœΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€:" - -msgid "SizeTransformerPanel.labelRange.text" -msgstr "Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½:" - -msgid "SizeTransformerPanel.lowerBoundLabel.text" -msgstr "NaN" - -msgid "SizeTransformerPanel.upperBoundLabel.text" -msgstr "NaN" - -msgid "ColorTransformerPanel.lowerBoundLabel.text" -msgstr "NaN" - -msgid "ColorTransformerPanel.upperBoundLabel.text" -msgstr "NaN" - -msgid "PalettePopup.default" -msgstr "По ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ" - -msgid "PalettePopup.invert" -msgstr "ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ" - -msgid "PalettePopup.recent" -msgstr "ПослСдний ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ" diff --git a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/zh_CN.po b/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/zh_CN.po deleted file mode 100644 index e690d3606f..0000000000 --- a/modules/RankingPluginUI/src/main/resources/org/gephi/ui/ranking/plugin/zh_CN.po +++ /dev/null @@ -1,72 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:07+0000\n" -"Last-Translator: gephi <sebastien.heymann@gmail.com>\n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "为变捒εžηŽ°η”¨ζˆ·η•Œι’" - -msgid "ColorTransformerUI.name" -msgstr "ι’œθ‰²" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζŽ’εε˜ζ’η”¨ζˆ·η•Œι’UIεžηް" - -msgid "SizeTransformerUI.name" -msgstr "ε°Ίε―Έ/权重" - -msgid "LabelColorTransformerUI.name" -msgstr "ζ ‡η­Ύι’œθ‰²" - -msgid "LabelSizeTransformerUI.name" -msgstr "ζ ‡η­Ύε°Ίε―Έ" - -msgid "ColorTransformerPanel.labelColor.text" -msgstr "ι’œθ‰²:" - -msgid "ColorTransformerPanel.labelRange.text" -msgstr "θŒƒε›΄:" - -msgid "SizeTransformerPanel.labelMaxSize.text" -msgstr "ζœ€ε€§ε°Ίε―Έ:" - -msgid "SizeTransformerPanel.labelMinSize.text" -msgstr "ζœ€ε°ε°Ίε―Έ:" - -msgid "SizeTransformerPanel.labelRange.text" -msgstr "θŒƒε›΄:" - -msgid "SizeTransformerPanel.lowerBoundLabel.text" -msgstr "ιžζ•°ε€Ό" - -msgid "SizeTransformerPanel.upperBoundLabel.text" -msgstr "ιžζ•°ε€Ό" - -msgid "ColorTransformerPanel.lowerBoundLabel.text" -msgstr "ιžζ•°ε€Ό" - -msgid "ColorTransformerPanel.upperBoundLabel.text" -msgstr "ιžζ•°ε€Ό" - -msgid "PalettePopup.default" -msgstr "缺省" - -msgid "PalettePopup.invert" -msgstr "ι’ ε€’" - -msgid "PalettePopup.recent" -msgstr "ζœ€θΏ‘" diff --git a/modules/SettingsUpgrader/pom.xml b/modules/SettingsUpgrader/pom.xml index 49d75e04c2..f980f91b88 100644 --- a/modules/SettingsUpgrader/pom.xml +++ b/modules/SettingsUpgrader/pom.xml @@ -4,13 +4,13 @@ <parent> <artifactId>gephi-parent</artifactId> <groupId>org.gephi</groupId> - <version>0.9-SNAPSHOT</version> + <version>0.11.3-SNAPSHOT</version> <relativePath>../..</relativePath> </parent> <groupId>org.gephi</groupId> <artifactId>settings-upgrader</artifactId> - <version>0.9-SNAPSHOT</version> + <version>0.11.3-SNAPSHOT</version> <packaging>nbm</packaging> <name>SettingsUpgrader</name> @@ -32,6 +32,10 @@ <groupId>org.netbeans.api</groupId> <artifactId>org-openide-util</artifactId> </dependency> + <dependency> + <groupId>org.netbeans.api</groupId> + <artifactId>org-openide-util-ui</artifactId> + </dependency> <dependency> <groupId>org.netbeans.api</groupId> <artifactId>org-openide-util-lookup</artifactId> @@ -49,7 +53,7 @@ <build> <plugins> <plugin> - <groupId>org.codehaus.mojo</groupId> + <groupId>org.apache.netbeans.utilities</groupId> <artifactId>nbm-maven-plugin</artifactId> <configuration> <publicPackages> diff --git a/modules/SettingsUpgrader/src/main/java/org/gephi/ui/upgrader/CopyFiles.java b/modules/SettingsUpgrader/src/main/java/org/gephi/ui/upgrader/CopyFiles.java index 233c02d582..b676c1da88 100644 --- a/modules/SettingsUpgrader/src/main/java/org/gephi/ui/upgrader/CopyFiles.java +++ b/modules/SettingsUpgrader/src/main/java/org/gephi/ui/upgrader/CopyFiles.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.upgrader; import java.io.BufferedReader; @@ -50,22 +51,22 @@ Development and Distribution License("CDDL") (collectively, the import java.io.InputStreamReader; import java.io.OutputStream; import java.io.Reader; +import java.nio.charset.StandardCharsets; import java.util.HashSet; import java.util.Set; import org.openide.filesystems.FileUtil; import org.openide.util.EditableProperties; /** - * * @author mbastian */ public class CopyFiles { - private File sourceRoot; - private File targetRoot; + private final File sourceRoot; + private final File targetRoot; private EditableProperties currentProperties; - private Set<String> includePatterns = new HashSet<String>(); - private Set<String> excludePatterns = new HashSet<String>(); + private final Set<String> includePatterns = new HashSet<>(); + private final Set<String> excludePatterns = new HashSet<>(); private CopyFiles(File source, File target) { this.sourceRoot = source; @@ -73,23 +74,136 @@ private CopyFiles(File source, File target) { //Pattern files try { InputStream is = CopyFiles.class.getResourceAsStream("/org/gephi/ui/upgrader/gephi.import"); - Reader reader = new InputStreamReader(is, "utf-8"); // NOI18N + Reader reader = new InputStreamReader(is, StandardCharsets.UTF_8); // NOI18N readPatterns(reader); reader.close(); + is.close(); } catch (IOException ex) { } } public static void copyDeep(File source, File target) throws IOException { CopyFiles copyFiles = new CopyFiles(source, target); - System.out.println("Copying from: " + copyFiles.sourceRoot + "\nto: " + copyFiles.targetRoot); //NOI18N copyFiles.copyFolder(copyFiles.sourceRoot); } + /** + * Returns slash separated path relative to given root. + */ + private static String getRelativePath(File root, File file) { + String result = file.getAbsolutePath().substring(root.getAbsolutePath().length()); + result = result.replace('\\', '/'); //NOI18N + if (result.startsWith("/") && !result.startsWith("//")) { //NOI18N + result = result.substring(1); + } + return result; + } + + /** + * Copy source file to target file. It creates necessary sub folders. + * + * @param sourceFile source file + * @param targetFile target file + * @throws java.io.IOException if copying fails + */ + private static void copyFile(File sourceFile, File targetFile) throws IOException { + ensureParent(targetFile); + InputStream ins = null; + OutputStream out = null; + try { + ins = new FileInputStream(sourceFile); + out = new FileOutputStream(targetFile); + FileUtil.copy(ins, out); + } finally { + if (ins != null) { + ins.close(); + } + if (out != null) { + out.close(); + } + } + } + + /** + * Creates parent of given file, if doesn't exist. + */ + private static void ensureParent(File file) throws IOException { + final File parent = file.getParentFile(); + if (parent != null && !parent.exists()) { + if (!parent.mkdirs()) { + throw new IOException("Cannot create folder: " + parent.getAbsolutePath()); //NOI18N + } + } + } + + /** + * Parses given compound string pattern into set of single patterns. + * + * @param pattern compound pattern in form filePattern1#keyPattern1#|filePattern2#keyPattern2#|filePattern3 + * @return set of single patterns containing just one # (e.g. [filePattern1#keyPattern1, filePattern2#keyPattern2, filePattern3]) + */ + private static Set<String> parsePattern(String pattern) { + Set<String> patterns = new HashSet<>(); + if (pattern.contains("#")) { //NOI18N + StringBuilder partPattern = new StringBuilder(); + ParserState state = ParserState.START; + int blockLevel = 0; + for (int i = 0; i < pattern.length(); i++) { + char c = pattern.charAt(i); + switch (state) { + case START: + if (c == '#') { + state = ParserState.IN_KEY_PATTERN; + partPattern.append(c); + } else if (c == '(') { + state = ParserState.IN_BLOCK; + blockLevel++; + partPattern.append(c); + } else if (c == '|') { + patterns.add(partPattern.toString()); + partPattern = new StringBuilder(); + } else { + partPattern.append(c); + } + break; + case IN_KEY_PATTERN: + if (c == '#') { + state = ParserState.AFTER_KEY_PATTERN; + } else { + partPattern.append(c); + } + break; + case AFTER_KEY_PATTERN: + if (c == '|') { + state = ParserState.START; + patterns.add(partPattern.toString()); + partPattern = new StringBuilder(); + } else { + assert false : "Wrong OptionsExport pattern " + pattern + + ". Only format like filePattern1#keyPattern#|filePattern2 is supported."; //NOI18N + } + break; + case IN_BLOCK: + partPattern.append(c); + if (c == ')') { + blockLevel--; + if (blockLevel == 0) { + state = ParserState.START; + } + } + break; + } + } + patterns.add(partPattern.toString()); + } else { + patterns.add(pattern); + } + return patterns; + } + private void copyFolder(File sourceFolder) throws IOException { File[] srcChildren = sourceFolder.listFiles(); if (srcChildren == null) { - System.err.println(sourceFolder + " is not a directory or is invalid."); //NOI18N return; } for (File child : srcChildren) { @@ -101,16 +215,18 @@ private void copyFolder(File sourceFolder) throws IOException { } } - /** Copy given file to target root dir if matches include/exclude patterns. + /** + * Copy given file to target root dir if matches include/exclude patterns. * If properties pattern is applicable, it copies only matching keys. + * * @param sourceFile source file * @throws java.io.IOException if copying fails */ private void copyFile(File sourceFile) throws IOException { String relativePath = getRelativePath(sourceRoot, sourceFile); boolean includeFile = false; - Set<String> includeKeys = new HashSet<String>(); - Set<String> excludeKeys = new HashSet<String>(); + Set<String> includeKeys = new HashSet<>(); + Set<String> excludeKeys = new HashSet<>(); for (String pattern : includePatterns) { if (pattern.contains("#")) { //NOI18N includeKeys.addAll(matchingKeys(relativePath, pattern)); @@ -167,57 +283,16 @@ private void copyFile(File sourceFile) throws IOException { } } - /** Returns slash separated path relative to given root. */ - private static String getRelativePath(File root, File file) { - String result = file.getAbsolutePath().substring(root.getAbsolutePath().length()); - result = result.replace('\\', '/'); //NOI18N - if (result.startsWith("/") && !result.startsWith("//")) { //NOI18N - result = result.substring(1); - } - return result; - } - - /** Copy source file to target file. It creates necessary sub folders. - * @param sourceFile source file - * @param targetFile target file - * @throws java.io.IOException if copying fails - */ - private static void copyFile(File sourceFile, File targetFile) throws IOException { - ensureParent(targetFile); - InputStream ins = null; - OutputStream out = null; - try { - ins = new FileInputStream(sourceFile); - out = new FileOutputStream(targetFile); - FileUtil.copy(ins, out); - } finally { - if (ins != null) { - ins.close(); - } - if (out != null) { - out.close(); - } - } - } - - /** Creates parent of given file, if doesn't exist. */ - private static void ensureParent(File file) throws IOException { - final File parent = file.getParentFile(); - if (parent != null && !parent.exists()) { - if (!parent.mkdirs()) { - throw new IOException("Cannot create folder: " + parent.getAbsolutePath()); //NOI18N - } - } - } - - /** Returns set of keys matching given pattern. - * @param relativePath path relative to sourceRoot + /** + * Returns set of keys matching given pattern. + * + * @param relativePath path relative to sourceRoot * @param propertiesPattern pattern like file.properties#keyPattern * @return set of matching keys, never null * @throws IOException if properties cannot be loaded */ private Set<String> matchingKeys(String relativePath, String propertiesPattern) throws IOException { - Set<String> matchingKeys = new HashSet<String>(); + Set<String> matchingKeys = new HashSet<>(); String[] patterns = propertiesPattern.split("#", 2); String filePattern = patterns[0]; String keyPattern = patterns[1]; @@ -234,7 +309,9 @@ private Set<String> matchingKeys(String relativePath, String propertiesPattern) return matchingKeys; } - /** Returns properties from relative path. + /** + * Returns properties from relative path. + * * @param relativePath relative path * @return properties from relative path. * @throws IOException if cannot open stream @@ -253,12 +330,14 @@ private EditableProperties getProperties(String relativePath) throws IOException return properties; } - /** Reads the include/exclude set from a given reader. + /** + * Reads the include/exclude set from a given reader. + * * @param r reader */ private void readPatterns(Reader r) throws IOException { BufferedReader buf = new BufferedReader(r); - for (;;) { + for (; ; ) { String line = buf.readLine(); if (line == null) { break; @@ -290,66 +369,4 @@ enum ParserState { AFTER_KEY_PATTERN, IN_BLOCK } - - /** Parses given compound string pattern into set of single patterns. - * @param pattern compound pattern in form filePattern1#keyPattern1#|filePattern2#keyPattern2#|filePattern3 - * @return set of single patterns containing just one # (e.g. [filePattern1#keyPattern1, filePattern2#keyPattern2, filePattern3]) - */ - private static Set<String> parsePattern(String pattern) { - Set<String> patterns = new HashSet<String>(); - if (pattern.contains("#")) { //NOI18N - StringBuilder partPattern = new StringBuilder(); - ParserState state = ParserState.START; - int blockLevel = 0; - for (int i = 0; i < pattern.length(); i++) { - char c = pattern.charAt(i); - switch (state) { - case START: - if (c == '#') { - state = ParserState.IN_KEY_PATTERN; - partPattern.append(c); - } else if (c == '(') { - state = ParserState.IN_BLOCK; - blockLevel++; - partPattern.append(c); - } else if (c == '|') { - patterns.add(partPattern.toString()); - partPattern = new StringBuilder(); - } else { - partPattern.append(c); - } - break; - case IN_KEY_PATTERN: - if (c == '#') { - state = ParserState.AFTER_KEY_PATTERN; - } else { - partPattern.append(c); - } - break; - case AFTER_KEY_PATTERN: - if (c == '|') { - state = ParserState.START; - patterns.add(partPattern.toString()); - partPattern = new StringBuilder(); - } else { - assert false : "Wrong OptionsExport pattern " + pattern + ". Only format like filePattern1#keyPattern#|filePattern2 is supported."; //NOI18N - } - break; - case IN_BLOCK: - partPattern.append(c); - if (c == ')') { - blockLevel--; - if (blockLevel == 0) { - state = ParserState.START; - } - } - break; - } - } - patterns.add(partPattern.toString()); - } else { - patterns.add(pattern); - } - return patterns; - } } diff --git a/modules/SettingsUpgrader/src/main/java/org/gephi/ui/upgrader/Installer.java b/modules/SettingsUpgrader/src/main/java/org/gephi/ui/upgrader/Installer.java index 230297190c..bc594d7c61 100644 --- a/modules/SettingsUpgrader/src/main/java/org/gephi/ui/upgrader/Installer.java +++ b/modules/SettingsUpgrader/src/main/java/org/gephi/ui/upgrader/Installer.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.upgrader; import org.openide.modules.ModuleInstall; @@ -48,7 +49,7 @@ public class Installer extends ModuleInstall { @Override public void restored() { - if (System.getProperty("org.gephi.settingsUpgrder.enabled", "true").equals("true")) { + if (System.getProperty("org.gephi.settingsUpgrader.enabled", "true").equals("true")) { importSettings(); } } diff --git a/modules/SettingsUpgrader/src/main/java/org/gephi/ui/upgrader/Upgrader.java b/modules/SettingsUpgrader/src/main/java/org/gephi/ui/upgrader/Upgrader.java index 1ad564865d..cd31998000 100644 --- a/modules/SettingsUpgrader/src/main/java/org/gephi/ui/upgrader/Upgrader.java +++ b/modules/SettingsUpgrader/src/main/java/org/gephi/ui/upgrader/Upgrader.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.upgrader; import java.io.File; @@ -46,38 +47,44 @@ Development and Distribution License("CDDL") (collectively, the import java.util.Arrays; import java.util.Iterator; import java.util.List; +import java.util.logging.Level; +import java.util.logging.Logger; import org.openide.DialogDisplayer; import org.openide.LifecycleManager; import org.openide.NotifyDescriptor; -import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileUtil; -import org.openide.modules.InstalledFileLocator; +import org.openide.modules.Places; import org.openide.util.Exceptions; import org.openide.util.NbBundle; import org.openide.util.NbPreferences; /** - * * @author mbastian */ public class Upgrader { private final static String UPGRADER_LAST_VERSION = "Upgrader_Last_Version"; - private final static List<String> VERSION_TO_CHECK = - Arrays.asList(new String[]{"gephi", "gephi08alpha", "gephi07beta", "gephi07alpha"}); + private final static List<String> VERSION_TO_CHECK + = Arrays.asList("0.9.0", "0.9.1", "0.9.2", "0.9", "0.10"); public void upgrade() { String currentVersion = getCurrentVersion(); - System.out.println("Current Version is " + currentVersion); - String lastVersion = NbPreferences.root().get(UPGRADER_LAST_VERSION, null); - NbPreferences.root().put(UPGRADER_LAST_VERSION, currentVersion); + if (currentVersion.equalsIgnoreCase("target") || currentVersion.contains("SNAPSHOT")) { + // Development version + return; + } + Logger.getLogger("").log(Level.INFO, "Current Version is {0}", currentVersion); + + String lastVersion = NbPreferences.forModule(Upgrader.class).get(UPGRADER_LAST_VERSION, null); if (lastVersion == null || !lastVersion.equals(currentVersion)) { File latestPreviousVersion = checkPrevious(); - if (latestPreviousVersion != null && !latestPreviousVersion.getName().replace(".", "").equals(currentVersion)) { + if (latestPreviousVersion != null && + !latestPreviousVersion.getName().replace(".", "").equals(currentVersion)) { File source = new File(latestPreviousVersion, "dev"); - File dest = new File(System.getProperty("netbeans.user")); + source = source.exists() ? source : latestPreviousVersion; + File dest = Places.getUserDirectory(); if (source.exists() && dest.exists()) { - //Import previous settings + NbPreferences.forModule(Upgrader.class).put(UPGRADER_LAST_VERSION, currentVersion); + boolean confirm = showUpgradeDialog(latestPreviousVersion); if (confirm) { try { @@ -100,27 +107,23 @@ public void upgrade() { private boolean showRestartDialog() { String msg = NbBundle.getMessage(Upgrader.class, "Upgrader.restart.message"); String title = NbBundle.getMessage(Upgrader.class, "Upgrader.restart.title"); - NotifyDescriptor nd = new NotifyDescriptor.Confirmation(msg, title, NotifyDescriptor.YES_NO_OPTION, NotifyDescriptor.QUESTION_MESSAGE); + NotifyDescriptor nd = new NotifyDescriptor.Confirmation(msg, title, NotifyDescriptor.YES_NO_OPTION, + NotifyDescriptor.QUESTION_MESSAGE); - if (DialogDisplayer.getDefault().notify(nd) == NotifyDescriptor.YES_OPTION) { - return true; - } - return false; + return DialogDisplayer.getDefault().notify(nd) == NotifyDescriptor.YES_OPTION; } private boolean showUpgradeDialog(File source) { String msg = NbBundle.getMessage(Upgrader.class, "Upgrader.message", source.getName()); String title = NbBundle.getMessage(Upgrader.class, "Upgrader.title"); - NotifyDescriptor nd = new NotifyDescriptor.Confirmation(msg, title, NotifyDescriptor.YES_NO_OPTION, NotifyDescriptor.QUESTION_MESSAGE); + NotifyDescriptor nd = new NotifyDescriptor.Confirmation(msg, title, NotifyDescriptor.YES_NO_OPTION, + NotifyDescriptor.QUESTION_MESSAGE); - if (DialogDisplayer.getDefault().notify(nd) == NotifyDescriptor.YES_OPTION) { - return true; - } - return false; + return DialogDisplayer.getDefault().notify(nd) == NotifyDescriptor.YES_OPTION; } private String getCurrentVersion() { - File userDir = new File(System.getProperty("netbeans.user")); + File userDir = Places.getUserDirectory(); if (userDir.getName().equalsIgnoreCase("testuserdir")) { return userDir.getName(); } @@ -128,15 +131,15 @@ private String getCurrentVersion() { } private File checkPrevious() { - File userDir = new File(System.getProperty("netbeans.user")); + File userDir = Places.getUserDirectory(); File sourceFolder = null; if (userDir.exists()) { File userHomeFile; - if (userDir.getName().equalsIgnoreCase("testuserdir")) { - userHomeFile = userDir.getParentFile(); - } else { + if (userDir.getParentFile().getName().equalsIgnoreCase("dev")) { userHomeFile = userDir.getParentFile().getParentFile(); + } else { + userHomeFile = userDir.getParentFile(); } Iterator<String> it = VERSION_TO_CHECK.iterator(); String ver; diff --git a/modules/SettingsUpgrader/src/main/nbm/manifest.mf b/modules/SettingsUpgrader/src/main/nbm/manifest.mf index f674527733..02b00e28e5 100644 --- a/modules/SettingsUpgrader/src/main/nbm/manifest.mf +++ b/modules/SettingsUpgrader/src/main/nbm/manifest.mf @@ -2,4 +2,6 @@ Manifest-Version: 1.0 OpenIDE-Module-Install: org/gephi/ui/upgrader/Installer.class OpenIDE-Module-Localizing-Bundle: org/gephi/ui/upgrader/Bundle.properties AutoUpdate-Essential-Module: true -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi UI +OpenIDE-Module-Name: Settings Upgrader \ No newline at end of file diff --git a/modules/SettingsUpgrader/src/main/nbm/module.xml b/modules/SettingsUpgrader/src/main/nbm/module.xml deleted file mode 100644 index ebcdcddb73..0000000000 --- a/modules/SettingsUpgrader/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<nbm> - <!-- - <moduleType>autoload</moduleType> - <codeNameBase>org.gephi.ui.upgrader/1</codeNameBase> - <licenseName>Apache License, Version 2.0</licenseName> - <licenseFile>license.txt</licenseFile> - --> -</nbm> diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle.properties b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle.properties index d6aac36796..e1aec20463 100644 --- a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle.properties +++ b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle.properties @@ -1,7 +1,4 @@ -OpenIDE-Module-Display-Category=Gephi UI -OpenIDE-Module-Long-Description=\ - Import settings from previous Gephi installation -OpenIDE-Module-Name=Settings Upgrader +OpenIDE-Module-Long-Description=Import settings from previous Gephi installation OpenIDE-Module-Short-Description=Import settings from previous Gephi installation Upgrader.title = Import settings Upgrader.message = Settings created by a previous version of Gephi ({0}) were found on your system. Do you want to import them? diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_ar.properties b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_ca.properties b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_ca.properties new file mode 100644 index 0000000000..ed3ed6b15c --- /dev/null +++ b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_ca.properties @@ -0,0 +1,6 @@ +OpenIDE-Module-Long-Description=Importa la configuraciσ de l\u2019anterior instal·laciσ de Gephi +OpenIDE-Module-Short-Description=Importa la configuraciσ de l\u2019anterior instal·laciσ de Gephi +Upgrader.title = Importa la configuraciσ +Upgrader.message = S'ha trobat la configuraciσ d'una versiσ anterior (la {0}) de Gephi. Vols importar aquesta configuraciσ? +Upgrader.restart.title = Reinicia +Upgrader.restart.message = S'ha importat la configuraciσ amb θxit. Vols reiniciar ara el Gephi? diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_cs.properties b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_cs.properties index b3071c7b5c..93f1c1424c 100644 --- a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_cs.properties +++ b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_cs.properties @@ -1,19 +1,6 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz <zbynek.schwarz@gmail.com>, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 18\:38+0000\nLast-Translator\: Zbyn\u011bk Schwarz <zbynek.schwarz@gmail.com>\nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=Importovat nastaven\u00ed z p\u0159edchoz\u00ed instalace Gephi - -OpenIDE-Module-Short-Description=Importovat nastaven\u00ed z p\u0159edchoz\u00ed instalace Gephi - -Upgrader.title=Importovat nastaven\u00ed - -Upgrader.message=Byla nalezena nastaven\u00ed vytvo\u0159en\u00e1 v p\u0159edchoz\u00ed verzi Gephi ({0}). Chcete je importovat? - -Upgrader.restart.title=Restartovat - -Upgrader.restart.message=Nastaven\u00ed byla \u00fasp\u011b\u0161n\u011b importov\u00e1na. Chcete nyn\u00ed Gephi restartovat? +OpenIDE-Module-Long-Description=Importovat nastavenν z p\u0159edchozν instalace Gephi +OpenIDE-Module-Short-Description=Importovat nastavenν z p\u0159edchozν instalace Gephi +Upgrader.title = Importovat nastavenν +Upgrader.message = Byla nalezena nastavenν vytvo\u0159enα v p\u0159edchozν verzi Gephi ({0}). Chcete je importovat? +Upgrader.restart.title = Restartovat +Upgrader.restart.message = Nastavenν byla ϊsp\u011b\u0161n\u011b importovαna. Chcete nynν Gephi restartovat? diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_de.properties b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_de.properties new file mode 100644 index 0000000000..a1b0f40d63 --- /dev/null +++ b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_de.properties @@ -0,0 +1,6 @@ +OpenIDE-Module-Long-Description=Importiere Einstellungen von vorheriger Gephi Installation +OpenIDE-Module-Short-Description=Importiere Einstellungen von vorheriger Gephi Installation +Upgrader.title = Import-Einstellungen +Upgrader.message = Einstellungen von einer frόheren Version von Gephi ({0}) wurden auf dem System gefunden. Mφchten Sie diese importieren? +Upgrader.restart.title = Neu starten +Upgrader.restart.message = Einstellungen wurden erfolgreich importiert. Mφchten Sie Gephi jetzt neu starten? diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_es.properties b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_es.properties index 5a451f7fcc..56b1fc7d20 100644 --- a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_es.properties +++ b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_es.properties @@ -1,19 +1,6 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos <eduramiba@gmail.com>, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-16 23\:19+0000\nLast-Translator\: Eduardo Ramos <eduramiba@gmail.com>\nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Importar preferencias de instalaci\u00f3n anterior de Gephi - -OpenIDE-Module-Short-Description=Importar preferencias de instalaci\u00f3n anterior de Gephi - +OpenIDE-Module-Long-Description=Importar preferencias de instalaciσn anterior de Gephi +OpenIDE-Module-Short-Description=Importar preferencias de instalaciσn anterior de Gephi Upgrader.title=Importar preferencias - -Upgrader.message=Se econtraron preferencias creadas por una versi\u00f3n anterior de Gephi ({0}) en tu sistema. \u00bfDeseas importarlas? - +Upgrader.message=Se encontraron preferencias creadas por una versi\u00F3n anterior de Gephi ({0}) en el sistema. \u00BFQuiere importarlas? Upgrader.restart.title=Reiniciar - -Upgrader.restart.message=Las preferencias fueron importadas con \u00e9xito. \u00bfDeseas reiniciar Gephi ahora? +Upgrader.restart.message=Las preferencias se importaron correctamente. \u00BFQuiere reiniciar Gephi ahora? diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_fr.properties b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_fr.properties index 655306e622..e6c604ab9c 100644 --- a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_fr.properties +++ b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_fr.properties @@ -1,19 +1,6 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# <sebastien.heymann@gmail.com>, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-08 14\:47+0000\nLast-Translator\: gephi <sebastien.heymann@gmail.com>\nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Utiliser les param\u00e8tres de la pr\u00e9c\u00e9dente installation de Gephi. - -OpenIDE-Module-Short-Description=Utiliser les param\u00e8tres de la pr\u00e9c\u00e9dente installation de Gephi. - -Upgrader.title=Import des param\u00e8tres - -Upgrader.message=Des param\u00e8tres cr\u00e9\u00e9s par une pr\u00e9c\u00e9dente version de Gephi ({0}) ont \u00e9t\u00e9 trouv\u00e9s. Voulez-vous les utiliser ? - -Upgrader.restart.title=Red\u00e9marrer - -Upgrader.restart.message=Les param\u00e8tres ont bien \u00e9t\u00e9 import\u00e9s. Voulez-vous red\u00e9marrer Gephi maintenant ? +OpenIDE-Module-Long-Description=Utiliser les paramθtres de la prιcιdente installation de Gephi. +OpenIDE-Module-Short-Description=Utiliser les paramθtres de la prιcιdente installation de Gephi. +Upgrader.title = Import des paramθtres +Upgrader.message = Des paramθtres crιιs par une prιcιdente version de Gephi ({0}) ont ιtι trouvιs. Voulez-vous les utiliser ? +Upgrader.restart.title = Redιmarrer +Upgrader.restart.message = Les paramθtres ont bien ιtι importιs. Voulez-vous redιmarrer Gephi maintenant ? diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_he.properties b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_he.properties new file mode 100644 index 0000000000..f3d6b74418 --- /dev/null +++ b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_he.properties @@ -0,0 +1,6 @@ +OpenIDE-Module-Long-Description=Import settings from previous Gephi installation +OpenIDE-Module-Short-Description=Import settings from previous Gephi installation +Upgrader.title=Import settings +Upgrader.message=Settings created by a previous version of Gephi ({0}) were found on your system. Do you want to import them? +Upgrader.restart.title=Restart +Upgrader.restart.message=Settings were successfully imported. Do you want to restart Gephi now? diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_hu.properties b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_hu.properties new file mode 100644 index 0000000000..e64ea353aa --- /dev/null +++ b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_hu.properties @@ -0,0 +1,8 @@ + + +Upgrader.message=A Gephi ({0}) kor\u00E1bbi verzi\u00F3ja \u00E1ltal l\u00E9trehozott be\u00E1ll\u00EDt\u00E1sok megtal\u00E1lhat\u00F3k a rendszeren. Szeretn\u00E9 import\u00E1lni \u0151ket? +Upgrader.restart.message=A be\u00E1ll\u00EDt\u00E1sok import\u00E1l\u00E1sa sikeres volt. Szeretn\u00E9 most \u00FAjraind\u00EDtani a Gephit? +OpenIDE-Module-Short-Description=Import\u00E1lja a be\u00E1ll\u00EDt\u00E1sokat a Gephi kor\u00E1bbi telep\u00EDt\u00E9s\u00E9b\u0151l +OpenIDE-Module-Long-Description=Import\u00E1lja a be\u00E1ll\u00EDt\u00E1sokat a Gephi kor\u00E1bbi telep\u00EDt\u00E9s\u00E9b\u0151l +Upgrader.restart.title=\u00DAjrakezd +Upgrader.title=Be\u00E1ll\u00EDt\u00E1sok import\u00E1l\u00E1sa diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_it.properties b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_it.properties new file mode 100644 index 0000000000..f3d6b74418 --- /dev/null +++ b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_it.properties @@ -0,0 +1,6 @@ +OpenIDE-Module-Long-Description=Import settings from previous Gephi installation +OpenIDE-Module-Short-Description=Import settings from previous Gephi installation +Upgrader.title=Import settings +Upgrader.message=Settings created by a previous version of Gephi ({0}) were found on your system. Do you want to import them? +Upgrader.restart.title=Restart +Upgrader.restart.message=Settings were successfully imported. Do you want to restart Gephi now? diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_ja.properties b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_ja.properties index 1bd52ceb7d..24a3aa5de8 100644 --- a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_ja.properties +++ b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_ja.properties @@ -1,19 +1,6 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida <kida.siro@gmail.com>, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-15 02\:12+0000\nLast-Translator\: Siro Kida <kida.siro@gmail.com>\nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u524d\u56de\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u8a2d\u5b9a\u3092\u30a4\u30f3\u30dd\u30fc\u30c8 - -OpenIDE-Module-Short-Description=\u524d\u56de\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u8a2d\u5b9a\u3092\u30a4\u30f3\u30dd\u30fc\u30c8 - -Upgrader.title=\u8a2d\u5b9a\u306e\u30a4\u30f3\u30dd\u30fc\u30c8 - -Upgrader.message=Gephi ({0}) \u306e\u524d\u306e\u7248\u306b\u3088\u3063\u3066\u4f5c\u3089\u308c\u305f\u8a2d\u5b9a\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f\u3002\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u307e\u3059\u304b\uff1f - -Upgrader.restart.title=\u518d\u8d77\u52d5 - -Upgrader.restart.message=\u8a2d\u5b9a\u306e\u30a4\u30f3\u30dd\u30fc\u30c8\u306b\u6210\u529f\u3057\u307e\u3057\u305f\u3002Gephi\u3092\u3059\u3050\u306b\u518d\u8d77\u52d5\u3057\u307e\u3059\u304b\uff1f +OpenIDE-Module-Long-Description=\u524d\u56de\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u8a2d\u5b9a\u3092\u30a4\u30f3\u30dd\u30fc\u30c8 +OpenIDE-Module-Short-Description=\u524d\u56de\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u306e\u8a2d\u5b9a\u3092\u30a4\u30f3\u30dd\u30fc\u30c8 +Upgrader.title = \u8a2d\u5b9a\u306e\u30a4\u30f3\u30dd\u30fc\u30c8 +Upgrader.message = Gephi ({0}) \u306e\u524d\u306e\u7248\u306b\u3088\u3063\u3066\u4f5c\u3089\u308c\u305f\u8a2d\u5b9a\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f\u3002\u30a4\u30f3\u30dd\u30fc\u30c8\u3057\u307e\u3059\u304b\uff1f +Upgrader.restart.title = \u518d\u8d77\u52d5 +Upgrader.restart.message = \u8a2d\u5b9a\u306e\u30a4\u30f3\u30dd\u30fc\u30c8\u306b\u6210\u529f\u3057\u307e\u3057\u305f\u3002Gephi\u3092\u3059\u3050\u306b\u518d\u8d77\u52d5\u3057\u307e\u3059\u304b\uff1f diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_ko.properties b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_ko.properties new file mode 100644 index 0000000000..d609a7dbc5 --- /dev/null +++ b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_ko.properties @@ -0,0 +1,8 @@ + + +Upgrader.restart.message=\uC124\uC815\uAC12\uC744 \uC131\uACF5\uC801\uC73C\uB85C \uAC00\uC838\uC654\uC2B5\uB2C8\uB2E4. Gephi\uB97C \uC9C0\uAE08 \uC7AC\uC2DC\uC791\uD560\uAE4C\uC694? +OpenIDE-Module-Long-Description=\uC774\uC804 Gephi \uC124\uCE58\uB85C\uBD80\uD130 \uC124\uC815\uAC12 \uAC00\uC838\uC624\uAE30 +Upgrader.message=Gephi\uC758 \uC774\uC804 \uBC84\uC804 ({0})\uC5D0\uC11C \uC0DD\uC131\uB41C \uC124\uC815\uAC12\uC774 \uC788\uC2B5\uB2C8\uB2E4. \uADF8 \uAC83\uC73C\uB85C \uAC00\uC838\uC62C\uAE4C\uC694? +Upgrader.restart.title=\uC7AC\uC2DC\uC791 \uD558\uAE30 +OpenIDE-Module-Short-Description=\uC774\uC804 Gephi \uC124\uCE58\uB85C\uBD80\uD130 \uC124\uC815\uAC12 \uAC00\uC838\uC624\uAE30 +Upgrader.title=\uC124\uC815\uAC12 \uAC00\uC838\uC624\uAE30 diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_nl.properties b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_nl.properties new file mode 100644 index 0000000000..700338380a --- /dev/null +++ b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_nl.properties @@ -0,0 +1,6 @@ +OpenIDE-Module-Long-Description=Import settings from previous Gephi installation +OpenIDE-Module-Short-Description=Import settings from previous Gephi installation +Upgrader.title=Import settings +Upgrader.message=Settings created by a previous version of Gephi ({0}) were found on your system. Do you want to import them? +Upgrader.restart.title=Opnieuw opstarten +Upgrader.restart.message=Settings were successfully imported. Do you want to restart Gephi now? diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_pt_BR.properties b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_pt_BR.properties index 5be4b35059..43e780e993 100644 --- a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_pt_BR.properties +++ b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_pt_BR.properties @@ -1,19 +1,6 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio Faria Jr. <celiofariajr@gmail.com>, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-17 13\:12+0000\nLast-Translator\: C\u00e9lio Faria Jr. <celiofariajr@gmail.com>\nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Importar configura\u00e7\u00f5es de uma instala\u00e7\u00e3o anterior do Gephi - -OpenIDE-Module-Short-Description=Importar configura\u00e7\u00f5es de uma instala\u00e7\u00e3o anterior do Gephi - -Upgrader.title=Importar configura\u00e7\u00f5es - -Upgrader.message=Foram encontradas configura\u00e7\u00f5es criadas por uma vers\u00e3o anterior ({0}) do Gephi. Deseja import\u00e1-las? - -Upgrader.restart.title=Reiniciar - -Upgrader.restart.message=As configura\u00e7\u00f5es foram importadas com sucesso. Deseja reiniciar o Gephi agora? +OpenIDE-Module-Long-Description=Importar configuraηυes de uma instalaηγo anterior do Gephi +OpenIDE-Module-Short-Description=Importar configuraηυes de uma instalaηγo anterior do Gephi +Upgrader.title = Importar configuraηυes +Upgrader.message = Foram encontradas configuraηυes criadas por uma versγo anterior ({0}) do Gephi. Deseja importα-las? +Upgrader.restart.title = Reiniciar +Upgrader.restart.message = As configuraηυes foram importadas com sucesso. Deseja reiniciar o Gephi agora? diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_ro.properties b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_ro.properties new file mode 100644 index 0000000000..2a3d434ea9 --- /dev/null +++ b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_ro.properties @@ -0,0 +1,8 @@ + + +OpenIDE-Module-Long-Description=Import\u0103 set\u0103rile din instalarea anterioar\u0103 Gephi +OpenIDE-Module-Short-Description=Import\u0103 set\u0103rile din instalarea anterioar\u0103 Gephi +Upgrader.title=Import\u0103 set\u0103ri +Upgrader.message=Au fost g\u0103site set\u0103ri create de o versiune anterioar\u0103 Gephi. Vrei s\u0103 le impor\u021Bi? +Upgrader.restart.title=Reporne\u0219te +Upgrader.restart.message=Set\u0103rile au fost importate cu succes. Vrei s\u0103 reporne\u0219ti Gephi acum? diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_ru.properties b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_ru.properties index f56a666bbf..09dceb0627 100644 --- a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_ru.properties +++ b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_ru.properties @@ -1,19 +1,6 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# <altsoph@gmail.com>, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-14 06\:21+0000\nLast-Translator\: Altsoph <altsoph@gmail.com>\nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0437 \u0440\u0430\u043d\u0435\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 Gephi - -OpenIDE-Module-Short-Description=\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0437 \u0440\u0430\u043d\u0435\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 Gephi - -Upgrader.title=\u0418\u043c\u043f\u043e\u0440\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a - -Upgrader.message=\u0411\u044b\u043b\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 Gephi ({0}). \u0425\u043e\u0442\u0438\u0442\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445? - -Upgrader.restart.title=\u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a - -Upgrader.restart.message=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0431\u044b\u043b\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b. \u0425\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Gephi \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441? +OpenIDE-Module-Long-Description=\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0437 \u0440\u0430\u043d\u0435\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 Gephi +OpenIDE-Module-Short-Description=\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0438\u0437 \u0440\u0430\u043d\u0435\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u043e\u0439 Gephi +Upgrader.title = \u0418\u043c\u043f\u043e\u0440\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a +Upgrader.message = \u0411\u044b\u043b\u0438 \u043e\u0431\u043d\u0430\u0440\u0443\u0436\u0435\u043d\u044b \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439 Gephi ({0}). \u0425\u043e\u0442\u0438\u0442\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0438\u0445? +Upgrader.restart.title = \u041f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u043a +Upgrader.restart.message = \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0431\u044b\u043b\u0438 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0438\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u044b. \u0425\u043e\u0442\u0438\u0442\u0435 \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c Gephi \u043f\u0440\u044f\u043c\u043e \u0441\u0435\u0439\u0447\u0430\u0441? diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_th.properties b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_tr.properties b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_tr.properties new file mode 100644 index 0000000000..f3d6b74418 --- /dev/null +++ b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_tr.properties @@ -0,0 +1,6 @@ +OpenIDE-Module-Long-Description=Import settings from previous Gephi installation +OpenIDE-Module-Short-Description=Import settings from previous Gephi installation +Upgrader.title=Import settings +Upgrader.message=Settings created by a previous version of Gephi ({0}) were found on your system. Do you want to import them? +Upgrader.restart.title=Restart +Upgrader.restart.message=Settings were successfully imported. Do you want to restart Gephi now? diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_uk.properties b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_uk.properties new file mode 100644 index 0000000000..1acf9e1cb6 --- /dev/null +++ b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_uk.properties @@ -0,0 +1,6 @@ +OpenIDE-Module-Short-Description=\u0406\u043C\u043F\u043E\u0440\u0442\u0443\u0439\u0442\u0435 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u0437 \u043F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u044C\u043E\u0457 \u0456\u043D\u0441\u0442\u0430\u043B\u044F\u0446\u0456\u0457 Gephi +Upgrader.message=\u0423 \u0432\u0430\u0448\u0456\u0439 \u0441\u0438\u0441\u0442\u0435\u043C\u0456 \u0437\u043D\u0430\u0439\u0434\u0435\u043D\u043E \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F, \u0441\u0442\u0432\u043E\u0440\u0435\u043D\u0456 \u043F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u044C\u043E\u044E \u0432\u0435\u0440\u0441\u0456\u0454\u044E Gephi ({0}). \u0412\u0438 \u0445\u043E\u0447\u0435\u0442\u0435 \u0457\u0445 \u0456\u043C\u043F\u043E\u0440\u0442\u0443\u0432\u0430\u0442\u0438? +OpenIDE-Module-Long-Description=\u0406\u043C\u043F\u043E\u0440\u0442\u0443\u0439\u0442\u0435 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u0437 \u043F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u044C\u043E\u0457 \u0456\u043D\u0441\u0442\u0430\u043B\u044F\u0446\u0456\u0457 Gephi +Upgrader.title=\u0406\u043C\u043F\u043E\u0440\u0442 \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u044C +Upgrader.restart.title=\u041F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u0442\u0456\u0442\u044C +Upgrader.restart.message=\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u043D\u044F \u0443\u0441\u043F\u0456\u0448\u043D\u043E \u0456\u043C\u043F\u043E\u0440\u0442\u043E\u0432\u0430\u043D\u043E. \u0412\u0438 \u0445\u043E\u0447\u0435\u0442\u0435 \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u0442\u0438\u0442\u0438 Gephi \u0437\u0430\u0440\u0430\u0437? diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_zh_CN.properties b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_zh_CN.properties index 8c739dcd54..aab9325038 100644 --- a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_zh_CN.properties +++ b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_zh_CN.properties @@ -1,19 +1,6 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo <zuoxn@psych.ac.cn>, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-15 09\:55+0000\nLast-Translator\: Xi-Nian Zuo <zuoxn@psych.ac.cn>\nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u4ece\u524d\u4e00\u4e2aGephi\u5b89\u88c5\u4e2d\u5bfc\u5165\u8bbe\u5b9a - -OpenIDE-Module-Short-Description=\u4ece\u524d\u4e00\u4e2aGephi\u5b89\u88c5\u4e2d\u5bfc\u5165\u8bbe\u5b9a - -Upgrader.title=\u5bfc\u5165\u8bbe\u5b9a - -Upgrader.message=\u7cfb\u7edf\u53d1\u73b0\u524d\u4e00\u7248\u672cGephi ({0})\u521b\u5efa\u7684\u8bbe\u5b9a. \u5bfc\u5165\u5b83\u4eec? - -Upgrader.restart.title=\u91cd\u542f - -Upgrader.restart.message=\u8bbe\u5b9a\u6210\u529f\u5bfc\u5165. \u91cd\u542fGephi? +OpenIDE-Module-Long-Description=\u4ece\u524d\u4e00\u4e2aGephi\u5b89\u88c5\u4e2d\u5bfc\u5165\u8bbe\u5b9a +OpenIDE-Module-Short-Description=\u4ece\u524d\u4e00\u4e2aGephi\u5b89\u88c5\u4e2d\u5bfc\u5165\u8bbe\u5b9a +Upgrader.title = \u5bfc\u5165\u8bbe\u5b9a +Upgrader.message = \u7cfb\u7edf\u53d1\u73b0\u524d\u4e00\u7248\u672cGephi ({0})\u521b\u5efa\u7684\u8bbe\u5b9a. \u5bfc\u5165\u5b83\u4eec? +Upgrader.restart.title = \u91cd\u542f +Upgrader.restart.message = \u8bbe\u5b9a\u6210\u529f\u5bfc\u5165. \u91cd\u542fGephi? diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_zh_TW.properties b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_zh_TW.properties new file mode 100644 index 0000000000..f3d6b74418 --- /dev/null +++ b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/Bundle_zh_TW.properties @@ -0,0 +1,6 @@ +OpenIDE-Module-Long-Description=Import settings from previous Gephi installation +OpenIDE-Module-Short-Description=Import settings from previous Gephi installation +Upgrader.title=Import settings +Upgrader.message=Settings created by a previous version of Gephi ({0}) were found on your system. Do you want to import them? +Upgrader.restart.title=Restart +Upgrader.restart.message=Settings were successfully imported. Do you want to restart Gephi now? diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/cs.po b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/cs.po deleted file mode 100644 index 0e5943d1f5..0000000000 --- a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/cs.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz <zbynek.schwarz@gmail.com>, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 18:38+0000\n" -"Last-Translator: ZbynΔ›k Schwarz <zbynek.schwarz@gmail.com>\n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Importovat nastavenΓ­ z pΕ™edchozΓ­ instalace Gephi" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Importovat nastavenΓ­ z pΕ™edchozΓ­ instalace Gephi" - -msgid "Upgrader.title" -msgstr "Importovat nastavenΓ­" - -msgid "Upgrader.message" -msgstr "Byla nalezena nastavenΓ­ vytvoΕ™enΓ‘ v pΕ™edchozΓ­ verzi Gephi ({0}). Chcete je importovat?" - -msgid "Upgrader.restart.title" -msgstr "Restartovat" - -msgid "Upgrader.restart.message" -msgstr "NastavenΓ­ byla ΓΊspΔ›Ε‘nΔ› importovΓ‘na. Chcete nynΓ­ Gephi restartovat?" diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/es.po b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/es.po deleted file mode 100644 index cb2219110a..0000000000 --- a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/es.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos <eduramiba@gmail.com>, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-16 23:19+0000\n" -"Last-Translator: Eduardo Ramos <eduramiba@gmail.com>\n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Importar preferencias de instalaciΓ³n anterior de Gephi" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Importar preferencias de instalaciΓ³n anterior de Gephi" - -msgid "Upgrader.title" -msgstr "Importar preferencias" - -msgid "Upgrader.message" -msgstr "Se econtraron preferencias creadas por una versiΓ³n anterior de Gephi ({0}) en tu sistema. ΒΏDeseas importarlas?" - -msgid "Upgrader.restart.title" -msgstr "Reiniciar" - -msgid "Upgrader.restart.message" -msgstr "Las preferencias fueron importadas con Γ©xito. ΒΏDeseas reiniciar Gephi ahora?" diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/fr.po b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/fr.po deleted file mode 100644 index 95aef59e13..0000000000 --- a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/fr.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# <sebastien.heymann@gmail.com>, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-08 14:47+0000\n" -"Last-Translator: gephi <sebastien.heymann@gmail.com>\n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Utiliser les paramΓ¨tres de la prΓ©cΓ©dente installation de Gephi." - -msgid "OpenIDE-Module-Short-Description" -msgstr "Utiliser les paramΓ¨tres de la prΓ©cΓ©dente installation de Gephi." - -msgid "Upgrader.title" -msgstr "Import des paramΓ¨tres" - -msgid "Upgrader.message" -msgstr "Des paramΓ¨tres créés par une prΓ©cΓ©dente version de Gephi ({0}) ont Γ©tΓ© trouvΓ©s. Voulez-vous les utiliser ?" - -msgid "Upgrader.restart.title" -msgstr "RedΓ©marrer" - -msgid "Upgrader.restart.message" -msgstr "Les paramΓ¨tres ont bien Γ©tΓ© importΓ©s. Voulez-vous redΓ©marrer Gephi maintenant ?" diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/gephi.import b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/gephi.import index a7e43532a2..42102429c3 100644 --- a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/gephi.import +++ b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/gephi.import @@ -1,7 +1,11 @@ include config/Preferences/.* exclude config/Preferences/org/netbeans/.* exclude config/Preferences/org/openide/.* +exclude config/Preferences/laf.properties include config/.* exclude config/Toolbars/.* -exclude config/Windows2Local/.* -exclude config/Modules/.* \ No newline at end of file +exclude config/Windows2Local-datalab/.* +exclude config/Windows2Local-overview/.* +exclude config/Windows2Local-preview/.* +exclude config/Modules/.* +include projects/.* \ No newline at end of file diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/ja.po b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/ja.po deleted file mode 100644 index 14646b3a5b..0000000000 --- a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/ja.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida <kida.siro@gmail.com>, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-15 02:12+0000\n" -"Last-Translator: Siro Kida <kida.siro@gmail.com>\n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ε‰ε›žγ‚€γƒ³γ‚ΉγƒˆγƒΌγƒ«γθ¨­εšγ‚’γ‚€γƒ³γƒγƒΌγƒˆ" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ε‰ε›žγ‚€γƒ³γ‚ΉγƒˆγƒΌγƒ«γθ¨­εšγ‚’γ‚€γƒ³γƒγƒΌγƒˆ" - -msgid "Upgrader.title" -msgstr "θ¨­εšγγ‚€γƒ³γƒγƒΌγƒˆ" - -msgid "Upgrader.message" -msgstr "Gephi ({0}) γε‰γη‰ˆγ«γ‚ˆγ£γ¦δ½œγ‚‰γ‚ŒγŸθ¨­εšγŒθ¦‹γ€γ‹γ‚ŠγΎγ—γŸγ€‚γ‚€γƒ³γƒγƒΌγƒˆγ—γΎγ™γ‹οΌŸ" - -msgid "Upgrader.restart.title" -msgstr "再衷動" - -msgid "Upgrader.restart.message" -msgstr "θ¨­εšγγ‚€γƒ³γƒγƒΌγƒˆγ«ζˆεŠŸγ—γΎγ—γŸγ€‚Gephiγ‚’γ™γγ«ε†θ΅·ε‹•γ—γΎγ™γ‹οΌŸ" diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/org-gephi-ui-upgrader.pot b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/org-gephi-ui-upgrader.pot deleted file mode 100644 index 30ffecbbb4..0000000000 --- a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/org-gephi-ui-upgrader.pot +++ /dev/null @@ -1,36 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team <gephi.team@lists.launchpad.net>, 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian <gephi.team@lists.launchpad.net>\n" -"Language-Team: English <https://launchpad.net/~gephi.team>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Import settings from previous Gephi installation" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Import settings from previous Gephi installation" - -msgid "Upgrader.title" -msgstr "Import settings" - -msgid "Upgrader.message" -msgstr "" -"Settings created by a previous version of Gephi ({0}) were found on your " -"system. Do you want to import them?" - -msgid "Upgrader.restart.title" -msgstr "Restart" - -msgid "Upgrader.restart.message" -msgstr "Settings were successfully imported. Do you want to restart Gephi now?" diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/pt_BR.po b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/pt_BR.po deleted file mode 100644 index 501e981997..0000000000 --- a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/pt_BR.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio Faria Jr. <celiofariajr@gmail.com>, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-17 13:12+0000\n" -"Last-Translator: CΓ©lio Faria Jr. <celiofariajr@gmail.com>\n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Importar configuraΓ§Γ΅es de uma instalaΓ§Γ£o anterior do Gephi" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Importar configuraΓ§Γ΅es de uma instalaΓ§Γ£o anterior do Gephi" - -msgid "Upgrader.title" -msgstr "Importar configuraΓ§Γ΅es" - -msgid "Upgrader.message" -msgstr "Foram encontradas configuraΓ§Γ΅es criadas por uma versΓ£o anterior ({0}) do Gephi. Deseja importΓ‘-las?" - -msgid "Upgrader.restart.title" -msgstr "Reiniciar" - -msgid "Upgrader.restart.message" -msgstr "As configuraΓ§Γ΅es foram importadas com sucesso. Deseja reiniciar o Gephi agora?" diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/ru.po b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/ru.po deleted file mode 100644 index 91b529e7d5..0000000000 --- a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/ru.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# <altsoph@gmail.com>, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-14 06:21+0000\n" -"Last-Translator: Altsoph <altsoph@gmail.com>\n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ настройки ΠΈΠ· Ρ€Π°Π½Π΅Π΅ установлСнной Gephi" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ настройки ΠΈΠ· Ρ€Π°Π½Π΅Π΅ установлСнной Gephi" - -msgid "Upgrader.title" -msgstr "Π˜ΠΌΠΏΠΎΡ€Ρ‚ настроСк" - -msgid "Upgrader.message" -msgstr "Π‘Ρ‹Π»ΠΈ ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Ρ‹ настройки, созданныС ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΉ вСрсиСй Gephi ({0}). Π₯ΠΎΡ‚ΠΈΡ‚Π΅ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΡ…?" - -msgid "Upgrader.restart.title" -msgstr "ΠŸΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΠΊ" - -msgid "Upgrader.restart.message" -msgstr "Настройки Π±Ρ‹Π»ΠΈ ΡƒΡΠΏΠ΅ΡˆΠ½ΠΎ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹. Π₯ΠΎΡ‚ΠΈΡ‚Π΅ ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Gephi прямо сСйчас?" diff --git a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/zh_CN.po b/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/zh_CN.po deleted file mode 100644 index c4262d80ce..0000000000 --- a/modules/SettingsUpgrader/src/main/resources/org/gephi/ui/upgrader/zh_CN.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo <zuoxn@psych.ac.cn>, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-15 09:55+0000\n" -"Last-Translator: Xi-Nian Zuo <zuoxn@psych.ac.cn>\n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "δ»Žε‰δΈ€δΈͺGephiε‰θ£…δΈ­ε―Όε…₯θΎεš" - -msgid "OpenIDE-Module-Short-Description" -msgstr "δ»Žε‰δΈ€δΈͺGephiε‰θ£…δΈ­ε―Όε…₯θΎεš" - -msgid "Upgrader.title" -msgstr "ε―Όε…₯θΎεš" - -msgid "Upgrader.message" -msgstr "η³»η»Ÿε‘ηŽ°ε‰δΈ€η‰ˆζœ¬Gephi ({0})εˆ›ε»Ίηš„θΎεš. ε―Όε…₯εƒδ»¬? " - -msgid "Upgrader.restart.title" -msgstr "重启" - -msgid "Upgrader.restart.message" -msgstr "θΎεšζˆεŠŸε―Όε…₯. 重启Gephi?" diff --git a/modules/SpigotPlugin/pom.xml b/modules/SpigotPlugin/pom.xml deleted file mode 100644 index de0c061c2d..0000000000 --- a/modules/SpigotPlugin/pom.xml +++ /dev/null @@ -1,62 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <artifactId>gephi-parent</artifactId> - <groupId>org.gephi</groupId> - <version>0.9-SNAPSHOT</version> - <relativePath>../..</relativePath> - </parent> - - <groupId>org.gephi</groupId> - <artifactId>spigot-plugin</artifactId> - <version>0.9-SNAPSHOT</version> - <packaging>nbm</packaging> - - <name>SpigotPlugin</name> - - <dependencies> - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>io-importer-api</artifactId> - </dependency> - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>core-library-wrapper</artifactId> - </dependency> - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>utils-longtask</artifactId> - </dependency> - <dependency> - <groupId>com.sun.mail</groupId> - <artifactId>javax.mail</artifactId> - <version>1.4.5</version> - </dependency> - <dependency> - <artifactId>org-openide-util</artifactId> - <groupId>org.netbeans.api</groupId> - </dependency> - <dependency> - <artifactId>org-openide-util-lookup</artifactId> - <groupId>org.netbeans.api</groupId> - - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>nbm-maven-plugin</artifactId> - <configuration> - <publicPackages> - <publicPackage>org.gephi.io.spigot.plugin</publicPackage> - <publicPackage>org.gephi.io.spigot.plugin.email</publicPackage> - <publicPackage>org.gephi.io.spigot.plugin.email.spi</publicPackage> - </publicPackages> - </configuration> - </plugin> - </plugins> - </build> -</project> diff --git a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/EmailImporter.java b/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/EmailImporter.java deleted file mode 100644 index 1c05730041..0000000000 --- a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/EmailImporter.java +++ /dev/null @@ -1,577 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du <duyi001@gmail.com> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.io.spigot.plugin; - -import java.io.File; -import java.io.UnsupportedEncodingException; -import java.util.Collection; -import java.util.HashMap; -import java.util.Properties; -import java.util.StringTokenizer; -import javax.mail.Address; -import javax.mail.Folder; -import javax.mail.Message; -import javax.mail.Message.RecipientType; -import javax.mail.MessagingException; -import javax.mail.NoSuchProviderException; -import javax.mail.Session; -import javax.mail.Store; -import javax.mail.internet.InternetAddress; -import javax.mail.internet.MimeMessage; -import javax.swing.JOptionPane; -import org.gephi.io.importer.api.ContainerLoader; -import org.gephi.io.importer.api.ContainerUnloader; -import org.gephi.io.importer.api.EdgeDraft; -import org.gephi.io.importer.api.NodeDraft; -import org.gephi.io.importer.api.NodeDraftGetter; -import org.gephi.io.importer.api.Report; -import org.gephi.io.importer.spi.SpigotImporter; -import org.gephi.io.spigot.plugin.email.EmailDataType; -import org.gephi.io.spigot.plugin.email.Utilities; -import org.gephi.io.spigot.plugin.email.spi.EmailFilesFilter; -import org.gephi.io.spigot.plugin.email.spi.EmailFilter; -import org.gephi.io.spigot.plugin.email.spi.EmailFilterFactory; -import org.gephi.utils.longtask.spi.LongTask; -import org.gephi.utils.progress.Progress; -import org.gephi.utils.progress.ProgressTicket; -import org.openide.util.Exceptions; -import org.openide.util.Lookup; - -/** - * - * @author Yi Du <duyi001@gmail.com> - */ -public class EmailImporter extends EmailDataType implements SpigotImporter, LongTask { - -// public static final String IMPORT_TYPE_EMAIL = "emails"; - private ContainerLoader container; - private Report report; - private boolean cancel = false; - private ProgressTicket progress; - //EmailDataType datatype;//TODO need to add set in the controller - - @Override - public boolean execute(ContainerLoader loader) { - this.container = loader; - this.report = new Report(); - //datatype = this; - - //if(datatype == null){ -// cancel(); -// return false; -// } - Progress.start(progress); - doImport(); - Progress.finish(progress); - return !cancel; - } - - @Override - public ContainerLoader getContainer() { - return container; - } - - @Override - public Report getReport() { - return report; - } - - @Override - public boolean cancel() { - cancel = true; - return true; - } - - @Override - public void setProgressTicket(ProgressTicket progressTicket) { - this.progress = progressTicket; - } - - private void doImport() { - if (isFromLocalFile()) { - importFromLocalFile(getFiles()); - } else { - Progress.setDisplayName(progress, "Connect to email server"); - Store store = connectToMailService(); - if (store != null) { - importEmail(store); - } - } - } - - /** - * connect to the email server - * @return - */ - private Store connectToMailService() { - Properties property = System.getProperties(); - Session session = Session.getInstance(property, null); - Store store = null; - - try { - if (getServerType().equals(EmailDataType.SERVER_TYPE_POP3) && isUseSSL()) { - store = session.getStore("pop3s"); - } else if (getServerType().equals(EmailDataType.SERVER_TYPE_POP3) && !isUseSSL()) { - store = session.getStore("pop3"); - } else if (getServerType().equals(EmailDataType.SERVER_TYPE_IMAP) && !isUseSSL()) { - store = session.getStore("imap"); - } else if (getServerType().equals(EmailDataType.SERVER_TYPE_IMAP) && isUseSSL()) { - store = session.getStore("imaps"); - } else { - return null; - } - store.connect(getServerURL(), getPort(), getUserName(), getUserPsw()); - - return store; - } catch (NoSuchProviderException ex) { - Exceptions.printStackTrace(ex); - return null; - } catch (Exception ex) { - JOptionPane.showMessageDialog(null, "Impossible to connect to the mail server, please" - + " check your configuration", "Connection error", JOptionPane.ERROR_MESSAGE); - ex.printStackTrace(); - cancel = true; - return null; - } - } - - private boolean importEmail(Store store) { - try { - Folder folder = null; - //get the folder of inbox - folder = store.getDefaultFolder(); - if (folder == null) { - return false; - } - //if it's inbox - folder = folder.getFolder("INBOX"); - if (folder == null) { - return false; - } - folder.open(Folder.READ_ONLY); - //get mail list - Message[] msgs = folder.getMessages(); - Progress.switchToDeterminate(progress, msgs.length); - Progress.setDisplayName(progress, "Download " + msgs.length + " emails"); - //show progress bar -// showProgressBar(msgs.length); - int index = 0; - for (Message msg : msgs) { - index++; -// setProgressBar(index); - filterOneEmail(msg); - Progress.progress(progress); - if (cancel) { - break; - } - } - folder.close(false); - store.close(); - } catch (NoSuchProviderException ex) { - Exceptions.printStackTrace(ex); - return false; - } catch (MessagingException ex) { - Exceptions.printStackTrace(ex); - return false; - } - return true; - } - - /** - * deal with one email - * @param msg - */ - private void filterOneEmail(Message msg) { - HashMap<String, String> filters = getFilter(); - EmailFilterFactory factory = Lookup.getDefault().lookup(EmailFilterFactory.class); - - //do the filter operation, if the message isn't filtered; go on to parse it - for (String filter : filters.keySet()) { - EmailFilter emailFilter = factory.createEmailFilter(filter); - if (emailFilter == null) { - report.log("no this kind of email filter:" + filter); - } else { - if (emailFilter.filterEmail(msg, getFilterProperty(filter), report)) { - break; - } else { - return; - } - } - } - - //process after filter - NodeDraft sourceNode = null, targetNode = null; - //construct the source node - InternetAddress fromAddress = null; - try { - Address[] froms = msg.getFrom(); - if (froms == null || froms.length == 0) { - report.log("message " + msg + "don't have from address"); - return; - } - fromAddress = (InternetAddress) froms[0]; - } catch (MessagingException e) { - try { - fromAddress = constructFromAddress(msg); - } catch (MessagingException ex) { - report.log("Can't parse message :" + msg.toString()); - return; - } - } - - //address string - if (fromAddress == null) { - report.log("From address of message " + msg + " is null."); - return; - } - if (fromAddress.getAddress() == null || fromAddress.getAddress().isEmpty()) { - report.log("Can't parse from message " + msg + "."); - return; - } - if (fromAddress.getPersonal() == null || fromAddress.getPersonal().isEmpty()) { - try { - fromAddress.setPersonal(fromAddress.getAddress()); - } catch (UnsupportedEncodingException ex) { - report.log("message " + msg + " cann't be parsed."); - return; - } - } - - //get the codec type - String codecType = null; - String contentType = null; - try { - contentType = msg.getContentType(); - } catch (MessagingException ex) { - report.log("message:" + msg + ",can't get the content type of the email"); - return; - //log - } - StringTokenizer s = new StringTokenizer(contentType, ";"); - while (s.hasMoreTokens()) { - String temp = s.nextToken(); - if (temp.contains("charset")) { - codecType = temp.substring(9, temp.length()); - } - } - if (contentType == null || contentType.isEmpty()) { - contentType = "UTF-8"; - } - if (codecType == null || codecType.isEmpty()) { - codecType = "UTF-8"; - } - - if (!container.nodeExists(fromAddress.getAddress())) { - //whether use one node to display the same display name - boolean exist = false; - if (isUseOneNodeIfSameDisplayName()) { - if (container instanceof ContainerUnloader) { - ContainerUnloader con = (ContainerUnloader) container; - Collection<? extends NodeDraftGetter> allNodes = con.getNodes(); - for (NodeDraftGetter node : allNodes) { - if (node.getLabel() == null || node.getLabel().isEmpty()) { - continue; - } - if (node.getLabel().equals(fromAddress.getPersonal())) { - sourceNode = container.getNode(node.getId()); - exist = true; - break; - } - } - } - } - if (!exist || !isUseOneNodeIfSameDisplayName()) { - sourceNode = container.factory().newNodeDraft(); - sourceNode.setId(Utilities.codecTranslate(codecType, fromAddress.getAddress())); - sourceNode.setLabel(Utilities.codecTranslate(codecType, fromAddress.getPersonal())); - container.addNode(sourceNode); - } - } else { - sourceNode = container.getNode(fromAddress.getAddress()); - } - //construct the target node - Address[] recipietsTo = null; - try { - recipietsTo = msg.getRecipients(RecipientType.TO); - } catch (MessagingException ex) { - report.log("message:" + msg + ",can't get the To adress of the email"); - return;//log - } - if (recipietsTo != null) { - for (Address addr : recipietsTo) { - InternetAddress addrTo = (InternetAddress) addr; - if (!container.nodeExists(addrTo.getAddress())) { - //whether use one node to display the same display name - boolean exist = false; - if (isUseOneNodeIfSameDisplayName()) { - if (container instanceof ContainerUnloader) { - ContainerUnloader con = (ContainerUnloader) container; - Collection<? extends NodeDraftGetter> allNodes = con.getNodes(); - for (NodeDraftGetter node : allNodes) { - if (node.getLabel() == null || node.getLabel().isEmpty()) { - continue; - } - if (node.getLabel().equals(fromAddress.getPersonal())) { - targetNode = container.getNode(node.getId()); - exist = true; - break; - } - } - } - } - if (!exist) { - targetNode = container.factory().newNodeDraft(); - targetNode.setId(Utilities.codecTranslate(codecType, addrTo.getAddress())); - targetNode.setLabel(Utilities.codecTranslate(codecType, addrTo.getPersonal())); - container.addNode(targetNode); - } - } else { - targetNode = container.getNode(addrTo.getAddress()); - } - //add an edge - EdgeDraft edge = container.getEdge(sourceNode, targetNode); - if (edge == null) { - edge = container.factory().newEdgeDraft(); - edge.setSource(sourceNode); - edge.setTarget(targetNode); - edge.setWeight(1f); - container.addEdge(edge); - } else { - edge.setWeight(edge.getWeight() + 1f); - } - } - } - // cc or bcc as weight - if (hasCcAsWeight()) { - //construct the target node of cc - Address[] recipietsCc = null; - try { - recipietsCc = msg.getRecipients(RecipientType.CC); - } catch (MessagingException ex) { - report.log("message:" + msg + ",can't get the Cc of the email"); - return; - //log - } - if (recipietsCc != null) { - for (Address addr : recipietsCc) { - InternetAddress addrCc = (InternetAddress) addr; - if (!container.nodeExists(addrCc.getAddress())) { - //whether use one node to display the same display name - boolean exist = false; - if (isUseOneNodeIfSameDisplayName()) { - if (container instanceof ContainerUnloader) { - ContainerUnloader con = (ContainerUnloader) container; - Collection<? extends NodeDraftGetter> allNodes = con.getNodes(); - for (NodeDraftGetter node : allNodes) { - if (node.getLabel() == null || node.getLabel().isEmpty()) { - continue; - } - if (node.getLabel().equalsIgnoreCase(fromAddress.getPersonal())) { - targetNode = container.getNode(node.getId()); - exist = true; - break; - } - } - } - } - if (!exist || !isUseOneNodeIfSameDisplayName()) { - targetNode = container.factory().newNodeDraft(); - targetNode.setId(Utilities.codecTranslate(codecType, addrCc.getAddress())); - targetNode.setLabel(Utilities.codecTranslate(codecType, addrCc.getPersonal())); - container.addNode(targetNode); - } - - } else { - targetNode = container.getNode(addr.toString()); - } - //if use cc as weight, add an edge between cc - EdgeDraft edge = container.getEdge(sourceNode, targetNode); - if (edge == null) { - edge = container.factory().newEdgeDraft(); - edge.setSource(sourceNode); - edge.setTarget(targetNode); - container.addEdge(edge); - edge.setWeight(1f); - } else { - edge.setWeight(edge.getWeight() + 1f); - } - } - } - } - if (hasBccAsWeight()) { - //construct the target node of bcc - Address[] recipietsBcc = null; - try { - recipietsBcc = msg.getRecipients(RecipientType.BCC); - } catch (MessagingException ex) { - report.log("message:" + msg + ",can't get the Bcc of the email"); - return; - //TODO log - } - if (recipietsBcc != null) { - for (Address addr : recipietsBcc) { - InternetAddress addrBcc = (InternetAddress) addr; - if (!container.nodeExists(addrBcc.getAddress())) { - //whether use one node to display the same display name - boolean exist = false; - if (isUseOneNodeIfSameDisplayName()) { - if (container instanceof ContainerUnloader) { - ContainerUnloader con = (ContainerUnloader) container; - Collection<? extends NodeDraftGetter> allNodes = con.getNodes(); - for (NodeDraftGetter node : allNodes) { - if (node.getLabel() == null || node.getLabel().isEmpty()) { - continue; - } - if (node.getLabel().equals(fromAddress.getPersonal())) { - targetNode = container.getNode(node.getId()); - exist = true; - break; - } - } - } - } - if (!exist || !isUseOneNodeIfSameDisplayName()) { - targetNode = container.factory().newNodeDraft(); - targetNode.setId(Utilities.codecTranslate(codecType, addrBcc.getAddress())); - targetNode.setLabel(Utilities.codecTranslate(codecType, addrBcc.getPersonal())); - container.addNode(targetNode); - } - } else { - targetNode = container.getNode(addr.toString()); - } - //if use cc as weight, add an edge between cc - EdgeDraft edge = container.getEdge(sourceNode, targetNode); - if (edge == null) { - edge = container.factory().newEdgeDraft(); - edge.setSource(sourceNode); - edge.setTarget(targetNode); - container.addEdge(edge); - edge.setWeight(1f); - } else { - edge.setWeight(edge.getWeight() + 1f); - } - } - } - } - } - - /** - * construct a address by message - * @param msg - */ - private InternetAddress constructFromAddress(Message msg) throws MessagingException { - InternetAddress address = new InternetAddress(); - if (msg instanceof MimeMessage) { - String fromHeader = msg.getHeader("From")[0]; - if (fromHeader.contains("<") && fromHeader.contains(">")) { - address.setAddress(fromHeader.substring(fromHeader.lastIndexOf('<') + 1, fromHeader.lastIndexOf('>'))); - } else { - report.log("Can't parse mime message :" + msg.toString()); - return null; - } - } else { - report.log("Can't parse message :" + msg.toString()); - return null; - } - return address; - } - - /** - * import from local files - * @param files - */ - private void importFromLocalFile(File[] files) { - if (files == null) { - return; - } - EmailFilesFilter[] filters = - Lookup.getDefault().lookupAll(EmailFilesFilter.class).toArray(new EmailFilesFilter[0]); - int totalNumOfEmails = getNumOfLocalEmailFile(files); - progress.switchToDeterminate(totalNumOfEmails * filters.length); - for (EmailFilesFilter f : filters) { - if (!getFileFilterType().equals(f.getDisplayName())) { - progress.progress(totalNumOfEmails); - } else { - for (File file : files) { - if (cancel) { - return; - } - if (!file.isDirectory()) { - progress.progress(); - MimeMessage message = f.parseFile(file, report); - if (message == null) { - report.log("file " + file.getName() + "can't be parsed"); - return; - } else { - filterOneEmail(message); - } - } else if (file.isDirectory()) { - importFromLocalFile(file.listFiles()); - } else { - continue; - } - } - } - } - } - - private int getNumOfLocalEmailFile(File[] files) { - int totalNum = 0; - if (files == null) { - return 0; - } - for (File f : files) { - totalNum += getNumOfOneFile(f); - } - return totalNum; - } - - private int getNumOfOneFile(File f) { - int temp = 0; - if (!f.isDirectory()) { - temp = 1; - } else { - temp = temp + getNumOfLocalEmailFile(f.listFiles()); - } - return temp; - } -} diff --git a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/EmailImporterBuilder.java b/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/EmailImporterBuilder.java deleted file mode 100644 index 478d34da41..0000000000 --- a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/EmailImporterBuilder.java +++ /dev/null @@ -1,68 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du <duyi001@gmail.com> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ - -package org.gephi.io.spigot.plugin; - -import org.gephi.io.importer.spi.SpigotImporter; -import org.gephi.io.importer.spi.SpigotImporterBuilder; -import org.openide.util.NbBundle; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Yi Du - */ - -@ServiceProvider(service = SpigotImporterBuilder.class) -public class EmailImporterBuilder implements SpigotImporterBuilder { - - @Override - public SpigotImporter buildImporter() { - return new EmailImporter(); - } - - @Override - public String getName() { - return NbBundle.getMessage(EmailImporterBuilder.class, "EmailImporterBuilder.name"); - } - -} diff --git a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailDataType.java b/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailDataType.java deleted file mode 100644 index a2b334f7c2..0000000000 --- a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailDataType.java +++ /dev/null @@ -1,253 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du <duyi001@gmail.com> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.io.spigot.plugin.email; - -import java.io.File; -import java.util.HashMap; - -/** - * - * @author Yi Du - */ -public class EmailDataType {//implements SocialNetwork{ - public static final String FILTER_EMAIL_ADDRESS_FROM = "email address from"; - public static final String FILTER_EMAIL_ADDRESS_TO = "email address to"; - public static final String FILTER_EMAIL_ADDRESS_CC = "email address cc"; - public static final String FILTER_EMAIL_ADDRESS_BCC = "email address bcc"; - - public static final String FILTER_DATERANGE_AFTER = "date after"; - public static final String FILTER_DATERANGE_BEFORE = "date before"; - public static final String FILTER_ATTACHMENT = "att"; - public static final String FILTER_CC = "cc"; - public static final String FILTER_BCC = "bcc"; - public static final String FILTER_SUBJECT = "subject"; - public static final String FILTER_message = "message"; - - public static final char SPLIT_CHAR = '|'; - public static final String DATEFORMAT = "yyyy-MM-dd"; - - public static final String SERVER_TYPE_POP3 = "POP3";//TODO connect to panel - public static final String SERVER_TYPE_IMAP = "IMAP"; - -// private String name; - private boolean hasFilter; - private boolean hasCcAsWeight; - private boolean hasBccAsWeight; - private boolean useOneNodeIfSameDisplayName; - private boolean isFromLocalFile;//true means from localfile;false means from server - private String fileFilterType;//selected file type of file filter - private HashMap<String, String> filterProperty = new HashMap<String, String>(); - - //options used when from mail server are as below - private String serverType; - private String serverURL; - private String userName; - private String userPsw; - private boolean useSSL; - private int port; - private File[] files;//not null if receive from local file - - public EmailDataType(){ - - } -// public void setName(String name) { -// this.name = name; -// } -// -// public String getName() { -// return name; -// } - - public boolean hasFilter() { - return hasFilter; - } - - public void setFilter(boolean filter) { - this.hasFilter = filter; - } - - public void setFilterProperty(String filter, String property) { - filterProperty.put(filter, property); - } - - public String getFilterProperty(String filter) { - return filterProperty.get(filter); - } - - public String getServerType(){ - return this.serverType; - } - - public void setServerType(String serverType){ - if(serverType == null) - return; - this.serverType = serverType; -// if(serverType.equals(SERVER_TYPE_POP3)) -// this.serverType = SERVER_TYPE_POP3; -// if(serverType.equals(SERVER_TYPE_IMAP)) -// this.serverType = SERVER_TYPE_POP3; - } - - public String getServerURL(){ - return this.serverURL; - } - - public void setServerURL(String serverURL){ - this.serverURL = serverURL; - } - - public String getUserName(){ - return this.userName; - } - - public void setUserName(String userName){ - this.userName = userName; - } - - public String getUserPsw(){ - return this.userPsw; - } - - public void setUserPsw(String userPsw){ - this.userPsw = userPsw; - } - - public boolean hasCcAsWeight(){ - return hasCcAsWeight; - } - - public void setCcAsWeight(boolean hasCcAsWeight){ - this.hasCcAsWeight = hasCcAsWeight; - } - - public boolean hasBccAsWeight(){ - return hasBccAsWeight; - } - - public void setBccAsWeight(boolean hasBccAsWeight){ - this.hasBccAsWeight = hasBccAsWeight; - } - - public HashMap<String, String> getFilter(){ - return this.filterProperty; - } - - public boolean isFromLocalFile(){ - return isFromLocalFile; - } - - public void setFromLocalFile(boolean flag){ - isFromLocalFile = flag; - } - - public boolean isUseSSL() { - return useSSL; - } - - public void setUseSSL(boolean useSSL) { - this.useSSL = useSSL; - } - - public int getPort() { - return port; - } - - public void setPort(int port) { - this.port = port; - } - - public File[] getFiles() { - return files; - } - - public void setFiles(File[] filePath) { - this.files = filePath; - } - - public String getFileFilterType() { - return fileFilterType; - } - - public void setFileFilterType(String fileFilterType) { - this.fileFilterType = fileFilterType; - } - - public boolean isUseOneNodeIfSameDisplayName() { - return useOneNodeIfSameDisplayName; - } - - public void setUseOneNodeIfSameDisplayName(boolean useOneNodeIfSameDisplayName) { - this.useOneNodeIfSameDisplayName = useOneNodeIfSameDisplayName; - } - - /** - * copy options from "from" to "to" - * @param from - * @param to - */ - public static void makeACopy(EmailDataType from, EmailDataType to) { - to.setFromLocalFile(from.isFromLocalFile()); - to.setFilter(from.hasFilter()); - if(from.isFromLocalFile()){ - to.setFileFilterType(from.getFileFilterType()); - //we don't copy files selected from jfiledialog - } - else{ - to.setUserName(from.getUserName()); - to.setUserPsw(from.getUserPsw()); - to.setPort(from.getPort()); - to.setServerType(from.getServerType()); - to.setUseSSL(from.isUseSSL()); - to.setServerURL(from.getServerURL()); - } - if(from.hasFilter()){ - HashMap<String, String> temp = from.getFilter(); - for(String s :temp.keySet()){ - to.setFilterProperty(s, temp.get(s)); - } - } - to.setBccAsWeight(from.hasBccAsWeight()); - to.setCcAsWeight(from.hasCcAsWeight()); - to.setUseOneNodeIfSameDisplayName(from.isUseOneNodeIfSameDisplayName()); - - } -} diff --git a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilesFilterEML.java b/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilesFilterEML.java deleted file mode 100644 index f6a9163aed..0000000000 --- a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilesFilterEML.java +++ /dev/null @@ -1,103 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du <duyi001@gmail.com> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ - -package org.gephi.io.spigot.plugin.email; - -import java.io.File; -import java.io.FileInputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.io.InputStream; -import javax.mail.MessagingException; -import javax.mail.Session; -import javax.mail.internet.MimeMessage; -import org.gephi.io.importer.api.Issue; -import org.gephi.io.importer.api.Report; -import org.gephi.io.spigot.plugin.email.spi.EmailFilesFilter; -import org.openide.util.NbBundle; -import org.openide.util.lookup.ServiceProvider; - - -/** - * This class can parse files to MimeMessage type of java mail api - * @author Yi Du <duyi001@gmail.com> - */ -@ServiceProvider(service=EmailFilesFilter.class) -public class EmailFilesFilterEML implements EmailFilesFilter{ - - @Override - public String getSupportedFileExtension() { - return ".eml"; - } - - @Override - public MimeMessage parseFile(File file, Report report) { - InputStream is = null; - Session s = null; - MimeMessage message = null; - try { - is = new FileInputStream(file); - s = Session.getDefaultInstance(System.getProperties(), null); - message = new MimeMessage(s, is); - } catch (MessagingException ex) { - report.logIssue(new Issue(ex.getMessage(), Issue.Level.WARNING)); - return null; - } catch (FileNotFoundException ex) { - report.logIssue(new Issue(ex.getMessage(), Issue.Level.WARNING)); - return null; - } finally { - try { - is.close(); - } catch (IOException ex) { - report.logIssue(new Issue(ex.getMessage(), Issue.Level.WARNING)); - return null; - } - } - return message; - } - - @Override - public String getDisplayName() { - return NbBundle.getMessage(EmailFilesFilterEML.class, "EmailFilesFilterEML.displayName"); - } - -} diff --git a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterAddressBcc.java b/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterAddressBcc.java deleted file mode 100644 index ab61f8da83..0000000000 --- a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterAddressBcc.java +++ /dev/null @@ -1,104 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du <duyi001@gmail.com> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ - -package org.gephi.io.spigot.plugin.email; - -import java.util.StringTokenizer; -import javax.mail.Address; -import javax.mail.Message; -import javax.mail.MessagingException; -import javax.mail.internet.InternetAddress; -import org.gephi.io.importer.api.Issue; -import org.gephi.io.importer.api.Report; -import org.gephi.io.spigot.plugin.email.spi.EmailFilter; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Yi Du - */ - -@ServiceProvider(service = EmailFilter.class) -public class EmailFilterAddressBcc implements EmailFilter { - - @Override - public boolean filterEmail(Message message, String filter,Report report) { - //filter mail address, contains from, to ,cc ,bcc - StringTokenizer token; - String splitString = Character.toString(EmailDataType.SPLIT_CHAR); - //filter cc email address - Address[] addresses = null; - try { - addresses = message.getRecipients(Message.RecipientType.BCC); - } catch (MessagingException ex) { - report.logIssue(new Issue(ex.getMessage(), Issue.Level.WARNING)); - return true; - } - if(addresses == null){ - report.logIssue(new Issue("Can't get the bcc address of message "+message+",ignore this filter", Issue.Level.INFO)); - return true; - } - if(addresses.length == 0) - return true; - - for (Address addr : addresses) { - InternetAddress currentAddr = (InternetAddress) addr; - token = new StringTokenizer(filter, splitString); - while (token.hasMoreTokens()) { - String temp = token.nextToken(); - if(!temp.isEmpty()&& - currentAddr != null && - currentAddr.getAddress() != null && - currentAddr.getAddress().toLowerCase().matches(temp.trim().toLowerCase())){ - return true; - } - } - } - return false; - } - - @Override - public String getFilterType() { - return EmailDataType.FILTER_EMAIL_ADDRESS_BCC; - } -} - diff --git a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterAddressCc.java b/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterAddressCc.java deleted file mode 100644 index ccdc8e2991..0000000000 --- a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterAddressCc.java +++ /dev/null @@ -1,103 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du <duyi001@gmail.com> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ - -package org.gephi.io.spigot.plugin.email; - -import java.util.StringTokenizer; -import javax.mail.Address; -import javax.mail.Message; -import javax.mail.MessagingException; -import javax.mail.internet.InternetAddress; -import org.gephi.io.importer.api.Issue; -import org.gephi.io.importer.api.Report; -import org.gephi.io.spigot.plugin.email.spi.EmailFilter; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Yi Du - */ - -@ServiceProvider(service = EmailFilter.class) -public class EmailFilterAddressCc implements EmailFilter { - - @Override - public boolean filterEmail(Message message, String filter, Report report) { - //filter mail address, contains from, to ,cc ,bcc - StringTokenizer token; - String splitString = Character.toString(EmailDataType.SPLIT_CHAR); - //filter cc email address - Address[] addresses = null; - try { - addresses = message.getRecipients(Message.RecipientType.CC); - } catch (MessagingException ex) { - report.logIssue(new Issue(ex.getMessage(), Issue.Level.WARNING)); - return true; - } - if(addresses == null){ - report.logIssue(new Issue("Can't get the cc address of message "+message+",ignore this filter", Issue.Level.INFO)); - return true; - } - if(addresses.length == 0) - return true; - - for (Address addr : addresses) { - InternetAddress currentAddr = (InternetAddress) addr; - token = new StringTokenizer(filter, splitString); - while (token.hasMoreTokens()) { - String temp = token.nextToken(); - if(!temp.isEmpty()&& - currentAddr != null && - currentAddr.getAddress() != null && - currentAddr.getAddress().toLowerCase().matches(temp.trim().toLowerCase())){ - return true; - } - } - } - return false; - } - - @Override - public String getFilterType() { - return EmailDataType.FILTER_EMAIL_ADDRESS_CC; - } -} diff --git a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterAddressFrom.java b/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterAddressFrom.java deleted file mode 100644 index cb76c9036b..0000000000 --- a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterAddressFrom.java +++ /dev/null @@ -1,101 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du <duyi001@gmail.com> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ - -package org.gephi.io.spigot.plugin.email; - -import java.util.StringTokenizer; -import javax.mail.Address; -import javax.mail.Message; -import javax.mail.MessagingException; -import javax.mail.internet.InternetAddress; -import org.gephi.io.importer.api.Issue; -import org.gephi.io.importer.api.Report; -import org.gephi.io.spigot.plugin.email.spi.EmailFilter; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Yi Du - */ - -@ServiceProvider(service = EmailFilter.class) -public class EmailFilterAddressFrom implements EmailFilter{ - - @Override - public boolean filterEmail(Message message, String filter,Report report) { - //filter mail address, contains from, to ,cc ,bcc - StringTokenizer token; - String splitString = Character.toString(EmailDataType.SPLIT_CHAR); - //filter from email address - InternetAddress curMsg = null; - try { - Address[] addresses = message.getFrom(); - if(addresses == null){ - report.logIssue(new Issue("Can't get the from address of message "+message+",ignore this filter", Issue.Level.INFO)); - return true; - } - if(addresses.length == 0) - return true; - curMsg = (InternetAddress) message.getFrom()[0]; - } catch (MessagingException ex) { - report.logIssue(new Issue(ex.getMessage(), Issue.Level.WARNING)); - return true; - } - token = new StringTokenizer(filter, splitString); - while (token.hasMoreTokens()) { - String temp = token.nextToken(); - if(!temp.isEmpty()&& - curMsg != null && - curMsg.getAddress() != null && - curMsg.getAddress().toLowerCase().matches(temp.trim().toLowerCase())){ - return true; - } - } - return false; - } - - @Override - public String getFilterType() { - return EmailDataType.FILTER_EMAIL_ADDRESS_FROM; - } - -} diff --git a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterAddressTo.java b/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterAddressTo.java deleted file mode 100644 index 2d07fbaac9..0000000000 --- a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterAddressTo.java +++ /dev/null @@ -1,101 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du <duyi001@gmail.com> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.io.spigot.plugin.email; - -import java.util.StringTokenizer; -import javax.mail.Address; -import javax.mail.Message; -import javax.mail.MessagingException; -import javax.mail.internet.InternetAddress; -import org.gephi.io.importer.api.Issue; -import org.gephi.io.importer.api.Report; -import org.gephi.io.spigot.plugin.email.spi.EmailFilter; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Yi Du - */ - -@ServiceProvider(service = EmailFilter.class) -public class EmailFilterAddressTo implements EmailFilter { - - @Override - public boolean filterEmail(Message message, String filter, Report report) { - //filter mail address, contains from, to ,cc ,bcc - StringTokenizer token; - String splitString = Character.toString(EmailDataType.SPLIT_CHAR); - //filter to email address - Address[] addresses = null; - try { - addresses = message.getRecipients(Message.RecipientType.TO); - } catch (MessagingException ex) { - report.logIssue(new Issue(ex.getMessage(), Issue.Level.WARNING)); - return true; - } - if(addresses == null){ - report.logIssue(new Issue("Can't get the bcc address of message "+message+",ignore this filter", Issue.Level.INFO)); - return true; - } - if(addresses.length == 0) - return true; - for (Address addr : addresses) { - InternetAddress currentAddr = (InternetAddress) addr; - token = new StringTokenizer(filter, splitString); - while (token.hasMoreTokens()) { - String temp = token.nextToken(); - if(!temp.isEmpty()&& - currentAddr != null && - currentAddr.getAddress() != null && - currentAddr.getAddress().toLowerCase().matches(temp.trim().toLowerCase())){ - return true; - } - } - } - return false; - } - - @Override - public String getFilterType() { - return EmailDataType.FILTER_EMAIL_ADDRESS_TO; - } -} diff --git a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterDateAfter.java b/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterDateAfter.java deleted file mode 100644 index d5dd2360ff..0000000000 --- a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterDateAfter.java +++ /dev/null @@ -1,95 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du <duyi001@gmail.com> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ - -package org.gephi.io.spigot.plugin.email; - -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; -import javax.mail.Message; -import javax.mail.MessagingException; -import org.gephi.io.importer.api.Issue; -import org.gephi.io.importer.api.Report; -import org.gephi.io.spigot.plugin.email.spi.EmailFilter; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Yi Du - */ -@ServiceProvider(service = EmailFilter.class) -public class EmailFilterDateAfter implements EmailFilter{ - - @Override - public boolean filterEmail(Message message, String filter, Report report) { - Date receivedDate = null; - try { - receivedDate = message.getReceivedDate(); - } catch (MessagingException ex) { - report.logIssue(new Issue(ex.getMessage(), Issue.Level.WARNING)); - return true; - } - if(receivedDate == null){ - report.logIssue(new Issue("Can't get the receive date of message "+message+",ignore this filter", Issue.Level.INFO)); - return true; - } - SimpleDateFormat format = new SimpleDateFormat(EmailDataType.DATEFORMAT); - - Date dateFilter = null; - try { - dateFilter = format.parse(filter); - } catch (ParseException ex) { - report.logIssue(new Issue(ex.getMessage(), Issue.Level.WARNING)); - return true; - } - if(receivedDate.after(dateFilter)) - return true; - else - return false; - } - - @Override - public String getFilterType() { - return EmailDataType.FILTER_DATERANGE_AFTER; - } - -} diff --git a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterDateBefore.java b/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterDateBefore.java deleted file mode 100644 index 8e5419d117..0000000000 --- a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterDateBefore.java +++ /dev/null @@ -1,95 +0,0 @@ - /* -Copyright 2008-2010 Gephi -Authors : Yi Du <duyi001@gmail.com> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.io.spigot.plugin.email; - -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Date; -import javax.mail.Message; -import javax.mail.MessagingException; -import org.gephi.io.importer.api.Issue; -import org.gephi.io.importer.api.Report; -import org.gephi.io.spigot.plugin.email.spi.EmailFilter; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Yi Du - */ -@ServiceProvider(service = EmailFilter.class) -public class EmailFilterDateBefore implements EmailFilter{ - - @Override - public boolean filterEmail(Message message, String filter, Report report) { - Date receivedDate = null; - try { - receivedDate = message.getReceivedDate(); - } catch (MessagingException ex) { - report.logIssue(new Issue(ex.getMessage(), Issue.Level.WARNING)); - return true; - } - if(receivedDate == null){ - report.logIssue(new Issue("Can't get the receive date of message "+message+",ignore this filter", Issue.Level.INFO)); - return true; - } - - SimpleDateFormat format = new SimpleDateFormat(EmailDataType.DATEFORMAT); - - Date dateFilter = null; - try { - dateFilter = format.parse(filter); - } catch (ParseException ex) { - report.logIssue(new Issue(ex.getMessage(), Issue.Level.WARNING)); - return true; - } - if(receivedDate.before(dateFilter)) - return true; - else - return false; - } - - @Override - public String getFilterType() { - return EmailDataType.FILTER_DATERANGE_BEFORE; - } - -} diff --git a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterFactoryImpl.java b/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterFactoryImpl.java deleted file mode 100644 index cabbd2d3d1..0000000000 --- a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterFactoryImpl.java +++ /dev/null @@ -1,68 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du <duyi001@gmail.com> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ - -package org.gephi.io.spigot.plugin.email; - -import org.gephi.io.spigot.plugin.email.spi.EmailFilter; -import org.gephi.io.spigot.plugin.email.spi.EmailFilterFactory; -import org.openide.util.Lookup; -import org.openide.util.lookup.ServiceProvider; - - -/** - * - * @author Yi Du - */ -@ServiceProvider(service = EmailFilterFactory.class) -public class EmailFilterFactoryImpl implements EmailFilterFactory{ - - @Override - public EmailFilter createEmailFilter(String filterType) { - EmailFilter[] filters = Lookup.getDefault().lookupAll(EmailFilter.class).toArray(new EmailFilter[0]); - for(EmailFilter filter : filters){ - if(filter.getFilterType().equals(filterType)) - return filter; - } - return null; - } - -} diff --git a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterHasAttachment.java b/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterHasAttachment.java deleted file mode 100644 index bbf4407e60..0000000000 --- a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterHasAttachment.java +++ /dev/null @@ -1,124 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du <duyi001@gmail.com> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.io.spigot.plugin.email; - -import javax.mail.BodyPart; -import javax.mail.Message; -import javax.mail.Multipart; -import javax.mail.Part; -import org.gephi.io.importer.api.Issue; -import org.gephi.io.importer.api.Report; -import org.gephi.io.spigot.plugin.email.spi.EmailFilter; -import org.openide.util.lookup.ServiceProvider; - -/** - * This class filter email for whether an attachment has - * @author Yi Du - */ -@ServiceProvider(service = EmailFilter.class) -public class EmailFilterHasAttachment implements EmailFilter{ - - @Override - public boolean filterEmail(Message message, String filter, Report report) { - try { - //condition is message contains an atachment - if (Boolean.parseBoolean(filter)) { - if (isContainAttach(message)) { - return true; - } else { - return false; - } - } - //condition is message doesn't contain an atachment - else { - if (isContainAttach(message)) { - return false; - } else { - return true; - } - } - } catch (Exception e) { - report.logIssue(new Issue(e.getMessage(), Issue.Level.WARNING)); - return true; - } - } - - - /** - * @param part - * @return true if contains attachment - * @throws Exception - */ - private boolean isContainAttach(Part part) throws Exception { - boolean attachflag = false; -// String contentType = part.getContentType(); - if (part.isMimeType("multipart/*")) { - Multipart mp = (Multipart) part.getContent(); - for (int i = 0; i < mp.getCount(); i++) { - BodyPart mpart = mp.getBodyPart(i); - String disposition = mpart.getDisposition(); - if ((disposition != null) - && ((disposition.equals(Part.ATTACHMENT)) || (disposition.equals(Part.INLINE)))) { - attachflag = true; - } else if (mpart.isMimeType("multipart/*")) { - attachflag = isContainAttach((Part) mpart); - } else { - String contype = mpart.getContentType(); - if (contype.toLowerCase().indexOf("application") != -1) { - attachflag = true; - } - if (contype.toLowerCase().indexOf("name") != -1) { - attachflag = true; - } - } - } - } else if (part.isMimeType("message/rfc822")) {//TODO codec! - attachflag = isContainAttach((Part) part.getContent()); - } - return attachflag; - } - - @Override - public String getFilterType() { - return EmailDataType.FILTER_ATTACHMENT; - } -} diff --git a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterHasBcc.java b/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterHasBcc.java deleted file mode 100644 index 697f3a22f6..0000000000 --- a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterHasBcc.java +++ /dev/null @@ -1,90 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du <duyi001@gmail.com> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ - -package org.gephi.io.spigot.plugin.email; - -import javax.mail.Address; -import javax.mail.Message; -import javax.mail.MessagingException; -import org.gephi.io.importer.api.Issue; -import org.gephi.io.importer.api.Report; -import org.gephi.io.spigot.plugin.email.spi.EmailFilter; -import org.openide.util.lookup.ServiceProvider; - -/** - * whether an email have bcc - * @author Yi Du - */ -@ServiceProvider(service = EmailFilter.class) -public class EmailFilterHasBcc implements EmailFilter { - - @Override - public boolean filterEmail(Message message, String filter, Report report) { - Address[] address = null; - try { - address = message.getRecipients(Message.RecipientType.BCC); - } catch (MessagingException ex) { - report.logIssue(new Issue(ex.getMessage(), Issue.Level.WARNING)); - return true; - } - if (Boolean.parseBoolean(filter)) { - //condition is the message has cc - if (address == null ||address.length == 0) { - return false; - } else { - return true; - } - } else { - //condition is the message doesn't have cc - if (address == null ||address.length == 0) { - return true; - } else { - return false; - } - } - } - - @Override - public String getFilterType() { - return EmailDataType.FILTER_BCC; - } -} diff --git a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterHasCc.java b/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterHasCc.java deleted file mode 100644 index 9422cf7291..0000000000 --- a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterHasCc.java +++ /dev/null @@ -1,89 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du <duyi001@gmail.com> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.io.spigot.plugin.email; - -import javax.mail.Address; -import javax.mail.Message; -import javax.mail.MessagingException; -import org.gephi.io.importer.api.Issue; -import org.gephi.io.importer.api.Report; -import org.gephi.io.spigot.plugin.email.spi.EmailFilter; -import org.openide.util.lookup.ServiceProvider; - -/** - * whether an email have Cc - * @author Yi Du - */ -@ServiceProvider(service = EmailFilter.class) -public class EmailFilterHasCc implements EmailFilter { - - @Override - public boolean filterEmail(Message message, String filter, Report report) { - Address[] address = null; - try { - address = message.getRecipients(Message.RecipientType.CC); - } catch (MessagingException ex) { - report.logIssue(new Issue(ex.getMessage(), Issue.Level.WARNING)); - return true; - } - if (Boolean.parseBoolean(filter)) { - //condition is the message has cc - if (address == null ||address.length == 0) { - return false; - } else { - return true; - } - } else { - //condition is the message doesn't have cc - if (address == null ||address.length == 0) { - return true; - } else { - return false; - } - } - } - - @Override - public String getFilterType() { - return EmailDataType.FILTER_CC; - } -} diff --git a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterMessageInclude.java b/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterMessageInclude.java deleted file mode 100644 index 2bc49201f3..0000000000 --- a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterMessageInclude.java +++ /dev/null @@ -1,140 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du <duyi001@gmail.com> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.io.spigot.plugin.email; - -import java.io.IOException; -import java.io.InputStream; -import javax.mail.Message; -import javax.mail.MessagingException; -import javax.mail.Multipart; -import javax.mail.Part; -import org.gephi.io.importer.api.Issue; -import org.gephi.io.importer.api.Report; -import org.gephi.io.spigot.plugin.email.spi.EmailFilter; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Yi Du - */ -@ServiceProvider(service = EmailFilter.class) -public class EmailFilterMessageInclude implements EmailFilter { - - @Override - public boolean filterEmail(Message message, String filter, Report report) { - try { - if (getMailContent(message).contains(filter)) { - return true; - } else { - return false; - } - } catch (MessagingException ex) { - report.logIssue(new Issue("message include("+message+"):"+ex.getMessage(), Issue.Level.WARNING)); - return true; - } catch (IOException ex) { - report.logIssue(new Issue("message include("+message+"):"+ex.getMessage(), Issue.Level.WARNING)); - return true; - } catch(Exception ex){ - report.logIssue(new Issue("message include("+message+"):"+ex.getMessage(), Issue.Level.WARNING)); - return true; - } - } - - /** - * - * @param part - * @return - * @throws MessagingException - * @throws IOException - */ - public String getMailContent(Part part) throws MessagingException, IOException,Exception { - StringBuffer bodytext = new StringBuffer(); - - String contenttype = part.getContentType(); - int nameindex = contenttype.indexOf("name"); - boolean conname = false; - if (nameindex != -1) { - conname = true; - } -// System.err.println("CONTENTTYPE: " + contenttype); - if (part.isMimeType("text/plain") && !conname) { - bodytext.append((String) part.getContent()); -// System.err.println("CONTENT PLAIN:"+bodytext); - } else if (part.isMimeType("text/html") && !conname) { - bodytext.append((String) part.getContent()); -// System.err.println("CONTENT html:"+bodytext); - } else if (part.isMimeType("multipart/*")) { - Multipart multipart = (Multipart) part.getContent(); - int counts = multipart.getCount(); - for (int i = 0; i < counts; i++) { - bodytext.append(getMailContent(multipart.getBodyPart(i))); - } -// System.err.println("CONTENT multi:"+bodytext); - } else if (part.isMimeType("message/rfc822")) {//TODO codec ? - bodytext.append(getMailContent((Part) part.getContent())); -// System.err.println("CONTENT rcf:"+bodytext); - } else { - Object o = part.getContent(); - if (o instanceof String) { - bodytext.append(o.toString()); -// System.err.println("CONTENT string:"+bodytext); - } else if (o instanceof InputStream) { - InputStream is = (InputStream) o; - int c; - while ((c = is.read()) != -1) { - bodytext.append(c); - } -// System.err.println("CONTENT stream:"+bodytext); - } else { - bodytext.append(o.toString()); -// System.err.println("CONTENT unknown:"+bodytext); - } - } - - return bodytext.toString(); - } - - @Override - public String getFilterType() { - return EmailDataType.FILTER_message; - } -} diff --git a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterSubjectInclude.java b/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterSubjectInclude.java deleted file mode 100644 index c826737f8b..0000000000 --- a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailFilterSubjectInclude.java +++ /dev/null @@ -1,106 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du <duyi001@gmail.com> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.io.spigot.plugin.email; - -import java.io.UnsupportedEncodingException; -import javax.mail.Message; -import javax.mail.MessagingException; -import javax.mail.internet.MimeUtility; -import org.gephi.io.importer.api.Issue; -import org.gephi.io.importer.api.Report; -import org.gephi.io.spigot.plugin.email.spi.EmailFilter; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Yi Du - */ -@ServiceProvider(service = EmailFilter.class) -public class EmailFilterSubjectInclude implements EmailFilter{ - - @Override - public boolean filterEmail(Message message, String filter, Report report) { - try { - String subject = getSubject(message); - if(subject == null){ - report.logIssue(new Issue("can't load subject of message "+ message, Issue.Level.WARNING)); - return true; - } - if (subject.contains(filter)) { - return true; - } else { - return false; - } - } catch (MessagingException ex) { - report.logIssue(new Issue(message+":"+ex.getMessage(), Issue.Level.WARNING)); - return true; - } catch (UnsupportedEncodingException ex) { - report.logIssue(new Issue(message+":"+ex.getMessage(), Issue.Level.WARNING)); - return true; - } - } - - /** - * get subject of a message - * @param message - * @return subject of a message - * @throws MessagingException - */ - public String getSubject(Message message) throws MessagingException, UnsupportedEncodingException { - if(message == null) - return null; - String subject = ""; - String msgSubject = message.getSubject(); - if(msgSubject == null) - return null; - subject = MimeUtility.decodeText(msgSubject); - if (subject == null) { - subject = ""; - } - return subject; - } - - @Override - public String getFilterType() { - return EmailDataType.FILTER_SUBJECT; - } -} diff --git a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailUIProperty.java b/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailUIProperty.java deleted file mode 100644 index 28a7956f05..0000000000 --- a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/EmailUIProperty.java +++ /dev/null @@ -1,59 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du <duyi001@gmail.com> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ - -package org.gephi.io.spigot.plugin.email; - -/** - * This class is a singleton, used to cache email import option of ui. - * @author Yi Du <duyi001@gmail.com> - */ -public class EmailUIProperty { - private static EmailDataType datatype = new EmailDataType(); - - private EmailUIProperty(){ - - } - - public static EmailDataType getInstance(){ - return datatype; - } -} diff --git a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/Utilities.java b/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/Utilities.java deleted file mode 100644 index ccb9ab690e..0000000000 --- a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/Utilities.java +++ /dev/null @@ -1,121 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du <duyi001@gmail.com> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.io.spigot.plugin.email; - -import java.io.UnsupportedEncodingException; -import java.nio.charset.Charset; -import java.util.Map; -import org.openide.util.Exceptions; - -/** - * - * @author Yi Du - */ -public class Utilities { - - /** - * - * @param codecType the current codecType of message - * @param content content to parse - * @return string after codec - */ - public static String codecTranslate(String codecType, String content) { - if(codecType == null || content == null) - return content; - - if (codecType.equalsIgnoreCase("UTF-8")) - return content; - else if (codecType.equalsIgnoreCase("gb2312")) { - String s = null; - try { - s = new String(content.getBytes("gb2312"), "UTF-8"); - } catch (UnsupportedEncodingException ex) { - Exceptions.printStackTrace(ex); - return content; - } - return s; - } else if (codecType.equalsIgnoreCase("gbk")) { - String s = null; - try { - s = new String(content.getBytes("gbk"), "UTF-8"); - } catch (UnsupportedEncodingException ex) { - Exceptions.printStackTrace(ex); - return content; - } - return s; - }else if (codecType.equalsIgnoreCase("ISO-8859-1")) { - String s = null; - try { - s = new String(content.getBytes("ISO-8859-1"), "UTF-8"); - } catch (UnsupportedEncodingException ex) { - Exceptions.printStackTrace(ex); - return content; - } - return s; - }else if (codecType.equalsIgnoreCase("us-ascii")) { - String s = null; - try { - s = new String(content.getBytes("us-ascii"), "UTF-8"); - } catch (UnsupportedEncodingException ex) { - Exceptions.printStackTrace(ex); - return content; - } - return s; - } - else{// the upper sereval codecs appear frequently, so doing this way to increase speed - Map<String, Charset> map = Charset.availableCharsets(); - for(String o :map.keySet()){ - if(o.equalsIgnoreCase(codecType)){ - String s = null; - try { - s = new String(content.getBytes(o), "UTF-8"); - } catch (UnsupportedEncodingException ex) { - Exceptions.printStackTrace(ex); - return s; - } - } - } - //System.out.println("unsupported codec type"); - return content; - } - } -} diff --git a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/spi/EmailFilesFilter.java b/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/spi/EmailFilesFilter.java deleted file mode 100644 index 2c55a76cd1..0000000000 --- a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/spi/EmailFilesFilter.java +++ /dev/null @@ -1,77 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du <duyi001@gmail.com> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ - -package org.gephi.io.spigot.plugin.email.spi; - -import java.io.File; -import javax.mail.internet.MimeMessage; -import org.gephi.io.importer.api.Report; - -/** - * user who want to add more support to the current project - * should implements this interface - * @author Yi Du<duyi001@gmail.com> - */ -public interface EmailFilesFilter { - - /** - * - * @return display name of ui. - * It's also an ID of the file filter - */ - public String getDisplayName(); - - /** - * - * @return supported file extension of current file filter - */ - public String getSupportedFileExtension(); - - /** - * - * @param files - * @param report - * @return parsed files, the format is MimeMessage of java mail api - */ - public MimeMessage parseFile(File file,Report report); - -} diff --git a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/spi/EmailFilter.java b/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/spi/EmailFilter.java deleted file mode 100644 index cc89ed75c7..0000000000 --- a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/spi/EmailFilter.java +++ /dev/null @@ -1,67 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du <duyi001@gmail.com> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.io.spigot.plugin.email.spi; - -import javax.mail.Message; -import org.gephi.io.importer.api.Report; - -/** - * - * @author Yi Du - */ -public interface EmailFilter { - /** - * - * @param message message to filter - * @param filter constraints used to filter message - * @param report report to report panel - * @return false if message isn't filtered by the filter - * true if message is filtered by the filter;η¬¦εˆθΏ‡ζ»€ζ‘δ»Ά - */ - public boolean filterEmail(Message message, String filter, Report report); - - /** - * - * @return own filter type - */ - public String getFilterType(); -} diff --git a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/spi/EmailFilterFactory.java b/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/spi/EmailFilterFactory.java deleted file mode 100644 index beb843b0ad..0000000000 --- a/modules/SpigotPlugin/src/main/java/org/gephi/io/spigot/plugin/email/spi/EmailFilterFactory.java +++ /dev/null @@ -1,56 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du <duyi001@gmail.com> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ - -package org.gephi.io.spigot.plugin.email.spi; - -/** - * - * @author Yi Du - */ -public interface EmailFilterFactory { - /** - * - * @param filterType - * @return concrete email filter - */ - public EmailFilter createEmailFilter(String filterType); -} diff --git a/modules/SpigotPlugin/src/main/nbm/manifest.mf b/modules/SpigotPlugin/src/main/nbm/manifest.mf deleted file mode 100644 index 4a2b1e900b..0000000000 --- a/modules/SpigotPlugin/src/main/nbm/manifest.mf +++ /dev/null @@ -1,4 +0,0 @@ -Manifest-Version: 1.0 -AutoUpdate-Essential-Module: true -OpenIDE-Module-Localizing-Bundle: org/gephi/io/spigot/plugin/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file diff --git a/modules/SpigotPlugin/src/main/nbm/module.xml b/modules/SpigotPlugin/src/main/nbm/module.xml deleted file mode 100644 index 9f6c48b072..0000000000 --- a/modules/SpigotPlugin/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<nbm> - <!-- - <moduleType>autoload</moduleType> - <codeNameBase>org.gephi.spigot.plugin/1</codeNameBase> - <licenseName>Apache License, Version 2.0</licenseName> - <licenseFile>license.txt</licenseFile> - --> -</nbm> diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/Bundle.properties b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/Bundle.properties deleted file mode 100644 index f9d2294893..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/Bundle.properties +++ /dev/null @@ -1,5 +0,0 @@ -OpenIDE-Module-Display-Category=Plugin -OpenIDE-Module-Name=Spigot Plugin -OpenIDE-Module-Short-Description=Spigot core implementations - -EmailImporterBuilder.name = Import Emails \ No newline at end of file diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/Bundle_cs.properties b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/Bundle_cs.properties deleted file mode 100644 index febcc589fe..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/Bundle_cs.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz <zbynek.schwarz@gmail.com>, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-12 20\:28+0000\nLast-Translator\: Zbyn\u011bk Schwarz <zbynek.schwarz@gmail.com>\nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Short-Description=Zaveden\u00ed j\u00e1dra Spigot - -EmailImporterBuilder.name=Importovat emaily diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/Bundle_es.properties b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/Bundle_es.properties deleted file mode 100644 index a1274007fb..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/Bundle_es.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:58+0000\nLast-Translator\: gephi <sebastien.heymann@gmail.com>\nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Short-Description=Implementaciones base de conectores (Spigot) - -EmailImporterBuilder.name=Importar emails diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/Bundle_fr.properties b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/Bundle_fr.properties deleted file mode 100644 index 860ebd8b56..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/Bundle_fr.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:58+0000\nLast-Translator\: gephi <sebastien.heymann@gmail.com>\nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Impl\u00e9mentations du coeur des Connecteurs (Spigot) - -EmailImporterBuilder.name=Import emails diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/Bundle_ja.properties b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/Bundle_ja.properties deleted file mode 100644 index 455b6be81a..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/Bundle_ja.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida <kida.siro@gmail.com>, 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-19 05\:31+0000\nLast-Translator\: Siro Kida <kida.siro@gmail.com>\nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u30b9\u30d4\u30b4\u30c3\u30c8\u306e\u30b3\u30a2\u306e\u5b9f\u88c5 - -EmailImporterBuilder.name=\u96fb\u5b50\u30e1\u30fc\u30eb\u306e\u30a4\u30f3\u30dd\u30fc\u30c8 diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/Bundle_pt_BR.properties b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/Bundle_pt_BR.properties deleted file mode 100644 index 27db6515fe..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/Bundle_pt_BR.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr <celiofariajr@gmail.com>, 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 18\:16+0000\nLast-Translator\: C\u00e9lio Faria Jr. <celiofariajr@gmail.com>\nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Implementa\u00e7\u00f5es base de Spigots - -EmailImporterBuilder.name=Importar Emails diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/Bundle_ru.properties b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/Bundle_ru.properties deleted file mode 100644 index 4e4809150b..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/Bundle_ru.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# <altsoph@gmail.com>, 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-10 05\:35+0000\nLast-Translator\: Altsoph <altsoph@gmail.com>\nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f Spigot core - -EmailImporterBuilder.name=\u0418\u043c\u043f\u043e\u0440\u0442 Email diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/Bundle_zh_CN.properties b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/Bundle_zh_CN.properties deleted file mode 100644 index 8c85b902ad..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/Bundle_zh_CN.properties +++ /dev/null @@ -1,10 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:07+0000\nLast-Translator\: gephi <sebastien.heymann@gmail.com>\nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u63d2\u5165\u6838\u5fc3\u5b9e\u73b0 - -EmailImporterBuilder.name=\u5bfc\u5165\u7535\u5b50\u90ae\u4ef6 diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/cs.po b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/cs.po deleted file mode 100644 index d79d7a65f2..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/cs.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz <zbynek.schwarz@gmail.com>, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-12 20:28+0000\n" -"Last-Translator: ZbynΔ›k Schwarz <zbynek.schwarz@gmail.com>\n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ZavedenΓ­ jΓ‘dra Spigot" - -msgid "EmailImporterBuilder.name" -msgstr "Importovat emaily" diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/Bundle.properties b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/Bundle.properties deleted file mode 100644 index 89986ecdc4..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/Bundle.properties +++ /dev/null @@ -1 +0,0 @@ -EmailFilesFilterEML.displayName=EML Files or folder \ No newline at end of file diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/Bundle_cs.properties b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/Bundle_cs.properties deleted file mode 100644 index d9c49958cd..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/Bundle_cs.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz <zbynek.schwarz@gmail.com>, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-12 20\:29+0000\nLast-Translator\: Zbyn\u011bk Schwarz <zbynek.schwarz@gmail.com>\nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -EmailFilesFilterEML.displayName=Soubory EML nebo slo\u017eka diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/Bundle_es.properties b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/Bundle_es.properties deleted file mode 100644 index 45fff4a9c0..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/Bundle_es.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR <EMAIL@ADDRESS>, 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:58+0000\nLast-Translator\: gephi <sebastien.heymann@gmail.com>\nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -EmailFilesFilterEML.displayName=Archivos EML o directorio diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/Bundle_fr.properties b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/Bundle_fr.properties deleted file mode 100644 index 4a4098cb3e..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/Bundle_fr.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# <sebastien.heymann@gmail.com>, 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 09\:32+0000\nLast-Translator\: gephi <sebastien.heymann@gmail.com>\nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -EmailFilesFilterEML.displayName=Fichiers EML ou dossier diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/Bundle_ja.properties b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/Bundle_ja.properties deleted file mode 100644 index 3e76b00683..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/Bundle_ja.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida <kida.siro@gmail.com>, 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-19 05\:58+0000\nLast-Translator\: Siro Kida <kida.siro@gmail.com>\nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -EmailFilesFilterEML.displayName=EML\u30d5\u30a1\u30a4\u30eb\u307e\u305f\u306f\u30d5\u30a9\u30eb\u30c0 diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/Bundle_pt_BR.properties b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/Bundle_pt_BR.properties deleted file mode 100644 index 47dd4ea338..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/Bundle_pt_BR.properties +++ /dev/null @@ -1,10 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr <celiofariajr@gmail.com>, 2011. -# C\u00e9lio Faria Jr. <celiofariajr@gmail.com>, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-17 12\:33+0000\nLast-Translator\: C\u00e9lio Faria Jr. <celiofariajr@gmail.com>\nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -EmailFilesFilterEML.displayName=Selecione um arquivo EML ou um diret\u00f3rio que contenha arquivos EML diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/Bundle_ru.properties b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/Bundle_ru.properties deleted file mode 100644 index a74638093b..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/Bundle_ru.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# <altsoph@gmail.com>, 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-11 06\:26+0000\nLast-Translator\: Altsoph <altsoph@gmail.com>\nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -EmailFilesFilterEML.displayName=EML \u0444\u0430\u0439\u043b\u044b \u0438\u043b\u0438 \u043f\u0430\u043f\u043a\u0430 diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/Bundle_zh_CN.properties b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/Bundle_zh_CN.properties deleted file mode 100644 index cbc2a3f5a6..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/Bundle_zh_CN.properties +++ /dev/null @@ -1,8 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:07+0000\nLast-Translator\: gephi <sebastien.heymann@gmail.com>\nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -EmailFilesFilterEML.displayName=EML\u6587\u4ef6\u6216\u6587\u4ef6\u5939 diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/cs.po b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/cs.po deleted file mode 100644 index 33c5e81c7a..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/cs.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz <zbynek.schwarz@gmail.com>, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-12 20:29+0000\n" -"Last-Translator: ZbynΔ›k Schwarz <zbynek.schwarz@gmail.com>\n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "EmailFilesFilterEML.displayName" -msgstr "Soubory EML nebo sloΕΎka" diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/es.po b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/es.po deleted file mode 100644 index 1f6fe73ade..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/es.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR <EMAIL@ADDRESS>, 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:58+0000\n" -"Last-Translator: gephi <sebastien.heymann@gmail.com>\n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "EmailFilesFilterEML.displayName" -msgstr "Archivos EML o directorio" diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/fr.po b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/fr.po deleted file mode 100644 index 4b8dc5c122..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/fr.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# <sebastien.heymann@gmail.com>, 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 09:32+0000\n" -"Last-Translator: gephi <sebastien.heymann@gmail.com>\n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "EmailFilesFilterEML.displayName" -msgstr "Fichiers EML ou dossier" diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/ja.po b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/ja.po deleted file mode 100644 index ecaed5c683..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/ja.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida <kida.siro@gmail.com>, 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-19 05:58+0000\n" -"Last-Translator: Siro Kida <kida.siro@gmail.com>\n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "EmailFilesFilterEML.displayName" -msgstr "EMLγƒ•γ‚‘γ‚€γƒ«γΎγŸγ―γƒ•γ‚©γƒ«γƒ€" diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/org-gephi-io-spigot-plugin-email.pot b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/org-gephi-io-spigot-plugin-email.pot deleted file mode 100644 index 47e916533f..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/org-gephi-io-spigot-plugin-email.pot +++ /dev/null @@ -1,19 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team <gephi.team@lists.launchpad.net>, 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian <gephi.team@lists.launchpad.net>\n" -"Language-Team: English <https://launchpad.net/~gephi.team>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "EmailFilesFilterEML.displayName" -msgstr "EML Files or folder" diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/pt_BR.po b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/pt_BR.po deleted file mode 100644 index 855328fa78..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/pt_BR.po +++ /dev/null @@ -1,23 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr <celiofariajr@gmail.com>, 2011. -# CΓ©lio Faria Jr. <celiofariajr@gmail.com>, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-17 12:33+0000\n" -"Last-Translator: CΓ©lio Faria Jr. <celiofariajr@gmail.com>\n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "EmailFilesFilterEML.displayName" -msgstr "Selecione um arquivo EML ou um diretΓ³rio que contenha arquivos EML" diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/ru.po b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/ru.po deleted file mode 100644 index e57285c373..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/ru.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# <altsoph@gmail.com>, 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-11 06:26+0000\n" -"Last-Translator: Altsoph <altsoph@gmail.com>\n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "EmailFilesFilterEML.displayName" -msgstr "EML Ρ„Π°ΠΉΠ»Ρ‹ ΠΈΠ»ΠΈ ΠΏΠ°ΠΏΠΊΠ°" diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/zh_CN.po b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/zh_CN.po deleted file mode 100644 index cfd021931d..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/email/zh_CN.po +++ /dev/null @@ -1,21 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:07+0000\n" -"Last-Translator: gephi <sebastien.heymann@gmail.com>\n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "EmailFilesFilterEML.displayName" -msgstr "EMLζ–‡δ»Άζˆ–ζ–‡δ»Άε€Ή" diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/es.po b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/es.po deleted file mode 100644 index 15c116a188..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/es.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:58+0000\n" -"Last-Translator: gephi <sebastien.heymann@gmail.com>\n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implementaciones base de conectores (Spigot)" - -msgid "EmailImporterBuilder.name" -msgstr "Importar emails" diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/fr.po b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/fr.po deleted file mode 100644 index cd589f47fc..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/fr.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:58+0000\n" -"Last-Translator: gephi <sebastien.heymann@gmail.com>\n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplΓ©mentations du coeur des Connecteurs (Spigot)" - -msgid "EmailImporterBuilder.name" -msgstr "Import emails" diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/ja.po b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/ja.po deleted file mode 100644 index c259d98507..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida <kida.siro@gmail.com>, 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-19 05:31+0000\n" -"Last-Translator: Siro Kida <kida.siro@gmail.com>\n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "γ‚Ήγƒ”γ‚΄γƒƒγƒˆγγ‚³γ‚’γεŸθ£…" - -msgid "EmailImporterBuilder.name" -msgstr "電子パールγγ‚€γƒ³γƒγƒΌγƒˆ" diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/org-gephi-io-spigot-plugin.pot b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/org-gephi-io-spigot-plugin.pot deleted file mode 100644 index 95dad5b9d6..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/org-gephi-io-spigot-plugin.pot +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team <gephi.team@lists.launchpad.net>, 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian <gephi.team@lists.launchpad.net>\n" -"Language-Team: English <https://launchpad.net/~gephi.team>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Spigot core implementations" - -msgid "EmailImporterBuilder.name" -msgstr "Import Emails" diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/pt_BR.po b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/pt_BR.po deleted file mode 100644 index fef46f97c1..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/pt_BR.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr <celiofariajr@gmail.com>, 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 18:16+0000\n" -"Last-Translator: CΓ©lio Faria Jr. <celiofariajr@gmail.com>\n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplementaΓ§Γ΅es base de Spigots" - -msgid "EmailImporterBuilder.name" -msgstr "Importar Emails" diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/ru.po b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/ru.po deleted file mode 100644 index 36c624d56c..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/ru.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# <altsoph@gmail.com>, 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-10 05:35+0000\n" -"Last-Translator: Altsoph <altsoph@gmail.com>\n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "РСализация Spigot core" - -msgid "EmailImporterBuilder.name" -msgstr "Π˜ΠΌΠΏΠΎΡ€Ρ‚ Email" diff --git a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/zh_CN.po b/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/zh_CN.po deleted file mode 100644 index be3859cf5d..0000000000 --- a/modules/SpigotPlugin/src/main/resources/org/gephi/io/spigot/plugin/zh_CN.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:07+0000\n" -"Last-Translator: gephi <sebastien.heymann@gmail.com>\n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "插ε…₯ζ ΈεΏƒεžηް" - -msgid "EmailImporterBuilder.name" -msgstr "ε―Όε…₯甡子ι‚δ»Ά" diff --git a/modules/SpigotPluginUI/pom.xml b/modules/SpigotPluginUI/pom.xml deleted file mode 100644 index 73bf23273f..0000000000 --- a/modules/SpigotPluginUI/pom.xml +++ /dev/null @@ -1,74 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <artifactId>gephi-parent</artifactId> - <groupId>org.gephi</groupId> - <version>0.9-SNAPSHOT</version> - <relativePath>../..</relativePath> - </parent> - - <groupId>org.gephi</groupId> - <artifactId>spigot-plugin-ui</artifactId> - <version>0.9-SNAPSHOT</version> - <packaging>nbm</packaging> - - <name>SpigotPluginUI</name> - - <dependencies> - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>io-importer-api</artifactId> - </dependency> - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>spigot-plugin</artifactId> - </dependency> - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>core-library-wrapper</artifactId> - </dependency> - <dependency> - <groupId>com.toedter</groupId> - <artifactId>jcalendar</artifactId> - <version>1.3.3</version> - </dependency> - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>ui-utils</artifactId> - </dependency> - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>utils-longtask</artifactId> - </dependency> - <dependency> - <groupId>org.netbeans.api</groupId> - <artifactId>org-openide-awt</artifactId> - </dependency> - <dependency> - <groupId>org.netbeans.api</groupId> - <artifactId>org-openide-dialogs</artifactId> - </dependency> - <dependency> - <groupId>org.netbeans.api</groupId> - <artifactId>org-openide-util</artifactId> - </dependency> - <dependency> - <groupId>org.netbeans.api</groupId> - <artifactId>org-openide-util-lookup</artifactId> - </dependency> - </dependencies> - - <build> - <plugins> - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>nbm-maven-plugin</artifactId> - <configuration> - <publicPackages> - </publicPackages> - </configuration> - </plugin> - </plugins> - </build> -</project> diff --git a/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailImportAdvancedOptPanel.form b/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailImportAdvancedOptPanel.form deleted file mode 100644 index 47721fcd8f..0000000000 --- a/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailImportAdvancedOptPanel.form +++ /dev/null @@ -1,74 +0,0 @@ -<?xml version="1.1" encoding="UTF-8" ?> - -<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> - <AuxValues> - <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> - <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> - <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> - <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> - <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> - <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> - </AuxValues> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="jCheckBoxUseSSL" alignment="0" min="-2" max="-2" attributes="0"/> - <Group type="102" alignment="0" attributes="0"> - <Component id="jLabelPort" min="-2" max="-2" attributes="0"/> - <EmptySpace type="unrelated" max="-2" attributes="0"/> - <Component id="jTextFieldPort" min="-2" pref="96" max="-2" attributes="0"/> - </Group> - </Group> - <EmptySpace pref="19" max="32767" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace max="-2" attributes="0"/> - <Group type="103" groupAlignment="3" attributes="0"> - <Component id="jLabelPort" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="jTextFieldPort" alignment="3" min="-2" max="-2" attributes="0"/> - </Group> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Component id="jCheckBoxUseSSL" min="-2" max="-2" attributes="0"/> - <EmptySpace pref="15" max="32767" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Component class="javax.swing.JLabel" name="jLabelPort"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailImportAdvancedOptPanel.jLabelPort.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JTextField" name="jTextFieldPort"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailImportAdvancedOptPanel.jTextFieldPort.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JCheckBox" name="jCheckBoxUseSSL"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailImportAdvancedOptPanel.jCheckBoxUseSSL.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jCheckBoxUseSSLActionPerformed"/> - </Events> - </Component> - </SubComponents> -</Form> diff --git a/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailImportAdvancedOptPanel.java b/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailImportAdvancedOptPanel.java deleted file mode 100644 index fcaebe4427..0000000000 --- a/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailImportAdvancedOptPanel.java +++ /dev/null @@ -1,148 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du <duyi001@gmail.com> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ - -/* - * EmailImportAdvancedOptPanel.java - * - * Created on Jun 18, 2010, 11:51:38 PM - */ - -package org.gephi.ui.spigot.plugin.email; - -/** - * - * @author Yi Du - */ -public class EmailImportAdvancedOptPanel extends javax.swing.JPanel { - private String currentServerType; - private EmailVisualPanel1 parentPanel; - - /** Creates new form EmailImportAdvancedOptPanel */ - public EmailImportAdvancedOptPanel() { - initComponents(); - } - - EmailImportAdvancedOptPanel(String toString, EmailVisualPanel1 panel) { - this.currentServerType = toString; - this.parentPanel = panel; - initComponents(); - jTextFieldPort.setText(Integer.toString(parentPanel.getPort())); - jCheckBoxUseSSL.setSelected(parentPanel.useSSL()); - } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents - private void initComponents() { - - jLabelPort = new javax.swing.JLabel(); - jTextFieldPort = new javax.swing.JTextField(); - jCheckBoxUseSSL = new javax.swing.JCheckBox(); - - jLabelPort.setText(org.openide.util.NbBundle.getMessage(EmailImportAdvancedOptPanel.class, "EmailImportAdvancedOptPanel.jLabelPort.text")); // NOI18N - - jTextFieldPort.setText(org.openide.util.NbBundle.getMessage(EmailImportAdvancedOptPanel.class, "EmailImportAdvancedOptPanel.jTextFieldPort.text")); // NOI18N - - jCheckBoxUseSSL.setText(org.openide.util.NbBundle.getMessage(EmailImportAdvancedOptPanel.class, "EmailImportAdvancedOptPanel.jCheckBoxUseSSL.text")); // NOI18N - jCheckBoxUseSSL.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jCheckBoxUseSSLActionPerformed(evt); - } - }); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jCheckBoxUseSSL) - .addGroup(layout.createSequentialGroup() - .addComponent(jLabelPort) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(jTextFieldPort, javax.swing.GroupLayout.PREFERRED_SIZE, 96, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addContainerGap(19, Short.MAX_VALUE)) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(jLabelPort) - .addComponent(jTextFieldPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(18, 18, 18) - .addComponent(jCheckBoxUseSSL) - .addContainerGap(15, Short.MAX_VALUE)) - ); - }// </editor-fold>//GEN-END:initComponents - - private void jCheckBoxUseSSLActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxUseSSLActionPerformed - if(jCheckBoxUseSSL.isSelected() && parentPanel.getServerType().equals("POP3")) - jTextFieldPort.setText("995"); - if(!jCheckBoxUseSSL.isSelected() && parentPanel.getServerType().equals("POP3")) - jTextFieldPort.setText("110"); - if(jCheckBoxUseSSL.isSelected() && parentPanel.getServerType().equals("IMAP")) - jTextFieldPort.setText("993"); - if(!jCheckBoxUseSSL.isSelected() && parentPanel.getServerType().equals("IMAP")) - jTextFieldPort.setText("143"); - - // TODO add your handling code here: - }//GEN-LAST:event_jCheckBoxUseSSLActionPerformed - - - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JCheckBox jCheckBoxUseSSL; - private javax.swing.JLabel jLabelPort; - private javax.swing.JTextField jTextFieldPort; - // End of variables declaration//GEN-END:variables - - void save() { - parentPanel.setPort(Integer.parseInt(jTextFieldPort.getText().trim())); - parentPanel.setUseSSL(jCheckBoxUseSSL.isSelected()); - } - -} diff --git a/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailVisualPanel1.form b/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailVisualPanel1.form deleted file mode 100644 index 0e973f19f3..0000000000 --- a/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailVisualPanel1.form +++ /dev/null @@ -1,390 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> - -<Form version="1.4" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> - <NonVisualComponents> - <Component class="javax.swing.ButtonGroup" name="buttonGroup1"> - </Component> - </NonVisualComponents> - <Properties> - <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[500, 360]"/> - </Property> - <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[500, 360]"/> - </Property> - <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[500, 360]"/> - </Property> - </Properties> - <AuxValues> - <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> - <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> - <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/> - <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> - <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> - <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> - <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> - </AuxValues> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="1" attributes="0"> - <EmptySpace max="-2" attributes="0"/> - <Group type="103" groupAlignment="1" attributes="0"> - <Component id="jPanelReceiveFromServer" alignment="0" pref="480" max="32767" attributes="1"/> - <Component id="jCheckBoxDisplayNameSameLabel" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="jCheckBoxUseBccLine" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="jCheckBoxUseCcLine" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="jRadioButtonFromLocalFile" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="jRadioButtonFromServer" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="jLabel4" alignment="0" pref="544" max="32767" attributes="0"/> - <Group type="102" alignment="0" attributes="0"> - <Component id="jLabel5" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jComboBoxFileFilters" min="-2" pref="168" max="-2" attributes="0"/> - <EmptySpace min="-2" pref="14" max="-2" attributes="0"/> - <Component id="jButtonFromLocalFile" min="-2" pref="135" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jLabel6" min="-2" max="-2" attributes="0"/> - </Group> - </Group> - <EmptySpace max="-2" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace max="-2" attributes="0"/> - <Component id="jRadioButtonFromLocalFile" min="-2" max="-2" attributes="0"/> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Group type="103" groupAlignment="3" attributes="0"> - <Component id="jComboBoxFileFilters" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="jButtonFromLocalFile" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="jLabel5" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="jLabel6" alignment="3" min="-2" max="-2" attributes="0"/> - </Group> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Component id="jRadioButtonFromServer" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jPanelReceiveFromServer" min="-2" pref="167" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jCheckBoxUseCcLine" min="-2" max="-2" attributes="0"/> - <EmptySpace type="unrelated" max="-2" attributes="0"/> - <Component id="jCheckBoxUseBccLine" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jCheckBoxDisplayNameSameLabel" min="-2" max="-2" attributes="0"/> - <EmptySpace max="32767" attributes="0"/> - <Component id="jLabel4" min="-2" max="-2" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Container class="javax.swing.JPanel" name="jPanelReceiveFromServer"> - <Properties> - <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> - <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> - <TitledBorder/> - </Border> - </Property> - <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[600, 32767]"/> - </Property> - <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[400, 87]"/> - </Property> - </Properties> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="1" attributes="0"> - <EmptySpace min="2" pref="2" max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="103" groupAlignment="1" max="-2" attributes="0"> - <Component id="jLabelPsw" alignment="0" max="32767" attributes="1"/> - <Component id="jLabelServerType" alignment="0" max="32767" attributes="1"/> - <Component id="jLabelServerAddr" alignment="0" max="32767" attributes="1"/> - </Group> - <Component id="jLabelEmailAddr" alignment="1" min="-2" pref="138" max="-2" attributes="1"/> - </Group> - <EmptySpace max="-2" attributes="0"/> - <Group type="103" groupAlignment="1" attributes="0"> - <Group type="102" attributes="0"> - <Component id="jTextFieldEmailAddr" pref="358" max="32767" attributes="1"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jLabel1" min="-2" max="-2" attributes="0"/> - </Group> - <Group type="102" attributes="0"> - <Component id="jComboBoxServerType" pref="227" max="32767" attributes="1"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jButton3" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jLabel7" min="-2" max="-2" attributes="0"/> - </Group> - <Group type="102" attributes="0"> - <Component id="jTextFieldServerAddr" pref="358" max="32767" attributes="1"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jLabel3" min="-2" max="-2" attributes="0"/> - </Group> - <Group type="102" alignment="0" attributes="0"> - <Component id="jPasswordField1" pref="358" max="32767" attributes="1"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jLabel2" min="-2" max="-2" attributes="0"/> - </Group> - </Group> - </Group> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace max="-2" attributes="0"/> - <Group type="103" groupAlignment="3" attributes="0"> - <Component id="jLabelEmailAddr" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="jTextFieldEmailAddr" alignment="3" min="-2" pref="21" max="-2" attributes="0"/> - <Component id="jLabel1" alignment="3" min="-2" max="-2" attributes="0"/> - </Group> - <EmptySpace max="-2" attributes="0"/> - <Group type="103" groupAlignment="3" attributes="0"> - <Component id="jLabelPsw" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="jPasswordField1" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="jLabel2" alignment="3" min="-2" max="-2" attributes="0"/> - </Group> - <EmptySpace max="-2" attributes="0"/> - <Group type="103" groupAlignment="3" attributes="0"> - <Component id="jLabelServerType" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="jButton3" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="jComboBoxServerType" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="jLabel7" alignment="3" min="-2" max="-2" attributes="0"/> - </Group> - <EmptySpace max="-2" attributes="0"/> - <Group type="103" groupAlignment="3" attributes="0"> - <Component id="jLabelServerAddr" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="jTextFieldServerAddr" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="jLabel3" alignment="3" min="-2" max="-2" attributes="0"/> - </Group> - <EmptySpace pref="41" max="32767" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Component class="javax.swing.JLabel" name="jLabelEmailAddr"> - <Properties> - <Property name="horizontalAlignment" type="int" value="4"/> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel1.jLabelEmailAddr.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="jLabelServerType"> - <Properties> - <Property name="horizontalAlignment" type="int" value="4"/> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel1.jLabelServerType.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JTextField" name="jTextFieldServerAddr"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel1.jTextFieldServerAddr.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - <Events> - <EventHandler event="caretUpdate" listener="javax.swing.event.CaretListener" parameters="javax.swing.event.CaretEvent" handler="jTextFieldServerAddrCaretUpdate"/> - </Events> - </Component> - <Component class="javax.swing.JLabel" name="jLabelServerAddr"> - <Properties> - <Property name="horizontalAlignment" type="int" value="4"/> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel1.jLabelServerAddr.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="jLabelPsw"> - <Properties> - <Property name="horizontalAlignment" type="int" value="4"/> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel1.jLabelPsw.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JButton" name="jButton3"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel1.jButton3.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButton3ActionPerformed"/> - </Events> - </Component> - <Component class="javax.swing.JComboBox" name="jComboBoxServerType"> - <Properties> - <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.RADConnectionPropertyEditor"> - <Connection code="new javax.swing.DefaultComboBoxModel(new String[] { EmailDataType.SERVER_TYPE_POP3,EmailDataType.SERVER_TYPE_IMAP })" type="code"/> - </Property> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jComboBoxServerTypeActionPerformed"/> - </Events> - </Component> - <Component class="javax.swing.JTextField" name="jTextFieldEmailAddr"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel1.jTextFieldEmailAddr.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - <Events> - <EventHandler event="caretUpdate" listener="javax.swing.event.CaretListener" parameters="javax.swing.event.CaretEvent" handler="jTextFieldEmailAddrCaretUpdate"/> - </Events> - <AuxValues> - <AuxValue name="JavaCodeGenerator_InitCodePre" type="java.lang.String" value="javax.swing.event.DocumentListener docListener = new javax.swing.event.DocumentListener() { @Override public void insertUpdate(DocumentEvent e) { jTextFieldDocInsertUpdatePerformed(e); } @Override public void removeUpdate(DocumentEvent e) { jTextFieldDocRemoveUpdatePerformed(e); } @Override public void changedUpdate(DocumentEvent e) { jTextFieldDocChangedUpdatePerformed(e); } };"/> - </AuxValues> - </Component> - <Component class="javax.swing.JPasswordField" name="jPasswordField1"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel1.jPasswordField1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - <Events> - <EventHandler event="caretUpdate" listener="javax.swing.event.CaretListener" parameters="javax.swing.event.CaretEvent" handler="jPasswordField1CaretUpdate"/> - </Events> - </Component> - <Component class="javax.swing.JLabel" name="jLabel1"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel1.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="jLabel2"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel1.jLabel2.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="jLabel3"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel1.jLabel3.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="jLabel7"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel1.jLabel7.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - </SubComponents> - </Container> - <Component class="javax.swing.JRadioButton" name="jRadioButtonFromLocalFile"> - <Properties> - <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor"> - <ComponentRef name="buttonGroup1"/> - </Property> - <Property name="selected" type="boolean" value="true"/> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel1.jRadioButtonFromLocalFile.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jRadioButtonFromLocalFileActionPerformed"/> - </Events> - </Component> - <Component class="javax.swing.JRadioButton" name="jRadioButtonFromServer"> - <Properties> - <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor"> - <ComponentRef name="buttonGroup1"/> - </Property> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel1.jRadioButtonFromServer.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jRadioButtonFromServerActionPerformed"/> - </Events> - </Component> - <Component class="javax.swing.JComboBox" name="jComboBoxFileFilters"> - <Properties> - <Property name="model" type="javax.swing.ComboBoxModel" editor="org.netbeans.modules.form.RADConnectionPropertyEditor"> - <Connection code="new javax.swing.DefaultComboBoxModel(fileFilterString)" type="code"/> - </Property> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jComboBoxFileFiltersActionPerformed"/> - </Events> - <AuxValues> - <AuxValue name="JavaCodeGenerator_InitCodePre" type="java.lang.String" value="EmailFilesFilter[] filters = Lookup.getDefault().lookupAll(EmailFilesFilter.class).toArray(new EmailFilesFilter[0]); String[] fileFilterString = new String[filters.length+1]; int index = 0; fileFilterString[0] = NbBundle.getMessage(EmailVisualPanel1.class, "EmailVisualPanel1.fileType.default"); for(EmailFilesFilter f: filters){ index ++; fileFilterString[index] = f.getDisplayName(); }"/> - </AuxValues> - </Component> - <Component class="javax.swing.JButton" name="jButtonFromLocalFile"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel1.jButtonFromLocalFile.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - <Property name="enabled" type="boolean" value="false"/> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jButtonFromLocalFileActionPerformed"/> - </Events> - </Component> - <Component class="javax.swing.JCheckBox" name="jCheckBoxUseCcLine"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel1.jCheckBoxUseCcLine.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JCheckBox" name="jCheckBoxUseBccLine"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel1.jCheckBoxUseBccLine.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jCheckBoxUseBccLineActionPerformed"/> - </Events> - </Component> - <Component class="javax.swing.JCheckBox" name="jCheckBoxDisplayNameSameLabel"> - <Properties> - <Property name="selected" type="boolean" value="true"/> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel1.jCheckBoxDisplayNameSameLabel.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="jLabel4"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel1.jLabel4.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="jLabel5"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel1.jLabel5.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JLabel" name="jLabel6"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel1.jLabel6.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - </SubComponents> -</Form> diff --git a/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailVisualPanel1.java b/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailVisualPanel1.java deleted file mode 100644 index 7398f5ac57..0000000000 --- a/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailVisualPanel1.java +++ /dev/null @@ -1,705 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du <duyi001@gmail.com> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ui.spigot.plugin.email; - -import java.io.File; -import javax.swing.JFileChooser; -import javax.swing.JPanel; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import javax.swing.event.DocumentEvent; -import javax.swing.filechooser.FileFilter; -import org.gephi.io.importer.spi.SpigotImporter; -import org.gephi.io.spigot.plugin.email.EmailDataType; -import org.gephi.io.spigot.plugin.EmailImporter; -import org.gephi.io.spigot.plugin.email.spi.EmailFilesFilter; -import org.openide.DialogDescriptor; -import org.openide.DialogDisplayer; -import org.openide.NotifyDescriptor; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; -import org.openide.util.NbPreferences; - -public final class EmailVisualPanel1 extends JPanel implements ChangeListener { - private EmailWizardPanel1 wizardPanel; - private int port = 110; - private boolean useSSL = false; - private static final String LAST_PATH = "EmailVisualPanel1_lastpath"; -// private java.util.List<String> filePath; - java.io.File[] parsedFiles = null; - - - EmailVisualPanel1(EmailWizardPanel1 aThis) { - wizardPanel = aThis; - wizardPanel.addChangeListener(this); - initComponents(); - //set the init condition - setDisable(jPanelReceiveFromServer); - } - - @Override - public String getName() { - return NbBundle.getMessage(EmailVisualPanel1.class, "EmailVisualPanel1.name"); - } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents - private void initComponents() { - - buttonGroup1 = new javax.swing.ButtonGroup(); - jPanelReceiveFromServer = new javax.swing.JPanel(); - jLabelEmailAddr = new javax.swing.JLabel(); - jLabelServerType = new javax.swing.JLabel(); - jTextFieldServerAddr = new javax.swing.JTextField(); - jLabelServerAddr = new javax.swing.JLabel(); - jLabelPsw = new javax.swing.JLabel(); - jButton3 = new javax.swing.JButton(); - jComboBoxServerType = new javax.swing.JComboBox(); - jTextFieldEmailAddr = new javax.swing.JTextField(); - jPasswordField1 = new javax.swing.JPasswordField(); - jLabel1 = new javax.swing.JLabel(); - jLabel2 = new javax.swing.JLabel(); - jLabel3 = new javax.swing.JLabel(); - jLabel7 = new javax.swing.JLabel(); - jRadioButtonFromLocalFile = new javax.swing.JRadioButton(); - jRadioButtonFromServer = new javax.swing.JRadioButton(); - jComboBoxFileFilters = new javax.swing.JComboBox(); - jButtonFromLocalFile = new javax.swing.JButton(); - jCheckBoxUseCcLine = new javax.swing.JCheckBox(); - jCheckBoxUseBccLine = new javax.swing.JCheckBox(); - jCheckBoxDisplayNameSameLabel = new javax.swing.JCheckBox(); - jLabel4 = new javax.swing.JLabel(); - jLabel5 = new javax.swing.JLabel(); - jLabel6 = new javax.swing.JLabel(); - - setMaximumSize(new java.awt.Dimension(500, 360)); - setMinimumSize(new java.awt.Dimension(500, 360)); - setPreferredSize(new java.awt.Dimension(500, 360)); - - jPanelReceiveFromServer.setBorder(javax.swing.BorderFactory.createTitledBorder("")); - jPanelReceiveFromServer.setMaximumSize(new java.awt.Dimension(600, 32767)); - jPanelReceiveFromServer.setPreferredSize(new java.awt.Dimension(400, 87)); - - jLabelEmailAddr.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); - org.openide.awt.Mnemonics.setLocalizedText(jLabelEmailAddr, org.openide.util.NbBundle.getMessage(EmailVisualPanel1.class, "EmailVisualPanel1.jLabelEmailAddr.text")); // NOI18N - - jLabelServerType.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); - org.openide.awt.Mnemonics.setLocalizedText(jLabelServerType, org.openide.util.NbBundle.getMessage(EmailVisualPanel1.class, "EmailVisualPanel1.jLabelServerType.text")); // NOI18N - - jTextFieldServerAddr.setText(org.openide.util.NbBundle.getMessage(EmailVisualPanel1.class, "EmailVisualPanel1.jTextFieldServerAddr.text")); // NOI18N - jTextFieldServerAddr.addCaretListener(new javax.swing.event.CaretListener() { - public void caretUpdate(javax.swing.event.CaretEvent evt) { - jTextFieldServerAddrCaretUpdate(evt); - } - }); - - jLabelServerAddr.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); - org.openide.awt.Mnemonics.setLocalizedText(jLabelServerAddr, org.openide.util.NbBundle.getMessage(EmailVisualPanel1.class, "EmailVisualPanel1.jLabelServerAddr.text")); // NOI18N - - jLabelPsw.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); - org.openide.awt.Mnemonics.setLocalizedText(jLabelPsw, org.openide.util.NbBundle.getMessage(EmailVisualPanel1.class, "EmailVisualPanel1.jLabelPsw.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(jButton3, org.openide.util.NbBundle.getMessage(EmailVisualPanel1.class, "EmailVisualPanel1.jButton3.text")); // NOI18N - jButton3.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jButton3ActionPerformed(evt); - } - }); - - jComboBoxServerType.setModel(new javax.swing.DefaultComboBoxModel(new String[] { EmailDataType.SERVER_TYPE_POP3,EmailDataType.SERVER_TYPE_IMAP })); - jComboBoxServerType.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jComboBoxServerTypeActionPerformed(evt); - } - }); - - javax.swing.event.DocumentListener docListener = new javax.swing.event.DocumentListener() { - @Override - public void insertUpdate(DocumentEvent e) { - jTextFieldDocInsertUpdatePerformed(e); - } - @Override - public void removeUpdate(DocumentEvent e) { - jTextFieldDocRemoveUpdatePerformed(e); - } - @Override - public void changedUpdate(DocumentEvent e) { - jTextFieldDocChangedUpdatePerformed(e); - } - }; - jTextFieldEmailAddr.setText(org.openide.util.NbBundle.getMessage(EmailVisualPanel1.class, "EmailVisualPanel1.jTextFieldEmailAddr.text")); // NOI18N - jTextFieldEmailAddr.addCaretListener(new javax.swing.event.CaretListener() { - public void caretUpdate(javax.swing.event.CaretEvent evt) { - jTextFieldEmailAddrCaretUpdate(evt); - } - }); - - jPasswordField1.setText(org.openide.util.NbBundle.getMessage(EmailVisualPanel1.class, "EmailVisualPanel1.jPasswordField1.text")); // NOI18N - jPasswordField1.addCaretListener(new javax.swing.event.CaretListener() { - public void caretUpdate(javax.swing.event.CaretEvent evt) { - jPasswordField1CaretUpdate(evt); - } - }); - - org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(EmailVisualPanel1.class, "EmailVisualPanel1.jLabel1.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(EmailVisualPanel1.class, "EmailVisualPanel1.jLabel2.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(jLabel3, org.openide.util.NbBundle.getMessage(EmailVisualPanel1.class, "EmailVisualPanel1.jLabel3.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(jLabel7, org.openide.util.NbBundle.getMessage(EmailVisualPanel1.class, "EmailVisualPanel1.jLabel7.text")); // NOI18N - - javax.swing.GroupLayout jPanelReceiveFromServerLayout = new javax.swing.GroupLayout(jPanelReceiveFromServer); - jPanelReceiveFromServer.setLayout(jPanelReceiveFromServerLayout); - jPanelReceiveFromServerLayout.setHorizontalGroup( - jPanelReceiveFromServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanelReceiveFromServerLayout.createSequentialGroup() - .addGap(2, 2, 2) - .addGroup(jPanelReceiveFromServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanelReceiveFromServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) - .addComponent(jLabelPsw, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jLabelServerType, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jLabelServerAddr, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addComponent(jLabelEmailAddr, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, 138, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(jPanelReceiveFromServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addGroup(jPanelReceiveFromServerLayout.createSequentialGroup() - .addComponent(jTextFieldEmailAddr, javax.swing.GroupLayout.DEFAULT_SIZE, 358, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jLabel1)) - .addGroup(jPanelReceiveFromServerLayout.createSequentialGroup() - .addComponent(jComboBoxServerType, 0, 227, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jButton3) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jLabel7)) - .addGroup(jPanelReceiveFromServerLayout.createSequentialGroup() - .addComponent(jTextFieldServerAddr, javax.swing.GroupLayout.DEFAULT_SIZE, 358, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jLabel3)) - .addGroup(javax.swing.GroupLayout.Alignment.LEADING, jPanelReceiveFromServerLayout.createSequentialGroup() - .addComponent(jPasswordField1, javax.swing.GroupLayout.DEFAULT_SIZE, 358, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jLabel2)))) - ); - jPanelReceiveFromServerLayout.setVerticalGroup( - jPanelReceiveFromServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanelReceiveFromServerLayout.createSequentialGroup() - .addContainerGap() - .addGroup(jPanelReceiveFromServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(jLabelEmailAddr) - .addComponent(jTextFieldEmailAddr, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jLabel1)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(jPanelReceiveFromServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(jLabelPsw) - .addComponent(jPasswordField1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jLabel2)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(jPanelReceiveFromServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(jLabelServerType) - .addComponent(jButton3) - .addComponent(jComboBoxServerType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jLabel7)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(jPanelReceiveFromServerLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(jLabelServerAddr) - .addComponent(jTextFieldServerAddr, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jLabel3)) - .addContainerGap(41, Short.MAX_VALUE)) - ); - - buttonGroup1.add(jRadioButtonFromLocalFile); - jRadioButtonFromLocalFile.setSelected(true); - org.openide.awt.Mnemonics.setLocalizedText(jRadioButtonFromLocalFile, org.openide.util.NbBundle.getMessage(EmailVisualPanel1.class, "EmailVisualPanel1.jRadioButtonFromLocalFile.text")); // NOI18N - jRadioButtonFromLocalFile.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jRadioButtonFromLocalFileActionPerformed(evt); - } - }); - - buttonGroup1.add(jRadioButtonFromServer); - org.openide.awt.Mnemonics.setLocalizedText(jRadioButtonFromServer, org.openide.util.NbBundle.getMessage(EmailVisualPanel1.class, "EmailVisualPanel1.jRadioButtonFromServer.text")); // NOI18N - jRadioButtonFromServer.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jRadioButtonFromServerActionPerformed(evt); - } - }); - - EmailFilesFilter[] filters = - Lookup.getDefault().lookupAll(EmailFilesFilter.class).toArray(new EmailFilesFilter[0]); - String[] fileFilterString = new String[filters.length+1]; - int index = 0; - fileFilterString[0] = NbBundle.getMessage(EmailVisualPanel1.class, "EmailVisualPanel1.fileType.default"); - for(EmailFilesFilter f: filters){ - index ++; - fileFilterString[index] = f.getDisplayName(); - } - jComboBoxFileFilters.setModel(new javax.swing.DefaultComboBoxModel(fileFilterString)); - jComboBoxFileFilters.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jComboBoxFileFiltersActionPerformed(evt); - } - }); - - org.openide.awt.Mnemonics.setLocalizedText(jButtonFromLocalFile, org.openide.util.NbBundle.getMessage(EmailVisualPanel1.class, "EmailVisualPanel1.jButtonFromLocalFile.text")); // NOI18N - jButtonFromLocalFile.setEnabled(false); - jButtonFromLocalFile.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jButtonFromLocalFileActionPerformed(evt); - } - }); - - org.openide.awt.Mnemonics.setLocalizedText(jCheckBoxUseCcLine, org.openide.util.NbBundle.getMessage(EmailVisualPanel1.class, "EmailVisualPanel1.jCheckBoxUseCcLine.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(jCheckBoxUseBccLine, org.openide.util.NbBundle.getMessage(EmailVisualPanel1.class, "EmailVisualPanel1.jCheckBoxUseBccLine.text")); // NOI18N - jCheckBoxUseBccLine.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jCheckBoxUseBccLineActionPerformed(evt); - } - }); - - jCheckBoxDisplayNameSameLabel.setSelected(true); - org.openide.awt.Mnemonics.setLocalizedText(jCheckBoxDisplayNameSameLabel, org.openide.util.NbBundle.getMessage(EmailVisualPanel1.class, "EmailVisualPanel1.jCheckBoxDisplayNameSameLabel.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(jLabel4, org.openide.util.NbBundle.getMessage(EmailVisualPanel1.class, "EmailVisualPanel1.jLabel4.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(jLabel5, org.openide.util.NbBundle.getMessage(EmailVisualPanel1.class, "EmailVisualPanel1.jLabel5.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(jLabel6, org.openide.util.NbBundle.getMessage(EmailVisualPanel1.class, "EmailVisualPanel1.jLabel6.text")); // NOI18N - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(jPanelReceiveFromServer, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 480, Short.MAX_VALUE) - .addComponent(jCheckBoxDisplayNameSameLabel, javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jCheckBoxUseBccLine, javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jCheckBoxUseCcLine, javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jRadioButtonFromLocalFile, javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jRadioButtonFromServer, javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jLabel4, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 544, Short.MAX_VALUE) - .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() - .addComponent(jLabel5) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jComboBoxFileFilters, javax.swing.GroupLayout.PREFERRED_SIZE, 168, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(14, 14, 14) - .addComponent(jButtonFromLocalFile, javax.swing.GroupLayout.PREFERRED_SIZE, 135, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jLabel6))) - .addContainerGap()) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(jRadioButtonFromLocalFile) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(jComboBoxFileFilters, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jButtonFromLocalFile) - .addComponent(jLabel5) - .addComponent(jLabel6)) - .addGap(18, 18, 18) - .addComponent(jRadioButtonFromServer) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jPanelReceiveFromServer, javax.swing.GroupLayout.PREFERRED_SIZE, 167, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jCheckBoxUseCcLine) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(jCheckBoxUseBccLine) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jCheckBoxDisplayNameSameLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jLabel4)) - ); - }// </editor-fold>//GEN-END:initComponents - - private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed - EmailImportAdvancedOptPanel panel = new EmailImportAdvancedOptPanel(jComboBoxServerType.getSelectedItem().toString(), this); - //TODO internalize - DialogDescriptor dd = new DialogDescriptor(panel, NbBundle.getMessage(EmailVisualPanel1.class, "EmailImportAdvancedOptPanel.name")); - if (!DialogDisplayer.getDefault().notify(dd).equals(NotifyDescriptor.OK_OPTION)) { - panel = null; - return; - } else { - panel.save(); - panel = null; - return; - } -}//GEN-LAST:event_jButton3ActionPerformed - - private void jComboBoxServerTypeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jComboBoxServerTypeActionPerformed - wizardPanel.fireChangeEvent(); - if (jComboBoxServerType.getSelectedItem().toString().equals(EmailDataType.SERVER_TYPE_POP3)) { - port = 110; - } else if (jComboBoxServerType.getSelectedItem().toString().equals(EmailDataType.SERVER_TYPE_IMAP)) { - port = 143; - } - updateJTextFieldServer(); -}//GEN-LAST:event_jComboBoxServerTypeActionPerformed - - private void jRadioButtonFromLocalFileActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButtonFromLocalFileActionPerformed - wizardPanel.fireChangeEvent(); - // TODO add your handling code here: - if (jRadioButtonFromLocalFile.isSelected()) { - setDisable(jPanelReceiveFromServer); - jComboBoxFileFilters.setEnabled(true); - } else { - setDisable(jPanelReceiveFromServer); - jComboBoxFileFilters.setEnabled(false); - } - if (jComboBoxFileFilters.getSelectedItem().toString().equals(NbBundle.getMessage(EmailVisualPanel1.class, "EmailImportAdvancedOptPanel.name"))) { - jButtonFromLocalFile.setEnabled(false); - } else { - jButtonFromLocalFile.setEnabled(true); - } -}//GEN-LAST:event_jRadioButtonFromLocalFileActionPerformed - - private void jRadioButtonFromServerActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButtonFromServerActionPerformed - wizardPanel.fireChangeEvent(); - // TODO add your handling code here: - setEnable(jPanelReceiveFromServer); - jComboBoxFileFilters.setEnabled(false); - jButtonFromLocalFile.setEnabled(false); -}//GEN-LAST:event_jRadioButtonFromServerActionPerformed - - private void jComboBoxFileFiltersActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jComboBoxFileFiltersActionPerformed - wizardPanel.fireChangeEvent(); - if (!jComboBoxFileFilters.getSelectedItem().equals(NbBundle.getMessage(EmailVisualPanel1.class, "EmailVisualPanel1.fileType.default"))) { - jButtonFromLocalFile.setEnabled(true); - } else { - jButtonFromLocalFile.setEnabled(false); - } - // TODO add your handling code here: -}//GEN-LAST:event_jComboBoxFileFiltersActionPerformed - - private void jButtonFromLocalFileActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButtonFromLocalFileActionPerformed - javax.swing.JFileChooser fileChooser = new javax.swing.JFileChooser(); - fileChooser.setMultiSelectionEnabled(true); - fileChooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES); - FileFilter filter = new FileFilter() { - - @Override - public boolean accept(File f) { - String extension = ""; - EmailFilesFilter[] filters = - Lookup.getDefault().lookupAll(EmailFilesFilter.class).toArray(new EmailFilesFilter[0]); - for (EmailFilesFilter filter : filters) { - if (filter.getDisplayName().equals(jComboBoxFileFilters.getSelectedItem().toString())) { - extension = filter.getSupportedFileExtension(); - } - } - if (f.isDirectory()) { - return true; - } else if (f.getAbsolutePath().matches(".*" + extension)) { - return true; - } else { - return false; - } - } - - @Override - public String getDescription() { - EmailFilesFilter[] filters = - Lookup.getDefault().lookupAll(EmailFilesFilter.class).toArray(new EmailFilesFilter[0]); - for (EmailFilesFilter f : filters) { - if (f.getDisplayName().equals(jComboBoxFileFilters.getSelectedItem().toString())) { - return f.getSupportedFileExtension(); - } - } - return ""; - } - }; - fileChooser.setFileFilter(filter); - String lastPath = NbPreferences.forModule(EmailVisualPanel1.class).get(LAST_PATH, "."); - fileChooser.setCurrentDirectory(new File(lastPath)); - int returnValue = fileChooser.showOpenDialog(this); - if (returnValue == javax.swing.JFileChooser.APPROVE_OPTION) { - parsedFiles = fileChooser.getSelectedFiles(); - NbPreferences.forModule(EmailVisualPanel1.class).put(LAST_PATH, fileChooser.getCurrentDirectory().getAbsolutePath()); - } -}//GEN-LAST:event_jButtonFromLocalFileActionPerformed - - private void jCheckBoxUseBccLineActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxUseBccLineActionPerformed - // TODO add your handling code here: -}//GEN-LAST:event_jCheckBoxUseBccLineActionPerformed - - private void jTextFieldEmailAddrCaretUpdate(javax.swing.event.CaretEvent evt) {//GEN-FIRST:event_jTextFieldEmailAddrCaretUpdate - wizardPanel.fireChangeEvent(); - // TODO add your handling code here: - }//GEN-LAST:event_jTextFieldEmailAddrCaretUpdate - - private void jPasswordField1CaretUpdate(javax.swing.event.CaretEvent evt) {//GEN-FIRST:event_jPasswordField1CaretUpdate - wizardPanel.fireChangeEvent(); - // TODO add your handling code here: - }//GEN-LAST:event_jPasswordField1CaretUpdate - - private void jTextFieldServerAddrCaretUpdate(javax.swing.event.CaretEvent evt) {//GEN-FIRST:event_jTextFieldServerAddrCaretUpdate - wizardPanel.fireChangeEvent(); - // TODO add your handling code here: - }//GEN-LAST:event_jTextFieldServerAddrCaretUpdate - /** - * set all the component enable - * @param component - */ - public void setEnable(javax.swing.JComponent component) { - for (java.awt.Component c : component.getComponents()) { - if (c instanceof javax.swing.JComponent) { - c.setEnabled(true); - setEnable((javax.swing.JComponent) c); - } else { - c.getParent().setEnabled(true); - } - } - } - - /** - * set all the component disable - * @param component - */ - public void setDisable(javax.swing.JComponent component) { - for (java.awt.Component c : component.getComponents()) { - if (c instanceof javax.swing.JComponent) { - c.setEnabled(false); - setDisable((javax.swing.JComponent) c); - } else { - c.getParent().setEnabled(false); - } - } - } - - private void jTextFieldDocInsertUpdatePerformed(DocumentEvent evt) { - updateJTextFieldServer(); - } - - private void jTextFieldDocRemoveUpdatePerformed(DocumentEvent evt) { - updateJTextFieldServer(); - } - - private void jTextFieldDocChangedUpdatePerformed(DocumentEvent evt) { - updateJTextFieldServer(); - } - - private void updateJTextFieldServer() { - String text = jTextFieldEmailAddr.getText(); - if (text.contains("@")) { - jTextFieldServerAddr.setText( - jComboBoxServerType.getSelectedItem().toString().toLowerCase() - + "." + text.substring(text.indexOf("@") + 1)); - } - } - - public void setPort(int port) { - this.port = port; - } - - public void setUseSSL(boolean flag) { - this.useSSL = flag; - } - - public int getPort() { - return port; - } - - public boolean useSSL() { - return useSSL; - } - - public String getServerType() { - return jComboBoxServerType.getSelectedItem().toString(); - } - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.ButtonGroup buttonGroup1; - private javax.swing.JButton jButton3; - private javax.swing.JButton jButtonFromLocalFile; - private javax.swing.JCheckBox jCheckBoxDisplayNameSameLabel; - private javax.swing.JCheckBox jCheckBoxUseBccLine; - private javax.swing.JCheckBox jCheckBoxUseCcLine; - private javax.swing.JComboBox jComboBoxFileFilters; - private javax.swing.JComboBox jComboBoxServerType; - private javax.swing.JLabel jLabel1; - private javax.swing.JLabel jLabel2; - private javax.swing.JLabel jLabel3; - private javax.swing.JLabel jLabel4; - private javax.swing.JLabel jLabel5; - private javax.swing.JLabel jLabel6; - private javax.swing.JLabel jLabel7; - private javax.swing.JLabel jLabelEmailAddr; - private javax.swing.JLabel jLabelPsw; - private javax.swing.JLabel jLabelServerAddr; - private javax.swing.JLabel jLabelServerType; - private javax.swing.JPanel jPanelReceiveFromServer; - private javax.swing.JPasswordField jPasswordField1; - private javax.swing.JRadioButton jRadioButtonFromLocalFile; - private javax.swing.JRadioButton jRadioButtonFromServer; - private javax.swing.JTextField jTextFieldEmailAddr; - private javax.swing.JTextField jTextFieldServerAddr; - // End of variables declaration//GEN-END:variables - -// void setupImporter(EmailImporter current) { -// if (current == null) { -// return; -// } -// if (current.isFromLocalFile()) { -// jRadioButtonFromLocalFile.setSelected(true); -// if (current.getFileFilterType() != null) { -// jComboBoxFileFilters.setSelectedItem(current.getFileFilterType()); -// } -// } else { -// jComboBoxFileFilters.setEnabled(false); -// jRadioButtonFromServer.setSelected(true); -// setEnable(jPanelReceiveFromServer); -// jTextFieldEmailAddr.setText(current.getUserName()); -// jPasswordField1.setText(current.getUserPsw()); -// if (current.getServerType() != null) { -// jComboBoxServerType.setSelectedItem(current.getServerType()); -// } -// port = current.getPort(); -// useSSL = current.isUseSSL(); -// jTextFieldServerAddr.setText(current.getServerURL()); -// } -// } - - public void unsetup(SpigotImporter importer) { - EmailImporter currentImporter = (EmailImporter) importer; - - boolean isFromLocalFile = jRadioButtonFromLocalFile.isSelected(); - currentImporter.setFromLocalFile(isFromLocalFile); - if (!isFromLocalFile) { - currentImporter.setFromLocalFile(false); - currentImporter.setUserName(jTextFieldEmailAddr.getText().trim()); - currentImporter.setUserPsw(String.copyValueOf(jPasswordField1.getPassword())); - currentImporter.setServerType(jComboBoxServerType.getSelectedItem().toString()); - currentImporter.setPort(port); - currentImporter.setUseSSL(useSSL); - currentImporter.setServerURL(jTextFieldServerAddr.getText().trim()); - } else { - currentImporter.setFromLocalFile(true); - EmailFilesFilter[] filters = - Lookup.getDefault().lookupAll(EmailFilesFilter.class).toArray(new EmailFilesFilter[0]); - for (EmailFilesFilter filter : filters) { - if (filter.getDisplayName().equals(jComboBoxFileFilters.getSelectedItem().toString())) { - currentImporter.setFileFilterType(filter.getDisplayName()); - break; - } - } - currentImporter.setFiles(parsedFiles); - } - //set cc line - currentImporter.setCcAsWeight(jCheckBoxUseCcLine.isSelected()); - //set bcc line - currentImporter.setBccAsWeight(jCheckBoxUseBccLine.isSelected()); - //set display name as the same node - currentImporter.setUseOneNodeIfSameDisplayName(jCheckBoxDisplayNameSameLabel.isSelected()); - - } - - public void setup(SpigotImporter importer) { - EmailImporter current = (EmailImporter) importer; - if (current == null) { - return; - } - if (current.isFromLocalFile()) { - jRadioButtonFromLocalFile.setSelected(true); - if (current.getFileFilterType() != null) { - jComboBoxFileFilters.setSelectedItem(current.getFileFilterType()); - } - } else { - jComboBoxFileFilters.setEnabled(false); - jRadioButtonFromServer.setSelected(true); - setEnable(jPanelReceiveFromServer); - jTextFieldEmailAddr.setText(current.getUserName()); - jPasswordField1.setText(current.getUserPsw()); - if (current.getServerType() != null) { - jComboBoxServerType.setSelectedItem(current.getServerType()); - } - port = current.getPort(); - useSSL = current.isUseSSL(); - jTextFieldServerAddr.setText(current.getServerURL()); - } - //cc line - boolean flag = current.hasCcAsWeight(); - if (flag) { - jCheckBoxUseCcLine.setSelected(true); - } - //bcc line - flag = current.hasBccAsWeight(); - if (flag) { - jCheckBoxUseBccLine.setSelected(true); - } - // - flag = current.isUseOneNodeIfSameDisplayName(); - if (flag) { - jCheckBoxDisplayNameSameLabel.setSelected(true); - } - } - - @Override - public void stateChanged(ChangeEvent e) { - - } - - boolean isValidPanel() { - if(jRadioButtonFromLocalFile.isSelected() && - jComboBoxFileFilters.getSelectedIndex() != 0){ - return true; - } - if(jRadioButtonFromServer.isSelected() && - !jTextFieldEmailAddr.getText().isEmpty() && - jPasswordField1.getPassword().length != 0 && - !jTextFieldServerAddr.getText().isEmpty() && - jComboBoxServerType.getSelectedIndex() >= 0){ - return true; - } - return false; - } - // End of variables declaration - -} diff --git a/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailVisualPanel2.form b/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailVisualPanel2.form deleted file mode 100644 index 5a36de7f12..0000000000 --- a/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailVisualPanel2.form +++ /dev/null @@ -1,441 +0,0 @@ -<?xml version="1.1" encoding="UTF-8" ?> - -<Form version="1.5" maxVersion="1.7" type="org.netbeans.modules.form.forminfo.JPanelFormInfo"> - <NonVisualComponents> - <Component class="javax.swing.ButtonGroup" name="buttonGroup1"> - </Component> - <Component class="javax.swing.ButtonGroup" name="buttonGroup2"> - </Component> - <Component class="javax.swing.ButtonGroup" name="buttonGroup3"> - </Component> - </NonVisualComponents> - <Properties> - <Property name="maximumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[570, 360]"/> - </Property> - <Property name="minimumSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[570, 360]"/> - </Property> - <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[570, 360]"/> - </Property> - </Properties> - <AuxValues> - <AuxValue name="FormSettings_autoResourcing" type="java.lang.Integer" value="1"/> - <AuxValue name="FormSettings_autoSetComponentName" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_generateFQN" type="java.lang.Boolean" value="true"/> - <AuxValue name="FormSettings_generateMnemonicsCode" type="java.lang.Boolean" value="true"/> - <AuxValue name="FormSettings_i18nAutoMode" type="java.lang.Boolean" value="true"/> - <AuxValue name="FormSettings_layoutCodeTarget" type="java.lang.Integer" value="1"/> - <AuxValue name="FormSettings_listenerGenerationStyle" type="java.lang.Integer" value="0"/> - <AuxValue name="FormSettings_variablesLocal" type="java.lang.Boolean" value="false"/> - <AuxValue name="FormSettings_variablesModifier" type="java.lang.Integer" value="2"/> - </AuxValues> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" attributes="0"> - <EmptySpace max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="jPanel1" alignment="0" max="32767" attributes="1"/> - <Group type="102" alignment="0" attributes="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="jCheckBoxSubjectInclude" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="jCheckBoxAttachement" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="jCheckBoxCc" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="jCheckBoxBcc" alignment="0" min="-2" max="-2" attributes="0"/> - </Group> - <EmptySpace min="-2" pref="7" max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="jRadioButtonHasAtta" min="-2" max="-2" attributes="1"/> - <Group type="103" alignment="0" groupAlignment="0" max="-2" attributes="0"> - <Component id="jTextFieldSubjectInclude" max="32767" attributes="1"/> - <Component id="jRadioButtonHasCc" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="jRadioButtonHasBcc" alignment="0" min="-2" max="-2" attributes="0"/> - </Group> - </Group> - <EmptySpace max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace min="-2" pref="10" max="-2" attributes="0"/> - <Component id="jCheckBoxMessageInclude1" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jTextFieldMessageInclude1" pref="163" max="32767" attributes="0"/> - </Group> - <Component id="jRadioButtonHasNoAtta" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="jRadioButtonHasNoBcc" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="jRadioButtonHasNoCc" alignment="0" min="-2" max="-2" attributes="0"/> - </Group> - </Group> - <Component id="jLabel1" alignment="0" min="-2" max="-2" attributes="0"/> - <Component id="jPanel3" alignment="1" max="32767" attributes="1"/> - </Group> - <EmptySpace max="-2" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="1" attributes="0"> - <EmptySpace max="-2" attributes="0"/> - <Component id="jLabel1" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jPanel1" max="32767" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jPanel3" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Group type="103" groupAlignment="3" attributes="0"> - <Component id="jCheckBoxSubjectInclude" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="jTextFieldSubjectInclude" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="jCheckBoxMessageInclude1" alignment="3" min="-2" max="-2" attributes="0"/> - <Component id="jTextFieldMessageInclude1" alignment="3" min="-2" max="-2" attributes="0"/> - </Group> - <EmptySpace type="separate" max="-2" attributes="0"/> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="jCheckBoxAttachement" alignment="0" min="-2" pref="17" max="-2" attributes="0"/> - <Group type="103" alignment="0" groupAlignment="3" attributes="0"> - <Component id="jRadioButtonHasNoAtta" alignment="3" min="-2" pref="17" max="-2" attributes="0"/> - <Component id="jRadioButtonHasAtta" alignment="3" min="-2" pref="17" max="-2" attributes="0"/> - </Group> - </Group> - <EmptySpace type="unrelated" max="-2" attributes="0"/> - <Group type="103" groupAlignment="2" attributes="0"> - <Component id="jCheckBoxCc" alignment="2" min="-2" max="-2" attributes="0"/> - <Component id="jRadioButtonHasCc" alignment="2" min="-2" pref="17" max="-2" attributes="0"/> - <Component id="jRadioButtonHasNoCc" alignment="2" min="-2" pref="17" max="-2" attributes="0"/> - </Group> - <EmptySpace min="-2" pref="7" max="-2" attributes="0"/> - <Group type="103" groupAlignment="2" attributes="0"> - <Component id="jCheckBoxBcc" alignment="2" min="-2" max="-2" attributes="0"/> - <Component id="jRadioButtonHasBcc" alignment="2" min="-2" pref="15" max="-2" attributes="0"/> - <Component id="jRadioButtonHasNoBcc" alignment="2" min="-2" pref="19" max="-2" attributes="0"/> - </Group> - <EmptySpace max="-2" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Component class="javax.swing.JLabel" name="jLabel1"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel2.jLabel1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Container class="javax.swing.JPanel" name="jPanel1"> - <Properties> - <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> - <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> - <TitledBorder/> - </Border> - </Property> - </Properties> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Component id="jCheckBoxEmailAddrFilter" alignment="0" pref="657" max="32767" attributes="1"/> - <Group type="102" alignment="1" attributes="0"> - <EmptySpace max="-2" attributes="0"/> - <Component id="importCSVButton" min="-2" max="-2" attributes="0"/> - </Group> - <Component id="jScrollPane1" alignment="0" pref="657" max="32767" attributes="1"/> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <Component id="jCheckBoxEmailAddrFilter" min="-2" max="-2" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="jScrollPane1" pref="56" max="32767" attributes="0"/> - <EmptySpace max="-2" attributes="0"/> - <Component id="importCSVButton" min="-2" max="-2" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Component class="javax.swing.JCheckBox" name="jCheckBoxEmailAddrFilter"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel2.jCheckBoxEmailAddrFilter.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jCheckBoxEmailAddrFilterActionPerformed"/> - </Events> - </Component> - <Container class="javax.swing.JScrollPane" name="jScrollPane1"> - <AuxValues> - <AuxValue name="autoScrollPane" type="java.lang.Boolean" value="true"/> - </AuxValues> - - <Layout class="org.netbeans.modules.form.compat2.layouts.support.JScrollPaneSupportLayout"/> - <SubComponents> - <Component class="javax.swing.JTable" name="jTableFilter"> - <Properties> - <Property name="model" type="javax.swing.table.TableModel" editor="org.netbeans.modules.form.RADConnectionPropertyEditor" postCode="javax.swing.JComboBox comboBox = new javax.swing.JComboBox(); comboBox.addItem("All"); comboBox.addItem("From"); comboBox.addItem("To"); comboBox.addItem("Cc"); comboBox.addItem("Bcc"); javax.swing.table.TableColumn tableColumn = jTableFilter.getColumn(org.openide.util.NbBundle.getMessage( EmailVisualPanel2.class, "EmailVisualPanel2.jTableFilter.column2.text")); tableColumn.setCellEditor(new javax.swing.DefaultCellEditor(comboBox)); comboBox.addItemListener(new java.awt.event.ItemListener(){ public void itemStateChanged(java.awt.event.ItemEvent e) { if(!e.getItem().equals("")){ ((javax.swing.table.DefaultTableModel)jTableFilter.getModel()).addRow(new java.util.Vector(2)); } } });"> - <Connection code="filterTableModel" type="code"/> - </Property> - <Property name="tableHeader" type="javax.swing.table.JTableHeader" editor="org.netbeans.modules.form.editors2.JTableHeaderEditor"> - <TableHeader reorderingAllowed="true" resizingAllowed="true"/> - </Property> - </Properties> - <AuxValues> - <AuxValue name="JavaCodeGenerator_VariableModifier" type="java.lang.Integer" value="18"/> - </AuxValues> - </Component> - </SubComponents> - </Container> - <Component class="javax.swing.JButton" name="importCSVButton"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel2.importCSVButton.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - <Property name="toolTipText" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel2.importCSVButton.toolTipText" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - <Property name="enabled" type="boolean" value="false"/> - </Properties> - </Component> - </SubComponents> - </Container> - <Container class="javax.swing.JPanel" name="jPanel3"> - <Properties> - <Property name="border" type="javax.swing.border.Border" editor="org.netbeans.modules.form.editors2.BorderEditor"> - <Border info="org.netbeans.modules.form.compat2.border.TitledBorderInfo"> - <TitledBorder title="Date range"> - <ResourceString PropertyName="titleX" bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel2.jPanel3.border.title" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </TitledBorder> - </Border> - </Property> - </Properties> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" attributes="0"> - <EmptySpace min="-2" max="-2" attributes="0"/> - <Component id="jCheckBoxDayAfter" min="-2" max="-2" attributes="0"/> - <EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/> - <Component id="jPanelDayAfter" min="-2" max="-2" attributes="0"/> - <EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/> - <Component id="jCheckBoxDayBefore" min="-2" max="-2" attributes="0"/> - <EmptySpace type="unrelated" min="-2" max="-2" attributes="0"/> - <Component id="jPanelDayBefore" min="-2" max="-2" attributes="0"/> - <EmptySpace pref="81" max="32767" attributes="1"/> - </Group> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <Group type="102" alignment="0" max="-2" attributes="0"> - <Group type="103" groupAlignment="0" max="-2" attributes="0"> - <Component id="jPanelDayBefore" alignment="0" max="32767" attributes="1"/> - <Component id="jCheckBoxDayAfter" alignment="0" pref="19" max="32767" attributes="1"/> - <Component id="jPanelDayAfter" alignment="1" pref="19" max="32767" attributes="1"/> - <Component id="jCheckBoxDayBefore" alignment="0" pref="19" max="32767" attributes="1"/> - </Group> - <EmptySpace min="-2" pref="20" max="-2" attributes="0"/> - </Group> - </Group> - </DimensionLayout> - </Layout> - <SubComponents> - <Component class="javax.swing.JCheckBox" name="jCheckBoxDayAfter"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel2.jCheckBoxDayAfter.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jCheckBoxDayAfterActionPerformed"/> - </Events> - </Component> - <Component class="javax.swing.JCheckBox" name="jCheckBoxDayBefore"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel2.jCheckBoxDayBefore.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jCheckBoxDayBeforeActionPerformed"/> - </Events> - </Component> - <Container class="javax.swing.JPanel" name="jPanelDayAfter"> - <Properties> - <Property name="preferredSize" type="java.awt.Dimension" editor="org.netbeans.beaninfo.editors.DimensionEditor"> - <Dimension value="[132, 20]"/> - </Property> - </Properties> - <AuxValues> - <AuxValue name="JavaCodeGenerator_InitCodePre" type="java.lang.String" value="jDateChooserAfter = new com.toedter.calendar.JDateChooser(); jDateChooserAfter.setSize(130, 20); jPanelDayAfter.add(jDateChooserAfter,java.awt.BorderLayout.CENTER); jDateChooserAfter.setDateFormatString(EmailImporter.DATEFORMAT);"/> - </AuxValues> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <EmptySpace min="0" pref="132" max="32767" attributes="0"/> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <EmptySpace min="0" pref="19" max="32767" attributes="0"/> - </Group> - </DimensionLayout> - </Layout> - </Container> - <Container class="javax.swing.JPanel" name="jPanelDayBefore"> - <AuxValues> - <AuxValue name="JavaCodeGenerator_InitCodePre" type="java.lang.String" value="jDateChooserBefore = new com.toedter.calendar.JDateChooser(); jDateChooserBefore.setSize(130, 20); jPanelDayBefore.add(jDateChooserBefore,java.awt.BorderLayout.CENTER); jDateChooserBefore.setDateFormatString(EmailImporter.DATEFORMAT);"/> - </AuxValues> - - <Layout> - <DimensionLayout dim="0"> - <Group type="103" groupAlignment="0" attributes="0"> - <EmptySpace min="0" pref="132" max="32767" attributes="0"/> - </Group> - </DimensionLayout> - <DimensionLayout dim="1"> - <Group type="103" groupAlignment="0" attributes="0"> - <EmptySpace min="0" pref="19" max="32767" attributes="0"/> - </Group> - </DimensionLayout> - </Layout> - </Container> - </SubComponents> - </Container> - <Component class="javax.swing.JCheckBox" name="jCheckBoxMessageInclude1"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel2.jCheckBoxMessageInclude1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jCheckBoxMessageInclude1ActionPerformed"/> - </Events> - </Component> - <Component class="javax.swing.JTextField" name="jTextFieldMessageInclude1"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel2.jTextFieldMessageInclude1.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JRadioButton" name="jRadioButtonHasNoAtta"> - <Properties> - <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor"> - <ComponentRef name="buttonGroup1"/> - </Property> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel2.jRadioButtonHasNoAtta.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JRadioButton" name="jRadioButtonHasNoCc"> - <Properties> - <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor"> - <ComponentRef name="buttonGroup2"/> - </Property> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel2.jRadioButtonHasNoCc.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JRadioButton" name="jRadioButtonHasNoBcc"> - <Properties> - <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor"> - <ComponentRef name="buttonGroup3"/> - </Property> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel2.jRadioButtonHasNoBcc.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JRadioButton" name="jRadioButtonHasBcc"> - <Properties> - <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor"> - <ComponentRef name="buttonGroup3"/> - </Property> - <Property name="selected" type="boolean" value="true"/> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel2.jRadioButtonHasBcc.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JRadioButton" name="jRadioButtonHasCc"> - <Properties> - <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor"> - <ComponentRef name="buttonGroup2"/> - </Property> - <Property name="selected" type="boolean" value="true"/> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel2.jRadioButtonHasCc.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JTextField" name="jTextFieldSubjectInclude"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel2.jTextFieldSubjectInclude.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - </Component> - <Component class="javax.swing.JCheckBox" name="jCheckBoxSubjectInclude"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel2.jCheckBoxSubjectInclude.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jCheckBoxSubjectIncludeActionPerformed"/> - </Events> - </Component> - <Component class="javax.swing.JCheckBox" name="jCheckBoxAttachement"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel2.jCheckBoxAttachement.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jCheckBoxAttachementActionPerformed"/> - </Events> - </Component> - <Component class="javax.swing.JCheckBox" name="jCheckBoxCc"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel2.jCheckBoxCc.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jCheckBoxCcActionPerformed"/> - </Events> - </Component> - <Component class="javax.swing.JCheckBox" name="jCheckBoxBcc"> - <Properties> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel2.jCheckBoxBcc.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jCheckBoxBccActionPerformed"/> - </Events> - </Component> - <Component class="javax.swing.JRadioButton" name="jRadioButtonHasAtta"> - <Properties> - <Property name="buttonGroup" type="javax.swing.ButtonGroup" editor="org.netbeans.modules.form.RADComponent$ButtonGroupPropertyEditor"> - <ComponentRef name="buttonGroup1"/> - </Property> - <Property name="selected" type="boolean" value="true"/> - <Property name="text" type="java.lang.String" editor="org.netbeans.modules.i18n.form.FormI18nStringEditor"> - <ResourceString bundle="org/gephi/ui/spigot/plugin/email/Bundle.properties" key="EmailVisualPanel2.jRadioButtonHasAtta.text" replaceFormat="org.openide.util.NbBundle.getMessage({sourceFileName}.class, "{key}")"/> - </Property> - </Properties> - <Events> - <EventHandler event="actionPerformed" listener="java.awt.event.ActionListener" parameters="java.awt.event.ActionEvent" handler="jRadioButtonHasAttaActionPerformed"/> - </Events> - </Component> - </SubComponents> -</Form> diff --git a/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailVisualPanel2.java b/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailVisualPanel2.java deleted file mode 100644 index 6b24e7f362..0000000000 --- a/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailVisualPanel2.java +++ /dev/null @@ -1,852 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du <duyi001@gmail.com> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ui.spigot.plugin.email; - -import com.csvreader.CsvReader; -import java.awt.Component; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.io.File; -import java.io.FileInputStream; -import java.io.IOException; -import java.nio.charset.Charset; -import java.util.ArrayList; -import java.util.EventObject; -import java.util.List; -import javax.swing.JFileChooser; -import javax.swing.JPanel; -import javax.swing.JTable; -import javax.swing.event.CellEditorListener; -import javax.swing.table.DefaultTableModel; -import javax.swing.table.TableCellEditor; -import org.gephi.io.importer.spi.SpigotImporter; -import org.gephi.io.spigot.plugin.EmailImporter; -import org.gephi.io.spigot.plugin.email.EmailDataType; -import org.gephi.ui.utils.DialogFileFilter; -import org.openide.util.Exceptions; -import org.openide.util.NbBundle; -import org.openide.util.NbPreferences; - -public final class EmailVisualPanel2 extends JPanel { - - private static final String CSV_LAST_PATH = "EmailVisualPanel2_csv_lastpath"; - - /** Creates new form EmailVisualPanel2 */ - public EmailVisualPanel2() { - configFilterTableModel(); - initComponents(); - setEnableFilters(); - - importCSVButton.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - javax.swing.JFileChooser fileChooser = new javax.swing.JFileChooser(); - fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); - DialogFileFilter fileFilter = new DialogFileFilter(NbBundle.getMessage(EmailVisualPanel2.class, "fileType_CSV_Name")); - fileFilter.addExtension("csv"); - fileChooser.setFileFilter(fileFilter); - String lastPath = NbPreferences.forModule(EmailVisualPanel2.class).get(CSV_LAST_PATH, ""); - fileChooser.setCurrentDirectory(new File(lastPath)); - int returnValue = fileChooser.showOpenDialog(EmailVisualPanel2.this); - if (returnValue == javax.swing.JFileChooser.APPROVE_OPTION) { - NbPreferences.forModule(EmailVisualPanel2.class).put(CSV_LAST_PATH, fileChooser.getCurrentDirectory().getAbsolutePath()); - File csvFile = fileChooser.getSelectedFile(); - try { - CsvReader csvReader = new CsvReader(new FileInputStream(csvFile), Charset.forName("UTF-8")); - csvReader.setSkipEmptyRecords(true); - List<String[]> rows = new ArrayList<String[]>(); - while (csvReader.readRecord()) { - String[] values = csvReader.getValues(); - if (values.length > 0) { - String email = values[0]; - String type = values.length > 1 ? values[1] : "All"; - if (!email.isEmpty() && (type.equals("From") - || type.equals("To") - || type.equals("Cc") - || type.equals("Bcc") - || type.equals("All"))) { - rows.add(new String[]{email, type}); - } - } - } - csvReader.close(); - - //Clean Rows - filterTableModel.setRowCount(0); - - //Add - for (String[] row : rows) { - filterTableModel.addRow(row); - } - } catch (IOException ex) { - Exceptions.printStackTrace(ex); - } - - } - - } - }); - } - - @Override - public String getName() { - return "Do Filtering"; - } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents - private void initComponents() { - - buttonGroup1 = new javax.swing.ButtonGroup(); - buttonGroup2 = new javax.swing.ButtonGroup(); - buttonGroup3 = new javax.swing.ButtonGroup(); - jLabel1 = new javax.swing.JLabel(); - jPanel1 = new javax.swing.JPanel(); - jCheckBoxEmailAddrFilter = new javax.swing.JCheckBox(); - jScrollPane1 = new javax.swing.JScrollPane(); - importCSVButton = new javax.swing.JButton(); - jPanel3 = new javax.swing.JPanel(); - jCheckBoxDayAfter = new javax.swing.JCheckBox(); - jCheckBoxDayBefore = new javax.swing.JCheckBox(); - jPanelDayAfter = new javax.swing.JPanel(); - jPanelDayBefore = new javax.swing.JPanel(); - jCheckBoxMessageInclude1 = new javax.swing.JCheckBox(); - jTextFieldMessageInclude1 = new javax.swing.JTextField(); - jRadioButtonHasNoAtta = new javax.swing.JRadioButton(); - jRadioButtonHasNoCc = new javax.swing.JRadioButton(); - jRadioButtonHasNoBcc = new javax.swing.JRadioButton(); - jRadioButtonHasBcc = new javax.swing.JRadioButton(); - jRadioButtonHasCc = new javax.swing.JRadioButton(); - jTextFieldSubjectInclude = new javax.swing.JTextField(); - jCheckBoxSubjectInclude = new javax.swing.JCheckBox(); - jCheckBoxAttachement = new javax.swing.JCheckBox(); - jCheckBoxCc = new javax.swing.JCheckBox(); - jCheckBoxBcc = new javax.swing.JCheckBox(); - jRadioButtonHasAtta = new javax.swing.JRadioButton(); - - setMaximumSize(new java.awt.Dimension(570, 360)); - setMinimumSize(new java.awt.Dimension(570, 360)); - setPreferredSize(new java.awt.Dimension(570, 360)); - - org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(EmailVisualPanel2.class, "EmailVisualPanel2.jLabel1.text")); // NOI18N - - jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder("")); - - org.openide.awt.Mnemonics.setLocalizedText(jCheckBoxEmailAddrFilter, org.openide.util.NbBundle.getMessage(EmailVisualPanel2.class, "EmailVisualPanel2.jCheckBoxEmailAddrFilter.text")); // NOI18N - jCheckBoxEmailAddrFilter.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jCheckBoxEmailAddrFilterActionPerformed(evt); - } - }); - - jTableFilter.setModel(filterTableModel); - javax.swing.JComboBox comboBox = new javax.swing.JComboBox(); - comboBox.addItem("All"); - comboBox.addItem("From"); - comboBox.addItem("To"); - comboBox.addItem("Cc"); - comboBox.addItem("Bcc"); - javax.swing.table.TableColumn tableColumn = jTableFilter.getColumn(org.openide.util.NbBundle.getMessage( - EmailVisualPanel2.class, "EmailVisualPanel2.jTableFilter.column2.text")); - tableColumn.setCellEditor(new javax.swing.DefaultCellEditor(comboBox)); - comboBox.addItemListener(new java.awt.event.ItemListener(){ - public void itemStateChanged(java.awt.event.ItemEvent e) { - if(!e.getItem().equals("")){ - ((javax.swing.table.DefaultTableModel)jTableFilter.getModel()).addRow(new java.util.Vector(2)); - } - } - }); - jScrollPane1.setViewportView(jTableFilter); - - org.openide.awt.Mnemonics.setLocalizedText(importCSVButton, org.openide.util.NbBundle.getMessage(EmailVisualPanel2.class, "EmailVisualPanel2.importCSVButton.text")); // NOI18N - importCSVButton.setToolTipText(org.openide.util.NbBundle.getMessage(EmailVisualPanel2.class, "EmailVisualPanel2.importCSVButton.toolTipText")); // NOI18N - importCSVButton.setEnabled(false); - - javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); - jPanel1.setLayout(jPanel1Layout); - jPanel1Layout.setHorizontalGroup( - jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jCheckBoxEmailAddrFilter, javax.swing.GroupLayout.DEFAULT_SIZE, 657, Short.MAX_VALUE) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() - .addContainerGap() - .addComponent(importCSVButton)) - .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 657, Short.MAX_VALUE) - ); - jPanel1Layout.setVerticalGroup( - jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel1Layout.createSequentialGroup() - .addComponent(jCheckBoxEmailAddrFilter) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 56, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(importCSVButton)) - ); - - jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(org.openide.util.NbBundle.getMessage(EmailVisualPanel2.class, "EmailVisualPanel2.jPanel3.border.title"))); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(jCheckBoxDayAfter, org.openide.util.NbBundle.getMessage(EmailVisualPanel2.class, "EmailVisualPanel2.jCheckBoxDayAfter.text")); // NOI18N - jCheckBoxDayAfter.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jCheckBoxDayAfterActionPerformed(evt); - } - }); - - org.openide.awt.Mnemonics.setLocalizedText(jCheckBoxDayBefore, org.openide.util.NbBundle.getMessage(EmailVisualPanel2.class, "EmailVisualPanel2.jCheckBoxDayBefore.text")); // NOI18N - jCheckBoxDayBefore.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jCheckBoxDayBeforeActionPerformed(evt); - } - }); - - jDateChooserAfter = new com.toedter.calendar.JDateChooser(); - jDateChooserAfter.setSize(130, 20); - jPanelDayAfter.add(jDateChooserAfter,java.awt.BorderLayout.CENTER); - jDateChooserAfter.setDateFormatString(EmailImporter.DATEFORMAT); - jPanelDayAfter.setPreferredSize(new java.awt.Dimension(132, 20)); - - javax.swing.GroupLayout jPanelDayAfterLayout = new javax.swing.GroupLayout(jPanelDayAfter); - jPanelDayAfter.setLayout(jPanelDayAfterLayout); - jPanelDayAfterLayout.setHorizontalGroup( - jPanelDayAfterLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 132, Short.MAX_VALUE) - ); - jPanelDayAfterLayout.setVerticalGroup( - jPanelDayAfterLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 19, Short.MAX_VALUE) - ); - - jDateChooserBefore = new com.toedter.calendar.JDateChooser(); - jDateChooserBefore.setSize(130, 20); - jPanelDayBefore.add(jDateChooserBefore,java.awt.BorderLayout.CENTER); - jDateChooserBefore.setDateFormatString(EmailImporter.DATEFORMAT); - - javax.swing.GroupLayout jPanelDayBeforeLayout = new javax.swing.GroupLayout(jPanelDayBefore); - jPanelDayBefore.setLayout(jPanelDayBeforeLayout); - jPanelDayBeforeLayout.setHorizontalGroup( - jPanelDayBeforeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 132, Short.MAX_VALUE) - ); - jPanelDayBeforeLayout.setVerticalGroup( - jPanelDayBeforeLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 19, Short.MAX_VALUE) - ); - - javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); - jPanel3.setLayout(jPanel3Layout); - jPanel3Layout.setHorizontalGroup( - jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel3Layout.createSequentialGroup() - .addContainerGap() - .addComponent(jCheckBoxDayAfter) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(jPanelDayAfter, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(jCheckBoxDayBefore) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(jPanelDayBefore, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(81, Short.MAX_VALUE)) - ); - jPanel3Layout.setVerticalGroup( - jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(jPanel3Layout.createSequentialGroup() - .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(jPanelDayBefore, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jCheckBoxDayAfter, javax.swing.GroupLayout.PREFERRED_SIZE, 19, Short.MAX_VALUE) - .addComponent(jPanelDayAfter, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 19, Short.MAX_VALUE) - .addComponent(jCheckBoxDayBefore, javax.swing.GroupLayout.PREFERRED_SIZE, 19, Short.MAX_VALUE)) - .addGap(20, 20, 20)) - ); - - org.openide.awt.Mnemonics.setLocalizedText(jCheckBoxMessageInclude1, org.openide.util.NbBundle.getMessage(EmailVisualPanel2.class, "EmailVisualPanel2.jCheckBoxMessageInclude1.text")); // NOI18N - jCheckBoxMessageInclude1.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jCheckBoxMessageInclude1ActionPerformed(evt); - } - }); - - jTextFieldMessageInclude1.setText(org.openide.util.NbBundle.getMessage(EmailVisualPanel2.class, "EmailVisualPanel2.jTextFieldMessageInclude1.text")); // NOI18N - - buttonGroup1.add(jRadioButtonHasNoAtta); - org.openide.awt.Mnemonics.setLocalizedText(jRadioButtonHasNoAtta, org.openide.util.NbBundle.getMessage(EmailVisualPanel2.class, "EmailVisualPanel2.jRadioButtonHasNoAtta.text")); // NOI18N - - buttonGroup2.add(jRadioButtonHasNoCc); - org.openide.awt.Mnemonics.setLocalizedText(jRadioButtonHasNoCc, org.openide.util.NbBundle.getMessage(EmailVisualPanel2.class, "EmailVisualPanel2.jRadioButtonHasNoCc.text")); // NOI18N - - buttonGroup3.add(jRadioButtonHasNoBcc); - org.openide.awt.Mnemonics.setLocalizedText(jRadioButtonHasNoBcc, org.openide.util.NbBundle.getMessage(EmailVisualPanel2.class, "EmailVisualPanel2.jRadioButtonHasNoBcc.text")); // NOI18N - - buttonGroup3.add(jRadioButtonHasBcc); - jRadioButtonHasBcc.setSelected(true); - org.openide.awt.Mnemonics.setLocalizedText(jRadioButtonHasBcc, org.openide.util.NbBundle.getMessage(EmailVisualPanel2.class, "EmailVisualPanel2.jRadioButtonHasBcc.text")); // NOI18N - - buttonGroup2.add(jRadioButtonHasCc); - jRadioButtonHasCc.setSelected(true); - org.openide.awt.Mnemonics.setLocalizedText(jRadioButtonHasCc, org.openide.util.NbBundle.getMessage(EmailVisualPanel2.class, "EmailVisualPanel2.jRadioButtonHasCc.text")); // NOI18N - - jTextFieldSubjectInclude.setText(org.openide.util.NbBundle.getMessage(EmailVisualPanel2.class, "EmailVisualPanel2.jTextFieldSubjectInclude.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(jCheckBoxSubjectInclude, org.openide.util.NbBundle.getMessage(EmailVisualPanel2.class, "EmailVisualPanel2.jCheckBoxSubjectInclude.text")); // NOI18N - jCheckBoxSubjectInclude.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jCheckBoxSubjectIncludeActionPerformed(evt); - } - }); - - org.openide.awt.Mnemonics.setLocalizedText(jCheckBoxAttachement, org.openide.util.NbBundle.getMessage(EmailVisualPanel2.class, "EmailVisualPanel2.jCheckBoxAttachement.text")); // NOI18N - jCheckBoxAttachement.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jCheckBoxAttachementActionPerformed(evt); - } - }); - - org.openide.awt.Mnemonics.setLocalizedText(jCheckBoxCc, org.openide.util.NbBundle.getMessage(EmailVisualPanel2.class, "EmailVisualPanel2.jCheckBoxCc.text")); // NOI18N - jCheckBoxCc.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jCheckBoxCcActionPerformed(evt); - } - }); - - org.openide.awt.Mnemonics.setLocalizedText(jCheckBoxBcc, org.openide.util.NbBundle.getMessage(EmailVisualPanel2.class, "EmailVisualPanel2.jCheckBoxBcc.text")); // NOI18N - jCheckBoxBcc.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jCheckBoxBccActionPerformed(evt); - } - }); - - buttonGroup1.add(jRadioButtonHasAtta); - jRadioButtonHasAtta.setSelected(true); - org.openide.awt.Mnemonics.setLocalizedText(jRadioButtonHasAtta, org.openide.util.NbBundle.getMessage(EmailVisualPanel2.class, "EmailVisualPanel2.jRadioButtonHasAtta.text")); // NOI18N - jRadioButtonHasAtta.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - jRadioButtonHasAttaActionPerformed(evt); - } - }); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jCheckBoxSubjectInclude) - .addComponent(jCheckBoxAttachement) - .addComponent(jCheckBoxCc) - .addComponent(jCheckBoxBcc)) - .addGap(7, 7, 7) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jRadioButtonHasAtta) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(jTextFieldSubjectInclude) - .addComponent(jRadioButtonHasCc) - .addComponent(jRadioButtonHasBcc))) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGap(10, 10, 10) - .addComponent(jCheckBoxMessageInclude1) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jTextFieldMessageInclude1, javax.swing.GroupLayout.DEFAULT_SIZE, 163, Short.MAX_VALUE)) - .addComponent(jRadioButtonHasNoAtta) - .addComponent(jRadioButtonHasNoBcc) - .addComponent(jRadioButtonHasNoCc))) - .addComponent(jLabel1) - .addComponent(jPanel3, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addContainerGap()) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap() - .addComponent(jLabel1) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(jCheckBoxSubjectInclude) - .addComponent(jTextFieldSubjectInclude, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jCheckBoxMessageInclude1) - .addComponent(jTextFieldMessageInclude1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jCheckBoxAttachement, javax.swing.GroupLayout.PREFERRED_SIZE, 17, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(jRadioButtonHasNoAtta, javax.swing.GroupLayout.PREFERRED_SIZE, 17, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jRadioButtonHasAtta, javax.swing.GroupLayout.PREFERRED_SIZE, 17, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) - .addComponent(jCheckBoxCc) - .addComponent(jRadioButtonHasCc, javax.swing.GroupLayout.PREFERRED_SIZE, 17, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jRadioButtonHasNoCc, javax.swing.GroupLayout.PREFERRED_SIZE, 17, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(7, 7, 7) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.CENTER) - .addComponent(jCheckBoxBcc) - .addComponent(jRadioButtonHasBcc, javax.swing.GroupLayout.PREFERRED_SIZE, 15, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jRadioButtonHasNoBcc, javax.swing.GroupLayout.PREFERRED_SIZE, 19, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap()) - ); - }// </editor-fold>//GEN-END:initComponents - - private void jCheckBoxEmailAddrFilterActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxEmailAddrFilterActionPerformed - if (jCheckBoxEmailAddrFilter.isSelected()) { - jTableFilter.setEnabled(true); - importCSVButton.setEnabled(true); - } else { - jTableFilter.setEnabled(false); - importCSVButton.setEnabled(false); - } -}//GEN-LAST:event_jCheckBoxEmailAddrFilterActionPerformed - - private void jCheckBoxDayAfterActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxDayAfterActionPerformed - if (jCheckBoxDayAfter.isSelected()) { - jDateChooserAfter.setEnabled(true); - } else { - jDateChooserAfter.setEnabled(false); - } -}//GEN-LAST:event_jCheckBoxDayAfterActionPerformed - - private void jCheckBoxDayBeforeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxDayBeforeActionPerformed - if (jCheckBoxDayBefore.isSelected()) { - jDateChooserBefore.setEnabled(true); - } else { - jDateChooserBefore.setEnabled(false); - } -}//GEN-LAST:event_jCheckBoxDayBeforeActionPerformed - - private void jCheckBoxAttachementActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxAttachementActionPerformed - if (jCheckBoxAttachement.isSelected()) { - jRadioButtonHasAtta.setEnabled(true); - jRadioButtonHasNoAtta.setEnabled(true); - } else { - jRadioButtonHasAtta.setEnabled(false); - jRadioButtonHasNoAtta.setEnabled(false); - } -}//GEN-LAST:event_jCheckBoxAttachementActionPerformed - - private void jRadioButtonHasAttaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButtonHasAttaActionPerformed - // TODO add your handling code here: -}//GEN-LAST:event_jRadioButtonHasAttaActionPerformed - - private void jCheckBoxCcActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxCcActionPerformed - if (jCheckBoxCc.isSelected()) { - jRadioButtonHasCc.setEnabled(true); - jRadioButtonHasNoCc.setEnabled(true); - } else { - jRadioButtonHasCc.setEnabled(false); - jRadioButtonHasNoCc.setEnabled(false); - } -}//GEN-LAST:event_jCheckBoxCcActionPerformed - - private void jCheckBoxBccActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxBccActionPerformed - if (jCheckBoxBcc.isSelected()) { - jRadioButtonHasBcc.setEnabled(true); - jRadioButtonHasNoBcc.setEnabled(true); - } else { - jRadioButtonHasBcc.setEnabled(false); - jRadioButtonHasNoBcc.setEnabled(false); - } -}//GEN-LAST:event_jCheckBoxBccActionPerformed - - private void jCheckBoxSubjectIncludeActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxSubjectIncludeActionPerformed - if (jCheckBoxSubjectInclude.isSelected()) { - jTextFieldSubjectInclude.setEnabled(true); - } else { - jTextFieldSubjectInclude.setEnabled(false); - } -}//GEN-LAST:event_jCheckBoxSubjectIncludeActionPerformed - - private void jCheckBoxMessageInclude1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jCheckBoxMessageInclude1ActionPerformed - if (jCheckBoxMessageInclude1.isSelected()) { - jTextFieldMessageInclude1.setEnabled(true); - } else { - jTextFieldMessageInclude1.setEnabled(false); - } -}//GEN-LAST:event_jCheckBoxMessageInclude1ActionPerformed - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.ButtonGroup buttonGroup1; - private javax.swing.ButtonGroup buttonGroup2; - private javax.swing.ButtonGroup buttonGroup3; - private javax.swing.JButton importCSVButton; - private javax.swing.JCheckBox jCheckBoxAttachement; - private javax.swing.JCheckBox jCheckBoxBcc; - private javax.swing.JCheckBox jCheckBoxCc; - private javax.swing.JCheckBox jCheckBoxDayAfter; - private javax.swing.JCheckBox jCheckBoxDayBefore; - private javax.swing.JCheckBox jCheckBoxEmailAddrFilter; - private javax.swing.JCheckBox jCheckBoxMessageInclude1; - private javax.swing.JCheckBox jCheckBoxSubjectInclude; - private javax.swing.JLabel jLabel1; - private javax.swing.JPanel jPanel1; - private javax.swing.JPanel jPanel3; - private javax.swing.JPanel jPanelDayAfter; - private javax.swing.JPanel jPanelDayBefore; - private javax.swing.JRadioButton jRadioButtonHasAtta; - private javax.swing.JRadioButton jRadioButtonHasBcc; - private javax.swing.JRadioButton jRadioButtonHasCc; - private javax.swing.JRadioButton jRadioButtonHasNoAtta; - private javax.swing.JRadioButton jRadioButtonHasNoBcc; - private javax.swing.JRadioButton jRadioButtonHasNoCc; - private javax.swing.JScrollPane jScrollPane1; - private final javax.swing.JTable jTableFilter = new javax.swing.JTable(); - private javax.swing.JTextField jTextFieldMessageInclude1; - private javax.swing.JTextField jTextFieldSubjectInclude; - // End of variables declaration//GEN-END:variables - private com.toedter.calendar.JDateChooser jDateChooserBefore; - private com.toedter.calendar.JDateChooser jDateChooserAfter; - private DefaultTableModel filterTableModel; - - private void configFilterTableModel() { - - filterTableModel = new DefaultTableModel(); - filterTableModel.setColumnCount(2); - Object[] col = {org.openide.util.NbBundle.getMessage(EmailVisualPanel2.class, "EmailVisualPanel2.jTableFilter.column1.text"), - org.openide.util.NbBundle.getMessage(EmailVisualPanel2.class, "EmailVisualPanel2.jTableFilter.column2.text")}; - filterTableModel.setColumnIdentifiers(col); - filterTableModel.setRowCount(1); - filterTableModel.setValueAt("mail", 0, 0); - filterTableModel.setValueAt("All", 0, 1); - } - - public void unsetup(SpigotImporter importer) { - EmailImporter currentImporter = (EmailImporter) importer; - - boolean hasFilter = true; - currentImporter.setFilter(hasFilter); - currentImporter.getFilter().clear(); - if (hasFilter) { - //set email address filter to datastructure - if (jCheckBoxEmailAddrFilter.isSelected()) { - DefaultTableModel model = (DefaultTableModel) jTableFilter.getModel(); - for (int i = 0; i < model.getRowCount(); i++) { - Object filter = model.getValueAt(i, 0); - String type = (String) model.getValueAt(i, 1); - if (type != null && filter != null && !type.equals("") && !filter.equals("")) { - if (type.equalsIgnoreCase("From") || type.equalsIgnoreCase("All")) { - String str = currentImporter.getFilter().get(EmailImporter.FILTER_EMAIL_ADDRESS_FROM); - str = str == null ? filter.toString() : str + EmailDataType.SPLIT_CHAR + filter.toString(); - currentImporter.setFilterProperty(EmailImporter.FILTER_EMAIL_ADDRESS_FROM, str); - } - if (type.equalsIgnoreCase("To") || type.equalsIgnoreCase("All")) { - String str = currentImporter.getFilter().get(EmailImporter.FILTER_EMAIL_ADDRESS_TO); - str = str == null ? filter.toString() : str + EmailDataType.SPLIT_CHAR + filter.toString(); - currentImporter.setFilterProperty(EmailImporter.FILTER_EMAIL_ADDRESS_TO, str); - } - if (type.equalsIgnoreCase("Cc") || type.equalsIgnoreCase("All")) { - String str = currentImporter.getFilter().get(EmailImporter.FILTER_EMAIL_ADDRESS_CC); - str = str == null ? filter.toString() : str + EmailDataType.SPLIT_CHAR + filter.toString(); - currentImporter.setFilterProperty(EmailImporter.FILTER_EMAIL_ADDRESS_CC, str); - } - if (type.equalsIgnoreCase("Bcc") || type.equalsIgnoreCase("All")) { - String str = currentImporter.getFilter().get(EmailImporter.FILTER_EMAIL_ADDRESS_BCC); - str = str == null ? filter.toString() : str + EmailDataType.SPLIT_CHAR + filter.toString(); - currentImporter.setFilterProperty(EmailImporter.FILTER_EMAIL_ADDRESS_BCC, str); - } - } - } - } - //set date range - if (jCheckBoxDayAfter.isSelected()) { - String formatedDate = ""; - for (java.awt.Component cc : jDateChooserAfter.getComponents()) { - if (cc instanceof javax.swing.JTextField) { - formatedDate = ((javax.swing.JTextField) cc).getText(); - } - } - currentImporter.setFilterProperty(EmailImporter.FILTER_DATERANGE_AFTER, formatedDate); - } - if (jCheckBoxDayBefore.isSelected()) { - String formatedDate = ""; - for (java.awt.Component cc : jCheckBoxDayBefore.getComponents()) { - if (cc instanceof javax.swing.JTextField) { - formatedDate = ((javax.swing.JTextField) cc).getText(); - } - } - currentImporter.setFilterProperty(EmailImporter.FILTER_DATERANGE_BEFORE, formatedDate); - } - //set attachment - if (jCheckBoxAttachement.isSelected()) { - currentImporter.setFilterProperty(EmailImporter.FILTER_ATTACHMENT, Boolean.toString(jRadioButtonHasAtta.isSelected())); - } - //set cc - if (jCheckBoxCc.isSelected()) { - currentImporter.setFilterProperty(EmailImporter.FILTER_CC, Boolean.toString(jRadioButtonHasCc.isSelected())); - } - //set bcc - if (jCheckBoxBcc.isSelected()) { - currentImporter.setFilterProperty(EmailImporter.FILTER_BCC, Boolean.toString(jRadioButtonHasBcc.isSelected())); - } - //set message include text - if (jCheckBoxMessageInclude1.isSelected()) { - currentImporter.setFilterProperty(EmailImporter.FILTER_message, jTextFieldMessageInclude1.getText().trim()); - } - //set subject include text - if (jCheckBoxSubjectInclude.isSelected()) { - currentImporter.setFilterProperty(EmailImporter.FILTER_SUBJECT, jTextFieldSubjectInclude.getText().trim()); - } - - } - - } - - /** - * set all the filters enable,but checkbox disable - * @param component - */ - public void setEnableFilters() { - setEnableFilterCheckBox(); - if (jCheckBoxEmailAddrFilter.isSelected()) { - jTableFilter.setEnabled(true); - } else { - jTableFilter.setEnabled(false); - } - if (jCheckBoxDayAfter.isSelected()) { - jDateChooserAfter.setEnabled(true); - } else { - jDateChooserAfter.setEnabled(false); - } - if (jCheckBoxDayBefore.isSelected()) { - jDateChooserBefore.setEnabled(true); - } else { - jDateChooserBefore.setEnabled(false); - } - if (jCheckBoxAttachement.isSelected()) { - jRadioButtonHasAtta.setEnabled(true); - jRadioButtonHasNoAtta.setEnabled(true); - } else { - jRadioButtonHasAtta.setEnabled(false); - jRadioButtonHasNoAtta.setEnabled(false); - } - if (jCheckBoxBcc.isSelected()) { - jRadioButtonHasBcc.setEnabled(true); - jRadioButtonHasNoBcc.setEnabled(true); - } else { - jRadioButtonHasBcc.setEnabled(false); - jRadioButtonHasNoBcc.setEnabled(false); - } - if (jCheckBoxCc.isSelected()) { - jRadioButtonHasCc.setEnabled(true); - jRadioButtonHasNoCc.setEnabled(true); - } else { - jRadioButtonHasCc.setEnabled(false); - jRadioButtonHasNoCc.setEnabled(false); - } - if (jCheckBoxMessageInclude1.isSelected()) { - jTextFieldMessageInclude1.setEnabled(true); - } else { - jTextFieldMessageInclude1.setEnabled(false); - } - if (jCheckBoxSubjectInclude.isSelected()) { - jTextFieldSubjectInclude.setEnabled(true); - } else { - jTextFieldSubjectInclude.setEnabled(false); - } - } - - /** - * set the filter checkbox enable - */ - private void setEnableFilterCheckBox() { - jCheckBoxEmailAddrFilter.setEnabled(true); - jCheckBoxAttachement.setEnabled(true); - jCheckBoxDayAfter.setEnabled(true); - jCheckBoxDayBefore.setEnabled(true); - jCheckBoxBcc.setEnabled(true); - jCheckBoxCc.setEnabled(true); - jCheckBoxMessageInclude1.setEnabled(true); - jCheckBoxSubjectInclude.setEnabled(true); - } - - public void setup(SpigotImporter importer) { - EmailImporter current = (EmailImporter) importer; - if (current == null) { - return; - } - - setEnableFilters(); - //TODO load email address filter, not load email address -// if(current.getFilterProperty(EmailDataType.FILTER_EMAIL_ADDRESS_TO) == null) - - //set date range - String date = current.getFilterProperty(EmailDataType.FILTER_DATERANGE_AFTER); - if (date != null) { - jDateChooserAfter.setEnabled(true); - jCheckBoxDayAfter.setSelected(true); - for (java.awt.Component cc : jDateChooserAfter.getComponents()) { - if (cc instanceof javax.swing.JTextField) { - ((javax.swing.JTextField) cc).setText(date); - } - } - } - date = current.getFilterProperty(EmailDataType.FILTER_DATERANGE_BEFORE); - if (date != null) { - jDateChooserBefore.setEnabled(true); - jCheckBoxDayBefore.setSelected(true); - for (java.awt.Component cc : jDateChooserBefore.getComponents()) { - if (cc instanceof javax.swing.JTextField) { - ((javax.swing.JTextField) cc).setText(date); - } - } - } - //setattachment - String att = current.getFilterProperty(EmailDataType.FILTER_ATTACHMENT); - if (att != null) { - jRadioButtonHasAtta.setEnabled(true); - jRadioButtonHasNoAtta.setEnabled(true); - jCheckBoxAttachement.setSelected(true); - if (att.equals(Boolean.toString(true))) { - jRadioButtonHasAtta.setSelected(true); - } else { - jRadioButtonHasNoAtta.setSelected(true); - } - } - //cc - att = current.getFilterProperty(EmailDataType.FILTER_CC); - if (att != null) { - jRadioButtonHasCc.setEnabled(true); - jRadioButtonHasNoCc.setEnabled(true); - jCheckBoxCc.setSelected(true); - if (att.equals(Boolean.toString(true))) { - jRadioButtonHasCc.setSelected(true); - } else { - jRadioButtonHasNoCc.setSelected(true); - } - } - //bcc - att = current.getFilterProperty(EmailDataType.FILTER_BCC); - if (att != null) { - jRadioButtonHasBcc.setEnabled(true); - jRadioButtonHasNoBcc.setEnabled(true); - jCheckBoxBcc.setSelected(true); - if (att.equals(Boolean.toString(true))) { - jRadioButtonHasBcc.setSelected(true); - } else { - jRadioButtonHasNoBcc.setSelected(true); - } - } - //message - att = current.getFilterProperty(EmailDataType.FILTER_message); - if (att != null) { - jTextFieldMessageInclude1.setEnabled(true); - jCheckBoxMessageInclude1.setSelected(true); - jTextFieldMessageInclude1.setText(att); - } - //subject - att = current.getFilterProperty(EmailDataType.FILTER_SUBJECT); - if (att != null) { - jTextFieldSubjectInclude.setEnabled(true); - jCheckBoxSubjectInclude.setSelected(true); - jTextFieldSubjectInclude.setText(att); - } - - - } - - /** - * set all the component enable - * @param component - */ - public void setEnable(javax.swing.JComponent component) { - for (java.awt.Component c : component.getComponents()) { - if (c instanceof javax.swing.JComponent) { - c.setEnabled(true); - setEnable((javax.swing.JComponent) c); - } else { - c.getParent().setEnabled(true); - } - } - } - - class MailFilterCellEditor implements TableCellEditor { - - public MailFilterCellEditor() { - } - - @Override - public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public Object getCellEditorValue() { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public boolean isCellEditable(EventObject anEvent) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public boolean shouldSelectCell(EventObject anEvent) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public boolean stopCellEditing() { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void cancelCellEditing() { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void addCellEditorListener(CellEditorListener l) { - throw new UnsupportedOperationException("Not supported yet."); - } - - @Override - public void removeCellEditorListener(CellEditorListener l) { - throw new UnsupportedOperationException("Not supported yet."); - } - } -} diff --git a/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailWizardIterator.java b/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailWizardIterator.java deleted file mode 100644 index 91239929b9..0000000000 --- a/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailWizardIterator.java +++ /dev/null @@ -1,168 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du <duyi001@gmail.com> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ui.spigot.plugin.email; - -import java.awt.Component; -import java.util.NoSuchElementException; -import javax.swing.JComponent; -import javax.swing.event.ChangeListener; -import org.openide.WizardDescriptor; - -public final class EmailWizardIterator implements WizardDescriptor.Iterator { - - // To invoke this wizard, copy-paste and run the following code, e.g. from - // SomeAction.performAction(): - /* - WizardDescriptor.Iterator iterator = new EmailWizardIterator(); - WizardDescriptor wizardDescriptor = new WizardDescriptor(iterator); - // {0} will be replaced by WizardDescriptor.Panel.getComponent().getName() - // {1} will be replaced by WizardDescriptor.Iterator.name() - wizardDescriptor.setTitleFormat(new MessageFormat("{0} ({1})")); - wizardDescriptor.setTitle("Your wizard dialog title here"); - Dialog dialog = DialogDisplayer.getDefault().createDialog(wizardDescriptor); - dialog.setVisible(true); - dialog.toFront(); - boolean cancelled = wizardDescriptor.getValue() != WizardDescriptor.FINISH_OPTION; - if (!cancelled) { - // do something - } - */ - private int index; - private WizardDescriptor.Panel[] panels; - - /** - * Initialize panels representing individual wizard's steps and sets - * various properties for them influencing wizard appearance. - */ - private WizardDescriptor.Panel[] getPanels() { - if (panels == null) { - panels = new WizardDescriptor.Panel[]{ - new EmailWizardPanel1(), - new EmailWizardPanel2() - }; - String[] steps = new String[panels.length]; - for (int i = 0; i < panels.length; i++) { - Component c = panels[i].getComponent(); - // Default step name to component name of panel. - steps[i] = c.getName(); - if (c instanceof JComponent) { // assume Swing components - JComponent jc = (JComponent) c; - // Sets step number of a component - // TODO if using org.openide.dialogs >= 7.8, can use WizardDescriptor.PROP_*: - jc.putClientProperty("WizardPanel_contentSelectedIndex", new Integer(i)); - // Sets steps names for a panel - jc.putClientProperty("WizardPanel_contentData", steps); - // Turn on subtitle creation on each step - jc.putClientProperty("WizardPanel_autoWizardStyle", Boolean.TRUE); - // Show steps on the left side with the image on the background - jc.putClientProperty("WizardPanel_contentDisplayed", Boolean.TRUE); - // Turn on numbering of all steps - jc.putClientProperty("WizardPanel_contentNumbered", Boolean.TRUE); - } - } - } - return panels; - } - - public WizardDescriptor.Panel current() { - return getPanels()[index]; - } - - public String name() { - return index + 1 + ". from " + getPanels().length; - } - - public boolean hasNext() { - return index < getPanels().length - 1; - } - - public boolean hasPrevious() { - return index > 0; - } - - public void nextPanel() { - if (!hasNext()) { - throw new NoSuchElementException(); - } - index++; - } - - public void previousPanel() { - if (!hasPrevious()) { - throw new NoSuchElementException(); - } - index--; - } - - // If nothing unusual changes in the middle of the wizard, simply: - public void addChangeListener(ChangeListener l) { - } - - public void removeChangeListener(ChangeListener l) { - } - // If something changes dynamically (besides moving between panels), e.g. - // the number of panels changes in response to user input, then uncomment - // the following and call when needed: fireChangeEvent(); - /* - private Set<ChangeListener> listeners = new HashSet<ChangeListener>(1); // or can use ChangeSupport in NB 6.0 - public final void addChangeListener(ChangeListener l) { - synchronized (listeners) { - listeners.add(l); - } - } - public final void removeChangeListener(ChangeListener l) { - synchronized (listeners) { - listeners.remove(l); - } - } - protected final void fireChangeEvent() { - Iterator<ChangeListener> it; - synchronized (listeners) { - it = new HashSet<ChangeListener>(listeners).iterator(); - } - ChangeEvent ev = new ChangeEvent(this); - while (it.hasNext()) { - it.next().stateChanged(ev); - } - } - */ -} diff --git a/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailWizardPanel1.java b/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailWizardPanel1.java deleted file mode 100644 index 32172b1f38..0000000000 --- a/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailWizardPanel1.java +++ /dev/null @@ -1,139 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du <duyi001@gmail.com> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ui.spigot.plugin.email; - -import java.awt.Component; -import java.util.HashSet; -import java.util.Iterator; -import java.util.Set; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import org.openide.WizardDescriptor; -import org.openide.util.HelpCtx; - -public class EmailWizardPanel1 implements WizardDescriptor.FinishablePanel { - - public EmailWizardPanel1(){ - super(); - } - /** - * The visual component that displays this panel. If you need to access the - * component from this class, just use getComponent(). - */ - private Component component; - - // Get the visual component for the panel. In this template, the component - // is kept separate. This can be more efficient: if the wizard is created - // but never displayed, or not all panels are displayed, it is better to - // create only those which really need to be visible. - @Override - public Component getComponent() { - if (component == null) { - component = new EmailVisualPanel1(this); - } - return component; - } - - @Override - public HelpCtx getHelp() { - // Show no Help button for this panel: - return HelpCtx.DEFAULT_HELP; - // If you have context help: - // return new HelpCtx(SampleWizardPanel1.class); - } - - @Override - public boolean isValid() { - return ((EmailVisualPanel1)getComponent()).isValidPanel(); - } - private final Set<ChangeListener> listeners = new HashSet<ChangeListener>(1); // or can use ChangeSupport in NB 6.0 - - @Override - public final void addChangeListener(ChangeListener l) { - synchronized (listeners) { - listeners.add(l); - } - } - - @Override - public final void removeChangeListener(ChangeListener l) { - synchronized (listeners) { - listeners.remove(l); - } - } - - protected final void fireChangeEvent() { - Iterator<ChangeListener> it; - synchronized (listeners) { - it = new HashSet<ChangeListener>(listeners).iterator(); - } - ChangeEvent ev = new ChangeEvent(this); - while (it.hasNext()) { - it.next().stateChanged(ev); - } - } - - - // You can use a settings object to keep track of state. Normally the - // settings object will be the WizardDescriptor, so you can use - // WizardDescriptor.getProperty & putProperty to store information entered - // by the user. - @Override - public void readSettings(Object settings) { - } - - @Override - public void storeSettings(Object settings) { - - - } - -// public void unsetup(SpigotImporter importer){ -// ((EmailVisualPanel1)getComponent()).unsetupImporter((EmailImporter) importer); -// } - - @Override - public boolean isFinishPanel() { - return true; - } - -} diff --git a/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailWizardPanel2.java b/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailWizardPanel2.java deleted file mode 100644 index 474b278810..0000000000 --- a/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailWizardPanel2.java +++ /dev/null @@ -1,123 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du <duyi001@gmail.com> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ui.spigot.plugin.email; - -import java.awt.Component; -import javax.swing.event.ChangeListener; -import org.openide.WizardDescriptor; -import org.openide.util.HelpCtx; - -public class EmailWizardPanel2 implements WizardDescriptor.Panel { - - /** - * The visual component that displays this panel. If you need to access the - * component from this class, just use getComponent(). - */ - private Component component; - - // Get the visual component for the panel. In this template, the component - // is kept separate. This can be more efficient: if the wizard is created - // but never displayed, or not all panels are displayed, it is better to - // create only those which really need to be visible. - public Component getComponent() { - if (component == null) { - component = new EmailVisualPanel2(); - } - return component; - } - - public HelpCtx getHelp() { - // Show no Help button for this panel: - return HelpCtx.DEFAULT_HELP; - // If you have context help: - // return new HelpCtx(SampleWizardPanel1.class); - } - - public boolean isValid() { - // If it is always OK to press Next or Finish, then: - return true; - // If it depends on some condition (form filled out...), then: - // return someCondition(); - // and when this condition changes (last form field filled in...) then: - // fireChangeEvent(); - // and uncomment the complicated stuff below. - } - - public final void addChangeListener(ChangeListener l) { - } - - public final void removeChangeListener(ChangeListener l) { - } - /* - private final Set<ChangeListener> listeners = new HashSet<ChangeListener>(1); // or can use ChangeSupport in NB 6.0 - public final void addChangeListener(ChangeListener l) { - synchronized (listeners) { - listeners.add(l); - } - } - public final void removeChangeListener(ChangeListener l) { - synchronized (listeners) { - listeners.remove(l); - } - } - protected final void fireChangeEvent() { - Iterator<ChangeListener> it; - synchronized (listeners) { - it = new HashSet<ChangeListener>(listeners).iterator(); - } - ChangeEvent ev = new ChangeEvent(this); - while (it.hasNext()) { - it.next().stateChanged(ev); - } - } - */ - - // You can use a settings object to keep track of state. Normally the - // settings object will be the WizardDescriptor, so you can use - // WizardDescriptor.getProperty & putProperty to store information entered - // by the user. - public void readSettings(Object settings) { - } - - public void storeSettings(Object settings) { - } -} diff --git a/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailWizardSupport1.java b/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailWizardSupport1.java deleted file mode 100644 index c86083e2a9..0000000000 --- a/modules/SpigotPluginUI/src/main/java/org/gephi/ui/spigot/plugin/email/EmailWizardSupport1.java +++ /dev/null @@ -1,116 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Yi Du <duyi001@gmail.com> -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ - -package org.gephi.ui.spigot.plugin.email; - -import org.gephi.io.importer.spi.Importer; -import org.gephi.io.importer.spi.ImporterWizardUI; -import org.gephi.io.importer.spi.SpigotImporter; -import org.gephi.io.spigot.plugin.EmailImporter; -import org.openide.WizardDescriptor.Panel; -import org.openide.util.NbBundle; -import org.openide.util.lookup.ServiceProvider; - -/** - * - * @author Yi Du - */ - -@ServiceProvider(service=ImporterWizardUI.class) -public class EmailWizardSupport1 implements ImporterWizardUI{ - private Panel[] panels = null; -// private EmailImporter currentImporter = null; - - @Override - public String getDescription() { - return NbBundle.getMessage(EmailWizardSupport1.class, "EmailWizardSupport1.Description"); - } - - @Override - public Panel[] getPanels() { - if (panels == null) { - panels = new Panel[2]; - panels[0] = new EmailWizardPanel1(); - panels[1] = new EmailWizardPanel2(); - } - return panels; - } - -// public int getNumOfPanels() { -// return 2; -// } - -// -// public SpigotImporter generateImporter() { -// if(currentImporter == null) -// currentImporter = new EmailImporter(); -// return currentImporter; -// } - - @Override - public String getDisplayName() { - return NbBundle.getMessage(EmailWizardSupport1.class, "EmailWizardSupport1.SubType"); - } - - @Override - public String getCategory() { - return NbBundle.getMessage(EmailWizardSupport1.class, "EmailWizardSupport.Type"); - } - - @Override - public void setup(Panel panel) { - //TODO - return; - } - - @Override - public void unsetup(SpigotImporter importer, Panel panel) { - ((EmailVisualPanel1) ((Panel) panels[0]).getComponent()).unsetup(importer); - ((EmailVisualPanel2) ((Panel) panels[1]).getComponent()).unsetup(importer); - return; - } - - @Override - public boolean isUIForImporter(Importer importer) { - return importer instanceof EmailImporter; - } -} diff --git a/modules/SpigotPluginUI/src/main/nbm/manifest.mf b/modules/SpigotPluginUI/src/main/nbm/manifest.mf deleted file mode 100644 index 20a92a15de..0000000000 --- a/modules/SpigotPluginUI/src/main/nbm/manifest.mf +++ /dev/null @@ -1,4 +0,0 @@ -Manifest-Version: 1.0 -AutoUpdate-Essential-Module: true -OpenIDE-Module-Localizing-Bundle: org/gephi/ui/spigot/plugin/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file diff --git a/modules/SpigotPluginUI/src/main/nbm/module.xml b/modules/SpigotPluginUI/src/main/nbm/module.xml deleted file mode 100644 index 8c6b976cac..0000000000 --- a/modules/SpigotPluginUI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<nbm> - <!-- - <moduleType>autoload</moduleType> - <codeNameBase>org.gephi.ui.spigot.plugin/1</codeNameBase> - <licenseName>Apache License, Version 2.0</licenseName> - <licenseFile>license.txt</licenseFile> - --> -</nbm> diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/Bundle.properties b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/Bundle.properties deleted file mode 100644 index b46592b7d3..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/Bundle.properties +++ /dev/null @@ -1,3 +0,0 @@ -OpenIDE-Module-Display-Category=Plugin -OpenIDE-Module-Name=Spigot Plugin UI -OpenIDE-Module-Short-Description=Spigot user interfaces implementations diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/Bundle_cs.properties b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/Bundle_cs.properties deleted file mode 100644 index 552f72629f..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/Bundle_cs.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz <zbynek.schwarz@gmail.com>, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-07 22\:05+0000\nLast-Translator\: Zbyn\u011bk Schwarz <zbynek.schwarz@gmail.com>\nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Short-Description=Zaveden\u00ed u\u017eivatelsk\u00e9ho rozhran\u00ed Spigot diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/Bundle_es.properties b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/Bundle_es.properties deleted file mode 100644 index 1a8d4c6fa5..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/Bundle_es.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:58+0000\nLast-Translator\: gephi <sebastien.heymann@gmail.com>\nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Short-Description=Implementaciones de las interfaces de usuario para conectores (spigots) diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/Bundle_fr.properties b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/Bundle_fr.properties deleted file mode 100644 index 958e45ac47..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/Bundle_fr.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:58+0000\nLast-Translator\: gephi <sebastien.heymann@gmail.com>\nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Impl\u00e9mentation coeur des Connecteurs (Spigot) diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/Bundle_ja.properties b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/Bundle_ja.properties deleted file mode 100644 index b52bbcebb1..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/Bundle_ja.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida <kida.siro@gmail.com>, 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-18 10\:38+0000\nLast-Translator\: Siro Kida <kida.siro@gmail.com>\nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u30b9\u30d4\u30b4\u30c3\u30c8\u306e\u30e6\u30fc\u30b6\u30a4\u30f3\u30bf\u30d5\u30a7\u30fc\u30b9\u306e\u5b9f\u88c5 diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/Bundle_pt_BR.properties b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/Bundle_pt_BR.properties deleted file mode 100644 index a3a912c946..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/Bundle_pt_BR.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr <celiofariajr@gmail.com>, 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 16\:12+0000\nLast-Translator\: C\u00e9lio Faria Jr. <celiofariajr@gmail.com>\nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Implementa\u00e7\u00f5es de interfaces de usu\u00e1rio de Spigots diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/Bundle_ru.properties b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/Bundle_ru.properties deleted file mode 100644 index d57284aa77..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/Bundle_ru.properties +++ /dev/null @@ -1,9 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# <altsoph@gmail.com>, 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-11-25 07\:00+0000\nLast-Translator\: Altsoph <altsoph@gmail.com>\nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Short-Description=Spigot user interfaces implementations diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/Bundle_zh_CN.properties b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/Bundle_zh_CN.properties deleted file mode 100644 index f7eb15330e..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/Bundle_zh_CN.properties +++ /dev/null @@ -1,8 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:07+0000\nLast-Translator\: gephi <sebastien.heymann@gmail.com>\nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u63d2\u5165\u7528\u6237\u5b9e\u73b0\u7684\u63a5\u53e3 diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/cs.po b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/cs.po deleted file mode 100644 index 6b540f4566..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/cs.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz <zbynek.schwarz@gmail.com>, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-07 22:05+0000\n" -"Last-Translator: ZbynΔ›k Schwarz <zbynek.schwarz@gmail.com>\n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ZavedenΓ­ uΕΎivatelskΓ©ho rozhranΓ­ Spigot" diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/Bundle.properties b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/Bundle.properties deleted file mode 100644 index 65f0b95f26..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/Bundle.properties +++ /dev/null @@ -1,56 +0,0 @@ -OpenIDE-Module-Name=SpigotEmailUI -EmailWizardSupport.Type = Email -EmailWizardSupport1.SubType = Email Address Network -EmailWizardSupport1.Description = Email import can help users analyse the email contacts between people. \ - \nEach email address can be seen as a node, and an edge is built when an \ - \nemail exists from one to another. Mostly it's ego network. -EmailVisualPanel2.jTableFilter.column1.text=Email Address -EmailVisualPanel2.jTableFilter.column2.text=Type -EmailVisualPanel1.name=Select Datasource -EmailVisualPanel1.jButton3.text=Advanced -EmailVisualPanel1.jLabelServerType.text=Receive server type: -EmailVisualPanel1.jTextFieldServerAddr.text=pop.gmail.com -EmailVisualPanel1.jLabelServerAddr.text=Receive server address: -EmailVisualPanel1.jLabelPsw.text=Password: -EmailVisualPanel1.jTextFieldEmailAddr.text= -EmailVisualPanel1.jLabelEmailAddr.text=Email address: -EmailVisualPanel1.jLabel6.text=* -EmailVisualPanel1.jLabel5.text=File Type: -EmailVisualPanel1.fileType.default=--Select file type -EmailVisualPanel1.jLabel4.text=Note:Mandatory options are marked by '*' -EmailVisualPanel1.jCheckBoxDisplayNameSameLabel.text=If A and B have the same display name, consider them as one node -EmailVisualPanel1.jCheckBoxUseCcLine.text=Use Cc line when calculating edge weights -EmailVisualPanel1.jCheckBoxUseBccLine.text=Use Bcc line when calculating edge weights -EmailVisualPanel1.jLabel1.text=* -EmailVisualPanel1.jPasswordField1.text= -EmailVisualPanel1.jLabel3.text=* -EmailVisualPanel1.jLabel2.text=* -EmailVisualPanel1.jRadioButtonFromLocalFile.text=Load emails from local file -EmailVisualPanel1.jLabel7.text=* -EmailVisualPanel1.jRadioButtonFromServer.text=Receive emails from mail server -EmailVisualPanel1.jButtonFromLocalFile.text=Select File... -EmailVisualPanel2.jTextFieldMessageInclude1.text= -EmailVisualPanel2.jCheckBoxSubjectInclude.text=Subject includes text: -EmailVisualPanel2.jTextFieldSubjectInclude.text= -EmailVisualPanel2.jCheckBoxEmailAddrFilter.text=Email address filters. Include these email addresses on the From, To, Cc, or Bcc lines -EmailVisualPanel2.jCheckBoxBcc.text=Bcc -EmailVisualPanel2.jRadioButtonHasCc.text=Has Cc -EmailVisualPanel2.jCheckBoxCc.text=Cc -EmailVisualPanel2.jRadioButtonHasNoBcc.text=Doesn't have Bcc -EmailVisualPanel2.jRadioButtonHasBcc.text=Has Bcc -EmailVisualPanel2.jRadioButtonHasNoAtta.text=Doesn't have attachments -EmailVisualPanel2.jRadioButtonHasAtta.text=Has attachments -EmailVisualPanel2.jRadioButtonHasNoCc.text=Doesn't have Cc -EmailVisualPanel2.jCheckBoxAttachement.text=Attachments -EmailVisualPanel2.jCheckBoxDayAfter.text=Day on or after -EmailVisualPanel2.jPanel3.border.title=Date range -EmailVisualPanel2.jCheckBoxDayBefore.text=Day on or before -EmailVisualPanel2.jCheckBoxMessageInclude1.text=Message includes text: -EmailImportAdvancedOptPanel.name=Advanced Options -EmailImportAdvancedOptPanel.jTextFieldPort.text= -EmailImportAdvancedOptPanel.jLabelPort.text=Port: -EmailImportAdvancedOptPanel.jCheckBoxUseSSL.text=Use SSL to Connect -EmailVisualPanel2.importCSVButton.text=Import CSV... -fileType_CSV_Name = CSV Files -EmailVisualPanel2.importCSVButton.toolTipText=Load emails addresses from CSV -EmailVisualPanel2.jLabel1.text=Filters diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/Bundle_cs.properties b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/Bundle_cs.properties deleted file mode 100644 index f2c78a339f..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/Bundle_cs.properties +++ /dev/null @@ -1,103 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz <zbynek.schwarz@gmail.com>, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 18\:30+0000\nLast-Translator\: Zbyn\u011bk Schwarz <zbynek.schwarz@gmail.com>\nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -EmailWizardSupport.Type=Email - -EmailWizardSupport1.SubType=S\u00ed\u0165 emailov\u00e9 adresy - -EmailWizardSupport1.Description=Import emailu m\u016f\u017ee u\u017eivatel\u016fm pomoci zpracovat emailov\u00e9 kontakty mezi lidmi.\nKa\u017ed\u00e1 emailov\u00e1 adresa m\u016f\u017ee b\u00fdt pova\u017eov\u00e1na za uzel a hrana je sestavena, kdy\u017e\nexistuje mezi nimi email. V\u011bt\u0161inou je to s\u00ed\u0165 popularity, - -EmailVisualPanel2.jTableFilter.column1.text=Emailov\u00e1 adresa - -EmailVisualPanel2.jTableFilter.column2.text=Typ - -EmailVisualPanel1.name=Vyberte datov\u00fd zdroj - -EmailVisualPanel1.jButton3.text=Pokro\u010dil\u00e9 - -EmailVisualPanel1.jLabelServerType.text=Typ p\u0159ij\u00edmac\u00edho serveru\: - -EmailVisualPanel1.jTextFieldServerAddr.text=pop.gmail.com - -EmailVisualPanel1.jLabelServerAddr.text=Adresa p\u0159ij\u00edmac\u00edho serveru\: - -EmailVisualPanel1.jLabelPsw.text=Heslo\: - -EmailVisualPanel1.jLabelEmailAddr.text=Emailov\u00e1 adresa\: - -EmailVisualPanel1.jLabel6.text=* - -EmailVisualPanel1.jLabel5.text=Typ souboru\: - -EmailVisualPanel1.fileType.default=--Vyberte typ souboru - -EmailVisualPanel1.jLabel4.text=Pozn\u00e1mka\: Povinn\u00e9 mo\u017enosti jsou ozna\u010deny '*' - -EmailVisualPanel1.jCheckBoxDisplayNameSameLabel.text=Pokud A a B maj\u00ed stejn\u00e9 zobrazovan\u00e9 jm\u00e9no, pova\u017eovat je za jeden uzel - -EmailVisualPanel1.jCheckBoxUseCcLine.text=Pou\u017e\u00edt \u0159\u00e1dek Kopie p\u0159i vypo\u010d\u00edt\u00e1v\u00e1n\u00ed v\u00e1hy hran - -EmailVisualPanel1.jCheckBoxUseBccLine.text=Pou\u017e\u00edt \u0159\u00e1dek Skryt\u00e1 kopie p\u0159i vypo\u010d\u00edt\u00e1v\u00e1n\u00ed v\u00e1hy hran - -EmailVisualPanel1.jLabel1.text=* - -EmailVisualPanel1.jLabel3.text=* - -EmailVisualPanel1.jLabel2.text=* - -EmailVisualPanel1.jRadioButtonFromLocalFile.text=Na\u010d\u00edst emaily z m\u00edstn\u00edho souboru - -EmailVisualPanel1.jLabel7.text=* - -EmailVisualPanel1.jRadioButtonFromServer.text=Obdr\u017eet emaily od emailov\u00e9ho serveru - -EmailVisualPanel1.jButtonFromLocalFile.text=Vyberte soubor... - -EmailVisualPanel2.jCheckBoxSubjectInclude.text=P\u0159edm\u011bt obsahuje text\: - -EmailVisualPanel2.jCheckBoxEmailAddrFilter.text=Filtry emailov\u00fdch adres. Tyto adresy zahr\u0148te na \u0159\u00e1dc\u00edch Od, Komu, Kopie, nebo Skryt\u00e1 kopie - -EmailVisualPanel2.jCheckBoxBcc.text=Skryt\u00e1 kopie - -EmailVisualPanel2.jRadioButtonHasCc.text=M\u00e1 kopii - -EmailVisualPanel2.jCheckBoxCc.text=Kopie - -EmailVisualPanel2.jRadioButtonHasNoBcc.text=Nem\u00e1 skrytou kopii - -EmailVisualPanel2.jRadioButtonHasBcc.text=M\u00e1 skrytou kopii - -EmailVisualPanel2.jRadioButtonHasNoAtta.text=Nem\u00e1 p\u0159\u00edlohy - -EmailVisualPanel2.jRadioButtonHasAtta.text=M\u00e1 p\u0159\u00edlohy - -EmailVisualPanel2.jRadioButtonHasNoCc.text=Nem\u00e1 kopii - -EmailVisualPanel2.jCheckBoxAttachement.text=P\u0159\u00edlohy - -EmailVisualPanel2.jCheckBoxDayAfter.text=V den nebo pot\u00e9 - -EmailVisualPanel2.jPanel3.border.title=\u010casov\u00e9 obdob\u00ed - -EmailVisualPanel2.jCheckBoxDayBefore.text=V den nebo p\u0159edt\u00edm - -EmailVisualPanel2.jCheckBoxMessageInclude1.text=Zpr\u00e1va obsahuje text\: - -EmailImportAdvancedOptPanel.name=Pokro\u010dil\u00e9 mo\u017enosti - -EmailImportAdvancedOptPanel.jLabelPort.text=Port\: - -EmailImportAdvancedOptPanel.jCheckBoxUseSSL.text=Pou\u017e\u00edt SSL pro p\u0159ipojen\u00ed - -EmailVisualPanel2.importCSVButton.text=Importovat CSV... - -fileType_CSV_Name=Soubory CSV - -EmailVisualPanel2.importCSVButton.toolTipText=Na\u010d\u00edst emailov\u00e9 adresy z CSV - -EmailVisualPanel2.jLabel1.text=Filtry diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/Bundle_es.properties b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/Bundle_es.properties deleted file mode 100644 index b02fe2b705..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/Bundle_es.properties +++ /dev/null @@ -1,105 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos <eduramiba@gmail.com>, 2011. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2011. -# <sebastien.heymann@gmail.com>, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 18\:09+0000\nLast-Translator\: gephi <sebastien.heymann@gmail.com>\nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -EmailWizardSupport.Type=Email - -EmailWizardSupport1.SubType=Red de direcciones email - -EmailWizardSupport1.Description=Importar emails puede ayudar a los usuarios a analizar los contactos email mediante personas.\nCada direcci\u00f3n email puede ser vista como un nodo, y cada arista es construida cuando un email\nexiste entre una direcci\u00f3n y otra. Es b\u00e1sicamente una red de ego. - -EmailVisualPanel2.jTableFilter.column1.text=Direcci\u00f3n email - -EmailVisualPanel2.jTableFilter.column2.text=Tipo - -EmailVisualPanel1.name=Elige origen de datos - -EmailVisualPanel1.jButton3.text=Avanzado - -EmailVisualPanel1.jLabelServerType.text=Tipo de servidor - -EmailVisualPanel1.jTextFieldServerAddr.text=pop.gmail.com - -EmailVisualPanel1.jLabelServerAddr.text=Direcci\u00f3n del servidor - -EmailVisualPanel1.jLabelPsw.text=Contrase\u00f1a - -EmailVisualPanel1.jLabelEmailAddr.text=Direcci\u00f3n email - -EmailVisualPanel1.jLabel6.text=* - -EmailVisualPanel1.jLabel5.text=Tipo de archivo - -EmailVisualPanel1.fileType.default=--Elige tipo de archivo - -EmailVisualPanel1.jLabel4.text=Nota\: Los campos obligatorios est\u00e1n marcados con '*' - -EmailVisualPanel1.jCheckBoxDisplayNameSameLabel.text=Si A y B tienen el mismo nombre, considerarlos como un solo nodo - -EmailVisualPanel1.jCheckBoxUseCcLine.text=Usar l\u00ednea Cc al calcular los pesos de las aristas - -EmailVisualPanel1.jCheckBoxUseBccLine.text=Usar l\u00ednea Bcc al calcular los pesos de las aristas - -EmailVisualPanel1.jLabel1.text=* - -EmailVisualPanel1.jLabel3.text=* - -EmailVisualPanel1.jLabel2.text=* - -EmailVisualPanel1.jRadioButtonFromLocalFile.text=Cargar emails de archivo local - -EmailVisualPanel1.jLabel7.text=* - -EmailVisualPanel1.jRadioButtonFromServer.text=Recibir emails de servidor - -EmailVisualPanel1.jButtonFromLocalFile.text=Seleccionar archivo... - -EmailVisualPanel2.jCheckBoxSubjectInclude.text=El asunto incluye el texto\: - -EmailVisualPanel2.jCheckBoxEmailAddrFilter.text=Filtro de direcci\u00f3n email. Incluir estas direcciones en las l\u00edneas From, To, Cc, o Bcc - -EmailVisualPanel2.jCheckBoxBcc.text=Bcc - -EmailVisualPanel2.jRadioButtonHasCc.text=Tiene Cc - -EmailVisualPanel2.jCheckBoxCc.text=Cc - -EmailVisualPanel2.jRadioButtonHasNoBcc.text=No tiene Bcc - -EmailVisualPanel2.jRadioButtonHasBcc.text=Tiene Bcc - -EmailVisualPanel2.jRadioButtonHasNoAtta.text=No tiene adjuntos - -EmailVisualPanel2.jRadioButtonHasAtta.text=Tiene adjuntos - -EmailVisualPanel2.jRadioButtonHasNoCc.text=No tiene Cc - -EmailVisualPanel2.jCheckBoxAttachement.text=Tiene adjuntos - -EmailVisualPanel2.jCheckBoxDayAfter.text=Ese d\u00eda o posterior - -EmailVisualPanel2.jPanel3.border.title=Rango de fechas - -EmailVisualPanel2.jCheckBoxDayBefore.text=Ese d\u00eda o anterior - -EmailVisualPanel2.jCheckBoxMessageInclude1.text=El mensaje incluye el texto\: - -EmailImportAdvancedOptPanel.name=Opciones avanzadas - -EmailImportAdvancedOptPanel.jLabelPort.text=Puerto\: - -EmailImportAdvancedOptPanel.jCheckBoxUseSSL.text=Utilizar SSL para conectarse - -EmailVisualPanel2.importCSVButton.text=Importar CSV... - -fileType_CSV_Name=Archivos CSV - -EmailVisualPanel2.importCSVButton.toolTipText=Cargar direcciones email de CSV - -EmailVisualPanel2.jLabel1.text=Filtros diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/Bundle_fr.properties b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/Bundle_fr.properties deleted file mode 100644 index 1146d2359b..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/Bundle_fr.properties +++ /dev/null @@ -1,103 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# <sebastien.heymann@gmail.com>, 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-08 15\:17+0000\nLast-Translator\: gephi <sebastien.heymann@gmail.com>\nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -EmailWizardSupport.Type=E-mail - -EmailWizardSupport1.SubType=R\u00e9seau d'adresses e-mail - -EmailWizardSupport1.Description=L'import d'email peut aider \u00e0 analyser les contacts via email entre des individus. Chaque adresse email est vue comme un noeud, et les liens sont construits quand un email existe entre deux adresses. - -EmailVisualPanel2.jTableFilter.column1.text=Adresse e-mail - -EmailVisualPanel2.jTableFilter.column2.text=Type - -EmailVisualPanel1.name=Choisir la Source de Donn\u00e9es - -EmailVisualPanel1.jButton3.text=Avanc\u00e9 - -EmailVisualPanel1.jLabelServerType.text=Type du serveur \: - -EmailVisualPanel1.jTextFieldServerAddr.text=pop.gmail.com - -EmailVisualPanel1.jLabelServerAddr.text=Adresse du serveur \: - -EmailVisualPanel1.jLabelPsw.text=Mot de passe \: - -EmailVisualPanel1.jLabelEmailAddr.text=Adresse e-mail - -EmailVisualPanel1.jLabel6.text=* - -EmailVisualPanel1.jLabel5.text=Type de fichier \: - -EmailVisualPanel1.fileType.default=--Choisir le type de fichier - -EmailVisualPanel1.jLabel4.text=Note\: '*' indique une option obligatoire - -EmailVisualPanel1.jCheckBoxDisplayNameSameLabel.text=Si A et B ont le m\u00eame nom d'affichage, alors les consid\u00e9rer comme un seul noeud. - -EmailVisualPanel1.jCheckBoxUseCcLine.text=Utiliser la ligne Cc lors du calcul du poids des liens - -EmailVisualPanel1.jCheckBoxUseBccLine.text=Utiliser la ligne Bcc lors du calcul du poids des liens - -EmailVisualPanel1.jLabel1.text=* - -EmailVisualPanel1.jLabel3.text=* - -EmailVisualPanel1.jLabel2.text=* - -EmailVisualPanel1.jRadioButtonFromLocalFile.text=Recevoir les e-mails depuis un fichier local - -EmailVisualPanel1.jLabel7.text=* - -EmailVisualPanel1.jRadioButtonFromServer.text=Recevoir les e-mails depuis un serveur de mails. - -EmailVisualPanel1.jButtonFromLocalFile.text=S\u00e9lectionner un fichier... - -EmailVisualPanel2.jCheckBoxSubjectInclude.text=Sujet incluant le texte \: - -EmailVisualPanel2.jCheckBoxEmailAddrFilter.text=Filtres d'adresse e-mail. Ajoutez-les aux lignes From, To, Cc ou Bcc. - -EmailVisualPanel2.jCheckBoxBcc.text=Bcc - -EmailVisualPanel2.jRadioButtonHasCc.text=Avec Cc - -EmailVisualPanel2.jCheckBoxCc.text=Cc - -EmailVisualPanel2.jRadioButtonHasNoBcc.text=Sans Bcc - -EmailVisualPanel2.jRadioButtonHasBcc.text=Avec Bcc - -EmailVisualPanel2.jRadioButtonHasNoAtta.text=Sans pi\u00e8ces jointes - -EmailVisualPanel2.jRadioButtonHasAtta.text=Avec pi\u00e8ces jointes - -EmailVisualPanel2.jRadioButtonHasNoCc.text=Sans Cc - -EmailVisualPanel2.jCheckBoxAttachement.text=Pi\u00e8ces jointes - -EmailVisualPanel2.jCheckBoxDayAfter.text=Jours courant ou post\u00e9rieur - -EmailVisualPanel2.jPanel3.border.title=Plage de date - -EmailVisualPanel2.jCheckBoxDayBefore.text=Jours courant ou pr\u00e9c\u00e9dent - -EmailVisualPanel2.jCheckBoxMessageInclude1.text=Messages incluant le texte \: - -EmailImportAdvancedOptPanel.name=Options Avanc\u00e9es - -EmailImportAdvancedOptPanel.jLabelPort.text=Port \: - -EmailImportAdvancedOptPanel.jCheckBoxUseSSL.text=Utiliser une connexion SSL - -EmailVisualPanel2.importCSVButton.text=Importer CSV... - -fileType_CSV_Name=Fichiers CSV - -EmailVisualPanel2.importCSVButton.toolTipText=Charger les adresses e-mail depuis un fichier CSV - -EmailVisualPanel2.jLabel1.text=Filtres diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/Bundle_ja.properties b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/Bundle_ja.properties deleted file mode 100644 index dd6e5fda00..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/Bundle_ja.properties +++ /dev/null @@ -1,103 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida <kida.siro@gmail.com>, 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-15 07\:54+0000\nLast-Translator\: Siro Kida <kida.siro@gmail.com>\nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -EmailWizardSupport.Type=\u30e1\u30fc\u30eb - -EmailWizardSupport1.SubType=\u30e1\u30fc\u30eb\u30fb\u30a2\u30c9\u30ec\u30b9\u30fb\u30cd\u30c3\u30c8\u30ef\u30fc\u30af - -EmailWizardSupport1.Description=\u96fb\u5b50\u30e1\u30fc\u30eb\u306e\u30a4\u30f3\u30dd\u30fc\u30c8\u306f\u3001\u30e6\u30fc\u30b6\u30fc\u304c\u4eba\u3005\u306e\u9593\u3067\u96fb\u5b50\u30e1\u30fc\u30eb\u306e\u9023\u7d61\u5148\u3092\u5206\u6790\u3059\u308b\u969b\u306b\u5f79\u7acb\u3061\u307e\u3059\u3002\u5404\u96fb\u5b50\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u306f\u3001\u30ce\u30fc\u30c9\u3068\u898b\u306a\u3059\u3053\u3068\u304c\u3067\u304d\u3001\u8fba\u306f\u3001\u96fb\u5b50\u30e1\u30fc\u30eb\u306e\u4e00\u3064\u304b\u3089\u5225\u306e\u5b58\u5728\u3059\u308b\u3068\u304d\u306b\u67b6\u3051\u3089\u308c\u307e\u3059\u3002\u5927\u62b5\u305d\u308c\u306f\u30a8\u30b4\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3067\u3059\u3002 - -EmailVisualPanel2.jTableFilter.column1.text=\u30e1\u30fc\u30eb\u30fb\u30a2\u30c9\u30ec\u30b9 - -EmailVisualPanel2.jTableFilter.column2.text=\u7a2e\u985e - -EmailVisualPanel1.name=\u30c7\u30fc\u30bf\u30bd\u30fc\u30b9\u3092\u9078\u629e - -EmailVisualPanel1.jButton3.text=\u8a73\u7d30 - -EmailVisualPanel1.jLabelServerType.text=\u30ec\u30b7\u30fc\u30d6\u30b5\u30fc\u30d0\u306e\u7a2e\u985e\: - -EmailVisualPanel1.jTextFieldServerAddr.text=pop.gmail.com - -EmailVisualPanel1.jLabelServerAddr.text=\u30ec\u30b7\u30fc\u30d6\u30b5\u30fc\u30d0\u306e\u30a2\u30c9\u30ec\u30b9\: - -EmailVisualPanel1.jLabelPsw.text=\u30d1\u30b9\u30ef\u30fc\u30c9\: - -EmailVisualPanel1.jLabelEmailAddr.text=\u30e1\u30fc\u30eb\u30fb\u30a2\u30c9\u30ec\u30b9\: - -EmailVisualPanel1.jLabel6.text=* - -EmailVisualPanel1.jLabel5.text=\u30d5\u30a1\u30a4\u30eb\u306e\u7a2e\u985e\: - -EmailVisualPanel1.fileType.default=--\u30d5\u30a1\u30a4\u30eb\u30bf\u30a4\u30d7\u3092\u9078\u629e - -EmailVisualPanel1.jLabel4.text=\u6ce8\uff1a\u5fc5\u9808\u30aa\u30d7\u30b7\u30e7\u30f3\u304c'*'\u3067\u30de\u30fc\u30af\u3055\u308c\u3066\u3044\u308b - -EmailVisualPanel1.jCheckBoxDisplayNameSameLabel.text=A\u3068B\u304c\u540c\u3058\u8868\u793a\u540d\u3092\u4f7f\u7528\u3057\u3066\u3044\u308b\u5834\u5408\u3001\u540c\u3058\u30ce\u30fc\u30c9\u3068\u3057\u3066\u307f\u306a\u3059 - -EmailVisualPanel1.jCheckBoxUseCcLine.text=\u8fba\u306e\u91cd\u307f\u3092\u8a08\u7b97\u3059\u308b\u3068\u304d\u306bCc\u884c\u3092\u4f7f\u7528 - -EmailVisualPanel1.jCheckBoxUseBccLine.text=\u8fba\u306e\u91cd\u307f\u3092\u8a08\u7b97\u3059\u308b\u3068\u304d\u306bBcc\u884c\u3092\u4f7f\u7528 - -EmailVisualPanel1.jLabel1.text=* - -EmailVisualPanel1.jLabel3.text=* - -EmailVisualPanel1.jLabel2.text=* - -EmailVisualPanel1.jRadioButtonFromLocalFile.text=\u30ed\u30fc\u30ab\u30eb\u30d5\u30a1\u30a4\u30eb\u304b\u3089E\u30e1\u30fc\u30eb\u3092\u53d7\u3051\u53d6\u308b - -EmailVisualPanel1.jLabel7.text=* - -EmailVisualPanel1.jRadioButtonFromServer.text=\u30e1\u30fc\u30eb\u30b5\u30fc\u30d0\u30fc\u304b\u3089\u96fb\u5b50\u30e1\u30fc\u30eb\u3092\u53d7\u3051\u53d6\u308b - -EmailVisualPanel1.jButtonFromLocalFile.text=\u30d5\u30a1\u30a4\u30eb\u3092\u9078\u629e... - -EmailVisualPanel2.jCheckBoxSubjectInclude.text=\u6a19\u984c\u306f\u30c6\u30ad\u30b9\u30c8\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\: - -EmailVisualPanel2.jCheckBoxEmailAddrFilter.text=\u96fb\u5b50\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u30d5\u30a3\u30eb\u30bf\u3002 \u3001\u5b9b\u5148\u3001CC\u3001\u307e\u305f\u306fBCC\u306e\u200b\u200b\u5404\u884c\u304b\u3089\u306e\u3053\u308c\u3089\u306e\u96fb\u5b50\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059 - -EmailVisualPanel2.jCheckBoxBcc.text=Bcc - -EmailVisualPanel2.jRadioButtonHasCc.text=Cc\u3042\u308a - -EmailVisualPanel2.jCheckBoxCc.text=Cc - -EmailVisualPanel2.jRadioButtonHasNoBcc.text=Bcc\u306a\u3057 - -EmailVisualPanel2.jRadioButtonHasBcc.text=Bcc\u3042\u308a - -EmailVisualPanel2.jRadioButtonHasNoAtta.text=\u6dfb\u4ed8\u306a\u3057 - -EmailVisualPanel2.jRadioButtonHasAtta.text=\u6dfb\u4ed8\u3042\u308a - -EmailVisualPanel2.jRadioButtonHasNoCc.text=Cc\u306a\u3057 - -EmailVisualPanel2.jCheckBoxAttachement.text=\u6dfb\u4ed8\u30d5\u30a1\u30a4\u30eb - -EmailVisualPanel2.jCheckBoxDayAfter.text=\u65e5\u4ed8\u4ee5\u964d - -EmailVisualPanel2.jPanel3.border.title=\u65e5\u4ed8\u7bc4\u56f2 - -EmailVisualPanel2.jCheckBoxDayBefore.text=\u65e5\u4ed8\u4ee5\u524d - -EmailVisualPanel2.jCheckBoxMessageInclude1.text=\u30e1\u30c3\u30bb\u30fc\u30b8\u306f\u30c6\u30ad\u30b9\u30c8\u304c\u542b\u307e\u308c\u3066\u3044\u307e\u3059\: - -EmailImportAdvancedOptPanel.name=\u9ad8\u5ea6\u306a\u9078\u629e\u80a2 - -EmailImportAdvancedOptPanel.jLabelPort.text=\u30dd\u30fc\u30c8\: - -EmailImportAdvancedOptPanel.jCheckBoxUseSSL.text=\u63a5\u7d9a\u306bSSL\u3092\u4f7f\u7528 - -EmailVisualPanel2.importCSVButton.text=CSV\u3092\u30a4\u30f3\u30dd\u30fc\u30c8... - -fileType_CSV_Name=CSV\u30d5\u30a1\u30a4\u30eb - -EmailVisualPanel2.importCSVButton.toolTipText=CSV\u304b\u3089\u306e\u96fb\u5b50\u30e1\u30fc\u30eb\u30a2\u30c9\u30ec\u30b9\u3092\u30ed\u30fc\u30c9\u3059\u308b - -EmailVisualPanel2.jLabel1.text=\u30d5\u30a3\u30eb\u30bf\u30fc diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/Bundle_pt_BR.properties b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/Bundle_pt_BR.properties deleted file mode 100644 index 2fce7f929f..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/Bundle_pt_BR.properties +++ /dev/null @@ -1,104 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr <celiofariajr@gmail.com>, 2011. -# C\u00e9lio Faria Jr. <celiofariajr@gmail.com>, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-17 12\:34+0000\nLast-Translator\: C\u00e9lio Faria Jr. <celiofariajr@gmail.com>\nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -EmailWizardSupport.Type=E-mail - -EmailWizardSupport1.SubType=Rede de endere\u00e7os de e-mail - -EmailWizardSupport1.Description=A importa\u00e7\u00e3o de e-mails pode ajudar usu\u00e1rios a analisar os contatos e-mail entre pessoas. \nCada endere\u00e7o de e-mail pode ser visto como um n\u00f3,e uma aresta \u00e9 constru\u00edda quando existe um \ne-mail entre uma dire\u00e7\u00e3o e outra. \u00c9 basicamente uma rede ego. - -EmailVisualPanel2.jTableFilter.column1.text=Endere\u00e7o de e-mail - -EmailVisualPanel2.jTableFilter.column2.text=Tipo - -EmailVisualPanel1.name=Selecione uma fonte de dados - -EmailVisualPanel1.jButton3.text=Avan\u00e7ado - -EmailVisualPanel1.jLabelServerType.text=Tipo de servidor\: - -EmailVisualPanel1.jTextFieldServerAddr.text=pop.gmail.com - -EmailVisualPanel1.jLabelServerAddr.text=Receber o endere\u00e7o do servidor\: - -EmailVisualPanel1.jLabelPsw.text=Senha\: - -EmailVisualPanel1.jLabelEmailAddr.text=E-mail\: - -EmailVisualPanel1.jLabel6.text=* - -EmailVisualPanel1.jLabel5.text=Tipo de arquivo\: - -EmailVisualPanel1.fileType.default=--Selecione o tipo de arquivo - -EmailVisualPanel1.jLabel4.text=Nota\: op\u00e7\u00f5es obrigat\u00f3rias s\u00e3o marcadas com '*' - -EmailVisualPanel1.jCheckBoxDisplayNameSameLabel.text=Se A e B t\u00eam o mesmo nome, consider\u00e1-los como um \u00fanico n\u00f3 - -EmailVisualPanel1.jCheckBoxUseCcLine.text=Use linha Cc ao calcular pesos das arestas - -EmailVisualPanel1.jCheckBoxUseBccLine.text=Use linha Bcc ao calcular pesos das arestas - -EmailVisualPanel1.jLabel1.text=* - -EmailVisualPanel1.jLabel3.text=* - -EmailVisualPanel1.jLabel2.text=* - -EmailVisualPanel1.jRadioButtonFromLocalFile.text=Receber e-mails a partir de arquivo local - -EmailVisualPanel1.jLabel7.text=* - -EmailVisualPanel1.jRadioButtonFromServer.text=Receber e-mails de um servidor de correio - -EmailVisualPanel1.jButtonFromLocalFile.text=Selecionar arquivo ... - -EmailVisualPanel2.jCheckBoxSubjectInclude.text=O assunto cont\u00e9m o texto\: - -EmailVisualPanel2.jCheckBoxEmailAddrFilter.text=Filtro de endere\u00e7os e-mail - -EmailVisualPanel2.jCheckBoxBcc.text=Bcc - -EmailVisualPanel2.jRadioButtonHasCc.text=Tem Cc - -EmailVisualPanel2.jCheckBoxCc.text=Cc - -EmailVisualPanel2.jRadioButtonHasNoBcc.text=N\u00e3o tem Bcc - -EmailVisualPanel2.jRadioButtonHasBcc.text=Tem Bcc - -EmailVisualPanel2.jRadioButtonHasNoAtta.text=N\u00e3o tem anexos - -EmailVisualPanel2.jRadioButtonHasAtta.text=Tem anexos - -EmailVisualPanel2.jRadioButtonHasNoCc.text=N\u00e3o tem Cc - -EmailVisualPanel2.jCheckBoxAttachement.text=Anexos - -EmailVisualPanel2.jCheckBoxDayAfter.text=Este dia ou o pr\u00f3ximo - -EmailVisualPanel2.jPanel3.border.title=Intervalo de datas - -EmailVisualPanel2.jCheckBoxDayBefore.text=Este dia ou o anterior - -EmailVisualPanel2.jCheckBoxMessageInclude1.text=A mensagem cont\u00e9m o texto\: - -EmailImportAdvancedOptPanel.name=Op\u00e7\u00f5es avan\u00e7adas - -EmailImportAdvancedOptPanel.jLabelPort.text=Porta\: - -EmailImportAdvancedOptPanel.jCheckBoxUseSSL.text=Usar SSL para conectar-se - -EmailVisualPanel2.importCSVButton.text=Importar CSV... - -fileType_CSV_Name=Arquivos CSV - -EmailVisualPanel2.importCSVButton.toolTipText=Carregar endere\u00e7os de e-mail de CSV - -EmailVisualPanel2.jLabel1.text=Filtros diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/Bundle_ru.properties b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/Bundle_ru.properties deleted file mode 100644 index 58587de717..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/Bundle_ru.properties +++ /dev/null @@ -1,103 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# <altsoph@gmail.com>, 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-15 08\:34+0000\nLast-Translator\: Altsoph <altsoph@gmail.com>\nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -EmailWizardSupport.Type=Email - -EmailWizardSupport1.SubType=\u0421\u0435\u0442\u044c \u0430\u0434\u0440\u0435\u0441\u043e\u0432 email - -EmailWizardSupport1.Description=Email-import \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0435 \u0441\u0432\u044f\u0437\u0438 \u043c\u0435\u0436\u0434\u0443 \u043b\u044e\u0434\u044c\u043c\u0438. \u041a\u0430\u0436\u0434\u044b\u0439 \u0430\u0434\u0440\u0435\u0441 email \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u0443\u0437\u0435\u043b, \u0430 \u043d\u0430\u043b\u0438\u0447\u0438\u0435 \u043f\u0438\u0441\u044c\u043c\u0430 \u043e\u0442 \u043e\u0434\u043d\u043e\u0433\u043e \u0430\u0434\u0440\u0435\u0441\u0430 \u043a \u0434\u0440\u0443\u0433\u043e\u043c\u0443 -- \u043a\u0430\u043a \u0440\u0435\u0431\u0440\u043e. \u0427\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u044d\u0442\u043e ego network. - -EmailVisualPanel2.jTableFilter.column1.text=\u0410\u0434\u0440\u0435\u0441 email - -EmailVisualPanel2.jTableFilter.column2.text=\u0422\u0438\u043f - -EmailVisualPanel1.name=\u0412\u044b\u0431\u043e\u0440 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 - -EmailVisualPanel1.jButton3.text=\u041f\u0440\u043e\u0434\u0432\u0438\u043d\u0443\u0442\u044b\u0439 - -EmailVisualPanel1.jLabelServerType.text=\u0422\u0438\u043f \u0441\u0435\u0440\u0432\u0435\u0440\u0430\: - -EmailVisualPanel1.jTextFieldServerAddr.text=pop.gmail.com - -EmailVisualPanel1.jLabelServerAddr.text=\u0410\u0434\u0440\u0435\u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u0430\: - -EmailVisualPanel1.jLabelPsw.text=\u041f\u0430\u0440\u043e\u043b\u044c\: - -EmailVisualPanel1.jLabelEmailAddr.text=\u0410\u0434\u0440\u0435\u0441 email\: - -EmailVisualPanel1.jLabel6.text=* - -EmailVisualPanel1.jLabel5.text=\u0422\u0438\u043f \u0444\u0430\u0439\u043b\u0430\: - -EmailVisualPanel1.fileType.default=--\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0442\u0438\u043f \u0444\u0430\u0439\u043b\u043e\u0432 - -EmailVisualPanel1.jLabel4.text=\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435\: \u041e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043f\u043e\u043b\u044f \u043e\u0442\u043c\u0435\u0447\u0435\u043d\u044b '*' - -EmailVisualPanel1.jCheckBoxDisplayNameSameLabel.text=\u0415\u0441\u043b\u0438 A \u0438 B \u0438\u043c\u0435\u044e\u0442 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0435 \u0438\u043c\u044f, \u0441\u0447\u0438\u0442\u0430\u0442\u044c \u0438\u0445 \u043e\u0434\u043d\u0438\u043c \u0443\u0437\u043b\u043e\u043c - -EmailVisualPanel1.jCheckBoxUseCcLine.text=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 CC \u043f\u0440\u0438 \u0440\u0430\u0441\u0447\u0451\u0442\u0435 \u0432\u0435\u0441\u043e\u0432 \u0440\u0435\u0431\u0451\u0440 - -EmailVisualPanel1.jCheckBoxUseBccLine.text=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0438 BCC \u043f\u0440\u0438 \u0440\u0430\u0441\u0447\u0451\u0442\u0435 \u0432\u0435\u0441\u043e\u0432 \u0440\u0435\u0431\u0451\u0440 - -EmailVisualPanel1.jLabel1.text=* - -EmailVisualPanel1.jLabel3.text=* - -EmailVisualPanel1.jLabel2.text=* - -EmailVisualPanel1.jRadioButtonFromLocalFile.text=\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0438\u0437 \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 - -EmailVisualPanel1.jLabel7.text=* - -EmailVisualPanel1.jRadioButtonFromServer.text=\u041f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0445 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0441 \u043f\u043e\u0447\u0442\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 - -EmailVisualPanel1.jButtonFromLocalFile.text=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0444\u0430\u0439\u043b... - -EmailVisualPanel2.jCheckBoxSubjectInclude.text=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u0435\u043a\u0441\u0442\: - -EmailVisualPanel2.jCheckBoxEmailAddrFilter.text=\u0424\u0438\u043b\u044c\u0442\u0440\u044b \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0445 \u0430\u0434\u0440\u0435\u0441\u043e\u0432. \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 - -EmailVisualPanel2.jCheckBoxBcc.text=BCC - -EmailVisualPanel2.jRadioButtonHasCc.text=\u0418\u043c\u0435\u0435\u0442 \u0421\u0421 - -EmailVisualPanel2.jCheckBoxCc.text=CC - -EmailVisualPanel2.jRadioButtonHasNoBcc.text=\u041d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0412\u0421\u0421 - -EmailVisualPanel2.jRadioButtonHasBcc.text=\u0418\u043c\u0435\u0435\u0442 \u0412\u0421\u0421 - -EmailVisualPanel2.jRadioButtonHasNoAtta.text=\u041d\u0435 \u0438\u043c\u0435\u0435\u0442 \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0445 \u0432\u043b\u043e\u0436\u0435\u043d\u0438\u0439 - -EmailVisualPanel2.jRadioButtonHasAtta.text=\u0418\u043c\u0435\u0435\u0442 \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0435 \u0432\u043b\u043e\u0436\u0435\u043d\u0438\u044f - -EmailVisualPanel2.jRadioButtonHasNoCc.text=\u041d\u0435 \u0438\u043c\u0435\u0435\u0442 \u0421\u0421 - -EmailVisualPanel2.jCheckBoxAttachement.text=\u0412\u043b\u043e\u0436\u0435\u043d\u0438\u044f - -EmailVisualPanel2.jCheckBoxDayAfter.text=\u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441\: - -EmailVisualPanel2.jPanel3.border.title=\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0434\u0430\u0442 - -EmailVisualPanel2.jCheckBoxDayBefore.text=\u0417\u0430\u043a\u0430\u043d\u0447\u0438\u0432\u0430\u044f\: - -EmailVisualPanel2.jCheckBoxMessageInclude1.text=\u0421\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u0435\u043a\u0441\u0442\: - -EmailImportAdvancedOptPanel.name=\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 - -EmailImportAdvancedOptPanel.jLabelPort.text=\u041f\u043e\u0440\u0442\: - -EmailImportAdvancedOptPanel.jCheckBoxUseSSL.text=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c SSL \u0434\u043b\u044f \u0441\u043e\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f - -EmailVisualPanel2.importCSVButton.text=\u0418\u043c\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c CSV... - -fileType_CSV_Name=CSV \u0444\u0430\u0439\u043b\u044b - -EmailVisualPanel2.importCSVButton.toolTipText=\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u043f\u043e\u0447\u0442\u043e\u0432\u044b\u0435 \u0430\u0434\u0440\u0435\u0441\u0430 \u0438\u0437 CSV - -EmailVisualPanel2.jLabel1.text=\u0424\u0438\u043b\u044c\u0442\u0440\u044b diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/Bundle_zh_CN.properties b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/Bundle_zh_CN.properties deleted file mode 100644 index 6ff3b55c53..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/Bundle_zh_CN.properties +++ /dev/null @@ -1,103 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ooof ooof <digitip@gmail.com>, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-10 09\:26+0000\nLast-Translator\: ooof ooof <digitip@gmail.com>\nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -EmailWizardSupport.Type=\u7535\u5b50\u90ae\u4ef6 - -EmailWizardSupport1.SubType=\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u7f51\u7edc - -EmailWizardSupport1.Description=\u7535\u5b50\u90ae\u4ef6\u5bfc\u5165\u53ef\u4ee5\u5e2e\u52a9\u7528\u6237\u5206\u6790\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u7535\u5b50\u90ae\u4ef6\u5f80\u6765\u3002\n\u6bcf\u4e2a\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u53ef\u4ee5\u88ab\u770b\u4f5c\u4e00\u4e2a\u8282\u70b9\uff0c\u4e00\u6761\u8fb9\u5b58\u5728\u5f53\u4e14\u4ec5\u5f53\u6709\u4e00\u5c01\u7535\u5b50\u90ae\u4ef6\u4ece\u4e00\u4e2a\u5730\u5740\u5230\u53e6\u4e00\u4e2a\u5730\u5740\u5b58\u5728\u3002\u591a\u6570\u662f\u81ea\u6211\u7f51\u7edc\u3002 - -EmailVisualPanel2.jTableFilter.column1.text=\u7535\u90ae\u5730\u5740 - -EmailVisualPanel2.jTableFilter.column2.text=\u7c7b\u578b - -EmailVisualPanel1.name=\u9009\u62e9\u6570\u636e\u6e90 - -EmailVisualPanel1.jButton3.text=\u9ad8\u7ea7 - -EmailVisualPanel1.jLabelServerType.text=\u63a5\u6536\u670d\u52a1\u5668\u7c7b\u578b\: - -EmailVisualPanel1.jTextFieldServerAddr.text=pop.gmail.com - -EmailVisualPanel1.jLabelServerAddr.text=\u63a5\u6536\u670d\u52a1\u5668\u5730\u5740\: - -EmailVisualPanel1.jLabelPsw.text=\u5bc6\u7801\: - -EmailVisualPanel1.jLabelEmailAddr.text=\u7535\u5b50\u90ae\u4ef6\u5730\u5740\: - -EmailVisualPanel1.jLabel6.text=* - -EmailVisualPanel1.jLabel5.text=\u6587\u4ef6\u7c7b\u578b\: - -EmailVisualPanel1.fileType.default=\u9009\u62e9\u6587\u4ef6\u7c7b\u578b - -EmailVisualPanel1.jLabel4.text=\u6ce8\uff1a\u5f3a\u5236\u6027\u9009\u9879\u201c*\u201d\u6807\u8bb0 - -EmailVisualPanel1.jCheckBoxDisplayNameSameLabel.text=\u5982\u679cA\u548cB\u6709\u76f8\u540c\u7684\u663e\u793a\u540d\u79f0\uff0c\u53ef\u4ee5\u8003\u8651\u4f5c\u4e3a\u540c\u4e00\u4e2a\u8282\u70b9 - -EmailVisualPanel1.jCheckBoxUseCcLine.text=\u8ba1\u7b97\u8fb9\u6743\u91cd\u65f6\uff0c\u4f7f\u7528\u6284\u9001\u884c - -EmailVisualPanel1.jCheckBoxUseBccLine.text=\u8ba1\u7b97\u8fb9\u6743\u91cd\u65f6\uff0c\u4f7f\u7528\u5bc6\u4ef6\u6284\u9001\u884c - -EmailVisualPanel1.jLabel1.text=* - -EmailVisualPanel1.jLabel3.text=* - -EmailVisualPanel1.jLabel2.text=* - -EmailVisualPanel1.jRadioButtonFromLocalFile.text=\u4ece\u672c\u5730\u6587\u4ef6\u63a5\u6536\u7535\u5b50\u90ae\u4ef6 - -EmailVisualPanel1.jLabel7.text=* - -EmailVisualPanel1.jRadioButtonFromServer.text=\u4ece\u90ae\u4ef6\u670d\u52a1\u5668\u63a5\u6536\u7535\u5b50\u90ae\u4ef6 - -EmailVisualPanel1.jButtonFromLocalFile.text=\u9009\u62e9\u6587\u4ef6... - -EmailVisualPanel2.jCheckBoxSubjectInclude.text=\u4e3b\u9898\u5305\u62ec\u6587\u5b57\: - -EmailVisualPanel2.jCheckBoxEmailAddrFilter.text=\u7535\u5b50\u90ae\u4ef6\u5730\u5740\u8fc7\u6ee4\u5668\u3002\u5305\u62ec\u4ece\u8fd9\u4e9b\u7535\u5b50\u90ae\u4ef6\u5730\u5740\uff0c\u6536\u4ef6\u4eba\uff0c\u6284\u9001\u6216\u5bc6\u4ef6\u6284\u9001\u201c\u884c - -EmailVisualPanel2.jCheckBoxBcc.text=\u5bc6\u4ef6\u6284\u9001 - -EmailVisualPanel2.jRadioButtonHasCc.text=\u5df2\u6284\u9001 - -EmailVisualPanel2.jCheckBoxCc.text=\u6284\u9001 - -EmailVisualPanel2.jRadioButtonHasNoBcc.text=\u6ca1\u6709\u5bc6\u4ef6\u6284\u9001 - -EmailVisualPanel2.jRadioButtonHasBcc.text=\u6709\u201c\u5bc6\u4ef6\u6284\u9001\u201d - -EmailVisualPanel2.jRadioButtonHasNoAtta.text=\u6ca1\u6709\u9644\u4ef6 - -EmailVisualPanel2.jRadioButtonHasAtta.text=\u6709\u9644\u4ef6 - -EmailVisualPanel2.jRadioButtonHasNoCc.text=\u6ca1\u6709\u6284\u9001 - -EmailVisualPanel2.jCheckBoxAttachement.text=\u9644\u4ef6 - -EmailVisualPanel2.jCheckBoxDayAfter.text=\u5f53\u65e5\u6216\u4e4b\u540e - -EmailVisualPanel2.jPanel3.border.title=\u65e5\u671f\u8303\u56f4 - -EmailVisualPanel2.jCheckBoxDayBefore.text=\u5f53\u65e5\u6216\u4e4b\u524d - -EmailVisualPanel2.jCheckBoxMessageInclude1.text=\u6d88\u606f\u4e2d\u5305\u542b\u7684\u6587\u5b57\: - -EmailImportAdvancedOptPanel.name=\u9ad8\u7ea7\u9009\u9879 - -EmailImportAdvancedOptPanel.jLabelPort.text=\u7aef\u53e3\: - -EmailImportAdvancedOptPanel.jCheckBoxUseSSL.text=\u4f7f\u7528SSL\u8fde\u63a5 - -EmailVisualPanel2.importCSVButton.text=\u5bfc\u5165CSV... - -fileType_CSV_Name=CSV\u6587\u4ef6 - -EmailVisualPanel2.importCSVButton.toolTipText=\u4eceCSV\u8f7d\u5165\u7535\u5b50\u90ae\u4ef6\u5730\u5740 - -EmailVisualPanel2.jLabel1.text=\u8fc7\u6ee4\u5668 diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/cs.po b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/cs.po deleted file mode 100644 index 591ecb2487..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/cs.po +++ /dev/null @@ -1,163 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz <zbynek.schwarz@gmail.com>, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 18:30+0000\n" -"Last-Translator: ZbynΔ›k Schwarz <zbynek.schwarz@gmail.com>\n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "EmailWizardSupport.Type" -msgstr "Email" - -msgid "EmailWizardSupport1.SubType" -msgstr "SΓ­Ε₯ emailovΓ© adresy" - -msgid "EmailWizardSupport1.Description" -msgstr "Import emailu mΕ―ΕΎe uΕΎivatelΕ―m pomoci zpracovat emailovΓ© kontakty mezi lidmi.\nKaΕΎdΓ‘ emailovΓ‘ adresa mΕ―ΕΎe bΓ½t povaΕΎovΓ‘na za uzel a hrana je sestavena, kdyΕΎ\nexistuje mezi nimi email. VΔ›tΕ‘inou je to sΓ­Ε₯ popularity," - -msgid "EmailVisualPanel2.jTableFilter.column1.text" -msgstr "EmailovΓ‘ adresa" - -msgid "EmailVisualPanel2.jTableFilter.column2.text" -msgstr "Typ" - -msgid "EmailVisualPanel1.name" -msgstr "Vyberte datovΓ½ zdroj" - -msgid "EmailVisualPanel1.jButton3.text" -msgstr "PokročilΓ©" - -msgid "EmailVisualPanel1.jLabelServerType.text" -msgstr "Typ pΕ™ijΓ­macΓ­ho serveru:" - -msgid "EmailVisualPanel1.jTextFieldServerAddr.text" -msgstr "pop.gmail.com" - -msgid "EmailVisualPanel1.jLabelServerAddr.text" -msgstr "Adresa pΕ™ijΓ­macΓ­ho serveru:" - -msgid "EmailVisualPanel1.jLabelPsw.text" -msgstr "Heslo:" - -msgid "EmailVisualPanel1.jLabelEmailAddr.text" -msgstr "EmailovΓ‘ adresa:" - -msgid "EmailVisualPanel1.jLabel6.text" -msgstr "*" - -msgid "EmailVisualPanel1.jLabel5.text" -msgstr "Typ souboru:" - -msgid "EmailVisualPanel1.fileType.default" -msgstr "--Vyberte typ souboru" - -msgid "EmailVisualPanel1.jLabel4.text" -msgstr "PoznΓ‘mka: PovinnΓ© moΕΎnosti jsou označeny '*'" - -msgid "EmailVisualPanel1.jCheckBoxDisplayNameSameLabel.text" -msgstr "Pokud A a B majΓ­ stejnΓ© zobrazovanΓ© jmΓ©no, povaΕΎovat je za jeden uzel" - -msgid "EmailVisualPanel1.jCheckBoxUseCcLine.text" -msgstr "PouΕΎΓ­t Ε™Γ‘dek Kopie pΕ™i vypočítΓ‘vΓ‘nΓ­ vΓ‘hy hran" - -msgid "EmailVisualPanel1.jCheckBoxUseBccLine.text" -msgstr "PouΕΎΓ­t Ε™Γ‘dek SkrytΓ‘ kopie pΕ™i vypočítΓ‘vΓ‘nΓ­ vΓ‘hy hran" - -msgid "EmailVisualPanel1.jLabel1.text" -msgstr "*" - -msgid "EmailVisualPanel1.jLabel3.text" -msgstr "*" - -msgid "EmailVisualPanel1.jLabel2.text" -msgstr "*" - -msgid "EmailVisualPanel1.jRadioButtonFromLocalFile.text" -msgstr "Načíst emaily z mΓ­stnΓ­ho souboru" - -msgid "EmailVisualPanel1.jLabel7.text" -msgstr "*" - -msgid "EmailVisualPanel1.jRadioButtonFromServer.text" -msgstr "ObdrΕΎet emaily od emailovΓ©ho serveru" - -msgid "EmailVisualPanel1.jButtonFromLocalFile.text" -msgstr "Vyberte soubor..." - -msgid "EmailVisualPanel2.jCheckBoxSubjectInclude.text" -msgstr "PΕ™edmΔ›t obsahuje text:" - -msgid "EmailVisualPanel2.jCheckBoxEmailAddrFilter.text" -msgstr "Filtry emailovΓ½ch adres. Tyto adresy zahrňte na Ε™Γ‘dcΓ­ch Od, Komu, Kopie, nebo SkrytΓ‘ kopie" - -msgid "EmailVisualPanel2.jCheckBoxBcc.text" -msgstr "SkrytΓ‘ kopie" - -msgid "EmailVisualPanel2.jRadioButtonHasCc.text" -msgstr "MΓ‘ kopii" - -msgid "EmailVisualPanel2.jCheckBoxCc.text" -msgstr "Kopie" - -msgid "EmailVisualPanel2.jRadioButtonHasNoBcc.text" -msgstr "NemΓ‘ skrytou kopii" - -msgid "EmailVisualPanel2.jRadioButtonHasBcc.text" -msgstr "MΓ‘ skrytou kopii" - -msgid "EmailVisualPanel2.jRadioButtonHasNoAtta.text" -msgstr "NemΓ‘ pΕ™Γ­lohy" - -msgid "EmailVisualPanel2.jRadioButtonHasAtta.text" -msgstr "MΓ‘ pΕ™Γ­lohy" - -msgid "EmailVisualPanel2.jRadioButtonHasNoCc.text" -msgstr "NemΓ‘ kopii" - -msgid "EmailVisualPanel2.jCheckBoxAttachement.text" -msgstr "PΕ™Γ­lohy" - -msgid "EmailVisualPanel2.jCheckBoxDayAfter.text" -msgstr "V den nebo potΓ©" - -msgid "EmailVisualPanel2.jPanel3.border.title" -msgstr "ČasovΓ© obdobΓ­" - -msgid "EmailVisualPanel2.jCheckBoxDayBefore.text" -msgstr "V den nebo pΕ™edtΓ­m" - -msgid "EmailVisualPanel2.jCheckBoxMessageInclude1.text" -msgstr "ZprΓ‘va obsahuje text:" - -msgid "EmailImportAdvancedOptPanel.name" -msgstr "PokročilΓ© moΕΎnosti" - -msgid "EmailImportAdvancedOptPanel.jLabelPort.text" -msgstr "Port:" - -msgid "EmailImportAdvancedOptPanel.jCheckBoxUseSSL.text" -msgstr "PouΕΎΓ­t SSL pro pΕ™ipojenΓ­" - -msgid "EmailVisualPanel2.importCSVButton.text" -msgstr "Importovat CSV..." - -msgid "fileType_CSV_Name" -msgstr "Soubory CSV" - -msgid "EmailVisualPanel2.importCSVButton.toolTipText" -msgstr "Načíst emailovΓ© adresy z CSV" - -msgid "EmailVisualPanel2.jLabel1.text" -msgstr "Filtry" diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/es.po b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/es.po deleted file mode 100644 index 42b94550b9..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/es.po +++ /dev/null @@ -1,165 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos <eduramiba@gmail.com>, 2011. -# FIRST AUTHOR <EMAIL@ADDRESS>, 2011. -# <sebastien.heymann@gmail.com>, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 18:09+0000\n" -"Last-Translator: gephi <sebastien.heymann@gmail.com>\n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "EmailWizardSupport.Type" -msgstr "Email" - -msgid "EmailWizardSupport1.SubType" -msgstr "Red de direcciones email" - -msgid "EmailWizardSupport1.Description" -msgstr "Importar emails puede ayudar a los usuarios a analizar los contactos email mediante personas.\nCada direcciΓ³n email puede ser vista como un nodo, y cada arista es construida cuando un email\nexiste entre una direcciΓ³n y otra. Es bΓ‘sicamente una red de ego." - -msgid "EmailVisualPanel2.jTableFilter.column1.text" -msgstr "DirecciΓ³n email" - -msgid "EmailVisualPanel2.jTableFilter.column2.text" -msgstr "Tipo" - -msgid "EmailVisualPanel1.name" -msgstr "Elige origen de datos" - -msgid "EmailVisualPanel1.jButton3.text" -msgstr "Avanzado" - -msgid "EmailVisualPanel1.jLabelServerType.text" -msgstr "Tipo de servidor" - -msgid "EmailVisualPanel1.jTextFieldServerAddr.text" -msgstr "pop.gmail.com" - -msgid "EmailVisualPanel1.jLabelServerAddr.text" -msgstr "DirecciΓ³n del servidor" - -msgid "EmailVisualPanel1.jLabelPsw.text" -msgstr "ContraseΓ±a" - -msgid "EmailVisualPanel1.jLabelEmailAddr.text" -msgstr "DirecciΓ³n email" - -msgid "EmailVisualPanel1.jLabel6.text" -msgstr "*" - -msgid "EmailVisualPanel1.jLabel5.text" -msgstr "Tipo de archivo" - -msgid "EmailVisualPanel1.fileType.default" -msgstr "--Elige tipo de archivo" - -msgid "EmailVisualPanel1.jLabel4.text" -msgstr "Nota: Los campos obligatorios estΓ‘n marcados con '*'" - -msgid "EmailVisualPanel1.jCheckBoxDisplayNameSameLabel.text" -msgstr "Si A y B tienen el mismo nombre, considerarlos como un solo nodo" - -msgid "EmailVisualPanel1.jCheckBoxUseCcLine.text" -msgstr "Usar lΓ­nea Cc al calcular los pesos de las aristas" - -msgid "EmailVisualPanel1.jCheckBoxUseBccLine.text" -msgstr "Usar lΓ­nea Bcc al calcular los pesos de las aristas" - -msgid "EmailVisualPanel1.jLabel1.text" -msgstr "*" - -msgid "EmailVisualPanel1.jLabel3.text" -msgstr "*" - -msgid "EmailVisualPanel1.jLabel2.text" -msgstr "*" - -msgid "EmailVisualPanel1.jRadioButtonFromLocalFile.text" -msgstr "Cargar emails de archivo local" - -msgid "EmailVisualPanel1.jLabel7.text" -msgstr "*" - -msgid "EmailVisualPanel1.jRadioButtonFromServer.text" -msgstr "Recibir emails de servidor" - -msgid "EmailVisualPanel1.jButtonFromLocalFile.text" -msgstr "Seleccionar archivo..." - -msgid "EmailVisualPanel2.jCheckBoxSubjectInclude.text" -msgstr "El asunto incluye el texto:" - -msgid "EmailVisualPanel2.jCheckBoxEmailAddrFilter.text" -msgstr "Filtro de direcciΓ³n email. Incluir estas direcciones en las lΓ­neas From, To, Cc, o Bcc" - -msgid "EmailVisualPanel2.jCheckBoxBcc.text" -msgstr "Bcc" - -msgid "EmailVisualPanel2.jRadioButtonHasCc.text" -msgstr "Tiene Cc" - -msgid "EmailVisualPanel2.jCheckBoxCc.text" -msgstr "Cc" - -msgid "EmailVisualPanel2.jRadioButtonHasNoBcc.text" -msgstr "No tiene Bcc" - -msgid "EmailVisualPanel2.jRadioButtonHasBcc.text" -msgstr "Tiene Bcc" - -msgid "EmailVisualPanel2.jRadioButtonHasNoAtta.text" -msgstr "No tiene adjuntos" - -msgid "EmailVisualPanel2.jRadioButtonHasAtta.text" -msgstr "Tiene adjuntos" - -msgid "EmailVisualPanel2.jRadioButtonHasNoCc.text" -msgstr "No tiene Cc" - -msgid "EmailVisualPanel2.jCheckBoxAttachement.text" -msgstr "Tiene adjuntos" - -msgid "EmailVisualPanel2.jCheckBoxDayAfter.text" -msgstr "Ese dΓ­a o posterior" - -msgid "EmailVisualPanel2.jPanel3.border.title" -msgstr "Rango de fechas" - -msgid "EmailVisualPanel2.jCheckBoxDayBefore.text" -msgstr "Ese dΓ­a o anterior" - -msgid "EmailVisualPanel2.jCheckBoxMessageInclude1.text" -msgstr "El mensaje incluye el texto:" - -msgid "EmailImportAdvancedOptPanel.name" -msgstr "Opciones avanzadas" - -msgid "EmailImportAdvancedOptPanel.jLabelPort.text" -msgstr "Puerto:" - -msgid "EmailImportAdvancedOptPanel.jCheckBoxUseSSL.text" -msgstr "Utilizar SSL para conectarse" - -msgid "EmailVisualPanel2.importCSVButton.text" -msgstr "Importar CSV..." - -msgid "fileType_CSV_Name" -msgstr "Archivos CSV" - -msgid "EmailVisualPanel2.importCSVButton.toolTipText" -msgstr "Cargar direcciones email de CSV" - -msgid "EmailVisualPanel2.jLabel1.text" -msgstr "Filtros" diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/fr.po b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/fr.po deleted file mode 100644 index 971235f4bb..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/fr.po +++ /dev/null @@ -1,163 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# <sebastien.heymann@gmail.com>, 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-08 15:17+0000\n" -"Last-Translator: gephi <sebastien.heymann@gmail.com>\n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "EmailWizardSupport.Type" -msgstr "E-mail" - -msgid "EmailWizardSupport1.SubType" -msgstr "RΓ©seau d'adresses e-mail" - -msgid "EmailWizardSupport1.Description" -msgstr "L'import d'email peut aider Γ  analyser les contacts via email entre des individus. Chaque adresse email est vue comme un noeud, et les liens sont construits quand un email existe entre deux adresses." - -msgid "EmailVisualPanel2.jTableFilter.column1.text" -msgstr "Adresse e-mail" - -msgid "EmailVisualPanel2.jTableFilter.column2.text" -msgstr "Type" - -msgid "EmailVisualPanel1.name" -msgstr "Choisir la Source de DonnΓ©es" - -msgid "EmailVisualPanel1.jButton3.text" -msgstr "AvancΓ©" - -msgid "EmailVisualPanel1.jLabelServerType.text" -msgstr "Type du serveur :" - -msgid "EmailVisualPanel1.jTextFieldServerAddr.text" -msgstr "pop.gmail.com" - -msgid "EmailVisualPanel1.jLabelServerAddr.text" -msgstr "Adresse du serveur :" - -msgid "EmailVisualPanel1.jLabelPsw.text" -msgstr "Mot de passe :" - -msgid "EmailVisualPanel1.jLabelEmailAddr.text" -msgstr "Adresse e-mail" - -msgid "EmailVisualPanel1.jLabel6.text" -msgstr "*" - -msgid "EmailVisualPanel1.jLabel5.text" -msgstr "Type de fichier :" - -msgid "EmailVisualPanel1.fileType.default" -msgstr "--Choisir le type de fichier" - -msgid "EmailVisualPanel1.jLabel4.text" -msgstr "Note: '*' indique une option obligatoire" - -msgid "EmailVisualPanel1.jCheckBoxDisplayNameSameLabel.text" -msgstr "Si A et B ont le mΓͺme nom d'affichage, alors les considΓ©rer comme un seul noeud." - -msgid "EmailVisualPanel1.jCheckBoxUseCcLine.text" -msgstr "Utiliser la ligne Cc lors du calcul du poids des liens" - -msgid "EmailVisualPanel1.jCheckBoxUseBccLine.text" -msgstr "Utiliser la ligne Bcc lors du calcul du poids des liens" - -msgid "EmailVisualPanel1.jLabel1.text" -msgstr "*" - -msgid "EmailVisualPanel1.jLabel3.text" -msgstr "*" - -msgid "EmailVisualPanel1.jLabel2.text" -msgstr "*" - -msgid "EmailVisualPanel1.jRadioButtonFromLocalFile.text" -msgstr "Recevoir les e-mails depuis un fichier local" - -msgid "EmailVisualPanel1.jLabel7.text" -msgstr "*" - -msgid "EmailVisualPanel1.jRadioButtonFromServer.text" -msgstr "Recevoir les e-mails depuis un serveur de mails." - -msgid "EmailVisualPanel1.jButtonFromLocalFile.text" -msgstr "SΓ©lectionner un fichier..." - -msgid "EmailVisualPanel2.jCheckBoxSubjectInclude.text" -msgstr "Sujet incluant le texte :" - -msgid "EmailVisualPanel2.jCheckBoxEmailAddrFilter.text" -msgstr "Filtres d'adresse e-mail. Ajoutez-les aux lignes From, To, Cc ou Bcc." - -msgid "EmailVisualPanel2.jCheckBoxBcc.text" -msgstr "Bcc" - -msgid "EmailVisualPanel2.jRadioButtonHasCc.text" -msgstr "Avec Cc" - -msgid "EmailVisualPanel2.jCheckBoxCc.text" -msgstr "Cc" - -msgid "EmailVisualPanel2.jRadioButtonHasNoBcc.text" -msgstr "Sans Bcc" - -msgid "EmailVisualPanel2.jRadioButtonHasBcc.text" -msgstr "Avec Bcc" - -msgid "EmailVisualPanel2.jRadioButtonHasNoAtta.text" -msgstr "Sans piΓ¨ces jointes" - -msgid "EmailVisualPanel2.jRadioButtonHasAtta.text" -msgstr "Avec piΓ¨ces jointes" - -msgid "EmailVisualPanel2.jRadioButtonHasNoCc.text" -msgstr "Sans Cc" - -msgid "EmailVisualPanel2.jCheckBoxAttachement.text" -msgstr "PiΓ¨ces jointes" - -msgid "EmailVisualPanel2.jCheckBoxDayAfter.text" -msgstr "Jours courant ou postΓ©rieur" - -msgid "EmailVisualPanel2.jPanel3.border.title" -msgstr "Plage de date" - -msgid "EmailVisualPanel2.jCheckBoxDayBefore.text" -msgstr "Jours courant ou prΓ©cΓ©dent" - -msgid "EmailVisualPanel2.jCheckBoxMessageInclude1.text" -msgstr "Messages incluant le texte :" - -msgid "EmailImportAdvancedOptPanel.name" -msgstr "Options AvancΓ©es" - -msgid "EmailImportAdvancedOptPanel.jLabelPort.text" -msgstr "Port :" - -msgid "EmailImportAdvancedOptPanel.jCheckBoxUseSSL.text" -msgstr "Utiliser une connexion SSL" - -msgid "EmailVisualPanel2.importCSVButton.text" -msgstr "Importer CSV..." - -msgid "fileType_CSV_Name" -msgstr "Fichiers CSV" - -msgid "EmailVisualPanel2.importCSVButton.toolTipText" -msgstr "Charger les adresses e-mail depuis un fichier CSV" - -msgid "EmailVisualPanel2.jLabel1.text" -msgstr "Filtres" diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/ja.po b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/ja.po deleted file mode 100644 index dd83dd4e1a..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/ja.po +++ /dev/null @@ -1,163 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida <kida.siro@gmail.com>, 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-15 07:54+0000\n" -"Last-Translator: Siro Kida <kida.siro@gmail.com>\n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "EmailWizardSupport.Type" -msgstr "パール" - -msgid "EmailWizardSupport1.SubType" -msgstr "γƒ‘γƒΌγƒ«γƒ»γ‚’γƒ‰γƒ¬γ‚Ήγƒ»γƒγƒƒγƒˆγƒ―γƒΌγ‚―" - -msgid "EmailWizardSupport1.Description" -msgstr "電子パールγγ‚€γƒ³γƒγƒΌγƒˆγ―γ€γƒ¦γƒΌγ‚ΆγƒΌγŒδΊΊγ€…γι–“で電子パールγι€£η΅‘ε…ˆγ‚’εˆ†ζžγ™γ‚‹ιš›γ«ε½Ήη«‹γ‘γΎγ™γ€‚ε„ι›»ε­γƒ‘γƒΌγƒ«γ‚’γƒ‰γƒ¬γ‚Ήγ―γ€γƒŽγƒΌγƒ‰γ¨θ¦‹γͺγ™γ“γ¨γŒγ§γγ€θΎΊγ―γ€ι›»ε­γƒ‘γƒΌγƒ«γδΈ€γ€γ‹γ‚‰εˆ₯γε­˜εœ¨γ™γ‚‹γ¨γγ«ζžΆγ‘γ‚‰γ‚ŒγΎγ™γ€‚ε€§ζŠ΅γγ‚Œγ―γ‚¨γ‚΄γƒγƒƒγƒˆγƒ―γƒΌγ‚―γ§γ™γ€‚" - -msgid "EmailVisualPanel2.jTableFilter.column1.text" -msgstr "パール・をドレス" - -msgid "EmailVisualPanel2.jTableFilter.column2.text" -msgstr "η¨ι‘ž" - -msgid "EmailVisualPanel1.name" -msgstr "γƒ‡γƒΌγ‚Ώγ‚½γƒΌγ‚Ήγ‚’ιΈζŠž" - -msgid "EmailVisualPanel1.jButton3.text" -msgstr "θ©³η΄°" - -msgid "EmailVisualPanel1.jLabelServerType.text" -msgstr "レシーブァーバγη¨ι‘ž:" - -msgid "EmailVisualPanel1.jTextFieldServerAddr.text" -msgstr "pop.gmail.com" - -msgid "EmailVisualPanel1.jLabelServerAddr.text" -msgstr "レシーブァーバγγ‚’ドレス:" - -msgid "EmailVisualPanel1.jLabelPsw.text" -msgstr "パスワード:" - -msgid "EmailVisualPanel1.jLabelEmailAddr.text" -msgstr "パール・をドレス:" - -msgid "EmailVisualPanel1.jLabel6.text" -msgstr "*" - -msgid "EmailVisualPanel1.jLabel5.text" -msgstr "フゑむルγη¨ι‘ž:" - -msgid "EmailVisualPanel1.fileType.default" -msgstr "--γƒ•γ‚‘γ‚€γƒ«γ‚Ώγ‚€γƒ—γ‚’ιΈζŠž" - -msgid "EmailVisualPanel1.jLabel4.text" -msgstr "ζ³¨οΌšεΏ…ι ˆγ‚ͺγƒ—γ‚·γƒ§γƒ³γŒ'*'γ§γƒžγƒΌγ‚―γ•γ‚Œγ¦γ„γ‚‹" - -msgid "EmailVisualPanel1.jCheckBoxDisplayNameSameLabel.text" -msgstr "AとBγŒεŒγ˜θ‘¨η€Ίεγ‚’δ½Ώη”¨γ—γ¦γ„γ‚‹ε ΄εˆγ€εŒγ˜γƒŽγƒΌγƒ‰γ¨γ—γ¦γΏγͺす" - -msgid "EmailVisualPanel1.jCheckBoxUseCcLine.text" -msgstr "θΎΊγι‡γΏγ‚’θ¨ˆη—するときにCcθ‘Œγ‚’δ½Ώη”¨" - -msgid "EmailVisualPanel1.jCheckBoxUseBccLine.text" -msgstr "θΎΊγι‡γΏγ‚’θ¨ˆη—するときにBccθ‘Œγ‚’δ½Ώη”¨" - -msgid "EmailVisualPanel1.jLabel1.text" -msgstr "*" - -msgid "EmailVisualPanel1.jLabel3.text" -msgstr "*" - -msgid "EmailVisualPanel1.jLabel2.text" -msgstr "*" - -msgid "EmailVisualPanel1.jRadioButtonFromLocalFile.text" -msgstr "ローカルフゑむルからEパールを受け取る" - -msgid "EmailVisualPanel1.jLabel7.text" -msgstr "*" - -msgid "EmailVisualPanel1.jRadioButtonFromServer.text" -msgstr "パールァーバーから電子パールを受け取る" - -msgid "EmailVisualPanel1.jButtonFromLocalFile.text" -msgstr "γƒ•γ‚‘γ‚€γƒ«γ‚’ιΈζŠž..." - -msgid "EmailVisualPanel2.jCheckBoxSubjectInclude.text" -msgstr "ζ¨™ι‘Œγ―γƒ†γ‚­γ‚ΉγƒˆγŒε«γΎγ‚Œγ¦γ„γΎγ™:" - -msgid "EmailVisualPanel2.jCheckBoxEmailAddrFilter.text" -msgstr "電子パールをドレスフィルタ。 、ε›ε…ˆγ€CCγ€γΎγŸγ―BCCγβ€‹β€‹ε„θ‘Œγ‹γ‚‰γγ“γ‚Œγ‚‰γι›»ε­γƒ‘γƒΌγƒ«γ‚’γƒ‰γƒ¬γ‚ΉγŒε«γΎγ‚Œγ¦γ„γΎγ™" - -msgid "EmailVisualPanel2.jCheckBoxBcc.text" -msgstr "Bcc" - -msgid "EmailVisualPanel2.jRadioButtonHasCc.text" -msgstr "Ccγ‚γ‚Š" - -msgid "EmailVisualPanel2.jCheckBoxCc.text" -msgstr "Cc" - -msgid "EmailVisualPanel2.jRadioButtonHasNoBcc.text" -msgstr "Bccγͺし" - -msgid "EmailVisualPanel2.jRadioButtonHasBcc.text" -msgstr "Bccγ‚γ‚Š" - -msgid "EmailVisualPanel2.jRadioButtonHasNoAtta.text" -msgstr "添付γͺし" - -msgid "EmailVisualPanel2.jRadioButtonHasAtta.text" -msgstr "ζ·»δ»˜γ‚γ‚Š" - -msgid "EmailVisualPanel2.jRadioButtonHasNoCc.text" -msgstr "Ccγͺし" - -msgid "EmailVisualPanel2.jCheckBoxAttachement.text" -msgstr "ζ·»δ»˜γƒ•γ‚‘γ‚€γƒ«" - -msgid "EmailVisualPanel2.jCheckBoxDayAfter.text" -msgstr "ζ—₯付δ»₯降" - -msgid "EmailVisualPanel2.jPanel3.border.title" -msgstr "ζ—₯δ»˜η―„ε›²" - -msgid "EmailVisualPanel2.jCheckBoxDayBefore.text" -msgstr "ζ—₯付δ»₯前" - -msgid "EmailVisualPanel2.jCheckBoxMessageInclude1.text" -msgstr "γƒ‘γƒƒγ‚»γƒΌγ‚Έγ―γƒ†γ‚­γ‚ΉγƒˆγŒε«γΎγ‚Œγ¦γ„γΎγ™:" - -msgid "EmailImportAdvancedOptPanel.name" -msgstr "高度γͺιΈζŠžθ‚’" - -msgid "EmailImportAdvancedOptPanel.jLabelPort.text" -msgstr "γƒγƒΌγƒˆ:" - -msgid "EmailImportAdvancedOptPanel.jCheckBoxUseSSL.text" -msgstr "ζŽ₯碚にSSLを使用" - -msgid "EmailVisualPanel2.importCSVButton.text" -msgstr "CSVγ‚’γ‚€γƒ³γƒγƒΌγƒˆ..." - -msgid "fileType_CSV_Name" -msgstr "CSVフゑむル" - -msgid "EmailVisualPanel2.importCSVButton.toolTipText" -msgstr "CSVからγι›»ε­γƒ‘ールをドレスをロードする" - -msgid "EmailVisualPanel2.jLabel1.text" -msgstr "フィルター" diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/org-gephi-ui-spigot-plugin-email.pot b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/org-gephi-ui-spigot-plugin-email.pot deleted file mode 100644 index 8eac2b72ac..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/org-gephi-ui-spigot-plugin-email.pot +++ /dev/null @@ -1,165 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team <gephi.team@lists.launchpad.net>, 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian <gephi.team@lists.launchpad.net>\n" -"Language-Team: English <https://launchpad.net/~gephi.team>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "EmailWizardSupport.Type" -msgstr "Email" - -msgid "EmailWizardSupport1.SubType" -msgstr "Email Address Network" - -msgid "EmailWizardSupport1.Description" -msgstr "" -"Email import can help users analyse the email contacts between people. \n" -"Each email address can be seen as a node, and an edge is built when an \n" -"email exists from one to another. Mostly it's ego network." - -msgid "EmailVisualPanel2.jTableFilter.column1.text" -msgstr "Email Address" - -msgid "EmailVisualPanel2.jTableFilter.column2.text" -msgstr "Type" - -msgid "EmailVisualPanel1.name" -msgstr "Select Datasource" - -msgid "EmailVisualPanel1.jButton3.text" -msgstr "Advanced" - -msgid "EmailVisualPanel1.jLabelServerType.text" -msgstr "Receive server type:" - -msgid "EmailVisualPanel1.jTextFieldServerAddr.text" -msgstr "pop.gmail.com" - -msgid "EmailVisualPanel1.jLabelServerAddr.text" -msgstr "Receive server address:" - -msgid "EmailVisualPanel1.jLabelPsw.text" -msgstr "Password:" - -msgid "EmailVisualPanel1.jLabelEmailAddr.text" -msgstr "Email address:" - -msgid "EmailVisualPanel1.jLabel6.text" -msgstr "*" - -msgid "EmailVisualPanel1.jLabel5.text" -msgstr "File Type:" - -msgid "EmailVisualPanel1.fileType.default" -msgstr "--Select file type" - -msgid "EmailVisualPanel1.jLabel4.text" -msgstr "Note:Mandatory options are marked by '*'" - -msgid "EmailVisualPanel1.jCheckBoxDisplayNameSameLabel.text" -msgstr "If A and B have the same display name, consider them as one node" - -msgid "EmailVisualPanel1.jCheckBoxUseCcLine.text" -msgstr "Use Cc line when calculating edge weights" - -msgid "EmailVisualPanel1.jCheckBoxUseBccLine.text" -msgstr "Use Bcc line when calculating edge weights" - -msgid "EmailVisualPanel1.jLabel1.text" -msgstr "*" - -msgid "EmailVisualPanel1.jLabel3.text" -msgstr "*" - -msgid "EmailVisualPanel1.jLabel2.text" -msgstr "*" - -msgid "EmailVisualPanel1.jRadioButtonFromLocalFile.text" -msgstr "Load emails from local file" - -msgid "EmailVisualPanel1.jLabel7.text" -msgstr "*" - -msgid "EmailVisualPanel1.jRadioButtonFromServer.text" -msgstr "Receive emails from mail server" - -msgid "EmailVisualPanel1.jButtonFromLocalFile.text" -msgstr "Select File..." - -msgid "EmailVisualPanel2.jCheckBoxSubjectInclude.text" -msgstr "Subject includes text:" - -msgid "EmailVisualPanel2.jCheckBoxEmailAddrFilter.text" -msgstr "" -"Email address filters. Include these email addresses on the From, To, Cc, or " -"Bcc lines" - -msgid "EmailVisualPanel2.jCheckBoxBcc.text" -msgstr "Bcc" - -msgid "EmailVisualPanel2.jRadioButtonHasCc.text" -msgstr "Has Cc" - -msgid "EmailVisualPanel2.jCheckBoxCc.text" -msgstr "Cc" - -msgid "EmailVisualPanel2.jRadioButtonHasNoBcc.text" -msgstr "Doesn't have Bcc" - -msgid "EmailVisualPanel2.jRadioButtonHasBcc.text" -msgstr "Has Bcc" - -msgid "EmailVisualPanel2.jRadioButtonHasNoAtta.text" -msgstr "Doesn't have attachments" - -msgid "EmailVisualPanel2.jRadioButtonHasAtta.text" -msgstr "Has attachments" - -msgid "EmailVisualPanel2.jRadioButtonHasNoCc.text" -msgstr "Doesn't have Cc" - -msgid "EmailVisualPanel2.jCheckBoxAttachement.text" -msgstr "Attachments" - -msgid "EmailVisualPanel2.jCheckBoxDayAfter.text" -msgstr "Day on or after" - -msgid "EmailVisualPanel2.jPanel3.border.title" -msgstr "Date range" - -msgid "EmailVisualPanel2.jCheckBoxDayBefore.text" -msgstr "Day on or before" - -msgid "EmailVisualPanel2.jCheckBoxMessageInclude1.text" -msgstr "Message includes text:" - -msgid "EmailImportAdvancedOptPanel.name" -msgstr "Advanced Options" - -msgid "EmailImportAdvancedOptPanel.jLabelPort.text" -msgstr "Port:" - -msgid "EmailImportAdvancedOptPanel.jCheckBoxUseSSL.text" -msgstr "Use SSL to Connect" - -msgid "EmailVisualPanel2.importCSVButton.text" -msgstr "Import CSV..." - -msgid "fileType_CSV_Name" -msgstr "CSV Files" - -msgid "EmailVisualPanel2.importCSVButton.toolTipText" -msgstr "Load emails addresses from CSV" - -msgid "EmailVisualPanel2.jLabel1.text" -msgstr "Filters" diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/pt_BR.po b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/pt_BR.po deleted file mode 100644 index 1a4a5884f8..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/pt_BR.po +++ /dev/null @@ -1,164 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr <celiofariajr@gmail.com>, 2011. -# CΓ©lio Faria Jr. <celiofariajr@gmail.com>, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-17 12:34+0000\n" -"Last-Translator: CΓ©lio Faria Jr. <celiofariajr@gmail.com>\n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "EmailWizardSupport.Type" -msgstr "E-mail" - -msgid "EmailWizardSupport1.SubType" -msgstr "Rede de endereΓ§os de e-mail" - -msgid "EmailWizardSupport1.Description" -msgstr "A importaΓ§Γ£o de e-mails pode ajudar usuΓ‘rios a analisar os contatos e-mail entre pessoas. \nCada endereΓ§o de e-mail pode ser visto como um nΓ³,e uma aresta Γ© construΓ­da quando existe um \ne-mail entre uma direΓ§Γ£o e outra. Γ‰ basicamente uma rede ego." - -msgid "EmailVisualPanel2.jTableFilter.column1.text" -msgstr "EndereΓ§o de e-mail" - -msgid "EmailVisualPanel2.jTableFilter.column2.text" -msgstr "Tipo" - -msgid "EmailVisualPanel1.name" -msgstr "Selecione uma fonte de dados" - -msgid "EmailVisualPanel1.jButton3.text" -msgstr "AvanΓ§ado" - -msgid "EmailVisualPanel1.jLabelServerType.text" -msgstr "Tipo de servidor:" - -msgid "EmailVisualPanel1.jTextFieldServerAddr.text" -msgstr "pop.gmail.com" - -msgid "EmailVisualPanel1.jLabelServerAddr.text" -msgstr "Receber o endereΓ§o do servidor:" - -msgid "EmailVisualPanel1.jLabelPsw.text" -msgstr "Senha:" - -msgid "EmailVisualPanel1.jLabelEmailAddr.text" -msgstr "E-mail:" - -msgid "EmailVisualPanel1.jLabel6.text" -msgstr "*" - -msgid "EmailVisualPanel1.jLabel5.text" -msgstr "Tipo de arquivo:" - -msgid "EmailVisualPanel1.fileType.default" -msgstr "--Selecione o tipo de arquivo" - -msgid "EmailVisualPanel1.jLabel4.text" -msgstr "Nota: opΓ§Γ΅es obrigatΓ³rias sΓ£o marcadas com '*'" - -msgid "EmailVisualPanel1.jCheckBoxDisplayNameSameLabel.text" -msgstr "Se A e B tΓͺm o mesmo nome, considerΓ‘-los como um ΓΊnico nΓ³" - -msgid "EmailVisualPanel1.jCheckBoxUseCcLine.text" -msgstr "Use linha Cc ao calcular pesos das arestas" - -msgid "EmailVisualPanel1.jCheckBoxUseBccLine.text" -msgstr "Use linha Bcc ao calcular pesos das arestas" - -msgid "EmailVisualPanel1.jLabel1.text" -msgstr "*" - -msgid "EmailVisualPanel1.jLabel3.text" -msgstr "*" - -msgid "EmailVisualPanel1.jLabel2.text" -msgstr "*" - -msgid "EmailVisualPanel1.jRadioButtonFromLocalFile.text" -msgstr "Receber e-mails a partir de arquivo local" - -msgid "EmailVisualPanel1.jLabel7.text" -msgstr "*" - -msgid "EmailVisualPanel1.jRadioButtonFromServer.text" -msgstr "Receber e-mails de um servidor de correio" - -msgid "EmailVisualPanel1.jButtonFromLocalFile.text" -msgstr "Selecionar arquivo ..." - -msgid "EmailVisualPanel2.jCheckBoxSubjectInclude.text" -msgstr "O assunto contΓ©m o texto:" - -msgid "EmailVisualPanel2.jCheckBoxEmailAddrFilter.text" -msgstr "Filtro de endereΓ§os e-mail" - -msgid "EmailVisualPanel2.jCheckBoxBcc.text" -msgstr "Bcc" - -msgid "EmailVisualPanel2.jRadioButtonHasCc.text" -msgstr "Tem Cc" - -msgid "EmailVisualPanel2.jCheckBoxCc.text" -msgstr "Cc" - -msgid "EmailVisualPanel2.jRadioButtonHasNoBcc.text" -msgstr "NΓ£o tem Bcc" - -msgid "EmailVisualPanel2.jRadioButtonHasBcc.text" -msgstr "Tem Bcc" - -msgid "EmailVisualPanel2.jRadioButtonHasNoAtta.text" -msgstr "NΓ£o tem anexos" - -msgid "EmailVisualPanel2.jRadioButtonHasAtta.text" -msgstr "Tem anexos" - -msgid "EmailVisualPanel2.jRadioButtonHasNoCc.text" -msgstr "NΓ£o tem Cc" - -msgid "EmailVisualPanel2.jCheckBoxAttachement.text" -msgstr "Anexos" - -msgid "EmailVisualPanel2.jCheckBoxDayAfter.text" -msgstr "Este dia ou o prΓ³ximo" - -msgid "EmailVisualPanel2.jPanel3.border.title" -msgstr "Intervalo de datas" - -msgid "EmailVisualPanel2.jCheckBoxDayBefore.text" -msgstr "Este dia ou o anterior" - -msgid "EmailVisualPanel2.jCheckBoxMessageInclude1.text" -msgstr "A mensagem contΓ©m o texto:" - -msgid "EmailImportAdvancedOptPanel.name" -msgstr "OpΓ§Γ΅es avanΓ§adas" - -msgid "EmailImportAdvancedOptPanel.jLabelPort.text" -msgstr "Porta:" - -msgid "EmailImportAdvancedOptPanel.jCheckBoxUseSSL.text" -msgstr "Usar SSL para conectar-se" - -msgid "EmailVisualPanel2.importCSVButton.text" -msgstr "Importar CSV..." - -msgid "fileType_CSV_Name" -msgstr "Arquivos CSV" - -msgid "EmailVisualPanel2.importCSVButton.toolTipText" -msgstr "Carregar endereΓ§os de e-mail de CSV" - -msgid "EmailVisualPanel2.jLabel1.text" -msgstr "Filtros" diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/ru.po b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/ru.po deleted file mode 100644 index 24097f37c7..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/ru.po +++ /dev/null @@ -1,163 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# <altsoph@gmail.com>, 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-15 08:34+0000\n" -"Last-Translator: Altsoph <altsoph@gmail.com>\n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "EmailWizardSupport.Type" -msgstr "Email" - -msgid "EmailWizardSupport1.SubType" -msgstr "Π‘Π΅Ρ‚ΡŒ адрСсов email" - -msgid "EmailWizardSupport1.Description" -msgstr "Email-import позволяСт Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Π΅ связи ΠΌΠ΅ΠΆΠ΄Ρƒ людьми. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ адрСс email рассматриваСтся ΠΊΠ°ΠΊ ΡƒΠ·Π΅Π», Π° Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ письма ΠΎΡ‚ ΠΎΠ΄Π½ΠΎΠ³ΠΎ адрСса ΠΊ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ -- ΠΊΠ°ΠΊ Ρ€Π΅Π±Ρ€ΠΎ. Π§Π°Ρ‰Π΅ всСго это ego network." - -msgid "EmailVisualPanel2.jTableFilter.column1.text" -msgstr "АдрСс email" - -msgid "EmailVisualPanel2.jTableFilter.column2.text" -msgstr "Π’ΠΈΠΏ" - -msgid "EmailVisualPanel1.name" -msgstr "Π’Ρ‹Π±ΠΎΡ€ источника" - -msgid "EmailVisualPanel1.jButton3.text" -msgstr "ΠŸΡ€ΠΎΠ΄Π²ΠΈΠ½ΡƒΡ‚Ρ‹ΠΉ" - -msgid "EmailVisualPanel1.jLabelServerType.text" -msgstr "Π’ΠΈΠΏ сСрвСра:" - -msgid "EmailVisualPanel1.jTextFieldServerAddr.text" -msgstr "pop.gmail.com" - -msgid "EmailVisualPanel1.jLabelServerAddr.text" -msgstr "АдрСс сСрвСра:" - -msgid "EmailVisualPanel1.jLabelPsw.text" -msgstr "ΠŸΠ°Ρ€ΠΎΠ»ΡŒ:" - -msgid "EmailVisualPanel1.jLabelEmailAddr.text" -msgstr "АдрСс email:" - -msgid "EmailVisualPanel1.jLabel6.text" -msgstr "*" - -msgid "EmailVisualPanel1.jLabel5.text" -msgstr "Π’ΠΈΠΏ Ρ„Π°ΠΉΠ»Π°:" - -msgid "EmailVisualPanel1.fileType.default" -msgstr "--Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ‚ΠΈΠΏ Ρ„Π°ΠΉΠ»ΠΎΠ²" - -msgid "EmailVisualPanel1.jLabel4.text" -msgstr "ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΠ΅: ΠžΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ поля ΠΎΡ‚ΠΌΠ΅Ρ‡Π΅Π½Ρ‹ '*'" - -msgid "EmailVisualPanel1.jCheckBoxDisplayNameSameLabel.text" -msgstr "Если A ΠΈ B ΠΈΠΌΠ΅ΡŽΡ‚ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅ΠΌΠΎΠ΅ имя, ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ ΠΈΡ… ΠΎΠ΄Π½ΠΈΠΌ ΡƒΠ·Π»ΠΎΠΌ" - -msgid "EmailVisualPanel1.jCheckBoxUseCcLine.text" -msgstr "Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ CC ΠΏΡ€ΠΈ расчётС вСсов Ρ€Π΅Π±Ρ‘Ρ€" - -msgid "EmailVisualPanel1.jCheckBoxUseBccLine.text" -msgstr "Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ BCC ΠΏΡ€ΠΈ расчётС вСсов Ρ€Π΅Π±Ρ‘Ρ€" - -msgid "EmailVisualPanel1.jLabel1.text" -msgstr "*" - -msgid "EmailVisualPanel1.jLabel3.text" -msgstr "*" - -msgid "EmailVisualPanel1.jLabel2.text" -msgstr "*" - -msgid "EmailVisualPanel1.jRadioButtonFromLocalFile.text" -msgstr "ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… сообщСний ΠΈΠ· локального Ρ„Π°ΠΉΠ»Π°" - -msgid "EmailVisualPanel1.jLabel7.text" -msgstr "*" - -msgid "EmailVisualPanel1.jRadioButtonFromServer.text" -msgstr "ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… сообщСний с ΠΏΠΎΡ‡Ρ‚ΠΎΠ²ΠΎΠ³ΠΎ сСрвСра" - -msgid "EmailVisualPanel1.jButtonFromLocalFile.text" -msgstr "Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»..." - -msgid "EmailVisualPanel2.jCheckBoxSubjectInclude.text" -msgstr "Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ содСрТит тСкст:" - -msgid "EmailVisualPanel2.jCheckBoxEmailAddrFilter.text" -msgstr "Π€ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… адрСсов. Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ адрСса" - -msgid "EmailVisualPanel2.jCheckBoxBcc.text" -msgstr "BCC" - -msgid "EmailVisualPanel2.jRadioButtonHasCc.text" -msgstr "Π˜ΠΌΠ΅Π΅Ρ‚ Π‘Π‘" - -msgid "EmailVisualPanel2.jCheckBoxCc.text" -msgstr "CC" - -msgid "EmailVisualPanel2.jRadioButtonHasNoBcc.text" -msgstr "НС ΠΈΠΌΠ΅Π΅Ρ‚ Π’Π‘Π‘" - -msgid "EmailVisualPanel2.jRadioButtonHasBcc.text" -msgstr "Π˜ΠΌΠ΅Π΅Ρ‚ Π’Π‘Π‘" - -msgid "EmailVisualPanel2.jRadioButtonHasNoAtta.text" -msgstr "НС ΠΈΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Ρ… Π²Π»ΠΎΠΆΠ΅Π½ΠΈΠΉ" - -msgid "EmailVisualPanel2.jRadioButtonHasAtta.text" -msgstr "Π˜ΠΌΠ΅Π΅Ρ‚ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Π΅ влоТСния" - -msgid "EmailVisualPanel2.jRadioButtonHasNoCc.text" -msgstr "НС ΠΈΠΌΠ΅Π΅Ρ‚ Π‘Π‘" - -msgid "EmailVisualPanel2.jCheckBoxAttachement.text" -msgstr "ВлоТСния" - -msgid "EmailVisualPanel2.jCheckBoxDayAfter.text" -msgstr "Начиная с:" - -msgid "EmailVisualPanel2.jPanel3.border.title" -msgstr "Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π΄Π°Ρ‚" - -msgid "EmailVisualPanel2.jCheckBoxDayBefore.text" -msgstr "Заканчивая:" - -msgid "EmailVisualPanel2.jCheckBoxMessageInclude1.text" -msgstr "Π‘ΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΠ΅ содСрТит тСкст:" - -msgid "EmailImportAdvancedOptPanel.name" -msgstr "Π Π°ΡΡˆΠΈΡ€Π΅Π½Π½Ρ‹Π΅ настройки" - -msgid "EmailImportAdvancedOptPanel.jLabelPort.text" -msgstr "ΠŸΠΎΡ€Ρ‚:" - -msgid "EmailImportAdvancedOptPanel.jCheckBoxUseSSL.text" -msgstr "Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ SSL для соСдинСния" - -msgid "EmailVisualPanel2.importCSVButton.text" -msgstr "Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ CSV..." - -msgid "fileType_CSV_Name" -msgstr "CSV Ρ„Π°ΠΉΠ»Ρ‹" - -msgid "EmailVisualPanel2.importCSVButton.toolTipText" -msgstr "Π—Π°Π³Ρ€ΡƒΠ·ΠΈΡ‚ΡŒ ΠΏΠΎΡ‡Ρ‚ΠΎΠ²Ρ‹Π΅ адрСса ΠΈΠ· CSV" - -msgid "EmailVisualPanel2.jLabel1.text" -msgstr "Π€ΠΈΠ»ΡŒΡ‚Ρ€Ρ‹" diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/zh_CN.po b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/zh_CN.po deleted file mode 100644 index 38756ef9c5..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/email/zh_CN.po +++ /dev/null @@ -1,163 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ooof ooof <digitip@gmail.com>, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-10 09:26+0000\n" -"Last-Translator: ooof ooof <digitip@gmail.com>\n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "EmailWizardSupport.Type" -msgstr "甡子ι‚δ»Ά" - -msgid "EmailWizardSupport1.SubType" -msgstr "甡子ι‚δ»Άεœ°ε€η½‘η»œ" - -msgid "EmailWizardSupport1.Description" -msgstr "甡子ι‚δ»Άε―Όε…₯可δ»₯εΈεŠ©η”¨ζˆ·εˆ†ζžδΊΊδΈŽδΊΊδΉ‹ι—΄ηš„η”΅ε­ι‚δ»ΆεΎ€ζ₯。\n每δΈͺ甡子ι‚δ»Άεœ°ε€ε―δ»₯θ’«ηœ‹δ½œδΈ€δΈͺθŠ‚η‚ΉοΌŒδΈ€ζ‘θΎΉε­˜εœ¨ε½“δΈ”δ»…ε½“ζœ‰δΈ€ε°η”΅ε­ι‚δ»Άδ»ŽδΈ€δΈͺεœ°ε€εˆ°ε¦δΈ€δΈͺεœ°ε€ε­˜εœ¨γ€‚ε€šζ•°ζ˜―θ‡ͺζˆ‘η½‘η»œγ€‚" - -msgid "EmailVisualPanel2.jTableFilter.column1.text" -msgstr "η”΅ι‚εœ°ε€" - -msgid "EmailVisualPanel2.jTableFilter.column2.text" -msgstr "η±»εž‹" - -msgid "EmailVisualPanel1.name" -msgstr "选择数ζζΊ" - -msgid "EmailVisualPanel1.jButton3.text" -msgstr "高级" - -msgid "EmailVisualPanel1.jLabelServerType.text" -msgstr "ζŽ₯ζ”ΆζœεŠ‘ε™¨η±»εž‹:" - -msgid "EmailVisualPanel1.jTextFieldServerAddr.text" -msgstr "pop.gmail.com" - -msgid "EmailVisualPanel1.jLabelServerAddr.text" -msgstr "ζŽ₯ζ”ΆζœεŠ‘ε™¨εœ°ε€:" - -msgid "EmailVisualPanel1.jLabelPsw.text" -msgstr "密码:" - -msgid "EmailVisualPanel1.jLabelEmailAddr.text" -msgstr "甡子ι‚δ»Άεœ°ε€:" - -msgid "EmailVisualPanel1.jLabel6.text" -msgstr "*" - -msgid "EmailVisualPanel1.jLabel5.text" -msgstr "ζ–‡δ»Άη±»εž‹:" - -msgid "EmailVisualPanel1.fileType.default" -msgstr "ι€‰ζ‹©ζ–‡δ»Άη±»εž‹" - -msgid "EmailVisualPanel1.jLabel4.text" -msgstr "ζ³¨οΌšεΌΊεˆΆζ€§ι€‰ι‘Ήβ€œ*”标θ°" - -msgid "EmailVisualPanel1.jCheckBoxDisplayNameSameLabel.text" -msgstr "ε¦‚ζžœAε’ŒBζœ‰η›ΈεŒηš„ζ˜Ύη€Ίεη§°οΌŒε―δ»₯θ€ƒθ™‘δ½œδΈΊεŒδΈ€δΈͺθŠ‚η‚Ή" - -msgid "EmailVisualPanel1.jCheckBoxUseCcLine.text" -msgstr "θ‘η—θΎΉζƒι‡ζ—ΆοΌŒδ½Ώη”¨ζŠ„ι€θ‘Œ" - -msgid "EmailVisualPanel1.jCheckBoxUseBccLine.text" -msgstr "θ‘η—θΎΉζƒι‡ζ—ΆοΌŒδ½Ώη”¨ε―†δ»ΆζŠ„ι€θ‘Œ" - -msgid "EmailVisualPanel1.jLabel1.text" -msgstr "*" - -msgid "EmailVisualPanel1.jLabel3.text" -msgstr "*" - -msgid "EmailVisualPanel1.jLabel2.text" -msgstr "*" - -msgid "EmailVisualPanel1.jRadioButtonFromLocalFile.text" -msgstr "δ»Žζœ¬εœ°ζ–‡δ»ΆζŽ₯攢甡子ι‚δ»Ά" - -msgid "EmailVisualPanel1.jLabel7.text" -msgstr "*" - -msgid "EmailVisualPanel1.jRadioButtonFromServer.text" -msgstr "从ι‚δ»ΆζœεŠ‘器ζŽ₯攢甡子ι‚δ»Ά" - -msgid "EmailVisualPanel1.jButtonFromLocalFile.text" -msgstr "选择文仢..." - -msgid "EmailVisualPanel2.jCheckBoxSubjectInclude.text" -msgstr "δΈ»ι’˜εŒ…ζ‹¬ζ–‡ε­—:" - -msgid "EmailVisualPanel2.jCheckBoxEmailAddrFilter.text" -msgstr "甡子ι‚δ»Άεœ°ε€θΏ‡ζ»€ε™¨γ€‚εŒ…ζ‹¬δ»ŽθΏ™δΊ›η”΅ε­ι‚δ»Άεœ°ε€οΌŒζ”Άδ»ΆδΊΊοΌŒζŠ„ι€ζˆ–ε―†δ»ΆζŠ„ι€β€œθ‘Œ" - -msgid "EmailVisualPanel2.jCheckBoxBcc.text" -msgstr "ε―†δ»ΆζŠ„ι€" - -msgid "EmailVisualPanel2.jRadioButtonHasCc.text" -msgstr "ε·²ζŠ„ι€" - -msgid "EmailVisualPanel2.jCheckBoxCc.text" -msgstr "ζŠ„ι€" - -msgid "EmailVisualPanel2.jRadioButtonHasNoBcc.text" -msgstr "ζ²‘ζœ‰ε―†δ»ΆζŠ„ι€" - -msgid "EmailVisualPanel2.jRadioButtonHasBcc.text" -msgstr "ζœ‰β€œε―†δ»ΆζŠ„ι€β€" - -msgid "EmailVisualPanel2.jRadioButtonHasNoAtta.text" -msgstr "ζ²‘ζœ‰ι™„δ»Ά" - -msgid "EmailVisualPanel2.jRadioButtonHasAtta.text" -msgstr "ζœ‰ι™„δ»Ά" - -msgid "EmailVisualPanel2.jRadioButtonHasNoCc.text" -msgstr "ζ²‘ζœ‰ζŠ„ι€" - -msgid "EmailVisualPanel2.jCheckBoxAttachement.text" -msgstr "ι™„δ»Ά" - -msgid "EmailVisualPanel2.jCheckBoxDayAfter.text" -msgstr "当ζ—₯ζˆ–δΉ‹εŽ" - -msgid "EmailVisualPanel2.jPanel3.border.title" -msgstr "ζ—₯ζœŸθŒƒε›΄" - -msgid "EmailVisualPanel2.jCheckBoxDayBefore.text" -msgstr "当ζ—₯ζˆ–δΉ‹ε‰" - -msgid "EmailVisualPanel2.jCheckBoxMessageInclude1.text" -msgstr "ζΆˆζ―δΈ­εŒ…ε«ηš„ζ–‡ε­—:" - -msgid "EmailImportAdvancedOptPanel.name" -msgstr "ι«˜ηΊ§ι€‰ι‘Ή" - -msgid "EmailImportAdvancedOptPanel.jLabelPort.text" -msgstr "端口:" - -msgid "EmailImportAdvancedOptPanel.jCheckBoxUseSSL.text" -msgstr "使用SSL连ζŽ₯" - -msgid "EmailVisualPanel2.importCSVButton.text" -msgstr "ε―Όε…₯CSV..." - -msgid "fileType_CSV_Name" -msgstr "CSVζ–‡δ»Ά" - -msgid "EmailVisualPanel2.importCSVButton.toolTipText" -msgstr "从CSVθ½½ε…₯甡子ι‚δ»Άεœ°ε€" - -msgid "EmailVisualPanel2.jLabel1.text" -msgstr "过滀器" diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/es.po b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/es.po deleted file mode 100644 index 8728d78154..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/es.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:58+0000\n" -"Last-Translator: gephi <sebastien.heymann@gmail.com>\n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implementaciones de las interfaces de usuario para conectores (spigots)" diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/fr.po b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/fr.po deleted file mode 100644 index 2226ae4138..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/fr.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:58+0000\n" -"Last-Translator: gephi <sebastien.heymann@gmail.com>\n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplΓ©mentation coeur des Connecteurs (Spigot)" diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/ja.po b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/ja.po deleted file mode 100644 index 19f43fbf76..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/ja.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida <kida.siro@gmail.com>, 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-18 10:38+0000\n" -"Last-Translator: Siro Kida <kida.siro@gmail.com>\n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "γ‚Ήγƒ”γ‚΄γƒƒγƒˆγγƒ¦γƒΌγ‚Άγ‚€γƒ³γ‚Ώγƒ•γ‚§γƒΌγ‚ΉγεŸθ£…" diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/org-gephi-ui-spigot-plugin.pot b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/org-gephi-ui-spigot-plugin.pot deleted file mode 100644 index cbc5b72b60..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/org-gephi-ui-spigot-plugin.pot +++ /dev/null @@ -1,19 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team <gephi.team@lists.launchpad.net>, 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian <gephi.team@lists.launchpad.net>\n" -"Language-Team: English <https://launchpad.net/~gephi.team>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Spigot user interfaces implementations" diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/pt_BR.po b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/pt_BR.po deleted file mode 100644 index a92aa1500f..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/pt_BR.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr <celiofariajr@gmail.com>, 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 16:12+0000\n" -"Last-Translator: CΓ©lio Faria Jr. <celiofariajr@gmail.com>\n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplementaΓ§Γ΅es de interfaces de usuΓ‘rio de Spigots" diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/ru.po b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/ru.po deleted file mode 100644 index 270dca3ccd..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/ru.po +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# <altsoph@gmail.com>, 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-11-25 07:00+0000\n" -"Last-Translator: Altsoph <altsoph@gmail.com>\n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Spigot user interfaces implementations" diff --git a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/zh_CN.po b/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/zh_CN.po deleted file mode 100644 index 0f04d9a4f4..0000000000 --- a/modules/SpigotPluginUI/src/main/resources/org/gephi/ui/spigot/plugin/zh_CN.po +++ /dev/null @@ -1,21 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:07+0000\n" -"Last-Translator: gephi <sebastien.heymann@gmail.com>\n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "插ε…₯η”¨ζˆ·εžηŽ°ηš„ζŽ₯口" diff --git a/modules/StatisticsAPI/pom.xml b/modules/StatisticsAPI/pom.xml index 6a2c7ed652..a0b5315f08 100644 --- a/modules/StatisticsAPI/pom.xml +++ b/modules/StatisticsAPI/pom.xml @@ -4,22 +4,18 @@ <parent> <artifactId>gephi-parent</artifactId> <groupId>org.gephi</groupId> - <version>0.9-SNAPSHOT</version> + <version>0.11.3-SNAPSHOT</version> <relativePath>../..</relativePath> </parent> <groupId>org.gephi</groupId> <artifactId>statistics-api</artifactId> - <version>0.9-SNAPSHOT</version> + <version>0.11.3-SNAPSHOT</version> <packaging>nbm</packaging> <name>StatisticsAPI</name> <dependencies> - <dependency> - <groupId>${project.groupId}</groupId> - <artifactId>dynamic-api</artifactId> - </dependency> <dependency> <groupId>${project.groupId}</groupId> <artifactId>graph-api</artifactId> @@ -53,7 +49,7 @@ <build> <plugins> <plugin> - <groupId>org.codehaus.mojo</groupId> + <groupId>org.apache.netbeans.utilities</groupId> <artifactId>nbm-maven-plugin</artifactId> <configuration> <publicPackages> diff --git a/modules/StatisticsAPI/src/main/java/org/gephi/statistics/StatisticsControllerImpl.java b/modules/StatisticsAPI/src/main/java/org/gephi/statistics/StatisticsControllerImpl.java index 37601d4df3..5757e54f1f 100644 --- a/modules/StatisticsAPI/src/main/java/org/gephi/statistics/StatisticsControllerImpl.java +++ b/modules/StatisticsAPI/src/main/java/org/gephi/statistics/StatisticsControllerImpl.java @@ -40,85 +40,66 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.attribute.api.TimestampIndex; -import org.gephi.attribute.time.Interval; import org.gephi.graph.api.Edge; import org.gephi.graph.api.Graph; -import org.gephi.statistics.spi.StatisticsBuilder; -import org.gephi.statistics.spi.Statistics; -import org.gephi.statistics.api.*; import org.gephi.graph.api.GraphController; import org.gephi.graph.api.GraphModel; import org.gephi.graph.api.GraphView; +import org.gephi.graph.api.Interval; import org.gephi.graph.api.Node; -import org.gephi.project.api.ProjectController; -import org.gephi.utils.longtask.spi.LongTask; -import org.gephi.utils.longtask.api.LongTaskExecutor; -import org.gephi.utils.longtask.api.LongTaskListener; +import org.gephi.graph.api.Subgraph; +import org.gephi.graph.api.TimeIndex; import org.gephi.project.api.Workspace; -import org.gephi.project.api.WorkspaceListener; +import org.gephi.project.spi.Controller; +import org.gephi.statistics.api.StatisticsController; import org.gephi.statistics.spi.DynamicStatistics; +import org.gephi.statistics.spi.Statistics; +import org.gephi.statistics.spi.StatisticsBuilder; +import org.gephi.utils.longtask.api.LongTaskExecutor; +import org.gephi.utils.longtask.api.LongTaskListener; +import org.gephi.utils.longtask.spi.LongTask; import org.gephi.utils.progress.Progress; import org.gephi.utils.progress.ProgressTicket; import org.openide.util.Lookup; import org.openide.util.lookup.ServiceProvider; +import org.openide.util.lookup.ServiceProviders; /** - * * @author Mathieu Bastian * @author Patrick J. McSweeney */ -@ServiceProvider(service = StatisticsController.class) -public class StatisticsControllerImpl implements StatisticsController { +@ServiceProviders({ + @ServiceProvider(service = StatisticsController.class), + @ServiceProvider(service = Controller.class)}) +public class StatisticsControllerImpl implements StatisticsController, Controller<StatisticsModelImpl> { private final StatisticsBuilder[] statisticsBuilders; - private StatisticsModelImpl model; public StatisticsControllerImpl() { statisticsBuilders = Lookup.getDefault().lookupAll(StatisticsBuilder.class).toArray(new StatisticsBuilder[0]); + } - //Workspace events - ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); - pc.addWorkspaceListener(new WorkspaceListener() { - - @Override - public void initialize(Workspace workspace) { - workspace.add(new StatisticsModelImpl()); - } - - @Override - public void select(Workspace workspace) { - model = workspace.getLookup().lookup(StatisticsModelImpl.class); - if (model == null) { - model = new StatisticsModelImpl(); - workspace.add(model); - } - } - - @Override - public void unselect(Workspace workspace) { - } + @Override + public Class<StatisticsModelImpl> getModelClass() { + return StatisticsModelImpl.class; + } - @Override - public void close(Workspace workspace) { - } + @Override + public StatisticsModelImpl newModel(Workspace workspace) { + return new StatisticsModelImpl(workspace); + } - @Override - public void disable() { - model = null; - } - }); + @Override + public StatisticsModelImpl getModel() { + return Controller.super.getModel(); + } - if (pc.getCurrentWorkspace() != null) { - model = pc.getCurrentWorkspace().getLookup().lookup(StatisticsModelImpl.class); - if (model == null) { - model = new StatisticsModelImpl(); - pc.getCurrentWorkspace().add(model); - } - } + @Override + public StatisticsModelImpl getModel(Workspace workspace) { + return Controller.super.getModel(workspace); } @Override @@ -129,13 +110,14 @@ public void execute(final Statistics statistics, LongTaskListener listener) { executor.setLongTaskListener(listener); } + final StatisticsModelImpl model = getModel(); if (statistics instanceof DynamicStatistics) { final DynamicLongTask dynamicLongTask = new DynamicLongTask((DynamicStatistics) statistics); executor.execute(dynamicLongTask, new Runnable() { @Override public void run() { - executeDynamic((DynamicStatistics) statistics, dynamicLongTask); + executeDynamic((DynamicStatistics) statistics, dynamicLongTask, model); } }, builder.getName(), null); } else { @@ -144,7 +126,7 @@ public void run() { @Override public void run() { - execute(statistics); + executeStatic(statistics, model); } }, builder.getName(), null); } @@ -152,27 +134,37 @@ public void run() { @Override public void execute(Statistics statistics) { + StatisticsModelImpl model = getModel(); if (statistics instanceof DynamicStatistics) { - executeDynamic((DynamicStatistics) statistics, null); + executeDynamic((DynamicStatistics) statistics, null, model); } else { - GraphController graphController = Lookup.getDefault().lookup(GraphController.class); - GraphModel graphModel = graphController.getGraphModel(); - AttributeModel attributeModel = graphController.getAttributeModel(); - statistics.execute(graphModel, attributeModel); - model.addReport(statistics); + executeStatic(statistics, model); } } - private void executeDynamic(DynamicStatistics statistics, DynamicLongTask dynamicLongTask) { + private void executeStatic(Statistics statistics, StatisticsModelImpl model) { + GraphController graphController = Lookup.getDefault().lookup(GraphController.class); + GraphModel graphModel = graphController.getGraphModel(model.getWorkspace()); + statistics.execute(graphModel); + model.addReport(statistics); + } + + private void executeDynamic(DynamicStatistics statistics, DynamicLongTask dynamicLongTask, + StatisticsModelImpl model) { GraphController graphController = Lookup.getDefault().lookup(GraphController.class); GraphModel graphModel = graphController.getGraphModel(); - AttributeModel attributeModel = graphController.getAttributeModel(); double window = statistics.getWindow(); double tick = statistics.getTick(); + + GraphView currentView = graphModel.getVisibleView(); Interval bounds = statistics.getBounds(); if (bounds == null) { - bounds = graphModel.getTimeBoundsVisible(); + if (currentView.isMainView()) { + bounds = graphModel.getTimeBounds(); + } else { + bounds = currentView.getTimeInterval(); + } statistics.setBounds(bounds); } @@ -183,32 +175,50 @@ private void executeDynamic(DynamicStatistics statistics, DynamicLongTask dynami } //Init - statistics.execute(graphModel, attributeModel); + statistics.execute(graphModel); //Loop for (double low = bounds.getLow(); low <= bounds.getHigh() - window; low += tick) { double high = low + window; -// Graph g = dynamicGraph.getSnapshotGraph(low, high); - - - GraphView currentView = graphModel.getVisibleView(); Graph graph = graphModel.getGraphVisible(); - GraphView view = graphModel.createView(); - Graph g = graphModel.getGraph(view); - - TimestampIndex<Node> nodeIndex = graphModel.getNodeTimestampIndex(currentView); - for(Node node : nodeIndex.get(low, high)) { - g.addNode(node); - } - - TimestampIndex<Edge> edgeIndex = graphModel.getEdgeTimestampIndex(currentView); - for(Edge edge : edgeIndex.get(low, high)) { - g.addEdge(edge); - } - - statistics.loop(g.getView(), new Interval(low, high)); + graph.writeLock(); + try { + GraphView view = graphModel.createView(); + Subgraph g = graphModel.getGraph(view); + + TimeIndex<Node> nodeIndex = graphModel.getNodeTimeIndex(currentView); + if (Double.isInfinite(nodeIndex.getMinTimestamp()) && Double.isInfinite(nodeIndex.getMaxTimestamp())) { + for (Node node : graph.getNodes()) { + g.addNode(node); + } + } else { + for (Node node : nodeIndex.get(new Interval(low, high))) { + g.addNode(node); + } + } + + TimeIndex<Edge> edgeIndex = graphModel.getEdgeTimeIndex(currentView); + if (Double.isInfinite(edgeIndex.getMinTimestamp()) && Double.isInfinite(edgeIndex.getMaxTimestamp())) { + for (Edge edge : graph.getEdges()) { + if (g.contains(edge.getSource()) && g.contains(edge.getTarget())) { + g.addEdge(edge); + } + } + } else { + for (Edge edge : edgeIndex.get(new Interval(low, high))) { + if (g.contains(edge.getSource()) && g.contains(edge.getTarget())) { + g.addEdge(edge); + } + } + } + + statistics.loop(g.getView(), new Interval(low, high)); + } finally { + graph.writeUnlock(); + graph.readUnlockAll(); + } //Cancelled? if (dynamicLongTask != null && dynamicLongTask.isCancelled()) { @@ -221,6 +231,7 @@ private void executeDynamic(DynamicStatistics statistics, DynamicLongTask dynami model.addReport(statistics); } + @Override public StatisticsBuilder getBuilder(Class<? extends Statistics> statisticsClass) { for (StatisticsBuilder b : statisticsBuilders) { if (b.getStatisticsClass().equals(statisticsClass)) { @@ -230,24 +241,11 @@ public StatisticsBuilder getBuilder(Class<? extends Statistics> statisticsClass) return null; } - public StatisticsModelImpl getModel() { - return model; - } - - public StatisticsModel getModel(Workspace workspace) { - StatisticsModel statModel = workspace.getLookup().lookup(StatisticsModelImpl.class); - if (statModel == null) { - statModel = new StatisticsModelImpl(); - workspace.add(statModel); - } - return statModel; - } - private static class DynamicLongTask implements LongTask { + private final LongTask longTask; private ProgressTicket progressTicket; private boolean cancel = false; - private final LongTask longTask; public DynamicLongTask(DynamicStatistics statistics) { if (statistics instanceof LongTask) { @@ -257,6 +255,7 @@ public DynamicLongTask(DynamicStatistics statistics) { } } + @Override public boolean cancel() { cancel = true; if (longTask != null) { @@ -265,6 +264,7 @@ public boolean cancel() { return true; } + @Override public void setProgressTicket(ProgressTicket progressTicket) { this.progressTicket = progressTicket; } diff --git a/modules/StatisticsAPI/src/main/java/org/gephi/statistics/StatisticsModelImpl.java b/modules/StatisticsAPI/src/main/java/org/gephi/statistics/StatisticsModelImpl.java index 32b58a67bd..0d5cd82769 100644 --- a/modules/StatisticsAPI/src/main/java/org/gephi/statistics/StatisticsModelImpl.java +++ b/modules/StatisticsAPI/src/main/java/org/gephi/statistics/StatisticsModelImpl.java @@ -40,6 +40,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics; import java.awt.image.BufferedImage; @@ -56,39 +57,45 @@ Development and Distribution License("CDDL") (collectively, the import javax.xml.stream.XMLStreamReader; import javax.xml.stream.XMLStreamWriter; import org.apache.commons.codec.binary.Base64; -import org.gephi.statistics.spi.Statistics; +import org.gephi.project.api.Workspace; import org.gephi.statistics.api.StatisticsModel; +import org.gephi.statistics.spi.Statistics; import org.gephi.statistics.spi.StatisticsBuilder; import org.gephi.statistics.spi.StatisticsUI; import org.gephi.utils.TempDirUtils; import org.gephi.utils.TempDirUtils.TempDir; +import org.openide.util.Exceptions; import org.openide.util.Lookup; /** - * * @author Mathieu Bastian * @author Patrick J. McSweeney */ public class StatisticsModelImpl implements StatisticsModel { - //Model + private final Workspace workspace; private final Map<Class, String> reportMap; - public StatisticsModelImpl() { - reportMap = new HashMap<Class, String>(); + public StatisticsModelImpl(Workspace workspace) { + this.workspace = workspace; + reportMap = new HashMap<>(); + } + + @Override + public Workspace getWorkspace() { + return workspace; } public void addReport(Statistics statistics) { reportMap.put(statistics.getClass(), statistics.getReport()); } + @Override public String getReport(Class<? extends Statistics> statisticsClass) { return reportMap.get(statisticsClass); } public void writeXML(XMLStreamWriter writer) throws XMLStreamException { - writer.writeStartElement("statisticsmodel"); - writer.writeStartElement("reports"); for (Map.Entry<Class, String> entry : reportMap.entrySet()) { if (entry.getValue() != null && !entry.getValue().isEmpty()) { @@ -101,8 +108,6 @@ public void writeXML(XMLStreamWriter writer) throws XMLStreamException { } } writer.writeEndElement(); - - writer.writeEndElement(); } public void readXML(XMLStreamReader reader) throws XMLStreamException { @@ -164,13 +169,13 @@ private String unembedImages(String report) { String path = "file:" + file.getAbsolutePath(); builder.append(path); - builder.append(next.substring(endIndex, next.length())); + builder.append(next.substring(endIndex)); } else { builder.append(result[i]); } } } catch (IOException ex) { - ex.printStackTrace(); + Exceptions.printStackTrace(ex); } return builder.toString(); } @@ -190,9 +195,11 @@ private String embedImages(String report) { File file = new File(filename); try { BufferedImage image = ImageIO.read(file); - ImageIO.write((RenderedImage) image, "PNG", out); + if (image != null) { + ImageIO.write(image, "PNG", out); + } } catch (Exception e) { - e.printStackTrace(); + Exceptions.printStackTrace(e); } byte[] imageBytes = out.toByteArray(); String base64String = Base64.encodeBase64String(imageBytes); diff --git a/modules/StatisticsAPI/src/main/java/org/gephi/statistics/StatisticsPersistenceProvider.java b/modules/StatisticsAPI/src/main/java/org/gephi/statistics/StatisticsPersistenceProvider.java index bd02cb15e0..bf0130791b 100644 --- a/modules/StatisticsAPI/src/main/java/org/gephi/statistics/StatisticsPersistenceProvider.java +++ b/modules/StatisticsAPI/src/main/java/org/gephi/statistics/StatisticsPersistenceProvider.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics; import javax.xml.stream.XMLStreamException; @@ -46,15 +47,16 @@ Development and Distribution License("CDDL") (collectively, the import javax.xml.stream.XMLStreamWriter; import org.gephi.project.api.Workspace; import org.gephi.project.spi.WorkspacePersistenceProvider; +import org.gephi.project.spi.WorkspaceXMLPersistenceProvider; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = WorkspacePersistenceProvider.class) -public class StatisticsPersistenceProvider implements WorkspacePersistenceProvider { +public class StatisticsPersistenceProvider implements WorkspaceXMLPersistenceProvider { + @Override public void writeXML(XMLStreamWriter writer, Workspace workspace) { StatisticsModelImpl statModel = workspace.getLookup().lookup(StatisticsModelImpl.class); if (statModel != null) { @@ -66,19 +68,17 @@ public void writeXML(XMLStreamWriter writer, Workspace workspace) { } } + @Override public void readXML(XMLStreamReader reader, Workspace workspace) { StatisticsModelImpl statModel = workspace.getLookup().lookup(StatisticsModelImpl.class); - if (statModel == null) { - statModel = new StatisticsModelImpl(); - workspace.add(statModel); - } try { statModel.readXML(reader); } catch (XMLStreamException ex) { throw new RuntimeException(ex); - } + } } + @Override public String getIdentifier() { return "statisticsmodel"; } diff --git a/modules/StatisticsAPI/src/main/java/org/gephi/statistics/api/StatisticsController.java b/modules/StatisticsAPI/src/main/java/org/gephi/statistics/api/StatisticsController.java index 60a66708f3..e2151fbb04 100644 --- a/modules/StatisticsAPI/src/main/java/org/gephi/statistics/api/StatisticsController.java +++ b/modules/StatisticsAPI/src/main/java/org/gephi/statistics/api/StatisticsController.java @@ -40,61 +40,64 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.api; import org.gephi.project.api.Workspace; +import org.gephi.project.spi.Controller; import org.gephi.statistics.spi.Statistics; import org.gephi.statistics.spi.StatisticsBuilder; import org.gephi.utils.longtask.api.LongTaskListener; import org.gephi.utils.longtask.spi.LongTask; +import org.openide.util.lookup.ServiceProvider; /** * Controller for executing Statistics/Metrics algorithms. * <p> * This controller is a service and can therefore be found in Lookup: * <pre>StatisticsController sc = Lookup.getDefault().lookup(StatisticsController.class);</pre> - * + * * @author Patrick J. McSweeney, Mathieu Bastian * @see StatisticsBuilder */ public interface StatisticsController { + /** + * Returns the model of the currently selected {@link Workspace}. + */ + StatisticsModel getModel(); + + /** + * Returns the model in the given {@link Workspace}. + * + * @param workspace the workspace to lookup + */ + StatisticsModel getModel(Workspace workspace); + /** * Execute the statistics algorithm in a background thread and notify * <code>listener</code> when finished. The <code>statistics</code> should * implement {@link LongTask}. - * @param statistics the statistics algorithm instance - * @param listener a listener that is notified when execution finished + * + * @param statistics the statistics algorithm instance + * @param listener a listener that is notified when execution finished * @throws IllegalArgumentException if <code>statistics</code> doesn't - * implement {@link LongTask} + * implement {@link LongTask} */ - public void execute(Statistics statistics, LongTaskListener listener); + void execute(Statistics statistics, LongTaskListener listener); /** * Executes <code>statistics</code> in the current thread. - * @param statistics the statistics to execute + * + * @param statistics the statistics to execute */ - public void execute(Statistics statistics); - - /** - * Finds the builder from the statistics class. - * @param statistics the statistics class - * @return the builder, or <code>null</code> if not found - */ - public StatisticsBuilder getBuilder(Class<? extends Statistics> statistics); + void execute(Statistics statistics); /** - * Returns the current <code>StatisticsModel</code>, from the current - * workspace - * @return the current <code>StatisticsModel</code> - */ - public StatisticsModel getModel(); - - /** - * Returns the <code>StatisticsModel</code> for <code>workspace</code> - * @param workspace the workspace to return the model for - * @return the <code>StatisticsModel</code> associated to - * <code>workspace</code> + * Finds the builder from the statistics class. + * + * @param statistics the statistics class + * @return the builder, or <code>null</code> if not found */ - public StatisticsModel getModel(Workspace workspace); + StatisticsBuilder getBuilder(Class<? extends Statistics> statistics); } diff --git a/modules/StatisticsAPI/src/main/java/org/gephi/statistics/api/StatisticsModel.java b/modules/StatisticsAPI/src/main/java/org/gephi/statistics/api/StatisticsModel.java index 054e450d24..8f3a110498 100644 --- a/modules/StatisticsAPI/src/main/java/org/gephi/statistics/api/StatisticsModel.java +++ b/modules/StatisticsAPI/src/main/java/org/gephi/statistics/api/StatisticsModel.java @@ -40,23 +40,26 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.api; +import org.gephi.project.spi.Model; import org.gephi.statistics.spi.Statistics; /** * Hosts executed statistics reports. - * + * * @author Patrick J. McSweeney, Mathieu Bastian * @see StatisticsController */ -public interface StatisticsModel { +public interface StatisticsModel extends Model { /** * Returns the report for the given statistics class or <code>null</code> if no report * exists for this statistics. - * @param statistics a statistics class - * @return the report or <code>null</code> if not found + * + * @param statistics a statistics class + * @return the report or <code>null</code> if not found */ - public String getReport(Class<? extends Statistics> statistics); + String getReport(Class<? extends Statistics> statistics); } diff --git a/modules/StatisticsAPI/src/main/java/org/gephi/statistics/spi/DynamicStatistics.java b/modules/StatisticsAPI/src/main/java/org/gephi/statistics/spi/DynamicStatistics.java index 24afd792c9..7f60be53ca 100644 --- a/modules/StatisticsAPI/src/main/java/org/gephi/statistics/spi/DynamicStatistics.java +++ b/modules/StatisticsAPI/src/main/java/org/gephi/statistics/spi/DynamicStatistics.java @@ -40,16 +40,16 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.spi; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.attribute.time.Interval; import org.gephi.graph.api.GraphModel; import org.gephi.graph.api.GraphView; +import org.gephi.graph.api.Interval; /** * Define a dynamic statistics implementation. A Dynamic Statistics uses - * a sliding window on a dynamc network to compute results. + * a sliding window on a dynamic network to compute results. * <p> * The dynamic statistic execution is a three-steps process: * <ol><li>The <code>execute()</code> method is called to init the statistic @@ -58,7 +58,7 @@ Development and Distribution License("CDDL") (collectively, the * network at this interval as parameter.</li> * <li>The <code>end()</code> method is finally called.</li></ol> * <p> - * + * * @author Mathieu Bastian */ public interface DynamicStatistics extends Statistics { @@ -67,59 +67,67 @@ public interface DynamicStatistics extends Statistics { * First method to be executed in the dynamic statistic process. Initialize * the statistics with the graph and attributes. The graph model holds the * graph structure and the attribute model the attribute columns. + * * @param graphModel the graph model - * @param attributeModel the attribute model */ - public void execute(GraphModel graphModel, AttributeModel attributeModel); + @Override + void execute(GraphModel graphModel); /** - * Iteration of the dynamic statistics algorithm on a new interval. The + * Iteration of the dynamic statistics algorithm on a new interval. The * graph window is a snapshot of the graph at the current <code>interval</code>. - * @param window a snapshot of the graph at the current interval + * + * @param window a snapshot of the graph at the current interval * @param interval the interval of the current snapshot */ - public void loop(GraphView window, Interval interval); + void loop(GraphView window, Interval interval); /** * Called at the end of the process after all loops. */ - public void end(); + void end(); /** - * Sets the minimum and maximum bound - * @param bounds the min and max bounds + * Returns the window duration + * + * @return the window duration */ - public void setBounds(Interval bounds); + double getWindow(); /** * Sets the window duration + * * @param window the window duration */ - public void setWindow(double window); + void setWindow(double window); /** - * Sets the tick. The tick is how much the window is moved to the right + * Returns the tick. The tick is how much the window is moved to the right * at each iteration. - * @param tick the tick - */ - public void setTick(double tick); - - /** - * Returns the window duration - * @return the window duration + * + * @return the tick */ - public double getWindow(); + double getTick(); /** - * Returns the tick. The tick is how much the window is moved to the right + * Sets the tick. The tick is how much the window is moved to the right * at each iteration. - * @return the tick + * + * @param tick the tick */ - public double getTick(); + void setTick(double tick); /** * Returns the min and max bounds. + * * @return the bounds */ - public Interval getBounds(); + Interval getBounds(); + + /** + * Sets the minimum and maximum bound + * + * @param bounds the min and max bounds + */ + void setBounds(Interval bounds); } diff --git a/modules/StatisticsAPI/src/main/java/org/gephi/statistics/spi/Statistics.java b/modules/StatisticsAPI/src/main/java/org/gephi/statistics/spi/Statistics.java index fcf25e96eb..34d6b3f3be 100644 --- a/modules/StatisticsAPI/src/main/java/org/gephi/statistics/spi/Statistics.java +++ b/modules/StatisticsAPI/src/main/java/org/gephi/statistics/spi/Statistics.java @@ -40,10 +40,10 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.spi; -import org.gephi.attribute.api.AttributeModel; import org.gephi.graph.api.GraphModel; /** @@ -60,15 +60,16 @@ public interface Statistics { * <p> * It is preferable to work on <b>visible</b> graphs, to be synchronized with the * visualization. - * @param graphModel The graph topology - * @param attributeModel The elements attributes, and where to write table results + * + * @param graphModel The graph model */ - public void execute(GraphModel graphModel, AttributeModel attributeModel); + void execute(GraphModel graphModel); /** * Returns an HTML string that displays the statistics result. Can contains * complex HTML snippets and images. + * * @return An HTML string that displays the results for this Statistics */ - public String getReport(); + String getReport(); } diff --git a/modules/StatisticsAPI/src/main/java/org/gephi/statistics/spi/StatisticsBuilder.java b/modules/StatisticsAPI/src/main/java/org/gephi/statistics/spi/StatisticsBuilder.java index 3ee033092c..af3d309690 100644 --- a/modules/StatisticsAPI/src/main/java/org/gephi/statistics/spi/StatisticsBuilder.java +++ b/modules/StatisticsAPI/src/main/java/org/gephi/statistics/spi/StatisticsBuilder.java @@ -40,6 +40,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.spi; /** @@ -56,19 +57,22 @@ public interface StatisticsBuilder { /** * Returns the name of statistics - * @return the name of the statistics + * + * @return the name of the statistics */ - public String getName(); + String getName(); /** * Build a new statistics instance and return it - * @return a new statistics instance + * + * @return a new statistics instance */ - public Statistics getStatistics(); + Statistics getStatistics(); /** * Returns the statistics' class this UI belongs to. - * @return the statistics' class this UI belongs to + * + * @return the statistics' class this UI belongs to */ - public Class<? extends Statistics> getStatisticsClass(); + Class<? extends Statistics> getStatisticsClass(); } diff --git a/modules/StatisticsAPI/src/main/java/org/gephi/statistics/spi/StatisticsUI.java b/modules/StatisticsAPI/src/main/java/org/gephi/statistics/spi/StatisticsUI.java index c4065ddbb8..f2c3947497 100644 --- a/modules/StatisticsAPI/src/main/java/org/gephi/statistics/spi/StatisticsUI.java +++ b/modules/StatisticsAPI/src/main/java/org/gephi/statistics/spi/StatisticsUI.java @@ -40,6 +40,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.spi; import javax.swing.JPanel; @@ -55,59 +56,72 @@ Development and Distribution License("CDDL") (collectively, the * Statistics instance. * <p> * Implementors must add <b>@ServiceProvider</b> annotation to be found by the system. + * * @author Patrick J. McSweeney * @see StatisticsBuilder */ public interface StatisticsUI { - public static final String CATEGORY_NETWORK_OVERVIEW = NbBundle.getMessage(StatisticsUI.class, "StatisticsUI.category.networkOverview"); - public static final String CATEGORY_NODE_OVERVIEW = NbBundle.getMessage(StatisticsUI.class, "StatisticsUI.category.nodeOverview"); - public static final String CATEGORY_EDGE_OVERVIEW = NbBundle.getMessage(StatisticsUI.class, "StatisticsUI.category.edgeOverview"); - public static final String CATEGORY_DYNAMIC = NbBundle.getMessage(StatisticsUI.class, "StatisticsUI.category.dynamic"); + String CATEGORY_NETWORK_OVERVIEW = + NbBundle.getMessage(StatisticsUI.class, "StatisticsUI.category.networkOverview"); + String CATEGORY_COMMUNITY_DETECTION = + NbBundle.getMessage(StatisticsUI.class, "StatisticsUI.category.communityDetection"); + String CATEGORY_NODE_OVERVIEW = + NbBundle.getMessage(StatisticsUI.class, "StatisticsUI.category.nodeOverview"); + String CATEGORY_EDGE_OVERVIEW = + NbBundle.getMessage(StatisticsUI.class, "StatisticsUI.category.edgeOverview"); + String CATEGORY_DYNAMIC = + NbBundle.getMessage(StatisticsUI.class, "StatisticsUI.category.dynamic"); /** * Returns a settings panel instance. - * @return a settings panel instance + * + * @return a settings panel instance */ - public JPanel getSettingsPanel(); + JPanel getSettingsPanel(); /** * Push a statistics instance to the UI to load its settings. Note that this * method is always called after <code>getSettingsPanel</code> and before the * panel is displayed. - * @param statistics the statistics instance that is linked to the UI + * + * @param statistics the statistics instance that is linked to the UI */ - public void setup(Statistics statistics); + void setup(Statistics statistics); /** * Notify the settings panel has been closed and that the settings values * can be saved to the statistics instance. */ - public void unsetup(); + void unsetup(); /** * Returns the statistics' class this UI belongs to. - * @return the statistics' class this UI belongs to + * + * @return the statistics' class this UI belongs to */ - public Class<? extends Statistics> getStatisticsClass(); + Class<? extends Statistics> getStatisticsClass(); /** * Returns this statistics result as a String, if exists - * @return this statistics' result string + * + * @return this statistics' result string */ - public String getValue(); + String getValue(); /** * Returns this statistics display name - * @return this statistics' display name. + * + * @return this statistics' display name. */ - public String getDisplayName(); + String getDisplayName(); /** * Returns this statistics short description - * @return this statistics' short description. + * + * @return this statistics' short description. */ - public String getShortDescription(); + String getShortDescription(); /** * Returns the category of this metric. Default category can be used, see @@ -116,16 +130,19 @@ public interface StatisticsUI { * <li>{@link StatisticsUI#CATEGORY_NODE_OVERVIEW}</li> * <li>{@link StatisticsUI#CATEGORY_EDGE_OVERVIEW}</li> * <li>{@link StatisticsUI#CATEGORY_DYNAMIC}</li></ul> + * <li>{@link StatisticsUI#CATEGORY_COMMUNITY_DETECTION}</li></ul> * Returns a custom String for defining a new category. - * @return this statistics' category + * + * @return this statistics' category */ - public String getCategory(); + String getCategory(); /** * Returns a position value, around 1 and 1000, that indicates the position * of the Statistics in the UI. Less means upper. - * @return this statistics' position value + * + * @return this statistics' position value */ - public int getPosition(); + int getPosition(); } diff --git a/modules/StatisticsAPI/src/main/nbm/manifest.mf b/modules/StatisticsAPI/src/main/nbm/manifest.mf index d1af8df4c9..9c420f1f4a 100644 --- a/modules/StatisticsAPI/src/main/nbm/manifest.mf +++ b/modules/StatisticsAPI/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/statistics/api/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi Core +OpenIDE-Module-Name: Statistics API diff --git a/modules/StatisticsAPI/src/main/nbm/module.xml b/modules/StatisticsAPI/src/main/nbm/module.xml deleted file mode 100644 index a1cf033a56..0000000000 --- a/modules/StatisticsAPI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<nbm> - <!-- - <moduleType>autoload</moduleType> - <codeNameBase>org.gephi.statistics.api/1</codeNameBase> - <licenseName>Apache License, Version 2.0</licenseName> - <licenseFile>license.txt</licenseFile> - --> -</nbm> diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle.properties index 147492ade7..184aec17ef 100644 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle.properties +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle.properties @@ -1,6 +1,3 @@ -OpenIDE-Module-Display-Category=Gephi Core -OpenIDE-Module-Long-Description=\ - API/SPI for statistics and metrics. \ +OpenIDE-Module-Long-Description=API/SPI for statistics and metrics. \ Define and run various algorithms. -OpenIDE-Module-Name=Statistics API OpenIDE-Module-Short-Description=API/SPI for statistics and metrics diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_ar.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_ca.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_ca.properties new file mode 100644 index 0000000000..b7f217dc28 --- /dev/null +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_ca.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI per les estadνstiques i mθtriques. Defineix i executa diversos algoritmes. +OpenIDE-Module-Short-Description=API/SPI per les estadνstiques i mθtriques diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_cs.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_cs.properties index 704d0333a8..8a09950334 100644 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_cs.properties +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_cs.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz <zbynek.schwarz@gmail.com>, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-06 21\:37+0000\nLast-Translator\: Zbyn\u011bk Schwarz <zbynek.schwarz@gmail.com>\nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=API/SPI pro statistiky a metriky. Ur\u010dete a spou\u0161t\u011bjte r\u016fzn\u00e9 algoritmy. - -OpenIDE-Module-Short-Description=API/SPI pro statistiky a metriky +OpenIDE-Module-Long-Description=API/SPI pro statistiky a metriky. Ur\u010dete a spou\u0161t\u011bjte r\u016fznι algoritmy. +OpenIDE-Module-Short-Description=API/SPI pro statistiky a metriky diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_de.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_de.properties new file mode 100644 index 0000000000..f11843a441 --- /dev/null +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_de.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI fόr Statistiken und Metriken. Definiere und fόhre verschiedene Algorithmen aus. +OpenIDE-Module-Short-Description=API/SPI fόr Statistiken und Metriken diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_es.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_es.properties index 8f7f40c9cc..005a15c361 100644 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_es.properties +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_es.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:58+0000\nLast-Translator\: gephi <sebastien.heymann@gmail.com>\nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=API/SPI para estad\u00edsticas y m\u00e9tricas. Definir y ejecutar varios algoritmos. - -OpenIDE-Module-Short-Description=API/SPI para estad\u00edsticas y m\u00e9tricas. +OpenIDE-Module-Long-Description=API/SPI para estadνsticas y mιtricas. Definir y ejecutar varios algoritmos. +OpenIDE-Module-Short-Description=API/SPI para estadνsticas y mιtricas. diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_fr.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_fr.properties index 14bb8ba6e1..15d8c04eb9 100644 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_fr.properties +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_fr.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:58+0000\nLast-Translator\: gephi <sebastien.heymann@gmail.com>\nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API/SPI pour les statistiques et les m\u00e9triques. D\u00e9finit et ex\u00e9cute divers algorithmes. - -OpenIDE-Module-Short-Description=API/SPI pour les statistiques et les m\u00e9triques +OpenIDE-Module-Long-Description=API/SPI pour les statistiques et les mιtriques. Dιfinit et exιcute divers algorithmes. +OpenIDE-Module-Short-Description=API/SPI pour les statistiques et les mιtriques diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_he.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_he.properties new file mode 100644 index 0000000000..2b21baef44 --- /dev/null +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_he.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI for statistics and metrics. Define and run various algorithms. +OpenIDE-Module-Short-Description=API/SPI for statistics and metrics diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_hu.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_hu.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_hu.properties @@ -0,0 +1 @@ + diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_it.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_it.properties new file mode 100644 index 0000000000..2b21baef44 --- /dev/null +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_it.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI for statistics and metrics. Define and run various algorithms. +OpenIDE-Module-Short-Description=API/SPI for statistics and metrics diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_ja.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_ja.properties index e5e583f65e..484413364f 100644 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_ja.properties +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_ja.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida <kida.siro@gmail.com>, 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-19 05\:30+0000\nLast-Translator\: Siro Kida <kida.siro@gmail.com>\nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u7d71\u8a08\u3068\u8a08\u91cf\u306eAPI / SPI\u3002\u69d8\u3005\u306a\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u5b9a\u7fa9\u3057\u8d70\u3089\u305b\u308b\u3002 - -OpenIDE-Module-Short-Description=\u7d71\u8a08\u3068\u8a08\u91cf\u306eAPI / SPI +OpenIDE-Module-Long-Description=\u7d71\u8a08\u3068\u8a08\u91cf\u306eAPI / SPI\u3002\u69d8\u3005\u306a\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3092\u5b9a\u7fa9\u3057\u8d70\u3089\u305b\u308b\u3002 +OpenIDE-Module-Short-Description=\u7d71\u8a08\u3068\u8a08\u91cf\u306eAPI / SPI diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_ko.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_ko.properties new file mode 100644 index 0000000000..f0122bae3f --- /dev/null +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_ko.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Short-Description=\uD1B5\uACC4\uC640 \uBA54\uD2B8\uB9AD\uC5D0 \uB300\uD55C API/SPI +OpenIDE-Module-Long-Description=\uD1B5\uACC4\uC640 \uBA54\uD2B8\uB9AD\uC5D0 \uB300\uD55C API/SPI. \uB2E4\uC591\uD55C \uC54C\uACE0\uB9AC\uC998\uC744 \uC815\uC758\uD558\uACE0 \uC2E4\uD589\uD569\uB2C8\uB2E4. diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_nl.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_nl.properties new file mode 100644 index 0000000000..2b21baef44 --- /dev/null +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_nl.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI for statistics and metrics. Define and run various algorithms. +OpenIDE-Module-Short-Description=API/SPI for statistics and metrics diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_pt_BR.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_pt_BR.properties index 338dfb026d..5e8fc61319 100644 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_pt_BR.properties +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_pt_BR.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr <celiofariajr@gmail.com>, 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 16\:09+0000\nLast-Translator\: C\u00e9lio Faria Jr. <celiofariajr@gmail.com>\nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API/SPI de estat\u00edsticas e m\u00e9tricas. Define e executa v\u00e1rios algoritmos. - -OpenIDE-Module-Short-Description=API/SPI de estat\u00edsticas e m\u00e9tricas +OpenIDE-Module-Long-Description=API/SPI de estatνsticas e mιtricas. Define e executa vαrios algoritmos. +OpenIDE-Module-Short-Description=API/SPI de estatνsticas e mιtricas diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_ro.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_ro.properties new file mode 100644 index 0000000000..ef96c4b111 --- /dev/null +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_ro.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Long-Description=API/SPI pentru statistici \u0219i metrici. Define\u0219te \u0219i execut\u0103 diver\u0219i algoritmi. +OpenIDE-Module-Short-Description=API/SPI pentru statistici \u0219i metrici diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_ru.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_ru.properties index 128487eee1..a6d77aa482 100644 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_ru.properties +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_ru.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# <altsoph@gmail.com>, 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-20 07\:09+0000\nLast-Translator\: Altsoph <altsoph@gmail.com>\nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=API/SPI \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0438 \u043c\u0435\u0442\u0440\u0438\u043a. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b. - -OpenIDE-Module-Short-Description=API/SPI \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0438 \u043c\u0435\u0442\u0440\u0438\u043a +OpenIDE-Module-Long-Description=API/SPI \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0438 \u043c\u0435\u0442\u0440\u0438\u043a. \u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b. +OpenIDE-Module-Short-Description=API/SPI \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u0438 \u043c\u0435\u0442\u0440\u0438\u043a diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_th.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_tr.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_tr.properties new file mode 100644 index 0000000000..2b21baef44 --- /dev/null +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_tr.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI for statistics and metrics. Define and run various algorithms. +OpenIDE-Module-Short-Description=API/SPI for statistics and metrics diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_uk.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_uk.properties new file mode 100644 index 0000000000..eb91a65d39 --- /dev/null +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_uk.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI \u0434\u043B\u044F \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0438 \u0442\u0430 \u043F\u043E\u043A\u0430\u0437\u043D\u0438\u043A\u0456\u0432. \u0412\u0438\u0437\u043D\u0430\u0447\u0442\u0435 \u0442\u0430 \u0437\u0430\u043F\u0443\u0441\u0442\u0456\u0442\u044C \u0440\u0456\u0437\u043D\u0456 \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C\u0438. +OpenIDE-Module-Short-Description=API/SPI \u0434\u043B\u044F \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0438 \u0442\u0430 \u043F\u043E\u043A\u0430\u0437\u043D\u0438\u043A\u0456\u0432 diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_zh_CN.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_zh_CN.properties index e8771ce3f8..6345bad6c1 100644 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_zh_CN.properties +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_zh_CN.properties @@ -1,10 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:07+0000\nLast-Translator\: gephi <sebastien.heymann@gmail.com>\nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\ \u7edf\u8ba1\u6570\u636e\u548c\u6307\u6807\u7684API/SPI\u3002\u5b9a\u4e49\u548c\u8fd0\u884c\u5404\u79cd\u7b97\u6cd5\u3002 - -OpenIDE-Module-Short-Description=\u7edf\u8ba1\u6570\u636e\u548c\u6307\u6807\u7684API/SPI\u3002 +OpenIDE-Module-Long-Description=\u7edf\u8ba1\u6570\u636e\u548c\u6307\u6807\u7684API/SPI\u3002\u5b9a\u4e49\u548c\u8fd0\u884c\u5404\u79cd\u7b97\u6cd5\u3002 +OpenIDE-Module-Short-Description=\u6570\u636E\u7EDF\u8BA1\u548C\u5EA6\u91CF\u7684 API/SPI diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_zh_TW.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_zh_TW.properties new file mode 100644 index 0000000000..2b21baef44 --- /dev/null +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/Bundle_zh_TW.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI for statistics and metrics. Define and run various algorithms. +OpenIDE-Module-Short-Description=API/SPI for statistics and metrics diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/cs.po b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/cs.po deleted file mode 100644 index 465f010caf..0000000000 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/cs.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz <zbynek.schwarz@gmail.com>, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-06 21:37+0000\n" -"Last-Translator: ZbynΔ›k Schwarz <zbynek.schwarz@gmail.com>\n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI pro statistiky a metriky. Určete a spouΕ‘tΔ›jte rΕ―znΓ© algoritmy." - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI pro statistiky a metriky" diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/es.po b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/es.po deleted file mode 100644 index 4b77cd0119..0000000000 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/es.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:58+0000\n" -"Last-Translator: gephi <sebastien.heymann@gmail.com>\n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI para estadΓ­sticas y mΓ©tricas. Definir y ejecutar varios algoritmos." - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI para estadΓ­sticas y mΓ©tricas." diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/fr.po b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/fr.po deleted file mode 100644 index 4802318c31..0000000000 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/fr.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR <EMAIL@ADDRESS>, 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:58+0000\n" -"Last-Translator: gephi <sebastien.heymann@gmail.com>\n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI pour les statistiques et les mΓ©triques. DΓ©finit et exΓ©cute divers algorithmes." - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI pour les statistiques et les mΓ©triques" diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/ja.po b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/ja.po deleted file mode 100644 index d6c74c613c..0000000000 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida <kida.siro@gmail.com>, 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-19 05:30+0000\n" -"Last-Translator: Siro Kida <kida.siro@gmail.com>\n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "η΅±θ¨ˆγ¨θ¨ˆι‡γAPI / SPIγ€‚ζ§˜γ€…γͺをルゴγƒͺγ‚Ίγƒ γ‚’εšηΎ©γ—衰らせる。" - -msgid "OpenIDE-Module-Short-Description" -msgstr "η΅±θ¨ˆγ¨θ¨ˆι‡γAPI / SPI" diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/org-gephi-statistics-api.pot b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/org-gephi-statistics-api.pot deleted file mode 100644 index e8de0b4892..0000000000 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/org-gephi-statistics-api.pot +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team <gephi.team@lists.launchpad.net>, 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian <gephi.team@lists.launchpad.net>\n" -"Language-Team: English <https://launchpad.net/~gephi.team>\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI for statistics and metrics. Define and run various algorithms." - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI for statistics and metrics" diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/package.html b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/package.html index eeaa9a49db..dc9dddbd35 100644 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/package.html +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/package.html @@ -1,10 +1,17 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> -<html> - <body bgcolor="white"> - API for statistics and metrics tasks execution. - <p>The <code>StatisticsController</code> allows synchronous and asynchronous tasks - execution and keep the last statistics report for each type of statistics. - A <code>StatisticsModel</code> instance exist for - each workspace.</p> - </body> -</html> +<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0//EN"> +<html> + <head> + <title>org.gephi.statistics.api + + +

            + API for statistics and metrics tasks execution. +

            +

            + The StatisticsController allows synchronous and asynchronous tasks + execution and keep the last statistics report for each type of statistics. + A StatisticsModel instance exist for + each workspace. +

            + + diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/pt_BR.po b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/pt_BR.po deleted file mode 100644 index 70717c4c8e..0000000000 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/pt_BR.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 16:09+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI de estatΓ­sticas e mΓ©tricas. Define e executa vΓ‘rios algoritmos." - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI de estatΓ­sticas e mΓ©tricas" diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/ru.po b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/ru.po deleted file mode 100644 index 9139c987db..0000000000 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/ru.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-20 07:09+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI для статистики ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ. ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΠ΅Ρ‚ Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΡ‹." - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI для статистики ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ" diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/zh_CN.po b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/zh_CN.po deleted file mode 100644 index 41167d39c6..0000000000 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/api/zh_CN.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:07+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr " 统θ‘ζ•°ζε’ŒζŒ‡ζ ‡ηš„API/SPI。εšδΉ‰ε’ŒθΏθ‘Œε„种η—法。" - -msgid "OpenIDE-Module-Short-Description" -msgstr "统θ‘ζ•°ζε’ŒζŒ‡ζ ‡ηš„API/SPI。" diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle.properties index cc1c464c0d..c2c4a84d77 100644 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle.properties +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle.properties @@ -1,4 +1,5 @@ StatisticsUI.category.networkOverview= Network Overview StatisticsUI.category.nodeOverview = Node Overview StatisticsUI.category.edgeOverview = Edge Overview -StatisticsUI.category.dynamic = Dynamic \ No newline at end of file +StatisticsUI.category.dynamic = Dynamic +StatisticsUI.category.communityDetection = Community Detection \ No newline at end of file diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_ar.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_ca.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_ca.properties new file mode 100644 index 0000000000..9dedf51697 --- /dev/null +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_ca.properties @@ -0,0 +1,4 @@ +StatisticsUI.category.networkOverview= Panorΰmica de la xarxa +StatisticsUI.category.nodeOverview = Panorΰmica dels nodes +StatisticsUI.category.edgeOverview = Panorΰmica de les arestes +StatisticsUI.category.dynamic = Dinΰmic diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_cs.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_cs.properties index 401dd1ddd0..1cfdc0a3cf 100644 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_cs.properties +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_cs.properties @@ -1,15 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-06 21\:35+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -StatisticsUI.category.networkOverview=P\u0159ehled s\u00edt\u011b - -StatisticsUI.category.nodeOverview=P\u0159ehled uzlu - -StatisticsUI.category.edgeOverview=P\u0159ehled hrany - -StatisticsUI.category.dynamic=Dynamick\u00e9 +StatisticsUI.category.networkOverview= P\u0159ehled sνt\u011b +StatisticsUI.category.nodeOverview = P\u0159ehled uzlu +StatisticsUI.category.edgeOverview = P\u0159ehled hrany +StatisticsUI.category.dynamic = Dynamickι diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_de.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_de.properties new file mode 100644 index 0000000000..70872eb7bc --- /dev/null +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_de.properties @@ -0,0 +1,4 @@ +StatisticsUI.category.networkOverview= Netzwerk άbersicht +StatisticsUI.category.nodeOverview = Knoten άbersicht +StatisticsUI.category.edgeOverview = Kanten άbersicht +StatisticsUI.category.dynamic = Dynamisch diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_el.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_el.properties new file mode 100644 index 0000000000..529a386143 --- /dev/null +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_el.properties @@ -0,0 +1,7 @@ + + +StatisticsUI.category.networkOverview=\u0395\u03C0\u03B9\u03C3\u03BA\u03CC\u03C0\u03B7\u03C3\u03B7 \u03B4\u03B9\u03BA\u03C4\u03CD\u03BF\u03C5 +StatisticsUI.category.nodeOverview=\u0395\u03C0\u03B9\u03C3\u03BA\u03CC\u03C0\u03B7\u03C3\u03B7 \u03BA\u03CC\u03BC\u03B2\u03BF\u03C5 +StatisticsUI.category.edgeOverview=\u0395\u03C0\u03B9\u03C3\u03BA\u03CC\u03C0\u03B7\u03C3\u03B7 \u03B1\u03BA\u03BC\u03AE\u03C2 +StatisticsUI.category.dynamic=\u0394\u03C5\u03BD\u03B1\u03BC\u03B9\u03BA\u03CC +StatisticsUI.category.communityDetection=\u0391\u03BD\u03AF\u03C7\u03BD\u03B5\u03C5\u03C3\u03B7 \u03BA\u03BF\u03B9\u03BD\u03BF\u03C4\u03AE\u03C4\u03C9\u03BD diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_es.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_es.properties index 6563fe1c27..3d242e32c6 100644 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_es.properties +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_es.properties @@ -1,16 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-24 13\:48+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -StatisticsUI.category.networkOverview=Visi\u00f3n general de la red - -StatisticsUI.category.nodeOverview=Visi\u00f3n general de los nodos - -StatisticsUI.category.edgeOverview=Visi\u00f3n general de las aristas - -StatisticsUI.category.dynamic=Din\u00e1micas +StatisticsUI.category.networkOverview=Visiσn general de la red +StatisticsUI.category.nodeOverview=Visiσn general de los nodos +StatisticsUI.category.edgeOverview=Visiσn general de las aristas +StatisticsUI.category.dynamic=Dinαmicas +StatisticsUI.category.communityDetection=Detectando comunidades diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_fr.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_fr.properties index cef68f94d1..6be34c7d15 100644 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_fr.properties +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_fr.properties @@ -1,16 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-21 21\:35+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -StatisticsUI.category.networkOverview=Vue g\u00e9n\u00e9rale du r\u00e9seau - -StatisticsUI.category.nodeOverview=Vue g\u00e9n\u00e9rale des noeuds - -StatisticsUI.category.edgeOverview=Vue g\u00e9n\u00e9rale des liens - +StatisticsUI.category.networkOverview=Vue gιnιrale du rιseau +StatisticsUI.category.nodeOverview=Vue gιnιrale des noeuds +StatisticsUI.category.edgeOverview=Vue gιnιrale des liens StatisticsUI.category.dynamic=Dynamique +StatisticsUI.category.communityDetection=D\u00E9tection de communaut\u00E9s diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_he.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_he.properties new file mode 100644 index 0000000000..91935214ab --- /dev/null +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_he.properties @@ -0,0 +1,4 @@ +StatisticsUI.category.networkOverview=Network Overview +StatisticsUI.category.nodeOverview=Node Overview +StatisticsUI.category.edgeOverview=Edge Overview +StatisticsUI.category.dynamic=Dynamic diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_hu.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_hu.properties new file mode 100644 index 0000000000..845e8d110c --- /dev/null +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_hu.properties @@ -0,0 +1,7 @@ + + +StatisticsUI.category.networkOverview=H\u00E1l\u00F3zat \u00E1ttekint\u00E9se +StatisticsUI.category.dynamic=Dinamikus +StatisticsUI.category.communityDetection=K\u00F6z\u00F6ss\u00E9gi \u00E9szlel\u00E9s +StatisticsUI.category.edgeOverview=Edge \u00E1ttekint\u00E9se +StatisticsUI.category.nodeOverview=Csom\u00F3pont \u00E1ttekint\u00E9se diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_it.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_it.properties new file mode 100644 index 0000000000..0f9e6a32fe --- /dev/null +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_it.properties @@ -0,0 +1,5 @@ +StatisticsUI.category.networkOverview=Network Overview +StatisticsUI.category.nodeOverview=Node Overview +StatisticsUI.category.edgeOverview=Edge Overview +StatisticsUI.category.dynamic=Dynamic +StatisticsUI.category.communityDetection=Identificazione comunitΰ diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_ja.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_ja.properties index 9f63a98338..32af452c33 100644 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_ja.properties +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_ja.properties @@ -1,15 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-03 11\:06+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -StatisticsUI.category.networkOverview=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u6982\u8981 - -StatisticsUI.category.nodeOverview=\u30ce\u30fc\u30c9\u306e\u6982\u8981 - -StatisticsUI.category.edgeOverview=\u8fba\u306e\u6982\u8981 - -StatisticsUI.category.dynamic=\u52d5\u7684 +StatisticsUI.category.networkOverview= \u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u6982\u8981 +StatisticsUI.category.nodeOverview = \u30ce\u30fc\u30c9\u306e\u6982\u8981 +StatisticsUI.category.edgeOverview = \u8fba\u306e\u6982\u8981 +StatisticsUI.category.dynamic = \u52d5\u7684 diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_ko.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_ko.properties new file mode 100644 index 0000000000..7c08dbc72e --- /dev/null +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_ko.properties @@ -0,0 +1,7 @@ + + +StatisticsUI.category.nodeOverview=\uB178\uB4DC \uAC1C\uC694 +StatisticsUI.category.networkOverview=\uB124\uD2B8\uC6CC\uD06C \uAC1C\uC694 +StatisticsUI.category.edgeOverview=\uC5E3\uC9C0 \uAC1C\uC694 +StatisticsUI.category.dynamic=\uB3D9\uC801\uC784 +StatisticsUI.category.communityDetection=\uCEE4\uBBA4\uB2C8\uD2F0 \uD0D0\uC9C0 diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_nl.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_nl.properties new file mode 100644 index 0000000000..393ecffb58 --- /dev/null +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_nl.properties @@ -0,0 +1,4 @@ +StatisticsUI.category.networkOverview=Network Overview +StatisticsUI.category.nodeOverview=Knoopoverzicht +StatisticsUI.category.edgeOverview=Edge Overview +StatisticsUI.category.dynamic=Dynamic diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_pt_BR.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_pt_BR.properties index 5d05af9612..3b7fa10cf7 100644 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_pt_BR.properties +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_pt_BR.properties @@ -1,15 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-23 14\:25+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -StatisticsUI.category.networkOverview=Vis\u00e3o Geral da Rede - -StatisticsUI.category.nodeOverview=Vis\u00e3o geral dos n\u00f3s - -StatisticsUI.category.edgeOverview=Vis\u00e3o geral das arestas - -StatisticsUI.category.dynamic=Din\u00e2mico +StatisticsUI.category.networkOverview= Visγo Geral da Rede +StatisticsUI.category.nodeOverview = Visγo geral dos nσs +StatisticsUI.category.edgeOverview = Visγo geral das arestas +StatisticsUI.category.dynamic = Dinβmico diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_ro.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_ro.properties new file mode 100644 index 0000000000..b0c20f1727 --- /dev/null +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_ro.properties @@ -0,0 +1,7 @@ + + +StatisticsUI.category.edgeOverview=Prezentare general\u0103 a muchiilor +StatisticsUI.category.networkOverview=Prezentare general\u0103 a re\u021Belei +StatisticsUI.category.nodeOverview=Prezentare general\u0103 a nodurilor +StatisticsUI.category.dynamic=Dinamic +StatisticsUI.category.communityDetection=Detectarea comunit\u0103\u021Bilor diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_ru.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_ru.properties index f7c00e7ba2..c3169995a7 100644 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_ru.properties +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_ru.properties @@ -1,15 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-20 07\:08+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -StatisticsUI.category.networkOverview=\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043f\u043e \u0433\u0440\u0430\u0444\u0443 - -StatisticsUI.category.nodeOverview=\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043f\u043e \u0443\u0437\u043b\u0443 - -StatisticsUI.category.edgeOverview=\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043f\u043e \u0440\u0435\u0431\u0440\u0443 - -StatisticsUI.category.dynamic=\u0414\u0438\u043d\u0430\u043c\u0438\u043a\u0430 +StatisticsUI.category.networkOverview= \u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043f\u043e \u0433\u0440\u0430\u0444\u0443 +StatisticsUI.category.nodeOverview = \u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043f\u043e \u0443\u0437\u043b\u0443 +StatisticsUI.category.edgeOverview = \u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0430 \u043f\u043e \u0440\u0435\u0431\u0440\u0443 +StatisticsUI.category.dynamic = \u0414\u0438\u043d\u0430\u043c\u0438\u043a\u0430 diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_th.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_tr.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_tr.properties new file mode 100644 index 0000000000..91935214ab --- /dev/null +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_tr.properties @@ -0,0 +1,4 @@ +StatisticsUI.category.networkOverview=Network Overview +StatisticsUI.category.nodeOverview=Node Overview +StatisticsUI.category.edgeOverview=Edge Overview +StatisticsUI.category.dynamic=Dynamic diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_uk.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_uk.properties new file mode 100644 index 0000000000..3e1c794dee --- /dev/null +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_uk.properties @@ -0,0 +1,5 @@ +StatisticsUI.category.networkOverview=\u041E\u0433\u043B\u044F\u0434 \u043C\u0435\u0440\u0435\u0436\u0456 +StatisticsUI.category.nodeOverview=\u041E\u0433\u043B\u044F\u0434 \u0432\u0443\u0437\u043B\u0430 +StatisticsUI.category.edgeOverview=\u041E\u0433\u043B\u044F\u0434 \u043A\u0440\u0430\u044E +StatisticsUI.category.dynamic=\u0414\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0438\u0439 +StatisticsUI.category.communityDetection=\u0412\u0438\u044F\u0432\u043B\u0435\u043D\u043D\u044F \u0441\u043F\u0456\u043B\u044C\u043D\u043E\u0442\u0438 diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_zh_CN.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_zh_CN.properties index 19f37ae925..d2d2d29c2b 100644 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_zh_CN.properties +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_zh_CN.properties @@ -1,14 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:07+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - StatisticsUI.category.networkOverview=\u7f51\u7edc\u6982\u8ff0 - StatisticsUI.category.nodeOverview=\u8282\u70b9\u6982\u8ff0 - StatisticsUI.category.edgeOverview=\u8fb9\u6982\u8ff0 - StatisticsUI.category.dynamic=\u52a8\u6001 +StatisticsUI.category.communityDetection=\u793E\u533A\u68C0\u6D4B diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_zh_TW.properties b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_zh_TW.properties new file mode 100644 index 0000000000..91935214ab --- /dev/null +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/Bundle_zh_TW.properties @@ -0,0 +1,4 @@ +StatisticsUI.category.networkOverview=Network Overview +StatisticsUI.category.nodeOverview=Node Overview +StatisticsUI.category.edgeOverview=Edge Overview +StatisticsUI.category.dynamic=Dynamic diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/cs.po b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/cs.po deleted file mode 100644 index 857b6e39c2..0000000000 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/cs.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-06 21:35+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "StatisticsUI.category.networkOverview" -msgstr "PΕ™ehled sΓ­tΔ›" - -msgid "StatisticsUI.category.nodeOverview" -msgstr "PΕ™ehled uzlu" - -msgid "StatisticsUI.category.edgeOverview" -msgstr "PΕ™ehled hrany" - -msgid "StatisticsUI.category.dynamic" -msgstr "DynamickΓ©" diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/es.po b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/es.po deleted file mode 100644 index 116e9d4bad..0000000000 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/es.po +++ /dev/null @@ -1,32 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-24 13:48+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "StatisticsUI.category.networkOverview" -msgstr "VisiΓ³n general de la red" - -msgid "StatisticsUI.category.nodeOverview" -msgstr "VisiΓ³n general de los nodos" - -msgid "StatisticsUI.category.edgeOverview" -msgstr "VisiΓ³n general de las aristas" - -msgid "StatisticsUI.category.dynamic" -msgstr "DinΓ‘micas" diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/fr.po b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/fr.po deleted file mode 100644 index 6cfe2ce9dd..0000000000 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/fr.po +++ /dev/null @@ -1,32 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-21 21:35+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "StatisticsUI.category.networkOverview" -msgstr "Vue gΓ©nΓ©rale du rΓ©seau" - -msgid "StatisticsUI.category.nodeOverview" -msgstr "Vue gΓ©nΓ©rale des noeuds" - -msgid "StatisticsUI.category.edgeOverview" -msgstr "Vue gΓ©nΓ©rale des liens" - -msgid "StatisticsUI.category.dynamic" -msgstr "Dynamique" diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/ja.po b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/ja.po deleted file mode 100644 index 227cc987df..0000000000 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/ja.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-03 11:06+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "StatisticsUI.category.networkOverview" -msgstr "γƒγƒƒγƒˆγƒ―γƒΌγ‚―γζ¦‚要" - -msgid "StatisticsUI.category.nodeOverview" -msgstr "γƒŽγƒΌγƒ‰γζ¦‚要" - -msgid "StatisticsUI.category.edgeOverview" -msgstr "θΎΊγζ¦‚要" - -msgid "StatisticsUI.category.dynamic" -msgstr "ε‹•ηš„" diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/org-gephi-statistics-spi.pot b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/org-gephi-statistics-spi.pot deleted file mode 100644 index c68cceca56..0000000000 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/org-gephi-statistics-spi.pot +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "StatisticsUI.category.networkOverview" -msgstr "Network Overview" - -msgid "StatisticsUI.category.nodeOverview" -msgstr "Node Overview" - -msgid "StatisticsUI.category.edgeOverview" -msgstr "Edge Overview" - -msgid "StatisticsUI.category.dynamic" -msgstr "Dynamic" diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/package.html b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/package.html index 4a67848eb0..78dce3a605 100644 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/package.html +++ b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/package.html @@ -1,24 +1,38 @@ - - - - Interfaces for creating new statistics and metrics algorihms. -

            Create a new Metrics

            -
            1. Create a new module and set StatisticsAPI, - GraphAPI and AttributesAPI - as dependencies.
            2. -
            3. Create a new builder class by implementing StatisticsBuilder
            4. -
            5. Add @ServiceProvider annotation to your builder, that it can - be found by the system. Set StatisticsBuilder as the - annotation parameter.
            6. -
            7. Create a new class that implements Statistics. Write you - code in the execute() method.
            8. -
            9. Create a new class implementing StatisticsUI and add - @ServiceProvider annotation as well.
            10. -
            11. In both StatisticsBuilder and StatisticsUI, - return your Statistics class object for the - getStatisticsClass()/ method. -
            -

            To let your export task be cancelled and its progress watched, implement - LongTask interface.

            - - + + + + org.gephi.statistics.spi + + +

            Interfaces for creating new statistics and metrics algorihms.

            +

            Create a new Metrics

            +
              +
            1. + Create a new module and set StatisticsAPI and + GraphAPI as dependencies. +
            2. +
            3. + Create a new builder class by implementing StatisticsBuilder +
            4. +
            5. + Add @ServiceProvider annotation to your builder, that it can + be found by the system. Set StatisticsBuilder as the + annotation parameter. +
            6. +
            7. + Create a new class that implements Statistics. Write you + code in the execute() method. +
            8. +
            9. + Create a new class implementing StatisticsUI and add + @ServiceProvider annotation as well. +
            10. +
            11. + In both StatisticsBuilder and StatisticsUI, + return your Statistics class object for the + getStatisticsClass() method. +
            12. +
            +

            To let your export task be cancelled and its progress watched, implement LongTask interface.

            + + diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/pt_BR.po b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/pt_BR.po deleted file mode 100644 index 966497ec32..0000000000 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/pt_BR.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-23 14:25+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "StatisticsUI.category.networkOverview" -msgstr "VisΓ£o Geral da Rede" - -msgid "StatisticsUI.category.nodeOverview" -msgstr "VisΓ£o geral dos nΓ³s" - -msgid "StatisticsUI.category.edgeOverview" -msgstr "VisΓ£o geral das arestas" - -msgid "StatisticsUI.category.dynamic" -msgstr "DinΓ’mico" diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/ru.po b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/ru.po deleted file mode 100644 index 237e7f8d53..0000000000 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/ru.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-20 07:08+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "StatisticsUI.category.networkOverview" -msgstr "Бтатистика ΠΏΠΎ Π³Ρ€Π°Ρ„Ρƒ" - -msgid "StatisticsUI.category.nodeOverview" -msgstr "Бтатистика ΠΏΠΎ ΡƒΠ·Π»Ρƒ" - -msgid "StatisticsUI.category.edgeOverview" -msgstr "Бтатистика ΠΏΠΎ Ρ€Π΅Π±Ρ€Ρƒ" - -msgid "StatisticsUI.category.dynamic" -msgstr "Π”ΠΈΠ½Π°ΠΌΠΈΠΊΠ°" diff --git a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/zh_CN.po b/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/zh_CN.po deleted file mode 100644 index 1de64d8d95..0000000000 --- a/modules/StatisticsAPI/src/main/resources/org/gephi/statistics/spi/zh_CN.po +++ /dev/null @@ -1,30 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:07+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "StatisticsUI.category.networkOverview" -msgstr "η½‘η»œζ¦‚θΏ°" - -msgid "StatisticsUI.category.nodeOverview" -msgstr "θŠ‚η‚Ήζ¦‚θΏ°" - -msgid "StatisticsUI.category.edgeOverview" -msgstr "边概述" - -msgid "StatisticsUI.category.dynamic" -msgstr "εŠ¨ζ€" diff --git a/modules/StatisticsAPI/src/main/resources/overview.html b/modules/StatisticsAPI/src/main/resources/overview.html index faec0b93dc..337e5ab704 100644 --- a/modules/StatisticsAPI/src/main/resources/overview.html +++ b/modules/StatisticsAPI/src/main/resources/overview.html @@ -1,11 +1,16 @@ - + + + Statistics API + - Statistics and Metrics API/SPI provides synchronous and asynchronous - algorithms execution.

            - The API allows Statistics execution and manage - StatisticsModel, one per workspace. + Statistics and Metrics API/SPI provides synchronous and asynchronous + algorithms execution. +

            +

            + The API allows Statistics execution and manage + StatisticsModel, one per workspace.

            How should a Statistics/Metrics be implemented is defined in the diff --git a/modules/StatisticsPlugin/pom.xml b/modules/StatisticsPlugin/pom.xml index 70c4c5d640..3758517920 100644 --- a/modules/StatisticsPlugin/pom.xml +++ b/modules/StatisticsPlugin/pom.xml @@ -4,22 +4,18 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi statistics-plugin - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm StatisticsPlugin - - ${project.groupId} - dynamic-api - ${project.groupId} graph-api @@ -52,12 +48,25 @@ org.netbeans.api org-openide-util-lookup + + + + ${project.groupId} + io-importer-api + test + test-jar + + + ${project.groupId} + io-importer-plugin + test + - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/ChartUtils.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/ChartUtils.java index c9071cc528..7f908ae7d1 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/ChartUtils.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/ChartUtils.java @@ -59,7 +59,6 @@ Development and Distribution License("CDDL") (collectively, the import org.jfree.data.xy.XYSeries; /** - * * @author sebastien */ public abstract class ChartUtils { @@ -97,17 +96,17 @@ public static String renderChart(JFreeChart chart, String fileName) { final ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection()); TempDir tempDir = TempDirUtils.createTempDir(); File file1 = tempDir.createFile(fileName); - imageFile = ""; + imageFile = ""; ChartUtilities.saveChartAsPNG(file1, chart, 600, 400, info); } catch (IOException e) { - System.out.println(e.toString()); } return imageFile; } public static XYSeries createXYSeries(Map data, String name) { XYSeries series = new XYSeries(name); - for (Iterator it = data.entrySet().iterator(); it.hasNext();) { + for (Iterator it = data.entrySet().iterator(); it.hasNext(); ) { Map.Entry d = (Map.Entry) it.next(); Number x = (Number) d.getKey(); Number y = (Number) d.getValue(); diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/ClusteringCoefficient.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/ClusteringCoefficient.java index d616c3921a..6de0e0c469 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/ClusteringCoefficient.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/ClusteringCoefficient.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin; import java.text.DecimalFormat; @@ -47,16 +48,16 @@ Development and Distribution License("CDDL") (collectively, the import java.util.Comparator; import java.util.HashMap; import java.util.Map; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.attribute.api.Column; -import org.gephi.attribute.api.Table; -import org.gephi.statistics.spi.Statistics; -import org.gephi.graph.api.Node; +import org.gephi.graph.api.Column; import org.gephi.graph.api.DirectedGraph; import org.gephi.graph.api.Edge; import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphController; import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.NodeIterable; +import org.gephi.graph.api.Table; +import org.gephi.statistics.spi.Statistics; import org.gephi.utils.longtask.spi.LongTask; import org.gephi.utils.progress.Progress; import org.gephi.utils.progress.ProgressTicket; @@ -65,7 +66,6 @@ Development and Distribution License("CDDL") (collectively, the import org.jfree.chart.plot.PlotOrientation; import org.jfree.data.xy.XYSeries; import org.jfree.data.xy.XYSeriesCollection; -import org.gephi.graph.api.NodeIterable; import org.openide.util.Lookup; /** @@ -90,7 +90,6 @@ public int compare(EdgeWrapper o1, EdgeWrapper o2) { } /** - * * @author pjmcswee */ class EdgeWrapper { @@ -105,14 +104,13 @@ public EdgeWrapper(int count, ArrayWrapper wrapper) { } /** - * * @author pjmcswee */ class ArrayWrapper implements Comparable { + public Node node; private EdgeWrapper[] array; private int ID; - public Node node; /** * Empty Constructor/ @@ -121,15 +119,25 @@ class ArrayWrapper implements Comparable { } /** - * + * @param array + */ + ArrayWrapper(int ID, EdgeWrapper[] array) { + this.array = array; + this.ID = ID; + } + + /** * @return The ID of this array wrapper */ public int getID() { return ID; } + public void setID(int ID) { + this.ID = ID; + } + /** - * * @return The adjacency array */ public EdgeWrapper[] getArray() { @@ -141,21 +149,7 @@ public void setArray(EdgeWrapper[] array) { } /** - * - * @param pArray - */ - ArrayWrapper(int ID, EdgeWrapper[] array) { - this.array = array; - this.ID = ID; - } - - public void setID(int ID) { - this.ID = ID; - } - - /** - * - * @param pIndex + * @param index * @return */ public int get(int index) { @@ -173,7 +167,6 @@ public int getCount(int index) { } /** - * * @return */ public int length() { @@ -181,7 +174,6 @@ public int length() { } /** - * * @param o * @return */ @@ -199,7 +191,6 @@ public int compareTo(Object o) { } /** - * * @author Patrick J. McSweeney */ public class ClusteringCoefficient implements Statistics, LongTask { @@ -240,46 +231,45 @@ public double getAverageClusteringCoefficient() { } @Override - public void execute(GraphModel graphModel, AttributeModel attributeModel) { - isDirected = graphModel.isDirected(); - - Graph hgraph = null; + public void execute(GraphModel graphModel) { + Graph graph; if (isDirected) { - hgraph = graphModel.getDirectedGraphVisible(); + graph = graphModel.getDirectedGraphVisible(); } else { - hgraph = graphModel.getUndirectedGraphVisible(); + graph = graphModel.getUndirectedGraphVisible(); } - execute(hgraph, attributeModel); + execute(graph); } - public void execute(Graph hgraph, AttributeModel attributeModel) { + public void execute(Graph graph) { isCanceled = false; - HashMap resultValues = new HashMap(); + HashMap resultValues; if (isDirected) { - avgClusteringCoeff = bruteForce(hgraph, attributeModel); + avgClusteringCoeff = bruteForce(graph); } else { - initStartValues(hgraph); - resultValues = computeTriangles(hgraph, network, triangles, nodeClustering, isDirected); + initStartValues(graph); + resultValues = computeTriangles(graph, network, triangles, nodeClustering, isDirected); totalTriangles = resultValues.get("triangles").intValue(); avgClusteringCoeff = resultValues.get("clusteringCoefficient"); } //Set results in columns - Table nodeTable = attributeModel.getNodeTable(); + Table nodeTable = graph.getModel().getNodeTable(); + ColumnUtils.cleanUpColumns(nodeTable, new String[] {CLUSTERING_COEFF}, Double.class); Column clusteringCol = nodeTable.getColumn(CLUSTERING_COEFF); if (clusteringCol == null) { - clusteringCol = nodeTable.addColumn(CLUSTERING_COEFF, "Clustering Coefficient", Double.class, new Double(0)); + clusteringCol = nodeTable.addColumn(CLUSTERING_COEFF, "Clustering Coefficient", Double.class, 0.0); } Column triCount = null; if (!isDirected) { triCount = nodeTable.getColumn("Triangles"); if (triCount == null) { - triCount = nodeTable.addColumn("Triangles", "Number of triangles", Integer.class, new Integer(0)); + triCount = nodeTable.addColumn("Triangles", "Number of triangles", Integer.class, 0); } } @@ -293,41 +283,43 @@ public void execute(Graph hgraph, AttributeModel attributeModel) { } } - public void triangles(Graph hgraph) { - initStartValues(hgraph); - HashMap resultValues = computeTriangles(hgraph, network, triangles, - nodeClustering, isDirected); + public void triangles(Graph graph) { + initStartValues(graph); + HashMap resultValues = computeTriangles(graph, network, triangles, + nodeClustering, isDirected); totalTriangles = resultValues.get("triangles").intValue(); avgClusteringCoeff = resultValues.get("clusteringCoefficient"); } - public HashMap computeClusteringCoefficient(Graph hgraph, ArrayWrapper[] currentNetwork, - int[] currentTriangles, double[] currentNodeClustering, boolean directed) { - HashMap resultValues = new HashMap(); + public HashMap computeClusteringCoefficient(Graph graph, ArrayWrapper[] currentNetwork, + int[] currentTriangles, double[] currentNodeClustering, + boolean directed) { + HashMap resultValues = new HashMap<>(); - if (isDirected) { - double avClusteringCoefficient = bruteForce(hgraph, null); + if (directed) { + double avClusteringCoefficient = bruteForce(graph); resultValues.put("clusteringCoefficient", avClusteringCoefficient); return resultValues; } else { - initStartValues(hgraph); - resultValues = computeTriangles(hgraph, currentNetwork, currentTriangles, currentNodeClustering, directed); + initStartValues(graph); + resultValues = computeTriangles(graph, currentNetwork, currentTriangles, currentNodeClustering, directed); return resultValues; } } - public void initStartValues(Graph hgraph) { - N = hgraph.getNodeCount(); + public void initStartValues(Graph graph) { + N = graph.getNodeCount(); K = (int) Math.sqrt(N); nodeClustering = new double[N]; network = new ArrayWrapper[N]; triangles = new int[N]; } - public int createIndiciesMapAndInitNetwork(Graph hgraph, HashMap indicies, ArrayWrapper[] networks, int currentProgress) { + public int createIndiciesMapAndInitNetwork(Graph graph, HashMap indicies, ArrayWrapper[] networks, + int currentProgress) { int index = 0; - for (Node s : hgraph.getNodes()) { + for (Node s : graph.getNodes()) { indicies.put(s, index); networks[index] = new ArrayWrapper(); index++; @@ -374,7 +366,6 @@ private int closest_in_array(ArrayWrapper[] currentNetwork, int v) { } /** - * * @param v - The specific node to count the triangles on. */ private void newVertex(ArrayWrapper[] currentNetwork, int[] currentTrianlgles, int v, int n) { @@ -416,22 +407,22 @@ private void tr_link_nohigh(ArrayWrapper[] currentNetwork, int[] currentTriangle } } - private HashMap createNeighbourTable(Graph hgraph, Node node, HashMap indicies, - ArrayWrapper[] networks, boolean directed) { + private HashMap createNeighbourTable(Graph graph, Node node, HashMap indicies, + ArrayWrapper[] networks, boolean directed) { - HashMap neighborTable = new HashMap(); + HashMap neighborTable = new HashMap<>(); if (!directed) { - for (Edge edge : hgraph.getEdges(node)) { - Node neighbor = hgraph.getOpposite(node, edge); + for (Edge edge : graph.getEdges(node)) { + Node neighbor = graph.getOpposite(node, edge); neighborTable.put(neighbor, new EdgeWrapper(1, networks[indicies.get(neighbor)])); } } else { - for (Node neighbor : ((DirectedGraph) hgraph).getPredecessors(node)) { + for (Node neighbor : ((DirectedGraph) graph).getPredecessors(node)) { neighborTable.put(neighbor, new EdgeWrapper(1, networks[indicies.get(neighbor)])); } - for (Edge out : ((DirectedGraph) hgraph).getOutEdges(node)) { + for (Edge out : ((DirectedGraph) graph).getOutEdges(node)) { Node neighbor = out.getTarget(); EdgeWrapper ew = neighborTable.get(neighbor); if (ew == null) { @@ -469,8 +460,9 @@ private int processNetwork(ArrayWrapper[] currentNetwork, int currentProgress) { return currentProgress; } - private int computeRemainingTrianles(Graph hgraph, ArrayWrapper[] currentNetwork, int[] currentTriangles, int currentProgress) { - int n = hgraph.getNodeCount(); + private int computeRemainingTrianles(Graph graph, ArrayWrapper[] currentNetwork, int[] currentTriangles, + int currentProgress) { + int n = graph.getNodeCount(); int k = (int) Math.sqrt(n); for (int v = n - 1; (v >= 0) && (v >= k); v--) { for (int i = closest_in_array(currentNetwork, v); i >= 0; i--) { @@ -482,17 +474,17 @@ private int computeRemainingTrianles(Graph hgraph, ArrayWrapper[] currentNetwork Progress.progress(progress, ++currentProgress); if (isCanceled) { - hgraph.readUnlockAll(); return currentProgress; } } return currentProgress; } - private HashMap computeResultValues(Graph hgraph, ArrayWrapper[] currentNetwork, - int[] currentTriangles, double[] currentNodeClusterig, boolean directed, int currentProgress) { - int n = hgraph.getNodeCount(); - HashMap totalValues = new HashMap(); + private HashMap computeResultValues(Graph graph, ArrayWrapper[] currentNetwork, + int[] currentTriangles, double[] currentNodeClusterig, + boolean directed, int currentProgress) { + int n = graph.getNodeCount(); + HashMap totalValues = new HashMap<>(); int numNodesDegreeGreaterThanOne = 0; int trianglesNumber = 0; double currentClusteringCoefficient = 0; @@ -511,7 +503,6 @@ private HashMap computeResultValues(Graph hgraph, ArrayWrapper[] Progress.progress(progress, ++currentProgress); if (isCanceled) { - hgraph.readUnlockAll(); return totalValues; } } @@ -523,124 +514,133 @@ private HashMap computeResultValues(Graph hgraph, ArrayWrapper[] return totalValues; } - private HashMap computeTriangles(Graph hgraph, ArrayWrapper[] currentNetwork, int[] currentTriangles, - double[] nodeClustering, boolean directed) { + private HashMap computeTriangles(Graph graph, ArrayWrapper[] currentNetwork, int[] currentTriangles, + double[] nodeClustering, boolean directed) { - HashMap resultValues = new HashMap(); + HashMap resultValues = new HashMap<>(); int ProgressCount = 0; - Progress.start(progress, 7 * hgraph.getNodeCount()); - - hgraph.readLock(); - - int n = hgraph.getNodeCount(); - - /** - * Create network for processing - */ - /** - * */ - HashMap indicies = new HashMap(); + Progress.start(progress, 7 * graph.getNodeCount()); + + graph.readLock(); + try { + int n = graph.getNodeCount(); + + /** + * Create network for processing + */ + /** + * */ + HashMap indicies = new HashMap<>(); + + ProgressCount = createIndiciesMapAndInitNetwork(graph, indicies, currentNetwork, ProgressCount); + + int index = 0; + NodeIterable nodesIterable = graph.getNodes(); + for (Node node : nodesIterable) { + HashMap neighborTable = + createNeighbourTable(graph, node, indicies, currentNetwork, directed); + + EdgeWrapper[] edges = getEdges(neighborTable); + currentNetwork[index].node = node; + currentNetwork[index].setArray(edges); + index++; + Progress.progress(progress, ++ProgressCount); + + if (isCanceled) { + nodesIterable.doBreak(); + return resultValues; + } + } - ProgressCount = createIndiciesMapAndInitNetwork(hgraph, indicies, currentNetwork, ProgressCount); + ProgressCount = processNetwork(currentNetwork, ProgressCount); - int index = 0; - for (Node node : hgraph.getNodes()) { - HashMap neighborTable = createNeighbourTable(hgraph, node, indicies, currentNetwork, directed); + int k = (int) Math.sqrt(n); - EdgeWrapper[] edges = getEdges(neighborTable); - currentNetwork[index].node = node; - currentNetwork[index].setArray(edges); - index++; - Progress.progress(progress, ++ProgressCount); - - if (isCanceled) { - hgraph.readUnlockAll(); - return resultValues; + for (int v = 0; v < k && v < n; v++) { + newVertex(currentNetwork, currentTriangles, v, n); + Progress.progress(progress, ++ProgressCount); } - } - ProgressCount = processNetwork(currentNetwork, ProgressCount); + /* remaining links */ + ProgressCount = computeRemainingTrianles(graph, currentNetwork, currentTriangles, ProgressCount); - int k = (int) Math.sqrt(n); - - for (int v = 0; v < k && v < n; v++) { - newVertex(currentNetwork, currentTriangles, v, n); - Progress.progress(progress, ++ProgressCount); + resultValues = + computeResultValues(graph, currentNetwork, currentTriangles, nodeClustering, directed, ProgressCount); + } finally { + graph.readUnlock(); } - /* remaining links */ - ProgressCount = computeRemainingTrianles(hgraph, currentNetwork, currentTriangles, ProgressCount); - - resultValues = computeResultValues(hgraph, currentNetwork, currentTriangles, nodeClustering, directed, ProgressCount); - - hgraph.readUnlock(); return resultValues; } - private double bruteForce(Graph hgraph, AttributeModel attributeModel) { + private double bruteForce(Graph graph) { //The atrributes computed by the statistics - Column clusteringColumn = initializeAttributeColunms(attributeModel); + Column clusteringColumn = initializeAttributeColunms(graph.getModel()); float totalCC = 0; - hgraph.readLock(); + graph.readLock(); - Progress.start(progress, hgraph.getNodeCount()); - int node_count = 0; - for (Node node : hgraph.getNodes()) { - float nodeClusteringCoefficient = computeNodeClusteringCoefficient(hgraph, node, isDirected); + try { + Progress.start(progress, graph.getNodeCount()); + int node_count = 0; + NodeIterable nodesIterable = graph.getNodes(); + for (Node node : nodesIterable) { + float nodeClusteringCoefficient = computeNodeClusteringCoefficient(graph, node, isDirected); - if (nodeClusteringCoefficient > -1) { + if (nodeClusteringCoefficient > -1) { - saveCalculatedValue(node, clusteringColumn, nodeClusteringCoefficient); + saveCalculatedValue(node, clusteringColumn, nodeClusteringCoefficient); - totalCC += nodeClusteringCoefficient; - } - - if (isCanceled) { - break; - } + totalCC += nodeClusteringCoefficient; + } - node_count++; - Progress.progress(progress, node_count); + if (isCanceled) { + nodesIterable.doBreak(); + break; + } - } - double clusteringCoeff = totalCC / hgraph.getNodeCount(); + node_count++; + Progress.progress(progress, node_count); - hgraph.readUnlockAll(); + } + double clusteringCoeff = totalCC / graph.getNodeCount(); - return clusteringCoeff; + return clusteringCoeff; + } finally { + graph.readUnlockAll(); + } } - private float increaseCCifNesessary(Graph hgraph, Node neighbor1, Node neighbor2, boolean directed, float nodeCC) { + private float increaseCCifNesessary(Graph graph, Node neighbor1, Node neighbor2, boolean directed, float nodeCC) { if (neighbor1 == neighbor2) { return nodeCC; } if (directed) { - if (hgraph.isAdjacent(neighbor1, neighbor2)) { + if (graph.isAdjacent(neighbor1, neighbor2)) { nodeCC++; } - if (hgraph.isAdjacent(neighbor2, neighbor1)) { + if (graph.isAdjacent(neighbor2, neighbor1)) { nodeCC++; } } else { - if (hgraph.isAdjacent(neighbor1, neighbor2)) { + if (graph.isAdjacent(neighbor1, neighbor2)) { nodeCC++; } } return nodeCC; } - private float computeNodeClusteringCoefficient(Graph hgraph, Node node, boolean directed) { + private float computeNodeClusteringCoefficient(Graph graph, Node node, boolean directed) { float nodeCC = 0; int neighborhood = 0; - NodeIterable neighbors1 = hgraph.getNeighbors(node); + NodeIterable neighbors1 = graph.getNeighbors(node); for (Node neighbor1 : neighbors1) { neighborhood++; - NodeIterable neighbors2 = hgraph.getNeighbors(node); + NodeIterable neighbors2 = graph.getNeighbors(node); for (Node neighbor2 : neighbors2) { - nodeCC = increaseCCifNesessary(hgraph, neighbor1, neighbor2, directed, nodeCC); + nodeCC = increaseCCifNesessary(graph, neighbor1, neighbor2, directed, nodeCC); } } nodeCC /= 2.0; @@ -657,12 +657,12 @@ private float computeNodeClusteringCoefficient(Graph hgraph, Node node, boolean } } - private Column initializeAttributeColunms(AttributeModel attributeModel) { + private Column initializeAttributeColunms(GraphModel graphModel) { - if (attributeModel == null) { + if (graphModel == null) { return null; } - Table nodeTable = attributeModel.getNodeTable(); + Table nodeTable = graphModel.getNodeTable(); Column clusteringCol = nodeTable.getColumn("clustering"); if (clusteringCol == null) { @@ -673,7 +673,7 @@ private Column initializeAttributeColunms(AttributeModel attributeModel) { } private void saveCalculatedValue(Node node, Column clusteringColumn, - float nodeClusteringCoefficient) { + double nodeClusteringCoefficient) { if (clusteringColumn == null) { return; @@ -684,7 +684,7 @@ private void saveCalculatedValue(Node node, Column clusteringColumn, @Override public String getReport() { //distribution of values - Map dist = new HashMap(); + Map dist = new HashMap<>(); for (int i = 0; i < N; i++) { Double d = nodeClustering[i]; if (dist.containsKey(d)) { @@ -701,14 +701,14 @@ public String getReport() { dataset.addSeries(dSeries); JFreeChart chart = ChartFactory.createScatterPlot( - "Clustering Coefficient Distribution", - "Value", - "Count", - dataset, - PlotOrientation.VERTICAL, - true, - false, - false); + "Clustering Coefficient Distribution", + "Value", + "Count", + dataset, + PlotOrientation.VERTICAL, + true, + false, + false); chart.removeLegend(); ChartUtils.decorateChart(chart); ChartUtils.scaleChart(chart, dSeries, false); @@ -718,41 +718,42 @@ public String getReport() { if (isDirected) { return "

            Clustering Coefficient Metric Report

            " - + "
            " - + "
            " + "

            Parameters:

            " - + "Network Interpretation: " + (isDirected ? "directed" : "undirected") + "
            " - + "
            " + "

            Results:

            " - + "Average Clustering Coefficient: " + f.format(avgClusteringCoeff) + "
            " - + "The Average Clustering Coefficient is the mean value of individual coefficients.

            " - + imageFile - + "

            " + "

            Algorithm:

            " - + "Simple and slow brute force.
            " - + " "; + + "
            " + + "
            " + "

            Parameters:

            " + + "Network Interpretation: " + (isDirected ? "directed" : "undirected") + "
            " + + "
            " + "

            Results:

            " + + "Average Clustering Coefficient: " + f.format(avgClusteringCoeff) + "
            " + + "The Average Clustering Coefficient is the mean value of individual coefficients.

            " + + imageFile + + "

            " + "

            Algorithm:

            " + + "Simple and slow brute force.
            " + + " "; } else { return "

            Clustering Coefficient Metric Report

            " - + "
            " - + "
            " + "

            Parameters:

            " - + "Network Interpretation: " + (isDirected ? "directed" : "undirected") + "
            " - + "
            " + "

            Results:

            " - + "Average Clustering Coefficient: " + f.format(avgClusteringCoeff) + "
            " - + "Total triangles: " + totalTriangles + "
            " - + "The Average Clustering Coefficient is the mean value of individual coefficients.

            " - + imageFile - + "

            " + "

            Algorithm:

            " - + "Matthieu Latapy, Main-memory Triangle Computations for Very Large (Sparse (Power-Law)) Graphs, in Theoretical Computer Science (TCS) 407 (1-3), pages 458-473, 2008
            " - + " "; + + "
            " + + "
            " + "

            Parameters:

            " + + "Network Interpretation: " + (isDirected ? "directed" : "undirected") + "
            " + + "
            " + "

            Results:

            " + + "Average Clustering Coefficient: " + f.format(avgClusteringCoeff) + "
            " + + "Total triangles: " + totalTriangles + "
            " + + "The Average Clustering Coefficient is the mean value of individual coefficients.

            " + + imageFile + + "

            " + "

            Algorithm:

            " + + + "Matthieu Latapy, Main-memory Triangle Computations for Very Large (Sparse (Power-Law)) Graphs, in Theoretical Computer Science (TCS) 407 (1-3), pages 458-473, 2008
            " + + " "; } } - public void setDirected(boolean isDirected) { - this.isDirected = isDirected; - } - public boolean isDirected() { return isDirected; } + public void setDirected(boolean isDirected) { + this.isDirected = isDirected; + } + @Override public boolean cancel() { isCanceled = true; diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/ColumnUtils.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/ColumnUtils.java new file mode 100644 index 0000000000..bc389d8042 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/ColumnUtils.java @@ -0,0 +1,24 @@ +package org.gephi.statistics.plugin; + +import java.util.Arrays; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Table; + +public class ColumnUtils { + + /** + * Remove columns from the given table if they match the given ids but don't have the correct type. + * + * @param table table + * @param columnIds the column ids to remove + * @param type the type to check + */ + public static void cleanUpColumns(Table table, String[] columnIds, Class type) { + Arrays.stream(columnIds).forEach(id -> { + Column col = table.getColumn(id); + if (col != null && !col.getTypeClass().equals(type)) { + table.removeColumn(id); + } + }); + } +} diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/ConnectedComponents.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/ConnectedComponents.java index 9c7f46d1fa..860b0abcc7 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/ConnectedComponents.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/ConnectedComponents.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin; import java.text.DecimalFormat; @@ -46,9 +47,7 @@ Development and Distribution License("CDDL") (collectively, the import java.util.HashMap; import java.util.LinkedList; import java.util.Map; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.attribute.api.Column; -import org.gephi.attribute.api.Table; +import org.gephi.graph.api.Column; import org.gephi.graph.api.DirectedGraph; import org.gephi.graph.api.Edge; import org.gephi.graph.api.EdgeIterable; @@ -57,6 +56,7 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.graph.api.GraphModel; import org.gephi.graph.api.Node; import org.gephi.graph.api.NodeIterable; +import org.gephi.graph.api.Table; import org.gephi.graph.api.UndirectedGraph; import org.gephi.statistics.spi.Statistics; import org.gephi.utils.longtask.spi.LongTask; @@ -70,20 +70,19 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.Lookup; /** - * * @author pjmcswee */ public class ConnectedComponents implements Statistics, LongTask { public static final String WEAKLY = "componentnumber"; public static final String STRONG = "strongcompnum"; + int count; private boolean isDirected; private ProgressTicket progress; private boolean isCanceled; private int componentCount; private int stronglyCount; private int[] componentsSize; - int count; public ConnectedComponents() { GraphController graphController = Lookup.getDefault().lookup(GraphController.class); @@ -93,31 +92,35 @@ public ConnectedComponents() { } @Override - public void execute(GraphModel graphModel, AttributeModel attributeModel) { - isDirected = graphModel.isDirected(); + public void execute(GraphModel graphModel) { isCanceled = false; UndirectedGraph undirectedGraph = graphModel.getUndirectedGraphVisible(); - undirectedGraph.readLock(); - - weaklyConnected(undirectedGraph, attributeModel); + Column weaklyConnectedColumn = initializeWeaklyConnectedColumn(graphModel); + Column stronglyConnectedColumn = null; if (isDirected) { - DirectedGraph directedGraph = graphModel.getDirectedGraphVisible(); - stronglyConnected(directedGraph, attributeModel); + stronglyConnectedColumn = initializeStronglyConnectedColumn(graphModel); } - undirectedGraph.readUnlock(); + undirectedGraph.readLock(); + try { + weaklyConnected(undirectedGraph, weaklyConnectedColumn); + if (isDirected) { + DirectedGraph directedGraph = graphModel.getDirectedGraphVisible(); + stronglyConnected(directedGraph, graphModel, stronglyConnectedColumn); + } + } finally { + undirectedGraph.readUnlock(); + } } - public void weaklyConnected(UndirectedGraph graph, AttributeModel attributeModel) { + public void weaklyConnected(UndirectedGraph graph, Column componentCol) { isCanceled = false; - Column componentCol = initializeWeeklyConnectedColumn(attributeModel); + HashMap indices = createIndicesMap(graph); - HashMap indicies = createIndiciesMap(graph); - - LinkedList> components = computeWeeklyConnectedComponents(graph, indicies); + LinkedList> components = computeWeaklyConnectedComponents(graph, indices); saveComputedComponents(components, componentCol); @@ -126,8 +129,7 @@ public void weaklyConnected(UndirectedGraph graph, AttributeModel attributeModel componentCount = components.size(); } - public LinkedList> computeWeeklyConnectedComponents(Graph graph, HashMap indicies) { - + public LinkedList> computeWeaklyConnectedComponents(Graph graph, HashMap indices) { int N = graph.getNodeCount(); //Keep track of which nodes have been seen @@ -137,18 +139,18 @@ public LinkedList> computeWeeklyConnectedComponents(Graph graph int seenCount = 0; - LinkedList> components = new LinkedList>(); + LinkedList> components = new LinkedList<>(); while (seenCount < N) { //The search Q - LinkedList Q = new LinkedList(); + LinkedList Q = new LinkedList<>(); //The component-list - LinkedList component = new LinkedList(); + LinkedList component = new LinkedList<>(); - //Seed the seach Q + //Seed the search Q NodeIterable iter = graph.getNodes(); - for (Node first : iter) { - if (color[indicies.get(first)] == 0) { - Q.add(first); + for (Node next : iter) { + if (color[indices.get(next)] == 0) { + Q.add(next); iter.doBreak(); break; } @@ -156,56 +158,61 @@ public LinkedList> computeWeeklyConnectedComponents(Graph graph //While there are more nodes to search while (!Q.isEmpty()) { + if (isCanceled) { - graph.readUnlock(); - return new LinkedList>(); + return new LinkedList<>(); } //Get the next Node and add it to the component list Node u = Q.removeFirst(); component.add(u); + color[indices.get(u)] = 2; + //Iterate over all of u's neighbors EdgeIterable edgeIter = graph.getEdges(u); //For each neighbor for (Edge edge : edgeIter) { Node reachable = graph.getOpposite(u, edge); - int id = indicies.get(reachable); + int id = indices.get(reachable); //If this neighbor is unvisited if (color[id] == 0) { + //Mark it as used color[id] = 1; //Add it to the search Q Q.addLast(reachable); - //Mark it as used - - Progress.progress(progress, seenCount); } } - color[indicies.get(u)] = 2; + seenCount++; + Progress.progress(progress, seenCount); } + components.add(component); } + return components; } - private Column initializeWeeklyConnectedColumn(AttributeModel attributeModel) { - Table nodeTable = attributeModel.getNodeTable(); + private Column initializeWeaklyConnectedColumn(GraphModel graphModel) { + Table nodeTable = graphModel.getNodeTable(); + ColumnUtils.cleanUpColumns(nodeTable, new String[] {WEAKLY}, Integer.class); + Column componentCol = nodeTable.getColumn(WEAKLY); if (componentCol == null) { - componentCol = nodeTable.addColumn(WEAKLY, "Component ID", Integer.class, new Integer(0)); + componentCol = nodeTable.addColumn(WEAKLY, "Component ID", Integer.class, 0); } return componentCol; } - public HashMap createIndiciesMap(Graph hgraph) { - HashMap indicies = new HashMap(); + public HashMap createIndicesMap(Graph graph) { + HashMap indices = new HashMap<>(); int index = 0; - for (Node s : hgraph.getNodes()) { - indicies.put(s, index); + for (Node s : graph.getNodes()) { + indices.put(s, index); index++; } - return indicies; + return indices; } private void saveComputedComponents(LinkedList> components, Column componentCol) { @@ -225,33 +232,33 @@ void fillComponentSizeList(LinkedList> components) { } } - private Column initializeStronglyConnectedColumn(AttributeModel attributeModel) { - Table nodeTable = attributeModel.getNodeTable(); + private Column initializeStronglyConnectedColumn(GraphModel graphModel) { + Table nodeTable = graphModel.getNodeTable(); + ColumnUtils.cleanUpColumns(nodeTable, new String[] {STRONG}, Integer.class); + Column componentCol = nodeTable.getColumn(STRONG); if (componentCol == null) { - componentCol = nodeTable.addColumn(STRONG, "Strongly-Connected ID", Integer.class, new Integer(0)); + componentCol = nodeTable.addColumn(STRONG, "Strongly-Connected ID", Integer.class, 0); } return componentCol; } - public void stronglyConnected(DirectedGraph hgraph, AttributeModel attributeModel) { + public void stronglyConnected(DirectedGraph graph, GraphModel graphModel, Column componentCol) { count = 1; stronglyCount = 0; - Column componentCol = initializeStronglyConnectedColumn(attributeModel); + HashMap indices = createIndicesMap(graph); - HashMap indicies = createIndiciesMap(hgraph); - - LinkedList> components = top_tarjans(hgraph, indicies); + LinkedList> components = top_tarjans(graph, indices); saveComputedComponents(components, componentCol); stronglyCount = components.size(); } - public LinkedList> top_tarjans(DirectedGraph graph, HashMap indicies) { + public LinkedList> top_tarjans(DirectedGraph graph, HashMap indices) { - LinkedList> allComponents = new LinkedList>(); + LinkedList> allComponents = new LinkedList<>(); count = 1; stronglyCount = 0; @@ -262,14 +269,14 @@ public LinkedList> top_tarjans(DirectedGraph graph, HashMap S = new LinkedList(); + LinkedList S = new LinkedList<>(); //The component-list //LinkedList component = new LinkedList(); //Seed the seach Q Node first = null; NodeIterable iter = graph.getNodes(); for (Node u : iter) { - if (index[indicies.get(u)] == 0) { + if (index[indices.get(u)] == 0) { first = u; iter.doBreak(); break; @@ -279,16 +286,18 @@ public LinkedList> top_tarjans(DirectedGraph graph, HashMap> components = new LinkedList>(); - components = tarjans(components, S, graph, first, index, low_index, indicies); + LinkedList> components = new LinkedList<>(); + components = tarjans(components, S, graph, first, index, low_index, indices); for (LinkedList component : components) { allComponents.add(component); } } } - private LinkedList> tarjans(LinkedList> components, LinkedList S, DirectedGraph graph, Node f, int[] index, int[] low_index, HashMap indicies) { - int id = indicies.get(f); + private LinkedList> tarjans(LinkedList> components, LinkedList S, + DirectedGraph graph, Node f, int[] index, int[] low_index, + HashMap indices) { + int id = indices.get(f); index[id] = count; low_index[id] = count; count++; @@ -296,15 +305,15 @@ private LinkedList> tarjans(LinkedList> compon EdgeIterable edgeIter = graph.getOutEdges(f); for (Edge e : edgeIter) { Node u = graph.getOpposite(f, e); - int x = indicies.get(u); + int x = indices.get(u); if (index[x] == 0) { - tarjans(components, S, graph, u, index, low_index, indicies); + tarjans(components, S, graph, u, index, low_index, indices); low_index[id] = Math.min(low_index[x], low_index[id]); } else if (S.contains(u)) { low_index[id] = Math.min(low_index[id], index[x]); } } - LinkedList currentComponent = new LinkedList(); + LinkedList currentComponent = new LinkedList<>(); if (low_index[id] == index[id]) { Node v = null; while (v != f) { @@ -320,18 +329,24 @@ public int getConnectedComponentsCount() { return componentCount; } - public void setDirected(boolean isDirected) { - this.isDirected = isDirected; - } - public boolean isDirected() { return isDirected; } + public void setDirected(boolean isDirected) { + this.isDirected = isDirected; + } + + /** + * @return an unordered array of component sizes + */ public int[] getComponentsSize() { return componentsSize; } + /** + * @return the index of the largest component in the array returned by getComponentSize() + */ public int getGiantComponent() { int[] sizes = getComponentsSize(); int max = Integer.MIN_VALUE; @@ -360,7 +375,7 @@ public int getComponentNumber(LinkedList> components, Node node @Override public String getReport() { - Map sizeDist = new HashMap(); + Map sizeDist = new HashMap<>(); for (int v : componentsSize) { if (!sizeDist.containsKey(v)) { sizeDist.put(v, 0); @@ -375,14 +390,14 @@ public String getReport() { dataset1.addSeries(dSeries); JFreeChart chart = ChartFactory.createXYLineChart( - "Size Distribution", - "Size (number of nodes)", - "Count", - dataset1, - PlotOrientation.VERTICAL, - true, - false, - false); + "Size Distribution", + "Size (number of nodes)", + "Count", + dataset1, + PlotOrientation.VERTICAL, + true, + false, + false); chart.removeLegend(); ChartUtils.decorateChart(chart); ChartUtils.scaleChart(chart, dSeries, false); @@ -391,17 +406,18 @@ public String getReport() { NumberFormat f = new DecimalFormat("#0.000"); String report = "

            Connected Components Report

            " - + "
            " - + "
            " - + "

            Parameters:

            " - + "Network Interpretation: " + (isDirected ? "directed" : "undirected") + "
            " - + "

            Results:

            " - + "Number of Weakly Connected Components: " + componentCount + "
            " - + (isDirected ? "Number of Stronlgy Connected Components: " + stronglyCount + "
            " : "") - + "

            " + imageFile - + "
            " + "

            Algorithm:

            " - + "Robert Tarjan, Depth-First Search and Linear Graph Algorithms, in SIAM Journal on Computing 1 (2): 146–160 (1972)
            " - + " "; + + "
            " + + "
            " + + "

            Parameters:

            " + + "Network Interpretation: " + (isDirected ? "directed" : "undirected") + "
            " + + "

            Results:

            " + + "Number of Weakly Connected Components: " + componentCount + "
            " + + (isDirected ? "Number of Strongly Connected Components: " + stronglyCount + "
            " : "") + + "

            " + imageFile + + "
            " + "

            Algorithm:

            " + + + "Robert Tarjan, Depth-First Search and Linear Graph Algorithms, in SIAM Journal on Computing 1 (2): 146–160 (1972)
            " + + " "; return report; } diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/Degree.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/Degree.java index 7e6064ee4d..d97d6e3266 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/Degree.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/Degree.java @@ -39,18 +39,19 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.HashMap; import java.util.Map; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.attribute.api.Table; import org.gephi.graph.api.DirectedGraph; import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphModel; import org.gephi.graph.api.Node; +import org.gephi.graph.api.NodeIterable; +import org.gephi.graph.api.Table; import org.gephi.statistics.spi.Statistics; import org.gephi.utils.longtask.spi.LongTask; import org.gephi.utils.progress.Progress; @@ -86,7 +87,6 @@ public class Degree implements Statistics, LongTask { private Map degreeDist; /** - * * @return */ public double getAverageDegree() { @@ -94,29 +94,30 @@ public double getAverageDegree() { } /** - * * @param graphModel */ @Override - public void execute(GraphModel graphModel, AttributeModel attributeModel) { + public void execute(GraphModel graphModel) { Graph graph = graphModel.getGraphVisible(); - execute(graph, attributeModel); + execute(graph); } - public void execute(Graph graph, AttributeModel attributeModel) { + public void execute(Graph graph) { isDirected = graph.isDirected(); isCanceled = false; initializeDegreeDists(); - initializeAttributeColunms(attributeModel); + initializeAttributeColunms(graph.getModel()); graph.readLock(); - avgDegree = calculateAverageDegree(graph, isDirected, true); + try { + avgDegree = calculateAverageDegree(graph, isDirected, true); - graph.setAttribute(AVERAGE_DEGREE, avgDegree); - - graph.readUnlockAll(); + graph.setAttribute(AVERAGE_DEGREE, avgDegree); + } finally { + graph.readUnlockAll(); + } } protected int calculateInDegree(DirectedGraph directedGraph, Node n) { @@ -142,7 +143,8 @@ protected double calculateAverageDegree(Graph graph, boolean isDirected, boolean Progress.start(progress, graph.getNodeCount()); - for (Node n : graph.getNodes()) { + NodeIterable nodesIterable = graph.getNodes(); + for (Node n : nodesIterable) { int inDegree = 0; int outDegree = 0; int degree = 0; @@ -167,35 +169,42 @@ protected double calculateAverageDegree(Graph graph, boolean isDirected, boolean averageDegree += degree; if (isCanceled) { + nodesIterable.doBreak(); break; } Progress.progress(progress); } - averageDegree /= graph.getNodeCount(); + averageDegree /= (isDirected ? 2.0 : 1.0) * graph.getNodeCount(); return averageDegree; } - private void initializeAttributeColunms(AttributeModel attributeModel) { - Table nodeTable = attributeModel.getNodeTable(); + private void initializeAttributeColunms(GraphModel graphModel) { + Table nodeTable = graphModel.getNodeTable(); if (isDirected) { + ColumnUtils.cleanUpColumns(nodeTable, new String[] {INDEGREE, OUTDEGREE}, Integer.class); if (!nodeTable.hasColumn(INDEGREE)) { - nodeTable.addColumn(INDEGREE, NbBundle.getMessage(Degree.class, "Degree.nodecolumn.InDegree"), Integer.class, 0); + nodeTable + .addColumn(INDEGREE, NbBundle.getMessage(Degree.class, "Degree.nodecolumn.InDegree"), Integer.class, + 0); } if (!nodeTable.hasColumn(OUTDEGREE)) { - nodeTable.addColumn(OUTDEGREE, NbBundle.getMessage(Degree.class, "Degree.nodecolumn.OutDegree"), Integer.class, 0); + nodeTable.addColumn(OUTDEGREE, NbBundle.getMessage(Degree.class, "Degree.nodecolumn.OutDegree"), + Integer.class, 0); } } + ColumnUtils.cleanUpColumns(nodeTable, new String[] {DEGREE}, Integer.class); if (!nodeTable.hasColumn(DEGREE)) { - nodeTable.addColumn(DEGREE, NbBundle.getMessage(Degree.class, "Degree.nodecolumn.Degree"), Integer.class, 0); + nodeTable + .addColumn(DEGREE, NbBundle.getMessage(Degree.class, "Degree.nodecolumn.Degree"), Integer.class, 0); } } private void initializeDegreeDists() { - inDegreeDist = new HashMap(); - outDegreeDist = new HashMap(); - degreeDist = new HashMap(); + inDegreeDist = new HashMap<>(); + outDegreeDist = new HashMap<>(); + degreeDist = new HashMap<>(); } private void updateDegreeDists(int inDegree, int outDegree, int degree) { @@ -221,7 +230,6 @@ private void updateDegreeDists(int degree) { } /** - * * @return */ @Override @@ -237,14 +245,14 @@ public String getReport() { dataset1.addSeries(dSeries); JFreeChart chart1 = ChartFactory.createXYLineChart( - "Degree Distribution", - "Value", - "Count", - dataset1, - PlotOrientation.VERTICAL, - true, - false, - false); + "Degree Distribution", + "Value", + "Count", + dataset1, + PlotOrientation.VERTICAL, + true, + false, + false); chart1.removeLegend(); ChartUtils.decorateChart(chart1); ChartUtils.scaleChart(chart1, dSeries, false); @@ -253,11 +261,11 @@ public String getReport() { NumberFormat f = new DecimalFormat("#0.000"); report = "

            Degree Report

            " - + "
            " - + "

            Results:

            " - + "Average Degree: " + f.format(avgDegree) - + "

            " + degreeImageFile - + ""; + + "
            " + + "

            Results:

            " + + "Average Degree: " + f.format(avgDegree) + + "

            " + degreeImageFile + + ""; } return report; } @@ -278,42 +286,42 @@ public String getDirectedReport() { dataset3.addSeries(odSeries); JFreeChart chart1 = ChartFactory.createXYLineChart( - "Degree Distribution", - "Value", - "Count", - dataset1, - PlotOrientation.VERTICAL, - true, - false, - false); + "Degree Distribution", + "Value", + "Count", + dataset1, + PlotOrientation.VERTICAL, + true, + false, + false); chart1.removeLegend(); ChartUtils.decorateChart(chart1); ChartUtils.scaleChart(chart1, dSeries, false); String degreeImageFile = ChartUtils.renderChart(chart1, "degree-distribution.png"); JFreeChart chart2 = ChartFactory.createXYLineChart( - "In-Degree Distribution", - "Value", - "Count", - dataset2, - PlotOrientation.VERTICAL, - true, - false, - false); + "In-Degree Distribution", + "Value", + "Count", + dataset2, + PlotOrientation.VERTICAL, + true, + false, + false); chart2.removeLegend(); ChartUtils.decorateChart(chart2); ChartUtils.scaleChart(chart2, dSeries, false); String indegreeImageFile = ChartUtils.renderChart(chart2, "indegree-distribution.png"); JFreeChart chart3 = ChartFactory.createXYLineChart( - "Out-Degree Distribution", - "Value", - "Count", - dataset3, - PlotOrientation.VERTICAL, - true, - false, - false); + "Out-Degree Distribution", + "Value", + "Count", + dataset3, + PlotOrientation.VERTICAL, + true, + false, + false); chart3.removeLegend(); ChartUtils.decorateChart(chart3); ChartUtils.scaleChart(chart3, dSeries, false); @@ -322,19 +330,18 @@ public String getDirectedReport() { NumberFormat f = new DecimalFormat("#0.000"); String report = "

            Degree Report

            " - + "
            " - + "

            Results:

            " - + "Average Degree: " + f.format(avgDegree) - + "

            " + degreeImageFile - + "

            " + indegreeImageFile - + "

            " + outdegreeImageFile - + ""; + + "
            " + + "

            Results:

            " + + "Average Degree: " + f.format(avgDegree) + + "

            " + degreeImageFile + + "

            " + indegreeImageFile + + "

            " + outdegreeImageFile + + ""; return report; } /** - * * @return */ @Override @@ -344,7 +351,6 @@ public boolean cancel() { } /** - * * @param progressTicket */ @Override diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/EigenvectorCentrality.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/EigenvectorCentrality.java index 0c647c3059..e635ce6131 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/EigenvectorCentrality.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/EigenvectorCentrality.java @@ -39,13 +39,12 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin; import java.util.HashMap; import java.util.Map; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.attribute.api.Column; -import org.gephi.attribute.api.Table; +import org.gephi.graph.api.Column; import org.gephi.graph.api.DirectedGraph; import org.gephi.graph.api.Edge; import org.gephi.graph.api.EdgeIterable; @@ -53,6 +52,7 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.graph.api.GraphController; import org.gephi.graph.api.GraphModel; import org.gephi.graph.api.Node; +import org.gephi.graph.api.Table; import org.gephi.statistics.spi.Statistics; import org.gephi.utils.longtask.spi.LongTask; import org.gephi.utils.progress.Progress; @@ -65,7 +65,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.Lookup; /** - * * @author pjmcswee */ public class EigenvectorCentrality implements Statistics, LongTask { @@ -88,20 +87,18 @@ public EigenvectorCentrality() { } } - public void setNumRuns(int numRuns) { - this.numRuns = numRuns; - } - /** - * * @return */ public int getNumRuns() { return numRuns; } + public void setNumRuns(int numRuns) { + this.numRuns = numRuns; + } + /** - * * @return */ public boolean isDirected() { @@ -109,7 +106,6 @@ public boolean isDirected() { } /** - * * @param isDirected */ public void setDirected(boolean isDirected) { @@ -117,13 +113,10 @@ public void setDirected(boolean isDirected) { } /** - * * @param graphModel - * @param attributeModel */ @Override - public void execute(GraphModel graphModel, AttributeModel attributeModel) { - isDirected = graphModel.isDirected(); + public void execute(GraphModel graphModel) { isCanceled = false; Graph graph; @@ -132,35 +125,39 @@ public void execute(GraphModel graphModel, AttributeModel attributeModel) { } else { graph = graphModel.getUndirectedGraphVisible(); } - execute(graph, attributeModel); + execute(graph); } - public void execute(Graph hgraph, AttributeModel attributeModel) { - - Column column = initializeAttributeColunms(attributeModel); + public void execute(Graph graph) { - int N = hgraph.getNodeCount(); - hgraph.readLock(); + Column column = initializeAttributeColunms(graph.getModel()); - centralities = new double[N]; + int N = graph.getNodeCount(); + graph.readLock(); - Progress.start(progress, numRuns); + try { + centralities = new double[N]; - HashMap indicies = new HashMap(); - HashMap invIndicies = new HashMap(); - fillIndiciesMaps(hgraph, centralities, indicies, invIndicies); + Progress.start(progress, numRuns); - sumChange = calculateEigenvectorCentrality(hgraph, centralities, indicies, invIndicies, isDirected, numRuns); + HashMap indicies = new HashMap<>(); + HashMap invIndicies = new HashMap<>(); + fillIndiciesMaps(graph, centralities, indicies, invIndicies); - saveCalculatedValues(hgraph, column, indicies, centralities); + sumChange = calculateEigenvectorCentrality(graph, centralities, indicies, invIndicies, isDirected, numRuns); - hgraph.readUnlock(); + saveCalculatedValues(graph, column, indicies, centralities); + } finally { + graph.readUnlock(); + } Progress.finish(progress); } - private Column initializeAttributeColunms(AttributeModel attributeModel) { - Table nodeTable = attributeModel.getNodeTable(); + private Column initializeAttributeColunms(GraphModel graphModel) { + Table nodeTable = graphModel.getNodeTable(); + ColumnUtils.cleanUpColumns(nodeTable, new String[] {EIGENVECTOR}, Double.class); + Column eigenCol = nodeTable.getColumn(EIGENVECTOR); if (eigenCol == null) { eigenCol = nodeTable.addColumn(EIGENVECTOR, "Eigenvector Centrality", Double.class, new Double(0)); @@ -168,10 +165,10 @@ private Column initializeAttributeColunms(AttributeModel attributeModel) { return eigenCol; } - private void saveCalculatedValues(Graph hgraph, Column attributeColumn, HashMap indicies, - double[] eigCenrtalities) { + private void saveCalculatedValues(Graph graph, Column attributeColumn, HashMap indicies, + double[] eigCenrtalities) { - int N = hgraph.getNodeCount(); + int N = graph.getNodeCount(); for (int i = 0; i < N; i++) { Node s = indicies.get(i); @@ -180,13 +177,14 @@ private void saveCalculatedValues(Graph hgraph, Column attributeColumn, HashMap< } } - public void fillIndiciesMaps(Graph hgraph, double[] eigCentralities, HashMap indicies, HashMap invIndicies) { + public void fillIndiciesMaps(Graph graph, double[] eigCentralities, HashMap indicies, + HashMap invIndicies) { if (indicies == null || invIndicies == null) { return; } int count = 0; - for (Node u : hgraph.getNodes()) { + for (Node u : graph.getNodes()) { indicies.put(count, u); invIndicies.put(u, count); eigCentralities[count] = 1; @@ -194,23 +192,24 @@ public void fillIndiciesMaps(Graph hgraph, double[] eigCentralities, HashMap indicies, HashMap invIndicies, - double[] tempValues, double[] centralityValues, boolean directed) { + private double computeMaxValueAndTempValues(Graph graph, HashMap indicies, + HashMap invIndicies, + double[] tempValues, double[] centralityValues, boolean directed) { double max = 0.; - int N = hgraph.getNodeCount(); + int N = graph.getNodeCount(); for (int i = 0; i < N; i++) { Node u = indicies.get(i); - EdgeIterable iter = null; + EdgeIterable iter; if (directed) { - iter = ((DirectedGraph) hgraph).getInEdges(u); + iter = ((DirectedGraph) graph).getInEdges(u); } else { - iter = hgraph.getEdges(u); + iter = graph.getEdges(u); } for (Edge e : iter) { - Node v = hgraph.getOpposite(u, e); + Node v = graph.getOpposite(u, e); Integer id = invIndicies.get(v); tempValues[i] += centralityValues[id]; } @@ -223,14 +222,16 @@ private double computeMaxValueAndTempValues(Graph hgraph, HashMap return max; } - private double updateValues(Graph hgraph, double[] tempValues, double[] centralityValues, double max) { + private double updateValues(Graph graph, double[] tempValues, double[] centralityValues, double max) { double sumChanged = 0.; - int N = hgraph.getNodeCount(); + int N = graph.getNodeCount(); for (int k = 0; k < N; k++) { if (max != 0) { sumChanged += Math.abs(centralityValues[k] - (tempValues[k] / max)); centralityValues[k] = tempValues[k] / max; + } else { + centralityValues[k] = 0.0; } if (isCanceled) { return sumChanged; @@ -240,17 +241,17 @@ private double updateValues(Graph hgraph, double[] tempValues, double[] centrali return sumChanged; } - public double calculateEigenvectorCentrality(Graph hgraph, double[] eigCentralities, - HashMap indicies, HashMap invIndicies, - boolean directed, int numIterations) { + public double calculateEigenvectorCentrality(Graph graph, double[] eigCentralities, + HashMap indicies, HashMap invIndicies, + boolean directed, int numIterations) { - int N = hgraph.getNodeCount(); + int N = graph.getNodeCount(); double sumChanged = 0.; double[] tmp = new double[N]; for (int s = 0; s < numIterations; s++) { - double max = computeMaxValueAndTempValues(hgraph, indicies, invIndicies, tmp, eigCentralities, directed); - sumChanged = updateValues(hgraph, tmp, eigCentralities, max); + double max = computeMaxValueAndTempValues(graph, indicies, invIndicies, tmp, eigCentralities, directed); + sumChanged = updateValues(graph, tmp, eigCentralities, max); if (isCanceled) { return sumChanged; } @@ -262,13 +263,12 @@ public double calculateEigenvectorCentrality(Graph hgraph, double[] eigCentralit } /** - * * @return */ @Override public String getReport() { //distribution of values - Map dist = new HashMap(); + Map dist = new HashMap<>(); for (int i = 0; i < centralities.length; i++) { Double d = centralities[i]; if (dist.containsKey(d)) { @@ -286,28 +286,28 @@ public String getReport() { dataset.addSeries(dSeries); JFreeChart chart = ChartFactory.createScatterPlot( - "Eigenvector Centrality Distribution", - "Score", - "Count", - dataset, - PlotOrientation.VERTICAL, - true, - false, - false); + "Eigenvector Centrality Distribution", + "Score", + "Count", + dataset, + PlotOrientation.VERTICAL, + true, + false, + false); chart.removeLegend(); ChartUtils.decorateChart(chart); ChartUtils.scaleChart(chart, dSeries, true); String imageFile = ChartUtils.renderChart(chart, "eigenvector-centralities.png"); String report = "

            Eigenvector Centrality Report

            " - + "
            " - + "

            Parameters:

            " - + "Network Interpretation: " + (isDirected ? "directed" : "undirected") + "
            " - + "Number of iterations: " + numRuns + "
            " - + "Sum change: " + sumChange - + "

            Results:

            " - + imageFile - + ""; + + "
            " + + "

            Parameters:

            " + + "Network Interpretation: " + (isDirected ? "directed" : "undirected") + "
            " + + "Number of iterations: " + numRuns + "
            " + + "Sum change: " + sumChange + + "

            Results:

            " + + imageFile + + ""; return report; diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/GraphDensity.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/GraphDensity.java index 2344c4e110..4c63aea1f1 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/GraphDensity.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/GraphDensity.java @@ -39,11 +39,11 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin; import java.text.DecimalFormat; import java.text.NumberFormat; -import org.gephi.attribute.api.AttributeModel; import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphController; import org.gephi.graph.api.GraphModel; @@ -51,47 +51,50 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.Lookup; /** - * * @author pjmcswee */ public class GraphDensity implements Statistics { - /** The density of the graph.*/ + /** + * The density of the graph. + */ private double density; - /** */ + /** + * + */ private boolean isDirected; public GraphDensity() { GraphController graphController = Lookup.getDefault().lookup(GraphController.class); - if (graphController != null && graphController.getGraphModel()!= null) { + if (graphController != null && graphController.getGraphModel() != null) { isDirected = graphController.getGraphModel().isDirected(); } } - public void setDirected(boolean isDirected) { - this.isDirected = isDirected; - } - public boolean getDirected() { return isDirected; } + public void setDirected(boolean isDirected) { + this.isDirected = isDirected; + } + public double getDensity() { return density; } @Override - public void execute(GraphModel graphModel, AttributeModel attributeModel) { + public void execute(GraphModel graphModel) { Graph graph; if (isDirected) { graph = graphModel.getDirectedGraphVisible(); } else { graph = graphModel.getUndirectedGraphVisible(); } - + density = calculateDensity(graph, isDirected); } - + public double calculateDensity(Graph graph, boolean isGraphDirected) { double result; @@ -107,7 +110,6 @@ public double calculateDensity(Graph graph, boolean isGraphDirected) { } /** - * * @return */ @Override @@ -115,12 +117,12 @@ public String getReport() { NumberFormat f = new DecimalFormat("#0.000"); return "

            Graph Density Report

            " - + "
            " - + "
            " - + "

            Parameters:

            " - + "Network Interpretation: " + (isDirected ? "directed" : "undirected") + "
            " - + "

            Results:

            " - + "Density: " + f.format(density) - + ""; + + "
            " + + "
            " + + "

            Parameters:

            " + + "Network Interpretation: " + (isDirected ? "directed" : "undirected") + "
            " + + "

            Results:

            " + + "Density: " + f.format(density) + + ""; } } diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/GraphDistance.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/GraphDistance.java index 6846261724..0d7b266bb4 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/GraphDistance.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/GraphDistance.java @@ -39,19 +39,27 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin; import java.io.IOException; +import java.util.Arrays; import java.util.HashMap; -import org.gephi.statistics.spi.Statistics; -import org.gephi.graph.api.*; import java.util.LinkedList; import java.util.ListIterator; import java.util.Map; import java.util.Stack; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.attribute.api.Column; -import org.gephi.attribute.api.Table; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.DirectedGraph; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.EdgeIterable; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.NodeIterable; +import org.gephi.graph.api.Table; +import org.gephi.statistics.spi.Statistics; import org.gephi.utils.TempDirUtils; import org.gephi.utils.TempDirUtils.TempDir; import org.gephi.utils.longtask.spi.LongTask; @@ -64,154 +72,176 @@ Development and Distribution License("CDDL") (collectively, the import org.jfree.data.xy.XYSeriesCollection; import org.openide.util.Exceptions; import org.openide.util.Lookup; -import org.openide.util.NbBundle; /** - * Ref: Ulrik Brandes, A Faster Algorithm for Betweenness Centrality, in Journal - * of Mathematical Sociology 25(2):163-177, (2001) + * Ref: Ulrik Brandes, A Faster Algorithm for Betweenness Centrality, in Journal of Mathematical Sociology 25(2):163-177, (2001) * * @author pjmcswee + * @author Jonny Wray */ public class GraphDistance implements Statistics, LongTask { public static final String BETWEENNESS = "betweenesscentrality"; public static final String CLOSENESS = "closnesscentrality"; + public static final String HARMONIC_CLOSENESS = "harmonicclosnesscentrality"; public static final String ECCENTRICITY = "eccentricity"; /** - * */ + * + */ private double[] betweenness; /** - * */ + * + */ private double[] closeness; + private double[] harmonicCloseness; /** - * */ + * + */ private double[] eccentricity; /** - * */ + * + */ private int diameter; private int radius; /** - * */ + * + */ private double avgDist; /** - * */ + * + */ private int N; /** - * */ + * + */ private boolean isDirected; /** - * */ + * + */ private ProgressTicket progress; /** - * */ + * + */ private boolean isCanceled; - private int shortestPaths; private boolean isNormalized; + /** + * Construct a GraphDistance calculator for the current graph model + */ + public GraphDistance() { + GraphController graphController = Lookup.getDefault().lookup(GraphController.class); + if (graphController != null && graphController.getGraphModel() != null) { + isDirected = graphController.getGraphModel().isDirected(); + } + } + + /** + * Gets the average shortest path length in the network + * + * @return average shortest path length for all nodes + */ public double getPathLength() { return avgDist; } /** - * - * @return + * @return the diameter of the network */ public double getDiameter() { return diameter; } - + + /** + * @return the radius of the network + */ public double getRadius() { return radius; } - public GraphDistance() { - GraphController graphController = Lookup.getDefault().lookup(GraphController.class); - if (graphController != null && graphController.getGraphModel() != null) { - isDirected = graphController.getGraphModel().isDirected(); - } - } - /** - * * @param graphModel - * @param attributeModel */ @Override - public void execute(GraphModel graphModel, AttributeModel attributeModel) { - isDirected = graphModel.isDirected(); - - Graph graph = null; + public void execute(GraphModel graphModel) { + Graph graph; if (isDirected) { graph = graphModel.getDirectedGraphVisible(); } else { graph = graphModel.getUndirectedGraphVisible(); } - execute(graph, attributeModel); + execute(graph); } - public void execute(Graph hgraph, AttributeModel attributeModel) { + public void execute(Graph graph) { isCanceled = false; - - initializeAttributeColunms(attributeModel); - - hgraph.readLock(); - - N = hgraph.getNodeCount(); - - initializeStartValues(); - - HashMap indicies = createIndiciesMap(hgraph); - - Map metrics = calculateDistanceMetrics(hgraph, indicies, isDirected, isNormalized); - - eccentricity = metrics.get(ECCENTRICITY); - closeness = metrics.get(CLOSENESS); - betweenness = metrics.get(BETWEENNESS); - - saveCalculatedValues(hgraph, indicies, eccentricity, betweenness, closeness); - - hgraph.readUnlock(); + + initializeAttributeColunms(graph.getModel()); + + graph.readLock(); + try { + N = graph.getNodeCount(); + + initializeStartValues(); + + HashMap indicies = createIndiciesMap(graph); + + Map metrics = calculateDistanceMetrics(graph, indicies, isDirected, isNormalized); + + eccentricity = metrics.get(ECCENTRICITY); + closeness = metrics.get(CLOSENESS); + harmonicCloseness = metrics.get(HARMONIC_CLOSENESS); + betweenness = metrics.get(BETWEENNESS); + + saveCalculatedValues(graph, indicies, eccentricity, betweenness, closeness, harmonicCloseness); + } finally { + graph.readUnlock(); + } + } - - public Map calculateDistanceMetrics(Graph hgraph, HashMap indicies, boolean directed, boolean normalized) { - int n = hgraph.getNodeCount(); - - HashMap metrics = new HashMap(); - + + public Map calculateDistanceMetrics(Graph graph, HashMap indicies, + boolean directed, boolean normalized) { + int n = graph.getNodeCount(); + + HashMap metrics = new HashMap<>(); + double[] nodeEccentricity = new double[n]; double[] nodeBetweenness = new double[n]; double[] nodeCloseness = new double[n]; - + double[] nodeHarmonicCloseness = new double[n]; + metrics.put(ECCENTRICITY, nodeEccentricity); metrics.put(CLOSENESS, nodeCloseness); + metrics.put(HARMONIC_CLOSENESS, nodeHarmonicCloseness); metrics.put(BETWEENNESS, nodeBetweenness); - - Progress.start(progress, hgraph.getNodeCount()); + + Progress.start(progress, graph.getNodeCount()); int count = 0; - - - for (Node s : hgraph.getNodes()) { - Stack S = new Stack(); + + int totalPaths = 0; + NodeIterable nodesIterable = graph.getNodes(); + for (Node s : nodesIterable) { + Stack S = new Stack<>(); LinkedList[] P = new LinkedList[n]; double[] theta = new double[n]; int[] d = new int[n]; - + int s_index = indicies.get(s); - + setInitParametetrsForNode(s, P, theta, d, s_index, n); - LinkedList Q = new LinkedList(); + LinkedList Q = new LinkedList<>(); Q.addLast(s); while (!Q.isEmpty()) { Node v = Q.removeFirst(); S.push(v); int v_index = indicies.get(v); - EdgeIterable edgeIter = getEdgeIter(hgraph, v, directed); + EdgeIterable edgeIter = getEdgeIter(graph, v, directed); for (Edge edge : edgeIter) { - Node reachable = hgraph.getOpposite(v, edge); + Node reachable = graph.getOpposite(v, edge); int r_index = indicies.get(reachable); if (d[r_index] < 0) { @@ -230,6 +260,7 @@ public Map calculateDistanceMetrics(Graph hgraph, HashMap calculateDistanceMetrics(Graph hgraph, HashMap calculateDistanceMetrics(Graph hgraph, HashMap[] P, double[] theta, int[] d, int index, int n) { - for (int j = 0; j < n; j++) { - P[j] = new LinkedList(); - theta[j] = 0; - d[j] = -1; - } - theta[index] = 1; - d[index] = 0; + + private void setInitParametetrsForNode(Node s, LinkedList[] P, double[] theta, int[] d, int index, int n) { + for (int j = 0; j < n; j++) { + P[j] = new LinkedList<>(); + theta[j] = 0; + d[j] = -1; + } + theta[index] = 1; + d[index] = 0; } - - private EdgeIterable getEdgeIter(Graph hgraph, Node v, boolean directed) { - EdgeIterable edgeIter = null; - if (directed) { - edgeIter = ((DirectedGraph) hgraph).getOutEdges(v); - } else { - edgeIter = hgraph.getEdges(v); - } - return edgeIter; + + private EdgeIterable getEdgeIter(Graph graph, Node v, boolean directed) { + EdgeIterable edgeIter; + if (directed) { + edgeIter = ((DirectedGraph) graph).getOutEdges(v); + } else { + edgeIter = graph.getEdges(v); + } + return edgeIter; } - - private void initializeAttributeColunms(AttributeModel attributeModel) { - Table nodeTable = attributeModel.getNodeTable(); + + private void initializeAttributeColunms(GraphModel graphModel) { + Table nodeTable = graphModel.getNodeTable(); + ColumnUtils.cleanUpColumns(nodeTable, new String[] {ECCENTRICITY, CLOSENESS, HARMONIC_CLOSENESS, BETWEENNESS}, Double.class); + if (!nodeTable.hasColumn(ECCENTRICITY)) { nodeTable.addColumn(ECCENTRICITY, "Eccentricity", Double.class, new Double(0)); } if (!nodeTable.hasColumn(CLOSENESS)) { nodeTable.addColumn(CLOSENESS, "Closeness Centrality", Double.class, new Double(0)); } + if (!nodeTable.hasColumn(HARMONIC_CLOSENESS)) { + nodeTable.addColumn(HARMONIC_CLOSENESS, "Harmonic Closeness Centrality", Double.class, new Double(0)); + } if (!nodeTable.hasColumn(BETWEENNESS)) { nodeTable.addColumn(BETWEENNESS, "Betweenness Centrality", Double.class, new Double(0)); } } - - public HashMap createIndiciesMap(Graph hgraph) { - HashMap indicies = new HashMap(); + + public HashMap createIndiciesMap(Graph graph) { + HashMap indicies = new HashMap<>(); int index = 0; - for (Node s : hgraph.getNodes()) { + for (Node s : graph.getNodes()) { indicies.put(s, index); index++; - } + } return indicies; } - - public void initializeStartValues() { + + public void initializeStartValues() { betweenness = new double[N]; eccentricity = new double[N]; closeness = new double[N]; + harmonicCloseness = new double[N]; diameter = 0; avgDist = 0; - shortestPaths = 0; radius = Integer.MAX_VALUE; - } - - private void calculateCorrection(Graph hgraph, HashMap indicies, - double[] nodeBetweenness, double[] nodeCloseness, boolean directed, boolean normalized) { - - int n = hgraph.getNodeCount(); - - for (Node s : hgraph.getNodes()) { - - int s_index = indicies.get(s); + } + + + public double computeBetweennessNormalizationFactor(int nodeCount) { + return (nodeCount - 1.d) * (nodeCount - 2.d); + } + + private void calculateCorrection(Graph graph, HashMap indicies, + double[] nodeBetweenness, boolean directed, boolean normalized) { + + int n = graph.getNodeCount(); + + for (Node s : graph.getNodes()) { + + int s_index = indicies.get(s); if (!directed) { - nodeBetweenness[s_index] /= 2; + nodeBetweenness[s_index] /= 2.d; } if (normalized) { - nodeCloseness[s_index] = (nodeCloseness[s_index] == 0) ? 0 : 1.0 / nodeCloseness[s_index]; - nodeBetweenness[s_index] /= directed ? (n - 1) * (n - 2) : (n - 1) * (n - 2) / 2; - } - } - } - - private void saveCalculatedValues(Graph hgraph, HashMap indicies, - double[] nodeEccentricity, double[] nodeBetweenness, double[] nodeCloseness) { - for (Node s : hgraph.getNodes()) { + double betweennessNormalizationFactor = computeBetweennessNormalizationFactor(n); + if (!directed) { + betweennessNormalizationFactor /= 2; + } + nodeBetweenness[s_index] /= betweennessNormalizationFactor; + + } + + } + } + + private void saveCalculatedValues(Graph graph, HashMap indicies, + double[] nodeEccentricity, double[] nodeBetweenness, double[] nodeCloseness, + double[] nodeHarmonicCloseness) { + for (Node s : graph.getNodes()) { int s_index = indicies.get(s); s.setAttribute(ECCENTRICITY, nodeEccentricity[s_index]); s.setAttribute(CLOSENESS, nodeCloseness[s_index]); + s.setAttribute(HARMONIC_CLOSENESS, nodeHarmonicCloseness[s_index]); s.setAttribute(BETWEENNESS, nodeBetweenness[s_index]); } } - public void setNormalized(boolean isNormalized) { - this.isNormalized = isNormalized; - } - public boolean isNormalized() { return isNormalized; } - public void setDirected(boolean isDirected) { - this.isDirected = isDirected; + public void setNormalized(boolean isNormalized) { + this.isNormalized = isNormalized; } public boolean isDirected() { return isDirected; } + public void setDirected(boolean isDirected) { + this.isDirected = isDirected; + } + private String createImageFile(TempDir tempDir, double[] pVals, String pName, String pX, String pY) { //distribution of values - Map dist = new HashMap(); + Map dist = new HashMap<>(); for (int i = 0; i < N; i++) { Double d = pVals[i]; if (dist.containsKey(d)) { @@ -391,14 +440,14 @@ private String createImageFile(TempDir tempDir, double[] pVals, String pName, St dataset.addSeries(dSeries); JFreeChart chart = ChartFactory.createXYLineChart( - pName, - pX, - pY, - dataset, - PlotOrientation.VERTICAL, - true, - false, - false); + pName, + pX, + pY, + dataset, + PlotOrientation.VERTICAL, + true, + false, + false); chart.removeLegend(); ChartUtils.decorateChart(chart); ChartUtils.scaleChart(chart, dSeries, isNormalized); @@ -406,7 +455,6 @@ private String createImageFile(TempDir tempDir, double[] pVals, String pName, St } /** - * * @return */ @Override @@ -414,37 +462,41 @@ public String getReport() { String htmlIMG1 = ""; String htmlIMG2 = ""; String htmlIMG3 = ""; + String htmlIMG4 = ""; try { TempDir tempDir = TempDirUtils.createTempDir(); htmlIMG1 = createImageFile(tempDir, betweenness, "Betweenness Centrality Distribution", "Value", "Count"); htmlIMG2 = createImageFile(tempDir, closeness, "Closeness Centrality Distribution", "Value", "Count"); - htmlIMG3 = createImageFile(tempDir, eccentricity, "Eccentricity Distribution", "Value", "Count"); + htmlIMG3 = + createImageFile(tempDir, harmonicCloseness, "Harmonic Closeness Centrality Distribution", "Value", + "Count"); + htmlIMG4 = createImageFile(tempDir, eccentricity, "Eccentricity Distribution", "Value", "Count"); } catch (IOException ex) { Exceptions.printStackTrace(ex); } String report = "

            Graph Distance Report

            " - + "
            " - + "
            " - + "

            Parameters:

            " - + "Network Interpretation: " + (isDirected ? "directed" : "undirected") + "
            " - + "

            Results:

            " - + "Diameter: " + diameter + "
            " - + "Radius: " + radius + "
            " - + "Average Path length: " + avgDist + "
            " - + "Number of shortest paths: " + shortestPaths + "

            " - + htmlIMG1 + "

            " - + htmlIMG2 + "

            " - + htmlIMG3 - + "

            " + "

            Algorithm:

            " - + "Ulrik Brandes, A Faster Algorithm for Betweenness Centrality, in Journal of Mathematical Sociology 25(2):163-177, (2001)
            " - + " "; + + "
            " + + "
            " + + "

            Parameters:

            " + + "Network Interpretation: " + (isDirected ? "directed" : "undirected") + "
            " + + "

            Results:

            " + + "Diameter: " + diameter + "
            " + + "Radius: " + radius + "
            " + + "Average Path length: " + avgDist + "
            " + + htmlIMG1 + "

            " + + htmlIMG2 + "

            " + + htmlIMG3 + "

            " + + htmlIMG4 + + "

            " + "

            Algorithm:

            " + + + "Ulrik Brandes, A Faster Algorithm for Betweenness Centrality, in Journal of Mathematical Sociology 25(2):163-177, (2001)
            " + + " "; return report; } /** - * * @return */ @Override @@ -454,7 +506,6 @@ public boolean cancel() { } /** - * * @param progressTicket */ @Override diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/Hits.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/Hits.java index b31eda6f07..df54889f8f 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/Hits.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/Hits.java @@ -39,14 +39,12 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin; +import java.util.Arrays; import java.util.HashMap; -import java.util.LinkedList; import java.util.Map; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.attribute.api.Column; -import org.gephi.attribute.api.Table; import org.gephi.graph.api.DirectedGraph; import org.gephi.graph.api.Edge; import org.gephi.graph.api.EdgeIterable; @@ -54,7 +52,7 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.graph.api.GraphController; import org.gephi.graph.api.GraphModel; import org.gephi.graph.api.Node; -import org.gephi.graph.api.NodeIterable; +import org.gephi.graph.api.Table; import org.gephi.statistics.spi.Statistics; import org.gephi.utils.longtask.spi.LongTask; import org.gephi.utils.progress.Progress; @@ -67,8 +65,7 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.Lookup; /** - * Ref: Jon M. Kleinberg, Authoritative Sources in a Hyperlinked Environment, in - * Journal of the ACM 46 (5): 604–632 (1999) + * Ref: Jon M. Kleinberg, Authoritative Sources in a Hyperlinked Environment, in Journal of the ACM 46 (5): 604–632 (1999) * * @author pjmcswee */ @@ -81,7 +78,7 @@ public class Hits implements Statistics, LongTask { private double[] authority; private double[] hubs; private boolean useUndirected; - private double epsilon = 0.0001; + private double epsilon = 1e-8; public Hits() { GraphController graphController = Lookup.getDefault().lookup(GraphController.class); @@ -90,122 +87,117 @@ public Hits() { } } - public void setUndirected(boolean pUndirected) { - useUndirected = pUndirected; - } - /** - * * @return */ public boolean getUndirected() { return useUndirected; } + public void setUndirected(boolean pUndirected) { + useUndirected = pUndirected; + } + @Override - public void execute(GraphModel graphModel, AttributeModel attributeModel) { - Graph graph = null; + public void execute(GraphModel graphModel) { + final Graph graph; if (useUndirected) { graph = graphModel.getUndirectedGraphVisible(); } else { graph = graphModel.getDirectedGraphVisible(); } - execute(graph, attributeModel); + execute(graph); } - public void execute(Graph hgraph, AttributeModel attributeModel) { - - initializeAttributeColunms(attributeModel); + public void execute(Graph graph) { - hgraph.readLock(); + initializeAttributeColunms(graph.getModel()); - int N = hgraph.getNodeCount(); - authority = new double[N]; - hubs = new double[N]; + graph.readLock(); + try { + int N = graph.getNodeCount(); + authority = new double[N]; + hubs = new double[N]; - Map indicies = createIndiciesMap(hgraph); + Map indices = createIndicesMap(graph); - calculateHits(hgraph, hubs, authority, indicies, !useUndirected, epsilon); + calculateHits(graph, hubs, authority, indices, !useUndirected, epsilon); - saveCalculatedValues(hgraph, authority, hubs); - - hgraph.readUnlockAll(); + saveCalculatedValues(indices, authority, hubs); + } finally { + graph.readUnlockAll(); + } } - public void calculateHits(Graph hgraph, double[] hubValues, double[] authorityValues, Map indicies, boolean isDirected, double eps) { + public void calculateHits(Graph graph, double[] hubValues, double[] authorityValues, Map indices, + boolean isDirected, double eps) { - int N = hgraph.getNodeCount(); + int N = graph.getNodeCount(); double[] temp_authority = new double[N]; double[] temp_hubs = new double[N]; initializeStartValues(hubValues, authorityValues); - + Progress.start(progress); while (true) { - - boolean done = true; - - updateAutorithy(hgraph, temp_authority, hubValues, isDirected, indicies); - updateHub(hgraph, temp_hubs, temp_authority, isDirected, indicies); - - done = checkDiff(authorityValues, temp_authority, eps) && checkDiff(hubValues, temp_hubs, eps); + updateAutorithy(graph, temp_authority, hubValues, isDirected, indices); + updateHub(graph, temp_hubs, temp_authority, isDirected, indices); + boolean done = checkDiff(authorityValues, temp_authority, eps) && checkDiff(hubValues, temp_hubs, eps); System.arraycopy(temp_authority, 0, authorityValues, 0, N); System.arraycopy(temp_hubs, 0, hubValues, 0, N); -// temp_authority = new double[N]; -// temp_hubs = new double[N] - if ((done) || (isCanceled)) { break; } } } - private void initializeAttributeColunms(AttributeModel attributeModel) { - Table nodeTable = attributeModel.getNodeTable(); + private void initializeAttributeColunms(GraphModel graphModel) { + Table nodeTable = graphModel.getNodeTable(); + ColumnUtils.cleanUpColumns(nodeTable, new String[] {AUTHORITY, HUB}, Double.class); if (!nodeTable.hasColumn(AUTHORITY)) { - nodeTable.addColumn(AUTHORITY, "Authority", Float.class, new Float(0)); + nodeTable.addColumn(AUTHORITY, "Authority", Double.class, 0.0); } if (!nodeTable.hasColumn(HUB)) { - nodeTable.addColumn(HUB, "Hub", Float.class, new Float(0)); + nodeTable.addColumn(HUB, "Hub", Double.class, 0.0); } } private void initializeStartValues(double[] hubValues, double[] authorityValues) { - for (int i = 0; i < authorityValues.length; i++) { - authorityValues[i] = 1.0; - hubValues[i] = 1.0; - } + Arrays.fill(authorityValues, 1.0); + Arrays.fill(hubValues, 1.0); } - void updateAutorithy(Graph hgraph, double[] newValues, double[] hubValues, boolean isDirected, Map indicies) { + void updateAutorithy(Graph graph, double[] newValues, double[] hubValues, boolean isDirected, + Map indices) { double norm = 0; - int j = 0; - for (Node node : hgraph.getNodes()) { + for (Node q : indices.keySet()) { double auth = 0; EdgeIterable edge_iter; if (isDirected) { - edge_iter = ((DirectedGraph) hgraph).getInEdges(node); + edge_iter = ((DirectedGraph) graph).getInEdges(q); } else { - edge_iter = hgraph.getEdges(node); + edge_iter = graph.getEdges(q); } for (Edge edge : edge_iter) { - Node target = hgraph.getOpposite(node, edge); - auth += hubValues[indicies.get(target)]; - } - if (auth > 0) { - newValues[j] = auth; + if (!edge.isSelfLoop()) { + Node p = graph.getOpposite(q, edge); + auth += hubValues[indices.get(p)]; + } } - norm += newValues[j++]; + + newValues[indices.get(q)] = auth; + + norm += auth * auth; if (isCanceled) { return; } } -// norm = Math.sqrt(norm); + norm = Math.sqrt(norm); if (norm > 0) { for (int i = 0; i < newValues.length; i++) { newValues[i] = newValues[i] / norm; @@ -213,29 +205,32 @@ void updateAutorithy(Graph hgraph, double[] newValues, double[] hubValues, boole } } - void updateHub(Graph hgraph, double[] newValues, double[] authValues, boolean isDirected, Map indicies) { + void updateHub(Graph graph, double[] newValues, double[] authValues, boolean isDirected, + Map indices) { double norm = 0; - int j = 0; - for (Node node : hgraph.getNodes()) { + for (Node p : indices.keySet()) { double hub = 0; EdgeIterable edge_iter; if (isDirected) { - edge_iter = ((DirectedGraph) hgraph).getOutEdges(node); + edge_iter = ((DirectedGraph) graph).getOutEdges(p); } else { - edge_iter = hgraph.getEdges(node); + edge_iter = graph.getEdges(p); } for (Edge edge : edge_iter) { - Node target = hgraph.getOpposite(node, edge); - hub += authValues[indicies.get(target)]; - } - if(hub > 0) { - newValues[j] = hub; + if (!edge.isSelfLoop()) { + Node r = graph.getOpposite(p, edge); + hub += authValues[indices.get(r)]; + } } - norm += newValues[j++]; + + newValues[indices.get(p)] = hub; + + norm += hub * hub; if (isCanceled) { return; } } + norm = Math.sqrt(norm); if (norm > 0) { for (int i = 0; i < newValues.length; i++) { newValues[i] = newValues[i] / norm; @@ -244,43 +239,40 @@ void updateHub(Graph hgraph, double[] newValues, double[] authValues, boolean is } private boolean checkDiff(double[] oldValues, double[] newValues, double epsilon) { - for (int i = 0; i < oldValues.length; i++) { - if (oldValues[i] > 0 && ((newValues[i] - oldValues[i]) / oldValues[i]) >= epsilon) { + if (oldValues[i] > 0 && Math.abs((newValues[i] - oldValues[i]) / oldValues[i]) >= epsilon) { return false; } } return true; } - private void saveCalculatedValues(Graph hgraph, double[] nodeAuthority, double[] nodeHubs) { - int i = 0; - for (Node s : hgraph.getNodes()) { - int s_index = i++; + private void saveCalculatedValues(Map indices, double[] nodeAuthority, double[] nodeHubs) { + for (Node n : indices.keySet()) { + int index = indices.get(n); - s.setAttribute(AUTHORITY, (float) nodeAuthority[s_index]); - s.setAttribute(HUB, (float) nodeHubs[s_index]); + n.setAttribute(AUTHORITY, nodeAuthority[index]); + n.setAttribute(HUB, nodeHubs[index]); } } - public HashMap createIndiciesMap(Graph hgraph) { - HashMap newIndicies = new HashMap(); + public HashMap createIndicesMap(Graph graph) { + HashMap newIndices = new HashMap<>(); int index = 0; - for (Node s : hgraph.getNodes()) { - newIndicies.put(s, index); + for (Node s : graph.getNodes()) { + newIndices.put(s, index); index++; } - return newIndicies; + return newIndices; } /** - * * @return */ @Override public String getReport() { //distribution of hub values - Map distHubs = new HashMap(); + Map distHubs = new HashMap<>(); for (int i = 0; i < hubs.length; i++) { Double d = hubs[i]; if (distHubs.containsKey(d)) { @@ -292,7 +284,7 @@ public String getReport() { } //distribution of authority values - Map distAuthorities = new HashMap(); + Map distAuthorities = new HashMap<>(); for (int i = 0; i < authority.length; i++) { Double d = authority[i]; if (distAuthorities.containsKey(d)) { @@ -316,48 +308,48 @@ public String getReport() { datasetAuths.addSeries(dAuthsSeries); JFreeChart chart = ChartFactory.createXYLineChart( - "Hubs Distribution", - "Score", - "Count", - datasetHubs, - PlotOrientation.VERTICAL, - true, - false, - false); + "Hubs Distribution", + "Score", + "Count", + datasetHubs, + PlotOrientation.VERTICAL, + true, + false, + false); chart.removeLegend(); ChartUtils.decorateChart(chart); ChartUtils.scaleChart(chart, dHubsSeries, true); String imageFile1 = ChartUtils.renderChart(chart, "hubs.png"); JFreeChart chart2 = ChartFactory.createXYLineChart( - "Authority Distribution", - "Score", - "Count", - datasetAuths, - PlotOrientation.VERTICAL, - true, - false, - false); + "Authority Distribution", + "Score", + "Count", + datasetAuths, + PlotOrientation.VERTICAL, + true, + false, + false); chart2.removeLegend(); ChartUtils.decorateChart(chart2); ChartUtils.scaleChart(chart2, dAuthsSeries, true); String imageFile2 = ChartUtils.renderChart(chart2, "authorities.png"); String report = "

            HITS Metric Report

            " - + "
            " - + "
            " - + "

            Parameters:

            Ε = " + this.epsilon - + "

            Results:


            " - + imageFile1 + "
            " + imageFile2 - + "

            " + "

            Algorithm:

            " - + "Jon M. Kleinberg, Authoritative Sources in a Hyperlinked Environment, in Journal of the ACM 46 (5): 604–632 (1999)
            " - + " "; + + "
            " + + "
            " + + "

            Parameters:

            Ε = " + this.epsilon + + "

            Results:


            " + + imageFile1 + "
            " + imageFile2 + + "

            " + "

            Algorithm:

            " + + + "Jon M. Kleinberg, Authoritative Sources in a Hyperlinked Environment, in Journal of the ACM 46 (5): 604–632 (1999)
            " + + " "; return report; } /** - * * @return */ @Override @@ -367,7 +359,6 @@ public boolean cancel() { } /** - * * @param progressTicket */ @Override @@ -376,18 +367,16 @@ public void setProgressTicket(ProgressTicket progressTicket) { } /** - * - * @param eps + * @return */ - public void setEpsilon(double eps) { - epsilon = eps; + public double getEpsilon() { + return epsilon; } /** - * - * @return + * @param eps */ - public double getEpsilon() { - return epsilon; + public void setEpsilon(double eps) { + epsilon = eps; } } diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/Modularity.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/Modularity.java index 1fd611a73e..aafa851221 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/Modularity.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/Modularity.java @@ -39,17 +39,25 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin; import java.text.DecimalFormat; import java.text.NumberFormat; -import java.util.*; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.attribute.api.Column; -import org.gephi.attribute.api.Table; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Set; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Edge; import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphModel; import org.gephi.graph.api.Node; +import org.gephi.graph.api.NodeIterable; +import org.gephi.graph.api.Table; import org.gephi.statistics.spi.Statistics; import org.gephi.utils.longtask.spi.LongTask; import org.gephi.utils.progress.Progress; @@ -61,7 +69,6 @@ Development and Distribution License("CDDL") (collectively, the import org.jfree.data.xy.XYSeriesCollection; /** - * * @author pjmcswee */ public class Modularity implements Statistics, LongTask { @@ -75,29 +82,38 @@ public class Modularity implements Statistics, LongTask { private boolean isRandomized = false; private boolean useWeight = true; private double resolution = 1.; + private int initialModularityClassIndex = 0; + + public boolean getRandom() { + return isRandomized; + } public void setRandom(boolean isRandomized) { this.isRandomized = isRandomized; } - public boolean getRandom() { - return isRandomized; + public boolean getUseWeight() { + return useWeight; } public void setUseWeight(boolean useWeight) { this.useWeight = useWeight; } - public boolean getUseWeight() { - return useWeight; + public double getResolution() { + return resolution; } public void setResolution(double resolution) { this.resolution = resolution; } - public double getResolution() { - return resolution; + public int getInitialModularityClassIndex(){ + return initialModularityClassIndex; + } + + public void setInitialModularityClassIndex(int initialModularityClassIndex){ + this.initialModularityClassIndex = initialModularityClassIndex; } @Override @@ -111,6 +127,272 @@ public void setProgressTicket(ProgressTicket progressTicket) { this.progress = progressTicket; } + @Override + public void execute(GraphModel graphModel) { + Graph graph = graphModel.getUndirectedGraphVisible(); + execute(graph); + } + + public void execute(Graph graph) { + isCanceled = false; + + Table nodeTable = graph.getModel().getNodeTable(); + ColumnUtils.cleanUpColumns(nodeTable, new String[] {MODULARITY_CLASS}, Integer.class); + + Column modCol = nodeTable.getColumn(MODULARITY_CLASS); + if (modCol == null) { + nodeTable.addColumn(MODULARITY_CLASS, "Modularity Class", Integer.class, 0); + } + + graph.readLock(); + try { + structure = new Modularity.CommunityStructure(graph); + int[] comStructure = new int[graph.getNodeCount()]; + + if (graph.getNodeCount() > 0) {//Fixes issue #713 Modularity Calculation Throws Exception On Empty Graph + HashMap computedModularityMetrics = + computeModularity(graph, structure, comStructure, resolution, isRandomized, useWeight); + modularity = computedModularityMetrics.get("modularity"); + modularityResolution = computedModularityMetrics.get("modularityResolution"); + } else { + modularity = 0; + modularityResolution = 0; + } + + for(int i = 0; i < comStructure.length; i++){ + comStructure[i] = comStructure[i] + initialModularityClassIndex; + } + saveValues(comStructure, graph, structure); + } finally { + graph.readUnlock(); + } + } + + protected HashMap computeModularity(Graph graph, CommunityStructure theStructure, + int[] comStructure, + double currentResolution, boolean randomized, + boolean weighted) { + isCanceled = false; + Progress.start(progress); + Random rand = new Random(); + + double totalWeight = theStructure.graphWeightSum; + double[] nodeDegrees = theStructure.weights.clone(); + + HashMap results = new HashMap<>(); + + if (isCanceled) { + return results; + } + boolean someChange = true; + while (someChange) { + someChange = false; + boolean localChange = true; + while (localChange) { + localChange = false; + int start = 0; + if (randomized) { + start = Math.abs(rand.nextInt()) % theStructure.N; + } + int step = 0; + for (int i = start; step < theStructure.N; i = (i + 1) % theStructure.N) { + step++; + Community bestCommunity = updateBestCommunity(theStructure, i, currentResolution); + if ((theStructure.nodeCommunities[i] != bestCommunity) && (bestCommunity != null)) { + theStructure.moveNodeTo(i, bestCommunity); + localChange = true; + } + if (isCanceled) { + return results; + } + } + someChange = localChange || someChange; + if (isCanceled) { + return results; + } + } + + if (someChange) { + theStructure.zoomOut(); + } + } + + fillComStructure(graph, theStructure, comStructure); + double[] degreeCount = fillDegreeCount(graph, theStructure, comStructure, nodeDegrees, weighted); + + double computedModularity = finalQ(comStructure, degreeCount, graph, theStructure, totalWeight, 1., weighted); + double computedModularityResolution = + finalQ(comStructure, degreeCount, graph, theStructure, totalWeight, currentResolution, weighted); + + results.put("modularity", computedModularity); + results.put("modularityResolution", computedModularityResolution); + + return results; + } + + private Community updateBestCommunity(CommunityStructure theStructure, int node_id, double currentResolution) { + double best = 0.; + Community bestCommunity = null; + Set iter = theStructure.nodeConnectionsWeight[node_id].keySet(); + for (Community com : iter) { + double qValue = q(node_id, com, theStructure, currentResolution); + if (qValue > best) { + best = qValue; + bestCommunity = com; + } + } + return bestCommunity; + } + + private int[] fillComStructure(Graph graph, CommunityStructure theStructure, int[] comStructure) { + int count = 0; + + for (Community com : theStructure.communities) { + for (Integer node : com.nodes) { + Community hidden = theStructure.invMap.get(node); + for (Integer nodeInt : hidden.nodes) { + comStructure[nodeInt] = count; + } + } + count++; + } + return comStructure; + } + + private double[] fillDegreeCount(Graph graph, CommunityStructure theStructure, int[] comStructure, + double[] nodeDegrees, boolean weighted) { + double[] degreeCount = new double[theStructure.communities.size()]; + + for (Node node : graph.getNodes()) { + int index = theStructure.map.get(node); + if (weighted) { + degreeCount[comStructure[index]] += nodeDegrees[index]; + } else { + degreeCount[comStructure[index]] += graph.getDegree(node); + } + + } + return degreeCount; + } + + private double finalQ(int[] struct, double[] degrees, Graph graph, + CommunityStructure theStructure, double totalWeight, double usedResolution, + boolean weighted) { + + double res = 0; + double[] internal = new double[degrees.length]; + for (Node n : graph.getNodes()) { + int n_index = theStructure.map.get(n); + for (Edge edge : graph.getEdges(n)) { + Node neighbor = graph.getOpposite(n, edge); + if (n == neighbor) { + continue; + } + int neigh_index = theStructure.map.get(neighbor); + if (struct[neigh_index] == struct[n_index]) { + if (weighted) { + internal[struct[neigh_index]] += edge.getWeight(graph.getView()); + } else { + internal[struct[neigh_index]]++; + } + } + } + } + for (int i = 0; i < degrees.length; i++) { + internal[i] /= 2.0; + res += usedResolution * (internal[i] / totalWeight) - Math.pow(degrees[i] / (2 * totalWeight), 2);//HERE + } + return res; + } + + private void saveValues(int[] struct, Graph graph, CommunityStructure theStructure) { + Table nodeTable = graph.getModel().getNodeTable(); + + Column modCol = nodeTable.getColumn(MODULARITY_CLASS); + for (Node n : graph.getNodes()) { + int n_index = theStructure.map.get(n); + n.setAttribute(modCol, struct[n_index]); + } + } + + public double getModularity() { + return modularity; + } + + @Override + public String getReport() { + //Distribution series + Map sizeDist = new HashMap<>(); + for (Node n : structure.graph.getNodes()) { + Integer v = (Integer) n.getAttribute(MODULARITY_CLASS); + if (!sizeDist.containsKey(v)) { + sizeDist.put(v, 0); + } + sizeDist.put(v, sizeDist.get(v) + 1); + } + + XYSeries dSeries = ChartUtils.createXYSeries(sizeDist, "Size Distribution"); + + XYSeriesCollection dataset1 = new XYSeriesCollection(); + dataset1.addSeries(dSeries); + + JFreeChart chart = ChartFactory.createXYLineChart( + "Size Distribution", + "Modularity Class", + "Size (number of nodes)", + dataset1, + PlotOrientation.VERTICAL, + true, + false, + false); + chart.removeLegend(); + ChartUtils.decorateChart(chart); + ChartUtils.scaleChart(chart, dSeries, false); + String imageFile = ChartUtils.renderChart(chart, "communities-size-distribution.png"); + + NumberFormat f = new DecimalFormat("#0.000"); + + String report = "

            Modularity Report

            " + + "
            " + + "

            Parameters:

            " + + "Randomize: " + (isRandomized ? "On" : "Off") + "
            " + + "Use edge weights: " + (useWeight ? "On" : "Off") + "
            " + + "Resolution: " + (resolution) + "
            " + + "

            Results:

            " + + "Modularity: " + f.format(modularity) + "
            " + + "Modularity with resolution: " + f.format(modularityResolution) + "
            " + + "Number of Communities: " + structure.communities.size() + + "

            " + imageFile + + "

            " + "

            Algorithm:

            " + + + "Vincent D Blondel, Jean-Loup Guillaume, Renaud Lambiotte, Etienne Lefebvre, Fast unfolding of communities in large networks, in Journal of Statistical Mechanics: Theory and Experiment 2008 (10), P1000
            " + + "

            " + "

            Resolution:

            " + + + "R. Lambiotte, J.-C. Delvenne, M. Barahona Laplacian Dynamics and Multiscale Modular Structure in Networks 2009
            " + + " "; + + return report; + } + + private double q(int node, Community community, CommunityStructure theStructure, double currentResolution) { + Float edgesToFloat = theStructure.nodeConnectionsWeight[node].get(community); + double edgesTo = 0; + if (edgesToFloat != null) { + edgesTo = edgesToFloat.doubleValue(); + } + double weightSum = community.weightSum; + double nodeWeight = theStructure.weights[node]; + double qValue = currentResolution * edgesTo - (nodeWeight * weightSum) / (2.0 * theStructure.graphWeightSum); + if ((theStructure.nodeCommunities[node] == community) && (theStructure.nodeCommunities[node].size() > 1)) { + qValue = currentResolution * edgesTo - + (nodeWeight * (weightSum - nodeWeight)) / (2.0 * theStructure.graphWeightSum); + } + if ((theStructure.nodeCommunities[node] == community) && (theStructure.nodeCommunities[node].size() == 1)) { + qValue = 0.; + } + return qValue; + } + class ModEdge { int source; @@ -133,28 +415,31 @@ class CommunityStructure { Graph graph; double[] weights; double graphWeightSum; - LinkedList[] topology; - LinkedList communities; + List[] topology; + List communities; int N; HashMap invMap; - CommunityStructure(Graph hgraph) { - this.graph = hgraph; - N = hgraph.getNodeCount(); - invMap = new HashMap(); + CommunityStructure(Graph graph) { + this.graph = graph; + N = graph.getNodeCount(); + invMap = new HashMap<>(); nodeConnectionsWeight = new HashMap[N]; nodeConnectionsCount = new HashMap[N]; nodeCommunities = new Community[N]; - map = new HashMap(); - topology = new LinkedList[N]; - communities = new LinkedList(); + map = new HashMap<>(); + topology = new ArrayList[N]; + communities = new ArrayList<>(); int index = 0; weights = new double[N]; - for (Node node : hgraph.getNodes()) { + + NodeIterable nodesIterable = graph.getNodes(); + for (Node node : nodesIterable) { map.put(node, index); nodeCommunities[index] = new Community(this); - nodeConnectionsWeight[index] = new HashMap(); - nodeConnectionsCount[index] = new HashMap(); + + nodeConnectionsWeight[index] = new HashMap<>(); + nodeConnectionsCount[index] = new HashMap<>(); weights[index] = 0; nodeCommunities[index].seed(index); Community hidden = new Community(structure); @@ -163,40 +448,62 @@ class CommunityStructure { communities.add(nodeCommunities[index]); index++; if (isCanceled) { + nodesIterable.doBreak(); return; } } - for (Node node : hgraph.getNodes()) { + int[] edgeTypes = graph.getModel().getEdgeTypes(); + + nodesIterable = graph.getNodes(); + for (Node node : nodesIterable) { int node_index = map.get(node); - topology[node_index] = new LinkedList(); + topology[node_index] = new ArrayList<>(); - for (Node neighbor : hgraph.getNeighbors(node)) { + Set uniqueNeighbors = new HashSet<>(graph.getNeighbors(node).toCollection()); + for (Node neighbor : uniqueNeighbors) { if (node == neighbor) { continue; } int neighbor_index = map.get(neighbor); - float weight = 1; - if (useWeight) { - weight = (float) hgraph.getEdge(node, neighbor).getWeight(); + float weight = 0; + + //Sum all parallel edges weight: + for (int edgeType : edgeTypes) { + for (Edge edge : graph.getEdges(node, neighbor, edgeType)) { + if (useWeight) { + weight += edge.getWeight(graph.getView()); + } else { + weight += 1; + } + } } + //Finally add a single edge with the summed weight of all parallel edges: + //Fixes issue #1419 Getting null pointer error when trying to calculate modularity weights[node_index] += weight; Modularity.ModEdge me = new ModEdge(node_index, neighbor_index, weight); topology[node_index].add(me); Community adjCom = nodeCommunities[neighbor_index]; + nodeConnectionsWeight[node_index].put(adjCom, weight); nodeConnectionsCount[node_index].put(adjCom, 1); - nodeCommunities[node_index].connectionsWeight.put(adjCom, weight); - nodeCommunities[node_index].connectionsCount.put(adjCom, 1); - nodeConnectionsWeight[neighbor_index].put(nodeCommunities[node_index], weight); - nodeConnectionsCount[neighbor_index].put(nodeCommunities[node_index], 1); - nodeCommunities[neighbor_index].connectionsWeight.put(nodeCommunities[node_index], weight); - nodeCommunities[neighbor_index].connectionsCount.put(nodeCommunities[node_index], 1); + + Community nodeCom = nodeCommunities[node_index]; + nodeCom.connectionsWeight.put(adjCom, weight); + nodeCom.connectionsCount.put(adjCom, 1); + + nodeConnectionsWeight[neighbor_index].put(nodeCom, weight); + nodeConnectionsCount[neighbor_index].put(nodeCom, 1); + + adjCom.connectionsWeight.put(nodeCom, weight); + adjCom.connectionsCount.put(nodeCom, 1); + graphWeightSum += weight; } if (isCanceled) { + nodesIterable.doBreak(); return; } } @@ -204,7 +511,7 @@ class CommunityStructure { } private void addNodeTo(int node, Community to) { - to.add(new Integer(node)); + to.add(node); nodeCommunities[node] = to; for (ModEdge e : topology[node]) { @@ -274,8 +581,7 @@ private void addNodeTo(int node, Community to) { } } - private void removeNodeFrom(int node, Community from) { - + private void removeNodeFromItsCommunity(int node) { Community community = nodeCommunities[node]; for (ModEdge e : topology[node]) { int neighbor = e.target; @@ -332,28 +638,28 @@ private void removeNodeFrom(int node, Community from) { } } - from.remove(new Integer(node)); + community.remove(node); } private void moveNodeTo(int node, Community to) { - Community from = nodeCommunities[node]; - removeNodeFrom(node, from); + removeNodeFromItsCommunity(node); addNodeTo(node, to); } private void zoomOut() { int M = communities.size(); - LinkedList[] newTopology = new LinkedList[M]; + ArrayList[] newTopology = new ArrayList[M]; int index = 0; nodeCommunities = new Community[M]; nodeConnectionsWeight = new HashMap[M]; nodeConnectionsCount = new HashMap[M]; - HashMap newInvMap = new HashMap(); + HashMap newInvMap = new HashMap<>(); for (int i = 0; i < communities.size(); i++) {//Community com : mCommunities) { Community com = communities.get(i); - nodeConnectionsWeight[index] = new HashMap(); - nodeConnectionsCount[index] = new HashMap(); - newTopology[index] = new LinkedList(); + nodeConnectionsWeight[index] = new HashMap<>(); + nodeConnectionsCount[index] = new HashMap<>(); + + newTopology[index] = new ArrayList<>(); nodeCommunities[index] = new Community(com); Set iter = com.connectionsWeight.keySet(); double weightSum = 0; @@ -404,27 +710,27 @@ class Community { double weightSum; CommunityStructure structure; - LinkedList nodes; + List nodes; HashMap connectionsWeight; HashMap connectionsCount; - public int size() { - return nodes.size(); - } - public Community(Modularity.Community com) { structure = com.structure; - connectionsWeight = new HashMap(); - connectionsCount = new HashMap(); - nodes = new LinkedList(); + connectionsWeight = new HashMap<>(); + connectionsCount = new HashMap<>(); + nodes = new ArrayList<>(); //mHidden = pCom.mHidden; } public Community(CommunityStructure structure) { this.structure = structure; - connectionsWeight = new HashMap(); - connectionsCount = new HashMap(); - nodes = new LinkedList(); + connectionsWeight = new HashMap<>(); + connectionsCount = new HashMap<>(); + nodes = new ArrayList<>(); + } + + public int size() { + return nodes.size(); } public void seed(int node) { @@ -433,264 +739,18 @@ public void seed(int node) { } public boolean add(int node) { - nodes.addLast(new Integer(node)); + nodes.add(node); weightSum += structure.weights[node]; return true; } public boolean remove(int node) { - boolean result = nodes.remove(new Integer(node)); + boolean result = nodes.remove((Integer) node); weightSum -= structure.weights[node]; - if (nodes.size() == 0) { + if (nodes.isEmpty()) { structure.communities.remove(this); } return result; } } - - @Override - public void execute(GraphModel graphModel, AttributeModel attributeModel) { - Graph hgraph = graphModel.getUndirectedGraphVisible(); - execute(hgraph, attributeModel); - } - - public void execute(Graph hgraph, AttributeModel attributeModel) { - isCanceled = false; - - hgraph.readLock(); - - structure = new Modularity.CommunityStructure(hgraph); - int[] comStructure = new int[hgraph.getNodeCount()]; - - HashMap computedModularityMetrics = computeModularity(hgraph, structure, comStructure, resolution, isRandomized, useWeight); - - modularity = computedModularityMetrics.get("modularity"); - modularityResolution = computedModularityMetrics.get("modularityResolution"); - - saveValues(comStructure, hgraph, attributeModel, structure); - - hgraph.readUnlock(); - } - - protected HashMap computeModularity(Graph hgraph, CommunityStructure theStructure, int[] comStructure, - double currentResolution, boolean randomized, boolean weighted) { - isCanceled = false; - Progress.start(progress); - Random rand = new Random(); - - double totalWeight = theStructure.graphWeightSum; - double[] nodeDegrees = theStructure.weights.clone(); - - HashMap results = new HashMap(); - - if (isCanceled) { - hgraph.readUnlockAll(); - return results; - } - boolean someChange = true; - while (someChange) { - someChange = false; - boolean localChange = true; - while (localChange) { - localChange = false; - int start = 0; - if (randomized) { - start = Math.abs(rand.nextInt()) % theStructure.N; - } - int step = 0; - for (int i = start; step < theStructure.N; i = (i + 1) % theStructure.N) { - step++; - Community bestCommunity = updateBestCommunity(theStructure, i, currentResolution); - if ((theStructure.nodeCommunities[i] != bestCommunity) && (bestCommunity != null)) { - theStructure.moveNodeTo(i, bestCommunity); - localChange = true; - } - if (isCanceled) { - hgraph.readUnlockAll(); - return results; - } - } - someChange = localChange || someChange; - if (isCanceled) { - hgraph.readUnlockAll(); - return results; - } - } - - if (someChange) { - theStructure.zoomOut(); - } - } - - fillComStructure(hgraph, theStructure, comStructure); - double[] degreeCount = fillDegreeCount(hgraph, theStructure, comStructure, nodeDegrees, weighted); - - double computedModularity = finalQ(comStructure, degreeCount, hgraph, theStructure, totalWeight, 1., weighted); - double computedModularityResolution = finalQ(comStructure, degreeCount, hgraph, theStructure, totalWeight, currentResolution, weighted); - - results.put("modularity", computedModularity); - results.put("modularityResolution", computedModularityResolution); - - return results; - } - - Community updateBestCommunity(CommunityStructure theStructure, int i, double currentResolution) { - double best = 0.; - Community bestCommunity = null; - Set iter = theStructure.nodeConnectionsWeight[i].keySet(); - for (Community com : iter) { - double qValue = q(i, com, theStructure, currentResolution); - if (qValue > best) { - best = qValue; - bestCommunity = com; - } - } - return bestCommunity; - } - - int[] fillComStructure(Graph hgraph, CommunityStructure theStructure, int[] comStructure) { -// int[] comStructure = new int[hgraph.getNodeCount()]; - int count = 0; - - for (Community com : theStructure.communities) { - for (Integer node : com.nodes) { - Community hidden = theStructure.invMap.get(node); - for (Integer nodeInt : hidden.nodes) { - comStructure[nodeInt] = count; - } - } - count++; - } - return comStructure; - } - - double[] fillDegreeCount(Graph hgraph, CommunityStructure theStructure, int[] comStructure, double[] nodeDegrees, boolean weighted) { - double[] degreeCount = new double[theStructure.communities.size()]; - - for (Node node : hgraph.getNodes()) { - int index = theStructure.map.get(node); - if (weighted) { - degreeCount[comStructure[index]] += nodeDegrees[index]; - } else { - degreeCount[comStructure[index]] += hgraph.getDegree(node); - } - - } - return degreeCount; - } - - private double finalQ(int[] struct, double[] degrees, Graph hgraph, - CommunityStructure theStructure, double totalWeight, double usedResolution, boolean weighted) { - - double res = 0; - double[] internal = new double[degrees.length]; - for (Node n : hgraph.getNodes()) { - int n_index = theStructure.map.get(n); - for (Node neighbor : hgraph.getNeighbors(n)) { - if (n == neighbor) { - continue; - } - int neigh_index = theStructure.map.get(neighbor); - if (struct[neigh_index] == struct[n_index]) { - if (weighted) { - internal[struct[neigh_index]] += hgraph.getEdge(n, neighbor).getWeight(); - } else { - internal[struct[neigh_index]]++; - } - } - } - } - for (int i = 0; i < degrees.length; i++) { - internal[i] /= 2.0; - res += usedResolution * (internal[i] / totalWeight) - Math.pow(degrees[i] / (2 * totalWeight), 2);//HERE - } - return res; - } - - private void saveValues(int[] struct, Graph hgraph, AttributeModel attributeModel, CommunityStructure theStructure) { - Table nodeTable = attributeModel.getNodeTable(); - Column modCol = nodeTable.getColumn(MODULARITY_CLASS); - if (modCol == null) { - modCol = nodeTable.addColumn(MODULARITY_CLASS, "Modularity Class", Integer.class, new Integer(0)); - } - for (Node n : hgraph.getNodes()) { - int n_index = theStructure.map.get(n);; - n.setAttribute(modCol, struct[n_index]); - } - } - - public double getModularity() { - return modularity; - } - - @Override - public String getReport() { - //Distribution series - Map sizeDist = new HashMap(); - for (Node n : structure.graph.getNodes()) { - Integer v = (Integer) n.getAttribute(MODULARITY_CLASS); - if (!sizeDist.containsKey(v)) { - sizeDist.put(v, 0); - } - sizeDist.put(v, sizeDist.get(v) + 1); - } - - XYSeries dSeries = ChartUtils.createXYSeries(sizeDist, "Size Distribution"); - - XYSeriesCollection dataset1 = new XYSeriesCollection(); - dataset1.addSeries(dSeries); - - JFreeChart chart = ChartFactory.createXYLineChart( - "Size Distribution", - "Modularity Class", - "Size (number of nodes)", - dataset1, - PlotOrientation.VERTICAL, - true, - false, - false); - chart.removeLegend(); - ChartUtils.decorateChart(chart); - ChartUtils.scaleChart(chart, dSeries, false); - String imageFile = ChartUtils.renderChart(chart, "communities-size-distribution.png"); - - NumberFormat f = new DecimalFormat("#0.000"); - - String report = "

            Modularity Report

            " - + "
            " - + "

            Parameters:

            " - + "Randomize: " + (isRandomized ? "On" : "Off") + "
            " - + "Use edge weights: " + (useWeight ? "On" : "Off") + "
            " - + "Resolution: " + (resolution) + "
            " - + "

            Results:

            " - + "Modularity: " + f.format(modularity) + "
            " - + "Modularity with resolution: " + f.format(modularityResolution) + "
            " - + "Number of Communities: " + structure.communities.size() - + "

            " + imageFile - + "

            " + "

            Algorithm:

            " - + "Vincent D Blondel, Jean-Loup Guillaume, Renaud Lambiotte, Etienne Lefebvre, Fast unfolding of communities in large networks, in Journal of Statistical Mechanics: Theory and Experiment 2008 (10), P1000
            " - + "

            " + "

            Resolution:

            " - + "R. Lambiotte, J.-C. Delvenne, M. Barahona Laplacian Dynamics and Multiscale Modular Structure in Networks 2009
            " - + " "; - - return report; - } - - private double q(int node, Community community, CommunityStructure theStructure, double currentResolution) { - Float edgesToFloat = theStructure.nodeConnectionsWeight[node].get(community); - double edgesTo = 0; - if (edgesToFloat != null) { - edgesTo = edgesToFloat.doubleValue(); - } - double weightSum = community.weightSum; - double nodeWeight = theStructure.weights[node]; - double qValue = currentResolution * edgesTo - (nodeWeight * weightSum) / (2.0 * theStructure.graphWeightSum); - if ((theStructure.nodeCommunities[node] == community) && (theStructure.nodeCommunities[node].size() > 1)) { - qValue = currentResolution * edgesTo - (nodeWeight * (weightSum - nodeWeight)) / (2.0 * theStructure.graphWeightSum); - } - if ((theStructure.nodeCommunities[node] == community) && (theStructure.nodeCommunities[node].size() == 1)) { - qValue = 0.; - } - return qValue; - } } diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/PageRank.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/PageRank.java index 2efad13b03..112fb774a9 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/PageRank.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/PageRank.java @@ -39,13 +39,16 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin; +import it.unimi.dsi.fastutil.objects.Object2DoubleOpenHashMap; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; import java.util.HashMap; import java.util.Map; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.attribute.api.Column; -import org.gephi.attribute.api.Table; +import java.util.Set; +import org.gephi.graph.api.Column; import org.gephi.graph.api.DirectedGraph; import org.gephi.graph.api.Edge; import org.gephi.graph.api.EdgeIterable; @@ -53,6 +56,8 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.graph.api.GraphController; import org.gephi.graph.api.GraphModel; import org.gephi.graph.api.Node; +import org.gephi.graph.api.NodeIterable; +import org.gephi.graph.api.Table; import org.gephi.graph.api.UndirectedGraph; import org.gephi.statistics.spi.Statistics; import org.gephi.utils.longtask.spi.LongTask; @@ -66,9 +71,7 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.Lookup; /** - * Ref: Sergey Brin, Lawrence Page, The Anatomy of a Large-Scale Hypertextual - * Web Search Engine, in Proceedings of the seventh International Conference on - * the World Wide Web (WWW1998):107-117 + * Ref: Sergey Brin, Lawrence Page, The Anatomy of a Large-Scale Hypertextual Web Search Engine, in Proceedings of the seventh International Conference on the World Wide Web (WWW1998):107-117 * * @author pjmcswee */ @@ -108,47 +111,49 @@ public PageRank() { } } - public void setDirected(boolean isDirected) { - this.isDirected = isDirected; - } - /** - * * @return */ public boolean getDirected() { return isDirected; } + public void setDirected(boolean isDirected) { + this.isDirected = isDirected; + } + @Override - public void execute(GraphModel graphModel, AttributeModel attributeModel) { + public void execute(GraphModel graphModel) { Graph graph; if (isDirected) { graph = graphModel.getDirectedGraphVisible(); } else { graph = graphModel.getUndirectedGraphVisible(); } - execute(graph, attributeModel); + execute(graph); } - public void execute(Graph hgraph, AttributeModel attributeModel) { + public void execute(Graph graph) { isCanceled = false; - Column column = initializeAttributeColunms(attributeModel); + Column column = initializeAttributeColunms(graph.getModel()); - hgraph.readLock(); + graph.readLock(); + try { + HashMap indicies = createIndiciesMap(graph); - HashMap indicies = createIndiciesMap(hgraph); + pageranks = calculatePagerank(graph, indicies, isDirected, useEdgeWeight, epsilon, probability); - pageranks = calculatePagerank(hgraph, indicies, isDirected, useEdgeWeight, epsilon, probability); - - saveCalculatedValues(hgraph, column, indicies, pageranks); - - hgraph.readUnlockAll(); + saveCalculatedValues(graph, column, indicies, pageranks); + } finally { + graph.readUnlockAll(); + } } - private Column initializeAttributeColunms(AttributeModel attributeModel) { - Table nodeTable = attributeModel.getNodeTable(); + private Column initializeAttributeColunms(GraphModel graphModel) { + Table nodeTable = graphModel.getNodeTable(); + ColumnUtils.cleanUpColumns(nodeTable, new String[] {PAGERANK}, Double.class); + Column pagerankCol = nodeTable.getColumn(PAGERANK); if (pagerankCol == null) { @@ -158,116 +163,211 @@ private Column initializeAttributeColunms(AttributeModel attributeModel) { return pagerankCol; } - private void saveCalculatedValues(Graph hgraph, Column attributeColumn, HashMap indicies, - double[] nodePagrank) { - for (Node s : hgraph.getNodes()) { + private void saveCalculatedValues(Graph graph, Column attributeColumn, HashMap indicies, + double[] nodePagrank) { + for (Node s : graph.getNodes()) { int s_index = indicies.get(s); s.setAttribute(attributeColumn, nodePagrank[s_index]); } } - private void setInitialValues(Graph hgraph, double[] pagerankValues, double[] weights, boolean directed, boolean useWeights) { - int N = hgraph.getNodeCount(); - int index = 0; - for (Node s : hgraph.getNodes()) { - pagerankValues[index] = 1.0f / N; + private void setInitialValues(Graph graph, Map indicies, double[] pagerankValues, double[] weights, + boolean directed, boolean useWeights) { + final int N = graph.getNodeCount(); + for (Node s : graph.getNodes()) { + final int index = indicies.get(s); + pagerankValues[index] = 1.0 / N; if (useWeights) { double sum = 0; EdgeIterable eIter; if (directed) { - eIter = ((DirectedGraph) hgraph).getOutEdges(s); + eIter = ((DirectedGraph) graph).getOutEdges(s); } else { - eIter = ((UndirectedGraph) hgraph).getEdges(s); + eIter = graph.getEdges(s); } for (Edge edge : eIter) { - sum += edge.getWeight(); + if (!edge.isSelfLoop()) { + sum += edge.getWeight(); + } } weights[index] = sum; } - index++; } } - private double calculateR(Graph hgraph, double[] pagerankValues, HashMap indicies, boolean directed, double prob) { - int N = hgraph.getNodeCount(); - double r = 0; - for (Node s : hgraph.getNodes()) { + private double calculateR(Graph graph, double[] pagerankValues, HashMap indicies, boolean directed, + double prob) { + int N = graph.getNodeCount(); + double r = (1.0 - prob) / N;//Initialize to damping factor + + //Calculate dangling nodes (nodes without out edges) contribution to all other nodes. + //Necessary for all nodes page rank values sum to be 1 + NodeIterable nodesIterable = graph.getNodes(); + double danglingNodesRankContrib = 0; + for (Node s : graph.getNodes()) { int s_index = indicies.get(s); - boolean out; + int outDegree; if (directed) { - out = ((DirectedGraph) hgraph).getOutDegree(s) > 0; + outDegree = ((DirectedGraph) graph).getOutDegree(s); } else { - out = hgraph.getDegree(s) > 0; + outDegree = graph.getDegree(s); } - - if (out) { - r += (1.0 - prob) * (pagerankValues[s_index] / N); - } else { - r += (pagerankValues[s_index] / N); + if (outDegree == 0) { + danglingNodesRankContrib += pagerankValues[s_index]; } + if (isCanceled) { - hgraph.readUnlockAll(); - return r; + nodesIterable.doBreak(); + break; } } + danglingNodesRankContrib *= prob / N; + r += danglingNodesRankContrib; + return r; } - private double updateValueForNode(Graph hgraph, Node s, double[] pagerankValues, double[] weights, - HashMap indicies, boolean directed, boolean useWeights, double r, double prob) { - double res = r; - EdgeIterable eIter; - if (directed) { - eIter = ((DirectedGraph) hgraph).getInEdges(s); - } else { - eIter = hgraph.getEdges(s); - } + private Map> calculateInNeighborsPerNode(Graph graph, boolean directed) { + Map> inNeighborsPerNode = new Object2ObjectOpenHashMap<>(); - for (Edge edge : eIter) { - Node neighbor = hgraph.getOpposite(s, edge); - int neigh_index = indicies.get(neighbor); - int normalize; + NodeIterable nodesIterable = graph.getNodes(); + for (Node node : nodesIterable) { + Set nodeInNeighbors = new ObjectOpenHashSet<>(); + + EdgeIterable edgesIterable; if (directed) { - normalize = ((DirectedGraph) hgraph).getOutDegree(neighbor); + edgesIterable = ((DirectedGraph) graph).getInEdges(node); } else { - normalize = hgraph.getDegree(neighbor); + edgesIterable = graph.getEdges(node); + } + + for (Edge edge : edgesIterable) { + if (!edge.isSelfLoop()) { + Node neighbor = graph.getOpposite(node, edge); + nodeInNeighbors.add(neighbor); + } + + if (isCanceled) { + edgesIterable.doBreak(); + break; + } + } + + inNeighborsPerNode.put(node, nodeInNeighbors); + + if (isCanceled) { + nodesIterable.doBreak(); + break; } + } + + return inNeighborsPerNode; + } + + private Map> calculateInWeightPerNodeAndNeighbor(Graph graph, boolean directed, + boolean useWeights) { + Object2ObjectOpenHashMap> inWeightPerNodeAndNeighbor = + new Object2ObjectOpenHashMap<>(); + + if (useWeights) { + NodeIterable nodesIterable = graph.getNodes(); + for (Node node : nodesIterable) { + Object2DoubleOpenHashMap inWeightPerNeighbor = new Object2DoubleOpenHashMap<>(); + inWeightPerNeighbor.defaultReturnValue(0); + + EdgeIterable edgesIterable; + if (directed) { + edgesIterable = ((DirectedGraph) graph).getInEdges(node); + } else { + edgesIterable = graph.getEdges(node); + } + + for (Edge edge : edgesIterable) { + if (!edge.isSelfLoop()) { + Node neighbor = graph.getOpposite(node, edge); + inWeightPerNeighbor.addTo(neighbor, edge.getWeight()); + } + + if (isCanceled) { + edgesIterable.doBreak(); + break; + } + } + + if (isCanceled) { + nodesIterable.doBreak(); + break; + } + + inWeightPerNodeAndNeighbor.put(node, inWeightPerNeighbor); + } + } + + return inWeightPerNodeAndNeighbor; + } + + private double updateValueForNode(Graph graph, Node node, double[] pagerankValues, double[] weights, + HashMap indicies, boolean directed, boolean useWeights, double r, + double prob, + Map> inNeighborsPerNode, + final Object2DoubleOpenHashMap inWeightPerNeighbor) { + double res = r; + + double sumNeighbors = 0; + for (Node neighbor : inNeighborsPerNode.get(node)) { + int neigh_index = indicies.get(neighbor); + if (useWeights) { - double weight = edge.getWeight() / weights[neigh_index]; - res += prob * pagerankValues[neigh_index] * weight; + double weight = inWeightPerNeighbor.getDouble(neighbor) / weights[neigh_index]; + sumNeighbors += pagerankValues[neigh_index] * weight; } else { - res += prob * (pagerankValues[neigh_index] / normalize); + int outDegree; + if (directed) { + outDegree = ((DirectedGraph) graph).getOutDegree(neighbor); + } else { + outDegree = graph.getDegree(neighbor); + } + sumNeighbors += (pagerankValues[neigh_index] / outDegree); } } + + res += prob * sumNeighbors; + return res; } - double[] calculatePagerank(Graph hgraph, HashMap indicies, - boolean directed, boolean useWeights, double eps, double prob) { - int N = hgraph.getNodeCount(); + double[] calculatePagerank(Graph graph, HashMap indicies, + boolean directed, boolean useWeights, double eps, double prob) { + int N = graph.getNodeCount(); double[] pagerankValues = new double[N]; double[] temp = new double[N]; Progress.start(progress); - double[] weights = new double[N]; + final double[] weights = useWeights ? new double[N] : null; + final Map> inNeighborsPerNode = calculateInNeighborsPerNode(graph, directed); + final Map> inWeightPerNodeAndNeighbor = + calculateInWeightPerNodeAndNeighbor(graph, directed, useWeights); - setInitialValues(hgraph, pagerankValues, weights, directed, useWeights); + setInitialValues(graph, indicies, pagerankValues, weights, directed, useWeights); while (true) { - double r = calculateR(hgraph, pagerankValues, indicies, directed, prob); - boolean done = true; - for (Node s : hgraph.getNodes()) { + + double r = calculateR(graph, pagerankValues, indicies, directed, prob); + NodeIterable nodesIterable = graph.getNodes(); + for (Node s : nodesIterable) { int s_index = indicies.get(s); - temp[s_index] = updateValueForNode(hgraph, s, pagerankValues, weights, indicies, directed, useWeights, r, prob); + temp[s_index] = + updateValueForNode(graph, s, pagerankValues, weights, indicies, directed, useWeights, r, prob, + inNeighborsPerNode, inWeightPerNodeAndNeighbor.get(s)); if ((temp[s_index] - pagerankValues[s_index]) / pagerankValues[s_index] >= eps) { done = false; } if (isCanceled) { - hgraph.readUnlockAll(); + nodesIterable.doBreak(); return pagerankValues; } @@ -282,10 +382,10 @@ private double updateValueForNode(Graph hgraph, Node s, double[] pagerankValues, return pagerankValues; } - public HashMap createIndiciesMap(Graph hgraph) { - HashMap newIndicies = new HashMap(); + public HashMap createIndiciesMap(Graph graph) { + HashMap newIndicies = new HashMap<>(); int index = 0; - for (Node s : hgraph.getNodes()) { + for (Node s : graph.getNodes()) { newIndicies.put(s, index); index++; } @@ -293,13 +393,12 @@ public HashMap createIndiciesMap(Graph hgraph) { } /** - * * @return */ @Override public String getReport() { //distribution of values - Map dist = new HashMap(); + Map dist = new HashMap<>(); for (int i = 0; i < pageranks.length; i++) { Double d = pageranks[i]; if (dist.containsKey(d)) { @@ -317,36 +416,36 @@ public String getReport() { dataset.addSeries(dSeries); JFreeChart chart = ChartFactory.createXYLineChart( - "PageRank Distribution", - "Score", - "Count", - dataset, - PlotOrientation.VERTICAL, - true, - false, - false); + "PageRank Distribution", + "Score", + "Count", + dataset, + PlotOrientation.VERTICAL, + true, + false, + false); chart.removeLegend(); ChartUtils.decorateChart(chart); ChartUtils.scaleChart(chart, dSeries, true); String imageFile = ChartUtils.renderChart(chart, "pageranks.png"); String report = "

            PageRank Report

            " - + "

            " - + "

            Parameters:

            " - + "Epsilon = " + epsilon + "
            " - + "Probability = " + probability - + "

            Results:

            " - + imageFile - + "

            " + "

            Algorithm:

            " - + "Sergey Brin, Lawrence Page, The Anatomy of a Large-Scale Hypertextual Web Search Engine, in Proceedings of the seventh International Conference on the World Wide Web (WWW1998):107-117
            " - + " "; + + "

            " + + "

            Parameters:

            " + + "Epsilon = " + epsilon + "
            " + + "Probability = " + probability + + "

            Results:

            " + + imageFile + + "

            " + "

            Algorithm:

            " + + + "Page, Lawrence and Brin, Sergey and Motwani, Rajeev and Winograd, Terry (1999) The PageRank Citation Ranking: Bringing Order to the Web. Technical Report. Stanford InfoLab.
            " + + " "; return report; } /** - * * @return */ @Override @@ -356,7 +455,6 @@ public boolean cancel() { } /** - * * @param progressTicket */ @Override @@ -365,35 +463,31 @@ public void setProgressTicket(ProgressTicket progressTicket) { } /** - * - * @param prob + * @return */ - public void setProbability(double prob) { - probability = prob; + public double getProbability() { + return probability; } /** - * - * @param eps + * @param prob */ - public void setEpsilon(double eps) { - epsilon = eps; + public void setProbability(double prob) { + probability = prob; } /** - * * @return */ - public double getProbability() { - return probability; + public double getEpsilon() { + return epsilon; } /** - * - * @return + * @param eps */ - public double getEpsilon() { - return epsilon; + public void setEpsilon(double eps) { + epsilon = eps; } public boolean isUseEdgeWeight() { diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/StatisticalInferenceClustering.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/StatisticalInferenceClustering.java new file mode 100644 index 0000000000..0c5c8d7e14 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/StatisticalInferenceClustering.java @@ -0,0 +1,975 @@ +/* + Copyright 2008-2011 Gephi + Authors : Mathieu Jacomy, Tiago Peixoto + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.statistics.plugin; + +import java.text.DecimalFormat; +import java.text.NumberFormat; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Random; +import java.util.Set; +import org.apache.commons.math3.special.Gamma; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.NodeIterable; +import org.gephi.graph.api.Table; +import org.gephi.statistics.spi.Statistics; +import org.gephi.utils.longtask.spi.LongTask; +import org.gephi.utils.progress.Progress; +import org.gephi.utils.progress.ProgressTicket; +import org.jfree.chart.ChartFactory; +import org.jfree.chart.JFreeChart; +import org.jfree.chart.plot.PlotOrientation; +import org.jfree.data.xy.XYSeries; +import org.jfree.data.xy.XYSeriesCollection; + +/** + * @author Mathieu Jacomy & Tiago Peixoto + */ + +public class StatisticalInferenceClustering implements Statistics, LongTask { + + public static final String STAT_INF_CLASS = "stat_inf_class"; + private final boolean useWeight = false; + private boolean isCanceled; + private StatisticalInferenceClustering.CommunityStructure structure; + private ProgressTicket progress; + private double descriptionLength; + + private static double lBinom(double n, double m) { + return Gamma.logGamma(n + 1) - Gamma.logGamma(n - m + 1) - Gamma.logGamma(m + 1); + } + + @Override + public boolean cancel() { + this.isCanceled = true; + return true; + } + + @Override + public void setProgressTicket(ProgressTicket progressTicket) { + this.progress = progressTicket; + } + + @Override + public void execute(GraphModel graphModel) { + Graph graph = graphModel.getUndirectedGraphVisible(); + execute(graph); + } + + public void execute(Graph graph) { + isCanceled = false; + + Table nodeTable = graph.getModel().getNodeTable(); + ColumnUtils.cleanUpColumns(nodeTable, new String[] {STAT_INF_CLASS}, Integer.class); + + Column modCol = nodeTable.getColumn(STAT_INF_CLASS); + if (modCol == null) { + nodeTable.addColumn(STAT_INF_CLASS, "Inferred Class", Integer.class, 0); + } + + graph.readLock(); + try { + structure = new StatisticalInferenceClustering.CommunityStructure(graph); + int[] comStructure = new int[graph.getNodeCount()]; + + if (graph.getNodeCount() > 0) {//Fixes issue #713 Modularity Calculation Throws Exception On Empty Graph + HashMap computedStatInfMetrics = + computePartition(graph, structure, comStructure, useWeight); + descriptionLength = computedStatInfMetrics.getOrDefault("descriptionLength", 0.0); + } else { + descriptionLength = 0; + } + + saveValues(comStructure, graph, structure); + } finally { + graph.readUnlock(); + } + } + + protected HashMap computePartition(Graph graph, + StatisticalInferenceClustering.CommunityStructure theStructure, + int[] comStructure, + boolean weighted) { + isCanceled = false; + Progress.start(progress); + Random rand = new Random(); + + HashMap results = new HashMap<>(); + + if (isCanceled) { + return results; + } + boolean someChange = true; + boolean initRound = true; + while (someChange) { + //System.out.println("Number of partitions: "+theStructure.communities.size()); + someChange = false; + boolean localChange = true; + while (localChange) { + localChange = false; + int start = 0; + // Randomize + start = Math.abs(rand.nextInt()) % theStructure.N; + + int step = 0; + for (int i = start; step < theStructure.N; i = (i + 1) % theStructure.N) { + step++; + StatisticalInferenceClustering.Community bestCommunity = + updateBestCommunity(theStructure, i, initRound); + if ((theStructure.nodeCommunities[i] != bestCommunity) && (bestCommunity != null)) { + //double S_before = computeDescriptionLength(graph, theStructure); + //System.out.println("Move node "+i+" to com "+bestCommunity.id+" : S_before="+S_before); + theStructure.moveNodeTo(i, bestCommunity); + //double S_after = computeDescriptionLength(graph, theStructure); + //System.out.println("Move node "+i+" to com "+bestCommunity.id+" : S_after="+S_after+ " (Diff = "+(S_after - S_before)+")"); + localChange = true; + } + if (isCanceled) { + return results; + } + } + someChange = localChange || someChange; + initRound = false; + if (isCanceled) { + return results; + } + } + + if (someChange) { + theStructure.zoomOut(); + } + } + + fillComStructure(graph, theStructure, comStructure); + double computedDescriptionLength = computeDescriptionLength(graph, theStructure); + + results.put("descriptionLength", computedDescriptionLength); + + return results; + } + + public double delta(int node, + StatisticalInferenceClustering.Community community, + StatisticalInferenceClustering.CommunityStructure theStructure, + Double e_in, + Double e_out, + Double E, + Double B, + Double N + ) { + //System.out.println("*** Compute delta for node "+node+" with respect to community "+community.id+" ***"); + + // Node degree + double k = theStructure.weights[node]; + // Node weight: how many real nodes (not meta-nodes) the group represents + double nodeWeight = theStructure.graphNodeCount[node]; + + // Number of edges of target community (with itself or another one) + double e_r_target = community.weightSum; + // Number of edges within target community + Double e_rr_target = community.internalWeightSum; + // Number of real graph nodes of target community + int n_r_target = community.graphNodeCount; + + // Number of edges of current (where the node belongs) community (with itself or another one) + double e_r_current = theStructure.nodeCommunities[node].weightSum; + // Number of edges within current community (where the node belongs) + Double e_rr_current = theStructure.nodeCommunities[node].internalWeightSum; + // Number of real graph nodes of current community + int n_r_current = theStructure.nodeCommunities[node].graphNodeCount; + + // Description length: before + double S_b = 0.; + S_b -= Gamma.logGamma(e_out + 1); + if (e_out > 0) { + S_b += e_out * lBinom(B, 2); + } + S_b += Gamma.logGamma(e_r_current + 1); + S_b += Gamma.logGamma(e_r_target + 1); + S_b -= (e_rr_current) * Math.log(2) + Gamma.logGamma(e_rr_current + 1); + S_b -= (e_rr_target) * Math.log(2) + Gamma.logGamma(e_rr_target + 1); + S_b -= Gamma.logGamma(n_r_current + 1); + S_b -= Gamma.logGamma(n_r_target + 1); + S_b += lBinom(n_r_current + e_r_current - 1, e_r_current); + S_b += lBinom(n_r_target + e_r_target - 1, e_r_target); + S_b += lBinom(B + e_in - 1, e_in); + if (B > 1) { + S_b += Math.log(E + 1); + } + S_b += lBinom(N - 1, B - 1); + + // Count the gains and losses + // -> loop over the neighbors + double delta_e_out = 0.; + double delta_e_in = 0.; + double delta_e_r_current = -k; + double delta_e_r_target = +k; + double delta_e_rr_current = 0.; + double delta_e_rr_target = 0.; + for (ComputationEdge e : theStructure.topology[node]) { + int nei = e.target; + Float w = e.weight; + if (nei == node) { + // Node self-loops + delta_e_rr_current -= w; + delta_e_rr_target += w; + } else { + // Losses (as if the node disappeared) + if (theStructure.nodeCommunities[node] == theStructure.nodeCommunities[nei]) { + // The neighbor is in current community, so + // the node will leave the neighbor's community + delta_e_rr_current -= w; + delta_e_in -= w; + } else { + // The neighbor is not in current community, so + // the node will not leave the neighbor's community + delta_e_out -= w; + } + // Gains (as if the node reappeared) + if (community == theStructure.nodeCommunities[nei]) { + // The neighbor is in target community, so + // the node will arrive in the neighbor's community + delta_e_rr_target += w; // add weight between node and community -> OK + delta_e_in += w; + } else { + // The neighbor is not in target community, so + // the node will not arrive in the neighbor's community + delta_e_out += w; + } + } + } + Double delta_B = 0.; + if (theStructure.nodeCommunities[node].weightSum == theStructure.weights[node]) { + // The node is the only one in the community + delta_B = -1.; + } + // Note: if it were possible to add the node to an empty group, we would have to check that + // the target group is empty or not, and if so, add one to delta_B. + + // Description length: after + double S_a = 0.; + S_a -= Gamma.logGamma(e_out + delta_e_out + 1); + if (e_out + delta_e_out > 0) { + S_a += (e_out + delta_e_out) * lBinom(B + delta_B, 2); + } + S_a += Gamma.logGamma(e_r_target + delta_e_r_target + 1); + S_a -= (e_rr_target + delta_e_rr_target) * Math.log(2) + Gamma.logGamma(e_rr_target + delta_e_rr_target + 1); + S_a -= Gamma.logGamma(n_r_target + nodeWeight + 1); + S_a += lBinom(n_r_target + nodeWeight + e_r_target + delta_e_r_target - 1, e_r_target + delta_e_r_target); + if (delta_B == 0) { + // These calculations only apply if current category + // would still exist after moving the node + // (i.e. if it was not the last one) + S_a += Gamma.logGamma(e_r_current + delta_e_r_current + 1); + S_a -= (e_rr_current + delta_e_rr_current) * Math.log(2) + + Gamma.logGamma(e_rr_current + delta_e_rr_current + 1); + S_a -= Gamma.logGamma(n_r_current - nodeWeight + 1); + S_a += + lBinom(n_r_current - nodeWeight + e_r_current + delta_e_r_current - 1, e_r_current + delta_e_r_current); + } + + S_a += lBinom(B + delta_B + e_in + delta_e_in - 1, e_in + delta_e_in); + if (B + delta_B > 1) { + S_a += Math.log(E + 1); + } + S_a += lBinom(N - 1, B + delta_B - 1); + + return S_a - S_b; + } + + private StatisticalInferenceClustering.Community updateBestCommunity( + StatisticalInferenceClustering.CommunityStructure theStructure, int node_id, boolean initialization) { + // Total number of edges (graph size) + Double E = theStructure.graphWeightSum; + // Total number of edges from one community to the same one + Double e_in = theStructure.communities.stream().mapToDouble(c -> c.internalWeightSum).sum(); + // Total number of edges from one community to another + Double e_out = E - e_in; + // Total number of communities + Double B = (double) theStructure.communities.size(); + // Total number of nodes (not metanodes!!!) + Double N = (double) theStructure.graph.getNodeCount(); + + //System.out.println("Test best community for node "+node_id+" (currently com "+theStructure.nodeCommunities[node_id].id+") Initialization: "+initialization); + + double best = Double.MAX_VALUE; + StatisticalInferenceClustering.Community bestCommunity = null; + Set iter = theStructure.nodeConnectionsWeight[node_id].keySet(); + for (StatisticalInferenceClustering.Community com : iter) { + if (com != theStructure.nodeCommunities[node_id]) { + double deltaValue = delta(node_id, com, theStructure, e_in, e_out, E, B, N); + if (Double.isNaN(deltaValue)) { + // TODO: change this to an exception + System.out.println( + "WARNING - ALGO ERROR - Statistical inference - DELTA is NaN (this is not supposed to happen)"); + } + //System.out.println("Node "+node_id+" => com "+com.id+" DELTA="+deltaValue); + if ((deltaValue < 0 || (initialization && Math.exp(-deltaValue) < Math.random())) && + deltaValue < best) { + best = deltaValue; + bestCommunity = com; + } + } + } + + if (bestCommunity == null) { + //System.out.println("(NO CHANGE) com "+theStructure.nodeCommunities[node_id].id); + bestCommunity = theStructure.nodeCommunities[node_id]; + } else { + //System.out.println("Best community is "+bestCommunity.id); + } + return bestCommunity; + } + + double computeDescriptionLength(Graph graph, StatisticalInferenceClustering.CommunityStructure theStructure) { + // Total number of edges (graph size) + double E = theStructure.graphWeightSum; + // Total number of edges from one community to the same one + double e_in = theStructure.communities.stream().mapToDouble(c -> c.internalWeightSum).sum(); + // Total number of edges from one community to another + double e_out = E - e_in; + // Total number of communities + Double B = (double) theStructure.communities.size(); + // Total number of nodes (not metanodes!!!) + Double N = (double) theStructure.graph.getNodeCount(); + + // Description length + double S = 0.; + + S -= Gamma.logGamma(e_out + 1); + if (e_out > 0) { + S += e_out * lBinom(B, 2); + } + for (Community community : theStructure.communities) { + // Number of edges of community (with itself or another one) + double e_r = community.weightSum; + // Number of edges within community + double e_rr = community.internalWeightSum; + // Number of nodes in the community + int n_r = community.graphNodeCount; + + S += Gamma.logGamma(e_r + 1); + S -= (e_rr) * Math.log(2) + Gamma.logGamma(e_rr + 1); + S -= Gamma.logGamma(n_r + 1); + S += lBinom(n_r + e_r - 1, e_r); + } + + S += lBinom(B + e_in - 1, e_in); + + if (B > 1) { + S += Math.log(E + 1); + } + + S += lBinom(N - 1, B - 1); + S += Gamma.logGamma(N + 1); + S += Math.log(N); + + for (Node n : graph.getNodes()) { + // degree + double k = graph.getDegree(n); + S -= Gamma.logGamma(k + 1); + } + + return S; + } + + private int[] fillComStructure(Graph graph, StatisticalInferenceClustering.CommunityStructure theStructure, + int[] comStructure) { + int count = 0; + + for (StatisticalInferenceClustering.Community com : theStructure.communities) { + for (Integer node : com.nodes) { + StatisticalInferenceClustering.Community hidden = theStructure.invMap.get(node); + for (Integer nodeInt : hidden.nodes) { + comStructure[nodeInt] = count; + } + } + count++; + } + return comStructure; + } + + private void saveValues(int[] struct, Graph graph, StatisticalInferenceClustering.CommunityStructure theStructure) { + Table nodeTable = graph.getModel().getNodeTable(); + + Column modCol = nodeTable.getColumn(STAT_INF_CLASS); + for (Node n : graph.getNodes()) { + int n_index = theStructure.map.get(n); + n.setAttribute(modCol, struct[n_index]); + } + } + + @Override + public String getReport() { + //Distribution series + Map sizeDist = new HashMap<>(); + for (Node n : structure.graph.getNodes()) { + Integer v = (Integer) n.getAttribute(STAT_INF_CLASS); + if (!sizeDist.containsKey(v)) { + sizeDist.put(v, 0); + } + sizeDist.put(v, sizeDist.get(v) + 1); + } + + XYSeries dSeries = ChartUtils.createXYSeries(sizeDist, "Size Distribution"); + + XYSeriesCollection dataset1 = new XYSeriesCollection(); + dataset1.addSeries(dSeries); + + JFreeChart chart = ChartFactory.createXYLineChart( + "Size Distribution", + "Stat Inf Class", + "Size (number of nodes)", + dataset1, + PlotOrientation.VERTICAL, + true, + false, + false); + chart.removeLegend(); + ChartUtils.decorateChart(chart); + ChartUtils.scaleChart(chart, dSeries, false); + String imageFile = ChartUtils.renderChart(chart, "communities-size-distribution.png"); + + NumberFormat f = new DecimalFormat("#0.000"); + + String report = "

            Statistical Inference Report

            " + + "
            " + + "

            Results:

            " + + "Description Length: " + f.format(descriptionLength) + "
            " + + "Number of Communities: " + structure.communities.size() + + "

            " + imageFile + + "

            " + "

            Algorithm:

            " + + "Statistical inference of assortative community structures
            " + + "Lizhi Zhang, Tiago P. Peixoto
            " + + "Phys. Rev. Research 2 043271 (2020)
            " + + "https://dx.doi.org/10.1103/PhysRevResearch.2.043271

            " + + "

            " + + "Bayesian stochastic blockmodeling
            " + + "Tiago P. Peixoto
            " + + "Chapter in β€œAdvances in Network Clustering and Blockmodeling,” edited by
            " + + "P. Doreian, V. Batagelj, A. Ferligoj (Wiley, 2019)
            " + + "https://dx.doi.org/10.1002/9781119483298.ch11
            " + + " "; + + return report; + } + + public double getDescriptionLength() { + return descriptionLength; + } + + static class Community { + static int count = 0; + protected int id; + double weightSum; // e_r, i.e. sum of edge weights for the community, inside and outside altogether + // Note: here we count the internal edges twice + double internalWeightSum; // e_rr, i.e. sum of internal edge weights + int graphNodeCount; // How many real nodes (useful after zoomOut) + StatisticalInferenceClustering.CommunityStructure structure; + List nodes; + HashMap connectionsWeight; + HashMap connectionsCount; + + public Community(StatisticalInferenceClustering.Community com) { + this.id = count++; + this.weightSum = 0; + structure = com.structure; + connectionsWeight = new HashMap<>(); + connectionsCount = new HashMap<>(); + nodes = new ArrayList<>(); + } + + public Community(StatisticalInferenceClustering.CommunityStructure structure) { + this.id = count++; + this.weightSum = 0; + this.structure = structure; + connectionsWeight = new HashMap<>(); + connectionsCount = new HashMap<>(); + nodes = new ArrayList<>(); + } + + public int size() { + return nodes.size(); + } + + public void seed(int node) { + nodes.add(node); + weightSum += structure.weights[node]; + internalWeightSum += structure.internalWeights[node]; + graphNodeCount += structure.graphNodeCount[node]; + } + + public boolean add(int node) { + nodes.add(node); + weightSum += structure.weights[node]; + graphNodeCount += structure.graphNodeCount[node]; + return true; + } + + public boolean remove(int node) { + boolean result = nodes.remove((Integer) node); + weightSum -= structure.weights[node]; + graphNodeCount -= structure.graphNodeCount[node]; + if (nodes.isEmpty()) { + structure.communities.remove(this); + } + return result; + } + + public String getMonitoring() { + String monitoring = ""; + int count = 0; + for (int nodeIndex : nodes) { + if (count++ > 0) { + monitoring += " "; + } + monitoring += nodeIndex; + } + return monitoring; + } + } + + class CommunityStructure { + + HashMap[] nodeConnectionsWeight; + HashMap[] nodeConnectionsCount; + HashMap map; + StatisticalInferenceClustering.Community[] nodeCommunities; + Graph graph; + double[] graphNodeCount; // number of graph nodes represented by that node + double[] weights; // The weighted degree of the nodes (in short) + double[] internalWeights; // The sum of internal edges weights + double graphWeightSum; // The weighted sum of degrees + List[] topology; + List communities; + int N; + HashMap invMap; + + + CommunityStructure(Graph graph) { + //System.out.println("### INIT COMMUNITY STRUCTURE"); + this.graph = graph; + N = graph.getNodeCount(); + invMap = new HashMap<>(); + // nodeConnectionsWeight is basically a table of, for each node, then for each community, + // how many connections they have. + nodeConnectionsWeight = new HashMap[N]; + // nodeConnectionsCount is basically the same thing but unweighted. Remarkably, in case of parallel edges, + // but not taking weights into account, nodeConnectionsWeight will still count 1 for each parallel edges, + // while nodeConnectionsCount will count just 1. + nodeConnectionsCount = new HashMap[N]; + // graphNodeCount is the number of real nodes (graph nodes) in each nodes. This is necessary because + // each node might in fact be a community of nodes (see zoomOut method) + graphNodeCount = new double[N]; + // nodeCommunities is an index of which community each node belongs to + nodeCommunities = new StatisticalInferenceClustering.Community[N]; + map = new HashMap<>(); // keeps track of the integer ids of the nodes + // The topology is basically an index of the outbound computation edges for each node + topology = new ArrayList[N]; + communities = new ArrayList<>(); + int index = 0; + weights = new double[N]; // The weight is basically the weighted degree of a node + internalWeights = new double[N]; + + NodeIterable nodesIterable = graph.getNodes(); + for (Node node : nodesIterable) { + map.put(node, index); + nodeCommunities[index] = new StatisticalInferenceClustering.Community(this); + + nodeConnectionsWeight[index] = new HashMap<>(); + nodeConnectionsCount[index] = new HashMap<>(); + weights[index] = 0; // Note: weight is degree, but we add that later on + graphNodeCount[index] = 1; + internalWeights[index] = 0; + nodeCommunities[index].seed(index); + StatisticalInferenceClustering.Community hidden = + new StatisticalInferenceClustering.Community(structure); + hidden.nodes.add(index); + invMap.put(index, hidden); + communities.add(nodeCommunities[index]); + index++; + if (isCanceled) { + nodesIterable.doBreak(); + return; + } + } + + int[] edgeTypes = graph.getModel().getEdgeTypes(); + + nodesIterable = graph.getNodes(); + for (Node node : nodesIterable) { + int node_index = map.get(node); + StatisticalInferenceClustering.Community com = nodeCommunities[node_index]; + topology[node_index] = new ArrayList<>(); + + Set uniqueNeighbors = new HashSet<>(graph.getNeighbors(node).toCollection()); + for (Node neighbor : uniqueNeighbors) { + if (node == neighbor) { + continue; + } + int neighbor_index = map.get(neighbor); + float weight = 0; + + //Sum all parallel edges weight: + for (int edgeType : edgeTypes) { + for (Edge edge : graph.getEdges(node, neighbor, edgeType)) { + if (useWeight) { + // TODO: the algorithm only works with integer weights + //weight += edge.getWeight(graph.getView()); + } else { + weight += 1; + } + } + } + + //Finally add a single edge with the summed weight of all parallel edges: + //Fixes issue #1419 Getting null pointer error when trying to calculate modularity + weights[node_index] += weight; + com.weightSum += weight; + if (node_index == neighbor_index) { + internalWeights[node_index] += weight; + } + ComputationEdge ce = new ComputationEdge(node_index, neighbor_index, weight); + topology[node_index].add(ce); + StatisticalInferenceClustering.Community adjCom = nodeCommunities[neighbor_index]; + + //System.out.println("Add links from node "+node_index+" to community "+adjCom.id); + nodeConnectionsWeight[node_index].put(adjCom, weight); + nodeConnectionsCount[node_index].put(adjCom, 1); + + StatisticalInferenceClustering.Community nodeCom = nodeCommunities[node_index]; + //System.out.println("Add links from community "+nodeCom.id+" to community "+adjCom.id); + nodeCom.connectionsWeight.put(adjCom, weight); + nodeCom.connectionsCount.put(adjCom, 1); + + //System.out.println("Add links from node "+neighbor_index+" to community "+nodeCom.id); + nodeConnectionsWeight[neighbor_index].put(nodeCom, weight); + nodeConnectionsCount[neighbor_index].put(nodeCom, 1); + + //System.out.println("Add links from community "+adjCom.id+" to community "+nodeCom.id); + adjCom.connectionsWeight.put(nodeCom, weight); + adjCom.connectionsCount.put(nodeCom, 1); + + graphWeightSum += weight; + } + + + if (isCanceled) { + nodesIterable.doBreak(); + return; + } + } + graphWeightSum /= 2.0; + } + + private void addNodeTo(int node, StatisticalInferenceClustering.Community to) { + //System.out.println("### ADD NODE "+node+" TO COMMUNITY "+to.id); + to.add(node); + nodeCommunities[node] = to; + + for (ComputationEdge e : topology[node]) { + int neighbor = e.target; + + //////// + //Add Node Connection to this community + //System.out.println("Add links from node "+neighbor+" to community "+to.id); + //System.out.println("Add links from node "+neighbor+" to community "+to.id); + nodeConnectionsWeight[neighbor].merge(to, e.weight, Float::sum); + nodeConnectionsCount[neighbor].merge(to, 1, Integer::sum); + + /////////////////// + StatisticalInferenceClustering.Community adjCom = nodeCommunities[neighbor]; + //System.out.println("Add links from community "+adjCom.id+" to community "+to.id); + //System.out.println("Add links from community "+adjCom.id+" to community "+to.id); + adjCom.connectionsWeight.merge(to, e.weight, Float::sum); + adjCom.connectionsCount.merge(to, 1, Integer::sum); + + if (node == neighbor) { + continue; + } + + //System.out.println("Add links from node "+node+" to community "+adjCom.id); + //System.out.println("Add links from node "+node+" to community "+adjCom.id); + nodeConnectionsWeight[node].merge(adjCom, e.weight, Float::sum); + nodeConnectionsCount[node].merge(adjCom, 1, Integer::sum); + + if (to != adjCom) { + //System.out.println("Add links from community "+to.id+" to community "+adjCom.id); + //System.out.println("Add links from community "+to.id+" to community "+adjCom.id); + to.connectionsWeight.merge(adjCom, e.weight, Float::sum); + + to.connectionsCount.merge(adjCom, 1, Integer::sum); + + } + } + to.internalWeightSum += nodeConnectionsWeight[node].getOrDefault(to, 0.f); + } + + private void removeNodeFromItsCommunity(int node) { + //System.out.println("### REMOVE NODE FROM ITS COMMUNITY "+node); + StatisticalInferenceClustering.Community community = nodeCommunities[node]; + community.internalWeightSum -= nodeConnectionsWeight[node].getOrDefault(community, 0.f); + for (ComputationEdge e : topology[node]) { + int neighbor = e.target; + + //////// + //Remove Node Connection to this community + Float edgesTo = nodeConnectionsWeight[neighbor].get(community); + Integer countEdgesTo = nodeConnectionsCount[neighbor].get(community); + if (countEdgesTo - 1 == 0) { + //System.out.println("REMOVE links from node "+neighbor+" to community "+community.id); + nodeConnectionsWeight[neighbor].remove(community); + nodeConnectionsCount[neighbor].remove(community); + } else { + //System.out.println("Add links from node "+neighbor+" to community "+community.id); + nodeConnectionsWeight[neighbor].put(community, edgesTo - e.weight); + nodeConnectionsCount[neighbor].put(community, countEdgesTo - 1); + } + + /////////////////// + //Remove Adjacent Community's connection to this community + StatisticalInferenceClustering.Community adjCom = nodeCommunities[neighbor]; + Float oEdgesto = adjCom.connectionsWeight.get(community); + Integer oCountEdgesto = adjCom.connectionsCount.get(community); + if (oCountEdgesto - 1 == 0) { + //System.out.println("Remove links from community "+adjCom.id+" to community "+community.id+" *"); + adjCom.connectionsWeight.remove(community); + adjCom.connectionsCount.remove(community); + } else { + //System.out.println("Remove links from community "+adjCom.id+" to community "+community.id); + adjCom.connectionsWeight.put(community, oEdgesto - e.weight); + adjCom.connectionsCount.put(community, oCountEdgesto - 1); + } + + if (node == neighbor) { + continue; + } + + if (adjCom != community) { + Float comEdgesto = community.connectionsWeight.get(adjCom); + Integer comCountEdgesto = community.connectionsCount.get(adjCom); + if (comCountEdgesto - 1 == 0) { + //System.out.println("Remove links from community "+community.id+" to community "+adjCom.id+" *"); + community.connectionsWeight.remove(adjCom); + community.connectionsCount.remove(adjCom); + } else { + //System.out.println("Remove links from community "+community.id+" to community "+adjCom.id); + community.connectionsWeight.put(adjCom, comEdgesto - e.weight); + community.connectionsCount.put(adjCom, comCountEdgesto - 1); + } + } + + Float nodeEgesTo = nodeConnectionsWeight[node].get(adjCom); + Integer nodeCountEgesTo = nodeConnectionsCount[node].get(adjCom); + if (nodeCountEgesTo - 1 == 0) { + //System.out.println("REMOVE links from node "+node+" to community "+adjCom.id+ " *"); + nodeConnectionsWeight[node].remove(adjCom); + nodeConnectionsCount[node].remove(adjCom); + } else { + //System.out.println("REMOVE links from node "+node+" to community "+adjCom.id); + nodeConnectionsWeight[node].put(adjCom, nodeEgesTo - e.weight); + nodeConnectionsCount[node].put(adjCom, nodeCountEgesTo - 1); + } + + } + community.remove(node); + } + + private void moveNodeTo(int node, StatisticalInferenceClustering.Community to) { + //System.out.println("### MOVE NODE "+node+" TO COM "+to.id); + removeNodeFromItsCommunity(node); + addNodeTo(node, to); + } + + protected void _moveNodeTo(int node, StatisticalInferenceClustering.Community to) { + // NOTE: THIS IS FOR UNIT TEST PURPOSE ONLY + moveNodeTo(node, to); + } + + protected void _zoomOut() { + // NOTE: THIS IS FOR UNIT TEST PURPOSE ONLY + zoomOut(); + } + + private void zoomOut() { + //System.out.println("### ZOOM OUT"); + int M = communities.size(); + // The new topology uses preexisting communities as nodes + ArrayList[] newTopology = new ArrayList[M]; + int index = 0; + // nodeCommunities is an index of the communities per node. + // In this context, the preexisting communities will become the nodes + // of new upper-level communities (meta-communities). + nodeCommunities = new StatisticalInferenceClustering.Community[M]; + nodeConnectionsWeight = new HashMap[M]; + nodeConnectionsCount = new HashMap[M]; + double[] oldGraphNodeCount = graphNodeCount.clone(); + HashMap newInvMap = new HashMap<>(); + for (int i = 0; i < communities.size(); i++) { + // For each community "com", that we want to transform into a node in the new topology... + StatisticalInferenceClustering.Community com = communities.get(i); + nodeConnectionsWeight[index] = new HashMap<>(); + nodeConnectionsCount[index] = new HashMap<>(); + + newTopology[index] = new ArrayList<>(); + // For each community "com", we create a meta-community nodeCommunities[index] containing only it + nodeCommunities[index] = new StatisticalInferenceClustering.Community(com); + // iter is the set of communities with which com has (weighted) links. + Set iter = com.connectionsWeight.keySet(); + // weightSum is the number of edges from the community (into itself or not) + double weightSum = 0; + double graphNodeSum = 0; + + StatisticalInferenceClustering.Community hidden = + new StatisticalInferenceClustering.Community(structure); + for (Integer nodeInt : com.nodes) { + graphNodeSum += oldGraphNodeCount[nodeInt]; + StatisticalInferenceClustering.Community oldHidden = invMap.get(nodeInt); + hidden.nodes.addAll(oldHidden.nodes); + } + newInvMap.put(index, hidden); + for (StatisticalInferenceClustering.Community adjCom : iter) { + // adjCom is an adjacent community to com + int target = communities.indexOf(adjCom); + float weight = com.connectionsWeight.get(adjCom); + if (target == index) { + weightSum += 2. * weight; + } else { + weightSum += weight; + } + ComputationEdge e = new ComputationEdge(index, target, weight); + newTopology[index].add(e); + } + weights[index] = weightSum; + graphNodeCount[index] = graphNodeSum; + internalWeights[index] = com.internalWeightSum; + nodeCommunities[index].seed(index); + + index++; + } + communities.clear(); + + for (int i = 0; i < M; i++) { + StatisticalInferenceClustering.Community com = nodeCommunities[i]; + communities.add(com); + for (ComputationEdge e : newTopology[i]) { + //System.out.println("Add links from node "+i+" to community "+nodeCommunities[e.target].id); + nodeConnectionsWeight[i].put(nodeCommunities[e.target], e.weight); + nodeConnectionsCount[i].put(nodeCommunities[e.target], 1); + //System.out.println("Add links from community "+com.id+" to community "+nodeCommunities[e.target].id); + com.connectionsWeight.put(nodeCommunities[e.target], e.weight); + com.connectionsCount.put(nodeCommunities[e.target], 1); + } + + } + + N = M; + topology = newTopology; + invMap = newInvMap; + } + + public String getMonitoring() { + String monitoring = ""; + + for (StatisticalInferenceClustering.Community com : communities) { + monitoring += "com" + com.id + "["; + int count = 0; + for (Integer node : com.nodes) { + StatisticalInferenceClustering.Community hidden = invMap.get(node); + if (count++ > 0) { + monitoring += " "; + } + monitoring += "n" + node + "(" + hidden.getMonitoring() + ")"; + } + monitoring += "] "; + } + + return monitoring; + } + + // Useful for monitoring and debugging + public boolean checkIntegrity() { + boolean integrity = true; + Double E = graphWeightSum; + Double e_in = communities.stream().mapToDouble(c -> c.internalWeightSum).sum(); + Double e_out = E - e_in; + Double B = Double.valueOf(communities.size()); + Double N = Double.valueOf(graph.getNodeCount()); + + // Check the integrity of nodeConnectionsWeight + double nodeComWeightSum = 0; + for (int node = 0; node < nodeConnectionsWeight.length; node++) { + HashMap hm = nodeConnectionsWeight[node]; + Collection values = hm.values(); + nodeComWeightSum += values.stream().mapToDouble(v -> (double) v).sum(); + } + + // TODO: what should be done, in fact, + // is to check that for each node the sum of nodeConnectionsWeight + // equals its degree. + + return integrity; + } + } + + static class ComputationEdge { + + int source; + int target; + float weight; + + public ComputationEdge(int s, int t, float w) { + source = s; + target = t; + weight = w; + } + } +} diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/WeightedDegree.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/WeightedDegree.java index 0c4bb3bde4..90355821a1 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/WeightedDegree.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/WeightedDegree.java @@ -39,20 +39,20 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.HashMap; -import java.util.Iterator; import java.util.Map; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.attribute.api.Table; import org.gephi.graph.api.DirectedGraph; import org.gephi.graph.api.Edge; import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphModel; import org.gephi.graph.api.Node; +import org.gephi.graph.api.NodeIterable; +import org.gephi.graph.api.Table; import org.gephi.statistics.spi.Statistics; import org.gephi.utils.longtask.spi.LongTask; import org.gephi.utils.progress.Progress; @@ -65,7 +65,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.NbBundle; /** - * * @author Sebastien Heymann */ public class WeightedDegree implements Statistics, LongTask { @@ -86,23 +85,24 @@ public double getAverageDegree() { } @Override - public void execute(GraphModel graphModel, AttributeModel attributeModel) { + public void execute(GraphModel graphModel) { Graph graph = graphModel.getGraphVisible(); - execute(graph, attributeModel); + execute(graph); } - public void execute(Graph graph, AttributeModel attributeModel) { + public void execute(Graph graph) { isDirected = graph.isDirected(); isCanceled = false; initializeDegreeDists(); - initializeAttributeColunms(attributeModel); + initializeAttributeColunms(graph.getModel()); graph.readLock(); - - avgWDegree = calculateAverageWeightedDegree(graph, isDirected, true); - - graph.readUnlockAll(); + try { + avgWDegree = calculateAverageWeightedDegree(graph, isDirected, true); + } finally { + graph.readUnlockAll(); + } } public double calculateAverageWeightedDegree(Graph graph, boolean isDirected, boolean updateAttributes) { @@ -116,7 +116,8 @@ public double calculateAverageWeightedDegree(Graph graph, boolean isDirected, bo Progress.start(progress, graph.getNodeCount()); - for (Node n : graph.getNodes()) { + NodeIterable nodesIterable = graph.getNodes(); + for (Node n : nodesIterable) { double totalWeight = 0; if (isDirected) { double totalInWeight = 0; @@ -138,7 +139,7 @@ public double calculateAverageWeightedDegree(Graph graph, boolean isDirected, bo updateDegreeDists(totalInWeight, totalOutWeight, totalWeight); } else { for (Edge e : graph.getEdges(n)) { - totalWeight += e.getWeight(); + totalWeight += (e.isSelfLoop() ? 2 : 1) * e.getWeight(); } n.setAttribute(WDEGREE, totalWeight); updateDegreeDists(totalWeight); @@ -147,35 +148,43 @@ public double calculateAverageWeightedDegree(Graph graph, boolean isDirected, bo averageWeightedDegree += totalWeight; if (isCanceled) { + nodesIterable.doBreak(); break; } Progress.progress(progress); } - averageWeightedDegree /= (isDirected) ? 2 * graph.getNodeCount() : graph.getNodeCount(); + averageWeightedDegree /= (isDirected ? 2.0 : 1.0) * graph.getNodeCount(); return averageWeightedDegree; } private void initializeDegreeDists() { - degreeDist = new HashMap(); - inDegreeDist = new HashMap(); - outDegreeDist = new HashMap(); + degreeDist = new HashMap<>(); + inDegreeDist = new HashMap<>(); + outDegreeDist = new HashMap<>(); } - private void initializeAttributeColunms(AttributeModel attributeModel) { - Table nodeTable = attributeModel.getNodeTable(); + private void initializeAttributeColunms(GraphModel graphModel) { + Table nodeTable = graphModel.getNodeTable(); if (isDirected) { + ColumnUtils.cleanUpColumns(nodeTable, new String[] {WINDEGREE, WOUTDEGREE}, Double.class); + if (!nodeTable.hasColumn(WINDEGREE)) { - nodeTable.addColumn(WINDEGREE, NbBundle.getMessage(WeightedDegree.class, "WeightedDegree.nodecolumn.InDegree"), Double.class, 0.0); + nodeTable.addColumn(WINDEGREE, + NbBundle.getMessage(WeightedDegree.class, "WeightedDegree.nodecolumn.InDegree"), Double.class, 0.0); } if (!nodeTable.hasColumn(WOUTDEGREE)) { - nodeTable.addColumn(WOUTDEGREE, NbBundle.getMessage(WeightedDegree.class, "WeightedDegree.nodecolumn.OutDegree"), Double.class, 0.0); + nodeTable.addColumn(WOUTDEGREE, + NbBundle.getMessage(WeightedDegree.class, "WeightedDegree.nodecolumn.OutDegree"), Double.class, + 0.0); } } + ColumnUtils.cleanUpColumns(nodeTable, new String[] {WDEGREE}, Double.class); if (!nodeTable.hasColumn(WDEGREE)) { - nodeTable.addColumn(WDEGREE, NbBundle.getMessage(WeightedDegree.class, "WeightedDegree.nodecolumn.Degree"), Double.class, 0.0); + nodeTable.addColumn(WDEGREE, NbBundle.getMessage(WeightedDegree.class, "WeightedDegree.nodecolumn.Degree"), + Double.class, 0.0); } } @@ -203,7 +212,7 @@ private void updateDegreeDists(double wdegree) { @Override public String getReport() { - String report = ""; + String report; if (isDirected) { report = getDirectedReport(); @@ -215,14 +224,14 @@ public String getReport() { dataset1.addSeries(dSeries); JFreeChart chart1 = ChartFactory.createXYLineChart( - "Degree Distribution", - "Value", - "Count", - dataset1, - PlotOrientation.VERTICAL, - true, - false, - false); + "Degree Distribution", + "Value", + "Count", + dataset1, + PlotOrientation.VERTICAL, + true, + false, + false); chart1.removeLegend(); ChartUtils.decorateChart(chart1); ChartUtils.scaleChart(chart1, dSeries, false); @@ -231,11 +240,11 @@ public String getReport() { NumberFormat f = new DecimalFormat("#0.000"); report = "

            Weighted Degree Report

            " - + "
            " - + "

            Results:

            " - + "Average Weighted Degree: " + f.format(avgWDegree) - + "

            " + degreeImageFile - + ""; + + "
            " + + "

            Results:

            " + + "Average Weighted Degree: " + f.format(avgWDegree) + + "

            " + degreeImageFile + + ""; } return report; } @@ -256,40 +265,40 @@ public String getDirectedReport() { dataset3.addSeries(odSeries); JFreeChart chart1 = ChartFactory.createXYLineChart( - "Degree Distribution", - "Value", - "Count", - dataset1, - PlotOrientation.VERTICAL, - true, - false, - false); + "Degree Distribution", + "Value", + "Count", + dataset1, + PlotOrientation.VERTICAL, + true, + false, + false); ChartUtils.decorateChart(chart1); ChartUtils.scaleChart(chart1, dSeries, false); String degreeImageFile = ChartUtils.renderChart(chart1, "w-degree-distribution.png"); JFreeChart chart2 = ChartFactory.createXYLineChart( - "In-Degree Distribution", - "Value", - "Count", - dataset2, - PlotOrientation.VERTICAL, - true, - false, - false); + "In-Degree Distribution", + "Value", + "Count", + dataset2, + PlotOrientation.VERTICAL, + true, + false, + false); ChartUtils.decorateChart(chart2); ChartUtils.scaleChart(chart2, dSeries, false); String indegreeImageFile = ChartUtils.renderChart(chart2, "indegree-distribution.png"); JFreeChart chart3 = ChartFactory.createXYLineChart( - "Out-Degree Distribution", - "Value", - "Count", - dataset3, - PlotOrientation.VERTICAL, - true, - false, - false); + "Out-Degree Distribution", + "Value", + "Count", + dataset3, + PlotOrientation.VERTICAL, + true, + false, + false); ChartUtils.decorateChart(chart3); ChartUtils.scaleChart(chart3, dSeries, false); String outdegreeImageFile = ChartUtils.renderChart(chart3, "outdegree-distribution.png"); @@ -297,13 +306,13 @@ public String getDirectedReport() { NumberFormat f = new DecimalFormat("#0.000"); String report = "

            Weighted Degree Report

            " - + "
            " - + "

            Results:

            " - + "Average Weighted Degree: " + f.format(avgWDegree) - + "

            " + degreeImageFile - + "

            " + indegreeImageFile - + "

            " + outdegreeImageFile - + ""; + + "
            " + + "

            Results:

            " + + "Average Weighted Degree: " + f.format(avgWDegree) + + "

            " + degreeImageFile + + "

            " + indegreeImageFile + + "

            " + outdegreeImageFile + + ""; return report; } diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/ClusteringCoefficientBuilder.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/ClusteringCoefficientBuilder.java index 4d7bcb31bf..ced59f956d 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/ClusteringCoefficientBuilder.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/ClusteringCoefficientBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin.builder; import org.gephi.statistics.plugin.ClusteringCoefficient; @@ -48,10 +49,9 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author pjmcswee */ -@ServiceProvider(service=StatisticsBuilder.class) +@ServiceProvider(service = StatisticsBuilder.class) public class ClusteringCoefficientBuilder implements StatisticsBuilder { @Override diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/ConnectedComponentsBuilder.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/ConnectedComponentsBuilder.java index 3518d180c5..ceefcd659e 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/ConnectedComponentsBuilder.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/ConnectedComponentsBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin.builder; import org.gephi.statistics.plugin.ConnectedComponents; @@ -48,10 +49,9 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author pjmcswee */ -@ServiceProvider(service=StatisticsBuilder.class) +@ServiceProvider(service = StatisticsBuilder.class) public class ConnectedComponentsBuilder implements StatisticsBuilder { @Override diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/DegreeBuilder.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/DegreeBuilder.java index 33cb7cd330..b4427cb7b8 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/DegreeBuilder.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/DegreeBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin.builder; import org.gephi.statistics.plugin.Degree; @@ -48,7 +49,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author pjmcswee */ @ServiceProvider(service = StatisticsBuilder.class) diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/DensityBuilder.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/DensityBuilder.java index a1d2b4e4bc..85afbc4983 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/DensityBuilder.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/DensityBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin.builder; import org.gephi.statistics.plugin.GraphDensity; @@ -49,9 +50,10 @@ Development and Distribution License("CDDL") (collectively, the /** * The statistics builder the graph denstiy statistics + * * @author pjmcswee */ -@ServiceProvider(service=StatisticsBuilder.class) +@ServiceProvider(service = StatisticsBuilder.class) public class DensityBuilder implements StatisticsBuilder { @Override diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/EigenvectorCentralityBuilder.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/EigenvectorCentralityBuilder.java index f2de0e073d..8925a58c02 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/EigenvectorCentralityBuilder.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/EigenvectorCentralityBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin.builder; import org.gephi.statistics.plugin.EigenvectorCentrality; @@ -48,7 +49,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author pjmcswee */ @ServiceProvider(service = StatisticsBuilder.class) diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/GraphDistanceBuilder.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/GraphDistanceBuilder.java index 499a11e674..46c48627d7 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/GraphDistanceBuilder.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/GraphDistanceBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin.builder; import org.gephi.statistics.plugin.GraphDistance; @@ -48,10 +49,9 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author pjmcswee */ -@ServiceProvider(service=StatisticsBuilder.class) +@ServiceProvider(service = StatisticsBuilder.class) public class GraphDistanceBuilder implements StatisticsBuilder { @Override diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/HitsBuilder.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/HitsBuilder.java index 231d7061ad..e5e0708e2e 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/HitsBuilder.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/HitsBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin.builder; import org.gephi.statistics.plugin.Hits; @@ -48,7 +49,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author pjmcswee */ @ServiceProvider(service = StatisticsBuilder.class) diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/ModularityBuilder.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/ModularityBuilder.java index 7d43a7f8a4..f8221a995b 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/ModularityBuilder.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/ModularityBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin.builder; import org.gephi.statistics.plugin.Modularity; @@ -48,7 +49,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author pjmcswee */ @ServiceProvider(service = StatisticsBuilder.class) diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/PageRankBuilder.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/PageRankBuilder.java index 7d157fb7a6..005201e067 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/PageRankBuilder.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/PageRankBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin.builder; import org.gephi.statistics.plugin.PageRank; @@ -48,7 +49,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author pjmcswee */ @ServiceProvider(service = StatisticsBuilder.class) diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/StatisticalInferenceBuilder.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/StatisticalInferenceBuilder.java new file mode 100644 index 0000000000..408d3cfd8a --- /dev/null +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/StatisticalInferenceBuilder.java @@ -0,0 +1,71 @@ +/* + Copyright 2008-2011 Gephi + Authors : Mathieu Jacomy, Tiago Peixoto + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.statistics.plugin.builder; + +import org.gephi.statistics.plugin.StatisticalInferenceClustering; +import org.gephi.statistics.spi.Statistics; +import org.gephi.statistics.spi.StatisticsBuilder; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +/** + * @author Mathieu Jacomy & Tiago Peixoto + */ +@ServiceProvider(service = StatisticsBuilder.class) +public class StatisticalInferenceBuilder implements StatisticsBuilder { + + @Override + public String getName() { + return NbBundle.getMessage(StatisticalInferenceBuilder.class, "StatisticalInference.name"); + } + + @Override + public Statistics getStatistics() { + return new StatisticalInferenceClustering(); + } + + @Override + public Class getStatisticsClass() { + return StatisticalInferenceClustering.class; + } +} diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/WeightedDegreeBuilder.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/WeightedDegreeBuilder.java index 7deac5392a..ea1910405c 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/WeightedDegreeBuilder.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/builder/WeightedDegreeBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin.builder; import org.gephi.statistics.plugin.WeightedDegree; @@ -48,7 +49,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author pjmcswee */ @ServiceProvider(service = StatisticsBuilder.class) diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/DynamicClusteringCoefficient.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/DynamicClusteringCoefficient.java index cf4f14111e..44f24fd843 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/DynamicClusteringCoefficient.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/DynamicClusteringCoefficient.java @@ -39,24 +39,27 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin.dynamic; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.HashMap; import java.util.Map; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.attribute.api.Column; -import org.gephi.attribute.api.Table; -import org.gephi.attribute.time.Interval; -import org.gephi.attribute.time.TimestampDoubleSet; +import org.gephi.graph.api.Column; import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphController; import org.gephi.graph.api.GraphModel; import org.gephi.graph.api.GraphView; +import org.gephi.graph.api.Interval; import org.gephi.graph.api.Node; +import org.gephi.graph.api.Table; +import org.gephi.graph.api.TimeRepresentation; +import org.gephi.graph.api.types.IntervalDoubleMap; +import org.gephi.graph.api.types.TimestampDoubleMap; import org.gephi.statistics.plugin.ChartUtils; import org.gephi.statistics.plugin.ClusteringCoefficient; +import org.gephi.statistics.plugin.ColumnUtils; import org.gephi.statistics.spi.DynamicStatistics; import org.gephi.utils.longtask.spi.LongTask; import org.gephi.utils.progress.ProgressTicket; @@ -69,7 +72,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class DynamicClusteringCoefficient implements DynamicStatistics, LongTask { @@ -93,23 +95,32 @@ public class DynamicClusteringCoefficient implements DynamicStatistics, LongTask public DynamicClusteringCoefficient() { GraphController graphController = Lookup.getDefault().lookup(GraphController.class); - if (graphController != null && graphController.getGraphModel()!= null) { + if (graphController != null && graphController.getGraphModel() != null) { isDirected = graphController.getGraphModel().isDirected(); } } @Override - public void execute(GraphModel graphModel, AttributeModel attributeModel) { + public void execute(GraphModel graphModel) { this.graphModel = graphModel; this.isDirected = graphModel.isDirected(); - this.averages = new HashMap(); + this.averages = new HashMap<>(); //Attributes cols if (!averageOnly) { - Table nodeTable = attributeModel.getNodeTable(); + TimeRepresentation tr = graphModel.getConfiguration().getTimeRepresentation(); + + Table nodeTable = graphModel.getNodeTable(); + Class columnType = + tr.equals(TimeRepresentation.INTERVAL) ? IntervalDoubleMap.class : TimestampDoubleMap.class; + ColumnUtils.cleanUpColumns(nodeTable, new String[] {DYNAMIC_CLUSTERING_COEFFICIENT}, columnType); + dynamicCoefficientColumn = nodeTable.getColumn(DYNAMIC_CLUSTERING_COEFFICIENT); if (dynamicCoefficientColumn == null) { - dynamicCoefficientColumn = nodeTable.addColumn(DYNAMIC_CLUSTERING_COEFFICIENT, NbBundle.getMessage(DynamicClusteringCoefficient.class, "DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient"), TimestampDoubleSet.class, null); + dynamicCoefficientColumn = nodeTable.addColumn(DYNAMIC_CLUSTERING_COEFFICIENT, NbBundle + .getMessage(DynamicClusteringCoefficient.class, + "DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient"), + columnType, null); } } } @@ -123,14 +134,14 @@ public String getReport() { dataset.addSeries(dSeries); JFreeChart chart = ChartFactory.createXYLineChart( - "Clustering Coefficient", - "Time", - "Average Clustering Coefficient", - dataset, - PlotOrientation.VERTICAL, - true, - false, - false); + "Clustering Coefficient", + "Time", + "Average Clustering Coefficient", + dataset, + PlotOrientation.VERTICAL, + true, + false, + false); chart.removeLegend(); ChartUtils.decorateChart(chart); @@ -140,12 +151,12 @@ public String getReport() { NumberFormat f = new DecimalFormat("#0.000000"); String report = "

            Dynamic Clustering Coefficient Report

            " - + "
            " - + "
            Bounds: from " + f.format(bounds.getLow()) + " to " + f.format(bounds.getHigh()) - + "
            Window: " + window - + "
            Tick: " + tick - + "

            Average clustering cloefficient over time:

            " - + "

            " + coefficientImageFile; + + "
            " + + "
            Bounds: from " + f.format(bounds.getLow()) + " to " + f.format(bounds.getHigh()) + + "
            Window: " + window + + "
            Tick: " + tick + + "

            Average clustering cloefficient over time:

            " + + "

            " + coefficientImageFile; /*for (Interval average : averages) { report += average.toString(dynamicModel.getTimeFormat().equals(DynamicModel.TimeFormat.DOUBLE)) + "
            "; @@ -156,41 +167,52 @@ public String getReport() { @Override public void loop(GraphView window, Interval interval) { - Graph graph = null; + Graph graph; if (isDirected) { graph = graphModel.getDirectedGraph(window); } else { graph = graphModel.getUndirectedGraph(window); } + TimeRepresentation tr = graphModel.getConfiguration().getTimeRepresentation(); graph.readLock(); - clusteringCoefficientStat = new ClusteringCoefficient(); - clusteringCoefficientStat.setDirected(isDirected); - clusteringCoefficientStat.triangles(graph); - - //Columns - if (!averageOnly) { - double[] coefficients = clusteringCoefficientStat.getCoefficientReuslts(); - int i = 0; - for (Node n : graph.getNodes()) { - double coef = coefficients[i++]; - - n.setAttribute(dynamicCoefficientColumn, coef, interval.getLow()); - n.setAttribute(dynamicCoefficientColumn, coef, interval.getHigh()); - - if (cancel) { - break; + try { + clusteringCoefficientStat = new ClusteringCoefficient(); + clusteringCoefficientStat.setDirected(isDirected); + clusteringCoefficientStat.triangles(graph); + + //Columns + if (!averageOnly) { + double[] coefficients = clusteringCoefficientStat.getCoefficientReuslts(); + int i = 0; + for (Node n : graph.getNodes()) { + double coef = coefficients[i++]; + + switch (tr) { + case INTERVAL: + n.setAttribute(dynamicCoefficientColumn, coef, + new Interval(interval.getLow(), interval.getLow() + tick)); + break; + case TIMESTAMP: + n.setAttribute(dynamicCoefficientColumn, coef, interval.getLow()); + n.setAttribute(dynamicCoefficientColumn, coef, interval.getHigh()); + break; + } + + if (cancel) { + break; + } } } + } finally { + graph.readUnlockAll(); } - graph.readUnlockAll(); - //Average double avg = clusteringCoefficientStat.getAverageClusteringCoefficient(); - graph.setAttribute(DYNAMIC_AVG_CLUSTERING_COEFFICIENT, avg, interval.getLow()); - graph.setAttribute(DYNAMIC_AVG_CLUSTERING_COEFFICIENT, avg, interval.getHigh()); + graphModel.getGraphVisible().setAttribute(DYNAMIC_AVG_CLUSTERING_COEFFICIENT, avg, interval.getLow()); + graphModel.getGraphVisible().setAttribute(DYNAMIC_AVG_CLUSTERING_COEFFICIENT, avg, interval.getHigh()); averages.put(interval.getLow(), avg); averages.put(interval.getHigh(), avg); @@ -202,8 +224,8 @@ public void end() { } @Override - public void setBounds(Interval bounds) { - this.bounds = bounds; + public double getWindow() { + return window; } @Override @@ -212,18 +234,13 @@ public void setWindow(double window) { } @Override - public void setTick(double tick) { - this.tick = tick; - } - - @Override - public double getWindow() { - return window; + public double getTick() { + return tick; } @Override - public double getTick() { - return tick; + public void setTick(double tick) { + this.tick = tick; } @Override @@ -231,22 +248,27 @@ public Interval getBounds() { return bounds; } - public void setDirected(boolean isDirected) { - this.isDirected = isDirected; + @Override + public void setBounds(Interval bounds) { + this.bounds = bounds; } public boolean isDirected() { return isDirected; } - public void setAverageOnly(boolean averageOnly) { - this.averageOnly = averageOnly; + public void setDirected(boolean isDirected) { + this.isDirected = isDirected; } public boolean isAverageOnly() { return averageOnly; } + public void setAverageOnly(boolean averageOnly) { + this.averageOnly = averageOnly; + } + @Override public boolean cancel() { cancel = true; diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/DynamicDegree.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/DynamicDegree.java index f61a26ebaa..c767903842 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/DynamicDegree.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/DynamicDegree.java @@ -39,25 +39,27 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin.dynamic; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.HashMap; import java.util.Map; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.attribute.api.Column; -import org.gephi.attribute.api.Table; -import org.gephi.attribute.time.Interval; -import org.gephi.attribute.time.TimestampDoubleSet; -import org.gephi.attribute.time.TimestampIntegerSet; +import org.gephi.graph.api.Column; import org.gephi.graph.api.DirectedGraph; import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphController; import org.gephi.graph.api.GraphModel; import org.gephi.graph.api.GraphView; +import org.gephi.graph.api.Interval; import org.gephi.graph.api.Node; +import org.gephi.graph.api.Table; +import org.gephi.graph.api.TimeRepresentation; +import org.gephi.graph.api.types.IntervalIntegerMap; +import org.gephi.graph.api.types.TimestampIntegerMap; import org.gephi.statistics.plugin.ChartUtils; +import org.gephi.statistics.plugin.ColumnUtils; import org.gephi.statistics.spi.DynamicStatistics; import org.gephi.utils.longtask.spi.LongTask; import org.gephi.utils.progress.ProgressTicket; @@ -70,7 +72,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class DynamicDegree implements DynamicStatistics, LongTask { @@ -102,27 +103,40 @@ public DynamicDegree() { } @Override - public void execute(GraphModel graphModel, AttributeModel attributeModel) { + public void execute(GraphModel graphModel) { this.graphModel = graphModel; this.isDirected = graphModel.isDirected(); - this.averages = new HashMap(); + this.averages = new HashMap<>(); //Attributes cols if (!averageOnly) { - Table nodeTable = attributeModel.getNodeTable(); - dynamicInDegreeColumn = nodeTable.getColumn(DYNAMIC_INDEGREE); - dynamicOutDegreeColumn = nodeTable.getColumn(DYNAMIC_OUTDEGREE); - dynamicDegreeColumn = nodeTable.getColumn(DYNAMIC_DEGREE); + TimeRepresentation tr = graphModel.getConfiguration().getTimeRepresentation(); + + Table nodeTable = graphModel.getNodeTable(); + Class columnType = + tr.equals(TimeRepresentation.INTERVAL) ? IntervalIntegerMap.class : TimestampIntegerMap.class; if (isDirected) { + ColumnUtils.cleanUpColumns(nodeTable, new String[] {DYNAMIC_INDEGREE, DYNAMIC_OUTDEGREE}, columnType); + dynamicInDegreeColumn = nodeTable.getColumn(DYNAMIC_INDEGREE); + dynamicOutDegreeColumn = nodeTable.getColumn(DYNAMIC_OUTDEGREE); + if (dynamicInDegreeColumn == null) { - dynamicInDegreeColumn = nodeTable.addColumn(DYNAMIC_INDEGREE, NbBundle.getMessage(DynamicDegree.class, "DynamicDegree.nodecolumn.InDegree"), TimestampIntegerSet.class, null); + dynamicInDegreeColumn = nodeTable.addColumn(DYNAMIC_INDEGREE, + NbBundle.getMessage(DynamicDegree.class, "DynamicDegree.nodecolumn.InDegree"), columnType, + null); } if (dynamicOutDegreeColumn == null) { - dynamicOutDegreeColumn = nodeTable.addColumn(DYNAMIC_OUTDEGREE, NbBundle.getMessage(DynamicDegree.class, "DynamicDegree.nodecolumn.OutDegree"), TimestampIntegerSet.class, null); + dynamicOutDegreeColumn = nodeTable.addColumn(DYNAMIC_OUTDEGREE, + NbBundle.getMessage(DynamicDegree.class, "DynamicDegree.nodecolumn.OutDegree"), columnType, + null); } } + ColumnUtils.cleanUpColumns(nodeTable, new String[] {DYNAMIC_DEGREE}, columnType); + dynamicDegreeColumn = nodeTable.getColumn(DYNAMIC_DEGREE); if (dynamicDegreeColumn == null) { - dynamicDegreeColumn = nodeTable.addColumn(DYNAMIC_DEGREE, NbBundle.getMessage(DynamicDegree.class, "DynamicDegree.nodecolumn.Degree"), TimestampIntegerSet.class, null); + dynamicDegreeColumn = nodeTable.addColumn(DYNAMIC_DEGREE, + NbBundle.getMessage(DynamicDegree.class, "DynamicDegree.nodecolumn.Degree"), columnType, + null); } } } @@ -136,14 +150,14 @@ public String getReport() { dataset.addSeries(dSeries); JFreeChart chart = ChartFactory.createXYLineChart( - "Degree Time Series", - "Time", - "Average Degree", - dataset, - PlotOrientation.VERTICAL, - true, - false, - false); + "Degree Time Series", + "Time", + "Average Degree", + dataset, + PlotOrientation.VERTICAL, + true, + false, + false); chart.removeLegend(); ChartUtils.decorateChart(chart); @@ -153,12 +167,12 @@ public String getReport() { NumberFormat f = new DecimalFormat("#0.000000"); String report = "

            Dynamic Degree Report

            " - + "
            " - + "
            Bounds: from " + f.format(bounds.getLow()) + " to " + f.format(bounds.getHigh()) - + "
            Window: " + window - + "
            Tick: " + tick - + "

            Average degrees over time:

            " - + "

            " + degreeImageFile; + + "
            " + + "
            Bounds: from " + f.format(bounds.getLow()) + " to " + f.format(bounds.getHigh()) + + "
            Window: " + window + + "
            Tick: " + tick + + "

            Average degrees over time:

            " + + "

            " + degreeImageFile; /*for (Interval averages : averages) { report += averages.toString(dynamicModel.getTimeFormat().equals(DynamicModel.TimeFormat.DOUBLE)) + "
            "; @@ -174,20 +188,42 @@ public void loop(GraphView window, Interval interval) { if (isDirected) { directedGraph = graphModel.getDirectedGraph(window); } + TimeRepresentation tr = graphModel.getConfiguration().getTimeRepresentation(); long sum = 0; for (Node n : graph.getNodes().toArray()) { int degree = graph.getDegree(n); if (!averageOnly) { - n.setAttribute(dynamicDegreeColumn, degree, interval.getLow()); + switch (tr) { + case INTERVAL: + n.setAttribute(dynamicDegreeColumn, degree, + new Interval(interval.getLow(), interval.getLow() + tick)); + break; + case TIMESTAMP: + n.setAttribute(dynamicDegreeColumn, degree, interval.getLow()); + n.setAttribute(dynamicDegreeColumn, degree, interval.getHigh()); + break; + } if (isDirected) { int indegree = directedGraph.getInDegree(n); - n.setAttribute(dynamicInDegreeColumn, indegree, interval.getLow()); - int outdegree = directedGraph.getOutDegree(n); - n.setAttribute(dynamicOutDegreeColumn, outdegree, interval.getLow()); + + switch (tr) { + case INTERVAL: + n.setAttribute(dynamicInDegreeColumn, indegree, + new Interval(interval.getLow(), interval.getLow() + tick)); + n.setAttribute(dynamicOutDegreeColumn, outdegree, + new Interval(interval.getLow(), interval.getLow() + tick)); + break; + case TIMESTAMP: + n.setAttribute(dynamicInDegreeColumn, indegree, interval.getLow()); + n.setAttribute(dynamicInDegreeColumn, indegree, interval.getHigh()); + n.setAttribute(dynamicOutDegreeColumn, outdegree, interval.getLow()); + n.setAttribute(dynamicOutDegreeColumn, outdegree, interval.getHigh()); + break; + } } } sum += degree; @@ -199,9 +235,9 @@ public void loop(GraphView window, Interval interval) { double avg = sum / (double) graph.getNodeCount(); averages.put(interval.getLow(), avg); averages.put(interval.getHigh(), avg); - - graph.setAttribute(DYNAMIC_AVGDEGREE, avg, interval.getLow()); - graph.setAttribute(DYNAMIC_AVGDEGREE, avg, interval.getHigh()); + + graphModel.getGraphVisible().setAttribute(DYNAMIC_AVGDEGREE, avg, interval.getLow()); + graphModel.getGraphVisible().setAttribute(DYNAMIC_AVGDEGREE, avg, interval.getHigh()); } @Override @@ -209,8 +245,8 @@ public void end() { } @Override - public void setBounds(Interval bounds) { - this.bounds = bounds; + public double getWindow() { + return window; } @Override @@ -219,18 +255,13 @@ public void setWindow(double window) { } @Override - public void setTick(double tick) { - this.tick = tick; - } - - @Override - public double getWindow() { - return window; + public double getTick() { + return tick; } @Override - public double getTick() { - return tick; + public void setTick(double tick) { + this.tick = tick; } @Override @@ -238,22 +269,27 @@ public Interval getBounds() { return bounds; } - public void setDirected(boolean isDirected) { - this.isDirected = isDirected; + @Override + public void setBounds(Interval bounds) { + this.bounds = bounds; } public boolean isDirected() { return isDirected; } - public void setAverageOnly(boolean averageOnly) { - this.averageOnly = averageOnly; + public void setDirected(boolean isDirected) { + this.isDirected = isDirected; } public boolean isAverageOnly() { return averageOnly; } + public void setAverageOnly(boolean averageOnly) { + this.averageOnly = averageOnly; + } + @Override public boolean cancel() { cancel = true; diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/DynamicNbEdges.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/DynamicNbEdges.java index 0779f035e1..680b9c401e 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/DynamicNbEdges.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/DynamicNbEdges.java @@ -39,17 +39,17 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin.dynamic; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.HashMap; import java.util.Map; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.attribute.time.Interval; import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphModel; import org.gephi.graph.api.GraphView; +import org.gephi.graph.api.Interval; import org.gephi.statistics.plugin.ChartUtils; import org.gephi.statistics.spi.DynamicStatistics; import org.jfree.chart.ChartFactory; @@ -59,7 +59,6 @@ Development and Distribution License("CDDL") (collectively, the import org.jfree.data.xy.XYSeriesCollection; /** - * * @author SΓ©bastien Heymann */ public class DynamicNbEdges implements DynamicStatistics { @@ -74,9 +73,9 @@ public class DynamicNbEdges implements DynamicStatistics { private Map counts; @Override - public void execute(GraphModel graphModel, AttributeModel attributeModel) { + public void execute(GraphModel graphModel) { this.graphModel = graphModel; - this.counts = new HashMap(); + this.counts = new HashMap<>(); } @Override @@ -88,14 +87,14 @@ public String getReport() { dataset.addSeries(dSeries); JFreeChart chart = ChartFactory.createXYLineChart( - "# Edges Time Series", - "Time", - "# Edges", - dataset, - PlotOrientation.VERTICAL, - true, - false, - false); + "# Edges Time Series", + "Time", + "# Edges", + dataset, + PlotOrientation.VERTICAL, + true, + false, + false); chart.removeLegend(); ChartUtils.decorateChart(chart); @@ -105,12 +104,12 @@ public String getReport() { NumberFormat f = new DecimalFormat("#0.000"); String report = "

            Dynamic Number of Edges Report

            " - + "
            " - + "
            Bounds: from " + f.format(bounds.getLow()) + " to " + f.format(bounds.getHigh()) - + "
            Window: " + window - + "
            Tick: " + tick - + "

            Number of edges over time:

            " - + "

            " + imageFile; + + "
            " + + "
            Bounds: from " + f.format(bounds.getLow()) + " to " + f.format(bounds.getHigh()) + + "
            Window: " + window + + "
            Tick: " + tick + + "

            Number of edges over time:

            " + + "

            " + imageFile; /*for (Interval count : counts) { report += count.toString(dynamicModel.getTimeFormat().equals(DynamicModel.TimeFormat.DOUBLE)) + "
            "; @@ -124,9 +123,9 @@ public void loop(GraphView window, Interval interval) { Graph graph = graphModel.getGraph(window); int count = graph.getEdgeCount(); - - graph.setAttribute(NB_EDGES, count, interval.getLow()); - graph.setAttribute(NB_EDGES, count, interval.getHigh()); + + graphModel.getGraphVisible().setAttribute(NB_EDGES, count, interval.getLow()); + graphModel.getGraphVisible().setAttribute(NB_EDGES, count, interval.getHigh()); counts.put(interval.getLow(), count); counts.put(interval.getHigh(), count); @@ -136,8 +135,9 @@ public void loop(GraphView window, Interval interval) { public void end() { } - public void setBounds(Interval bounds) { - this.bounds = bounds; + @Override + public double getWindow() { + return window; } @Override @@ -146,22 +146,22 @@ public void setWindow(double window) { } @Override - public void setTick(double tick) { - this.tick = tick; + public double getTick() { + return tick; } @Override - public double getWindow() { - return window; + public void setTick(double tick) { + this.tick = tick; } @Override - public double getTick() { - return tick; + public Interval getBounds() { + return bounds; } @Override - public Interval getBounds() { - return bounds; + public void setBounds(Interval bounds) { + this.bounds = bounds; } } diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/DynamicNbNodes.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/DynamicNbNodes.java index 8980b285ab..dd30f79534 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/DynamicNbNodes.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/DynamicNbNodes.java @@ -39,17 +39,17 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin.dynamic; import java.text.DecimalFormat; import java.text.NumberFormat; import java.util.HashMap; import java.util.Map; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.attribute.time.Interval; import org.gephi.graph.api.Graph; import org.gephi.graph.api.GraphModel; import org.gephi.graph.api.GraphView; +import org.gephi.graph.api.Interval; import org.gephi.statistics.plugin.ChartUtils; import org.gephi.statistics.spi.DynamicStatistics; import org.jfree.chart.ChartFactory; @@ -59,7 +59,6 @@ Development and Distribution License("CDDL") (collectively, the import org.jfree.data.xy.XYSeriesCollection; /** - * * @author SΓ©bastien Heymann */ public class DynamicNbNodes implements DynamicStatistics { @@ -74,9 +73,9 @@ public class DynamicNbNodes implements DynamicStatistics { private Map counts; @Override - public void execute(GraphModel graphModel, AttributeModel attributeModel) { + public void execute(GraphModel graphModel) { this.graphModel = graphModel; - this.counts = new HashMap(); + this.counts = new HashMap<>(); } @Override @@ -88,14 +87,14 @@ public String getReport() { dataset.addSeries(dSeries); JFreeChart chart = ChartFactory.createXYLineChart( - "# Nodes Time Series", - "Time", - "# Nodes", - dataset, - PlotOrientation.VERTICAL, - true, - false, - false); + "# Nodes Time Series", + "Time", + "# Nodes", + dataset, + PlotOrientation.VERTICAL, + true, + false, + false); chart.removeLegend(); ChartUtils.decorateChart(chart); @@ -105,12 +104,12 @@ public String getReport() { NumberFormat f = new DecimalFormat("#0.000"); String report = "

            Dynamic Number of Nodes Report

            " - + "
            " - + "
            Bounds: from " + f.format(bounds.getLow()) + " to " + f.format(bounds.getHigh()) - + "
            Window: " + window - + "
            Tick: " + tick - + "

            Number of nodes over time:

            " - + "

            " + imageFile; + + "
            " + + "
            Bounds: from " + f.format(bounds.getLow()) + " to " + f.format(bounds.getHigh()) + + "
            Window: " + window + + "
            Tick: " + tick + + "

            Number of nodes over time:

            " + + "

            " + imageFile; /*for (Interval count : counts) { report += count.toString(dynamicModel.getTimeFormat().equals(DynamicModel.TimeFormat.DOUBLE)) + "
            "; @@ -125,8 +124,8 @@ public void loop(GraphView window, Interval interval) { int count = graph.getNodeCount(); - graph.setAttribute(NB_NODES, count, interval.getLow()); - graph.setAttribute(NB_NODES, count, interval.getHigh()); + graphModel.getGraphVisible().setAttribute(NB_NODES, count, interval.getLow()); + graphModel.getGraphVisible().setAttribute(NB_NODES, count, interval.getHigh()); counts.put(interval.getLow(), count); counts.put(interval.getHigh(), count); @@ -137,8 +136,8 @@ public void end() { } @Override - public void setBounds(Interval bounds) { - this.bounds = bounds; + public double getWindow() { + return window; } @Override @@ -147,22 +146,22 @@ public void setWindow(double window) { } @Override - public void setTick(double tick) { - this.tick = tick; + public double getTick() { + return tick; } @Override - public double getWindow() { - return window; + public void setTick(double tick) { + this.tick = tick; } @Override - public double getTick() { - return tick; + public Interval getBounds() { + return bounds; } @Override - public Interval getBounds() { - return bounds; + public void setBounds(Interval bounds) { + this.bounds = bounds; } } diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/builder/DynamicClusteringCoefficientBuilder.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/builder/DynamicClusteringCoefficientBuilder.java index e9c92f0b8f..8f2cedb17d 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/builder/DynamicClusteringCoefficientBuilder.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/builder/DynamicClusteringCoefficientBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin.dynamic.builder; import org.gephi.statistics.plugin.dynamic.DynamicClusteringCoefficient; @@ -48,7 +49,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = StatisticsBuilder.class) diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/builder/DynamicDegreeBuilder.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/builder/DynamicDegreeBuilder.java index d84298fed9..e9f82ad31a 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/builder/DynamicDegreeBuilder.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/builder/DynamicDegreeBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin.dynamic.builder; import org.gephi.statistics.plugin.dynamic.DynamicDegree; @@ -48,7 +49,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = StatisticsBuilder.class) diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/builder/DynamicNbEdgesBuilder.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/builder/DynamicNbEdgesBuilder.java index 08c3b23463..709bbbe7cc 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/builder/DynamicNbEdgesBuilder.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/builder/DynamicNbEdgesBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin.dynamic.builder; import org.gephi.statistics.plugin.dynamic.DynamicNbEdges; @@ -48,7 +49,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author SΓ©bastien Heymann */ @ServiceProvider(service = StatisticsBuilder.class) @@ -68,5 +68,5 @@ public Statistics getStatistics() { public Class getStatisticsClass() { return DynamicNbEdges.class; } - + } diff --git a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/builder/DynamicNbNodesBuilder.java b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/builder/DynamicNbNodesBuilder.java index dabf43955f..27d4cdae72 100644 --- a/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/builder/DynamicNbNodesBuilder.java +++ b/modules/StatisticsPlugin/src/main/java/org/gephi/statistics/plugin/dynamic/builder/DynamicNbNodesBuilder.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin.dynamic.builder; import org.gephi.statistics.plugin.dynamic.DynamicNbNodes; @@ -48,7 +49,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author SΓ©bastien Heymann */ @ServiceProvider(service = StatisticsBuilder.class) @@ -68,5 +68,5 @@ public Statistics getStatistics() { public Class getStatisticsClass() { return DynamicNbNodes.class; } - + } diff --git a/modules/StatisticsPlugin/src/main/nbm/manifest.mf b/modules/StatisticsPlugin/src/main/nbm/manifest.mf index 1c51f816cd..5690631ecf 100644 --- a/modules/StatisticsPlugin/src/main/nbm/manifest.mf +++ b/modules/StatisticsPlugin/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/statistics/plugin/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Plugin +OpenIDE-Module-Name: Statistics Plugin diff --git a/modules/StatisticsPlugin/src/main/nbm/module.xml b/modules/StatisticsPlugin/src/main/nbm/module.xml deleted file mode 100644 index 2ba99711e6..0000000000 --- a/modules/StatisticsPlugin/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle.properties index 5ec795c4be..741c76b58f 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle.properties @@ -1,7 +1,4 @@ -OpenIDE-Module-Name=Statistics Plugin -OpenIDE-Module-Display-Category=Plugin -OpenIDE-Module-Long-Description=\ - Standard statistics and metrics algorithms +OpenIDE-Module-Long-Description=Standard statistics and metrics algorithms OpenIDE-Module-Short-Description=Standard statistics and metrics algorithms Degree.nodecolumn.InDegree = In-Degree diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_ar.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_ca.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_ca.properties new file mode 100644 index 0000000000..e6f103c65c --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_ca.properties @@ -0,0 +1,9 @@ +OpenIDE-Module-Long-Description=Standard statistics and metrics algorithms +OpenIDE-Module-Short-Description=Standard statistics and metrics algorithms +Degree.nodecolumn.InDegree=Grau d'entrada +Degree.nodecolumn.OutDegree=Grau de sortida +Degree.nodecolumn.Degree=Grau +Degree.graphcolumn.AverageDegree=Grau mitjΰ +WeightedDegree.nodecolumn.InDegree=Weighted In-Degree +WeightedDegree.nodecolumn.OutDegree=Weighted Out-Degree +WeightedDegree.nodecolumn.Degree=Weighted Degree diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_cs.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_cs.properties index 5fa91e054c..5e7bd9b74a 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_cs.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_cs.properties @@ -1,19 +1,11 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 18\:46+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=Standardn\u00ed algoritmy statistik a metrik - -OpenIDE-Module-Short-Description=Standardn\u00ed algoritmy statistik a metrik - -Degree.nodecolumn.InDegree=Stupe\u0148 Dovnit\u0159 - -Degree.nodecolumn.OutDegree=Stupe\u0148 Ven - -Degree.nodecolumn.Degree=Stupe\u0148 - -Degree.graphcolumn.AverageDegree=Pr\u016fm\u011brn\u00fd stupe\u0148 +OpenIDE-Module-Long-Description=Standardnν algoritmy statistik a metrik +OpenIDE-Module-Short-Description=Standardnν algoritmy statistik a metrik + +Degree.nodecolumn.InDegree = Stupe\u0148 Dovnit\u0159 +Degree.nodecolumn.OutDegree = Stupe\u0148 Ven +Degree.nodecolumn.Degree = Stupe\u0148 +Degree.graphcolumn.AverageDegree = Pr\u016fm\u011brnύ stupe\u0148 + +WeightedDegree.nodecolumn.InDegree = Vα\u017eenύ stupe\u0148 dovnit\u0159 +WeightedDegree.nodecolumn.OutDegree = Vα\u017eenύ stupe\u0148 ven +WeightedDegree.nodecolumn.Degree = Vα\u017eenύ stupe\u0148 diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_de.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_de.properties new file mode 100644 index 0000000000..418648bbd5 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_de.properties @@ -0,0 +1,11 @@ +OpenIDE-Module-Long-Description=Standard Statistik- und Metrik-Algorithmen +OpenIDE-Module-Short-Description=Standard Statistik- und Metrik-Algorithmen + +Degree.nodecolumn.InDegree = Eingangsgrad +Degree.nodecolumn.OutDegree = Ausgangsgrad +Degree.nodecolumn.Degree = Grad +Degree.graphcolumn.AverageDegree = Mittlerer Grad + +WeightedDegree.nodecolumn.InDegree = Gewichteter Eingangsgrad +WeightedDegree.nodecolumn.OutDegree = Gewichteter Ausgangsgrad +WeightedDegree.nodecolumn.Degree = Gewichteter Grad diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_es.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_es.properties index 979439a22f..3779e56c74 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_es.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_es.properties @@ -1,20 +1,11 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-16 23\:09+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Algoritmos est\u00e1ndar de estad\u00edsticas y m\u00e9tricas - -OpenIDE-Module-Short-Description=Algoritmos est\u00e1ndar de estad\u00edsticas y m\u00e9tricas - -Degree.nodecolumn.InDegree=Grado de entrada - -Degree.nodecolumn.OutDegree=Grado de salida - -Degree.nodecolumn.Degree=Grado - -Degree.graphcolumn.AverageDegree=Grado promedio +OpenIDE-Module-Long-Description=Algoritmos estαndar de estadνsticas y mιtricas +OpenIDE-Module-Short-Description=Algoritmos estαndar de estadνsticas y mιtricas + +Degree.nodecolumn.InDegree = Grado de entrada +Degree.nodecolumn.OutDegree = Grado de salida +Degree.nodecolumn.Degree = Grado +Degree.graphcolumn.AverageDegree = Grado promedio + +WeightedDegree.nodecolumn.InDegree = Grado de entrada con pesos +WeightedDegree.nodecolumn.OutDegree = Grado de salida con pesos +WeightedDegree.nodecolumn.Degree = Grado con pesos diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_fr.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_fr.properties index a19c2d0941..9aac6607bf 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_fr.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_fr.properties @@ -1,20 +1,11 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-08 15\:09+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Statistiques standard et algorithmes de m\u00e9trique - -OpenIDE-Module-Short-Description=Statistiques standard et algorithmes de m\u00e9trique - -Degree.nodecolumn.InDegree=Degr\u00e9 Entrant - -Degree.nodecolumn.OutDegree=Degr\u00e9 Sortant - -Degree.nodecolumn.Degree=Degr\u00e9 - -Degree.graphcolumn.AverageDegree=Degr\u00e9 Moyen +OpenIDE-Module-Long-Description=Statistiques standard et algorithmes de mιtrique +OpenIDE-Module-Short-Description=Statistiques standard et algorithmes de mιtrique + +Degree.nodecolumn.InDegree = Degrι Entrant +Degree.nodecolumn.OutDegree = Degrι Sortant +Degree.nodecolumn.Degree = Degrι +Degree.graphcolumn.AverageDegree = Degrι Moyen + +WeightedDegree.nodecolumn.InDegree = Degrι Entrant Pondιrι +WeightedDegree.nodecolumn.OutDegree = Degrι Sortant Pondιrι +WeightedDegree.nodecolumn.Degree = Degrι pondιrι diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_he.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_he.properties new file mode 100644 index 0000000000..a1cb6d803a --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_he.properties @@ -0,0 +1,9 @@ +OpenIDE-Module-Long-Description=Standard statistics and metrics algorithms +OpenIDE-Module-Short-Description=Standard statistics and metrics algorithms +Degree.nodecolumn.InDegree=\u05d3\u05e8\u05d2\u05d4 \u05e0\u05db\u05e0\u05e1\u05ea +Degree.nodecolumn.OutDegree=\u05d3\u05e8\u05d2\u05d4 \u05d9\u05d5\u05e6\u05d0\u05ea +Degree.nodecolumn.Degree=\u05d3\u05e8\u05d2\u05d4 +Degree.graphcolumn.AverageDegree=Average Degree +WeightedDegree.nodecolumn.InDegree=Weighted In-Degree +WeightedDegree.nodecolumn.OutDegree=Weighted Out-Degree +WeightedDegree.nodecolumn.Degree=Weighted Degree diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_hu.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_hu.properties new file mode 100644 index 0000000000..41426770d5 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_hu.properties @@ -0,0 +1,5 @@ + + +Degree.nodecolumn.InDegree=Fokozatban +OpenIDE-Module-Short-Description=Szabv\u00E1nyos statisztikai \u00E9s metrikai algoritmusok +OpenIDE-Module-Long-Description=Szabv\u00E1nyos statisztikai \u00E9s metrikai algoritmusok diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_it.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_it.properties new file mode 100644 index 0000000000..0e9c07e0fe --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_it.properties @@ -0,0 +1,9 @@ +OpenIDE-Module-Long-Description=Standard statistics and metrics algorithms +OpenIDE-Module-Short-Description=Standard statistics and metrics algorithms +Degree.nodecolumn.InDegree=Grado entrante +Degree.nodecolumn.OutDegree=Grado uscente +Degree.nodecolumn.Degree=Grado +Degree.graphcolumn.AverageDegree=Grado medio +WeightedDegree.nodecolumn.InDegree=Grado entrante pesato +WeightedDegree.nodecolumn.OutDegree=Grado uscente pesato +WeightedDegree.nodecolumn.Degree=Grado pesato diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_ja.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_ja.properties index e8d8c13df5..929127564d 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_ja.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_ja.properties @@ -1,19 +1,11 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-15 01\:31+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u6a19\u6e96\u7684\u306a\u7d71\u8a08\u3068\u8a08\u91cf\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0 - -OpenIDE-Module-Short-Description=\u6a19\u6e96\u7684\u306a\u7d71\u8a08\u3068\u8a08\u91cf\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0 - -Degree.nodecolumn.InDegree=\u5165\u6b21\u6570 - -Degree.nodecolumn.OutDegree=\u51fa\u6b21\u6570 - -Degree.nodecolumn.Degree=\u6b21\u6570 - -Degree.graphcolumn.AverageDegree=\u5e73\u5747\u6b21\u6570 +OpenIDE-Module-Long-Description=\u6a19\u6e96\u7684\u306a\u7d71\u8a08\u3068\u8a08\u91cf\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0 +OpenIDE-Module-Short-Description=\u6a19\u6e96\u7684\u306a\u7d71\u8a08\u3068\u8a08\u91cf\u306e\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0 + +Degree.nodecolumn.InDegree = \u5165\u6b21\u6570 +Degree.nodecolumn.OutDegree = \u51fa\u6b21\u6570 +Degree.nodecolumn.Degree = \u6b21\u6570 +Degree.graphcolumn.AverageDegree = \u5e73\u5747\u6b21\u6570 + +# WeightedDegree.nodecolumn.InDegree = Weighted In-Degree +# WeightedDegree.nodecolumn.OutDegree = Weighted Out-Degree +WeightedDegree.nodecolumn.Degree = \u91cd\u307f\u4ed8\u304d\u6b21\u6570 diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_nl.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_nl.properties new file mode 100644 index 0000000000..ff65d2d081 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_nl.properties @@ -0,0 +1,9 @@ +OpenIDE-Module-Long-Description=Standard statistics and metrics algorithms +OpenIDE-Module-Short-Description=Standard statistics and metrics algorithms +Degree.nodecolumn.InDegree=In-Degree +Degree.nodecolumn.OutDegree=Out-Degree +Degree.nodecolumn.Degree=Degree +Degree.graphcolumn.AverageDegree=Average Degree +WeightedDegree.nodecolumn.InDegree=Weighted In-Degree +WeightedDegree.nodecolumn.OutDegree=Weighted Out-Degree +WeightedDegree.nodecolumn.Degree=Weighted Degree diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_pt_BR.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_pt_BR.properties index 4aef6773ed..f22202adb2 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_pt_BR.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_pt_BR.properties @@ -1,20 +1,11 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -# C\u00e9lio Faria Jr. , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-17 13\:13+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Algoritmos padr\u00e3o de estat\u00edsticas e m\u00e9tricas - -OpenIDE-Module-Short-Description=Algoritmos padr\u00e3o de estat\u00edsticas e m\u00e9tricas - -Degree.nodecolumn.InDegree=Grau de entrada - -Degree.nodecolumn.OutDegree=Grau de sa\u00edda - -Degree.nodecolumn.Degree=Grau - -Degree.graphcolumn.AverageDegree=Grau m\u00e9dio +OpenIDE-Module-Long-Description=Algoritmos padrγo de estatνsticas e mιtricas +OpenIDE-Module-Short-Description=Algoritmos padrγo de estatνsticas e mιtricas + +Degree.nodecolumn.InDegree = Grau de entrada +Degree.nodecolumn.OutDegree = Grau de saνda +Degree.nodecolumn.Degree = Grau +Degree.graphcolumn.AverageDegree = Grau mιdio + +WeightedDegree.nodecolumn.InDegree = Grau de entrada ponderado +WeightedDegree.nodecolumn.OutDegree = Grau de saνda ponderado +WeightedDegree.nodecolumn.Degree = Grau ponderado diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_ro.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_ro.properties new file mode 100644 index 0000000000..c6b4ee5579 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_ro.properties @@ -0,0 +1,11 @@ + + +OpenIDE-Module-Short-Description=Algoritmi standard de statistic\u0103 \u0219i metric\u0103 +OpenIDE-Module-Long-Description=Algoritmi standard de statistic\u0103 \u0219i metric\u0103 +Degree.nodecolumn.InDegree=Grad Interior +Degree.nodecolumn.OutDegree=Grad Exterior +Degree.nodecolumn.Degree=Grad +Degree.graphcolumn.AverageDegree=Grad mediu +WeightedDegree.nodecolumn.InDegree=Grad interior ponderat +WeightedDegree.nodecolumn.OutDegree=Grad exterior ponderat +WeightedDegree.nodecolumn.Degree=Grad ponderat diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_ru.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_ru.properties index 566cb40416..4aa8f02f67 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_ru.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_ru.properties @@ -1,19 +1,11 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-15 08\:32+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a \u0438 \u043c\u0435\u0442\u0440\u0438\u043a - -OpenIDE-Module-Short-Description=\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a \u0438 \u043c\u0435\u0442\u0440\u0438\u043a - -Degree.nodecolumn.InDegree=\u0412\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c - -Degree.nodecolumn.OutDegree=\u0418\u0441\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c - -Degree.nodecolumn.Degree=\u0421\u0443\u043c\u043c\u0430\u0440\u043d\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c - -Degree.graphcolumn.AverageDegree=\u0421\u0440\u0435\u0434\u043d\u044f\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c +OpenIDE-Module-Long-Description=\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a \u0438 \u043c\u0435\u0442\u0440\u0438\u043a +OpenIDE-Module-Short-Description=\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a \u0438 \u043c\u0435\u0442\u0440\u0438\u043a + +Degree.nodecolumn.InDegree = \u0412\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c +Degree.nodecolumn.OutDegree = \u0418\u0441\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c +Degree.nodecolumn.Degree = \u0421\u0443\u043c\u043c\u0430\u0440\u043d\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c +Degree.graphcolumn.AverageDegree = \u0421\u0440\u0435\u0434\u043d\u044f\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c + +# WeightedDegree.nodecolumn.InDegree = Weighted In-Degree +# WeightedDegree.nodecolumn.OutDegree = Weighted Out-Degree +WeightedDegree.nodecolumn.Degree = \u0412\u0437\u0432\u0435\u0448\u0435\u043d\u043d\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_th.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_tr.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_tr.properties new file mode 100644 index 0000000000..8b36be55c8 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_tr.properties @@ -0,0 +1,9 @@ +OpenIDE-Module-Long-Description=Standard statistics and metrics algorithms +OpenIDE-Module-Short-Description=Standard statistics and metrics algorithms +Degree.nodecolumn.InDegree=In-Degree +Degree.nodecolumn.OutDegree=Out-Degree +Degree.nodecolumn.Degree=Derece +Degree.graphcolumn.AverageDegree=Average Degree +WeightedDegree.nodecolumn.InDegree=Weighted In-Degree +WeightedDegree.nodecolumn.OutDegree=Weighted Out-Degree +WeightedDegree.nodecolumn.Degree=Weighted Degree diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_uk.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_uk.properties new file mode 100644 index 0000000000..090dabdfd5 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_uk.properties @@ -0,0 +1,9 @@ +OpenIDE-Module-Long-Description=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0456 \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C\u0438 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0438 \u0442\u0430 \u043F\u043E\u043A\u0430\u0437\u043D\u0438\u043A\u0456\u0432 +OpenIDE-Module-Short-Description=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0456 \u0430\u043B\u0433\u043E\u0440\u0438\u0442\u043C\u0438 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0438 \u0442\u0430 \u043F\u043E\u043A\u0430\u0437\u043D\u0438\u043A\u0456\u0432 +Degree.nodecolumn.InDegree=\u0406\u043D-\u0433\u0440\u0430\u0434\u0443\u0441 +Degree.nodecolumn.OutDegree=\u0412\u0438\u0445\u0456\u0434\u043D\u0438\u0439 \u0441\u0442\u0443\u043F\u0456\u043D\u044C +Degree.nodecolumn.Degree=\u0421\u0442\u0443\u043F\u0456\u043D\u044C +Degree.graphcolumn.AverageDegree=\u0421\u0435\u0440\u0435\u0434\u043D\u0456\u0439 \u0441\u0442\u0443\u043F\u0456\u043D\u044C +WeightedDegree.nodecolumn.InDegree=\u0417\u0432\u0430\u0436\u0435\u043D\u0438\u0439 \u0441\u0442\u0443\u043F\u0456\u043D\u044C +WeightedDegree.nodecolumn.OutDegree=\u0417\u0432\u0430\u0436\u0435\u043D\u0438\u0439 \u0432\u0438\u0445\u0456\u0434\u043D\u0438\u0439 \u0441\u0442\u0443\u043F\u0456\u043D\u044C +WeightedDegree.nodecolumn.Degree=\u0417\u0432\u0430\u0436\u0435\u043D\u0438\u0439 \u0441\u0442\u0443\u043F\u0456\u043D\u044C diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_zh_CN.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_zh_CN.properties index 0d3222ee83..8224684294 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_zh_CN.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_zh_CN.properties @@ -1,19 +1,11 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-15 09\:39+0000\nLast-Translator\: Xi-Nian Zuo \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u6807\u51c6\u7684\u7edf\u8ba1\u548c\u6307\u6807\u7b97\u6cd5 - -OpenIDE-Module-Short-Description=\u6807\u51c6\u7684\u7edf\u8ba1\u548c\u6307\u6807\u7b97\u6cd5 - -Degree.nodecolumn.InDegree=\u8fde\u5165\u5ea6 - -Degree.nodecolumn.OutDegree=\u8fde\u51fa\u5ea6 - -Degree.nodecolumn.Degree=\u5ea6 - -Degree.graphcolumn.AverageDegree=\u5e73\u5747\u5ea6 +OpenIDE-Module-Long-Description=\u6807\u51c6\u7684\u7edf\u8ba1\u548c\u6307\u6807\u7b97\u6cd5 +OpenIDE-Module-Short-Description=\u6807\u51c6\u7684\u7edf\u8ba1\u548c\u6307\u6807\u7b97\u6cd5 + +Degree.nodecolumn.InDegree = \u8fde\u5165\u5ea6 +Degree.nodecolumn.OutDegree = \u8fde\u51fa\u5ea6 +Degree.nodecolumn.Degree = \u5ea6 +Degree.graphcolumn.AverageDegree = \u5e73\u5747\u5ea6 + +WeightedDegree.nodecolumn.InDegree = \u52a0\u6743\u5165\u5ea6 +WeightedDegree.nodecolumn.OutDegree = \u52a0\u6743\u51fa\u5ea6 +WeightedDegree.nodecolumn.Degree = \u52a0\u6743\u5ea6 diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_zh_TW.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_zh_TW.properties new file mode 100644 index 0000000000..cb7ece1938 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/Bundle_zh_TW.properties @@ -0,0 +1,11 @@ +OpenIDE-Module-Long-Description=\u57fa\u672c\u7d71\u8a08\u8207\u6307\u6a19\u6f14\u7b97\u6cd5 +OpenIDE-Module-Short-Description=\u57fa\u672c\u7d71\u8a08\u8207\u6307\u6a19\u6f14\u7b97\u6cd5 + +Degree.nodecolumn.InDegree = \u9023\u5165\u5ea6\u4e2d\u5fc3\u6027 +Degree.nodecolumn.OutDegree = \u9023\u51fa\u5ea6\u4e2d\u5fc3\u6027 +Degree.nodecolumn.Degree = \u5ea6\u4e2d\u5fc3\u6027 +Degree.graphcolumn.AverageDegree = \u5e73\u5747\u5ea6\u4e2d\u5fc3\u6027 + +WeightedDegree.nodecolumn.InDegree = \u52a0\u6b0a\u9023\u5165\u5ea6\u4e2d\u5fc3\u6027 +WeightedDegree.nodecolumn.OutDegree = \u52a0\u6b0a\u9023\u51fa\u5ea6\u4e2d\u5fc3\u6027 +WeightedDegree.nodecolumn.Degree = \u52a0\u6b0a\u5ea6\u4e2d\u5fc3\u6027 diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle.properties index 00a381e6f1..26d2f2d902 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle.properties @@ -3,6 +3,7 @@ ClusteringCoefficent.name=Clustering Coefficient GraphDistance.name=Graph Distance DegreeDistribution.name=Degree Distribution Modularity.name=Modularity +StatisticalInference.name=Stat. Inference Clustering PageRank.name=Page Rank Hits.name=HITS InOutDegree.name=InOut Degree diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_ar.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_ca.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_ca.properties new file mode 100644 index 0000000000..4f19873777 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_ca.properties @@ -0,0 +1,11 @@ +GraphDensity.name=Densitat +ClusteringCoefficent.name=Coeficient de clusteritzaciσ +GraphDistance.name=Distΰncia del graf +DegreeDistribution.name=Grau de distribuciσ +Modularity.name=Modularitat +PageRank.name=Rang de la Pΰgina +Hits.name=HITS +InOutDegree.name=Grau d'entrada i sortida +ConnectedComponents.name=Components connectats +EigenvectorCentrality.name=Eigenvector Centrality +WeightedDegree.name=Weighted Degree diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_cs.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_cs.properties index bfc5281b9f..43c273ce6c 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_cs.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_cs.properties @@ -1,29 +1,11 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-06 21\:27+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -GraphDensity.name=Hustota - -ClusteringCoefficent.name=Koeficient shlukov\u00e1n\u00ed - -GraphDistance.name=Vzd\u00e1lenost grafu - -DegreeDistribution.name=Rozd\u011blen\u00ed stup\u0148\u016f - -Modularity.name=Modularita - -PageRank.name=Hodnost str\u00e1nky - -Hits.name=HITS - -InOutDegree.name=Stupe\u0148 VenDovnit\u0159 - -ConnectedComponents.name=P\u0159ipojen\u00e9 komponenty - -EigenvectorCentrality.name=Centr\u00e1lnost vlastn\u00edho vektoru - -WeightedDegree.name=V\u00e1\u017een\u00fd stupe\u0148 +GraphDensity.name=Hustota +ClusteringCoefficent.name=Koeficient shlukovαnν +GraphDistance.name=Vzdαlenost grafu +DegreeDistribution.name=Rozd\u011blenν stup\u0148\u016f +Modularity.name=Modularita +PageRank.name=Hodnost strαnky +Hits.name=HITS +InOutDegree.name=Stupe\u0148 VenDovnit\u0159 +ConnectedComponents.name=P\u0159ipojenι komponenty +EigenvectorCentrality.name=Centrαlnost vlastnνho vektoru +WeightedDegree.name=Vα\u017eenύ stupe\u0148 diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_de.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_de.properties new file mode 100644 index 0000000000..a780c50e1f --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_de.properties @@ -0,0 +1,11 @@ +GraphDensity.name=Kantendichte +ClusteringCoefficent.name=Clusteringkoeffizient +GraphDistance.name=Graph Distanz +DegreeDistribution.name=Knotengrad-Hδufigkeiten +Modularity.name=Modularitδt +PageRank.name=Page Rank +Hits.name=TREFFER +InOutDegree.name=Ein-/Ausgangsgrad +ConnectedComponents.name=Verbundene Komponeneten +EigenvectorCentrality.name=Eigenvektor-Zentralitδt +WeightedDegree.name=Gewichteter Grad diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_el.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_el.properties new file mode 100644 index 0000000000..5643f3eb87 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_el.properties @@ -0,0 +1,14 @@ + + +GraphDensity.name=\u03A0\u03C5\u03BA\u03BD\u03CC\u03C4\u03B7\u03C4\u03B1 +ClusteringCoefficent.name=\u03A3\u03C5\u03BD\u03C4\u03B5\u03BB\u03B5\u03C3\u03C4\u03AE\u03C2 \u03A3\u03C5\u03C3\u03C4\u03B1\u03B4\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7\u03C2 (clustering coefficient) +GraphDistance.name=\u0391\u03C0\u03CC\u03C3\u03C4\u03B1\u03C3\u03B7 \u03B3\u03C1\u03B1\u03C6\u03AE\u03BC\u03B1\u03C4\u03BF\u03C2 +DegreeDistribution.name=\u039A\u03B1\u03C4\u03B1\u03BD\u03BF\u03BC\u03AE \u03B2\u03B1\u03B8\u03BC\u03CE\u03BD +Modularity.name=Modularity +StatisticalInference.name=\u03A3\u03C5\u03C3\u03C4\u03B1\u03B4\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7 \u03BC\u03B5 Statistical Inference +Hits.name=HITS +InOutDegree.name=\u0392\u03B1\u03B8\u03BC\u03CC\u03C2 \u0395\u03B9\u03C3\u03CC\u03B4\u03BF\u03C5/\u0395\u03BE\u03CC\u03B4\u03BF\u03C5 InOut +EigenvectorCentrality.name=\u039A\u03B5\u03BD\u03C4\u03C1\u03B9\u03BA\u03CC\u03C4\u03B7\u03C4\u03B1 \u03BC\u03B5 \u03B2\u03AC\u03C3\u03B7 \u03B9\u03B4\u03B9\u03BF\u03B4\u03B9\u03B1\u03BD\u03CD\u03C3\u03BC\u03B1\u03C4\u03B1 (Eigenvector Centrality) +WeightedDegree.name=\u03A3\u03C4\u03B1\u03B8\u03BC\u03B9\u03C3\u03BC\u03AD\u03BD\u03BF\u03C2 \u0392\u03B1\u03B8\u03BC\u03CC\u03C2 +PageRank.name=Page Rank +ConnectedComponents.name=\u03A3\u03C5\u03BD\u03B5\u03BA\u03C4\u03B9\u03BA\u03AD\u03C2 \u03A3\u03C5\u03BD\u03B9\u03C3\u03C4\u03CE\u03C3\u03B5\u03C2 (Connected Components) diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_es.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_es.properties index 8da3c9780e..8245e281f6 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_es.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_es.properties @@ -1,29 +1,12 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:58+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - GraphDensity.name=Densidad - ClusteringCoefficent.name=Coeficiente de clustering - GraphDistance.name=Distancia de grafo - -DegreeDistribution.name=Distribuci\u00f3n de grado - +DegreeDistribution.name=Distribuciσn de grado Modularity.name=Modularidad - PageRank.name=Page Rank - Hits.name=HITS - InOutDegree.name=Grado de entrada/salida - ConnectedComponents.name=Componentes Conectados - EigenvectorCentrality.name=Centralidad de vector propio - WeightedDegree.name=Grado con pesos +StatisticalInference.name=Agrupaci\u00F3n de inferencia estad\u00EDstica diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_fr.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_fr.properties index 7a161b997f..ddfe41a1ea 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_fr.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_fr.properties @@ -1,29 +1,12 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:58+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -GraphDensity.name=Densit\u00e9 - +GraphDensity.name=Densitι ClusteringCoefficent.name=Coefficient de clustering - GraphDistance.name=Distance - -DegreeDistribution.name=Distribution du degr\u00e9 - -Modularity.name=Modularit\u00e9 - +DegreeDistribution.name=Distribution du degrι +Modularity.name=Modularitι PageRank.name=Page Rank - Hits.name=HITS - -InOutDegree.name=Degr\u00e9 entrant/sortant - +InOutDegree.name=Degrι entrant/sortant ConnectedComponents.name=Composantes connexes - -EigenvectorCentrality.name=Centralit\u00e9 Eigenvector - -WeightedDegree.name=Degr\u00e9 pond\u00e9r\u00e9 +EigenvectorCentrality.name=Centralitι Eigenvector +WeightedDegree.name=Degrι pondιrι +StatisticalInference.name=Partitionnement par Inf\u00E9rence Statistique diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_he.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_he.properties new file mode 100644 index 0000000000..34fe8035f7 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_he.properties @@ -0,0 +1,11 @@ +GraphDensity.name=Density +ClusteringCoefficent.name=Clustering Coefficient +GraphDistance.name=Graph Distance +DegreeDistribution.name=Degree Distribution +Modularity.name=Modularity +PageRank.name=Page Rank +Hits.name=HITS +InOutDegree.name=InOut Degree +ConnectedComponents.name=Connected Components +EigenvectorCentrality.name=Eigenvector Centrality +WeightedDegree.name=Weighted Degree diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_hu.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_hu.properties new file mode 100644 index 0000000000..76b51507eb --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_hu.properties @@ -0,0 +1,12 @@ + + +ConnectedComponents.name=Csatlakoztatott komponensek +DegreeDistribution.name=Fokozat-eloszl\u00E1s +Modularity.name=Modularit\u00E1s +EigenvectorCentrality.name=Saj\u00E1tvektor-centralit\u00E1s +ClusteringCoefficent.name=Klaszterez\u00E9si egy\u00FCtthat\u00F3 +StatisticalInference.name=Statisztika. K\u00F6vetkeztet\u00E9si klaszterez\u00E9s +InOutDegree.name=InOut fokozat +WeightedDegree.name=S\u00FAlyozott fok +GraphDistance.name=Grafikon t\u00E1vols\u00E1g +GraphDensity.name=S\u0171r\u0171s\u00E9g diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_it.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_it.properties new file mode 100644 index 0000000000..aceafb3d1f --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_it.properties @@ -0,0 +1,12 @@ +GraphDensity.name=Density +ClusteringCoefficent.name=Clustering Coefficient +GraphDistance.name=Graph Distance +DegreeDistribution.name=Degree Distribution +Modularity.name=Modularity +PageRank.name=Page Rank +Hits.name=HITS +InOutDegree.name=InOut Degree +ConnectedComponents.name=Connected Components +EigenvectorCentrality.name=Eigenvector Centrality +WeightedDegree.name=Grado pesato +StatisticalInference.name=Raggruppamento per inferenza statistica diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_ja.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_ja.properties index decf769cf4..5f42cf2348 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_ja.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_ja.properties @@ -1,29 +1,11 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-03 11\:02+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -GraphDensity.name=\u5bc6\u5ea6 - -ClusteringCoefficent.name=\u30af\u30e9\u30b9\u30bf\u5316\u4fc2\u6570 - -GraphDistance.name=\u30b0\u30e9\u30d5\u306e\u8ddd\u96e2 - -DegreeDistribution.name=\u6b21\u6570\u5206\u5e03 - -Modularity.name=\u30e2\u30b8\u30e5\u30e9\u30ea\u30c6\u30a3 - -PageRank.name=\u30da\u30fc\u30b8\u30e9\u30f3\u30af - -Hits.name=HITS - -InOutDegree.name=\u5165\u51fa\u6b21\u6570 - -ConnectedComponents.name=\u9023\u7d50\u6210\u5206 - -EigenvectorCentrality.name=\u56fa\u6709\u30d9\u30af\u30c8\u30eb\u4e2d\u5fc3\u6027 - -WeightedDegree.name=\u91cd\u307f\u4ed8\u304d\u6b21\u6570 +GraphDensity.name=\u5bc6\u5ea6 +ClusteringCoefficent.name=\u30af\u30e9\u30b9\u30bf\u5316\u4fc2\u6570 +GraphDistance.name=\u30b0\u30e9\u30d5\u306e\u8ddd\u96e2 +DegreeDistribution.name=\u6b21\u6570\u5206\u5e03 +Modularity.name=\u30e2\u30b8\u30e5\u30e9\u30ea\u30c6\u30a3 +PageRank.name=\u30da\u30fc\u30b8\u30e9\u30f3\u30af +Hits.name=HITS +InOutDegree.name=\u5165\u51fa\u6b21\u6570 +ConnectedComponents.name=\u9023\u7d50\u6210\u5206 +EigenvectorCentrality.name=\u56fa\u6709\u30d9\u30af\u30c8\u30eb\u4e2d\u5fc3\u6027 +WeightedDegree.name=\u91cd\u307f\u4ed8\u304d\u6b21\u6570 diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_ko.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_ko.properties new file mode 100644 index 0000000000..0c4122ed85 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_ko.properties @@ -0,0 +1,14 @@ + + +GraphDensity.name=\uBC00\uB3C4 +ClusteringCoefficent.name=\uACB0\uC9D1\uACC4\uC218 +GraphDistance.name=\uADF8\uB798\uD504 \uAC70\uB9AC +DegreeDistribution.name=\uCC28\uC218 \uBD84\uD3EC +Modularity.name=\uBAA8\uB4C8\uC131 +StatisticalInference.name=\uD1B5\uACC4\uC801 \uCD94\uB860 \uAD70\uC9D1\uD654 +PageRank.name=\uD398\uC774\uC9C0 \uACC4\uAE09 +Hits.name=HITS +InOutDegree.name=\uC785\uCD9C\uB825 \uCC28\uC218 +ConnectedComponents.name=\uC5F0\uACB0\uB41C \uAD6C\uC131\uC694\uC18C +EigenvectorCentrality.name=\uACE0\uC720\uBCA1\uD130 \uC911\uC2EC\uC131 +WeightedDegree.name=\uAC00\uC911\uCE58 \uCC28\uC218 diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_nl.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_nl.properties new file mode 100644 index 0000000000..f2b944eaa3 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_nl.properties @@ -0,0 +1,11 @@ +GraphDensity.name=Density +ClusteringCoefficent.name=Clustering Coefficient +GraphDistance.name=Graafafstand +DegreeDistribution.name=Degree Distribution +Modularity.name=Modularity +PageRank.name=Page Rank +Hits.name=HITS +InOutDegree.name=InOut Degree +ConnectedComponents.name=Connected Components +EigenvectorCentrality.name=Eigenvector Centrality +WeightedDegree.name=Weighted Degree diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_pt_BR.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_pt_BR.properties index 49b97a056a..76fb0751cc 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_pt_BR.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_pt_BR.properties @@ -1,29 +1,11 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 18\:22+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - GraphDensity.name=Densidade - ClusteringCoefficent.name=Coeficiente de Clustering - -GraphDistance.name=Dist\u00e2ncia do Grafo - -DegreeDistribution.name=Distribui\u00e7\u00e3o de Grau - +GraphDistance.name=Distβncia do Grafo +DegreeDistribution.name=Distribuiηγo de Grau Modularity.name=Modularidade - PageRank.name=Page Rank - Hits.name=HITS - InOutDegree.name=Grau InOut - ConnectedComponents.name=Componentes Conectados - EigenvectorCentrality.name=Centralidade de autovetor - WeightedDegree.name=Grau ponderado diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_ro.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_ro.properties new file mode 100644 index 0000000000..8da13741fa --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_ro.properties @@ -0,0 +1,14 @@ + + +GraphDensity.name=Densitate +ClusteringCoefficent.name=Coeficient de clusterizare +GraphDistance.name=Distan\u021B\u0103 graf +DegreeDistribution.name=Distribu\u021Bia Gradelor +Modularity.name=Modularitate +StatisticalInference.name=Clusterizare pe baza inferen\u021Bei statistice +PageRank.name=Page Rank +Hits.name=HITS +InOutDegree.name=Grad interior/exterior +ConnectedComponents.name=Componente Conexe +EigenvectorCentrality.name=Centralitatea vectorului propriu +WeightedDegree.name=Grad ponderat diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_ru.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_ru.properties index d7619d8e51..26c9081027 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_ru.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_ru.properties @@ -1,29 +1,11 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-20 07\:07+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - GraphDensity.name=\u041f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u044c - ClusteringCoefficent.name=\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 - GraphDistance.name=\u0420\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043d\u0430 \u0433\u0440\u0430\u0444\u0435 - DegreeDistribution.name=\u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u0438 - Modularity.name=\u041c\u043e\u0434\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u044c - PageRank.name=Page Rank - Hits.name=HITS - InOutDegree.name=\u0412\u0445\u043e\u0434\u044f\u0449\u0430\u044f-\u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c - ConnectedComponents.name=\u0421\u0432\u044f\u0437\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b - EigenvectorCentrality.name=\u041d\u0430\u043f\u0440\u044f\u0436\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u043f\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0432\u0435\u043a\u0442\u043e\u0440\u0430\u043c - WeightedDegree.name=\u0412\u0437\u0432\u0435\u0448\u0435\u043d\u043d\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_th.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_tr.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_tr.properties new file mode 100644 index 0000000000..397cb4e3e6 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_tr.properties @@ -0,0 +1,11 @@ +GraphDensity.name=Yo\u011funluk +ClusteringCoefficent.name=Clustering Coefficient +GraphDistance.name=Graph Distance +DegreeDistribution.name=Degree Distribution +Modularity.name=Modularity +PageRank.name=Page Rank +Hits.name=HITS +InOutDegree.name=InOut Degree +ConnectedComponents.name=Connected Components +EigenvectorCentrality.name=Eigenvector Centrality +WeightedDegree.name=Weighted Degree diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_uk.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_uk.properties new file mode 100644 index 0000000000..cfc1e2d746 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_uk.properties @@ -0,0 +1,12 @@ +EigenvectorCentrality.name=\u0426\u0435\u043D\u0442\u0440\u0430\u043B\u044C\u043D\u0456\u0441\u0442\u044C \u0432\u043B\u0430\u0441\u043D\u043E\u0433\u043E \u0432\u0435\u043A\u0442\u043E\u0440\u0430 +ClusteringCoefficent.name=\u041A\u043E\u0435\u0444\u0456\u0446\u0456\u0454\u043D\u0442 \u043A\u043B\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0456\u0457 +ConnectedComponents.name=\u041F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0456 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0438 +GraphDistance.name=\u0413\u0440\u0430\u0444\u0456\u043A \u0412\u0456\u0434\u0441\u0442\u0430\u043D\u044C +Modularity.name=\u041C\u043E\u0434\u0443\u043B\u044C\u043D\u0456\u0441\u0442\u044C +Hits.name=HITS +InOutDegree.name=\u0421\u0442\u0443\u043F\u0456\u043D\u044C InOut +GraphDensity.name=\u0429\u0456\u043B\u044C\u043D\u0456\u0441\u0442\u044C +WeightedDegree.name=\u0417\u0432\u0430\u0436\u0435\u043D\u0438\u0439 \u0441\u0442\u0443\u043F\u0456\u043D\u044C +DegreeDistribution.name=\u0420\u043E\u0437\u043F\u043E\u0434\u0456\u043B \u0441\u0442\u0443\u043F\u0435\u043D\u0456\u0432 +StatisticalInference.name=\u0421\u0442\u0430\u0442. \u041A\u043B\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0456\u044F \u0432\u0438\u0441\u043D\u043E\u0432\u043A\u0456\u0432 +PageRank.name=\u0420\u0435\u0439\u0442\u0438\u043D\u0433 \u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438 diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_zh_CN.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_zh_CN.properties index abba4c23dc..fd9f4cf017 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_zh_CN.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_zh_CN.properties @@ -1,28 +1,11 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:06+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -GraphDensity.name=\u5bc6\u5ea6 - -ClusteringCoefficent.name=\u805a\u7c7b\u7cfb\u6570 - -GraphDistance.name=\u56fe\u8ddd\u79bb - -DegreeDistribution.name=\u5ea6\u5206\u5e03 - -Modularity.name=\u6a21\u5757\u5316 - -PageRank.name=\u7f51\u9875\u6392\u540d - -Hits.name=\u70b9\u51fb\u6b21\u6570 - -InOutDegree.name=\u5165\uff0f\u51fa\u5ea6 - -ConnectedComponents.name=\u8fde\u63a5\u7ec4\u4ef6 - -EigenvectorCentrality.name=\u7279\u5f81\u5411\u91cf\u4e2d\u5fc3\u5ea6 - -WeightedDegree.name=\u52a0\u6743\u5ea6 +GraphDensity.name=\u5bc6\u5ea6 +ClusteringCoefficent.name=\u805a\u7c7b\u7cfb\u6570 +GraphDistance.name=\u56fe\u8ddd\u79bb +DegreeDistribution.name=\u5ea6\u5206\u5e03 +Modularity.name=\u6a21\u5757\u5316 +PageRank.name=\u7f51\u9875\u6392\u540d +Hits.name=\u70b9\u51fb\u6b21\u6570 +InOutDegree.name=\u5165\uff0f\u51fa\u5ea6 +ConnectedComponents.name=\u8fde\u901a\u5206\u91cf +EigenvectorCentrality.name=\u7279\u5f81\u5411\u91cf\u4e2d\u5fc3\u5ea6 +WeightedDegree.name=\u52a0\u6743\u5ea6 diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_zh_TW.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_zh_TW.properties new file mode 100644 index 0000000000..0c99ed0016 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/Bundle_zh_TW.properties @@ -0,0 +1,11 @@ +GraphDensity.name=Density +ClusteringCoefficent.name=Clustering Coefficient +GraphDistance.name=Graph Distance +DegreeDistribution.name=Degree Distribution +Modularity.name=Modularity +PageRank.name=Page Rank +Hits.name=HITS +InOutDegree.name=InOut Degree +ConnectedComponents.name=Connected Components +EigenvectorCentrality.name=Eigenvector Centrality +WeightedDegree.name=\u52a0\u6b0a\u5ea6\u4e2d\u5fc3\u6027 diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/cs.po b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/cs.po deleted file mode 100644 index dc13245d17..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/cs.po +++ /dev/null @@ -1,52 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-06 21:27+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "GraphDensity.name" -msgstr "Hustota" - -msgid "ClusteringCoefficent.name" -msgstr "Koeficient shlukovΓ‘nΓ­" - -msgid "GraphDistance.name" -msgstr "VzdΓ‘lenost grafu" - -msgid "DegreeDistribution.name" -msgstr "RozdΔ›lenΓ­ stupňů" - -msgid "Modularity.name" -msgstr "Modularita" - -msgid "PageRank.name" -msgstr "Hodnost strΓ‘nky" - -msgid "Hits.name" -msgstr "HITS" - -msgid "InOutDegree.name" -msgstr "Stupeň VenDovnitΕ™" - -msgid "ConnectedComponents.name" -msgstr "PΕ™ipojenΓ© komponenty" - -msgid "EigenvectorCentrality.name" -msgstr "CentrΓ‘lnost vlastnΓ­ho vektoru" - -msgid "WeightedDegree.name" -msgstr "VΓ‘ΕΎenΓ½ stupeň" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/es.po b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/es.po deleted file mode 100644 index 15df72e96d..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/es.po +++ /dev/null @@ -1,52 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:58+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "GraphDensity.name" -msgstr "Densidad" - -msgid "ClusteringCoefficent.name" -msgstr "Coeficiente de clustering" - -msgid "GraphDistance.name" -msgstr "Distancia de grafo" - -msgid "DegreeDistribution.name" -msgstr "DistribuciΓ³n de grado" - -msgid "Modularity.name" -msgstr "Modularidad" - -msgid "PageRank.name" -msgstr "Page Rank" - -msgid "Hits.name" -msgstr "HITS" - -msgid "InOutDegree.name" -msgstr "Grado de entrada/salida" - -msgid "ConnectedComponents.name" -msgstr "Componentes Conectados" - -msgid "EigenvectorCentrality.name" -msgstr "Centralidad de vector propio" - -msgid "WeightedDegree.name" -msgstr "Grado con pesos" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/fr.po b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/fr.po deleted file mode 100644 index 1b7d6e40ca..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/fr.po +++ /dev/null @@ -1,52 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:58+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "GraphDensity.name" -msgstr "DensitΓ©" - -msgid "ClusteringCoefficent.name" -msgstr "Coefficient de clustering" - -msgid "GraphDistance.name" -msgstr "Distance" - -msgid "DegreeDistribution.name" -msgstr "Distribution du degrΓ©" - -msgid "Modularity.name" -msgstr "ModularitΓ©" - -msgid "PageRank.name" -msgstr "Page Rank" - -msgid "Hits.name" -msgstr "HITS" - -msgid "InOutDegree.name" -msgstr "DegrΓ© entrant/sortant" - -msgid "ConnectedComponents.name" -msgstr "Composantes connexes" - -msgid "EigenvectorCentrality.name" -msgstr "CentralitΓ© Eigenvector" - -msgid "WeightedDegree.name" -msgstr "DegrΓ© pondΓ©rΓ©" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/ja.po b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/ja.po deleted file mode 100644 index 959e141f78..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/ja.po +++ /dev/null @@ -1,52 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-03 11:02+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "GraphDensity.name" -msgstr "ε―†εΊ¦" - -msgid "ClusteringCoefficent.name" -msgstr "γ‚―γƒ©γ‚Ήγ‚ΏεŒ–δΏ‚ζ•°" - -msgid "GraphDistance.name" -msgstr "グラフγθ·ι›’" - -msgid "DegreeDistribution.name" -msgstr "ζ¬‘ζ•°εˆ†εΈƒ" - -msgid "Modularity.name" -msgstr "γƒ’γ‚Έγƒ₯ラγƒͺティ" - -msgid "PageRank.name" -msgstr "γƒšγƒΌγ‚Έγƒ©γƒ³γ‚―" - -msgid "Hits.name" -msgstr "HITS" - -msgid "InOutDegree.name" -msgstr "ε…₯出欑数" - -msgid "ConnectedComponents.name" -msgstr "ι€£η΅ζˆεˆ†" - -msgid "EigenvectorCentrality.name" -msgstr "ε›Ίζœ‰γƒ™γ‚―γƒˆγƒ«δΈ­εΏƒζ€§" - -msgid "WeightedDegree.name" -msgstr "ι‡γΏδ»˜γζ¬‘ζ•°" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/org-gephi-statistics-plugin-builder.pot b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/org-gephi-statistics-plugin-builder.pot deleted file mode 100644 index 27e957fb9d..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/org-gephi-statistics-plugin-builder.pot +++ /dev/null @@ -1,49 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "GraphDensity.name" -msgstr "Density" - -msgid "ClusteringCoefficent.name" -msgstr "Clustering Coefficient" - -msgid "GraphDistance.name" -msgstr "Graph Distance" - -msgid "DegreeDistribution.name" -msgstr "Degree Distribution" - -msgid "Modularity.name" -msgstr "Modularity" - -msgid "PageRank.name" -msgstr "Page Rank" - -msgid "Hits.name" -msgstr "HITS" - -msgid "InOutDegree.name" -msgstr "InOut Degree" - -msgid "ConnectedComponents.name" -msgstr "Connected Components" - -msgid "EigenvectorCentrality.name" -msgstr "Eigenvector Centrality" - -msgid "WeightedDegree.name" -msgstr "Weighted Degree" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/pt_BR.po b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/pt_BR.po deleted file mode 100644 index 2ff34377d8..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/pt_BR.po +++ /dev/null @@ -1,52 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 18:22+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "GraphDensity.name" -msgstr "Densidade" - -msgid "ClusteringCoefficent.name" -msgstr "Coeficiente de Clustering" - -msgid "GraphDistance.name" -msgstr "DistΓ’ncia do Grafo" - -msgid "DegreeDistribution.name" -msgstr "DistribuiΓ§Γ£o de Grau" - -msgid "Modularity.name" -msgstr "Modularidade" - -msgid "PageRank.name" -msgstr "Page Rank" - -msgid "Hits.name" -msgstr "HITS" - -msgid "InOutDegree.name" -msgstr "Grau InOut" - -msgid "ConnectedComponents.name" -msgstr "Componentes Conectados" - -msgid "EigenvectorCentrality.name" -msgstr "Centralidade de autovetor" - -msgid "WeightedDegree.name" -msgstr "Grau ponderado" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/ru.po b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/ru.po deleted file mode 100644 index 983ca56a92..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/ru.po +++ /dev/null @@ -1,52 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-20 07:07+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "GraphDensity.name" -msgstr "ΠŸΠ»ΠΎΡ‚Π½ΠΎΡΡ‚ΡŒ" - -msgid "ClusteringCoefficent.name" -msgstr "ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ кластСризации" - -msgid "GraphDistance.name" -msgstr "РасстояниС Π½Π° Π³Ρ€Π°Ρ„Π΅" - -msgid "DegreeDistribution.name" -msgstr "РаспрСдСлСниС мощности" - -msgid "Modularity.name" -msgstr "ΠœΠΎΠ΄ΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ" - -msgid "PageRank.name" -msgstr "Page Rank" - -msgid "Hits.name" -msgstr "HITS" - -msgid "InOutDegree.name" -msgstr "Входящая-исходящая ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ" - -msgid "ConnectedComponents.name" -msgstr "БвязныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹" - -msgid "EigenvectorCentrality.name" -msgstr "ΠΠ°ΠΏΡ€ΡΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎ собствСнным Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌ" - -msgid "WeightedDegree.name" -msgstr "Π’Π·Π²Π΅ΡˆΠ΅Π½Π½Π°Ρ ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/zh_CN.po b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/zh_CN.po deleted file mode 100644 index ec36872784..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/builder/zh_CN.po +++ /dev/null @@ -1,51 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:06+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "GraphDensity.name" -msgstr "ε―†εΊ¦" - -msgid "ClusteringCoefficent.name" -msgstr "θšη±»η³»ζ•°" - -msgid "GraphDistance.name" -msgstr "图距离" - -msgid "DegreeDistribution.name" -msgstr "εΊ¦εˆ†εΈƒ" - -msgid "Modularity.name" -msgstr "ζ¨‘ε—εŒ–" - -msgid "PageRank.name" -msgstr "η½‘ι‘΅ζŽ’ε" - -msgid "Hits.name" -msgstr "点击欑数" - -msgid "InOutDegree.name" -msgstr "ε…₯/出度" - -msgid "ConnectedComponents.name" -msgstr "连ζŽ₯η»„δ»Ά" - -msgid "EigenvectorCentrality.name" -msgstr "特征向量中心度" - -msgid "WeightedDegree.name" -msgstr "εŠ ζƒεΊ¦" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/cs.po b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/cs.po deleted file mode 100644 index 0de35ab307..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/cs.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 18:46+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "StandardnΓ­ algoritmy statistik a metrik" - -msgid "OpenIDE-Module-Short-Description" -msgstr "StandardnΓ­ algoritmy statistik a metrik" - -msgid "Degree.nodecolumn.InDegree" -msgstr "Stupeň DovnitΕ™" - -msgid "Degree.nodecolumn.OutDegree" -msgstr "Stupeň Ven" - -msgid "Degree.nodecolumn.Degree" -msgstr "Stupeň" - -msgid "Degree.graphcolumn.AverageDegree" -msgstr "PrΕ―mΔ›rnΓ½ stupeň" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_ar.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_ca.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_ca.properties new file mode 100644 index 0000000000..4427a42e42 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_ca.properties @@ -0,0 +1,9 @@ + +DynamicNbNodes.graphcolumn.NbNodes = Nombre de nodes +DynamicNbNodes.graphcolumn.NbEdges = Nombre d'arestes +DynamicDegree.graphcolumn.AvgDegree = Grau mitjΰ dinΰmic +DynamicDegree.nodecolumn.InDegree = Grau dinΰmic d'entrada +DynamicDegree.nodecolumn.OutDegree = Grau dinΰmic de sortida +DynamicDegree.nodecolumn.Degree = Grau dinΰmic +DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient = Coeficient dinΰmic de clusteritzaciσ +DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient = Mitjana del coeficient de clusteritzaciσ diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_cs.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_cs.properties index 163d1c8a94..9ab0f937aa 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_cs.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_cs.properties @@ -1,23 +1,9 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:06+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -DynamicNbNodes.graphcolumn.NbNodes=Po\u010det uzl\u016f - -DynamicNbNodes.graphcolumn.NbEdges=Po\u010det hran - -DynamicDegree.graphcolumn.AvgDegree=Pr\u016fm\u011brn\u00fd stupe\u0148 - -DynamicDegree.nodecolumn.InDegree=Dynamick\u00fd stupe\u0148 dovnit\u0159 - -DynamicDegree.nodecolumn.OutDegree=Dynamick\u00fd stupe\u0148 ven - -DynamicDegree.nodecolumn.Degree=Dynamick\u00fd stupe\u0148 - -DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient=Dynamick\u00fd koeficient shlukov\u00e1n\u00ed - -DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient=Pr\u016fm\u011brn\u00fd koeficient shlukov\u00e1n\u00ed + +DynamicNbNodes.graphcolumn.NbNodes = Po\u010det uzl\u016f +DynamicNbNodes.graphcolumn.NbEdges = Po\u010det hran +DynamicDegree.graphcolumn.AvgDegree = Pr\u016fm\u011brnύ stupe\u0148 +DynamicDegree.nodecolumn.InDegree = Dynamickύ stupe\u0148 dovnit\u0159 +DynamicDegree.nodecolumn.OutDegree = Dynamickύ stupe\u0148 ven +DynamicDegree.nodecolumn.Degree = Dynamickύ stupe\u0148 +DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient = Dynamickύ koeficient shlukovαnν +DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient = Pr\u016fm\u011brnύ koeficient shlukovαnν diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_de.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_de.properties new file mode 100644 index 0000000000..df0a170869 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_de.properties @@ -0,0 +1,9 @@ + +DynamicNbNodes.graphcolumn.NbNodes = Knoten Anzahl +DynamicNbNodes.graphcolumn.NbEdges = Kanten Anzahl +DynamicDegree.graphcolumn.AvgDegree = Dynamischer mittlerer Grad +DynamicDegree.nodecolumn.InDegree = Dynamischer Eingangsgrad +DynamicDegree.nodecolumn.OutDegree = Dynamischer Ausgangsgrad +DynamicDegree.nodecolumn.Degree = Dynamischer Grad +DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient = Dynamischer Clusteringkoeffizient +DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient = Mittlerer Clusteringkoeffizient diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_es.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_es.properties index 2a0efa173f..5dfef6f4de 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_es.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_es.properties @@ -1,23 +1,9 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:19+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -DynamicNbNodes.graphcolumn.NbNodes=Cantidad de nodos - -DynamicNbNodes.graphcolumn.NbEdges=Cantidad de aristas - -DynamicDegree.graphcolumn.AvgDegree=Grado promedio din\u00e1mico - -DynamicDegree.nodecolumn.InDegree=Grado de entrada din\u00e1mico - -DynamicDegree.nodecolumn.OutDegree=Grado de salida din\u00e1mico - -DynamicDegree.nodecolumn.Degree=Grado din\u00e1mico - -DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient=Coeficiente de clustering din\u00e1mico - -DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient=Coeficiente de clustering promedio + +DynamicNbNodes.graphcolumn.NbNodes = Cantidad de nodos +DynamicNbNodes.graphcolumn.NbEdges = Cantidad de aristas +DynamicDegree.graphcolumn.AvgDegree = Grado promedio dinαmico +DynamicDegree.nodecolumn.InDegree = Grado de entrada dinαmico +DynamicDegree.nodecolumn.OutDegree = Grado de salida dinαmico +DynamicDegree.nodecolumn.Degree = Grado dinαmico +DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient = Coeficiente de clustering dinαmico +DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient = Coeficiente de clustering promedio diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_fr.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_fr.properties index d98c376ed9..30445281ac 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_fr.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_fr.properties @@ -1,24 +1,9 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 17\:34+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -DynamicNbNodes.graphcolumn.NbNodes=\# noeuds - -DynamicNbNodes.graphcolumn.NbEdges=\# liens - -DynamicDegree.graphcolumn.AvgDegree=Degr\u00e9 Moyen Dynamique - -DynamicDegree.nodecolumn.InDegree=Degr\u00e9 Entrant Dynamique - -DynamicDegree.nodecolumn.OutDegree=Degr\u00e9 Sortant Dynamique - -DynamicDegree.nodecolumn.Degree=Degr\u00e9 Dynamique - -DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient=Coeffcient de Clustering Dynamique - -DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient=Coeffcient de Clustering Moyen + +DynamicNbNodes.graphcolumn.NbNodes = # noeuds +DynamicNbNodes.graphcolumn.NbEdges = # liens +DynamicDegree.graphcolumn.AvgDegree = Degrι Moyen Dynamique +DynamicDegree.nodecolumn.InDegree = Degrι Entrant Dynamique +DynamicDegree.nodecolumn.OutDegree = Degrι Sortant Dynamique +DynamicDegree.nodecolumn.Degree = Degrι Dynamique +DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient = Coeffcient de Clustering Dynamique +DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient = Coeffcient de Clustering Moyen diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_he.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_he.properties new file mode 100644 index 0000000000..c03aae931e --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_he.properties @@ -0,0 +1,8 @@ +DynamicNbNodes.graphcolumn.NbNodes=Node Count +DynamicNbNodes.graphcolumn.NbEdges=Edge Count +DynamicDegree.graphcolumn.AvgDegree=Dynamic Average Degree +DynamicDegree.nodecolumn.InDegree=Dynamic In-Degree +DynamicDegree.nodecolumn.OutDegree=Dynamic Out-Degree +DynamicDegree.nodecolumn.Degree=Dynamic Degree +DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient=Dynamic Clustering Coefficient +DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient=Average Clustering Coefficient diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_hu.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_hu.properties new file mode 100644 index 0000000000..cd18807219 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_hu.properties @@ -0,0 +1,9 @@ + + +DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient=\u00C1tlagos klaszterez\u00E9si egy\u00FCtthat\u00F3 +DynamicNbNodes.graphcolumn.NbNodes=Csom\u00F3pontsz\u00E1m +DynamicNbNodes.graphcolumn.NbEdges=\u00C9lek sz\u00E1ma +DynamicDegree.nodecolumn.InDegree=Dinamikus In-Degree +DynamicDegree.nodecolumn.OutDegree=Dinamikus Out-Degree +DynamicDegree.graphcolumn.AvgDegree=Dinamikus \u00E1tlagfokozat +DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient=Dinamikus klaszterez\u00E9si egy\u00FCtthat\u00F3 diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_it.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_it.properties new file mode 100644 index 0000000000..c03aae931e --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_it.properties @@ -0,0 +1,8 @@ +DynamicNbNodes.graphcolumn.NbNodes=Node Count +DynamicNbNodes.graphcolumn.NbEdges=Edge Count +DynamicDegree.graphcolumn.AvgDegree=Dynamic Average Degree +DynamicDegree.nodecolumn.InDegree=Dynamic In-Degree +DynamicDegree.nodecolumn.OutDegree=Dynamic Out-Degree +DynamicDegree.nodecolumn.Degree=Dynamic Degree +DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient=Dynamic Clustering Coefficient +DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient=Average Clustering Coefficient diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_ja.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_ja.properties index a997a35eff..a46f301f98 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_ja.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_ja.properties @@ -1,23 +1,9 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:06+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -DynamicNbNodes.graphcolumn.NbNodes=\u30ce\u30fc\u30c9\u6570 - -DynamicNbNodes.graphcolumn.NbEdges=\u30a8\u30c3\u30b8\u6570 - -DynamicDegree.graphcolumn.AvgDegree=\u5e73\u5747\u6b21\u6570 - -DynamicDegree.nodecolumn.InDegree=\u52d5\u7684\u5165\u6b21\u6570 - -DynamicDegree.nodecolumn.OutDegree=\u52d5\u7684\u51fa\u6b21\u6570 - -DynamicDegree.nodecolumn.Degree=\u52d5\u7684\u6b21\u6570 - -DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient=\u52d5\u7684\u30af\u30e9\u30b9\u30bf\u4fc2\u6570 - -DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient=\u5e73\u5747\u30af\u30e9\u30b9\u30bf\u4fc2\u6570 + +DynamicNbNodes.graphcolumn.NbNodes = \u30ce\u30fc\u30c9\u6570 +DynamicNbNodes.graphcolumn.NbEdges = \u30a8\u30c3\u30b8\u6570 +DynamicDegree.graphcolumn.AvgDegree = \u5e73\u5747\u6b21\u6570 +DynamicDegree.nodecolumn.InDegree = \u52d5\u7684\u5165\u6b21\u6570 +DynamicDegree.nodecolumn.OutDegree = \u52d5\u7684\u51fa\u6b21\u6570 +DynamicDegree.nodecolumn.Degree = \u52d5\u7684\u6b21\u6570 +DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient = \u52d5\u7684\u30af\u30e9\u30b9\u30bf\u4fc2\u6570 +DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient = \u5e73\u5747\u30af\u30e9\u30b9\u30bf\u4fc2\u6570 diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_ko.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_ko.properties new file mode 100644 index 0000000000..bbe0d668fd --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_ko.properties @@ -0,0 +1,10 @@ + + +DynamicNbNodes.graphcolumn.NbEdges=\uC5E3\uC9C0 \uC218 +DynamicDegree.graphcolumn.AvgDegree=\uB3D9\uC801 \uD3C9\uADE0 \uCC28\uC218 +DynamicDegree.nodecolumn.OutDegree=\uB3D9\uC801 \uC9C4\uCD9C \uCC28\uC218 +DynamicDegree.nodecolumn.Degree=\uB3D9\uC801 \uCC28\uC218 +DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient=\uB3D9\uC801 \uACB0\uC9D1 \uACC4\uC218 +DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient=\uD3C9\uADE0 \uACB9\uC9D1 \uACC4\uC218 +DynamicNbNodes.graphcolumn.NbNodes=\uB178\uB4DC \uC218 +DynamicDegree.nodecolumn.InDegree=\uB3D9\uC801 \uC9C4\uC785 \uCC28\uC218 diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_nl.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_nl.properties new file mode 100644 index 0000000000..d0e395dbe1 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_nl.properties @@ -0,0 +1,8 @@ +DynamicNbNodes.graphcolumn.NbNodes=Aantal knopen +DynamicNbNodes.graphcolumn.NbEdges=Edge Count +DynamicDegree.graphcolumn.AvgDegree=Dynamic Average Degree +DynamicDegree.nodecolumn.InDegree=Dynamic In-Degree +DynamicDegree.nodecolumn.OutDegree=Dynamic Out-Degree +DynamicDegree.nodecolumn.Degree=Dynamic Degree +DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient=Dynamic Clustering Coefficient +DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient=Average Clustering Coefficient diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_pt_BR.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_pt_BR.properties index abbac45ac6..1c6815449d 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_pt_BR.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_pt_BR.properties @@ -1,24 +1,9 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio Faria Jr. , 2012. -# Eduardo Ramos , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 17\:35+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -DynamicNbNodes.graphcolumn.NbNodes=Contagem de n\u00f3s - -DynamicNbNodes.graphcolumn.NbEdges=Contagem de arestas - -DynamicDegree.graphcolumn.AvgDegree=Grau m\u00e9dio din\u00e2mico - -DynamicDegree.nodecolumn.InDegree=Grau de entrada din\u00e2mico - -DynamicDegree.nodecolumn.OutDegree=Grau de sa\u00edda din\u00e2mico - -DynamicDegree.nodecolumn.Degree=Grau din\u00e2mico - -DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient=Coeficiente de Clustering din\u00e2mico - -DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient=Coeficiente m\u00e9dio de Clustering + +DynamicNbNodes.graphcolumn.NbNodes = Contagem de nσs +DynamicNbNodes.graphcolumn.NbEdges = Contagem de arestas +DynamicDegree.graphcolumn.AvgDegree = Grau mιdio dinβmico +DynamicDegree.nodecolumn.InDegree = Grau de entrada dinβmico +DynamicDegree.nodecolumn.OutDegree = Grau de saνda dinβmico +DynamicDegree.nodecolumn.Degree = Grau dinβmico +DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient = Coeficiente de Clustering dinβmico +DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient = Coeficiente mιdio de Clustering diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_ro.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_ro.properties new file mode 100644 index 0000000000..6cd6fd61cf --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_ro.properties @@ -0,0 +1,10 @@ + + +DynamicNbNodes.graphcolumn.NbNodes=Num\u0103r de noduri +DynamicNbNodes.graphcolumn.NbEdges=Num\u0103r de muchii +DynamicDegree.graphcolumn.AvgDegree=Grad mediu dinamic +DynamicDegree.nodecolumn.InDegree=Grad interior dinamic +DynamicDegree.nodecolumn.OutDegree=Grad exterior dinamic +DynamicDegree.nodecolumn.Degree=Grad dinamic +DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient=Coeficient dinamic de clusterizare +DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient=Coeficient mediu de clusterizare diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_ru.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_ru.properties index 7c5105ef30..23cd99d92f 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_ru.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_ru.properties @@ -1,23 +1,9 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:06+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -DynamicNbNodes.graphcolumn.NbNodes=\u0427\u0438\u0441\u043b\u043e \u0443\u0437\u043b\u043e\u0432 - -DynamicNbNodes.graphcolumn.NbEdges=\u0427\u0438\u0441\u043b\u043e \u0440\u0451\u0431\u0435\u0440 - -DynamicDegree.graphcolumn.AvgDegree=\u0421\u0440\u0435\u0434\u043d\u044f\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c - -DynamicDegree.nodecolumn.InDegree=\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0432\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c - -DynamicDegree.nodecolumn.OutDegree=\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c - -DynamicDegree.nodecolumn.Degree=\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c - -DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient=\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 - -DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient=\u0421\u0440\u0435\u0434\u043d\u0438\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 + +DynamicNbNodes.graphcolumn.NbNodes = \u0427\u0438\u0441\u043b\u043e \u0443\u0437\u043b\u043e\u0432 +DynamicNbNodes.graphcolumn.NbEdges = \u0427\u0438\u0441\u043b\u043e \u0440\u0451\u0431\u0435\u0440 +DynamicDegree.graphcolumn.AvgDegree = \u0421\u0440\u0435\u0434\u043d\u044f\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c +DynamicDegree.nodecolumn.InDegree = \u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0432\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c +DynamicDegree.nodecolumn.OutDegree = \u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u0438\u0441\u0445\u043e\u0434\u044f\u0449\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c +DynamicDegree.nodecolumn.Degree = \u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c +DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient = \u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 +DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient = \u0421\u0440\u0435\u0434\u043d\u0438\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_th.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_tr.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_tr.properties new file mode 100644 index 0000000000..c03aae931e --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_tr.properties @@ -0,0 +1,8 @@ +DynamicNbNodes.graphcolumn.NbNodes=Node Count +DynamicNbNodes.graphcolumn.NbEdges=Edge Count +DynamicDegree.graphcolumn.AvgDegree=Dynamic Average Degree +DynamicDegree.nodecolumn.InDegree=Dynamic In-Degree +DynamicDegree.nodecolumn.OutDegree=Dynamic Out-Degree +DynamicDegree.nodecolumn.Degree=Dynamic Degree +DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient=Dynamic Clustering Coefficient +DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient=Average Clustering Coefficient diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_uk.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_uk.properties new file mode 100644 index 0000000000..68339a8378 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_uk.properties @@ -0,0 +1,8 @@ +DynamicDegree.nodecolumn.OutDegree=\u0414\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0438\u0439 \u0432\u0438\u0445\u0456\u0434\u043D\u0438\u0439 \u0441\u0442\u0443\u043F\u0456\u043D\u044C +DynamicDegree.graphcolumn.AvgDegree=\u0414\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0438\u0439 \u0441\u0435\u0440\u0435\u0434\u043D\u0456\u0439 \u0441\u0442\u0443\u043F\u0456\u043D\u044C +DynamicDegree.nodecolumn.InDegree=\u0414\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0438\u0439 \u0441\u0442\u0443\u043F\u0456\u043D\u044C \u043D\u0430\u0432\u0447\u0430\u043D\u043D\u044F +DynamicDegree.nodecolumn.Degree=\u0414\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0438\u0439 \u0441\u0442\u0443\u043F\u0456\u043D\u044C +DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient=\u0421\u0435\u0440\u0435\u0434\u043D\u0456\u0439 \u043A\u043E\u0435\u0444\u0456\u0446\u0456\u0454\u043D\u0442 \u043A\u043B\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0456\u0457 +DynamicNbNodes.graphcolumn.NbNodes=\u041A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u0432\u0443\u0437\u043B\u0456\u0432 +DynamicNbNodes.graphcolumn.NbEdges=\u041F\u0456\u0434\u0440\u0430\u0445\u0443\u043D\u043E\u043A \u043A\u0440\u0430\u0457\u0432 +DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient=\u041A\u043E\u0435\u0444\u0456\u0446\u0456\u0454\u043D\u0442 \u0434\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u043E\u0457 \u043A\u043B\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0456\u0457 diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_zh_CN.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_zh_CN.properties index 14b9cff609..c54f4106fb 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_zh_CN.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_zh_CN.properties @@ -1,23 +1,9 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:06+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -DynamicNbNodes.graphcolumn.NbNodes=\u8282\u70b9\u8ba1\u6570 - -DynamicNbNodes.graphcolumn.NbEdges=\u8fb9\u8ba1\u6570 - -DynamicDegree.graphcolumn.AvgDegree=\u5e73\u5747\u5ea6 - -DynamicDegree.nodecolumn.InDegree=\u52a8\u6001\u8fde\u5165\u5ea6 - -DynamicDegree.nodecolumn.OutDegree=\u52a8\u6001\u8fde\u51fa\u5ea6 - -DynamicDegree.nodecolumn.Degree=\u52a8\u6001\u5ea6 - -DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient=\u52a8\u6001\u96c6\u56e2\u7cfb\u6570 - -DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient=\u5e73\u5747\u96c6\u56e2\u7cfb\u6570 + +DynamicNbNodes.graphcolumn.NbNodes = \u8282\u70b9\u8ba1\u6570 +DynamicNbNodes.graphcolumn.NbEdges = \u8fb9\u8ba1\u6570 +DynamicDegree.graphcolumn.AvgDegree = \u5e73\u5747\u5ea6 +DynamicDegree.nodecolumn.InDegree = \u52a8\u6001\u8fde\u5165\u5ea6 +DynamicDegree.nodecolumn.OutDegree = \u52a8\u6001\u8fde\u51fa\u5ea6 +DynamicDegree.nodecolumn.Degree = \u52a8\u6001\u5ea6 +DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient = \u52a8\u6001\u96c6\u56e2\u7cfb\u6570 +DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient = \u5e73\u5747\u96c6\u56e2\u7cfb\u6570 diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_zh_TW.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_zh_TW.properties new file mode 100644 index 0000000000..c03aae931e --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/Bundle_zh_TW.properties @@ -0,0 +1,8 @@ +DynamicNbNodes.graphcolumn.NbNodes=Node Count +DynamicNbNodes.graphcolumn.NbEdges=Edge Count +DynamicDegree.graphcolumn.AvgDegree=Dynamic Average Degree +DynamicDegree.nodecolumn.InDegree=Dynamic In-Degree +DynamicDegree.nodecolumn.OutDegree=Dynamic Out-Degree +DynamicDegree.nodecolumn.Degree=Dynamic Degree +DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient=Dynamic Clustering Coefficient +DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient=Average Clustering Coefficient diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_ar.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_ca.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_ca.properties new file mode 100644 index 0000000000..95c3c35fc7 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_ca.properties @@ -0,0 +1,4 @@ +DynamicDegree.name=Grau dinΰmic +DynamicNbNodes.name=# Nodes dinΰmics +DynamicNbEdges.name=# Arestes dinΰmiques +DynamicClusteringCoefficient.name=Coeficient dinΰmic de clusteritzaciσ diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_cs.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_cs.properties index fe008251d7..f5c9249ba6 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_cs.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_cs.properties @@ -1,15 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-02-29 19\:26+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -DynamicDegree.name=Dynamick\u00fd stupe\u0148 - -DynamicNbNodes.name=Dynamick\u00fd p\u010d. uzl\u016f - -DynamicNbEdges.name=Dynamick\u00fd p\u010d. hran - -DynamicClusteringCoefficient.name=Dynamick\u00fd koeficient shlukov\u00e1n\u00ed +DynamicDegree.name=Dynamickύ stupe\u0148 +DynamicNbNodes.name=Dynamickύ p\u010d. uzl\u016f +DynamicNbEdges.name=Dynamickύ p\u010d. hran +DynamicClusteringCoefficient.name=Dynamickύ koeficient shlukovαnν diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_de.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_de.properties new file mode 100644 index 0000000000..dfd35c9d9e --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_de.properties @@ -0,0 +1,4 @@ +DynamicDegree.name=Dynamischer Grad +DynamicNbNodes.name=Dynamische Anzahl Knoten +DynamicNbEdges.name=Dynamische Anzahl Kanten +DynamicClusteringCoefficient.name=Dynamischer Clusteringkoeffizient diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_es.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_es.properties index e7c74e14bd..3ccef718f3 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_es.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_es.properties @@ -1,15 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 22\:02+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -DynamicDegree.name=Grado din\u00e1mico - -DynamicNbNodes.name=\# de Nodos din\u00e1micos - -DynamicNbEdges.name=\# de Aristas din\u00e1micas - -DynamicClusteringCoefficient.name=Coeficiente de clustering din\u00e1mico +DynamicDegree.name=Grado dinαmico +DynamicNbNodes.name=# de Nodos dinαmicos +DynamicNbEdges.name=# de Aristas dinαmicas +DynamicClusteringCoefficient.name=Coeficiente de clustering dinαmico diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_fr.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_fr.properties index 57724a01ab..48c7dfdccf 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_fr.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_fr.properties @@ -1,15 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 11\:47+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -DynamicDegree.name=Degr\u00e9 dynamique - -DynamicNbNodes.name=\# Noeuds dynamique - -DynamicNbEdges.name=\# Liens dynamique - -DynamicClusteringCoefficient.name=Coefficient de clustering dynamique +DynamicDegree.name=Degrι dynamique +DynamicNbNodes.name=# Noeuds dynamique +DynamicNbEdges.name=# Liens dynamique +DynamicClusteringCoefficient.name=Coefficient de clustering dynamique diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_he.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_he.properties new file mode 100644 index 0000000000..ff2229d8f9 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_he.properties @@ -0,0 +1,4 @@ +DynamicDegree.name=Dynamic Degree +DynamicNbNodes.name=Dynamic # Nodes +DynamicNbEdges.name=Dynamic # Edges +DynamicClusteringCoefficient.name=Dynamic Clustering Coefficient diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_hu.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_hu.properties new file mode 100644 index 0000000000..8b13cf65ca --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_hu.properties @@ -0,0 +1,6 @@ + + +DynamicClusteringCoefficient.name=Dinamikus klaszterez\u00E9si egy\u00FCtthat\u00F3 +DynamicNbNodes.name=Dinamikus # csom\u00F3pontok +DynamicNbEdges.name=Dinamikus # \u00E9lek +DynamicDegree.name=Dinamikus fokozat diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_it.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_it.properties new file mode 100644 index 0000000000..ff2229d8f9 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_it.properties @@ -0,0 +1,4 @@ +DynamicDegree.name=Dynamic Degree +DynamicNbNodes.name=Dynamic # Nodes +DynamicNbEdges.name=Dynamic # Edges +DynamicClusteringCoefficient.name=Dynamic Clustering Coefficient diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_ja.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_ja.properties index 5d3794d643..b65520750b 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_ja.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_ja.properties @@ -1,15 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 09\:50+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -DynamicDegree.name=\u52d5\u7684\u6b21\u6570 - -DynamicNbNodes.name=\u52d5\u7684 \# \u30ce\u30fc\u30c9 - -DynamicNbEdges.name=\u52d5\u7684 \# \u8fba - -DynamicClusteringCoefficient.name=\u52d5\u7684\u30af\u30e9\u30b9\u30bf\u4fc2\u6570 +DynamicDegree.name=\u52d5\u7684\u6b21\u6570 +DynamicNbNodes.name=\u52d5\u7684 # \u30ce\u30fc\u30c9 +DynamicNbEdges.name=\u52d5\u7684 # \u8fba +DynamicClusteringCoefficient.name=\u52d5\u7684\u30af\u30e9\u30b9\u30bf\u4fc2\u6570 diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_ko.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_ko.properties new file mode 100644 index 0000000000..487dbfd4b8 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_ko.properties @@ -0,0 +1,6 @@ + + +DynamicNbNodes.name=\uB3D9\uC801 \uB178\uB4DC \uC218 +DynamicDegree.name=\uB3D9\uC801 \uCC28\uC218 +DynamicNbEdges.name=\uB3D9\uC801 \uC5E3\uC9C0 \uC218 +DynamicClusteringCoefficient.name=\uB3D9\uC801 \uAD70\uC9D1\uD654 \uACC4\uC218 diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_nl.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_nl.properties new file mode 100644 index 0000000000..ff2229d8f9 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_nl.properties @@ -0,0 +1,4 @@ +DynamicDegree.name=Dynamic Degree +DynamicNbNodes.name=Dynamic # Nodes +DynamicNbEdges.name=Dynamic # Edges +DynamicClusteringCoefficient.name=Dynamic Clustering Coefficient diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_pt_BR.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_pt_BR.properties index cbe9cb6c4c..255d56cd91 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_pt_BR.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_pt_BR.properties @@ -1,15 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio Faria Jr. , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 12\:28+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -DynamicDegree.name=Grau din\u00e2mico - -DynamicNbNodes.name=N\u00famero de n\u00f3s din\u00e2mico - -DynamicNbEdges.name=N\u00famero de arestas din\u00e2mico - -DynamicClusteringCoefficient.name=Coeficiente de Clustering din\u00e2mico +DynamicDegree.name=Grau dinβmico +DynamicNbNodes.name=Nϊmero de nσs dinβmico +DynamicNbEdges.name=Nϊmero de arestas dinβmico +DynamicClusteringCoefficient.name=Coeficiente de Clustering dinβmico diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_ro.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_ro.properties new file mode 100644 index 0000000000..44b0d47dec --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_ro.properties @@ -0,0 +1,6 @@ + + +DynamicDegree.name=Grad dinamic +DynamicNbNodes.name=# Noduri dinamice +DynamicNbEdges.name=# Muchii dinamice +DynamicClusteringCoefficient.name=Coeficient dinamic de clusterizare diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_ru.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_ru.properties index 0358e24f3b..5d1cdaf2e8 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_ru.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_ru.properties @@ -1,15 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-18 06\:39+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -DynamicDegree.name=\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c - -DynamicNbNodes.name=\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0443\u0437\u043b\u043e\u0432 - -DynamicNbEdges.name=\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0440\u0451\u0431\u0435\u0440 - -DynamicClusteringCoefficient.name=\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 +DynamicDegree.name=\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c +DynamicNbNodes.name=\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0443\u0437\u043b\u043e\u0432 +DynamicNbEdges.name=\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0440\u0451\u0431\u0435\u0440 +DynamicClusteringCoefficient.name=\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_th.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_tr.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_tr.properties new file mode 100644 index 0000000000..ff2229d8f9 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_tr.properties @@ -0,0 +1,4 @@ +DynamicDegree.name=Dynamic Degree +DynamicNbNodes.name=Dynamic # Nodes +DynamicNbEdges.name=Dynamic # Edges +DynamicClusteringCoefficient.name=Dynamic Clustering Coefficient diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_uk.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_uk.properties new file mode 100644 index 0000000000..4389b07163 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_uk.properties @@ -0,0 +1,4 @@ +DynamicNbEdges.name=\u0414\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0456 # \u043A\u0440\u0430\u0457 +DynamicDegree.name=\u0414\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0438\u0439 \u0441\u0442\u0443\u043F\u0456\u043D\u044C +DynamicNbNodes.name=\u0414\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0456 # \u0432\u0443\u0437\u043B\u0438 +DynamicClusteringCoefficient.name=\u041A\u043E\u0435\u0444\u0456\u0446\u0456\u0454\u043D\u0442 \u0434\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u043E\u0457 \u043A\u043B\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0456\u0457 diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_zh_CN.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_zh_CN.properties index 0bbac85388..e8a1018586 100644 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_zh_CN.properties +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_zh_CN.properties @@ -1,14 +1,4 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:21+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -DynamicDegree.name=\u52a8\u6001\u5ea6 - -DynamicNbNodes.name=\u52a8\u6001\u8282\u70b9\u6570\u76ee - -DynamicNbEdges.name=\u52a8\u6001\u8fb9\u6570\u76ee - -DynamicClusteringCoefficient.name=\u52a8\u6001\u805a\u7c7b\u7cfb\u6570 +DynamicDegree.name=\u52a8\u6001\u5ea6 +DynamicNbNodes.name=\u52a8\u6001\u8282\u70b9\u6570\u76ee +DynamicNbEdges.name=\u52a8\u6001\u8fb9\u6570\u76ee +DynamicClusteringCoefficient.name=\u52a8\u6001\u805a\u7c7b\u7cfb\u6570 diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_zh_TW.properties b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_zh_TW.properties new file mode 100644 index 0000000000..ff2229d8f9 --- /dev/null +++ b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/Bundle_zh_TW.properties @@ -0,0 +1,4 @@ +DynamicDegree.name=Dynamic Degree +DynamicNbNodes.name=Dynamic # Nodes +DynamicNbEdges.name=Dynamic # Edges +DynamicClusteringCoefficient.name=Dynamic Clustering Coefficient diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/cs.po b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/cs.po deleted file mode 100644 index 1765c080ed..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/cs.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-02-29 19:26+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "DynamicDegree.name" -msgstr "DynamickΓ½ stupeň" - -msgid "DynamicNbNodes.name" -msgstr "DynamickΓ½ pč. uzlΕ―" - -msgid "DynamicNbEdges.name" -msgstr "DynamickΓ½ pč. hran" - -msgid "DynamicClusteringCoefficient.name" -msgstr "DynamickΓ½ koeficient shlukovΓ‘nΓ­" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/es.po b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/es.po deleted file mode 100644 index 56e7ff0280..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/es.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 22:02+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "DynamicDegree.name" -msgstr "Grado dinΓ‘mico" - -msgid "DynamicNbNodes.name" -msgstr "# de Nodos dinΓ‘micos" - -msgid "DynamicNbEdges.name" -msgstr "# de Aristas dinΓ‘micas" - -msgid "DynamicClusteringCoefficient.name" -msgstr "Coeficiente de clustering dinΓ‘mico" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/fr.po b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/fr.po deleted file mode 100644 index 0b21b09839..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/fr.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 11:47+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "DynamicDegree.name" -msgstr "DegrΓ© dynamique" - -msgid "DynamicNbNodes.name" -msgstr "# Noeuds dynamique" - -msgid "DynamicNbEdges.name" -msgstr "# Liens dynamique" - -msgid "DynamicClusteringCoefficient.name" -msgstr "Coefficient de clustering dynamique" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/ja.po b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/ja.po deleted file mode 100644 index d0632c0ff4..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/ja.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 09:50+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "DynamicDegree.name" -msgstr "ε‹•ηš„ζ¬‘ζ•°" - -msgid "DynamicNbNodes.name" -msgstr "ε‹•ηš„ # γƒŽγƒΌγƒ‰" - -msgid "DynamicNbEdges.name" -msgstr "ε‹•ηš„ # θΎΊ" - -msgid "DynamicClusteringCoefficient.name" -msgstr "ε‹•ηš„γ‚―γƒ©γ‚Ήγ‚ΏδΏ‚ζ•°" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/org-gephi-statistics-plugin-dynamic-builder.pot b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/org-gephi-statistics-plugin-dynamic-builder.pot deleted file mode 100644 index 246f30b558..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/org-gephi-statistics-plugin-dynamic-builder.pot +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "DynamicDegree.name" -msgstr "Dynamic Degree" - -msgid "DynamicNbNodes.name" -msgstr "Dynamic # Nodes" - -msgid "DynamicNbEdges.name" -msgstr "Dynamic # Edges" - -msgid "DynamicClusteringCoefficient.name" -msgstr "Dynamic Clustering Coefficient" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/pt_BR.po b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/pt_BR.po deleted file mode 100644 index 7d07abd0a2..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/pt_BR.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio Faria Jr. , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 12:28+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "DynamicDegree.name" -msgstr "Grau dinΓ’mico" - -msgid "DynamicNbNodes.name" -msgstr "NΓΊmero de nΓ³s dinΓ’mico" - -msgid "DynamicNbEdges.name" -msgstr "NΓΊmero de arestas dinΓ’mico" - -msgid "DynamicClusteringCoefficient.name" -msgstr "Coeficiente de Clustering dinΓ’mico" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/ru.po b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/ru.po deleted file mode 100644 index d5e2015b4e..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/ru.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-18 06:39+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "DynamicDegree.name" -msgstr "ДинамичСская ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ" - -msgid "DynamicNbNodes.name" -msgstr "ДинамичСскоС число ΡƒΠ·Π»ΠΎΠ²" - -msgid "DynamicNbEdges.name" -msgstr "ДинамичСскоС число Ρ€Ρ‘Π±Π΅Ρ€" - -msgid "DynamicClusteringCoefficient.name" -msgstr "ДинамичСский коэффициСнт кластСризации" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/zh_CN.po b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/zh_CN.po deleted file mode 100644 index 67d20402a5..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/builder/zh_CN.po +++ /dev/null @@ -1,30 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:21+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "DynamicDegree.name" -msgstr "εŠ¨ζ€εΊ¦" - -msgid "DynamicNbNodes.name" -msgstr "εŠ¨ζ€θŠ‚η‚Ήζ•°η›" - -msgid "DynamicNbEdges.name" -msgstr "εŠ¨ζ€θΎΉζ•°η›" - -msgid "DynamicClusteringCoefficient.name" -msgstr "εŠ¨ζ€θšη±»η³»ζ•°" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/cs.po b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/cs.po deleted file mode 100644 index 9a3397d1a7..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/cs.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:06+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "DynamicNbNodes.graphcolumn.NbNodes" -msgstr "Počet uzlΕ―" - -msgid "DynamicNbNodes.graphcolumn.NbEdges" -msgstr "Počet hran" - -msgid "DynamicDegree.graphcolumn.AvgDegree" -msgstr "PrΕ―mΔ›rnΓ½ stupeň" - -msgid "DynamicDegree.nodecolumn.InDegree" -msgstr "DynamickΓ½ stupeň dovnitΕ™" - -msgid "DynamicDegree.nodecolumn.OutDegree" -msgstr "DynamickΓ½ stupeň ven" - -msgid "DynamicDegree.nodecolumn.Degree" -msgstr "DynamickΓ½ stupeň" - -msgid "DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient" -msgstr "DynamickΓ½ koeficient shlukovΓ‘nΓ­" - -msgid "DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient" -msgstr "PrΕ―mΔ›rnΓ½ koeficient shlukovΓ‘nΓ­" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/es.po b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/es.po deleted file mode 100644 index 1e5254db89..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/es.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:19+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "DynamicNbNodes.graphcolumn.NbNodes" -msgstr "Cantidad de nodos" - -msgid "DynamicNbNodes.graphcolumn.NbEdges" -msgstr "Cantidad de aristas" - -msgid "DynamicDegree.graphcolumn.AvgDegree" -msgstr "Grado promedio dinΓ‘mico" - -msgid "DynamicDegree.nodecolumn.InDegree" -msgstr "Grado de entrada dinΓ‘mico" - -msgid "DynamicDegree.nodecolumn.OutDegree" -msgstr "Grado de salida dinΓ‘mico" - -msgid "DynamicDegree.nodecolumn.Degree" -msgstr "Grado dinΓ‘mico" - -msgid "DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient" -msgstr "Coeficiente de clustering dinΓ‘mico" - -msgid "DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient" -msgstr "Coeficiente de clustering promedio" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/fr.po b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/fr.po deleted file mode 100644 index 9a221fbeb1..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/fr.po +++ /dev/null @@ -1,44 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 17:34+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "DynamicNbNodes.graphcolumn.NbNodes" -msgstr "# noeuds" - -msgid "DynamicNbNodes.graphcolumn.NbEdges" -msgstr "# liens" - -msgid "DynamicDegree.graphcolumn.AvgDegree" -msgstr "DegrΓ© Moyen Dynamique" - -msgid "DynamicDegree.nodecolumn.InDegree" -msgstr "DegrΓ© Entrant Dynamique" - -msgid "DynamicDegree.nodecolumn.OutDegree" -msgstr "DegrΓ© Sortant Dynamique" - -msgid "DynamicDegree.nodecolumn.Degree" -msgstr "DegrΓ© Dynamique" - -msgid "DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient" -msgstr "Coeffcient de Clustering Dynamique" - -msgid "DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient" -msgstr "Coeffcient de Clustering Moyen" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/ja.po b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/ja.po deleted file mode 100644 index 9670e72190..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/ja.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:06+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "DynamicNbNodes.graphcolumn.NbNodes" -msgstr "γƒŽγƒΌγƒ‰ζ•°" - -msgid "DynamicNbNodes.graphcolumn.NbEdges" -msgstr "エッジ数" - -msgid "DynamicDegree.graphcolumn.AvgDegree" -msgstr "平均欑数" - -msgid "DynamicDegree.nodecolumn.InDegree" -msgstr "ε‹•ηš„ε…₯欑数" - -msgid "DynamicDegree.nodecolumn.OutDegree" -msgstr "ε‹•ηš„ε‡Ίζ¬‘ζ•°" - -msgid "DynamicDegree.nodecolumn.Degree" -msgstr "ε‹•ηš„ζ¬‘ζ•°" - -msgid "DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient" -msgstr "ε‹•ηš„γ‚―γƒ©γ‚Ήγ‚ΏδΏ‚ζ•°" - -msgid "DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient" -msgstr "平均クラスタ係数" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/org-gephi-statistics-plugin-dynamic.pot b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/org-gephi-statistics-plugin-dynamic.pot deleted file mode 100644 index 19a986a76d..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/org-gephi-statistics-plugin-dynamic.pot +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "DynamicNbNodes.graphcolumn.NbNodes" -msgstr "Node Count" - -msgid "DynamicNbNodes.graphcolumn.NbEdges" -msgstr "Edge Count" - -msgid "DynamicDegree.graphcolumn.AvgDegree" -msgstr "Dynamic Average Degree" - -msgid "DynamicDegree.nodecolumn.InDegree" -msgstr "Dynamic In-Degree" - -msgid "DynamicDegree.nodecolumn.OutDegree" -msgstr "Dynamic Out-Degree" - -msgid "DynamicDegree.nodecolumn.Degree" -msgstr "Dynamic Degree" - -msgid "DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient" -msgstr "Dynamic Clustering Coefficient" - -msgid "DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient" -msgstr "Average Clustering Coefficient" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/pt_BR.po b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/pt_BR.po deleted file mode 100644 index 67570b8f88..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/pt_BR.po +++ /dev/null @@ -1,44 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio Faria Jr. , 2012. -# Eduardo Ramos , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 17:35+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "DynamicNbNodes.graphcolumn.NbNodes" -msgstr "Contagem de nΓ³s" - -msgid "DynamicNbNodes.graphcolumn.NbEdges" -msgstr "Contagem de arestas" - -msgid "DynamicDegree.graphcolumn.AvgDegree" -msgstr "Grau mΓ©dio dinΓ’mico" - -msgid "DynamicDegree.nodecolumn.InDegree" -msgstr "Grau de entrada dinΓ’mico" - -msgid "DynamicDegree.nodecolumn.OutDegree" -msgstr "Grau de saΓ­da dinΓ’mico" - -msgid "DynamicDegree.nodecolumn.Degree" -msgstr "Grau dinΓ’mico" - -msgid "DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient" -msgstr "Coeficiente de Clustering dinΓ’mico" - -msgid "DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient" -msgstr "Coeficiente mΓ©dio de Clustering" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/ru.po b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/ru.po deleted file mode 100644 index 00b050b443..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/ru.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:06+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "DynamicNbNodes.graphcolumn.NbNodes" -msgstr "Число ΡƒΠ·Π»ΠΎΠ²" - -msgid "DynamicNbNodes.graphcolumn.NbEdges" -msgstr "Число Ρ€Ρ‘Π±Π΅Ρ€" - -msgid "DynamicDegree.graphcolumn.AvgDegree" -msgstr "БрСдняя ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ" - -msgid "DynamicDegree.nodecolumn.InDegree" -msgstr "ДинамичСская входящая ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ" - -msgid "DynamicDegree.nodecolumn.OutDegree" -msgstr "ДинамичСская исходящая ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ" - -msgid "DynamicDegree.nodecolumn.Degree" -msgstr "ДинамичСская ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ" - -msgid "DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient" -msgstr "ДинамичСский коэффициСнт кластСризации" - -msgid "DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient" -msgstr "Π‘Ρ€Π΅Π΄Π½ΠΈΠΉ коэффициСнт кластСризации" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/zh_CN.po b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/zh_CN.po deleted file mode 100644 index 6d65eb628b..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/dynamic/zh_CN.po +++ /dev/null @@ -1,43 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:06+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "DynamicNbNodes.graphcolumn.NbNodes" -msgstr "θŠ‚η‚Ήθ‘ζ•°" - -msgid "DynamicNbNodes.graphcolumn.NbEdges" -msgstr "θΎΉθ‘ζ•°" - -msgid "DynamicDegree.graphcolumn.AvgDegree" -msgstr "平均度" - -msgid "DynamicDegree.nodecolumn.InDegree" -msgstr "εŠ¨ζ€θΏžε…₯εΊ¦" - -msgid "DynamicDegree.nodecolumn.OutDegree" -msgstr "εŠ¨ζ€θΏžε‡ΊεΊ¦" - -msgid "DynamicDegree.nodecolumn.Degree" -msgstr "εŠ¨ζ€εΊ¦" - -msgid "DynamicClusteringCoefficient.nodecolumn.ClusteringCoefficient" -msgstr "εŠ¨ζ€ι›†ε›’η³»ζ•°" - -msgid "DynamicClusteringCoefficient.graphcolumn.AvgClusteringCoefficient" -msgstr "平均集囒系数" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/es.po b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/es.po deleted file mode 100644 index e7e0614840..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/es.po +++ /dev/null @@ -1,38 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-16 23:09+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Algoritmos estΓ‘ndar de estadΓ­sticas y mΓ©tricas" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Algoritmos estΓ‘ndar de estadΓ­sticas y mΓ©tricas" - -msgid "Degree.nodecolumn.InDegree" -msgstr "Grado de entrada" - -msgid "Degree.nodecolumn.OutDegree" -msgstr "Grado de salida" - -msgid "Degree.nodecolumn.Degree" -msgstr "Grado" - -msgid "Degree.graphcolumn.AverageDegree" -msgstr "Grado promedio" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/fr.po b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/fr.po deleted file mode 100644 index 1547cb9768..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/fr.po +++ /dev/null @@ -1,38 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-08 15:09+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Statistiques standard et algorithmes de mΓ©trique" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Statistiques standard et algorithmes de mΓ©trique" - -msgid "Degree.nodecolumn.InDegree" -msgstr "DegrΓ© Entrant" - -msgid "Degree.nodecolumn.OutDegree" -msgstr "DegrΓ© Sortant" - -msgid "Degree.nodecolumn.Degree" -msgstr "DegrΓ©" - -msgid "Degree.graphcolumn.AverageDegree" -msgstr "DegrΓ© Moyen" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/ja.po b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/ja.po deleted file mode 100644 index 5dd9d352e4..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/ja.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-15 01:31+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ζ¨™ζΊ–ηš„γͺη΅±θ¨ˆγ¨θ¨ˆι‡γγ‚’ルゴγƒͺγ‚Ίγƒ " - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζ¨™ζΊ–ηš„γͺη΅±θ¨ˆγ¨θ¨ˆι‡γγ‚’ルゴγƒͺγ‚Ίγƒ " - -msgid "Degree.nodecolumn.InDegree" -msgstr "ε…₯欑数" - -msgid "Degree.nodecolumn.OutDegree" -msgstr "出欑数" - -msgid "Degree.nodecolumn.Degree" -msgstr "欑数" - -msgid "Degree.graphcolumn.AverageDegree" -msgstr "平均欑数" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/org-gephi-statistics-plugin.pot b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/org-gephi-statistics-plugin.pot deleted file mode 100644 index 6d580807ee..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/org-gephi-statistics-plugin.pot +++ /dev/null @@ -1,34 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Standard statistics and metrics algorithms" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Standard statistics and metrics algorithms" - -msgid "Degree.nodecolumn.InDegree" -msgstr "In-Degree" - -msgid "Degree.nodecolumn.OutDegree" -msgstr "Out-Degree" - -msgid "Degree.nodecolumn.Degree" -msgstr "Degree" - -msgid "Degree.graphcolumn.AverageDegree" -msgstr "Average Degree" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/pt_BR.po b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/pt_BR.po deleted file mode 100644 index da5c8db41a..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/pt_BR.po +++ /dev/null @@ -1,38 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -# CΓ©lio Faria Jr. , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-17 13:13+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Algoritmos padrΓ£o de estatΓ­sticas e mΓ©tricas" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Algoritmos padrΓ£o de estatΓ­sticas e mΓ©tricas" - -msgid "Degree.nodecolumn.InDegree" -msgstr "Grau de entrada" - -msgid "Degree.nodecolumn.OutDegree" -msgstr "Grau de saΓ­da" - -msgid "Degree.nodecolumn.Degree" -msgstr "Grau" - -msgid "Degree.graphcolumn.AverageDegree" -msgstr "Grau mΓ©dio" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/ru.po b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/ru.po deleted file mode 100644 index 132acd3c52..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/ru.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-15 08:32+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Алгоритмы для расчёта стандартных статистик ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Алгоритмы для расчёта стандартных статистик ΠΈ ΠΌΠ΅Ρ‚Ρ€ΠΈΠΊ" - -msgid "Degree.nodecolumn.InDegree" -msgstr "Входящая ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ" - -msgid "Degree.nodecolumn.OutDegree" -msgstr "Π˜ΡΡ…ΠΎΠ΄ΡΡ‰Π°Ρ ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ" - -msgid "Degree.nodecolumn.Degree" -msgstr "Буммарная ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ" - -msgid "Degree.graphcolumn.AverageDegree" -msgstr "БрСдняя ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ" diff --git a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/zh_CN.po b/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/zh_CN.po deleted file mode 100644 index c62fe82aa5..0000000000 --- a/modules/StatisticsPlugin/src/main/resources/org/gephi/statistics/plugin/zh_CN.po +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-15 09:39+0000\n" -"Last-Translator: Xi-Nian Zuo \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ζ ‡ε‡†ηš„η»Ÿθ‘ε’ŒζŒ‡ζ ‡η—法" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζ ‡ε‡†ηš„η»Ÿθ‘ε’ŒζŒ‡ζ ‡η—法" - -msgid "Degree.nodecolumn.InDegree" -msgstr "连ε…₯εΊ¦" - -msgid "Degree.nodecolumn.OutDegree" -msgstr "θΏžε‡ΊεΊ¦" - -msgid "Degree.nodecolumn.Degree" -msgstr "εΊ¦" - -msgid "Degree.graphcolumn.AverageDegree" -msgstr "平均度" diff --git a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/ClusteringCoefficientNGTest.java b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/ClusteringCoefficientNGTest.java deleted file mode 100644 index c8c6038dd6..0000000000 --- a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/ClusteringCoefficientNGTest.java +++ /dev/null @@ -1,492 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package org.gephi.statistics.plugin; - -import java.util.HashMap; -import org.gephi.graph.api.DirectedGraph; -import org.gephi.graph.api.GraphModel; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.UndirectedGraph; -import org.gephi.graph.api.Node; -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.Graph; -import org.gephi.project.api.ProjectController; -import org.gephi.project.impl.ProjectControllerImpl; -import org.openide.util.Lookup; -import static org.testng.Assert.*; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -/** - * - * @author akharitonova - */ -public class ClusteringCoefficientNGTest { - - private ProjectController pc; - - - @BeforeClass - public void setUp() { - pc = Lookup.getDefault().lookup(ProjectControllerImpl.class); - } - - @BeforeMethod - public void initialize() { - pc.newProject(); - } - - @AfterMethod - public void clean() { - pc.closeCurrentProject(); - } - - @Test - public void testOneNodeClusteringCoefficient() { - GraphModel graphModel=GraphGenerator.generateCompleteUndirectedGraph(1); - Graph hgraph = graphModel.getGraph(); - - ClusteringCoefficient cc = new ClusteringCoefficient(); - ArrayWrapper[] network = new ArrayWrapper[1]; - int[] triangles = new int[1]; - double[] nodeClustering = new double[1]; - - HashMap results = cc.computeClusteringCoefficient(hgraph, network, triangles, nodeClustering, false); - double avClusteringCoefficient = results.get("clusteringCoefficient"); - - - assertEquals(avClusteringCoefficient, Double.NaN); - } - - @Test - public void testTwoConectedNodesClusteringCoefficient() { - GraphModel graphModel=GraphGenerator.generateCompleteUndirectedGraph(2); - Graph hgraph = graphModel.getGraph(); - - ClusteringCoefficient cc = new ClusteringCoefficient(); - ArrayWrapper[] network = new ArrayWrapper[2]; - int[] triangles = new int[2]; - double[] nodeClustering = new double[2]; - - HashMap results = cc.computeClusteringCoefficient(hgraph, network, triangles, nodeClustering, false); - double avClusteringCoefficient = results.get("clusteringCoefficient"); - - - assertEquals(avClusteringCoefficient, Double.NaN); - } - - @Test - public void testNullGraphClusteringCoefficient() { - GraphModel graphModel=GraphGenerator.generateNullUndirectedGraph(5); - Graph hgraph = graphModel.getGraph(); - - ClusteringCoefficient cc = new ClusteringCoefficient(); - ArrayWrapper[] network = new ArrayWrapper[5]; - int[] triangles = new int[5]; - double[] nodeClustering = new double[5]; - - HashMap results = cc.computeClusteringCoefficient(hgraph, network, triangles, nodeClustering, false); - double avClusteringCoefficient = results.get("clusteringCoefficient"); - - - assertEquals(avClusteringCoefficient, Double.NaN); - } - - @Test - public void testCompleteGraphClusteringCoefficient() { - GraphModel graphModel=GraphGenerator.generateCompleteUndirectedGraph(5); - Graph hgraph = graphModel.getGraph(); - - ClusteringCoefficient cc = new ClusteringCoefficient(); - ArrayWrapper[] network = new ArrayWrapper[5]; - int[] triangles = new int[5]; - double[] nodeClustering = new double[5]; - - HashMap results = cc.computeClusteringCoefficient(hgraph, network, triangles, nodeClustering, false); - double avClusteringCoefficient = results.get("clusteringCoefficient"); - - assertEquals(avClusteringCoefficient, 1.0); - } - - @Test - public void testStarGraphClusteringCoefficient() { - GraphModel graphModel=GraphGenerator.generateStarUndirectedGraph(5); - Graph hgraph = graphModel.getGraph(); - - ClusteringCoefficient cc = new ClusteringCoefficient(); - ArrayWrapper[] network = new ArrayWrapper[6]; - int[] triangles = new int[6]; - double[] nodeClustering = new double[6]; - - HashMap results = cc.computeClusteringCoefficient(hgraph, network, triangles, nodeClustering, false); - - double avClusteringCoefficient = results.get("clusteringCoefficient"); - - assertEquals(avClusteringCoefficient, 0.0); - } - - - @Test - public void testSpecial1UndirectedGraphClusteringCoefficient() { - GraphModel graphModel=Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - UndirectedGraph undirectedGraph=graphModel.getUndirectedGraph(); - Node node1=graphModel.factory().newNode("0"); - Node node2=graphModel.factory().newNode("1"); - Node node3=graphModel.factory().newNode("2"); - Node node4=graphModel.factory().newNode("3"); - Node node5=graphModel.factory().newNode("4"); - Node node6=graphModel.factory().newNode("5"); - Node node7=graphModel.factory().newNode("6"); - undirectedGraph.addNode(node1); - undirectedGraph.addNode(node2); - undirectedGraph.addNode(node3); - undirectedGraph.addNode(node4); - undirectedGraph.addNode(node5); - undirectedGraph.addNode(node6); - undirectedGraph.addNode(node7); - Edge edge12=graphModel.factory().newEdge(node1, node2, false); - Edge edge13=graphModel.factory().newEdge(node1, node3, false); - Edge edge14=graphModel.factory().newEdge(node1, node4, false); - Edge edge15=graphModel.factory().newEdge(node1, node5, false); - Edge edge16=graphModel.factory().newEdge(node1, node6, false); - Edge edge17=graphModel.factory().newEdge(node1, node7, false); - Edge edge23=graphModel.factory().newEdge(node2, node3, false); - Edge edge34=graphModel.factory().newEdge(node3, node4, false); - Edge edge45=graphModel.factory().newEdge(node4, node5, false); - Edge edge56=graphModel.factory().newEdge(node5, node6, false); - Edge edge67=graphModel.factory().newEdge(node6, node7, false); - Edge edge72=graphModel.factory().newEdge(node7, node2, false); - undirectedGraph.addEdge(edge12); - undirectedGraph.addEdge(edge13); - undirectedGraph.addEdge(edge14); - undirectedGraph.addEdge(edge15); - undirectedGraph.addEdge(edge16); - undirectedGraph.addEdge(edge17); - undirectedGraph.addEdge(edge23); - undirectedGraph.addEdge(edge34); - undirectedGraph.addEdge(edge45); - undirectedGraph.addEdge(edge56); - undirectedGraph.addEdge(edge67); - undirectedGraph.addEdge(edge72); - - Graph hgraph = graphModel.getGraph(); - ClusteringCoefficient cc = new ClusteringCoefficient(); - - ArrayWrapper[] network = new ArrayWrapper[7]; - int[] triangles = new int[7]; - double[] nodeClustering = new double[7]; - - HashMap results = cc.computeClusteringCoefficient(hgraph, network, triangles, nodeClustering, false); - - double cl1 = nodeClustering[0]; - double cl3 = nodeClustering[2]; - - double res3=0.667; - double diff = 0.01; - - assertEquals(cl1, 0.4); - assertTrue(Math.abs(cl3-res3) results = cc.computeClusteringCoefficient(hgraph, network, triangles, nodeClustering, false); - - double cl2 = nodeClustering[1]; - double avClusteringCoefficient = results.get("clusteringCoefficient"); - - double resAv=0.8857; - double diff = 0.01; - - assertEquals(cl2, 1.0); - assertTrue(Math.abs(avClusteringCoefficient-resAv) results = cc.computeClusteringCoefficient(hgraph, network, triangles, nodeClustering, false); - - double cl1 = nodeClustering[0]; - - double res1=0.333; - double diff = 0.01; - - assertTrue(Math.abs(cl1-res1) results = cc.computeClusteringCoefficient(hgraph, network, triangles, nodeClustering, false); - - double avClusteringCoefficient = results.get("clusteringCoefficient"); - - assertEquals(avClusteringCoefficient, 1.0); - } - - - @Test - public void testSpecial1DirectedGraphClusteringCoefficient() { - GraphModel graphModel=Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - - DirectedGraph directedGraph=graphModel.getDirectedGraph(); - - Node node1=graphModel.factory().newNode("0"); - Node node2=graphModel.factory().newNode("1"); - Node node3=graphModel.factory().newNode("2"); - Node node4=graphModel.factory().newNode("3"); - - directedGraph.addNode(node1); - directedGraph.addNode(node2); - directedGraph.addNode(node3); - directedGraph.addNode(node4); - - Edge edge12=graphModel.factory().newEdge(node1, node2); - Edge edge23=graphModel.factory().newEdge(node2, node3); - Edge edge24=graphModel.factory().newEdge(node2, node4); - Edge edge31=graphModel.factory().newEdge(node3, node1); - Edge edge34=graphModel.factory().newEdge(node3, node4); - Edge edge41=graphModel.factory().newEdge(node4, node1); - - directedGraph.addEdge(edge12); - directedGraph.addEdge(edge23); - directedGraph.addEdge(edge24); - directedGraph.addEdge(edge31); - directedGraph.addEdge(edge34); - directedGraph.addEdge(edge41); - - - DirectedGraph hgraph = graphModel.getDirectedGraph(); - - ClusteringCoefficient cc = new ClusteringCoefficient(); - ArrayWrapper[] network = new ArrayWrapper[4]; - int[] triangles = new int[4]; - double[] nodeClustering = new double[4]; - - HashMap results = cc.computeClusteringCoefficient(hgraph, network, triangles, nodeClustering, true); - double avClusteringCoefficient = results.get("clusteringCoefficient"); - - - assertEquals(avClusteringCoefficient, 0.5); - } - - @Test - public void testTriangleDirectedGraphClusteringCoefficient() { - GraphModel graphModel=Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - - DirectedGraph directedGraph=graphModel.getDirectedGraph(); - - Node node1=graphModel.factory().newNode("0"); - Node node2=graphModel.factory().newNode("1"); - Node node3=graphModel.factory().newNode("2"); - - directedGraph.addNode(node1); - directedGraph.addNode(node2); - directedGraph.addNode(node3); - - Edge edge12=graphModel.factory().newEdge(node1, node2); - Edge edge21=graphModel.factory().newEdge(node2, node1); - Edge edge23=graphModel.factory().newEdge(node2, node3); - Edge edge32=graphModel.factory().newEdge(node3, node2); - Edge edge31=graphModel.factory().newEdge(node3, node1); - Edge edge13=graphModel.factory().newEdge(node1, node3); - - directedGraph.addEdge(edge12); - directedGraph.addEdge(edge21); - directedGraph.addEdge(edge23); - directedGraph.addEdge(edge32); - directedGraph.addEdge(edge31); - directedGraph.addEdge(edge13); - - - DirectedGraph hgraph = graphModel.getDirectedGraph(); - - ClusteringCoefficient cc = new ClusteringCoefficient(); - ArrayWrapper[] network = new ArrayWrapper[3]; - int[] triangles = new int[3]; - double[] nodeClustering = new double[3]; - - HashMap results = cc.computeClusteringCoefficient(hgraph, network, triangles, nodeClustering, true); - double avClusteringCoefficient = results.get("clusteringCoefficient"); - - - assertEquals(avClusteringCoefficient, 1.); - } - - @Test - public void testSpecial2DirectedGraphClusteringCoefficient() { - GraphModel graphModel=Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - - DirectedGraph directedGraph=graphModel.getDirectedGraph(); - - Node node1=graphModel.factory().newNode("0"); - Node node2=graphModel.factory().newNode("1"); - Node node3=graphModel.factory().newNode("2"); - Node node4=graphModel.factory().newNode("3"); - - directedGraph.addNode(node1); - directedGraph.addNode(node2); - directedGraph.addNode(node3); - directedGraph.addNode(node4); - - Edge edge21=graphModel.factory().newEdge(node2, node1); - Edge edge24=graphModel.factory().newEdge(node2, node4); - Edge edge31=graphModel.factory().newEdge(node3, node1); - Edge edge32=graphModel.factory().newEdge(node3, node2); - Edge edge43=graphModel.factory().newEdge(node4, node3); - - directedGraph.addEdge(edge21); - directedGraph.addEdge(edge24); - directedGraph.addEdge(edge31); - directedGraph.addEdge(edge32); - directedGraph.addEdge(edge43); - - - DirectedGraph hgraph = graphModel.getDirectedGraph(); - - ClusteringCoefficient cc = new ClusteringCoefficient(); - ArrayWrapper[] network = new ArrayWrapper[4]; - int[] triangles = new int[4]; - double[] nodeClustering = new double[4]; - - HashMap results = cc.computeClusteringCoefficient(hgraph, network, triangles, nodeClustering, true); - double avClusteringCoefficient = results.get("clusteringCoefficient"); - double res = 0.4167; - double diff = 0.01; - - assertTrue(Math.abs(avClusteringCoefficient-res) results = cc.computeClusteringCoefficient(hgraph, network, triangles, nodeClustering, true); - double avClusteringCoefficient = results.get("clusteringCoefficient"); - double res = 0.833; - double diff = 0.01; - - assertTrue(Math.abs(avClusteringCoefficient-res) results = + cc.computeClusteringCoefficient(graph, network, triangles, nodeClustering, false); + double avClusteringCoefficient = results.get("clusteringCoefficient"); + + assertEquals(avClusteringCoefficient, Double.NaN); + } + + @Test + public void testTwoConectedNodesClusteringCoefficient() { + GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(2); + Graph graph = graphModel.getGraph(); + + ClusteringCoefficient cc = new ClusteringCoefficient(); + ArrayWrapper[] network = new ArrayWrapper[2]; + int[] triangles = new int[2]; + double[] nodeClustering = new double[2]; + + HashMap results = + cc.computeClusteringCoefficient(graph, network, triangles, nodeClustering, false); + double avClusteringCoefficient = results.get("clusteringCoefficient"); + + assertEquals(avClusteringCoefficient, Double.NaN); + } + + @Test + public void testNullGraphClusteringCoefficient() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(5); + Graph graph = graphModel.getGraph(); + + ClusteringCoefficient cc = new ClusteringCoefficient(); + cc.setDirected(false); + ArrayWrapper[] network = new ArrayWrapper[5]; + int[] triangles = new int[5]; + double[] nodeClustering = new double[5]; + + HashMap results = + cc.computeClusteringCoefficient(graph, network, triangles, nodeClustering, false); + double avClusteringCoefficient = results.get("clusteringCoefficient"); + + assertEquals(avClusteringCoefficient, Double.NaN); + } + + @Test + public void testCompleteGraphClusteringCoefficient() { + GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(5); + Graph graph = graphModel.getGraph(); + + ClusteringCoefficient cc = new ClusteringCoefficient(); + cc.setDirected(false); + ArrayWrapper[] network = new ArrayWrapper[5]; + int[] triangles = new int[5]; + double[] nodeClustering = new double[5]; + + HashMap results = + cc.computeClusteringCoefficient(graph, network, triangles, nodeClustering, false); + double avClusteringCoefficient = results.get("clusteringCoefficient"); + + assertEquals(avClusteringCoefficient, 1.0); + } + + @Test + public void testStarGraphClusteringCoefficient() { + GraphModel graphModel = GraphGenerator.generateStarUndirectedGraph(5); + Graph graph = graphModel.getGraph(); + + ClusteringCoefficient cc = new ClusteringCoefficient(); + cc.setDirected(false); + ArrayWrapper[] network = new ArrayWrapper[6]; + int[] triangles = new int[6]; + double[] nodeClustering = new double[6]; + + HashMap results = + cc.computeClusteringCoefficient(graph, network, triangles, nodeClustering, false); + + double avClusteringCoefficient = results.get("clusteringCoefficient"); + + assertEquals(avClusteringCoefficient, 0.0); + } + + @Test + public void testSpecial1UndirectedGraphClusteringCoefficient() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + Node node6 = graphModel.factory().newNode("5"); + Node node7 = graphModel.factory().newNode("6"); + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + undirectedGraph.addNode(node4); + undirectedGraph.addNode(node5); + undirectedGraph.addNode(node6); + undirectedGraph.addNode(node7); + Edge edge12 = graphModel.factory().newEdge(node1, node2, false); + Edge edge13 = graphModel.factory().newEdge(node1, node3, false); + Edge edge14 = graphModel.factory().newEdge(node1, node4, false); + Edge edge15 = graphModel.factory().newEdge(node1, node5, false); + Edge edge16 = graphModel.factory().newEdge(node1, node6, false); + Edge edge17 = graphModel.factory().newEdge(node1, node7, false); + Edge edge23 = graphModel.factory().newEdge(node2, node3, false); + Edge edge34 = graphModel.factory().newEdge(node3, node4, false); + Edge edge45 = graphModel.factory().newEdge(node4, node5, false); + Edge edge56 = graphModel.factory().newEdge(node5, node6, false); + Edge edge67 = graphModel.factory().newEdge(node6, node7, false); + Edge edge72 = graphModel.factory().newEdge(node7, node2, false); + undirectedGraph.addEdge(edge12); + undirectedGraph.addEdge(edge13); + undirectedGraph.addEdge(edge14); + undirectedGraph.addEdge(edge15); + undirectedGraph.addEdge(edge16); + undirectedGraph.addEdge(edge17); + undirectedGraph.addEdge(edge23); + undirectedGraph.addEdge(edge34); + undirectedGraph.addEdge(edge45); + undirectedGraph.addEdge(edge56); + undirectedGraph.addEdge(edge67); + undirectedGraph.addEdge(edge72); + + Graph graph = graphModel.getGraph(); + ClusteringCoefficient cc = new ClusteringCoefficient(); + + ArrayWrapper[] network = new ArrayWrapper[7]; + int[] triangles = new int[7]; + double[] nodeClustering = new double[7]; + + HashMap results = + cc.computeClusteringCoefficient(graph, network, triangles, nodeClustering, false); + + double cl1 = nodeClustering[0]; + double cl3 = nodeClustering[2]; + + double res3 = 0.667; + double diff = 0.01; + + assertEquals(cl1, 0.4); + assertTrue(Math.abs(cl3 - res3) < diff); + + } + + @Test + public void testSpecial2UndirectedGraphClusteringCoefficient() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + Node node6 = graphModel.factory().newNode("5"); + Node node7 = graphModel.factory().newNode("6"); + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + undirectedGraph.addNode(node4); + undirectedGraph.addNode(node5); + undirectedGraph.addNode(node6); + undirectedGraph.addNode(node7); + Edge edge12 = graphModel.factory().newEdge(node1, node2, false); + Edge edge23 = graphModel.factory().newEdge(node2, node3, false); + Edge edge31 = graphModel.factory().newEdge(node3, node1, false); + Edge edge14 = graphModel.factory().newEdge(node1, node4, false); + Edge edge45 = graphModel.factory().newEdge(node4, node5, false); + Edge edge51 = graphModel.factory().newEdge(node5, node1, false); + Edge edge16 = graphModel.factory().newEdge(node1, node6, false); + Edge edge67 = graphModel.factory().newEdge(node6, node7, false); + Edge edge71 = graphModel.factory().newEdge(node7, node1, false); + undirectedGraph.addEdge(edge12); + undirectedGraph.addEdge(edge23); + undirectedGraph.addEdge(edge31); + undirectedGraph.addEdge(edge14); + undirectedGraph.addEdge(edge45); + undirectedGraph.addEdge(edge51); + undirectedGraph.addEdge(edge16); + undirectedGraph.addEdge(edge67); + undirectedGraph.addEdge(edge71); + + Graph graph = graphModel.getGraph(); + ClusteringCoefficient cc = new ClusteringCoefficient(); + + ArrayWrapper[] network = new ArrayWrapper[7]; + int[] triangles = new int[7]; + double[] nodeClustering = new double[7]; + + HashMap results = + cc.computeClusteringCoefficient(graph, network, triangles, nodeClustering, false); + + double cl2 = nodeClustering[1]; + double avClusteringCoefficient = results.get("clusteringCoefficient"); + + double resAv = 0.8857; + double diff = 0.01; + + assertEquals(cl2, 1.0); + assertTrue(Math.abs(avClusteringCoefficient - resAv) < diff); + + } + + @Test + public void testSpecial3UndirectedGraphClusteringCoefficient() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + Node node6 = graphModel.factory().newNode("5"); + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + undirectedGraph.addNode(node4); + undirectedGraph.addNode(node5); + undirectedGraph.addNode(node6); + Edge edge12 = graphModel.factory().newEdge(node1, node2, false); + Edge edge23 = graphModel.factory().newEdge(node2, node3, false); + Edge edge31 = graphModel.factory().newEdge(node3, node1, false); + Edge edge14 = graphModel.factory().newEdge(node1, node4, false); + Edge edge25 = graphModel.factory().newEdge(node2, node5, false); + Edge edge36 = graphModel.factory().newEdge(node3, node6, false); + undirectedGraph.addEdge(edge12); + undirectedGraph.addEdge(edge23); + undirectedGraph.addEdge(edge31); + undirectedGraph.addEdge(edge14); + undirectedGraph.addEdge(edge25); + undirectedGraph.addEdge(edge36); + + Graph graph = graphModel.getGraph(); + ClusteringCoefficient cc = new ClusteringCoefficient(); + + ArrayWrapper[] network = new ArrayWrapper[6]; + int[] triangles = new int[6]; + double[] nodeClustering = new double[6]; + + HashMap results = + cc.computeClusteringCoefficient(graph, network, triangles, nodeClustering, false); + + double cl1 = nodeClustering[0]; + + double res1 = 0.333; + double diff = 0.01; + + assertTrue(Math.abs(cl1 - res1) < diff); + + } + + @Test + public void testTriangleGraphClusteringCoefficient() { + GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(3); + Graph graph = graphModel.getGraph(); + + ClusteringCoefficient cc = new ClusteringCoefficient(); + ArrayWrapper[] network = new ArrayWrapper[3]; + + int[] triangles = new int[3]; + double[] nodeClustering = new double[3]; + + HashMap results = + cc.computeClusteringCoefficient(graph, network, triangles, nodeClustering, false); + + double avClusteringCoefficient = results.get("clusteringCoefficient"); + + assertEquals(avClusteringCoefficient, 1.0); + } + + @Test + public void testSpecial1DirectedGraphClusteringCoefficient() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + + directedGraph.addNode(node1); + directedGraph.addNode(node2); + directedGraph.addNode(node3); + directedGraph.addNode(node4); + + Edge edge12 = graphModel.factory().newEdge(node1, node2); + Edge edge23 = graphModel.factory().newEdge(node2, node3); + Edge edge24 = graphModel.factory().newEdge(node2, node4); + Edge edge31 = graphModel.factory().newEdge(node3, node1); + Edge edge34 = graphModel.factory().newEdge(node3, node4); + Edge edge41 = graphModel.factory().newEdge(node4, node1); + + directedGraph.addEdge(edge12); + directedGraph.addEdge(edge23); + directedGraph.addEdge(edge24); + directedGraph.addEdge(edge31); + directedGraph.addEdge(edge34); + directedGraph.addEdge(edge41); + + DirectedGraph graph = graphModel.getDirectedGraph(); + + ClusteringCoefficient cc = new ClusteringCoefficient(); + ArrayWrapper[] network = new ArrayWrapper[4]; + int[] triangles = new int[4]; + double[] nodeClustering = new double[4]; + + HashMap results = + cc.computeClusteringCoefficient(graph, network, triangles, nodeClustering, true); + double avClusteringCoefficient = results.get("clusteringCoefficient"); + + assertEquals(avClusteringCoefficient, 0.5); + } + + @Test + public void testTriangleDirectedGraphClusteringCoefficient() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + + directedGraph.addNode(node1); + directedGraph.addNode(node2); + directedGraph.addNode(node3); + + Edge edge12 = graphModel.factory().newEdge(node1, node2); + Edge edge21 = graphModel.factory().newEdge(node2, node1); + Edge edge23 = graphModel.factory().newEdge(node2, node3); + Edge edge32 = graphModel.factory().newEdge(node3, node2); + Edge edge31 = graphModel.factory().newEdge(node3, node1); + Edge edge13 = graphModel.factory().newEdge(node1, node3); + + directedGraph.addEdge(edge12); + directedGraph.addEdge(edge21); + directedGraph.addEdge(edge23); + directedGraph.addEdge(edge32); + directedGraph.addEdge(edge31); + directedGraph.addEdge(edge13); + + DirectedGraph graph = graphModel.getDirectedGraph(); + + ClusteringCoefficient cc = new ClusteringCoefficient(); + ArrayWrapper[] network = new ArrayWrapper[3]; + int[] triangles = new int[3]; + double[] nodeClustering = new double[3]; + + HashMap results = + cc.computeClusteringCoefficient(graph, network, triangles, nodeClustering, true); + double avClusteringCoefficient = results.get("clusteringCoefficient"); + + assertEquals(avClusteringCoefficient, 1.); + } + + @Test + public void testSpecial2DirectedGraphClusteringCoefficient() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + + directedGraph.addNode(node1); + directedGraph.addNode(node2); + directedGraph.addNode(node3); + directedGraph.addNode(node4); + + Edge edge21 = graphModel.factory().newEdge(node2, node1); + Edge edge24 = graphModel.factory().newEdge(node2, node4); + Edge edge31 = graphModel.factory().newEdge(node3, node1); + Edge edge32 = graphModel.factory().newEdge(node3, node2); + Edge edge43 = graphModel.factory().newEdge(node4, node3); + + directedGraph.addEdge(edge21); + directedGraph.addEdge(edge24); + directedGraph.addEdge(edge31); + directedGraph.addEdge(edge32); + directedGraph.addEdge(edge43); + + DirectedGraph graph = graphModel.getDirectedGraph(); + + ClusteringCoefficient cc = new ClusteringCoefficient(); + ArrayWrapper[] network = new ArrayWrapper[4]; + int[] triangles = new int[4]; + double[] nodeClustering = new double[4]; + + HashMap results = + cc.computeClusteringCoefficient(graph, network, triangles, nodeClustering, true); + double avClusteringCoefficient = results.get("clusteringCoefficient"); + double res = 0.4167; + double diff = 0.01; + + assertTrue(Math.abs(avClusteringCoefficient - res) < diff); + } + + @Test + public void testTriangleNonCompleteDirectedGraphClusteringCoefficient() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + + directedGraph.addNode(node1); + directedGraph.addNode(node2); + directedGraph.addNode(node3); + + Edge edge12 = graphModel.factory().newEdge(node1, node2); + Edge edge21 = graphModel.factory().newEdge(node2, node1); + Edge edge23 = graphModel.factory().newEdge(node2, node3); + Edge edge32 = graphModel.factory().newEdge(node3, node2); + Edge edge13 = graphModel.factory().newEdge(node1, node3); + + directedGraph.addEdge(edge12); + directedGraph.addEdge(edge21); + directedGraph.addEdge(edge23); + directedGraph.addEdge(edge32); + directedGraph.addEdge(edge13); + + DirectedGraph graph = graphModel.getDirectedGraph(); + + ClusteringCoefficient cc = new ClusteringCoefficient(); + ArrayWrapper[] network = new ArrayWrapper[3]; + int[] triangles = new int[3]; + double[] nodeClustering = new double[3]; + + HashMap results = + cc.computeClusteringCoefficient(graph, network, triangles, nodeClustering, true); + double avClusteringCoefficient = results.get("clusteringCoefficient"); + double res = 0.833; + double diff = 0.01; + + assertTrue(Math.abs(avClusteringCoefficient - res) < diff); + } + + @Test + public void testColumnCreation() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + + ClusteringCoefficient cc = new ClusteringCoefficient(); + cc.execute(graphModel); + + Assert.assertTrue(graphModel.getNodeTable().hasColumn(ClusteringCoefficient.CLUSTERING_COEFF)); + } + + @Test + public void testColumnReplace() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + + graphModel.getNodeTable().addColumn(ClusteringCoefficient.CLUSTERING_COEFF, String.class); + + ClusteringCoefficient cc = new ClusteringCoefficient(); + cc.execute(graphModel); + } +} diff --git a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/ConnectedComponentsNGTest.java b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/ConnectedComponentsNGTest.java deleted file mode 100644 index 00512d7c65..0000000000 --- a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/ConnectedComponentsNGTest.java +++ /dev/null @@ -1,451 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package org.gephi.statistics.plugin; - -import java.util.HashMap; -import java.util.LinkedList; -import org.gephi.graph.api.DirectedGraph; -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.GraphModel; -import org.gephi.graph.api.Node; -import org.gephi.graph.api.UndirectedGraph; -import org.gephi.project.api.ProjectController; -import org.gephi.project.impl.ProjectControllerImpl; -import org.openide.util.Lookup; -import static org.testng.Assert.*; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -/** - * - * @author Anna - */ -public class ConnectedComponentsNGTest { - - private ProjectController pc; - - @BeforeClass - public void setUp() { - pc = Lookup.getDefault().lookup(ProjectControllerImpl.class); - } - - @BeforeMethod - public void initialize() { - pc.newProject(); - } - - @AfterMethod - public void clean() { - pc.closeCurrentProject(); - } - - @Test - public void testComputeOneNodeWeeklyConnectedComponents() { - GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); - UndirectedGraph graph = graphModel.getUndirectedGraph(); - Node n = graph.getNode("0"); - - ConnectedComponents c = new ConnectedComponents(); - HashMap indicies = new HashMap(); - indicies.put(n, 0); - LinkedList> components = c.computeWeeklyConnectedComponents(graph, indicies); - assertEquals(components.size(), 1); - } - - @Test - public void testNullGraphWeeklyConnectedComponents() { - GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(5); - UndirectedGraph graph = graphModel.getUndirectedGraph(); - Node n0 = graph.getNode("0"); - Node n1 = graph.getNode("1"); - Node n2 = graph.getNode("2"); - Node n3 = graph.getNode("3"); - Node n4 = graph.getNode("4"); - - ConnectedComponents c = new ConnectedComponents(); - HashMap indicies = new HashMap(); - indicies.put(n0, 0); - indicies.put(n1, 1); - indicies.put(n2, 2); - indicies.put(n3, 3); - indicies.put(n4, 4); - LinkedList> components = c.computeWeeklyConnectedComponents(graph, indicies); - assertEquals(components.size(), 5); - } - - @Test - public void testComputeBarbellGraphWeeklyConnectedComponents() { - GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(4); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - Node[] nodes = new Node[4]; - for (int i = 0; i < 4; i++) { - Node currentNode = graphModel.factory().newNode(((Integer) (i + 4)).toString()); - nodes[i] = currentNode; - undirectedGraph.addNode(currentNode); - } - for (int i = 0; i < 3; i++) { - for (int j = i + 1; j < 4; j++) { - Edge currentEdge = graphModel.factory().newEdge(nodes[i], nodes[j], false); - undirectedGraph.addEdge(currentEdge); - } - } - Edge currentEdge = graphModel.factory().newEdge(undirectedGraph.getNode("0"), undirectedGraph.getNode("5"), false); - undirectedGraph.addEdge(currentEdge); - UndirectedGraph graph = graphModel.getUndirectedGraph(); - - ConnectedComponents c = new ConnectedComponents(); - HashMap indicies = c.createIndiciesMap(graph); - LinkedList> components = c.computeWeeklyConnectedComponents(graph, indicies); - assertEquals(components.size(), 1); - } - - @Test - public void testSpecial1UndirectedGraphConnectedComponents() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - undirectedGraph.addNode(node1); - undirectedGraph.addNode(node2); - undirectedGraph.addNode(node3); - undirectedGraph.addNode(node4); - undirectedGraph.addNode(node5); - Edge edge12 = graphModel.factory().newEdge(node1, node2, false); - Edge edge14 = graphModel.factory().newEdge(node1, node4, false); - Edge edge23 = graphModel.factory().newEdge(node2, node3, false); - Edge edge25 = graphModel.factory().newEdge(node2, node5, false); - Edge edge35 = graphModel.factory().newEdge(node3, node5, false); - Edge edge43 = graphModel.factory().newEdge(node4, node3, false); - Edge edge51 = graphModel.factory().newEdge(node5, node1, false); - Edge edge54 = graphModel.factory().newEdge(node5, node4, false); - undirectedGraph.addEdge(edge12); - undirectedGraph.addEdge(edge14); - undirectedGraph.addEdge(edge23); - undirectedGraph.addEdge(edge25); - undirectedGraph.addEdge(edge35); - undirectedGraph.addEdge(edge43); - undirectedGraph.addEdge(edge51); - undirectedGraph.addEdge(edge54); - - UndirectedGraph graph = graphModel.getUndirectedGraph(); - - ConnectedComponents c = new ConnectedComponents(); - HashMap indicies = c.createIndiciesMap(graph); - LinkedList> components = c.computeWeeklyConnectedComponents(graph, indicies); - assertEquals(components.size(), 1); - } - - @Test - public void testSpecial2UndirectedGraphConnectedComponents() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - Node node6 = graphModel.factory().newNode("5"); - Node node7 = graphModel.factory().newNode("6"); - Node node8 = graphModel.factory().newNode("7"); - Node node9 = graphModel.factory().newNode("8"); - undirectedGraph.addNode(node1); - undirectedGraph.addNode(node2); - undirectedGraph.addNode(node3); - undirectedGraph.addNode(node4); - undirectedGraph.addNode(node5); - undirectedGraph.addNode(node6); - undirectedGraph.addNode(node7); - undirectedGraph.addNode(node8); - undirectedGraph.addNode(node9); - Edge edge12 = graphModel.factory().newEdge(node1, node2, false); - Edge edge23 = graphModel.factory().newEdge(node2, node3, false); - Edge edge45 = graphModel.factory().newEdge(node4, node5, false); - Edge edge56 = graphModel.factory().newEdge(node5, node6, false); - Edge edge64 = graphModel.factory().newEdge(node6, node4, false); - Edge edge75 = graphModel.factory().newEdge(node7, node5, false); - undirectedGraph.addEdge(edge12); - undirectedGraph.addEdge(edge23); - undirectedGraph.addEdge(edge45); - undirectedGraph.addEdge(edge56); - undirectedGraph.addEdge(edge64); - undirectedGraph.addEdge(edge75); - - UndirectedGraph graph = graphModel.getUndirectedGraph(); - - ConnectedComponents c = new ConnectedComponents(); - HashMap indicies = c.createIndiciesMap(graph); - LinkedList> components = c.computeWeeklyConnectedComponents(graph, indicies); - - int componentNumber3 = c.getComponentNumber(components, node3); - int componentNumber4 = c.getComponentNumber(components, node4); - int componentNumber7 = c.getComponentNumber(components, node7); - int componentNumber8 = c.getComponentNumber(components, node8); - - assertEquals(components.size(), 4); - assertEquals(componentNumber4, componentNumber7); - assertNotEquals(componentNumber3, componentNumber8); - } - - @Test - public void testDirectedPathGraphConnectedComponents() { - GraphModel graphModel = GraphGenerator.generatePathDirectedGraph(4); - DirectedGraph graph = graphModel.getDirectedGraph(); - - ConnectedComponents c = new ConnectedComponents(); - HashMap indicies = c.createIndiciesMap(graph); - LinkedList> components = c.top_tarjans(graph, indicies); - assertEquals(components.size(), 4); - } - - @Test - public void testDirectedCyclicGraphConnectedComponents() { - GraphModel graphModel = GraphGenerator.generateCyclicDirectedGraph(5); - DirectedGraph graph = graphModel.getDirectedGraph(); - - ConnectedComponents c = new ConnectedComponents(); - HashMap indicies = c.createIndiciesMap(graph); - LinkedList> components = c.top_tarjans(graph, indicies); - assertEquals(components.size(), 1); - } - - @Test - public void testSpecial1DirectedGraphConnectedComponents() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - DirectedGraph directedGraph = graphModel.getDirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - directedGraph.addNode(node1); - directedGraph.addNode(node2); - directedGraph.addNode(node3); - directedGraph.addNode(node4); - directedGraph.addNode(node5); - Edge edge12 = graphModel.factory().newEdge(node1, node2); - Edge edge14 = graphModel.factory().newEdge(node1, node4); - Edge edge23 = graphModel.factory().newEdge(node2, node3); - Edge edge25 = graphModel.factory().newEdge(node2, node5); - Edge edge35 = graphModel.factory().newEdge(node3, node5); - Edge edge43 = graphModel.factory().newEdge(node4, node3); - Edge edge51 = graphModel.factory().newEdge(node5, node1); - Edge edge54 = graphModel.factory().newEdge(node5, node4); - directedGraph.addEdge(edge12); - directedGraph.addEdge(edge14); - directedGraph.addEdge(edge23); - directedGraph.addEdge(edge25); - directedGraph.addEdge(edge35); - directedGraph.addEdge(edge43); - directedGraph.addEdge(edge51); - directedGraph.addEdge(edge54); - - DirectedGraph graph = graphModel.getDirectedGraph(); - - ConnectedComponents c = new ConnectedComponents(); - HashMap indicies = c.createIndiciesMap(graph); - LinkedList> components = c.top_tarjans(graph, indicies); - assertEquals(components.size(), 1); - } - - @Test - public void testSpecial2DirectedGraphConnectedComponents() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - DirectedGraph directedGraph = graphModel.getDirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - directedGraph.addNode(node1); - directedGraph.addNode(node2); - directedGraph.addNode(node3); - directedGraph.addNode(node4); - directedGraph.addNode(node5); - Edge edge12 = graphModel.factory().newEdge(node1, node2); - Edge edge14 = graphModel.factory().newEdge(node1, node4); - Edge edge23 = graphModel.factory().newEdge(node2, node3); - Edge edge25 = graphModel.factory().newEdge(node2, node5); - Edge edge35 = graphModel.factory().newEdge(node3, node5); - Edge edge43 = graphModel.factory().newEdge(node4, node3); - Edge edge54 = graphModel.factory().newEdge(node5, node4); - directedGraph.addEdge(edge12); - directedGraph.addEdge(edge14); - directedGraph.addEdge(edge23); - directedGraph.addEdge(edge25); - directedGraph.addEdge(edge35); - directedGraph.addEdge(edge43); - directedGraph.addEdge(edge54); - - DirectedGraph graph = graphModel.getDirectedGraph(); - - ConnectedComponents c = new ConnectedComponents(); - HashMap indicies = c.createIndiciesMap(graph); - LinkedList> weeklyConnectedComponents = c.computeWeeklyConnectedComponents(graph, indicies); - LinkedList> stronglyConnectedComponents = c.top_tarjans(graph, indicies); - int componentNumber1 = c.getComponentNumber(stronglyConnectedComponents, node1); - int componentNumber3 = c.getComponentNumber(stronglyConnectedComponents, node3); - int componentNumber4 = c.getComponentNumber(stronglyConnectedComponents, node4); - int componentNumber5 = c.getComponentNumber(stronglyConnectedComponents, node5); - - assertEquals(stronglyConnectedComponents.size(), 3); - assertEquals(weeklyConnectedComponents.size(), 1); - assertEquals(componentNumber3, componentNumber5); - assertNotEquals(componentNumber1, componentNumber4); - } - - @Test - public void testSpecial3DirectedGraphConnectedComponents() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - DirectedGraph directedGraph = graphModel.getDirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - Node node6 = graphModel.factory().newNode("5"); - Node node7 = graphModel.factory().newNode("6"); - Node node8 = graphModel.factory().newNode("7"); - Node node9 = graphModel.factory().newNode("8"); - directedGraph.addNode(node1); - directedGraph.addNode(node2); - directedGraph.addNode(node3); - directedGraph.addNode(node4); - directedGraph.addNode(node5); - directedGraph.addNode(node6); - directedGraph.addNode(node7); - directedGraph.addNode(node8); - directedGraph.addNode(node9); - Edge edge12 = graphModel.factory().newEdge(node1, node2); - Edge edge23 = graphModel.factory().newEdge(node2, node3); - Edge edge45 = graphModel.factory().newEdge(node4, node5); - Edge edge56 = graphModel.factory().newEdge(node5, node6); - Edge edge64 = graphModel.factory().newEdge(node6, node4); - Edge edge75 = graphModel.factory().newEdge(node7, node5); - Edge edge89 = graphModel.factory().newEdge(node8, node9); - Edge edge98 = graphModel.factory().newEdge(node9, node8); - directedGraph.addEdge(edge12); - directedGraph.addEdge(edge23); - directedGraph.addEdge(edge45); - directedGraph.addEdge(edge56); - directedGraph.addEdge(edge64); - directedGraph.addEdge(edge75); - directedGraph.addEdge(edge89); - directedGraph.addEdge(edge98); - - DirectedGraph graph = graphModel.getDirectedGraph(); - - ConnectedComponents c = new ConnectedComponents(); - HashMap indicies = c.createIndiciesMap(graph); - LinkedList> stronglyConnectedComponents = c.top_tarjans(graph, indicies); - - assertEquals(stronglyConnectedComponents.size(), 6); - } - - @Test - public void testSpecial4DirectedGraphConnectedComponents() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - DirectedGraph directedGraph = graphModel.getDirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - Node node6 = graphModel.factory().newNode("5"); - Node node7 = graphModel.factory().newNode("6"); - Node node8 = graphModel.factory().newNode("7"); - directedGraph.addNode(node1); - directedGraph.addNode(node2); - directedGraph.addNode(node3); - directedGraph.addNode(node4); - directedGraph.addNode(node5); - directedGraph.addNode(node6); - directedGraph.addNode(node7); - directedGraph.addNode(node8); - Edge edge12 = graphModel.factory().newEdge(node1, node2); - Edge edge23 = graphModel.factory().newEdge(node2, node3); - Edge edge34 = graphModel.factory().newEdge(node3, node4); - Edge edge41 = graphModel.factory().newEdge(node4, node1); - Edge edge56 = graphModel.factory().newEdge(node5, node6); - Edge edge67 = graphModel.factory().newEdge(node6, node7); - Edge edge78 = graphModel.factory().newEdge(node7, node8); - Edge edge85 = graphModel.factory().newEdge(node8, node5); - Edge edge45 = graphModel.factory().newEdge(node4, node5); - directedGraph.addEdge(edge12); - directedGraph.addEdge(edge23); - directedGraph.addEdge(edge34); - directedGraph.addEdge(edge41); - directedGraph.addEdge(edge56); - directedGraph.addEdge(edge67); - directedGraph.addEdge(edge78); - directedGraph.addEdge(edge85); - directedGraph.addEdge(edge45); - - DirectedGraph graph = graphModel.getDirectedGraph(); - - ConnectedComponents c = new ConnectedComponents(); - HashMap indicies = c.createIndiciesMap(graph); - LinkedList> stronglyConnectedComponents = c.top_tarjans(graph, indicies); - - int componentNumber1 = c.getComponentNumber(stronglyConnectedComponents, node1); - int componentNumber5 = c.getComponentNumber(stronglyConnectedComponents, node5); - - assertEquals(stronglyConnectedComponents.size(), 2); - assertNotEquals(componentNumber1, componentNumber5); - } - - @Test - public void testSpecial2UndirectedGraphGiantComponent() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - Node node6 = graphModel.factory().newNode("5"); - Node node7 = graphModel.factory().newNode("6"); - Node node8 = graphModel.factory().newNode("7"); - Node node9 = graphModel.factory().newNode("8"); - undirectedGraph.addNode(node1); - undirectedGraph.addNode(node2); - undirectedGraph.addNode(node3); - undirectedGraph.addNode(node4); - undirectedGraph.addNode(node5); - undirectedGraph.addNode(node6); - undirectedGraph.addNode(node7); - undirectedGraph.addNode(node8); - undirectedGraph.addNode(node9); - Edge edge12 = graphModel.factory().newEdge(node1, node2, false); - Edge edge23 = graphModel.factory().newEdge(node2, node3, false); - Edge edge45 = graphModel.factory().newEdge(node4, node5, false); - Edge edge56 = graphModel.factory().newEdge(node5, node6, false); - Edge edge64 = graphModel.factory().newEdge(node6, node4, false); - Edge edge75 = graphModel.factory().newEdge(node7, node5, false); - undirectedGraph.addEdge(edge12); - undirectedGraph.addEdge(edge23); - undirectedGraph.addEdge(edge45); - undirectedGraph.addEdge(edge56); - undirectedGraph.addEdge(edge64); - undirectedGraph.addEdge(edge75); - - UndirectedGraph graph = graphModel.getUndirectedGraph(); - - ConnectedComponents c = new ConnectedComponents(); - HashMap indicies = c.createIndiciesMap(graph); - LinkedList> components = c.computeWeeklyConnectedComponents(graph, indicies); - c.fillComponentSizeList(components); - - int giantComponent = c.getGiantComponent(); - int componentNumber5 = c.getComponentNumber(components, node5); - - assertEquals(giantComponent, componentNumber5); - } -} diff --git a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/ConnectedComponentsTest.java b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/ConnectedComponentsTest.java new file mode 100644 index 0000000000..78289092b1 --- /dev/null +++ b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/ConnectedComponentsTest.java @@ -0,0 +1,512 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.statistics.plugin; + +import java.util.HashMap; +import java.util.LinkedList; +import junit.framework.TestCase; +import org.gephi.graph.api.DirectedGraph; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.UndirectedGraph; +import org.junit.Assert; +import org.junit.Test; + +/** + * @author Anna + */ +public class ConnectedComponentsTest extends TestCase { + + @Test + public void testComputeOneNodeWeaklyConnectedComponents() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + UndirectedGraph graph = graphModel.getUndirectedGraph(); + Node n = graph.getNode("0"); + + ConnectedComponents c = new ConnectedComponents(); + HashMap indices = new HashMap<>(); + indices.put(n, 0); + LinkedList> components = c.computeWeaklyConnectedComponents(graph, indices); + assertEquals(components.size(), 1); + } + + @Test + public void testComputeSelfLoopNodeAndIsolatedNodeWeaklyConnectedComponents() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + Edge edge11 = graphModel.factory().newEdge(node1, node1, false); + Edge edge12 = graphModel.factory().newEdge(node1, node2, false); + undirectedGraph.addEdge(edge11); + undirectedGraph.addEdge(edge12); + + ConnectedComponents c = new ConnectedComponents(); + HashMap indices = new HashMap<>(); + + indices.put(node1, 0); + indices.put(node2, 1); + indices.put(node3, 2); + + LinkedList> components = c.computeWeaklyConnectedComponents(undirectedGraph, indices); + assertEquals(components.size(), 2); + } + + @Test + public void testNullGraphWeaklyConnectedComponents() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(5); + UndirectedGraph graph = graphModel.getUndirectedGraph(); + Node n0 = graph.getNode("0"); + Node n1 = graph.getNode("1"); + Node n2 = graph.getNode("2"); + Node n3 = graph.getNode("3"); + Node n4 = graph.getNode("4"); + + ConnectedComponents c = new ConnectedComponents(); + HashMap indices = new HashMap<>(); + indices.put(n0, 0); + indices.put(n1, 1); + indices.put(n2, 2); + indices.put(n3, 3); + indices.put(n4, 4); + LinkedList> components = c.computeWeaklyConnectedComponents(graph, indices); + assertEquals(components.size(), 5); + } + + @Test + public void testComputeBarbellGraphWeaklyConnectedComponents() { + GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(4); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node[] nodes = new Node[4]; + for (int i = 0; i < 4; i++) { + Node currentNode = graphModel.factory().newNode(((Integer) (i + 4)).toString()); + nodes[i] = currentNode; + undirectedGraph.addNode(currentNode); + } + for (int i = 0; i < 3; i++) { + for (int j = i + 1; j < 4; j++) { + Edge currentEdge = graphModel.factory().newEdge(nodes[i], nodes[j], false); + undirectedGraph.addEdge(currentEdge); + } + } + Edge currentEdge = + graphModel.factory().newEdge(undirectedGraph.getNode("0"), undirectedGraph.getNode("5"), false); + undirectedGraph.addEdge(currentEdge); + UndirectedGraph graph = graphModel.getUndirectedGraph(); + + ConnectedComponents c = new ConnectedComponents(); + HashMap indices = c.createIndicesMap(graph); + LinkedList> components = c.computeWeaklyConnectedComponents(graph, indices); + assertEquals(components.size(), 1); + } + + @Test + public void testSpecial1UndirectedGraphConnectedComponents() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + undirectedGraph.addNode(node4); + undirectedGraph.addNode(node5); + Edge edge12 = graphModel.factory().newEdge(node1, node2, false); + Edge edge14 = graphModel.factory().newEdge(node1, node4, false); + Edge edge23 = graphModel.factory().newEdge(node2, node3, false); + Edge edge25 = graphModel.factory().newEdge(node2, node5, false); + Edge edge35 = graphModel.factory().newEdge(node3, node5, false); + Edge edge43 = graphModel.factory().newEdge(node4, node3, false); + Edge edge51 = graphModel.factory().newEdge(node5, node1, false); + Edge edge54 = graphModel.factory().newEdge(node5, node4, false); + undirectedGraph.addEdge(edge12); + undirectedGraph.addEdge(edge14); + undirectedGraph.addEdge(edge23); + undirectedGraph.addEdge(edge25); + undirectedGraph.addEdge(edge35); + undirectedGraph.addEdge(edge43); + undirectedGraph.addEdge(edge51); + undirectedGraph.addEdge(edge54); + + UndirectedGraph graph = graphModel.getUndirectedGraph(); + + ConnectedComponents c = new ConnectedComponents(); + HashMap indices = c.createIndicesMap(graph); + LinkedList> components = c.computeWeaklyConnectedComponents(graph, indices); + assertEquals(components.size(), 1); + } + + @Test + public void testSpecial2UndirectedGraphConnectedComponents() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + Node node6 = graphModel.factory().newNode("5"); + Node node7 = graphModel.factory().newNode("6"); + Node node8 = graphModel.factory().newNode("7"); + Node node9 = graphModel.factory().newNode("8"); + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + undirectedGraph.addNode(node4); + undirectedGraph.addNode(node5); + undirectedGraph.addNode(node6); + undirectedGraph.addNode(node7); + undirectedGraph.addNode(node8); + undirectedGraph.addNode(node9); + Edge edge12 = graphModel.factory().newEdge(node1, node2, false); + Edge edge23 = graphModel.factory().newEdge(node2, node3, false); + Edge edge45 = graphModel.factory().newEdge(node4, node5, false); + Edge edge56 = graphModel.factory().newEdge(node5, node6, false); + Edge edge64 = graphModel.factory().newEdge(node6, node4, false); + Edge edge75 = graphModel.factory().newEdge(node7, node5, false); + undirectedGraph.addEdge(edge12); + undirectedGraph.addEdge(edge23); + undirectedGraph.addEdge(edge45); + undirectedGraph.addEdge(edge56); + undirectedGraph.addEdge(edge64); + undirectedGraph.addEdge(edge75); + + UndirectedGraph graph = graphModel.getUndirectedGraph(); + + ConnectedComponents c = new ConnectedComponents(); + HashMap indices = c.createIndicesMap(graph); + LinkedList> components = c.computeWeaklyConnectedComponents(graph, indices); + + int componentNumber3 = c.getComponentNumber(components, node3); + int componentNumber4 = c.getComponentNumber(components, node4); + int componentNumber7 = c.getComponentNumber(components, node7); + int componentNumber8 = c.getComponentNumber(components, node8); + + assertEquals(components.size(), 4); + assertEquals(componentNumber4, componentNumber7); + Assert.assertNotEquals(componentNumber3, componentNumber8); + } + + @Test + public void testDirectedPathGraphConnectedComponents() { + GraphModel graphModel = GraphGenerator.generatePathDirectedGraph(4); + DirectedGraph graph = graphModel.getDirectedGraph(); + + ConnectedComponents c = new ConnectedComponents(); + HashMap indices = c.createIndicesMap(graph); + LinkedList> components = c.top_tarjans(graph, indices); + assertEquals(components.size(), 4); + } + + @Test + public void testDirectedCyclicGraphConnectedComponents() { + GraphModel graphModel = GraphGenerator.generateCyclicDirectedGraph(5); + DirectedGraph graph = graphModel.getDirectedGraph(); + + ConnectedComponents c = new ConnectedComponents(); + HashMap indices = c.createIndicesMap(graph); + LinkedList> components = c.top_tarjans(graph, indices); + assertEquals(components.size(), 1); + } + + @Test + public void testSpecial1DirectedGraphConnectedComponents() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + directedGraph.addNode(node1); + directedGraph.addNode(node2); + directedGraph.addNode(node3); + directedGraph.addNode(node4); + directedGraph.addNode(node5); + Edge edge12 = graphModel.factory().newEdge(node1, node2); + Edge edge14 = graphModel.factory().newEdge(node1, node4); + Edge edge23 = graphModel.factory().newEdge(node2, node3); + Edge edge25 = graphModel.factory().newEdge(node2, node5); + Edge edge35 = graphModel.factory().newEdge(node3, node5); + Edge edge43 = graphModel.factory().newEdge(node4, node3); + Edge edge51 = graphModel.factory().newEdge(node5, node1); + Edge edge54 = graphModel.factory().newEdge(node5, node4); + directedGraph.addEdge(edge12); + directedGraph.addEdge(edge14); + directedGraph.addEdge(edge23); + directedGraph.addEdge(edge25); + directedGraph.addEdge(edge35); + directedGraph.addEdge(edge43); + directedGraph.addEdge(edge51); + directedGraph.addEdge(edge54); + + DirectedGraph graph = graphModel.getDirectedGraph(); + + ConnectedComponents c = new ConnectedComponents(); + HashMap indices = c.createIndicesMap(graph); + LinkedList> components = c.top_tarjans(graph, indices); + assertEquals(components.size(), 1); + } + + @Test + public void testSpecial2DirectedGraphConnectedComponents() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + directedGraph.addNode(node1); + directedGraph.addNode(node2); + directedGraph.addNode(node3); + directedGraph.addNode(node4); + directedGraph.addNode(node5); + Edge edge12 = graphModel.factory().newEdge(node1, node2); + Edge edge14 = graphModel.factory().newEdge(node1, node4); + Edge edge23 = graphModel.factory().newEdge(node2, node3); + Edge edge25 = graphModel.factory().newEdge(node2, node5); + Edge edge35 = graphModel.factory().newEdge(node3, node5); + Edge edge43 = graphModel.factory().newEdge(node4, node3); + Edge edge54 = graphModel.factory().newEdge(node5, node4); + directedGraph.addEdge(edge12); + directedGraph.addEdge(edge14); + directedGraph.addEdge(edge23); + directedGraph.addEdge(edge25); + directedGraph.addEdge(edge35); + directedGraph.addEdge(edge43); + directedGraph.addEdge(edge54); + + DirectedGraph graph = graphModel.getDirectedGraph(); + + ConnectedComponents c = new ConnectedComponents(); + HashMap indices = c.createIndicesMap(graph); + LinkedList> weeklyConnectedComponents = c.computeWeaklyConnectedComponents(graph, indices); + LinkedList> stronglyConnectedComponents = c.top_tarjans(graph, indices); + int componentNumber1 = c.getComponentNumber(stronglyConnectedComponents, node1); + int componentNumber3 = c.getComponentNumber(stronglyConnectedComponents, node3); + int componentNumber4 = c.getComponentNumber(stronglyConnectedComponents, node4); + int componentNumber5 = c.getComponentNumber(stronglyConnectedComponents, node5); + + assertEquals(stronglyConnectedComponents.size(), 3); + assertEquals(weeklyConnectedComponents.size(), 1); + assertEquals(componentNumber3, componentNumber5); + Assert.assertNotEquals(componentNumber1, componentNumber4); + } + + @Test + public void testSpecial3DirectedGraphConnectedComponents() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + Node node6 = graphModel.factory().newNode("5"); + Node node7 = graphModel.factory().newNode("6"); + Node node8 = graphModel.factory().newNode("7"); + Node node9 = graphModel.factory().newNode("8"); + directedGraph.addNode(node1); + directedGraph.addNode(node2); + directedGraph.addNode(node3); + directedGraph.addNode(node4); + directedGraph.addNode(node5); + directedGraph.addNode(node6); + directedGraph.addNode(node7); + directedGraph.addNode(node8); + directedGraph.addNode(node9); + Edge edge12 = graphModel.factory().newEdge(node1, node2); + Edge edge23 = graphModel.factory().newEdge(node2, node3); + Edge edge45 = graphModel.factory().newEdge(node4, node5); + Edge edge56 = graphModel.factory().newEdge(node5, node6); + Edge edge64 = graphModel.factory().newEdge(node6, node4); + Edge edge75 = graphModel.factory().newEdge(node7, node5); + Edge edge89 = graphModel.factory().newEdge(node8, node9); + Edge edge98 = graphModel.factory().newEdge(node9, node8); + directedGraph.addEdge(edge12); + directedGraph.addEdge(edge23); + directedGraph.addEdge(edge45); + directedGraph.addEdge(edge56); + directedGraph.addEdge(edge64); + directedGraph.addEdge(edge75); + directedGraph.addEdge(edge89); + directedGraph.addEdge(edge98); + + DirectedGraph graph = graphModel.getDirectedGraph(); + + ConnectedComponents c = new ConnectedComponents(); + HashMap indices = c.createIndicesMap(graph); + LinkedList> stronglyConnectedComponents = c.top_tarjans(graph, indices); + + assertEquals(stronglyConnectedComponents.size(), 6); + } + + @Test + public void testSpecial4DirectedGraphConnectedComponents() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + Node node6 = graphModel.factory().newNode("5"); + Node node7 = graphModel.factory().newNode("6"); + Node node8 = graphModel.factory().newNode("7"); + directedGraph.addNode(node1); + directedGraph.addNode(node2); + directedGraph.addNode(node3); + directedGraph.addNode(node4); + directedGraph.addNode(node5); + directedGraph.addNode(node6); + directedGraph.addNode(node7); + directedGraph.addNode(node8); + Edge edge12 = graphModel.factory().newEdge(node1, node2); + Edge edge23 = graphModel.factory().newEdge(node2, node3); + Edge edge34 = graphModel.factory().newEdge(node3, node4); + Edge edge41 = graphModel.factory().newEdge(node4, node1); + Edge edge56 = graphModel.factory().newEdge(node5, node6); + Edge edge67 = graphModel.factory().newEdge(node6, node7); + Edge edge78 = graphModel.factory().newEdge(node7, node8); + Edge edge85 = graphModel.factory().newEdge(node8, node5); + Edge edge45 = graphModel.factory().newEdge(node4, node5); + directedGraph.addEdge(edge12); + directedGraph.addEdge(edge23); + directedGraph.addEdge(edge34); + directedGraph.addEdge(edge41); + directedGraph.addEdge(edge56); + directedGraph.addEdge(edge67); + directedGraph.addEdge(edge78); + directedGraph.addEdge(edge85); + directedGraph.addEdge(edge45); + + DirectedGraph graph = graphModel.getDirectedGraph(); + + ConnectedComponents c = new ConnectedComponents(); + HashMap indices = c.createIndicesMap(graph); + LinkedList> stronglyConnectedComponents = c.top_tarjans(graph, indices); + + int componentNumber1 = c.getComponentNumber(stronglyConnectedComponents, node1); + int componentNumber5 = c.getComponentNumber(stronglyConnectedComponents, node5); + + assertEquals(stronglyConnectedComponents.size(), 2); + Assert.assertNotEquals(componentNumber1, componentNumber5); + } + + @Test + public void testSpecial2UndirectedGraphGiantComponent() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + Node node6 = graphModel.factory().newNode("5"); + Node node7 = graphModel.factory().newNode("6"); + Node node8 = graphModel.factory().newNode("7"); + Node node9 = graphModel.factory().newNode("8"); + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + undirectedGraph.addNode(node4); + undirectedGraph.addNode(node5); + undirectedGraph.addNode(node6); + undirectedGraph.addNode(node7); + undirectedGraph.addNode(node8); + undirectedGraph.addNode(node9); + Edge edge12 = graphModel.factory().newEdge(node1, node2, false); + Edge edge23 = graphModel.factory().newEdge(node2, node3, false); + Edge edge45 = graphModel.factory().newEdge(node4, node5, false); + Edge edge56 = graphModel.factory().newEdge(node5, node6, false); + Edge edge64 = graphModel.factory().newEdge(node6, node4, false); + Edge edge75 = graphModel.factory().newEdge(node7, node5, false); + undirectedGraph.addEdge(edge12); + undirectedGraph.addEdge(edge23); + undirectedGraph.addEdge(edge45); + undirectedGraph.addEdge(edge56); + undirectedGraph.addEdge(edge64); + undirectedGraph.addEdge(edge75); + + UndirectedGraph graph = graphModel.getUndirectedGraph(); + + ConnectedComponents c = new ConnectedComponents(); + HashMap indices = c.createIndicesMap(graph); + LinkedList> components = c.computeWeaklyConnectedComponents(graph, indices); + c.fillComponentSizeList(components); + + int giantComponent = c.getGiantComponent(); + int componentNumber5 = c.getComponentNumber(components, node5); + + assertEquals(giantComponent, componentNumber5); + } + + @Test + public void testColumnCreation() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + + ConnectedComponents cc = new ConnectedComponents(); + cc.execute(graphModel); + + Assert.assertTrue(graphModel.getNodeTable().hasColumn(ConnectedComponents.WEAKLY)); + } + + @Test + public void testColumnReplace() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + + graphModel.getNodeTable().addColumn(ConnectedComponents.WEAKLY, String.class); + + ConnectedComponents cc = new ConnectedComponents(); + cc.execute(graphModel); + } +} diff --git a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/DegreeNGTest.java b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/DegreeNGTest.java deleted file mode 100644 index 9ddf13d076..0000000000 --- a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/DegreeNGTest.java +++ /dev/null @@ -1,168 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package org.gephi.statistics.plugin; - -import org.gephi.graph.api.DirectedGraph; -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.Graph; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.GraphModel; -import org.gephi.graph.api.Node; -import org.gephi.project.api.ProjectController; -import org.gephi.project.impl.ProjectControllerImpl; -import org.openide.util.Lookup; -import static org.testng.Assert.*; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -/** - * - * @author Anna - */ -public class DegreeNGTest { - - private ProjectController pc; - - @BeforeClass - public void setUp() { - pc = Lookup.getDefault().lookup(ProjectControllerImpl.class); - } - - @BeforeMethod - public void initialize() { - pc.newProject(); - } - - @AfterMethod - public void clean() { - pc.closeCurrentProject(); - } - - @Test - public void testOneNodeDegree() { - GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); - Graph graph = graphModel.getGraph(); - Node n = graph.getNode("0"); - - Degree d = new Degree(); - int degree = d.calculateDegree(graph, n); - assertEquals(degree, 0); - } - - @Test - public void testNullGraphDegree() { - GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(5); - Graph graph = graphModel.getGraph(); - Node n = graph.getNode("1"); - Degree d = new Degree(); - int degree = d.calculateDegree(graph, n); - double avDegree = d.calculateAverageDegree(graph, false, false); - assertEquals(degree, 0); - assertEquals(avDegree, 0.0); - } - - @Test - public void testCompleteGraphDegree() { - GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(5); - Graph graph = graphModel.getGraph(); - Node n = graph.getNode("2"); - Degree d = new Degree(); - int degree = d.calculateDegree(graph, n); - assertEquals(degree, 4); - } - - @Test - public void testStarGraphDegree() { - GraphModel graphModel = GraphGenerator.generateStarUndirectedGraph(5); - Graph graph = graphModel.getGraph(); - Node n1 = graph.getNode("0"); - Node n2 = graph.getNode("1"); - Degree d = new Degree(); - int degree1 = d.calculateDegree(graph, n1); - int degree2 = d.calculateDegree(graph, n2); - double avDegree = d.calculateAverageDegree(graph, false, false); - double expectedAvDegree = 1.6667; - double diff = Math.abs(avDegree - expectedAvDegree); - assertEquals(degree1, 5); - assertEquals(degree2, 1); - assertTrue(diff < 0.001); - } - - @Test - public void testCyclicGraphDegree() { - GraphModel graphModel = GraphGenerator.generateCyclicUndirectedGraph(5); - Graph graph = graphModel.getGraph(); - Node n = graph.getNode("3"); - Degree d = new Degree(); - int degree = d.calculateDegree(graph, n); - double avDegree = d.calculateAverageDegree(graph, false, false); - assertEquals(degree, 2); - assertEquals(avDegree, 2.0); - } - - @Test - public void testDirectedPathGraphDegree() { - GraphModel graphModel = GraphGenerator.generatePathDirectedGraph(2); - DirectedGraph graph = graphModel.getDirectedGraph(); - Node n1 = graph.getNode("0"); - Node n2 = graph.getNode("1"); - Degree d = new Degree(); - int inDegree1 = d.calculateInDegree(graph, n1); - int inDegree2 = d.calculateInDegree(graph, n2); - int outDegree1 = d.calculateOutDegree(graph, n1); - double avDegree = d.calculateAverageDegree(graph, true, false); - assertEquals(inDegree1, 0); - assertEquals(inDegree2, 1); - assertEquals(outDegree1, 1); - assertEquals(avDegree, 1.0); - } - - @Test - public void testDirectedCyclicGraphDegree() { - GraphModel graphModel = GraphGenerator.generateCyclicDirectedGraph(5); - DirectedGraph graph = graphModel.getDirectedGraph(); - Node n1 = graph.getNode("0"); - Node n3 = graph.getNode("2"); - Node n5 = graph.getNode("4"); - Degree d = new Degree(); - int inDegree3 = d.calculateInDegree(graph, n3); - int degree1 = d.calculateDegree(graph, n1); - int outDegree5 = d.calculateOutDegree(graph, n5); - double avDegree = d.calculateAverageDegree(graph, true, false); - assertEquals(inDegree3, 1); - assertEquals(degree1, 2); - assertEquals(outDegree5, 1); - assertEquals(avDegree, 2.0); - } - - @Test - public void testDirectedStarOutGraphDegree() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - - DirectedGraph directedGraph = graphModel.getDirectedGraph(); - Node firstNode = graphModel.factory().newNode("0"); - directedGraph.addNode(firstNode); - for (int i = 1; i <= 5; i++) { - Node currentNode = graphModel.factory().newNode(((Integer) i).toString()); - directedGraph.addNode(currentNode); - Edge currentEdge = graphModel.factory().newEdge(firstNode, currentNode); - directedGraph.addEdge(currentEdge); - } - - DirectedGraph graph = graphModel.getDirectedGraph(); - Node n1 = graph.getNode("0"); - Node n3 = graph.getNode("2"); - Degree d = new Degree(); - int inDegree1 = d.calculateInDegree(graph, n1); - int outDegree1 = d.calculateOutDegree(graph, n1); - int degree3 = d.calculateDegree(graph, n3); - - assertEquals(inDegree1, 0); - assertEquals(outDegree1, 5); - assertEquals(degree3, 1); - } -} diff --git a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/DegreeTest.java b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/DegreeTest.java new file mode 100644 index 0000000000..217a7cbc81 --- /dev/null +++ b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/DegreeTest.java @@ -0,0 +1,223 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.statistics.plugin; + +import junit.framework.TestCase; +import org.gephi.graph.api.DirectedGraph; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; +import org.junit.Assert; +import org.junit.Test; + +/** + * @author Anna + */ +public class DegreeTest extends TestCase { + + @Test + public void testOneNodeDegree() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + Graph graph = graphModel.getGraph(); + Node n = graph.getNode("0"); + + Degree d = new Degree(); + int degree = d.calculateDegree(graph, n); + assertEquals(degree, 0); + } + + @Test + public void testNullGraphDegree() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(5); + Graph graph = graphModel.getGraph(); + Node n = graph.getNode("1"); + Degree d = new Degree(); + int degree = d.calculateDegree(graph, n); + double avDegree = d.calculateAverageDegree(graph, false, false); + assertEquals(degree, 0); + assertEquals(avDegree, 0.0); + } + + @Test + public void testCompleteGraphDegree() { + GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(5); + Graph graph = graphModel.getGraph(); + Node n = graph.getNode("2"); + Degree d = new Degree(); + int degree = d.calculateDegree(graph, n); + assertEquals(degree, 4); + } + + @Test + public void testSelfLoopGraphDegree() { + GraphModel graphModel = GraphGenerator.generateSelfLoopUndirectedGraph(1); + Graph graph = graphModel.getGraph(); + Node n = graph.getNode("0"); + Degree d = new Degree(); + int degree = d.calculateDegree(graph, n); + assertEquals(degree, 2); + } + + @Test + public void testSelfLoopDirectedGraphDegree() { + GraphModel graphModel = GraphGenerator.generateSelfLoopDirectedGraph(1); + DirectedGraph graph = graphModel.getDirectedGraph(); + Node n = graph.getNode("0"); + Degree d = new Degree(); + assertEquals(d.calculateDegree(graph, n), 2); + assertEquals(d.calculateInDegree(graph, n), 1); + assertEquals(d.calculateOutDegree(graph, n), 1); + } + + @Test + public void testStarGraphDegree() { + GraphModel graphModel = GraphGenerator.generateStarUndirectedGraph(5); + Graph graph = graphModel.getGraph(); + Node n1 = graph.getNode("0"); + Node n2 = graph.getNode("1"); + Degree d = new Degree(); + int degree1 = d.calculateDegree(graph, n1); + int degree2 = d.calculateDegree(graph, n2); + double avDegree = d.calculateAverageDegree(graph, false, false); + double expectedAvDegree = 1.6667; + double diff = Math.abs(avDegree - expectedAvDegree); + assertEquals(degree1, 5); + assertEquals(degree2, 1); + assertTrue(diff < 0.001); + } + + @Test + public void testCyclicGraphDegree() { + GraphModel graphModel = GraphGenerator.generateCyclicUndirectedGraph(5); + Graph graph = graphModel.getGraph(); + Node n = graph.getNode("3"); + Degree d = new Degree(); + int degree = d.calculateDegree(graph, n); + double avDegree = d.calculateAverageDegree(graph, false, false); + assertEquals(degree, 2); + assertEquals(avDegree, 2.0); + } + + @Test + public void testDirectedPathGraphDegree() { + GraphModel graphModel = GraphGenerator.generatePathDirectedGraph(2); + DirectedGraph graph = graphModel.getDirectedGraph(); + Node n1 = graph.getNode("0"); + Node n2 = graph.getNode("1"); + Degree d = new Degree(); + int inDegree1 = d.calculateInDegree(graph, n1); + int inDegree2 = d.calculateInDegree(graph, n2); + int outDegree1 = d.calculateOutDegree(graph, n1); + double avDegree = d.calculateAverageDegree(graph, true, false); + assertEquals(inDegree1, 0); + assertEquals(inDegree2, 1); + assertEquals(outDegree1, 1); + assertEquals(avDegree, 0.5); + } + + @Test + public void testDirectedCyclicGraphDegree() { + GraphModel graphModel = GraphGenerator.generateCyclicDirectedGraph(5); + DirectedGraph graph = graphModel.getDirectedGraph(); + Node n1 = graph.getNode("0"); + Node n3 = graph.getNode("2"); + Node n5 = graph.getNode("4"); + Degree d = new Degree(); + int inDegree3 = d.calculateInDegree(graph, n3); + int degree1 = d.calculateDegree(graph, n1); + int outDegree5 = d.calculateOutDegree(graph, n5); + double avDegree = d.calculateAverageDegree(graph, true, false); + assertEquals(inDegree3, 1); + assertEquals(degree1, 2); + assertEquals(outDegree5, 1); + assertEquals(avDegree, 1.0); + } + + @Test + public void testDirectedStarOutGraphDegree() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + Node firstNode = graphModel.factory().newNode("0"); + directedGraph.addNode(firstNode); + for (int i = 1; i <= 5; i++) { + Node currentNode = graphModel.factory().newNode(((Integer) i).toString()); + directedGraph.addNode(currentNode); + Edge currentEdge = graphModel.factory().newEdge(firstNode, currentNode); + directedGraph.addEdge(currentEdge); + } + + DirectedGraph graph = graphModel.getDirectedGraph(); + Node n1 = graph.getNode("0"); + Node n3 = graph.getNode("2"); + Degree d = new Degree(); + int inDegree1 = d.calculateInDegree(graph, n1); + int outDegree1 = d.calculateOutDegree(graph, n1); + int degree3 = d.calculateDegree(graph, n3); + + assertEquals(inDegree1, 0); + assertEquals(outDegree1, 5); + assertEquals(degree3, 1); + } + + @Test + public void testColumnCreation() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + + Degree d = new Degree(); + d.execute(graphModel); + + Assert.assertTrue(graphModel.getNodeTable().hasColumn(Degree.DEGREE)); + } + + @Test + public void testColumnReplace() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + + graphModel.getNodeTable().addColumn(Degree.DEGREE, String.class); + + Degree d = new Degree(); + d.execute(graphModel); + } +} diff --git a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/DummyTest.java b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/DummyTest.java new file mode 100644 index 0000000000..2482620bcf --- /dev/null +++ b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/DummyTest.java @@ -0,0 +1,17 @@ +package org.gephi.statistics.plugin; + +import org.gephi.graph.api.GraphModel; +import org.gephi.io.importer.GraphImporter; +import org.junit.Assert; +import org.junit.Test; + +public class DummyTest { + + @Test + public void testDummy() { + GraphModel graphModel = GraphImporter.importGraph(DummyTest.class, "basic.gexf"); + + Assert.assertEquals(2, graphModel.getGraph().getNodeCount()); + Assert.assertEquals(1, graphModel.getGraph().getEdgeCount()); + } +} diff --git a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/EdgeWrapperNGTest.java b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/EdgeWrapperNGTest.java deleted file mode 100644 index 30fabd893a..0000000000 --- a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/EdgeWrapperNGTest.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package org.gephi.statistics.plugin; - -import static org.testng.Assert.*; -import org.testng.annotations.Test; - -/** - * - * @author Anna - */ -public class EdgeWrapperNGTest { - - public EdgeWrapperNGTest() { - } - - @Test - public void testSomeMethod() { - } -} \ No newline at end of file diff --git a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/EigenvectorCentralityNGTest.java b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/EigenvectorCentralityNGTest.java deleted file mode 100644 index b2540a1cf4..0000000000 --- a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/EigenvectorCentralityNGTest.java +++ /dev/null @@ -1,437 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package org.gephi.statistics.plugin; - -import java.util.HashMap; -import org.gephi.graph.api.DirectedGraph; -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.GraphModel; -import org.gephi.graph.api.Node; -import org.gephi.graph.api.UndirectedGraph; -import org.gephi.project.api.ProjectController; -import org.gephi.project.impl.ProjectControllerImpl; -import org.openide.util.Lookup; -import static org.testng.Assert.*; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -/** - * - * @author Anna - */ -public class EigenvectorCentralityNGTest { - - private ProjectController pc; - - @BeforeClass - public void setUp() { - pc = Lookup.getDefault().lookup(ProjectControllerImpl.class); - } - - @BeforeMethod - public void initialize() { - pc.newProject(); - } - - @AfterMethod - public void clean() { - pc.closeCurrentProject(); - } - - @Test - public void testOneNodeEigenvectorCentrality() { - GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); - UndirectedGraph hgraph = graphModel.getUndirectedGraph(); - - EigenvectorCentrality ec = new EigenvectorCentrality(); - - double[] centralities = new double[1]; - - HashMap indicies = new HashMap(); - HashMap invIndicies = new HashMap(); - - ec.fillIndiciesMaps(hgraph, centralities, indicies, invIndicies); - - ec.calculateEigenvectorCentrality(hgraph, centralities, indicies, invIndicies, false, 100); - - Node n1 = hgraph.getNode("0"); - int index = invIndicies.get(n1); - double ec1 = centralities[index]; - - assertEquals(ec1, 0.0); - } - - @Test - public void testTwoConnectedNodesEigenvectorCentrality() { - GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(2); - UndirectedGraph hgraph = graphModel.getUndirectedGraph(); - - EigenvectorCentrality ec = new EigenvectorCentrality(); - - double[] centralities = new double[2]; - - HashMap indicies = new HashMap(); - HashMap invIndicies = new HashMap(); - - ec.fillIndiciesMaps(hgraph, centralities, indicies, invIndicies); - - ec.calculateEigenvectorCentrality(hgraph, centralities, indicies, invIndicies, false, 100); - - Node n1 = hgraph.getNode("0"); - int index = invIndicies.get(n1); - double ec1 = centralities[index]; - - assertEquals(ec1, 1.0); - } - - @Test - public void testNullGraphEigenvectorCentrality() { - GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(5); - UndirectedGraph hgraph = graphModel.getUndirectedGraph(); - - EigenvectorCentrality ec = new EigenvectorCentrality(); - - double[] centralities = new double[5]; - - HashMap indicies = new HashMap(); - HashMap invIndicies = new HashMap(); - - ec.fillIndiciesMaps(hgraph, centralities, indicies, invIndicies); - - ec.calculateEigenvectorCentrality(hgraph, centralities, indicies, invIndicies, false, 100); - - Node n2 = hgraph.getNode("1"); - int index = invIndicies.get(n2); - double ec2 = centralities[index]; - - assertEquals(ec2, 0.0); - } - - @Test - public void testCompleteUndirectedGraphEigenvectorCentrality() { - GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(5); - UndirectedGraph hgraph = graphModel.getUndirectedGraph(); - - EigenvectorCentrality ec = new EigenvectorCentrality(); - - double[] centralities = new double[5]; - - HashMap indicies = new HashMap(); - HashMap invIndicies = new HashMap(); - - ec.fillIndiciesMaps(hgraph, centralities, indicies, invIndicies); - - ec.calculateEigenvectorCentrality(hgraph, centralities, indicies, invIndicies, false, 100); - - Node n1 = hgraph.getNode("0"); - Node n3 = hgraph.getNode("2"); - int index1 = invIndicies.get(n1); - int index3 = invIndicies.get(n3); - double ec1 = centralities[index1]; - double ec3 = centralities[index3]; - - assertEquals(ec1, 1.0); - assertEquals(ec3, 1.0); - } - - @Test - public void testSpecial1UndirectedGraphEigenvectorCentrlity() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - - undirectedGraph.addNode(node1); - undirectedGraph.addNode(node2); - undirectedGraph.addNode(node3); - undirectedGraph.addNode(node4); - - Edge edge12 = graphModel.factory().newEdge(node1, node2, false); - Edge edge23 = graphModel.factory().newEdge(node2, node3, false); - Edge edge34 = graphModel.factory().newEdge(node3, node4, false); - Edge edge13 = graphModel.factory().newEdge(node1, node3, false); - Edge edge24 = graphModel.factory().newEdge(node2, node4, false); - - undirectedGraph.addEdge(edge12); - undirectedGraph.addEdge(edge23); - undirectedGraph.addEdge(edge34); - undirectedGraph.addEdge(edge13); - undirectedGraph.addEdge(edge24); - - UndirectedGraph hgraph = graphModel.getUndirectedGraph(); - EigenvectorCentrality ec = new EigenvectorCentrality(); - - double[] centralities = new double[4]; - - HashMap indicies = new HashMap(); - HashMap invIndicies = new HashMap(); - - ec.fillIndiciesMaps(hgraph, centralities, indicies, invIndicies); - - ec.calculateEigenvectorCentrality(hgraph, centralities, indicies, invIndicies, false, 100); - - int index1 = invIndicies.get(node1); - int index2 = invIndicies.get(node2); - int index3 = invIndicies.get(node3); - double ec1 = centralities[index1]; - double ec2 = centralities[index2]; - double ec3 = centralities[index3]; - - assertEquals(ec2, ec3); - assertNotEquals(ec1, ec2); - assertEquals(ec3, 1.0); - } - - @Test - public void testSpecial2UndirectedGraphEigenvectorCentrlity() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - - undirectedGraph.addNode(node1); - undirectedGraph.addNode(node2); - undirectedGraph.addNode(node3); - undirectedGraph.addNode(node4); - undirectedGraph.addNode(node5); - - Edge edge13 = graphModel.factory().newEdge(node1, node3, false); - Edge edge23 = graphModel.factory().newEdge(node2, node3, false); - Edge edge34 = graphModel.factory().newEdge(node3, node4, false); - Edge edge45 = graphModel.factory().newEdge(node4, node5, false); - - undirectedGraph.addEdge(edge13); - undirectedGraph.addEdge(edge23); - undirectedGraph.addEdge(edge34); - undirectedGraph.addEdge(edge45); - - UndirectedGraph hgraph = graphModel.getUndirectedGraph(); - EigenvectorCentrality ec = new EigenvectorCentrality(); - - double[] centralities = new double[5]; - - HashMap indicies = new HashMap(); - HashMap invIndicies = new HashMap(); - - ec.fillIndiciesMaps(hgraph, centralities, indicies, invIndicies); - - ec.calculateEigenvectorCentrality(hgraph, centralities, indicies, invIndicies, false, 100); - - int index2 = invIndicies.get(node2); - int index3 = invIndicies.get(node3); - int index4 = invIndicies.get(node4); - double ec2 = centralities[index2]; - double ec3 = centralities[index3]; - double ec4 = centralities[index4]; - - double res = 0.765; - double diff = 0.01; - - assertTrue(ec2 < ec3); - assertTrue(Math.abs(ec4 - res) < diff); - } - - @Test - public void testSpecial3UndirectedGraphEigenvectorCentrlity() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - - undirectedGraph.addNode(node1); - undirectedGraph.addNode(node2); - undirectedGraph.addNode(node3); - - Edge edge11 = graphModel.factory().newEdge(node1, node1, false); - Edge edge12 = graphModel.factory().newEdge(node1, node2, false); - Edge edge23 = graphModel.factory().newEdge(node2, node3, false); - Edge edge33 = graphModel.factory().newEdge(node3, node3, false); - - undirectedGraph.addEdge(edge11); - undirectedGraph.addEdge(edge12); - undirectedGraph.addEdge(edge23); - undirectedGraph.addEdge(edge33); - - UndirectedGraph hgraph = graphModel.getUndirectedGraph(); - EigenvectorCentrality ec = new EigenvectorCentrality(); - - double[] centralities = new double[3]; - - HashMap indicies = new HashMap(); - HashMap invIndicies = new HashMap(); - - ec.fillIndiciesMaps(hgraph, centralities, indicies, invIndicies); - - ec.calculateEigenvectorCentrality(hgraph, centralities, indicies, invIndicies, false, 100); - - int index1 = invIndicies.get(node1); - int index2 = invIndicies.get(node2); - double ec1 = centralities[index1]; - double ec2 = centralities[index2]; - - assertEquals(ec1, ec2); - } - - @Test - public void testCyclicDirectedGraphEigenvectorCentrality() { - GraphModel graphModel = GraphGenerator.generateCyclicDirectedGraph(3); - DirectedGraph hgraph = graphModel.getDirectedGraph(); - - EigenvectorCentrality ec = new EigenvectorCentrality(); - - double[] centralities = new double[3]; - - HashMap indicies = new HashMap(); - HashMap invIndicies = new HashMap(); - - ec.fillIndiciesMaps(hgraph, centralities, indicies, invIndicies); - - ec.calculateEigenvectorCentrality(hgraph, centralities, indicies, invIndicies, true, 100); - - Node n1 = hgraph.getNode("0"); - int index1 = invIndicies.get(n1); - double ec1 = centralities[index1]; - - assertEquals(ec1, 1.0); - } - - @Test - public void testSpecial1DirectedEigenvectorCentrality() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - - DirectedGraph directedGraph = graphModel.getDirectedGraph(); - - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - - directedGraph.addNode(node1); - directedGraph.addNode(node2); - directedGraph.addNode(node3); - directedGraph.addNode(node4); - directedGraph.addNode(node5); - - Edge edge12 = graphModel.factory().newEdge(node1, node2); - Edge edge23 = graphModel.factory().newEdge(node2, node3); - Edge edge31 = graphModel.factory().newEdge(node3, node1); - Edge edge42 = graphModel.factory().newEdge(node4, node2); - Edge edge54 = graphModel.factory().newEdge(node5, node4); - - directedGraph.addEdge(edge12); - directedGraph.addEdge(edge23); - directedGraph.addEdge(edge31); - directedGraph.addEdge(edge42); - directedGraph.addEdge(edge54); - - DirectedGraph hgraph = graphModel.getDirectedGraph(); - EigenvectorCentrality ec = new EigenvectorCentrality(); - - double[] centralities = new double[5]; - - HashMap indicies = new HashMap(); - HashMap invIndicies = new HashMap(); - - ec.fillIndiciesMaps(hgraph, centralities, indicies, invIndicies); - - ec.calculateEigenvectorCentrality(hgraph, centralities, indicies, invIndicies, true, 1000); - - int index1 = invIndicies.get(node1); - int index2 = invIndicies.get(node2); - int index4 = invIndicies.get(node4); - int index5 = invIndicies.get(node5); - - double ec1 = centralities[index1]; - double ec2 = centralities[index2]; - double ec4 = centralities[index4]; - double ec5 = centralities[index5]; - - double diff = 0.01; - double res0 = 0.; - double res1 = 1.; - - assertEquals(ec5, 0.0); - assertTrue(Math.abs(ec4 - res0) < diff); - assertTrue(Math.abs(ec1 - res1) < diff); - assertTrue(Math.abs(ec1 - ec2) < diff); - } - - @Test - public void testDirectedStarOutEigenvectorCentrality() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - - DirectedGraph directedGraph = graphModel.getDirectedGraph(); - Node firstNode = graphModel.factory().newNode("0"); - directedGraph.addNode(firstNode); - for (int i = 1; i <= 5; i++) { - Node currentNode = graphModel.factory().newNode(((Integer) i).toString()); - directedGraph.addNode(currentNode); - Edge currentEdge = graphModel.factory().newEdge(firstNode, currentNode); - directedGraph.addEdge(currentEdge); - } - - DirectedGraph hgraph = graphModel.getDirectedGraph(); - EigenvectorCentrality ec = new EigenvectorCentrality(); - - double[] centralities = new double[6]; - - HashMap indicies = new HashMap(); - HashMap invIndicies = new HashMap(); - - ec.fillIndiciesMaps(hgraph, centralities, indicies, invIndicies); - - ec.calculateEigenvectorCentrality(hgraph, centralities, indicies, invIndicies, true, 100); - - Node n1 = hgraph.getNode("0"); - Node n2 = hgraph.getNode("1"); - int index1 = invIndicies.get(n1); - int index2 = invIndicies.get(n2); - double ec1 = centralities[index1]; - double ec2 = centralities[index2]; - - assertEquals(ec1, 0.0); - assertEquals(ec2, 1.0); - } - - @Test - public void testPathDirectedGraphEigenvectorCentrality() { - GraphModel graphModel = GraphGenerator.generatePathDirectedGraph(4); - DirectedGraph hgraph = graphModel.getDirectedGraph(); - - EigenvectorCentrality ec = new EigenvectorCentrality(); - - double[] centralities = new double[4]; - - HashMap indicies = new HashMap(); - HashMap invIndicies = new HashMap(); - - ec.fillIndiciesMaps(hgraph, centralities, indicies, invIndicies); - - ec.calculateEigenvectorCentrality(hgraph, centralities, indicies, invIndicies, true, 100); - - Node n1 = hgraph.getNode("0"); - Node n4 = hgraph.getNode("3"); - int index1 = invIndicies.get(n1); - int index4 = invIndicies.get(n4); - double ec1 = centralities[index1]; - double ec4 = centralities[index4]; - - assertEquals(ec1, 0.0); - assertEquals(ec4, 1.0); - } -} diff --git a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/EigenvectorCentralityTest.java b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/EigenvectorCentralityTest.java new file mode 100644 index 0000000000..ac98816c34 --- /dev/null +++ b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/EigenvectorCentralityTest.java @@ -0,0 +1,473 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.statistics.plugin; + +import java.util.HashMap; +import junit.framework.TestCase; +import org.gephi.graph.api.DirectedGraph; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.UndirectedGraph; +import org.junit.Assert; +import org.junit.Test; + +/** + * @author Anna + */ +public class EigenvectorCentralityTest extends TestCase { + + @Test + public void testOneNodeEigenvectorCentrality() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + UndirectedGraph graph = graphModel.getUndirectedGraph(); + + EigenvectorCentrality ec = new EigenvectorCentrality(); + + double[] centralities = new double[1]; + + HashMap indicies = new HashMap(); + HashMap invIndicies = new HashMap(); + + ec.fillIndiciesMaps(graph, centralities, indicies, invIndicies); + + ec.calculateEigenvectorCentrality(graph, centralities, indicies, invIndicies, false, 100); + + Node n1 = graph.getNode("0"); + int index = invIndicies.get(n1); + double ec1 = centralities[index]; + + assertEquals(ec1, 0.0); + } + + @Test + public void testTwoConnectedNodesEigenvectorCentrality() { + GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(2); + UndirectedGraph graph = graphModel.getUndirectedGraph(); + + EigenvectorCentrality ec = new EigenvectorCentrality(); + + double[] centralities = new double[2]; + + HashMap indicies = new HashMap(); + HashMap invIndicies = new HashMap(); + + ec.fillIndiciesMaps(graph, centralities, indicies, invIndicies); + + ec.calculateEigenvectorCentrality(graph, centralities, indicies, invIndicies, false, 100); + + Node n1 = graph.getNode("0"); + int index = invIndicies.get(n1); + double ec1 = centralities[index]; + + assertEquals(ec1, 1.0); + } + + @Test + public void testNullGraphEigenvectorCentrality() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(5); + UndirectedGraph graph = graphModel.getUndirectedGraph(); + + EigenvectorCentrality ec = new EigenvectorCentrality(); + ec.setDirected(false); + + double[] centralities = new double[5]; + + HashMap indicies = new HashMap(); + HashMap invIndicies = new HashMap(); + + ec.fillIndiciesMaps(graph, centralities, indicies, invIndicies); + + ec.calculateEigenvectorCentrality(graph, centralities, indicies, invIndicies, false, 100); + + Node n2 = graph.getNode("1"); + int index = invIndicies.get(n2); + double ec2 = centralities[index]; + + assertEquals(ec2, 0.0); + } + + @Test + public void testCompleteUndirectedGraphEigenvectorCentrality() { + GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(5); + UndirectedGraph graph = graphModel.getUndirectedGraph(); + + EigenvectorCentrality ec = new EigenvectorCentrality(); + ec.setDirected(false); + + double[] centralities = new double[5]; + + HashMap indicies = new HashMap(); + HashMap invIndicies = new HashMap(); + + ec.fillIndiciesMaps(graph, centralities, indicies, invIndicies); + + ec.calculateEigenvectorCentrality(graph, centralities, indicies, invIndicies, false, 100); + + Node n1 = graph.getNode("0"); + Node n3 = graph.getNode("2"); + int index1 = invIndicies.get(n1); + int index3 = invIndicies.get(n3); + double ec1 = centralities[index1]; + double ec3 = centralities[index3]; + + assertEquals(ec1, 1.0); + assertEquals(ec3, 1.0); + } + + @Test + public void testSpecial1UndirectedGraphEigenvectorCentrlity() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + undirectedGraph.addNode(node4); + + Edge edge12 = graphModel.factory().newEdge(node1, node2, false); + Edge edge23 = graphModel.factory().newEdge(node2, node3, false); + Edge edge34 = graphModel.factory().newEdge(node3, node4, false); + Edge edge13 = graphModel.factory().newEdge(node1, node3, false); + Edge edge24 = graphModel.factory().newEdge(node2, node4, false); + + undirectedGraph.addEdge(edge12); + undirectedGraph.addEdge(edge23); + undirectedGraph.addEdge(edge34); + undirectedGraph.addEdge(edge13); + undirectedGraph.addEdge(edge24); + + UndirectedGraph graph = graphModel.getUndirectedGraph(); + EigenvectorCentrality ec = new EigenvectorCentrality(); + + double[] centralities = new double[4]; + + HashMap indicies = new HashMap(); + HashMap invIndicies = new HashMap(); + + ec.fillIndiciesMaps(graph, centralities, indicies, invIndicies); + + ec.calculateEigenvectorCentrality(graph, centralities, indicies, invIndicies, false, 100); + + int index1 = invIndicies.get(node1); + int index2 = invIndicies.get(node2); + int index3 = invIndicies.get(node3); + double ec1 = centralities[index1]; + double ec2 = centralities[index2]; + double ec3 = centralities[index3]; + + assertEquals(ec2, ec3); + Assert.assertNotEquals(ec1, ec2); + assertEquals(ec3, 1.0); + } + + @Test + public void testSpecial2UndirectedGraphEigenvectorCentrlity() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + undirectedGraph.addNode(node4); + undirectedGraph.addNode(node5); + + Edge edge13 = graphModel.factory().newEdge(node1, node3, false); + Edge edge23 = graphModel.factory().newEdge(node2, node3, false); + Edge edge34 = graphModel.factory().newEdge(node3, node4, false); + Edge edge45 = graphModel.factory().newEdge(node4, node5, false); + + undirectedGraph.addEdge(edge13); + undirectedGraph.addEdge(edge23); + undirectedGraph.addEdge(edge34); + undirectedGraph.addEdge(edge45); + + UndirectedGraph graph = graphModel.getUndirectedGraph(); + EigenvectorCentrality ec = new EigenvectorCentrality(); + + double[] centralities = new double[5]; + + HashMap indicies = new HashMap(); + HashMap invIndicies = new HashMap(); + + ec.fillIndiciesMaps(graph, centralities, indicies, invIndicies); + + ec.calculateEigenvectorCentrality(graph, centralities, indicies, invIndicies, false, 100); + + int index2 = invIndicies.get(node2); + int index3 = invIndicies.get(node3); + int index4 = invIndicies.get(node4); + double ec2 = centralities[index2]; + double ec3 = centralities[index3]; + double ec4 = centralities[index4]; + + double res = 0.765; + double diff = 0.01; + + assertTrue(ec2 < ec3); + assertTrue(Math.abs(ec4 - res) < diff); + } + + @Test + public void testSpecial3UndirectedGraphEigenvectorCentrlity() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + + Edge edge11 = graphModel.factory().newEdge(node1, node1, false); + Edge edge12 = graphModel.factory().newEdge(node1, node2, false); + Edge edge23 = graphModel.factory().newEdge(node2, node3, false); + Edge edge33 = graphModel.factory().newEdge(node3, node3, false); + + undirectedGraph.addEdge(edge11); + undirectedGraph.addEdge(edge12); + undirectedGraph.addEdge(edge23); + undirectedGraph.addEdge(edge33); + + UndirectedGraph graph = graphModel.getUndirectedGraph(); + EigenvectorCentrality ec = new EigenvectorCentrality(); + + double[] centralities = new double[3]; + + HashMap indicies = new HashMap(); + HashMap invIndicies = new HashMap(); + + ec.fillIndiciesMaps(graph, centralities, indicies, invIndicies); + + ec.calculateEigenvectorCentrality(graph, centralities, indicies, invIndicies, false, 100); + + int index1 = invIndicies.get(node1); + int index2 = invIndicies.get(node2); + double ec1 = centralities[index1]; + double ec2 = centralities[index2]; + + assertEquals(ec1, ec2); + } + + @Test + public void testCyclicDirectedGraphEigenvectorCentrality() { + GraphModel graphModel = GraphGenerator.generateCyclicDirectedGraph(3); + DirectedGraph graph = graphModel.getDirectedGraph(); + + EigenvectorCentrality ec = new EigenvectorCentrality(); + + double[] centralities = new double[3]; + + HashMap indicies = new HashMap(); + HashMap invIndicies = new HashMap(); + + ec.fillIndiciesMaps(graph, centralities, indicies, invIndicies); + + ec.calculateEigenvectorCentrality(graph, centralities, indicies, invIndicies, true, 100); + + Node n1 = graph.getNode("0"); + int index1 = invIndicies.get(n1); + double ec1 = centralities[index1]; + + assertEquals(ec1, 1.0); + } + + @Test + public void testSpecial1DirectedEigenvectorCentrality() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + + directedGraph.addNode(node1); + directedGraph.addNode(node2); + directedGraph.addNode(node3); + directedGraph.addNode(node4); + directedGraph.addNode(node5); + + Edge edge12 = graphModel.factory().newEdge(node1, node2); + Edge edge23 = graphModel.factory().newEdge(node2, node3); + Edge edge31 = graphModel.factory().newEdge(node3, node1); + Edge edge42 = graphModel.factory().newEdge(node4, node2); + Edge edge54 = graphModel.factory().newEdge(node5, node4); + + directedGraph.addEdge(edge12); + directedGraph.addEdge(edge23); + directedGraph.addEdge(edge31); + directedGraph.addEdge(edge42); + directedGraph.addEdge(edge54); + + DirectedGraph graph = graphModel.getDirectedGraph(); + EigenvectorCentrality ec = new EigenvectorCentrality(); + + double[] centralities = new double[5]; + + HashMap indicies = new HashMap(); + HashMap invIndicies = new HashMap(); + + ec.fillIndiciesMaps(graph, centralities, indicies, invIndicies); + + ec.calculateEigenvectorCentrality(graph, centralities, indicies, invIndicies, true, 1000); + + int index1 = invIndicies.get(node1); + int index2 = invIndicies.get(node2); + int index4 = invIndicies.get(node4); + int index5 = invIndicies.get(node5); + + double ec1 = centralities[index1]; + double ec2 = centralities[index2]; + double ec4 = centralities[index4]; + double ec5 = centralities[index5]; + + double diff = 0.01; + double res0 = 0.; + double res1 = 1.; + + assertEquals(ec5, 0.0); + assertTrue(Math.abs(ec4 - res0) < diff); + assertTrue(Math.abs(ec1 - res1) < diff); + assertTrue(Math.abs(ec1 - ec2) < diff); + } + + @Test + public void testDirectedStarOutEigenvectorCentrality() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + Node firstNode = graphModel.factory().newNode("0"); + directedGraph.addNode(firstNode); + for (int i = 1; i <= 5; i++) { + Node currentNode = graphModel.factory().newNode(((Integer) i).toString()); + directedGraph.addNode(currentNode); + Edge currentEdge = graphModel.factory().newEdge(firstNode, currentNode); + directedGraph.addEdge(currentEdge); + } + + DirectedGraph graph = graphModel.getDirectedGraph(); + EigenvectorCentrality ec = new EigenvectorCentrality(); + + double[] centralities = new double[6]; + + HashMap indicies = new HashMap(); + HashMap invIndicies = new HashMap(); + + ec.fillIndiciesMaps(graph, centralities, indicies, invIndicies); + + ec.calculateEigenvectorCentrality(graph, centralities, indicies, invIndicies, true, 100); + + Node n1 = graph.getNode("0"); + Node n2 = graph.getNode("1"); + int index1 = invIndicies.get(n1); + int index2 = invIndicies.get(n2); + double ec1 = centralities[index1]; + double ec2 = centralities[index2]; + + assertEquals(ec1, 0.0); + assertEquals(ec2, 1.0); + } + + @Test + public void testPathDirectedGraphEigenvectorCentrality() { + GraphModel graphModel = GraphGenerator.generatePathDirectedGraph(4); + DirectedGraph graph = graphModel.getDirectedGraph(); + + EigenvectorCentrality ec = new EigenvectorCentrality(); + + double[] centralities = new double[4]; + + HashMap indicies = new HashMap(); + HashMap invIndicies = new HashMap(); + + ec.fillIndiciesMaps(graph, centralities, indicies, invIndicies); + + ec.calculateEigenvectorCentrality(graph, centralities, indicies, invIndicies, true, 100); + + Node n1 = graph.getNode("0"); + Node n4 = graph.getNode("3"); + int index1 = invIndicies.get(n1); + int index4 = invIndicies.get(n4); + double ec1 = centralities[index1]; + double ec4 = centralities[index4]; + + assertEquals(ec1, 0.0); + assertEquals(ec4, 1.0); + } + + @Test + public void testColumnCreation() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + + EigenvectorCentrality ec = new EigenvectorCentrality(); + ec.execute(graphModel); + + Assert.assertTrue(graphModel.getNodeTable().hasColumn(EigenvectorCentrality.EIGENVECTOR)); + } + + @Test + public void testColumnReplace() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + + graphModel.getNodeTable().addColumn(EigenvectorCentrality.EIGENVECTOR, String.class); + + EigenvectorCentrality ec = new EigenvectorCentrality(); + ec.execute(graphModel); + } +} diff --git a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/GraphDensityNGTest.java b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/GraphDensityNGTest.java deleted file mode 100644 index e67cd306c9..0000000000 --- a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/GraphDensityNGTest.java +++ /dev/null @@ -1,195 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package org.gephi.statistics.plugin; - -import org.gephi.graph.api.DirectedGraph; -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.Graph; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.GraphModel; -import org.gephi.graph.api.Node; -import org.gephi.graph.api.UndirectedGraph; -import org.gephi.project.api.ProjectController; -import org.gephi.project.impl.ProjectControllerImpl; -import org.openide.util.Lookup; -import static org.testng.Assert.*; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -/** - * - * @author Anna - */ -public class GraphDensityNGTest { - - private ProjectController pc; - - @BeforeClass - public void setUp() { - pc = Lookup.getDefault().lookup(ProjectControllerImpl.class); - } - - @BeforeMethod - public void initialize() { - pc.newProject(); - } - - @AfterMethod - public void clean() { - pc.closeCurrentProject(); - } - - @Test - public void testOneNodeDensity() { - GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); - Graph graph = graphModel.getGraph(); - GraphDensity d = new GraphDensity(); - double density = d.calculateDensity(graph, false); - assertEquals(density, Double.NaN); - } - - @Test - public void testTwoConnectedNodesDensity() { - GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(2); - Graph graph = graphModel.getGraph(); - GraphDensity d = new GraphDensity(); - double density = d.calculateDensity(graph, false); - assertEquals(density, 1.0); - } - - @Test - public void testNullGraphDensity() { - GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(5); - Graph graph = graphModel.getGraph(); - GraphDensity d = new GraphDensity(); - double density = d.calculateDensity(graph, false); - assertEquals(density, 0.0); - } - - @Test - public void testCompleteGraphDensity() { - GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(5); - Graph graph = graphModel.getGraph(); - GraphDensity d = new GraphDensity(); - double density = d.calculateDensity(graph, false); - assertEquals(density, 1.0); - } - - @Test - public void testCyclicGraphDensity() { - GraphModel graphModel = GraphGenerator.generateCyclicUndirectedGraph(6); - Graph graph = graphModel.getGraph(); - GraphDensity d = new GraphDensity(); - double density = d.calculateDensity(graph, false); - assertEquals(density, 0.4); - } - - @Test - public void testSelfLoopNodeDensity() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - Node currentNode = graphModel.factory().newNode("0"); - undirectedGraph.addNode(currentNode); - Edge currentEdge = graphModel.factory().newEdge(currentNode, currentNode, false); - undirectedGraph.addEdge(currentEdge); - Graph graph = graphModel.getGraph(); - GraphDensity d = new GraphDensity(); - double density = d.calculateDensity(graph, false); - assertEquals(density, Double.POSITIVE_INFINITY); - } - - @Test - public void testCompleteGraphWithSelfLoopsDensity() { - GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(3); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - Node n1 = undirectedGraph.getNode("0"); - Node n2 = undirectedGraph.getNode("1"); - Node n3 = undirectedGraph.getNode("2"); - Edge currentEdge = graphModel.factory().newEdge(n1, n1, false); - undirectedGraph.addEdge(currentEdge); - currentEdge = graphModel.factory().newEdge(n2, n2, false); - undirectedGraph.addEdge(currentEdge); - currentEdge = graphModel.factory().newEdge(n3, n3, false); - undirectedGraph.addEdge(currentEdge); - Graph graph = graphModel.getGraph(); - GraphDensity d = new GraphDensity(); - double density = d.calculateDensity(graph, false); - assertEquals(density, 2.0); - } - - @Test - public void testTwoCompleteGraphsDensity() { - GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(4); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - Node[] nodes = new Node[4]; - for (int i = 0; i < 4; i++) { - Node currentNode = graphModel.factory().newNode(((Integer) (i + 4)).toString()); - nodes[i] = currentNode; - undirectedGraph.addNode(currentNode); - } - for (int i = 0; i < 3; i++) { - for (int j = i + 1; j < 4; j++) { - Edge currentEdge = graphModel.factory().newEdge(nodes[i], nodes[j], false); - undirectedGraph.addEdge(currentEdge); - } - } - Graph graph = graphModel.getGraph(); - GraphDensity d = new GraphDensity(); - double density = d.calculateDensity(graph, false); - double expectedAvDegree = 0.4286; - double diff = Math.abs(density - expectedAvDegree); - assertTrue(diff < 0.01); - } - - @Test - public void testDirectedPathGraphDensity() { - GraphModel graphModel = GraphGenerator.generatePathDirectedGraph(2); - DirectedGraph graph = graphModel.getDirectedGraph(); - GraphDensity d = new GraphDensity(); - double density = d.calculateDensity(graph, true); - assertEquals(density, 0.5); - } - - @Test - public void testDirectedCyclicGraphDensity() { - GraphModel graphModel = GraphGenerator.generateCyclicDirectedGraph(5); - DirectedGraph graph = graphModel.getDirectedGraph(); - GraphDensity d = new GraphDensity(); - double density = d.calculateDensity(graph, true); - assertEquals(density, 0.25); - } - - @Test - public void testDirectedCompleteGraphDensity() { - GraphModel graphModel = GraphGenerator.generateCompleteDirectedGraph(5); - DirectedGraph graph = graphModel.getDirectedGraph(); - GraphDensity d = new GraphDensity(); - double density = d.calculateDensity(graph, true); - assertEquals(density, 1.0); - } - - @Test - public void testDirectedCompleteGraphWithSelfLoopsDensity() { - GraphModel graphModel = GraphGenerator.generateCompleteDirectedGraph(3); - DirectedGraph directedGraph = graphModel.getDirectedGraph(); - Node n1 = directedGraph.getNode("0"); - Node n2 = directedGraph.getNode("1"); - Node n3 = directedGraph.getNode("2"); - Edge currentEdge = graphModel.factory().newEdge(n1, n1); - directedGraph.addEdge(currentEdge); - currentEdge = graphModel.factory().newEdge(n2, n2); - directedGraph.addEdge(currentEdge); - currentEdge = graphModel.factory().newEdge(n3, n3); - directedGraph.addEdge(currentEdge); - - DirectedGraph graph = graphModel.getDirectedGraph(); - - GraphDensity d = new GraphDensity(); - double density = d.calculateDensity(graph, true); - assertEquals(density, 1.5); - } -} diff --git a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/GraphDensityTest.java b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/GraphDensityTest.java new file mode 100644 index 0000000000..c9fc44f686 --- /dev/null +++ b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/GraphDensityTest.java @@ -0,0 +1,208 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.statistics.plugin; + +import junit.framework.TestCase; +import org.gephi.graph.api.DirectedGraph; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.UndirectedGraph; +import org.junit.Test; + +/** + * @author Anna + */ +public class GraphDensityTest extends TestCase { + + @Test + public void testOneNodeDensity() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + Graph graph = graphModel.getGraph(); + GraphDensity d = new GraphDensity(); + double density = d.calculateDensity(graph, false); + assertEquals(density, Double.NaN); + } + + @Test + public void testTwoConnectedNodesDensity() { + GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(2); + Graph graph = graphModel.getGraph(); + GraphDensity d = new GraphDensity(); + double density = d.calculateDensity(graph, false); + assertEquals(density, 1.0); + } + + @Test + public void testNullGraphDensity() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(5); + Graph graph = graphModel.getGraph(); + GraphDensity d = new GraphDensity(); + double density = d.calculateDensity(graph, false); + assertEquals(density, 0.0); + } + + @Test + public void testCompleteGraphDensity() { + GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(5); + Graph graph = graphModel.getGraph(); + GraphDensity d = new GraphDensity(); + double density = d.calculateDensity(graph, false); + assertEquals(density, 1.0); + } + + @Test + public void testCyclicGraphDensity() { + GraphModel graphModel = GraphGenerator.generateCyclicUndirectedGraph(6); + Graph graph = graphModel.getGraph(); + GraphDensity d = new GraphDensity(); + double density = d.calculateDensity(graph, false); + assertEquals(density, 0.4); + } + + @Test + public void testSelfLoopNodeDensity() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node currentNode = graphModel.factory().newNode("0"); + undirectedGraph.addNode(currentNode); + Edge currentEdge = graphModel.factory().newEdge(currentNode, currentNode, false); + undirectedGraph.addEdge(currentEdge); + Graph graph = graphModel.getGraph(); + GraphDensity d = new GraphDensity(); + double density = d.calculateDensity(graph, false); + assertEquals(density, Double.POSITIVE_INFINITY); + } + + @Test + public void testCompleteGraphWithSelfLoopsDensity() { + GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(3); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node n1 = undirectedGraph.getNode("0"); + Node n2 = undirectedGraph.getNode("1"); + Node n3 = undirectedGraph.getNode("2"); + Edge currentEdge = graphModel.factory().newEdge(n1, n1, false); + undirectedGraph.addEdge(currentEdge); + currentEdge = graphModel.factory().newEdge(n2, n2, false); + undirectedGraph.addEdge(currentEdge); + currentEdge = graphModel.factory().newEdge(n3, n3, false); + undirectedGraph.addEdge(currentEdge); + Graph graph = graphModel.getGraph(); + GraphDensity d = new GraphDensity(); + double density = d.calculateDensity(graph, false); + assertEquals(density, 2.0); + } + + @Test + public void testTwoCompleteGraphsDensity() { + GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(4); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node[] nodes = new Node[4]; + for (int i = 0; i < 4; i++) { + Node currentNode = graphModel.factory().newNode(((Integer) (i + 4)).toString()); + nodes[i] = currentNode; + undirectedGraph.addNode(currentNode); + } + for (int i = 0; i < 3; i++) { + for (int j = i + 1; j < 4; j++) { + Edge currentEdge = graphModel.factory().newEdge(nodes[i], nodes[j], false); + undirectedGraph.addEdge(currentEdge); + } + } + Graph graph = graphModel.getGraph(); + GraphDensity d = new GraphDensity(); + double density = d.calculateDensity(graph, false); + double expectedAvDegree = 0.4286; + double diff = Math.abs(density - expectedAvDegree); + assertTrue(diff < 0.01); + } + + @Test + public void testDirectedPathGraphDensity() { + GraphModel graphModel = GraphGenerator.generatePathDirectedGraph(2); + DirectedGraph graph = graphModel.getDirectedGraph(); + GraphDensity d = new GraphDensity(); + double density = d.calculateDensity(graph, true); + assertEquals(density, 0.5); + } + + @Test + public void testDirectedCyclicGraphDensity() { + GraphModel graphModel = GraphGenerator.generateCyclicDirectedGraph(5); + DirectedGraph graph = graphModel.getDirectedGraph(); + GraphDensity d = new GraphDensity(); + double density = d.calculateDensity(graph, true); + assertEquals(density, 0.25); + } + + @Test + public void testDirectedCompleteGraphDensity() { + GraphModel graphModel = GraphGenerator.generateCompleteDirectedGraph(5); + DirectedGraph graph = graphModel.getDirectedGraph(); + GraphDensity d = new GraphDensity(); + double density = d.calculateDensity(graph, true); + assertEquals(density, 1.0); + } + + @Test + public void testDirectedCompleteGraphWithSelfLoopsDensity() { + GraphModel graphModel = GraphGenerator.generateCompleteDirectedGraph(3); + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + Node n1 = directedGraph.getNode("0"); + Node n2 = directedGraph.getNode("1"); + Node n3 = directedGraph.getNode("2"); + Edge currentEdge = graphModel.factory().newEdge(n1, n1); + directedGraph.addEdge(currentEdge); + currentEdge = graphModel.factory().newEdge(n2, n2); + directedGraph.addEdge(currentEdge); + currentEdge = graphModel.factory().newEdge(n3, n3); + directedGraph.addEdge(currentEdge); + + DirectedGraph graph = graphModel.getDirectedGraph(); + + GraphDensity d = new GraphDensity(); + double density = d.calculateDensity(graph, true); + assertEquals(density, 1.5); + } +} diff --git a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/GraphDistanceNGTest.java b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/GraphDistanceNGTest.java deleted file mode 100644 index bcc9798805..0000000000 --- a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/GraphDistanceNGTest.java +++ /dev/null @@ -1,1616 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package org.gephi.statistics.plugin; - -import java.util.HashMap; -import org.gephi.graph.api.DirectedGraph; -import org.gephi.graph.api.UndirectedGraph; -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.GraphModel; -import org.gephi.graph.api.Node; -import org.gephi.project.api.ProjectController; -import org.gephi.project.impl.ProjectControllerImpl; -import org.openide.util.Lookup; -import static org.testng.Assert.*; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -/** - * - * @author Anna - */ -public class GraphDistanceNGTest { - - private ProjectController pc; - - @BeforeClass - public void setUp() { - pc = Lookup.getDefault().lookup(ProjectControllerImpl.class); - } - - @BeforeMethod - public void initialize() { - pc.newProject(); - } - - @AfterMethod - public void clean() { - pc.closeCurrentProject(); - } - - @Test - public void testOneNodeAvPathLength() { - GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - - double averageDegree = d.getPathLength(); - assertEquals(averageDegree, Double.NaN); - } - - @Test - public void testTwoConnectedNodesAvPathLength() { - GraphModel graphModel = GraphGenerator.generatePathUndirectedGraph(2); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - - double averageDegree = d.getPathLength(); - assertEquals(averageDegree, 1.0); - } - - @Test - public void testNullGraphAvPathLength() { - GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(5); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - - double averageDegree = d.getPathLength(); - assertEquals(averageDegree, 0.0); - } - - @Test - public void testCompleteGraphAvPathLength() { - GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(5); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - - double averageDegree = d.getPathLength(); - assertEquals(averageDegree, 1.0); - } - - @Test - public void testStarGraphAvPathLength() { - GraphModel graphModel = GraphGenerator.generateStarUndirectedGraph(5); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - - double averageDegree = d.getPathLength(); - double res = 1.6667; - double diff = Math.abs(averageDegree - res); - assertTrue(diff < 0.01); - } - - @Test - public void testCyclicGraphAvPathLength() { - GraphModel graphModel = GraphGenerator.generateCyclicUndirectedGraph(5); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - - double averageDegree = d.getPathLength(); - assertEquals(averageDegree, 1.5); - } - - @Test - public void testDirectedPathGraphAvPathLength() { - - GraphModel graphModel = GraphGenerator.generatePathDirectedGraph(4); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); - - double averageDegree = d.getPathLength(); - double res = 1.6667; - double diff = Math.abs(averageDegree - res); - assertTrue(diff < 0.01); - } - - @Test - public void testDirectedCyclicGraphAvPathLength() { - GraphModel graphModel = GraphGenerator.generateCyclicDirectedGraph(5); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); - - double averageDegree = d.getPathLength(); - assertEquals(averageDegree, 2.5); - } - - @Test - public void testDirectedStarOutGraphAvPathLength() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - - DirectedGraph directedGraph = graphModel.getDirectedGraph(); - Node firstNode = graphModel.factory().newNode("0"); - directedGraph.addNode(firstNode); - for (int i = 1; i <= 5; i++) { - Node currentNode = graphModel.factory().newNode(((Integer) i).toString()); - directedGraph.addNode(currentNode); - Edge currentEdge = graphModel.factory().newEdge(firstNode, currentNode); - directedGraph.addEdge(currentEdge); - } - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); - - double averageDegree = d.getPathLength(); - assertEquals(averageDegree, 1.0); - } - - @Test - public void testDirectedSpecial1GraphAvPathLength() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - - DirectedGraph directedGraph = graphModel.getDirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - - directedGraph.addNode(node1); - directedGraph.addNode(node2); - directedGraph.addNode(node3); - directedGraph.addNode(node4); - directedGraph.addNode(node5); - - Edge edge15 = graphModel.factory().newEdge(node1, node5); - Edge edge52 = graphModel.factory().newEdge(node5, node2); - Edge edge53 = graphModel.factory().newEdge(node5, node3); - Edge edge45 = graphModel.factory().newEdge(node4, node5); - - directedGraph.addEdge(edge15); - directedGraph.addEdge(edge52); - directedGraph.addEdge(edge53); - directedGraph.addEdge(edge45); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); - - double averageDegree = d.getPathLength(); - assertEquals(averageDegree, 1.5); - } - - @Test - public void testOneNodeDiameter() { - GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - - double diameter = d.getDiameter(); - assertEquals(diameter, 0.0); - } - - @Test - public void testTwoConnectrdNodesDiameter() { - GraphModel graphModel = GraphGenerator.generatePathUndirectedGraph(2); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - - double diameter = d.getDiameter(); - assertEquals(diameter, 1.0); - } - - @Test - public void testNullGraphDiameter() { - GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(5); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - - double diameter = d.getDiameter(); - assertEquals(diameter, 0.0); - } - - @Test - public void testCompleteGraphDiameter() { - GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(5); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - - double diameter = d.getDiameter(); - assertEquals(diameter, 1.0); - } - - @Test - public void testCyclicGraphDiameter() { - GraphModel graphModel = GraphGenerator.generateCyclicUndirectedGraph(5); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - - double diameter = d.getDiameter(); - assertEquals(diameter, 2.0); - } - - @Test - public void testSpecial1UndirectedGraphDiameter() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - Node node6 = graphModel.factory().newNode("5"); - Node node7 = graphModel.factory().newNode("6"); - Node node8 = graphModel.factory().newNode("7"); - undirectedGraph.addNode(node1); - undirectedGraph.addNode(node2); - undirectedGraph.addNode(node3); - undirectedGraph.addNode(node4); - undirectedGraph.addNode(node5); - undirectedGraph.addNode(node6); - undirectedGraph.addNode(node7); - undirectedGraph.addNode(node8); - Edge edge12 = graphModel.factory().newEdge(node1, node2, false); - Edge edge13 = graphModel.factory().newEdge(node1, node3, false); - Edge edge34 = graphModel.factory().newEdge(node3, node4, false); - Edge edge24 = graphModel.factory().newEdge(node2, node4, false); - Edge edge56 = graphModel.factory().newEdge(node5, node6, false); - Edge edge67 = graphModel.factory().newEdge(node6, node7, false); - Edge edge78 = graphModel.factory().newEdge(node7, node8, false); - Edge edge85 = graphModel.factory().newEdge(node8, node5, false); - Edge edge45 = graphModel.factory().newEdge(node4, node5, false); - undirectedGraph.addEdge(edge12); - undirectedGraph.addEdge(edge13); - undirectedGraph.addEdge(edge34); - undirectedGraph.addEdge(edge24); - undirectedGraph.addEdge(edge56); - undirectedGraph.addEdge(edge67); - undirectedGraph.addEdge(edge78); - undirectedGraph.addEdge(edge85); - undirectedGraph.addEdge(edge45); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(hierarchicalUndirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - - double diameter = d.getDiameter(); - assertEquals(diameter, 5.0); - } - - @Test - public void testSpecial2UndirectedGraphDiameter() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - Node node6 = graphModel.factory().newNode("5"); - Node node7 = graphModel.factory().newNode("6"); - Node node8 = graphModel.factory().newNode("7"); - undirectedGraph.addNode(node1); - undirectedGraph.addNode(node2); - undirectedGraph.addNode(node3); - undirectedGraph.addNode(node4); - undirectedGraph.addNode(node5); - undirectedGraph.addNode(node6); - undirectedGraph.addNode(node7); - undirectedGraph.addNode(node8); - Edge edge12 = graphModel.factory().newEdge(node1, node2, false); - Edge edge23 = graphModel.factory().newEdge(node2, node3, false); - Edge edge34 = graphModel.factory().newEdge(node3, node4, false); - Edge edge45 = graphModel.factory().newEdge(node4, node5, false); - Edge edge56 = graphModel.factory().newEdge(node5, node6, false); - Edge edge67 = graphModel.factory().newEdge(node6, node7, false); - Edge edge78 = graphModel.factory().newEdge(node7, node8, false); - Edge edge81 = graphModel.factory().newEdge(node8, node1, false); - Edge edge14 = graphModel.factory().newEdge(node1, node4, false); - Edge edge85 = graphModel.factory().newEdge(node8, node5, false); - undirectedGraph.addEdge(edge12); - undirectedGraph.addEdge(edge23); - undirectedGraph.addEdge(edge34); - undirectedGraph.addEdge(edge45); - undirectedGraph.addEdge(edge56); - undirectedGraph.addEdge(edge67); - undirectedGraph.addEdge(edge78); - undirectedGraph.addEdge(edge81); - undirectedGraph.addEdge(edge14); - undirectedGraph.addEdge(edge85); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(hierarchicalUndirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - - double diameter = d.getDiameter(); - assertEquals(diameter, 4.0); - } - - @Test - public void testDirectedPathGraphDiameter() { - GraphModel graphModel = GraphGenerator.generatePathDirectedGraph(4); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); - - double diameter = d.getDiameter(); - assertEquals(diameter, 3.0); - } - - @Test - public void testDirectedCyclicDiameter() { - GraphModel graphModel = GraphGenerator.generateCyclicDirectedGraph(5); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); - - double diameter = d.getDiameter(); - assertEquals(diameter, 4.0); - } - - @Test - public void testSpecial1DirectedGraphDiameter() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - DirectedGraph directedGraph = graphModel.getDirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - Node node6 = graphModel.factory().newNode("5"); - Node node7 = graphModel.factory().newNode("6"); - Node node8 = graphModel.factory().newNode("7"); - directedGraph.addNode(node1); - directedGraph.addNode(node2); - directedGraph.addNode(node3); - directedGraph.addNode(node4); - directedGraph.addNode(node5); - directedGraph.addNode(node6); - directedGraph.addNode(node7); - directedGraph.addNode(node8); - Edge edge12 = graphModel.factory().newEdge(node1, node2); - Edge edge23 = graphModel.factory().newEdge(node2, node3); - Edge edge34 = graphModel.factory().newEdge(node3, node4); - Edge edge41 = graphModel.factory().newEdge(node4, node1); - Edge edge56 = graphModel.factory().newEdge(node5, node6); - Edge edge67 = graphModel.factory().newEdge(node6, node7); - Edge edge78 = graphModel.factory().newEdge(node7, node8); - Edge edge85 = graphModel.factory().newEdge(node8, node5); - Edge edge45 = graphModel.factory().newEdge(node4, node5); - directedGraph.addEdge(edge12); - directedGraph.addEdge(edge23); - directedGraph.addEdge(edge34); - directedGraph.addEdge(edge41); - directedGraph.addEdge(edge56); - directedGraph.addEdge(edge67); - directedGraph.addEdge(edge78); - directedGraph.addEdge(edge85); - directedGraph.addEdge(edge45); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); - - double diameter = d.getDiameter(); - assertEquals(diameter, 7.0); - } - - @Test - public void testSpecial2DirectedGraphDiameter() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - DirectedGraph directedGraph = graphModel.getDirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - directedGraph.addNode(node1); - directedGraph.addNode(node2); - directedGraph.addNode(node3); - directedGraph.addNode(node4); - directedGraph.addNode(node5); - Edge edge12 = graphModel.factory().newEdge(node1, node2); - Edge edge14 = graphModel.factory().newEdge(node1, node4); - Edge edge23 = graphModel.factory().newEdge(node2, node3); - Edge edge25 = graphModel.factory().newEdge(node2, node5); - Edge edge35 = graphModel.factory().newEdge(node3, node5); - Edge edge43 = graphModel.factory().newEdge(node4, node3); - Edge edge51 = graphModel.factory().newEdge(node5, node1); - Edge edge54 = graphModel.factory().newEdge(node5, node4); - directedGraph.addEdge(edge12); - directedGraph.addEdge(edge14); - directedGraph.addEdge(edge23); - directedGraph.addEdge(edge25); - directedGraph.addEdge(edge35); - directedGraph.addEdge(edge43); - directedGraph.addEdge(edge51); - directedGraph.addEdge(edge54); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); - - double diameter = d.getDiameter(); - assertEquals(diameter, 4.0); - } - - @Test - public void testOneNodeRadius() { - GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - - double radius = d.getRadius(); - assertEquals(radius, 0.0); - } - - @Test - public void testTwoConnectrdNodesRadius() { - GraphModel graphModel = GraphGenerator.generatePathUndirectedGraph(2); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - - double radius = d.getRadius(); - assertEquals(radius, 1.0); - } - - @Test - public void testNullGraphRadius() { - GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(5); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - - double radius = d.getRadius(); - assertEquals(radius, 0.0); - } - - @Test - public void testCompleteGraphRadius() { - GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(5); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - - double radius = d.getRadius(); - assertEquals(radius, 1.0); - } - - @Test - public void testStarGraphRadius() { - GraphModel graphModel = GraphGenerator.generateStarUndirectedGraph(5); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - - double radius = d.getRadius(); - assertEquals(radius, 1.0); - } - - @Test - public void testCyclicGraphRadius() { - GraphModel graphModel = GraphGenerator.generateCyclicUndirectedGraph(5); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - - double radius = d.getRadius(); - assertEquals(radius, 2.0); - } - - @Test - public void testPathGraphRadius() { - GraphModel graphModel = GraphGenerator.generatePathUndirectedGraph(6); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - - double radius = d.getRadius(); - assertEquals(radius, 3.0); - } - - @Test - public void testSpecial1UndirectedGraphRadius() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - Node node6 = graphModel.factory().newNode("5"); - Node node7 = graphModel.factory().newNode("6"); - Node node8 = graphModel.factory().newNode("7"); - undirectedGraph.addNode(node1); - undirectedGraph.addNode(node2); - undirectedGraph.addNode(node3); - undirectedGraph.addNode(node4); - undirectedGraph.addNode(node5); - undirectedGraph.addNode(node6); - undirectedGraph.addNode(node7); - undirectedGraph.addNode(node8); - Edge edge12 = graphModel.factory().newEdge(node1, node2, false); - Edge edge13 = graphModel.factory().newEdge(node1, node3, false); - Edge edge34 = graphModel.factory().newEdge(node3, node4, false); - Edge edge24 = graphModel.factory().newEdge(node2, node4, false); - Edge edge56 = graphModel.factory().newEdge(node5, node6, false); - Edge edge67 = graphModel.factory().newEdge(node6, node7, false); - Edge edge78 = graphModel.factory().newEdge(node7, node8, false); - Edge edge85 = graphModel.factory().newEdge(node8, node5, false); - Edge edge45 = graphModel.factory().newEdge(node4, node5, false); - undirectedGraph.addEdge(edge12); - undirectedGraph.addEdge(edge13); - undirectedGraph.addEdge(edge34); - undirectedGraph.addEdge(edge24); - undirectedGraph.addEdge(edge56); - undirectedGraph.addEdge(edge67); - undirectedGraph.addEdge(edge78); - undirectedGraph.addEdge(edge85); - undirectedGraph.addEdge(edge45); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(hierarchicalUndirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - - double radius = d.getRadius(); - assertEquals(radius, 3.0); - } - - @Test - public void testSpecial2UndirectedGraphRadius() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - Node node6 = graphModel.factory().newNode("5"); - Node node7 = graphModel.factory().newNode("6"); - Node node8 = graphModel.factory().newNode("7"); - undirectedGraph.addNode(node1); - undirectedGraph.addNode(node2); - undirectedGraph.addNode(node3); - undirectedGraph.addNode(node4); - undirectedGraph.addNode(node5); - undirectedGraph.addNode(node6); - undirectedGraph.addNode(node7); - undirectedGraph.addNode(node8); - Edge edge12 = graphModel.factory().newEdge(node1, node2, false); - Edge edge23 = graphModel.factory().newEdge(node2, node3, false); - Edge edge34 = graphModel.factory().newEdge(node3, node4, false); - Edge edge45 = graphModel.factory().newEdge(node4, node5, false); - Edge edge56 = graphModel.factory().newEdge(node5, node6, false); - Edge edge67 = graphModel.factory().newEdge(node6, node7, false); - Edge edge78 = graphModel.factory().newEdge(node7, node8, false); - Edge edge81 = graphModel.factory().newEdge(node8, node1, false); - Edge edge14 = graphModel.factory().newEdge(node1, node4, false); - Edge edge85 = graphModel.factory().newEdge(node8, node5, false); - undirectedGraph.addEdge(edge12); - undirectedGraph.addEdge(edge23); - undirectedGraph.addEdge(edge34); - undirectedGraph.addEdge(edge45); - undirectedGraph.addEdge(edge56); - undirectedGraph.addEdge(edge67); - undirectedGraph.addEdge(edge78); - undirectedGraph.addEdge(edge81); - undirectedGraph.addEdge(edge14); - undirectedGraph.addEdge(edge85); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(hierarchicalUndirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - - double radius = d.getRadius(); - assertEquals(radius, 3.0); - } - - @Test - public void testDirectedCyclicRadius() { - GraphModel graphModel = GraphGenerator.generateCyclicDirectedGraph(5); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); - - double radius = d.getRadius(); - assertEquals(radius, 4.0); - } - - @Test - public void testDirectedPathGraphRadius() { - GraphModel graphModel = GraphGenerator.generatePathDirectedGraph(4); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); - - double radius = d.getRadius(); - assertEquals(radius, 0.0); - } - - @Test - public void testSpecial2DirectedGraphRadius() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - DirectedGraph directedGraph = graphModel.getDirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - directedGraph.addNode(node1); - directedGraph.addNode(node2); - directedGraph.addNode(node3); - directedGraph.addNode(node4); - directedGraph.addNode(node5); - Edge edge12 = graphModel.factory().newEdge(node1, node2); - Edge edge14 = graphModel.factory().newEdge(node1, node4); - Edge edge23 = graphModel.factory().newEdge(node2, node3); - Edge edge25 = graphModel.factory().newEdge(node2, node5); - Edge edge35 = graphModel.factory().newEdge(node3, node5); - Edge edge43 = graphModel.factory().newEdge(node4, node3); - Edge edge51 = graphModel.factory().newEdge(node5, node1); - Edge edge54 = graphModel.factory().newEdge(node5, node4); - directedGraph.addEdge(edge12); - directedGraph.addEdge(edge14); - directedGraph.addEdge(edge23); - directedGraph.addEdge(edge25); - directedGraph.addEdge(edge35); - directedGraph.addEdge(edge43); - directedGraph.addEdge(edge51); - directedGraph.addEdge(edge54); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); - - double radius = d.getRadius(); - assertEquals(radius, 2.0); - } - - @Test - public void testTwoConnectedNodesBetweenness() { - GraphModel graphModel = GraphGenerator.generatePathUndirectedGraph(2); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - HashMap metricsMap = (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - double[] betweenness = metricsMap.get(GraphDistance.BETWEENNESS); - - Node n1 = undirectedGraph.getNode("0"); - int index1 = indicies.get(n1); - - assertEquals(betweenness[index1], 0.0); - } - - @Test - public void testTwoConnectedNodesCloseness() { - GraphModel graphModel = GraphGenerator.generatePathUndirectedGraph(2); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - HashMap metricsMap = (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - double[] closeness = metricsMap.get(GraphDistance.CLOSENESS); - - Node n1 = undirectedGraph.getNode("0"); - int index1 = indicies.get(n1); - - assertEquals(closeness[index1], 1.0); - } - - @Test - public void testNullGraphBetweenness() { - GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(5); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - HashMap metricsMap = (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - double[] betweenness = metricsMap.get(GraphDistance.BETWEENNESS); - - Node n1 = undirectedGraph.getNode("0"); - int index1 = indicies.get(n1); - - assertEquals(betweenness[index1], 0.0); - } - - @Test - public void testNullGraphCloseness() { - GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(5); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - HashMap metricsMap = (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - double[] closeness = metricsMap.get(GraphDistance.CLOSENESS); - - Node n1 = undirectedGraph.getNode("0"); - int index1 = indicies.get(n1); - - assertEquals(closeness[index1], 0.0); - } - - @Test - public void testCompleteGraphBetweenness() { - GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(5); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - HashMap metricsMap = (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - double[] betweenness = metricsMap.get(GraphDistance.BETWEENNESS); - - Node n1 = undirectedGraph.getNode("0"); - int index1 = indicies.get(n1); - - assertEquals(betweenness[index1], 0.0); - } - - @Test - public void testCompleteGraphCloseness() { - GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(5); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - HashMap metricsMap = (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - double[] closeness = metricsMap.get(GraphDistance.CLOSENESS); - - Node n1 = undirectedGraph.getNode("0"); - int index1 = indicies.get(n1); - - assertEquals(closeness[index1], 1.0); - } - - @Test - public void testStarGraphBetweenness() { - GraphModel graphModel = GraphGenerator.generateStarUndirectedGraph(5); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - HashMap metricsMap = (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - double[] betweenness = metricsMap.get(GraphDistance.BETWEENNESS); - - Node n1 = undirectedGraph.getNode("0"); - Node n2 = undirectedGraph.getNode("1"); - int index1 = indicies.get(n1); - int index2 = indicies.get(n2); - - assertEquals(betweenness[index1], 10.0); - assertEquals(betweenness[index2], 0.0); - } - - @Test - public void testStarGraphCloseness() { - GraphModel graphModel = GraphGenerator.generateStarUndirectedGraph(5); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - HashMap metricsMap = (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - double[] closeness = metricsMap.get(GraphDistance.CLOSENESS); - - Node n1 = undirectedGraph.getNode("0"); - Node n2 = undirectedGraph.getNode("1"); - int index1 = indicies.get(n1); - int index2 = indicies.get(n2); - - assertEquals(closeness[index1], 1.0); - assertEquals(closeness[index2], 1.8); - } - - @Test - public void testCyclic5GraphBetweenness() { - GraphModel graphModel = GraphGenerator.generateCyclicUndirectedGraph(5); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - HashMap metricsMap = (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - double[] betweenness = metricsMap.get(GraphDistance.BETWEENNESS); - - Node n4 = undirectedGraph.getNode("3"); - int index4 = indicies.get(n4); - - assertEquals(betweenness[index4], 1.0); - } - - @Test - public void testCyclic6GraphBetweenness() { - GraphModel graphModel = GraphGenerator.generateCyclicUndirectedGraph(6); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - HashMap metricsMap = (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - double[] betweenness = metricsMap.get(GraphDistance.BETWEENNESS); - - Node n2 = undirectedGraph.getNode("1"); - int index2 = indicies.get(n2); - - assertEquals(betweenness[index2], 2.0); - } - - @Test - public void testCyclic5GraphCloseness() { - GraphModel graphModel = GraphGenerator.generateCyclicUndirectedGraph(5); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(undirectedGraph); - - HashMap metricsMap = (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - double[] closeness = metricsMap.get(GraphDistance.CLOSENESS); - - Node n3 = undirectedGraph.getNode("2"); - int index3 = indicies.get(n3); - - assertEquals(closeness[index3], 1.5); - } - - @Test - public void testSpecial1UndirectedGraphBetweenness() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - Node node6 = graphModel.factory().newNode("5"); - Node node7 = graphModel.factory().newNode("6"); - undirectedGraph.addNode(node1); - undirectedGraph.addNode(node2); - undirectedGraph.addNode(node3); - undirectedGraph.addNode(node4); - undirectedGraph.addNode(node5); - undirectedGraph.addNode(node6); - undirectedGraph.addNode(node7); - Edge edge12 = graphModel.factory().newEdge(node1, node2, false); - Edge edge13 = graphModel.factory().newEdge(node1, node3, false); - Edge edge14 = graphModel.factory().newEdge(node1, node4, false); - Edge edge15 = graphModel.factory().newEdge(node1, node5, false); - Edge edge16 = graphModel.factory().newEdge(node1, node6, false); - Edge edge27 = graphModel.factory().newEdge(node2, node7, false); - Edge edge37 = graphModel.factory().newEdge(node3, node7, false); - Edge edge47 = graphModel.factory().newEdge(node4, node7, false); - Edge edge57 = graphModel.factory().newEdge(node5, node7, false); - Edge edge67 = graphModel.factory().newEdge(node6, node7, false); - undirectedGraph.addEdge(edge12); - undirectedGraph.addEdge(edge13); - undirectedGraph.addEdge(edge14); - undirectedGraph.addEdge(edge15); - undirectedGraph.addEdge(edge16); - undirectedGraph.addEdge(edge27); - undirectedGraph.addEdge(edge37); - undirectedGraph.addEdge(edge47); - undirectedGraph.addEdge(edge57); - undirectedGraph.addEdge(edge67); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(hierarchicalUndirectedGraph); - - HashMap metricsMap = (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - double[] betweenness = metricsMap.get(GraphDistance.BETWEENNESS); - - int index1 = indicies.get(node1); - int index3 = indicies.get(node3); - - assertEquals(betweenness[index1], 5.); - assertEquals(betweenness[index3], 0.2); - } - - @Test - public void testSpecial1UndirectedGraphCloseness() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - Node node6 = graphModel.factory().newNode("5"); - Node node7 = graphModel.factory().newNode("6"); - undirectedGraph.addNode(node1); - undirectedGraph.addNode(node2); - undirectedGraph.addNode(node3); - undirectedGraph.addNode(node4); - undirectedGraph.addNode(node5); - undirectedGraph.addNode(node6); - undirectedGraph.addNode(node7); - Edge edge12 = graphModel.factory().newEdge(node1, node2, false); - Edge edge13 = graphModel.factory().newEdge(node1, node3, false); - Edge edge14 = graphModel.factory().newEdge(node1, node4, false); - Edge edge15 = graphModel.factory().newEdge(node1, node5, false); - Edge edge16 = graphModel.factory().newEdge(node1, node6, false); - Edge edge27 = graphModel.factory().newEdge(node2, node7, false); - Edge edge37 = graphModel.factory().newEdge(node3, node7, false); - Edge edge47 = graphModel.factory().newEdge(node4, node7, false); - Edge edge57 = graphModel.factory().newEdge(node5, node7, false); - Edge edge67 = graphModel.factory().newEdge(node6, node7, false); - undirectedGraph.addEdge(edge12); - undirectedGraph.addEdge(edge13); - undirectedGraph.addEdge(edge14); - undirectedGraph.addEdge(edge15); - undirectedGraph.addEdge(edge16); - undirectedGraph.addEdge(edge27); - undirectedGraph.addEdge(edge37); - undirectedGraph.addEdge(edge47); - undirectedGraph.addEdge(edge57); - undirectedGraph.addEdge(edge67); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(hierarchicalUndirectedGraph); - - HashMap metricsMap = (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - double[] closeness = metricsMap.get(GraphDistance.CLOSENESS); - - int index7 = indicies.get(node7); - - double res = 1.1667; - double diff = 0.01; - - assertTrue(Math.abs(closeness[index7] - res) < diff); - } - - @Test - public void testSpecial2UndirectedGraphBetweenness() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - Node node6 = graphModel.factory().newNode("5"); - Node node7 = graphModel.factory().newNode("6"); - Node node8 = graphModel.factory().newNode("7"); - undirectedGraph.addNode(node1); - undirectedGraph.addNode(node2); - undirectedGraph.addNode(node3); - undirectedGraph.addNode(node4); - undirectedGraph.addNode(node5); - undirectedGraph.addNode(node6); - undirectedGraph.addNode(node7); - undirectedGraph.addNode(node8); - Edge edge12 = graphModel.factory().newEdge(node1, node2, false); - Edge edge13 = graphModel.factory().newEdge(node1, node3, false); - Edge edge34 = graphModel.factory().newEdge(node3, node4, false); - Edge edge24 = graphModel.factory().newEdge(node2, node4, false); - Edge edge56 = graphModel.factory().newEdge(node5, node6, false); - Edge edge67 = graphModel.factory().newEdge(node6, node7, false); - Edge edge78 = graphModel.factory().newEdge(node7, node8, false); - Edge edge85 = graphModel.factory().newEdge(node8, node5, false); - Edge edge45 = graphModel.factory().newEdge(node4, node5, false); - undirectedGraph.addEdge(edge12); - undirectedGraph.addEdge(edge13); - undirectedGraph.addEdge(edge34); - undirectedGraph.addEdge(edge24); - undirectedGraph.addEdge(edge56); - undirectedGraph.addEdge(edge67); - undirectedGraph.addEdge(edge78); - undirectedGraph.addEdge(edge85); - undirectedGraph.addEdge(edge45); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(hierarchicalUndirectedGraph); - - HashMap metricsMap = (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - double[] betweenness = metricsMap.get(GraphDistance.BETWEENNESS); - - Node n4 = undirectedGraph.getNode("3"); - Node n6 = undirectedGraph.getNode("5"); - Node n7 = undirectedGraph.getNode("6"); - - int index4 = indicies.get(n4); - int index6 = indicies.get(n6); - int index7 = indicies.get(n7); - - assertEquals(betweenness[index4], 12.5); - assertEquals(betweenness[index6], 2.5); - assertEquals(betweenness[index7], 0.5); - } - - @Test - public void testSpecial2UndirectedGraphCloseness() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - Node node6 = graphModel.factory().newNode("5"); - Node node7 = graphModel.factory().newNode("6"); - Node node8 = graphModel.factory().newNode("7"); - undirectedGraph.addNode(node1); - undirectedGraph.addNode(node2); - undirectedGraph.addNode(node3); - undirectedGraph.addNode(node4); - undirectedGraph.addNode(node5); - undirectedGraph.addNode(node6); - undirectedGraph.addNode(node7); - undirectedGraph.addNode(node8); - Edge edge12 = graphModel.factory().newEdge(node1, node2, false); - Edge edge13 = graphModel.factory().newEdge(node1, node3, false); - Edge edge34 = graphModel.factory().newEdge(node3, node4, false); - Edge edge24 = graphModel.factory().newEdge(node2, node4, false); - Edge edge56 = graphModel.factory().newEdge(node5, node6, false); - Edge edge67 = graphModel.factory().newEdge(node6, node7, false); - Edge edge78 = graphModel.factory().newEdge(node7, node8, false); - Edge edge85 = graphModel.factory().newEdge(node8, node5, false); - Edge edge45 = graphModel.factory().newEdge(node4, node5, false); - undirectedGraph.addEdge(edge12); - undirectedGraph.addEdge(edge13); - undirectedGraph.addEdge(edge34); - undirectedGraph.addEdge(edge24); - undirectedGraph.addEdge(edge56); - undirectedGraph.addEdge(edge67); - undirectedGraph.addEdge(edge78); - undirectedGraph.addEdge(edge85); - undirectedGraph.addEdge(edge45); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(hierarchicalUndirectedGraph); - - HashMap metricsMap = (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - double[] closeness = metricsMap.get(GraphDistance.CLOSENESS); - - int index2 = indicies.get(node2); - - double res = 2.2857; - double diff = 0.01; - - assertTrue(Math.abs(closeness[index2] - res) < diff); - } - - @Test - public void testSpecial3UndirectedGraphBetweenness() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - Node node6 = graphModel.factory().newNode("5"); - Node node7 = graphModel.factory().newNode("6"); - undirectedGraph.addNode(node1); - undirectedGraph.addNode(node2); - undirectedGraph.addNode(node3); - undirectedGraph.addNode(node4); - undirectedGraph.addNode(node5); - undirectedGraph.addNode(node6); - undirectedGraph.addNode(node7); - Edge edge12 = graphModel.factory().newEdge(node1, node2, false); - Edge edge13 = graphModel.factory().newEdge(node1, node3, false); - Edge edge14 = graphModel.factory().newEdge(node1, node4, false); - Edge edge15 = graphModel.factory().newEdge(node1, node5, false); - Edge edge16 = graphModel.factory().newEdge(node1, node6, false); - Edge edge17 = graphModel.factory().newEdge(node1, node7, false); - Edge edge23 = graphModel.factory().newEdge(node2, node3, false); - Edge edge34 = graphModel.factory().newEdge(node3, node4, false); - Edge edge45 = graphModel.factory().newEdge(node4, node5, false); - Edge edge56 = graphModel.factory().newEdge(node5, node6, false); - Edge edge67 = graphModel.factory().newEdge(node6, node7, false); - Edge edge72 = graphModel.factory().newEdge(node7, node2, false); - undirectedGraph.addEdge(edge12); - undirectedGraph.addEdge(edge13); - undirectedGraph.addEdge(edge14); - undirectedGraph.addEdge(edge15); - undirectedGraph.addEdge(edge16); - undirectedGraph.addEdge(edge17); - undirectedGraph.addEdge(edge23); - undirectedGraph.addEdge(edge34); - undirectedGraph.addEdge(edge45); - undirectedGraph.addEdge(edge56); - undirectedGraph.addEdge(edge67); - undirectedGraph.addEdge(edge72); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(hierarchicalUndirectedGraph); - - HashMap metricsMap = (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - double[] betweenness = metricsMap.get(GraphDistance.BETWEENNESS); - - int index3 = indicies.get(node3); - - assertEquals(betweenness[index3], 0.5); - } - - @Test - public void testSpecial3UndirectedGraphCloseness() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - Node node6 = graphModel.factory().newNode("5"); - Node node7 = graphModel.factory().newNode("6"); - undirectedGraph.addNode(node1); - undirectedGraph.addNode(node2); - undirectedGraph.addNode(node3); - undirectedGraph.addNode(node4); - undirectedGraph.addNode(node5); - undirectedGraph.addNode(node6); - undirectedGraph.addNode(node7); - Edge edge12 = graphModel.factory().newEdge(node1, node2, false); - Edge edge13 = graphModel.factory().newEdge(node1, node3, false); - Edge edge14 = graphModel.factory().newEdge(node1, node4, false); - Edge edge15 = graphModel.factory().newEdge(node1, node5, false); - Edge edge16 = graphModel.factory().newEdge(node1, node6, false); - Edge edge17 = graphModel.factory().newEdge(node1, node7, false); - Edge edge23 = graphModel.factory().newEdge(node2, node3, false); - Edge edge34 = graphModel.factory().newEdge(node3, node4, false); - Edge edge45 = graphModel.factory().newEdge(node4, node5, false); - Edge edge56 = graphModel.factory().newEdge(node5, node6, false); - Edge edge67 = graphModel.factory().newEdge(node6, node7, false); - Edge edge72 = graphModel.factory().newEdge(node7, node2, false); - undirectedGraph.addEdge(edge12); - undirectedGraph.addEdge(edge13); - undirectedGraph.addEdge(edge14); - undirectedGraph.addEdge(edge15); - undirectedGraph.addEdge(edge16); - undirectedGraph.addEdge(edge17); - undirectedGraph.addEdge(edge23); - undirectedGraph.addEdge(edge34); - undirectedGraph.addEdge(edge45); - undirectedGraph.addEdge(edge56); - undirectedGraph.addEdge(edge67); - undirectedGraph.addEdge(edge72); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(hierarchicalUndirectedGraph); - - HashMap metricsMap = (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - double[] closeness = metricsMap.get(GraphDistance.CLOSENESS); - - int index1 = indicies.get(node1); - int index3 = indicies.get(node3); - - assertEquals(closeness[index1], 1.0); - assertEquals(closeness[index3], 1.5); - } - - @Test - public void testDirectedPathGraphBetweenness() { - GraphModel graphModel = GraphGenerator.generatePathDirectedGraph(4); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - DirectedGraph directedGraph = graphModel.getDirectedGraph(); - HashMap indicies = d.createIndiciesMap(graphModel.getGraph()); - - HashMap metricsMap = (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); - double[] betweenness = metricsMap.get(GraphDistance.BETWEENNESS); - - Node n2 = directedGraph.getNode("1"); - int index2 = indicies.get(n2); - - assertEquals(betweenness[index2], 2.0); - } - - @Test - public void testDirectedPathGraphCloseness() { - GraphModel graphModel = GraphGenerator.generatePathDirectedGraph(4); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - DirectedGraph directedGraph = graphModel.getDirectedGraph(); - HashMap indicies = d.createIndiciesMap(graphModel.getGraph()); - - HashMap metricsMap = (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); - double[] closeness = metricsMap.get(GraphDistance.CLOSENESS); - - Node n1 = directedGraph.getNode("0"); - Node n3 = directedGraph.getNode("2"); - int index1 = indicies.get(n1); - int index3 = indicies.get(n3); - - assertEquals(closeness[index1], 2.0); - assertEquals(closeness[index3], 1.0); - } - - @Test - public void testDirectedCyclicGraphBetweenness() { - GraphModel graphModel = GraphGenerator.generateCyclicDirectedGraph(5); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - DirectedGraph directedGraph = graphModel.getDirectedGraph(); - HashMap indicies = d.createIndiciesMap(graphModel.getGraph()); - - HashMap metricsMap = (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); - double[] betweenness = metricsMap.get(GraphDistance.BETWEENNESS); - - Node n1 = directedGraph.getNode("0"); - Node n3 = directedGraph.getNode("2"); - int index1 = indicies.get(n1); - int index3 = indicies.get(n3); - - assertEquals(betweenness[index1], 6.0); - assertEquals(betweenness[index3], 6.0); - } - - @Test - public void testDirectedCyclicGraphCloseness() { - GraphModel graphModel = GraphGenerator.generateCyclicDirectedGraph(5); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - DirectedGraph directedGraph = graphModel.getDirectedGraph(); - HashMap indicies = d.createIndiciesMap(graphModel.getGraph()); - - HashMap metricsMap = (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); - double[] closeness = metricsMap.get(GraphDistance.CLOSENESS); - - Node n2 = directedGraph.getNode("1"); - int index2 = indicies.get(n2); - - assertEquals(closeness[index2], 2.5); - } - - @Test - public void testDirectedStarOutGraphBetweenness() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - - DirectedGraph directedGraph = graphModel.getDirectedGraph(); - Node firstNode = graphModel.factory().newNode("0"); - directedGraph.addNode(firstNode); - for (int i = 1; i <= 5; i++) { - Node currentNode = graphModel.factory().newNode(((Integer) i).toString()); - directedGraph.addNode(currentNode); - Edge currentEdge = graphModel.factory().newEdge(firstNode, currentNode); - directedGraph.addEdge(currentEdge); - } - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - - HashMap indicies = d.createIndiciesMap(graphModel.getGraph()); - - HashMap metricsMap = (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); - double[] betweenness = metricsMap.get(GraphDistance.BETWEENNESS); - - Node n1 = directedGraph.getNode("0"); - Node n5 = directedGraph.getNode("4"); - int index1 = indicies.get(n1); - int index5 = indicies.get(n5); - - assertEquals(betweenness[index1], 0.0); - assertEquals(betweenness[index5], 0.0); - } - - @Test - public void testDirectedStarOutGraphCloseness() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - - DirectedGraph directedGraph = graphModel.getDirectedGraph(); - Node firstNode = graphModel.factory().newNode("0"); - directedGraph.addNode(firstNode); - for (int i = 1; i <= 5; i++) { - Node currentNode = graphModel.factory().newNode(((Integer) i).toString()); - directedGraph.addNode(currentNode); - Edge currentEdge = graphModel.factory().newEdge(firstNode, currentNode); - directedGraph.addEdge(currentEdge); - } - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - - HashMap indicies = d.createIndiciesMap(graphModel.getGraph()); - - HashMap metricsMap = (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); - double[] closeness = metricsMap.get(GraphDistance.CLOSENESS); - - Node n1 = directedGraph.getNode("0"); - Node n6 = directedGraph.getNode("5"); - int index1 = indicies.get(n1); - int index6 = indicies.get(n6); - - assertEquals(closeness[index1], 1.0); - assertEquals(closeness[index6], 0.0); - } - - @Test - public void testSpecial1DirectedGraphBetweenness() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - DirectedGraph directedGraph = graphModel.getDirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - directedGraph.addNode(node1); - directedGraph.addNode(node2); - directedGraph.addNode(node3); - directedGraph.addNode(node4); - directedGraph.addNode(node5); - Edge edge13 = graphModel.factory().newEdge(node1, node3); - Edge edge32 = graphModel.factory().newEdge(node3, node2); - Edge edge21 = graphModel.factory().newEdge(node2, node1); - Edge edge34 = graphModel.factory().newEdge(node3, node4); - Edge edge45 = graphModel.factory().newEdge(node4, node5); - Edge edge53 = graphModel.factory().newEdge(node5, node3); - directedGraph.addEdge(edge13); - directedGraph.addEdge(edge32); - directedGraph.addEdge(edge21); - directedGraph.addEdge(edge34); - directedGraph.addEdge(edge45); - directedGraph.addEdge(edge53); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - - HashMap indicies = d.createIndiciesMap(graphModel.getGraph()); - - HashMap metricsMap = (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); - double[] betweenness = metricsMap.get(GraphDistance.BETWEENNESS); - - int index1 = indicies.get(node1); - int index3 = indicies.get(node3); - int index4 = indicies.get(node4); - - assertEquals(betweenness[index1], 3.0); - assertEquals(betweenness[index3], 10.0); - assertEquals(betweenness[index4], 3.0); - } - - @Test - public void testSpecial1DirectedGraphCloseness() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - DirectedGraph directedGraph = graphModel.getDirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - directedGraph.addNode(node1); - directedGraph.addNode(node2); - directedGraph.addNode(node3); - directedGraph.addNode(node4); - directedGraph.addNode(node5); - Edge edge13 = graphModel.factory().newEdge(node1, node3); - Edge edge32 = graphModel.factory().newEdge(node3, node2); - Edge edge21 = graphModel.factory().newEdge(node2, node1); - Edge edge34 = graphModel.factory().newEdge(node3, node4); - Edge edge45 = graphModel.factory().newEdge(node4, node5); - Edge edge53 = graphModel.factory().newEdge(node5, node3); - directedGraph.addEdge(edge13); - directedGraph.addEdge(edge32); - directedGraph.addEdge(edge21); - directedGraph.addEdge(edge34); - directedGraph.addEdge(edge45); - directedGraph.addEdge(edge53); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - - HashMap indicies = d.createIndiciesMap(graphModel.getGraph()); - - HashMap metricsMap = (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); - double[] closeness = metricsMap.get(GraphDistance.CLOSENESS); - - int index2 = indicies.get(node2); - int index3 = indicies.get(node3); - - assertEquals(closeness[index2], 2.5); - assertEquals(closeness[index3], 1.5); - } - - @Test - public void testConnectedComponentsUndirectedGraphCloseness() { - //expected that values are computed separatly for every connected component - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - undirectedGraph.addNode(node1); - undirectedGraph.addNode(node2); - undirectedGraph.addNode(node3); - undirectedGraph.addNode(node4); - undirectedGraph.addNode(node5); - Edge edge12 = graphModel.factory().newEdge(node1, node2, false); - Edge edge23 = graphModel.factory().newEdge(node2, node3, false); - Edge edge45 = graphModel.factory().newEdge(node4, node5, false); - undirectedGraph.addEdge(edge12); - undirectedGraph.addEdge(edge23); - undirectedGraph.addEdge(edge45); - - GraphDistance d = new GraphDistance(); - d.initializeStartValues(); - UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph(); - HashMap indicies = d.createIndiciesMap(hierarchicalUndirectedGraph); - - HashMap metricsMap = (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); - double[] closeness = metricsMap.get(GraphDistance.CLOSENESS); - - int index1 = indicies.get(node1); - int index4 = indicies.get(node4); - - assertEquals(closeness[index1], 1.5); - assertEquals(closeness[index4], 1.); - } -} diff --git a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/GraphDistanceTest.java b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/GraphDistanceTest.java new file mode 100644 index 0000000000..423c6fbaed --- /dev/null +++ b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/GraphDistanceTest.java @@ -0,0 +1,2112 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.statistics.plugin; + +import java.util.HashMap; +import junit.framework.TestCase; +import org.gephi.graph.api.DirectedGraph; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.UndirectedGraph; +import org.junit.Assert; +import org.junit.Test; + +/** + * @author Anna + * @author Jonny Wray + */ +public class GraphDistanceTest extends TestCase { + + private static final double TOLERANCE = 0.0001; + + @Test + public void testBetweenessCentralityNormalizedNotNegative() { + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + Assert.assertTrue(d.computeBetweennessNormalizationFactor(60000) >= 0); + } + + @Test + public void testOneNodeAvPathLength() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + + double averageDegree = d.getPathLength(); + assertEquals(averageDegree, Double.NaN); + } + + @Test + public void testTwoConnectedNodesAvPathLength() { + GraphModel graphModel = GraphGenerator.generatePathUndirectedGraph(2); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + + double averageDegree = d.getPathLength(); + assertEquals(averageDegree, 1.0, TOLERANCE); + } + + @Test + public void testNullGraphAvPathLength() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + + double averageDegree = d.getPathLength(); + assertEquals(averageDegree, Double.NaN); + } + + @Test + public void testCompleteGraphAvPathLength() { + GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + + double averageDegree = d.getPathLength(); + assertEquals(averageDegree, 1.0, TOLERANCE); + } + + @Test + public void testStarGraphAvPathLength() { + GraphModel graphModel = GraphGenerator.generateStarUndirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + + double averageDegree = d.getPathLength(); + double res = 1.6667; + double diff = Math.abs(averageDegree - res); + assertEquals(averageDegree, res, TOLERANCE); + } + + @Test + public void testCyclicGraphAvPathLength() { + GraphModel graphModel = GraphGenerator.generateCyclicUndirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + + double averageDegree = d.getPathLength(); + assertEquals(averageDegree, 1.5, TOLERANCE); + } + + @Test + public void testDirectedPathGraphAvPathLength() { + + GraphModel graphModel = GraphGenerator.generatePathDirectedGraph(4); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); + + double averageDegree = d.getPathLength(); + double res = 1.6667; + double diff = Math.abs(averageDegree - res); + assertEquals(averageDegree, res, TOLERANCE); + } + + @Test + public void testDirectedCyclicGraphAvPathLength() { + GraphModel graphModel = GraphGenerator.generateCyclicDirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); + + double averageDegree = d.getPathLength(); + assertEquals(averageDegree, 2.5, TOLERANCE); + } + + @Test + public void testDirectedStarOutGraphAvPathLength() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + Node firstNode = graphModel.factory().newNode("0"); + directedGraph.addNode(firstNode); + for (int i = 1; i <= 5; i++) { + Node currentNode = graphModel.factory().newNode(((Integer) i).toString()); + directedGraph.addNode(currentNode); + Edge currentEdge = graphModel.factory().newEdge(firstNode, currentNode); + directedGraph.addEdge(currentEdge); + } + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); + + double averageDegree = d.getPathLength(); + assertEquals(averageDegree, 1.0, TOLERANCE); + } + + @Test + public void testDirectedSpecial1GraphAvPathLength() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + + directedGraph.addNode(node1); + directedGraph.addNode(node2); + directedGraph.addNode(node3); + directedGraph.addNode(node4); + directedGraph.addNode(node5); + + Edge edge15 = graphModel.factory().newEdge(node1, node5); + Edge edge52 = graphModel.factory().newEdge(node5, node2); + Edge edge53 = graphModel.factory().newEdge(node5, node3); + Edge edge45 = graphModel.factory().newEdge(node4, node5); + + directedGraph.addEdge(edge15); + directedGraph.addEdge(edge52); + directedGraph.addEdge(edge53); + directedGraph.addEdge(edge45); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); + + double averageDegree = d.getPathLength(); + assertEquals(averageDegree, 1.5, TOLERANCE); + } + + @Test + public void testOneNodeDiameter() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + + double diameter = d.getDiameter(); + assertEquals(diameter, 0.0, TOLERANCE); + } + + @Test + public void testTwoConnectrdNodesDiameter() { + GraphModel graphModel = GraphGenerator.generatePathUndirectedGraph(2); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + + double diameter = d.getDiameter(); + assertEquals(diameter, 1.0, TOLERANCE); + } + + @Test + public void testNullGraphDiameter() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + + double diameter = d.getDiameter(); + assertEquals(diameter, 0.0, TOLERANCE); + } + + @Test + public void testCompleteGraphDiameter() { + GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + + double diameter = d.getDiameter(); + assertEquals(diameter, 1.0, TOLERANCE); + } + + @Test + public void testCyclicGraphDiameter() { + GraphModel graphModel = GraphGenerator.generateCyclicUndirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + + double diameter = d.getDiameter(); + assertEquals(diameter, 2.0, TOLERANCE); + } + + @Test + public void testSpecial1UndirectedGraphDiameter() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + Node node6 = graphModel.factory().newNode("5"); + Node node7 = graphModel.factory().newNode("6"); + Node node8 = graphModel.factory().newNode("7"); + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + undirectedGraph.addNode(node4); + undirectedGraph.addNode(node5); + undirectedGraph.addNode(node6); + undirectedGraph.addNode(node7); + undirectedGraph.addNode(node8); + Edge edge12 = graphModel.factory().newEdge(node1, node2, false); + Edge edge13 = graphModel.factory().newEdge(node1, node3, false); + Edge edge34 = graphModel.factory().newEdge(node3, node4, false); + Edge edge24 = graphModel.factory().newEdge(node2, node4, false); + Edge edge56 = graphModel.factory().newEdge(node5, node6, false); + Edge edge67 = graphModel.factory().newEdge(node6, node7, false); + Edge edge78 = graphModel.factory().newEdge(node7, node8, false); + Edge edge85 = graphModel.factory().newEdge(node8, node5, false); + Edge edge45 = graphModel.factory().newEdge(node4, node5, false); + undirectedGraph.addEdge(edge12); + undirectedGraph.addEdge(edge13); + undirectedGraph.addEdge(edge34); + undirectedGraph.addEdge(edge24); + undirectedGraph.addEdge(edge56); + undirectedGraph.addEdge(edge67); + undirectedGraph.addEdge(edge78); + undirectedGraph.addEdge(edge85); + undirectedGraph.addEdge(edge45); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(hierarchicalUndirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + + double diameter = d.getDiameter(); + assertEquals(diameter, 5.0, TOLERANCE); + } + + @Test + public void testSpecial2UndirectedGraphDiameter() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + Node node6 = graphModel.factory().newNode("5"); + Node node7 = graphModel.factory().newNode("6"); + Node node8 = graphModel.factory().newNode("7"); + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + undirectedGraph.addNode(node4); + undirectedGraph.addNode(node5); + undirectedGraph.addNode(node6); + undirectedGraph.addNode(node7); + undirectedGraph.addNode(node8); + Edge edge12 = graphModel.factory().newEdge(node1, node2, false); + Edge edge23 = graphModel.factory().newEdge(node2, node3, false); + Edge edge34 = graphModel.factory().newEdge(node3, node4, false); + Edge edge45 = graphModel.factory().newEdge(node4, node5, false); + Edge edge56 = graphModel.factory().newEdge(node5, node6, false); + Edge edge67 = graphModel.factory().newEdge(node6, node7, false); + Edge edge78 = graphModel.factory().newEdge(node7, node8, false); + Edge edge81 = graphModel.factory().newEdge(node8, node1, false); + Edge edge14 = graphModel.factory().newEdge(node1, node4, false); + Edge edge85 = graphModel.factory().newEdge(node8, node5, false); + undirectedGraph.addEdge(edge12); + undirectedGraph.addEdge(edge23); + undirectedGraph.addEdge(edge34); + undirectedGraph.addEdge(edge45); + undirectedGraph.addEdge(edge56); + undirectedGraph.addEdge(edge67); + undirectedGraph.addEdge(edge78); + undirectedGraph.addEdge(edge81); + undirectedGraph.addEdge(edge14); + undirectedGraph.addEdge(edge85); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(hierarchicalUndirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + + double diameter = d.getDiameter(); + assertEquals(diameter, 4.0, TOLERANCE); + } + + @Test + public void testDirectedPathGraphDiameter() { + GraphModel graphModel = GraphGenerator.generatePathDirectedGraph(4); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); + + double diameter = d.getDiameter(); + assertEquals(diameter, 3.0, TOLERANCE); + } + + @Test + public void testDirectedCyclicDiameter() { + GraphModel graphModel = GraphGenerator.generateCyclicDirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); + + double diameter = d.getDiameter(); + assertEquals(diameter, 4.0, TOLERANCE); + } + + @Test + public void testSpecial1DirectedGraphDiameter() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + Node node6 = graphModel.factory().newNode("5"); + Node node7 = graphModel.factory().newNode("6"); + Node node8 = graphModel.factory().newNode("7"); + directedGraph.addNode(node1); + directedGraph.addNode(node2); + directedGraph.addNode(node3); + directedGraph.addNode(node4); + directedGraph.addNode(node5); + directedGraph.addNode(node6); + directedGraph.addNode(node7); + directedGraph.addNode(node8); + Edge edge12 = graphModel.factory().newEdge(node1, node2); + Edge edge23 = graphModel.factory().newEdge(node2, node3); + Edge edge34 = graphModel.factory().newEdge(node3, node4); + Edge edge41 = graphModel.factory().newEdge(node4, node1); + Edge edge56 = graphModel.factory().newEdge(node5, node6); + Edge edge67 = graphModel.factory().newEdge(node6, node7); + Edge edge78 = graphModel.factory().newEdge(node7, node8); + Edge edge85 = graphModel.factory().newEdge(node8, node5); + Edge edge45 = graphModel.factory().newEdge(node4, node5); + directedGraph.addEdge(edge12); + directedGraph.addEdge(edge23); + directedGraph.addEdge(edge34); + directedGraph.addEdge(edge41); + directedGraph.addEdge(edge56); + directedGraph.addEdge(edge67); + directedGraph.addEdge(edge78); + directedGraph.addEdge(edge85); + directedGraph.addEdge(edge45); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); + + double diameter = d.getDiameter(); + assertEquals(diameter, 7.0, TOLERANCE); + } + + @Test + public void testSpecial2DirectedGraphDiameter() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + directedGraph.addNode(node1); + directedGraph.addNode(node2); + directedGraph.addNode(node3); + directedGraph.addNode(node4); + directedGraph.addNode(node5); + Edge edge12 = graphModel.factory().newEdge(node1, node2); + Edge edge14 = graphModel.factory().newEdge(node1, node4); + Edge edge23 = graphModel.factory().newEdge(node2, node3); + Edge edge25 = graphModel.factory().newEdge(node2, node5); + Edge edge35 = graphModel.factory().newEdge(node3, node5); + Edge edge43 = graphModel.factory().newEdge(node4, node3); + Edge edge51 = graphModel.factory().newEdge(node5, node1); + Edge edge54 = graphModel.factory().newEdge(node5, node4); + directedGraph.addEdge(edge12); + directedGraph.addEdge(edge14); + directedGraph.addEdge(edge23); + directedGraph.addEdge(edge25); + directedGraph.addEdge(edge35); + directedGraph.addEdge(edge43); + directedGraph.addEdge(edge51); + directedGraph.addEdge(edge54); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); + + double diameter = d.getDiameter(); + assertEquals(diameter, 4.0, TOLERANCE); + } + + @Test + public void testOneNodeRadius() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + + double radius = d.getRadius(); + assertEquals(radius, 0.0, TOLERANCE); + } + + @Test + public void testTwoConnectrdNodesRadius() { + GraphModel graphModel = GraphGenerator.generatePathUndirectedGraph(2); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + + double radius = d.getRadius(); + assertEquals(radius, 1.0, TOLERANCE); + } + + @Test + public void testNullGraphRadius() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + + double radius = d.getRadius(); + assertEquals(radius, 0.0, TOLERANCE); + } + + @Test + public void testCompleteGraphRadius() { + GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + + double radius = d.getRadius(); + assertEquals(radius, 1.0, TOLERANCE); + } + + @Test + public void testStarGraphRadius() { + GraphModel graphModel = GraphGenerator.generateStarUndirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + + double radius = d.getRadius(); + assertEquals(radius, 1.0, TOLERANCE); + } + + @Test + public void testCyclicGraphRadius() { + GraphModel graphModel = GraphGenerator.generateCyclicUndirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + + double radius = d.getRadius(); + assertEquals(radius, 2.0, TOLERANCE); + } + + @Test + public void testPathGraphRadius() { + GraphModel graphModel = GraphGenerator.generatePathUndirectedGraph(6); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + + double radius = d.getRadius(); + assertEquals(radius, 3.0, TOLERANCE); + } + + @Test + public void testSpecial1UndirectedGraphRadius() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + Node node6 = graphModel.factory().newNode("5"); + Node node7 = graphModel.factory().newNode("6"); + Node node8 = graphModel.factory().newNode("7"); + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + undirectedGraph.addNode(node4); + undirectedGraph.addNode(node5); + undirectedGraph.addNode(node6); + undirectedGraph.addNode(node7); + undirectedGraph.addNode(node8); + Edge edge12 = graphModel.factory().newEdge(node1, node2, false); + Edge edge13 = graphModel.factory().newEdge(node1, node3, false); + Edge edge34 = graphModel.factory().newEdge(node3, node4, false); + Edge edge24 = graphModel.factory().newEdge(node2, node4, false); + Edge edge56 = graphModel.factory().newEdge(node5, node6, false); + Edge edge67 = graphModel.factory().newEdge(node6, node7, false); + Edge edge78 = graphModel.factory().newEdge(node7, node8, false); + Edge edge85 = graphModel.factory().newEdge(node8, node5, false); + Edge edge45 = graphModel.factory().newEdge(node4, node5, false); + undirectedGraph.addEdge(edge12); + undirectedGraph.addEdge(edge13); + undirectedGraph.addEdge(edge34); + undirectedGraph.addEdge(edge24); + undirectedGraph.addEdge(edge56); + undirectedGraph.addEdge(edge67); + undirectedGraph.addEdge(edge78); + undirectedGraph.addEdge(edge85); + undirectedGraph.addEdge(edge45); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(hierarchicalUndirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + + double radius = d.getRadius(); + assertEquals(radius, 3.0, TOLERANCE); + } + + @Test + public void testSpecial2UndirectedGraphRadius() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + Node node6 = graphModel.factory().newNode("5"); + Node node7 = graphModel.factory().newNode("6"); + Node node8 = graphModel.factory().newNode("7"); + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + undirectedGraph.addNode(node4); + undirectedGraph.addNode(node5); + undirectedGraph.addNode(node6); + undirectedGraph.addNode(node7); + undirectedGraph.addNode(node8); + Edge edge12 = graphModel.factory().newEdge(node1, node2, false); + Edge edge23 = graphModel.factory().newEdge(node2, node3, false); + Edge edge34 = graphModel.factory().newEdge(node3, node4, false); + Edge edge45 = graphModel.factory().newEdge(node4, node5, false); + Edge edge56 = graphModel.factory().newEdge(node5, node6, false); + Edge edge67 = graphModel.factory().newEdge(node6, node7, false); + Edge edge78 = graphModel.factory().newEdge(node7, node8, false); + Edge edge81 = graphModel.factory().newEdge(node8, node1, false); + Edge edge14 = graphModel.factory().newEdge(node1, node4, false); + Edge edge85 = graphModel.factory().newEdge(node8, node5, false); + undirectedGraph.addEdge(edge12); + undirectedGraph.addEdge(edge23); + undirectedGraph.addEdge(edge34); + undirectedGraph.addEdge(edge45); + undirectedGraph.addEdge(edge56); + undirectedGraph.addEdge(edge67); + undirectedGraph.addEdge(edge78); + undirectedGraph.addEdge(edge81); + undirectedGraph.addEdge(edge14); + undirectedGraph.addEdge(edge85); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(hierarchicalUndirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + + double radius = d.getRadius(); + assertEquals(radius, 3.0, TOLERANCE); + } + + @Test + public void testDirectedCyclicRadius() { + GraphModel graphModel = GraphGenerator.generateCyclicDirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); + + double radius = d.getRadius(); + assertEquals(radius, 4.0, TOLERANCE); + } + + @Test + public void testDirectedPathGraphRadius() { + GraphModel graphModel = GraphGenerator.generatePathDirectedGraph(4); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); + + double radius = d.getRadius(); + assertEquals(radius, 0.0, TOLERANCE); + } + + @Test + public void testSpecial2DirectedGraphRadius() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + directedGraph.addNode(node1); + directedGraph.addNode(node2); + directedGraph.addNode(node3); + directedGraph.addNode(node4); + directedGraph.addNode(node5); + Edge edge12 = graphModel.factory().newEdge(node1, node2); + Edge edge14 = graphModel.factory().newEdge(node1, node4); + Edge edge23 = graphModel.factory().newEdge(node2, node3); + Edge edge25 = graphModel.factory().newEdge(node2, node5); + Edge edge35 = graphModel.factory().newEdge(node3, node5); + Edge edge43 = graphModel.factory().newEdge(node4, node3); + Edge edge51 = graphModel.factory().newEdge(node5, node1); + Edge edge54 = graphModel.factory().newEdge(node5, node4); + directedGraph.addEdge(edge12); + directedGraph.addEdge(edge14); + directedGraph.addEdge(edge23); + directedGraph.addEdge(edge25); + directedGraph.addEdge(edge35); + directedGraph.addEdge(edge43); + directedGraph.addEdge(edge51); + directedGraph.addEdge(edge54); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); + + double radius = d.getRadius(); + assertEquals(radius, 2.0, TOLERANCE); + } + + @Test + public void testTwoConnectedNodesBetweenness() { + GraphModel graphModel = GraphGenerator.generatePathUndirectedGraph(2); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + double[] betweenness = metricsMap.get(GraphDistance.BETWEENNESS); + + Node n1 = undirectedGraph.getNode("0"); + int index1 = indicies.get(n1); + + assertEquals(betweenness[index1], 0.0, TOLERANCE); + } + + @Test + public void testTwoConnectedNodesCloseness() { + GraphModel graphModel = GraphGenerator.generatePathUndirectedGraph(2); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + double[] closeness = metricsMap.get(GraphDistance.CLOSENESS); + + Node n1 = undirectedGraph.getNode("0"); + int index1 = indicies.get(n1); + + assertEquals(closeness[index1], 1.0, TOLERANCE); + } + + @Test + public void testTwoConnectedNodesHarmonicCloseness() { + GraphModel graphModel = GraphGenerator.generatePathUndirectedGraph(2); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + double[] harmonic = metricsMap.get(GraphDistance.HARMONIC_CLOSENESS); + + Node n1 = undirectedGraph.getNode("0"); + int index1 = indicies.get(n1); + + assertEquals(harmonic[index1], 1.0, TOLERANCE); + } + + @Test + public void testNullGraphBetweenness() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + double[] betweenness = metricsMap.get(GraphDistance.BETWEENNESS); + + Node n1 = undirectedGraph.getNode("0"); + int index1 = indicies.get(n1); + + assertEquals(betweenness[index1], 0.0, TOLERANCE); + } + + @Test + public void testNullGraphCloseness() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + double[] closeness = metricsMap.get(GraphDistance.CLOSENESS); + + Node n1 = undirectedGraph.getNode("0"); + int index1 = indicies.get(n1); + + assertEquals(closeness[index1], 0.0, TOLERANCE); + } + + @Test + public void testNullGraphHarmonicCloseness() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + double[] harmonic = metricsMap.get(GraphDistance.HARMONIC_CLOSENESS); + + Node n1 = undirectedGraph.getNode("0"); + int index1 = indicies.get(n1); + + assertEquals(harmonic[index1], 0.0, TOLERANCE); + } + + @Test + public void testCompleteGraphBetweenness() { + GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + double[] betweenness = metricsMap.get(GraphDistance.BETWEENNESS); + + Node n1 = undirectedGraph.getNode("0"); + int index1 = indicies.get(n1); + + assertEquals(betweenness[index1], 0.0, TOLERANCE); + } + + @Test + public void testCompleteGraphCloseness() { + GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + double[] closeness = metricsMap.get(GraphDistance.CLOSENESS); + + Node n1 = undirectedGraph.getNode("0"); + int index1 = indicies.get(n1); + + assertEquals(closeness[index1], 1.0, TOLERANCE); + } + + @Test + public void testCompleteGraphHarmonicCloseness() { + GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + double[] harmonic = metricsMap.get(GraphDistance.HARMONIC_CLOSENESS); + + Node n1 = undirectedGraph.getNode("0"); + int index1 = indicies.get(n1); + + assertEquals(harmonic[index1], 1.0, TOLERANCE); + } + + @Test + public void testStarGraphBetweenness() { + GraphModel graphModel = GraphGenerator.generateStarUndirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + double[] betweenness = metricsMap.get(GraphDistance.BETWEENNESS); + + Node n1 = undirectedGraph.getNode("0"); + Node n2 = undirectedGraph.getNode("1"); + int index1 = indicies.get(n1); + int index2 = indicies.get(n2); + + assertEquals(betweenness[index1], 10.0, TOLERANCE); + assertEquals(betweenness[index2], 0.0, TOLERANCE); + } + + @Test + public void testStarGraphCloseness() { + GraphModel graphModel = GraphGenerator.generateStarUndirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + double[] closeness = metricsMap.get(GraphDistance.CLOSENESS); + + Node n1 = undirectedGraph.getNode("0"); + Node n2 = undirectedGraph.getNode("1"); + int index1 = indicies.get(n1); + int index2 = indicies.get(n2); + + assertEquals(closeness[index1], 1.0, TOLERANCE); + assertEquals(closeness[index2], 1.0 / 1.8, TOLERANCE); + } + + @Test + public void testStarGraphHarmonicCloseness() { + GraphModel graphModel = GraphGenerator.generateStarUndirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + double[] harmonic = metricsMap.get(GraphDistance.HARMONIC_CLOSENESS); + + Node n1 = undirectedGraph.getNode("0"); + Node n2 = undirectedGraph.getNode("1"); + int index1 = indicies.get(n1); + int index2 = indicies.get(n2); + + assertEquals(harmonic[index1], 5.0 / 5.0, TOLERANCE); + assertEquals(harmonic[index2], (1.0 + 4 * 0.5) / 5.0, TOLERANCE); + } + + @Test + public void testCyclic5GraphBetweenness() { + GraphModel graphModel = GraphGenerator.generateCyclicUndirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + double[] betweenness = metricsMap.get(GraphDistance.BETWEENNESS); + + Node n4 = undirectedGraph.getNode("3"); + int index4 = indicies.get(n4); + + assertEquals(betweenness[index4], 1.0, TOLERANCE); + } + + @Test + public void testCyclic6GraphBetweenness() { + GraphModel graphModel = GraphGenerator.generateCyclicUndirectedGraph(6); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + double[] betweenness = metricsMap.get(GraphDistance.BETWEENNESS); + + Node n2 = undirectedGraph.getNode("1"); + int index2 = indicies.get(n2); + + assertEquals(betweenness[index2], 2.0, TOLERANCE); + } + + @Test + public void testCyclic5GraphCloseness() { + GraphModel graphModel = GraphGenerator.generateCyclicUndirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + double[] closeness = metricsMap.get(GraphDistance.CLOSENESS); + + Node n3 = undirectedGraph.getNode("2"); + int index3 = indicies.get(n3); + + assertEquals(closeness[index3], 1.0 / 1.5, TOLERANCE); + } + + @Test + public void testCyclic5GraphHarmonicCloseness() { + GraphModel graphModel = GraphGenerator.generateCyclicUndirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(undirectedGraph); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + double[] harmonic = metricsMap.get(GraphDistance.HARMONIC_CLOSENESS); + + Node n3 = undirectedGraph.getNode("2"); + int index3 = indicies.get(n3); + + assertEquals(harmonic[index3], (1.0 + 1.0 + 1.0 / 2.0 + 1.0 / 2.0) / 4.0, TOLERANCE); + } + + @Test + public void testSpecial1UndirectedGraphBetweenness() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + Node node6 = graphModel.factory().newNode("5"); + Node node7 = graphModel.factory().newNode("6"); + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + undirectedGraph.addNode(node4); + undirectedGraph.addNode(node5); + undirectedGraph.addNode(node6); + undirectedGraph.addNode(node7); + Edge edge12 = graphModel.factory().newEdge(node1, node2, false); + Edge edge13 = graphModel.factory().newEdge(node1, node3, false); + Edge edge14 = graphModel.factory().newEdge(node1, node4, false); + Edge edge15 = graphModel.factory().newEdge(node1, node5, false); + Edge edge16 = graphModel.factory().newEdge(node1, node6, false); + Edge edge27 = graphModel.factory().newEdge(node2, node7, false); + Edge edge37 = graphModel.factory().newEdge(node3, node7, false); + Edge edge47 = graphModel.factory().newEdge(node4, node7, false); + Edge edge57 = graphModel.factory().newEdge(node5, node7, false); + Edge edge67 = graphModel.factory().newEdge(node6, node7, false); + undirectedGraph.addEdge(edge12); + undirectedGraph.addEdge(edge13); + undirectedGraph.addEdge(edge14); + undirectedGraph.addEdge(edge15); + undirectedGraph.addEdge(edge16); + undirectedGraph.addEdge(edge27); + undirectedGraph.addEdge(edge37); + undirectedGraph.addEdge(edge47); + undirectedGraph.addEdge(edge57); + undirectedGraph.addEdge(edge67); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(hierarchicalUndirectedGraph); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + double[] betweenness = metricsMap.get(GraphDistance.BETWEENNESS); + + int index1 = indicies.get(node1); + int index3 = indicies.get(node3); + + assertEquals(betweenness[index1], 5., TOLERANCE); + assertEquals(betweenness[index3], 0.2, TOLERANCE); + } + + @Test + public void testSpecial1UndirectedGraphCloseness() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + Node node6 = graphModel.factory().newNode("5"); + Node node7 = graphModel.factory().newNode("6"); + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + undirectedGraph.addNode(node4); + undirectedGraph.addNode(node5); + undirectedGraph.addNode(node6); + undirectedGraph.addNode(node7); + Edge edge12 = graphModel.factory().newEdge(node1, node2, false); + Edge edge13 = graphModel.factory().newEdge(node1, node3, false); + Edge edge14 = graphModel.factory().newEdge(node1, node4, false); + Edge edge15 = graphModel.factory().newEdge(node1, node5, false); + Edge edge16 = graphModel.factory().newEdge(node1, node6, false); + Edge edge27 = graphModel.factory().newEdge(node2, node7, false); + Edge edge37 = graphModel.factory().newEdge(node3, node7, false); + Edge edge47 = graphModel.factory().newEdge(node4, node7, false); + Edge edge57 = graphModel.factory().newEdge(node5, node7, false); + Edge edge67 = graphModel.factory().newEdge(node6, node7, false); + undirectedGraph.addEdge(edge12); + undirectedGraph.addEdge(edge13); + undirectedGraph.addEdge(edge14); + undirectedGraph.addEdge(edge15); + undirectedGraph.addEdge(edge16); + undirectedGraph.addEdge(edge27); + undirectedGraph.addEdge(edge37); + undirectedGraph.addEdge(edge47); + undirectedGraph.addEdge(edge57); + undirectedGraph.addEdge(edge67); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(hierarchicalUndirectedGraph); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + double[] closeness = metricsMap.get(GraphDistance.CLOSENESS); + + int index7 = indicies.get(node7); + + double res = 1.0 / 1.1667; + double diff = 0.01; + + assertEquals(closeness[index7], res, TOLERANCE); + } + + @Test + public void testSpecial1UndirectedGraphHarmonicCloseness() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + Node node6 = graphModel.factory().newNode("5"); + Node node7 = graphModel.factory().newNode("6"); + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + undirectedGraph.addNode(node4); + undirectedGraph.addNode(node5); + undirectedGraph.addNode(node6); + undirectedGraph.addNode(node7); + Edge edge12 = graphModel.factory().newEdge(node1, node2, false); + Edge edge13 = graphModel.factory().newEdge(node1, node3, false); + Edge edge14 = graphModel.factory().newEdge(node1, node4, false); + Edge edge15 = graphModel.factory().newEdge(node1, node5, false); + Edge edge16 = graphModel.factory().newEdge(node1, node6, false); + Edge edge27 = graphModel.factory().newEdge(node2, node7, false); + Edge edge37 = graphModel.factory().newEdge(node3, node7, false); + Edge edge47 = graphModel.factory().newEdge(node4, node7, false); + Edge edge57 = graphModel.factory().newEdge(node5, node7, false); + Edge edge67 = graphModel.factory().newEdge(node6, node7, false); + undirectedGraph.addEdge(edge12); + undirectedGraph.addEdge(edge13); + undirectedGraph.addEdge(edge14); + undirectedGraph.addEdge(edge15); + undirectedGraph.addEdge(edge16); + undirectedGraph.addEdge(edge27); + undirectedGraph.addEdge(edge37); + undirectedGraph.addEdge(edge47); + undirectedGraph.addEdge(edge57); + undirectedGraph.addEdge(edge67); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(hierarchicalUndirectedGraph); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + double[] harmonic = metricsMap.get(GraphDistance.HARMONIC_CLOSENESS); + + int index7 = indicies.get(node7); + + double res = (5.0 + 0.5) / 6.0; + + assertEquals(harmonic[index7], res, TOLERANCE); + } + + @Test + public void testSpecial2UndirectedGraphBetweenness() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + Node node6 = graphModel.factory().newNode("5"); + Node node7 = graphModel.factory().newNode("6"); + Node node8 = graphModel.factory().newNode("7"); + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + undirectedGraph.addNode(node4); + undirectedGraph.addNode(node5); + undirectedGraph.addNode(node6); + undirectedGraph.addNode(node7); + undirectedGraph.addNode(node8); + Edge edge12 = graphModel.factory().newEdge(node1, node2, false); + Edge edge13 = graphModel.factory().newEdge(node1, node3, false); + Edge edge34 = graphModel.factory().newEdge(node3, node4, false); + Edge edge24 = graphModel.factory().newEdge(node2, node4, false); + Edge edge56 = graphModel.factory().newEdge(node5, node6, false); + Edge edge67 = graphModel.factory().newEdge(node6, node7, false); + Edge edge78 = graphModel.factory().newEdge(node7, node8, false); + Edge edge85 = graphModel.factory().newEdge(node8, node5, false); + Edge edge45 = graphModel.factory().newEdge(node4, node5, false); + undirectedGraph.addEdge(edge12); + undirectedGraph.addEdge(edge13); + undirectedGraph.addEdge(edge34); + undirectedGraph.addEdge(edge24); + undirectedGraph.addEdge(edge56); + undirectedGraph.addEdge(edge67); + undirectedGraph.addEdge(edge78); + undirectedGraph.addEdge(edge85); + undirectedGraph.addEdge(edge45); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(hierarchicalUndirectedGraph); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + double[] betweenness = metricsMap.get(GraphDistance.BETWEENNESS); + + Node n4 = undirectedGraph.getNode("3"); + Node n6 = undirectedGraph.getNode("5"); + Node n7 = undirectedGraph.getNode("6"); + + int index4 = indicies.get(n4); + int index6 = indicies.get(n6); + int index7 = indicies.get(n7); + + assertEquals(betweenness[index4], 12.5, TOLERANCE); + assertEquals(betweenness[index6], 2.5, TOLERANCE); + assertEquals(betweenness[index7], 0.5, TOLERANCE); + } + + @Test + public void testSpecial2UndirectedGraphCloseness() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + Node node6 = graphModel.factory().newNode("5"); + Node node7 = graphModel.factory().newNode("6"); + Node node8 = graphModel.factory().newNode("7"); + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + undirectedGraph.addNode(node4); + undirectedGraph.addNode(node5); + undirectedGraph.addNode(node6); + undirectedGraph.addNode(node7); + undirectedGraph.addNode(node8); + Edge edge12 = graphModel.factory().newEdge(node1, node2, false); + Edge edge13 = graphModel.factory().newEdge(node1, node3, false); + Edge edge34 = graphModel.factory().newEdge(node3, node4, false); + Edge edge24 = graphModel.factory().newEdge(node2, node4, false); + Edge edge56 = graphModel.factory().newEdge(node5, node6, false); + Edge edge67 = graphModel.factory().newEdge(node6, node7, false); + Edge edge78 = graphModel.factory().newEdge(node7, node8, false); + Edge edge85 = graphModel.factory().newEdge(node8, node5, false); + Edge edge45 = graphModel.factory().newEdge(node4, node5, false); + undirectedGraph.addEdge(edge12); + undirectedGraph.addEdge(edge13); + undirectedGraph.addEdge(edge34); + undirectedGraph.addEdge(edge24); + undirectedGraph.addEdge(edge56); + undirectedGraph.addEdge(edge67); + undirectedGraph.addEdge(edge78); + undirectedGraph.addEdge(edge85); + undirectedGraph.addEdge(edge45); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(hierarchicalUndirectedGraph); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + double[] closeness = metricsMap.get(GraphDistance.CLOSENESS); + + int index2 = indicies.get(node2); + + double res = 1.0 / 2.2857; + + assertEquals(closeness[index2], res, TOLERANCE); + } + + @Test + public void testSpecial2UndirectedGraphHarmonicCloseness() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + Node node6 = graphModel.factory().newNode("5"); + Node node7 = graphModel.factory().newNode("6"); + Node node8 = graphModel.factory().newNode("7"); + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + undirectedGraph.addNode(node4); + undirectedGraph.addNode(node5); + undirectedGraph.addNode(node6); + undirectedGraph.addNode(node7); + undirectedGraph.addNode(node8); + Edge edge12 = graphModel.factory().newEdge(node1, node2, false); + Edge edge13 = graphModel.factory().newEdge(node1, node3, false); + Edge edge34 = graphModel.factory().newEdge(node3, node4, false); + Edge edge24 = graphModel.factory().newEdge(node2, node4, false); + Edge edge56 = graphModel.factory().newEdge(node5, node6, false); + Edge edge67 = graphModel.factory().newEdge(node6, node7, false); + Edge edge78 = graphModel.factory().newEdge(node7, node8, false); + Edge edge85 = graphModel.factory().newEdge(node8, node5, false); + Edge edge45 = graphModel.factory().newEdge(node4, node5, false); + undirectedGraph.addEdge(edge12); + undirectedGraph.addEdge(edge13); + undirectedGraph.addEdge(edge34); + undirectedGraph.addEdge(edge24); + undirectedGraph.addEdge(edge56); + undirectedGraph.addEdge(edge67); + undirectedGraph.addEdge(edge78); + undirectedGraph.addEdge(edge85); + undirectedGraph.addEdge(edge45); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(hierarchicalUndirectedGraph); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + double[] harmonic = metricsMap.get(GraphDistance.HARMONIC_CLOSENESS); + + int index2 = indicies.get(node2); + + double res = (1.0 + 1.0 / 2.0 + 1.0 + 1.0 / 2.0 + 1.0 / 3.0 + 1.0 / 4.0 + 1.0 / 3.0) / 7.0; + + assertEquals(harmonic[index2], res, TOLERANCE); + } + + @Test + public void testSpecial3UndirectedGraphBetweenness() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + Node node6 = graphModel.factory().newNode("5"); + Node node7 = graphModel.factory().newNode("6"); + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + undirectedGraph.addNode(node4); + undirectedGraph.addNode(node5); + undirectedGraph.addNode(node6); + undirectedGraph.addNode(node7); + Edge edge12 = graphModel.factory().newEdge(node1, node2, false); + Edge edge13 = graphModel.factory().newEdge(node1, node3, false); + Edge edge14 = graphModel.factory().newEdge(node1, node4, false); + Edge edge15 = graphModel.factory().newEdge(node1, node5, false); + Edge edge16 = graphModel.factory().newEdge(node1, node6, false); + Edge edge17 = graphModel.factory().newEdge(node1, node7, false); + Edge edge23 = graphModel.factory().newEdge(node2, node3, false); + Edge edge34 = graphModel.factory().newEdge(node3, node4, false); + Edge edge45 = graphModel.factory().newEdge(node4, node5, false); + Edge edge56 = graphModel.factory().newEdge(node5, node6, false); + Edge edge67 = graphModel.factory().newEdge(node6, node7, false); + Edge edge72 = graphModel.factory().newEdge(node7, node2, false); + undirectedGraph.addEdge(edge12); + undirectedGraph.addEdge(edge13); + undirectedGraph.addEdge(edge14); + undirectedGraph.addEdge(edge15); + undirectedGraph.addEdge(edge16); + undirectedGraph.addEdge(edge17); + undirectedGraph.addEdge(edge23); + undirectedGraph.addEdge(edge34); + undirectedGraph.addEdge(edge45); + undirectedGraph.addEdge(edge56); + undirectedGraph.addEdge(edge67); + undirectedGraph.addEdge(edge72); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(hierarchicalUndirectedGraph); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + double[] betweenness = metricsMap.get(GraphDistance.BETWEENNESS); + + int index3 = indicies.get(node3); + + assertEquals(betweenness[index3], 0.5, TOLERANCE); + } + + @Test + public void testSpecial3UndirectedGraphCloseness() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + Node node6 = graphModel.factory().newNode("5"); + Node node7 = graphModel.factory().newNode("6"); + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + undirectedGraph.addNode(node4); + undirectedGraph.addNode(node5); + undirectedGraph.addNode(node6); + undirectedGraph.addNode(node7); + Edge edge12 = graphModel.factory().newEdge(node1, node2, false); + Edge edge13 = graphModel.factory().newEdge(node1, node3, false); + Edge edge14 = graphModel.factory().newEdge(node1, node4, false); + Edge edge15 = graphModel.factory().newEdge(node1, node5, false); + Edge edge16 = graphModel.factory().newEdge(node1, node6, false); + Edge edge17 = graphModel.factory().newEdge(node1, node7, false); + Edge edge23 = graphModel.factory().newEdge(node2, node3, false); + Edge edge34 = graphModel.factory().newEdge(node3, node4, false); + Edge edge45 = graphModel.factory().newEdge(node4, node5, false); + Edge edge56 = graphModel.factory().newEdge(node5, node6, false); + Edge edge67 = graphModel.factory().newEdge(node6, node7, false); + Edge edge72 = graphModel.factory().newEdge(node7, node2, false); + undirectedGraph.addEdge(edge12); + undirectedGraph.addEdge(edge13); + undirectedGraph.addEdge(edge14); + undirectedGraph.addEdge(edge15); + undirectedGraph.addEdge(edge16); + undirectedGraph.addEdge(edge17); + undirectedGraph.addEdge(edge23); + undirectedGraph.addEdge(edge34); + undirectedGraph.addEdge(edge45); + undirectedGraph.addEdge(edge56); + undirectedGraph.addEdge(edge67); + undirectedGraph.addEdge(edge72); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(hierarchicalUndirectedGraph); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + double[] closeness = metricsMap.get(GraphDistance.CLOSENESS); + + int index1 = indicies.get(node1); + int index3 = indicies.get(node3); + + assertEquals(closeness[index1], 1.0, TOLERANCE); + assertEquals(closeness[index3], 1.0 / 1.5, TOLERANCE); + } + + @Test + public void testSpecial3UndirectedGraphHarmonicCloseness() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + Node node6 = graphModel.factory().newNode("5"); + Node node7 = graphModel.factory().newNode("6"); + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + undirectedGraph.addNode(node4); + undirectedGraph.addNode(node5); + undirectedGraph.addNode(node6); + undirectedGraph.addNode(node7); + Edge edge12 = graphModel.factory().newEdge(node1, node2, false); + Edge edge13 = graphModel.factory().newEdge(node1, node3, false); + Edge edge14 = graphModel.factory().newEdge(node1, node4, false); + Edge edge15 = graphModel.factory().newEdge(node1, node5, false); + Edge edge16 = graphModel.factory().newEdge(node1, node6, false); + Edge edge17 = graphModel.factory().newEdge(node1, node7, false); + Edge edge23 = graphModel.factory().newEdge(node2, node3, false); + Edge edge34 = graphModel.factory().newEdge(node3, node4, false); + Edge edge45 = graphModel.factory().newEdge(node4, node5, false); + Edge edge56 = graphModel.factory().newEdge(node5, node6, false); + Edge edge67 = graphModel.factory().newEdge(node6, node7, false); + Edge edge72 = graphModel.factory().newEdge(node7, node2, false); + undirectedGraph.addEdge(edge12); + undirectedGraph.addEdge(edge13); + undirectedGraph.addEdge(edge14); + undirectedGraph.addEdge(edge15); + undirectedGraph.addEdge(edge16); + undirectedGraph.addEdge(edge17); + undirectedGraph.addEdge(edge23); + undirectedGraph.addEdge(edge34); + undirectedGraph.addEdge(edge45); + undirectedGraph.addEdge(edge56); + undirectedGraph.addEdge(edge67); + undirectedGraph.addEdge(edge72); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(hierarchicalUndirectedGraph); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + double[] harmomic = metricsMap.get(GraphDistance.HARMONIC_CLOSENESS); + + int index1 = indicies.get(node1); + int index3 = indicies.get(node3); + + assertEquals(harmomic[index1], 6.0 / 6.0, TOLERANCE); + assertEquals(harmomic[index3], (3.0 + 3.0 / 2.0) / 6.0, TOLERANCE); + } + + @Test + public void testDirectedPathGraphBetweenness() { + GraphModel graphModel = GraphGenerator.generatePathDirectedGraph(4); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + HashMap indicies = d.createIndiciesMap(graphModel.getGraph()); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); + double[] betweenness = metricsMap.get(GraphDistance.BETWEENNESS); + + Node n2 = directedGraph.getNode("1"); + int index2 = indicies.get(n2); + + assertEquals(betweenness[index2], 2.0, TOLERANCE); + } + + @Test + public void testDirectedPathGraphCloseness() { + GraphModel graphModel = GraphGenerator.generatePathDirectedGraph(4); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + HashMap indicies = d.createIndiciesMap(graphModel.getGraph()); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); + double[] closeness = metricsMap.get(GraphDistance.CLOSENESS); + + Node n1 = directedGraph.getNode("0"); + Node n3 = directedGraph.getNode("2"); + int index1 = indicies.get(n1); + int index3 = indicies.get(n3); + + assertEquals(closeness[index1], 1.0 / 2.0, TOLERANCE); + assertEquals(closeness[index3], 1.0, TOLERANCE); + } + + @Test + public void testDirectedPathGraphHarmonicCloseness() { + GraphModel graphModel = GraphGenerator.generatePathDirectedGraph(4); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + HashMap indicies = d.createIndiciesMap(graphModel.getGraph()); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); + double[] harmonic = metricsMap.get(GraphDistance.HARMONIC_CLOSENESS); + + Node n1 = directedGraph.getNode("0"); + Node n3 = directedGraph.getNode("2"); + int index1 = indicies.get(n1); + int index3 = indicies.get(n3); + + assertEquals(harmonic[index1], (1.0 + 1.0 / 2.0 + 1.0 / 3.0) / 3.0, TOLERANCE); + assertEquals(harmonic[index3], 1.0, TOLERANCE); + } + + @Test + public void testDirectedCyclicGraphBetweenness() { + GraphModel graphModel = GraphGenerator.generateCyclicDirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + HashMap indicies = d.createIndiciesMap(graphModel.getGraph()); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); + double[] betweenness = metricsMap.get(GraphDistance.BETWEENNESS); + + Node n1 = directedGraph.getNode("0"); + Node n3 = directedGraph.getNode("2"); + int index1 = indicies.get(n1); + int index3 = indicies.get(n3); + + assertEquals(betweenness[index1], 6.0, TOLERANCE); + assertEquals(betweenness[index3], 6.0, TOLERANCE); + } + + @Test + public void testDirectedCyclicGraphCloseness() { + GraphModel graphModel = GraphGenerator.generateCyclicDirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + HashMap indicies = d.createIndiciesMap(graphModel.getGraph()); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); + double[] closeness = metricsMap.get(GraphDistance.CLOSENESS); + + Node n2 = directedGraph.getNode("1"); + int index2 = indicies.get(n2); + + assertEquals(closeness[index2], 1.0 / 2.5, TOLERANCE); + } + + @Test + public void testDirectedCyclicGraphHarmonicCloseness() { + GraphModel graphModel = GraphGenerator.generateCyclicDirectedGraph(5); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + HashMap indicies = d.createIndiciesMap(graphModel.getGraph()); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); + double[] harmonic = metricsMap.get(GraphDistance.HARMONIC_CLOSENESS); + + Node n2 = directedGraph.getNode("1"); + int index2 = indicies.get(n2); + + assertEquals(harmonic[index2], (1.0 + 1.0 / 2.0 + 1.0 / 3.0 + 1.0 / 4.0) / 4.0, TOLERANCE); + } + + @Test + public void testDirectedStarOutGraphBetweenness() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + Node firstNode = graphModel.factory().newNode("0"); + directedGraph.addNode(firstNode); + for (int i = 1; i <= 5; i++) { + Node currentNode = graphModel.factory().newNode(((Integer) i).toString()); + directedGraph.addNode(currentNode); + Edge currentEdge = graphModel.factory().newEdge(firstNode, currentNode); + directedGraph.addEdge(currentEdge); + } + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + + HashMap indicies = d.createIndiciesMap(graphModel.getGraph()); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); + double[] betweenness = metricsMap.get(GraphDistance.BETWEENNESS); + + Node n1 = directedGraph.getNode("0"); + Node n5 = directedGraph.getNode("4"); + int index1 = indicies.get(n1); + int index5 = indicies.get(n5); + + assertEquals(betweenness[index1], 0.0, TOLERANCE); + assertEquals(betweenness[index5], 0.0, TOLERANCE); + } + + @Test + public void testDirectedStarOutGraphCloseness() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + Node firstNode = graphModel.factory().newNode("0"); + directedGraph.addNode(firstNode); + for (int i = 1; i <= 5; i++) { + Node currentNode = graphModel.factory().newNode(((Integer) i).toString()); + directedGraph.addNode(currentNode); + Edge currentEdge = graphModel.factory().newEdge(firstNode, currentNode); + directedGraph.addEdge(currentEdge); + } + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + + HashMap indicies = d.createIndiciesMap(graphModel.getGraph()); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); + double[] closeness = metricsMap.get(GraphDistance.CLOSENESS); + + Node n1 = directedGraph.getNode("0"); + Node n6 = directedGraph.getNode("5"); + int index1 = indicies.get(n1); + int index6 = indicies.get(n6); + + assertEquals(closeness[index1], 1.0, TOLERANCE); + assertEquals(closeness[index6], 0.0, TOLERANCE); + } + + @Test + public void testDirectedStarOutGraphHarmonicCloseness() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + Node firstNode = graphModel.factory().newNode("0"); + directedGraph.addNode(firstNode); + for (int i = 1; i <= 5; i++) { + Node currentNode = graphModel.factory().newNode(((Integer) i).toString()); + directedGraph.addNode(currentNode); + Edge currentEdge = graphModel.factory().newEdge(firstNode, currentNode); + directedGraph.addEdge(currentEdge); + } + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + + HashMap indicies = d.createIndiciesMap(graphModel.getGraph()); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); + double[] harmonic = metricsMap.get(GraphDistance.HARMONIC_CLOSENESS); + + Node n1 = directedGraph.getNode("0"); + Node n6 = directedGraph.getNode("5"); + int index1 = indicies.get(n1); + int index6 = indicies.get(n6); + + assertEquals(harmonic[index1], 1.0, TOLERANCE); + assertEquals(harmonic[index6], 0.0, TOLERANCE); + } + + @Test + public void testSpecial1DirectedGraphBetweenness() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + directedGraph.addNode(node1); + directedGraph.addNode(node2); + directedGraph.addNode(node3); + directedGraph.addNode(node4); + directedGraph.addNode(node5); + Edge edge13 = graphModel.factory().newEdge(node1, node3); + Edge edge32 = graphModel.factory().newEdge(node3, node2); + Edge edge21 = graphModel.factory().newEdge(node2, node1); + Edge edge34 = graphModel.factory().newEdge(node3, node4); + Edge edge45 = graphModel.factory().newEdge(node4, node5); + Edge edge53 = graphModel.factory().newEdge(node5, node3); + directedGraph.addEdge(edge13); + directedGraph.addEdge(edge32); + directedGraph.addEdge(edge21); + directedGraph.addEdge(edge34); + directedGraph.addEdge(edge45); + directedGraph.addEdge(edge53); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + + HashMap indicies = d.createIndiciesMap(graphModel.getGraph()); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); + double[] betweenness = metricsMap.get(GraphDistance.BETWEENNESS); + + int index1 = indicies.get(node1); + int index3 = indicies.get(node3); + int index4 = indicies.get(node4); + + assertEquals(betweenness[index1], 3.0, TOLERANCE); + assertEquals(betweenness[index3], 10.0, TOLERANCE); + assertEquals(betweenness[index4], 3.0, TOLERANCE); + } + + @Test + public void testSpecial1DirectedGraphCloseness() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + directedGraph.addNode(node1); + directedGraph.addNode(node2); + directedGraph.addNode(node3); + directedGraph.addNode(node4); + directedGraph.addNode(node5); + Edge edge13 = graphModel.factory().newEdge(node1, node3); + Edge edge32 = graphModel.factory().newEdge(node3, node2); + Edge edge21 = graphModel.factory().newEdge(node2, node1); + Edge edge34 = graphModel.factory().newEdge(node3, node4); + Edge edge45 = graphModel.factory().newEdge(node4, node5); + Edge edge53 = graphModel.factory().newEdge(node5, node3); + directedGraph.addEdge(edge13); + directedGraph.addEdge(edge32); + directedGraph.addEdge(edge21); + directedGraph.addEdge(edge34); + directedGraph.addEdge(edge45); + directedGraph.addEdge(edge53); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + + HashMap indicies = d.createIndiciesMap(graphModel.getGraph()); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); + double[] closeness = metricsMap.get(GraphDistance.CLOSENESS); + + int index2 = indicies.get(node2); + int index3 = indicies.get(node3); + + assertEquals(closeness[index2], 1.0 / 2.5, TOLERANCE); + assertEquals(closeness[index3], 1.0 / 1.5, TOLERANCE); + } + + @Test + public void testSpecial1DirectedGraphHarmonicCloseness() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + directedGraph.addNode(node1); + directedGraph.addNode(node2); + directedGraph.addNode(node3); + directedGraph.addNode(node4); + directedGraph.addNode(node5); + Edge edge13 = graphModel.factory().newEdge(node1, node3); + Edge edge32 = graphModel.factory().newEdge(node3, node2); + Edge edge21 = graphModel.factory().newEdge(node2, node1); + Edge edge34 = graphModel.factory().newEdge(node3, node4); + Edge edge45 = graphModel.factory().newEdge(node4, node5); + Edge edge53 = graphModel.factory().newEdge(node5, node3); + directedGraph.addEdge(edge13); + directedGraph.addEdge(edge32); + directedGraph.addEdge(edge21); + directedGraph.addEdge(edge34); + directedGraph.addEdge(edge45); + directedGraph.addEdge(edge53); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + + HashMap indicies = d.createIndiciesMap(graphModel.getGraph()); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, true, false); + double[] harmonic = metricsMap.get(GraphDistance.HARMONIC_CLOSENESS); + + int index2 = indicies.get(node2); + int index3 = indicies.get(node3); + + assertEquals(harmonic[index2], (1.0 + 1.0 / 2.0 + 1.0 / 3.0 + 1.0 / 4.0) / 4.0, TOLERANCE); + assertEquals(harmonic[index3], (1.0 / 2.0 + 1.0 + 1.0 + 1.0 / 2.0) / 4.0, TOLERANCE); + } + + @Test + public void testConnectedComponentsUndirectedGraphCloseness() { + //expected that values are computed separatly for every connected component + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + undirectedGraph.addNode(node4); + undirectedGraph.addNode(node5); + Edge edge12 = graphModel.factory().newEdge(node1, node2, false); + Edge edge23 = graphModel.factory().newEdge(node2, node3, false); + Edge edge45 = graphModel.factory().newEdge(node4, node5, false); + undirectedGraph.addEdge(edge12); + undirectedGraph.addEdge(edge23); + undirectedGraph.addEdge(edge45); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(hierarchicalUndirectedGraph); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + double[] closeness = metricsMap.get(GraphDistance.CLOSENESS); + + int index1 = indicies.get(node1); + int index4 = indicies.get(node4); + + assertEquals(closeness[index1], 1.0 / 1.5, TOLERANCE); + assertEquals(closeness[index4], 1., TOLERANCE); + } + + @Test + public void testConnectedComponentsUndirectedGraphHarmonicCloseness() { + //expected that values are computed separatly for every connected component + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + undirectedGraph.addNode(node4); + undirectedGraph.addNode(node5); + Edge edge12 = graphModel.factory().newEdge(node1, node2, false); + Edge edge23 = graphModel.factory().newEdge(node2, node3, false); + Edge edge45 = graphModel.factory().newEdge(node4, node5, false); + undirectedGraph.addEdge(edge12); + undirectedGraph.addEdge(edge23); + undirectedGraph.addEdge(edge45); + + GraphDistance d = new GraphDistance(); + d.initializeStartValues(); + UndirectedGraph hierarchicalUndirectedGraph = graphModel.getUndirectedGraph(); + HashMap indicies = d.createIndiciesMap(hierarchicalUndirectedGraph); + + HashMap metricsMap = + (HashMap) d.calculateDistanceMetrics(graphModel.getGraph(), indicies, false, false); + double[] harmonic = metricsMap.get(GraphDistance.HARMONIC_CLOSENESS); + + int index1 = indicies.get(node1); + int index4 = indicies.get(node4); + + assertEquals(harmonic[index1], (1.0 + 1.0 / 2.0) / 2.0, TOLERANCE); + assertEquals(harmonic[index4], 1.0, TOLERANCE); + } + + @Test + public void testColumnCreation() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + + GraphDistance d = new GraphDistance(); + d.execute(graphModel); + + Assert.assertTrue(graphModel.getNodeTable().hasColumn(GraphDistance.BETWEENNESS)); + Assert.assertTrue(graphModel.getNodeTable().hasColumn(GraphDistance.ECCENTRICITY)); + Assert.assertTrue(graphModel.getNodeTable().hasColumn(GraphDistance.CLOSENESS)); + Assert.assertTrue(graphModel.getNodeTable().hasColumn(GraphDistance.HARMONIC_CLOSENESS)); + } + + @Test + public void testColumnReplace() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + + graphModel.getNodeTable().addColumn(GraphDistance.HARMONIC_CLOSENESS, String.class); + graphModel.getNodeTable().addColumn(GraphDistance.ECCENTRICITY, String.class); + graphModel.getNodeTable().addColumn(GraphDistance.CLOSENESS, String.class); + graphModel.getNodeTable().addColumn(GraphDistance.BETWEENNESS, String.class); + + GraphDistance d = new GraphDistance(); + d.execute(graphModel); + } +} diff --git a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/GraphGenerator.java b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/GraphGenerator.java index 79bcf8cc16..b73243697a 100644 --- a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/GraphGenerator.java +++ b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/GraphGenerator.java @@ -1,36 +1,82 @@ /* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.statistics.plugin; import org.gephi.graph.api.DirectedGraph; import org.gephi.graph.api.Edge; -import org.gephi.graph.api.GraphController; import org.gephi.graph.api.GraphModel; import org.gephi.graph.api.Node; import org.gephi.graph.api.UndirectedGraph; -import org.openide.util.Lookup; /** - * * @author mbastian */ public class GraphGenerator { public static GraphModel generateNullUndirectedGraph(int n) { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + for (int i = 0; i < n; i++) { + Node currentNode = graphModel.factory().newNode(((Integer) i).toString()); + undirectedGraph.addNode(currentNode); + } + return graphModel; + } + + public static GraphModel generateSelfLoopUndirectedGraph(int n) { + GraphModel graphModel = GraphModel.Factory.newInstance(); UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); for (int i = 0; i < n; i++) { Node currentNode = graphModel.factory().newNode(((Integer) i).toString()); undirectedGraph.addNode(currentNode); + Edge currentEdge = graphModel.factory().newEdge(currentNode, currentNode, false); + undirectedGraph.addEdge(currentEdge); } return graphModel; } public static GraphModel generateCompleteUndirectedGraph(int n) { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); + GraphModel graphModel = GraphModel.Factory.newInstance(); UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); Node[] nodes = new Node[n]; for (int i = 0; i < n; i++) { @@ -48,7 +94,7 @@ public static GraphModel generateCompleteUndirectedGraph(int n) { } public static GraphModel generatePathUndirectedGraph(int n) { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); + GraphModel graphModel = GraphModel.Factory.newInstance(); UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); if (n <= 0) { return graphModel; @@ -67,7 +113,7 @@ public static GraphModel generatePathUndirectedGraph(int n) { } public static GraphModel generateCyclicUndirectedGraph(int n) { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); + GraphModel graphModel = GraphModel.Factory.newInstance(); UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); if (n <= 0) { return graphModel; @@ -89,7 +135,7 @@ public static GraphModel generateCyclicUndirectedGraph(int n) { //generates graph from n+1 nodes public static GraphModel generateStarUndirectedGraph(int n) { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); + GraphModel graphModel = GraphModel.Factory.newInstance(); UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); Node firstNode = graphModel.factory().newNode("0"); undirectedGraph.addNode(firstNode); @@ -103,7 +149,7 @@ public static GraphModel generateStarUndirectedGraph(int n) { } public static GraphModel generateNullDirectedGraph(int n) { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); + GraphModel graphModel = GraphModel.Factory.newInstance(); DirectedGraph directedGraph = graphModel.getDirectedGraph(); for (int i = 0; i < n; i++) { Node currentNode = graphModel.factory().newNode(((Integer) i).toString()); @@ -112,8 +158,20 @@ public static GraphModel generateNullDirectedGraph(int n) { return graphModel; } + public static GraphModel generateSelfLoopDirectedGraph(int n) { + GraphModel graphModel = GraphModel.Factory.newInstance(); + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + for (int i = 0; i < n; i++) { + Node currentNode = graphModel.factory().newNode(((Integer) i).toString()); + directedGraph.addNode(currentNode); + Edge currentEdge = graphModel.factory().newEdge(currentNode, currentNode); + directedGraph.addEdge(currentEdge); + } + return graphModel; + } + public static GraphModel generateCompleteDirectedGraph(int n) { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); + GraphModel graphModel = GraphModel.Factory.newInstance(); DirectedGraph directedGraph = graphModel.getDirectedGraph(); Node[] nodes = new Node[n]; for (int i = 0; i < n; i++) { @@ -133,7 +191,7 @@ public static GraphModel generateCompleteDirectedGraph(int n) { } public static GraphModel generatePathDirectedGraph(int n) { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); + GraphModel graphModel = GraphModel.Factory.newInstance(); DirectedGraph directedGraph = graphModel.getDirectedGraph(); if (n <= 0) { return graphModel; @@ -152,7 +210,7 @@ public static GraphModel generatePathDirectedGraph(int n) { } public static GraphModel generateCyclicDirectedGraph(int n) { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); + GraphModel graphModel = GraphModel.Factory.newInstance(); DirectedGraph directedGraph = graphModel.getDirectedGraph(); if (n <= 0) { return graphModel; diff --git a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/HitsNGTest.java b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/HitsNGTest.java deleted file mode 100644 index d34c165fd1..0000000000 --- a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/HitsNGTest.java +++ /dev/null @@ -1,460 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package org.gephi.statistics.plugin; - -import java.util.HashMap; -import java.util.LinkedList; -import org.gephi.graph.api.DirectedGraph; -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.Graph; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.GraphModel; -import org.gephi.graph.api.Node; -import org.gephi.graph.api.UndirectedGraph; -import org.gephi.project.api.ProjectController; -import org.gephi.project.impl.ProjectControllerImpl; -import org.openide.util.Lookup; -import static org.testng.Assert.*; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -/** - * - * @author Anna - */ -public class HitsNGTest { - - private ProjectController pc; - - @BeforeClass - public void setUp() { - pc = Lookup.getDefault().lookup(ProjectControllerImpl.class); - } - - @BeforeMethod - public void initialize() { - pc.newProject(); - } - - @AfterMethod - public void clean() { - pc.closeCurrentProject(); - } - - @Test - public void testOneNodeHits() { - GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); - Graph hgraph = graphModel.getUndirectedGraph(); - - Hits hit = new Hits(); - - double[] authority = new double[1]; - double[] hubs = new double[1]; - - HashMap indicies = hit.createIndiciesMap(hgraph); - - hit.calculateHits(hgraph, hubs, authority, indicies, false, 0.01); - - Node n1 = hgraph.getNode("0"); - int index = indicies.get(n1); - double hub1 = hubs[index]; - double auth1 = authority[index]; - - assertEquals(hub1, 1.0); - assertEquals(auth1, 1.0); - } - - @Test - public void testTwoConnectedNodesHits() { - GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(2); - Graph hgraph = graphModel.getUndirectedGraph(); - - Hits hit = new Hits(); - - double[] authority = new double[2]; - double[] hubs = new double[2]; - - HashMap indicies = hit.createIndiciesMap(hgraph); - - hit.calculateHits(hgraph, hubs, authority, indicies, false, 0.01); - - Node n1 = hgraph.getNode("0"); - Node n2 = hgraph.getNode("1"); - int index1 = indicies.get(n1); - int index2 = indicies.get(n2); - double hub1 = hubs[index1]; - double auth2 = authority[index2]; - - assertEquals(hub1, 0.5); - assertEquals(auth2, 0.5); - } - - @Test - public void testNullGraphHits() { - GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(5); - Graph hgraph = graphModel.getUndirectedGraph(); - - Hits hit = new Hits(); - - double[] authority = new double[5]; - double[] hubs = new double[5]; - - HashMap indicies = hit.createIndiciesMap(hgraph); - - hit.calculateHits(hgraph, hubs, authority,indicies, false, 0.01); - - Node n2 = hgraph.getNode("1"); - Node n3 = hgraph.getNode("2"); - int index2 = indicies.get(n2); - int index3 = indicies.get(n3); - double hub2 = hubs[index2]; - double auth3 = authority[index3]; - - assertEquals(hub2, 0.2); - assertEquals(auth3, 0.2); - } - - @Test - public void testCompleteGraphHits() { - GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(5); - Graph hgraph = graphModel.getUndirectedGraph(); - - Hits hit = new Hits(); - - double[] authority = new double[5]; - double[] hubs = new double[5]; - - HashMap indicies = hit.createIndiciesMap(hgraph); - - hit.calculateHits(hgraph, hubs, authority, indicies, false, 0.01); - - Node n1 = hgraph.getNode("0"); - Node n5 = hgraph.getNode("4"); - int index1 = indicies.get(n1); - int index5 = indicies.get(n5); - double hub1 = hubs[index1]; - double auth5 = authority[index5]; - - assertEquals(hub1, 0.2); - assertEquals(auth5, 0.2); - } - - @Test - public void testStarGraphHits() { - GraphModel graphModel = GraphGenerator.generateStarUndirectedGraph(5); - Graph hgraph = graphModel.getUndirectedGraph(); - - Hits hit = new Hits(); - - double[] authority = new double[6]; - double[] hubs = new double[6]; - - HashMap indicies = hit.createIndiciesMap(hgraph); - - hit.calculateHits(hgraph, hubs, authority, indicies, false, 0.01); - - Node n1 = hgraph.getNode("0"); - Node n3 = hgraph.getNode("2"); - Node n4 = hgraph.getNode("3"); - int index1 = indicies.get(n1); - int index3 = indicies.get(n3); - int index4 = indicies.get(n4); - - double hub1 = hubs[index1]; - double hub3 = hubs[index3]; - double auth1 = authority[index1]; - double auth4 = authority[index4]; - - boolean b1 = hub1 > hub3; - boolean b2 = auth1 > auth4; - - assertTrue(b1); - assertTrue(b2); - } - - @Test - public void testGraphWithSelfLoopsHits() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - - undirectedGraph.addNode(node1); - undirectedGraph.addNode(node2); - undirectedGraph.addNode(node3); - - Edge edge12 = graphModel.factory().newEdge(node1, node2, false); - Edge edge23 = graphModel.factory().newEdge(node2, node3, false); - Edge edge11 = graphModel.factory().newEdge(node1, node1, false); - Edge edge33 = graphModel.factory().newEdge(node3, node3, false); - - undirectedGraph.addEdge(edge12); - undirectedGraph.addEdge(edge23); - undirectedGraph.addEdge(edge11); - undirectedGraph.addEdge(edge33); - - Graph hgraph = graphModel.getUndirectedGraph(); - - Hits hit = new Hits(); - - HashMap indicies = hit.createIndiciesMap(hgraph); - - double[] authority = new double[3]; - double[] hubs = new double[3]; - - hit.calculateHits(hgraph, hubs, authority, indicies, false, 0.01); - - Node n1 = hgraph.getNode("0"); - Node n2 = hgraph.getNode("1"); - int index1 = indicies.get(n1); - int index2 = indicies.get(n2); - - double hub1 = hubs[index1]; - double hub2 = hubs[index2]; - - boolean b1 = hub2 > hub1; - - assertTrue(b1); - - } - - @Test - public void testDirectedSpecial1GraphHits() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - - DirectedGraph directedGraph = graphModel.getDirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - - directedGraph.addNode(node1); - directedGraph.addNode(node2); - directedGraph.addNode(node3); - directedGraph.addNode(node4); - directedGraph.addNode(node5); - - Edge edge14 = graphModel.factory().newEdge(node1, node4); - Edge edge15 = graphModel.factory().newEdge(node1, node5); - Edge edge24 = graphModel.factory().newEdge(node2, node4); - Edge edge25 = graphModel.factory().newEdge(node2, node5); - Edge edge34 = graphModel.factory().newEdge(node3, node4); - Edge edge35 = graphModel.factory().newEdge(node3, node5); - - directedGraph.addEdge(edge14); - directedGraph.addEdge(edge15); - directedGraph.addEdge(edge24); - directedGraph.addEdge(edge25); - directedGraph.addEdge(edge34); - directedGraph.addEdge(edge35); - - DirectedGraph hgraph = graphModel.getDirectedGraph(); - Hits hit = new Hits(); - - double[] authority = new double[5]; - double[] hubs = new double[5]; - - HashMap indicies = hit.createIndiciesMap(hgraph); - - hit.calculateHits(hgraph, hubs, authority, indicies, true, 0.01); - - Node n1 = hgraph.getNode("0"); - Node n2 = hgraph.getNode("1"); - Node n4 = hgraph.getNode("3"); - Node n5 = hgraph.getNode("4"); - - int index1 = indicies.get(n1); - int index2 = indicies.get(n2); - int index4 = indicies.get(n4); - int index5 = indicies.get(n5); - - double hub1 = hubs[index1]; - double hub4 = hubs[index4]; - double auth2 = authority[index2]; - double auth5 = authority[index5]; - - double res = 0.333; - double diff = 0.01; - - assertTrue(Math.abs(hub1 - res) < diff); - assertEquals(hub4, 0.); - assertEquals(auth2, 0.); - assertEquals(auth5, 0.5); - } - - @Test - public void testDirectedStarOutGraphHits() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - - DirectedGraph directedGraph = graphModel.getDirectedGraph(); - Node firstNode = graphModel.factory().newNode("0"); - directedGraph.addNode(firstNode); - for (int i = 1; i <= 5; i++) { - Node currentNode = graphModel.factory().newNode(((Integer) i).toString()); - directedGraph.addNode(currentNode); - Edge currentEdge = graphModel.factory().newEdge(firstNode, currentNode); - directedGraph.addEdge(currentEdge); - } - - DirectedGraph hgraph = graphModel.getDirectedGraph(); - - Hits hit = new Hits(); - - double[] authority = new double[6]; - double[] hubs = new double[6]; - - HashMap indicies = hit.createIndiciesMap(hgraph); - - hit.calculateHits(hgraph, hubs, authority, indicies, true, 0.01); - - Node n1 = hgraph.getNode("0"); - Node n3 = hgraph.getNode("2"); - - int index1 = indicies.get(n1); - int index3 = indicies.get(n3); - - double hub1 = hubs[index1]; - double hub3 = hubs[index3]; - double auth1 = authority[index1]; - double auth3 = authority[index3]; - - double res = 0.146; - double diff = 0.01; - - assertEquals(hub1, 1.); - assertEquals(auth1, 0.); - assertEquals(hub3, 0.); - assertEquals(auth3, 0.2); - } - - @Test - public void testDirectedSpecial2GraphHits() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - - DirectedGraph directedGraph = graphModel.getDirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - Node node6 = graphModel.factory().newNode("5"); - - directedGraph.addNode(node1); - directedGraph.addNode(node2); - directedGraph.addNode(node3); - directedGraph.addNode(node4); - directedGraph.addNode(node5); - directedGraph.addNode(node6); - - Edge edge21 = graphModel.factory().newEdge(node2, node1); - Edge edge31 = graphModel.factory().newEdge(node3, node1); - Edge edge41 = graphModel.factory().newEdge(node4, node1); - Edge edge51 = graphModel.factory().newEdge(node5, node1); - Edge edge36 = graphModel.factory().newEdge(node3, node6); - Edge edge46 = graphModel.factory().newEdge(node4, node6); - Edge edge56 = graphModel.factory().newEdge(node5, node6); - - directedGraph.addEdge(edge21); - directedGraph.addEdge(edge31); - directedGraph.addEdge(edge41); - directedGraph.addEdge(edge51); - directedGraph.addEdge(edge36); - directedGraph.addEdge(edge46); - directedGraph.addEdge(edge56); - - DirectedGraph hgraph = graphModel.getDirectedGraph(); - Hits hit = new Hits(); - - double[] authority = new double[6]; - double[] hubs = new double[6]; - - HashMap indicies = hit.createIndiciesMap(hgraph); - - hit.calculateHits(hgraph, hubs, authority, indicies, true, 0.01); - - int index1 = indicies.get(node1); - int index2 = indicies.get(node2); - int index3 = indicies.get(node3); - int index5 = indicies.get(node5); - int index6 = indicies.get(node6); - - double hub2 = hubs[index2]; - double hub3 = hubs[index3]; - double hub5 = hubs[index5]; - double hub6 = hubs[index6]; - double auth1 = authority[index1]; - double auth3 = authority[index3]; - double auth6 = authority[index6]; - - assertEquals(hub3, hub5); - assertTrue(hub3 > hub2); - assertTrue(auth1 > auth6); - assertEquals(hub6, 0.); - assertEquals(auth3, 0.); - } - - @Test - public void testDirectedSpecial3GraphHits() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - - DirectedGraph directedGraph = graphModel.getDirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - Node node6 = graphModel.factory().newNode("5"); - - directedGraph.addNode(node1); - directedGraph.addNode(node2); - directedGraph.addNode(node3); - directedGraph.addNode(node4); - directedGraph.addNode(node5); - directedGraph.addNode(node6); - - Edge edge15 = graphModel.factory().newEdge(node1, node5); - Edge edge25 = graphModel.factory().newEdge(node2, node5); - Edge edge35 = graphModel.factory().newEdge(node3, node5); - Edge edge45 = graphModel.factory().newEdge(node4, node5); - Edge edge56 = graphModel.factory().newEdge(node5, node6); - - directedGraph.addEdge(edge15); - directedGraph.addEdge(edge25); - directedGraph.addEdge(edge35); - directedGraph.addEdge(edge45); - directedGraph.addEdge(edge56); - - DirectedGraph hgraph = graphModel.getDirectedGraph(); - Hits hit = new Hits(); - - double[] authority = new double[6]; - double[] hubs = new double[6]; - - HashMap indicies = hit.createIndiciesMap(hgraph); - - hit.calculateHits(hgraph, hubs, authority, indicies, true, 0.01); - - int index1 = indicies.get(node1); - int index3 = indicies.get(node3); - int index5 = indicies.get(node5); - int index6 = indicies.get(node6); - - double hub1 = hubs[index1]; - double hub3 = hubs[index3]; - double hub5 = hubs[index5]; - double auth5 = authority[index5]; - double auth6 = authority[index6]; - - assertEquals(hub1, hub3); - assertTrue(hub1 > hub5); - assertTrue(auth5 > auth6); - } - -} diff --git a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/HitsTest.java b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/HitsTest.java new file mode 100644 index 0000000000..ae886c559f --- /dev/null +++ b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/HitsTest.java @@ -0,0 +1,550 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.statistics.plugin; + +import java.util.HashMap; +import junit.framework.TestCase; +import org.gephi.graph.api.DirectedGraph; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.UndirectedGraph; +import org.junit.Assert; +import org.junit.Test; + +/** + * @author Anna + */ +public class HitsTest extends TestCase { + + private static final double EPSILON = 1e-4; + + @Test + public void testOneNodeHits() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + Graph graph = graphModel.getUndirectedGraph(); + + Hits hit = new Hits(); + + double[] authority = new double[1]; + double[] hubs = new double[1]; + + HashMap indices = hit.createIndicesMap(graph); + + hit.calculateHits(graph, hubs, authority, indices, false, EPSILON); + + Node n1 = graph.getNode("0"); + int index = indices.get(n1); + double hub1 = hubs[index]; + double auth1 = authority[index]; + + assertEquals(hub1, 0.0); + assertEquals(auth1, 0.0); + } + + @Test + public void testTwoConnectedNodesHits() { + GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(2); + Graph graph = graphModel.getUndirectedGraph(); + + Hits hit = new Hits(); + + double[] authority = new double[2]; + double[] hubs = new double[2]; + + HashMap indices = hit.createIndicesMap(graph); + + hit.calculateHits(graph, hubs, authority, indices, false, EPSILON); + + Node n1 = graph.getNode("0"); + Node n2 = graph.getNode("1"); + int index1 = indices.get(n1); + int index2 = indices.get(n2); + double hub1 = hubs[index1]; + double auth2 = authority[index2]; + + assertEquals(hub1, 0.7071); + assertEquals(auth2, 0.7071); + } + + @Test + public void testNullGraphHits() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(5); + Graph graph = graphModel.getUndirectedGraph(); + + Hits hit = new Hits(); + + double[] authority = new double[5]; + double[] hubs = new double[5]; + + HashMap indices = hit.createIndicesMap(graph); + + hit.calculateHits(graph, hubs, authority, indices, false, EPSILON); + + Node n2 = graph.getNode("1"); + Node n3 = graph.getNode("2"); + int index2 = indices.get(n2); + int index3 = indices.get(n3); + double hub2 = hubs[index2]; + double auth3 = authority[index3]; + + assertEquals(hub2, 0.0); + assertEquals(auth3, 0.0); + } + + @Test + public void testCompleteGraphHits() { + GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(5); + Graph graph = graphModel.getUndirectedGraph(); + + Hits hit = new Hits(); + + double[] authority = new double[5]; + double[] hubs = new double[5]; + + HashMap indices = hit.createIndicesMap(graph); + + hit.calculateHits(graph, hubs, authority, indices, false, EPSILON); + + Node n1 = graph.getNode("0"); + Node n5 = graph.getNode("4"); + int index1 = indices.get(n1); + int index5 = indices.get(n5); + double hub1 = hubs[index1]; + double auth5 = authority[index5]; + + assertEquals(hub1, 0.4472); + assertEquals(auth5, 0.4472); + } + + @Test + public void testStarGraphHits() { + GraphModel graphModel = GraphGenerator.generateStarUndirectedGraph(5); + Graph graph = graphModel.getUndirectedGraph(); + + Hits hit = new Hits(); + + double[] authority = new double[6]; + double[] hubs = new double[6]; + + HashMap indices = hit.createIndicesMap(graph); + + hit.calculateHits(graph, hubs, authority, indices, false, EPSILON); + + Node n1 = graph.getNode("0"); + Node n3 = graph.getNode("2"); + Node n4 = graph.getNode("3"); + int index1 = indices.get(n1); + int index3 = indices.get(n3); + int index4 = indices.get(n4); + + double hub1 = hubs[index1]; + double hub3 = hubs[index3]; + double auth1 = authority[index1]; + double auth4 = authority[index4]; + + assertEquals(hub1, 0.4082); + assertEquals(auth1, 0.9128); + assertEquals(auth4, 0.1825); + + assertEquals(hub1, hub3); + } + + @Test + public void testGraphWithSelfLoopsHits() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + + Edge edge12 = graphModel.factory().newEdge(node1, node2, false); + Edge edge23 = graphModel.factory().newEdge(node2, node3, false); + Edge edge11 = graphModel.factory().newEdge(node1, node1, false); + Edge edge33 = graphModel.factory().newEdge(node3, node3, false); + + undirectedGraph.addEdge(edge12); + undirectedGraph.addEdge(edge23); + undirectedGraph.addEdge(edge11); + undirectedGraph.addEdge(edge33); + + Graph graph = graphModel.getUndirectedGraph(); + + Hits hit = new Hits(); + + HashMap indices = hit.createIndicesMap(graph); + + double[] authority = new double[3]; + double[] hubs = new double[3]; + + hit.calculateHits(graph, hubs, authority, indices, false, EPSILON); + + Node n1 = graph.getNode("0"); + Node n2 = graph.getNode("1"); + int index1 = indices.get(n1); + int index2 = indices.get(n2); + + double auth1 = authority[index1]; + double auth2 = authority[index2]; + + assertTrue(auth2 > auth1); + } + + @Test + public void testDirectedSpecial1GraphHits() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + + directedGraph.addNode(node1); + directedGraph.addNode(node2); + directedGraph.addNode(node3); + directedGraph.addNode(node4); + directedGraph.addNode(node5); + + Edge edge14 = graphModel.factory().newEdge(node1, node4); + Edge edge15 = graphModel.factory().newEdge(node1, node5); + Edge edge24 = graphModel.factory().newEdge(node2, node4); + Edge edge25 = graphModel.factory().newEdge(node2, node5); + Edge edge34 = graphModel.factory().newEdge(node3, node4); + Edge edge35 = graphModel.factory().newEdge(node3, node5); + + directedGraph.addEdge(edge14); + directedGraph.addEdge(edge15); + directedGraph.addEdge(edge24); + directedGraph.addEdge(edge25); + directedGraph.addEdge(edge34); + directedGraph.addEdge(edge35); + + DirectedGraph graph = graphModel.getDirectedGraph(); + Hits hit = new Hits(); + + double[] authority = new double[5]; + double[] hubs = new double[5]; + + HashMap indices = hit.createIndicesMap(graph); + + hit.calculateHits(graph, hubs, authority, indices, true, EPSILON); + + Node n1 = graph.getNode("0"); + Node n2 = graph.getNode("1"); + Node n4 = graph.getNode("3"); + Node n5 = graph.getNode("4"); + + int index1 = indices.get(n1); + int index2 = indices.get(n2); + int index4 = indices.get(n4); + int index5 = indices.get(n5); + + double hub1 = hubs[index1]; + double hub4 = hubs[index4]; + double auth2 = authority[index2]; + double auth5 = authority[index5]; + + assertEquals(hub1, 0.5773); + assertEquals(hub4, 0.0); + assertEquals(auth2, 0.0); + assertEquals(auth5, 0.7071); + } + + @Test + public void testDirectedStarOutGraphHits() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + Node firstNode = graphModel.factory().newNode("0"); + directedGraph.addNode(firstNode); + for (int i = 1; i <= 5; i++) { + Node currentNode = graphModel.factory().newNode(((Integer) i).toString()); + directedGraph.addNode(currentNode); + Edge currentEdge = graphModel.factory().newEdge(firstNode, currentNode); + directedGraph.addEdge(currentEdge); + } + + DirectedGraph graph = graphModel.getDirectedGraph(); + + Hits hit = new Hits(); + + double[] authority = new double[6]; + double[] hubs = new double[6]; + + HashMap indices = hit.createIndicesMap(graph); + + hit.calculateHits(graph, hubs, authority, indices, true, EPSILON); + + Node n1 = graph.getNode("0"); + Node n3 = graph.getNode("2"); + + int index1 = indices.get(n1); + int index3 = indices.get(n3); + + double hub1 = hubs[index1]; + double hub3 = hubs[index3]; + double auth1 = authority[index1]; + double auth3 = authority[index3]; + + assertEquals(hub1, 1.0); + assertEquals(auth1, 0.0); + assertEquals(hub3, 0.0); + assertEquals(auth3, 0.4472); + } + + @Test + public void testDirectedSpecial2GraphHits() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + Node node6 = graphModel.factory().newNode("5"); + + directedGraph.addNode(node1); + directedGraph.addNode(node2); + directedGraph.addNode(node3); + directedGraph.addNode(node4); + directedGraph.addNode(node5); + directedGraph.addNode(node6); + + Edge edge21 = graphModel.factory().newEdge(node2, node1); + Edge edge31 = graphModel.factory().newEdge(node3, node1); + Edge edge41 = graphModel.factory().newEdge(node4, node1); + Edge edge51 = graphModel.factory().newEdge(node5, node1); + Edge edge36 = graphModel.factory().newEdge(node3, node6); + Edge edge46 = graphModel.factory().newEdge(node4, node6); + Edge edge56 = graphModel.factory().newEdge(node5, node6); + + directedGraph.addEdge(edge21); + directedGraph.addEdge(edge31); + directedGraph.addEdge(edge41); + directedGraph.addEdge(edge51); + directedGraph.addEdge(edge36); + directedGraph.addEdge(edge46); + directedGraph.addEdge(edge56); + + DirectedGraph graph = graphModel.getDirectedGraph(); + Hits hit = new Hits(); + + double[] authority = new double[6]; + double[] hubs = new double[6]; + + HashMap indices = hit.createIndicesMap(graph); + + hit.calculateHits(graph, hubs, authority, indices, true, EPSILON); + + int index1 = indices.get(node1); + int index2 = indices.get(node2); + int index3 = indices.get(node3); + int index5 = indices.get(node5); + int index6 = indices.get(node6); + + double hub2 = hubs[index2]; + double hub3 = hubs[index3]; + double hub5 = hubs[index5]; + double hub6 = hubs[index6]; + double auth1 = authority[index1]; + double auth3 = authority[index3]; + double auth6 = authority[index6]; + + assertEquals(hub3, hub5); + assertTrue(hub3 > hub2); + assertTrue(auth1 > auth6); + assertEquals(hub6, 0.0); + assertEquals(auth3, 0.0); + } + + @Test + public void testDirectedSpecial3GraphHits() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + Node node6 = graphModel.factory().newNode("5"); + + directedGraph.addNode(node1); + directedGraph.addNode(node2); + directedGraph.addNode(node3); + directedGraph.addNode(node4); + directedGraph.addNode(node5); + directedGraph.addNode(node6); + + Edge edge15 = graphModel.factory().newEdge(node1, node5); + Edge edge25 = graphModel.factory().newEdge(node2, node5); + Edge edge35 = graphModel.factory().newEdge(node3, node5); + Edge edge45 = graphModel.factory().newEdge(node4, node5); + Edge edge56 = graphModel.factory().newEdge(node5, node6); + + directedGraph.addEdge(edge15); + directedGraph.addEdge(edge25); + directedGraph.addEdge(edge35); + directedGraph.addEdge(edge45); + directedGraph.addEdge(edge56); + + DirectedGraph graph = graphModel.getDirectedGraph(); + Hits hit = new Hits(); + + double[] authority = new double[6]; + double[] hubs = new double[6]; + + HashMap indices = hit.createIndicesMap(graph); + + hit.calculateHits(graph, hubs, authority, indices, true, EPSILON); + + int index1 = indices.get(node1); + int index3 = indices.get(node3); + int index5 = indices.get(node5); + int index6 = indices.get(node6); + + double hub1 = hubs[index1]; + double hub3 = hubs[index3]; + double hub5 = hubs[index5]; + double auth5 = authority[index5]; + double auth6 = authority[index6]; + + assertEquals(hub1, hub3); + assertTrue(hub1 > hub5); + assertTrue(auth5 > auth6); + } + + @Test + public void testExampleDirectedGraph() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + + directedGraph.addNode(node1); + directedGraph.addNode(node2); + directedGraph.addNode(node3); + directedGraph.addNode(node4); + + Edge edge12 = graphModel.factory().newEdge(node1, node2); + Edge edge13 = graphModel.factory().newEdge(node1, node3); + Edge edge14 = graphModel.factory().newEdge(node1, node4); + + Edge edge23 = graphModel.factory().newEdge(node2, node3); + Edge edge24 = graphModel.factory().newEdge(node2, node4); + + Edge edge32 = graphModel.factory().newEdge(node3, node2); + + directedGraph.addEdge(edge12); + directedGraph.addEdge(edge13); + directedGraph.addEdge(edge14); + directedGraph.addEdge(edge23); + directedGraph.addEdge(edge24); + directedGraph.addEdge(edge32); + + DirectedGraph graph = graphModel.getDirectedGraph(); + Hits hit = new Hits(); + + double[] authority = new double[4]; + double[] hubs = new double[4]; + + HashMap indices = hit.createIndicesMap(graph); + + hit.calculateHits(graph, hubs, authority, indices, true, EPSILON); + + int index1 = indices.get(node1); + int index2 = indices.get(node2); + int index3 = indices.get(node3); + int index4 = indices.get(node4); + + assertEquals(hubs[index1], 0.7887); + assertEquals(hubs[index2], 0.5774); + assertEquals(hubs[index3], 0.2113); + assertEquals(hubs[index4], 0); + + assertEquals(authority[index1], 0); + assertEquals(authority[index2], 0.4597); + assertEquals(authority[index3], 0.6280); + assertEquals(authority[index4], 0.6280); + } + + @Test + public void testColumnCreation() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + + Hits h = new Hits(); + h.execute(graphModel); + + Assert.assertTrue(graphModel.getNodeTable().hasColumn(Hits.HUB)); + Assert.assertEquals(Double.class, graphModel.getNodeTable().getColumn(Hits.HUB).getTypeClass()); + Assert.assertEquals(Double.class, graphModel.getNodeTable().getColumn(Hits.AUTHORITY).getTypeClass()); + } + + @Test + public void testColumnReplace() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + + graphModel.getNodeTable().addColumn(Hits.HUB, String.class); + + Hits h = new Hits(); + h.execute(graphModel); + + Assert.assertEquals(Double.class, graphModel.getNodeTable().getColumn(Hits.HUB).getTypeClass()); + } + + private void assertEquals(double a, double b) { + Assert.assertEquals(a, b, EPSILON); + } +} diff --git a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/ModularityNGTest.java b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/ModularityNGTest.java deleted file mode 100644 index f4522478e8..0000000000 --- a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/ModularityNGTest.java +++ /dev/null @@ -1,254 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package org.gephi.statistics.plugin; - -import java.util.HashMap; -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.GraphModel; -import org.gephi.graph.api.Node; -import org.gephi.graph.api.UndirectedGraph; -import org.gephi.project.api.ProjectController; -import org.gephi.project.impl.ProjectControllerImpl; -import org.openide.util.Lookup; -import static org.testng.Assert.*; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -/** - * - * @author Anna - */ -public class ModularityNGTest { - - private ProjectController pc; - - @BeforeClass - public void setUp() { - pc = Lookup.getDefault().lookup(ProjectControllerImpl.class); - } - - @BeforeMethod - public void initialize() { - pc.newProject(); - } - - @AfterMethod - public void clean() { - pc.closeCurrentProject(); - } - - @Test - public void testTwoConnectedNodesModularity() { - GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(2); - UndirectedGraph hgraph = graphModel.getUndirectedGraph(); - - Modularity mod = new Modularity(); - - Modularity.CommunityStructure theStructure = mod.new CommunityStructure(hgraph); - int[] comStructure = new int[hgraph.getNodeCount()]; - - HashMap modularityValues = mod.computeModularity(hgraph, theStructure, comStructure, - 1., true, false); - - double modValue = modularityValues.get("modularity"); - int class1 = comStructure[0]; - int class2 = comStructure[1]; - - assertEquals(modValue, 0.0); - assertEquals(class1, class2); - } - - @Test - public void testGraphWithouLinksModularity() { - GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(5); - UndirectedGraph hgraph = graphModel.getUndirectedGraph(); - - Modularity mod = new Modularity(); - - Modularity.CommunityStructure theStructure = mod.new CommunityStructure(hgraph); - int[] comStructure = new int[hgraph.getNodeCount()]; - - HashMap modularityValues = mod.computeModularity(hgraph, theStructure, comStructure, - 1., true, false); - - double modValue = modularityValues.get("modularity"); - - assertEquals(modValue, Double.NaN); - } - - @Test - public void testComputeBarbellGraphModularityNormalResolution() { - GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(4); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - Node[] nodes = new Node[4]; - for (int i = 0; i < 4; i++) { - Node currentNode = graphModel.factory().newNode(((Integer) (i + 4)).toString()); - nodes[i] = currentNode; - undirectedGraph.addNode(currentNode); - } - for (int i = 0; i < 3; i++) { - for (int j = i + 1; j < 4; j++) { - Edge currentEdge = graphModel.factory().newEdge(nodes[i], nodes[j], false); - undirectedGraph.addEdge(currentEdge); - } - } - Edge currentEdge = graphModel.factory().newEdge(undirectedGraph.getNode("0"), undirectedGraph.getNode("5"), false); - undirectedGraph.addEdge(currentEdge); - UndirectedGraph graph = graphModel.getUndirectedGraph(); - - Modularity mod = new Modularity(); - - Modularity.CommunityStructure theStructure = mod.new CommunityStructure(graph); - int[] comStructure = new int[graph.getNodeCount()]; - - HashMap modularityValues = mod.computeModularity(graph, theStructure, comStructure, - 1., true, false); - - double modValue = modularityValues.get("modularity"); - - int class4 = comStructure[0]; - int class5 = comStructure[5]; - - boolean correctResult = (class4 != class5 || modValue == 0.); - - assertTrue(correctResult); - } - - @Test - public void testComputeBarbellGraphHighResolution() { - GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(4); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - Node[] nodes = new Node[4]; - for (int i = 0; i < 4; i++) { - Node currentNode = graphModel.factory().newNode(((Integer) (i + 4)).toString()); - nodes[i] = currentNode; - undirectedGraph.addNode(currentNode); - } - for (int i = 0; i < 3; i++) { - for (int j = i + 1; j < 4; j++) { - Edge currentEdge = graphModel.factory().newEdge(nodes[i], nodes[j], false); - undirectedGraph.addEdge(currentEdge); - } - } - Edge currentEdge = graphModel.factory().newEdge(undirectedGraph.getNode("0"), undirectedGraph.getNode("5"), false); - undirectedGraph.addEdge(currentEdge); - UndirectedGraph graph = graphModel.getUndirectedGraph(); - - Modularity mod = new Modularity(); - - Modularity.CommunityStructure theStructure = mod.new CommunityStructure(graph); - int[] comStructure = new int[graph.getNodeCount()]; - - HashMap modularityValues = mod.computeModularity(graph, theStructure, comStructure, - 100., true, false); - - double modValue = modularityValues.get("modularity"); - - int class4 = comStructure[0]; - int class5 = comStructure[5]; - - assertEquals(modValue, 0.0); - assertEquals(class4, class5); - } - - @Test - public void testComputeBarbellGraphModularityHasHighWeight() { - GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(4); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - Node[] nodes = new Node[4]; - for (int i = 0; i < 4; i++) { - Node currentNode = graphModel.factory().newNode(((Integer) (i + 4)).toString()); - nodes[i] = currentNode; - undirectedGraph.addNode(currentNode); - } - for (int i = 0; i < 3; i++) { - for (int j = i + 1; j < 4; j++) { - Edge currentEdge = graphModel.factory().newEdge(nodes[i], nodes[j], false); - undirectedGraph.addEdge(currentEdge); - } - } - Edge currentEdge = graphModel.factory().newEdge(undirectedGraph.getNode("0"), undirectedGraph.getNode("5"), 0, 100.f, false); - undirectedGraph.addEdge(currentEdge); - UndirectedGraph graph = graphModel.getUndirectedGraph(); - - Modularity mod = new Modularity(); - - Modularity.CommunityStructure theStructure = mod.new CommunityStructure(graph); - int[] comStructure = new int[graph.getNodeCount()]; - - HashMap modularityValues = mod.computeModularity(graph, theStructure, comStructure, - 1., true, true); - - int class4 = comStructure[0]; - int class5 = comStructure[5]; - - assertEquals(class4, class5); - } - - @Test - public void testCyclicWithWeightsGraphModularity() { - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - Node node6 = graphModel.factory().newNode("5"); - Node node7 = graphModel.factory().newNode("6"); - Node node8 = graphModel.factory().newNode("7"); - - undirectedGraph.addNode(node1); - undirectedGraph.addNode(node2); - undirectedGraph.addNode(node3); - undirectedGraph.addNode(node4); - undirectedGraph.addNode(node5); - undirectedGraph.addNode(node6); - undirectedGraph.addNode(node7); - undirectedGraph.addNode(node8); - - Edge edge12 = graphModel.factory().newEdge(node1, node2, 0, 10.f, false); - Edge edge23 = graphModel.factory().newEdge(node2, node3, false); - Edge edge34 = graphModel.factory().newEdge(node3, node4, 0, 10.f, false); - Edge edge45 = graphModel.factory().newEdge(node4, node5, false); - Edge edge56 = graphModel.factory().newEdge(node5, node6, 0, 10.f, false); - Edge edge67 = graphModel.factory().newEdge(node6, node7, false); - Edge edge78 = graphModel.factory().newEdge(node7, node8, 0, 10.f, false); - Edge edge81 = graphModel.factory().newEdge(node8, node1, false); - - undirectedGraph.addEdge(edge12); - undirectedGraph.addEdge(edge23); - undirectedGraph.addEdge(edge34); - undirectedGraph.addEdge(edge45); - undirectedGraph.addEdge(edge56); - undirectedGraph.addEdge(edge67); - undirectedGraph.addEdge(edge78); - undirectedGraph.addEdge(edge81); - - UndirectedGraph hgraph = graphModel.getUndirectedGraph(); - Modularity mod = new Modularity(); - - Modularity.CommunityStructure theStructure = mod.new CommunityStructure(hgraph); - int[] comStructure = new int[hgraph.getNodeCount()]; - - HashMap modularityValues = mod.computeModularity(hgraph, theStructure, comStructure, - 1., true, true); - - int class1 = comStructure[0]; - int class2 = comStructure[1]; - int class4 = comStructure[3]; - int class5 = comStructure[4]; - int class7 = comStructure[6]; - int class8 = comStructure[7]; - - assertEquals(class1, class2); - assertEquals(class7, class8); - assertNotEquals(class4, class5); - } -} diff --git a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/ModularityTest.java b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/ModularityTest.java new file mode 100644 index 0000000000..dad1c5e664 --- /dev/null +++ b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/ModularityTest.java @@ -0,0 +1,302 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.statistics.plugin; + +import java.util.HashMap; +import junit.framework.TestCase; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.UndirectedGraph; +import org.junit.Assert; +import org.junit.Test; + +/** + * @author Anna + */ +public class ModularityTest extends TestCase { + + @Test + public void testTwoConnectedNodesModularity() { + GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(2); + UndirectedGraph graph = graphModel.getUndirectedGraph(); + + Modularity mod = new Modularity(); + + Modularity.CommunityStructure theStructure = mod.new CommunityStructure(graph); + int[] comStructure = new int[graph.getNodeCount()]; + + HashMap modularityValues = mod.computeModularity(graph, theStructure, comStructure, + 1., true, false); + + double modValue = modularityValues.get("modularity"); + int class1 = comStructure[0]; + int class2 = comStructure[1]; + + assertEquals(modValue, 0.0); + assertEquals(class1, class2); + } + + @Test + public void testGraphWithouLinksModularity() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(5); + UndirectedGraph graph = graphModel.getUndirectedGraph(); + + Modularity mod = new Modularity(); + + Modularity.CommunityStructure theStructure = mod.new CommunityStructure(graph); + int[] comStructure = new int[graph.getNodeCount()]; + + HashMap modularityValues = mod.computeModularity(graph, theStructure, comStructure, + 1., true, false); + + double modValue = modularityValues.get("modularity"); + + assertEquals(modValue, Double.NaN); + } + + @Test + public void testComputeBarbellGraphModularityNormalResolution() { + GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(4); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node[] nodes = new Node[4]; + for (int i = 0; i < 4; i++) { + Node currentNode = graphModel.factory().newNode(((Integer) (i + 4)).toString()); + nodes[i] = currentNode; + undirectedGraph.addNode(currentNode); + } + for (int i = 0; i < 3; i++) { + for (int j = i + 1; j < 4; j++) { + Edge currentEdge = graphModel.factory().newEdge(nodes[i], nodes[j], false); + undirectedGraph.addEdge(currentEdge); + } + } + Edge currentEdge = + graphModel.factory().newEdge(undirectedGraph.getNode("0"), undirectedGraph.getNode("5"), false); + undirectedGraph.addEdge(currentEdge); + UndirectedGraph graph = graphModel.getUndirectedGraph(); + + Modularity mod = new Modularity(); + + Modularity.CommunityStructure theStructure = mod.new CommunityStructure(graph); + int[] comStructure = new int[graph.getNodeCount()]; + + HashMap modularityValues = mod.computeModularity(graph, theStructure, comStructure, + 1., true, false); + + double modValue = modularityValues.get("modularity"); + + int class4 = comStructure[0]; + int class5 = comStructure[5]; + + boolean correctResult = (class4 != class5 || modValue == 0.); + + assertTrue(correctResult); + } + + @Test + public void testComputeBarbellGraphHighResolution() { + GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(4); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node[] nodes = new Node[4]; + for (int i = 0; i < 4; i++) { + Node currentNode = graphModel.factory().newNode(((Integer) (i + 4)).toString()); + nodes[i] = currentNode; + undirectedGraph.addNode(currentNode); + } + for (int i = 0; i < 3; i++) { + for (int j = i + 1; j < 4; j++) { + Edge currentEdge = graphModel.factory().newEdge(nodes[i], nodes[j], false); + undirectedGraph.addEdge(currentEdge); + } + } + Edge currentEdge = + graphModel.factory().newEdge(undirectedGraph.getNode("0"), undirectedGraph.getNode("5"), false); + undirectedGraph.addEdge(currentEdge); + UndirectedGraph graph = graphModel.getUndirectedGraph(); + + Modularity mod = new Modularity(); + + Modularity.CommunityStructure theStructure = mod.new CommunityStructure(graph); + int[] comStructure = new int[graph.getNodeCount()]; + + HashMap modularityValues = mod.computeModularity(graph, theStructure, comStructure, + 100., true, false); + + double modValue = modularityValues.get("modularity"); + + int class4 = comStructure[0]; + int class5 = comStructure[5]; + + assertEquals(modValue, 0.0); + assertEquals(class4, class5); + } + + @Test + public void testComputeBarbellGraphModularityHasHighWeight() { + GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(4); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node[] nodes = new Node[4]; + for (int i = 0; i < 4; i++) { + Node currentNode = graphModel.factory().newNode(((Integer) (i + 4)).toString()); + nodes[i] = currentNode; + undirectedGraph.addNode(currentNode); + } + for (int i = 0; i < 3; i++) { + for (int j = i + 1; j < 4; j++) { + Edge currentEdge = graphModel.factory().newEdge(nodes[i], nodes[j], false); + undirectedGraph.addEdge(currentEdge); + } + } + Edge currentEdge = + graphModel.factory().newEdge(undirectedGraph.getNode("0"), undirectedGraph.getNode("5"), 0, 100.f, false); + undirectedGraph.addEdge(currentEdge); + UndirectedGraph graph = graphModel.getUndirectedGraph(); + + Modularity mod = new Modularity(); + + Modularity.CommunityStructure theStructure = mod.new CommunityStructure(graph); + int[] comStructure = new int[graph.getNodeCount()]; + + HashMap modularityValues = mod.computeModularity(graph, theStructure, comStructure, + 1., true, true); + + int class4 = comStructure[0]; + int class5 = comStructure[5]; + + assertEquals(class4, class5); + } + + @Test + public void testCyclicWithWeightsGraphModularity() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + Node node6 = graphModel.factory().newNode("5"); + Node node7 = graphModel.factory().newNode("6"); + Node node8 = graphModel.factory().newNode("7"); + + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + undirectedGraph.addNode(node4); + undirectedGraph.addNode(node5); + undirectedGraph.addNode(node6); + undirectedGraph.addNode(node7); + undirectedGraph.addNode(node8); + + //Test 3 parallel edges summing weight = 10 + //Related issues ==> #1419 Getting null pointer error when trying to calculate modularity; #1526 NullPointerException on Modularity Statistics with gexf with kind / parallel nodes + Edge edge12_1 = graphModel.factory().newEdge(node1, node2, 1, 2.f, false); + Edge edge12_2 = graphModel.factory().newEdge(node1, node2, 2, 5.f, false); + Edge edge12_3 = graphModel.factory().newEdge(node1, node2, 2, 3.f, false); + + Edge edge23 = graphModel.factory().newEdge(node2, node3, false); + Edge edge34 = graphModel.factory().newEdge(node3, node4, 0, 10.f, false); + Edge edge45 = graphModel.factory().newEdge(node4, node5, false); + Edge edge56 = graphModel.factory().newEdge(node5, node6, 0, 10.f, false); + Edge edge67 = graphModel.factory().newEdge(node6, node7, false); + + //Test 2 parallel edges summing weight = 10 + Edge edge78_1 = graphModel.factory().newEdge(node7, node8, 0, 5.f, false); + Edge edge78_2 = graphModel.factory().newEdge(node7, node8, 0, 5.f, false); + Edge edge81 = graphModel.factory().newEdge(node8, node1, false); + + undirectedGraph.addEdge(edge12_1); + undirectedGraph.addEdge(edge12_2); + undirectedGraph.addEdge(edge12_3); + undirectedGraph.addEdge(edge23); + undirectedGraph.addEdge(edge34); + undirectedGraph.addEdge(edge45); + undirectedGraph.addEdge(edge56); + undirectedGraph.addEdge(edge67); + undirectedGraph.addEdge(edge78_1); + undirectedGraph.addEdge(edge78_2); + undirectedGraph.addEdge(edge81); + + UndirectedGraph graph = graphModel.getUndirectedGraph(); + Modularity mod = new Modularity(); + + Modularity.CommunityStructure theStructure = mod.new CommunityStructure(graph); + int[] comStructure = new int[graph.getNodeCount()]; + + HashMap modularityValues = mod.computeModularity(graph, theStructure, comStructure, + 1., true, true); + + int class1 = comStructure[0]; + int class2 = comStructure[1]; + int class4 = comStructure[3]; + int class5 = comStructure[4]; + int class7 = comStructure[6]; + int class8 = comStructure[7]; + + assertEquals(class1, class2); + assertEquals(class7, class8); + Assert.assertNotEquals(class4, class5); + } + + @Test + public void testColumnCreation() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + + Modularity h = new Modularity(); + h.execute(graphModel); + + Assert.assertTrue(graphModel.getNodeTable().hasColumn(Modularity.MODULARITY_CLASS)); + } + + @Test + public void testColumnReplace() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + + graphModel.getNodeTable().addColumn(Modularity.MODULARITY_CLASS, String.class); + + Modularity h = new Modularity(); + h.execute(graphModel); + } +} diff --git a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/PageRankNGTest.java b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/PageRankNGTest.java deleted file mode 100644 index 349665c1c2..0000000000 --- a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/PageRankNGTest.java +++ /dev/null @@ -1,450 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package org.gephi.statistics.plugin; - -import java.util.HashMap; -import org.gephi.graph.api.DirectedGraph; -import org.gephi.graph.api.UndirectedGraph; -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.GraphModel; -import org.gephi.graph.api.Node; -import org.gephi.project.api.ProjectController; -import org.gephi.project.impl.ProjectControllerImpl; -import org.openide.util.Lookup; -import static org.testng.Assert.*; -import org.testng.annotations.AfterMethod; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.BeforeMethod; -import org.testng.annotations.Test; - -/** - * - * @author Anna - */ -public class PageRankNGTest { - - private ProjectController pc; - - @BeforeClass - public void setUp() { - pc = Lookup.getDefault().lookup(ProjectControllerImpl.class); - } - - @BeforeMethod - public void initialize() { - pc.newProject(); - } - - @AfterMethod - public void clean() { - pc.closeCurrentProject(); - } - - @Test - public void testOneNodePageRank() { - pc.newProject(); - GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); - UndirectedGraph hgraph = graphModel.getUndirectedGraph(); - - PageRank pr = new PageRank(); - - double[] pageRank; - - HashMap indicies = pr.createIndiciesMap(hgraph); - - pageRank = pr.calculatePagerank(hgraph, indicies, false, false, 0.001, 0.85); - - Node n1 = hgraph.getNode("0"); - int index = indicies.get(n1); - double pr1 = pageRank[index]; - - assertEquals(pr1, 1.0); - } - - @Test - public void testTwoConnectedNodesPageRank() { - pc.newProject(); - GraphModel graphModel = GraphGenerator.generatePathUndirectedGraph(2); - UndirectedGraph hgraph = graphModel.getUndirectedGraph(); - - PageRank pr = new PageRank(); - - double[] pageRank; - - HashMap indicies = pr.createIndiciesMap(hgraph); - - pageRank = pr.calculatePagerank(hgraph, indicies, false, false, 0.001, 0.85); - - Node n2 = hgraph.getNode("1"); - int index = indicies.get(n2); - double pr2 = pageRank[index]; - - assertEquals(pr2, 0.5); - } - - @Test - public void testNullGraphPageRank() { - pc.newProject(); - GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(5); - UndirectedGraph hgraph = graphModel.getUndirectedGraph(); - - PageRank pr = new PageRank(); - - double[] pageRank; - - HashMap indicies = pr.createIndiciesMap(hgraph); - - pageRank = pr.calculatePagerank(hgraph, indicies, false, false, 0.001, 0.85); - - Node n1 = hgraph.getNode("0"); - Node n4 = hgraph.getNode("3"); - int index1 = indicies.get(n1); - int index4 = indicies.get(n4); - double pr1 = pageRank[index1]; - double pr4 = pageRank[index4]; - double res = 0.2d; - - double diff1 = Math.abs(pr1 - res); - double diff4 = Math.abs(pr4 - res); - assertTrue(diff1 < 0.01); - assertTrue(diff4 < 0.01); - assertEquals(pr1, pr4); - } - - @Test - public void testCompleteGraphPageRank() { - pc.newProject(); - GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(5); - UndirectedGraph hgraph = graphModel.getUndirectedGraph(); - - PageRank pr = new PageRank(); - - double[] pageRank; - - HashMap indicies = pr.createIndiciesMap(hgraph); - - pageRank = pr.calculatePagerank(hgraph, indicies, false, false, 0.001, 0.85); - - Node n2 = hgraph.getNode("2"); - int index2 = indicies.get(n2); - double pr2 = pageRank[index2]; - double res = 0.2d; - - double diff2 = Math.abs(pr2 - res); - assertTrue(diff2 < 0.01); - } - - @Test - public void testCyclicGraphPageRank() { - pc.newProject(); - GraphModel graphModel = GraphGenerator.generateCyclicUndirectedGraph(6); - UndirectedGraph hgraph = graphModel.getUndirectedGraph(); - - PageRank pr = new PageRank(); - - double[] pageRank; - - HashMap indicies = pr.createIndiciesMap(hgraph); - - pageRank = pr.calculatePagerank(hgraph, indicies, false, false, 0.001, 0.6); - - Node n4 = hgraph.getNode("3"); - int index4 = indicies.get(n4); - double pr4 = pageRank[index4]; - double res = 0.1667; - - double diff4 = Math.abs(pr4 - res); - assertTrue(diff4 < 0.01); - } - - @Test - public void testStarGraphPageRank() { - pc.newProject(); - GraphModel graphModel = GraphGenerator.generateStarUndirectedGraph(5); - UndirectedGraph hgraph = graphModel.getUndirectedGraph(); - - PageRank pr = new PageRank(); - - double[] pageRank; - - HashMap indicies = pr.createIndiciesMap(hgraph); - - pageRank = pr.calculatePagerank(hgraph, indicies, false, false, 0.001, 0.6); - - Node n1 = hgraph.getNode("0"); - Node n2 = hgraph.getNode("1"); - Node n3 = hgraph.getNode("2"); - Node n4 = hgraph.getNode("3"); - Node n5 = hgraph.getNode("4"); - Node n6 = hgraph.getNode("5"); - - int index1 = indicies.get(n1); - int index2 = indicies.get(n2); - int index3 = indicies.get(n3); - int index4 = indicies.get(n4); - int index5 = indicies.get(n5); - int index6 = indicies.get(n6); - - double pr1 = pageRank[index1]; - double pr2 = pageRank[index2]; - double pr3 = pageRank[index3]; - double pr4 = pageRank[index4]; - double pr5 = pageRank[index5]; - double pr6 = pageRank[index6]; - - boolean oneMoreThree = pr1 > pr3; - double res = 1.; - double diff = 0.01; - double sum = pr1 + pr2 + pr3 + pr4 + pr5 + pr6; - - assertTrue(oneMoreThree); - assertEquals(pr2, pr4); - assertTrue(Math.abs(sum - res) < diff); - } - - @Test - public void testPathDirectedGraphPageRank() { - pc.newProject(); - GraphModel graphModel = GraphGenerator.generatePathDirectedGraph(4); - DirectedGraph hgraph = graphModel.getDirectedGraph(); - - PageRank pr = new PageRank(); - - double[] pageRank; - - HashMap indicies = pr.createIndiciesMap(hgraph); - - pageRank = pr.calculatePagerank(hgraph, indicies, true, false, 0.001, 0.85); - - Node n1 = hgraph.getNode("0"); - Node n2 = hgraph.getNode("1"); - Node n3 = hgraph.getNode("2"); - Node n4 = hgraph.getNode("3"); - - int index1 = indicies.get(n1); - int index2 = indicies.get(n2); - int index3 = indicies.get(n3); - int index4 = indicies.get(n4); - - double pr1 = pageRank[index1]; - double pr2 = pageRank[index2]; - double pr3 = pageRank[index3]; - double pr4 = pageRank[index4]; - - double res = 1.; - double diff = 0.01; - double sum = pr1 + pr2 + pr3 + pr4; - - assertTrue(pr1 < pr2); - assertTrue(pr2 < pr4); - assertTrue(Math.abs(sum - res) < diff); - } - - @Test - public void testCyclicDirectedGraphPageRank() { - pc.newProject(); - GraphModel graphModel = GraphGenerator.generateCyclicDirectedGraph(5); - DirectedGraph hgraph = graphModel.getDirectedGraph(); - - PageRank pr = new PageRank(); - - double[] pageRank; - - HashMap indicies = pr.createIndiciesMap(hgraph); - - pageRank = pr.calculatePagerank(hgraph, indicies, true, false, 0.001, 0.85); - - Node n3 = hgraph.getNode("2"); - - int index3 = indicies.get(n3); - - double pr3 = pageRank[index3]; - double res = 0.2d; - - double diff3 = Math.abs(pr3 - res); - assertTrue(diff3 < 0.01); - } - - @Test - public void testDirectedSpecial1GraphPageRank() { - pc.newProject(); - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - - DirectedGraph directedGraph = graphModel.getDirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - Node node6 = graphModel.factory().newNode("5"); - Node node7 = graphModel.factory().newNode("6"); - Node node8 = graphModel.factory().newNode("7"); - Node node9 = graphModel.factory().newNode("8"); - - directedGraph.addNode(node1); - directedGraph.addNode(node2); - directedGraph.addNode(node3); - directedGraph.addNode(node4); - directedGraph.addNode(node5); - directedGraph.addNode(node6); - directedGraph.addNode(node7); - directedGraph.addNode(node8); - directedGraph.addNode(node9); - - Edge edge12 = graphModel.factory().newEdge(node1, node2); - Edge edge23 = graphModel.factory().newEdge(node2, node3); - Edge edge31 = graphModel.factory().newEdge(node3, node1); - Edge edge14 = graphModel.factory().newEdge(node1, node4); - Edge edge45 = graphModel.factory().newEdge(node4, node5); - Edge edge51 = graphModel.factory().newEdge(node5, node1); - Edge edge16 = graphModel.factory().newEdge(node1, node6); - Edge edge67 = graphModel.factory().newEdge(node6, node7); - Edge edge71 = graphModel.factory().newEdge(node7, node1); - Edge edge18 = graphModel.factory().newEdge(node1, node8); - Edge edge89 = graphModel.factory().newEdge(node8, node9); - Edge edge91 = graphModel.factory().newEdge(node9, node1); - - directedGraph.addEdge(edge12); - directedGraph.addEdge(edge23); - directedGraph.addEdge(edge31); - directedGraph.addEdge(edge14); - directedGraph.addEdge(edge45); - directedGraph.addEdge(edge51); - directedGraph.addEdge(edge16); - directedGraph.addEdge(edge67); - directedGraph.addEdge(edge71); - directedGraph.addEdge(edge18); - directedGraph.addEdge(edge89); - directedGraph.addEdge(edge91); - - DirectedGraph hgraph = graphModel.getDirectedGraph(); - PageRank pr = new PageRank(); - - double[] pageRank; - - HashMap indicies = pr.createIndiciesMap(hgraph); - - pageRank = pr.calculatePagerank(hgraph, indicies, true, false, 0.001, 0.85); - - int index1 = indicies.get(node1); - int index2 = indicies.get(node2); - int index3 = indicies.get(node3); - - double pr1 = pageRank[index1]; - double pr2 = pageRank[index2]; - double pr3 = pageRank[index3]; - - assertTrue(pr1 > pr2); - assertTrue(pr2 < pr3); - } - - @Test - public void testDirectedStarOutGraphPageRank() { - pc.newProject(); - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - - DirectedGraph directedGraph = graphModel.getDirectedGraph(); - Node firstNode = graphModel.factory().newNode("0"); - directedGraph.addNode(firstNode); - for (int i = 1; i <= 5; i++) { - Node currentNode = graphModel.factory().newNode(((Integer) i).toString()); - directedGraph.addNode(currentNode); - Edge currentEdge = graphModel.factory().newEdge(firstNode, currentNode); - directedGraph.addEdge(currentEdge); - } - - DirectedGraph hgraph = graphModel.getDirectedGraph(); - PageRank pr = new PageRank(); - - double[] pageRank; - - HashMap indicies = pr.createIndiciesMap(hgraph); - - pageRank = pr.calculatePagerank(hgraph, indicies, true, false, 0.001, 0.85); - - Node n1 = hgraph.getNode("0"); - Node n2 = hgraph.getNode("1"); - Node n3 = hgraph.getNode("2"); - Node n5 = hgraph.getNode("4"); - - int index1 = indicies.get(n1); - int index2 = indicies.get(n2); - int index3 = indicies.get(n3); - int index5 = indicies.get(n5); - - double pr1 = pageRank[index1]; - double pr2 = pageRank[index2]; - double pr3 = pageRank[index3]; - double pr5 = pageRank[index5]; - - double res = 0.146; - double diff = 0.01; - - assertTrue(pr1 < pr3); - assertEquals(pr2, pr5); - assertTrue(Math.abs(pr1 - res) < diff); - } - - @Test - public void testUndirectedWeightedGraphPageRank() { - pc.newProject(); - GraphModel graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); - - UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); - Node node1 = graphModel.factory().newNode("0"); - Node node2 = graphModel.factory().newNode("1"); - Node node3 = graphModel.factory().newNode("2"); - Node node4 = graphModel.factory().newNode("3"); - Node node5 = graphModel.factory().newNode("4"); - Node node6 = graphModel.factory().newNode("5"); - - undirectedGraph.addNode(node1); - undirectedGraph.addNode(node2); - undirectedGraph.addNode(node3); - undirectedGraph.addNode(node4); - undirectedGraph.addNode(node5); - undirectedGraph.addNode(node6); - - Edge edge12 = graphModel.factory().newEdge(node1, node2, false); - Edge edge23 = graphModel.factory().newEdge(node2, node3, 0, 10, false); - Edge edge34 = graphModel.factory().newEdge(node3, node4, false); - Edge edge45 = graphModel.factory().newEdge(node4, node5, false); - Edge edge56 = graphModel.factory().newEdge(node5, node6, false); - Edge edge61 = graphModel.factory().newEdge(node6, node1, false); - - undirectedGraph.addEdge(edge12); - undirectedGraph.addEdge(edge23); - undirectedGraph.addEdge(edge34); - undirectedGraph.addEdge(edge45); - undirectedGraph.addEdge(edge56); - undirectedGraph.addEdge(edge61); - - UndirectedGraph hgraph = graphModel.getUndirectedGraph(); - PageRank pr = new PageRank(); - - double[] pageRank; - - HashMap indicies = pr.createIndiciesMap(hgraph); - - pageRank = pr.calculatePagerank(hgraph, indicies, false, true, 0.001, 0.85); - - int index1 = indicies.get(node1); - int index2 = indicies.get(node2); - int index3 = indicies.get(node3); - int index6 = indicies.get(node6); - - double diff = 0.01; - - double pr1 = pageRank[index1]; - double pr2 = pageRank[index2]; - double pr3 = pageRank[index3]; - double pr6 = pageRank[index6]; - - assertTrue(Math.abs(pr2 - pr3) < diff); - assertTrue(pr1 < pr2); - assertTrue(pr1 < pr6); - } -} diff --git a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/PageRankTest.java b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/PageRankTest.java new file mode 100644 index 0000000000..8bff0ef566 --- /dev/null +++ b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/PageRankTest.java @@ -0,0 +1,473 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.statistics.plugin; + +import java.util.HashMap; +import junit.framework.TestCase; +import org.gephi.graph.api.DirectedGraph; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.UndirectedGraph; +import org.junit.Assert; +import org.junit.Test; + +/** + * @author Anna + */ +public class PageRankTest extends TestCase { + + @Test + public void testOneNodePageRank() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + UndirectedGraph graph = graphModel.getUndirectedGraph(); + + PageRank pr = new PageRank(); + + double[] pageRank; + + HashMap indicies = pr.createIndiciesMap(graph); + + pageRank = pr.calculatePagerank(graph, indicies, false, false, 0.001, 0.85); + + Node n1 = graph.getNode("0"); + int index = indicies.get(n1); + double pr1 = pageRank[index]; + + assertEquals(pr1, 1.0); + } + + @Test + public void testTwoConnectedNodesPageRank() { + GraphModel graphModel = GraphGenerator.generatePathUndirectedGraph(2); + UndirectedGraph graph = graphModel.getUndirectedGraph(); + + PageRank pr = new PageRank(); + + double[] pageRank; + + HashMap indicies = pr.createIndiciesMap(graph); + + pageRank = pr.calculatePagerank(graph, indicies, false, false, 0.001, 0.85); + + Node n2 = graph.getNode("1"); + int index = indicies.get(n2); + double pr2 = pageRank[index]; + + assertEquals(pr2, 0.5); + } + + @Test + public void testNullGraphPageRank() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(5); + UndirectedGraph graph = graphModel.getUndirectedGraph(); + + PageRank pr = new PageRank(); + + double[] pageRank; + + HashMap indicies = pr.createIndiciesMap(graph); + + pageRank = pr.calculatePagerank(graph, indicies, false, false, 0.001, 0.85); + + Node n1 = graph.getNode("0"); + Node n4 = graph.getNode("3"); + int index1 = indicies.get(n1); + int index4 = indicies.get(n4); + double pr1 = pageRank[index1]; + double pr4 = pageRank[index4]; + double res = 0.2d; + + double diff1 = Math.abs(pr1 - res); + double diff4 = Math.abs(pr4 - res); + assertTrue(diff1 < 0.01); + assertTrue(diff4 < 0.01); + assertEquals(pr1, pr4); + } + + @Test + public void testCompleteGraphPageRank() { + GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(5); + UndirectedGraph graph = graphModel.getUndirectedGraph(); + + PageRank pr = new PageRank(); + + double[] pageRank; + + HashMap indicies = pr.createIndiciesMap(graph); + + pageRank = pr.calculatePagerank(graph, indicies, false, false, 0.001, 0.85); + + Node n2 = graph.getNode("2"); + int index2 = indicies.get(n2); + double pr2 = pageRank[index2]; + double res = 0.2d; + + double diff2 = Math.abs(pr2 - res); + assertTrue(diff2 < 0.01); + } + + @Test + public void testCyclicGraphPageRank() { + GraphModel graphModel = GraphGenerator.generateCyclicUndirectedGraph(6); + UndirectedGraph graph = graphModel.getUndirectedGraph(); + + PageRank pr = new PageRank(); + + double[] pageRank; + + HashMap indicies = pr.createIndiciesMap(graph); + + pageRank = pr.calculatePagerank(graph, indicies, false, false, 0.001, 0.6); + + Node n4 = graph.getNode("3"); + int index4 = indicies.get(n4); + double pr4 = pageRank[index4]; + double res = 0.1667; + + double diff4 = Math.abs(pr4 - res); + assertTrue(diff4 < 0.01); + } + + @Test + public void testStarGraphPageRank() { + GraphModel graphModel = GraphGenerator.generateStarUndirectedGraph(5); + UndirectedGraph graph = graphModel.getUndirectedGraph(); + + PageRank pr = new PageRank(); + + double[] pageRank; + + HashMap indicies = pr.createIndiciesMap(graph); + + pageRank = pr.calculatePagerank(graph, indicies, false, false, 0.001, 0.6); + + Node n1 = graph.getNode("0"); + Node n2 = graph.getNode("1"); + Node n3 = graph.getNode("2"); + Node n4 = graph.getNode("3"); + Node n5 = graph.getNode("4"); + Node n6 = graph.getNode("5"); + + int index1 = indicies.get(n1); + int index2 = indicies.get(n2); + int index3 = indicies.get(n3); + int index4 = indicies.get(n4); + int index5 = indicies.get(n5); + int index6 = indicies.get(n6); + + double pr1 = pageRank[index1]; + double pr2 = pageRank[index2]; + double pr3 = pageRank[index3]; + double pr4 = pageRank[index4]; + double pr5 = pageRank[index5]; + double pr6 = pageRank[index6]; + + boolean oneMoreThree = pr1 > pr3; + double res = 1.; + double diff = 0.01; + double sum = pr1 + pr2 + pr3 + pr4 + pr5 + pr6; + + assertTrue(oneMoreThree); + assertEquals(pr2, pr4); + assertTrue(Math.abs(sum - res) < diff); + } + + @Test + public void testPathDirectedGraphPageRank() { + GraphModel graphModel = GraphGenerator.generatePathDirectedGraph(4); + DirectedGraph graph = graphModel.getDirectedGraph(); + + PageRank pr = new PageRank(); + + double[] pageRank; + + HashMap indicies = pr.createIndiciesMap(graph); + + pageRank = pr.calculatePagerank(graph, indicies, true, false, 0.001, 0.85); + + Node n1 = graph.getNode("0"); + Node n2 = graph.getNode("1"); + Node n3 = graph.getNode("2"); + Node n4 = graph.getNode("3"); + + int index1 = indicies.get(n1); + int index2 = indicies.get(n2); + int index3 = indicies.get(n3); + int index4 = indicies.get(n4); + + double pr1 = pageRank[index1]; + double pr2 = pageRank[index2]; + double pr3 = pageRank[index3]; + double pr4 = pageRank[index4]; + + double res = 1.; + double diff = 0.01; + double sum = pr1 + pr2 + pr3 + pr4; + + assertTrue(pr1 < pr2); + assertTrue(pr2 < pr4); + assertTrue(Math.abs(sum - res) < diff); + } + + @Test + public void testCyclicDirectedGraphPageRank() { + GraphModel graphModel = GraphGenerator.generateCyclicDirectedGraph(5); + DirectedGraph graph = graphModel.getDirectedGraph(); + + PageRank pr = new PageRank(); + + double[] pageRank; + + HashMap indicies = pr.createIndiciesMap(graph); + + pageRank = pr.calculatePagerank(graph, indicies, true, false, 0.001, 0.85); + + Node n3 = graph.getNode("2"); + + int index3 = indicies.get(n3); + + double pr3 = pageRank[index3]; + double res = 0.2d; + + double diff3 = Math.abs(pr3 - res); + assertTrue(diff3 < 0.01); + } + + @Test + public void testDirectedSpecial1GraphPageRank() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + Node node6 = graphModel.factory().newNode("5"); + Node node7 = graphModel.factory().newNode("6"); + Node node8 = graphModel.factory().newNode("7"); + Node node9 = graphModel.factory().newNode("8"); + + directedGraph.addNode(node1); + directedGraph.addNode(node2); + directedGraph.addNode(node3); + directedGraph.addNode(node4); + directedGraph.addNode(node5); + directedGraph.addNode(node6); + directedGraph.addNode(node7); + directedGraph.addNode(node8); + directedGraph.addNode(node9); + + Edge edge12 = graphModel.factory().newEdge(node1, node2); + Edge edge23 = graphModel.factory().newEdge(node2, node3); + Edge edge31 = graphModel.factory().newEdge(node3, node1); + Edge edge14 = graphModel.factory().newEdge(node1, node4); + Edge edge45 = graphModel.factory().newEdge(node4, node5); + Edge edge51 = graphModel.factory().newEdge(node5, node1); + Edge edge16 = graphModel.factory().newEdge(node1, node6); + Edge edge67 = graphModel.factory().newEdge(node6, node7); + Edge edge71 = graphModel.factory().newEdge(node7, node1); + Edge edge18 = graphModel.factory().newEdge(node1, node8); + Edge edge89 = graphModel.factory().newEdge(node8, node9); + Edge edge91 = graphModel.factory().newEdge(node9, node1); + + directedGraph.addEdge(edge12); + directedGraph.addEdge(edge23); + directedGraph.addEdge(edge31); + directedGraph.addEdge(edge14); + directedGraph.addEdge(edge45); + directedGraph.addEdge(edge51); + directedGraph.addEdge(edge16); + directedGraph.addEdge(edge67); + directedGraph.addEdge(edge71); + directedGraph.addEdge(edge18); + directedGraph.addEdge(edge89); + directedGraph.addEdge(edge91); + + DirectedGraph graph = graphModel.getDirectedGraph(); + PageRank pr = new PageRank(); + + double[] pageRank; + + HashMap indicies = pr.createIndiciesMap(graph); + + pageRank = pr.calculatePagerank(graph, indicies, true, false, 0.001, 0.85); + + int index1 = indicies.get(node1); + int index2 = indicies.get(node2); + int index3 = indicies.get(node3); + + double pr1 = pageRank[index1]; + double pr2 = pageRank[index2]; + double pr3 = pageRank[index3]; + + assertTrue(pr1 > pr2); + assertTrue(pr2 < pr3); + } + + @Test + public void testDirectedStarOutGraphPageRank() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + Node firstNode = graphModel.factory().newNode("0"); + directedGraph.addNode(firstNode); + for (int i = 1; i <= 5; i++) { + Node currentNode = graphModel.factory().newNode(((Integer) i).toString()); + directedGraph.addNode(currentNode); + Edge currentEdge = graphModel.factory().newEdge(firstNode, currentNode); + directedGraph.addEdge(currentEdge); + } + + DirectedGraph graph = graphModel.getDirectedGraph(); + PageRank pr = new PageRank(); + + double[] pageRank; + + HashMap indicies = pr.createIndiciesMap(graph); + + pageRank = pr.calculatePagerank(graph, indicies, true, false, 0.001, 0.85); + + Node n1 = graph.getNode("0"); + Node n2 = graph.getNode("1"); + Node n3 = graph.getNode("2"); + Node n5 = graph.getNode("4"); + + int index1 = indicies.get(n1); + int index2 = indicies.get(n2); + int index3 = indicies.get(n3); + int index5 = indicies.get(n5); + + double pr1 = pageRank[index1]; + double pr2 = pageRank[index2]; + double pr3 = pageRank[index3]; + double pr5 = pageRank[index5]; + + double res = 0.146; + double diff = 0.01; + + assertTrue(pr1 < pr3); + assertEquals(pr2, pr5); + assertTrue(Math.abs(pr1 - res) < diff); + } + + @Test + public void testUndirectedWeightedGraphPageRank() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + Node node1 = graphModel.factory().newNode("0"); + Node node2 = graphModel.factory().newNode("1"); + Node node3 = graphModel.factory().newNode("2"); + Node node4 = graphModel.factory().newNode("3"); + Node node5 = graphModel.factory().newNode("4"); + Node node6 = graphModel.factory().newNode("5"); + + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + undirectedGraph.addNode(node4); + undirectedGraph.addNode(node5); + undirectedGraph.addNode(node6); + + Edge edge12 = graphModel.factory().newEdge(node1, node2, false); + Edge edge23 = graphModel.factory().newEdge(node2, node3, 0, 10, false); + Edge edge34 = graphModel.factory().newEdge(node3, node4, false); + Edge edge45 = graphModel.factory().newEdge(node4, node5, false); + Edge edge56 = graphModel.factory().newEdge(node5, node6, false); + Edge edge61 = graphModel.factory().newEdge(node6, node1, false); + + undirectedGraph.addEdge(edge12); + undirectedGraph.addEdge(edge23); + undirectedGraph.addEdge(edge34); + undirectedGraph.addEdge(edge45); + undirectedGraph.addEdge(edge56); + undirectedGraph.addEdge(edge61); + + UndirectedGraph graph = graphModel.getUndirectedGraph(); + PageRank pr = new PageRank(); + + double[] pageRank; + + HashMap indicies = pr.createIndiciesMap(graph); + + pageRank = pr.calculatePagerank(graph, indicies, false, true, 0.001, 0.85); + + int index1 = indicies.get(node1); + int index2 = indicies.get(node2); + int index3 = indicies.get(node3); + int index6 = indicies.get(node6); + + double diff = 0.01; + + double pr1 = pageRank[index1]; + double pr2 = pageRank[index2]; + double pr3 = pageRank[index3]; + double pr6 = pageRank[index6]; + + assertTrue(Math.abs(pr2 - pr3) < diff); + assertTrue(pr1 < pr2); + assertTrue(pr1 < pr6); + } + + @Test + public void testColumnCreation() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + + PageRank pr = new PageRank(); + pr.execute(graphModel); + + Assert.assertTrue(graphModel.getNodeTable().hasColumn(PageRank.PAGERANK)); + } + + @Test + public void testColumnReplace() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + + graphModel.getNodeTable().addColumn(PageRank.PAGERANK, String.class); + + PageRank pr = new PageRank(); + pr.execute(graphModel); + } +} diff --git a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/StatisticalInferenceTest.java b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/StatisticalInferenceTest.java new file mode 100644 index 0000000000..201edb3476 --- /dev/null +++ b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/StatisticalInferenceTest.java @@ -0,0 +1,833 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.statistics.plugin; + +import java.util.ArrayList; +import java.util.HashMap; +import junit.framework.TestCase; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.NodeIterable; +import org.gephi.graph.api.UndirectedGraph; +import org.gephi.io.importer.GraphImporter; +import org.junit.Assert; +import org.junit.Test; + +/** + * @author Mathieu Jacomy + */ + +public class StatisticalInferenceTest extends TestCase { + + private UndirectedGraph getCliquesBridgeGraph() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + UndirectedGraph undirectedGraph = graphModel.getUndirectedGraph(); + + Node node0 = graphModel.factory().newNode("0"); + Node node1 = graphModel.factory().newNode("1"); + Node node2 = graphModel.factory().newNode("2"); + Node node3 = graphModel.factory().newNode("3"); + Node node4 = graphModel.factory().newNode("4"); + Node node5 = graphModel.factory().newNode("5"); + Node node6 = graphModel.factory().newNode("6"); + Node node7 = graphModel.factory().newNode("7"); + + undirectedGraph.addNode(node0); + undirectedGraph.addNode(node1); + undirectedGraph.addNode(node2); + undirectedGraph.addNode(node3); + undirectedGraph.addNode(node4); + undirectedGraph.addNode(node5); + undirectedGraph.addNode(node6); + undirectedGraph.addNode(node7); + + // Clique A + Edge edge01 = graphModel.factory().newEdge(node0, node1, false); + Edge edge12 = graphModel.factory().newEdge(node1, node2, false); + Edge edge23 = graphModel.factory().newEdge(node2, node3, false); + Edge edge30 = graphModel.factory().newEdge(node3, node0, false); + Edge edge02 = graphModel.factory().newEdge(node0, node2, false); + Edge edge13 = graphModel.factory().newEdge(node1, node3, false); + // Bridge + Edge edge04 = graphModel.factory().newEdge(node0, node4, false); + // Clique B + Edge edge45 = graphModel.factory().newEdge(node4, node5, false); + Edge edge56 = graphModel.factory().newEdge(node5, node6, false); + Edge edge67 = graphModel.factory().newEdge(node6, node7, false); + Edge edge74 = graphModel.factory().newEdge(node7, node4, false); + Edge edge46 = graphModel.factory().newEdge(node4, node6, false); + Edge edge57 = graphModel.factory().newEdge(node5, node7, false); + + undirectedGraph.addEdge(edge01); + undirectedGraph.addEdge(edge12); + undirectedGraph.addEdge(edge23); + undirectedGraph.addEdge(edge30); + undirectedGraph.addEdge(edge02); + undirectedGraph.addEdge(edge13); + undirectedGraph.addEdge(edge04); + undirectedGraph.addEdge(edge45); + undirectedGraph.addEdge(edge56); + undirectedGraph.addEdge(edge67); + undirectedGraph.addEdge(edge74); + undirectedGraph.addEdge(edge46); + undirectedGraph.addEdge(edge57); + + UndirectedGraph graph = graphModel.getUndirectedGraph(); + return graph; + } + + @Test + public void testCliquesBridgeGraph_descriptionLength() { + UndirectedGraph graph = getCliquesBridgeGraph(); + StatisticalInferenceClustering sic = new StatisticalInferenceClustering(); + StatisticalInferenceClustering.CommunityStructure theStructure = sic.new CommunityStructure(graph); + + // At initialization, each node is in its own community. + // Here we just test the description length at init. + // We test for the know value (from GraphTools) + + double descriptionLength_atInit = sic.computeDescriptionLength(graph, theStructure); + assertEquals(36.0896, descriptionLength_atInit, 0.0001); + + // Now we move the nodes so that one community remains for each clique + StatisticalInferenceClustering.Community cA = theStructure.nodeCommunities[0]; + StatisticalInferenceClustering.Community cB = theStructure.nodeCommunities[4]; + theStructure._moveNodeTo(1, cA); + theStructure._moveNodeTo(2, cA); + theStructure._moveNodeTo(3, cA); + theStructure._moveNodeTo(5, cB); + theStructure._moveNodeTo(6, cB); + theStructure._moveNodeTo(7, cB); + + // Now we test that the description length is shorter when the communities + // match the expectations (one community per clique) + + double descriptionLength_atIdealPartition = sic.computeDescriptionLength(graph, theStructure); + assertTrue(descriptionLength_atIdealPartition < descriptionLength_atInit); + } + + @Test + public void testDescriptionLengthOneCommunity() { + UndirectedGraph graph = getCliquesBridgeGraph(); + StatisticalInferenceClustering sic = new StatisticalInferenceClustering(); + StatisticalInferenceClustering.CommunityStructure theStructure = sic.new CommunityStructure(graph); + + // Now we move the nodes in the same community + StatisticalInferenceClustering.Community com = theStructure.nodeCommunities[0]; + theStructure._moveNodeTo(1, com); + theStructure._moveNodeTo(2, com); + theStructure._moveNodeTo(3, com); + theStructure._moveNodeTo(4, com); + theStructure._moveNodeTo(5, com); + theStructure._moveNodeTo(6, com); + theStructure._moveNodeTo(7, com); + + // Now we test that the description length is shorter when the communities + // match the expectations (one community per clique) + + double descriptionLength = sic.computeDescriptionLength(graph, theStructure); + assertEquals(29.93900552172898, descriptionLength, 0.0001); + + // Zoom out + theStructure._zoomOut(); + + descriptionLength = sic.computeDescriptionLength(graph, theStructure); + assertEquals(29.93900552172898, descriptionLength, 0.0001); + } + + @Test + public void testCommunityWeightsBookkeeping() { + UndirectedGraph graph = getCliquesBridgeGraph(); + StatisticalInferenceClustering sic = new StatisticalInferenceClustering(); + StatisticalInferenceClustering.CommunityStructure theStructure = sic.new CommunityStructure(graph); + // Note: at initialization, each node is in its own community. + + for (int node = 0; node < 8; node++) { + // The community for each node should have a weight equal to the degree of that node. + assertEquals(theStructure.weights[node], theStructure.nodeCommunities[node].weightSum); + // The community for each node should have an inner weight equal to zero. + assertEquals(0., theStructure.nodeCommunities[node].internalWeightSum); + } + + // Move node 1 to the same community as node 0: it now contains nodes 0 and 1 (degrees 4 and 3). + theStructure._moveNodeTo(1, theStructure.nodeCommunities[0]); + assertEquals(7., theStructure.nodeCommunities[0].weightSum); + // There is 1 internal link + assertEquals(1., theStructure.nodeCommunities[0].internalWeightSum); + + // Move node 1 to the same community as node 2: now, the community of node 0 contains just nodes 0 (degree 4). + theStructure._moveNodeTo(1, theStructure.nodeCommunities[2]); + assertEquals(4., theStructure.nodeCommunities[0].weightSum); + // There is 0 internal link + assertEquals(0., theStructure.nodeCommunities[0].internalWeightSum); + } + + @Test + public void testMiscMetricsBookkeeping() { + UndirectedGraph graph = getCliquesBridgeGraph(); + StatisticalInferenceClustering sic = new StatisticalInferenceClustering(); + StatisticalInferenceClustering.CommunityStructure theStructure = sic.new CommunityStructure(graph); + + // Note: at initialization, each node is in its own community. + // We move the nodes to just two communities, one for each clique. + StatisticalInferenceClustering.Community cA = theStructure.nodeCommunities[0]; + StatisticalInferenceClustering.Community cB = theStructure.nodeCommunities[4]; + theStructure._moveNodeTo(1, cA); + theStructure._moveNodeTo(2, cA); + theStructure._moveNodeTo(3, cA); + theStructure._moveNodeTo(5, cB); + theStructure._moveNodeTo(6, cB); + theStructure._moveNodeTo(7, cB); + + // Total number of edges (graph size) + Double E = theStructure.graphWeightSum; + assertEquals(13., E); + + // Total number of edges from one community to the same one + Double e_in = theStructure.communities.stream().mapToDouble(c -> c.internalWeightSum).sum(); + assertEquals(12., e_in); // 6 inner links per clique + + // Total number of edges from one community to another + Double e_out = E - e_in; + assertEquals(1., e_out); // 1 bridge + + // Total number of communities + Double B = Double.valueOf(theStructure.communities.size()); + assertEquals(2., B); + + // Total number of nodes (not metanodes!!!) + Double N = Double.valueOf(theStructure.graph.getNodeCount()); + assertEquals(8., N); + } + + @Test + public void testSimpleDescriptionLengthDelta() { + UndirectedGraph graph = getCliquesBridgeGraph(); + StatisticalInferenceClustering sic = new StatisticalInferenceClustering(); + StatisticalInferenceClustering.CommunityStructure theStructure = sic.new CommunityStructure(graph); + // Note: at initialization, each node is in its own community. + + // Compute description length + double descriptionLength_before = sic.computeDescriptionLength(graph, theStructure); + + // Test moving node 1 to the same community as node 0 + int node = 1; + StatisticalInferenceClustering.Community community = theStructure.nodeCommunities[0]; // Node 0's community + + // Benchmark the delta + Double E = theStructure.graphWeightSum; + Double e_in = theStructure.communities.stream().mapToDouble(c -> c.internalWeightSum).sum(); + Double e_out = E - e_in; + Double B = Double.valueOf(theStructure.communities.size()); + Double N = Double.valueOf(theStructure.graph.getNodeCount()); + double descriptionLength_delta = sic.delta(node, community, theStructure, e_in, e_out, E, B, N); + + // Actually move the node + theStructure._moveNodeTo(node, community); + + // Compute description length again + double descriptionLength_after = sic.computeDescriptionLength(graph, theStructure); + + // Delta should be (approximately) equal to the difference + assertEquals(descriptionLength_after - descriptionLength_before, descriptionLength_delta, 0.0001); + } + + @Test + public void testDescriptionLengthDeltaWithZoomOut() { + UndirectedGraph graph = getCliquesBridgeGraph(); + StatisticalInferenceClustering sic = new StatisticalInferenceClustering(); + StatisticalInferenceClustering.CommunityStructure theStructure = sic.new CommunityStructure(graph); + + // Make some groups and zoom out. + theStructure._moveNodeTo(1, theStructure.nodeCommunities[0]); + theStructure._moveNodeTo(2, theStructure.nodeCommunities[0]); + theStructure._zoomOut(); + theStructure._moveNodeTo(2, theStructure.nodeCommunities[0]); + theStructure._moveNodeTo(3, theStructure.nodeCommunities[1]); + + // Compute description length + double descriptionLength_before = sic.computeDescriptionLength(graph, theStructure); + + int node = 1; + StatisticalInferenceClustering.Community community = theStructure.nodeCommunities[0]; // Node 0's community + + // Benchmark the delta + Double E = theStructure.graphWeightSum; + Double e_in = theStructure.communities.stream().mapToDouble(c -> c.internalWeightSum).sum(); + Double e_out = E - e_in; + Double B = Double.valueOf(theStructure.communities.size()); + Double N = Double.valueOf(theStructure.graph.getNodeCount()); + double descriptionLength_delta = sic.delta(node, community, theStructure, e_in, e_out, E, B, N); + + // Actually move the node + theStructure._moveNodeTo(node, community); + + // Compute description length again + double descriptionLength_after = sic.computeDescriptionLength(graph, theStructure); + + // Delta should be (approximately) equal to the difference + assertEquals(descriptionLength_after - descriptionLength_before, descriptionLength_delta, 0.0001); + } + + @Test + public void testDescriptionLengthDeltaWithZoomOut_x2() { + UndirectedGraph graph = getCliquesBridgeGraph(); + StatisticalInferenceClustering sic = new StatisticalInferenceClustering(); + StatisticalInferenceClustering.CommunityStructure theStructure = sic.new CommunityStructure(graph); + + // Make some groups and shuffle around to stress bookkeeping + theStructure._moveNodeTo(4, theStructure.nodeCommunities[0]); + theStructure._moveNodeTo(5, theStructure.nodeCommunities[1]); + theStructure._moveNodeTo(6, theStructure.nodeCommunities[2]); + theStructure._moveNodeTo(1, theStructure.nodeCommunities[0]); + theStructure._moveNodeTo(4, theStructure.nodeCommunities[5]); + theStructure._moveNodeTo(2, theStructure.nodeCommunities[3]); + theStructure._moveNodeTo(6, theStructure.nodeCommunities[7]); + //System.out.println(theStructure.getMonitoring()); + // > com0[n0(0) n1(1)] com2[n5(5) n4(4)] com6[n3(3) n2(2)] com14[n7(7) n6(6)] + + // Zoom out + theStructure._zoomOut(); + //System.out.println(theStructure.getMonitoring()); + // > com16[n0(0 1)] com18[n1(5 4)] com20[n2(3 2)] com22[n3(7 6)] + + // Shuffle around to stress bookkeeping + theStructure._moveNodeTo(2, theStructure.nodeCommunities[0]); + theStructure._moveNodeTo(0, theStructure.nodeCommunities[1]); + theStructure._moveNodeTo(1, theStructure.nodeCommunities[3]); + //System.out.println(theStructure.getMonitoring()); + // > com16[n2(3 2)] com18[n0(0 1)] com22[n3(7 6) n1(5 4)] + + // Zoom out again + theStructure._zoomOut(); + //System.out.println(theStructure.getMonitoring()); + // > com24[n0(3 2)] com26[n1(0 1)] com28[n2(7 6 5 4)] + + // Test + + // Compute description length + double descriptionLength_before = sic.computeDescriptionLength(graph, theStructure); + + int node = 1; + StatisticalInferenceClustering.Community community = theStructure.nodeCommunities[0]; // Node 0's community + + // Benchmark the delta + Double E = theStructure.graphWeightSum; + Double e_in = theStructure.communities.stream().mapToDouble(c -> c.internalWeightSum).sum(); + Double e_out = E - e_in; + Double B = Double.valueOf(theStructure.communities.size()); + Double N = Double.valueOf(theStructure.graph.getNodeCount()); + double descriptionLength_delta = sic.delta(node, community, theStructure, e_in, e_out, E, B, N); + + // Actually move the node + theStructure._moveNodeTo(node, community); + + // Compute description length again + double descriptionLength_after = sic.computeDescriptionLength(graph, theStructure); + + // Delta should be (approximately) equal to the difference + assertEquals(descriptionLength_after - descriptionLength_before, descriptionLength_delta, 0.0001); + } + + // The four next tests are networks from Tiago Peixoto, with a reference partition and description length. + @Test + public void testDescriptionLength_football() { + GraphModel graphModel = GraphImporter.importGraph(DummyTest.class, "football.graphml"); + UndirectedGraph graph = graphModel.getUndirectedGraph(); + StatisticalInferenceClustering sic = new StatisticalInferenceClustering(); + StatisticalInferenceClustering.CommunityStructure theStructure = sic.new CommunityStructure(graph); + + HashMap knownCommunities = new HashMap<>(); + NodeIterable nodesIterable = graph.getNodes(); + for (Node node : nodesIterable) { + Integer targetCom = (Integer) node.getAttribute("key1"); + int nodeIndex = theStructure.map.get(node); + StatisticalInferenceClustering.Community initCom = theStructure.nodeCommunities[nodeIndex]; + if (knownCommunities.containsKey(targetCom)) { + theStructure._moveNodeTo(nodeIndex, knownCommunities.get(targetCom)); + } else { + knownCommunities.put(targetCom, initCom); + } + } + + double descriptionLength = sic.computeDescriptionLength(graph, theStructure); + assertEquals(1850.2102335828238, descriptionLength, 0.0001); + } + + @Test + public void testDescriptionLength_moviegalaxies() { + GraphModel graphModel = GraphImporter.importGraph(DummyTest.class, "moviegalaxies.graphml"); + UndirectedGraph graph = graphModel.getUndirectedGraph(); + StatisticalInferenceClustering sic = new StatisticalInferenceClustering(); + StatisticalInferenceClustering.CommunityStructure theStructure = sic.new CommunityStructure(graph); + + HashMap knownCommunities = new HashMap<>(); + NodeIterable nodesIterable = graph.getNodes(); + for (Node node : nodesIterable) { + Integer targetCom = (Integer) node.getAttribute("key1"); + int nodeIndex = theStructure.map.get(node); + StatisticalInferenceClustering.Community initCom = theStructure.nodeCommunities[nodeIndex]; + if (knownCommunities.containsKey(targetCom)) { + theStructure._moveNodeTo(nodeIndex, knownCommunities.get(targetCom)); + } else { + knownCommunities.put(targetCom, initCom); + } + } + + double descriptionLength = sic.computeDescriptionLength(graph, theStructure); + assertEquals(229.04187438186472, descriptionLength, 0.0001); + } + + @Test + public void testDescriptionLength_5cliques() { + GraphModel graphModel = GraphImporter.importGraph(DummyTest.class, "5-cliques.graphml"); + UndirectedGraph graph = graphModel.getUndirectedGraph(); + StatisticalInferenceClustering sic = new StatisticalInferenceClustering(); + StatisticalInferenceClustering.CommunityStructure theStructure = sic.new CommunityStructure(graph); + + HashMap knownCommunities = new HashMap<>(); + NodeIterable nodesIterable = graph.getNodes(); + for (Node node : nodesIterable) { + Integer targetCom = (Integer) node.getAttribute("key1"); + int nodeIndex = theStructure.map.get(node); + StatisticalInferenceClustering.Community initCom = theStructure.nodeCommunities[nodeIndex]; + if (knownCommunities.containsKey(targetCom)) { + theStructure._moveNodeTo(nodeIndex, knownCommunities.get(targetCom)); + } else { + knownCommunities.put(targetCom, initCom); + } + } + + double descriptionLength = sic.computeDescriptionLength(graph, theStructure); + assertEquals(150.10880360418344, descriptionLength, 0.0001); + } + + @Test + public void testDescriptionLength_2cliques() { + GraphModel graphModel = GraphImporter.importGraph(DummyTest.class, "two-cliques.graphml"); + UndirectedGraph graph = graphModel.getUndirectedGraph(); + StatisticalInferenceClustering sic = new StatisticalInferenceClustering(); + StatisticalInferenceClustering.CommunityStructure theStructure = sic.new CommunityStructure(graph); + + HashMap knownCommunities = new HashMap<>(); + NodeIterable nodesIterable = graph.getNodes(); + for (Node node : nodesIterable) { + Integer targetCom = (Integer) node.getAttribute("key1"); + int nodeIndex = theStructure.map.get(node); + StatisticalInferenceClustering.Community initCom = theStructure.nodeCommunities[nodeIndex]; + if (knownCommunities.containsKey(targetCom)) { + theStructure._moveNodeTo(nodeIndex, knownCommunities.get(targetCom)); + } else { + knownCommunities.put(targetCom, initCom); + } + } + + double descriptionLength = sic.computeDescriptionLength(graph, theStructure); + assertEquals(43.479327707987835, descriptionLength, 0.0001); + } + + @Test + public void testMiscMetricsConsistentThroughZoomOut() { + UndirectedGraph graph = getCliquesBridgeGraph(); + StatisticalInferenceClustering sic = new StatisticalInferenceClustering(); + StatisticalInferenceClustering.CommunityStructure theStructure = sic.new CommunityStructure(graph); + + StatisticalInferenceClustering.Community cA1 = theStructure.nodeCommunities[0]; + StatisticalInferenceClustering.Community cA2 = theStructure.nodeCommunities[3]; + StatisticalInferenceClustering.Community cB = theStructure.nodeCommunities[4]; + theStructure._moveNodeTo(1, cA1); + theStructure._moveNodeTo(2, cA1); + theStructure._moveNodeTo(5, cB); + theStructure._moveNodeTo(6, cB); + theStructure._moveNodeTo(7, cB); + + // Total number of edges (graph size) + double E_before = theStructure.graphWeightSum; + // Total number of edges from one community to the same one + double e_in_before = theStructure.communities.stream().mapToDouble(c -> c.internalWeightSum).sum(); + // Total number of communities + double B_before = Double.valueOf(theStructure.communities.size()); + // Total number of nodes (not metanodes!!!) + double N_before = Double.valueOf(theStructure.graph.getNodeCount()); + + ArrayList e_r_before = new ArrayList<>(); + ArrayList e_rr_before = new ArrayList<>(); + ArrayList n_r_before = new ArrayList<>(); + for (StatisticalInferenceClustering.Community community : theStructure.communities) { + // Number of edges of community (with itself or another one) + double e_r = community.weightSum; + // Number of edges within community + double e_rr = community.internalWeightSum; + // Number of nodes in the community + int n_r = community.graphNodeCount; + + e_r_before.add(e_r); + e_rr_before.add(e_rr); + n_r_before.add(n_r); + } + + theStructure._zoomOut(); + + // Total number of edges (graph size) + double E_after = theStructure.graphWeightSum; + // Total number of edges from one community to the same one + double e_in_after = theStructure.communities.stream().mapToDouble(c -> c.internalWeightSum).sum(); + // Total number of communities + double B_after = Double.valueOf(theStructure.communities.size()); + // Total number of nodes (not metanodes!!!) + double N_after = Double.valueOf(theStructure.graph.getNodeCount()); + + ArrayList e_r_after = new ArrayList<>(); + ArrayList e_rr_after = new ArrayList<>(); + ArrayList n_r_after = new ArrayList<>(); + for (StatisticalInferenceClustering.Community community : theStructure.communities) { + // Number of edges of community (with itself or another one) + double e_r = community.weightSum; + // Number of edges within community + double e_rr = community.internalWeightSum; + // Number of nodes in the community + int n_r = community.graphNodeCount; + + e_r_after.add(e_r); + e_rr_after.add(e_rr); + n_r_after.add(n_r); + } + + assertEquals(E_before, E_after); + assertEquals(e_in_before, e_in_after); + assertEquals(B_before, B_after); + assertEquals(N_before, N_after); + + assertEquals(e_r_before, e_r_after); + assertEquals(e_rr_before, e_rr_after); + assertEquals(n_r_before, n_r_after); + } + + @Test + public void testDescriptionLengthConsistentThroughZoomOut_simple() { + UndirectedGraph graph = getCliquesBridgeGraph(); + StatisticalInferenceClustering sic = new StatisticalInferenceClustering(); + StatisticalInferenceClustering.CommunityStructure theStructure = sic.new CommunityStructure(graph); + + StatisticalInferenceClustering.Community cA1 = theStructure.nodeCommunities[0]; + StatisticalInferenceClustering.Community cA2 = theStructure.nodeCommunities[3]; + StatisticalInferenceClustering.Community cB = theStructure.nodeCommunities[4]; + theStructure._moveNodeTo(1, cA1); + theStructure._moveNodeTo(2, cA1); + theStructure._moveNodeTo(5, cB); + theStructure._moveNodeTo(6, cB); + theStructure._moveNodeTo(7, cB); + + double descriptionLength_before = sic.computeDescriptionLength(graph, theStructure); + + theStructure._zoomOut(); + + double descriptionLength_after = sic.computeDescriptionLength(graph, theStructure); + + assertEquals(descriptionLength_before, descriptionLength_after, 0.00001); + } + + @Test + public void testDescriptionLengthConsistentThroughZoomOut_complicated() { + UndirectedGraph graph = getCliquesBridgeGraph(); + StatisticalInferenceClustering sic = new StatisticalInferenceClustering(); + StatisticalInferenceClustering.CommunityStructure theStructure = sic.new CommunityStructure(graph); + + double descriptionLength_before; + double descriptionLength_after; + + //System.out.println("\n# Initial"); + //System.out.println(" Structure: "+theStructure.getMonitoring()); + //System.out.println(" DL: "+sic.computeDescriptionLength(graph, theStructure)); + + // Move the nodes in categories + //System.out.println("\n# 1st round of group rearranging"); + theStructure._moveNodeTo(1, theStructure.nodeCommunities[0]); + theStructure._moveNodeTo(3, theStructure.nodeCommunities[2]); + //System.out.println(" Structure: "+theStructure.getMonitoring()); + descriptionLength_before = sic.computeDescriptionLength(graph, theStructure); + //System.out.println(" DL: "+descriptionLength_before); + + // Zoom out + //System.out.println("\n# Zoom out"); + theStructure._zoomOut(); + //System.out.println(" Structure: "+theStructure.getMonitoring()); + descriptionLength_after = sic.computeDescriptionLength(graph, theStructure); + //System.out.println(" DL: "+descriptionLength_after); + + assertEquals(descriptionLength_before, descriptionLength_after, 0.00001); + + // Move the nodes in categories + //System.out.println("\n# 2nd round of group rearranging"); + theStructure._moveNodeTo(1, theStructure.nodeCommunities[2]); + //System.out.println(" Structure: "+theStructure.getMonitoring()); + descriptionLength_before = sic.computeDescriptionLength(graph, theStructure); + //System.out.println(" DL: "+descriptionLength_before); + + // Zoom out + //System.out.println("\n# Zoom out"); + theStructure._zoomOut(); + //System.out.println(" Structure: "+theStructure.getMonitoring()); + descriptionLength_after = sic.computeDescriptionLength(graph, theStructure); + //System.out.println(" DL: "+descriptionLength_after); + + assertEquals(descriptionLength_before, descriptionLength_after, 0.00001); + + // Move the nodes in categories + //System.out.println("\n# 3rd round of group rearranging"); + theStructure._moveNodeTo(2, theStructure.nodeCommunities[4]); + theStructure._moveNodeTo(3, theStructure.nodeCommunities[4]); + //System.out.println(" Structure: "+theStructure.getMonitoring()); + descriptionLength_before = sic.computeDescriptionLength(graph, theStructure); + //System.out.println(" DL: "+descriptionLength_before); + + // Zoom out + //System.out.println("\n# Zoom out"); + theStructure._zoomOut(); + //System.out.println(" Structure: "+theStructure.getMonitoring()); + descriptionLength_after = sic.computeDescriptionLength(graph, theStructure); + //System.out.println(" DL: "+descriptionLength_after); + + assertEquals(descriptionLength_before, descriptionLength_after, 0.00001); + } + + /* + // This test is not unitary enough, it may randomly fail by design. Useful for debugging though. + @Test + public void testMinimizationHeuristic_football() { + GraphModel graphModel = GraphImporter.importGraph(DummyTest.class, "football.graphml"); + UndirectedGraph graph = graphModel.getUndirectedGraph(); + StatisticalInferenceClustering sic = new StatisticalInferenceClustering(); + + sic.execute(graph); + double descriptionLength = sic.getDescriptionLength(); + + double targetDescLength = 1850.2102335828238; + double errorMargin = 0.1; + assertEquals(targetDescLength, descriptionLength, errorMargin * targetDescLength); + } + */ + + @Test + public void testMinimizationHeuristic_5cliques() { + GraphModel graphModel = GraphImporter.importGraph(DummyTest.class, "5-cliques.graphml"); + UndirectedGraph graph = graphModel.getUndirectedGraph(); + StatisticalInferenceClustering sic = new StatisticalInferenceClustering(); + + sic.execute(graph); + double descriptionLength = sic.getDescriptionLength(); + + double targetDescLength = 150.10880360418344; + double errorMargin = 0.01; + assertEquals(targetDescLength, descriptionLength, errorMargin * targetDescLength); + } + + @Test + public void testMinimizationHeuristic_moviegalaxies() { + GraphModel graphModel = GraphImporter.importGraph(DummyTest.class, "moviegalaxies.graphml"); + UndirectedGraph graph = graphModel.getUndirectedGraph(); + StatisticalInferenceClustering sic = new StatisticalInferenceClustering(); + + sic.execute(graph); + double descriptionLength = sic.getDescriptionLength(); + + double targetDescLength = 229.04187438186472; + double errorMargin = 0.1; + assertEquals(targetDescLength, descriptionLength, errorMargin * targetDescLength); + } + + @Test + public void testDescriptionLengthZoomOut_football() { + GraphModel graphModel = GraphImporter.importGraph(DummyTest.class, "football.graphml"); + UndirectedGraph graph = graphModel.getUndirectedGraph(); + StatisticalInferenceClustering sic = new StatisticalInferenceClustering(); + StatisticalInferenceClustering.CommunityStructure theStructure = sic.new CommunityStructure(graph); + + // We reproduce a given setting + StatisticalInferenceClustering.Community c0 = theStructure.nodeCommunities[74]; + theStructure._moveNodeTo(102, c0); + theStructure._moveNodeTo(107, c0); + theStructure._moveNodeTo(49, c0); + theStructure._moveNodeTo(84, c0); + theStructure._moveNodeTo(82, c0); + theStructure._moveNodeTo(77, c0); + theStructure._moveNodeTo(72, c0); + theStructure._moveNodeTo(2, c0); + theStructure._moveNodeTo(98, c0); + theStructure._moveNodeTo(10, c0); + StatisticalInferenceClustering.Community c1 = theStructure.nodeCommunities[30]; + theStructure._moveNodeTo(19, c1); + theStructure._moveNodeTo(60, c1); + theStructure._moveNodeTo(71, c1); + theStructure._moveNodeTo(18, c1); + theStructure._moveNodeTo(99, c1); + theStructure._moveNodeTo(35, c1); + theStructure._moveNodeTo(79, c1); + theStructure._moveNodeTo(38, c1); + theStructure._moveNodeTo(85, c1); + theStructure._moveNodeTo(28, c1); + theStructure._moveNodeTo(55, c1); + theStructure._moveNodeTo(6, c1); + theStructure._moveNodeTo(31, c1); + theStructure._moveNodeTo(54, c1); + StatisticalInferenceClustering.Community c2 = theStructure.nodeCommunities[20]; + theStructure._moveNodeTo(36, c2); + theStructure._moveNodeTo(75, c2); + theStructure._moveNodeTo(48, c2); + theStructure._moveNodeTo(92, c2); + theStructure._moveNodeTo(58, c2); + theStructure._moveNodeTo(59, c2); + theStructure._moveNodeTo(113, c2); + StatisticalInferenceClustering.Community c3 = theStructure.nodeCommunities[68]; + theStructure._moveNodeTo(8, c3); + theStructure._moveNodeTo(22, c3); + theStructure._moveNodeTo(78, c3); + theStructure._moveNodeTo(51, c3); + theStructure._moveNodeTo(111, c3); + theStructure._moveNodeTo(40, c3); + theStructure._moveNodeTo(7, c3); + theStructure._moveNodeTo(21, c3); + theStructure._moveNodeTo(108, c3); + StatisticalInferenceClustering.Community c4 = theStructure.nodeCommunities[70]; + theStructure._moveNodeTo(87, c4); + theStructure._moveNodeTo(64, c4); + theStructure._moveNodeTo(63, c4); + theStructure._moveNodeTo(97, c4); + theStructure._moveNodeTo(24, c4); + theStructure._moveNodeTo(66, c4); + theStructure._moveNodeTo(56, c4); + theStructure._moveNodeTo(65, c4); + theStructure._moveNodeTo(27, c4); + theStructure._moveNodeTo(95, c4); + theStructure._moveNodeTo(76, c4); + theStructure._moveNodeTo(96, c4); + theStructure._moveNodeTo(57, c4); + theStructure._moveNodeTo(91, c4); + theStructure._moveNodeTo(86, c4); + theStructure._moveNodeTo(53, c4); + theStructure._moveNodeTo(17, c4); + theStructure._moveNodeTo(12, c4); + theStructure._moveNodeTo(44, c4); + theStructure._moveNodeTo(112, c4); + StatisticalInferenceClustering.Community c5 = theStructure.nodeCommunities[103]; + theStructure._moveNodeTo(109, c5); + theStructure._moveNodeTo(37, c5); + theStructure._moveNodeTo(89, c5); + theStructure._moveNodeTo(33, c5); + theStructure._moveNodeTo(105, c5); + theStructure._moveNodeTo(25, c5); + theStructure._moveNodeTo(106, c5); + theStructure._moveNodeTo(62, c5); + theStructure._moveNodeTo(45, c5); + theStructure._moveNodeTo(1, c5); + theStructure._moveNodeTo(101, c5); + StatisticalInferenceClustering.Community c6 = theStructure.nodeCommunities[23]; + theStructure._moveNodeTo(0, c6); + theStructure._moveNodeTo(93, c6); + theStructure._moveNodeTo(9, c6); + theStructure._moveNodeTo(16, c6); + theStructure._moveNodeTo(81, c6); + theStructure._moveNodeTo(41, c6); + theStructure._moveNodeTo(50, c6); + theStructure._moveNodeTo(90, c6); + theStructure._moveNodeTo(5, c6); + theStructure._moveNodeTo(4, c6); + StatisticalInferenceClustering.Community c7 = theStructure.nodeCommunities[100]; + theStructure._moveNodeTo(39, c7); + theStructure._moveNodeTo(43, c7); + theStructure._moveNodeTo(14, c7); + theStructure._moveNodeTo(32, c7); + theStructure._moveNodeTo(47, c7); + theStructure._moveNodeTo(42, c7); + theStructure._moveNodeTo(34, c7); + theStructure._moveNodeTo(94, c7); + theStructure._moveNodeTo(13, c7); + theStructure._moveNodeTo(15, c7); + theStructure._moveNodeTo(26, c7); + theStructure._moveNodeTo(61, c7); + theStructure._moveNodeTo(29, c7); + theStructure._moveNodeTo(80, c7); + StatisticalInferenceClustering.Community c8 = theStructure.nodeCommunities[67]; + theStructure._moveNodeTo(88, c8); + theStructure._moveNodeTo(69, c8); + theStructure._moveNodeTo(83, c8); + theStructure._moveNodeTo(73, c8); + theStructure._moveNodeTo(114, c8); + theStructure._moveNodeTo(104, c8); + theStructure._moveNodeTo(11, c8); + theStructure._moveNodeTo(52, c8); + theStructure._moveNodeTo(3, c8); + theStructure._moveNodeTo(46, c8); + theStructure._moveNodeTo(110, c8); + + double descriptionLength_before = sic.computeDescriptionLength(graph, theStructure); + + theStructure._zoomOut(); + + double descriptionLength_after = sic.computeDescriptionLength(graph, theStructure); + + assertEquals(descriptionLength_before, descriptionLength_after, 0.00001); + } + + @Test + public void testColumnCreation() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + + StatisticalInferenceClustering h = new StatisticalInferenceClustering(); + h.execute(graphModel); + + Assert.assertTrue(graphModel.getNodeTable().hasColumn(StatisticalInferenceClustering.STAT_INF_CLASS)); + } + + @Test + public void testColumnReplace() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + + graphModel.getNodeTable().addColumn(StatisticalInferenceClustering.STAT_INF_CLASS, String.class); + + StatisticalInferenceClustering h = new StatisticalInferenceClustering(); + h.execute(graphModel); + } +} + diff --git a/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/WeightedDegreeTest.java b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/WeightedDegreeTest.java new file mode 100644 index 0000000000..980b71a1a6 --- /dev/null +++ b/modules/StatisticsPlugin/src/test/java/org/gephi/statistics/plugin/WeightedDegreeTest.java @@ -0,0 +1,230 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.statistics.plugin; + +import junit.framework.TestCase; +import org.gephi.graph.api.DirectedGraph; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; +import org.junit.Assert; +import org.junit.Test; + +/** + * @author Anna + */ +public class WeightedDegreeTest extends TestCase { + + @Test + public void testOneNodeDegree() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + Graph graph = graphModel.getGraph(); + Node n = graph.getNode("0"); + + WeightedDegree d = new WeightedDegree(); + d.execute(graph); + assertEquals(n.getAttribute(WeightedDegree.WDEGREE), 0.0); + } + + @Test + public void testNullGraphDegree() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(5); + Graph graph = graphModel.getGraph(); + Node n = graph.getNode("1"); + WeightedDegree d = new WeightedDegree(); + d.execute(graph); + double degree = (Double) n.getAttribute(WeightedDegree.WDEGREE); + double avDegree = d.getAverageDegree(); + assertEquals(degree, 0.0); + assertEquals(avDegree, 0.0); + } + + @Test + public void testCompleteGraphDegree() { + GraphModel graphModel = GraphGenerator.generateCompleteUndirectedGraph(5); + Graph graph = graphModel.getGraph(); + Node n = graph.getNode("2"); + WeightedDegree d = new WeightedDegree(); + d.execute(graph); + assertEquals(n.getAttribute(WeightedDegree.WDEGREE), 4.0); + } + + @Test + public void testSelfLoopGraphDegree() { + GraphModel graphModel = GraphGenerator.generateSelfLoopUndirectedGraph(1); + Graph graph = graphModel.getGraph(); + Node n = graph.getNode("0"); + WeightedDegree d = new WeightedDegree(); + d.execute(graph); + assertEquals(n.getAttribute(WeightedDegree.WDEGREE), 2.0); + } + + @Test + public void testSelfLoopDirectedGraphDegree() { + GraphModel graphModel = GraphGenerator.generateSelfLoopDirectedGraph(1); + DirectedGraph graph = graphModel.getDirectedGraph(); + Node n = graph.getNode("0"); + WeightedDegree d = new WeightedDegree(); + d.execute(graph); + assertEquals(n.getAttribute(WeightedDegree.WDEGREE), 2.0); + assertEquals(n.getAttribute(WeightedDegree.WINDEGREE), 1.0); + assertEquals(n.getAttribute(WeightedDegree.WOUTDEGREE), 1.0); + } + + @Test + public void testStarGraphDegree() { + GraphModel graphModel = GraphGenerator.generateStarUndirectedGraph(5); + Graph graph = graphModel.getGraph(); + Node n1 = graph.getNode("0"); + Node n2 = graph.getNode("1"); + WeightedDegree d = new WeightedDegree(); + d.execute(graph); + double degree1 = (Double) n1.getAttribute(WeightedDegree.WDEGREE); + double degree2 = (Double) n2.getAttribute(WeightedDegree.WDEGREE); + double avDegree = d.getAverageDegree(); + double expectedAvDegree = 1.6667; + double diff = Math.abs(avDegree - expectedAvDegree); + assertEquals(degree1, 5.0); + assertEquals(degree2, 1.0); + assertTrue(diff < 0.001); + } + + @Test + public void testCyclicGraphDegree() { + GraphModel graphModel = GraphGenerator.generateCyclicUndirectedGraph(5); + Graph graph = graphModel.getGraph(); + Node n = graph.getNode("3"); + WeightedDegree d = new WeightedDegree(); + d.execute(graph); + double degree = (Double) n.getAttribute(WeightedDegree.WDEGREE); + double avDegree = d.getAverageDegree(); + assertEquals(degree, 2.0); + assertEquals(avDegree, 2.0); + } + + @Test + public void testDirectedPathGraphDegree() { + GraphModel graphModel = GraphGenerator.generatePathDirectedGraph(2); + DirectedGraph graph = graphModel.getDirectedGraph(); + Node n1 = graph.getNode("0"); + Node n2 = graph.getNode("1"); + WeightedDegree d = new WeightedDegree(); + d.execute(graph); + double inDegree1 = (Double) n1.getAttribute(WeightedDegree.WINDEGREE); + double inDegree2 = (Double) n2.getAttribute(WeightedDegree.WINDEGREE); + double outDegree1 = (Double) n1.getAttribute(WeightedDegree.WOUTDEGREE); + double avDegree = d.getAverageDegree(); + assertEquals(inDegree1, 0.0); + assertEquals(inDegree2, 1.0); + assertEquals(outDegree1, 1.0); + assertEquals(avDegree, 0.5); + } + + @Test + public void testDirectedCyclicGraphDegree() { + GraphModel graphModel = GraphGenerator.generateCyclicDirectedGraph(5); + DirectedGraph graph = graphModel.getDirectedGraph(); + Node n1 = graph.getNode("0"); + Node n3 = graph.getNode("2"); + Node n5 = graph.getNode("4"); + WeightedDegree d = new WeightedDegree(); + d.execute(graph); + double inDegree3 = (Double) n3.getAttribute(WeightedDegree.WINDEGREE); + double degree1 = (Double) n1.getAttribute(WeightedDegree.WDEGREE); + double outDegree5 = (Double) n5.getAttribute(WeightedDegree.WOUTDEGREE); + double avDegree = d.getAverageDegree(); + assertEquals(inDegree3, 1.0); + assertEquals(degree1, 2.0); + assertEquals(outDegree5, 1.0); + assertEquals(avDegree, 1.0); + } + + @Test + public void testDirectedStarOutGraphDegree() { + GraphModel graphModel = GraphModel.Factory.newInstance(); + + DirectedGraph directedGraph = graphModel.getDirectedGraph(); + Node firstNode = graphModel.factory().newNode("0"); + directedGraph.addNode(firstNode); + for (int i = 1; i <= 5; i++) { + Node currentNode = graphModel.factory().newNode(((Integer) i).toString()); + directedGraph.addNode(currentNode); + Edge currentEdge = graphModel.factory().newEdge(firstNode, currentNode); + directedGraph.addEdge(currentEdge); + } + + DirectedGraph graph = graphModel.getDirectedGraph(); + Node n1 = graph.getNode("0"); + Node n3 = graph.getNode("2"); + WeightedDegree d = new WeightedDegree(); + d.execute(graph); + double inDegree1 = (Double) n1.getAttribute(WeightedDegree.WINDEGREE); + double outDegree1 = (Double) n1.getAttribute(WeightedDegree.WOUTDEGREE); + double degree3 = (Double) n3.getAttribute(WeightedDegree.WDEGREE); + + assertEquals(inDegree1, 0.0); + assertEquals(outDegree1, 5.0); + assertEquals(degree3, 1.0); + } + + @Test + public void testColumnCreation() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + + WeightedDegree d = new WeightedDegree(); + d.execute(graphModel); + + Assert.assertTrue(graphModel.getNodeTable().hasColumn(WeightedDegree.WDEGREE)); + } + + @Test + public void testColumnReplace() { + GraphModel graphModel = GraphGenerator.generateNullUndirectedGraph(1); + + graphModel.getNodeTable().addColumn(WeightedDegree.WDEGREE, String.class); + + WeightedDegree d = new WeightedDegree(); + d.execute(graphModel); + } +} diff --git a/modules/StatisticsPlugin/src/test/resources/org/gephi/statistics/plugin/5-cliques.graphml b/modules/StatisticsPlugin/src/test/resources/org/gephi/statistics/plugin/5-cliques.graphml new file mode 100644 index 0000000000..2c301e2197 --- /dev/null +++ b/modules/StatisticsPlugin/src/test/resources/org/gephi/statistics/plugin/5-cliques.graphml @@ -0,0 +1,203 @@ + + + + + + + + + + + 150.10880360418344 + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + 2 + + + 2 + + + 2 + + + 2 + + + 2 + + + 3 + + + 3 + + + 3 + + + 3 + + + 3 + + + 4 + + + 4 + + + 4 + + + 4 + + + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/StatisticsPlugin/src/test/resources/org/gephi/statistics/plugin/basic.gexf b/modules/StatisticsPlugin/src/test/resources/org/gephi/statistics/plugin/basic.gexf new file mode 100644 index 0000000000..dc32f04c15 --- /dev/null +++ b/modules/StatisticsPlugin/src/test/resources/org/gephi/statistics/plugin/basic.gexf @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/StatisticsPlugin/src/test/resources/org/gephi/statistics/plugin/football.graphml b/modules/StatisticsPlugin/src/test/resources/org/gephi/statistics/plugin/football.graphml new file mode 100644 index 0000000000..02d020016d --- /dev/null +++ b/modules/StatisticsPlugin/src/test/resources/org/gephi/statistics/plugin/football.graphml @@ -0,0 +1,1591 @@ + + + + + + + + + + + 1850.2102335828238 + + + + 9 + + + 6 + + + 3 + + + 1 + + + 9 + + + 1 + + + 3 + + + 4 + + + 4 + + + 9 + + + 1 + + + 10 + + + 0 + + + 3 + + + 0 + + + 3 + + + 9 + + + 2 + + + 0 + + + 5 + + + 2 + + + 4 + + + 4 + + + 9 + + + 10 + + + 6 + + + 0 + + + 2 + + + 10 + + + 5 + + + 5 + + + 0 + + + 3 + + + 6 + + + 0 + + + 5 + + + 11 + + + 6 + + + 0 + + + 3 + + + 1 + + + 9 + + + 0 + + + 0 + + + 7 + + + 6 + + + 8 + + + 3 + + + 7 + + + 8 + + + 10 + + + 4 + + + 1 + + + 8 + + + 0 + + + 5 + + + 2 + + + 7 + + + 11 + + + 11 + + + 3 + + + 0 + + + 2 + + + 11 + + + 3 + + + 2 + + + 7 + + + 8 + + + 4 + + + 10 + + + 2 + + + 0 + + + 1 + + + 8 + + + 1 + + + 7 + + + 2 + + + 4 + + + 4 + + + 5 + + + 5 + + + 1 + + + 5 + + + 8 + + + 1 + + + 0 + + + 7 + + + 2 + + + 8 + + + 6 + + + 10 + + + 7 + + + 7 + + + 9 + + + 5 + + + 2 + + + 2 + + + 11 + + + 1 + + + 0 + + + 3 + + + 5 + + + 1 + + + 6 + + + 9 + + + 6 + + + 3 + + + 1 + + + 4 + + + 6 + + + 8 + + + 4 + + + 7 + + + 2 + + + 8 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/StatisticsPlugin/src/test/resources/org/gephi/statistics/plugin/moviegalaxies.graphml b/modules/StatisticsPlugin/src/test/resources/org/gephi/statistics/plugin/moviegalaxies.graphml new file mode 100644 index 0000000000..bb58ed2924 --- /dev/null +++ b/modules/StatisticsPlugin/src/test/resources/org/gephi/statistics/plugin/moviegalaxies.graphml @@ -0,0 +1,305 @@ + + + + + + + + + + + 229.04187438186472 + + + + 1 + + + 1 + + + 1 + + + 0 + + + 2 + + + 0 + + + 1 + + + 0 + + + 1 + + + 2 + + + 2 + + + 0 + + + 1 + + + 1 + + + 3 + + + 0 + + + 0 + + + 2 + + + 2 + + + 1 + + + 0 + + + 1 + + + 2 + + + 0 + + + 2 + + + 0 + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/StatisticsPlugin/src/test/resources/org/gephi/statistics/plugin/two-cliques.graphml b/modules/StatisticsPlugin/src/test/resources/org/gephi/statistics/plugin/two-cliques.graphml new file mode 100644 index 0000000000..a6d33688ab --- /dev/null +++ b/modules/StatisticsPlugin/src/test/resources/org/gephi/statistics/plugin/two-cliques.graphml @@ -0,0 +1,90 @@ + + + + + + + + + + + 43.479327707987835 + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + 1 + + + 1 + + + 1 + + + 1 + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/StatisticsPluginUI/pom.xml b/modules/StatisticsPluginUI/pom.xml index dbc9b17ac4..99d16ca5cb 100644 --- a/modules/StatisticsPluginUI/pom.xml +++ b/modules/StatisticsPluginUI/pom.xml @@ -4,22 +4,18 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi statistics-plugin-ui - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm StatisticsPluginUI - - ${project.groupId} - dynamic-api - ${project.groupId} graph-api @@ -49,7 +45,7 @@ - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/ClusteringCoefficientPanel.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/ClusteringCoefficientPanel.java index dfe910ffd4..1fa83ccd43 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/ClusteringCoefficientPanel.java +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/ClusteringCoefficientPanel.java @@ -39,23 +39,39 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.statistics.plugin; import org.gephi.graph.api.GraphController; import org.openide.util.Lookup; /** - * * @author pjmcswee */ public class ClusteringCoefficientPanel extends javax.swing.JPanel { + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.ButtonGroup algorithmButtonGroup; + private javax.swing.ButtonGroup directedButtonGroup; + // End of variables declaration//GEN-END:variables + + // public boolean isBruteForce() { + // return bruteRadioButton.isSelected(); + // } + private javax.swing.JRadioButton directedRadioButton; + + // public void setBruteForce(boolean brute) { + // algorithmButtonGroup.setSelected(brute ? bruteRadioButton.getModel() : triangleRadioButton.getModel(), true); + // } + private org.jdesktop.swingx.JXHeader header; + private javax.swing.JRadioButton undirectedRadioButton; + public ClusteringCoefficientPanel() { initComponents(); - + //Disable directed if the graph is undirecteds GraphController graphController = Lookup.getDefault().lookup(GraphController.class); - if(graphController.getGraphModel().isUndirected()){ + if (graphController.getGraphModel().isUndirected()) { directedRadioButton.setEnabled(false); } } @@ -64,22 +80,16 @@ public boolean isDirected() { return directedRadioButton.isSelected(); } - // public boolean isBruteForce() { - // return bruteRadioButton.isSelected(); - // } - public void setDirected(boolean directed) { - directedButtonGroup.setSelected(directed ? directedRadioButton.getModel() : undirectedRadioButton.getModel(), true); + directedButtonGroup + .setSelected(directed ? directedRadioButton.getModel() : undirectedRadioButton.getModel(), true); if (!directed) { directedRadioButton.setEnabled(false); } } - // public void setBruteForce(boolean brute) { - // algorithmButtonGroup.setSelected(brute ? bruteRadioButton.getModel() : triangleRadioButton.getModel(), true); - // } - - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -95,42 +105,40 @@ private void initComponents() { header = new org.jdesktop.swingx.JXHeader(); directedButtonGroup.add(directedRadioButton); - directedRadioButton.setText(org.openide.util.NbBundle.getMessage(ClusteringCoefficientPanel.class, "ClusteringCoefficientPanel.directedRadioButton.text")); // NOI18N + directedRadioButton.setText(org.openide.util.NbBundle.getMessage(ClusteringCoefficientPanel.class, + "ClusteringCoefficientPanel.directedRadioButton.text")); // NOI18N directedButtonGroup.add(undirectedRadioButton); - undirectedRadioButton.setText(org.openide.util.NbBundle.getMessage(ClusteringCoefficientPanel.class, "ClusteringCoefficientPanel.undirectedRadioButton.text")); // NOI18N + undirectedRadioButton.setText(org.openide.util.NbBundle.getMessage(ClusteringCoefficientPanel.class, + "ClusteringCoefficientPanel.undirectedRadioButton.text")); // NOI18N - header.setDescription(org.openide.util.NbBundle.getMessage(ClusteringCoefficientPanel.class, "ClusteringCoefficientPanel.header.description")); // NOI18N - header.setTitle(org.openide.util.NbBundle.getMessage(ClusteringCoefficientPanel.class, "ClusteringCoefficientPanel.header.title")); // NOI18N + header.setDescription(org.openide.util.NbBundle + .getMessage(ClusteringCoefficientPanel.class, "ClusteringCoefficientPanel.header.description")); // NOI18N + header.setTitle(org.openide.util.NbBundle + .getMessage(ClusteringCoefficientPanel.class, "ClusteringCoefficientPanel.header.title")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(header, javax.swing.GroupLayout.DEFAULT_SIZE, 638, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(undirectedRadioButton) - .addComponent(directedRadioButton)) - .addContainerGap(532, Short.MAX_VALUE)) + .addComponent(header, javax.swing.GroupLayout.DEFAULT_SIZE, 638, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(undirectedRadioButton) + .addComponent(directedRadioButton)) + .addContainerGap(532, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, 88, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(directedRadioButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(undirectedRadioButton) - .addContainerGap(95, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, 88, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addComponent(directedRadioButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(undirectedRadioButton) + .addContainerGap(95, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.ButtonGroup algorithmButtonGroup; - private javax.swing.ButtonGroup directedButtonGroup; - private javax.swing.JRadioButton directedRadioButton; - private org.jdesktop.swingx.JXHeader header; - private javax.swing.JRadioButton undirectedRadioButton; - // End of variables declaration//GEN-END:variables } diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/ClusteringCoefficientUI.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/ClusteringCoefficientUI.java index ee9d824fd4..2d7f6ff266 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/ClusteringCoefficientUI.java +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/ClusteringCoefficientUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.statistics.plugin; import java.text.DecimalFormat; @@ -50,7 +51,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = StatisticsUI.class) @@ -59,11 +59,13 @@ public class ClusteringCoefficientUI implements StatisticsUI { private ClusteringCoefficientPanel panel; private ClusteringCoefficient clusteringCoefficient; + @Override public JPanel getSettingsPanel() { panel = new ClusteringCoefficientPanel(); return panel; } + @Override public void setup(Statistics statistics) { this.clusteringCoefficient = (ClusteringCoefficient) statistics; if (panel != null) { @@ -71,6 +73,7 @@ public void setup(Statistics statistics) { } } + @Override public void unsetup() { if (panel != null) { clusteringCoefficient.setDirected(panel.isDirected()); @@ -79,27 +82,33 @@ public void unsetup() { panel = null; } + @Override public Class getStatisticsClass() { return ClusteringCoefficient.class; } + @Override public String getValue() { DecimalFormat df = new DecimalFormat("###.###"); return "" + df.format(clusteringCoefficient.getAverageClusteringCoefficient()); } + @Override public String getDisplayName() { return NbBundle.getMessage(getClass(), "ClusteringCoefficientUI.name"); } + @Override public String getCategory() { return StatisticsUI.CATEGORY_NODE_OVERVIEW; } + @Override public int getPosition() { return 300; } + @Override public String getShortDescription() { return NbBundle.getMessage(getClass(), "ClusteringCoefficientUI.shortDescription"); } diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/ConnectedComponentPanel.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/ConnectedComponentPanel.java index 3096254309..dca2c402a4 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/ConnectedComponentPanel.java +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/ConnectedComponentPanel.java @@ -39,42 +39,52 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.statistics.plugin; import org.gephi.graph.api.GraphController; import org.openide.util.Lookup; /** - * * @author pjmcswee */ public class ConnectedComponentPanel extends javax.swing.JPanel { - /** Creates new form ConnectedComponentPanel */ + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.ButtonGroup buttonGroup1; + private javax.swing.JRadioButton directedRadioButton; + private org.jdesktop.swingx.JXHeader header; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel2; + private javax.swing.JRadioButton undirectedRadioButton; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form ConnectedComponentPanel + */ public ConnectedComponentPanel() { initComponents(); - + //Disable directed if the graph is undirecteds GraphController graphController = Lookup.getDefault().lookup(GraphController.class); - if(graphController.getGraphModel().isUndirected()){ + if (graphController.getGraphModel().isUndirected()) { directedRadioButton.setEnabled(false); } } - public boolean isDirected() { - return directedRadioButton.isSelected(); + public boolean isDirected() { + return directedRadioButton.isSelected(); } - - public void setDirected(boolean directed) { - buttonGroup1.setSelected(directed ? directedRadioButton.getModel() : undirectedRadioButton.getModel(), true); + buttonGroup1.setSelected(directed ? directedRadioButton.getModel() : undirectedRadioButton.getModel(), true); if (!directed) { directedRadioButton.setEnabled(false); } } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -90,60 +100,58 @@ private void initComponents() { jLabel1 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); - header.setDescription(org.openide.util.NbBundle.getMessage(ConnectedComponentPanel.class, "ConnectedComponentPanel.header.description")); // NOI18N - header.setTitle(org.openide.util.NbBundle.getMessage(ConnectedComponentPanel.class, "ConnectedComponentPanel.header.title")); // NOI18N + header.setDescription(org.openide.util.NbBundle + .getMessage(ConnectedComponentPanel.class, "ConnectedComponentPanel.header.description")); // NOI18N + header.setTitle(org.openide.util.NbBundle + .getMessage(ConnectedComponentPanel.class, "ConnectedComponentPanel.header.title")); // NOI18N buttonGroup1.add(directedRadioButton); - directedRadioButton.setText(org.openide.util.NbBundle.getMessage(ConnectedComponentPanel.class, "ConnectedComponentPanel.directedRadioButton.text")); // NOI18N + directedRadioButton.setText(org.openide.util.NbBundle + .getMessage(ConnectedComponentPanel.class, "ConnectedComponentPanel.directedRadioButton.text")); // NOI18N buttonGroup1.add(undirectedRadioButton); - undirectedRadioButton.setText(org.openide.util.NbBundle.getMessage(ConnectedComponentPanel.class, "ConnectedComponentPanel.undirectedRadioButton.text")); // NOI18N + undirectedRadioButton.setText(org.openide.util.NbBundle + .getMessage(ConnectedComponentPanel.class, "ConnectedComponentPanel.undirectedRadioButton.text")); // NOI18N jLabel1.setForeground(new java.awt.Color(102, 102, 102)); - jLabel1.setText(org.openide.util.NbBundle.getMessage(ConnectedComponentPanel.class, "ConnectedComponentPanel.jLabel1.text")); // NOI18N + jLabel1.setText(org.openide.util.NbBundle + .getMessage(ConnectedComponentPanel.class, "ConnectedComponentPanel.jLabel1.text")); // NOI18N jLabel2.setForeground(new java.awt.Color(102, 102, 102)); - jLabel2.setText(org.openide.util.NbBundle.getMessage(ConnectedComponentPanel.class, "ConnectedComponentPanel.jLabel2.text")); // NOI18N + jLabel2.setText(org.openide.util.NbBundle + .getMessage(ConnectedComponentPanel.class, "ConnectedComponentPanel.jLabel2.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(header, javax.swing.GroupLayout.DEFAULT_SIZE, 565, Short.MAX_VALUE) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(directedRadioButton) - .addComponent(undirectedRadioButton)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 39, Short.MAX_VALUE) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 420, Short.MAX_VALUE))) + .addComponent(header, javax.swing.GroupLayout.DEFAULT_SIZE, 565, Short.MAX_VALUE) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(directedRadioButton) + .addComponent(undirectedRadioButton)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 39, Short.MAX_VALUE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 420, Short.MAX_VALUE))) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(directedRadioButton) - .addComponent(jLabel1)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(undirectedRadioButton) - .addComponent(jLabel2)) - .addContainerGap(148, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, 80, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(directedRadioButton) + .addComponent(jLabel1)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(undirectedRadioButton) + .addComponent(jLabel2)) + .addContainerGap(148, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.ButtonGroup buttonGroup1; - private javax.swing.JRadioButton directedRadioButton; - private org.jdesktop.swingx.JXHeader header; - private javax.swing.JLabel jLabel1; - private javax.swing.JLabel jLabel2; - private javax.swing.JRadioButton undirectedRadioButton; - // End of variables declaration//GEN-END:variables - } diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/ConnectedComponentUI.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/ConnectedComponentUI.java index e6f814a69c..14085fdb12 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/ConnectedComponentUI.java +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/ConnectedComponentUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.statistics.plugin; import java.text.DecimalFormat; @@ -50,7 +51,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Patrick McSweeney */ @ServiceProvider(service = StatisticsUI.class) @@ -59,11 +59,13 @@ public class ConnectedComponentUI implements StatisticsUI { private ConnectedComponentPanel panel; private ConnectedComponents connectedComponents; + @Override public JPanel getSettingsPanel() { panel = new ConnectedComponentPanel(); return panel; } + @Override public void setup(Statistics statistics) { this.connectedComponents = (ConnectedComponents) statistics; if (panel != null) { @@ -71,6 +73,7 @@ public void setup(Statistics statistics) { } } + @Override public void unsetup() { if (panel != null) { connectedComponents.setDirected(panel.isDirected()); @@ -79,27 +82,33 @@ public void unsetup() { panel = null; } + @Override public Class getStatisticsClass() { return ConnectedComponents.class; } + @Override public String getValue() { DecimalFormat df = new DecimalFormat("###.###"); return "" + df.format(connectedComponents.getConnectedComponentsCount()); } + @Override public String getDisplayName() { return NbBundle.getMessage(getClass(), "ConnectedComponentUI.name"); } + @Override public String getCategory() { return StatisticsUI.CATEGORY_NETWORK_OVERVIEW; } + @Override public int getPosition() { return 900; } + @Override public String getShortDescription() { return NbBundle.getMessage(getClass(), "ConnectedComponentUI.shortDescription"); } diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/DegreeDistributionPanel.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/DegreeDistributionPanel.java index c8581be027..823dd81419 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/DegreeDistributionPanel.java +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/DegreeDistributionPanel.java @@ -39,23 +39,31 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.statistics.plugin; import org.gephi.graph.api.GraphController; import org.openide.util.Lookup; /** - * * @author pjmcswee */ public class DegreeDistributionPanel extends javax.swing.JPanel { + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JRadioButton directedRadioButton; + private javax.swing.JRadioButton undirectedRadioButton; + private org.jdesktop.swingx.JXLabel descriptionLabel; + private javax.swing.ButtonGroup directedButtonGroup; + private org.jdesktop.swingx.JXHeader header; + // End of variables declaration//GEN-END:variables + public DegreeDistributionPanel() { initComponents(); - + //Disable directed if the graph is undirecteds GraphController graphController = Lookup.getDefault().lookup(GraphController.class); - if(graphController.getGraphModel().isUndirected()){ + if (graphController.getGraphModel().isUndirected()) { directedRadioButton.setEnabled(false); } } @@ -65,13 +73,15 @@ public boolean isDirected() { } public void setDirected(boolean directed) { - directedButtonGroup.setSelected(directed ? directedRadioButton.getModel() : undirectedRadioButton.getModel(), true); + directedButtonGroup + .setSelected(directed ? directedRadioButton.getModel() : undirectedRadioButton.getModel(), true); if (!directed) { directedRadioButton.setEnabled(false); } } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -87,49 +97,49 @@ private void initComponents() { header = new org.jdesktop.swingx.JXHeader(); directedButtonGroup.add(directedRadioButton); - directedRadioButton.setText(org.openide.util.NbBundle.getMessage(DegreeDistributionPanel.class, "DegreeDistributionPanel.directedRadioButton.text")); // NOI18N + directedRadioButton.setText(org.openide.util.NbBundle + .getMessage(DegreeDistributionPanel.class, "DegreeDistributionPanel.directedRadioButton.text")); // NOI18N directedButtonGroup.add(undirectedRadioButton); - undirectedRadioButton.setText(org.openide.util.NbBundle.getMessage(DegreeDistributionPanel.class, "DegreeDistributionPanel.undirectedRadioButton.text")); // NOI18N + undirectedRadioButton.setText(org.openide.util.NbBundle + .getMessage(DegreeDistributionPanel.class, "DegreeDistributionPanel.undirectedRadioButton.text")); // NOI18N descriptionLabel.setLineWrap(true); - descriptionLabel.setText(org.openide.util.NbBundle.getMessage(DegreeDistributionPanel.class, "DegreeDistributionPanel.descriptionLabel.text")); // NOI18N + descriptionLabel.setText(org.openide.util.NbBundle + .getMessage(DegreeDistributionPanel.class, "DegreeDistributionPanel.descriptionLabel.text")); // NOI18N descriptionLabel.setVerticalAlignment(javax.swing.SwingConstants.TOP); - header.setDescription(org.openide.util.NbBundle.getMessage(DegreeDistributionPanel.class, "DegreeDistributionPanel.header.description")); // NOI18N - header.setTitle(org.openide.util.NbBundle.getMessage(DegreeDistributionPanel.class, "DegreeDistributionPanel.header.title")); // NOI18N + header.setDescription(org.openide.util.NbBundle + .getMessage(DegreeDistributionPanel.class, "DegreeDistributionPanel.header.description")); // NOI18N + header.setTitle(org.openide.util.NbBundle + .getMessage(DegreeDistributionPanel.class, "DegreeDistributionPanel.header.title")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(header, javax.swing.GroupLayout.DEFAULT_SIZE, 439, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(undirectedRadioButton) - .addComponent(directedRadioButton) - .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 399, Short.MAX_VALUE)) - .addContainerGap()) + .addComponent(header, javax.swing.GroupLayout.DEFAULT_SIZE, 439, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(undirectedRadioButton) + .addComponent(directedRadioButton) + .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 399, Short.MAX_VALUE)) + .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(directedRadioButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(undirectedRadioButton) - .addGap(96, 96, 96) - .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addComponent(directedRadioButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(undirectedRadioButton) + .addGap(96, 96, 96) + .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addContainerGap()) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private org.jdesktop.swingx.JXLabel descriptionLabel; - private javax.swing.ButtonGroup directedButtonGroup; - protected javax.swing.JRadioButton directedRadioButton; - private org.jdesktop.swingx.JXHeader header; - protected javax.swing.JRadioButton undirectedRadioButton; - // End of variables declaration//GEN-END:variables } diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/DegreeUI.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/DegreeUI.java index 3aacb3a428..e67e54e225 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/DegreeUI.java +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/DegreeUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.statistics.plugin; import java.text.DecimalFormat; @@ -50,7 +51,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = StatisticsUI.class) @@ -58,39 +58,48 @@ public class DegreeUI implements StatisticsUI { private Degree inOutDegree; + @Override public JPanel getSettingsPanel() { return null; } + @Override public void setup(Statistics statistics) { this.inOutDegree = (Degree) statistics; } + @Override public void unsetup() { inOutDegree = null; } + @Override public Class getStatisticsClass() { return Degree.class; } + @Override public String getValue() { DecimalFormat df = new DecimalFormat("###.###"); return "" + df.format(inOutDegree.getAverageDegree()); } + @Override public String getDisplayName() { return NbBundle.getMessage(getClass(), "InOutDegreeUI.name"); } + @Override public String getCategory() { return StatisticsUI.CATEGORY_NETWORK_OVERVIEW; } + @Override public int getPosition() { return 1; } + @Override public String getShortDescription() { return NbBundle.getMessage(getClass(), "InOutDegreeUI.shortDescription"); } diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/DiameterUI.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/DiameterUI.java index 86e46f4073..0a3610585e 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/DiameterUI.java +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/DiameterUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.statistics.plugin; import java.text.DecimalFormat; @@ -55,11 +56,13 @@ public class DiameterUI implements StatisticsUI { private GraphDistancePanel panel; private GraphDistance graphDistance; + @Override public JPanel getSettingsPanel() { panel = new GraphDistancePanel(); return panel; } + @Override public void setup(Statistics statistics) { this.graphDistance = (GraphDistance) statistics; if (panel != null) { @@ -68,6 +71,7 @@ public void setup(Statistics statistics) { } } + @Override public void unsetup() { if (panel != null) { graphDistance.setDirected(panel.isDirected()); @@ -77,27 +81,33 @@ public void unsetup() { graphDistance = null; } + @Override public Class getStatisticsClass() { return GraphDistance.class; } + @Override public String getValue() { DecimalFormat df = new DecimalFormat("###.###"); return "" + df.format(graphDistance.getDiameter()); } + @Override public String getDisplayName() { return NbBundle.getMessage(getClass(), "DiameterUI.name"); } + @Override public String getCategory() { return StatisticsUI.CATEGORY_NETWORK_OVERVIEW; } + @Override public int getPosition() { return 100; } + @Override public String getShortDescription() { return NbBundle.getMessage(getClass(), "DiameterUI.shortDescription"); } diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/EigenvectorCentralityPanel.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/EigenvectorCentralityPanel.java index 2e33507545..f574dfdf26 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/EigenvectorCentralityPanel.java +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/EigenvectorCentralityPanel.java @@ -39,33 +39,45 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.statistics.plugin; import org.gephi.graph.api.GraphController; +import org.openide.util.Exceptions; import org.openide.util.Lookup; /** - * * @author pjmcswee */ public class EigenvectorCentralityPanel extends javax.swing.JPanel { - /** Creates new form EigenvectorCentralityPanel */ + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.ButtonGroup buttonGroup1; + private javax.swing.JRadioButton directedRadioButton; + private org.jdesktop.swingx.JXHeader header; + private javax.swing.JTextField iterationTextField; + private javax.swing.JLabel jLabel1; + private javax.swing.JRadioButton undirectedRadioButton; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form EigenvectorCentralityPanel + */ public EigenvectorCentralityPanel() { initComponents(); - + //Disable directed if the graph is undirecteds GraphController graphController = Lookup.getDefault().lookup(GraphController.class); - if(graphController.getGraphModel().isUndirected()){ + if (graphController.getGraphModel().isUndirected()) { directedRadioButton.setEnabled(false); } } - public boolean isDirected(){ + public boolean isDirected() { return this.directedRadioButton.isSelected(); } - public void setDirected(boolean pDirected){ + public void setDirected(boolean pDirected) { this.directedRadioButton.setSelected(pDirected); this.undirectedRadioButton.setSelected(!pDirected); if (!pDirected) { @@ -73,20 +85,22 @@ public void setDirected(boolean pDirected){ } } - public void setNumRuns(int mRuns){ - iterationTextField.setText(mRuns+""); - } - - public int getNumRuns(){ - try{ + public int getNumRuns() { + try { int runs = Integer.parseInt(iterationTextField.getText()); return runs; - }catch(Exception e){e.printStackTrace();} + } catch (Exception e) { + Exceptions.printStackTrace(e); + } return 0; } + public void setNumRuns(int mRuns) { + iterationTextField.setText(mRuns + ""); + } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -102,19 +116,25 @@ private void initComponents() { directedRadioButton = new javax.swing.JRadioButton(); undirectedRadioButton = new javax.swing.JRadioButton(); - header.setDescription(org.openide.util.NbBundle.getMessage(EigenvectorCentralityPanel.class, "EigenvectorCentralityPanel.header.description")); // NOI18N - header.setTitle(org.openide.util.NbBundle.getMessage(EigenvectorCentralityPanel.class, "EigenvectorCentralityPanel.header.title")); // NOI18N + header.setDescription(org.openide.util.NbBundle + .getMessage(EigenvectorCentralityPanel.class, "EigenvectorCentralityPanel.header.description")); // NOI18N + header.setTitle(org.openide.util.NbBundle + .getMessage(EigenvectorCentralityPanel.class, "EigenvectorCentralityPanel.header.title")); // NOI18N iterationTextField.setMinimumSize(new java.awt.Dimension(30, 27)); - jLabel1.setText(org.openide.util.NbBundle.getMessage(EigenvectorCentralityPanel.class, "EigenvectorCentralityPanel.labeliterations.text")); // NOI18N + jLabel1.setText(org.openide.util.NbBundle + .getMessage(EigenvectorCentralityPanel.class, "EigenvectorCentralityPanel.labeliterations.text")); // NOI18N buttonGroup1.add(directedRadioButton); - directedRadioButton.setText(org.openide.util.NbBundle.getMessage(EigenvectorCentralityPanel.class, "EigenvectorCentralityPanel.directedButton.text")); // NOI18N + directedRadioButton.setText(org.openide.util.NbBundle + .getMessage(EigenvectorCentralityPanel.class, "EigenvectorCentralityPanel.directedButton.text")); // NOI18N buttonGroup1.add(undirectedRadioButton); - undirectedRadioButton.setText(org.openide.util.NbBundle.getMessage(EigenvectorCentralityPanel.class, "EigenvectorCentralityPanel.undirectedButton.text")); // NOI18N + undirectedRadioButton.setText(org.openide.util.NbBundle.getMessage(EigenvectorCentralityPanel.class, + "EigenvectorCentralityPanel.undirectedButton.text")); // NOI18N undirectedRadioButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { undirectedRadioButtonActionPerformed(evt); } @@ -124,46 +144,40 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(header, javax.swing.GroupLayout.DEFAULT_SIZE, 541, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(directedRadioButton) - .addComponent(undirectedRadioButton) - .addGroup(layout.createSequentialGroup() - .addComponent(jLabel1) - .addGap(8, 8, 8) - .addComponent(iterationTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 174, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addComponent(header, javax.swing.GroupLayout.DEFAULT_SIZE, 541, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(directedRadioButton) + .addComponent(undirectedRadioButton) + .addGroup(layout.createSequentialGroup() + .addComponent(jLabel1) + .addGap(8, 8, 8) + .addComponent(iterationTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 174, + javax.swing.GroupLayout.PREFERRED_SIZE))) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, 80, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(directedRadioButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(undirectedRadioButton) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(iterationTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jLabel1)) - .addContainerGap(66, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, 80, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addComponent(directedRadioButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(undirectedRadioButton) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(iterationTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel1)) + .addContainerGap(66, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - private void undirectedRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_undirectedRadioButtonActionPerformed + private void undirectedRadioButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_undirectedRadioButtonActionPerformed // TODO add your handling code here: }//GEN-LAST:event_undirectedRadioButtonActionPerformed - - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.ButtonGroup buttonGroup1; - private javax.swing.JRadioButton directedRadioButton; - private org.jdesktop.swingx.JXHeader header; - private javax.swing.JTextField iterationTextField; - private javax.swing.JLabel jLabel1; - private javax.swing.JRadioButton undirectedRadioButton; - // End of variables declaration//GEN-END:variables - } diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/EigenvectorCentralityUI.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/EigenvectorCentralityUI.java index 3b3be618ad..7e00d09181 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/EigenvectorCentralityUI.java +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/EigenvectorCentralityUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.statistics.plugin; import javax.swing.JPanel; @@ -49,7 +50,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author pjmcswee */ @ServiceProvider(service = StatisticsUI.class) @@ -59,11 +59,13 @@ public class EigenvectorCentralityUI implements StatisticsUI { private EigenvectorCentralityPanel panel; private EigenvectorCentrality eigen; + @Override public JPanel getSettingsPanel() { panel = new EigenvectorCentralityPanel(); return panel; } + @Override public void setup(Statistics statistics) { this.eigen = (EigenvectorCentrality) statistics; if (panel != null) { @@ -73,6 +75,7 @@ public void setup(Statistics statistics) { } } + @Override public void unsetup() { if (panel != null) { eigen.setNumRuns(panel.getNumRuns()); @@ -83,26 +86,32 @@ public void unsetup() { eigen = null; } + @Override public Class getStatisticsClass() { return EigenvectorCentrality.class; } + @Override public String getValue() { return null; } + @Override public String getDisplayName() { return NbBundle.getMessage(getClass(), "EigenvectorCentralityUI.name"); } + @Override public String getCategory() { return StatisticsUI.CATEGORY_NODE_OVERVIEW; } + @Override public int getPosition() { return 1000; } + @Override public String getShortDescription() { return NbBundle.getMessage(getClass(), "EigenvectorCentralityUI.shortDescription"); } diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/GraphDensityPanel.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/GraphDensityPanel.java index a620eea9c2..e54c2be2e3 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/GraphDensityPanel.java +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/GraphDensityPanel.java @@ -39,23 +39,30 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.statistics.plugin; import org.gephi.graph.api.GraphController; import org.openide.util.Lookup; /** - * * @author pjmcswee */ public class GraphDensityPanel extends javax.swing.JPanel { + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JRadioButton directedRadioButton; + private javax.swing.JRadioButton undirectedRadioButton; + private javax.swing.ButtonGroup directedButtonGroup; + private org.jdesktop.swingx.JXHeader header; + // End of variables declaration//GEN-END:variables + public GraphDensityPanel() { initComponents(); - + //Disable directed if the graph is undirecteds GraphController graphController = Lookup.getDefault().lookup(GraphController.class); - if(graphController.getGraphModel().isUndirected()){ + if (graphController.getGraphModel().isUndirected()) { directedRadioButton.setEnabled(false); } } @@ -65,13 +72,15 @@ public boolean isDirected() { } public void setDirected(boolean directed) { - directedButtonGroup.setSelected(directed ? directedRadioButton.getModel() : undirectedRadioButton.getModel(), true); + directedButtonGroup + .setSelected(directed ? directedRadioButton.getModel() : undirectedRadioButton.getModel(), true); if (!directed) { directedRadioButton.setEnabled(false); } } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -86,41 +95,40 @@ private void initComponents() { header = new org.jdesktop.swingx.JXHeader(); directedButtonGroup.add(directedRadioButton); - directedRadioButton.setText(org.openide.util.NbBundle.getMessage(GraphDensityPanel.class, "GraphDensityPanel.directedRadioButton.text")); // NOI18N + directedRadioButton.setText(org.openide.util.NbBundle + .getMessage(GraphDensityPanel.class, "GraphDensityPanel.directedRadioButton.text")); // NOI18N directedButtonGroup.add(undirectedRadioButton); - undirectedRadioButton.setText(org.openide.util.NbBundle.getMessage(GraphDensityPanel.class, "GraphDensityPanel.undirectedRadioButton.text")); // NOI18N + undirectedRadioButton.setText(org.openide.util.NbBundle + .getMessage(GraphDensityPanel.class, "GraphDensityPanel.undirectedRadioButton.text")); // NOI18N - header.setDescription(org.openide.util.NbBundle.getMessage(GraphDensityPanel.class, "GraphDensityPanel.header.description")); // NOI18N - header.setTitle(org.openide.util.NbBundle.getMessage(GraphDensityPanel.class, "GraphDensityPanel.header.title")); // NOI18N + header.setDescription(org.openide.util.NbBundle + .getMessage(GraphDensityPanel.class, "GraphDensityPanel.header.description")); // NOI18N + header.setTitle( + org.openide.util.NbBundle.getMessage(GraphDensityPanel.class, "GraphDensityPanel.header.title")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(header, javax.swing.GroupLayout.DEFAULT_SIZE, 477, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(undirectedRadioButton) - .addComponent(directedRadioButton)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addComponent(header, javax.swing.GroupLayout.DEFAULT_SIZE, 477, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(undirectedRadioButton) + .addComponent(directedRadioButton)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(directedRadioButton) - .addGap(7, 7, 7) - .addComponent(undirectedRadioButton) - .addContainerGap(84, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, 73, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addComponent(directedRadioButton) + .addGap(7, 7, 7) + .addComponent(undirectedRadioButton) + .addContainerGap(84, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.ButtonGroup directedButtonGroup; - protected javax.swing.JRadioButton directedRadioButton; - private org.jdesktop.swingx.JXHeader header; - protected javax.swing.JRadioButton undirectedRadioButton; - // End of variables declaration//GEN-END:variables } diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/GraphDensityUI.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/GraphDensityUI.java index bbbaed74fe..288d9b240c 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/GraphDensityUI.java +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/GraphDensityUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.statistics.plugin; import java.text.DecimalFormat; @@ -52,16 +53,16 @@ Development and Distribution License("CDDL") (collectively, the @ServiceProvider(service = StatisticsUI.class) public class GraphDensityUI implements StatisticsUI { - /** */ private GraphDensityPanel panel; - /** */ private GraphDensity graphDensity; + @Override public JPanel getSettingsPanel() { panel = new GraphDensityPanel(); return panel; } + @Override public void setup(Statistics statistics) { this.graphDensity = (GraphDensity) statistics; if (panel != null) { @@ -69,6 +70,7 @@ public void setup(Statistics statistics) { } } + @Override public void unsetup() { if (panel != null) { graphDensity.setDirected(panel.isDirected()); @@ -77,27 +79,33 @@ public void unsetup() { panel = null; } + @Override public Class getStatisticsClass() { return GraphDensity.class; } + @Override public String getValue() { DecimalFormat df = new DecimalFormat("###.###"); return "" + df.format(graphDensity.getDensity()); } + @Override public String getDisplayName() { return NbBundle.getMessage(getClass(), "GraphDensityUI.name"); } + @Override public String getCategory() { return StatisticsUI.CATEGORY_NETWORK_OVERVIEW; } + @Override public int getPosition() { return 200; } + @Override public String getShortDescription() { return NbBundle.getMessage(getClass(), "GraphDensityUI.shortDescription"); } diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/GraphDistancePanel.form b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/GraphDistancePanel.form index eb592ea793..5970441e96 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/GraphDistancePanel.form +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/GraphDistancePanel.form @@ -21,7 +21,7 @@ - + @@ -35,30 +35,29 @@ - - - - - - - - - - + - - - + + + + + + + + + + + + + + + + + - - - - - - @@ -89,7 +88,7 @@ - + diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/GraphDistancePanel.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/GraphDistancePanel.java index 598dacd0ce..47f07c18b8 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/GraphDistancePanel.java +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/GraphDistancePanel.java @@ -39,23 +39,38 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.statistics.plugin; import org.gephi.graph.api.GraphController; import org.openide.util.Lookup; /** - * * @author pjmcswee */ public class GraphDistancePanel extends javax.swing.JPanel { + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JRadioButton directedRadioButton; + private javax.swing.JRadioButton undirectedRadioButton; + private org.jdesktop.swingx.JXLabel descriptionLabel; + private javax.swing.ButtonGroup directedButtonGroup; + private org.jdesktop.swingx.JXHeader header; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel jLabel2; + private javax.swing.JLabel jLabel3; + private org.jdesktop.swingx.JXLabel jXLabel1; + private org.jdesktop.swingx.JXLabel jXLabel2; + private org.jdesktop.swingx.JXLabel jXLabel3; + private javax.swing.JCheckBox normalizeButton; + // End of variables declaration//GEN-END:variables + public GraphDistancePanel() { initComponents(); - + //Disable directed if the graph is undirecteds GraphController graphController = Lookup.getDefault().lookup(GraphController.class); - if(graphController.getGraphModel().isUndirected()){ + if (graphController.getGraphModel().isUndirected()) { directedRadioButton.setEnabled(false); } } @@ -65,21 +80,23 @@ public boolean isDirected() { } public void setDirected(boolean directed) { - directedButtonGroup.setSelected(directed ? directedRadioButton.getModel() : undirectedRadioButton.getModel(), true); + directedButtonGroup + .setSelected(directed ? directedRadioButton.getModel() : undirectedRadioButton.getModel(), true); if (!directed) { directedRadioButton.setEnabled(false); } } - public boolean normalize(){ + + public boolean normalize() { return this.normalizeButton.isSelected(); } - - public void doNormalize(boolean pNormalize){ + + public void doNormalize(boolean pNormalize) { this.normalizeButton.setSelected(pNormalize); } - - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -102,124 +119,134 @@ private void initComponents() { normalizeButton = new javax.swing.JCheckBox(); directedButtonGroup.add(directedRadioButton); - directedRadioButton.setText(org.openide.util.NbBundle.getMessage(GraphDistancePanel.class, "GraphDistancePanel.directedRadioButton.text")); // NOI18N + directedRadioButton.setText(org.openide.util.NbBundle + .getMessage(GraphDistancePanel.class, "GraphDistancePanel.directedRadioButton.text")); // NOI18N directedRadioButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { directedRadioButtonActionPerformed(evt); } }); directedButtonGroup.add(undirectedRadioButton); - undirectedRadioButton.setText(org.openide.util.NbBundle.getMessage(GraphDistancePanel.class, "GraphDistancePanel.undirectedRadioButton.text")); // NOI18N + undirectedRadioButton.setText(org.openide.util.NbBundle + .getMessage(GraphDistancePanel.class, "GraphDistancePanel.undirectedRadioButton.text")); // NOI18N - descriptionLabel.setLineWrap(true); - descriptionLabel.setText(org.openide.util.NbBundle.getMessage(GraphDistancePanel.class, "GraphDistancePanel.descriptionLabel.text")); // NOI18N + descriptionLabel.setText(org.openide.util.NbBundle + .getMessage(GraphDistancePanel.class, "GraphDistancePanel.descriptionLabel.text")); // NOI18N descriptionLabel.setVerticalAlignment(javax.swing.SwingConstants.TOP); + descriptionLabel.setLineWrap(true); - header.setDescription(org.openide.util.NbBundle.getMessage(GraphDistancePanel.class, "GraphDistancePanel.header.description")); // NOI18N - header.setTitle(org.openide.util.NbBundle.getMessage(GraphDistancePanel.class, "GraphDistancePanel.header.title")); // NOI18N + header.setDescription(org.openide.util.NbBundle + .getMessage(GraphDistancePanel.class, "GraphDistancePanel.header.description")); // NOI18N + header.setTitle(org.openide.util.NbBundle + .getMessage(GraphDistancePanel.class, "GraphDistancePanel.header.title")); // NOI18N + jXLabel1.setText(org.openide.util.NbBundle + .getMessage(GraphDistancePanel.class, "GraphDistancePanel.jXLabel1.text")); // NOI18N jXLabel1.setLineWrap(true); - jXLabel1.setText(org.openide.util.NbBundle.getMessage(GraphDistancePanel.class, "GraphDistancePanel.jXLabel1.text")); // NOI18N + jXLabel2.setText(org.openide.util.NbBundle + .getMessage(GraphDistancePanel.class, "GraphDistancePanel.jXLabel2.text")); // NOI18N jXLabel2.setLineWrap(true); - jXLabel2.setText(org.openide.util.NbBundle.getMessage(GraphDistancePanel.class, "GraphDistancePanel.jXLabel2.text")); // NOI18N + jXLabel3.setText(org.openide.util.NbBundle + .getMessage(GraphDistancePanel.class, "GraphDistancePanel.jXLabel3.text")); // NOI18N jXLabel3.setLineWrap(true); - jXLabel3.setText(org.openide.util.NbBundle.getMessage(GraphDistancePanel.class, "GraphDistancePanel.jXLabel3.text")); // NOI18N jLabel1.setFont(jLabel1.getFont().deriveFont(jLabel1.getFont().getStyle() | java.awt.Font.BOLD)); jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); - jLabel1.setText(org.openide.util.NbBundle.getMessage(GraphDistancePanel.class, "GraphDistancePanel.jLabel1.text")); // NOI18N + jLabel1.setText(org.openide.util.NbBundle + .getMessage(GraphDistancePanel.class, "GraphDistancePanel.jLabel1.text")); // NOI18N jLabel2.setFont(jLabel2.getFont().deriveFont(jLabel2.getFont().getStyle() | java.awt.Font.BOLD)); - jLabel2.setText(org.openide.util.NbBundle.getMessage(GraphDistancePanel.class, "GraphDistancePanel.jLabel2.text")); // NOI18N + jLabel2.setText(org.openide.util.NbBundle + .getMessage(GraphDistancePanel.class, "GraphDistancePanel.jLabel2.text")); // NOI18N jLabel3.setFont(jLabel3.getFont().deriveFont(jLabel3.getFont().getStyle() | java.awt.Font.BOLD)); - jLabel3.setText(org.openide.util.NbBundle.getMessage(GraphDistancePanel.class, "GraphDistancePanel.jLabel3.text")); // NOI18N + jLabel3.setText(org.openide.util.NbBundle + .getMessage(GraphDistancePanel.class, "GraphDistancePanel.jLabel3.text")); // NOI18N jLabel3.setVerticalAlignment(javax.swing.SwingConstants.TOP); jLabel3.setHorizontalTextPosition(javax.swing.SwingConstants.LEADING); - normalizeButton.setText(org.openide.util.NbBundle.getMessage(GraphDistancePanel.class, "GraphDistancePanel.normalizeButton.text")); // NOI18N + normalizeButton.setText(org.openide.util.NbBundle + .getMessage(GraphDistancePanel.class, "GraphDistancePanel.normalizeButton.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGap(262, 262, 262) - .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addContainerGap()) - .addGroup(layout.createSequentialGroup() - .addComponent(directedRadioButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(normalizeButton) - .addGap(165, 165, 165)))) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(undirectedRadioButton) - .addGap(0, 0, Short.MAX_VALUE)) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jLabel2) - .addComponent(jLabel1) - .addComponent(jLabel3)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jXLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jXLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jXLabel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) - .addContainerGap()) + .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(262, 262, 262) + .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addComponent(directedRadioButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(normalizeButton) + .addGap(165, 165, 165)) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(undirectedRadioButton) + .addGap(0, 0, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel2) + .addComponent(jLabel1) + .addComponent(jLabel3)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jXLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jXLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jXLabel1, javax.swing.GroupLayout.Alignment.TRAILING, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, + Short.MAX_VALUE)))) + .addContainerGap()))) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(directedRadioButton) - .addComponent(normalizeButton)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(undirectedRadioButton) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jLabel1) - .addComponent(jXLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jXLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jLabel2)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jXLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(20, 20, 20) - .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(directedRadioButton) + .addComponent(normalizeButton)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(undirectedRadioButton) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jLabel1) + .addComponent(jXLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jXLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel2)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(jLabel3, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jXLabel3, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(20, 20, 20) + .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 32, Short.MAX_VALUE) + .addContainerGap()) ); }// //GEN-END:initComponents - private void directedRadioButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_directedRadioButtonActionPerformed + private void directedRadioButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_directedRadioButtonActionPerformed // TODO add your handling code here: -}//GEN-LAST:event_directedRadioButtonActionPerformed - // Variables declaration - do not modify//GEN-BEGIN:variables - private org.jdesktop.swingx.JXLabel descriptionLabel; - private javax.swing.ButtonGroup directedButtonGroup; - protected javax.swing.JRadioButton directedRadioButton; - private org.jdesktop.swingx.JXHeader header; - private javax.swing.JLabel jLabel1; - private javax.swing.JLabel jLabel2; - private javax.swing.JLabel jLabel3; - private org.jdesktop.swingx.JXLabel jXLabel1; - private org.jdesktop.swingx.JXLabel jXLabel2; - private org.jdesktop.swingx.JXLabel jXLabel3; - private javax.swing.JCheckBox normalizeButton; - protected javax.swing.JRadioButton undirectedRadioButton; - // End of variables declaration//GEN-END:variables + }//GEN-LAST:event_directedRadioButtonActionPerformed } diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/HitsPanel.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/HitsPanel.java index 2628cfc8d9..3675dc2015 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/HitsPanel.java +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/HitsPanel.java @@ -39,23 +39,34 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.statistics.plugin; import org.gephi.graph.api.GraphController; import org.openide.util.Lookup; /** - * * @author pjmcswee */ public class HitsPanel extends javax.swing.JPanel { + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JRadioButton directedRadioButton; + private javax.swing.JTextField epsilonTextField; + private javax.swing.JRadioButton undirectedRadioButton; + private org.jdesktop.swingx.JXLabel descriptionLabel; + private javax.swing.ButtonGroup directedButtonGroup; + private org.jdesktop.swingx.JXLabel epsilonLabel; + private org.jdesktop.swingx.JXHeader header; + private javax.swing.JLabel labelEpsilon; + // End of variables declaration//GEN-END:variables + public HitsPanel() { initComponents(); - + //Disable directed if the graph is undirecteds GraphController graphController = Lookup.getDefault().lookup(GraphController.class); - if(graphController.getGraphModel().isUndirected()){ + if (graphController.getGraphModel().isUndirected()) { directedRadioButton.setEnabled(false); } } @@ -64,6 +75,14 @@ public boolean isDirected() { return directedRadioButton.isSelected(); } + public void setDirected(boolean directed) { + directedButtonGroup + .setSelected(directed ? directedRadioButton.getModel() : undirectedRadioButton.getModel(), true); + if (!directed) { + directedRadioButton.setEnabled(false); + } + } + public double getEpsilon() { try { return Double.parseDouble(epsilonTextField.getText()); @@ -72,18 +91,12 @@ public double getEpsilon() { return 0.0001; } - public void setDirected(boolean directed) { - directedButtonGroup.setSelected(directed ? directedRadioButton.getModel() : undirectedRadioButton.getModel(), true); - if (!directed) { - directedRadioButton.setEnabled(false); - } - } - public void setEpsilon(double epsilon) { epsilonTextField.setText(Double.toString(epsilon)); } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -101,79 +114,83 @@ private void initComponents() { header = new org.jdesktop.swingx.JXHeader(); epsilonLabel = new org.jdesktop.swingx.JXLabel(); - labelEpsilon.setText(org.openide.util.NbBundle.getMessage(HitsPanel.class, "HitsPanel.labelEpsilon.text")); // NOI18N + labelEpsilon + .setText(org.openide.util.NbBundle.getMessage(HitsPanel.class, "HitsPanel.labelEpsilon.text")); // NOI18N - epsilonTextField.setText(org.openide.util.NbBundle.getMessage(HitsPanel.class, "HitsPanel.epsilonTextField.text")); // NOI18N + epsilonTextField.setText( + org.openide.util.NbBundle.getMessage(HitsPanel.class, "HitsPanel.epsilonTextField.text")); // NOI18N epsilonTextField.setMinimumSize(new java.awt.Dimension(59, 25)); epsilonTextField.setPreferredSize(new java.awt.Dimension(59, 25)); directedButtonGroup.add(undirectedRadioButton); - undirectedRadioButton.setText(org.openide.util.NbBundle.getMessage(HitsPanel.class, "HitsPanel.undirectedRadioButton.text")); // NOI18N + undirectedRadioButton.setText( + org.openide.util.NbBundle.getMessage(HitsPanel.class, "HitsPanel.undirectedRadioButton.text")); // NOI18N directedButtonGroup.add(directedRadioButton); - directedRadioButton.setText(org.openide.util.NbBundle.getMessage(HitsPanel.class, "HitsPanel.directedRadioButton.text")); // NOI18N + directedRadioButton.setText( + org.openide.util.NbBundle.getMessage(HitsPanel.class, "HitsPanel.directedRadioButton.text")); // NOI18N - descriptionLabel.setLineWrap(true); - descriptionLabel.setText(org.openide.util.NbBundle.getMessage(HitsPanel.class, "HitsPanel.descriptionLabel.text")); // NOI18N + descriptionLabel.setText( + org.openide.util.NbBundle.getMessage(HitsPanel.class, "HitsPanel.descriptionLabel.text")); // NOI18N descriptionLabel.setVerticalAlignment(javax.swing.SwingConstants.TOP); + descriptionLabel.setLineWrap(true); - header.setDescription(org.openide.util.NbBundle.getMessage(HitsPanel.class, "HitsPanel.header.description")); // NOI18N + header.setDescription( + org.openide.util.NbBundle.getMessage(HitsPanel.class, "HitsPanel.header.description")); // NOI18N header.setTitle(org.openide.util.NbBundle.getMessage(HitsPanel.class, "HitsPanel.header.title")); // NOI18N epsilonLabel.setForeground(new java.awt.Color(102, 102, 102)); + epsilonLabel + .setText(org.openide.util.NbBundle.getMessage(HitsPanel.class, "HitsPanel.epsilonLabel.text")); // NOI18N + epsilonLabel.setFont(epsilonLabel.getFont().deriveFont(epsilonLabel.getFont().getSize() - 1f)); epsilonLabel.setLineWrap(true); - epsilonLabel.setText(org.openide.util.NbBundle.getMessage(HitsPanel.class, "HitsPanel.epsilonLabel.text")); // NOI18N - epsilonLabel.setFont(epsilonLabel.getFont().deriveFont(epsilonLabel.getFont().getSize()-1f)); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(header, javax.swing.GroupLayout.DEFAULT_SIZE, 662, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 622, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(directedRadioButton) - .addComponent(undirectedRadioButton)) - .addGap(92, 92, 92) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addGroup(layout.createSequentialGroup() - .addComponent(labelEpsilon) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(epsilonTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(143, 143, 143)) - .addComponent(epsilonLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) - .addContainerGap()) + .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, 662, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 622, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(directedRadioButton) + .addComponent(undirectedRadioButton)) + .addGap(92, 92, 92) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addGroup(layout.createSequentialGroup() + .addComponent(labelEpsilon) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(epsilonTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(143, 143, 143)) + .addComponent(epsilonLabel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) + .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(16, 16, 16) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(directedRadioButton) - .addComponent(labelEpsilon) - .addComponent(epsilonTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(4, 4, 4) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(undirectedRadioButton) - .addComponent(epsilonLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(59, 59, 59) - .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(16, 16, 16) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(directedRadioButton) + .addComponent(labelEpsilon) + .addComponent(epsilonTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(4, 4, 4) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(undirectedRadioButton) + .addComponent(epsilonLabel, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGap(59, 59, 59) + .addComponent(descriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addContainerGap()) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private org.jdesktop.swingx.JXLabel descriptionLabel; - private javax.swing.ButtonGroup directedButtonGroup; - protected javax.swing.JRadioButton directedRadioButton; - private org.jdesktop.swingx.JXLabel epsilonLabel; - protected javax.swing.JTextField epsilonTextField; - private org.jdesktop.swingx.JXHeader header; - private javax.swing.JLabel labelEpsilon; - protected javax.swing.JRadioButton undirectedRadioButton; - // End of variables declaration//GEN-END:variables + } diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/HitsUI.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/HitsUI.java index 66e042018e..13ec53c92c 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/HitsUI.java +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/HitsUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.statistics.plugin; import javax.swing.JPanel; @@ -49,7 +50,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = StatisticsUI.class) @@ -59,11 +59,13 @@ public class HitsUI implements StatisticsUI { private HitsPanel panel; private Hits hits; + @Override public JPanel getSettingsPanel() { panel = new HitsPanel(); return panel; } + @Override public void setup(Statistics statistics) { this.hits = (Hits) statistics; if (panel != null) { @@ -73,6 +75,7 @@ public void setup(Statistics statistics) { } } + @Override public void unsetup() { if (panel != null) { hits.setEpsilon(panel.getEpsilon()); @@ -83,33 +86,39 @@ public void unsetup() { hits = null; } + @Override public Class getStatisticsClass() { return Hits.class; } + @Override public String getValue() { return null; } + @Override public String getDisplayName() { return NbBundle.getMessage(getClass(), "HitsUI.name"); } + @Override public String getCategory() { return StatisticsUI.CATEGORY_NETWORK_OVERVIEW; } + @Override public int getPosition() { return 500; } + @Override public String getShortDescription() { return NbBundle.getMessage(getClass(), "HitsUI.shortDescription"); } private static class StatSettings { - private double epsilon = 0.0001; + private double epsilon = 1e-8; private void save(Hits stat) { this.epsilon = stat.getEpsilon(); diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/ModularityPanel.form b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/ModularityPanel.form index bed871ee80..3b2d70ac25 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/ModularityPanel.form +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/ModularityPanel.form @@ -18,31 +18,28 @@ + - - - + + + - + + + + + + + + - - - - - - - - - - - - - - - - + + + + + @@ -74,8 +71,19 @@ - - + + + + + + + + + + + + + @@ -91,11 +99,11 @@ - + @@ -167,7 +175,6 @@ - @@ -177,10 +184,33 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/ModularityPanel.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/ModularityPanel.java index 7a04dc47de..5e1f32013b 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/ModularityPanel.java +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/ModularityPanel.java @@ -39,14 +39,28 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.statistics.plugin; /** - * * @author pjmcswee */ public class ModularityPanel extends javax.swing.JPanel { + // Variables declaration - do not modify//GEN-BEGIN:variables + private org.jdesktop.swingx.JXLabel desriptionLabel; + private org.jdesktop.swingx.JXHeader header; + private javax.swing.JTextField initialModularityClassIndexTextField; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel labelEdgeWeight; + private javax.swing.JLabel labelInitialModularityClassIndex; + private javax.swing.JLabel labelRandomize; + private org.jdesktop.swingx.JXLabel labelResolution; + private javax.swing.JCheckBox randomizeCheckbox; + private javax.swing.JTextField resolutionTextField; + private javax.swing.JCheckBox useWeightCheckbox; + // End of variables declaration//GEN-END:variables + public ModularityPanel() { initComponents(); } @@ -66,21 +80,37 @@ public boolean useWeight() { public void setUseWeight(boolean useWeight) { useWeightCheckbox.setSelected(useWeight); } - + public double resolution() { try { return Double.valueOf(resolutionTextField.getText()); } catch (Exception e) { - + } - + return 1.0; } public void setResolution(double resolution) { resolutionTextField.setText(String.valueOf(resolution)); } - /** This method is called from within the constructor to + + public void setInitialModularityClassIndex(int initialModularityClassIndex){ + initialModularityClassIndexTextField.setText(String.valueOf(initialModularityClassIndex)); + } + + public int getInitialModularityClassIndex(){ + try { + return Integer.valueOf(initialModularityClassIndexTextField.getText()); + } catch (Exception e) { + + } + + return 0; + } + + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -98,13 +128,15 @@ private void initComponents() { labelEdgeWeight = new javax.swing.JLabel(); labelRandomize = new javax.swing.JLabel(); labelResolution = new org.jdesktop.swingx.JXLabel(); + labelInitialModularityClassIndex = new javax.swing.JLabel(); + initialModularityClassIndexTextField = new javax.swing.JTextField(); randomizeCheckbox.setText(org.openide.util.NbBundle.getMessage(ModularityPanel.class, "ModularityPanel.randomizeCheckbox.text")); // NOI18N randomizeCheckbox.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT); - desriptionLabel.setLineWrap(true); desriptionLabel.setText(org.openide.util.NbBundle.getMessage(ModularityPanel.class, "ModularityPanel.desriptionLabel.text")); // NOI18N desriptionLabel.setVerticalAlignment(javax.swing.SwingConstants.TOP); + desriptionLabel.setLineWrap(true); header.setDescription(org.openide.util.NbBundle.getMessage(ModularityPanel.class, "ModularityPanel.header.description")); // NOI18N header.setTitle(org.openide.util.NbBundle.getMessage(ModularityPanel.class, "ModularityPanel.header.title")); // NOI18N @@ -125,39 +157,47 @@ private void initComponents() { labelRandomize.setText(org.openide.util.NbBundle.getMessage(ModularityPanel.class, "ModularityPanel.labelRandomize.text")); // NOI18N labelResolution.setForeground(new java.awt.Color(102, 102, 102)); - labelResolution.setLineWrap(true); labelResolution.setText(org.openide.util.NbBundle.getMessage(ModularityPanel.class, "ModularityPanel.labelResolution.text")); // NOI18N labelResolution.setVerticalAlignment(javax.swing.SwingConstants.TOP); labelResolution.setFont(labelResolution.getFont().deriveFont(labelResolution.getFont().getSize()-1f)); + labelResolution.setLineWrap(true); labelResolution.setPreferredSize(new java.awt.Dimension(500, 12)); + labelInitialModularityClassIndex.setText(org.openide.util.NbBundle.getMessage(ModularityPanel.class, "ModularityPanel.labelInitialModularityClassIndex.text")); // NOI18N + + initialModularityClassIndexTextField.setText(org.openide.util.NbBundle.getMessage(ModularityPanel.class, "ModularityPanel.initialModularityClassIndexTextField.text")); // NOI18N + initialModularityClassIndexTextField.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + initialModularityClassIndexTextFieldActionPerformed(evt); + } + }); + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() + .addGap(20, 20, 20) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() - .addGap(63, 63, 63) - .addComponent(desriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGap(381, 381, 381)) + .addComponent(randomizeCheckbox) + .addGap(25, 25, 25) + .addComponent(labelRandomize, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addGroup(layout.createSequentialGroup() - .addGap(20, 20, 20) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(useWeightCheckbox) + .addComponent(resolutionTextField, javax.swing.GroupLayout.DEFAULT_SIZE, 108, Short.MAX_VALUE) + .addComponent(jLabel1) + .addComponent(labelInitialModularityClassIndex, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(initialModularityClassIndexTextField)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(labelResolution, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE) + .addComponent(labelEdgeWeight, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(layout.createSequentialGroup() - .addComponent(randomizeCheckbox) - .addGap(25, 25, 25) - .addComponent(labelRandomize, javax.swing.GroupLayout.DEFAULT_SIZE, 386, Short.MAX_VALUE)) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(useWeightCheckbox) - .addComponent(resolutionTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 108, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jLabel1)) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(labelResolution, javax.swing.GroupLayout.DEFAULT_SIZE, 0, Short.MAX_VALUE) - .addComponent(labelEdgeWeight, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))))) + .addComponent(desriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGap(381, 381, 381))))) .addContainerGap()) ); layout.setVerticalGroup( @@ -179,19 +219,22 @@ private void initComponents() { .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(resolutionTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addComponent(labelResolution, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addGap(26, 26, 26) - .addComponent(desriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(26, 26, 26) + .addComponent(desriptionLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 60, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addGap(18, 18, 18) + .addComponent(labelInitialModularityClassIndex) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(initialModularityClassIndexTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, Short.MAX_VALUE)))) ); + + initialModularityClassIndexTextField.getAccessibleContext().setAccessibleDescription(org.openide.util.NbBundle.getMessage(ModularityPanel.class, "ModularityPanel.initialModularityClassIndexTextField.AccessibleContext.accessibleDescription")); // NOI18N }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private org.jdesktop.swingx.JXLabel desriptionLabel; - private org.jdesktop.swingx.JXHeader header; - private javax.swing.JLabel jLabel1; - private javax.swing.JLabel labelEdgeWeight; - private javax.swing.JLabel labelRandomize; - private org.jdesktop.swingx.JXLabel labelResolution; - private javax.swing.JCheckBox randomizeCheckbox; - private javax.swing.JTextField resolutionTextField; - private javax.swing.JCheckBox useWeightCheckbox; - // End of variables declaration//GEN-END:variables + + private void initialModularityClassIndexTextFieldActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_initialModularityClassIndexTextFieldActionPerformed + // TODO add your handling code here: + }//GEN-LAST:event_initialModularityClassIndexTextFieldActionPerformed } diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/ModularityUI.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/ModularityUI.java index 32adbd8d5b..fd62b62fd8 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/ModularityUI.java +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/ModularityUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.statistics.plugin; import java.text.DecimalFormat; @@ -56,11 +57,13 @@ public class ModularityUI implements StatisticsUI { private ModularityPanel panel; private Modularity mod; + @Override public JPanel getSettingsPanel() { panel = new ModularityPanel(); return panel; } + @Override public void setup(Statistics statistics) { this.mod = (Modularity) statistics; if (panel != null) { @@ -68,41 +71,50 @@ public void setup(Statistics statistics) { panel.setRandomize(mod.getRandom()); panel.setUseWeight(mod.getUseWeight()); panel.setResolution(mod.getResolution()); + panel.setInitialModularityClassIndex(mod.getInitialModularityClassIndex()); } } + @Override public void unsetup() { if (panel != null) { mod.setRandom(panel.isRandomize()); mod.setUseWeight(panel.useWeight()); mod.setResolution(panel.resolution()); + mod.setInitialModularityClassIndex(panel.getInitialModularityClassIndex()); settings.save(mod); } mod = null; panel = null; } + @Override public Class getStatisticsClass() { return Modularity.class; } + @Override public String getValue() { DecimalFormat df = new DecimalFormat("###.###"); return "" + df.format(mod.getModularity()); } + @Override public String getDisplayName() { return NbBundle.getMessage(getClass(), "ModularityUI.name"); } + @Override public String getCategory() { - return StatisticsUI.CATEGORY_NETWORK_OVERVIEW; + return StatisticsUI.CATEGORY_COMMUNITY_DETECTION; } + @Override public int getPosition() { return 600; } + @Override public String getShortDescription() { return NbBundle.getMessage(getClass(), "ModularityUI.shortDescription"); } diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/PageRankPanel.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/PageRankPanel.java index 214bdce49e..6e81a62484 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/PageRankPanel.java +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/PageRankPanel.java @@ -39,23 +39,37 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.statistics.plugin; import org.gephi.graph.api.GraphController; import org.openide.util.Lookup; /** - * * @author pjmcswee */ public class PageRankPanel extends javax.swing.JPanel { + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JRadioButton directedRadioButton; + private javax.swing.JTextField epsilonTextField; + private javax.swing.JTextField probTextField; + private javax.swing.JRadioButton undirectedRadioButton; + private javax.swing.ButtonGroup directedButtonGroup; + private javax.swing.JCheckBox edgeWeightCheckbox; + private org.jdesktop.swingx.JXHeader jXHeader1; + private org.jdesktop.swingx.JXLabel jXLabel1; + private org.jdesktop.swingx.JXLabel jXLabel2; + private javax.swing.JLabel labelE; + private javax.swing.JLabel labelP; + // End of variables declaration//GEN-END:variables + public PageRankPanel() { initComponents(); - + //Disable directed if the graph is undirecteds GraphController graphController = Lookup.getDefault().lookup(GraphController.class); - if(graphController.getGraphModel().isUndirected()){ + if (graphController.getGraphModel().isUndirected()) { directedRadioButton.setEnabled(false); } } @@ -64,6 +78,14 @@ public boolean isDirected() { return directedRadioButton.isSelected(); } + public void setDirected(boolean directed) { + directedButtonGroup + .setSelected(directed ? directedRadioButton.getModel() : undirectedRadioButton.getModel(), true); + if (!directed) { + directedRadioButton.setEnabled(false); + } + } + public double getEpsilon() { try { return Double.parseDouble(epsilonTextField.getText()); @@ -72,6 +94,10 @@ public double getEpsilon() { return 0.001; } + public void setEpsilon(double epsilon) { + epsilonTextField.setText(Double.toString(epsilon)); + } + public double getProbability() { try { return Double.parseDouble(probTextField.getText()); @@ -80,6 +106,10 @@ public double getProbability() { return 0.85; } + public void setProbability(double probability) { + probTextField.setText(Double.toString(probability)); + } + public boolean isEdgeWeight() { return edgeWeightCheckbox.isSelected(); } @@ -88,22 +118,8 @@ public void setEdgeWeight(boolean edgeWeight) { edgeWeightCheckbox.setSelected(edgeWeight); } - public void setDirected(boolean directed) { - directedButtonGroup.setSelected(directed ? directedRadioButton.getModel() : undirectedRadioButton.getModel(), true); - if (!directed) { - directedRadioButton.setEnabled(false); - } - } - - public void setEpsilon(double epsilon) { - epsilonTextField.setText(Double.toString(epsilon)); - } - - public void setProbability(double probability) { - probTextField.setText(Double.toString(probability)); - } - - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -124,104 +140,112 @@ private void initComponents() { jXLabel2 = new org.jdesktop.swingx.JXLabel(); edgeWeightCheckbox = new javax.swing.JCheckBox(); - labelP.setText(org.openide.util.NbBundle.getMessage(PageRankPanel.class, "PageRankPanel.labelP.text")); // NOI18N + labelP + .setText(org.openide.util.NbBundle.getMessage(PageRankPanel.class, "PageRankPanel.labelP.text")); // NOI18N - labelE.setText(org.openide.util.NbBundle.getMessage(PageRankPanel.class, "PageRankPanel.labelE.text")); // NOI18N + labelE + .setText(org.openide.util.NbBundle.getMessage(PageRankPanel.class, "PageRankPanel.labelE.text")); // NOI18N - probTextField.setText(org.openide.util.NbBundle.getMessage(PageRankPanel.class, "PageRankPanel.probTextField.text")); // NOI18N + probTextField.setText( + org.openide.util.NbBundle.getMessage(PageRankPanel.class, "PageRankPanel.probTextField.text")); // NOI18N probTextField.setMinimumSize(new java.awt.Dimension(59, 25)); probTextField.setPreferredSize(new java.awt.Dimension(59, 25)); - epsilonTextField.setText(org.openide.util.NbBundle.getMessage(PageRankPanel.class, "PageRankPanel.epsilonTextField.text")); // NOI18N + epsilonTextField.setText( + org.openide.util.NbBundle.getMessage(PageRankPanel.class, "PageRankPanel.epsilonTextField.text")); // NOI18N epsilonTextField.setMinimumSize(new java.awt.Dimension(59, 25)); epsilonTextField.setPreferredSize(new java.awt.Dimension(59, 25)); directedButtonGroup.add(undirectedRadioButton); - undirectedRadioButton.setText(org.openide.util.NbBundle.getMessage(PageRankPanel.class, "PageRankPanel.undirectedRadioButton.text")); // NOI18N + undirectedRadioButton.setText(org.openide.util.NbBundle + .getMessage(PageRankPanel.class, "PageRankPanel.undirectedRadioButton.text")); // NOI18N directedButtonGroup.add(directedRadioButton); - directedRadioButton.setText(org.openide.util.NbBundle.getMessage(PageRankPanel.class, "PageRankPanel.directedRadioButton.text")); // NOI18N + directedRadioButton.setText(org.openide.util.NbBundle + .getMessage(PageRankPanel.class, "PageRankPanel.directedRadioButton.text")); // NOI18N - jXHeader1.setDescription(org.openide.util.NbBundle.getMessage(PageRankPanel.class, "PageRankPanel.jXHeader1.description")); // NOI18N - jXHeader1.setTitle(org.openide.util.NbBundle.getMessage(PageRankPanel.class, "PageRankPanel.jXHeader1.title")); // NOI18N + jXHeader1.setDescription( + org.openide.util.NbBundle.getMessage(PageRankPanel.class, "PageRankPanel.jXHeader1.description")); // NOI18N + jXHeader1.setTitle( + org.openide.util.NbBundle.getMessage(PageRankPanel.class, "PageRankPanel.jXHeader1.title")); // NOI18N jXLabel1.setForeground(new java.awt.Color(102, 102, 102)); jXLabel1.setLineWrap(true); - jXLabel1.setText(org.openide.util.NbBundle.getMessage(PageRankPanel.class, "PageRankPanel.jXLabel1.text")); // NOI18N - jXLabel1.setFont(jXLabel1.getFont().deriveFont(jXLabel1.getFont().getSize()-1f)); + jXLabel1.setText( + org.openide.util.NbBundle.getMessage(PageRankPanel.class, "PageRankPanel.jXLabel1.text")); // NOI18N + jXLabel1.setFont(jXLabel1.getFont().deriveFont(jXLabel1.getFont().getSize() - 1f)); jXLabel2.setForeground(new java.awt.Color(102, 102, 102)); jXLabel2.setLineWrap(true); - jXLabel2.setText(org.openide.util.NbBundle.getMessage(PageRankPanel.class, "PageRankPanel.jXLabel2.text")); // NOI18N - jXLabel2.setFont(jXLabel2.getFont().deriveFont(jXLabel2.getFont().getSize()-1f)); + jXLabel2.setText( + org.openide.util.NbBundle.getMessage(PageRankPanel.class, "PageRankPanel.jXLabel2.text")); // NOI18N + jXLabel2.setFont(jXLabel2.getFont().deriveFont(jXLabel2.getFont().getSize() - 1f)); - edgeWeightCheckbox.setText(org.openide.util.NbBundle.getMessage(PageRankPanel.class, "PageRankPanel.edgeWeightCheckbox.text")); // NOI18N + edgeWeightCheckbox.setText(org.openide.util.NbBundle + .getMessage(PageRankPanel.class, "PageRankPanel.edgeWeightCheckbox.text")); // NOI18N edgeWeightCheckbox.setHorizontalTextPosition(javax.swing.SwingConstants.LEADING); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jXHeader1, javax.swing.GroupLayout.DEFAULT_SIZE, 605, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(directedRadioButton) - .addComponent(undirectedRadioButton)) - .addGap(45, 45, 45) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(edgeWeightCheckbox) - .addContainerGap()) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(labelP) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(probTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGroup(layout.createSequentialGroup() - .addComponent(labelE) - .addGap(45, 45, 45) - .addComponent(epsilonTextField, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(jXLabel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jXLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addGap(10, 10, 10)))) + .addComponent(jXHeader1, javax.swing.GroupLayout.DEFAULT_SIZE, 605, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(directedRadioButton) + .addComponent(undirectedRadioButton)) + .addGap(45, 45, 45) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(edgeWeightCheckbox) + .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(labelP) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(probTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createSequentialGroup() + .addComponent(labelE) + .addGap(45, 45, 45) + .addComponent(epsilonTextField, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(jXLabel1, javax.swing.GroupLayout.Alignment.TRAILING, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, + Short.MAX_VALUE) + .addComponent(jXLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGap(10, 10, 10)))) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(jXHeader1, javax.swing.GroupLayout.PREFERRED_SIZE, 73, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(directedRadioButton) - .addComponent(labelP) - .addComponent(probTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(undirectedRadioButton) - .addComponent(jXLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(labelE) - .addComponent(epsilonTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jXLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(edgeWeightCheckbox) - .addContainerGap(36, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addComponent(jXHeader1, javax.swing.GroupLayout.PREFERRED_SIZE, 73, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(directedRadioButton) + .addComponent(labelP) + .addComponent(probTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 21, + javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(undirectedRadioButton) + .addComponent(jXLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelE) + .addComponent(epsilonTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 21, + javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jXLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addComponent(edgeWeightCheckbox) + .addContainerGap(36, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.ButtonGroup directedButtonGroup; - protected javax.swing.JRadioButton directedRadioButton; - private javax.swing.JCheckBox edgeWeightCheckbox; - protected javax.swing.JTextField epsilonTextField; - private org.jdesktop.swingx.JXHeader jXHeader1; - private org.jdesktop.swingx.JXLabel jXLabel1; - private org.jdesktop.swingx.JXLabel jXLabel2; - private javax.swing.JLabel labelE; - private javax.swing.JLabel labelP; - protected javax.swing.JTextField probTextField; - protected javax.swing.JRadioButton undirectedRadioButton; - // End of variables declaration//GEN-END:variables } diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/PageRankUI.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/PageRankUI.java index 99129ca3f6..9e86187d0f 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/PageRankUI.java +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/PageRankUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.statistics.plugin; import javax.swing.JPanel; @@ -55,11 +56,13 @@ public class PageRankUI implements StatisticsUI { private PageRankPanel panel; private PageRank pageRank; + @Override public JPanel getSettingsPanel() { panel = new PageRankPanel(); return panel; } + @Override public void setup(Statistics statistics) { this.pageRank = (PageRank) statistics; if (panel != null) { @@ -71,6 +74,7 @@ public void setup(Statistics statistics) { } } + @Override public void unsetup() { if (panel != null) { pageRank.setEpsilon(panel.getEpsilon()); @@ -83,26 +87,32 @@ public void unsetup() { pageRank = null; } + @Override public Class getStatisticsClass() { return PageRank.class; } + @Override public String getValue() { return null; } + @Override public String getDisplayName() { return NbBundle.getMessage(getClass(), "PageRankUI.name"); } + @Override public String getCategory() { return StatisticsUI.CATEGORY_NETWORK_OVERVIEW; } + @Override public int getPosition() { return 800; } + @Override public String getShortDescription() { return NbBundle.getMessage(getClass(), "PageRankUI.shortDescription"); } diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/PathLengthUI.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/PathLengthUI.java index 52375c6dac..b74722959f 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/PathLengthUI.java +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/PathLengthUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.statistics.plugin; import java.text.DecimalFormat; @@ -55,11 +56,13 @@ public class PathLengthUI implements StatisticsUI { private GraphDistancePanel panel; private GraphDistance graphDistance; + @Override public JPanel getSettingsPanel() { panel = new GraphDistancePanel(); return panel; } + @Override public void setup(Statistics statistics) { this.graphDistance = (GraphDistance) statistics; if (panel != null) { @@ -68,6 +71,7 @@ public void setup(Statistics statistics) { } } + @Override public void unsetup() { if (panel != null) { graphDistance.setDirected(panel.isDirected()); @@ -77,27 +81,33 @@ public void unsetup() { panel = null; } + @Override public Class getStatisticsClass() { return GraphDistance.class; } + @Override public String getValue() { DecimalFormat df = new DecimalFormat("###.###"); return "" + df.format(graphDistance.getPathLength()); } + @Override public String getDisplayName() { return NbBundle.getMessage(getClass(), "PathLengthUI.name"); } + @Override public String getCategory() { return StatisticsUI.CATEGORY_EDGE_OVERVIEW; } + @Override public int getPosition() { return 200; } + @Override public String getShortDescription() { return NbBundle.getMessage(getClass(), "PathLengthUI.shortDescription"); } diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/StatisticalInferenceClusteringUI.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/StatisticalInferenceClusteringUI.java new file mode 100644 index 0000000000..573c3d1118 --- /dev/null +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/StatisticalInferenceClusteringUI.java @@ -0,0 +1,104 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.ui.statistics.plugin; + +import java.text.DecimalFormat; +import javax.swing.JPanel; +import org.gephi.statistics.plugin.StatisticalInferenceClustering; +import org.gephi.statistics.spi.Statistics; +import org.gephi.statistics.spi.StatisticsUI; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +@ServiceProvider(service = StatisticsUI.class) +public class StatisticalInferenceClusteringUI implements StatisticsUI { + + StatisticalInferenceClustering descriptionLength; + + @Override + public JPanel getSettingsPanel() { + return null; + } + + @Override + public void setup(Statistics statistics) { + this.descriptionLength = (StatisticalInferenceClustering) statistics; + } + + @Override + public void unsetup() { + descriptionLength = null; + } + + @Override + public Class getStatisticsClass() { + return StatisticalInferenceClustering.class; + } + + @Override + public String getValue() { + DecimalFormat df = new DecimalFormat("###.###"); + return "" + df.format(descriptionLength.getDescriptionLength()); + } + + @Override + public String getDisplayName() { + return NbBundle.getMessage(getClass(), "StatisticalInferenceClusteringUI.name"); + } + + @Override + public String getCategory() { + return StatisticsUI.CATEGORY_COMMUNITY_DETECTION; + } + + @Override + public int getPosition() { + return 600; + } + + @Override + public String getShortDescription() { + return NbBundle.getMessage(getClass(), "StatisticalInferenceClusteringUI.shortDescription"); + } + +} diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/WeightedDegreeUI.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/WeightedDegreeUI.java index 1f5633531a..3c65bacb97 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/WeightedDegreeUI.java +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/WeightedDegreeUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.statistics.plugin; import java.text.DecimalFormat; @@ -50,7 +51,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Sebastien Heymann */ @ServiceProvider(service = StatisticsUI.class) @@ -58,39 +58,48 @@ public class WeightedDegreeUI implements StatisticsUI { private WeightedDegree weightedDegree; + @Override public JPanel getSettingsPanel() { return null; } + @Override public void setup(Statistics statistics) { this.weightedDegree = (WeightedDegree) statistics; } + @Override public void unsetup() { weightedDegree = null; } + @Override public Class getStatisticsClass() { return WeightedDegree.class; } + @Override public String getValue() { DecimalFormat df = new DecimalFormat("###.###"); return "" + df.format(weightedDegree.getAverageDegree()); } + @Override public String getDisplayName() { return NbBundle.getMessage(getClass(), "WeightedDegreeUI.name"); } + @Override public String getCategory() { return StatisticsUI.CATEGORY_NETWORK_OVERVIEW; } + @Override public int getPosition() { return 1; } + @Override public String getShortDescription() { return NbBundle.getMessage(getClass(), "WeightedDegreeUI.shortDescription"); } diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicClusteringCoefficientPanel.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicClusteringCoefficientPanel.java index 62073bf5d3..6787e23d34 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicClusteringCoefficientPanel.java +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicClusteringCoefficientPanel.java @@ -39,18 +39,27 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.statistics.plugin.dynamic; import org.gephi.graph.api.GraphController; import org.openide.util.Lookup; /** - * * @author Mathieu Bastian */ public class DynamicClusteringCoefficientPanel extends javax.swing.JPanel { - /** Creates new form DynamicClusteringCoefficientPanel */ + protected javax.swing.JRadioButton directedRadioButton; + protected javax.swing.JRadioButton undirectedRadioButton; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JCheckBox averageOnlyCheckbox; + private javax.swing.ButtonGroup directedButtonGroup; + private org.jdesktop.swingx.JXHeader header; + + /** + * Creates new form DynamicClusteringCoefficientPanel + */ public DynamicClusteringCoefficientPanel() { initComponents(); @@ -66,7 +75,8 @@ public boolean isDirected() { } public void setDirected(boolean directed) { - directedButtonGroup.setSelected(directed ? directedRadioButton.getModel() : undirectedRadioButton.getModel(), true); + directedButtonGroup + .setSelected(directed ? directedRadioButton.getModel() : undirectedRadioButton.getModel(), true); if (!directed) { directedRadioButton.setEnabled(false); } @@ -80,7 +90,8 @@ public void setAverageOnly(boolean averageOnly) { averageOnlyCheckbox.setSelected(averageOnly); } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -95,48 +106,48 @@ private void initComponents() { undirectedRadioButton = new javax.swing.JRadioButton(); averageOnlyCheckbox = new javax.swing.JCheckBox(); - header.setDescription(org.openide.util.NbBundle.getMessage(DynamicClusteringCoefficientPanel.class, "DynamicClusteringCoefficientPanel.header.description")); // NOI18N - header.setTitle(org.openide.util.NbBundle.getMessage(DynamicClusteringCoefficientPanel.class, "DynamicClusteringCoefficientPanel.header.title")); // NOI18N + header.setDescription(org.openide.util.NbBundle.getMessage(DynamicClusteringCoefficientPanel.class, + "DynamicClusteringCoefficientPanel.header.description")); // NOI18N + header.setTitle(org.openide.util.NbBundle.getMessage(DynamicClusteringCoefficientPanel.class, + "DynamicClusteringCoefficientPanel.header.title")); // NOI18N directedButtonGroup.add(directedRadioButton); - directedRadioButton.setText(org.openide.util.NbBundle.getMessage(DynamicClusteringCoefficientPanel.class, "DynamicClusteringCoefficientPanel.directedRadioButton.text")); // NOI18N + directedRadioButton.setText(org.openide.util.NbBundle.getMessage(DynamicClusteringCoefficientPanel.class, + "DynamicClusteringCoefficientPanel.directedRadioButton.text")); // NOI18N directedButtonGroup.add(undirectedRadioButton); - undirectedRadioButton.setText(org.openide.util.NbBundle.getMessage(DynamicClusteringCoefficientPanel.class, "DynamicClusteringCoefficientPanel.undirectedRadioButton.text")); // NOI18N + undirectedRadioButton.setText(org.openide.util.NbBundle.getMessage(DynamicClusteringCoefficientPanel.class, + "DynamicClusteringCoefficientPanel.undirectedRadioButton.text")); // NOI18N - averageOnlyCheckbox.setText(org.openide.util.NbBundle.getMessage(DynamicClusteringCoefficientPanel.class, "DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text")); // NOI18N + averageOnlyCheckbox.setText(org.openide.util.NbBundle.getMessage(DynamicClusteringCoefficientPanel.class, + "DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(undirectedRadioButton) - .addComponent(directedRadioButton) - .addComponent(averageOnlyCheckbox)) - .addContainerGap(294, Short.MAX_VALUE)) - .addComponent(header, javax.swing.GroupLayout.DEFAULT_SIZE, 496, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(undirectedRadioButton) + .addComponent(directedRadioButton) + .addComponent(averageOnlyCheckbox)) + .addContainerGap(294, Short.MAX_VALUE)) + .addComponent(header, javax.swing.GroupLayout.DEFAULT_SIZE, 496, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(directedRadioButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(undirectedRadioButton) - .addGap(18, 18, 18) - .addComponent(averageOnlyCheckbox) - .addContainerGap(34, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, 93, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(directedRadioButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(undirectedRadioButton) + .addGap(18, 18, 18) + .addComponent(averageOnlyCheckbox) + .addContainerGap(34, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JCheckBox averageOnlyCheckbox; - private javax.swing.ButtonGroup directedButtonGroup; - protected javax.swing.JRadioButton directedRadioButton; - private org.jdesktop.swingx.JXHeader header; - protected javax.swing.JRadioButton undirectedRadioButton; // End of variables declaration//GEN-END:variables } diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicClusteringCoefficientUI.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicClusteringCoefficientUI.java index 3a32907968..9e19e84c61 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicClusteringCoefficientUI.java +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicClusteringCoefficientUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.statistics.plugin.dynamic; import javax.swing.JPanel; @@ -49,7 +50,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = StatisticsUI.class) @@ -59,11 +59,13 @@ public class DynamicClusteringCoefficientUI implements StatisticsUI { private DynamicClusteringCoefficient clusetingCoefficient; private DynamicClusteringCoefficientPanel panel; + @Override public JPanel getSettingsPanel() { panel = new DynamicClusteringCoefficientPanel(); return panel; } + @Override public void setup(Statistics statistics) { this.clusetingCoefficient = (DynamicClusteringCoefficient) statistics; if (panel != null) { @@ -73,6 +75,7 @@ public void setup(Statistics statistics) { } } + @Override public void unsetup() { if (panel != null) { clusetingCoefficient.setDirected(panel.isDirected()); @@ -82,26 +85,32 @@ public void unsetup() { clusetingCoefficient = null; } + @Override public Class getStatisticsClass() { return DynamicClusteringCoefficient.class; } + @Override public String getValue() { return ""; } + @Override public String getDisplayName() { return NbBundle.getMessage(getClass(), "DynamicClusteringCoefficientUI.name"); } + @Override public String getCategory() { return StatisticsUI.CATEGORY_DYNAMIC; } + @Override public int getPosition() { return 400; } + @Override public String getShortDescription() { return NbBundle.getMessage(getClass(), "DynamicClusteringCoefficientUI.shortDescription"); } diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicDegreePanel.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicDegreePanel.java index 7859dc13da..ed75ee533e 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicDegreePanel.java +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicDegreePanel.java @@ -39,18 +39,27 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.statistics.plugin.dynamic; import org.gephi.graph.api.GraphController; import org.openide.util.Lookup; /** - * * @author Mathieu Bastian */ public class DynamicDegreePanel extends javax.swing.JPanel { - /** Creates new form DynamicDegreePanel */ + protected javax.swing.JRadioButton directedRadioButton; + protected javax.swing.JRadioButton undirectedRadioButton; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JCheckBox averageOnlyCheckbox; + private javax.swing.ButtonGroup directedButtonGroup; + private org.jdesktop.swingx.JXHeader header; + + /** + * Creates new form DynamicDegreePanel + */ public DynamicDegreePanel() { initComponents(); @@ -66,21 +75,23 @@ public boolean isDirected() { } public void setDirected(boolean directed) { - directedButtonGroup.setSelected(directed ? directedRadioButton.getModel() : undirectedRadioButton.getModel(), true); + directedButtonGroup + .setSelected(directed ? directedRadioButton.getModel() : undirectedRadioButton.getModel(), true); if (!directed) { directedRadioButton.setEnabled(false); } } - + public boolean isAverageOnly() { return averageOnlyCheckbox.isSelected(); } - + public void setAverageOnly(boolean averageOnly) { averageOnlyCheckbox.setSelected(averageOnly); } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -95,48 +106,48 @@ private void initComponents() { undirectedRadioButton = new javax.swing.JRadioButton(); averageOnlyCheckbox = new javax.swing.JCheckBox(); - header.setDescription(org.openide.util.NbBundle.getMessage(DynamicDegreePanel.class, "DynamicDegreePanel.header.description")); // NOI18N - header.setTitle(org.openide.util.NbBundle.getMessage(DynamicDegreePanel.class, "DynamicDegreePanel.header.title")); // NOI18N + header.setDescription(org.openide.util.NbBundle + .getMessage(DynamicDegreePanel.class, "DynamicDegreePanel.header.description")); // NOI18N + header.setTitle(org.openide.util.NbBundle + .getMessage(DynamicDegreePanel.class, "DynamicDegreePanel.header.title")); // NOI18N directedButtonGroup.add(directedRadioButton); - directedRadioButton.setText(org.openide.util.NbBundle.getMessage(DynamicDegreePanel.class, "DynamicDegreePanel.directedRadioButton.text")); // NOI18N + directedRadioButton.setText(org.openide.util.NbBundle + .getMessage(DynamicDegreePanel.class, "DynamicDegreePanel.directedRadioButton.text")); // NOI18N directedButtonGroup.add(undirectedRadioButton); - undirectedRadioButton.setText(org.openide.util.NbBundle.getMessage(DynamicDegreePanel.class, "DynamicDegreePanel.undirectedRadioButton.text")); // NOI18N + undirectedRadioButton.setText(org.openide.util.NbBundle + .getMessage(DynamicDegreePanel.class, "DynamicDegreePanel.undirectedRadioButton.text")); // NOI18N - averageOnlyCheckbox.setText(org.openide.util.NbBundle.getMessage(DynamicDegreePanel.class, "DynamicDegreePanel.averageOnlyCheckbox.text")); // NOI18N + averageOnlyCheckbox.setText(org.openide.util.NbBundle + .getMessage(DynamicDegreePanel.class, "DynamicDegreePanel.averageOnlyCheckbox.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(header, javax.swing.GroupLayout.DEFAULT_SIZE, 503, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(undirectedRadioButton) - .addComponent(directedRadioButton) - .addComponent(averageOnlyCheckbox)) - .addContainerGap()) + .addComponent(header, javax.swing.GroupLayout.DEFAULT_SIZE, 503, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(undirectedRadioButton) + .addComponent(directedRadioButton) + .addComponent(averageOnlyCheckbox)) + .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, 77, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(directedRadioButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(undirectedRadioButton) - .addGap(18, 18, 18) - .addComponent(averageOnlyCheckbox) - .addContainerGap(34, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, 77, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addComponent(directedRadioButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(undirectedRadioButton) + .addGap(18, 18, 18) + .addComponent(averageOnlyCheckbox) + .addContainerGap(34, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JCheckBox averageOnlyCheckbox; - private javax.swing.ButtonGroup directedButtonGroup; - protected javax.swing.JRadioButton directedRadioButton; - private org.jdesktop.swingx.JXHeader header; - protected javax.swing.JRadioButton undirectedRadioButton; // End of variables declaration//GEN-END:variables } diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicDegreeUI.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicDegreeUI.java index 585ce44241..0ca050be14 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicDegreeUI.java +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicDegreeUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.statistics.plugin.dynamic; import javax.swing.JPanel; @@ -49,7 +50,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = StatisticsUI.class) @@ -59,11 +59,13 @@ public class DynamicDegreeUI implements StatisticsUI { private DynamicDegree degree; private DynamicDegreePanel panel; + @Override public JPanel getSettingsPanel() { panel = new DynamicDegreePanel(); return panel; } + @Override public void setup(Statistics statistics) { this.degree = (DynamicDegree) statistics; if (panel != null) { @@ -73,6 +75,7 @@ public void setup(Statistics statistics) { } } + @Override public void unsetup() { if (panel != null) { degree.setDirected(panel.isDirected()); @@ -83,26 +86,32 @@ public void unsetup() { panel = null; } + @Override public Class getStatisticsClass() { return DynamicDegree.class; } + @Override public String getValue() { return ""; } + @Override public String getDisplayName() { return NbBundle.getMessage(getClass(), "DynamicDegreeUI.name"); } + @Override public String getCategory() { return StatisticsUI.CATEGORY_DYNAMIC; } + @Override public int getPosition() { return 300; } + @Override public String getShortDescription() { return NbBundle.getMessage(getClass(), "DynamicDegreeUI.shortDescription"); } diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicNbEdgesPanel.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicNbEdgesPanel.java index 98e3d29367..ead398cdf9 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicNbEdgesPanel.java +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicNbEdgesPanel.java @@ -39,20 +39,26 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.statistics.plugin.dynamic; /** - * * @author Mathieu Bastian */ public class DynamicNbEdgesPanel extends javax.swing.JPanel { - /** Creates new form DynamicNbEdgesPanel */ + // Variables declaration - do not modify//GEN-BEGIN:variables + private org.jdesktop.swingx.JXHeader header; + + /** + * Creates new form DynamicNbEdgesPanel + */ public DynamicNbEdgesPanel() { initComponents(); } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -63,23 +69,24 @@ private void initComponents() { header = new org.jdesktop.swingx.JXHeader(); - header.setDescription(org.openide.util.NbBundle.getMessage(DynamicNbEdgesPanel.class, "DynamicNbEdgesPanel.header.description")); // NOI18N - header.setTitle(org.openide.util.NbBundle.getMessage(DynamicNbEdgesPanel.class, "DynamicNbEdgesPanel.header.title")); // NOI18N + header.setDescription(org.openide.util.NbBundle + .getMessage(DynamicNbEdgesPanel.class, "DynamicNbEdgesPanel.header.description")); // NOI18N + header.setTitle(org.openide.util.NbBundle + .getMessage(DynamicNbEdgesPanel.class, "DynamicNbEdgesPanel.header.title")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(header, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE) + .addComponent(header, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, 77, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(50, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, 77, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(50, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private org.jdesktop.swingx.JXHeader header; // End of variables declaration//GEN-END:variables } diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicNbEdgesUI.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicNbEdgesUI.java index 7654d558dc..91527e7a89 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicNbEdgesUI.java +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicNbEdgesUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.statistics.plugin.dynamic; import javax.swing.JPanel; @@ -49,7 +50,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author SΓ©bastien Heymann */ @ServiceProvider(service = StatisticsUI.class) @@ -59,11 +59,13 @@ public class DynamicNbEdgesUI implements StatisticsUI { private DynamicNbEdges nbEdges; private DynamicNbEdgesPanel panel; + @Override public JPanel getSettingsPanel() { panel = new DynamicNbEdgesPanel(); return panel; } + @Override public void setup(Statistics statistics) { this.nbEdges = (DynamicNbEdges) statistics; if (panel != null) { @@ -71,6 +73,7 @@ public void setup(Statistics statistics) { } } + @Override public void unsetup() { if (panel != null) { settings.save(nbEdges); @@ -78,26 +81,32 @@ public void unsetup() { nbEdges = null; } + @Override public Class getStatisticsClass() { return DynamicNbEdges.class; } + @Override public String getValue() { return ""; } + @Override public String getDisplayName() { return NbBundle.getMessage(getClass(), "DynamicNbEdgesUI.name"); } + @Override public String getCategory() { return StatisticsUI.CATEGORY_DYNAMIC; } + @Override public int getPosition() { return 200; } + @Override public String getShortDescription() { return NbBundle.getMessage(getClass(), "DynamicNbEdgesUI.shortDescription"); } diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicNbNodesPanel.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicNbNodesPanel.java index 5ab2eaeef6..dace5bcd50 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicNbNodesPanel.java +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicNbNodesPanel.java @@ -39,20 +39,26 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.statistics.plugin.dynamic; /** - * * @author Mathieu Bastian */ public class DynamicNbNodesPanel extends javax.swing.JPanel { - /** Creates new form DynamicNbNodesPanel */ + // Variables declaration - do not modify//GEN-BEGIN:variables + private org.jdesktop.swingx.JXHeader header; + + /** + * Creates new form DynamicNbNodesPanel + */ public DynamicNbNodesPanel() { initComponents(); } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -63,23 +69,24 @@ private void initComponents() { header = new org.jdesktop.swingx.JXHeader(); - header.setDescription(org.openide.util.NbBundle.getMessage(DynamicNbNodesPanel.class, "DynamicNbNodesPanel.header.description")); // NOI18N - header.setTitle(org.openide.util.NbBundle.getMessage(DynamicNbNodesPanel.class, "DynamicNbNodesPanel.header.title")); // NOI18N + header.setDescription(org.openide.util.NbBundle + .getMessage(DynamicNbNodesPanel.class, "DynamicNbNodesPanel.header.description")); // NOI18N + header.setTitle(org.openide.util.NbBundle + .getMessage(DynamicNbNodesPanel.class, "DynamicNbNodesPanel.header.title")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(header, javax.swing.GroupLayout.DEFAULT_SIZE, 412, Short.MAX_VALUE) + .addComponent(header, javax.swing.GroupLayout.DEFAULT_SIZE, 412, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, 77, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(43, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addComponent(header, javax.swing.GroupLayout.PREFERRED_SIZE, 77, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(43, Short.MAX_VALUE)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private org.jdesktop.swingx.JXHeader header; // End of variables declaration//GEN-END:variables } diff --git a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicNbNodesUI.java b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicNbNodesUI.java index fca83cf975..ac3a17f275 100644 --- a/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicNbNodesUI.java +++ b/modules/StatisticsPluginUI/src/main/java/org/gephi/ui/statistics/plugin/dynamic/DynamicNbNodesUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.statistics.plugin.dynamic; import javax.swing.JPanel; @@ -49,7 +50,6 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.lookup.ServiceProvider; /** - * * @author SΓ©bastien Heymann */ @ServiceProvider(service = StatisticsUI.class) @@ -59,11 +59,13 @@ public class DynamicNbNodesUI implements StatisticsUI { private DynamicNbNodes nbNodes; private DynamicNbNodesPanel panel; + @Override public JPanel getSettingsPanel() { panel = new DynamicNbNodesPanel(); return panel; } + @Override public void setup(Statistics statistics) { this.nbNodes = (DynamicNbNodes) statistics; if (panel != null) { @@ -71,6 +73,7 @@ public void setup(Statistics statistics) { } } + @Override public void unsetup() { if (panel != null) { settings.save(nbNodes); @@ -78,26 +81,32 @@ public void unsetup() { nbNodes = null; } + @Override public Class getStatisticsClass() { return DynamicNbNodes.class; } + @Override public String getValue() { return ""; } + @Override public String getDisplayName() { return NbBundle.getMessage(getClass(), "DynamicNbNodesUI.name"); } + @Override public String getCategory() { return StatisticsUI.CATEGORY_DYNAMIC; } + @Override public int getPosition() { return 100; } + @Override public String getShortDescription() { return NbBundle.getMessage(getClass(), "DynamicNbNodesUI.shortDescription"); } diff --git a/modules/StatisticsPluginUI/src/main/nbm/manifest.mf b/modules/StatisticsPluginUI/src/main/nbm/manifest.mf index c937221357..aba679a9c8 100644 --- a/modules/StatisticsPluginUI/src/main/nbm/manifest.mf +++ b/modules/StatisticsPluginUI/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/ui/statistics/plugin/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Plugin +OpenIDE-Module-Name: Statistics Plugin UI \ No newline at end of file diff --git a/modules/StatisticsPluginUI/src/main/nbm/module.xml b/modules/StatisticsPluginUI/src/main/nbm/module.xml deleted file mode 100644 index 263c27d450..0000000000 --- a/modules/StatisticsPluginUI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle.properties index 0adcf658d1..6f04b895b0 100644 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle.properties +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle.properties @@ -1,6 +1,3 @@ -OpenIDE-Module-Display-Category=Plugin -OpenIDE-Module-Name=Statistics Plugin UI - GraphDistancePanel.directedRadioButton.text=Directed GraphDistancePanel.undirectedRadioButton.text=Undirected ClusteringCoefficientPanel.jLabel1.text=Clustering Coefficent Metric @@ -54,7 +51,7 @@ ConnectedComponentPanel.undirectedRadioButton.text=Undirected ConnectedComponentPanel.directedRadioButton.text=Directed ConnectedComponentPanel.header.title=Connected Components ConnectedComponentPanel.jLabel1.text=Detects strongly & weakly connected components -ConnectedComponentPanel.jLabel2.text=Detects only weakly connected components) +ConnectedComponentPanel.jLabel2.text=Detects only weakly connected components EigenvectorCentralityPanel.header.description=A measure of node importance in a network based on a node's connections. EigenvectorCentralityPanel.header.title=Eigenvector Centrality EigenvectorCentralityPanel.iterationsTextField.text=jTextField1 @@ -81,6 +78,8 @@ InOutDegreeUI.name=Average Degree InOutDegreeUI.shortDescription=Average Degree ModularityUI.name=Modularity ModularityUI.shortDescription=Community detection algorithm. +StatisticalInferenceClusteringUI.name=Statistical Inference +StatisticalInferenceClusteringUI.shortDescription=Community detection algorithm. PageRankUI.name=PageRank PageRankUI.shortDescription=Ranks nodes "pages" according to how often a user following links will non-randomly reach the node "page". PathLengthUI.name=Avg. Path Length @@ -95,3 +94,6 @@ ModularityPanel.resolutionTextField.text=1.0 ModularityPanel.labelEdgeWeight.text=Use edge weight ModularityPanel.labelResolution.text=Lower to get more communities (smaller ones) and higher than 1.0 to get less communities (bigger ones). ModularityPanel.labelRandomize.text=Produce a better decomposition but increases computation time +ModularityPanel.initialModularityClassIndexTextField.text=0 +ModularityPanel.labelInitialModularityClassIndex.text=Classes start at: +ModularityPanel.initialModularityClassIndexTextField.AccessibleContext.accessibleDescription=If you put 10 and it finds 7 classes, they will be numbered from 10 to 17. diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_ar.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_ca.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_ca.properties new file mode 100644 index 0000000000..7e7850ce1c --- /dev/null +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_ca.properties @@ -0,0 +1,93 @@ +GraphDistancePanel.directedRadioButton.text=Dirigit +GraphDistancePanel.undirectedRadioButton.text=No dirigit +ClusteringCoefficientPanel.jLabel1.text=M\u00e8trica del coeficient de clusteritzaci\u00f3 +ClusteringCoefficientPanel.directedRadioButton.text=Dirigit +ClusteringCoefficientPanel.undirectedRadioButton.text=No dirigit +DegreeDistributionPanel.directedRadioButton.text=Dirigit +DegreeDistributionPanel.undirectedRadioButton.text=No dirigit +OpenIDE-Module-Short-Description=Implementacions de les estad\u00edstiques d\u2019interf\u00edcie d'usuari est\u00e0ndards +PageRankPanel.probTextField.text= +PageRankPanel.epsilonTextField.text= +HitsPanel.epsilonTextField.text= +GraphDensityPanel.directedRadioButton.text=Dirigit +GraphDensityPanel.undirectedRadioButton.text=No dirigit +DegreeDistributionPanel.descriptionLabel.text= +GraphDistancePanel.descriptionLabel.text= +HitsPanel.labelEpsilon.text=\u00c8psilon: +HitsPanel.descriptionLabel.text= +HitsPanel.directedRadioButton.text=Dirigit +HitsPanel.undirectedRadioButton.text=No dirigit +ModularityPanel.randomizeCheckbox.text=Fes aleatori +ModularityPanel.desriptionLabel.text= +PageRankPanel.labelP.text=Probabilitat (p): +PageRankPanel.labelE.text=\u00c8psilon: +PageRankPanel.directedRadioButton.text=Dirigit +PageRankPanel.undirectedRadioButton.text=No dirigit +GraphDensityPanel.header.title=Densitat +GraphDensityPanel.header.description=Mesura com \u00e9s de completa la xarxa. Un graf complet tindria totes les arestes possibles i una densitat equivalent a 1. +ClusteringCoefficientPanel.header.title=Coeficient de clusteritzaci\u00f3 +ClusteringCoefficientPanel.header.description=El coeficient de clusteritzaci\u00f3, juntament amb la mitjana aritm\u00e8tica del cam\u00ed m\u00e9s curt, pot indicar un efecte "del m\u00f3n petit". Indica com els nodes s'integren en el ve\u00efnat. La mitjana dona un indicador general de la clusteritzaci\u00f3 de la xarxa +DegreeDistributionPanel.header.title=Grau de distribuci\u00f3 +DegreeDistributionPanel.header.description=Mesura la distribuci\u00f3 de graus de tots els nodes de la xarxa +GraphDistancePanel.jXLabel1.text=Mesura amb quina freq\u00fc\u00e8ncia un node forma part del cam\u00ed m\u00e9s curt entre els nodes de la xarxa. +GraphDistancePanel.jXLabel2.text=Dist\u00e0ncia mitjana entre un determinat node de sortida i tots els altres nodes de la xarxa +GraphDistancePanel.jXLabel3.text=La dist\u00e0ncia des d'un node de sortida determinat fins al node m\u00e9s lluny\u00e0 de la xarxa +GraphDistancePanel.jLabel1.text=Betweenness Centrality: +GraphDistancePanel.jLabel2.text=Centralitat m\u00e9s propera: +GraphDistancePanel.jLabel3.text=Excentricitat: +GraphDistancePanel.header.description=The average graph-distance between all pairs of nodes. Connected nodes have graph distance 1. The diameter is the longest graph distance between any two nodes in the network. (i.e. How far apart are the two most distant nodes). +GraphDistancePanel.header.title=Dist\u00e0ncia +HitsPanel.header.description=Calcula dues variables per cada node: la primera (anomenada autoritat) mesura com \u00e9s d\u2019important la informaci\u00f3 d'aquest node. La segona (anomenada Hub, Centre) mesura la qualitat de les connexions del node +HitsPanel.header.title=HITS +HitsPanel.epsilonLabel.text=Stopping criterion, the smaller this value, the longer convergence will take. +PageRankPanel.jXHeader1.description=Ranks nodes "pages" according to how often a user following links will non-randomly reach the node "page". +PageRankPanel.jXHeader1.title=PageRank +PageRankPanel.jXLabel1.text=Used to simulate the user randomly restarting the web-surfing. +PageRankPanel.jXLabel2.text=Stopping criterion, the smaller this value, the longer convergence will take. +ModularityPanel.header.title=Modularitat +ModularityPanel.header.description=Algoritme per detectar comunitats +ConnectedComponentPanel.header.description=Determina el nombre de components connectats a la xarxa +ConnectedComponentPanel.undirectedRadioButton.text=No dirigit +ConnectedComponentPanel.directedRadioButton.text=Dirigit +ConnectedComponentPanel.header.title=Components connectats +ConnectedComponentPanel.jLabel1.text=Detecta els components connectats forts i febles +ConnectedComponentPanel.jLabel2.text=Detecta nom\u00e9s els components connectats febles +EigenvectorCentralityPanel.header.description=Mesura la import\u00e0ncia d'un node segons les connexions que t\u00e9 a la xarxa +EigenvectorCentralityPanel.header.title=Eigenvector Centrality +EigenvectorCentralityPanel.iterationsTextField.text=jCampDeText1 +EigenvectorCentralityPanel.labeliterations.text=Nombre d'iteracions: +EigenvectorCentralityPanel.directedButton.text=Dirigit +EigenvectorCentralityPanel.undirectedButton.text=No dirigit +GraphDistancePanel.normalizeButton.text=Normalize Centralities in [0,1] +ConnectedComponentUI.name=Components connectats +ConnectedComponentUI.shortDescription=Determines the number of connected components in the network. +ClusteringCoefficientUI.name=Mitjana del coeficient de clusteritzaci\u00f3 +ClusteringCoefficientUI.shortDescription=Calcula la mitjana de com d'incrustats estan els nodes dins dels seus ve\u00efnats +DegreeDistributionUI.name=Degree Power Law +DegreeDistributionUI.shortDescription=Measures the distribution of degrees amongst all of the nodes within the network. +EigenvectorCentralityUI.name=Eigenvector Centrality +EigenvectorCentralityUI.shortDescription=Mesura la import\u00e0ncia d'un node segons les seves connexions a la xarxa +GraphDensityUI.name=Densitat del graf +GraphDensityUI.shortDescription=Mesura quant li falta a la xarxa per convertir-se en una xarxa completa +DiameterUI.name=Di\u00e0metre de la xarxa +DiameterUI.shortDescription=Di\u00e0metre de la xarxa +HitsUI.name=HITS +HitsUI.shortDescription=Calcula dos valors per cada node: com \u00e9s d\u2019important la seva informaci\u00f3 i la qualitat de les seves connexions +InOutDegreeUI.name=Grau mitj\u00e0 +InOutDegreeUI.shortDescription=Grau mitj\u00e0 +ModularityUI.name=Modularitat +ModularityUI.shortDescription=Algoritme per detectar comunitats +PageRankUI.name=PageRank +PageRankUI.shortDescription=Ordena les "p\u00e0gines"-node segons la freq\u00fc\u00e8ncia amb la qual un usuari que segueixi els enlla\u00e7os de manera no aleat\u00f2ria arribar\u00e0 a la "p\u00e0gina"-node +PathLengthUI.name=Dist\u00e0ncia mitjana del cam\u00ed +PathLengthUI.shortDescription=Dist\u00e0ncia mitjana del cam\u00ed +WeightedDegreeUI.name=Pes mitj\u00e0 del grau +WeightedDegreeUI.shortDescription=La mitjana dels pesos del grau +PageRankPanel.edgeWeightCheckbox.text=Utilitza el pes de les arestes +ModularityPanel.useWeightCheckbox.text=Fes servir pesos +ModularityPanel.jLabel1.text=Resoluci\u00f3: +ModularityPanel.resolutionTextField.toolTipText=Assigna un par\u00e0metre de resoluci\u00f3 (1.0 \u00e9s l'est\u00e0ndard, un valor menor genera comunitats m\u00e9s petites i un major, m\u00e9s grans) +ModularityPanel.resolutionTextField.text=1.0 +ModularityPanel.labelEdgeWeight.text=Utilitza el pes de les arestes +ModularityPanel.labelResolution.text=M\u00e9s baix per generar m\u00e9s comunitats (per\u00f2 m\u00e9s petites) i m\u00e9s gran que 1.0 per obtenir menys comunitats (per\u00f2 m\u00e9s grans) +ModularityPanel.labelRandomize.text=Produeix una millor descomposici\u00f3, per\u00f2 augmenta el temps de c\u00e0lcul diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_cs.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_cs.properties index dd6532cb5c..7ab53f790d 100644 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_cs.properties +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_cs.properties @@ -1,180 +1,93 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-17 06\:57+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -GraphDistancePanel.directedRadioButton.text=Sm\u011brovan\u00fd - +GraphDistancePanel.directedRadioButton.text=Orientovan\u00FD GraphDistancePanel.undirectedRadioButton.text=Nesm\u011brovan\u00fd - ClusteringCoefficientPanel.jLabel1.text=Metrika koeficientu shlukov\u00e1n\u00ed - ClusteringCoefficientPanel.directedRadioButton.text=Sm\u011brovan\u00fd - ClusteringCoefficientPanel.undirectedRadioButton.text=Nesm\u011brovan\u00fd - DegreeDistributionPanel.directedRadioButton.text=Sm\u011brovan\u00fd - DegreeDistributionPanel.undirectedRadioButton.text=Nesm\u011brovan\u00fd - OpenIDE-Module-Short-Description=Standardn\u00ed zaveden\u00ed UI statistiky - +PageRankPanel.probTextField.text= +PageRankPanel.epsilonTextField.text= +HitsPanel.epsilonTextField.text= GraphDensityPanel.directedRadioButton.text=Sm\u011brovan\u00fd - GraphDensityPanel.undirectedRadioButton.text=Nesm\u011brovan\u00fd - -HitsPanel.labelEpsilon.text=Epsilon\: - +DegreeDistributionPanel.descriptionLabel.text= +GraphDistancePanel.descriptionLabel.text= +HitsPanel.labelEpsilon.text=Epsilon: +HitsPanel.descriptionLabel.text= HitsPanel.directedRadioButton.text=Sm\u011brovan\u00fd - HitsPanel.undirectedRadioButton.text=Nesm\u011brovan\u00fd - ModularityPanel.randomizeCheckbox.text=N\u00e1hodn\u011b - -PageRankPanel.labelP.text=Pravd\u011bpodobnost (p)\: - -PageRankPanel.labelE.text=Epsilon\: - +ModularityPanel.desriptionLabel.text= +PageRankPanel.labelP.text=Pravd\u011bpodobnost (p): +PageRankPanel.labelE.text=Epsilon: PageRankPanel.directedRadioButton.text=Sm\u011brovan\u00fd - PageRankPanel.undirectedRadioButton.text=Nesm\u011brovan\u00fd - GraphDensityPanel.header.title=Hustota - GraphDensityPanel.header.description=M\u011b\u0159\u00ed jak bl\u00edzko je s\u00ed\u0165 k dokon\u010den\u00ed. Dokon\u010den\u00fd graf m\u00e1 v\u0161echny mo\u017en\u00e9 hrany a hustotu rovnou 1. - ClusteringCoefficientPanel.header.title=Koeficient shlukov\u00e1n\u00ed - ClusteringCoefficientPanel.header.description=Koeficient shlukov\u00e1n\u00ed, spolu s pr\u016fm\u011brnou nejkrat\u0161\u00ed cestou, m\u016f\u017ee nazna\u010dovat efekt "mal\u00e9ho sv\u011bta". Ukazuje, jak jsou uzle vno\u0159en\u00e9 do sv\u00e9ho okol\u00ed. Pr\u016fm\u011br d\u00e1v\u00e1 celkovou informaci o shluku s\u00edt\u011b. - DegreeDistributionPanel.header.title=Distribuce stup\u0148\u016f - DegreeDistributionPanel.header.description=M\u011b\u0159\u00ed distribuci stup\u0148\u016f mezi v\u0161emi uzly uvnit\u0159 s\u00edt\u011b. - GraphDistancePanel.jXLabel1.text=M\u011b\u0159\u00ed jak \u010dasto se uzel objev\u00ed na nejkrat\u0161\u00ed cest\u011b mezi uzly v s\u00edti. - GraphDistancePanel.jXLabel2.text=Pr\u016fm\u011brn\u00e1 vzd\u00e1lenost od zadan\u00e9ho po\u010d\u00e1te\u010dn\u00edho uzle ke v\u0161em ostatn\u00edm uzl\u016fm v s\u00edti. - GraphDistancePanel.jXLabel3.text=Vzd\u00e1lenost od zadan\u00e9ho po\u010d\u00e1te\u010dn\u00edho uzle k jeho nejvzd\u00e1len\u011bj\u0161\u00edmu uzlu v s\u00edti. - GraphDistancePanel.jLabel1.text=Centr\u00e1lnost relace "mezi" - GraphDistancePanel.jLabel2.text=Centr\u00e1lnost bl\u00edzkosti - -GraphDistancePanel.jLabel3.text=Excentricita\: - +GraphDistancePanel.jLabel3.text=Excentricita: GraphDistancePanel.header.description=Pr\u016fm\u011brn\u00e1 vzd\u00e1lenost grafu mezi v\u0161emi p\u00e1ry uzl\u016f. P\u0159ipojen\u00e9 uzly maj\u00ed vzd\u00e1lenost grafu 1. Pr\u016fm\u011br je nejdel\u0161\u00ed vzd\u00e1lenost grafu mezi jak\u00fdmikoli dv\u011bma uzly v s\u00edti (tj. Jak daleko od sebe jsou dva nejvzd\u00e1len\u011bj\u0161\u00ed uzly). - GraphDistancePanel.header.title=Vzd\u00e1lenost - HitsPanel.header.description=Spo\u010d\u00edt\u00e1 dv\u011b r\u016fzn\u00e9 hodnoty pro ka\u017ed\u00fd uzel. Prvn\u00ed hodnota (nazvan\u00e1 Autorita) m\u011b\u0159\u00ed jak cenn\u00e1 je informace ulo\u017een\u00e1 v tomto uzlu. Druh\u00e1 hodnota (nazvan\u00e1 hub) m\u011b\u0159\u00ed kvalitu spojen\u00ed uzlu. - HitsPanel.header.title=ZOBRAZEN\u00cd - HitsPanel.epsilonLabel.text=Krit\u00e9rium zastaven\u00ed, \u010d\u00edm ni\u017e\u0161\u00ed je tato hodnota, t\u00edm d\u00e9le bude konvergence trvat. - PageRankPanel.jXHeader1.description=Ohodnocuje "str\u00e1nky" uzl\u016f podle toho jak \u010dasto u\u017eivatel klikaj\u00edc\u00ed na odkaz nen\u00e1hodn\u011b dos\u00e1hne "str\u00e1nky" uzlu. - PageRankPanel.jXHeader1.title=Hodnost str\u00e1nky - PageRankPanel.jXLabel1.text=Pou\u017eito k simulaci u\u017eivatel\u016f n\u00e1hodn\u011b restartuj\u00edc\u00edch prohl\u00ed\u017een\u00ed internetu. - PageRankPanel.jXLabel2.text=Krit\u00e9rium zastaven\u00ed, \u010d\u00edm ni\u017e\u0161\u00ed je tato hodnota, t\u00edm d\u00e9le bude konvergence trvat. - ModularityPanel.header.title=Modularita - ModularityPanel.header.description=Algoritmus zji\u0161t\u011bn\u00ed komunity. - ConnectedComponentPanel.header.description=Ur\u010duje po\u010det p\u0159ipojen\u00fdch komponent v s\u00edti. - ConnectedComponentPanel.undirectedRadioButton.text=Nesm\u011brovan\u00fd - ConnectedComponentPanel.directedRadioButton.text=Sm\u011brovan\u00fd - ConnectedComponentPanel.header.title=P\u0159ipojen\u00e9 komponenty - ConnectedComponentPanel.jLabel1.text=Zji\u0161\u0165uje siln\u00e9 a slab\u011b p\u0159ipojen\u00e9 komponenty - ConnectedComponentPanel.jLabel2.text=Zji\u0161\u0165uje pouze slab\u011b p\u0159ipojen\u00e9 komponenty) - EigenvectorCentralityPanel.header.description=M\u00edra d\u016fle\u017eitosti uzlu v s\u00edti na z\u00e1klad\u011b p\u0159ipojen\u00ed uzlu. - EigenvectorCentralityPanel.header.title=Centr\u00e1lnost vlastn\u00edho vektoru - EigenvectorCentralityPanel.iterationsTextField.text=jTextField1 - -EigenvectorCentralityPanel.labeliterations.text=Po\u010det opakov\u00e1n\u00ed\: - +EigenvectorCentralityPanel.labeliterations.text=Po\u010det opakov\u00e1n\u00ed: EigenvectorCentralityPanel.directedButton.text=Sm\u011brovan\u00fd - EigenvectorCentralityPanel.undirectedButton.text=Nesm\u011brovan\u00fd - GraphDistancePanel.normalizeButton.text=Normalizace centr\u00e1lnost\u00ed v [0,1] - ConnectedComponentUI.name=P\u0159ipojen\u00e9 komponenty - ConnectedComponentUI.shortDescription=Zjist\u00ed po\u010det zapojen\u00fdch sou\u010d\u00e1st\u00ed v s\u00edti - ClusteringCoefficientUI.name=Pr\u016fm. koeficient shlukov\u00e1n\u00ed - ClusteringCoefficientUI.shortDescription=Zpr\u016fm\u011bruje po\u010det uzl\u016f, kter\u00e9 jsou vno\u0159eny do okol\u00ed. - DegreeDistributionUI.name=Stupe\u0148 mocninn\u00e9ho z\u00e1kona - DegreeDistributionUI.shortDescription=M\u011b\u0159\u00ed distribuci stup\u0148\u016f mezi v\u0161emi uzly uvnit\u0159 s\u00edt\u011b. - EigenvectorCentralityUI.name=Centr\u00e1lnost vlastn\u00edho vektoru - EigenvectorCentralityUI.shortDescription=M\u00edra d\u016fle\u017eitosti uzlu v s\u00edti na z\u00e1klad\u011b p\u0159ipojen\u00ed uzlu. - GraphDensityUI.name=Hustota grafu - GraphDensityUI.shortDescription=M\u011b\u0159\u00ed jak bl\u00edzko je s\u00ed\u0165 k dokon\u010den\u00ed. - DiameterUI.name=Pr\u016fm\u011br s\u00edt\u011b - DiameterUI.shortDescription=Pr\u016fm\u011br s\u00edt\u011b - HitsUI.name=ZOBRAZEN\u00cd - -HitsUI.shortDescription=Vypo\u010d\u00edt\u00e1 dv\u011b hodnoty pro ka\u017ed\u00fd uzel\: Jak cenn\u00e9 jsou informace ulo\u017een\u00e9 v tomto uzlu a mno\u017estv\u00ed spojen\u00ed uzlu. - +HitsUI.shortDescription=Vypo\u010d\u00edt\u00e1 dv\u011b hodnoty pro ka\u017ed\u00fd uzel: Jak cenn\u00e9 jsou informace ulo\u017een\u00e9 v tomto uzlu a mno\u017estv\u00ed spojen\u00ed uzlu. InOutDegreeUI.name=Pr\u016fm\u011brn\u00fd stupe\u0148 - InOutDegreeUI.shortDescription=Pr\u016fm\u011brn\u00fd stupe\u0148 - ModularityUI.name=Modularita - ModularityUI.shortDescription=Algoritmus zji\u0161t\u011bn\u00ed komunity. - PageRankUI.name=Hodnost str\u00e1nky - PageRankUI.shortDescription=Ohodnocuje "str\u00e1nky" uzl\u016f podle toho jak \u010dasto u\u017eivatel klikaj\u00edc\u00ed na odkaz nen\u00e1hodn\u011b dos\u00e1hne "str\u00e1nky" uzlu. - PathLengthUI.name=Pr\u016fm. d\u00e9lka cesty - PathLengthUI.shortDescription=Pr\u016fm. d\u00e9lka cest - WeightedDegreeUI.name=Pr\u016fm. v\u00e1\u017een\u00fd stupe\u0148 - WeightedDegreeUI.shortDescription=Pr\u016fm. v\u00e1\u017een\u00fd stupe\u0148 - PageRankPanel.edgeWeightCheckbox.text=Pou\u017e\u00edt v\u00e1hu hrany - ModularityPanel.useWeightCheckbox.text=Pou\u017e\u00edt v\u00e1hy - -ModularityPanel.jLabel1.text=Rozlo\u017een\u00ed\: - +ModularityPanel.jLabel1.text=Rozlo\u017een\u00ed: ModularityPanel.resolutionTextField.toolTipText=Zadejte parametr rozlo\u017een\u00ed (1.0 je standardn\u00ed modularita, m\u00e9n\u011b n\u011b\u017e 1.0 vede k men\u0161\u00edm komunit\u00e1m, v\u00edce vede k v\u011bt\u0161\u00edm) - ModularityPanel.resolutionTextField.text=1.0 - ModularityPanel.labelEdgeWeight.text=Pou\u017e\u00edt v\u00e1hu hrany - ModularityPanel.labelResolution.text=N\u00ed\u017ee pro z\u00edsk\u00e1n\u00ed v\u00edce komunit (men\u0161\u00edch) a v\u00fd\u0161e ne\u017e 1.0 pro z\u00edsk\u00e1n\u00ed m\u00e9n\u011b komunit (v\u011bt\u0161\u00edch). - ModularityPanel.labelRandomize.text=Vytv\u00e1\u0159\u00ed lep\u0161\u00ed rozklad, ale zvy\u0161uje \u010das v\u00fdpo\u010dtu diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_de.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_de.properties new file mode 100644 index 0000000000..c87134a868 --- /dev/null +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_de.properties @@ -0,0 +1,93 @@ +GraphDistancePanel.directedRadioButton.text=Gerichtet +GraphDistancePanel.undirectedRadioButton.text=Ungerichtet +ClusteringCoefficientPanel.jLabel1.text=Clustering-Koeffizienten-Metrik +ClusteringCoefficientPanel.directedRadioButton.text=Gerichtet +ClusteringCoefficientPanel.undirectedRadioButton.text=Ungerichtet +DegreeDistributionPanel.directedRadioButton.text=Gerichtet +DegreeDistributionPanel.undirectedRadioButton.text=Ungerichtet +OpenIDE-Module-Short-Description=UI-Implementierungen der Standard Statistiken +PageRankPanel.probTextField.text= +PageRankPanel.epsilonTextField.text= +HitsPanel.epsilonTextField.text= +GraphDensityPanel.directedRadioButton.text=Gerichtet +GraphDensityPanel.undirectedRadioButton.text=Ungerichtet +DegreeDistributionPanel.descriptionLabel.text= +GraphDistancePanel.descriptionLabel.text= +HitsPanel.labelEpsilon.text=Epsilon: +HitsPanel.descriptionLabel.text= +HitsPanel.directedRadioButton.text=Gerichtet +HitsPanel.undirectedRadioButton.text=Ungerichtet +ModularityPanel.randomizeCheckbox.text=Randomisieren +ModularityPanel.desriptionLabel.text= +PageRankPanel.labelP.text=Wahrscheinlichkeit (p): +PageRankPanel.labelE.text=Epsilon: +PageRankPanel.directedRadioButton.text=Gerichtet +PageRankPanel.undirectedRadioButton.text=Ungerichtet +GraphDensityPanel.header.title=Kantendichte +GraphDensityPanel.header.description=Misst das Verh\u00e4ltnis von tats\u00e4chlich vorhandenen Kanten im Vergleich zu potentiell m\u00f6glichen Kanten. Bei einem vollst\u00e4ndigen Graph ist jeder Knoten mit jedem anderen Knoten durch eine Kante verbunden und seine Dichte entspricht 1. +ClusteringCoefficientPanel.header.title=Clusterkoeffizient +ClusteringCoefficientPanel.header.description=Der Clusterkoeffizient kann, wie auch der Wert 'Mittlerer k\u00fcrzester Pfad' einen 'Small-World'-Effekt aufzeigen. Er gibt an, wie stark Knoten in ihre Nachbarschaft eingebunden sind. Der Durchschnittswert vermittelt einen Gesamteindruck \u00fcber die Vernetzung eines Graphen. +DegreeDistributionPanel.header.title=Knotengrad-H\u00e4ufigkeiten +DegreeDistributionPanel.header.description=Misst die H\u00e4ufigkeit von Graden unter allen Knoten eines Netzwerks. +GraphDistancePanel.jXLabel1.text=Misst, wie oft ein Knoten Teil eines k\u00fcrzesten Pfades zwischen zwei Knoten eines Netzwerks ist. +GraphDistancePanel.jXLabel2.text=Durchschnittliche Distanz eines gegebenen Startknotens zu allen anderen Knoten im Netzwerk. +GraphDistancePanel.jXLabel3.text=Die Distanz eines gegebenen Startknoten zum entferntesten Knoten. +GraphDistancePanel.jLabel1.text=Betweenness-Zentraiit\u00e4t +GraphDistancePanel.jLabel2.text=N\u00e4he: +GraphDistancePanel.jLabel3.text=Exzentrizit\u00e4t: +GraphDistancePanel.header.description=Der durchschnittliche Abstand zwischen allen Knotenpaaren. Verbundene Knoten haben einen Abstand von 1. Der gr\u00f6\u00dfte Abstand zwischen zwei Knoten eines Graphen nennt man den Durchmesser. +GraphDistancePanel.header.title=Entfernung +HitsPanel.header.description=Berechnet zwei separate Werte f\u00fcr jeden Knoten. Der erste Wert ("Authority") misst, wie wertvoll die im Knoten gespeicherte Information ist. Der zweite Wert (genannt "Hub") misst die Qualit\u00e4t der Knoten Links. +HitsPanel.header.title=HITS +HitsPanel.epsilonLabel.text=Stop-Kriterium, je geringer dieser Wert ist, um so l\u00e4nger dauert die Konvergenz +PageRankPanel.jXHeader1.description=Sortiert Knoten "pages" entsprechend der H\u00e4ufigkeit mit der ein Nutzer nicht zuf\u00e4llig den Knoten "page" erreicht. +PageRankPanel.jXHeader1.title=PageRank +PageRankPanel.jXLabel1.text=Verwendet um zu simulieren, dass der Nutzer zuf\u00e4llig das Web-Surfing neu beginnt. +PageRankPanel.jXLabel2.text=Stop-Kriterium, je geringer dieser Wert ist, um so l\u00e4nger dauert die Konvergenz +ModularityPanel.header.title=Modularit\u00e4t +ModularityPanel.header.description=Algorithmus zur "Community"-Erkennung +ConnectedComponentPanel.header.description=Bestimmt die Anzahl von "Community"-Komponenten im Netzwerk +ConnectedComponentPanel.undirectedRadioButton.text=Ungerichtet +ConnectedComponentPanel.directedRadioButton.text=Gerichtet +ConnectedComponentPanel.header.title=Verbundene Komponenten +ConnectedComponentPanel.jLabel1.text=Ermittelt stark & schwach zusammenh\u00e4ngende Komponenten +ConnectedComponentPanel.jLabel2.text=Ermittelt nur schwach zusammenh\u00e4ngende Komponenten +EigenvectorCentralityPanel.header.description=Ein Ma\u00df der Wichtigkeit eines Knotens innerhalb eines Netzwerks, dass auf den Verbindungen eines Knotens beruht. +EigenvectorCentralityPanel.header.title=Eigenvektor-Zentralit\u00e4t +EigenvectorCentralityPanel.iterationsTextField.text=JTextField1 +EigenvectorCentralityPanel.labeliterations.text=Anzahl Iterationen: +EigenvectorCentralityPanel.directedButton.text=Gerichtet +EigenvectorCentralityPanel.undirectedButton.text=Ungerichtet +GraphDistancePanel.normalizeButton.text=Normalisiere Zentralit\u00e4ten in [0,1] +ConnectedComponentUI.name=Verbundene Komponenten +ConnectedComponentUI.shortDescription=Bestimmt die Anzahl von zusammenh\u00e4ngenden Komponenten im Netzwerk. +ClusteringCoefficientUI.name=Durchschn. Clustering Koeffizient +ClusteringCoefficientUI.shortDescription=Mittelt, wie Knoten in ihre Nachbarschaft eingebettet sind. +DegreeDistributionUI.name=Grad Potenzgesetz +DegreeDistributionUI.shortDescription=Misst die H\u00e4ufigkeit von Graden unter allen Knoten eines Netzwerks. +EigenvectorCentralityUI.name=Eigenvektorzentralit\u00e4t +EigenvectorCentralityUI.shortDescription=Ein Ma\u00df der Wichtigkeit eines Knotens in einem Netzwerk, das auf den Verbindungen eines Knotens beruht. +GraphDensityUI.name=Kantendichte +GraphDensityUI.shortDescription=Misst, wie vollst\u00e4ndig das Netzwerk ist. +DiameterUI.name=Netzwerk-Durchmesser +DiameterUI.shortDescription=Netzwerk Durchmesser +HitsUI.name=HITS +HitsUI.shortDescription=Berechnet f\u00fcr jeden Knoten zwei Werte: Wie wertvoll die in diesem Knoten gespeicherte Information ist & die Qualit\u00e4t der Knoten-Verbindungen. +InOutDegreeUI.name=Mittlerer Grad +InOutDegreeUI.shortDescription=Mittlerer Grad +ModularityUI.name=Modularit\u00e4t +ModularityUI.shortDescription=Algorithmus zur "Community"-Erkennung +PageRankUI.name=PageRank +PageRankUI.shortDescription=Sortiert Knoten "pages" entsprechend der H\u00e4ufigkeit mit der ein Nutzer nicht zuf\u00e4llig den Knoten "page" erreicht. +PathLengthUI.name=Mittlere Pfadl\u00e4nge +PathLengthUI.shortDescription=Mittlere Pfadl\u00e4nge +WeightedDegreeUI.name=Mittlerer gewichteter Grad +WeightedDegreeUI.shortDescription=Mittlerer gewichteter Grad +PageRankPanel.edgeWeightCheckbox.text=Kantengewicht verwenden +ModularityPanel.useWeightCheckbox.text=Kantengewicht verwenden +ModularityPanel.jLabel1.text=Aufl\u00f6sung: +ModularityPanel.resolutionTextField.toolTipText=Geben Sie einen Parameter f\u00fcr die Aufl\u00f6sung ein (1.0 entspricht Standard-Modularit\u00e4t, weniger als 1.0 f\u00fchrt zu kleineren Gemeinschaften, mehr zu gr\u00f6\u00dferen) +ModularityPanel.resolutionTextField.text=1.0 +ModularityPanel.labelEdgeWeight.text=Kantengewicht verwenden +ModularityPanel.labelResolution.text=Weniger um mehr (kleinere) Gemeinschaften zu erhalten, gr\u00f6\u00dfer als 1.0 um weniger (gr\u00f6\u00dfere) Gemeinschaften zu erhalten. +ModularityPanel.labelRandomize.text=Erzeuge eine bessere Zerlegung, erh\u00f6ht jedoch die Berechnungsdauer diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_es.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_es.properties index e4dcc59680..71b539eb51 100644 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_es.properties +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_es.properties @@ -1,180 +1,98 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011-2012. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:33+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - GraphDistancePanel.directedRadioButton.text=Dirigido - GraphDistancePanel.undirectedRadioButton.text=No dirigido - ClusteringCoefficientPanel.jLabel1.text=M\u00e9trica de Coeficiente de Clustering - ClusteringCoefficientPanel.directedRadioButton.text=Dirigido - ClusteringCoefficientPanel.undirectedRadioButton.text=No dirigido - DegreeDistributionPanel.directedRadioButton.text=Dirigido - DegreeDistributionPanel.undirectedRadioButton.text=No dirigido - OpenIDE-Module-Short-Description=Implementaciones de las interfaces de usuario de las estad\u00edsticas est\u00e1ndar - +PageRankPanel.probTextField.text= +PageRankPanel.epsilonTextField.text= +HitsPanel.epsilonTextField.text= GraphDensityPanel.directedRadioButton.text=Dirigido - GraphDensityPanel.undirectedRadioButton.text=No dirigido - -HitsPanel.labelEpsilon.text=Epsilon\: - +DegreeDistributionPanel.descriptionLabel.text= +GraphDistancePanel.descriptionLabel.text= +HitsPanel.labelEpsilon.text=\u00C9psilon: +HitsPanel.descriptionLabel.text= HitsPanel.directedRadioButton.text=Dirigido - HitsPanel.undirectedRadioButton.text=No dirigido - ModularityPanel.randomizeCheckbox.text=Aleatorio - -PageRankPanel.labelP.text=Probabilidad (p)\: - -PageRankPanel.labelE.text=Epsilon\: - -PageRankPanel.directedRadioButton.text=Dirigido\: - -PageRankPanel.undirectedRadioButton.text=No dirigido\: - +ModularityPanel.desriptionLabel.text= +PageRankPanel.labelP.text=Probabilidad (p): +PageRankPanel.labelE.text=\u00C9psilon: +PageRankPanel.directedRadioButton.text=Dirigido: +PageRankPanel.undirectedRadioButton.text=No dirigido: GraphDensityPanel.header.title=Densidad - GraphDensityPanel.header.description=Mide c\u00f3mo de cerca est\u00e1 el grafo de ser completo. Un grafo completo tiene todas las aristas posibles y una densidad igual a 1. - ClusteringCoefficientPanel.header.title=Coeficiente de Clustering - ClusteringCoefficientPanel.header.description=El coeficiente de clustering, junto con el valor promedio del camino m\u00e1s corto, puede indicar un efecto "small-world". Indica c\u00f3mo los nodos est\u00e1n incrustados entre sus nodos vecinos. El valor medio da una indicaci\u00f3n general del clustering en la red. - DegreeDistributionPanel.header.title=Distribuci\u00f3n de grado - DegreeDistributionPanel.header.description=Mide la distribuci\u00f3n de los grados entre todos los nodos de la red. - GraphDistancePanel.jXLabel1.text=Mide la frecuencia con la que un nodo aparece en el camino m\u00e1s corto entre nodos de la red. - GraphDistancePanel.jXLabel2.text=La distancia media desde un nodo inicial a todos los dem\u00e1s nodos de la red. - GraphDistancePanel.jXLabel3.text=La distancia desde un nodo a el nodo m\u00e1s alejado de \u00e9l en la red. - -GraphDistancePanel.jLabel1.text=Intermediaci\u00f3n\: - -GraphDistancePanel.jLabel2.text=Cercan\u00eda\: - -GraphDistancePanel.jLabel3.text=Excentricidad\: - +GraphDistancePanel.jLabel1.text=Intermediaci\u00f3n: +GraphDistancePanel.jLabel2.text=Cercan\u00eda: +GraphDistancePanel.jLabel3.text=Excentricidad: GraphDistancePanel.header.description=La distancia media de grafo entre todos los pares de nodos. Los nodos conectados tienen distancia 1. El di\u00e1metro es la distancia de grafo m\u00e1s larga entre dos nodos cualquiera de la red (Es decir, c\u00f3mo de lejos est\u00e1n los 2 nodos m\u00e1s alejados). - GraphDistancePanel.header.title=Distancia - HitsPanel.header.description=Computa dos valores separados para cada nodo. El primer valor (llamado 'Authority') mide c\u00f3mo de valiosa es la informaci\u00f3n almacenada en ese nodo. El segundo valor (llamado 'Hub') mide la calidad de los enlaces de ese nodo. - HitsPanel.header.title=HITS - HitsPanel.epsilonLabel.text=El criterio de parada, cuanto menor sea este valor, m\u00e1s tiempo tomar\u00e1 la convergencia. - PageRankPanel.jXHeader1.description=Clasifica las "p\u00e1ginas" de los nodos de acuerdo a la frecuencia con la que un usuario siguiendo enlaces llega a la "p\u00e1gina" del nodo de forma no aleatoria. - PageRankPanel.jXHeader1.title=PageRank - PageRankPanel.jXLabel1.text=Usado para simular aleatoriamente que el usuario reinicia la navegaci\u00f3n web. - PageRankPanel.jXLabel2.text=El criterio de parada, cuanto menor sea este valor, m\u00e1s tiempo tomar\u00e1 la convergencia. - ModularityPanel.header.title=Modularidad - ModularityPanel.header.description=Algoritmo de detecci\u00f3n de comunidades. - ConnectedComponentPanel.header.description=Determina el n\u00famero de componentes conexas en la red - ConnectedComponentPanel.undirectedRadioButton.text=No dirigido - ConnectedComponentPanel.directedRadioButton.text=Dirigido - ConnectedComponentPanel.header.title=Componentes conexas - ConnectedComponentPanel.jLabel1.text=Detecta componentes fuertemente y d\u00e9bilmente conectadas - ConnectedComponentPanel.jLabel2.text=Detecta solo componentes d\u00e9bilmente conectadas - EigenvectorCentralityPanel.header.description=Una medida de la importancia de un nodo en la red basada en sus conexiones. - EigenvectorCentralityPanel.header.title=Centralidad de vector propio - EigenvectorCentralityPanel.iterationsTextField.text=jTextField1 - -EigenvectorCentralityPanel.labeliterations.text=N\u00famero de iteraciones\: - +EigenvectorCentralityPanel.labeliterations.text=N\u00famero de iteraciones: EigenvectorCentralityPanel.directedButton.text=Dirigido - EigenvectorCentralityPanel.undirectedButton.text=No dirigido - GraphDistancePanel.normalizeButton.text=Normalizar centralidades en el rango [0,1] - ConnectedComponentUI.name=Componentes conexos - ConnectedComponentUI.shortDescription=Determina el n\u00famero de componentes conexas en la red - ClusteringCoefficientUI.name=Coeficiente medio de clustering - ClusteringCoefficientUI.shortDescription=Calcula el promedio de c\u00f3mo los nodos est\u00e1n incrustados en su vecindad. - DegreeDistributionUI.name=Ley de potencias de grado - DegreeDistributionUI.shortDescription=Mide la distribuci\u00f3n de los grados entre todos los nodos de la red. - EigenvectorCentralityUI.name=Centralidad de vector propio - EigenvectorCentralityUI.shortDescription=Una medida de la importancia de un nodo en la red basada en sus conexiones. - GraphDensityUI.name=Densidad de grafo - GraphDensityUI.shortDescription=Mide c\u00f3mo de cerca est\u00e1 la red de ser completa. - DiameterUI.name=Di\u00e1metro de la red - DiameterUI.shortDescription=Di\u00e1metro de la red - HitsUI.name=HITS - -HitsUI.shortDescription=Computa dos valores separados para cada nodo\: c\u00f3mo de valiosa es la informaci\u00f3n del nodo y la calidad de los enlaces del nodo. - +HitsUI.shortDescription=Computa dos valores separados para cada nodo: c\u00f3mo de valiosa es la informaci\u00f3n del nodo y la calidad de los enlaces del nodo. InOutDegreeUI.name=Grado medio - InOutDegreeUI.shortDescription=Grado promedio - ModularityUI.name=Modularidad - ModularityUI.shortDescription=Algoritmo de detecci\u00f3n de comunidades. - PageRankUI.name=PageRank - PageRankUI.shortDescription=Clasifica las "p\u00e1ginas" de los nodos de acuerdo a la frecuencia con la que un usuario siguiendo enlaces llega a la "p\u00e1gina" del nodo de forma no aleatoria. - PathLengthUI.name=Longitud media de camino - PathLengthUI.shortDescription=Longitud media de camino - WeightedDegreeUI.name=Grado medio con pesos - WeightedDegreeUI.shortDescription=Grado promedio con pesos - PageRankPanel.edgeWeightCheckbox.text=Utilizar peso de aristas - ModularityPanel.useWeightCheckbox.text=Utilizar pesos - -ModularityPanel.jLabel1.text=Resoluci\u00f3n\: - +ModularityPanel.jLabel1.text=Resoluci\u00f3n: ModularityPanel.resolutionTextField.toolTipText=Introduce una resoluci\u00f3n (1.0 es modularidad est\u00e1ndar, menor que 1.0 produce comunidades m\u00e1s peque\u00f1as, mayor m\u00e1s grandes) - ModularityPanel.resolutionTextField.text=1.0 - ModularityPanel.labelEdgeWeight.text=Utilizar peso de aristas - ModularityPanel.labelResolution.text=Menor para obtener m\u00e1s comunidades (m\u00e1s peque\u00f1as) y mayor que 1.0 para obtener menos comunidades (m\u00e1s grandes). - ModularityPanel.labelRandomize.text=Produce una mejor descomposici\u00f3n pero aum\u00e9nta el tiempo de c\u00f3mputo +ModularityPanel.initialModularityClassIndexTextField.text=0 +StatisticalInferenceClusteringUI.name=Inferencia estad\u00EDstica +ModularityPanel.labelInitialModularityClassIndex.text=Las clases empiezan a las: +ModularityPanel.initialModularityClassIndexTextField.AccessibleContext.accessibleDescription=Si pones 10 y encuentra 7 clases, se numerar\u00E1n del 10 al 17. +StatisticalInferenceClusteringUI.shortDescription=Algoritmo de detecci\u00F3n de comunidades. diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_fr.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_fr.properties index 0795ef9e74..362400ec0c 100644 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_fr.properties +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_fr.properties @@ -1,182 +1,99 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -# sebastien clem , 2012. -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:16+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -GraphDistancePanel.directedRadioButton.text=Dirig\u00e9 - -GraphDistancePanel.undirectedRadioButton.text=Non dirig\u00e9 - +GraphDistancePanel.directedRadioButton.text=Orient\u00e9 +GraphDistancePanel.undirectedRadioButton.text=Non orient\u00e9 ClusteringCoefficientPanel.jLabel1.text=M\u00e9trique du coefficient de clustering - -ClusteringCoefficientPanel.directedRadioButton.text=Dirig\u00e9 - -ClusteringCoefficientPanel.undirectedRadioButton.text=Non dirig\u00e9 - -DegreeDistributionPanel.directedRadioButton.text=Dirig\u00e9 - -DegreeDistributionPanel.undirectedRadioButton.text=Non dirig\u00e9 - +ClusteringCoefficientPanel.directedRadioButton.text=Orient\u00e9 +ClusteringCoefficientPanel.undirectedRadioButton.text=Non orient\u00e9 +DegreeDistributionPanel.directedRadioButton.text=Orient\u00e9 +DegreeDistributionPanel.undirectedRadioButton.text=Non orient\u00e9 OpenIDE-Module-Short-Description=Impl\u00e9mentations de l'interface utilisateur des statistiques standards - -GraphDensityPanel.directedRadioButton.text=Dirig\u00e9 - -GraphDensityPanel.undirectedRadioButton.text=Non dirig\u00e9 - -HitsPanel.labelEpsilon.text=Epsilon \: - -HitsPanel.directedRadioButton.text=Dirig\u00e9 - -HitsPanel.undirectedRadioButton.text=Non dirig\u00e9 - +PageRankPanel.probTextField.text= +PageRankPanel.epsilonTextField.text= +HitsPanel.epsilonTextField.text= +GraphDensityPanel.directedRadioButton.text=Orient\u00e9 +GraphDensityPanel.undirectedRadioButton.text=Non orient\u00e9 +DegreeDistributionPanel.descriptionLabel.text= +GraphDistancePanel.descriptionLabel.text= +HitsPanel.labelEpsilon.text=Epsilon : +HitsPanel.descriptionLabel.text= +HitsPanel.directedRadioButton.text=Orient\u00e9 +HitsPanel.undirectedRadioButton.text=Non orient\u00e9 ModularityPanel.randomizeCheckbox.text=Al\u00e9atoire - -PageRankPanel.labelP.text=Probabilit\u00e9 (p)\: - -PageRankPanel.labelE.text=Epsilon \: - -PageRankPanel.directedRadioButton.text=Dirig\u00e9 - -PageRankPanel.undirectedRadioButton.text=Non dirig\u00e9 - +ModularityPanel.desriptionLabel.text= +PageRankPanel.labelP.text=Probabilit\u00e9 (p): +PageRankPanel.labelE.text=Epsilon : +PageRankPanel.directedRadioButton.text=Orient\u00e9 +PageRankPanel.undirectedRadioButton.text=Non orient\u00e9 GraphDensityPanel.header.title=Densit\u00e9 - GraphDensityPanel.header.description=Mesure \u00e0 quel point le graphe est pr\u00eat d'\u00eatre complet. Un graphe complet a tous les liens possibles et une densit\u00e9 \u00e9gale \u00e0 1. - ClusteringCoefficientPanel.header.title=Coefficient de clustering - ClusteringCoefficientPanel.header.description=Le coefficient de clustering, coupl\u00e9 au plus court chemin moyen, indique la pr\u00e9sence d'un effet de "small-world", soit la mani\u00e8re dont les noeuds sont encastr\u00e9s dans leur voisinage. La moyenne donne un indice g\u00e9n\u00e9ral sur le clustering du r\u00e9seau. - DegreeDistributionPanel.header.title=Distribution du degr\u00e9 - DegreeDistributionPanel.header.description=Mesure la distribution du degr\u00e9 parmi tous les noeud du r\u00e9seau. - GraphDistancePanel.jXLabel1.text=Mesure la fr\u00e9quence d'apparition d'un noeud sur les plus court chemins entre les noeuds du r\u00e9seau. - GraphDistancePanel.jXLabel2.text=La distance moyenne depuis un noeud de d\u00e9part vers tous les noeuds du r\u00e9seau. - GraphDistancePanel.jXLabel3.text=La distance depuis un noeud de d\u00e9part vers le noeud le plus loin dans le r\u00e9seau. - -GraphDistancePanel.jLabel1.text=Betweenness Centrality \: - -GraphDistancePanel.jLabel2.text=Closeness Centrality \: - -GraphDistancePanel.jLabel3.text=Eccentricit\u00e9 \: - +GraphDistancePanel.jLabel1.text=Betweenness Centrality : +GraphDistancePanel.jLabel2.text=Closeness Centrality : +GraphDistancePanel.jLabel3.text=Eccentricit\u00e9 : GraphDistancePanel.header.description=Distance moyenne entre deux noeuds. Les noeuds connect\u00e9s ont une distance de 1. Le diam\u00e8tre est la plus longue distance possible entre deux noeuds du r\u00e9seau. - GraphDistancePanel.header.title=Distance - HitsPanel.header.description=Calcule deux valeurs distinctes pour chaque noeud. La premi\u00e8re (appel\u00e9e Autorit\u00e9) mesure la valeur de l'information contenue dans le noeud. La seconde (appel\u00e9e Hub) mesure la qualit\u00e9 des liens du noeud. - HitsPanel.header.title=HITS - -HitsPanel.epsilonLabel.text=Crit\u00e8re d'arr\u00eat \: plus cette valeur est petite, plus la convergence est longue. - +HitsPanel.epsilonLabel.text=Crit\u00e8re d'arr\u00eat : plus cette valeur est petite, plus la convergence est longue. PageRankPanel.jXHeader1.description=Classe les noeuds "pages" selon la fr\u00e9quence \u00e0 laquelle un utilisateur suivant les liens atteindra le noeud "page" de mani\u00e8re non al\u00e9atoire. - PageRankPanel.jXHeader1.title=PageRank - PageRankPanel.jXLabel1.text=Simule le re-d\u00e9marrage al\u00e9atoire d'une session de navigation web. - -PageRankPanel.jXLabel2.text=Crit\u00e8re d'arr\u00eat \: plus cette valeur est petite, plus la convergence est longue. - +PageRankPanel.jXLabel2.text=Crit\u00e8re d'arr\u00eat : plus cette valeur est petite, plus la convergence est longue. ModularityPanel.header.title=Modularit\u00e9 - ModularityPanel.header.description=Algorithme de d\u00e9tection de communaut\u00e9. - ConnectedComponentPanel.header.description=D\u00e9termine le nombre de composantes connexes dans le r\u00e9seau. - -ConnectedComponentPanel.undirectedRadioButton.text=Non dirig\u00e9 - -ConnectedComponentPanel.directedRadioButton.text=Dirig\u00e9 - +ConnectedComponentPanel.undirectedRadioButton.text=Non orient\u00e9 +ConnectedComponentPanel.directedRadioButton.text=Orient\u00e9 ConnectedComponentPanel.header.title=Composantes Connexes - ConnectedComponentPanel.jLabel1.text=(D\u00e9tecte les composantes fortement et faiblement connexes) - ConnectedComponentPanel.jLabel2.text=(D\u00e9tecte les composantes faiblement connexes uniquement) - EigenvectorCentralityPanel.header.description=Mesure l'importance d'un noeud dans le r\u00e9seau selon ses connexions. - EigenvectorCentralityPanel.header.title=Centralit\u00e9 Eigenvector - EigenvectorCentralityPanel.iterationsTextField.text=Nombre d'it\u00e9rations - -EigenvectorCentralityPanel.labeliterations.text=Nombre d'it\u00e9rations \: - -EigenvectorCentralityPanel.directedButton.text=Dirig\u00e9 - -EigenvectorCentralityPanel.undirectedButton.text=Non dirig\u00e9 - +EigenvectorCentralityPanel.labeliterations.text=Nombre d'it\u00e9rations : +EigenvectorCentralityPanel.directedButton.text=Orient\u00e9 +EigenvectorCentralityPanel.undirectedButton.text=Non orient\u00e9 GraphDistancePanel.normalizeButton.text=Normalise entre [0,1] - ConnectedComponentUI.name=Composantes Connexes - -!ConnectedComponentUI.shortDescription= - +ConnectedComponentUI.shortDescription=D\u00e9termine le nombre de composantes connexes dans le r\u00e9seau. ClusteringCoefficientUI.name=Coefficient de Clustering - -!ClusteringCoefficientUI.shortDescription= - +# ClusteringCoefficientUI.shortDescription=Averages how nodes are embedded in their neighborhood. DegreeDistributionUI.name=Loi de Puissance du degr\u00e9 - -!DegreeDistributionUI.shortDescription= - +DegreeDistributionUI.shortDescription=Mesure la distribution du degr\u00e9 parmi tous les noeud du r\u00e9seau. EigenvectorCentralityUI.name=Centralit\u00e9 Eigenvector - -!EigenvectorCentralityUI.shortDescription= - +EigenvectorCentralityUI.shortDescription=Mesure l'importance d'un noeud dans le r\u00e9seau selon ses connexions. GraphDensityUI.name=Densit\u00e9 - -!GraphDensityUI.shortDescription= - +GraphDensityUI.shortDescription=Mesure la compl\u00e9tude du graphe. DiameterUI.name=Diam\u00e8tre - -!DiameterUI.shortDescription= - +DiameterUI.shortDescription=Diam\u00e8tre HitsUI.name=HITS - -!HitsUI.shortDescription= - +HitsUI.shortDescription=Calcule deux valeurs distinctes pour chaque noeud. La premi\u00e8re (appel\u00e9e Autorit\u00e9) mesure la valeur de l'information contenue dans le noeud. La seconde (appel\u00e9e Hub) mesure la qualit\u00e9 des liens du noeud. InOutDegreeUI.name=Degr\u00e9 - -!InOutDegreeUI.shortDescription= - +InOutDegreeUI.shortDescription=Degr\u00e9 ModularityUI.name=Modularit\u00e9 - -!ModularityUI.shortDescription= - +ModularityUI.shortDescription=Algorithme de d\u00e9tection de communaut\u00e9. PageRankUI.name=PageRank - -!PageRankUI.shortDescription= - +PageRankUI.shortDescription=Classe les noeuds "pages" selon la fr\u00e9quence \u00e0 laquelle un utilisateur suivant les liens atteindra le noeud "page" de mani\u00e8re non al\u00e9atoire. PathLengthUI.name=Plus courts chemins - -!PathLengthUI.shortDescription= - +PathLengthUI.shortDescription=Plus courts chemins WeightedDegreeUI.name=Degr\u00e9 pond\u00e9r\u00e9 - -!WeightedDegreeUI.shortDescription= - +WeightedDegreeUI.shortDescription=Degr\u00e9 pond\u00e9r\u00e9 PageRankPanel.edgeWeightCheckbox.text=Utiliser le poids des liens - ModularityPanel.useWeightCheckbox.text=Utiliser le poids - -ModularityPanel.jLabel1.text=R\u00e9solution\: - +ModularityPanel.jLabel1.text=R\u00e9solution: ModularityPanel.resolutionTextField.toolTipText=Entrer un param\u00e8tre de r\u00e9solution (1,0 est la modularit\u00e9 standard, moins de 1,0 m\u00e8ne aux plus petites communaut\u00e9s, plus aux plus grandes) - ModularityPanel.resolutionTextField.text=1.0 - ModularityPanel.labelEdgeWeight.text=Utiliser le poids des liens - ModularityPanel.labelResolution.text=Abaissez la valeur pour obtenir plus de communaut\u00e9s (les plus petites) et augmentez l\u00e0 au dessus de 1,0 pour obtenir moins de communaut\u00e9s (les plus grandes). - ModularityPanel.labelRandomize.text=Produit une meilleure d\u00e9composition mais augmente le temps de calcul +ClusteringCoefficientUI.shortDescription=Fait la moyenne de la fa\u00E7on dont les n\u0153uds sont int\u00E9gr\u00E9s dans leur voisinage. +StatisticalInferenceClusteringUI.shortDescription=Algorithme de d\u00E9tection de communaut\u00E9s. +ModularityPanel.labelInitialModularityClassIndex.text=Les classes commencent \u00E0 : +StatisticalInferenceClusteringUI.name=Inf\u00E9rence statistique +ModularityPanel.initialModularityClassIndexTextField.text=0 +ModularityPanel.initialModularityClassIndexTextField.AccessibleContext.accessibleDescription=Si vous mettez 10 et qu'il trouve 7 classes, elles seront num\u00E9rot\u00E9es de 10 \u00E0 17. diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_he.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_he.properties new file mode 100644 index 0000000000..49c7375352 --- /dev/null +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_he.properties @@ -0,0 +1,93 @@ +GraphDistancePanel.directedRadioButton.text=Directed +GraphDistancePanel.undirectedRadioButton.text=Undirected +ClusteringCoefficientPanel.jLabel1.text=Clustering Coefficent Metric +ClusteringCoefficientPanel.directedRadioButton.text=Directed +ClusteringCoefficientPanel.undirectedRadioButton.text=Undirected +DegreeDistributionPanel.directedRadioButton.text=Directed +DegreeDistributionPanel.undirectedRadioButton.text=Undirected +OpenIDE-Module-Short-Description=Standard statistics UI implementations +PageRankPanel.probTextField.text= +PageRankPanel.epsilonTextField.text= +HitsPanel.epsilonTextField.text= +GraphDensityPanel.directedRadioButton.text=Directed +GraphDensityPanel.undirectedRadioButton.text=Undirected +DegreeDistributionPanel.descriptionLabel.text= +GraphDistancePanel.descriptionLabel.text= +HitsPanel.labelEpsilon.text=Epsilon: +HitsPanel.descriptionLabel.text= +HitsPanel.directedRadioButton.text=Directed +HitsPanel.undirectedRadioButton.text=Undirected +ModularityPanel.randomizeCheckbox.text=Randomize +ModularityPanel.desriptionLabel.text= +PageRankPanel.labelP.text=Probability (p): +PageRankPanel.labelE.text=Epsilon: +PageRankPanel.directedRadioButton.text=Directed +PageRankPanel.undirectedRadioButton.text=Undirected +GraphDensityPanel.header.title=Density +GraphDensityPanel.header.description=Measures how close the network is to complete. A complete graph has all possible edges and density equal to 1. +ClusteringCoefficientPanel.header.title=Clustering Coefficent +ClusteringCoefficientPanel.header.description=The clustering coefficient, along with the mean shortest path, can indicate a "small-world" effect. It indicates how nodes are embedded in their neighborhood. The average give an overall indication of the clustering in the network. +DegreeDistributionPanel.header.title=Degree Distribution +DegreeDistributionPanel.header.description=Measures the distribution of degrees amongst all of the nodes within the network. +GraphDistancePanel.jXLabel1.text=Measures how often a node appears on shortest paths between nodes in the network. +GraphDistancePanel.jXLabel2.text=The average distance from a given starting node to all other nodes in the network. +GraphDistancePanel.jXLabel3.text=The distance from a given starting node to the farthest node from it in the network. +GraphDistancePanel.jLabel1.text=Betweenness Centrality: +GraphDistancePanel.jLabel2.text=Closeness Centrality: +GraphDistancePanel.jLabel3.text=Eccentricity: +GraphDistancePanel.header.description=The average graph-distance between all pairs of nodes. Connected nodes have graph distance 1. The diameter is the longest graph distance between any two nodes in the network. (i.e. How far apart are the two most distant nodes). +GraphDistancePanel.header.title=Distance +HitsPanel.header.description=Computes two separate values for each node. The first value (called Authority) measures how valuable information stored at that node is. The second value (called Hub) measures the quality of the nodes links. +HitsPanel.header.title=HITS +HitsPanel.epsilonLabel.text=Stopping criterion, the smaller this value, the longer convergence will take. +PageRankPanel.jXHeader1.description=Ranks nodes "pages" according to how often a user following links will non-randomly reach the node "page". +PageRankPanel.jXHeader1.title=PageRank +PageRankPanel.jXLabel1.text=Used to simulate the user randomly restarting the web-surfing. +PageRankPanel.jXLabel2.text=Stopping criterion, the smaller this value, the longer convergence will take. +ModularityPanel.header.title=Modularity +ModularityPanel.header.description=Community detection algorithm. +ConnectedComponentPanel.header.description=Determines the number of connected components in the network. +ConnectedComponentPanel.undirectedRadioButton.text=Undirected +ConnectedComponentPanel.directedRadioButton.text=Directed +ConnectedComponentPanel.header.title=Connected Components +ConnectedComponentPanel.jLabel1.text=Detects strongly & weakly connected components +ConnectedComponentPanel.jLabel2.text=Detects only weakly connected components +EigenvectorCentralityPanel.header.description=A measure of node importance in a network based on a node's connections. +EigenvectorCentralityPanel.header.title=Eigenvector Centrality +EigenvectorCentralityPanel.iterationsTextField.text=jTextField1 +EigenvectorCentralityPanel.labeliterations.text=Number of iterations: +EigenvectorCentralityPanel.directedButton.text=Directed +EigenvectorCentralityPanel.undirectedButton.text=Undirected +GraphDistancePanel.normalizeButton.text=Normalize Centralities in [0,1] +ConnectedComponentUI.name=Connected Components +ConnectedComponentUI.shortDescription=Determines the number of connected components in the network. +ClusteringCoefficientUI.name=Avg. Clustering Coefficient +ClusteringCoefficientUI.shortDescription=Averages how nodes are embedded in their neighborhood. +DegreeDistributionUI.name=Degree Power Law +DegreeDistributionUI.shortDescription=Measures the distribution of degrees amongst all of the nodes within the network. +EigenvectorCentralityUI.name=Eigenvector Centrality +EigenvectorCentralityUI.shortDescription=A measure of node importance in a network based on a node's connections. +GraphDensityUI.name=Graph Density +GraphDensityUI.shortDescription=Measures how close the network is to complete. +DiameterUI.name=Network Diameter +DiameterUI.shortDescription=Network Diameter +HitsUI.name=HITS +HitsUI.shortDescription=Computes two values for each node: How valuable information stored at that node is & the quality of the nodes links. +InOutDegreeUI.name=Average Degree +InOutDegreeUI.shortDescription=Average Degree +ModularityUI.name=Modularity +ModularityUI.shortDescription=Community detection algorithm. +PageRankUI.name=PageRank +PageRankUI.shortDescription=Ranks nodes "pages" according to how often a user following links will non-randomly reach the node "page". +PathLengthUI.name=Avg. Path Length +PathLengthUI.shortDescription=Avg. Path Length +WeightedDegreeUI.name=Avg. Weighted Degree +WeightedDegreeUI.shortDescription=Avg. Weighted Degree +PageRankPanel.edgeWeightCheckbox.text=Use edge weight +ModularityPanel.useWeightCheckbox.text=Use weights +ModularityPanel.jLabel1.text=Resolution: +ModularityPanel.resolutionTextField.toolTipText=Enter a resolution parameter (1.0 is standard modularity, less than 1.0 leads to smaller communities, more to bigger) +ModularityPanel.resolutionTextField.text=1.0 +ModularityPanel.labelEdgeWeight.text=Use edge weight +ModularityPanel.labelResolution.text=Lower to get more communities (smaller ones) and higher than 1.0 to get less communities (bigger ones). +ModularityPanel.labelRandomize.text=Produce a better decomposition but increases computation time diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_hu.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_hu.properties new file mode 100644 index 0000000000..a51b688253 --- /dev/null +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_hu.properties @@ -0,0 +1,92 @@ + + +PageRankUI.shortDescription=A csom\u00F3pontok \u201Eoldalait\u201D aszerint rangsorolja, hogy a linkeket k\u00F6vet\u0151 felhaszn\u00E1l\u00F3 milyen gyakran jut el nem v\u00E9letlen\u00FCl a csom\u00F3pont \u201Eoldal\u00E1hoz\u201D. +PageRankPanel.jXLabel2.text=Le\u00E1ll\u00EDt\u00E1si felt\u00E9tel, min\u00E9l kisebb ez az \u00E9rt\u00E9k, ann\u00E1l hosszabb ideig tart a konvergencia. +PageRankPanel.undirectedRadioButton.text=Ir\u00E1ny\u00EDtatlan +EigenvectorCentralityPanel.labeliterations.text=Iter\u00E1ci\u00F3k sz\u00E1ma: +HitsPanel.directedRadioButton.text=Ir\u00E1ny\u00EDtott +ModularityPanel.randomizeCheckbox.text=V\u00E9letlenszer\u0171v\u00E9 +ClusteringCoefficientPanel.header.description=A klaszterez\u00E9si egy\u00FCtthat\u00F3 az \u00E1tlagos legr\u00F6videbb \u00FAttal egy\u00FCtt \u201Ekis vil\u00E1g\u201D hat\u00E1st jelezhet. Azt jelzi, hogy a csom\u00F3pontok hogyan vannak be\u00E1gyazva a k\u00F6rnyezet\u00FCkbe. Az \u00E1tlag \u00E1ltal\u00E1nos jelz\u00E9st ad a h\u00E1l\u00F3zatban l\u00E9v\u0151 klaszterez\u00E9sr\u0151l. +HitsPanel.header.title=HITS +ModularityPanel.initialModularityClassIndexTextField.text=0 0 +DegreeDistributionPanel.header.description=M\u00E9ri a fokok eloszl\u00E1s\u00E1t a h\u00E1l\u00F3zat \u00F6sszes csom\u00F3pontja k\u00F6z\u00F6tt. +GraphDistancePanel.normalizeButton.text=A k\u00F6zponti \u00E9rt\u00E9kek normaliz\u00E1l\u00E1sa a [0,1]-ben +StatisticalInferenceClusteringUI.name=Statisztikai k\u00F6vetkeztet\u00E9s +PathLengthUI.name=Avg. \u00C1tlagos. \u00DAthossz +ConnectedComponentPanel.undirectedRadioButton.text=Ir\u00E1ny\u00EDtatlan +WeightedDegreeUI.name=Avg. S\u00FAlyozott fok +ModularityUI.name=Modularit\u00E1s +ModularityPanel.labelInitialModularityClassIndex.text=A foglalkoz\u00E1sok kezdete: +GraphDistancePanel.directedRadioButton.text=Ir\u00E1ny\u00EDtott +HitsUI.shortDescription=Minden csom\u00F3ponthoz k\u00E9t \u00E9rt\u00E9ket sz\u00E1m\u00EDt ki: Mennyire \u00E9rt\u00E9kesek az adott csom\u00F3ponton t\u00E1rolt inform\u00E1ci\u00F3k \u00E9s milyen min\u0151s\u00E9gben kapcsol\u00F3dnak a csom\u00F3pontok. +ConnectedComponentPanel.directedRadioButton.text=Ir\u00E1ny\u00EDtott +PageRankPanel.directedRadioButton.text=Ir\u00E1ny\u00EDtott +PageRankPanel.labelP.text=Val\u00F3sz\u00EDn\u0171s\u00E9g (p): +ModularityPanel.header.title=Modularit\u00E1s +GraphDensityPanel.header.description=M\u00E9ri, milyen k\u00F6zel van a h\u00E1l\u00F3zat a teljess\u00E9ghez. Egy teljes gr\u00E1fnak minden lehets\u00E9ges \u00E9le \u00E9s s\u0171r\u0171s\u00E9ge 1-gyel egyenl\u0151. +HitsPanel.labelEpsilon.text=Epsilon: +ModularityPanel.header.description=K\u00F6z\u00F6ss\u00E9gi \u00E9szlel\u00E9si algoritmus. +ConnectedComponentPanel.header.title=Csatlakoztatott komponensek +InOutDegreeUI.name=\u00C1tlagos fokozat +GraphDistancePanel.undirectedRadioButton.text=Ir\u00E1ny\u00EDtatlan +GraphDensityPanel.undirectedRadioButton.text=Ir\u00E1ny\u00EDtatlan +HitsPanel.header.description=Minden csom\u00F3ponthoz k\u00E9t k\u00FCl\u00F6n \u00E9rt\u00E9ket sz\u00E1m\u00EDt ki. Az els\u0151 \u00E9rt\u00E9k (amelyet tekint\u00E9lynek h\u00EDvnak) azt m\u00E9ri, hogy mennyire \u00E9rt\u00E9kesek az adott csom\u00F3ponton t\u00E1rolt inform\u00E1ci\u00F3k. A m\u00E1sodik \u00E9rt\u00E9k (az \u00FAgynevezett Hub) a csom\u00F3pontok kapcsolatainak min\u0151s\u00E9g\u00E9t m\u00E9ri. +ModularityPanel.jLabel1.text=Felbont\u00E1s: +DiameterUI.shortDescription=H\u00E1l\u00F3zati \u00E1tm\u00E9r\u0151 +ModularityPanel.resolutionTextField.toolTipText=Adjon meg egy felbont\u00E1si param\u00E9tert (1.0 a szabv\u00E1nyos modularit\u00E1s, 1.0-n\u00E1l kevesebb kisebb k\u00F6z\u00F6ss\u00E9gekhez vezet, t\u00F6bb nagyobbhoz) +PageRankUI.name=PageRank +ModularityPanel.initialModularityClassIndexTextField.AccessibleContext.accessibleDescription=Ha 10-et tesz, \u00E9s 7 oszt\u00E1lyt tal\u00E1l, akkor azok 10-t\u0151l 17-ig lesznek sz\u00E1mozva. +EigenvectorCentralityPanel.undirectedButton.text=Ir\u00E1ny\u00EDtatlan +GraphDensityPanel.header.title=S\u0171r\u0171s\u00E9g +GraphDistancePanel.jXLabel1.text=Azt m\u00E9ri, hogy egy csom\u00F3pont milyen gyakran jelenik meg a h\u00E1l\u00F3zat csom\u00F3pontjai k\u00F6z\u00F6tti legr\u00F6videbb utakon. +EigenvectorCentralityPanel.directedButton.text=Ir\u00E1ny\u00EDtott +PageRankPanel.labelE.text=Epsilon: +GraphDensityUI.name=Grafikons\u0171r\u0171s\u00E9g +ConnectedComponentPanel.jLabel1.text=\u00C9rz\u00E9keli az er\u0151sen \u00E9s gyeng\u00E9n csatlakoz\u00F3 alkatr\u00E9szeket +HitsPanel.undirectedRadioButton.text=Ir\u00E1ny\u00EDtatlan +GraphDistancePanel.jXLabel3.text=Egy adott kezd\u0151 csom\u00F3pont \u00E9s a h\u00E1l\u00F3zat t\u0151le legt\u00E1volabbi csom\u00F3pont t\u00E1vols\u00E1ga. +WeightedDegreeUI.shortDescription=Avg. S\u00FAlyozott fok +ClusteringCoefficientPanel.directedRadioButton.text=Ir\u00E1ny\u00EDtott +ConnectedComponentUI.name=Csatlakoztatott komponensek +ConnectedComponentPanel.header.description=Meghat\u00E1rozza a h\u00E1l\u00F3zathoz csatlakoztatott \u00F6sszetev\u0151k sz\u00E1m\u00E1t. +EigenvectorCentralityUI.name=Saj\u00E1tvektor-centralit\u00E1s +EigenvectorCentralityPanel.header.description=A csom\u00F3pont fontoss\u00E1g\u00E1nak m\u00E9rt\u00E9ke a h\u00E1l\u00F3zatban egy csom\u00F3pont kapcsolatai alapj\u00E1n. +ClusteringCoefficientPanel.header.title=Klaszterez\u00E9si egy\u00FCtthat\u00F3 +InOutDegreeUI.shortDescription=\u00C1tlagos fokozat +DegreeDistributionUI.shortDescription=M\u00E9ri a fokok eloszl\u00E1s\u00E1t a h\u00E1l\u00F3zat \u00F6sszes csom\u00F3pontja k\u00F6z\u00F6tt. +ModularityPanel.labelResolution.text=Alacsonyabb, hogy t\u00F6bb k\u00F6z\u00F6ss\u00E9get (kisebbeket), \u00E9s magasabb, mint 1,0, hogy kevesebb (nagyobb) k\u00F6z\u00F6ss\u00E9g legyen. +ClusteringCoefficientPanel.jLabel1.text=Klaszterez\u00E9si egy\u00FCtthat\u00F3 metrika +DegreeDistributionUI.name=Hatalomfok t\u00F6rv\u00E9ny +DegreeDistributionPanel.directedRadioButton.text=Ir\u00E1ny\u00EDtott +ClusteringCoefficientUI.shortDescription=\u00C1tlagolja, hogy a csom\u00F3pontok hogyan vannak be\u00E1gyazva a k\u00F6rnyezet\u00FCkbe. +ModularityUI.shortDescription=K\u00F6z\u00F6ss\u00E9gi \u00E9szlel\u00E9si algoritmus. +EigenvectorCentralityUI.shortDescription=A csom\u00F3pont fontoss\u00E1g\u00E1nak m\u00E9rt\u00E9ke a h\u00E1l\u00F3zatban egy csom\u00F3pont kapcsolatai alapj\u00E1n. +PathLengthUI.shortDescription=Avg. \u00C1tlagos. \u00DAthossz +GraphDensityUI.shortDescription=M\u00E9ri, milyen k\u00F6zel van a h\u00E1l\u00F3zat a teljess\u00E9ghez. +ClusteringCoefficientPanel.undirectedRadioButton.text=Ir\u00E1ny\u00EDtatlan +GraphDistancePanel.header.description=Az \u00F6sszes csom\u00F3pontp\u00E1r k\u00F6z\u00F6tti \u00E1tlagos gr\u00E1ft\u00E1vols\u00E1g. Az \u00F6sszekapcsolt csom\u00F3pontok gr\u00E1ft\u00E1vols\u00E1ga 1. Az \u00E1tm\u00E9r\u0151 a legnagyobb gr\u00E1ft\u00E1vols\u00E1g a h\u00E1l\u00F3zat k\u00E9t csom\u00F3pontja k\u00F6z\u00F6tt. (azaz milyen messze van egym\u00E1st\u00F3l a k\u00E9t legt\u00E1volabbi csom\u00F3pont). +EigenvectorCentralityPanel.iterationsTextField.text=jTextField1 +DegreeDistributionPanel.undirectedRadioButton.text=Ir\u00E1ny\u00EDtatlan +PageRankPanel.edgeWeightCheckbox.text=Haszn\u00E1ljon \u00E9ls\u00FAlyt +ModularityPanel.useWeightCheckbox.text=Haszn\u00E1ljon s\u00FAlyokat +OpenIDE-Module-Short-Description=Szabv\u00E1nyos statisztikai felhaszn\u00E1l\u00F3i fel\u00FClet megval\u00F3s\u00EDt\u00E1sok +ModularityPanel.labelEdgeWeight.text=Haszn\u00E1ljon \u00E9ls\u00FAlyt +GraphDensityPanel.directedRadioButton.text=Ir\u00E1ny\u00EDtott +ConnectedComponentUI.shortDescription=Meghat\u00E1rozza a h\u00E1l\u00F3zathoz csatlakoztatott \u00F6sszetev\u0151k sz\u00E1m\u00E1t. +GraphDistancePanel.header.title=T\u00E1vols\u00E1g +ClusteringCoefficientUI.name=Avg. Klaszterez\u00E9si egy\u00FCtthat\u00F3 +ModularityPanel.labelRandomize.text=Jobb lebont\u00E1st eredm\u00E9nyez, de n\u00F6veli a sz\u00E1m\u00EDt\u00E1si id\u0151t +GraphDistancePanel.jLabel2.text=K\u00F6zponti k\u00F6zels\u00E9g: +PageRankPanel.jXHeader1.description=A csom\u00F3pontok \u201Eoldalait\u201D aszerint rangsorolja, hogy a linkeket k\u00F6vet\u0151 felhaszn\u00E1l\u00F3 milyen gyakran jut el nem v\u00E9letlen\u00FCl a csom\u00F3pont \u201Eoldal\u00E1hoz\u201D. +EigenvectorCentralityPanel.header.title=Saj\u00E1tvektor-centralit\u00E1s +DiameterUI.name=H\u00E1l\u00F3zati \u00E1tm\u00E9r\u0151 +PageRankPanel.jXLabel1.text=Arra haszn\u00E1lj\u00E1k, hogy szimul\u00E1lja a felhaszn\u00E1l\u00F3 v\u00E9letlenszer\u0171en \u00FAjraind\u00EDt\u00F3 web-sz\u00F6rf\u00F6z\u00E9st. +HitsPanel.epsilonLabel.text=Le\u00E1ll\u00EDt\u00E1si felt\u00E9tel, min\u00E9l kisebb ez az \u00E9rt\u00E9k, ann\u00E1l hosszabb ideig tart a konvergencia. +DegreeDistributionPanel.header.title=Fokozat-eloszl\u00E1s +ModularityPanel.resolutionTextField.text=1.0 +GraphDistancePanel.jXLabel2.text=Egy adott kezd\u0151 csom\u00F3pont \u00E9s a h\u00E1l\u00F3zat \u00F6sszes t\u00F6bbi csom\u00F3pontja k\u00F6z\u00F6tti \u00E1tlagos t\u00E1vols\u00E1g. +HitsUI.name=HITS +StatisticalInferenceClusteringUI.shortDescription=K\u00F6z\u00F6ss\u00E9gi \u00E9szlel\u00E9si algoritmus. +GraphDistancePanel.jLabel1.text=K\u00F6zpontis\u00E1g k\u00F6z\u00F6tt: +GraphDistancePanel.jLabel3.text=K\u00FCl\u00F6ncs\u00E9g: +ConnectedComponentPanel.jLabel2.text=Csak a gyeng\u00E9n csatlakoztatott alkatr\u00E9szeket \u00E9szleli diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_it.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_it.properties new file mode 100644 index 0000000000..87927377e1 --- /dev/null +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_it.properties @@ -0,0 +1,93 @@ +GraphDistancePanel.directedRadioButton.text=Orientato +GraphDistancePanel.undirectedRadioButton.text=Non orientato +ClusteringCoefficientPanel.jLabel1.text=Clustering Coefficent Metric +ClusteringCoefficientPanel.directedRadioButton.text=Orientato +ClusteringCoefficientPanel.undirectedRadioButton.text=Non orientato +DegreeDistributionPanel.directedRadioButton.text=Orientato +DegreeDistributionPanel.undirectedRadioButton.text=Non orientato +OpenIDE-Module-Short-Description=Standard statistics UI implementations +PageRankPanel.probTextField.text= +PageRankPanel.epsilonTextField.text= +HitsPanel.epsilonTextField.text= +GraphDensityPanel.directedRadioButton.text=Orientato +GraphDensityPanel.undirectedRadioButton.text=Non orientato +DegreeDistributionPanel.descriptionLabel.text= +GraphDistancePanel.descriptionLabel.text= +HitsPanel.labelEpsilon.text=Epsilon: +HitsPanel.descriptionLabel.text= +HitsPanel.directedRadioButton.text=Orientato +HitsPanel.undirectedRadioButton.text=Non orientato +ModularityPanel.randomizeCheckbox.text=Randomize +ModularityPanel.desriptionLabel.text= +PageRankPanel.labelP.text=Probability (p): +PageRankPanel.labelE.text=Epsilon: +PageRankPanel.directedRadioButton.text=Orientato +PageRankPanel.undirectedRadioButton.text=Non orientato +GraphDensityPanel.header.title=Density +GraphDensityPanel.header.description=Measures how close the network is to complete. A complete graph has all possible edges and density equal to 1. +ClusteringCoefficientPanel.header.title=Clustering Coefficent +ClusteringCoefficientPanel.header.description=The clustering coefficient, along with the mean shortest path, can indicate a "small-world" effect. It indicates how nodes are embedded in their neighborhood. The average give an overall indication of the clustering in the network. +DegreeDistributionPanel.header.title=Degree Distribution +DegreeDistributionPanel.header.description=Measures the distribution of degrees amongst all of the nodes within the network. +GraphDistancePanel.jXLabel1.text=Measures how often a node appears on shortest paths between nodes in the network. +GraphDistancePanel.jXLabel2.text=The average distance from a given starting node to all other nodes in the network. +GraphDistancePanel.jXLabel3.text=The distance from a given starting node to the farthest node from it in the network. +GraphDistancePanel.jLabel1.text=Betweenness Centrality: +GraphDistancePanel.jLabel2.text=Closeness Centrality: +GraphDistancePanel.jLabel3.text=Eccentricity: +GraphDistancePanel.header.description=The average graph-distance between all pairs of nodes. Connected nodes have graph distance 1. The diameter is the longest graph distance between any two nodes in the network. (i.e. How far apart are the two most distant nodes). +GraphDistancePanel.header.title=Distance +HitsPanel.header.description=Computes two separate values for each node. The first value (called Authority) measures how valuable information stored at that node is. The second value (called Hub) measures the quality of the nodes links. +HitsPanel.header.title=HITS +HitsPanel.epsilonLabel.text=Stopping criterion, the smaller this value, the longer convergence will take. +PageRankPanel.jXHeader1.description=Ranks nodes "pages" according to how often a user following links will non-randomly reach the node "page". +PageRankPanel.jXHeader1.title=PageRank +PageRankPanel.jXLabel1.text=Used to simulate the user randomly restarting the web-surfing. +PageRankPanel.jXLabel2.text=Stopping criterion, the smaller this value, the longer convergence will take. +ModularityPanel.header.title=Modularity +ModularityPanel.header.description=Community detection algorithm. +ConnectedComponentPanel.header.description=Determines the number of connected components in the network. +ConnectedComponentPanel.undirectedRadioButton.text=Non orientato +ConnectedComponentPanel.directedRadioButton.text=Orientato +ConnectedComponentPanel.header.title=Connected Components +ConnectedComponentPanel.jLabel1.text=Detects strongly & weakly connected components +ConnectedComponentPanel.jLabel2.text=Detects only weakly connected components +EigenvectorCentralityPanel.header.description=A measure of node importance in a network based on a node's connections. +EigenvectorCentralityPanel.header.title=Eigenvector Centrality +EigenvectorCentralityPanel.iterationsTextField.text=jTextField1 +EigenvectorCentralityPanel.labeliterations.text=Number of iterations: +EigenvectorCentralityPanel.directedButton.text=Orientato +EigenvectorCentralityPanel.undirectedButton.text=Non orientato +GraphDistancePanel.normalizeButton.text=Normalize Centralities in [0,1] +ConnectedComponentUI.name=Connected Components +ConnectedComponentUI.shortDescription=Determines the number of connected components in the network. +ClusteringCoefficientUI.name=Avg. Clustering Coefficient +ClusteringCoefficientUI.shortDescription=Averages how nodes are embedded in their neighborhood. +DegreeDistributionUI.name=Degree Power Law +DegreeDistributionUI.shortDescription=Measures the distribution of degrees amongst all of the nodes within the network. +EigenvectorCentralityUI.name=Eigenvector Centrality +EigenvectorCentralityUI.shortDescription=A measure of node importance in a network based on a node's connections. +GraphDensityUI.name=Graph Density +GraphDensityUI.shortDescription=Measures how close the network is to complete. +DiameterUI.name=Network Diameter +DiameterUI.shortDescription=Network Diameter +HitsUI.name=HITS +HitsUI.shortDescription=Computes two values for each node: How valuable information stored at that node is & the quality of the nodes links. +InOutDegreeUI.name=Grado medio +InOutDegreeUI.shortDescription=Grado medio +ModularityUI.name=Modularity +ModularityUI.shortDescription=Community detection algorithm. +PageRankUI.name=PageRank +PageRankUI.shortDescription=Ranks nodes "pages" according to how often a user following links will non-randomly reach the node "page". +PathLengthUI.name=Avg. Path Length +PathLengthUI.shortDescription=Avg. Path Length +WeightedDegreeUI.name=Avg. Weighted Degree +WeightedDegreeUI.shortDescription=Avg. Weighted Degree +PageRankPanel.edgeWeightCheckbox.text=Use edge weight +ModularityPanel.useWeightCheckbox.text=Use weights +ModularityPanel.jLabel1.text=Resolution: +ModularityPanel.resolutionTextField.toolTipText=Enter a resolution parameter (1.0 is standard modularity, less than 1.0 leads to smaller communities, more to bigger) +ModularityPanel.resolutionTextField.text=1.0 +ModularityPanel.labelEdgeWeight.text=Use edge weight +ModularityPanel.labelResolution.text=Lower to get more communities (smaller ones) and higher than 1.0 to get less communities (bigger ones). +ModularityPanel.labelRandomize.text=Produce a better decomposition but increases computation time diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_ja.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_ja.properties index 161fe42a0a..ee12879b69 100644 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_ja.properties +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_ja.properties @@ -1,180 +1,93 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# Siro Kida , 2011-2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-12 09\:50+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - GraphDistancePanel.directedRadioButton.text=\u6709\u5411 - GraphDistancePanel.undirectedRadioButton.text=\u7121\u5411 - ClusteringCoefficientPanel.jLabel1.text=\u30af\u30e9\u30b9\u30bf\u30ea\u30f3\u30b0\u4fc2\u6570\u8a08\u91cf - ClusteringCoefficientPanel.directedRadioButton.text=\u6709\u5411 - ClusteringCoefficientPanel.undirectedRadioButton.text=\u7121\u5411 - DegreeDistributionPanel.directedRadioButton.text=\u6709\u5411 - DegreeDistributionPanel.undirectedRadioButton.text=\u7121\u5411 - OpenIDE-Module-Short-Description=\u6a19\u6e96\u7d71\u8a08UI\u5b9f\u88c5 - +PageRankPanel.probTextField.text= +PageRankPanel.epsilonTextField.text= +HitsPanel.epsilonTextField.text= GraphDensityPanel.directedRadioButton.text=\u6709\u5411 - GraphDensityPanel.undirectedRadioButton.text=\u7121\u5411 - -HitsPanel.labelEpsilon.text=\u30a4\u30d7\u30b7\u30ed\u30f3\: - +DegreeDistributionPanel.descriptionLabel.text= +GraphDistancePanel.descriptionLabel.text= +HitsPanel.labelEpsilon.text=\u30a4\u30d7\u30b7\u30ed\u30f3: +HitsPanel.descriptionLabel.text= HitsPanel.directedRadioButton.text=\u6709\u5411 - HitsPanel.undirectedRadioButton.text=\u7121\u5411 - ModularityPanel.randomizeCheckbox.text=\u7121\u4f5c\u70ba\u5316 - -PageRankPanel.labelP.text=\u78ba\u7387(p)\: - +ModularityPanel.desriptionLabel.text= +PageRankPanel.labelP.text=\u78ba\u7387(p): PageRankPanel.labelE.text=\u30a4\u30d7\u30b7\u30ed\u30f3\uff1a - PageRankPanel.directedRadioButton.text=\u6709\u5411 - PageRankPanel.undirectedRadioButton.text=\u7121\u5411 - GraphDensityPanel.header.title=\u5bc6\u5ea6 - GraphDensityPanel.header.description=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u304c\u5b8c\u5168\u306b\u3069\u306e\u304f\u3089\u3044\u8fd1\u3044\u304b\u3092\u6e2c\u5b9a\u3057\u307e\u3059\u3002\u5b8c\u5168\u30b0\u30e9\u30d5\u306f\u3001\u3059\u3079\u3066\u306e\u53ef\u80fd\u306a\u8fba\u30681\u306b\u7b49\u3057\u3044\u5bc6\u5ea6\u3092\u6709\u3059\u308b\u3002 - ClusteringCoefficientPanel.header.title=\u30af\u30e9\u30b9\u30bf\u30ea\u30f3\u30b0\u4fc2\u6570 - ClusteringCoefficientPanel.header.description=\u30af\u30e9\u30b9\u30bf\u30ea\u30f3\u30b0\u4fc2\u6570\u306f\u3001\u5e73\u5747\u6700\u77ed\u30d1\u30b9\u3068\u5171\u306b\u3001"\u30b9\u30e2\u30fc\u30eb\u30ef\u30fc\u30eb\u30c9"\u306e\u52b9\u679c\u3092\u793a\u3059\u3053\u3068\u304c\u3067\u304d\u307e\u3059\u3002\u305d\u308c\u306f\u3001\u30ce\u30fc\u30c9\u304c\u3069\u306e\u3088\u3046\u306b\u81ea\u5206\u306e\u8fd1\u6240\u306b\u7d44\u307f\u8fbc\u307e\u308c\u3066\u3044\u308b\u304b\u3092\u793a\u3057\u307e\u3059\u3002\u305d\u306e\u5e73\u5747\u306f\u3001\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u5185\u306e\u30af\u30e9\u30b9\u30bf\u30ea\u30f3\u30b0\u306e\u5168\u4f53\u7684\u306a\u76ee\u5b89\u306b\u306a\u308b\u3002 - DegreeDistributionPanel.header.title=\u6b21\u6570\u5206\u5e03 - DegreeDistributionPanel.header.description=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u5185\u306e\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u9593\u3067\u6b21\u6570\u5206\u5e03\u3092\u6e2c\u5b9a\u3057\u307e\u3059\u3002 - GraphDistancePanel.jXLabel1.text=\u30ce\u30fc\u30c9\u304c\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u5185\u306e\u30ce\u30fc\u30c9\u9593\u306e\u6700\u77ed\u7d4c\u8def\u4e0a\u306b\u8868\u793a\u3055\u308c\u308b\u983b\u5ea6\u3092\u6e2c\u5b9a\u3057\u307e\u3059\u3002 - GraphDistancePanel.jXLabel2.text=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u5185\u306e\u4ed6\u306e\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u306b\u3001\u6307\u5b9a\u3055\u308c\u305f\u958b\u59cb\u30ce\u30fc\u30c9\u304b\u3089\u306e\u5e73\u5747\u8ddd\u96e2\u3002 - GraphDistancePanel.jXLabel3.text=\u6307\u5b9a\u3055\u308c\u305f\u958b\u59cb\u30ce\u30fc\u30c9\u304b\u3089\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306b\u305d\u308c\u304b\u3089\u6700\u3082\u9060\u3044\u30ce\u30fc\u30c9\u307e\u3067\u306e\u8ddd\u96e2\u3002 - GraphDistancePanel.jLabel1.text=\u5a92\u4ecb\u4e2d\u5fc3\u6027 - -GraphDistancePanel.jLabel2.text=\u8fd1\u63a5\u4e2d\u5fc3\u6027\: - -GraphDistancePanel.jLabel3.text=\u96e2\u5fc3\u6027\: - +GraphDistancePanel.jLabel2.text=\u8fd1\u63a5\u4e2d\u5fc3\u6027: +GraphDistancePanel.jLabel3.text=\u96e2\u5fc3\u6027: GraphDistancePanel.header.description=\u30ce\u30fc\u30c9\u306e\u3059\u3079\u3066\u306e\u30da\u30a2\u9593\u306e\u5e73\u5747\u306e\u30b0\u30e9\u30d5 - \u8ddd\u96e2\u3002\u9023\u7d50\u3057\u305f\u30ce\u30fc\u30c9\u306f\u30b0\u30e9\u30d5\u306e\u8ddd\u96e2\u306f1\u3067\u3059\u3002\u76f4\u5f84\u306f\u3001\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u5185\u306e\u4efb\u610f\u306e2\u3064\u306e\u30ce\u30fc\u30c9\u9593\u3067\u6700\u9577\u306e\u30b0\u30e9\u30d5\u306e\u8ddd\u96e2\u3067\u3059\u3002(\u3059\u306a\u308f\u3061\u4e8c\u3064\u306e\u6700\u3082\u9060\u3044\u30ce\u30fc\u30c9\u304c\u3069\u308c\u304f\u3089\u3044\u96e2\u308c\u3066\u3044\u308b\u304b)\u3002 - GraphDistancePanel.header.title=\u8ddd\u96e2 - HitsPanel.header.description=\u5404\u30ce\u30fc\u30c9\u306b2\u3064\u306e\u5225\u500b\u306e\u5024\u3092\u8a08\u7b97\u3057\u307e\u3059\u3002\u6700\u521d\u306e\u5024(\u6a29\u5a01\u3068\u547c\u3070\u308c\u308b)\u306f\u3001\u305d\u306e\u30ce\u30fc\u30c9\u306b\u683c\u7d0d\u3055\u308c\u3066\u3044\u308b\u60c5\u5831\u304c\u3069\u306e\u304f\u3089\u3044\u8cb4\u91cd\u304b\u3092\u6e2c\u5b9a\u3057\u307e\u3059\u3002\uff12\u756a\u76ee\u306e\u5024(\u30cf\u30d6\u3068\u547c\u3070\u308c\u308b)\u306f\u3001\u30ce\u30fc\u30c9\u306e\u30ea\u30f3\u30af\u306e\u54c1\u8cea\u3092\u6e2c\u5b9a\u3059\u308b\u3002 - HitsPanel.header.title=HITS - HitsPanel.epsilonLabel.text=\u505c\u6b62\u57fa\u6e96\u3001\u3053\u306e\u5024\u304c\u5c0f\u3055\u3044\u307b\u3069\u3001\u9577\u3044\u53ce\u675f\u6642\u9593\u304c\u304b\u304b\u308a\u307e\u3059\u3002 - PageRankPanel.jXHeader1.description=\u30e6\u30fc\u30b6\u30fc\u304c\u30d5\u30a9\u30ed\u30fc\u3059\u308b\u30ea\u30f3\u30af\u304c\u975e\u30e9\u30f3\u30c0\u30e0\u306b\u30ce\u30fc\u30c9"\u30da\u30fc\u30b8"\u306b\u5230\u9054\u3059\u308b\u983b\u5ea6\u306b\u5fdc\u3058\u3066\u30ce\u30fc\u30c9"\u30da\u30fc\u30b8"\u3092\u30e9\u30f3\u30af\u4ed8\u3051\u3057\u307e\u3059\u3002 - PageRankPanel.jXHeader1.title=\u30da\u30fc\u30b8\u30e9\u30f3\u30af - PageRankPanel.jXLabel1.text=\u30e9\u30f3\u30c0\u30e0\u306bWeb\u30b5\u30fc\u30d5\u30a3\u30f3\u3092\u518d\u8d77\u52d5\u3057\u3066\u30e6\u30fc\u30b6\u30fc\u3092\u30b7\u30df\u30e5\u30ec\u30fc\u30c8\u3059\u308b\u305f\u3081\u306b\u4f7f\u7528\u3002 - PageRankPanel.jXLabel2.text=\u505c\u6b62\u57fa\u6e96\u3001\u3053\u306e\u5024\u304c\u5c0f\u3055\u3044\u307b\u3069\u3001\u9577\u3044\u53ce\u675f\u6642\u9593\u304c\u304b\u304b\u308a\u307e\u3059\u3002 - ModularityPanel.header.title=\u30e2\u30b8\u30e5\u30e9\u30ea\u30c6\u30a3 - ModularityPanel.header.description=\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u691c\u51fa\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0\u3002 - ConnectedComponentPanel.header.description=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3067\u63a5\u7d9a\u3055\u308c\u305f\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u6570\u3092\u6c7a\u5b9a\u3057\u307e\u3059\u3002 - ConnectedComponentPanel.undirectedRadioButton.text=\u7121\u5411 - ConnectedComponentPanel.directedRadioButton.text=\u6709\u5411 - ConnectedComponentPanel.header.title=\u7d50\u5408\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8 - ConnectedComponentPanel.jLabel1.text=(\u5f37\uff06\u5f31\u9023\u7d50\u6210\u5206\u3092\u691c\u51fa\u3057\u307e\u3059) - ConnectedComponentPanel.jLabel2.text=(\u5f31\u3044\u9023\u7d50\u6210\u5206\u306e\u307f\u3092\u691c\u51fa\u3057\u307e\u3059) - EigenvectorCentralityPanel.header.description=\u30ce\u30fc\u30c9\u306e\u63a5\u7d9a\u306b\u57fa\u3065\u3044\u3066\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u5185\u306e\u30ce\u30fc\u30c9\u306e\u91cd\u8981\u6027\u306e\u5c3a\u5ea6\u3002 - EigenvectorCentralityPanel.header.title=\u56fa\u6709\u30d9\u30af\u30c8\u30eb\u4e2d\u5fc3\u6027 - EigenvectorCentralityPanel.iterationsTextField.text=jTextField1 - -EigenvectorCentralityPanel.labeliterations.text=\u53cd\u5fa9\u6570\: - +EigenvectorCentralityPanel.labeliterations.text=\u53cd\u5fa9\u6570: EigenvectorCentralityPanel.directedButton.text=\u6709\u5411 - EigenvectorCentralityPanel.undirectedButton.text=\u7121\u5411 - GraphDistancePanel.normalizeButton.text=\u4e2d\u5fc3\u751f\u3092[0,1]\u3067\u6b63\u898f\u5316 - ConnectedComponentUI.name=\u9023\u7d50\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8 - -!ConnectedComponentUI.shortDescription= - +ConnectedComponentUI.shortDescription=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u3067\u63a5\u7d9a\u3055\u308c\u305f\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u306e\u6570\u3092\u6c7a\u5b9a\u3057\u307e\u3059\u3002 ClusteringCoefficientUI.name=\u5e73\u5747\u30af\u30e9\u30b9\u30bf\u30ea\u30f3\u30b0\u4fc2\u6570 - -!ClusteringCoefficientUI.shortDescription= - +# ClusteringCoefficientUI.shortDescription=Averages how nodes are embedded in their neighborhood. DegreeDistributionUI.name=\u6b21\u6570\u51aa\u4e57\u5247 - -!DegreeDistributionUI.shortDescription= - +DegreeDistributionUI.shortDescription=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u5185\u306e\u3059\u3079\u3066\u306e\u30ce\u30fc\u30c9\u9593\u3067\u6b21\u6570\u5206\u5e03\u3092\u6e2c\u5b9a\u3057\u307e\u3059\u3002 EigenvectorCentralityUI.name=\u56fa\u6709\u30d9\u30af\u30c8\u30eb\u4e2d\u5fc3\u6027 - -!EigenvectorCentralityUI.shortDescription= - +EigenvectorCentralityUI.shortDescription=\u30ce\u30fc\u30c9\u306e\u63a5\u7d9a\u306b\u57fa\u3065\u3044\u3066\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u5185\u306e\u30ce\u30fc\u30c9\u306e\u91cd\u8981\u6027\u306e\u5c3a\u5ea6\u3002 GraphDensityUI.name=\u30b0\u30e9\u30d5\u5bc6\u5ea6 - -!GraphDensityUI.shortDescription= - +# GraphDensityUI.shortDescription=Measures how close the network is to complete. DiameterUI.name=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u76f4\u5f84 - DiameterUI.shortDescription=\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u5f84 - HitsUI.name=HITS - -!HitsUI.shortDescription= - +# HitsUI.shortDescription=Computes two values for each node: How valuable information stored at that node is & the quality of the nodes links. InOutDegreeUI.name=\u5e73\u5747\u6b21\u6570 - InOutDegreeUI.shortDescription=\u5e73\u5747\u6b21\u6570 - ModularityUI.name=\u30e2\u30b8\u30e5\u30e9\u30ea\u30c6\u30a3 - ModularityUI.shortDescription=\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u691c\u51fa\u30a2\u30eb\u30b4\u30ea\u30ba\u30e0 - PageRankUI.name=\u30da\u30fc\u30b8\u30e9\u30f3\u30af - -!PageRankUI.shortDescription= - +PageRankUI.shortDescription=\u30e6\u30fc\u30b6\u30fc\u304c\u30d5\u30a9\u30ed\u30fc\u3059\u308b\u30ea\u30f3\u30af\u304c\u975e\u30e9\u30f3\u30c0\u30e0\u306b\u30ce\u30fc\u30c9"\u30da\u30fc\u30b8"\u306b\u5230\u9054\u3059\u308b\u983b\u5ea6\u306b\u5fdc\u3058\u3066\u30ce\u30fc\u30c9"\u30da\u30fc\u30b8"\u3092\u30e9\u30f3\u30af\u4ed8\u3051\u3057\u307e\u3059\u3002 PathLengthUI.name=\u5e73\u5747\u30d1\u30b9\u9577 - PathLengthUI.shortDescription=\u5e73\u5747\u30d1\u30b9\u9577 - WeightedDegreeUI.name=\u5e73\u5747\u91cd\u307f\u6b21\u6570 - WeightedDegreeUI.shortDescription=\u5e73\u5747\u91cd\u307f\u4ed8\u304d\u6b21\u6570 - PageRankPanel.edgeWeightCheckbox.text=\u8fba\u306e\u91cd\u307f\u3092\u4f7f\u7528 - ModularityPanel.useWeightCheckbox.text=\u91cd\u307f\u4ed8\u3051\u3092\u4f7f\u7528 - -ModularityPanel.jLabel1.text=\u5206\u89e3\u5ea6\: - +ModularityPanel.jLabel1.text=\u5206\u89e3\u5ea6: ModularityPanel.resolutionTextField.toolTipText=\u5206\u89e3\u30d1\u30e9\u30e1\u30fc\u30bf\u3092\u5165\u529b(1.0\u304c\u6a19\u6e96\u30e2\u30b8\u30e5\u30e9\u30ea\u30c6\u30a3\u3067\u30011.0\u672a\u6e80\u3067\u306f\u5c0f\u3055\u306a\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306b\u30011.0\u3092\u8d85\u3048\u308b\u3068\u5927\u304d\u306a\u30b3\u30df\u30e5\u30cb\u30c6\u30a3\u306b\u306a\u308b) - ModularityPanel.resolutionTextField.text=1.0 - ModularityPanel.labelEdgeWeight.text=\u8fba\u306e\u91cd\u307f\u4ed8\u3051\u3092\u4f7f\u7528 - ModularityPanel.labelResolution.text=1.0\u3088\u308a\u5c0f\u3055\u304f\u306a\u308b\u3068\u591a\u304f\u306e\u30b3\u30df\u30e5\u30cb\u30c6\u30a3(\u5c0f\u3055\u306a\u3082\u306e)\u306b\u3001\u5927\u304d\u304f\u306a\u308b\u3068\u5c11\u306a\u3044\u30b3\u30df\u30e5\u30cb\u30c6\u30a3(\u5927\u304d\u306a\u3082\u306e)\u3068\u306a\u308b\u3002 - ModularityPanel.labelRandomize.text=\u3088\u308a\u7cbe\u7dfb\u306a\u5206\u89e3\u3092\u3059\u308b\u304c\u8a08\u7b97\u6642\u9593\u304c\u304b\u3055\u307f\u307e\u3059 diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_ko.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_ko.properties new file mode 100644 index 0000000000..f1ad8fdf6d --- /dev/null +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_ko.properties @@ -0,0 +1,93 @@ + + +GraphDistancePanel.undirectedRadioButton.text=\uBB34\uBC29\uD5A5\uC131 +ClusteringCoefficientPanel.jLabel1.text=\uAD70\uC9D1\uD654 \uACC4\uC218 \uCCB4\uACC4 +DegreeDistributionPanel.directedRadioButton.text=\uBC29\uD5A5\uC131 +DegreeDistributionPanel.undirectedRadioButton.text=\uBB34\uBC29\uD5A5\uC131 +OpenIDE-Module-Short-Description=\uD45C\uC900 \uD1B5\uACC4 UI \uAD6C\uD604 +HitsPanel.undirectedRadioButton.text=\uBB34\uBC29\uD5A5\uC131 +ModularityPanel.randomizeCheckbox.text=\uBB34\uC791\uC704\uD654 \uD558\uAE30 +PageRankPanel.labelP.text=\uD655\uB960(p): +PageRankPanel.labelE.text=\uC5E1\uC2E4\uB860: +PageRankPanel.directedRadioButton.text=\uBC29\uD5A5\uC131 +GraphDensityPanel.header.title=\uBC00\uB3C4 +ClusteringCoefficientPanel.header.title=\uAD70\uC9D1\uD654 \uACC4\uC218 +DegreeDistributionPanel.header.title=\uCC28\uC218 \uBD84\uD3EC +DegreeDistributionPanel.header.description=\uB124\uD2B8\uC6CC\uD06C \uB0B4\uC758 \uBAA8\uB4E0 \uB178\uB4DC\uAC04 \uCC28\uC218\uC758 \uBD84\uD3EC\uB97C \uCE21\uC815\uD569\uB2C8\uB2E4. +GraphDistancePanel.jXLabel2.text=\uC8FC\uC5B4\uC9C4 \uC2DC\uC791 \uB178\uB4DC\uB85C\uBD80\uD130 \uB124\uD2B8\uC6CC\uD06C\uC5D0 \uC788\uB294 \uBAA8\uB4E0 \uB2E4\uB978 \uB178\uB4DC\uB4E4\uAE4C\uC9C0\uC758 \uD3C9\uADE0 \uAC70\uB9AC. +GraphDistancePanel.jXLabel1.text=\uB124\uD2B8\uC6CC\uD06C\uC758 \uB178\uB4DC\uB4E4 \uC0AC\uC774\uC5D0 \uC788\uB294 \uCD5C\uB2E8 \uACBD\uB85C\uC5D0 \uB178\uB4DC\uAC00 \uB098\uD0C0\uB098\uB294 \uBE48\uB3C4\uB97C \uCE21\uC815. +GraphDistancePanel.jXLabel3.text=\uC8FC\uC5B4\uC9C4 \uC2DC\uC791 \uB178\uB4DC\uB85C\uBD80\uD130 \uB124\uD2B8\uC6CC\uD06C \uB0B4 \uAC00\uC7A5 \uBA3C \uB178\uB4DC\uAE4C\uC9C0\uC758 \uAC70\uB9AC. +GraphDistancePanel.jLabel1.text=\uB9E4\uAC1C \uC911\uC2EC\uC131: +GraphDistancePanel.jLabel2.text=\uADFC\uC811 \uC911\uC2EC\uC131: +GraphDistancePanel.jLabel3.text=\uC774\uC9C8\uC131 \uC815\uB3C4: +GraphDistancePanel.header.title=\uAC70\uB9AC +HitsPanel.header.description=\uAC01 \uB178\uB4DC\uC5D0 \uB300\uD574 \uB450 \uAC1C\uC758 \uBCC4\uB3C4 \uAC12\uC744 \uACC4\uC0B0\uD55C\uB2E4. \uCCAB \uBC88\uC9F8 \uAC12(Authority)\uC740 \uADF8 \uB178\uB4DC\uC5D0 \uC800\uC7A5\uB41C \uC815\uBCF4\uC758 \uAC00\uCE58\uB97C \uCE21\uC815\uD569\uB2C8\uB2E4. \uB450 \uBC88\uC9F8 \uAC12(Hub)\uC740 \uB178\uB4DC \uB9C1\uD06C\uC758 \uC9C8\uC744 \uCE21\uC815\uD569\uB2C8\uB2E4. +HitsPanel.header.title=HITS +HitsPanel.epsilonLabel.text=\uC815\uC9C0 \uAE30\uC900\uC740, \uC774 \uAC12\uC774 \uB354 \uC791\uC740 \uAC83, \uC218\uB834\uC774 \uB354 \uC624\uB798 \uAC78\uB9AC\uB294 \uAC83\uC784. +PageRankPanel.jXHeader1.title=\uD398\uC774\uC9C0 \uC21C\uC704 +PageRankPanel.jXLabel1.text=\uC6F9 \uC11C\uD551\uC744 \uBB34\uC791\uC704\uB85C \uC7AC\uC2DC\uC791\uD558\uB294 \uC0AC\uC6A9\uC790\uB97C \uC2DC\uBBAC\uB808\uC774\uC158 \uD558\uB294 \uB370\uC5D0 \uC0AC\uC6A9\uB428. +PageRankPanel.jXLabel2.text=\uC815\uC9C0 \uAE30\uC900\uC740, \uC774 \uAC12\uC774 \uB354 \uC791\uC740 \uAC83, \uC218\uB834\uC774 \uB354 \uC624\uB798 \uAC78\uB9AC\uB294 \uAC83\uC784. +ModularityPanel.header.title=\uBAA8\uB4C8\uC131 +ModularityPanel.header.description=\uCEE4\uBBA4\uB2C8\uD2F0 \uD0D0\uC9C0 \uC54C\uACE0\uB9AC\uB4EC. +ConnectedComponentPanel.undirectedRadioButton.text=\uBB34\uBC29\uD5A5\uC131 +ConnectedComponentPanel.directedRadioButton.text=\uBC29\uD5A5\uC131 +ConnectedComponentPanel.header.title=\uC5F0\uACB0\uB41C \uCEF4\uD3EC\uB10C\uD2B8 +ConnectedComponentPanel.jLabel1.text=\uC5F0\uACB0\uB41C \uCEF4\uD3EC\uB10C\uD2B8\uB97C \uAC15\uD558\uAC8C \uADF8\uB9AC\uACE0 \uC57D\uD558\uAC8C \uD0D0\uC9C0 +ConnectedComponentPanel.jLabel2.text=\uC57D\uD558\uAC8C \uC5F0\uACB0\uB41C \uCEF4\uD3EC\uB10C\uD2B8\uB9CC \uD0D0\uC9C0 +EigenvectorCentralityPanel.header.title=\uC544\uC774\uC820\uBCA1\uD130 \uC911\uC2EC\uC131 +EigenvectorCentralityPanel.iterationsTextField.text=jTextField1 +EigenvectorCentralityPanel.directedButton.text=\uBC29\uD5A5\uC131 +EigenvectorCentralityPanel.undirectedButton.text=\uBB34\uBC29\uD5A5\uC131 +ClusteringCoefficientUI.name=\uD3C9\uADE0 \uAD70\uC9D1\uD654 \uACC4\uC218 +DegreeDistributionUI.name=\uCC28\uC218 Power-Law \uBD84\uD3EC +EigenvectorCentralityUI.name=\uC544\uC774\uC820\uBCA1\uD130 \uC911\uC2EC\uC131 +GraphDensityUI.name=\uADF8\uB798\uD504 \uBC00\uB3C4 +GraphDensityUI.shortDescription=\uB124\uD2B8\uC6CC\uD06C\uAC00 \uC644\uC131\uD558\uB294 \uB370\uC5D0 \uC5BC\uB9C8\uB098 \uAC00\uAE4C\uC6B4\uC9C0\uB97C \uCE21\uC815\uD55C\uB2E4. +DiameterUI.name=\uB124\uD2B8\uC6CC\uD06C \uC9C0\uB984 +InOutDegreeUI.name=\uD3C9\uADE0 \uCC28\uC218 +InOutDegreeUI.shortDescription=\uD3C9\uADE0 \uCC28\uC218 +ModularityUI.name=\uBAA8\uB4C8\uC131 +ModularityUI.shortDescription=\uCEE4\uBBA4\uB2C8\uD2F0 \uD0D0\uC9C0 \uC54C\uACE0\uB9AC\uB4EC. +StatisticalInferenceClusteringUI.name=\uD1B5\uACC4\uC801 \uCD94\uB860 +PageRankUI.name=\uD398\uC774\uC9C0 \uC21C\uC704 +PathLengthUI.name=\uD3C9\uADE0 \uACBD\uB85C \uAE38\uC774 +PathLengthUI.shortDescription=\uD3C9\uADE0 \uACBD\uB85C \uAE38\uC774 +WeightedDegreeUI.name=\uD3C9\uADE0 \uAC00\uC911\uCE58 \uCC28\uC218 +WeightedDegreeUI.shortDescription=\uD3C9\uADE0 \uAC00\uC911\uCE58 \uCC28\uC218 +ModularityPanel.useWeightCheckbox.text=\uAC00\uC911\uCE58 \uC0AC\uC6A9 +PageRankPanel.edgeWeightCheckbox.text=\uC5E3\uC9C0 \uCC28\uC218 \uC0AC\uC6A9 +ModularityPanel.jLabel1.text=\uD574\uC0C1\uB3C4: +ModularityPanel.resolutionTextField.toolTipText=\uD574\uC0C1\uB3C4 \uD30C\uB77C\uBBF8\uD130\uB97C \uC785\uB825 (1.0\uC774 \uD45C\uC900 \uBAA8\uB4C8\uC131\uC774\uACE0, 1.0\uBCF4\uB2E4 \uC791\uC73C\uBA74 \uB354 \uC791\uC740 \uCEE4\uBBA4\uB2C8\uD2F0, \uD06C\uBA74 \uD070 \uCEE4\uBBA4\uB2C8\uD2F0) +ModularityPanel.resolutionTextField.text=1.0 +ModularityPanel.labelEdgeWeight.text=\uC5E3\uC9C0 \uAC00\uC911\uCE58 \uC0AC\uC6A9 +ModularityPanel.labelRandomize.text=\uB354 \uC88B\uC740 \uBD84\uD574\uB97C \uC0DD\uC131\uD558\uB098 \uACC4\uC0B0 \uC2DC\uAC04\uC774 \uC99D\uAC00 +ModularityPanel.initialModularityClassIndexTextField.text=0 +ModularityPanel.labelInitialModularityClassIndex.text=\uD074\uB798\uC2A4 \uC2DC\uC791\uC810: +ModularityPanel.initialModularityClassIndexTextField.AccessibleContext.accessibleDescription=10\uC744 \uB123\uC73C\uBA74 7\uAC1C \uD074\uB798\uC2A4\uB97C \uCC3E\uAC8C \uB418\uBA70, 10\uC5D0\uC11C 17\uAE4C\uC9C0 \uBC88\uD638\uAC00 \uBD99\uC744 \uAC83\uC774\uB2E4. +GraphDistancePanel.header.description=\uBAA8\uB4E0 \uB178\uB4DC\uC30D \uC0AC\uC774\uC758 \uD3C9\uADE0 \uADF8\uB798\uD504-\uAC70\uB9AC. \uC5F0\uACB0\uB41C \uB178\uB4DC\uB4E4\uC740 \uADF8\uB798\uD504 \uAC70\uB9AC 1\uC744 \uAC16\uB294\uB2E4. \uB2E4\uC774\uC5B4\uBBF8\uD130\uB294 \uB124\uD2B8\uC6CC\uD06C \uB0B4\uC758 \uC784\uC758\uC758 \uB450 \uAC1C \uB178\uB4DC\uB4E4 \uC0AC\uC774\uC758 \uAC00\uC7A5 \uAE34 \uADF8\uB798\uD504 \uAC70\uB9AC\uC774\uB2E4. +ConnectedComponentPanel.header.description=\uB124\uD2B8\uC6CC\uD06C\uC5D0\uC11C \uC5F0\uACB0\uB41C \uCEF4\uD3EC\uB10C\uD2B8\uC758 \uC218\uB97C \uACB0\uC815\uD55C\uB2E4. +EigenvectorCentralityPanel.header.description=\uB178\uB4DC\uC758 \uC5F0\uACB0\uC5D0 \uAE30\uBC18\uD558\uC5EC \uB124\uD2B8\uC6CC\uD06C \uB0B4\uC758 \uB178\uB4DC \uC911\uC694\uC131\uC758 \uCE21\uC815\uD55C\uB2E4. +EigenvectorCentralityPanel.labeliterations.text=\uBC18\uBCF5 \uD69F\uC218: +GraphDistancePanel.normalizeButton.text=[0,1]\uC5D0\uC11C \uC911\uC2EC\uC131\uC744 \uC815\uADDC\uD654 +ConnectedComponentUI.name=\uC5F0\uACB0\uB41C \uCEF4\uD3EC\uB10C\uD2B8 +ConnectedComponentUI.shortDescription=\uB124\uD2B8\uC6CC\uD06C\uC5D0\uC11C \uC5F0\uACB0\uB41C \uCEF4\uD3EC\uB10C\uD2B8\uC758 \uC218\uB97C \uACB0\uC815\uD55C\uB2E4. +ClusteringCoefficientUI.shortDescription=\uB178\uB4DC\uAC00 \uC790\uC2E0\uC758 \uC774\uC6C3\uC5D0 \uD3EC\uD568\uB418\uB294 \uB178\uB4DC \uC218\uC758 \uD3C9\uADE0. +DegreeDistributionUI.shortDescription=\uB124\uD2B8\uC6CC\uD06C \uB0B4\uC5D0 \uC788\uB294 \uBAA8\uB4E0 \uB178\uB4DC \uAC04 \uCC28\uC218\uC758 \uBD84\uD3EC\uB97C \uCE21\uC815\uD55C\uB2E4. +EigenvectorCentralityUI.shortDescription=\uB178\uB4DC\uC758 \uC5F0\uACB0\uC5D0 \uAE30\uBC18\uD55C \uB124\uD2B8\uC6CC\uD06C \uB0B4\uC758 \uB178\uB4DC \uC911\uC694\uC131\uC744 \uCE21\uC815. +DiameterUI.shortDescription=\uB124\uD2B8\uC6CC\uD06C \uC9C0\uB984 +HitsUI.name=HITS +HitsUI.shortDescription=\uAC01 \uB178\uB4DC\uC5D0 \uB300\uD574 2\uAC1C \uAC12\uC744 \uACC4\uC0B0: \uB178\uB4DC\uC5D0 \uC5BC\uB9C8\uB098 \uAC00\uCE58 \uC788\uB294 \uC815\uBCF4\uAC00 \uC800\uC7A5\uB418\uC5B4 \uC788\uB294\uAC00 \uADF8\uB9AC\uACE0 \uB178\uB4DC \uB9C1\uD06C\uC758 \uC9C8. +StatisticalInferenceClusteringUI.shortDescription=\uCEE4\uBBA4\uB2C8\uD2F0 \uD0D0\uC9C0 \uC54C\uACE0\uB9AC\uB4EC. +PageRankUI.shortDescription=\uC0AC\uC6A9\uC790\uAC00 \uC5BC\uB9C8\uB098 \uC790\uC8FC \uB9C1\uD06C\uB97C \uB530\uB77C\uAC00\uB294\uC9C0\uC5D0 \uB530\uB974\uB294 "pages" \uC21C\uC704 \uB178\uB4DC\uB294 \uB79C\uB364\uD558\uC9C0 \uC54A\uAC8C "page" \uB178\uB4DC\uC5D0 \uB3C4\uB2EC\uD560 \uAC83\uC785\uB2C8\uB2E4. +PageRankPanel.jXHeader1.description=\uC0AC\uC6A9\uC790\uAC00 \uC5BC\uB9C8\uB098 \uC790\uC8FC \uB9C1\uD06C\uB97C \uB530\uB77C\uAC00\uB294\uC9C0\uC5D0 \uB530\uB974\uB294 "pages" \uC21C\uC704 \uB178\uB4DC\uB294 \uB79C\uB364\uD558\uC9C0 \uC54A\uAC8C "page" \uB178\uB4DC\uC5D0 \uB3C4\uB2EC\uD560 \uAC83\uC785\uB2C8\uB2E4. +ModularityPanel.labelResolution.text=\uB9CE\uC740 \uCEE4\uBBA4\uB2C8\uD2F0\uB97C \uC5BB\uC73C\uB824\uBA74 \uB354 \uB0AE\uAC8C (\uB354 \uC791\uC740 \uAC83\uB4E4) \uD558\uACE0, \uC801\uC740 \uCEE4\uBBA4\uB2C8\uD2F0\uB97C (\uD070 \uAC83\uB4E4) \uC5BB\uC73C\uB824\uBA74 1.0\uBCF4\uB2E4 \uB192\uAC8C \uD568. +GraphDistancePanel.directedRadioButton.text=\uBC29\uD5A5\uC131 +ClusteringCoefficientPanel.directedRadioButton.text=\uBC29\uD5A5\uC131 +PageRankPanel.undirectedRadioButton.text=\uBB34\uBC29\uD5A5\uC131 +GraphDensityPanel.undirectedRadioButton.text=\uBB34\uBC29\uD5A5\uC131 +HitsPanel.labelEpsilon.text=\uC5E1\uC2E4\uB860: +ClusteringCoefficientPanel.undirectedRadioButton.text=\uBB34\uBC29\uD5A5\uC131 +GraphDensityPanel.directedRadioButton.text=\uBC29\uD5A5\uC131 +HitsPanel.directedRadioButton.text=\uBC29\uD5A5\uC131 +GraphDensityPanel.header.description=\uB124\uD2B8\uC6CC\uD06C\uAC00 \uC644\uC131\uB418\uB294 \uB370\uC5D0 \uC5BC\uB9C8\uB098 \uAC00\uAE4C\uC6B4\uC9C0 \uCE21\uC815\uD569\uB2C8\uB2E4. \uC644\uC804 \uADF8\uB798\uD504\uB294 \uBAA8\uB4E0 \uAC00\uB2A5\uD55C \uC5E3\uC9C0\uB97C \uAC00\uC9C0\uACE0 \uC788\uACE0 \uBC00\uB3C4\uB294 1\uC774\uB2E4. +ClusteringCoefficientPanel.header.description=\uAD70\uC9D1\uD654 \uACC4\uC218\uB294, \uD3C9\uADE0 \uCD5C\uB2E8 \uACBD\uB85C\uC640 \uB9C8\uCC2C\uAC00\uC9C0\uB85C, "small-world" \uD6A8\uACFC\uB97C \uB098\uD0C0\uB0BC \uC218 \uC788\uC2B5\uB2C8\uB2E4. \uB178\uB4DC\uB4E4\uC774 \uC5B4\uB5BB\uAC8C \uC774\uC6C3\uC5D0 \uB0B4\uC7A5\uB418\uB294\uC9C0 \uAC00\uB9AC\uD0B5\uB2C8\uB2E4. \uD3C9\uADE0\uC740 \uB124\uD2B8\uC6CC\uD06C\uC5D0\uC11C \uAD70\uC9D1\uD654\uC5D0 \uB300\uD55C \uC804\uBC18\uC801\uC778 \uC9C0\uD45C\uB97C \uC81C\uACF5\uD55C\uB2E4. diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_nl.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_nl.properties new file mode 100644 index 0000000000..e2e807a035 --- /dev/null +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_nl.properties @@ -0,0 +1,93 @@ +GraphDistancePanel.directedRadioButton.text=Gericht +GraphDistancePanel.undirectedRadioButton.text=Ongericht +ClusteringCoefficientPanel.jLabel1.text=Clustering Coefficent Metric +ClusteringCoefficientPanel.directedRadioButton.text=Gericht +ClusteringCoefficientPanel.undirectedRadioButton.text=Ongericht +DegreeDistributionPanel.directedRadioButton.text=Gericht +DegreeDistributionPanel.undirectedRadioButton.text=Ongericht +OpenIDE-Module-Short-Description=Standard statistics UI implementations +PageRankPanel.probTextField.text= +PageRankPanel.epsilonTextField.text= +HitsPanel.epsilonTextField.text= +GraphDensityPanel.directedRadioButton.text=Gericht +GraphDensityPanel.undirectedRadioButton.text=Ongericht +DegreeDistributionPanel.descriptionLabel.text= +GraphDistancePanel.descriptionLabel.text= +HitsPanel.labelEpsilon.text=Epsilon: +HitsPanel.descriptionLabel.text= +HitsPanel.directedRadioButton.text=Gericht +HitsPanel.undirectedRadioButton.text=Ongericht +ModularityPanel.randomizeCheckbox.text=Randomize +ModularityPanel.desriptionLabel.text= +PageRankPanel.labelP.text=Kans (p): +PageRankPanel.labelE.text=Epsilon: +PageRankPanel.directedRadioButton.text=Gericht +PageRankPanel.undirectedRadioButton.text=Ongericht +GraphDensityPanel.header.title=Dichtheid +GraphDensityPanel.header.description=Measures how close the network is to complete. A complete graph has all possible edges and density equal to 1. +ClusteringCoefficientPanel.header.title=Clustering Coefficent +ClusteringCoefficientPanel.header.description=The clustering coefficient, along with the mean shortest path, can indicate a "small-world" effect. It indicates how nodes are embedded in their neighborhood. The average give an overall indication of the clustering in the network. +DegreeDistributionPanel.header.title=Degree Distribution +DegreeDistributionPanel.header.description=Measures the distribution of degrees amongst all of the nodes within the network. +GraphDistancePanel.jXLabel1.text=Measures how often a node appears on shortest paths between nodes in the network. +GraphDistancePanel.jXLabel2.text=The average distance from a given starting node to all other nodes in the network. +GraphDistancePanel.jXLabel3.text=The distance from a given starting node to the farthest node from it in the network. +GraphDistancePanel.jLabel1.text=Betweenness Centrality: +GraphDistancePanel.jLabel2.text=Closeness Centrality: +GraphDistancePanel.jLabel3.text=Excentriciteit: +GraphDistancePanel.header.description=The average graph-distance between all pairs of nodes. Connected nodes have graph distance 1. The diameter is the longest graph distance between any two nodes in the network. (i.e. How far apart are the two most distant nodes). +GraphDistancePanel.header.title=Afstand +HitsPanel.header.description=Computes two separate values for each node. The first value (called Authority) measures how valuable information stored at that node is. The second value (called Hub) measures the quality of the nodes links. +HitsPanel.header.title=HITS +HitsPanel.epsilonLabel.text=Stopping criterion, the smaller this value, the longer convergence will take. +PageRankPanel.jXHeader1.description=Ranks nodes "pages" according to how often a user following links will non-randomly reach the node "page". +PageRankPanel.jXHeader1.title=PageRank +PageRankPanel.jXLabel1.text=Used to simulate the user randomly restarting the web-surfing. +PageRankPanel.jXLabel2.text=Stopping criterion, the smaller this value, the longer convergence will take. +ModularityPanel.header.title=Modularity +ModularityPanel.header.description=Community detection algorithm. +ConnectedComponentPanel.header.description=Determines the number of connected components in the network. +ConnectedComponentPanel.undirectedRadioButton.text=Ongericht +ConnectedComponentPanel.directedRadioButton.text=Gericht +ConnectedComponentPanel.header.title=Connected Components +ConnectedComponentPanel.jLabel1.text=Detects strongly & weakly connected components +ConnectedComponentPanel.jLabel2.text=Detects only weakly connected components +EigenvectorCentralityPanel.header.description=A measure of node importance in a network based on a node's connections. +EigenvectorCentralityPanel.header.title=Eigenvector Centrality +EigenvectorCentralityPanel.iterationsTextField.text=jTextField1 +EigenvectorCentralityPanel.labeliterations.text=Aantal iteraties: +EigenvectorCentralityPanel.directedButton.text=Gericht +EigenvectorCentralityPanel.undirectedButton.text=Ongericht +GraphDistancePanel.normalizeButton.text=Normalize Centralities in [0,1] +ConnectedComponentUI.name=Connected Components +ConnectedComponentUI.shortDescription=Determines the number of connected components in the network. +ClusteringCoefficientUI.name=Avg. Clustering Coefficient +ClusteringCoefficientUI.shortDescription=Averages how nodes are embedded in their neighborhood. +DegreeDistributionUI.name=Degree Power Law +DegreeDistributionUI.shortDescription=Measures the distribution of degrees amongst all of the nodes within the network. +EigenvectorCentralityUI.name=Eigenvector Centrality +EigenvectorCentralityUI.shortDescription=A measure of node importance in a network based on a node's connections. +GraphDensityUI.name=Graafdichtheid +GraphDensityUI.shortDescription=Measures how close the network is to complete. +DiameterUI.name=Network Diameter +DiameterUI.shortDescription=Network Diameter +HitsUI.name=HITS +HitsUI.shortDescription=Computes two values for each node: How valuable information stored at that node is & the quality of the nodes links. +InOutDegreeUI.name=Average Degree +InOutDegreeUI.shortDescription=Average Degree +ModularityUI.name=Modularity +ModularityUI.shortDescription=Community detection algorithm. +PageRankUI.name=PageRank +PageRankUI.shortDescription=Ranks nodes "pages" according to how often a user following links will non-randomly reach the node "page". +PathLengthUI.name=Avg. Path Length +PathLengthUI.shortDescription=Avg. Path Length +WeightedDegreeUI.name=Avg. Weighted Degree +WeightedDegreeUI.shortDescription=Avg. Weighted Degree +PageRankPanel.edgeWeightCheckbox.text=Use edge weight +ModularityPanel.useWeightCheckbox.text=Gewichten gebruiken +ModularityPanel.jLabel1.text=Resolutie: +ModularityPanel.resolutionTextField.toolTipText=Enter a resolution parameter (1.0 is standard modularity, less than 1.0 leads to smaller communities, more to bigger) +ModularityPanel.resolutionTextField.text=1.0 +ModularityPanel.labelEdgeWeight.text=Use edge weight +ModularityPanel.labelResolution.text=Lower to get more communities (smaller ones) and higher than 1.0 to get less communities (bigger ones). +ModularityPanel.labelRandomize.text=Produce a better decomposition but increases computation time diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_pt.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_pt.properties new file mode 100644 index 0000000000..b807af106b --- /dev/null +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_pt.properties @@ -0,0 +1,90 @@ +ClusteringCoefficientUI.shortDescription=M\u00E9dias como n\u00F3s incorporados nas suas vizinhan\u00E7as. +ClusteringCoefficientPanel.directedRadioButton.text=Dirigido +ClusteringCoefficientPanel.undirectedRadioButton.text=N\u00E3o dirigido +DegreeDistributionPanel.directedRadioButton.text=Dirigido +DegreeDistributionPanel.undirectedRadioButton.text=N\u00E3o dirigido +OpenIDE-Module-Short-Description=Implementa\u00E7\u00F5es das interfaces de utilizador das estat\u00EDsticas padr\u00E3o +GraphDensityPanel.directedRadioButton.text=Dirigido +GraphDensityPanel.undirectedRadioButton.text=N\u00E3o dirigido +HitsPanel.directedRadioButton.text=Dirigido +HitsPanel.undirectedRadioButton.text=N\u00E3o dirigido +ModularityPanel.randomizeCheckbox.text=Aleat\u00F3rio +PageRankPanel.labelP.text=Probabilidade (p): +PageRankPanel.directedRadioButton.text=Dirigido +PageRankPanel.undirectedRadioButton.text=N\u00E3o dirigido +GraphDensityPanel.header.title=Densidade +GraphDensityPanel.header.description=Mede qu\u00E3o perto o grafo est\u00E1 de ser completo. Um grafo completo tem todas as arestas poss\u00EDveis e densidade igual a 1. +ClusteringCoefficientPanel.header.title=Coeficiente de Clustering +ClusteringCoefficientPanel.header.description=O coeficiente de clustering, juntamente com o valor m\u00E9dio do caminho mais curto, pode indicar um efeito "small-world". Indica como os n\u00F3s est\u00E3o inseridos na sua vizinhan\u00E7a. O valor m\u00E9dio fornece uma indica\u00E7\u00E3o geral do clustering na rede. +DegreeDistributionPanel.header.title=Distribui\u00E7\u00E3o de grau +DegreeDistributionPanel.header.description=Mede a distribui\u00E7\u00E3o de grau entre todos os n\u00F3s da rede. +GraphDistancePanel.jXLabel1.text=Mede a frequ\u00EAncia com que um n\u00F3 aparece nos caminhos mais curtos entre n\u00F3s da rede. +GraphDistancePanel.jXLabel2.text=Dist\u00E2ncia m\u00E9dia de um determinado n\u00F3 inicial para todos os demais n\u00F3s da rede. +GraphDistancePanel.jXLabel3.text=Dist\u00E2ncia de um determinado n\u00F3 inicial at\u00E9 o n\u00F3 mais distante dele na rede. +GraphDistancePanel.jLabel1.text=Centralidade de intermedia\u00E7\u00E3o: +GraphDistancePanel.jLabel2.text=Centralidade de proximidade: +GraphDistancePanel.jLabel3.text=Excentricidade: +GraphDistancePanel.header.description=Dist\u00E2ncia m\u00E9dia de grafo entre todos os pares de n\u00F3s. Os n\u00F3s conectados tem dist\u00E2ncia 1. O di\u00E2metro \u00E9 a maior dist\u00E2ncia de grafo entre dos n\u00F3s quaisquer da rede, ou seja, qu\u00E3o separados est\u00E3o os dois n\u00F3s mais distantes. +GraphDistancePanel.header.title=Dist\u00E2ncia +HitsPanel.header.description=Calcula dois valores distintos para cada n\u00F3. O primeiro valor (chamado 'Authority') mede o quanto s\u00E3o valiosas as informa\u00E7\u00F5es armazenadas naquele n\u00F3. O segundo valor (chamado 'Hub') mede a qualidade das conex\u00F5es deste n\u00F3. +HitsPanel.header.title=HITS +HitsPanel.epsilonLabel.text=Crit\u00E9rio de paragem. Quanto menor este valor, mais tempo a converg\u00EAncia levar\u00E1. +PageRankPanel.jXHeader1.description=Classifica as "p\u00E1ginas" dos n\u00F3s de acordo com a frequ\u00EAncia com que um utilizador seguindo liga\u00E7\u00F5es de maneira n\u00E3o aleat\u00F3ria chega \u00E0 "p\u00E1gina" do n\u00F3. +PageRankPanel.jXLabel1.text=Usado para simular aleatoriamente que o utilizador reinicia la navegaci\u00F3n web. +PageRankPanel.jXLabel2.text=Crit\u00E9rio de paragem. Quanto menor este valor, mais tempo a converg\u00EAncia levar\u00E1. +ModularityPanel.header.title=Modularidade +ModularityPanel.header.description=Algoritmo de detec\u00E7\u00E3o de comunidades. +ConnectedComponentPanel.header.description=Determina a quantidade de componentes conectados na rede. +ConnectedComponentPanel.undirectedRadioButton.text=N\u00E3o dirigido +ConnectedComponentPanel.directedRadioButton.text=Dirigido +ConnectedComponentPanel.header.title=Componentes conectados +ConnectedComponentPanel.jLabel1.text=(Detetar\u00E1 componentes fortemente e fracamente conectados) +ConnectedComponentPanel.jLabel2.text=(Detetar\u00E1 somente componentes fracamente conectados) +EigenvectorCentralityPanel.header.description=Uma medida de import\u00E2ncia do n\u00F3 na rede baseada nas suas conex\u00F5es. +EigenvectorCentralityPanel.header.title=Centralidade de autovetor +EigenvectorCentralityPanel.labeliterations.text=Quantidade de itera\u00E7\u00F5es: +EigenvectorCentralityPanel.directedButton.text=Dirigido +EigenvectorCentralityPanel.undirectedButton.text=N\u00E3o dirigido +GraphDistancePanel.normalizeButton.text=Normalizar centralidades em [0,1] +ConnectedComponentUI.name=Componentes conectados +ClusteringCoefficientUI.name=Coeficiente de clustering m\u00E9dio +EigenvectorCentralityUI.name=Centralidade de autovetor +GraphDensityUI.name=Densidade do grafo +DiameterUI.name=Di\u00E2metro da rede +DiameterUI.shortDescription=Di\u00E2metro da rede +HitsUI.shortDescription=Calcula dois valores para cada n\u00F3: o qu\u00E3o valiosa \u00E9 a informa\u00E7\u00E3o armazenada nele e a qualidade das suas conex\u00F5es de n\u00F3s. +InOutDegreeUI.name=Grau m\u00E9dio +InOutDegreeUI.shortDescription=Grau m\u00E9dio +ModularityUI.name=Modularidade +PageRankUI.shortDescription=Classifica n\u00F3s -- considerando-os como "p\u00E1ginas" -- de acordo com a frequ\u00EAncia com que um utilizador que siga as liga\u00E7\u00F5es de modo n\u00E3o aleat\u00F3rio alcance o n\u00F3. +PathLengthUI.name=Comprimento m\u00E9dio de caminho +PathLengthUI.shortDescription=M\u00E9dia da dist\u00E2ncia de caminho +WeightedDegreeUI.name=Grau ponderado m\u00E9dio +WeightedDegreeUI.shortDescription=M\u00E9dia ponderada de grau +PageRankPanel.edgeWeightCheckbox.text=Usar peso da aresta +ModularityPanel.useWeightCheckbox.text=Utilizar pesos de arestas +ModularityPanel.resolutionTextField.toolTipText=Forne\u00E7a um par\u00E2metro de resolu\u00E7\u00E3o (o valor 1.0 \u00E9 a modularidade padr\u00E3o, valores menores geram comunidades menores, valores maiores comunidades maiores) +ModularityPanel.resolutionTextField.text=1.0 +ModularityPanel.labelResolution.text=Utilize valores menores para gerar mais comunidades menores e valores maiores do que 1.0 para gerar menos comunidades maiores. +HitsPanel.labelEpsilon.text=Epsilon: +GraphDistancePanel.directedRadioButton.text=Dirigido +GraphDistancePanel.undirectedRadioButton.text=N\u00E3o dirigido +ClusteringCoefficientPanel.jLabel1.text=M\u00E9trica de Coeficiente de Clustering +PageRankPanel.labelE.text=Epsilon: +PageRankPanel.jXHeader1.title=PageRank +EigenvectorCentralityPanel.iterationsTextField.text=jTextField1 +ConnectedComponentUI.shortDescription=Determina a quantidade de componentes conectados na rede. +DegreeDistributionUI.name=Lei de pot\u00EAncia de grau +EigenvectorCentralityUI.shortDescription=Uma medida de import\u00E2ncia de n\u00F3s numa rede baseada nas conex\u00F5es de um n\u00F3. +GraphDensityUI.shortDescription=Mede o qu\u00E3o perto a rede est\u00E1 a ser completa. +HitsUI.name=HITS +ModularityUI.shortDescription=Algoritmo de dete\u00E7\u00E3o de comunidades. +StatisticalInferenceClusteringUI.name=Infer\u00EAncia estat\u00EDstica +StatisticalInferenceClusteringUI.shortDescription=Algoritmo de dete\u00E7\u00E3o de comunidades. +PageRankUI.name=PageRank +ModularityPanel.jLabel1.text=Resolu\u00E7\u00E3o: +ModularityPanel.labelEdgeWeight.text=Usar pesos das arestas +ModularityPanel.labelRandomize.text=Produz uma decomposi\u00E7\u00E3o melhor, mas aumenta o tempo de processamento +ModularityPanel.initialModularityClassIndexTextField.AccessibleContext.accessibleDescription=Se p\u00F4r 10 e encontrar 7 classes, ser\u00E3o contados de 10 a 17. +ModularityPanel.initialModularityClassIndexTextField.text=0 +DegreeDistributionUI.shortDescription=Mede a distribui\u00E7\u00E3o de grau entre todos os n\u00F3s da rede. diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_pt_BR.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_pt_BR.properties index 0ef4737e4d..cfd3d6a5b8 100644 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_pt_BR.properties +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_pt_BR.properties @@ -1,182 +1,93 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -# C\u00e9lio Faria Jr. , 2011-2012. -# Eduardo Ramos , 2012. -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-18 11\:22+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - GraphDistancePanel.directedRadioButton.text=Dirigido - GraphDistancePanel.undirectedRadioButton.text=N\u00e3o dirigido - ClusteringCoefficientPanel.jLabel1.text=M\u00e9trica de Coeficiente de Clustering - ClusteringCoefficientPanel.directedRadioButton.text=Dirigido - ClusteringCoefficientPanel.undirectedRadioButton.text=N\u00e3o dirigido - DegreeDistributionPanel.directedRadioButton.text=Dirigido - DegreeDistributionPanel.undirectedRadioButton.text=N\u00e3o dirigido - OpenIDE-Module-Short-Description=Implementa\u00e7\u00f5es das interfaces de usu\u00e1rio das estat\u00edsticas padr\u00e3o - +PageRankPanel.probTextField.text= +PageRankPanel.epsilonTextField.text= +HitsPanel.epsilonTextField.text= GraphDensityPanel.directedRadioButton.text=Dirigido - GraphDensityPanel.undirectedRadioButton.text=N\u00e3o dirigido - -HitsPanel.labelEpsilon.text=Epsilon\: - +DegreeDistributionPanel.descriptionLabel.text= +GraphDistancePanel.descriptionLabel.text= +HitsPanel.labelEpsilon.text=Epsilon: +HitsPanel.descriptionLabel.text= HitsPanel.directedRadioButton.text=Dirigido - HitsPanel.undirectedRadioButton.text=N\u00e3o dirigido - ModularityPanel.randomizeCheckbox.text=Aleat\u00f3rio - -PageRankPanel.labelP.text=Probabilidade (p)\: - -PageRankPanel.labelE.text=Epsilon\: - +ModularityPanel.desriptionLabel.text= +PageRankPanel.labelP.text=Probabilidade (p): +PageRankPanel.labelE.text=Epsilon: PageRankPanel.directedRadioButton.text=Dirigido - PageRankPanel.undirectedRadioButton.text=N\u00e3o dirigido - GraphDensityPanel.header.title=Densidade - GraphDensityPanel.header.description=Mede qu\u00e3o perto o grafo est\u00e1 de ser completo. Um grafo completo tem todas as arestas poss\u00edveis e densidade igual a 1. - ClusteringCoefficientPanel.header.title=Coeficiente de Clustering - ClusteringCoefficientPanel.header.description=O coeficiente de clustering, juntamente com o valor m\u00e9dio do caminho mais curto, pode indicar um efeito "small-world". Indica como os n\u00f3s est\u00e3o inseridos em sua vizinhan\u00e7a. O valor m\u00e9dio fornece uma indica\u00e7\u00e3o geral do clustering na rede. - DegreeDistributionPanel.header.title=Distribui\u00e7\u00e3o de grau - DegreeDistributionPanel.header.description=Mede a distribui\u00e7\u00e3o de grau entre todos os n\u00f3s da rede. - GraphDistancePanel.jXLabel1.text=Mede a frequ\u00eancia com que um n\u00f3 aparece nos caminhos mais curtos entre n\u00f3s da rede. - GraphDistancePanel.jXLabel2.text=Dist\u00e2ncia m\u00e9dia de um determinado n\u00f3 inicial para todos os demais n\u00f3s da rede. - GraphDistancePanel.jXLabel3.text=Dist\u00e2ncia de um determinado n\u00f3 inicial at\u00e9 o n\u00f3 mais distante dele na rede. - -GraphDistancePanel.jLabel1.text=Centralidade de intermedia\u00e7\u00e3o\: - -GraphDistancePanel.jLabel2.text=Centralidade de proximidade\: - -GraphDistancePanel.jLabel3.text=Excentricidade\: - +GraphDistancePanel.jLabel1.text=Centralidade de intermedia\u00e7\u00e3o: +GraphDistancePanel.jLabel2.text=Centralidade de proximidade: +GraphDistancePanel.jLabel3.text=Excentricidade: GraphDistancePanel.header.description=Dist\u00e2ncia m\u00e9dia de grafo entre todos os pares de n\u00f3s. Os n\u00f3s conectados tem dist\u00e2ncia 1. O di\u00e2metro \u00e9 a maior dist\u00e2ncia de grafo entre dos n\u00f3s quaisquer da rede, ou seja, qu\u00e3o separados est\u00e3o os dois n\u00f3s mais distantes. - GraphDistancePanel.header.title=Dist\u00e2ncia - HitsPanel.header.description=Calcula dois valores distintos para cada n\u00f3. O primeiro valor (chamado 'Authority') mede o quanto s\u00e3o valiosas as informa\u00e7\u00f5es armazenadas naquele n\u00f3. O segundo valor (chamado 'Hub') mede a qualidade das conex\u00f5es deste n\u00f3. - HitsPanel.header.title=HITS - HitsPanel.epsilonLabel.text=Crit\u00e9rio de parada. Quanto menor este valor, mais tempo a converg\u00eancia levar\u00e1. - PageRankPanel.jXHeader1.description=Classifica as "p\u00e1ginas" dos n\u00f3s de acordo com a frequ\u00eancia com que um usu\u00e1rio seguindo liga\u00e7\u00f5es de maneira n\u00e3o aleat\u00f3ria chega \u00e0 "p\u00e1gina" do n\u00f3. - PageRankPanel.jXHeader1.title=PageRank - PageRankPanel.jXLabel1.text=Usado para simular aleatoriamente que o usu\u00e1rio reinicia la navegaci\u00f3n web. - PageRankPanel.jXLabel2.text=Crit\u00e9rio de parada. Quanto menor este valor, mais tempo a converg\u00eancia levar\u00e1. - ModularityPanel.header.title=Modularidade - ModularityPanel.header.description=Algoritmo de detec\u00e7\u00e3o de comunidades. - ConnectedComponentPanel.header.description=Determina o n\u00famero de componentes conectados na rede. - ConnectedComponentPanel.undirectedRadioButton.text=N\u00e3o dirigido - ConnectedComponentPanel.directedRadioButton.text=Dirigido - ConnectedComponentPanel.header.title=Componentes conectados - ConnectedComponentPanel.jLabel1.text=(Detectar\u00e1 componentes fortemente e fracamente conectados) - ConnectedComponentPanel.jLabel2.text=(Detectar\u00e1 somente componentes fracamente conectados) - EigenvectorCentralityPanel.header.description=Uma medida de import\u00e2ncia do n\u00f3 na rede baseada em suas conex\u00f5es. - EigenvectorCentralityPanel.header.title=Centralidade de autovetor - EigenvectorCentralityPanel.iterationsTextField.text=jTextField1 - -EigenvectorCentralityPanel.labeliterations.text=N\u00famero de itera\u00e7\u00f5es\: - +EigenvectorCentralityPanel.labeliterations.text=N\u00famero de itera\u00e7\u00f5es: EigenvectorCentralityPanel.directedButton.text=Dirigido - EigenvectorCentralityPanel.undirectedButton.text=N\u00e3o dirigido - GraphDistancePanel.normalizeButton.text=Normalizar centralidades em [0,1] - ConnectedComponentUI.name=Componentes conectados - ConnectedComponentUI.shortDescription=Determina o n\u00famero de componentes conectados na rede - ClusteringCoefficientUI.name=Coeficiente de clustering m\u00e9dio - ClusteringCoefficientUI.shortDescription=Calcula a m\u00e9dia de imers\u00e3o dos n\u00f3s em suas vizinhan\u00e7as - DegreeDistributionUI.name=Lei de pot\u00eancia de grau - DegreeDistributionUI.shortDescription=Mede a distribui\u00e7\u00e3o de grau entre todos os n\u00f3s da rede - EigenvectorCentralityUI.name=Centralidade de autovetor - EigenvectorCentralityUI.shortDescription=Uma medida da import\u00e2ncia do n\u00f3 na rede baseada em suas conex\u00f5es - GraphDensityUI.name=Densidade do grafo - GraphDensityUI.shortDescription=Mede o qu\u00e3o perto a rede est\u00e1 de ser completa - DiameterUI.name=Di\u00e2metro da rede - DiameterUI.shortDescription=Di\u00e2metro da rede - HitsUI.name=HITS - -HitsUI.shortDescription=Calcula dois valores para cada n\u00f3\: o qu\u00e3o valiosa \u00e9 a informa\u00e7\u00e3o armazenada nele e a qualidade de suas conex\u00f5es. - +HitsUI.shortDescription=Calcula dois valores para cada n\u00f3: o qu\u00e3o valiosa \u00e9 a informa\u00e7\u00e3o armazenada nele e a qualidade de suas conex\u00f5es. InOutDegreeUI.name=Grau m\u00e9dio - InOutDegreeUI.shortDescription=Grau m\u00e9dio - ModularityUI.name=Modularidade - ModularityUI.shortDescription=Algoritmo de detec\u00e7\u00e3o de comunidades - PageRankUI.name=PageRank - PageRankUI.shortDescription=Classifica n\u00f3s -- considerando-os como "p\u00e1ginas" -- de acordo com a frequ\u00eancia com que um usu\u00e1rio que siga as liga\u00e7\u00f5es de modo n\u00e3o aleat\u00f3rio alcance o n\u00f3. - PathLengthUI.name=Comprimento m\u00e9dio de caminho - PathLengthUI.shortDescription=M\u00e9dia da dist\u00e2ncia de caminho - WeightedDegreeUI.name=Grau ponderado m\u00e9dio - WeightedDegreeUI.shortDescription=M\u00e9dia ponderada de grau - PageRankPanel.edgeWeightCheckbox.text=Usar peso da aresta - ModularityPanel.useWeightCheckbox.text=Utilizar pesos de arestas - -ModularityPanel.jLabel1.text=Resolu\u00e7\u00e3o\: - +ModularityPanel.jLabel1.text=Resolu\u00e7\u00e3o: ModularityPanel.resolutionTextField.toolTipText=Forne\u00e7a um par\u00e2metro de resolu\u00e7\u00e3o (o valor 1.0 \u00e9 a modularidade padr\u00e3o, valores menores geram comunidades menores, valores maiores comunidades maiores) - ModularityPanel.resolutionTextField.text=1.0 - ModularityPanel.labelEdgeWeight.text=Usar pesos das arestas - ModularityPanel.labelResolution.text=Utilize valores menores para gerar mais comunidades menores e valores maiores do que 1.0 para gerar menos comunidades maiores. - ModularityPanel.labelRandomize.text=Produz uma decomposi\u00e7\u00e3o melhor mas aumenta o tempo de processamento. diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_ro.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_ro.properties new file mode 100644 index 0000000000..b7d8be1a86 --- /dev/null +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_ro.properties @@ -0,0 +1,93 @@ + + +GraphDistancePanel.directedRadioButton.text=Orientat +ClusteringCoefficientPanel.jLabel1.text=Metrica coeficientului de clusterizare +ClusteringCoefficientPanel.directedRadioButton.text=Orientat +DegreeDistributionPanel.directedRadioButton.text=Orientat +DegreeDistributionPanel.undirectedRadioButton.text=Neorientat +ClusteringCoefficientPanel.undirectedRadioButton.text=Neorientat +OpenIDE-Module-Short-Description=Implement\u0103ri standard ale interfe\u021Bei de statistici +GraphDensityPanel.directedRadioButton.text=Orientat +HitsPanel.labelEpsilon.text=Epsilon: +HitsPanel.directedRadioButton.text=Orientat +HitsPanel.undirectedRadioButton.text=Neorientat +GraphDensityPanel.header.description=M\u0103soar\u0103 c\u00E2t de aproape este re\u021Beaua de a fi complet\u0103. Un graf complet are toate muchiile posibile \u0219i densitatea egal\u0103 cu 1. +ClusteringCoefficientPanel.header.title=Coeficient de clusterizare +ClusteringCoefficientPanel.header.description=Coeficientul de clusterizare, \u00EEmpreun\u0103 cu media celor mai scurte c\u0103i, poate indica un efect "de lume mic\u0103". Indic\u0103 integrarea nodurilor \u00EEn vecin\u0103tatea lor. Media ofer\u0103 o indica\u021Bie general\u0103 a clusterizarii \u00EEn re\u021Bea. +DegreeDistributionPanel.header.title=Distribu\u021Bia Gradelor +DegreeDistributionPanel.header.description=M\u0103soar\u0103 distribu\u021Bia gradelor \u00EEntre toate nodurile din re\u021Bea. +GraphDistancePanel.jXLabel1.text=M\u0103soar\u0103 frecven\u021Ba cu care un nod apare pe cele mai scurte c\u0103i dintre nodurile din re\u021Bea. +GraphDistancePanel.jXLabel2.text=Distan\u021Ba medie de la un anumit nod de pornire la toate celelalte noduri din re\u021Bea. +GraphDistancePanel.jXLabel3.text=Distan\u021Ba de la un anumit nod de pornire p\u00E2n\u0103 la cel mai \u00EEndep\u0103rtat nod din re\u021Bea. +GraphDistancePanel.jLabel1.text=Centralitate Intermediar\u0103: +GraphDistancePanel.jLabel2.text=Centralitate de Proximitate: +GraphDistancePanel.jLabel3.text=Excentricitate: +GraphDistancePanel.header.title=Distan\u021Ba +HitsPanel.header.description=Calculeaz\u0103 dou\u0103 valori separate pentru fiecare nod. Prima valoare (numit\u0103 Autoritate) m\u0103soar\u0103 c\u00E2t de valoroase sunt informa\u021Biile stocate \u00EEn acel nod. A doua valoare (numit\u0103 Hub) m\u0103soar\u0103 calitatea leg\u0103turilor nodului. +HitsPanel.header.title=HITS +HitsPanel.epsilonLabel.text=Criteriul de oprire, cu c\u00E2t aceast\u0103 valoare este mai mic\u0103, cu at\u00E2t mai mult va dura convergen\u021Ba. +PageRankPanel.jXHeader1.title=PageRank +PageRankPanel.jXLabel1.text=Utilizat\u0103 pentru a simula reluarea aleatorie a navig\u0103rii de c\u0103tre utilizator. +ModularityPanel.header.title=Modularitate +ModularityPanel.header.description=Algoritm de detectare a comunit\u0103\u021Bilor. +ConnectedComponentPanel.header.description=Determin\u0103 num\u0103rul de componente conexe din re\u021Bea. +ConnectedComponentPanel.undirectedRadioButton.text=Neorientat +ConnectedComponentPanel.directedRadioButton.text=Orientat +ConnectedComponentPanel.jLabel1.text=Detecteaz\u0103 componentele tare \u0219i slab conexe +ConnectedComponentPanel.jLabel2.text=Detecteaz\u0103 doar componente slab conexe +EigenvectorCentralityPanel.header.description=O m\u0103sur\u0103 a importan\u021Bei nodului \u00EEntr-o re\u021Bea bazat\u0103 pe conexiunile sale. +EigenvectorCentralityPanel.header.title=Centralitatea vectorului propriu +EigenvectorCentralityPanel.iterationsTextField.text=jTextField1 +EigenvectorCentralityPanel.labeliterations.text=Num\u0103r de itera\u021Bii: +EigenvectorCentralityPanel.directedButton.text=Orientat +EigenvectorCentralityPanel.undirectedButton.text=Neorientat +DegreeDistributionUI.name=Legea puterii gradelor +EigenvectorCentralityUI.name=Centralitatea vectorului propriu +GraphDensityUI.name=Densitatea grafului +GraphDensityUI.shortDescription=M\u0103soar\u0103 c\u00E2t de aproape este re\u021Beaua de completare. +DiameterUI.name=Diametrul re\u021Belei +DiameterUI.shortDescription=Diametrul re\u021Belei +HitsUI.name=HITS +HitsUI.shortDescription=Calculeaz\u0103 dou\u0103 valori pentru fiecare nod: C\u00E2t de valoroase sunt informa\u021Biile stocate \u00EEn acel nod \u0219i calitatea leg\u0103turilor nodului. +InOutDegreeUI.name=Grad mediu +InOutDegreeUI.shortDescription=Grad mediu +ModularityUI.name=Modularitate +StatisticalInferenceClusteringUI.name=Inferen\u021B\u0103 statistic\u0103 +PageRankUI.shortDescription=Clasific\u0103 nodurile "pagini" \u00EEn func\u021Bie de frecven\u021Ba cu care un utilizator care urmeaz\u0103 link-uri va ajunge \u00EEn mod nealeatoriu la ele. +PathLengthUI.shortDescription=Media lungimii drumurilor +WeightedDegreeUI.name=Media ponderat\u0103 a gradelor +PageRankPanel.edgeWeightCheckbox.text=Folose\u0219te ponderile muchiilor +ModularityPanel.useWeightCheckbox.text=Folose\u0219te ponderile +ModularityPanel.jLabel1.text=Rezolu\u021Bie: +ModularityPanel.resolutionTextField.text=1.0 +ModularityPanel.labelRandomize.text=Produce o descompunere mai bun\u0103, dar cre\u0219te timpul de calcul +ModularityPanel.initialModularityClassIndexTextField.text=0 +ModularityPanel.labelInitialModularityClassIndex.text=Clasele \u00EEncep de la: +GraphDistancePanel.undirectedRadioButton.text=Neorientat +PageRankPanel.undirectedRadioButton.text=Neorientat +GraphDensityPanel.undirectedRadioButton.text=Neorientat +ModularityPanel.randomizeCheckbox.text=Randomizeaz\u0103 +PageRankPanel.directedRadioButton.text=Orientat +GraphDensityPanel.header.title=Densitate +PageRankPanel.labelP.text=Probabilitate (p): +PageRankPanel.labelE.text=Epsilon: +GraphDistancePanel.header.description=Media distan\u021Belor dintre toate perechile de noduri din graf. Nodurile conexe au distan\u021Ba 1. Diametrul este cea mai lung\u0103 distan\u021B\u0103 dintre dou\u0103 noduri din re\u021Bea (C\u00E2t de \u00EEndep\u0103rtate sunt cele mai distante dou\u0103 noduri). +PageRankPanel.jXHeader1.description=Clasific\u0103 nodurile "pagini" \u00EEn func\u021Bie de frecven\u021Ba cu care un utilizator care urmeaz\u0103 link-uri va ajunge \u00EEn mod nealeatoriu la ele. +PageRankPanel.jXLabel2.text=Criteriul de oprire, cu c\u00E2t aceast\u0103 valoare este mai mic\u0103, cu at\u00E2t mai mult va dura convergen\u021Ba. +ConnectedComponentPanel.header.title=Componente Conexe +GraphDistancePanel.normalizeButton.text=Normalizeaz\u0103 centralit\u0103\u021Bile \u00EEn [0,1] +ConnectedComponentUI.name=Componente Conexe +ConnectedComponentUI.shortDescription=Determin\u0103 num\u0103rul de componente conexe din re\u021Bea. +ClusteringCoefficientUI.shortDescription=Calculeaz\u0103 media integr\u0103rii nodurilor \u00EEn vecin\u0103tatea lor. +ClusteringCoefficientUI.name=Coeficient mediu de clusterizare +DegreeDistributionUI.shortDescription=M\u0103soar\u0103 distribu\u021Bia gradelor \u00EEntre toate nodurile din re\u021Bea. +EigenvectorCentralityUI.shortDescription=O m\u0103sur\u0103 a importan\u021Bei nodului \u00EEntr-o re\u021Bea bazat\u0103 pe conexiunile sale. +WeightedDegreeUI.shortDescription=Media ponderat\u0103 a gradelor +ModularityUI.shortDescription=Algoritm de detectare a comunit\u0103\u021Bilor. +StatisticalInferenceClusteringUI.shortDescription=Algoritm de detectare a comunit\u0103\u021Bilor. +PageRankUI.name=PageRank +PathLengthUI.name=Media lungimii drumurilor +ModularityPanel.labelEdgeWeight.text=Folose\u0219te ponderile muchiilor +ModularityPanel.resolutionTextField.toolTipText=Introdu un parametru de rezolu\u021Bie (1.0 este modularitatea standard, mai pu\u021Bin duce la comunit\u0103\u021Bi mai mici, iar mai mult, la comunit\u0103\u021Bi mai mari) +ModularityPanel.initialModularityClassIndexTextField.AccessibleContext.accessibleDescription=Daca este introdus 10 \u0219i sunt g\u0103site 7 clase, vor fi numerotate de la 10 la 17. +ModularityPanel.labelResolution.text=Mai mic\u0103 pentru a ob\u021Bine mai multe comunit\u0103\u021Bi (mai mici) sau mai mare de 1.0 pentru a ob\u021Bine mai pu\u021Bine comunit\u0103\u021Bi (mai mari). diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_ru.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_ru.properties index 46f9e5855d..ae7a1733b4 100644 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_ru.properties +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_ru.properties @@ -1,180 +1,91 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -# Eduardo Ramos , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:16+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - GraphDistancePanel.directedRadioButton.text=\u041e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 - GraphDistancePanel.undirectedRadioButton.text=\u041d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 - ClusteringCoefficientPanel.jLabel1.text=\u041d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 - ClusteringCoefficientPanel.directedRadioButton.text=\u041e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 - ClusteringCoefficientPanel.undirectedRadioButton.text=\u041d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 - DegreeDistributionPanel.directedRadioButton.text=\u041e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 - DegreeDistributionPanel.undirectedRadioButton.text=\u041d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 - OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f UI \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a - +PageRankPanel.probTextField.text= +PageRankPanel.epsilonTextField.text= +HitsPanel.epsilonTextField.text= GraphDensityPanel.directedRadioButton.text=\u041e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 - GraphDensityPanel.undirectedRadioButton.text=\u041d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 - -HitsPanel.labelEpsilon.text=Epsilon\: - +DegreeDistributionPanel.descriptionLabel.text= +GraphDistancePanel.descriptionLabel.text= +HitsPanel.labelEpsilon.text=Epsilon: +HitsPanel.descriptionLabel.text= HitsPanel.directedRadioButton.text=\u041e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 - HitsPanel.undirectedRadioButton.text=\u041d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 - ModularityPanel.randomizeCheckbox.text=\u0420\u0430\u043d\u0434\u043e\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c - -PageRankPanel.labelP.text=\u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c (p)\: - -PageRankPanel.labelE.text=Epsilon\: - +ModularityPanel.desriptionLabel.text= +PageRankPanel.labelP.text=\u0412\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u044c (p): +PageRankPanel.labelE.text=Epsilon: PageRankPanel.directedRadioButton.text=\u041e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 - PageRankPanel.undirectedRadioButton.text=\u041d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 - GraphDensityPanel.header.title=\u041f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u044c - GraphDensityPanel.header.description=\u041c\u0435\u0442\u0440\u0438\u043a\u0430 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043a\u0430\u043a \u0431\u043b\u0438\u0437\u043e\u043a \u0433\u0440\u0430\u0444 \u043a \u043f\u043e\u043b\u043d\u043e\u043c\u0443. \u041f\u043e\u043b\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 \u0438\u043c\u0435\u0435\u0442 \u0432\u0441\u0435 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u0440\u0451\u0431\u0440\u0430 \u0438 \u043f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u044c, \u0440\u0430\u0432\u043d\u0443\u044e 1. - ClusteringCoefficientPanel.header.title=\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 - ClusteringCoefficientPanel.header.description=\u041a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438, \u043d\u0430\u0440\u044f\u0434\u0443 \u0441\u043e \u0441\u0440\u0435\u0434\u043d\u0438\u043c \u043a\u0440\u0430\u0442\u0447\u0430\u0439\u0448\u0438\u043c \u043f\u0443\u0442\u0451\u043c, \u043c\u043e\u0436\u0435\u0442 \u0441\u043b\u0443\u0436\u0438\u0442\u044c \u0434\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0433\u0438\u043f\u043e\u0442\u0435\u0437\u044b "Small World". \u041e\u043d \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043b\u043e\u0442\u043d\u043e \u0443\u0437\u043b\u044b \u0443\u043f\u0430\u043a\u043e\u0432\u0430\u043d\u044b \u0432 \u0441\u0432\u043e\u0451\u043c \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0435\u043c \u043e\u043a\u0440\u0443\u0436\u0435\u043d\u0438\u0438. \u0421\u0440\u0435\u0434\u043d\u0435\u0435 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0441\u0435\u0433\u043e \u0433\u0440\u0430\u0444\u0430. - DegreeDistributionPanel.header.title=\u0420\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0435\u043f\u0435\u043d\u0435\u0439 - DegreeDistributionPanel.header.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0435\u043f\u0435\u043d\u0435\u0439 \u043f\u043e \u0432\u0441\u0435\u043c \u0443\u0437\u043b\u0430\u043c \u0433\u0440\u0430\u0444\u0430. - GraphDistancePanel.jXLabel1.text=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442, \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u0443\u0437\u0435\u043b \u043b\u0435\u0436\u0438\u0442 \u043d\u0430 \u043a\u0440\u0430\u0442\u0447\u0430\u0439\u0448\u0435\u043c \u043f\u0443\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u043c\u0438 \u0434\u0432\u0443\u043c\u044f \u0443\u0437\u043b\u0430\u043c\u0438 \u0433\u0440\u0430\u0444\u0430. - GraphDistancePanel.jXLabel2.text=\u0421\u0440\u0435\u0434\u043d\u044f\u044f \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u044f \u043e\u0442 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430 \u0434\u043e \u0432\u0441\u0435\u0445 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 \u0433\u0440\u0430\u0444\u0430. - GraphDistancePanel.jXLabel3.text=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u044f \u043e\u0442 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430 \u0434\u043e \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430 \u0433\u0440\u0430\u0444\u0430. - -GraphDistancePanel.jLabel1.text=Betweenness Centrality\: - -GraphDistancePanel.jLabel2.text=Closeness Centrality\: - -GraphDistancePanel.jLabel3.text=Eccentricity\: - +GraphDistancePanel.jLabel1.text=Betweenness Centrality: +GraphDistancePanel.jLabel2.text=Closeness Centrality: +GraphDistancePanel.jLabel3.text=Eccentricity: GraphDistancePanel.header.description=\u0421\u0440\u0435\u0434\u043d\u0435\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043e \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c \u0443\u0437\u043b\u043e\u0432 \u0433\u0440\u0430\u0444\u0430. \u0421\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0443\u0437\u043b\u044b \u0438\u043c\u0435\u044e\u0442 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0440\u0430\u0432\u043d\u043e\u0435 1. \u0414\u0438\u0430\u043c\u0435\u0442\u0440 -- \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043f\u043e \u0432\u0441\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u043f\u0430\u0440\u0430\u043c \u0443\u0437\u043b\u043e\u0432 \u0433\u0440\u0430\u0444\u0430 (\u0442.\u0435. \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u044b \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430 \u0434\u0432\u0430 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0443\u0434\u0430\u043b\u0435\u043d\u043d\u044b\u0445 \u0443\u0437\u043b\u0430). - GraphDistancePanel.header.title=\u0414\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u044f - HitsPanel.header.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0434\u0432\u0430 \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0445 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0437\u043b\u0430. \u041f\u0435\u0440\u0432\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0435 Authority) \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u0430\u0436\u043d\u043e\u0441\u0442\u0438 \u0441\u0430\u043c\u043e\u0433\u043e \u0443\u0437\u043b\u0430. \u0412\u0442\u043e\u0440\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 (\u043d\u0430\u0437\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e Hub) \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u0435\u0442 \u0432\u0430\u0436\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0431\u0451\u0440 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430. - HitsPanel.header.title=HITS - HitsPanel.epsilonLabel.text=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438, \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430. - PageRankPanel.jXHeader1.description=\u0420\u0430\u043d\u0436\u0438\u0440\u0443\u0435\u0442 \u0443\u0437\u043b\u044b (\u043a\u0430\u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b), \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0442\u0435\u043c, \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e "\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c", \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044f \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c (\u0440\u0451\u0431\u0440\u0430\u043c), \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u0443\u0437\u0435\u043b. - PageRankPanel.jXHeader1.title=PageRank - -PageRankPanel.jXLabel1.text=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0430\u0447\u043d\u0451\u0442 \u043e\u0431\u0445\u043e\u0434 \u0433\u0440\u0430\u0444\u0430 \u0441 \u043d\u0430\u0447\u0430\u043b\u0430. - +PageRankPanel.jXLabel1.text=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e\u0441\u0442\u0438 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u043e \u043d\u0430\u0447\u043d\u0451\u0442 \u043e\u0431\u0445\u043e\u0434 \u0433\u0440\u0430\u0444\u0430 \u0441 \u043d\u0430\u0447\u0430\u043b\u0430. PageRankPanel.jXLabel2.text=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 \u0443\u0441\u043b\u043e\u0432\u0438\u044f \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438, \u0443\u043c\u0435\u043d\u044c\u0448\u0435\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u0442 \u043a \u0443\u0432\u0435\u043b\u0438\u0447\u0435\u043d\u0438\u044e \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u044b \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430. - ModularityPanel.header.title=Modularity - ModularityPanel.header.description=\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432. - ConnectedComponentPanel.header.description=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0447\u0438\u0441\u043b\u043e \u0441\u0432\u044f\u0437\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0433\u0440\u0430\u0444\u0430. - ConnectedComponentPanel.undirectedRadioButton.text=\u041d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 - ConnectedComponentPanel.directedRadioButton.text=\u041e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 - ConnectedComponentPanel.header.title=\u0421\u0432\u044f\u0437\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b - ConnectedComponentPanel.jLabel1.text=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u0438\u043b\u044c\u043d\u043e- \u0438 \u0441\u043b\u0430\u0431\u043e\u0441\u0432\u044f\u0437\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b - ConnectedComponentPanel.jLabel2.text=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u043b\u0430\u0431\u043e\u0441\u0432\u044f\u0437\u0430\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b - EigenvectorCentralityPanel.header.description=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0435\u0441 \u0443\u0437\u043b\u0430 \u0432 \u0441\u0435\u0442\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u0432\u044f\u0437\u0435\u0439 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430. - EigenvectorCentralityPanel.header.title=Eigenvector Centrality - EigenvectorCentralityPanel.iterationsTextField.text=jTextField1 - -EigenvectorCentralityPanel.labeliterations.text=\u0427\u0438\u0441\u043b\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439\: - +EigenvectorCentralityPanel.labeliterations.text=\u0427\u0438\u0441\u043b\u043e \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0439: EigenvectorCentralityPanel.directedButton.text=\u041e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 - EigenvectorCentralityPanel.undirectedButton.text=\u041d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 - GraphDistancePanel.normalizeButton.text=\u041d\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432 \u0438\u043d\u0442\u0435\u0440\u0432\u0430\u043b [0,1] - ConnectedComponentUI.name=\u0421\u0432\u044f\u0437\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b - -!ConnectedComponentUI.shortDescription= - +ConnectedComponentUI.shortDescription=\u041e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0447\u0438\u0441\u043b\u043e \u0441\u0432\u044f\u0437\u043d\u044b\u0445 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u0433\u0440\u0430\u0444\u0430. ClusteringCoefficientUI.name=\u0421\u0440\u0435\u0434\u043d\u0438\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u0438 - -!ClusteringCoefficientUI.shortDescription= - +# ClusteringCoefficientUI.shortDescription=Averages how nodes are embedded in their neighborhood. DegreeDistributionUI.name=Degree Power Law - -!DegreeDistributionUI.shortDescription= - +DegreeDistributionUI.shortDescription=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0440\u0430\u0441\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u0435\u043f\u0435\u043d\u0435\u0439 \u043f\u043e \u0432\u0441\u0435\u043c \u0443\u0437\u043b\u0430\u043c \u0433\u0440\u0430\u0444\u0430. EigenvectorCentralityUI.name=Eigenvector Centrality - -!EigenvectorCentralityUI.shortDescription= - +EigenvectorCentralityUI.shortDescription=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442 \u0432\u0435\u0441 \u0443\u0437\u043b\u0430 \u0432 \u0441\u0435\u0442\u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0441\u0432\u044f\u0437\u0435\u0439 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430. GraphDensityUI.name=\u041f\u043b\u043e\u0442\u043d\u043e\u0441\u0442\u044c \u0433\u0440\u0430\u0444\u0430 - -!GraphDensityUI.shortDescription= - +# GraphDensityUI.shortDescription=Measures how close the network is to complete. DiameterUI.name=\u0414\u0438\u0430\u043c\u0435\u0442\u0440 \u0433\u0440\u0430\u0444\u0430 - -!DiameterUI.shortDescription= - +DiameterUI.shortDescription=\u0414\u0438\u0430\u043c\u0435\u0442\u0440 \u0433\u0440\u0430\u0444\u0430 HitsUI.name=HITS - -!HitsUI.shortDescription= - +# HitsUI.shortDescription=Computes two values for each node: How valuable information stored at that node is & the quality of the nodes links. InOutDegreeUI.name=\u0421\u0440\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u0435\u043f\u0435\u043d\u044c - -!InOutDegreeUI.shortDescription= - +InOutDegreeUI.shortDescription=\u0421\u0440\u0435\u0434\u043d\u044f\u044f \u0441\u0442\u0435\u043f\u0435\u043d\u044c ModularityUI.name=\u041c\u043e\u0434\u0443\u043b\u044f\u0440\u043d\u043e\u0441\u0442\u044c - -!ModularityUI.shortDescription= - +ModularityUI.shortDescription=\u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0432\u044b\u044f\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432. PageRankUI.name=PageRank - -!PageRankUI.shortDescription= - +PageRankUI.shortDescription=\u0420\u0430\u043d\u0436\u0438\u0440\u0443\u0435\u0442 \u0443\u0437\u043b\u044b (\u043a\u0430\u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b), \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u0442\u0435\u043c, \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e "\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c", \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u044f \u043f\u043e \u0441\u0441\u044b\u043b\u043a\u0430\u043c (\u0440\u0451\u0431\u0440\u0430\u043c), \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u043f\u0430\u0434\u0430\u0442\u044c \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u0443\u0437\u0435\u043b. PathLengthUI.name=\u0421\u0440\u0435\u0434\u043d\u044f\u044f \u0434\u043b\u0438\u043d\u0430 \u043f\u0443\u0442\u0438 - -!PathLengthUI.shortDescription= - +PathLengthUI.shortDescription=\u0421\u0440\u0435\u0434\u043d\u044f\u044f \u0434\u043b\u0438\u043d\u0430 \u043f\u0443\u0442\u0438 WeightedDegreeUI.name=\u0421\u0440\u0435\u0434\u043d\u044f\u044f \u0432\u0437\u0432\u0435\u0448\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0435\u043f\u0435\u043d\u044c - -!WeightedDegreeUI.shortDescription= - +WeightedDegreeUI.shortDescription=\u0421\u0440\u0435\u0434\u043d\u044f\u044f \u0432\u0437\u0432\u0435\u0448\u0435\u043d\u043d\u0430\u044f \u0441\u0442\u0435\u043f\u0435\u043d\u044c PageRankPanel.edgeWeightCheckbox.text=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u0430 \u0440\u0451\u0431\u0435\u0440 - -!ModularityPanel.useWeightCheckbox.text= - -!ModularityPanel.jLabel1.text= - -!ModularityPanel.resolutionTextField.toolTipText= - -!ModularityPanel.resolutionTextField.text= - -!ModularityPanel.labelEdgeWeight.text= - -!ModularityPanel.labelResolution.text= - -!ModularityPanel.labelRandomize.text= +# ModularityPanel.useWeightCheckbox.text=Use weights +# ModularityPanel.jLabel1.text=Resolution: +# ModularityPanel.resolutionTextField.toolTipText=Enter a resolution parameter (1.0 is standard modularity, less than 1.0 leads to smaller communities, more to bigger) +# ModularityPanel.resolutionTextField.text=1.0 +ModularityPanel.labelEdgeWeight.text=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0435\u0441\u0430 \u0440\u0451\u0431\u0435\u0440 diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_th.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_tr.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_tr.properties new file mode 100644 index 0000000000..c2e37349c2 --- /dev/null +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_tr.properties @@ -0,0 +1,93 @@ +GraphDistancePanel.directedRadioButton.text=Y\u00f6nl\u00fc +GraphDistancePanel.undirectedRadioButton.text=Y\u00f6ns\u00fcz +ClusteringCoefficientPanel.jLabel1.text=Clustering Coefficent Metric +ClusteringCoefficientPanel.directedRadioButton.text=Y\u00f6nl\u00fc +ClusteringCoefficientPanel.undirectedRadioButton.text=Y\u00f6ns\u00fcz +DegreeDistributionPanel.directedRadioButton.text=Y\u00f6nl\u00fc +DegreeDistributionPanel.undirectedRadioButton.text=Y\u00f6ns\u00fcz +OpenIDE-Module-Short-Description=Standard statistics UI implementations +PageRankPanel.probTextField.text= +PageRankPanel.epsilonTextField.text= +HitsPanel.epsilonTextField.text= +GraphDensityPanel.directedRadioButton.text=Y\u00f6nl\u00fc +GraphDensityPanel.undirectedRadioButton.text=Y\u00f6ns\u00fcz +DegreeDistributionPanel.descriptionLabel.text= +GraphDistancePanel.descriptionLabel.text= +HitsPanel.labelEpsilon.text=Epsilon: +HitsPanel.descriptionLabel.text= +HitsPanel.directedRadioButton.text=Y\u00f6nl\u00fc +HitsPanel.undirectedRadioButton.text=Y\u00f6ns\u00fcz +ModularityPanel.randomizeCheckbox.text=Randomize +ModularityPanel.desriptionLabel.text= +PageRankPanel.labelP.text=Probability (p): +PageRankPanel.labelE.text=Epsilon: +PageRankPanel.directedRadioButton.text=Y\u00f6nl\u00fc +PageRankPanel.undirectedRadioButton.text=Y\u00f6ns\u00fcz +GraphDensityPanel.header.title=Yo\u011funluk +GraphDensityPanel.header.description=Measures how close the network is to complete. A complete graph has all possible edges and density equal to 1. +ClusteringCoefficientPanel.header.title=Clustering Coefficent +ClusteringCoefficientPanel.header.description=The clustering coefficient, along with the mean shortest path, can indicate a "small-world" effect. It indicates how nodes are embedded in their neighborhood. The average give an overall indication of the clustering in the network. +DegreeDistributionPanel.header.title=Degree Distribution +DegreeDistributionPanel.header.description=Measures the distribution of degrees amongst all of the nodes within the network. +GraphDistancePanel.jXLabel1.text=Measures how often a node appears on shortest paths between nodes in the network. +GraphDistancePanel.jXLabel2.text=The average distance from a given starting node to all other nodes in the network. +GraphDistancePanel.jXLabel3.text=The distance from a given starting node to the farthest node from it in the network. +GraphDistancePanel.jLabel1.text=Betweenness Centrality: +GraphDistancePanel.jLabel2.text=Closeness Centrality: +GraphDistancePanel.jLabel3.text=Eccentricity: +GraphDistancePanel.header.description=The average graph-distance between all pairs of nodes. Connected nodes have graph distance 1. The diameter is the longest graph distance between any two nodes in the network. (i.e. How far apart are the two most distant nodes). +GraphDistancePanel.header.title=Distance +HitsPanel.header.description=Computes two separate values for each node. The first value (called Authority) measures how valuable information stored at that node is. The second value (called Hub) measures the quality of the nodes links. +HitsPanel.header.title=HITS +HitsPanel.epsilonLabel.text=Stopping criterion, the smaller this value, the longer convergence will take. +PageRankPanel.jXHeader1.description=Ranks nodes "pages" according to how often a user following links will non-randomly reach the node "page". +PageRankPanel.jXHeader1.title=PageRank +PageRankPanel.jXLabel1.text=Used to simulate the user randomly restarting the web-surfing. +PageRankPanel.jXLabel2.text=Stopping criterion, the smaller this value, the longer convergence will take. +ModularityPanel.header.title=Modularity +ModularityPanel.header.description=Community detection algorithm. +ConnectedComponentPanel.header.description=Determines the number of connected components in the network. +ConnectedComponentPanel.undirectedRadioButton.text=Y\u00f6ns\u00fcz +ConnectedComponentPanel.directedRadioButton.text=Y\u00f6nl\u00fc +ConnectedComponentPanel.header.title=Connected Components +ConnectedComponentPanel.jLabel1.text=Detects strongly & weakly connected components +ConnectedComponentPanel.jLabel2.text=Detects only weakly connected components +EigenvectorCentralityPanel.header.description=A measure of node importance in a network based on a node's connections. +EigenvectorCentralityPanel.header.title=Eigenvector Centrality +EigenvectorCentralityPanel.iterationsTextField.text=jTextField1 +EigenvectorCentralityPanel.labeliterations.text=Number of iterations: +EigenvectorCentralityPanel.directedButton.text=Y\u00f6nl\u00fc +EigenvectorCentralityPanel.undirectedButton.text=Y\u00f6ns\u00fcz +GraphDistancePanel.normalizeButton.text=Normalize Centralities in [0,1] +ConnectedComponentUI.name=Connected Components +ConnectedComponentUI.shortDescription=Determines the number of connected components in the network. +ClusteringCoefficientUI.name=Avg. Clustering Coefficient +ClusteringCoefficientUI.shortDescription=Averages how nodes are embedded in their neighborhood. +DegreeDistributionUI.name=Degree Power Law +DegreeDistributionUI.shortDescription=Measures the distribution of degrees amongst all of the nodes within the network. +EigenvectorCentralityUI.name=Eigenvector Centrality +EigenvectorCentralityUI.shortDescription=A measure of node importance in a network based on a node's connections. +GraphDensityUI.name=Graph Density +GraphDensityUI.shortDescription=Measures how close the network is to complete. +DiameterUI.name=Network Diameter +DiameterUI.shortDescription=Network Diameter +HitsUI.name=HITS +HitsUI.shortDescription=Computes two values for each node: How valuable information stored at that node is & the quality of the nodes links. +InOutDegreeUI.name=Average Degree +InOutDegreeUI.shortDescription=Average Degree +ModularityUI.name=Modularity +ModularityUI.shortDescription=Community detection algorithm. +PageRankUI.name=PageRank +PageRankUI.shortDescription=Ranks nodes "pages" according to how often a user following links will non-randomly reach the node "page". +PathLengthUI.name=Avg. Path Length +PathLengthUI.shortDescription=Avg. Path Length +WeightedDegreeUI.name=Avg. Weighted Degree +WeightedDegreeUI.shortDescription=Avg. Weighted Degree +PageRankPanel.edgeWeightCheckbox.text=Use edge weight +ModularityPanel.useWeightCheckbox.text=Use weights +ModularityPanel.jLabel1.text=Resolution: +ModularityPanel.resolutionTextField.toolTipText=Enter a resolution parameter (1.0 is standard modularity, less than 1.0 leads to smaller communities, more to bigger) +ModularityPanel.resolutionTextField.text=1.0 +ModularityPanel.labelEdgeWeight.text=Use edge weight +ModularityPanel.labelResolution.text=Lower to get more communities (smaller ones) and higher than 1.0 to get less communities (bigger ones). +ModularityPanel.labelRandomize.text=Produce a better decomposition but increases computation time diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_uk.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_uk.properties new file mode 100644 index 0000000000..8728743a78 --- /dev/null +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_uk.properties @@ -0,0 +1,98 @@ +HitsPanel.directedRadioButton.text=\u0420\u0435\u0436\u0438\u0441\u0435\u0440 +PageRankPanel.epsilonTextField.text=\u0406 +GraphDistancePanel.jXLabel2.text=\u0421\u0435\u0440\u0435\u0434\u043D\u044F \u0432\u0456\u0434\u0441\u0442\u0430\u043D\u044C \u0432\u0456\u0434 \u0437\u0430\u0434\u0430\u043D\u043E\u0433\u043E \u043F\u043E\u0447\u0430\u0442\u043A\u043E\u0432\u043E\u0433\u043E \u0432\u0443\u0437\u043B\u0430 \u0434\u043E \u0432\u0441\u0456\u0445 \u0456\u043D\u0448\u0438\u0445 \u0432\u0443\u0437\u043B\u0456\u0432 \u0443 \u043C\u0435\u0440\u0435\u0436\u0456. +ModularityPanel.labelEdgeWeight.text=\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0439\u0442\u0435 \u0432\u0430\u0433\u0443 \u043A\u0440\u0430\u044E +GraphDensityPanel.header.description=\u0412\u0438\u043C\u0456\u0440\u044E\u0454, \u043D\u0430\u0441\u043A\u0456\u043B\u044C\u043A\u0438 \u0431\u043B\u0438\u0437\u044C\u043A\u043E \u043C\u0435\u0440\u0435\u0436\u0430 \u0434\u043E \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u043D\u044F. \u041F\u043E\u0432\u043D\u0438\u0439 \u0433\u0440\u0430\u0444 \u043C\u0430\u0454 \u0432\u0441\u0456 \u043C\u043E\u0436\u043B\u0438\u0432\u0456 \u0440\u0435\u0431\u0440\u0430 \u0456 \u0449\u0456\u043B\u044C\u043D\u0456\u0441\u0442\u044C \u0434\u043E\u0440\u0456\u0432\u043D\u044E\u0454 1. +PageRankUI.name=PageRank +OpenIDE-Module-Short-Description=\u0421\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0430 \u0440\u0435\u0430\u043B\u0456\u0437\u0430\u0446\u0456\u044F \u0456\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0438 +GraphDistancePanel.descriptionLabel.text=\u0406 +GraphDistancePanel.jLabel3.text=\u0415\u043A\u0441\u0446\u0435\u043D\u0442\u0440\u0438\u0441\u0438\u0442\u0435\u0442: +GraphDistancePanel.jXLabel1.text=\u0412\u0438\u043C\u0456\u0440\u044E\u0454, \u044F\u043A \u0447\u0430\u0441\u0442\u043E \u0432\u0443\u0437\u043E\u043B \u0437\u2019\u044F\u0432\u043B\u044F\u0454\u0442\u044C\u0441\u044F \u043D\u0430 \u043D\u0430\u0439\u043A\u043E\u0440\u043E\u0442\u0448\u0438\u0445 \u0448\u043B\u044F\u0445\u0430\u0445 \u043C\u0456\u0436 \u0432\u0443\u0437\u043B\u0430\u043C\u0438 \u0432 \u043C\u0435\u0440\u0435\u0436\u0456. +GraphDistancePanel.jXLabel3.text=\u0412\u0456\u0434\u0441\u0442\u0430\u043D\u044C \u0432\u0456\u0434 \u0437\u0430\u0434\u0430\u043D\u043E\u0433\u043E \u043F\u043E\u0447\u0430\u0442\u043A\u043E\u0432\u043E\u0433\u043E \u0432\u0443\u0437\u043B\u0430 \u0434\u043E \u043D\u0430\u0439\u0434\u0430\u043B\u044C\u0448\u043E\u0433\u043E \u0432\u0456\u0434 \u043D\u044C\u043E\u0433\u043E \u0432\u0443\u0437\u043B\u0430 \u0432 \u043C\u0435\u0440\u0435\u0436\u0456. +StatisticalInferenceClusteringUI.name=\u0421\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u043D\u0438\u0439 \u0432\u0438\u0441\u043D\u043E\u0432\u043E\u043A +GraphDistancePanel.header.description=\u0421\u0435\u0440\u0435\u0434\u043D\u044F \u0433\u0440\u0430\u0444\u043E\u0432\u0430 \u0432\u0456\u0434\u0441\u0442\u0430\u043D\u044C \u043C\u0456\u0436 \u0443\u0441\u0456\u043C\u0430 \u043F\u0430\u0440\u0430\u043C\u0438 \u0432\u0443\u0437\u043B\u0456\u0432. \u0417\u2019\u0454\u0434\u043D\u0430\u043D\u0456 \u0432\u0443\u0437\u043B\u0438 \u043C\u0430\u044E\u0442\u044C \u0433\u0440\u0430\u0444\u043E\u0432\u0443 \u0432\u0456\u0434\u0441\u0442\u0430\u043D\u044C 1. \u0414\u0456\u0430\u043C\u0435\u0442\u0440 \u2014 \u0446\u0435 \u043D\u0430\u0439\u0431\u0456\u043B\u044C\u0448\u0430 \u0433\u0440\u0430\u0444\u043E\u0432\u0430 \u0432\u0456\u0434\u0441\u0442\u0430\u043D\u044C \u043C\u0456\u0436 \u0431\u0443\u0434\u044C-\u044F\u043A\u0438\u043C\u0438 \u0434\u0432\u043E\u043C\u0430 \u0432\u0443\u0437\u043B\u0430\u043C\u0438 \u0432 \u043C\u0435\u0440\u0435\u0436\u0456. (\u0442\u043E\u0431\u0442\u043E \u043D\u0430\u0441\u043A\u0456\u043B\u044C\u043A\u0438 \u0434\u0430\u043B\u0435\u043A\u043E \u043E\u0434\u0438\u043D \u0432\u0456\u0434 \u043E\u0434\u043D\u043E\u0433\u043E \u0437\u043D\u0430\u0445\u043E\u0434\u044F\u0442\u044C\u0441\u044F \u0434\u0432\u0430 \u043D\u0430\u0439\u0432\u0456\u0434\u0434\u0430\u043B\u0435\u043D\u0456\u0448\u0438\u0445 \u0432\u0443\u0437\u043B\u0430). +HitsPanel.header.description=\u041E\u0431\u0447\u0438\u0441\u043B\u044E\u0454 \u0434\u0432\u0430 \u043E\u043A\u0440\u0435\u043C\u0438\u0445 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0434\u043B\u044F \u043A\u043E\u0436\u043D\u043E\u0433\u043E \u0432\u0443\u0437\u043B\u0430. \u041F\u0435\u0440\u0448\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F (\u0437\u0432\u0430\u043D\u0435 \u0430\u0432\u0442\u043E\u0440\u0438\u0442\u0435\u0442\u043E\u043C) \u0432\u0438\u043C\u0456\u0440\u044E\u0454, \u043D\u0430\u0441\u043A\u0456\u043B\u044C\u043A\u0438 \u0446\u0456\u043D\u043D\u043E\u044E \u0454 \u0456\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u044F, \u0449\u043E \u0437\u0431\u0435\u0440\u0456\u0433\u0430\u0454\u0442\u044C\u0441\u044F \u043D\u0430 \u0446\u044C\u043E\u043C\u0443 \u0432\u0443\u0437\u043B\u0456. \u0414\u0440\u0443\u0433\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F (\u043D\u0430\u0437\u0438\u0432\u0430\u0454\u0442\u044C\u0441\u044F \u043A\u043E\u043D\u0446\u0435\u043D\u0442\u0440\u0430\u0442\u043E\u0440\u043E\u043C) \u0432\u0438\u043C\u0456\u0440\u044E\u0454 \u044F\u043A\u0456\u0441\u0442\u044C \u0437\u0432\u2019\u044F\u0437\u043A\u0456\u0432 \u0432\u0443\u0437\u043B\u0456\u0432. +PageRankPanel.jXHeader1.description=\u0420\u0430\u043D\u0436\u0443\u0454 \u00AB\u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438\u00BB \u0432\u0443\u0437\u043B\u0456\u0432 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u043D\u043E \u0434\u043E \u0442\u043E\u0433\u043E, \u044F\u043A \u0447\u0430\u0441\u0442\u043E \u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447, \u044F\u043A\u0438\u0439 \u043F\u0435\u0440\u0435\u0445\u043E\u0434\u0438\u0442\u044C \u0437\u0430 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F\u043C\u0438, \u043D\u0435\u0432\u0438\u043F\u0430\u0434\u043A\u043E\u0432\u043E \u043F\u043E\u0442\u0440\u0430\u043F\u043B\u044F\u0454 \u043D\u0430 \u00AB\u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443\u00BB \u0432\u0443\u0437\u043B\u0430. +ConnectedComponentPanel.jLabel1.text=\u0412\u0438\u044F\u0432\u043B\u044F\u0454 \u043C\u0456\u0446\u043D\u043E \u0442\u0430 \u0441\u043B\u0430\u0431\u043A\u043E \u043F\u043E\u0432'\u044F\u0437\u0430\u043D\u0456 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0438 +EigenvectorCentralityPanel.iterationsTextField.text=jTextField1 +InOutDegreeUI.shortDescription=\u0421\u0435\u0440\u0435\u0434\u043D\u0456\u0439 \u0441\u0442\u0443\u043F\u0456\u043D\u044C +EigenvectorCentralityPanel.directedButton.text=\u0420\u0435\u0436\u0438\u0441\u0435\u0440 +ConnectedComponentUI.shortDescription=\u0412\u0438\u0437\u043D\u0430\u0447\u0430\u0454 \u043A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0445 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0456\u0432 \u0443 \u043C\u0435\u0440\u0435\u0436\u0456. +HitsUI.shortDescription=\u041E\u0431\u0447\u0438\u0441\u043B\u044E\u0454 \u0434\u0432\u0430 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0434\u043B\u044F \u043A\u043E\u0436\u043D\u043E\u0433\u043E \u0432\u0443\u0437\u043B\u0430: \u043D\u0430\u0441\u043A\u0456\u043B\u044C\u043A\u0438 \u0446\u0456\u043D\u043D\u0430 \u0456\u043D\u0444\u043E\u0440\u043C\u0430\u0446\u0456\u044F, \u0449\u043E \u0437\u0431\u0435\u0440\u0456\u0433\u0430\u0454\u0442\u044C\u0441\u044F \u043D\u0430 \u0446\u044C\u043E\u043C\u0443 \u0432\u0443\u0437\u043B\u0456, \u0456 \u044F\u043A\u0456\u0441\u0442\u044C \u0437\u0432\u2019\u044F\u0437\u043A\u0456\u0432 \u0432\u0443\u0437\u043B\u0456\u0432. +ModularityUI.shortDescription=\u0410\u043B\u0433\u043E\u0440\u0438\u0442\u043C \u0432\u0438\u044F\u0432\u043B\u0435\u043D\u043D\u044F \u0441\u043F\u0456\u043B\u044C\u043D\u043E\u0442\u0438. +PageRankUI.shortDescription=\u0420\u0430\u043D\u0436\u0443\u0454 \u00AB\u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0438\u00BB \u0432\u0443\u0437\u043B\u0456\u0432 \u0432\u0456\u0434\u043F\u043E\u0432\u0456\u0434\u043D\u043E \u0434\u043E \u0442\u043E\u0433\u043E, \u044F\u043A \u0447\u0430\u0441\u0442\u043E \u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447, \u044F\u043A\u0438\u0439 \u043F\u0435\u0440\u0435\u0445\u043E\u0434\u0438\u0442\u044C \u0437\u0430 \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u043D\u044F\u043C\u0438, \u043D\u0435\u0432\u0438\u043F\u0430\u0434\u043A\u043E\u0432\u043E \u043F\u043E\u0442\u0440\u0430\u043F\u043B\u044F\u0454 \u043D\u0430 \u00AB\u0441\u0442\u043E\u0440\u0456\u043D\u043A\u0443\u00BB \u0432\u0443\u0437\u043B\u0430. +ModularityPanel.labelResolution.text=\u041D\u0438\u0436\u0447\u0435, \u0449\u043E\u0431 \u043E\u0442\u0440\u0438\u043C\u0430\u0442\u0438 \u0431\u0456\u043B\u044C\u0448\u0435 \u0441\u043F\u0456\u043B\u044C\u043D\u043E\u0442 (\u043C\u0435\u043D\u0448\u0438\u0445), \u0456 \u0432\u0438\u0449\u0435 \u0437\u0430 1,0, \u0449\u043E\u0431 \u043E\u0442\u0440\u0438\u043C\u0430\u0442\u0438 \u043C\u0435\u043D\u0448\u0435 \u0441\u043F\u0456\u043B\u044C\u043D\u043E\u0442 (\u0431\u0456\u043B\u044C\u0448\u0438\u0445). +DiameterUI.name=\u0414\u0456\u0430\u043C\u0435\u0442\u0440 \u043C\u0435\u0440\u0435\u0436\u0456 +PageRankPanel.undirectedRadioButton.text=\u041D\u0435\u0440\u0435\u0436\u0438\u0441\u043E\u0432\u0430\u043D\u0438\u0439 +DegreeDistributionUI.shortDescription=\u0412\u0438\u043C\u0456\u0440\u044E\u0454 \u0440\u043E\u0437\u043F\u043E\u0434\u0456\u043B \u0441\u0442\u0443\u043F\u0435\u043D\u0456\u0432 \u043C\u0456\u0436 \u0443\u0441\u0456\u043C\u0430 \u0432\u0443\u0437\u043B\u0430\u043C\u0438 \u0432 \u043C\u0435\u0440\u0435\u0436\u0456. +InOutDegreeUI.name=\u0421\u0435\u0440\u0435\u0434\u043D\u0456\u0439 \u0441\u0442\u0443\u043F\u0456\u043D\u044C +ModularityPanel.jLabel1.text=\u0420\u043E\u0437\u0434\u0456\u043B\u044C\u043D\u0430 \u0437\u0434\u0430\u0442\u043D\u0456\u0441\u0442\u044C: +HitsPanel.undirectedRadioButton.text=\u041D\u0435\u0440\u0435\u0436\u0438\u0441\u043E\u0432\u0430\u043D\u0438\u0439 +ConnectedComponentUI.name=\u041F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0456 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0438 +ModularityPanel.randomizeCheckbox.text=\u0420\u0430\u043D\u0434\u043E\u043C\u0456\u0437\u0443\u0432\u0430\u0442\u0438 +ConnectedComponentPanel.undirectedRadioButton.text=\u041D\u0435\u0440\u0435\u0436\u0438\u0441\u043E\u0432\u0430\u043D\u0438\u0439 +HitsPanel.descriptionLabel.text=\u0406 +ModularityPanel.header.description=\u0410\u043B\u0433\u043E\u0440\u0438\u0442\u043C \u0432\u0438\u044F\u0432\u043B\u0435\u043D\u043D\u044F \u0441\u043F\u0456\u043B\u044C\u043D\u043E\u0442\u0438. +GraphDistancePanel.jLabel2.text=\u0411\u043B\u0438\u0437\u044C\u043A\u0456\u0441\u0442\u044C \u0426\u0435\u043D\u0442\u0440\u0430\u043B\u044C\u043D\u0456\u0441\u0442\u044C: +ModularityPanel.header.title=\u041C\u043E\u0434\u0443\u043B\u044C\u043D\u0456\u0441\u0442\u044C +GraphDensityPanel.header.title=\u0429\u0456\u043B\u044C\u043D\u0456\u0441\u0442\u044C +GraphDensityUI.shortDescription=\u0412\u0438\u043C\u0456\u0440\u044E\u0454, \u043D\u0430\u0441\u043A\u0456\u043B\u044C\u043A\u0438 \u0431\u043B\u0438\u0437\u044C\u043A\u043E \u043C\u0435\u0440\u0435\u0436\u0430 \u0434\u043E \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u043D\u044F. +PathLengthUI.shortDescription=\u0421\u0435\u0440\u0435\u0434\u043D\u0454 \u0414\u043E\u0432\u0436\u0438\u043D\u0430 \u0448\u043B\u044F\u0445\u0443 +ModularityPanel.resolutionTextField.toolTipText=\u0412\u0432\u0435\u0434\u0456\u0442\u044C \u043F\u0430\u0440\u0430\u043C\u0435\u0442\u0440 \u0440\u043E\u0437\u0434\u0456\u043B\u044C\u043D\u043E\u0457 \u0437\u0434\u0430\u0442\u043D\u043E\u0441\u0442\u0456 (1.0 \u2014 \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0430 \u043C\u043E\u0434\u0443\u043B\u044C\u043D\u0456\u0441\u0442\u044C, \u043C\u0435\u043D\u0448\u0435 1.0 \u0432\u0435\u0434\u0435 \u0434\u043E \u043C\u0435\u043D\u0448\u0438\u0445 \u0441\u043F\u0456\u043B\u044C\u043D\u043E\u0442, \u0431\u0456\u043B\u044C\u0448\u0435 \u2014 \u0434\u043E \u0431\u0456\u043B\u044C\u0448\u0438\u0445) +ClusteringCoefficientPanel.header.description=\u041A\u043E\u0435\u0444\u0456\u0446\u0456\u0454\u043D\u0442 \u043A\u043B\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0456\u0457 \u0440\u0430\u0437\u043E\u043C \u0456\u0437 \u0441\u0435\u0440\u0435\u0434\u043D\u0456\u043C \u043D\u0430\u0439\u043A\u043E\u0440\u043E\u0442\u0448\u0438\u043C \u0448\u043B\u044F\u0445\u043E\u043C \u043C\u043E\u0436\u0435 \u0432\u043A\u0430\u0437\u0443\u0432\u0430\u0442\u0438 \u043D\u0430 \u0435\u0444\u0435\u043A\u0442 \u00AB\u043C\u0430\u043B\u043E\u0433\u043E \u0441\u0432\u0456\u0442\u0443\u00BB. \u0412\u0456\u043D \u0432\u043A\u0430\u0437\u0443\u0454 \u043D\u0430 \u0442\u0435, \u044F\u043A \u0432\u0443\u0437\u043B\u0438 \u0432\u0431\u0443\u0434\u043E\u0432\u0430\u043D\u0456 \u0432 \u0457\u0445 \u043E\u043A\u043E\u043B\u0438\u0446\u0456. \u0421\u0435\u0440\u0435\u0434\u043D\u0454 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u0434\u0430\u0454 \u0437\u0430\u0433\u0430\u043B\u044C\u043D\u0443 \u0456\u043D\u0434\u0438\u043A\u0430\u0446\u0456\u044E \u043A\u043B\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0456\u0457 \u0432 \u043C\u0435\u0440\u0435\u0436\u0456. +HitsPanel.header.title=HITS +HitsPanel.epsilonLabel.text=\u041A\u0440\u0438\u0442\u0435\u0440\u0456\u0439 \u0437\u0443\u043F\u0438\u043D\u043A\u0438, \u0447\u0438\u043C \u043C\u0435\u043D\u0448\u0435 \u0446\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F, \u0442\u0438\u043C \u0434\u043E\u0432\u0448\u0435 \u0437\u0430\u0439\u043C\u0435 \u0437\u0431\u0456\u0436\u043D\u0456\u0441\u0442\u044C. +EigenvectorCentralityPanel.header.title=\u0426\u0435\u043D\u0442\u0440\u0430\u043B\u044C\u043D\u0456\u0441\u0442\u044C \u0432\u043B\u0430\u0441\u043D\u043E\u0433\u043E \u0432\u0435\u043A\u0442\u043E\u0440\u0430 +WeightedDegreeUI.shortDescription=\u0421\u0435\u0440\u0435\u0434\u043D\u0454 \u0417\u0432\u0430\u0436\u0435\u043D\u0438\u0439 \u0441\u0442\u0443\u043F\u0456\u043D\u044C +ModularityPanel.useWeightCheckbox.text=\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0439\u0442\u0435 \u043E\u0431\u0432\u0430\u0436\u043D\u044E\u0432\u0430\u0447\u0456 +GraphDistancePanel.directedRadioButton.text=\u0420\u0435\u0436\u0438\u0441\u0435\u0440 +GraphDistancePanel.undirectedRadioButton.text=\u041D\u0435\u0440\u0435\u0436\u0438\u0441\u043E\u0432\u0430\u043D\u0438\u0439 +ClusteringCoefficientPanel.jLabel1.text=\u041C\u0435\u0442\u0440\u0438\u043A\u0430 \u043A\u043E\u0435\u0444\u0456\u0446\u0456\u0454\u043D\u0442\u0430 \u043A\u043B\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0456\u0457 +ClusteringCoefficientPanel.directedRadioButton.text=\u0420\u0435\u0436\u0438\u0441\u0435\u0440 +ClusteringCoefficientPanel.undirectedRadioButton.text=\u041D\u0435\u0440\u0435\u0436\u0438\u0441\u043E\u0432\u0430\u043D\u0438\u0439 +DegreeDistributionPanel.directedRadioButton.text=\u0420\u0435\u0436\u0438\u0441\u0435\u0440 +DegreeDistributionPanel.undirectedRadioButton.text=\u041D\u0435\u0440\u0435\u0436\u0438\u0441\u043E\u0432\u0430\u043D\u0438\u0439 +PageRankPanel.probTextField.text=\u0406 +HitsPanel.epsilonTextField.text=\u0406 +GraphDensityPanel.directedRadioButton.text=\u0420\u0435\u0436\u0438\u0441\u0435\u0440 +GraphDensityPanel.undirectedRadioButton.text=\u041D\u0435\u0440\u0435\u0436\u0438\u0441\u043E\u0432\u0430\u043D\u0438\u0439 +DegreeDistributionPanel.descriptionLabel.text=\u0406 +HitsPanel.labelEpsilon.text=\u0415\u043F\u0441\u0438\u043B\u043E\u043D: +ModularityPanel.desriptionLabel.text=\u0406 +PageRankPanel.labelP.text=\u0406\u043C\u043E\u0432\u0456\u0440\u043D\u0456\u0441\u0442\u044C (p): +PageRankPanel.labelE.text=\u0415\u043F\u0441\u0438\u043B\u043E\u043D: +PageRankPanel.directedRadioButton.text=\u0420\u0435\u0436\u0438\u0441\u0435\u0440 +ClusteringCoefficientPanel.header.title=\u041A\u043E\u0435\u0444\u0456\u0446\u0456\u0454\u043D\u0442 \u043A\u043B\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0456\u0457 +DegreeDistributionPanel.header.title=\u0420\u043E\u0437\u043F\u043E\u0434\u0456\u043B \u0441\u0442\u0443\u043F\u0435\u043D\u0456\u0432 +DegreeDistributionPanel.header.description=\u0412\u0438\u043C\u0456\u0440\u044E\u0454 \u0440\u043E\u0437\u043F\u043E\u0434\u0456\u043B \u0441\u0442\u0443\u043F\u0435\u043D\u0456\u0432 \u043C\u0456\u0436 \u0443\u0441\u0456\u043C\u0430 \u0432\u0443\u0437\u043B\u0430\u043C\u0438 \u0432 \u043C\u0435\u0440\u0435\u0436\u0456. +GraphDistancePanel.jLabel1.text=\u041C\u0456\u0436 \u0446\u0435\u043D\u0442\u0440\u043E\u043C: +GraphDistancePanel.header.title=\u0412\u0456\u0434\u0441\u0442\u0430\u043D\u044C +PageRankPanel.jXHeader1.title=PageRank +PageRankPanel.jXLabel1.text=\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0454\u0442\u044C\u0441\u044F \u0434\u043B\u044F \u0456\u043C\u0456\u0442\u0430\u0446\u0456\u0457 \u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430, \u044F\u043A\u0438\u0439 \u0432\u0438\u043F\u0430\u0434\u043A\u043E\u0432\u043E \u043F\u0435\u0440\u0435\u0437\u0430\u043F\u0443\u0441\u043A\u0430\u0454 \u0432\u0435\u0431-\u0441\u0435\u0440\u0444\u0456\u043D\u0433. +PageRankPanel.jXLabel2.text=\u041A\u0440\u0438\u0442\u0435\u0440\u0456\u0439 \u0437\u0443\u043F\u0438\u043D\u043A\u0438, \u0447\u0438\u043C \u043C\u0435\u043D\u0448\u0435 \u0446\u0435 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F, \u0442\u0438\u043C \u0434\u043E\u0432\u0448\u0435 \u0437\u0430\u0439\u043C\u0435 \u0437\u0431\u0456\u0436\u043D\u0456\u0441\u0442\u044C. +ConnectedComponentPanel.header.description=\u0412\u0438\u0437\u043D\u0430\u0447\u0430\u0454 \u043A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u043F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0438\u0445 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0456\u0432 \u0443 \u043C\u0435\u0440\u0435\u0436\u0456. +ConnectedComponentPanel.directedRadioButton.text=\u0420\u0435\u0436\u0438\u0441\u0435\u0440 +ConnectedComponentPanel.jLabel2.text=\u0412\u0438\u044F\u0432\u043B\u044F\u0454 \u043B\u0438\u0448\u0435 \u0441\u043B\u0430\u0431\u043A\u043E \u0437\u0432'\u044F\u0437\u0430\u043D\u0456 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0438 +EigenvectorCentralityPanel.header.description=\u041F\u043E\u043A\u0430\u0437\u043D\u0438\u043A \u0432\u0430\u0436\u043B\u0438\u0432\u043E\u0441\u0442\u0456 \u0432\u0443\u0437\u043B\u0430 \u0432 \u043C\u0435\u0440\u0435\u0436\u0456 \u043D\u0430 \u043E\u0441\u043D\u043E\u0432\u0456 \u0437\u2019\u0454\u0434\u043D\u0430\u043D\u044C \u0432\u0443\u0437\u043B\u0430. +EigenvectorCentralityPanel.labeliterations.text=\u041A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u0456\u0442\u0435\u0440\u0430\u0446\u0456\u0439: +EigenvectorCentralityPanel.undirectedButton.text=\u041D\u0435\u0440\u0435\u0436\u0438\u0441\u043E\u0432\u0430\u043D\u0438\u0439 +ClusteringCoefficientUI.name=\u0421\u0435\u0440\u0435\u0434\u043D\u0454 \u041A\u043E\u0435\u0444\u0456\u0446\u0456\u0454\u043D\u0442 \u043A\u043B\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0456\u0457 +EigenvectorCentralityUI.shortDescription=\u041F\u043E\u043A\u0430\u0437\u043D\u0438\u043A \u0432\u0430\u0436\u043B\u0438\u0432\u043E\u0441\u0442\u0456 \u0432\u0443\u0437\u043B\u0430 \u0432 \u043C\u0435\u0440\u0435\u0436\u0456 \u043D\u0430 \u043E\u0441\u043D\u043E\u0432\u0456 \u0437\u2019\u0454\u0434\u043D\u0430\u043D\u044C \u0432\u0443\u0437\u043B\u0430. +GraphDensityUI.name=\u0429\u0456\u043B\u044C\u043D\u0456\u0441\u0442\u044C \u0433\u0440\u0430\u0444\u0456\u043A\u0430 +DiameterUI.shortDescription=\u0414\u0456\u0430\u043C\u0435\u0442\u0440 \u043C\u0435\u0440\u0435\u0436\u0456 +HitsUI.name=HITS +ModularityUI.name=\u041C\u043E\u0434\u0443\u043B\u044C\u043D\u0456\u0441\u0442\u044C +StatisticalInferenceClusteringUI.shortDescription=\u0410\u043B\u0433\u043E\u0440\u0438\u0442\u043C \u0432\u0438\u044F\u0432\u043B\u0435\u043D\u043D\u044F \u0441\u043F\u0456\u043B\u044C\u043D\u043E\u0442\u0438. +PathLengthUI.name=\u0421\u0435\u0440\u0435\u0434\u043D\u0454 \u0414\u043E\u0432\u0436\u0438\u043D\u0430 \u0448\u043B\u044F\u0445\u0443 +WeightedDegreeUI.name=\u0421\u0435\u0440\u0435\u0434\u043D\u0454 \u0417\u0432\u0430\u0436\u0435\u043D\u0438\u0439 \u0441\u0442\u0443\u043F\u0456\u043D\u044C +PageRankPanel.edgeWeightCheckbox.text=\u0412\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0439\u0442\u0435 \u0432\u0430\u0433\u0443 \u043A\u0440\u0430\u044E +ModularityPanel.resolutionTextField.text=1.0 +ModularityPanel.labelInitialModularityClassIndex.text=\u041F\u043E\u0447\u0430\u0442\u043E\u043A \u0437\u0430\u043D\u044F\u0442\u044C \u043E: +ModularityPanel.initialModularityClassIndexTextField.AccessibleContext.accessibleDescription=\u042F\u043A\u0449\u043E \u0432\u0438 \u043F\u043E\u0441\u0442\u0430\u0432\u0438\u0442\u0435 10 \u0456 \u0437\u043D\u0430\u0439\u0434\u0435\u0442\u0435 7 \u043A\u043B\u0430\u0441\u0456\u0432, \u0432\u043E\u043D\u0438 \u0431\u0443\u0434\u0443\u0442\u044C \u043F\u0440\u043E\u043D\u0443\u043C\u0435\u0440\u043E\u0432\u0430\u043D\u0456 \u0432\u0456\u0434 10 \u0434\u043E 17. +ConnectedComponentPanel.header.title=\u041F\u0456\u0434\u043A\u043B\u044E\u0447\u0435\u043D\u0456 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0438 +GraphDistancePanel.normalizeButton.text=\u041D\u043E\u0440\u043C\u0430\u043B\u0456\u0437\u0443\u0432\u0430\u0442\u0438 \u0446\u0435\u043D\u0442\u0440\u0438 \u0432 [0,1] +ClusteringCoefficientUI.shortDescription=\u0423\u0441\u0435\u0440\u0435\u0434\u043D\u044E\u0454 \u0442\u0435, \u044F\u043A \u0432\u0443\u0437\u043B\u0438 \u0432\u0431\u0443\u0434\u043E\u0432\u0430\u043D\u0456 \u0432 \u043E\u043A\u043E\u043B\u0438\u0446\u0456. +ModularityPanel.labelRandomize.text=\u0412\u0438\u0440\u043E\u0431\u043B\u044F\u0454 \u043A\u0440\u0430\u0449\u0443 \u0434\u0435\u043A\u043E\u043C\u043F\u043E\u0437\u0438\u0446\u0456\u044E, \u0430\u043B\u0435 \u0437\u0431\u0456\u043B\u044C\u0448\u0443\u0454 \u0447\u0430\u0441 \u043E\u0431\u0447\u0438\u0441\u043B\u0435\u043D\u043D\u044F +DegreeDistributionUI.name=\u0421\u0442\u0435\u043F\u0435\u043D\u0435\u0432\u0438\u0439 \u0437\u0430\u043A\u043E\u043D +EigenvectorCentralityUI.name=\u0426\u0435\u043D\u0442\u0440\u0430\u043B\u044C\u043D\u0456\u0441\u0442\u044C \u0432\u043B\u0430\u0441\u043D\u043E\u0433\u043E \u0432\u0435\u043A\u0442\u043E\u0440\u0430 +ModularityPanel.initialModularityClassIndexTextField.text=0 diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_zh_CN.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_zh_CN.properties index 5aad2ab86d..5e2d4500f7 100644 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_zh_CN.properties +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_zh_CN.properties @@ -1,179 +1,94 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:16+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - GraphDistancePanel.directedRadioButton.text=\u6709\u5411 - -GraphDistancePanel.undirectedRadioButton.text=\u4e94\u5411 - +GraphDistancePanel.undirectedRadioButton.text=\u65e0\u5411 ClusteringCoefficientPanel.jLabel1.text=\u805a\u7c7b\u7cfb\u6570 - ClusteringCoefficientPanel.directedRadioButton.text=\u6709\u5411 - ClusteringCoefficientPanel.undirectedRadioButton.text=\u65e0\u5411 - DegreeDistributionPanel.directedRadioButton.text=\u6709\u5411 - DegreeDistributionPanel.undirectedRadioButton.text=\u65e0\u5411 - OpenIDE-Module-Short-Description=\u6807\u51c6\u7edf\u8ba1\u7528\u6237\u754c\u9762UI\u5b9e\u73b0 - +PageRankPanel.probTextField.text= +PageRankPanel.epsilonTextField.text= +HitsPanel.epsilonTextField.text= GraphDensityPanel.directedRadioButton.text=\u6709\u5411 - GraphDensityPanel.undirectedRadioButton.text=\u65e0\u5411 - -HitsPanel.labelEpsilon.text=\u8bef\u5deeEpsilon\: - +DegreeDistributionPanel.descriptionLabel.text= +GraphDistancePanel.descriptionLabel.text= +HitsPanel.labelEpsilon.text=\u8bef\u5deeEpsilon: +HitsPanel.descriptionLabel.text= HitsPanel.directedRadioButton.text=\u6709\u5411 - HitsPanel.undirectedRadioButton.text=\u65e0\u5411 - ModularityPanel.randomizeCheckbox.text=\u968f\u673a - -PageRankPanel.labelP.text=\u6982\u7387(p)\: - -PageRankPanel.labelE.text=\u8bef\u5deeEpsilon\: - +ModularityPanel.desriptionLabel.text= +PageRankPanel.labelP.text=\u6982\u7387(p): +PageRankPanel.labelE.text=\u8bef\u5deeEpsilon: PageRankPanel.directedRadioButton.text=\u6709\u5411 - PageRankPanel.undirectedRadioButton.text=\u65e0\u5411 - GraphDensityPanel.header.title=\u5bc6\u5ea6 - GraphDensityPanel.header.description=\u5ea6\u91cf\u7f51\u7edc\u5b8c\u6574\u6027\u3002\u4e00\u4e2a\u5b8c\u5168\u56fe\u5177\u5907\u6240\u6709\u53ef\u80fd\u8fde\u63a5\u7684\u8fb9\uff0c\u5373\u4efb\u610f\u4e24\u8282\u70b9\u6709\u8fb9\u8fde\u63a5\uff0c\u5176\u5bc6\u5ea6\u4e3a1\u3002 - ClusteringCoefficientPanel.header.title=\u805a\u7c7b\u7cfb\u6570 - ClusteringCoefficientPanel.header.description=\u805a\u7c7b\u7cfb\u6570\uff0c\u548c\u5e73\u5747\u6700\u77ed\u8def\u5f84\u4e00\u8d77\uff0c\u80fd\u591f\u5c55\u793a\u6240\u8c13\u7684\u201c\u5c0f\u4e16\u754c\u201d\u6548\u5e94\uff1b\u8868\u660e\u8282\u70b9\u5982\u4f55\u5d4c\u5165\u5176\u90bb\u5c45\u5f53\u4e2d\u3002\u5e73\u5747\u805a\u7c7b\u7cfb\u6570\u7ed9\u51fa\u5173\u4e8e\u4e00\u4e2a\u8282\u70b9\u805a\u7c7b\u6216\u62b1\u56e2\u7684\u603b\u4f53\u8ff9\u8c61\u3002 - DegreeDistributionPanel.header.title=\u5ea6\u5206\u5e03 - DegreeDistributionPanel.header.description=\u5ea6\u91cf\u7f51\u7edc\u4e2d\u6240\u6709\u8282\u70b9\u7684\u5ea6\u7684\u5206\u5e03\u60c5\u51b5\u3002 - GraphDistancePanel.jXLabel1.text=\u5ea6\u91cf\u4e00\u4e2a\u8282\u70b9\u51fa\u73b0\u5728\u7f51\u7edc\u4e2d\u6700\u77ed\u8def\u5f84\u4e0a\u7684\u9891\u7387\u3002 - GraphDistancePanel.jXLabel2.text=\u4ece\u4e00\u4e2a\u7ed9\u5b9a\u8d77\u59cb\u8282\u70b9\u5230\u6240\u6709\u5176\u5b83\u8282\u70b9\u7684\u5e73\u5747\u8ddd\u79bb\u3002 - GraphDistancePanel.jXLabel3.text=\u4ece\u4e00\u4e2a\u7ed9\u5b9a\u8d77\u59cb\u8282\u70b9\u5230\u8ddd\u5176\u6700\u8fdc\u8282\u70b9\u7684\u8ddd\u79bb\u3002 - -GraphDistancePanel.jLabel1.text=\u4ecb\u6570\u4e2d\u5fc3\u5ea6 - -GraphDistancePanel.jLabel2.text=\u7d27\u5bc6\u4e2d\u5fc3\u5ea6 - -GraphDistancePanel.jLabel3.text=\u79bb\u5fc3\u7387\: - +GraphDistancePanel.jLabel1.text=\u4ecb\u6570\u4e2d\u5fc3\u6027\uff1a +GraphDistancePanel.jLabel2.text=\u63a5\u8fd1\u4e2d\u5fc3\u6027\uff1a +GraphDistancePanel.jLabel3.text=\u79bb\u5fc3\u7387: GraphDistancePanel.header.description=\u6240\u6709\u8282\u70b9\u5bf9\u4e4b\u95f4\u7684\u5e73\u5747\u56fe\u8ddd\u79bb\u3002\u4e92\u76f8\u8fde\u63a5\u7684\u8282\u70b9\u7684\u56fe\u8ddd\u79bb\u4e3a1\u3002\u76f4\u5f84\u662f\u6700\u957f\u7684\u4efb\u4f55\u4e24\u4e2a\u8282\u70b9\u4e4b\u95f4\u7684\u8ddd\u79bb\u3002(\u5373\u662f\u4e24\u4e2a\u6700\u9065\u8fdc\u7684\u8282\u70b9\u76f8\u8ddd\u591a\u8fdc)\u3002 - GraphDistancePanel.header.title=\u8ddd\u79bb - HitsPanel.header.description=\u8ba1\u7b97\u6bcf\u4e2a\u8282\u70b9\u7684\u4e24\u4e2a\u5355\u72ec\u7684\u503c\u3002\u7b2c\u4e00\u4e2a\u503c\uff08\u7b80\u79f0\u7ba1\u8f96\u533a\uff09\u5ea6\u91cf\u6709\u4ef7\u503c\u7684\u4fe1\u606f\u5982\u4f55\u5b58\u50a8\u5728\u8be5\u8282\u70b9\u3002\u7b2c\u4e8c\u4e2a\u503c\uff08\u79f0\u4e3a\u96c6\u7ebf\u533a\uff09\u5ea6\u91cf\u7684\u8282\u70b9\u8fde\u63a5\u7684\u8d28\u91cf\u3002 - HitsPanel.header.title=\u70b9\u51fb\u6b21\u6570 - HitsPanel.epsilonLabel.text=\u505c\u6b62\u51c6\u5219\uff0c\u6b64\u503c\u8d8a\u5c0f\uff0c\u6536\u655b\u65f6\u95f4\u8d8a\u957f\u3002 - PageRankPanel.jXHeader1.description=\u4f9d\u636e\u7528\u6237\u8ddf\u968f\u8fde\u63a5\u5c06\u975e\u968f\u673a\u5230\u8fbe\u8fd9\u4e2a\u8282\u70b9\u201c\u9875\u9762\u201d\u6765\u6392\u5e8f\u8282\u70b9\u201c\u9875\u9762\u6570\u201d\u3002 - PageRankPanel.jXHeader1.title=PageRank - PageRankPanel.jXLabel1.text=\u7528\u4e8e\u6a21\u62df\u7528\u6237\u968f\u5373\u91cd\u65b0\u5f00\u59cb\u7f51\u4e0a\u51b2\u6d6a\u3002 - PageRankPanel.jXLabel2.text=\u505c\u6b62\u51c6\u5219\uff0c\u6b64\u503c\u8d8a\u5c0f\uff0c\u6536\u655b\u65f6\u95f4\u8d8a\u957f\u3002 - ModularityPanel.header.title=\u6a21\u5757\u6027 - ModularityPanel.header.description=\u793e\u533a\u63a2\u6d4b\u7b97\u6cd5\u3002 - -ConnectedComponentPanel.header.description=\u786e\u5b9a\u7f51\u7edc\u4e2d\u8fde\u63a5\u7ec4\u4ef6\u6570\u76ee\u3002 - +ConnectedComponentPanel.header.description=\u786e\u5b9a\u7f51\u7edc\u4e2d\u8fde\u901a\u5206\u91cf\u7684\u4e2a\u6570\u3002 ConnectedComponentPanel.undirectedRadioButton.text=\u65e0\u5411 - ConnectedComponentPanel.directedRadioButton.text=\u6709\u5411 - -ConnectedComponentPanel.header.title=\u8fde\u63a5\u7ec4\u4ef6 - -ConnectedComponentPanel.jLabel1.text=(\u5c06\u63a2\u6d4b\u5f3a&\u5f31\u8fde\u63a5\u7ec4\u4ef6) - +ConnectedComponentPanel.header.title=\u8fde\u901a\u5206\u91cf +ConnectedComponentPanel.jLabel1.text=\u5c06\u63a2\u6d4b\u5f3a&\u5f31\u8fde\u63a5\u5206\u91cf ConnectedComponentPanel.jLabel2.text=(\u5c06\u53ea\u63a2\u6d4b\u5f31\u8fde\u63a5\u7ec4\u4ef6) - EigenvectorCentralityPanel.header.description=\u57fa\u4e8e\u8282\u70b9\u8fde\u63a5\u6765\u8861\u91cf\u8282\u70b9\u91cd\u8981\u6027\u7684\u6307\u6807\u3002 - EigenvectorCentralityPanel.header.title=\u7279\u5f81\u5411\u91cf\u4e2d\u5fc3\u5ea6 - EigenvectorCentralityPanel.iterationsTextField.text=jTextField1 - -EigenvectorCentralityPanel.labeliterations.text=\u8fed\u4ee3\u6b21\u6570\: - +EigenvectorCentralityPanel.labeliterations.text=\u8fed\u4ee3\u6b21\u6570: EigenvectorCentralityPanel.directedButton.text=\u6709\u5411 - EigenvectorCentralityPanel.undirectedButton.text=\u65e0\u5411 - GraphDistancePanel.normalizeButton.text=\u5f52\u4e00\u5316\u4e2d\u5fc3\u5ea6\u4e8e\u533a\u95f4[0,1] - -ConnectedComponentUI.name=\u8fde\u63a5\u7ec4\u4ef6 - -!ConnectedComponentUI.shortDescription= - +ConnectedComponentUI.name=\u8fde\u63a5\u90e8\u4ef6 +ConnectedComponentUI.shortDescription=\u786e\u5b9a\u7f51\u7edc\u4e2d\u8fde\u901a\u5206\u91cf\u7684\u4e2a\u6570\u3002 ClusteringCoefficientUI.name=\u5e73\u5747\u805a\u7c7b\u7cfb\u6570 - -!ClusteringCoefficientUI.shortDescription= - +ClusteringCoefficientUI.shortDescription=\u5e73\u5747\u503c\u5982\u4f55\u8282\u70b9\u5d4c\u5165\u5728\u4ed6\u4eec\u7684\u90bb\u91cc\u3002 DegreeDistributionUI.name=\u5ea6\u5e42\u7387 - -!DegreeDistributionUI.shortDescription= - +DegreeDistributionUI.shortDescription=\u5ea6\u91cf\u7f51\u7edc\u4e2d\u6240\u6709\u8282\u70b9\u7684\u5ea6\u7684\u5206\u5e03\u60c5\u51b5\u3002 EigenvectorCentralityUI.name=\u7279\u5f81\u5411\u91cf\u4e2d\u5fc3\u5ea6 - -!EigenvectorCentralityUI.shortDescription= - +EigenvectorCentralityUI.shortDescription=\u57fa\u4e8e\u8282\u70b9\u8fde\u63a5\u6765\u8861\u91cf\u8282\u70b9\u91cd\u8981\u6027\u7684\u6307\u6807\u3002 GraphDensityUI.name=\u56fe\u5bc6\u5ea6 - -!GraphDensityUI.shortDescription= - +GraphDensityUI.shortDescription=\u6d4b\u91cf\u7684\u7f51\u7edc\u662f\u5982\u4f55\u63a5\u8fd1\u5b8c\u6210\u3002 DiameterUI.name=\u7f51\u7edc\u76f4\u5f84 - -!DiameterUI.shortDescription= - +DiameterUI.shortDescription=\u7f51\u7edc\u76f4\u5f84 HitsUI.name=\u70b9\u51fb\u6b21\u6570 - -!HitsUI.shortDescription= - +HitsUI.shortDescription=\u8ba1\u7b97\u6bcf\u4e24\u4e2a\u8282\u70b9\u7684\u503c\uff1a\u5982\u4f55\u6709\u4ef7\u503c\u7684\u4fe1\u606f\u5b58\u50a8\u5728\u8be5\u8282\u70b9\u662f\u4e0e\u8282\u70b9\u94fe\u8def\u7684\u8d28\u91cf\u3002 InOutDegreeUI.name=\u5e73\u5747\u5ea6 - -!InOutDegreeUI.shortDescription= - +InOutDegreeUI.shortDescription=\u5e73\u5747\u5ea6 ModularityUI.name=\u6a21\u5757\u5316 - -!ModularityUI.shortDescription= - +ModularityUI.shortDescription=\u793e\u533a\u63a2\u6d4b\u7b97\u6cd5\u3002 PageRankUI.name=PageRank - -!PageRankUI.shortDescription= - +PageRankUI.shortDescription=\u4f9d\u636e\u7528\u6237\u8ddf\u968f\u8fde\u63a5\u5c06\u975e\u968f\u673a\u5230\u8fbe\u8fd9\u4e2a\u8282\u70b9\u201c\u9875\u9762\u201d\u6765\u6392\u5e8f\u8282\u70b9\u201c\u9875\u9762\u6570\u201d\u3002 PathLengthUI.name=\u5e73\u5747\u8def\u5f84\u957f\u5ea6 - -!PathLengthUI.shortDescription= - +PathLengthUI.shortDescription=\u5e73\u5747\u8def\u5f84\u957f\u5ea6 WeightedDegreeUI.name=\u5e73\u5747\u52a0\u6743\u5ea6 - -!WeightedDegreeUI.shortDescription= - +WeightedDegreeUI.shortDescription=\u5e73\u5747\u52a0\u6743\u5ea6 PageRankPanel.edgeWeightCheckbox.text=\u4f7f\u7528\u8fb9\u7684\u6743\u91cd - -!ModularityPanel.useWeightCheckbox.text= - -!ModularityPanel.jLabel1.text= - -!ModularityPanel.resolutionTextField.toolTipText= - -!ModularityPanel.resolutionTextField.text= - -!ModularityPanel.labelEdgeWeight.text= - -!ModularityPanel.labelResolution.text= - -!ModularityPanel.labelRandomize.text= +ModularityPanel.useWeightCheckbox.text=\u4f7f\u7528\u6743\u91cd +ModularityPanel.jLabel1.text=\u89e3\u6790\u5ea6\uff1a +ModularityPanel.resolutionTextField.toolTipText=\u8f93\u5165\u89e3\u6790\u5ea6\u53c2\u6570 ( 1.0\u662f\u6807\u51c6\u6a21\u5757\u5316\uff0c\u4e0d\u52301.0\u5bfc\u81f4\u8f83\u5c0f\u7684\u793e\u533a\uff0c\u66f4\u591a\u7684\u505a\u5927) +# ModularityPanel.resolutionTextField.text=1.0 +ModularityPanel.labelEdgeWeight.text=\u4f7f\u7528\u8fb9\u7684\u6743\u91cd +ModularityPanel.labelResolution.text=1.0\u662f\u6807\u51c6\u7684\u89e3\u6790\u5ea6\uff0c\u6570\u5b57 (\u89e3\u6790\u5ea6) \u8d8a\u5c0f\uff0c\u793e\u533a\u8d8a\u591a\uff1b\u6570\u5b57 (\u89e3\u6790\u5ea6) \u8d8a\u5927\uff0c\u793e\u533a\u8d8a\u5c11\u3002 +ModularityPanel.labelRandomize.text=\u4ea7\u751f\u66f4\u597d\u7684\u5206\u89e3\uff0c\u4f46\u662f\u4f1a\u589e\u52a0\u8ba1\u7b97\u65f6\u95f4 +ModularityPanel.resolutionTextField.text=1.0 diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_zh_TW.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_zh_TW.properties new file mode 100644 index 0000000000..52aac153db --- /dev/null +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/Bundle_zh_TW.properties @@ -0,0 +1,93 @@ +GraphDistancePanel.directedRadioButton.text=\u6709\u5411\u6027 +GraphDistancePanel.undirectedRadioButton.text=\u7121\u5411\u6027 +ClusteringCoefficientPanel.jLabel1.text=Clustering Coefficent Metric +ClusteringCoefficientPanel.directedRadioButton.text=\u6709\u5411\u6027 +ClusteringCoefficientPanel.undirectedRadioButton.text=\u7121\u5411\u6027 +DegreeDistributionPanel.directedRadioButton.text=\u6709\u5411\u6027 +DegreeDistributionPanel.undirectedRadioButton.text=\u7121\u5411\u6027 +OpenIDE-Module-Short-Description=Standard statistics UI implementations +PageRankPanel.probTextField.text= +PageRankPanel.epsilonTextField.text= +HitsPanel.epsilonTextField.text= +GraphDensityPanel.directedRadioButton.text=\u6709\u5411\u6027 +GraphDensityPanel.undirectedRadioButton.text=\u7121\u5411\u6027 +DegreeDistributionPanel.descriptionLabel.text= +GraphDistancePanel.descriptionLabel.text= +HitsPanel.labelEpsilon.text=Epsilon: +HitsPanel.descriptionLabel.text= +HitsPanel.directedRadioButton.text=\u6709\u5411\u6027 +HitsPanel.undirectedRadioButton.text=\u7121\u5411\u6027 +ModularityPanel.randomizeCheckbox.text=Randomize +ModularityPanel.desriptionLabel.text= +PageRankPanel.labelP.text=Probability (p): +PageRankPanel.labelE.text=Epsilon: +PageRankPanel.directedRadioButton.text=\u6709\u5411\u6027 +PageRankPanel.undirectedRadioButton.text=\u7121\u5411\u6027 +GraphDensityPanel.header.title=Density +GraphDensityPanel.header.description=Measures how close the network is to complete. A complete graph has all possible edges and density equal to 1. +ClusteringCoefficientPanel.header.title=Clustering Coefficent +ClusteringCoefficientPanel.header.description=The clustering coefficient, along with the mean shortest path, can indicate a "small-world" effect. It indicates how nodes are embedded in their neighborhood. The average give an overall indication of the clustering in the network. +DegreeDistributionPanel.header.title=Degree Distribution +DegreeDistributionPanel.header.description=Measures the distribution of degrees amongst all of the nodes within the network. +GraphDistancePanel.jXLabel1.text=Measures how often a node appears on shortest paths between nodes in the network. +GraphDistancePanel.jXLabel2.text=The average distance from a given starting node to all other nodes in the network. +GraphDistancePanel.jXLabel3.text=The distance from a given starting node to the farthest node from it in the network. +GraphDistancePanel.jLabel1.text=Betweenness Centrality: +GraphDistancePanel.jLabel2.text=Closeness Centrality: +GraphDistancePanel.jLabel3.text=Eccentricity: +GraphDistancePanel.header.description=The average graph-distance between all pairs of nodes. Connected nodes have graph distance 1. The diameter is the longest graph distance between any two nodes in the network. (i.e. How far apart are the two most distant nodes). +GraphDistancePanel.header.title=Distance +HitsPanel.header.description=Computes two separate values for each node. The first value (called Authority) measures how valuable information stored at that node is. The second value (called Hub) measures the quality of the nodes links. +HitsPanel.header.title=HITS +HitsPanel.epsilonLabel.text=Stopping criterion, the smaller this value, the longer convergence will take. +PageRankPanel.jXHeader1.description=Ranks nodes "pages" according to how often a user following links will non-randomly reach the node "page". +PageRankPanel.jXHeader1.title=PageRank +PageRankPanel.jXLabel1.text=Used to simulate the user randomly restarting the web-surfing. +PageRankPanel.jXLabel2.text=Stopping criterion, the smaller this value, the longer convergence will take. +ModularityPanel.header.title=Modularity +ModularityPanel.header.description=Community detection algorithm. +ConnectedComponentPanel.header.description=Determines the number of connected components in the network. +ConnectedComponentPanel.undirectedRadioButton.text=\u7121\u5411\u6027 +ConnectedComponentPanel.directedRadioButton.text=\u6709\u5411\u6027 +ConnectedComponentPanel.header.title=Connected Components +ConnectedComponentPanel.jLabel1.text=Detects strongly & weakly connected components +ConnectedComponentPanel.jLabel2.text=Detects only weakly connected components +EigenvectorCentralityPanel.header.description=A measure of node importance in a network based on a node's connections. +EigenvectorCentralityPanel.header.title=Eigenvector Centrality +EigenvectorCentralityPanel.iterationsTextField.text=jTextField1 +EigenvectorCentralityPanel.labeliterations.text=Number of iterations: +EigenvectorCentralityPanel.directedButton.text=\u6709\u5411\u6027 +EigenvectorCentralityPanel.undirectedButton.text=\u7121\u5411\u6027 +GraphDistancePanel.normalizeButton.text=Normalize Centralities in [0,1] +ConnectedComponentUI.name=Connected Components +ConnectedComponentUI.shortDescription=Determines the number of connected components in the network. +ClusteringCoefficientUI.name=Avg. Clustering Coefficient +ClusteringCoefficientUI.shortDescription=Averages how nodes are embedded in their neighborhood. +DegreeDistributionUI.name=Degree Power Law +DegreeDistributionUI.shortDescription=Measures the distribution of degrees amongst all of the nodes within the network. +EigenvectorCentralityUI.name=Eigenvector Centrality +EigenvectorCentralityUI.shortDescription=A measure of node importance in a network based on a node's connections. +GraphDensityUI.name=Graph Density +GraphDensityUI.shortDescription=Measures how close the network is to complete. +DiameterUI.name=Network Diameter +DiameterUI.shortDescription=Network Diameter +HitsUI.name=HITS +HitsUI.shortDescription=Computes two values for each node: How valuable information stored at that node is & the quality of the nodes links. +InOutDegreeUI.name=\u5e73\u5747\u5ea6\u4e2d\u5fc3\u6027 +InOutDegreeUI.shortDescription=\u5e73\u5747\u5ea6\u4e2d\u5fc3\u6027 +ModularityUI.name=Modularity +ModularityUI.shortDescription=Community detection algorithm. +PageRankUI.name=PageRank +PageRankUI.shortDescription=Ranks nodes "pages" according to how often a user following links will non-randomly reach the node "page". +PathLengthUI.name=Avg. Path Length +PathLengthUI.shortDescription=Avg. Path Length +WeightedDegreeUI.name=Avg. Weighted Degree +WeightedDegreeUI.shortDescription=Avg. Weighted Degree +PageRankPanel.edgeWeightCheckbox.text=Use edge weight +ModularityPanel.useWeightCheckbox.text=Use weights +ModularityPanel.jLabel1.text=Resolution: +ModularityPanel.resolutionTextField.toolTipText=Enter a resolution parameter (1.0 is standard modularity, less than 1.0 leads to smaller communities, more to bigger) +ModularityPanel.resolutionTextField.text=1.0 +ModularityPanel.labelEdgeWeight.text=Use edge weight +ModularityPanel.labelResolution.text=Lower to get more communities (smaller ones) and higher than 1.0 to get less communities (bigger ones). +ModularityPanel.labelRandomize.text=Produce a better decomposition but increases computation time diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/cs.po b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/cs.po deleted file mode 100644 index 233db7f704..0000000000 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/cs.po +++ /dev/null @@ -1,278 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-17 06:57+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "GraphDistancePanel.directedRadioButton.text" -msgstr "SmΔ›rovanΓ½" - -msgid "GraphDistancePanel.undirectedRadioButton.text" -msgstr "NesmΔ›rovanΓ½" - -msgid "ClusteringCoefficientPanel.jLabel1.text" -msgstr "Metrika koeficientu shlukovΓ‘nΓ­" - -msgid "ClusteringCoefficientPanel.directedRadioButton.text" -msgstr "SmΔ›rovanΓ½" - -msgid "ClusteringCoefficientPanel.undirectedRadioButton.text" -msgstr "NesmΔ›rovanΓ½" - -msgid "DegreeDistributionPanel.directedRadioButton.text" -msgstr "SmΔ›rovanΓ½" - -msgid "DegreeDistributionPanel.undirectedRadioButton.text" -msgstr "NesmΔ›rovanΓ½" - -msgid "OpenIDE-Module-Short-Description" -msgstr "StandardnΓ­ zavedenΓ­ UI statistiky" - -msgid "GraphDensityPanel.directedRadioButton.text" -msgstr "SmΔ›rovanΓ½" - -msgid "GraphDensityPanel.undirectedRadioButton.text" -msgstr "NesmΔ›rovanΓ½" - -msgid "HitsPanel.labelEpsilon.text" -msgstr "Epsilon:" - -msgid "HitsPanel.directedRadioButton.text" -msgstr "SmΔ›rovanΓ½" - -msgid "HitsPanel.undirectedRadioButton.text" -msgstr "NesmΔ›rovanΓ½" - -msgid "ModularityPanel.randomizeCheckbox.text" -msgstr "NΓ‘hodnΔ›" - -msgid "PageRankPanel.labelP.text" -msgstr "PravdΔ›podobnost (p):" - -msgid "PageRankPanel.labelE.text" -msgstr "Epsilon:" - -msgid "PageRankPanel.directedRadioButton.text" -msgstr "SmΔ›rovanΓ½" - -msgid "PageRankPanel.undirectedRadioButton.text" -msgstr "NesmΔ›rovanΓ½" - -msgid "GraphDensityPanel.header.title" -msgstr "Hustota" - -msgid "GraphDensityPanel.header.description" -msgstr "MΔ›Ε™Γ­ jak blΓ­zko je sΓ­Ε₯ k dokončenΓ­. DokončenΓ½ graf mΓ‘ vΕ‘echny moΕΎnΓ© hrany a hustotu rovnou 1." - -msgid "ClusteringCoefficientPanel.header.title" -msgstr "Koeficient shlukovΓ‘nΓ­" - -msgid "ClusteringCoefficientPanel.header.description" -msgstr "Koeficient shlukovΓ‘nΓ­, spolu s prΕ―mΔ›rnou nejkratΕ‘Γ­ cestou, mΕ―ΕΎe naznačovat efekt \"malΓ©ho svΔ›ta\". Ukazuje, jak jsou uzle vnoΕ™enΓ© do svΓ©ho okolΓ­. PrΕ―mΔ›r dΓ‘vΓ‘ celkovou informaci o shluku sΓ­tΔ›." - -msgid "DegreeDistributionPanel.header.title" -msgstr "Distribuce stupňů" - -msgid "DegreeDistributionPanel.header.description" -msgstr "MΔ›Ε™Γ­ distribuci stupňů mezi vΕ‘emi uzly uvnitΕ™ sΓ­tΔ›." - -msgid "GraphDistancePanel.jXLabel1.text" -msgstr "MΔ›Ε™Γ­ jak často se uzel objevΓ­ na nejkratΕ‘Γ­ cestΔ› mezi uzly v sΓ­ti." - -msgid "GraphDistancePanel.jXLabel2.text" -msgstr "PrΕ―mΔ›rnΓ‘ vzdΓ‘lenost od zadanΓ©ho počÑtečnΓ­ho uzle ke vΕ‘em ostatnΓ­m uzlΕ―m v sΓ­ti." - -msgid "GraphDistancePanel.jXLabel3.text" -msgstr "VzdΓ‘lenost od zadanΓ©ho počÑtečnΓ­ho uzle k jeho nejvzdΓ‘lenΔ›jΕ‘Γ­mu uzlu v sΓ­ti." - -msgid "GraphDistancePanel.jLabel1.text" -msgstr "CentrΓ‘lnost relace \"mezi\"" - -msgid "GraphDistancePanel.jLabel2.text" -msgstr "CentrΓ‘lnost blΓ­zkosti" - -msgid "GraphDistancePanel.jLabel3.text" -msgstr "Excentricita:" - -msgid "GraphDistancePanel.header.description" -msgstr "PrΕ―mΔ›rnΓ‘ vzdΓ‘lenost grafu mezi vΕ‘emi pΓ‘ry uzlΕ―. PΕ™ipojenΓ© uzly majΓ­ vzdΓ‘lenost grafu 1. PrΕ―mΔ›r je nejdelΕ‘Γ­ vzdΓ‘lenost grafu mezi jakΓ½mikoli dvΔ›ma uzly v sΓ­ti (tj. Jak daleko od sebe jsou dva nejvzdΓ‘lenΔ›jΕ‘Γ­ uzly)." - -msgid "GraphDistancePanel.header.title" -msgstr "VzdΓ‘lenost" - -msgid "HitsPanel.header.description" -msgstr "SpočítΓ‘ dvΔ› rΕ―znΓ© hodnoty pro kaΕΎdΓ½ uzel. PrvnΓ­ hodnota (nazvanΓ‘ Autorita) mΔ›Ε™Γ­ jak cennΓ‘ je informace uloΕΎenΓ‘ v tomto uzlu. DruhΓ‘ hodnota (nazvanΓ‘ hub) mΔ›Ε™Γ­ kvalitu spojenΓ­ uzlu." - -msgid "HitsPanel.header.title" -msgstr "ZOBRAZENÍ" - -msgid "HitsPanel.epsilonLabel.text" -msgstr "KritΓ©rium zastavenΓ­, čím niΕΎΕ‘Γ­ je tato hodnota, tΓ­m dΓ©le bude konvergence trvat." - -msgid "PageRankPanel.jXHeader1.description" -msgstr "Ohodnocuje \"strΓ‘nky\" uzlΕ― podle toho jak často uΕΎivatel klikajΓ­cΓ­ na odkaz nenΓ‘hodnΔ› dosΓ‘hne \"strΓ‘nky\" uzlu." - -msgid "PageRankPanel.jXHeader1.title" -msgstr "Hodnost strΓ‘nky" - -msgid "PageRankPanel.jXLabel1.text" -msgstr "PouΕΎito k simulaci uΕΎivatelΕ― nΓ‘hodnΔ› restartujΓ­cΓ­ch prohlΓ­ΕΎenΓ­ internetu." - -msgid "PageRankPanel.jXLabel2.text" -msgstr "KritΓ©rium zastavenΓ­, čím niΕΎΕ‘Γ­ je tato hodnota, tΓ­m dΓ©le bude konvergence trvat." - -msgid "ModularityPanel.header.title" -msgstr "Modularita" - -msgid "ModularityPanel.header.description" -msgstr "Algoritmus zjiΕ‘tΔ›nΓ­ komunity." - -msgid "ConnectedComponentPanel.header.description" -msgstr "Určuje počet pΕ™ipojenΓ½ch komponent v sΓ­ti." - -msgid "ConnectedComponentPanel.undirectedRadioButton.text" -msgstr "NesmΔ›rovanΓ½" - -msgid "ConnectedComponentPanel.directedRadioButton.text" -msgstr "SmΔ›rovanΓ½" - -msgid "ConnectedComponentPanel.header.title" -msgstr "PΕ™ipojenΓ© komponenty" - -msgid "ConnectedComponentPanel.jLabel1.text" -msgstr "ZjiΕ‘Ε₯uje silnΓ© a slabΔ› pΕ™ipojenΓ© komponenty" - -msgid "ConnectedComponentPanel.jLabel2.text" -msgstr "ZjiΕ‘Ε₯uje pouze slabΔ› pΕ™ipojenΓ© komponenty)" - -msgid "EigenvectorCentralityPanel.header.description" -msgstr "MΓ­ra dΕ―leΕΎitosti uzlu v sΓ­ti na zΓ‘kladΔ› pΕ™ipojenΓ­ uzlu." - -msgid "EigenvectorCentralityPanel.header.title" -msgstr "CentrΓ‘lnost vlastnΓ­ho vektoru" - -msgid "EigenvectorCentralityPanel.iterationsTextField.text" -msgstr "jTextField1" - -msgid "EigenvectorCentralityPanel.labeliterations.text" -msgstr "Počet opakovΓ‘nΓ­:" - -msgid "EigenvectorCentralityPanel.directedButton.text" -msgstr "SmΔ›rovanΓ½" - -msgid "EigenvectorCentralityPanel.undirectedButton.text" -msgstr "NesmΔ›rovanΓ½" - -msgid "GraphDistancePanel.normalizeButton.text" -msgstr "Normalizace centrΓ‘lnostΓ­ v [0,1]" - -msgid "ConnectedComponentUI.name" -msgstr "PΕ™ipojenΓ© komponenty" - -msgid "ConnectedComponentUI.shortDescription" -msgstr "ZjistΓ­ počet zapojenΓ½ch součÑstΓ­ v sΓ­ti" - -msgid "ClusteringCoefficientUI.name" -msgstr "PrΕ―m. koeficient shlukovΓ‘nΓ­" - -msgid "ClusteringCoefficientUI.shortDescription" -msgstr "ZprΕ―mΔ›ruje počet uzlΕ―, kterΓ© jsou vnoΕ™eny do okolΓ­." - -msgid "DegreeDistributionUI.name" -msgstr "Stupeň mocninnΓ©ho zΓ‘kona" - -msgid "DegreeDistributionUI.shortDescription" -msgstr "MΔ›Ε™Γ­ distribuci stupňů mezi vΕ‘emi uzly uvnitΕ™ sΓ­tΔ›." - -msgid "EigenvectorCentralityUI.name" -msgstr "CentrΓ‘lnost vlastnΓ­ho vektoru" - -msgid "EigenvectorCentralityUI.shortDescription" -msgstr "MΓ­ra dΕ―leΕΎitosti uzlu v sΓ­ti na zΓ‘kladΔ› pΕ™ipojenΓ­ uzlu." - -msgid "GraphDensityUI.name" -msgstr "Hustota grafu" - -msgid "GraphDensityUI.shortDescription" -msgstr "MΔ›Ε™Γ­ jak blΓ­zko je sΓ­Ε₯ k dokončenΓ­." - -msgid "DiameterUI.name" -msgstr "PrΕ―mΔ›r sΓ­tΔ›" - -msgid "DiameterUI.shortDescription" -msgstr "PrΕ―mΔ›r sΓ­tΔ›" - -msgid "HitsUI.name" -msgstr "ZOBRAZENÍ" - -msgid "HitsUI.shortDescription" -msgstr "VypočítΓ‘ dvΔ› hodnoty pro kaΕΎdΓ½ uzel: Jak cennΓ© jsou informace uloΕΎenΓ© v tomto uzlu a mnoΕΎstvΓ­ spojenΓ­ uzlu." - -msgid "InOutDegreeUI.name" -msgstr "PrΕ―mΔ›rnΓ½ stupeň" - -msgid "InOutDegreeUI.shortDescription" -msgstr "PrΕ―mΔ›rnΓ½ stupeň" - -msgid "ModularityUI.name" -msgstr "Modularita" - -msgid "ModularityUI.shortDescription" -msgstr "Algoritmus zjiΕ‘tΔ›nΓ­ komunity." - -msgid "PageRankUI.name" -msgstr "Hodnost strΓ‘nky" - -msgid "PageRankUI.shortDescription" -msgstr "Ohodnocuje \"strΓ‘nky\" uzlΕ― podle toho jak často uΕΎivatel klikajΓ­cΓ­ na odkaz nenΓ‘hodnΔ› dosΓ‘hne \"strΓ‘nky\" uzlu." - -msgid "PathLengthUI.name" -msgstr "PrΕ―m. dΓ©lka cesty" - -msgid "PathLengthUI.shortDescription" -msgstr "PrΕ―m. dΓ©lka cest" - -msgid "WeightedDegreeUI.name" -msgstr "PrΕ―m. vΓ‘ΕΎenΓ½ stupeň" - -msgid "WeightedDegreeUI.shortDescription" -msgstr "PrΕ―m. vΓ‘ΕΎenΓ½ stupeň" - -msgid "PageRankPanel.edgeWeightCheckbox.text" -msgstr "PouΕΎΓ­t vΓ‘hu hrany" - -msgid "ModularityPanel.useWeightCheckbox.text" -msgstr "PouΕΎΓ­t vΓ‘hy" - -msgid "ModularityPanel.jLabel1.text" -msgstr "RozloΕΎenΓ­:" - -msgid "ModularityPanel.resolutionTextField.toolTipText" -msgstr "Zadejte parametr rozloΕΎenΓ­ (1.0 je standardnΓ­ modularita, mΓ©nΔ› nΔ›ΕΎ 1.0 vede k menΕ‘Γ­m komunitΓ‘m, vΓ­ce vede k vΔ›tΕ‘Γ­m)" - -msgid "ModularityPanel.resolutionTextField.text" -msgstr "1.0" - -msgid "ModularityPanel.labelEdgeWeight.text" -msgstr "PouΕΎΓ­t vΓ‘hu hrany" - -msgid "ModularityPanel.labelResolution.text" -msgstr "NΓ­ΕΎe pro zΓ­skΓ‘nΓ­ vΓ­ce komunit (menΕ‘Γ­ch) a vΓ½Ε‘e neΕΎ 1.0 pro zΓ­skΓ‘nΓ­ mΓ©nΔ› komunit (vΔ›tΕ‘Γ­ch)." - -msgid "ModularityPanel.labelRandomize.text" -msgstr "VytvΓ‘Ε™Γ­ lepΕ‘Γ­ rozklad, ale zvyΕ‘uje čas vΓ½počtu" diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_ar.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_ca.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_ca.properties new file mode 100644 index 0000000000..1b029e468e --- /dev/null +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_ca.properties @@ -0,0 +1,22 @@ +DynamicDegreeUI.name=Grau +DynamicNbNodesUI.name=# Nodes +DynamicNbEdgesUI.name=# Arestes +DynamicClusteringCoefficientUI.name=Coeficient de clusteritzaciσ +DynamicDegreeUI.shortDescription=Degree of each node and the average of the network over time. +DynamicNbNodesUI.shortDescription=Nombre de nodes a la xarxa al llarg del temps +DynamicNbEdgesUI.shortDescription=Nombre d'arestes a la xarxa al llarg del temps +DynamicClusteringCoefficientUI.shortDescription=Coeficient de clusteritzaciσ de cada node i mitjana de tota la xarxa durant tot el temps +DynamicDegreePanel.header.description=Degree of each node and the average of the network over time. It is the number of links that have a node, and is an indicator of centrality. +DynamicDegreePanel.header.title=Grau dinΰmic +DynamicDegreePanel.directedRadioButton.text=Graf dirigit +DynamicDegreePanel.undirectedRadioButton.text=Graf no dirigit +DynamicDegreePanel.averageOnlyCheckbox.text=Nomιs calcula la mitjana +DynamicClusteringCoefficientPanel.header.description=Clustering coefficient of each node and the average of the network over time. It shows how complete the neighborhood of a node is. It is the ratio of edges between its neighbors by all edges possible. +DynamicClusteringCoefficientPanel.header.title=Coeficient dinΰmic de clusteritzaciσ +DynamicClusteringCoefficientPanel.directedRadioButton.text=Graf dirigit +DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text=Nomιs calcula la mitjana +DynamicClusteringCoefficientPanel.undirectedRadioButton.text=Graf no dirigit +DynamicNbNodesPanel.header.description=Nombre de nodes a la xarxa al llarg del temps +DynamicNbNodesPanel.header.title=Recompte de nodes dinΰmic +DynamicNbEdgesPanel.header.description=Nombre d'arestes a la xarxa al llarg del temps +DynamicNbEdgesPanel.header.title=Recompte d'arestes dinΰmic diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_cs.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_cs.properties index 65d5bf24e0..6b42055be4 100644 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_cs.properties +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_cs.properties @@ -1,51 +1,23 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-17 06\:59+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -DynamicDegreeUI.name=Stupe\u0148 - -DynamicNbNodesUI.name=P\u010d.uzl\u016f - -DynamicNbEdgesUI.name=P\u010d. hran - -DynamicClusteringCoefficientUI.name=Koeficient shlukov\u00e1n\u00ed - -DynamicDegreeUI.shortDescription=Stupe\u0148 ka\u017ed\u00e9ho uzlu a pr\u016fm\u011br s\u00edt\u011b v pr\u016fb\u011bhu \u010dasu. - -DynamicNbNodesUI.shortDescription=Po\u010det uzl\u016f v s\u00edti v pr\u016fb\u011bhu \u010dasu. - -DynamicNbEdgesUI.shortDescription=Po\u010det hran v s\u00edti v pr\u016fb\u011bhu \u010dasu. - -DynamicClusteringCoefficientUI.shortDescription=Koeficient shlukov\u00e1n\u00ed ka\u017ed\u00e9ho uzlu a pr\u016fm\u011br s\u00edt\u011b v pr\u016fb\u011bhu \u010dasu. - -DynamicDegreePanel.header.description=Stupe\u0148 ka\u017ed\u00e9ho uzlu a pr\u016fm\u011br s\u00edt\u011b v pr\u016fb\u011bhu \u010dasu. Je to po\u010det propojen\u00ed, kter\u00e9 uzel m\u00e1 a je to indik\u00e1tor centr\u00e1lnosti. - -DynamicDegreePanel.header.title=Dynamick\u00fd stupe\u0148 - -DynamicDegreePanel.directedRadioButton.text=\u0158\u00edzen\u00fd graf - -DynamicDegreePanel.undirectedRadioButton.text=Ne\u0159\u00edzen\u00fd graf - -DynamicDegreePanel.averageOnlyCheckbox.text=Vypo\u010d\u00edtat pouze pr\u016fm\u011br - -DynamicClusteringCoefficientPanel.header.description=Koeficient shlukov\u00e1n\u00ed ka\u017ed\u00e9ho uzlu a pr\u016fm\u011br s\u00edt\u011b v pr\u016fb\u011bhu \u010dasu. Ukazuje jak moc je okol\u00ed uzle dokon\u010den\u00e9. Je to pom\u011br hran mezi sv\u00fdmi sousedy a v\u0161emi mo\u017en\u00fdmi hranami. - -DynamicClusteringCoefficientPanel.header.title=Dynamick\u00fd koeficient shlukov\u00e1n\u00ed - -DynamicClusteringCoefficientPanel.directedRadioButton.text=\u0158\u00edzen\u00fd graf - -DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text=Vypo\u010d\u00edtat pouze pr\u016fm\u011br - -DynamicClusteringCoefficientPanel.undirectedRadioButton.text=Ne\u0159\u00edzen\u00fd graf - -DynamicNbNodesPanel.header.description=Po\u010det uzl\u016f v s\u00edti v pr\u016fb\u011bhu \u010dasu. - -DynamicNbNodesPanel.header.title=Dynamick\u00fd po\u010det uzl\u016f - -DynamicNbEdgesPanel.header.description=Po\u010det hran v s\u00edti v pr\u016fb\u011bhu \u010dasu. - -DynamicNbEdgesPanel.header.title=Dynamick\u00fd po\u010det hran +DynamicDegreeUI.name=Stupe\u0148 +DynamicNbNodesUI.name=P\u010d.uzl\u016f +DynamicNbEdgesUI.name=P\u010d. hran +DynamicClusteringCoefficientUI.name=Koeficient shlukovαnν +DynamicDegreeUI.shortDescription=Stupe\u0148 ka\u017edιho uzlu a pr\u016fm\u011br sνt\u011b v pr\u016fb\u011bhu \u010dasu. +DynamicNbNodesUI.shortDescription=Po\u010det uzl\u016f v sνti v pr\u016fb\u011bhu \u010dasu. +DynamicNbEdgesUI.shortDescription=Po\u010det hran v sνti v pr\u016fb\u011bhu \u010dasu. +DynamicClusteringCoefficientUI.shortDescription=Koeficient shlukovαnν ka\u017edιho uzlu a pr\u016fm\u011br sνt\u011b v pr\u016fb\u011bhu \u010dasu. + +DynamicDegreePanel.header.description=Stupe\u0148 ka\u017edιho uzlu a pr\u016fm\u011br sνt\u011b v pr\u016fb\u011bhu \u010dasu. Je to po\u010det propojenν, kterι uzel mα a je to indikαtor centrαlnosti. +DynamicDegreePanel.header.title=Dynamickύ stupe\u0148 +DynamicDegreePanel.directedRadioButton.text=\u0158νzenύ graf +DynamicDegreePanel.undirectedRadioButton.text=Ne\u0159νzenύ graf +DynamicDegreePanel.averageOnlyCheckbox.text=Vypo\u010dνtat pouze pr\u016fm\u011br +DynamicClusteringCoefficientPanel.header.description=Koeficient shlukovαnν ka\u017edιho uzlu a pr\u016fm\u011br sνt\u011b v pr\u016fb\u011bhu \u010dasu. Ukazuje jak moc je okolν uzle dokon\u010denι. Je to pom\u011br hran mezi svύmi sousedy a v\u0161emi mo\u017enύmi hranami. +DynamicClusteringCoefficientPanel.header.title=Dynamickύ koeficient shlukovαnν +DynamicClusteringCoefficientPanel.directedRadioButton.text=\u0158νzenύ graf +DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text=Vypo\u010dνtat pouze pr\u016fm\u011br +DynamicClusteringCoefficientPanel.undirectedRadioButton.text=Ne\u0159νzenύ graf +DynamicNbNodesPanel.header.description=Po\u010det uzl\u016f v sνti v pr\u016fb\u011bhu \u010dasu. +DynamicNbNodesPanel.header.title=Dynamickύ po\u010det uzl\u016f +DynamicNbEdgesPanel.header.description=Po\u010det hran v sνti v pr\u016fb\u011bhu \u010dasu. +DynamicNbEdgesPanel.header.title=Dynamickύ po\u010det hran diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_de.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_de.properties new file mode 100644 index 0000000000..edfd56ec60 --- /dev/null +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_de.properties @@ -0,0 +1,23 @@ +DynamicDegreeUI.name=Grad +DynamicNbNodesUI.name=# Knoten +DynamicNbEdgesUI.name=# Kanten +DynamicClusteringCoefficientUI.name=Clusterkoeffizient +DynamicDegreeUI.shortDescription=Grad eines jeden Knoten und Mittel im Netzwerk όber die Zeit hinweg. +DynamicNbNodesUI.shortDescription=Anzahl Knoten im Netzwerk όber die Zeit hinweg. +DynamicNbEdgesUI.shortDescription=Anzahl Kanten im Netzwerk όber die Zeit hinweg. +DynamicClusteringCoefficientUI.shortDescription=Clusteringkoeffizient eines jeden Knoten und Mittel im Netzwerk όber die Zeit hinweg. + +DynamicDegreePanel.header.description=Grad eines jeden Knoten und Mittel im Netzwerk όber die Zeit hinweg. Gibt die Anzahl Kanten eines Knoten an und ist ein Maί der Zentralitδt. +DynamicDegreePanel.header.title=Dynamischer Grad +DynamicDegreePanel.directedRadioButton.text=Gerichteter Graph +DynamicDegreePanel.undirectedRadioButton.text=Ungerichteter Graph +DynamicDegreePanel.averageOnlyCheckbox.text=Berechne nur Durchschnitt +DynamicClusteringCoefficientPanel.header.description=Clusteringkoeffizient eines jeden Knoten und Mittel im Netzwerk όber die Zeit hinweg. Gibt an, wie vollstδndig die Nachbarschaft eines Knotens ist. Drόckt das Verhδltnis vorhandener Kanten zu allen Nachbarn zu allen mφglichen Kanten an. +DynamicClusteringCoefficientPanel.header.title=Dynamischer Clusteringkoeffizient +DynamicClusteringCoefficientPanel.directedRadioButton.text=Gerichteter Graph +DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text=Berechne nur Durchschnitt +DynamicClusteringCoefficientPanel.undirectedRadioButton.text=Ungerichteter Graph +DynamicNbNodesPanel.header.description=Anzahl Knoten im Netzwerk όber die Zeit hinweg. +DynamicNbNodesPanel.header.title=Dynamische Knotenanzahl +DynamicNbEdgesPanel.header.description=Anzahl Kanten im Netzwerk όber die Zeit hinweg. +DynamicNbEdgesPanel.header.title=Dynamische Kantenanzahl diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_es.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_es.properties index d5cb689533..59316a1f5f 100644 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_es.properties +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_es.properties @@ -1,51 +1,23 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011-2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:34+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -DynamicDegreeUI.name=Grado - -DynamicNbNodesUI.name=\# de Nodos - -DynamicNbEdgesUI.name=\# de Aristas - -DynamicClusteringCoefficientUI.name=Coeficiente de clustering - -DynamicDegreeUI.shortDescription=Grado de cada nodo y el promedio de la red a lo largo del tiempo. - -DynamicNbNodesUI.shortDescription=N\u00famero de nodos en la red a lo largo del tiempo. - -DynamicNbEdgesUI.shortDescription=N\u00famero de aristas en la red a lo largo del tiempo. - -DynamicClusteringCoefficientUI.shortDescription=Coeficiente de clustering de cada nodo y promedio de la red a lo largo del tiempo. - -DynamicDegreePanel.header.description=Grado de cada nodo y valor medio de la red a lo largo del tiempo. Es el n\u00famero de enlaces que tiene un nodo, e indica centralidad. - -DynamicDegreePanel.header.title=Grado din\u00e1mico - -DynamicDegreePanel.directedRadioButton.text=Grafo dirigido - -DynamicDegreePanel.undirectedRadioButton.text=Grafo no dirigido - -DynamicDegreePanel.averageOnlyCheckbox.text=Calcular s\u00f3lamente el valor medio - -DynamicClusteringCoefficientPanel.header.description=Coeficiente de clustering de cada nodo y valor medio de la red a lo largo del tiempo. Muestra c\u00f3mo de completa es la vecindad de un nodo. Es el ratio de aristas entre sus vecinos entre todas las aristas posibles. - -DynamicClusteringCoefficientPanel.header.title=Coeficiente de clustering din\u00e1mico - -DynamicClusteringCoefficientPanel.directedRadioButton.text=Grafo dirigido - -DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text=Calcular s\u00f3lamente el valor medio - -DynamicClusteringCoefficientPanel.undirectedRadioButton.text=Grafo no dirigido - -DynamicNbNodesPanel.header.description=N\u00famero de nodos en la red a lo largo del tiempo. - -DynamicNbNodesPanel.header.title=Cantidad de nodos din\u00e1mica - -DynamicNbEdgesPanel.header.description=N\u00famero de aristas en la red a lo largo del tiempo. - -DynamicNbEdgesPanel.header.title=Cantidad de aristas din\u00e1mica +DynamicDegreeUI.name=Grado +DynamicNbNodesUI.name=# de Nodos +DynamicNbEdgesUI.name=# de Aristas +DynamicClusteringCoefficientUI.name=Coeficiente de clustering +DynamicDegreeUI.shortDescription=Grado de cada nodo y el promedio de la red a lo largo del tiempo. +DynamicNbNodesUI.shortDescription=Nϊmero de nodos en la red a lo largo del tiempo. +DynamicNbEdgesUI.shortDescription=Nϊmero de aristas en la red a lo largo del tiempo. +DynamicClusteringCoefficientUI.shortDescription=Coeficiente de clustering de cada nodo y promedio de la red a lo largo del tiempo. + +DynamicDegreePanel.header.description=Grado de cada nodo y valor medio de la red a lo largo del tiempo. Es el nϊmero de enlaces que tiene un nodo, e indica centralidad. +DynamicDegreePanel.header.title=Grado dinαmico +DynamicDegreePanel.directedRadioButton.text=Grafo dirigido +DynamicDegreePanel.undirectedRadioButton.text=Grafo no dirigido +DynamicDegreePanel.averageOnlyCheckbox.text=Calcular sσlamente el valor medio +DynamicClusteringCoefficientPanel.header.description=Coeficiente de clustering de cada nodo y valor medio de la red a lo largo del tiempo. Muestra cσmo de completa es la vecindad de un nodo. Es el ratio de aristas entre sus vecinos entre todas las aristas posibles. +DynamicClusteringCoefficientPanel.header.title=Coeficiente de clustering dinαmico +DynamicClusteringCoefficientPanel.directedRadioButton.text=Grafo dirigido +DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text=Calcular sσlamente el valor medio +DynamicClusteringCoefficientPanel.undirectedRadioButton.text=Grafo no dirigido +DynamicNbNodesPanel.header.description=Nϊmero de nodos en la red a lo largo del tiempo. +DynamicNbNodesPanel.header.title=Cantidad de nodos dinαmica +DynamicNbEdgesPanel.header.description=Nϊmero de aristas en la red a lo largo del tiempo. +DynamicNbEdgesPanel.header.title=Cantidad de aristas dinαmica diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_fr.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_fr.properties index 75ec029af1..aef64afce0 100644 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_fr.properties +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_fr.properties @@ -1,51 +1,23 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:17+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -DynamicDegreeUI.name=Degr\u00e9 - -DynamicNbNodesUI.name=\# Noeuds - -DynamicNbEdgesUI.name=\# Liens - -DynamicClusteringCoefficientUI.name=Coefficient de clustering - -!DynamicDegreeUI.shortDescription= - -!DynamicNbNodesUI.shortDescription= - -!DynamicNbEdgesUI.shortDescription= - -!DynamicClusteringCoefficientUI.shortDescription= - -DynamicDegreePanel.header.description=Le degr\u00e9 de chaque noeud et la moyenne du r\u00e9seau au cours du temps. Le degr\u00e9 est le nombre de liens que poss\u00e8de un noeud. C'est un indicateur de centralit\u00e9. - -DynamicDegreePanel.header.title=Degr\u00e9 dynamique - -DynamicDegreePanel.directedRadioButton.text=Graphe orient\u00e9 - -DynamicDegreePanel.undirectedRadioButton.text=Graphe non orient\u00e9 - -DynamicDegreePanel.averageOnlyCheckbox.text=Calculer la moyenne uniquement - -DynamicClusteringCoefficientPanel.header.description=Coefficient de clustering de chaque noeud et la moyenne du r\u00e9seau au cours du temps. Il montre \u00e0 quel point le voisinage d'un noeud est complet. C'est le ratio des liens entre ses voisins sur tous les liens possibles. - -DynamicClusteringCoefficientPanel.header.title=Coefficient de clustering dynamique - -DynamicClusteringCoefficientPanel.directedRadioButton.text=Graphe orient\u00e9 - -DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text=Calculer la moyenne uniquement - -DynamicClusteringCoefficientPanel.undirectedRadioButton.text=Graphe non orient\u00e9 - -DynamicNbNodesPanel.header.description=Nombre de noeuds dans le r\u00e9seau au cours du temps. - -DynamicNbNodesPanel.header.title=Compte les noeuds dynamiqument - -DynamicNbEdgesPanel.header.description=Nombre de liens dans le r\u00e9seau au cours du temps. - -DynamicNbEdgesPanel.header.title=Compte les liens dynamiqument +DynamicDegreeUI.name=Degrι +DynamicNbNodesUI.name=# Noeuds +DynamicNbEdgesUI.name=# Liens +DynamicClusteringCoefficientUI.name=Coefficient de clustering +DynamicDegreeUI.shortDescription=Degrι des noeuds et la moyenne totale au cours du temps. +DynamicNbNodesUI.shortDescription=Nombre de noeuds dans le rιseau au cours du temps. +DynamicNbEdgesUI.shortDescription=Nombre de liens dans le rιseau au cours du temps. +DynamicClusteringCoefficientUI.shortDescription=Coefficient de partitionnement des n\u0153uds et sa moyenne au cours du temps. + +DynamicDegreePanel.header.description=Le degrι de chaque noeud et la moyenne du rιseau au cours du temps. Le degrι est le nombre de liens que possθde un noeud. C'est un indicateur de centralitι. +DynamicDegreePanel.header.title=Degrι dynamique +DynamicDegreePanel.directedRadioButton.text=Graphe orientι +DynamicDegreePanel.undirectedRadioButton.text=Graphe non orientι +DynamicDegreePanel.averageOnlyCheckbox.text=Calculer la moyenne uniquement +DynamicClusteringCoefficientPanel.header.description=Coefficient de clustering de chaque noeud et la moyenne du rιseau au cours du temps. Il montre ΰ quel point le voisinage d'un noeud est complet. C'est le ratio des liens entre ses voisins sur tous les liens possibles. +DynamicClusteringCoefficientPanel.header.title=Coefficient de clustering dynamique +DynamicClusteringCoefficientPanel.directedRadioButton.text=Graphe orientι +DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text=Calculer la moyenne uniquement +DynamicClusteringCoefficientPanel.undirectedRadioButton.text=Graphe non orientι +DynamicNbNodesPanel.header.description=Nombre de noeuds dans le rιseau au cours du temps. +DynamicNbNodesPanel.header.title=Compte les noeuds dynamiqument +DynamicNbEdgesPanel.header.description=Nombre de liens dans le rιseau au cours du temps. +DynamicNbEdgesPanel.header.title=Compte les liens dynamiqument diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_he.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_he.properties new file mode 100644 index 0000000000..8b3752fcfe --- /dev/null +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_he.properties @@ -0,0 +1,22 @@ +DynamicDegreeUI.name=\u05d3\u05e8\u05d2\u05d4 +DynamicNbNodesUI.name=# Nodes +DynamicNbEdgesUI.name=# Edges +DynamicClusteringCoefficientUI.name=Clustering Coefficient +DynamicDegreeUI.shortDescription=Degree of each node and the average of the network over time. +DynamicNbNodesUI.shortDescription=Number of nodes in the network over time. +DynamicNbEdgesUI.shortDescription=Number of edges in the network over time. +DynamicClusteringCoefficientUI.shortDescription=Clustering coefficient of each node and the average of the network over time. +DynamicDegreePanel.header.description=Degree of each node and the average of the network over time. It is the number of links that have a node, and is an indicator of centrality. +DynamicDegreePanel.header.title=Dynamic Degree +DynamicDegreePanel.directedRadioButton.text=Directed graph +DynamicDegreePanel.undirectedRadioButton.text=Undirected graph +DynamicDegreePanel.averageOnlyCheckbox.text=Compute the average only +DynamicClusteringCoefficientPanel.header.description=Clustering coefficient of each node and the average of the network over time. It shows how complete the neighborhood of a node is. It is the ratio of edges between its neighbors by all edges possible. +DynamicClusteringCoefficientPanel.header.title=Dynamic Clustering Coefficient +DynamicClusteringCoefficientPanel.directedRadioButton.text=Directed graph +DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text=Compute the average only +DynamicClusteringCoefficientPanel.undirectedRadioButton.text=Undirected graph +DynamicNbNodesPanel.header.description=Number of nodes in the network over time. +DynamicNbNodesPanel.header.title=Dynamic Count Nodes +DynamicNbEdgesPanel.header.description=Number of edges in the network over time. +DynamicNbEdgesPanel.header.title=Dynamic Count Edges diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_hu.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_hu.properties new file mode 100644 index 0000000000..6a49b5c9f2 --- /dev/null +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_hu.properties @@ -0,0 +1,24 @@ + + +DynamicDegreePanel.averageOnlyCheckbox.text=Csak az \u00E1tlagot sz\u00E1m\u00EDtsa ki +DynamicClusteringCoefficientUI.shortDescription=Az egyes csom\u00F3pontok klaszterez\u00E9si egy\u00FCtthat\u00F3ja \u00E9s a h\u00E1l\u00F3zat id\u0151beli \u00E1tlaga. +DynamicClusteringCoefficientUI.name=Klaszterez\u00E9si egy\u00FCtthat\u00F3 +DynamicDegreePanel.undirectedRadioButton.text=Ir\u00E1ny\u00EDtatlan gr\u00E1f +DynamicClusteringCoefficientPanel.directedRadioButton.text=Ir\u00E1ny\u00EDtott grafikon +DynamicNbNodesUI.shortDescription=A h\u00E1l\u00F3zat csom\u00F3pontjainak sz\u00E1ma az id\u0151 f\u00FCggv\u00E9ny\u00E9ben. +DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text=Csak az \u00E1tlagot sz\u00E1m\u00EDtsa ki +DynamicClusteringCoefficientPanel.undirectedRadioButton.text=Ir\u00E1ny\u00EDtatlan gr\u00E1f +DynamicNbEdgesPanel.header.description=A h\u00E1l\u00F3zat \u00E9leinek sz\u00E1ma az id\u0151 f\u00FCggv\u00E9ny\u00E9ben. +DynamicNbNodesPanel.header.description=A h\u00E1l\u00F3zat csom\u00F3pontjainak sz\u00E1ma az id\u0151 f\u00FCggv\u00E9ny\u00E9ben. +DynamicNbEdgesPanel.header.title=Dinamikus sz\u00E1ml\u00E1l\u00F3 \u00E9lek +DynamicNbNodesUI.name=# Csom\u00F3pontok +DynamicNbEdgesUI.name=# \u00C9lek +DynamicDegreeUI.shortDescription=Az egyes csom\u00F3pontok foka \u00E9s a h\u00E1l\u00F3zat id\u0151beli \u00E1tlaga. +DynamicClusteringCoefficientPanel.header.description=Az egyes csom\u00F3pontok klaszterez\u00E9si egy\u00FCtthat\u00F3ja \u00E9s a h\u00E1l\u00F3zat id\u0151beli \u00E1tlaga. Megmutatja, hogy egy csom\u00F3pont k\u00F6rnyezete mennyire teljes. Ez a szomsz\u00E9dai k\u00F6z\u00F6tti \u00E9lek ar\u00E1nya az \u00F6sszes lehets\u00E9ges \u00E9lhez k\u00E9pest. +DynamicNbEdgesUI.shortDescription=A h\u00E1l\u00F3zat \u00E9leinek sz\u00E1ma az id\u0151 f\u00FCggv\u00E9ny\u00E9ben. +DynamicDegreeUI.name=Fokozat +DynamicDegreePanel.directedRadioButton.text=Ir\u00E1ny\u00EDtott grafikon +DynamicNbNodesPanel.header.title=Dinamikus sz\u00E1ml\u00E1l\u00F3 csom\u00F3pontok +DynamicClusteringCoefficientPanel.header.title=Dinamikus klaszterez\u00E9si egy\u00FCtthat\u00F3 +DynamicDegreePanel.header.title=Dinamikus fokozat +DynamicDegreePanel.header.description=Az egyes csom\u00F3pontok foka \u00E9s a h\u00E1l\u00F3zat id\u0151beli \u00E1tlaga. Ez a csom\u00F3ponttal rendelkez\u0151 hivatkoz\u00E1sok sz\u00E1ma, \u00E9s a k\u00F6zpontis\u00E1g mutat\u00F3ja. diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_it.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_it.properties new file mode 100644 index 0000000000..428eb6a9f8 --- /dev/null +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_it.properties @@ -0,0 +1,22 @@ +DynamicDegreeUI.name=Grado +DynamicNbNodesUI.name=# Nodes +DynamicNbEdgesUI.name=# Edges +DynamicClusteringCoefficientUI.name=Clustering Coefficient +DynamicDegreeUI.shortDescription=Degree of each node and the average of the network over time. +DynamicNbNodesUI.shortDescription=Number of nodes in the network over time. +DynamicNbEdgesUI.shortDescription=Number of edges in the network over time. +DynamicClusteringCoefficientUI.shortDescription=Clustering coefficient of each node and the average of the network over time. +DynamicDegreePanel.header.description=Degree of each node and the average of the network over time. It is the number of links that have a node, and is an indicator of centrality. +DynamicDegreePanel.header.title=Dynamic Degree +DynamicDegreePanel.directedRadioButton.text=Directed graph +DynamicDegreePanel.undirectedRadioButton.text=Undirected graph +DynamicDegreePanel.averageOnlyCheckbox.text=Compute the average only +DynamicClusteringCoefficientPanel.header.description=Clustering coefficient of each node and the average of the network over time. It shows how complete the neighborhood of a node is. It is the ratio of edges between its neighbors by all edges possible. +DynamicClusteringCoefficientPanel.header.title=Dynamic Clustering Coefficient +DynamicClusteringCoefficientPanel.directedRadioButton.text=Directed graph +DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text=Compute the average only +DynamicClusteringCoefficientPanel.undirectedRadioButton.text=Undirected graph +DynamicNbNodesPanel.header.description=Number of nodes in the network over time. +DynamicNbNodesPanel.header.title=Dynamic Count Nodes +DynamicNbEdgesPanel.header.description=Number of edges in the network over time. +DynamicNbEdgesPanel.header.title=Dynamic Count Edges diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_ja.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_ja.properties index 13b3133152..440d481bee 100644 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_ja.properties +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_ja.properties @@ -1,51 +1,23 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:17+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -DynamicDegreeUI.name=\u6b21\u6570 - -DynamicNbNodesUI.name=\# \u30ce\u30fc\u30c9 - -DynamicNbEdgesUI.name=\# \u8fba - -DynamicClusteringCoefficientUI.name=\u30af\u30e9\u30b9\u30bf\u4fc2\u6570 - -!DynamicDegreeUI.shortDescription= - -!DynamicNbNodesUI.shortDescription= - -!DynamicNbEdgesUI.shortDescription= - -!DynamicClusteringCoefficientUI.shortDescription= - -DynamicDegreePanel.header.description=\u5404\u30ce\u30fc\u30c9\u306e\u6b21\u6570\u3068\u7d4c\u6642\u7684\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u5e73\u5747\u306e\u5ea6\u5408\u3044\u3002\u305d\u308c\u306f\u3001\u30ce\u30fc\u30c9\u3092\u6301\u3064\u30ea\u30f3\u30af\u306e\u6570\u3067\u3042\u308a\u3001\u4e2d\u5fc3\u6027\u306e\u6307\u6a19\u3067\u3059\u3002 - -DynamicDegreePanel.header.title=\u52d5\u7684\u6b21\u6570 - -DynamicDegreePanel.directedRadioButton.text=\u6709\u5411\u30b0\u30e9\u30d5 - -DynamicDegreePanel.undirectedRadioButton.text=\u7121\u5411\u30b0\u30e9\u30d5 - -DynamicDegreePanel.averageOnlyCheckbox.text=\u5e73\u5747\u5024\u306e\u307f\u8a08\u7b97 - -DynamicClusteringCoefficientPanel.header.description=\u5404\u30ce\u30fc\u30c9\u3068\u6642\u7d4c\u6642\u7684\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u5e73\u5747\u306e\u30af\u30e9\u30b9\u30bf\u4fc2\u6570\u3002\u305d\u308c\u306f\u30ce\u30fc\u30c9\u306e\u8fd1\u508d\u304c\u3069\u308c\u3060\u3051\u5b8c\u5168\u3067\u3042\u308b\u3053\u3068\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u305d\u308c\u306f\u8fd1\u508d\u306e\u8fba\u3068\u53ef\u80fd\u306a\u9650\u308a\u5168\u3066\u306e\u8fba\u3068\u306e\u6bd4\u3067\u3059\u3002 - -DynamicClusteringCoefficientPanel.header.title=\u52d5\u7684\u30af\u30e9\u30b9\u30bf\u4fc2\u6570 - -DynamicClusteringCoefficientPanel.directedRadioButton.text=\u6709\u5411\u30b0\u30e9\u30d5 - -DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text=\u5e73\u5747\u5024\u306e\u307f\u8a08\u7b97 - -DynamicClusteringCoefficientPanel.undirectedRadioButton.text=\u7121\u5411\u30b0\u30e9\u30d5 - -DynamicNbNodesPanel.header.description=\u7d4c\u6642\u7684\u306a\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u30ce\u30fc\u30c9\u6570 - -DynamicNbNodesPanel.header.title=\u52d5\u7684\u30ab\u30a6\u30f3\u30c8\u30ce\u30fc\u30c9 - -DynamicNbEdgesPanel.header.description=\u7d4c\u6642\u7684\u306a\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u8fba\u306e\u6570 - -DynamicNbEdgesPanel.header.title=\u52d5\u7684\u30ab\u30a6\u30f3\u30c8\u8fba +DynamicDegreeUI.name=\u6b21\u6570 +DynamicNbNodesUI.name=# \u30ce\u30fc\u30c9 +DynamicNbEdgesUI.name=# \u8fba +DynamicClusteringCoefficientUI.name=\u30af\u30e9\u30b9\u30bf\u4fc2\u6570 +# DynamicDegreeUI.shortDescription=Degree of each node and the average of the network over time. +DynamicNbNodesUI.shortDescription=\u7d4c\u6642\u7684\u306a\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u30ce\u30fc\u30c9\u6570 +DynamicNbEdgesUI.shortDescription=\u7d4c\u6642\u7684\u306a\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u8fba\u306e\u6570 +# DynamicClusteringCoefficientUI.shortDescription=Clustering coefficient of each node and the average of the network over time. + +DynamicDegreePanel.header.description=\u5404\u30ce\u30fc\u30c9\u306e\u6b21\u6570\u3068\u7d4c\u6642\u7684\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u5e73\u5747\u306e\u5ea6\u5408\u3044\u3002\u305d\u308c\u306f\u3001\u30ce\u30fc\u30c9\u3092\u6301\u3064\u30ea\u30f3\u30af\u306e\u6570\u3067\u3042\u308a\u3001\u4e2d\u5fc3\u6027\u306e\u6307\u6a19\u3067\u3059\u3002 +DynamicDegreePanel.header.title=\u52d5\u7684\u6b21\u6570 +DynamicDegreePanel.directedRadioButton.text=\u6709\u5411\u30b0\u30e9\u30d5 +DynamicDegreePanel.undirectedRadioButton.text=\u7121\u5411\u30b0\u30e9\u30d5 +DynamicDegreePanel.averageOnlyCheckbox.text=\u5e73\u5747\u5024\u306e\u307f\u8a08\u7b97 +DynamicClusteringCoefficientPanel.header.description=\u5404\u30ce\u30fc\u30c9\u3068\u6642\u7d4c\u6642\u7684\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u5e73\u5747\u306e\u30af\u30e9\u30b9\u30bf\u4fc2\u6570\u3002\u305d\u308c\u306f\u30ce\u30fc\u30c9\u306e\u8fd1\u508d\u304c\u3069\u308c\u3060\u3051\u5b8c\u5168\u3067\u3042\u308b\u3053\u3068\u3092\u793a\u3057\u3066\u3044\u307e\u3059\u3002\u305d\u308c\u306f\u8fd1\u508d\u306e\u8fba\u3068\u53ef\u80fd\u306a\u9650\u308a\u5168\u3066\u306e\u8fba\u3068\u306e\u6bd4\u3067\u3059\u3002 +DynamicClusteringCoefficientPanel.header.title=\u52d5\u7684\u30af\u30e9\u30b9\u30bf\u4fc2\u6570 +DynamicClusteringCoefficientPanel.directedRadioButton.text=\u6709\u5411\u30b0\u30e9\u30d5 +DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text=\u5e73\u5747\u5024\u306e\u307f\u8a08\u7b97 +DynamicClusteringCoefficientPanel.undirectedRadioButton.text=\u7121\u5411\u30b0\u30e9\u30d5 +DynamicNbNodesPanel.header.description=\u7d4c\u6642\u7684\u306a\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u30ce\u30fc\u30c9\u6570 +DynamicNbNodesPanel.header.title=\u52d5\u7684\u30ab\u30a6\u30f3\u30c8\u30ce\u30fc\u30c9 +DynamicNbEdgesPanel.header.description=\u7d4c\u6642\u7684\u306a\u30cd\u30c3\u30c8\u30ef\u30fc\u30af\u306e\u8fba\u306e\u6570 +DynamicNbEdgesPanel.header.title=\u52d5\u7684\u30ab\u30a6\u30f3\u30c8\u8fba diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_ko.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_ko.properties new file mode 100644 index 0000000000..cd45b44fb9 --- /dev/null +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_ko.properties @@ -0,0 +1,24 @@ + + +DynamicDegreePanel.averageOnlyCheckbox.text=\uD3C9\uADE0\uB9CC \uACC4\uC0B0\uD558\uAE30 +DynamicClusteringCoefficientUI.shortDescription=\uAC01 \uB178\uB4DC\uC758 \uD074\uB7EC\uC2A4\uD130\uB9C1 \uACC4\uC218\uC640 \uC2DC\uAC04\uC5D0 \uB530\uB978 \uB124\uD2B8\uC6CC\uD06C\uC758 \uD074\uB7EC\uC2A4\uD130\uB9C1 \uACC4\uC218 \uD3C9\uADE0. +DynamicClusteringCoefficientUI.name=\uD074\uB7EC\uC2A4\uD130\uB9C1 \uACC4\uC218 +DynamicDegreePanel.undirectedRadioButton.text=\uBE44\uBC29\uD5A5\uC131 \uADF8\uB798\uD504 +DynamicClusteringCoefficientPanel.directedRadioButton.text=\uBC29\uD5A5\uC131 \uADF8\uB798\uD504 +DynamicNbNodesUI.shortDescription=\uC2DC\uAC04\uC5D0 \uB530\uB978 \uB124\uD2B8\uC6CC\uD06C \uB0B4 \uB178\uB4DC \uC218. +DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text=\uD3C9\uADE0\uB9CC \uACC4\uC0B0\uD558\uAE30 +DynamicClusteringCoefficientPanel.undirectedRadioButton.text=\uBE44\uBC29\uD5A5\uC131 \uADF8\uB798\uD504 +DynamicNbEdgesPanel.header.description=\uC2DC\uAC04\uC5D0 \uB530\uB978 \uB124\uD2B8\uC6CC\uD06C \uB0B4 \uC5E3\uC9C0 \uC218. +DynamicNbNodesPanel.header.description=\uC2DC\uAC04\uC5D0 \uB530\uB978 \uB124\uD2B8\uC6CC\uD06C \uB0B4 \uB178\uB4DC \uC218. +DynamicNbEdgesPanel.header.title=\uB3D9\uC801 \uC5E3\uC9C0 \uC218 +DynamicNbNodesUI.name=\uB178\uB4DC \uC218 +DynamicNbEdgesUI.name=\uC5E3\uC9C0 \uC218 +DynamicDegreeUI.shortDescription=\uAC01 \uB178\uB4DC\uC758 \uCC28\uC218\uC640 \uC2DC\uAC04\uC5D0 \uB530\uB978 \uB124\uD2B8\uC6CC\uD06C\uC758 \uD3C9\uADE0 \uCC28\uC218. +DynamicClusteringCoefficientPanel.header.description=\uAC01 \uB178\uB4DC\uC758 \uD074\uB7EC\uC2A4\uD130\uB9C1 \uACC4\uC218\uC640 \uC2DC\uAC04\uC5D0 \uB530\uB978 \uB124\uD2B8\uC6CC\uD06C\uC758 \uD074\uB7EC\uC2A4\uD130\uB9C1 \uACC4\uC218 \uD3C9\uADE0\uC785\uB2C8\uB2E4. \uB178\uB4DC\uC758 \uC774\uC6C3\uC774 \uC5BC\uB9C8\uB098 \uC644\uC804\uD55C\uC9C0 \uBCF4\uC5EC\uC90D\uB2C8\uB2E4. \uAC00\uB2A5\uD55C \uBAA8\uB4E0 \uC5E3\uC9C0\uC5D0 \uC758\uD55C \uC774\uC6C3 \uAC04\uC758 \uC5E3\uC9C0 \uBE44\uC728\uC785\uB2C8\uB2E4. +DynamicNbEdgesUI.shortDescription=\uC2DC\uAC04\uC5D0 \uB530\uB978 \uB124\uD2B8\uC6CC\uD06C \uB0B4 \uC5E3\uC9C0 \uC218. +DynamicDegreeUI.name=\uCC28\uC218(Degree) +DynamicDegreePanel.directedRadioButton.text=\uBC29\uD5A5\uC131 \uADF8\uB798\uD504 +DynamicNbNodesPanel.header.title=\uB3D9\uC801 \uB178\uB4DC \uC218 +DynamicClusteringCoefficientPanel.header.title=\uB3D9\uC801 \uD074\uB7EC\uC2A4\uD130\uB9C1 \uACC4\uC218 +DynamicDegreePanel.header.title=\uB3D9\uC801 \uCC28\uC218 +DynamicDegreePanel.header.description=\uAC01 \uB178\uB4DC\uC758 \uCC28\uC218\uC640 \uC2DC\uAC04\uC5D0 \uB530\uB978 \uB124\uD2B8\uC6CC\uD06C\uC758 \uCC28\uC218 \uD3C9\uADE0. \uD558\uB098\uC758 \uB178\uB4DC\uB97C \uAC00\uC9C0\uBA70 \uC911\uC2EC\uC131\uC758 \uC9C0\uD45C\uC778 \uB9C1\uD06C\uC758 \uC218\uC774\uB2E4. diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_nl.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_nl.properties new file mode 100644 index 0000000000..7882900be3 --- /dev/null +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_nl.properties @@ -0,0 +1,22 @@ +DynamicDegreeUI.name=Degree +DynamicNbNodesUI.name=# Nodes +DynamicNbEdgesUI.name=# Edges +DynamicClusteringCoefficientUI.name=Clustering Coefficient +DynamicDegreeUI.shortDescription=Degree of each node and the average of the network over time. +DynamicNbNodesUI.shortDescription=Number of nodes in the network over time. +DynamicNbEdgesUI.shortDescription=Number of edges in the network over time. +DynamicClusteringCoefficientUI.shortDescription=Clustering coefficient of each node and the average of the network over time. +DynamicDegreePanel.header.description=Degree of each node and the average of the network over time. It is the number of links that have a node, and is an indicator of centrality. +DynamicDegreePanel.header.title=Dynamic Degree +DynamicDegreePanel.directedRadioButton.text=Gerichte graaf +DynamicDegreePanel.undirectedRadioButton.text=Ongerichte graaf +DynamicDegreePanel.averageOnlyCheckbox.text=Compute the average only +DynamicClusteringCoefficientPanel.header.description=Clustering coefficient of each node and the average of the network over time. It shows how complete the neighborhood of a node is. It is the ratio of edges between its neighbors by all edges possible. +DynamicClusteringCoefficientPanel.header.title=Dynamic Clustering Coefficient +DynamicClusteringCoefficientPanel.directedRadioButton.text=Gerichte graaf +DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text=Compute the average only +DynamicClusteringCoefficientPanel.undirectedRadioButton.text=Ongerichte graaf +DynamicNbNodesPanel.header.description=Number of nodes in the network over time. +DynamicNbNodesPanel.header.title=Dynamic Count Nodes +DynamicNbEdgesPanel.header.description=Number of edges in the network over time. +DynamicNbEdgesPanel.header.title=Dynamic Count Edges diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_pt_BR.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_pt_BR.properties index 58de16ba29..a162471f11 100644 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_pt_BR.properties +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_pt_BR.properties @@ -1,51 +1,23 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio Faria Jr. , 2011-2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-18 11\:24+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -DynamicDegreeUI.name=Grau - -DynamicNbNodesUI.name=N\u00famero de n\u00f3s - -DynamicNbEdgesUI.name=N\u00famero de arestas - -DynamicClusteringCoefficientUI.name=Coeficiente de clustering - -DynamicDegreeUI.shortDescription=Grau de cada n\u00f3 e m\u00e9dia da rede ao longo do tempo. - -DynamicNbNodesUI.shortDescription=N\u00famero de n\u00f3s na rede ao longo do tempo. - -DynamicNbEdgesUI.shortDescription=N\u00famero de arestas da rede ao longo do tempo. - -DynamicClusteringCoefficientUI.shortDescription=Coeficiente de agrupamento de cada n\u00f3 e m\u00e9dia da rede ao longo do tempo. - -DynamicDegreePanel.header.description=Grau de cada n\u00f3 e da m\u00e9dia da rede ao longo do tempo. Esta medida \u00e9 o n\u00famero de links que um n\u00f3 possui e \u00e9 um indicador de centralidade. - -DynamicDegreePanel.header.title=Grau din\u00e2mico - -DynamicDegreePanel.directedRadioButton.text=Grafo dirigido - -DynamicDegreePanel.undirectedRadioButton.text=Grafo n\u00e3o dirigido - -DynamicDegreePanel.averageOnlyCheckbox.text=Calcular apenas a m\u00e9dia - -DynamicClusteringCoefficientPanel.header.description=Coeficiente de clustering de cada n\u00f3 e da m\u00e9dia da rede ao longo do tempo. Ele mostra qu\u00e3o completa \u00e9 a vizinhan\u00e7a de um n\u00f3. \u00c9 calculada pela divis\u00e3o entre o n\u00famero de arestas da vizinhan\u00e7a e o n\u00famero de arestas poss\u00edveis. - -DynamicClusteringCoefficientPanel.header.title=Coeficiente din\u00e2mico de clustering - -DynamicClusteringCoefficientPanel.directedRadioButton.text=Grafo direcionado - -DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text=Calcular apenas a m\u00e9dia - -DynamicClusteringCoefficientPanel.undirectedRadioButton.text=Grafo n\u00e3o direcionado - -DynamicNbNodesPanel.header.description=N\u00famero de n\u00f3s na rede ao longo do tempo. - -DynamicNbNodesPanel.header.title=Contagem din\u00e2mica de n\u00f3s - -DynamicNbEdgesPanel.header.description=N\u00famero de arestas na rede ao longo do tempo. - -DynamicNbEdgesPanel.header.title=Contagem din\u00e2mica de arestas +DynamicDegreeUI.name=Grau +DynamicNbNodesUI.name=Nϊmero de nσs +DynamicNbEdgesUI.name=Nϊmero de arestas +DynamicClusteringCoefficientUI.name=Coeficiente de clustering +DynamicDegreeUI.shortDescription=Grau de cada nσ e mιdia da rede ao longo do tempo. +DynamicNbNodesUI.shortDescription=Nϊmero de nσs na rede ao longo do tempo. +DynamicNbEdgesUI.shortDescription=Nϊmero de arestas da rede ao longo do tempo. +DynamicClusteringCoefficientUI.shortDescription=Coeficiente de agrupamento de cada nσ e mιdia da rede ao longo do tempo. + +DynamicDegreePanel.header.description=Grau de cada nσ e da mιdia da rede ao longo do tempo. Esta medida ι o nϊmero de links que um nσ possui e ι um indicador de centralidade. +DynamicDegreePanel.header.title=Grau dinβmico +DynamicDegreePanel.directedRadioButton.text=Grafo dirigido +DynamicDegreePanel.undirectedRadioButton.text=Grafo nγo dirigido +DynamicDegreePanel.averageOnlyCheckbox.text=Calcular apenas a mιdia +DynamicClusteringCoefficientPanel.header.description=Coeficiente de clustering de cada nσ e da mιdia da rede ao longo do tempo. Ele mostra quγo completa ι a vizinhanηa de um nσ. Ι calculada pela divisγo entre o nϊmero de arestas da vizinhanηa e o nϊmero de arestas possνveis. +DynamicClusteringCoefficientPanel.header.title=Coeficiente dinβmico de clustering +DynamicClusteringCoefficientPanel.directedRadioButton.text=Grafo direcionado +DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text=Calcular apenas a mιdia +DynamicClusteringCoefficientPanel.undirectedRadioButton.text=Grafo nγo direcionado +DynamicNbNodesPanel.header.description=Nϊmero de nσs na rede ao longo do tempo. +DynamicNbNodesPanel.header.title=Contagem dinβmica de nσs +DynamicNbEdgesPanel.header.description=Nϊmero de arestas na rede ao longo do tempo. +DynamicNbEdgesPanel.header.title=Contagem dinβmica de arestas diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_ro.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_ro.properties new file mode 100644 index 0000000000..fd783b1e76 --- /dev/null +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_ro.properties @@ -0,0 +1,24 @@ + + +DynamicNbEdgesUI.name=# Muchii +DynamicDegreeUI.name=Grad +DynamicClusteringCoefficientUI.name=Coeficient de clusterizare +DynamicDegreeUI.shortDescription=Gradul fiec\u0103rui nod \u0219i media re\u021Belei \u00EEn timp. +DynamicDegreePanel.header.description=Gradul fiec\u0103rui nod \u0219i media re\u021Belei \u00EEn timp. Reprezint\u0103 num\u0103rul de leg\u0103turi pe care le are un nod \u0219i este un indicator al centralit\u0103\u021Bii. +DynamicDegreePanel.header.title=Grad dinamic +DynamicDegreePanel.directedRadioButton.text=Graf orientat +DynamicDegreePanel.undirectedRadioButton.text=Graf neorientat +DynamicDegreePanel.averageOnlyCheckbox.text=Calculeaz\u0103 doar media +DynamicClusteringCoefficientPanel.header.description=Coeficientul de clusterizare al fiec\u0103rui nod \u0219i media re\u021Belei \u00EEn timp. Arat\u0103 c\u00E2t de complet\u0103 este vecin\u0103tatea unui nod. Este raportul dintre muchiile din vecin\u0103tate \u0219i toate muchiile posibile. +DynamicClusteringCoefficientPanel.header.title=Coeficient dinamic de clusterizare +DynamicClusteringCoefficientPanel.directedRadioButton.text=Graf orientat +DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text=Calculeaz\u0103 doar media +DynamicClusteringCoefficientPanel.undirectedRadioButton.text=Graf neorientat +DynamicNbNodesPanel.header.description=Num\u0103rul de noduri din re\u021Bea \u00EEn timp. +DynamicNbNodesPanel.header.title=Num\u0103rare dinamica a nodurilor +DynamicNbEdgesPanel.header.description=Num\u0103rul de muchii din re\u021Bea \u00EEn timp. +DynamicNbEdgesPanel.header.title=Num\u0103rare dinamica a muchiilor +DynamicNbNodesUI.name=# Noduri +DynamicNbNodesUI.shortDescription=Num\u0103rul de noduri din re\u021Bea \u00EEn timp. +DynamicClusteringCoefficientUI.shortDescription=Coeficientul de clusterizare al fiec\u0103rui nod \u0219i media re\u021Belei \u00EEn timp. +DynamicNbEdgesUI.shortDescription=Num\u0103rul de muchii din re\u021Bea \u00EEn timp. diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_ru.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_ru.properties index 1ed712f41e..53f157333e 100644 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_ru.properties +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_ru.properties @@ -1,51 +1,23 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:17+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -DynamicDegreeUI.name=\u041c\u043e\u0449\u043d\u043e\u0441\u0442\u044c - -DynamicNbNodesUI.name=\# \u0423\u0437\u043b\u043e\u0432 - -DynamicNbEdgesUI.name=\# \u0420\u0451\u0431\u0435\u0440 - -DynamicClusteringCoefficientUI.name=\u041a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 - -!DynamicDegreeUI.shortDescription= - -!DynamicNbNodesUI.shortDescription= - -!DynamicNbEdgesUI.shortDescription= - -!DynamicClusteringCoefficientUI.shortDescription= - -DynamicDegreePanel.header.description=\u041c\u043e\u0449\u043d\u043e\u0441\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0437\u043b\u0430 \u0438 \u0441\u0440\u0435\u0434\u043d\u044f\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c \u043f\u043e \u0433\u0440\u0430\u0444\u0443 (\u0437\u0430 \u0432\u0441\u0451 \u0432\u0440\u0435\u043c\u044f). \u0427\u0438\u0441\u043b\u043e \u0441\u0432\u044f\u0437\u0435\u0439 \u0443\u0437\u043b\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u0438. - -DynamicDegreePanel.header.title=\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c - -DynamicDegreePanel.directedRadioButton.text=\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 - -DynamicDegreePanel.undirectedRadioButton.text=\u041d\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 - -DynamicDegreePanel.averageOnlyCheckbox.text=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 - -DynamicClusteringCoefficientPanel.header.description=\u041a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0437\u043b\u0430 \u0438 \u0435\u0433\u043e \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u0433\u0440\u0430\u0444\u0443 \u0437\u0430 \u0432\u0441\u0451 \u0432\u0440\u0435\u043c\u044f. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043b\u043e\u0442\u043d\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u043a\u0440\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u044c \u0443\u0437\u043b\u0430. \u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0447\u0438\u0441\u043b\u0430 \u0440\u0435\u0431\u0451\u0440, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0432 \u043e\u043a\u0440\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043a \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u043c\u0443 \u0447\u0438\u0441\u043b\u0443 \u0440\u0435\u0431\u0451\u0440. - -DynamicClusteringCoefficientPanel.header.title=\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 - -DynamicClusteringCoefficientPanel.directedRadioButton.text=\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 - -DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 - -DynamicClusteringCoefficientPanel.undirectedRadioButton.text=\u041d\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 - -DynamicNbNodesPanel.header.description=\u0427\u0438\u0441\u043b\u043e \u0443\u0437\u043b\u043e\u0432 \u0432 \u0433\u0440\u0430\u0444\u0435 - -DynamicNbNodesPanel.header.title=\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0443\u0437\u043b\u043e\u0432 - -DynamicNbEdgesPanel.header.description=\u0427\u0438\u0441\u043b\u043e \u0440\u0435\u0431\u0451\u0440 \u0432 \u0433\u0440\u0430\u0444\u0435 - -DynamicNbEdgesPanel.header.title=\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0440\u0435\u0431\u0451\u0440 +DynamicDegreeUI.name=\u041c\u043e\u0449\u043d\u043e\u0441\u0442\u044c +DynamicNbNodesUI.name=# \u0423\u0437\u043b\u043e\u0432 +DynamicNbEdgesUI.name=# \u0420\u0451\u0431\u0435\u0440 +DynamicClusteringCoefficientUI.name=\u041a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 +# DynamicDegreeUI.shortDescription=Degree of each node and the average of the network over time. +DynamicNbNodesUI.shortDescription=\u0427\u0438\u0441\u043b\u043e \u0443\u0437\u043b\u043e\u0432 \u0432 \u0433\u0440\u0430\u0444\u0435 +DynamicNbEdgesUI.shortDescription=\u0427\u0438\u0441\u043b\u043e \u0440\u0435\u0431\u0451\u0440 \u0432 \u0433\u0440\u0430\u0444\u0435 +# DynamicClusteringCoefficientUI.shortDescription=Clustering coefficient of each node and the average of the network over time. + +DynamicDegreePanel.header.description=\u041c\u043e\u0449\u043d\u043e\u0441\u0442\u044c \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0437\u043b\u0430 \u0438 \u0441\u0440\u0435\u0434\u043d\u044f\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c \u043f\u043e \u0433\u0440\u0430\u0444\u0443 (\u0437\u0430 \u0432\u0441\u0451 \u0432\u0440\u0435\u043c\u044f). \u0427\u0438\u0441\u043b\u043e \u0441\u0432\u044f\u0437\u0435\u0439 \u0443\u0437\u043b\u0430 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u043d\u0434\u0438\u043a\u0430\u0442\u043e\u0440\u043e\u043c \u0441\u0432\u044f\u0437\u043d\u043e\u0441\u0442\u0438. +DynamicDegreePanel.header.title=\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043c\u043e\u0449\u043d\u043e\u0441\u0442\u044c +DynamicDegreePanel.directedRadioButton.text=\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 +DynamicDegreePanel.undirectedRadioButton.text=\u041d\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 +DynamicDegreePanel.averageOnlyCheckbox.text=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 +DynamicClusteringCoefficientPanel.header.description=\u041a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0443\u0437\u043b\u0430 \u0438 \u0435\u0433\u043e \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0432\u0441\u0435\u043c\u0443 \u0433\u0440\u0430\u0444\u0443 \u0437\u0430 \u0432\u0441\u0451 \u0432\u0440\u0435\u043c\u044f. \u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442, \u043d\u0430\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043b\u043e\u0442\u043d\u043e\u0439 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043e\u043a\u0440\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u044c \u0443\u0437\u043b\u0430. \u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043a\u0430\u043a \u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0435 \u0447\u0438\u0441\u043b\u0430 \u0440\u0435\u0431\u0451\u0440, \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0432 \u043e\u043a\u0440\u0435\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043a \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u043c\u0443 \u0447\u0438\u0441\u043b\u0443 \u0440\u0435\u0431\u0451\u0440. +DynamicClusteringCoefficientPanel.header.title=\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0439 \u043a\u043e\u044d\u0444\u0444\u0438\u0446\u0438\u0435\u043d\u0442 +DynamicClusteringCoefficientPanel.directedRadioButton.text=\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 +DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text=\u0420\u0430\u0441\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 +DynamicClusteringCoefficientPanel.undirectedRadioButton.text=\u041d\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0439 \u0433\u0440\u0430\u0444 +DynamicNbNodesPanel.header.description=\u0427\u0438\u0441\u043b\u043e \u0443\u0437\u043b\u043e\u0432 \u0432 \u0433\u0440\u0430\u0444\u0435 +DynamicNbNodesPanel.header.title=\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0443\u0437\u043b\u043e\u0432 +DynamicNbEdgesPanel.header.description=\u0427\u0438\u0441\u043b\u043e \u0440\u0435\u0431\u0451\u0440 \u0432 \u0433\u0440\u0430\u0444\u0435 +DynamicNbEdgesPanel.header.title=\u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0435 \u0447\u0438\u0441\u043b\u043e \u0440\u0435\u0431\u0451\u0440 diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_th.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_tr.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_tr.properties new file mode 100644 index 0000000000..5bcb4601fd --- /dev/null +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_tr.properties @@ -0,0 +1,22 @@ +DynamicDegreeUI.name=Derece +DynamicNbNodesUI.name=# Nodes +DynamicNbEdgesUI.name=# Edges +DynamicClusteringCoefficientUI.name=Clustering Coefficient +DynamicDegreeUI.shortDescription=Degree of each node and the average of the network over time. +DynamicNbNodesUI.shortDescription=Number of nodes in the network over time. +DynamicNbEdgesUI.shortDescription=Number of edges in the network over time. +DynamicClusteringCoefficientUI.shortDescription=Clustering coefficient of each node and the average of the network over time. +DynamicDegreePanel.header.description=Degree of each node and the average of the network over time. It is the number of links that have a node, and is an indicator of centrality. +DynamicDegreePanel.header.title=Dynamic Degree +DynamicDegreePanel.directedRadioButton.text=Directed graph +DynamicDegreePanel.undirectedRadioButton.text=Undirected graph +DynamicDegreePanel.averageOnlyCheckbox.text=Compute the average only +DynamicClusteringCoefficientPanel.header.description=Clustering coefficient of each node and the average of the network over time. It shows how complete the neighborhood of a node is. It is the ratio of edges between its neighbors by all edges possible. +DynamicClusteringCoefficientPanel.header.title=Dynamic Clustering Coefficient +DynamicClusteringCoefficientPanel.directedRadioButton.text=Directed graph +DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text=Compute the average only +DynamicClusteringCoefficientPanel.undirectedRadioButton.text=Undirected graph +DynamicNbNodesPanel.header.description=Number of nodes in the network over time. +DynamicNbNodesPanel.header.title=Dynamic Count Nodes +DynamicNbEdgesPanel.header.description=Number of edges in the network over time. +DynamicNbEdgesPanel.header.title=Dynamic Count Edges diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_uk.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_uk.properties new file mode 100644 index 0000000000..d60267509b --- /dev/null +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_uk.properties @@ -0,0 +1,22 @@ +DynamicClusteringCoefficientUI.name=\u041A\u043E\u0435\u0444\u0456\u0446\u0456\u0454\u043D\u0442 \u043A\u043B\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0456\u0457 +DynamicClusteringCoefficientPanel.header.title=\u041A\u043E\u0435\u0444\u0456\u0446\u0456\u0454\u043D\u0442 \u0434\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u043E\u0457 \u043A\u043B\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0456\u0457 +DynamicDegreePanel.header.description=\u0421\u0442\u0443\u043F\u0456\u043D\u044C \u043A\u043E\u0436\u043D\u043E\u0433\u043E \u0432\u0443\u0437\u043B\u0430 \u0442\u0430 \u0441\u0435\u0440\u0435\u0434\u043D\u0454 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u043C\u0435\u0440\u0435\u0436\u0456 \u0437\u0430 \u0447\u0430\u0441. \u0426\u0435 \u043A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u043F\u043E\u0441\u0438\u043B\u0430\u043D\u044C, \u044F\u043A\u0456 \u043C\u0430\u044E\u0442\u044C \u0432\u0443\u0437\u043E\u043B, \u0456 \u0454 \u043F\u043E\u043A\u0430\u0437\u043D\u0438\u043A\u043E\u043C \u0446\u0435\u043D\u0442\u0440\u0430\u043B\u044C\u043D\u043E\u0441\u0442\u0456. +DynamicNbEdgesUI.shortDescription=\u041A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u043A\u0440\u0430\u0457\u0432 \u0443 \u043C\u0435\u0440\u0435\u0436\u0456 \u0437\u0430 \u0447\u0430\u0441. +DynamicClusteringCoefficientPanel.directedRadioButton.text=\u041E\u0440\u0456\u0454\u043D\u0442\u043E\u0432\u0430\u043D\u0438\u0439 \u0433\u0440\u0430\u0444 +DynamicDegreeUI.name=\u0421\u0442\u0443\u043F\u0456\u043D\u044C +DynamicNbNodesUI.name=# \u0412\u0443\u0437\u043B\u0438 +DynamicNbEdgesUI.name=# \u041A\u0440\u0430\u0457 +DynamicDegreeUI.shortDescription=\u0421\u0442\u0443\u043F\u0456\u043D\u044C \u043A\u043E\u0436\u043D\u043E\u0433\u043E \u0432\u0443\u0437\u043B\u0430 \u0442\u0430 \u0441\u0435\u0440\u0435\u0434\u043D\u0454 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u043C\u0435\u0440\u0435\u0436\u0456 \u0437\u0430 \u0447\u0430\u0441. +DynamicNbNodesUI.shortDescription=\u041A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u0432\u0443\u0437\u043B\u0456\u0432 \u0443 \u043C\u0435\u0440\u0435\u0436\u0456 \u0437\u0430 \u0447\u0430\u0441. +DynamicClusteringCoefficientUI.shortDescription=\u041A\u043E\u0435\u0444\u0456\u0446\u0456\u0454\u043D\u0442 \u043A\u043B\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0456\u0457 \u043A\u043E\u0436\u043D\u043E\u0433\u043E \u0432\u0443\u0437\u043B\u0430 \u0442\u0430 \u0441\u0435\u0440\u0435\u0434\u043D\u0454 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u043C\u0435\u0440\u0435\u0436\u0456 \u0437\u0430 \u0447\u0430\u0441. +DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text=\u041E\u0431\u0447\u0438\u0441\u043B\u0456\u0442\u044C \u043B\u0438\u0448\u0435 \u0441\u0435\u0440\u0435\u0434\u043D\u0454 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F +DynamicClusteringCoefficientPanel.undirectedRadioButton.text=\u041D\u0435\u043E\u0440\u0456\u0454\u043D\u0442\u043E\u0432\u0430\u043D\u0438\u0439 \u0433\u0440\u0430\u0444 +DynamicNbNodesPanel.header.description=\u041A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u0432\u0443\u0437\u043B\u0456\u0432 \u0443 \u043C\u0435\u0440\u0435\u0436\u0456 \u0437\u0430 \u0447\u0430\u0441. +DynamicNbNodesPanel.header.title=\u0412\u0443\u0437\u043B\u0438 \u0434\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u043E\u0433\u043E \u043F\u0456\u0434\u0440\u0430\u0445\u0443\u043D\u043A\u0443 +DynamicNbEdgesPanel.header.description=\u041A\u0456\u043B\u044C\u043A\u0456\u0441\u0442\u044C \u043A\u0440\u0430\u0457\u0432 \u0443 \u043C\u0435\u0440\u0435\u0436\u0456 \u0437\u0430 \u0447\u0430\u0441. +DynamicNbEdgesPanel.header.title=\u0414\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0438\u0439 \u043F\u0456\u0434\u0440\u0430\u0445\u0443\u043D\u043E\u043A \u0440\u0435\u0431\u0435\u0440 +DynamicDegreePanel.header.title=\u0414\u0438\u043D\u0430\u043C\u0456\u0447\u043D\u0438\u0439 \u0441\u0442\u0443\u043F\u0456\u043D\u044C +DynamicDegreePanel.directedRadioButton.text=\u041E\u0440\u0456\u0454\u043D\u0442\u043E\u0432\u0430\u043D\u0438\u0439 \u0433\u0440\u0430\u0444 +DynamicDegreePanel.undirectedRadioButton.text=\u041D\u0435\u043E\u0440\u0456\u0454\u043D\u0442\u043E\u0432\u0430\u043D\u0438\u0439 \u0433\u0440\u0430\u0444 +DynamicDegreePanel.averageOnlyCheckbox.text=\u041E\u0431\u0447\u0438\u0441\u043B\u0456\u0442\u044C \u043B\u0438\u0448\u0435 \u0441\u0435\u0440\u0435\u0434\u043D\u0454 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F +DynamicClusteringCoefficientPanel.header.description=\u041A\u043E\u0435\u0444\u0456\u0446\u0456\u0454\u043D\u0442 \u043A\u043B\u0430\u0441\u0442\u0435\u0440\u0438\u0437\u0430\u0446\u0456\u0457 \u043A\u043E\u0436\u043D\u043E\u0433\u043E \u0432\u0443\u0437\u043B\u0430 \u0442\u0430 \u0441\u0435\u0440\u0435\u0434\u043D\u0454 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F \u043C\u0435\u0440\u0435\u0436\u0456 \u0437\u0430 \u0447\u0430\u0441. \u0412\u0456\u043D \u043F\u043E\u043A\u0430\u0437\u0443\u0454, \u043D\u0430\u0441\u043A\u0456\u043B\u044C\u043A\u0438 \u043F\u043E\u0432\u043D\u0438\u043C \u0454 \u043E\u0442\u043E\u0447\u0435\u043D\u043D\u044F \u0432\u0443\u0437\u043B\u0430. \u0426\u0435 \u0432\u0456\u0434\u043D\u043E\u0448\u0435\u043D\u043D\u044F \u0440\u0435\u0431\u0435\u0440 \u043C\u0456\u0436 \u0439\u043E\u0433\u043E \u0441\u0443\u0441\u0456\u0434\u0430\u043C\u0438 \u0437\u0430 \u0432\u0441\u0456\u043C\u0430 \u043C\u043E\u0436\u043B\u0438\u0432\u0438\u043C\u0438 \u0440\u0435\u0431\u0440\u0430\u043C\u0438. diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_zh_CN.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_zh_CN.properties index dd78039d68..c770b76e35 100644 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_zh_CN.properties +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_zh_CN.properties @@ -1,50 +1,23 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:17+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -DynamicDegreeUI.name=\u5ea6 - -DynamicNbNodesUI.name=\uff03\u8282\u70b9 - -DynamicNbEdgesUI.name=\uff03\u8fb9 - -DynamicClusteringCoefficientUI.name=\u805a\u7c7b\u7cfb\u6570 - -!DynamicDegreeUI.shortDescription= - -!DynamicNbNodesUI.shortDescription= - -!DynamicNbEdgesUI.shortDescription= - -!DynamicClusteringCoefficientUI.shortDescription= - -DynamicDegreePanel.header.description=\u6bcf\u4e2a\u8282\u70b9\u7684\u5ea6\u548c\u968f\u65f6\u95f4\u53d8\u5316\u7684\u7f51\u7edc\u5e73\u5747\u5ea6\u3002\u5b83\u662f\u4e0e\u4e00\u4e2a\u8282\u70b9\u7684\u94fe\u63a5\u6570\uff0c\u662f\u4e00\u4e2a\u523b\u753b\u8282\u70b9\u5728\u7f51\u7edc\u4e2d\u4e2d\u5fc3\u5730\u4f4d\u7684\u6307\u6807\u3002 - -DynamicDegreePanel.header.title=\u52a8\u6001\u5ea6 - -DynamicDegreePanel.directedRadioButton.text=\u6709\u5411\u56fe - -DynamicDegreePanel.undirectedRadioButton.text=\u65e0\u5411\u56fe - -DynamicDegreePanel.averageOnlyCheckbox.text=\u53ea\u8ba1\u7b97\u5e73\u5747\u5ea6 - -DynamicClusteringCoefficientPanel.header.description=\u6bcf\u4e2a\u8282\u70b9\u7684\u805a\u7c7b\u7cfb\u6570\u548c\u5176\u968f\u65f6\u95f4\u53d8\u5316\u7684\u7f51\u7edc\u5e73\u5747\u805a\u7c7b\u7cfb\u6570\u3002\u5b83\u663e\u793a\u4e86\u4e00\u4e2a\u8282\u70b9\u9644\u8fd1\u90bb\u5c45\u7684\u5b8c\u6574\u6027\uff0c\u662f\u5176\u90bb\u5c45\u6240\u6709\u53ef\u80fd\u7684\u8fb9\u7f18\u4e2d\u5b9e\u9645\u90bb\u5c45\u4e4b\u95f4\u8fde\u63a5\u7684\u7684\u6bd4\u4f8b\u3002 - -DynamicClusteringCoefficientPanel.header.title=\u52a8\u6001\u805a\u7c7b\u7cfb\u6570 - -DynamicClusteringCoefficientPanel.directedRadioButton.text=\u6709\u5411\u56fe - -DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text=\u53ea\u8ba1\u7b97\u5e73\u5747\u805a\u7c7b\u7cfb\u6570 - -DynamicClusteringCoefficientPanel.undirectedRadioButton.text=\u65e0\u5411\u56fe - -DynamicNbNodesPanel.header.description=\u968f\u65f6\u95f4\u53d8\u5316\u7f51\u7edc\u8282\u70b9\u6570\u76ee\u3002 - -DynamicNbNodesPanel.header.title=\u52a8\u6001\u8282\u70b9\u6570\u76ee - -DynamicNbEdgesPanel.header.description=\u968f\u65f6\u95f4\u53d8\u5316\u7684\u7f51\u7edc\u8fb9\u6570\u3002 - -DynamicNbEdgesPanel.header.title=\u52a8\u6001\u8fb9\u6570 +DynamicDegreeUI.name=\u5ea6 +DynamicNbNodesUI.name=\uff03\u8282\u70b9 +DynamicNbEdgesUI.name=\uff03\u8fb9 +DynamicClusteringCoefficientUI.name=\u805a\u7c7b\u7cfb\u6570 +DynamicDegreeUI.shortDescription=\u6bcf\u4e2a\u8282\u70b9\u7684\u7a0b\u5ea6\u548c\u7f51\u7edc\u7684\u968f\u65f6\u95f4\u7684\u5e73\u5747\u503c\u3002 +DynamicNbNodesUI.shortDescription=\u968f\u65f6\u95f4\u53d8\u5316\u7f51\u7edc\u8282\u70b9\u6570\u76ee\u3002 +DynamicNbEdgesUI.shortDescription=\u968f\u65f6\u95f4\u53d8\u5316\u7684\u7f51\u7edc\u8fb9\u6570\u3002 +DynamicClusteringCoefficientUI.shortDescription=\u6bcf\u4e2a\u8282\u70b9\u7684\u805a\u7c7b\u7cfb\u6570\u548c\u7f51\u7edc\u968f\u65f6\u95f4\u7684\u5e73\u5747\u503c\u3002 + +DynamicDegreePanel.header.description=\u6bcf\u4e2a\u8282\u70b9\u7684\u5ea6\u548c\u968f\u65f6\u95f4\u53d8\u5316\u7684\u7f51\u7edc\u5e73\u5747\u5ea6\u3002\u5b83\u662f\u4e0e\u4e00\u4e2a\u8282\u70b9\u7684\u94fe\u63a5\u6570\uff0c\u662f\u4e00\u4e2a\u523b\u753b\u8282\u70b9\u5728\u7f51\u7edc\u4e2d\u4e2d\u5fc3\u5730\u4f4d\u7684\u6307\u6807\u3002 +DynamicDegreePanel.header.title=\u52a8\u6001\u5ea6 +DynamicDegreePanel.directedRadioButton.text=\u6709\u5411\u56fe +DynamicDegreePanel.undirectedRadioButton.text=\u65e0\u5411\u56fe +DynamicDegreePanel.averageOnlyCheckbox.text=\u53ea\u8ba1\u7b97\u5e73\u5747\u5ea6 +DynamicClusteringCoefficientPanel.header.description=\u6bcf\u4e2a\u8282\u70b9\u7684\u805a\u7c7b\u7cfb\u6570\u548c\u5176\u968f\u65f6\u95f4\u53d8\u5316\u7684\u7f51\u7edc\u5e73\u5747\u805a\u7c7b\u7cfb\u6570\u3002\u5b83\u663e\u793a\u4e86\u4e00\u4e2a\u8282\u70b9\u9644\u8fd1\u90bb\u5c45\u7684\u5b8c\u6574\u6027\uff0c\u662f\u5176\u90bb\u5c45\u6240\u6709\u53ef\u80fd\u7684\u8fb9\u7f18\u4e2d\u5b9e\u9645\u90bb\u5c45\u4e4b\u95f4\u8fde\u63a5\u7684\u7684\u6bd4\u4f8b\u3002 +DynamicClusteringCoefficientPanel.header.title=\u52a8\u6001\u805a\u7c7b\u7cfb\u6570 +DynamicClusteringCoefficientPanel.directedRadioButton.text=\u6709\u5411\u56fe +DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text=\u53ea\u8ba1\u7b97\u5e73\u5747\u805a\u7c7b\u7cfb\u6570 +DynamicClusteringCoefficientPanel.undirectedRadioButton.text=\u65e0\u5411\u56fe +DynamicNbNodesPanel.header.description=\u968f\u65f6\u95f4\u53d8\u5316\u7f51\u7edc\u8282\u70b9\u6570\u76ee\u3002 +DynamicNbNodesPanel.header.title=\u52a8\u6001\u8282\u70b9\u6570\u76ee +DynamicNbEdgesPanel.header.description=\u968f\u65f6\u95f4\u53d8\u5316\u7684\u7f51\u7edc\u8fb9\u6570\u3002 +DynamicNbEdgesPanel.header.title=\u52a8\u6001\u8fb9\u6570 diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_zh_TW.properties b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_zh_TW.properties new file mode 100644 index 0000000000..2ff1a22787 --- /dev/null +++ b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/Bundle_zh_TW.properties @@ -0,0 +1,22 @@ +DynamicDegreeUI.name=\u5ea6\u4e2d\u5fc3\u6027 +DynamicNbNodesUI.name=# Nodes +DynamicNbEdgesUI.name=# Edges +DynamicClusteringCoefficientUI.name=Clustering Coefficient +DynamicDegreeUI.shortDescription=Degree of each node and the average of the network over time. +DynamicNbNodesUI.shortDescription=Number of nodes in the network over time. +DynamicNbEdgesUI.shortDescription=Number of edges in the network over time. +DynamicClusteringCoefficientUI.shortDescription=Clustering coefficient of each node and the average of the network over time. +DynamicDegreePanel.header.description=Degree of each node and the average of the network over time. It is the number of links that have a node, and is an indicator of centrality. +DynamicDegreePanel.header.title=Dynamic Degree +DynamicDegreePanel.directedRadioButton.text=Directed graph +DynamicDegreePanel.undirectedRadioButton.text=Undirected graph +DynamicDegreePanel.averageOnlyCheckbox.text=Compute the average only +DynamicClusteringCoefficientPanel.header.description=Clustering coefficient of each node and the average of the network over time. It shows how complete the neighborhood of a node is. It is the ratio of edges between its neighbors by all edges possible. +DynamicClusteringCoefficientPanel.header.title=Dynamic Clustering Coefficient +DynamicClusteringCoefficientPanel.directedRadioButton.text=Directed graph +DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text=Compute the average only +DynamicClusteringCoefficientPanel.undirectedRadioButton.text=Undirected graph +DynamicNbNodesPanel.header.description=Number of nodes in the network over time. +DynamicNbNodesPanel.header.title=Dynamic Count Nodes +DynamicNbEdgesPanel.header.description=Number of edges in the network over time. +DynamicNbEdgesPanel.header.title=Dynamic Count Edges diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/cs.po b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/cs.po deleted file mode 100644 index 88a2e18bf1..0000000000 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/cs.po +++ /dev/null @@ -1,85 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-17 06:59+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "DynamicDegreeUI.name" -msgstr "Stupeň" - -msgid "DynamicNbNodesUI.name" -msgstr "Pč.uzlΕ―" - -msgid "DynamicNbEdgesUI.name" -msgstr "Pč. hran" - -msgid "DynamicClusteringCoefficientUI.name" -msgstr "Koeficient shlukovΓ‘nΓ­" - -msgid "DynamicDegreeUI.shortDescription" -msgstr "Stupeň kaΕΎdΓ©ho uzlu a prΕ―mΔ›r sΓ­tΔ› v prΕ―bΔ›hu času." - -msgid "DynamicNbNodesUI.shortDescription" -msgstr "Počet uzlΕ― v sΓ­ti v prΕ―bΔ›hu času." - -msgid "DynamicNbEdgesUI.shortDescription" -msgstr "Počet hran v sΓ­ti v prΕ―bΔ›hu času." - -msgid "DynamicClusteringCoefficientUI.shortDescription" -msgstr "Koeficient shlukovΓ‘nΓ­ kaΕΎdΓ©ho uzlu a prΕ―mΔ›r sΓ­tΔ› v prΕ―bΔ›hu času." - -msgid "DynamicDegreePanel.header.description" -msgstr "Stupeň kaΕΎdΓ©ho uzlu a prΕ―mΔ›r sΓ­tΔ› v prΕ―bΔ›hu času. Je to počet propojenΓ­, kterΓ© uzel mΓ‘ a je to indikΓ‘tor centrΓ‘lnosti." - -msgid "DynamicDegreePanel.header.title" -msgstr "DynamickΓ½ stupeň" - -msgid "DynamicDegreePanel.directedRadioButton.text" -msgstr "ŘízenΓ½ graf" - -msgid "DynamicDegreePanel.undirectedRadioButton.text" -msgstr "NeΕ™Γ­zenΓ½ graf" - -msgid "DynamicDegreePanel.averageOnlyCheckbox.text" -msgstr "Vypočítat pouze prΕ―mΔ›r" - -msgid "DynamicClusteringCoefficientPanel.header.description" -msgstr "Koeficient shlukovΓ‘nΓ­ kaΕΎdΓ©ho uzlu a prΕ―mΔ›r sΓ­tΔ› v prΕ―bΔ›hu času. Ukazuje jak moc je okolΓ­ uzle dokončenΓ©. Je to pomΔ›r hran mezi svΓ½mi sousedy a vΕ‘emi moΕΎnΓ½mi hranami." - -msgid "DynamicClusteringCoefficientPanel.header.title" -msgstr "DynamickΓ½ koeficient shlukovΓ‘nΓ­" - -msgid "DynamicClusteringCoefficientPanel.directedRadioButton.text" -msgstr "ŘízenΓ½ graf" - -msgid "DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text" -msgstr "Vypočítat pouze prΕ―mΔ›r" - -msgid "DynamicClusteringCoefficientPanel.undirectedRadioButton.text" -msgstr "NeΕ™Γ­zenΓ½ graf" - -msgid "DynamicNbNodesPanel.header.description" -msgstr "Počet uzlΕ― v sΓ­ti v prΕ―bΔ›hu času." - -msgid "DynamicNbNodesPanel.header.title" -msgstr "DynamickΓ½ počet uzlΕ―" - -msgid "DynamicNbEdgesPanel.header.description" -msgstr "Počet hran v sΓ­ti v prΕ―bΔ›hu času." - -msgid "DynamicNbEdgesPanel.header.title" -msgstr "DynamickΓ½ počet hran" diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/es.po b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/es.po deleted file mode 100644 index ed353da9d7..0000000000 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/es.po +++ /dev/null @@ -1,85 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011-2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:34+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "DynamicDegreeUI.name" -msgstr "Grado" - -msgid "DynamicNbNodesUI.name" -msgstr "# de Nodos" - -msgid "DynamicNbEdgesUI.name" -msgstr "# de Aristas" - -msgid "DynamicClusteringCoefficientUI.name" -msgstr "Coeficiente de clustering" - -msgid "DynamicDegreeUI.shortDescription" -msgstr "Grado de cada nodo y el promedio de la red a lo largo del tiempo." - -msgid "DynamicNbNodesUI.shortDescription" -msgstr "NΓΊmero de nodos en la red a lo largo del tiempo." - -msgid "DynamicNbEdgesUI.shortDescription" -msgstr "NΓΊmero de aristas en la red a lo largo del tiempo." - -msgid "DynamicClusteringCoefficientUI.shortDescription" -msgstr "Coeficiente de clustering de cada nodo y promedio de la red a lo largo del tiempo." - -msgid "DynamicDegreePanel.header.description" -msgstr "Grado de cada nodo y valor medio de la red a lo largo del tiempo. Es el nΓΊmero de enlaces que tiene un nodo, e indica centralidad." - -msgid "DynamicDegreePanel.header.title" -msgstr "Grado dinΓ‘mico" - -msgid "DynamicDegreePanel.directedRadioButton.text" -msgstr "Grafo dirigido" - -msgid "DynamicDegreePanel.undirectedRadioButton.text" -msgstr "Grafo no dirigido" - -msgid "DynamicDegreePanel.averageOnlyCheckbox.text" -msgstr "Calcular sΓ³lamente el valor medio" - -msgid "DynamicClusteringCoefficientPanel.header.description" -msgstr "Coeficiente de clustering de cada nodo y valor medio de la red a lo largo del tiempo. Muestra cΓ³mo de completa es la vecindad de un nodo. Es el ratio de aristas entre sus vecinos entre todas las aristas posibles." - -msgid "DynamicClusteringCoefficientPanel.header.title" -msgstr "Coeficiente de clustering dinΓ‘mico" - -msgid "DynamicClusteringCoefficientPanel.directedRadioButton.text" -msgstr "Grafo dirigido" - -msgid "DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text" -msgstr "Calcular sΓ³lamente el valor medio" - -msgid "DynamicClusteringCoefficientPanel.undirectedRadioButton.text" -msgstr "Grafo no dirigido" - -msgid "DynamicNbNodesPanel.header.description" -msgstr "NΓΊmero de nodos en la red a lo largo del tiempo." - -msgid "DynamicNbNodesPanel.header.title" -msgstr "Cantidad de nodos dinΓ‘mica" - -msgid "DynamicNbEdgesPanel.header.description" -msgstr "NΓΊmero de aristas en la red a lo largo del tiempo." - -msgid "DynamicNbEdgesPanel.header.title" -msgstr "Cantidad de aristas dinΓ‘mica" diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/fr.po b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/fr.po deleted file mode 100644 index c6888432c1..0000000000 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/fr.po +++ /dev/null @@ -1,85 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:17+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "DynamicDegreeUI.name" -msgstr "DegrΓ©" - -msgid "DynamicNbNodesUI.name" -msgstr "# Noeuds" - -msgid "DynamicNbEdgesUI.name" -msgstr "# Liens" - -msgid "DynamicClusteringCoefficientUI.name" -msgstr "Coefficient de clustering" - -msgid "DynamicDegreeUI.shortDescription" -msgstr "" - -msgid "DynamicNbNodesUI.shortDescription" -msgstr "" - -msgid "DynamicNbEdgesUI.shortDescription" -msgstr "" - -msgid "DynamicClusteringCoefficientUI.shortDescription" -msgstr "" - -msgid "DynamicDegreePanel.header.description" -msgstr "Le degrΓ© de chaque noeud et la moyenne du rΓ©seau au cours du temps. Le degrΓ© est le nombre de liens que possΓ¨de un noeud. C'est un indicateur de centralitΓ©." - -msgid "DynamicDegreePanel.header.title" -msgstr "DegrΓ© dynamique" - -msgid "DynamicDegreePanel.directedRadioButton.text" -msgstr "Graphe orientΓ©" - -msgid "DynamicDegreePanel.undirectedRadioButton.text" -msgstr "Graphe non orientΓ©" - -msgid "DynamicDegreePanel.averageOnlyCheckbox.text" -msgstr "Calculer la moyenne uniquement" - -msgid "DynamicClusteringCoefficientPanel.header.description" -msgstr "Coefficient de clustering de chaque noeud et la moyenne du rΓ©seau au cours du temps. Il montre Γ  quel point le voisinage d'un noeud est complet. C'est le ratio des liens entre ses voisins sur tous les liens possibles." - -msgid "DynamicClusteringCoefficientPanel.header.title" -msgstr "Coefficient de clustering dynamique" - -msgid "DynamicClusteringCoefficientPanel.directedRadioButton.text" -msgstr "Graphe orientΓ©" - -msgid "DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text" -msgstr "Calculer la moyenne uniquement" - -msgid "DynamicClusteringCoefficientPanel.undirectedRadioButton.text" -msgstr "Graphe non orientΓ©" - -msgid "DynamicNbNodesPanel.header.description" -msgstr "Nombre de noeuds dans le rΓ©seau au cours du temps." - -msgid "DynamicNbNodesPanel.header.title" -msgstr "Compte les noeuds dynamiqument" - -msgid "DynamicNbEdgesPanel.header.description" -msgstr "Nombre de liens dans le rΓ©seau au cours du temps." - -msgid "DynamicNbEdgesPanel.header.title" -msgstr "Compte les liens dynamiqument" diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/ja.po b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/ja.po deleted file mode 100644 index 7cafcecc23..0000000000 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/ja.po +++ /dev/null @@ -1,85 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:17+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "DynamicDegreeUI.name" -msgstr "欑数" - -msgid "DynamicNbNodesUI.name" -msgstr "# γƒŽγƒΌγƒ‰" - -msgid "DynamicNbEdgesUI.name" -msgstr "# θΎΊ" - -msgid "DynamicClusteringCoefficientUI.name" -msgstr "クラスタ係数" - -msgid "DynamicDegreeUI.shortDescription" -msgstr "" - -msgid "DynamicNbNodesUI.shortDescription" -msgstr "" - -msgid "DynamicNbEdgesUI.shortDescription" -msgstr "" - -msgid "DynamicClusteringCoefficientUI.shortDescription" -msgstr "" - -msgid "DynamicDegreePanel.header.description" -msgstr "ε„γƒŽγƒΌγƒ‰γζ¬‘ζ•°γ¨η΅Œζ™‚ηš„γƒγƒƒγƒˆγƒ―γƒΌγ‚―γεΉ³ε‡γεΊ¦εˆγ„γ€‚γγ‚Œγ―γ€γƒŽγƒΌγƒ‰γ‚’ζŒγ€γƒͺンクγζ•°γ§γ‚γ‚Šγ€δΈ­εΏƒζ€§γζŒ‡ζ¨™γ§γ™γ€‚" - -msgid "DynamicDegreePanel.header.title" -msgstr "ε‹•ηš„ζ¬‘ζ•°" - -msgid "DynamicDegreePanel.directedRadioButton.text" -msgstr "ζœ‰ε‘γ‚°γƒ©γƒ•" - -msgid "DynamicDegreePanel.undirectedRadioButton.text" -msgstr "焑向グラフ" - -msgid "DynamicDegreePanel.averageOnlyCheckbox.text" -msgstr "平均倀γγΏθ¨ˆη—" - -msgid "DynamicClusteringCoefficientPanel.header.description" -msgstr "ε„γƒŽγƒΌγƒ‰γ¨ζ™‚η΅Œζ™‚ηš„γƒγƒƒγƒˆγƒ―γƒΌγ‚―γεΉ³ε‡γγ‚―γƒ©γ‚Ήγ‚ΏδΏ‚ζ•°γ€‚γγ‚Œγ―γƒŽγƒΌγƒ‰γθΏ‘ε‚γŒγ©γ‚Œγ γ‘εŒε…¨γ§γ‚γ‚‹γ“γ¨γ‚’η€Ίγ—γ¦γ„γΎγ™γ€‚γγ‚Œγ―近傍γθΎΊγ¨ε―能γͺι™γ‚Šε…¨γ¦γθΎΊγ¨γζ―”です。" - -msgid "DynamicClusteringCoefficientPanel.header.title" -msgstr "ε‹•ηš„γ‚―γƒ©γ‚Ήγ‚ΏδΏ‚ζ•°" - -msgid "DynamicClusteringCoefficientPanel.directedRadioButton.text" -msgstr "ζœ‰ε‘γ‚°γƒ©γƒ•" - -msgid "DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text" -msgstr "平均倀γγΏθ¨ˆη—" - -msgid "DynamicClusteringCoefficientPanel.undirectedRadioButton.text" -msgstr "焑向グラフ" - -msgid "DynamicNbNodesPanel.header.description" -msgstr "η΅Œζ™‚ηš„γͺγƒγƒƒγƒˆγƒ―γƒΌγ‚―γγƒŽγƒΌγƒ‰ζ•°" - -msgid "DynamicNbNodesPanel.header.title" -msgstr "ε‹•ηš„γ‚«γ‚¦γƒ³γƒˆγƒŽγƒΌγƒ‰" - -msgid "DynamicNbEdgesPanel.header.description" -msgstr "η΅Œζ™‚ηš„γͺγƒγƒƒγƒˆγƒ―γƒΌγ‚―γθΎΊγζ•°" - -msgid "DynamicNbEdgesPanel.header.title" -msgstr "ε‹•ηš„γ‚«γ‚¦γƒ³γƒˆθΎΊ" diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/org-gephi-ui-statistics-plugin-dynamic.pot b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/org-gephi-ui-statistics-plugin-dynamic.pot deleted file mode 100644 index 0bc95b9449..0000000000 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/org-gephi-ui-statistics-plugin-dynamic.pot +++ /dev/null @@ -1,88 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "DynamicDegreeUI.name" -msgstr "Degree" - -msgid "DynamicNbNodesUI.name" -msgstr "# Nodes" - -msgid "DynamicNbEdgesUI.name" -msgstr "# Edges" - -msgid "DynamicClusteringCoefficientUI.name" -msgstr "Clustering Coefficient" - -msgid "DynamicDegreeUI.shortDescription" -msgstr "Degree of each node and the average of the network over time." - -msgid "DynamicNbNodesUI.shortDescription" -msgstr "Number of nodes in the network over time." - -msgid "DynamicNbEdgesUI.shortDescription" -msgstr "Number of edges in the network over time." - -msgid "DynamicClusteringCoefficientUI.shortDescription" -msgstr "" -"Clustering coefficient of each node and the average of the network over time." - -msgid "DynamicDegreePanel.header.description" -msgstr "" -"Degree of each node and the average of the network over time. It is the " -"number of links that have a node, and is an indicator of centrality." - -msgid "DynamicDegreePanel.header.title" -msgstr "Dynamic Degree" - -msgid "DynamicDegreePanel.directedRadioButton.text" -msgstr "Directed graph" - -msgid "DynamicDegreePanel.undirectedRadioButton.text" -msgstr "Undirected graph" - -msgid "DynamicDegreePanel.averageOnlyCheckbox.text" -msgstr "Compute the average only" - -msgid "DynamicClusteringCoefficientPanel.header.description" -msgstr "" -"Clustering coefficient of each node and the average of the network over " -"time. It shows how complete the neighborhood of a node is. It is the ratio " -"of edges between its neighbors by all edges possible." - -msgid "DynamicClusteringCoefficientPanel.header.title" -msgstr "Dynamic Clustering Coefficient" - -msgid "DynamicClusteringCoefficientPanel.directedRadioButton.text" -msgstr "Directed graph" - -msgid "DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text" -msgstr "Compute the average only" - -msgid "DynamicClusteringCoefficientPanel.undirectedRadioButton.text" -msgstr "Undirected graph" - -msgid "DynamicNbNodesPanel.header.description" -msgstr "Number of nodes in the network over time." - -msgid "DynamicNbNodesPanel.header.title" -msgstr "Dynamic Count Nodes" - -msgid "DynamicNbEdgesPanel.header.description" -msgstr "Number of edges in the network over time." - -msgid "DynamicNbEdgesPanel.header.title" -msgstr "Dynamic Count Edges" diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/pt_BR.po b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/pt_BR.po deleted file mode 100644 index 128306fb6a..0000000000 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/pt_BR.po +++ /dev/null @@ -1,85 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio Faria Jr. , 2011-2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-18 11:24+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "DynamicDegreeUI.name" -msgstr "Grau" - -msgid "DynamicNbNodesUI.name" -msgstr "NΓΊmero de nΓ³s" - -msgid "DynamicNbEdgesUI.name" -msgstr "NΓΊmero de arestas" - -msgid "DynamicClusteringCoefficientUI.name" -msgstr "Coeficiente de clustering" - -msgid "DynamicDegreeUI.shortDescription" -msgstr "Grau de cada nΓ³ e mΓ©dia da rede ao longo do tempo." - -msgid "DynamicNbNodesUI.shortDescription" -msgstr "NΓΊmero de nΓ³s na rede ao longo do tempo." - -msgid "DynamicNbEdgesUI.shortDescription" -msgstr "NΓΊmero de arestas da rede ao longo do tempo." - -msgid "DynamicClusteringCoefficientUI.shortDescription" -msgstr "Coeficiente de agrupamento de cada nΓ³ e mΓ©dia da rede ao longo do tempo." - -msgid "DynamicDegreePanel.header.description" -msgstr "Grau de cada nΓ³ e da mΓ©dia da rede ao longo do tempo. Esta medida Γ© o nΓΊmero de links que um nΓ³ possui e Γ© um indicador de centralidade." - -msgid "DynamicDegreePanel.header.title" -msgstr "Grau dinΓ’mico" - -msgid "DynamicDegreePanel.directedRadioButton.text" -msgstr "Grafo dirigido" - -msgid "DynamicDegreePanel.undirectedRadioButton.text" -msgstr "Grafo nΓ£o dirigido" - -msgid "DynamicDegreePanel.averageOnlyCheckbox.text" -msgstr "Calcular apenas a mΓ©dia" - -msgid "DynamicClusteringCoefficientPanel.header.description" -msgstr "Coeficiente de clustering de cada nΓ³ e da mΓ©dia da rede ao longo do tempo. Ele mostra quΓ£o completa Γ© a vizinhanΓ§a de um nΓ³. Γ‰ calculada pela divisΓ£o entre o nΓΊmero de arestas da vizinhanΓ§a e o nΓΊmero de arestas possΓ­veis." - -msgid "DynamicClusteringCoefficientPanel.header.title" -msgstr "Coeficiente dinΓ’mico de clustering" - -msgid "DynamicClusteringCoefficientPanel.directedRadioButton.text" -msgstr "Grafo direcionado" - -msgid "DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text" -msgstr "Calcular apenas a mΓ©dia" - -msgid "DynamicClusteringCoefficientPanel.undirectedRadioButton.text" -msgstr "Grafo nΓ£o direcionado" - -msgid "DynamicNbNodesPanel.header.description" -msgstr "NΓΊmero de nΓ³s na rede ao longo do tempo." - -msgid "DynamicNbNodesPanel.header.title" -msgstr "Contagem dinΓ’mica de nΓ³s" - -msgid "DynamicNbEdgesPanel.header.description" -msgstr "NΓΊmero de arestas na rede ao longo do tempo." - -msgid "DynamicNbEdgesPanel.header.title" -msgstr "Contagem dinΓ’mica de arestas" diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/ru.po b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/ru.po deleted file mode 100644 index 377f011d0f..0000000000 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/ru.po +++ /dev/null @@ -1,85 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:17+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "DynamicDegreeUI.name" -msgstr "ΠœΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ" - -msgid "DynamicNbNodesUI.name" -msgstr "# Π£Π·Π»ΠΎΠ²" - -msgid "DynamicNbEdgesUI.name" -msgstr "# Π Ρ‘Π±Π΅Ρ€" - -msgid "DynamicClusteringCoefficientUI.name" -msgstr "ΠšΠ»Π°ΡΡ‚Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ коэффициСнт" - -msgid "DynamicDegreeUI.shortDescription" -msgstr "" - -msgid "DynamicNbNodesUI.shortDescription" -msgstr "" - -msgid "DynamicNbEdgesUI.shortDescription" -msgstr "" - -msgid "DynamicClusteringCoefficientUI.shortDescription" -msgstr "" - -msgid "DynamicDegreePanel.header.description" -msgstr "ΠœΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° ΠΈ срСдняя ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ ΠΏΠΎ Π³Ρ€Π°Ρ„Ρƒ (Π·Π° всё врСмя). Число связСй ΡƒΠ·Π»Π° являСтся ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ связности." - -msgid "DynamicDegreePanel.header.title" -msgstr "ДинамичСская ΠΌΠΎΡ‰Π½ΠΎΡΡ‚ΡŒ" - -msgid "DynamicDegreePanel.directedRadioButton.text" -msgstr "НаправлСнный Π³Ρ€Π°Ρ„" - -msgid "DynamicDegreePanel.undirectedRadioButton.text" -msgstr "НСнаправлСнный Π³Ρ€Π°Ρ„" - -msgid "DynamicDegreePanel.averageOnlyCheckbox.text" -msgstr "Π Π°ΡΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅" - -msgid "DynamicClusteringCoefficientPanel.header.description" -msgstr "ΠšΠ»Π°ΡΡ‚Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ коэффициСнт ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° ΠΈ Π΅Π³ΠΎ срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ всСму Π³Ρ€Π°Ρ„Ρƒ Π·Π° всё врСмя. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, насколько ΠΏΠ»ΠΎΡ‚Π½ΠΎΠΉ являСтся ΠΎΠΊΡ€Π΅ΡΡ‚Π½ΠΎΡΡ‚ΡŒ ΡƒΠ·Π»Π°. РассчитываСтся ΠΊΠ°ΠΊ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ числа Ρ€Π΅Π±Ρ‘Ρ€, ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… Π² окрСстности, ΠΊ максимально Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΠΌΡƒ числу Ρ€Π΅Π±Ρ‘Ρ€." - -msgid "DynamicClusteringCoefficientPanel.header.title" -msgstr "ДинамичСский кластСризационный коэффициСнт" - -msgid "DynamicClusteringCoefficientPanel.directedRadioButton.text" -msgstr "НаправлСнный Π³Ρ€Π°Ρ„" - -msgid "DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text" -msgstr "Π Π°ΡΡΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ срСднСС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅" - -msgid "DynamicClusteringCoefficientPanel.undirectedRadioButton.text" -msgstr "НСнаправлСнный Π³Ρ€Π°Ρ„" - -msgid "DynamicNbNodesPanel.header.description" -msgstr "Число ΡƒΠ·Π»ΠΎΠ² Π² Π³Ρ€Π°Ρ„Π΅" - -msgid "DynamicNbNodesPanel.header.title" -msgstr "ДинамичСскоС число ΡƒΠ·Π»ΠΎΠ²" - -msgid "DynamicNbEdgesPanel.header.description" -msgstr "Число Ρ€Π΅Π±Ρ‘Ρ€ Π² Π³Ρ€Π°Ρ„Π΅" - -msgid "DynamicNbEdgesPanel.header.title" -msgstr "ДинамичСскоС число Ρ€Π΅Π±Ρ‘Ρ€" diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/zh_CN.po b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/zh_CN.po deleted file mode 100644 index 93d72ad772..0000000000 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/dynamic/zh_CN.po +++ /dev/null @@ -1,84 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:17+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "DynamicDegreeUI.name" -msgstr "εΊ¦" - -msgid "DynamicNbNodesUI.name" -msgstr "οΌƒθŠ‚η‚Ή" - -msgid "DynamicNbEdgesUI.name" -msgstr "οΌƒθΎΉ" - -msgid "DynamicClusteringCoefficientUI.name" -msgstr "θšη±»η³»ζ•°" - -msgid "DynamicDegreeUI.shortDescription" -msgstr "" - -msgid "DynamicNbNodesUI.shortDescription" -msgstr "" - -msgid "DynamicNbEdgesUI.shortDescription" -msgstr "" - -msgid "DynamicClusteringCoefficientUI.shortDescription" -msgstr "" - -msgid "DynamicDegreePanel.header.description" -msgstr "每δΈͺθŠ‚η‚Ήηš„εΊ¦ε’Œιšζ—Άι—΄ε˜εŒ–ηš„η½‘η»œεΉ³ε‡εΊ¦γ€‚εƒζ˜―δΈŽδΈ€δΈͺθŠ‚η‚Ήηš„ι“ΎζŽ₯ζ•°οΌŒζ˜―δΈ€δΈͺεˆ»η”»θŠ‚η‚Ήεœ¨η½‘η»œδΈ­δΈ­εΏƒεœ°δ½ηš„ζŒ‡ζ ‡γ€‚" - -msgid "DynamicDegreePanel.header.title" -msgstr "εŠ¨ζ€εΊ¦" - -msgid "DynamicDegreePanel.directedRadioButton.text" -msgstr "ζœ‰ε‘ε›Ύ" - -msgid "DynamicDegreePanel.undirectedRadioButton.text" -msgstr "无向图" - -msgid "DynamicDegreePanel.averageOnlyCheckbox.text" -msgstr "εͺθ‘η—平均度" - -msgid "DynamicClusteringCoefficientPanel.header.description" -msgstr "每δΈͺθŠ‚η‚Ήηš„θšη±»η³»ζ•°ε’Œε…Άιšζ—Άι—΄ε˜εŒ–ηš„η½‘η»œεΉ³ε‡θšη±»η³»ζ•°γ€‚εƒζ˜Ύη€ΊδΊ†δΈ€δΈͺθŠ‚η‚Ήι™„θΏ‘ι‚»ε±…ηš„εŒζ•΄ζ€§οΌŒζ˜―ε…Άι‚»ε±…ζ‰€ζœ‰ε―θƒ½ηš„θΎΉηΌ˜δΈ­εžι™…ι‚»ε±…δΉ‹ι—΄θΏžζŽ₯ηš„ηš„ζ―”δΎ‹γ€‚" - -msgid "DynamicClusteringCoefficientPanel.header.title" -msgstr "εŠ¨ζ€θšη±»η³»ζ•°" - -msgid "DynamicClusteringCoefficientPanel.directedRadioButton.text" -msgstr "ζœ‰ε‘ε›Ύ" - -msgid "DynamicClusteringCoefficientPanel.averageOnlyCheckbox.text" -msgstr "εͺθ‘η—εΉ³ε‡θšη±»η³»ζ•°" - -msgid "DynamicClusteringCoefficientPanel.undirectedRadioButton.text" -msgstr "无向图" - -msgid "DynamicNbNodesPanel.header.description" -msgstr "ιšζ—Άι—΄ε˜εŒ–η½‘η»œθŠ‚η‚Ήζ•°η›γ€‚" - -msgid "DynamicNbNodesPanel.header.title" -msgstr "εŠ¨ζ€θŠ‚η‚Ήζ•°η›" - -msgid "DynamicNbEdgesPanel.header.description" -msgstr "ιšζ—Άι—΄ε˜εŒ–ηš„η½‘η»œθΎΉζ•°γ€‚" - -msgid "DynamicNbEdgesPanel.header.title" -msgstr "εŠ¨ζ€θΎΉζ•°" diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/es.po b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/es.po deleted file mode 100644 index 3c5438d8f6..0000000000 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/es.po +++ /dev/null @@ -1,278 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011-2012. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:33+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "GraphDistancePanel.directedRadioButton.text" -msgstr "Dirigido" - -msgid "GraphDistancePanel.undirectedRadioButton.text" -msgstr "No dirigido" - -msgid "ClusteringCoefficientPanel.jLabel1.text" -msgstr "MΓ©trica de Coeficiente de Clustering" - -msgid "ClusteringCoefficientPanel.directedRadioButton.text" -msgstr "Dirigido" - -msgid "ClusteringCoefficientPanel.undirectedRadioButton.text" -msgstr "No dirigido" - -msgid "DegreeDistributionPanel.directedRadioButton.text" -msgstr "Dirigido" - -msgid "DegreeDistributionPanel.undirectedRadioButton.text" -msgstr "No dirigido" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implementaciones de las interfaces de usuario de las estadΓ­sticas estΓ‘ndar" - -msgid "GraphDensityPanel.directedRadioButton.text" -msgstr "Dirigido" - -msgid "GraphDensityPanel.undirectedRadioButton.text" -msgstr "No dirigido" - -msgid "HitsPanel.labelEpsilon.text" -msgstr "Epsilon:" - -msgid "HitsPanel.directedRadioButton.text" -msgstr "Dirigido" - -msgid "HitsPanel.undirectedRadioButton.text" -msgstr "No dirigido" - -msgid "ModularityPanel.randomizeCheckbox.text" -msgstr "Aleatorio" - -msgid "PageRankPanel.labelP.text" -msgstr "Probabilidad (p):" - -msgid "PageRankPanel.labelE.text" -msgstr "Epsilon:" - -msgid "PageRankPanel.directedRadioButton.text" -msgstr "Dirigido:" - -msgid "PageRankPanel.undirectedRadioButton.text" -msgstr "No dirigido:" - -msgid "GraphDensityPanel.header.title" -msgstr "Densidad" - -msgid "GraphDensityPanel.header.description" -msgstr "Mide cΓ³mo de cerca estΓ‘ el grafo de ser completo. Un grafo completo tiene todas las aristas posibles y una densidad igual a 1." - -msgid "ClusteringCoefficientPanel.header.title" -msgstr "Coeficiente de Clustering" - -msgid "ClusteringCoefficientPanel.header.description" -msgstr "El coeficiente de clustering, junto con el valor promedio del camino mΓ‘s corto, puede indicar un efecto \"small-world\". Indica cΓ³mo los nodos estΓ‘n incrustados entre sus nodos vecinos. El valor medio da una indicaciΓ³n general del clustering en la red." - -msgid "DegreeDistributionPanel.header.title" -msgstr "DistribuciΓ³n de grado" - -msgid "DegreeDistributionPanel.header.description" -msgstr "Mide la distribuciΓ³n de los grados entre todos los nodos de la red." - -msgid "GraphDistancePanel.jXLabel1.text" -msgstr "Mide la frecuencia con la que un nodo aparece en el camino mΓ‘s corto entre nodos de la red." - -msgid "GraphDistancePanel.jXLabel2.text" -msgstr "La distancia media desde un nodo inicial a todos los demΓ‘s nodos de la red." - -msgid "GraphDistancePanel.jXLabel3.text" -msgstr "La distancia desde un nodo a el nodo mΓ‘s alejado de Γ©l en la red." - -msgid "GraphDistancePanel.jLabel1.text" -msgstr "IntermediaciΓ³n:" - -msgid "GraphDistancePanel.jLabel2.text" -msgstr "CercanΓ­a:" - -msgid "GraphDistancePanel.jLabel3.text" -msgstr "Excentricidad:" - -msgid "GraphDistancePanel.header.description" -msgstr "La distancia media de grafo entre todos los pares de nodos. Los nodos conectados tienen distancia 1. El diΓ‘metro es la distancia de grafo mΓ‘s larga entre dos nodos cualquiera de la red (Es decir, cΓ³mo de lejos estΓ‘n los 2 nodos mΓ‘s alejados)." - -msgid "GraphDistancePanel.header.title" -msgstr "Distancia" - -msgid "HitsPanel.header.description" -msgstr "Computa dos valores separados para cada nodo. El primer valor (llamado 'Authority') mide cΓ³mo de valiosa es la informaciΓ³n almacenada en ese nodo. El segundo valor (llamado 'Hub') mide la calidad de los enlaces de ese nodo." - -msgid "HitsPanel.header.title" -msgstr "HITS" - -msgid "HitsPanel.epsilonLabel.text" -msgstr "El criterio de parada, cuanto menor sea este valor, mΓ‘s tiempo tomarΓ‘ la convergencia." - -msgid "PageRankPanel.jXHeader1.description" -msgstr "Clasifica las \"pΓ‘ginas\" de los nodos de acuerdo a la frecuencia con la que un usuario siguiendo enlaces llega a la \"pΓ‘gina\" del nodo de forma no aleatoria." - -msgid "PageRankPanel.jXHeader1.title" -msgstr "PageRank" - -msgid "PageRankPanel.jXLabel1.text" -msgstr "Usado para simular aleatoriamente que el usuario reinicia la navegaciΓ³n web." - -msgid "PageRankPanel.jXLabel2.text" -msgstr "El criterio de parada, cuanto menor sea este valor, mΓ‘s tiempo tomarΓ‘ la convergencia." - -msgid "ModularityPanel.header.title" -msgstr "Modularidad" - -msgid "ModularityPanel.header.description" -msgstr "Algoritmo de detecciΓ³n de comunidades." - -msgid "ConnectedComponentPanel.header.description" -msgstr "Determina el nΓΊmero de componentes conexas en la red" - -msgid "ConnectedComponentPanel.undirectedRadioButton.text" -msgstr "No dirigido" - -msgid "ConnectedComponentPanel.directedRadioButton.text" -msgstr "Dirigido" - -msgid "ConnectedComponentPanel.header.title" -msgstr "Componentes conexas" - -msgid "ConnectedComponentPanel.jLabel1.text" -msgstr "Detecta componentes fuertemente y dΓ©bilmente conectadas" - -msgid "ConnectedComponentPanel.jLabel2.text" -msgstr "Detecta solo componentes dΓ©bilmente conectadas" - -msgid "EigenvectorCentralityPanel.header.description" -msgstr "Una medida de la importancia de un nodo en la red basada en sus conexiones." - -msgid "EigenvectorCentralityPanel.header.title" -msgstr "Centralidad de vector propio" - -msgid "EigenvectorCentralityPanel.iterationsTextField.text" -msgstr "jTextField1" - -msgid "EigenvectorCentralityPanel.labeliterations.text" -msgstr "NΓΊmero de iteraciones:" - -msgid "EigenvectorCentralityPanel.directedButton.text" -msgstr "Dirigido" - -msgid "EigenvectorCentralityPanel.undirectedButton.text" -msgstr "No dirigido" - -msgid "GraphDistancePanel.normalizeButton.text" -msgstr "Normalizar centralidades en el rango [0,1]" - -msgid "ConnectedComponentUI.name" -msgstr "Componentes conexos" - -msgid "ConnectedComponentUI.shortDescription" -msgstr "Determina el nΓΊmero de componentes conexas en la red" - -msgid "ClusteringCoefficientUI.name" -msgstr "Coeficiente medio de clustering" - -msgid "ClusteringCoefficientUI.shortDescription" -msgstr "Calcula el promedio de cΓ³mo los nodos estΓ‘n incrustados en su vecindad." - -msgid "DegreeDistributionUI.name" -msgstr "Ley de potencias de grado" - -msgid "DegreeDistributionUI.shortDescription" -msgstr "Mide la distribuciΓ³n de los grados entre todos los nodos de la red." - -msgid "EigenvectorCentralityUI.name" -msgstr "Centralidad de vector propio" - -msgid "EigenvectorCentralityUI.shortDescription" -msgstr "Una medida de la importancia de un nodo en la red basada en sus conexiones." - -msgid "GraphDensityUI.name" -msgstr "Densidad de grafo" - -msgid "GraphDensityUI.shortDescription" -msgstr "Mide cΓ³mo de cerca estΓ‘ la red de ser completa." - -msgid "DiameterUI.name" -msgstr "DiΓ‘metro de la red" - -msgid "DiameterUI.shortDescription" -msgstr "DiΓ‘metro de la red" - -msgid "HitsUI.name" -msgstr "HITS" - -msgid "HitsUI.shortDescription" -msgstr "Computa dos valores separados para cada nodo: cΓ³mo de valiosa es la informaciΓ³n del nodo y la calidad de los enlaces del nodo." - -msgid "InOutDegreeUI.name" -msgstr "Grado medio" - -msgid "InOutDegreeUI.shortDescription" -msgstr "Grado promedio" - -msgid "ModularityUI.name" -msgstr "Modularidad" - -msgid "ModularityUI.shortDescription" -msgstr "Algoritmo de detecciΓ³n de comunidades." - -msgid "PageRankUI.name" -msgstr "PageRank" - -msgid "PageRankUI.shortDescription" -msgstr "Clasifica las \"pΓ‘ginas\" de los nodos de acuerdo a la frecuencia con la que un usuario siguiendo enlaces llega a la \"pΓ‘gina\" del nodo de forma no aleatoria." - -msgid "PathLengthUI.name" -msgstr "Longitud media de camino" - -msgid "PathLengthUI.shortDescription" -msgstr "Longitud media de camino" - -msgid "WeightedDegreeUI.name" -msgstr "Grado medio con pesos" - -msgid "WeightedDegreeUI.shortDescription" -msgstr "Grado promedio con pesos" - -msgid "PageRankPanel.edgeWeightCheckbox.text" -msgstr "Utilizar peso de aristas" - -msgid "ModularityPanel.useWeightCheckbox.text" -msgstr "Utilizar pesos" - -msgid "ModularityPanel.jLabel1.text" -msgstr "ResoluciΓ³n:" - -msgid "ModularityPanel.resolutionTextField.toolTipText" -msgstr "Introduce una resoluciΓ³n (1.0 es modularidad estΓ‘ndar, menor que 1.0 produce comunidades mΓ‘s pequeΓ±as, mayor mΓ‘s grandes)" - -msgid "ModularityPanel.resolutionTextField.text" -msgstr "1.0" - -msgid "ModularityPanel.labelEdgeWeight.text" -msgstr "Utilizar peso de aristas" - -msgid "ModularityPanel.labelResolution.text" -msgstr "Menor para obtener mΓ‘s comunidades (mΓ‘s pequeΓ±as) y mayor que 1.0 para obtener menos comunidades (mΓ‘s grandes)." - -msgid "ModularityPanel.labelRandomize.text" -msgstr "Produce una mejor descomposiciΓ³n pero aumΓ©nta el tiempo de cΓ³mputo" diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/fr.po b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/fr.po deleted file mode 100644 index 0f407303ff..0000000000 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/fr.po +++ /dev/null @@ -1,280 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -# sebastien clem , 2012. -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:16+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "GraphDistancePanel.directedRadioButton.text" -msgstr "DirigΓ©" - -msgid "GraphDistancePanel.undirectedRadioButton.text" -msgstr "Non dirigΓ©" - -msgid "ClusteringCoefficientPanel.jLabel1.text" -msgstr "MΓ©trique du coefficient de clustering" - -msgid "ClusteringCoefficientPanel.directedRadioButton.text" -msgstr "DirigΓ©" - -msgid "ClusteringCoefficientPanel.undirectedRadioButton.text" -msgstr "Non dirigΓ©" - -msgid "DegreeDistributionPanel.directedRadioButton.text" -msgstr "DirigΓ©" - -msgid "DegreeDistributionPanel.undirectedRadioButton.text" -msgstr "Non dirigΓ©" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplΓ©mentations de l'interface utilisateur des statistiques standards" - -msgid "GraphDensityPanel.directedRadioButton.text" -msgstr "DirigΓ©" - -msgid "GraphDensityPanel.undirectedRadioButton.text" -msgstr "Non dirigΓ©" - -msgid "HitsPanel.labelEpsilon.text" -msgstr "Epsilon :" - -msgid "HitsPanel.directedRadioButton.text" -msgstr "DirigΓ©" - -msgid "HitsPanel.undirectedRadioButton.text" -msgstr "Non dirigΓ©" - -msgid "ModularityPanel.randomizeCheckbox.text" -msgstr "AlΓ©atoire" - -msgid "PageRankPanel.labelP.text" -msgstr "ProbabilitΓ© (p):" - -msgid "PageRankPanel.labelE.text" -msgstr "Epsilon :" - -msgid "PageRankPanel.directedRadioButton.text" -msgstr "DirigΓ©" - -msgid "PageRankPanel.undirectedRadioButton.text" -msgstr "Non dirigΓ©" - -msgid "GraphDensityPanel.header.title" -msgstr "DensitΓ©" - -msgid "GraphDensityPanel.header.description" -msgstr "Mesure Γ  quel point le graphe est prΓͺt d'Γͺtre complet. Un graphe complet a tous les liens possibles et une densitΓ© Γ©gale Γ  1." - -msgid "ClusteringCoefficientPanel.header.title" -msgstr "Coefficient de clustering" - -msgid "ClusteringCoefficientPanel.header.description" -msgstr "Le coefficient de clustering, couplΓ© au plus court chemin moyen, indique la prΓ©sence d'un effet de \"small-world\", soit la maniΓ¨re dont les noeuds sont encastrΓ©s dans leur voisinage. La moyenne donne un indice gΓ©nΓ©ral sur le clustering du rΓ©seau." - -msgid "DegreeDistributionPanel.header.title" -msgstr "Distribution du degrΓ©" - -msgid "DegreeDistributionPanel.header.description" -msgstr "Mesure la distribution du degrΓ© parmi tous les noeud du rΓ©seau." - -msgid "GraphDistancePanel.jXLabel1.text" -msgstr "Mesure la frΓ©quence d'apparition d'un noeud sur les plus court chemins entre les noeuds du rΓ©seau." - -msgid "GraphDistancePanel.jXLabel2.text" -msgstr "La distance moyenne depuis un noeud de dΓ©part vers tous les noeuds du rΓ©seau." - -msgid "GraphDistancePanel.jXLabel3.text" -msgstr "La distance depuis un noeud de dΓ©part vers le noeud le plus loin dans le rΓ©seau." - -msgid "GraphDistancePanel.jLabel1.text" -msgstr "Betweenness Centrality :" - -msgid "GraphDistancePanel.jLabel2.text" -msgstr "Closeness Centrality :" - -msgid "GraphDistancePanel.jLabel3.text" -msgstr "EccentricitΓ© :" - -msgid "GraphDistancePanel.header.description" -msgstr "Distance moyenne entre deux noeuds. Les noeuds connectΓ©s ont une distance de 1. Le diamΓ¨tre est la plus longue distance possible entre deux noeuds du rΓ©seau." - -msgid "GraphDistancePanel.header.title" -msgstr "Distance" - -msgid "HitsPanel.header.description" -msgstr "Calcule deux valeurs distinctes pour chaque noeud. La premiΓ¨re (appelΓ©e AutoritΓ©) mesure la valeur de l'information contenue dans le noeud. La seconde (appelΓ©e Hub) mesure la qualitΓ© des liens du noeud." - -msgid "HitsPanel.header.title" -msgstr "HITS" - -msgid "HitsPanel.epsilonLabel.text" -msgstr "CritΓ¨re d'arrΓͺt : plus cette valeur est petite, plus la convergence est longue." - -msgid "PageRankPanel.jXHeader1.description" -msgstr "Classe les noeuds \"pages\" selon la frΓ©quence Γ  laquelle un utilisateur suivant les liens atteindra le noeud \"page\" de maniΓ¨re non alΓ©atoire." - -msgid "PageRankPanel.jXHeader1.title" -msgstr "PageRank" - -msgid "PageRankPanel.jXLabel1.text" -msgstr "Simule le re-dΓ©marrage alΓ©atoire d'une session de navigation web." - -msgid "PageRankPanel.jXLabel2.text" -msgstr "CritΓ¨re d'arrΓͺt : plus cette valeur est petite, plus la convergence est longue." - -msgid "ModularityPanel.header.title" -msgstr "ModularitΓ©" - -msgid "ModularityPanel.header.description" -msgstr "Algorithme de dΓ©tection de communautΓ©." - -msgid "ConnectedComponentPanel.header.description" -msgstr "DΓ©termine le nombre de composantes connexes dans le rΓ©seau." - -msgid "ConnectedComponentPanel.undirectedRadioButton.text" -msgstr "Non dirigΓ©" - -msgid "ConnectedComponentPanel.directedRadioButton.text" -msgstr "DirigΓ©" - -msgid "ConnectedComponentPanel.header.title" -msgstr "Composantes Connexes" - -msgid "ConnectedComponentPanel.jLabel1.text" -msgstr "(DΓ©tecte les composantes fortement et faiblement connexes)" - -msgid "ConnectedComponentPanel.jLabel2.text" -msgstr "(DΓ©tecte les composantes faiblement connexes uniquement)" - -msgid "EigenvectorCentralityPanel.header.description" -msgstr "Mesure l'importance d'un noeud dans le rΓ©seau selon ses connexions." - -msgid "EigenvectorCentralityPanel.header.title" -msgstr "CentralitΓ© Eigenvector" - -msgid "EigenvectorCentralityPanel.iterationsTextField.text" -msgstr "Nombre d'itΓ©rations" - -msgid "EigenvectorCentralityPanel.labeliterations.text" -msgstr "Nombre d'itΓ©rations :" - -msgid "EigenvectorCentralityPanel.directedButton.text" -msgstr "DirigΓ©" - -msgid "EigenvectorCentralityPanel.undirectedButton.text" -msgstr "Non dirigΓ©" - -msgid "GraphDistancePanel.normalizeButton.text" -msgstr "Normalise entre [0,1]" - -msgid "ConnectedComponentUI.name" -msgstr "Composantes Connexes" - -msgid "ConnectedComponentUI.shortDescription" -msgstr "" - -msgid "ClusteringCoefficientUI.name" -msgstr "Coefficient de Clustering" - -msgid "ClusteringCoefficientUI.shortDescription" -msgstr "" - -msgid "DegreeDistributionUI.name" -msgstr "Loi de Puissance du degrΓ©" - -msgid "DegreeDistributionUI.shortDescription" -msgstr "" - -msgid "EigenvectorCentralityUI.name" -msgstr "CentralitΓ© Eigenvector" - -msgid "EigenvectorCentralityUI.shortDescription" -msgstr "" - -msgid "GraphDensityUI.name" -msgstr "DensitΓ©" - -msgid "GraphDensityUI.shortDescription" -msgstr "" - -msgid "DiameterUI.name" -msgstr "DiamΓ¨tre" - -msgid "DiameterUI.shortDescription" -msgstr "" - -msgid "HitsUI.name" -msgstr "HITS" - -msgid "HitsUI.shortDescription" -msgstr "" - -msgid "InOutDegreeUI.name" -msgstr "DegrΓ©" - -msgid "InOutDegreeUI.shortDescription" -msgstr "" - -msgid "ModularityUI.name" -msgstr "ModularitΓ©" - -msgid "ModularityUI.shortDescription" -msgstr "" - -msgid "PageRankUI.name" -msgstr "PageRank" - -msgid "PageRankUI.shortDescription" -msgstr "" - -msgid "PathLengthUI.name" -msgstr "Plus courts chemins" - -msgid "PathLengthUI.shortDescription" -msgstr "" - -msgid "WeightedDegreeUI.name" -msgstr "DegrΓ© pondΓ©rΓ©" - -msgid "WeightedDegreeUI.shortDescription" -msgstr "" - -msgid "PageRankPanel.edgeWeightCheckbox.text" -msgstr "Utiliser le poids des liens" - -msgid "ModularityPanel.useWeightCheckbox.text" -msgstr "Utiliser le poids" - -msgid "ModularityPanel.jLabel1.text" -msgstr "RΓ©solution:" - -msgid "ModularityPanel.resolutionTextField.toolTipText" -msgstr "Entrer un paramΓ¨tre de rΓ©solution (1,0 est la modularitΓ© standard, moins de 1,0 mΓ¨ne aux plus petites communautΓ©s, plus aux plus grandes)" - -msgid "ModularityPanel.resolutionTextField.text" -msgstr "1.0" - -msgid "ModularityPanel.labelEdgeWeight.text" -msgstr "Utiliser le poids des liens" - -msgid "ModularityPanel.labelResolution.text" -msgstr "Abaissez la valeur pour obtenir plus de communautΓ©s (les plus petites) et augmentez lΓ  au dessus de 1,0 pour obtenir moins de communautΓ©s (les plus grandes)." - -msgid "ModularityPanel.labelRandomize.text" -msgstr "Produit une meilleure dΓ©composition mais augmente le temps de calcul" diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/ja.po b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/ja.po deleted file mode 100644 index a7f66b7092..0000000000 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/ja.po +++ /dev/null @@ -1,278 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# Siro Kida , 2011-2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-12 09:50+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "GraphDistancePanel.directedRadioButton.text" -msgstr "ζœ‰ε‘" - -msgid "GraphDistancePanel.undirectedRadioButton.text" -msgstr "焑向" - -msgid "ClusteringCoefficientPanel.jLabel1.text" -msgstr "クラスタγƒͺγƒ³γ‚°δΏ‚ζ•°θ¨ˆι‡" - -msgid "ClusteringCoefficientPanel.directedRadioButton.text" -msgstr "ζœ‰ε‘" - -msgid "ClusteringCoefficientPanel.undirectedRadioButton.text" -msgstr "焑向" - -msgid "DegreeDistributionPanel.directedRadioButton.text" -msgstr "ζœ‰ε‘" - -msgid "DegreeDistributionPanel.undirectedRadioButton.text" -msgstr "焑向" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζ¨™ζΊ–η΅±θ¨ˆUIεŸθ£…" - -msgid "GraphDensityPanel.directedRadioButton.text" -msgstr "ζœ‰ε‘" - -msgid "GraphDensityPanel.undirectedRadioButton.text" -msgstr "焑向" - -msgid "HitsPanel.labelEpsilon.text" -msgstr "むプシロン:" - -msgid "HitsPanel.directedRadioButton.text" -msgstr "ζœ‰ε‘" - -msgid "HitsPanel.undirectedRadioButton.text" -msgstr "焑向" - -msgid "ModularityPanel.randomizeCheckbox.text" -msgstr "η„‘δ½œη‚ΊεŒ–" - -msgid "PageRankPanel.labelP.text" -msgstr "η’ΊηŽ‡(p):" - -msgid "PageRankPanel.labelE.text" -msgstr "γ‚€γƒ—γ‚·γƒ­γƒ³οΌš" - -msgid "PageRankPanel.directedRadioButton.text" -msgstr "ζœ‰ε‘" - -msgid "PageRankPanel.undirectedRadioButton.text" -msgstr "焑向" - -msgid "GraphDensityPanel.header.title" -msgstr "ε―†εΊ¦" - -msgid "GraphDensityPanel.header.description" -msgstr "γƒγƒƒγƒˆγƒ―γƒΌγ‚―γŒεŒε…¨γ«γ©γγγ‚‰γ„近いかを測εšγ—ます。εŒε…¨γ‚°γƒ©γƒ•は、すべてγε―能γͺ辺と1γ«η­‰γ—γ„ε―†εΊ¦γ‚’ζœ‰γ™γ‚‹γ€‚" - -msgid "ClusteringCoefficientPanel.header.title" -msgstr "クラスタγƒͺング係数" - -msgid "ClusteringCoefficientPanel.header.description" -msgstr "クラスタγƒͺγƒ³γ‚°δΏ‚ζ•°γ―γ€εΉ³ε‡ζœ€ηŸ­γƒ‘γ‚Ήγ¨ε…±γ«γ€\"スヒールワールド\"γεŠΉζžœγ‚’η€Ίγ™γ“γ¨γŒγ§γγΎγ™γ€‚γγ‚Œγ―γ€γƒŽγƒΌγƒ‰γŒγ©γγ‚ˆγ†γ«θ‡ͺεˆ†γθΏ‘ζ‰€γ«η΅„γΏθΎΌγΎγ‚Œγ¦γ„γ‚‹γ‹γ‚’η€Ίγ—γΎγ™γ€‚γγεΉ³ε‡γ―γ€γƒγƒƒγƒˆγƒ―γƒΌγ‚―ε†…γγ‚―ラスタγƒͺングγε…¨δ½“ηš„γͺη›ε‰γ«γͺる。" - -msgid "DegreeDistributionPanel.header.title" -msgstr "ζ¬‘ζ•°εˆ†εΈƒ" - -msgid "DegreeDistributionPanel.header.description" -msgstr "γƒγƒƒγƒˆγƒ―γƒΌγ‚―ε†…γγ™γΉγ¦γγƒŽγƒΌγƒ‰ι–“γ§ζ¬‘ζ•°εˆ†εΈƒγ‚’ζΈ¬εšγ—ます。" - -msgid "GraphDistancePanel.jXLabel1.text" -msgstr "γƒŽγƒΌγƒ‰γŒγƒγƒƒγƒˆγƒ―γƒΌγ‚―ε†…γγƒŽγƒΌγƒ‰ι–“γζœ€ηŸ­η΅Œθ·―δΈŠγ«θ‘¨η€Ίγ•γ‚Œγ‚‹ι »εΊ¦γ‚’ζΈ¬εšγ—ます。" - -msgid "GraphDistancePanel.jXLabel2.text" -msgstr "γƒγƒƒγƒˆγƒ―γƒΌγ‚―ε†…γδ»–γγ™γΉγ¦γγƒŽγƒΌγƒ‰γ«γ€ζŒ‡εšγ•γ‚ŒγŸι–‹ε§‹γƒŽγƒΌγƒ‰γ‹γ‚‰γεΉ³ε‡θ·ι›’。" - -msgid "GraphDistancePanel.jXLabel3.text" -msgstr "ζŒ‡εšγ•γ‚ŒγŸι–‹ε§‹γƒŽγƒΌγƒ‰γ‹γ‚‰γƒγƒƒγƒˆγƒ―γƒΌγ‚―γ«γγ‚Œγ‹γ‚‰ζœ€γ‚‚ι γ„γƒŽγƒΌγƒ‰γΎγ§γθ·ι›’。" - -msgid "GraphDistancePanel.jLabel1.text" -msgstr "εͺ’δ»‹δΈ­εΏƒζ€§" - -msgid "GraphDistancePanel.jLabel2.text" -msgstr "θΏ‘ζŽ₯δΈ­εΏƒζ€§:" - -msgid "GraphDistancePanel.jLabel3.text" -msgstr "ι›’εΏƒζ€§:" - -msgid "GraphDistancePanel.header.description" -msgstr "γƒŽγƒΌγƒ‰γγ™γΉγ¦γγƒšγ‚’ι–“γεΉ³ε‡γγ‚°γƒ©γƒ• - θ·ι›’γ€‚ι€£η΅γ—γŸγƒŽγƒΌγƒ‰γ―γ‚°γƒ©γƒ•γθ·ι›’は1γ§γ™γ€‚η›΄εΎ„γ―γ€γƒγƒƒγƒˆγƒ―γƒΌγ‚―ε†…γδ»»ζ„γ2぀γγƒŽγƒΌγƒ‰ι–“γ§ζœ€ι•·γγ‚°γƒ©γƒ•γθ·ι›’です。(すγͺγ‚γ‘δΊŒγ€γζœ€γ‚‚ι γ„γƒŽγƒΌγƒ‰γŒγ©γ‚Œγγ‚‰γ„ι›’γ‚Œγ¦γ„γ‚‹γ‹)。" - -msgid "GraphDistancePanel.header.title" -msgstr "距雒" - -msgid "HitsPanel.header.description" -msgstr "ε„γƒŽγƒΌγƒ‰γ«2぀γεˆ₯個γε€€γ‚’θ¨ˆη—γ—γΎγ™γ€‚ζœ€εˆγε€€(ζ¨©ε¨γ¨ε‘Όγ°γ‚Œγ‚‹)は、そγγƒŽγƒΌγƒ‰γ«ζ Όη΄γ•γ‚Œγ¦γ„γ‚‹ζƒ…ε ±γŒγ©γγγ‚‰γ„貴重かを測εšγ—ます。2η•ͺη›γε€€(γƒγƒ–γ¨ε‘Όγ°γ‚Œγ‚‹)γ―γ€γƒŽγƒΌγƒ‰γγƒͺンクγε“θ³ͺγ‚’ζΈ¬εšγ™γ‚‹γ€‚" - -msgid "HitsPanel.header.title" -msgstr "HITS" - -msgid "HitsPanel.epsilonLabel.text" -msgstr "εœζ­’εŸΊζΊ–γ€γ“γε€€γŒε°γ•γ„γ»γ©γ€ι•·γ„εŽζŸζ™‚ι–“γŒγ‹γ‹γ‚ŠγΎγ™γ€‚" - -msgid "PageRankPanel.jXHeader1.description" -msgstr "γƒ¦γƒΌγ‚ΆγƒΌγŒγƒ•γ‚©γƒ­γƒΌγ™γ‚‹γƒͺγƒ³γ‚―γŒιžγƒ©γƒ³γƒ€γƒ γ«γƒŽγƒΌγƒ‰\"γƒšγƒΌγ‚Έ\"γ«εˆ°ι”γ™γ‚‹ι »εΊ¦γ«εΏœγ˜γ¦γƒŽγƒΌγƒ‰\"γƒšγƒΌγ‚Έ\"γ‚’γƒ©γƒ³γ‚―δ»˜γ‘γ—γΎγ™γ€‚" - -msgid "PageRankPanel.jXHeader1.title" -msgstr "γƒšγƒΌγ‚Έγƒ©γƒ³γ‚―" - -msgid "PageRankPanel.jXLabel1.text" -msgstr "ランダムにWebγ‚΅γƒΌγƒ•γ‚£γƒ³γ‚’ε†θ΅·ε‹•γ—γ¦γƒ¦γƒΌγ‚ΆγƒΌγ‚’γ‚·γƒŸγƒ₯γƒ¬γƒΌγƒˆγ™γ‚‹γŸγ‚γ«δ½Ώη”¨γ€‚" - -msgid "PageRankPanel.jXLabel2.text" -msgstr "εœζ­’εŸΊζΊ–γ€γ“γε€€γŒε°γ•γ„γ»γ©γ€ι•·γ„εŽζŸζ™‚ι–“γŒγ‹γ‹γ‚ŠγΎγ™γ€‚" - -msgid "ModularityPanel.header.title" -msgstr "γƒ’γ‚Έγƒ₯ラγƒͺティ" - -msgid "ModularityPanel.header.description" -msgstr "γ‚³γƒŸγƒ₯γƒ‹γƒ†γ‚£ζ€œε‡Ίγ‚’γƒ«γ‚΄γƒͺズム。" - -msgid "ConnectedComponentPanel.header.description" -msgstr "γƒγƒƒγƒˆγƒ―γƒΌγ‚―γ§ζŽ₯ηΆšγ•γ‚ŒγŸγ‚³γƒ³γƒγƒΌγƒγƒ³γƒˆγζ•°γ‚’ζ±Ίεšγ—ます。" - -msgid "ConnectedComponentPanel.undirectedRadioButton.text" -msgstr "焑向" - -msgid "ConnectedComponentPanel.directedRadioButton.text" -msgstr "ζœ‰ε‘" - -msgid "ConnectedComponentPanel.header.title" -msgstr "η΅εˆγ‚³γƒ³γƒγƒΌγƒγƒ³γƒˆ" - -msgid "ConnectedComponentPanel.jLabel1.text" -msgstr "(εΌ·οΌ†εΌ±ι€£η΅ζˆεˆ†γ‚’ζ€œε‡Ίγ—γΎγ™)" - -msgid "ConnectedComponentPanel.jLabel2.text" -msgstr "(εΌ±γ„ι€£η΅ζˆεˆ†γγΏγ‚’ζ€œε‡Ίγ—γΎγ™)" - -msgid "EigenvectorCentralityPanel.header.description" -msgstr "γƒŽγƒΌγƒ‰γζŽ₯碚に基γ₯γ„γ¦γƒγƒƒγƒˆγƒ―γƒΌγ‚―ε†…γγƒŽγƒΌγƒ‰γι‡θ¦ζ€§γε°ΊεΊ¦γ€‚" - -msgid "EigenvectorCentralityPanel.header.title" -msgstr "ε›Ίζœ‰γƒ™γ‚―γƒˆγƒ«δΈ­εΏƒζ€§" - -msgid "EigenvectorCentralityPanel.iterationsTextField.text" -msgstr "jTextField1" - -msgid "EigenvectorCentralityPanel.labeliterations.text" -msgstr "反復数:" - -msgid "EigenvectorCentralityPanel.directedButton.text" -msgstr "ζœ‰ε‘" - -msgid "EigenvectorCentralityPanel.undirectedButton.text" -msgstr "焑向" - -msgid "GraphDistancePanel.normalizeButton.text" -msgstr "δΈ­εΏƒη”Ÿγ‚’[0,1]γ§ζ­£θ¦εŒ–" - -msgid "ConnectedComponentUI.name" -msgstr "ι€£η΅γ‚³γƒ³γƒγƒΌγƒγƒ³γƒˆ" - -msgid "ConnectedComponentUI.shortDescription" -msgstr "" - -msgid "ClusteringCoefficientUI.name" -msgstr "平均クラスタγƒͺング係数" - -msgid "ClusteringCoefficientUI.shortDescription" -msgstr "" - -msgid "DegreeDistributionUI.name" -msgstr "欑数ε†ͺ乗則" - -msgid "DegreeDistributionUI.shortDescription" -msgstr "" - -msgid "EigenvectorCentralityUI.name" -msgstr "ε›Ίζœ‰γƒ™γ‚―γƒˆγƒ«δΈ­εΏƒζ€§" - -msgid "EigenvectorCentralityUI.shortDescription" -msgstr "" - -msgid "GraphDensityUI.name" -msgstr "グラフ密度" - -msgid "GraphDensityUI.shortDescription" -msgstr "" - -msgid "DiameterUI.name" -msgstr "γƒγƒƒγƒˆγƒ―γƒΌγ‚―η›΄εΎ„" - -msgid "DiameterUI.shortDescription" -msgstr "γƒγƒƒγƒˆγƒ―γƒΌγ‚―εΎ„" - -msgid "HitsUI.name" -msgstr "HITS" - -msgid "HitsUI.shortDescription" -msgstr "" - -msgid "InOutDegreeUI.name" -msgstr "平均欑数" - -msgid "InOutDegreeUI.shortDescription" -msgstr "平均欑数" - -msgid "ModularityUI.name" -msgstr "γƒ’γ‚Έγƒ₯ラγƒͺティ" - -msgid "ModularityUI.shortDescription" -msgstr "γ‚³γƒŸγƒ₯γƒ‹γƒ†γ‚£ζ€œε‡Ίγ‚’γƒ«γ‚΄γƒͺγ‚Ίγƒ " - -msgid "PageRankUI.name" -msgstr "γƒšγƒΌγ‚Έγƒ©γƒ³γ‚―" - -msgid "PageRankUI.shortDescription" -msgstr "" - -msgid "PathLengthUI.name" -msgstr "平均パス長" - -msgid "PathLengthUI.shortDescription" -msgstr "平均パス長" - -msgid "WeightedDegreeUI.name" -msgstr "平均重み欑数" - -msgid "WeightedDegreeUI.shortDescription" -msgstr "εΉ³ε‡ι‡γΏδ»˜γζ¬‘ζ•°" - -msgid "PageRankPanel.edgeWeightCheckbox.text" -msgstr "θΎΊγι‡γΏγ‚’使用" - -msgid "ModularityPanel.useWeightCheckbox.text" -msgstr "ι‡γΏδ»˜γ‘γ‚’δ½Ώη”¨" - -msgid "ModularityPanel.jLabel1.text" -msgstr "εˆ†θ§£εΊ¦:" - -msgid "ModularityPanel.resolutionTextField.toolTipText" -msgstr "εˆ†θ§£γƒ‘γƒ©γƒ‘γƒΌγ‚Ώγ‚’ε…₯εŠ›(1.0γŒζ¨™ζΊ–γƒ’γ‚Έγƒ₯ラγƒͺティで、1.0ζœͺ満では小さγͺγ‚³γƒŸγƒ₯ニティに、1.0γ‚’θΆ…γˆγ‚‹γ¨ε€§γγͺγ‚³γƒŸγƒ₯ニティにγͺγ‚‹)" - -msgid "ModularityPanel.resolutionTextField.text" -msgstr "1.0" - -msgid "ModularityPanel.labelEdgeWeight.text" -msgstr "θΎΊγι‡γΏδ»˜γ‘を使用" - -msgid "ModularityPanel.labelResolution.text" -msgstr "1.0γ‚ˆγ‚Šε°γ•γγͺγ‚‹γ¨ε€šγγγ‚³γƒŸγƒ₯ニティ(小さγͺγ‚‚γ)に、倧きくγͺると少γͺγ„γ‚³γƒŸγƒ₯ニティ(倧きγͺγ‚‚γ)とγͺる。" - -msgid "ModularityPanel.labelRandomize.text" -msgstr "γ‚ˆγ‚Šη²Ύη·»γͺεˆ†θ§£γ‚’γ™γ‚‹γŒθ¨ˆη—ζ™‚ι–“γŒγ‹γ•γΏγΎγ™" diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/org-gephi-ui-statistics-plugin.pot b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/org-gephi-ui-statistics-plugin.pot deleted file mode 100644 index 75185f7141..0000000000 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/org-gephi-ui-statistics-plugin.pot +++ /dev/null @@ -1,310 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "GraphDistancePanel.directedRadioButton.text" -msgstr "Directed" - -msgid "GraphDistancePanel.undirectedRadioButton.text" -msgstr "UnDirected" - -msgid "ClusteringCoefficientPanel.jLabel1.text" -msgstr "Clustering Coefficent Metric" - -msgid "ClusteringCoefficientPanel.directedRadioButton.text" -msgstr "Directed" - -msgid "ClusteringCoefficientPanel.undirectedRadioButton.text" -msgstr "UnDirected" - -msgid "DegreeDistributionPanel.directedRadioButton.text" -msgstr "Directed" - -msgid "DegreeDistributionPanel.undirectedRadioButton.text" -msgstr "UnDirected" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Standard statistics UI implementations" - -msgid "GraphDensityPanel.directedRadioButton.text" -msgstr "Directed" - -msgid "GraphDensityPanel.undirectedRadioButton.text" -msgstr "UnDirected" - -msgid "HitsPanel.labelEpsilon.text" -msgstr "Epsilon:" - -msgid "HitsPanel.directedRadioButton.text" -msgstr "Directed" - -msgid "HitsPanel.undirectedRadioButton.text" -msgstr "UnDirected" - -msgid "ModularityPanel.randomizeCheckbox.text" -msgstr "Randomize" - -msgid "PageRankPanel.labelP.text" -msgstr "Probability (p):" - -msgid "PageRankPanel.labelE.text" -msgstr "Epsilon:" - -msgid "PageRankPanel.directedRadioButton.text" -msgstr "Directed" - -msgid "PageRankPanel.undirectedRadioButton.text" -msgstr "Undirected" - -msgid "GraphDensityPanel.header.title" -msgstr "Density" - -msgid "GraphDensityPanel.header.description" -msgstr "" -"Measures how close the network is to complete. A complete graph has all " -"possible edges and density equal to 1." - -msgid "ClusteringCoefficientPanel.header.title" -msgstr "Clustering Coefficent" - -msgid "ClusteringCoefficientPanel.header.description" -msgstr "" -"The clustering coefficient, along with the mean shortest path, can indicate " -"a \"small-world\" effect. It indicates how nodes are embedded in their " -"neighborhood. The average give an overall indication of the clustering in " -"the network." - -msgid "DegreeDistributionPanel.header.title" -msgstr "Degree Distribution" - -msgid "DegreeDistributionPanel.header.description" -msgstr "" -"Measures the distribution of degrees amongst all of the nodes within the " -"network." - -msgid "GraphDistancePanel.jXLabel1.text" -msgstr "" -"Measures how often a node appears on shortest paths between nodes in the " -"network." - -msgid "GraphDistancePanel.jXLabel2.text" -msgstr "" -"The average distance from a given starting node to all other nodes in the " -"network." - -msgid "GraphDistancePanel.jXLabel3.text" -msgstr "" -"The distance from a given starting node to the farthest node from it in the " -"network." - -msgid "GraphDistancePanel.jLabel1.text" -msgstr "Betweenness Centrality:" - -msgid "GraphDistancePanel.jLabel2.text" -msgstr "Closeness Centrality:" - -msgid "GraphDistancePanel.jLabel3.text" -msgstr "Eccentricity:" - -msgid "GraphDistancePanel.header.description" -msgstr "" -"The average graph-distance between all pairs of nodes. Connected nodes have " -"graph distance 1. The diameter is the longest graph distance between any two " -"nodes in the network. (i.e. How far apart are the two most distant nodes)." - -msgid "GraphDistancePanel.header.title" -msgstr "Distance" - -msgid "HitsPanel.header.description" -msgstr "" -"Computes two separate values for each node. The first value (called " -"Authority) measures how valuable information stored at that node is. The " -"second value (called Hub) measures the quality of the nodes links." - -msgid "HitsPanel.header.title" -msgstr "HITS" - -msgid "HitsPanel.epsilonLabel.text" -msgstr "" -"Stopping criterion, the smaller this value, the longer convergence will take." - -msgid "PageRankPanel.jXHeader1.description" -msgstr "" -"Ranks nodes \"pages\" according to how often a user following links will non-" -"randomly reach the node \"page\"." - -msgid "PageRankPanel.jXHeader1.title" -msgstr "PageRank" - -msgid "PageRankPanel.jXLabel1.text" -msgstr "Used to simulate the user randomly restarting the web-surfing." - -msgid "PageRankPanel.jXLabel2.text" -msgstr "" -"Stopping criterion, the smaller this value, the longer convergence will take." - -msgid "ModularityPanel.header.title" -msgstr "Modularity" - -msgid "ModularityPanel.header.description" -msgstr "Community detection algorithm." - -msgid "ConnectedComponentPanel.header.description" -msgstr "Determines the number of connected components in the network." - -msgid "ConnectedComponentPanel.undirectedRadioButton.text" -msgstr "UnDirected" - -msgid "ConnectedComponentPanel.directedRadioButton.text" -msgstr "Directed" - -msgid "ConnectedComponentPanel.header.title" -msgstr "Connected Components" - -msgid "ConnectedComponentPanel.jLabel1.text" -msgstr "Detects strongly & weakly connected components" - -msgid "ConnectedComponentPanel.jLabel2.text" -msgstr "Detects only weakly connected components)" - -msgid "EigenvectorCentralityPanel.header.description" -msgstr "" -"A measure of node importance in a network based on a node's connections." - -msgid "EigenvectorCentralityPanel.header.title" -msgstr "Eigenvector Centrality" - -msgid "EigenvectorCentralityPanel.iterationsTextField.text" -msgstr "jTextField1" - -msgid "EigenvectorCentralityPanel.labeliterations.text" -msgstr "Number of iterations:" - -msgid "EigenvectorCentralityPanel.directedButton.text" -msgstr "Directed" - -msgid "EigenvectorCentralityPanel.undirectedButton.text" -msgstr "UnDirected" - -msgid "GraphDistancePanel.normalizeButton.text" -msgstr "Normalize Centralities in [0,1]" - -msgid "ConnectedComponentUI.name" -msgstr "Connected Components" - -msgid "ConnectedComponentUI.shortDescription" -msgstr "Determines the number of connected components in the network." - -msgid "ClusteringCoefficientUI.name" -msgstr "Avg. Clustering Coefficient" - -msgid "ClusteringCoefficientUI.shortDescription" -msgstr "Averages how nodes are embedded in their neighborhood." - -msgid "DegreeDistributionUI.name" -msgstr "Degree Power Law" - -msgid "DegreeDistributionUI.shortDescription" -msgstr "" -"Measures the distribution of degrees amongst all of the nodes within the " -"network." - -msgid "EigenvectorCentralityUI.name" -msgstr "Eigenvector Centrality" - -msgid "EigenvectorCentralityUI.shortDescription" -msgstr "" -"A measure of node importance in a network based on a node's connections." - -msgid "GraphDensityUI.name" -msgstr "Graph Density" - -msgid "GraphDensityUI.shortDescription" -msgstr "Measures how close the network is to complete." - -msgid "DiameterUI.name" -msgstr "Network Diameter" - -msgid "DiameterUI.shortDescription" -msgstr "Network Diameter" - -msgid "HitsUI.name" -msgstr "HITS" - -msgid "HitsUI.shortDescription" -msgstr "" -"Computes two values for each node: How valuable information stored at that " -"node is & the quality of the nodes links." - -msgid "InOutDegreeUI.name" -msgstr "Average Degree" - -msgid "InOutDegreeUI.shortDescription" -msgstr "Average Degree" - -msgid "ModularityUI.name" -msgstr "Modularity" - -msgid "ModularityUI.shortDescription" -msgstr "Community detection algorithm." - -msgid "PageRankUI.name" -msgstr "PageRank" - -msgid "PageRankUI.shortDescription" -msgstr "" -"Ranks nodes \"pages\" according to how often a user following links will non-" -"randomly reach the node \"page\"." - -msgid "PathLengthUI.name" -msgstr "Avg. Path Length" - -msgid "PathLengthUI.shortDescription" -msgstr "Avg. Path Length" - -msgid "WeightedDegreeUI.name" -msgstr "Avg. Weighted Degree" - -msgid "WeightedDegreeUI.shortDescription" -msgstr "Avg. Weighted Degree" - -msgid "PageRankPanel.edgeWeightCheckbox.text" -msgstr "Use edge weight" - -msgid "ModularityPanel.useWeightCheckbox.text" -msgstr "Use weights" - -msgid "ModularityPanel.jLabel1.text" -msgstr "Resolution:" - -msgid "ModularityPanel.resolutionTextField.toolTipText" -msgstr "" -"Enter a resolution parameter (1.0 is standard modularity, less than 1.0 " -"leads to smaller communities, more to bigger)" - -msgid "ModularityPanel.resolutionTextField.text" -msgstr "1.0" - -msgid "ModularityPanel.labelEdgeWeight.text" -msgstr "Use edge weight" - -msgid "ModularityPanel.labelResolution.text" -msgstr "" -"Lower to get more communities (smaller ones) and higher than 1.0 to get less " -"communities (bigger ones)." - -msgid "ModularityPanel.labelRandomize.text" -msgstr "Produce a better decomposition but increases computation time" diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/pt_BR.po b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/pt_BR.po deleted file mode 100644 index edf1a93950..0000000000 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/pt_BR.po +++ /dev/null @@ -1,280 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -# CΓ©lio Faria Jr. , 2011-2012. -# Eduardo Ramos , 2012. -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-18 11:22+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "GraphDistancePanel.directedRadioButton.text" -msgstr "Dirigido" - -msgid "GraphDistancePanel.undirectedRadioButton.text" -msgstr "NΓ£o dirigido" - -msgid "ClusteringCoefficientPanel.jLabel1.text" -msgstr "MΓ©trica de Coeficiente de Clustering" - -msgid "ClusteringCoefficientPanel.directedRadioButton.text" -msgstr "Dirigido" - -msgid "ClusteringCoefficientPanel.undirectedRadioButton.text" -msgstr "NΓ£o dirigido" - -msgid "DegreeDistributionPanel.directedRadioButton.text" -msgstr "Dirigido" - -msgid "DegreeDistributionPanel.undirectedRadioButton.text" -msgstr "NΓ£o dirigido" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplementaΓ§Γ΅es das interfaces de usuΓ‘rio das estatΓ­sticas padrΓ£o" - -msgid "GraphDensityPanel.directedRadioButton.text" -msgstr "Dirigido" - -msgid "GraphDensityPanel.undirectedRadioButton.text" -msgstr "NΓ£o dirigido" - -msgid "HitsPanel.labelEpsilon.text" -msgstr "Epsilon:" - -msgid "HitsPanel.directedRadioButton.text" -msgstr "Dirigido" - -msgid "HitsPanel.undirectedRadioButton.text" -msgstr "NΓ£o dirigido" - -msgid "ModularityPanel.randomizeCheckbox.text" -msgstr "AleatΓ³rio" - -msgid "PageRankPanel.labelP.text" -msgstr "Probabilidade (p):" - -msgid "PageRankPanel.labelE.text" -msgstr "Epsilon:" - -msgid "PageRankPanel.directedRadioButton.text" -msgstr "Dirigido" - -msgid "PageRankPanel.undirectedRadioButton.text" -msgstr "NΓ£o dirigido" - -msgid "GraphDensityPanel.header.title" -msgstr "Densidade" - -msgid "GraphDensityPanel.header.description" -msgstr "Mede quΓ£o perto o grafo estΓ‘ de ser completo. Um grafo completo tem todas as arestas possΓ­veis e densidade igual a 1." - -msgid "ClusteringCoefficientPanel.header.title" -msgstr "Coeficiente de Clustering" - -msgid "ClusteringCoefficientPanel.header.description" -msgstr "O coeficiente de clustering, juntamente com o valor mΓ©dio do caminho mais curto, pode indicar um efeito \"small-world\". Indica como os nΓ³s estΓ£o inseridos em sua vizinhanΓ§a. O valor mΓ©dio fornece uma indicaΓ§Γ£o geral do clustering na rede." - -msgid "DegreeDistributionPanel.header.title" -msgstr "DistribuiΓ§Γ£o de grau" - -msgid "DegreeDistributionPanel.header.description" -msgstr "Mede a distribuiΓ§Γ£o de grau entre todos os nΓ³s da rede." - -msgid "GraphDistancePanel.jXLabel1.text" -msgstr "Mede a frequΓͺncia com que um nΓ³ aparece nos caminhos mais curtos entre nΓ³s da rede." - -msgid "GraphDistancePanel.jXLabel2.text" -msgstr "DistΓ’ncia mΓ©dia de um determinado nΓ³ inicial para todos os demais nΓ³s da rede." - -msgid "GraphDistancePanel.jXLabel3.text" -msgstr "DistΓ’ncia de um determinado nΓ³ inicial atΓ© o nΓ³ mais distante dele na rede." - -msgid "GraphDistancePanel.jLabel1.text" -msgstr "Centralidade de intermediaΓ§Γ£o:" - -msgid "GraphDistancePanel.jLabel2.text" -msgstr "Centralidade de proximidade:" - -msgid "GraphDistancePanel.jLabel3.text" -msgstr "Excentricidade:" - -msgid "GraphDistancePanel.header.description" -msgstr "DistΓ’ncia mΓ©dia de grafo entre todos os pares de nΓ³s. Os nΓ³s conectados tem distΓ’ncia 1. O diΓ’metro Γ© a maior distΓ’ncia de grafo entre dos nΓ³s quaisquer da rede, ou seja, quΓ£o separados estΓ£o os dois nΓ³s mais distantes." - -msgid "GraphDistancePanel.header.title" -msgstr "DistΓ’ncia" - -msgid "HitsPanel.header.description" -msgstr "Calcula dois valores distintos para cada nΓ³. O primeiro valor (chamado 'Authority') mede o quanto sΓ£o valiosas as informaΓ§Γ΅es armazenadas naquele nΓ³. O segundo valor (chamado 'Hub') mede a qualidade das conexΓ΅es deste nΓ³." - -msgid "HitsPanel.header.title" -msgstr "HITS" - -msgid "HitsPanel.epsilonLabel.text" -msgstr "CritΓ©rio de parada. Quanto menor este valor, mais tempo a convergΓͺncia levarΓ‘." - -msgid "PageRankPanel.jXHeader1.description" -msgstr "Classifica as \"pΓ‘ginas\" dos nΓ³s de acordo com a frequΓͺncia com que um usuΓ‘rio seguindo ligaΓ§Γ΅es de maneira nΓ£o aleatΓ³ria chega Γ  \"pΓ‘gina\" do nΓ³." - -msgid "PageRankPanel.jXHeader1.title" -msgstr "PageRank" - -msgid "PageRankPanel.jXLabel1.text" -msgstr "Usado para simular aleatoriamente que o usuΓ‘rio reinicia la navegaciΓ³n web." - -msgid "PageRankPanel.jXLabel2.text" -msgstr "CritΓ©rio de parada. Quanto menor este valor, mais tempo a convergΓͺncia levarΓ‘." - -msgid "ModularityPanel.header.title" -msgstr "Modularidade" - -msgid "ModularityPanel.header.description" -msgstr "Algoritmo de detecΓ§Γ£o de comunidades." - -msgid "ConnectedComponentPanel.header.description" -msgstr "Determina o nΓΊmero de componentes conectados na rede." - -msgid "ConnectedComponentPanel.undirectedRadioButton.text" -msgstr "NΓ£o dirigido" - -msgid "ConnectedComponentPanel.directedRadioButton.text" -msgstr "Dirigido" - -msgid "ConnectedComponentPanel.header.title" -msgstr "Componentes conectados" - -msgid "ConnectedComponentPanel.jLabel1.text" -msgstr "(DetectarΓ‘ componentes fortemente e fracamente conectados)" - -msgid "ConnectedComponentPanel.jLabel2.text" -msgstr "(DetectarΓ‘ somente componentes fracamente conectados)" - -msgid "EigenvectorCentralityPanel.header.description" -msgstr "Uma medida de importΓ’ncia do nΓ³ na rede baseada em suas conexΓ΅es." - -msgid "EigenvectorCentralityPanel.header.title" -msgstr "Centralidade de autovetor" - -msgid "EigenvectorCentralityPanel.iterationsTextField.text" -msgstr "jTextField1" - -msgid "EigenvectorCentralityPanel.labeliterations.text" -msgstr "NΓΊmero de iteraΓ§Γ΅es:" - -msgid "EigenvectorCentralityPanel.directedButton.text" -msgstr "Dirigido" - -msgid "EigenvectorCentralityPanel.undirectedButton.text" -msgstr "NΓ£o dirigido" - -msgid "GraphDistancePanel.normalizeButton.text" -msgstr "Normalizar centralidades em [0,1]" - -msgid "ConnectedComponentUI.name" -msgstr "Componentes conectados" - -msgid "ConnectedComponentUI.shortDescription" -msgstr "Determina o nΓΊmero de componentes conectados na rede" - -msgid "ClusteringCoefficientUI.name" -msgstr "Coeficiente de clustering mΓ©dio" - -msgid "ClusteringCoefficientUI.shortDescription" -msgstr "Calcula a mΓ©dia de imersΓ£o dos nΓ³s em suas vizinhanΓ§as" - -msgid "DegreeDistributionUI.name" -msgstr "Lei de potΓͺncia de grau" - -msgid "DegreeDistributionUI.shortDescription" -msgstr "Mede a distribuiΓ§Γ£o de grau entre todos os nΓ³s da rede" - -msgid "EigenvectorCentralityUI.name" -msgstr "Centralidade de autovetor" - -msgid "EigenvectorCentralityUI.shortDescription" -msgstr "Uma medida da importΓ’ncia do nΓ³ na rede baseada em suas conexΓ΅es" - -msgid "GraphDensityUI.name" -msgstr "Densidade do grafo" - -msgid "GraphDensityUI.shortDescription" -msgstr "Mede o quΓ£o perto a rede estΓ‘ de ser completa" - -msgid "DiameterUI.name" -msgstr "DiΓ’metro da rede" - -msgid "DiameterUI.shortDescription" -msgstr "DiΓ’metro da rede" - -msgid "HitsUI.name" -msgstr "HITS" - -msgid "HitsUI.shortDescription" -msgstr "Calcula dois valores para cada nΓ³: o quΓ£o valiosa Γ© a informaΓ§Γ£o armazenada nele e a qualidade de suas conexΓ΅es." - -msgid "InOutDegreeUI.name" -msgstr "Grau mΓ©dio" - -msgid "InOutDegreeUI.shortDescription" -msgstr "Grau mΓ©dio" - -msgid "ModularityUI.name" -msgstr "Modularidade" - -msgid "ModularityUI.shortDescription" -msgstr "Algoritmo de detecΓ§Γ£o de comunidades" - -msgid "PageRankUI.name" -msgstr "PageRank" - -msgid "PageRankUI.shortDescription" -msgstr "Classifica nΓ³s -- considerando-os como \"pΓ‘ginas\" -- de acordo com a frequΓͺncia com que um usuΓ‘rio que siga as ligaΓ§Γ΅es de modo nΓ£o aleatΓ³rio alcance o nΓ³." - -msgid "PathLengthUI.name" -msgstr "Comprimento mΓ©dio de caminho" - -msgid "PathLengthUI.shortDescription" -msgstr "MΓ©dia da distΓ’ncia de caminho" - -msgid "WeightedDegreeUI.name" -msgstr "Grau ponderado mΓ©dio" - -msgid "WeightedDegreeUI.shortDescription" -msgstr "MΓ©dia ponderada de grau" - -msgid "PageRankPanel.edgeWeightCheckbox.text" -msgstr "Usar peso da aresta" - -msgid "ModularityPanel.useWeightCheckbox.text" -msgstr "Utilizar pesos de arestas" - -msgid "ModularityPanel.jLabel1.text" -msgstr "ResoluΓ§Γ£o:" - -msgid "ModularityPanel.resolutionTextField.toolTipText" -msgstr "ForneΓ§a um parΓ’metro de resoluΓ§Γ£o (o valor 1.0 Γ© a modularidade padrΓ£o, valores menores geram comunidades menores, valores maiores comunidades maiores)" - -msgid "ModularityPanel.resolutionTextField.text" -msgstr "1.0" - -msgid "ModularityPanel.labelEdgeWeight.text" -msgstr "Usar pesos das arestas" - -msgid "ModularityPanel.labelResolution.text" -msgstr "Utilize valores menores para gerar mais comunidades menores e valores maiores do que 1.0 para gerar menos comunidades maiores." - -msgid "ModularityPanel.labelRandomize.text" -msgstr "Produz uma decomposiΓ§Γ£o melhor mas aumenta o tempo de processamento." diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/ru.po b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/ru.po deleted file mode 100644 index c7974971b5..0000000000 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/ru.po +++ /dev/null @@ -1,278 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -# Eduardo Ramos , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:16+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "GraphDistancePanel.directedRadioButton.text" -msgstr "ΠžΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ" - -msgid "GraphDistancePanel.undirectedRadioButton.text" -msgstr "НСориСнтированный" - -msgid "ClusteringCoefficientPanel.jLabel1.text" -msgstr "НСориСнтированный" - -msgid "ClusteringCoefficientPanel.directedRadioButton.text" -msgstr "ΠžΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ" - -msgid "ClusteringCoefficientPanel.undirectedRadioButton.text" -msgstr "НСориСнтированный" - -msgid "DegreeDistributionPanel.directedRadioButton.text" -msgstr "ΠžΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ" - -msgid "DegreeDistributionPanel.undirectedRadioButton.text" -msgstr "НСориСнтированный" - -msgid "OpenIDE-Module-Short-Description" -msgstr "РСализация UI стандартных статистик" - -msgid "GraphDensityPanel.directedRadioButton.text" -msgstr "ΠžΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ" - -msgid "GraphDensityPanel.undirectedRadioButton.text" -msgstr "НСориСнтированный" - -msgid "HitsPanel.labelEpsilon.text" -msgstr "Epsilon:" - -msgid "HitsPanel.directedRadioButton.text" -msgstr "ΠžΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ" - -msgid "HitsPanel.undirectedRadioButton.text" -msgstr "НСориСнтированный" - -msgid "ModularityPanel.randomizeCheckbox.text" -msgstr "Π Π°Π½Π΄ΠΎΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ" - -msgid "PageRankPanel.labelP.text" -msgstr "Π’Π΅Ρ€ΠΎΡΡ‚Π½ΠΎΡΡ‚ΡŒ (p):" - -msgid "PageRankPanel.labelE.text" -msgstr "Epsilon:" - -msgid "PageRankPanel.directedRadioButton.text" -msgstr "ΠžΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ" - -msgid "PageRankPanel.undirectedRadioButton.text" -msgstr "НСориСнтированный" - -msgid "GraphDensityPanel.header.title" -msgstr "ΠŸΠ»ΠΎΡ‚Π½ΠΎΡΡ‚ΡŒ" - -msgid "GraphDensityPanel.header.description" -msgstr "ΠœΠ΅Ρ‚Ρ€ΠΈΠΊΠ° ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚, ΠΊΠ°ΠΊ Π±Π»ΠΈΠ·ΠΎΠΊ Π³Ρ€Π°Ρ„ ΠΊ ΠΏΠΎΠ»Π½ΠΎΠΌΡƒ. ΠŸΠΎΠ»Π½Ρ‹ΠΉ Π³Ρ€Π°Ρ„ ΠΈΠΌΠ΅Π΅Ρ‚ всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Ρ€Ρ‘Π±Ρ€Π° ΠΈ ΠΏΠ»ΠΎΡ‚Π½ΠΎΡΡ‚ΡŒ, Ρ€Π°Π²Π½ΡƒΡŽ 1." - -msgid "ClusteringCoefficientPanel.header.title" -msgstr "ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ кластСризации" - -msgid "ClusteringCoefficientPanel.header.description" -msgstr "ΠšΠΎΡΡ„Ρ„ΠΈΡ†ΠΈΠ΅Π½Ρ‚ кластСризации, наряду со срСдним ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠΌ ΠΏΡƒΡ‚Ρ‘ΠΌ, ΠΌΠΎΠΆΠ΅Ρ‚ ΡΠ»ΡƒΠΆΠΈΡ‚ΡŒ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ Π³ΠΈΠΏΠΎΡ‚Π΅Π·Ρ‹ \"Small World\". Он ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Π΅Ρ‚ насколько ΠΏΠ»ΠΎΡ‚Π½ΠΎ ΡƒΠ·Π»Ρ‹ ΡƒΠΏΠ°ΠΊΠΎΠ²Π°Π½Ρ‹ Π² своём блиТайшСм ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠΈ. Π‘Ρ€Π΅Π΄Π½Π΅Π΅ соотвСтствуСт стСпСни кластСризации всСго Π³Ρ€Π°Ρ„Π°." - -msgid "DegreeDistributionPanel.header.title" -msgstr "РаспрСдСлСниС стСпСнСй" - -msgid "DegreeDistributionPanel.header.description" -msgstr "РассчитываСт распрСдСлСниС стСпСнСй ΠΏΠΎ всСм ΡƒΠ·Π»Π°ΠΌ Π³Ρ€Π°Ρ„Π°." - -msgid "GraphDistancePanel.jXLabel1.text" -msgstr "РассчитываСт, ΠΊΠ°ΠΊ часто ΡƒΠ·Π΅Π» Π»Π΅ΠΆΠΈΡ‚ Π½Π° ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠ΅ΠΌ ΠΏΡƒΡ‚ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌΠΈ двумя ΡƒΠ·Π»Π°ΠΌΠΈ Π³Ρ€Π°Ρ„Π°." - -msgid "GraphDistancePanel.jXLabel2.text" -msgstr "БрСдняя дистанция ΠΎΡ‚ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° Π΄ΠΎ всСх ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… ΡƒΠ·Π»ΠΎΠ² Π³Ρ€Π°Ρ„Π°." - -msgid "GraphDistancePanel.jXLabel3.text" -msgstr "Максимальная дистанция ΠΎΡ‚ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° Π΄ΠΎ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° Π³Ρ€Π°Ρ„Π°." - -msgid "GraphDistancePanel.jLabel1.text" -msgstr "Betweenness Centrality:" - -msgid "GraphDistancePanel.jLabel2.text" -msgstr "Closeness Centrality:" - -msgid "GraphDistancePanel.jLabel3.text" -msgstr "Eccentricity:" - -msgid "GraphDistancePanel.header.description" -msgstr "Π‘Ρ€Π΅Π΄Π½Π΅Π΅ расстояниС ΠΏΠΎ всСвозмоТным ΠΏΠ°Ρ€Π°ΠΌ ΡƒΠ·Π»ΠΎΠ² Π³Ρ€Π°Ρ„Π°. БвязанныС Π½Π°ΠΏΡ€ΡΠΌΡƒΡŽ ΡƒΠ·Π»Ρ‹ ΠΈΠΌΠ΅ΡŽΡ‚ расстояниС, Ρ€Π°Π²Π½ΠΎΠ΅ 1. Π”ΠΈΠ°ΠΌΠ΅Ρ‚Ρ€ -- максимальноС расстояниС ΠΏΠΎ всСвозмоТным ΠΏΠ°Ρ€Π°ΠΌ ΡƒΠ·Π»ΠΎΠ² Π³Ρ€Π°Ρ„Π° (Ρ‚.Π΅. насколько ΡƒΠ΄Π°Π»Π΅Π½Ρ‹ Π΄Ρ€ΡƒΠ³ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³Π° Π΄Π²Π° максимально ΡƒΠ΄Π°Π»Π΅Π½Π½Ρ‹Ρ… ΡƒΠ·Π»Π°)." - -msgid "GraphDistancePanel.header.title" -msgstr "Дистанция" - -msgid "HitsPanel.header.description" -msgstr "РассчитываСт Π΄Π²Π° нСзависимых значСния для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ΅ Authority) соотвСтствуСт ваТности самого ΡƒΠ·Π»Π°. Π’Ρ‚ΠΎΡ€ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ (Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΠΎΠ³ΠΎ Hub) соотвСтствуСт ваТности Ρ€Π΅Π±Ρ‘Ρ€ Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°." - -msgid "HitsPanel.header.title" -msgstr "HITS" - -msgid "HitsPanel.epsilonLabel.text" -msgstr "ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ условия остановки, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ значСния ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°." - -msgid "PageRankPanel.jXHeader1.description" -msgstr "Π Π°Π½ΠΆΠΈΡ€ΡƒΠ΅Ρ‚ ΡƒΠ·Π»Ρ‹ (ΠΊΠ°ΠΊ страницы), Π² соотвСтствии с Ρ‚Π΅ΠΌ, ΠΊΠ°ΠΊ часто \"ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ\", пСрСходя ΠΏΠΎ ссылкам (Ρ€Ρ‘Π±Ρ€Π°ΠΌ), Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΏΠ°Π΄Π°Ρ‚ΡŒ Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΡƒΠ·Π΅Π»." - -msgid "PageRankPanel.jXHeader1.title" -msgstr "PageRank" - -msgid "PageRankPanel.jXLabel1.text" -msgstr "Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для задания вСроятности Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ случайно Π½Π°Ρ‡Π½Ρ‘Ρ‚ ΠΎΠ±Ρ…ΠΎΠ΄ Π³Ρ€Π°Ρ„Π° с Π½Π°Ρ‡Π°Π»Π°. " - -msgid "PageRankPanel.jXLabel2.text" -msgstr "ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ условия остановки, ΡƒΠΌΠ΅Π½ΡŒΡˆΠ΅Π½ΠΈΠ΅ значСния ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°." - -msgid "ModularityPanel.header.title" -msgstr "Modularity" - -msgid "ModularityPanel.header.description" -msgstr "Алгоритм выявлСния сообщСств." - -msgid "ConnectedComponentPanel.header.description" -msgstr "ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ число связных ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ Π³Ρ€Π°Ρ„Π°." - -msgid "ConnectedComponentPanel.undirectedRadioButton.text" -msgstr "НСориСнтированный" - -msgid "ConnectedComponentPanel.directedRadioButton.text" -msgstr "ΠžΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ" - -msgid "ConnectedComponentPanel.header.title" -msgstr "БвязныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹" - -msgid "ConnectedComponentPanel.jLabel1.text" -msgstr "ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ сильно- ΠΈ слабосвязныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹" - -msgid "ConnectedComponentPanel.jLabel2.text" -msgstr "ΠžΠΏΡ€Π΅Π΄Π΅Π»ΡΠ΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ слабосвязаныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹" - -msgid "EigenvectorCentralityPanel.header.description" -msgstr "РассчитываСт вСс ΡƒΠ·Π»Π° Π² сСти Π½Π° основС связСй Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π°." - -msgid "EigenvectorCentralityPanel.header.title" -msgstr "Eigenvector Centrality" - -msgid "EigenvectorCentralityPanel.iterationsTextField.text" -msgstr "jTextField1" - -msgid "EigenvectorCentralityPanel.labeliterations.text" -msgstr "Число ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΉ:" - -msgid "EigenvectorCentralityPanel.directedButton.text" -msgstr "ΠžΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ" - -msgid "EigenvectorCentralityPanel.undirectedButton.text" -msgstr "НСориСнтированный" - -msgid "GraphDistancePanel.normalizeButton.text" -msgstr "ΠΠΎΡ€ΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹ Π² ΠΈΠ½Ρ‚Π΅Ρ€Π²Π°Π» [0,1]" - -msgid "ConnectedComponentUI.name" -msgstr "БвязныС ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹" - -msgid "ConnectedComponentUI.shortDescription" -msgstr "" - -msgid "ClusteringCoefficientUI.name" -msgstr "Π‘Ρ€Π΅Π΄Π½ΠΈΠΉ коэффициСнт кластСризации" - -msgid "ClusteringCoefficientUI.shortDescription" -msgstr "" - -msgid "DegreeDistributionUI.name" -msgstr "Degree Power Law" - -msgid "DegreeDistributionUI.shortDescription" -msgstr "" - -msgid "EigenvectorCentralityUI.name" -msgstr "Eigenvector Centrality" - -msgid "EigenvectorCentralityUI.shortDescription" -msgstr "" - -msgid "GraphDensityUI.name" -msgstr "ΠŸΠ»ΠΎΡ‚Π½ΠΎΡΡ‚ΡŒ Π³Ρ€Π°Ρ„Π°" - -msgid "GraphDensityUI.shortDescription" -msgstr "" - -msgid "DiameterUI.name" -msgstr "Π”ΠΈΠ°ΠΌΠ΅Ρ‚Ρ€ Π³Ρ€Π°Ρ„Π°" - -msgid "DiameterUI.shortDescription" -msgstr "" - -msgid "HitsUI.name" -msgstr "HITS" - -msgid "HitsUI.shortDescription" -msgstr "" - -msgid "InOutDegreeUI.name" -msgstr "БрСдняя ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ" - -msgid "InOutDegreeUI.shortDescription" -msgstr "" - -msgid "ModularityUI.name" -msgstr "ΠœΠΎΠ΄ΡƒΠ»ΡΡ€Π½ΠΎΡΡ‚ΡŒ" - -msgid "ModularityUI.shortDescription" -msgstr "" - -msgid "PageRankUI.name" -msgstr "PageRank" - -msgid "PageRankUI.shortDescription" -msgstr "" - -msgid "PathLengthUI.name" -msgstr "БрСдняя Π΄Π»ΠΈΠ½Π° ΠΏΡƒΡ‚ΠΈ" - -msgid "PathLengthUI.shortDescription" -msgstr "" - -msgid "WeightedDegreeUI.name" -msgstr "БрСдняя взвСшСнная ΡΡ‚Π΅ΠΏΠ΅Π½ΡŒ" - -msgid "WeightedDegreeUI.shortDescription" -msgstr "" - -msgid "PageRankPanel.edgeWeightCheckbox.text" -msgstr "Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ вСса Ρ€Ρ‘Π±Π΅Ρ€" - -msgid "ModularityPanel.useWeightCheckbox.text" -msgstr "" - -msgid "ModularityPanel.jLabel1.text" -msgstr "" - -msgid "ModularityPanel.resolutionTextField.toolTipText" -msgstr "" - -msgid "ModularityPanel.resolutionTextField.text" -msgstr "" - -msgid "ModularityPanel.labelEdgeWeight.text" -msgstr "" - -msgid "ModularityPanel.labelResolution.text" -msgstr "" - -msgid "ModularityPanel.labelRandomize.text" -msgstr "" diff --git a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/zh_CN.po b/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/zh_CN.po deleted file mode 100644 index 0504b6c81a..0000000000 --- a/modules/StatisticsPluginUI/src/main/resources/org/gephi/ui/statistics/plugin/zh_CN.po +++ /dev/null @@ -1,277 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:16+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "GraphDistancePanel.directedRadioButton.text" -msgstr "ζœ‰ε‘" - -msgid "GraphDistancePanel.undirectedRadioButton.text" -msgstr "五向" - -msgid "ClusteringCoefficientPanel.jLabel1.text" -msgstr "θšη±»η³»ζ•°" - -msgid "ClusteringCoefficientPanel.directedRadioButton.text" -msgstr "ζœ‰ε‘" - -msgid "ClusteringCoefficientPanel.undirectedRadioButton.text" -msgstr "无向" - -msgid "DegreeDistributionPanel.directedRadioButton.text" -msgstr "ζœ‰ε‘" - -msgid "DegreeDistributionPanel.undirectedRadioButton.text" -msgstr "无向" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζ ‡ε‡†η»Ÿθ‘η”¨ζˆ·η•Œι’UIεžηް" - -msgid "GraphDensityPanel.directedRadioButton.text" -msgstr "ζœ‰ε‘" - -msgid "GraphDensityPanel.undirectedRadioButton.text" -msgstr "无向" - -msgid "HitsPanel.labelEpsilon.text" -msgstr "θ――ε·Epsilon:" - -msgid "HitsPanel.directedRadioButton.text" -msgstr "ζœ‰ε‘" - -msgid "HitsPanel.undirectedRadioButton.text" -msgstr "无向" - -msgid "ModularityPanel.randomizeCheckbox.text" -msgstr "随机" - -msgid "PageRankPanel.labelP.text" -msgstr "ζ¦‚ηŽ‡(p):" - -msgid "PageRankPanel.labelE.text" -msgstr "θ――ε·Epsilon:" - -msgid "PageRankPanel.directedRadioButton.text" -msgstr "ζœ‰ε‘" - -msgid "PageRankPanel.undirectedRadioButton.text" -msgstr "无向" - -msgid "GraphDensityPanel.header.title" -msgstr "ε―†εΊ¦" - -msgid "GraphDensityPanel.header.description" -msgstr "εΊ¦ι‡η½‘η»œεŒζ•΄ζ€§γ€‚δΈ€δΈͺεŒε…¨ε›Ύε…·ε€‡ζ‰€ζœ‰ε―θƒ½θΏžζŽ₯ηš„θΎΉοΌŒε³δ»»ζ„δΈ€θŠ‚η‚Ήζœ‰θΎΉθΏžζŽ₯οΌŒε…Άε―†εΊ¦δΈΊ1。" - -msgid "ClusteringCoefficientPanel.header.title" -msgstr "θšη±»η³»ζ•°" - -msgid "ClusteringCoefficientPanel.header.description" -msgstr "θšη±»η³»ζ•°οΌŒε’ŒεΉ³ε‡ζœ€ηŸ­θ·―εΎ„δΈ€θ΅·οΌŒθƒ½ε€Ÿε±•η€Ίζ‰€θ°“ηš„β€œε°δΈ–η•Œβ€ζ•ˆεΊ”οΌ›θ‘¨ζ˜ŽθŠ‚η‚Ήε¦‚δ½•ε΅Œε…₯ε…Άι‚»ε±…ε½“δΈ­γ€‚εΉ³ε‡θšη±»η³»ζ•°η»™ε‡Ίε…³δΊŽδΈ€δΈͺθŠ‚η‚Ήθšη±»ζˆ–ζŠ±ε›’ηš„ζ€»δ½“θΏΉθ±‘γ€‚" - -msgid "DegreeDistributionPanel.header.title" -msgstr "εΊ¦εˆ†εΈƒ" - -msgid "DegreeDistributionPanel.header.description" -msgstr "εΊ¦ι‡η½‘η»œδΈ­ζ‰€ζœ‰θŠ‚η‚Ήηš„εΊ¦ηš„εˆ†εΈƒζƒ…ε†΅γ€‚" - -msgid "GraphDistancePanel.jXLabel1.text" -msgstr "度量一δΈͺθŠ‚η‚Ήε‡ΊηŽ°εœ¨η½‘η»œδΈ­ζœ€ηŸ­θ·―εΎ„δΈŠηš„ι’‘ηŽ‡γ€‚" - -msgid "GraphDistancePanel.jXLabel2.text" -msgstr "δ»ŽδΈ€δΈͺη»™εšθ΅·ε§‹θŠ‚η‚Ήεˆ°ζ‰€ζœ‰ε…ΆεƒθŠ‚η‚Ήηš„εΉ³ε‡θ·η¦»γ€‚" - -msgid "GraphDistancePanel.jXLabel3.text" -msgstr "δ»ŽδΈ€δΈͺη»™εšθ΅·ε§‹θŠ‚η‚Ήεˆ°θ·ε…Άζœ€θΏœθŠ‚η‚Ήηš„θ·η¦»γ€‚" - -msgid "GraphDistancePanel.jLabel1.text" -msgstr "δ»‹ζ•°δΈ­εΏƒεΊ¦" - -msgid "GraphDistancePanel.jLabel2.text" -msgstr "η΄§ε―†δΈ­εΏƒεΊ¦" - -msgid "GraphDistancePanel.jLabel3.text" -msgstr "η¦»εΏƒηŽ‡:" - -msgid "GraphDistancePanel.header.description" -msgstr "ζ‰€ζœ‰θŠ‚η‚Ήε―ΉδΉ‹ι—΄ηš„εΉ³ε‡ε›Ύθ·η¦»γ€‚δΊ’η›ΈθΏžζŽ₯ηš„θŠ‚η‚Ήηš„ε›Ύθ·η¦»δΈΊ1γ€‚η›΄εΎ„ζ˜―ζœ€ι•Ώηš„δ»»δ½•δΈ€δΈͺθŠ‚η‚ΉδΉ‹ι—΄ηš„θ·η¦»γ€‚(即是一δΈͺζœ€ι₯θΏœηš„θŠ‚η‚Ήη›Έθ·ε€šθΏœ)。" - -msgid "GraphDistancePanel.header.title" -msgstr "距离" - -msgid "HitsPanel.header.description" -msgstr "θ‘η—每δΈͺθŠ‚η‚Ήηš„δΈ€δΈͺε•η‹¬ηš„ε€Όγ€‚η¬¬δΈ€δΈͺε€ΌοΌˆη€η§°η‘θΎ–εŒΊοΌ‰εΊ¦ι‡ζœ‰δ»·ε€Όηš„δΏ‘ζ―ε¦‚δ½•ε­˜ε‚¨εœ¨θ―₯θŠ‚η‚Ήγ€‚η¬¬δΊŒδΈͺε€ΌοΌˆη§°δΈΊι›†ηΊΏεŒΊοΌ‰εΊ¦ι‡ηš„θŠ‚η‚ΉθΏžζŽ₯ηš„θ΄¨ι‡γ€‚" - -msgid "HitsPanel.header.title" -msgstr "点击欑数" - -msgid "HitsPanel.epsilonLabel.text" -msgstr "εœζ­’ε‡†εˆ™οΌŒζ­€ε€ΌθΆŠε°οΌŒζ”Άζ•›ζ—Άι—΄θΆŠι•Ώγ€‚" - -msgid "PageRankPanel.jXHeader1.description" -msgstr "依ζη”¨ζˆ·θ·ŸιšθΏžζŽ₯ε°†ιžιšζœΊεˆ°θΎΎθΏ™δΈͺθŠ‚η‚Ήβ€œι‘΅ι’β€ζ₯ζŽ’εΊθŠ‚η‚Ήβ€œι‘΅ι’ζ•°β€γ€‚" - -msgid "PageRankPanel.jXHeader1.title" -msgstr "PageRank" - -msgid "PageRankPanel.jXLabel1.text" -msgstr "η”¨δΊŽζ¨‘ζ‹Ÿη”¨ζˆ·ιšε³ι‡ζ–°εΌ€ε§‹η½‘δΈŠε†²ζ΅ͺ。" - -msgid "PageRankPanel.jXLabel2.text" -msgstr "εœζ­’ε‡†εˆ™οΌŒζ­€ε€ΌθΆŠε°οΌŒζ”Άζ•›ζ—Άι—΄θΆŠι•Ώγ€‚" - -msgid "ModularityPanel.header.title" -msgstr "樑块性" - -msgid "ModularityPanel.header.description" -msgstr "η€ΎεŒΊζŽ’ζ΅‹η—法。" - -msgid "ConnectedComponentPanel.header.description" -msgstr "η‘εšη½‘η»œδΈ­θΏžζŽ₯η»„δ»Άζ•°η›γ€‚" - -msgid "ConnectedComponentPanel.undirectedRadioButton.text" -msgstr "无向" - -msgid "ConnectedComponentPanel.directedRadioButton.text" -msgstr "ζœ‰ε‘" - -msgid "ConnectedComponentPanel.header.title" -msgstr "连ζŽ₯η»„δ»Ά" - -msgid "ConnectedComponentPanel.jLabel1.text" -msgstr "(ε°†ζŽ’ζ΅‹εΌΊ&弱连ζŽ₯η»„δ»Ά)" - -msgid "ConnectedComponentPanel.jLabel2.text" -msgstr "(ε°†εͺζŽ’ζ΅‹εΌ±θΏžζŽ₯η»„δ»Ά)" - -msgid "EigenvectorCentralityPanel.header.description" -msgstr "εŸΊδΊŽθŠ‚η‚ΉθΏžζŽ₯ζ₯θ‘‘ι‡θŠ‚η‚Ήι‡θ¦ζ€§ηš„ζŒ‡ζ ‡γ€‚" - -msgid "EigenvectorCentralityPanel.header.title" -msgstr "特征向量中心度" - -msgid "EigenvectorCentralityPanel.iterationsTextField.text" -msgstr "jTextField1" - -msgid "EigenvectorCentralityPanel.labeliterations.text" -msgstr "迭代欑数:" - -msgid "EigenvectorCentralityPanel.directedButton.text" -msgstr "ζœ‰ε‘" - -msgid "EigenvectorCentralityPanel.undirectedButton.text" -msgstr "无向" - -msgid "GraphDistancePanel.normalizeButton.text" -msgstr "ε½’δΈ€εŒ–δΈ­εΏƒεΊ¦δΊŽεŒΊι—΄[0,1]" - -msgid "ConnectedComponentUI.name" -msgstr "连ζŽ₯η»„δ»Ά" - -msgid "ConnectedComponentUI.shortDescription" -msgstr "" - -msgid "ClusteringCoefficientUI.name" -msgstr "εΉ³ε‡θšη±»η³»ζ•°" - -msgid "ClusteringCoefficientUI.shortDescription" -msgstr "" - -msgid "DegreeDistributionUI.name" -msgstr "εΊ¦εΉ‚ηŽ‡" - -msgid "DegreeDistributionUI.shortDescription" -msgstr "" - -msgid "EigenvectorCentralityUI.name" -msgstr "特征向量中心度" - -msgid "EigenvectorCentralityUI.shortDescription" -msgstr "" - -msgid "GraphDensityUI.name" -msgstr "ε›Ύε―†εΊ¦" - -msgid "GraphDensityUI.shortDescription" -msgstr "" - -msgid "DiameterUI.name" -msgstr "η½‘η»œη›΄εΎ„" - -msgid "DiameterUI.shortDescription" -msgstr "" - -msgid "HitsUI.name" -msgstr "点击欑数" - -msgid "HitsUI.shortDescription" -msgstr "" - -msgid "InOutDegreeUI.name" -msgstr "平均度" - -msgid "InOutDegreeUI.shortDescription" -msgstr "" - -msgid "ModularityUI.name" -msgstr "ζ¨‘ε—εŒ–" - -msgid "ModularityUI.shortDescription" -msgstr "" - -msgid "PageRankUI.name" -msgstr "PageRank" - -msgid "PageRankUI.shortDescription" -msgstr "" - -msgid "PathLengthUI.name" -msgstr "平均路径长度" - -msgid "PathLengthUI.shortDescription" -msgstr "" - -msgid "WeightedDegreeUI.name" -msgstr "εΉ³ε‡εŠ ζƒεΊ¦" - -msgid "WeightedDegreeUI.shortDescription" -msgstr "" - -msgid "PageRankPanel.edgeWeightCheckbox.text" -msgstr "δ½Ώη”¨θΎΉηš„ζƒι‡" - -msgid "ModularityPanel.useWeightCheckbox.text" -msgstr "" - -msgid "ModularityPanel.jLabel1.text" -msgstr "" - -msgid "ModularityPanel.resolutionTextField.toolTipText" -msgstr "" - -msgid "ModularityPanel.resolutionTextField.text" -msgstr "" - -msgid "ModularityPanel.labelEdgeWeight.text" -msgstr "" - -msgid "ModularityPanel.labelResolution.text" -msgstr "" - -msgid "ModularityPanel.labelRandomize.text" -msgstr "" diff --git a/modules/TimelineAPI/pom.xml b/modules/TimelineAPI/pom.xml index ec81f9c932..b96ec6f754 100644 --- a/modules/TimelineAPI/pom.xml +++ b/modules/TimelineAPI/pom.xml @@ -4,13 +4,13 @@ gephi-parent org.gephi - 0.9-SNAPSHOT - ../.. + 0.11.3-SNAPSHOT + ../.. org.gephi - timeline - 0.9-SNAPSHOT + timeline-api + 0.11.3-SNAPSHOT nbm TimelineAPI @@ -18,15 +18,15 @@ ${project.groupId} - data-attributes-api + graph-api ${project.groupId} - dynamic-api + filters-api ${project.groupId} - graph-api + filters-plugin ${project.groupId} @@ -41,7 +41,7 @@ - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/TimelineAPI/src/main/java/org/gephi/timeline/GraphObserverThread.java b/modules/TimelineAPI/src/main/java/org/gephi/timeline/GraphObserverThread.java new file mode 100644 index 0000000000..e1d15efa3c --- /dev/null +++ b/modules/TimelineAPI/src/main/java/org/gephi/timeline/GraphObserverThread.java @@ -0,0 +1,49 @@ +/* + * To change this license header, choose License Headers in Project Properties. + * To change this template file, choose Tools | Templates + * and open the template in the editor. + */ + +package org.gephi.timeline; + +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Interval; + +/** + * @author mbastian + */ +public class GraphObserverThread extends Thread { + + private final TimelineControllerImpl timelineController; + private final TimelineModelImpl timelineModel; + private boolean stop; + private Interval interval; + + public GraphObserverThread(TimelineControllerImpl controller, TimelineModelImpl model) { + this.timelineModel = model; + this.timelineController = controller; + this.interval = model.getGraphModel().getTimeBounds(); + } + + @Override + public void run() { + while (!stop) { + GraphModel graphModel = timelineModel.getGraphModel(); + Interval bounds = graphModel.getTimeBounds(); + if (!bounds.equals(interval)) { + interval = bounds; + timelineController.setMinMax(interval.getLow(), interval.getHigh()); + } + try { + Thread.sleep(1000); + } catch (InterruptedException ex) { + + } + } + } + + public void stopThread() { + stop = true; + } + +} diff --git a/modules/TimelineAPI/src/main/java/org/gephi/timeline/TimelineChartImpl.java b/modules/TimelineAPI/src/main/java/org/gephi/timeline/TimelineChartImpl.java index 6782e3bc7a..62f183faf1 100644 --- a/modules/TimelineAPI/src/main/java/org/gephi/timeline/TimelineChartImpl.java +++ b/modules/TimelineAPI/src/main/java/org/gephi/timeline/TimelineChartImpl.java @@ -39,20 +39,22 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.timeline; import java.math.BigDecimal; import java.math.BigInteger; -import org.gephi.data.attributes.api.AttributeColumn; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.types.IntervalMap; +import org.gephi.graph.api.types.TimestampMap; import org.gephi.timeline.api.TimelineChart; /** - * * @author Mathieu Bastian */ public class TimelineChartImpl implements TimelineChart { - private final AttributeColumn column; + private final String column; private final Number[] x; private final Number[] y; private final Number minY; @@ -60,7 +62,7 @@ public class TimelineChartImpl implements TimelineChart { private final Number minX; private final Number maxX; - public TimelineChartImpl(AttributeColumn column, Number[] x, Number y[]) { + public TimelineChartImpl(String column, Number[] x, Number[] y) { this.column = column; this.x = x; this.y = y; @@ -70,6 +72,70 @@ public TimelineChartImpl(AttributeColumn column, Number[] x, Number y[]) { this.maxX = calculateMax(x); } + public static TimelineChartImpl of(Graph graph, String column) { + if (graph != null && column != null) { + Object dynamicValue = graph.getAttribute(column); + if (dynamicValue instanceof IntervalMap) { + return TimelineChartImpl.of(column, (IntervalMap) dynamicValue); + } else if (dynamicValue instanceof TimestampMap) { + return TimelineChartImpl.of(column, (TimestampMap) dynamicValue); + } + } + + return null; + } + + public static TimelineChartImpl of(String column, IntervalMap dynamicValue) { + double[] lowsAndHighs = dynamicValue.getIntervals(); + Object[] values = dynamicValue.toValuesArray(); + + final Number[] xs = new Number[lowsAndHighs.length]; + final Number[] ys = new Number[lowsAndHighs.length]; + + for (int i = 0; i < lowsAndHighs.length; i += 2) { + xs[i] = lowsAndHighs[i]; + xs[i + 1] = lowsAndHighs[i + 1]; + + Number numValue = (Number) values[i]; + if (numValue == null) { + numValue = 0.0; + } + + ys[i] = numValue; + ys[i + 1] = numValue; + } + + if (xs.length > 0) { + return new TimelineChartImpl(column, xs, ys); + } else { + return null; + } + } + + public static TimelineChartImpl of(String column, TimestampMap dynamicValue) { + double[] timestamps = dynamicValue.getTimestamps(); + Object[] values = dynamicValue.toValuesArray(); + + final Number[] xs = new Number[timestamps.length]; + final Number[] ys = new Number[timestamps.length]; + + for (int i = 0; i < timestamps.length; i++) { + xs[i] = timestamps[i]; + Number numValue = (Number) values[i]; + if (numValue == null) { + numValue = 0.0; + } + + ys[i] = numValue; + } + + if (xs.length > 0) { + return new TimelineChartImpl(column, xs, ys); + } else { + return null; + } + } + @Override public Number[] getX() { return x; @@ -117,7 +183,7 @@ public Number getMaxX() { } @Override - public AttributeColumn getColumn() { + public String getColumn() { return column; } @@ -128,13 +194,13 @@ private Number calculateMin(Number[] yValues) { } Number t = yValues[0]; if (t instanceof Double) { - return new Double(min); + return min; } else if (t instanceof Float) { return new Float(min); } else if (t instanceof Short) { - return new Short((short) min); + return (short) min; } else if (t instanceof Long) { - return new Long((long) min); + return (long) min; } else if (t instanceof BigInteger) { return new BigDecimal(min); } @@ -148,13 +214,13 @@ private Number calculateMax(Number[] yValues) { } Number t = yValues[0]; if (t instanceof Double) { - return new Double(max); + return max; } else if (t instanceof Float) { return new Float(max); } else if (t instanceof Short) { - return new Short((short) max); + return (short) max; } else if (t instanceof Long) { - return new Long((long) max); + return (long) max; } else if (t instanceof BigInteger) { return new BigDecimal(max); } diff --git a/modules/TimelineAPI/src/main/java/org/gephi/timeline/TimelineControllerImpl.java b/modules/TimelineAPI/src/main/java/org/gephi/timeline/TimelineControllerImpl.java index 1dec0f4470..8404c00353 100644 --- a/modules/TimelineAPI/src/main/java/org/gephi/timeline/TimelineControllerImpl.java +++ b/modules/TimelineAPI/src/main/java/org/gephi/timeline/TimelineControllerImpl.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.timeline; import java.util.ArrayList; @@ -47,46 +48,49 @@ Development and Distribution License("CDDL") (collectively, the import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ThreadFactory; import java.util.concurrent.TimeUnit; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeController; -import org.gephi.data.attributes.api.AttributeModel; -import org.gephi.data.attributes.api.AttributeUtils; -import org.gephi.data.attributes.type.DynamicType; -import org.gephi.data.attributes.type.Interval; -import org.gephi.data.attributes.type.TimeInterval; -import org.gephi.dynamic.api.DynamicController; -import org.gephi.dynamic.api.DynamicModelEvent; -import org.gephi.dynamic.api.DynamicModelListener; +import org.gephi.filters.api.FilterController; +import org.gephi.filters.api.FilterModel; +import org.gephi.filters.api.Query; +import org.gephi.filters.api.Range; +import org.gephi.filters.plugin.dynamic.DynamicRangeBuilder; +import org.gephi.filters.plugin.dynamic.DynamicRangeBuilder.DynamicRangeFilter; +import org.gephi.filters.spi.FilterBuilder; import org.gephi.graph.api.Graph; -import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.TimeFormat; +import org.gephi.graph.api.types.IntervalMap; +import org.gephi.graph.api.types.TimestampMap; import org.gephi.project.api.ProjectController; import org.gephi.project.api.Workspace; import org.gephi.project.api.WorkspaceListener; +import org.gephi.project.spi.Controller; +import org.gephi.timeline.api.TimelineChart; +import org.gephi.timeline.api.TimelineController; +import org.gephi.timeline.api.TimelineModel; import org.gephi.timeline.api.TimelineModel.PlayMode; -import org.gephi.timeline.api.*; +import org.gephi.timeline.api.TimelineModelEvent; +import org.gephi.timeline.api.TimelineModelListener; import org.openide.util.Lookup; import org.openide.util.lookup.ServiceProvider; +import org.openide.util.lookup.ServiceProviders; /** - * * @author Mathieu Bastian */ -@ServiceProvider(service = TimelineController.class) -public class TimelineControllerImpl implements TimelineController, DynamicModelListener { +@ServiceProviders({ + @ServiceProvider(service = TimelineController.class), + @ServiceProvider(service = Controller.class, position = 3000)}) +public class TimelineControllerImpl implements TimelineController, Controller { private final List listeners; - private TimelineModelImpl model; - private final DynamicController dynamicController; - private AttributeModel attributeModel; + private GraphObserverThread observerThread; private ScheduledExecutorService playExecutor; public TimelineControllerImpl() { - listeners = new ArrayList(); + listeners = new ArrayList<>(); //Workspace events ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); - dynamicController = Lookup.getDefault().lookup(DynamicController.class); - pc.addWorkspaceListener(new WorkspaceListener() { @Override @@ -95,18 +99,19 @@ public void initialize(Workspace workspace) { @Override public void select(Workspace workspace) { - model = workspace.getLookup().lookup(TimelineModelImpl.class); - if (model == null) { - model = new TimelineModelImpl(dynamicController.getModel(workspace)); - workspace.add(model); - } - attributeModel = Lookup.getDefault().lookup(AttributeController.class).getModel(workspace); - setup(); + TimelineModelImpl model = workspace.getLookup().lookup(TimelineModelImpl.class); + fireTimelineModelEvent(new TimelineModelEvent(TimelineModelEvent.EventType.MODEL, model, null)); + observerThread = new GraphObserverThread(TimelineControllerImpl.this, model); + observerThread.start(); } @Override public void unselect(Workspace workspace) { - unsetup(); + stopPlay(); + if (observerThread != null) { + observerThread.stopThread(); + observerThread = null; + } } @Override @@ -115,224 +120,202 @@ public void close(Workspace workspace) { @Override public void disable() { - model = null; - attributeModel = null; + stopPlay(); + if (observerThread != null) { + observerThread.stopThread(); + observerThread = null; + } fireTimelineModelEvent(new TimelineModelEvent(TimelineModelEvent.EventType.MODEL, null, null)); } }); - - if (pc.getCurrentWorkspace() != null) { - model = pc.getCurrentWorkspace().getLookup().lookup(TimelineModelImpl.class); - if (model == null) { - model = new TimelineModelImpl(dynamicController.getModel(pc.getCurrentWorkspace())); - pc.getCurrentWorkspace().add(model); - } - attributeModel = Lookup.getDefault().lookup(AttributeController.class).getModel(pc.getCurrentWorkspace()); - setup(); - } } @Override - public synchronized TimelineModel getModel(Workspace workspace) { - return workspace.getLookup().lookup(TimelineModel.class); + public TimelineModelImpl newModel(Workspace workspace) { + return new TimelineModelImpl(workspace); } @Override - public synchronized TimelineModel getModel() { - return model; + public Class getModelClass() { + return TimelineModelImpl.class; } - private void setup() { - fireTimelineModelEvent(new TimelineModelEvent(TimelineModelEvent.EventType.MODEL, model, null)); - - dynamicController.addModelListener(this); + @Override + public TimelineModelImpl getModel(Workspace workspace) { + return Controller.super.getModel(workspace); } - private void unsetup() { - dynamicController.removeModelListener(this); + @Override + public TimelineModelImpl getModel() { + return Controller.super.getModel(); } @Override - public void dynamicModelChanged(DynamicModelEvent event) { - if (event.getEventType().equals(DynamicModelEvent.EventType.MIN_CHANGED) - || event.getEventType().equals(DynamicModelEvent.EventType.MAX_CHANGED)) { - double newMax = event.getSource().getMax(); - double newMin = event.getSource().getMin(); - setMinMax(newMin, newMax); - } else if (event.getEventType().equals(DynamicModelEvent.EventType.VISIBLE_INTERVAL)) { - TimeInterval timeInterval = (TimeInterval) event.getData(); - double min = timeInterval.getLow(); - double max = timeInterval.getHigh(); - fireTimelineModelEvent(new TimelineModelEvent(TimelineModelEvent.EventType.INTERVAL, model, new double[]{min, max})); - } else if (event.getEventType().equals(DynamicModelEvent.EventType.TIME_FORMAT)) { - fireTimelineModelEvent(new TimelineModelEvent(TimelineModelEvent.EventType.MODEL, model, null)); //refresh display + public void setTimeFormat(TimeFormat timeFormat) { + TimelineModelImpl currentModel = getModel(); + if (currentModel != null) { + currentModel.getGraphModel().setTimeFormat(timeFormat); } } - private boolean setMinMax(double min, double max) { - if (model != null) { - if (min > max) { - throw new IllegalArgumentException("min should be less than max"); - } else if (min == max) { - //Avoid setting values at this point - return false; - } - double previousBoundsMin = model.getCustomMin(); - double previousBoundsMax = model.getCustomMax(); - - //Custom bounds - if (model.getCustomMin() == model.getPreviousMin()) { - model.setCustomMin(min); - } else if (model.getCustomMin() < min) { - model.setCustomMin(min); - } - if (model.getCustomMax() == model.getPreviousMax()) { - model.setCustomMax(max); - } else if (model.getCustomMax() > max) { - model.setCustomMax(max); - } - - model.setPreviousMin(min); - model.setPreviousMax(max); - - if (model.hasValidBounds()) { - fireTimelineModelEvent(new TimelineModelEvent(TimelineModelEvent.EventType.MIN_MAX, model, new double[]{min, max})); - - if (model.getCustomMax() != max || model.getCustomMin() != min) { - fireTimelineModelEvent(new TimelineModelEvent(TimelineModelEvent.EventType.CUSTOM_BOUNDS, model, new double[]{min, max})); - } - } + protected boolean setMinMax(double min, double max) { + TimelineModelImpl currentModel = getModel(); + if (currentModel == null) { + return false; + } + double[] prevCustomBounds = new double[2]; + if (!currentModel.updateMinMax(min, max, prevCustomBounds)) { + return false; + } + if (currentModel.hasValidBounds()) { + fireTimelineModelEvent( + new TimelineModelEvent(TimelineModelEvent.EventType.MIN_MAX, currentModel, new double[] {min, max})); - if ((Double.isInfinite(previousBoundsMax) || Double.isInfinite(previousBoundsMin)) && model.hasValidBounds()) { - fireTimelineModelEvent(new TimelineModelEvent(TimelineModelEvent.EventType.VALID_BOUNDS, model, true)); - } else if (!Double.isInfinite(previousBoundsMax) && !Double.isInfinite(previousBoundsMin) && !model.hasValidBounds()) { - fireTimelineModelEvent(new TimelineModelEvent(TimelineModelEvent.EventType.VALID_BOUNDS, model, false)); + if (currentModel.getCustomMax() != max || currentModel.getCustomMin() != min) { + fireTimelineModelEvent(new TimelineModelEvent(TimelineModelEvent.EventType.CUSTOM_BOUNDS, currentModel, + new double[] {min, max})); } - - return true; } - - return false; + if ((Double.isInfinite(prevCustomBounds[1]) || Double.isInfinite(prevCustomBounds[0])) && + currentModel.hasValidBounds()) { + fireTimelineModelEvent( + new TimelineModelEvent(TimelineModelEvent.EventType.VALID_BOUNDS, currentModel, true)); + } else if (!Double.isInfinite(prevCustomBounds[1]) && !Double.isInfinite(prevCustomBounds[0]) && + !currentModel.hasValidBounds()) { + fireTimelineModelEvent( + new TimelineModelEvent(TimelineModelEvent.EventType.VALID_BOUNDS, currentModel, false)); + } + return true; } @Override public void setCustomBounds(double min, double max) { - if (model != null) { - if (model.getCustomMin() != min || model.getCustomMax() != max) { - if (min >= max) { - throw new IllegalArgumentException("min should be less than max"); - } - if (min < model.getMin() || max > model.getMax()) { - throw new IllegalArgumentException("Min and max should be in the bounds"); - } - - //Interval - if (model.getIntervalStart() < min || model.getIntervalEnd() > max) { - dynamicController.setVisibleInterval(min, max); - } - - //Custom bounds - double[] val = new double[]{min, max}; - model.setCustomMin(min); - model.setCustomMax(max); - fireTimelineModelEvent(new TimelineModelEvent(TimelineModelEvent.EventType.CUSTOM_BOUNDS, model, val)); - } + TimelineModelImpl currentModel = getModel(); + if (currentModel != null && currentModel.setCustomBounds(min, max)) { + fireTimelineModelEvent(new TimelineModelEvent(TimelineModelEvent.EventType.CUSTOM_BOUNDS, currentModel, + new double[] {min, max})); } } @Override public void setEnabled(boolean enabled) { - if (model != null) { - if (enabled != model.isEnabled() && model.hasValidBounds()) { - model.setEnabled(enabled); - fireTimelineModelEvent(new TimelineModelEvent(TimelineModelEvent.EventType.ENABLED, model, enabled)); - } - if (!enabled) { - //Disable filtering - dynamicController.setVisibleInterval(new TimeInterval()); - } + TimelineModelImpl currentModel = getModel(); + if (currentModel == null) { + return; + } + if (currentModel.setEnabled(enabled)) { + fireTimelineModelEvent(new TimelineModelEvent(TimelineModelEvent.EventType.ENABLED, currentModel, enabled)); + } + if (!enabled) { + setInterval(Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY); } } @Override public void setInterval(double from, double to) { - if (model != null) { - if (model.getIntervalStart() != from || model.getIntervalEnd() != to) { - if (from >= to) { - throw new IllegalArgumentException("from should be less than to"); + TimelineModelImpl currentModel = getModel(); + if (currentModel == null) { + return; + } + FilterController filterController = Lookup.getDefault().lookup(FilterController.class); + FilterModel filterModel = filterController.getModel(currentModel.getWorkspace()); + if (filterModel == null || !currentModel.setInterval(from, to)) { + return; + } + applyIntervalFilter(currentModel, filterModel, from, to); + } + + private void applyIntervalFilter(TimelineModelImpl currentModel, FilterModel filterModel, double from, double to) { + Query dynamicQuery = null; + boolean selecting = false; + + if (filterModel.getCurrentQuery() != null) { + Query query = filterModel.getCurrentQuery(); + Query[] dynamicQueries = query.getQueries(DynamicRangeFilter.class); + if (dynamicQueries.length > 0) { + dynamicQuery = query; + selecting = filterModel.isSelecting(); + } + } else if (filterModel.getQueries().length == 1) { + Query query = filterModel.getQueries()[0]; + Query[] dynamicQueries = query.getQueries(DynamicRangeFilter.class); + if (dynamicQueries.length > 0) { + dynamicQuery = query; + } + } + + FilterController filterController = Lookup.getDefault().lookup(FilterController.class); + if (Double.isInfinite(from) && Double.isInfinite(to)) { + if (dynamicQuery != null) { + filterController.remove(dynamicQuery); + } + } else { + if (dynamicQuery == null) { + DynamicRangeBuilder rangeBuilder = + filterModel.getLibrary().getLookup().lookup(DynamicRangeBuilder.class); + if (rangeBuilder != null) { + FilterBuilder[] fb = rangeBuilder.getBuilders(filterModel.getWorkspace()); + if (fb.length > 0) { + dynamicQuery = filterController.createQuery(fb[0]); + filterController.add(dynamicQuery); + } } - if (from < model.getCustomMin() || to > model.getCustomMax()) { - throw new IllegalArgumentException("From and to should be in the bounds"); + } + if (dynamicQuery != null) { + dynamicQuery.getFilter().getProperties()[0].setValue(new Range(from, to)); + if (selecting) { + filterController.selectVisible(dynamicQuery); + } else { + filterController.filterVisible(dynamicQuery); } - dynamicController.setVisibleInterval(from, to); + fireTimelineModelEvent( + new TimelineModelEvent(TimelineModelEvent.EventType.INTERVAL, currentModel, + new double[] {from, to})); } } } @Override - public AttributeColumn[] getDynamicGraphColumns() { - if (attributeModel != null) { - List columns = new ArrayList(); - AttributeUtils utils = AttributeUtils.getDefault(); - for (AttributeColumn col : attributeModel.getGraphTable().getColumns()) { - if (utils.isDynamicNumberColumn(col)) { - columns.add(col); + public String[] getDynamicGraphColumns() { + TimelineModelImpl currentModel = getModel(); + if (currentModel != null) { + GraphModel graphModel = currentModel.getGraphModel(); + List columns = new ArrayList<>(); + for (String k : graphModel.getGraph().getAttributeKeys()) { + Object a = graphModel.getGraph().getAttribute(k); + if (a instanceof IntervalMap || a instanceof TimestampMap) { + columns.add(k); } } - return columns.toArray(new AttributeColumn[0]); + return columns.toArray(new String[0]); } - return new AttributeColumn[0]; + return new String[0]; } @Override - public void selectColumn(final AttributeColumn column) { - if (model != null) { - if (!(model.getChart() == null && column == null) - || (model.getChart() != null && !model.getChart().getColumn().equals(column))) { - if (column != null && !attributeModel.getGraphTable().hasColumn(column.getId())) { - throw new IllegalArgumentException("Not a graph column"); - } - Thread thread = new Thread(new Runnable() { - - @Override - public void run() { - TimelineChart chart = null; - Graph graph = Lookup.getDefault().lookup(GraphController.class).getModel().getGraphVisible(); - if (column != null) { - DynamicType type = (DynamicType) graph.getAttributes().getValue(column.getIndex()); - if (type != null) { - List intervals = type.getIntervals(model.getCustomMin(), model.getCustomMax()); - Number[] xs = new Number[intervals.size() * 2]; - Number[] ys = new Number[intervals.size() * 2]; - int i = 0; - Interval interval; - for (int j = 0; j < intervals.size(); j++) { - interval = intervals.get(j); - Number x = (Double) interval.getLow(); - Number y = (Number) interval.getValue(); - xs[i] = x; - ys[i] = y; - i++; - if (j != intervals.size() - 1 && intervals.get(j + 1).getLow() < interval.getHigh()) { - xs[i] = (Double) intervals.get(j + 1).getLow(); - } else { - xs[i] = (Double) interval.getHigh(); - } - ys[i] = y; - i++; - } - if (xs.length > 0) { - chart = new TimelineChartImpl(column, xs, ys); - } - } - } - model.setChart(chart); - - fireTimelineModelEvent(new TimelineModelEvent(TimelineModelEvent.EventType.CHART, model, chart)); - } - }, "Timeline Chart"); - thread.start(); + public void selectColumn(final String column) { + final TimelineModelImpl currentModel = getModel(); + if (currentModel == null) { + return; + } + if (!(currentModel.getChart() == null && column == null) + || (currentModel.getChart() != null && !currentModel.getChart().getColumn().equals(column))) { + if (column != null && currentModel.getGraphModel().getGraph().getAttribute(column) == null) { + throw new IllegalArgumentException("Not a graph column"); } + Thread thread = new Thread(new Runnable() { + + @Override + public void run() { + Graph graph = currentModel.getGraphModel().getGraphVisible(); + TimelineChart chart = TimelineChartImpl.of(graph, column); + currentModel.setChart(chart); + + fireTimelineModelEvent( + new TimelineModelEvent(TimelineModelEvent.EventType.CHART, currentModel, chart)); + } + }, "Timeline Chart"); + thread.start(); } } @@ -356,65 +339,70 @@ public synchronized void removeListener(TimelineModelListener listener) { @Override public void startPlay() { - if (model != null && !model.isPlaying()) { - model.setPlaying(true); - playExecutor = Executors.newScheduledThreadPool(1, new ThreadFactory() { + TimelineModelImpl currentModel = getModel(); + if (currentModel == null || currentModel.isPlaying()) { + return; + } + currentModel.setPlaying(true); + playExecutor = Executors.newScheduledThreadPool(1, new ThreadFactory() { - @Override - public Thread newThread(Runnable r) { - return new Thread(r, "Timeline animator"); - } - }); - playExecutor.scheduleAtFixedRate(new Runnable() { + @Override + public Thread newThread(Runnable r) { + return new Thread(r, "Timeline animator"); + } + }); + playExecutor.scheduleAtFixedRate(new Runnable() { - @Override - public void run() { - double min = model.getCustomMin(); - double max = model.getCustomMax(); - double duration = max - min; - double step = (duration * model.getPlayStep()) * 0.95; - double from = model.getIntervalStart(); - double to = model.getIntervalEnd(); - boolean bothBounds = model.getPlayMode().equals(TimelineModel.PlayMode.TWO_BOUNDS); - boolean someAction = false; - if (bothBounds) { - if (step > 0 && to < max) { - from += step; - to += step; - someAction = true; - } else if (step < 0 && from > min) { - from += step; - to += step; - someAction = true; - } - } else { - if (step > 0 && to < max) { - to += step; - someAction = true; - } else if (step < 0 && from > min) { - from += step; - someAction = true; - } + @Override + public void run() { + TimelineModelImpl m = getModel(); + if (m == null) { + return; + } + double min = m.getCustomMin(); + double max = m.getCustomMax(); + double duration = max - min; + double step = (duration * m.getPlayStep()) * 0.95; + double from = m.getIntervalStart(); + double to = m.getIntervalEnd(); + boolean bothBounds = m.getPlayMode().equals(TimelineModel.PlayMode.TWO_BOUNDS); + boolean someAction = false; + if (bothBounds) { + if (step > 0 && to < max) { + from += step; + to += step; + someAction = true; + } else if (step < 0 && from > min) { + from += step; + to += step; + someAction = true; } + } else if (step > 0 && to < max) { + to += step; + someAction = true; + } else if (step < 0 && from > min) { + from += step; + someAction = true; + } - if (someAction) { - from = Math.max(from, min); - to = Math.min(to, max); - setInterval(from, to); - } else { - stopPlay(); - } + if (someAction) { + from = Math.max(from, min); + to = Math.min(to, max); + setInterval(from, to); + } else { + stopPlay(); } - }, model.getPlayDelay(), model.getPlayDelay(), TimeUnit.MILLISECONDS); - fireTimelineModelEvent(new TimelineModelEvent(TimelineModelEvent.EventType.PLAY_START, model, null)); - } + } + }, currentModel.getPlayDelay(), currentModel.getPlayDelay(), TimeUnit.MILLISECONDS); + fireTimelineModelEvent(new TimelineModelEvent(TimelineModelEvent.EventType.PLAY_START, currentModel, null)); } @Override public void stopPlay() { - if (model != null && model.isPlaying()) { - model.setPlaying(false); - fireTimelineModelEvent(new TimelineModelEvent(TimelineModelEvent.EventType.PLAY_STOP, model, null)); + TimelineModelImpl currentModel = getModel(); + if (currentModel != null && currentModel.isPlaying()) { + currentModel.setPlaying(false); + fireTimelineModelEvent(new TimelineModelEvent(TimelineModelEvent.EventType.PLAY_STOP, currentModel, null)); } if (playExecutor != null) { playExecutor.shutdown(); @@ -423,22 +411,25 @@ public void stopPlay() { @Override public void setPlaySpeed(int delay) { - if (model != null) { - model.setPlayDelay(delay); + TimelineModelImpl currentModel = getModel(); + if (currentModel != null) { + currentModel.setPlayDelay(delay); } } @Override public void setPlayStep(double step) { - if (model != null) { - model.setPlayStep(step); + TimelineModelImpl currentModel = getModel(); + if (currentModel != null) { + currentModel.setPlayStep(step); } } @Override public void setPlayMode(PlayMode playMode) { - if (model != null) { - model.setPlayMode(playMode); + TimelineModelImpl currentModel = getModel(); + if (currentModel != null) { + currentModel.setPlayMode(playMode); } } } diff --git a/modules/TimelineAPI/src/main/java/org/gephi/timeline/TimelineModelImpl.java b/modules/TimelineAPI/src/main/java/org/gephi/timeline/TimelineModelImpl.java index a5de0353fa..144482711d 100644 --- a/modules/TimelineAPI/src/main/java/org/gephi/timeline/TimelineModelImpl.java +++ b/modules/TimelineAPI/src/main/java/org/gephi/timeline/TimelineModelImpl.java @@ -39,27 +39,33 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.timeline; import java.util.concurrent.atomic.AtomicBoolean; -import org.gephi.dynamic.api.DynamicModel; -import org.gephi.dynamic.api.DynamicModel.TimeFormat; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Interval; +import org.gephi.graph.api.TimeFormat; +import org.gephi.project.api.Workspace; +import org.gephi.project.spi.Model; import org.gephi.timeline.api.TimelineChart; import org.gephi.timeline.api.TimelineModel; +import org.openide.util.Lookup; /** - * * @author Mathieu Bastian */ -public class TimelineModelImpl implements TimelineModel { +public class TimelineModelImpl implements TimelineModel, Model { + private final Workspace workspace; + private final GraphModel graphModel; + private final AtomicBoolean playing; private boolean enabled; - private DynamicModel dynamicModel; private double customMin; private double customMax; //Animation private int playDelay; - private AtomicBoolean playing; private double playStep; private PlayMode playMode; //Chart @@ -67,17 +73,21 @@ public class TimelineModelImpl implements TimelineModel { //MinMax private double previousMin; private double previousMax; - - public TimelineModelImpl(DynamicModel dynamicModel) { - this.dynamicModel = dynamicModel; - this.customMin = dynamicModel.getMin(); - this.customMax = dynamicModel.getMax(); + // + private Interval interval; + + public TimelineModelImpl(Workspace workspace) { + this.workspace = workspace; + this.graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(workspace); + this.customMin = graphModel.getTimeBounds().getLow(); + this.customMax = graphModel.getTimeBounds().getHigh(); this.previousMin = customMin; this.previousMax = customMax; playDelay = 100; playStep = 0.01; playing = new AtomicBoolean(false); playMode = PlayMode.TWO_BOUNDS; + interval = new Interval(customMin, customMax); } @Override @@ -85,32 +95,36 @@ public boolean isEnabled() { return enabled; } + /** + * Sets enabled state. Returns {@code true} if the state actually changed. + * Only allows enabling when valid bounds exist. + */ + public boolean setEnabled(boolean enabled) { + if (this.enabled == enabled || (enabled && !hasValidBounds())) { + return false; + } + this.enabled = enabled; + return true; + } + @Override public double getMin() { - return dynamicModel.getMin(); + return graphModel.getTimeBounds().getLow(); } @Override public double getMax() { - return dynamicModel.getMax(); + return graphModel.getTimeBounds().getHigh(); } - public double getPreviousMin() { + double getPreviousMin() { return previousMin; } - public double getPreviousMax() { + double getPreviousMax() { return previousMax; } - public void setPreviousMax(double previousMax) { - this.previousMax = previousMax; - } - - public void setPreviousMin(double previousMin) { - this.previousMin = previousMin; - } - @Override public double getCustomMin() { return customMin; @@ -121,15 +135,61 @@ public double getCustomMax() { return customMax; } + /** + * Validates and updates custom bounds. Returns {@code true} if the bounds changed. + */ + public boolean setCustomBounds(double min, double max) { + if (customMin == min && customMax == max) { + return false; + } + if (min >= max) { + throw new IllegalArgumentException("min should be less than max"); + } + if (min < getMin() || max > getMax()) { + throw new IllegalArgumentException("Min and max should be in the bounds"); + } + customMin = min; + customMax = max; + return true; + } + + /** + * Adjusts custom and previous min/max bounds based on a new observed time range. + * Returns {@code true} if the update was applied (min != max). + * Captures the previous custom bounds before update into {@code previousCustomBounds[0..1]} + * so the caller can detect valid-bounds transitions. + */ + public boolean updateMinMax(double min, double max, double[] previousCustomBounds) { + if (min > max) { + throw new IllegalArgumentException("min should be less than max"); + } + if (min == max) { + return false; + } + previousCustomBounds[0] = customMin; + previousCustomBounds[1] = customMax; + + if (customMin == previousMin || customMin < min) { + customMin = min; + } + if (customMax == previousMax || customMax > max) { + customMax = max; + } + previousMin = min; + previousMax = max; + return true; + } + @Override public boolean hasCustomBounds() { - return customMax != dynamicModel.getMax() || customMin != dynamicModel.getMin(); + Interval tm = graphModel.getTimeBounds(); + return customMax != tm.getHigh() || customMin != tm.getLow(); } @Override public double getIntervalStart() { - double vi = dynamicModel.getVisibleInterval().getLow(); - if(Double.isInfinite(vi)) { + double vi = interval.getLow(); + if (Double.isInfinite(vi)) { return getCustomMin(); } return vi; @@ -137,8 +197,8 @@ public double getIntervalStart() { @Override public double getIntervalEnd() { - double vi = dynamicModel.getVisibleInterval().getHigh(); - if(Double.isInfinite(vi)) { + double vi = interval.getHigh(); + if (Double.isInfinite(vi)) { return getCustomMax(); } return vi; @@ -146,28 +206,44 @@ public double getIntervalEnd() { @Override public TimeFormat getTimeFormat() { - return dynamicModel.getTimeFormat(); - } - - public DynamicModel getDynamicModel() { - return dynamicModel; + return graphModel.getTimeFormat(); } - public void setCustomMax(double customMax) { - this.customMax = customMax; + /** + * Validates and stores the interval. Returns {@code true} if the interval changed. + */ + public boolean setInterval(double from, double to) { + if (from >= to) { + throw new IllegalArgumentException("from should be less than to"); + } + if (!(Double.isInfinite(from) && Double.isInfinite(to))) { + if (from < customMin || to > customMax) { + throw new IllegalArgumentException("From and to should be in the bounds"); + } + } + if (getIntervalStart() == from && getIntervalEnd() == to) { + return false; + } + interval = new Interval(from, to); + return true; } - public void setCustomMin(double customMin) { - this.customMin = customMin; + @Override + public boolean hasValidBounds() { + Interval i = graphModel.getTimeBounds(); + return !Double.isInfinite(i.getLow()) && !Double.isInfinite(i.getHigh()); } - public void setEnabled(boolean enabled) { - this.enabled = enabled; + public GraphModel getGraphModel() { + return graphModel; } - @Override - public boolean hasValidBounds() { - return !Double.isInfinite(dynamicModel.getMin()) && !Double.isInfinite(dynamicModel.getMax()); + /** + * Returns the workspace this model belongs to. Used by the controller to obtain + * workspace-specific services (e.g. FilterModel) without storing them. + */ + public Workspace getWorkspace() { + return workspace; } @Override diff --git a/modules/TimelineAPI/src/main/java/org/gephi/timeline/api/TimelineChart.java b/modules/TimelineAPI/src/main/java/org/gephi/timeline/api/TimelineChart.java index 9ae0085921..ee4be51cdc 100644 --- a/modules/TimelineAPI/src/main/java/org/gephi/timeline/api/TimelineChart.java +++ b/modules/TimelineAPI/src/main/java/org/gephi/timeline/api/TimelineChart.java @@ -39,72 +39,80 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.timeline.api; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.api.AttributeModel; -import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphModel; /** - * Sparkline type chart visible in the timeline, for instance the number of nodes - * over time. + * Sparkline type chart visible in the timeline, for instance the number of + * nodes over time. *

            * Charts are usually created from the Statistics module and data are saved - * within {@link Graph#getAttributes()}. Columns can be accessed from the graph table - * in the {@link AttributeModel#getGraphTable() }. - * + * within {@link GraphModel}. Columns can be accessed from the graph + * table in the {@link GraphModel}. + *

            + * * @author Mathieu Bastian - * @see TimelineController#selectColumn(org.gephi.data.attributes.api.AttributeColumn) + * @see TimelineController#selectColumn(java.lang.String) */ public interface TimelineChart { /** * The attribute column used to create this chart. + * * @return the attribute column */ - public AttributeColumn getColumn(); + String getColumn(); /** * Returns the X values of this chart. + * * @return the X values */ - public Number[] getX(); + Number[] getX(); /** * Returns the Y values of this chart. + * * @return the Y values */ - public Number[] getY(); - + Number[] getY(); + /** - * Return the Y value for the given x position. It returns the closest - * value, as x may not exist. + * Return the Y value for the given x position. It returns the + * closest value, as x may not exist. + * * @param x the point in time * @return the Y value */ - public Number getY(Number x); + Number getY(Number x); /** * Returns the min Y value .This is the minimum value in the chart. + * * @return the min Y value */ - public Number getMinY(); + Number getMinY(); /** * Returns the max Y value. This is the maximum value in the chart. + * * @return the max Y value */ - public Number getMaxY(); - + Number getMaxY(); + /** * Returns the min X value .This is the minimum interval in the chart. + * * @return the min X value */ - public Number getMinX(); + Number getMinX(); /** * Returns the max X value. This is the maximum interval in the chart. + * * @return the max X value */ - public Number getMaxX(); + Number getMaxX(); } diff --git a/modules/TimelineAPI/src/main/java/org/gephi/timeline/api/TimelineController.java b/modules/TimelineAPI/src/main/java/org/gephi/timeline/api/TimelineController.java index 2d6226ac9f..943a824664 100644 --- a/modules/TimelineAPI/src/main/java/org/gephi/timeline/api/TimelineController.java +++ b/modules/TimelineAPI/src/main/java/org/gephi/timeline/api/TimelineController.java @@ -39,29 +39,30 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.timeline.api; -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.dynamic.api.DynamicModel; +import org.gephi.graph.api.TimeFormat; import org.gephi.project.api.Workspace; /** * Controls the timeline bounds and animation features. *

            - * By default the timeline is disabled and can be enabled with the setEnabled() - * method. Once enabled, the controller is setting its interval value to the - * {@link DynamicModel}. - *

            - * The interval can be animated using the startPlay() and stopPlay() - * methods. Configuration parameters are also available. + * By default the timeline is disabled and can be enabled with the + * setEnabled() method. Once enabled, the controller is setting its + * interval value to the DynamicModel. + *

            *

            - * This controller also allows to lookup graph attribute columns that can be used - * as sparklines (e.g. node count, average degree...). Use the selectColumn() - * to create a {@link TimelineChart} accessible from the TimelineModel + * The interval can be animated using the startPlay() and + * stopPlay() methods. Configuration parameters are also available. + *

            *

            - * All interval values are in the same space as the DynamicAPI module and - * no value should eb out of the min/max bounds maintained by the DynamicModel. - * + * This controller also allows to lookup graph attribute columns that can be + * used as sparklines (e.g. node count, average degree...). Use the + * selectColumn() to create a {@link TimelineChart} accessible from + * the TimelineModel. + *

            + * * @author Julian Bilcke, Mathieu Bastian * @see TimelineModel */ @@ -69,98 +70,116 @@ public interface TimelineController { /** * Returns the timeline model from workspace. + * * @param workspace the workspace to get the model from * @return the timeline model for this workspace */ - public TimelineModel getModel(Workspace workspace); + TimelineModel getModel(Workspace workspace); /** * Get the current model from the current workspace * * @return the current model, or null if no active workspace */ - public TimelineModel getModel(); + TimelineModel getModel(); /** - * Sets the timeline custom bounds. Custom bounds still need to be included in the - * min and max bound of the time scale. The timeline will resize accordingly. + * Sets the timeline custom bounds. Custom bounds still need to be included + * in the min and max bound of the time scale. The timeline will resize + * accordingly. + * * @param min the lower bound * @param max the upper bound - * @throws IllegalArgumentException if min is superior or equal than - * max or out of bounds + * @throws IllegalArgumentException if min is superior or equal than + * max or out of bounds */ - public void setCustomBounds(double min, double max); + void setCustomBounds(double min, double max); /** * Sets the timeline enable status. + * * @param enabled the enabled value to set */ - public void setEnabled(boolean enabled); + void setEnabled(boolean enabled); /** - * Sets the current timeline interval. This is propagated to the DynamicModel - * and defines the interval the graph is filtered with. + * Sets the current timeline interval. This is propagated to the + * DynamicModel and defines the interval the graph is filtered + * with. + * * @param from the lower bound - * @param to the upper bound - * @throws IllegalArgumentException if min is superior or equal than - * max or out of bounds + * @param to the upper bound + * @throws IllegalArgumentException if min is superior or equal than + * max or out of bounds */ - public void setInterval(double from, double to); + void setInterval(double from, double to); + + void setTimeFormat(TimeFormat timeFormat); + /** - * Starts the timeline animation using the current delay, step size and play mode. + * Starts the timeline animation using the current delay, step size and play + * mode. */ - public void startPlay(); + void startPlay(); /** * Stops the timeline animation. */ - public void stopPlay(); + void stopPlay(); /** - * Sets the play delay in milliseconds. Defines the time between each interval - * shift. + * Sets the play delay in milliseconds. Defines the time between each + * interval shift. + * * @param delay the delay in milliseconds */ - public void setPlaySpeed(int delay); + void setPlaySpeed(int delay); /** * Sets the play step. Defines how much the interval is moved at each step * during animation. Defined in percentage of the total interval. + * * @param step the step, between 0 and 1 */ - public void setPlayStep(double step); + void setPlayStep(double step); /** * Sets the play mode. This defines how the interval is moved. + * * @param playMode the play mode */ - public void setPlayMode(TimelineModel.PlayMode playMode); + void setPlayMode(TimelineModel.PlayMode playMode); /** - * Returns all the possible dynamic attribute columns. This is essentially all - * number-based dynamic columns defined in the graph table. + * Returns all the possible dynamic attribute columns. This is essentially + * all number-based dynamic columns defined in the graph table. + * * @return all dynamic number columns in the graph table */ - public AttributeColumn[] getDynamicGraphColumns(); + String[] getDynamicGraphColumns(); /** - * Select a column to make a {@link TimelineChart} of it. The column must be member - * of the graph table. + * Select a column to make a {@link TimelineChart} of it. The column must be + * member of the graph table. + * * @param column the column to select - * @throws IllegalArgumentException if column is not a graph column + * @throws IllegalArgumentException if column is not a graph + * column */ - public void selectColumn(AttributeColumn column); + void selectColumn(String column); /** * Add listener to the list of event listerners. + * * @param listener the listener to add */ - public void addListener(TimelineModelListener listener); + void addListener(TimelineModelListener listener); /** * Remove listerner from the list of event listeners. + * * @param listener the listener to remove */ - public void removeListener(TimelineModelListener listener); + void removeListener(TimelineModelListener listener); } diff --git a/modules/TimelineAPI/src/main/java/org/gephi/timeline/api/TimelineModel.java b/modules/TimelineAPI/src/main/java/org/gephi/timeline/api/TimelineModel.java index e0e66394e0..0faabb65cd 100644 --- a/modules/TimelineAPI/src/main/java/org/gephi/timeline/api/TimelineModel.java +++ b/modules/TimelineAPI/src/main/java/org/gephi/timeline/api/TimelineModel.java @@ -39,9 +39,10 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.timeline.api; -import org.gephi.dynamic.api.DynamicModel; +import org.gephi.graph.api.TimeFormat; /** * Timeline model which holds timeline bounds, interval and animation flags. @@ -51,122 +52,137 @@ Development and Distribution License("CDDL") (collectively, the * of the interval. *

            * It also holds configuration values for animation such as speed and step size. - * + * * @author Julian Bilcke, Mathieu Bastian */ public interface TimelineModel { - /** - * Defines how the interval is moved when animating. - */ - public enum PlayMode { - - /** - * Only one bound of the interval is moved. The interval is therefore resized. - */ - ONE_BOUND, - /** - * Both interval bounds are moved. The interval size remains unchanged. - */ - TWO_BOUNDS - }; - /** * Returns true if the timeline is enabled. When enabled, the timeline * is filtering the current graph. + * * @return true if the timeline is enabled, false * otherwise */ - public boolean isEnabled(); + boolean isEnabled(); /** * Returns the min value of the time scale. This is the start of the earliest interval * in the workspace. + * * @return the min */ - public double getMin(); + double getMin(); /** * Returns the max value of the time scale. This is the end of the latest interval * in the workspace. + * * @return the max */ - public double getMax(); + double getMax(); /** * Returns the custom min value. This value can't be inferior than min + * * @return the custom min */ - public double getCustomMin(); + double getCustomMin(); /** * Returns the custom max value. This value can't be superior than max + * * @return the custom max */ - public double getCustomMax(); + double getCustomMax(); /** * Returns true if custom bounds are defined. Returns false * when custom bounds are equal to min and max. + * * @return true if custom bounds are defined, false * otherwise. */ - public boolean hasCustomBounds(); + boolean hasCustomBounds(); /** * Returns true if none of the min and max time values are infinity. + * * @return true if the time scale is valid, false * otherwise */ - public boolean hasValidBounds(); + boolean hasValidBounds(); /** * Returns the lower bound of the interval. + * * @return the interval start */ - public double getIntervalStart(); + double getIntervalStart(); /** * Returns the upper bound of the interval. + * * @return the interval end */ - public double getIntervalEnd(); + double getIntervalEnd(); /** * Returns the current time format. Default is DOUBLE + * * @return the current tie */ - public DynamicModel.TimeFormat getTimeFormat(); + TimeFormat getTimeFormat(); /** * Returns the play delay in milliseconds. Defines the time between each interval * shift. - * @return the play delay + * + * @return the play delay */ - public int getPlayDelay(); + int getPlayDelay(); /** * Returns the play step. Defines how much the interval is moved at each step * during animation. Defined in percentage of the total interval. + * * @return the play step */ - public double getPlayStep(); + double getPlayStep(); /** * Returns true if the timeline is playing. + * * @return true is playing, false otherwise */ - public boolean isPlaying(); + boolean isPlaying(); /** * Returns the play mode. This defines how the interval is moved. + * * @return the play mode */ - public PlayMode getPlayMode(); + PlayMode getPlayMode(); /** * Returns the current timeline chart or null if node. + * * @return the timeline chart or null */ - public TimelineChart getChart(); + TimelineChart getChart(); + + /** + * Defines how the interval is moved when animating. + */ + enum PlayMode { + + /** + * Only one bound of the interval is moved. The interval is therefore resized. + */ + ONE_BOUND, + /** + * Both interval bounds are moved. The interval size remains unchanged. + */ + TWO_BOUNDS + } } diff --git a/modules/TimelineAPI/src/main/java/org/gephi/timeline/api/TimelineModelEvent.java b/modules/TimelineAPI/src/main/java/org/gephi/timeline/api/TimelineModelEvent.java index 6b1d1a20c6..a03ea3dec5 100644 --- a/modules/TimelineAPI/src/main/java/org/gephi/timeline/api/TimelineModelEvent.java +++ b/modules/TimelineAPI/src/main/java/org/gephi/timeline/api/TimelineModelEvent.java @@ -39,25 +39,22 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.timeline.api; /** * Timeline model event. - * + * * @author Mathieu Bastian * @see TimelineModelListener */ public final class TimelineModelEvent { - public enum EventType { - - MODEL, MIN_MAX, INTERVAL, CUSTOM_BOUNDS, ENABLED, PLAY_START, PLAY_STOP, CHART, VALID_BOUNDS - }; private final EventType type; private final TimelineModel source; private final Object data; - public TimelineModelEvent (EventType type, TimelineModel source, Object data) { + public TimelineModelEvent(EventType type, TimelineModel source, Object data) { this.type = type; this.source = source; this.data = data; @@ -74,4 +71,9 @@ public TimelineModel getSource() { public Object getData() { return data; } + + public enum EventType { + + MODEL, MIN_MAX, INTERVAL, CUSTOM_BOUNDS, ENABLED, PLAY_START, PLAY_STOP, CHART, VALID_BOUNDS + } } diff --git a/modules/TimelineAPI/src/main/java/org/gephi/timeline/api/TimelineModelListener.java b/modules/TimelineAPI/src/main/java/org/gephi/timeline/api/TimelineModelListener.java index ec126b386c..a2565e3d3a 100644 --- a/modules/TimelineAPI/src/main/java/org/gephi/timeline/api/TimelineModelListener.java +++ b/modules/TimelineAPI/src/main/java/org/gephi/timeline/api/TimelineModelListener.java @@ -39,15 +39,16 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.timeline.api; /** * Timeline model listener. - * + * * @author Julian Bilcke * @see TimelineModelEvent */ public interface TimelineModelListener { - public void timelineModelChanged(TimelineModelEvent event); + void timelineModelChanged(TimelineModelEvent event); } diff --git a/modules/TimelineAPI/src/main/nbm/manifest.mf b/modules/TimelineAPI/src/main/nbm/manifest.mf index b04b3d2cf5..8a0731c2c6 100644 --- a/modules/TimelineAPI/src/main/nbm/manifest.mf +++ b/modules/TimelineAPI/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/timeline/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi Core +OpenIDE-Module-Name: Timeline API diff --git a/modules/TimelineAPI/src/main/nbm/module.xml b/modules/TimelineAPI/src/main/nbm/module.xml deleted file mode 100644 index bf4764b613..0000000000 --- a/modules/TimelineAPI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle.properties b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle.properties index c0c4d5609e..ef47c56be0 100644 --- a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle.properties +++ b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle.properties @@ -1,5 +1,2 @@ -OpenIDE-Module-Display-Category=Gephi Core -OpenIDE-Module-Long-Description=\ - The Timeline API provides access to the timeline data, control settings and animation. -OpenIDE-Module-Name=Timeline API +OpenIDE-Module-Long-Description=The Timeline API provides access to the timeline data, control settings and animation. OpenIDE-Module-Short-Description=Timeline control API diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_ar.properties b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_ca.properties b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_ca.properties new file mode 100644 index 0000000000..9ef6dd90a4 --- /dev/null +++ b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_ca.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=L\u2019API Lνnia de Temps dona accιs a les dades de la lνnia de temps, els quadre de control i les animacions +OpenIDE-Module-Short-Description=Control de l'API de lνnia de temps diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_cs.properties b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_cs.properties index 167e749ada..cb195b6931 100644 --- a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_cs.properties +++ b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_cs.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-07 16\:20+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=API \u010dasov\u00e9 osy poskytuje p\u0159\u00edstup k dat\u016fm \u010dasov\u00e9 osy, kontroly nastaven\u00ed a animace. - -OpenIDE-Module-Short-Description=API \u010dasov\u00e9 osy +OpenIDE-Module-Long-Description=API \u010dasovι osy poskytuje p\u0159νstup k dat\u016fm \u010dasovι osy, kontroly nastavenν a animace. +OpenIDE-Module-Short-Description=API \u010dasovι osy diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_de.properties b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_de.properties new file mode 100644 index 0000000000..b467008cdf --- /dev/null +++ b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_de.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Die Zeitleisten (Timeline) API +OpenIDE-Module-Short-Description=API zur Zeitleisten-Steuerung diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_es.properties b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_es.properties index ef10b4aa51..82f5c25cbd 100644 --- a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_es.properties +++ b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_es.properties @@ -1,12 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-10 22\:05+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=La API de Timeline proporciona acceso a los datos de la l\u00ednea temporal, par\u00e1metros de control y animaci\u00f3n. - -OpenIDE-Module-Short-Description=API para la l\u00ednea temporal +OpenIDE-Module-Long-Description=La API de Timeline proporciona acceso a los datos de la lνnea temporal, parαmetros de control y animaciσn. +OpenIDE-Module-Short-Description=API para la lνnea temporal diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_fr.properties b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_fr.properties index a2a6f890f4..8c2c62bcc7 100644 --- a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_fr.properties +++ b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_fr.properties @@ -1,12 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-08 15\:11+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=L'API de Timeline fournit l'acc\u00e8s aux donn\u00e9es de la timeline, aux param\u00e8tres de contr\u00f4le et d'animation. - -OpenIDE-Module-Short-Description=API du module Timeline +OpenIDE-Module-Long-Description=L'API de Timeline fournit l'accθs aux donnιes de la timeline, aux paramθtres de contrτle et d'animation. +OpenIDE-Module-Short-Description=API du module Timeline diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_he.properties b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_he.properties new file mode 100644 index 0000000000..ef47c56be0 --- /dev/null +++ b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_he.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=The Timeline API provides access to the timeline data, control settings and animation. +OpenIDE-Module-Short-Description=Timeline control API diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_hu.properties b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_hu.properties new file mode 100644 index 0000000000..d4ad0d675c --- /dev/null +++ b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_hu.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Short-Description=Id\u0151vonal-vez\u00E9rl\u0151 API +OpenIDE-Module-Long-Description=Az id\u0151vonal API hozz\u00E1f\u00E9r\u00E9st biztos\u00EDt az id\u0151vonal adataihoz, vez\u00E9rl\u00E9si be\u00E1ll\u00EDt\u00E1sokhoz \u00E9s anim\u00E1ci\u00F3khoz. diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_it.properties b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_it.properties new file mode 100644 index 0000000000..69191e26c3 --- /dev/null +++ b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_it.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=La API Timeline fornisce accesso ai dati della linea temporale, impostazioni e animazione +OpenIDE-Module-Short-Description=Timeline control API diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_ja.properties b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_ja.properties index 03b785876c..b919d39f55 100644 --- a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_ja.properties +++ b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_ja.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-15 08\:56+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u6642\u7cfb\u5217API\u306f\u6642\u7cfb\u5217\u30c7\u30fc\u30bf\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3001\u305d\u306e\u5236\u5fa1\u8a2d\u5b9a\u53ca\u3073\u52d5\u753b\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002 - -OpenIDE-Module-Short-Description=\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3API +OpenIDE-Module-Long-Description=\u6642\u7cfb\u5217API\u306f\u6642\u7cfb\u5217\u30c7\u30fc\u30bf\u3078\u306e\u30a2\u30af\u30bb\u30b9\u3001\u305d\u306e\u5236\u5fa1\u8a2d\u5b9a\u53ca\u3073\u52d5\u753b\u3092\u63d0\u4f9b\u3057\u307e\u3059\u3002 +OpenIDE-Module-Short-Description=\u30bf\u30a4\u30e0\u30e9\u30a4\u30f3API diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_ko.properties b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_ko.properties new file mode 100644 index 0000000000..bb87c83cb3 --- /dev/null +++ b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_ko.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Long-Description=Timeline API\uB294 \uD0C0\uC784\uB77C\uC778 \uB370\uC774\uD130, \uC81C\uC5B4 \uC124\uC815 \uADF8\uB9AC\uACE0 \uC560\uB2C8\uBA54\uC774\uC158\uC5D0 \uB300\uD55C \uC811\uADFC\uC744 \uC81C\uACF5\uD55C\uB2E4. +OpenIDE-Module-Short-Description=\uD0C0\uC784\uB77C\uC778 \uC81C\uC5B4 API diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_nl.properties b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_nl.properties new file mode 100644 index 0000000000..ef47c56be0 --- /dev/null +++ b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_nl.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=The Timeline API provides access to the timeline data, control settings and animation. +OpenIDE-Module-Short-Description=Timeline control API diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_pt_BR.properties b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_pt_BR.properties index 3cfdbe87f3..0bc6c0dde9 100644 --- a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_pt_BR.properties +++ b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_pt_BR.properties @@ -1,12 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -# C\u00e9lio Faria Jr. , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-12 12\:40+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=A API de Linha do Tempo prov\u00ea acesso aos dados da linha do tempo, configura\u00e7\u00f5es de controle e anima\u00e7\u00e3o. - -OpenIDE-Module-Short-Description=API de Linha do Tempo +OpenIDE-Module-Long-Description=A API de Linha do Tempo provκ acesso aos dados da linha do tempo, configuraηυes de controle e animaηγo. +OpenIDE-Module-Short-Description=API de Linha do Tempo diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_ro.properties b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_ro.properties new file mode 100644 index 0000000000..17a77d94df --- /dev/null +++ b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_ro.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Long-Description=API-ul Timeline ofer\u0103 acces la date cronologice, set\u0103ri de control \u0219i anima\u021Bie. +OpenIDE-Module-Short-Description=API de control Timeline diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_ru.properties b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_ru.properties index 84d4225d69..a3f19e424f 100644 --- a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_ru.properties +++ b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_ru.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-12 21\:43+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=Timeline API \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0448\u043a\u0430\u043b\u043e\u0439 \u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438. - -OpenIDE-Module-Short-Description=API \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0448\u043a\u0430\u043b\u044b +OpenIDE-Module-Long-Description=Timeline API \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0448\u043a\u0430\u043b\u043e\u0439 \u0438 \u0430\u043d\u0438\u043c\u0430\u0446\u0438\u0438. +OpenIDE-Module-Short-Description=API \u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0448\u043a\u0430\u043b\u044b diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_th.properties b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_tr.properties b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_tr.properties new file mode 100644 index 0000000000..ef47c56be0 --- /dev/null +++ b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_tr.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=The Timeline API provides access to the timeline data, control settings and animation. +OpenIDE-Module-Short-Description=Timeline control API diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_uk.properties b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_uk.properties new file mode 100644 index 0000000000..150cc84b85 --- /dev/null +++ b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_uk.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API \u0448\u043A\u0430\u043B\u0438 \u0447\u0430\u0441\u0443 \u043D\u0430\u0434\u0430\u0454 \u0434\u043E\u0441\u0442\u0443\u043F \u0434\u043E \u0434\u0430\u043D\u0438\u0445 \u0448\u043A\u0430\u043B\u0438 \u0447\u0430\u0441\u0443, \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u044C \u043A\u0435\u0440\u0443\u0432\u0430\u043D\u043D\u044F \u0442\u0430 \u0430\u043D\u0456\u043C\u0430\u0446\u0456\u0457. +OpenIDE-Module-Short-Description=API \u043A\u0435\u0440\u0443\u0432\u0430\u043D\u043D\u044F \u0447\u0430\u0441\u043E\u0432\u043E\u044E \u0448\u043A\u0430\u043B\u043E\u044E diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_zh_CN.properties b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_zh_CN.properties index 2dfb7e5eff..722bc75e01 100644 --- a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_zh_CN.properties +++ b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_zh_CN.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-15 09\:36+0000\nLast-Translator\: Xi-Nian Zuo \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u65f6\u95f4\u7ebfAPI\u63d0\u4f9b\u5bf9\u65f6\u95f4\u7ebf\u6570\u636e, \u63a7\u5236\u8bbe\u5b9a\u548c\u52a8\u753b\u7684\u8bbf\u95ee. - -OpenIDE-Module-Short-Description=\u65f6\u95f4\u8f74\u5e94\u7528\u7a0b\u5e8f\u63a5\u53e3(API) +OpenIDE-Module-Long-Description=\u65f6\u95f4\u7ebfAPI\u63d0\u4f9b\u5bf9\u65f6\u95f4\u7ebf\u6570\u636e, \u63a7\u5236\u8bbe\u5b9a\u548c\u52a8\u753b\u7684\u8bbf\u95ee. +OpenIDE-Module-Short-Description=\u65f6\u95f4\u8f74\u5e94\u7528\u7a0b\u5e8f\u63a5\u53e3(API) diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_zh_TW.properties b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_zh_TW.properties new file mode 100644 index 0000000000..ef47c56be0 --- /dev/null +++ b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/Bundle_zh_TW.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=The Timeline API provides access to the timeline data, control settings and animation. +OpenIDE-Module-Short-Description=Timeline control API diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/api/package.html b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/api/package.html index 0e20c1657b..5c88fd3eda 100644 --- a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/api/package.html +++ b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/api/package.html @@ -1,20 +1,25 @@ - - - - API which controls the Timeline, the UI component which allows network - exploration over time. -

            - The Timeline API allows to set custom bounds and visible interval. The - timeline is the UI component which controls the network exploration - over time. It is connected to the DynamicAPI which - controls the time scale and intervals. The API also allows to - control the animation (i.e play feature). -

            -

            - The TimelineController is managing models (one per workspace) - and is the access door to the system. This controller is a service, and can be - retrieved by using the following command: -

            -

            TimelineController tc = Lookup.getDefault().lookup(TimelineController.class);

            - - + + + + org.gephi.timeline.api + + +

            + API which controls the Timeline, the UI component which allows network + exploration over time. +

            +

            + The Timeline API allows to set custom bounds and visible interval. The + timeline is the UI component which controls the network exploration + over time. It is connected to the DynamicAPI which + controls the time scale and intervals. The API also allows to + control the animation (i.e play feature). +

            +

            + The TimelineController is managing models (one per workspace) + and is the access door to the system. This controller is a service, and can be + retrieved by using the following command: +

            +

            TimelineController tc = Lookup.getDefault().lookup(TimelineController.class);

            + + diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/cs.po b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/cs.po deleted file mode 100644 index 9f004681be..0000000000 --- a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/cs.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-07 16:20+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API časovΓ© osy poskytuje pΕ™Γ­stup k datΕ―m časovΓ© osy, kontroly nastavenΓ­ a animace." - -msgid "OpenIDE-Module-Short-Description" -msgstr "API časovΓ© osy" diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/es.po b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/es.po deleted file mode 100644 index f2d20708be..0000000000 --- a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/es.po +++ /dev/null @@ -1,26 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-10 22:05+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "La API de Timeline proporciona acceso a los datos de la lΓ­nea temporal, parΓ‘metros de control y animaciΓ³n." - -msgid "OpenIDE-Module-Short-Description" -msgstr "API para la lΓ­nea temporal" diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/fr.po b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/fr.po deleted file mode 100644 index ddd5a9f212..0000000000 --- a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/fr.po +++ /dev/null @@ -1,26 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-08 15:11+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "L'API de Timeline fournit l'accΓ¨s aux donnΓ©es de la timeline, aux paramΓ¨tres de contrΓ΄le et d'animation." - -msgid "OpenIDE-Module-Short-Description" -msgstr "API du module Timeline" diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/ja.po b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/ja.po deleted file mode 100644 index 1a6c7ebe36..0000000000 --- a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-15 08:56+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ζ™‚η³»εˆ—APIγ―ζ™‚η³»εˆ—γƒ‡γƒΌγ‚ΏγΈγγ‚’クセス、そγεˆΆεΎ‘θ¨­εšεŠγ³ε‹•画を提供します。" - -msgid "OpenIDE-Module-Short-Description" -msgstr "タむムラむンAPI" diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/org-gephi-timeline.pot b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/org-gephi-timeline.pot deleted file mode 100644 index bd005ca326..0000000000 --- a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/org-gephi-timeline.pot +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "" -"The Timeline API provides access to the timeline data, control settings and " -"animation." - -msgid "OpenIDE-Module-Short-Description" -msgstr "Timeline control API" diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/pt_BR.po b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/pt_BR.po deleted file mode 100644 index 74ce3abad7..0000000000 --- a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/pt_BR.po +++ /dev/null @@ -1,26 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -# CΓ©lio Faria Jr. , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-12 12:40+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "A API de Linha do Tempo provΓͺ acesso aos dados da linha do tempo, configuraΓ§Γ΅es de controle e animaΓ§Γ£o." - -msgid "OpenIDE-Module-Short-Description" -msgstr "API de Linha do Tempo" diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/ru.po b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/ru.po deleted file mode 100644 index cba4d47d5b..0000000000 --- a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/ru.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-12 21:43+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Timeline API прСдоставляСт доступ ΠΊ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ шкалой ΠΈ Π°Π½ΠΈΠΌΠ°Ρ†ΠΈΠΈ." - -msgid "OpenIDE-Module-Short-Description" -msgstr "API Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡˆΠΊΠ°Π»Ρ‹" diff --git a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/zh_CN.po b/modules/TimelineAPI/src/main/resources/org/gephi/timeline/zh_CN.po deleted file mode 100644 index 9e32eafa1e..0000000000 --- a/modules/TimelineAPI/src/main/resources/org/gephi/timeline/zh_CN.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Xi-Nian Zuo , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-15 09:36+0000\n" -"Last-Translator: Xi-Nian Zuo \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ζ—Άι—΄ηΊΏAPI提供对既间线数ζ, 控刢θΎεšε’ŒεŠ¨η”»ηš„θΏι—." - -msgid "OpenIDE-Module-Short-Description" -msgstr "既间轴应用程序ζŽ₯口(API)" diff --git a/modules/TimelineAPI/src/main/resources/overview.html b/modules/TimelineAPI/src/main/resources/overview.html index f119f6e008..33429be03a 100644 --- a/modules/TimelineAPI/src/main/resources/overview.html +++ b/modules/TimelineAPI/src/main/resources/overview.html @@ -1,11 +1,13 @@ - + Timeline API - Timeline API provides access to the timeline data, control settings and - animation. +

            + Timeline API provides access to the timeline data, control settings and + animation. +

            The Timeline API allows to set custom bounds and visible interval. The timeline is the UI component which controls the network exploration diff --git a/modules/ToolsAPI/pom.xml b/modules/ToolsAPI/pom.xml index 544357e44b..c17ff31179 100644 --- a/modules/ToolsAPI/pom.xml +++ b/modules/ToolsAPI/pom.xml @@ -4,13 +4,13 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi tools-api - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm ToolsAPI @@ -25,7 +25,7 @@ - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/ToolsAPI/src/main/java/org/gephi/tools/api/EditWindowController.java b/modules/ToolsAPI/src/main/java/org/gephi/tools/api/EditWindowController.java deleted file mode 100644 index 650a02f5fe..0000000000 --- a/modules/ToolsAPI/src/main/java/org/gephi/tools/api/EditWindowController.java +++ /dev/null @@ -1,67 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.tools.api; - -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.Node; - -/** - * Controller API for requesting the opening and usage of edit window. - * @author Eduardo Ramos - */ -public interface EditWindowController { - void openEditWindow(); - - void closeEditWindow(); - - boolean isOpen(); - - void editNode(Node node); - - void editNodes(final Node[] nodes); - - void editEdge(final Edge edge); - - void editEdges(final Edge[] edges); - - void disableEdit(); -} diff --git a/modules/ToolsAPI/src/main/java/org/gephi/tools/api/ToolController.java b/modules/ToolsAPI/src/main/java/org/gephi/tools/api/ToolController.java index 16a2c38798..7c64a5a7aa 100644 --- a/modules/ToolsAPI/src/main/java/org/gephi/tools/api/ToolController.java +++ b/modules/ToolsAPI/src/main/java/org/gephi/tools/api/ToolController.java @@ -38,7 +38,8 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.tools.api; import javax.swing.JComponent; @@ -49,6 +50,7 @@ Development and Distribution License("CDDL") (collectively, the *

            * This controller is a service and can therefore be found in Lookup: *

            ToolController tc = Lookup.getDefault().lookup(ToolController.class);
            + * * @author Mathieu Bastian */ public interface ToolController { @@ -56,19 +58,9 @@ public interface ToolController { /** * Selects tool as the active tool and therefore unselect the * current tool, if exists. - * @param tool the tool that is to be selected or null to only unselect the current tool - */ - public void select(Tool tool); - - /** - * Returns the toolbar component, build from tools implementations. - * @return the toolbar component - */ - public JComponent getToolbar(); - - /** - * Returns the properties bar component, that display tools settings. - * @return the properties bar component + * + * @param tool the tool that is to be selected or null to only unselect the + * current tool */ - public JComponent getPropertiesBar(); + void select(Tool tool); } diff --git a/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/MouseClickEventListener.java b/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/MouseClickEventListener.java index 62acdf995a..4117261b75 100644 --- a/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/MouseClickEventListener.java +++ b/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/MouseClickEventListener.java @@ -38,7 +38,7 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ package org.gephi.tools.spi; @@ -46,7 +46,7 @@ Development and Distribution License("CDDL") (collectively, the * Tool mouse click listener. Listen to mouse click on visualization window. *

            * A tool which declares this listener is notified when user click on the - * visualizaion window. + * visualization window. * * @author Mathieu Bastian * @see Tool @@ -55,10 +55,11 @@ public interface MouseClickEventListener extends ToolEventListener { /** * Notify a mouse click on the visualization window. - * @param positionViewport Position in the 2D coordinate system, (0,0) is located - * top-left. - * @param position3d Position in the 3D coordinate system, (0,0) is located at the - * center. + * + * @param positionViewport Position in the 2D coordinate system, (0,0) is + * located top-left. + * @param position3d Position in the 3D coordinate system, (0,0) is located + * at the center. */ - public void mouseClick(int[] positionViewport, float[] position3d); + public boolean mouseClick(int[] positionViewport, float[] position3d); } diff --git a/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/NodeClickEventListener.java b/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/NodeClickEventListener.java index e5d35f2526..f10e21e40a 100644 --- a/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/NodeClickEventListener.java +++ b/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/NodeClickEventListener.java @@ -38,7 +38,8 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.tools.spi; import org.gephi.graph.api.Node; @@ -46,15 +47,17 @@ Development and Distribution License("CDDL") (collectively, the /** * Tool node click listener. Listen to node click on the visualization window. *

            - * A tool whih declares this listener is notified when user click on nodes. + * A tool which declares this listener is notified when user click on nodes. * * @author Mathieu Bastian */ public interface NodeClickEventListener extends ToolEventListener { /** - * Notify nodes have been clicked by user on the visualization window. + * Notify nodes have been clicked by user on the visualization + * window. + * * @param nodes the clicked nodes */ - public void clickNodes(Node[] nodes); + public boolean clickNodes(Node[] nodes); } diff --git a/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/NodePressAndDraggingEventListener.java b/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/NodePressAndDraggingEventListener.java index 54d2890d06..1d2cafc79d 100644 --- a/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/NodePressAndDraggingEventListener.java +++ b/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/NodePressAndDraggingEventListener.java @@ -38,13 +38,14 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.tools.spi; import org.gephi.graph.api.Node; /** - * Tool mouse press and dragging listener. Listen to a single node press on the + * Tool mouse press and dragging listener. Listen to a single mouse press on the * visualization window and trigger selected nodes, then triggers continuously * the recorded drag displacement. *

            @@ -53,6 +54,8 @@ Development and Distribution License("CDDL") (collectively, the *

            * A tool which declares this listener is notified at a certain rate, up to * multiple times per second, the selected nodes. + *

            + * Return false from @link {@link #drag(float, float, float, float)} to update the mouse selection while dragging. * * @author Mathieu Bastian * @see Tool @@ -60,15 +63,24 @@ Development and Distribution License("CDDL") (collectively, the public interface NodePressAndDraggingEventListener extends ToolEventListener { /** - * Notify nodes have been pressed by user on the visualization window. + * Notify nodes have been pressed by user on the visualization + * window. + * * @param nodes the clicked nodes + * @return Event consumed */ - public void pressNodes(Node[] nodes); + public boolean pressNodes(Node[] nodes); /** * Notify mouse is dragging + * + * @param displacementXScreen distance x in screen coordinates + * @param displacementYScreen distance y in screen coordinates + * @param displacementXWorld distance x in world coordinates + * @param displacementYWorld distance y in worked coordinates + * @return Event consumed */ - public void drag(float displacementX, float displacementY); + public boolean drag(float displacementXScreen, float displacementYScreen, float displacementXWorld, float displacementYWorld); /** * Notify mouse has been released. diff --git a/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/NodePressingEventListener.java b/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/NodePressingEventListener.java index 03b19e4bea..13457301f0 100644 --- a/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/NodePressingEventListener.java +++ b/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/NodePressingEventListener.java @@ -38,7 +38,7 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ package org.gephi.tools.spi; @@ -58,12 +58,13 @@ public interface NodePressingEventListener extends ToolEventListener { /** * Notify nodes are currently pressed. + * * @param nodes the pressed nodes array */ - public void pressingNodes(Node[] nodes); + public boolean pressingNodes(Node[] nodes); /** * Notify mouse has been released. */ - public void released(); + public boolean released(); } diff --git a/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/Tool.java b/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/Tool.java index 47d32898e6..0a4c212664 100644 --- a/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/Tool.java +++ b/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/Tool.java @@ -38,23 +38,28 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.tools.spi; /** - * Tools are functions for interacting with user inputs on the visualization window. + * Tools are functions for interacting with user inputs on the visualization + * window. + *

            + * A tool receive events from visualization window when it is currently the + * selected tool. The visualization window toolbar presents all available tools + * implementations. *

            - * A tool receive events from visualization window when it is currently the selected - * tool. The visualization window toolbar presents all available tools implementations. - *

            Example: A Brush tool colors clicked nodes. + * Example: A Brush tool colors clicked nodes. *

            How-to create a tool implementation

            *
            1. Create a class which implement Tool interface
            2. *
            3. Add the following annotation to your class to be declared as a new * implementation @ServiceProvider(service=Tool.class)
            4. - *
            5. Declare {@link ToolEventListener} instances for specifying how the - * tool is interacting with user input like node click or mouse drag.
            6. + *
            7. Declare {@link ToolEventListener} instances for specifying how the tool + * is interacting with user input like node click or mouse drag.
            8. *
            9. Provide a {@link ToolUI} instance for giving a name and an icon to your * tool.
            + * * @author Mathieu Bastian */ public interface Tool { @@ -70,20 +75,23 @@ public interface Tool { public void unselect(); /** - * Returns the declared tool listeners for this tool. Tool listeners says how - * the tool is interacting with user input on the visualization window. + * Returns the declared tool listeners for this tool. Tool listeners says + * how the tool is interacting with user input on the visualization window. + * * @return tool listeners declared for this tool implementation */ public ToolEventListener[] getListeners(); /** * Returns ToolUI instance for this tool. + * * @return the user interface attributes for this tool */ public ToolUI getUI(); /** * Returns the tool type of selection interaction. + * * @return the tool type of selection interaction */ public ToolSelectionType getSelectionType(); diff --git a/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/ToolEventListener.java b/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/ToolEventListener.java index 7cc252f822..0f021cb92e 100644 --- a/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/ToolEventListener.java +++ b/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/ToolEventListener.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.tools.spi; /** diff --git a/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/ToolSelectionType.java b/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/ToolSelectionType.java index a634e0bc8b..d2c3471447 100644 --- a/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/ToolSelectionType.java +++ b/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/ToolSelectionType.java @@ -39,19 +39,28 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.tools.spi; /** * Enum setting for {@link Tool} implementations. *
            • * NONE: Selection features are disabled when the tool is used.
            • - *
            • SELECTION: Selection is enabled when the tool is used.
            • - *
            • SELECTION_AND_DRAGGING: Selection and dragging is enabled when the tool is used.
            • + *
            • SELECTION: Multi-node selection is enabled when the tool is used.
            • + *
            • SELECTION_AND_DRAGGING: Deprecated, behaves the same as SELECTION
            • + *
            • SINGLE_NODE_SELECTION: Single-node selection is enabled when the tool us used.
            • *
            * * @author Mathieu Bastian */ public enum ToolSelectionType { - NONE, SELECTION, SELECTION_AND_DRAGGING + NONE, + SELECTION, + /** + * @deprecated Behaves the same as {@link #SELECTION}. Use {@link #SELECTION} instead. + */ + @Deprecated + SELECTION_AND_DRAGGING, + SINGLE_NODE_SELECTION } diff --git a/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/ToolUI.java b/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/ToolUI.java index 40765fe942..20ccb0247d 100644 --- a/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/ToolUI.java +++ b/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/ToolUI.java @@ -38,22 +38,26 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.tools.spi; import javax.swing.Icon; import javax.swing.JPanel; /** - * Tool's user interface attributes: name, description, icon and a properties bar. + * Tool's user interface attributes: name, description, icon and a properties + * bar. * * @author Mathieu Bastian */ public interface ToolUI { /** - * Returns the tool's properties bar. The properties bar is used for tool's - * settings. + * Returns the tools properties bar. + *

            + * The properties bar is used for tools settings. + * * @param tool the tool instance * @return a JPanel for the the tool's properties bar */ @@ -61,22 +65,30 @@ public interface ToolUI { /** * Returns the tool icon, for the toobar. + * + * @return tool's icon */ public Icon getIcon(); /** * Returns the tool's name. + * + * @return tool's name */ public String getName(); /** * Returns the tool's description. + * + * @return tool's description */ public String getDescription(); /** - * Returns the tool relative position. Smaller is the position, higher is - * the position in the toolbar. + * Returns the tool's relative position. + *

            + * Smaller is the position, higher is the position in the toolbar. + * * @return A number between 0 and 200 */ public int getPosition(); diff --git a/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/UnselectToolException.java b/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/UnselectToolException.java index 5fe7aae35e..d387e3100e 100644 --- a/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/UnselectToolException.java +++ b/modules/ToolsAPI/src/main/java/org/gephi/tools/spi/UnselectToolException.java @@ -39,10 +39,10 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.tools.spi; /** - * * @author Martin Ε kurla */ public class UnselectToolException extends RuntimeException { diff --git a/modules/ToolsAPI/src/main/nbm/manifest.mf b/modules/ToolsAPI/src/main/nbm/manifest.mf index f58f5c4f60..4be49b837a 100644 --- a/modules/ToolsAPI/src/main/nbm/manifest.mf +++ b/modules/ToolsAPI/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/tools/api/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi Core +OpenIDE-Module-Name: Tools API \ No newline at end of file diff --git a/modules/ToolsAPI/src/main/nbm/module.xml b/modules/ToolsAPI/src/main/nbm/module.xml deleted file mode 100644 index 5f96dab333..0000000000 --- a/modules/ToolsAPI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle.properties b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle.properties index 08f88859f3..218d20f976 100644 --- a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle.properties +++ b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle.properties @@ -1,5 +1,2 @@ -OpenIDE-Module-Display-Category=Gephi Core -OpenIDE-Module-Long-Description=\ - API/SPI for tools that interact with visualization -OpenIDE-Module-Name=Tools API +OpenIDE-Module-Long-Description=API/SPI for tools that interact with visualization OpenIDE-Module-Short-Description=API/SPI for tools that interact with visualization diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_ar.properties b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_ca.properties b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_ca.properties new file mode 100644 index 0000000000..0045fa5484 --- /dev/null +++ b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_ca.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Eines API/SPI que interactuen amb la visualitzaciσ +OpenIDE-Module-Short-Description=Eines API/SPI que interactuen amb la visualitzaciσ diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_cs.properties b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_cs.properties index e745765c21..c0dfdb35ea 100644 --- a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_cs.properties +++ b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_cs.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-03 21\:38+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=API/SPI pro n\u00e1stroje, kter\u00e9 ovliv\u0148uj\u00ed vizualizaci - -OpenIDE-Module-Short-Description=API/SPI pro n\u00e1stroje, kter\u00e9 ovliv\u0148uj\u00ed vizualizaci +OpenIDE-Module-Long-Description=API/SPI pro nαstroje, kterι ovliv\u0148ujν vizualizaci +OpenIDE-Module-Short-Description=API/SPI pro nαstroje, kterι ovliv\u0148ujν vizualizaci diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_de.properties b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_de.properties new file mode 100644 index 0000000000..f14d17671e --- /dev/null +++ b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_de.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI fόr das interagieren mit Werkzeugen zur Visualisierung +OpenIDE-Module-Short-Description=API/SPI fόr das interagieren mit Werkzeugen zur Visualisierung diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_es.properties b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_es.properties index c008977f56..056507a540 100644 --- a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_es.properties +++ b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_es.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:57+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=API/SPI para las herramientas que interaccionan con la visualizaci\u00f3n - -OpenIDE-Module-Short-Description=API/SPI para las herramientas que interaccionan con la visualizaci\u00f3n +OpenIDE-Module-Long-Description=API/SPI para las herramientas que interaccionan con la visualizaciσn +OpenIDE-Module-Short-Description=API/SPI para las herramientas que interaccionan con la visualizaciσn diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_fr.properties b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_fr.properties index 783ed9f2cd..40f44d14d8 100644 --- a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_fr.properties +++ b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_fr.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:57+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API/SPI pour les outils interagissant avec la visualisation - -OpenIDE-Module-Short-Description=API/SPI pour les outils interagissant avec la visualisation +OpenIDE-Module-Long-Description=API/SPI pour les outils interagissant avec la visualisation +OpenIDE-Module-Short-Description=API/SPI pour les outils interagissant avec la visualisation diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_he.properties b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_he.properties new file mode 100644 index 0000000000..260fb32b1e --- /dev/null +++ b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_he.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI for tools that interact with visualization +OpenIDE-Module-Short-Description=API/SPI for tools that interact with visualization diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_hu.properties b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_hu.properties new file mode 100644 index 0000000000..373e43d036 --- /dev/null +++ b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_hu.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Short-Description=API/SPI a vizualiz\u00E1ci\u00F3val k\u00F6lcs\u00F6nhat\u00E1sba l\u00E9p\u0151 eszk\u00F6z\u00F6kh\u00F6z +OpenIDE-Module-Long-Description=API/SPI a vizualiz\u00E1ci\u00F3val k\u00F6lcs\u00F6nhat\u00E1sba l\u00E9p\u0151 eszk\u00F6z\u00F6kh\u00F6z diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_it.properties b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_it.properties new file mode 100644 index 0000000000..260fb32b1e --- /dev/null +++ b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_it.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI for tools that interact with visualization +OpenIDE-Module-Short-Description=API/SPI for tools that interact with visualization diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_ja.properties b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_ja.properties index 6d0cd6f99d..830710865e 100644 --- a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_ja.properties +++ b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_ja.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-19 05\:23+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u53ef\u8996\u5316\u3068\u4ea4\u6d41\u3059\u308b\u30c4\u30fc\u30eb\u306e\u305f\u3081\u306eAPI / SPI - -OpenIDE-Module-Short-Description=\u53ef\u8996\u5316\u3068\u4ea4\u6d41\u3059\u308b\u30c4\u30fc\u30eb\u306e\u305f\u3081\u306eAPI / SPI +OpenIDE-Module-Long-Description=\u53ef\u8996\u5316\u3068\u4ea4\u6d41\u3059\u308b\u30c4\u30fc\u30eb\u306e\u305f\u3081\u306eAPI / SPI +OpenIDE-Module-Short-Description=\u53ef\u8996\u5316\u3068\u4ea4\u6d41\u3059\u308b\u30c4\u30fc\u30eb\u306e\u305f\u3081\u306eAPI / SPI diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_ko.properties b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_ko.properties new file mode 100644 index 0000000000..3b4b0c2636 --- /dev/null +++ b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_ko.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Short-Description=\uC2DC\uAC01\uD654\uC640 \uC0C1\uD638 \uC791\uC6A9\uD558\uB294 \uB3C4\uAD6C\uB97C \uC704\uD55C API/SPI +OpenIDE-Module-Long-Description=\uC2DC\uAC01\uD654\uC640 \uC0C1\uD638 \uC791\uC6A9\uD558\uB294 \uB3C4\uAD6C\uB97C \uC704\uD55C API/SPI diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_nl.properties b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_nl.properties new file mode 100644 index 0000000000..260fb32b1e --- /dev/null +++ b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_nl.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI for tools that interact with visualization +OpenIDE-Module-Short-Description=API/SPI for tools that interact with visualization diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_pt_BR.properties b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_pt_BR.properties index a1d10c1c94..a3e6f749e0 100644 --- a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_pt_BR.properties +++ b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_pt_BR.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 14\:13+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API/SPI para ferramentas que interagem com a visualiza\u00e7\u00e3o - -OpenIDE-Module-Short-Description=API/SPI para ferramentas que interagem com a visualiza\u00e7\u00e3o +OpenIDE-Module-Long-Description=API/SPI para ferramentas que interagem com a visualizaηγo +OpenIDE-Module-Short-Description=API/SPI para ferramentas que interagem com a visualizaηγo diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_ro.properties b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_ro.properties new file mode 100644 index 0000000000..2d0bb6f639 --- /dev/null +++ b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_ro.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Short-Description=API/SPI pentru instrumentele care interac\u021Bioneaz\u0103 cu vizualizarea +OpenIDE-Module-Long-Description=API/SPI pentru instrumentele care interac\u021Bioneaz\u0103 cu vizualizarea diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_ru.properties b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_ru.properties index 59a2d501a9..b6a16573ef 100644 --- a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_ru.properties +++ b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_ru.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-11-23 07\:59+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=API/SPI \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 - -OpenIDE-Module-Short-Description=API/SPI \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 +OpenIDE-Module-Long-Description=API/SPI \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 +OpenIDE-Module-Short-Description=API/SPI \u0434\u043b\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_th.properties b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_tr.properties b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_tr.properties new file mode 100644 index 0000000000..260fb32b1e --- /dev/null +++ b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_tr.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI for tools that interact with visualization +OpenIDE-Module-Short-Description=API/SPI for tools that interact with visualization diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_uk.properties b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_uk.properties new file mode 100644 index 0000000000..27a788e068 --- /dev/null +++ b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_uk.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI \u0434\u043B\u044F \u0456\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u0456\u0432, \u044F\u043A\u0456 \u0432\u0437\u0430\u0454\u043C\u043E\u0434\u0456\u044E\u0442\u044C \u0456\u0437 \u0432\u0456\u0437\u0443\u0430\u043B\u0456\u0437\u0430\u0446\u0456\u0454\u044E +OpenIDE-Module-Short-Description=API/SPI \u0434\u043B\u044F \u0456\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u0456\u0432, \u044F\u043A\u0456 \u0432\u0437\u0430\u0454\u043C\u043E\u0434\u0456\u044E\u0442\u044C \u0456\u0437 \u0432\u0456\u0437\u0443\u0430\u043B\u0456\u0437\u0430\u0446\u0456\u0454\u044E diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_zh_CN.properties b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_zh_CN.properties index fe1831d767..2a781d8723 100644 --- a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_zh_CN.properties +++ b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_zh_CN.properties @@ -1,10 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:06+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u53ef\u89c6\u5316\u4ea4\u4e92\u5de5\u5177\u4e4bAPI/SPI - -OpenIDE-Module-Short-Description=\u53ef\u89c6\u5316\u4ea4\u4e92\u5de5\u5177\u4e4bAPI/SPI +OpenIDE-Module-Long-Description=\u53ef\u89c6\u5316\u4ea4\u4e92\u5de5\u5177\u4e4bAPI/SPI +OpenIDE-Module-Short-Description=\u53ef\u89c6\u5316\u4ea4\u4e92\u5de5\u5177\u4e4bAPI/SPI diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_zh_TW.properties b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_zh_TW.properties new file mode 100644 index 0000000000..260fb32b1e --- /dev/null +++ b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/Bundle_zh_TW.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API/SPI for tools that interact with visualization +OpenIDE-Module-Short-Description=API/SPI for tools that interact with visualization diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/cs.po b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/cs.po deleted file mode 100644 index 8fa3e5a746..0000000000 --- a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/cs.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-03 21:38+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI pro nΓ‘stroje, kterΓ© ovlivňujΓ­ vizualizaci" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI pro nΓ‘stroje, kterΓ© ovlivňujΓ­ vizualizaci" diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/es.po b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/es.po deleted file mode 100644 index 5339889802..0000000000 --- a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/es.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:57+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI para las herramientas que interaccionan con la visualizaciΓ³n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI para las herramientas que interaccionan con la visualizaciΓ³n" diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/fr.po b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/fr.po deleted file mode 100644 index da980565b7..0000000000 --- a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/fr.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:57+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI pour les outils interagissant avec la visualisation" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI pour les outils interagissant avec la visualisation" diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/ja.po b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/ja.po deleted file mode 100644 index d33dbf5e1b..0000000000 --- a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-19 05:23+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ε―θ¦–εŒ–γ¨δΊ€ζ΅γ™γ‚‹γƒ„γƒΌγƒ«γγŸγ‚γAPI / SPI" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ε―θ¦–εŒ–γ¨δΊ€ζ΅γ™γ‚‹γƒ„γƒΌγƒ«γγŸγ‚γAPI / SPI" diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/org-gephi-tools-api.pot b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/org-gephi-tools-api.pot deleted file mode 100644 index ccc73e9a02..0000000000 --- a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/org-gephi-tools-api.pot +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI for tools that interact with visualization" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI for tools that interact with visualization" diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/package.html b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/package.html index 309303f429..0609ecf45b 100644 --- a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/package.html +++ b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/package.html @@ -1,6 +1,9 @@ - - - - API for selecting the current Tool. - - + + + + org.gephi.tools.api + + +

            API for selecting the current Tool.

            + + diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/pt_BR.po b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/pt_BR.po deleted file mode 100644 index 333bf39d37..0000000000 --- a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/pt_BR.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 14:13+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI para ferramentas que interagem com a visualizaΓ§Γ£o" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI para ferramentas que interagem com a visualizaΓ§Γ£o" diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/ru.po b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/ru.po deleted file mode 100644 index b207bc69b2..0000000000 --- a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/ru.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-11-23 07:59+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API/SPI для взаимодСйствия с Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI для взаимодСйствия с Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ" diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/zh_CN.po b/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/zh_CN.po deleted file mode 100644 index 4b55c7ac7c..0000000000 --- a/modules/ToolsAPI/src/main/resources/org/gephi/tools/api/zh_CN.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:06+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ε―θ§†εŒ–δΊ€δΊ’ε·₯ε…·δΉ‹API/SPI" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ε―θ§†εŒ–δΊ€δΊ’ε·₯ε…·δΉ‹API/SPI" diff --git a/modules/ToolsAPI/src/main/resources/org/gephi/tools/spi/package.html b/modules/ToolsAPI/src/main/resources/org/gephi/tools/spi/package.html index 0ba82f9d16..89426f198f 100644 --- a/modules/ToolsAPI/src/main/resources/org/gephi/tools/spi/package.html +++ b/modules/ToolsAPI/src/main/resources/org/gephi/tools/spi/package.html @@ -1,15 +1,16 @@ - - - - Interfaces for creating new tools. -

            Tools are functions for interacting with user inputs on the visualization window.

            -

            How-to create a tool implementation

            -
            1. Create a class which implement Tool interface
            2. -
            3. Add the following annotation to your class to be declared as a new - implementation @ServiceProvider(service=Tool.class)
            4. -
            5. Declare ToolEventListener instances for specifying how the - tool is interacting with user input like node click or mouse drag.
            6. -
            7. Provide a ToolUI instance for giving a name and an icon to your - tool.
            - - + + + + org.gephi.tools.spi + + +

            Tools are functions for interacting with user inputs on the visualization window.

            +

            How-to create a tool implementation

            +
              +
            1. Create a class which implement Tool interface
            2. +
            3. Add the following annotation to your class to be declared as a new implementation @ServiceProvider(service=Tool.class)
            4. +
            5. Declare ToolEventListener instances for specifying how the tool is interacting with user input like node click or mouse drag.
            6. +
            7. Provide a ToolUI instance for giving a name and an icon to your tool.
            8. +
            + + diff --git a/modules/ToolsAPI/src/main/resources/overview.html b/modules/ToolsAPI/src/main/resources/overview.html index ffddbd0441..98a446418f 100644 --- a/modules/ToolsAPI/src/main/resources/overview.html +++ b/modules/ToolsAPI/src/main/resources/overview.html @@ -1,15 +1,20 @@ - + + + Tools API + - Tool API/SPI defines interactive actions users can make with the - visualization. +

            + Tool API/SPI defines interactive actions users can make with the + visualization. +

            Tools are located in the visualization window toolbar. The API is used by Ui to control selected tool.

            The org.gephi.tools.spi package define how to implement - a new tool and the various events that can be catched from the + a new tool and the various events that can be caught from the visualization window.

            diff --git a/modules/ToolsPlugin/pom.xml b/modules/ToolsPlugin/pom.xml index f0df219efa..268948b1f2 100644 --- a/modules/ToolsPlugin/pom.xml +++ b/modules/ToolsPlugin/pom.xml @@ -4,13 +4,13 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi tools-plugin - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm ToolsPlugin @@ -26,23 +26,23 @@
            ${project.groupId} - dynamic-api + graph-api ${project.groupId} - graph-api + tools-api ${project.groupId} - tools-api + visualization-api ${project.groupId} - utils-collection + desktop-icons ${project.groupId} - visualization + desktop-attributes org.netbeans.api @@ -52,14 +52,6 @@ org.netbeans.api org-openide-util - - org.netbeans.api - org-openide-nodes - - - org.netbeans.api - org-openide-windows - ${project.groupId} utils @@ -68,14 +60,6 @@ ${project.groupId} project-api - - org.netbeans.api - org-openide-explorer - - - org.netbeans.api - org-netbeans-modules-settings - ${project.groupId} ui-utils @@ -92,15 +76,20 @@ org.netbeans.api org-openide-awt + + org.netbeans.api + org-openide-util-ui +
            - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin + org.gephi.tools.plugin diff --git a/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/Brush.java b/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/Brush.java index 36d8dd6ddf..6f07de754f 100644 --- a/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/Brush.java +++ b/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/Brush.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.tools.plugin; import java.awt.Color; @@ -54,12 +55,12 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.tools.spi.ToolSelectionType; import org.gephi.tools.spi.ToolUI; import org.gephi.ui.tools.plugin.BrushPanel; +import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = Tool.class) @@ -83,7 +84,10 @@ public void unselect() { brushPanel = null; } - private void brush(Node[] nodes) { + private boolean brush(Node[] nodes) { + if (nodes == null || nodes.length == 0) { + return false; + } for (Node node : nodes) { float r = node.r(); @@ -108,6 +112,8 @@ private void brush(Node[] nodes) { node.setG(g); node.setB(b); } + + return true; } private Node[] getDiffusedNodes(Node[] input) { @@ -138,15 +144,16 @@ public ToolEventListener[] getListeners() { listeners = new ToolEventListener[1]; listeners[0] = new NodePressingEventListener() { @Override - public void pressingNodes(Node[] nodes) { + public boolean pressingNodes(Node[] nodes) { diffusionMethod = brushPanel.getDiffusionMethod(); color = brushPanel.getColor().getColorComponents(color); intensity = brushPanel.getIntensity(); - brush(nodes); + return brush(nodes); } @Override - public void released() { + public boolean released() { + return false; } }; return listeners; @@ -171,7 +178,7 @@ public String getName() { @Override public Icon getIcon() { - return new ImageIcon(getClass().getResource("/org/gephi/tools/plugin/resources/brush.png")); + return ImageUtilities.loadImageIcon("ToolsPlugin/brush.svg", false); } @Override diff --git a/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/DiffusionMethods.java b/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/DiffusionMethods.java index e81452fce7..4cc61a55ba 100644 --- a/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/DiffusionMethods.java +++ b/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/DiffusionMethods.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.tools.plugin; import java.util.HashSet; @@ -49,18 +50,22 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class DiffusionMethods { public static Node[] getNeighbors(Graph graph, Node[] nodes) { + Set nodeTree = new HashSet<>(); + graph.readLock(); - Set nodeTree = new HashSet(); - for (Node n : nodes) { - nodeTree.addAll(graph.getNeighbors(n).toCollection()); + try { + for (Node n : nodes) { + nodeTree.addAll(graph.getNeighbors(n).toCollection()); + } + } finally { + graph.readUnlock(); } - graph.readUnlock(); + //remove original nodes for (Node n : nodes) { nodeTree.remove(n); @@ -69,19 +74,24 @@ public static Node[] getNeighbors(Graph graph, Node[] nodes) { } public static Node[] getNeighborsOfNeighbors(Graph graph, Node[] nodes) { + Set nodeTree = new HashSet<>(); + graph.readLock(); - Set nodeTree = new HashSet(); - for (Node n : nodes) { - nodeTree.addAll(graph.getNeighbors(n).toCollection()); - } - //remove original nodes - for (Node n : nodes) { - nodeTree.remove(n); - } - for (Node n : nodeTree.toArray(new Node[0])) { - nodeTree.addAll(graph.getNeighbors(n).toCollection()); + try { + for (Node n : nodes) { + nodeTree.addAll(graph.getNeighbors(n).toCollection()); + } + //remove original nodes + for (Node n : nodes) { + nodeTree.remove(n); + } + for (Node n : nodeTree.toArray(new Node[0])) { + nodeTree.addAll(graph.getNeighbors(n).toCollection()); + } + } finally { + graph.readUnlock(); } - graph.readUnlock(); + //remove original nodes for (Node n : nodes) { nodeTree.remove(n); @@ -90,12 +100,17 @@ public static Node[] getNeighborsOfNeighbors(Graph graph, Node[] nodes) { } public static Node[] getPredecessors(DirectedGraph graph, Node[] nodes) { + Set nodeTree = new HashSet<>(); + graph.readLock(); - Set nodeTree = new HashSet(); - for (Node n : nodes) { - nodeTree.addAll(graph.getPredecessors(n).toCollection()); + try { + for (Node n : nodes) { + nodeTree.addAll(graph.getPredecessors(n).toCollection()); + } + } finally { + graph.readUnlock(); } - graph.readUnlock(); + //remove original nodes for (Node n : nodes) { nodeTree.remove(n); @@ -104,12 +119,17 @@ public static Node[] getPredecessors(DirectedGraph graph, Node[] nodes) { } public static Node[] getSuccessors(DirectedGraph graph, Node[] nodes) { + Set nodeTree = new HashSet<>(); + graph.readLock(); - Set nodeTree = new HashSet(); - for (Node n : nodes) { - nodeTree.addAll(graph.getSuccessors(n).toCollection()); + try { + for (Node n : nodes) { + nodeTree.addAll(graph.getSuccessors(n).toCollection()); + } + } finally { + graph.readUnlock(); } - graph.readUnlock(); + //remove original nodes for (Node n : nodes) { nodeTree.remove(n); diff --git a/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/EdgePencil.java b/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/EdgePencil.java index 35922151fd..f366422b07 100644 --- a/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/EdgePencil.java +++ b/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/EdgePencil.java @@ -39,12 +39,14 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.tools.plugin; import java.awt.Color; import javax.swing.Icon; import javax.swing.ImageIcon; import javax.swing.JPanel; +import javax.swing.SwingUtilities; import org.gephi.datalab.api.GraphElementsController; import org.gephi.graph.api.Edge; import org.gephi.graph.api.GraphController; @@ -59,12 +61,12 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.tools.spi.ToolSelectionType; import org.gephi.tools.spi.ToolUI; import org.gephi.ui.tools.plugin.EdgePencilPanel; +import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = Tool.class) @@ -81,19 +83,19 @@ public class EdgePencil implements Tool { public EdgePencil() { //Default settings - color = Color.BLACK; + color = Color.GRAY; weight = 1f; //Add workspace listener for updating edge pencil panel options and status Lookup.getDefault().lookup(ProjectController.class).addWorkspaceListener(new WorkspaceListener() { @Override public void initialize(Workspace workspace) { - updatePanel(); + SwingUtilities.invokeLater(() -> updatePanel()); } @Override public void select(Workspace workspace) { - updatePanel(); + SwingUtilities.invokeLater(() -> updatePanel()); } @Override @@ -129,8 +131,10 @@ public void select() { public void unselect() { listeners = null; sourceNode = null; - color = edgePencilPanel.getColor(); - weight = edgePencilPanel.getWeight(); + if (edgePencilPanel != null) { + color = edgePencilPanel.getColor(); + weight = edgePencilPanel.getWeight(); + } } @Override @@ -138,7 +142,7 @@ public ToolEventListener[] getListeners() { listeners = new ToolEventListener[2]; listeners[0] = new NodeClickEventListener() { @Override - public void clickNodes(Node[] nodes) { + public boolean clickNodes(Node[] nodes) { Node n = nodes[0]; if (sourceNode == null) { @@ -148,21 +152,29 @@ public void clickNodes(Node[] nodes) { color = edgePencilPanel.getColor(); weight = edgePencilPanel.getWeight(); boolean directed = edgePencilPanel.isDirected; - Edge edge = Lookup.getDefault().lookup(GraphElementsController.class).createEdge(sourceNode, n, directed); + Edge edge = + Lookup.getDefault().lookup(GraphElementsController.class).createEdge(sourceNode, n, directed); + edge.setWeight(weight); edge.setColor(color); sourceNode = null; edgePencilPanel.setStatus(NbBundle.getMessage(EdgePencil.class, "EdgePencil.status1")); } + + return true; } }; listeners[1] = new MouseClickEventListener() { @Override - public void mouseClick(int[] positionViewport, float[] position3d) { + public boolean mouseClick(int[] positionViewport, float[] position3d) { if (sourceNode != null) { //Cancel edgePencilPanel.setStatus(NbBundle.getMessage(EdgePencil.class, "EdgePencil.status1")); sourceNode = null; + + return true; } + + return false; } }; return listeners; @@ -187,7 +199,7 @@ public String getName() { @Override public Icon getIcon() { - return new ImageIcon(getClass().getResource("/org/gephi/tools/plugin/resources/edgepencil.png")); + return ImageUtilities.loadImageIcon("ToolsPlugin/edgepencil.svg", false); } @Override @@ -204,6 +216,6 @@ public int getPosition() { @Override public ToolSelectionType getSelectionType() { - return ToolSelectionType.SELECTION; + return ToolSelectionType.SINGLE_NODE_SELECTION; } } diff --git a/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/Edit.java b/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/Edit.java index 2ee37532a4..f4c4f9cd3a 100644 --- a/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/Edit.java +++ b/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/Edit.java @@ -39,55 +39,59 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.tools.plugin; +import java.awt.FlowLayout; import javax.swing.Icon; -import javax.swing.ImageIcon; +import javax.swing.JLabel; import javax.swing.JPanel; -import org.gephi.graph.api.Node; -import org.gephi.tools.api.EditWindowController; +import org.gephi.desktop.attributes.api.AttributesUIController; import org.gephi.tools.spi.NodeClickEventListener; import org.gephi.tools.spi.Tool; import org.gephi.tools.spi.ToolEventListener; import org.gephi.tools.spi.ToolSelectionType; import org.gephi.tools.spi.ToolUI; +import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = Tool.class) public class Edit implements Tool { - private EditWindowController edc; @Override public void select() { - edc=Lookup.getDefault().lookup(EditWindowController.class); - edc.openEditWindow(); + AttributesUIController controller = Lookup.getDefault().lookup(AttributesUIController.class); + if (controller != null) { + controller.enableEdit(); + controller.openWindowAndRequestActive(); + } } @Override public void unselect() { - edc.disableEdit(); - edc.closeEditWindow(); + AttributesUIController controller = Lookup.getDefault().lookup(AttributesUIController.class); + if (controller != null) { + controller.disableEdit(); + } } @Override public ToolEventListener[] getListeners() { - return new ToolEventListener[]{new NodeClickEventListener() { - - @Override - public void clickNodes(Node[] nodes) { - if (nodes.length > 0) { - edc.editNode(nodes[0]); - } else { - edc.disableEdit(); - } - } - }}; + return new ToolEventListener[] {(NodeClickEventListener) nodes -> { + AttributesUIController controller = Lookup.getDefault().lookup(AttributesUIController.class); + if (nodes != null && nodes.length > 0) { + controller.editNode(nodes[0]); + } else { + controller.disableEdit(); + } + + return true; + }}; } @Override @@ -96,12 +100,16 @@ public ToolUI getUI() { @Override public JPanel getPropertiesBar(Tool tool) { - return new JPanel(); + JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT)); + JLabel label = new JLabel(NbBundle.getMessage(Edit.class, "Edit.propertiesbar")); + label.setFont(label.getFont().deriveFont(10f)); + panel.add(label); + return panel; } @Override public Icon getIcon() { - return new ImageIcon(getClass().getResource("/org/gephi/ui/tools/plugin/edit/edit.png")); + return ImageUtilities.loadImageIcon("ToolsPlugin/edit.svg", false); } @Override @@ -116,7 +124,7 @@ public String getDescription() { @Override public int getPosition() { - return 200; + return 10; } }; } diff --git a/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/HeatMap.java b/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/HeatMap.java index c7a380429c..855a497438 100644 --- a/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/HeatMap.java +++ b/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/HeatMap.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.tools.plugin; import java.awt.Color; @@ -63,12 +64,12 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.tools.spi.ToolUI; import org.gephi.ui.tools.plugin.HeatMapPanel; import org.gephi.ui.utils.GradientUtils.LinearGradient; +import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = Tool.class) @@ -84,8 +85,8 @@ public class HeatMap implements Tool { public HeatMap() { //Default settings - gradientColors = new Color[]{new Color(227, 74, 51), new Color(253, 187, 132), new Color(254, 232, 200)}; - gradientPositions = new float[]{0f, 0.5f, 1f}; + gradientColors = new Color[] {new Color(227, 74, 51), new Color(253, 187, 132), new Color(254, 232, 200)}; + gradientPositions = new float[] {0f, 0.5f, 1f}; } @Override @@ -103,7 +104,7 @@ public ToolEventListener[] getListeners() { listeners = new ToolEventListener[1]; listeners[0] = new NodeClickEventListener() { @Override - public void clickNodes(Node[] nodes) { + public boolean clickNodes(Node[] nodes) { try { Node n = nodes[0]; Color[] colors; @@ -155,10 +156,14 @@ public void clickNodes(Node[] nodes) { } Color c = colors[0]; n.setColor(c); - heatMapPanel.setStatus(NbBundle.getMessage(HeatMap.class, "HeatMap.status.maxdistance") + new DecimalFormat("#.##").format(algorithm.getMaxDistance())); + heatMapPanel.setStatus(NbBundle.getMessage(HeatMap.class, "HeatMap.status.maxdistance") + + " " + new DecimalFormat("#.##").format(algorithm.getMaxDistance())); + } catch (Exception e) { Logger.getLogger("").log(Level.SEVERE, "", e); } + + return true; } }; return listeners; @@ -180,7 +185,7 @@ public String getName() { @Override public Icon getIcon() { - return new ImageIcon(getClass().getResource("/org/gephi/tools/plugin/resources/heatmap.png")); + return ImageUtilities.loadImageIcon("ToolsPlugin/heatmap.svg", false); } @Override diff --git a/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/NodePencil.java b/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/NodePencil.java index 3918ff1d75..b90a6f22d6 100644 --- a/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/NodePencil.java +++ b/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/NodePencil.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.tools.plugin; import java.awt.Color; @@ -55,12 +56,12 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.tools.spi.ToolSelectionType; import org.gephi.tools.spi.ToolUI; import org.gephi.ui.tools.plugin.NodePencilPanel; +import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = Tool.class) @@ -94,7 +95,7 @@ public ToolEventListener[] getListeners() { listeners = new ToolEventListener[1]; listeners[0] = new MouseClickEventListener() { @Override - public void mouseClick(int[] positionViewport, float[] position3d) { + public boolean mouseClick(int[] positionViewport, float[] position3d) { color = nodePencilPanel.getColor(); size = nodePencilPanel.getNodeSize(); GraphController gc = Lookup.getDefault().lookup(GraphController.class); @@ -106,6 +107,8 @@ public void mouseClick(int[] positionViewport, float[] position3d) { node.setSize(size); node.setColor(color); graph.addNode(node); + + return true; } }; return listeners; @@ -129,7 +132,7 @@ public String getName() { @Override public Icon getIcon() { - return new ImageIcon(getClass().getResource("/org/gephi/tools/plugin/resources/nodepencil.png")); + return ImageUtilities.loadImageIcon("ToolsPlugin/nodepencil.svg", false); } @Override diff --git a/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/NodesDragger.java b/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/NodesDragger.java new file mode 100644 index 0000000000..773db4662e --- /dev/null +++ b/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/NodesDragger.java @@ -0,0 +1,153 @@ +/* + Copyright 2008-2024 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2024 Gephi Consortium. + */ + +package org.gephi.tools.plugin; + +import org.gephi.graph.api.Node; +import org.gephi.tools.spi.*; +import org.openide.util.ImageUtilities; +import org.openide.util.NbBundle; +import org.openide.util.lookup.ServiceProvider; + +import javax.swing.*; + +/** + * @author Eduardo Ramos + */ +@ServiceProvider(service = Tool.class) +public class NodesDragger implements Tool { + + private ToolEventListener[] listeners; + //Vars + private Node[] nodes; + private float[] initialX; + private float[] initialY; + + @Override + public void select() { + } + + @Override + public void unselect() { + listeners = null; + nodes = null; + } + + @Override + public ToolEventListener[] getListeners() { + listeners = new ToolEventListener[1]; + listeners[0] = new NodePressAndDraggingEventListener() { + @Override + public boolean pressNodes(Node[] nodes) { + NodesDragger.this.nodes = nodes; + + initialX = new float[nodes.length]; + initialY = new float[nodes.length]; + for (int i = 0; i < nodes.length; i++) { + Node n = nodes[i]; + initialX[i] = n.x(); + initialY[i] = n.y(); + } + + return true; + } + + @Override + public void released() { + nodes = null; + } + + @Override + public boolean drag(float displacementXScreen, float displacementYScreen, + float displacementXWorld, float displacementYWorld) { + if (nodes != null && nodes.length > 0) { + for (int i = 0; i < nodes.length; i++) { + Node n = nodes[i]; + n.setX(initialX[i] + displacementXWorld); + n.setY(initialY[i] + displacementYWorld); + } + + return false; + } + + return false; + } + }; + return listeners; + } + + @Override + public ToolUI getUI() { + return new ToolUI() { + @Override + public JPanel getPropertiesBar(Tool tool) { + return null; + } + + @Override + public String getName() { + return NbBundle.getMessage(NodesDragger.class, "NodesDragger.name"); + } + + @Override + public Icon getIcon() { + return ImageUtilities.loadImageIcon("ToolsPlugin/drag.svg", false); + } + + @Override + public String getDescription() { + return NbBundle.getMessage(NodesDragger.class, "NodesDragger.description"); + } + + @Override + public int getPosition() { + return 0; + } + }; + + } + + @Override + public ToolSelectionType getSelectionType() { + return ToolSelectionType.SELECTION; + } +} diff --git a/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/Painter.java b/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/Painter.java index 4b1b2c6eeb..82863e7b6d 100644 --- a/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/Painter.java +++ b/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/Painter.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.tools.plugin; import java.awt.Color; @@ -52,11 +53,11 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.tools.spi.ToolSelectionType; import org.gephi.tools.spi.ToolUI; import org.gephi.ui.tools.plugin.PainterPanel; +import org.openide.util.ImageUtilities; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = Tool.class) @@ -83,7 +84,11 @@ public ToolEventListener[] getListeners() { listeners = new ToolEventListener[1]; listeners[0] = new NodePressingEventListener() { @Override - public void pressingNodes(Node[] nodes) { + public boolean pressingNodes(Node[] nodes) { + if (nodes == null || nodes.length == 0) { + return false; + } + color = painterPanel.getColor().getColorComponents(color); for (Node node : nodes) { float r = node.r(); @@ -96,10 +101,13 @@ public void pressingNodes(Node[] nodes) { node.setG(g); node.setB(b); } + + return true; } @Override - public void released() { + public boolean released() { + return false; } }; return listeners; @@ -122,7 +130,7 @@ public String getName() { @Override public Icon getIcon() { - return new ImageIcon(getClass().getResource("/org/gephi/tools/plugin/resources/painter.png")); + return ImageUtilities.loadImageIcon("ToolsPlugin/painter.svg", false); } @Override diff --git a/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/ShortestPath.java b/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/ShortestPath.java index bf6a031345..dbdfb6e90d 100644 --- a/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/ShortestPath.java +++ b/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/ShortestPath.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.tools.plugin; import java.awt.Color; @@ -59,19 +60,20 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.tools.spi.ToolSelectionType; import org.gephi.tools.spi.ToolUI; import org.gephi.ui.tools.plugin.ShortestPathPanel; -import org.gephi.visualization.VizController; +import org.gephi.visualization.api.VisualizationController; +import org.openide.util.ImageUtilities; import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = Tool.class) public class ShortestPath implements Tool { //Architecture + private final VisualizationController visualizationController; private ToolEventListener[] listeners; private ShortestPathPanel shortestPathPanel; //Settings @@ -83,13 +85,15 @@ public class ShortestPath implements Tool { public ShortestPath() { //Default settings color = Color.RED; + visualizationController = Lookup.getDefault().lookup(VisualizationController.class); } @Override public void select() { - settingEdgeSourceColor = !VizController.getInstance().getVizModel().isEdgeHasUniColor(); - VizController.getInstance().getVizModel().setEdgeHasUniColor(true); - VizController.getInstance().getVizConfig().setEnableAutoSelect(false); +// settingEdgeSourceColor = !VizController.getInstance().getVizModel().isEdgeHasUniColor(); +// VizController.getInstance().getVizModel().setEdgeHasUniColor(true); +// VizController.getInstance().getVizConfig().setEnableAutoSelect(false); + //TODO } @Override @@ -97,8 +101,9 @@ public void unselect() { listeners = null; sourceNode = null; shortestPathPanel = null; - VizController.getInstance().getVizModel().setEdgeHasUniColor(settingEdgeSourceColor); - VizController.getInstance().getVizConfig().setEnableAutoSelect(true); +// VizController.getInstance().getVizModel().setEdgeHasUniColor(settingEdgeSourceColor); +// VizController.getInstance().getVizConfig().setEnableAutoSelect(true); + //TODO } @Override @@ -106,7 +111,7 @@ public ToolEventListener[] getListeners() { listeners = new ToolEventListener[2]; listeners[0] = new NodeClickEventListener() { @Override - public void clickNodes(Node[] nodes) { + public boolean clickNodes(Node[] nodes) { Node n = nodes[0]; if (sourceNode == null) { sourceNode = n; @@ -129,22 +134,24 @@ public void clickNodes(Node[] nodes) { double distance; if ((distance = algorithm.getDistances().get(targetNode)) != Double.POSITIVE_INFINITY) { targetNode.setColor(color); - VizController.getInstance().selectNode(targetNode); + visualizationController.setCustomSelection(); + visualizationController.selectNodes(new Node[]{targetNode}); Edge predecessorEdge = algorithm.getPredecessorIncoming(targetNode); Node predecessor = algorithm.getPredecessor(targetNode); while (predecessorEdge != null && predecessor != sourceNode) { predecessorEdge.setColor(color); - VizController.getInstance().selectEdge(predecessorEdge); + visualizationController.selectEdges(new Edge[]{predecessorEdge}); predecessor.setColor(color); - VizController.getInstance().selectNode(predecessor); + visualizationController.selectNodes(new Node[]{predecessor}); predecessorEdge = algorithm.getPredecessorIncoming(predecessor); predecessor = algorithm.getPredecessor(predecessor); } predecessorEdge.setColor(color); - VizController.getInstance().selectEdge(predecessorEdge); + visualizationController.selectEdges(new Edge[]{predecessorEdge}); sourceNode.setColor(color); - VizController.getInstance().selectNode(sourceNode); - shortestPathPanel.setResult(NbBundle.getMessage(ShortestPath.class, "ShortestPath.result", distance)); + visualizationController.selectNodes(new Node[]{sourceNode}); + shortestPathPanel + .setResult(NbBundle.getMessage(ShortestPath.class, "ShortestPath.result", distance)); } else { //No path shortestPathPanel.setResult(NbBundle.getMessage(ShortestPath.class, "ShortestPath.noresult")); @@ -153,18 +160,22 @@ public void clickNodes(Node[] nodes) { sourceNode = null; shortestPathPanel.setStatus(NbBundle.getMessage(ShortestPath.class, "ShortestPath.status1")); } + + return true; } }; listeners[1] = new MouseClickEventListener() { @Override - public void mouseClick(int[] positionViewport, float[] position3d) { + public boolean mouseClick(int[] positionViewport, float[] position3d) { if (sourceNode != null) { //Cancel shortestPathPanel.setStatus(NbBundle.getMessage(ShortestPath.class, "ShortestPath.status1")); sourceNode = null; } else { - VizController.getInstance().resetSelection(); + visualizationController.resetSelection(); } + + return true; } }; return listeners; @@ -188,7 +199,7 @@ public String getName() { @Override public Icon getIcon() { - return new ImageIcon(getClass().getResource("/org/gephi/tools/plugin/resources/shortestpath.png")); + return ImageUtilities.loadImageIcon("ToolsPlugin/shortestpath.svg", false); } @Override @@ -205,6 +216,6 @@ public int getPosition() { @Override public ToolSelectionType getSelectionType() { - return ToolSelectionType.SELECTION; + return ToolSelectionType.SINGLE_NODE_SELECTION; } } diff --git a/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/Sizer.java b/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/Sizer.java index 14f4f51964..cfebf428d8 100644 --- a/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/Sizer.java +++ b/modules/ToolsPlugin/src/main/java/org/gephi/tools/plugin/Sizer.java @@ -39,10 +39,10 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.tools.plugin; import javax.swing.Icon; -import javax.swing.ImageIcon; import javax.swing.JPanel; import org.gephi.graph.api.Node; import org.gephi.tools.spi.NodePressAndDraggingEventListener; @@ -51,20 +51,20 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.tools.spi.ToolSelectionType; import org.gephi.tools.spi.ToolUI; import org.gephi.ui.tools.plugin.SizerPanel; +import org.openide.util.ImageUtilities; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = Tool.class) public class Sizer implements Tool { + private final float INTENSITY = 0.4f; + private final float LOWER_LIMIT = 0.3f; private SizerPanel sizerPanel; private ToolEventListener[] listeners; - private final float INTENSITY = 0.4f; - private final float LIMIT = 0.1f; //Vars private Node[] nodes; private float[] sizes; @@ -86,13 +86,15 @@ public ToolEventListener[] getListeners() { listeners = new ToolEventListener[1]; listeners[0] = new NodePressAndDraggingEventListener() { @Override - public void pressNodes(Node[] nodes) { + public boolean pressNodes(Node[] nodes) { Sizer.this.nodes = nodes; sizes = new float[nodes.length]; for (int i = 0; i < nodes.length; i++) { Node n = nodes[i]; sizes[i] = n.size(); } + + return true; } @Override @@ -102,22 +104,27 @@ public void released() { } @Override - public void drag(float displacementX, float displacementY) { + public boolean drag(float displacementXScreen, float displacementYScreen, + float displacementXWorld, float displacementYWorld) { if (nodes != null) { float averageSize = 0f; for (int i = 0; i < nodes.length; i++) { Node n = nodes[i]; float size = sizes[i]; - size += displacementY * INTENSITY; - if (size < LIMIT) { - size = LIMIT; + size += displacementYWorld * INTENSITY; + if (size < LOWER_LIMIT) { + size = LOWER_LIMIT; } averageSize += size; n.setSize(size); } averageSize /= nodes.length; sizerPanel.setAvgSize(averageSize); + + return true; } + + return false; } }; return listeners; @@ -139,7 +146,7 @@ public String getName() { @Override public Icon getIcon() { - return new ImageIcon(getClass().getResource("/org/gephi/tools/plugin/resources/sizer.png")); + return ImageUtilities.loadImageIcon("ToolsPlugin/sizer.svg", false); } @Override @@ -156,6 +163,6 @@ public int getPosition() { @Override public ToolSelectionType getSelectionType() { - return ToolSelectionType.SELECTION_AND_DRAGGING; + return ToolSelectionType.SELECTION; } } diff --git a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/BrushPanel.java b/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/BrushPanel.java index 799eae9b53..1685ba3e8a 100644 --- a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/BrushPanel.java +++ b/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/BrushPanel.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.tools.plugin; import java.awt.Color; @@ -47,12 +48,23 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.ui.components.JColorButton; /** - * * @author Mathieu Bastian */ public class BrushPanel extends javax.swing.JPanel { - /** Creates new form BrushPanel */ + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton colorButton; + private javax.swing.JComboBox diffusionCombobox; + private javax.swing.JSpinner intensitySpinner; + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel labelColor; + private javax.swing.JLabel labelDiffusion; + private javax.swing.JLabel labelIntensity; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form BrushPanel + */ public BrushPanel() { initComponents(); @@ -60,31 +72,32 @@ public BrushPanel() { diffusionCombobox.setModel(diffusionComboModel); } - public void setIntensity(float intensity) { - intensitySpinner.setValue((int) (intensity * 100)); - } - public float getIntensity() { return ((Integer) intensitySpinner.getModel().getValue()).floatValue() / 100f; } - public void setColor(Color color) { - ((JColorButton) colorButton).setColor(color); + public void setIntensity(float intensity) { + intensitySpinner.setValue((int) (intensity * 100)); } public Color getColor() { return ((JColorButton) colorButton).getColor(); } - public void setDiffusionMethod(DiffusionMethods.DiffusionMethod diffusionMethod) { - diffusionCombobox.setSelectedItem(diffusionMethod); + public void setColor(Color color) { + ((JColorButton) colorButton).setColor(color); } public DiffusionMethods.DiffusionMethod getDiffusionMethod() { return (DiffusionMethods.DiffusionMethod) diffusionCombobox.getSelectedItem(); } - /** This method is called from within the constructor to + public void setDiffusionMethod(DiffusionMethods.DiffusionMethod diffusionMethod) { + diffusionCombobox.setSelectedItem(diffusionMethod); + } + + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -101,69 +114,74 @@ private void initComponents() { intensitySpinner = new javax.swing.JSpinner(); jLabel1 = new javax.swing.JLabel(); - labelDiffusion.setFont(labelDiffusion.getFont().deriveFont((float)10)); - labelDiffusion.setText(org.openide.util.NbBundle.getMessage(BrushPanel.class, "BrushPanel.labelDiffusion.text")); // NOI18N + labelDiffusion.setFont(labelDiffusion.getFont().deriveFont((float) 10)); + labelDiffusion.setText( + org.openide.util.NbBundle.getMessage(BrushPanel.class, "BrushPanel.labelDiffusion.text")); // NOI18N - labelColor.setFont(labelColor.getFont().deriveFont((float)10)); - labelColor.setText(org.openide.util.NbBundle.getMessage(BrushPanel.class, "BrushPanel.labelColor.text")); // NOI18N + labelColor.setFont(labelColor.getFont().deriveFont((float) 10)); + labelColor + .setText(org.openide.util.NbBundle.getMessage(BrushPanel.class, "BrushPanel.labelColor.text")); // NOI18N - diffusionCombobox.setFont(diffusionCombobox.getFont().deriveFont((float)10)); - diffusionCombobox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); + diffusionCombobox.setFont(diffusionCombobox.getFont().deriveFont((float) 10)); + diffusionCombobox + .setModel(new javax.swing.DefaultComboBoxModel(new String[] {"Item 1", "Item 2", "Item 3", "Item 4"})); - colorButton.setText(org.openide.util.NbBundle.getMessage(BrushPanel.class, "BrushPanel.colorButton.text")); // NOI18N + colorButton + .setText(org.openide.util.NbBundle.getMessage(BrushPanel.class, "BrushPanel.colorButton.text")); // NOI18N colorButton.setContentAreaFilled(false); colorButton.setFocusPainted(false); - labelIntensity.setFont(labelIntensity.getFont().deriveFont((float)10)); - labelIntensity.setText(org.openide.util.NbBundle.getMessage(BrushPanel.class, "BrushPanel.labelIntensity.text")); // NOI18N + labelIntensity.setFont(labelIntensity.getFont().deriveFont((float) 10)); + labelIntensity.setText( + org.openide.util.NbBundle.getMessage(BrushPanel.class, "BrushPanel.labelIntensity.text")); // NOI18N - intensitySpinner.setFont(intensitySpinner.getFont().deriveFont((float)10)); + intensitySpinner.setFont(intensitySpinner.getFont().deriveFont((float) 10)); intensitySpinner.setModel(new javax.swing.SpinnerNumberModel(0, 0, 100, 1)); - jLabel1.setFont(jLabel1.getFont().deriveFont((float)10)); + jLabel1.setFont(jLabel1.getFont().deriveFont((float) 10)); jLabel1.setText(org.openide.util.NbBundle.getMessage(BrushPanel.class, "BrushPanel.jLabel1.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(labelColor) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(colorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(labelIntensity) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(intensitySpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 54, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jLabel1) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 239, Short.MAX_VALUE) - .addComponent(labelDiffusion) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(diffusionCombobox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(2, 2, 2)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(labelColor) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(colorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 20, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(labelIntensity) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(intensitySpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 54, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(jLabel1) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 239, Short.MAX_VALUE) + .addComponent(labelDiffusion) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(diffusionCombobox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(2, 2, 2)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(labelColor, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(colorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelIntensity, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(intensitySpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jLabel1)) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(diffusionCombobox, javax.swing.GroupLayout.PREFERRED_SIZE, 22, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelDiffusion, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelColor, javax.swing.GroupLayout.PREFERRED_SIZE, 28, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(colorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 28, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(labelIntensity, javax.swing.GroupLayout.PREFERRED_SIZE, 28, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(intensitySpinner, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(jLabel1)) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(diffusionCombobox, javax.swing.GroupLayout.PREFERRED_SIZE, 22, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(labelDiffusion, javax.swing.GroupLayout.PREFERRED_SIZE, 28, + javax.swing.GroupLayout.PREFERRED_SIZE)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton colorButton; - private javax.swing.JComboBox diffusionCombobox; - private javax.swing.JSpinner intensitySpinner; - private javax.swing.JLabel jLabel1; - private javax.swing.JLabel labelColor; - private javax.swing.JLabel labelDiffusion; - private javax.swing.JLabel labelIntensity; - // End of variables declaration//GEN-END:variables } diff --git a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/EdgePencilPanel.java b/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/EdgePencilPanel.java index 692059b31d..fff58ebf84 100644 --- a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/EdgePencilPanel.java +++ b/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/EdgePencilPanel.java @@ -39,28 +39,40 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.tools.plugin; import java.awt.Color; +import java.awt.Dimension; import javax.swing.DefaultComboBoxModel; import org.gephi.ui.components.JColorButton; import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public class EdgePencilPanel extends javax.swing.JPanel { + public boolean isDirected; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton colorButton; + private javax.swing.JLabel labelColor; + private javax.swing.JLabel labelType; + private javax.swing.JLabel labelWeight; + private javax.swing.JLabel statusLabel; + private javax.swing.JComboBox typeComboBox; + private javax.swing.JSpinner weightSpinner; + // End of variables declaration//GEN-END:variables + /** * Creates new form EdgePencilPanel */ public EdgePencilPanel() { isDirected = true; initComponents(); - typeComboBox.setModel(new DefaultComboBoxModel(new String[]{ - NbBundle.getMessage(EdgePencilPanel.class, "EdgePencilPanel.type.directed"), - NbBundle.getMessage(EdgePencilPanel.class, "EdgePencilPanel.type.undirected") + typeComboBox.setModel(new DefaultComboBoxModel(new String[] { + NbBundle.getMessage(EdgePencilPanel.class, "EdgePencilPanel.type.directed"), + NbBundle.getMessage(EdgePencilPanel.class, "EdgePencilPanel.type.undirected") })); } @@ -68,20 +80,20 @@ public void setStatus(String status) { statusLabel.setText(status); } - public void setColor(Color color) { - ((JColorButton) colorButton).setColor(color); - } - public Color getColor() { return ((JColorButton) colorButton).getColor(); } + public void setColor(Color color) { + ((JColorButton) colorButton).setColor(color); + } + public float getWeight() { return (Float) weightSpinner.getModel().getValue(); } public void setWeight(float weight) { - weightSpinner.getModel().setValue(new Float(weight)); + weightSpinner.getModel().setValue(weight); } public void setType(boolean directed) { @@ -111,77 +123,88 @@ private void initComponents() { typeComboBox = new javax.swing.JComboBox(); labelType = new javax.swing.JLabel(); - statusLabel.setFont(statusLabel.getFont().deriveFont((float)10)); - statusLabel.setText(org.openide.util.NbBundle.getMessage(EdgePencilPanel.class, "EdgePencilPanel.statusLabel.text")); // NOI18N + statusLabel.setFont(statusLabel.getFont().deriveFont((float) 10)); + statusLabel.setText( + org.openide.util.NbBundle.getMessage(EdgePencilPanel.class, "EdgePencilPanel.statusLabel.text")); // NOI18N - weightSpinner.setFont(weightSpinner.getFont().deriveFont((float)10)); - weightSpinner.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(1.0f), Float.valueOf(0.0f), null, Float.valueOf(0.1f))); + weightSpinner.setFont(weightSpinner.getFont().deriveFont((float) 10)); + weightSpinner.setModel( + new javax.swing.SpinnerNumberModel(Float.valueOf(1.0f), Float.valueOf(0.0f), null, Float.valueOf(0.1f))); - labelWeight.setFont(labelWeight.getFont().deriveFont((float)10)); - labelWeight.setText(org.openide.util.NbBundle.getMessage(EdgePencilPanel.class, "EdgePencilPanel.labelWeight.text")); // NOI18N + labelWeight.setFont(labelWeight.getFont().deriveFont((float) 10)); + labelWeight.setText( + org.openide.util.NbBundle.getMessage(EdgePencilPanel.class, "EdgePencilPanel.labelWeight.text")); // NOI18N - colorButton.setText(org.openide.util.NbBundle.getMessage(EdgePencilPanel.class, "EdgePencilPanel.colorButton.text")); // NOI18N + colorButton.setText( + org.openide.util.NbBundle.getMessage(EdgePencilPanel.class, "EdgePencilPanel.colorButton.text")); // NOI18N colorButton.setContentAreaFilled(false); - labelColor.setFont(labelColor.getFont().deriveFont((float)10)); - labelColor.setText(org.openide.util.NbBundle.getMessage(EdgePencilPanel.class, "EdgePencilPanel.labelColor.text")); // NOI18N + labelColor.setFont(labelColor.getFont().deriveFont((float) 10)); + labelColor.setText( + org.openide.util.NbBundle.getMessage(EdgePencilPanel.class, "EdgePencilPanel.labelColor.text")); // NOI18N + typeComboBox.setFont(typeComboBox.getFont().deriveFont((float) 10)); typeComboBox.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { typeComboBoxActionPerformed(evt); } }); + typeComboBox.setPreferredSize(new Dimension(170, 18)); - labelType.setText(org.openide.util.NbBundle.getMessage(EdgePencilPanel.class, "EdgePencilPanel.labelType.text")); // NOI18N + labelType.setFont(labelType.getFont().deriveFont((float) 10)); + labelType.setText( + org.openide.util.NbBundle.getMessage(EdgePencilPanel.class, "EdgePencilPanel.labelType.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap() - .addComponent(statusLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 113, Short.MAX_VALUE) - .addComponent(labelType) - .addGap(6, 6, 6) - .addComponent(typeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(labelColor) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(colorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(labelWeight) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(weightSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 47, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addComponent(statusLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 113, Short.MAX_VALUE) + .addComponent(labelType) + .addGap(6, 6, 6) + .addComponent(typeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(labelColor) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(colorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 20, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(labelWeight) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(weightSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 47, + javax.swing.GroupLayout.PREFERRED_SIZE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(weightSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelWeight, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(colorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelColor, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(statusLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(typeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelType, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(weightSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(labelWeight, javax.swing.GroupLayout.PREFERRED_SIZE, 28, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(colorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 28, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(labelColor, javax.swing.GroupLayout.PREFERRED_SIZE, 28, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(statusLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 28, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(typeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(labelType, javax.swing.GroupLayout.PREFERRED_SIZE, 28, + javax.swing.GroupLayout.PREFERRED_SIZE)) ); }// //GEN-END:initComponents - private void typeComboBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_typeComboBoxActionPerformed + private void typeComboBoxActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_typeComboBoxActionPerformed if (typeComboBox.getSelectedIndex() == 0) { isDirected = true; } else { isDirected = false; } }//GEN-LAST:event_typeComboBoxActionPerformed - public boolean isDirected; - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton colorButton; - private javax.swing.JLabel labelColor; - private javax.swing.JLabel labelType; - private javax.swing.JLabel labelWeight; - private javax.swing.JLabel statusLabel; - private javax.swing.JComboBox typeComboBox; - private javax.swing.JSpinner weightSpinner; - // End of variables declaration//GEN-END:variables } diff --git a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/HeatMapPanel.java b/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/HeatMapPanel.java index 29619bce09..1cd1cebfe3 100644 --- a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/HeatMapPanel.java +++ b/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/HeatMapPanel.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.tools.plugin; import java.awt.Color; @@ -61,7 +62,6 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.utils.PaletteUtils.Palette; /** - * * @author Mathieu Bastian */ public class HeatMapPanel extends javax.swing.JPanel { @@ -71,8 +71,19 @@ public class HeatMapPanel extends javax.swing.JPanel { private JCheckBox dontPaintUnreachableCheckbox; private JCheckBox invertPaletteCheckbox; private boolean usePalette = false; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPanel gradientPanel; + private javax.swing.JLabel labelGradient; + private javax.swing.JLabel labelMode; + private javax.swing.JLabel labelPalette; + private javax.swing.JComboBox modeComboBox; + private javax.swing.JPanel palettePanel; + private javax.swing.JLabel statusLabel; + // End of variables declaration//GEN-END:variables - /** Creates new form HeatMapPanel */ + /** + * Creates new form HeatMapPanel + */ public HeatMapPanel(Color[] gradientColors, float[] gradientPositions, boolean dontPaintUnreachable) { initComponents(); @@ -85,8 +96,10 @@ public HeatMapPanel(Color[] gradientColors, float[] gradientPositions, boolean d dontPaintUnreachableCheckbox = new JCheckBox(); dontPaintUnreachableCheckbox.setSelected(dontPaintUnreachable); dontPaintUnreachableCheckbox.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N - dontPaintUnreachableCheckbox.setText(org.openide.util.NbBundle.getMessage(HeatMapPanel.class, "HeatMapPanel.dontPaintUnreachableCheckbox.text")); // NOI18N - dontPaintUnreachableCheckbox.setToolTipText(org.openide.util.NbBundle.getMessage(HeatMapPanel.class, "HeatMapPanel.dontPaintUnreachableCheckbox.text")); // NOI18N + dontPaintUnreachableCheckbox.setText(org.openide.util.NbBundle + .getMessage(HeatMapPanel.class, "HeatMapPanel.dontPaintUnreachableCheckbox.text")); // NOI18N + dontPaintUnreachableCheckbox.setToolTipText(org.openide.util.NbBundle + .getMessage(HeatMapPanel.class, "HeatMapPanel.dontPaintUnreachableCheckbox.text")); // NOI18N dontPaintUnreachableCheckbox.setPreferredSize(new java.awt.Dimension(160, 28)); gradientPanel.add(dontPaintUnreachableCheckbox); @@ -94,7 +107,8 @@ public HeatMapPanel(Color[] gradientColors, float[] gradientPositions, boolean d invertPaletteCheckbox = new JCheckBox(); invertPaletteCheckbox.setSelected(dontPaintUnreachable); invertPaletteCheckbox.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N - invertPaletteCheckbox.setText(org.openide.util.NbBundle.getMessage(HeatMapPanel.class, "HeatMapPanel.invertPalette.text")); // NOI18N + invertPaletteCheckbox.setText( + org.openide.util.NbBundle.getMessage(HeatMapPanel.class, "HeatMapPanel.invertPalette.text")); // NOI18N invertPaletteCheckbox.setPreferredSize(new java.awt.Dimension(139, 28)); invertPaletteCheckbox.addItemListener(new ItemListener() { @@ -161,7 +175,8 @@ public Palette getSelectedPalette() { return (Palette) paletteComboBox.getSelectedItem(); } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -180,26 +195,30 @@ private void initComponents() { setPreferredSize(new java.awt.Dimension(654, 28)); - statusLabel.setFont(statusLabel.getFont().deriveFont((float)10)); - statusLabel.setText(org.openide.util.NbBundle.getMessage(HeatMapPanel.class, "HeatMapPanel.statusLabel.text")); // NOI18N + statusLabel.setFont(statusLabel.getFont().deriveFont((float) 10)); + statusLabel.setText( + org.openide.util.NbBundle.getMessage(HeatMapPanel.class, "HeatMapPanel.statusLabel.text")); // NOI18N - labelMode.setFont(labelMode.getFont().deriveFont((float)10)); - labelMode.setText(org.openide.util.NbBundle.getMessage(HeatMapPanel.class, "HeatMapPanel.labelMode.text")); // NOI18N + labelMode.setFont(labelMode.getFont().deriveFont((float) 10)); + labelMode + .setText(org.openide.util.NbBundle.getMessage(HeatMapPanel.class, "HeatMapPanel.labelMode.text")); // NOI18N - modeComboBox.setFont(modeComboBox.getFont().deriveFont((float)10)); - modeComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Gradient", "Palette" })); + modeComboBox.setFont(modeComboBox.getFont().deriveFont((float) 10)); + modeComboBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] {"Gradient", "Palette"})); gradientPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 5, 0)); - labelGradient.setFont(labelGradient.getFont().deriveFont((float)10)); - labelGradient.setText(org.openide.util.NbBundle.getMessage(HeatMapPanel.class, "HeatMapPanel.labelGradient.text")); // NOI18N + labelGradient.setFont(labelGradient.getFont().deriveFont((float) 10)); + labelGradient.setText( + org.openide.util.NbBundle.getMessage(HeatMapPanel.class, "HeatMapPanel.labelGradient.text")); // NOI18N labelGradient.setPreferredSize(new java.awt.Dimension(45, 28)); gradientPanel.add(labelGradient); palettePanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 5, 0)); - labelPalette.setFont(labelPalette.getFont().deriveFont((float)10)); - labelPalette.setText(org.openide.util.NbBundle.getMessage(HeatMapPanel.class, "HeatMapPanel.labelPalette.text")); // NOI18N + labelPalette.setFont(labelPalette.getFont().deriveFont((float) 10)); + labelPalette.setText( + org.openide.util.NbBundle.getMessage(HeatMapPanel.class, "HeatMapPanel.labelPalette.text")); // NOI18N labelPalette.setPreferredSize(new java.awt.Dimension(45, 28)); palettePanel.add(labelPalette); @@ -207,38 +226,71 @@ private void initComponents() { this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(statusLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(labelMode) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(modeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 97, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(gradientPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 399, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(palettePanel, javax.swing.GroupLayout.PREFERRED_SIZE, 363, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(statusLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 100, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(labelMode) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(modeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, 97, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(gradientPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 399, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(palettePanel, javax.swing.GroupLayout.PREFERRED_SIZE, 363, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(statusLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelMode, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(modeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(gradientPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(palettePanel, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(statusLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 28, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(labelMode, javax.swing.GroupLayout.PREFERRED_SIZE, 28, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(modeComboBox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(gradientPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 28, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(palettePanel, javax.swing.GroupLayout.PREFERRED_SIZE, 28, + javax.swing.GroupLayout.PREFERRED_SIZE) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JPanel gradientPanel; - private javax.swing.JLabel labelGradient; - private javax.swing.JLabel labelMode; - private javax.swing.JLabel labelPalette; - private javax.swing.JComboBox modeComboBox; - private javax.swing.JPanel palettePanel; - private javax.swing.JLabel statusLabel; - // End of variables declaration//GEN-END:variables + + private static class PaletteIcon implements Icon { + + private static int COLOR_WIDTH = 13; + private static int COLOR_HEIGHT = 13; + private static Color BORDER_COLOR = new Color(0x444444); + private Color[] colors; + + public PaletteIcon(Color[] colors) { + this.colors = colors; + } + + @Override + public int getIconWidth() { + return COLOR_WIDTH * colors.length; + } + + @Override + public int getIconHeight() { + return COLOR_HEIGHT + 2; + } + + @Override + public void paintIcon(Component c, Graphics g, int x, int y) { + + for (int i = 0; i < colors.length; i++) { + g.setColor(BORDER_COLOR); + g.drawRect(x + 2 + i * COLOR_WIDTH, y, COLOR_WIDTH, COLOR_HEIGHT); + g.setColor(colors[i]); + g.fillRect(x + 2 + i * COLOR_WIDTH + 1, y + 1, COLOR_WIDTH - 1, COLOR_HEIGHT - 1); + } + } + } private class PaletteComboBox extends JComboBox { @@ -274,7 +326,8 @@ public void initReverse() { private class PaletteListCellRenderer extends JLabel implements ListCellRenderer { @Override - public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, + boolean cellHasFocus) { //int selectedIndex = ((Integer) value).intValue(); if (isSelected) { @@ -293,37 +346,4 @@ public Component getListCellRendererComponent(JList list, Object value, int inde } } } - - private static class PaletteIcon implements Icon { - - private static int COLOR_WIDTH = 13; - private static int COLOR_HEIGHT = 13; - private static Color BORDER_COLOR = new Color(0x444444); - private Color[] colors; - - public PaletteIcon(Color[] colors) { - this.colors = colors; - } - - @Override - public int getIconWidth() { - return COLOR_WIDTH * colors.length; - } - - @Override - public int getIconHeight() { - return COLOR_HEIGHT + 2; - } - - @Override - public void paintIcon(Component c, Graphics g, int x, int y) { - - for (int i = 0; i < colors.length; i++) { - g.setColor(BORDER_COLOR); - g.drawRect(x + 2 + i * COLOR_WIDTH, y, COLOR_WIDTH, COLOR_HEIGHT); - g.setColor(colors[i]); - g.fillRect(x + 2 + i * COLOR_WIDTH + 1, y + 1, COLOR_WIDTH - 1, COLOR_HEIGHT - 1); - } - } - } } diff --git a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/NodePencilPanel.java b/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/NodePencilPanel.java index 9b6cc0a7e4..a8e4c5f92a 100644 --- a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/NodePencilPanel.java +++ b/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/NodePencilPanel.java @@ -46,12 +46,21 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.ui.components.JColorButton; /** - * * @author Mathieu Bastian */ public class NodePencilPanel extends javax.swing.JPanel { - /** Creates new form NodePencilPanel */ + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton colorButton; + private javax.swing.JLabel labelColor; + private javax.swing.JLabel labelSize; + private javax.swing.JSpinner sizeSpinner; + private javax.swing.JLabel statusLabel; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form NodePencilPanel + */ public NodePencilPanel() { initComponents(); } @@ -60,23 +69,24 @@ public void setStatus(String status) { statusLabel.setText(status); } - public void setColor(Color color) { - ((JColorButton)colorButton).setColor(color); + public Color getColor() { + return ((JColorButton) colorButton).getColor(); } - public Color getColor() { - return ((JColorButton)colorButton).getColor(); + public void setColor(Color color) { + ((JColorButton) colorButton).setColor(color); } public float getNodeSize() { - return (Float)sizeSpinner.getModel().getValue(); + return (Float) sizeSpinner.getModel().getValue(); } public void setNodeSize(float size) { sizeSpinner.getModel().setValue(new Float(size)); } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -91,56 +101,59 @@ private void initComponents() { labelColor = new javax.swing.JLabel(); statusLabel = new javax.swing.JLabel(); - sizeSpinner.setFont(sizeSpinner.getFont().deriveFont((float)10)); - sizeSpinner.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(1.0f), Float.valueOf(0.0f), null, Float.valueOf(0.5f))); + sizeSpinner.setFont(sizeSpinner.getFont().deriveFont((float) 10)); + sizeSpinner.setModel( + new javax.swing.SpinnerNumberModel(Float.valueOf(1.0f), Float.valueOf(0.0f), null, Float.valueOf(0.5f))); - labelSize.setFont(labelSize.getFont().deriveFont((float)10)); - labelSize.setText(org.openide.util.NbBundle.getMessage(NodePencilPanel.class, "NodePencilPanel.labelSize.text")); // NOI18N + labelSize.setFont(labelSize.getFont().deriveFont((float) 10)); + labelSize.setText( + org.openide.util.NbBundle.getMessage(NodePencilPanel.class, "NodePencilPanel.labelSize.text")); // NOI18N - colorButton.setText(org.openide.util.NbBundle.getMessage(NodePencilPanel.class, "NodePencilPanel.colorButton.text")); // NOI18N + colorButton.setText( + org.openide.util.NbBundle.getMessage(NodePencilPanel.class, "NodePencilPanel.colorButton.text")); // NOI18N colorButton.setContentAreaFilled(false); colorButton.setFocusPainted(false); - labelColor.setFont(labelColor.getFont().deriveFont((float)10)); - labelColor.setText(org.openide.util.NbBundle.getMessage(NodePencilPanel.class, "NodePencilPanel.labelColor.text")); // NOI18N + labelColor.setFont(labelColor.getFont().deriveFont((float) 10)); + labelColor.setText( + org.openide.util.NbBundle.getMessage(NodePencilPanel.class, "NodePencilPanel.labelColor.text")); // NOI18N - statusLabel.setFont(statusLabel.getFont().deriveFont((float)10)); - statusLabel.setText(org.openide.util.NbBundle.getMessage(NodePencilPanel.class, "NodePencilPanel.statusLabel.text")); // NOI18N + statusLabel.setFont(statusLabel.getFont().deriveFont((float) 10)); + statusLabel.setText( + org.openide.util.NbBundle.getMessage(NodePencilPanel.class, "NodePencilPanel.statusLabel.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap() - .addComponent(statusLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 238, Short.MAX_VALUE) - .addComponent(labelColor) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(colorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 21, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(labelSize) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(sizeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 47, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addComponent(statusLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 238, Short.MAX_VALUE) + .addComponent(labelColor) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(colorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 21, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(labelSize) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(sizeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, 47, + javax.swing.GroupLayout.PREFERRED_SIZE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(sizeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelSize, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelColor, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(statusLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(colorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(sizeSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(labelSize, javax.swing.GroupLayout.PREFERRED_SIZE, 28, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(labelColor, javax.swing.GroupLayout.PREFERRED_SIZE, 28, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(statusLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 28, + javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(colorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 28, + javax.swing.GroupLayout.PREFERRED_SIZE) ); }// //GEN-END:initComponents - - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton colorButton; - private javax.swing.JLabel labelColor; - private javax.swing.JLabel labelSize; - private javax.swing.JSpinner sizeSpinner; - private javax.swing.JLabel statusLabel; - // End of variables declaration//GEN-END:variables - } diff --git a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/PainterPanel.java b/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/PainterPanel.java index d9990e4753..b28149c6eb 100644 --- a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/PainterPanel.java +++ b/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/PainterPanel.java @@ -39,30 +39,36 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.tools.plugin; import java.awt.Color; import org.gephi.ui.components.JColorButton; /** - * * @author Mathieu */ public class PainterPanel extends javax.swing.JPanel { + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton colorButton; + private javax.swing.JLabel labelColor; + // End of variables declaration//GEN-END:variables + public PainterPanel() { initComponents(); } - public void setColor(Color color) { - ((JColorButton) colorButton).setColor(color); - } - public Color getColor() { return ((JColorButton) colorButton).getColor(); } - /** This method is called from within the constructor to + public void setColor(Color color) { + ((JColorButton) colorButton).setColor(color); + } + + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -74,33 +80,34 @@ private void initComponents() { colorButton = new JColorButton(Color.BLACK); labelColor = new javax.swing.JLabel(); - colorButton.setText(org.openide.util.NbBundle.getMessage(PainterPanel.class, "PainterPanel.colorButton.text")); // NOI18N + colorButton.setText( + org.openide.util.NbBundle.getMessage(PainterPanel.class, "PainterPanel.colorButton.text")); // NOI18N colorButton.setContentAreaFilled(false); colorButton.setFocusPainted(false); - labelColor.setFont(labelColor.getFont().deriveFont((float)10)); - labelColor.setText(org.openide.util.NbBundle.getMessage(PainterPanel.class, "PainterPanel.labelColor.text")); // NOI18N + labelColor.setFont(labelColor.getFont().deriveFont((float) 10)); + labelColor.setText( + org.openide.util.NbBundle.getMessage(PainterPanel.class, "PainterPanel.labelColor.text")); // NOI18N javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(labelColor) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(colorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(465, Short.MAX_VALUE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(labelColor) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(colorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 20, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap(465, Short.MAX_VALUE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(labelColor, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(colorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelColor, javax.swing.GroupLayout.PREFERRED_SIZE, 28, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(colorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 28, + javax.swing.GroupLayout.PREFERRED_SIZE)) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton colorButton; - private javax.swing.JLabel labelColor; - // End of variables declaration//GEN-END:variables } diff --git a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/ShortestPathPanel.java b/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/ShortestPathPanel.java index 7d2842ffdd..fddcb59061 100644 --- a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/ShortestPathPanel.java +++ b/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/ShortestPathPanel.java @@ -39,18 +39,27 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.tools.plugin; import java.awt.Color; import org.gephi.ui.components.JColorButton; /** - * * @author Mathieu Bastian */ public class ShortestPathPanel extends javax.swing.JPanel { - /** Creates new form ShortestPathPanel */ + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton colorButton; + private javax.swing.JLabel labelColor; + private javax.swing.JLabel resultLabel; + private javax.swing.JLabel statusLabel; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form ShortestPathPanel + */ public ShortestPathPanel() { initComponents(); } @@ -63,15 +72,16 @@ public void setResult(String result) { resultLabel.setText(result); } - public void setColor(Color color) { - ((JColorButton) colorButton).setColor(color); - } - public Color getColor() { return ((JColorButton) colorButton).getColor(); } - /** This method is called from within the constructor to + public void setColor(Color color) { + ((JColorButton) colorButton).setColor(color); + } + + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -87,45 +97,49 @@ private void initComponents() { setPreferredSize(new java.awt.Dimension(400, 28)); - statusLabel.setFont(statusLabel.getFont().deriveFont((float)10)); - statusLabel.setText(org.openide.util.NbBundle.getMessage(ShortestPathPanel.class, "ShortestPathPanel.statusLabel.text")); // NOI18N + statusLabel.setFont(statusLabel.getFont().deriveFont((float) 10)); + statusLabel.setText(org.openide.util.NbBundle + .getMessage(ShortestPathPanel.class, "ShortestPathPanel.statusLabel.text")); // NOI18N - resultLabel.setFont(resultLabel.getFont().deriveFont((float)10)); - resultLabel.setText(org.openide.util.NbBundle.getMessage(ShortestPathPanel.class, "ShortestPathPanel.resultLabel.text")); // NOI18N + resultLabel.setFont(resultLabel.getFont().deriveFont((float) 10)); + resultLabel.setText(org.openide.util.NbBundle + .getMessage(ShortestPathPanel.class, "ShortestPathPanel.resultLabel.text")); // NOI18N - labelColor.setFont(labelColor.getFont().deriveFont((float)10)); - labelColor.setText(org.openide.util.NbBundle.getMessage(ShortestPathPanel.class, "ShortestPathPanel.labelColor.text")); // NOI18N + labelColor.setFont(labelColor.getFont().deriveFont((float) 10)); + labelColor.setText(org.openide.util.NbBundle + .getMessage(ShortestPathPanel.class, "ShortestPathPanel.labelColor.text")); // NOI18N - colorButton.setText(org.openide.util.NbBundle.getMessage(ShortestPathPanel.class, "ShortestPathPanel.colorButton.text")); // NOI18N + colorButton.setText(org.openide.util.NbBundle + .getMessage(ShortestPathPanel.class, "ShortestPathPanel.colorButton.text")); // NOI18N colorButton.setContentAreaFilled(false); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); this.setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(statusLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 180, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(resultLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 124, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(labelColor) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(colorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(statusLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 180, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addComponent(resultLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 124, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(labelColor) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(colorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 20, + javax.swing.GroupLayout.PREFERRED_SIZE)) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(statusLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(resultLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(colorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelColor, javax.swing.GroupLayout.PREFERRED_SIZE, 28, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(statusLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 28, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(resultLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 28, + javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(colorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 28, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(labelColor, javax.swing.GroupLayout.PREFERRED_SIZE, 28, + javax.swing.GroupLayout.PREFERRED_SIZE) ); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton colorButton; - private javax.swing.JLabel labelColor; - private javax.swing.JLabel resultLabel; - private javax.swing.JLabel statusLabel; - // End of variables declaration//GEN-END:variables } diff --git a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/SizerPanel.java b/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/SizerPanel.java index d6dec9dab6..a17982de72 100644 --- a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/SizerPanel.java +++ b/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/SizerPanel.java @@ -39,18 +39,23 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.tools.plugin; import java.text.DecimalFormat; /** - * * @author Mathieu Bastian */ public class SizerPanel extends javax.swing.JPanel { private float avgSize; private DecimalFormat formatter; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel jLabel1; + private javax.swing.JLabel labelSize; + private javax.swing.JLabel sizeLabel; + // End of variables declaration//GEN-END:variables /** * Creates new form SizePanel @@ -91,7 +96,7 @@ private void initComponents() { setLayout(new java.awt.GridBagLayout()); - jLabel1.setFont(jLabel1.getFont().deriveFont((float)10)); + jLabel1.setFont(jLabel1.getFont().deriveFont((float) 10)); jLabel1.setText(org.openide.util.NbBundle.getMessage(SizerPanel.class, "SizerPanel.jLabel1.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; @@ -103,8 +108,9 @@ private void initComponents() { gridBagConstraints.insets = new java.awt.Insets(0, 4, 0, 0); add(jLabel1, gridBagConstraints); - labelSize.setFont(labelSize.getFont().deriveFont((float)10)); - labelSize.setText(org.openide.util.NbBundle.getMessage(SizerPanel.class, "SizerPanel.labelSize.text")); // NOI18N + labelSize.setFont(labelSize.getFont().deriveFont((float) 10)); + labelSize + .setText(org.openide.util.NbBundle.getMessage(SizerPanel.class, "SizerPanel.labelSize.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 0; @@ -112,17 +118,13 @@ private void initComponents() { gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 4); add(labelSize, gridBagConstraints); - sizeLabel.setFont(sizeLabel.getFont().deriveFont((float)10)); - sizeLabel.setText(org.openide.util.NbBundle.getMessage(SizerPanel.class, "SizerPanel.sizeLabel.text")); // NOI18N + sizeLabel.setFont(sizeLabel.getFont().deriveFont((float) 10)); + sizeLabel + .setText(org.openide.util.NbBundle.getMessage(SizerPanel.class, "SizerPanel.sizeLabel.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 2; gridBagConstraints.gridy = 0; gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 3); add(sizeLabel, gridBagConstraints); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JLabel jLabel1; - private javax.swing.JLabel labelSize; - private javax.swing.JLabel sizeLabel; - // End of variables declaration//GEN-END:variables } diff --git a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/edit/EditEdges.java b/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/edit/EditEdges.java deleted file mode 100644 index 211a943c17..0000000000 --- a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/edit/EditEdges.java +++ /dev/null @@ -1,264 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian , Mathieu Jacomy, Julian Bilcke, Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ui.tools.plugin.edit; - -import java.awt.Color; -import org.gephi.data.attributes.api.AttributeRow; -import org.gephi.data.attributes.api.AttributeType; -import org.gephi.data.attributes.api.AttributeValue; -import org.gephi.datalab.api.AttributeColumnsController; -import org.gephi.dynamic.api.DynamicController; -import org.gephi.dynamic.api.DynamicModel; -import org.gephi.dynamic.api.DynamicModel.TimeFormat; -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.EdgeData; -import org.gephi.ui.tools.plugin.edit.EditWindowUtils.*; -import org.openide.nodes.AbstractNode; -import org.openide.nodes.Children; -import org.openide.nodes.PropertySupport; -import org.openide.nodes.Sheet; -import org.openide.util.Exceptions; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; - -/** - * PropertySheet that allows to edit one or more edges. - * If multiple node edition mode is used at first all values will be shown as blank - * but will change with the editions and all edges will be set the values that the user inputs. - * @author Mathieu Bastian - */ -public class EditEdges extends AbstractNode { - - private PropertySet[] propertySets; - private Edge[] edges; - private boolean multipleEdges; - private TimeFormat currentTimeFormat=TimeFormat.DOUBLE; - - /** - * Single edge edition mode will always be enabled with this single node constructor - * @param edge - */ - public EditEdges(Edge edge) { - super(Children.LEAF); - this.edges = new Edge[]{edge}; - setName(edge.getEdgeData().getLabel()); - multipleEdges = false; - } - - /** - * If the edges array has more than one element, multiple edges edition mode will be enabled. - * @param edges - */ - public EditEdges(Edge[] edges) { - super(Children.LEAF); - this.edges = edges; - multipleEdges = edges.length > 1; - if (multipleEdges) { - setName(NbBundle.getMessage(EditEdges.class, "EditEdges.multiple.elements")); - } else { - setName(edges[0].getEdgeData().getLabel()); - } - } - - @Override - public PropertySet[] getPropertySets() { - propertySets = new PropertySet[]{prepareEdgesProperties(), prepareEdgesAttributes()}; - return propertySets; - } - - /** - * Prepare set of attributes of the edges. - * @return Set of these attributes - */ - private Sheet.Set prepareEdgesAttributes() { - try { - DynamicModel dm=Lookup.getDefault().lookup(DynamicController.class).getModel(); - if(dm!=null){ - currentTimeFormat=dm.getTimeFormat(); - } - AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); - Sheet.Set set = new Sheet.Set(); - set.setName("attributes"); - if (edges.length > 1) { - set.setDisplayName(NbBundle.getMessage(EditEdges.class, "EditEdges.attributes.text.multiple")); - } else { - set.setDisplayName(NbBundle.getMessage(EditEdges.class, "EditEdges.attributes.text", edges[0].getEdgeData().getLabel())); - } - - AttributeRow row = (AttributeRow) edges[0].getEdgeData().getAttributes(); - AttributeValueWrapper wrap; - for (AttributeValue value : row.getValues()) { - - if (multipleEdges) { - wrap = new MultipleRowsAttributeValueWrapper(edges, value.getColumn(),currentTimeFormat); - } else { - wrap = new SingleRowAttributeValueWrapper(edges[0], value.getColumn(),currentTimeFormat); - } - AttributeType type = value.getColumn().getType(); - Property p; - if (ac.canChangeColumnData(value.getColumn())) { - //Editable column, provide "set" method: - if (!EditWindowUtils.NotSupportedTypes.contains(type)) {//The AttributeType can be edited by default: - p = new PropertySupport.Reflection(wrap, type.getType(), "getValue" + type.getType().getSimpleName(), "setValue" + type.getType().getSimpleName()); - } else {//Use the AttributeType as String: - p = new PropertySupport.Reflection(wrap, String.class, "getValueAsString", "setValueAsString"); - } - } else { - //Not editable column, do not provide "set" method: - if (!EditWindowUtils.NotSupportedTypes.contains(type)) {//The AttributeType can be edited by default: - p = new PropertySupport.Reflection(wrap, type.getType(), "getValue" + type.getType().getSimpleName(), null); - } else {//Use the AttributeType as String: - p = new PropertySupport.Reflection(wrap, String.class, "getValueAsString", null); - } - } - p.setDisplayName(value.getColumn().getTitle()); - p.setName(value.getColumn().getId()); - set.put(p); - } - return set; - } catch (Exception ex) { - Exceptions.printStackTrace(ex); - return null; - } - } - - /** - * Prepare set of editable properties of the node(s): size, position. - * @return Set of these properties - */ - private Sheet.Set prepareEdgesProperties() { - try { - if (multipleEdges) { - Sheet.Set set = new Sheet.Set(); - set.setName("properties"); - set.setDisplayName(NbBundle.getMessage(EditEdges.class, "EditEdges.properties.text.multiple")); - - Property p; - - //Color: - MultipleEdgesPropertiesWrapper edgesWrapper = new MultipleEdgesPropertiesWrapper(edges); - p = new PropertySupport.Reflection(edgesWrapper, Color.class, "getEdgesColor", "setEdgesColor"); - p.setDisplayName(NbBundle.getMessage(EditEdges.class, "EditEdges.color.text")); - p.setName("color"); - set.put(p); - - return set; - } else { - Edge edge = edges[0]; - Sheet.Set set = new Sheet.Set(); - set.setName("properties"); - set.setDisplayName(NbBundle.getMessage(EditEdges.class, "EditEdges.properties.text", edge.getEdgeData().getLabel())); - - Property p; - - //Color: - SingleEdgePropertiesWrapper edgeWrapper = new SingleEdgePropertiesWrapper(edge); - p = new PropertySupport.Reflection(edgeWrapper, Color.class, "getEdgeColor", "setEdgeColor"); - p.setDisplayName(NbBundle.getMessage(EditEdges.class, "EditEdges.color.text")); - p.setName("color"); - set.put(p); - - return set; - } - } catch (Exception ex) { - Exceptions.printStackTrace(ex); - return null; - } - } - - public class SingleEdgePropertiesWrapper { - - private Edge edge; - - public SingleEdgePropertiesWrapper(Edge Edge) { - this.edge = Edge; - } - - public Color getEdgeColor() { - EdgeData data = edge.getEdgeData(); - if(data.r()<0||data.g()<0||data.b()<0||data.alpha()<0){ - return null;//Not specific color for edge - } - - return new Color(data.r(), data.g(), data.b(), data.alpha()); - } - - public void setEdgeColor(Color c) { - if (c != null) { - EdgeData data = edge.getEdgeData(); - data.setR(c.getRed() / 255f); - data.setG(c.getGreen() / 255f); - data.setB(c.getBlue() / 255f); - data.setAlpha(c.getAlpha() / 255f); - } - } - } - - public class MultipleEdgesPropertiesWrapper { - - Edge[] edges; - - public MultipleEdgesPropertiesWrapper(Edge[] Edges) { - this.edges = Edges; - } - //Methods and fields for multiple edges editing: - private Color edgesColor = null; - - public Color getEdgesColor() { - return edgesColor; - } - - public void setEdgesColor(Color c) { - if (c != null) { - edgesColor = c; - EdgeData data; - for (Edge edge : edges) { - data = edge.getEdgeData(); - data.setR(c.getRed() / 255f); - data.setG(c.getGreen() / 255f); - data.setB(c.getBlue() / 255f); - data.setAlpha(c.getAlpha() / 255f); - } - } - } - } -} diff --git a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/edit/EditNodes.java b/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/edit/EditNodes.java deleted file mode 100644 index 9c491bb3d6..0000000000 --- a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/edit/EditNodes.java +++ /dev/null @@ -1,353 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian , Mathieu Jacomy, Julian Bilcke, Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ui.tools.plugin.edit; - -import java.awt.Color; -import org.gephi.data.attributes.api.AttributeRow; -import org.gephi.data.attributes.api.AttributeType; -import org.gephi.data.attributes.api.AttributeValue; -import org.gephi.datalab.api.AttributeColumnsController; -import org.gephi.dynamic.api.DynamicController; -import org.gephi.dynamic.api.DynamicModel; -import org.gephi.dynamic.api.DynamicModel.TimeFormat; -import org.gephi.graph.api.Node; -import org.gephi.graph.api.NodeData; -import org.gephi.ui.tools.plugin.edit.EditWindowUtils.AttributeValueWrapper; -import org.openide.nodes.AbstractNode; -import org.openide.nodes.Children; -import org.openide.nodes.PropertySupport; -import org.openide.nodes.Sheet; -import org.openide.util.Exceptions; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; - -/** - * PropertySheet that allows to edit one or more nodes. - * If multiple node edition mode is used at first all values will be shown as blank - * but will change with the editions and all nodes will be set the values that the user inputs. - * @author Mathieu Bastian - */ -public class EditNodes extends AbstractNode { - - private PropertySet[] propertySets; - private Node[] nodes; - private boolean multipleNodes; - private TimeFormat currentTimeFormat=TimeFormat.DOUBLE; - - /** - * Single node edition mode will always be enabled with this single node constructor - * @param node - */ - public EditNodes(Node node) { - super(Children.LEAF); - this.nodes = new Node[]{node}; - setName(node.getNodeData().getLabel()); - multipleNodes = false; - } - - /** - * If the nodes array has more than one element, multiple nodes edition mode will be enabled. - * @param nodes - */ - public EditNodes(Node[] nodes) { - super(Children.LEAF); - this.nodes = nodes; - multipleNodes = nodes.length > 1; - if (multipleNodes) { - setName(NbBundle.getMessage(EditNodes.class, "EditNodes.multiple.elements")); - } else { - setName(nodes[0].getNodeData().getLabel()); - } - } - - @Override - public PropertySet[] getPropertySets() { - propertySets = new PropertySet[]{prepareNodesProperties(), prepareNodesAttributes()}; - return propertySets; - } - - /** - * Prepare set of attributes of the node(s). - * @return Set of these attributes - */ - private Sheet.Set prepareNodesAttributes() { - try { - DynamicModel dm=Lookup.getDefault().lookup(DynamicController.class).getModel(); - if(dm!=null){ - currentTimeFormat=dm.getTimeFormat(); - } - AttributeColumnsController ac = Lookup.getDefault().lookup(AttributeColumnsController.class); - Sheet.Set set = new Sheet.Set(); - set.setName("attributes"); - if (nodes.length > 1) { - set.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.attributes.text.multiple")); - } else { - set.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.attributes.text", nodes[0].getNodeData().getLabel())); - } - - AttributeRow row = (AttributeRow) nodes[0].getNodeData().getAttributes(); - AttributeValueWrapper wrap; - for (AttributeValue value : row.getValues()) { - - if (multipleNodes) { - wrap = new MultipleRowsAttributeValueWrapper(nodes, value.getColumn(),currentTimeFormat); - } else { - wrap = new SingleRowAttributeValueWrapper(nodes[0], value.getColumn(),currentTimeFormat); - } - AttributeType type = value.getColumn().getType(); - Property p; - if (ac.canChangeColumnData(value.getColumn())) { - //Editable column, provide "set" method: - if (!EditWindowUtils.NotSupportedTypes.contains(type)) {//The AttributeType can be edited by default: - p = new PropertySupport.Reflection(wrap, type.getType(), "getValue" + type.getType().getSimpleName(), "setValue" + type.getType().getSimpleName()); - } else {//Use the AttributeType as String: - p = new PropertySupport.Reflection(wrap, String.class, "getValueAsString", "setValueAsString"); - } - } else { - //Not editable column, do not provide "set" method: - if (!EditWindowUtils.NotSupportedTypes.contains(type)) {//The AttributeType can be edited by default: - p = new PropertySupport.Reflection(wrap, type.getType(), "getValue" + type.getType().getSimpleName(), null); - } else {//Use the AttributeType as String: - p = new PropertySupport.Reflection(wrap, String.class, "getValueAsString", null); - } - } - p.setDisplayName(value.getColumn().getTitle()); - p.setName(value.getColumn().getId()); - set.put(p); - } - return set; - } catch (Exception ex) { - Exceptions.printStackTrace(ex); - return null; - } - } - - /** - * Prepare set of editable properties of the node(s): size, position. - * @return Set of these properties - */ - private Sheet.Set prepareNodesProperties() { - try { - if (multipleNodes) { - MultipleNodesPropertiesWrapper nodesWrapper = new MultipleNodesPropertiesWrapper(nodes); - Sheet.Set set = new Sheet.Set(); - set.setName("properties"); - set.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.properties.text.multiple")); - - Property p; - //Size: - p = new PropertySupport.Reflection(nodesWrapper, Float.class, "getNodesSize", "setNodesSize"); - p.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.size.text")); - p.setName("size"); - set.put(p); - - //All position coordinates: - set.put(buildMultipleNodesGeneralPositionProperty(nodesWrapper, "x")); - set.put(buildMultipleNodesGeneralPositionProperty(nodesWrapper, "y")); - set.put(buildMultipleNodesGeneralPositionProperty(nodesWrapper, "z")); - - //Color: - p = new PropertySupport.Reflection(nodesWrapper, Color.class, "getNodesColor", "setNodesColor"); - p.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.color.text")); - p.setName("color"); - set.put(p); - - return set; - } else { - Node node = nodes[0]; - Sheet.Set set = new Sheet.Set(); - set.setName("properties"); - set.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.properties.text", node.getNodeData().getLabel())); - NodeData data = node.getNodeData(); - - Property p; - //Size: - p = new PropertySupport.Reflection(data, Float.TYPE, "getSize", "setSize"); - p.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.size.text")); - p.setName("size"); - set.put(p); - - //All position coordinates: - set.put(buildGeneralPositionProperty(data, "x")); - set.put(buildGeneralPositionProperty(data, "y")); - set.put(buildGeneralPositionProperty(data, "z")); - - //Color: - SingleNodePropertiesWrapper nodeWrapper = new SingleNodePropertiesWrapper(node); - p = new PropertySupport.Reflection(nodeWrapper, Color.class, "getNodeColor", "setNodeColor"); - p.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.color.text")); - p.setName("color"); - set.put(p); - - return set; - } - } catch (Exception ex) { - Exceptions.printStackTrace(ex); - return null; - } - } - - public class SingleNodePropertiesWrapper { - - private Node node; - - public SingleNodePropertiesWrapper(Node node) { - this.node = node; - } - - public Color getNodeColor() { - NodeData data = node.getNodeData(); - return new Color(data.r(), data.g(), data.b(), data.alpha()); - } - - public void setNodeColor(Color c) { - if (c != null) { - NodeData data = node.getNodeData(); - data.setR(c.getRed() / 255f); - data.setG(c.getGreen() / 255f); - data.setB(c.getBlue() / 255f); - data.setAlpha(c.getAlpha() / 255f); - } - } - } - - public class MultipleNodesPropertiesWrapper { - - Node[] nodes; - - public MultipleNodesPropertiesWrapper(Node[] nodes) { - this.nodes = nodes; - } - //Methods and fields for multiple nodes editing: - private Float nodesX = null; - private Float nodesY = null; - private Float nodesZ = null; - private Float nodesSize = null; - private Color nodesColor = null; - - public Float getNodesX() { - return nodesX; - } - - public void setNodesX(Float x) { - nodesX = x; - for (Node node : nodes) { - node.getNodeData().setX(x); - } - } - - public Float getNodesY() { - return nodesY; - } - - public void setNodesY(Float y) { - nodesY = y; - for (Node node : nodes) { - node.getNodeData().setY(y); - } - } - - public Float getNodesZ() { - return nodesZ; - } - - public void setNodesZ(Float z) { - nodesZ = z; - for (Node node : nodes) { - node.getNodeData().setZ(z); - } - } - - public Color getNodesColor() { - return nodesColor; - } - - public void setNodesColor(Color c) { - if (c != null) { - nodesColor = c; - NodeData data; - for (Node node : nodes) { - data = node.getNodeData(); - data.setR(c.getRed() / 255f); - data.setG(c.getGreen() / 255f); - data.setB(c.getBlue() / 255f); - data.setAlpha(c.getAlpha() / 255f); - } - } - } - - public Float getNodesSize() { - return nodesSize; - } - - public void setNodesSize(Float size) { - nodesSize = size; - for (Node node : nodes) { - node.getNodeData().setSize(size); - } - } - } - - /** - * Used to build property for each position coordinate (x,y,z) in the same way. - * @return Property for that coordinate - */ - private Property buildGeneralPositionProperty(NodeData data, String coordinate) throws NoSuchMethodException { - //Position: - Property p = new PropertySupport.Reflection(data, Float.TYPE, coordinate, "set" + coordinate.toUpperCase()); - p.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.position.text", coordinate)); - p.setName(coordinate); - return p; - } - - /** - * Used to build property for each position coordinate of various nodes (x,y,z) in the same way. - * @return Property for that coordinate - */ - private Property buildMultipleNodesGeneralPositionProperty(MultipleNodesPropertiesWrapper nodesWrapper, String coordinate) throws NoSuchMethodException { - //Position: - Property p = new PropertySupport.Reflection(nodesWrapper, Float.class, "getNodes" + coordinate.toUpperCase(), "setNodes" + coordinate.toUpperCase()); - p.setDisplayName(NbBundle.getMessage(EditNodes.class, "EditNodes.position.text", coordinate)); - p.setName(coordinate); - return p; - } -} diff --git a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/edit/EditToolTopComponent.java b/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/edit/EditToolTopComponent.java deleted file mode 100644 index 957336f0ab..0000000000 --- a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/edit/EditToolTopComponent.java +++ /dev/null @@ -1,165 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.ui.tools.plugin.edit; - -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.Node; -import org.gephi.project.api.ProjectController; -import org.gephi.project.api.Workspace; -import org.gephi.project.api.WorkspaceListener; -import org.netbeans.api.settings.ConvertAsProperties; -import org.openide.explorer.propertysheet.PropertySheet; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; -import org.openide.windows.TopComponent; - -@ConvertAsProperties(dtd = "-//org.gephi.ui.tools.plugin.edit//EditTool//EN", -autostore = false) -@TopComponent.Description(preferredID = "EditToolTopComponent", -persistenceType = TopComponent.PERSISTENCE_ALWAYS) -@TopComponent.Registration(mode = "rankingmode", openAtStartup = false, roles = {"overview"}) -@TopComponent.OpenActionRegistration(displayName = "#CTL_EditToolTopComponent", -preferredID = "EditToolTopComponent") -public final class EditToolTopComponent extends TopComponent { - - public EditToolTopComponent() { - initComponents(); - setName(NbBundle.getMessage(EditToolTopComponent.class, "CTL_EditToolTopComponent")); - - putClientProperty(TopComponent.PROP_MAXIMIZATION_DISABLED, Boolean.TRUE); - - Lookup.getDefault().lookup(ProjectController.class).addWorkspaceListener(new WorkspaceListener() { - - @Override - public void initialize(Workspace workspace) { - } - - @Override - public void select(Workspace workspace) { - propertySheet.setEnabled(true); - } - - @Override - public void unselect(Workspace workspace) { - disableEdit(); - } - - @Override - public void close(Workspace workspace) { - } - - @Override - public void disable() { - propertySheet.setEnabled(false); - EditToolTopComponent.this.close(); - } - }); - } - - public void editNode(Node node) { - ((PropertySheet) propertySheet).setNodes(new org.openide.nodes.Node[]{new EditNodes(node)}); - } - - public void editNodes(Node[] nodes) { - ((PropertySheet) propertySheet).setNodes(new org.openide.nodes.Node[]{new EditNodes(nodes)}); - } - - public void editEdge(Edge edge) { - ((PropertySheet) propertySheet).setNodes(new org.openide.nodes.Node[]{new EditEdges(edge)}); - } - - public void editEdges(Edge[] edges) { - ((PropertySheet) propertySheet).setNodes(new org.openide.nodes.Node[]{new EditEdges(edges)}); - } - - public void disableEdit() { - ((PropertySheet) propertySheet).setNodes(new org.openide.nodes.Node[]{}); - } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - // //GEN-BEGIN:initComponents - private void initComponents() { - java.awt.GridBagConstraints gridBagConstraints; - - propertySheet = new PropertySheet(); - - setLayout(new java.awt.GridBagLayout()); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 0; - gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.weighty = 1.0; - gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); - add(propertySheet, gridBagConstraints); - }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JPanel propertySheet; - // End of variables declaration//GEN-END:variables - - - @Override - public void componentOpened() { - // TODO add custom code on component opening - } - - @Override - public void componentClosed() { - // TODO add custom code on component closing - } - - void writeProperties(java.util.Properties p) { - // better to version settings since initial version as advocated at - // http://wiki.apidesign.org/wiki/PropertyFiles - p.setProperty("version", "1.0"); - // TODO store your settings - } - - void readProperties(java.util.Properties p) { - String version = p.getProperty("version"); - // TODO read your settings according to their version - } -} diff --git a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/edit/EditWindowControllerImpl.java b/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/edit/EditWindowControllerImpl.java deleted file mode 100644 index abe2f9c3ef..0000000000 --- a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/edit/EditWindowControllerImpl.java +++ /dev/null @@ -1,185 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Eduardo Ramos - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ui.tools.plugin.edit; - -import java.lang.reflect.InvocationTargetException; -import javax.swing.SwingUtilities; -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.Node; -import org.gephi.tools.api.EditWindowController; -import org.openide.util.Exceptions; -import org.openide.util.lookup.ServiceProvider; -import org.openide.windows.WindowManager; - -/** - * Implementation of EditWindowController interface of Tools API. - * - * @author Eduardo Ramos - */ -@ServiceProvider(service = EditWindowController.class) -public class EditWindowControllerImpl implements EditWindowController { - - public EditToolTopComponent findInstance() { - return (EditToolTopComponent) WindowManager.getDefault().findTopComponent("EditToolTopComponent"); - } - - private void runAction(Runnable runnable) { - if (SwingUtilities.isEventDispatchThread()) { - runnable.run(); - } else { - SwingUtilities.invokeLater(runnable); - } - } - - @Override - public void openEditWindow() { - runAction(new Runnable() { - - @Override - public void run() { - EditToolTopComponent topComponent = findInstance(); - topComponent.open(); - topComponent.requestActive(); - } - }); - - } - - @Override - public void closeEditWindow() { - runAction(new Runnable() { - - @Override - public void run() { - EditToolTopComponent topComponent = findInstance(); - topComponent.disableEdit(); - topComponent.close(); - } - }); - } - - class IsOpenRunnable implements Runnable { - - boolean open = false; - - @Override - public void run() { - EditToolTopComponent topComponent = findInstance(); - open = topComponent.isOpened(); - } - } - - @Override - public boolean isOpen() { - IsOpenRunnable runnable = new IsOpenRunnable(); - if (SwingUtilities.isEventDispatchThread()) { - runnable.run(); - } else { - try { - SwingUtilities.invokeAndWait(runnable); - } catch (Exception ex) { - ex.printStackTrace(); - } - } - return runnable.open; - } - - @Override - public void editNode(final Node node) { - runAction(new Runnable() { - - @Override - public void run() { - EditToolTopComponent topComponent = findInstance(); - topComponent.editNode(node); - } - }); - } - - @Override - public void editNodes(final Node[] nodes) { - runAction(new Runnable() { - - @Override - public void run() { - EditToolTopComponent topComponent = findInstance(); - topComponent.editNodes(nodes); - } - }); - } - - @Override - public void editEdge(final Edge edge) { - runAction(new Runnable() { - - @Override - public void run() { - EditToolTopComponent topComponent = findInstance(); - topComponent.editEdge(edge); - } - }); - } - - @Override - public void editEdges(final Edge[] edges) { - runAction(new Runnable() { - - @Override - public void run() { - EditToolTopComponent topComponent = findInstance(); - topComponent.editEdges(edges); - } - }); - } - - @Override - public void disableEdit() { - runAction(new Runnable() { - - @Override - public void run() { - EditToolTopComponent topComponent = findInstance(); - topComponent.disableEdit(); - } - }); - } -} diff --git a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/edit/EditWindowUtils.java b/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/edit/EditWindowUtils.java deleted file mode 100644 index 1b9050fde6..0000000000 --- a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/edit/EditWindowUtils.java +++ /dev/null @@ -1,128 +0,0 @@ -/* - Copyright 2008-2011 Gephi - Authors : Eduardo Ramos - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ui.tools.plugin.edit; - -import java.util.EnumSet; -import org.gephi.data.attributes.api.AttributeType; - -/** - * - * @author Eduardo Ramos - */ -public class EditWindowUtils { - - /** - * These AttributeTypes are not supported by default by netbeans property editor. We will use attributes of these types as Strings and parse them. - */ - public static EnumSet NotSupportedTypes = EnumSet.of( - AttributeType.BIGINTEGER, - AttributeType.BIGDECIMAL, - AttributeType.LIST_BIGDECIMAL, - AttributeType.LIST_BIGINTEGER, - AttributeType.LIST_BOOLEAN, - AttributeType.LIST_BYTE, - AttributeType.LIST_CHARACTER, - AttributeType.LIST_DOUBLE, - AttributeType.LIST_FLOAT, - AttributeType.LIST_INTEGER, - AttributeType.LIST_LONG, - AttributeType.LIST_SHORT, - AttributeType.LIST_STRING, - AttributeType.TIME_INTERVAL, - AttributeType.DYNAMIC_BIGDECIMAL, - AttributeType.DYNAMIC_BIGINTEGER, - AttributeType.DYNAMIC_BOOLEAN, - AttributeType.DYNAMIC_BYTE, - AttributeType.DYNAMIC_CHAR, - AttributeType.DYNAMIC_DOUBLE, - AttributeType.DYNAMIC_FLOAT, - AttributeType.DYNAMIC_INT, - AttributeType.DYNAMIC_LONG, - AttributeType.DYNAMIC_SHORT, - AttributeType.DYNAMIC_STRING); - - interface AttributeValueWrapper { - - public Byte getValueByte(); - - public void setValueByte(Byte object); - - public Short getValueShort(); - - public void setValueShort(Short object); - - public Character getValueCharacter(); - - public void setValueCharacter(Character object); - - public String getValueString(); - - public void setValueString(String object); - - public Double getValueDouble(); - - public void setValueDouble(Double object); - - public Float getValueFloat(); - - public void setValueFloat(Float object); - - public Integer getValueInteger(); - - public void setValueInteger(Integer object); - - public Boolean getValueBoolean(); - - public void setValueBoolean(Boolean object); - - public Long getValueLong(); - - public void setValueLong(Long object); - - /** - * **** Other types are not supported by property editors by default so they are used and parsed as Strings ***** - */ - public String getValueAsString(); - - public void setValueAsString(String value); - } -} diff --git a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/edit/MultipleRowsAttributeValueWrapper.java b/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/edit/MultipleRowsAttributeValueWrapper.java deleted file mode 100644 index 17a07b3234..0000000000 --- a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/edit/MultipleRowsAttributeValueWrapper.java +++ /dev/null @@ -1,187 +0,0 @@ -/* - Copyright 2008-2011 Gephi - Authors : Eduardo Ramos - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ui.tools.plugin.edit; - -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.type.DynamicType; -import org.gephi.dynamic.api.DynamicModel; -import org.gephi.dynamic.api.DynamicModel.TimeFormat; -import org.gephi.graph.api.Attributable; -import org.gephi.ui.tools.plugin.edit.EditWindowUtils.AttributeValueWrapper; - -/** - * - * @author Eduardo Ramos - */ -public class MultipleRowsAttributeValueWrapper implements AttributeValueWrapper { - - private Attributable[] rows; - private AttributeColumn column; - private Object value; - private TimeFormat currentTimeFormat; - - public MultipleRowsAttributeValueWrapper(Attributable [] rows, AttributeColumn column, TimeFormat currentTimeFormat) { - this.rows = rows; - this.column = column; - this.currentTimeFormat = currentTimeFormat; - this.value = null; - } - - private String convertToStringIfNotNull() { - if (value != null) { - if (value instanceof DynamicType) { - return ((DynamicType) value).toString(currentTimeFormat == DynamicModel.TimeFormat.DOUBLE); - } else { - return value.toString(); - } - } else { - return null; - } - } - - private void setValueToAllEdges(Object object) { - this.value = object; - for (Attributable row : rows) { - row.getAttributes().setValue(column.getIndex(), value); - } - } - - @Override - public Byte getValueByte() { - return (Byte) value; - } - - @Override - public void setValueByte(Byte object) { - setValueToAllEdges(object); - } - - @Override - public Short getValueShort() { - return (Short) value; - } - - @Override - public void setValueShort(Short object) { - setValueToAllEdges(object); - } - - @Override - public Character getValueCharacter() { - return (Character) value; - } - - @Override - public void setValueCharacter(Character object) { - setValueToAllEdges(object); - } - - @Override - public String getValueString() { - return (String) value; - } - - @Override - public void setValueString(String object) { - setValueToAllEdges(object); - } - - @Override - public Double getValueDouble() { - return (Double) value; - } - - @Override - public void setValueDouble(Double object) { - setValueToAllEdges(object); - } - - @Override - public Float getValueFloat() { - return (Float) value; - } - - @Override - public void setValueFloat(Float object) { - setValueToAllEdges(object); - } - - @Override - public Integer getValueInteger() { - return (Integer) value; - } - - @Override - public void setValueInteger(Integer object) { - setValueToAllEdges(object); - } - - @Override - public Boolean getValueBoolean() { - return (Boolean) value; - } - - @Override - public void setValueBoolean(Boolean object) { - setValueToAllEdges(object); - } - - @Override - public Long getValueLong() { - return (Long) value; - } - - @Override - public void setValueLong(Long object) { - setValueToAllEdges(object); - } - - @Override - public String getValueAsString() { - return convertToStringIfNotNull(); - } - - @Override - public void setValueAsString(String value) { - setValueToAllEdges(column.getType().parse(value)); - } -} diff --git a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/edit/SingleRowAttributeValueWrapper.java b/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/edit/SingleRowAttributeValueWrapper.java deleted file mode 100644 index bd7a974554..0000000000 --- a/modules/ToolsPlugin/src/main/java/org/gephi/ui/tools/plugin/edit/SingleRowAttributeValueWrapper.java +++ /dev/null @@ -1,179 +0,0 @@ -/* - Copyright 2008-2011 Gephi - Authors : Eduardo Ramos - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ui.tools.plugin.edit; - -import org.gephi.data.attributes.api.AttributeColumn; -import org.gephi.data.attributes.type.DynamicType; -import org.gephi.dynamic.api.DynamicModel; -import org.gephi.dynamic.api.DynamicModel.TimeFormat; -import org.gephi.graph.api.Attributable; -import org.gephi.graph.api.Attributes; - -/** - * - * @author Eduardo Ramos - */ -public class SingleRowAttributeValueWrapper implements EditWindowUtils.AttributeValueWrapper { - - private Attributes row; - private AttributeColumn column; - private TimeFormat currentTimeFormat; - - public SingleRowAttributeValueWrapper(Attributable row, AttributeColumn column, TimeFormat currentTimeFormat) { - this.row = row.getAttributes(); - this.column = column; - this.currentTimeFormat = currentTimeFormat; - } - - private String convertToStringIfNotNull() { - Object value = row.getValue(column.getIndex()); - if (value != null) { - if (value instanceof DynamicType) { - return ((DynamicType) value).toString(currentTimeFormat == DynamicModel.TimeFormat.DOUBLE); - } else { - return value.toString(); - } - } else { - return null; - } - } - - @Override - public Byte getValueByte() { - return (Byte) row.getValue(column.getIndex()); - } - - @Override - public void setValueByte(Byte object) { - row.setValue(column.getIndex(), object); - } - - @Override - public Short getValueShort() { - return (Short) row.getValue(column.getIndex()); - } - - @Override - public void setValueShort(Short object) { - row.setValue(column.getIndex(), object); - } - - @Override - public Character getValueCharacter() { - return (Character) row.getValue(column.getIndex()); - } - - @Override - public void setValueCharacter(Character object) { - row.setValue(column.getIndex(), object); - } - - @Override - public String getValueString() { - return (String) row.getValue(column.getIndex()); - } - - @Override - public void setValueString(String object) { - row.setValue(column.getIndex(), object); - } - - @Override - public Double getValueDouble() { - return (Double) row.getValue(column.getIndex()); - } - - @Override - public void setValueDouble(Double object) { - row.setValue(column.getIndex(), object); - } - - @Override - public Float getValueFloat() { - return (Float) row.getValue(column.getIndex()); - } - - @Override - public void setValueFloat(Float object) { - row.setValue(column.getIndex(), object); - } - - @Override - public Integer getValueInteger() { - return (Integer) row.getValue(column.getIndex()); - } - - @Override - public void setValueInteger(Integer object) { - row.setValue(column.getIndex(), object); - } - - @Override - public Boolean getValueBoolean() { - return (Boolean) row.getValue(column.getIndex()); - } - - @Override - public void setValueBoolean(Boolean object) { - row.setValue(column.getIndex(), object); - } - - @Override - public Long getValueLong() { - return (Long) row.getValue(column.getIndex()); - } - - @Override - public void setValueLong(Long object) { - row.setValue(column.getIndex(), object); - } - - @Override - public String getValueAsString() { - return convertToStringIfNotNull(); - } - - @Override - public void setValueAsString(String value) { - row.setValue(column.getIndex(), column.getType().parse(value)); - } - } diff --git a/modules/ToolsPlugin/src/main/nbm/manifest.mf b/modules/ToolsPlugin/src/main/nbm/manifest.mf index 3118000600..3baa3c4b50 100644 --- a/modules/ToolsPlugin/src/main/nbm/manifest.mf +++ b/modules/ToolsPlugin/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/tools/plugin/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Plugin +OpenIDE-Module-Name: Tools Plugin \ No newline at end of file diff --git a/modules/ToolsPlugin/src/main/nbm/module.xml b/modules/ToolsPlugin/src/main/nbm/module.xml deleted file mode 100644 index 9eee39d2ce..0000000000 --- a/modules/ToolsPlugin/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle.properties index 58b6f625d9..35f8cce4fc 100644 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle.properties +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle.properties @@ -1,9 +1,10 @@ -OpenIDE-Module-Display-Category=Plugin -OpenIDE-Module-Name=Tools Plugin OpenIDE-Module-Short-Description=Standard tools implementations #Painter Painter.name = Painter Painter.description = Color nodes by pressing mouse left button +#NodesDragger +NodesDragger.name = Drag nodes +NodesDragger.description = Move nodes by pressing mouse left button and dragging them #Sizer Sizer.name = Sizer Sizer.description = Size nodes by pressing mouse left button and dragging up or down @@ -33,7 +34,8 @@ ShortestPath.noresult = No path exist between these two nodes #HeatMap HeatMap.name = Heat Map HeatMap.description = Set color intensity on a node neighborhood, by the distance (edge weight) -HeatMap.status.maxdistance = Max distance is +HeatMap.status.maxdistance = Max distance is #Edit Edit.name = Edit -Edit.description = Edit node attributes +Edit.description = Edit one or multiple nodes +Edit.propertiesbar = Click on one or multiple nodes to open the edit window \ No newline at end of file diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_ar.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_ca.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_ca.properties new file mode 100644 index 0000000000..c031e3f228 --- /dev/null +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_ca.properties @@ -0,0 +1,37 @@ +OpenIDE-Module-Short-Description=Implementacions estΰndard de les eines +#Painter +Painter.name=Pinzell +Painter.description=Pinta els nodes clicant el botσ esquerre del ratolν +#Sizer +Sizer.name=Eina de mida +Sizer.description=Estableix la mida dels nodes amb el botσ esquerre del ratolν i arrossegant cap a dalt i cap a baix +#Brush +Brush.name=Pinzell +Brush.description=Estableix el color dels nodes i dels seus veοns amb el botσ esquerre del ratolν +DiffusionMethod.None=Cap +DiffusionMethod.Neighbors=Veοns +DiffusionMethod.NeighborsOfNeighbors=Veοns de veοns +DiffusionMethod.Predecessors=Predecessors +DiffusionMethod.Successors=Successor +#NodePencil +NodePencil.name=Llapis de nodes +NodePencil.description=Afegeix un nou node al graf en clicar amb el ratolν +#EdgePencil +EdgePencil.name=Llapis d'arestes +EdgePencil.description=Afegeix una nova aresta clicant el node de partida i el d'arribada +EdgePencil.status1=Selecciona un node de partida +EdgePencil.status2=Selecciona un node d'arribada +#ShortestPath +ShortestPath.name=Camν mιs curt +ShortestPath.description=Mostra, si existeix, el camν mιs curt entre dos nodes seleccionats +ShortestPath.status1=Selecciona un node de partida +ShortestPath.status2=Selecciona un node d'arribada +ShortestPath.result=S'ha trobat un camν amb distΰncia {0} +ShortestPath.noresult=No s'ha trobat cap camν entre aquests dos nodes +#HeatMap +HeatMap.name=Mapa de calor +HeatMap.description=Estableix la intensitat del color d'un veοnat, segons la distΰncia (pes de les arestes) +HeatMap.status.maxdistance=La distΰncia mΰxima ιs +#Edit +Edit.name=Edita +Edit.description=Edita els atributs del node diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_cs.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_cs.properties index 6446601b51..36e95a0c4f 100644 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_cs.properties +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_cs.properties @@ -1,73 +1,37 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-03 21\:37+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Short-Description=Zaveden\u00ed standardn\u00edch n\u00e1stroj\u016f - -# Painter +OpenIDE-Module-Short-Description=Zavedenν standardnνch nαstroj\u016f +#Painter Painter.name=Nat\u011bra\u010d - -Painter.description=Obarvit uzly stiskem lev\u00e9ho tla\u010d\u00edtka my\u0161i - -# Sizer -Sizer.name=Velikostn\u00edk - -Sizer.description=Zm\u011b\u0148te velikost uzlu kliknut\u00edm lev\u00e9ho tla\u010d\u00edtka my\u0161i a t\u00e1hnut\u00edm nahoru \u010di dol\u016f - -# Brush +Painter.description=Obarvit uzly stiskem levιho tla\u010dνtka my\u0161i +#Sizer +Sizer.name=Velikostnνk +Sizer.description=Zm\u011b\u0148te velikost uzlu kliknutνm levιho tla\u010dνtka my\u0161i a tαhnutνm nahoru \u010di dol\u016f +#Brush Brush.name=\u0160t\u011btec - -Brush.description=Obarvit uzle a jeho - -DiffusionMethod.None=\u017d\u00e1dn\u00e9 - -DiffusionMethod.Neighbors=Bl\u00edzc\u00ed - -DiffusionMethod.NeighborsOfNeighbors=Bl\u00edzc\u00ed bl\u00edzk\u00fdch - +Brush.description=Obarvit uzle a jeho +DiffusionMethod.None=\u017dαdnι +DiffusionMethod.Neighbors=Blνzcν +DiffusionMethod.NeighborsOfNeighbors=Blνzcν blνzkύch DiffusionMethod.Predecessors=P\u0159edch\u016fdci - -DiffusionMethod.Successors=N\u00e1sledn\u00edci - -# NodePencil +DiffusionMethod.Successors=Nαslednνci +#NodePencil NodePencil.name=Tu\u017eka uzle - -NodePencil.description=P\u0159idat nov\u00fd uzel do grafu, p\u0159i kliknut\u00ed my\u0161\u00ed - -# EdgePencil +NodePencil.description=P\u0159idat novύ uzel do grafu, p\u0159i kliknutν my\u0161ν +#EdgePencil EdgePencil.name=Tu\u017eka hrany - -EdgePencil.description=P\u0159idat novou hranu kliknut\u00edm na zdroj a pak na c\u00edl - -EdgePencil.status1=Vyberte zdrojov\u00fd uzel - -EdgePencil.status2=Vyberte c\u00edlov\u00fd uzel - -# ShortestPath -ShortestPath.name=Nejkrat\u0161\u00ed cesta - -ShortestPath.description=Zobrazit nejkrat\u0161\u00ed cestu, pokud existuje, mezi dv\u011bma zvolen\u00fdmi uzly - -ShortestPath.status1=Vyberte zdrojov\u00fd uzel - -ShortestPath.status2=Vyberte c\u00edlov\u00fd uzel - -ShortestPath.result=Byla nalezena vzd\u00e1len\u00e1 cesta {0} - -ShortestPath.noresult=Mezi t\u011bmito dv\u011bma ulzy neexistuje \u017e\u00e1dn\u00e1 cesta - -# HeatMap -HeatMap.name=Tepeln\u00e1 mapa - -HeatMap.description=Nastavte intenzitu barvy v okol\u00ed uzlu, podle vzd\u00e1lenosti (v\u00e1ha hrany) - -HeatMap.status.maxdistance=Max vzd\u00e1lenost je - -# Edit +EdgePencil.description=P\u0159idat novou hranu kliknutνm na zdroj a pak na cνl +EdgePencil.status1=Vyberte zdrojovύ uzel +EdgePencil.status2=Vyberte cνlovύ uzel +#ShortestPath +ShortestPath.name=Nejkrat\u0161ν cesta +ShortestPath.description=Zobrazit nejkrat\u0161ν cestu, pokud existuje, mezi dv\u011bma zvolenύmi uzly +ShortestPath.status1=Vyberte zdrojovύ uzel +ShortestPath.status2=Vyberte cνlovύ uzel +ShortestPath.result=Byla nalezena vzdαlenα cesta {0} +ShortestPath.noresult=Mezi t\u011bmito dv\u011bma ulzy neexistuje \u017eαdnα cesta +#HeatMap +HeatMap.name=Tepelnα mapa +HeatMap.description=Nastavte intenzitu barvy v okolν uzlu, podle vzdαlenosti (vαha hrany) +HeatMap.status.maxdistance=Max vzdαlenost je +#Edit Edit.name=Upravit - Edit.description=Upravit vlastnosti uzlu diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_de.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_de.properties new file mode 100644 index 0000000000..cfd9c3109c --- /dev/null +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_de.properties @@ -0,0 +1,39 @@ +OpenIDE-Module-Short-Description=Standard-Werkzeuge Implementierung +#Painter +Painter.name=Maler +Painter.description=Setze Knotenfarbe durch Mausklick +#Sizer +Sizer.name=Grφίeneinstellung +Sizer.description=Knotengrφίe δndern durch Mausklick und ziehen +#Brush +Brush.name=Pinsel +Brush.description=Fδrbe Knoten und ihre nδchsten Nachbarn durch Drόcken der linken Maustaste +DiffusionMethod.None=Keine +DiffusionMethod.Neighbors=Nachbarn +DiffusionMethod.NeighborsOfNeighbors=Nachbarn der Nachbarn +DiffusionMethod.Predecessors=Vorgδnger +DiffusionMethod.Successors=Nachfolger +#NodePencil +NodePencil.name=Knoten Stift +NodePencil.description=Knoten hinzufόgen an Stelle des Mausklicks +#EdgePencil +EdgePencil.name=Kanten Stift +EdgePencil.description=Kante hinzufόgen durch Mausklick aus Ursprungsknoten und dann auf Zielknoten +EdgePencil.status1=Wδhlen Sie einen Ursprungsknoten +EdgePencil.status2=Wδhlen Sie einen Zielknoten +#ShortestPath +ShortestPath.name=Kόrzester Pfad +ShortestPath.description=Zeige den kόrzesten Pfad zwischen zwei angeklickten Knoten, sofern es einen gibt +ShortestPath.status1=Wδhlen Sie einen Ursprungsknoten +ShortestPath.status2=Wδhlen Sie einen Zielknoten +ShortestPath.result=Ein Pfad mit Distanz {0} wurde gefunden +ShortestPath.noresult=Es existiert kein Pfad zwischen diesen beiden Knoten +#HeatMap +HeatMap.name=Heatmap +HeatMap.description=Farbintensitδt der Nachbarschaftsknoten anhand der Distanz (Kantengewicht) setzen +HeatMap.status.maxdistance=Maximale Distanz ist +#Edit +Edit.name=Bearbeiten +Edit.description=Knotenattribute bearbeiten +NodesDragger.name=Knoten ziehen +NodesDragger.description=Knoten verschieben durch Drόcken der linken Maustaste und Bewegen der Maus diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_es.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_es.properties index f969fd757d..7616346a8d 100644 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_es.properties +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_es.properties @@ -1,74 +1,37 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-04-02 14\:14+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Short-Description=Implementaciones de las herramientas est\u00e1ndar - -# Painter +OpenIDE-Module-Short-Description=Implementaciones de las herramientas estαndar +#Painter Painter.name=Pincel - -Painter.description=Colorea los nodos presionando el bot\u00f3n izquierdo del rat\u00f3n - -# Sizer -Sizer.name=Dar tama\u00f1o - -Sizer.description=Da tama\u00f1o a los nodos presionando el bot\u00f3n izquierdo del rat\u00f3n y arrastrando hacia arriba o abajo - -# Brush +Painter.description=Colorea los nodos presionando el botσn izquierdo del ratσn +#Sizer +Sizer.name=Dar tamaρo +Sizer.description=Da tamaρo a los nodos presionando el botσn izquierdo del ratσn y arrastrando hacia arriba o abajo +#Brush Brush.name=Brocha - -Brush.description=Da color a los nodos presionando el bot\u00f3n izquierdo del rat\u00f3n - +Brush.description=Da color a los nodos presionando el botσn izquierdo del ratσn DiffusionMethod.None=Ninguna - DiffusionMethod.Neighbors=Vecinos - DiffusionMethod.NeighborsOfNeighbors=Vecinos de los vecinos - DiffusionMethod.Predecessors=Predecesores - DiffusionMethod.Successors=Sucesores - -# NodePencil -NodePencil.name=L\u00e1piz de nodos - -NodePencil.description=A\u00f1ade un nuevo nodo al grafo en el lugar donde el raton es pulsado - -# EdgePencil -EdgePencil.name=L\u00e1piz de aristas - -EdgePencil.description=A\u00f1ade una nueva arista pulsando en el nodo origen y despu\u00e9s el nodo destino - +#NodePencil +NodePencil.name=Lαpiz de nodos +NodePencil.description=Aρade un nuevo nodo al grafo en el lugar donde el raton es pulsado +#EdgePencil +EdgePencil.name=Lαpiz de aristas +EdgePencil.description=Aρade una nueva arista pulsando en el nodo origen y despuιs el nodo destino EdgePencil.status1=Elige un nodo origen - EdgePencil.status2=Elige un nodo destino - -# ShortestPath -ShortestPath.name=Camino m\u00e1s corto - -ShortestPath.description=Muestra el camino m\u00e1s corto entre los dos nodos pulsados si existe - +#ShortestPath +ShortestPath.name=Camino mαs corto +ShortestPath.description=Muestra el camino mαs corto entre los dos nodos pulsados si existe ShortestPath.status1=Elige nodo origen - ShortestPath.status2=Elige nodo destino - ShortestPath.result=Un camino de distancia {0} ha sido encontrado - -ShortestPath.noresult=Ning\u00fan camino existe entre esos dos nodos - -# HeatMap +ShortestPath.noresult=Ningϊn camino existe entre esos dos nodos +#HeatMap HeatMap.name=Mapa de calor - HeatMap.description=Establecer la intensidad de color de los vecinos de un nodo mediante la distancia (peso de la arista) - -HeatMap.status.maxdistance=La distancia m\u00e1xima es - -# Edit +HeatMap.status.maxdistance=La distancia mαxima es +#Edit Edit.name=Editor - Edit.description=Editar atributos de un nodo diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_fr.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_fr.properties index 3d983bf45e..11822b3da8 100644 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_fr.properties +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_fr.properties @@ -1,73 +1,37 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:57+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Impl\u00e9mentation des outils standards - -# Painter +OpenIDE-Module-Short-Description=Implιmentation des outils standards +#Painter Painter.name=Pinceau - Painter.description=Colore les noeuds par clic gauche - -# Sizer +#Sizer Sizer.name=Taille - -Sizer.description=Dimensionne les noeuds par clic gauche maintenu et d\u00e9placement vertical de la souris - -# Brush +Sizer.description=Dimensionne les noeuds par clic gauche maintenu et dιplacement vertical de la souris +#Brush Brush.name=Pot de peinture - Brush.description=Colore les noeuds et ses plus proches voisins par clic gauche - DiffusionMethod.None=Aucune - DiffusionMethod.Neighbors=Voisins - DiffusionMethod.NeighborsOfNeighbors=Voisins des voisins - -DiffusionMethod.Predecessors=Pr\u00e9d\u00e9cesseurs - +DiffusionMethod.Predecessors=Prιdιcesseurs DiffusionMethod.Successors=Successeurs - -# NodePencil +#NodePencil NodePencil.name=Crayon de noeuds - NodePencil.description=Ajoute un nouveau noeud au graphe lors d'un clic souris - -# EdgePencil +#EdgePencil EdgePencil.name=Crayon de liens - EdgePencil.description=Ajoute un lien en cliquant sur la source puis sur la destination - -EdgePencil.status1=S\u00e9lectionnez un noeud source - -EdgePencil.status2=S\u00e9lectionnez un noeud de destination - -# ShortestPath +EdgePencil.status1=Sιlectionnez un noeud source +EdgePencil.status2=Sιlectionnez un noeud de destination +#ShortestPath ShortestPath.name=Plus court chemin - -ShortestPath.description=Affiche le plus court chemin, s'il existe, entre deux noeuds cliqu\u00e9s - -ShortestPath.status1=S\u00e9lectionnez un noeud source - -ShortestPath.status2=S\u00e9lectionnez un noeud de destination - -ShortestPath.result=Un chemin de distance {0} a \u00e9t\u00e9 trouv\u00e9 - +ShortestPath.description=Affiche le plus court chemin, s'il existe, entre deux noeuds cliquιs +ShortestPath.status1=Sιlectionnez un noeud source +ShortestPath.status2=Sιlectionnez un noeud de destination +ShortestPath.result=Un chemin de distance {0} a ιtι trouvι ShortestPath.noresult=Aucun chemin n'existe entre ces deux noeuds - -# HeatMap +#HeatMap HeatMap.name=Carte de chaleur - -HeatMap.description=D\u00e9finit l'intensit\u00e9 de la couleur au voisinage d'un noeud en fonction de la distance et du poids des liens. - +HeatMap.description=Dιfinit l'intensitι de la couleur au voisinage d'un noeud en fonction de la distance et du poids des liens. HeatMap.status.maxdistance=La distance max est - -# Edit +#Edit Edit.name=Editeur - Edit.description=Edite les attributs du noeud diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_he.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_he.properties new file mode 100644 index 0000000000..68df0b3e8b --- /dev/null +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_he.properties @@ -0,0 +1,37 @@ +OpenIDE-Module-Short-Description=Standard tools implementations +#Painter +Painter.name=Painter +Painter.description=Color nodes by pressing mouse left button +#Sizer +Sizer.name=Sizer +Sizer.description=Size nodes by pressing mouse left button and dragging up or down +#Brush +Brush.name=Brush +Brush.description=Color nodes and its nearest neighbour by pressing mouse left button +DiffusionMethod.None=None +DiffusionMethod.Neighbors=Neighbors +DiffusionMethod.NeighborsOfNeighbors=Neighbors of Neighbors +DiffusionMethod.Predecessors=Predecessors +DiffusionMethod.Successors=Successors +#NodePencil +NodePencil.name=Node Pencil +NodePencil.description=Add new node on the graph where mouse is clicked +#EdgePencil +EdgePencil.name=Edge Pencil +EdgePencil.description=Add new edge by clicking on source and then target +EdgePencil.status1=Select a source node +EdgePencil.status2=Select a target node +#ShortestPath +ShortestPath.name=Shortest Path +ShortestPath.description=Display the shortest path if exist between two clicked nodes +ShortestPath.status1=Select a source node +ShortestPath.status2=Select a target node +ShortestPath.result=A {0} distant path has been found +ShortestPath.noresult=No path exist between these two nodes +#HeatMap +HeatMap.name=Heat Map +HeatMap.description=Set color intensity on a node neighborhood, by the distance (edge weight) +HeatMap.status.maxdistance=Max distance is +#Edit +Edit.name=Edit +Edit.description=Edit node attributes diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_hu.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_hu.properties new file mode 100644 index 0000000000..b7ce5646b9 --- /dev/null +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_hu.properties @@ -0,0 +1,39 @@ + + +#Painter +Painter.name=Fest\u0151 +Edit.description=Szerkessze a csomσpont attribϊtumait +DiffusionMethod.Neighbors=Szomsz\u00E9dok +#HeatMap +HeatMap.name=H\u0151t\u00E9rk\u00E9p +Brush.description=Sz\u00EDnezd ki a csom\u00F3pontokat \u00E9s a legk\u00F6zelebbi szomsz\u00E9dot az eg\u00E9r bal gombj\u00E1nak megnyom\u00E1s\u00E1val +ShortestPath.result={0} t\u00E1vols\u00E1gi el\u00E9r\u00E9si \u00FAt tal\u00E1lhat\u00F3 +#NodePencil +NodePencil.name=Csom\u00F3pont Ceruza +#EdgePencil +EdgePencil.name=\u00C9l Ceruza +EdgePencil.description=Adjon hozz\u00E1 \u00FAj \u00E9lt a forr\u00E1sra, majd a c\u00E9lz\u00E1sra kattintva +DiffusionMethod.None=Egyik sem +DiffusionMethod.Predecessors=El\u0151d\u00F6k +ShortestPath.noresult=A k\u00E9t csom\u00F3pont k\u00F6z\u00F6tt nincs \u00FAt +ShortestPath.status1=V\u00E1lasszon ki egy forr\u00E1scsom\u00F3pontot +DiffusionMethod.Successors=Ut\u00F3dok +DiffusionMethod.NeighborsOfNeighbors=Szomsz\u00E9dok szomsz\u00E9dai +EdgePencil.status1=V\u00E1lasszon ki egy forr\u00E1scsom\u00F3pontot +HeatMap.description=Sz\u00EDnintenzit\u00E1s be\u00E1ll\u00EDt\u00E1sa egy csom\u00F3pont k\u00F6rny\u00E9k\u00E9re a t\u00E1vols\u00E1g alapj\u00E1n (\u00E9l s\u00FAlya) +#Edit +Edit.name=Szerkeszt\u00E9s +NodePencil.description=\u00DAj csom\u00F3pont hozz\u00E1ad\u00E1sa a grafikonhoz, ahol az eg\u00E9rrel kattintanak +Sizer.description=M\u00E9rje meg a csom\u00F3pontokat az eg\u00E9r bal gombj\u00E1nak megnyom\u00E1s\u00E1val \u00E9s felfel\u00E9 vagy lefel\u00E9 h\u00FAz\u00E1s\u00E1val +OpenIDE-Module-Short-Description=Szabv\u00E1nyos eszk\u00F6z\u00F6k megval\u00F3s\u00EDt\u00E1sai +#ShortestPath +ShortestPath.name=Legr\u00F6videbb \u00FAt +HeatMap.status.maxdistance=A maximαlis tαvolsαg +ShortestPath.description=A legr\u00F6videbb \u00FAtvonal megjelen\u00EDt\u00E9se, ha l\u00E9tezik k\u00E9t kattintott csom\u00F3pont k\u00F6z\u00F6tt +#Brush +Brush.name=Ecset +EdgePencil.status2=V\u00E1lasszon ki egy c\u00E9lcsom\u00F3pontot +Painter.description=Sz\u00EDnezd ki a csom\u00F3pontokat az eg\u00E9r bal gombj\u00E1nak megnyom\u00E1s\u00E1val +ShortestPath.status2=V\u00E1lasszon ki egy c\u00E9lcsom\u00F3pontot +#Sizer +Sizer.name=M\u00E9retez\u0151 diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_it.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_it.properties new file mode 100644 index 0000000000..d08d673197 --- /dev/null +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_it.properties @@ -0,0 +1,39 @@ +OpenIDE-Module-Short-Description=Implementazioni standard degli strumenti +#Painter +Painter.name=Painter +Painter.description=Color nodes by pressing mouse left button +#Sizer +Sizer.name=Sizer +Sizer.description=Size nodes by pressing mouse left button and dragging up or down +#Brush +Brush.name=Brush +Brush.description=Color nodes and its nearest neighbour by pressing mouse left button +DiffusionMethod.None=None +DiffusionMethod.Neighbors=Neighbors +DiffusionMethod.NeighborsOfNeighbors=Neighbors of Neighbors +DiffusionMethod.Predecessors=Predecessors +DiffusionMethod.Successors=Successors +#NodePencil +NodePencil.name=Node Pencil +NodePencil.description=Add new node on the graph where mouse is clicked +#EdgePencil +EdgePencil.name=Edge Pencil +EdgePencil.description=Add new edge by clicking on source and then target +EdgePencil.status1=Select a source node +EdgePencil.status2=Select a target node +#ShortestPath +ShortestPath.name=Shortest Path +ShortestPath.description=Display the shortest path if exist between two clicked nodes +ShortestPath.status1=Select a source node +ShortestPath.status2=Select a target node +ShortestPath.result=A {0} distant path has been found +ShortestPath.noresult=No path exist between these two nodes +#HeatMap +HeatMap.name=Heat Map +HeatMap.description=Set color intensity on a node neighborhood, by the distance (edge weight) +HeatMap.status.maxdistance=Max distance is +#Edit +Edit.name=Edit +Edit.description=Edit node attributes +NodesDragger.name=Trascina nodi +NodesDragger.description=Muovi i nodi premendo il tasto sinistro del mouse e trascinandoli diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_ja.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_ja.properties index d950f25027..f2211ae02b 100644 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_ja.properties +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_ja.properties @@ -1,73 +1,37 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-04 10\:32+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - OpenIDE-Module-Short-Description=\u6a19\u6e96\u7684\u30c4\u30fc\u30eb\u306e\u5b9f\u88c5 - -# Painter +#Painter Painter.name=\u30da\u30a4\u30f3\u30bf - Painter.description=\u30de\u30a6\u30b9\u5de6\u30dc\u30bf\u30f3\u3092\u62bc\u3057\u3066\u30ce\u30fc\u30c9\u306b\u7740\u8272 - -# Sizer +#Sizer Sizer.name=\u5bf8\u6cd5\u6e2c\u5b9a\u5668 - Sizer.description=\u30de\u30a6\u30b9\u5de6\u30dc\u30bf\u30f3\u3092\u62bc\u3057\u3066\u4e0a\u4e0b\u306b\u30c9\u30e9\u30c3\u30b0\u3057\u3066\u30ce\u30fc\u30c9\u306e\u5927\u304d\u3055\u5909\u66f4 - -# Brush +#Brush Brush.name=\u30d6\u30e9\u30b7 - Brush.description=\u30de\u30a6\u30b9\u306e\u5de6\u30dc\u30bf\u30f3\u3092\u62bc\u3059\u3068\u30ce\u30fc\u30c9\u3068\u6700\u3082\u8fd1\u3044\u96a3\u63a5\u30ce\u30fc\u30c9\u306b\u7740\u8272 - DiffusionMethod.None=\u306a\u3057 - DiffusionMethod.Neighbors=\u96a3\u63a5 - DiffusionMethod.NeighborsOfNeighbors=\u96a3\u63a5\u306e\u96a3\u63a5 - DiffusionMethod.Predecessors=\u5148\u884c\u5de5\u7a0b - DiffusionMethod.Successors=\u5f8c\u7d9a\u5de5\u7a0b - -# NodePencil +#NodePencil NodePencil.name=\u30ce\u30fc\u30c9\u306e\u925b\u7b46 - NodePencil.description=\u30de\u30a6\u30b9\u304c\u30af\u30ea\u30c3\u30af\u3055\u308c\u305f\u30b0\u30e9\u30d5\u4e0a\u306b\u65b0\u3057\u3044\u30ce\u30fc\u30c9\u3092\u8ffd\u52a0 - -# EdgePencil +#EdgePencil EdgePencil.name=\u8fba\u306e\u30da\u30f3\u30b7\u30eb - EdgePencil.description=\u307e\u305a\u30bd\u30fc\u30b9\u306e\u4e0a\u6b21\u306b\u30bf\u30fc\u30b2\u30c3\u30c8\u306e\u4e0a\u3067\u30af\u30ea\u30c3\u30af\u3057\u3066\u65b0\u898f\u30ce\u30fc\u30c9\u3092\u8ffd\u52a0 - EdgePencil.status1=\u30bd\u30fc\u30b9\u30ce\u30fc\u30c9\u3092\u9078\u629e - EdgePencil.status2=\u30bf\u30fc\u30b2\u30c3\u30c8\u30ce\u30fc\u30c9\u3092\u9078\u629e - -# ShortestPath +#ShortestPath ShortestPath.name=\u6700\u77ed\u7d4c\u8def - ShortestPath.description=\u30af\u30ea\u30c3\u30af\u3057\u305f\u30ce\u30fc\u30c9\u9593\u306b\u3042\u308c\u3070\u3001\u6700\u77ed\u30d1\u30b9\u3092\u8868\u793a - ShortestPath.status1=\u30bd\u30fc\u30b9\u30ce\u30fc\u30c9\u3092\u9078\u629e - ShortestPath.status2=\u30bf\u30fc\u30b2\u30c3\u30c8\u30ce\u30fc\u30c9\u3092\u9078\u629e - ShortestPath.result={0}\u9060\u9694\u30d1\u30b9\u304c\u898b\u3064\u304b\u308a\u307e\u3057\u305f - ShortestPath.noresult=\u3053\u308c\u3089\uff12\u3064\u306e\u30ce\u30fc\u30c9\u306b\u306f\u30d1\u30b9\u304c\u5b58\u5728\u3057\u307e\u305b\u3093\u3002 - -# HeatMap +#HeatMap HeatMap.name=\u30d2\u30fc\u30c8\u30de\u30c3\u30d7 - HeatMap.description=\u30ce\u30fc\u30c9\u8fd1\u508d\u306e\u8272\u306e\u6fc3\u3055\u3092\u8a2d\u5b9a\u3059\u308b\u3001\u8ddd\u96e2(\u8fba\u306e\u91cd\u307f)\u306b\u3088\u308b\u3002 - -HeatMap.status.maxdistance=\u6700\u5927\u8ddd\u96e2\u306f - -# Edit +HeatMap.status.maxdistance=\u6700\u5927\u8DDD\u96E2\u306F +#Edit Edit.name=\u7de8\u96c6 - -Edit.description=\u30ce\u30fc\u30c9\u306e\u5c5e\u6027\u306e\u7de8\u96c6 +Edit.description=\u30CE\u30FC\u30C9\u306E\u5C5E\u6027\u306E\u7DE8\u96C6 diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_ko.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_ko.properties new file mode 100644 index 0000000000..b9b25d803d --- /dev/null +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_ko.properties @@ -0,0 +1,39 @@ + + +#Painter +Painter.name=\uCE60\uD558\uAE30 +Painter.description=\uB9C8\uC6B0\uC2A4 \uC67C\uCABD \uBC84\uD2BC\uC73C\uB85C \uB178\uB4DC \uC0C9\uCE60\uD558\uAE30 +#Sizer +Sizer.name=\uD06C\uAE30 \uC870\uC808\uAE30 +#Brush +Brush.name=\uBD93 +Brush.description=\uB9C8\uC6B0\uC2A4 \uC67C\uCABD \uBC84\uD2BC\uC744 \uB20C\uB7EC \uB178\uB4DC \uBC0F \uADF8\uC640 \uAC00\uAE4C\uC6B4 \uC774\uC6C3\uB4E4\uC744 \uC0C9\uCE60\uD558\uAE30 +DiffusionMethod.None=\uC5C6\uC74C +DiffusionMethod.Neighbors=\uC774\uC6C3 +DiffusionMethod.NeighborsOfNeighbors=\uC774\uC6C3\uC758 \uC774\uC6C3 +DiffusionMethod.Predecessors=\uC55E \uB178\uB4DC +DiffusionMethod.Successors=\uB2E4\uC74C \uB178\uB4DC +#NodePencil +NodePencil.name=\uB178\uB4DC \uC5F0\uD544 +#EdgePencil +EdgePencil.name=\uC5E3\uC9C0 \uC5F0\uD544 +EdgePencil.description=\uC18C\uC2A4 \uB2E4\uC74C\uC5D0 \uD0C0\uAC9F \uB178\uB4DC\uB97C \uD074\uB9AD\uD574\uC11C \uC0C8 \uC5E3\uC9C0\uB97C \uCD94\uAC00\uD558\uAE30 +EdgePencil.status1=\uC18C\uC2A4 \uB178\uB4DC\uB97C \uC120\uD0DD\uD558\uC138\uC694 +EdgePencil.status2=\uD0C0\uAC9F \uB178\uB4DC\uB97C \uC120\uD0DD\uD558\uC138\uC694 +#ShortestPath +ShortestPath.name=\uCD5C\uB2E8 \uACBD\uB85C +ShortestPath.status1=\uC18C\uC2A4 \uB178\uB4DC\uB97C \uC120\uD0DD\uD558\uC138\uC694 +ShortestPath.result=\uAC70\uB9AC {0}\uC778 \uACBD\uB85C\uAC00 \uBC1C\uACAC\uB410\uC2B5\uB2C8\uB2E4 +ShortestPath.noresult=\uB450 \uAC1C \uB178\uB4DC\uC758 \uC0AC\uC774\uC5D0 \uACBD\uB85C\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4 +#HeatMap +HeatMap.name=\uD788\uD2B8\uB9F5 +HeatMap.status.maxdistance=\uCD5C\uB300 \uAC70\uB9AC\uB294 +#Edit +Edit.name=\uD3B8\uC9D1\uD558\uAE30 +Edit.description=\uB178\uB4DC \uC18D\uC131 \uD3B8\uC9D1\uD558\uAE30 +OpenIDE-Module-Short-Description=\uD45C\uC900 \uB3C4\uAD6C \uAD6C\uD604 +Sizer.description=\uB9C8\uC6B0\uC2A4 \uC67C\uCABD \uBC84\uD2BC\uC744 \uB204\uB978 \uCC44 \uC704\uC544\uB798\uB85C \uB4DC\uB798\uAE45\uD574\uC11C \uB178\uB4DC \uD06C\uAE30 \uC870\uC808\uD558\uAE30 +NodePencil.description=\uADF8\uB798\uD504\uC5D0 \uB9C8\uC6B0\uC2A4\uB97C \uD074\uB9AD\uD558\uC5EC \uC0C8 \uB178\uB4DC\uB97C \uCD94\uAC00\uD558\uAE30 +ShortestPath.description=\uD074\uB9AD\uD55C \uB450 \uAC1C \uB178\uB4DC \uC0AC\uC774\uC5D0 \uCD5C\uB2E8 \uACBD\uB85C\uAC00 \uC874\uC7AC\uD558\uBA74 \uD45C\uC2DC +ShortestPath.status2=\uD0C0\uAC9F \uB178\uB4DC\uB97C \uC120\uD0DD\uD558\uC138\uC694 +HeatMap.description=\uAC70\uB9AC(\uC5E3\uC9C0 \uAC00\uC911\uCE58)\uB97C \uAE30\uC900\uC73C\uB85C \uB178\uB4DC \uC8FC\uBCC0\uC758 \uC0C9\uC0C1 \uAC15\uB3C4\uB97C \uC124\uC815 diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_nl.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_nl.properties new file mode 100644 index 0000000000..ac5e851cbc --- /dev/null +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_nl.properties @@ -0,0 +1,37 @@ +OpenIDE-Module-Short-Description=Standard tools implementations +#Painter +Painter.name=Painter +Painter.description=Color nodes by pressing mouse left button +#Sizer +Sizer.name=Sizer +Sizer.description=Size nodes by pressing mouse left button and dragging up or down +#Brush +Brush.name=Kwast +Brush.description=Color nodes and its nearest neighbour by pressing mouse left button +DiffusionMethod.None=Geen +DiffusionMethod.Neighbors=Neighbors +DiffusionMethod.NeighborsOfNeighbors=Neighbors of Neighbors +DiffusionMethod.Predecessors=Voorgangers +DiffusionMethod.Successors=Opvolgers +#NodePencil +NodePencil.name=Node Pencil +NodePencil.description=Add new node on the graph where mouse is clicked +#EdgePencil +EdgePencil.name=Edge Pencil +EdgePencil.description=Add new edge by clicking on source and then target +EdgePencil.status1=Select a source node +EdgePencil.status2=Select a target node +#ShortestPath +ShortestPath.name=Kortste pad +ShortestPath.description=Display the shortest path if exist between two clicked nodes +ShortestPath.status1=Select a source node +ShortestPath.status2=Select a target node +ShortestPath.result=A {0} distant path has been found +ShortestPath.noresult=Er bestaat geen pad tussen deze twee knopen +#HeatMap +HeatMap.name=Hittekaart +HeatMap.description=Set color intensity on a node neighborhood, by the distance (edge weight) +HeatMap.status.maxdistance=Maximale afstand is +#Edit +Edit.name=Bewerken +Edit.description=Knoopattributen bewerken diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_pt_BR.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_pt_BR.properties index c22216af38..3a7d47c01f 100644 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_pt_BR.properties +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_pt_BR.properties @@ -1,73 +1,37 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 14\:12+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Implementa\u00e7\u00f5es das ferramentas padr\u00e3o - -# Painter +OpenIDE-Module-Short-Description=Implementaηυes das ferramentas padrγo +#Painter Painter.name=Pincel - -Painter.description=Colorir os n\u00f3s pressionando o bot\u00e3o esquerdo do mouse - -# Sizer +Painter.description=Colorir os nσs pressionando o botγo esquerdo do mouse +#Sizer Sizer.name=Dimensionador - -Sizer.description=Alterar o tamanho dos n\u00f3s pressionando o bot\u00e3o esquerdo do mouse e arrastando para cima ou para baixo - -# Brush +Sizer.description=Alterar o tamanho dos nσs pressionando o botγo esquerdo do mouse e arrastando para cima ou para baixo +#Brush Brush.name=Tipo de pincel - -Brush.description=Colorir os n\u00f3s e seus vizinhos mais pr\u00f3ximos pressionando o bot\u00e3o esquerdo do mouse - +Brush.description=Colorir os nσs e seus vizinhos mais prσximos pressionando o botγo esquerdo do mouse DiffusionMethod.None=Nenhum - DiffusionMethod.Neighbors=Vizinhos - DiffusionMethod.NeighborsOfNeighbors=Vizinhos dos vizinhos - DiffusionMethod.Predecessors=Antecessores - DiffusionMethod.Successors=Sucessores - -# NodePencil -NodePencil.name=L\u00e1pis de n\u00f3 - -NodePencil.description=Adicionar um novo n\u00f3 ao grafo no lugar onde o mouse for clicado - -# EdgePencil -EdgePencil.name=L\u00e1pis de aresta - -EdgePencil.description=Adicionar uma nova aresta clicando o n\u00f3 origem e depois o n\u00f3 destino - -EdgePencil.status1=Selecione um n\u00f3 origem - -EdgePencil.status2=Selecione um n\u00f3 destino - -# ShortestPath +#NodePencil +NodePencil.name=Lαpis de nσ +NodePencil.description=Adicionar um novo nσ ao grafo no lugar onde o mouse for clicado +#EdgePencil +EdgePencil.name=Lαpis de aresta +EdgePencil.description=Adicionar uma nova aresta clicando o nσ origem e depois o nσ destino +EdgePencil.status1=Selecione um nσ origem +EdgePencil.status2=Selecione um nσ destino +#ShortestPath ShortestPath.name=Menor caminho - ShortestPath.description=Exibir o caminho mais curto entre os dois nodos clicados, caso exista - -ShortestPath.status1=Selecione um n\u00f3 origem - -ShortestPath.status2=Selecione um n\u00f3 destino - -ShortestPath.result=Um caminho de dist\u00e2ncia {0} foi encontrado - -ShortestPath.noresult=N\u00e3o existe nenhum caminho entre esses dois n\u00f3s - -# HeatMap +ShortestPath.status1=Selecione um nσ origem +ShortestPath.status2=Selecione um nσ destino +ShortestPath.result=Um caminho de distβncia {0} foi encontrado +ShortestPath.noresult=Nγo existe nenhum caminho entre esses dois nσs +#HeatMap HeatMap.name=Mapa de calor - -HeatMap.description=Estabelecer a intensidade de cor dos vizinhos de um n\u00f3 mediante a dist\u00e2ncia (peso da aresta) - -HeatMap.status.maxdistance=A dist\u00e2ncia m\u00e1xima \u00e9 - -# Edit +HeatMap.description=Estabelecer a intensidade de cor dos vizinhos de um nσ mediante a distβncia (peso da aresta) +HeatMap.status.maxdistance=A distβncia mαxima ι +#Edit Edit.name=Editar - -Edit.description=Editar atributos do n\u00f3 +Edit.description=Editar atributos do nσ diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_ro.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_ro.properties new file mode 100644 index 0000000000..459df561f1 --- /dev/null +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_ro.properties @@ -0,0 +1,39 @@ + + +#Painter +Painter.name=Pictor +OpenIDE-Module-Short-Description=Implement\u0103ri de instrumente standard +Painter.description=Coloreaz\u0103 nodurile cu click-st\u00E2nga +DiffusionMethod.NeighborsOfNeighbors=Vecinii vecinilor +#Sizer +Sizer.name=Dimensionator +Sizer.description=Dimensioneaz\u0103 nodurile ap\u0103s\u00E2nd click-st\u00E2nga \u0219i tr\u0103g\u00E2nd +DiffusionMethod.None=F\u0103r\u0103 +DiffusionMethod.Neighbors=Vecini +DiffusionMethod.Predecessors=Predecesori +DiffusionMethod.Successors=Succesori +Brush.description=Coloreaz\u0103 un nod \u0219i vecinii s\u0103i direc\u021Bi cu click-st\u00E2nga +#NodePencil +NodePencil.name=Creion de noduri +#EdgePencil +EdgePencil.name=Creion de muchii +EdgePencil.description=Adaug\u0103 o muchie noua d\u00E2nd click pe surs\u0103, apoi pe tint\u0103 +EdgePencil.status1=Selecteaz\u0103 un nod surs\u0103 +ShortestPath.result=A fost g\u0103sit un drum de lungime {0} +#ShortestPath +ShortestPath.name=Cel mai scurt drum +ShortestPath.noresult=Nu exist\u0103 drum \u00EEntre aceste dou\u0103 noduri +#HeatMap +HeatMap.name=Hart\u0103 Termic\u0103 +HeatMap.description=Seteaz\u0103 intensitatea culorii unei vecin\u0103t\u0103\u021Bi de noduri, dup\u0103 distan\u021Ba (ponderea muchiilor) +HeatMap.status.maxdistance=Distan\u021Ba maxim\u0103 este +#Edit +Edit.name=Editeaz\u0103 +Edit.description=Editeaz\u0103 atributele nodului +#Brush +Brush.name=Pensul\u0103 +NodePencil.description=Adaug\u0103 un nou nod pe graf \u00EEn locul unde se face click +EdgePencil.status2=Selecteaz\u0103 un nod \u021Bint\u0103 +ShortestPath.status2=Selecteaz\u0103 un nod \u021Bint\u0103 +ShortestPath.status1=Selecteaz\u0103 un nod surs\u0103 +ShortestPath.description=Afi\u0219eaz\u0103 cel mai scurt drum, dac\u0103 exist\u0103, \u00EEntre dou\u0103 noduri pe care s-a f\u0103cut click diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_ru.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_ru.properties index 06cc7591e3..0724024713 100644 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_ru.properties +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_ru.properties @@ -1,73 +1,37 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 15\:39+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - OpenIDE-Module-Short-Description=\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 - -# Painter +#Painter Painter.name=\u0417\u0430\u043b\u0438\u0432\u043a\u0430 - Painter.description=\u0414\u043b\u044f \u0440\u0430\u0441\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u043d\u0438\u044f \u0443\u0437\u043b\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043b\u0435\u0432\u044b\u0439 \u043a\u043b\u0438\u043a - -# Sizer +#Sizer Sizer.name=\u0420\u0430\u0437\u043c\u0435\u0440 - Sizer.description=\u0414\u043b\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0443\u0437\u043b\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043b\u0435\u0432\u044b\u0439 \u043a\u043b\u0438\u043a + \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u0435 \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435 \u043c\u044b\u0448\u0438 - -# Brush +#Brush Brush.name=\u041a\u0438\u0441\u0442\u044c - Brush.description=\u0414\u043b\u044f \u0440\u0430\u0441\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u043d\u0438\u044f \u0443\u0437\u043b\u043e\u0432 \u0438 \u0438\u0445 \u0431\u043b\u0438\u0436\u0430\u0439\u0448\u0438\u0445 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043b\u0435\u0432\u044b\u0439 \u043a\u043b\u0438\u043a - DiffusionMethod.None=\u0422\u043e\u043b\u044c\u043a\u043e \u0441\u0430\u043c \u0443\u0437\u0435\u043b - DiffusionMethod.Neighbors=\u0414\u043e \u0441\u043e\u0441\u0435\u0434\u0435\u0439 - DiffusionMethod.NeighborsOfNeighbors=\u0414\u043e \u0441\u043e\u0441\u0435\u0434\u0435\u0439 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 - DiffusionMethod.Predecessors=\u041d\u0430 \u0443\u0437\u043b\u044b-\u0440\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u0439 - DiffusionMethod.Successors=\u041d\u0430 \u0443\u0437\u043b\u044b-\u043f\u043e\u0442\u043e\u043c\u043a\u0438 - -# NodePencil +#NodePencil NodePencil.name=\u041a\u0430\u0440\u0430\u043d\u0434\u0430\u0448 \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0443\u0437\u043b\u043e\u0432 - NodePencil.description=\u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u043b\u0435\u0432\u044b\u0439 \u043a\u043b\u0438\u043a - -# EdgePencil +#EdgePencil EdgePencil.name=\u041a\u0430\u0440\u0430\u043d\u0434\u0430\u0448 \u0434\u043b\u044f \u0440\u0438\u0441\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0451\u0431\u0435\u0440 - EdgePencil.description=\u0414\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u0440\u0451\u0431\u0435\u0440 \u043a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u0441\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a, \u0437\u0430\u0442\u0435\u043c \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c - EdgePencil.status1=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0443\u0437\u0435\u043b-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a - EdgePencil.status2=\u0412\u044b\u0431\u0435\u0440\u0435\u0442\u0435 \u0443\u0437\u0435\u043b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c - -# ShortestPath +#ShortestPath ShortestPath.name=\u041a\u0440\u0430\u0442\u0447\u0430\u0439\u0448\u0438\u0439 \u043f\u0443\u0442\u044c - ShortestPath.description=\u0414\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u043a\u0440\u0430\u0442\u0447\u0430\u0439\u0448\u0435\u0433\u043e \u043f\u0443\u0442\u0438 \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u0443\u0437\u043b\u0430\u043c\u0438 (\u0435\u0441\u043b\u0438 \u043e\u043d \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442) \u043a\u043b\u0438\u043a\u043d\u0438\u0442\u0435 \u043d\u0430 \u0434\u0432\u0430 \u0443\u0437\u043b\u0430. - ShortestPath.status1=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0443\u0437\u0435\u043b-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a - ShortestPath.status2=\u0412\u044b\u0431\u0435\u0440\u0435\u0442\u0435 \u0443\u0437\u0435\u043b \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044c - ShortestPath.result=\u041d\u0430\u0439\u0434\u0435\u043d \u043f\u0443\u0442\u044c \u0438\u0437 {0} \u0440\u0435\u0431\u0451\u0440 - ShortestPath.noresult=\u041c\u0435\u0436\u0434\u0443 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u043c\u0438 \u0443\u0437\u043b\u0430\u043c\u0438 \u043f\u0443\u0442\u044c \u043d\u0435 \u043d\u0430\u0439\u0434\u0435\u043d - -# HeatMap +#HeatMap HeatMap.name=\u0422\u0435\u043f\u043b\u043e\u0432\u0430\u044f \u043a\u0430\u0440\u0442\u0430 - HeatMap.description=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0434\u043b\u044f \u0440\u0430\u0441\u043a\u0440\u0430\u0448\u0438\u0432\u0430\u043d\u0438\u044f \u0443\u0437\u043b\u043e\u0432 \u043f\u043e \u0433\u0440\u0430\u0434\u0438\u0435\u043d\u0442\u0443 \u043f\u043e \u043c\u0435\u0440\u0435 \u0443\u0434\u0430\u043b\u0435\u043d\u0438\u044f \u043e\u0442 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0443\u0437\u043b\u0430 (\u0441 \u0443\u0447\u0451\u0442\u043e\u043c \u0432\u0435\u0441\u0430 \u0440\u0435\u0431\u0435\u0440 \u043a\u0430\u043a \u0440\u0430\u0441\u0441\u0442\u043e\u044f\u043d\u0438\u044f) - -HeatMap.status.maxdistance=\u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u0438\u0441\u0442\u0430\u043d\u0446\u0438\u044f - -# Edit +HeatMap.status.maxdistance=\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430\u044F \u0434\u0438\u0441\u0442\u0430\u043D\u0446\u0438\u044F +#Edit Edit.name=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 - -Edit.description=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435 \u0434\u043b\u044f \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043e\u0432 \u0443\u0437\u043b\u0430 +Edit.description=\u0418\u0441\u043F\u043E\u043B\u044C\u0437\u0443\u0439\u0442\u0435 \u0434\u043B\u044F \u0440\u0435\u0434\u0430\u043A\u0442\u0438\u0440\u043E\u0432\u0430\u043D\u0438\u044F \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u043E\u0432 \u0443\u0437\u043B\u0430 diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_th.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_tr.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_tr.properties new file mode 100644 index 0000000000..a6ff394c16 --- /dev/null +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_tr.properties @@ -0,0 +1,37 @@ +OpenIDE-Module-Short-Description=Standart ara\u00E7 uygulamalar\u0131 +#Painter +Painter.name=Painter +Painter.description=Color nodes by pressing mouse left button +#Sizer +Sizer.name=Sizer +Sizer.description=Size nodes by pressing mouse left button and dragging up or down +#Brush +Brush.name=Brush +Brush.description=Color nodes and its nearest neighbour by pressing mouse left button +DiffusionMethod.None=None +DiffusionMethod.Neighbors=Neighbors +DiffusionMethod.NeighborsOfNeighbors=Neighbors of Neighbors +DiffusionMethod.Predecessors=Predecessors +DiffusionMethod.Successors=Successors +#NodePencil +NodePencil.name=Node Pencil +NodePencil.description=Add new node on the graph where mouse is clicked +#EdgePencil +EdgePencil.name=Edge Pencil +EdgePencil.description=Add new edge by clicking on source and then target +EdgePencil.status1=Select a source node +EdgePencil.status2=Select a target node +#ShortestPath +ShortestPath.name=Shortest Path +ShortestPath.description=Display the shortest path if exist between two clicked nodes +ShortestPath.status1=Select a source node +ShortestPath.status2=Select a target node +ShortestPath.result=A {0} distant path has been found +ShortestPath.noresult=No path exist between these two nodes +#HeatMap +HeatMap.name=Heat Map +HeatMap.description=Set color intensity on a node neighborhood, by the distance (edge weight) +HeatMap.status.maxdistance=Max distance is +#Edit +Edit.name=Edit +Edit.description=Edit node attributes diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_uk.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_uk.properties new file mode 100644 index 0000000000..185bbde411 --- /dev/null +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_uk.properties @@ -0,0 +1,31 @@ +DiffusionMethod.Successors=\u041D\u0430\u0441\u0442\u0443\u043F\u043D\u0438\u043A\u0438 +NodePencil.name=\u0412\u0443\u0437\u043E\u043B \u041E\u043B\u0456\u0432\u0435\u0446\u044C +DiffusionMethod.None=\u0416\u043E\u0434\u043D\u043E\u0433\u043E +EdgePencil.status2=\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044C \u0446\u0456\u043B\u044C\u043E\u0432\u0438\u0439 \u0432\u0443\u0437\u043E\u043B +Painter.name=\u0425\u0443\u0434\u043E\u0436\u043D\u0438\u043A +Sizer.description=\u0417\u043C\u0456\u043D\u044E\u0439\u0442\u0435 \u0432\u0443\u0437\u043B\u0438, \u043D\u0430\u0442\u0438\u0441\u043A\u0430\u044E\u0447\u0438 \u043B\u0456\u0432\u0443 \u043A\u043D\u043E\u043F\u043A\u0443 \u043C\u0438\u0448\u0456 \u0442\u0430 \u043F\u0435\u0440\u0435\u0442\u044F\u0433\u0443\u044E\u0447\u0438 \u0432\u0433\u043E\u0440\u0443 \u0430\u0431\u043E \u0432\u043D\u0438\u0437 +Brush.name=\u041A\u0438\u0441\u0442\u044C +ShortestPath.noresult=\u041C\u0456\u0436 \u0446\u0438\u043C\u0438 \u0434\u0432\u043E\u043C\u0430 \u0432\u0443\u0437\u043B\u0430\u043C\u0438 \u043D\u0435 \u0456\u0441\u043D\u0443\u0454 \u0448\u043B\u044F\u0445\u0443 +HeatMap.name=\u0422\u0435\u043F\u043B\u043E\u0432\u0430 \u043A\u0430\u0440\u0442\u0430 +Edit.description=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 \u0430\u0442\u0440\u0438\u0431\u0443\u0442\u0438 \u0432\u0443\u0437\u043B\u0430 +Sizer.name=\u0420\u043E\u0437\u043C\u0456\u0440\u043D\u0438\u043A +EdgePencil.status1=\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044C \u0432\u0438\u0445\u0456\u0434\u043D\u0438\u0439 \u0432\u0443\u0437\u043E\u043B +Brush.description=\u0420\u043E\u0437\u0444\u0430\u0440\u0431\u0443\u0439\u0442\u0435 \u0432\u0443\u0437\u043B\u0438 \u0442\u0430 \u0457\u0445 \u043D\u0430\u0439\u0431\u043B\u0438\u0436\u0447\u0456 \u0441\u0443\u0441\u0456\u0434\u0438, \u043D\u0430\u0442\u0438\u0441\u043D\u0443\u0432\u0448\u0438 \u043B\u0456\u0432\u0443 \u043A\u043D\u043E\u043F\u043A\u0443 \u043C\u0438\u0448\u0456 +EdgePencil.name=\u041A\u0440\u0430\u0439\u043D\u0438\u0439 \u043E\u043B\u0456\u0432\u0435\u0446\u044C +EdgePencil.description=\u0414\u043E\u0434\u0430\u0439\u0442\u0435 \u043D\u043E\u0432\u0438\u0439 \u043A\u0440\u0430\u0439, \u043A\u043B\u0430\u0446\u043D\u0443\u0432\u0448\u0438 \u0434\u0436\u0435\u0440\u0435\u043B\u043E, \u0430 \u043F\u043E\u0442\u0456\u043C \u0446\u0456\u043B\u044C +ShortestPath.name=\u041D\u0430\u0439\u043A\u043E\u0440\u043E\u0442\u0448\u0438\u0439 \u0448\u043B\u044F\u0445 +ShortestPath.description=\u0412\u0456\u0434\u043E\u0431\u0440\u0430\u0437\u0438\u0442\u0438 \u043D\u0430\u0439\u043A\u043E\u0440\u043E\u0442\u0448\u0438\u0439 \u0448\u043B\u044F\u0445, \u044F\u043A\u0449\u043E \u0432\u0456\u043D \u0456\u0441\u043D\u0443\u0454 \u043C\u0456\u0436 \u0434\u0432\u043E\u043C\u0430 \u0432\u0443\u0437\u043B\u0430\u043C\u0438, \u043D\u0430 \u044F\u043A\u0438\u0445 \u043A\u043B\u0430\u0446\u043D\u0443\u0442\u043E \u043C\u0438\u0448\u0435\u044E +ShortestPath.status1=\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044C \u0432\u0438\u0445\u0456\u0434\u043D\u0438\u0439 \u0432\u0443\u0437\u043E\u043B +OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043B\u0456\u0437\u0430\u0446\u0456\u044F \u0441\u0442\u0430\u043D\u0434\u0430\u0440\u0442\u043D\u0438\u0445 \u0456\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u0456\u0432 +HeatMap.status.maxdistance=\u041C\u0430\u043A\u0441\u0438\u043C\u0430\u043B\u044C\u043D\u0430 \u0432\u0456\u0434\u0441\u0442\u0430\u043D\u044C +DiffusionMethod.Neighbors=\u0421\u0443\u0441\u0456\u0434\u0438 +DiffusionMethod.Predecessors=\u041F\u043E\u043F\u0435\u0440\u0435\u0434\u043D\u0438\u043A\u0438 +NodePencil.description=\u0414\u043E\u0434\u0430\u0439\u0442\u0435 \u043D\u043E\u0432\u0438\u0439 \u0432\u0443\u0437\u043E\u043B \u043D\u0430 \u0433\u0440\u0430\u0444\u0456\u043A\u0443, \u0434\u0435 \u043A\u043B\u0430\u0446\u043D\u0456\u0442\u044C \u043C\u0438\u0448\u0435\u044E +ShortestPath.result=\u0417\u043D\u0430\u0439\u0434\u0435\u043D\u043E \u0432\u0456\u0434\u0434\u0430\u043B\u0435\u043D\u0438\u0439 \u0448\u043B\u044F\u0445 {0} +ShortestPath.status2=\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044C \u0446\u0456\u043B\u044C\u043E\u0432\u0438\u0439 \u0432\u0443\u0437\u043E\u043B +HeatMap.description=\u0412\u0441\u0442\u0430\u043D\u043E\u0432\u0438\u0442\u0438 \u0456\u043D\u0442\u0435\u043D\u0441\u0438\u0432\u043D\u0456\u0441\u0442\u044C \u043A\u043E\u043B\u044C\u043E\u0440\u0443 \u043D\u0430 \u043E\u043A\u043E\u043B\u0438\u0446\u0456 \u0432\u0443\u0437\u043B\u0430, \u0437\u0430 \u0432\u0456\u0434\u0441\u0442\u0430\u043D\u043D\u044E (\u0432\u0430\u0433\u0430 \u043A\u0440\u0430\u044E) +DiffusionMethod.NeighborsOfNeighbors=\u0421\u0443\u0441\u0456\u0434\u0438 \u0441\u0443\u0441\u0456\u0434\u0456\u0432 +Painter.description=\u0420\u043E\u0437\u0444\u0430\u0440\u0431\u0443\u0439\u0442\u0435 \u0432\u0443\u0437\u043B\u0438, \u043D\u0430\u0442\u0438\u0441\u043D\u0443\u0432\u0448\u0438 \u043B\u0456\u0432\u0443 \u043A\u043D\u043E\u043F\u043A\u0443 \u043C\u0438\u0448\u0456 +Edit.name=\u0420\u0435\u0434\u0430\u0433\u0443\u0432\u0430\u0442\u0438 +NodesDragger.name=\u041F\u0435\u0440\u0435\u0442\u044F\u0433\u0443\u0432\u0430\u043D\u043D\u044F \u0432\u0443\u0437\u043B\u0456\u0432 +NodesDragger.description=\u041F\u0435\u0440\u0435\u043C\u0456\u0449\u0443\u0439\u0442\u0435 \u0432\u0443\u0437\u043B\u0438, \u043D\u0430\u0442\u0438\u0441\u043A\u0430\u044E\u0447\u0438 \u043B\u0456\u0432\u0443 \u043A\u043D\u043E\u043F\u043A\u0443 \u043C\u0438\u0448\u0456 \u0442\u0430 \u043F\u0435\u0440\u0435\u0442\u044F\u0433\u0443\u044E\u0447\u0438 \u0457\u0445 diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_zh_CN.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_zh_CN.properties index 4d327a490a..17a2922ac6 100644 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_zh_CN.properties +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_zh_CN.properties @@ -1,72 +1,37 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:06+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - OpenIDE-Module-Short-Description=\u6807\u51c6\u5de5\u5177\u5b9e\u73b0 - -# Painter +#Painter Painter.name=\u7740\u8272 - Painter.description=\u6309\u9f20\u6807\u5de6\u952e\u7740\u8272\u8282\u70b9 - -# Sizer +#Sizer Sizer.name=\u6539\u53d8\u5927\u5c0f - Sizer.description=\u6309\u9f20\u6807\u5de6\u952e\u5e76\u4e0a\u4e0b\u62d6\u52a8\u6539\u53d8\u8282\u70b9\u5927\u5c0f - -# Brush +#Brush Brush.name=\u683c\u5f0f\u5237 - Brush.description=\u6309\u9f20\u6807\u5de6\u952e\u7740\u8272\u8282\u70b9\u53ca\u5176\u6700\u8fd1\u90bb - DiffusionMethod.None=\u6ca1\u6709 - DiffusionMethod.Neighbors=\u90bb\u5c45 - DiffusionMethod.NeighborsOfNeighbors=\u90bb\u5c45\u7684\u90bb\u5c45 - DiffusionMethod.Predecessors=\u524d\u8005 - DiffusionMethod.Successors=\u540e\u8005 - -# NodePencil +#NodePencil NodePencil.name=\u8282\u70b9\u94c5\u7b14\u5de5\u5177 - NodePencil.description=\u5728\u9f20\u6807\u70b9\u51fb\u5904\u6dfb\u52a0\u4e00\u4e2a\u65b0\u8282\u70b9 - -# EdgePencil +#EdgePencil EdgePencil.name=\u8fb9\u94c5\u7b14\u5de5\u5177 - EdgePencil.description=\u70b9\u51fb\u6e90\u8282\u70b9\u7136\u540e\u76ee\u6807\u8282\u70b9\u6dfb\u52a0\u65b0\u8fb9 - EdgePencil.status1=\u9009\u62e9\u4e00\u4e2a\u6e90\u8282\u70b9 - EdgePencil.status2=\u9009\u62e9\u4e00\u4e2a\u76ee\u6807\u8282\u70b9 - -# ShortestPath +#ShortestPath ShortestPath.name=\u6700\u77ed\u8def\u5f84 - ShortestPath.description=\u663e\u793a\u4e24\u70b9\u9009\u8282\u70b9\u4e4b\u95f4\u5b58\u5728\u7684\u6700\u77ed\u8def\u5f84 - ShortestPath.status1=\u9009\u62e9\u4e00\u4e2a\u6e90\u8282\u70b9 - ShortestPath.status2=\u9009\u62e9\u4e00\u4e2a\u76ee\u6807\u8282\u70b9 - ShortestPath.result=\u53d1\u73b0\u4e00{0}\u957f\u8def\u5f84 - ShortestPath.noresult=\u6b64\u4e24\u8282\u70b9\u95f4\u4e0d\u5b58\u5728\u8def\u5f84 - -# HeatMap +#HeatMap HeatMap.name=\u70ed\u56fe - HeatMap.description=\u6839\u636e\u8ddd\u79bb(\u5373\u8fb9\u7684\u6743)\u8bbe\u5b9a\u4e00\u4e2a\u7ed3\u70b9\u90bb\u5c45\u7684\u989c\u8272\u6df1\u5ea6 - -HeatMap.status.maxdistance=\u6700\u5927\u8ddd\u79bb\u662f - -# Edit +HeatMap.status.maxdistance=\u6700\u5927\u8DDD\u79BB\u662F +#Edit Edit.name=\u7f16\u8f91 - -Edit.description=\u7f16\u8f91\u8282\u70b9\u5c5e\u6027 +Edit.description=\u7F16\u8F91\u8282\u70B9\u5C5E\u6027 diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_zh_TW.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_zh_TW.properties new file mode 100644 index 0000000000..68df0b3e8b --- /dev/null +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/Bundle_zh_TW.properties @@ -0,0 +1,37 @@ +OpenIDE-Module-Short-Description=Standard tools implementations +#Painter +Painter.name=Painter +Painter.description=Color nodes by pressing mouse left button +#Sizer +Sizer.name=Sizer +Sizer.description=Size nodes by pressing mouse left button and dragging up or down +#Brush +Brush.name=Brush +Brush.description=Color nodes and its nearest neighbour by pressing mouse left button +DiffusionMethod.None=None +DiffusionMethod.Neighbors=Neighbors +DiffusionMethod.NeighborsOfNeighbors=Neighbors of Neighbors +DiffusionMethod.Predecessors=Predecessors +DiffusionMethod.Successors=Successors +#NodePencil +NodePencil.name=Node Pencil +NodePencil.description=Add new node on the graph where mouse is clicked +#EdgePencil +EdgePencil.name=Edge Pencil +EdgePencil.description=Add new edge by clicking on source and then target +EdgePencil.status1=Select a source node +EdgePencil.status2=Select a target node +#ShortestPath +ShortestPath.name=Shortest Path +ShortestPath.description=Display the shortest path if exist between two clicked nodes +ShortestPath.status1=Select a source node +ShortestPath.status2=Select a target node +ShortestPath.result=A {0} distant path has been found +ShortestPath.noresult=No path exist between these two nodes +#HeatMap +HeatMap.name=Heat Map +HeatMap.description=Set color intensity on a node neighborhood, by the distance (edge weight) +HeatMap.status.maxdistance=Max distance is +#Edit +Edit.name=Edit +Edit.description=Edit node attributes diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/cs.po b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/cs.po deleted file mode 100644 index 353361ed65..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/cs.po +++ /dev/null @@ -1,114 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-03 21:37+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ZavedenΓ­ standardnΓ­ch nΓ‘strojΕ―" - -# Painter -msgid "Painter.name" -msgstr "NatΔ›rač" - -msgid "Painter.description" -msgstr "Obarvit uzly stiskem levΓ©ho tlačítka myΕ‘i" - -# Sizer -msgid "Sizer.name" -msgstr "VelikostnΓ­k" - -msgid "Sizer.description" -msgstr "ZmΔ›Εˆte velikost uzlu kliknutΓ­m levΓ©ho tlačítka myΕ‘i a tΓ‘hnutΓ­m nahoru či dolΕ―" - -# Brush -msgid "Brush.name" -msgstr "Ε tΔ›tec" - -msgid "Brush.description" -msgstr "Obarvit uzle a jeho " - -msgid "DiffusionMethod.None" -msgstr "Ε½Γ‘dnΓ©" - -msgid "DiffusionMethod.Neighbors" -msgstr "BlΓ­zcΓ­" - -msgid "DiffusionMethod.NeighborsOfNeighbors" -msgstr "BlΓ­zcΓ­ blΓ­zkΓ½ch" - -msgid "DiffusionMethod.Predecessors" -msgstr "PΕ™edchΕ―dci" - -msgid "DiffusionMethod.Successors" -msgstr "NΓ‘slednΓ­ci" - -# NodePencil -msgid "NodePencil.name" -msgstr "TuΕΎka uzle" - -msgid "NodePencil.description" -msgstr "PΕ™idat novΓ½ uzel do grafu, pΕ™i kliknutΓ­ myΕ‘Γ­" - -# EdgePencil -msgid "EdgePencil.name" -msgstr "TuΕΎka hrany" - -msgid "EdgePencil.description" -msgstr "PΕ™idat novou hranu kliknutΓ­m na zdroj a pak na cΓ­l" - -msgid "EdgePencil.status1" -msgstr "Vyberte zdrojovΓ½ uzel" - -msgid "EdgePencil.status2" -msgstr "Vyberte cΓ­lovΓ½ uzel" - -# ShortestPath -msgid "ShortestPath.name" -msgstr "NejkratΕ‘Γ­ cesta" - -msgid "ShortestPath.description" -msgstr "Zobrazit nejkratΕ‘Γ­ cestu, pokud existuje, mezi dvΔ›ma zvolenΓ½mi uzly" - -msgid "ShortestPath.status1" -msgstr "Vyberte zdrojovΓ½ uzel" - -msgid "ShortestPath.status2" -msgstr "Vyberte cΓ­lovΓ½ uzel" - -msgid "ShortestPath.result" -msgstr "Byla nalezena vzdΓ‘lenΓ‘ cesta {0}" - -msgid "ShortestPath.noresult" -msgstr "Mezi tΔ›mito dvΔ›ma ulzy neexistuje ΕΎΓ‘dnΓ‘ cesta" - -# HeatMap -msgid "HeatMap.name" -msgstr "TepelnΓ‘ mapa" - -msgid "HeatMap.description" -msgstr "Nastavte intenzitu barvy v okolΓ­ uzlu, podle vzdΓ‘lenosti (vΓ‘ha hrany)" - -msgid "HeatMap.status.maxdistance" -msgstr "Max vzdΓ‘lenost je " - -# Edit -msgid "Edit.name" -msgstr "Upravit" - -msgid "Edit.description" -msgstr "Upravit vlastnosti uzlu" diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/es.po b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/es.po deleted file mode 100644 index 3e8d4d3424..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/es.po +++ /dev/null @@ -1,115 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-04-02 14:14+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Implementaciones de las herramientas estΓ‘ndar" - -# Painter -msgid "Painter.name" -msgstr "Pincel" - -msgid "Painter.description" -msgstr "Colorea los nodos presionando el botΓ³n izquierdo del ratΓ³n" - -# Sizer -msgid "Sizer.name" -msgstr "Dar tamaΓ±o" - -msgid "Sizer.description" -msgstr "Da tamaΓ±o a los nodos presionando el botΓ³n izquierdo del ratΓ³n y arrastrando hacia arriba o abajo" - -# Brush -msgid "Brush.name" -msgstr "Brocha" - -msgid "Brush.description" -msgstr "Da color a los nodos presionando el botΓ³n izquierdo del ratΓ³n" - -msgid "DiffusionMethod.None" -msgstr "Ninguna" - -msgid "DiffusionMethod.Neighbors" -msgstr "Vecinos" - -msgid "DiffusionMethod.NeighborsOfNeighbors" -msgstr "Vecinos de los vecinos" - -msgid "DiffusionMethod.Predecessors" -msgstr "Predecesores" - -msgid "DiffusionMethod.Successors" -msgstr "Sucesores" - -# NodePencil -msgid "NodePencil.name" -msgstr "LΓ‘piz de nodos" - -msgid "NodePencil.description" -msgstr "AΓ±ade un nuevo nodo al grafo en el lugar donde el raton es pulsado" - -# EdgePencil -msgid "EdgePencil.name" -msgstr "LΓ‘piz de aristas" - -msgid "EdgePencil.description" -msgstr "AΓ±ade una nueva arista pulsando en el nodo origen y despuΓ©s el nodo destino" - -msgid "EdgePencil.status1" -msgstr "Elige un nodo origen" - -msgid "EdgePencil.status2" -msgstr "Elige un nodo destino" - -# ShortestPath -msgid "ShortestPath.name" -msgstr "Camino mΓ‘s corto" - -msgid "ShortestPath.description" -msgstr "Muestra el camino mΓ‘s corto entre los dos nodos pulsados si existe" - -msgid "ShortestPath.status1" -msgstr "Elige nodo origen" - -msgid "ShortestPath.status2" -msgstr "Elige nodo destino" - -msgid "ShortestPath.result" -msgstr "Un camino de distancia {0} ha sido encontrado" - -msgid "ShortestPath.noresult" -msgstr "NingΓΊn camino existe entre esos dos nodos" - -# HeatMap -msgid "HeatMap.name" -msgstr "Mapa de calor" - -msgid "HeatMap.description" -msgstr "Establecer la intensidad de color de los vecinos de un nodo mediante la distancia (peso de la arista)" - -msgid "HeatMap.status.maxdistance" -msgstr "La distancia mΓ‘xima es" - -# Edit -msgid "Edit.name" -msgstr "Editor" - -msgid "Edit.description" -msgstr "Editar atributos de un nodo" diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/fr.po b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/fr.po deleted file mode 100644 index 0a82754656..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/fr.po +++ /dev/null @@ -1,114 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:57+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplΓ©mentation des outils standards" - -# Painter -msgid "Painter.name" -msgstr "Pinceau" - -msgid "Painter.description" -msgstr "Colore les noeuds par clic gauche" - -# Sizer -msgid "Sizer.name" -msgstr "Taille" - -msgid "Sizer.description" -msgstr "Dimensionne les noeuds par clic gauche maintenu et dΓ©placement vertical de la souris" - -# Brush -msgid "Brush.name" -msgstr "Pot de peinture" - -msgid "Brush.description" -msgstr "Colore les noeuds et ses plus proches voisins par clic gauche" - -msgid "DiffusionMethod.None" -msgstr "Aucune" - -msgid "DiffusionMethod.Neighbors" -msgstr "Voisins" - -msgid "DiffusionMethod.NeighborsOfNeighbors" -msgstr "Voisins des voisins" - -msgid "DiffusionMethod.Predecessors" -msgstr "PrΓ©dΓ©cesseurs" - -msgid "DiffusionMethod.Successors" -msgstr "Successeurs" - -# NodePencil -msgid "NodePencil.name" -msgstr "Crayon de noeuds" - -msgid "NodePencil.description" -msgstr "Ajoute un nouveau noeud au graphe lors d'un clic souris" - -# EdgePencil -msgid "EdgePencil.name" -msgstr "Crayon de liens" - -msgid "EdgePencil.description" -msgstr "Ajoute un lien en cliquant sur la source puis sur la destination" - -msgid "EdgePencil.status1" -msgstr "SΓ©lectionnez un noeud source" - -msgid "EdgePencil.status2" -msgstr "SΓ©lectionnez un noeud de destination" - -# ShortestPath -msgid "ShortestPath.name" -msgstr "Plus court chemin" - -msgid "ShortestPath.description" -msgstr "Affiche le plus court chemin, s'il existe, entre deux noeuds cliquΓ©s" - -msgid "ShortestPath.status1" -msgstr "SΓ©lectionnez un noeud source" - -msgid "ShortestPath.status2" -msgstr "SΓ©lectionnez un noeud de destination" - -msgid "ShortestPath.result" -msgstr "Un chemin de distance {0} a Γ©tΓ© trouvΓ©" - -msgid "ShortestPath.noresult" -msgstr "Aucun chemin n'existe entre ces deux noeuds" - -# HeatMap -msgid "HeatMap.name" -msgstr "Carte de chaleur" - -msgid "HeatMap.description" -msgstr "DΓ©finit l'intensitΓ© de la couleur au voisinage d'un noeud en fonction de la distance et du poids des liens." - -msgid "HeatMap.status.maxdistance" -msgstr "La distance max est" - -# Edit -msgid "Edit.name" -msgstr "Editeur" - -msgid "Edit.description" -msgstr "Edite les attributs du noeud" diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/ja.po b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/ja.po deleted file mode 100644 index 5e930775f4..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/ja.po +++ /dev/null @@ -1,114 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-04 10:32+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζ¨™ζΊ–ηš„γƒ„γƒΌγƒ«γεŸθ£…" - -# Painter -msgid "Painter.name" -msgstr "γƒšγ‚€γƒ³γ‚Ώ" - -msgid "Painter.description" -msgstr "γƒžγ‚¦γ‚Ήε·¦γƒœγ‚Ώγƒ³γ‚’ζŠΌγ—γ¦γƒŽγƒΌγƒ‰γ«η€θ‰²" - -# Sizer -msgid "Sizer.name" -msgstr "寸法測εšε™¨" - -msgid "Sizer.description" -msgstr "γƒžγ‚¦γ‚Ήε·¦γƒœγ‚Ώγƒ³γ‚’ζŠΌγ—γ¦δΈŠδΈ‹γ«γƒ‰γƒ©γƒƒγ‚°γ—γ¦γƒŽγƒΌγƒ‰γε€§γγ•倉更" - -# Brush -msgid "Brush.name" -msgstr "ブラシ" - -msgid "Brush.description" -msgstr "γƒžγ‚¦γ‚Ήγε·¦γƒœγ‚Ώγƒ³γ‚’ζŠΌγ™γ¨γƒŽγƒΌγƒ‰γ¨ζœ€γ‚‚θΏ‘γ„ιš£ζŽ₯γƒŽγƒΌγƒ‰γ«η€θ‰²" - -msgid "DiffusionMethod.None" -msgstr "γͺし" - -msgid "DiffusionMethod.Neighbors" -msgstr "隣ζŽ₯" - -msgid "DiffusionMethod.NeighborsOfNeighbors" -msgstr "隣ζŽ₯γιš£ζŽ₯" - -msgid "DiffusionMethod.Predecessors" -msgstr "ε…ˆθ‘Œε·₯程" - -msgid "DiffusionMethod.Successors" -msgstr "後碚ε·₯程" - -# NodePencil -msgid "NodePencil.name" -msgstr "γƒŽγƒΌγƒ‰γι‰›η­†" - -msgid "NodePencil.description" -msgstr "γƒžγ‚¦γ‚ΉγŒγ‚―γƒͺγƒƒγ‚―γ•γ‚ŒγŸγ‚°γƒ©γƒ•δΈŠγ«ζ–°γ—γ„γƒŽγƒΌγƒ‰γ‚’θΏ½εŠ " - -# EdgePencil -msgid "EdgePencil.name" -msgstr "θΎΊγγƒšγƒ³γ‚·γƒ«" - -msgid "EdgePencil.description" -msgstr "γΎγšγ‚½γƒΌγ‚ΉγδΈŠζ¬‘γ«γ‚ΏγƒΌγ‚²γƒƒγƒˆγδΈŠγ§γ‚―γƒͺγƒƒγ‚―γ—γ¦ζ–°θ¦γƒŽγƒΌγƒ‰γ‚’θΏ½εŠ " - -msgid "EdgePencil.status1" -msgstr "γ‚½γƒΌγ‚ΉγƒŽγƒΌγƒ‰γ‚’ιΈζŠž" - -msgid "EdgePencil.status2" -msgstr "γ‚ΏγƒΌγ‚²γƒƒγƒˆγƒŽγƒΌγƒ‰γ‚’ιΈζŠž" - -# ShortestPath -msgid "ShortestPath.name" -msgstr "ζœ€ηŸ­η΅Œθ·―" - -msgid "ShortestPath.description" -msgstr "γ‚―γƒͺγƒƒγ‚―γ—γŸγƒŽγƒΌγƒ‰ι–“γ«γ‚γ‚Œγ°γ€ζœ€ηŸ­γƒ‘γ‚Ήγ‚’θ‘¨η€Ί" - -msgid "ShortestPath.status1" -msgstr "γ‚½γƒΌγ‚ΉγƒŽγƒΌγƒ‰γ‚’ιΈζŠž" - -msgid "ShortestPath.status2" -msgstr "γ‚ΏγƒΌγ‚²γƒƒγƒˆγƒŽγƒΌγƒ‰γ‚’ιΈζŠž" - -msgid "ShortestPath.result" -msgstr "{0}ι ιš”γƒ‘γ‚ΉγŒθ¦‹γ€γ‹γ‚ŠγΎγ—γŸ" - -msgid "ShortestPath.noresult" -msgstr "γ“γ‚Œγ‚‰οΌ’γ€γγƒŽγƒΌγƒ‰γ«γ―γƒ‘γ‚ΉγŒε­˜εœ¨γ—γΎγ›γ‚“γ€‚" - -# HeatMap -msgid "HeatMap.name" -msgstr "γƒ’γƒΌγƒˆγƒžγƒƒγƒ—" - -msgid "HeatMap.description" -msgstr "γƒŽγƒΌγƒ‰θΏ‘ε‚γθ‰²γζΏƒγ•γ‚’θ¨­εšγ™γ‚‹γ€θ·ι›’(θΎΊγι‡γΏ)γ«γ‚ˆγ‚‹γ€‚" - -msgid "HeatMap.status.maxdistance" -msgstr "ζœ€ε€§θ·ι›’γ― " - -# Edit -msgid "Edit.name" -msgstr "編集" - -msgid "Edit.description" -msgstr "γƒŽγƒΌγƒ‰γε±žζ€§γη·¨ι›†" diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/org-gephi-tools-plugin.pot b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/org-gephi-tools-plugin.pot deleted file mode 100644 index a92aea5def..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/org-gephi-tools-plugin.pot +++ /dev/null @@ -1,112 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Standard tools implementations" - -# Painter -msgid "Painter.name" -msgstr "Painter" - -msgid "Painter.description" -msgstr "Color nodes by pressing mouse left button" - -# Sizer -msgid "Sizer.name" -msgstr "Sizer" - -msgid "Sizer.description" -msgstr "Size nodes by pressing mouse left button and dragging up or down" - -# Brush -msgid "Brush.name" -msgstr "Brush" - -msgid "Brush.description" -msgstr "Color nodes and its nearest neighbour by pressing mouse left button" - -msgid "DiffusionMethod.None" -msgstr "None" - -msgid "DiffusionMethod.Neighbors" -msgstr "Neighbors" - -msgid "DiffusionMethod.NeighborsOfNeighbors" -msgstr "Neighbors of Neighbors" - -msgid "DiffusionMethod.Predecessors" -msgstr "Predecessors" - -msgid "DiffusionMethod.Successors" -msgstr "Successors" - -# NodePencil -msgid "NodePencil.name" -msgstr "Node Pencil" - -msgid "NodePencil.description" -msgstr "Add new node on the graph where mouse is clicked" - -# EdgePencil -msgid "EdgePencil.name" -msgstr "Edge Pencil" - -msgid "EdgePencil.description" -msgstr "Add new edge by clicking on source and then target" - -msgid "EdgePencil.status1" -msgstr "Select a source node" - -msgid "EdgePencil.status2" -msgstr "Select a target node" - -# ShortestPath -msgid "ShortestPath.name" -msgstr "Shortest Path" - -msgid "ShortestPath.description" -msgstr "Display the shortest path if exist between two clicked nodes" - -msgid "ShortestPath.status1" -msgstr "Select a source node" - -msgid "ShortestPath.status2" -msgstr "Select a target node" - -msgid "ShortestPath.result" -msgstr "A {0} distant path has been found" - -msgid "ShortestPath.noresult" -msgstr "No path exist between these two nodes" - -# HeatMap -msgid "HeatMap.name" -msgstr "Heat Map" - -msgid "HeatMap.description" -msgstr "" -"Set color intensity on a node neighborhood, by the distance (edge weight)" - -msgid "HeatMap.status.maxdistance" -msgstr "Max distance is " - -# Edit -msgid "Edit.name" -msgstr "Edit" - -msgid "Edit.description" -msgstr "Edit node attributes" diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/pt_BR.po b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/pt_BR.po deleted file mode 100644 index ba053ff79c..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/pt_BR.po +++ /dev/null @@ -1,114 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 14:12+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ImplementaΓ§Γ΅es das ferramentas padrΓ£o" - -# Painter -msgid "Painter.name" -msgstr "Pincel" - -msgid "Painter.description" -msgstr "Colorir os nΓ³s pressionando o botΓ£o esquerdo do mouse" - -# Sizer -msgid "Sizer.name" -msgstr "Dimensionador" - -msgid "Sizer.description" -msgstr "Alterar o tamanho dos nΓ³s pressionando o botΓ£o esquerdo do mouse e arrastando para cima ou para baixo" - -# Brush -msgid "Brush.name" -msgstr "Tipo de pincel" - -msgid "Brush.description" -msgstr "Colorir os nΓ³s e seus vizinhos mais prΓ³ximos pressionando o botΓ£o esquerdo do mouse" - -msgid "DiffusionMethod.None" -msgstr "Nenhum" - -msgid "DiffusionMethod.Neighbors" -msgstr "Vizinhos" - -msgid "DiffusionMethod.NeighborsOfNeighbors" -msgstr "Vizinhos dos vizinhos" - -msgid "DiffusionMethod.Predecessors" -msgstr "Antecessores" - -msgid "DiffusionMethod.Successors" -msgstr "Sucessores" - -# NodePencil -msgid "NodePencil.name" -msgstr "LΓ‘pis de nΓ³" - -msgid "NodePencil.description" -msgstr "Adicionar um novo nΓ³ ao grafo no lugar onde o mouse for clicado" - -# EdgePencil -msgid "EdgePencil.name" -msgstr "LΓ‘pis de aresta" - -msgid "EdgePencil.description" -msgstr "Adicionar uma nova aresta clicando o nΓ³ origem e depois o nΓ³ destino" - -msgid "EdgePencil.status1" -msgstr "Selecione um nΓ³ origem" - -msgid "EdgePencil.status2" -msgstr "Selecione um nΓ³ destino" - -# ShortestPath -msgid "ShortestPath.name" -msgstr "Menor caminho" - -msgid "ShortestPath.description" -msgstr "Exibir o caminho mais curto entre os dois nodos clicados, caso exista" - -msgid "ShortestPath.status1" -msgstr "Selecione um nΓ³ origem" - -msgid "ShortestPath.status2" -msgstr "Selecione um nΓ³ destino" - -msgid "ShortestPath.result" -msgstr "Um caminho de distΓ’ncia {0} foi encontrado" - -msgid "ShortestPath.noresult" -msgstr "NΓ£o existe nenhum caminho entre esses dois nΓ³s" - -# HeatMap -msgid "HeatMap.name" -msgstr "Mapa de calor" - -msgid "HeatMap.description" -msgstr "Estabelecer a intensidade de cor dos vizinhos de um nΓ³ mediante a distΓ’ncia (peso da aresta)" - -msgid "HeatMap.status.maxdistance" -msgstr "A distΓ’ncia mΓ‘xima Γ© " - -# Edit -msgid "Edit.name" -msgstr "Editar" - -msgid "Edit.description" -msgstr "Editar atributos do nΓ³" diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/resources/brush.png b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/resources/brush.png deleted file mode 100644 index 6601f53c3e..0000000000 Binary files a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/resources/brush.png and /dev/null differ diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/resources/edgepencil.png b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/resources/edgepencil.png deleted file mode 100644 index b54b5de88d..0000000000 Binary files a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/resources/edgepencil.png and /dev/null differ diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/resources/heatmap.png b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/resources/heatmap.png deleted file mode 100644 index de126d4274..0000000000 Binary files a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/resources/heatmap.png and /dev/null differ diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/resources/nodepencil.png b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/resources/nodepencil.png deleted file mode 100644 index b54b5de88d..0000000000 Binary files a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/resources/nodepencil.png and /dev/null differ diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/resources/painter.png b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/resources/painter.png deleted file mode 100644 index e6ca2d1433..0000000000 Binary files a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/resources/painter.png and /dev/null differ diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/resources/shortestpath.png b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/resources/shortestpath.png deleted file mode 100644 index 0c9e0adfb5..0000000000 Binary files a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/resources/shortestpath.png and /dev/null differ diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/resources/sizer.png b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/resources/sizer.png deleted file mode 100644 index 477d70b502..0000000000 Binary files a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/resources/sizer.png and /dev/null differ diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/ru.po b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/ru.po deleted file mode 100644 index ad535a6f29..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/ru.po +++ /dev/null @@ -1,114 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 15:39+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Бтандартная рСализация инструмСнтов" - -# Painter -msgid "Painter.name" -msgstr "Π—Π°Π»ΠΈΠ²ΠΊΠ°" - -msgid "Painter.description" -msgstr "Для Ρ€Π°ΡΠΊΡ€Π°ΡˆΠΈΠ²Π°Π½ΠΈΡ ΡƒΠ·Π»ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π»Π΅Π²Ρ‹ΠΉ ΠΊΠ»ΠΈΠΊ" - -# Sizer -msgid "Sizer.name" -msgstr "Π Π°Π·ΠΌΠ΅Ρ€" - -msgid "Sizer.description" -msgstr "Для измСнСния Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΡƒΠ·Π»ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π»Π΅Π²Ρ‹ΠΉ ΠΊΠ»ΠΈΠΊ + Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅ Π΄Π²ΠΈΠΆΠ΅Π½ΠΈΠ΅ ΠΌΡ‹ΡˆΠΈ" - -# Brush -msgid "Brush.name" -msgstr "ΠšΠΈΡΡ‚ΡŒ" - -msgid "Brush.description" -msgstr "Для Ρ€Π°ΡΠΊΡ€Π°ΡˆΠΈΠ²Π°Π½ΠΈΡ ΡƒΠ·Π»ΠΎΠ² ΠΈ ΠΈΡ… Π±Π»ΠΈΠΆΠ°ΠΉΡˆΠΈΡ… сосСдСй ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π»Π΅Π²Ρ‹ΠΉ ΠΊΠ»ΠΈΠΊ" - -msgid "DiffusionMethod.None" -msgstr "Волько сам ΡƒΠ·Π΅Π»" - -msgid "DiffusionMethod.Neighbors" -msgstr "Π”ΠΎ сосСдСй" - -msgid "DiffusionMethod.NeighborsOfNeighbors" -msgstr "Π”ΠΎ сосСдСй сосСдСй" - -msgid "DiffusionMethod.Predecessors" -msgstr "На ΡƒΠ·Π»Ρ‹-Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΉ" - -msgid "DiffusionMethod.Successors" -msgstr "На ΡƒΠ·Π»Ρ‹-ΠΏΠΎΡ‚ΠΎΠΌΠΊΠΈ" - -# NodePencil -msgid "NodePencil.name" -msgstr "ΠšΠ°Ρ€Π°Π½Π΄Π°Ρˆ для рисования ΡƒΠ·Π»ΠΎΠ²" - -msgid "NodePencil.description" -msgstr "Для создания Π½ΠΎΠ²Ρ‹Ρ… ΡƒΠ·Π»ΠΎΠ² ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ Π»Π΅Π²Ρ‹ΠΉ ΠΊΠ»ΠΈΠΊ" - -# EdgePencil -msgid "EdgePencil.name" -msgstr "ΠšΠ°Ρ€Π°Π½Π΄Π°Ρˆ для рисования Ρ€Ρ‘Π±Π΅Ρ€" - -msgid "EdgePencil.description" -msgstr "Для создания Π½ΠΎΠ²Ρ‹Ρ… Ρ€Ρ‘Π±Π΅Ρ€ ΠΊΠ»ΠΈΠΊΠ½ΠΈΡ‚Π΅ сначала Π½Π° источник, Π·Π°Ρ‚Π΅ΠΌ Π½Π° ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ" - -msgid "EdgePencil.status1" -msgstr "Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΡƒΠ·Π΅Π»-источник" - -msgid "EdgePencil.status2" -msgstr "Π’Ρ‹Π±Π΅Ρ€Π΅Ρ‚Π΅ ΡƒΠ·Π΅Π» ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ" - -# ShortestPath -msgid "ShortestPath.name" -msgstr "ΠšΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠΈΠΉ ΠΏΡƒΡ‚ΡŒ" - -msgid "ShortestPath.description" -msgstr "Для отобраТСния ΠΊΡ€Π°Ρ‚Ρ‡Π°ΠΉΡˆΠ΅Π³ΠΎ ΠΏΡƒΡ‚ΠΈ ΠΌΠ΅ΠΆΠ΄Ρƒ двумя ΡƒΠ·Π»Π°ΠΌΠΈ (Ссли ΠΎΠ½ сущСствуСт) ΠΊΠ»ΠΈΠΊΠ½ΠΈΡ‚Π΅ Π½Π° Π΄Π²Π° ΡƒΠ·Π»Π°." - -msgid "ShortestPath.status1" -msgstr "Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΡƒΠ·Π΅Π»-источник" - -msgid "ShortestPath.status2" -msgstr "Π’Ρ‹Π±Π΅Ρ€Π΅Ρ‚Π΅ ΡƒΠ·Π΅Π» ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚Π΅Π»ΡŒ" - -msgid "ShortestPath.result" -msgstr "НайдСн ΠΏΡƒΡ‚ΡŒ ΠΈΠ· {0} Ρ€Π΅Π±Ρ‘Ρ€" - -msgid "ShortestPath.noresult" -msgstr "ΠœΠ΅ΠΆΠ΄Ρƒ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹ΠΌΠΈ ΡƒΠ·Π»Π°ΠΌΠΈ ΠΏΡƒΡ‚ΡŒ Π½Π΅ Π½Π°ΠΉΠ΄Π΅Π½" - -# HeatMap -msgid "HeatMap.name" -msgstr "ВСпловая ΠΊΠ°Ρ€Ρ‚Π°" - -msgid "HeatMap.description" -msgstr "Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ для Ρ€Π°ΡΠΊΡ€Π°ΡˆΠΈΠ²Π°Π½ΠΈΡ ΡƒΠ·Π»ΠΎΠ² ΠΏΠΎ Π³Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚Ρƒ ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ удалСния ΠΎΡ‚ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ³ΠΎ ΡƒΠ·Π»Π° (с ΡƒΡ‡Ρ‘Ρ‚ΠΎΠΌ вСса Ρ€Π΅Π±Π΅Ρ€ ΠΊΠ°ΠΊ расстояния)" - -msgid "HeatMap.status.maxdistance" -msgstr "Максимальная дистанция " - -# Edit -msgid "Edit.name" -msgstr "Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅" - -msgid "Edit.description" -msgstr "Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ для рСдактирования Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚ΠΎΠ² ΡƒΠ·Π»Π°" diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/zh_CN.po b/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/zh_CN.po deleted file mode 100644 index 8ce45e6b61..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/tools/plugin/zh_CN.po +++ /dev/null @@ -1,113 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:06+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "标准ε·₯ε…·εžηް" - -# Painter -msgid "Painter.name" -msgstr "着色" - -msgid "Painter.description" -msgstr "ζŒ‰ιΌ ζ ‡ε·¦ι”η€θ‰²θŠ‚η‚Ή" - -# Sizer -msgid "Sizer.name" -msgstr "ζ”Ήε˜ε€§ε°" - -msgid "Sizer.description" -msgstr "ζŒ‰ιΌ ζ ‡ε·¦ι”εΉΆδΈŠδΈ‹ζ‹–εŠ¨ζ”Ήε˜θŠ‚η‚Ήε€§ε°" - -# Brush -msgid "Brush.name" -msgstr "格式刷" - -msgid "Brush.description" -msgstr "ζŒ‰ιΌ ζ ‡ε·¦ι”η€θ‰²θŠ‚η‚ΉεŠε…Άζœ€θΏ‘ι‚»" - -msgid "DiffusionMethod.None" -msgstr "ζ²‘ζœ‰" - -msgid "DiffusionMethod.Neighbors" -msgstr "ι‚»ε±…" - -msgid "DiffusionMethod.NeighborsOfNeighbors" -msgstr "ι‚»ε±…ηš„ι‚»ε±…" - -msgid "DiffusionMethod.Predecessors" -msgstr "前者" - -msgid "DiffusionMethod.Successors" -msgstr "εŽθ€…" - -# NodePencil -msgid "NodePencil.name" -msgstr "θŠ‚η‚Ήι“…η¬”ε·₯ε…·" - -msgid "NodePencil.description" -msgstr "εœ¨ιΌ ζ ‡η‚Ήε‡»ε€„ζ·»εŠ δΈ€δΈͺζ–°θŠ‚η‚Ή" - -# EdgePencil -msgid "EdgePencil.name" -msgstr "边铅笔ε·₯ε…·" - -msgid "EdgePencil.description" -msgstr "η‚Ήε‡»ζΊθŠ‚η‚Ήη„ΆεŽη›ζ ‡θŠ‚η‚Ήζ·»εŠ ζ–°θΎΉ" - -msgid "EdgePencil.status1" -msgstr "选择一δΈͺζΊθŠ‚η‚Ή" - -msgid "EdgePencil.status2" -msgstr "选择一δΈͺη›ζ ‡θŠ‚η‚Ή" - -# ShortestPath -msgid "ShortestPath.name" -msgstr "ζœ€ηŸ­θ·―εΎ„" - -msgid "ShortestPath.description" -msgstr "ζ˜Ύη€ΊδΈ€η‚Ήι€‰θŠ‚η‚ΉδΉ‹ι—΄ε­˜εœ¨ηš„ζœ€ηŸ­θ·―εΎ„" - -msgid "ShortestPath.status1" -msgstr "选择一δΈͺζΊθŠ‚η‚Ή" - -msgid "ShortestPath.status2" -msgstr "选择一δΈͺη›ζ ‡θŠ‚η‚Ή" - -msgid "ShortestPath.result" -msgstr "ε‘ηŽ°δΈ€{0}ι•Ώθ·―εΎ„" - -msgid "ShortestPath.noresult" -msgstr "ζ­€δΈ€θŠ‚η‚Ήι—΄δΈε­˜εœ¨θ·―εΎ„" - -# HeatMap -msgid "HeatMap.name" -msgstr "ηƒ­ε›Ύ" - -msgid "HeatMap.description" -msgstr "ζ Ήζθ·η¦»(ε³θΎΉηš„ζƒ)θΎεšδΈ€δΈͺη»“η‚Ήι‚»ε±…ηš„ι’œθ‰²ζ·±εΊ¦" - -msgid "HeatMap.status.maxdistance" -msgstr "ζœ€ε€§θ·η¦»ζ˜―" - -# Edit -msgid "Edit.name" -msgstr "ηΌ–θΎ‘" - -msgid "Edit.description" -msgstr "ηΌ–θΎ‘θŠ‚η‚Ήε±žζ€§" diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_ar.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_ca.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_ca.properties new file mode 100644 index 0000000000..42d9ab1fc7 --- /dev/null +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_ca.properties @@ -0,0 +1,31 @@ +EdgePencilPanel.colorButton.text= +EdgePencilPanel.labelWeight.text=Pes: +EdgePencilPanel.statusLabel.text= +EdgePencilPanel.labelColor.text=Color: +BrushPanel.labelColor.text=Color: +BrushPanel.labelIntensity.text=Intensitat +BrushPanel.jLabel1.text=% +BrushPanel.labelDiffusion.text=Difusiσ: +BrushPanel.colorButton.text= +NodePencilPanel.labelColor.text=Color: +NodePencilPanel.colorButton.text= +NodePencilPanel.statusLabel.text=Afegeix un node al graf +NodePencilPanel.labelSize.text=Mida: +ShortestPathPanel.statusLabel.text= +ShortestPathPanel.resultLabel.text= +ShortestPathPanel.labelColor.text=Color: +ShortestPathPanel.colorButton.text= +HeatMapPanel.statusLabel.text=Clica un node +HeatMapPanel.labelMode.text=Mode: +HeatMapPanel.labelGradient.text=Gradient: +HeatMapPanel.labelPalette.text=Paleta: +HeatMapPanel.dontPaintUnreachableCheckbox.text=No pintis l'irrefinable +HeatMapPanel.invertPalette.text=Inverteix la paleta +PainterPanel.labelColor.text=Color: +PainterPanel.colorButton.text= +SizerPanel.jLabel1.text=Selecciona els nodes i arrossega verticalment el ratolν +SizerPanel.labelSize.text=Mida: +SizerPanel.sizeLabel.text=NaN +EdgePencilPanel.labelType.text=Tipus +EdgePencilPanel.type.directed=Dirigit +EdgePencilPanel.type.undirected=No dirigit diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_cs.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_cs.properties index d6af1a4640..e21fbbf77d 100644 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_cs.properties +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_cs.properties @@ -1,53 +1,31 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2011-2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-17 06\:47+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -EdgePencilPanel.labelWeight.text=V\u00e1ha\: - -EdgePencilPanel.labelColor.text=Barva\: - -BrushPanel.labelColor.text=Barva\: - -BrushPanel.labelIntensity.text=Intenzita\: - -BrushPanel.jLabel1.text=% - -BrushPanel.labelDiffusion.text=Rozptyl\: - -NodePencilPanel.labelColor.text=Barva\: - -NodePencilPanel.statusLabel.text=P\u0159idat uzel do grafu - -NodePencilPanel.labelSize.text=Velikost\: - -ShortestPathPanel.labelColor.text=Barva\: - -HeatMapPanel.statusLabel.text=Klikn\u011bte na uzel - -HeatMapPanel.labelMode.text=Re\u017eim\: - -HeatMapPanel.labelGradient.text=P\u0159echod\: - -HeatMapPanel.labelPalette.text=Paleta\: - -HeatMapPanel.dontPaintUnreachableCheckbox.text=Nevybarvovat nedosa\u017eiteln\u00e9 - -HeatMapPanel.invertPalette.text=Obr\u00e1tit paletu - -PainterPanel.labelColor.text=Barva\: - -SizerPanel.jLabel1.text=Klikn\u011bte na uzly a t\u00e1hn\u011bte my\u0161\u00ed svisle - -SizerPanel.labelSize.text=Velikost\: - -SizerPanel.sizeLabel.text=NaN - -EdgePencilPanel.labelType.text=Typ\: - -EdgePencilPanel.type.directed=\u0158\u00edzen\u00fd - -EdgePencilPanel.type.undirected=Ne\u0159\u00edzen\u00fd +EdgePencilPanel.colorButton.text= +EdgePencilPanel.labelWeight.text=Vαha: +EdgePencilPanel.statusLabel.text= +EdgePencilPanel.labelColor.text=Barva: +BrushPanel.labelColor.text=Barva: +BrushPanel.labelIntensity.text=Intenzita: +BrushPanel.jLabel1.text=% +BrushPanel.labelDiffusion.text=Rozptyl: +BrushPanel.colorButton.text= +NodePencilPanel.labelColor.text=Barva: +NodePencilPanel.colorButton.text= +NodePencilPanel.statusLabel.text=P\u0159idat uzel do grafu +NodePencilPanel.labelSize.text=Velikost: +ShortestPathPanel.statusLabel.text= +ShortestPathPanel.resultLabel.text= +ShortestPathPanel.labelColor.text=Barva: +ShortestPathPanel.colorButton.text= +HeatMapPanel.statusLabel.text=Klikn\u011bte na uzel +HeatMapPanel.labelMode.text=Re\u017eim: +HeatMapPanel.labelGradient.text=P\u0159echod: +HeatMapPanel.labelPalette.text=Paleta: +HeatMapPanel.dontPaintUnreachableCheckbox.text=Nevybarvovat nedosa\u017eitelnι +HeatMapPanel.invertPalette.text=Obrαtit paletu +PainterPanel.labelColor.text=Barva: +PainterPanel.colorButton.text= +SizerPanel.jLabel1.text=Klikn\u011bte na uzly a tαhn\u011bte my\u0161ν svisle +SizerPanel.labelSize.text=Velikost: +SizerPanel.sizeLabel.text=NaN +EdgePencilPanel.labelType.text=Typ: +EdgePencilPanel.type.directed=\u0158νzenύ +EdgePencilPanel.type.undirected=Ne\u0159νzenύ diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_de.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_de.properties new file mode 100644 index 0000000000..cbcd23f6dc --- /dev/null +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_de.properties @@ -0,0 +1,31 @@ +EdgePencilPanel.colorButton.text= +EdgePencilPanel.labelWeight.text=Gewicht: +EdgePencilPanel.statusLabel.text= +EdgePencilPanel.labelColor.text=Farbe: +BrushPanel.labelColor.text=Farbe: +BrushPanel.labelIntensity.text=Intensitδt: +BrushPanel.jLabel1.text=% +BrushPanel.labelDiffusion.text=Streuung: +BrushPanel.colorButton.text= +NodePencilPanel.labelColor.text=Farbe: +NodePencilPanel.colorButton.text= +NodePencilPanel.statusLabel.text=Knoten zu Graph zufόgen +NodePencilPanel.labelSize.text=Grφίe: +ShortestPathPanel.statusLabel.text= +ShortestPathPanel.resultLabel.text= +ShortestPathPanel.labelColor.text=Farbe: +ShortestPathPanel.colorButton.text= +HeatMapPanel.statusLabel.text=Klicken Sie auf einen Knoten +HeatMapPanel.labelMode.text=Modus: +HeatMapPanel.labelGradient.text=Gradient: +HeatMapPanel.labelPalette.text=Palette: +HeatMapPanel.dontPaintUnreachableCheckbox.text=Unerreichbare nicht zeichnen +HeatMapPanel.invertPalette.text=Palette invertieren +PainterPanel.labelColor.text=Farbe: +PainterPanel.colorButton.text= +SizerPanel.jLabel1.text=Auf Knoten drόcken und die Maus vertikal ziehen +SizerPanel.labelSize.text=Grφίe: +SizerPanel.sizeLabel.text=NaN +EdgePencilPanel.labelType.text=Type: +EdgePencilPanel.type.directed=Gerichtet +EdgePencilPanel.type.undirected=Ungerichtet diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_es.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_es.properties index ac863e0703..fa8f1d8916 100644 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_es.properties +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_es.properties @@ -1,54 +1,31 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:29+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -EdgePencilPanel.labelWeight.text=Peso\: - -EdgePencilPanel.labelColor.text=Color\: - -BrushPanel.labelColor.text=Color\: - -BrushPanel.labelIntensity.text=Intensidad\: - -BrushPanel.jLabel1.text=% - -BrushPanel.labelDiffusion.text=Difusi\u00f3n\: - -NodePencilPanel.labelColor.text=Color\: - -NodePencilPanel.statusLabel.text=A\u00f1adir nodo al grafo - -NodePencilPanel.labelSize.text=Tama\u00f1o\: - -ShortestPathPanel.labelColor.text=Color\: - -HeatMapPanel.statusLabel.text=Pulsa en un nodo - -HeatMapPanel.labelMode.text=Modo\: - -HeatMapPanel.labelGradient.text=Gradiente\: - -HeatMapPanel.labelPalette.text=Paleta\: - -HeatMapPanel.dontPaintUnreachableCheckbox.text=No pintar nodos inalcanzables - -HeatMapPanel.invertPalette.text=Invertir paleta - -PainterPanel.labelColor.text=Color - -SizerPanel.jLabel1.text=Presiona en los nodos y arrastra el rat\u00f3n verticalmente - -SizerPanel.labelSize.text=Tama\u00f1o\: - -SizerPanel.sizeLabel.text=NaN - -EdgePencilPanel.labelType.text=Tipo\: - -EdgePencilPanel.type.directed=Dirigida - -EdgePencilPanel.type.undirected=No dirigida +EdgePencilPanel.colorButton.text= +EdgePencilPanel.labelWeight.text=Peso: +EdgePencilPanel.statusLabel.text= +EdgePencilPanel.labelColor.text=Color: +BrushPanel.labelColor.text=Color: +BrushPanel.labelIntensity.text=Intensidad: +BrushPanel.jLabel1.text=% +BrushPanel.labelDiffusion.text=Difusiσn: +BrushPanel.colorButton.text= +NodePencilPanel.labelColor.text=Color: +NodePencilPanel.colorButton.text= +NodePencilPanel.statusLabel.text=Aρadir nodo al grafo +NodePencilPanel.labelSize.text=Tamaρo: +ShortestPathPanel.statusLabel.text= +ShortestPathPanel.resultLabel.text= +ShortestPathPanel.labelColor.text=Color: +ShortestPathPanel.colorButton.text= +HeatMapPanel.statusLabel.text=Pulsa en un nodo +HeatMapPanel.labelMode.text=Modo: +HeatMapPanel.labelGradient.text=Gradiente: +HeatMapPanel.labelPalette.text=Paleta: +HeatMapPanel.dontPaintUnreachableCheckbox.text=No pintar nodos inalcanzables +HeatMapPanel.invertPalette.text=Invertir paleta +PainterPanel.labelColor.text=Color +PainterPanel.colorButton.text= +SizerPanel.jLabel1.text=Presiona en los nodos y arrastra el ratσn verticalmente +SizerPanel.labelSize.text=Tamaρo: +SizerPanel.sizeLabel.text=NaN +EdgePencilPanel.labelType.text=Tipo: +EdgePencilPanel.type.directed=Dirigida +EdgePencilPanel.type.undirected=No dirigida diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_fr.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_fr.properties index 395940998c..f5f2f6be5c 100644 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_fr.properties +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_fr.properties @@ -1,53 +1,31 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:15+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -EdgePencilPanel.labelWeight.text=Poids \: - -EdgePencilPanel.labelColor.text=Couleur \: - -BrushPanel.labelColor.text=Couleur \: - -BrushPanel.labelIntensity.text=Intensit\u00e9 \: - -BrushPanel.jLabel1.text=% - -BrushPanel.labelDiffusion.text=Diffusion \: - -NodePencilPanel.labelColor.text=Couleur \: - -NodePencilPanel.statusLabel.text=Ajout d'un noeud au graphe - -NodePencilPanel.labelSize.text=Taille \: - -ShortestPathPanel.labelColor.text=Couleur \: - -HeatMapPanel.statusLabel.text=Cliquez sur un noeud - -HeatMapPanel.labelMode.text=Mode \: - -HeatMapPanel.labelGradient.text=D\u00e9grad\u00e9 \: - -HeatMapPanel.labelPalette.text=Palette \: - -HeatMapPanel.dontPaintUnreachableCheckbox.text=Ne pas peindre les noeuds inatteignables - -HeatMapPanel.invertPalette.text=Inverser la palette - -PainterPanel.labelColor.text=Couleur \: - -SizerPanel.jLabel1.text=Maintenez le clic sur un noeud et d\u00e9placez verticalement la souris - -SizerPanel.labelSize.text=Taille \: - -SizerPanel.sizeLabel.text=NaN - -!EdgePencilPanel.labelType.text= - -!EdgePencilPanel.type.directed= - -!EdgePencilPanel.type.undirected= +EdgePencilPanel.colorButton.text= +EdgePencilPanel.labelWeight.text=Poids : +EdgePencilPanel.statusLabel.text= +EdgePencilPanel.labelColor.text=Couleur : +BrushPanel.labelColor.text=Couleur : +BrushPanel.labelIntensity.text=Intensitι : +BrushPanel.jLabel1.text=% +BrushPanel.labelDiffusion.text=Diffusion : +BrushPanel.colorButton.text= +NodePencilPanel.labelColor.text=Couleur : +NodePencilPanel.colorButton.text= +NodePencilPanel.statusLabel.text=Ajout d'un noeud au graphe +NodePencilPanel.labelSize.text=Taille : +ShortestPathPanel.statusLabel.text= +ShortestPathPanel.resultLabel.text= +ShortestPathPanel.labelColor.text=Couleur : +ShortestPathPanel.colorButton.text= +HeatMapPanel.statusLabel.text=Cliquez sur un noeud +HeatMapPanel.labelMode.text=Mode : +HeatMapPanel.labelGradient.text=Dιgradι : +HeatMapPanel.labelPalette.text=Palette : +HeatMapPanel.dontPaintUnreachableCheckbox.text=Ne pas peindre les noeuds inatteignables +HeatMapPanel.invertPalette.text=Inverser la palette +PainterPanel.labelColor.text=Couleur : +PainterPanel.colorButton.text= +SizerPanel.jLabel1.text=Maintenez le clic sur un noeud et dιplacez verticalement la souris +SizerPanel.labelSize.text=Taille : +SizerPanel.sizeLabel.text=NaN +EdgePencilPanel.labelType.text=Type de colonne : +EdgePencilPanel.type.directed=Dirigι +EdgePencilPanel.type.undirected=Non dirigι diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_he.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_he.properties new file mode 100644 index 0000000000..81e26c120b --- /dev/null +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_he.properties @@ -0,0 +1,31 @@ +EdgePencilPanel.colorButton.text= +EdgePencilPanel.labelWeight.text=Weight: +EdgePencilPanel.statusLabel.text= +EdgePencilPanel.labelColor.text=\u05e6\u05d1\u05e2: +BrushPanel.labelColor.text=\u05e6\u05d1\u05e2: +BrushPanel.labelIntensity.text=Intensity: +BrushPanel.jLabel1.text=% +BrushPanel.labelDiffusion.text=Diffusion: +BrushPanel.colorButton.text= +NodePencilPanel.labelColor.text=\u05e6\u05d1\u05e2: +NodePencilPanel.colorButton.text= +NodePencilPanel.statusLabel.text=Add node to the graph +NodePencilPanel.labelSize.text=Size: +ShortestPathPanel.statusLabel.text= +ShortestPathPanel.resultLabel.text= +ShortestPathPanel.labelColor.text=\u05e6\u05d1\u05e2: +ShortestPathPanel.colorButton.text= +HeatMapPanel.statusLabel.text=Click on a node +HeatMapPanel.labelMode.text=Mode: +HeatMapPanel.labelGradient.text=Gradient: +HeatMapPanel.labelPalette.text=Palette: +HeatMapPanel.dontPaintUnreachableCheckbox.text=Don't paint unreachable +HeatMapPanel.invertPalette.text=Invert Palette +PainterPanel.labelColor.text=\u05e6\u05d1\u05e2: +PainterPanel.colorButton.text= +SizerPanel.jLabel1.text=Press on nodes and drag vertically the mouse +SizerPanel.labelSize.text=Size: +SizerPanel.sizeLabel.text=NaN +EdgePencilPanel.labelType.text=\u05e1\u05d5\u05d2: +EdgePencilPanel.type.directed=Directed +EdgePencilPanel.type.undirected=Undirected diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_hu.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_hu.properties new file mode 100644 index 0000000000..79d297fd06 --- /dev/null +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_hu.properties @@ -0,0 +1,24 @@ + + +HeatMapPanel.invertPalette.text=Ford\u00EDtott paletta +EdgePencilPanel.type.undirected=Ir\u00E1ny\u00EDtatlan +HeatMapPanel.dontPaintUnreachableCheckbox.text=Ne fess el\u00E9rhetetlen\u00FCl +EdgePencilPanel.labelWeight.text=S\u00FAly: +NodePencilPanel.statusLabel.text=Adjon csom\u00F3pontot a grafikonhoz +PainterPanel.labelColor.text=Sz\u00EDn +BrushPanel.jLabel1.text=% +SizerPanel.labelSize.text=M\u00E9ret +EdgePencilPanel.labelColor.text=Sz\u00EDn +SizerPanel.jLabel1.text=Nyomja meg a csom\u00F3pontokat, \u00E9s h\u00FAzza f\u00FCgg\u0151legesen az egeret +BrushPanel.labelIntensity.text=Intenzit\u00E1s: +EdgePencilPanel.labelType.text=T\u00EDpus: +HeatMapPanel.statusLabel.text=Kattintson egy csom\u00F3pontra +ShortestPathPanel.labelColor.text=Sz\u00EDn +BrushPanel.labelColor.text=Sz\u00EDn +HeatMapPanel.labelPalette.text=Paletta: +BrushPanel.labelDiffusion.text=K\u00FCl\u00F6nbs\u00E9g: +EdgePencilPanel.type.directed=Ir\u00E1ny\u00EDtott +NodePencilPanel.labelColor.text=Sz\u00EDn +HeatMapPanel.labelMode.text=M\u00F3d: +NodePencilPanel.labelSize.text=M\u00E9ret: +SizerPanel.sizeLabel.text=NaN diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_it.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_it.properties new file mode 100644 index 0000000000..aa4fa11025 --- /dev/null +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_it.properties @@ -0,0 +1,31 @@ +EdgePencilPanel.colorButton.text= +EdgePencilPanel.labelWeight.text=Weight: +EdgePencilPanel.statusLabel.text= +EdgePencilPanel.labelColor.text=Color: +BrushPanel.labelColor.text=Color: +BrushPanel.labelIntensity.text=Intensity: +BrushPanel.jLabel1.text=% +BrushPanel.labelDiffusion.text=Diffusion: +BrushPanel.colorButton.text= +NodePencilPanel.labelColor.text=Color: +NodePencilPanel.colorButton.text= +NodePencilPanel.statusLabel.text=Add node to the graph +NodePencilPanel.labelSize.text=Size: +ShortestPathPanel.statusLabel.text= +ShortestPathPanel.resultLabel.text= +ShortestPathPanel.labelColor.text=Color: +ShortestPathPanel.colorButton.text= +HeatMapPanel.statusLabel.text=Click on a node +HeatMapPanel.labelMode.text=Mode: +HeatMapPanel.labelGradient.text=Gradient: +HeatMapPanel.labelPalette.text=Palette: +HeatMapPanel.dontPaintUnreachableCheckbox.text=Don't paint unreachable +HeatMapPanel.invertPalette.text=Invert Palette +PainterPanel.labelColor.text=Color: +PainterPanel.colorButton.text= +SizerPanel.jLabel1.text=Press on nodes and drag vertically the mouse +SizerPanel.labelSize.text=Size: +SizerPanel.sizeLabel.text=NaN +EdgePencilPanel.labelType.text=Type: +EdgePencilPanel.type.directed=Orientato +EdgePencilPanel.type.undirected=Non orientato diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_ja.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_ja.properties index 3c5ce16126..e985f3ebad 100644 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_ja.properties +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_ja.properties @@ -1,53 +1,31 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:15+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -EdgePencilPanel.labelWeight.text=\u91cd\u307f\: - -EdgePencilPanel.labelColor.text=\u8272\: - -BrushPanel.labelColor.text=\u8272\: - -BrushPanel.labelIntensity.text=\u5f37\u5ea6\: - -BrushPanel.jLabel1.text=% - -BrushPanel.labelDiffusion.text=\u62e1\u6563\: - -NodePencilPanel.labelColor.text=\u8272\: - -NodePencilPanel.statusLabel.text=\u30b0\u30e9\u30d5\u306b\u30ce\u30fc\u30c9\u3092\u8ffd\u52a0 - -NodePencilPanel.labelSize.text=\u5927\u304d\u3055\: - -ShortestPathPanel.labelColor.text=\u8272\: - -HeatMapPanel.statusLabel.text=\u30ce\u30fc\u30c9\u3092\u30af\u30ea\u30c3\u30af - -HeatMapPanel.labelMode.text=\u30e2\u30fc\u30c9\: - -HeatMapPanel.labelGradient.text=\u52fe\u914d\: - -HeatMapPanel.labelPalette.text=\u30d1\u30ec\u30c3\u30c8\: - -HeatMapPanel.dontPaintUnreachableCheckbox.text=\u5230\u9054\u4e0d\u80fd\u306e\u3082\u306e\u3092\u30da\u30a4\u30f3\u30c8\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044 - -HeatMapPanel.invertPalette.text=\u30d1\u30ec\u30c3\u30c8\u3092\u53cd\u8ee2 - -PainterPanel.labelColor.text=\u8272\: - -SizerPanel.jLabel1.text=\u30ce\u30fc\u30c9\u3092\u62bc\u3057\u3066\u3001\u30de\u30a6\u30b9\u3092\u4e0a\u4e0b\u306b\u30c9\u30e9\u30c3\u30b0\u3057\u3066\u4e0b\u3055\u3044\u3002 - -SizerPanel.labelSize.text=\u5927\u304d\u3055\: - -SizerPanel.sizeLabel.text=NaN - -!EdgePencilPanel.labelType.text= - -!EdgePencilPanel.type.directed= - -!EdgePencilPanel.type.undirected= +EdgePencilPanel.colorButton.text= +EdgePencilPanel.labelWeight.text=\u91cd\u307f: +EdgePencilPanel.statusLabel.text= +EdgePencilPanel.labelColor.text=\u8272: +BrushPanel.labelColor.text=\u8272: +BrushPanel.labelIntensity.text=\u5f37\u5ea6: +BrushPanel.jLabel1.text=% +BrushPanel.labelDiffusion.text=\u62e1\u6563: +BrushPanel.colorButton.text= +NodePencilPanel.labelColor.text=\u8272: +NodePencilPanel.colorButton.text= +NodePencilPanel.statusLabel.text=\u30b0\u30e9\u30d5\u306b\u30ce\u30fc\u30c9\u3092\u8ffd\u52a0 +NodePencilPanel.labelSize.text=\u5927\u304d\u3055: +ShortestPathPanel.statusLabel.text= +ShortestPathPanel.resultLabel.text= +ShortestPathPanel.labelColor.text=\u8272: +ShortestPathPanel.colorButton.text= +HeatMapPanel.statusLabel.text=\u30ce\u30fc\u30c9\u3092\u30af\u30ea\u30c3\u30af +HeatMapPanel.labelMode.text=\u30e2\u30fc\u30c9: +HeatMapPanel.labelGradient.text=\u52fe\u914d: +HeatMapPanel.labelPalette.text=\u30d1\u30ec\u30c3\u30c8: +HeatMapPanel.dontPaintUnreachableCheckbox.text=\u5230\u9054\u4e0d\u80fd\u306e\u3082\u306e\u3092\u30da\u30a4\u30f3\u30c8\u3057\u306a\u3044\u3067\u304f\u3060\u3055\u3044 +HeatMapPanel.invertPalette.text=\u30d1\u30ec\u30c3\u30c8\u3092\u53cd\u8ee2 +PainterPanel.labelColor.text=\u8272: +PainterPanel.colorButton.text= +SizerPanel.jLabel1.text=\u30ce\u30fc\u30c9\u3092\u62bc\u3057\u3066\u3001\u30de\u30a6\u30b9\u3092\u4e0a\u4e0b\u306b\u30c9\u30e9\u30c3\u30b0\u3057\u3066\u4e0b\u3055\u3044\u3002 +SizerPanel.labelSize.text=\u5927\u304d\u3055: +SizerPanel.sizeLabel.text=NaN +EdgePencilPanel.labelType.text=\u7a2e\u985e: +EdgePencilPanel.type.directed=\u6709\u5411 +EdgePencilPanel.type.undirected=\u7121\u5411 diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_ko.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_ko.properties new file mode 100644 index 0000000000..2669e42ffd --- /dev/null +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_ko.properties @@ -0,0 +1,25 @@ + + +BrushPanel.labelColor.text=\uC0C9\uC0C1: +EdgePencilPanel.labelWeight.text=\uAC00\uC911\uCE58: +EdgePencilPanel.labelColor.text=\uC0C9\uC0C1: +BrushPanel.labelIntensity.text=\uAC15\uB3C4: +BrushPanel.jLabel1.text=% +BrushPanel.labelDiffusion.text=\uD655\uC0B0: +NodePencilPanel.labelColor.text=\uC0C9\uC0C1: +NodePencilPanel.labelSize.text=\uD06C\uAE30: +ShortestPathPanel.labelColor.text=\uC0C9\uC0C1: +NodePencilPanel.statusLabel.text=\uADF8\uB798\uD504\uC5D0 \uB178\uB4DC\uB97C \uCD94\uAC00\uD558\uC138\uC694 +HeatMapPanel.labelMode.text=\uBAA8\uB4DC: +HeatMapPanel.labelGradient.text=\uACBD\uC0AC\uB3C4: +HeatMapPanel.labelPalette.text=\uD314\uB808\uD2B8: +SizerPanel.labelSize.text=\uD06C\uAE30: +SizerPanel.sizeLabel.text=NaN +EdgePencilPanel.labelType.text=\uC885\uB958: +EdgePencilPanel.type.directed=\uBC29\uD5A5\uC131 +HeatMapPanel.statusLabel.text=\uB178\uB4DC\uB97C \uC120\uD0DD\uD558\uC138\uC694 +HeatMapPanel.dontPaintUnreachableCheckbox.text=\uB3C4\uB2EC\uD560 \uC218 \uC5C6\uB294 \uB178\uB4DC\uC5D0\uB294 \uC0C9\uCE60 \uC548 \uD568 +HeatMapPanel.invertPalette.text=\uD314\uB808\uD2B8 \uB4A4\uC9D1\uAE30 +EdgePencilPanel.type.undirected=\uBB34\uBC29\uD5A5\uC131 +PainterPanel.labelColor.text=\uC0C9\uC0C1: +SizerPanel.jLabel1.text=\uB178\uB4DC\uB97C \uB204\uB978 \uCC44\uB85C \uB9C8\uC6B0\uC2A4\uB97C \uC704\uC544\uB798\uB85C \uB4DC\uB798\uADF8 \uD558\uC138\uC694 diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_nl.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_nl.properties new file mode 100644 index 0000000000..cedd1b3623 --- /dev/null +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_nl.properties @@ -0,0 +1,31 @@ +EdgePencilPanel.colorButton.text= +EdgePencilPanel.labelWeight.text=Weight: +EdgePencilPanel.statusLabel.text= +EdgePencilPanel.labelColor.text=Color: +BrushPanel.labelColor.text=Color: +BrushPanel.labelIntensity.text=Intensity: +BrushPanel.jLabel1.text=% +BrushPanel.labelDiffusion.text=Diffusion: +BrushPanel.colorButton.text= +NodePencilPanel.labelColor.text=Color: +NodePencilPanel.colorButton.text= +NodePencilPanel.statusLabel.text=Add node to the graph +NodePencilPanel.labelSize.text=Size: +ShortestPathPanel.statusLabel.text= +ShortestPathPanel.resultLabel.text= +ShortestPathPanel.labelColor.text=Color: +ShortestPathPanel.colorButton.text= +HeatMapPanel.statusLabel.text=Klik op een knoop +HeatMapPanel.labelMode.text=Mode: +HeatMapPanel.labelGradient.text=Gradient: +HeatMapPanel.labelPalette.text=Palette: +HeatMapPanel.dontPaintUnreachableCheckbox.text=Don't paint unreachable +HeatMapPanel.invertPalette.text=Invert Palette +PainterPanel.labelColor.text=Color: +PainterPanel.colorButton.text= +SizerPanel.jLabel1.text=Press on nodes and drag vertically the mouse +SizerPanel.labelSize.text=Size: +SizerPanel.sizeLabel.text=NaN +EdgePencilPanel.labelType.text=Type: +EdgePencilPanel.type.directed=Gericht +EdgePencilPanel.type.undirected=Ongericht diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_pt_BR.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_pt_BR.properties index facca24c2b..1e9b79b192 100644 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_pt_BR.properties +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_pt_BR.properties @@ -1,54 +1,31 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -# C\u00e9lio Faria Jr. , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-18 11\:16+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -EdgePencilPanel.labelWeight.text=Peso\: - -EdgePencilPanel.labelColor.text=Cor\: - -BrushPanel.labelColor.text=Cor\: - -BrushPanel.labelIntensity.text=Intensidade\: - -BrushPanel.jLabel1.text=% - -BrushPanel.labelDiffusion.text=Difus\u00e3o\: - -NodePencilPanel.labelColor.text=Cor\: - -NodePencilPanel.statusLabel.text=Adicionar n\u00f3 ao grafo - -NodePencilPanel.labelSize.text=Tamanho\: - -ShortestPathPanel.labelColor.text=Cor\: - -HeatMapPanel.statusLabel.text=Clique em um n\u00f3 - -HeatMapPanel.labelMode.text=Modo\: - -HeatMapPanel.labelGradient.text=Gradiente\: - -HeatMapPanel.labelPalette.text=Paleta\: - -HeatMapPanel.dontPaintUnreachableCheckbox.text=N\u00e3o desenhar n\u00f3s inalcan\u00e7\u00e1veis - -HeatMapPanel.invertPalette.text=Inverter paleta - -PainterPanel.labelColor.text=Cor\: - -SizerPanel.jLabel1.text=Clique sobre n\u00f3s e arraste o mouse verticalmente - -SizerPanel.labelSize.text=Tamanho\: - -SizerPanel.sizeLabel.text=NaN - -EdgePencilPanel.labelType.text=Tipo\: - -EdgePencilPanel.type.directed=Direcionada - -EdgePencilPanel.type.undirected=N\u00e3o direcionada +EdgePencilPanel.colorButton.text= +EdgePencilPanel.labelWeight.text=Peso: +EdgePencilPanel.statusLabel.text= +EdgePencilPanel.labelColor.text=Cor: +BrushPanel.labelColor.text=Cor: +BrushPanel.labelIntensity.text=Intensidade: +BrushPanel.jLabel1.text=% +BrushPanel.labelDiffusion.text=Difusγo: +BrushPanel.colorButton.text= +NodePencilPanel.labelColor.text=Cor: +NodePencilPanel.colorButton.text= +NodePencilPanel.statusLabel.text=Adicionar nσ ao grafo +NodePencilPanel.labelSize.text=Tamanho: +ShortestPathPanel.statusLabel.text= +ShortestPathPanel.resultLabel.text= +ShortestPathPanel.labelColor.text=Cor: +ShortestPathPanel.colorButton.text= +HeatMapPanel.statusLabel.text=Clique em um nσ +HeatMapPanel.labelMode.text=Modo: +HeatMapPanel.labelGradient.text=Gradiente: +HeatMapPanel.labelPalette.text=Paleta: +HeatMapPanel.dontPaintUnreachableCheckbox.text=Nγo desenhar nσs inalcanηαveis +HeatMapPanel.invertPalette.text=Inverter paleta +PainterPanel.labelColor.text=Cor: +PainterPanel.colorButton.text= +SizerPanel.jLabel1.text=Clique sobre nσs e arraste o mouse verticalmente +SizerPanel.labelSize.text=Tamanho: +SizerPanel.sizeLabel.text=NaN +EdgePencilPanel.labelType.text=Tipo: +EdgePencilPanel.type.directed=Direcionada +EdgePencilPanel.type.undirected=Nγo direcionada diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_ro.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_ro.properties new file mode 100644 index 0000000000..3aa92c5bae --- /dev/null +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_ro.properties @@ -0,0 +1,25 @@ + + +BrushPanel.labelColor.text=Culoare: +EdgePencilPanel.labelWeight.text=Pondere: +BrushPanel.labelIntensity.text=Intensitate: +BrushPanel.jLabel1.text=% +BrushPanel.labelDiffusion.text=Difuzie: +NodePencilPanel.labelColor.text=Culoare: +NodePencilPanel.statusLabel.text=Ad\u0103uga nod \u00EEn graf +NodePencilPanel.labelSize.text=Dimensiune: +ShortestPathPanel.labelColor.text=Culoare: +HeatMapPanel.statusLabel.text=D\u0103 click pe un nod +HeatMapPanel.labelMode.text=Mod: +HeatMapPanel.labelGradient.text=Gradient: +HeatMapPanel.labelPalette.text=Palet\u0103: +HeatMapPanel.dontPaintUnreachableCheckbox.text=Nu picta noduri inaccesibile +HeatMapPanel.invertPalette.text=Inverseaz\u0103 paleta +PainterPanel.labelColor.text=Culoare: +SizerPanel.jLabel1.text=Apas\u0103 pe noduri \u0219i trage mouse-ul vertical +SizerPanel.labelSize.text=Dimensiune: +SizerPanel.sizeLabel.text=NaN +EdgePencilPanel.labelType.text=Tip: +EdgePencilPanel.type.directed=Orientat +EdgePencilPanel.labelColor.text=Culoare: +EdgePencilPanel.type.undirected=Neorientat diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_ru.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_ru.properties index f27b03b7b9..681c3a7d10 100644 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_ru.properties +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_ru.properties @@ -1,53 +1,31 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:15+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -EdgePencilPanel.labelWeight.text=\u0412\u0435\u0441\: - -EdgePencilPanel.labelColor.text=\u0426\u0432\u0435\u0442\: - -BrushPanel.labelColor.text=\u0426\u0432\u0435\u0442\: - -BrushPanel.labelIntensity.text=\u042f\u0440\u043a\u043e\u0441\u0442\u044c\: - -BrushPanel.jLabel1.text=% - -BrushPanel.labelDiffusion.text=\u0420\u0430\u0441\u0441\u0435\u0438\u0432\u0430\u043d\u0438\u0435\: - -NodePencilPanel.labelColor.text=\u0426\u0432\u0435\u0442\: - -NodePencilPanel.statusLabel.text=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0443\u0437\u0435\u043b \u043a \u0433\u0440\u0430\u0444\u0443 - -NodePencilPanel.labelSize.text=\u0420\u0430\u0437\u043c\u0435\u0440\: - -ShortestPathPanel.labelColor.text=\u0426\u0432\u0435\u0442\: - -HeatMapPanel.statusLabel.text=\u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430 \u0443\u0437\u0435\u043b - -HeatMapPanel.labelMode.text=\u0420\u0435\u0436\u0438\u043c\: - -HeatMapPanel.labelGradient.text=\u0413\u0440\u0430\u0434\u0438\u0435\u043d\u0442\: - -HeatMapPanel.labelPalette.text=\u041f\u0430\u043b\u0438\u0442\u0440\u0430\: - -HeatMapPanel.dontPaintUnreachableCheckbox.text=\u041f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0438\u0436\u0438\u043c\u044b\u0435 - -HeatMapPanel.invertPalette.text=\u0418\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043b\u0438\u0442\u0440\u0443 - -PainterPanel.labelColor.text=\u0426\u0432\u0435\u0442\: - -SizerPanel.jLabel1.text=\u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430 \u0443\u0437\u043b\u044b \u0438 \u043f\u0440\u043e\u0442\u044f\u043d\u0438\u0442\u0435 \u043c\u044b\u0448\u043a\u043e\u0439 \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438 - -SizerPanel.labelSize.text=\u0420\u0430\u0437\u043c\u0435\u0440\: - -SizerPanel.sizeLabel.text=NaN - -!EdgePencilPanel.labelType.text= - -!EdgePencilPanel.type.directed= - -!EdgePencilPanel.type.undirected= +EdgePencilPanel.colorButton.text= +EdgePencilPanel.labelWeight.text=\u0412\u0435\u0441: +EdgePencilPanel.statusLabel.text= +EdgePencilPanel.labelColor.text=\u0426\u0432\u0435\u0442: +BrushPanel.labelColor.text=\u0426\u0432\u0435\u0442: +BrushPanel.labelIntensity.text=\u042f\u0440\u043a\u043e\u0441\u0442\u044c: +BrushPanel.jLabel1.text=% +BrushPanel.labelDiffusion.text=\u0420\u0430\u0441\u0441\u0435\u0438\u0432\u0430\u043d\u0438\u0435: +BrushPanel.colorButton.text= +NodePencilPanel.labelColor.text=\u0426\u0432\u0435\u0442: +NodePencilPanel.colorButton.text= +NodePencilPanel.statusLabel.text=\u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0443\u0437\u0435\u043b \u043a \u0433\u0440\u0430\u0444\u0443 +NodePencilPanel.labelSize.text=\u0420\u0430\u0437\u043c\u0435\u0440: +ShortestPathPanel.statusLabel.text= +ShortestPathPanel.resultLabel.text= +ShortestPathPanel.labelColor.text=\u0426\u0432\u0435\u0442: +ShortestPathPanel.colorButton.text= +HeatMapPanel.statusLabel.text=\u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430 \u0443\u0437\u0435\u043b +HeatMapPanel.labelMode.text=\u0420\u0435\u0436\u0438\u043c: +HeatMapPanel.labelGradient.text=\u0413\u0440\u0430\u0434\u0438\u0435\u043d\u0442: +HeatMapPanel.labelPalette.text=\u041f\u0430\u043b\u0438\u0442\u0440\u0430: +HeatMapPanel.dontPaintUnreachableCheckbox.text=\u041f\u0440\u043e\u043f\u0443\u0441\u043a\u0430\u0442\u044c \u043d\u0435\u0434\u043e\u0441\u0442\u0438\u0436\u0438\u043c\u044b\u0435 +HeatMapPanel.invertPalette.text=\u0418\u043d\u0432\u0435\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043f\u0430\u043b\u0438\u0442\u0440\u0443 +PainterPanel.labelColor.text=\u0426\u0432\u0435\u0442: +PainterPanel.colorButton.text= +SizerPanel.jLabel1.text=\u041d\u0430\u0436\u043c\u0438\u0442\u0435 \u043d\u0430 \u0443\u0437\u043b\u044b \u0438 \u043f\u0440\u043e\u0442\u044f\u043d\u0438\u0442\u0435 \u043c\u044b\u0448\u043a\u043e\u0439 \u043f\u043e \u0432\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u0438 +SizerPanel.labelSize.text=\u0420\u0430\u0437\u043c\u0435\u0440: +SizerPanel.sizeLabel.text=NaN +EdgePencilPanel.labelType.text=\u0422\u0438\u043f: +EdgePencilPanel.type.directed=\u041e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 +EdgePencilPanel.type.undirected=\u041d\u0435\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_th.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_tr.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_tr.properties new file mode 100644 index 0000000000..62d7a76d49 --- /dev/null +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_tr.properties @@ -0,0 +1,31 @@ +EdgePencilPanel.colorButton.text= +EdgePencilPanel.labelWeight.text=Weight: +EdgePencilPanel.statusLabel.text= +EdgePencilPanel.labelColor.text=Renk: +BrushPanel.labelColor.text=Renk: +BrushPanel.labelIntensity.text=Intensity: +BrushPanel.jLabel1.text=% +BrushPanel.labelDiffusion.text=Diffusion: +BrushPanel.colorButton.text= +NodePencilPanel.labelColor.text=Renk: +NodePencilPanel.colorButton.text= +NodePencilPanel.statusLabel.text=Add node to the graph +NodePencilPanel.labelSize.text=Boyut: +ShortestPathPanel.statusLabel.text= +ShortestPathPanel.resultLabel.text= +ShortestPathPanel.labelColor.text=Renk: +ShortestPathPanel.colorButton.text= +HeatMapPanel.statusLabel.text=Click on a node +HeatMapPanel.labelMode.text=Mode: +HeatMapPanel.labelGradient.text=Gradient: +HeatMapPanel.labelPalette.text=Palette: +HeatMapPanel.dontPaintUnreachableCheckbox.text=Don't paint unreachable +HeatMapPanel.invertPalette.text=Invert Palette +PainterPanel.labelColor.text=Renk: +PainterPanel.colorButton.text= +SizerPanel.jLabel1.text=Press on nodes and drag vertically the mouse +SizerPanel.labelSize.text=Boyut: +SizerPanel.sizeLabel.text=NaN +EdgePencilPanel.labelType.text=Type: +EdgePencilPanel.type.directed=Yφnlό +EdgePencilPanel.type.undirected=Yφnsόz diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_uk.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_uk.properties new file mode 100644 index 0000000000..5e2c177aaa --- /dev/null +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_uk.properties @@ -0,0 +1,31 @@ +HeatMapPanel.statusLabel.text=\u041D\u0430\u0442\u0438\u0441\u043D\u0456\u0442\u044C \u043D\u0430 \u0432\u0443\u0437\u043E\u043B +EdgePencilPanel.labelWeight.text=\u0412\u0430\u0433\u0430: +EdgePencilPanel.labelColor.text=\u041A\u043E\u043B\u0456\u0440: +ShortestPathPanel.resultLabel.text=\u0406 +NodePencilPanel.labelSize.text=\u0420\u043E\u0437\u043C\u0456\u0440: +BrushPanel.labelIntensity.text=\u0406\u043D\u0442\u0435\u043D\u0441\u0438\u0432\u043D\u0456\u0441\u0442\u044C: +BrushPanel.jLabel1.text=% +SizerPanel.sizeLabel.text=NaN +BrushPanel.labelDiffusion.text=\u0414\u0438\u0444\u0443\u0437\u0456\u044F: +EdgePencilPanel.colorButton.text=\u0406 +ShortestPathPanel.colorButton.text=\u0406 +NodePencilPanel.labelColor.text=\u041A\u043E\u043B\u0456\u0440: +SizerPanel.labelSize.text=\u0420\u043E\u0437\u043C\u0456\u0440: +NodePencilPanel.colorButton.text=\u0406 +EdgePencilPanel.statusLabel.text=\u0406 +BrushPanel.labelColor.text=\u041A\u043E\u043B\u0456\u0440: +BrushPanel.colorButton.text=\u0406 +NodePencilPanel.statusLabel.text=\u0414\u043E\u0434\u0430\u0442\u0438 \u0432\u0443\u0437\u043E\u043B \u0434\u043E \u0433\u0440\u0430\u0444\u0456\u043A\u0430 +ShortestPathPanel.statusLabel.text=\u0406 +ShortestPathPanel.labelColor.text=\u041A\u043E\u043B\u0456\u0440: +HeatMapPanel.labelMode.text=\u0420\u0435\u0436\u0438\u043C: +HeatMapPanel.labelGradient.text=\u0413\u0440\u0430\u0434\u0456\u0454\u043D\u0442: +HeatMapPanel.labelPalette.text=\u041F\u0430\u043B\u0456\u0442\u0440\u0430: +HeatMapPanel.dontPaintUnreachableCheckbox.text=\u041D\u0435 \u043C\u0430\u043B\u044E\u0439\u0442\u0435 \u043D\u0435\u0434\u043E\u0441\u044F\u0436\u043D\u0438\u043C +HeatMapPanel.invertPalette.text=\u0406\u043D\u0432\u0435\u0440\u0442\u0443\u0432\u0430\u0442\u0438 \u043F\u0430\u043B\u0456\u0442\u0440\u0443 +PainterPanel.labelColor.text=\u041A\u043E\u043B\u0456\u0440: +PainterPanel.colorButton.text=\u0406 +SizerPanel.jLabel1.text=\u041D\u0430\u0442\u0438\u0441\u043D\u0456\u0442\u044C \u043D\u0430 \u0432\u0443\u0437\u043B\u0438 \u0442\u0430 \u043F\u0435\u0440\u0435\u0442\u044F\u0433\u043D\u0456\u0442\u044C \u043C\u0438\u0448\u0435\u044E \u0432\u0435\u0440\u0442\u0438\u043A\u0430\u043B\u044C\u043D\u043E +EdgePencilPanel.labelType.text=\u0422\u0438\u043F: +EdgePencilPanel.type.directed=\u0420\u0435\u0436\u0438\u0441\u0435\u0440 +EdgePencilPanel.type.undirected=\u041D\u0435\u0440\u0435\u0436\u0438\u0441\u043E\u0432\u0430\u043D\u0438\u0439 diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_zh_CN.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_zh_CN.properties index 901e86c37d..cac24f6578 100644 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_zh_CN.properties +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_zh_CN.properties @@ -1,52 +1,31 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:15+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -EdgePencilPanel.labelWeight.text=\u6743\u91cd\uff1a - -EdgePencilPanel.labelColor.text=\u989c\u8272\uff1a - -BrushPanel.labelColor.text=\u989c\u8272\uff1a - -BrushPanel.labelIntensity.text=\u5f3a\u5ea6\uff1a - -BrushPanel.jLabel1.text=% - -BrushPanel.labelDiffusion.text=\u6269\u6563\uff1a - -NodePencilPanel.labelColor.text=\u989c\u8272\uff1a - -NodePencilPanel.statusLabel.text=\u6dfb\u52a0\u8282\u70b9\u5230\u56fe - -NodePencilPanel.labelSize.text=\u5927\u5c0f\uff1a - -ShortestPathPanel.labelColor.text=\u989c\u8272\uff1a - -HeatMapPanel.statusLabel.text=\u70b9\u51fb\u8282\u70b9 - -HeatMapPanel.labelMode.text=\u6a21\u5f0f\uff1a - -HeatMapPanel.labelGradient.text=\u68af\u5ea6\uff1a - -HeatMapPanel.labelPalette.text=\u8c03\u8272\u677f\uff1a - -HeatMapPanel.dontPaintUnreachableCheckbox.text=\u4e0d\u753b\u65e0\u6cd5\u8bbf\u95ee\u533a - -HeatMapPanel.invertPalette.text=\u53cd\u8f6c\u8c03\u8272\u677f - -PainterPanel.labelColor.text=\u989c\u8272\uff1a - -SizerPanel.jLabel1.text=\u6309\u4f4f\u8282\u70b9\u5e76\u5782\u76f4\u62d6\u52a8\u9f20\u6807 - -SizerPanel.labelSize.text=\u5927\u5c0f\uff1a - -SizerPanel.sizeLabel.text=NaN - -!EdgePencilPanel.labelType.text= - -!EdgePencilPanel.type.directed= - -!EdgePencilPanel.type.undirected= +EdgePencilPanel.colorButton.text= +EdgePencilPanel.labelWeight.text=\u6743\u91cd\uff1a +EdgePencilPanel.statusLabel.text= +EdgePencilPanel.labelColor.text=\u989c\u8272\uff1a +BrushPanel.labelColor.text=\u989c\u8272\uff1a +BrushPanel.labelIntensity.text=\u5f3a\u5ea6\uff1a +BrushPanel.jLabel1.text=% +BrushPanel.labelDiffusion.text=\u6269\u6563\uff1a +BrushPanel.colorButton.text= +NodePencilPanel.labelColor.text=\u989c\u8272\uff1a +NodePencilPanel.colorButton.text= +NodePencilPanel.statusLabel.text=\u6dfb\u52a0\u8282\u70b9\u5230\u56fe +NodePencilPanel.labelSize.text=\u5927\u5c0f\uff1a +ShortestPathPanel.statusLabel.text= +ShortestPathPanel.resultLabel.text= +ShortestPathPanel.labelColor.text=\u989c\u8272\uff1a +ShortestPathPanel.colorButton.text= +HeatMapPanel.statusLabel.text=\u70b9\u51fb\u8282\u70b9 +HeatMapPanel.labelMode.text=\u6a21\u5f0f\uff1a +HeatMapPanel.labelGradient.text=\u68af\u5ea6\uff1a +HeatMapPanel.labelPalette.text=\u8c03\u8272\u677f\uff1a +HeatMapPanel.dontPaintUnreachableCheckbox.text=\u4e0d\u753b\u65e0\u6cd5\u8bbf\u95ee\u533a +HeatMapPanel.invertPalette.text=\u53cd\u8f6c\u8c03\u8272\u677f +PainterPanel.labelColor.text=\u989c\u8272\uff1a +PainterPanel.colorButton.text= +SizerPanel.jLabel1.text=\u6309\u4f4f\u8282\u70b9\u5e76\u5782\u76f4\u62d6\u52a8\u9f20\u6807 +SizerPanel.labelSize.text=\u5927\u5c0f\uff1a +SizerPanel.sizeLabel.text=NaN +EdgePencilPanel.labelType.text=\u7c7b\u578b\uff1a +EdgePencilPanel.type.directed=\u6709\u5411 +EdgePencilPanel.type.undirected=\u65e0\u5411 diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_zh_TW.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_zh_TW.properties new file mode 100644 index 0000000000..b0950cb2f4 --- /dev/null +++ b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/Bundle_zh_TW.properties @@ -0,0 +1,31 @@ +EdgePencilPanel.colorButton.text= +EdgePencilPanel.labelWeight.text=Weight: +EdgePencilPanel.statusLabel.text= +EdgePencilPanel.labelColor.text=Color: +BrushPanel.labelColor.text=Color: +BrushPanel.labelIntensity.text=Intensity: +BrushPanel.jLabel1.text=% +BrushPanel.labelDiffusion.text=Diffusion: +BrushPanel.colorButton.text= +NodePencilPanel.labelColor.text=Color: +NodePencilPanel.colorButton.text= +NodePencilPanel.statusLabel.text=Add node to the graph +NodePencilPanel.labelSize.text=Size: +ShortestPathPanel.statusLabel.text= +ShortestPathPanel.resultLabel.text= +ShortestPathPanel.labelColor.text=Color: +ShortestPathPanel.colorButton.text= +HeatMapPanel.statusLabel.text=Click on a node +HeatMapPanel.labelMode.text=Mode: +HeatMapPanel.labelGradient.text=Gradient: +HeatMapPanel.labelPalette.text=Palette: +HeatMapPanel.dontPaintUnreachableCheckbox.text=Don't paint unreachable +HeatMapPanel.invertPalette.text=Invert Palette +PainterPanel.labelColor.text=Color: +PainterPanel.colorButton.text= +SizerPanel.jLabel1.text=Press on nodes and drag vertically the mouse +SizerPanel.labelSize.text=Size: +SizerPanel.sizeLabel.text=NaN +EdgePencilPanel.labelType.text=Type: +EdgePencilPanel.type.directed=\u6709\u5411\u6027 +EdgePencilPanel.type.undirected=\u7121\u5411\u6027 diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/cs.po b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/cs.po deleted file mode 100644 index 5fef0ea1f7..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/cs.po +++ /dev/null @@ -1,88 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2011-2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-17 06:47+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "EdgePencilPanel.labelWeight.text" -msgstr "VΓ‘ha:" - -msgid "EdgePencilPanel.labelColor.text" -msgstr "Barva:" - -msgid "BrushPanel.labelColor.text" -msgstr "Barva:" - -msgid "BrushPanel.labelIntensity.text" -msgstr "Intenzita:" - -msgid "BrushPanel.jLabel1.text" -msgstr "%" - -msgid "BrushPanel.labelDiffusion.text" -msgstr "Rozptyl:" - -msgid "NodePencilPanel.labelColor.text" -msgstr "Barva:" - -msgid "NodePencilPanel.statusLabel.text" -msgstr "PΕ™idat uzel do grafu" - -msgid "NodePencilPanel.labelSize.text" -msgstr "Velikost:" - -msgid "ShortestPathPanel.labelColor.text" -msgstr "Barva:" - -msgid "HeatMapPanel.statusLabel.text" -msgstr "KliknΔ›te na uzel" - -msgid "HeatMapPanel.labelMode.text" -msgstr "ReΕΎim:" - -msgid "HeatMapPanel.labelGradient.text" -msgstr "PΕ™echod:" - -msgid "HeatMapPanel.labelPalette.text" -msgstr "Paleta:" - -msgid "HeatMapPanel.dontPaintUnreachableCheckbox.text" -msgstr "Nevybarvovat nedosaΕΎitelnΓ©" - -msgid "HeatMapPanel.invertPalette.text" -msgstr "ObrΓ‘tit paletu" - -msgid "PainterPanel.labelColor.text" -msgstr "Barva:" - -msgid "SizerPanel.jLabel1.text" -msgstr "KliknΔ›te na uzly a tΓ‘hnΔ›te myΕ‘Γ­ svisle" - -msgid "SizerPanel.labelSize.text" -msgstr "Velikost:" - -msgid "SizerPanel.sizeLabel.text" -msgstr "NaN" - -msgid "EdgePencilPanel.labelType.text" -msgstr "Typ:" - -msgid "EdgePencilPanel.type.directed" -msgstr "ŘízenΓ½" - -msgid "EdgePencilPanel.type.undirected" -msgstr "NeΕ™Γ­zenΓ½" diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/Bundle.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/Bundle.properties deleted file mode 100644 index 3adf23beea..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/Bundle.properties +++ /dev/null @@ -1,18 +0,0 @@ -CTL_EditToolTopComponent=Edit -HINT_EditToolTopComponent= -EditNodes.multiple.elements=Various nodes -EditNodes.properties.text={0} - Properties -EditNodes.attributes.text={0} - Attributes -EditNodes.properties.text.multiple=Various nodes - Properties -EditNodes.attributes.text.multiple=Various nodes - Attributes -EditNodes.size.text=Size -EditNodes.position.text=Position ({0}) -EditNodes.color.text=Color -EditEdges.multiple.elements=Various edges -EditEdges.properties.text={0} - Properties -EditEdges.attributes.text={0} - Attributes -EditEdges.properties.text.multiple=Various edges - Properties -EditEdges.attributes.text.multiple=Various edges - Attributes -EditEdges.size.text=Size -EditEdges.position.text=Position ({0}) -EditEdges.color.text=Color \ No newline at end of file diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/Bundle_cs.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/Bundle_cs.properties deleted file mode 100644 index 25906b7d25..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/Bundle_cs.properties +++ /dev/null @@ -1,41 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-01 17\:29+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -CTL_EditToolTopComponent=Upravit - -EditNodes.multiple.elements=R\u016fzn\u00e9 uzly - -EditNodes.properties.text={0} - Vlastnosti - -EditNodes.attributes.text={0} - Atributy - -EditNodes.properties.text.multiple=R\u016fzn\u00e9 uzly - Vlastnosti - -EditNodes.attributes.text.multiple=R\u016fzn\u00e9 uzly - Atributy - -EditNodes.size.text=Velikost - -EditNodes.position.text=Pozice ({0}) - -EditNodes.color.text=Barva - -EditEdges.multiple.elements=R\u016fzn\u00e9 hrany - -EditEdges.properties.text={0} - Vlastnosti - -EditEdges.attributes.text={0} - Atributy - -EditEdges.properties.text.multiple=R\u016fzn\u00e9 hrany - Vlastnosti - -EditEdges.attributes.text.multiple=R\u016fzn\u00e9 hrany - Atributy - -EditEdges.size.text=Velikost - -EditEdges.position.text=Pozice ({0}) - -EditEdges.color.text=Barva diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/Bundle_es.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/Bundle_es.properties deleted file mode 100644 index 2c2b13dde0..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/Bundle_es.properties +++ /dev/null @@ -1,41 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:57+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -CTL_EditToolTopComponent=Edici\u00f3n - -EditNodes.multiple.elements=Varios nodos - -EditNodes.properties.text={0} - Propiedades - -EditNodes.attributes.text={0} - Atributos - -EditNodes.properties.text.multiple=Varios nodos - Propiedades - -EditNodes.attributes.text.multiple=Varios nodos - Atributos - -EditNodes.size.text=Tama\u00f1o - -EditNodes.position.text=Posici\u00f3n ({0}) - -EditNodes.color.text=Color - -EditEdges.multiple.elements=Varias aristas - -EditEdges.properties.text={0} - Propiedades - -EditEdges.attributes.text={0} - Atributos - -EditEdges.properties.text.multiple=Varias aristas - Propiedades - -EditEdges.attributes.text.multiple=Varias aristas - Atributos - -EditEdges.size.text=Tama\u00f1o - -EditEdges.position.text=Posici\u00f3n ({0}) - -EditEdges.color.text=Color diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/Bundle_fr.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/Bundle_fr.properties deleted file mode 100644 index 3a51524071..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/Bundle_fr.properties +++ /dev/null @@ -1,41 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:57+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -CTL_EditToolTopComponent=Edition - -EditNodes.multiple.elements=Noeuds divers - -EditNodes.properties.text={0} - Propri\u00e9t\u00e9s - -EditNodes.attributes.text={0} - Attributs - -EditNodes.properties.text.multiple=Noeuds divers - Propri\u00e9t\u00e9s - -EditNodes.attributes.text.multiple=Noeuds divers - Attributs - -EditNodes.size.text=Taille - -EditNodes.position.text=Position ({0}) - -EditNodes.color.text=Couleur - -EditEdges.multiple.elements=Liens vari\u00e9s - -EditEdges.properties.text={0} - Propri\u00e9t\u00e9s - -EditEdges.attributes.text={0} - Attributs - -EditEdges.properties.text.multiple=Liens vari\u00e9s - Propri\u00e9t\u00e9s - -EditEdges.attributes.text.multiple=Liens vari\u00e9s - Attributs - -EditEdges.size.text=Taille - -EditEdges.position.text=Position ({0}) - -EditEdges.color.text=Couleur diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/Bundle_ja.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/Bundle_ja.properties deleted file mode 100644 index dabf3cc330..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/Bundle_ja.properties +++ /dev/null @@ -1,41 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-03 02\:45+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -CTL_EditToolTopComponent=\u7de8\u96c6 - -EditNodes.multiple.elements=\u69d8\u3005\u306a\u30ce\u30fc\u30c9 - -EditNodes.properties.text={0} - \u30d7\u30ed\u30d1\u30c6\u30a3 - -EditNodes.attributes.text={0} - \u5c5e\u6027 - -EditNodes.properties.text.multiple=\u69d8\u3005\u306a\u30ce\u30fc\u30c9 - \u30d7\u30ed\u30d1\u30c6\u30a3 - -EditNodes.attributes.text.multiple=\u69d8\u3005\u306a\u30ce\u30fc\u30c9 - \u5c5e\u6027 - -EditNodes.size.text=\u5927\u304d\u3055 - -EditNodes.position.text=\u4f4d\u7f6e({0}) - -EditNodes.color.text=\u8272 - -EditEdges.multiple.elements=\u69d8\u3005\u306a\u8fba - -EditEdges.properties.text={0} - \u30d7\u30ed\u30d1\u30c6\u30a3 - -EditEdges.attributes.text={0} - \u5c5e\u6027 - -EditEdges.properties.text.multiple=\u69d8\u3005\u306a\u8fba - \u30d7\u30ed\u30d1\u30c6\u30a3 - -EditEdges.attributes.text.multiple=\u69d8\u3005\u306a\u8fba - \u5c5e\u6027 - -EditEdges.size.text=\u5927\u304d\u3055 - -EditEdges.position.text=\u4f4d\u7f6e({0}) - -EditEdges.color.text=\u8272 diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/Bundle_pt_BR.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/Bundle_pt_BR.properties deleted file mode 100644 index 18fad42a65..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/Bundle_pt_BR.properties +++ /dev/null @@ -1,41 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 01\:34+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -CTL_EditToolTopComponent=Editar - -EditNodes.multiple.elements=V\u00e1rios n\u00f3s - -EditNodes.properties.text={0} - Propriedades - -EditNodes.attributes.text={0} - Atributos - -EditNodes.properties.text.multiple=V\u00e1rios n\u00f3s - Propriedades - -EditNodes.attributes.text.multiple=V\u00e1rios n\u00f3s - Atributos - -EditNodes.size.text=Tamanho - -EditNodes.position.text=Posi\u00e7\u00e3o ({0}) - -EditNodes.color.text=Cor - -EditEdges.multiple.elements=V\u00e1rias arestas - -EditEdges.properties.text={0} - Propriedades - -EditEdges.attributes.text={0} - Atributos - -EditEdges.properties.text.multiple=V\u00e1rias arestas - Propriedades - -EditEdges.attributes.text.multiple=V\u00e1rias arestas - Atributos - -EditEdges.size.text=Tamanho - -EditEdges.position.text=Posi\u00e7\u00e3o ({0}) - -EditEdges.color.text=Cor diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/Bundle_ru.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/Bundle_ru.properties deleted file mode 100644 index 002bdb91ce..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/Bundle_ru.properties +++ /dev/null @@ -1,41 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-25 07\:40+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -CTL_EditToolTopComponent=\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 - -EditNodes.multiple.elements=\u0420\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0443\u0437\u043b\u044b - -EditNodes.properties.text={0} - \u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 - -EditNodes.attributes.text={0} - \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b - -EditNodes.properties.text.multiple=\u0420\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0443\u0437\u043b\u044b - \u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 - -EditNodes.attributes.text.multiple=\u0420\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0443\u0437\u043b\u044b - \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b - -EditNodes.size.text=\u0420\u0430\u0437\u043c\u0435\u0440 - -EditNodes.position.text=\u041f\u043e\u0437\u0438\u0446\u0438\u044f ({0}) - -EditNodes.color.text=\u0426\u0432\u0435\u0442 - -EditEdges.multiple.elements=\u0420\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0440\u0451\u0431\u0440\u0430 - -EditEdges.properties.text={0} - \u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 - -EditEdges.attributes.text={0} - \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b - -EditEdges.properties.text.multiple=\u0420\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0440\u0451\u0431\u0440\u0430 - \u0421\u0432\u043e\u0439\u0441\u0442\u0432\u0430 - -EditEdges.attributes.text.multiple=\u0420\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0440\u0451\u0431\u0440\u0430 - \u0410\u0442\u0440\u0438\u0431\u0443\u0442\u044b - -EditEdges.size.text=\u0420\u0430\u0437\u043c\u0435\u0440 - -EditEdges.position.text=\u041f\u043e\u0437\u0438\u0446\u0438\u044f ({0}) - -EditEdges.color.text=\u0426\u0432\u0435\u0442 diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/Bundle_zh_CN.properties b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/Bundle_zh_CN.properties deleted file mode 100644 index d9c1e3dbec..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/Bundle_zh_CN.properties +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:06+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -CTL_EditToolTopComponent=\u7f16\u8f91 - -EditNodes.multiple.elements=\u5404\u4e2a\u8282\u70b9 - -EditNodes.properties.text={0} - \u5c5e\u6027 - -EditNodes.attributes.text={0} - \u5c5e\u6027 - -EditNodes.properties.text.multiple=\u5404\u4e2a\u8282\u70b9 - \u5c5e\u6027 - -EditNodes.attributes.text.multiple=\u5404\u4e2a\u8282\u70b9 - \u5c5e\u6027 - -EditNodes.size.text=\u5c3a\u5bf8 - -EditNodes.position.text=\u4f4d\u7f6e({0}) - -EditNodes.color.text=\u989c\u8272 - -EditEdges.multiple.elements=\u5404\u4e2a\u8fb9 - -EditEdges.properties.text={0} - \u5c5e\u6027 - -EditEdges.attributes.text={0} - \u5c5e\u6027 - -EditEdges.properties.text.multiple=\u5404\u4e2a\u8fb9-\u5c5e\u6027 - -EditEdges.attributes.text.multiple=\u5404\u4e2a\u8fb9 - \u5c5e\u6027 - -EditEdges.size.text=\u5c3a\u5bf8 - -EditEdges.position.text=\u4f4d\u7f6e({0}) - -EditEdges.color.text=\u989c\u8272 diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/EditToolTopComponentSettings.xml b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/EditToolTopComponentSettings.xml deleted file mode 100644 index ba303ab546..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/EditToolTopComponentSettings.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/EditToolTopComponentWstcref.xml b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/EditToolTopComponentWstcref.xml deleted file mode 100644 index 69de99940f..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/EditToolTopComponentWstcref.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/cs.po b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/cs.po deleted file mode 100644 index 30c3afc94b..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/cs.po +++ /dev/null @@ -1,70 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-01 17:29+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "CTL_EditToolTopComponent" -msgstr "Upravit" - -msgid "EditNodes.multiple.elements" -msgstr "RΕ―znΓ© uzly" - -msgid "EditNodes.properties.text" -msgstr "{0} - Vlastnosti" - -msgid "EditNodes.attributes.text" -msgstr "{0} - Atributy" - -msgid "EditNodes.properties.text.multiple" -msgstr "RΕ―znΓ© uzly - Vlastnosti" - -msgid "EditNodes.attributes.text.multiple" -msgstr "RΕ―znΓ© uzly - Atributy" - -msgid "EditNodes.size.text" -msgstr "Velikost" - -msgid "EditNodes.position.text" -msgstr "Pozice ({0})" - -msgid "EditNodes.color.text" -msgstr "Barva" - -msgid "EditEdges.multiple.elements" -msgstr "RΕ―znΓ© hrany" - -msgid "EditEdges.properties.text" -msgstr "{0} - Vlastnosti" - -msgid "EditEdges.attributes.text" -msgstr "{0} - Atributy" - -msgid "EditEdges.properties.text.multiple" -msgstr "RΕ―znΓ© hrany - Vlastnosti" - -msgid "EditEdges.attributes.text.multiple" -msgstr "RΕ―znΓ© hrany - Atributy" - -msgid "EditEdges.size.text" -msgstr "Velikost" - -msgid "EditEdges.position.text" -msgstr "Pozice ({0})" - -msgid "EditEdges.color.text" -msgstr "Barva" diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/edit.png b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/edit.png deleted file mode 100644 index 2c02169358..0000000000 Binary files a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/edit.png and /dev/null differ diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/es.po b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/es.po deleted file mode 100644 index 2eb1449c2e..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/es.po +++ /dev/null @@ -1,70 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:57+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "CTL_EditToolTopComponent" -msgstr "EdiciΓ³n" - -msgid "EditNodes.multiple.elements" -msgstr "Varios nodos" - -msgid "EditNodes.properties.text" -msgstr "{0} - Propiedades" - -msgid "EditNodes.attributes.text" -msgstr "{0} - Atributos" - -msgid "EditNodes.properties.text.multiple" -msgstr "Varios nodos - Propiedades" - -msgid "EditNodes.attributes.text.multiple" -msgstr "Varios nodos - Atributos" - -msgid "EditNodes.size.text" -msgstr "TamaΓ±o" - -msgid "EditNodes.position.text" -msgstr "PosiciΓ³n ({0})" - -msgid "EditNodes.color.text" -msgstr "Color" - -msgid "EditEdges.multiple.elements" -msgstr "Varias aristas" - -msgid "EditEdges.properties.text" -msgstr "{0} - Propiedades" - -msgid "EditEdges.attributes.text" -msgstr "{0} - Atributos" - -msgid "EditEdges.properties.text.multiple" -msgstr "Varias aristas - Propiedades" - -msgid "EditEdges.attributes.text.multiple" -msgstr "Varias aristas - Atributos" - -msgid "EditEdges.size.text" -msgstr "TamaΓ±o" - -msgid "EditEdges.position.text" -msgstr "PosiciΓ³n ({0})" - -msgid "EditEdges.color.text" -msgstr "Color" diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/fr.po b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/fr.po deleted file mode 100644 index 21307d6ea1..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/fr.po +++ /dev/null @@ -1,70 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:57+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "CTL_EditToolTopComponent" -msgstr "Edition" - -msgid "EditNodes.multiple.elements" -msgstr "Noeuds divers" - -msgid "EditNodes.properties.text" -msgstr "{0} - PropriΓ©tΓ©s" - -msgid "EditNodes.attributes.text" -msgstr "{0} - Attributs" - -msgid "EditNodes.properties.text.multiple" -msgstr "Noeuds divers - PropriΓ©tΓ©s" - -msgid "EditNodes.attributes.text.multiple" -msgstr "Noeuds divers - Attributs" - -msgid "EditNodes.size.text" -msgstr "Taille" - -msgid "EditNodes.position.text" -msgstr "Position ({0})" - -msgid "EditNodes.color.text" -msgstr "Couleur" - -msgid "EditEdges.multiple.elements" -msgstr "Liens variΓ©s" - -msgid "EditEdges.properties.text" -msgstr "{0} - PropriΓ©tΓ©s" - -msgid "EditEdges.attributes.text" -msgstr "{0} - Attributs" - -msgid "EditEdges.properties.text.multiple" -msgstr "Liens variΓ©s - PropriΓ©tΓ©s" - -msgid "EditEdges.attributes.text.multiple" -msgstr "Liens variΓ©s - Attributs" - -msgid "EditEdges.size.text" -msgstr "Taille" - -msgid "EditEdges.position.text" -msgstr "Position ({0})" - -msgid "EditEdges.color.text" -msgstr "Couleur" diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/ja.po b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/ja.po deleted file mode 100644 index 85ed694bf1..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/ja.po +++ /dev/null @@ -1,70 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-03 02:45+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "CTL_EditToolTopComponent" -msgstr "編集" - -msgid "EditNodes.multiple.elements" -msgstr "ζ§˜γ€…γͺγƒŽγƒΌγƒ‰" - -msgid "EditNodes.properties.text" -msgstr "{0} - プロパティ" - -msgid "EditNodes.attributes.text" -msgstr "{0} - ε±žζ€§" - -msgid "EditNodes.properties.text.multiple" -msgstr "ζ§˜γ€…γͺγƒŽγƒΌγƒ‰ - プロパティ" - -msgid "EditNodes.attributes.text.multiple" -msgstr "ζ§˜γ€…γͺγƒŽγƒΌγƒ‰ - ε±žζ€§" - -msgid "EditNodes.size.text" -msgstr "倧きさ" - -msgid "EditNodes.position.text" -msgstr "位η½({0})" - -msgid "EditNodes.color.text" -msgstr "色" - -msgid "EditEdges.multiple.elements" -msgstr "ζ§˜γ€…γͺθΎΊ" - -msgid "EditEdges.properties.text" -msgstr "{0} - プロパティ" - -msgid "EditEdges.attributes.text" -msgstr "{0} - ε±žζ€§" - -msgid "EditEdges.properties.text.multiple" -msgstr "ζ§˜γ€…γͺθΎΊ - プロパティ" - -msgid "EditEdges.attributes.text.multiple" -msgstr "ζ§˜γ€…γͺθΎΊ - ε±žζ€§" - -msgid "EditEdges.size.text" -msgstr "倧きさ" - -msgid "EditEdges.position.text" -msgstr "位η½({0})" - -msgid "EditEdges.color.text" -msgstr "色" diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/org-gephi-ui-tools-plugin-edit.pot b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/org-gephi-ui-tools-plugin-edit.pot deleted file mode 100644 index 0aa4deda2d..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/org-gephi-ui-tools-plugin-edit.pot +++ /dev/null @@ -1,67 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "CTL_EditToolTopComponent" -msgstr "Edit" - -msgid "EditNodes.multiple.elements" -msgstr "Various nodes" - -msgid "EditNodes.properties.text" -msgstr "{0} - Properties" - -msgid "EditNodes.attributes.text" -msgstr "{0} - Attributes" - -msgid "EditNodes.properties.text.multiple" -msgstr "Various nodes - Properties" - -msgid "EditNodes.attributes.text.multiple" -msgstr "Various nodes - Attributes" - -msgid "EditNodes.size.text" -msgstr "Size" - -msgid "EditNodes.position.text" -msgstr "Position ({0})" - -msgid "EditNodes.color.text" -msgstr "Color" - -msgid "EditEdges.multiple.elements" -msgstr "Various edges" - -msgid "EditEdges.properties.text" -msgstr "{0} - Properties" - -msgid "EditEdges.attributes.text" -msgstr "{0} - Attributes" - -msgid "EditEdges.properties.text.multiple" -msgstr "Various edges - Properties" - -msgid "EditEdges.attributes.text.multiple" -msgstr "Various edges - Attributes" - -msgid "EditEdges.size.text" -msgstr "Size" - -msgid "EditEdges.position.text" -msgstr "Position ({0})" - -msgid "EditEdges.color.text" -msgstr "Color" diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/pt_BR.po b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/pt_BR.po deleted file mode 100644 index 11822da2fc..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/pt_BR.po +++ /dev/null @@ -1,70 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 01:34+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "CTL_EditToolTopComponent" -msgstr "Editar" - -msgid "EditNodes.multiple.elements" -msgstr "VΓ‘rios nΓ³s" - -msgid "EditNodes.properties.text" -msgstr "{0} - Propriedades" - -msgid "EditNodes.attributes.text" -msgstr "{0} - Atributos" - -msgid "EditNodes.properties.text.multiple" -msgstr "VΓ‘rios nΓ³s - Propriedades" - -msgid "EditNodes.attributes.text.multiple" -msgstr "VΓ‘rios nΓ³s - Atributos" - -msgid "EditNodes.size.text" -msgstr "Tamanho" - -msgid "EditNodes.position.text" -msgstr "PosiΓ§Γ£o ({0})" - -msgid "EditNodes.color.text" -msgstr "Cor" - -msgid "EditEdges.multiple.elements" -msgstr "VΓ‘rias arestas" - -msgid "EditEdges.properties.text" -msgstr "{0} - Propriedades" - -msgid "EditEdges.attributes.text" -msgstr "{0} - Atributos" - -msgid "EditEdges.properties.text.multiple" -msgstr "VΓ‘rias arestas - Propriedades" - -msgid "EditEdges.attributes.text.multiple" -msgstr "VΓ‘rias arestas - Atributos" - -msgid "EditEdges.size.text" -msgstr "Tamanho" - -msgid "EditEdges.position.text" -msgstr "PosiΓ§Γ£o ({0})" - -msgid "EditEdges.color.text" -msgstr "Cor" diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/ru.po b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/ru.po deleted file mode 100644 index 270cca29ff..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/ru.po +++ /dev/null @@ -1,70 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-25 07:40+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "CTL_EditToolTopComponent" -msgstr "Π Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅" - -msgid "EditNodes.multiple.elements" -msgstr "Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΡƒΠ·Π»Ρ‹" - -msgid "EditNodes.properties.text" -msgstr "{0} - Бвойства" - -msgid "EditNodes.attributes.text" -msgstr "{0} - Атрибуты" - -msgid "EditNodes.properties.text.multiple" -msgstr "Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΡƒΠ·Π»Ρ‹ - Бвойства" - -msgid "EditNodes.attributes.text.multiple" -msgstr "Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ ΡƒΠ·Π»Ρ‹ - Атрибуты" - -msgid "EditNodes.size.text" -msgstr "Π Π°Π·ΠΌΠ΅Ρ€" - -msgid "EditNodes.position.text" -msgstr "ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ ({0})" - -msgid "EditNodes.color.text" -msgstr "Π¦Π²Π΅Ρ‚" - -msgid "EditEdges.multiple.elements" -msgstr "Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ€Ρ‘Π±Ρ€Π°" - -msgid "EditEdges.properties.text" -msgstr "{0} - Бвойства" - -msgid "EditEdges.attributes.text" -msgstr "{0} - Атрибуты" - -msgid "EditEdges.properties.text.multiple" -msgstr "Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ€Ρ‘Π±Ρ€Π° - Бвойства" - -msgid "EditEdges.attributes.text.multiple" -msgstr "Π Π°Π·Π»ΠΈΡ‡Π½Ρ‹Π΅ Ρ€Ρ‘Π±Ρ€Π° - Атрибуты" - -msgid "EditEdges.size.text" -msgstr "Π Π°Π·ΠΌΠ΅Ρ€" - -msgid "EditEdges.position.text" -msgstr "ΠŸΠΎΠ·ΠΈΡ†ΠΈΡ ({0})" - -msgid "EditEdges.color.text" -msgstr "Π¦Π²Π΅Ρ‚" diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/zh_CN.po b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/zh_CN.po deleted file mode 100644 index 05eed4bc9b..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/edit/zh_CN.po +++ /dev/null @@ -1,69 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:06+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "CTL_EditToolTopComponent" -msgstr "ηΌ–θΎ‘" - -msgid "EditNodes.multiple.elements" -msgstr "各δΈͺθŠ‚η‚Ή" - -msgid "EditNodes.properties.text" -msgstr "{0} - ε±žζ€§" - -msgid "EditNodes.attributes.text" -msgstr "{0} - ε±žζ€§" - -msgid "EditNodes.properties.text.multiple" -msgstr "各δΈͺθŠ‚η‚Ή - ε±žζ€§" - -msgid "EditNodes.attributes.text.multiple" -msgstr "各δΈͺθŠ‚η‚Ή - ε±žζ€§" - -msgid "EditNodes.size.text" -msgstr "ε°Ίε―Έ" - -msgid "EditNodes.position.text" -msgstr "位η½({0})" - -msgid "EditNodes.color.text" -msgstr "ι’œθ‰²" - -msgid "EditEdges.multiple.elements" -msgstr "各δΈͺθΎΉ" - -msgid "EditEdges.properties.text" -msgstr "{0} - ε±žζ€§" - -msgid "EditEdges.attributes.text" -msgstr "{0} - ε±žζ€§" - -msgid "EditEdges.properties.text.multiple" -msgstr "各δΈͺθΎΉ-ε±žζ€§" - -msgid "EditEdges.attributes.text.multiple" -msgstr "各δΈͺθΎΉ - ε±žζ€§" - -msgid "EditEdges.size.text" -msgstr "ε°Ίε―Έ" - -msgid "EditEdges.position.text" -msgstr "位η½({0})" - -msgid "EditEdges.color.text" -msgstr "ι’œθ‰²" diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/es.po b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/es.po deleted file mode 100644 index b32b56d227..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/es.po +++ /dev/null @@ -1,89 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:29+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "EdgePencilPanel.labelWeight.text" -msgstr "Peso:" - -msgid "EdgePencilPanel.labelColor.text" -msgstr "Color:" - -msgid "BrushPanel.labelColor.text" -msgstr "Color:" - -msgid "BrushPanel.labelIntensity.text" -msgstr "Intensidad:" - -msgid "BrushPanel.jLabel1.text" -msgstr "%" - -msgid "BrushPanel.labelDiffusion.text" -msgstr "DifusiΓ³n:" - -msgid "NodePencilPanel.labelColor.text" -msgstr "Color:" - -msgid "NodePencilPanel.statusLabel.text" -msgstr "AΓ±adir nodo al grafo" - -msgid "NodePencilPanel.labelSize.text" -msgstr "TamaΓ±o:" - -msgid "ShortestPathPanel.labelColor.text" -msgstr "Color:" - -msgid "HeatMapPanel.statusLabel.text" -msgstr "Pulsa en un nodo" - -msgid "HeatMapPanel.labelMode.text" -msgstr "Modo:" - -msgid "HeatMapPanel.labelGradient.text" -msgstr "Gradiente:" - -msgid "HeatMapPanel.labelPalette.text" -msgstr "Paleta:" - -msgid "HeatMapPanel.dontPaintUnreachableCheckbox.text" -msgstr "No pintar nodos inalcanzables" - -msgid "HeatMapPanel.invertPalette.text" -msgstr "Invertir paleta" - -msgid "PainterPanel.labelColor.text" -msgstr "Color" - -msgid "SizerPanel.jLabel1.text" -msgstr "Presiona en los nodos y arrastra el ratΓ³n verticalmente" - -msgid "SizerPanel.labelSize.text" -msgstr "TamaΓ±o:" - -msgid "SizerPanel.sizeLabel.text" -msgstr "NaN" - -msgid "EdgePencilPanel.labelType.text" -msgstr "Tipo:" - -msgid "EdgePencilPanel.type.directed" -msgstr "Dirigida" - -msgid "EdgePencilPanel.type.undirected" -msgstr "No dirigida" diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/fr.po b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/fr.po deleted file mode 100644 index cc8ef5d051..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/fr.po +++ /dev/null @@ -1,88 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:15+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "EdgePencilPanel.labelWeight.text" -msgstr "Poids :" - -msgid "EdgePencilPanel.labelColor.text" -msgstr "Couleur :" - -msgid "BrushPanel.labelColor.text" -msgstr "Couleur :" - -msgid "BrushPanel.labelIntensity.text" -msgstr "IntensitΓ© :" - -msgid "BrushPanel.jLabel1.text" -msgstr "%" - -msgid "BrushPanel.labelDiffusion.text" -msgstr "Diffusion :" - -msgid "NodePencilPanel.labelColor.text" -msgstr "Couleur :" - -msgid "NodePencilPanel.statusLabel.text" -msgstr "Ajout d'un noeud au graphe" - -msgid "NodePencilPanel.labelSize.text" -msgstr "Taille :" - -msgid "ShortestPathPanel.labelColor.text" -msgstr "Couleur :" - -msgid "HeatMapPanel.statusLabel.text" -msgstr "Cliquez sur un noeud" - -msgid "HeatMapPanel.labelMode.text" -msgstr "Mode :" - -msgid "HeatMapPanel.labelGradient.text" -msgstr "DΓ©gradΓ© :" - -msgid "HeatMapPanel.labelPalette.text" -msgstr "Palette :" - -msgid "HeatMapPanel.dontPaintUnreachableCheckbox.text" -msgstr "Ne pas peindre les noeuds inatteignables" - -msgid "HeatMapPanel.invertPalette.text" -msgstr "Inverser la palette" - -msgid "PainterPanel.labelColor.text" -msgstr "Couleur :" - -msgid "SizerPanel.jLabel1.text" -msgstr "Maintenez le clic sur un noeud et dΓ©placez verticalement la souris" - -msgid "SizerPanel.labelSize.text" -msgstr "Taille :" - -msgid "SizerPanel.sizeLabel.text" -msgstr "NaN" - -msgid "EdgePencilPanel.labelType.text" -msgstr "" - -msgid "EdgePencilPanel.type.directed" -msgstr "" - -msgid "EdgePencilPanel.type.undirected" -msgstr "" diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/ja.po b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/ja.po deleted file mode 100644 index 6603a84bd3..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/ja.po +++ /dev/null @@ -1,88 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:15+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "EdgePencilPanel.labelWeight.text" -msgstr "重み:" - -msgid "EdgePencilPanel.labelColor.text" -msgstr "色:" - -msgid "BrushPanel.labelColor.text" -msgstr "色:" - -msgid "BrushPanel.labelIntensity.text" -msgstr "εΌ·εΊ¦:" - -msgid "BrushPanel.jLabel1.text" -msgstr "%" - -msgid "BrushPanel.labelDiffusion.text" -msgstr "ζ‹‘ζ•£:" - -msgid "NodePencilPanel.labelColor.text" -msgstr "色:" - -msgid "NodePencilPanel.statusLabel.text" -msgstr "γ‚°γƒ©γƒ•γ«γƒŽγƒΌγƒ‰γ‚’θΏ½εŠ " - -msgid "NodePencilPanel.labelSize.text" -msgstr "倧きさ:" - -msgid "ShortestPathPanel.labelColor.text" -msgstr "色:" - -msgid "HeatMapPanel.statusLabel.text" -msgstr "γƒŽγƒΌγƒ‰γ‚’γ‚―γƒͺック" - -msgid "HeatMapPanel.labelMode.text" -msgstr "ヒード:" - -msgid "HeatMapPanel.labelGradient.text" -msgstr "勾配:" - -msgid "HeatMapPanel.labelPalette.text" -msgstr "γƒ‘γƒ¬γƒƒγƒˆ:" - -msgid "HeatMapPanel.dontPaintUnreachableCheckbox.text" -msgstr "εˆ°ι”δΈθƒ½γγ‚‚γγ‚’γƒšγ‚€γƒ³γƒˆγ—γͺいでください" - -msgid "HeatMapPanel.invertPalette.text" -msgstr "γƒ‘γƒ¬γƒƒγƒˆγ‚’εθ»’" - -msgid "PainterPanel.labelColor.text" -msgstr "色:" - -msgid "SizerPanel.jLabel1.text" -msgstr "γƒŽγƒΌγƒ‰γ‚’ζŠΌγ—γ¦γ€γƒžγ‚¦γ‚Ήγ‚’δΈŠδΈ‹γ«γƒ‰γƒ©γƒƒγ‚°γ—γ¦δΈ‹γ•γ„γ€‚" - -msgid "SizerPanel.labelSize.text" -msgstr "倧きさ:" - -msgid "SizerPanel.sizeLabel.text" -msgstr "NaN" - -msgid "EdgePencilPanel.labelType.text" -msgstr "" - -msgid "EdgePencilPanel.type.directed" -msgstr "" - -msgid "EdgePencilPanel.type.undirected" -msgstr "" diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/org-gephi-ui-tools-plugin.pot b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/org-gephi-ui-tools-plugin.pot deleted file mode 100644 index d9114e5bbe..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/org-gephi-ui-tools-plugin.pot +++ /dev/null @@ -1,85 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "EdgePencilPanel.labelWeight.text" -msgstr "Weight:" - -msgid "EdgePencilPanel.labelColor.text" -msgstr "Color:" - -msgid "BrushPanel.labelColor.text" -msgstr "Color:" - -msgid "BrushPanel.labelIntensity.text" -msgstr "Intensity:" - -msgid "BrushPanel.jLabel1.text" -msgstr "%" - -msgid "BrushPanel.labelDiffusion.text" -msgstr "Diffusion:" - -msgid "NodePencilPanel.labelColor.text" -msgstr "Color:" - -msgid "NodePencilPanel.statusLabel.text" -msgstr "Add node to the graph" - -msgid "NodePencilPanel.labelSize.text" -msgstr "Size:" - -msgid "ShortestPathPanel.labelColor.text" -msgstr "Color:" - -msgid "HeatMapPanel.statusLabel.text" -msgstr "Click on a node" - -msgid "HeatMapPanel.labelMode.text" -msgstr "Mode:" - -msgid "HeatMapPanel.labelGradient.text" -msgstr "Gradient:" - -msgid "HeatMapPanel.labelPalette.text" -msgstr "Palette:" - -msgid "HeatMapPanel.dontPaintUnreachableCheckbox.text" -msgstr "Don't paint unreachable" - -msgid "HeatMapPanel.invertPalette.text" -msgstr "Invert Palette" - -msgid "PainterPanel.labelColor.text" -msgstr "Color:" - -msgid "SizerPanel.jLabel1.text" -msgstr "Press on nodes and drag vertically the mouse" - -msgid "SizerPanel.labelSize.text" -msgstr "Size:" - -msgid "SizerPanel.sizeLabel.text" -msgstr "NaN" - -msgid "EdgePencilPanel.labelType.text" -msgstr "Type:" - -msgid "EdgePencilPanel.type.directed" -msgstr "Directed" - -msgid "EdgePencilPanel.type.undirected" -msgstr "Undirected" diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/pt_BR.po b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/pt_BR.po deleted file mode 100644 index 6ea6c58790..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/pt_BR.po +++ /dev/null @@ -1,89 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -# CΓ©lio Faria Jr. , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-18 11:16+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "EdgePencilPanel.labelWeight.text" -msgstr "Peso:" - -msgid "EdgePencilPanel.labelColor.text" -msgstr "Cor:" - -msgid "BrushPanel.labelColor.text" -msgstr "Cor:" - -msgid "BrushPanel.labelIntensity.text" -msgstr "Intensidade:" - -msgid "BrushPanel.jLabel1.text" -msgstr "%" - -msgid "BrushPanel.labelDiffusion.text" -msgstr "DifusΓ£o:" - -msgid "NodePencilPanel.labelColor.text" -msgstr "Cor:" - -msgid "NodePencilPanel.statusLabel.text" -msgstr "Adicionar nΓ³ ao grafo" - -msgid "NodePencilPanel.labelSize.text" -msgstr "Tamanho:" - -msgid "ShortestPathPanel.labelColor.text" -msgstr "Cor:" - -msgid "HeatMapPanel.statusLabel.text" -msgstr "Clique em um nΓ³" - -msgid "HeatMapPanel.labelMode.text" -msgstr "Modo:" - -msgid "HeatMapPanel.labelGradient.text" -msgstr "Gradiente:" - -msgid "HeatMapPanel.labelPalette.text" -msgstr "Paleta:" - -msgid "HeatMapPanel.dontPaintUnreachableCheckbox.text" -msgstr "NΓ£o desenhar nΓ³s inalcanΓ§Γ‘veis" - -msgid "HeatMapPanel.invertPalette.text" -msgstr "Inverter paleta" - -msgid "PainterPanel.labelColor.text" -msgstr "Cor:" - -msgid "SizerPanel.jLabel1.text" -msgstr "Clique sobre nΓ³s e arraste o mouse verticalmente" - -msgid "SizerPanel.labelSize.text" -msgstr "Tamanho:" - -msgid "SizerPanel.sizeLabel.text" -msgstr "NaN" - -msgid "EdgePencilPanel.labelType.text" -msgstr "Tipo:" - -msgid "EdgePencilPanel.type.directed" -msgstr "Direcionada" - -msgid "EdgePencilPanel.type.undirected" -msgstr "NΓ£o direcionada" diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/ru.po b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/ru.po deleted file mode 100644 index be3122fd8e..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/ru.po +++ /dev/null @@ -1,88 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:15+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "EdgePencilPanel.labelWeight.text" -msgstr "ВСс:" - -msgid "EdgePencilPanel.labelColor.text" -msgstr "Π¦Π²Π΅Ρ‚:" - -msgid "BrushPanel.labelColor.text" -msgstr "Π¦Π²Π΅Ρ‚:" - -msgid "BrushPanel.labelIntensity.text" -msgstr "Π―Ρ€ΠΊΠΎΡΡ‚ΡŒ:" - -msgid "BrushPanel.jLabel1.text" -msgstr "%" - -msgid "BrushPanel.labelDiffusion.text" -msgstr "РассСиваниС:" - -msgid "NodePencilPanel.labelColor.text" -msgstr "Π¦Π²Π΅Ρ‚:" - -msgid "NodePencilPanel.statusLabel.text" -msgstr "Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΡƒΠ·Π΅Π» ΠΊ Π³Ρ€Π°Ρ„Ρƒ" - -msgid "NodePencilPanel.labelSize.text" -msgstr "Π Π°Π·ΠΌΠ΅Ρ€:" - -msgid "ShortestPathPanel.labelColor.text" -msgstr "Π¦Π²Π΅Ρ‚:" - -msgid "HeatMapPanel.statusLabel.text" -msgstr "НаТмитС Π½Π° ΡƒΠ·Π΅Π»" - -msgid "HeatMapPanel.labelMode.text" -msgstr "Π Π΅ΠΆΠΈΠΌ:" - -msgid "HeatMapPanel.labelGradient.text" -msgstr "Π“Ρ€Π°Π΄ΠΈΠ΅Π½Ρ‚:" - -msgid "HeatMapPanel.labelPalette.text" -msgstr "ΠŸΠ°Π»ΠΈΡ‚Ρ€Π°:" - -msgid "HeatMapPanel.dontPaintUnreachableCheckbox.text" -msgstr "ΠŸΡ€ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ нСдостиТимыС" - -msgid "HeatMapPanel.invertPalette.text" -msgstr "Π˜Π½Π²Π΅Ρ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Π»ΠΈΡ‚Ρ€Ρƒ" - -msgid "PainterPanel.labelColor.text" -msgstr "Π¦Π²Π΅Ρ‚:" - -msgid "SizerPanel.jLabel1.text" -msgstr "НаТмитС Π½Π° ΡƒΠ·Π»Ρ‹ ΠΈ протянитС ΠΌΡ‹ΡˆΠΊΠΎΠΉ ΠΏΠΎ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΠΈ" - -msgid "SizerPanel.labelSize.text" -msgstr "Π Π°Π·ΠΌΠ΅Ρ€:" - -msgid "SizerPanel.sizeLabel.text" -msgstr "NaN" - -msgid "EdgePencilPanel.labelType.text" -msgstr "" - -msgid "EdgePencilPanel.type.directed" -msgstr "" - -msgid "EdgePencilPanel.type.undirected" -msgstr "" diff --git a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/zh_CN.po b/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/zh_CN.po deleted file mode 100644 index 76e2402602..0000000000 --- a/modules/ToolsPlugin/src/main/resources/org/gephi/ui/tools/plugin/zh_CN.po +++ /dev/null @@ -1,87 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:15+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "EdgePencilPanel.labelWeight.text" -msgstr "ζƒι‡οΌš" - -msgid "EdgePencilPanel.labelColor.text" -msgstr "ι’œθ‰²οΌš" - -msgid "BrushPanel.labelColor.text" -msgstr "ι’œθ‰²οΌš" - -msgid "BrushPanel.labelIntensity.text" -msgstr "强度:" - -msgid "BrushPanel.jLabel1.text" -msgstr "%" - -msgid "BrushPanel.labelDiffusion.text" -msgstr "ζ‰©ζ•£οΌš" - -msgid "NodePencilPanel.labelColor.text" -msgstr "ι’œθ‰²οΌš" - -msgid "NodePencilPanel.statusLabel.text" -msgstr "ζ·»εŠ θŠ‚η‚Ήεˆ°ε›Ύ" - -msgid "NodePencilPanel.labelSize.text" -msgstr "倧小:" - -msgid "ShortestPathPanel.labelColor.text" -msgstr "ι’œθ‰²οΌš" - -msgid "HeatMapPanel.statusLabel.text" -msgstr "η‚Ήε‡»θŠ‚η‚Ή" - -msgid "HeatMapPanel.labelMode.text" -msgstr "樑式:" - -msgid "HeatMapPanel.labelGradient.text" -msgstr "撯度:" - -msgid "HeatMapPanel.labelPalette.text" -msgstr "θ°ƒθ‰²ζΏοΌš" - -msgid "HeatMapPanel.dontPaintUnreachableCheckbox.text" -msgstr "不画无法θΏι—εŒΊ" - -msgid "HeatMapPanel.invertPalette.text" -msgstr "反转调色板" - -msgid "PainterPanel.labelColor.text" -msgstr "ι’œθ‰²οΌš" - -msgid "SizerPanel.jLabel1.text" -msgstr "ζŒ‰δ½θŠ‚η‚ΉεΉΆεž‚η›΄ζ‹–εŠ¨ιΌ ζ ‡" - -msgid "SizerPanel.labelSize.text" -msgstr "倧小:" - -msgid "SizerPanel.sizeLabel.text" -msgstr "NaN" - -msgid "EdgePencilPanel.labelType.text" -msgstr "" - -msgid "EdgePencilPanel.type.directed" -msgstr "" - -msgid "EdgePencilPanel.type.undirected" -msgstr "" diff --git a/modules/UIComponents/pom.xml b/modules/UIComponents/pom.xml index 37b9ab7110..f581634a0b 100644 --- a/modules/UIComponents/pom.xml +++ b/modules/UIComponents/pom.xml @@ -4,13 +4,13 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi ui-components - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm UIComponents @@ -28,6 +28,14 @@ ${project.groupId} ui-utils
            + + ${project.groupId} + utils + + + ${project.groupId} + desktop-icons + org.netbeans.api org-openide-awt @@ -36,6 +44,10 @@ org.netbeans.api org-openide-util + + org.netbeans.api + org-openide-util-ui + org.netbeans.api org-openide-nodes @@ -49,7 +61,7 @@ - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/BusyUtils.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/BusyUtils.java index 5ddf649c60..7cae0a3f44 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/BusyUtils.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/BusyUtils.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components; import java.awt.Dimension; @@ -48,7 +49,6 @@ Development and Distribution License("CDDL") (collectively, the import org.jdesktop.swingx.JXBusyLabel; /** - * * @author Mathieu Bastian */ public class BusyUtils { @@ -57,9 +57,10 @@ public class BusyUtils { * Creates a new JXBusyLabel wrapper and set it at the center of scrollPane. When users * calls BusyLabel.setBusy(false), the label is removed from scrollPanel and * component is set instead. + * * @param scrollPane the scroll Panel where the label is to be put - * @param text the text set to the newly created label - * @param component the component to set in scrollPane when it is not busy anymore + * @param text the text set to the newly created label + * @param component the component to set in scrollPane when it is not busy anymore * @return the newly created JXBusyLabel wrapper */ public static BusyLabel createCenteredBusyLabel(JScrollPane scrollPane, String text, JComponent component) { @@ -68,8 +69,8 @@ public static BusyLabel createCenteredBusyLabel(JScrollPane scrollPane, String t public static class BusyLabel { - private JScrollPane scrollPane; - private JXBusyLabel busyLabel; + private final JScrollPane scrollPane; + private final JXBusyLabel busyLabel; private JComponent component; private BusyLabel(JScrollPane scrollpane, String text, JComponent component) { diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/CloseButton.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/CloseButton.java index bad91361cb..9c593eab1e 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/CloseButton.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/CloseButton.java @@ -39,15 +39,16 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components; import javax.swing.Action; import javax.swing.ImageIcon; import javax.swing.JButton; import org.gephi.ui.utils.UIUtils; +import org.openide.util.ImageUtilities; /** - * * @author Mathieu Bastian */ public class CloseButton extends JButton { @@ -64,25 +65,39 @@ public CloseButton() { private void init() { if (UIUtils.isGTKLookAndFeel()) { - setIcon(new ImageIcon(getClass().getResource("/org/gephi/ui/components/resources/gtk_bigclose_enabled.png"))); - setRolloverIcon(new ImageIcon(getClass().getResource("/org/gephi/ui/components/resources/gtk_bigclose_rollover.png"))); - setPressedIcon(new ImageIcon(getClass().getResource("/org/gephi/ui/components/resources/gtk_bigclose_pressed.png"))); + setIcon( + ImageUtilities.loadImageIcon("UIComponents/gtk_bigclose_enabled.png", false)); + setRolloverIcon( + ImageUtilities.loadImageIcon("UIComponents/gtk_bigclose_rollover.png", false)); + setPressedIcon( + ImageUtilities.loadImageIcon("UIComponents/gtk_bigclose_pressed.png", false)); } else if (UIUtils.isWindowsClassicLookAndFeel()) { - setIcon(new ImageIcon(getClass().getResource("/org/gephi/ui/components/resources/win_bigclose_enabled.png"))); - setRolloverIcon(new ImageIcon(getClass().getResource("/org/gephi/ui/components/resources/win_bigclose_rollover.png"))); - setPressedIcon(new ImageIcon(getClass().getResource("/org/gephi/ui/components/resources/win_bigclose_pressed.png"))); + setIcon( + ImageUtilities.loadImageIcon("UIComponents/win_bigclose_enabled.png", false)); + setRolloverIcon( + ImageUtilities.loadImageIcon("UIComponents/win_bigclose_rollover.png", false)); + setPressedIcon( + ImageUtilities.loadImageIcon("UIComponents/win_bigclose_pressed.png", false)); } else if (UIUtils.isWindowsXPLookAndFeel()) { - setIcon(new ImageIcon(getClass().getResource("/org/gephi/ui/components/resources/xp_bigclose_enabled.png"))); - setRolloverIcon(new ImageIcon(getClass().getResource("/org/gephi/ui/components/resources/xp_bigclose_rollover.png"))); - setPressedIcon(new ImageIcon(getClass().getResource("/org/gephi/ui/components/resources/xp_bigclose_pressed.png"))); + setIcon( + ImageUtilities.loadImageIcon("UIComponents/xp_bigclose_enabled.png", false)); + setRolloverIcon( + ImageUtilities.loadImageIcon("UIComponents/xp_bigclose_rollover.png", false)); + setPressedIcon( + ImageUtilities.loadImageIcon("UIComponents/xp_bigclose_pressed.png", false)); } else if (UIUtils.isWindowsVistaLookAndFeel()) { - setIcon(new ImageIcon(getClass().getResource("/org/gephi/ui/components/resources/vista_bigclose_enabled.png"))); - setRolloverIcon(new ImageIcon(getClass().getResource("/org/gephi/ui/components/resources/vista_bigclose_rollover.png"))); - setPressedIcon(new ImageIcon(getClass().getResource("/org/gephi/ui/components/resources/vista_bigclose_pressed.png"))); + setIcon( + ImageUtilities.loadImageIcon("UIComponents/vista_bigclose_enabled.png", false)); + setRolloverIcon(ImageUtilities.loadImageIcon("UIComponents/vista_bigclose_rollover.png", false)); + setPressedIcon( + ImageUtilities.loadImageIcon("UIComponents/vista_bigclose_pressed.png", false)); } else if (UIUtils.isAquaLookAndFeel()) { - setIcon(new ImageIcon(getClass().getResource("/org/gephi/ui/components/resources/mac_bigclose_enabled.png"))); - setRolloverIcon(new ImageIcon(getClass().getResource("/org/gephi/ui/components/resources/mac_bigclose_rollover.png"))); - setPressedIcon(new ImageIcon(getClass().getResource("/org/gephi/ui/components/resources/mac_bigclose_pressed.png"))); + setIcon( + ImageUtilities.loadImageIcon("UIComponents/mac_bigclose_enabled.png", false)); + setRolloverIcon( + ImageUtilities.loadImageIcon("UIComponents/mac_bigclose_rollover.png", false)); + setPressedIcon( + ImageUtilities.loadImageIcon("UIComponents/mac_bigclose_pressed.png", false)); } setText(""); diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/ColumnSelectionPanel.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/ColumnSelectionPanel.java index 791f7b919d..33d44f891a 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/ColumnSelectionPanel.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/ColumnSelectionPanel.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components; import java.awt.Component; @@ -58,14 +59,44 @@ Development and Distribution License("CDDL") (collectively, the //Inspired by org.netbeans.swing.etable public class ColumnSelectionPanel extends JPanel { - private Map checkBoxes; + private final Map checkBoxes; public ColumnSelectionPanel(ColumnSelectionModel[] columns) { - checkBoxes = new HashMap(); + checkBoxes = new HashMap<>(); setLayout(new GridBagLayout()); init(columns); } + public static void showColumnSelectionPopup(ColumnSelectionModel[] columns, Component c) { + JPopupMenu popup = new JPopupMenu(); + + for (int col = 0; col < columns.length; col++) { + final ColumnSelectionModel column = columns[col]; + final JCheckBoxMenuItem checkBox = new JCheckBoxMenuItem(); + checkBox.setText(column.getName()); + checkBox.setSelected(column.isSelected()); + checkBox.setEnabled(column.isEnabled()); + checkBox.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent evt) { + column.setSelected(checkBox.isSelected()); + } + }); + popup.add(checkBox); + } + + popup.show(c, 8, 8); + } + + public static void showColumnSelectionDialog(ColumnSelectionModel[] columns, String dialogTitle) { + ColumnSelectionPanel panel = new ColumnSelectionPanel(columns); + int res = JOptionPane.showConfirmDialog(null, panel, dialogTitle, JOptionPane.OK_CANCEL_OPTION); + if (res == JOptionPane.OK_OPTION) { + panel.applyDialogChanges(); + } + } + public void init(ColumnSelectionModel[] columns) { int i = 0; int j = 0; @@ -96,51 +127,21 @@ public void init(ColumnSelectionModel[] columns) { } private void applyDialogChanges() { - for (Iterator it = checkBoxes.keySet().iterator(); it.hasNext();) { + for (Iterator it = checkBoxes.keySet().iterator(); it.hasNext(); ) { ColumnSelectionModel columnModel = it.next(); JCheckBox checkBox = checkBoxes.get(columnModel); columnModel.setSelected(checkBox.isSelected()); } } - public static void showColumnSelectionPopup(ColumnSelectionModel[] columns, Component c) { - JPopupMenu popup = new JPopupMenu(); - - for (int col = 0; col < columns.length; col++) { - final ColumnSelectionModel column = columns[col]; - final JCheckBoxMenuItem checkBox = new JCheckBoxMenuItem(); - checkBox.setText(column.getName()); - checkBox.setSelected(column.isSelected()); - checkBox.setEnabled(column.isEnabled()); - checkBox.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent evt) { - column.setSelected(checkBox.isSelected()); - } - }); - popup.add(checkBox); - } - - popup.show(c, 8, 8); - } - - public static void showColumnSelectionDialog(ColumnSelectionModel[] columns, String dialogTitle) { - ColumnSelectionPanel panel = new ColumnSelectionPanel(columns); - int res = JOptionPane.showConfirmDialog(null, panel, dialogTitle, JOptionPane.OK_CANCEL_OPTION); - if (res == JOptionPane.OK_OPTION) { - panel.applyDialogChanges(); - } - } - - public static interface ColumnSelectionModel { + public interface ColumnSelectionModel { - public boolean isEnabled(); + boolean isEnabled(); - public boolean isSelected(); + boolean isSelected(); - public void setSelected(boolean selected); + void setSelected(boolean selected); - public String getName(); + String getName(); } } diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/DecoratedIcon.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/DecoratedIcon.java index 63c3858653..7b5b11ffc2 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/DecoratedIcon.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/DecoratedIcon.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components; import java.awt.Component; @@ -47,7 +48,7 @@ Development and Distribution License("CDDL") (collectively, the /** * Decorated icon. A (smaller) decoration icon is placed at the top right. - * + * * @author Mathieu Bastian */ public class DecoratedIcon implements Icon { @@ -86,8 +87,8 @@ public int getIconHeight() { return orig.getIconHeight(); } - public static interface DecorationController { + public interface DecorationController { - public boolean isDecorated(); + boolean isDecorated(); } } diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/IconWithArrow.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/IconWithArrow.java index 6023b8a1a1..502a7a1db7 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/IconWithArrow.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/IconWithArrow.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components; import java.awt.Color; @@ -51,18 +52,21 @@ Development and Distribution License("CDDL") (collectively, the //author S. Aubrecht from org.openide.awt public class IconWithArrow implements Icon { - private static final String ARROW_IMAGE_NAME = "org/openide/awt/resources/arrow.png"; //NOI18N - private Icon orig; - private Icon arrow = ImageUtilities.image2Icon(ImageUtilities.loadImage(ARROW_IMAGE_NAME, false)); - private boolean paintRollOver; + private static final String ARROW_IMAGE_NAME = "UIComponents/arrow.svg"; //NOI18N private static final int GAP = 6; + private final Icon orig; + private final Icon arrow = ImageUtilities.image2Icon(ImageUtilities.loadImage(ARROW_IMAGE_NAME, false)); + private final boolean paintRollOver; - /** Creates a new instance of IconWithArrow */ public IconWithArrow(Icon orig, boolean paintRollOver) { this.orig = orig; this.paintRollOver = paintRollOver; } + public static int getArrowAreaWidth() { + return GAP / 2 + 5; + } + @Override public void paintIcon(Component c, Graphics g, int x, int y) { int height = getIconHeight(); @@ -80,10 +84,10 @@ public void paintIcon(Component c, Graphics g, int x, int y) { if (null != brighter && null != darker) { g.setColor(brighter); g.drawLine(x + orig.getIconWidth() + 1, y, - x + orig.getIconWidth() + 1, y + getIconHeight()); + x + orig.getIconWidth() + 1, y + getIconHeight()); g.setColor(darker); g.drawLine(x + orig.getIconWidth() + 2, y, - x + orig.getIconWidth() + 2, y + getIconHeight()); + x + orig.getIconWidth() + 2, y + getIconHeight()); } } } @@ -97,8 +101,4 @@ public int getIconWidth() { public int getIconHeight() { return Math.max(orig.getIconHeight(), arrow.getIconHeight()); } - - public static int getArrowAreaWidth() { - return GAP / 2 + 5; - } } diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/JColorBlackWhiteSwitcher.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/JColorBlackWhiteSwitcher.java index a781cd7ee2..a6d23e20c1 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/JColorBlackWhiteSwitcher.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/JColorBlackWhiteSwitcher.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components; import com.bric.swing.ColorPicker; @@ -60,13 +61,15 @@ Development and Distribution License("CDDL") (collectively, the */ public class JColorBlackWhiteSwitcher extends JButton { - public static String EVENT_COLOR = "color"; - private Color color; - private boolean includeOpacity; private final static int ICON_WIDTH = 16; private final static int ICON_HEIGHT = 16; private final static Color DISABLED_BORDER = new Color(200, 200, 200); private final static Color DISABLED_FILL = new Color(220, 220, 220); + public static String EVENT_COLOR = "color"; + private Color color; + private boolean includeOpacity; + private Color lightColor = Color.WHITE; + private Color darkColor = Color.BLACK; public JColorBlackWhiteSwitcher(Color color) { this(color, false); @@ -84,7 +87,8 @@ public JColorBlackWhiteSwitcher(Color originalColor, boolean includeOpacity) { @Override public void mouseClicked(MouseEvent e) { if (SwingUtilities.isRightMouseButton(e)) { - Color newColor = ColorPicker.showDialog(WindowManager.getDefault().getMainWindow(), color, JColorBlackWhiteSwitcher.this.includeOpacity); + Color newColor = ColorPicker.showDialog(WindowManager.getDefault().getMainWindow(), color, + JColorBlackWhiteSwitcher.this.includeOpacity); if (newColor != null) { setColor(newColor); } @@ -92,24 +96,43 @@ public void mouseClicked(MouseEvent e) { } }); /** - * Left click action: switch between white and black + * Left click action: switch between light and dark color */ addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - if (!color.equals(Color.BLACK) && !color.equals(Color.WHITE)) { - //Color is not white or black. Set to white to be swithed un future clicks - setColor(Color.WHITE); + if (!color.equals(darkColor) && !color.equals(lightColor)) { + //Color is not light or dark. Set to light color to be switched in future clicks + setColor(lightColor); } else { - setColor(new Color(0xffffff - color.getRGB()));//switch black-white + // Switch between light and dark color + if (color.equals(lightColor)) { + setColor(darkColor); + } else { + setColor(lightColor); + } } } }); } + private void refreshIcon() { + if (color.equals(lightColor)) {//Light color, show a lightbulb on: + setIcon(ImageUtilities.loadImageIcon("UIComponents/light-bulb.svg", false)); + } else if (color.equals(darkColor)) {//Dark color, show a lightbulb off: + setIcon(ImageUtilities.loadImageIcon("UIComponents/light-bulb-off.svg", false)); + } else { + setIcon(new ColorIcon());//Other color, show the color in a square as the icon + } + } + + public Color getColor() { + return color; + } + public void setColor(Color color) { - if (color != this.color || (color != null && !color.equals(this.color))) { + if (color != this.color) { Color oldColor = this.color; this.color = color; firePropertyChange(EVENT_COLOR, oldColor, color); @@ -118,6 +141,37 @@ public void setColor(Color color) { } } + public float[] getColorArray() { + return new float[] {color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, + color.getAlpha() / 255f}; + } + + public void setIncludeOpacity(boolean includeOpacity) { + this.includeOpacity = includeOpacity; + } + + public Color getLightColor() { + return lightColor; + } + + public void setLightColor(Color lightColor) { + if (lightColor != null && !lightColor.equals(this.lightColor)) { + this.lightColor = lightColor; + refreshIcon(); + } + } + + public Color getDarkColor() { + return darkColor; + } + + public void setDarkColor(Color darkColor) { + if (darkColor != null && !darkColor.equals(this.darkColor)) { + this.darkColor = darkColor; + refreshIcon(); + } + } + class ColorIcon implements Icon { @Override @@ -147,26 +201,4 @@ public void paintIcon(Component c, Graphics g, int x, int y) { } } } - - private void refreshIcon() { - if (color.equals(Color.WHITE)) {//White color, show a lightbulb on: - setIcon(ImageUtilities.loadImageIcon("org/gephi/ui/components/resources/light-bulb.png", false)); - } else if (color.equals(Color.BLACK)) {//Black color, show a lightbulb off: - setIcon(ImageUtilities.loadImageIcon("org/gephi/ui/components/resources/light-bulb-off.png", false)); - } else { - setIcon(new ColorIcon());//Other color, show the color in a square as the icon - } - } - - public Color getColor() { - return color; - } - - public float[] getColorArray() { - return new float[]{color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f}; - } - - public void setIncludeOpacity(boolean includeOpacity) { - this.includeOpacity = includeOpacity; - } } diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/JColorButton.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/JColorButton.java index f7846a4ea0..03e315685b 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/JColorButton.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/JColorButton.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components; import com.bric.swing.ColorPicker; @@ -49,24 +50,24 @@ Development and Distribution License("CDDL") (collectively, the import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.util.Objects; import javax.swing.Icon; import javax.swing.JButton; import javax.swing.SwingUtilities; import org.openide.windows.WindowManager; /** - * * @author Mathieu Bastian */ public class JColorButton extends JButton { - public static String EVENT_COLOR = "color"; - private Color color; - private boolean includeOpacity; private final static int ICON_WIDTH = 16; private final static int ICON_HEIGHT = 16; private final static Color DISABLED_BORDER = new Color(200, 200, 200); private final static Color DISABLED_FILL = new Color(220, 220, 220); + public static String EVENT_COLOR = "color"; + private Color color; + private boolean includeOpacity; public JColorButton(Color originalColor) { this(originalColor, false, false); @@ -112,7 +113,8 @@ public void paintIcon(Component c, Graphics g, int x, int y) { public void mouseClicked(MouseEvent e) { if (SwingUtilities.isRightMouseButton(e)) { - Color newColor = ColorPicker.showDialog(WindowManager.getDefault().getMainWindow(), color, JColorButton.this.includeOpacity); + Color newColor = ColorPicker.showDialog(WindowManager.getDefault().getMainWindow(), color, + JColorButton.this.includeOpacity); if (newColor != null) { setColor(newColor); } @@ -124,7 +126,8 @@ public void mouseClicked(MouseEvent e) { @Override public void actionPerformed(ActionEvent e) { - Color newColor = ColorPicker.showDialog(WindowManager.getDefault().getMainWindow(), color, JColorButton.this.includeOpacity); + Color newColor = ColorPicker.showDialog(WindowManager.getDefault().getMainWindow(), color, + JColorButton.this.includeOpacity); if (newColor != null) { setColor(newColor); } @@ -133,8 +136,12 @@ public void actionPerformed(ActionEvent e) { } } + public Color getColor() { + return color; + } + public void setColor(Color color) { - if (color != this.color || (color != null && !color.equals(this.color))) { + if (!Objects.equals(color, this.color)) { Color oldColor = this.color; this.color = color; firePropertyChange(EVENT_COLOR, oldColor, color); @@ -142,12 +149,9 @@ public void setColor(Color color) { } } - public Color getColor() { - return color; - } - public float[] getColorArray() { - return new float[]{color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, color.getAlpha() / 255f}; + return new float[] {color.getRed() / 255f, color.getGreen() / 255f, color.getBlue() / 255f, + color.getAlpha() / 255f}; } public void setIncludeOpacity(boolean includeOpacity) { diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/JDropDownButton.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/JDropDownButton.java index 30038ac00c..226605cd7c 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/JDropDownButton.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/JDropDownButton.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components; import java.awt.Point; @@ -61,10 +62,12 @@ Development and Distribution License("CDDL") (collectively, the //author S. Aubrecht from org.openide.awt public class JDropDownButton extends JButton { - private boolean mouseInButton = false; - private boolean mouseInArrowArea = false; - private Map regIcons = new HashMap(5); - private Map arrowIcons = new HashMap(5); + /** + * Use this property name to assign or remove popup menu to/from buttons created by this factory, + * e.g. dropDownButton.putClientProperty( PROP_DROP_DOWN_MENU, new JPopupMenu() ) + * The property value must be JPopupMenu, removing this property removes the arrow from the button. + */ + public static final String PROP_DROP_DOWN_MENU = "dropDownMenu"; private static final String ICON_NORMAL = "normal"; //NOI18N private static final String ICON_PRESSED = "pressed"; //NOI18N private static final String ICON_ROLLOVER = "rollover"; //NOI18N @@ -74,15 +77,12 @@ public class JDropDownButton extends JButton { private static final String ICON_DISABLED_SELECTED = "disabledSelected"; //NOI18N private static final String ICON_ROLLOVER_LINE = "rolloverLine"; //NOI18N private static final String ICON_ROLLOVER_SELECTED_LINE = "rolloverSelectedLine"; //NOI18N - /** - * Use this property name to assign or remove popup menu to/from buttons created by this factory, - * e.g. dropDownButton.putClientProperty( PROP_DROP_DOWN_MENU, new JPopupMenu() ) - * The property value must be JPopupMenu, removing this property removes the arrow from the button. - */ - public static final String PROP_DROP_DOWN_MENU = "dropDownMenu"; + private boolean mouseInButton = false; + private boolean mouseInArrowArea = false; + private final Map regIcons = new HashMap<>(5); + private final Map arrowIcons = new HashMap<>(5); private PopupMenuListener menuListener; - /** Creates a new instance of MenuToggleButton */ public JDropDownButton(Icon icon, JPopupMenu popup) { assert null != icon; @@ -117,7 +117,7 @@ public void mouseMoved(MouseEvent e) { @Override public void mousePressed(MouseEvent e) { - if(!isEnabled()) { + if (!isEnabled()) { return; } popupMenuOperation = false; @@ -171,6 +171,19 @@ public void mouseExited(MouseEvent e) { setModel(new Model()); } + /** + * Creates JButton with a small arrow that shows the provided popup menu when clicked. + * + * @param icon The default icon, cannot be null + * @param dropDownMenu Popup menu to display when the arrow is clicked. If this parameter is null + * then the button doesn't show any arrow and behaves like a regular JButton. It is possible to add + * the popup menu later using PROP_DROP_DOWN_MENU client property. + * @return A button that is capable of displaying an 'arrow' in its icon to open a popup menu. + */ + public static JButton createDropDownButton(Icon icon, JPopupMenu dropDownMenu) { + return new JDropDownButton(icon, dropDownMenu); + } + private PopupMenuListener getMenuListener() { if (null == menuListener) { menuListener = new PopupMenuListener() { @@ -431,17 +444,4 @@ public void setRollover(boolean b) { super.setRollover(b); } } - - /** - * Creates JButton with a small arrow that shows the provided popup menu when clicked. - * - * @param icon The default icon, cannot be null - * @param dropDownMenu Popup menu to display when the arrow is clicked. If this parameter is null - * then the button doesn't show any arrow and behaves like a regular JButton. It is possible to add - * the popup menu later using PROP_DROP_DOWN_MENU client property. - * @return A button that is capable of displaying an 'arrow' in its icon to open a popup menu. - */ - public static JButton createDropDownButton(Icon icon, JPopupMenu dropDownMenu) { - return new JDropDownButton(icon, dropDownMenu); - } } diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/JDropDownToggleButton.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/JDropDownToggleButton.java index 9398538726..363b322fb7 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/JDropDownToggleButton.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/JDropDownToggleButton.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components; import java.awt.Point; @@ -58,15 +59,16 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.ImageUtilities; /** - * * @author Mathieu Bastian */ public class JDropDownToggleButton extends JToggleButton { - private boolean mouseInButton = false; - private boolean mouseInArrowArea = false; - private Map regIcons = new HashMap(5); - private Map arrowIcons = new HashMap(5); + /** + * Use this property name to assign or remove popup menu to/from buttons created by this factory, + * e.g. dropDownButton.putClientProperty( PROP_DROP_DOWN_MENU, new JPopupMenu() ) + * The property value must be JPopupMenu, removing this property removes the arrow from the button. + */ + public static final String PROP_DROP_DOWN_MENU = "dropDownMenu"; private static final String ICON_NORMAL = "normal"; //NOI18N private static final String ICON_PRESSED = "pressed"; //NOI18N private static final String ICON_ROLLOVER = "rollover"; //NOI18N @@ -76,15 +78,12 @@ public class JDropDownToggleButton extends JToggleButton { private static final String ICON_DISABLED_SELECTED = "disabledSelected"; //NOI18N private static final String ICON_ROLLOVER_LINE = "rolloverLine"; //NOI18N private static final String ICON_ROLLOVER_SELECTED_LINE = "rolloverSelectedLine"; //NOI18N - /** - * Use this property name to assign or remove popup menu to/from buttons created by this factory, - * e.g. dropDownButton.putClientProperty( PROP_DROP_DOWN_MENU, new JPopupMenu() ) - * The property value must be JPopupMenu, removing this property removes the arrow from the button. - */ - public static final String PROP_DROP_DOWN_MENU = "dropDownMenu"; + private boolean mouseInButton = false; + private boolean mouseInArrowArea = false; + private final Map regIcons = new HashMap<>(5); + private final Map arrowIcons = new HashMap<>(5); private PopupMenuListener menuListener; - /** Creates a new instance of DropDownToggleButton */ public JDropDownToggleButton(Icon icon, JPopupMenu popup) { assert null != icon; @@ -170,6 +169,19 @@ public void mouseExited(MouseEvent e) { setModel(new Model()); } + /** + * Creates JToggleButton with a small arrow that shows the provided popup menu when clicked. + * + * @param icon The default icon, cannot be null + * @param dropDownMenu Popup menu to display when the arrow is clicked. If this parameter is null + * then the button doesn't show any arrow and behaves like a regular JToggleButton. It is possible to add + * the popup menu later using PROP_DROP_DOWN_MENU client property. + * @return A toggle-button that is capable of displaying an 'arrow' in its icon to open a popup menu. + */ + public static JToggleButton createDropDownToggleButton(Icon icon, JPopupMenu dropDownMenu) { + return new JDropDownToggleButton(icon, dropDownMenu); + } + private PopupMenuListener getMenuListener() { if (null == menuListener) { menuListener = new PopupMenuListener() { @@ -432,17 +444,4 @@ public void setRollover(boolean b) { super.setRollover(b); } } - - /** - * Creates JToggleButton with a small arrow that shows the provided popup menu when clicked. - * - * @param icon The default icon, cannot be null - * @param dropDownMenu Popup menu to display when the arrow is clicked. If this parameter is null - * then the button doesn't show any arrow and behaves like a regular JToggleButton. It is possible to add - * the popup menu later using PROP_DROP_DOWN_MENU client property. - * @return A toggle-button that is capable of displaying an 'arrow' in its icon to open a popup menu. - */ - public static JToggleButton createDropDownToggleButton(Icon icon, JPopupMenu dropDownMenu) { - return new JDropDownToggleButton(icon, dropDownMenu); - } } diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/JFreeChartDialog.form b/modules/UIComponents/src/main/java/org/gephi/ui/components/JFreeChartDialog.form index 56b27ad4ad..540d6a351e 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/JFreeChartDialog.form +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/JFreeChartDialog.form @@ -1,4 +1,4 @@ - +
            @@ -9,6 +9,7 @@ + diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/JFreeChartDialog.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/JFreeChartDialog.java index f9bb1530b2..63ba899bce 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/JFreeChartDialog.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/JFreeChartDialog.java @@ -39,25 +39,34 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components; import java.awt.Dimension; import org.jfree.chart.ChartPanel; import org.jfree.chart.JFreeChart; +import org.openide.util.ImageUtilities; /** * UI for showing a JFreeChart with the advantages of ChartPanel and also allows to resize the chart up to a maximum dimension. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class JFreeChartDialog extends javax.swing.JDialog { + private static final int MAX_DIMENSION = 3000; private ChartPanel chartPanel; - private static final int MAX_DIMENSION=3000; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton closeButton; + private javax.swing.JPanel jPanel1; + private javax.swing.JButton resetButton; + private javax.swing.JScrollPane scroll; + private javax.swing.JButton zoomInButton; + private javax.swing.JButton zoomOutButton; + // End of variables declaration//GEN-END:variables - /** - * Chart can't be null. - */ - public JFreeChartDialog(java.awt.Frame parent, String title, JFreeChart chart, int initialWidth, int initialHeight) { + public JFreeChartDialog(java.awt.Frame parent, String title, JFreeChart chart, int initialWidth, + int initialHeight) { super(parent, false); setTitle(title); initialize(chart); @@ -65,9 +74,6 @@ public JFreeChartDialog(java.awt.Frame parent, String title, JFreeChart chart, i setLocationRelativeTo(parent); } - /** - * Chart can't be null. - */ public JFreeChartDialog(java.awt.Frame parent, JFreeChart chart) { super(parent, false); initialize(chart); @@ -80,7 +86,7 @@ private void initialize(JFreeChart chart) { throw new IllegalArgumentException("Chart panel can't be null"); } this.chartPanel = new ChartPanel(chart, true); - + scroll.setViewportView(chartPanel); adaptChartPanelSizeToScrollSize(); scroll.revalidate(); @@ -98,30 +104,31 @@ private void applyZoom(float multiplier) { int width = (int) (chartPanel.getSize().width * multiplier); int heigth = (int) (chartPanel.getSize().height * multiplier); - width= width > MAX_DIMENSION ? MAX_DIMENSION : width; - heigth= heigth > MAX_DIMENSION ? MAX_DIMENSION : heigth; + width = width > MAX_DIMENSION ? MAX_DIMENSION : width; + heigth = heigth > MAX_DIMENSION ? MAX_DIMENSION : heigth; - chartPanel.setPreferredSize(new Dimension(width,heigth)); + chartPanel.setPreferredSize(new Dimension(width, heigth)); chartPanel.revalidate(); chartPanel.repaint(); } - public JFreeChart getChart(){ + public JFreeChart getChart() { return chartPanel.getChart(); } - public void setChart(JFreeChart chart){ + public void setChart(JFreeChart chart) { if (chart == null) { throw new IllegalArgumentException("Chart panel can't be null"); } chartPanel.setChart(chart); } - public Dimension getChartSize(){ + public Dimension getChartSize() { return chartPanel.getSize(); } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -143,32 +150,41 @@ private void initComponents() { scroll.setMinimumSize(new java.awt.Dimension(10, 10)); scroll.setPreferredSize(new java.awt.Dimension(10, 10)); - closeButton.setText(org.openide.util.NbBundle.getMessage(JFreeChartDialog.class, "JFreeChartDialog.closeButton.text")); // NOI18N + closeButton.setText(org.openide.util.NbBundle + .getMessage(JFreeChartDialog.class, "JFreeChartDialog.closeButton.text")); // NOI18N closeButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { closeButtonActionPerformed(evt); } }); - resetButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/ui/components/resources/magnifier-history.png"))); // NOI18N - resetButton.setText(org.openide.util.NbBundle.getMessage(JFreeChartDialog.class, "JFreeChartDialog.resetButton.text")); // NOI18N + resetButton.setIcon( + ImageUtilities.loadImageIcon("UIComponents/magnifier-history.svg", false)); // NOI18N + resetButton.setText(org.openide.util.NbBundle + .getMessage(JFreeChartDialog.class, "JFreeChartDialog.resetButton.text")); // NOI18N resetButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { resetButtonActionPerformed(evt); } }); - zoomOutButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/ui/components/resources/magnifier--minus.png"))); // NOI18N - zoomOutButton.setText(org.openide.util.NbBundle.getMessage(JFreeChartDialog.class, "JFreeChartDialog.zoomOutButton.text")); // NOI18N + zoomOutButton.setIcon(ImageUtilities.loadImageIcon("UIComponents/magnifier--minus.svg", false)); // NOI18N + zoomOutButton.setText(org.openide.util.NbBundle + .getMessage(JFreeChartDialog.class, "JFreeChartDialog.zoomOutButton.text")); // NOI18N zoomOutButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { zoomOutButtonActionPerformed(evt); } }); - zoomInButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/ui/components/resources/magnifier--plus.png"))); // NOI18N - zoomInButton.setText(org.openide.util.NbBundle.getMessage(JFreeChartDialog.class, "JFreeChartDialog.zoomInButton.text")); // NOI18N + zoomInButton.setIcon(ImageUtilities.loadImageIcon("UIComponents/magnifier--plus.svg", false)); // NOI18N + zoomInButton.setText(org.openide.util.NbBundle + .getMessage(JFreeChartDialog.class, "JFreeChartDialog.zoomInButton.text")); // NOI18N zoomInButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { zoomInButtonActionPerformed(evt); } @@ -178,69 +194,67 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(scroll, javax.swing.GroupLayout.DEFAULT_SIZE, 256, Short.MAX_VALUE) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() - .addContainerGap() - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(zoomOutButton, javax.swing.GroupLayout.DEFAULT_SIZE, 97, Short.MAX_VALUE) - .addComponent(zoomInButton, javax.swing.GroupLayout.DEFAULT_SIZE, 97, Short.MAX_VALUE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) - .addComponent(closeButton, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(resetButton)) - .addContainerGap()) + .addComponent(scroll, javax.swing.GroupLayout.DEFAULT_SIZE, 256, Short.MAX_VALUE) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() + .addContainerGap() + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(zoomOutButton, javax.swing.GroupLayout.DEFAULT_SIZE, 97, Short.MAX_VALUE) + .addComponent(zoomInButton, javax.swing.GroupLayout.DEFAULT_SIZE, 97, Short.MAX_VALUE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) + .addComponent(closeButton, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(resetButton)) + .addContainerGap()) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() - .addComponent(scroll, javax.swing.GroupLayout.DEFAULT_SIZE, 251, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(resetButton) - .addComponent(zoomInButton)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(zoomOutButton) - .addComponent(closeButton)) - .addContainerGap()) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel1Layout.createSequentialGroup() + .addComponent(scroll, javax.swing.GroupLayout.DEFAULT_SIZE, 251, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(resetButton) + .addComponent(zoomInButton)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(zoomOutButton) + .addComponent(closeButton)) + .addContainerGap()) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, + Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) ); pack(); }// //GEN-END:initComponents - private void closeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeButtonActionPerformed + private void closeButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeButtonActionPerformed dispose(); }//GEN-LAST:event_closeButtonActionPerformed - private void resetButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_resetButtonActionPerformed + private void resetButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_resetButtonActionPerformed adaptChartPanelSizeToScrollSize(); }//GEN-LAST:event_resetButtonActionPerformed - private void zoomInButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_zoomInButtonActionPerformed + private void zoomInButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_zoomInButtonActionPerformed applyZoom(1.5f); }//GEN-LAST:event_zoomInButtonActionPerformed - private void zoomOutButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_zoomOutButtonActionPerformed + private void zoomOutButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_zoomOutButtonActionPerformed applyZoom(0.5f); }//GEN-LAST:event_zoomOutButtonActionPerformed - - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton closeButton; - private javax.swing.JPanel jPanel1; - private javax.swing.JButton resetButton; - private javax.swing.JScrollPane scroll; - private javax.swing.JButton zoomInButton; - private javax.swing.JButton zoomOutButton; - // End of variables declaration//GEN-END:variables } diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/JHTMLEditorPane.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/JHTMLEditorPane.java index d32b583a9e..9ab925cf7a 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/JHTMLEditorPane.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/JHTMLEditorPane.java @@ -39,9 +39,13 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components; -import java.awt.*; +import java.awt.Color; +import java.awt.Cursor; +import java.awt.Font; +import java.awt.Toolkit; import java.awt.datatransfer.Clipboard; import java.awt.datatransfer.DataFlavor; import java.awt.datatransfer.StringSelection; @@ -58,7 +62,12 @@ Development and Distribution License("CDDL") (collectively, the import java.util.Hashtable; import java.util.Map; import java.util.ResourceBundle; -import javax.swing.*; +import javax.swing.JComponent; +import javax.swing.JEditorPane; +import javax.swing.JMenuItem; +import javax.swing.JPopupMenu; +import javax.swing.TransferHandler; +import javax.swing.UIManager; import javax.swing.event.HyperlinkEvent; import javax.swing.event.HyperlinkListener; import javax.swing.text.AttributeSet; @@ -76,88 +85,244 @@ Development and Distribution License("CDDL") (collectively, the public class JHTMLEditorPane extends JEditorPane implements HyperlinkListener, MouseListener { //~ Inner Classes ------------------------------------------------------------------------------------------------------------ - /** Private Writer that extracts correctly formatted string from HTMLDocument */ - private class ExtendedHTMLWriter extends HTMLWriter { - //~ Constructors --------------------------------------------------------------------------------------------------------- + // ----- + // I18N String constants + private static final ResourceBundle messages = ResourceBundle.getBundle("org.gephi.ui.components.Bundle"); // NOI18N - public ExtendedHTMLWriter(Writer w, HTMLDocument doc, int pos, int len) { - super(w, doc, pos, len); - setLineLength(Integer.MAX_VALUE); + // --- Private classes for copy/paste support -------------------------------- + // + // NOTE: only vertical formatting is correctly copy/pasted, + // horizontal formatting (ul, li) is ignored. + private static final String CUT_STRING = messages.getString("HTMLTextArea_CutString"); // NOI18N + private static final String COPY_STRING = messages.getString("HTMLTextArea_CopyString"); // NOI18N + + //~ Static fields/initializers ----------------------------------------------------------------------------------------------- + private static final String PASTE_STRING = messages.getString("HTMLTextArea_PasteString"); // NOI18N + private static final String DELETE_STRING = messages.getString("HTMLTextArea_DeleteString"); // NOI18N + private static final String SELECT_ALL_STRING = messages.getString("HTMLTextArea_SelectAllString"); // NOI18N + //~ Instance fields ---------------------------------------------------------------------------------------------------------- + private ActionListener popupListener; + private JMenuItem itemCopy; + private JMenuItem itemCut; + // ----- + private JMenuItem itemDelete; + private JMenuItem itemPaste; + private JMenuItem itemSelectAll; + // --- Popup menu support ---------------------------------------------------- + private JPopupMenu popupMenu; + private String originalText; + private boolean showPopup = true; + + //~ Constructors ------------------------------------------------------------------------------------------------------------- + public JHTMLEditorPane() { + super(); + setEditorKit(new HTMLEditorKit()); + setEditable(false); + setOpaque(true); + setAutoscrolls(true); + addHyperlinkListener(this); + setTransferHandler(new HTMLTextAreaTransferHandler()); + setFont(UIManager.getFont("Label.font")); //NOI18N + addMouseListener(this); + } + + public JHTMLEditorPane(String text) { + this(); + setText(text); + } + + //~ Methods ------------------------------------------------------------------------------------------------------------------ + @Override + public void setForeground(Color color) { + super.setForeground(color); + setText(originalText); + } + + public boolean getShowPopup() { + return showPopup; + } + + public void setShowPopup(boolean showPopup) { + this.showPopup = showPopup; + } + + @Override + public void setText(String value) { + if (value == null) { + return; } - //~ Methods -------------------------------------------------------------------------------------------------------------- - protected boolean isSupportedBreakFlowTag(AttributeSet attr) { - Object o = attr.getAttribute(StyleConstants.NameAttribute); + originalText = value; - if (o instanceof HTML.Tag) { - HTML.Tag tag = (HTML.Tag) o; + Font font = getFont(); + Color textColor = getForeground(); + value = value.replaceAll("\\n\\r|\\r\\n|\\n|\\r", "
            "); //NOI18N + value = value.replaceAll("", ""); //NOI18N - if ((tag == HTML.Tag.HTML) || (tag == HTML.Tag.HEAD) || (tag == HTML.Tag.BODY) || (tag == HTML.Tag.HR)) { - return false; - } + String colorText = + "rgb(" + textColor.getRed() + "," + textColor.getGreen() + "," + textColor.getBlue() + ")"; //NOI18N + super.setText( + "" + value + ""); //NOI18N + } - return (tag).breaksFlow(); - } + public void deleteSelection() { + try { + getDocument().remove(getSelectionStart(), getSelectionEnd() - getSelectionStart()); + } catch (Exception ex) { + } - return false; + } + + @Override + public void hyperlinkUpdate(HyperlinkEvent e) { + if (!isEnabled()) { + return; } - @Override - protected void emptyTag(Element elem) throws BadLocationException, IOException { - if (isSupportedBreakFlowTag(elem.getAttributes())) { - writeLineSeparator(); - } + if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { + showURL(e.getURL()); + } else if (e.getEventType() == HyperlinkEvent.EventType.ENTERED) { + setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); + } else if (e.getEventType() == HyperlinkEvent.EventType.EXITED) { + setCursor(Cursor.getDefaultCursor()); + } + } - if (matchNameAttribute(elem.getAttributes(), HTML.Tag.CONTENT)) { - text(elem); + @Override + public void mouseClicked(MouseEvent e) { + if (e.getModifiers() == InputEvent.BUTTON3_MASK) { + if (isEnabled() && isFocusable() && showPopup) { + JPopupMenu popup = getPopupMenu(); + + if (popup != null) { + updatePopupMenu(); + + if (!hasFocus()) { + requestFocus(); // required for Select All functionality + } + + popup.show(this, e.getX(), e.getY()); + } } } + } - @Override - protected void endTag(Element elem) throws IOException { - if (isSupportedBreakFlowTag(elem.getAttributes())) { - writeLineSeparator(); - } + @Override + public void mouseEntered(MouseEvent e) { + } + + @Override + public void mouseExited(MouseEvent e) { + } + + @Override + public void mousePressed(MouseEvent e) { + } + + @Override + public void mouseReleased(MouseEvent e) { + } + + @Override + public void paste() { + try { + replaceSelection(Toolkit.getDefaultToolkit().getSystemClipboard().getContents(this) + .getTransferData(DataFlavor.stringFlavor).toString()); + } catch (Exception ex) { } + } - @Override - protected void startTag(Element elem) throws IOException, BadLocationException { + protected JPopupMenu getPopupMenu() { + if (popupMenu == null) { + popupMenu = createPopupMenu(); } + + return popupMenu; } - // --- Private classes for copy/paste support -------------------------------- - // - // NOTE: only vertical formatting is correctly copy/pasted, - // horizontal formatting (ul, li) is ignored. - /** Private TransferHandler that copies correctly formatted string from HTMLDocument to system clipboard */ - private class HTMLTextAreaTransferHandler extends TransferHandler { - //~ Methods -------------------------------------------------------------------------------------------------------------- + protected JPopupMenu createPopupMenu() { + JPopupMenu popup = new JPopupMenu(); - @Override - public void exportToClipboard(JComponent comp, Clipboard clip, int action) { - try { - int selStart = getSelectionStart(); - int selLength = getSelectionEnd() - selStart; + popupListener = createPopupListener(); - StringWriter plainTextWriter = new StringWriter(); + itemCut = new JMenuItem(CUT_STRING); + itemCopy = new JMenuItem(COPY_STRING); + itemPaste = new JMenuItem(PASTE_STRING); + itemDelete = new JMenuItem(DELETE_STRING); + itemSelectAll = new JMenuItem(SELECT_ALL_STRING); - try { - new ExtendedHTMLWriter(plainTextWriter, (HTMLDocument) getDocument(), selStart, selLength).write(); - } catch (Exception e) { - } + itemCut.addActionListener(popupListener); + itemCopy.addActionListener(popupListener); + itemPaste.addActionListener(popupListener); + itemDelete.addActionListener(popupListener); + itemSelectAll.addActionListener(popupListener); - String plainText = NcrToUnicode.decode(plainTextWriter.toString()); - clip.setContents(new StringSelection(plainText), null); + popup.add(itemCut); + popup.add(itemCopy); + popup.add(itemPaste); + popup.add(itemDelete); + popup.addSeparator(); + popup.add(itemSelectAll); - if (action == TransferHandler.MOVE) { - getDocument().remove(selStart, selLength); + return popup; + } + + protected void showURL(URL url) { + // override to react to URL clicks + } + + protected void updatePopupMenu() { + // Cut + itemCut.setEnabled(isEditable() && (getSelectedText() != null)); + + // Copy + itemCopy.setEnabled(getSelectedText() != null); + + // Paste + try { + Transferable clipboardContent = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(this); + itemPaste.setEnabled(isEditable() && (clipboardContent != null) && + clipboardContent.isDataFlavorSupported(DataFlavor.stringFlavor)); + } catch (Exception e) { + itemPaste.setEnabled(false); + } + + // Delete + if (isEditable()) { + itemDelete.setVisible(true); + itemDelete.setEnabled(getSelectedText() != null); + } else { + itemDelete.setVisible(false); + } + + // Select All + // always visible and enabled... + } + + private ActionListener createPopupListener() { + return new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + if (e.getSource() == itemCut) { + cut(); + } else if (e.getSource() == itemCopy) { + copy(); + } else if (e.getSource() == itemPaste) { + paste(); + } else if (e.getSource() == itemDelete) { + deleteSelection(); + } else if (e.getSource() == itemSelectAll) { + selectAll(); } - } catch (BadLocationException ble) { } - } + }; } - /** Class for decoding strings from NCR to Unicode */ + /** + * Class for decoding strings from NCR to Unicode + */ private static class NcrToUnicode { //~ Static fields/initializers ------------------------------------------------------------------------------------------- @@ -173,16 +338,16 @@ public static String decode(String str) { i1 = str.indexOf("&", i2); //NOI18N if (i1 == -1) { - ostr.append(str.substring(i2, str.length())); + ostr.append(str.substring(i2)); break; } - ostr.append(str.substring(i2, i1)); + ostr.append(str, i2, i1); i2 = str.indexOf(";", i1); //NOI18N if (i2 == -1) { - ostr.append(str.substring(i1, str.length())); + ostr.append(str.substring(i1)); break; } @@ -192,7 +357,8 @@ public static String decode(String str) { if (tok.charAt(0) == '#') { //NOI18N if (tok.equals("#160")) { //NOI18N - ostr.append(getEntities().get("nbsp")); //NOI18N // Fixes Issue 92818, " " is resolved as " " before decoding, so redirecting back to " " + ostr.append(getEntities().get( + "nbsp")); //NOI18N // Fixes Issue 92818, " " is resolved as " " before decoding, so redirecting back to " " } else { tok = tok.substring(1); @@ -201,7 +367,7 @@ public static String decode(String str) { if (tok.trim().charAt(0) == 'x') { //NOI18N radix = 16; - tok = tok.substring(1, tok.length()); + tok = tok.substring(1); } ostr.append((char) Integer.parseInt(tok, radix)); @@ -241,7 +407,8 @@ private static synchronized Map getEntities() { entities.put("gt", "\u003E"); //NOI18N //Nonbreaking space - entities.put("nbsp", "\u0020"); //NOI18N // Fixes Issue 92818, "\u00A0" (  equivalent) is resolved as incorrect character, thus mapping to standard space + entities.put("nbsp", + "\u0020"); //NOI18N // Fixes Issue 92818, "\u00A0" (  equivalent) is resolved as incorrect character, thus mapping to standard space //Inverted exclamation point entities.put("iexcl", "\u00A1"); //NOI18N @@ -533,231 +700,85 @@ private static synchronized Map getEntities() { } } - //~ Static fields/initializers ----------------------------------------------------------------------------------------------- - - // ----- - // I18N String constants - private static final ResourceBundle messages = ResourceBundle.getBundle("org.gephi.ui.components.Bundle"); // NOI18N - private static final String CUT_STRING = messages.getString("HTMLTextArea_CutString"); // NOI18N - private static final String COPY_STRING = messages.getString("HTMLTextArea_CopyString"); // NOI18N - private static final String PASTE_STRING = messages.getString("HTMLTextArea_PasteString"); // NOI18N - private static final String DELETE_STRING = messages.getString("HTMLTextArea_DeleteString"); // NOI18N - private static final String SELECT_ALL_STRING = messages.getString("HTMLTextArea_SelectAllString"); // NOI18N - // ----- - - //~ Instance fields ---------------------------------------------------------------------------------------------------------- - private ActionListener popupListener; - private JMenuItem itemCopy; - private JMenuItem itemCut; - private JMenuItem itemDelete; - private JMenuItem itemPaste; - private JMenuItem itemSelectAll; - - // --- Popup menu support ---------------------------------------------------- - private JPopupMenu popupMenu; - private String originalText; - private boolean showPopup = true; - - //~ Constructors ------------------------------------------------------------------------------------------------------------- - public JHTMLEditorPane() { - super(); - setEditorKit(new HTMLEditorKit()); - setEditable(false); - setOpaque(true); - setAutoscrolls(true); - addHyperlinkListener(this); - setTransferHandler(new HTMLTextAreaTransferHandler()); - setFont(UIManager.getFont("Label.font")); //NOI18N - addMouseListener(this); - } - - public JHTMLEditorPane(String text) { - this(); - setText(text); - } - - //~ Methods ------------------------------------------------------------------------------------------------------------------ - @Override - public void setForeground(Color color) { - super.setForeground(color); - setText(originalText); - } - - public void setShowPopup(boolean showPopup) { - this.showPopup = showPopup; - } - - public boolean getShowPopup() { - return showPopup; - } + /** + * Private Writer that extracts correctly formatted string from HTMLDocument + */ + private class ExtendedHTMLWriter extends HTMLWriter { + //~ Constructors --------------------------------------------------------------------------------------------------------- - @Override - public void setText(String value) { - if (value == null) { - return; + public ExtendedHTMLWriter(Writer w, HTMLDocument doc, int pos, int len) { + super(w, doc, pos, len); + setLineLength(Integer.MAX_VALUE); } - originalText = value; - - Font font = getFont(); - Color textColor = getForeground(); - value = value.replaceAll("\\n\\r|\\r\\n|\\n|\\r", "
            "); //NOI18N - value = value.replaceAll("", ""); //NOI18N - - String colorText = "rgb(" + textColor.getRed() + "," + textColor.getGreen() + "," + textColor.getBlue() + ")"; //NOI18N - super.setText("" + value + ""); //NOI18N - } + //~ Methods -------------------------------------------------------------------------------------------------------------- + protected boolean isSupportedBreakFlowTag(AttributeSet attr) { + Object o = attr.getAttribute(StyleConstants.NameAttribute); - public void deleteSelection() { - try { - getDocument().remove(getSelectionStart(), getSelectionEnd() - getSelectionStart()); - } catch (Exception ex) { - } + if (o instanceof HTML.Tag) { + HTML.Tag tag = (HTML.Tag) o; - ; - } + if ((tag == HTML.Tag.HTML) || (tag == HTML.Tag.HEAD) || (tag == HTML.Tag.BODY) || + (tag == HTML.Tag.HR)) { + return false; + } - @Override - public void hyperlinkUpdate(HyperlinkEvent e) { - if (!isEnabled()) { - return; - } + return (tag).breaksFlow(); + } - if (e.getEventType() == HyperlinkEvent.EventType.ACTIVATED) { - showURL(e.getURL()); - } else if (e.getEventType() == HyperlinkEvent.EventType.ENTERED) { - setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - } else if (e.getEventType() == HyperlinkEvent.EventType.EXITED) { - setCursor(Cursor.getDefaultCursor()); + return false; } - } - - @Override - public void mouseClicked(MouseEvent e) { - if (e.getModifiers() == InputEvent.BUTTON3_MASK) { - if (isEnabled() && isFocusable() && showPopup) { - JPopupMenu popup = getPopupMenu(); - if (popup != null) { - updatePopupMenu(); - - if (!hasFocus()) { - requestFocus(); // required for Select All functionality - } + @Override + protected void emptyTag(Element elem) throws BadLocationException, IOException { + if (isSupportedBreakFlowTag(elem.getAttributes())) { + writeLineSeparator(); + } - popup.show(this, e.getX(), e.getY()); - } + if (matchNameAttribute(elem.getAttributes(), HTML.Tag.CONTENT)) { + text(elem); } } - } - - @Override - public void mouseEntered(MouseEvent e) { - } - - @Override - public void mouseExited(MouseEvent e) { - } - @Override - public void mousePressed(MouseEvent e) { - } - - @Override - public void mouseReleased(MouseEvent e) { - } - - @Override - public void paste() { - try { - replaceSelection(Toolkit.getDefaultToolkit().getSystemClipboard().getContents(this).getTransferData(DataFlavor.stringFlavor).toString()); - } catch (Exception ex) { + @Override + protected void endTag(Element elem) throws IOException { + if (isSupportedBreakFlowTag(elem.getAttributes())) { + writeLineSeparator(); + } } - } - protected JPopupMenu getPopupMenu() { - if (popupMenu == null) { - popupMenu = createPopupMenu(); + @Override + protected void startTag(Element elem) throws IOException, BadLocationException { } - - return popupMenu; - } - - protected JPopupMenu createPopupMenu() { - JPopupMenu popup = new JPopupMenu(); - - popupListener = createPopupListener(); - - itemCut = new JMenuItem(CUT_STRING); - itemCopy = new JMenuItem(COPY_STRING); - itemPaste = new JMenuItem(PASTE_STRING); - itemDelete = new JMenuItem(DELETE_STRING); - itemSelectAll = new JMenuItem(SELECT_ALL_STRING); - - itemCut.addActionListener(popupListener); - itemCopy.addActionListener(popupListener); - itemPaste.addActionListener(popupListener); - itemDelete.addActionListener(popupListener); - itemSelectAll.addActionListener(popupListener); - - popup.add(itemCut); - popup.add(itemCopy); - popup.add(itemPaste); - popup.add(itemDelete); - popup.addSeparator(); - popup.add(itemSelectAll); - - return popup; - } - - protected void showURL(URL url) { - // override to react to URL clicks } - protected void updatePopupMenu() { - // Cut - itemCut.setEnabled(isEditable() && (getSelectedText() != null)); - - // Copy - itemCopy.setEnabled(getSelectedText() != null); + /** + * Private TransferHandler that copies correctly formatted string from HTMLDocument to system clipboard + */ + private class HTMLTextAreaTransferHandler extends TransferHandler { + //~ Methods -------------------------------------------------------------------------------------------------------------- - // Paste - try { - Transferable clipboardContent = Toolkit.getDefaultToolkit().getSystemClipboard().getContents(this); - itemPaste.setEnabled(isEditable() && (clipboardContent != null) && clipboardContent.isDataFlavorSupported(DataFlavor.stringFlavor)); - } catch (Exception e) { - itemPaste.setEnabled(false); - } + @Override + public void exportToClipboard(JComponent comp, Clipboard clip, int action) { + try { + int selStart = getSelectionStart(); + int selLength = getSelectionEnd() - selStart; - // Delete - if (isEditable()) { - itemDelete.setVisible(true); - itemDelete.setEnabled(getSelectedText() != null); - } else { - itemDelete.setVisible(false); - } + StringWriter plainTextWriter = new StringWriter(); - // Select All - // always visible and enabled... - } + try { + new ExtendedHTMLWriter(plainTextWriter, (HTMLDocument) getDocument(), selStart, selLength).write(); + } catch (Exception e) { + } - private ActionListener createPopupListener() { - return new ActionListener() { + String plainText = NcrToUnicode.decode(plainTextWriter.toString()); + clip.setContents(new StringSelection(plainText), null); - @Override - public void actionPerformed(ActionEvent e) { - if (e.getSource() == itemCut) { - cut(); - } else if (e.getSource() == itemCopy) { - copy(); - } else if (e.getSource() == itemPaste) { - paste(); - } else if (e.getSource() == itemDelete) { - deleteSelection(); - } else if (e.getSource() == itemSelectAll) { - selectAll(); + if (action == TransferHandler.MOVE) { + getDocument().remove(selStart, selLength); } + } catch (BadLocationException ble) { } - }; + } } } diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/JImagePanel.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/JImagePanel.java index f3a809be35..2be8885d61 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/JImagePanel.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/JImagePanel.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components; import java.awt.Color; @@ -56,7 +57,7 @@ Development and Distribution License("CDDL") (collectively, the public class JImagePanel extends JPanel { //~ Static fields/initializers ----------------------------------------------------------------------------------------------- - private static MediaTracker mTracker = new MediaTracker(new JPanel()); + private static final MediaTracker mTracker = new MediaTracker(new JPanel()); //~ Instance fields ---------------------------------------------------------------------------------------------------------- private Image image; @@ -72,6 +73,20 @@ public JImagePanel(Image image, int imageAlign) { setImageAlign(imageAlign); } + protected static Image loadImage(Image image) { + mTracker.addImage(image, 0); + + try { + mTracker.waitForID(0); + } catch (InterruptedException e) { + return null; + } + + mTracker.removeImage(image, 0); + + return image; + } + //~ Methods ------------------------------------------------------------------------------------------------------------------ public void setImage(Image image) { this.image = loadImage(image); @@ -94,20 +109,6 @@ public void setImageAlign(int imageAlign) { refresh(); } - protected static Image loadImage(Image image) { - mTracker.addImage(image, 0); - - try { - mTracker.waitForID(0); - } catch (InterruptedException e) { - return null; - } - - mTracker.removeImage(image, 0); - - return image; - } - protected void setPreferredBackground() { int[] pixels = new int[1]; @@ -145,7 +146,8 @@ protected void paintComponent(Graphics graphics) { break; case (SwingConstants.BOTTOM): - graphics.drawImage(image, (getWidth() - image.getWidth(null)) / 2, getHeight() - image.getHeight(null), this); + graphics.drawImage(image, (getWidth() - image.getWidth(null)) / 2, getHeight() - image.getHeight(null), + this); break; default: diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/JMenuToggleButton.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/JMenuToggleButton.java index fc9194a09a..651c297267 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/JMenuToggleButton.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/JMenuToggleButton.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components; import java.awt.Component; @@ -58,7 +59,9 @@ class JMenuToggleButton extends JToggleButton { private boolean mouseInArrowArea = false; - /** Creates a new instance of MenuToggleButton */ + /** + * Creates a new instance of MenuToggleButton + */ public JMenuToggleButton(final Icon regIcon, Icon rollOverIcon, int arrowWidth) { assert null != regIcon; assert null != rollOverIcon; @@ -118,8 +121,8 @@ private boolean isInArrowArea(Point p) { private static class LineIcon implements Icon { - private Icon origIcon; - private int arrowWidth; + private final Icon origIcon; + private final int arrowWidth; public LineIcon(Icon origIcon, int arrowWidth) { this.origIcon = origIcon; @@ -132,10 +135,10 @@ public void paintIcon(Component c, Graphics g, int x, int y) { g.setColor(UIManager.getColor("controlHighlight")); //NOI18N g.drawLine(x + origIcon.getIconWidth() - arrowWidth - 2, y, - x + origIcon.getIconWidth() - arrowWidth - 2, y + getIconHeight()); + x + origIcon.getIconWidth() - arrowWidth - 2, y + getIconHeight()); g.setColor(UIManager.getColor("controlShadow")); //NOI18N g.drawLine(x + origIcon.getIconWidth() - arrowWidth - 3, y, - x + origIcon.getIconWidth() - arrowWidth - 3, y + getIconHeight()); + x + origIcon.getIconWidth() - arrowWidth - 3, y + getIconHeight()); } @Override diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/JPopupButton.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/JPopupButton.java index cff461f181..4e60ef1c54 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/JPopupButton.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/JPopupButton.java @@ -39,31 +39,35 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components; +import java.awt.Color; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; +import javax.swing.GrayFilter; +import javax.swing.ImageIcon; import javax.swing.Icon; import javax.swing.JButton; import javax.swing.JPopupMenu; import javax.swing.JRadioButtonMenuItem; +import javax.swing.UIManager; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; +import org.openide.util.ImageUtilities; /** - * * @author Mathieu Bastian */ public class JPopupButton extends JButton { - private ArrayList items; + private final ArrayList items; private JPopupButtonItem selectedItem; private ChangeListener listener; public JPopupButton() { - - items = new ArrayList(); + items = new ArrayList<>(); addActionListener(new ActionListener() { @Override @@ -74,10 +78,24 @@ public void actionPerformed(ActionEvent e) { }); } + @Override + public void setIcon(Icon defaultIcon) { + IconWithArrow iconWithArrow = new IconWithArrow(defaultIcon, false); + super.setIcon(iconWithArrow); + + // Ensure a proper disabled icon is available (grays out both base icon and arrow) + Icon disabled = UIManager.getLookAndFeel().getDisabledIcon(this, iconWithArrow); + if (disabled == null) { + disabled = new ImageIcon(GrayFilter.createDisabledImage(ImageUtilities.icon2Image(iconWithArrow))); + } + super.setDisabledIcon(disabled); + super.setDisabledSelectedIcon(disabled); + } + public JPopupMenu createPopup() { JPopupMenu menu = new JPopupMenu(); for (final JPopupButtonItem item : items) { - JRadioButtonMenuItem r = new JRadioButtonMenuItem(item.object.toString(), item.icon, item == selectedItem); + final JRadioButtonMenuItem r = new JRadioButtonMenuItem(item.toString(), item.icon, item == selectedItem); r.addActionListener(new ActionListener() { @Override @@ -88,13 +106,51 @@ public void actionPerformed(ActionEvent e) { } } }); + + // Use background highlight for hover/armed state to match platform look + r.setOpaque(true); + final Color defaultBackground = UIManager.getColor("MenuItem.background") != null + ? UIManager.getColor("MenuItem.background") : r.getBackground(); + final Color selectionBackground = UIManager.getColor("MenuItem.selectionBackground") != null + ? UIManager.getColor("MenuItem.selectionBackground") : defaultBackground; + + // Persist highlight for the currently selected item + if (item == selectedItem) { + r.setBackground(selectionBackground); + } + + // Foreground color should reflect selection/hover state + final Color defaultForeground = UIManager.getColor("MenuItem.foreground") != null + ? UIManager.getColor("MenuItem.foreground") : r.getForeground(); + final Color selectionForeground = UIManager.getColor("MenuItem.selectionForeground") != null + ? UIManager.getColor("MenuItem.selectionForeground") : defaultForeground; + r.setForeground(item == selectedItem ? selectionForeground : defaultForeground); + r.setSelected(item == selectedItem); + + r.getModel().addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + boolean armed = r.getModel().isArmed(); + boolean active = armed || item == selectedItem; + r.setBackground(active ? selectionBackground : defaultBackground); + r.setForeground(active ? selectionForeground : defaultForeground); + } + }); menu.add(r); } return menu; } public void addItem(Object object, Icon icon) { - items.add(new JPopupButtonItem(object, icon)); + items.add(new JPopupButtonItem(object, icon, null)); + } + + public void addItem(Object object, Icon icon, String displayString) { + items.add(new JPopupButtonItem(object, icon, displayString)); + } + + public Object getSelectedItem() { + return selectedItem.object; } public void setSelectedItem(Object item) { @@ -104,11 +160,7 @@ public void setSelectedItem(Object item) { return; } } - throw new IllegalArgumentException("This elemen doesn't exist."); - } - - public Object getSelectedItem() { - return selectedItem.object; + throw new IllegalArgumentException("This element doesn't exist."); } public void setChangeListener(ChangeListener changeListener) { @@ -121,14 +173,25 @@ private void fireChangeEvent() { } } - private class JPopupButtonItem { + private static class JPopupButtonItem { private final Object object; private final Icon icon; + private final String displayString; - public JPopupButtonItem(Object object, Icon icon) { + public JPopupButtonItem(Object object, Icon icon, String displayString) { this.object = object; this.icon = icon; + this.displayString = displayString; + } + + @Override + public String toString() { + if (displayString != null) { + return displayString; + } else { + return object.toString(); + } } } } diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/JPopupPane.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/JPopupPane.java index 22e8e04308..8a95f7baa2 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/JPopupPane.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/JPopupPane.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components; import java.awt.AWTEvent; @@ -72,12 +73,12 @@ Development and Distribution License("CDDL") (collectively, the //Author Milos Kleint (mkleint@netbeans.org) public class JPopupPane { - private HideAWTListener hideListener; - private JComponent ancestor; + private final HideAWTListener hideListener; + private final JComponent ancestor; private boolean showingPopup = false; private JPopupPaneComponent pane; private JWindow popupWindow; - private JPanel view; + private final JPanel view; public JPopupPane(JComponent ancestor, JPanel content) { this.ancestor = ancestor; @@ -85,8 +86,85 @@ public JPopupPane(JComponent ancestor, JPanel content) { hideListener = new HideAWTListener(); } + public void showPopupPane() { + if (pane == null) { + pane = new JPopupPaneComponent(); + } + if (popupWindow == null) { + popupWindow = new JWindow(WindowManager.getDefault().getMainWindow()); + } + popupWindow.getContentPane().add(pane); + showingPopup = true; + + Toolkit.getDefaultToolkit().addAWTEventListener(hideListener, AWTEvent.MOUSE_EVENT_MASK); + WindowManager.getDefault().getMainWindow().addWindowStateListener(hideListener); + WindowManager.getDefault().getMainWindow().addComponentListener(hideListener); + resizePopup(); + popupWindow.setVisible(true); + pane.requestFocus(); + } + + private void resizePopup() { + popupWindow.pack(); + Point point = new Point(0, 0); + SwingUtilities.convertPointToScreen(point, ancestor); + Dimension dim = popupWindow.getSize(); + Rectangle usableRect = Utilities.getUsableScreenBounds(); + int sepShift = 0; + Point loc = + new Point(point.x + ancestor.getSize().width - dim.width - sepShift - 5 * 2, point.y - dim.height - 5); + if (!usableRect.contains(loc)) { + loc = new Point(loc.x, point.y + 5 + ancestor.getSize().height); + } + popupWindow.setLocation(loc); + } + + public void hidePopup() { + if (popupWindow != null) { +// popupWindow.getContentPane().removeAll(); + popupWindow.setVisible(false); + } + Toolkit.getDefaultToolkit().removeAWTEventListener(hideListener); + WindowManager.getDefault().getMainWindow().removeWindowStateListener(hideListener); + WindowManager.getDefault().getMainWindow().removeComponentListener(hideListener); + showingPopup = false; + } + + public boolean isPopupShown() { + return showingPopup; + } + + private static class BottomLineBorder implements Border { + + private final Insets ins = new Insets(0, 0, 1, 0); + private final Color col = new Color(221, 229, 248); + + public BottomLineBorder() { + } + + @Override + public Insets getBorderInsets(Component c) { + return ins; + } + + @Override + public boolean isBorderOpaque() { + return false; + } + + @Override + public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { + Color old = g.getColor(); + g.setColor(col); + g.drawRect(x, y + height - 2, width, 1); + g.setColor(old); + } + } + private class JPopupPaneComponent extends JScrollPane { + static final int ITEM_WIDTH = 400; + public JPopupPaneComponent() { setName("jpopuppane"); GridLayout grid = new GridLayout(0, 1); @@ -98,7 +176,6 @@ public JPopupPaneComponent() { setRequestFocusEnabled(true); setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_NEVER); } - static final int ITEM_WIDTH = 400; @Override public Dimension getPreferredSize() { @@ -107,7 +184,7 @@ public Dimension getPreferredSize() { int offset = count > 6 ? height * 6 + 5 : (count * height) + 5; // 22 is the width of the additional scrollbar return new Dimension(count > 3 ? ITEM_WIDTH + 22 - : ITEM_WIDTH + 2, offset); + : ITEM_WIDTH + 2, offset); } private int findIndex(Component comp) { @@ -121,33 +198,6 @@ private int findIndex(Component comp) { } } - private static class BottomLineBorder implements Border { - - private Insets ins = new Insets(0, 0, 1, 0); - private Color col = new Color(221, 229, 248); - - public BottomLineBorder() { - } - - @Override - public Insets getBorderInsets(Component c) { - return ins; - } - - @Override - public boolean isBorderOpaque() { - return false; - } - - @Override - public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { - Color old = g.getColor(); - g.setColor(col); - g.drawRect(x, y + height - 2, width, 1); - g.setColor(old); - } - } - private class HideAWTListener extends ComponentAdapter implements AWTEventListener, WindowStateListener { @Override @@ -175,7 +225,7 @@ public void windowStateChanged(WindowEvent windowEvent) { int newState = windowEvent.getNewState(); if (((oldState & Frame.ICONIFIED) == 0) && - ((newState & Frame.ICONIFIED) == Frame.ICONIFIED)) { + ((newState & Frame.ICONIFIED) == Frame.ICONIFIED)) { hidePopup(); // } else if (((oldState & Frame.ICONIFIED) == Frame.ICONIFIED) && // ((newState & Frame.ICONIFIED) == 0 )) { @@ -199,52 +249,5 @@ public void componentMoved(ComponentEvent evt) { } } } - - public void showPopupPane() { - if (pane == null) { - pane = new JPopupPaneComponent(); - } - if (popupWindow == null) { - popupWindow = new JWindow(WindowManager.getDefault().getMainWindow()); - } - popupWindow.getContentPane().add(pane); - showingPopup = true; - - Toolkit.getDefaultToolkit().addAWTEventListener(hideListener, AWTEvent.MOUSE_EVENT_MASK); - WindowManager.getDefault().getMainWindow().addWindowStateListener(hideListener); - WindowManager.getDefault().getMainWindow().addComponentListener(hideListener); - resizePopup(); - popupWindow.setVisible(true); - pane.requestFocus(); - } - - private void resizePopup() { - popupWindow.pack(); - Point point = new Point(0, 0); - SwingUtilities.convertPointToScreen(point, ancestor); - Dimension dim = popupWindow.getSize(); - Rectangle usableRect = Utilities.getUsableScreenBounds(); - int sepShift = 0; - Point loc = new Point(point.x + ancestor.getSize().width - dim.width - sepShift - 5 * 2, point.y - dim.height - 5); - if (!usableRect.contains(loc)) { - loc = new Point(loc.x, point.y + 5 + ancestor.getSize().height); - } - popupWindow.setLocation(loc); - } - - public void hidePopup() { - if (popupWindow != null) { -// popupWindow.getContentPane().removeAll(); - popupWindow.setVisible(false); - } - Toolkit.getDefaultToolkit().removeAWTEventListener(hideListener); - WindowManager.getDefault().getMainWindow().removeWindowStateListener(hideListener); - WindowManager.getDefault().getMainWindow().removeComponentListener(hideListener); - showingPopup = false; - } - - public boolean isPopupShown() { - return showingPopup; - } } diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/JRangeSlider.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/JRangeSlider.java index 401dfb1667..fb4a4a5c50 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/JRangeSlider.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/JRangeSlider.java @@ -39,9 +39,9 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components; -import com.sun.java.swing.plaf.windows.WindowsSliderUI; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; @@ -53,15 +53,12 @@ Development and Distribution License("CDDL") (collectively, the import javax.swing.JComponent; import javax.swing.JSlider; import javax.swing.SwingUtilities; -import javax.swing.UIManager; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicSliderUI; -import javax.swing.plaf.basic.BasicSliderUI.TrackListener; /** - * * @author Mathieu Bastian */ public class JRangeSlider extends JSlider { @@ -71,11 +68,15 @@ public class JRangeSlider extends JSlider { * and 100. */ public JRangeSlider() { + } /** * Constructs a RangeSlider with the specified default minimum and maximum * values. + * + * @param min minimum + * @param max maximum */ public JRangeSlider(int min, int max) { super(min, max); @@ -87,12 +88,7 @@ public JRangeSlider(int min, int max) { */ @Override public void updateUI() { - ComponentUI uiv = UIManager.getUI(this); - if (uiv instanceof WindowsSliderUI) { - uiv = new JRangeSliderWindowsUI(this); - } else { - uiv = new JRangeSliderBasicUI(this); - } + ComponentUI uiv = new JRangeSliderBasicUI(this); setUI(uiv); // Update UI for slider labels. This must be called after updating the // UI of the slider. Refer to JSlider.updateUI(). @@ -109,6 +105,8 @@ public int getValue() { /** * Sets the lower value in the range. + * + * @param value lower value */ @Override public void setValue(int value) { @@ -124,11 +122,13 @@ public void setValue(int value) { // Set new value and extent, and fire a single change event. getModel().setRangeProperties(newValue, newExtent, getMinimum(), - getMaximum(), getValueIsAdjusting()); + getMaximum(), getValueIsAdjusting()); } /** * Returns the upper value in the range. + * + * @return upper value */ public int getUpperValue() { return getValue() + getExtent(); @@ -136,6 +136,8 @@ public int getUpperValue() { /** * Sets the upper value in the range. + * + * @param value upper value */ public void setUpperValue(int value) { // Compute new extent. @@ -161,595 +163,38 @@ public void setValues(int low, int high) { // Set new value and extent, and fire a single change event. getModel().setRangeProperties(newValue, extent, getMinimum(), - getMaximum(), getValueIsAdjusting()); + getMaximum(), getValueIsAdjusting()); } } - private static class JRangeSliderWindowsUI extends WindowsSliderUI { - - /** Color of selected range. */ - //private Color rangeColor = new Color(168,223,85,178);//nice green - private Color rangeColor = new Color(49, 220, 251, 178);//nice vista blue - /** Location and size of thumb for upper value. */ - private Rectangle upperThumbRect; - /** Indicator that determines whether upper thumb is selected. */ - private boolean upperThumbSelected; - /** Indicator set when lower thumb is being dragged. */ - private transient boolean lowerDragging; - /** Indicator set when upper thumb is being dragged. */ - private transient boolean upperDragging; - - /** - * Constructs a RangeSliderUI for the specified slider component. - * @param b RangeSlider - */ - public JRangeSliderWindowsUI(JSlider slider) { - super(slider); - - /*Color rColor = UIManager.getColor("Slider.focus"); - if(rColor!=null) { - rangeColor = rColor; - }*/ - } - - /** - * Installs this UI delegate on the specified component. - */ - @Override - public void installUI(JComponent c) { - upperThumbRect = new Rectangle(); - super.installUI(c); - } - - /** - * Creates a listener to handle track events in the specified slider. - */ - @Override - protected TrackListener createTrackListener(JSlider slider) { - return new RangeTrackListener(); - } - - /** - * Creates a listener to handle change events in the specified slider. - */ - @Override - protected ChangeListener createChangeListener(JSlider slider) { - return new ChangeHandler(); - } - - /** - * Updates the dimensions for both thumbs. - */ - @Override - protected void calculateThumbSize() { - // Call superclass method for lower thumb size. - super.calculateThumbSize(); - - // Set upper thumb size. - upperThumbRect.setSize(thumbRect.width, thumbRect.height); - } - - /** - * Updates the locations for both thumbs. - */ - @Override - protected void calculateThumbLocation() { - // Call superclass method for lower thumb location. - super.calculateThumbLocation(); - - // Adjust upper value to snap to ticks if necessary. - if (slider.getSnapToTicks()) { - int upperValue = slider.getValue() + slider.getExtent(); - int snappedValue = upperValue; - int majorTickSpacing = slider.getMajorTickSpacing(); - int minorTickSpacing = slider.getMinorTickSpacing(); - int tickSpacing = 0; - - if (minorTickSpacing > 0) { - tickSpacing = minorTickSpacing; - } else if (majorTickSpacing > 0) { - tickSpacing = majorTickSpacing; - } - - if (tickSpacing != 0) { - // If it's not on a tick, change the value - if ((upperValue - slider.getMinimum()) % tickSpacing != 0) { - float temp = (float) (upperValue - slider.getMinimum()) / (float) tickSpacing; - int whichTick = Math.round(temp); - snappedValue = slider.getMinimum() + (whichTick * tickSpacing); - } - - if (snappedValue != upperValue) { - slider.setExtent(snappedValue - slider.getValue()); - } - } - } - - // Calculate upper thumb location. The thumb is centered over its - // value on the track. - if (slider.getOrientation() == JSlider.HORIZONTAL) { - int upperPosition = xPositionForValue(slider.getValue() + slider.getExtent()); - upperThumbRect.x = upperPosition - (upperThumbRect.width / 2); - upperThumbRect.y = trackRect.y; - - } else { - int upperPosition = yPositionForValue(slider.getValue() + slider.getExtent()); - upperThumbRect.x = trackRect.x; - upperThumbRect.y = upperPosition - (upperThumbRect.height / 2); - } - } + private static class JRangeSliderBasicUI extends BasicSliderUI { /** - * Paints the slider. The selected thumb is always painted on top of the - * other thumb. + * Color of selected range. */ - @Override - public void paint(Graphics g, JComponent c) { - super.paint(g, c); - Rectangle r = thumbRect; - thumbRect = upperThumbRect; - paintThumb(g); - thumbRect = r; - //paintThumb(g); - /*Rectangle clipRect = g.getClipBounds(); - if (upperThumbSelected) { - // Paint lower thumb first, then upper thumb. - if (clipRect.intersects(thumbRect)) { - paintLowerThumb(g); - } - if (clipRect.intersects(upperThumbRect)) { - paintUpperThumb(g); - } - - } else { - // Paint upper thumb first, then lower thumb. - if (clipRect.intersects(upperThumbRect)) { - paintUpperThumb(g); - } - if (clipRect.intersects(thumbRect)) { - paintLowerThumb(g); - } - }*/ - } - + //private Color rangeColor = new Color(168,223,85,178);//nice green + private final Color rangeColor = new Color(49, 220, 251, 178);//nice vista blue /** - * Paints the track. + * Location and size of thumb for upper value. */ - @Override - public void paintTrack(Graphics g) { - // Draw track. - super.paintTrack(g); - - Rectangle trackBounds = trackRect; - - if (slider.getOrientation() == JSlider.HORIZONTAL) { - // Determine position of selected range by moving from the middle - // of one thumb to the other. - int lowerX = thumbRect.x + (thumbRect.width / 2); - int upperX = upperThumbRect.x + (upperThumbRect.width / 2); - - // Determine track position. - int cy = (trackBounds.height / 2) - 2; - - // Save color and shift position. - Color oldColor = g.getColor(); - g.translate(trackBounds.x, trackBounds.y + cy); - - // Draw selected range. - g.setColor(rangeColor); - for (int y = 0; y <= 3; y++) { - g.drawLine(lowerX - trackBounds.x, y, upperX - trackBounds.x, y); - } - - // Restore position and color. - g.translate(-trackBounds.x, -(trackBounds.y + cy)); - g.setColor(oldColor); - - } else { - // Determine position of selected range by moving from the middle - // of one thumb to the other. - int lowerY = thumbRect.y + (thumbRect.height / 2); - int upperY = upperThumbRect.y + (upperThumbRect.height / 2); - - // Determine track position. - int cx = (trackBounds.width / 2) - 2; - - // Save color and shift position. - Color oldColor = g.getColor(); - g.translate(trackBounds.x + cx, trackBounds.y); - - // Draw selected range. - g.setColor(rangeColor); - for (int x = 0; x <= 3; x++) { - g.drawLine(x, lowerY - trackBounds.y, x, upperY - trackBounds.y); - } - - // Restore position and color. - g.translate(-(trackBounds.x + cx), -trackBounds.y); - g.setColor(oldColor); - } - } - + private Rectangle upperThumbRect; /** - * Paints the thumb for the lower value using the specified graphics object. + * Indicator that determines whether upper thumb is selected. */ - private void paintLowerThumb(Graphics g) { - Rectangle knobBounds = thumbRect; - int w = knobBounds.width; - int h = knobBounds.height; - - // Create graphics copy. - Graphics2D g2d = (Graphics2D) g.create(); - - // Create default thumb shape. - Shape thumbShape = createThumbShape(w - 1, h - 1); - - // Draw thumb. - g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); - g2d.translate(knobBounds.x, knobBounds.y); - - g2d.setColor(Color.CYAN); - g2d.fill(thumbShape); - - g2d.setColor(Color.BLUE); - g2d.draw(thumbShape); - - // Dispose graphics. - g2d.dispose(); - } - + private boolean upperThumbSelected; /** - * Paints the thumb for the upper value using the specified graphics object. + * Indicator set when lower thumb is being dragged. */ - private void paintUpperThumb(Graphics g) { - Rectangle knobBounds = upperThumbRect; - int w = knobBounds.width; - int h = knobBounds.height; - - // Create graphics copy. - Graphics2D g2d = (Graphics2D) g.create(); - - // Create default thumb shape. - Shape thumbShape = createThumbShape(w - 1, h - 1); - - // Draw thumb. - g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); - g2d.translate(knobBounds.x, knobBounds.y); - - g2d.setColor(Color.PINK); - g2d.fill(thumbShape); - - g2d.setColor(Color.RED); - g2d.draw(thumbShape); - - // Dispose graphics. - g2d.dispose(); - } - + private transient boolean lowerDragging; /** - * Returns a Shape representing a thumb. + * Indicator set when upper thumb is being dragged. */ - private Shape createThumbShape(int width, int height) { - // Use circular shape. - Ellipse2D shape = new Ellipse2D.Double(0, 0, width, height); - return shape; - } - - /** - * Sets the location of the upper thumb, and repaints the slider. This is - * called when the upper thumb is dragged to repaint the slider. The - * setThumbLocation() method performs the same task for the - * lower thumb. - */ - private void setUpperThumbLocation(int x, int y) { - Rectangle upperUnionRect = new Rectangle(); - upperUnionRect.setBounds(upperThumbRect); - - upperThumbRect.setLocation(x, y); - - SwingUtilities.computeUnion(upperThumbRect.x, upperThumbRect.y, upperThumbRect.width, upperThumbRect.height, upperUnionRect); - slider.repaint(upperUnionRect.x, upperUnionRect.y, upperUnionRect.width, upperUnionRect.height); - } - - /** - * Moves the selected thumb in the specified direction by a block increment. - * This method is called when the user presses the Page Up or Down keys. - */ - @Override - public void scrollByBlock(int direction) { - synchronized (slider) { - int blockIncrement = (slider.getMaximum() - slider.getMinimum()) / 10; - if (blockIncrement <= 0 && slider.getMaximum() > slider.getMinimum()) { - blockIncrement = 1; - } - int delta = blockIncrement * ((direction > 0) ? POSITIVE_SCROLL : NEGATIVE_SCROLL); - - if (upperThumbSelected) { - int oldValue = ((JRangeSlider) slider).getUpperValue(); - ((JRangeSlider) slider).setUpperValue(oldValue + delta); - } else { - int oldValue = slider.getValue(); - slider.setValue(oldValue + delta); - } - } - } - - /** - * Moves the selected thumb in the specified direction by a unit increment. - * This method is called when the user presses one of the arrow keys. - */ - @Override - public void scrollByUnit(int direction) { - synchronized (slider) { - int delta = 1 * ((direction > 0) ? POSITIVE_SCROLL : NEGATIVE_SCROLL); - - if (upperThumbSelected) { - int oldValue = ((JRangeSlider) slider).getUpperValue(); - ((JRangeSlider) slider).setUpperValue(oldValue + delta); - } else { - int oldValue = slider.getValue(); - slider.setValue(oldValue + delta); - } - } - } - - /** - * Listener to handle model change events. This calculates the thumb - * locations and repaints the slider if the value change is not caused by - * dragging a thumb. - */ - public class ChangeHandler implements ChangeListener { - - @Override - public void stateChanged(ChangeEvent arg0) { - if (!lowerDragging && !upperDragging) { - calculateThumbLocation(); - slider.repaint(); - } - } - } - - /** - * Listener to handle mouse movements in the slider track. - */ - public class RangeTrackListener extends TrackListener { - - @Override - public void mousePressed(MouseEvent e) { - if (!slider.isEnabled()) { - return; - } - - currentMouseX = e.getX(); - currentMouseY = e.getY(); - - if (slider.isRequestFocusEnabled()) { - slider.requestFocus(); - } - - // Determine which thumb is pressed. If the upper thumb is - // selected (last one dragged), then check its position first; - // otherwise check the position of the lower thumb first. - boolean lowerPressed = false; - boolean upperPressed = false; - if (upperThumbSelected) { - if (upperThumbRect.contains(currentMouseX, currentMouseY)) { - upperPressed = true; - } else if (thumbRect.contains(currentMouseX, currentMouseY)) { - lowerPressed = true; - } - } else { - if (thumbRect.contains(currentMouseX, currentMouseY)) { - lowerPressed = true; - } else if (upperThumbRect.contains(currentMouseX, currentMouseY)) { - upperPressed = true; - } - } - - // Handle lower thumb pressed. - if (lowerPressed) { - switch (slider.getOrientation()) { - case JSlider.VERTICAL: - offset = currentMouseY - thumbRect.y; - break; - case JSlider.HORIZONTAL: - offset = currentMouseX - thumbRect.x; - break; - } - upperThumbSelected = false; - lowerDragging = true; - return; - } - lowerDragging = false; - - // Handle upper thumb pressed. - if (upperPressed) { - switch (slider.getOrientation()) { - case JSlider.VERTICAL: - offset = currentMouseY - upperThumbRect.y; - break; - case JSlider.HORIZONTAL: - offset = currentMouseX - upperThumbRect.x; - break; - } - upperThumbSelected = true; - upperDragging = true; - return; - } - upperDragging = false; - } - - @Override - public void mouseReleased(MouseEvent e) { - lowerDragging = false; - upperDragging = false; - slider.setValueIsAdjusting(false); - super.mouseReleased(e); - } - - @Override - public void mouseDragged(MouseEvent e) { - if (!slider.isEnabled()) { - return; - } - - currentMouseX = e.getX(); - currentMouseY = e.getY(); - - if (lowerDragging) { - slider.setValueIsAdjusting(true); - moveLowerThumb(); - - } else if (upperDragging) { - slider.setValueIsAdjusting(true); - moveUpperThumb(); - } - } - - @Override - public boolean shouldScroll(int direction) { - return false; - } - - /** - * Moves the location of the lower thumb, and sets its corresponding - * value in the slider. - */ - private void moveLowerThumb() { - int thumbMiddle = 0; - - switch (slider.getOrientation()) { - case JSlider.VERTICAL: - int halfThumbHeight = thumbRect.height / 2; - int thumbTop = currentMouseY - offset; - int trackTop = trackRect.y; - int trackBottom = trackRect.y + (trackRect.height - 1); - int vMax = yPositionForValue(slider.getValue() + slider.getExtent()); - - // Apply bounds to thumb position. - if (drawInverted()) { - trackBottom = vMax; - } else { - trackTop = vMax; - } - thumbTop = Math.max(thumbTop, trackTop - halfThumbHeight); - thumbTop = Math.min(thumbTop, trackBottom - halfThumbHeight); - - setThumbLocation(thumbRect.x, thumbTop); - - // Update slider value. - thumbMiddle = thumbTop + halfThumbHeight; - slider.setValue(valueForYPosition(thumbMiddle)); - break; - - case JSlider.HORIZONTAL: - int halfThumbWidth = thumbRect.width / 2; - int thumbLeft = currentMouseX - offset; - int trackLeft = trackRect.x; - int trackRight = trackRect.x + (trackRect.width - 1); - int hMax = xPositionForValue(slider.getValue() + slider.getExtent()); - - // Apply bounds to thumb position. - if (drawInverted()) { - trackLeft = hMax; - } else { - trackRight = hMax; - } - thumbLeft = Math.max(thumbLeft, trackLeft - halfThumbWidth); - thumbLeft = Math.min(thumbLeft, trackRight - halfThumbWidth); - - setThumbLocation(thumbLeft, thumbRect.y); - - // Update slider value. - thumbMiddle = thumbLeft + halfThumbWidth; - slider.setValue(valueForXPosition(thumbMiddle)); - break; - - default: - return; - } - } - - /** - * Moves the location of the upper thumb, and sets its corresponding - * value in the slider. - */ - private void moveUpperThumb() { - int thumbMiddle = 0; - - switch (slider.getOrientation()) { - case JSlider.VERTICAL: - int halfThumbHeight = thumbRect.height / 2; - int thumbTop = currentMouseY - offset; - int trackTop = trackRect.y; - int trackBottom = trackRect.y + (trackRect.height - 1); - int vMin = yPositionForValue(slider.getValue()); - - // Apply bounds to thumb position. - if (drawInverted()) { - trackTop = vMin; - } else { - trackBottom = vMin; - } - thumbTop = Math.max(thumbTop, trackTop - halfThumbHeight); - thumbTop = Math.min(thumbTop, trackBottom - halfThumbHeight); - - setUpperThumbLocation(thumbRect.x, thumbTop); - - // Update slider extent. - thumbMiddle = thumbTop + halfThumbHeight; - slider.setExtent(valueForYPosition(thumbMiddle) - slider.getValue()); - break; - - case JSlider.HORIZONTAL: - int halfThumbWidth = thumbRect.width / 2; - int thumbLeft = currentMouseX - offset; - int trackLeft = trackRect.x; - int trackRight = trackRect.x + (trackRect.width - 1); - int hMin = xPositionForValue(slider.getValue()); - - // Apply bounds to thumb position. - if (drawInverted()) { - trackRight = hMin; - } else { - trackLeft = hMin; - } - thumbLeft = Math.max(thumbLeft, trackLeft - halfThumbWidth); - thumbLeft = Math.min(thumbLeft, trackRight - halfThumbWidth); - - setUpperThumbLocation(thumbLeft, thumbRect.y); - - // Update slider extent. - thumbMiddle = thumbLeft + halfThumbWidth; - slider.setExtent(valueForXPosition(thumbMiddle) - slider.getValue()); - break; - - default: - return; - } - } - } - } - - private static class JRangeSliderBasicUI extends BasicSliderUI { - - /** Color of selected range. */ - //private Color rangeColor = new Color(168,223,85,178);//nice green - private Color rangeColor = new Color(49, 220, 251, 178);//nice vista blue - /** Location and size of thumb for upper value. */ - private Rectangle upperThumbRect; - /** Indicator that determines whether upper thumb is selected. */ - private boolean upperThumbSelected; - /** Indicator set when lower thumb is being dragged. */ - private transient boolean lowerDragging; - /** Indicator set when upper thumb is being dragged. */ private transient boolean upperDragging; /** * Constructs a RangeSliderUI for the specified slider component. - * @param b RangeSlider + * + * @param slider RangeSlider */ public JRangeSliderBasicUI(JSlider slider) { super(slider); @@ -954,7 +399,7 @@ private void paintLowerThumb(Graphics g) { // Draw thumb. g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); + RenderingHints.VALUE_ANTIALIAS_ON); g2d.translate(knobBounds.x, knobBounds.y); g2d.setColor(Color.CYAN); @@ -983,7 +428,7 @@ private void paintUpperThumb(Graphics g) { // Draw thumb. g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); + RenderingHints.VALUE_ANTIALIAS_ON); g2d.translate(knobBounds.x, knobBounds.y); g2d.setColor(Color.PINK); @@ -1017,7 +462,8 @@ private void setUpperThumbLocation(int x, int y) { upperThumbRect.setLocation(x, y); - SwingUtilities.computeUnion(upperThumbRect.x, upperThumbRect.y, upperThumbRect.width, upperThumbRect.height, upperUnionRect); + SwingUtilities.computeUnion(upperThumbRect.x, upperThumbRect.y, upperThumbRect.width, upperThumbRect.height, + upperUnionRect); slider.repaint(upperUnionRect.x, upperUnionRect.y, upperUnionRect.width, upperUnionRect.height); } diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/JRangeSliderPanel.form b/modules/UIComponents/src/main/java/org/gephi/ui/components/JRangeSliderPanel.form index 914ccf695c..34075fe5c9 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/JRangeSliderPanel.form +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/JRangeSliderPanel.form @@ -1,4 +1,4 @@ - + @@ -41,7 +41,6 @@ - @@ -58,7 +57,6 @@ - diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/JRangeSliderPanel.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/JRangeSliderPanel.java index 886b58460a..9a611a625d 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/JRangeSliderPanel.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/JRangeSliderPanel.java @@ -39,19 +39,25 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components; +import java.awt.Cursor; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.FocusAdapter; import java.awt.event.FocusEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.math.MathContext; +import java.math.RoundingMode; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; +import org.gephi.utils.NumberUtils; /** - * * @author Mathieu Bastian */ public class JRangeSliderPanel extends javax.swing.JPanel { @@ -62,20 +68,28 @@ public class JRangeSliderPanel extends javax.swing.JPanel { private String lowerBound = "N/A"; private String upperBound = "N/A"; private Range range; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JTextField lowerBoundTextField; + private javax.swing.JSlider rangeSlider; + private javax.swing.JTextField upperBoundTextField; + // End of variables declaration//GEN-END:variables - /** Creates new form JRangeSliderPanel */ + /** + * Creates new form JRangeSliderPanel + */ public JRangeSliderPanel() { initComponents(); ((JRangeSlider) rangeSlider).setUpperValue(1000); rangeSlider.setOpaque(false); lowerBoundTextField.setOpaque(false); + lowerBoundTextField.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); upperBoundTextField.setOpaque(false); + upperBoundTextField.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); lowerBoundTextField.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { - lowerBoundTextField.setEnabled(true); lowerBoundTextField.selectAll(); } }); @@ -83,31 +97,21 @@ public void mouseClicked(MouseEvent e) { @Override public void actionPerformed(ActionEvent e) { - if (!lowerBoundTextField.getText().equals(lowerBound)) { - lowerBound = lowerBoundTextField.getText(); - if (range != null) { - range.setLowerBound(lowerBound); - firePropertyChange(LOWER_BOUND, null, lowerBound); - } - } else { - lowerBound = lowerBoundTextField.getText(); - } - refreshBoundTexts(); - lowerBoundTextField.setEnabled(false); + applyLowerBound(); + JRangeSliderPanel.this.requestFocusInWindow(); } }); lowerBoundTextField.addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent e) { - lowerBoundTextField.setEnabled(false); + applyLowerBound(); } }); upperBoundTextField.addMouseListener(new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { - upperBoundTextField.setEnabled(true); upperBoundTextField.selectAll(); } }); @@ -115,24 +119,15 @@ public void mouseClicked(MouseEvent e) { @Override public void actionPerformed(ActionEvent e) { - if (!upperBoundTextField.getText().equals(upperBound)) { - upperBound = upperBoundTextField.getText(); - if (range != null) { - range.setUpperBound(upperBound); - firePropertyChange(UPPER_BOUND, null, upperBound); - } - } else { - upperBound = upperBoundTextField.getText(); - } - refreshBoundTexts(); - upperBoundTextField.setEnabled(false); + applyUpperBound(); + JRangeSliderPanel.this.requestFocusInWindow(); } }); upperBoundTextField.addFocusListener(new FocusAdapter() { @Override public void focusLost(FocusEvent e) { - upperBoundTextField.setEnabled(false); + applyUpperBound(); } }); @@ -151,6 +146,32 @@ public void stateChanged(ChangeEvent e) { }); } + private void applyLowerBound() { + if (!lowerBoundTextField.getText().equals(lowerBound)) { + lowerBound = lowerBoundTextField.getText(); + if (range != null) { + range.setLowerBound(lowerBound); + firePropertyChange(LOWER_BOUND, null, lowerBound); + } + } else { + lowerBound = lowerBoundTextField.getText(); + } + refreshBoundTexts(); + } + + private void applyUpperBound() { + if (!upperBoundTextField.getText().equals(upperBound)) { + upperBound = upperBoundTextField.getText(); + if (range != null) { + range.setUpperBound(upperBound); + firePropertyChange(UPPER_BOUND, null, upperBound); + } + } else { + upperBound = upperBoundTextField.getText(); + } + refreshBoundTexts(); + } + private void refreshBoundTexts() { if (range != null) { lowerBound = range.lowerBound.toString(); @@ -184,10 +205,8 @@ public void setRange(Range range) { } - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. + /** + * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The content of this method is always regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // //GEN-BEGIN:initComponents @@ -211,9 +230,9 @@ private void initComponents() { gridBagConstraints.weightx = 1.0; add(rangeSlider, gridBagConstraints); - lowerBoundTextField.setText(org.openide.util.NbBundle.getMessage(JRangeSliderPanel.class, "JRangeSliderPanel.lowerBoundTextField.text")); // NOI18N + lowerBoundTextField.setText(org.openide.util.NbBundle + .getMessage(JRangeSliderPanel.class, "JRangeSliderPanel.lowerBoundTextField.text")); // NOI18N lowerBoundTextField.setBorder(null); - lowerBoundTextField.setEnabled(false); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 1; @@ -223,9 +242,9 @@ private void initComponents() { add(lowerBoundTextField, gridBagConstraints); upperBoundTextField.setHorizontalAlignment(javax.swing.JTextField.RIGHT); - upperBoundTextField.setText(org.openide.util.NbBundle.getMessage(JRangeSliderPanel.class, "JRangeSliderPanel.upperBoundTextField.text")); // NOI18N + upperBoundTextField.setText(org.openide.util.NbBundle + .getMessage(JRangeSliderPanel.class, "JRangeSliderPanel.upperBoundTextField.text")); // NOI18N upperBoundTextField.setBorder(null); - upperBoundTextField.setEnabled(false); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 1; gridBagConstraints.gridy = 1; @@ -235,173 +254,116 @@ private void initComponents() { gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 5); add(upperBoundTextField, gridBagConstraints); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JTextField lowerBoundTextField; - private javax.swing.JSlider rangeSlider; - private javax.swing.JTextField upperBoundTextField; - // End of variables declaration//GEN-END:variables - public static class Range { + public static class Range { - private JRangeSliderPanel slider; - private Object min; - private Object max; - private Object lowerBound; - private Object upperBound; + private final JRangeSliderPanel slider; + private final Class type; + private final T min; + private final T max; + private T lowerBound; + private T upperBound; private int sliderLowValue = -1; private int sliderUpValue = -1; - public Range(JRangeSliderPanel slider, Object min, Object max) { - this.slider = slider; - this.min = min; - this.max = max; - this.lowerBound = min; - this.upperBound = max; - } - - public Range(JRangeSliderPanel slider, Object min, Object max, Object lowerBound, Object upperBound) { + public Range(JRangeSliderPanel slider, T min, T max, T lowerBound, T upperBound, Class type) { this.slider = slider; this.min = min; this.max = max; this.lowerBound = lowerBound; this.upperBound = upperBound; + this.type = type; } - public Object getLowerBound() { - return lowerBound; + public Range(JRangeSliderPanel slider, T min, T max, Class type) { + this(slider, min, max, min, max, type); } - public Object getUpperBound() { - return upperBound; + public static Range build(JRangeSliderPanel slider, Number min, Number max) { + return build(slider, min, max, min, max); } - private void setLowerBound(String bound) { - if (min instanceof Float) { - try { - Float l = Float.parseFloat(bound); - if (l < (Float) min) { - lowerBound = min; - } else if (l > (Float) upperBound) { - lowerBound = upperBound; - } else { - lowerBound = l; - } - } catch (Exception e) { - } - } else if (min instanceof Double) { - try { - Double l = Double.parseDouble(bound); - if (l < (Double) min) { - lowerBound = min; - } else if (l > (Double) upperBound) { - lowerBound = upperBound; - } else { - lowerBound = l; - } - } catch (Exception e) { - } - } else if (min instanceof Integer) { - try { - Integer l = Integer.parseInt(bound); - if (l < (Integer) min) { - lowerBound = min; - } else if (l > (Integer) upperBound) { - lowerBound = upperBound; - } else { - lowerBound = l; - } - } catch (Exception e) { - } + public static Range build(JRangeSliderPanel slider, Number min, Number max, Number lowerBound, + Number upperBound) { + if (min instanceof Double) { + return new Range(slider, min, max, lowerBound, upperBound, Double.class); + } else if (min instanceof Float) { + return new Range(slider, min, max, lowerBound, upperBound, Float.class); } else if (min instanceof Long) { - try { - Long l = Long.parseLong(bound); - if (l < (Long) min) { - lowerBound = min; - } else if (l > (Long) upperBound) { - lowerBound = upperBound; - } else { - lowerBound = l; - } - } catch (Exception e) { + return new Range(slider, min, max, lowerBound, upperBound, Long.class); + } else if (min instanceof Integer) { + return new Range(slider, min, max, lowerBound, upperBound, Integer.class); + } else if (min instanceof Short) { + return new Range(slider, min, max, lowerBound, upperBound, Short.class); + } else if (min instanceof Byte) { + return new Range(slider, min, max, lowerBound, upperBound, Byte.class); + } else if (min instanceof BigDecimal) { + return new Range(slider, min, max, lowerBound, upperBound, BigDecimal.class); + } else if (min instanceof BigInteger) { + return new Range(slider, min, max, lowerBound, upperBound, BigInteger.class); + } else { + throw new UnsupportedOperationException("Unsupported number type " + min.getClass().getName()); + } + } + + public T getLowerBound() { + return lowerBound; + } + + private void setLowerBound(String bound) { + try { + T v = NumberUtils.parseNumber(bound, type); + + if (v.compareTo(min) < 0) { + lowerBound = min; + } else if (v.compareTo(upperBound) > 0) { + lowerBound = upperBound; + } else { + lowerBound = v; } + } catch (Exception ex) { } refreshSlider(); } + public T getUpperBound() { + return upperBound; + } + private void setUpperBound(String bound) { - if (min instanceof Float) { - try { - Float l = Float.parseFloat(bound); - if (l > (Float) max) { - upperBound = max; - } else if (l < (Float) lowerBound) { - upperBound = lowerBound; - } else { - upperBound = l; - } - } catch (Exception e) { - } - } else if (min instanceof Double) { - try { - Double l = Double.parseDouble(bound); - if (l > (Double) max) { - upperBound = max; - } else if (l < (Double) lowerBound) { - upperBound = lowerBound; - } else { - upperBound = l; - } - } catch (Exception e) { - } - } else if (min instanceof Integer) { - try { - Integer l = Integer.parseInt(bound); - if (l > (Integer) max) { - upperBound = max; - } else if (l < (Integer) lowerBound) { - upperBound = lowerBound; - } else { - upperBound = l; - } - } catch (Exception e) { - } - } else if (min instanceof Long) { - try { - Long l = Long.parseLong(bound); - if (l > (Long) max) { - upperBound = max; - } else if (l < (Long) lowerBound) { - upperBound = lowerBound; - } else { - upperBound = l; - } - } catch (Exception e) { + try { + T v = NumberUtils.parseNumber(bound, type); + if (v.compareTo(max) > 0) { + upperBound = max; + } else if (v.compareTo(lowerBound) < 0) { + upperBound = lowerBound; + } else { + upperBound = v; } + } catch (Exception e) { } refreshSlider(); } private void refreshSlider() { - double normalizedLow = 0.; - double normalizedUp = 1.; - if (min instanceof Float) { - normalizedLow = ((Float) lowerBound - (Float) min) / ((Float) max - (Float) min); - normalizedUp = ((Float) upperBound - (Float) min) / ((Float) max - (Float) min); - } else if (min instanceof Double) { - normalizedLow = ((Double) lowerBound - (Double) min) / ((Double) max - (Double) min); - normalizedUp = ((Double) upperBound - (Double) min) / ((Double) max - (Double) min); - } else if (min instanceof Integer) { - normalizedLow = ((Integer) lowerBound - (Integer) min) / (double) ((Integer) max - (Integer) min); - normalizedUp = ((Integer) upperBound - (Integer) min) / (double) ((Integer) max - (Integer) min); - } else if (min instanceof Long) { - normalizedLow = ((Long) lowerBound - (Long) min) / (double) ((Long) max - (Long) min); - normalizedUp = ((Long) upperBound - (Long) min) / (double) ((Long) max - (Long) min); - } + BigDecimal lowerBoundBigDecimal = new BigDecimal(lowerBound.toString()); + BigDecimal upperBoundBigDecimal = new BigDecimal(upperBound.toString()); + BigDecimal minBigDecimal = new BigDecimal(min.toString()); + BigDecimal maxBigDecimal = new BigDecimal(max.toString()); + + // Use MathContext.DECIMAL64 so that integer-typed ranges (e.g. degree) + // don't get the result truncated to scale 0 (yielding only 0 or 1) when + // dividing two BigDecimals that share the dividend's scale. + double normalizedLow = (lowerBoundBigDecimal.subtract(minBigDecimal)) + .divide(maxBigDecimal.subtract(minBigDecimal), MathContext.DECIMAL64) + .doubleValue(); + double normalizedUp = (upperBoundBigDecimal.subtract(minBigDecimal)) + .divide(maxBigDecimal.subtract(minBigDecimal), MathContext.DECIMAL64) + .doubleValue(); + sliderLowValue = (int) (normalizedLow * SLIDER_MAXIMUM); sliderUpValue = (int) (normalizedUp * SLIDER_MAXIMUM); slider.getSlider().setValues(sliderLowValue, sliderUpValue); -// slider.getSlider().setUpperValue(sliderUpValue); -// slider.getSlider().setValue(sliderLowValue); } private void refreshBounds() { @@ -412,25 +374,42 @@ private void refreshBounds() { double normalizedLow = slider.getSlider().getValue() / (double) SLIDER_MAXIMUM; double normalizedUp = slider.getSlider().getUpperValue() / (double) SLIDER_MAXIMUM; - if (min instanceof Float) { - lowerBound = lowerChanged ? new Float((normalizedLow * ((Float) max - (Float) min)) + (Float) min) : lowerBound; - upperBound = upperChanged ? new Float((normalizedUp * ((Float) max - (Float) min)) + (Float) min) : upperBound; - } else if (min instanceof Double) { - lowerBound = lowerChanged ? new Double((normalizedLow * ((Double) max - (Double) min)) + (Double) min) : lowerBound; - upperBound = upperChanged ? new Double((normalizedUp * ((Double) max - (Double) min)) + (Double) min) : upperBound; - } else if (min instanceof Integer) { - lowerBound = lowerChanged ? new Integer((int) ((normalizedLow * ((Integer) max - (Integer) min)) + (Integer) min)) : lowerBound; - upperBound = upperChanged ? new Integer((int) ((normalizedUp * ((Integer) max - (Integer) min)) + (Integer) min)) : upperBound; - } else if (min instanceof Long) { - lowerBound = lowerChanged ? new Long((long) ((normalizedLow * ((Long) max - (Long) min)) + (Long) min)) : lowerBound; - upperBound = upperChanged ? new Long((long) ((normalizedUp * ((Long) max - (Long) min)) + (Long) min)) : upperBound; - } - if (lowerChanged) { - slider.firePropertyChange(LOWER_BOUND, null, lowerBound); - } - if (upperChanged) { - slider.firePropertyChange(UPPER_BOUND, null, upperBound); + if (lowerChanged || upperChanged) { + BigDecimal minBigDecimal = new BigDecimal(min.toString()); + BigDecimal maxBigDecimal = new BigDecimal(max.toString()); + + if (lowerChanged) { + BigDecimal newLowerBound = + (BigDecimal.valueOf(normalizedLow).multiply(maxBigDecimal.subtract(minBigDecimal))) + .add(minBigDecimal); + + if (type.equals(Double.class) || type.equals(Float.class) || type.equals(BigDecimal.class)) { + lowerBound = NumberUtils.parseNumber(newLowerBound.toString(), type); + } else { + lowerBound = NumberUtils + .parseNumber(newLowerBound.setScale(0, RoundingMode.HALF_UP).toBigInteger().toString(), + type); + } + + slider.firePropertyChange(LOWER_BOUND, null, lowerBound); + } + + if (upperChanged) { + BigDecimal newUpperBound = + (BigDecimal.valueOf(normalizedUp).multiply(maxBigDecimal.subtract(minBigDecimal))) + .add(minBigDecimal); + + if (type.equals(Double.class) || type.equals(Float.class) || type.equals(BigDecimal.class)) { + upperBound = NumberUtils.parseNumber(newUpperBound.toString(), type); + } else { + upperBound = NumberUtils + .parseNumber(newUpperBound.setScale(0, RoundingMode.HALF_UP).toBigInteger().toString(), + type); + } + + slider.firePropertyChange(UPPER_BOUND, null, upperBound); + } } } } diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/JSqueezeBoxPanel.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/JSqueezeBoxPanel.java index 52872068f2..04c2d2ef03 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/JSqueezeBoxPanel.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/JSqueezeBoxPanel.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components; import java.awt.BorderLayout; @@ -59,7 +60,6 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.ui.utils.UIUtils; /** - * * @author Mathieu Bastian */ public class JSqueezeBoxPanel extends JPanel { @@ -68,7 +68,7 @@ public class JSqueezeBoxPanel extends JPanel { private final GridBagConstraints gbc = new GridBagConstraints(); private final JScrollPane scrollPane; private final JPanel scrollPanel = new JPanel(); - private final Map panelMap = new HashMap(); + private final Map panelMap = new HashMap<>(); public JSqueezeBoxPanel() { setName("JSqueezeBoxPanel"); // NOI18N @@ -87,7 +87,7 @@ public JSqueezeBoxPanel() { scrollPanel.add(padding, gbc); scrollPane = new JScrollPane(scrollPanel, JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED, - JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); + JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED); scrollPane.setBorder(BorderFactory.createEmptyBorder()); scrollPane.getViewport().setBackground(CP_BACKGROUND_COLOR); scrollPane.getVerticalScrollBar().setUnitIncrement(50); @@ -98,8 +98,10 @@ public JSqueezeBoxPanel() { @Override public void componentResized(ComponentEvent e) { - scrollPane.getVerticalScrollBar().setBlockIncrement((int) (scrollPane.getVerticalScrollBar().getModel().getExtent() * 0.95f)); - scrollPane.getHorizontalScrollBar().setBlockIncrement((int) (scrollPane.getHorizontalScrollBar().getModel().getExtent() * 0.95f)); + scrollPane.getVerticalScrollBar() + .setBlockIncrement((int) (scrollPane.getVerticalScrollBar().getModel().getExtent() * 0.95f)); + scrollPane.getHorizontalScrollBar() + .setBlockIncrement((int) (scrollPane.getHorizontalScrollBar().getModel().getExtent() * 0.95f)); } }); @@ -179,7 +181,7 @@ public void layoutContainer(final Container parent) { @Override public Dimension minimumLayoutSize(final Container parent) { final Dimension d = new Dimension(parent.getInsets().left + parent.getInsets().right, - parent.getInsets().top + parent.getInsets().bottom); + parent.getInsets().top + parent.getInsets().bottom); int maxWidth = 0; int height = 0; final Component[] comps = parent.getComponents(); @@ -203,7 +205,7 @@ public Dimension minimumLayoutSize(final Container parent) { @Override public Dimension preferredLayoutSize(final Container parent) { final Dimension d = new Dimension(parent.getInsets().left + parent.getInsets().right, - parent.getInsets().top + parent.getInsets().bottom); + parent.getInsets().top + parent.getInsets().bottom); int maxWidth = 0; int height = 0; final Component[] comps = parent.getComponents(); diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/PaletteIcon.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/PaletteIcon.java index 2126c2d0b5..7b95205477 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/PaletteIcon.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/PaletteIcon.java @@ -39,22 +39,24 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components; +import java.awt.BasicStroke; import java.awt.Color; import java.awt.Component; import java.awt.Graphics; +import java.awt.Graphics2D; import javax.swing.Icon; /** - * * @author Mathieu Bastian */ public class PaletteIcon implements Icon { - private static int COLOR_WIDTH = 13; - private static int COLOR_HEIGHT = 13; - private static Color BORDER_COLOR = new Color(0x444444); + private static final int COLOR_WIDTH = 13; + private static final int COLOR_HEIGHT = 13; + private static final Color BORDER_COLOR = new Color(0x444444); private final Color[] colors; private final int maxColors; @@ -79,12 +81,14 @@ public int getIconHeight() { @Override public void paintIcon(Component c, Graphics g, int x, int y) { + Graphics2D g2 = (Graphics2D) g; + g2.setStroke(new BasicStroke(1)); for (int i = 0; i < maxColors; i++) { - g.setColor(BORDER_COLOR); - g.drawRect(x + 2 + i * COLOR_WIDTH, y, COLOR_WIDTH, COLOR_HEIGHT); - g.setColor(colors[i]); - g.fillRect(x + 2 + i * COLOR_WIDTH + 1, y + 1, COLOR_WIDTH - 1, COLOR_HEIGHT - 1); + g2.setColor(colors[i]); + g2.fillRect(x + 2 + i * COLOR_WIDTH, y, COLOR_WIDTH, COLOR_HEIGHT); + g2.setColor(BORDER_COLOR); + g2.drawRect(x + 2 + i * COLOR_WIDTH, y, COLOR_WIDTH, COLOR_HEIGHT); } } } diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/SimpleHTMLReport.form b/modules/UIComponents/src/main/java/org/gephi/ui/components/SimpleHTMLReport.form index fb23a5ceef..7cd48e313e 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/SimpleHTMLReport.form +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/SimpleHTMLReport.form @@ -9,6 +9,7 @@ + diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/SimpleHTMLReport.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/SimpleHTMLReport.java index 93849910f2..6d958a247d 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/SimpleHTMLReport.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/SimpleHTMLReport.java @@ -40,6 +40,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components; import java.awt.Dimension; @@ -64,6 +65,7 @@ Development and Distribution License("CDDL") (collectively, the import java.io.OutputStreamWriter; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -73,35 +75,33 @@ Development and Distribution License("CDDL") (collectively, the import javax.swing.text.View; import org.apache.commons.codec.binary.Base64; import org.openide.awt.StatusDisplayer; +import org.openide.util.Exceptions; +import org.openide.util.ImageUtilities; import org.openide.util.NbBundle; import org.openide.util.NbPreferences; import org.openide.windows.WindowManager; /** - * * @author Mathieu Bastian * @author Patick J. McSweeney */ class ReportSelection implements Transferable { - private static ArrayList flavors = new ArrayList(); + private static final ArrayList flavors = new ArrayList(); static { try { flavors.add(new DataFlavor("text/html;class=java.lang.String")); } catch (ClassNotFoundException ex) { - ex.printStackTrace(); + Exceptions.printStackTrace(ex); } } + private String html; - /** - * - * @param html - */ public ReportSelection(String html) { this.html = html; - String newHTML = new String(); + String newHTML = ""; String[] result = html.split("file:"); boolean first = true; for (int i = 0; i < result.length; i++) { @@ -117,9 +117,9 @@ public ReportSelection(String html) { File file = new File(filename); try { BufferedImage image = ImageIO.read(file); - ImageIO.write((RenderedImage) image, "PNG", out); + ImageIO.write(image, "PNG", out); } catch (Exception e) { - e.printStackTrace(); + Exceptions.printStackTrace(e); } byte[] imageBytes = out.toByteArray(); String base64String = Base64.encodeBase64String(imageBytes); @@ -139,31 +139,16 @@ public ReportSelection(String html) { this.html = newHTML; } - /** - * - * @return - */ @Override public DataFlavor[] getTransferDataFlavors() { return (DataFlavor[]) flavors.toArray(new DataFlavor[flavors.size()]); } - /** - * - * @param flavor - * @return - */ @Override public boolean isDataFlavorSupported(DataFlavor flavor) { return flavors.contains(flavor); } - /** - * - * @param flavor - * @return - * @throws java.awt.datatransfer.UnsupportedFlavorException - */ @Override public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorException { if (String.class.equals(flavor.getRepresentationClass())) { @@ -173,13 +158,19 @@ public Object getTransferData(DataFlavor flavor) throws UnsupportedFlavorExcepti } } -/** - * - * @author pjmcswee - */ public class SimpleHTMLReport extends javax.swing.JDialog implements Printable { - private String mHTMLReport; + private final String LAST_PATH = "SimpleHTMLReport_Save_Last_Path"; + private final String mHTMLReport; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton closeButton; + private javax.swing.JButton copyButton; + private javax.swing.JEditorPane displayPane; + private javax.swing.JScrollPane jScrollPane1; + private javax.swing.JToolBar jToolBar1; + private javax.swing.JButton printButton; + private javax.swing.JButton saveButton; + // End of variables declaration//GEN-END:variables public SimpleHTMLReport(java.awt.Frame parent, String html) { super(parent, false); @@ -205,7 +196,7 @@ public SimpleHTMLReport(java.awt.Frame parent, String html) { private void initComponents() { jScrollPane1 = new javax.swing.JScrollPane(); - displayPane = (javax.swing.JEditorPane)(new JHTMLEditorPane()); + displayPane = new JHTMLEditorPane(); closeButton = new javax.swing.JButton(); jToolBar1 = new javax.swing.JToolBar(); printButton = new javax.swing.JButton(); @@ -217,8 +208,10 @@ private void initComponents() { jScrollPane1.setViewportView(displayPane); - closeButton.setText(org.openide.util.NbBundle.getMessage(SimpleHTMLReport.class, "SimpleHTMLReport.closeButton.text")); // NOI18N + closeButton.setText(org.openide.util.NbBundle + .getMessage(SimpleHTMLReport.class, "SimpleHTMLReport.closeButton.text")); // NOI18N closeButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { closeButtonActionPerformed(evt); } @@ -227,27 +220,35 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { jToolBar1.setFloatable(false); jToolBar1.setRollover(true); - printButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/ui/components/resources/print.png"))); // NOI18N - printButton.setText(org.openide.util.NbBundle.getMessage(SimpleHTMLReport.class, "SimpleHTMLReport.printButton.text")); // NOI18N + printButton.setIcon(ImageUtilities.loadImageIcon("UIComponents/print.svg", false)); // NOI18N + printButton.setText(org.openide.util.NbBundle + .getMessage(SimpleHTMLReport.class, "SimpleHTMLReport.printButton.text")); // NOI18N printButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { printButtonActionPerformed(evt); } }); jToolBar1.add(printButton); - copyButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/ui/components/resources/copy.gif"))); // NOI18N - copyButton.setText(org.openide.util.NbBundle.getMessage(SimpleHTMLReport.class, "SimpleHTMLReport.copyButton.text")); // NOI18N + copyButton.setIcon( + ImageUtilities.loadImageIcon("UIComponents/copy.svg", false)); // NOI18N + copyButton.setText( + org.openide.util.NbBundle.getMessage(SimpleHTMLReport.class, "SimpleHTMLReport.copyButton.text")); // NOI18N copyButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { copyButtonActionPerformed(evt); } }); jToolBar1.add(copyButton); - saveButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/ui/components/resources/save.png"))); // NOI18N - saveButton.setText(org.openide.util.NbBundle.getMessage(SimpleHTMLReport.class, "SimpleHTMLReport.saveButton.text")); // NOI18N + saveButton.setIcon( + ImageUtilities.loadImageIcon("UIComponents/save.svg", false)); // NOI18N + saveButton.setText( + org.openide.util.NbBundle.getMessage(SimpleHTMLReport.class, "SimpleHTMLReport.saveButton.text")); // NOI18N saveButton.addActionListener(new java.awt.event.ActionListener() { + @Override public void actionPerformed(java.awt.event.ActionEvent evt) { saveButtonActionPerformed(evt); } @@ -258,29 +259,31 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addContainerGap() - .addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 194, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(closeButton) - .addContainerGap()) - .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 279, Short.MAX_VALUE) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addComponent(jToolBar1, javax.swing.GroupLayout.DEFAULT_SIZE, 194, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(closeButton) + .addContainerGap()) + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 279, Short.MAX_VALUE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 23, Short.MAX_VALUE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(closeButton) - .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap()) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 23, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(closeButton) + .addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap()) ); pack(); }// //GEN-END:initComponents - private void printButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_printButtonActionPerformed + private void printButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_printButtonActionPerformed PrinterJob pjob = PrinterJob.getPrinterJob(); PageFormat pf = pjob.defaultPage(); pjob.setPrintable(this, pf); @@ -290,10 +293,9 @@ private void printButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-F pjob.print(); } } catch (PrinterException e) { - e.printStackTrace(); + Exceptions.printStackTrace(e); } -}//GEN-LAST:event_printButtonActionPerformed - private final String LAST_PATH = "SimpleHTMLReport_Save_Last_Path"; + }//GEN-LAST:event_printButtonActionPerformed private void saveButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_saveButtonActionPerformed final String html = this.mHTMLReport; @@ -311,12 +313,16 @@ private void saveButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FI public void run() { try { if (saveReport(html, destinationFolder)) { - StatusDisplayer.getDefault().setStatusText(NbBundle.getMessage(SimpleHTMLReport.class, "SimpleHTMLReport.status.saveSuccess", destinationFolder.getName())); - }else{ - StatusDisplayer.getDefault().setStatusText(NbBundle.getMessage(SimpleHTMLReport.class, "SimpleHTMLReport.status.saveError", destinationFolder.getName())); + StatusDisplayer.getDefault().setStatusText(NbBundle + .getMessage(SimpleHTMLReport.class, "SimpleHTMLReport.status.saveSuccess", + destinationFolder.getName())); + } else { + StatusDisplayer.getDefault().setStatusText(NbBundle + .getMessage(SimpleHTMLReport.class, "SimpleHTMLReport.status.saveError", + destinationFolder.getName())); } } catch (IOException e) { - e.printStackTrace(); + Exceptions.printStackTrace(e); } } }, "SaveReportTask"); @@ -328,8 +334,8 @@ public void run() { private boolean saveReport(String html, File destinationFolder) throws IOException { if (!destinationFolder.exists()) { destinationFolder.mkdir(); - }else{ - if(!destinationFolder.isDirectory()){ + } else { + if (!destinationFolder.isDirectory()) { return false; } } @@ -357,7 +363,7 @@ private boolean saveReport(String html, File destinationFolder) throws IOExcepti //Write HTML file File htmlFile = new File(destinationFolder, "report.html"); FileOutputStream outputStream = new FileOutputStream(htmlFile); - OutputStreamWriter out = new OutputStreamWriter(outputStream, "UTF-8"); + OutputStreamWriter out = new OutputStreamWriter(outputStream, StandardCharsets.UTF_8); out.append(replaceBuffer.toString()); out.flush(); out.close(); @@ -372,42 +378,16 @@ private void copyButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FI try { toolkit.getSystemClipboard().setContents(new ReportSelection(this.mHTMLReport), null); } catch (Exception e) { - e.printStackTrace(); + Exceptions.printStackTrace(e); } }//GEN-LAST:event_copyButtonActionPerformed - /** - * - * @param evt - */ - private void closeButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeButtonActionPerformed + private void closeButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_closeButtonActionPerformed dispose(); // TODO add your handling code here: }//GEN-LAST:event_closeButtonActionPerformed - /** - * @param args the command line arguments - * - * public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { SimpleHTMLReport dialog = new SimpleHTMLReport(new javax.swing.JFrame(), true); - * dialog.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { System.exit(0); } }); dialog.setVisible(true); } }); } - * - */ - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton closeButton; - private javax.swing.JButton copyButton; - private javax.swing.JEditorPane displayPane; - private javax.swing.JScrollPane jScrollPane1; - private javax.swing.JToolBar jToolBar1; - private javax.swing.JButton printButton; - private javax.swing.JButton saveButton; - // End of variables declaration//GEN-END:variables - /** - * - * @param graphics - * @param pageFormat - * @param pageIndex - * @return - */ @Override public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) { @@ -421,20 +401,20 @@ public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) { scaleX = Math.min(scaleX, 1.0); double scaleY = scaleX; - int end = (int) (pageIndex * ((1.0f / scaleY) * (double) pageFormat.getImageableHeight())); + int end = (int) (pageIndex * ((1.0f / scaleY) * pageFormat.getImageableHeight())); Rectangle allocation = new Rectangle(0, - -end, - (int) pageFormat.getImageableWidth(), - (int) pageFormat.getImageableHeight()); + -end, + (int) pageFormat.getImageableWidth(), + (int) pageFormat.getImageableHeight()); ((Graphics2D) graphics).scale(scaleX, scaleY); graphics.setClip((int) (pageFormat.getImageableX() / scaleX), - (int) (pageFormat.getImageableY() / scaleY), - (int) (pageFormat.getImageableWidth() / scaleX), - (int) (pageFormat.getImageableHeight() / scaleY)); + (int) (pageFormat.getImageableY() / scaleY), + (int) (pageFormat.getImageableWidth() / scaleX), + (int) (pageFormat.getImageableHeight() / scaleY)); - ((Graphics2D) graphics).translate(((Graphics2D) graphics).getClipBounds().getX(), - ((Graphics2D) graphics).getClipBounds().getY()); + ((Graphics2D) graphics).translate(graphics.getClipBounds().getX(), + graphics.getClipBounds().getY()); rootView.paint(graphics, allocation); @@ -444,7 +424,7 @@ public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) { return Printable.NO_SUCH_PAGE; } } catch (Exception e) { - e.printStackTrace(); + Exceptions.printStackTrace(e); } return Printable.PAGE_EXISTS; } diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/SnippetPanel.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/SnippetPanel.java index 657bf64159..d74e42f612 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/SnippetPanel.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/SnippetPanel.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components; import java.awt.BorderLayout; @@ -61,143 +62,17 @@ Development and Distribution License("CDDL") (collectively, the import javax.swing.JPanel; import javax.swing.plaf.ComponentUI; import org.gephi.ui.utils.UIUtils; +import org.openide.util.ImageUtilities; //Copied from org.netbeans.lib.profiler.ui.components public class SnippetPanel extends JPanel implements MouseListener, KeyListener, FocusListener { //~ Inner Classes ------------------------------------------------------------------------------------------------------------ - public static class Padding extends JPanel { - //~ Constructors --------------------------------------------------------------------------------------------------------- - - public Padding() { - setBackground(UIUtils.getProfilerResultsBackground()); - setOpaque(true); - } - - //~ Methods -------------------------------------------------------------------------------------------------------------- - @Override - protected void paintComponent(Graphics g) { - super.paintComponent(g); - g.setColor(lineColor); - g.drawLine(0, 0, getWidth(), 0); - } - } - - private static class Title extends JComponent implements Accessible { - //~ Instance fields ------------------------------------------------------------------------------------------------------ - - String name; - private boolean collapsed; - private boolean rollOver; - - //~ Constructors --------------------------------------------------------------------------------------------------------- - private Title(String name) { - this.name = name; - setUI(new TitleUI()); - } - - //~ Methods -------------------------------------------------------------------------------------------------------------- - public void setRollOver(boolean rollOver) { - if (rollOver == this.rollOver) { - return; - } - - this.rollOver = rollOver; - repaint(); - } - - public void collapse() { - collapsed = true; - repaint(); - } - - public void expand() { - collapsed = false; - repaint(); - } - } - - private static class TitleUI extends ComponentUI { - //~ Instance fields ------------------------------------------------------------------------------------------------------ - - private final int TITLE_X_OFFSET = 5; - private final int TITLE_Y_OFFSET = 2; - private final ImageIcon collapsedIcon = new ImageIcon(TitleUI.class.getResource("resources/collapsedSnippet.png")); //NOI18N - private final ImageIcon expandedIcon = new ImageIcon(TitleUI.class.getResource("resources/expandedSnippet.png")); //NOI18N - private final JLabel plainPainter = new JLabel(); - private final JLabel boldPainter = new JLabel(); - private final Font plainFont = plainPainter.getFont().deriveFont(Font.PLAIN); - private final Font boldFont = boldPainter.getFont().deriveFont(Font.BOLD); - private Dimension preferredSize; - - //~ Methods -------------------------------------------------------------------------------------------------------------- - @Override - public Dimension getPreferredSize(JComponent c) { - return preferredSize; - } - - @Override - public void installUI(JComponent c) { - plainPainter.setText(((Title) c).name); - plainPainter.setIcon(collapsedIcon); - plainPainter.setFont(plainFont); - plainPainter.setIconTextGap(5); - boldPainter.setText(((Title) c).name); - boldPainter.setIcon(expandedIcon); - boldPainter.setFont(boldFont); - boldPainter.setIconTextGap(5); - - plainPainter.setSize(plainPainter.getPreferredSize()); - Dimension titlePreferredSize = boldPainter.getPreferredSize(); - boldPainter.setSize(titlePreferredSize); - preferredSize = new Dimension(TITLE_X_OFFSET + titlePreferredSize.width, - titlePreferredSize.height + TITLE_Y_OFFSET * 2); - } - - @Override - public void paint(Graphics g, JComponent c) { - - Title title = (Title) c; - - g.setColor(lineColor); - g.drawLine(0, 0, c.getWidth(), 0); - - if (title.collapsed) { // do not draw bottom line if collapsed - - if (title.rollOver || title.isFocusOwner()) { - g.setColor(focusedBackgroundColor); - } else { - g.setColor(backgroundColor); - } - } - - g.drawLine(0, 1 + plainPainter.getHeight() + TITLE_Y_OFFSET, - c.getWidth(), 1 + plainPainter.getHeight() + TITLE_Y_OFFSET); - - if (title.rollOver || title.isFocusOwner()) { - g.setColor(focusedBackgroundColor); - } else { - g.setColor(backgroundColor); - } - - g.fillRect(0, 1, c.getWidth(), plainPainter.getHeight() + TITLE_Y_OFFSET); - - g.translate(TITLE_X_OFFSET, TITLE_Y_OFFSET); - if (title.collapsed) { - plainPainter.paint(g); - } else { - boldPainter.paint(g); - } - g.translate(-TITLE_X_OFFSET, -TITLE_Y_OFFSET); - } - } - //~ Static fields/initializers ----------------------------------------------------------------------------------------------- private static Color lineColor; private static Color backgroundColor; private static Color focusedBackgroundColor; - static { initColors(); } @@ -205,7 +80,7 @@ public void paint(Graphics g, JComponent c) { //~ Instance fields ---------------------------------------------------------------------------------------------------------- private JComponent content; private String snippetName; - private Title title; + private final Title title; private boolean collapsed = false; //~ Constructors ------------------------------------------------------------------------------------------------------------- @@ -245,14 +120,22 @@ private static void initColors() { if (inverseColors) { lineColor = UIUtils.getSafeColor(backgroundRed + 41, backgroundGreen + 32, backgroundBlue + 8); backgroundColor = UIUtils.getSafeColor(backgroundRed + 7, backgroundGreen + 7, backgroundBlue + 7); - focusedBackgroundColor = UIUtils.getSafeColor(backgroundRed + 25, backgroundGreen + 25, backgroundBlue + 25); + focusedBackgroundColor = + UIUtils.getSafeColor(backgroundRed + 25, backgroundGreen + 25, backgroundBlue + 25); } else { - lineColor = UIUtils.getSafeColor(backgroundRed - 41 /*214*/, backgroundGreen - 32 /*223*/, backgroundBlue - 8 /*247*/); - backgroundColor = UIUtils.getSafeColor(backgroundRed - 7 /*248*/, backgroundGreen - 7 /*248*/, backgroundBlue - 7 /*248*/); - focusedBackgroundColor = UIUtils.getSafeColor(backgroundRed - 25 /*230*/, backgroundGreen - 25 /*230*/, backgroundBlue - 25 /*230*/); + lineColor = UIUtils + .getSafeColor(backgroundRed - 41 /*214*/, backgroundGreen - 32 /*223*/, backgroundBlue - 8 /*247*/); + backgroundColor = UIUtils + .getSafeColor(backgroundRed - 7 /*248*/, backgroundGreen - 7 /*248*/, backgroundBlue - 7 /*248*/); + focusedBackgroundColor = UIUtils + .getSafeColor(backgroundRed - 25 /*230*/, backgroundGreen - 25 /*230*/, backgroundBlue - 25 /*230*/); } } + public boolean isCollapsed() { + return collapsed; + } + public void setCollapsed(boolean collapsed) { if (this.collapsed == collapsed) { return; @@ -270,26 +153,22 @@ public void setCollapsed(boolean collapsed) { revalidate(); } - public boolean isCollapsed() { - return collapsed; + public JComponent getContent() { + return content; } public void setContent(JComponent content) { this.content = content; } - public JComponent getContent() { - return content; + public String getSnippetName() { + return snippetName; } public void setSnippetName(String snippetName) { this.snippetName = snippetName; } - public String getSnippetName() { - return snippetName; - } - @Override public void focusGained(FocusEvent e) { title.repaint(); @@ -347,4 +226,132 @@ public void requestFocus() { title.requestFocus(); } } + + public static class Padding extends JPanel { + //~ Constructors --------------------------------------------------------------------------------------------------------- + + public Padding() { + setBackground(UIUtils.getProfilerResultsBackground()); + setOpaque(true); + } + + //~ Methods -------------------------------------------------------------------------------------------------------------- + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + g.setColor(lineColor); + g.drawLine(0, 0, getWidth(), 0); + } + } + + private static class Title extends JComponent implements Accessible { + //~ Instance fields ------------------------------------------------------------------------------------------------------ + + String name; + private boolean collapsed; + private boolean rollOver; + + //~ Constructors --------------------------------------------------------------------------------------------------------- + private Title(String name) { + this.name = name; + setUI(new TitleUI()); + } + + //~ Methods -------------------------------------------------------------------------------------------------------------- + public void setRollOver(boolean rollOver) { + if (rollOver == this.rollOver) { + return; + } + + this.rollOver = rollOver; + repaint(); + } + + public void collapse() { + collapsed = true; + repaint(); + } + + public void expand() { + collapsed = false; + repaint(); + } + } + + private static class TitleUI extends ComponentUI { + //~ Instance fields ------------------------------------------------------------------------------------------------------ + + private final int TITLE_X_OFFSET = 5; + private final int TITLE_Y_OFFSET = 2; + private final ImageIcon collapsedIcon = + ImageUtilities.loadImageIcon("UIComponents/collapsedSnippet.svg", false); //NOI18N + private final ImageIcon expandedIcon = + ImageUtilities.loadImageIcon("UIComponents/expandedSnippet.svg", false); //NOI18N + private final JLabel plainPainter = new JLabel(); + private final JLabel boldPainter = new JLabel(); + private final Font plainFont = plainPainter.getFont().deriveFont(Font.PLAIN); + private final Font boldFont = boldPainter.getFont().deriveFont(Font.BOLD); + private Dimension preferredSize; + + //~ Methods -------------------------------------------------------------------------------------------------------------- + @Override + public Dimension getPreferredSize(JComponent c) { + return preferredSize; + } + + @Override + public void installUI(JComponent c) { + plainPainter.setText(((Title) c).name); + plainPainter.setIcon(collapsedIcon); + plainPainter.setFont(plainFont); + plainPainter.setIconTextGap(5); + boldPainter.setText(((Title) c).name); + boldPainter.setIcon(expandedIcon); + boldPainter.setFont(boldFont); + boldPainter.setIconTextGap(5); + + plainPainter.setSize(plainPainter.getPreferredSize()); + Dimension titlePreferredSize = boldPainter.getPreferredSize(); + boldPainter.setSize(titlePreferredSize); + preferredSize = new Dimension(TITLE_X_OFFSET + titlePreferredSize.width, + titlePreferredSize.height + TITLE_Y_OFFSET * 2); + } + + @Override + public void paint(Graphics g, JComponent c) { + + Title title = (Title) c; + + g.setColor(lineColor); + g.drawLine(0, 0, c.getWidth(), 0); + + if (title.collapsed) { // do not draw bottom line if collapsed + + if (title.rollOver || title.isFocusOwner()) { + g.setColor(focusedBackgroundColor); + } else { + g.setColor(backgroundColor); + } + } + + g.drawLine(0, 1 + plainPainter.getHeight() + TITLE_Y_OFFSET, + c.getWidth(), 1 + plainPainter.getHeight() + TITLE_Y_OFFSET); + + if (title.rollOver || title.isFocusOwner()) { + g.setColor(focusedBackgroundColor); + } else { + g.setColor(backgroundColor); + } + + g.fillRect(0, 1, c.getWidth(), plainPainter.getHeight() + TITLE_Y_OFFSET); + + g.translate(TITLE_X_OFFSET, TITLE_Y_OFFSET); + if (title.collapsed) { + plainPainter.paint(g); + } else { + boldPainter.paint(g); + } + g.translate(-TITLE_X_OFFSET, -TITLE_Y_OFFSET); + } + } } diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/SwapListPanel.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/SwapListPanel.java index 224c7e67a0..2d529cabff 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/SwapListPanel.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/SwapListPanel.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components; import java.awt.event.ActionEvent; @@ -46,16 +47,29 @@ Development and Distribution License("CDDL") (collectively, the import javax.swing.DefaultListModel; import javax.swing.JButton; import javax.swing.JList; +import org.openide.util.ImageUtilities; //WORK IN PROGRESS, NOT WORKING NOT TESTED YET public class SwapListPanel extends javax.swing.JPanel { - /** Creates new form SwapListPanel */ + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JList itemList1; + private javax.swing.JList itemList2; + private javax.swing.JButton leftButton; + private javax.swing.JButton rightButton; + private javax.swing.JScrollPane scrollPane1; + private javax.swing.JScrollPane scrollPane2; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form SwapListPanel + */ public SwapListPanel() { initComponents(); } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -75,9 +89,17 @@ private void initComponents() { setLayout(new java.awt.GridBagLayout()); itemList1.setModel(new javax.swing.AbstractListModel() { - String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" }; - public int getSize() { return strings.length; } - public Object getElementAt(int i) { return strings[i]; } + final String[] strings = {"Item 1", "Item 2", "Item 3", "Item 4", "Item 5"}; + + @Override + public int getSize() { + return strings.length; + } + + @Override + public Object getElementAt(int i) { + return strings[i]; + } }); scrollPane1.setViewportView(itemList1); @@ -93,9 +115,17 @@ private void initComponents() { add(scrollPane1, gridBagConstraints); itemList2.setModel(new javax.swing.AbstractListModel() { - String[] strings = { "Item 1", "Item 2", "Item 3", "Item 4", "Item 5" }; - public int getSize() { return strings.length; } - public Object getElementAt(int i) { return strings[i]; } + final String[] strings = {"Item 1", "Item 2", "Item 3", "Item 4", "Item 5"}; + + @Override + public int getSize() { + return strings.length; + } + + @Override + public Object getElementAt(int i) { + return strings[i]; + } }); scrollPane2.setViewportView(itemList2); @@ -109,8 +139,9 @@ private void initComponents() { gridBagConstraints.insets = new java.awt.Insets(5, 5, 5, 5); add(scrollPane2, gridBagConstraints); - leftButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/ui/components/resources/leftArrow.png"))); // NOI18N - leftButton.setText(org.openide.util.NbBundle.getMessage(SwapListPanel.class, "SwapListPanel.leftButton.text")); // NOI18N + leftButton.setIcon(ImageUtilities.loadImageIcon("UIComponents/leftArrow.svg", false)); // NOI18N + leftButton.setText( + org.openide.util.NbBundle.getMessage(SwapListPanel.class, "SwapListPanel.leftButton.text")); // NOI18N leftButton.setMinimumSize(new java.awt.Dimension(33, 23)); leftButton.setPreferredSize(new java.awt.Dimension(33, 23)); gridBagConstraints = new java.awt.GridBagConstraints(); @@ -121,8 +152,9 @@ private void initComponents() { gridBagConstraints.insets = new java.awt.Insets(0, 0, 3, 0); add(leftButton, gridBagConstraints); - rightButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/ui/components/resources/rightArrow.png"))); // NOI18N - rightButton.setText(org.openide.util.NbBundle.getMessage(SwapListPanel.class, "SwapListPanel.rightButton.text")); // NOI18N + rightButton.setIcon(ImageUtilities.loadImageIcon("UIComponents/rightArrow.svg", false)); // NOI18N + rightButton.setText( + org.openide.util.NbBundle.getMessage(SwapListPanel.class, "SwapListPanel.rightButton.text")); // NOI18N rightButton.setMinimumSize(new java.awt.Dimension(33, 23)); rightButton.setPreferredSize(new java.awt.Dimension(33, 23)); gridBagConstraints = new java.awt.GridBagConstraints(); @@ -133,14 +165,6 @@ private void initComponents() { gridBagConstraints.insets = new java.awt.Insets(3, 0, 0, 0); add(rightButton, gridBagConstraints); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JList itemList1; - private javax.swing.JList itemList2; - private javax.swing.JButton leftButton; - private javax.swing.JButton rightButton; - private javax.swing.JScrollPane scrollPane1; - private javax.swing.JScrollPane scrollPane2; - // End of variables declaration//GEN-END:variables private class SwapListModel { @@ -202,10 +226,6 @@ public Object[] getLeftValues() { return leftModel.toArray(); } - public Object[] getRightValues() { - return rightModel.toArray(); - } - public void setLeftValues(Object[] values) { leftModel.clear(); for (Object o : values) { @@ -220,5 +240,9 @@ public void setLeftValues(Object[] values) { rightButton.setEnabled(!rightModel.isEmpty()); leftButton.setEnabled(!leftModel.isEmpty()); } + + public Object[] getRightValues() { + return rightModel.toArray(); + } } } diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/WrapLayout.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/WrapLayout.java index 4d3ba36fb8..24f9990fae 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/WrapLayout.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/WrapLayout.java @@ -39,12 +39,17 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components; -import java.awt.*; +import java.awt.Component; +import java.awt.Container; +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.Insets; /** - * FlowLayout subclass that fully supports wrapping of components. + * FlowLayout subclass that fully supports wrapping of components. */ public class WrapLayout extends FlowLayout { @@ -64,6 +69,7 @@ public WrapLayout() { * The value of the alignment argument must be one of * WrapLayout, WrapLayout, * or WrapLayout. + * * @param align the alignment value */ public WrapLayout(int align) { @@ -77,9 +83,10 @@ public WrapLayout(int align) { * The value of the alignment argument must be one of * WrapLayout, WrapLayout, * or WrapLayout. + * * @param align the alignment value - * @param hgap the horizontal gap between components - * @param vgap the vertical gap between components + * @param hgap the horizontal gap between components + * @param vgap the vertical gap between components */ public WrapLayout(int align, int hgap, int vgap) { super(align, hgap, vgap); @@ -88,6 +95,7 @@ public WrapLayout(int align, int hgap, int vgap) { /** * Returns the preferred dimensions for this layout given the * visible components in the specified target container. + * * @param target the component which needs to be laid out * @return the preferred dimensions to lay out the * subcomponents of the specified container @@ -100,6 +108,7 @@ public Dimension preferredLayoutSize(Container target) { /** * Returns the minimum dimensions needed to layout the visible * components contained in the specified target container. + * * @param target the component which needs to be laid out * @return the minimum dimensions to lay out the * subcomponents of the specified container @@ -113,7 +122,7 @@ public Dimension minimumLayoutSize(Container target) { * Returns the minimum or preferred dimension needed to layout the target * container. * - * @param target target to get layout size for + * @param target target to get layout size for * @param preferred should preferred size be calculated * @return the dimension to layout the target container */ @@ -173,10 +182,10 @@ private Dimension layoutSize(Container target, boolean preferred) { dim.width += horizontalInsetsAndGap; dim.height += insets.top + insets.bottom + vgap * 2; - // When using a scroll pane or the DecoratedLookAndFeel we need to - // make sure the preferred size is less than the size of the - // target containter so shrinking the container size works - // correctly. Removing the horizontal gap is an easy way to do this. + //When using a scroll pane or the DecoratedLookAndFeel we need to + //make sure the preferred size is less than the size of the + //target containter so shrinking the container size works + //correctly. Removing the horizontal gap is an easy way to do this. dim.width -= (hgap + 1); @@ -185,10 +194,10 @@ private Dimension layoutSize(Container target, boolean preferred) { } /** - * Layout the components in the Container using the layout logic of the - * parent FlowLayout class. + * Layout the components in the Container using the layout logic of the + * parent FlowLayout class. * - * @param target the Container using this WrapLayout + * @param target the Container using this WrapLayout */ @Override public void layoutContainer(Container target) { diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/gradientslider/GradientSlider.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/gradientslider/GradientSlider.java index 4ee9a463b8..9c38cf058d 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/gradientslider/GradientSlider.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/gradientslider/GradientSlider.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components.gradientslider; import com.bric.swing.ColorPicker; @@ -53,7 +54,6 @@ Development and Distribution License("CDDL") (collectively, the import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.lang.reflect.Constructor; - import javax.swing.JColorChooser; import javax.swing.JPopupMenu; import javax.swing.SwingUtilities; @@ -62,7 +62,8 @@ Development and Distribution License("CDDL") (collectively, the import javax.swing.event.PopupMenuListener; import javax.swing.plaf.ComponentUI; -/** This component lets the user manipulate the colors in a gradient. +/** + * This component lets the user manipulate the colors in a gradient. * A GradientSlider can contain any number of thumbs. The * slider itself represents a range of values from zero to one, so the thumbs * must always be within this range. Each thumb maps to a specific Color. @@ -83,36 +84,55 @@ public class GradientSlider extends MultiThumbSlider { } } - /** Create a horizontal GradientSlider that + /** + * The popup for contextual menus. + */ + JPopupMenu popup; + + /** + * Create a horizontal GradientSlider that * represents a gradient from white to black. */ public GradientSlider() { this(HORIZONTAL); } - /** Create a GradientSlider that represents a + /** + * Create a GradientSlider that represents a * gradient form white to black. + * * @param orientation HORIZONTAL or VERTICAL */ public GradientSlider(int orientation) { - this(orientation, new float[]{0f, 1f}, new Color[]{Color.white, Color.black}); + this(orientation, new float[] {0f, 1f}, new Color[] {Color.white, Color.black}); } - /** Create a new GradientSlider. + /** + * Create a new GradientSlider. * - * @param orientation HORIZONTAL or VERTICAL + * @param orientation HORIZONTAL or VERTICAL * @param thumbPositions the initial positions of each thumb - * @param values the initial colors at each position + * @param values the initial colors at each position * @throws IllegalArgumentException if the number of elements in - * thumbPositions does not equal the number of elements - * in values. - * + * thumbPositions does not equal the number of elements + * in values. */ public GradientSlider(int orientation, float[] thumbPositions, Color[] values) { super(orientation, thumbPositions, values); } - /** Returns the Color at the specified position. + private static Color tween(Color c1, Color c2, float p) { + return new Color( + (int) (c1.getRed() * (1 - p) + c2.getRed() * (p)), + (int) (c1.getGreen() * (1 - p) + c2.getGreen() * (p)), + (int) (c1.getBlue() * (1 - p) + c2.getBlue() * (p)), + (int) (c1.getAlpha() * (1 - p) + c2.getAlpha() * (p))); + } + + /** + * Returns the Color at the specified position. + * + * @return color */ @Override public Object getValue(float pos) { @@ -126,16 +146,19 @@ public Object getValue(float pos) { } } if (pos < thumbPositions[0]) { - return (Color) values[0]; + return values[0]; } if (pos > thumbPositions[thumbPositions.length - 1]) { - return (Color) values[values.length - 1]; + return values[values.length - 1]; } return null; } - /** This is identical to getValues(), + /** + * This is identical to getValues(), * except the return value is an array of Colors. + * + * @return color array */ public Color[] getColors() { Color[] c = new Color[values.length]; @@ -145,17 +168,11 @@ public Color[] getColors() { return c; } - private static Color tween(Color c1, Color c2, float p) { - return new Color( - (int) (c1.getRed() * (1 - p) + c2.getRed() * (p)), - (int) (c1.getGreen() * (1 - p) + c2.getGreen() * (p)), - (int) (c1.getBlue() * (1 - p) + c2.getBlue() * (p)), - (int) (c1.getAlpha() * (1 - p) + c2.getAlpha() * (p))); - } - - /** This invokes a ColorPicker dialog to edit + /** + * This invokes a ColorPicker dialog to edit * the thumb at the selected index. * + * @return return true if successful */ @Override public boolean doDoubleClick(int x, int y) { @@ -170,6 +187,85 @@ public boolean doDoubleClick(int x, int y) { } } + private JPopupMenu createPopup() { + return new ColorPickerPopup(); + } + + /** + * This shows a mini ColorPicker panel to let the user + * change the selected color. + * + * @return true if successful + */ + @Override + public boolean doPopup(int x, int y) { + if (popup == null) { + popup = createPopup(); + } + popup.show(this, x, y); + return true; + } + + private Frame getFrame() { + Window w = SwingUtilities.getWindowAncestor(this); + if (w instanceof Frame) { + return ((Frame) w); + } + return null; + } + + private boolean showColorPicker() { + Color[] colors = getColors(); + int i = getSelectedThumb(); + + Frame frame = getFrame(); + + boolean includeOpacity = + MultiThumbSliderUI.getProperty(this, "GradientSlider.includeOpacity", "true").equals("true"); + colors[i] = ColorPicker.showDialog(frame, colors[i], includeOpacity); + if (colors[i] != null) { + setValues(getThumbPositions(), colors); + } + return true; + } + + /** + * TODO: If developers don't want to bundle the ColorPicker with their programs, + * they can use this method instead of showColorPicker(). + */ + private void showJColorChooser() { + Color[] colors = getColors(); + int i = getSelectedThumb(); + if (i >= 0 && i < colors.length) { + colors[i] = JColorChooser.showDialog(this, "Choose a Color", colors[i]); + if (colors[i] != null) { + setValues(getThumbPositions(), colors); + } + } + } + + @Override + public void updateUI() { + String name = UIManager.getString("GradientSliderUI"); + try { + Class c = Class.forName(name); + Constructor[] constructors = c.getConstructors(); + for (int a = 0; a < constructors.length; a++) { + Class[] types = constructors[a].getParameterTypes(); + if (types.length == 1 && types[0].equals(GradientSlider.class)) { + ComponentUI ui = (ComponentUI) constructors[a].newInstance(new Object[] {this}); + setUI(ui); + return; + } + } + } catch (ClassNotFoundException e) { + throw new RuntimeException("The class \"" + name + "\" could not be found."); + } catch (Throwable t) { + RuntimeException e = new RuntimeException("The class \"" + name + "\" could not be constructed.", t); + throw e; + } + } + class SelectThumbRunnable implements Runnable { int index; @@ -183,12 +279,6 @@ public void run() { setSelectedThumb(index); } } - /** The popup for contextual menus. */ - JPopupMenu popup; - - private JPopupMenu createPopup() { - return new ColorPickerPopup(); - } abstract class AbstractPopup extends JPopupMenu { @@ -256,7 +346,9 @@ public void keyPressed(KeyEvent e) { public ColorPickerPopup() { super(); - boolean includeOpacity = MultiThumbSliderUI.getProperty(GradientSlider.this, "GradientSlider.includeOpacity", "true").equals("true"); + boolean includeOpacity = + MultiThumbSliderUI.getProperty(GradientSlider.this, "GradientSlider.includeOpacity", "true") + .equals("true"); mini = new ColorPicker(false, includeOpacity); mini.setMode(0); @@ -290,75 +382,4 @@ public void setColor(Color c) { mini.setRGB(c.getRed(), c.getGreen(), c.getBlue()); } } - - /** This shows a mini ColorPicker panel to let the user - * change the selected color. - */ - @Override - public boolean doPopup(int x, int y) { - if (popup == null) { - popup = createPopup(); - } - popup.show(this, x, y); - return true; - } - - private Frame getFrame() { - Window w = SwingUtilities.getWindowAncestor(this); - if (w instanceof Frame) { - return ((Frame) w); - } - return null; - } - - private boolean showColorPicker() { - Color[] colors = getColors(); - int i = getSelectedThumb(); - - Frame frame = getFrame(); - - boolean includeOpacity = MultiThumbSliderUI.getProperty(this, "GradientSlider.includeOpacity", "true").equals("true"); - colors[i] = ColorPicker.showDialog(frame, colors[i], includeOpacity); - if (colors[i] != null) { - setValues(getThumbPositions(), colors); - } - return true; - } - - /** TODO: If developers don't want to bundle the ColorPicker with their programs, - * they can use this method instead of showColorPicker(). - */ - private void showJColorChooser() { - Color[] colors = getColors(); - int i = getSelectedThumb(); - if (i >= 0 && i < colors.length) { - colors[i] = JColorChooser.showDialog(this, "Choose a Color", colors[i]); - if (colors[i] != null) { - setValues(getThumbPositions(), colors); - } - } - } - - @Override - public void updateUI() { - String name = UIManager.getString("GradientSliderUI"); - try { - Class c = Class.forName(name); - Constructor[] constructors = c.getConstructors(); - for (int a = 0; a < constructors.length; a++) { - Class[] types = constructors[a].getParameterTypes(); - if (types.length == 1 && types[0].equals(GradientSlider.class)) { - ComponentUI ui = (ComponentUI) constructors[a].newInstance(new Object[]{this}); - setUI(ui); - return; - } - } - } catch (ClassNotFoundException e) { - throw new RuntimeException("The class \"" + name + "\" could not be found."); - } catch (Throwable t) { - RuntimeException e = new RuntimeException("The class \"" + name + "\" could not be constructed."); - e.initCause(t); - throw e; - } - } } diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/gradientslider/GradientSliderUI.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/gradientslider/GradientSliderUI.java index d3a71724b8..7c7b6a26c1 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/gradientslider/GradientSliderUI.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/gradientslider/GradientSliderUI.java @@ -38,7 +38,8 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.ui.components.gradientslider; import java.awt.AlphaComposite; @@ -56,54 +57,86 @@ Development and Distribution License("CDDL") (collectively, the import java.awt.geom.NoninvertibleTransformException; import java.awt.geom.RoundRectangle2D; import java.awt.image.BufferedImage; - import javax.swing.JComponent; -/** The UI for the GradientSlider class. - * - * There are 3 properties you can use to customize the UI - * of a GradientSlider. You can set these for each slider - * by calling: - *
            slider.putClientProperty(key,value); - *

            Or you can set these globally by calling: +/** + * The UI for the GradientSlider class. + *

            + * There are 3 properties you can use to customize the UI of a GradientSlider. + * You can set these for each slider by calling + * slider.putClientProperty(key,value); + *

            + * Or you can set these globally by calling: *
            UIManager.put(key,value); - *

            The three properties are: - *

            + *

            + * The three properties are: + *

            * - * + * - * + * - * + * - * + * * * - * + * - * + *
            Property NameDefault ValueDescription - *
            Property NameDefault ValueDescription *
            GradientSlider.useBevel"false"If this is true, then this slider will be painted in a rectangle with a bevel effect around the borders. If this is false, then this slider will be painted in a rounded rectangle. - *
            GradientSlider.useBevel"false"If this is + * true, then this slider will be painted in a rectangle with a + * bevel effect around the borders. If this is false, then this + * slider will be painted in a rounded rectangle. *
            GradientSlider.showTranslucency"true"If this is true, then the slider will reflect the opacity of the colors in the gradient, and paint a checkered background underneath the colors to indicate opacity. If this is false, then this slider will always paint with completely opaque colors, although the actual colors may be translucent. - *
            GradientSlider.showTranslucency"true"If this is + * true, then the slider will reflect the opacity of the colors in + * the gradient, and paint a checkered background underneath the colors to + * indicate opacity. If this is false, then this slider will always + * paint with completely opaque colors, although the actual colors may be + * translucent. *
            GradientSlider.includeOpacity"true"This is used when the user double-clicks a color and a ColorPicker dialog is invoked. (So this value may not have any meaning if you override GradientSlider.doDoubleClick().) This controls whether the opacity/alpha controls are available in that dialog. This does not control whether translucent colors can be used in this slider: translucent colors are always allowed, if the user can enter them.GradientSlider.includeOpacity"true"This is used when + * the user double-clicks a color and a ColorPicker dialog is invoked. (So this + * value may not have any meaning if you override + * GradientSlider.doDoubleClick().) This controls whether the + * opacity/alpha controls are available in that dialog. This does not + * control whether translucent colors can be used in this slider: translucent + * colors are always allowed, if the user can enter them.
            MultiThumbSlider.indicateComponent"true"If this is true, then the thumbs will only paint on this component when the mouse is inside this slider or when this slider as the keyboard focus. - *
            MultiThumbSlider.indicateComponent"true"If this is + * true, then the thumbs will only paint on this component when the + * mouse is inside this slider or when this slider as the keyboard + * focus. *
            MultiThumbSlider.indicateThumb"true"If this is true, then the thumb the mouse is over will gently fade into a slightly different color. - *
            MultiThumbSlider.indicateThumb"true"If this is + * true, then the thumb the mouse is over will gently fade into a + * slightly different color. *
            - * */ public class GradientSliderUI extends MultiThumbSliderUI { + static TexturePaint checkerPaint; + static GeneralPath hTriangle = null; + static GeneralPath vTriangle = null; int TRIANGLE_SIZE = 8; - /** The width of this image is the absolute widest the track will - * ever become. + /** + * The width of this image is the absolute widest the track will ever + * become. */ BufferedImage img = new BufferedImage(1000, 1, BufferedImage.TYPE_INT_ARGB); - /** A temporary array used for the buffered image */ + /** + * A temporary array used for the buffered image + */ int[] array = new int[img.getWidth()]; public GradientSliderUI(GradientSlider slider) { super(slider); } + private static void createCheckerPaint() { + int k = 4; + BufferedImage bi = new BufferedImage(2 * k, 2 * k, BufferedImage.TYPE_INT_RGB); + Graphics2D g = bi.createGraphics(); + g.setColor(Color.white); + g.fillRect(0, 0, 2 * k, 2 * k); + g.setColor(Color.lightGray); + g.fillRect(0, 0, k, k); + g.fillRect(k, k, k, k); + checkerPaint = new TexturePaint(bi, new Rectangle(0, 0, bi.getWidth(), bi.getHeight())); + } + @Override public int getClickLocationTolerance() { return TRIANGLE_SIZE; @@ -113,7 +146,8 @@ protected void calculateImage() { float[] f = slider.getThumbPositions(); Color[] c = ((GradientSlider) slider).getColors(); - /** make sure we DO have a value at 0 and 1: + /** + * make sure we DO have a value at 0 and 1: */ if (f[0] != 0) { float[] f2 = new float[f.length + 1]; @@ -136,13 +170,15 @@ protected void calculateImage() { c[c.length - 1] = c[c.length - 2]; } - /** Now, finally paint */ + /** + * Now, finally paint + */ int[] argb = new int[c.length]; for (int a = 0; a < argb.length; a++) { - argb[a] = ((c[a].getAlpha() & 0xff) << 24) + - ((c[a].getRed() & 0xff) << 16) + - ((c[a].getGreen() & 0xff) << 8) + - ((c[a].getBlue() & 0xff) << 0); + argb[a] = ((c[a].getAlpha() & 0xff) << 24) + + ((c[a].getRed() & 0xff) << 16) + + ((c[a].getGreen() & 0xff) << 8) + + ((c[a].getBlue() & 0xff) << 0); } int max; if (slider.getOrientation() == GradientSlider.HORIZONTAL) { @@ -195,10 +231,10 @@ protected void calculateImage() { a1 = 255; a2 = 255; } - array[z] = (((int) (a1 * (1 - colorFraction) + a2 * colorFraction)) << 24) + - (((int) (r1 * (1 - colorFraction) + r2 * colorFraction)) << 16) + - (((int) (g1 * (1 - colorFraction) + g2 * colorFraction)) << 8) + - (((int) (b1 * (1 - colorFraction) + b2 * colorFraction))); + array[z] = (((int) (a1 * (1 - colorFraction) + a2 * colorFraction)) << 24) + + (((int) (r1 * (1 - colorFraction) + r2 * colorFraction)) << 16) + + (((int) (g1 * (1 - colorFraction) + g2 * colorFraction)) << 8) + + (((int) (b1 * (1 - colorFraction) + b2 * colorFraction))); } img.getRaster().setDataElements(0, 0, max, 1, array); } @@ -267,23 +303,12 @@ protected void calculateGeometry() { super.calculateGeometry(); calculateImage(); } - static TexturePaint checkerPaint; - - private static void createCheckerPaint() { - int k = 4; - BufferedImage bi = new BufferedImage(2 * k, 2 * k, BufferedImage.TYPE_INT_RGB); - Graphics2D g = bi.createGraphics(); - g.setColor(Color.white); - g.fillRect(0, 0, 2 * k, 2 * k); - g.setColor(Color.lightGray); - g.fillRect(0, 0, k, k); - g.fillRect(k, k, k, k); - checkerPaint = new TexturePaint(bi, new Rectangle(0, 0, bi.getWidth(), bi.getHeight())); - } - /** The "frame" includes the trackRect and possible some extra padding. - * For example, the frame might be the rounded rectangle enclosing the - * track (if rounded rectangles are turned on) + /** + * The "frame" includes the trackRect and possible some extra padding. For + * example, the frame might be the rounded rectangle enclosing the track (if + * rounded rectangles are turned on) + * * @return */ private Shape getFrame() { @@ -295,15 +320,15 @@ private Shape getFrame() { if (slider.getOrientation() == GradientSlider.HORIZONTAL) { int curve = Math.min(TRIANGLE_SIZE - 2, trackRect.height / 2); return new RoundRectangle2D.Float( - trackRect.x - curve, trackRect.y, - trackRect.width + 2 * curve, trackRect.height, - curve * 2, curve * 2); + trackRect.x - curve, trackRect.y, + trackRect.width + 2 * curve, trackRect.height, + curve * 2, curve * 2); } else { int curve = Math.min(TRIANGLE_SIZE - 2, trackRect.width / 2); return new RoundRectangle2D.Float( - trackRect.x, trackRect.y - curve, - trackRect.width, trackRect.height + 2 * curve, - curve * 2, curve * 2); + trackRect.x, trackRect.y - curve, + trackRect.width, trackRect.height + 2 * curve, + curve * 2, curve * 2); } } @@ -337,19 +362,17 @@ protected void paintTrack(Graphics2D g) { } else { transform.rotate(-Math.PI / 2, trackRect.x, trackRect.y + trackRect.height); } + } else if (slider.isInverted()) { + //flip horizontal: + double x1 = trackRect.x; + double x2 = trackRect.x + trackRect.width; + //m00*x1+m02 = x2 + //m00*x2+m02 = x1 + double m00 = (x2 - x1) / (x1 - x2); + double m02 = x1 - m00 * x2; + transform.setTransform(m00, 0, 0, 1, m02, 0); } else { - if (slider.isInverted()) { - //flip horizontal: - double x1 = trackRect.x; - double x2 = trackRect.x + trackRect.width; - //m00*x1+m02 = x2 - //m00*x2+m02 = x1 - double m00 = (x2 - x1) / (x1 - x2); - double m02 = x1 - m00 * x2; - transform.setTransform(m00, 0, 0, 1, m02, 0); - } else { - //no transform necessary - } + //no transform necessary } g.transform(transform); @@ -367,13 +390,13 @@ protected void paintTrack(Graphics2D g) { PaintUtils.drawBevel(g, trackRect); } else { g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); + RenderingHints.VALUE_ANTIALIAS_ON); Shape oldClip = g.getClip(); int first, last; Color[] colors = ((GradientSlider) slider).getColors(); float[] f = slider.getThumbPositions(); - if ((slider.isInverted() == false && slider.getOrientation() == GradientSlider.HORIZONTAL) || - (slider.isInverted() == true && slider.getOrientation() == GradientSlider.VERTICAL)) { + if ((slider.isInverted() == false && slider.getOrientation() == GradientSlider.HORIZONTAL) + || (slider.isInverted() == true && slider.getOrientation() == GradientSlider.VERTICAL)) { first = 0; last = colors.length - 1; while (f[first] < 0) { @@ -398,14 +421,14 @@ protected void paintTrack(Graphics2D g) { g.fillRect(0, 0, trackRect.x, slider.getHeight()); g.setColor(colors[last]); g.fillRect(trackRect.x + trackRect.width, 0, - slider.getWidth() - (trackRect.x + trackRect.width), slider.getHeight()); + slider.getWidth() - (trackRect.x + trackRect.width), slider.getHeight()); } else { g.clip(frame); g.setColor(colors[first]); g.fillRect(0, 0, slider.getWidth(), trackRect.y); g.setColor(colors[last]); g.fillRect(0, trackRect.y + trackRect.height, - slider.getWidth(), slider.getHeight() - (trackRect.y + trackRect.height)); + slider.getWidth(), slider.getHeight() - (trackRect.y + trackRect.height)); } g.setStroke(new BasicStroke(1)); g.setClip(oldClip); @@ -444,8 +467,6 @@ protected void paintTick(Graphics2D g, float f, int d) { @Override protected void paintFocus(Graphics2D g) { } - static GeneralPath hTriangle = null; - static GeneralPath vTriangle = null; @Override protected void paintThumbs(Graphics2D g) { @@ -468,7 +489,6 @@ protected void paintThumbs(Graphics2D g) { vTriangle.closePath(); } - AffineTransform t = new AffineTransform(); int dx = trackRect.x + trackRect.width; int dy = trackRect.y + trackRect.height; @@ -482,7 +502,7 @@ protected void paintThumbs(Graphics2D g) { Composite oldComposite = g.getComposite(); g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, - indication)); + indication)); for (int a = 0; a < thumbPositions.length; a++) { if (f[a] >= 0 && f[a] <= 1 && a != selected) { @@ -499,8 +519,8 @@ protected void paintThumbs(Graphics2D g) { float brightness = Math.max(0, thumbIndications[a] * .6f); g.setColor(new Color((int) (255 * brightness), - (int) (255 * brightness), - (int) (255 * brightness))); + (int) (255 * brightness), + (int) (255 * brightness))); g.fill(shape); g.translate(-.5f, -.5f); @@ -515,7 +535,7 @@ protected void paintThumbs(Graphics2D g) { } g.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, - indication)); + indication)); if (selected != -1 && f[selected] >= 0 && f[selected] <= 1) { if (orientation == GradientSlider.HORIZONTAL) { diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/gradientslider/MultiThumbSlider.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/gradientslider/MultiThumbSlider.java index cabc4fe32e..a317b10a7b 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/gradientslider/MultiThumbSlider.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/gradientslider/MultiThumbSlider.java @@ -39,17 +39,19 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components.gradientslider; import java.util.List; import java.util.Vector; - import javax.swing.JComponent; import javax.swing.SwingConstants; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; +import org.openide.util.Exceptions; -/** This JComponent resembles a JSlider, except there are +/** + * This JComponent resembles a JSlider, except there are * at least two thumbs. A JSlider is designed to modify * one number within a certain range of values. By contrast a MultiThumbSlider * actually modifies a table of data. Each thumb in a MultiThumbSlider @@ -72,77 +74,109 @@ Development and Distribution License("CDDL") (collectively, the * doPopup(). The UI will invoke these methods as needed; this gives the * user a chance to edit the values represented at a particular point. *

            Also using the keyboard: - *

          6. In a horizontal slider, the user can press modifier+left or modifer+right to insert + *
              + *
            • In a horizontal slider, the user can press modifier+left or modifer+right to insert * a new thumb to the left/right of the currently selected thumb. (Where "modifier" refers * to Toolkit.getDefaultTookit().getMenuShortcutKeyMask(). On Mac this is META, and on Windows * this is CONTROL.) Likewise on a vertical slider the up/down arrow keys can be used to add * thumbs. - *
            • The delete/backspace key can be used to remove thumbs. - *
            • In a horizontal slider, the down arrow key can be used to invoke doPopup(). + *
            • The delete/backspace key can be used to remove thumbs. + *
            • In a horizontal slider, the down arrow key can be used to invoke doPopup(). * This should invoke a JPopupMenu that is keyboard accessible, so the user should be * able to navigate this component without a mouse. Likewise on a vertical slider the right * arrow key should do the same. - *
            • The space bar or return key invokes doDoubleClick().
            • - *

              Because thumbs can be abstractly inserted, this values each thumb represents should be + *

            • The space bar or return key invokes doDoubleClick(). + *
            + *

            Because thumbs can be abstractly inserted, this values each thumb represents should be * tween-able. That is, if there is a value at zero and a value at one, the call * getValue(.5f) must return a value that is halfway between those values. *

            Also note that although the thumbs must always be between zero and one: the minimum * and maximum thumbs do not have to be zero and one. The user can adjust them so the * minimum thumb is, say, .2f, and the maximum thumb is .5f. - * */ //Author Jeremy Wood public abstract class MultiThumbSlider extends JComponent { - private static final long serialVersionUID = 1L; - /** The property that is changed when setSelectedThumb() is called. */ + /** + * The property that is changed when setSelectedThumb() is called. + */ public static final String SELECTED_THUMB_PROPERTY = "selected thumb"; - /** The property that is changed when setInverted(b) is called. */ + /** + * The property that is changed when setInverted(b) is called. + */ public static final String INVERTED_PROPERTY = "inverted"; - /** The property that is changed when setOrientation(i) is called. */ + /** + * The property that is changed when setOrientation(i) is called. + */ public static final String ORIENTATION_PROPERTY = "orientation"; - /** The property that is changed when setValues() is called. + /** + * The property that is changed when setValues() is called. * Note this is used when either the positions or the values are updated, because * they need to be updated at the same time to maintain an exact one-to-one * ratio. */ public static final String VALUES_PROPERTY = "values"; - /** The property that is changed when setValueIsAdjusting(b) is called. */ + /** + * The property that is changed when setValueIsAdjusting(b) is called. + */ public static final String ADJUST_PROPERTY = "adjusting"; - /** The property that is changed when setPaintTicks(b) is called. */ + /** + * The property that is changed when setPaintTicks(b) is called. + */ public static final String PAINT_TICKS_PROPERTY = "paint ticks"; - /** The positions of the thumbs */ + /** + * The orientation constant for a horizontal slider. + */ + public static final int HORIZONTAL = SwingConstants.HORIZONTAL; + /** + * The orientation constant for a vertical slider. + */ + public static final int VERTICAL = SwingConstants.VERTICAL; + private static final long serialVersionUID = 1L; + /** + * The positions of the thumbs + */ protected float[] thumbPositions = new float[0]; - /** The values for each thumb */ + /** + * The values for each thumb + */ Object[] values = new Object[0]; - /** Whether thumbs are automatically added when the user clicks + /** + * Whether thumbs are automatically added when the user clicks * in a space with no existing thumbs */ boolean autoAdd = true; - /** Whether the UI is currently adjusting values. */ + /** + * Whether the UI is currently adjusting values. + */ boolean adjusting = false; - /** Whether this slider is HORIZONTAL or VERTICAL. */ + /** + * Whether this slider is HORIZONTAL or VERTICAL. + */ int orientation; - /** Whether this slider is inverted or not. */ + /** + * Whether this slider is inverted or not. + */ boolean inverted = false; - /** Whether tickmarks should be painted on this slider. */ + /** + * Whether tickmarks should be painted on this slider. + */ boolean paintTicks = false; - /** Whether this slider is blocked, no more colors can be added by user. */ - boolean blocked = false; - /** ChangeListeners registered with this slider. */ - List changeListeners; - /** The orientation constant for a horizontal slider. + /** + * Whether this slider is blocked, no more colors can be added by user. */ - public static final int HORIZONTAL = SwingConstants.HORIZONTAL; - /** The orientation constant for a vertical slider. + boolean blocked = false; + /** + * ChangeListeners registered with this slider. */ - public static final int VERTICAL = SwingConstants.VERTICAL; + List changeListeners; - /** Creates a new MultiThumbSlider. + /** + * Creates a new MultiThumbSlider. * - * @param orientation must be HORIZONTAL or VERTICAL + * @param orientation must be HORIZONTAL or VERTICAL * @param thumbPositions an array of values from zero to one. - * @param values an array of values, each value corresponds to a value in thumbPositions. + * @param values an array of values, each value corresponds to a value in thumbPositions. */ public MultiThumbSlider(int orientation, float[] thumbPositions, Object[] values) { setOrientation(orientation); @@ -151,11 +185,30 @@ public MultiThumbSlider(int orientation, float[] thumbPositions, Object[] values updateUI(); } - /** This listener will be notified when the colors/positions of + /** + * @param f an array of floats + * @return a string representation of f + */ + private static String toString(float[] f) { + StringBuffer sb = new StringBuffer(); + sb.append('['); + for (int a = 0; a < f.length; a++) { + sb.append(f[a]); + if (a != f.length - 1) { + sb.append(", "); + } + } + sb.append(']'); + return sb.toString(); + } + + /** + * This listener will be notified when the colors/positions of * this slider are modified. *

            Note you can also listen to these events by listening to * the VALUES_PROPERTY, but this mechanism is provided * as a convenience to resemble the JSlider model. + * * @param l the ChangeListener to add. */ public void addChangeListener(ChangeListener l) { @@ -168,7 +221,10 @@ public void addChangeListener(ChangeListener l) { changeListeners.add(l); } - /** Removes a ChangeListener from this slider. + /** + * Removes a ChangeListener from this slider. + * + * @param l the ChangeListener to remove. */ public void removeChangeListener(ChangeListener l) { if (changeListeners == null) { @@ -177,7 +233,9 @@ public void removeChangeListener(ChangeListener l) { changeListeners.remove(l); } - /** Invokes all the ChangeListeners. */ + /** + * Invokes all the ChangeListeners. + */ protected void fireChangeListeners() { if (changeListeners == null) { return; @@ -186,12 +244,13 @@ protected void fireChangeListeners() { try { ((ChangeListener) changeListeners.get(a)).stateChanged(new ChangeEvent(this)); } catch (Throwable t) { - t.printStackTrace(); + Exceptions.printStackTrace(t); } } } - /** Depending on which thumb is selected, this may shift the focus + /** + * Depending on which thumb is selected, this may shift the focus * to the next available thumb, or it may shift the focus to the * next focusable JComponent. */ @@ -200,7 +259,8 @@ public void transferFocus() { transferFocus(true); } - /** Shifts the focus forward or backward. + /** + * Shifts the focus forward or backward. * This may decide to select another thumb, or it may * call super.transferFocus() to let the * next JComponent receive the focus. @@ -239,7 +299,8 @@ private void transferFocus(boolean forward) { } } - /** Depending on which thumb is selected, this may shift the focus + /** + * Depending on which thumb is selected, this may shift the focus * to the previous available thumb, or it may shift the focus to the * previous focusable JComponent. */ @@ -248,7 +309,8 @@ public void transferFocusBackward() { transferFocus(false); } - /** This returns a value at a certain position on this slider. + /** + * This returns a value at a certain position on this slider. *

            Subclasses implementing this method should note that * this method cannot return null. If the pos argument * is outside the domain of thumbs, then a value still needs to be @@ -259,7 +321,8 @@ public void transferFocusBackward() { */ public abstract Object getValue(float pos); - /** Removes a specific thumb + /** + * Removes a specific thumb * * @param thumbIndex the thumb index to remove. */ @@ -277,7 +340,8 @@ public void removeThumb(int thumbIndex) { setValues(f, c); } - /** An optional method subclasses can override to react to the user's + /** + * An optional method subclasses can override to react to the user's * double-click. When a thumb is double-clicked the user is trying to edit * the value for that thumb. A double-click probably * suggests the user wants a detailed set of controls to edit a value, such @@ -290,6 +354,7 @@ public void removeThumb(int thumbIndex) { * assumed for a double-click event that the user has selected a thumb * (since one click will click/create a thumb) and intends to edit the currently * selected thumb. + * * @param x the x-value of the mouse click location * @param y the y-value of the mouse click location * @return true if this event was consumed, or acted upon. @@ -299,11 +364,13 @@ public boolean doDoubleClick(int x, int y) { return false; } - /** An optional method subclasses can override to react to the user's + /** + * An optional method subclasses can override to react to the user's * request for a contextual menu. When a thumb is right-clicked the * user is trying to edit the value for that thumb. A right-click probably * suggests the user wants very quick, simple options to adjust a thumb. *

            By default this method does nothing, and returns false + * * @param x the x-value of the mouse click location * @param y the y-value of the mouse click location * @return true if this event was consumed, or acted upon. @@ -313,16 +380,20 @@ public boolean doPopup(int x, int y) { return false; } - /** Tells if tick marks are to be painted. + /** + * Tells if tick marks are to be painted. + * * @return whether ticks should be painted on this slider. */ public boolean isPaintTicks() { return paintTicks; } - /** Turns on/off the painted tick marks for this slider. + /** + * Turns on/off the painted tick marks for this slider. *

            This triggers a PropertyChangeEvent for * PAINT_TICKS_PROPERTY. + * * @param b whether tick marks should be painted */ public void setPaintTicks(boolean b) { @@ -336,6 +407,8 @@ public void setPaintTicks(boolean b) { /** * Returns true if the slider is blocked. No more colors can be added by user. + * + * @return true if blocked */ public boolean isBlocked() { return blocked; @@ -343,13 +416,15 @@ public boolean isBlocked() { /** * Enable/Disable adding new colors by user + * * @param blocked whether the user can add new colors */ public void setBlocked(boolean blocked) { this.blocked = blocked; } - /** This inserts a thumb at a position indicated. + /** + * This inserts a thumb at a position indicated. *

            This method relies on the abstract getValue(float) to * determine what value to put at the new thumb location. * @@ -400,14 +475,16 @@ public int addThumb(float pos) { return newIndex; } - /** This is used to notify other objects when the user is in the process + /** + * This is used to notify other objects when the user is in the process * of adjusting values in this slider. *

            A listener may not want to act on certain changes until this property * is false if it is expensive to process certain changes. * *

            This triggers a PropertyChangeEvent for * ADJUST_PROPERTY. - * @param b + * + * @param b value */ public void setValueIsAdjusting(boolean b) { if (b == adjusting) { @@ -417,14 +494,17 @@ public void setValueIsAdjusting(boolean b) { firePropertyChange(ADJUST_PROPERTY, new Boolean(!b), new Boolean(b)); } - /** true if the user is current modifying this component. + /** + * true if the user is current modifying this component. + * * @return the value of the adjusting property */ public boolean isValueAdjusting() { return adjusting; } - /** The thumb positions for this slider. + /** + * The thumb positions for this slider. *

            There is a one-to-one correspondence between this array and the * getValues() array. *

            This array is always sorted in ascending order. @@ -437,7 +517,8 @@ public float[] getThumbPositions() { return f; } - /** The values for thumbs for this slider. + /** + * The values for thumbs for this slider. *

            There is a one-to-one correspondence between this array and the * getThumbPositions() array. * @@ -450,24 +531,7 @@ public Object[] getValues() { } /** - * - * @param f an array of floats - * @return a string representation of f - */ - private static String toString(float[] f) { - StringBuffer sb = new StringBuffer(); - sb.append('['); - for (int a = 0; a < f.length; a++) { - sb.append(Float.toString(f[a])); - if (a != f.length - 1) { - sb.append(", "); - } - } - sb.append(']'); - return sb.toString(); - } - - /** This assigns new positions/values for the thumbs in this slider. + * This assigns new positions/values for the thumbs in this slider. * The two must be assigned at exactly the same time, so there is * always the same number of thumbs/sliders. * @@ -476,13 +540,15 @@ private static String toString(float[] f) { * SELECTED_THUMB_PROPERTY if that had to be adjusted, too. * * @param thumbPositions an array of the new position of each thumb - * @param values an array of the value associated with each thumb + * @param values an array of the value associated with each thumb * @throws IllegalArgumentException if the size of the arrays are different, - * or if the thumbPositions array is not sorted in ascending order. + * or if the thumbPositions array is not sorted in ascending order. */ public void setValues(float[] thumbPositions, Object[] values) { if (values.length != thumbPositions.length) { - throw new IllegalArgumentException("there number of positions (" + thumbPositions.length + ") must equal the number of values (" + values.length + ")"); + throw new IllegalArgumentException( + "there number of positions (" + thumbPositions.length + ") must equal the number of values (" + + values.length + ")"); } for (int a = 0; a < values.length; a++) { @@ -490,10 +556,12 @@ public void setValues(float[] thumbPositions, Object[] values) { throw new NullPointerException(); } if (a > 0 && thumbPositions[a] < thumbPositions[a - 1]) { - throw new IllegalArgumentException("the thumb positions must be ascending order (" + toString(thumbPositions) + ")"); + throw new IllegalArgumentException( + "the thumb positions must be ascending order (" + toString(thumbPositions) + ")"); } if (thumbPositions[a] < 0 || thumbPositions[a] > 1) { - throw new IllegalArgumentException("illegal thumb value " + thumbPositions[a] + " (must be between zero and one)"); + throw new IllegalArgumentException( + "illegal thumb value " + thumbPositions[a] + " (must be between zero and one)"); } } @@ -532,7 +600,8 @@ public void setValues(float[] thumbPositions, Object[] values) { fireChangeListeners(); } - /** The number of thumbs in this slider. + /** + * The number of thumbs in this slider. * * @return the number of thumbs. */ @@ -540,7 +609,18 @@ public int getThumbCount() { return thumbPositions.length; } - /** Assigns the currently selected thumb. A value of -1 indicates + /** + * Returns the selected thumb index, or -1 if this component doesn't have + * the keyboard focus. + * + * @return the selected thumb index + */ + public int getSelectedThumb() { + return getSelectedThumb(true); + } + + /** + * Assigns the currently selected thumb. A value of -1 indicates * that no thumb is currently selected. *

            A slider should always have a selected thumb if it has the keyboard focus, though, * so be careful when you modify this. @@ -553,16 +633,8 @@ public void setSelectedThumb(int index) { putClientProperty(SELECTED_THUMB_PROPERTY, new Integer(index)); } - /** Returns the selected thumb index, or -1 if this component doesn't have - * the keyboard focus. - * - * @return the selected thumb index - */ - public int getSelectedThumb() { - return getSelectedThumb(true); - } - - /** Returns the currently selected thumb index. + /** + * Returns the currently selected thumb index. *

            Note this might be -1, indicating that there is no selected thumb. * *

            It is recommend you use the getSelectedThumb() method @@ -570,9 +642,9 @@ public int getSelectedThumb() { * a better user experience as this component gains and loses focus. * * @param ignoreIfUnfocused if this component doesn't have focus and this - * is true, then this returns -1. If this is false - * then this returns the internal value used to store the selected index, but - * the user may not realize this thumb is "selected". + * is true, then this returns -1. If this is false + * then this returns the internal value used to store the selected index, but + * the user may not realize this thumb is "selected". * @return the selected thumb */ public int getSelectedThumb(boolean ignoreIfUnfocused) { @@ -586,23 +658,28 @@ public int getSelectedThumb(boolean ignoreIfUnfocused) { return i.intValue(); } - /** Controls whether thumbs are automatically added when the + /** + * Whether thumbs are automatically added when the * user clicks in a space that doesn't already have a thumb. * - * @param b whether auto adding is active or not + * @return true if auto adding */ - public void setAutoAdding(boolean b) { - autoAdd = b; + public boolean isAutoAdding() { + return autoAdd; } - /** Whether thumbs are automatically added when the + /** + * Controls whether thumbs are automatically added when the * user clicks in a space that doesn't already have a thumb. + * + * @param b whether auto adding is active or not */ - public boolean isAutoAdding() { - return autoAdd; + public void setAutoAdding(boolean b) { + autoAdd = b; } - /** The orientation of this slider. + /** + * The orientation of this slider. * * @return HORIZONTAL or VERTICAL */ @@ -610,7 +687,8 @@ public int getOrientation() { return orientation; } - /** Reassign the orientation of this slider. + /** + * Reassign the orientation of this slider. * * @param i must be HORIZONTAL or VERTICAL */ @@ -627,16 +705,22 @@ public void setOrientation(int i) { firePropertyChange(ORIENTATION_PROPERTY, new Integer(oldValue), new Integer(i)); } - /** Whether this slider is inverted or not. + /** + * Whether this slider is inverted or not. + * + * @return true if inverted */ public boolean isInverted() { return inverted; } - /** Assigns whether this slider is inverted or not. + /** + * Assigns whether this slider is inverted or not. * *

            This triggers a PropertyChangeEvent for * INVERTED_PROPERTY. + * + * @param b value */ public void setInverted(boolean b) { if (inverted == b) { diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/gradientslider/MultiThumbSliderUI.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/gradientslider/MultiThumbSliderUI.java index 5abd60c1c9..7088cd038c 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/gradientslider/MultiThumbSliderUI.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/gradientslider/MultiThumbSliderUI.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components.gradientslider; import java.awt.Component; @@ -60,153 +61,178 @@ Development and Distribution License("CDDL") (collectively, the import java.awt.event.MouseMotionListener; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; - import javax.swing.JComponent; import javax.swing.JSlider; import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; -/** This is the abstract UI for MultiThumbSliders - * +/** + * This is the abstract UI for MultiThumbSliders */ //Author Jeremy Wood public abstract class MultiThumbSliderUI extends ComponentUI implements MouseListener, MouseMotionListener { protected MultiThumbSlider slider; - /** The maximum width returned by getMaximumSize(). + /** + * A float from zero to one, indicating whether that thumb should be highlighted + * or not. + */ + protected float[] thumbIndications = new float[0]; + /** + * The rectangle the track should be painted in. + */ + protected Rectangle trackRect = new Rectangle(0, 0, 0, 0); + /** + * The maximum width returned by getMaximumSize(). * (or if the slider is vertical, this is the maximum height.) */ int MAX_LENGTH = 300; - /** The minimum width returned by getMinimumSize(). + /** + * The minimum width returned by getMinimumSize(). * (or if the slider is vertical, this is the minimum height.) */ int MIN_LENGTH = 50; - /** The maximum width returned by getPreferredSize(). + /** + * The maximum width returned by getPreferredSize(). * (or if the slider is vertical, this is the preferred height.) */ int PREF_LENGTH = 140; - /** The height of a horizontal slider -- or width of a vertical slider. + /** + * The height of a horizontal slider -- or width of a vertical slider. */ int DEPTH = 15; - /** The pixel position of the thumbs. This may be x or y coordinates, depending on + /** + * The pixel position of the thumbs. This may be x or y coordinates, depending on * whether this slider is horizontal or vertical */ int[] thumbPositions = new int[0]; - /** A float from zero to one, indicating whether that thumb should be highlighted - * or not. - */ - protected float[] thumbIndications = new float[0]; - /** This is used by the animating thread. The field indication is updated until it equals this value. */ - private float indicationGoal = 0; - /** The overall indication of the thumbs. At one they should be opaque, + /** + * The overall indication of the thumbs. At one they should be opaque, * at zero they should be transparent. */ float indication = 0; - /** The rectangle the track should be painted in. */ - protected Rectangle trackRect = new Rectangle(0, 0, 0, 0); - - public MultiThumbSliderUI(MultiThumbSlider slider) { - this.slider = slider; - } + Thread animatingThread = null; + KeyListener keyListener = new KeyListener() { - @Override - public Dimension getMaximumSize(JComponent s) { - MultiThumbSlider mySlider = (MultiThumbSlider) s; - if (mySlider.getOrientation() == MultiThumbSlider.HORIZONTAL) { - return new Dimension(MAX_LENGTH, DEPTH); - } - return new Dimension(DEPTH, MAX_LENGTH); - } + @Override + public void keyPressed(KeyEvent e) { + if (slider.isEnabled() == false) { + return; + } - @Override - public Dimension getMinimumSize(JComponent s) { - MultiThumbSlider mySlider = (MultiThumbSlider) s; - if (mySlider.getOrientation() == MultiThumbSlider.HORIZONTAL) { - return new Dimension(MIN_LENGTH, DEPTH); + if (e.getSource() != slider) { + throw new RuntimeException("only install this UI on the GradientSlider it was constructed with"); + } + int i = slider.getSelectedThumb(); + int code = e.getKeyCode(); + int orientation = slider.getOrientation(); + if (i != -1 && + (code == KeyEvent.VK_RIGHT || code == KeyEvent.VK_LEFT) && + orientation == MultiThumbSlider.HORIZONTAL && + e.getModifiers() == Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()) { + //insert a new thumb + int i2; + if ((code == KeyEvent.VK_RIGHT && slider.isInverted() == false) || + (code == KeyEvent.VK_LEFT && slider.isInverted() == true)) { + i2 = i + 1; + } else { + i2 = i - 1; + } + addThumb(i, i2); + e.consume(); + return; + } else if (i != -1 && + (code == KeyEvent.VK_UP || code == KeyEvent.VK_DOWN) && + orientation == MultiThumbSlider.VERTICAL && + e.getModifiers() == Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()) { + //insert a new thumb + int i2; + if ((code == KeyEvent.VK_UP && slider.isInverted() == false) || + (code == KeyEvent.VK_DOWN && slider.isInverted() == true)) { + i2 = i + 1; + } else { + i2 = i - 1; + } + addThumb(i, i2); + e.consume(); + return; + } else if (code == KeyEvent.VK_DOWN && + orientation == MultiThumbSlider.HORIZONTAL && + i != -1) { + //popup up! + int x = + slider.isInverted() ? (int) (trackRect.x + trackRect.width * (1 - slider.getThumbPositions()[i])) : + (int) (trackRect.x + trackRect.width * slider.getThumbPositions()[i]); + int y = trackRect.y + trackRect.height; + if (slider.doPopup(x, y)) { + e.consume(); + return; + } + } else if (code == KeyEvent.VK_RIGHT && + orientation == MultiThumbSlider.VERTICAL && + i != -1) { + //popup up! + int y = slider.isInverted() ? (int) (trackRect.y + trackRect.height * slider.getThumbPositions()[i]) : + (int) (trackRect.y + trackRect.height * (1 - slider.getThumbPositions()[i])); + int x = trackRect.x + trackRect.width; + if (slider.doPopup(x, y)) { + e.consume(); + return; + } + } + if (i != -1) { + //move the selected thumb + if (code == KeyEvent.VK_RIGHT || code == KeyEvent.VK_DOWN) { + nudge(i, 1); + e.consume(); + } else if (code == KeyEvent.VK_LEFT || code == KeyEvent.VK_UP) { + nudge(i, -1); + e.consume(); + } else if (code == KeyEvent.VK_DELETE || code == KeyEvent.VK_BACK_SPACE) { + if (slider.getThumbCount() > 2) { + slider.removeThumb(i); + e.consume(); + } + } else if (code == KeyEvent.VK_SPACE || code == KeyEvent.VK_ENTER) { + slider.doDoubleClick(-1, -1); + } + } } - return new Dimension(DEPTH, MIN_LENGTH); - } - @Override - public Dimension getPreferredSize(JComponent s) { - MultiThumbSlider mySlider = (MultiThumbSlider) s; - if (mySlider.getOrientation() == MultiThumbSlider.HORIZONTAL) { - return new Dimension(PREF_LENGTH, DEPTH); + @Override + public void keyReleased(KeyEvent e) { } - return new Dimension(DEPTH, PREF_LENGTH); - } - - /** This records the positions/values of each thumb. - * This is used when the mouse is pressed, so as the mouse - * is dragged values can get replaced and rearranged freely. - * (Including removing and adding thumbs) - * - */ - class State { - - Object[] values; - float[] positions; - int selectedThumb; - public State() { - values = slider.getValues(); - positions = slider.getThumbPositions(); - selectedThumb = slider.getSelectedThumb(false); + @Override + public void keyTyped(KeyEvent e) { } + }; + ComponentListener compListener = new ComponentListener() { - public State(State s) { - selectedThumb = s.selectedThumb; - positions = new float[s.positions.length]; - values = new Object[s.values.length]; - System.arraycopy(s.positions, 0, positions, 0, positions.length); - System.arraycopy(s.values, 0, values, 0, values.length); + @Override + public void componentHidden(ComponentEvent e) { } - /** Strip values outside of [0,1] */ - private void polish() { - while (positions[0] < 0) { - float[] f2 = new float[positions.length - 1]; - System.arraycopy(positions, 1, f2, 0, positions.length - 1); - Object[] c2 = new Object[values.length - 1]; - System.arraycopy(values, 1, c2, 0, positions.length - 1); - positions = f2; - values = c2; - selectedThumb++; - } - while (positions[positions.length - 1] > 1) { - float[] f2 = new float[positions.length - 1]; - System.arraycopy(positions, 0, f2, 0, positions.length - 1); - Object[] c2 = new Object[values.length - 1]; - System.arraycopy(values, 0, c2, 0, positions.length - 1); - positions = f2; - values = c2; - selectedThumb--; - } - if (selectedThumb >= positions.length) { - selectedThumb = -1; - } + @Override + public void componentMoved(ComponentEvent e) { } - /** Make the slider reflect this object */ - public void install() { - polish(); - slider.setValues(positions, values); - slider.setSelectedThumb(selectedThumb); + @Override + public void componentResized(ComponentEvent e) { + calculateGeometry(); + Component c = (Component) e.getSource(); + c.repaint(); } - public void removeThumb(int index) { - float[] f = new float[positions.length - 1]; - Object[] c = new Object[values.length - 1]; - System.arraycopy(positions, 0, f, 0, index); - System.arraycopy(values, 0, c, 0, index); - System.arraycopy(positions, index + 1, f, index, f.length - index); - System.arraycopy(values, index + 1, c, index, f.length - index); - positions = f; - values = c; - selectedThumb = -1; + @Override + public void componentShown(ComponentEvent e) { } - } - Thread animatingThread = null; + }; + /** + * This is used by the animating thread. The field indication is updated until it equals this value. + */ + private float indicationGoal = 0; + private int currentIndicatedThumb = -1; Runnable animatingRunnable = new Runnable() { @Override @@ -268,11 +294,174 @@ public void run() { } } }; - private int currentIndicatedThumb = -1; private boolean mouseInside = false; + FocusListener focusListener = new FocusListener() { + + @Override + public void focusLost(FocusEvent e) { + Component c = (Component) e.getSource(); + if (getProperty(slider, "MultiThumbSlider.indicateComponent", "true").equals("true")) { + slider.setSelectedThumb(-1); + } + updateIndication(); + c.repaint(); + } + + @Override + public void focusGained(FocusEvent e) { + Component c = (Component) e.getSource(); + int i = slider.getSelectedThumb(false); + if (i == -1) { + int direction = 1; + if (slider.getOrientation() == MultiThumbSlider.VERTICAL) { + direction *= -1; + } + if (slider.isInverted()) { + direction *= -1; + } + slider.setSelectedThumb((direction == 1) ? 0 : slider.getThumbCount() - 1); + } + updateIndication(); + c.repaint(); + } + }; + PropertyChangeListener propertyListener = new PropertyChangeListener() { + + @Override + public void propertyChange(PropertyChangeEvent e) { + String name = e.getPropertyName(); + if (name.equals(MultiThumbSlider.VALUES_PROPERTY) || + name.equals(MultiThumbSlider.ORIENTATION_PROPERTY) || + name.equals(MultiThumbSlider.INVERTED_PROPERTY)) { + calculateGeometry(); + slider.repaint(); + } else if (name.equals(MultiThumbSlider.SELECTED_THUMB_PROPERTY) || + name.equals(MultiThumbSlider.PAINT_TICKS_PROPERTY)) { + slider.repaint(); + } else if (name.equals("MultiThumbSlider.indicateComponent")) { + setMouseInside(mouseInside); + slider.repaint(); + } + } + }; private boolean mouseIsDown = false; private State pressedState; - private int dx, dy; + private int dx, dy; + + public MultiThumbSliderUI(MultiThumbSlider slider) { + this.slider = slider; + } + + /** + * This retrieves a property. + * If the component has this property manually set (by calling + * component.putClientProperty()), then that value will be returned. + * Otherwise this method refers to UIManager.get(). If that + * value is missing, this returns defaultValue. + * + * @param jc component + * @param propertyName the property name + * @param defaultValue if no other value is found, this is returned + * @return the property value + */ + public static String getProperty(JComponent jc, String propertyName, String defaultValue) { + Object jcValue = jc.getClientProperty(propertyName); + if (jcValue != null) { + return jcValue.toString(); + } + Object uiValue = UIManager.get(propertyName); + if (uiValue != null) { + return uiValue.toString(); + } + return defaultValue; + } + + /** + * Makes sure the thumbs are in the right order. + * + * @param state state + * @return true if the thumbs are valid. False if there are two + * thumbs with the same value (this is not allowed) + */ + protected static boolean validatePositions(State state) { + float[] p = state.positions; + Object[] c = state.values; + + /** Don't let the user position a thumb outside of + * [0,1] if there are only 2 colors: + * colors outside [0,1] are deleted, and we can't delete + * colors so we get less than 2. + */ + if (p.length <= 2) { + /** Since the user can only manipulate 1 thumb at a time, + * only 1 thumb should be outside the domain of [0,1]. + * So we *don't* have to reorganize c when we change p + */ + for (int a = 0; a < p.length; a++) { + if (p[a] < 0) { + p[a] = 0; + } else if (p[a] > 1) { + p[a] = 1; + } + } + } + + //validate the new positions: + boolean checkAgain = true; + while (checkAgain) { + checkAgain = false; + for (int a = 0; a < p.length - 1; a++) { + if (p[a] == p[a + 1]) { + return false; //we can't make two equal + } + if (p[a] > p[a + 1]) { + checkAgain = true; + + float swap1 = p[a]; + p[a] = p[a + 1]; + p[a + 1] = swap1; + Object swap2 = c[a]; + c[a] = c[a + 1]; + c[a + 1] = swap2; + + if (a == state.selectedThumb) { + state.selectedThumb = a + 1; + } else if (a + 1 == state.selectedThumb) { + state.selectedThumb = a; + } + } + } + } + + return true; + } + + @Override + public Dimension getMaximumSize(JComponent s) { + MultiThumbSlider mySlider = (MultiThumbSlider) s; + if (mySlider.getOrientation() == MultiThumbSlider.HORIZONTAL) { + return new Dimension(MAX_LENGTH, DEPTH); + } + return new Dimension(DEPTH, MAX_LENGTH); + } + + @Override + public Dimension getMinimumSize(JComponent s) { + MultiThumbSlider mySlider = (MultiThumbSlider) s; + if (mySlider.getOrientation() == MultiThumbSlider.HORIZONTAL) { + return new Dimension(MIN_LENGTH, DEPTH); + } + return new Dimension(DEPTH, MIN_LENGTH); + } + + @Override + public Dimension getPreferredSize(JComponent s) { + MultiThumbSlider mySlider = (MultiThumbSlider) s; + if (mySlider.getOrientation() == MultiThumbSlider.HORIZONTAL) { + return new Dimension(PREF_LENGTH, DEPTH); + } + return new Dimension(DEPTH, PREF_LENGTH); + } @Override public void mousePressed(MouseEvent e) { @@ -368,16 +557,18 @@ private int getIndex(MouseEvent e) { int v; if (slider.getOrientation() == GradientSlider.HORIZONTAL) { v = e.getX(); - if (v < trackRect.x - getClickLocationTolerance() + 1 || v > trackRect.x + trackRect.width + getClickLocationTolerance() - 1) { + if (v < trackRect.x - getClickLocationTolerance() + 1 || + v > trackRect.x + trackRect.width + getClickLocationTolerance() - 1) { return -1; // didn't click in the track; } } else { v = e.getY(); - if (v < trackRect.y - getClickLocationTolerance() + 1 || v > trackRect.y + trackRect.height + getClickLocationTolerance() - 1) { + if (v < trackRect.y - getClickLocationTolerance() + 1 || + v > trackRect.y + trackRect.height + getClickLocationTolerance() - 1) { return -1; } } - if(thumbPositions.length==0) { + if (thumbPositions.length == 0) { return -1; } int min = Math.abs(v - thumbPositions[0]); @@ -496,174 +687,67 @@ public void mouseDragged(MouseEvent e) { } outside = (e.getX() < trackRect.x - 10) || (e.getX() > trackRect.x + trackRect.width + 10); - if (e.getY() > trackRect.y - 10 && e.getY() < trackRect.y + trackRect.height + 10) { - if (v < 0) { - v = 0; - } - if (v > 1) { - v = 1; - } - } - } - if (newState.positions.length <= 2) { - outside = false; //I don't care if you are outside: no removing! - } - newState.positions[newState.selectedThumb] = v; - - //because we delegate mouseReleased() to this method: - if (outside) { - newState.removeThumb(newState.selectedThumb); - } - if (validatePositions(newState)) { - newState.install(); - } - e.consume(); - } - } - - @Override - public void mouseReleased(MouseEvent e) { - if (slider.isEnabled() == false) { - return; - } - boolean mousDownFox = mouseIsDown; //Mousedown fix - - mouseIsDown = false; - if (mousDownFox && pressedState != null && slider.getThumbCount() <= pressedState.positions.length) { - mouseDragged(e); //go ahead and commit this final location - } - if (slider.isValueAdjusting()) { - slider.setValueIsAdjusting(false); - } - - if (e.isPopupTrigger() && slider.doPopup(e.getX(), e.getY())) { - //on windows popuptriggers happen on mouseRelease - e.consume(); - return; - } - } - - /** This retrieves a property. - * If the component has this property manually set (by calling - * component.putClientProperty()UIManager.get(). If that - * value is missing, this returns defaultValue - * - * @param jc - * @param propertyName the property name - * @param defaultValue if no other value is found, this is returned - * @return the property value - */ - public static String getProperty(JComponent jc, String propertyName, String defaultValue) { - Object jcValue = jc.getClientProperty(propertyName); - if (jcValue != null) { - return jcValue.toString(); - } - Object uiValue = UIManager.get(propertyName); - if (uiValue != null) { - return uiValue.toString(); - } - return defaultValue; - } - - /** How many pixels can you deviate from a thumb and and still "click" it.*/ - public abstract int getClickLocationTolerance(); - - /** Makes sure the thumbs are in the right order. - * - * @param state - * @return true if the thumbs are valid. False if there are two - * thumbs with the same value (this is not allowed) - */ - protected static boolean validatePositions(State state) { - float[] p = state.positions; - Object[] c = state.values; - - /** Don't let the user position a thumb outside of - * [0,1] if there are only 2 colors: - * colors outside [0,1] are deleted, and we can't delete - * colors so we get less than 2. - */ - if (p.length <= 2) { - /** Since the user can only manipulate 1 thumb at a time, - * only 1 thumb should be outside the domain of [0,1]. - * So we *don't* have to reorganize c when we change p - */ - for (int a = 0; a < p.length; a++) { - if (p[a] < 0) { - p[a] = 0; - } else if (p[a] > 1) { - p[a] = 1; - } - } - } - - //validate the new positions: - boolean checkAgain = true; - while (checkAgain) { - checkAgain = false; - for (int a = 0; a < p.length - 1; a++) { - if (p[a] == p[a + 1]) { - return false; //we can't make two equal - } - if (p[a] > p[a + 1]) { - checkAgain = true; - - float swap1 = p[a]; - p[a] = p[a + 1]; - p[a + 1] = swap1; - Object swap2 = c[a]; - c[a] = c[a + 1]; - c[a + 1] = swap2; - - if (a == state.selectedThumb) { - state.selectedThumb = a + 1; - } else if (a + 1 == state.selectedThumb) { - state.selectedThumb = a; + if (e.getY() > trackRect.y - 10 && e.getY() < trackRect.y + trackRect.height + 10) { + if (v < 0) { + v = 0; + } + if (v > 1) { + v = 1; } } } - } + if (newState.positions.length <= 2) { + outside = false; //I don't care if you are outside: no removing! + } + newState.positions[newState.selectedThumb] = v; - return true; + //because we delegate mouseReleased() to this method: + if (outside) { + newState.removeThumb(newState.selectedThumb); + } + if (validatePositions(newState)) { + newState.install(); + } + e.consume(); + } } - FocusListener focusListener = new FocusListener() { - @Override - public void focusLost(FocusEvent e) { - Component c = (Component) e.getSource(); - if (getProperty(slider, "MultiThumbSlider.indicateComponent", "true").toString().equals("true")) { - slider.setSelectedThumb(-1); - } - updateIndication(); - c.repaint(); + @Override + public void mouseReleased(MouseEvent e) { + if (slider.isEnabled() == false) { + return; } + boolean mousDownFox = mouseIsDown; //Mousedown fix - @Override - public void focusGained(FocusEvent e) { - Component c = (Component) e.getSource(); - int i = slider.getSelectedThumb(false); - if (i == -1) { - int direction = 1; - if (slider.getOrientation() == MultiThumbSlider.VERTICAL) { - direction *= -1; - } - if (slider.isInverted()) { - direction *= -1; - } - slider.setSelectedThumb((direction == 1) ? 0 : slider.getThumbCount() - 1); - } - updateIndication(); - c.repaint(); + mouseIsDown = false; + if (mousDownFox && pressedState != null && slider.getThumbCount() <= pressedState.positions.length) { + mouseDragged(e); //go ahead and commit this final location } - }; + if (slider.isValueAdjusting()) { + slider.setValueIsAdjusting(false); + } + + if (e.isPopupTrigger() && slider.doPopup(e.getX(), e.getY())) { + //on windows popuptriggers happen on mouseRelease + e.consume(); + return; + } + } + + /** + * How many pixels can you deviate from a thumb and and still "click" it + * + * @return click location tolerance + */ + public abstract int getClickLocationTolerance(); - /** This will try to add a thumb between index1 and index2. + /** + * This will try to add a thumb between index1 and index2. *

            This method will not add a thumb if there is already a very * small distance between these two endpoints * - * @param index1 - * @param index2 + * @param index1 index 1 + * @param index2 index 2 * @return true if a new thumb was added */ protected boolean addThumb(int index1, int index2) { @@ -696,138 +780,6 @@ protected boolean addThumb(int index1, int index2) { return true; } - KeyListener keyListener = new KeyListener() { - - @Override - public void keyPressed(KeyEvent e) { - if (slider.isEnabled() == false) { - return; - } - - if (e.getSource() != slider) { - throw new RuntimeException("only install this UI on the GradientSlider it was constructed with"); - } - int i = slider.getSelectedThumb(); - int code = e.getKeyCode(); - int orientation = slider.getOrientation(); - if (i != -1 && - (code == KeyEvent.VK_RIGHT || code == KeyEvent.VK_LEFT) && - orientation == MultiThumbSlider.HORIZONTAL && - e.getModifiers() == Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()) { - //insert a new thumb - int i2; - if ((code == KeyEvent.VK_RIGHT && slider.isInverted() == false) || - (code == KeyEvent.VK_LEFT && slider.isInverted() == true)) { - i2 = i + 1; - } else { - i2 = i - 1; - } - addThumb(i, i2); - e.consume(); - return; - } else if (i != -1 && - (code == KeyEvent.VK_UP || code == KeyEvent.VK_DOWN) && - orientation == MultiThumbSlider.VERTICAL && - e.getModifiers() == Toolkit.getDefaultToolkit().getMenuShortcutKeyMask()) { - //insert a new thumb - int i2; - if ((code == KeyEvent.VK_UP && slider.isInverted() == false) || - (code == KeyEvent.VK_DOWN && slider.isInverted() == true)) { - i2 = i + 1; - } else { - i2 = i - 1; - } - addThumb(i, i2); - e.consume(); - return; - } else if (code == KeyEvent.VK_DOWN && - orientation == MultiThumbSlider.HORIZONTAL && - i != -1) { - //popup up! - int x = slider.isInverted() ? (int) (trackRect.x + trackRect.width * (1 - slider.getThumbPositions()[i])) : (int) (trackRect.x + trackRect.width * slider.getThumbPositions()[i]); - int y = trackRect.y + trackRect.height; - if (slider.doPopup(x, y)) { - e.consume(); - return; - } - } else if (code == KeyEvent.VK_RIGHT && - orientation == MultiThumbSlider.VERTICAL && - i != -1) { - //popup up! - int y = slider.isInverted() ? (int) (trackRect.y + trackRect.height * slider.getThumbPositions()[i]) : (int) (trackRect.y + trackRect.height * (1 - slider.getThumbPositions()[i])); - int x = trackRect.x + trackRect.width; - if (slider.doPopup(x, y)) { - e.consume(); - return; - } - } - if (i != -1) { - //move the selected thumb - if (code == KeyEvent.VK_RIGHT || code == KeyEvent.VK_DOWN) { - nudge(i, 1); - e.consume(); - } else if (code == KeyEvent.VK_LEFT || code == KeyEvent.VK_UP) { - nudge(i, -1); - e.consume(); - } else if (code == KeyEvent.VK_DELETE || code == KeyEvent.VK_BACK_SPACE) { - if (slider.getThumbCount() > 2) { - slider.removeThumb(i); - e.consume(); - } - } else if (code == KeyEvent.VK_SPACE || code == KeyEvent.VK_ENTER) { - slider.doDoubleClick(-1, -1); - } - } - } - - @Override - public void keyReleased(KeyEvent e) { - } - - @Override - public void keyTyped(KeyEvent e) { - } - }; - PropertyChangeListener propertyListener = new PropertyChangeListener() { - - @Override - public void propertyChange(PropertyChangeEvent e) { - String name = e.getPropertyName(); - if (name.equals(MultiThumbSlider.VALUES_PROPERTY) || - name.equals(MultiThumbSlider.ORIENTATION_PROPERTY) || - name.equals(MultiThumbSlider.INVERTED_PROPERTY)) { - calculateGeometry(); - slider.repaint(); - } else if (name.equals(MultiThumbSlider.SELECTED_THUMB_PROPERTY) || - name.equals(MultiThumbSlider.PAINT_TICKS_PROPERTY)) { - slider.repaint(); - } else if (name.equals("MultiThumbSlider.indicateComponent")) { - setMouseInside(mouseInside); - slider.repaint(); - } - } - }; - ComponentListener compListener = new ComponentListener() { - - @Override - public void componentHidden(ComponentEvent e) { - } - - @Override - public void componentMoved(ComponentEvent e) { - } - - @Override - public void componentResized(ComponentEvent e) { - calculateGeometry(); - Component c = (Component) e.getSource(); - c.repaint(); - } - - @Override - public void componentShown(ComponentEvent e) { - } - }; protected void updateIndication() { synchronized (MultiThumbSliderUI.this) { @@ -954,10 +906,10 @@ public void paint(Graphics g, JComponent slider2) { } g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_OFF); + RenderingHints.VALUE_ANTIALIAS_OFF); paintTrack(g2); g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); + RenderingHints.VALUE_ANTIALIAS_ON); paintFocus(g2); paintThumbs(g2); } @@ -978,4 +930,79 @@ public void uninstallUI(JComponent slider) { slider.removePropertyChangeListener(propertyListener); super.uninstallUI(slider); } + + /** + * This records the positions/values of each thumb. + * This is used when the mouse is pressed, so as the mouse + * is dragged values can get replaced and rearranged freely. + * (Including removing and adding thumbs) + */ + class State { + + Object[] values; + float[] positions; + int selectedThumb; + + public State() { + values = slider.getValues(); + positions = slider.getThumbPositions(); + selectedThumb = slider.getSelectedThumb(false); + } + + public State(State s) { + selectedThumb = s.selectedThumb; + positions = new float[s.positions.length]; + values = new Object[s.values.length]; + System.arraycopy(s.positions, 0, positions, 0, positions.length); + System.arraycopy(s.values, 0, values, 0, values.length); + } + + /** + * Strip values outside of [0,1] + */ + private void polish() { + while (positions[0] < 0) { + float[] f2 = new float[positions.length - 1]; + System.arraycopy(positions, 1, f2, 0, positions.length - 1); + Object[] c2 = new Object[values.length - 1]; + System.arraycopy(values, 1, c2, 0, positions.length - 1); + positions = f2; + values = c2; + selectedThumb++; + } + while (positions[positions.length - 1] > 1) { + float[] f2 = new float[positions.length - 1]; + System.arraycopy(positions, 0, f2, 0, positions.length - 1); + Object[] c2 = new Object[values.length - 1]; + System.arraycopy(values, 0, c2, 0, positions.length - 1); + positions = f2; + values = c2; + selectedThumb--; + } + if (selectedThumb >= positions.length) { + selectedThumb = -1; + } + } + + /** + * Make the slider reflect this object + */ + public void install() { + polish(); + slider.setValues(positions, values); + slider.setSelectedThumb(selectedThumb); + } + + public void removeThumb(int index) { + float[] f = new float[positions.length - 1]; + Object[] c = new Object[values.length - 1]; + System.arraycopy(positions, 0, f, 0, index); + System.arraycopy(values, 0, c, 0, index); + System.arraycopy(positions, index + 1, f, index, f.length - index); + System.arraycopy(values, index + 1, c, index, f.length - index); + positions = f; + values = c; + selectedThumb = -1; + } + } } diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/gradientslider/PaintUtils.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/gradientslider/PaintUtils.java index 77aeb37259..31ce15616a 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/gradientslider/PaintUtils.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/gradientslider/PaintUtils.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components.gradientslider; import java.awt.BasicStroke; @@ -47,7 +48,6 @@ Development and Distribution License("CDDL") (collectively, the import java.awt.Graphics2D; import java.awt.Rectangle; import java.awt.Shape; - import javax.swing.SwingConstants; import javax.swing.UIManager; @@ -55,20 +55,25 @@ Development and Distribution License("CDDL") (collectively, the // Author Jeremy Wood public class PaintUtils { - /** Four shades of white, each with increasing opacity. */ - public final static Color[] whites = new Color[]{ + /** + * Four shades of white, each with increasing opacity. + */ + public final static Color[] whites = new Color[] { new Color(255, 255, 255, 50), new Color(255, 255, 255, 100), new Color(255, 255, 255, 150) }; - /** Four shades of black, each with increasing opacity. */ - public final static Color[] blacks = new Color[]{ + /** + * Four shades of black, each with increasing opacity. + */ + public final static Color[] blacks = new Color[] { new Color(0, 0, 0, 50), new Color(0, 0, 0, 100), new Color(0, 0, 0, 150) }; - /** @return the color used to indicate when a component has + /** + * @return the color used to indicate when a component has * focus. By default this uses the color (64,113,167), but you can * override this by calling: *
            UIManager.put("focusRing",customColor); @@ -81,19 +86,20 @@ public static Color getFocusRingColor() { return new Color(64, 113, 167); } - /** Paints 3 different strokes around a shape to indicate focus. + /** + * Paints 3 different strokes around a shape to indicate focus. * The widest stroke is the most transparent, so this achieves a nice * "glow" effect. *

            The catch is that you have to render this underneath the shape, * and the shape should be filled completely. * - * @param g the graphics to paint to - * @param shape the shape to outline + * @param g the graphics to paint to + * @param shape the shape to outline * @param biggestStroke the widest stroke to use. */ public static void paintFocus(Graphics2D g, Shape shape, int biggestStroke) { Color focusColor = getFocusRingColor(); - Color[] focusArray = new Color[]{ + Color[] focusArray = new Color[] { new Color(focusColor.getRed(), focusColor.getGreen(), focusColor.getBlue(), 255), new Color(focusColor.getRed(), focusColor.getGreen(), focusColor.getBlue(), 170), new Color(focusColor.getRed(), focusColor.getGreen(), focusColor.getBlue(), 110) @@ -110,11 +116,13 @@ public static void paintFocus(Graphics2D g, Shape shape, int biggestStroke) { g.setStroke(new BasicStroke(1)); } - /** Uses translucent shades of white and black to draw highlights + /** + * Uses translucent shades of white and black to draw highlights * and shadows around a rectangle, and then frames the rectangle * with a shade of gray (120). *

            This should be called to add a finishing touch on top of * existing graphics. + * * @param g the graphics to paint to. * @param r the rectangle to paint. */ diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/richtooltip/BasicRichTooltipPanelUI.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/richtooltip/BasicRichTooltipPanelUI.java index 68f13d8791..d2ff708544 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/richtooltip/BasicRichTooltipPanelUI.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/richtooltip/BasicRichTooltipPanelUI.java @@ -74,429 +74,439 @@ Development and Distribution License("CDDL") (collectively, the import org.pushingpixels.flamingo.internal.utils.FlamingoUtilities; /** - * * @author Mathieu Bastian */ class BasicRichTooltipPanelUI extends RichTooltipPanelUI { - /** - * The associated tooltip panel. - */ - protected JRichTooltipPanel richTooltipPanel; - - protected JLabel titleLabel; - - protected java.util.List descriptionLabels; - - protected JLabel mainImageLabel; - - protected JSeparator footerSeparator; - - protected JLabel footerImageLabel; - - protected java.util.List footerLabels; - - /* - * (non-Javadoc) - * - * @see javax.swing.plaf.ComponentUI#createUI(javax.swing.JComponent) - */ - public static ComponentUI createUI(JComponent c) { - return new BasicRichTooltipPanelUI(); - } - - public BasicRichTooltipPanelUI() { - this.descriptionLabels = new ArrayList(); - this.footerLabels = new ArrayList(); - } - - /* - * (non-Javadoc) - * - * @see javax.swing.plaf.ComponentUI#installUI(javax.swing.JComponent) - */ - @Override - public void installUI(JComponent c) { - this.richTooltipPanel = (JRichTooltipPanel) c; - super.installUI(this.richTooltipPanel); - installDefaults(); - installComponents(); - installListeners(); - - this.richTooltipPanel.setLayout(createLayoutManager()); - } - - /* - * (non-Javadoc) - * - * @see javax.swing.plaf.ComponentUI#uninstallUI(javax.swing.JComponent) - */ - @Override - public void uninstallUI(JComponent c) { - uninstallListeners(); - uninstallComponents(); - uninstallDefaults(); - super.uninstallUI(this.richTooltipPanel); - } - - /** - * Installs default settings for the associated rich tooltip panel. - */ - protected void installDefaults() { - Border b = this.richTooltipPanel.getBorder(); - if (b == null || b instanceof UIResource) { - Border toSet = UIManager.getBorder("RichTooltipPanel.border"); - if (toSet == null) - toSet = new BorderUIResource.CompoundBorderUIResource( - new LineBorder(FlamingoUtilities.getBorderColor()), - new EmptyBorder(2, 4, 3, 4)); - this.richTooltipPanel.setBorder(toSet); - } - LookAndFeel.installProperty(this.richTooltipPanel, "opaque", - Boolean.TRUE); - } - - /** - * Installs listeners on the associated rich tooltip panel. - */ - protected void installListeners() { - } - - /** - * Installs components on the associated rich tooltip panel. - */ - protected void installComponents() { - } - - /** - * Uninstalls default settings from the associated rich tooltip panel. - */ - protected void uninstallDefaults() { - LookAndFeel.uninstallBorder(this.richTooltipPanel); - } - - /** - * Uninstalls listeners from the associated rich tooltip panel. - */ - protected void uninstallListeners() { - } - - /** - * Uninstalls subcomponents from the associated rich tooltip panel. - */ - protected void uninstallComponents() { - this.removeExistingComponents(); - } - - @Override - public void update(Graphics g, JComponent c) { - this.paintBackground(g); - this.paint(g, c); - } - - protected void paintBackground(Graphics g) { - Color main = FlamingoUtilities.getColor(Color.gray, - "Label.disabledForeground").brighter(); - Graphics2D g2d = (Graphics2D) g.create(); - g2d.setPaint(new GradientPaint(0, 0, FlamingoUtilities.getLighterColor( - main, 0.9), 0, this.richTooltipPanel.getHeight(), - FlamingoUtilities.getLighterColor(main, 0.4))); - g2d.fillRect(0, 0, this.richTooltipPanel.getWidth(), - this.richTooltipPanel.getHeight()); - g2d.setFont(FlamingoUtilities.getFont(this.richTooltipPanel, - "Ribbon.font", "Button.font", "Panel.font")); - g2d.dispose(); - } - - @Override - public void paint(Graphics g, JComponent c) { - } - - protected LayoutManager createLayoutManager() { - return new RichTooltipPanelLayout(); - } - - protected class RichTooltipPanelLayout implements LayoutManager { - @Override - public void addLayoutComponent(String name, Component comp) { - } - - @Override - public void removeLayoutComponent(Component comp) { - } - - @Override - public Dimension minimumLayoutSize(Container parent) { - return this.preferredLayoutSize(parent); - } - - @Override - public Dimension preferredLayoutSize(Container parent) { - Insets ins = parent.getInsets(); - int gap = getLayoutGap(); - Font font = FlamingoUtilities.getFont(parent, "Ribbon.font", - "Button.font", "Panel.font"); - - // the main text gets 200 pixels. The width is defined - // by this and the presence of the main text. - // The height is defined based on the width and the - // text broken into multiline paragraphs - - int descTextWidth = getDescriptionTextWidth(); - int width = ins.left + 2 * gap + descTextWidth + ins.right; - RichTooltip tooltipInfo = richTooltipPanel.getTooltipInfo(); - FontRenderContext frc = new FontRenderContext( - new AffineTransform(), true, false); - if (tooltipInfo.getMainImage() != null) { - width += tooltipInfo.getMainImage().getWidth(null); - } - - int fontHeight = parent.getFontMetrics(font).getHeight(); - - int height = ins.top; - - // The title label - height += fontHeight + gap; - - // The description text - int descriptionTextHeight = 0; - for (String descText : tooltipInfo.getDescriptionSections()) { - AttributedString attributedDescription = new AttributedString( - descText); - attributedDescription.addAttribute(TextAttribute.FONT, font); - LineBreakMeasurer lineBreakMeasurer = new LineBreakMeasurer( - attributedDescription.getIterator(), frc); - while (true) { - TextLayout tl = lineBreakMeasurer.nextLayout(descTextWidth); - if (tl == null) - break; - descriptionTextHeight += fontHeight; - } - // add an empty line after the paragraph - descriptionTextHeight += fontHeight; - } - // remove the empty line after the last paragraph - descriptionTextHeight -= fontHeight; - - if (tooltipInfo.getMainImage() != null) { - height += Math.max(descriptionTextHeight, new JLabel( - new ImageIcon(tooltipInfo.getMainImage())) - .getPreferredSize().height); - } else { - height += descriptionTextHeight; - } - - if ((tooltipInfo.getFooterImage() != null) - || (tooltipInfo.getFooterSections().size() > 0)) { - height += gap; - // The footer separator - height += new JSeparator(JSeparator.HORIZONTAL) - .getPreferredSize().height; - - height += gap; - - int footerTextHeight = 0; - int availableWidth = descTextWidth; - if (tooltipInfo.getFooterImage() != null) { - availableWidth -= tooltipInfo.getFooterImage().getWidth( - null); - } - if (tooltipInfo.getMainImage() != null) { - availableWidth += tooltipInfo.getMainImage().getWidth(null); - } - for (String footerText : tooltipInfo.getFooterSections()) { - AttributedString attributedDescription = new AttributedString( - footerText); - attributedDescription - .addAttribute(TextAttribute.FONT, font); - LineBreakMeasurer lineBreakMeasurer = new LineBreakMeasurer( - attributedDescription.getIterator(), frc); - while (true) { - TextLayout tl = lineBreakMeasurer - .nextLayout(availableWidth); - if (tl == null) - break; - footerTextHeight += fontHeight; - } - // add an empty line after the paragraph - footerTextHeight += fontHeight; - } - // remove the empty line after the last paragraph - footerTextHeight -= fontHeight; - - if (tooltipInfo.getFooterImage() != null) { - height += Math.max(footerTextHeight, new JLabel( - new ImageIcon(tooltipInfo.getFooterImage())) - .getPreferredSize().height); - } else { - height += footerTextHeight; - } - } - - height += ins.bottom; - return new Dimension(width, height); - } - - @Override - public void layoutContainer(Container parent) { - removeExistingComponents(); - - Font font = FlamingoUtilities.getFont(parent, "Ribbon.font", - "Button.font", "Panel.font"); - Insets ins = richTooltipPanel.getInsets(); - int y = ins.top; - RichTooltip tooltipInfo = richTooltipPanel.getTooltipInfo(); - FontRenderContext frc = new FontRenderContext( - new AffineTransform(), true, false); - int gap = getLayoutGap(); - - int fontHeight = parent.getFontMetrics(font).getHeight(); - - // The title label - titleLabel = new JLabel(tooltipInfo.getTitle()); - titleLabel.setFont(titleLabel.getFont().deriveFont(Font.BOLD)); - richTooltipPanel.add(titleLabel); - - titleLabel.setBounds(ins.left, y, - titleLabel.getPreferredSize().width, fontHeight); - y += titleLabel.getHeight() + gap; - - // The main image - int x = ins.left; - if (tooltipInfo.getMainImage() != null) { - mainImageLabel = new JLabel(new ImageIcon(tooltipInfo - .getMainImage())); - richTooltipPanel.add(mainImageLabel); - mainImageLabel.setBounds(x, y, mainImageLabel - .getPreferredSize().width, mainImageLabel - .getPreferredSize().height); - x += mainImageLabel.getWidth(); - } - x += 2 * gap; - - // The description text - int descLabelWidth = parent.getWidth() - x - ins.right; - for (String descText : tooltipInfo.getDescriptionSections()) { - AttributedString attributedDescription = new AttributedString( - descText); - attributedDescription.addAttribute(TextAttribute.FONT, font); - LineBreakMeasurer lineBreakMeasurer = new LineBreakMeasurer( - attributedDescription.getIterator(), frc); - int currOffset = 0; - while (true) { - TextLayout tl = lineBreakMeasurer - .nextLayout(descLabelWidth); - if (tl == null) - break; - int charCount = tl.getCharacterCount(); - String line = descText.substring(currOffset, currOffset - + charCount); - - JLabel descLabel = new JLabel(line); - descriptionLabels.add(descLabel); - richTooltipPanel.add(descLabel); - descLabel.setBounds(x, y, - descLabel.getPreferredSize().width, fontHeight); - y += descLabel.getHeight(); - - currOffset += charCount; - } - // add an empty line after the paragraph - y += titleLabel.getHeight(); - } - // remove the empty line after the last paragraph - y -= titleLabel.getHeight(); - - if (mainImageLabel != null) { - y = Math.max(y, mainImageLabel.getY() - + mainImageLabel.getHeight()); - } - - if ((tooltipInfo.getFooterImage() != null) - || (tooltipInfo.getFooterSections().size() > 0)) { - y += gap; - // The footer separator - footerSeparator = new JSeparator(JSeparator.HORIZONTAL); - richTooltipPanel.add(footerSeparator); - footerSeparator.setBounds(ins.left, y, parent.getWidth() - - ins.left - ins.right, footerSeparator - .getPreferredSize().height); - - y += footerSeparator.getHeight() + gap; - - // The footer image - x = ins.left; - if (tooltipInfo.getFooterImage() != null) { - footerImageLabel = new JLabel(new ImageIcon(tooltipInfo - .getFooterImage())); - richTooltipPanel.add(footerImageLabel); - footerImageLabel.setBounds(x, y, footerImageLabel - .getPreferredSize().width, footerImageLabel - .getPreferredSize().height); - x += footerImageLabel.getWidth() + 2 * gap; - } - - // The footer text - int footerLabelWidth = parent.getWidth() - x - ins.right; - for (String footerText : tooltipInfo.getFooterSections()) { - AttributedString attributedDescription = new AttributedString( - footerText); - attributedDescription - .addAttribute(TextAttribute.FONT, font); - LineBreakMeasurer lineBreakMeasurer = new LineBreakMeasurer( - attributedDescription.getIterator(), frc); - int currOffset = 0; - while (true) { - TextLayout tl = lineBreakMeasurer - .nextLayout(footerLabelWidth); - if (tl == null) - break; - int charCount = tl.getCharacterCount(); - String line = footerText.substring(currOffset, - currOffset + charCount); - - JLabel footerLabel = new JLabel(line); - footerLabels.add(footerLabel); - richTooltipPanel.add(footerLabel); - footerLabel.setBounds(x, y, footerLabel - .getPreferredSize().width, fontHeight); - y += footerLabel.getHeight(); - - currOffset += charCount; - } - // add an empty line after the paragraph - y += titleLabel.getHeight(); - } - // remove the empty line after the last paragraph - y -= titleLabel.getHeight(); - } - } - } - - protected int getDescriptionTextWidth() { - return 200; - } - - protected int getLayoutGap() { - return 4; - } - - protected void removeExistingComponents() { - if (this.titleLabel != null) { - this.richTooltipPanel.remove(this.titleLabel); - } - if (this.mainImageLabel != null) { - this.richTooltipPanel.remove(this.mainImageLabel); - } - for (JLabel label : this.descriptionLabels) - this.richTooltipPanel.remove(label); - if (this.footerSeparator != null) { - this.richTooltipPanel.remove(this.footerSeparator); - } - if (this.footerImageLabel != null) { - this.richTooltipPanel.remove(this.footerImageLabel); - } - for (JLabel label : this.footerLabels) - this.richTooltipPanel.remove(label); - } + /** + * The associated tooltip panel. + */ + protected JRichTooltipPanel richTooltipPanel; + + protected JLabel titleLabel; + + protected java.util.List descriptionLabels; + + protected JLabel mainImageLabel; + + protected JSeparator footerSeparator; + + protected JLabel footerImageLabel; + + protected java.util.List footerLabels; + + public BasicRichTooltipPanelUI() { + this.descriptionLabels = new ArrayList<>(); + this.footerLabels = new ArrayList<>(); + } + + /* + * (non-Javadoc) + * + * @see javax.swing.plaf.ComponentUI#createUI(javax.swing.JComponent) + */ + public static ComponentUI createUI(JComponent c) { + return new BasicRichTooltipPanelUI(); + } + + /* + * (non-Javadoc) + * + * @see javax.swing.plaf.ComponentUI#installUI(javax.swing.JComponent) + */ + @Override + public void installUI(JComponent c) { + this.richTooltipPanel = (JRichTooltipPanel) c; + super.installUI(this.richTooltipPanel); + installDefaults(); + installComponents(); + installListeners(); + + this.richTooltipPanel.setLayout(createLayoutManager()); + } + + /* + * (non-Javadoc) + * + * @see javax.swing.plaf.ComponentUI#uninstallUI(javax.swing.JComponent) + */ + @Override + public void uninstallUI(JComponent c) { + uninstallListeners(); + uninstallComponents(); + uninstallDefaults(); + super.uninstallUI(this.richTooltipPanel); + } + + /** + * Installs default settings for the associated rich tooltip panel. + */ + protected void installDefaults() { + Border b = this.richTooltipPanel.getBorder(); + if (b == null || b instanceof UIResource) { + Border toSet = UIManager.getBorder("RichTooltipPanel.border"); + if (toSet == null) { + toSet = new BorderUIResource.CompoundBorderUIResource( + new LineBorder(FlamingoUtilities.getBorderColor()), + new EmptyBorder(2, 4, 3, 4)); + } + this.richTooltipPanel.setBorder(toSet); + } + LookAndFeel.installProperty(this.richTooltipPanel, "opaque", + Boolean.TRUE); + } + + /** + * Installs listeners on the associated rich tooltip panel. + */ + protected void installListeners() { + } + + /** + * Installs components on the associated rich tooltip panel. + */ + protected void installComponents() { + } + + /** + * Uninstalls default settings from the associated rich tooltip panel. + */ + protected void uninstallDefaults() { + LookAndFeel.uninstallBorder(this.richTooltipPanel); + } + + /** + * Uninstalls listeners from the associated rich tooltip panel. + */ + protected void uninstallListeners() { + } + + /** + * Uninstalls subcomponents from the associated rich tooltip panel. + */ + protected void uninstallComponents() { + this.removeExistingComponents(); + } + + @Override + public void update(Graphics g, JComponent c) { + this.paintBackground(g); + this.paint(g, c); + } + + protected void paintBackground(Graphics g) { + Color main = FlamingoUtilities.getColor(Color.gray, + "Label.disabledForeground").brighter(); + Graphics2D g2d = (Graphics2D) g.create(); + g2d.setPaint(new GradientPaint(0, 0, FlamingoUtilities.getLighterColor( + main, 0.9), 0, this.richTooltipPanel.getHeight(), + FlamingoUtilities.getLighterColor(main, 0.4))); + g2d.fillRect(0, 0, this.richTooltipPanel.getWidth(), + this.richTooltipPanel.getHeight()); + g2d.setFont(FlamingoUtilities.getFont(this.richTooltipPanel, + "Ribbon.font", "Button.font", "Panel.font")); + g2d.dispose(); + } + + @Override + public void paint(Graphics g, JComponent c) { + } + + protected LayoutManager createLayoutManager() { + return new RichTooltipPanelLayout(); + } + + protected int getDescriptionTextWidth() { + return 200; + } + + protected int getLayoutGap() { + return 4; + } + + protected void removeExistingComponents() { + if (this.titleLabel != null) { + this.richTooltipPanel.remove(this.titleLabel); + } + if (this.mainImageLabel != null) { + this.richTooltipPanel.remove(this.mainImageLabel); + } + for (JLabel label : this.descriptionLabels) { + this.richTooltipPanel.remove(label); + } + if (this.footerSeparator != null) { + this.richTooltipPanel.remove(this.footerSeparator); + } + if (this.footerImageLabel != null) { + this.richTooltipPanel.remove(this.footerImageLabel); + } + for (JLabel label : this.footerLabels) { + this.richTooltipPanel.remove(label); + } + } + + protected class RichTooltipPanelLayout implements LayoutManager { + @Override + public void addLayoutComponent(String name, Component comp) { + } + + @Override + public void removeLayoutComponent(Component comp) { + } + + @Override + public Dimension minimumLayoutSize(Container parent) { + return this.preferredLayoutSize(parent); + } + + @Override + public Dimension preferredLayoutSize(Container parent) { + Insets ins = parent.getInsets(); + int gap = getLayoutGap(); + Font font = FlamingoUtilities.getFont(parent, "Ribbon.font", + "Button.font", "Panel.font"); + + // the main text gets 200 pixels. The width is defined + // by this and the presence of the main text. + // The height is defined based on the width and the + // text broken into multiline paragraphs + + int descTextWidth = getDescriptionTextWidth(); + int width = ins.left + 2 * gap + descTextWidth + ins.right; + RichTooltip tooltipInfo = richTooltipPanel.getTooltipInfo(); + FontRenderContext frc = new FontRenderContext( + new AffineTransform(), true, false); + if (tooltipInfo.getMainImage() != null) { + width += tooltipInfo.getMainImage().getWidth(null); + } + + int fontHeight = parent.getFontMetrics(font).getHeight(); + + int height = ins.top; + + // The title label + height += fontHeight + gap; + + // The description text + int descriptionTextHeight = 0; + for (String descText : tooltipInfo.getDescriptionSections()) { + AttributedString attributedDescription = new AttributedString( + descText); + attributedDescription.addAttribute(TextAttribute.FONT, font); + LineBreakMeasurer lineBreakMeasurer = new LineBreakMeasurer( + attributedDescription.getIterator(), frc); + while (true) { + TextLayout tl = lineBreakMeasurer.nextLayout(descTextWidth); + if (tl == null) { + break; + } + descriptionTextHeight += fontHeight; + } + // add an empty line after the paragraph + descriptionTextHeight += fontHeight; + } + // remove the empty line after the last paragraph + descriptionTextHeight -= fontHeight; + + if (tooltipInfo.getMainImage() != null) { + height += Math.max(descriptionTextHeight, new JLabel( + new ImageIcon(tooltipInfo.getMainImage())) + .getPreferredSize().height); + } else { + height += descriptionTextHeight; + } + + if ((tooltipInfo.getFooterImage() != null) + || (tooltipInfo.getFooterSections().size() > 0)) { + height += gap; + // The footer separator + height += new JSeparator(JSeparator.HORIZONTAL) + .getPreferredSize().height; + + height += gap; + + int footerTextHeight = 0; + int availableWidth = descTextWidth; + if (tooltipInfo.getFooterImage() != null) { + availableWidth -= tooltipInfo.getFooterImage().getWidth( + null); + } + if (tooltipInfo.getMainImage() != null) { + availableWidth += tooltipInfo.getMainImage().getWidth(null); + } + for (String footerText : tooltipInfo.getFooterSections()) { + AttributedString attributedDescription = new AttributedString( + footerText); + attributedDescription + .addAttribute(TextAttribute.FONT, font); + LineBreakMeasurer lineBreakMeasurer = new LineBreakMeasurer( + attributedDescription.getIterator(), frc); + while (true) { + TextLayout tl = lineBreakMeasurer + .nextLayout(availableWidth); + if (tl == null) { + break; + } + footerTextHeight += fontHeight; + } + // add an empty line after the paragraph + footerTextHeight += fontHeight; + } + // remove the empty line after the last paragraph + footerTextHeight -= fontHeight; + + if (tooltipInfo.getFooterImage() != null) { + height += Math.max(footerTextHeight, new JLabel( + new ImageIcon(tooltipInfo.getFooterImage())) + .getPreferredSize().height); + } else { + height += footerTextHeight; + } + } + + height += ins.bottom; + return new Dimension(width, height); + } + + @Override + public void layoutContainer(Container parent) { + if (parent.getWidth() <= 1) { + // Prevent further ArrayIndexOutOfBoundsException in some cases + return; + } + removeExistingComponents(); + + Font font = FlamingoUtilities.getFont(parent, "Ribbon.font", + "Button.font", "Panel.font"); + Insets ins = richTooltipPanel.getInsets(); + int y = ins.top; + RichTooltip tooltipInfo = richTooltipPanel.getTooltipInfo(); + FontRenderContext frc = new FontRenderContext( + new AffineTransform(), true, false); + int gap = getLayoutGap(); + + int fontHeight = parent.getFontMetrics(font).getHeight(); + + // The title label + titleLabel = new JLabel(tooltipInfo.getTitle()); + titleLabel.setFont(titleLabel.getFont().deriveFont(Font.BOLD)); + richTooltipPanel.add(titleLabel); + + titleLabel.setBounds(ins.left, y, + titleLabel.getPreferredSize().width, fontHeight); + y += titleLabel.getHeight() + gap; + + // The main image + int x = ins.left; + if (tooltipInfo.getMainImage() != null) { + mainImageLabel = new JLabel(new ImageIcon(tooltipInfo + .getMainImage())); + richTooltipPanel.add(mainImageLabel); + mainImageLabel.setBounds(x, y, mainImageLabel + .getPreferredSize().width, mainImageLabel + .getPreferredSize().height); + x += mainImageLabel.getWidth(); + } + x += 2 * gap; + + // The description text + int descLabelWidth = parent.getWidth() - x - ins.right; + for (String descText : tooltipInfo.getDescriptionSections()) { + AttributedString attributedDescription = new AttributedString( + descText); + attributedDescription.addAttribute(TextAttribute.FONT, font); + LineBreakMeasurer lineBreakMeasurer = new LineBreakMeasurer( + attributedDescription.getIterator(), frc); + int currOffset = 0; + while (true) { + TextLayout tl = lineBreakMeasurer + .nextLayout(descLabelWidth); + if (tl == null) { + break; + } + int charCount = tl.getCharacterCount(); + String line = descText.substring(currOffset, currOffset + + charCount); + + JLabel descLabel = new JLabel(line); + descriptionLabels.add(descLabel); + richTooltipPanel.add(descLabel); + descLabel.setBounds(x, y, + descLabel.getPreferredSize().width, fontHeight); + y += descLabel.getHeight(); + + currOffset += charCount; + } + // add an empty line after the paragraph + y += titleLabel.getHeight(); + } + // remove the empty line after the last paragraph + y -= titleLabel.getHeight(); + + if (mainImageLabel != null) { + y = Math.max(y, mainImageLabel.getY() + + mainImageLabel.getHeight()); + } + + if ((tooltipInfo.getFooterImage() != null) + || (tooltipInfo.getFooterSections().size() > 0)) { + y += gap; + // The footer separator + footerSeparator = new JSeparator(JSeparator.HORIZONTAL); + richTooltipPanel.add(footerSeparator); + footerSeparator.setBounds(ins.left, y, parent.getWidth() + - ins.left - ins.right, footerSeparator + .getPreferredSize().height); + + y += footerSeparator.getHeight() + gap; + + // The footer image + x = ins.left; + if (tooltipInfo.getFooterImage() != null) { + footerImageLabel = new JLabel(new ImageIcon(tooltipInfo + .getFooterImage())); + richTooltipPanel.add(footerImageLabel); + footerImageLabel.setBounds(x, y, footerImageLabel + .getPreferredSize().width, footerImageLabel + .getPreferredSize().height); + x += footerImageLabel.getWidth() + 2 * gap; + } + + // The footer text + int footerLabelWidth = parent.getWidth() - x - ins.right; + for (String footerText : tooltipInfo.getFooterSections()) { + AttributedString attributedDescription = new AttributedString( + footerText); + attributedDescription + .addAttribute(TextAttribute.FONT, font); + LineBreakMeasurer lineBreakMeasurer = new LineBreakMeasurer( + attributedDescription.getIterator(), frc); + int currOffset = 0; + while (true) { + TextLayout tl = lineBreakMeasurer + .nextLayout(footerLabelWidth); + if (tl == null) { + break; + } + int charCount = tl.getCharacterCount(); + String line = footerText.substring(currOffset, + currOffset + charCount); + + JLabel footerLabel = new JLabel(line); + footerLabels.add(footerLabel); + richTooltipPanel.add(footerLabel); + footerLabel.setBounds(x, y, footerLabel + .getPreferredSize().width, fontHeight); + y += footerLabel.getHeight(); + + currOffset += charCount; + } + // add an empty line after the paragraph + y += titleLabel.getHeight(); + } + // remove the empty line after the last paragraph + y -= titleLabel.getHeight(); + } + } + } } diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/richtooltip/JRichTooltipPanel.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/richtooltip/JRichTooltipPanel.java index c0da1b7243..b7d4ad3405 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/richtooltip/JRichTooltipPanel.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/richtooltip/JRichTooltipPanel.java @@ -39,22 +39,22 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components.richtooltip; import javax.swing.JPanel; import javax.swing.UIManager; /** - * * @author Mathieu Bastian */ class JRichTooltipPanel extends JPanel { - protected RichTooltip tooltipInfo; /** * @see #getUIClassID */ public static final String uiClassID = "RichTooltipPanelUI"; + protected RichTooltip tooltipInfo; public JRichTooltipPanel(RichTooltip tooltipInfo) { this.tooltipInfo = tooltipInfo; @@ -71,10 +71,9 @@ public RichTooltipPanelUI getUI() { } /** - * Sets the look and feel (L&F) object that renders this component. + * Sets the look and feel (L&F) object that renders this component. * - * @param ui - * The UI delegate. + * @param ui The UI delegate. */ protected void setUI(RichTooltipPanelUI ui) { super.setUI(ui); diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/richtooltip/RichTooltip.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/richtooltip/RichTooltip.java index 6b6a25d48e..4f7404cd85 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/richtooltip/RichTooltip.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/richtooltip/RichTooltip.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components.richtooltip; import java.awt.Dimension; @@ -84,6 +85,7 @@ Development and Distribution License("CDDL") (collectively, the * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + /** * Rich tooltip for command buttons. * @@ -235,6 +237,8 @@ public class RichTooltip { * @see #getFooterSections() */ protected List footerSections; + private Popup tipWindow; + private boolean tipShowing = false; /** * Creates an empty tooltip. @@ -245,18 +249,14 @@ public RichTooltip() { /** * Creates a tooltip with the specified title and description section. * - * @param title - * Tooltip title. - * @param descriptionSection - * Tooltip main description section. + * @param title Tooltip title. + * @param descriptionSection Tooltip main description section. */ public RichTooltip(String title, String descriptionSection) { this.setTitle(title); this.addDescriptionSection(descriptionSection); } - private Popup tipWindow; - private boolean tipShowing = false; - + public void showTooltip(JComponent component) { if (component == null || !component.isShowing()) { return; @@ -315,67 +315,31 @@ public void hideTooltip() { } } - /** - * Sets the title for this tooltip. - * - * @param title - * The new tooltip title. - */ - public void setTitle(String title) { - this.title = title; - } - - /** - * Sets the main image for this tooltip. - * - * @param image - * The main image for this tooltip. - * @see #getMainImage() - * @see #addDescriptionSection(String) - */ - public void setMainImage(Image image) { - this.mainImage = image; - } - /** * Adds the specified description section to this tooltip. * - * @param section - * The description section to add. + * @param section The description section to add. * @see #getDescriptionSections() * @see #setMainImage(Image) * @see #setTitle(String) */ public void addDescriptionSection(String section) { if (this.descriptionSections == null) { - this.descriptionSections = new LinkedList(); + this.descriptionSections = new LinkedList<>(); } this.descriptionSections.add(section); } - /** - * Sets the footer image for this tooltip. - * - * @param image - * The footer image for this tooltip. - * @see #getFooterImage() - * @see #addFooterSection(String) - */ - public void setFooterImage(Image image) { - this.footerImage = image; - } - /** * Adds the specified footer section to this tooltip. * - * @param section - * The footer section to add. + * @param section The footer section to add. * @see #getFooterSections() * @see #setFooterImage(Image) */ public void addFooterSection(String section) { if (this.footerSections == null) { - this.footerSections = new LinkedList(); + this.footerSections = new LinkedList<>(); } this.footerSections.add(section); } @@ -391,6 +355,15 @@ public String getTitle() { return this.title; } + /** + * Sets the title for this tooltip. + * + * @param title The new tooltip title. + */ + public void setTitle(String title) { + this.title = title; + } + /** * Returns the main image of this tooltip. Can return null. * @@ -402,6 +375,17 @@ public Image getMainImage() { return this.mainImage; } + /** + * Sets the main image for this tooltip. + * + * @param image The main image for this tooltip. + * @see #getMainImage() + * @see #addDescriptionSection(String) + */ + public void setMainImage(Image image) { + this.mainImage = image; + } + /** * Returns an unmodifiable list of description sections of this tooltip. * Guaranteed to return a non-null list. @@ -430,6 +414,17 @@ public Image getFooterImage() { return this.footerImage; } + /** + * Sets the footer image for this tooltip. + * + * @param image The footer image for this tooltip. + * @see #getFooterImage() + * @see #addFooterSection(String) + */ + public void setFooterImage(Image image) { + this.footerImage = image; + } + /** * Returns an unmodifiable list of footer sections of this tooltip. * Guaranteed to return a non-null list. diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/richtooltip/RichTooltipPanelUI.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/richtooltip/RichTooltipPanelUI.java index ed179d5749..297c1f6a3f 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/richtooltip/RichTooltipPanelUI.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/richtooltip/RichTooltipPanelUI.java @@ -39,12 +39,12 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components.richtooltip; import javax.swing.plaf.PanelUI; /** - * * @author Mathieu Bastian */ abstract class RichTooltipPanelUI extends PanelUI { diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/SplineEditor/Java2dHelper.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/splineeditor/Java2dHelper.java similarity index 98% rename from modules/UIComponents/src/main/java/org/gephi/ui/components/SplineEditor/Java2dHelper.java rename to modules/UIComponents/src/main/java/org/gephi/ui/components/splineeditor/Java2dHelper.java index a40448764a..9b89e3dfd0 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/SplineEditor/Java2dHelper.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/splineeditor/Java2dHelper.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components.splineeditor; import java.awt.Graphics; @@ -85,7 +86,7 @@ public static BufferedImage createThumbnail(BufferedImage image, int requestedTh BufferedImage temp = new BufferedImage(width, (int) (width / ratio), BufferedImage.TYPE_INT_ARGB); Graphics2D g2 = temp.createGraphics(); g2.setRenderingHint(RenderingHints.KEY_INTERPOLATION, - RenderingHints.VALUE_INTERPOLATION_BILINEAR); + RenderingHints.VALUE_INTERPOLATION_BILINEAR); g2.drawImage(thumb, 0, 0, temp.getWidth(), temp.getHeight(), null); g2.dispose(); diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/SplineEditor/SplineControlPanel.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/splineeditor/SplineControlPanel.java similarity index 87% rename from modules/UIComponents/src/main/java/org/gephi/ui/components/SplineEditor/SplineControlPanel.java rename to modules/UIComponents/src/main/java/org/gephi/ui/components/splineeditor/SplineControlPanel.java index 5189875cc3..ab94ac74c6 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/SplineEditor/SplineControlPanel.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/splineeditor/SplineControlPanel.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components.splineeditor; import java.awt.BorderLayout; @@ -74,6 +75,7 @@ Development and Distribution License("CDDL") (collectively, the import org.jdesktop.animation.timing.Animator; import org.jdesktop.animation.timing.interpolation.Evaluator; import org.jdesktop.animation.timing.interpolation.PropertySetter; +import org.openide.util.ImageUtilities; import org.openide.util.NbBundle; class SplineControlPanel extends JPanel { @@ -81,7 +83,8 @@ class SplineControlPanel extends JPanel { private SplineDisplay display; private int linesCount = 0; private Animator controller; - private SplineEditor editor; + private final SplineEditor editor; + private final Evaluator point2dInterpolator = new Point2DNonLinearInterpolator(); SplineControlPanel(SplineEditor editor) { super(new BorderLayout()); @@ -91,11 +94,23 @@ class SplineControlPanel extends JPanel { add(buildDebugControls(), BorderLayout.EAST); } + private static NumberFormat getNumberFormatter() { + NumberFormat formatter = NumberFormat.getInstance(Locale.ENGLISH); + formatter.setMinimumFractionDigits(2); + formatter.setMaximumFractionDigits(2); + return formatter; + } + + private static Template createTemplate(double x1, double y1, double x2, double y2) { + return new Template(new Point2D.Double(x1, y1), + new Point2D.Double(x2, y2)); + } + private Component buildDebugControls() { JPanel debugPanel = new JPanel(new GridBagLayout()); debugPanel.add(Box.createHorizontalStrut(150), - new GridBagConstraints(0, linesCount++, + new GridBagConstraints(0, linesCount++, 2, 1, 1.0, 0.0, GridBagConstraints.LINE_START, @@ -124,7 +139,7 @@ private Component buildDebugControls() { addSeparator(debugPanel, NbBundle.getMessage(SplineEditor.class, "splineEditor_templates")); debugPanel.add(createTemplates(), - new GridBagConstraints(0, linesCount++, + new GridBagConstraints(0, linesCount++, 2, 1, 1.0, 0.0, GridBagConstraints.CENTER, @@ -145,7 +160,7 @@ public void actionPerformed(ActionEvent arg0) { addEmptySpace(debugPanel, 6); debugPanel.add(Box.createVerticalGlue(), - new GridBagConstraints(0, linesCount++, + new GridBagConstraints(0, linesCount++, 2, 1, 1.0, 1.0, GridBagConstraints.LINE_START, @@ -184,7 +199,7 @@ private Component createTemplates() { private JButton addButton(JPanel debugPanel, String label) { JButton button; debugPanel.add(button = new JButton(label), - new GridBagConstraints(0, linesCount++, + new GridBagConstraints(0, linesCount++, 2, 1, 1.0, 0.0, GridBagConstraints.CENTER, @@ -212,14 +227,13 @@ public void propertyChange(PropertyChangeEvent evt) { panel.add(display, BorderLayout.NORTH); - return panel; } private JLabel addDebugLabel(JPanel panel, String label, String value) { JLabel labelComponent = new JLabel(label); panel.add(labelComponent, - new GridBagConstraints(0, linesCount, + new GridBagConstraints(0, linesCount, 1, 1, 0.5, 0.0, GridBagConstraints.LINE_END, @@ -228,7 +242,7 @@ private JLabel addDebugLabel(JPanel panel, String label, String value) { 0, 0)); labelComponent = new JLabel(value); panel.add(labelComponent, - new GridBagConstraints(1, linesCount++, + new GridBagConstraints(1, linesCount++, 1, 1, 0.5, 0.0, GridBagConstraints.LINE_START, @@ -240,7 +254,7 @@ private JLabel addDebugLabel(JPanel panel, String label, String value) { private void addEmptySpace(JPanel panel, int size) { panel.add(Box.createVerticalStrut(size), - new GridBagConstraints(0, linesCount++, + new GridBagConstraints(0, linesCount++, 2, 1, 1.0, 0.0, GridBagConstraints.CENTER, @@ -252,7 +266,7 @@ private void addEmptySpace(JPanel panel, int size) { private void addSeparator(JPanel panel, String label) { JPanel innerPanel = new JPanel(new GridBagLayout()); innerPanel.add(new JLabel(label), - new GridBagConstraints(0, 0, + new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0, GridBagConstraints.LINE_START, @@ -260,7 +274,7 @@ private void addSeparator(JPanel panel, String label) { new Insets(0, 0, 0, 0), 0, 0)); innerPanel.add(new JSeparator(), - new GridBagConstraints(1, 0, + new GridBagConstraints(1, 0, 1, 1, 0.9, 0.0, GridBagConstraints.LINE_START, @@ -268,7 +282,7 @@ private void addSeparator(JPanel panel, String label) { new Insets(0, 6, 0, 6), 0, 0)); panel.add(innerPanel, - new GridBagConstraints(0, linesCount++, + new GridBagConstraints(0, linesCount++, 2, 1, 1.0, 0.0, GridBagConstraints.LINE_START, @@ -276,68 +290,9 @@ private void addSeparator(JPanel panel, String label) { new Insets(6, 6, 6, 0), 0, 0)); } - private Evaluator point2dInterpolator = new Point2DNonLinearInterpolator(); - - private class Point2DNonLinearInterpolator extends Evaluator { - - private Point2D value; - - @Override - public Point2D evaluate(Point2D v0, Point2D v1, - float fraction) { - Point2D value = (Point2D) v0.clone(); - if (v0 != v1) { - double x = value.getX(); - x += (v1.getX() - v0.getX()) * fraction; - double y = value.getY(); - y += (v1.getY() - v0.getY()) * fraction; - value.setLocation(x, y); - } else { - value.setLocation(v0.getX(), v0.getY()); - } - return value; - } - } - - private class TemplateSelectionHandler implements ListSelectionListener { - - @Override - public void valueChanged(ListSelectionEvent e) { - if (e.getValueIsAdjusting()) { - return; - } - - JList list = (JList) e.getSource(); - Template template = (Template) list.getSelectedValue(); - if (template != null) { - if (controller != null && controller.isRunning()) { - controller.stop(); - } - - controller = new Animator(300, - new PropertySetter(display, "control1", - point2dInterpolator, display.getControl1(), - template.getControl1())); - controller.setResolution(10); - controller.addTarget(new PropertySetter(display, "control2", - point2dInterpolator, display.getControl2(), - template.getControl2())); - - controller.start(); - } - } - } - private static NumberFormat getNumberFormatter() { - NumberFormat formatter = NumberFormat.getInstance(Locale.ENGLISH); - formatter.setMinimumFractionDigits(2); - formatter.setMaximumFractionDigits(2); - return formatter; - } - - private static Template createTemplate(double x1, double y1, double x2, double y2) { - return new Template(new Point2D.Double(x1, y1), - new Point2D.Double(x2, y2)); + public SplineDisplay getDisplay() { + return display; } private static class TemplateCellRenderer extends DefaultListCellRenderer { @@ -346,10 +301,9 @@ private static class TemplateCellRenderer extends DefaultListCellRenderer { @Override public Component getListCellRendererComponent(JList list, Object value, int index, - boolean isSelected, boolean cellHasFocus) { + boolean isSelected, boolean cellHasFocus) { Template template = (Template) value; - this.setBackground(Color.WHITE); - this.setIcon(new ImageIcon(template.getImage())); + this.setIcon(template.getImageIcon()); this.isSelected = isSelected; return this; } @@ -367,9 +321,8 @@ protected void paintComponent(Graphics g) { private static class Template { - private Point2D control1; - private Point2D control2; - private Image image; + private final Point2D control1; + private final Point2D control2; public Template(Point2D control1, Point2D control2) { this.control1 = control1; @@ -384,26 +337,65 @@ public Point2D getControl2() { return control2; } - public Image getImage() { - if (image == null) { - NumberFormat formatter = getNumberFormatter(); + public ImageIcon getImageIcon() { + NumberFormat formatter = getNumberFormatter(); - String name = ""; - name += formatter.format(control1.getX()) + '-' + formatter.format(control1.getY()); - name += '-'; - name += formatter.format(control2.getX()) + '-' + formatter.format(control2.getY()); + String name = ""; + name += formatter.format(control1.getX()) + '-' + formatter.format(control1.getY()); + name += '-'; + name += formatter.format(control2.getX()) + '-' + formatter.format(control2.getY()); - try { - image = ImageIO.read(getClass().getResourceAsStream("images/templates/" + name + ".png")); - } catch (IOException e) { - } - } + return ImageUtilities.loadImageIcon("UIComponents/" + name + ".png", false); + } + } - return image; + private class Point2DNonLinearInterpolator extends Evaluator { + + private Point2D value; + + @Override + public Point2D evaluate(Point2D v0, Point2D v1, + float fraction) { + Point2D value = (Point2D) v0.clone(); + if (v0 != v1) { + double x = value.getX(); + x += (v1.getX() - v0.getX()) * fraction; + double y = value.getY(); + y += (v1.getY() - v0.getY()) * fraction; + value.setLocation(x, y); + } else { + value.setLocation(v0.getX(), v0.getY()); + } + return value; } } - public SplineDisplay getDisplay() { - return display; + private class TemplateSelectionHandler implements ListSelectionListener { + + @Override + public void valueChanged(ListSelectionEvent e) { + if (e.getValueIsAdjusting()) { + return; + } + + JList list = (JList) e.getSource(); + Template template = (Template) list.getSelectedValue(); + if (template != null) { + if (controller != null && controller.isRunning()) { + controller.stop(); + } + + controller = new Animator(300, + new PropertySetter(display, "control1", + point2dInterpolator, display.getControl1(), + template.getControl1())); + controller.setResolution(10); + controller.addTarget(new PropertySetter(display, "control2", + point2dInterpolator, display.getControl2(), + template.getControl2())); + + controller.start(); + } + } } } diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/SplineEditor/SplineDisplay.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/splineeditor/SplineDisplay.java similarity index 88% rename from modules/UIComponents/src/main/java/org/gephi/ui/components/SplineEditor/SplineDisplay.java rename to modules/UIComponents/src/main/java/org/gephi/ui/components/splineeditor/SplineDisplay.java index d190e3d405..0f34a01a1e 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/SplineEditor/SplineDisplay.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/splineeditor/SplineDisplay.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components.splineeditor; import java.awt.BasicStroke; @@ -72,13 +73,13 @@ public class SplineDisplay extends EquationDisplay { private Point2D selected = null; private Point dragStart = null; private boolean isSaving = false; - private PropertyChangeSupport support; + private final PropertyChangeSupport support; SplineDisplay() { super(0.0, 0.0, - -0.1, 1.1, -0.1, 1.1, - 0.2, 6, - 0.2, 6); + -0.1, 1.1, -0.1, 1.1, + 0.2, 6, + 0.2, 6); setEnabled(false); @@ -102,22 +103,22 @@ public Point2D getControl1() { return (Point2D) control1.clone(); } - public Point2D getControl2() { - return (Point2D) control2.clone(); - } - public void setControl1(Point2D control1) { support.firePropertyChange("control1", - this.control1.clone(), - control1.clone()); + this.control1.clone(), + control1.clone()); this.control1 = (Point2D) control1.clone(); repaint(); } + public Point2D getControl2() { + return (Point2D) control2.clone(); + } + public void setControl2(Point2D control2) { support.firePropertyChange("control2", - this.control2.clone(), - control2.clone()); + this.control2.clone(), + control2.clone()); this.control2 = (Point2D) control2.clone(); repaint(); } @@ -133,9 +134,9 @@ synchronized void saveAsTemplate(OutputStream out) { g.dispose(); BufferedImage subImage = image.getSubimage((int) xPositionToPixel(0.0), - (int) yPositionToPixel(1.0), - (int) (xPositionToPixel(1.0) - xPositionToPixel(0.0)) + 1, - (int) (yPositionToPixel(0.0) - yPositionToPixel(1.0)) + 1); + (int) yPositionToPixel(1.0), + (int) (xPositionToPixel(1.0) - xPositionToPixel(0.0)) + 1, + (int) (yPositionToPixel(0.0) - yPositionToPixel(1.0)) + 1); try { ImageIO.write(subImage, "PNG", out); @@ -167,15 +168,15 @@ private void paintControlPoint(Graphics2D g2, Point2D control) { Ellipse2D outer = getDraggableArea(control); Ellipse2D inner = new Ellipse2D.Double(origin_x + 2.0 - CONTROL_POINT_SIZE / 2.0, - origin_y + 2.0 - CONTROL_POINT_SIZE / 2.0, - 8.0, 8.0); + origin_y + 2.0 - CONTROL_POINT_SIZE / 2.0, + 8.0, 8.0); Area circle = new Area(outer); circle.subtract(new Area(inner)); Stroke stroke = g2.getStroke(); g2.setStroke(new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, - 5, new float[]{5, 5}, 0)); + 5, new float[] {5, 5}, 0)); g2.setColor(new Color(1.0f, 0.0f, 0.0f, 0.4f)); g2.drawLine(0, (int) origin_y, (int) origin_x, (int) origin_y); g2.drawLine((int) origin_x, (int) origin_y, (int) origin_x, getHeight()); @@ -192,23 +193,23 @@ private void paintControlPoint(Graphics2D g2, Point2D control) { g2.fill(circle); g2.drawLine((int) origin_x, (int) origin_y, - (int) xPositionToPixel(pos), (int) yPositionToPixel(pos)); + (int) xPositionToPixel(pos), (int) yPositionToPixel(pos)); } private Ellipse2D getDraggableArea(Point2D control) { Ellipse2D outer = new Ellipse2D.Double(xPositionToPixel(control.getX()) - CONTROL_POINT_SIZE / 2.0, - yPositionToPixel(control.getY()) - CONTROL_POINT_SIZE / 2.0, - CONTROL_POINT_SIZE, CONTROL_POINT_SIZE); + yPositionToPixel(control.getY()) - CONTROL_POINT_SIZE / 2.0, + CONTROL_POINT_SIZE, CONTROL_POINT_SIZE); return outer; } private void paintSpline(Graphics2D g2) { CubicCurve2D spline = new CubicCurve2D.Double(xPositionToPixel(0.0), yPositionToPixel(0.0), - xPositionToPixel(control1.getX()), - yPositionToPixel(control1.getY()), - xPositionToPixel(control2.getX()), - yPositionToPixel(control2.getY()), - xPositionToPixel(1.0), yPositionToPixel(1.0)); + xPositionToPixel(control1.getX()), + yPositionToPixel(control1.getY()), + xPositionToPixel(control2.getX()), + yPositionToPixel(control2.getY()), + xPositionToPixel(1.0), yPositionToPixel(1.0)); g2.setColor(new Color(0.0f, 0.3f, 0.0f, 1.0f)); g2.draw(spline); } @@ -246,7 +247,7 @@ public void mouseDragged(MouseEvent e) { Point dragEnd = e.getPoint(); double distance = xPixelToPosition(dragEnd.getX()) - - xPixelToPosition(dragStart.getX()); + - xPixelToPosition(dragStart.getX()); double x = selected.getX() + distance; if (x < 0.0) { x = 0.0; @@ -255,7 +256,7 @@ public void mouseDragged(MouseEvent e) { } distance = yPixelToPosition(dragEnd.getY()) - - yPixelToPosition(dragStart.getY()); + - yPixelToPosition(dragStart.getY()); double y = selected.getY() + distance; if (y < 0.0) { y = 0.0; @@ -266,7 +267,7 @@ public void mouseDragged(MouseEvent e) { Point2D selectedCopy = (Point2D) selected.clone(); selected.setLocation(x, y); support.firePropertyChange("control" + (selected == control1 ? "1" : "2"), - selectedCopy, selected.clone()); + selectedCopy, selected.clone()); repaint(); diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/SplineEditor/SplineEditor.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/splineeditor/SplineEditor.java similarity index 75% rename from modules/UIComponents/src/main/java/org/gephi/ui/components/SplineEditor/SplineEditor.java rename to modules/UIComponents/src/main/java/org/gephi/ui/components/splineeditor/SplineEditor.java index b5156b3037..44896332b8 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/SplineEditor/SplineEditor.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/splineeditor/SplineEditor.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components.splineeditor; import java.awt.BorderLayout; @@ -48,16 +49,13 @@ Development and Distribution License("CDDL") (collectively, the import javax.swing.ImageIcon; import javax.swing.JDialog; import org.jdesktop.swingx.JXHeader; +import org.openide.util.ImageUtilities; import org.openide.util.NbBundle; import org.openide.windows.WindowManager; /** - * Adaptation of the SwingX demo SplineEditor. Used to get a - * {@link Interpolator} for computing. - *

            - * Romain - * Guy's article + * Adaptation of the SwingX demo SplineEditor. Used to get a Interpolator for computing. + * Romain Guy's article * * @author Mathieu Bastian */ @@ -78,10 +76,10 @@ public SplineEditor(String title) throws HeadlessException { } private Component buildHeader() { - ImageIcon icon = new ImageIcon(getClass().getResource("images/simulator.png")); + ImageIcon icon = ImageUtilities.loadImageIcon("UIComponents/simulator.svg", false); JXHeader header = new JXHeader(NbBundle.getMessage(SplineEditor.class, "splineEditor_title"), - NbBundle.getMessage(SplineEditor.class, "splineEditor_header"), - icon); + NbBundle.getMessage(SplineEditor.class, "splineEditor_header"), + icon); return header; } @@ -95,34 +93,18 @@ public Point2D getControl1() { return display.getControl1(); } - public Point2D getControl2() { + public void setControl1(Point2D control1) { SplineDisplay display = splineControlPanel.getDisplay(); - return display.getControl2(); + display.setControl1(control1); } - public void setControl1(Point2D control1) { + public Point2D getControl2() { SplineDisplay display = splineControlPanel.getDisplay(); - display.setControl1(control1); + return display.getControl2(); } public void setControl2(Point2D control2) { SplineDisplay display = splineControlPanel.getDisplay(); display.setControl2(control2); } -// public Interpolator getCurrentInterpolator() { -// SplineDisplay display = splineControlPanel.getDisplay(); -// Point2D control1 = display.getControl1(); -// Point2D control2 = display.getControl2(); -// -// //The TimingFramework implementation doesn't respect the SMIL specification about the returned Y value -// /*Interpolator splines = new SplineInterpolator((float) control1.getX(), -// (float) control1.getY(), -// (float) control2.getX(), (float) control2.getY());*/ -// -// Interpolator splines = new BezierInterpolator((float) control1.getX(), -// (float) control1.getY(), -// (float) control2.getX(), (float) control2.getY()); -// -// return splines; -// } } diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/SplineEditor/equation/AbstractEquation.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/splineeditor/equation/AbstractEquation.java similarity index 92% rename from modules/UIComponents/src/main/java/org/gephi/ui/components/SplineEditor/equation/AbstractEquation.java rename to modules/UIComponents/src/main/java/org/gephi/ui/components/splineeditor/equation/AbstractEquation.java index 9f1eaaf556..d89c91c3ad 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/SplineEditor/equation/AbstractEquation.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/splineeditor/equation/AbstractEquation.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components.splineeditor.equation; import java.beans.PropertyChangeEvent; @@ -51,7 +52,7 @@ public abstract class AbstractEquation implements Equation { protected List listeners; protected AbstractEquation() { - this.listeners = new LinkedList(); + this.listeners = new LinkedList<>(); } public void addPropertyChangeListener(PropertyChangeListener listener) { @@ -67,12 +68,12 @@ public void removePropertyChangeListener(PropertyChangeListener listener) { } protected void firePropertyChange(String propertyName, - double oldValue, - double newValue) { + double oldValue, + double newValue) { PropertyChangeEvent changeEvent = new PropertyChangeEvent(this, - propertyName, - oldValue, - newValue); + propertyName, + oldValue, + newValue); for (PropertyChangeListener listener : listeners) { listener.propertyChange(changeEvent); } diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/SplineEditor/equation/Equation.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/splineeditor/equation/Equation.java similarity index 97% rename from modules/UIComponents/src/main/java/org/gephi/ui/components/SplineEditor/equation/Equation.java rename to modules/UIComponents/src/main/java/org/gephi/ui/components/splineeditor/equation/Equation.java index 210b169a95..6169f80d57 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/SplineEditor/equation/Equation.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/splineeditor/equation/Equation.java @@ -39,9 +39,10 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components.splineeditor.equation; public interface Equation { - public double compute(double variable); + double compute(double variable); } diff --git a/modules/UIComponents/src/main/java/org/gephi/ui/components/SplineEditor/equation/EquationDisplay.java b/modules/UIComponents/src/main/java/org/gephi/ui/components/splineeditor/equation/EquationDisplay.java similarity index 87% rename from modules/UIComponents/src/main/java/org/gephi/ui/components/SplineEditor/equation/EquationDisplay.java rename to modules/UIComponents/src/main/java/org/gephi/ui/components/splineeditor/equation/EquationDisplay.java index 37eaf100bd..d8643e9d08 100644 --- a/modules/UIComponents/src/main/java/org/gephi/ui/components/SplineEditor/equation/EquationDisplay.java +++ b/modules/UIComponents/src/main/java/org/gephi/ui/components/splineeditor/equation/EquationDisplay.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.components.splineeditor.equation; import java.awt.BasicStroke; @@ -61,41 +62,41 @@ Development and Distribution License("CDDL") (collectively, the import java.text.NumberFormat; import java.util.LinkedList; import java.util.List; - import javax.swing.JComponent; +import org.gephi.ui.utils.UIUtils; public class EquationDisplay extends JComponent implements PropertyChangeListener { - private static final Color COLOR_BACKGROUND = Color.WHITE; - private static final Color COLOR_MAJOR_GRID = Color.GRAY.brighter(); - private static final Color COLOR_MINOR_GRID = new Color(220, 220, 220); - private static final Color COLOR_AXIS = Color.BLACK; + private final Color colorBackground; + private final Color colorMajorGrid; + private final Color colorMinorGrid; + private final Color colorAxis; private static final float STROKE_AXIS = 1.2f; private static final float STROKE_GRID = 1.0f; private static final float COEFF_ZOOM = 1.1f; - private List equations; protected double minX; protected double maxX; protected double minY; protected double maxY; - private double originX; - private double originY; - private double majorX; - private int minorX; - private double majorY; - private int minorY; + private final List equations; + private final double originX; + private final double originY; + private final double majorX; + private final int minorX; + private final double majorY; + private final int minorY; private boolean drawText = true; private Point dragStart; - private NumberFormat formatter; - private ZoomHandler zoomHandler; - private PanMotionHandler panMotionHandler; - private PanHandler panHandler; + private final NumberFormat formatter; + private final ZoomHandler zoomHandler; + private final PanMotionHandler panMotionHandler; + private final PanHandler panHandler; public EquationDisplay(double originX, double originY, - double minX, double maxX, - double minY, double maxY, - double majorX, int minorX, - double majorY, int minorY) { + double minX, double maxX, + double minY, double maxY, + double majorX, int minorX, + double majorY, int minorY) { if (minX >= maxX) { throw new IllegalArgumentException("minX must be < to maxX"); } @@ -141,11 +142,23 @@ public EquationDisplay(double originX, double originY, this.majorY = majorY; this.minorY = minorY; - this.equations = new LinkedList(); + this.equations = new LinkedList<>(); this.formatter = NumberFormat.getInstance(); this.formatter.setMaximumFractionDigits(2); + if (UIUtils.isDarkLookAndFeel()) { + colorBackground = new Color(43,43,43); + colorMajorGrid = new Color(80,80,80); + colorMinorGrid = new Color(60,60,60); + colorAxis = Color.GRAY; + } else { + colorBackground = Color.WHITE; + colorMajorGrid = Color.GRAY.brighter(); + colorMinorGrid = new Color(220, 220, 220); + colorAxis = Color.BLACK; + } + panHandler = new PanHandler(); addMouseListener(panHandler); panMotionHandler = new PanMotionHandler(); @@ -295,7 +308,7 @@ private void drawGrid(Graphics2D g2) { private void drawHorizontalLabels(Graphics2D g2) { double axisV = xPositionToPixel(originX); - g2.setColor(COLOR_AXIS); + g2.setColor(colorAxis); for (double y = originY + majorY; y < maxY + majorY; y += majorY) { int position = (int) yPositionToPixel(y); g2.drawString(formatter.format(y), (int) axisV + 5, position); @@ -316,35 +329,35 @@ private void drawHorizontalGrid(Graphics2D g2) { for (double y = originY + majorY; y < maxY + majorY; y += majorY) { g2.setStroke(gridStroke); - g2.setColor(COLOR_MINOR_GRID); + g2.setColor(colorMinorGrid); for (int i = 0; i < minorY; i++) { int position = (int) yPositionToPixel(y - i * minorSpacing); g2.drawLine(0, position, getWidth(), position); } int position = (int) yPositionToPixel(y); - g2.setColor(COLOR_MAJOR_GRID); + g2.setColor(colorMajorGrid); g2.drawLine(0, position, getWidth(), position); g2.setStroke(axisStroke); - g2.setColor(COLOR_AXIS); + g2.setColor(colorAxis); g2.drawLine((int) axisV - 3, position, (int) axisV + 3, position); } for (double y = originY - majorY; y > minY - majorY; y -= majorY) { g2.setStroke(gridStroke); - g2.setColor(COLOR_MINOR_GRID); + g2.setColor(colorMinorGrid); for (int i = 0; i < minorY; i++) { int position = (int) yPositionToPixel(y + i * minorSpacing); g2.drawLine(0, position, getWidth(), position); } int position = (int) yPositionToPixel(y); - g2.setColor(COLOR_MAJOR_GRID); + g2.setColor(colorMajorGrid); g2.drawLine(0, position, getWidth(), position); g2.setStroke(axisStroke); - g2.setColor(COLOR_AXIS); + g2.setColor(colorAxis); g2.drawLine((int) axisV - 3, position, (int) axisV + 3, position); } } @@ -353,7 +366,7 @@ private void drawVerticalLabels(Graphics2D g2) { double axisH = yPositionToPixel(originY); FontMetrics metrics = g2.getFontMetrics(); - g2.setColor(COLOR_AXIS); + g2.setColor(colorAxis); for (double x = originX + majorX; x < maxX + majorX; x += majorX) { int position = (int) xPositionToPixel(x); @@ -375,35 +388,35 @@ private void drawVerticalGrid(Graphics2D g2) { for (double x = originX + majorX; x < maxX + majorX; x += majorX) { g2.setStroke(gridStroke); - g2.setColor(COLOR_MINOR_GRID); + g2.setColor(colorMinorGrid); for (int i = 0; i < minorX; i++) { int position = (int) xPositionToPixel(x - i * minorSpacing); g2.drawLine(position, 0, position, getHeight()); } int position = (int) xPositionToPixel(x); - g2.setColor(COLOR_MAJOR_GRID); + g2.setColor(colorMajorGrid); g2.drawLine(position, 0, position, getHeight()); g2.setStroke(axisStroke); - g2.setColor(COLOR_AXIS); + g2.setColor(colorAxis); g2.drawLine(position, (int) axisH - 3, position, (int) axisH + 3); } for (double x = originX - majorX; x > minX - majorX; x -= majorX) { g2.setStroke(gridStroke); - g2.setColor(COLOR_MINOR_GRID); + g2.setColor(colorMinorGrid); for (int i = 0; i < minorX; i++) { int position = (int) xPositionToPixel(x + i * minorSpacing); g2.drawLine(position, 0, position, getHeight()); } int position = (int) xPositionToPixel(x); - g2.setColor(COLOR_MAJOR_GRID); + g2.setColor(colorMajorGrid); g2.drawLine(position, 0, position, getHeight()); g2.setStroke(axisStroke); - g2.setColor(COLOR_AXIS); + g2.setColor(colorAxis); g2.drawLine(position, (int) axisH - 3, position, (int) axisH + 3); } } @@ -412,7 +425,7 @@ private void drawAxis(Graphics2D g2) { double axisH = yPositionToPixel(originY); double axisV = xPositionToPixel(originX); - g2.setColor(COLOR_AXIS); + g2.setColor(colorAxis); Stroke stroke = g2.getStroke(); g2.setStroke(new BasicStroke(STROKE_AXIS)); @@ -427,18 +440,22 @@ private void drawAxis(Graphics2D g2) { protected void setupGraphics(Graphics2D g2) { g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, - RenderingHints.VALUE_ANTIALIAS_ON); + RenderingHints.VALUE_ANTIALIAS_ON); } protected void paintBackground(Graphics2D g2) { - g2.setColor(COLOR_BACKGROUND); + g2.setColor(colorBackground); g2.fill(g2.getClipBounds()); } + public List getEquations() { + return equations; + } + private class DrawableEquation { - private AbstractEquation equation; - private Color color; + private final AbstractEquation equation; + private final Color color; DrawableEquation(AbstractEquation equation, Color color) { this.equation = equation; @@ -497,12 +514,12 @@ public void mouseDragged(MouseEvent e) { Point dragEnd = e.getPoint(); double distance = xPixelToPosition(dragEnd.getX()) - - xPixelToPosition(dragStart.getX()); + - xPixelToPosition(dragStart.getX()); minX -= distance; maxX -= distance; distance = yPixelToPosition(dragEnd.getY()) - - yPixelToPosition(dragStart.getY()); + - yPixelToPosition(dragStart.getY()); minY -= distance; maxY -= distance; @@ -510,8 +527,4 @@ public void mouseDragged(MouseEvent e) { dragStart = dragEnd; } } - - public List getEquations() { - return equations; - } } diff --git a/modules/UIComponents/src/main/nbm/manifest.mf b/modules/UIComponents/src/main/nbm/manifest.mf index d74a745417..13849010da 100644 --- a/modules/UIComponents/src/main/nbm/manifest.mf +++ b/modules/UIComponents/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/ui/components/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi UI +OpenIDE-Module-Name: UI Components \ No newline at end of file diff --git a/modules/UIComponents/src/main/nbm/module.xml b/modules/UIComponents/src/main/nbm/module.xml deleted file mode 100644 index 9d33b838cf..0000000000 --- a/modules/UIComponents/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle.properties index 3b5ce3f087..ae46bdc467 100644 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle.properties +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle.properties @@ -1,7 +1,4 @@ -OpenIDE-Module-Display-Category=Gephi UI -OpenIDE-Module-Long-Description=\ - Sharable Swing components that can be used for different purposes. -OpenIDE-Module-Name=UI Components +OpenIDE-Module-Long-Description=Sharable Swing components that can be used for different purposes. HTMLTextArea_CutString=Cut HTMLTextArea_CopyString=Copy HTMLTextArea_PasteString=Paste diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_ar.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_ca.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_ca.properties new file mode 100644 index 0000000000..eeab55bb66 --- /dev/null +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_ca.properties @@ -0,0 +1,22 @@ +OpenIDE-Module-Long-Description=Els components giratoris per compartir es poden utilitzar per a diferents propςsits +HTMLTextArea_CutString=Retalla +HTMLTextArea_CopyString=Copia +HTMLTextArea_PasteString=Enganxa +HTMLTextArea_DeleteString=Elimina +HTMLTextArea_SelectAllString=Selecciona-ho tot +OpenIDE-Module-Short-Description=Components giratoris per compartir +SwapListPanel.leftButton.text= +SwapListPanel.rightButton.text= +JRangeSliderPanel.lowerBoundTextField.text=NaN +JRangeSliderPanel.upperBoundTextField.text=NaN +SimpleHTMLReport.printButton.text=Imprimeix +SimpleHTMLReport.copyButton.text=Copia +SimpleHTMLReport.saveButton.text=Desa +SimpleHTMLReport.closeButton.text=Tanca +SimpleHTMLReport.title=Informe HTML +SimpleHTMLReport.status.saveSuccess = S'ha desat l'informe a la carpeta {0} +SimpleHTMLReport.status.saveError = No s'ha pogut desar l'informe. {0} ja existeix i no ιs cap carpeta +JFreeChartDialog.zoomOutButton.text=Allunya +JFreeChartDialog.closeButton.text=Tanca +JFreeChartDialog.resetButton.text=Restaura la mida del diagrama +JFreeChartDialog.zoomInButton.text=Apropa diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_cs.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_cs.properties index 636a4b7b5e..3cd8a64504 100644 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_cs.properties +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_cs.properties @@ -1,47 +1,22 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2011-2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-17 06\:43+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=Sd\u00edliteln\u00e9 sou\u010d\u00e1sti Swing, kter\u00e9 mohou b\u00fdt pou\u017eity pro r\u016fzn\u00e9 \u00fa\u010dely. - -HTMLTextArea_CutString=Vyjmout - -HTMLTextArea_CopyString=Kop\u00edrovat - -HTMLTextArea_PasteString=Vlo\u017eit - -HTMLTextArea_DeleteString=Smazat - -HTMLTextArea_SelectAllString=Vybrat v\u0161e - -OpenIDE-Module-Short-Description=Sd\u00edliteln\u00e9 sou\u010d\u00e1sti Swing - -JRangeSliderPanel.lowerBoundTextField.text=NaN - -JRangeSliderPanel.upperBoundTextField.text=NaN - -SimpleHTMLReport.printButton.text=Tisk - -SimpleHTMLReport.copyButton.text=Kop\u00edrovat - -SimpleHTMLReport.saveButton.text=Ulo\u017eit - -SimpleHTMLReport.closeButton.text=Zav\u0159\u00edt - -SimpleHTMLReport.title=HTML Z\u00e1znam - -SimpleHTMLReport.status.saveSuccess=Z\u00e1znam ulo\u017een do adres\u00e1\u0159e {0} - -SimpleHTMLReport.status.saveError=Nelze ulo\u017eit hl\u00e1\u0161en\u00ed. {0} ji\u017e existuje a nen\u00ed adres\u00e1\u0159 - -JFreeChartDialog.zoomOutButton.text=Odd\u00e1lit - -JFreeChartDialog.closeButton.text=Zav\u0159\u00edt - -JFreeChartDialog.resetButton.text=Resetovat velikost grafu - -JFreeChartDialog.zoomInButton.text=P\u0159ibl\u00ed\u017eit +OpenIDE-Module-Long-Description=Sdνlitelnι sou\u010dαsti Swing, kterι mohou bύt pou\u017eity pro r\u016fznι ϊ\u010dely. +HTMLTextArea_CutString=Vyjmout +HTMLTextArea_CopyString=Kopνrovat +HTMLTextArea_PasteString=Vlo\u017eit +HTMLTextArea_DeleteString=Smazat +HTMLTextArea_SelectAllString=Vybrat v\u0161e +OpenIDE-Module-Short-Description=Sdνlitelnι sou\u010dαsti Swing +SwapListPanel.leftButton.text= +SwapListPanel.rightButton.text= +JRangeSliderPanel.lowerBoundTextField.text=NaN +JRangeSliderPanel.upperBoundTextField.text=NaN +SimpleHTMLReport.printButton.text=Tisk +SimpleHTMLReport.copyButton.text=Kopνrovat +SimpleHTMLReport.saveButton.text=Ulo\u017eit +SimpleHTMLReport.closeButton.text=Zav\u0159νt +SimpleHTMLReport.title=HTML Zαznam +SimpleHTMLReport.status.saveSuccess = Zαznam ulo\u017een do adresα\u0159e {0} +SimpleHTMLReport.status.saveError = Nelze ulo\u017eit hlα\u0161enν. {0} ji\u017e existuje a nenν adresα\u0159 +JFreeChartDialog.zoomOutButton.text=Oddαlit +JFreeChartDialog.closeButton.text=Zav\u0159νt +JFreeChartDialog.resetButton.text=Resetovat velikost grafu +JFreeChartDialog.zoomInButton.text=P\u0159iblν\u017eit diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_de.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_de.properties new file mode 100644 index 0000000000..d4184f749f --- /dev/null +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_de.properties @@ -0,0 +1,22 @@ +OpenIDE-Module-Long-Description=Wiederverwendbare Swing Komponenten, die fόr verschiedene Zwecke genutzt werden kφnnen. +HTMLTextArea_CutString=Ausschneiden +HTMLTextArea_CopyString=Kopieren +HTMLTextArea_PasteString=Einfόgen +HTMLTextArea_DeleteString=Lφschen +HTMLTextArea_SelectAllString=Alles Auswδhlen +OpenIDE-Module-Short-Description=Wiederverwendbare Swing Komponenten +SwapListPanel.leftButton.text= +SwapListPanel.rightButton.text= +JRangeSliderPanel.lowerBoundTextField.text=NaN +JRangeSliderPanel.upperBoundTextField.text=NaN +SimpleHTMLReport.printButton.text=Drucken +SimpleHTMLReport.copyButton.text=Kopieren +SimpleHTMLReport.saveButton.text=Speichern +SimpleHTMLReport.closeButton.text=Schlieίen +SimpleHTMLReport.title=HTML Bericht +SimpleHTMLReport.status.saveSuccess = Bericht in Verzeichnis {0} gespeichert +SimpleHTMLReport.status.saveError = Bericht nicht speicherbar. {0} existiert bereits und ist kein Verzeichnis +JFreeChartDialog.zoomOutButton.text=Herauszoomen +JFreeChartDialog.closeButton.text=Schlieίen +JFreeChartDialog.resetButton.text=Diagramm-Grφίe zurόcksetzen +JFreeChartDialog.zoomInButton.text=Hereinzoomen diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_es.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_es.properties index eb1ca7f102..453e3dd8d8 100644 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_es.properties +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_es.properties @@ -1,48 +1,22 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:21+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Componentes Swing reutilizables que pueden ser utilizados con diferentes prop\u00f3sitos - -HTMLTextArea_CutString=Cortar - -HTMLTextArea_CopyString=Copiar - -HTMLTextArea_PasteString=Pegar - -HTMLTextArea_DeleteString=Eliminar - -HTMLTextArea_SelectAllString=Seleccionar todo - -OpenIDE-Module-Short-Description=API/SPI para generadores - -JRangeSliderPanel.lowerBoundTextField.text=NaN - -JRangeSliderPanel.upperBoundTextField.text=NaN - -SimpleHTMLReport.printButton.text=Imprimir - -SimpleHTMLReport.copyButton.text=Copiar - -SimpleHTMLReport.saveButton.text=Guardar - -SimpleHTMLReport.closeButton.text=Cerrar - -SimpleHTMLReport.title=Informe HTML - -SimpleHTMLReport.status.saveSuccess=Informe guardado en el directorio {0} - -SimpleHTMLReport.status.saveError=No se pudo guardar el informe. {0} ya existe y no es un directorio - -JFreeChartDialog.zoomOutButton.text=Alejar zoom - -JFreeChartDialog.closeButton.text=Cerrar - -JFreeChartDialog.resetButton.text=Reestablecer - -JFreeChartDialog.zoomInButton.text=Acercar zoom +OpenIDE-Module-Long-Description=Componentes Swing reutilizables que pueden ser utilizados con diferentes propσsitos +HTMLTextArea_CutString=Cortar +HTMLTextArea_CopyString=Copiar +HTMLTextArea_PasteString=Pegar +HTMLTextArea_DeleteString=Eliminar +HTMLTextArea_SelectAllString=Seleccionar todo +OpenIDE-Module-Short-Description=API/SPI para generadores +SwapListPanel.leftButton.text= +SwapListPanel.rightButton.text= +JRangeSliderPanel.lowerBoundTextField.text=NaN +JRangeSliderPanel.upperBoundTextField.text=NaN +SimpleHTMLReport.printButton.text=Imprimir +SimpleHTMLReport.copyButton.text=Copiar +SimpleHTMLReport.saveButton.text=Guardar +SimpleHTMLReport.closeButton.text=Cerrar +SimpleHTMLReport.title=Informe HTML +SimpleHTMLReport.status.saveSuccess = Informe guardado en el directorio {0} +SimpleHTMLReport.status.saveError = No se pudo guardar el informe. {0} ya existe y no es un directorio +JFreeChartDialog.zoomOutButton.text=Alejar zoom +JFreeChartDialog.closeButton.text=Cerrar +JFreeChartDialog.resetButton.text=Reestablecer +JFreeChartDialog.zoomInButton.text=Acercar zoom diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_fr.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_fr.properties index 280bfd200b..5bbcaf83bf 100644 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_fr.properties +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_fr.properties @@ -1,47 +1,22 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:15+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Composants Swing librement utilisables - -HTMLTextArea_CutString=Couper - -HTMLTextArea_CopyString=Copier - -HTMLTextArea_PasteString=Coller - -HTMLTextArea_DeleteString=Supprimer - -HTMLTextArea_SelectAllString=Tout s\u00e9lectionner - -OpenIDE-Module-Short-Description=Composants Swing - -JRangeSliderPanel.lowerBoundTextField.text=NaN - -JRangeSliderPanel.upperBoundTextField.text=NaN - -SimpleHTMLReport.printButton.text=Imprimer - -SimpleHTMLReport.copyButton.text=Copier - -SimpleHTMLReport.saveButton.text=Enregistrer - -SimpleHTMLReport.closeButton.text=Fermer - -SimpleHTMLReport.title=Rapport HTML - -SimpleHTMLReport.status.saveSuccess=Rapport enregistr\u00e9 dans le dossier {0}. - -!SimpleHTMLReport.status.saveError= - -JFreeChartDialog.zoomOutButton.text=D\u00e9zoomer - -JFreeChartDialog.closeButton.text=Fermer - -JFreeChartDialog.resetButton.text=R\u00e9initialiser - -JFreeChartDialog.zoomInButton.text=Zoomer +OpenIDE-Module-Long-Description=Composants Swing librement utilisables +HTMLTextArea_CutString=Couper +HTMLTextArea_CopyString=Copier +HTMLTextArea_PasteString=Coller +HTMLTextArea_DeleteString=Supprimer +HTMLTextArea_SelectAllString=Tout sιlectionner +OpenIDE-Module-Short-Description=Composants Swing +SwapListPanel.leftButton.text= +SwapListPanel.rightButton.text= +JRangeSliderPanel.lowerBoundTextField.text=NaN +JRangeSliderPanel.upperBoundTextField.text=NaN +SimpleHTMLReport.printButton.text=Imprimer +SimpleHTMLReport.copyButton.text=Copier +SimpleHTMLReport.saveButton.text=Enregistrer +SimpleHTMLReport.closeButton.text=Fermer +SimpleHTMLReport.title=Rapport HTML +SimpleHTMLReport.status.saveSuccess = Rapport enregistrι dans le dossier {0}. +SimpleHTMLReport.status.saveError = Rapport {0} non sauvegardι, car il existe et n'est pas un dossier. +JFreeChartDialog.zoomOutButton.text=Dιzoomer +JFreeChartDialog.closeButton.text=Fermer +JFreeChartDialog.resetButton.text=Rιinitialiser +JFreeChartDialog.zoomInButton.text=Zoomer diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_he.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_he.properties new file mode 100644 index 0000000000..2a03f0f78f --- /dev/null +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_he.properties @@ -0,0 +1,22 @@ +OpenIDE-Module-Long-Description=Sharable Swing components that can be used for different purposes. +HTMLTextArea_CutString=Cut +HTMLTextArea_CopyString=Copy +HTMLTextArea_PasteString=Paste +HTMLTextArea_DeleteString=\u05de\u05d7\u05e7 +HTMLTextArea_SelectAllString=Select All +OpenIDE-Module-Short-Description=Sharable Swing components +SwapListPanel.leftButton.text= +SwapListPanel.rightButton.text= +JRangeSliderPanel.lowerBoundTextField.text=NaN +JRangeSliderPanel.upperBoundTextField.text=NaN +SimpleHTMLReport.printButton.text=Print +SimpleHTMLReport.copyButton.text=Copy +SimpleHTMLReport.saveButton.text=\u05e9\u05de\u05d5\u05e8 +SimpleHTMLReport.closeButton.text=Close +SimpleHTMLReport.title=HTML Report +SimpleHTMLReport.status.saveSuccess=Report saved to {0} directory +SimpleHTMLReport.status.saveError=Could not save report. {0} already exists and is not a directory +JFreeChartDialog.zoomOutButton.text=Zoom out +JFreeChartDialog.closeButton.text=Close +JFreeChartDialog.resetButton.text=Reset chart size +JFreeChartDialog.zoomInButton.text=Zoom in diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_hu.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_hu.properties new file mode 100644 index 0000000000..e8ae58ef71 --- /dev/null +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_hu.properties @@ -0,0 +1,20 @@ + + +JFreeChartDialog.resetButton.text=Diagram m\u00E9ret\u00E9nek vissza\u00E1ll\u00EDt\u00E1sa +JFreeChartDialog.zoomInButton.text=Nagy\u00EDt\u00E1s +SimpleHTMLReport.copyButton.text=M\u00E1sol\u00E1s +HTMLTextArea_PasteString=Beilleszt +HTMLTextArea_DeleteString=T\u00F6rl\u00E9s +HTMLTextArea_SelectAllString=Mindet kiv\u00E1laszt +JFreeChartDialog.zoomOutButton.text=Kicsiny\u00EDt\u00E9s +SimpleHTMLReport.title=HTML jelent\u00E9s +SimpleHTMLReport.status.saveSuccess=A jelent\u00E9s elmentve a(z) {0} k\u00F6nyvt\u00E1rba +SimpleHTMLReport.printButton.text=Nyomtat\u00E1s +SimpleHTMLReport.status.saveError=Nem siker\u00FClt menteni a jelent\u00E9st. A(z) {0} m\u00E1r l\u00E9tezik, \u00E9s nem egy k\u00F6nyvt\u00E1r +HTMLTextArea_CopyString=M\u00E1sol\u00E1s +OpenIDE-Module-Short-Description=Megoszthat\u00F3 Swing sszetev\u0151k +OpenIDE-Module-Long-Description=Megoszthat\u00F3 Swing alkatr\u00E9szek, amelyek k\u00FCl\u00F6nb\u00F6z\u0151 c\u00E9lokra haszn\u00E1lhat\u00F3k. +SimpleHTMLReport.saveButton.text=Ment\u00E9s +JFreeChartDialog.closeButton.text=Bez\u00E1r +SimpleHTMLReport.closeButton.text=Bez\u00E1r +HTMLTextArea_CutString=V\u00E1gott diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_it.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_it.properties new file mode 100644 index 0000000000..59cdc0f69f --- /dev/null +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_it.properties @@ -0,0 +1,22 @@ +OpenIDE-Module-Long-Description=Sharable Swing components that can be used for different purposes. +HTMLTextArea_CutString=Cut +HTMLTextArea_CopyString=Copy +HTMLTextArea_PasteString=Paste +HTMLTextArea_DeleteString=Cancella +HTMLTextArea_SelectAllString=Seleziona tutto +OpenIDE-Module-Short-Description=Sharable Swing components +SwapListPanel.leftButton.text= +SwapListPanel.rightButton.text= +JRangeSliderPanel.lowerBoundTextField.text=NaN +JRangeSliderPanel.upperBoundTextField.text=NaN +SimpleHTMLReport.printButton.text=Print +SimpleHTMLReport.copyButton.text=Copy +SimpleHTMLReport.saveButton.text=Salva +SimpleHTMLReport.closeButton.text=Close +SimpleHTMLReport.title=HTML Report +SimpleHTMLReport.status.saveSuccess=Report saved to {0} directory +SimpleHTMLReport.status.saveError=Could not save report. {0} already exists and is not a directory +JFreeChartDialog.zoomOutButton.text=Zoom out +JFreeChartDialog.closeButton.text=Close +JFreeChartDialog.resetButton.text=Reset chart size +JFreeChartDialog.zoomInButton.text=Zoom in diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_ja.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_ja.properties index 5fd92cae3a..5ddd246f33 100644 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_ja.properties +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_ja.properties @@ -1,47 +1,22 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:15+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u7570\u306a\u308b\u76ee\u7684\u306b\u4f7f\u7528\u3067\u304d\u308b\u5171\u6709\u53ef\u80fd\u306aSwing\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3002 - -HTMLTextArea_CutString=\u30ab\u30c3\u30c8 - -HTMLTextArea_CopyString=\u30b3\u30d4\u30fc - -HTMLTextArea_PasteString=\u30da\u30fc\u30b9\u30c8 - -HTMLTextArea_DeleteString=\u524a\u9664 - -HTMLTextArea_SelectAllString=\u3059\u3079\u3066\u3092\u9078\u629e - -OpenIDE-Module-Short-Description=\u5171\u6709\u53ef\u80fd\u306aSwing\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8 - -JRangeSliderPanel.lowerBoundTextField.text=NaN - -JRangeSliderPanel.upperBoundTextField.text=NaN - -SimpleHTMLReport.printButton.text=\u5370\u5237 - -SimpleHTMLReport.copyButton.text=\u30b3\u30d4\u30fc - -SimpleHTMLReport.saveButton.text=\u4fdd\u5b58 - -SimpleHTMLReport.closeButton.text=\u9589\u3058\u308b - -SimpleHTMLReport.title=HTML\u5831\u544a - -SimpleHTMLReport.status.saveSuccess=\u5831\u544a\u306f{0}\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u4fdd\u5b58 - -!SimpleHTMLReport.status.saveError= - -JFreeChartDialog.zoomOutButton.text=\u7e2e\u5c0f - -JFreeChartDialog.closeButton.text=\u9589\u3058\u308b - -JFreeChartDialog.resetButton.text=\u30c1\u30e3\u30fc\u30c8\u30b5\u30a4\u30ba\u306e\u30ea\u30bb\u30c3\u30c8 - -JFreeChartDialog.zoomInButton.text=\u62e1\u5927 +OpenIDE-Module-Long-Description=\u7570\u306a\u308b\u76ee\u7684\u306b\u4f7f\u7528\u3067\u304d\u308b\u5171\u6709\u53ef\u80fd\u306aSwing\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8\u3002 +HTMLTextArea_CutString=\u30ab\u30c3\u30c8 +HTMLTextArea_CopyString=\u30b3\u30d4\u30fc +HTMLTextArea_PasteString=\u30da\u30fc\u30b9\u30c8 +HTMLTextArea_DeleteString=\u524a\u9664 +HTMLTextArea_SelectAllString=\u3059\u3079\u3066\u3092\u9078\u629e +OpenIDE-Module-Short-Description=\u5171\u6709\u53ef\u80fd\u306aSwing\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8 +SwapListPanel.leftButton.text= +SwapListPanel.rightButton.text= +JRangeSliderPanel.lowerBoundTextField.text=NaN +JRangeSliderPanel.upperBoundTextField.text=NaN +SimpleHTMLReport.printButton.text=\u5370\u5237 +SimpleHTMLReport.copyButton.text=\u30b3\u30d4\u30fc +SimpleHTMLReport.saveButton.text=\u4fdd\u5b58 +SimpleHTMLReport.closeButton.text=\u9589\u3058\u308b +SimpleHTMLReport.title=HTML\u5831\u544a +SimpleHTMLReport.status.saveSuccess = \u5831\u544a\u306f{0}\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306b\u4fdd\u5b58 +# SimpleHTMLReport.status.saveError = Could not save report. {0} already exists and is not a directory +JFreeChartDialog.zoomOutButton.text=\u7e2e\u5c0f +JFreeChartDialog.closeButton.text=\u9589\u3058\u308b +JFreeChartDialog.resetButton.text=\u30c1\u30e3\u30fc\u30c8\u30b5\u30a4\u30ba\u306e\u30ea\u30bb\u30c3\u30c8 +JFreeChartDialog.zoomInButton.text=\u62e1\u5927 diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_ko.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_ko.properties new file mode 100644 index 0000000000..6103e5590c --- /dev/null +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_ko.properties @@ -0,0 +1,22 @@ + + +JFreeChartDialog.resetButton.text=\uCC28\uD2B8 \uD06C\uAE30 \uC7AC\uC124\uC815 +JFreeChartDialog.zoomInButton.text=\uD655\uB300 +SimpleHTMLReport.copyButton.text=\uBCF5\uC0AC +HTMLTextArea_PasteString=\uBD99\uC774\uAE30 +HTMLTextArea_DeleteString=\uC0AD\uC81C +HTMLTextArea_SelectAllString=\uC804\uCCB4 \uC120\uD0DD +JRangeSliderPanel.upperBoundTextField.text=NaN +JFreeChartDialog.zoomOutButton.text=\uCD95\uC18C +SimpleHTMLReport.title=HTML \uBCF4\uACE0\uC11C +SimpleHTMLReport.status.saveSuccess=\uBCF4\uACE0\uC11C\uAC00 {0} \uB514\uB809\uD1A0\uB9AC\uC5D0 \uC800\uC7A5\uB410\uC2B5\uB2C8\uB2E4 +SimpleHTMLReport.printButton.text=\uC778\uC1C4 +SimpleHTMLReport.status.saveError=\uBCF4\uACE0\uC11C\uB97C \uC800\uC7A5\uD560 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4. {0}\uAC00 \uC774\uBBF8 \uC874\uC7AC\uD558\uBA70 \uB514\uB809\uD1A0\uB9AC\uAC00 \uC544\uB2D9\uB2C8\uB2E4 +HTMLTextArea_CopyString=\uBCF5\uC0AC +OpenIDE-Module-Short-Description=\uACF5\uC720 \uAC00\uB2A5\uD55C Swing \uCEF4\uD3EC\uB10C\uD2B8 +OpenIDE-Module-Long-Description=\uB2E4\uB978 \uC6A9\uB3C4\uB85C \uC0AC\uC6A9\uB420 \uC218 \uC788\uB294 \uACF5\uC720 \uAC00\uB2A5\uD55C Swing \uCEF4\uD3EC\uB10C\uD2B8\uC785\uB2C8\uB2E4. +JRangeSliderPanel.lowerBoundTextField.text=NaN +SimpleHTMLReport.saveButton.text=\uC800\uC7A5 +JFreeChartDialog.closeButton.text=\uB2EB\uAE30 +SimpleHTMLReport.closeButton.text=\uB2EB\uAE30 +HTMLTextArea_CutString=\uC790\uB974\uAE30 diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_nl.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_nl.properties new file mode 100644 index 0000000000..0b48b750f3 --- /dev/null +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_nl.properties @@ -0,0 +1,22 @@ +OpenIDE-Module-Long-Description=Sharable Swing components that can be used for different purposes. +HTMLTextArea_CutString=Cut +HTMLTextArea_CopyString=Copy +HTMLTextArea_PasteString=Paste +HTMLTextArea_DeleteString=Delete +HTMLTextArea_SelectAllString=Select All +OpenIDE-Module-Short-Description=Sharable Swing components +SwapListPanel.leftButton.text= +SwapListPanel.rightButton.text= +JRangeSliderPanel.lowerBoundTextField.text=NaN +JRangeSliderPanel.upperBoundTextField.text=NaN +SimpleHTMLReport.printButton.text=Print +SimpleHTMLReport.copyButton.text=Copy +SimpleHTMLReport.saveButton.text=Opslaan +SimpleHTMLReport.closeButton.text=Sluiten +SimpleHTMLReport.title=HTML Report +SimpleHTMLReport.status.saveSuccess=Report saved to {0} directory +SimpleHTMLReport.status.saveError=Could not save report. {0} already exists and is not a directory +JFreeChartDialog.zoomOutButton.text=Zoom out +JFreeChartDialog.closeButton.text=Sluiten +JFreeChartDialog.resetButton.text=Reset chart size +JFreeChartDialog.zoomInButton.text=Zoom in diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_pt_BR.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_pt_BR.properties index f8ef07dc72..afff6ad624 100644 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_pt_BR.properties +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_pt_BR.properties @@ -1,48 +1,22 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -# C\u00e9lio Faria Jr. , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-18 11\:13+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Componentes Swing reutiliz\u00e1veis que podem ser utilizados com v\u00e1rios prop\u00f3sitos - -HTMLTextArea_CutString=Cortar - -HTMLTextArea_CopyString=Copiar - -HTMLTextArea_PasteString=Colar - -HTMLTextArea_DeleteString=Excluir - -HTMLTextArea_SelectAllString=Selecionar todos - -OpenIDE-Module-Short-Description=Componentes Swing reutiliz\u00e1veis - -JRangeSliderPanel.lowerBoundTextField.text=NaN - -JRangeSliderPanel.upperBoundTextField.text=NaN - -SimpleHTMLReport.printButton.text=Imprimir - -SimpleHTMLReport.copyButton.text=Copiar - -SimpleHTMLReport.saveButton.text=Salvar - -SimpleHTMLReport.closeButton.text=Fechar - -SimpleHTMLReport.title=Relat\u00f3rio HTML - -SimpleHTMLReport.status.saveSuccess=Relat\u00f3rio salvo para o diret\u00f3rio {0} - -SimpleHTMLReport.status.saveError=N\u00e3o foi poss\u00edvel salvar o relat\u00f3rio. {0} j\u00e1 existe e n\u00e3o \u00e9 um diret\u00f3rio. - -JFreeChartDialog.zoomOutButton.text=Diminuir zoom - -JFreeChartDialog.closeButton.text=Fechar - -JFreeChartDialog.resetButton.text=Restaurar tamanho do gr\u00e1fico - -JFreeChartDialog.zoomInButton.text=Aumentar zoom +OpenIDE-Module-Long-Description=Componentes Swing reutilizαveis que podem ser utilizados com vαrios propσsitos +HTMLTextArea_CutString=Cortar +HTMLTextArea_CopyString=Copiar +HTMLTextArea_PasteString=Colar +HTMLTextArea_DeleteString=Excluir +HTMLTextArea_SelectAllString=Selecionar todos +OpenIDE-Module-Short-Description=Componentes Swing reutilizαveis +SwapListPanel.leftButton.text= +SwapListPanel.rightButton.text= +JRangeSliderPanel.lowerBoundTextField.text=NaN +JRangeSliderPanel.upperBoundTextField.text=NaN +SimpleHTMLReport.printButton.text=Imprimir +SimpleHTMLReport.copyButton.text=Copiar +SimpleHTMLReport.saveButton.text=Salvar +SimpleHTMLReport.closeButton.text=Fechar +SimpleHTMLReport.title=Relatσrio HTML +SimpleHTMLReport.status.saveSuccess = Relatσrio salvo para o diretσrio {0} +SimpleHTMLReport.status.saveError = Nγo foi possνvel salvar o relatσrio. {0} jα existe e nγo ι um diretσrio. +JFreeChartDialog.zoomOutButton.text=Diminuir zoom +JFreeChartDialog.closeButton.text=Fechar +JFreeChartDialog.resetButton.text=Restaurar tamanho do grαfico +JFreeChartDialog.zoomInButton.text=Aumentar zoom diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_ro.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_ro.properties new file mode 100644 index 0000000000..6e0a5f24a4 --- /dev/null +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_ro.properties @@ -0,0 +1,22 @@ + + +SimpleHTMLReport.closeButton.text=\u00CEnchide +SimpleHTMLReport.title=Raport HTML +SimpleHTMLReport.status.saveSuccess=Raportul a fost salvat \u00EEn directorul {0} +SimpleHTMLReport.status.saveError=Nu s-a putut salva raportul. {0} exist\u0103 deja \u0219i nu este un director +JFreeChartDialog.zoomOutButton.text=Mic\u0219oreaz\u0103 +JFreeChartDialog.closeButton.text=\u00CEnchide +OpenIDE-Module-Long-Description=Componente Swing partajabile ce pot fi utilizate \u00EEn diferite scopuri. +HTMLTextArea_CutString=Taie +HTMLTextArea_CopyString=Copiaz\u0103 +HTMLTextArea_PasteString=Lipe\u0219te +HTMLTextArea_DeleteString=\u0218terge +HTMLTextArea_SelectAllString=Selecteaz\u0103 tot +OpenIDE-Module-Short-Description=Componente Swing partajabile +JRangeSliderPanel.lowerBoundTextField.text=NaN +JRangeSliderPanel.upperBoundTextField.text=NaN +SimpleHTMLReport.printButton.text=Tip\u0103re\u0219te +SimpleHTMLReport.copyButton.text=Copiaz\u0103 +SimpleHTMLReport.saveButton.text=Salveaz\u0103 +JFreeChartDialog.resetButton.text=Reseteaz\u0103 dimensiunea diagramei +JFreeChartDialog.zoomInButton.text=M\u0103re\u0219te diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_ru.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_ru.properties index dc7477cd2d..749d74c18b 100644 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_ru.properties +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_ru.properties @@ -1,47 +1,22 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:15+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - OpenIDE-Module-Long-Description=\u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b Swing, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0435 \u0434\u043b\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 - HTMLTextArea_CutString=\u0412\u044b\u0440\u0435\u0437\u0430\u0442\u044c - HTMLTextArea_CopyString=\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c - HTMLTextArea_PasteString=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c - HTMLTextArea_DeleteString=\u0423\u0434\u0430\u043b\u0438\u0442\u044c - HTMLTextArea_SelectAllString=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0432\u0441\u0451 - OpenIDE-Module-Short-Description=Sharable Swing components - +SwapListPanel.leftButton.text= +SwapListPanel.rightButton.text= JRangeSliderPanel.lowerBoundTextField.text=NaN - JRangeSliderPanel.upperBoundTextField.text=NaN - SimpleHTMLReport.printButton.text=\u041f\u0435\u0447\u0430\u0442\u044c - SimpleHTMLReport.copyButton.text=\u041a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c - SimpleHTMLReport.saveButton.text=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c - SimpleHTMLReport.closeButton.text=\u0417\u0430\u043a\u0440\u044b\u0442\u044c - SimpleHTMLReport.title=HTML-\u043e\u0442\u0447\u0451\u0442 - SimpleHTMLReport.status.saveSuccess=\u041e\u0442\u0447\u0451\u0442 \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d \u0432 \u043f\u0430\u043f\u043a\u0443 {0} - -!SimpleHTMLReport.status.saveError= - +# SimpleHTMLReport.status.saveError = Could not save report. {0} already exists and is not a directory JFreeChartDialog.zoomOutButton.text=\u041e\u0442\u0434\u0430\u043b\u0438\u0442\u044c - JFreeChartDialog.closeButton.text=\u0417\u0430\u043a\u0440\u044b\u0442\u044c - JFreeChartDialog.resetButton.text=\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 - JFreeChartDialog.zoomInButton.text=\u041f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_th.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_tr.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_tr.properties new file mode 100644 index 0000000000..9038e8d966 --- /dev/null +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_tr.properties @@ -0,0 +1,22 @@ +OpenIDE-Module-Long-Description=Sharable Swing components that can be used for different purposes. +HTMLTextArea_CutString=Cut +HTMLTextArea_CopyString=Copy +HTMLTextArea_PasteString=Paste +HTMLTextArea_DeleteString=Sil +HTMLTextArea_SelectAllString=Select All +OpenIDE-Module-Short-Description=Sharable Swing components +SwapListPanel.leftButton.text= +SwapListPanel.rightButton.text= +JRangeSliderPanel.lowerBoundTextField.text=NaN +JRangeSliderPanel.upperBoundTextField.text=NaN +SimpleHTMLReport.printButton.text=Print +SimpleHTMLReport.copyButton.text=Copy +SimpleHTMLReport.saveButton.text=Kaydet +SimpleHTMLReport.closeButton.text=Kapat +SimpleHTMLReport.title=HTML Report +SimpleHTMLReport.status.saveSuccess=Report saved to {0} directory +SimpleHTMLReport.status.saveError=Could not save report. {0} already exists and is not a directory +JFreeChartDialog.zoomOutButton.text=Zoom out +JFreeChartDialog.closeButton.text=Kapat +JFreeChartDialog.resetButton.text=Reset chart size +JFreeChartDialog.zoomInButton.text=Zoom in diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_uk.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_uk.properties new file mode 100644 index 0000000000..d6057a9142 --- /dev/null +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_uk.properties @@ -0,0 +1,22 @@ +OpenIDE-Module-Long-Description=\u0421\u043F\u0456\u043B\u044C\u043D\u0456 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0438 Swing, \u044F\u043A\u0456 \u043C\u043E\u0436\u043D\u0430 \u0432\u0438\u043A\u043E\u0440\u0438\u0441\u0442\u043E\u0432\u0443\u0432\u0430\u0442\u0438 \u0434\u043B\u044F \u0440\u0456\u0437\u043D\u0438\u0445 \u0446\u0456\u043B\u0435\u0439. +HTMLTextArea_CutString=\u0412\u0438\u0440\u0456\u0437\u0430\u0442\u0438 +HTMLTextArea_CopyString=\u041A\u043E\u043F\u0456\u044E\u0432\u0430\u0442\u0438 +HTMLTextArea_PasteString=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u0438 +HTMLTextArea_DeleteString=\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 +HTMLTextArea_SelectAllString=\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044C \u0443\u0441\u0456 +OpenIDE-Module-Short-Description=\u0421\u043F\u0456\u043B\u044C\u043D\u0456 \u043A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442\u0438 Swing +SwapListPanel.leftButton.text=\u0406 +SwapListPanel.rightButton.text=\u0406 +JRangeSliderPanel.lowerBoundTextField.text=NaN +JRangeSliderPanel.upperBoundTextField.text=NaN +SimpleHTMLReport.printButton.text=\u0414\u0440\u0443\u043A +SimpleHTMLReport.copyButton.text=\u041A\u043E\u043F\u0456\u044E\u0432\u0430\u0442\u0438 +SimpleHTMLReport.saveButton.text=\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 +SimpleHTMLReport.closeButton.text=\u0417\u0430\u043A\u0440\u0438\u0442\u0438 +SimpleHTMLReport.title=\u0417\u0432\u0456\u0442 HTML +SimpleHTMLReport.status.saveSuccess=\u0417\u0432\u0456\u0442 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043D\u043E \u0432 \u043A\u0430\u0442\u0430\u043B\u043E\u0437\u0456 {0} +SimpleHTMLReport.status.saveError=\u041D\u0435 \u0432\u0434\u0430\u043B\u043E\u0441\u044F \u0437\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u0437\u0432\u0456\u0442. {0} \u0443\u0436\u0435 \u0456\u0441\u043D\u0443\u0454 \u0456 \u043D\u0435 \u0454 \u043A\u0430\u0442\u0430\u043B\u043E\u0433\u043E\u043C +JFreeChartDialog.zoomOutButton.text=\u0417\u043C\u0435\u043D\u0448\u0438\u0442\u0438 \u043C\u0430\u0441\u0448\u0442\u0430\u0431 +JFreeChartDialog.closeButton.text=\u0417\u0430\u043A\u0440\u0438\u0442\u0438 +JFreeChartDialog.resetButton.text=\u0421\u043A\u0438\u043D\u0443\u0442\u0438 \u0440\u043E\u0437\u043C\u0456\u0440 \u0434\u0456\u0430\u0433\u0440\u0430\u043C\u0438 +JFreeChartDialog.zoomInButton.text=\u0417\u0431\u0456\u043B\u044C\u0448\u0438\u0442\u0438 \u041C\u0430\u0441\u0448\u0442\u0430\u0431 diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_zh_CN.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_zh_CN.properties index e012eaa14c..5783dc9bd1 100644 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_zh_CN.properties +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_zh_CN.properties @@ -1,46 +1,22 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:15+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u53ef\u7528\u4e8e\u4e0d\u540c\u7684\u7528\u9014\u7684\u5171\u4eabSwing\u7ec4\u4ef6\u3002 - -HTMLTextArea_CutString=\u526a\u5207 - -HTMLTextArea_CopyString=\u590d\u5236 - -HTMLTextArea_PasteString=\u7c98\u8d34 - -HTMLTextArea_DeleteString=\u5220\u9664 - -HTMLTextArea_SelectAllString=\u5168\u9009 - -OpenIDE-Module-Short-Description=\u53ef\u5171\u4eabSwing\u7ec4\u4ef6 - -JRangeSliderPanel.lowerBoundTextField.text=NaN - -JRangeSliderPanel.upperBoundTextField.text=NaN - -SimpleHTMLReport.printButton.text=\u6253\u5370 - -SimpleHTMLReport.copyButton.text=\u590d\u5236 - -SimpleHTMLReport.saveButton.text=\u4fdd\u5b58 - -SimpleHTMLReport.closeButton.text=\u5173\u95ed - -SimpleHTMLReport.title=HTML\u62a5\u544a - -SimpleHTMLReport.status.saveSuccess=\u62a5\u544a\u4fdd\u5b58\u81f3{0}\u76ee\u5f55 - -!SimpleHTMLReport.status.saveError= - -JFreeChartDialog.zoomOutButton.text=\u7f29\u5c0f - -JFreeChartDialog.closeButton.text=\u5173\u95ed - -JFreeChartDialog.resetButton.text=\u91cd\u8bbe\u56fe\u8868\u5927\u5c0f - -JFreeChartDialog.zoomInButton.text=\u653e\u5927 +OpenIDE-Module-Long-Description=\u53ef\u7528\u4e8e\u4e0d\u540c\u7684\u7528\u9014\u7684\u5171\u4eabSwing\u7ec4\u4ef6\u3002 +HTMLTextArea_CutString=\u526a\u5207 +HTMLTextArea_CopyString=\u590d\u5236 +HTMLTextArea_PasteString=\u7c98\u8d34 +HTMLTextArea_DeleteString=\u5220\u9664 +HTMLTextArea_SelectAllString=\u5168\u9009 +OpenIDE-Module-Short-Description=\u53ef\u5171\u4eabSwing\u7ec4\u4ef6 +SwapListPanel.leftButton.text= +SwapListPanel.rightButton.text= +JRangeSliderPanel.lowerBoundTextField.text=NaN +JRangeSliderPanel.upperBoundTextField.text=NaN +SimpleHTMLReport.printButton.text=\u6253\u5370 +SimpleHTMLReport.copyButton.text=\u590d\u5236 +SimpleHTMLReport.saveButton.text=\u4fdd\u5b58 +SimpleHTMLReport.closeButton.text=\u5173\u95ed +SimpleHTMLReport.title=HTML\u62a5\u544a +SimpleHTMLReport.status.saveSuccess = \u62a5\u544a\u4fdd\u5b58\u81f3{0}\u76ee\u5f55 +SimpleHTMLReport.status.saveError = \u65e0\u6cd5\u4fdd\u5b58\u62a5\u544a\u3002 {0}\u5df2\u7ecf\u5b58\u5728\u5e76\u4e14\u4e0d\u662f\u76ee\u5f55 +JFreeChartDialog.zoomOutButton.text=\u7f29\u5c0f +JFreeChartDialog.closeButton.text=\u5173\u95ed +JFreeChartDialog.resetButton.text=\u91cd\u8bbe\u56fe\u8868\u5927\u5c0f +JFreeChartDialog.zoomInButton.text=\u653e\u5927 diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_zh_TW.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_zh_TW.properties new file mode 100644 index 0000000000..9e7e092809 --- /dev/null +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/Bundle_zh_TW.properties @@ -0,0 +1,22 @@ +OpenIDE-Module-Long-Description=Sharable Swing components that can be used for different purposes. +HTMLTextArea_CutString=Cut +HTMLTextArea_CopyString=Copy +HTMLTextArea_PasteString=Paste +HTMLTextArea_DeleteString=\u522a\u9664 +HTMLTextArea_SelectAllString=Select All +OpenIDE-Module-Short-Description=Sharable Swing components +SwapListPanel.leftButton.text= +SwapListPanel.rightButton.text= +JRangeSliderPanel.lowerBoundTextField.text=NaN +JRangeSliderPanel.upperBoundTextField.text=NaN +SimpleHTMLReport.printButton.text=Print +SimpleHTMLReport.copyButton.text=Copy +SimpleHTMLReport.saveButton.text=\u5132\u5b58 +SimpleHTMLReport.closeButton.text=Close +SimpleHTMLReport.title=HTML Report +SimpleHTMLReport.status.saveSuccess=Report saved to {0} directory +SimpleHTMLReport.status.saveError=Could not save report. {0} already exists and is not a directory +JFreeChartDialog.zoomOutButton.text=Zoom out +JFreeChartDialog.closeButton.text=Close +JFreeChartDialog.resetButton.text=Reset chart size +JFreeChartDialog.zoomInButton.text=Zoom in diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/cs.po b/modules/UIComponents/src/main/resources/org/gephi/ui/components/cs.po deleted file mode 100644 index 408f374d76..0000000000 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/cs.po +++ /dev/null @@ -1,79 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2011-2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-17 06:43+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "SdΓ­litelnΓ© součÑsti Swing, kterΓ© mohou bΓ½t pouΕΎity pro rΕ―znΓ© účely." - -msgid "HTMLTextArea_CutString" -msgstr "Vyjmout" - -msgid "HTMLTextArea_CopyString" -msgstr "KopΓ­rovat" - -msgid "HTMLTextArea_PasteString" -msgstr "VloΕΎit" - -msgid "HTMLTextArea_DeleteString" -msgstr "Smazat" - -msgid "HTMLTextArea_SelectAllString" -msgstr "Vybrat vΕ‘e" - -msgid "OpenIDE-Module-Short-Description" -msgstr "SdΓ­litelnΓ© součÑsti Swing" - -msgid "JRangeSliderPanel.lowerBoundTextField.text" -msgstr "NaN" - -msgid "JRangeSliderPanel.upperBoundTextField.text" -msgstr "NaN" - -msgid "SimpleHTMLReport.printButton.text" -msgstr "Tisk" - -msgid "SimpleHTMLReport.copyButton.text" -msgstr "KopΓ­rovat" - -msgid "SimpleHTMLReport.saveButton.text" -msgstr "UloΕΎit" - -msgid "SimpleHTMLReport.closeButton.text" -msgstr "ZavΕ™Γ­t" - -msgid "SimpleHTMLReport.title" -msgstr "HTML ZΓ‘znam" - -msgid "SimpleHTMLReport.status.saveSuccess" -msgstr "ZΓ‘znam uloΕΎen do adresΓ‘Ε™e {0}" - -msgid "SimpleHTMLReport.status.saveError" -msgstr "Nelze uloΕΎit hlΓ‘Ε‘enΓ­. {0} jiΕΎ existuje a nenΓ­ adresΓ‘Ε™" - -msgid "JFreeChartDialog.zoomOutButton.text" -msgstr "OddΓ‘lit" - -msgid "JFreeChartDialog.closeButton.text" -msgstr "ZavΕ™Γ­t" - -msgid "JFreeChartDialog.resetButton.text" -msgstr "Resetovat velikost grafu" - -msgid "JFreeChartDialog.zoomInButton.text" -msgstr "PΕ™iblΓ­ΕΎit" diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/es.po b/modules/UIComponents/src/main/resources/org/gephi/ui/components/es.po deleted file mode 100644 index 0c126e1a1d..0000000000 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/es.po +++ /dev/null @@ -1,80 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:21+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Componentes Swing reutilizables que pueden ser utilizados con diferentes propΓ³sitos" - -msgid "HTMLTextArea_CutString" -msgstr "Cortar" - -msgid "HTMLTextArea_CopyString" -msgstr "Copiar" - -msgid "HTMLTextArea_PasteString" -msgstr "Pegar" - -msgid "HTMLTextArea_DeleteString" -msgstr "Eliminar" - -msgid "HTMLTextArea_SelectAllString" -msgstr "Seleccionar todo" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API/SPI para generadores" - -msgid "JRangeSliderPanel.lowerBoundTextField.text" -msgstr "NaN" - -msgid "JRangeSliderPanel.upperBoundTextField.text" -msgstr "NaN" - -msgid "SimpleHTMLReport.printButton.text" -msgstr "Imprimir" - -msgid "SimpleHTMLReport.copyButton.text" -msgstr "Copiar" - -msgid "SimpleHTMLReport.saveButton.text" -msgstr "Guardar" - -msgid "SimpleHTMLReport.closeButton.text" -msgstr "Cerrar" - -msgid "SimpleHTMLReport.title" -msgstr "Informe HTML" - -msgid "SimpleHTMLReport.status.saveSuccess" -msgstr "Informe guardado en el directorio {0}" - -msgid "SimpleHTMLReport.status.saveError" -msgstr "No se pudo guardar el informe. {0} ya existe y no es un directorio" - -msgid "JFreeChartDialog.zoomOutButton.text" -msgstr "Alejar zoom" - -msgid "JFreeChartDialog.closeButton.text" -msgstr "Cerrar" - -msgid "JFreeChartDialog.resetButton.text" -msgstr "Reestablecer" - -msgid "JFreeChartDialog.zoomInButton.text" -msgstr "Acercar zoom" diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/fr.po b/modules/UIComponents/src/main/resources/org/gephi/ui/components/fr.po deleted file mode 100644 index bbe6a3bc6b..0000000000 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/fr.po +++ /dev/null @@ -1,79 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:15+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Composants Swing librement utilisables" - -msgid "HTMLTextArea_CutString" -msgstr "Couper" - -msgid "HTMLTextArea_CopyString" -msgstr "Copier" - -msgid "HTMLTextArea_PasteString" -msgstr "Coller" - -msgid "HTMLTextArea_DeleteString" -msgstr "Supprimer" - -msgid "HTMLTextArea_SelectAllString" -msgstr "Tout sΓ©lectionner" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Composants Swing" - -msgid "JRangeSliderPanel.lowerBoundTextField.text" -msgstr "NaN" - -msgid "JRangeSliderPanel.upperBoundTextField.text" -msgstr "NaN" - -msgid "SimpleHTMLReport.printButton.text" -msgstr "Imprimer" - -msgid "SimpleHTMLReport.copyButton.text" -msgstr "Copier" - -msgid "SimpleHTMLReport.saveButton.text" -msgstr "Enregistrer" - -msgid "SimpleHTMLReport.closeButton.text" -msgstr "Fermer" - -msgid "SimpleHTMLReport.title" -msgstr "Rapport HTML" - -msgid "SimpleHTMLReport.status.saveSuccess" -msgstr "Rapport enregistrΓ© dans le dossier {0}." - -msgid "SimpleHTMLReport.status.saveError" -msgstr "" - -msgid "JFreeChartDialog.zoomOutButton.text" -msgstr "DΓ©zoomer" - -msgid "JFreeChartDialog.closeButton.text" -msgstr "Fermer" - -msgid "JFreeChartDialog.resetButton.text" -msgstr "RΓ©initialiser" - -msgid "JFreeChartDialog.zoomInButton.text" -msgstr "Zoomer" diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/ja.po b/modules/UIComponents/src/main/resources/org/gephi/ui/components/ja.po deleted file mode 100644 index 6e031ab058..0000000000 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/ja.po +++ /dev/null @@ -1,79 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:15+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "η•°γͺγ‚‹η›ηš„γ«δ½Ώη”¨γ§γγ‚‹ε…±ζœ‰ε―能γͺSwingγ‚³γƒ³γƒγƒΌγƒγƒ³γƒˆγ€‚" - -msgid "HTMLTextArea_CutString" -msgstr "γ‚«γƒƒγƒˆ" - -msgid "HTMLTextArea_CopyString" -msgstr "コピー" - -msgid "HTMLTextArea_PasteString" -msgstr "γƒšγƒΌγ‚Ήγƒˆ" - -msgid "HTMLTextArea_DeleteString" -msgstr "ε‰Šι™€" - -msgid "HTMLTextArea_SelectAllString" -msgstr "γ™γΉγ¦γ‚’ιΈζŠž" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ε…±ζœ‰ε―θƒ½γͺSwingγ‚³γƒ³γƒγƒΌγƒγƒ³γƒˆ" - -msgid "JRangeSliderPanel.lowerBoundTextField.text" -msgstr "NaN" - -msgid "JRangeSliderPanel.upperBoundTextField.text" -msgstr "NaN" - -msgid "SimpleHTMLReport.printButton.text" -msgstr "印刷" - -msgid "SimpleHTMLReport.copyButton.text" -msgstr "コピー" - -msgid "SimpleHTMLReport.saveButton.text" -msgstr "保存" - -msgid "SimpleHTMLReport.closeButton.text" -msgstr "ι–‰γ˜γ‚‹" - -msgid "SimpleHTMLReport.title" -msgstr "HTMLε ±ε‘Š" - -msgid "SimpleHTMLReport.status.saveSuccess" -msgstr "ε ±ε‘Šγ―{0}γƒ‡γ‚£γƒ¬γ‚―γƒˆγƒͺに保存" - -msgid "SimpleHTMLReport.status.saveError" -msgstr "" - -msgid "JFreeChartDialog.zoomOutButton.text" -msgstr "ηΈε°" - -msgid "JFreeChartDialog.closeButton.text" -msgstr "ι–‰γ˜γ‚‹" - -msgid "JFreeChartDialog.resetButton.text" -msgstr "γƒγƒ£γƒΌγƒˆγ‚΅γ‚€γ‚Ίγγƒͺγ‚»γƒƒγƒˆ" - -msgid "JFreeChartDialog.zoomInButton.text" -msgstr "ζ‹‘ε€§" diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/org-gephi-ui-components.pot b/modules/UIComponents/src/main/resources/org/gephi/ui/components/org-gephi-ui-components.pot deleted file mode 100644 index f58e27fe25..0000000000 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/org-gephi-ui-components.pot +++ /dev/null @@ -1,76 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Sharable Swing components that can be used for different purposes." - -msgid "HTMLTextArea_CutString" -msgstr "Cut" - -msgid "HTMLTextArea_CopyString" -msgstr "Copy" - -msgid "HTMLTextArea_PasteString" -msgstr "Paste" - -msgid "HTMLTextArea_DeleteString" -msgstr "Delete" - -msgid "HTMLTextArea_SelectAllString" -msgstr "Select All" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Sharable Swing components" - -msgid "JRangeSliderPanel.lowerBoundTextField.text" -msgstr "NaN" - -msgid "JRangeSliderPanel.upperBoundTextField.text" -msgstr "NaN" - -msgid "SimpleHTMLReport.printButton.text" -msgstr "Print" - -msgid "SimpleHTMLReport.copyButton.text" -msgstr "Copy" - -msgid "SimpleHTMLReport.saveButton.text" -msgstr "Save" - -msgid "SimpleHTMLReport.closeButton.text" -msgstr "Close" - -msgid "SimpleHTMLReport.title" -msgstr "HTML Report" - -msgid "SimpleHTMLReport.status.saveSuccess" -msgstr "Report saved to {0} directory" - -msgid "SimpleHTMLReport.status.saveError" -msgstr "Could not save report. {0} already exists and is not a directory" - -msgid "JFreeChartDialog.zoomOutButton.text" -msgstr "Zoom out" - -msgid "JFreeChartDialog.closeButton.text" -msgstr "Close" - -msgid "JFreeChartDialog.resetButton.text" -msgstr "Reset chart size" - -msgid "JFreeChartDialog.zoomInButton.text" -msgstr "Zoom in" diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/pt_BR.po b/modules/UIComponents/src/main/resources/org/gephi/ui/components/pt_BR.po deleted file mode 100644 index c461c4c54f..0000000000 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/pt_BR.po +++ /dev/null @@ -1,80 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -# CΓ©lio Faria Jr. , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-18 11:13+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Componentes Swing reutilizΓ‘veis que podem ser utilizados com vΓ‘rios propΓ³sitos" - -msgid "HTMLTextArea_CutString" -msgstr "Cortar" - -msgid "HTMLTextArea_CopyString" -msgstr "Copiar" - -msgid "HTMLTextArea_PasteString" -msgstr "Colar" - -msgid "HTMLTextArea_DeleteString" -msgstr "Excluir" - -msgid "HTMLTextArea_SelectAllString" -msgstr "Selecionar todos" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Componentes Swing reutilizΓ‘veis" - -msgid "JRangeSliderPanel.lowerBoundTextField.text" -msgstr "NaN" - -msgid "JRangeSliderPanel.upperBoundTextField.text" -msgstr "NaN" - -msgid "SimpleHTMLReport.printButton.text" -msgstr "Imprimir" - -msgid "SimpleHTMLReport.copyButton.text" -msgstr "Copiar" - -msgid "SimpleHTMLReport.saveButton.text" -msgstr "Salvar" - -msgid "SimpleHTMLReport.closeButton.text" -msgstr "Fechar" - -msgid "SimpleHTMLReport.title" -msgstr "RelatΓ³rio HTML" - -msgid "SimpleHTMLReport.status.saveSuccess" -msgstr "RelatΓ³rio salvo para o diretΓ³rio {0} " - -msgid "SimpleHTMLReport.status.saveError" -msgstr "NΓ£o foi possΓ­vel salvar o relatΓ³rio. {0} jΓ‘ existe e nΓ£o Γ© um diretΓ³rio." - -msgid "JFreeChartDialog.zoomOutButton.text" -msgstr "Diminuir zoom" - -msgid "JFreeChartDialog.closeButton.text" -msgstr "Fechar" - -msgid "JFreeChartDialog.resetButton.text" -msgstr "Restaurar tamanho do grΓ‘fico" - -msgid "JFreeChartDialog.zoomInButton.text" -msgstr "Aumentar zoom" diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/arrow.png b/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/arrow.png deleted file mode 100644 index f0be984332..0000000000 Binary files a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/arrow.png and /dev/null differ diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/collapsedSnippet.png b/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/collapsedSnippet.png deleted file mode 100644 index 7e9a396a1c..0000000000 Binary files a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/collapsedSnippet.png and /dev/null differ diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/copy.gif b/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/copy.gif deleted file mode 100644 index af2a6ac295..0000000000 Binary files a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/copy.gif and /dev/null differ diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/expandedSnippet.png b/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/expandedSnippet.png deleted file mode 100644 index c08438565e..0000000000 Binary files a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/expandedSnippet.png and /dev/null differ diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/leftArrow.png b/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/leftArrow.png deleted file mode 100644 index 1ed7c976e5..0000000000 Binary files a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/leftArrow.png and /dev/null differ diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/light-bulb-off.png b/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/light-bulb-off.png deleted file mode 100644 index 33a82c55fe..0000000000 Binary files a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/light-bulb-off.png and /dev/null differ diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/light-bulb.png b/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/light-bulb.png deleted file mode 100644 index 845e11070a..0000000000 Binary files a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/light-bulb.png and /dev/null differ diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/magnifier--minus.png b/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/magnifier--minus.png deleted file mode 100644 index 5e0b3883cc..0000000000 Binary files a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/magnifier--minus.png and /dev/null differ diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/magnifier--plus.png b/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/magnifier--plus.png deleted file mode 100644 index 87a9cd2a60..0000000000 Binary files a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/magnifier--plus.png and /dev/null differ diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/magnifier-history.png b/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/magnifier-history.png deleted file mode 100644 index 2cfa1de425..0000000000 Binary files a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/magnifier-history.png and /dev/null differ diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/print.png b/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/print.png deleted file mode 100644 index 57e5fc3ad6..0000000000 Binary files a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/print.png and /dev/null differ diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/rightArrow.png b/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/rightArrow.png deleted file mode 100644 index b00f0c889d..0000000000 Binary files a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/rightArrow.png and /dev/null differ diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/save.png b/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/save.png deleted file mode 100644 index 8abae71f18..0000000000 Binary files a/modules/UIComponents/src/main/resources/org/gephi/ui/components/resources/save.png and /dev/null differ diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/ru.po b/modules/UIComponents/src/main/resources/org/gephi/ui/components/ru.po deleted file mode 100644 index 4ff0856310..0000000000 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/ru.po +++ /dev/null @@ -1,79 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:15+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Ρ‹ Swing, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ для Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… Π·Π°Π΄Π°Ρ‡" - -msgid "HTMLTextArea_CutString" -msgstr "Π’Ρ‹Ρ€Π΅Π·Π°Ρ‚ΡŒ" - -msgid "HTMLTextArea_CopyString" -msgstr "Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ" - -msgid "HTMLTextArea_PasteString" -msgstr "Π’ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ" - -msgid "HTMLTextArea_DeleteString" -msgstr "Π£Π΄Π°Π»ΠΈΡ‚ΡŒ" - -msgid "HTMLTextArea_SelectAllString" -msgstr "Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ всё" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Sharable Swing components" - -msgid "JRangeSliderPanel.lowerBoundTextField.text" -msgstr "NaN" - -msgid "JRangeSliderPanel.upperBoundTextField.text" -msgstr "NaN" - -msgid "SimpleHTMLReport.printButton.text" -msgstr "ΠŸΠ΅Ρ‡Π°Ρ‚ΡŒ" - -msgid "SimpleHTMLReport.copyButton.text" -msgstr "ΠšΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ" - -msgid "SimpleHTMLReport.saveButton.text" -msgstr "Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ" - -msgid "SimpleHTMLReport.closeButton.text" -msgstr "Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ" - -msgid "SimpleHTMLReport.title" -msgstr "HTML-ΠΎΡ‚Ρ‡Ρ‘Ρ‚" - -msgid "SimpleHTMLReport.status.saveSuccess" -msgstr "ΠžΡ‚Ρ‡Ρ‘Ρ‚ сохранён Π² ΠΏΠ°ΠΏΠΊΡƒ {0}" - -msgid "SimpleHTMLReport.status.saveError" -msgstr "" - -msgid "JFreeChartDialog.zoomOutButton.text" -msgstr "ΠžΡ‚Π΄Π°Π»ΠΈΡ‚ΡŒ" - -msgid "JFreeChartDialog.closeButton.text" -msgstr "Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ" - -msgid "JFreeChartDialog.resetButton.text" -msgstr "Π‘Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€" - -msgid "JFreeChartDialog.zoomInButton.text" -msgstr "ΠŸΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚ΡŒ" diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_ar.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_ca.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_ca.properties new file mode 100644 index 0000000000..2bd7032e6b --- /dev/null +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_ca.properties @@ -0,0 +1,5 @@ +splineEditor_templates=Plantilles +splineEditor_controls=Controls +splineEditor_close=Tanca +splineEditor_title=Editor del spline +splineEditor_header=Arrossega els punts de control a la pantalla per canviar la forma del spline diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_cs.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_cs.properties index 2fede738a1..99e7f71988 100644 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_cs.properties +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_cs.properties @@ -1,21 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-07 22\:04+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=Grafick\u00fd editor k\u0159ivky - -OpenIDE-Module-Short-Description=Grafick\u00fd editor k\u0159ivky - -splineEditor_templates=\u0160ablony - -splineEditor_controls=Ovl\u00e1d\u00e1n\u00ed - -splineEditor_close=Zav\u0159\u00edt - -splineEditor_title=Editor k\u0159ivky - -splineEditor_header=T\u00e1hn\u011bte kontroln\u00ed body v zobrazen\u00ed pro zm\u011bnu tvaru k\u0159ivky +splineEditor_templates = \u0160ablony +splineEditor_controls = Ovlαdαnν +splineEditor_close = Zav\u0159νt +splineEditor_title = Editor k\u0159ivky +splineEditor_header = Tαhn\u011bte kontrolnν body v zobrazenν pro zm\u011bnu tvaru k\u0159ivky diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_de.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_de.properties new file mode 100644 index 0000000000..86fd74c7bb --- /dev/null +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_de.properties @@ -0,0 +1,5 @@ +splineEditor_templates = Vorlagen +splineEditor_controls = Steuerelemente +splineEditor_close = Schlieίen +splineEditor_title = Spline Editor +splineEditor_header = Ziehen Sie Kontrollpunkte in den Arbeitsbereich um den Verlauf des Splines zu δndern diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_es.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_es.properties index 413e5f7c6f..5792d8aac0 100644 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_es.properties +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_es.properties @@ -1,22 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-30 01\:38+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Editor gr\u00e1fico de Spline - -OpenIDE-Module-Short-Description=Editor gr\u00e1fico de Spline - -splineEditor_templates=Plantillas - -splineEditor_controls=Controles - -splineEditor_close=Cerrar - -splineEditor_title=Editor de Spline - -splineEditor_header=Arrastra los puntos de control en el gr\u00e1fico para cambiar la forma del Spline +splineEditor_templates = Plantillas +splineEditor_controls = Controles +splineEditor_close = Cerrar +splineEditor_title = Editor de Spline +splineEditor_header = Arrastra los puntos de control en el grαfico para cambiar la forma del Spline diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_fr.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_fr.properties index 6aa98eff0b..bf5764fc91 100644 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_fr.properties +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_fr.properties @@ -1,21 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:58+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Editeur graphique de spline - -OpenIDE-Module-Short-Description=Editeur graphique de spline - -splineEditor_templates=Gabarits - -splineEditor_controls=Contr\u00f4les - -splineEditor_close=Fermer - -splineEditor_title=Editeur de spline - -splineEditor_header=D\u00e9placez les points de contr\u00f4le dans l'affichage pour changer la forme. +splineEditor_templates = Gabarits +splineEditor_controls = Contrτles +splineEditor_close = Fermer +splineEditor_title = Editeur de spline +splineEditor_header = Dιplacez les points de contrτle dans l'affichage pour changer la forme. diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_he.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_he.properties new file mode 100644 index 0000000000..1e56ab5a37 --- /dev/null +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_he.properties @@ -0,0 +1,5 @@ +splineEditor_templates=Templates +splineEditor_controls=Controls +splineEditor_close=Close +splineEditor_title=Spline Editor +splineEditor_header=Drag control points in the display to change the shape of the spline diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_hu.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_hu.properties new file mode 100644 index 0000000000..49f7a92eec --- /dev/null +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_hu.properties @@ -0,0 +1,7 @@ + + +splineEditor_controls=Vez\u00E9rl\u0151k +splineEditor_header=A spline alakj\u00E1nak megv\u00E1ltoztat\u00E1s\u00E1hoz h\u00FAzza a vez\u00E9rl\u0151pontokat a kijelz\u0151n +splineEditor_title=Spline szerkeszt\u0151 +splineEditor_close=Bez\u00E1r +splineEditor_templates=Sablonok diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_it.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_it.properties new file mode 100644 index 0000000000..1e56ab5a37 --- /dev/null +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_it.properties @@ -0,0 +1,5 @@ +splineEditor_templates=Templates +splineEditor_controls=Controls +splineEditor_close=Close +splineEditor_title=Spline Editor +splineEditor_header=Drag control points in the display to change the shape of the spline diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_ja.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_ja.properties index a990fa258e..108f16de10 100644 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_ja.properties +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_ja.properties @@ -1,21 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-02 10\:58+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u30b0\u30e9\u30d5\u30a3\u30ab\u30eb\u30b9\u30d7\u30e9\u30a4\u30f3\u30a8\u30c7\u30a3\u30bf - -OpenIDE-Module-Short-Description=\u30b0\u30e9\u30d5\u30a3\u30ab\u30eb\u30b9\u30d7\u30e9\u30a4\u30f3\u30a8\u30c7\u30a3\u30bf - -splineEditor_templates=\u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 - -splineEditor_controls=\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb - -splineEditor_close=\u9589\u3058\u308b - -splineEditor_title=\u30b9\u30d7\u30e9\u30a4\u30f3\u30a8\u30c7\u30a3\u30bf - -splineEditor_header=\u30b9\u30d7\u30e9\u30a4\u30f3\u306e\u5f62\u72b6\u3092\u5909\u66f4\u3059\u308b\u306b\u306f\u3001\u8868\u793a\u306e\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u30dd\u30a4\u30f3\u30c8\u3092\u30c9\u30e9\u30c3\u30b0 +splineEditor_templates = \u30c6\u30f3\u30d7\u30ec\u30fc\u30c8 +splineEditor_controls = \u30b3\u30f3\u30c8\u30ed\u30fc\u30eb +splineEditor_close = \u9589\u3058\u308b +splineEditor_title = \u30b9\u30d7\u30e9\u30a4\u30f3\u30a8\u30c7\u30a3\u30bf +splineEditor_header = \u30b9\u30d7\u30e9\u30a4\u30f3\u306e\u5f62\u72b6\u3092\u5909\u66f4\u3059\u308b\u306b\u306f\u3001\u8868\u793a\u306e\u30b3\u30f3\u30c8\u30ed\u30fc\u30eb\u30dd\u30a4\u30f3\u30c8\u3092\u30c9\u30e9\u30c3\u30b0 diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_ko.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_ko.properties new file mode 100644 index 0000000000..5f80c9954a --- /dev/null +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_ko.properties @@ -0,0 +1,7 @@ + + +splineEditor_templates=\uD15C\uD50C\uB9BF +splineEditor_controls=\uCEE8\uD2B8\uB864 +splineEditor_close=\uB2EB\uAE30 +splineEditor_title=\uACE1\uC120 \uD3B8\uC9D1\uAE30 +splineEditor_header=\uACE1\uC120\uC758 \uBAA8\uC591\uC744 \uBC14\uAFB8\uB824\uBA74 \uD45C\uC2DC\uB41C \uC81C\uC5B4\uC810\uC744 \uB4DC\uB798\uADF8 \uD558\uC138\uC694 diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_nl.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_nl.properties new file mode 100644 index 0000000000..db91e5d950 --- /dev/null +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_nl.properties @@ -0,0 +1,5 @@ +splineEditor_templates=Templates +splineEditor_controls=Controls +splineEditor_close=Sluiten +splineEditor_title=Spline Editor +splineEditor_header=Drag control points in the display to change the shape of the spline diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_pt_BR.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_pt_BR.properties index 8319775322..0e531bf7d8 100644 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_pt_BR.properties +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_pt_BR.properties @@ -1,21 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 18\:25+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Editor gr\u00e1fico de Spline - -OpenIDE-Module-Short-Description=Editor gr\u00e1fico de Spline - -splineEditor_templates=Modelos - -splineEditor_controls=Controles - -splineEditor_close=Fechar - -splineEditor_title=Editor de Spline - -splineEditor_header=Arraste os pontos de controle na tela para mudar a forma da spline +splineEditor_templates = Modelos +splineEditor_controls = Controles +splineEditor_close = Fechar +splineEditor_title = Editor de Spline +splineEditor_header = Arraste os pontos de controle na tela para mudar a forma da spline diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_ro.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_ro.properties new file mode 100644 index 0000000000..0c7d8a6143 --- /dev/null +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_ro.properties @@ -0,0 +1,7 @@ + + +splineEditor_close=\u00CEnchide +splineEditor_title=Editor Spline +splineEditor_templates=\u0218abloane +splineEditor_controls=Controale +splineEditor_header=Trage punctele de control din afi\u0219aj pentru a modifica forma spline-ului diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_ru.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_ru.properties index 25294e9432..dd5ec5029b 100644 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_ru.properties +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_ru.properties @@ -1,21 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-11-25 06\:59+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=\u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0441\u043f\u043b\u0430\u0439\u043d\u043e\u0432 - -OpenIDE-Module-Short-Description=\u0413\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0441\u043f\u043b\u0430\u0439\u043d\u043e\u0432 - -splineEditor_templates=\u0428\u0430\u0431\u043b\u043e\u043d\u044b - -splineEditor_controls=\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 - -splineEditor_close=\u0417\u0430\u043a\u0440\u044b\u0442\u044c - -splineEditor_title=\u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0441\u043f\u043b\u0430\u0439\u043d\u043e\u0432 - -splineEditor_header=\u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u0443\u044e \u0432\u0430\u043c \u0444\u043e\u0440\u043c\u0443 \u0441\u043f\u043b\u0430\u0439\u043d\u0430 +splineEditor_templates = \u0428\u0430\u0431\u043b\u043e\u043d\u044b +splineEditor_controls = \u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 +splineEditor_close = \u0417\u0430\u043a\u0440\u044b\u0442\u044c +splineEditor_title = \u0420\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0441\u043f\u043b\u0430\u0439\u043d\u043e\u0432 +splineEditor_header = \u041f\u0435\u0440\u0435\u043c\u0435\u0441\u0442\u0438\u0442\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c\u043d\u044b\u0435 \u0442\u043e\u0447\u043a\u0438 \u043d\u0430 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u043d\u0443\u0436\u043d\u0443\u044e \u0432\u0430\u043c \u0444\u043e\u0440\u043c\u0443 \u0441\u043f\u043b\u0430\u0439\u043d\u0430 diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_th.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_tr.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_tr.properties new file mode 100644 index 0000000000..eab7cd1889 --- /dev/null +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_tr.properties @@ -0,0 +1,5 @@ +splineEditor_templates=\u015eablonlar +splineEditor_controls=Kontroller +splineEditor_close=Kapat +splineEditor_title=Spline Editor +splineEditor_header=Drag control points in the display to change the shape of the spline diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_uk.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_uk.properties new file mode 100644 index 0000000000..6ddaba5555 --- /dev/null +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_uk.properties @@ -0,0 +1,5 @@ +splineEditor_templates=\u0428\u0430\u0431\u043B\u043E\u043D\u0438 +splineEditor_controls=\u0415\u043B\u0435\u043C\u0435\u043D\u0442\u0438 \u043A\u0435\u0440\u0443\u0432\u0430\u043D\u043D\u044F +splineEditor_close=\u0417\u0430\u043A\u0440\u0438\u0442\u0438 +splineEditor_title=\u0420\u0435\u0434\u0430\u043A\u0442\u043E\u0440 \u0441\u043F\u043B\u0430\u0439\u043D\u0456\u0432 +splineEditor_header=\u041F\u0435\u0440\u0435\u0442\u044F\u0433\u043D\u0456\u0442\u044C \u043A\u043E\u043D\u0442\u0440\u043E\u043B\u044C\u043D\u0456 \u0442\u043E\u0447\u043A\u0438 \u043D\u0430 \u0434\u0438\u0441\u043F\u043B\u0435\u0457, \u0449\u043E\u0431 \u0437\u043C\u0456\u043D\u0438\u0442\u0438 \u0444\u043E\u0440\u043C\u0443 \u0441\u043F\u043B\u0430\u0439\u043D\u0430 diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_zh_CN.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_zh_CN.properties index 7ae3eb21b2..2bdeeadfe9 100644 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_zh_CN.properties +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_zh_CN.properties @@ -1,20 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:07+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u56fe\u5f62\u6837\u6761\u66f2\u7ebf\u7f16\u8f91\u5668 - -OpenIDE-Module-Short-Description=\u56fe\u5f62\u6837\u6761\u66f2\u7ebf\u7f16\u8f91\u5668 - -splineEditor_templates=\u6a21\u677f - -splineEditor_controls=\u63a7\u5236 - -splineEditor_close=\u5173\u95ed - -splineEditor_title=\u6837\u6761\u66f2\u7ebf\u7f16\u8f91\u5668 - -splineEditor_header=\u62d6\u52a8\u663e\u793a\u63a7\u5236\u70b9\u4ee5\u6539\u53d8\u6837\u6761\u66f2\u7ebf\u7684\u5f62\u72b6 +splineEditor_templates = \u6a21\u677f +splineEditor_controls = \u63a7\u5236 +splineEditor_close = \u5173\u95ed +splineEditor_title = \u6837\u6761\u66f2\u7ebf\u7f16\u8f91\u5668 +splineEditor_header = \u62d6\u52a8\u663e\u793a\u63a7\u5236\u70b9\u4ee5\u6539\u53d8\u6837\u6761\u66f2\u7ebf\u7684\u5f62\u72b6 diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_zh_TW.properties b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_zh_TW.properties new file mode 100644 index 0000000000..1e56ab5a37 --- /dev/null +++ b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/Bundle_zh_TW.properties @@ -0,0 +1,5 @@ +splineEditor_templates=Templates +splineEditor_controls=Controls +splineEditor_close=Close +splineEditor_title=Spline Editor +splineEditor_header=Drag control points in the display to change the shape of the spline diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/cs.po b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/cs.po deleted file mode 100644 index 66b95c3828..0000000000 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/cs.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-07 22:04+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "GrafickΓ½ editor kΕ™ivky" - -msgid "OpenIDE-Module-Short-Description" -msgstr "GrafickΓ½ editor kΕ™ivky" - -msgid "splineEditor_templates" -msgstr "Ε ablony" - -msgid "splineEditor_controls" -msgstr "OvlΓ‘dΓ‘nΓ­" - -msgid "splineEditor_close" -msgstr "ZavΕ™Γ­t" - -msgid "splineEditor_title" -msgstr "Editor kΕ™ivky" - -msgid "splineEditor_header" -msgstr "TΓ‘hnΔ›te kontrolnΓ­ body v zobrazenΓ­ pro zmΔ›nu tvaru kΕ™ivky" diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/es.po b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/es.po deleted file mode 100644 index bf7cb2610c..0000000000 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/es.po +++ /dev/null @@ -1,41 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-30 01:38+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Editor grΓ‘fico de Spline" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Editor grΓ‘fico de Spline" - -msgid "splineEditor_templates" -msgstr "Plantillas" - -msgid "splineEditor_controls" -msgstr "Controles" - -msgid "splineEditor_close" -msgstr "Cerrar" - -msgid "splineEditor_title" -msgstr "Editor de Spline" - -msgid "splineEditor_header" -msgstr "Arrastra los puntos de control en el grΓ‘fico para cambiar la forma del Spline" diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/fr.po b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/fr.po deleted file mode 100644 index e39aeca363..0000000000 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/fr.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:58+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Editeur graphique de spline" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Editeur graphique de spline" - -msgid "splineEditor_templates" -msgstr "Gabarits" - -msgid "splineEditor_controls" -msgstr "ContrΓ΄les" - -msgid "splineEditor_close" -msgstr "Fermer" - -msgid "splineEditor_title" -msgstr "Editeur de spline" - -msgid "splineEditor_header" -msgstr "DΓ©placez les points de contrΓ΄le dans l'affichage pour changer la forme." diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/images/simulator.png b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/images/simulator.png deleted file mode 100644 index e28d46dac6..0000000000 Binary files a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/images/simulator.png and /dev/null differ diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/ja.po b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/ja.po deleted file mode 100644 index fa02cf4cee..0000000000 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/ja.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-02 10:58+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "グラフィカルスプラむンエディタ" - -msgid "OpenIDE-Module-Short-Description" -msgstr "グラフィカルスプラむンエディタ" - -msgid "splineEditor_templates" -msgstr "γƒ†γƒ³γƒ—γƒ¬γƒΌγƒˆ" - -msgid "splineEditor_controls" -msgstr "γ‚³γƒ³γƒˆγƒ­γƒΌγƒ«" - -msgid "splineEditor_close" -msgstr "ι–‰γ˜γ‚‹" - -msgid "splineEditor_title" -msgstr "スプラむンエディタ" - -msgid "splineEditor_header" -msgstr "スプラむンγε½’ηŠΆγ‚’ε€‰ζ›΄γ™γ‚‹γ«γ―γ€θ‘¨η€Ίγγ‚³γƒ³γƒˆγƒ­γƒΌγƒ«γƒγ‚€γƒ³γƒˆγ‚’ドラッグ" diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/org-gephi-ui-components-SplineEditor.pot b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/org-gephi-ui-components-SplineEditor.pot deleted file mode 100644 index 5cc3ce3993..0000000000 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/org-gephi-ui-components-SplineEditor.pot +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Graphical Spline Editor" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Graphical Spline Editor" - -msgid "splineEditor_templates" -msgstr "Templates" - -msgid "splineEditor_controls" -msgstr "Controls" - -msgid "splineEditor_close" -msgstr "Close" - -msgid "splineEditor_title" -msgstr "Spline Editor" - -msgid "splineEditor_header" -msgstr "Drag control points in the display to change the shape of the spline" diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/pt_BR.po b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/pt_BR.po deleted file mode 100644 index d16ab15268..0000000000 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/pt_BR.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 18:25+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Editor grΓ‘fico de Spline" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Editor grΓ‘fico de Spline" - -msgid "splineEditor_templates" -msgstr "Modelos" - -msgid "splineEditor_controls" -msgstr "Controles" - -msgid "splineEditor_close" -msgstr "Fechar" - -msgid "splineEditor_title" -msgstr "Editor de Spline" - -msgid "splineEditor_header" -msgstr "Arraste os pontos de controle na tela para mudar a forma da spline" diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/ru.po b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/ru.po deleted file mode 100644 index c6a5d7a2fa..0000000000 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/ru.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-11-25 06:59+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ГрафичСский Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ сплайнов" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ГрафичСский Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ сплайнов" - -msgid "splineEditor_templates" -msgstr "Π¨Π°Π±Π»ΠΎΠ½Ρ‹" - -msgid "splineEditor_controls" -msgstr "Π£ΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅" - -msgid "splineEditor_close" -msgstr "Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ" - -msgid "splineEditor_title" -msgstr "Π Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ сплайнов" - -msgid "splineEditor_header" -msgstr "ΠŸΠ΅Ρ€Π΅ΠΌΠ΅ΡΡ‚ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ Π½Π° ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Π½ΡƒΠΆΠ½ΡƒΡŽ Π²Π°ΠΌ Ρ„ΠΎΡ€ΠΌΡƒ сплайна" diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/zh_CN.po b/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/zh_CN.po deleted file mode 100644 index 88a1c050a6..0000000000 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/splineeditor/zh_CN.po +++ /dev/null @@ -1,39 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:07+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "图归样村曲线编辑器" - -msgid "OpenIDE-Module-Short-Description" -msgstr "图归样村曲线编辑器" - -msgid "splineEditor_templates" -msgstr "樑板" - -msgid "splineEditor_controls" -msgstr "控刢" - -msgid "splineEditor_close" -msgstr "ε…³ι—­" - -msgid "splineEditor_title" -msgstr "样村曲线编辑器" - -msgid "splineEditor_header" -msgstr "ζ‹–εŠ¨ζ˜Ύη€ΊζŽ§εˆΆη‚Ήδ»₯ζ”Ήε˜ζ ·ζ‘ζ›²ηΊΏηš„ε½’ηŠΆ" diff --git a/modules/UIComponents/src/main/resources/org/gephi/ui/components/zh_CN.po b/modules/UIComponents/src/main/resources/org/gephi/ui/components/zh_CN.po deleted file mode 100644 index f5fc32cf03..0000000000 --- a/modules/UIComponents/src/main/resources/org/gephi/ui/components/zh_CN.po +++ /dev/null @@ -1,78 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:15+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ε―η”¨δΊŽδΈεŒηš„η”¨ι€”ηš„ε…±δΊ«Swing组仢。" - -msgid "HTMLTextArea_CutString" -msgstr "ε‰ͺεˆ‡" - -msgid "HTMLTextArea_CopyString" -msgstr "倍刢" - -msgid "HTMLTextArea_PasteString" -msgstr "粘贴" - -msgid "HTMLTextArea_DeleteString" -msgstr "εˆ ι™€" - -msgid "HTMLTextArea_SelectAllString" -msgstr "全选" - -msgid "OpenIDE-Module-Short-Description" -msgstr "可共享Swingη»„δ»Ά" - -msgid "JRangeSliderPanel.lowerBoundTextField.text" -msgstr "NaN" - -msgid "JRangeSliderPanel.upperBoundTextField.text" -msgstr "NaN" - -msgid "SimpleHTMLReport.printButton.text" -msgstr "打印" - -msgid "SimpleHTMLReport.copyButton.text" -msgstr "倍刢" - -msgid "SimpleHTMLReport.saveButton.text" -msgstr "保存" - -msgid "SimpleHTMLReport.closeButton.text" -msgstr "ε…³ι—­" - -msgid "SimpleHTMLReport.title" -msgstr "HTMLζŠ₯ε‘Š" - -msgid "SimpleHTMLReport.status.saveSuccess" -msgstr "ζŠ₯ε‘ŠδΏε­˜θ‡³{0}η›ε½•" - -msgid "SimpleHTMLReport.status.saveError" -msgstr "" - -msgid "JFreeChartDialog.zoomOutButton.text" -msgstr "缩小" - -msgid "JFreeChartDialog.closeButton.text" -msgstr "ε…³ι—­" - -msgid "JFreeChartDialog.resetButton.text" -msgstr "重θΎε›Ύθ‘¨ε€§ε°" - -msgid "JFreeChartDialog.zoomInButton.text" -msgstr "ζ”Ύε€§" diff --git a/modules/UILibraryWrapper/pom.xml b/modules/UILibraryWrapper/pom.xml index 8df0567a69..c2d55c2afc 100644 --- a/modules/UILibraryWrapper/pom.xml +++ b/modules/UILibraryWrapper/pom.xml @@ -1,96 +1,140 @@ - - - 4.0.0 - - gephi-parent - org.gephi - 0.9-SNAPSHOT - ../.. - - - org.gephi - ui-library-wrapper - 0.9-SNAPSHOT - nbm - - UILibraryWrapper - - - - org.pushingpixels - flamingo - 5.0-gephi - - - org.apache.xmlgraphics - batik-transcoder - - - org.apache.xmlgraphics - batik-bridge - - - xml-apis - xml-apis-ext - - - xml-apis - xml-apis - - - - - org.swinglabs - swingx - 1.6.1 - - - org.jdesktop - beansbinding - 1.2.1 - - - com.connectina.swing - fontchooser - 1.0 - - - net.java.dev - colorchooser - 1.0 - - - com.miglayout - miglayout - 3.7.1 - - - net.java.dev - timingframework - 1.1 - - - - - - - org.codehaus.mojo - nbm-maven-plugin - - - com.bric.awt - com.bric.swing - com.connectina.swing.fontchooser - net.java.dev.colorchooser - net.miginfocom.layout - net.miginfocom.swing - org.pushingpixels.flamingo.* - org.jdesktop.swingx.* - org.jdesktop.beansbinding.* - org.jdesktop.animation.* - - - - - - + + + 4.0.0 + + gephi-parent + org.gephi + 0.11.3-SNAPSHOT + ../.. + + + org.gephi + ui-library-wrapper + 0.11.3-SNAPSHOT + nbm + + UILibraryWrapper + + + + com.github.insubstantial + flamingo + 7.3 + + + org.apache.xmlgraphics + batik-transcoder + + + org.apache.xmlgraphics + batik-bridge + + + xml-apis + xml-apis-ext + + + xml-apis + xml-apis + + + + + org.swinglabs.swingx + swingx-all + 1.6.5-1 + + + org.jdesktop + beansbinding + 1.2.1 + + + com.connectina.swing + fontchooser + 1.0 + + + com.mastfrog + colorchooser + 1.5 + + + com.miglayout + miglayout + 3.7.4 + + + net.java.dev + timingframework + 1.1 + + + com.mastfrog + simplevalidation-swing + 1.14.1 + + + com.mastfrog + nbstubs + + + + + + com.formdev + flatlaf-swingx + 3.6.2 + + + com.formdev + flatlaf + + + + + org.netbeans.api + org-netbeans-libs-flatlaf + ${netbeans.version} + + + org.netbeans.api + org-openide-util + + + org.netbeans.api + org-openide-util-lookup + + + + + + + org.apache.netbeans.utilities + nbm-maven-plugin + + + com.bric.awt + com.bric.swing + com.connectina.swing.fontchooser + net.java.dev.colorchooser + net.miginfocom.layout + net.miginfocom.swing + org.pushingpixels.flamingo.* + org.jdesktop.swingx.* + org.jdesktop.beansbinding.* + org.jdesktop.animation.* + org.netbeans.validation.api.* + + + + + org.netbeans.api:org-netbeans-libs-flatlaf + impl + + + + + + + diff --git a/modules/UILibraryWrapper/src/main/nbm/manifest.mf b/modules/UILibraryWrapper/src/main/nbm/manifest.mf index f7bad9a588..e0cb41722f 100644 --- a/modules/UILibraryWrapper/src/main/nbm/manifest.mf +++ b/modules/UILibraryWrapper/src/main/nbm/manifest.mf @@ -1,4 +1,5 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true -OpenIDE-Module-Localizing-Bundle: org/gephi/lib/ui/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Libraries +OpenIDE-Module-Name: UI Library Wrapper \ No newline at end of file diff --git a/modules/UILibraryWrapper/src/main/nbm/module.xml b/modules/UILibraryWrapper/src/main/nbm/module.xml deleted file mode 100644 index 4df40a396f..0000000000 --- a/modules/UILibraryWrapper/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/UILibraryWrapper/src/main/resources/org/gephi/lib/ui/Bundle.properties b/modules/UILibraryWrapper/src/main/resources/org/gephi/lib/ui/Bundle.properties deleted file mode 100644 index 27785ad03a..0000000000 --- a/modules/UILibraryWrapper/src/main/resources/org/gephi/lib/ui/Bundle.properties +++ /dev/null @@ -1 +0,0 @@ -OpenIDE-Module-Display-Category=Libraries \ No newline at end of file diff --git a/modules/UIUtils/pom.xml b/modules/UIUtils/pom.xml index d9b5ce8040..cf07b70809 100644 --- a/modules/UIUtils/pom.xml +++ b/modules/UIUtils/pom.xml @@ -4,13 +4,12 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. - org.gephi ui-utils - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm UIUtils @@ -20,6 +19,10 @@ org.netbeans.api org-openide-util + + org.netbeans.api + org-openide-util-lookup + ${project.groupId} utils @@ -30,21 +33,27 @@ ${project.groupId} - lib.validation + core-library-wrapper ${project.groupId} - core-library-wrapper + ui-library-wrapper + + + org.netbeans.api + org-openide-dialogs - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin + org.gephi.lib.validation + org.gephi.ui.propertyeditor org.gephi.ui.utils diff --git a/modules/ValidationAPI/src/main/java/org/gephi/lib/validation/BetweenZeroAndOneValidator.java b/modules/UIUtils/src/main/java/org/gephi/lib/validation/BetweenZeroAndOneValidator.java similarity index 87% rename from modules/ValidationAPI/src/main/java/org/gephi/lib/validation/BetweenZeroAndOneValidator.java rename to modules/UIUtils/src/main/java/org/gephi/lib/validation/BetweenZeroAndOneValidator.java index f5b521d6f2..6984377029 100644 --- a/modules/ValidationAPI/src/main/java/org/gephi/lib/validation/BetweenZeroAndOneValidator.java +++ b/modules/UIUtils/src/main/java/org/gephi/lib/validation/BetweenZeroAndOneValidator.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.lib.validation; import org.netbeans.validation.api.Problems; @@ -46,14 +47,12 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ -public class BetweenZeroAndOneValidator implements Validator -{ +public class BetweenZeroAndOneValidator implements Validator { @Override - public boolean validate(Problems problems, String compName, String model) { + public void validate(Problems problems, String compName, String model) { boolean result = false; try { Double d = Double.parseDouble(model); @@ -61,10 +60,14 @@ public boolean validate(Problems problems, String compName, String model) { } catch (Exception e) { } if (!result) { - String message = NbBundle.getMessage(PositiveNumberValidator.class, - "PositiveNumberValidator_NOT_POSITIVE", model); + String message = NbBundle.getMessage(BetweenZeroAndOneValidator.class, + "BetweenZeroAndOneValidator_NOT_IN_RANGE", compName); problems.add(message); } - return result; + } + + @Override + public Class modelType() { + return String.class; } } diff --git a/modules/UIUtils/src/main/java/org/gephi/lib/validation/DialogDescriptorWithValidation.java b/modules/UIUtils/src/main/java/org/gephi/lib/validation/DialogDescriptorWithValidation.java new file mode 100644 index 0000000000..7fa53a4617 --- /dev/null +++ b/modules/UIUtils/src/main/java/org/gephi/lib/validation/DialogDescriptorWithValidation.java @@ -0,0 +1,33 @@ +package org.gephi.lib.validation; + +import org.netbeans.validation.api.Problem; +import org.netbeans.validation.api.ui.ValidationUI; +import org.netbeans.validation.api.ui.swing.ValidationPanel; +import org.openide.DialogDescriptor; + +public class DialogDescriptorWithValidation implements ValidationUI { + + private final DialogDescriptor dialogDescriptor; + + private DialogDescriptorWithValidation(DialogDescriptor dialogDescriptor) { + this.dialogDescriptor = dialogDescriptor; + } + + public static DialogDescriptor dialog(Object innerPane, String title) { + DialogDescriptor dd = new DialogDescriptor(innerPane, title); + if (innerPane instanceof ValidationPanel) { + ((ValidationPanel) innerPane).getValidationGroup().addUI(new DialogDescriptorWithValidation(dd)); + } + return dd; + } + + @Override + public void showProblem(Problem problem) { + dialogDescriptor.setValid(!problem.isFatal()); + } + + @Override + public void clearProblem() { + dialogDescriptor.setValid(true); + } +} diff --git a/modules/ValidationAPI/src/main/java/org/gephi/lib/validation/Multiple4NumberValidator.java b/modules/UIUtils/src/main/java/org/gephi/lib/validation/Multiple4NumberValidator.java similarity index 89% rename from modules/ValidationAPI/src/main/java/org/gephi/lib/validation/Multiple4NumberValidator.java rename to modules/UIUtils/src/main/java/org/gephi/lib/validation/Multiple4NumberValidator.java index 138255800d..11f806d97d 100644 --- a/modules/ValidationAPI/src/main/java/org/gephi/lib/validation/Multiple4NumberValidator.java +++ b/modules/UIUtils/src/main/java/org/gephi/lib/validation/Multiple4NumberValidator.java @@ -47,24 +47,27 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public final class Multiple4NumberValidator implements Validator { @Override - public boolean validate(Problems problems, String compName, String model) { + public void validate(Problems problems, String compName, String model) { boolean result = false; try { Integer i = Integer.parseInt(model); - result = i > 0 && i%4 ==0; + result = i > 0 && i % 4 == 0; } catch (Exception e) { } if (!result) { String message = NbBundle.getMessage(Multiple4NumberValidator.class, - "Multiple4NumberValidator_NOT_MULTIPLE", model); + "Multiple4NumberValidator_NOT_MULTIPLE", compName); problems.add(message); } - return result; + } + + @Override + public Class modelType() { + return String.class; } } diff --git a/modules/ValidationAPI/src/main/java/org/gephi/lib/validation/PositiveNumberValidator.java b/modules/UIUtils/src/main/java/org/gephi/lib/validation/PositiveNumberValidator.java similarity index 91% rename from modules/ValidationAPI/src/main/java/org/gephi/lib/validation/PositiveNumberValidator.java rename to modules/UIUtils/src/main/java/org/gephi/lib/validation/PositiveNumberValidator.java index ee57687cd8..5dfcdebfbe 100644 --- a/modules/ValidationAPI/src/main/java/org/gephi/lib/validation/PositiveNumberValidator.java +++ b/modules/UIUtils/src/main/java/org/gephi/lib/validation/PositiveNumberValidator.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.lib.validation; import org.netbeans.validation.api.Problems; @@ -46,13 +47,12 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.NbBundle; /** - * * @author Mathieu Bastian */ public final class PositiveNumberValidator implements Validator { @Override - public boolean validate(Problems problems, String compName, String model) { + public void validate(Problems problems, String compName, String model) { boolean result = false; try { Integer i = Integer.parseInt(model); @@ -61,9 +61,13 @@ public boolean validate(Problems problems, String compName, String model) { } if (!result) { String message = NbBundle.getMessage(PositiveNumberValidator.class, - "PositiveNumberValidator_NOT_POSITIVE", model); + "PositiveNumberValidator_NOT_POSITIVE", compName); problems.add(message); } - return result; + } + + @Override + public Class modelType() { + return String.class; } } diff --git a/modules/ValidationAPI/src/main/java/org/gephi/lib/validation/ValidationClient.java b/modules/UIUtils/src/main/java/org/gephi/lib/validation/ValidationClient.java similarity index 97% rename from modules/ValidationAPI/src/main/java/org/gephi/lib/validation/ValidationClient.java rename to modules/UIUtils/src/main/java/org/gephi/lib/validation/ValidationClient.java index 90f44c4499..4f00f8c474 100644 --- a/modules/ValidationAPI/src/main/java/org/gephi/lib/validation/ValidationClient.java +++ b/modules/UIUtils/src/main/java/org/gephi/lib/validation/ValidationClient.java @@ -45,10 +45,9 @@ Development and Distribution License("CDDL") (collectively, the import org.netbeans.validation.api.ui.ValidationGroup; /** - * * @author Mathieu Bastian */ public interface ValidationClient { - public void validate(ValidationGroup group); + void validate(ValidationGroup group); } diff --git a/modules/UIUtils/src/main/java/org/gephi/ui/propertyeditor/AbstractAttributeColumnPropertyEditor.java b/modules/UIUtils/src/main/java/org/gephi/ui/propertyeditor/AbstractAttributeColumnPropertyEditor.java new file mode 100644 index 0000000000..ab49c86851 --- /dev/null +++ b/modules/UIUtils/src/main/java/org/gephi/ui/propertyeditor/AbstractAttributeColumnPropertyEditor.java @@ -0,0 +1,177 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.ui.propertyeditor; + +import java.beans.PropertyEditorSupport; +import java.util.ArrayList; +import java.util.List; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.openide.util.Lookup; + +/** + * @author Mathieu Bastian + */ +abstract class AbstractAttributeColumnPropertyEditor extends PropertyEditorSupport { + + private final EditorClass editorClass; + private final AttributeTypeClass attributeTypeClass; + private Column[] columns; + private Column selectedColumn; + + protected AbstractAttributeColumnPropertyEditor(EditorClass editorClass, AttributeTypeClass attributeClass) { + this.editorClass = editorClass; + this.attributeTypeClass = attributeClass; + } + + protected Column[] getColumns() { + List cols = new ArrayList<>(); + GraphModel model = Lookup.getDefault().lookup(GraphController.class).getGraphModel(); + if (model != null) { + if (editorClass.equals(EditorClass.NODE) || editorClass.equals(EditorClass.NODEEDGE)) { + for (Column column : model.getNodeTable()) { + if (attributeTypeClass.equals(AttributeTypeClass.NUMBER) && isNumberColumn(column)) { + cols.add(column); + } else if (attributeTypeClass.equals(AttributeTypeClass.DYNAMIC_NUMBER) && + isDynamicNumberColumn(column)) { + cols.add(column); + } else if (attributeTypeClass.equals(AttributeTypeClass.ALL_NUMBER) && + (isDynamicNumberColumn(column) || isNumberColumn(column))) { + cols.add(column); + } else if (attributeTypeClass.equals(AttributeTypeClass.ALL)) { + cols.add(column); + } else if (attributeTypeClass.equals(AttributeTypeClass.STRING) && isStringColumn(column)) { + cols.add(column); + } + } + } + if (editorClass.equals(EditorClass.EDGE) || editorClass.equals(EditorClass.NODEEDGE)) { + for (Column column : model.getEdgeTable()) { + if (attributeTypeClass.equals(AttributeTypeClass.NUMBER) && isNumberColumn(column)) { + cols.add(column); + } else if (attributeTypeClass.equals(AttributeTypeClass.DYNAMIC_NUMBER) && + isDynamicNumberColumn(column)) { + cols.add(column); + } else if (attributeTypeClass.equals(AttributeTypeClass.ALL_NUMBER) && + (isDynamicNumberColumn(column) || isNumberColumn(column))) { + cols.add(column); + } else if (attributeTypeClass.equals(AttributeTypeClass.ALL)) { + cols.add(column); + } else if (attributeTypeClass.equals(AttributeTypeClass.STRING) && isStringColumn(column)) { + cols.add(column); + } + } + } + } + return cols.toArray(new Column[0]); + } + + @Override + public String[] getTags() { + columns = getColumns(); + //selectedColumn = columns[0]; + String[] tags = new String[columns.length]; + for (int i = 0; i < columns.length; i++) { + tags[i] = columns[i].getTitle(); + } + return tags; + } + + @Override + public Object getValue() { + return selectedColumn; + } + + @Override + public void setValue(Object value) { + Column column = (Column) value; + this.selectedColumn = column; + } + + @Override + public String getAsText() { + if (selectedColumn == null) { + return "---"; + } + return selectedColumn.getTitle(); + } + + @Override + public void setAsText(String text) throws IllegalArgumentException { + if (columns == null) { + columns = getColumns(); + } + for (Column c : columns) { + if (c.getTitle().equals(text)) { + this.selectedColumn = c; + } + } + } + + public boolean isDynamicNumberColumn(Column column) { + return AttributeUtils.isDynamicType(column.getTypeClass()) && + AttributeUtils.isNumberType(column.getTypeClass()); + } + + public boolean isNumberColumn(Column column) { + return AttributeUtils.isNumberType(column.getTypeClass()) + && !AttributeUtils.isArrayType(column.getTypeClass()) + && !AttributeUtils.isDynamicType(column.getTypeClass()); + } + + public boolean isStringColumn(Column column) { + return column.getTypeClass().equals(String.class); + } + + public enum EditorClass { + + NODE, EDGE, NODEEDGE + } + + public enum AttributeTypeClass { + + ALL, NUMBER, STRING, DYNAMIC_NUMBER, ALL_NUMBER + } +} diff --git a/modules/AttributeColumnPropertyEditor/src/main/java/org/gephi/ui/propertyeditor/EdgeColumnAllNumbersEditor.java b/modules/UIUtils/src/main/java/org/gephi/ui/propertyeditor/EdgeColumnAllNumbersEditor.java similarity index 99% rename from modules/AttributeColumnPropertyEditor/src/main/java/org/gephi/ui/propertyeditor/EdgeColumnAllNumbersEditor.java rename to modules/UIUtils/src/main/java/org/gephi/ui/propertyeditor/EdgeColumnAllNumbersEditor.java index 2bf123d9af..f8a504b93e 100644 --- a/modules/AttributeColumnPropertyEditor/src/main/java/org/gephi/ui/propertyeditor/EdgeColumnAllNumbersEditor.java +++ b/modules/UIUtils/src/main/java/org/gephi/ui/propertyeditor/EdgeColumnAllNumbersEditor.java @@ -39,10 +39,10 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.propertyeditor; /** - * * @author Mathieu Bastian */ public class EdgeColumnAllNumbersEditor extends AbstractAttributeColumnPropertyEditor { @@ -50,4 +50,4 @@ public class EdgeColumnAllNumbersEditor extends AbstractAttributeColumnPropertyE public EdgeColumnAllNumbersEditor() { super(EditorClass.EDGE, AttributeTypeClass.ALL_NUMBER); } -} \ No newline at end of file +} diff --git a/modules/AttributeColumnPropertyEditor/src/main/java/org/gephi/ui/propertyeditor/EdgeColumnDynamicNumbersEditor.java b/modules/UIUtils/src/main/java/org/gephi/ui/propertyeditor/EdgeColumnDynamicNumbersEditor.java similarity index 99% rename from modules/AttributeColumnPropertyEditor/src/main/java/org/gephi/ui/propertyeditor/EdgeColumnDynamicNumbersEditor.java rename to modules/UIUtils/src/main/java/org/gephi/ui/propertyeditor/EdgeColumnDynamicNumbersEditor.java index c5ad9e4606..eee2305699 100644 --- a/modules/AttributeColumnPropertyEditor/src/main/java/org/gephi/ui/propertyeditor/EdgeColumnDynamicNumbersEditor.java +++ b/modules/UIUtils/src/main/java/org/gephi/ui/propertyeditor/EdgeColumnDynamicNumbersEditor.java @@ -39,10 +39,10 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.propertyeditor; /** - * * @author Mathieu Bastian */ public class EdgeColumnDynamicNumbersEditor extends AbstractAttributeColumnPropertyEditor { diff --git a/modules/AttributeColumnPropertyEditor/src/main/java/org/gephi/ui/propertyeditor/EdgeColumnNumbersEditor.java b/modules/UIUtils/src/main/java/org/gephi/ui/propertyeditor/EdgeColumnNumbersEditor.java similarity index 99% rename from modules/AttributeColumnPropertyEditor/src/main/java/org/gephi/ui/propertyeditor/EdgeColumnNumbersEditor.java rename to modules/UIUtils/src/main/java/org/gephi/ui/propertyeditor/EdgeColumnNumbersEditor.java index e0d5b07382..4c6b6e9d23 100644 --- a/modules/AttributeColumnPropertyEditor/src/main/java/org/gephi/ui/propertyeditor/EdgeColumnNumbersEditor.java +++ b/modules/UIUtils/src/main/java/org/gephi/ui/propertyeditor/EdgeColumnNumbersEditor.java @@ -38,11 +38,11 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.ui.propertyeditor; /** - * * @author Mathieu Bastian */ public class EdgeColumnNumbersEditor extends AbstractAttributeColumnPropertyEditor { diff --git a/modules/AttributeColumnPropertyEditor/src/main/java/org/gephi/ui/propertyeditor/EdgeColumnStringEditor.java b/modules/UIUtils/src/main/java/org/gephi/ui/propertyeditor/EdgeColumnStringEditor.java similarity index 99% rename from modules/AttributeColumnPropertyEditor/src/main/java/org/gephi/ui/propertyeditor/EdgeColumnStringEditor.java rename to modules/UIUtils/src/main/java/org/gephi/ui/propertyeditor/EdgeColumnStringEditor.java index 6d6e3df5b2..ea6998f7f6 100644 --- a/modules/AttributeColumnPropertyEditor/src/main/java/org/gephi/ui/propertyeditor/EdgeColumnStringEditor.java +++ b/modules/UIUtils/src/main/java/org/gephi/ui/propertyeditor/EdgeColumnStringEditor.java @@ -38,11 +38,11 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.ui.propertyeditor; /** - * * @author Mathieu Bastian */ public class EdgeColumnStringEditor extends AbstractAttributeColumnPropertyEditor { diff --git a/modules/AttributeColumnPropertyEditor/src/main/java/org/gephi/ui/propertyeditor/NodeColumnAllNumbersEditor.java b/modules/UIUtils/src/main/java/org/gephi/ui/propertyeditor/NodeColumnAllNumbersEditor.java similarity index 99% rename from modules/AttributeColumnPropertyEditor/src/main/java/org/gephi/ui/propertyeditor/NodeColumnAllNumbersEditor.java rename to modules/UIUtils/src/main/java/org/gephi/ui/propertyeditor/NodeColumnAllNumbersEditor.java index 8a2e3e9e82..4634d2dac8 100644 --- a/modules/AttributeColumnPropertyEditor/src/main/java/org/gephi/ui/propertyeditor/NodeColumnAllNumbersEditor.java +++ b/modules/UIUtils/src/main/java/org/gephi/ui/propertyeditor/NodeColumnAllNumbersEditor.java @@ -39,10 +39,10 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.propertyeditor; /** - * * @author Mathieu Bastian */ public class NodeColumnAllNumbersEditor extends AbstractAttributeColumnPropertyEditor { @@ -50,4 +50,4 @@ public class NodeColumnAllNumbersEditor extends AbstractAttributeColumnPropertyE public NodeColumnAllNumbersEditor() { super(EditorClass.NODE, AttributeTypeClass.ALL_NUMBER); } -} \ No newline at end of file +} diff --git a/modules/AttributeColumnPropertyEditor/src/main/java/org/gephi/ui/propertyeditor/NodeColumnDynamicNumbersEditor.java b/modules/UIUtils/src/main/java/org/gephi/ui/propertyeditor/NodeColumnDynamicNumbersEditor.java similarity index 99% rename from modules/AttributeColumnPropertyEditor/src/main/java/org/gephi/ui/propertyeditor/NodeColumnDynamicNumbersEditor.java rename to modules/UIUtils/src/main/java/org/gephi/ui/propertyeditor/NodeColumnDynamicNumbersEditor.java index 764a2068cc..701a4c2612 100644 --- a/modules/AttributeColumnPropertyEditor/src/main/java/org/gephi/ui/propertyeditor/NodeColumnDynamicNumbersEditor.java +++ b/modules/UIUtils/src/main/java/org/gephi/ui/propertyeditor/NodeColumnDynamicNumbersEditor.java @@ -39,10 +39,10 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.propertyeditor; /** - * * @author Mathieu Bastian */ public class NodeColumnDynamicNumbersEditor extends AbstractAttributeColumnPropertyEditor { @@ -50,4 +50,4 @@ public class NodeColumnDynamicNumbersEditor extends AbstractAttributeColumnPrope public NodeColumnDynamicNumbersEditor() { super(EditorClass.NODE, AttributeTypeClass.DYNAMIC_NUMBER); } -} \ No newline at end of file +} diff --git a/modules/AttributeColumnPropertyEditor/src/main/java/org/gephi/ui/propertyeditor/NodeColumnNumbersEditor.java b/modules/UIUtils/src/main/java/org/gephi/ui/propertyeditor/NodeColumnNumbersEditor.java similarity index 99% rename from modules/AttributeColumnPropertyEditor/src/main/java/org/gephi/ui/propertyeditor/NodeColumnNumbersEditor.java rename to modules/UIUtils/src/main/java/org/gephi/ui/propertyeditor/NodeColumnNumbersEditor.java index 3ef0da5974..494c15c681 100644 --- a/modules/AttributeColumnPropertyEditor/src/main/java/org/gephi/ui/propertyeditor/NodeColumnNumbersEditor.java +++ b/modules/UIUtils/src/main/java/org/gephi/ui/propertyeditor/NodeColumnNumbersEditor.java @@ -38,11 +38,11 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.ui.propertyeditor; /** - * * @author Mathieu Bastian */ public class NodeColumnNumbersEditor extends AbstractAttributeColumnPropertyEditor { diff --git a/modules/AttributeColumnPropertyEditor/src/main/java/org/gephi/ui/propertyeditor/NodeColumnStringEditor.java b/modules/UIUtils/src/main/java/org/gephi/ui/propertyeditor/NodeColumnStringEditor.java similarity index 99% rename from modules/AttributeColumnPropertyEditor/src/main/java/org/gephi/ui/propertyeditor/NodeColumnStringEditor.java rename to modules/UIUtils/src/main/java/org/gephi/ui/propertyeditor/NodeColumnStringEditor.java index 4a2bdf4e52..bfed329ea8 100644 --- a/modules/AttributeColumnPropertyEditor/src/main/java/org/gephi/ui/propertyeditor/NodeColumnStringEditor.java +++ b/modules/UIUtils/src/main/java/org/gephi/ui/propertyeditor/NodeColumnStringEditor.java @@ -38,11 +38,11 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.ui.propertyeditor; /** - * * @author Mathieu Bastian */ public class NodeColumnStringEditor extends AbstractAttributeColumnPropertyEditor { diff --git a/modules/UIUtils/src/main/java/org/gephi/ui/utils/ChartsUtils.java b/modules/UIUtils/src/main/java/org/gephi/ui/utils/ChartsUtils.java index aa1f927ffe..a8c17558dd 100644 --- a/modules/UIUtils/src/main/java/org/gephi/ui/utils/ChartsUtils.java +++ b/modules/UIUtils/src/main/java/org/gephi/ui/utils/ChartsUtils.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.utils; import java.awt.Color; @@ -75,27 +76,34 @@ Development and Distribution License("CDDL") (collectively, the /** * Utils class to build and change charts. * Scatter plots implemented to be able to draw or not lines and linear regression. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class ChartsUtils { /** * Prepares a HTML report for the given statistics data and charts. * For preparing the statistics data see the method getAllStatistics of the StatisticsUtils class. - * @param dataName Name of the data - * @param statistics Statistics obtained from the method getAllStatistics of the StatisticsUtils class - * @param boxPlot Box-plot jfreechart or null - * @param scatterPlot Scatter-plot jfreechart or null - * @param histogram Histogram-plot jfreechart or null - * @param boxPlotDimension Dimension for the box-plot or null to use a default dimension + * + * @param dataName Name of the data + * @param statistics Statistics obtained from the method getAllStatistics of the StatisticsUtils class + * @param boxPlot Box-plot jfreechart or null + * @param scatterPlot Scatter-plot jfreechart or null + * @param histogram Histogram-plot jfreechart or null + * @param boxPlotDimension Dimension for the box-plot or null to use a default dimension * @param scatterPlotDimension Dimension for the scatter plot or null to use a default dimension - * @param histogramDimension Dimension for the histogram or null to use a default dimension + * @param histogramDimension Dimension for the histogram or null to use a default dimension * @return */ - public static String getStatisticsReportHTML(final String dataName, final BigDecimal[] statistics, final JFreeChart boxPlot, final JFreeChart scatterPlot, final JFreeChart histogram, final Dimension boxPlotDimension, final Dimension scatterPlotDimension, final Dimension histogramDimension) { + public static String getStatisticsReportHTML(final String dataName, final BigDecimal[] statistics, + final JFreeChart boxPlot, final JFreeChart scatterPlot, + final JFreeChart histogram, final Dimension boxPlotDimension, + final Dimension scatterPlotDimension, + final Dimension histogramDimension) { final StringBuilder sb = new StringBuilder(); sb.append(""); - sb.append(NbBundle.getMessage(ChartsUtils.class, "ChartsUtils.report.header", HTMLEscape.stringToHTMLString(dataName))); + sb.append(NbBundle + .getMessage(ChartsUtils.class, "ChartsUtils.report.header", HTMLEscape.stringToHTMLString(dataName))); sb.append("


            "); if (statistics != null) {//There are numbers and statistics can be shown: sb.append("
              "); @@ -134,7 +142,8 @@ public static String getStatisticsReportHTML(final String dataName, final BigDec /** * Build a new box-plot from an array of numbers using a default title and yLabel. * String dataName will be used for xLabel. - * @param numbers Numbers for building box-plot + * + * @param numbers Numbers for building box-plot * @param dataName Name of the numbers data * @return Prepared box-plot */ @@ -143,7 +152,7 @@ public static JFreeChart buildBoxPlot(final Number[] numbers, final String dataN return null; } DefaultBoxAndWhiskerCategoryDataset dataset = new DefaultBoxAndWhiskerCategoryDataset(); - final ArrayList list = new ArrayList(); + final ArrayList list = new ArrayList<>(); list.addAll(Arrays.asList(numbers)); final String valuesString = getMessage("ChartsUtils.report.box-plot.values"); @@ -169,13 +178,15 @@ public static JFreeChart buildBoxPlot(final Number[] numbers, final String dataN * Build new scatter plot from numbers array using a default title and xLabel. * String dataName will be used for yLabel. * Appearance can be changed later with the other methods of ChartsUtils. - * @param numbers Numbers for the scatter plot - * @param dataName Name of the numbers data - * @param useLines Indicates if lines have to be drawn instead of shapes + * + * @param numbers Numbers for the scatter plot + * @param dataName Name of the numbers data + * @param useLines Indicates if lines have to be drawn instead of shapes * @param useLinearRegression Indicates if the scatter plot has to have linear regreesion line drawn * @return Scatter plot for the data and appearance options */ - public static JFreeChart buildScatterPlot(final Number[] numbers, final String dataName, final boolean useLines, final boolean useLinearRegression) { + public static JFreeChart buildScatterPlot(final Number[] numbers, final String dataName, final boolean useLines, + final boolean useLinearRegression) { if (numbers == null || numbers.length == 0) { return null; } @@ -187,35 +198,38 @@ public static JFreeChart buildScatterPlot(final Number[] numbers, final String d } dataset.addSeries(series); JFreeChart scatterPlot = buildScatterPlot(dataset, - getMessage("ChartsUtils.report.scatter-plot.title"), - getMessage("ChartsUtils.report.scatter-plot.xLabel"), - dataName, - useLines, - useLinearRegression); + getMessage("ChartsUtils.report.scatter-plot.title"), + getMessage("ChartsUtils.report.scatter-plot.xLabel"), + dataName, + useLines, + useLinearRegression); return scatterPlot; } /** * Build new Scatter plot. Appearance can be changed later with the other methods of ChartsUtils. - * @param data Data for the plot - * @param title Title for the chart - * @param xLabel Text for x label - * @param yLabel Text for y label - * @param useLines Indicates if lines have to be drawn instead of shapes + * + * @param data Data for the plot + * @param title Title for the chart + * @param xLabel Text for x label + * @param yLabel Text for y label + * @param useLines Indicates if lines have to be drawn instead of shapes * @param useLinearRegression Indicates if the scatter plot has to have linear regreesion line drawn * @return Scatter plot for the data and appearance options */ - public static JFreeChart buildScatterPlot(final XYSeriesCollection data, final String title, final String xLabel, final String yLabel, final boolean useLines, final boolean useLinearRegression) { + public static JFreeChart buildScatterPlot(final XYSeriesCollection data, final String title, final String xLabel, + final String yLabel, final boolean useLines, + final boolean useLinearRegression) { JFreeChart scatterPlot = ChartFactory.createXYLineChart( - title, - xLabel, - yLabel, - data, - PlotOrientation.VERTICAL, - true, - true, - false); + title, + xLabel, + yLabel, + data, + PlotOrientation.VERTICAL, + true, + true, + false); XYPlot plot = (XYPlot) scatterPlot.getPlot(); plot.setBackgroundPaint(java.awt.Color.WHITE); @@ -230,8 +244,9 @@ public static JFreeChart buildScatterPlot(final XYSeriesCollection data, final S /** * Build new histogram from the given numbers array using a default title and xLabel. * String dataName will be used for yLabel. - * @param numbers Numbers for the histogram - * @param dataName Name of the numbers data + * + * @param numbers Numbers for the histogram + * @param dataName Name of the numbers data * @param divisions Divisions for the histogram * @return Prepared histogram */ @@ -247,25 +262,27 @@ public static JFreeChart buildHistogram(final Number[] numbers, final String dat doubleNumbers[i] = numbers[i].doubleValue(); } - dataset.addSeries(dataName, doubleNumbers, divisions > 0 ? divisions : 10);//Use 10 divisions if divisions number is invalid. + dataset.addSeries(dataName, doubleNumbers, + divisions > 0 ? divisions : 10);//Use 10 divisions if divisions number is invalid. JFreeChart histogram = ChartFactory.createHistogram( - getMessage("ChartsUtils.report.histogram.title"), - dataName, - getMessage("ChartsUtils.report.histogram.yLabel"), - dataset, - PlotOrientation.VERTICAL, - true, - true, - false); + getMessage("ChartsUtils.report.histogram.title"), + dataName, + getMessage("ChartsUtils.report.histogram.yLabel"), + dataset, + PlotOrientation.VERTICAL, + true, + true, + false); return histogram; } /** * Modify a scatter plot to show lines instead or shapes or not. + * * @param scatterPlot Scatter plot to modify - * @param enabled Indicates if lines have to be shown + * @param enabled Indicates if lines have to be shown */ public static void setScatterPlotLinesEnabled(final JFreeChart scatterPlot, final boolean enabled) { XYPlot plot = (XYPlot) scatterPlot.getPlot(); @@ -285,8 +302,9 @@ public static void setScatterPlotLinesEnabled(final JFreeChart scatterPlot, fina /** * Modify a scatter plot to show linear regression or not. + * * @param scatterPlot Scatter plot to modify - * @param enabled Indicates if linear regression has to be shown + * @param enabled Indicates if linear regression has to be shown */ public static void setScatterPlotLinearRegressionEnabled(final JFreeChart scatterPlot, final boolean enabled) { XYPlot plot = (XYPlot) scatterPlot.getPlot(); @@ -354,28 +372,32 @@ private static void writeStatistic(StringBuilder sb, String resName, BigDecimal sb.append(""); } - private static void writeBoxPlot(final StringBuilder sb, JFreeChart boxPlot, Dimension dimension) throws IOException { + private static void writeBoxPlot(final StringBuilder sb, JFreeChart boxPlot, Dimension dimension) + throws IOException { if (dimension == null) { dimension = new Dimension(300, 500); } writeChart(sb, boxPlot, dimension, "box-plot.png"); } - private static void writeScatterPlot(final StringBuilder sb, JFreeChart scatterPlot, Dimension dimension) throws IOException { + private static void writeScatterPlot(final StringBuilder sb, JFreeChart scatterPlot, Dimension dimension) + throws IOException { if (dimension == null) { dimension = new Dimension(600, 400); } writeChart(sb, scatterPlot, dimension, "scatter-plot.png"); } - private static void writeHistogram(final StringBuilder sb, final JFreeChart histogram, Dimension dimension) throws IOException { + private static void writeHistogram(final StringBuilder sb, final JFreeChart histogram, Dimension dimension) + throws IOException { if (dimension == null) { dimension = new Dimension(600, 400); } writeChart(sb, histogram, dimension, "histogram.png"); } - private static void writeChart(final StringBuilder sb, final JFreeChart chart, final Dimension dimension, final String fileName) throws IOException { + private static void writeChart(final StringBuilder sb, final JFreeChart chart, final Dimension dimension, + final String fileName) throws IOException { TempDir tempDir = TempDirUtils.createTempDir(); String imageFile = ""; File file = tempDir.createFile(fileName); diff --git a/modules/UIUtils/src/main/java/org/gephi/ui/utils/ColorUtils.java b/modules/UIUtils/src/main/java/org/gephi/ui/utils/ColorUtils.java index 2dcddc5ab3..3e8bb97da0 100644 --- a/modules/UIUtils/src/main/java/org/gephi/ui/utils/ColorUtils.java +++ b/modules/UIUtils/src/main/java/org/gephi/ui/utils/ColorUtils.java @@ -39,12 +39,12 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.utils; import java.awt.Color; /** - * * @author Mathieu Bastian */ public class ColorUtils { diff --git a/modules/UIUtils/src/main/java/org/gephi/ui/utils/ColumnTitleValidator.java b/modules/UIUtils/src/main/java/org/gephi/ui/utils/ColumnTitleValidator.java index f74b7b0258..c04aacb314 100644 --- a/modules/UIUtils/src/main/java/org/gephi/ui/utils/ColumnTitleValidator.java +++ b/modules/UIUtils/src/main/java/org/gephi/ui/utils/ColumnTitleValidator.java @@ -39,19 +39,18 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.utils; -import org.gephi.attribute.api.Table; +import org.gephi.graph.api.Table; import org.netbeans.validation.api.Problems; import org.netbeans.validation.api.Validator; import org.openide.util.NbBundle; /** - * Utils class to validate a string that contains a valid title for a column of - * a - * AttributeTable. + * Utils class to validate a string that contains a valid title for a column of a {@link Table} * - * @author Eduardo Ramos + * @author Eduardo Ramos */ public class ColumnTitleValidator implements Validator { @@ -68,18 +67,19 @@ public ColumnTitleValidator(Table table, boolean allowNoTitle) { } @Override - public boolean validate(Problems prblms, String string, String t) { + public void validate(Problems prblms, String string, String t) { if (!allowNoTitle && (t == null || t.isEmpty())) { prblms.add(NbBundle.getMessage(ColumnTitleValidator.class, "ColumnTitleValidator.title.empty")); - return false; } else if (table.hasColumn(t)) { prblms.add(NbBundle.getMessage(ColumnTitleValidator.class, "ColumnTitleValidator.title.repeated")); - return false; - } else { - return true; } } + @Override + public Class modelType() { + return String.class; + } + public boolean isAllowNoTitle() { return allowNoTitle; } diff --git a/modules/UIUtils/src/main/java/org/gephi/ui/utils/DialogFileFilter.java b/modules/UIUtils/src/main/java/org/gephi/ui/utils/DialogFileFilter.java index 7e91cba80e..59deda84a7 100644 --- a/modules/UIUtils/src/main/java/org/gephi/ui/utils/DialogFileFilter.java +++ b/modules/UIUtils/src/main/java/org/gephi/ui/utils/DialogFileFilter.java @@ -45,6 +45,7 @@ Development and Distribution License("CDDL") (collectively, the import java.io.File; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.logging.Logger; /** @@ -52,112 +53,111 @@ Development and Distribution License("CDDL") (collectively, the * * @author Mathieu Bastian */ -public class DialogFileFilter extends javax.swing.filechooser.FileFilter -{ - - private String description; - private List extensions; - - public DialogFileFilter(String description) - { - if(description == null) - { - Logger.getLogger(DialogFileFilter.class.getName()).throwing(getClass().getName(), "constructor", new NullPointerException("Description cannot be null.")); - } - this.description = description; - this.extensions = new ArrayList(); - } - - @Override - public boolean accept(File file) - { - if(file.isDirectory() || extensions.size()==0) { - return true; - } - String fileName = file.getName().toLowerCase(); - for(String extension : extensions){ - if(fileName.endsWith(extension)){ - return true; - } - } - return false; - } - @Override - public String getDescription(){ - StringBuffer buffer = new StringBuffer(description); - buffer.append(" ("); - for(String extension : extensions){ - buffer.append("*"+extension).append(" "); - } - buffer.deleteCharAt(buffer.length()-1); - return buffer.append(")").toString(); - } - - - public void setDescription(String description){ - if(description == null) - { - Logger.getLogger(DialogFileFilter.class.getName()).throwing(getClass().getName(), "setDescription", new NullPointerException("Description cannot be null.")); - } - this.description = description; - } - - - public void addExtension(String extension){ - if(extension == null) - { - Logger.getLogger(DialogFileFilter.class.getName()).throwing(getClass().getName(), "addExtension", new NullPointerException("Description cannot be null.")); - } - extensions.add(extension); - } - - public void addExtensions(String[] extension){ - if(extension == null) - { - Logger.getLogger(DialogFileFilter.class.getName()).throwing(getClass().getName(), "addExtensions", new NullPointerException("Description cannot be null.")); - } - for(int i=0;i extensions; + + public DialogFileFilter(String description) { + if (description == null) { + Logger.getLogger(DialogFileFilter.class.getName()) + .throwing(getClass().getName(), "constructor", new NullPointerException("Description cannot be null.")); + } + this.description = description; + this.extensions = new ArrayList<>(); + } + + @Override + public boolean accept(File file) { + if (file.isDirectory() || extensions.isEmpty()) { + return true; + } + String fileName = file.getName().toLowerCase(); + for (String extension : extensions) { + if (fileName.endsWith(extension)) { + return true; + } + } + return false; + } + + @Override + public String getDescription() { + StringBuffer buffer = new StringBuffer(description); + buffer.append(" ("); + for (String extension : extensions) { + buffer.append("*" + extension).append(" "); + } + buffer.deleteCharAt(buffer.length() - 1); + return buffer.append(")").toString(); + } + + + public void setDescription(String description) { + if (description == null) { + Logger.getLogger(DialogFileFilter.class.getName()).throwing(getClass().getName(), "setDescription", + new NullPointerException("Description cannot be null.")); + } + this.description = description; + } + + + public void addExtension(String extension) { + if (extension == null) { + Logger.getLogger(DialogFileFilter.class.getName()).throwing(getClass().getName(), "addExtension", + new NullPointerException("Description cannot be null.")); + } + extensions.add(extension); + } + + public void addExtensions(String[] extension) { + if (extension == null) { + Logger.getLogger(DialogFileFilter.class.getName()).throwing(getClass().getName(), "addExtensions", + new NullPointerException("Description cannot be null.")); + } + for (int i = 0; i < extension.length; i++) { extensions.add(extension[i]); } - } + } - public void removeExtension(String extension) - { - extensions.remove(extension); - } + public void removeExtension(String extension) { + extensions.remove(extension); + } - public void clearExtensions(){ - extensions.clear(); - } + public void clearExtensions() { + extensions.clear(); + } - public List getExtensions(){ - return extensions; - } + public List getExtensions() { + return extensions; + } @Override public boolean equals(Object obj) { - if (!(obj instanceof DialogFileFilter)) { - return false; + if (this == obj) { + return true; } - DialogFileFilter s = (DialogFileFilter) obj; - if (s.extensions.size() != this.extensions.size()) { + if (obj == null) { return false; } - for (int i = 0; i < extensions.size(); i++) { - if (this.extensions.get(i) != s.extensions.get(i)) { - if (!this.extensions.get(i).equals(s.extensions.get(i))) { - return false; - } - } + if (getClass() != obj.getClass()) { + return false; } - if(!description.equals(s.description)) { + final DialogFileFilter other = (DialogFileFilter) obj; + if (!Objects.equals(this.description, other.description)) { return false; } + return Objects.equals(this.extensions, other.extensions); + } - return true; + @Override + public int hashCode() { + int hash = 3; + hash = 43 * hash + Objects.hashCode(this.description); + hash = 43 * hash + Objects.hashCode(this.extensions); + return hash; } //TODO define hashCode diff --git a/modules/UIUtils/src/main/java/org/gephi/ui/utils/FontUtils.java b/modules/UIUtils/src/main/java/org/gephi/ui/utils/FontUtils.java index 1346ac026b..176dd67451 100644 --- a/modules/UIUtils/src/main/java/org/gephi/ui/utils/FontUtils.java +++ b/modules/UIUtils/src/main/java/org/gephi/ui/utils/FontUtils.java @@ -39,12 +39,12 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.utils; import java.awt.Font; /** - * * @author Mathieu Bastian */ public class FontUtils { diff --git a/modules/UIUtils/src/main/java/org/gephi/ui/utils/GradientUtils.java b/modules/UIUtils/src/main/java/org/gephi/ui/utils/GradientUtils.java index 8b4a0c021c..a97b056ce2 100644 --- a/modules/UIUtils/src/main/java/org/gephi/ui/utils/GradientUtils.java +++ b/modules/UIUtils/src/main/java/org/gephi/ui/utils/GradientUtils.java @@ -39,12 +39,12 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.utils; import java.awt.Color; /** - * * @author Mathieu Bastian */ public class GradientUtils { @@ -54,7 +54,7 @@ public static class LinearGradient { private Color[] colors; private float[] positions; - public LinearGradient(Color colors[], float[] positions) { + public LinearGradient(Color[] colors, float[] positions) { if (colors == null || positions == null) { throw new NullPointerException(); } @@ -67,7 +67,7 @@ public LinearGradient(Color colors[], float[] positions) { public Color getValue(float pos) { for (int a = 0; a < positions.length - 1; a++) { - if(positions[a]==pos) { + if (positions[a] == pos) { return colors[a]; } if (positions[a] < pos && pos < positions[a + 1]) { @@ -86,24 +86,24 @@ public Color getValue(float pos) { private Color tween(Color c1, Color c2, float p) { return new Color( - (int) (c1.getRed() * (1 - p) + c2.getRed() * (p)), - (int) (c1.getGreen() * (1 - p) + c2.getGreen() * (p)), - (int) (c1.getBlue() * (1 - p) + c2.getBlue() * (p)), - (int) (c1.getAlpha() * (1 - p) + c2.getAlpha() * (p))); + (int) (c1.getRed() * (1 - p) + c2.getRed() * (p)), + (int) (c1.getGreen() * (1 - p) + c2.getGreen() * (p)), + (int) (c1.getBlue() * (1 - p) + c2.getBlue() * (p)), + (int) (c1.getAlpha() * (1 - p) + c2.getAlpha() * (p))); } public Color[] getColors() { return colors; } - public float[] getPositions() { - return positions; - } - public void setColors(Color[] colors) { this.colors = colors; } + public float[] getPositions() { + return positions; + } + public void setPositions(float[] positions) { this.positions = positions; } diff --git a/modules/UIUtils/src/main/java/org/gephi/ui/utils/IntervalBoundValidator.java b/modules/UIUtils/src/main/java/org/gephi/ui/utils/IntervalBoundValidator.java index 5daaf5dca4..aee9045072 100644 --- a/modules/UIUtils/src/main/java/org/gephi/ui/utils/IntervalBoundValidator.java +++ b/modules/UIUtils/src/main/java/org/gephi/ui/utils/IntervalBoundValidator.java @@ -39,21 +39,25 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.utils; import javax.swing.text.JTextComponent; +import org.gephi.graph.api.AttributeUtils; import org.netbeans.validation.api.Problems; import org.netbeans.validation.api.Validator; +import org.openide.util.NbBundle; /** - * Utils class to validate a string that contains a valid title for a column of - * a - * AttributeTable. + * Utils class to validate a single timestamp/datetime or an interval of a start and end timestamp/datetime. * - * @author Eduardo Ramos + * @author Eduardo Ramos */ public class IntervalBoundValidator implements Validator { + /** + * If not null, interval start <= end is also validated. + */ private JTextComponent intervalStartTextField = null; public IntervalBoundValidator() { @@ -64,29 +68,28 @@ public IntervalBoundValidator(JTextComponent intervalStartTextField) { } @Override - public boolean validate(Problems prblms, String componentName, String value) { - return false; -// try { -// double time = DynamicParser.parseTime(value); -// if (intervalStartTextField != null) { -// //Also validate that this (end time) is greater or equal than start time. -// try { -// double startTime = DynamicParser.parseTime(intervalStartTextField.getText()); -// if (time < startTime) { -// prblms.add(NbBundle.getMessage(IntervalBoundValidator.class, "IntervalBoundValidator.invalid.interval.message")); -// return false; -// } else { -// return true; -// } -// } catch (ParseException parseException) { -// return true; -// } -// } else { -// return true; -// } -// } catch (ParseException ex) { -// prblms.add(NbBundle.getMessage(IntervalBoundValidator.class, "IntervalBoundValidator.invalid.bound.message")); -// return false; -// } + public void validate(Problems prblms, String componentName, String value) { + try { + double time = AttributeUtils.parseDateTimeOrTimestamp(value); + if (intervalStartTextField != null) { + //Also validate that this (end time) is greater or equal than start time. + try { + double startTime = AttributeUtils.parseDateTimeOrTimestamp(intervalStartTextField.getText()); + if (time < startTime) { + prblms.add(NbBundle.getMessage(IntervalBoundValidator.class, + "IntervalBoundValidator.invalid.interval.message")); + } + } catch (Exception parseException) { + } + } + } catch (Exception ex) { + prblms + .add(NbBundle.getMessage(IntervalBoundValidator.class, "IntervalBoundValidator.invalid.bound.message")); + } + } + + @Override + public Class modelType() { + return String.class; } } diff --git a/modules/UIUtils/src/main/java/org/gephi/ui/utils/PrefsUtils.java b/modules/UIUtils/src/main/java/org/gephi/ui/utils/PrefsUtils.java index fbe473e4ea..fa0e27b1a5 100644 --- a/modules/UIUtils/src/main/java/org/gephi/ui/utils/PrefsUtils.java +++ b/modules/UIUtils/src/main/java/org/gephi/ui/utils/PrefsUtils.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.utils; import java.util.StringTokenizer; diff --git a/modules/UIUtils/src/main/java/org/gephi/ui/utils/SupportedColumnTypeWrapper.java b/modules/UIUtils/src/main/java/org/gephi/ui/utils/SupportedColumnTypeWrapper.java new file mode 100644 index 0000000000..c755219ace --- /dev/null +++ b/modules/UIUtils/src/main/java/org/gephi/ui/utils/SupportedColumnTypeWrapper.java @@ -0,0 +1,192 @@ +/* + Copyright 2008-2013 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.ui.utils; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.TimeRepresentation; +import org.gephi.utils.Attributes; + +/** + * Simple wrapper class for column type selection in UI. + * + * @author Eduardo Ramos + */ +public class SupportedColumnTypeWrapper implements Comparable { + + private static final List SIMPLE_TYPES_ORDER = Arrays.asList(new Class[] { + String.class, + Integer.class, + Long.class, + Float.class, + Double.class, + Boolean.class, + BigInteger.class, + BigDecimal.class, + Byte.class, + Short.class, + Character.class + }); + private final Class type; + + public SupportedColumnTypeWrapper(Class type) { + this.type = type; + } + + /** + * Build a list of column type wrappers from GraphStore supported types. + * + * @param graphModel + * @return Ordered column type wrappers list + */ + public static List buildOrderedSupportedTypesList(GraphModel graphModel) { + TimeRepresentation timeRepresentation = graphModel.getConfiguration().getTimeRepresentation(); + return buildOrderedSupportedTypesList(timeRepresentation); + } + + /** + * Build a list of column type wrappers from GraphStore supported types. + * + * @param timeRepresentation + * @return Ordered column type wrappers list + */ + public static List buildOrderedSupportedTypesList( + TimeRepresentation timeRepresentation) { + List supportedTypesWrappers = new ArrayList<>(); + + for (Class type : AttributeUtils.getSupportedTypes()) { + if (type.equals(Map.class) || type.equals(List.class) || type.equals(Set.class)) { + continue; + //Not yet supported in Gephi + } + + if (AttributeUtils.isStandardizedType(type) && Attributes.isTypeAvailable(type, timeRepresentation)) { + supportedTypesWrappers.add(new SupportedColumnTypeWrapper(type)); + } + } + + Collections.sort(supportedTypesWrappers); + + return supportedTypesWrappers; + } + + @Override + public String toString() { + if (AttributeUtils.isArrayType(type)) { + return String.format("%s list", type.getComponentType().getSimpleName()); + } else { + return type.getSimpleName(); + } + } + + public Class getType() { + return type; + } + + @Override + public int hashCode() { + int hash = 7; + hash = 17 * hash + (this.type != null ? this.type.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final SupportedColumnTypeWrapper other = (SupportedColumnTypeWrapper) obj; + return this.type == other.type || (this.type != null && this.type.equals(other.type)); + } + + /** + * Order for column types by name. Simple types appear first, then dynamic types and then array/list types. + * + * @param other + * @return + */ + @Override + public int compareTo(SupportedColumnTypeWrapper other) { + boolean isArray = type.isArray(); + boolean isArrayOther = other.type.isArray(); + + if (isArray != isArrayOther) { + if (isArray) { + return 1; + } else { + return -1; + } + } else { + boolean isDynamic = AttributeUtils.isDynamicType(type); + boolean isDynamicOther = AttributeUtils.isDynamicType(other.type); + + if (isDynamic != isDynamicOther) { + if (isDynamic) { + return 1; + } else { + return -1; + } + } else { + int i1 = SIMPLE_TYPES_ORDER.indexOf(type); + int i2 = SIMPLE_TYPES_ORDER.indexOf(other.type); + + if (i1 != -1 && i2 != -1) { + return i1 - i2; + } else { + return type.getSimpleName().compareTo(other.type.getSimpleName()); + } + } + } + } +} diff --git a/modules/UIUtils/src/main/java/org/gephi/ui/utils/TimeFormatWrapper.java b/modules/UIUtils/src/main/java/org/gephi/ui/utils/TimeFormatWrapper.java new file mode 100644 index 0000000000..a6a12a8074 --- /dev/null +++ b/modules/UIUtils/src/main/java/org/gephi/ui/utils/TimeFormatWrapper.java @@ -0,0 +1,89 @@ +/* +Copyright 2008-2017 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2017 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2017 Gephi Consortium. + */ + +package org.gephi.ui.utils; + +import org.gephi.graph.api.TimeFormat; +import org.openide.util.NbBundle; + +/** + * @author Eduardo Ramos + */ +public class TimeFormatWrapper { + + private final TimeFormat timeFormat; + + public TimeFormatWrapper(TimeFormat timeFormat) { + this.timeFormat = timeFormat; + } + + @Override + public int hashCode() { + int hash = 7; + hash = 53 * hash + (this.timeFormat != null ? this.timeFormat.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final TimeFormatWrapper other = (TimeFormatWrapper) obj; + return this.timeFormat == other.timeFormat; + } + + public TimeFormat getTimeFormat() { + return timeFormat; + } + + @Override + public String toString() { + return NbBundle.getMessage(TimeFormatWrapper.class, "TimeFormatWrapper.timeFormat." + timeFormat.name()); + } +} diff --git a/modules/UIUtils/src/main/java/org/gephi/ui/utils/TimeRepresentationWrapper.java b/modules/UIUtils/src/main/java/org/gephi/ui/utils/TimeRepresentationWrapper.java new file mode 100644 index 0000000000..c0dad26624 --- /dev/null +++ b/modules/UIUtils/src/main/java/org/gephi/ui/utils/TimeRepresentationWrapper.java @@ -0,0 +1,91 @@ +/* +Copyright 2008-2017 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2017 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2017 Gephi Consortium. + */ + +package org.gephi.ui.utils; + +import org.gephi.graph.api.TimeRepresentation; +import org.openide.util.NbBundle; + +/** + * @author Eduardo Ramos + */ +public class TimeRepresentationWrapper { + + private final TimeRepresentation timeRepresentation; + + public TimeRepresentationWrapper(TimeRepresentation timeRepresentation) { + this.timeRepresentation = timeRepresentation; + } + + @Override + public int hashCode() { + int hash = 3; + hash = 41 * hash + (this.timeRepresentation != null ? this.timeRepresentation.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final TimeRepresentationWrapper other = (TimeRepresentationWrapper) obj; + return this.timeRepresentation == other.timeRepresentation; + } + + @Override + public String toString() { + return NbBundle.getMessage(TimeRepresentationWrapper.class, + "TimeRepresentationWrapper.timeRepresentation." + timeRepresentation.name()); + } + + public TimeRepresentation getTimeRepresentation() { + return timeRepresentation; + } + +} diff --git a/modules/UIUtils/src/main/java/org/gephi/ui/utils/TimeZoneWrapper.java b/modules/UIUtils/src/main/java/org/gephi/ui/utils/TimeZoneWrapper.java new file mode 100644 index 0000000000..8975b7e1f9 --- /dev/null +++ b/modules/UIUtils/src/main/java/org/gephi/ui/utils/TimeZoneWrapper.java @@ -0,0 +1,105 @@ +/* +Copyright 2008-2017 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2017 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2017 Gephi Consortium. + */ + +package org.gephi.ui.utils; + +import java.util.TimeZone; +import java.util.concurrent.TimeUnit; + +/** + * @author Eduardo Ramos + */ +public class TimeZoneWrapper { + + private final TimeZone timeZone; + private final long currentTimestamp; + + public TimeZoneWrapper(TimeZone timeZone, long currentTimestamp) { + this.timeZone = timeZone; + this.currentTimestamp = currentTimestamp; + } + + private String getTimeZoneText() { + int offset = timeZone.getOffset(currentTimestamp); + long hours = TimeUnit.MILLISECONDS.toHours(offset); + long minutes = TimeUnit.MILLISECONDS.toMinutes(offset) + - TimeUnit.HOURS.toMinutes(hours); + minutes = Math.abs(minutes); + + if (hours >= 0) { + return String.format("%s (GMT+%d:%02d)", timeZone.getID(), hours, minutes); + } else { + return String.format("%s (GMT%d:%02d)", timeZone.getID(), hours, minutes); + } + } + + @Override + public int hashCode() { + int hash = 5; + hash = 97 * hash + (this.timeZone != null ? this.timeZone.hashCode() : 0); + return hash; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (getClass() != obj.getClass()) { + return false; + } + final TimeZoneWrapper other = (TimeZoneWrapper) obj; + return this.timeZone == other.timeZone || (this.timeZone != null && this.timeZone.equals(other.timeZone)); + } + + @Override + public String toString() { + return getTimeZoneText(); + } + + public TimeZone getTimeZone() { + return timeZone; + } +} diff --git a/modules/UIUtils/src/main/java/org/gephi/ui/utils/UIUtils.java b/modules/UIUtils/src/main/java/org/gephi/ui/utils/UIUtils.java index 3427160166..c673263762 100644 --- a/modules/UIUtils/src/main/java/org/gephi/ui/utils/UIUtils.java +++ b/modules/UIUtils/src/main/java/org/gephi/ui/utils/UIUtils.java @@ -38,20 +38,25 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ + package org.gephi.ui.utils; // Copied from org.netbeans.lib.profiler.ui + import java.awt.Color; import java.awt.Component; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Image; -import java.awt.Rectangle; import java.awt.Toolkit; import java.awt.Window; import java.awt.image.BufferedImage; +import java.awt.image.FilteredImageSource; +import java.awt.image.ImageFilter; +import java.awt.image.ImageProducer; import java.awt.image.PixelGrabber; +import java.awt.image.RGBImageFilter; import java.lang.reflect.InvocationTargetException; import javax.swing.AbstractButton; import javax.swing.JLabel; @@ -61,8 +66,8 @@ Development and Distribution License("CDDL") (collectively, the import javax.swing.JViewport; import javax.swing.SwingUtilities; import javax.swing.UIManager; -import javax.swing.plaf.basic.BasicButtonListener; import javax.swing.table.JTableHeader; +import org.openide.util.Exceptions; //Copied from org.netbeans.lib.profiler.ui public final class UIUtils { @@ -72,61 +77,107 @@ public final class UIUtils { private static Color unfocusedSelFg; //~ Methods ------------------------------------------------------------------------------------------------------------------ - /** Determines if current L&F is AquaLookAndFeel */ + private static Color profilerResultsBackground; + + /** + * Determines if current Look and Feel is AquaLookAndFeel. + * + * @return true if aqua look and feel + */ public static boolean isAquaLookAndFeel() { - // is current L&F some kind of AquaLookAndFeel? + // is current Look and Feel some kind of AquaLookAndFeel? return UIManager.getLookAndFeel().getID().equals("Aqua"); //NOI18N } + public static boolean isFlatLafLookAndFeel() { + return UIManager.getLookAndFeel().getName().contains("FlatLaf"); //NOI18N + } + + public static boolean isFlatLafLightLookAndFeel() { + return UIManager.getLookAndFeel().getID().contains("FlatLaf Light"); //NOI18N + } + + public static boolean isFlatLafDarkLookAndFeel() { + return UIManager.getLookAndFeel().getName().contains("FlatLaf Dark"); //NOI18N + } + + public static boolean isDarkLookAndFeel() { + return isFlatLafDarkLookAndFeel(); + } + public static Color getDarker(Color c) { if (c.equals(Color.WHITE)) { return new Color(244, 244, 244); } - return getSafeColor((int) (c.getRed() * ALTERNATE_ROW_DARKER_FACTOR), (int) (c.getGreen() * ALTERNATE_ROW_DARKER_FACTOR), - (int) (c.getBlue() * ALTERNATE_ROW_DARKER_FACTOR)); + return getSafeColor((int) (c.getRed() * ALTERNATE_ROW_DARKER_FACTOR), + (int) (c.getGreen() * ALTERNATE_ROW_DARKER_FACTOR), + (int) (c.getBlue() * ALTERNATE_ROW_DARKER_FACTOR)); } public static Color getForegroundColorForBackground(Color background) { - return (background.getRed() < 100 || background.getGreen() < 100 || background.getRed() < 100) ? Color.white : Color.black; + return (background.getRed() < 100 || background.getGreen() < 100 || background.getRed() < 100) ? Color.white : + Color.black; } public static Color getDarkerLine(Color c, float alternateRowDarkerFactor) { - return getSafeColor((int) (c.getRed() * alternateRowDarkerFactor), (int) (c.getGreen() * alternateRowDarkerFactor), - (int) (c.getBlue() * alternateRowDarkerFactor)); + return getSafeColor((int) (c.getRed() * alternateRowDarkerFactor), + (int) (c.getGreen() * alternateRowDarkerFactor), + (int) (c.getBlue() * alternateRowDarkerFactor)); } public static int getDefaultRowHeight() { return new JLabel("X").getPreferredSize().height + 2; //NOI18N } - /** Determines if current L&F is GTKLookAndFeel */ + /** + * Determines if current Look and Feel is GTKLookAndFeel. + * + * @return true if gtk look and feel + */ public static boolean isGTKLookAndFeel() { - // is current L&F some kind of GTKLookAndFeel? + // is current Look and Feel some kind of GTKLookAndFeel? return UIManager.getLookAndFeel().getID().equals("GTK"); //NOI18N } - /** Determines if current L&F is Nimbus */ + /** + * Determines if current Look and Feel is Nimbus. + * + * @return true if nimbus look and feel + */ public static boolean isNimbusLookAndFeel() { - // is current L&F Nimbus? + // is current Look and Feel Nimbus? return UIManager.getLookAndFeel().getID().equals("Nimbus"); //NOI18N } - /** Determines if current L&F is GTK using Nimbus theme */ + /** + * Determines if current Look and Feel is GTK using Nimbus theme. + * + * @return true if nimbus gtk theme + */ public static boolean isNimbusGTKTheme() { - // is current L&F GTK using Nimbus theme? - return isGTKLookAndFeel() && "nimbus".equals(Toolkit.getDefaultToolkit().getDesktopProperty("gnome.Net/ThemeName")); //NOI18N + // is current Look and Feel GTK using Nimbus theme? + return isGTKLookAndFeel() && + "nimbus".equals(Toolkit.getDefaultToolkit().getDesktopProperty("gnome.Net/ThemeName")); //NOI18N } - /** Determines if current L&F is Nimbus or GTK with Nimbus theme*/ + /** + * Determines if current Look and Feel is Nimbus or GTK with Nimbus theme. + * + * @return true if nimbus + */ public static boolean isNimbus() { - // is current L&F Nimbus or GTK with Nimbus theme? + // is current Look and Feel Nimbus or GTK with Nimbus theme? return isNimbusLookAndFeel() || isNimbusGTKTheme(); } - /** Determines if current L&F is MetalLookAndFeel */ + /** + * Determines if current Look and Feel is MetalLookAndFeel. + * + * @return true if metal look and feel + */ public static boolean isMetalLookAndFeel() { - // is current L&F some kind of MetalLookAndFeel? + // is current Look and Feel some kind of MetalLookAndFeel? return UIManager.getLookAndFeel().getID().equals("Metal"); //NOI18N } @@ -176,6 +227,8 @@ public static int getPreviousSubTabIndex(JTabbedPane tabs, int tabIndex) { return previousTabIndex; } + // Copied from org.openide.awt.HtmlLabelUI + public static Color getSafeColor(int red, int green, int blue) { red = Math.max(red, 0); red = Math.min(red, 255); @@ -188,7 +241,12 @@ public static Color getSafeColor(int red, int green, int blue) { } // Copied from org.openide.awt.HtmlLabelUI - /** Get the system-wide unfocused selection background color */ + + /** + * Get the system-wide unfocused selection background color. + * + * @return unfocused selection background + */ public static Color getUnfocusedSelectionBackground() { if (unfocusedSelBg == null) { //allow theme/ui custom definition @@ -214,8 +272,11 @@ public static Color getUnfocusedSelectionBackground() { return unfocusedSelBg; } - // Copied from org.openide.awt.HtmlLabelUI - /** Get the system-wide unfocused selection foreground color */ + /** + * Get the system-wide unfocused selection foreground color. + * + * @return unfocused selection foreground + */ public static Color getUnfocusedSelectionForeground() { if (unfocusedSelFg == null) { //allow theme/ui custom definition @@ -234,7 +295,6 @@ public static Color getUnfocusedSelectionForeground() { return unfocusedSelFg; } - private static Color profilerResultsBackground; private static Color getGTKProfilerResultsBackground() { int[] pixels = new int[1]; @@ -246,7 +306,8 @@ private static Color getGTKProfilerResultsBackground() { textArea.doLayout(); // Print the textarea to an image - Image image = new BufferedImage(textArea.getSize().width, textArea.getSize().height, BufferedImage.TYPE_INT_RGB); + Image image = + new BufferedImage(textArea.getSize().width, textArea.getSize().height, BufferedImage.TYPE_INT_RGB); textArea.printAll(image.getGraphics()); // Grab appropriate pixels to get the color @@ -282,7 +343,11 @@ public static Color getProfilerResultsBackground() { return profilerResultsBackground; } - /** Determines if current L&F is Windows Classic LookAndFeel */ + /** + * Determines if current Look and Feel is Windows Classic LookAndFeel. + * + * @return true if windows classic look and feel + */ public static boolean isWindowsClassicLookAndFeel() { if (!isWindowsLookAndFeel()) { return false; @@ -291,20 +356,29 @@ public static boolean isWindowsClassicLookAndFeel() { return (!isWindowsXPLookAndFeel() && !isWindowsVistaLookAndFeel()); } - /** Determines if current L&F is WindowsLookAndFeel */ + /** + * Determines if current Look and Feel is WindowsLookAndFeel. + * + * @return true if windows look and feel + */ public static boolean isWindowsLookAndFeel() { - // is current L&F some kind of WindowsLookAndFeel? + // is current Look and Feel some kind of WindowsLookAndFeel? return UIManager.getLookAndFeel().getID().equals("Windows"); //NOI18N } - /** Determines if current L&F is Windows XP LookAndFeel */ + /** + * Determines if current Look and Feel is Windows XP LookAndFeel. + * + * @return true if windows xp look and feel + */ public static boolean isWindowsXPLookAndFeel() { if (!isWindowsLookAndFeel()) { return false; } // is XP theme active in the underlying OS? - boolean xpThemeActiveOS = Boolean.TRUE.equals(Toolkit.getDefaultToolkit().getDesktopProperty("win.xpstyle.themeActive")); //NOI18N + boolean xpThemeActiveOS = + Boolean.TRUE.equals(Toolkit.getDefaultToolkit().getDesktopProperty("win.xpstyle.themeActive")); //NOI18N // is XP theme disabled by the application? boolean xpThemeDisabled = (System.getProperty("swing.noxp") != null); // NOI18N @@ -314,13 +388,19 @@ public static boolean isWindowsXPLookAndFeel() { return ((xpThemeActiveOS) && (!xpThemeDisabled) && !vistaOs); } + /** + * Determines if current Look and Feel is Windows XP LookAndFeel. + * + * @return true if windows vista look and feel + */ public static boolean isWindowsVistaLookAndFeel() { if (!isWindowsLookAndFeel()) { return false; } // is XP theme active in the underlying OS? - boolean xpThemeActiveOS = Boolean.TRUE.equals(Toolkit.getDefaultToolkit().getDesktopProperty("win.xpstyle.themeActive")); //NOI18N + boolean xpThemeActiveOS = + Boolean.TRUE.equals(Toolkit.getDefaultToolkit().getDesktopProperty("win.xpstyle.themeActive")); //NOI18N // is XP theme disabled by the application? boolean xpThemeDisabled = (System.getProperty("swing.noxp") != null); // NOI18N @@ -333,55 +413,18 @@ public static boolean isWindowsVistaLookAndFeel() { // Classic Windows LaF doesn't draw dotted focus rectangle inside JButton if parent is JToolBar, // XP Windows LaF doesn't draw dotted focus rectangle inside JButton at all // This method installs customized Windows LaF that draws dotted focus rectangle inside JButton always - // On JDK 1.5 the XP Windows LaF enforces special border to all buttons, overriding any custom border // set by setBorder(). Class responsible for this is WindowsButtonListener. See Issue 71546. // Also fixes buttons size in JToolbar. - /** Ensures that focus will be really painted if button is focused - * and fixes using custom border for JDK 1.5 & XP LaF + + /** + * Ensures that focus will be really painted if button is focused and fixes + * using custom border for JDK 1.5 and XP LaF + * + * @param button button */ public static void fixButtonUI(AbstractButton button) { - // JButton - if (button.getUI() instanceof com.sun.java.swing.plaf.windows.WindowsButtonUI) { - button.setUI(new com.sun.java.swing.plaf.windows.WindowsButtonUI() { - - @Override - protected BasicButtonListener createButtonListener(AbstractButton b) { - return new BasicButtonListener(b); // Fix for Issue 71546 - } - - @Override - protected void paintFocus(Graphics g, AbstractButton b, Rectangle viewRect, Rectangle textRect, - Rectangle iconRect) { - int width = b.getWidth(); - int height = b.getHeight(); - g.setColor(getFocusColor()); - javax.swing.plaf.basic.BasicGraphicsUtils.drawDashedRect(g, dashedRectGapX, dashedRectGapY, - width - dashedRectGapWidth, - height - dashedRectGapHeight); - } - }); - } // JToggleButton - else if (button.getUI() instanceof com.sun.java.swing.plaf.windows.WindowsToggleButtonUI) { - button.setUI(new com.sun.java.swing.plaf.windows.WindowsToggleButtonUI() { - - @Override - protected BasicButtonListener createButtonListener(AbstractButton b) { - return new BasicButtonListener(b); // Fix for Issue 71546 - } - - @Override - protected void paintFocus(Graphics g, AbstractButton b, Rectangle viewRect, Rectangle textRect, - Rectangle iconRect) { - int width = b.getWidth(); - int height = b.getHeight(); - g.setColor(getFocusColor()); - javax.swing.plaf.basic.BasicGraphicsUtils.drawDashedRect(g, dashedRectGapX, dashedRectGapY, - width - dashedRectGapWidth, - height - dashedRectGapHeight); - } - }); - } + // Doesn't seem to be necessary any more, conflicts with Jigsaw } private static BufferedImage createTableScreenshot(Component component) { @@ -421,7 +464,7 @@ private static BufferedImage createTableScreenshot(Component component) { Dimension tableHeaderSize = tableHeader.getSize(); BufferedImage tableScreenshot = new BufferedImage(sourceSize.width, tableHeaderSize.height + sourceSize.height, - BufferedImage.TYPE_INT_RGB); + BufferedImage.TYPE_INT_RGB); final Graphics tableScreenshotGraphics = tableScreenshot.getGraphics(); // Component.printAll has to run in AWT Thread to print component contents correctly @@ -483,7 +526,8 @@ private static BufferedImage createGeneralComponentScreenshot(Component componen sourceSize = component.getSize(); } - BufferedImage componentScreenshot = new BufferedImage(sourceSize.width, sourceSize.height, BufferedImage.TYPE_INT_RGB); + BufferedImage componentScreenshot = + new BufferedImage(sourceSize.width, sourceSize.height, BufferedImage.TYPE_INT_RGB); Graphics componentScreenshotGraphics = componentScreenshot.getGraphics(); source.printAll(componentScreenshotGraphics); @@ -504,10 +548,8 @@ public static void runInEventDispatchThreadAndWait(final Runnable r) { } else { try { SwingUtilities.invokeAndWait(r); - } catch (InvocationTargetException e) { - e.printStackTrace(); - } catch (InterruptedException e) { - e.printStackTrace(); + } catch (InvocationTargetException | InterruptedException e) { + Exceptions.printStackTrace(e); } } } @@ -519,7 +561,8 @@ public static BufferedImage createComponentScreenshot(final Component component) @Override public void run() { - if (component instanceof JTable || (component instanceof JViewport && ((JViewport) component).getView() instanceof JTable)) { + if (component instanceof JTable || + (component instanceof JViewport && ((JViewport) component).getView() instanceof JTable)) { result[0] = createTableScreenshot(component); } else { result[0] = createGeneralComponentScreenshot(component); @@ -539,4 +582,39 @@ public void run() { return result[0]; } + + static Image generateFilteredImage(Image image, ImageFilter filter) { + final ImageProducer prod = new FilteredImageSource(image.getSource(), filter); + return Toolkit.getDefaultToolkit().createImage(prod); + } + + private static Image map(Image image, ImageFilter filter) { + return generateFilteredImage(image, filter); + } + + private abstract static class IconImageFilter extends RGBImageFilter { + IconImageFilter() { + super(); + canFilterIndexColorModel = true; + } + + @Override + public final int filterRGB(final int x, final int y, final int rgb) { + final int red = (rgb >> 16) & 0xff; + final int green = (rgb >> 8) & 0xff; + final int blue = rgb & 0xff; + final int gray = getGreyFor((int)((0.30 * red + 0.59 * green + 0.11 * blue) / 3)); + + return (rgb & 0xff000000) | (grayTransform(red, gray) << 16) | (grayTransform(green, gray) << 8) | (grayTransform(blue, gray) << 0); + } + + private static int grayTransform(final int color, final int gray) { + int result = color - gray; + if (result < 0) result = 0; + if (result > 255) result = 255; + return result; + } + + abstract int getGreyFor(int gray); + } } diff --git a/modules/UIUtils/src/main/java/org/gephi/ui/utils/WhiteFilter.java b/modules/UIUtils/src/main/java/org/gephi/ui/utils/WhiteFilter.java index eff7c1ca6f..e4d689adb1 100644 --- a/modules/UIUtils/src/main/java/org/gephi/ui/utils/WhiteFilter.java +++ b/modules/UIUtils/src/main/java/org/gephi/ui/utils/WhiteFilter.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.ui.utils; import java.awt.Color; @@ -57,6 +58,7 @@ public final class WhiteFilter extends RGBImageFilter { private final float[] hsv = new float[3]; //~ Constructors --------------------------------------------------------------------------------------------------------- + /** * Constructs a GrayFilter object that filters a color image to a * grayscale image. Used by buttons to create disabled ("grayed out") @@ -71,6 +73,7 @@ public WhiteFilter() { } //~ Methods -------------------------------------------------------------------------------------------------------------- + /** * Creates a disabled image */ diff --git a/modules/UIUtils/src/main/nbm/manifest.mf b/modules/UIUtils/src/main/nbm/manifest.mf index 2e13c1cfad..2de9945441 100644 --- a/modules/UIUtils/src/main/nbm/manifest.mf +++ b/modules/UIUtils/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/ui/utils/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi UI +OpenIDE-Module-Name: UI Utils \ No newline at end of file diff --git a/modules/UIUtils/src/main/nbm/module.xml b/modules/UIUtils/src/main/nbm/module.xml deleted file mode 100644 index 7d5bdcf46f..0000000000 --- a/modules/UIUtils/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle.properties b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle.properties new file mode 100644 index 0000000000..19d42b1106 --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle.properties @@ -0,0 +1,3 @@ +PositiveNumberValidator_NOT_POSITIVE = {0} must be a positive number +BetweenZeroAndOneValidator_NOT_IN_RANGE {0} must be a real number between 0 and 1 +Multiple4NumberValidator_NOT_MULTIPLE {0} must be a multiple of 4 number diff --git a/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_ar.properties b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_ca.properties b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_ca.properties new file mode 100644 index 0000000000..41e315702a --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_ca.properties @@ -0,0 +1,3 @@ +PositiveNumberValidator_NOT_POSITIVE = {0} ha de ser un nombre positiu +BetweenZeroAndOneValidator_NOT_IN_RANGE {0} ha de ser un nombre entre 0 i 1 +Multiple4NumberValidator_NOT_MULTIPLE {0} ha de ser un m\u00faltiple de 4 diff --git a/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_cs.properties b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_cs.properties new file mode 100644 index 0000000000..854fd7c289 --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_cs.properties @@ -0,0 +1,3 @@ +PositiveNumberValidator_NOT_POSITIVE = {0} mus\u00ed b\u00fdt kladn\u00e9 \u010d\u00edslo +BetweenZeroAndOneValidator_NOT_IN_RANGE {0} mus\u00ed b\u00fdt re\u00e1ln\u00e9 \u010d\u00edslo mezi 0 a 1 +Multiple4NumberValidator_NOT_MULTIPLE {0} mus\u00ed b\u00fdt n\u00e1sobek \u010d\u00edsla 4 diff --git a/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_de.properties b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_de.properties new file mode 100644 index 0000000000..e589484a93 --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_de.properties @@ -0,0 +1,3 @@ +PositiveNumberValidator_NOT_POSITIVE = {0} muss eine positive Zahl sein +BetweenZeroAndOneValidator_NOT_IN_RANGE {0} muss eine reele Zahl zwischen 0 und 1 sein +Multiple4NumberValidator_NOT_MULTIPLE {0} muss ein Vielfaches der Zahl 4 sein diff --git a/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_es.properties b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_es.properties new file mode 100644 index 0000000000..6f6f9b20da --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_es.properties @@ -0,0 +1,3 @@ +PositiveNumberValidator_NOT_POSITIVE = {0} debe ser un n\u00famero positivo +BetweenZeroAndOneValidator_NOT_IN_RANGE {0} debe ser un n\u00famero real entre 0 y 1 +Multiple4NumberValidator_NOT_MULTIPLE {0} deber ser un m\u00faltiplo de 4 diff --git a/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_fr.properties b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_fr.properties new file mode 100644 index 0000000000..0f85c6866a --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_fr.properties @@ -0,0 +1,3 @@ +PositiveNumberValidator_NOT_POSITIVE = {0} soit \u00eatre un nombre positif +BetweenZeroAndOneValidator_NOT_IN_RANGE {0} doit \u00eatre un nombre r\u00e9el compris ente 0 et 1 +Multiple4NumberValidator_NOT_MULTIPLE {0} doit \u00eatre un multiple de 4 diff --git a/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_he.properties b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_he.properties new file mode 100644 index 0000000000..89f0565777 --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_he.properties @@ -0,0 +1,3 @@ +PositiveNumberValidator_NOT_POSITIVE={0} must be a positive number +BetweenZeroAndOneValidator_NOT_IN_RANGE {0} must be a real number between 0 and 1 +Multiple4NumberValidator_NOT_MULTIPLE {0} must be a multiple of 4 number diff --git a/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_hu.properties b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_hu.properties new file mode 100644 index 0000000000..5ca9cb7cae --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_hu.properties @@ -0,0 +1,5 @@ + + +PositiveNumberValidator_NOT_POSITIVE=A(z) {0} pozit\u00EDv sz\u00E1mnak kell lennie +Multiple4NumberValidator_NOT_MULTIPLE A(z) {0} sz\u00E1mnak 4 t\u00F6bbsz\u00F6r\u00F6s\u00E9nek kell lennie +BetweenZeroAndOneValidator_NOT_IN_RANGE A {0} 0 \u00E9s 1 k\u00F6z\u00F6tti val\u00F3s sz\u00E1mnak kell lennie diff --git a/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_it.properties b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_it.properties new file mode 100644 index 0000000000..89f0565777 --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_it.properties @@ -0,0 +1,3 @@ +PositiveNumberValidator_NOT_POSITIVE={0} must be a positive number +BetweenZeroAndOneValidator_NOT_IN_RANGE {0} must be a real number between 0 and 1 +Multiple4NumberValidator_NOT_MULTIPLE {0} must be a multiple of 4 number diff --git a/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_ja.properties b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_ja.properties new file mode 100644 index 0000000000..a4756bee86 --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_ja.properties @@ -0,0 +1,3 @@ +PositiveNumberValidator_NOT_POSITIVE = {0}\u306f\u6b63\u306e\u6570\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093 +BetweenZeroAndOneValidator_NOT_IN_RANGE {0}\u306f0\u30681\u306e\u9593\u306e\u5b9f\u6570\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093 +Multiple4NumberValidator_NOT_MULTIPLE {0} 4\u6570\u306e\u500d\u6570\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093 diff --git a/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_ko.properties b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_ko.properties new file mode 100644 index 0000000000..e8de708ef3 --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_ko.properties @@ -0,0 +1,5 @@ + + +PositiveNumberValidator_NOT_POSITIVE={0}\uC740 \uC591\uC218\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4 +BetweenZeroAndOneValidator_NOT_IN_RANGE {0}\uC740 0\uACFC 1 \uC0AC\uC774\uC758 \uC2E4\uC218\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4 +Multiple4NumberValidator_NOT_MULTIPLE {0}\uC740 4\uC758 \uBC30\uC218\uC774\uC5B4\uC57C \uD569\uB2C8\uB2E4 diff --git a/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_nl.properties b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_nl.properties new file mode 100644 index 0000000000..89f0565777 --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_nl.properties @@ -0,0 +1,3 @@ +PositiveNumberValidator_NOT_POSITIVE={0} must be a positive number +BetweenZeroAndOneValidator_NOT_IN_RANGE {0} must be a real number between 0 and 1 +Multiple4NumberValidator_NOT_MULTIPLE {0} must be a multiple of 4 number diff --git a/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_pt_BR.properties b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_pt_BR.properties new file mode 100644 index 0000000000..0bb6fa6085 --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_pt_BR.properties @@ -0,0 +1,3 @@ +PositiveNumberValidator_NOT_POSITIVE = {0} deve ser um n\u00famero positivo +BetweenZeroAndOneValidator_NOT_IN_RANGE {0} deve ser um n\u00famero real entre 0 e 1 +Multiple4NumberValidator_NOT_MULTIPLE {0} deve ser um m\u00faltiplo de 4 diff --git a/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_ro.properties b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_ro.properties new file mode 100644 index 0000000000..bd54101ad9 --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_ro.properties @@ -0,0 +1,5 @@ + + +PositiveNumberValidator_NOT_POSITIVE={0} trebuie s\u0103 fie un num\u0103r pozitiv +BetweenZeroAndOneValidator_NOT_IN_RANGE {0} trebuie s\u0103 fie un num\u0103r real \u00EEntre 0 \u0219i 1 +Multiple4NumberValidator_NOT_MULTIPLE {0} trebuie s\u0103 fie un multiplu de 4 diff --git a/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_ru.properties b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_ru.properties new file mode 100644 index 0000000000..a9be591189 --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_ru.properties @@ -0,0 +1,3 @@ +PositiveNumberValidator_NOT_POSITIVE = \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {0} \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c +BetweenZeroAndOneValidator_NOT_IN_RANGE \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {0} \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c \u043e\u0442 0 \u0434\u043e 1 +Multiple4NumberValidator_NOT_MULTIPLE \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {0} \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043a\u0440\u0430\u0442\u043d\u044b\u043c 4 diff --git a/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_th.properties b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_tr.properties b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_tr.properties new file mode 100644 index 0000000000..89f0565777 --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_tr.properties @@ -0,0 +1,3 @@ +PositiveNumberValidator_NOT_POSITIVE={0} must be a positive number +BetweenZeroAndOneValidator_NOT_IN_RANGE {0} must be a real number between 0 and 1 +Multiple4NumberValidator_NOT_MULTIPLE {0} must be a multiple of 4 number diff --git a/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_uk.properties b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_uk.properties new file mode 100644 index 0000000000..86b61f9778 --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_uk.properties @@ -0,0 +1,3 @@ +PositiveNumberValidator_NOT_POSITIVE={0} \u043C\u0430\u0454 \u0431\u0443\u0442\u0438 \u0434\u043E\u0434\u0430\u0442\u043D\u0438\u043C \u0447\u0438\u0441\u043B\u043E\u043C +BetweenZeroAndOneValidator_NOT_IN_RANGE {0} \u043C\u0430\u0454 \u0431\u0443\u0442\u0438 \u0434\u0456\u0439\u0441\u043D\u0438\u043C \u0447\u0438\u0441\u043B\u043E\u043C \u0432\u0456\u0434 0 \u0434\u043E 1 +Multiple4NumberValidator_NOT_MULTIPLE {0} \u043C\u0430\u0454 \u0431\u0443\u0442\u0438 \u043A\u0440\u0430\u0442\u043D\u0438\u043C 4 diff --git a/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_zh_CN.properties b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_zh_CN.properties new file mode 100644 index 0000000000..4c822cb85d --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_zh_CN.properties @@ -0,0 +1,3 @@ +PositiveNumberValidator_NOT_POSITIVE = {0}\u5fc5\u987b\u662f\u6b63\u6570 +BetweenZeroAndOneValidator_NOT_IN_RANGE {0}\u5fc5\u987b\u662f0\u52301\u4e4b\u95f4\u7684\u5b9e\u6570 +Multiple4NumberValidator_NOT_MULTIPLE {0}\u5fc5\u987b\u662f\u591a\u4e2a4 diff --git a/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_zh_TW.properties b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_zh_TW.properties new file mode 100644 index 0000000000..89f0565777 --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/lib/validation/Bundle_zh_TW.properties @@ -0,0 +1,3 @@ +PositiveNumberValidator_NOT_POSITIVE={0} must be a positive number +BetweenZeroAndOneValidator_NOT_IN_RANGE {0} must be a real number between 0 and 1 +Multiple4NumberValidator_NOT_MULTIPLE {0} must be a multiple of 4 number diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle.properties b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle.properties index 63df2211f4..9f5e63d836 100644 --- a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle.properties +++ b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle.properties @@ -1,7 +1,4 @@ -OpenIDE-Module-Display-Category=Gephi UI -OpenIDE-Module-Long-Description=\ - Utils classes for UI -OpenIDE-Module-Name=UI Utils +OpenIDE-Module-Long-Description=Utils classes for UI OpenIDE-Module-Short-Description=Utils classes for UI ColumnTitleValidator.title.empty=Column title can't be empty ColumnTitleValidator.title.repeated=Column title can't be repeated in the same table @@ -24,3 +21,11 @@ ChartsUtils.report.histogram.title=Histogram ChartsUtils.report.histogram.yLabel=Frequency IntervalBoundValidator.invalid.bound.message=Invalid interval bound (must be a float number or a date) IntervalBoundValidator.invalid.interval.message=Invalid interval (start must be lesser or equal than end) + +TimeFormatWrapper.timeFormat.DOUBLE=Double +TimeFormatWrapper.timeFormat.DATE=Date +TimeFormatWrapper.timeFormat.DATETIME=Date and time + +TimeRepresentationWrapper.timeRepresentation.INTERVAL=Intervals +TimeRepresentationWrapper.timeRepresentation.TIMESTAMP=Timestamps +TimeRepresentationWrapper.timeRepresentation.disabled.tooltip=Time representation can only be changed when the graph is empty \ No newline at end of file diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_ar.properties b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_ca.properties b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_ca.properties new file mode 100644 index 0000000000..2ed25ae24d --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_ca.properties @@ -0,0 +1,29 @@ +OpenIDE-Module-Long-Description=Classes ϊtils per a la interfνcie d'usuari +OpenIDE-Module-Short-Description=Classes ϊtils per a la interfνcie d'usuari +ColumnTitleValidator.title.empty=El tνtol de la columna no pot quedar buit +ColumnTitleValidator.title.repeated=Un tνtol no pot repetir-se en una taula +ChartsUtils.report.header=

              Informe de valors estadνstics per a "{0}"

              +ChartsUtils.report.empty=No hi ha dades numθriques per calcular estadνstiques +ChartsUtils.report.average=Mitjana +ChartsUtils.report.Q1=Primer quartil (Q1) +ChartsUtils.report.median=Mediana +ChartsUtils.report.Q3=Tercer Quartil (Q3) +ChartsUtils.report.IQR=Rang interquartνlic (IQR) +ChartsUtils.report.sum=Suma +ChartsUtils.report.min=Mνnim +ChartsUtils.report.max=Mΰxim +ChartsUtils.report.box-plot.title=Diagrama de caixa +ChartsUtils.report.box-plot.values=Valors +ChartsUtils.report.box-plot.values-range=Amplitud dels valors +ChartsUtils.report.scatter-plot.title=Diagrama de dispersiσ +ChartsUtils.report.scatter-plot.xLabel=Valors +ChartsUtils.report.histogram.title=Historiograma +ChartsUtils.report.histogram.yLabel=Freqόθncia +IntervalBoundValidator.invalid.bound.message=El lνmit de l'interval no ιs vΰlid (ha de ser un nombre amb coma o una data) +IntervalBoundValidator.invalid.interval.message=L'interval no ιs vΰlid (ha de ser menor o igual que el final) +TimeFormatWrapper.timeFormat.DOUBLE=Double +TimeFormatWrapper.timeFormat.DATE=Data +TimeFormatWrapper.timeFormat.DATETIME=Date and time +TimeRepresentationWrapper.timeRepresentation.INTERVAL=Intervals +TimeRepresentationWrapper.timeRepresentation.TIMESTAMP=Timestamps +TimeRepresentationWrapper.timeRepresentation.disabled.tooltip=Time representation can only be changed when the graph is empty diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_cs.properties b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_cs.properties index 9597067766..cd11ac1f38 100644 --- a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_cs.properties +++ b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_cs.properties @@ -1,53 +1,31 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:05+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=T\u0159\u00edda n\u00e1stroj\u016f pro rozhran\u00ed - -OpenIDE-Module-Short-Description=T\u0159\u00edda n\u00e1stroj\u016f pro rozhran\u00ed - -ColumnTitleValidator.title.empty=N\u00e1zev sloupce nem\u016f\u017ee b\u00fdt pr\u00e1zdn\u00fd - -ColumnTitleValidator.title.repeated=N\u00e1zev sloupce se nem\u016f\u017ee opakovat ve stejn\u00e9 tabulce - -ChartsUtils.report.header=

              Z\u00e1znam statistick\u00fdch hodnot pro ''{0}''

              - -ChartsUtils.report.empty=Neexistuj\u00ed \u017e\u00e1dn\u00e1 \u010d\u00edseln\u00e1 data pro v\u00fdpo\u010det statistik - -ChartsUtils.report.average=Pr\u016fm\u011br - -ChartsUtils.report.Q1=Prvn\u00ed kvart\u00e1l (Q1) - -ChartsUtils.report.median=Medi\u00e1n - -ChartsUtils.report.Q3=T\u0159et\u00ed kvart\u00e1l (Q3) - -ChartsUtils.report.IQR=Rozmez\u00ed mezi kvartily (IQR) - -ChartsUtils.report.sum=Suma - -ChartsUtils.report.min=Minimum - -ChartsUtils.report.max=Maximum - -ChartsUtils.report.box-plot.title=Krabicov\u00fd graf - -ChartsUtils.report.box-plot.values=Hodnoty - -ChartsUtils.report.box-plot.values-range=Rozsah hodnot - -ChartsUtils.report.scatter-plot.title=Bodov\u00fd graf - -ChartsUtils.report.scatter-plot.xLabel=Hodnoty - -ChartsUtils.report.histogram.title=Histogram - -ChartsUtils.report.histogram.yLabel=\u010cetnost - -!IntervalBoundValidator.invalid.bound.message= - -!IntervalBoundValidator.invalid.interval.message= +OpenIDE-Module-Long-Description=T\u0159νda nαstroj\u016f pro rozhranν +OpenIDE-Module-Short-Description=T\u0159νda nαstroj\u016f pro rozhranν +ColumnTitleValidator.title.empty=Nαzev sloupce nem\u016f\u017ee bύt prαzdnύ +ColumnTitleValidator.title.repeated=Nαzev sloupce se nem\u016f\u017ee opakovat ve stejnι tabulce +ChartsUtils.report.header=

              Zαznam statistickύch hodnot pro ''{0}''

              +ChartsUtils.report.empty=Neexistujν \u017eαdnα \u010dνselnα data pro vύpo\u010det statistik +ChartsUtils.report.average=Pr\u016fm\u011br +ChartsUtils.report.Q1=Prvnν kvartαl (Q1) +ChartsUtils.report.median=Mediαn +ChartsUtils.report.Q3=T\u0159etν kvartαl (Q3) +ChartsUtils.report.IQR=Rozmezν mezi kvartily (IQR) +ChartsUtils.report.sum=Suma +ChartsUtils.report.min=Minimum +ChartsUtils.report.max=Maximum +ChartsUtils.report.box-plot.title=Krabicovύ graf +ChartsUtils.report.box-plot.values=Hodnoty +ChartsUtils.report.box-plot.values-range=Rozsah hodnot +ChartsUtils.report.scatter-plot.title=Bodovύ graf +ChartsUtils.report.scatter-plot.xLabel=Hodnoty +ChartsUtils.report.histogram.title=Histogram +ChartsUtils.report.histogram.yLabel=\u010cetnost +IntervalBoundValidator.invalid.bound.message=Neplatnα mez intervalu (musν bύt desetinnι \u010dνslo nebo datum) +IntervalBoundValidator.invalid.interval.message=Neplatnύ interval (musν men\u0161ν nebo rovno konci) + +# TimeFormatWrapper.timeFormat.DOUBLE=Double +# TimeFormatWrapper.timeFormat.DATE=Date +# TimeFormatWrapper.timeFormat.DATETIME=Date and time + +# TimeRepresentationWrapper.timeRepresentation.INTERVAL=Intervals +# TimeRepresentationWrapper.timeRepresentation.TIMESTAMP=Timestamps +# TimeRepresentationWrapper.timeRepresentation.disabled.tooltip=Time representation can only be changed when the graph is empty diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_de.properties b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_de.properties new file mode 100644 index 0000000000..e8738ae76e --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_de.properties @@ -0,0 +1,31 @@ +OpenIDE-Module-Long-Description=Utility-Klassen fόr UI +OpenIDE-Module-Short-Description=Utility-Klassen fόr UI +ColumnTitleValidator.title.empty=Spaltentitel kann nicht leer sein +ColumnTitleValidator.title.repeated=Spaltentitel kann in derselben Tabelle nicht mehrfach verwendet werden +ChartsUtils.report.header=

              Bericht όber Hδufigkeiten der Werte ''{0}''

              +ChartsUtils.report.empty=Keine numerischen Werte zur Berechnung von Statistiken verfόgbar. +ChartsUtils.report.average=Durchschnitt +ChartsUtils.report.Q1=Erstes Quartil (Q1) +ChartsUtils.report.median=Median +ChartsUtils.report.Q3=Drittes Quartil (Q3) +ChartsUtils.report.IQR=Interquartilbereich (IQR) +ChartsUtils.report.sum=Summe +ChartsUtils.report.min=Minimum +ChartsUtils.report.max=Maximum +ChartsUtils.report.box-plot.title=Box-Plot +ChartsUtils.report.box-plot.values=Werte +ChartsUtils.report.box-plot.values-range=Wertebereich +ChartsUtils.report.scatter-plot.title=Streudiagramm +ChartsUtils.report.scatter-plot.xLabel=Werte +ChartsUtils.report.histogram.title=Histogramm +ChartsUtils.report.histogram.yLabel=Hδufigkeit +IntervalBoundValidator.invalid.bound.message=Ungόltige Intervallgrenzen (mόss eine reele Zahl oder ein Datum sein) +IntervalBoundValidator.invalid.interval.message=Ungόltiges Intervall (Start muss kleiner oder gleich Ende sein) + +# TimeFormatWrapper.timeFormat.DOUBLE=Double +# TimeFormatWrapper.timeFormat.DATE=Date +# TimeFormatWrapper.timeFormat.DATETIME=Date and time + +# TimeRepresentationWrapper.timeRepresentation.INTERVAL=Intervals +# TimeRepresentationWrapper.timeRepresentation.TIMESTAMP=Timestamps +# TimeRepresentationWrapper.timeRepresentation.disabled.tooltip=Time representation can only be changed when the graph is empty diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_es.properties b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_es.properties index a01c797731..e6637519fe 100644 --- a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_es.properties +++ b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_es.properties @@ -1,54 +1,29 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:23+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - OpenIDE-Module-Long-Description=Clases de utilidades para la interfaz de usuario - OpenIDE-Module-Short-Description=Clases de utilidades para la interfaz de usuario - -ColumnTitleValidator.title.empty=El t\u00edtulo de la columna no puede estar vac\u00edo - -ColumnTitleValidator.title.repeated=El t\u00edtulo de la columna no puede estar repetido en la misma tabla - -ChartsUtils.report.header=

              Informe de estad\u00edsticas para ''{0}''

              - -ChartsUtils.report.empty=No hay datos num\u00e9ricos para calcular estad\u00edsticas. - +ColumnTitleValidator.title.empty=El tνtulo de la columna no puede estar vacνo +ColumnTitleValidator.title.repeated=El tνtulo de la columna no puede estar repetido en la misma tabla +ChartsUtils.report.header=

              Informe de estadνsticas para ''{0}''

              +ChartsUtils.report.empty=No hay datos numιricos para calcular estadνsticas. ChartsUtils.report.average=Media - ChartsUtils.report.Q1=Primer cuartil (Q1) - ChartsUtils.report.median=Mediana - ChartsUtils.report.Q3=Tercer cuartil (Q3) - -ChartsUtils.report.IQR=Rango intercuart\u00edlico (IQR) - +ChartsUtils.report.IQR=Rango intercuartνlico (IQR) ChartsUtils.report.sum=Suma - -ChartsUtils.report.min=M\u00ednimo - -ChartsUtils.report.max=M\u00e1ximo - +ChartsUtils.report.min=Mνnimo +ChartsUtils.report.max=Mαximo ChartsUtils.report.box-plot.title=Diagrama de cajas - ChartsUtils.report.box-plot.values=Valores - ChartsUtils.report.box-plot.values-range=Rango de valores - -ChartsUtils.report.scatter-plot.title=Diagrama de dispersi\u00f3n - +ChartsUtils.report.scatter-plot.title=Diagrama de dispersiσn ChartsUtils.report.scatter-plot.xLabel=Valores - ChartsUtils.report.histogram.title=Histograma - ChartsUtils.report.histogram.yLabel=Frecuencia - -IntervalBoundValidator.invalid.bound.message=L\u00edmite de int\u00e9rvalo inv\u00e1lido (debe ser un n\u00famero decimal o una fecha) - -IntervalBoundValidator.invalid.interval.message=Int\u00e9rvalo inv\u00e1lido (el l\u00edmite inferior debe ser menor o igual que el superior) +IntervalBoundValidator.invalid.bound.message=Lνmite de intιrvalo invαlido (debe ser un nϊmero decimal o una fecha) +IntervalBoundValidator.invalid.interval.message=Intιrvalo invαlido (el lνmite inferior debe ser menor o igual que el superior) +TimeFormatWrapper.timeFormat.DOUBLE=Doble +TimeFormatWrapper.timeFormat.DATE=Fecha +TimeFormatWrapper.timeFormat.DATETIME=Fecha y hora +TimeRepresentationWrapper.timeRepresentation.INTERVAL=Intervalos +TimeRepresentationWrapper.timeRepresentation.TIMESTAMP=Marcas de tiempo +TimeRepresentationWrapper.timeRepresentation.disabled.tooltip=La representaciσn temporal solo puede ser cambiada cuando el grafo estα vacνo diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_fr.properties b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_fr.properties index 9707c361a8..18e897573f 100644 --- a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_fr.properties +++ b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_fr.properties @@ -1,53 +1,29 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:05+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - OpenIDE-Module-Long-Description=Classes utilitaires pour l'interface utilisateur - OpenIDE-Module-Short-Description=Classes utilitaires pour l'interface utilisateur - -ColumnTitleValidator.title.empty=Le titre de la colonne ne peut \u00eatre vide. - -ColumnTitleValidator.title.repeated=Le titre de la colonne ne peut \u00eatre r\u00e9p\u00e9t\u00e9e dans la m\u00eame table. - +ColumnTitleValidator.title.empty=Le titre de la colonne ne peut κtre vide. +ColumnTitleValidator.title.repeated=Le titre de la colonne ne peut κtre rιpιtιe dans la mκme table. ChartsUtils.report.header=

              Rapport de statistiques pour ''{0}''

              - -ChartsUtils.report.empty=Aucune donn\u00e9e. - +ChartsUtils.report.empty=Aucune donnιe. ChartsUtils.report.average=Moyenne - ChartsUtils.report.Q1=Premier quartile (Q1) - -ChartsUtils.report.median=M\u00e9diane - -ChartsUtils.report.Q3=Troisi\u00e8me quartile (Q3) - +ChartsUtils.report.median=Mιdiane +ChartsUtils.report.Q3=Troisiθme quartile (Q3) ChartsUtils.report.IQR=Plage interquartile (IQR) - ChartsUtils.report.sum=Somme - ChartsUtils.report.min=Minimum - ChartsUtils.report.max=Maximum - -ChartsUtils.report.box-plot.title=Bo\u00eete \u00e0 moustaches - +ChartsUtils.report.box-plot.title=Boξte ΰ moustaches ChartsUtils.report.box-plot.values=Valeurs - ChartsUtils.report.box-plot.values-range=Plage de valeurs - ChartsUtils.report.scatter-plot.title=Nuage de points - ChartsUtils.report.scatter-plot.xLabel=Valeurs - ChartsUtils.report.histogram.title=Histogramme - -ChartsUtils.report.histogram.yLabel=Fr\u00e9quence - -!IntervalBoundValidator.invalid.bound.message= - -!IntervalBoundValidator.invalid.interval.message= +ChartsUtils.report.histogram.yLabel=Frιquence +IntervalBoundValidator.invalid.bound.message=Extrιmitιs de l'intervalle invalides (doit κtre un nombre flottant ou une date) +IntervalBoundValidator.invalid.interval.message=Intervalle invalide (la date de dιbut doit κtre infιrieur ou ιgal ΰ la date de fin) +TimeFormatWrapper.timeFormat.DOUBLE=Double +TimeFormatWrapper.timeFormat.DATE=Date +TimeFormatWrapper.timeFormat.DATETIME=Date et heure +TimeRepresentationWrapper.timeRepresentation.INTERVAL=Intervalles +TimeRepresentationWrapper.timeRepresentation.TIMESTAMP=Timestamps +TimeRepresentationWrapper.timeRepresentation.disabled.tooltip=La reprιsentation du temps ne peut κtre changι que si le graphe est vide diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_he.properties b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_he.properties new file mode 100644 index 0000000000..2640450ec1 --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_he.properties @@ -0,0 +1,29 @@ +OpenIDE-Module-Long-Description=Utils classes for UI +OpenIDE-Module-Short-Description=Utils classes for UI +ColumnTitleValidator.title.empty=Column title can't be empty +ColumnTitleValidator.title.repeated=Column title can't be repeated in the same table +ChartsUtils.report.header=

              Statistic values report for ''{0}''

              +ChartsUtils.report.empty=There is no number data to calculate statistics. +ChartsUtils.report.average=Average +ChartsUtils.report.Q1=First quartile (Q1) +ChartsUtils.report.median=Median +ChartsUtils.report.Q3=Third quartile (Q3) +ChartsUtils.report.IQR=Interquartile range (IQR) +ChartsUtils.report.sum=Sum +ChartsUtils.report.min=Minimum +ChartsUtils.report.max=Maximum +ChartsUtils.report.box-plot.title=Box-plot +ChartsUtils.report.box-plot.values=Values +ChartsUtils.report.box-plot.values-range=Range of values +ChartsUtils.report.scatter-plot.title=Scatter plot +ChartsUtils.report.scatter-plot.xLabel=Values +ChartsUtils.report.histogram.title=Histogram +ChartsUtils.report.histogram.yLabel=Frequency +IntervalBoundValidator.invalid.bound.message=Invalid interval bound (must be a float number or a date) +IntervalBoundValidator.invalid.interval.message=Invalid interval (start must be lesser or equal than end) +TimeFormatWrapper.timeFormat.DOUBLE=Double +TimeFormatWrapper.timeFormat.DATE=Date +TimeFormatWrapper.timeFormat.DATETIME=Date and time +TimeRepresentationWrapper.timeRepresentation.INTERVAL=Intervals +TimeRepresentationWrapper.timeRepresentation.TIMESTAMP=Timestamps +TimeRepresentationWrapper.timeRepresentation.disabled.tooltip=Time representation can only be changed when the graph is empty diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_hu.properties b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_hu.properties new file mode 100644 index 0000000000..5324dc57d9 --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_hu.properties @@ -0,0 +1,30 @@ + + +IntervalBoundValidator.invalid.bound.message=\u00C9rv\u00E9nytelen intervallumkorl\u00E1t (lebeg\u0151sz\u00E1mnak vagy d\u00E1tumnak kell lennie) +ChartsUtils.report.sum=\u00D6sszeg +ChartsUtils.report.header=

              Statisztikai \u00E9rt\u00E9kek jelent\u00E9se a ''{0}'

              +ChartsUtils.report.empty=Nincs sz\u00E1madat a statisztika kisz\u00E1m\u00EDt\u00E1s\u00E1hoz. +ChartsUtils.report.histogram.yLabel=Frekvencia +ChartsUtils.report.min=Minimum +ChartsUtils.report.max=Maximum +ChartsUtils.report.Q3=Harmadik kvartilis (Q3) +ChartsUtils.report.median=K\u00F6z\u00E9ps\u0151 +TimeFormatWrapper.timeFormat.DATETIME=D\u00E1tum \u00E9s id\u0151 +TimeFormatWrapper.timeFormat.DOUBLE=Kett\u0151s +IntervalBoundValidator.invalid.interval.message=\u00C9rv\u00E9nytelen intervallum (a kezdetnek kisebbnek vagy egyenl\u0151nek kell lennie, mint a v\u00E9ge) +ChartsUtils.report.scatter-plot.xLabel=\u00C9rt\u00E9kek +TimeRepresentationWrapper.timeRepresentation.TIMESTAMP=Id\u0151b\u00E9lyegek +ChartsUtils.report.box-plot.values-range=\u00C9rt\u00E9kek tartom\u00E1nya +TimeRepresentationWrapper.timeRepresentation.INTERVAL=Intervallumok +OpenIDE-Module-Short-Description=Utils oszt\u00E1lyok UI +ChartsUtils.report.IQR=Interquartil tartom\u00E1ny (IQR) +OpenIDE-Module-Long-Description=Utils oszt\u00E1lyok UI +ColumnTitleValidator.title.repeated=Az oszlop c\u00EDme nem ism\u00E9telhet\u0151 meg ugyanazon t\u00E1bl\u00E1zatban +TimeFormatWrapper.timeFormat.DATE=D\u00E1tum +TimeRepresentationWrapper.timeRepresentation.disabled.tooltip=Az id\u0151\u00E1br\u00E1zol\u00E1s csak akkor m\u00F3dos\u00EDthat\u00F3, ha a grafikon \u00FCres +ChartsUtils.report.Q1=Els\u0151 negyed (Q1) +ChartsUtils.report.box-plot.values=\u00C9rt\u00E9kek +ChartsUtils.report.scatter-plot.title=Sz\u00F3rv\u00E1nyrajz +ColumnTitleValidator.title.empty=Az oszlop c\u00EDme nem lehet \u00FCres +ChartsUtils.report.average=\u00C1tlagos +ChartsUtils.report.histogram.title=Histogram diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_it.properties b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_it.properties new file mode 100644 index 0000000000..b9e097aae9 --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_it.properties @@ -0,0 +1,29 @@ +OpenIDE-Module-Long-Description=Utils classes for UI +OpenIDE-Module-Short-Description=Utils classes for UI +ColumnTitleValidator.title.empty=Column title can't be empty +ColumnTitleValidator.title.repeated=Column title can't be repeated in the same table +ChartsUtils.report.header=

              Statistic values report for ''{0}''

              +ChartsUtils.report.empty=There is no number data to calculate statistics. +ChartsUtils.report.average=Average +ChartsUtils.report.Q1=First quartile (Q1) +ChartsUtils.report.median=Median +ChartsUtils.report.Q3=Third quartile (Q3) +ChartsUtils.report.IQR=Interquartile range (IQR) +ChartsUtils.report.sum=Sum +ChartsUtils.report.min=Minimo +ChartsUtils.report.max=Maximum +ChartsUtils.report.box-plot.title=Box-plot +ChartsUtils.report.box-plot.values=Values +ChartsUtils.report.box-plot.values-range=Range of values +ChartsUtils.report.scatter-plot.title=Scatter plot +ChartsUtils.report.scatter-plot.xLabel=Values +ChartsUtils.report.histogram.title=Histogram +ChartsUtils.report.histogram.yLabel=Frequency +IntervalBoundValidator.invalid.bound.message=Invalid interval bound (must be a float number or a date) +IntervalBoundValidator.invalid.interval.message=Invalid interval (start must be lesser or equal than end) +TimeFormatWrapper.timeFormat.DOUBLE=Double +TimeFormatWrapper.timeFormat.DATE=Date +TimeFormatWrapper.timeFormat.DATETIME=Date and time +TimeRepresentationWrapper.timeRepresentation.INTERVAL=Intervals +TimeRepresentationWrapper.timeRepresentation.TIMESTAMP=Timestamps +TimeRepresentationWrapper.timeRepresentation.disabled.tooltip=Time representation can only be changed when the graph is empty diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_ja.properties b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_ja.properties index 6e42c38721..48cd56af66 100644 --- a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_ja.properties +++ b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_ja.properties @@ -1,53 +1,31 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:05+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=UI\u7528\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30af\u30e9\u30b9 - -OpenIDE-Module-Short-Description=UI\u7528\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30af\u30e9\u30b9 - -ColumnTitleValidator.title.empty=\u5217\u306e\u30bf\u30a4\u30c8\u30eb\u306f\u7a7a\u6b04\u3067\u306f\u306a\u308a\u307e\u305b\u3093\u3002 - -ColumnTitleValidator.title.repeated=\u5217\u306e\u30bf\u30a4\u30c8\u30eb\u306f\u540c\u3058\u8868\u3067\u7e70\u308a\u8fd4\u3057\u3067\u304d\u307e\u305b\u3093\u3002 - -ChartsUtils.report.header=

              ''{0}''\u7528\u306e\u7d71\u8a08\u5024\u5831\u544a

              - -ChartsUtils.report.empty=\u7d71\u8a08\u5024\u3092\u8a08\u7b97\u3059\u308b\u6570\u30c7\u30fc\u30bf\u304c\u3042\u308a\u307e\u305b\u3093\u3002 - -ChartsUtils.report.average=\u5e73\u5747\u5024 - -ChartsUtils.report.Q1=\u7b2c\uff11\u56db\u5206\u4f4d\u70b9(Q1) - -ChartsUtils.report.median=\u4e2d\u592e\u5024 - -ChartsUtils.report.Q3=\u7b2c\uff13\u56db\u5206\u4f4d\u70b9(Q3) - -ChartsUtils.report.IQR=\u56db\u5206\u4f4d\u6570\u7bc4\u56f2 (IQR) - -ChartsUtils.report.sum=\u5408\u8a08 - -ChartsUtils.report.min=\u6700\u5c0f\u5024 - -ChartsUtils.report.max=\u6700\u5927\u5024 - -ChartsUtils.report.box-plot.title=\u7bb1\u3072\u3052\u56f3 - -ChartsUtils.report.box-plot.values=\u5024 - -ChartsUtils.report.box-plot.values-range=\u5024\u306e\u5e45 - -ChartsUtils.report.scatter-plot.title=\u6563\u5e03\u56f3 - -ChartsUtils.report.scatter-plot.xLabel=\u5024 - -ChartsUtils.report.histogram.title=\u5ea6\u6570\u5206\u5e03\u56f3 - -ChartsUtils.report.histogram.yLabel=\u983b\u5ea6 - -!IntervalBoundValidator.invalid.bound.message= - -!IntervalBoundValidator.invalid.interval.message= +OpenIDE-Module-Long-Description=UI\u7528\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30af\u30e9\u30b9 +OpenIDE-Module-Short-Description=UI\u7528\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30af\u30e9\u30b9 +ColumnTitleValidator.title.empty=\u5217\u306e\u30bf\u30a4\u30c8\u30eb\u306f\u7a7a\u6b04\u3067\u306f\u306a\u308a\u307e\u305b\u3093\u3002 +ColumnTitleValidator.title.repeated=\u5217\u306e\u30bf\u30a4\u30c8\u30eb\u306f\u540c\u3058\u8868\u3067\u7e70\u308a\u8fd4\u3057\u3067\u304d\u307e\u305b\u3093\u3002 +ChartsUtils.report.header=

              ''{0}''\u7528\u306e\u7d71\u8a08\u5024\u5831\u544a

              +ChartsUtils.report.empty=\u7d71\u8a08\u5024\u3092\u8a08\u7b97\u3059\u308b\u6570\u30c7\u30fc\u30bf\u304c\u3042\u308a\u307e\u305b\u3093\u3002 +ChartsUtils.report.average=\u5e73\u5747\u5024 +ChartsUtils.report.Q1=\u7b2c\uff11\u56db\u5206\u4f4d\u70b9(Q1) +ChartsUtils.report.median=\u4e2d\u592e\u5024 +ChartsUtils.report.Q3=\u7b2c\uff13\u56db\u5206\u4f4d\u70b9(Q3) +ChartsUtils.report.IQR=\u56db\u5206\u4f4d\u6570\u7bc4\u56f2 (IQR) +ChartsUtils.report.sum=\u5408\u8a08 +ChartsUtils.report.min=\u6700\u5c0f\u5024 +ChartsUtils.report.max=\u6700\u5927\u5024 +ChartsUtils.report.box-plot.title=\u7bb1\u3072\u3052\u56f3 +ChartsUtils.report.box-plot.values=\u5024 +ChartsUtils.report.box-plot.values-range=\u5024\u306e\u5e45 +ChartsUtils.report.scatter-plot.title=\u6563\u5e03\u56f3 +ChartsUtils.report.scatter-plot.xLabel=\u5024 +ChartsUtils.report.histogram.title=\u5ea6\u6570\u5206\u5e03\u56f3 +ChartsUtils.report.histogram.yLabel=\u983b\u5ea6 +# IntervalBoundValidator.invalid.bound.message=Invalid interval bound (must be a float number or a date) +# IntervalBoundValidator.invalid.interval.message=Invalid interval (start must be lesser or equal than end) + +# TimeFormatWrapper.timeFormat.DOUBLE=Double +# TimeFormatWrapper.timeFormat.DATE=Date +# TimeFormatWrapper.timeFormat.DATETIME=Date and time + +# TimeRepresentationWrapper.timeRepresentation.INTERVAL=Intervals +# TimeRepresentationWrapper.timeRepresentation.TIMESTAMP=Timestamps +# TimeRepresentationWrapper.timeRepresentation.disabled.tooltip=Time representation can only be changed when the graph is empty diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_ko.properties b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_ko.properties new file mode 100644 index 0000000000..3d62cdf1dc --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_ko.properties @@ -0,0 +1,31 @@ + + +IntervalBoundValidator.invalid.bound.message=\uC798\uBABB\uB41C \uAC04\uACA9 \uACBD\uACC4\uCE58 (\uBC18\uB4DC\uC2DC \uBD80\uB3D9\uC18C\uC218 \uD639\uC740 \uB0A0\uC9DC) +ChartsUtils.report.sum=\uD569 +ChartsUtils.report.header=

              ''{0}'\uC5D0 \uB300\uD55C \uD1B5\uACC4\uAC12 \uBCF4\uACE0\uC11C'

              +ChartsUtils.report.empty=\uD1B5\uACC4\uB97C \uACC4\uC0B0\uD560 \uC22B\uC790 \uB370\uC774\uD130\uAC00 \uC5C6\uC2B5\uB2C8\uB2E4. +ChartsUtils.report.histogram.yLabel=\uBE48\uB3C4 +ChartsUtils.report.min=\uCD5C\uC18C\uD55C +ChartsUtils.report.max=\uCD5C\uB300\uD55C +ChartsUtils.report.Q3=\uC138 \uBC88\uC9F8 \uC0AC\uBD84\uC704\uC218 (Q3) +ChartsUtils.report.median=\uC911\uAC04\uAC12 +TimeFormatWrapper.timeFormat.DATETIME=\uB0A0\uC9DC \uBC0F \uC2DC\uAC04 +TimeFormatWrapper.timeFormat.DOUBLE=Double\uD615 +ChartsUtils.report.box-plot.title=\uC0C1\uC790\uADF8\uB9BC(Box-plot) +IntervalBoundValidator.invalid.interval.message=\uC798\uBABB\uB41C \uAC04\uACA9 (\uC2DC\uC791\uC774 \uB05D\uBCF4\uB2E4 \uC791\uAC70\uB098 \uAC19\uC544\uC57C \uD568) +ChartsUtils.report.scatter-plot.xLabel=\uAC12 +TimeRepresentationWrapper.timeRepresentation.TIMESTAMP=\uD0C0\uC784\uC2A4\uD0EC\uD504 +ChartsUtils.report.box-plot.values-range=\uAC12 \uBC94\uC704 +TimeRepresentationWrapper.timeRepresentation.INTERVAL=\uAC04\uACA9 +OpenIDE-Module-Short-Description=UI\uC6A9 Utils \uD074\uB798\uC2A4 +ChartsUtils.report.IQR=\uC0AC\uBD84\uC704\uAC04 \uBC94\uC704 (IQR) +OpenIDE-Module-Long-Description=UI\uC6A9 Utils \uD074\uB798\uC2A4 +ColumnTitleValidator.title.repeated=\uAC19\uC740 \uD14C\uC774\uBE14\uC5D0\uC11C \uC5F4 \uC81C\uBAA9\uC740 \uBC18\uBCF5\uB420 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 +TimeFormatWrapper.timeFormat.DATE=\uB0A0\uC9DC +TimeRepresentationWrapper.timeRepresentation.disabled.tooltip=\uC2DC\uAC04 \uD45C\uD604\uC740 \uADF8\uB798\uD504\uAC00 \uBE44\uC5B4 \uC788\uB294 \uACBD\uC6B0\uC5D0 \uBCC0\uACBD\uB420 \uC218 \uC788\uC2B5\uB2C8\uB2E4 +ChartsUtils.report.Q1=\uCCAB \uBC88\uC9F8 \uC0AC\uBD84\uC704\uC218 (Q1) +ChartsUtils.report.box-plot.values=\uAC12 +ChartsUtils.report.scatter-plot.title=\uC0B0\uD3EC\uB3C4 +ColumnTitleValidator.title.empty=\uC5F4 \uC81C\uBAA9\uC740 \uBE44\uC6CC\uB458 \uC218 \uC5C6\uC2B5\uB2C8\uB2E4 +ChartsUtils.report.average=\uD3C9\uADE0 +ChartsUtils.report.histogram.title=\uD788\uC2A4\uD1A0\uADF8\uB7A8 diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_nl.properties b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_nl.properties new file mode 100644 index 0000000000..d96ec4767a --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_nl.properties @@ -0,0 +1,29 @@ +OpenIDE-Module-Long-Description=Utils classes for UI +OpenIDE-Module-Short-Description=Utils classes for UI +ColumnTitleValidator.title.empty=Column title can't be empty +ColumnTitleValidator.title.repeated=Column title can't be repeated in the same table +ChartsUtils.report.header=

              Statistic values report for ''{0}''

              +ChartsUtils.report.empty=There is no number data to calculate statistics. +ChartsUtils.report.average=Gemiddelde +ChartsUtils.report.Q1=First quartile (Q1) +ChartsUtils.report.median=Mediaan +ChartsUtils.report.Q3=Third quartile (Q3) +ChartsUtils.report.IQR=Interquartile range (IQR) +ChartsUtils.report.sum=Som +ChartsUtils.report.min=Minimum +ChartsUtils.report.max=Maximum +ChartsUtils.report.box-plot.title=Box-plot +ChartsUtils.report.box-plot.values=Waarden +ChartsUtils.report.box-plot.values-range=Bereik van waarden +ChartsUtils.report.scatter-plot.title=Scatter plot +ChartsUtils.report.scatter-plot.xLabel=Waarden +ChartsUtils.report.histogram.title=Histogram +ChartsUtils.report.histogram.yLabel=Frequentie +IntervalBoundValidator.invalid.bound.message=Invalid interval bound (must be a float number or a date) +IntervalBoundValidator.invalid.interval.message=Invalid interval (start must be lesser or equal than end) +TimeFormatWrapper.timeFormat.DOUBLE=Double +TimeFormatWrapper.timeFormat.DATE=Datum +TimeFormatWrapper.timeFormat.DATETIME=Datum en tijd +TimeRepresentationWrapper.timeRepresentation.INTERVAL=Intervallen +TimeRepresentationWrapper.timeRepresentation.TIMESTAMP=Tijdstempels +TimeRepresentationWrapper.timeRepresentation.disabled.tooltip=Time representation can only be changed when the graph is empty diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_pt_BR.properties b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_pt_BR.properties index beab4df370..3fd7b5cc87 100644 --- a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_pt_BR.properties +++ b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_pt_BR.properties @@ -1,53 +1,31 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:05+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Classes utilit\u00e1rias para interface de usu\u00e1rio - -OpenIDE-Module-Short-Description=Classes utilit\u00e1rias para interface de usu\u00e1rio - -ColumnTitleValidator.title.empty=O t\u00edtulo da coluna n\u00e3o pode ser vazio - -ColumnTitleValidator.title.repeated=O t\u00edtulo da coluna n\u00e3o pode ser repetido na mesma tabela - -ChartsUtils.report.header=

              Relat\u00f3rio de valores estat\u00edsticos para ''{0}''

              - -ChartsUtils.report.empty=N\u00e3o h\u00e1 dados num\u00e9ricos para calcular estat\u00edsticas. - -ChartsUtils.report.average=M\u00e9dia - -ChartsUtils.report.Q1=Primeiro quartil (Q1) - -ChartsUtils.report.median=Mediana - -ChartsUtils.report.Q3=Terceiro quartil (Q3) - -ChartsUtils.report.IQR=Intervalo interquartil (IQR) - -ChartsUtils.report.sum=Soma - -ChartsUtils.report.min=M\u00ednimo - -ChartsUtils.report.max=M\u00e1ximo - -ChartsUtils.report.box-plot.title=Gr\u00e1fico de caixa - -ChartsUtils.report.box-plot.values=Valores - -ChartsUtils.report.box-plot.values-range=Intervalo de valores - -ChartsUtils.report.scatter-plot.title=Gr\u00e1fico de dispers\u00e3o - -ChartsUtils.report.scatter-plot.xLabel=Valores - -ChartsUtils.report.histogram.title=Histograma - -ChartsUtils.report.histogram.yLabel=Frequ\u00eancia - -!IntervalBoundValidator.invalid.bound.message= - -!IntervalBoundValidator.invalid.interval.message= +OpenIDE-Module-Long-Description=Classes utilitαrias para interface de usuαrio +OpenIDE-Module-Short-Description=Classes utilitαrias para interface de usuαrio +ColumnTitleValidator.title.empty=O tνtulo da coluna nγo pode ser vazio +ColumnTitleValidator.title.repeated=O tνtulo da coluna nγo pode ser repetido na mesma tabela +ChartsUtils.report.header=

              Relatσrio de valores estatνsticos para ''{0}''

              +ChartsUtils.report.empty=Nγo hα dados numιricos para calcular estatνsticas. +ChartsUtils.report.average=Mιdia +ChartsUtils.report.Q1=Primeiro quartil (Q1) +ChartsUtils.report.median=Mediana +ChartsUtils.report.Q3=Terceiro quartil (Q3) +ChartsUtils.report.IQR=Intervalo interquartil (IQR) +ChartsUtils.report.sum=Soma +ChartsUtils.report.min=Mνnimo +ChartsUtils.report.max=Mαximo +ChartsUtils.report.box-plot.title=Grαfico de caixa +ChartsUtils.report.box-plot.values=Valores +ChartsUtils.report.box-plot.values-range=Intervalo de valores +ChartsUtils.report.scatter-plot.title=Grαfico de dispersγo +ChartsUtils.report.scatter-plot.xLabel=Valores +ChartsUtils.report.histogram.title=Histograma +ChartsUtils.report.histogram.yLabel=Frequκncia +IntervalBoundValidator.invalid.bound.message=Limiar invαlido do intervalo (deve ser um nϊmero flutuante ou data) +IntervalBoundValidator.invalid.interval.message=Limiar invαlido do intervalo (o inνcio deve ser menor ou igual ao final) + +# TimeFormatWrapper.timeFormat.DOUBLE=Double +# TimeFormatWrapper.timeFormat.DATE=Date +# TimeFormatWrapper.timeFormat.DATETIME=Date and time + +# TimeRepresentationWrapper.timeRepresentation.INTERVAL=Intervals +# TimeRepresentationWrapper.timeRepresentation.TIMESTAMP=Timestamps +# TimeRepresentationWrapper.timeRepresentation.disabled.tooltip=Time representation can only be changed when the graph is empty diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_ro.properties b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_ro.properties new file mode 100644 index 0000000000..824ec21404 --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_ro.properties @@ -0,0 +1,31 @@ + + +ColumnTitleValidator.title.empty=Titlul coloanei nu poate fi gol +ChartsUtils.report.header=

              Raport valori statistice pentru ''{0}''

              +ChartsUtils.report.empty=Nu exist\u0103 date numerice pentru a calcula statistici. +ChartsUtils.report.average=Media +ChartsUtils.report.Q1=Prima cuartil\u0103 (Q1) +ChartsUtils.report.median=Mediana +ChartsUtils.report.Q3=A treia cuartil\u0103 (Q3) +ChartsUtils.report.IQR=Intervalul dintre cuartile (IQR) +ChartsUtils.report.sum=Suma +ChartsUtils.report.min=Minim +ChartsUtils.report.max=Maxim +ChartsUtils.report.box-plot.title=Boxplot +ChartsUtils.report.box-plot.values=Valori +ChartsUtils.report.scatter-plot.title=Diagram\u0103 de dispersie +ChartsUtils.report.histogram.title=Histogram\u0103 +ChartsUtils.report.histogram.yLabel=Frecven\u021B\u0103 +IntervalBoundValidator.invalid.interval.message=Interval nevalid (\u00EEnceputul trebuie s\u0103 fie mai mic sau egal cu sf\u00E2r\u0219itul) +TimeFormatWrapper.timeFormat.DOUBLE=Double +TimeFormatWrapper.timeFormat.DATE=Dat\u0103 +TimeFormatWrapper.timeFormat.DATETIME=Data \u0219i ora +TimeRepresentationWrapper.timeRepresentation.INTERVAL=Intervale +TimeRepresentationWrapper.timeRepresentation.TIMESTAMP=Marcaje temporale +OpenIDE-Module-Long-Description=Clase utilitare pentru interfa\u021B\u0103 +OpenIDE-Module-Short-Description=Clase utilitare pentru interfa\u021B\u0103 +ColumnTitleValidator.title.repeated=Titlul coloanei nu poate fi repetat \u00EEn acela\u0219i tabel +ChartsUtils.report.box-plot.values-range=Intervalul de valori +ChartsUtils.report.scatter-plot.xLabel=Valori +IntervalBoundValidator.invalid.bound.message=Limit\u0103 interval nevalid\u0103 (trebuie s\u0103 fie un num\u0103r zecimal sau o dat\u0103) +TimeRepresentationWrapper.timeRepresentation.disabled.tooltip=Reprezentarea timpului poate fi schimbat\u0103 numai atunci c\u00E2nd graful este gol diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_ru.properties b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_ru.properties index 12a4811766..b25eb39f2e 100644 --- a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_ru.properties +++ b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_ru.properties @@ -1,53 +1,32 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:05+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - OpenIDE-Module-Long-Description=\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0434\u043b\u044f UI - OpenIDE-Module-Short-Description=\u0412\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0434\u043b\u044f UI - ColumnTitleValidator.title.empty=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043f\u0443\u0441\u0442\u044b\u043c - ColumnTitleValidator.title.repeated=\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a \u0441\u0442\u043e\u043b\u0431\u0446\u0430 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c\u0441\u044f \u0432 \u043f\u0440\u0435\u0434\u0435\u043b\u0430\u0445 \u043e\u0434\u043d\u043e\u0439 \u0442\u0430\u0431\u043b\u0438\u0446\u044b - ChartsUtils.report.header=

              \u0421\u0432\u043e\u0434\u043a\u0430 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u043e\u0446\u0435\u043d\u043e\u043a \u0434\u043b\u044f ''{0}''

              - ChartsUtils.report.empty=\u041d\u0435\u0442 \u0447\u0438\u0441\u043b\u043e\u0432\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f \u0440\u0430\u0441\u0447\u0451\u0442\u0430 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a. - ChartsUtils.report.average=\u0421\u0440\u0435\u0434\u043d\u0435\u0435 - ChartsUtils.report.Q1=\u041f\u0435\u0440\u0432\u044b\u0439 \u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044c (Q1) - ChartsUtils.report.median=\u041c\u0435\u0434\u0438\u0430\u043d\u0430 - ChartsUtils.report.Q3=\u0422\u0440\u0435\u0442\u0438\u0439 \u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044c (Q3) - ChartsUtils.report.IQR=\u041c\u0435\u0436\u043a\u0432\u0430\u0440\u0442\u0438\u043b\u044c\u043d\u044b\u0439 \u0440\u0430\u0437\u043c\u0430\u0445 (\u041c\u041a\u0420) - ChartsUtils.report.sum=\u0421\u0443\u043c\u043c\u0430 - ChartsUtils.report.min=\u041c\u0438\u043d\u0438\u043c\u0443\u043c - ChartsUtils.report.max=\u041c\u0430\u043a\u0441\u0438\u043c\u0443\u043c - ChartsUtils.report.box-plot.title=Box-plot - ChartsUtils.report.box-plot.values=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f - ChartsUtils.report.box-plot.values-range=\u0414\u0438\u0430\u043f\u0430\u0437\u043e\u043d \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 - ChartsUtils.report.scatter-plot.title=Scatter plot - ChartsUtils.report.scatter-plot.xLabel=\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u044f - ChartsUtils.report.histogram.title=\u0413\u0438\u0441\u0442\u043e\u0433\u0440\u0430\u043c\u043c\u0430 - ChartsUtils.report.histogram.yLabel=\u0427\u0430\u0441\u0442\u043e\u0442\u0430 +# IntervalBoundValidator.invalid.bound.message=Invalid interval bound (must be a float number or a date) +# IntervalBoundValidator.invalid.interval.message=Invalid interval (start must be lesser or equal than end) + +# TimeFormatWrapper.timeFormat.DOUBLE=Double +# TimeFormatWrapper.timeFormat.DATE=Date +# TimeFormatWrapper.timeFormat.DATETIME=Date and time -!IntervalBoundValidator.invalid.bound.message= +# TimeRepresentationWrapper.timeRepresentation.INTERVAL=Intervals +# TimeRepresentationWrapper.timeRepresentation.TIMESTAMP=Timestamps +# TimeRepresentationWrapper.timeRepresentation.disabled.tooltip=Time representation can only be changed when the graph is empty -!IntervalBoundValidator.invalid.interval.message= diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_th.properties b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_tr.properties b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_tr.properties new file mode 100644 index 0000000000..f379a7c291 --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_tr.properties @@ -0,0 +1,29 @@ +OpenIDE-Module-Long-Description=Utils classes for UI +OpenIDE-Module-Short-Description=Utils classes for UI +ColumnTitleValidator.title.empty=Column title can't be empty +ColumnTitleValidator.title.repeated=Column title can't be repeated in the same table +ChartsUtils.report.header=

              Statistic values report for ''{0}''

              +ChartsUtils.report.empty=There is no number data to calculate statistics. +ChartsUtils.report.average=Ortalama +ChartsUtils.report.Q1=\u0130lk ηeyrek (Q1) +ChartsUtils.report.median=Ortanca +ChartsUtils.report.Q3=άηόncό ηeyrek (Q3) +ChartsUtils.report.IQR=Interquartile range (IQR) +ChartsUtils.report.sum=Toplam +ChartsUtils.report.min=Minimum +ChartsUtils.report.max=Maksimum +ChartsUtils.report.box-plot.title=Box-plot +ChartsUtils.report.box-plot.values=De\u011ferler +ChartsUtils.report.box-plot.values-range=De\u011fer aral\u0131\u011f\u0131 +ChartsUtils.report.scatter-plot.title=Scatter plot +ChartsUtils.report.scatter-plot.xLabel=De\u011ferler +ChartsUtils.report.histogram.title=Histogram +ChartsUtils.report.histogram.yLabel=Frekans +IntervalBoundValidator.invalid.bound.message=Invalid interval bound (must be a float number or a date) +IntervalBoundValidator.invalid.interval.message=Invalid interval (start must be lesser or equal than end) +TimeFormatWrapper.timeFormat.DOUBLE=Double +TimeFormatWrapper.timeFormat.DATE=Date +TimeFormatWrapper.timeFormat.DATETIME=Date and time +TimeRepresentationWrapper.timeRepresentation.INTERVAL=Intervals +TimeRepresentationWrapper.timeRepresentation.TIMESTAMP=Timestamps +TimeRepresentationWrapper.timeRepresentation.disabled.tooltip=Time representation can only be changed when the graph is empty diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_uk.properties b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_uk.properties new file mode 100644 index 0000000000..b9eee0fc76 --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_uk.properties @@ -0,0 +1,29 @@ +IntervalBoundValidator.invalid.bound.message=\u041D\u0435\u0434\u0456\u0439\u0441\u043D\u0435 \u043E\u0431\u043C\u0435\u0436\u0435\u043D\u043D\u044F \u0456\u043D\u0442\u0435\u0440\u0432\u0430\u043B\u0443 (\u043C\u0430\u0454 \u0431\u0443\u0442\u0438 \u0447\u0438\u0441\u043B\u043E \u0437 \u043F\u043B\u0430\u0432\u0430\u044E\u0447\u043E\u044E \u0442\u043E\u0447\u043A\u043E\u044E \u0430\u0431\u043E \u0434\u0430\u0442\u0430) +ChartsUtils.report.header=

              \u0417\u0432\u0456\u0442 \u043F\u0440\u043E \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u0447\u043D\u0456 \u0437\u043D\u0430\u0447\u0435\u043D\u043D\u044F ''{0}''

              +TimeFormatWrapper.timeFormat.DOUBLE=\u0414\u0432\u043E\u043C\u0456\u0441\u043D\u0438\u0439 +ChartsUtils.report.scatter-plot.title=\u0414\u0456\u0430\u0433\u0440\u0430\u043C\u0430 \u0440\u043E\u0437\u0441\u0456\u044E\u0432\u0430\u043D\u043D\u044F +ColumnTitleValidator.title.repeated=\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u0441\u0442\u043E\u0432\u043F\u0446\u044F \u043D\u0435 \u043C\u043E\u0436\u0435 \u043F\u043E\u0432\u0442\u043E\u0440\u044E\u0432\u0430\u0442\u0438\u0441\u044F \u0432 \u043E\u0434\u043D\u0456\u0439 \u0442\u0430\u0431\u043B\u0438\u0446\u0456 +OpenIDE-Module-Long-Description=\u041A\u043B\u0430\u0441\u0438 \u0443\u0442\u0438\u043B\u0456\u0442\u0438 \u0434\u043B\u044F \u0456\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430 +OpenIDE-Module-Short-Description=\u041A\u043B\u0430\u0441\u0438 \u0443\u0442\u0438\u043B\u0456\u0442\u0438 \u0434\u043B\u044F \u0456\u043D\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0443 \u043A\u043E\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430 +ColumnTitleValidator.title.empty=\u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u0441\u0442\u043E\u0432\u043F\u0446\u044F \u043D\u0435 \u043C\u043E\u0436\u0435 \u0431\u0443\u0442\u0438 \u043F\u043E\u0440\u043E\u0436\u043D\u0456\u043C +ChartsUtils.report.empty=\u041D\u0435\u043C\u0430\u0454 \u0447\u0438\u0441\u043B\u043E\u0432\u0438\u0445 \u0434\u0430\u043D\u0438\u0445 \u0434\u043B\u044F \u0440\u043E\u0437\u0440\u0430\u0445\u0443\u043D\u043A\u0443 \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043A\u0438. +ChartsUtils.report.average=\u0421\u0435\u0440\u0435\u0434\u043D\u0456\u0439 +ChartsUtils.report.Q1=\u041F\u0435\u0440\u0448\u0438\u0439 \u043A\u0432\u0430\u0440\u0442\u0438\u043B\u044C (Q1) +ChartsUtils.report.median=\u041C\u0435\u0434\u0456\u0430\u043D\u0430 +ChartsUtils.report.Q3=\u0422\u0440\u0435\u0442\u0456\u0439 \u043A\u0432\u0430\u0440\u0442\u0438\u043B\u044C (Q3) +ChartsUtils.report.IQR=\u0406\u043D\u0442\u0435\u0440\u043A\u0432\u0430\u0440\u0442\u0438\u043B\u044C\u043D\u0438\u0439 \u0434\u0456\u0430\u043F\u0430\u0437\u043E\u043D (IQR) +ChartsUtils.report.sum=\u0421\u0443\u043C\u0430 +ChartsUtils.report.min=\u041C\u0456\u043D\u0456\u043C\u0443\u043C +ChartsUtils.report.max=\u041C\u0430\u043A\u0441\u0438\u043C\u0443\u043C +ChartsUtils.report.box-plot.title=\u041A\u043E\u0440\u043E\u0431\u043A\u0430-\u0434\u0456\u043B\u044F\u043D\u043A\u0430 +ChartsUtils.report.box-plot.values=\u0426\u0456\u043D\u043D\u043E\u0441\u0442\u0456 +ChartsUtils.report.scatter-plot.xLabel=\u0426\u0456\u043D\u043D\u043E\u0441\u0442\u0456 +ChartsUtils.report.histogram.title=\u0413\u0456\u0441\u0442\u043E\u0433\u0440\u0430\u043C\u0430 +ChartsUtils.report.histogram.yLabel=\u0427\u0430\u0441\u0442\u043E\u0442\u0430 +IntervalBoundValidator.invalid.interval.message=\u041D\u0435\u0434\u0456\u0439\u0441\u043D\u0438\u0439 \u0456\u043D\u0442\u0435\u0440\u0432\u0430\u043B (\u043F\u043E\u0447\u0430\u0442\u043E\u043A \u043C\u0430\u0454 \u0431\u0443\u0442\u0438 \u043C\u0435\u043D\u0448\u0438\u043C \u0430\u0431\u043E \u0434\u043E\u0440\u0456\u0432\u043D\u044E\u0432\u0430\u0442\u0438 \u043A\u0456\u043D\u0446\u044F) +TimeFormatWrapper.timeFormat.DATE=\u0414\u0430\u0442\u0430 +TimeFormatWrapper.timeFormat.DATETIME=\u0414\u0430\u0442\u0430 \u0456 \u0447\u0430\u0441 +TimeRepresentationWrapper.timeRepresentation.INTERVAL=\u0406\u043D\u0442\u0435\u0440\u0432\u0430\u043B\u0438 +TimeRepresentationWrapper.timeRepresentation.TIMESTAMP=\u041C\u0456\u0442\u043A\u0438 \u0447\u0430\u0441\u0443 +TimeRepresentationWrapper.timeRepresentation.disabled.tooltip=\u041F\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043B\u0435\u043D\u043D\u044F \u0447\u0430\u0441\u0443 \u043C\u043E\u0436\u043D\u0430 \u0437\u043C\u0456\u043D\u0438\u0442\u0438, \u043B\u0438\u0448\u0435 \u043A\u043E\u043B\u0438 \u0433\u0440\u0430\u0444\u0456\u043A \u043F\u043E\u0440\u043E\u0436\u043D\u0456\u0439 +ChartsUtils.report.box-plot.values-range=\u0414\u0456\u0430\u043F\u0430\u0437\u043E\u043D \u0437\u043D\u0430\u0447\u0435\u043D\u044C diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_zh_CN.properties b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_zh_CN.properties index 6b6bc27736..45855a7e54 100644 --- a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_zh_CN.properties +++ b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_zh_CN.properties @@ -1,52 +1,31 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:05+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u7528\u6237\u754c\u9762\u7684\u6838\u5fc3\u5de5\u5177 - -OpenIDE-Module-Short-Description=\u7528\u6237\u754c\u9762\u7684\u6838\u5fc3\u5de5\u5177 - -ColumnTitleValidator.title.empty=\u5217\u6807\u9898\u4e0d\u80fd\u4e3a\u7a7a - -ColumnTitleValidator.title.repeated=\u5217\u6807\u9898\u5728\u540c\u4e00\u8868\u683c\u5185\u4e0d\u80fd\u91cd\u590d - -ChartsUtils.report.header=

              \u7edf\u8ba1\u503c\u62a5\u544a ''{0}''

              - -ChartsUtils.report.empty=\u65e0\u6570\u503c\u7528\u6765\u8ba1\u7b97\u7edf\u8ba1\u91cf\u3002 - -ChartsUtils.report.average=\u5e73\u5747 - -ChartsUtils.report.Q1=\u7b2c\u4e00\u4e2a\u56db\u5206\u4f4d\u6570(Q1) - -ChartsUtils.report.median=\u4e2d\u4f4d\u6570 - -ChartsUtils.report.Q3=\u7b2c\u4e09\u4e2a\u56db\u5206\u4f4d\u6570(Q3) - -ChartsUtils.report.IQR=\u56db\u5206\u4f4d\u8ddd(IQR) - -ChartsUtils.report.sum=\u603b\u548c - -ChartsUtils.report.min=\u6700\u5c0f\u503c - -ChartsUtils.report.max=\u6700\u5927\u503c - -ChartsUtils.report.box-plot.title=\u7bb1\u56fe - -ChartsUtils.report.box-plot.values=\u503c - -ChartsUtils.report.box-plot.values-range=\u503c\u7684\u8303\u56f4 - -ChartsUtils.report.scatter-plot.title=\u6563\u70b9\u56fe - -ChartsUtils.report.scatter-plot.xLabel=\u503c - -ChartsUtils.report.histogram.title=\u76f4\u65b9\u56fe - -ChartsUtils.report.histogram.yLabel=\u9891\u7387 - -!IntervalBoundValidator.invalid.bound.message= - -!IntervalBoundValidator.invalid.interval.message= +OpenIDE-Module-Long-Description=\u7528\u6237\u754c\u9762\u7684\u6838\u5fc3\u5de5\u5177 +OpenIDE-Module-Short-Description=\u7528\u6237\u754c\u9762\u7684\u6838\u5fc3\u5de5\u5177 +ColumnTitleValidator.title.empty=\u5217\u6807\u9898\u4e0d\u80fd\u4e3a\u7a7a +ColumnTitleValidator.title.repeated=\u5217\u6807\u9898\u5728\u540c\u4e00\u8868\u683c\u5185\u4e0d\u80fd\u91cd\u590d +ChartsUtils.report.header=

              \u7edf\u8ba1\u503c\u62a5\u544a ''{0}''

              +ChartsUtils.report.empty=\u65e0\u6570\u503c\u7528\u6765\u8ba1\u7b97\u7edf\u8ba1\u91cf\u3002 +ChartsUtils.report.average=\u5e73\u5747 +ChartsUtils.report.Q1=\u7b2c\u4e00\u4e2a\u56db\u5206\u4f4d\u6570(Q1) +ChartsUtils.report.median=\u4e2d\u4f4d\u6570 +ChartsUtils.report.Q3=\u7b2c\u4e09\u4e2a\u56db\u5206\u4f4d\u6570(Q3) +ChartsUtils.report.IQR=\u56db\u5206\u4f4d\u8ddd(IQR) +ChartsUtils.report.sum=\u603b\u548c +ChartsUtils.report.min=\u6700\u5c0f\u503c +ChartsUtils.report.max=\u6700\u5927\u503c +ChartsUtils.report.box-plot.title=\u7bb1\u56fe +ChartsUtils.report.box-plot.values=\u503c +ChartsUtils.report.box-plot.values-range=\u503c\u7684\u8303\u56f4 +ChartsUtils.report.scatter-plot.title=\u6563\u70b9\u56fe +ChartsUtils.report.scatter-plot.xLabel=\u503c +ChartsUtils.report.histogram.title=\u76f4\u65b9\u56fe +ChartsUtils.report.histogram.yLabel=\u9891\u7387 +IntervalBoundValidator.invalid.bound.message=\u95f4\u9694\u65e0\u6548\uff08\u5fc5\u987b\u662f\u4e00\u4e2a\u6d6e\u70b9\u6570\u5b57\u6216\u65e5\u671f\uff09 +IntervalBoundValidator.invalid.interval.message=\u65e0\u6548\u533a\u95f4\uff08\u5f00\u59cb\u5fc5\u987b\u5c0f\u4e8e\u6216\u5927\u4e8e\u7b49\u4e8e\u7ed3\u675f\uff09 + +# TimeFormatWrapper.timeFormat.DOUBLE=Double +# TimeFormatWrapper.timeFormat.DATE=Date +# TimeFormatWrapper.timeFormat.DATETIME=Date and time + +# TimeRepresentationWrapper.timeRepresentation.INTERVAL=Intervals +# TimeRepresentationWrapper.timeRepresentation.TIMESTAMP=Timestamps +# TimeRepresentationWrapper.timeRepresentation.disabled.tooltip=Time representation can only be changed when the graph is empty diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_zh_TW.properties b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_zh_TW.properties new file mode 100644 index 0000000000..2640450ec1 --- /dev/null +++ b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/Bundle_zh_TW.properties @@ -0,0 +1,29 @@ +OpenIDE-Module-Long-Description=Utils classes for UI +OpenIDE-Module-Short-Description=Utils classes for UI +ColumnTitleValidator.title.empty=Column title can't be empty +ColumnTitleValidator.title.repeated=Column title can't be repeated in the same table +ChartsUtils.report.header=

              Statistic values report for ''{0}''

              +ChartsUtils.report.empty=There is no number data to calculate statistics. +ChartsUtils.report.average=Average +ChartsUtils.report.Q1=First quartile (Q1) +ChartsUtils.report.median=Median +ChartsUtils.report.Q3=Third quartile (Q3) +ChartsUtils.report.IQR=Interquartile range (IQR) +ChartsUtils.report.sum=Sum +ChartsUtils.report.min=Minimum +ChartsUtils.report.max=Maximum +ChartsUtils.report.box-plot.title=Box-plot +ChartsUtils.report.box-plot.values=Values +ChartsUtils.report.box-plot.values-range=Range of values +ChartsUtils.report.scatter-plot.title=Scatter plot +ChartsUtils.report.scatter-plot.xLabel=Values +ChartsUtils.report.histogram.title=Histogram +ChartsUtils.report.histogram.yLabel=Frequency +IntervalBoundValidator.invalid.bound.message=Invalid interval bound (must be a float number or a date) +IntervalBoundValidator.invalid.interval.message=Invalid interval (start must be lesser or equal than end) +TimeFormatWrapper.timeFormat.DOUBLE=Double +TimeFormatWrapper.timeFormat.DATE=Date +TimeFormatWrapper.timeFormat.DATETIME=Date and time +TimeRepresentationWrapper.timeRepresentation.INTERVAL=Intervals +TimeRepresentationWrapper.timeRepresentation.TIMESTAMP=Timestamps +TimeRepresentationWrapper.timeRepresentation.disabled.tooltip=Time representation can only be changed when the graph is empty diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/cs.po b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/cs.po deleted file mode 100644 index df64f82dea..0000000000 --- a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/cs.po +++ /dev/null @@ -1,88 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:05+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "TΕ™Γ­da nΓ‘strojΕ― pro rozhranΓ­" - -msgid "OpenIDE-Module-Short-Description" -msgstr "TΕ™Γ­da nΓ‘strojΕ― pro rozhranΓ­" - -msgid "ColumnTitleValidator.title.empty" -msgstr "NΓ‘zev sloupce nemΕ―ΕΎe bΓ½t prΓ‘zdnΓ½" - -msgid "ColumnTitleValidator.title.repeated" -msgstr "NΓ‘zev sloupce se nemΕ―ΕΎe opakovat ve stejnΓ© tabulce" - -msgid "ChartsUtils.report.header" -msgstr "

              ZΓ‘znam statistickΓ½ch hodnot pro ''{0}''

              " - -msgid "ChartsUtils.report.empty" -msgstr "NeexistujΓ­ ΕΎΓ‘dnΓ‘ číselnΓ‘ data pro vΓ½počet statistik" - -msgid "ChartsUtils.report.average" -msgstr "PrΕ―mΔ›r" - -msgid "ChartsUtils.report.Q1" -msgstr "PrvnΓ­ kvartΓ‘l (Q1)" - -msgid "ChartsUtils.report.median" -msgstr "MediΓ‘n" - -msgid "ChartsUtils.report.Q3" -msgstr "TΕ™etΓ­ kvartΓ‘l (Q3)" - -msgid "ChartsUtils.report.IQR" -msgstr "RozmezΓ­ mezi kvartily (IQR)" - -msgid "ChartsUtils.report.sum" -msgstr "Suma" - -msgid "ChartsUtils.report.min" -msgstr "Minimum" - -msgid "ChartsUtils.report.max" -msgstr "Maximum" - -msgid "ChartsUtils.report.box-plot.title" -msgstr "KrabicovΓ½ graf" - -msgid "ChartsUtils.report.box-plot.values" -msgstr "Hodnoty" - -msgid "ChartsUtils.report.box-plot.values-range" -msgstr "Rozsah hodnot" - -msgid "ChartsUtils.report.scatter-plot.title" -msgstr "BodovΓ½ graf" - -msgid "ChartsUtils.report.scatter-plot.xLabel" -msgstr "Hodnoty" - -msgid "ChartsUtils.report.histogram.title" -msgstr "Histogram" - -msgid "ChartsUtils.report.histogram.yLabel" -msgstr "Četnost" - -msgid "IntervalBoundValidator.invalid.bound.message" -msgstr "" - -msgid "IntervalBoundValidator.invalid.interval.message" -msgstr "" diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/es.po b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/es.po deleted file mode 100644 index 375dacc11a..0000000000 --- a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/es.po +++ /dev/null @@ -1,89 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:23+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Clases de utilidades para la interfaz de usuario" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Clases de utilidades para la interfaz de usuario" - -msgid "ColumnTitleValidator.title.empty" -msgstr "El tΓ­tulo de la columna no puede estar vacΓ­o" - -msgid "ColumnTitleValidator.title.repeated" -msgstr "El tΓ­tulo de la columna no puede estar repetido en la misma tabla" - -msgid "ChartsUtils.report.header" -msgstr "

              Informe de estadΓ­sticas para ''{0}''

              " - -msgid "ChartsUtils.report.empty" -msgstr "No hay datos numΓ©ricos para calcular estadΓ­sticas." - -msgid "ChartsUtils.report.average" -msgstr "Media" - -msgid "ChartsUtils.report.Q1" -msgstr "Primer cuartil (Q1)" - -msgid "ChartsUtils.report.median" -msgstr "Mediana" - -msgid "ChartsUtils.report.Q3" -msgstr "Tercer cuartil (Q3)" - -msgid "ChartsUtils.report.IQR" -msgstr "Rango intercuartΓ­lico (IQR)" - -msgid "ChartsUtils.report.sum" -msgstr "Suma" - -msgid "ChartsUtils.report.min" -msgstr "MΓ­nimo" - -msgid "ChartsUtils.report.max" -msgstr "MΓ‘ximo" - -msgid "ChartsUtils.report.box-plot.title" -msgstr "Diagrama de cajas" - -msgid "ChartsUtils.report.box-plot.values" -msgstr "Valores" - -msgid "ChartsUtils.report.box-plot.values-range" -msgstr "Rango de valores" - -msgid "ChartsUtils.report.scatter-plot.title" -msgstr "Diagrama de dispersiΓ³n" - -msgid "ChartsUtils.report.scatter-plot.xLabel" -msgstr "Valores" - -msgid "ChartsUtils.report.histogram.title" -msgstr "Histograma" - -msgid "ChartsUtils.report.histogram.yLabel" -msgstr "Frecuencia" - -msgid "IntervalBoundValidator.invalid.bound.message" -msgstr "LΓ­mite de intΓ©rvalo invΓ‘lido (debe ser un nΓΊmero decimal o una fecha)" - -msgid "IntervalBoundValidator.invalid.interval.message" -msgstr "IntΓ©rvalo invΓ‘lido (el lΓ­mite inferior debe ser menor o igual que el superior)" diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/fr.po b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/fr.po deleted file mode 100644 index 645c21f072..0000000000 --- a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/fr.po +++ /dev/null @@ -1,88 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:05+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Classes utilitaires pour l'interface utilisateur" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Classes utilitaires pour l'interface utilisateur" - -msgid "ColumnTitleValidator.title.empty" -msgstr "Le titre de la colonne ne peut Γͺtre vide." - -msgid "ColumnTitleValidator.title.repeated" -msgstr "Le titre de la colonne ne peut Γͺtre rΓ©pΓ©tΓ©e dans la mΓͺme table." - -msgid "ChartsUtils.report.header" -msgstr "

              Rapport de statistiques pour ''{0}''

              " - -msgid "ChartsUtils.report.empty" -msgstr "Aucune donnΓ©e." - -msgid "ChartsUtils.report.average" -msgstr "Moyenne" - -msgid "ChartsUtils.report.Q1" -msgstr "Premier quartile (Q1)" - -msgid "ChartsUtils.report.median" -msgstr "MΓ©diane" - -msgid "ChartsUtils.report.Q3" -msgstr "TroisiΓ¨me quartile (Q3)" - -msgid "ChartsUtils.report.IQR" -msgstr "Plage interquartile (IQR)" - -msgid "ChartsUtils.report.sum" -msgstr "Somme" - -msgid "ChartsUtils.report.min" -msgstr "Minimum" - -msgid "ChartsUtils.report.max" -msgstr "Maximum" - -msgid "ChartsUtils.report.box-plot.title" -msgstr "BoΓte Γ  moustaches" - -msgid "ChartsUtils.report.box-plot.values" -msgstr "Valeurs" - -msgid "ChartsUtils.report.box-plot.values-range" -msgstr "Plage de valeurs" - -msgid "ChartsUtils.report.scatter-plot.title" -msgstr "Nuage de points" - -msgid "ChartsUtils.report.scatter-plot.xLabel" -msgstr "Valeurs" - -msgid "ChartsUtils.report.histogram.title" -msgstr "Histogramme" - -msgid "ChartsUtils.report.histogram.yLabel" -msgstr "FrΓ©quence" - -msgid "IntervalBoundValidator.invalid.bound.message" -msgstr "" - -msgid "IntervalBoundValidator.invalid.interval.message" -msgstr "" diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/ja.po b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/ja.po deleted file mode 100644 index a87d1524d3..0000000000 --- a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/ja.po +++ /dev/null @@ -1,88 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:05+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "UI用ユーティγƒͺティクラス" - -msgid "OpenIDE-Module-Short-Description" -msgstr "UI用ユーティγƒͺティクラス" - -msgid "ColumnTitleValidator.title.empty" -msgstr "εˆ—γγ‚Ώγ‚€γƒˆγƒ«γ―空欄ではγͺγ‚ŠγΎγ›γ‚“γ€‚" - -msgid "ColumnTitleValidator.title.repeated" -msgstr "εˆ—γγ‚Ώγ‚€γƒˆγƒ«γ―εŒγ˜θ‘¨γ§ηΉ°γ‚ŠθΏ”γ—γ§γγΎγ›γ‚“γ€‚" - -msgid "ChartsUtils.report.header" -msgstr "

              ''{0}''用γη΅±θ¨ˆε€€ε ±ε‘Š

              " - -msgid "ChartsUtils.report.empty" -msgstr "η΅±θ¨ˆε€€γ‚’θ¨ˆη—γ™γ‚‹ζ•°γƒ‡γƒΌγ‚ΏγŒγ‚γ‚ŠγΎγ›γ‚“γ€‚" - -msgid "ChartsUtils.report.average" -msgstr "平均倀" - -msgid "ChartsUtils.report.Q1" -msgstr "η¬¬οΌ‘ε››εˆ†δ½η‚Ή(Q1)" - -msgid "ChartsUtils.report.median" -msgstr "δΈ­ε€ε€€" - -msgid "ChartsUtils.report.Q3" -msgstr "η¬¬οΌ“ε››εˆ†δ½η‚Ή(Q3)" - -msgid "ChartsUtils.report.IQR" -msgstr "ε››εˆ†δ½ζ•°η―„ε›² (IQR)" - -msgid "ChartsUtils.report.sum" -msgstr "合計" - -msgid "ChartsUtils.report.min" -msgstr "ζœ€ε°ε€€" - -msgid "ChartsUtils.report.max" -msgstr "ζœ€ε€§ε€€" - -msgid "ChartsUtils.report.box-plot.title" -msgstr "η±γ²γ’ε›³" - -msgid "ChartsUtils.report.box-plot.values" -msgstr "ε€€" - -msgid "ChartsUtils.report.box-plot.values-range" -msgstr "ε€€γεΉ…" - -msgid "ChartsUtils.report.scatter-plot.title" -msgstr "ζ•£εΈƒε›³" - -msgid "ChartsUtils.report.scatter-plot.xLabel" -msgstr "ε€€" - -msgid "ChartsUtils.report.histogram.title" -msgstr "εΊ¦ζ•°εˆ†εΈƒε›³" - -msgid "ChartsUtils.report.histogram.yLabel" -msgstr "ι »εΊ¦" - -msgid "IntervalBoundValidator.invalid.bound.message" -msgstr "" - -msgid "IntervalBoundValidator.invalid.interval.message" -msgstr "" diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/org-gephi-ui-utils.pot b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/org-gephi-ui-utils.pot deleted file mode 100644 index e88de1477b..0000000000 --- a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/org-gephi-ui-utils.pot +++ /dev/null @@ -1,85 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Utils classes for UI" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Utils classes for UI" - -msgid "ColumnTitleValidator.title.empty" -msgstr "Column title can't be empty" - -msgid "ColumnTitleValidator.title.repeated" -msgstr "Column title can't be repeated in the same table" - -msgid "ChartsUtils.report.header" -msgstr "

              Statistic values report for ''{0}''

              " - -msgid "ChartsUtils.report.empty" -msgstr "There is no number data to calculate statistics." - -msgid "ChartsUtils.report.average" -msgstr "Average" - -msgid "ChartsUtils.report.Q1" -msgstr "First quartile (Q1)" - -msgid "ChartsUtils.report.median" -msgstr "Median" - -msgid "ChartsUtils.report.Q3" -msgstr "Third quartile (Q3)" - -msgid "ChartsUtils.report.IQR" -msgstr "Interquartile range (IQR)" - -msgid "ChartsUtils.report.sum" -msgstr "Sum" - -msgid "ChartsUtils.report.min" -msgstr "Minimum" - -msgid "ChartsUtils.report.max" -msgstr "Maximum" - -msgid "ChartsUtils.report.box-plot.title" -msgstr "Box-plot" - -msgid "ChartsUtils.report.box-plot.values" -msgstr "Values" - -msgid "ChartsUtils.report.box-plot.values-range" -msgstr "Range of values" - -msgid "ChartsUtils.report.scatter-plot.title" -msgstr "Scatter plot" - -msgid "ChartsUtils.report.scatter-plot.xLabel" -msgstr "Values" - -msgid "ChartsUtils.report.histogram.title" -msgstr "Histogram" - -msgid "ChartsUtils.report.histogram.yLabel" -msgstr "Frequency" - -msgid "IntervalBoundValidator.invalid.bound.message" -msgstr "Invalid interval bound (must be a float number or a date)" - -msgid "IntervalBoundValidator.invalid.interval.message" -msgstr "Invalid interval (start must be lesser or equal than end)" diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/pt_BR.po b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/pt_BR.po deleted file mode 100644 index 5402886a49..0000000000 --- a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/pt_BR.po +++ /dev/null @@ -1,88 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:05+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Classes utilitΓ‘rias para interface de usuΓ‘rio" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Classes utilitΓ‘rias para interface de usuΓ‘rio" - -msgid "ColumnTitleValidator.title.empty" -msgstr "O tΓ­tulo da coluna nΓ£o pode ser vazio" - -msgid "ColumnTitleValidator.title.repeated" -msgstr "O tΓ­tulo da coluna nΓ£o pode ser repetido na mesma tabela" - -msgid "ChartsUtils.report.header" -msgstr "

              RelatΓ³rio de valores estatΓ­sticos para ''{0}''

              " - -msgid "ChartsUtils.report.empty" -msgstr "NΓ£o hΓ‘ dados numΓ©ricos para calcular estatΓ­sticas." - -msgid "ChartsUtils.report.average" -msgstr "MΓ©dia" - -msgid "ChartsUtils.report.Q1" -msgstr "Primeiro quartil (Q1)" - -msgid "ChartsUtils.report.median" -msgstr "Mediana" - -msgid "ChartsUtils.report.Q3" -msgstr "Terceiro quartil (Q3)" - -msgid "ChartsUtils.report.IQR" -msgstr "Intervalo interquartil (IQR)" - -msgid "ChartsUtils.report.sum" -msgstr "Soma" - -msgid "ChartsUtils.report.min" -msgstr "MΓ­nimo" - -msgid "ChartsUtils.report.max" -msgstr "MΓ‘ximo" - -msgid "ChartsUtils.report.box-plot.title" -msgstr "GrΓ‘fico de caixa" - -msgid "ChartsUtils.report.box-plot.values" -msgstr "Valores" - -msgid "ChartsUtils.report.box-plot.values-range" -msgstr "Intervalo de valores" - -msgid "ChartsUtils.report.scatter-plot.title" -msgstr "GrΓ‘fico de dispersΓ£o" - -msgid "ChartsUtils.report.scatter-plot.xLabel" -msgstr "Valores" - -msgid "ChartsUtils.report.histogram.title" -msgstr "Histograma" - -msgid "ChartsUtils.report.histogram.yLabel" -msgstr "FrequΓͺncia" - -msgid "IntervalBoundValidator.invalid.bound.message" -msgstr "" - -msgid "IntervalBoundValidator.invalid.interval.message" -msgstr "" diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/ru.po b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/ru.po deleted file mode 100644 index 163843b48f..0000000000 --- a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/ru.po +++ /dev/null @@ -1,88 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:05+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ классы для UI" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Π’ΡΠΏΠΎΠΌΠΎΠ³Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ классы для UI" - -msgid "ColumnTitleValidator.title.empty" -msgstr "Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ столбца Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустым" - -msgid "ColumnTitleValidator.title.repeated" -msgstr "Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ столбца Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡ‚ΡŒΡΡ Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠΉ Ρ‚Π°Π±Π»ΠΈΡ†Ρ‹" - -msgid "ChartsUtils.report.header" -msgstr "

              Π‘Π²ΠΎΠ΄ΠΊΠ° статистичСских ΠΎΡ†Π΅Π½ΠΎΠΊ для ''{0}''

              " - -msgid "ChartsUtils.report.empty" -msgstr "НСт числовых Π΄Π°Π½Π½Ρ‹Ρ…, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹Ρ… для расчёта статистик." - -msgid "ChartsUtils.report.average" -msgstr "Π‘Ρ€Π΅Π΄Π½Π΅Π΅" - -msgid "ChartsUtils.report.Q1" -msgstr "ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΠ»ΡŒ (Q1)" - -msgid "ChartsUtils.report.median" -msgstr "МСдиана" - -msgid "ChartsUtils.report.Q3" -msgstr "Π’Ρ€Π΅Ρ‚ΠΈΠΉ ΠΊΠ²Π°Ρ€Ρ‚ΠΈΠ»ΡŒ (Q3)" - -msgid "ChartsUtils.report.IQR" -msgstr "ΠœΠ΅ΠΆΠΊΠ²Π°Ρ€Ρ‚ΠΈΠ»ΡŒΠ½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ°Ρ… (МКР)" - -msgid "ChartsUtils.report.sum" -msgstr "Π‘ΡƒΠΌΠΌΠ°" - -msgid "ChartsUtils.report.min" -msgstr "ΠœΠΈΠ½ΠΈΠΌΡƒΠΌ" - -msgid "ChartsUtils.report.max" -msgstr "ΠœΠ°ΠΊΡΠΈΠΌΡƒΠΌ" - -msgid "ChartsUtils.report.box-plot.title" -msgstr "Box-plot" - -msgid "ChartsUtils.report.box-plot.values" -msgstr "ЗначСния" - -msgid "ChartsUtils.report.box-plot.values-range" -msgstr "Π”ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ" - -msgid "ChartsUtils.report.scatter-plot.title" -msgstr "Scatter plot" - -msgid "ChartsUtils.report.scatter-plot.xLabel" -msgstr "ЗначСния" - -msgid "ChartsUtils.report.histogram.title" -msgstr "Гистограмма" - -msgid "ChartsUtils.report.histogram.yLabel" -msgstr "Частота" - -msgid "IntervalBoundValidator.invalid.bound.message" -msgstr "" - -msgid "IntervalBoundValidator.invalid.interval.message" -msgstr "" diff --git a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/zh_CN.po b/modules/UIUtils/src/main/resources/org/gephi/ui/utils/zh_CN.po deleted file mode 100644 index 94b1d1b230..0000000000 --- a/modules/UIUtils/src/main/resources/org/gephi/ui/utils/zh_CN.po +++ /dev/null @@ -1,87 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:05+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "η”¨ζˆ·η•Œι’ηš„ζ ΈεΏƒε·₯ε…·" - -msgid "OpenIDE-Module-Short-Description" -msgstr "η”¨ζˆ·η•Œι’ηš„ζ ΈεΏƒε·₯ε…·" - -msgid "ColumnTitleValidator.title.empty" -msgstr "εˆ—ζ ‡ι’˜δΈθƒ½δΈΊη©Ί" - -msgid "ColumnTitleValidator.title.repeated" -msgstr "εˆ—ζ ‡ι’˜εœ¨εŒδΈ€θ‘¨ζ Όε†…δΈθƒ½ι‡ε€" - -msgid "ChartsUtils.report.header" -msgstr "

              统θ‘ε€ΌζŠ₯ε‘Š ''{0}''

              " - -msgid "ChartsUtils.report.empty" -msgstr "无数值用ζ₯θ‘η—η»Ÿθ‘量。" - -msgid "ChartsUtils.report.average" -msgstr "平均" - -msgid "ChartsUtils.report.Q1" -msgstr "第一δΈͺε››εˆ†δ½ζ•°(Q1)" - -msgid "ChartsUtils.report.median" -msgstr "中位数" - -msgid "ChartsUtils.report.Q3" -msgstr "第三δΈͺε››εˆ†δ½ζ•°(Q3)" - -msgid "ChartsUtils.report.IQR" -msgstr "ε››εˆ†δ½θ·(IQR)" - -msgid "ChartsUtils.report.sum" -msgstr "ζ€»ε’Œ" - -msgid "ChartsUtils.report.min" -msgstr "ζœ€ε°ε€Ό" - -msgid "ChartsUtils.report.max" -msgstr "ζœ€ε€§ε€Ό" - -msgid "ChartsUtils.report.box-plot.title" -msgstr "η±ε›Ύ" - -msgid "ChartsUtils.report.box-plot.values" -msgstr "ε€Ό" - -msgid "ChartsUtils.report.box-plot.values-range" -msgstr "ε€Όηš„θŒƒε›΄" - -msgid "ChartsUtils.report.scatter-plot.title" -msgstr "ζ•£η‚Ήε›Ύ" - -msgid "ChartsUtils.report.scatter-plot.xLabel" -msgstr "ε€Ό" - -msgid "ChartsUtils.report.histogram.title" -msgstr "η›΄ζ–Ήε›Ύ" - -msgid "ChartsUtils.report.histogram.yLabel" -msgstr "ι’‘ηŽ‡" - -msgid "IntervalBoundValidator.invalid.bound.message" -msgstr "" - -msgid "IntervalBoundValidator.invalid.interval.message" -msgstr "" diff --git a/modules/Utils/pom.xml b/modules/Utils/pom.xml index 3ce7b36574..13a2711766 100644 --- a/modules/Utils/pom.xml +++ b/modules/Utils/pom.xml @@ -4,28 +4,36 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi utils - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm Utils + + ${project.groupId} + graph-api + ${project.groupId} core-library-wrapper + + org.netbeans.api + org-openide-util + - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/Utils/src/main/java/org/gephi/utils/Attributes.java b/modules/Utils/src/main/java/org/gephi/utils/Attributes.java new file mode 100644 index 0000000000..6222ea6a37 --- /dev/null +++ b/modules/Utils/src/main/java/org/gephi/utils/Attributes.java @@ -0,0 +1,80 @@ +/* +Copyright 2008-2017 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2017 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2017 Gephi Consortium. + */ + +package org.gephi.utils; + +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.TimeRepresentation; +import org.gephi.graph.api.types.IntervalMap; +import org.gephi.graph.api.types.IntervalSet; +import org.gephi.graph.api.types.TimestampMap; +import org.gephi.graph.api.types.TimestampSet; + +/** + * @author Eduardo Ramos + */ +public class Attributes { + public static boolean isTypeAvailable(Class type, TimeRepresentation timeRepresentation) { + if (AttributeUtils.isDynamicType(type)) { + switch (timeRepresentation) { + case INTERVAL: + return isIntervalType(type); + case TIMESTAMP: + return isTimestampType(type); + default: + throw new IllegalArgumentException("Unknown timeRepresentation"); + } + } else { + return true; + } + } + + public static boolean isTimestampType(Class type) { + return TimestampSet.class.isAssignableFrom(type) + || TimestampMap.class.isAssignableFrom(type); + } + + public static boolean isIntervalType(Class type) { + return IntervalSet.class.isAssignableFrom(type) + || IntervalMap.class.isAssignableFrom(type); + } +} diff --git a/modules/Utils/src/main/java/org/gephi/utils/CharsetToolkit.java b/modules/Utils/src/main/java/org/gephi/utils/CharsetToolkit.java index 6fa4841077..8aa6edb04b 100644 --- a/modules/Utils/src/main/java/org/gephi/utils/CharsetToolkit.java +++ b/modules/Utils/src/main/java/org/gephi/utils/CharsetToolkit.java @@ -13,22 +13,34 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + package org.gephi.utils; -import java.io.*; +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.LineNumberReader; +import java.io.PushbackInputStream; import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.Collection; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamReader; /** - *

              Utility class to guess the encoding of a given text file.

              - * - *

              Unicode files encoded in UTF-16 (low or big endian) or UTF-8 files + * Utility class to guess the encoding of a given text file. + *

              + * Unicode files encoded in UTF-16 (low or big endian) or UTF-8 files * with a Byte Order Marker are correctly discovered. For UTF-8 files with no BOM, if the buffer - * is wide enough, the charset should also be discovered.

              - * - *

              A byte buffer of 4KB is usually sufficient to be able to guess the encoding.

              - * - *

              Usage:

              + * is wide enough, the charset should also be discovered. + *

              + * A byte buffer of 4KB is usually sufficient to be able to guess the encoding. + *

              + * Usage: *

                * // guess the encoding
                * Charset guessedCharset = CharsetToolkit.guessEncoding(file, 4096);
              @@ -51,16 +63,17 @@ public class CharsetToolkit {
               
                   private static final int BUFFER_SIZE = 4096;
                   private static final byte[] EMPTY_BYTE_ARRAY = new byte[0];
              +    private final PushbackInputStream input;
                   private byte[] buffer = EMPTY_BYTE_ARRAY;
                   private Charset defaultCharset;
                   private Charset charset;
                   private boolean enforce8Bit = true;
              -    private PushbackInputStream input;
               
                   /**
                    * Constructor of the CharsetToolkit utility class.
                    *
              -     * @param file of which we want to know the encoding.
              +     * @param stream of which we want to know the encoding.
              +     * @throws IOException if an io error occurs
                    */
                   public CharsetToolkit(InputStream stream) throws IOException {
                       this.defaultCharset = getDefaultSystemCharset();
              @@ -84,18 +97,83 @@ public CharsetToolkit(InputStream stream) throws IOException {
                   }
               
                   /**
              -     * Defines the default Charset used in case the buffer represents
              -     * an 8-bit Charset.
              +     * If the byte has the form 10xxxxx, then it's a continuation byte of a multiple byte character;
                    *
              -     * @param defaultCharset the default Charset to be returned by guessEncoding()
              -     * if an 8-bit Charset is encountered.
              +     * @param b a byte.
              +     * @return true if it's a continuation char.
                    */
              -    public void setDefaultCharset(Charset defaultCharset) {
              -        if (defaultCharset != null) {
              -            this.defaultCharset = defaultCharset;
              -        } else {
              -            this.defaultCharset = getDefaultSystemCharset();
              -        }
              +    private static boolean isContinuationChar(byte b) {
              +        return -128 <= b && b <= -65;
              +    }
              +
              +    /**
              +     * If the byte has the form 110xxxx, then it's the first byte of a two-bytes sequence character.
              +     *
              +     * @param b a byte.
              +     * @return true if it's the first byte of a two-bytes sequence.
              +     */
              +    private static boolean isTwoBytesSequence(byte b) {
              +        return -64 <= b && b <= -33;
              +    }
              +
              +    /**
              +     * If the byte has the form 1110xxx, then it's the first byte of a three-bytes sequence character.
              +     *
              +     * @param b a byte.
              +     * @return true if it's the first byte of a three-bytes sequence.
              +     */
              +    private static boolean isThreeBytesSequence(byte b) {
              +        return -32 <= b && b <= -17;
              +    }
              +
              +    /**
              +     * If the byte has the form 11110xx, then it's the first byte of a four-bytes sequence character.
              +     *
              +     * @param b a byte.
              +     * @return true if it's the first byte of a four-bytes sequence.
              +     */
              +    private static boolean isFourBytesSequence(byte b) {
              +        return -16 <= b && b <= -9;
              +    }
              +
              +    /**
              +     * If the byte has the form 11110xx, then it's the first byte of a five-bytes sequence character.
              +     *
              +     * @param b a byte.
              +     * @return true if it's the first byte of a five-bytes sequence.
              +     */
              +    private static boolean isFiveBytesSequence(byte b) {
              +        return -8 <= b && b <= -5;
              +    }
              +
              +    /**
              +     * If the byte has the form 1110xxx, then it's the first byte of a six-bytes sequence character.
              +     *
              +     * @param b a byte.
              +     * @return true if it's the first byte of a six-bytes sequence.
              +     */
              +    private static boolean isSixBytesSequence(byte b) {
              +        return -4 <= b && b <= -3;
              +    }
              +
              +    /**
              +     * Retrieve the default charset of the system.
              +     *
              +     * @return the default Charset.
              +     */
              +    public static Charset getDefaultSystemCharset() {
              +        return Charset.forName(System.getProperty("file.encoding"));
              +    }
              +
              +    /**
              +     * Retrieves all the available Charsets on the platform,
              +     * among which the default charset.
              +     *
              +     * @return an array of Charsets.
              +     */
              +    public static Charset[] getAvailableCharsets() {
              +        Collection collection = Charset.availableCharsets().values();
              +        return (Charset[]) collection.toArray(new Charset[collection.size()]);
                   }
               
                   public Charset getCharset() {
              @@ -105,6 +183,15 @@ public Charset getCharset() {
                       return charset;
                   }
               
              +    /**
              +     * Gets the enforce8Bit flag, in case we do not want to ever get a US-ASCII encoding.
              +     *
              +     * @return a boolean representing the flag of use of US-ASCII.
              +     */
              +    public boolean getEnforce8Bit() {
              +        return this.enforce8Bit;
              +    }
              +
                   /**
                    * If US-ASCII is recognized, enforce to return the default encoding, rather than US-ASCII.
                    * It might be a file without any special character in the range 128-255, but that may be or become
              @@ -117,24 +204,32 @@ public void setEnforce8Bit(boolean enforce) {
                   }
               
                   /**
              -     * Gets the enforce8Bit flag, in case we do not want to ever get a US-ASCII encoding.
              +     * Retrieves the default Charset
                    *
              -     * @return a boolean representing the flag of use of US-ASCII.
              +     * @return charset
                    */
              -    public boolean getEnforce8Bit() {
              -        return this.enforce8Bit;
              +    public Charset getDefaultCharset() {
              +        return defaultCharset;
                   }
               
                   /**
              -     * Retrieves the default Charset
              +     * Defines the default Charset used in case the buffer represents
              +     * an 8-bit Charset.
              +     *
              +     * @param defaultCharset the default Charset to be returned by guessEncoding()
              +     *                       if an 8-bit Charset is encountered.
                    */
              -    public Charset getDefaultCharset() {
              -        return defaultCharset;
              +    public void setDefaultCharset(Charset defaultCharset) {
              +        if (defaultCharset != null) {
              +            this.defaultCharset = defaultCharset;
              +        } else {
              +            this.defaultCharset = getDefaultSystemCharset();
              +        }
                   }
               
                   /**
                    * 

              Guess the encoding of the provided buffer.

              - * If Byte Order Markers are encountered at the beginning of the buffer, we immidiately + *

              If Byte Order Markers are encountered at the beginning of the buffer, we immidiately * return the charset implied by this BOM. Otherwise, the file would not be a human * readable text file.

              * @@ -160,13 +255,31 @@ private Charset guessEncoding() { // if the file has a Byte Order Marker, we can assume the file is in UTF-xx // otherwise, the file would not be human readable if (hasUTF8Bom()) { - return Charset.forName("UTF-8"); + return StandardCharsets.UTF_8; } if (hasUTF16LEBom()) { - return Charset.forName("UTF-16LE"); + return StandardCharsets.UTF_16LE; } if (hasUTF16BEBom()) { - return Charset.forName("UTF-16BE"); + return StandardCharsets.UTF_16BE; + } + + if (hasXMLHeader()) { + try { + XMLStreamReader xmlStreamReader = + XMLInputFactory.newInstance().createXMLStreamReader(new ByteArrayInputStream(buffer)); + String encoding = xmlStreamReader.getCharacterEncodingScheme(); + + if (encoding != null) { + Charset xmlCharset = Charset.forName(encoding.trim().toUpperCase()); + + Logger.getLogger("").log(Level.INFO, "Detected encoding {0} in XML file", xmlCharset.name()); + return xmlCharset; + } + } catch (Exception ex) { + //Could not find charset, keep normal process + Logger.getLogger("").log(Level.WARNING, ex.getMessage()); + } } // if a byte has its most significant bit set, the file is in UTF-8 or in the default encoding @@ -223,7 +336,8 @@ else if (isFourBytesSequence(b0)) { else if (isFiveBytesSequence(b0)) { // there must be four continuation bytes of the form 10xxxxxx, // otherwise the following characteris is not a valid UTF-8 construct - if (!(isContinuationChar(b1) && isContinuationChar(b2) && isContinuationChar(b3) && isContinuationChar(b4))) { + if (!(isContinuationChar(b1) && isContinuationChar(b2) && isContinuationChar(b3) && + isContinuationChar(b4))) { validU8Char = false; } else { i += 4; @@ -232,7 +346,8 @@ else if (isFiveBytesSequence(b0)) { else if (isSixBytesSequence(b0)) { // there must be five continuation bytes of the form 10xxxxxx, // otherwise the following characteris is not a valid UTF-8 construct - if (!(isContinuationChar(b1) && isContinuationChar(b2) && isContinuationChar(b3) && isContinuationChar(b4) && isContinuationChar(b5))) { + if (!(isContinuationChar(b1) && isContinuationChar(b2) && isContinuationChar(b3) && + isContinuationChar(b4) && isContinuationChar(b5))) { validU8Char = false; } else { i += 5; @@ -253,87 +368,18 @@ else if (isSixBytesSequence(b0)) { if (this.enforce8Bit) { return this.defaultCharset; } else { - return Charset.forName("US-ASCII"); + return StandardCharsets.US_ASCII; } } // if no invalid UTF-8 were encountered, we can assume the encoding is UTF-8, // otherwise the file would not be human readable if (validU8Char) { - return Charset.forName("UTF-8"); + return StandardCharsets.UTF_8; } // finally, if it's not UTF-8 nor US-ASCII, let's assume the encoding is the default encoding return this.defaultCharset; } - /** - * If the byte has the form 10xxxxx, then it's a continuation byte of a multiple byte character; - * - * @param b a byte. - * @return true if it's a continuation char. - */ - private static boolean isContinuationChar(byte b) { - return -128 <= b && b <= -65; - } - - /** - * If the byte has the form 110xxxx, then it's the first byte of a two-bytes sequence character. - * - * @param b a byte. - * @return true if it's the first byte of a two-bytes sequence. - */ - private static boolean isTwoBytesSequence(byte b) { - return -64 <= b && b <= -33; - } - - /** - * If the byte has the form 1110xxx, then it's the first byte of a three-bytes sequence character. - * - * @param b a byte. - * @return true if it's the first byte of a three-bytes sequence. - */ - private static boolean isThreeBytesSequence(byte b) { - return -32 <= b && b <= -17; - } - - /** - * If the byte has the form 11110xx, then it's the first byte of a four-bytes sequence character. - * - * @param b a byte. - * @return true if it's the first byte of a four-bytes sequence. - */ - private static boolean isFourBytesSequence(byte b) { - return -16 <= b && b <= -9; - } - - /** - * If the byte has the form 11110xx, then it's the first byte of a five-bytes sequence character. - * - * @param b a byte. - * @return true if it's the first byte of a five-bytes sequence. - */ - private static boolean isFiveBytesSequence(byte b) { - return -8 <= b && b <= -5; - } - - /** - * If the byte has the form 1110xxx, then it's the first byte of a six-bytes sequence character. - * - * @param b a byte. - * @return true if it's the first byte of a six-bytes sequence. - */ - private static boolean isSixBytesSequence(byte b) { - return -4 <= b && b <= -3; - } - - /** - * Retrieve the default charset of the system. - * - * @return the default Charset. - */ - public static Charset getDefaultSystemCharset() { - return Charset.forName(System.getProperty("file.encoding")); - } - /** * Has a Byte Order Marker for UTF-8 (Used by Microsoft's Notepad and other editors). * @@ -381,7 +427,6 @@ public boolean hasUTF16BEBom() { * method guessEncoding(). * * @return a BufferedReader - * @throws FileNotFoundException if the file is not found. */ public BufferedReader getReader() { LineNumberReader reader = new LineNumberReader(new InputStreamReader(input, getCharset())); @@ -396,14 +441,9 @@ public BufferedReader getReader() { return reader; } - /** - * Retrieves all the available Charsets on the platform, - * among which the default charset. - * - * @return an array of Charsets. - */ - public static Charset[] getAvailableCharsets() { - Collection collection = Charset.availableCharsets().values(); - return (Charset[]) collection.toArray(new Charset[collection.size()]); + private boolean hasXMLHeader() { + String header = new String(buffer, 0, Math.min(256, buffer.length)).toLowerCase(); + + return header.contains("= 1.0) { + throw new IllegalArgumentException("Factor must be < 1.0 to darken"); + } + return darkenOrLighten(color, factor); + } + + public static Color lighten(Color color, double factor) { + if (factor <= 1.0) { + throw new IllegalArgumentException("Factor must be > 1.0 to lighten"); + } + return darkenOrLighten(color, factor); + } + + private static Color darkenOrLighten(Color color, double factor) { + // factor < 1.0 makes it darker, > 1.0 would make it lighter + int r = (int) Math.round(color.getRed() * factor); + int g = (int) Math.round(color.getGreen() * factor); + int b = (int) Math.round(color.getBlue() * factor); + + // Clamp to valid range [0, 255] + r = Math.min(255, Math.max(0, r)); + g = Math.min(255, Math.max(0, g)); + b = Math.min(255, Math.max(0, b)); + + // Preserve alpha + return new Color(r, g, b, color.getAlpha()); + } + + /** + * Serializes a Color to a 4-byte array (ARGB packed int). + */ + public static byte[] serializeColor(Color color) { + return ByteBuffer.allocate(4).putInt(color.getRGB()).array(); + } + + /** + * Deserializes a Color from a 4-byte array (ARGB packed int). + * + * @return the deserialized Color, or null if bytes is null or invalid + */ + public static Color deserializeColor(byte[] bytes) { + if (bytes == null || bytes.length != 4) { + return null; + } + return new Color(ByteBuffer.wrap(bytes).getInt(), true); + } + + /** + * Serializes a Color array to bytes (4 bytes per color, ARGB packed int). + */ + public static byte[] serializeColors(Color[] colors) { + ByteBuffer buffer = ByteBuffer.allocate(colors.length * 4); + for (Color c : colors) { + buffer.putInt(c.getRGB()); + } + return buffer.array(); + } + + /** + * Deserializes a Color array from bytes (4 bytes per color, ARGB packed int). + * + * @return the deserialized Color array, or null if bytes is null or invalid + */ + public static Color[] deserializeColors(byte[] bytes) { + if (bytes == null || bytes.length % 4 != 0) { + return null; + } + ByteBuffer buffer = ByteBuffer.wrap(bytes); + Color[] colors = new Color[bytes.length / 4]; + for (int i = 0; i < colors.length; i++) { + colors[i] = new Color(buffer.getInt(), true); + } + return colors; + } + + /** + * Serializes a float array to bytes (4 bytes per float). Useful for gradient color positions. + */ + public static byte[] serializeFloats(float[] values) { + ByteBuffer buffer = ByteBuffer.allocate(values.length * 4); + for (float v : values) { + buffer.putFloat(v); + } + return buffer.array(); + } + + /** + * Deserializes a float array from bytes (4 bytes per float). Useful for gradient color positions. + * + * @return the deserialized float array, or null if bytes is null or invalid + */ + public static float[] deserializeFloats(byte[] bytes) { + if (bytes == null || bytes.length % 4 != 0) { + return null; + } + ByteBuffer buffer = ByteBuffer.wrap(bytes); + float[] values = new float[bytes.length / 4]; + for (int i = 0; i < values.length; i++) { + values[i] = buffer.getFloat(); + } + return values; + } +} diff --git a/modules/Utils/src/main/java/org/gephi/utils/HTMLEscape.java b/modules/Utils/src/main/java/org/gephi/utils/HTMLEscape.java index 199e6981c1..3aa2008851 100644 --- a/modules/Utils/src/main/java/org/gephi/utils/HTMLEscape.java +++ b/modules/Utils/src/main/java/org/gephi/utils/HTMLEscape.java @@ -39,11 +39,13 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.utils; /** * Class for escaping html of a String to show it in a hrml report without problems - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class HTMLEscape { @@ -51,6 +53,7 @@ public class HTMLEscape { /** * Escape html from a string to make it safe to show. + * * @param string String to escape html * @return Result string */ @@ -99,7 +102,7 @@ public static String stringToHTMLString(String string) { } else { // Not 7 Bit use the unicode system sb.append("&#"); - sb.append(new Integer(ci).toString()); + sb.append(new Integer(ci)); sb.append(';'); } } diff --git a/modules/Utils/src/main/java/org/gephi/utils/JTableCSVExporter.java b/modules/Utils/src/main/java/org/gephi/utils/JTableCSVExporter.java deleted file mode 100644 index 6a2a8c195b..0000000000 --- a/modules/Utils/src/main/java/org/gephi/utils/JTableCSVExporter.java +++ /dev/null @@ -1,104 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Eduardo Ramos -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.utils; - -import com.csvreader.CsvWriter; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.nio.charset.Charset; -import javax.swing.JTable; -import javax.swing.table.TableModel; - -public class JTableCSVExporter { - - private static final Character DEFAULT_SEPARATOR = ','; - - /** - *

              Export a JTable to the specified file.

              - * @param table Table to export - * @param file File to write - * @param separator Separator to use for separating values of a row in the CSV file. If null ',' will be used. - * @param charset Charset encoding for the file - * @param columnsToExport Indicates the indexes of the columns to export. All columns will be exported if null - * @throws IOException When an error happens while writing the file - */ - public static void writeCSVFile(JTable table, File file, Character separator, Charset charset, Integer[] columnsToExport) throws IOException { - TableModel model = table.getModel(); - FileOutputStream out = new FileOutputStream(file); - if (separator == null) { - separator = DEFAULT_SEPARATOR; - } - - if (columnsToExport == null) { - columnsToExport = new Integer[model.getColumnCount()]; - for (int i = 0; i < columnsToExport.length; i++) { - columnsToExport[i] = i; - } - } - - CsvWriter writer = new CsvWriter(out, separator, charset); - - //Write column headers: - for (int column = 0; column < columnsToExport.length; column++) { - writer.write(model.getColumnName(columnsToExport[column]), true); - } - writer.endRecord(); - - //Write rows: - Object value; - String text; - for (int row = 0; row < table.getRowCount(); row++) { - for (int column = 0; column < columnsToExport.length; column++) { - value = model.getValueAt(table.convertRowIndexToModel(row), columnsToExport[column]); - if (value != null) { - text = value.toString(); - } else { - text = ""; - } - writer.write(text, true); - } - writer.endRecord(); - } - writer.close(); - } -} diff --git a/modules/Utils/src/main/java/org/gephi/utils/NumberUtils.java b/modules/Utils/src/main/java/org/gephi/utils/NumberUtils.java new file mode 100644 index 0000000000..15e24b7b48 --- /dev/null +++ b/modules/Utils/src/main/java/org/gephi/utils/NumberUtils.java @@ -0,0 +1,88 @@ +/* + Copyright 2008-2017 Gephi + Authors : Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2017 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2017 Gephi Consortium. + */ + +package org.gephi.utils; + +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; + +/** + * @author Eduardo Ramos + */ +public class NumberUtils { + + public static final double EPS = 1e-5; + + public static T parseNumber(String str, Class type) throws UnsupportedOperationException { + try { + /* + * Try to access the staticFactory method for: + * Byte, Short, Integer, Long, Double, and Float + */ + Method m = type.getMethod("valueOf", String.class); + Object o = m.invoke(type, str); + return type.cast(o); + } catch (NoSuchMethodException e1) { + /* Try to access the constructor for BigDecimal or BigInteger*/ + try { + Constructor ctor = type + .getConstructor(String.class); + return (T) ctor.newInstance(str); + } catch (ReflectiveOperationException e2) { + /* AtomicInteger and AtomicLong not supported */ + throw new UnsupportedOperationException( + "Cannot convert string to " + type.getName()); + } + } catch (ReflectiveOperationException e2) { + throw new UnsupportedOperationException("Cannot convert string to " + + type.getName()); + } + } + + public static boolean equalsEpsilon(double a, double b) { + return equals(a, b, EPS); + } + + public static boolean equals(double a, double b, double epsilon) { + return a == b || Math.abs(a - b) < epsilon; + } +} diff --git a/modules/Utils/src/main/java/org/gephi/utils/PaletteUtils.java b/modules/Utils/src/main/java/org/gephi/utils/PaletteUtils.java index 4761a349f8..37410aeaaf 100644 --- a/modules/Utils/src/main/java/org/gephi/utils/PaletteUtils.java +++ b/modules/Utils/src/main/java/org/gephi/utils/PaletteUtils.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.utils; import java.awt.Color; @@ -48,23 +49,23 @@ Development and Distribution License("CDDL") (collectively, the import java.util.Random; /** - * * @author Mathieu Bastian */ public class PaletteUtils { /** - * Return different colors - * @param num - * @return + * Return different colors. + * + * @param num number of requested colors + * @return list of colors */ public static List getSequenceColors(int num) { - List colors = new LinkedList(); + List colors = new LinkedList<>(); //On choisit H et S au random Random random = new Random(); - float B = random.nextFloat() * 2 / 5f + 0.6f; // 0.6 <= B < 1 - float S = random.nextFloat() * 2 / 5f + 0.6f; // 0.6 <= S < 1 + float B = random.nextFloat() * 2 / 5f + 0.6f; //0.6 <= B < 1 + float S = random.nextFloat() * 2 / 5f + 0.6f; //0.6 <= S < 1 //System.out.println("B : "+B+" S : "+S); for (int i = 1; i <= num; i++) { @@ -80,37 +81,54 @@ public static List getSequenceColors(int num) { } public static Palette[] getSequencialPalettes() { - Palette p1 = new Palette(new Color(0xEDF8FB), new Color(0xB2E2E2), new Color(0x66C2A4), new Color(0x2CA25F), new Color(0x006D2C)); - Palette p2 = new Palette(new Color(0xEDF8FB), new Color(0xB3CDE3), new Color(0x8C96C6), new Color(0x8856A7), new Color(0x810F7C)); - Palette p3 = new Palette(new Color(0xF0F9E8), new Color(0xBAE4BC), new Color(0x7BCCC4), new Color(0x43A2CA), new Color(0x0868AC)); - Palette p4 = new Palette(new Color(0xFEF0D9), new Color(0xFDCC8A), new Color(0xFC8D59), new Color(0xE34A33), new Color(0xB30000)); - Palette p5 = new Palette(new Color(0xFEEBE2), new Color(0xFBB4B9), new Color(0xF768A1), new Color(0xC51B8A), new Color(0x7A0177)); - Palette p6 = new Palette(new Color(0xF1EEF6), new Color(0xBDC9E1), new Color(0x74A9CF), new Color(0x2B8CBE), new Color(0x045A8D)); - Palette p7 = new Palette(new Color(0xFFFFCC), new Color(0xA1DAB4), new Color(0x41B6C4), new Color(0x2C7FB8), new Color(0x253494)); - Palette p8 = new Palette(new Color(0xFFFFD4), new Color(0xFED98E), new Color(0xFE9929), new Color(0xD95F0E), new Color(0x993404)); - return new Palette[]{p1, p2, p3, p4, p5, p6, p7, p8}; + Palette p1 = new Palette(new Color(0xEDF8FB), new Color(0xB2E2E2), new Color(0x66C2A4), new Color(0x2CA25F), + new Color(0x006D2C)); + Palette p2 = new Palette(new Color(0xEDF8FB), new Color(0xB3CDE3), new Color(0x8C96C6), new Color(0x8856A7), + new Color(0x810F7C)); + Palette p3 = new Palette(new Color(0xF0F9E8), new Color(0xBAE4BC), new Color(0x7BCCC4), new Color(0x43A2CA), + new Color(0x0868AC)); + Palette p4 = new Palette(new Color(0xFEF0D9), new Color(0xFDCC8A), new Color(0xFC8D59), new Color(0xE34A33), + new Color(0xB30000)); + Palette p5 = new Palette(new Color(0xFEEBE2), new Color(0xFBB4B9), new Color(0xF768A1), new Color(0xC51B8A), + new Color(0x7A0177)); + Palette p6 = new Palette(new Color(0xF1EEF6), new Color(0xBDC9E1), new Color(0x74A9CF), new Color(0x2B8CBE), + new Color(0x045A8D)); + Palette p7 = new Palette(new Color(0xFFFFCC), new Color(0xA1DAB4), new Color(0x41B6C4), new Color(0x2C7FB8), + new Color(0x253494)); + Palette p8 = new Palette(new Color(0xFFFFD4), new Color(0xFED98E), new Color(0xFE9929), new Color(0xD95F0E), + new Color(0x993404)); + return new Palette[] {p1, p2, p3, p4, p5, p6, p7, p8}; } public static Palette[] getDivergingPalettes() { - Palette p1 = new Palette(new Color(0xA6611A), new Color(0xDFC27D), new Color(0xF5F5F5), new Color(0x80CDC1), new Color(0x018571)); - Palette p2 = new Palette(new Color(0xD01C8B), new Color(0xF1B6DA), new Color(0xF7F7F7), new Color(0xB8E186), new Color(0x4DAC26)); - Palette p3 = new Palette(new Color(0xE66101), new Color(0xFDB863), new Color(0xF7F7F7), new Color(0xB2ABD2), new Color(0x5E3C99)); - Palette p4 = new Palette(new Color(0xCA0020), new Color(0xF4A582), new Color(0xFFFFFF), new Color(0xBABABA), new Color(0x404040)); - Palette p5 = new Palette(new Color(0xD7191C), new Color(0xFDAE61), new Color(0xFFFFBF), new Color(0xABD9E9), new Color(0x2C7BB6)); - return new Palette[]{p1, p2, p3, p4, p5}; + Palette p1 = new Palette(new Color(0xA6611A), new Color(0xDFC27D), new Color(0xF5F5F5), new Color(0x80CDC1), + new Color(0x018571)); + Palette p2 = new Palette(new Color(0xD01C8B), new Color(0xF1B6DA), new Color(0xF7F7F7), new Color(0xB8E186), + new Color(0x4DAC26)); + Palette p3 = new Palette(new Color(0xE66101), new Color(0xFDB863), new Color(0xF7F7F7), new Color(0xB2ABD2), + new Color(0x5E3C99)); + Palette p4 = new Palette(new Color(0xCA0020), new Color(0xF4A582), new Color(0xFFFFFF), new Color(0xBABABA), + new Color(0x404040)); + Palette p5 = new Palette(new Color(0xD7191C), new Color(0xFDAE61), new Color(0xFFFFBF), new Color(0xABD9E9), + new Color(0x2C7BB6)); + return new Palette[] {p1, p2, p3, p4, p5}; } public static Palette[] getQualitativePalettes() { - Palette p1 = new Palette(new Color(0xA6CEE3), new Color(0x1F78B4), new Color(0xB2DF8A), new Color(0x33A02C), new Color(0xFB9A99), new Color(0xE31A1C), new Color(0xFDBF6F), new Color(0xFF7F00), new Color(0xCAB2D6)); - Palette p2 = new Palette(new Color(0xFBB4AE), new Color(0xB3CDE3), new Color(0xCCEBC5), new Color(0xDECBE4), new Color(0xFED9A6), new Color(0xFFFFCC), new Color(0xE5D8BD), new Color(0xFDDAEC), new Color(0xF2F2F2)); - Palette p3 = new Palette(new Color(0xE41A1C), new Color(0x377EB8), new Color(0x4DAF4A), new Color(0x984EA3), new Color(0xFF7F00), new Color(0xFFFF33), new Color(0xA65628), new Color(0xF781BF), new Color(0x999999)); - Palette p4 = new Palette(new Color(0x8DD3C7), new Color(0xFFFFB3), new Color(0xBEBADA), new Color(0xFB8072), new Color(0x80B1D3), new Color(0xFDB462), new Color(0xB3DE69), new Color(0xFCCDE5), new Color(0xD9D9D9)); - return new Palette[]{p1, p2, p3, p4}; + Palette p1 = new Palette(new Color(0xA6CEE3), new Color(0x1F78B4), new Color(0xB2DF8A), new Color(0x33A02C), + new Color(0xFB9A99), new Color(0xE31A1C), new Color(0xFDBF6F), new Color(0xFF7F00), new Color(0xCAB2D6)); + Palette p2 = new Palette(new Color(0xFBB4AE), new Color(0xB3CDE3), new Color(0xCCEBC5), new Color(0xDECBE4), + new Color(0xFED9A6), new Color(0xFFFFCC), new Color(0xE5D8BD), new Color(0xFDDAEC), new Color(0xF2F2F2)); + Palette p3 = new Palette(new Color(0xE41A1C), new Color(0x377EB8), new Color(0x4DAF4A), new Color(0x984EA3), + new Color(0xFF7F00), new Color(0xFFFF33), new Color(0xA65628), new Color(0xF781BF), new Color(0x999999)); + Palette p4 = new Palette(new Color(0x8DD3C7), new Color(0xFFFFB3), new Color(0xBEBADA), new Color(0xFB8072), + new Color(0x80B1D3), new Color(0xFDB462), new Color(0xB3DE69), new Color(0xFCCDE5), new Color(0xD9D9D9)); + return new Palette[] {p1, p2, p3, p4}; } public static Palette get3ClassPalette(Palette palette) { if (palette.colors.length == 5) { - return new Palette(new Color[]{palette.colors[0], palette.colors[2], palette.colors[4]}); + return new Palette(palette.colors[0], palette.colors[2], palette.colors[4]); } return palette; @@ -126,7 +144,7 @@ public static Palette reversePalette(Palette palette) { public static class Palette { - private Color colors[]; + private final Color[] colors; public Palette(Color... colors) { this.colors = colors; diff --git a/modules/Utils/src/main/java/org/gephi/utils/Serialization.java b/modules/Utils/src/main/java/org/gephi/utils/Serialization.java index 8732e9e2c2..8abdd9f9fe 100644 --- a/modules/Utils/src/main/java/org/gephi/utils/Serialization.java +++ b/modules/Utils/src/main/java/org/gephi/utils/Serialization.java @@ -39,78 +39,267 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.utils; +import java.awt.Color; import java.awt.Font; import java.beans.PropertyEditor; import java.beans.PropertyEditorManager; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.GraphModel; /** * Class for serialization utils such as writing any object value to a String and retrieving it by String + class name. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class Serialization { - + + private static final Serialization INSTANCE_WITHOUT_GRAPH_MODEL = new Serialization(); + private final GraphModel graphModel; + + // Color regex + private final Pattern colorPattern = + Pattern.compile("\\s*\\[\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,\\s*(\\d+)\\s*,?(\\d+)?\\s*\\]"); + + public Serialization() { + this(null); + } + + public Serialization(GraphModel graphModel) { + this.graphModel = graphModel; + } + /** - * Converts any value to a serialized String. - * Uses PropertyEditor for serialization except for values of Font class. + * Converts any value to a serialized String. Uses PropertyEditor for serialization except for values of Font class. + * * @param value Value to serialize as String * @return Result String or null if the value can't be serialized with a PropertyEditor */ public static String getValueAsText(Object value) { - if (value.getClass().equals(Font.class)) { + return INSTANCE_WITHOUT_GRAPH_MODEL.toText(value); + } + + /** + * Converts any value to a serialized String. Uses PropertyEditor for serialization except for values of Font class. + * + * @param value Value to serialize as String + * @param valueClass Class to use for the value + * @return Result String or null if the value can't be serialized with a PropertyEditor + */ + public static String getValueAsText(Object value, Class valueClass) { + return INSTANCE_WITHOUT_GRAPH_MODEL.toText(value, valueClass); + } + + /** + * Deserializes a serialized String of the given class. Uses PropertyEditor for serialization except for values of Font class. + * + * @param valueStr String to deserialize + * @param valueClass Class of the serialized value + * @return Deserialized value or null if it can't be deserialized with a PropertyEditor + */ + public static Object readValueFromText(String valueStr, Class valueClass) { + return INSTANCE_WITHOUT_GRAPH_MODEL.fromText(valueStr, valueClass); + } + + /** + * Deserializes a serialized String of the given class name. Returns null if the class can't be found. Uses PropertyEditor for serialization except for values of Font + * class. + * + * @param valueStr String to deserialize + * @param valueClassStr Class name of the serialized value + * @return Deserialized value or null if it can't be deserialized with a PropertyEditor + */ + public static Object readValueFromText(String valueStr, String valueClassStr) { + try { + return readValueFromText(valueStr, Class.forName(valueClassStr)); + } catch (ClassNotFoundException ex) { + return null; + } + } + + public static boolean isPrimitiveOrPrimitiveWrapper(Class type) { + return (type.isPrimitive() && !void.class.equals(type)) + || Double.class.equals(type) || Float.class.equals(type) || Long.class.equals(type) + || Integer.class.equals(type) || Short.class.equals(type) || Character.class.equals(type) + || Byte.class.equals(type) || Boolean.class.equals(type); + } + + public static Object parsePrimitiveOrWrapper(Class valueClass, String value) { + if (Boolean.class.equals(valueClass) || Boolean.TYPE == valueClass) { + return Boolean.parseBoolean(value); + } + if (Character.class.equals(valueClass) || Character.TYPE == valueClass) { + return value.charAt(0); + } + if (Byte.class.equals(valueClass) || Byte.TYPE == valueClass) { + return Byte.parseByte(value); + } + if (Short.class.equals(valueClass) || Short.TYPE == valueClass) { + return Short.parseShort(value); + } + if (Integer.class.equals(valueClass) || Integer.TYPE == valueClass) { + return Integer.parseInt(value); + } + if (Long.class.equals(valueClass) || Long.TYPE == valueClass) { + return Long.parseLong(value); + } + if (Float.class.equals(valueClass) || Float.TYPE == valueClass) { + return Float.parseFloat(value); + } + if (Double.class.equals(valueClass) || Double.TYPE == valueClass) { + return Double.parseDouble(value); + } + + throw new IllegalArgumentException("Unknown class " + valueClass.getName()); + } + + public String toText(Object value) { + if (value == null) { + return null; + } + + if (value instanceof String) { + return (String) value; + } + + return toText(value, value.getClass()); + } + + public String toText(Object value, Class valueClass) { + if (value == null) { + return null; + } + + if (value instanceof String) { + return (String) value; + } + + if (valueClass.equals(Font.class)) { Font f = (Font) value; return String.format("%s-%d-%d", f.getName(), f.getStyle(), f.getSize()); //bug 551877 + } else if (isPrimitiveOrPrimitiveWrapper(valueClass) || + (Number.class.isAssignableFrom(valueClass) && !Number.class.equals(valueClass))) { + return String.valueOf(value); + } else if (valueClass.isArray()) { + return AttributeUtils.printArray(value); + } else if (valueClass.equals(Color.class)) { + Color color = (Color) value; + if (color.getAlpha() < 255) { + return String.format( + "[%d,%d,%d,%d]", + color.getRed(), + color.getGreen(), + color.getBlue(), + color.getAlpha()); + } else { + return String.format( + "[%d,%d,%d]", + color.getRed(), + color.getGreen(), + color.getBlue()); + } } else { - PropertyEditor editor = PropertyEditorManager.findEditor(value.getClass()); + PropertyEditor editor = PropertyEditorManager.findEditor(valueClass); if (editor != null) { - editor.setValue(value); - return editor.getAsText(); + Method setGraphModelMethod = null; + try { + setGraphModelMethod = editor.getClass().getMethod("setGraphModel", GraphModel.class); + if (setGraphModelMethod != null) { + setGraphModelMethod.invoke(editor, graphModel); + } + } catch (Exception ex) { + //NOOP + } + + try { + editor.setValue(value); + try { + Method m = editor.getClass().getMethod("getAsSerializableText"); + return (String) m.invoke(editor); + } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException e) { + // Fallback: old behavior + return editor.getAsText(); + } + } finally { + if (setGraphModelMethod != null) { + try { + setGraphModelMethod.invoke(editor, (Object[]) null); + } catch (Exception ex) { + //NOOP + } + } + } } else { return null; } } } - /** - * Deserializes a serialized String of the given class. - * Uses PropertyEditor for serialization except for values of Font class. - * @param valueStr String to deserialize - * @param valueClass Class of the serialized value - * @return Deserialized value or null if it can't be deserialized with a PropertyEditor - */ - public static Object readValueFromText(String valueStr, Class valueClass) { - if (valueClass.equals(Font.class)) { + public Object fromText(String valueStr, Class valueClass) { + if (String.class.equals(valueClass)) { + return valueStr; + } else if (valueClass.equals(Font.class)) { try { - String parts[] = valueStr.split("-"); + String[] parts = valueStr.split("-"); return new Font(parts[0], Integer.parseInt(parts[1]), Integer.parseInt(parts[2]));//bug 551877 } catch (Exception e) { return null; } + } else if (isPrimitiveOrPrimitiveWrapper(valueClass)) { + return parsePrimitiveOrWrapper(valueClass, valueStr); + } else if (Number.class.isAssignableFrom(valueClass) && !Number.class.equals(valueClass)) { + return NumberUtils.parseNumber(valueStr, valueClass); + } else if (valueClass.isArray()) { + return AttributeUtils.parse(valueStr, valueClass); + } else if (valueClass.equals(Color.class)) { + Matcher m = colorPattern.matcher(valueStr); + if (m.lookingAt()) { + int r = Integer.parseInt(m.group(1)); + int g = Integer.parseInt(m.group(2)); + int b = Integer.parseInt(m.group(3)); + String alpha = m.group(4); + if (alpha != null) { + int a = Integer.parseInt(alpha); + return new Color(r, g, b, a); + } else { + return new Color(r, g, b); + } + } + return null; } else { PropertyEditor editor = PropertyEditorManager.findEditor(valueClass); if (editor != null) { - editor.setAsText(valueStr); - return editor.getValue(); + Method setGraphModelMethod = null; + try { + setGraphModelMethod = editor.getClass().getMethod("setGraphModel", GraphModel.class); + if (setGraphModelMethod != null) { + setGraphModelMethod.invoke(editor, graphModel); + } + } catch (Exception ex) { + //NOOP + } + + try { + editor.setAsText(valueStr); + return editor.getValue(); + } finally { + if (setGraphModelMethod != null) { + try { + setGraphModelMethod.invoke(editor, (Object[]) null); + } catch (Exception ex) { + //NOOP + } + } + } } else { return null; } } } - - /** - * Deserializes a serialized String of the given class name. - * Returns null if the class can't be found. - * Uses PropertyEditor for serialization except for values of Font class. - * @param valueStr String to deserialize - * @param valueClassStr Class name of the serialized value - * @return Deserialized value or null if it can't be deserialized with a PropertyEditor - */ - public static Object readValueFromText(String valueStr, String valueClassStr) { - try { - return readValueFromText(valueStr, Class.forName(valueClassStr)); - } catch (ClassNotFoundException ex) { - return null; - } - } } diff --git a/modules/Utils/src/main/java/org/gephi/utils/StatisticsUtils.java b/modules/Utils/src/main/java/org/gephi/utils/StatisticsUtils.java index 0df5710276..e33dcf41a5 100644 --- a/modules/Utils/src/main/java/org/gephi/utils/StatisticsUtils.java +++ b/modules/Utils/src/main/java/org/gephi/utils/StatisticsUtils.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.utils; import java.math.BigDecimal; @@ -48,13 +49,16 @@ Development and Distribution License("CDDL") (collectively, the /** * Class with some statistics methods for calculating values such as the average, median, sum, max and min of a list of numbers. - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class StatisticsUtils { /** - *

              Get average calculation of various numbers as a BigDecimal

              - *

              Null values will not be counted.

              + * Get average calculation of various numbers as a BigDecimal. + *

              + * Null values will not be counted. + * * @param numbers Numbers to calculate average * @return Average as a BigDecimal */ @@ -76,14 +80,17 @@ public static BigDecimal average(Number[] numbers) { try { result = sum.divide(new BigDecimal(numbersCount)); } catch (ArithmeticException ex) { - result = sum.divide(new BigDecimal(numbersCount), 10, RoundingMode.HALF_EVEN);//Maximum of 10 decimal digits to avoid periodic number exception. + result = sum.divide(new BigDecimal(numbersCount), 10, + RoundingMode.HALF_EVEN);//Maximum of 10 decimal digits to avoid periodic number exception. } return result; } /** - *

              Get average calculation of various numbers as a BigDecimal

              - *

              Null values will not be counted.

              + * Get average calculation of various numbers as a BigDecimal. + *

              + * Null values will not be counted. + * * @param numbers Numbers to calculate average * @return Average as a BigDecimal */ @@ -92,9 +99,12 @@ public static BigDecimal average(Collection numbers) { } /** - *

              Calculate median of various numbers as a BigDecimal.

              - *

              The elements can't be null.

              - *

              The elements don't need to be sorted.

              + * Calculate median of various numbers as a BigDecimal. + *

              + * The elements can't be null. + *

              + * The elements don't need to be sorted. + * * @param numbers Not null numbers to calculate median * @return Median as a BigDecimal */ @@ -108,9 +118,12 @@ public static BigDecimal median(Number[] numbers) { } /** - *

              Calculate median of various numbers as a BigDecimal.

              - *

              The elements can't be null.

              - *

              The elements don't need to be sorted.

              + * Calculate median of various numbers as a BigDecimal. + *

              + * The elements can't be null. + *

              + * The elements don't need to be sorted. + * * @param numbers Not null numbers to calculate median * @return Median as a BigDecimal */ @@ -119,9 +132,12 @@ public static BigDecimal median(Collection numbers) { } /** - *

              Calculate first quartile (Q1) of various numbers as a BigDecimal.

              - *

              The elements can't be null.

              - *

              The elements don't need to be sorted.

              + * Calculate first quartile (Q1) of various numbers as a BigDecimal. + *

              + * The elements can't be null. + *

              + * The elements don't need to be sorted. + * * @param numbers Not null numbers to calculate Q1 * @return Q1 as a BigDecimal */ @@ -135,9 +151,12 @@ public static BigDecimal quartile1(Number[] numbers) { } /** - *

              Calculate first quartile (Q1) of various numbers as a BigDecimal.

              - *

              The elements can't be null.

              - *

              The elements don't need to be sorted.

              + * Calculate first quartile (Q1) of various numbers as a BigDecimal. + *

              + * The elements can't be null. + *

              + * The elements don't need to be sorted. + * * @param numbers Not null numbers to calculate Q1 * @return Q1 as a BigDecimal */ @@ -146,9 +165,12 @@ public static BigDecimal quartile1(Collection numbers) { } /** - *

              Calculate third quartile (Q3) of various numbers as a BigDecimal.

              - *

              The elements can't be null.

              - *

              The elements don't need to be sorted.

              + * Calculate third quartile (Q3) of various numbers as a BigDecimal. + *

              + * The elements can't be null. + *

              + * The elements don't need to be sorted. + * * @param numbers Not null numbers to calculate Q3 * @return Q3 as a BigDecimal */ @@ -162,9 +184,12 @@ public static BigDecimal quartile3(Number[] numbers) { } /** - *

              Calculate third quartile (Q3) of various numbers as a BigDecimal.

              - *

              The elements can't be null.

              - *

              The elements don't need to be sorted.

              + * Calculate third quartile (Q3) of various numbers as a BigDecimal. + *

              + * The elements can't be null. + *

              + * The elements don't need to be sorted. + * * @param numbers Not null numbers to calculate Q3 * @return Q3 as a BigDecimal */ @@ -173,8 +198,10 @@ public static BigDecimal quartile3(Collection numbers) { } /** - *

              Get sum of various numbers as a BigDecimal

              - *

              Null values will not be counted.

              + * Get sum of various numbers as a BigDecimal. + *

              + * Null values will not be counted. + * * @param numbers Numbers to calculate sum * @return Sum as a BigDecimal */ @@ -194,8 +221,10 @@ public static BigDecimal sum(Number[] numbers) { } /** - *

              Get sum of various numbers as a BigDecimal

              - *

              Null values will not be counted.

              + * Get sum of various numbers as a BigDecimal. + *

              + * Null values will not be counted. + * * @param numbers Numbers to calculate sum * @return Sum as a BigDecimal */ @@ -204,9 +233,12 @@ public static BigDecimal sum(Collection numbers) { } /** - *

              Get the minimum value of an array of Number elements as a BigDecimal.

              - *

              The elements can't be null.

              - *

              The elements don't need to be sorted.

              + * Get the minimum value of an array of Number elements as a BigDecimal. + *

              + * The elements can't be null. + *

              + * The elements don't need to be sorted. + * * @param numbers Numbers to get min * @return Minimum value as a BigDecimal */ @@ -220,9 +252,13 @@ public static BigDecimal minValue(Number[] numbers) { } /** - *

              Get the minimum value of a collection of Number elements as a BigDecimal.

              - *

              The elements can't be null.

              - *

              The elements don't need to be sorted.

              + * Get the minimum value of a collection of Number elements as a + * BigDecimal. + *

              + * The elements can't be null. + *

              + * The elements don't need to be sorted. + * * @param numbers Numbers to get min * @return Minimum value as a BigDecimal */ @@ -231,9 +267,12 @@ public static BigDecimal minValue(Collection numbers) { } /** - *

              Get the maximum value of an array of Number elements as a BigDecimal.

              - *

              The elements can't be null.

              - *

              The elements don't need to be sorted.

              + * Get the maximum value of an array of Number elements as a BigDecimal. + *

              + * The elements can't be null. + *

              + * The elements don't need to be sorted. + * * @param numbers Numbers to get max * @return Maximum value as a BigDecimal */ @@ -247,9 +286,13 @@ public static BigDecimal maxValue(Number[] numbers) { } /** - *

              Get the maximum value of a collection of Number elements as a BigDecimal.

              - *

              The elements can't be null.

              - *

              The elements don't need to be sorted.

              + * Get the maximum value of a collection of Number elements as a + * BigDecimal. + *

              + * The elements can't be null. + *

              + * The elements don't need to be sorted. + * * @param numbers Numbers to get max * @return Maximum value as a BigDecimal */ @@ -258,9 +301,13 @@ public static BigDecimal maxValue(Collection numbers) { } /** - *

              Calculates all statistics and returns them in a BigDecimal numbers array.

              - *

              Using this will be faster than calling all statistics separately.

              - *

              Returns an array of length=8 of BigDecimal numbers with the results in the following order: + * Calculates all statistics and returns them in a BigDecimal + * numbers array. + *

              + * Using this will be faster than calling all statistics separately. + *

              + * Returns an array of length=8 of BigDecimal numbers + * with the results in the following order: *

                *
              1. average
              2. *
              3. first quartile (Q1)
              4. @@ -271,11 +318,14 @@ public static BigDecimal maxValue(Collection numbers) { *
              5. minimumValue
              6. *
              7. maximumValue
              8. *
              - *

              - *

              The elements can't be null.

              - *

              The elements don't need to be sorted.

              + * + *

              + * The elements can't be null. + *

              + * The elements don't need to be sorted. + * * @param numbers Numbers to get all statistics - * @return Array with all statisctis + * @return Array with all statistics */ public static BigDecimal[] getAllStatistics(Number[] numbers) { if (numbers == null || numbers.length == 0) { @@ -298,9 +348,13 @@ public static BigDecimal[] getAllStatistics(Number[] numbers) { } /** - *

              Calculates all statistics and returns them in a BigDecimal numbers array.

              - *

              Using this will be faster than calling all statistics separately.

              - *

              Returns an array of length=8 of BigDecimal numbers with the results in the following order: + * Calculates all statistics and returns them in a BigDecimal + * numbers array. + *

              + * Using this will be faster than calling all statistics separately. + *

              + * Returns an array of length=8 of BigDecimal numbers + * with the results in the following order: *

                *
              1. average
              2. *
              3. first quartile (Q1)
              4. @@ -311,19 +365,23 @@ public static BigDecimal[] getAllStatistics(Number[] numbers) { *
              5. minimumValue
              6. *
              7. maximumValue
              8. *
              - *

              - *

              The elements can't be null.

              - *

              The elements don't need to be sorted.

              + *

              + * The elements can't be null. + *

              + * The elements don't need to be sorted. + * * @param numbers Numbers to get all statistics - * @return Array with all statisctis + * @return Array with all statistics */ public static BigDecimal[] getAllStatistics(Collection numbers) { return getAllStatistics(numbers.toArray(new Number[0])); } /** - *

              Takes an array of numbers of any type combination and returns - * an array with their BigDecimal equivalent numbers.

              + * Takes an array of numbers of any type combination and returns an array + * with their BigDecimal equivalent numbers. + * + * @param numbers input * @return BigDecimal array */ public static BigDecimal[] numbersArrayToSortedBigDecimalArray(Number[] numbers) { @@ -342,7 +400,9 @@ public static BigDecimal[] numbersArrayToSortedBigDecimalArray(Number[] numbers) return result; } - /***********Private methods:***********/ + /** + * *********Private methods:********** + */ //Next methods need the number array already converted to BigDecimal and sorted. //Used for faster calculating of all statistics, not repeating the sorting and conversion to BigDecimal array. private static BigDecimal average(final BigDecimal sum, final BigDecimal numbersCount) { @@ -351,7 +411,8 @@ private static BigDecimal average(final BigDecimal sum, final BigDecimal numbers try { result = sum.divide(numbersCount); } catch (ArithmeticException ex) { - result = sum.divide(numbersCount, 10, RoundingMode.HALF_EVEN);//Maximum of 10 decimal digits to avoid periodic number exception. + result = sum.divide(numbersCount, 10, + RoundingMode.HALF_EVEN);//Maximum of 10 decimal digits to avoid periodic number exception. } return result; } diff --git a/modules/Utils/src/main/java/org/gephi/utils/StreamTokenizerWithMultilineLiterals.java b/modules/Utils/src/main/java/org/gephi/utils/StreamTokenizerWithMultilineLiterals.java new file mode 100644 index 0000000000..8eae8fc811 --- /dev/null +++ b/modules/Utils/src/main/java/org/gephi/utils/StreamTokenizerWithMultilineLiterals.java @@ -0,0 +1,902 @@ +/* +Copyright 2008-2017 Gephi +Authors : Eduardo Ramos +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2017 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2017 Gephi Consortium. + */ + +package org.gephi.utils; + +/* This is a small modification of StreamTokenizer to support multiline literal strings. See https://bugs.openjdk.java.net/browse/JDK-4239144 */ + +/* + * Copyright (c) 1995, 2012, Oracle and/or its affiliates. All rights reserved. + * ORACLE PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + * + */ + +import java.io.IOException; +import java.io.InputStream; +import java.io.Reader; +import java.util.Arrays; + +/** + * The {@code StreamTokenizer} class takes an input stream and + * parses it into "tokens", allowing the tokens to be + * read one at a time. The parsing process is controlled by a table + * and a number of flags that can be set to various states. The + * stream tokenizer can recognize identifiers, numbers, quoted + * strings, and various comment styles. + *

              + * Each byte read from the input stream is regarded as a character + * in the range {@code '\u005Cu0000'} through {@code '\u005Cu00FF'}. + * The character value is used to look up five possible attributes of + * the character: white space, alphabetic, + * numeric, string quote, and comment character. + * Each character can have zero or more of these attributes. + *

              + * In addition, an instance has four flags. These flags indicate: + *

                + *
              • Whether line terminators are to be returned as tokens or treated + * as white space that merely separates tokens. + *
              • Whether C-style comments are to be recognized and skipped. + *
              • Whether C++-style comments are to be recognized and skipped. + *
              • Whether the characters of identifiers are converted to lowercase. + *
              + *

              + * A typical application first constructs an instance of this class, + * sets up the syntax tables, and then repeatedly loops calling the + * {@code nextToken} method in each iteration of the loop until + * it returns the value {@code TT_EOF}. + * + * @author James Gosling + * @see java.io.StreamTokenizer#nextToken() + * @see java.io.StreamTokenizer#TT_EOF + * @since JDK1.0 + */ + +public class StreamTokenizerWithMultilineLiterals { + + /** + * A constant indicating that the end of the stream has been read. + */ + public static final int TT_EOF = -1; + /** + * A constant indicating that the end of the line has been read. + */ + public static final int TT_EOL = '\n'; + /** + * A constant indicating that a number token has been read. + */ + public static final int TT_NUMBER = -2; + /** + * A constant indicating that a word token has been read. + */ + public static final int TT_WORD = -3; + private static final int NEED_CHAR = Integer.MAX_VALUE; + private static final int SKIP_LF = Integer.MAX_VALUE - 1; + private static final byte CT_WHITESPACE = 1; + private static final byte CT_DIGIT = 2; + private static final byte CT_ALPHA = 4; + private static final byte CT_QUOTE = 8; + private static final byte CT_COMMENT = 16; + /* A constant indicating that no token has been read, used for + * initializing ttype. FIXME This could be made public and + * made available as the part of the API in a future release. + */ + private static final int TT_NOTHING = -4; + /** + * After a call to the {@code nextToken} method, this field + * contains the type of the token just read. For a single character + * token, its value is the single character, converted to an integer. + * For a quoted string token, its value is the quote character. + * Otherwise, its value is one of the following: + *

                + *
              • {@code TT_WORD} indicates that the token is a word. + *
              • {@code TT_NUMBER} indicates that the token is a number. + *
              • {@code TT_EOL} indicates that the end of line has been read. + * The field can only have this value if the + * {@code eolIsSignificant} method has been called with the + * argument {@code true}. + *
              • {@code TT_EOF} indicates that the end of the input stream + * has been reached. + *
              + *

              + * The initial value of this field is -4. + * + * @see java.io.StreamTokenizer#eolIsSignificant(boolean) + * @see java.io.StreamTokenizer#nextToken() + * @see java.io.StreamTokenizer#quoteChar(int) + * @see java.io.StreamTokenizer#TT_EOF + * @see java.io.StreamTokenizer#TT_EOL + * @see java.io.StreamTokenizer#TT_NUMBER + * @see java.io.StreamTokenizer#TT_WORD + */ + public int ttype = TT_NOTHING; + /** + * If the current token is a word token, this field contains a + * string giving the characters of the word token. When the current + * token is a quoted string token, this field contains the body of + * the string. + *

              + * The current token is a word when the value of the + * {@code ttype} field is {@code TT_WORD}. The current token is + * a quoted string token when the value of the {@code ttype} field is + * a quote character. + *

              + * The initial value of this field is null. + * + * @see java.io.StreamTokenizer#quoteChar(int) + * @see java.io.StreamTokenizer#TT_WORD + * @see java.io.StreamTokenizer#ttype + */ + public String sval; + /** + * If the current token is a number, this field contains the value + * of that number. The current token is a number when the value of + * the {@code ttype} field is {@code TT_NUMBER}. + *

              + * The initial value of this field is 0.0. + * + * @see java.io.StreamTokenizer#TT_NUMBER + * @see java.io.StreamTokenizer#ttype + */ + public double nval; + /* Only one of these will be non-null */ + private Reader reader = null; + private InputStream input = null; + private char[] buf = new char[20]; + /** + * The next character to be considered by the nextToken method. May also + * be NEED_CHAR to indicate that a new character should be read, or SKIP_LF + * to indicate that a new character should be read and, if it is a '\n' + * character, it should be discarded and a second new character should be + * read. + */ + private int peekc = NEED_CHAR; + private boolean pushedBack; + private boolean forceLower; + /** + * The line number of the last token read + */ + private int LINENO = 1; + private boolean eolIsSignificantP = false; + private boolean slashSlashCommentsP = false; + private boolean slashStarCommentsP = false; + private final byte[] ctype = new byte[256]; + + /** + * Private constructor that initializes everything except the streams. + */ + private StreamTokenizerWithMultilineLiterals() { + wordChars('a', 'z'); + wordChars('A', 'Z'); + wordChars(128 + 32, 255); + whitespaceChars(0, ' '); + commentChar('/'); + quoteChar('"'); + quoteChar('\''); + parseNumbers(); + } + + /** + * Creates a stream tokenizer that parses the specified input + * stream. The stream tokenizer is initialized to the following + * default state: + *

                + *
              • All byte values {@code 'A'} through {@code 'Z'}, + * {@code 'a'} through {@code 'z'}, and + * {@code '\u005Cu00A0'} through {@code '\u005Cu00FF'} are + * considered to be alphabetic. + *
              • All byte values {@code '\u005Cu0000'} through + * {@code '\u005Cu0020'} are considered to be white space. + *
              • {@code '/'} is a comment character. + *
              • Single quote {@code '\u005C''} and double quote {@code '"'} + * are string quote characters. + *
              • Numbers are parsed. + *
              • Ends of lines are treated as white space, not as separate tokens. + *
              • C-style and C++-style comments are not recognized. + *
              + * + * @param is an input stream. + * @see java.io.BufferedReader + * @see java.io.InputStreamReader + * @see java.io.StreamTokenizer#StreamTokenizer(java.io.Reader) + * @deprecated As of JDK version 1.1, the preferred way to tokenize an + * input stream is to convert it into a character stream, for example: + *
              +     *   Reader r = new BufferedReader(new InputStreamReader(is));
              +     *   StreamTokenizer st = new StreamTokenizer(r);
              +     * 
              + */ + @Deprecated + public StreamTokenizerWithMultilineLiterals(InputStream is) { + this(); + if (is == null) { + throw new NullPointerException(); + } + input = is; + } + + /** + * Create a tokenizer that parses the given character stream. + * + * @param r a Reader object providing the input stream. + * @since JDK1.1 + */ + public StreamTokenizerWithMultilineLiterals(Reader r) { + this(); + if (r == null) { + throw new NullPointerException(); + } + reader = r; + } + + /** + * Resets this tokenizer's syntax table so that all characters are + * "ordinary." See the {@code ordinaryChar} method + * for more information on a character being ordinary. + * + * @see java.io.StreamTokenizer#ordinaryChar(int) + */ + public void resetSyntax() { + for (int i = ctype.length; --i >= 0; ) { + ctype[i] = 0; + } + } + + /** + * Specifies that all characters c in the range + * low <= c <= high + * are word constituents. A word token consists of a word constituent + * followed by zero or more word constituents or number constituents. + * + * @param low the low end of the range. + * @param hi the high end of the range. + */ + public void wordChars(int low, int hi) { + if (low < 0) { + low = 0; + } + if (hi >= ctype.length) { + hi = ctype.length - 1; + } + while (low <= hi) { + ctype[low++] |= CT_ALPHA; + } + } + + /** + * Specifies that all characters c in the range + * low <= c <= high + * are white space characters. White space characters serve only to + * separate tokens in the input stream. + * + *

              Any other attribute settings for the characters in the specified + * range are cleared. + * + * @param low the low end of the range. + * @param hi the high end of the range. + */ + public void whitespaceChars(int low, int hi) { + if (low < 0) { + low = 0; + } + if (hi >= ctype.length) { + hi = ctype.length - 1; + } + while (low <= hi) { + ctype[low++] = CT_WHITESPACE; + } + } + + /** + * Specifies that all characters c in the range + * low <= c <= high + * are "ordinary" in this tokenizer. See the + * {@code ordinaryChar} method for more information on a + * character being ordinary. + * + * @param low the low end of the range. + * @param hi the high end of the range. + * @see java.io.StreamTokenizer#ordinaryChar(int) + */ + public void ordinaryChars(int low, int hi) { + if (low < 0) { + low = 0; + } + if (hi >= ctype.length) { + hi = ctype.length - 1; + } + while (low <= hi) { + ctype[low++] = 0; + } + } + + /** + * Specifies that the character argument is "ordinary" + * in this tokenizer. It removes any special significance the + * character has as a comment character, word component, string + * delimiter, white space, or number character. When such a character + * is encountered by the parser, the parser treats it as a + * single-character token and sets {@code ttype} field to the + * character value. + * + *

              Making a line terminator character "ordinary" may interfere + * with the ability of a {@code StreamTokenizer} to count + * lines. The {@code lineno} method may no longer reflect + * the presence of such terminator characters in its line count. + * + * @param ch the character. + * @see java.io.StreamTokenizer#ttype + */ + public void ordinaryChar(int ch) { + if (ch >= 0 && ch < ctype.length) { + ctype[ch] = 0; + } + } + + /** + * Specified that the character argument starts a single-line + * comment. All characters from the comment character to the end of + * the line are ignored by this stream tokenizer. + * + *

              Any other attribute settings for the specified character are cleared. + * + * @param ch the character. + */ + public void commentChar(int ch) { + if (ch >= 0 && ch < ctype.length) { + ctype[ch] = CT_COMMENT; + } + } + + /** + * Specifies that matching pairs of this character delimit string + * constants in this tokenizer. + *

              + * When the {@code nextToken} method encounters a string + * constant, the {@code ttype} field is set to the string + * delimiter and the {@code sval} field is set to the body of + * the string. + *

              + * If a string quote character is encountered, then a string is + * recognized, consisting of all characters after (but not including) + * the string quote character, up to (but not including) the next + * occurrence of that same string quote character, or a line + * terminator, or end of file. The usual escape sequences such as + * {@code "\u005Cn"} and {@code "\u005Ct"} are recognized and + * converted to single characters as the string is parsed. + * + *

              Any other attribute settings for the specified character are cleared. + * + * @param ch the character. + * @see java.io.StreamTokenizer#nextToken() + * @see java.io.StreamTokenizer#sval + * @see java.io.StreamTokenizer#ttype + */ + public void quoteChar(int ch) { + if (ch >= 0 && ch < ctype.length) { + ctype[ch] = CT_QUOTE; + } + } + + /** + * Specifies that numbers should be parsed by this tokenizer. The + * syntax table of this tokenizer is modified so that each of the twelve + * characters: + *

              +     *      0 1 2 3 4 5 6 7 8 9 . -
              +     * 
              + *

              + * has the "numeric" attribute. + *

              + * When the parser encounters a word token that has the format of a + * double precision floating-point number, it treats the token as a + * number rather than a word, by setting the {@code ttype} + * field to the value {@code TT_NUMBER} and putting the numeric + * value of the token into the {@code nval} field. + * + * @see java.io.StreamTokenizer#nval + * @see java.io.StreamTokenizer#TT_NUMBER + * @see java.io.StreamTokenizer#ttype + */ + public void parseNumbers() { + for (int i = '0'; i <= '9'; i++) { + ctype[i] |= CT_DIGIT; + } + ctype['.'] |= CT_DIGIT; + ctype['-'] |= CT_DIGIT; + } + + /** + * Determines whether or not ends of line are treated as tokens. + * If the flag argument is true, this tokenizer treats end of lines + * as tokens; the {@code nextToken} method returns + * {@code TT_EOL} and also sets the {@code ttype} field to + * this value when an end of line is read. + *

              + * A line is a sequence of characters ending with either a + * carriage-return character ({@code '\u005Cr'}) or a newline + * character ({@code '\u005Cn'}). In addition, a carriage-return + * character followed immediately by a newline character is treated + * as a single end-of-line token. + *

              + * If the {@code flag} is false, end-of-line characters are + * treated as white space and serve only to separate tokens. + * + * @param flag {@code true} indicates that end-of-line characters + * are separate tokens; {@code false} indicates that + * end-of-line characters are white space. + * @see java.io.StreamTokenizer#nextToken() + * @see java.io.StreamTokenizer#ttype + * @see java.io.StreamTokenizer#TT_EOL + */ + public void eolIsSignificant(boolean flag) { + eolIsSignificantP = flag; + } + + /** + * Determines whether or not the tokenizer recognizes C-style comments. + * If the flag argument is {@code true}, this stream tokenizer + * recognizes C-style comments. All text between successive + * occurrences of {@code /*} and */ are discarded. + *

              + * If the flag argument is {@code false}, then C-style comments + * are not treated specially. + * + * @param flag {@code true} indicates to recognize and ignore + * C-style comments. + */ + public void slashStarComments(boolean flag) { + slashStarCommentsP = flag; + } + + /** + * Determines whether or not the tokenizer recognizes C++-style comments. + * If the flag argument is {@code true}, this stream tokenizer + * recognizes C++-style comments. Any occurrence of two consecutive + * slash characters ({@code '/'}) is treated as the beginning of + * a comment that extends to the end of the line. + *

              + * If the flag argument is {@code false}, then C++-style + * comments are not treated specially. + * + * @param flag {@code true} indicates to recognize and ignore + * C++-style comments. + */ + public void slashSlashComments(boolean flag) { + slashSlashCommentsP = flag; + } + + /** + * Determines whether or not word token are automatically lowercased. + * If the flag argument is {@code true}, then the value in the + * {@code sval} field is lowercased whenever a word token is + * returned (the {@code ttype} field has the + * value {@code TT_WORD} by the {@code nextToken} method + * of this tokenizer. + *

              + * If the flag argument is {@code false}, then the + * {@code sval} field is not modified. + * + * @param fl {@code true} indicates that all word tokens should + * be lowercased. + * @see java.io.StreamTokenizer#nextToken() + * @see java.io.StreamTokenizer#ttype + * @see java.io.StreamTokenizer#TT_WORD + */ + public void lowerCaseMode(boolean fl) { + forceLower = fl; + } + + /** + * Read the next character + */ + private int read() throws IOException { + if (reader != null) { + return reader.read(); + } else if (input != null) { + return input.read(); + } else { + throw new IllegalStateException(); + } + } + + /** + * Parses the next token from the input stream of this tokenizer. + * The type of the next token is returned in the {@code ttype} + * field. Additional information about the token may be in the + * {@code nval} field or the {@code sval} field of this + * tokenizer. + *

              + * Typical clients of this + * class first set up the syntax tables and then sit in a loop + * calling nextToken to parse successive tokens until TT_EOF + * is returned. + * + * @return the value of the {@code ttype} field. + * @throws IOException if an I/O error occurs. + * @see java.io.StreamTokenizer#nval + * @see java.io.StreamTokenizer#sval + * @see java.io.StreamTokenizer#ttype + */ + public int nextToken() throws IOException { + if (pushedBack) { + pushedBack = false; + return ttype; + } + byte[] ct = ctype; + sval = null; + + int c = peekc; + if (c < 0) { + c = NEED_CHAR; + } + if (c == SKIP_LF) { + c = read(); + if (c < 0) { + return ttype = TT_EOF; + } + if (c == '\n') { + c = NEED_CHAR; + } + } + if (c == NEED_CHAR) { + c = read(); + if (c < 0) { + return ttype = TT_EOF; + } + } + ttype = c; /* Just to be safe */ + + /* Set peekc so that the next invocation of nextToken will read + * another character unless peekc is reset in this invocation + */ + peekc = NEED_CHAR; + + int ctype = c < 256 ? ct[c] : CT_ALPHA; + while ((ctype & CT_WHITESPACE) != 0) { + if (c == '\r') { + LINENO++; + if (eolIsSignificantP) { + peekc = SKIP_LF; + return ttype = TT_EOL; + } + c = read(); + if (c == '\n') { + c = read(); + } + } else { + if (c == '\n') { + LINENO++; + if (eolIsSignificantP) { + return ttype = TT_EOL; + } + } + c = read(); + } + if (c < 0) { + return ttype = TT_EOF; + } + ctype = c < 256 ? ct[c] : CT_ALPHA; + } + + if ((ctype & CT_DIGIT) != 0) { + boolean neg = false; + if (c == '-') { + c = read(); + if (c != '.' && (c < '0' || c > '9')) { + peekc = c; + return ttype = '-'; + } + neg = true; + } + double v = 0; + int decexp = 0; + int seendot = 0; + while (true) { + if (c == '.' && seendot == 0) { + seendot = 1; + } else if ('0' <= c && c <= '9') { + v = v * 10 + (c - '0'); + decexp += seendot; + } else { + break; + } + c = read(); + } + peekc = c; + if (decexp != 0) { + double denom = 10; + decexp--; + while (decexp > 0) { + denom *= 10; + decexp--; + } + /* Do one division of a likely-to-be-more-accurate number */ + v = v / denom; + } + nval = neg ? -v : v; + return ttype = TT_NUMBER; + } + + if ((ctype & CT_ALPHA) != 0) { + int i = 0; + do { + if (i >= buf.length) { + buf = Arrays.copyOf(buf, buf.length * 2); + } + buf[i++] = (char) c; + c = read(); + ctype = c < 0 ? CT_WHITESPACE : c < 256 ? ct[c] : CT_ALPHA; + } while ((ctype & (CT_ALPHA | CT_DIGIT)) != 0); + peekc = c; + sval = String.copyValueOf(buf, 0, i); + if (forceLower) { + sval = sval.toLowerCase(); + } + return ttype = TT_WORD; + } + + if ((ctype & CT_QUOTE) != 0) { + ttype = c; + int i = 0; + /* Invariants (because \Octal needs a lookahead): + * (i) c contains char value + * (ii) d contains the lookahead + */ + int d = read(); + while (d >= 0 && d != ttype) { + if (d == '\\') { + c = read(); + int first = c; /* To allow \377, but not \477 */ + if (c >= '0' && c <= '7') { + c = c - '0'; + int c2 = read(); + if ('0' <= c2 && c2 <= '7') { + c = (c << 3) + (c2 - '0'); + c2 = read(); + if ('0' <= c2 && c2 <= '7' && first <= '3') { + c = (c << 3) + (c2 - '0'); + d = read(); + } else { + d = c2; + } + } else { + d = c2; + } + } else { + switch (c) { + case 'a': + c = 0x7; + break; + case 'b': + c = '\b'; + break; + case 'f': + c = 0xC; + break; + case 'n': + c = '\n'; + break; + case 'r': + c = '\r'; + break; + case 't': + c = '\t'; + break; + case 'v': + c = 0xB; + break; + } + d = read(); + } + } else { + c = d; + d = read(); + } + if (i >= buf.length) { + buf = Arrays.copyOf(buf, buf.length * 2); + } + buf[i++] = (char) c; + } + + /* If we broke out of the loop because we found a matching quote + * character then arrange to read a new character next time + * around; otherwise, save the character. + */ + peekc = (d == ttype) ? NEED_CHAR : d; + + sval = String.copyValueOf(buf, 0, i); + return ttype; + } + + if (c == '/' && (slashSlashCommentsP || slashStarCommentsP)) { + c = read(); + if (c == '*' && slashStarCommentsP) { + int prevc = 0; + while ((c = read()) != '/' || prevc != '*') { + if (c == '\r') { + LINENO++; + c = read(); + if (c == '\n') { + c = read(); + } + } else { + if (c == '\n') { + LINENO++; + c = read(); + } + } + if (c < 0) { + return ttype = TT_EOF; + } + prevc = c; + } + return nextToken(); + } else if (c == '/' && slashSlashCommentsP) { + while ((c = read()) != '\n' && c != '\r' && c >= 0) { + } + peekc = c; + return nextToken(); + } else { + /* Now see if it is still a single line comment */ + if ((ct['/'] & CT_COMMENT) != 0) { + while ((c = read()) != '\n' && c != '\r' && c >= 0) { + } + peekc = c; + return nextToken(); + } else { + peekc = c; + return ttype = '/'; + } + } + } + + if ((ctype & CT_COMMENT) != 0) { + while ((c = read()) != '\n' && c != '\r' && c >= 0) { + } + peekc = c; + return nextToken(); + } + + return ttype = c; + } + + /** + * Causes the next call to the {@code nextToken} method of this + * tokenizer to return the current value in the {@code ttype} + * field, and not to modify the value in the {@code nval} or + * {@code sval} field. + * + * @see java.io.StreamTokenizer#nextToken() + * @see java.io.StreamTokenizer#nval + * @see java.io.StreamTokenizer#sval + * @see java.io.StreamTokenizer#ttype + */ + public void pushBack() { + if (ttype != TT_NOTHING) /* No-op if nextToken() not called */ { + pushedBack = true; + } + } + + /** + * Return the current line number. + * + * @return the current line number of this stream tokenizer. + */ + public int lineno() { + return LINENO; + } + + /** + * Returns the string representation of the current stream token and + * the line number it occurs on. + * + *

              The precise string returned is unspecified, although the following + * example can be considered typical: + * + *

              Token['a'], line 10
              + * + * @return a string representation of the token + * @see java.io.StreamTokenizer#nval + * @see java.io.StreamTokenizer#sval + * @see java.io.StreamTokenizer#ttype + */ + public String toString() { + String ret; + switch (ttype) { + case TT_EOF: + ret = "EOF"; + break; + case TT_EOL: + ret = "EOL"; + break; + case TT_WORD: + ret = sval; + break; + case TT_NUMBER: + ret = "n=" + nval; + break; + case TT_NOTHING: + ret = "NOTHING"; + break; + default: { + /* + * ttype is the first character of either a quoted string or + * is an ordinary character. ttype can definitely not be less + * than 0, since those are reserved values used in the previous + * case statements + */ + if (ttype < 256 && + ((ctype[ttype] & CT_QUOTE) != 0)) { + ret = sval; + break; + } + + char[] s = new char[3]; + s[0] = s[2] = '\''; + s[1] = (char) ttype; + ret = new String(s); + break; + } + } + return "Token[" + ret + "], line " + LINENO; + } + +} diff --git a/modules/Utils/src/main/java/org/gephi/utils/TempDirUtils.java b/modules/Utils/src/main/java/org/gephi/utils/TempDirUtils.java index f610c9505c..2e51cd380e 100644 --- a/modules/Utils/src/main/java/org/gephi/utils/TempDirUtils.java +++ b/modules/Utils/src/main/java/org/gephi/utils/TempDirUtils.java @@ -39,13 +39,14 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.utils; import java.io.File; import java.io.IOException; +import java.nio.file.Files; /** - * * @author Mathieu Bastian */ public class TempDirUtils { @@ -57,34 +58,28 @@ public static TempDir createTempDir() throws IOException { public static File createTempDirectory() throws IOException { final File temp; - temp = File.createTempFile("temp", Long.toString(System.nanoTime())); - temp.deleteOnExit(); - - if (!(temp.delete())) { - throw new IOException("Could not delete temp file: " + temp.getAbsolutePath()); - } - - if (!(temp.mkdir())) { - throw new IOException("Could not create temp directory: " + temp.getAbsolutePath()); - } - + temp = Files.createTempDirectory("temp" + Long.toString(System.nanoTime())).toFile(); return (temp); } public static class TempDir { - private File tempDir; + private final File tempDir; private TempDir(File tempDir) { this.tempDir = tempDir; } public File createFile(String fileName) { - File file = new File(tempDir, fileName); + File file = new File(tempDir, fileName); file.deleteOnExit(); return file; } + + public File getTempDir() { + return tempDir; + } } } diff --git a/modules/Utils/src/main/java/org/gephi/utils/TimeIntervalGraphics.java b/modules/Utils/src/main/java/org/gephi/utils/TimeIntervalGraphics.java index 50ba434311..9853d3b56b 100644 --- a/modules/Utils/src/main/java/org/gephi/utils/TimeIntervalGraphics.java +++ b/modules/Utils/src/main/java/org/gephi/utils/TimeIntervalGraphics.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.utils; import java.awt.Color; @@ -47,11 +48,13 @@ Development and Distribution License("CDDL") (collectively, the import java.awt.image.BufferedImage; /** - *

              Class to draw time intervals as graphics, being able to indicate the colors to use (or default colors). The result graphics are like:

              - * - *

              |{background color}|time-interval{fill color}|{background color}|

              + * Class to draw time intervals as graphics, being able to indicate the colors + * to use (or default colors). + *

              + * The result graphics are like: + * |{background color}|time-interval{fill color}|{background color}| * - * @author Eduardo Ramos + * @author Eduardo Ramos */ public class TimeIntervalGraphics { @@ -62,7 +65,8 @@ public class TimeIntervalGraphics { private double range; /** - * Create a new TimeIntervalGraphics with the given minimum and maximum times to render intervals later. + * Create a new TimeIntervalGraphics with the given minimum and maximum + * times to render intervals later. * * @param min Minimum time of all intervals * @param max Maximum time of all intervals @@ -83,11 +87,15 @@ private void calculateRange() { } /** - * Creates a time interval graphic representation with default colors. If starts or ends are infinite, they will be normalized to the min or max values range. + * Creates a time interval graphic representation with default colors. If + * starts or ends are infinite, they will be normalized to the min or max + * values range. * - * @param start Start of the interval (must be greater or equal than minimum time) - * @param end End of the interval (must be lesser or equal than maximum time) - * @param width Image width + * @param start Start of the interval (must be greater or equal than minimum + * time) + * @param end End of the interval (must be lesser or equal than maximum + * time) + * @param width Image width * @param height Image height * @return Generated image for the interval */ @@ -96,55 +104,69 @@ public BufferedImage createTimeIntervalImage(double start, double end, int width } /** - * Creates a time interval graphic representation with the indicated fill and border colors (or null to use default colors). If starts or ends are infinite, they will be normalized to the min or - * max values range. + * Creates a time interval graphic representation with the indicated fill + * and border colors (or null to use default colors). If starts or ends are + * infinite, they will be normalized to the min or max values range. * - * @param start Start of the interval (must be greater or equal than minimum time) - * @param end End of the interval (must be lesser or equal than maximum time) - * @param width Image width + * @param start Start of the interval (must be greater or equal than minimum + * time) + * @param end End of the interval (must be lesser or equal than maximum + * time) + * @param width Image width * @param height Image height - * @param fill Fill color for the interval + * @param fill Fill color for the interval * @param border Border color for the interval * @return Generated image for the interval */ - public BufferedImage createTimeIntervalImage(double start, double end, int width, int height, Color fill, Color border) { + public BufferedImage createTimeIntervalImage(double start, double end, int width, int height, Color fill, + Color border) { return createTimeIntervalImage(start, end, width, height, fill, border, null); } /** - * Creates a time interval graphic representation with the indicated fill and border colors (or null to use default colors). If starts or ends are infinite, they will be normalized to the min or - * max values range. + * Creates a time interval graphic representation with the indicated fill + * and border colors (or null to use default colors). If starts or ends are + * infinite, they will be normalized to the min or max values range. * - * @param start Start of the interval (must be greater or equal than minimum time) - * @param end End of the interval (must be lesser or equal than maximum time) - * @param width Image width - * @param height Image height - * @param fill Fill color for the interval - * @param border Border color for the interval + * @param start Start of the interval (must be greater or equal than minimum + * time) + * @param end End of the interval (must be lesser or equal than maximum + * time) + * @param width Image width + * @param height Image height + * @param fill Fill color for the interval + * @param border Border color for the interval * @param background Background color * @return Generated image for the interval */ - public BufferedImage createTimeIntervalImage(double start, double end, int width, int height, Color fill, Color border, Color background) { + public BufferedImage createTimeIntervalImage(double start, double end, int width, int height, Color fill, + Color border, Color background) { if (start > end) { throw new IllegalArgumentException("start should be less or equal than end"); } - return createTimeIntervalImage(new double[]{start}, new double[]{end}, width, height, fill, border, background); + return createTimeIntervalImage(new double[] {start}, new double[] {end}, width, height, fill, border, + background); } /** - * Creates a time interval graphic representation with the indicated fill, border and background colors (or null to use default colors). If starts or ends are infinite, they will be normalized to - * the min or max values range. + * Creates a time interval graphic representation with the indicated fill, + * border and background colors (or null to use default colors). If starts + * or ends are infinite, they will be normalized to the min or max values + * range. * - * @param starts Starts of the intervals (must be greater or equal than minimum time) - * @param ends Ends of the intervals (must be lesser or equal than maximum time) - * @param width Image width - * @param height Image height - * @param fill Fill color for the interval - * @param border Border color for the interval + * @param starts Starts of the intervals (must be greater or equal than + * minimum time) + * @param ends Ends of the intervals (must be lesser or equal than maximum + * time) + * @param width Image width + * @param height Image height + * @param fill Fill color for the interval + * @param border Border color for the interval * @param background Background color * @return Generated image for the interval */ - public BufferedImage createTimeIntervalImage(double starts[], double ends[], int width, int height, Color fill, Color border, Color background) { + public BufferedImage createTimeIntervalImage(double[] starts, double[] ends, int width, int height, Color fill, + Color border, Color background) { if (starts.length != ends.length) { throw new IllegalArgumentException("start and ends length should be equal"); } @@ -169,7 +191,6 @@ public BufferedImage createTimeIntervalImage(double starts[], double ends[], int g.translate(1, 0);//Start drawing at pixel 1 width -= 2;//Reduce fill area in 2 pixels for the borders - double xTickWidth = (double) width / range; //Draw time interval filled parts: if (range == 0) {//No range, Min=Max @@ -181,6 +202,8 @@ public BufferedImage createTimeIntervalImage(double starts[], double ends[], int g.drawLine(-1, 0, -1, height); g.drawLine(width, 0, width, height); } else { + double xTickWidth = (double) width / range; + int startPixel, endPixel; for (int i = 0; i < starts.length; i++) { g.setColor(fill); @@ -248,4 +271,16 @@ private double normalizeToRange(double d) { } return d; } + + public void setMinMax(double min, double max) { + min = normalize(min); + max = normalize(max); + if (max < min) { + throw new IllegalArgumentException("min should be less or equal than max"); + } + this.min = min; + this.max = max; + + calculateRange(); + } } diff --git a/modules/Utils/src/main/java/org/gephi/utils/VersionUtils.java b/modules/Utils/src/main/java/org/gephi/utils/VersionUtils.java new file mode 100644 index 0000000000..bcf7e9b8c7 --- /dev/null +++ b/modules/Utils/src/main/java/org/gephi/utils/VersionUtils.java @@ -0,0 +1,16 @@ +package org.gephi.utils; + +import org.openide.util.NbBundle; + +public class VersionUtils { + + /** + * Returns the current version of the Gephi application. + * + * @return gephi version + */ + public static String getGephiVersion() { + return NbBundle.getBundle("org.netbeans.core.startup.Bundle").getString("currentVersion") + .replaceAll("( [0-9]{12})$", ""); + } +} diff --git a/modules/Utils/src/main/java/org/gephi/utils/sparklines/SparklineComponent.java b/modules/Utils/src/main/java/org/gephi/utils/sparklines/SparklineComponent.java index 237b63d0bf..2d5d1b35d1 100644 --- a/modules/Utils/src/main/java/org/gephi/utils/sparklines/SparklineComponent.java +++ b/modules/Utils/src/main/java/org/gephi/utils/sparklines/SparklineComponent.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.utils.sparklines; import java.awt.Graphics; @@ -52,27 +53,33 @@ Development and Distribution License("CDDL") (collectively, the *

              Simple component that holds a SparklineGraph and auto-repaints it when mouse interaction happens if desired * (indicate it with updateMouseXPosition parameter in constructors).

              *

              It also takes care to update sparkline width and height to the component width and height when resized

              - * @author Eduardo Ramos + * + * @author Eduardo Ramos */ public class SparklineComponent extends JComponent { - private Number[] xValues, yValues; - private Number yMinValue, yMaxValue; - private SparklineParameters sparklineParameters; + private final Number[] xValues; + private final Number[] yValues; + private final Number yMinValue; + private final Number yMaxValue; + private final SparklineParameters sparklineParameters; public SparklineComponent(Number[] yValues, SparklineParameters sparklineParameters, boolean updateMouseXPosition) { this(null, yValues, null, null, sparklineParameters, updateMouseXPosition); } - public SparklineComponent(Number[] yValues, Number yMinValue, Number yMaxValue, SparklineParameters sparklineParameters, boolean updateMouseXPosition) { + public SparklineComponent(Number[] yValues, Number yMinValue, Number yMaxValue, + SparklineParameters sparklineParameters, boolean updateMouseXPosition) { this(null, yValues, yMinValue, yMaxValue, sparklineParameters, updateMouseXPosition); } - public SparklineComponent(Number[] xValues, Number[] yValues, SparklineParameters sparklineParameters, boolean updateMouseXPosition) { + public SparklineComponent(Number[] xValues, Number[] yValues, SparklineParameters sparklineParameters, + boolean updateMouseXPosition) { this(xValues, yValues, null, null, sparklineParameters, updateMouseXPosition); } - public SparklineComponent(Number[] xValues, Number[] yValues, Number yMinValue, Number yMaxValue, SparklineParameters sparklineParameters, boolean updateMouseXPosition) { + public SparklineComponent(Number[] xValues, Number[] yValues, Number yMinValue, Number yMaxValue, + SparklineParameters sparklineParameters, boolean updateMouseXPosition) { this.xValues = xValues; this.yValues = yValues; this.yMinValue = yMinValue; diff --git a/modules/Utils/src/main/java/org/gephi/utils/sparklines/SparklineGraph.java b/modules/Utils/src/main/java/org/gephi/utils/sparklines/SparklineGraph.java index 7b14b734e6..fcb99458eb 100644 --- a/modules/Utils/src/main/java/org/gephi/utils/sparklines/SparklineGraph.java +++ b/modules/Utils/src/main/java/org/gephi/utils/sparklines/SparklineGraph.java @@ -39,9 +39,14 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.utils.sparklines; -import java.awt.*; +import java.awt.Color; +import java.awt.Font; +import java.awt.Graphics2D; +import java.awt.Paint; +import java.awt.RenderingHints; import java.awt.geom.Ellipse2D; import java.awt.geom.Line2D; import java.awt.geom.Path2D; @@ -53,8 +58,8 @@ Development and Distribution License("CDDL") (collectively, the *

              Drawing settings are controlled with SparklineParameters class

              *

              Use SparklineComponent class to easily include interactive sparklines in your GUI

              * + * @author Eduardo Ramos * @see SparklineParameters - * @author Eduardo Ramos */ public class SparklineGraph { @@ -63,7 +68,7 @@ public class SparklineGraph { /** * Draw a sparkline only providing y axis values (1 x tick per number assumed) * - * @param values Y axis values + * @param values Y axis values * @param parameters Rendering parameters * @return Image of the sparkline */ @@ -74,8 +79,8 @@ public static BufferedImage draw(Number[] values, SparklineParameters parameters /** * Draw a sparkline with x axis and y axis values. X values must be ordered and not repeated. * - * @param xValues X axis values - * @param yValues Y axis values + * @param xValues X axis values + * @param yValues Y axis values * @param parameters Rendering parameters * @return Image of the sparkline */ @@ -88,13 +93,14 @@ public static BufferedImage draw(Number[] xValues, Number[] yValues, SparklinePa * by * SparklineGraph * - * @param yValues Y axis values - * @param yMinValue Minimum value of the Y axis, should be correct - * @param yMaxValue Maximum value of the Y axis, should be correct + * @param yValues Y axis values + * @param yMinValue Minimum value of the Y axis, should be correct + * @param yMaxValue Maximum value of the Y axis, should be correct * @param parameters Rendering parameters * @return Image of the sparkline */ - public static BufferedImage draw(Number[] yValues, Number yMinValue, Number yMaxValue, SparklineParameters parameters) { + public static BufferedImage draw(Number[] yValues, Number yMinValue, Number yMaxValue, + SparklineParameters parameters) { return draw(null, yValues, yMinValue, yMaxValue, parameters); } @@ -103,14 +109,15 @@ public static BufferedImage draw(Number[] yValues, Number yMinValue, Number yMax * calculations by * SparklineGraph X values must be ordered and not repeated. * - * @param xValues X axis values - * @param yValues Y axis values - * @param yMinValue Minimum value of the Y axis, should be correct - * @param yMaxValue Maximum value of the Y axis, should be correct + * @param xValues X axis values + * @param yValues Y axis values + * @param yMinValue Minimum value of the Y axis, should be correct + * @param yMaxValue Maximum value of the Y axis, should be correct * @param parameters Rendering parameters * @return Image of the sparkline */ - public static BufferedImage draw(Number[] xValues, Number[] yValues, Number yMinValue, Number yMaxValue, SparklineParameters parameters) { + public static BufferedImage draw(Number[] xValues, Number[] yValues, Number yMinValue, Number yMaxValue, + SparklineParameters parameters) { if (parameters == null) { throw new IllegalArgumentException("parameters can't be null"); } @@ -123,16 +130,21 @@ public static BufferedImage draw(Number[] xValues, Number[] yValues, Number yMin throw new IllegalArgumentException("X values should have the same length as Y values"); } - final BufferedImage image = new BufferedImage(parameters.getWidth(), parameters.getHeight(), BufferedImage.TYPE_INT_ARGB); - final Color backgroundColor = parameters.getBackgroundColor() != null ? parameters.getBackgroundColor() : SparklineParameters.DEFAULT_BACKGROUND_COLOR; - final Color lineColor = parameters.getLineColor() != null ? parameters.getLineColor() : SparklineParameters.DEFAULT_LINE_COLOR; - final Color areaColor = parameters.getAreaColor() != null ? parameters.getAreaColor() : SparklineParameters.DEFAULT_AREA_COLOR; + final BufferedImage image = + new BufferedImage(parameters.getWidth(), parameters.getHeight(), BufferedImage.TYPE_INT_ARGB); + final Color backgroundColor = parameters.getBackgroundColor() != null ? parameters.getBackgroundColor() : + SparklineParameters.DEFAULT_BACKGROUND_COLOR; + final Color lineColor = + parameters.getLineColor() != null ? parameters.getLineColor() : SparklineParameters.DEFAULT_LINE_COLOR; + final Color areaColor = + parameters.getAreaColor() != null ? parameters.getAreaColor() : SparklineParameters.DEFAULT_AREA_COLOR; Color highlightMinColor = parameters.getHighlightMinColor(); Color highlightMaxColor = parameters.getHighlightMaxColor(); int width = parameters.getWidth(); int height = parameters.getHeight(); - ArrayList highlightsList = new ArrayList(); - Color highlightValueColor = parameters.getHighligtValueColor() != null ? parameters.getHighligtValueColor() : SparklineParameters.DEFAULT_HIGHLIGHT_VALUE_COLOR; + ArrayList highlightsList = new ArrayList<>(); + Color highlightValueColor = parameters.getHighligtValueColor() != null ? parameters.getHighligtValueColor() : + SparklineParameters.DEFAULT_HIGHLIGHT_VALUE_COLOR; Integer highlightedValueXPosition = parameters.getHighlightedValueXPosition(); String highlightedValueText = null; @@ -251,12 +263,15 @@ public static BufferedImage draw(Number[] xValues, Number[] yValues, Number yMin if ((highlightedValueXPosition - x0) < (x1 - x0) / 2f) {//Highlight left point highlightsList.add(new HighlightParameters(x0, y0, highlightValueColor)); if (parameters.getHighlightTextColor() != null) { - highlightedValueText = buildHighlightText(parameters.getHighlightTextMode(), xValues != null ? xValues[i] : i, yValues[i]); + highlightedValueText = + buildHighlightText(parameters.getHighlightTextMode(), xValues != null ? xValues[i] : i, + yValues[i]); } } else {//Highlight right point highlightsList.add(new HighlightParameters(x1, y1, highlightValueColor)); if (parameters.getHighlightTextColor() != null) { - highlightedValueText = buildHighlightText(parameters.getHighlightTextMode(), xValues != null ? xValues[i + 1] : i + 1, yValues[i + 1]); + highlightedValueText = buildHighlightText(parameters.getHighlightTextMode(), + xValues != null ? xValues[i + 1] : i + 1, yValues[i + 1]); } } highlightedValueXPosition = null; @@ -301,7 +316,8 @@ public static BufferedImage draw(Number[] xValues, Number[] yValues, Number yMin private static void drawHighlight(Graphics2D g, float x, float y, Color highlightColor) { Paint oldPaint = g.getPaint(); g.setPaint(highlightColor); - g.fill(new Ellipse2D.Double(x - HIGHLIGHT_RADIUS / 2f, y - HIGHLIGHT_RADIUS / 2f, HIGHLIGHT_RADIUS, HIGHLIGHT_RADIUS)); + g.fill(new Ellipse2D.Double(x - HIGHLIGHT_RADIUS / 2f, y - HIGHLIGHT_RADIUS / 2f, HIGHLIGHT_RADIUS, + HIGHLIGHT_RADIUS)); g.setPaint(oldPaint); } @@ -323,7 +339,8 @@ private static float calculateMax(Number[] yValues) { return max; } - private static String buildHighlightText(SparklineParameters.HighlightTextMode highlightTextMode, Number x, Number y) { + private static String buildHighlightText(SparklineParameters.HighlightTextMode highlightTextMode, Number x, + Number y) { StringBuilder sb = new StringBuilder(); if (highlightTextMode == null) { highlightTextMode = SparklineParameters.DEFAULT_HIGHLIGHT_TEXT_MODE; diff --git a/modules/Utils/src/main/java/org/gephi/utils/sparklines/SparklineParameters.java b/modules/Utils/src/main/java/org/gephi/utils/sparklines/SparklineParameters.java index ea2fc74672..8dda160970 100644 --- a/modules/Utils/src/main/java/org/gephi/utils/sparklines/SparklineParameters.java +++ b/modules/Utils/src/main/java/org/gephi/utils/sparklines/SparklineParameters.java @@ -39,12 +39,13 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.utils.sparklines; import java.awt.Color; /** - * Sparkline rendering settings: + * Sparkline rendering settings: *
                *
              • Width and height of the graphic in pixels
              • *
              • Line color. Blue by default if null
              • @@ -56,22 +57,15 @@ Development and Distribution License("CDDL") (collectively, the *
              • Highlighted value text box color, used if highlightedValueXPosition and highlightTextColor are provided
              • *
              * Several constructors are provided for various use cases. + * + * @author Eduardo Ramos * @see SparklineGraph - * @author Eduardo Ramos */ public class SparklineParameters { - /** - * Defines what text is shown when highlightTextColor is not null. - */ - public enum HighlightTextMode { - - X_VALUES, - Y_VALUES, - X_AND_Y_VALUES; - } public static final Color DEFAULT_LINE_COLOR = Color.BLUE; - public static final Color DEFAULT_AREA_COLOR = new Color(DEFAULT_LINE_COLOR.getRed(), DEFAULT_LINE_COLOR.getRed(), DEFAULT_LINE_COLOR.getBlue(), 50); + public static final Color DEFAULT_AREA_COLOR = + new Color(DEFAULT_LINE_COLOR.getRed(), DEFAULT_LINE_COLOR.getRed(), DEFAULT_LINE_COLOR.getBlue(), 50); public static final Color DEFAULT_BACKGROUND_COLOR = Color.WHITE; public static final Color DEFAULT_HIGHLIGHT_VALUE_COLOR = Color.MAGENTA; public static final Color DEFAULT_TEXT_COLOR = Color.BLACK; @@ -93,7 +87,7 @@ public enum HighlightTextMode { /** * Create a simple sparkline parameters with only lines * - * @param width Width in pixels + * @param width Width in pixels * @param height Height in pixels */ public SparklineParameters(int width, int height) { @@ -103,8 +97,8 @@ public SparklineParameters(int width, int height) { /** * Create a simple sparkline parameters with only lines and a specific line color * - * @param width Width in pixels - * @param height Height in pixels + * @param width Width in pixels + * @param height Height in pixels * @param lineColor Lines color */ public SparklineParameters(int width, int height, Color lineColor) { @@ -114,9 +108,9 @@ public SparklineParameters(int width, int height, Color lineColor) { /** * Create a simple sparkline parameters with only lines and a specific line color and background color * - * @param width Width in pixels - * @param height Height in pixels - * @param lineColor Lines color + * @param width Width in pixels + * @param height Height in pixels + * @param lineColor Lines color * @param backgroundColor Background color */ public SparklineParameters(int width, int height, Color lineColor, Color backgroundColor) { @@ -126,15 +120,17 @@ public SparklineParameters(int width, int height, Color lineColor, Color backgro /** * Create a sparkline parameters specifying colors for line, background, and max/min highlight colors (no highlight if null) * - * @param width Width in pixels - * @param height Height in pixels - * @param lineColor Lines color - * @param backgroundColor Background color + * @param width Width in pixels + * @param height Height in pixels + * @param lineColor Lines color + * @param backgroundColor Background color * @param highlightMinColor Min value highlight color or null * @param highlightMaxColor Max value highlight color or null */ - public SparklineParameters(int width, int height, Color lineColor, Color backgroundColor, Color highlightMinColor, Color highlightMaxColor) { - this(width, height, lineColor, backgroundColor, highlightMinColor, highlightMaxColor, null, null, null, null, null); + public SparklineParameters(int width, int height, Color lineColor, Color backgroundColor, Color highlightMinColor, + Color highlightMaxColor) { + this(width, height, lineColor, backgroundColor, highlightMinColor, highlightMaxColor, null, null, null, null, + null); } /** @@ -142,16 +138,18 @@ public SparklineParameters(int width, int height, Color lineColor, Color backgro * highlight text and text box colors and default * HighlightTextMode. * - * @param width Width in pixels - * @param height Height in pixels - * @param lineColor Lines color - * @param backgroundColor Background color - * @param highlightMinColor Min value highlight color or null - * @param highlightMaxColor Max value highlight color or null + * @param width Width in pixels + * @param height Height in pixels + * @param lineColor Lines color + * @param backgroundColor Background color + * @param highlightMinColor Min value highlight color or null + * @param highlightMaxColor Max value highlight color or null * @param highlightedValueXPosition X position in pixels to find closest value in the sparkline */ - public SparklineParameters(int width, int height, Color lineColor, Color backgroundColor, Color highlightMinColor, Color highlightMaxColor, Integer highlightedValueXPosition) { - this(width, height, lineColor, backgroundColor, highlightMinColor, highlightMaxColor, highlightedValueXPosition, null, DEFAULT_TEXT_COLOR, DEFAULT_TEXT_BOX_COLOR, DEFAULT_HIGHLIGHT_TEXT_MODE); + public SparklineParameters(int width, int height, Color lineColor, Color backgroundColor, Color highlightMinColor, + Color highlightMaxColor, Integer highlightedValueXPosition) { + this(width, height, lineColor, backgroundColor, highlightMinColor, highlightMaxColor, highlightedValueXPosition, + null, DEFAULT_TEXT_COLOR, DEFAULT_TEXT_BOX_COLOR, DEFAULT_HIGHLIGHT_TEXT_MODE); } /** @@ -159,19 +157,22 @@ public SparklineParameters(int width, int height, Color lineColor, Color backgro * highlight text and text box colors and * HighlightTextMode. * - * @param width Width in pixels - * @param height Height in pixels - * @param lineColor Lines color - * @param backgroundColor Background color - * @param highlightMinColor Min value highlight color or null - * @param highlightMaxColor Max value highlight color or null + * @param width Width in pixels + * @param height Height in pixels + * @param lineColor Lines color + * @param backgroundColor Background color + * @param highlightMinColor Min value highlight color or null + * @param highlightMaxColor Max value highlight color or null * @param highlightedValueXPosition X position in pixels to find closest value in the sparkline - * @param highligtValueColor Highlighted value color (Magenta if null) - * @param highlightTextColor Highlighted value text color or null - * @param highlightTextBoxColor Highlighted value text box color or null - * @param highlightTextMode What to show on the highlight text (x and/or y values) - */ - public SparklineParameters(int width, int height, Color lineColor, Color backgroundColor, Color highlightMinColor, Color highlightMaxColor, Integer highlightedValueXPosition, Color highligtValueColor, Color highlightTextColor, Color highlightTextBoxColor, HighlightTextMode highlightTextMode) { + * @param highligtValueColor Highlighted value color (Magenta if null) + * @param highlightTextColor Highlighted value text color or null + * @param highlightTextBoxColor Highlighted value text box color or null + * @param highlightTextMode What to show on the highlight text (x and/or y values) + */ + public SparklineParameters(int width, int height, Color lineColor, Color backgroundColor, Color highlightMinColor, + Color highlightMaxColor, Integer highlightedValueXPosition, Color highligtValueColor, + Color highlightTextColor, Color highlightTextBoxColor, + HighlightTextMode highlightTextMode) { this.width = width; this.height = height; this.lineColor = lineColor; @@ -332,8 +333,8 @@ public void setHighlightedValueXPosition(Integer highlightedValueXPosition) { /** * Return current HighlightTextMode * - * @see HighlightTextMode * @return Current HighlightTextMode + * @see HighlightTextMode */ public HighlightTextMode getHighlightTextMode() { return highlightTextMode; @@ -342,8 +343,8 @@ public HighlightTextMode getHighlightTextMode() { /** * Set HighlightTextMode * - * @see HighlightTextMode * @param highlightTextMode New HighlightTextMode + * @see HighlightTextMode */ public void setHighlightTextMode(HighlightTextMode highlightTextMode) { this.highlightTextMode = highlightTextMode; @@ -403,6 +404,15 @@ public void setTransparentBackground(boolean transparentBackground) { this.transparentBackground = transparentBackground; } + /** + * Returns current areaColor. + * + * @return Current areaColor + */ + public Color getAreaColor() { + return areaColor; + } + /** * Set color to fill the area under the line. If null, semi-transparent default line color will be used. Used only if draw area is enabled. * @@ -413,12 +423,12 @@ public void setAreaColor(Color areaColor) { } /** - * Returns current areaColor. + * Checks if the area under the line is enabled. * - * @return Current areaColor + * @return draw area enabled */ - public Color getAreaColor() { - return areaColor; + public boolean isDrawArea() { + return drawArea; } /** @@ -431,11 +441,12 @@ public void setDrawArea(boolean drawArea) { } /** - * Checks if the area under the line is enabled. - * - * @return draw area enabled + * Defines what text is shown when highlightTextColor is not null. */ - public boolean isDrawArea() { - return drawArea; + public enum HighlightTextMode { + + X_VALUES, + Y_VALUES, + X_AND_Y_VALUES } } diff --git a/modules/Utils/src/main/nbm/manifest.mf b/modules/Utils/src/main/nbm/manifest.mf index dca6431595..05c1eb166f 100644 --- a/modules/Utils/src/main/nbm/manifest.mf +++ b/modules/Utils/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true OpenIDE-Module-Localizing-Bundle: org/gephi/utils/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi Core +OpenIDE-Module-Name: Utils \ No newline at end of file diff --git a/modules/Utils/src/main/nbm/module.xml b/modules/Utils/src/main/nbm/module.xml deleted file mode 100644 index 361d443d7b..0000000000 --- a/modules/Utils/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/Utils/src/main/resources/org/gephi/utils/Bundle.properties b/modules/Utils/src/main/resources/org/gephi/utils/Bundle.properties index a94a5aa555..c6ce20086f 100644 --- a/modules/Utils/src/main/resources/org/gephi/utils/Bundle.properties +++ b/modules/Utils/src/main/resources/org/gephi/utils/Bundle.properties @@ -1,5 +1,2 @@ -OpenIDE-Module-Display-Category=Gephi Core -OpenIDE-Module-Long-Description=\ - Utils classes for core -OpenIDE-Module-Name=Utils +OpenIDE-Module-Long-Description=Utils classes for core OpenIDE-Module-Short-Description=Utils classes for core \ No newline at end of file diff --git a/modules/Utils/src/main/resources/org/gephi/utils/Bundle_ar.properties b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/Utils/src/main/resources/org/gephi/utils/Bundle_ca.properties b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_ca.properties new file mode 100644 index 0000000000..1301644dc3 --- /dev/null +++ b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_ca.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Classes ϊtils per al nucli +OpenIDE-Module-Short-Description=Classes ϊtils per al nucli diff --git a/modules/Utils/src/main/resources/org/gephi/utils/Bundle_cs.properties b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_cs.properties index dcc1be6f8f..996966947d 100644 --- a/modules/Utils/src/main/resources/org/gephi/utils/Bundle_cs.properties +++ b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_cs.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:05+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=T\u0159\u00edda n\u00e1stroj\u016f j\u00e1dra - -OpenIDE-Module-Short-Description=T\u0159\u00edda n\u00e1stroj\u016f j\u00e1dra +OpenIDE-Module-Long-Description=T\u0159νda nαstroj\u016f jαdra +OpenIDE-Module-Short-Description=T\u0159νda nαstroj\u016f jαdra diff --git a/modules/Utils/src/main/resources/org/gephi/utils/Bundle_de.properties b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_de.properties new file mode 100644 index 0000000000..0a69a8be48 --- /dev/null +++ b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_de.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Utility-Klassen fόr Core +OpenIDE-Module-Short-Description=Utility-Klassen fόr Core diff --git a/modules/Utils/src/main/resources/org/gephi/utils/Bundle_es.properties b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_es.properties index 416e9448bf..1a7e371a7b 100644 --- a/modules/Utils/src/main/resources/org/gephi/utils/Bundle_es.properties +++ b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_es.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:05+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=Clases de utilidades para la parte central del programa - -OpenIDE-Module-Short-Description=Clases de utilidades para la parte central del programa +OpenIDE-Module-Long-Description=Clases de utilidades para la parte central del programa +OpenIDE-Module-Short-Description=Clases de utilidades para la parte central del programa diff --git a/modules/Utils/src/main/resources/org/gephi/utils/Bundle_fr.properties b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_fr.properties index 715c03a6f2..322146a6ac 100644 --- a/modules/Utils/src/main/resources/org/gephi/utils/Bundle_fr.properties +++ b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_fr.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:05+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Classes utilitaires du noyau. - -OpenIDE-Module-Short-Description=Classes utilitaires du noyau. +OpenIDE-Module-Long-Description=Classes utilitaires du noyau. +OpenIDE-Module-Short-Description=Classes utilitaires du noyau. diff --git a/modules/Utils/src/main/resources/org/gephi/utils/Bundle_he.properties b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_he.properties new file mode 100644 index 0000000000..57812ca6b5 --- /dev/null +++ b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_he.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Utils classes for core +OpenIDE-Module-Short-Description=Utils classes for core diff --git a/modules/Utils/src/main/resources/org/gephi/utils/Bundle_hu.properties b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_hu.properties new file mode 100644 index 0000000000..fe467199d5 --- /dev/null +++ b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_hu.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Short-Description=Utils oszt\u00E1lyok az alaphoz +OpenIDE-Module-Long-Description=Utils oszt\u00E1lyok az alaphoz diff --git a/modules/Utils/src/main/resources/org/gephi/utils/Bundle_it.properties b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_it.properties new file mode 100644 index 0000000000..57812ca6b5 --- /dev/null +++ b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_it.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Utils classes for core +OpenIDE-Module-Short-Description=Utils classes for core diff --git a/modules/Utils/src/main/resources/org/gephi/utils/Bundle_ja.properties b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_ja.properties index 95bdcf527b..9164152f90 100644 --- a/modules/Utils/src/main/resources/org/gephi/utils/Bundle_ja.properties +++ b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_ja.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:05+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u30b3\u30a2\u7528\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30af\u30e9\u30b9 - -OpenIDE-Module-Short-Description=\u30b3\u30a2\u7528\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30af\u30e9\u30b9 +OpenIDE-Module-Long-Description=\u30b3\u30a2\u7528\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30af\u30e9\u30b9 +OpenIDE-Module-Short-Description=\u30b3\u30a2\u7528\u30e6\u30fc\u30c6\u30a3\u30ea\u30c6\u30a3\u30af\u30e9\u30b9 diff --git a/modules/Utils/src/main/resources/org/gephi/utils/Bundle_ko.properties b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_ko.properties new file mode 100644 index 0000000000..b177d04fc1 --- /dev/null +++ b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_ko.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Long-Description=\uCF54\uC5B4\uC6A9 Utils \uD074\uB798\uC2A4 +OpenIDE-Module-Short-Description=\uCF54\uC5B4\uC6A9 Utils \uD074\uB798\uC2A4 diff --git a/modules/Utils/src/main/resources/org/gephi/utils/Bundle_nl.properties b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_nl.properties new file mode 100644 index 0000000000..57812ca6b5 --- /dev/null +++ b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_nl.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Utils classes for core +OpenIDE-Module-Short-Description=Utils classes for core diff --git a/modules/Utils/src/main/resources/org/gephi/utils/Bundle_pt_BR.properties b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_pt_BR.properties index c20daff3a9..cc15f715e0 100644 --- a/modules/Utils/src/main/resources/org/gephi/utils/Bundle_pt_BR.properties +++ b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_pt_BR.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:05+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Classes utilit\u00e1rias do n\u00facleo do programa - -OpenIDE-Module-Short-Description=Classes utilit\u00e1rias do n\u00facleo do programa +OpenIDE-Module-Long-Description=Classes utilitαrias do nϊcleo do programa +OpenIDE-Module-Short-Description=Classes utilitαrias do nϊcleo do programa diff --git a/modules/Utils/src/main/resources/org/gephi/utils/Bundle_ro.properties b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_ro.properties new file mode 100644 index 0000000000..bf424732dc --- /dev/null +++ b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_ro.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Long-Description=Clase de utilitare pentru nucleu +OpenIDE-Module-Short-Description=Clase de utilitare pentru nucleu diff --git a/modules/Utils/src/main/resources/org/gephi/utils/Bundle_ru.properties b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_ru.properties index d479d3dc5a..d14a93db2d 100644 --- a/modules/Utils/src/main/resources/org/gephi/utils/Bundle_ru.properties +++ b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_ru.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:05+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=\u0423\u0442\u0438\u043b\u0438\u0442\u0430\u0440\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0434\u043b\u044f \u044f\u0434\u0440\u0430 - -OpenIDE-Module-Short-Description=\u0423\u0442\u0438\u043b\u0438\u0442\u0430\u0440\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0434\u043b\u044f \u044f\u0434\u0440\u0430 +OpenIDE-Module-Long-Description=\u0423\u0442\u0438\u043b\u0438\u0442\u0430\u0440\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0434\u043b\u044f \u044f\u0434\u0440\u0430 +OpenIDE-Module-Short-Description=\u0423\u0442\u0438\u043b\u0438\u0442\u0430\u0440\u043d\u044b\u0435 \u043a\u043b\u0430\u0441\u0441\u044b \u0434\u043b\u044f \u044f\u0434\u0440\u0430 diff --git a/modules/Utils/src/main/resources/org/gephi/utils/Bundle_th.properties b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/Utils/src/main/resources/org/gephi/utils/Bundle_tr.properties b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_tr.properties new file mode 100644 index 0000000000..57812ca6b5 --- /dev/null +++ b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_tr.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Utils classes for core +OpenIDE-Module-Short-Description=Utils classes for core diff --git a/modules/Utils/src/main/resources/org/gephi/utils/Bundle_uk.properties b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_uk.properties new file mode 100644 index 0000000000..6407861131 --- /dev/null +++ b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_uk.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=\u041A\u043B\u0430\u0441\u0438 Utils \u0434\u043B\u044F \u044F\u0434\u0440\u0430 +OpenIDE-Module-Short-Description=\u041A\u043B\u0430\u0441\u0438 Utils \u0434\u043B\u044F \u044F\u0434\u0440\u0430 diff --git a/modules/Utils/src/main/resources/org/gephi/utils/Bundle_zh_CN.properties b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_zh_CN.properties index 8d5b3e1d08..165a4be1ce 100644 --- a/modules/Utils/src/main/resources/org/gephi/utils/Bundle_zh_CN.properties +++ b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_zh_CN.properties @@ -1,10 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:05+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u6838\u5fc3\u5de5\u5177\u7c7b - -OpenIDE-Module-Short-Description=\u6838\u5fc3\u5de5\u5177\u7c7b +OpenIDE-Module-Long-Description=\u6838\u5fc3\u5de5\u5177\u7c7b +OpenIDE-Module-Short-Description=\u6838\u5fc3\u5de5\u5177\u7c7b diff --git a/modules/Utils/src/main/resources/org/gephi/utils/Bundle_zh_TW.properties b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_zh_TW.properties new file mode 100644 index 0000000000..57812ca6b5 --- /dev/null +++ b/modules/Utils/src/main/resources/org/gephi/utils/Bundle_zh_TW.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Utils classes for core +OpenIDE-Module-Short-Description=Utils classes for core diff --git a/modules/Utils/src/main/resources/org/gephi/utils/cs.po b/modules/Utils/src/main/resources/org/gephi/utils/cs.po deleted file mode 100644 index 3f71589b40..0000000000 --- a/modules/Utils/src/main/resources/org/gephi/utils/cs.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:05+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "TΕ™Γ­da nΓ‘strojΕ― jΓ‘dra" - -msgid "OpenIDE-Module-Short-Description" -msgstr "TΕ™Γ­da nΓ‘strojΕ― jΓ‘dra" diff --git a/modules/Utils/src/main/resources/org/gephi/utils/es.po b/modules/Utils/src/main/resources/org/gephi/utils/es.po deleted file mode 100644 index 5976a15b2b..0000000000 --- a/modules/Utils/src/main/resources/org/gephi/utils/es.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:05+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Clases de utilidades para la parte central del programa" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Clases de utilidades para la parte central del programa" diff --git a/modules/Utils/src/main/resources/org/gephi/utils/fr.po b/modules/Utils/src/main/resources/org/gephi/utils/fr.po deleted file mode 100644 index cf029ee55e..0000000000 --- a/modules/Utils/src/main/resources/org/gephi/utils/fr.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:05+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Classes utilitaires du noyau." - -msgid "OpenIDE-Module-Short-Description" -msgstr "Classes utilitaires du noyau." diff --git a/modules/Utils/src/main/resources/org/gephi/utils/ja.po b/modules/Utils/src/main/resources/org/gephi/utils/ja.po deleted file mode 100644 index 9ed8c3811d..0000000000 --- a/modules/Utils/src/main/resources/org/gephi/utils/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:05+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "コを用ユーティγƒͺティクラス" - -msgid "OpenIDE-Module-Short-Description" -msgstr "コを用ユーティγƒͺティクラス" diff --git a/modules/Utils/src/main/resources/org/gephi/utils/org-gephi-utils.pot b/modules/Utils/src/main/resources/org/gephi/utils/org-gephi-utils.pot deleted file mode 100644 index 9dad95dd2e..0000000000 --- a/modules/Utils/src/main/resources/org/gephi/utils/org-gephi-utils.pot +++ /dev/null @@ -1,22 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Utils classes for core" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Utils classes for core" diff --git a/modules/Utils/src/main/resources/org/gephi/utils/pt_BR.po b/modules/Utils/src/main/resources/org/gephi/utils/pt_BR.po deleted file mode 100644 index c4171e42f9..0000000000 --- a/modules/Utils/src/main/resources/org/gephi/utils/pt_BR.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:05+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Classes utilitΓ‘rias do nΓΊcleo do programa" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Classes utilitΓ‘rias do nΓΊcleo do programa" diff --git a/modules/Utils/src/main/resources/org/gephi/utils/ru.po b/modules/Utils/src/main/resources/org/gephi/utils/ru.po deleted file mode 100644 index 418dce0500..0000000000 --- a/modules/Utils/src/main/resources/org/gephi/utils/ru.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:05+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π°Ρ€Π½Ρ‹Π΅ классы для ядра" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Π£Ρ‚ΠΈΠ»ΠΈΡ‚Π°Ρ€Π½Ρ‹Π΅ классы для ядра" diff --git a/modules/Utils/src/main/resources/org/gephi/utils/zh_CN.po b/modules/Utils/src/main/resources/org/gephi/utils/zh_CN.po deleted file mode 100644 index e091503207..0000000000 --- a/modules/Utils/src/main/resources/org/gephi/utils/zh_CN.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:05+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ζ ΈεΏƒε·₯ε…·η±»" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζ ΈεΏƒε·₯ε…·η±»" diff --git a/modules/ValidationAPI/pom.xml b/modules/ValidationAPI/pom.xml deleted file mode 100644 index b859ebd26e..0000000000 --- a/modules/ValidationAPI/pom.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - 4.0.0 - - gephi-parent - org.gephi - 0.9-SNAPSHOT - ../.. - - - org.gephi - lib.validation - 0.9-SNAPSHOT - nbm - - ValidationAPI - - - - org.netbeans.api - org-openide-util - - - org.netbeans.api - org-openide-util-lookup - - - org.netbeans - simple-validation - 1.0 - - - - - - - org.codehaus.mojo - nbm-maven-plugin - - - org.gephi.lib.validation - org.netbeans.validation.* - - - - - - diff --git a/modules/ValidationAPI/src/main/nbm/manifest.mf b/modules/ValidationAPI/src/main/nbm/manifest.mf deleted file mode 100644 index 0b807b8db9..0000000000 --- a/modules/ValidationAPI/src/main/nbm/manifest.mf +++ /dev/null @@ -1,4 +0,0 @@ -Manifest-Version: 1.0 -AutoUpdate-Essential-Module: true -OpenIDE-Module-Localizing-Bundle: org/gephi/lib/validation/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file diff --git a/modules/ValidationAPI/src/main/nbm/module.xml b/modules/ValidationAPI/src/main/nbm/module.xml deleted file mode 100644 index 11fcb49e54..0000000000 --- a/modules/ValidationAPI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/Bundle.properties b/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/Bundle.properties deleted file mode 100644 index b5275be260..0000000000 --- a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/Bundle.properties +++ /dev/null @@ -1,8 +0,0 @@ -OpenIDE-Module-Display-Category=Libraries -OpenIDE-Module-Long-Description=\ - Simple Validation API -OpenIDE-Module-Name=ValidationAPI -OpenIDE-Module-Short-Description=Simple Validation API -PositiveNumberValidator_NOT_POSITIVE = {0} must be a positive number -BetweenZeroAndOneValidator_NOT_IN_RANGE {0} must be a real number between 0 and 1 -Multiple4NumberValidator_NOT_MULTIPLE {0} must be a multiple of 4 number diff --git a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/Bundle_cs.properties b/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/Bundle_cs.properties deleted file mode 100644 index 4c28fae006..0000000000 --- a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/Bundle_cs.properties +++ /dev/null @@ -1,17 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-30 21\:40+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=API jednoduch\u00e9ho otev\u0159en\u00ed - -OpenIDE-Module-Short-Description=API jednoduch\u00e9ho otev\u0159en\u00ed - -PositiveNumberValidator_NOT_POSITIVE={0} mus\u00ed b\u00fdt kladn\u00e9 \u010d\u00edslo - -BetweenZeroAndOneValidator_NOT_IN_RANGE={0} mus\u00ed b\u00fdt re\u00e1ln\u00e9 \u010d\u00edslo mezi 0 a 1 - -Multiple4NumberValidator_NOT_MULTIPLE={0} mus\u00ed b\u00fdt n\u00e1sobek \u010d\u00edsla 4 diff --git a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/Bundle_es.properties b/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/Bundle_es.properties deleted file mode 100644 index c2d77de56e..0000000000 --- a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/Bundle_es.properties +++ /dev/null @@ -1,17 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:56+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=API simple de validaci\u00f3n - -OpenIDE-Module-Short-Description=API simple de validaci\u00f3n - -PositiveNumberValidator_NOT_POSITIVE={0} debe ser un n\u00famero positivo - -BetweenZeroAndOneValidator_NOT_IN_RANGE={0} debe ser un n\u00famero real entre 0 y 1 - -Multiple4NumberValidator_NOT_MULTIPLE={0} deber ser un m\u00faltiplo de 4 diff --git a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/Bundle_fr.properties b/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/Bundle_fr.properties deleted file mode 100644 index 6fb282a7b3..0000000000 --- a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/Bundle_fr.properties +++ /dev/null @@ -1,17 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:56+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=Simple API de validation - -OpenIDE-Module-Short-Description=Simple API de validation - -PositiveNumberValidator_NOT_POSITIVE={0} soit \u00eatre un nombre positif - -BetweenZeroAndOneValidator_NOT_IN_RANGE={0} doit \u00eatre un nombre r\u00e9el compris ente 0 et 1 - -Multiple4NumberValidator_NOT_MULTIPLE={0} doit \u00eatre un multiple de 4 diff --git a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/Bundle_ja.properties b/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/Bundle_ja.properties deleted file mode 100644 index 6b253154dc..0000000000 --- a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/Bundle_ja.properties +++ /dev/null @@ -1,17 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-18 10\:28+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u30b7\u30f3\u30d7\u30eb\u691c\u8a3cAPI - -OpenIDE-Module-Short-Description=\u30b7\u30f3\u30d7\u30eb\u691c\u8a3cAPI - -PositiveNumberValidator_NOT_POSITIVE={0}\u306f\u6b63\u306e\u6570\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093 - -BetweenZeroAndOneValidator_NOT_IN_RANGE={0}\u306f0\u30681\u306e\u9593\u306e\u5b9f\u6570\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093 - -Multiple4NumberValidator_NOT_MULTIPLE={0} 4\u6570\u306e\u500d\u6570\u3067\u306a\u3051\u308c\u3070\u306a\u308a\u307e\u305b\u3093 diff --git a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/Bundle_pt_BR.properties b/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/Bundle_pt_BR.properties deleted file mode 100644 index 5ef5a78f6d..0000000000 --- a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/Bundle_pt_BR.properties +++ /dev/null @@ -1,17 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 15\:55+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=API simplificada de valida\u00e7\u00e3o - -OpenIDE-Module-Short-Description=API simplificada de valida\u00e7\u00e3o - -PositiveNumberValidator_NOT_POSITIVE={0} deve ser um n\u00famero positivo - -BetweenZeroAndOneValidator_NOT_IN_RANGE={0} deve ser um n\u00famero real entre 0 e 1 - -Multiple4NumberValidator_NOT_MULTIPLE={0} deve ser um m\u00faltiplo de 4 diff --git a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/Bundle_ru.properties b/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/Bundle_ru.properties deleted file mode 100644 index ad9859ce39..0000000000 --- a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/Bundle_ru.properties +++ /dev/null @@ -1,17 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-11-18 07\:19+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=API \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 - -OpenIDE-Module-Short-Description=API \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u0430\u043b\u0438\u0434\u0430\u0446\u0438\u0438 - -PositiveNumberValidator_NOT_POSITIVE=\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {0} \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043f\u043e\u043b\u043e\u0436\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c - -BetweenZeroAndOneValidator_NOT_IN_RANGE=\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {0} \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0432\u0435\u0449\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0447\u0438\u0441\u043b\u043e\u043c \u043e\u0442 0 \u0434\u043e 1 - -Multiple4NumberValidator_NOT_MULTIPLE=\u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 {0} \u0434\u043e\u043b\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u043a\u0440\u0430\u0442\u043d\u044b\u043c 4 diff --git a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/Bundle_zh_CN.properties b/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/Bundle_zh_CN.properties deleted file mode 100644 index 0ed4ad87e7..0000000000 --- a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/Bundle_zh_CN.properties +++ /dev/null @@ -1,16 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:05+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u7b80\u6613\u9a8c\u8bc1API - -OpenIDE-Module-Short-Description=\u7b80\u6613\u9a8c\u8bc1API - -PositiveNumberValidator_NOT_POSITIVE={0}\u5fc5\u987b\u662f\u6b63\u6570 - -BetweenZeroAndOneValidator_NOT_IN_RANGE={0}\u5fc5\u987b\u662f0\u52301\u4e4b\u95f4\u7684\u5b9e\u6570 - -Multiple4NumberValidator_NOT_MULTIPLE={0}\u5fc5\u987b\u662f\u591a\u4e2a4 diff --git a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/cs.po b/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/cs.po deleted file mode 100644 index 35f85f72c7..0000000000 --- a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/cs.po +++ /dev/null @@ -1,34 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-30 21:40+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API jednoduchΓ©ho otevΕ™enΓ­" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API jednoduchΓ©ho otevΕ™enΓ­" - -msgid "PositiveNumberValidator_NOT_POSITIVE" -msgstr "{0} musΓ­ bΓ½t kladnΓ© číslo" - -msgid "BetweenZeroAndOneValidator_NOT_IN_RANGE" -msgstr "{0} musΓ­ bΓ½t reΓ‘lnΓ© číslo mezi 0 a 1" - -msgid "Multiple4NumberValidator_NOT_MULTIPLE" -msgstr "{0} musΓ­ bΓ½t nΓ‘sobek čísla 4" diff --git a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/es.po b/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/es.po deleted file mode 100644 index 3c6d1bef3c..0000000000 --- a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/es.po +++ /dev/null @@ -1,34 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:56+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API simple de validaciΓ³n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API simple de validaciΓ³n" - -msgid "PositiveNumberValidator_NOT_POSITIVE" -msgstr "{0} debe ser un nΓΊmero positivo" - -msgid "BetweenZeroAndOneValidator_NOT_IN_RANGE" -msgstr "{0} debe ser un nΓΊmero real entre 0 y 1" - -msgid "Multiple4NumberValidator_NOT_MULTIPLE" -msgstr "{0} deber ser un mΓΊltiplo de 4" diff --git a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/fr.po b/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/fr.po deleted file mode 100644 index aa47cd0421..0000000000 --- a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/fr.po +++ /dev/null @@ -1,34 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:56+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Simple API de validation" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Simple API de validation" - -msgid "PositiveNumberValidator_NOT_POSITIVE" -msgstr "{0} soit Γͺtre un nombre positif" - -msgid "BetweenZeroAndOneValidator_NOT_IN_RANGE" -msgstr "{0} doit Γͺtre un nombre rΓ©el compris ente 0 et 1" - -msgid "Multiple4NumberValidator_NOT_MULTIPLE" -msgstr "{0} doit Γͺtre un multiple de 4" diff --git a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/ja.po b/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/ja.po deleted file mode 100644 index 9450f897ed..0000000000 --- a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/ja.po +++ /dev/null @@ -1,34 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-18 10:28+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "γ‚·γƒ³γƒ—γƒ«ζ€œθ¨ΌAPI" - -msgid "OpenIDE-Module-Short-Description" -msgstr "γ‚·γƒ³γƒ—γƒ«ζ€œθ¨ΌAPI" - -msgid "PositiveNumberValidator_NOT_POSITIVE" -msgstr "{0}は正γζ•°γ§γͺγ‘γ‚Œγ°γͺγ‚ŠγΎγ›γ‚“" - -msgid "BetweenZeroAndOneValidator_NOT_IN_RANGE" -msgstr "{0}は0と1γι–“γεŸζ•°γ§γͺγ‘γ‚Œγ°γͺγ‚ŠγΎγ›γ‚“" - -msgid "Multiple4NumberValidator_NOT_MULTIPLE" -msgstr "{0} 4ζ•°γε€ζ•°γ§γͺγ‘γ‚Œγ°γͺγ‚ŠγΎγ›γ‚“" diff --git a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/org-gephi-lib-validation.pot b/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/org-gephi-lib-validation.pot deleted file mode 100644 index 230e6ef866..0000000000 --- a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/org-gephi-lib-validation.pot +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Simple Validation API" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Simple Validation API" - -msgid "PositiveNumberValidator_NOT_POSITIVE" -msgstr "{0} must be a positive number" - -msgid "BetweenZeroAndOneValidator_NOT_IN_RANGE" -msgstr "{0} must be a real number between 0 and 1" - -msgid "Multiple4NumberValidator_NOT_MULTIPLE" -msgstr "{0} must be a multiple of 4 number" diff --git a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/pt_BR.po b/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/pt_BR.po deleted file mode 100644 index b497659618..0000000000 --- a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/pt_BR.po +++ /dev/null @@ -1,34 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 15:55+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API simplificada de validaΓ§Γ£o" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API simplificada de validaΓ§Γ£o" - -msgid "PositiveNumberValidator_NOT_POSITIVE" -msgstr "{0} deve ser um nΓΊmero positivo" - -msgid "BetweenZeroAndOneValidator_NOT_IN_RANGE" -msgstr "{0} deve ser um nΓΊmero real entre 0 e 1" - -msgid "Multiple4NumberValidator_NOT_MULTIPLE" -msgstr "{0} deve ser um mΓΊltiplo de 4" diff --git a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/ru.po b/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/ru.po deleted file mode 100644 index 32512e7488..0000000000 --- a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/ru.po +++ /dev/null @@ -1,34 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-11-18 07:19+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API простой Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ" - -msgid "OpenIDE-Module-Short-Description" -msgstr "API простой Π²Π°Π»ΠΈΠ΄Π°Ρ†ΠΈΠΈ" - -msgid "PositiveNumberValidator_NOT_POSITIVE" -msgstr "Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ {0} Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ числом" - -msgid "BetweenZeroAndOneValidator_NOT_IN_RANGE" -msgstr "Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ {0} Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ вСщСствСнным числом ΠΎΡ‚ 0 Π΄ΠΎ 1" - -msgid "Multiple4NumberValidator_NOT_MULTIPLE" -msgstr "Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ {0} Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ ΠΊΡ€Π°Ρ‚Π½Ρ‹ΠΌ 4" diff --git a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/zh_CN.po b/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/zh_CN.po deleted file mode 100644 index e966f177e9..0000000000 --- a/modules/ValidationAPI/src/main/resources/org/gephi/lib/validation/zh_CN.po +++ /dev/null @@ -1,33 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:05+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "η€ζ˜“ιͺŒθ―API" - -msgid "OpenIDE-Module-Short-Description" -msgstr "η€ζ˜“ιͺŒθ―API" - -msgid "PositiveNumberValidator_NOT_POSITIVE" -msgstr "{0}εΏ…ι‘»ζ˜―ζ­£ζ•°" - -msgid "BetweenZeroAndOneValidator_NOT_IN_RANGE" -msgstr "{0}εΏ…ι‘»ζ˜―0到1δΉ‹ι—΄ηš„εžζ•°" - -msgid "Multiple4NumberValidator_NOT_MULTIPLE" -msgstr "{0}εΏ…ι‘»ζ˜―ε€šδΈͺ4" diff --git a/modules/VisualizationAPI/pom.xml b/modules/VisualizationAPI/pom.xml index 2b1ffaddca..6b459d7803 100644 --- a/modules/VisualizationAPI/pom.xml +++ b/modules/VisualizationAPI/pom.xml @@ -1,25 +1,34 @@ - + 4.0.0 gephi-parent org.gephi - 0.9-SNAPSHOT - ../.. + 0.11.3-SNAPSHOT + ../.. org.gephi visualization-api - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm VisualizationAPI - + ${project.groupId} graph-api + + ${project.groupId} + project-api + + + ${project.groupId} + datalab-api + org.netbeans.api org-openide-util-lookup @@ -29,12 +38,11 @@ - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin org.gephi.visualization.api - org.gephi.visualization.impl org.gephi.visualization.spi diff --git a/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/EdgeColorMode.java b/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/EdgeColorMode.java new file mode 100644 index 0000000000..e12ab257c1 --- /dev/null +++ b/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/EdgeColorMode.java @@ -0,0 +1,70 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.visualization.api; + +/** + * Defines how edge colors are determined during rendering. + *

              + * Default value is SOURCE. + * + * @author Mathieu Bastian + */ +public enum EdgeColorMode { + + /** + * Use the edge's own color. + */ + SELF, + /** + * Use the source node's color. + */ + SOURCE, + /** + * Use the target node's color. + */ + TARGET, + /** + * Mix the source and target node colors. + */ + MIXED +} diff --git a/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/LabelColorMode.java b/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/LabelColorMode.java new file mode 100644 index 0000000000..d92149ce9e --- /dev/null +++ b/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/LabelColorMode.java @@ -0,0 +1,62 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.visualization.api; + +/** + * Defines how label colors are determined during rendering. + *

              + * Default value is SELF. + * + * @author Mathieu Bastian + */ +public enum LabelColorMode { + + /** + * Use a default label color independent of the associated object. + */ + SELF, + /** + * Use the color of the associated object (node or edge). + */ + OBJECT +} diff --git a/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/LabelSizeMode.java b/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/LabelSizeMode.java new file mode 100644 index 0000000000..6fb83e21be --- /dev/null +++ b/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/LabelSizeMode.java @@ -0,0 +1,62 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.visualization.api; + +/** + * Defines how label sizes are determined during rendering. + *

              + * Default value is ZOOM. + * + * @author Mathieu Bastian + */ +public enum LabelSizeMode { + + /** + * Label size remains constant in screen pixels regardless of zoom level. + */ + SCREEN, + /** + * Label size scales with the zoom level. + */ + ZOOM +} diff --git a/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/ScreenshotController.java b/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/ScreenshotController.java new file mode 100644 index 0000000000..f9dd6a97b3 --- /dev/null +++ b/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/ScreenshotController.java @@ -0,0 +1,44 @@ +package org.gephi.visualization.api; + +import java.io.File; + +/** + * Controller for taking screenshots of the visualization. + * + * @author Mathieu Bastian + */ +public interface ScreenshotController { + + /** + * Triggers the screenshot task in a background thread. This method returns immediately. + */ + void takeScreenshot(); + + /** + * Sets the scale factor for screenshots. + * + * @param scaleFactor the scale factor + */ + void setScaleFactor(int scaleFactor); + + /** + * Sets whether the screenshot background should be transparent. + * + * @param transparentBackground true if the background is transparent + */ + void setTransparentBackground(boolean transparentBackground); + + /** + * Sets whether the screenshot should be automatically saved to disk, or if a file chooser should be shown. + * + * @param autoSave true if the screenshot is auto-saved + */ + void setAutoSave(boolean autoSave); + + /** + * Sets the default directory for saving screenshots. + * + * @param directory the default directory + */ + void setDefaultDirectory(File directory); +} diff --git a/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/ScreenshotModel.java b/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/ScreenshotModel.java new file mode 100644 index 0000000000..1d07f026cd --- /dev/null +++ b/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/ScreenshotModel.java @@ -0,0 +1,52 @@ +package org.gephi.visualization.api; + +/** + * Screenshot-related settings. + * + * @author Mathieu Bastian + */ +public interface ScreenshotModel { + + /** + * Returns the visualization model associated with this screenshot model. + * + * @return the visualization model + */ + VisualizationModel getVisualizationModel(); + + /** + * Returns the scale factor for screenshots. + *

              + * Default is 1. A scale factor of 2 means the screenshot will have twice the size of the surface. + * + * @return the scale factor + */ + int getScaleFactor(); + + /** + * Returns whether the screenshot background should be transparent. + *

              + * Default is false. + * + * @return true if the background is transparent + */ + boolean isTransparentBackground(); + + /** + * Returns whether the screenshot should be automatically saved to disk, or if a file chooser should be shown. + *

              + * Default is false. + * + * @return true if the screenshot is auto-saved + */ + boolean isAutoSave(); + + /** + * Returns the default directory for saving screenshots. + *

              + * When auto-save is enabled, screenshots will be saved in this directory. + * + * @return the default directory path as a string + */ + String getDefaultDirectory(); +} diff --git a/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/VisualizationController.java b/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/VisualizationController.java index e87cb370c1..5ec983a689 100644 --- a/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/VisualizationController.java +++ b/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/VisualizationController.java @@ -39,23 +39,397 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.visualization.api; -import org.gephi.attribute.api.Column; +import java.awt.Color; +import java.awt.Font; +import org.gephi.graph.api.Column; import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Estimator; import org.gephi.graph.api.Node; +import org.gephi.project.api.Workspace; /** + * Main controller for visualization settings and operations. + *

              + * Provides access to the visualization model and methods to modify visualization settings. * * @author Mathieu Bastian */ public interface VisualizationController { - public void selectNodes(Node[] nodes); + /** + * Returns the visualization model for the current workspace. + * + * @return the current visualization model + */ + VisualizationModel getModel(); + + /** + * Returns the visualization model for the specified workspace. + * + * @param workspace the workspace + * @return the visualization model for the workspace + */ + VisualizationModel getModel(Workspace workspace); + + /** + * Returns the screenshot controller. + * + * @return the screenshot controller + */ + ScreenshotController getScreenshotController(); + + /** + * Sets the zoom level. + * + * @param zoom the zoom level + */ + void setZoom(float zoom); + + /** + * Sets whether neighbors are automatically selected when a node is selected. + * + * @param autoSelectNeighbors true to enable, false to disable + */ + void setAutoSelectNeighbors(boolean autoSelectNeighbors); + + /** + * Sets the background color of the visualization canvas. + * + * @param color the background color + */ + void setBackgroundColor(Color color); + + /** + * Sets the node size scaling factor. + * + * @param nodeScale the node scale + */ + void setNodeScale(float nodeScale); + + /** + * Sets whether edges are visible. + * + * @param showEdges true to show edges, false to hide them + */ + void setShowEdges(boolean showEdges); + + /** + * Sets the edge color mode. + * + * @param mode the edge color mode + */ + void setEdgeColorMode(EdgeColorMode mode); + + /** + * Sets whether selected edges use custom selection colors. + * + * @param edgeSelectionColor true to enable selection colors, false to disable + */ + void setEdgeSelectionColor(boolean edgeSelectionColor); + + /** + * Sets the color for selected incoming edges. + * + * @param edgeInSelectionColor the incoming edge selection color + */ + void setEdgeInSelectionColor(Color edgeInSelectionColor); + + /** + * Sets the color for selected outgoing edges. + * + * @param edgeOutSelectionColor the outgoing edge selection color + */ + void setEdgeOutSelectionColor(Color edgeOutSelectionColor); + + /** + * Sets the color for selected bidirectional edges. + * + * @param edgeBothSelectionColor the bidirectional edge selection color + */ + void setEdgeBothSelectionColor(Color edgeBothSelectionColor); + + /** + * Sets the edge thickness scaling factor. + * + * @param edgeScale the edge scale + */ + void setEdgeScale(float edgeScale); + + /** + * Sets whether edge weights affect edge thickness. + * + * @param useEdgeWeight true to enable, false to disable + */ + void setUseEdgeWeight(boolean useEdgeWeight); + + /** + * Sets whether edge weights are rescaled to fit within the specified min and max thickness. + * + * @param rescaleEdgeWeight true to enable, false to disable + */ + void setRescaleEdgeWeight(boolean rescaleEdgeWeight); + + /** + * Sets whether non-selected elements are automatically lightened. + * + * @param lightenNonSelectedAuto true to enable, false to disable + */ + void setLightenNonSelectedAuto(boolean lightenNonSelectedAuto); + + /** + * Sets whether non-selected edges are hidden. + * + * @param hideNonSelectedEdges true to hide, false to show + */ + void setHideNonSelectedEdges(boolean hideNonSelectedEdges); + + /** + * Sets the estimator used for dynamic edge weights. + * + * @param estimator the edge weight estimator + */ + void setEdgeWeightEstimator(Estimator estimator); + + /** + * Centers the view on the entire graph. + */ + void centerOnGraph(); + + /** + * Centers the view on the origin (0, 0) with default dimensions. + */ + void centerOnZero(); + + /** + * Centers the view on the specified rectangular area. + * + * @param x the x coordinate + * @param y the y coordinate + * @param width the width + * @param height the height + */ + void centerOn(float x, float y, float width, float height); + + /** + * Centers the view on the specified node. + * + * @param node the node to center on + */ + void centerOnNode(Node node); + + /** + * Centers the view on the specified edge. + * + * @param edge the edge to center on + */ + void centerOnEdge(Edge edge); + + /** + * Adds a property change listener. + * + * @param listener the listener to add + */ + void addPropertyChangeListener(VisualizationPropertyChangeListener listener); + + /** + * Removes a property change listener. + * + * @param listener the listener to remove + */ + void removePropertyChangeListener(VisualizationPropertyChangeListener listener); + + /** + * Adds a visualization event listener. + * + * @param listener the listener to add + */ + void addListener(VisualizationEventListener listener); + + /** + * Removes a visualization event listener. + * + * @param listener the listener to remove + */ + void removeListener(VisualizationEventListener listener); + + // Selection + + /** + * Disables all selection modes. + */ + void disableSelection(); + + /** + * Enables rectangle selection mode. + */ + void setRectangleSelection(); + + /** + * Enables direct mouse selection mode. + */ + void setDirectMouseSelection(); + + /** + * Enables custom selection mode. + */ + void setCustomSelection(); + + /** + * Enables node selection mode. + * + * @param singleNode true for single node selection, false for multiple + */ + void setNodeSelection(boolean singleNode); + + /** + * Sets the mouse selection diameter in pixels. + * + * @param diameter the selection diameter + */ + void setMouseSelectionDiameter(int diameter); + + /** + * Sets whether the mouse selection diameter scales with zoom. + * + * @param proportional true to enable zoom proportional, false otherwise + */ + void setMouseSelectionZoomProportional(boolean proportional); + + /** + * Resets the current selection. + */ + void resetSelection(); + + /** + * Selects the specified nodes. + * + * @param nodes the nodes to select or null to clear node selection + */ + void selectNodes(Node[] nodes); + + /** + * Selects the specified edges. + * + * @param edges the edges to select or null to clear edge selection + */ + void selectEdges(Edge[] edges); + + // Node Labels + + /** + * Sets whether node labels are visible. + * + * @param showNodeLabels true to show node labels, false to hide them + */ + void setShowNodeLabels(boolean showNodeLabels); + + /** + * Sets the font used for node labels. + * + * @param font the node label font + */ + void setNodeLabelFont(Font font); + + /** + * Sets the node label size scaling factor. + * + * @param scale the node label scale + */ + void setNodeLabelScale(float scale); + + /** + * Sets whether non-selected node labels are hidden. + * + * @param hideNonSelected true to hide, false to show + */ + void setHideNonSelectedNodeLabels(boolean hideNonSelected); + + /** + * Sets the node label color mode. + * + * @param mode the node label color mode + */ + void setNodeLabelColorMode(LabelColorMode mode); + + /** + * Sets the node label size mode. + * + * @param mode the node label size mode + */ + void setNodeLabelSizeMode(LabelSizeMode mode); + + /** + * Sets the columns used to generate node labels. + * + * @param columns the node label columns + */ + void setNodeLabelColumns(Column[] columns); + + /** + * Sets whether node labels are constrained to fit within node size. + * + * @param fitToNodeSize true to enable, false to disable + */ + void setNodeLabelFitToNodeSize(boolean fitToNodeSize); + + /** + * Sets whether node label overlap avoidance is enabled. + * + * @param avoidOverlap true to enable, false to disable + */ + void setAvoidNodeLabelOverlap(boolean avoidOverlap); + + // Edge Labels + + /** + * Sets whether edge labels are visible. + * + * @param showEdgeLabels true to show edge labels, false to hide them + */ + void setShowEdgeLabels(boolean showEdgeLabels); + + /** + * Sets the font used for edge labels. + * + * @param font the edge label font + */ + void setEdgeLabelFont(Font font); + + /** + * Sets the edge label size scaling factor. + * + * @param scale the edge label scale + */ + void setEdgeLabelScale(float scale); + + /** + * Sets the edge label color mode. + * + * @param mode the edge label color mode + */ + void setEdgeLabelColorMode(LabelColorMode mode); - public void selectEdges(Edge[] edges); + /** + * Sets the edge label size mode. + * + * @param mode the edge label size mode + */ + void setEdgeLabelSizeMode(LabelSizeMode mode); - public Column[] getEdgeTextColumns(); + /** + * Sets whether non-selected edge labels are hidden. + * + * @param hideNonSelected true to hide, false to show + */ + void setHideNonSelectedEdgeLabels(boolean hideNonSelected); - public Column[] getNodeTextColumns(); + /** + * Sets the columns used to generate edge labels. + * + * @param columns the edge label columns + */ + void setEdgeLabelColumns(Column[] columns); } diff --git a/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/VisualizationEvent.java b/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/VisualizationEvent.java new file mode 100644 index 0000000000..5a816f9b0d --- /dev/null +++ b/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/VisualizationEvent.java @@ -0,0 +1,131 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.visualization.api; + +/** + * Visualization event triggered by user interactions with the graph canvas. + * + * @author Mathieu Bastian + */ +public interface VisualizationEvent { + + /** + * Returns the type of this event. + * + * @return the event type + */ + Type getType(); + + /** + * Returns optional data associated with this event. + * + * @return the event data or null if none + */ + Object getData(); + + /** + * Defines the types of visualization events. + */ + enum Type { + /** + * User started dragging. + */ + START_DRAG, + /** + * User is dragging. + */ + DRAG, + /** + * User stopped dragging. + */ + STOP_DRAG, + /** + * Mouse moved over the canvas. + */ + MOUSE_MOVE, + /** + * Left mouse button was pressed. + */ + MOUSE_LEFT_PRESS, + /** + * Middle mouse button was pressed. + */ + MOUSE_MIDDLE_PRESS, + /** + * Right mouse button was pressed. + */ + MOUSE_RIGHT_PRESS, + /** + * Left mouse button was clicked. + */ + MOUSE_LEFT_CLICK, + /** + * Middle mouse button was clicked. + */ + MOUSE_MIDDLE_CLICK, + /** + * Right mouse button was clicked. + */ + MOUSE_RIGHT_CLICK, + /** + * Left mouse button is being held down. + */ + MOUSE_LEFT_PRESSING, + /** + * Mouse button was released. + */ + MOUSE_RELEASED, + /** + * Node was left-clicked. + */ + NODE_LEFT_CLICK, + /** + * Left mouse button was pressed on a node. + */ + NODE_LEFT_PRESS, + /** + * Left mouse button is being held down on a node. + */ + NODE_LEFT_PRESSING, + } +} diff --git a/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/VisualizationEventListener.java b/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/VisualizationEventListener.java new file mode 100644 index 0000000000..6a50ca1dce --- /dev/null +++ b/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/VisualizationEventListener.java @@ -0,0 +1,68 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.visualization.api; + +import java.util.EventListener; + +/** + * Listener for visualization events triggered by user interactions. + * + * @author Mathieu Bastian + */ +public interface VisualizationEventListener extends EventListener { + + /** + * Handles a visualization event. + * + * @param event the event to handle + * @return true if the event was handled, false otherwise + */ + boolean handleEvent(VisualizationEvent event); + + /** + * Returns the type of events this listener is interested in. + * + * @return the event type + */ + VisualizationEvent.Type getType(); +} diff --git a/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/VisualizationModel.java b/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/VisualizationModel.java new file mode 100644 index 0000000000..11cd14ee3e --- /dev/null +++ b/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/VisualizationModel.java @@ -0,0 +1,469 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.visualization.api; + +import java.awt.Color; +import java.awt.Font; +import java.util.Collection; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Estimator; +import org.gephi.graph.api.GraphView; +import org.gephi.graph.api.Node; +import org.gephi.project.spi.Model; + +/** + * Entry point to access and configure visualization settings. + *

              + * It also includes selection-related methods like {@link #getSelectedNodes()}. + *

              + * One model exists for each workspace. + * + * @author Mathieu Bastian + */ +public interface VisualizationModel extends Model { + + /** + * Returns the screenshot model. + * + * @return the screenshot model + */ + ScreenshotModel getScreenshotModel(); + + /** + * Returns the current zoom level. + *

              + * Default value is 0.3. + * + * @return the zoom level + */ + float getZoom(); + + /** + * Returns the current frames per second. + * + * @return the FPS + */ + int getFps(); + + /** + * Returns whether neighbors are automatically selected when a node is selected. + *

              + * Default value is true. + * + * @return true if auto-select neighbors is enabled, false otherwise + */ + boolean isAutoSelectNeighbors(); + + /** + * Returns the background color of the visualization canvas. + *

              + * Default value is Color.WHITE for light themes and Color.DARK_GRAY for dark themes. + * + * @return the background color + */ + Color getBackgroundColor(); + + /** + * Returns whether the background color is dark. + *

              + * Default value is false for light themes and true for dark themes. + *

              + * The value is determined based on the luminance of the background color. + * + * @return true if background is dark, false otherwise + */ + boolean isBackgroundColorDark(); + + /** + * Returns whether non-selected elements are automatically lightened. + *

              + * Default value is true. + * + * @return true if lightening is enabled, false otherwise + */ + boolean isLightenNonSelectedAuto(); + + /** + * Returns the node size scaling factor. + *

              + * Default value is 1.0. + * + * @return the node scale + */ + float getNodeScale(); + + // Edges + + /** + * Returns whether edges are visible. + *

              + * Default value is true. + * + * @return true if edges are shown, false otherwise + */ + boolean isShowEdges(); + + /** + * Returns the edge color mode. + *

              + * Default value is EdgeColorMode.SOURCE. + * + * @return the edge color mode + */ + EdgeColorMode getEdgeColorMode(); + + /** + * Returns whether non-selected edges are hidden. + *

              + * Default value is false. + * + * @return true if non-selected edges are hidden, false otherwise + */ + boolean isHideNonSelectedEdges(); + + /** + * Returns whether selected edges use custom selection colors. + *

              + * Default value is false. + * + * @return true if selection colors are enabled, false otherwise + */ + boolean isEdgeSelectionColor(); + + /** + * Returns the color for selected incoming edges. + *

              + * Default value is new Color(32, 95, 154, 255). + * + * @return the incoming edge selection color + */ + Color getEdgeInSelectionColor(); + + /** + * Returns the color for selected outgoing edges. + *

              + * Default value is new Color(196, 66, 79, 255). + * + * @return the outgoing edge selection color + */ + Color getEdgeOutSelectionColor(); + + /** + * Returns the color for selected bidirectional edges. + *

              + * Default value is new Color(248, 215, 83, 255). + * + * @return the bidirectional edge selection color + */ + Color getEdgeBothSelectionColor(); + + /** + * Returns the edge thickness scaling factor. + *

              + * Default value is 2.0. + * + * @return the edge scale + */ + float getEdgeScale(); + + /** + * Returns whether edge weights affect edge thickness. + *

              + * Default value is true. + * + * @return true if edge weight is used, false otherwise + */ + boolean isUseEdgeWeight(); + + /** + * Returns whether edge weight rescaling is enabled. + *

              + * Default value is true. + * + * @return true if edge weight rescaling is enabled, false otherwise + */ + boolean isRescaleEdgeWeight(); + + /** + * Returns the estimator used for dynamic edge weights. + * + * @return the edge weight estimator or null if not applicable + */ + Estimator getEdgeWeightEstimator(); + + // Selection + + /** + * Returns the currently selected nodes. + * + * @return the selected nodes + */ + Collection getSelectedNodes(); + + /** + * Returns the mouse selection diameter in pixels. + *

              + * Default value is 1. + * + * @return the selection diameter + */ + int getMouseSelectionDiameter(); + + /** + * Returns whether the mouse selection diameter scales with zoom. + *

              + * Default value is false. + * + * @return true if zoom proportional, false otherwise + */ + boolean isMouseSelectionZoomProportional(); + + /** + * Returns whether rectangle selection mode is active. + * + * @return true if rectangle selection is active, false otherwise + */ + boolean isRectangleSelection(); + + /** + * Returns whether direct mouse selection mode is active. + * + * @return true if direct mouse selection is active, false otherwise + */ + boolean isDirectMouseSelection(); + + /** + * Returns whether custom selection mode is active. + * + * @return true if custom selection is active, false otherwise + */ + boolean isCustomSelection(); + + /** + * Returns whether any selection mode is enabled. + * + * @return true if selection is enabled, false otherwise + */ + boolean isSelectionEnabled(); + + /** + * Returns whether node selection mode is active. + * + * @return true if node selection is active, false otherwise + */ + boolean isNodeSelection(); + + /** + * Returns whether single node selection mode is active. + * + * @return true if single node selection is active, false otherwise + */ + boolean isSingleNodeSelection(); + + // Node Labels + + /** + * Returns whether node labels are visible. + *

              + * Default value is false. + * + * @return true if node labels are shown, false otherwise + */ + boolean isShowNodeLabels(); + + /** + * Returns the node label color mode. + *

              + * Default value is LabelColorMode.SELF. + * + * @return the node label color mode + */ + LabelColorMode getNodeLabelColorMode(); + + /** + * Returns the node label size mode. + *

              + * Default value is LabelSizeMode.ZOOM. + * + * @return the node label size mode + */ + LabelSizeMode getNodeLabelSizeMode(); + + /** + * Returns the font used for node labels. + *

              + * Default value is Arial Bold 32. + * + * @return the node label font + */ + Font getNodeLabelFont(); + + /** + * Returns whether node labels are constrained to fit within node size. + *

              + * Default value is false. + * + * @return true if fit to node size is enabled, false otherwise + */ + boolean isNodeLabelFitToNodeSize(); + + /** + * Returns the node label size scaling factor. + *

              + * Default value is 0.5. + * + * @return the node label scale + */ + float getNodeLabelScale(); + + /** + * Returns whether non-selected node labels are hidden. + *

              + * Default value is false. + * + * @return true if non-selected labels are hidden, false otherwise + */ + boolean isHideNonSelectedNodeLabels(); + + /** + * Returns whether node label overlap avoidance is enabled. + *

              + * Default value is true. + * + * @return true if overlap avoidance is enabled, false otherwise + */ + boolean isAvoidNodeLabelOverlap(); + + /** + * Returns the columns used to generate node labels. + *

              + * Default value is the node label column. + * + * @return the node label columns + */ + Column[] getNodeLabelColumns(); + + /** + * Returns the label for the given node, based on {@link #getNodeLabelColumns()}. + * + * @param node the node + * @param view the graph view + * @return the node label + */ + String getNodeLabel(Node node, GraphView view); + + /** + * Returns the label for the given edge, based on {@link #getEdgeLabelColumns()}. + * + * @param edge the edge + * @param view the graph view + * @return the edge label + */ + String getEdgeLabel(Edge edge, GraphView view); + + // Edge Labels + + /** + * Returns whether edge labels are visible. + *

              + * Default value is false. + * + * @return true if edge labels are shown, false otherwise + */ + boolean isShowEdgeLabels(); + + /** + * Returns the edge label color mode. + *

              + * Default value is LabelColorMode.SELF. + * + * @return the edge label color mode + */ + LabelColorMode getEdgeLabelColorMode(); + + /** + * Returns the edge label size mode. + *

              + * Default value is LabelSizeMode.ZOOM. + * + * @return the edge label size mode + */ + LabelSizeMode getEdgeLabelSizeMode(); + + /** + * Returns the font used for edge labels. + *

              + * Default value is Arial Bold 32. + * + * @return the edge label font + */ + Font getEdgeLabelFont(); + + /** + * Returns the edge label size scaling factor. + *

              + * Default value is 0.5. + * + * @return the edge label scale + */ + float getEdgeLabelScale(); + + /** + * Returns whether non-selected edge labels are hidden. + *

              + * Default value is false. + * + * @return true if non-selected labels are hidden, false otherwise + */ + boolean isHideNonSelectedEdgeLabels(); + + /** + * Returns the columns used to generate edge labels. + *

              + * Default value is the edge label column. + * + * @return the edge label columns + */ + Column[] getEdgeLabelColumns(); +} \ No newline at end of file diff --git a/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/VisualizationPropertyChangeListener.java b/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/VisualizationPropertyChangeListener.java new file mode 100644 index 0000000000..2614228ccd --- /dev/null +++ b/modules/VisualizationAPI/src/main/java/org/gephi/visualization/api/VisualizationPropertyChangeListener.java @@ -0,0 +1,61 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.visualization.api; + +import java.beans.PropertyChangeEvent; + +/** + * Listener for visualization property changes in the model. + * + * @author Mathieu Bastian + */ +public interface VisualizationPropertyChangeListener extends java.util.EventListener { + + /** + * Called when a visualization property is changed. + * + * @param model the visualization model + * @param evt the property change event + */ + void propertyChange(VisualizationModel model, PropertyChangeEvent evt); +} diff --git a/modules/VisualizationAPI/src/main/java/org/gephi/visualization/spi/GraphContextMenuItem.java b/modules/VisualizationAPI/src/main/java/org/gephi/visualization/spi/GraphContextMenuItem.java index 86b1f955ad..1e0c64b849 100644 --- a/modules/VisualizationAPI/src/main/java/org/gephi/visualization/spi/GraphContextMenuItem.java +++ b/modules/VisualizationAPI/src/main/java/org/gephi/visualization/spi/GraphContextMenuItem.java @@ -1,4 +1,3 @@ - /* Copyright 2008-2010 Gephi Authors : Eduardo Ramos @@ -40,70 +39,55 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.visualization.spi; -import javax.swing.Icon; +import org.gephi.datalab.spi.ContextMenuItemManipulator; import org.gephi.graph.api.Graph; import org.gephi.graph.api.Node; /** - *

              Please note that the methods offered in this service are the same as - * Data Laboratory nodes manipulators. It is possible to reuse actions - * implementations by adding both - * ServiceProvider annotations.

              - *

              Interface from providing graph context menu items as services.

              - *

              All context menu items are able to:

              + * Please note that the methods offered in this service are the same as Data + * Laboratory nodes manipulators. It is possible to reuse actions + * implementations by adding both ServiceProvider annotations. + *

              + * Interface from providing graph context menu items as services. + *

              + * All context menu items are able to: *

                *
              • Execute an action
              • *
              • Provide a name, type and order of appearance (position in group of its * type)
              • - *
              • Indicate wether they have to be available (appear in the context menu) or - * not
              • - *
              • Indicate wether they have to be executable (enabled in the context menu) + *
              • Indicate whether they have to be available (appear in the context menu) + * or not
              • + *
              • Indicate whether they have to be executable (enabled in the context menu) * or not
              • *
              • Provide and icon or not
              • *
              - *

              Used for different manipulators such as NodesManipulator, EdgesManipulator - * and GeneralActionsManipulator.

              - *

              The only methods that are called before setting up an item with the data - * are getSubItems, getType and getPosition. + *

              + * Used for different manipulators such as NodesManipulator, EdgesManipulator + * and GeneralActionsManipulator. + *

              + * The only methods that are called before setting up an item with the data are + * getSubItems, getType and getPosition. * This way, the other methods behaviour can depend on the data that has been - * setup before

              - *

              getSubItems will be called before and after setup. Take care when the - * nodes are null!

              - * + * setup before + *

              + * getSubItems will be called before and after setup. Take care when the + * nodes are null! + *

              * To provide a context menu item, a class has to implement this interface and - * have a - * @ServiceProvider annotation - * @author Eduardo Ramos + * have a @ServiceProvider annotation + * + * @author Eduardo Ramos */ -public interface GraphContextMenuItem { +public interface GraphContextMenuItem extends ContextMenuItemManipulator { /** * Prepare nodes for this item. Note that nodes could contain 0 nodes. * - * @param graph Hierarchical graph + * @param graph graph * @param nodes All selected nodes */ public void setup(Graph graph, Node[] nodes); - - public String getDescription(); - -// public ManipulatorUI getUI(); - public boolean isAvailable(); - -// public ContextMenuItemManipulator[] getSubItems(); - public Integer getMnemonicKey(); - - public void execute(); - - public String getName(); - - public boolean canExecute(); - - public int getType(); - - public int getPosition(); - - public Icon getIcon(); } diff --git a/modules/VisualizationAPI/src/main/nbm/manifest.mf b/modules/VisualizationAPI/src/main/nbm/manifest.mf index 81832d19ed..899350ab05 100644 --- a/modules/VisualizationAPI/src/main/nbm/manifest.mf +++ b/modules/VisualizationAPI/src/main/nbm/manifest.mf @@ -1,4 +1,6 @@ Manifest-Version: 1.0 OpenIDE-Module-Localizing-Bundle: org/gephi/visualization/api/Bundle.properties AutoUpdate-Essential-Module: true -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi Core +OpenIDE-Module-Name: Visualization API diff --git a/modules/VisualizationAPI/src/main/nbm/module.xml b/modules/VisualizationAPI/src/main/nbm/module.xml deleted file mode 100644 index df173de0e4..0000000000 --- a/modules/VisualizationAPI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle.properties b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle.properties index 0bcc3c94e7..289f941e9a 100644 --- a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle.properties +++ b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle.properties @@ -1,5 +1,2 @@ -OpenIDE-Module-Display-Category=Gephi Core -OpenIDE-Module-Long-Description=\ - The API allows access to graph visualization settings and control features -OpenIDE-Module-Name=Visualization API +OpenIDE-Module-Long-Description=The API allows access to graph visualization settings and control features OpenIDE-Module-Short-Description=Provides graph visualization control features diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_ar.properties b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_ca.properties b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_ca.properties new file mode 100644 index 0000000000..1f2c67e491 --- /dev/null +++ b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_ca.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API d'accιs a la configuraciσ i control de la visualitzaciσ del graf +OpenIDE-Module-Short-Description=Proporciona eines de control de visualitzaciσ del graf diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_cs.properties b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_cs.properties index c46b534718..a0bde7036d 100644 --- a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_cs.properties +++ b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_cs.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-30 21\:20+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Long-Description=API V\u00e1m umo\u017e\u0148uje vstoupit do nastaven\u00ed vizualizace grafu a kntorln\u00edch funkc\u00ed - -OpenIDE-Module-Short-Description=Poskytuje kontroln\u00ed funkce vizualizace grafu +OpenIDE-Module-Long-Description=API Vαm umo\u017e\u0148uje vstoupit do nastavenν vizualizace grafu a kntorlnνch funkcν +OpenIDE-Module-Short-Description=Poskytuje kontrolnν funkce vizualizace grafu diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_de.properties b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_de.properties new file mode 100644 index 0000000000..02a2bff511 --- /dev/null +++ b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_de.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Die API ermφglicht den Zugriff Einstellungen und Steuerungs-Funktionen der Graphen-Visualisierung +OpenIDE-Module-Short-Description=Stellt Steuerungsfunktionen der Graphen-Visualisierung bereit diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_es.properties b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_es.properties index b96ba9a61b..cb904a23ed 100644 --- a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_es.properties +++ b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_es.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:56+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Long-Description=API que permite acceso a los par\u00e1metros y control de la visualizaci\u00f3n del grafo. - -OpenIDE-Module-Short-Description=Proporciona caracter\u00edsticas de control de la visualizaci\u00f3n del grafo. +OpenIDE-Module-Long-Description=La API permite acceder a las funciones de configuraci\u00F3n y control de la visualizaci\u00F3n del grafo +OpenIDE-Module-Short-Description=Proporciona funciones de control de visualizaci\u00F3n del grafo diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_fr.properties b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_fr.properties index b9366bf857..ad2a389acc 100644 --- a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_fr.properties +++ b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_fr.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:56+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=L'API rend accessible les param\u00e8tres de visualisation du graphe et les fonctionnalit\u00e9s de contr\u00f4le. - -OpenIDE-Module-Short-Description=Fournit les fonctionnalit\u00e9s de contr\u00f4le sur la visualisation du graphe +OpenIDE-Module-Long-Description=L'API rend accessible les paramθtres de visualisation du graphe et les fonctionnalitιs de contrτle. +OpenIDE-Module-Short-Description=Fournit les fonctionnalitιs de contrτle sur la visualisation du graphe diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_he.properties b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_he.properties new file mode 100644 index 0000000000..e47d2b88f2 --- /dev/null +++ b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_he.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=The API allows access to graph visualization settings and control features +OpenIDE-Module-Short-Description=Provides graph visualization control features diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_hu.properties b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_hu.properties new file mode 100644 index 0000000000..3ef11b744b --- /dev/null +++ b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_hu.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Short-Description=Grafikon\u00E1br\u00E1zol\u00E1s-vez\u00E9rl\u0151 funkci\u00F3kat biztos\u00EDt +OpenIDE-Module-Long-Description=Az API lehet\u0151v\u00E9 teszi a hozz\u00E1f\u00E9r\u00E9st a grafikon megjelen\u00EDt\u00E9si be\u00E1ll\u00EDt\u00E1saihoz \u00E9s a vez\u00E9rl\u00E9si funkci\u00F3khoz diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_it.properties b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_it.properties new file mode 100644 index 0000000000..6a112aafb0 --- /dev/null +++ b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_it.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=L\u2019API permette di accedere alle impostazioni di visualizzazione del grafo e alle funzioni di controllo +OpenIDE-Module-Short-Description=Provides graph visualization control features diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_ja.properties b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_ja.properties index 9577f71463..c6bb6a3c2d 100644 --- a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_ja.properties +++ b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_ja.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-18 10\:36+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=API\u306f\u30b0\u30e9\u30d5\u306e\u53ef\u8996\u5316\u306e\u8a2d\u5b9a\u3068\u5236\u5fa1\u306e\u6a5f\u80fd\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059 - -OpenIDE-Module-Short-Description=\u30b0\u30e9\u30d5\u306e\u53ef\u8996\u5316\u5236\u5fa1\u6a5f\u80fd\u3092\u63d0\u4f9b\u3057\u307e\u3059 +OpenIDE-Module-Long-Description=API\u306f\u30b0\u30e9\u30d5\u306e\u53ef\u8996\u5316\u306e\u8a2d\u5b9a\u3068\u5236\u5fa1\u306e\u6a5f\u80fd\u306b\u30a2\u30af\u30bb\u30b9\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u307e\u3059 +OpenIDE-Module-Short-Description=\u30b0\u30e9\u30d5\u306e\u53ef\u8996\u5316\u5236\u5fa1\u6a5f\u80fd\u3092\u63d0\u4f9b\u3057\u307e\u3059 diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_ko.properties b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_ko.properties new file mode 100644 index 0000000000..df1c895da8 --- /dev/null +++ b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_ko.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Long-Description=API\uB97C \uC0AC\uC6A9\uD558\uBA74 \uADF8\uB798\uD504 \uC2DC\uAC01\uD654 \uC124\uC815 \uBC0F \uC81C\uC5B4 \uAE30\uB2A5\uC5D0 \uC561\uC138\uC2A4\uD560 \uC218 \uC788\uC2B5\uB2C8\uB2E4 +OpenIDE-Module-Short-Description=\uADF8\uB798\uD504 \uC2DC\uAC01\uD654 \uC124\uC815 \uBC0F \uC81C\uC5B4 \uAE30\uB2A5 \uC81C\uACF5 diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_nl.properties b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_nl.properties new file mode 100644 index 0000000000..e47d2b88f2 --- /dev/null +++ b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_nl.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=The API allows access to graph visualization settings and control features +OpenIDE-Module-Short-Description=Provides graph visualization control features diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_pt_BR.properties b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_pt_BR.properties index 406e5a79c0..4e6d4512a9 100644 --- a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_pt_BR.properties +++ b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_pt_BR.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 15\:53+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Long-Description=A API permite o acesso \u00e0s configura\u00e7\u00f5es de visualiza\u00e7\u00e3o gr\u00e1fica e recursos de controle - -OpenIDE-Module-Short-Description=Fornece recursos de controle de visualiza\u00e7\u00e3o gr\u00e1fica +OpenIDE-Module-Long-Description=A API permite o acesso ΰs configuraηυes de visualizaηγo grαfica e recursos de controle +OpenIDE-Module-Short-Description=Fornece recursos de controle de visualizaηγo grαfica diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_ro.properties b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_ro.properties new file mode 100644 index 0000000000..01135d33b2 --- /dev/null +++ b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_ro.properties @@ -0,0 +1,4 @@ + + +OpenIDE-Module-Long-Description=API-ul permite accesul la set\u0103rile de vizualizare \u0219i func\u021Biile de control ale grafului +OpenIDE-Module-Short-Description=Ofer\u0103 func\u021Bii de control \u0219i vizualizare a grafului diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_ru.properties b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_ru.properties index 32be80077e..be38e111a0 100644 --- a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_ru.properties +++ b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_ru.properties @@ -1,11 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-28 08\:20+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Long-Description=\u0414\u0430\u043d\u043d\u043e\u0435 API \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0433\u0440\u0430\u0444\u0430 - -OpenIDE-Module-Short-Description=\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0433\u0440\u0430\u0444\u0430 +OpenIDE-Module-Long-Description=\u0414\u0430\u043d\u043d\u043e\u0435 API \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c \u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0433\u0440\u0430\u0444\u0430 +OpenIDE-Module-Short-Description=\u041f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0433\u0440\u0430\u0444\u0430 diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_th.properties b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_tr.properties b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_tr.properties new file mode 100644 index 0000000000..d464b2c4a3 --- /dev/null +++ b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_tr.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Bu API, grafik g\u00F6rselle\u015Ftirme ayarlar\u0131na ve kontrol \u00F6zelliklerine eri\u015Fim sa\u011Flar +OpenIDE-Module-Short-Description=Provides graph visualization control features diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_uk.properties b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_uk.properties new file mode 100644 index 0000000000..c01cdb9f12 --- /dev/null +++ b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_uk.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=API \u043D\u0430\u0434\u0430\u0454 \u0434\u043E\u0441\u0442\u0443\u043F \u0434\u043E \u043D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u043D\u044C \u0432\u0456\u0437\u0443\u0430\u043B\u0456\u0437\u0430\u0446\u0456\u0457 \u0433\u0440\u0430\u0444\u0456\u043A\u0456\u0432 \u0456 \u0444\u0443\u043D\u043A\u0446\u0456\u0439 \u043A\u0435\u0440\u0443\u0432\u0430\u043D\u043D\u044F +OpenIDE-Module-Short-Description=\u041D\u0430\u0434\u0430\u0454 \u0444\u0443\u043D\u043A\u0446\u0456\u0457 \u043A\u0435\u0440\u0443\u0432\u0430\u043D\u043D\u044F \u0432\u0456\u0437\u0443\u0430\u043B\u0456\u0437\u0430\u0446\u0456\u0454\u044E \u0433\u0440\u0430\u0444\u0456\u043A\u0456\u0432 diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_zh_CN.properties b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_zh_CN.properties index db75ed0bfc..b6a7fe9bb4 100644 --- a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_zh_CN.properties +++ b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_zh_CN.properties @@ -1,10 +1,2 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:05+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Long-Description=\u5e94\u7528\u7a0b\u5e8f\u63a5\u53e3\u5141\u8bb8\u8bbf\u95ee\u56fe\u53ef\u89c6\u5316\u8bbe\u5b9a\u548c\u63a7\u5236\u7279\u6027 - -OpenIDE-Module-Short-Description=\u63d0\u4f9b\u56fe\u53ef\u89c6\u5316\u63a7\u5236\u7279\u6027 +OpenIDE-Module-Long-Description=\u5e94\u7528\u7a0b\u5e8f\u63a5\u53e3\u5141\u8bb8\u8bbf\u95ee\u56fe\u53ef\u89c6\u5316\u8bbe\u5b9a\u548c\u63a7\u5236\u7279\u6027 +OpenIDE-Module-Short-Description=\u63d0\u4f9b\u56fe\u53ef\u89c6\u5316\u63a7\u5236\u7279\u6027 diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_zh_TW.properties b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_zh_TW.properties new file mode 100644 index 0000000000..e47d2b88f2 --- /dev/null +++ b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/Bundle_zh_TW.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=The API allows access to graph visualization settings and control features +OpenIDE-Module-Short-Description=Provides graph visualization control features diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/cs.po b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/cs.po deleted file mode 100644 index b08c6ccb1e..0000000000 --- a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/cs.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-30 21:20+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API VΓ‘m umožňuje vstoupit do nastavenΓ­ vizualizace grafu a kntorlnΓ­ch funkcΓ­" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Poskytuje kontrolnΓ­ funkce vizualizace grafu" diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/es.po b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/es.po deleted file mode 100644 index 2ff087544c..0000000000 --- a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/es.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:56+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "API que permite acceso a los parΓ‘metros y control de la visualizaciΓ³n del grafo." - -msgid "OpenIDE-Module-Short-Description" -msgstr "Proporciona caracterΓ­sticas de control de la visualizaciΓ³n del grafo." diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/fr.po b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/fr.po deleted file mode 100644 index b200d17f77..0000000000 --- a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/fr.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:56+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "L'API rend accessible les paramΓ¨tres de visualisation du graphe et les fonctionnalitΓ©s de contrΓ΄le." - -msgid "OpenIDE-Module-Short-Description" -msgstr "Fournit les fonctionnalitΓ©s de contrΓ΄le sur la visualisation du graphe" diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/ja.po b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/ja.po deleted file mode 100644 index a1ea0d9e0d..0000000000 --- a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-18 10:36+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "APIはグラフγε―θ¦–εŒ–γθ¨­εšγ¨εˆΆεΎ‘γζ©Ÿθƒ½γ«γ‚’γ‚―γ‚»γ‚Ήγ™γ‚‹γ“γ¨γŒγ§γγΎγ™" - -msgid "OpenIDE-Module-Short-Description" -msgstr "グラフγε―θ¦–εŒ–εˆΆεΎ‘ζ©Ÿθƒ½γ‚’ζδΎ›γ—γΎγ™" diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/org-gephi-visualization-api.pot b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/org-gephi-visualization-api.pot deleted file mode 100644 index 2ea2bb9fe8..0000000000 --- a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/org-gephi-visualization-api.pot +++ /dev/null @@ -1,23 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "" -"The API allows access to graph visualization settings and control features" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Provides graph visualization control features" diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/overview.html b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/overview.html new file mode 100644 index 0000000000..40d8af9f04 --- /dev/null +++ b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/overview.html @@ -0,0 +1,19 @@ + + + + Visualization API + + +

              + Visualization API/SPI controls the main (Overview) graph window. +

              +

              + The VisualizationModel gives access to all the settings. The VisualizationController + allows to manipulate the model, as well as element selection and camera. +

              +

              + For now, only context menus are available as extension point, via the org.gephi.visualization.spi + package. +

              + + diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/pt_BR.po b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/pt_BR.po deleted file mode 100644 index fa9adbfd48..0000000000 --- a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/pt_BR.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 15:53+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "A API permite o acesso Γ s configuraΓ§Γ΅es de visualizaΓ§Γ£o grΓ‘fica e recursos de controle" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Fornece recursos de controle de visualizaΓ§Γ£o grΓ‘fica" diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/ru.po b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/ru.po deleted file mode 100644 index c85c88933f..0000000000 --- a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/ru.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-28 08:20+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Π”Π°Π½Π½ΠΎΠ΅ API прСдоставляСт доступ ΠΊ настройкам ΠΈ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π³Ρ€Π°Ρ„Π°" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ΠŸΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΠ΅Ρ‚ доступ ΠΊ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π³Ρ€Π°Ρ„Π°" diff --git a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/zh_CN.po b/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/zh_CN.po deleted file mode 100644 index 1b0588d294..0000000000 --- a/modules/VisualizationAPI/src/main/resources/org/gephi/visualization/api/zh_CN.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:05+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Long-Description" -msgstr "应用程序ζŽ₯口允θΈθΏι—ε›Ύε―θ§†εŒ–θΎεšε’ŒζŽ§εˆΆη‰Ήζ€§" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζδΎ›ε›Ύε―θ§†εŒ–ζŽ§εˆΆη‰Ήζ€§" diff --git a/modules/VisualizationEngine/pom.xml b/modules/VisualizationEngine/pom.xml new file mode 100644 index 0000000000..ffb67f1b36 --- /dev/null +++ b/modules/VisualizationEngine/pom.xml @@ -0,0 +1,190 @@ + + + 4.0.0 + + gephi-parent + org.gephi + 0.11.3-SNAPSHOT + ../.. + + + org.gephi + visualization-engine + 0.11.3-SNAPSHOT + nbm + + VisualizationEngine + + + + 2.6.0 + 1.10.8 + + + + + + ${project.groupId} + graph-api + + + + + org.joml + joml + ${joml.version} + + + + + org.jogamp.jogl + jogl-all + ${jogl.version} + + + org.jogamp.jogl + jogl-all + natives-linux-amd64 + ${jogl.version} + + + org.jogamp.jogl + jogl-all + natives-linux-aarch64 + ${jogl.version} + + + org.jogamp.jogl + jogl-all + natives-macosx-universal + ${jogl.version} + + + org.jogamp.jogl + jogl-all + natives-windows-amd64 + ${jogl.version} + + + org.jogamp.gluegen + gluegen-rt + ${jogl.version} + + + org.jogamp.gluegen + gluegen-rt + natives-linux-amd64 + ${jogl.version} + + + org.jogamp.gluegen + gluegen-rt + natives-linux-aarch64 + ${jogl.version} + + + org.jogamp.gluegen + gluegen-rt + natives-macosx-universal + ${jogl.version} + + + org.jogamp.gluegen + gluegen-rt + natives-windows-amd64 + ${jogl.version} + + + + + + + + ${project.build.directory}/generated-resources + + + + + + + com.igormaznitsa + jcp + + true + \r\n + + vert + frag + + true + false + false + src/main/resources + target/generated-resources + UTF-8 + UTF-8 + false + false + true + false + true + true + false + + + + preprocess-shaders-without-selection + generate-resources + + preprocess + + + + false + + + + + preprocess-shaders-with-selection-unselected + generate-resources + + preprocess + + + + true + false + + + + + preprocess-shaders-with-selection-selected + generate-resources + + preprocess + + + + true + true + + + + + + + + org.apache.netbeans.utilities + nbm-maven-plugin + + + org.gephi.viz.engine.* + com.jogamp.* + org.joml.* + + + + + + diff --git a/modules/VisualizationEngine/src/main/java/com/jogamp/newt/awt/NewtCanvasAWT.java b/modules/VisualizationEngine/src/main/java/com/jogamp/newt/awt/NewtCanvasAWT.java new file mode 100644 index 0000000000..47e04a2afe --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/com/jogamp/newt/awt/NewtCanvasAWT.java @@ -0,0 +1,1306 @@ +/** + * Copyright 2010 JogAmp Community. All rights reserved. + *

              + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + *

              + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + *

              + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + *

              + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *

              + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +// PATCHED by Gephi: This file overrides the JOGL 2.6.0 NewtCanvasAWT to apply a partial fix +// for Bug 1478 (macOS AWT/NEWT/AppKit deadlock during attach). +// See: https://jogamp.org/bugzilla/show_bug.cgi?id=1478 +// +// Changes: added runOnNewtEDTAndWaitOnAWTEDT() and modified attachNewtChild() to use AWT +// SecondaryLoop on macOS, preventing the EDT from blocking while waiting for the NEWT EDT. +// +// Note: detachNewtChild() intentionally keeps the original synchronous behavior. Using +// SecondaryLoop there causes re-entrant layout events during removeNotify() that trigger +// attachNewtChild() inside an in-progress detach, leading to nested SecondaryLoops that hang. +// The original detach path does not deadlock because setVisible(false)/reparentWindow(null) +// on the NEWT EDT does not require native window creation via OSXUtil.RunOnMainThreadLong. +// +// Remove this file once JOGL is upgraded to a version that includes the fix. + + +package com.jogamp.newt.awt; + +import com.jogamp.common.ExceptionUtils; +import com.jogamp.common.os.Platform; +import com.jogamp.common.os.Platform.OSType; +import com.jogamp.common.util.awt.AWTEDTExecutor; +import com.jogamp.nativewindow.CapabilitiesImmutable; +import com.jogamp.nativewindow.NativeSurface; +import com.jogamp.nativewindow.NativeWindow; +import com.jogamp.nativewindow.NativeWindowHolder; +import com.jogamp.nativewindow.OffscreenLayerOption; +import com.jogamp.nativewindow.WindowClosingProtocol; +import com.jogamp.nativewindow.awt.AWTGraphicsConfiguration; +import com.jogamp.nativewindow.awt.AWTPrintLifecycle; +import com.jogamp.nativewindow.awt.AWTWindowClosingProtocol; +import com.jogamp.nativewindow.awt.JAWTWindow; +import com.jogamp.newt.Display; +import com.jogamp.newt.Window; +import com.jogamp.newt.event.KeyEvent; +import com.jogamp.newt.event.KeyListener; +import com.jogamp.newt.event.WindowAdapter; +import com.jogamp.newt.event.WindowEvent; +import com.jogamp.newt.event.WindowListener; +import com.jogamp.newt.event.awt.AWTAdapter; +import com.jogamp.newt.event.awt.AWTKeyAdapter; +import com.jogamp.newt.event.awt.AWTMouseAdapter; +import com.jogamp.opengl.GLAnimatorControl; +import com.jogamp.opengl.GLAutoDrawable; +import com.jogamp.opengl.GLCapabilities; +import com.jogamp.opengl.GLCapabilitiesImmutable; +import com.jogamp.opengl.GLDrawable; +import com.jogamp.opengl.GLDrawableFactory; +import com.jogamp.opengl.GLException; +import com.jogamp.opengl.GLOffscreenAutoDrawable; +import com.jogamp.opengl.util.GLDrawableUtil; +import com.jogamp.opengl.util.TileRenderer; +import java.awt.AWTKeyStroke; +import java.awt.Component; +import java.awt.EventQueue; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.GraphicsConfiguration; +import java.awt.GraphicsDevice; +import java.awt.KeyboardFocusManager; +import java.awt.SecondaryLoop; +import java.awt.Toolkit; +import java.awt.geom.NoninvertibleTransformException; +import java.beans.Beans; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.Set; +import java.util.concurrent.atomic.AtomicReference; +import javax.swing.MenuSelectionManager; +import jogamp.nativewindow.awt.AWTMisc; +import jogamp.nativewindow.jawt.JAWTUtil; +import jogamp.newt.Debug; +import jogamp.newt.WindowImpl; +import jogamp.newt.awt.NewtFactoryAWT; +import jogamp.newt.awt.event.AWTParentWindowAdapter; +import jogamp.newt.driver.DriverClearFocus; +import jogamp.opengl.awt.AWTTilePainter; + +/** + * AWT {@link java.awt.Canvas Canvas} containing a NEWT {@link Window} using native parenting. + * + *

              Offscreen Layer Remarks
              + *

              + * {@link OffscreenLayerOption#setShallUseOffscreenLayer(boolean) setShallUseOffscreenLayer(true)} + * maybe called to use an offscreen drawable (FBO or PBuffer) allowing + * the underlying JAWT mechanism to composite the image, if supported. + */ +@SuppressWarnings("serial") +public class NewtCanvasAWT extends java.awt.Canvas + implements NativeWindowHolder, WindowClosingProtocol, OffscreenLayerOption, AWTPrintLifecycle { + public static final boolean DEBUG = Debug.debug("Window"); + + private static JAWTUtil.BackgroundEraseControl backgroundEraseControl = new JAWTUtil.BackgroundEraseControl(); + + private final Object sync = new Object(); + private volatile JAWTWindow jawtWindow = null; + // the JAWTWindow presentation of this AWT Canvas, bound to the 'drawable' lifecycle + private boolean isApplet = false; + private boolean shallUseOffscreenLayer = false; + private Window newtChild = null; + private boolean newtChildAttached = false; + private boolean isOnscreen = true; + private WindowClosingMode newtChildCloseOp = WindowClosingMode.DISPOSE_ON_CLOSE; + private final AWTParentWindowAdapter awtWinAdapter; + private final AWTAdapter awtMouseAdapter; + private final AWTAdapter awtKeyAdapter; + + private volatile AWTGraphicsConfiguration awtConfig; + + /** + * Mitigates Bug 910 (IcedTea-Web), i.e. crash via removeNotify() invoked before Applet.destroy(). + */ + private boolean destroyJAWTPending = false; + /** + * Mitigates Bug 910 (IcedTea-Web), i.e. crash via removeNotify() invoked before Applet.destroy(). + */ + private boolean skipJAWTDestroy = false; + + /** + * Safeguard for AWTWindowClosingProtocol and 'removeNotify()' on other thread than AWT-EDT. + */ + private volatile boolean componentAdded = false; + + private final AWTWindowClosingProtocol awtWindowClosingProtocol = + new AWTWindowClosingProtocol(this, new Runnable() { + @Override + public void run() { + if (componentAdded) { + NewtCanvasAWT.this.destroyImpl(false /* removeNotify */, true /* windowClosing */); + } + } + }, new Runnable() { + @Override + public void run() { + if (componentAdded && newtChild != null) { + newtChild.sendWindowEvent(WindowEvent.EVENT_WINDOW_DESTROY_NOTIFY); + } + } + }); + + /** + * Instantiates a NewtCanvas without a NEWT child.
              + */ + public NewtCanvasAWT() { + super(); + awtMouseAdapter = new AWTMouseAdapter().addTo(this); + awtKeyAdapter = new AWTKeyAdapter().addTo(this); + awtWinAdapter = (AWTParentWindowAdapter) new AWTParentWindowAdapter().addTo(this); + awtWinAdapter.removeWindowClosingFrom(this); // we utilize AWTWindowClosingProtocol triggered destruction! + } + + /** + * Instantiates a NewtCanvas without a NEWT child.
              + */ + public NewtCanvasAWT(final GraphicsConfiguration gc) { + super(gc); + awtMouseAdapter = new AWTMouseAdapter().addTo(this); + awtKeyAdapter = new AWTKeyAdapter().addTo(this); + awtWinAdapter = (AWTParentWindowAdapter) new AWTParentWindowAdapter().addTo(this); + awtWinAdapter.removeWindowClosingFrom(this); // we utilize AWTWindowClosingProtocol triggered destruction! + } + + /** + * Instantiates a NewtCanvas with a NEWT child. + */ + public NewtCanvasAWT(final Window child) { + super(); + awtMouseAdapter = new AWTMouseAdapter().addTo(this); + awtKeyAdapter = new AWTKeyAdapter().addTo(this); + awtWinAdapter = (AWTParentWindowAdapter) new AWTParentWindowAdapter().addTo(this); + awtWinAdapter.removeWindowClosingFrom(this); // we utilize AWTWindowClosingProtocol triggered destruction! + setNEWTChild(child); + } + + /** + * Instantiates a NewtCanvas with a NEWT child. + */ + public NewtCanvasAWT(final GraphicsConfiguration gc, final Window child) { + super(gc); + awtMouseAdapter = new AWTMouseAdapter().addTo(this); + awtKeyAdapter = new AWTKeyAdapter().addTo(this); + awtWinAdapter = (AWTParentWindowAdapter) new AWTParentWindowAdapter().addTo(this); + awtWinAdapter.removeWindowClosingFrom(this); // we utilize AWTWindowClosingProtocol triggered destruction! + setNEWTChild(child); + } + + @Override + public void setShallUseOffscreenLayer(final boolean v) { + shallUseOffscreenLayer = v; + } + + @Override + public final boolean getShallUseOffscreenLayer() { + return shallUseOffscreenLayer; + } + + @Override + public final boolean isOffscreenLayerSurfaceEnabled() { + final JAWTWindow w = jawtWindow; + return null != w && w.isOffscreenLayerSurfaceEnabled(); + } + + /** + * Returns true if the AWT component is parented to an {@link java.applet.Applet}, + * otherwise false. This information is valid only after {@link #addNotify()} is issued. + */ + public final boolean isApplet() { + return isApplet; + } + + private final boolean isParent() { + final Window nw = newtChild; + return null != nw && jawtWindow == nw.getParent(); + } + + private final boolean isFullscreen() { + final Window nw = newtChild; + return null != nw && nw.isFullscreen(); + } + + class FocusAction implements Window.FocusRunnable { + @Override + public boolean run() { + final boolean isParent = isParent(); + final boolean isFullscreen = isFullscreen(); + if (DEBUG) { + System.err.println( + "NewtCanvasAWT.FocusAction: " + Display.getThreadName() + ", isOnscreen " + isOnscreen + + ", hasFocus " + hasFocus() + ", isParent " + isParent + ", isFS " + isFullscreen); + } + if (isParent && !isFullscreen) { // must be parent of newtChild _and_ newtChild not fullscreen + if (isOnscreen) { + // Remove the AWT focus in favor of the native NEWT focus + AWTEDTExecutor.singleton.invoke(false, awtClearGlobalFocusOwner); + } else if (!hasFocus()) { + // In offscreen mode we require the focus! + // Newt-EDT -> AWT-EDT may freeze Window's native peer requestFocus. + NewtCanvasAWT.super.requestFocus(); + } + } + return false; // NEWT shall proceed requesting the native focus + } + } + + private final FocusAction focusAction = new FocusAction(); + + private static class ClearFocusOwner implements Runnable { + @Override + public void run() { + KeyboardFocusManager.getCurrentKeyboardFocusManager().clearGlobalFocusOwner(); + } + } + + private static final Runnable awtClearGlobalFocusOwner = new ClearFocusOwner(); + + /** + * Must run on AWT-EDT non-blocking, since it invokes tasks on AWT-EDT w/ waiting otherwise. + */ + private final Runnable awtClearSelectedMenuPath = new Runnable() { + @Override + public void run() { + MenuSelectionManager.defaultManager().clearSelectedPath(); + } + }; + private final WindowListener clearAWTMenusOnNewtFocus = new WindowAdapter() { + @Override + public void windowResized(final WindowEvent e) { + updateLayoutSize(); + } + + @Override + public void windowGainedFocus(final WindowEvent arg0) { + if (isParent() && !isFullscreen()) { + AWTEDTExecutor.singleton.invoke(false, awtClearSelectedMenuPath); + } + } + }; + + class FocusTraversalKeyListener implements KeyListener { + @Override + public void keyPressed(final KeyEvent e) { + if (isParent() && !isFullscreen()) { + handleKey(e, false); + } + } + + @Override + public void keyReleased(final KeyEvent e) { + if (isParent() && !isFullscreen()) { + handleKey(e, true); + } + } + + void handleKey(final KeyEvent evt, final boolean onRelease) { + if (null == keyboardFocusManager) { + throw new InternalError("XXX"); + } + final AWTKeyStroke ks = AWTKeyStroke.getAWTKeyStroke(evt.getKeyCode(), evt.getModifiers(), onRelease); + boolean suppress = false; + if (null != ks) { + final Set fwdKeys = + keyboardFocusManager.getDefaultFocusTraversalKeys(KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS); + final Set bwdKeys = + keyboardFocusManager.getDefaultFocusTraversalKeys(KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS); + if (fwdKeys.contains(ks)) { + final Component nextFocus = AWTMisc.getNextFocus(NewtCanvasAWT.this, true /* forward */); + if (DEBUG) { + System.err.println("NewtCanvasAWT.focusKey (fwd): " + ks + ", current focusOwner " + + keyboardFocusManager.getFocusOwner() + ", hasFocus: " + hasFocus() + ", nextFocus " + + nextFocus); + } + // Newt-EDT -> AWT-EDT may freeze Window's native peer requestFocus. + nextFocus.requestFocus(); + suppress = true; + } else if (bwdKeys.contains(ks)) { + final Component prevFocus = AWTMisc.getNextFocus(NewtCanvasAWT.this, false /* forward */); + if (DEBUG) { + System.err.println("NewtCanvasAWT.focusKey (bwd): " + ks + ", current focusOwner " + + keyboardFocusManager.getFocusOwner() + ", hasFocus: " + hasFocus() + ", prevFocus " + + prevFocus); + } + // Newt-EDT -> AWT-EDT may freeze Window's native peer requestFocus. + prevFocus.requestFocus(); + suppress = true; + } + } + if (suppress) { + evt.setConsumed(true); + } + if (DEBUG) { + System.err.println("NewtCanvasAWT.focusKey: XXX: " + ks); + } + } + } + + private final FocusTraversalKeyListener newtFocusTraversalKeyListener = new FocusTraversalKeyListener(); + + class FocusPropertyChangeListener implements PropertyChangeListener { + @Override + public void propertyChange(final PropertyChangeEvent evt) { + final Object oldF = evt.getOldValue(); + final Object newF = evt.getNewValue(); + final boolean isParent = isParent(); + final boolean isFullscreen = isFullscreen(); + if (DEBUG) { + System.err.println( + "NewtCanvasAWT.FocusProperty: " + evt.getPropertyName() + ", src " + evt.getSource() + ", " + oldF + + " -> " + newF + ", isParent " + isParent + ", isFS " + isFullscreen); + } + if (isParent && !isFullscreen) { + if (newF == NewtCanvasAWT.this) { + if (DEBUG) { + System.err.println("NewtCanvasAWT.FocusProperty: AWT focus -> NEWT focus traversal"); + } + requestFocusNEWTChild(); + } else if (oldF == NewtCanvasAWT.this && newF == null) { + // focus traversal to NEWT - NOP + if (DEBUG) { + System.err.println("NewtCanvasAWT.FocusProperty: NEWT focus"); + } + } else if (null != newF && newF != NewtCanvasAWT.this) { + // focus traversal to another AWT component + if (DEBUG) { + System.err.println("NewtCanvasAWT.FocusProperty: lost focus - clear focus"); + } + if (newtChild.getDelegatedWindow() instanceof DriverClearFocus) { + ((DriverClearFocus) newtChild.getDelegatedWindow()).clearFocus(); + } + } + } + } + } + + private final FocusPropertyChangeListener focusPropertyChangeListener = new FocusPropertyChangeListener(); + private volatile KeyboardFocusManager keyboardFocusManager = null; + + private final void requestFocusNEWTChild() { + if (null != newtChild) { + newtChild.setFocusAction(null); + if (isOnscreen) { + AWTEDTExecutor.singleton.invoke(false, awtClearGlobalFocusOwner); + } + newtChild.requestFocus(); + newtChild.setFocusAction(focusAction); + } + } + + /** + * Sets a new NEWT child, provoking reparenting. + *

              + * A previously detached newChild will be released to top-level status + * and made invisible. + *

              + *

              + * Note: When switching NEWT child's, detaching the previous first via setNEWTChild(null) + * produced much cleaner visual results. + *

              + * + * @return the previous attached newt child. + */ + public Window setNEWTChild(final Window newChild) { + synchronized (sync) { + final Window prevChild = newtChild; + if (DEBUG) { + System.err.println("NewtCanvasAWT.setNEWTChild.0: win " + newtWinHandleToHexString(prevChild) + " -> " + + newtWinHandleToHexString(newChild)); + } + final java.awt.Container cont = AWTMisc.getContainer(this); + // remove old one + if (null != newtChild) { + detachNewtChild(cont); + newtChild = null; + } + // add new one, reparent only if ready + newtChild = newChild; + + updateLayoutSize(); + // will be done later at paint/display/..: attachNewtChild(cont); + + return prevChild; + } + } + + private final void updateLayoutSize() { + final Window w = newtChild; + if (null != w) { + // use NEWT child's size for min/pref size! + final java.awt.Dimension minSize = new java.awt.Dimension(w.getWidth(), w.getHeight()); + setMinimumSize(minSize); + setPreferredSize(minSize); + } + } + + /** + * @return the current NEWT child + */ + public Window getNEWTChild() { + return newtChild; + } + + /** + * {@inheritDoc} + * + * @return this AWT Canvas {@link NativeWindow} representation, may be null in case {@link #removeNotify()} has been called, + * or {@link #addNotify()} hasn't been called yet. + */ + @Override + public NativeWindow getNativeWindow() { + return jawtWindow; + } + + /** + * {@inheritDoc} + * + * @return this AWT Canvas {@link NativeSurface} representation, may be null in case {@link #removeNotify()} has been called, + * or {@link #addNotify()} hasn't been called yet. + */ + @Override + public NativeSurface getNativeSurface() { + return jawtWindow; + } + + @Override + public WindowClosingMode getDefaultCloseOperation() { + return awtWindowClosingProtocol.getDefaultCloseOperation(); + } + + @Override + public WindowClosingMode setDefaultCloseOperation(final WindowClosingMode op) { + return awtWindowClosingProtocol.setDefaultCloseOperation(op); + } + + /** + * Mitigates Bug 910 (IcedTea-Web), i.e. crash via removeNotify() invoked before Applet.destroy(). + *

              + * skipJAWTDestroy defaults to false. + * Due to above IcedTea-Web issue the Applet code needs to avoid JAWT destruction before + * Applet.destroy() is reached by setting skipJAWTDestroy to true. + * Afterwards the value should be reset to false and {@link #destroy()} needs to be called, + * which finally will perform the pending JAWT destruction. + *

              + */ + public final void setSkipJAWTDestroy(final boolean v) { + skipJAWTDestroy = v; + } + + /** + * See {@link #setSkipJAWTDestroy(boolean)}. + */ + public final boolean getSkipJAWTDestroy() { + return skipJAWTDestroy; + } + + @SuppressWarnings("removal") + private final void determineIfApplet() { + isApplet = false; + Component c = this; + while (!isApplet && null != c) { + isApplet = c instanceof java.applet.Applet; + c = c.getParent(); + } + } + + private void setAWTGraphicsConfiguration(final AWTGraphicsConfiguration config) { + // Cache awtConfig + awtConfig = config; + if (null != jawtWindow) { + // Notify JAWTWindow .. + jawtWindow.setAWTGraphicsConfiguration(config); + } + } + + /** + * {@inheritDoc} + *

              + * Overridden to choose a {@link GraphicsConfiguration} from a parent container's + * {@link GraphicsDevice}. + *

              + *

              + * Method also intercepts {@link GraphicsConfiguration} changes regarding to + * its capabilities and its {@link GraphicsDevice}. This may happen in case + * the display changes its configuration or the component is moved to another screen. + *

              + */ + @Override + public GraphicsConfiguration getGraphicsConfiguration() { + /** + * parentGC will be null unless: + * - A native peer has assigned it. This means we have a native + * peer, and are already committed to a graphics configuration. + * - This canvas has been added to a component hierarchy and has + * an ancestor with a non-null GC, but the native peer has not + * yet been created. This means we can still choose the GC on + * all platforms since the peer hasn't been created. + */ + final GraphicsConfiguration parentGC = super.getGraphicsConfiguration(); + + if (Beans.isDesignTime()) { + return parentGC; + } + final GraphicsConfiguration oldGC = null != awtConfig ? awtConfig.getAWTGraphicsConfiguration() : null; + + if (null != parentGC && null != oldGC && !oldGC.equals(parentGC)) { + // Previous oldGC != parentGC of native peer + + if (!oldGC.getDevice().getIDstring().equals(parentGC.getDevice().getIDstring())) { + // Previous oldGC's GraphicsDevice != parentGC's GraphicsDevice of native peer + + /** + * Here we select a GraphicsConfiguration on the alternate device. + * In case the new configuration differs (-> !equalCaps), + * we might need a reconfiguration, + */ + final AWTGraphicsConfiguration newConfig = AWTGraphicsConfiguration.create(parentGC, + awtConfig.getChosenCapabilities(), + awtConfig.getRequestedCapabilities()); + final GraphicsConfiguration newGC = newConfig.getAWTGraphicsConfiguration(); + final boolean equalCaps = newConfig.getChosenCapabilities().equals(awtConfig.getChosenCapabilities()); + if (DEBUG) { + System.err.println(getThreadName() + ": getGraphicsConfiguration() Info: Changed GC and GD"); + System.err.println("Created Config (n): Old GC " + oldGC); + System.err.println("Created Config (n): Old GD " + oldGC.getDevice().getIDstring()); + System.err.println("Created Config (n): Parent GC " + parentGC); + System.err.println("Created Config (n): Parent GD " + parentGC.getDevice().getIDstring()); + System.err.println("Created Config (n): New GC " + newGC); + System.err.println("Created Config (n): Old CF " + awtConfig); + System.err.println("Created Config (n): New CF " + newConfig); + System.err.println("Created Config (n): EQUALS CAPS " + equalCaps); + // Thread.dumpStack(); + } + if (null != newGC) { + setAWTGraphicsConfiguration(newConfig); + /** + * Return the newGC, which covers the desired capabilities and is compatible + * with the available GC's of its devices. + */ + if (DEBUG) { + System.err.println( + getThreadName() + ": Info: getGraphicsConfiguration - end.01: newGC " + newGC); + } + return newGC; + } else { + if (DEBUG) { + System.err.println( + getThreadName() + ": Info: getGraphicsConfiguration - end.00: oldGC " + oldGC); + } + } + } + /** + * If a new GC was _not_ found/defined above, + * method returns oldGC as selected in the constructor or first addNotify(). + * This may cause an exception in Component.checkGD when adding to a + * container, and is the desired behavior. + */ + return oldGC; + } else if (null == parentGC) { + /** + * The parentGC is null, which means we have no native peer, and are not + * part of a (realized) component hierarchy. So we return the + * desired visual that was selected in the constructor (possibly + * null). + */ + return oldGC; + } else { + /** + * Otherwise we have not explicitly selected a GC in the constructor, so + * just return what Canvas would have. + */ + return parentGC; + } + } + + private static String getThreadName() { + return Thread.currentThread().getName(); + } + + @Override + public void addNotify() { + if (Beans.isDesignTime()) { + super.addNotify(); + } else { + /** + * 'super.addNotify()' determines the GraphicsConfiguration, + * while calling this class's overridden 'getGraphicsConfiguration()' method + * after which it creates the native peer. + * Hence we have to set the 'awtConfig' before since it's GraphicsConfiguration + * is being used in getGraphicsConfiguration(). + * This code order also allows recreation, ie re-adding the GLCanvas. + */ + // before native peer is valid: X11 + if (OSType.WINDOWS != Platform.getOSType()) { + backgroundEraseControl.disable(this); + } + + // Query AWT GraphicsDevice from parent tree, default + final GraphicsConfiguration gc = super.getGraphicsConfiguration(); + if (null == gc) { + throw new GLException("Error: NULL AWT GraphicsConfiguration"); + } + final CapabilitiesImmutable capsReq = null != newtChild ? newtChild.getRequestedCapabilities() : null; + final AWTGraphicsConfiguration awtConfig = AWTGraphicsConfiguration.create(gc, null, capsReq); + if (null == awtConfig) { + throw new GLException("Error: NULL AWTGraphicsConfiguration"); + } + setAWTGraphicsConfiguration(awtConfig); + + // creates the native peer + super.addNotify(); + + // after native peer is valid: Windows + if (OSType.WINDOWS == Platform.getOSType()) { + backgroundEraseControl.disable(this); + } + + synchronized (sync) { + determineIfApplet(); + if (DEBUG) { + System.err.println("NewtCanvasAWT.addNotify.0 - isApplet " + isApplet + ", addedOnAWTEDT " + + EventQueue.isDispatchThread() + " @ " + currentThreadName()); + ExceptionUtils.dumpStack(System.err); + } + jawtWindow = NewtFactoryAWT.getNativeWindow(NewtCanvasAWT.this, awtConfig); + jawtWindow.setShallUseOffscreenLayer(shallUseOffscreenLayer); + // enforce initial lock on AWT-EDT, allowing acquisition of pixel-scale + jawtWindow.lockSurface(); + try { + // attachNewtChild sets surface scale! + } finally { + jawtWindow.unlockSurface(); + } + awtWindowClosingProtocol.addClosingListener(); + componentAdded = true; // Bug 910 + if (DEBUG) { + // if ( isShowing() == false ) -> Container was not visible yet. + // if ( isShowing() == true ) -> Container is already visible. + System.err.println("NewtCanvasAWT.addNotify.X: twin " + newtWinHandleToHexString(newtChild) + + ", comp " + this + ", visible " + isVisible() + ", showing " + isShowing() + + ", displayable " + isDisplayable() + ", cont " + AWTMisc.getContainer(this)); + } + } + } + } + + /** + * Propagates AWT pixelScale to NEWT + */ + private final boolean updatePixelScale(final GraphicsConfiguration gc, final boolean force) { + if (jawtWindow.updatePixelScale(gc, false) || jawtWindow.hasPixelScaleChanged() || force) { + jawtWindow.hasPixelScaleChanged(); // clear + final float[] hasPixelScale = jawtWindow.getCurrentSurfaceScale(new float[2]); + final Window cWin = newtChild; + final Window dWin = cWin.getDelegatedWindow(); + if (dWin instanceof WindowImpl) { + ((WindowImpl) dWin).setSurfaceScale(hasPixelScale); + } + return true; + } + return false; + } + + @Override + public void removeNotify() { + if (Beans.isDesignTime()) { + super.removeNotify(); + } else { + if (DEBUG) { + System.err.println("NewtCanvasAWT.removeNotify.0 - isApplet " + isApplet + " @ " + currentThreadName()); + ExceptionUtils.dumpStack(System.err); + } + componentAdded = false; // Bug 910 + awtWindowClosingProtocol.removeClosingListener(); + destroyImpl(true /* removeNotify */, false /* windowClosing */); + super.removeNotify(); + if (DEBUG) { + System.err.println("NewtCanvasAWT.removeNotify.X @ " + currentThreadName()); + } + } + } + + /** + * Destroys this resource: + *
                + *
              • Make the NEWT Child invisible
              • + *
              • Disconnects the NEWT Child from this Canvas NativeWindow, reparent to NULL
              • + *
              • Issues destroy() on the NEWT Child
              • + *
              • Remove reference to the NEWT Child
              • + *
              + * + * @see Window#destroy() + */ + public final void destroy() { + if (DEBUG) { + System.err.println("NewtCanvasAWT.destroy() @ " + currentThreadName()); + ExceptionUtils.dumpStack(System.err); + } + AWTEDTExecutor.singleton.invoke(true, new Runnable() { + @Override + public void run() { + destroyImpl(false /* removeNotify */, false /* windowClosing */); + } + }); + } + + private final void destroyImpl(final boolean removeNotify, final boolean windowClosing) { + synchronized (sync) { + final java.awt.Container cont = AWTMisc.getContainer(this); + if (DEBUG) { + System.err.println("NewtCanvasAWT.destroyImpl @ " + currentThreadName()); + System.err.println("NewtCanvasAWT.destroyImpl.0 - isApplet " + isApplet + ", isOnAWTEDT " + + EventQueue.isDispatchThread() + ", skipJAWTDestroy " + skipJAWTDestroy + + "; removeNotify " + removeNotify + ", windowClosing " + windowClosing + ", destroyJAWTPending " + + destroyJAWTPending + + ", hasJAWT " + (null != jawtWindow) + ", hasNEWT " + (null != newtChild) + + "): nw " + newtWinHandleToHexString(newtChild) + ", from " + cont); + } + if (null != newtChild) { + detachNewtChild(cont); + + if (!removeNotify) { + final Window cWin = newtChild; + final Window dWin = cWin.getDelegatedWindow(); + newtChild = null; + if (windowClosing && dWin instanceof WindowImpl) { + ((WindowImpl) dWin).windowDestroyNotify(true); + } else { + cWin.destroy(); + } + } + } + if ((destroyJAWTPending || removeNotify || windowClosing) && null != jawtWindow) { + if (skipJAWTDestroy) { + // Bug 910 - See setSkipJAWTDestroy(boolean) + destroyJAWTPending = true; + } else { + NewtFactoryAWT.destroyNativeWindow(jawtWindow); + jawtWindow = null; + awtConfig = null; + destroyJAWTPending = false; + } + } + } + } + + @Override + public void paint(final Graphics g) { + synchronized (sync) { + if (validateComponent(true) && !printActive) { + newtChild.windowRepaint(0, 0, getWidth(), getHeight()); + } + } + } + + @Override + public void update(final Graphics g) { + paint(g); + } + + @SuppressWarnings("deprecation") + @Override + public void reshape(final int x, final int y, final int width, final int height) { + synchronized (getTreeLock()) { // super.reshape(..) claims tree lock, so we do extend it's lock over reshape + synchronized (sync) { + super.reshape(x, y, width, height); + if (DEBUG) { + System.err.println("NewtCanvasAWT.reshape: " + x + "/" + y + " " + width + "x" + height); + } + if (validateComponent(true)) { + if (!printActive && updatePixelScale(getGraphicsConfiguration(), false /* force */)) { + // NOP + } else { + // newtChild.setSize(width, height); + } + } + } + } + } + + private volatile boolean printActive = false; + private GLAnimatorControl printAnimator = null; + private GLAutoDrawable printGLAD = null; + private AWTTilePainter printAWTTiles = null; + + private final GLAutoDrawable getGLAD() { + if (null != newtChild && newtChild instanceof GLAutoDrawable) { + return (GLAutoDrawable) newtChild; + } + return null; + } + + @Override + public void setupPrint(final double scaleMatX, final double scaleMatY, final int numSamples, final int tileWidth, + final int tileHeight) { + printActive = true; + final int componentCount = isOpaque() ? 3 : 4; + final TileRenderer printRenderer = new TileRenderer(); + printAWTTiles = + new AWTTilePainter(printRenderer, componentCount, scaleMatX, scaleMatY, numSamples, tileWidth, tileHeight, + DEBUG); + AWTEDTExecutor.singleton.invoke(getTreeLock(), true /* allowOnNonEDT */, true /* wait */, setupPrintOnEDT); + } + + private final Runnable setupPrintOnEDT = new Runnable() { + @Override + public void run() { + synchronized (sync) { + if (!validateComponent(true)) { + if (DEBUG) { + System.err.println(currentThreadName() + + ": Info: NewtCanvasAWT setupPrint - skipped GL render, drawable not valid yet"); + } + printActive = false; + return; // not yet available .. + } + if (!isVisible()) { + if (DEBUG) { + System.err.println(currentThreadName() + + ": Info: NewtCanvasAWT setupPrint - skipped GL render, canvas not visible"); + } + printActive = false; + return; // not yet available .. + } + final GLAutoDrawable glad = getGLAD(); + if (null == glad) { + if (DEBUG) { + System.err.println("AWT print.setup exit, newtChild not a GLAutoDrawable: " + newtChild); + } + printActive = false; + return; + } + printAnimator = glad.getAnimator(); + if (null != printAnimator) { + printAnimator.remove(glad); + } + printGLAD = glad; // _not_ default, shall be replaced by offscreen GLAD + final GLCapabilitiesImmutable gladCaps = glad.getChosenGLCapabilities(); + final int printNumSamples = printAWTTiles.getNumSamples(gladCaps); + GLDrawable printDrawable = printGLAD.getDelegatedDrawable(); + final boolean reqNewGLADSamples = printNumSamples != gladCaps.getNumSamples(); + final boolean reqNewGLADSize = printAWTTiles.customTileWidth != -1 && + printAWTTiles.customTileWidth != printDrawable.getSurfaceWidth() || + printAWTTiles.customTileHeight != -1 && + printAWTTiles.customTileHeight != printDrawable.getSurfaceHeight(); + final boolean reqNewGLADOnscrn = gladCaps.isOnscreen(); + + final GLCapabilities newGLADCaps = (GLCapabilities) gladCaps.cloneMutable(); + newGLADCaps.setDoubleBuffered(false); + newGLADCaps.setOnscreen(false); + if (printNumSamples != newGLADCaps.getNumSamples()) { + newGLADCaps.setSampleBuffers(0 < printNumSamples); + newGLADCaps.setNumSamples(printNumSamples); + } + final boolean reqNewGLADSafe = + GLDrawableUtil.isSwapGLContextSafe(glad.getRequestedGLCapabilities(), gladCaps, newGLADCaps); + + final boolean reqNewGLAD = (reqNewGLADOnscrn || reqNewGLADSamples || reqNewGLADSize) && reqNewGLADSafe; + + if (DEBUG) { + System.err.println( + "AWT print.setup: reqNewGLAD " + reqNewGLAD + "[ onscreen " + reqNewGLADOnscrn + ", samples " + + reqNewGLADSamples + ", size " + reqNewGLADSize + ", safe " + reqNewGLADSafe + "], " + + ", drawableSize " + printDrawable.getSurfaceWidth() + "x" + + printDrawable.getSurfaceHeight() + + ", customTileSize " + printAWTTiles.customTileWidth + "x" + printAWTTiles.customTileHeight + + ", scaleMat " + printAWTTiles.scaleMatX + " x " + printAWTTiles.scaleMatY + + ", numSamples " + printAWTTiles.customNumSamples + " -> " + printNumSamples + + ", printAnimator " + printAnimator); + } + if (reqNewGLAD) { + final GLDrawableFactory factory = GLDrawableFactory.getFactory(newGLADCaps.getGLProfile()); + GLOffscreenAutoDrawable offGLAD = null; + try { + offGLAD = factory.createOffscreenAutoDrawable(null, newGLADCaps, null, + printAWTTiles.customTileWidth != -1 ? printAWTTiles.customTileWidth : + DEFAULT_PRINT_TILE_SIZE, + printAWTTiles.customTileHeight != -1 ? printAWTTiles.customTileHeight : + DEFAULT_PRINT_TILE_SIZE); + } catch (final GLException gle) { + if (DEBUG) { + System.err.println("Caught: " + gle.getMessage()); + gle.printStackTrace(); + } + } + if (null != offGLAD) { + printGLAD = offGLAD; + GLDrawableUtil.swapGLContextAndAllGLEventListener(glad, printGLAD); + printDrawable = printGLAD.getDelegatedDrawable(); + } + } + printAWTTiles.setGLOrientation(printGLAD.isGLOriented(), printGLAD.isGLOriented()); + printAWTTiles.renderer.setTileSize(printDrawable.getSurfaceWidth(), printDrawable.getSurfaceHeight(), + 0); + printAWTTiles.renderer.attachAutoDrawable(printGLAD); + if (DEBUG) { + System.err.println("AWT print.setup " + printAWTTiles); + System.err.println("AWT print.setup AA " + printNumSamples + ", " + newGLADCaps); + System.err.println("AWT print.setup printGLAD: " + printGLAD.getSurfaceWidth() + "x" + + printGLAD.getSurfaceHeight() + ", " + printGLAD); + System.err.println("AWT print.setup printDraw: " + printDrawable.getSurfaceWidth() + "x" + + printDrawable.getSurfaceHeight() + ", " + printDrawable); + } + } + } + }; + + @Override + public void releasePrint() { + if (!printActive || null == printGLAD) { + throw new IllegalStateException("setupPrint() not called"); + } + // sendReshape = false; // clear reshape flag + AWTEDTExecutor.singleton.invoke(getTreeLock(), true /* allowOnNonEDT */, true /* wait */, releasePrintOnEDT); + newtChild.sendWindowEvent(WindowEvent.EVENT_WINDOW_RESIZED); // trigger a resize/relayout to listener + } + + private final Runnable releasePrintOnEDT = new Runnable() { + @Override + public void run() { + synchronized (sync) { + if (DEBUG) { + System.err.println("AWT print.release " + printAWTTiles); + } + final GLAutoDrawable glad = getGLAD(); + printAWTTiles.dispose(); + printAWTTiles = null; + if (printGLAD != glad) { + GLDrawableUtil.swapGLContextAndAllGLEventListener(printGLAD, glad); + printGLAD.destroy(); + } + printGLAD = null; + if (null != printAnimator) { + printAnimator.add(glad); + printAnimator = null; + } + printActive = false; + } + } + }; + + @Override + public void print(final Graphics graphics) { + synchronized (sync) { + if (!printActive || null == printGLAD) { + throw new IllegalStateException("setupPrint() not called"); + } + if (DEBUG && !EventQueue.isDispatchThread()) { + System.err.println(currentThreadName() + ": Warning: GLCanvas print - not called from AWT-EDT"); + // we cannot dispatch print on AWT-EDT due to printing internal locking .. + } + + final Graphics2D g2d = (Graphics2D) graphics; + try { + printAWTTiles.setupGraphics2DAndClipBounds(g2d, getWidth(), getHeight()); + final TileRenderer tileRenderer = printAWTTiles.renderer; + if (DEBUG) { + System.err.println("AWT print.0: " + tileRenderer); + } + if (!tileRenderer.eot()) { + try { + do { + tileRenderer.display(); + } while (!tileRenderer.eot()); + if (DEBUG) { + System.err.println("AWT print.1: " + printAWTTiles); + } + tileRenderer.reset(); + } finally { + printAWTTiles.resetGraphics2D(); + } + } + } catch (final NoninvertibleTransformException nte) { + System.err.println("Caught: Inversion failed of: " + g2d.getTransform()); + nte.printStackTrace(); + } + if (DEBUG) { + System.err.println("AWT print.X: " + printAWTTiles); + } + } + } + + private final boolean validateComponent(final boolean attachNewtChild) { + if (Beans.isDesignTime() || !isDisplayable()) { + return false; + } + if (null == newtChild || null == jawtWindow) { + return false; + } + if (0 >= getWidth() || 0 >= getHeight()) { + return false; + } + + if (attachNewtChild && !newtChildAttached && null != newtChild) { + attachNewtChild(); + } + + return true; + } + + private final void configureNewtChild(final boolean attach) { + awtWinAdapter.clear(); + awtKeyAdapter.clear(); + awtMouseAdapter.clear(); + + if (null != keyboardFocusManager) { + keyboardFocusManager.removePropertyChangeListener("focusOwner", focusPropertyChangeListener); + keyboardFocusManager = null; + } + + if (null != newtChild) { + newtChild.setKeyboardFocusHandler(null); + if (attach) { + if (null == jawtWindow.getGraphicsConfiguration()) { + throw new InternalError("XXX"); + } + isOnscreen = jawtWindow.getGraphicsConfiguration().getChosenCapabilities().isOnscreen(); + awtWinAdapter.setDownstream(jawtWindow, newtChild); + newtChild.addWindowListener(clearAWTMenusOnNewtFocus); + newtChild.setFocusAction(focusAction); // enable AWT focus traversal + newtChildCloseOp = newtChild.setDefaultCloseOperation(WindowClosingMode.DO_NOTHING_ON_CLOSE); + keyboardFocusManager = KeyboardFocusManager.getCurrentKeyboardFocusManager(); + keyboardFocusManager.addPropertyChangeListener("focusOwner", focusPropertyChangeListener); + // force this AWT Canvas to be focus-able, + // since this it is completely covered by the newtChild (z-order). + setFocusable(true); + if (isOnscreen) { + // onscreen newt child needs to fwd AWT focus + newtChild.setKeyboardFocusHandler(newtFocusTraversalKeyListener); + } else { + // offscreen newt child requires AWT to fwd AWT key/mouse event + awtMouseAdapter.setDownstream(newtChild); + // We cannot consume AWT mouse click, since it would disable focus via mouse click! + // awtMouseAdapter.setConsumeAWTEvent(true); + awtKeyAdapter.setDownstream(newtChild); + // Keep AWT key events unconsumed so NetBeans global shortcuts can still process them + // while NEWT receives the translated event in the macOS CALayer/offscreen path. + awtKeyAdapter.setConsumeAWTEvent(false); + } + } else { + newtChild.removeWindowListener(clearAWTMenusOnNewtFocus); + newtChild.setFocusAction(null); + newtChild.setDefaultCloseOperation(newtChildCloseOp); + setFocusable(false); + } + } + } + + /** + * Returns true if Key and Mouse input events will be passed through AWT, + * otherwise only the {@link #getNEWTChild() NEWT child} will receive them. + *

              + * Normally only the {@link #getNEWTChild() NEWT child} will receive Key and Mouse input events. + * In offscreen mode, e.g. OSX/CALayer, the AWT events will be received and translated into NEWT events + * and delivered to the NEWT child window.
              + * Note: AWT key events will {@link java.awt.event.InputEvent#consume() consumed} in pass-through mode. + *

              + */ + public final boolean isAWTEventPassThrough() { + return !isOnscreen; + } + + /** + * Runs {@code task} on NEWT's EDT while keeping the AWT EDT responsive. + *

              + * On macOS, synchronous cross-toolkit operations can deadlock when the AWT EDT waits + * for the NEWT EDT while NEWT (or AppKit) requires the AWT EDT to keep pumping events. + *

              + *

              + * When running on the AWT EDT on macOS, this helper uses an AWT {@link SecondaryLoop} to keep + * dispatching AWT events while waiting for the NEWT task to complete (Bug 1478). + *

              + */ + private final void runOnNewtEDTAndWaitOnAWTEDT(final Runnable task, final String dbgTag) { + if (EventQueue.isDispatchThread() && + Platform.OSType.MACOS == Platform.getOSType() && + null != jawtWindow) { + final SecondaryLoop loop = Toolkit.getDefaultToolkit().getSystemEventQueue().createSecondaryLoop(); + if (null == loop) { + task.run(); + return; + } + + final AtomicReference throwableRef = new AtomicReference(); + final Runnable task0 = new Runnable() { + @Override + public void run() { + try { + if (DEBUG) { + System.err.println("NewtCanvasAWT." + dbgTag + ".newtTask.0 @ " + currentThreadName()); + } + task.run(); + } catch (final Throwable t) { + throwableRef.set(t); + } finally { + if (DEBUG) { + System.err.println("NewtCanvasAWT." + dbgTag + ".newtTask.X @ " + currentThreadName()); + } + loop.exit(); + } + } + }; + + if (DEBUG) { + System.err.println("NewtCanvasAWT." + dbgTag + ".awtWait.0 @ " + currentThreadName()); + } + newtChild.runOnEDTIfAvail(false /* wait */, task0); + loop.enter(); + if (DEBUG) { + System.err.println("NewtCanvasAWT." + dbgTag + ".awtWait.X @ " + currentThreadName()); + } + + final Throwable throwable = throwableRef.get(); + if (null != throwable) { + if (throwable instanceof RuntimeException) { + throw (RuntimeException) throwable; + } + throw new RuntimeException(throwable); + } + return; + } + + task.run(); + } + + private final void attachNewtChild() { + if (null == newtChild || null == jawtWindow || newtChildAttached) { + return; // nop + } + if (DEBUG) { + // if ( isShowing() == false ) -> Container was not visible yet. + // if ( isShowing() == true ) -> Container is already visible. + System.err.println("NewtCanvasAWT.attachNewtChild.0 @ " + currentThreadName()); + System.err.println("\twin " + newtWinHandleToHexString(newtChild) + + ", EDTUtil: cur " + newtChild.getScreen().getDisplay().getEDTUtil() + + ", comp " + this + ", visible " + isVisible() + ", showing " + isShowing() + ", displayable " + + isDisplayable() + + ", cont " + AWTMisc.getContainer(this)); + } + + newtChildAttached = true; + newtChild.setFocusAction(null); // no AWT focus traversal .. + if (DEBUG) { + System.err.println("NewtCanvasAWT.attachNewtChild.1: newtChild: " + newtChild); + } + final int w = getWidth(); + final int h = getHeight(); + if (DEBUG) { + System.err.println( + "NewtCanvasAWT.attachNewtChild.2: size " + w + "x" + h + ", isNValid " + newtChild.isNativeValid()); + } + updatePixelScale(getGraphicsConfiguration(), true /* force */); // AWT -> NEWT + + // Bug 1478: The NEWT reparent/setVisible operations are synchronous by default and can + // deadlock on macOS if performed on the AWT EDT. See runOnNewtEDTAndWaitOnAWTEDT(). + runOnNewtEDTAndWaitOnAWTEDT(new Runnable() { + @Override + public void run() { + newtChild.setVisible(false); + newtChild.setSize(w, h); + newtChild.reparentWindow(jawtWindow, -1, -1, Window.REPARENT_HINT_BECOMES_VISIBLE); + newtChild.addSurfaceUpdatedListener(jawtWindow); + newtChild.setVisible(true); + newtChild.sendWindowEvent(WindowEvent.EVENT_WINDOW_RESIZED); + } + }, "attachNewtChild"); + + if (jawtWindow.isOffscreenLayerSurfaceEnabled() && + 0 != (JAWTUtil.JAWT_OSX_CALAYER_QUIRK_POSITION & JAWTUtil.getOSXCALayerQuirks())) { + AWTEDTExecutor.singleton.invoke(false, forceRelayout); + } + configureNewtChild(true); + + if (DEBUG) { + System.err.println( + "NewtCanvasAWT.attachNewtChild.X: win " + newtWinHandleToHexString(newtChild) + ", EDTUtil: cur " + + newtChild.getScreen().getDisplay().getEDTUtil() + ", comp " + this); + } + } + + private final Runnable forceRelayout = new Runnable() { + @Override + public void run() { + if (DEBUG) { + System.err.println("NewtCanvasAWT.forceRelayout.0"); + } + // Hack to force proper native AWT layout incl. CALayer components on OSX + final java.awt.Component component = NewtCanvasAWT.this; + final int cW = component.getWidth(); + final int cH = component.getHeight(); + component.setSize(cW + 1, cH + 1); + component.setSize(cW, cH); + if (DEBUG) { + System.err.println("NewtCanvasAWT.forceRelayout.X"); + } + } + }; + + private final void detachNewtChild(final java.awt.Container cont) { + if (null == newtChild || null == jawtWindow || !newtChildAttached) { + return; // nop + } + if (DEBUG) { + // if ( isShowing() == false ) -> Container was not visible yet. + // if ( isShowing() == true ) -> Container is already visible. + System.err.println("NewtCanvasAWT.detachNewtChild.0: win " + newtWinHandleToHexString(newtChild) + + ", EDTUtil: cur " + newtChild.getScreen().getDisplay().getEDTUtil() + + ", comp " + this + ", visible " + isVisible() + ", showing " + isShowing() + ", displayable " + + isDisplayable() + + ", cont " + cont); + } + + newtChild.removeSurfaceUpdatedListener(jawtWindow); + newtChildAttached = false; + newtChild.setFocusAction(null); // no AWT focus traversal .. + configureNewtChild(false); + newtChild.setVisible(false); + + newtChild.reparentWindow(null, -1, -1, + 0 /* hint */); // will destroy context (offscreen -> onscreen) and implicit detachSurfaceLayer + + if (DEBUG) { + System.err.println( + "NewtCanvasAWT.detachNewtChild.X: win " + newtWinHandleToHexString(newtChild) + ", EDTUtil: cur " + + newtChild.getScreen().getDisplay().getEDTUtil() + ", comp " + this); + } + } + + protected static String currentThreadName() { + return "[" + Thread.currentThread().getName() + ", isAWT-EDT " + EventQueue.isDispatchThread() + "]"; + } + + static String newtWinHandleToHexString(final Window w) { + return null != w ? toHexString(w.getWindowHandle()) : "nil"; + } + + static String toHexString(final long l) { + return "0x" + Long.toHexString(l); + } +} + diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/README.md b/modules/VisualizationEngine/src/main/java/jogamp/text/README.md new file mode 100644 index 0000000000..129d256bf9 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/README.md @@ -0,0 +1 @@ +Copy of https://github.com/jzy3d/jogl-text-renderer/, which itself is a fork of JOGL's text rendering. \ No newline at end of file diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/RectanglePacker.java b/modules/VisualizationEngine/src/main/java/jogamp/text/RectanglePacker.java new file mode 100644 index 0000000000..69aad3e6fa --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/RectanglePacker.java @@ -0,0 +1,350 @@ +/* + * Copyright (c) 2006 Sun Microsystems, Inc. All Rights Reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * - Redistribution of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * - Redistribution in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * Neither the name of Sun Microsystems, Inc. or the names of + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * This software is provided "AS IS," without a warranty of any kind. ALL + * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, + * INCLUDING ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A + * PARTICULAR PURPOSE OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN + * MICROSYSTEMS, INC. ("SUN") AND ITS LICENSORS SHALL NOT BE LIABLE FOR + * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR + * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL SUN OR + * ITS LICENSORS BE LIABLE FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR + * DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE + * DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, + * ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, EVEN IF + * SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + * + * You acknowledge that this software is not designed or intended for use + * in the design, construction, operation or maintenance of any nuclear + * facility. + * + * Sun gratefully acknowledges that this software was originally authored + * and developed by Kenneth Bradley Russell and Christopher John Kline. + */ + +package jogamp.text; + +import com.jogamp.opengl.util.packrect.BackingStoreManager; +import com.jogamp.opengl.util.packrect.Level; +import com.jogamp.opengl.util.packrect.LevelSet; +import com.jogamp.opengl.util.packrect.Rect; +import com.jogamp.opengl.util.packrect.RectVisitor; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.Iterator; +import java.util.List; + +/** + * Packs rectangles supplied by the user (typically representing + * image regions) into a larger backing store rectangle (typically + * representing a large texture). Supports automatic compaction of + * the space on the backing store, and automatic expansion of the + * backing store, when necessary. + */ + +public class RectanglePacker { + + private static final float DEFAULT_EXPANSION_FACTOR = 0.5f; + + private final BackingStoreManager manager; + private Object backingStore; + private LevelSet levels; + private final float EXPANSION_FACTOR; + private static final float SHRINK_FACTOR = 0.3f; + + private final int initialWidth; + private final int initialHeight; + + private int maxWidth = -1; + private int maxHeight = -1; + + static class RectHComparator implements Comparator { + @Override + public int compare(final Rect r1, final Rect r2) { + return r2.h() - r1.h(); + } + + @Override + public boolean equals(final Object obj) { + return this == obj; + } + } + + private static final Comparator rectHComparator = new RectHComparator(); + + public RectanglePacker(final BackingStoreManager manager, + final int initialWidth, + final int initialHeight) { + this(manager, initialWidth, initialHeight, DEFAULT_EXPANSION_FACTOR); + } + + public RectanglePacker(final BackingStoreManager manager, + final int initialWidth, + final int initialHeight, + final float expansionFactor) { + this.manager = manager; + levels = new LevelSet(initialWidth, initialHeight); + this.initialWidth = initialWidth; + this.initialHeight = initialHeight; + EXPANSION_FACTOR = expansionFactor; + } + + public Object getBackingStore() { + if (backingStore == null) { + backingStore = manager.allocateBackingStore(levels.w(), levels.h()); + } + + return backingStore; + } + + /** + * Sets up a maximum width and height for the backing store. These + * are optional and if not specified the backing store will grow as + * necessary. Setting up a maximum width and height introduces the + * possibility that additions will fail; these are handled with the + * BackingStoreManager's allocationFailed notification. + */ + public void setMaxSize(final int maxWidth, final int maxHeight) { + this.maxWidth = maxWidth; + this.maxHeight = maxHeight; + } + + /** + * Decides upon an (x, y) position for the given rectangle (leaving + * its width and height unchanged) and places it on the backing + * store. May provoke re-layout of other Rects already added. If + * the BackingStoreManager does not support compaction, and {@link + * BackingStoreManager#preExpand BackingStoreManager.preExpand} + * does not clear enough space for the incoming rectangle, then + * this method will throw a RuntimeException. + */ + public void add(final Rect rect) throws RuntimeException { + // Allocate backing store if we don't have any yet + if (backingStore == null) { + backingStore = manager.allocateBackingStore(levels.w(), levels.h()); + } + + int attemptNumber = 0; + boolean tryAgain = false; + + do { + // Try to allocate + if (levels.add(rect)) { + return; + } + + if (manager.canCompact()) { + // Try to allocate with horizontal compaction + if (levels.compactAndAdd(rect, backingStore, manager)) { + return; + } + // Let the manager have a chance at potentially evicting some entries + tryAgain = manager.preExpand(rect, attemptNumber++); + } else { + tryAgain = manager.additionFailed(rect, attemptNumber++); + } + } while (tryAgain); + + if (!manager.canCompact()) { + throw new RuntimeException( + "BackingStoreManager does not support compaction or expansion, and didn't clear space for new rectangle"); + } + + compactImpl(rect); + + // Retry the addition of the incoming rectangle + add(rect); + // Done + } + + /** + * Removes the given rectangle from this RectanglePacker. + */ + public void remove(final Rect rect) { + levels.remove(rect); + } + + /** + * Visits all Rects contained in this RectanglePacker. + */ + public void visit(final RectVisitor visitor) { + levels.visit(visitor); + } + + /** + * Returns the vertical fragmentation ratio of this + * RectanglePacker. This is defined as the ratio of the sum of the + * heights of all completely empty Levels divided by the overall + * used height of the LevelSet. A high vertical fragmentation ratio + * indicates that it may be profitable to perform a compaction. + */ + public float verticalFragmentationRatio() { + return levels.verticalFragmentationRatio(); + } + + /** + * Forces a compaction cycle, which typically results in allocating + * a new backing store and copying all entries to it. + */ + public void compact() { + compactImpl(null); + } + + // The "cause" rect may be null + private void compactImpl(final Rect cause) { + // Have to either expand, compact or both. Need to figure out what + // direction to go. Prefer to expand vertically. Expand + // horizontally only if rectangle being added is too wide. FIXME: + // may want to consider rebalancing the width and height to be + // more equal if it turns out we keep expanding in the vertical + // direction. + boolean done = false; + int newWidth = levels.w(); + int newHeight = levels.h(); + LevelSet nextLevelSet = null; + int attemptNumber = 0; + boolean needAdditionFailureNotification = false; + + while (!done) { + if (cause != null) { + if (cause.w() > newWidth) { + newWidth = cause.w(); + } else { + newHeight = (int) (newHeight * (1.0f + EXPANSION_FACTOR)); + } + } + + // Clamp to maximum values + needAdditionFailureNotification = false; + if (maxWidth > 0 && newWidth > maxWidth) { + newWidth = maxWidth; + needAdditionFailureNotification = true; + } + if (maxHeight > 0 && newHeight > maxHeight) { + newHeight = maxHeight; + needAdditionFailureNotification = true; + } + + nextLevelSet = new LevelSet(newWidth, newHeight); + + // Make copies of all existing rectangles + final List newRects = new ArrayList(); + for (final Iterator i1 = levels.iterator(); i1.hasNext(); ) { + final Level level = i1.next(); + for (final Iterator i2 = level.iterator(); i2.hasNext(); ) { + final Rect cur = i2.next(); + final Rect newRect = new Rect(0, 0, cur.w(), cur.h(), null); + cur.setNextLocation(newRect); + // Hook up the reverse mapping too for easier replacement + newRect.setNextLocation(cur); + newRects.add(newRect); + } + } + // Sort them by decreasing height (note: this isn't really + // guaranteed to improve the chances of a successful layout) + Collections.sort(newRects, rectHComparator); + // Try putting all of these rectangles into the new level set + done = true; + for (final Iterator iter = newRects.iterator(); iter.hasNext(); ) { + if (!nextLevelSet.add(iter.next())) { + done = false; + break; + } + } + + if (done && cause != null) { + // Try to add the new rectangle as well + if (nextLevelSet.add(cause)) { + // We're OK + } else { + done = false; + } + } + + // Don't send addition failure notifications if we're only doing + // a compaction + if (!done && needAdditionFailureNotification && cause != null) { + manager.additionFailed(cause, attemptNumber); + } + ++attemptNumber; + } + + // See whether the implicit compaction that just occurred has + // yielded excess empty space. + if (nextLevelSet.getUsedHeight() > 0 && + nextLevelSet.getUsedHeight() < nextLevelSet.h() * SHRINK_FACTOR) { + int shrunkHeight = Math.max(initialHeight, + (int) (nextLevelSet.getUsedHeight() * (1.0f + EXPANSION_FACTOR))); + if (maxHeight > 0 && shrunkHeight > maxHeight) { + shrunkHeight = maxHeight; + } + nextLevelSet.setHeight(shrunkHeight); + } + + // If we temporarily added the new rectangle to the new LevelSet, + // take it out since we don't "really" add it here but in add(), above + if (cause != null) { + nextLevelSet.remove(cause); + } + + // OK, now we have a new layout and a mapping from the old to the + // new locations of rectangles on the backing store. Allocate a + // new backing store, move the contents over and deallocate the + // old one. + final Object newBackingStore = manager.allocateBackingStore(nextLevelSet.w(), + nextLevelSet.h()); + manager.beginMovement(backingStore, newBackingStore); + for (final Iterator i1 = levels.iterator(); i1.hasNext(); ) { + final Level level = i1.next(); + for (final Iterator i2 = level.iterator(); i2.hasNext(); ) { + final Rect cur = i2.next(); + manager.move(backingStore, cur, + newBackingStore, cur.getNextLocation()); + } + } + // Replace references to temporary rectangles with original ones + nextLevelSet.updateRectangleReferences(); + manager.endMovement(backingStore, newBackingStore); + // Now delete the old backing store + manager.deleteBackingStore(backingStore); + // Update to new versions of backing store and LevelSet + backingStore = newBackingStore; + levels = nextLevelSet; + } + + /** + * Clears all Rects contained in this RectanglePacker. + */ + public void clear() { + levels.clear(); + } + + /** + * Disposes the backing store allocated by the + * BackingStoreManager. This RectanglePacker may no longer be used + * after calling this method. + */ + public void dispose() { + if (backingStore != null) { + manager.deleteBackingStore(backingStore); + } + backingStore = null; + levels = null; + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/TextRenderer.java b/modules/VisualizationEngine/src/main/java/jogamp/text/TextRenderer.java new file mode 100644 index 0000000000..96e707b19c --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/TextRenderer.java @@ -0,0 +1,1176 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text; + +import com.jogamp.opengl.GL; +import com.jogamp.opengl.GLContext; +import com.jogamp.opengl.GLException; +import com.jogamp.opengl.util.texture.TextureCoords; +import java.awt.Color; +import java.awt.Font; +import java.awt.Graphics2D; +import java.awt.font.FontRenderContext; +import java.awt.font.GlyphVector; +import java.awt.geom.Rectangle2D; +import java.lang.Character.UnicodeBlock; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import jogamp.text.util.Check; +import jogamp.text.util.Glyph; +import jogamp.text.util.GlyphCache; +import jogamp.text.util.GlyphProducer; +import jogamp.text.util.GlyphProducers; +import jogamp.text.util.GlyphRenderer; +import jogamp.text.util.GlyphRenderers; + + +/** + * Utility for rendering bitmapped Java 2D text into an OpenGL window. + * + *

              + * {@code TextRenderer} has high performance, full Unicode support, and a simple API. It performs + * appropriate caching of text rendering results in an OpenGL texture internally to avoid repeated + * font rasterization. The caching is completely automatic, does not require any user + * intervention, and has no visible controls in the public API. + * + *

              + * Using {@code TextRenderer} is simple. Add a {@code TextRenderer} field to your {@code + * GLEventListener} and in your {@code init} method, add: + * + *

              + * renderer = new TextRenderer(new Font("SansSerif", Font.BOLD, 36));
              + * 
              + * + *

              + * In the {@code display} method of your {@code GLEventListener}, add: + * + *

              + * renderer.beginRendering(drawable.getWidth(), drawable.getHeight());
              + * // optionally set the color
              + * renderer.setColor(1.0f, 0.2f, 0.2f, 0.8f);
              + * renderer.draw("Text to draw", xPosition, yPosition);
              + * // ... more draw commands, color changes, etc.
              + * renderer.endRendering();
              + * 
              + * + *

              + * Unless you are sharing textures between OpenGL contexts, you do not need to call the {@link + * #dispose dispose} method of the {@code TextRenderer}; the OpenGL resources it uses internally + * will be cleaned up automatically when the OpenGL context is destroyed. + * + *

              + * Note that a {@code TextRenderer} will cause the Vertex Array Object binding to change, or to be + * unbound. + * + *

              + * Internally, the renderer uses a rectangle packing algorithm to pack both glyphs and full + * strings' rendering results (which are variable size) onto a larger OpenGL texture. The internal + * backing store is maintained using a {@link com.jogamp.opengl.util.awt.TextureRenderer + * TextureRenderer}. A least recently used (LRU) algorithm is used to discard previously rendered + * strings; the specific algorithm is undefined, but is currently implemented by flushing unused + * strings' rendering results every few hundred rendering cycles, where a rendering cycle is + * defined as a pair of calls to {@link #beginRendering beginRendering} / {@link #endRendering + * endRendering}. + * + * @author John Burkey + * @author Kenneth Russell + */ +/*@NotThreadSafe*/ +public final class TextRenderer { + + /** + * True to print debugging information. + */ + static final boolean DEBUG = false; + + /** + * Common instance of the default render delegate. + */ + /*@Nonnull*/ + private static final RenderDelegate DEFAULT_RENDER_DELEGATE = new DefaultRenderDelegate(); + + /** + * Face, style, and size of text to render with. + */ + /*@Nonnull*/ + private final Font font; + + /** + * Delegate to store glyphs. + */ + /*@Nonnull*/ + private final GlyphCache glyphCache; + + /** + * Delegate to create glyphs. + */ + /*@Nonnull*/ + private final GlyphProducer glyphProducer; + + /** + * Delegate to draw glyphs. + */ + /*@Nonnull*/ + private final GlyphRenderer glyphRenderer = new GlyphRendererProxy(); + + /** + * Mediator coordinating components. + */ + /*@Nonnull*/ + private final Mediator mediator = new Mediator(); + + /** + * True if this text renderer is ready to be used. + */ + private boolean ready = false; + + /** + * Constructs a {@link TextRenderer}. + * + *

              + * The resulting {@code TextRenderer} will use no antialiasing or fractional metrics and the + * default render delegate. It will not attempt to use OpenGL's automatic mipmap generation + * for better scaling. All Unicode characters will be available. + * + * @param font Font to render text with + * @throws NullPointerException if font is null + */ + public TextRenderer(/*@Nonnull*/ final Font font) { + this(font, false, false, null, false, null); + } + + /** + * Constructs a {@link TextRenderer} with optional mipmapping. + * + *

              + * The resulting {@code TextRenderer} will use no antialiasing or fractional metrics, and the + * default render delegate. If mipmapping is requested, the text renderer will attempt to use + * OpenGL's automatic mipmap generation for better scaling. All Unicode characters will be + * available. + * + * @param font Font to render text with + * @param mipmap True to generate mipmaps (to make the text scale better) + * @throws NullPointerException if font is null + */ + public TextRenderer(/*@Nonnull*/ final Font font, final boolean mipmap) { + this(font, false, false, null, mipmap, null); + } + + /** + * Constructs a {@link TextRenderer} with optional text properties. + * + *

              + * The resulting {@code TextRenderer} will use antialiasing and fractional metrics if + * requested, and the default render delegate. It will not attempt to use OpenGL's automatic + * mipmap generation for better scaling. All Unicode characters will be available. + * + * @param font Font to render text with + * @param antialias True to smooth edges of text + * @param subpixel True to use subpixel accuracy + * @throws NullPointerException if font is null + */ + public TextRenderer(/*@Nonnull*/ final Font font, + final boolean antialias, + final boolean subpixel) { + this(font, antialias, subpixel, null, false, null); + } + + /** + * Constructs a {@link TextRenderer} with optional text properties and a render delegate. + * + *

              + * The resulting {@code TextRenderer} will use antialiasing and fractional metrics if + * requested. The optional render delegate provides more control over the text rendered. The + * {@code TextRenderer} will not attempt to use OpenGL's automatic mipmap generation for better + * scaling. All Unicode characters will be available. + * + * @param font Font to render text with + * @param antialias True to smooth edges of text + * @param subpixel True to use subpixel accuracy + * @param rd Optional controller of rendering details + * @throws NullPointerException if font is null + */ + public TextRenderer(/*@Nonnull*/ final Font font, + final boolean antialias, + final boolean subpixel, + /*@CheckForNull*/ final RenderDelegate rd) { + this(font, antialias, subpixel, rd, false, null); + } + + /** + * Constructs a {@link TextRenderer} with optional text properties, a render delegate, and + * mipmapping. + * + *

              + * The resulting {@code TextRenderer} will use antialiasing and fractional metrics if + * requested. The optional render delegate provides more control over the text rendered. If + * mipmapping is requested, the {@code TextRenderer} will attempt to use OpenGL's automatic + * mipmap generation for better scaling. All Unicode characters will be available. + * + * @param font Font to render text with + * @param antialias True to smooth edges of text + * @param subpixel True to use subpixel accuracy + * @param rd Optional controller of rendering details + * @param mipmap Whether to generate mipmaps to make the text scale better + * @throws NullPointerException if font is null + */ + public TextRenderer(/*@Nonnull*/ final Font font, + final boolean antialias, + final boolean subpixel, + /*CheckForNull*/ final RenderDelegate rd, + final boolean mipmap) { + this(font, antialias, subpixel, rd, mipmap, null); + } + + /** + * Constructs a {@link TextRenderer} with optional text properties, a render delegate, + * mipmapping, and a range of characters. + * + *

              + * The resulting {@code TextRenderer} will use antialiasing and fractional metrics if + * requested. The optional render delegate provides more control over the text rendered. If + * mipmapping is requested, the text renderer will attempt to use OpenGL's automatic mipmap + * generation for better scaling. If a character range is specified, the text renderer will + * limit itself to those characters to try to achieve better performance. Otherwise all + * Unicode characters will be available. + * + * @param font Font to render text with + * @param antialias True to smooth edges of text + * @param subpixel True to use subpixel accuracy + * @param rd Controller of rendering details, or null to use the default + * @param mipmap Whether to generate mipmaps to make the text scale better + * @param ub Range of unicode characters, or null to use the default + * @throws NullPointerException if font is null + */ + public TextRenderer(/*@Nonnull*/ final Font font, + final boolean antialias, + final boolean subpixel, + /*@CheckForNull*/ RenderDelegate rd, + final boolean mipmap, + /*@CheckForNull*/ final UnicodeBlock ub) { + + Check.notNull(font, "Font cannot be null"); + if (rd == null) { + rd = DEFAULT_RENDER_DELEGATE; + } + + this.font = font; + this.glyphCache = GlyphCache.newInstance(font, rd, antialias, subpixel, mipmap); + this.glyphProducer = GlyphProducers.get(font, rd, glyphCache.getFontRenderContext(), ub); + } + + /** + * Starts a 3D render cycle. + * + *

              + * Assumes the end user is responsible for setting up the modelview and projection matrices, + * and will render text using the {@link #draw3D} method. + * + * @throws GLException if an OpenGL context is not current + */ + public void begin3DRendering() { + beginRendering(false, 0, 0, false); + } + + /** + * Starts an orthographic render cycle. + * + *

              + * Sets up a two-dimensional orthographic projection with (0,0) as the lower-left coordinate + * and (width, height) as the upper-right coordinate. Binds and enables the internal OpenGL + * texture object, sets the texture environment mode to GL_MODULATE, and changes the current + * color to the last color set with this text drawer via {@link #setColor}. + * + *

              + * This method disables the depth test and is equivalent to beginRendering(width, height, + * true). + * + * @param width Width of the current on-screen OpenGL drawable + * @param height Height of the current on-screen OpenGL drawable + * @throws GLException if an OpenGL context is not current + * @throws IllegalArgumentException if width or height is negative + */ + public void beginRendering(/*@Nonnegative*/ final int width, + /*@Nonnegative*/ final int height) { + beginRendering(true, width, height, true); + } + + /** + * Starts an orthographic render cycle. + * + *

              + * Sets up a two-dimensional orthographic projection with (0,0) as the lower-left coordinate + * and (width, height) as the upper-right coordinate. Binds and enables the internal OpenGL + * texture object, sets the texture environment mode to GL_MODULATE, and changes the current + * color to the last color set with this text drawer via {@link #setColor}. + * + *

              + * Disables the depth test if requested. + * + * @param width Width of the current on-screen OpenGL drawable + * @param height Height of the current on-screen OpenGL drawable + * @param disableDepthTest True to disable the depth test + * @throws GLException if an OpenGL context is not current + * @throws IllegalArgumentException if width or height is negative + */ + public void beginRendering(/*@Nonnegative*/ final int width, + /*@Nonnegative*/ final int height, + final boolean disableDepthTest) { + beginRendering(true, width, height, disableDepthTest); + } + + /** + * Starts a render cycle. + * + * @param ortho True to use orthographic projection + * @param width Width of the current OpenGL viewport + * @param height Height of the current OpenGL viewport + * @param disableDepthTest True to ignore depth values + * @throws GLException if no OpenGL context is current or it's an unexpected version + * @throws IllegalArgumentException if width or height is negative + */ + private void beginRendering(final boolean ortho, + /*@Nonnegative*/ final int width, + /*@Nonnegative*/ final int height, + final boolean disableDepthTest) { + + Check.argument(width >= 0, "Width cannot be negative"); + Check.argument(height >= 0, "Height cannot be negative"); + + // Get the current OpenGL context + final GL gl = GLContext.getCurrentGL(); + + // Make sure components are set up properly + if (!ready) { + glyphCache.addListener(mediator); + glyphRenderer.addListener(mediator); + ready = true; + } + + // Delegate to components + glyphCache.beginRendering(gl); + glyphRenderer.beginRendering(gl, ortho, width, height, disableDepthTest); + } + + /** + * Destroys resources used by the text renderer. + * + * @throws GLException if no OpenGL context is current, or is unexpected version + */ + public void dispose() { + + // Get the current OpenGL context + final GL gl = GLContext.getCurrentGL(); + + // Destroy the glyph cache + glyphCache.dispose(gl); + + // Destroy the glyph renderer + glyphRenderer.dispose(gl); + } + + /** + * Draws a character sequence at a location. + * + *

              + * The baseline of the leftmost character is at position (x, y) specified in OpenGL + * coordinates, where the origin is at the lower-left of the drawable and the Y coordinate + * increases in the upward direction. + * + * @param text Text to draw + * @param x Position to draw on X axis + * @param y Position to draw on Y axis + * @throws NullPointerException if text is null + * @throws GLException if an OpenGL context is not current, or is unexpected version + */ + public void draw(/*@Nonnull*/ final CharSequence text, + /*@CheckForSigned*/ final int x, + /*@CheckForSigned*/ final int y) { + draw3D(text, x, y, 0, 1); + } + + /** + * Draws a string at a location. + * + *

              + * The baseline of the leftmost character is at position (x, y) specified in OpenGL + * coordinates, where the origin is at the lower-left of the drawable and the Y coordinate + * increases in the upward direction. + * + * @param text Text to draw + * @param x Position to draw on X axis + * @param y Position to draw on Y axis + * @throws NullPointerException if text is null + * @throws GLException if an OpenGL context is not current, or is unexpected version + */ + public void draw(/*@Nonnull*/ final String text, + /*@CheckForSigned*/ final int x, + /*@CheckForSigned*/ final int y) { + draw3D(text, x, y, 0, 1); + } + + /** + * Draws a character sequence at a location in 3D space. + * + *

              + * The baseline of the leftmost character is placed at position (x, y, z) in the current + * coordinate system. + * + * @param text Text to draw + * @param x X coordinate at which to draw + * @param y Y coordinate at which to draw + * @param z Z coordinate at which to draw + * @param scale Uniform scale applied to width and height of text + * @throws NullPointerException if text is null + * @throws GLException if an OpenGL context is not current, or is unexpected version + */ + public void draw3D(/*@Nonnull*/ final CharSequence text, + /*@CheckForSigned*/ final float x, + /*@CheckForSigned*/ final float y, + /*@CheckForSigned*/ final float z, + /*@CheckForSigned*/ final float scale) { + draw3D(text.toString(), x, y, z, scale); + } + + /** + * Draws text at a location in 3D space. + * + *

              + * Uses the renderer's current color. The baseline of the leftmost character is placed at + * position (x, y, z) in the current coordinate system. + * + * @param text Text to draw + * @param x Position to draw on X axis + * @param y Position to draw on Y axis + * @param z Position to draw on Z axis + * @param scale Uniform scale applied to width and height of text + * @throws GLException if no OpenGL context is current, or is unexpected version + * @throws NullPointerException if text is null + */ + public void draw3D(/*@Nonnull*/ final String text, + /*@CheckForSigned*/ float x, + /*@CheckForSigned*/ final float y, + /*@CheckForSigned*/ final float z, + /*@CheckForSigned*/ final float scale) { + + Check.notNull(text, "Text cannot be null"); + + // Get the current OpenGL context + final GL gl = GLContext.getCurrentGL(); + + // Get all the glyphs for the string + final List glyphs = glyphProducer.createGlyphs(text); + + // Render each glyph + for (final Glyph glyph : glyphs) { + if (glyph.location == null) { + glyphCache.upload(glyph); + } + final TextureCoords coords = glyphCache.find(glyph); + final float advance = glyphRenderer.drawGlyph(gl, glyph, x, y, z, scale, coords); + x += advance * scale; + } + } + + /** + * Finishes a 3D render cycle. + */ + public void end3DRendering() { + endRendering(); + } + + /** + * Finishes a render cycle. + */ + public void endRendering() { + + // Get the current OpenGL context + final GL gl = GLContext.getCurrentGL(); + + // Tear down components + glyphCache.endRendering(gl); + glyphRenderer.endRendering(gl); + } + + /** + * Forces all stored text to be rendered. + * + *

              + * This should be called after each call to {@code draw} if you are setting OpenGL state such + * as the modelview matrix between calls to {@code draw}. + * + * @throws GLException if no OpenGL context is current, or is unexpected version + * @throws IllegalStateException if not in a render cycle + */ + public void flush() { + + // Get the current OpenGL context + final GL gl = GLContext.getCurrentGL(); + + // Make sure glyph cache is up to date + glyphCache.update(gl); + + // Render outstanding glyphs + glyphRenderer.flush(gl); + } + + /** + * Determines the bounding box of a character sequence. + * + *

              + * Assumes it was rendered at the origin. + * + *

              + * The coordinate system of the returned rectangle is Java 2D's, with increasing Y coordinates + * in the downward direction. The relative coordinate (0,0) in the returned rectangle + * corresponds to the baseline of the leftmost character of the rendered string, in similar + * fashion to the results returned by, for example, {@link GlyphVector#getVisualBounds + * getVisualBounds}. + * + *

              + * Most applications will use only the width and height of the returned Rectangle for the + * purposes of centering or justifying the String. It is not specified which Java 2D bounds + * ({@link GlyphVector#getVisualBounds getVisualBounds}, {@link GlyphVector#getPixelBounds + * getPixelBounds}, etc.) the returned bounds correspond to, although every effort is made to + * ensure an accurate bound. + * + * @param text Text to get bounding box for + * @return Rectangle surrounding the given text, not null + * @throws NullPointerException if text is null + */ + /*@Nonnull*/ + public Rectangle2D getBounds(/*@Nonnull*/ final CharSequence text) { + Check.notNull(text, "Text cannot be null"); + return getBounds(text.toString()); + } + + /** + * Determines the bounding box of a string. + * + * @param text Text to get bounding box for + * @return Rectangle surrounding the given text, not null + * @throws NullPointerException if text is null + */ + /*@Nonnull*/ + public Rectangle2D getBounds(/*@Nonnull*/ final String text) { + Check.notNull(text, "Text cannot be null"); + return glyphProducer.findBounds(text); + } + + /** + * Determines the pixel width of a character. + * + * @param c Character to get pixel width of + * @return Number of pixels required to advance past the character + */ + public float getCharWidth(final char c) { + return glyphProducer.findAdvance(c); + } + + /** + * Determines the font this {@link TextRenderer} is using. + * + * @return Font used by this text renderer, not null + */ + /*@Nonnull*/ + public Font getFont() { + return font; + } + + /** + * Gets the glyph cache used by this {@link TextRenderer}. + * + * @return Glyph cache, not null + */ + /*@Nonnull*/ + public GlyphCache getGlyphCache() { + return glyphCache; + } + + /** + * Gets the glyph producer used by this {@link TextRenderer}. + * + * @return Glyph producer, not null + */ + /*@Nonnull*/ + public GlyphProducer getGlyphProducer() { + return glyphProducer; + } + + /** + * Gets the glyph renderer used by this {@link TextRenderer}. + * + * @return Glyph renderer, not null + */ + /*@Nonnull*/ + public GlyphRenderer getGlyphRenderer() { + return glyphRenderer; + } + + /** + * Checks if the backing texture is using linear interpolation. + * + * @return True if the backing texture is using linear interpolation. + */ + public boolean getSmoothing() { + return glyphCache.getUseSmoothing(); + } + + /** + * Checks if vertex arrays are in-use. + * + *

              + * Indicates whether vertex arrays are being used internally for rendering, or whether text is + * rendered using the OpenGL immediate mode commands. Defaults to true. + */ + public boolean getUseVertexArrays() { + return glyphRenderer.getUseVertexArrays(); + } + + /** + * Specifies the current color of this {@link TextRenderer} using a {@link Color}. + * + * @param color Color to use for rendering text + * @throws NullPointerException if color is null + * @throws GLException if an OpenGL context is not current + */ + public void setColor(/*@Nonnull*/ final Color color) { + + Check.notNull(color, "Color cannot be null"); + + final float r = ((float) color.getRed()) / 255f; + final float g = ((float) color.getGreen()) / 255f; + final float b = ((float) color.getBlue()) / 255f; + final float a = ((float) color.getAlpha()) / 255f; + setColor(r, g, b, a); + } + + /** + * Specifies the current color of this {@link TextRenderer} using individual components. + * + *

              + * Each component ranges from 0.0f to 1.0f. The alpha component, if used, does not need to be + * premultiplied into the color channels as described in the documentation for {@link + * com.jogamp.opengl.util.texture.Texture Texture} (although premultiplied colors are used + * internally). The default color is opaque white. + * + * @param r Red component of the new color + * @param g Green component of the new color + * @param b Blue component of the new color + * @param a Alpha component of the new color + */ + public void setColor(/*@CheckForSigned*/ final float r, + /*@CheckForSigned*/ final float g, + /*@CheckForSigned*/ final float b, + /*@CheckForSigned*/ final float a) { + glyphRenderer.setColor(r, g, b, a); + } + + /** + * Specifies whether the backing texture will use linear interpolation. + * + *

              + * If smoothing is enabled, {@code GL_LINEAR} will be used. Otherwise it uses {@code + * GL_NEAREST}. + * + *

              + * Defaults to true. + * + *

              + * A few graphics cards do not behave well when this is enabled, resulting in fuzzy text. + */ + public void setSmoothing(final boolean smoothing) { + glyphCache.setUseSmoothing(smoothing); + } + + /** + * Changes the transformation matrix used for drawing text in 3D. + * + * @param matrix Transformation matrix in column-major order + * @throws NullPointerException if matrix is null + * @throws IndexOutOfBoundsException if length of matrix is less than sixteen + * @throws IllegalStateException if in orthographic mode + */ + public void setTransform(/*@Nonnull*/ final float matrix[]) { + Check.notNull(matrix, "Matrix cannot be null"); + glyphRenderer.setTransform(matrix, false); + } + + /** + * Changes whether vertex arrays are in use. + * + *

              + * This is provided as a concession for certain graphics cards which have poor vertex array + * performance. If passed true, the text renderer will use vertex arrays or a vertex buffer + * internally for rendering. Otherwise it will use immediate mode commands. Defaults to + * true. + * + * @param useVertexArrays True to render with vertex arrays + */ + public void setUseVertexArrays(final boolean useVertexArrays) { + glyphRenderer.setUseVertexArrays(useVertexArrays); + } + + /** + * Utility supporting more full control over rendering the bitmapped text. + * + *

              + * Allows customization of whether the backing store text bitmap is full-color or intensity + * only, the size of each individual rendered text rectangle, and the contents of each + * individual rendered text string. + */ + public interface RenderDelegate { + + /** + * Renders text into a graphics instance at a specific location. + * + *

              + * The surrounding region will already have been cleared to the RGB color (0, 0, 0) with + * zero alpha. The initial drawing context of the passed Graphics2D will be set to use + * AlphaComposite.Src, the color white, the Font specified in the TextRenderer's + * constructor, and the rendering hints specified in the TextRenderer constructor. + * + *

              + * Changes made by the end user may be visible in successive calls to this method, but are + * not guaranteed to be preserved. Implementations should reset the Graphics2D's state to + * that desired each time this method is called, in particular those states which are not + * the defaults. + * + * @param g2d Graphics to render into + * @param str Text to render + * @param x Location on X axis to render at + * @param y Location on Y axis to render at + * @throws NullPointerException if graphics or text is null + */ + void draw(/*@Nonnull*/ Graphics2D g2d, + /*@Nonnull*/ String str, + /*@CheckForSigned*/ int x, + /*@CheckForSigned*/ int y); + + /** + * Renders a glyph into a graphics instance at a specific location. + * + *

              + * The surrounding region will already have been cleared to the RGB color (0, 0, 0) with + * zero alpha. The initial drawing context of the passed Graphics2D will be set to use + * AlphaComposite.Src, the color white, the Font specified in the TextRenderer's + * constructor, and the rendering hints specified in the TextRenderer constructor. + * + *

              + * Changes made by the end user may be visible in successive calls to this method, but are + * not guaranteed to be preserved. Implementations should reset the Graphics2D's state to + * that desired each time this method is called, in particular those states which are not + * the defaults. + * + * @param g2d Graphics to render into + * @param gv Glyph to render + * @param x Location on X axis to render at + * @param y Location on Y axis to render at + * @throws NullPointerException if graphics or glyph is null + */ + void drawGlyphVector(/*@Nonnull*/ Graphics2D g2d, + /*@Nonnull*/ GlyphVector gv, + /*@CheckForSigned*/ int x, + /*@CheckForSigned*/ int y); + + /** + * Computes the bounds of a character sequence relative to the origin. + * + * @param text Text to compute bounds of + * @param font Font text renderer is using + * @param frc Device-dependent details of how text should be rendered + * @return Rectangle surrounding the text, not null + * @throws NullPointerException if text, font, or font render context is null + */ + /*@Nonnull*/ + Rectangle2D getBounds(/*@Nonnull*/ CharSequence text, + /*@Nonnull*/ Font font, + /*@Nonnull*/ FontRenderContext frc); + + /** + * Computes the bounds of a glyph relative to the origin. + * + * @param gv Glyph to compute bounds of (non-null) + * @param frc Device-dependent details of how text should be rendered (non-null) + * @return Rectangle surrounding the text (non-null) + * @throws NullPointerException if glyph or font render context is null + */ + Rectangle2D getBounds(/*@Nonnull*/ GlyphVector gv, /*@Nonnull*/ FontRenderContext frc); + + /** + * Computes the bounds of a string relative to the origin. + * + * @param text Text to compute bounds of + * @param font Font text renderer is using + * @param frc Device-dependent details of how text should be rendered (non-null) + * @return Rectangle surrounding the text, not null + * @throws NullPointerException if text, font, or font render context is null + */ + Rectangle2D getBounds(/*@Nonnull*/ String text, + /*@Nonnull*/ Font font, + /*@Nonnull*/ FontRenderContext frc); + + /** + * Indicates whether the backing store should be intensity-only or full-color. + * + *

              + * Note that currently the text renderer does not support full-color. It will throw an + * {@link UnsupportedOperationException} if the render delegate requests full-color. + * + * @return True if the backing store should be intensity-only + */ + boolean intensityOnly(); + } + + /** + * Simple render delegate if one is not specified by the user. + */ + /*@Immmutable*/ + public static class DefaultRenderDelegate implements RenderDelegate { + + @Override + public void draw(/*@Nonnull*/ final Graphics2D g2d, + /*@Nonnull*/ final String str, + /*@CheckForSigned*/ final int x, + /*@CheckForSigned*/ final int y) { + + Check.notNull(g2d, "Graphics cannot be null"); + Check.notNull(str, "String cannot be null"); + + g2d.drawString(str, x, y); + } + + @Override + public void drawGlyphVector(/*@Nonnull*/ final Graphics2D g2d, + /*@Nonnull*/ final GlyphVector gv, + /*@CheckForSigned*/ final int x, + /*@CheckForSigned*/ final int y) { + + Check.notNull(g2d, "Graphics cannot be null"); + Check.notNull(gv, "Glyph vector cannot be null"); + + g2d.drawGlyphVector(gv, x, y); + } + + /*@Nonnull*/ + @Override + public Rectangle2D getBounds(/*@Nonnull*/ final CharSequence text, + /*@Nonnull*/ final Font font, + /*@Nonnull*/ final FontRenderContext frc) { + + Check.notNull(text, "Text cannot be null"); + Check.notNull(font, "Font cannot be null"); + Check.notNull(frc, "Font render context cannot be null"); + + return getBounds(text.toString(), font, frc); + } + + /*@Nonnull*/ + @Override + public Rectangle2D getBounds(/*@Nonnull*/ final GlyphVector gv, + /*@Nonnull*/ final FontRenderContext frc) { + + Check.notNull(gv, "Glyph vector cannot be null"); + Check.notNull(frc, "Font render context cannot be null"); + + return gv.getVisualBounds(); + } + + /*@Nonnull*/ + @Override + public Rectangle2D getBounds(/*@Nonnull*/ final String text, + /*@Nonnull*/ final Font font, + /*@Nonnull*/ final FontRenderContext frc) { + + Check.notNull(text, "Text cannot be null"); + Check.notNull(font, "Font cannot be null"); + Check.notNull(frc, "Font render context cannot be null"); + + return getBounds(font.createGlyphVector(frc, text), frc); + } + + @Override + public boolean intensityOnly() { + return true; + } + } + + /** + * Utility for coordinating text renderer components. + */ + private final class Mediator implements GlyphCache.EventListener, GlyphRenderer.EventListener { + + @Override + public void onGlyphCacheEvent(/*@Nonnull*/ final GlyphCache.EventType type, + /*@Nonnull*/ final Object data) { + + Check.notNull(type, "Event type cannot be null"); + //Check.notNull(data, "Data cannot be null"); + + switch (type) { + case REALLOCATE: + flush(); + break; + case CLEAR: + glyphProducer.clearGlyphs(); + break; + case CLEAN: + glyphProducer.removeGlyph((Glyph) data); + break; + } + } + + @Override + public void onGlyphRendererEvent(/*@Nonnull*/ final GlyphRenderer.EventType type) { + + Check.notNull(type, "Event type cannot be null"); + + switch (type) { + case AUTOMATIC_FLUSH: + final GL gl = GLContext.getCurrentGL(); + glyphCache.update(gl); + break; + } + } + } + + /** + * Proxy for a {@link GlyphRenderer}. + */ + /*@NotThreadSafe*/ + private static final class GlyphRendererProxy implements GlyphRenderer { + + /** + * Delegate to actually render. + */ + /*@CheckForNull*/ + private GlyphRenderer delegate; + + /** + * Listeners added before a delegate is chosen. + */ + /*@Nonnull*/ + private final List listeners = new ArrayList(); + + /** + * Red component of color. + */ + /*@CheckForSigned*/ + private Float r; + + /** + * Green component of color. + */ + /*@CheckForSigned*/ + private Float g; + + /** + * Blue component of color. + */ + /*@CheckForSigned*/ + private Float b; + + /** + * Alpha component of color. + */ + /*@CheckForSigned*/ + private Float a; + + /** + * Transform matrix. + */ + /*@CheckForNull*/ + private float[] transform; + + /** + * True if transform is transposed. + */ + /*@CheckForNull*/ + private Boolean transposed; + + /** + * True to use vertex arrays. + */ + private boolean useVertexArrays = true; + + GlyphRendererProxy() { + // empty + } + + @Override + public void addListener(/*@Nonnull*/ final EventListener listener) { + + Check.notNull(listener, "Listener cannot be null"); + + if (delegate == null) { + listeners.add(listener); + } else { + delegate.addListener(listener); + } + } + + @Override + public void beginRendering(/*@Nonnull*/ final GL gl, + final boolean ortho, + /*@Nonnegative*/ final int width, + /*@Nonnegative*/ final int height, + final boolean disableDepthTest) { + + Check.notNull(gl, "GL cannot be null"); + Check.argument(width >= 0, "Width cannot be negative"); + Check.argument(height >= 0, "Height cannot be negative"); + + if (delegate == null) { + + // Create the glyph renderer + delegate = GlyphRenderers.get(gl); + + // Add the event listeners + for (EventListener listener : listeners) { + delegate.addListener(listener); + } + + // Specify the color + if ((r != null) && (g != null) && (b != null) && (a != null)) { + delegate.setColor(r, g, b, a); + } + + // Specify the transform + if ((transform != null) && (transposed != null)) { + delegate.setTransform(transform, transposed); + } + + // Specify whether to use vertex arrays or not + delegate.setUseVertexArrays(useVertexArrays); + } + delegate.beginRendering(gl, ortho, width, height, disableDepthTest); + } + + @Override + public void dispose(/*@Nonnull*/ final GL gl) { + + Check.notNull(gl, "GL cannot be null"); + + if (delegate != null) { + delegate.dispose(gl); + } + } + + @Override + public float drawGlyph(/*@Nonnull*/ final GL gl, + /*@Nonnull*/ final Glyph glyph, + /*@CheckForSigned*/ final float x, + /*@CheckForSigned*/ final float y, + /*@CheckForSigned*/ final float z, + /*@CheckForSigned*/ final float scale, + /*@Nonnull*/ final TextureCoords coords) { + + Check.notNull(gl, "GL cannot be null"); + Check.notNull(glyph, "Glyph cannot be null"); + Check.notNull(coords, "Texture coordinates cannot be null"); + + if (delegate == null) { + throw new IllegalStateException("Must be in render cycle!"); + } else { + return delegate.drawGlyph(gl, glyph, x, y, z, scale, coords); + } + } + + @Override + public void endRendering(/*@Nonnull*/ final GL gl) { + + Check.notNull(gl, "GL cannot be null"); + + if (delegate == null) { + throw new IllegalStateException("Must be in render cycle!"); + } else { + delegate.endRendering(gl); + } + } + + @Override + public void flush(/*@Nonnull*/ final GL gl) { + + Check.notNull(gl, "GL cannot be null"); + + if (delegate == null) { + throw new IllegalStateException("Must be in render cycle!"); + } else { + delegate.flush(gl); + } + } + + @Override + public boolean getUseVertexArrays() { + if (delegate == null) { + return useVertexArrays; + } else { + return delegate.getUseVertexArrays(); + } + } + + @Override + public void setColor(/*@CheckForSigned*/ final float r, + /*@CheckForSigned*/ final float g, + /*@CheckForSigned*/ final float b, + /*@CheckForSigned*/ final float a) { + if (delegate == null) { + this.r = r; + this.g = g; + this.b = b; + this.a = a; + } else { + delegate.setColor(r, g, b, a); + } + } + + @Override + public void setTransform(/*@Nonnull*/ final float[] value, final boolean transpose) { + + Check.notNull(value, "Value cannot be null"); + + if (delegate == null) { + this.transform = Arrays.copyOf(value, value.length); + this.transposed = transpose; + } else { + delegate.setTransform(value, transpose); + } + } + + @Override + public void setUseVertexArrays(final boolean useVertexArrays) { + if (delegate == null) { + this.useVertexArrays = useVertexArrays; + } else { + delegate.setUseVertexArrays(useVertexArrays); + } + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/AbstractGlyphProducer.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/AbstractGlyphProducer.java new file mode 100644 index 0000000000..2350faaa60 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/AbstractGlyphProducer.java @@ -0,0 +1,394 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import java.awt.Font; +import java.awt.font.FontRenderContext; +import java.awt.font.GlyphMetrics; +import java.awt.font.GlyphVector; +import java.awt.geom.Rectangle2D; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import jogamp.text.TextRenderer.RenderDelegate; + + +/** + * Skeletal implementation of {@link GlyphProducer}. + */ +abstract class AbstractGlyphProducer implements GlyphProducer { + + /** + * Reusable array for creating glyph vectors for a single character. + */ + /*@Nonnull*/ + private final char[] characters = new char[1]; + + /** + * Font glyphs made from. + */ + /*@Nonnull*/ + private final Font font; + + /** + * Rendering controller. + */ + /*@Nonnull*/ + private final RenderDelegate renderDelegate; + + /** + * Font render details. + */ + /*@Nonnull*/ + private final FontRenderContext fontRenderContext; + + /** + * Cached glyph vectors. + */ + /*@Nonnull*/ + private final Map glyphVectors = new HashMap(); + + /** + * Returned glyphs. + */ + /*@Nonnull*/ + private final List output = new ArrayList(); + + /** + * View of glyphs. + */ + /*@Nonnull*/ + private final List outputView = Collections.unmodifiableList(output); + + /** + * Constructs an abstract glyph producer. + * + * @param font Font glyphs will be made from + * @param rd Object for controlling rendering + * @param frc Details on how to render fonts + * @throws NullPointerException if font, render delegate, or font render context is null + */ + AbstractGlyphProducer(/*@Nonnull*/ final Font font, + /*@Nonnull*/ final RenderDelegate rd, + /*@Nonnull*/ final FontRenderContext frc) { + + Check.notNull(font, "Font cannot be null"); + Check.notNull(rd, "Render delegate cannot be null"); + Check.notNull(frc, "Font render context cannot be null"); + + this.font = font; + this.renderDelegate = rd; + this.fontRenderContext = frc; + } + + /** + * Adds outer space around a rectangle. + * + *

              + * This method was formally called "normalize." + * + *

              + * Give ourselves a boundary around each entity on the backing store in order to prevent + * bleeding of nearby Strings due to the fact that we use linear filtering + * + *

              + * Note that this boundary is quite heuristic and is related to how far away in 3D we may view + * the text -- heuristically, 1.5% of the font's height. + * + * @param src Original rectangle + * @param font Font being used to create glyphs + * @return Rectangle with margin added, not null + * @throws NullPointerException if rectangle or font is null + */ + /*@Nonnull*/ + private static Rectangle2D addMarginTo(/*@Nonnull*/ final Rectangle2D src, + /*@Nonnull*/ final Font font) { + + final int boundary = (int) Math.max(1, 0.015 * font.getSize()); + final int x = (int) Math.floor(src.getMinX() - boundary); + final int y = (int) Math.floor(src.getMinY() - boundary); + final int w = (int) Math.ceil(src.getWidth() + 2 * boundary); + final int h = (int) Math.ceil(src.getHeight() + 2 * boundary); + ; + + return new Rectangle2D.Float(x, y, w, h); + } + + /** + * Adds inner space to a rectangle. + * + *

              + * This method was formally called "preNormalize." + * + *

              + * Need to round to integer coordinates. + * + *

              + * Also give ourselves a little slop around the reported bounds of glyphs because it looks like + * neither the visual nor the pixel bounds works perfectly well. + * + * @param src Original rectangle + * @return Rectangle with padding added, not null + * @throws NullPointerException if rectangle is null + */ + /*@Nonnull*/ + private static Rectangle2D addPaddingTo(/*@Nonnull*/ final Rectangle2D src) { + + final int minX = (int) Math.floor(src.getMinX()) - 1; + final int minY = (int) Math.floor(src.getMinY()) - 1; + final int maxX = (int) Math.ceil(src.getMaxX()) + 1; + final int maxY = (int) Math.ceil(src.getMaxY()) + 1; + + return new Rectangle2D.Float(minX, minY, maxX - minX, maxY - minY); + } + + /** + * Adds a glyph to the reusable list for output. + * + * @param glyph Glyph to add to output + * @throws NullPointerException if glyph is null + */ + protected final void addToOutput(/*@Nonnull*/ final Glyph glyph) { + Check.notNull(glyph, "Glyph cannot be null"); + output.add(glyph); + } + + /** + * Clears the reusable list for output. + */ + protected final void clearOutput() { + output.clear(); + } + + /** + * Makes a glyph vector for a character. + * + * @param c Character to create glyph vector from + * @return Glyph vector for the character, not null + */ + /*@Nonnull*/ + protected final GlyphVector createGlyphVector(final char c) { + characters[0] = c; + return font.createGlyphVector(fontRenderContext, characters); + } + + /** + * Makes a glyph vector for a string. + * + * @param font Style of text + * @param frc Details on how to render font + * @param str Text as a string + * @return Glyph vector for the string, not null + * @throws NullPointerException if string is null + */ + /*@Nonnull*/ + protected final GlyphVector createGlyphVector(/*@Nonnull*/ final String str) { + + Check.notNull(str, "String cannot be null"); + + GlyphVector gv = glyphVectors.get(str); + + // Check if already made + if (gv != null) { + return gv; + } + + // Otherwise make and store it + final char[] text = str.toCharArray(); + final int len = str.length(); + gv = font.layoutGlyphVector(fontRenderContext, text, 0, len, 0); + glyphVectors.put(str, gv); + return gv; + } + + /*@CheckForSigned*/ + @Override + public final float findAdvance(final char c) { + + // Check producer's inventory first + final Glyph glyph = createGlyph(c); + if (glyph != null) { + return glyph.advance; + } + + // Otherwise create the glyph vector + final GlyphVector gv = createGlyphVector(c); + final GlyphMetrics gm = gv.getGlyphMetrics(0); + return gm.getAdvance(); + } + + /*@Nonnull*/ + @Override + public final Rectangle2D findBounds(/*@Nonnull*/ final String str) { + + Check.notNull(str, "String cannot be null"); + + final List glyphs = createGlyphs(str); + + // Check if already computed bounds + if (glyphs.size() == 1) { + final Glyph glyph = glyphs.get(0); + return glyph.bounds; + } + + // Otherwise just recompute it + return addPaddingTo(renderDelegate.getBounds(str, font, fontRenderContext)); + } + + /** + * Returns the font used to create glyphs. + * + * @return Font used to create glyphs, not null + */ + /*@Nonnull*/ + protected final Font getFont() { + return font; + } + + /** + * Returns a read-only view of this producer's reusable list for output. + * + * @return Read-only view of reusable list, not null + */ + /*@Nonnull*/ + protected final List getOutput() { + return outputView; + } + + /** + * Checks if any characters in a string require full layout. + * + *

              + * The process of creating and laying out glyph vectors is relatively complex and can slow down + * text rendering significantly. This method is intended to increase performance by not + * creating glyph vectors for strings with characters that can be treated independently. + * + *

              + * Currently the decision is very simple. It just treats any characters above the IPA + * Extensions block as complex. This is convenient because most Latin characters are + * treated as simple but Spacing Modifier Letters and Combining Diacritical Marks + * are not. Ideally it would also be nice to have a few other blocks included, especially + * Greek and maybe symbols, but that is perhaps best left for later work. + * + *

              + * A truly correct implementation may require a lot of research or developers with more + * experience in the area. However, the following Unicode blocks are known to require full + * layout in some form: + * + *

                + *
              • Spacing Modifier Letters (02B0-02FF) + *
              • Combining Diacritical Marks (0300-036F) + *
              • Hebrew (0590-05FF) + *
              • Arabic (0600-06FF) + *
              • Arabic Supplement (0750-077F) + *
              • Combining Diacritical Marks Supplement (1DC0-1FFF) + *
              • Combining Diacritical Marks for Symbols (20D0-20FF) + *
              • Arabic Presentation Forms-A (FB50–FDFF) + *
              • Combining Half Marks (FE20–FE2F) + *
              • Arabic Presentation Forms-B (FE70–FEFF) + *
              + * + *

              + * Asian scripts will also have letters that combine together, but it appears that the input + * method may take care of that so it may not be necessary to check for them here. + * + *

              + * Finally, it should be noted that even Latin has characters that can combine into glyphs + * called ligatures. The classic example is an 'f' and an 'i'. Java however will not make the + * replacements itself so we do not need to consider that here. + * + * @param str Text of unknown character types + * @return True if a complex character is found + * @throws NullPointerException if string is null + */ + protected static boolean hasComplexCharacters(/*@Nonnull*/ final String str) { + + Check.notNull(str, "String cannot be null"); + + final int len = str.length(); + for (int i = 0; i < len; ++i) { + if (str.charAt(i) > 0x2AE) { + return true; + } + } + return false; + } + + /** + * Checks if a glyph vector is complex. + * + * @param gv Glyph vector to check + * @return True if glyph vector is complex + * @throws NullPointerException if glyph vector is null + */ + protected static boolean isComplex(/*@CheckForNull*/ final GlyphVector gv) { + + Check.notNull(gv, "Glyph vector cannot be null"); + + return gv.getLayoutFlags() != 0; + } + + /** + * Measures a glyph. + * + *

              + * Sets all the measurements in a glyph after it's created. + * + * @param glyph Visual representation of a character + * @throws NullPointerException if glyph is null + */ + protected final void measure(/*@Nonnull*/ final Glyph glyph) { + + Check.notNull(glyph, "Glyph cannot be null"); + + // Compute visual boundary + final Rectangle2D visualBox; + if (glyph.str != null) { + visualBox = renderDelegate.getBounds(glyph.str, font, fontRenderContext); + } else { + visualBox = renderDelegate.getBounds(glyph.glyphVector, fontRenderContext); + } + + // Compute rectangles + final Rectangle2D paddingBox = addPaddingTo(visualBox); + final Rectangle2D marginBox = addMarginTo(paddingBox, font); + + // Set fields + glyph.padding = new Glyph.Boundary(paddingBox, visualBox); + glyph.margin = new Glyph.Boundary(marginBox, paddingBox); + glyph.width = (float) paddingBox.getWidth(); + glyph.height = (float) paddingBox.getHeight(); + glyph.ascent = (float) paddingBox.getMinY() * -1; + glyph.descent = (float) paddingBox.getMaxY(); + glyph.kerning = (float) paddingBox.getMinX(); + glyph.bounds = paddingBox; + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/AbstractGlyphRenderer.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/AbstractGlyphRenderer.java new file mode 100644 index 0000000000..9dd3cfcdcb --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/AbstractGlyphRenderer.java @@ -0,0 +1,477 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import com.jogamp.opengl.GL; +import com.jogamp.opengl.GLContext; +import com.jogamp.opengl.util.texture.TextureCoords; +import java.util.ArrayList; +import java.util.List; + + +/** + * Skeletal implementation of {@link GlyphRenderer}. + */ +abstract class AbstractGlyphRenderer implements GlyphRenderer, QuadPipeline.EventListener { + + // Default color + private static float DEFAULT_RED = 1.0f; + private static float DEFAULT_GREEN = 1.0f; + private static float DEFAULT_BLUE = 1.0f; + private static float DEFAULT_ALPHA = 1.0f; + + /** + * Listeners to send events to. + */ + /*@Nonnull*/ + private final List listeners = new ArrayList(); + + /** + * Quad to send to pipeline. + */ + /*@Nonnull*/ + private final Quad quad = new Quad(); + + /** + * Buffer of quads. + */ + /*@CheckForNull*/ + private QuadPipeline pipeline = null; + + /** + * Whether pipeline needs to be flushed. + */ + private boolean pipelineDirty = true; + + /** + * True if between begin and end calls. + */ + private boolean inRenderCycle = false; + + /** + * True if orthographic. + */ + private boolean orthoMode = false; + + /** + * Red component of color. + */ + private float r = DEFAULT_RED; + + /** + * Green component of color. + */ + private float g = DEFAULT_GREEN; + + /** + * Blue component of color. + */ + private float b = DEFAULT_BLUE; + + /** + * Alpha component of color. + */ + private float a = DEFAULT_ALPHA; + + /** + * True if color needs to be updated. + */ + private boolean colorDirty = true; + + /** + * Transformation matrix for 3D mode. + */ + /*@Nonnull*/ + private final float[] transform = new float[16]; + + /** + * Whether transformation matrix is in row-major order instead of column-major. + */ + private boolean transposed = false; + + // TODO: Should `transformDirty` start out as true? + /** + * Whether transformation matrix needs to be updated. + */ + private boolean transformDirty = false; + + /** + * Constructs an {@link AbstractGlyphRenderer}. + */ + AbstractGlyphRenderer() { + // empty + } + + @Override + public final void addListener(/*@Nonnull*/ final EventListener listener) { + + Check.notNull(listener, "Listener cannot be null"); + + listeners.add(listener); + } + + @Override + public final void beginRendering(/*@Nonnull*/ final GL gl, + final boolean ortho, + /*@Nonnegative*/ final int width, + /*@Nonnegative*/ final int height, + final boolean disableDepthTest) { + + Check.notNull(gl, "GL cannot be null"); + Check.argument(width >= 0, "Width cannot be negative"); + Check.argument(height >= 0, "Height cannot be negative"); + + // Perform hook + doBeginRendering(gl, ortho, width, height, disableDepthTest); + + // Store text renderer state + inRenderCycle = true; + orthoMode = ortho; + + // Make sure the pipeline is made + if (pipelineDirty) { + setPipeline(gl, doCreateQuadPipeline(gl)); + } + + // Pass to quad renderer + pipeline.beginRendering(gl); + + // Make sure color is correct + if (colorDirty) { + doSetColor(gl, r, g, b, a); + colorDirty = false; + } + + // Make sure transform is correct + if (transformDirty) { + doSetTransform3d(gl, transform, transposed); + transformDirty = false; + } + } + + /** + * Requests that the pipeline be replaced on the next call to {@link #beginRendering}. + */ + protected final void dirtyPipeline() { + pipelineDirty = true; + } + + @Override + public final void dispose(/*@Nonnull*/ final GL gl) { + + Check.notNull(gl, "GL cannot be null"); + + doDispose(gl); + listeners.clear(); + pipeline.dispose(gl); + } + + /** + * Actually starts a render cycle. + * + * @param gl Current OpenGL context + * @param ortho True if using orthographic projection + * @param width Width of current OpenGL viewport + * @param height Height of current OpenGL viewport + * @param disableDepthTest True if should ignore depth values + * @throws NullPointerException if context is null + * @throws IllegalArgumentException if width or height is negative + * @throws GLException if context is unexpected version + */ + protected abstract void doBeginRendering(/*@Nonnull*/ final GL gl, + final boolean ortho, + /*@Nonnegative*/ final int width, + /*@Nonnegative*/ final int height, + final boolean disableDepthTest); + + /** + * Actually creates the quad pipeline for rendering quads. + * + * @param gl Current OpenGL context + * @return Quad pipeline to render quads with + * @throws NullPointerException if context is null + * @throws GLException if context is unexpected version + */ + protected abstract QuadPipeline doCreateQuadPipeline(/*@Nonnull*/ final GL gl); + + /** + * Actually frees resources used by the renderer. + * + * @param gl Current OpenGL context + * @throws NullPointerException if context is null + * @throws GLException if context is unexpected version + */ + protected abstract void doDispose(/*@Nonnull*/ final GL gl); + + /** + * Actually finishes a render cycle. + * + * @param gl Current OpenGL context + * @throws NullPointerException if context is null + * @throws GLException if context is unexpected version + */ + protected abstract void doEndRendering(/*@Nonnull*/ final GL gl); + + /** + * Actually changes the color when user calls {@link #setColor}. + * + * @param gl Current OpenGL context + * @param r Red component of color + * @param g Green component of color + * @param b Blue component of color + * @param a Alpha component of color + * @throws NullPointerException if context is null + * @throws GLException if context is unexpected version + */ + protected abstract void doSetColor(/*@Nonnull*/ final GL gl, + float r, + float g, + float b, + float a); + + /** + * Actually changes the MVP matrix when using an arbitrary projection. + * + * @param gl Current OpenGL context + * @param value Matrix as float array + * @param transpose True if in row-major order + * @throws NullPointerException if context is null + * @throws GLException if context is unexpected version + * @throws IndexOutOfBoundsException if length of value is less than sixteen + */ + protected abstract void doSetTransform3d(/*@Nonnull*/ GL gl, + /*@Nonnull*/ float[] value, + boolean transpose); + + /** + * Actually changes the MVP matrix when using orthographic projection. + * + * @param gl Current OpenGL context + * @param width Width of viewport + * @param height Height of viewport + * @throws NullPointerException if context is null + * @throws GLException if context is unexpected version + * @throws IllegalArgumentException if width or height is negative + */ + protected abstract void doSetTransformOrtho(/*@Nonnull*/ GL gl, + /*@Nonnegative*/ int width, + /*@Nonnegative*/ int height); + + @Override + public final float drawGlyph(/*@Nonnull*/ final GL gl, + /*@Nonnull*/ final Glyph glyph, + /*@CheckForSigned*/ final float x, + /*@CheckForSigned*/ final float y, + /*@CheckForSigned*/ final float z, + /*@CheckForSigned*/ final float scale, + /*@Nonnull*/ final TextureCoords coords) { + + Check.notNull(gl, "GL cannot be null"); + Check.notNull(glyph, "Glyph cannot be null"); + Check.notNull(coords, "Texture coordinates cannot be null"); + + // Compute position and size + quad.xl = x + (scale * glyph.kerning); + quad.xr = quad.xl + (scale * glyph.width); + quad.yb = y - (scale * glyph.descent); + quad.yt = quad.yb + (scale * glyph.height); + quad.z = z; + quad.sl = coords.left(); + quad.sr = coords.right(); + quad.tb = coords.bottom(); + quad.tt = coords.top(); + + // Draw quad + pipeline.addQuad(gl, quad); + + // Return distance to next character + return glyph.advance; + } + + @Override + public final void endRendering(/*@Nonnull*/ final GL gl) { + + Check.notNull(gl, "GL cannot be null"); + + // Store text renderer state + inRenderCycle = false; + + // Pass to quad renderer + pipeline.endRendering(gl); + + // Perform hook + doEndRendering(gl); + } + + /** + * Fires an event to all observers. + * + * @param type Kind of event + * @throws NullPointerException if type is null + */ + protected final void fireEvent(/*@Nonnull*/ final EventType type) { + + Check.notNull(type, "Event type cannot be null"); + + for (final EventListener listener : listeners) { + assert listener != null : "addListener rejects null"; + listener.onGlyphRendererEvent(type); + } + } + + @Override + public final void flush(/*@Nonnull*/ final GL gl) { + + Check.notNull(gl, "GL cannot be null"); + +// Commented to work in Jzy3D (uncomment won't prevent tests to pass) +// Check.state(inRenderCycle, "Must be in render cycle"); + + pipeline.flush(gl); + gl.glFlush(); + } + + /** + * Determines if a color is the same one that is stored. + * + * @param r Red component of color + * @param g Green component of color + * @param b Blue component of color + * @param a Alpha component of color + * @return True if each component matches + */ + final boolean hasColor(final float r, final float g, final float b, final float a) { + return (this.r == r) && (this.g == g) && (this.b == b) && (this.a == a); + } + + // TODO: Rename to `isOrthographic`? + + /** + * Checks if this {@link GlyphRenderer} using an orthographic projection. + * + * @return True if this renderer is using an orthographic projection + */ + final boolean isOrthoMode() { + return orthoMode; + } + + @Override + public final void onQuadPipelineEvent(/*@Nonnull*/ final QuadPipeline.EventType type) { + + Check.notNull(type, "Event type cannot be null"); + + if (type == QuadPipeline.EventType.AUTOMATIC_FLUSH) { + fireEvent(EventType.AUTOMATIC_FLUSH); + } + } + + @Override + public final void setColor(final float r, final float g, final float b, final float a) { + + // Check if already has the color + if (hasColor(r, g, b, a)) { + return; + } + + // Render any outstanding quads first + if (pipeline != null && !pipeline.isEmpty()) { + fireEvent(EventType.AUTOMATIC_FLUSH); + final GL gl = GLContext.getCurrentGL(); + flush(gl); + } + + // Store the color + this.r = r; + this.g = g; + this.b = b; + this.a = a; + + // Change the color + if (inRenderCycle) { + final GL gl = GLContext.getCurrentGL(); + doSetColor(gl, r, g, b, a); + } else { + colorDirty = true; + } + } + + /** + * Changes the quad pipeline. + * + * @param gl Current OpenGL context + * @param pipeline Quad pipeline to change to + */ + private final void setPipeline(/*@Nonnull*/ final GL gl, + /*@Nonnull*/ final QuadPipeline pipeline) { + + assert gl != null : "GL should not be null"; + assert pipeline != null : "Pipeline should not be null"; + + final QuadPipeline oldPipeline = this.pipeline; + final QuadPipeline newPipeline = pipeline; + + // Remove the old pipeline + if (oldPipeline != null) { + oldPipeline.removeListener(this); + oldPipeline.dispose(gl); + this.pipeline = null; + } + + // Store the new pipeline + newPipeline.addListener(this); + this.pipeline = newPipeline; + pipelineDirty = false; + } + + @Override + public final void setTransform(/*@Nonnull*/ final float[] value, final boolean transpose) { + + Check.notNull(value, "Transform value cannot be null"); + Check.state(!orthoMode, "Must be in 3D mode"); + + // Render any outstanding quads first + if (!pipeline.isEmpty()) { + fireEvent(EventType.AUTOMATIC_FLUSH); + final GL gl = GLContext.getCurrentGL(); + flush(gl); + } + + // Store the transform + System.arraycopy(value, 0, this.transform, 0, value.length); + this.transposed = transpose; + + // Change the transform + if (inRenderCycle) { + final GL gl = GLContext.getCurrentGL(); + doSetTransform3d(gl, value, transpose); + } else { + transformDirty = true; + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/AbstractQuadPipeline.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/AbstractQuadPipeline.java new file mode 100644 index 0000000000..c80486a2ee --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/AbstractQuadPipeline.java @@ -0,0 +1,440 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import com.jogamp.common.nio.Buffers; +import com.jogamp.opengl.GL; +import com.jogamp.opengl.GL2GL3; +import java.nio.FloatBuffer; +import java.util.ArrayList; +import java.util.List; + + +/** + * Skeletal implementation of {@link QuadPipeline}. + */ +abstract class AbstractQuadPipeline implements QuadPipeline { + + /** + * Number of bytes in one float. + */ + /*@Nonnegative*/ + static final int SIZEOF_FLOAT = 4; + + /** + * Number of bytes in one int. + */ + /*@Nonnegative*/ + static final int SIZEOF_INT = 4; + + /** + * Maximum number of quads in the buffer. + */ + /*@Nonnegative*/ + static final int QUADS_PER_BUFFER = 100; + + /** + * Number of components in a point attribute. + */ + /*@Nonnegative*/ + static final int FLOATS_PER_POINT = 3; + + /** + * Number of components in a texture coordinate attribute + */ + /*@Nonnegative*/ + static final int FLOATS_PER_COORD = 2; + + /** + * Total components in vertex. + */ + /*@Nonnegative*/ + static final int FLOATS_PER_VERT = FLOATS_PER_POINT + FLOATS_PER_COORD; + + /** + * Size of a point attribute in bytes. + */ + /*@Nonnegative*/ + static final int BYTES_PER_POINT = FLOATS_PER_POINT * SIZEOF_FLOAT; + + /** + * Size of a texture coordinate attribute in bytes. + */ + /*@Nonnegative*/ + static final int BYTES_PER_COORD = FLOATS_PER_COORD * SIZEOF_FLOAT; + + /** + * Total size of a vertex in bytes. + */ + /*@Nonnegative*/ + static final int BYTES_PER_VERT = BYTES_PER_POINT + BYTES_PER_COORD; + + /** + * Number of bytes before first point attribute in buffer. + */ + /*@Nonnegative*/ + static final int POINT_OFFSET = 0; + + /** + * Number of bytes before first texture coordinate in buffer. + */ + /*@Nonnegative*/ + static final int COORD_OFFSET = BYTES_PER_POINT; + + /** + * Number of bytes between successive values for the same attribute. + */ + /*@Nonnegative*/ + static final int STRIDE = BYTES_PER_POINT + BYTES_PER_COORD; + + /** + * Maximum buffer size in floats. + */ + /*@Nonnegative*/ + final int FLOATS_PER_BUFFER; + + /** + * Maximum buffer size in bytes. + */ + /*@Nonnegative*/ + final int BYTES_PER_BUFFER; + + /** + * Number of vertices per primitive. + */ + /*@Nonnegative*/ + final int VERTS_PER_PRIM; + + /** + * Maximum buffer size in primitives. + */ + /*@Nonnegative*/ + final int PRIMS_PER_BUFFER; + + /** + * Maximum buffer size in vertices. + */ + /*@Nonnegative*/ + final int VERTS_PER_BUFFER; + + /** + * Size of a quad in vertices. + */ + /*@Nonnegative*/ + final int VERTS_PER_QUAD; + + /** + * Size of a quad in bytes. + */ + /*@Nonnegative*/ + final int BYTES_PER_QUAD; + + /** + * Size of a quad in primitives. + */ + /*@Nonnegative*/ + final int PRIMS_PER_QUAD; + + /** + * Observers of events. + */ + /*@Nonnull*/ + private final List listeners = new ArrayList(); + + /** + * Buffer of vertices. + */ + /*@Nonnull*/ + private final FloatBuffer data; + + /** + * Number of outstanding quads in the buffer. + */ + /*@Nonnegative*/ + private int size = 0; + + /** + * Constructs an abstract quad pipeline. + * + * @param vertsPerPrim Number of vertices per primitive + * @param primsPerQuad Number of primitives per quad + * @throws IllegalArgumentException if vertices or primitives is less than one + */ + AbstractQuadPipeline(/*@Nonnegative*/ final int vertsPerPrim, + /*@Nonnegative*/ final int primsPerQuad) { + + Check.argument(vertsPerPrim > 0, "Number of vertices is less than one"); + Check.argument(primsPerQuad > 0, "Number of primitives is less than one"); + + VERTS_PER_PRIM = vertsPerPrim; + PRIMS_PER_QUAD = primsPerQuad; + PRIMS_PER_BUFFER = primsPerQuad * QUADS_PER_BUFFER; + VERTS_PER_QUAD = vertsPerPrim * primsPerQuad; + VERTS_PER_BUFFER = PRIMS_PER_BUFFER * VERTS_PER_PRIM; + FLOATS_PER_BUFFER = FLOATS_PER_VERT * VERTS_PER_BUFFER; + BYTES_PER_BUFFER = BYTES_PER_VERT * VERTS_PER_BUFFER; + BYTES_PER_QUAD = BYTES_PER_VERT * VERTS_PER_QUAD; + + this.data = Buffers.newDirectFloatBuffer(FLOATS_PER_BUFFER); + } + + /** + * Adds a texture coordinate to the pipeline. + * + * @param s Texture coordinate for X axis + * @param t Texture coordinate for Y axis + */ + protected final void addCoord(final float s, final float t) { + data.put(s).put(t); + } + + /** + * Adds a point to the pipeline. + * + * @param x Position on X axis + * @param y Position on Y axis + * @param z Position on Z axis + */ + protected final void addPoint(final float x, final float y, final float z) { + data.put(x).put(y).put(z); + } + + @Override + public final void addListener(/*@Nonnull*/ final EventListener listener) { + + Check.notNull(listener, "Listener cannot be null"); + + listeners.add(listener); + } + + @Override + public final void addQuad(/*@Nonnull*/ final GL gl, /*@Nonnull*/ final Quad quad) { + + Check.notNull(gl, "Context cannot be null"); + Check.notNull(quad, "Quad cannot be null"); + + doAddQuad(quad); + if (++size >= QUADS_PER_BUFFER) { + fireEvent(EventType.AUTOMATIC_FLUSH); + flush(gl); + } + } + + @Override + public void beginRendering(/*@Nonnull*/ final GL gl) { + Check.notNull(gl, "GL cannot be null"); + } + + /** + * Rewinds the buffer and resets the number of outstanding quads. + */ + protected final void clear() { + data.rewind(); + size = 0; + } + + /** + * Creates a vertex buffer object for use with a pipeline. + * + * @param gl Current OpenGL context + * @param size Size in bytes of buffer + * @return OpenGL handle to vertex buffer object + * @throws NullPointerException if context is null + * @throws IllegalArgumentException if size is negative + */ + /*@Nonnegative*/ + protected static int createVertexBufferObject(/*@Nonnull*/ final GL2GL3 gl, + /*@Nonnegative*/ final int size) { + + Check.notNull(gl, "GL cannot be null"); + Check.argument(size >= 0, "Size cannot be negative"); + + // Generate + final int[] handles = new int[1]; + gl.glGenBuffers(1, handles, 0); + final int vbo = handles[0]; + + // Allocate + gl.glBindBuffer(GL2GL3.GL_ARRAY_BUFFER, vbo); + gl.glBufferData( + GL2GL3.GL_ARRAY_BUFFER, // target + size, // size + null, // data + GL2GL3.GL_STREAM_DRAW); // usage + gl.glBindBuffer(GL2GL3.GL_ARRAY_BUFFER, 0); + + return vbo; + } + + @Override + public void dispose(/*@Nonnull*/ final GL gl) { + + Check.notNull(gl, "GL cannot be null"); + + listeners.clear(); + } + + /** + * Actually adds vertices from a quad to the buffer. + * + * @param quad Quad to add + * @throws NullPointerException if quad is null + */ + protected void doAddQuad(/*@Nonnull*/ final Quad quad) { + + Check.notNull(quad, "Quad cannot be null"); + + addPoint(quad.xr, quad.yt, quad.z); + addCoord(quad.sr, quad.tt); + addPoint(quad.xl, quad.yt, quad.z); + addCoord(quad.sl, quad.tt); + addPoint(quad.xl, quad.yb, quad.z); + addCoord(quad.sl, quad.tb); + addPoint(quad.xr, quad.yb, quad.z); + addCoord(quad.sr, quad.tb); + } + + /** + * Actually draws everything in the pipeline. + * + * @param gl Current OpenGL context + * @throws NullPointerException if context is null + * @throws GLException if context is unexpected version + */ + protected abstract void doFlush(/*@Nonnull*/ final GL gl); + + @Override + public void endRendering(/*@Nonnull*/ final GL gl) { + + Check.notNull(gl, "GL cannot be null"); + + flush(gl); + } + + /** + * Fires an event to all observers. + * + * @param type Type of event to send to observers + * @throws NullPointerException if type is null + */ + protected final void fireEvent(/*@Nonnull*/ final EventType type) { + + Check.notNull(type, "Type cannot be null"); + + for (final EventListener listener : listeners) { + assert listener != null : "addListener rejects null"; + listener.onQuadPipelineEvent(type); + } + } + + @Override + public final void flush(/*@Nonnull*/ final GL gl) { + + Check.notNull(gl, "GL cannot be null"); + + if (size > 0) { + doFlush(gl); + } + } + + /** + * Returns NIO buffer backing the pipeline. + */ + /*@Nonnull*/ + protected final FloatBuffer getData() { + return data; + } + + /** + * Returns next float in the pipeline. + */ + /*@CheckForSigned*/ + protected final float getFloat() { + return data.get(); + } + + /*@Nonnegative*/ + @Override + public final int getSize() { + return size; + } + + @Override + public final boolean isEmpty() { + return size == 0; + } + + /** + * Returns size of vertices in the pipeline in bytes. + */ + /*@Nonnegative*/ + public final int getSizeInBytes() { + return size * BYTES_PER_QUAD; + } + + /** + * Returns number of primitives in the pipeline. + */ + /*@Nonnegative*/ + public final int getSizeInPrimitives() { + return size * PRIMS_PER_QUAD; + } + + /** + * Returns number of vertices in the pipeline. + */ + /*@Nonnegative*/ + public final int getSizeInVertices() { + return size * VERTS_PER_QUAD; + } + + /** + * Changes the buffer's position. + * + * @param position Location in buffer to move to + * @throws IllegalArgumentException if position is out-of-range + */ + protected final void position(/*@Nonnegative*/ final int position) { + data.position(position); + } + + @Override + public final void removeListener(/*@CheckForNull*/ final EventListener listener) { + if (listener != null) { + listeners.remove(listener); + } + } + + /** + * Rewinds the data buffer. + */ + protected final void rewind() { + data.rewind(); + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/AsciiGlyphProducer.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/AsciiGlyphProducer.java new file mode 100644 index 0000000000..c200898f78 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/AsciiGlyphProducer.java @@ -0,0 +1,119 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import java.awt.Font; +import java.awt.font.FontRenderContext; +import java.awt.font.GlyphVector; +import java.util.List; +import jogamp.text.TextRenderer.RenderDelegate; + + +/** + * {@link GlyphProducer} that creates glyphs in the ASCII range. + */ +/*@NotThreadSafe*/ +final class AsciiGlyphProducer extends AbstractGlyphProducer { + + /** + * Storage for glyphs. + */ + /*@Nonnull*/ + private final Glyph[] inventory = new Glyph[128]; + + /** + * Constructs an {@link AsciiGlyphProducer}. + * + * @param font Font glyphs will be made from + * @param rd Delegate for controlling rendering + * @param frc Details on how to render fonts + * @throws NullPointerException if font, render delegate, or font render context is null + */ + AsciiGlyphProducer(/*@Nonnull*/ final Font font, + /*@Nonnull*/ final RenderDelegate rd, + /*@Nonnull*/ final FontRenderContext frc) { + super(font, rd, frc); + } + + @Override + public void clearGlyphs() { + // empty + } + + /*@Nonnull*/ + @Override + public Glyph createGlyph(char c) { + + // Check if out of range + if (c > 128) { + c = '_'; + } + + // Check if already created + Glyph glyph = inventory[c]; + if (glyph != null) { + return glyph; + } + + // Create glyph + GlyphVector gv = createGlyphVector(c); + glyph = new Glyph(c, gv); + measure(glyph); + + // Store and finish + inventory[c] = glyph; + return glyph; + } + + /*@Nonnull*/ + @Override + public List createGlyphs(/*@Nonnull*/ final String str) { + + Check.notNull(str, "String cannot be null"); + + // Clear the output + clearOutput(); + + // Add each glyph to the output + final int len = str.length(); + for (int i = 0; i < len; ++i) { + final char character = str.charAt(i); + final Glyph glyph = createGlyph(character); + addToOutput(glyph); + } + + // Return the output + return getOutput(); + } + + @Override + public void removeGlyph(/*@CheckForNull*/ final Glyph glyph) { + // empty + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/Check.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/Check.java new file mode 100644 index 0000000000..fca27ddb17 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/Check.java @@ -0,0 +1,59 @@ +package jogamp.text.util; + + +/** + * Utility for checking arguments and preconditions. + */ +/*@ThreadSafe*/ +public final class Check { + + /** + * Prevents instantiation. + */ + private Check() { + // empty + } + + /** + * Ensures an argument is valid. + * + * @param condition Condition involving argument that should be true + * @param message Message of exception thrown if condition is false + * @throws IllegalArgumentException if condition is false + */ + public static void argument(final boolean condition, /*@CheckForNull*/ final String message) { + if (!condition) { + throw new IllegalArgumentException(message); + } + } + + /** + * Ensures an object is not null. + * + * @param obj Object to check + * @param message Message of exception thrown if object is null + * @return Reference to the given object, not null + * @throws NullPointerException if object is null + */ + /*@Nonnull*/ + public static T notNull(/*@Nullable*/ final T obj, + /*@CheckForNull*/ final String message) { + if (obj == null) { + throw new NullPointerException(message); + } + return obj; + } + + /** + * Ensures the state of an object is valid when a method's called. + * + * @param condition Condition involving state that should be true + * @param message Message of exception thrown if condition is false + * @throws IllegalStateException if condition is false + */ + public static void state(final boolean condition, /*@CheckForNull*/ final String message) { + if (!condition) { + throw new IllegalStateException(message); + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/Glyph.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/Glyph.java new file mode 100644 index 0000000000..404934ca57 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/Glyph.java @@ -0,0 +1,317 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import com.jogamp.opengl.util.packrect.Rect; +import com.jogamp.opengl.util.texture.TextureCoords; +import java.awt.font.GlyphVector; +import java.awt.geom.Rectangle2D; + + +/** + * Representation of one or multiple unicode characters to be drawn. + * + *

              + * The reason for the dual behavior is so that we can take in a sequence of unicode characters and + * partition them into runs of individual glyphs, but if we encounter complex text and/or unicode + * sequences we don't understand, we can render them using the string-by-string method. + * + *

              Positioning

              + * + *

              + * In an effort to make positioning glyphs more intuitive for both Java2D's and OpenGL's coordinate + * systems, {@code Glyph} now stores its measurements differently. This new way is patterned off + * of HTML's box model. + * + *

              + * Of course, as expected each glyph maintains its width and height. For spacing however, rather + * than storing positions in Java2D space that must be manipulated on a case-by-case basis, + * {@code Glyph} stores two separate pre-computed boundaries representing space around the text. + * Each of the boundaries has separate top, bottom, left, and right components. These components + * should generally be considered positive, but negative values are sometimes necessary in rare + * situations. + * + *

              + * The first boundary is called padding. Padding is the space between the actual glyph + * itself and its border. It is included in the width and height of the glyph. The second + * boundary that a glyph stores is called margin, which is extra space around the glyph's + * border. The margin is generally used for separating the glyph from other glyphs when it's + * stored. + * + *

              + * The diagram below shows the boundaries of a glyph and how they relate to its width and height. + * The inner rectangle is the glyph's boundary, and the outer rectangle is the edge of the margin. + * + *

              + * +--------------------------------------+
              + * |             top margin               |
              + * |                                      |
              + * |        |------ WIDTH -------|        |
              + * |     -  +--------------------+        |
              + * |     |  |    top padding     |        |
              + * |     |  | l    ________    r |        |
              + * | l   |  | e   /        \   i |      r |
              + * | e      | f  |          |  g |      i |
              + * | f   H  | t  |          |  h |      g |
              + * | t   E  |    |          |  t |      h |
              + * |     I  | p  |     _____     |      t |
              + * | m   G  | a  |          |  p |        |
              + * | a   H  | d  |          |  a |      m |
              + * | r   T  | d  |          |  d |      a |
              + * | g      | i  |          |  d |      r |
              + * | i   |  | n  |          |  i |      g |
              + * | n   |  | g   \________/   n |      i |
              + * |     |  |                  g |      n |
              + * |     |  |   bottom padding   |        |
              + * |     -  +--------------------+        |
              + * |                                      |
              + * |                                      |
              + * |            bottom margin             |
              + * +--------------------------------------+
              + * 
              + * + *

              + * In addition, {@code Glyph} also keeps a few other measurements useful for positioning. + * Ascent is the distance between the baseline and the top border, while descent is + * the distance between the baseline and the bottom border. Kerning is the distance between + * the vertical baseline and the left border. Note that in some cases some of these fields can + * match up with padding components, but in general they should be considered separate. + * + *

              + * Below is a diagram showing ascent, descent, and kerning. + * + *

              + * +--------------------+   -
              + * |                    |   |
              + * |      ________      |   |
              + * |     /        \     |   |
              + * |    |          |    |   |
              + * |    |          |    |   |
              + * |    |          |    |   |
              + * |    |     _____     |   | ascent
              + * |    |          |    |   |
              + * |    |          |    |   |
              + * |    |          |    |   |
              + * |    |          |    |   |
              + * |    |          |    |   |
              + * |     \________/     |   -
              + * |                    |   |
              + * |                    |   | descent
              + * +--------------------+   -
              + *
              + * |--| kerning
              + * 
              + */ +/*@NotThreadSafe*/ +public final class Glyph { + + // TODO: Create separate Glyph implementations -- one for character one for string? + + /** + * Unicode ID if this glyph represents a single character, otherwise -1. + */ + /*@CheckForSigned*/ + final int id; + + /** + * String if this glyph represents multiple characters, otherwise null. + */ + /*@CheckForNull*/ + final String str; + + /** + * Font's identifier of glyph. + */ + final int code; + + /** + * Distance to next glyph. + */ + final float advance; + + /** + * Java2D shape of glyph. + */ + /*@Nonnull*/ + final GlyphVector glyphVector; + + /** + * Actual character if this glyph represents a single character, otherwise NUL. + */ + final char character; + + /** + * Width of text with inner padding. + */ + /*@VisibleForTesting*/ + public float width; + + /** + * Height of text with inner padding. + */ + /*@VisibleForTesting*/ + public float height; + + /** + * Length from baseline to top border. + */ + float ascent; + + /** + * Length from baseline to bottom border. + */ + float descent; + + /** + * Length from baseline to left padding. + */ + float kerning; + + /** + * Outer boundary excluded from size. + */ + /*@CheckForNull*/ + Boundary margin; + + /** + * Inner boundary included in size. + */ + /*@CheckForNull*/ + Boundary padding; + + /** + * Position of this glyph in texture. + */ + /*@CheckForNull*/ + public Rect location; + + /** + * Coordinates of this glyph in texture. + */ + /*@CheckForNull*/ + TextureCoords coordinates; + + /** + * Cached bounding box of glyph. + */ + /*@CheckForNull*/ + Rectangle2D bounds; + + /** + * Constructs a {@link Glyph} representing an individual Unicode character. + * + * @param id Unicode ID of character + * @param gv Vector shape of character + * @throws IllegalArgumentException if ID is negative + * @throws NullPointerException if glyph is null + */ + public Glyph(/*@Nonnegative*/ final int id, /*@Nonnull*/ final GlyphVector gv) { + + Check.argument(id >= 0, "ID cannot be negative"); + Check.notNull(gv, "Glyph vector cannot be null"); + + this.id = id; + this.str = null; + this.code = gv.getGlyphCode(0); + this.advance = gv.getGlyphMetrics(0).getAdvance(); + this.glyphVector = gv; + this.character = (char) id; + } + + /** + * Constructs a {@link Glyph} representing a sequence of characters. + * + * @param str Sequence of characters + * @param gv Vector shape of sequence + * @throws NullPointerException if string or glyph vector is null + */ + public Glyph(/*@Nonnull*/ final String str, /*@Nonnull*/ final GlyphVector gv) { + + Check.notNull(str, "String cannot be null"); + Check.notNull(gv, "Glyph vector cannot be null"); + + this.id = -1; + this.str = str; + this.code = -1; + this.advance = 0; + this.glyphVector = gv; + this.character = '\0'; + } + + /*@Nonnull*/ + @Override + public String toString() { + return (str != null) ? str : Character.toString(character); + } + + /** + * Space around a rectangle. + */ + /*@Immutable*/ + static final class Boundary { + + /** + * Space above rectangle. + */ + final int top; + + /** + * Space below rectangle. + */ + final int bottom; + + /** + * Space beside rectangle to left. + */ + final int left; + + /** + * Space beside rectangle to right. + */ + final int right; + + /** + * Constructs a {@link Boundary} by computing the distances between two rectangles. + * + * @param large Outer rectangle + * @param small Inner rectangle + * @throws NullPointerException if either rectangle is null + */ + Boundary(/*@Nonnull*/ final Rectangle2D large, /*@Nonnull*/ final Rectangle2D small) { + + Check.notNull(large, "Large rectangle cannot be null"); + Check.notNull(small, "Small rectangle cannot be null"); + + top = (int) (large.getMinY() - small.getMinY()) * -1; + left = (int) (large.getMinX() - small.getMinX()) * -1; + bottom = (int) (large.getMaxY() - small.getMaxY()); + right = (int) (large.getMaxX() - small.getMaxX()); + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/GlyphCache.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/GlyphCache.java new file mode 100644 index 0000000000..ba47bc9882 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/GlyphCache.java @@ -0,0 +1,857 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import com.jogamp.opengl.GL; +import com.jogamp.opengl.util.packrect.BackingStoreManager; +import com.jogamp.opengl.util.packrect.Rect; +import com.jogamp.opengl.util.packrect.RectVisitor; +import com.jogamp.opengl.util.texture.TextureCoords; +import java.awt.Font; +import java.awt.font.FontRenderContext; +import java.util.ArrayList; +import java.util.List; +import jogamp.text.RectanglePacker; +import jogamp.text.TextRenderer.RenderDelegate; + + +/** + * Storage of glyphs in an OpenGL texture. + * + *

              + * {@code GlyphCache} andles storing glyphs in a 2D texture and retrieving their coordinates. + * + *

              + * The first step in using a {@code GlyphCache} is to make sure it's set up by calling {@link + * #beginRendering(GL)}. Then glyphs can be added using {@link #upload(Glyph)}. Each glyph will + * be packed efficiently into the texture with a small amount of space around it using {@link + * RectanglePacker}. When all glyphs have been added, be sure to call {@link #update(GL)} or + * {@link #endRendering(GL)} before trying to render with the texture, as the glyphs are not + * actually drawn into the texture right away in order to increase performance. Texture + * coordinates of individual glyphs can be determined with {@link #find(Glyph)}. When reusing the + * glyph cache, {@link #contains(Glyph)} should be called to make sure a glyph is not already + * stored. + * + *

              + * Events fired when: + *

                + *
              • A glyph has not been used recently (CLEAN, glyph); + *
              • The backing store is going to be flushed. + *
              + * + *

              + * GlyphCache is compatible with GL2 or GL3. + * + * @see TextureBackingStore + */ +/*@NotThreadSafe*/ +public final class GlyphCache implements TextureBackingStore.EventListener { + + /** + * Whether or not glyph cache should print debugging information. + */ + private static final boolean DEBUG = false; + + /** + * Number used to determine size of cache based on font size. + */ + /*@Nonnegative*/ + private static final int FONT_SIZE_MULTIPLIER = 5; + + /** + * How much fragmentation to allow before compacting. + */ + /*@Nonnegative*/ + private static final float MAX_VERTICAL_FRAGMENTATION = 0.7f; + + /** + * Number of render cycles before clearing unused entries. + */ + /*@Nonnegative*/ + private static final int CYCLES_PER_FLUSH = 100; + + /** + * Minimum size of backing store in pixels. + */ + /*@Nonnegative*/ + private static final int MIN_BACKING_STORE_SIZE = 256; + + /** + * Delegate to render text. + */ + /*@Nonnull*/ + private final RenderDelegate renderDelegate; + + /** + * Observers of glyph cache. + */ + /*@Nonnull*/ + private final List listeners = new ArrayList(); + + /** + * Delegate to create textures. + */ + /*@Nonnull*/ + private final TextureBackingStoreManager manager; + + /** + * Delegate to position glyphs. + */ + /*@Nonnull*/ + private final RectanglePacker packer; + + /** + * Texture to draw into. + * + *

              + * This will be null until {@link #beginRendering} is called. + */ + /*@CheckForNull*/ + private TextureBackingStore backingStore; + + /** + * Times cache has been used. + */ + /*@Nonnegative*/ + private int numRenderCycles = 0; + + /** + * True if done initializing. + */ + private boolean ready = false; + + /** + * Constructs a {@link GlyphCache}. + * + * @param font Font that was used to create glyphs that will be stored, assumed not null + * @param rd Controller of rendering bitmapped text, assumed not null + * @param antialias True to render glyphs with smooth edges + * @param subpixel True to consider subpixel positioning + * @param mipmap True to create multiple sizes of texture + * @see #newInstance + */ + private GlyphCache(/*@Nonnull*/ final Font font, + /*@Nonnull*/ final RenderDelegate rd, + final boolean antialias, + final boolean subpixel, + final boolean mipmap) { + this.renderDelegate = rd; + this.manager = new TextureBackingStoreManager(font, antialias, subpixel, mipmap); + this.packer = createPacker(font, manager); + } + + /** + * Registers an {@link EventListener} with this {@link GlyphCache}. + * + * @param listener Listener to register + * @throws NullPointerException if listener is null + */ + public void addListener(/*@Nonnull*/ final EventListener listener) { + + Check.notNull(listener, "Listener cannot be null"); + + listeners.add(listener); + } + + /** + * Sets up the cache for rendering. + * + *

              + * After calling this method the texture storing the glyphs will be bound. + * + * @param gl Current OpenGL context + * @throws NullPointerException if context is null + */ + public void beginRendering(/*@Nonnull*/ final GL gl) { + + Check.notNull(gl, "Context cannot be null"); + + // Set up if first time rendering + if (!ready) { + setMaxSize(gl); + ready = true; + } + + // Bind the backing store + final TextureBackingStore bs = getBackingStore(); + bs.bind(gl, GL.GL_TEXTURE0); + } + + /** + * Clears all the texture coordinates stored in glyphs. + */ + private void clearTextureCoordinates() { + + log("Clearing texture coordinates"); + + packer.visit(new RectVisitor() { + + @Override + public void visit(/*@Nonnull*/ final Rect rect) { + final Glyph glyph = ((TextData) rect.getUserData()).glyph; + glyph.coordinates = null; + } + }); + } + + /** + * Clears entries that haven't been used in awhile. + */ + private void clearUnusedEntries() { + + log("Trying to clear unused entries..."); + + // Find rectangles in backing store that haven't been used recently + final List deadRects = new ArrayList(); + packer.visit(new RectVisitor() { + + @Override + public void visit(/*@Nonnull*/ final Rect rect) { + final TextData data = (TextData) rect.getUserData(); + if (data.used()) { + data.clearUsed(); + } else { + deadRects.add(rect); + } + } + }); + + // Remove each of those rectangles + final TextureBackingStore bs = getBackingStore(); + for (final Rect rect : deadRects) { + packer.remove(rect); + final Glyph glyph = ((TextData) rect.getUserData()).glyph; + glyph.location = null; + glyph.coordinates = null; // Also clear coordinates to prevent stale texture coordinates + fireEvent(EventType.CLEAN, glyph); + log("Cleared rectangle for glyph: %s", glyph); + if (DEBUG) { + bs.clear(rect.x(), rect.y(), rect.w(), rect.h()); + } + } + + // If we removed dead rectangles this cycle, try to do a compaction + final float frag = packer.verticalFragmentationRatio(); + if (!deadRects.isEmpty() && (frag > MAX_VERTICAL_FRAGMENTATION)) { + log("Compacting due to fragmentation %s", frag); + packer.compact(); + // After compaction, all Rects have moved to new positions, so texture coordinates are stale + clearTextureCoordinates(); + } + + // Force the backing store to update + if (DEBUG) { + bs.mark(0, 0, bs.getWidth(), bs.getHeight()); + } + } + + /** + * Computes the normalized coordinates of a glyph's location. + * + * @param glyph Glyph being uploaded, assumed not null + */ + private void computeCoordinates(/*@Nonnull*/ final Glyph glyph) { + + // Determine dimensions in pixels + final int cacheWidth = getWidth(); + final int cacheHeight = getHeight(); + final float left = getLeftBorderLocation(glyph); + final float bottom = getBottomBorderLocation(glyph); + + // Convert to normalized texture coordinates + final float l = left / cacheWidth; + final float b = bottom / cacheHeight; + final float r = (left + glyph.width) / cacheWidth; + final float t = (bottom - glyph.height) / cacheHeight; + + // Store in glyph + glyph.coordinates = new TextureCoords(l, b, r, t); + } + + /** + * Checks if a glyph is stored in this {@link GlyphCache}. + * + * @param glyph Glyph to check for, which may be null + * @return True if glyph is in the cache + */ + boolean contains(/*@CheckForNull*/ final Glyph glyph) { + + if (glyph == null) { + return false; + } + + return glyph.location != null; + } + + /** + * Makes a packer for positioning glyphs. + * + * @param font Font used to make glyphs being stored, assumed not null + * @param manager Handler of packer events, assumed not null + * @return Resulting packer, not null + */ + /*@Nonnull*/ + private static RectanglePacker createPacker(/*@Nonnull*/ final Font font, + /*@Nonnull*/ final BackingStoreManager manager) { + final int size = findBackingStoreSizeForFont(font); + return new RectanglePacker(manager, size, size, 1f); + } + + /** + * Destroys resources used by this {@link GlyphCache}. + * + * @param gl Current OpenGL context + * @throws NullPointerException if context is null + */ + public void dispose(/*@Nonnull*/ final GL gl) { + + Check.notNull(gl, "Context cannot be null"); + + packer.dispose(); + if (backingStore != null) { + backingStore.dispose(gl); + backingStore = null; + } + } + + /** + * Draws a glyph into the backing store. + * + * @param glyph Glyph being uploaded, assumed not null + */ + private void drawInBackingStore(/*@Nonnull*/ final Glyph glyph) { + + // Get the backing store + final TextureBackingStore bs = getBackingStore(); + + // Clear the area + final Rect loc = glyph.location; + final int x = loc.x(); + final int y = loc.y(); + final int w = loc.w(); + final int h = loc.h(); + bs.clear(x, y, w, h); + + // Draw the text + renderDelegate.drawGlyphVector( + bs.getGraphics(), + glyph.glyphVector, + getLeftBaselineLocation(glyph), + getBottomBaselineLocation(glyph)); + + // Mark it dirty + bs.mark(x, y, w, h); + } + + /** + * Finishes setting up the cache for rendering. + * + *

              + * After calling this method, all uploaded glyphs will be guaranteed to be present in the + * underlying OpenGL texture. + * + * @param gl Current OpenGL context + * @throws NullPointerException if context is null + */ + public void endRendering(/*@Nonnull*/ final GL gl) { + + Check.notNull(gl, "Context cannot be null"); + + update(gl); + + // Check if reached render cycle limit + if (++numRenderCycles >= CYCLES_PER_FLUSH) { + numRenderCycles = 0; + log("Reached cycle limit."); + clearUnusedEntries(); + } + } + + /** + * Determines the texture coordinates of a glyph in the cache. + * + *

              + * Notes: + *

                + *
              • Texture coordinates are in the range 0 to 1 + *
              • Automatically marks the glyph as being used recently + *
              • If cache has been resized, coordinates are recalculated + *
              + * + * @param glyph Glyph already in cache + * @return Texture coordinates of glyph in the cache, not null + * @throws NullPointerException if glyph is null + */ + /*@Nonnull*/ + public TextureCoords find(/*@Nonnull*/ final Glyph glyph) { + + Check.notNull(glyph, "Glyph cannot be null"); + + // Mark the glyph as being used + markGlyphLocationUsed(glyph); + + // Find the coordinates, recalculating if necessary + if (glyph.coordinates == null) { + computeCoordinates(glyph); + } + return glyph.coordinates; + } + + /** + * Returns the initial size of a {@link GlyphCache} for a font. + * + * @param font Font to create glyphs from, assumed not null + */ + /*@Nonnegative*/ + private static int findBackingStoreSizeForFont(/*@Nonnull*/ final Font font) { + return Math.max(MIN_BACKING_STORE_SIZE, font.getSize() * FONT_SIZE_MULTIPLIER); + } + + /** + * Finds a location in the backing store for a glyph. + * + * @param glyph Glyph being uploaded, assumed not null + */ + private void findLocation(/*@Nonnull*/ final Glyph glyph) { + + // Compute a rectangle that includes glyph's margin + final int x = 0; + final int y = 0; + final int w = glyph.margin.left + ((int) glyph.width) + glyph.margin.right; + final int h = glyph.margin.top + ((int) glyph.height) + glyph.margin.bottom; + final Rect rect = new Rect(x, y, w, h, new TextData(glyph)); + + // Pack it into the cache and store its location + packer.add(rect); + glyph.location = rect; + markGlyphLocationUsed(glyph); + } + + /** + * Determines the maximum texture size supported by OpenGL. + * + * @param gl Current OpenGL context, assumed not null + * @return Maximum texture size + */ + private static int findMaxSize(/*@Nonnull*/ final GL gl) { + final int[] size = new int[1]; + gl.glGetIntegerv(GL.GL_MAX_TEXTURE_SIZE, size, 0); + return size[0]; + } + + /** + * Sends an event to all the listeners. + * + * @param type Kind of event, assumed not null + * @param data Information to send with event, assumed not null + */ + private void fireEvent(/*@Nonnull*/ final EventType type, /*@Nonnull*/ final Object data) { + for (final EventListener listener : listeners) { + assert listener != null : "addListener rejects null"; + listener.onGlyphCacheEvent(type, data); + } + } + + /** + * Returns object actually storing the rasterized glyphs. + * + * @return Object actually storing the rasterized glyphs, not null + */ + /*@Nonnull*/ + TextureBackingStore getBackingStore() { + return (TextureBackingStore) packer.getBackingStore(); + } + + /** + * Determines the location of a glyph's bottom baseline. + * + * @param glyph Glyph to determine bottom baseline for, assumed not null + * @return Location of glyph's bottom baseline, which may be negative + */ + /*@CheckForSigned*/ + private int getBottomBaselineLocation(/*@Nonnull*/ final Glyph glyph) { + return (int) (glyph.location.y() + glyph.margin.top + glyph.ascent); + } + + /** + * Determines the location of a glyph's bottom border. + * + * @param glyph Glyph to determine bottom border for, assumed not null + * @return Location of glyph's bottom border, which may be negative + */ + /*@CheckForSigned*/ + private int getBottomBorderLocation(/*@Nonnull*/ final Glyph glyph) { + return (int) (glyph.location.y() + glyph.margin.top + glyph.height); + } + + /** + * Returns the font render context used for text size computations by this {@link GlyphCache}. + * + *

              + * This object should be considered transient and may become invalidated between {@link + * #beginRendering} and {@link #endRendering} pairs. + * + * @return Font render context used for text size computations, not null + */ + /*@Nonnull*/ + public FontRenderContext getFontRenderContext() { + return getBackingStore().getGraphics().getFontRenderContext(); + } + + /** + * Returns the height of this {@link GlyphCache}. + * + * @return Height of this cache, not negative + */ + /*@Nonnegative*/ + int getHeight() { + return getBackingStore().getHeight(); + } + + /** + * Determines the location of a glyph's left baseline. + * + * @param glyph Glyph to determine left baseline for, assumed not null + * @return Location of glyph's left baseline, which may be negative + */ + /*@CheckForSigned*/ + private int getLeftBaselineLocation(/*@Nonnull*/ final Glyph glyph) { + return (int) (glyph.location.x() + glyph.margin.left - glyph.kerning); + } + + /** + * Determines the location of a glyph's left border. + * + * @param glyph Glyph to determine left border for, assumed not null + * @return Location of glyph's left border, which may be negative + */ + /*@CheckForSigned*/ + private int getLeftBorderLocation(/*@Nonnull*/ final Glyph glyph) { + return glyph.location.x() + glyph.margin.left; + } + + /** + * Checks if this {@link GlyphCache} is interpolating when sampling. + * + * @return True if this glyph cache is interpolating when it samples + */ + public boolean getUseSmoothing() { + return ((TextureBackingStoreManager) manager).getUseSmoothing(); + } + + /** + * Returns the width of this {@link GlyphCache}. + * + * @return Width of this cache, not negative + */ + /*@Nonnegative*/ + int getWidth() { + return getBackingStore().getWidth(); + } + + /** + * Checks if Non-Power-Of-Two textures are available. + * + * @param gl Current OpenGL context + * @return True if NPOT textures are available + * @throws NullPointerException if context is null + */ + static boolean isNpotTextureAvailable(/*@Nonnull*/ final GL gl) { + + Check.notNull(gl, "GL cannot be null"); + + return gl.isExtensionAvailable("GL_ARB_texture_non_power_of_two"); + } + + private static void log(/*@Nonnull*/ final String message) { + if (DEBUG) { + System.err.println(message); + } + } + + private static void log(/*@Nonnull*/ final String message, + /*@CheckForNull*/ final Object arg) { + if (DEBUG) { + System.err.println(String.format(message, arg)); + } + } + + /** + * Marks a glyph's location as used. + * + * @param glyph Glyph to mark + * @throws NullPointerException if glyph is null + */ + static void markGlyphLocationUsed(/*@Nonnull*/ final Glyph glyph) { + + Check.notNull(glyph, "Glyph cannot be null"); + + ((TextData) glyph.location.getUserData()).markUsed(); + } + + /** + * Creates a new {@link GlyphCache}. + * + * @param font Font that was used to create glyphs that will be stored + * @param rd Controller of rendering bitmapped text + * @param antialias Whether to render glyphs with smooth edges + * @param subpixel Whether to consider subpixel positioning + * @param mipmap Whether to create multiple sizes for texture + * @return New glyph cache instance, not null + * @throws NullPointerException if font or render delegate is null + * @throws IllegalArgumentException if render delegate wants full color + */ + /*@Nonnull*/ + public static GlyphCache newInstance(/*@Nonnull*/ final Font font, + /*@Nonnull*/ final RenderDelegate rd, + final boolean antialias, + final boolean subpixel, + final boolean mipmap) { + + Check.notNull(font, "Font cannot be null"); + Check.notNull(rd, "Render delegate cannot be null"); + + final GlyphCache gc = new GlyphCache(font, rd, antialias, subpixel, mipmap); + gc.manager.addListener(gc); + return gc; + } + + /** + * Responds to an event from the backing store. + * + * @param type Kind of backing store event + * @throws NullPointerException if type is null + */ + @Override + public void onBackingStoreEvent(/*@Nonnull*/ final TextureBackingStore.EventType type) { + + Check.notNull(type, "Event type cannot be null"); + + switch (type) { + case REALLOCATE: + onBackingStoreReallocate(); + break; + case FAILURE: + onBackingStoreFailure(); + break; + } + } + + /** + * Responds to the backing store failing (reallocation). + */ + private void onBackingStoreFailure() { + packer.clear(); + fireEvent(EventType.CLEAR, null); + } + + /** + * Handles when a backing store is reallocated. + * + *

              + * First notifies observers, then tries to remove any unused entries, and finally erases the + * texture coordinates of each entry since the width and height of the total texture has + * changed. Note that since the backing store is just expanded without moving any entries, + * only the texture coordinates need to be recalculated. The locations will still be the same. + * + *

              + * This heuristic and the fact that it clears the used bit of all entries seems to cause + * cycling of entries in some situations, where the backing store becomes small compared to the + * amount of text on the screen (see the TextFlow demo) and the entries continually cycle in + * and out of the backing store, decreasing performance. If we added a little age information + * to the entries, and only cleared out entries above a certain age, this behavior would be + * eliminated. However, it seems the system usually stabilizes itself, so for now we'll just + * keep things simple. Note that if we don't clear the used bit here, the backing store tends + * to increase very quickly to its maximum size, at least with the TextFlow demo when the text + * is being continually re-laid out. + */ + private void onBackingStoreReallocate() { + fireEvent(EventType.REALLOCATE, null); + clearUnusedEntries(); + clearTextureCoordinates(); + } + + /** + * Changes the maximum size of this {@link GlyphCache}'s rectangle packer. + * + * @param gl Current OpenGL context, assumed not null + */ + private void setMaxSize(/*@Nonnull*/ final GL gl) { + final int maxSize = findMaxSize(gl); + packer.setMaxSize(maxSize, maxSize); + } + + /** + * Changes whether this {@link GlyphCache}'s texture should interpolate when sampling. + * + * @param useSmoothing True to use linear interpolation + */ + public void setUseSmoothing(boolean useSmoothing) { + ((TextureBackingStoreManager) manager).setUseSmoothing(useSmoothing); + getBackingStore().setUseSmoothing(useSmoothing); + } + + /** + * Forces the cache to update the underlying OpenGL texture. + * + *

              + * After calling this method, all uploaded glyphs will be guaranteed to be present in the + * underlying OpenGL texture. + * + * @param gl Current OpenGL context + * @throws NullPointerException if context is null + */ + public void update(/*@Nonnull*/ final GL gl) { + + Check.notNull(gl, "GL cannot be null"); + + final TextureBackingStore bs = getBackingStore(); + bs.update(gl); + } + + /** + * Stores a glyph in the cache. + * + *

              + * Determines a place to put the glyph in the underlying OpenGL texture, computes the glyph's + * texture coordinates for that position, and requests the glyph be drawn into the texture. + * (Note however that to increase performance the glyph is not guaranteed to actually be in the + * texture until {@link #update(GL)} or {@link #endRendering(GL)} is called.) + * + * @param glyph Glyph not already stored in cache + * @throws NullPointerException if glyph is null + */ + public void upload(/*@Nonnull*/ final Glyph glyph) { + + Check.notNull(glyph, "Glyph cannot be null"); + + // Perform upload steps + findLocation(glyph); + computeCoordinates(glyph); + drawInBackingStore(glyph); + + // Make sure it's marked as used + markGlyphLocationUsed(glyph); + } + + /** + * Object that wants to be notified of cache events. + */ + public interface EventListener { + + /** + * Responds to an event from a {@link GlyphCache}. + * + * @param type Type of event + * @param data Object that triggered the event, i.e., a glyph + * @throws NullPointerException if event type or data is null (optional) + */ + void onGlyphCacheEvent(/*@Nonnull*/ EventType type, /*@Nonnull*/ Object data); + } + + /** + * Type of event fired from the cache. + */ + public enum EventType { + + /** + * All entries were removed from cache. + */ + CLEAR, + + /** + * Unused entries were removed from cache. + */ + CLEAN, + + /** + * Backing store changed size. + */ + REALLOCATE; + } + + /** + * Data associated with each rectangle of text. + */ + /*@NotThreadSafe*/ + static final class TextData { + + /** + * Visual representation of text. + */ + /*@Nonnull*/ + final Glyph glyph; + + /** + * True if text was used recently. + */ + private boolean used; + + /** + * Constructs a {@link TextData} from a glyph. + * + * @param glyph Visual representation of text + * @throws NullPointerException if glyph is null + */ + TextData(/*@Nonnull*/ final Glyph glyph) { + this.glyph = Check.notNull(glyph, "Glyph cannot be null"); + } + + /** + * Indicates this {@link TextData} is no longer being used. + */ + void clearUsed() { + used = false; + } + + /** + * Indicates this {@link TextData} was just used. + */ + void markUsed() { + used = true; + } + + /** + * Returns the actual text stored with a rectangle. + * + * @return Actual text stored with a rectangle, not null + */ + /*@CheckForNull*/ + String string() { + return glyph.str; + } + + /** + * Returns true if text has been used recently. + */ + boolean used() { + return used; + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/GlyphMap.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/GlyphMap.java new file mode 100644 index 0000000000..1fe722020e --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/GlyphMap.java @@ -0,0 +1,181 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; + + +/** + * Utility for mapping text to glyphs. + */ +/*@NotThreadSafe*/ +final class GlyphMap { + + /** + * Fast map for ASCII chars. + */ + /*@Nonnull*/ + private final Glyph[] ascii = new Glyph[128]; + + /** + * Map from char to code. + */ + /*@Nonnull*/ + private final Map codes = new HashMap(); + + /** + * Map from code to glyph. + */ + /*@Nonnull*/ + private final Map unicode = new HashMap(); + + /** + * Glyphs with layout flags. + */ + /*@Nonnull*/ + private final Map complex = new HashMap(); + + /** + * Constructs a glyph map. + */ + GlyphMap() { + // empty + } + + /** + * Deletes all glyphs stored in the map. + */ + void clear() { + Arrays.fill(ascii, null); + codes.clear(); + unicode.clear(); + complex.clear(); + } + + /** + * Returns a glyph for a character. + * + * @param c Character to get glyph for + * @return Glyph for the character, or null if it wasn't found + */ + /*@CheckForNull*/ + Glyph get(final char c) { + return (c < 128) ? ascii[c] : unicode.get(codes.get(c)); + } + + /** + * Returns a glyph for a string. + * + * @param str String to get glyph for, which may be null + * @return Glyph for the string, or null if it wasn't found + */ + /*@CheckForNull*/ + Glyph get(/*@CheckForNull*/ final String str) { + return complex.get(str); + } + + /** + * Stores a simple glyph in the map. + * + * @param c Character glyph represents + * @param glyph Glyph to store + * @throws NullPointerException if glyph is null + */ + void put(final char c, /*@Nonnull*/ final Glyph glyph) { + + Check.notNull(glyph, "Glyph cannot be null"); + + if (c < 128) { + ascii[c] = glyph; + } else { + codes.put(c, glyph.code); + unicode.put(glyph.code, glyph); + } + } + + /** + * Stores a complex glyph in the map. + * + * @param str String glyph represents + * @param glyph Glyph to store + * @throws NullPointerException if string or glyph is null + */ + void put(/*@Nonnull*/ final String str, /*@Nonnull*/ final Glyph glyph) { + + Check.notNull(str, "String cannot be null"); + Check.notNull(glyph, "Glyph cannot be null"); + + complex.put(str, glyph); + } + + /** + * Deletes a simple glyph from this {@link GlyphMap}. + * + * @param c Character of glyph to remove + */ + private void remove(final char c) { + if (c < 128) { + ascii[c] = null; + } else { + final Character character = c; + final Integer code = codes.get(character); + unicode.remove(code); + codes.remove(character); + } + } + + /** + * Deletes a single glyph from this {@link GlyphMap}. + * + * @param glyph Glyph to remove, ignored if null + */ + void remove(/*@CheckForNull*/ final Glyph glyph) { + + if (glyph == null) { + return; + } + + if (glyph.str != null) { + remove(glyph.str); + } else { + remove(glyph.character); + } + } + + /** + * Deletes a complex glyph from this {@link GlyphMap}. + * + * @param str Text of glyph to remove, ignored if null + */ + private void remove(/*@CheckForNull*/ final String str) { + complex.remove(str); + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/GlyphProducer.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/GlyphProducer.java new file mode 100644 index 0000000000..eba95ff6cc --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/GlyphProducer.java @@ -0,0 +1,88 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import java.awt.geom.Rectangle2D; +import java.util.List; + + +/** + * Utility for creating glyphs. + */ +public interface GlyphProducer { + + /** + * Deletes all stored glyphs. + */ + void clearGlyphs(); + + /** + * Makes a glyph for a single character. + * + * @param c Character + * @return Reused instance of a glyph + */ + Glyph createGlyph(char c); + + /** + * Makes a glyph for each character in a string. + * + * @param str Text as a string + * @return View of glyphs valid until next call + * @throws NullPointerException if string is null + */ + /*@Nonnull*/ + List createGlyphs(/*@Nonnull*/ String str); + + /** + * Determines the distance to the next character after a glyph. + * + * @param c Character to find advance of + * @return Distance to the next character after a glyph, which may be negative + */ + /*@CheckForSigned*/ + float findAdvance(char c); + + /** + * Determines the visual bounds of a string with padding added. + * + * @param str Text to find visual bounds of + * @return Visual bounds of string with padding added, not null + * @throws NullPointerException if string is null + */ + /*@Nonnull*/ + Rectangle2D findBounds(/*@Nonnull*/ String str); + + /** + * Deletes a single stored glyph. + * + * @param glyph Previously created glyph, ignored if null + */ + void removeGlyph(/*@CheckForNull*/ Glyph glyph); +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/GlyphProducers.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/GlyphProducers.java new file mode 100644 index 0000000000..1d3a2a534a --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/GlyphProducers.java @@ -0,0 +1,76 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import java.awt.Font; +import java.awt.font.FontRenderContext; +import java.lang.Character.UnicodeBlock; +import jogamp.text.TextRenderer.RenderDelegate; + + +/** + * Utility for working with {@link GlyphProducer}'s. + */ +/*@ThreadSafe*/ +public final class GlyphProducers { + + /** + * Prevents instantiation. + */ + private GlyphProducers() { + // empty + } + + /** + * Creates a {@link GlyphProducer} based on a range of characters. + * + * @param font Style of text + * @param rd Controller of rendering details + * @param frc Details on how fonts are rendered + * @param ub Range of characters to support + * @return Correct glyph producer for unicode block, not null + * @throws NullPointerException if font, render delegate, or render context is null + */ + /*@Nonnull*/ + public static GlyphProducer get(/*@Nonnull*/ final Font font, + /*@Nonnull*/ final RenderDelegate rd, + /*@Nonnull*/ final FontRenderContext frc, + /*@CheckForNull*/ final UnicodeBlock ub) { + + Check.notNull(font, "Font cannot be null"); + Check.notNull(rd, "Render delegate cannot be null"); + Check.notNull(frc, "Font render context cannot be null"); + + if (ub == UnicodeBlock.BASIC_LATIN) { + return new AsciiGlyphProducer(font, rd, frc); + } else { + return new UnicodeGlyphProducer(font, rd, frc); + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/GlyphRenderer.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/GlyphRenderer.java new file mode 100644 index 0000000000..43a05e7d2f --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/GlyphRenderer.java @@ -0,0 +1,176 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import com.jogamp.opengl.GL; +import com.jogamp.opengl.util.texture.TextureCoords; + + +/** + * Utility for drawing glyphs. + */ +public interface GlyphRenderer { + + /** + * Registers an {@link EventListener} with this {@link GlyphRenderer}. + * + * @param listener Listener to register + * @throws NullPointerException if listener is null + */ + void addListener(/*@Nonnull*/ EventListener listener); + + /** + * Starts a render cycle with this {@link GlyphRenderer}. + * + * @param gl Current OpenGL context + * @param ortho True if using orthographic projection + * @param width Width of current OpenGL viewport + * @param height Height of current OpenGL viewport + * @param disableDepthTest True if should ignore depth values + * @throws NullPointerException if context is null + * @throws IllegalArgumentException if width or height is negative + * @throws GLException if context is unexpected version + */ + void beginRendering(/*@Nonnull*/ GL gl, + boolean ortho, + /*@Nonnegative*/ int width, + /*@Nonnegative*/ int height, + boolean disableDepthTest); + + /** + * Frees resources used by this {@link GlyphRenderer}. + * + * @param gl Current OpenGL context + * @throws NullPointerException if context is null + * @throws GLException if context is unexpected version + */ + void dispose(/*@Nonnull*/ GL gl); + + /** + * Draws a glyph with this {@link GlyphRenderer}. + * + * @param gl Current OpenGL context + * @param glyph Visual representation of a character + * @param x Position to draw on X axis, which may be negative + * @param y Position to draw on Y axis, which may be negative + * @param z Position to draw on Z axis, which may be negative + * @param scale Relative size of glyph, which may be negative + * @param coords Texture coordinates of glyph + * @return Distance to next character, which may be negative + * @throws NullPointerException if context, glyph, or texture coordinate is null + * @throws GLException if context is unexpected version + */ + /*@CheckForSigned*/ + float drawGlyph(/*@Nonnull*/ GL gl, + /*@Nonnull*/ Glyph glyph, + /*@CheckForSigned*/ float x, + /*@CheckForSigned*/ float y, + /*@CheckForSigned*/ float z, + /*@CheckForSigned*/ float scale, + /*@Nonnull*/ TextureCoords coords); + + /** + * Finishes a render cycle with this {@link GlyphRenderer}. + * + * @param gl Current OpenGL context + * @throws NullPointerException if context is null + * @throws GLException if context is unexpected version + */ + void endRendering(/*@Nonnull*/ GL gl); + + /** + * Forces all stored text to be rendered. + * + * @param gl Current OpenGL context + * @throws NullPointerException if context is null + * @throws GLException if context is unexpected version + * @throws IllegalStateException if not in a render cycle + */ + void flush(/*@Nonnull*/ GL gl); + + /** + * Checks if this {@link GlyphRenderer} is using vertex arrays. + * + * @return True if this renderer is using vertex arrays + */ + boolean getUseVertexArrays(); + + /** + * Changes the color used to draw the text. + * + * @param r Red component of color + * @param g Green component of color + * @param b Blue component of color + * @param a Alpha component of color + */ + void setColor(float r, float g, float b, float a); + + /** + * Changes the transformation matrix for drawing in 3D. + * + * @param gl Current OpenGL context + * @param value Matrix as float array + * @param transpose True if array is in in row-major order + * @throws IndexOutOfBoundsException if value's length is less than sixteen + * @throws IllegalStateException if in orthographic mode + */ + void setTransform(/*@Nonnull*/ float[] value, boolean transpose); + + /** + * Changes whether vertex arrays are in use. + * + * @param useVertexArrays true to use vertex arrays + */ + void setUseVertexArrays(boolean useVertexArrays); + + /** + * Observer of a {@link GlyphRenderer}. + */ + public interface EventListener { + + /** + * Responds to an event from a glyph renderer. + * + * @param type Type of event + * @throws NullPointerException if event type is null + */ + public void onGlyphRendererEvent(EventType type); + } + + /** + * Type of event fired from the renderer. + */ + public static enum EventType { + + /** + * Renderer is automatically flushing queued glyphs, e.g., when it's full or color changes. + */ + AUTOMATIC_FLUSH; + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/GlyphRendererGL2.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/GlyphRendererGL2.java new file mode 100644 index 0000000000..dd8fa2bc4a --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/GlyphRendererGL2.java @@ -0,0 +1,212 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import com.jogamp.opengl.GL; +import com.jogamp.opengl.GL2; +import com.jogamp.opengl.GLExtensions; + + +/** + * {@link GlyphRenderer} for use with OpenGL 2. + */ +/*@VisibleForTesting*/ +/*@NotThreadSafe*/ +public final class GlyphRendererGL2 extends AbstractGlyphRenderer { + + /** + * True if using vertex arrays. + */ + private boolean useVertexArrays = true; + + /** + * Constructs a {@link GlyphRendererGL2}. + */ + /*@VisibleForTesting*/ + public GlyphRendererGL2() { + // empty + } + + @Override + protected void doBeginRendering(/*@Nonnull*/ final GL gl, + final boolean ortho, + /*@Nonnegative*/ final int width, + /*@Nonnegative*/ final int height, + final boolean disableDepthTest) { + + Check.notNull(gl, "GL cannot be null"); + Check.argument(width >= 0, "Width cannot be negative"); + Check.argument(height >= 0, "Height cannot be negative"); + + final GL2 gl2 = gl.getGL2(); + + // Change general settings + gl2.glPushAttrib(getAttribMask(ortho)); + gl2.glDisable(GL2.GL_LIGHTING); + gl2.glEnable(GL2.GL_BLEND); + gl2.glBlendFunc(GL2.GL_ONE, GL2.GL_ONE_MINUS_SRC_ALPHA); + gl2.glEnable(GL2.GL_TEXTURE_2D); + gl2.glTexEnvi(GL2.GL_TEXTURE_ENV, GL2.GL_TEXTURE_ENV_MODE, GL2.GL_MODULATE); + + // Set up transformations + if (ortho) { + if (disableDepthTest) { + gl2.glDisable(GL2.GL_DEPTH_TEST); + } + gl2.glDisable(GL2.GL_CULL_FACE); + gl2.glMatrixMode(GL2.GL_PROJECTION); + gl2.glPushMatrix(); + gl2.glLoadIdentity(); + gl2.glOrtho(0, width, 0, height, -1, +1); + gl2.glMatrixMode(GL2.GL_MODELVIEW); + gl2.glPushMatrix(); + gl2.glLoadIdentity(); + gl2.glMatrixMode(GL2.GL_TEXTURE); + gl2.glPushMatrix(); + gl2.glLoadIdentity(); + } + } + + /*@Nonnull*/ + protected QuadPipeline doCreateQuadPipeline(/*@Nonnull*/ final GL gl) { + + Check.notNull(gl, "GL cannot be null"); + + final GL2 gl2 = gl.getGL2(); + + if (useVertexArrays) { + if (gl2.isExtensionAvailable(GLExtensions.VERSION_1_5)) { + return new QuadPipelineGL15(gl2); + } else if (gl2.isExtensionAvailable("GL_VERSION_1_1")) { + return new QuadPipelineGL11(); + } else { + return new QuadPipelineGL10(); + } + } else { + return new QuadPipelineGL10(); + } + } + + protected void doDispose(/*@Nonnull*/ final GL gl) { + Check.notNull(gl, "GL cannot be null"); + } + + @Override + protected void doEndRendering(/*@Nonnull*/ final GL gl) { + + Check.notNull(gl, "GL cannot be null"); + + final GL2 gl2 = gl.getGL2(); + + // Reset transformations + if (isOrthoMode()) { + gl2.glMatrixMode(GL2.GL_PROJECTION); + gl2.glPopMatrix(); + gl2.glMatrixMode(GL2.GL_MODELVIEW); + gl2.glPopMatrix(); + gl2.glMatrixMode(GL2.GL_TEXTURE); + gl2.glPopMatrix(); + } + + // Reset general settings + gl2.glPopAttrib(); + } + + @Override + protected void doSetColor(/*@Nonnull*/ final GL gl, + final float r, + final float g, + final float b, + final float a) { + + Check.notNull(gl, "GL cannot be null"); + + final GL2 gl2 = gl.getGL2(); + + gl2.glColor4f(r, g, b, a); + } + + @Override + protected void doSetTransform3d(/*@Nonnull*/ final GL gl, + /*@Nonnull*/ final float[] value, + final boolean transpose) { + + Check.notNull(gl, "GL cannot be null"); + Check.notNull(value, "Value cannot be null"); + + // FIXME: Could implement this... + throw new UnsupportedOperationException("Use standard GL instead"); + } + + @Override + protected void doSetTransformOrtho(/*@Nonnull*/ final GL gl, + /*@Nonnegative*/ final int width, + /*@Nonnegative*/ final int height) { + + Check.notNull(gl, "GL cannot be null"); + Check.argument(width >= 0, "Width cannot be negative"); + Check.argument(height >= 0, "Height cannot be negative"); + + final GL2 gl2 = gl.getGL2(); + + gl2.glMatrixMode(GL2.GL_PROJECTION); + gl2.glPushMatrix(); + gl2.glLoadIdentity(); + gl2.glOrtho(0, width, 0, height, -1, +1); + gl2.glMatrixMode(GL2.GL_MODELVIEW); + gl2.glPushMatrix(); + gl2.glLoadIdentity(); + } + + /** + * Returns attribute bits for {@code glPushAttrib} calls. + * + * @param ortho True if using orthographic projection + * @return Attribute bits for {@code glPushAttrib} calls + */ + private static int getAttribMask(final boolean ortho) { + return GL2.GL_ENABLE_BIT | + GL2.GL_TEXTURE_BIT | + GL2.GL_COLOR_BUFFER_BIT | + (ortho ? (GL2.GL_DEPTH_BUFFER_BIT | GL2.GL_TRANSFORM_BIT) : 0); + } + + @Override + public boolean getUseVertexArrays() { + return useVertexArrays; + } + + @Override + public void setUseVertexArrays(final boolean useVertexArrays) { + if (useVertexArrays != this.useVertexArrays) { + dirtyPipeline(); + this.useVertexArrays = useVertexArrays; + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/GlyphRendererGL3.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/GlyphRendererGL3.java new file mode 100644 index 0000000000..dfd76be61b --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/GlyphRendererGL3.java @@ -0,0 +1,270 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import com.jogamp.opengl.GL; +import com.jogamp.opengl.GL3; + + +/** + * Utility for drawing glyphs with OpenGL 3. + */ +/*@VisibleForTesting*/ +/*@NotThreadSafe*/ +public final class GlyphRendererGL3 extends AbstractGlyphRenderer { + + /** + * Source code of vertex shader. + */ + /*@Nonnull*/ + private static final String VERT_SOURCE = + "#version 140\n" + + "uniform mat4 MVPMatrix;\n" + + "in vec4 MCVertex;\n" + + "in vec2 TexCoord0;\n" + + "out vec2 Coord0;\n" + + "void main() {\n" + + " gl_Position = MVPMatrix * MCVertex;\n" + + " Coord0 = TexCoord0;\n" + + "}\n"; + + /** + * Source code of fragment shader. + */ + /*@Nonnull*/ + private static final String FRAG_SOURCE = + "#version 140\n" + + "uniform sampler2D Texture;\n" + + "uniform vec4 Color=vec4(1,1,1,1);\n" + + "in vec2 Coord0;\n" + + "out vec4 FragColor;\n" + + "void main() {\n" + + " float sample;\n" + + " sample = texture(Texture,Coord0).r;\n" + + " FragColor = Color * sample;\n" + + "}\n"; + + /** + * True if blending needs to be reset. + */ + private boolean restoreBlending; + + /** + * True if depth test needs to be reset. + */ + private boolean restoreDepthTest; + + /** + * Shader program. + */ + /*@Nonnegative*/ + private final int program; + + /** + * Uniform for modelview projection. + */ + /*@Nonnull*/ + private final Mat4Uniform transform; + + /** + * Uniform for color of glyphs. + */ + /*@Nonnull*/ + private final Vec4Uniform color; + + /** + * Width of last orthographic render. + */ + /*@Nonnegative*/ + private int lastWidth = 0; + + /** + * Height of last orthographic render + */ + /*@Nonnegative*/ + private int lastHeight = 0; + + /** + * Constructs a {@link GlyphRendererGL3}. + * + * @param gl Current OpenGL context + * @throws NullPointerException if context is null + */ + /*@VisibleForTesting*/ + public GlyphRendererGL3(/*@Nonnull*/ final GL3 gl) { + + Check.notNull(gl, "GL cannot be null"); + + this.program = ShaderLoader.loadProgram(gl, VERT_SOURCE, FRAG_SOURCE); + this.transform = new Mat4Uniform(gl, program, "MVPMatrix"); + this.color = new Vec4Uniform(gl, program, "Color"); + } + + @Override + protected void doBeginRendering(/*@Nonnull*/ final GL gl, + final boolean ortho, + /*@Nonnegative*/ final int width, + /*@Nonnegative*/ final int height, + final boolean disableDepthTest) { + + Check.notNull(gl, "GL cannot be null"); + Check.argument(width >= 0, "Width cannot be negative"); + Check.argument(height >= 0, "Height cannot be negative"); + + final GL3 gl3 = gl.getGL3(); + + // Activate program + gl3.glUseProgram(program); + + // Check blending and depth test + restoreBlending = false; + if (!gl3.glIsEnabled(GL.GL_BLEND)) { + gl3.glEnable(GL.GL_BLEND); + gl3.glBlendFunc(GL.GL_ONE, GL.GL_ONE_MINUS_SRC_ALPHA); + restoreBlending = true; + } + restoreDepthTest = false; + if (disableDepthTest && gl3.glIsEnabled(GL.GL_DEPTH_TEST)) { + gl3.glDisable(GL.GL_DEPTH_TEST); + restoreDepthTest = true; + } + + // Check transform + if (ortho) { + doSetTransformOrtho(gl, width, height); + } + } + + @Override + protected QuadPipeline doCreateQuadPipeline(/*@Nonnull*/ final GL gl) { + + Check.notNull(gl, "GL cannot be null"); + + final GL3 gl3 = gl.getGL3(); + return new QuadPipelineGL30(gl3, program); + } + + protected void doDispose(/*@Nonnull*/ final GL gl) { + + Check.notNull(gl, "GL cannot be null"); + + final GL3 gl3 = gl.getGL3(); + + gl3.glUseProgram(0); + gl3.glDeleteProgram(program); + } + + @Override + protected void doEndRendering(/*@Nonnull*/ final GL gl) { + + Check.notNull(gl, "GL cannot be null"); + + final GL3 gl3 = gl.getGL3(); + + // Deactivate program + gl3.glUseProgram(0); + + // Check blending and depth test + if (restoreBlending) { + gl3.glDisable(GL.GL_BLEND); + } + if (restoreDepthTest) { + gl3.glEnable(GL.GL_DEPTH_TEST); + } + } + + @Override + protected void doSetColor(/*@Nonnull*/ final GL gl, + final float r, + final float g, + final float b, + final float a) { + + Check.notNull(gl, "GL cannot be null"); + + final GL3 gl3 = gl.getGL3(); + + color.value[0] = r; + color.value[1] = g; + color.value[2] = b; + color.value[3] = a; + color.update(gl3); + } + + @Override + protected void doSetTransform3d(/*@Nonnull*/ final GL gl, + /*@Nonnull*/ final float[] value, + final boolean transpose) { + + Check.notNull(gl, "GL cannot be null"); + Check.notNull(value, "Value cannot be null"); + + final GL3 gl3 = gl.getGL3(); + + gl3.glUniformMatrix4fv(transform.location, 1, transpose, value, 0); + transform.dirty = true; + } + + @Override + protected void doSetTransformOrtho(/*@Nonnull*/ final GL gl, + /*@Nonnegative*/ final int width, + /*@Nonnegative*/ final int height) { + + Check.notNull(gl, "GL cannot be null"); + Check.argument(width >= 0, "Width cannot be negative"); + Check.argument(height >= 0, "Height cannot be negative"); + + final GL3 gl3 = gl.getGL3(); + + // Recompute if width and height changed + if (width != lastWidth || height != lastHeight) { + Projection.orthographic(transform.value, width, height); + transform.transpose = true; + transform.dirty = true; + lastWidth = width; + lastHeight = height; + } + + // Upload if made dirty anywhere + if (transform.dirty) { + transform.update(gl3); + transform.dirty = false; + } + } + + @Override + public boolean getUseVertexArrays() { + return true; + } + + @Override + public void setUseVertexArrays(final boolean useVertexArrays) { + // empty + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/GlyphRenderers.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/GlyphRenderers.java new file mode 100644 index 0000000000..5034b72e0b --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/GlyphRenderers.java @@ -0,0 +1,71 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import com.jogamp.opengl.GL; +import com.jogamp.opengl.GLProfile; + + +/** + * Utility for working with {@link GlyphRenderer}'s. + */ +/*@ThreadSafe*/ +public final class GlyphRenderers { + + /** + * Prevents instantiation. + */ + private GlyphRenderers() { + // pass + } + + /** + * Creates a {@link GlyphRenderer} based on the current OpenGL context. + * + * @param gl Current OpenGL context + * @return New glyph renderer for the given context, not null + * @throws NullPointerException if context is null + * @throws UnsupportedOperationException if GL is unsupported + */ + /*@Nonnull*/ + public static GlyphRenderer get(/*@Nonnull*/ final GL gl) { + + Check.notNull(gl, "GL cannot be null"); + + final GLProfile profile = gl.getGLProfile(); + + if (profile.isGL3()) { + return new GlyphRendererGL3(gl.getGL3()); + } else if (profile.isGL2()) { + return new GlyphRendererGL2(); + } else { + throw new UnsupportedOperationException("Profile currently unsupported"); + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/GrayTexture2D.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/GrayTexture2D.java new file mode 100644 index 0000000000..02d79e3e5f --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/GrayTexture2D.java @@ -0,0 +1,71 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import com.jogamp.opengl.GL; +import com.jogamp.opengl.GL2; +import com.jogamp.opengl.GL3; + + +/** + * Two-dimensional, grayscale OpenGL texture. + */ +final class GrayTexture2D extends Texture2D { + + /** + * Creates a two-dimensional, grayscale texture. + * + * @param gl Current OpenGL context + * @param width Size of texture on X axis + * @param height Size of texture on Y axis + * @param smooth True to interpolate samples + * @param mipmap True for high quality + * @throws NullPointerException if context is null + * @throws IllegalArgumentException if width or height is negative + */ + GrayTexture2D(/*@Nonnull*/ final GL gl, + /*@Nonnegative*/ final int width, + /*@Nonnegative*/ final int height, + final boolean smooth, + final boolean mipmap) { + super(gl, width, height, smooth, mipmap); + } + + @Override + protected int getFormat(/*@Nonnull*/ final GL gl) { + Check.notNull(gl, "GL cannot be null"); + return gl.getGLProfile().isGL2() ? GL2.GL_LUMINANCE : GL3.GL_RED; + } + + @Override + protected int getInternalFormat(/*@Nonnull*/ final GL gl) { + Check.notNull(gl, "GL cannot be null"); + return gl.getGLProfile().isGL2() ? GL2.GL_INTENSITY : GL3.GL_RED; + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/Mat4Uniform.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/Mat4Uniform.java new file mode 100644 index 0000000000..69d3802f3f --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/Mat4Uniform.java @@ -0,0 +1,70 @@ + +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import com.jogamp.opengl.GL2GL3; + + +/** + * Uniform for a {@code mat4}. + */ +/*@NotThreadSafe*/ +final class Mat4Uniform extends Uniform { + + /** + * Local copy of matrix values. + */ + final float[] value = new float[16]; + + /** + * True if matrix is stored in row-major order. + */ + boolean transpose; + + /** + * Constructs a {@link UniformMatrix}. + * + * @param gl Current OpenGL context + * @param program OpenGL handle to shader program + * @param name Name of the uniform in shader source code + * @throws NullPointerException if context is null + */ + Mat4Uniform(/*@Nonnull*/ final GL2GL3 gl, + /*@Nonnegative*/ final int program, + /*@Nonnull*/ final String name) { + super(gl, program, name); + } + + @Override + void update(/*@Nonnull*/ final GL2GL3 gl) { + Check.notNull(gl, "GL cannot be null"); + gl.glUniformMatrix4fv(location, 1, transpose, value, 0); + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/Projection.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/Projection.java new file mode 100644 index 0000000000..1eb017bac6 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/Projection.java @@ -0,0 +1,77 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + + +/** + * Utility for computing projections. + */ +/*@NotThreadSafe*/ +final class Projection { + + /** + * Prevents instantiation. + */ + private Projection() { + // empty + } + + /** + * Computes an orthographic projection matrix. + * + * @param v Computed matrix values, in row-major order + * @param width Width of current OpenGL viewport + * @param height Height of current OpenGL viewport + * @throws NullPointerException if array is null + * @throws IllegalArgumentException if width or height is negative + */ + static void orthographic(/*@Nonnull*/ final float[] v, + /*@Nonnegative*/ final int width, + /*@Nonnegative*/ final int height) { + + Check.notNull(v, "Matrix cannot be null"); + Check.argument(width >= 0, "Width cannot be negative"); + Check.argument(height >= 0, "Height cannot be negative"); + + // Zero out + for (int i = 0; i < 16; ++i) { + v[i] = 0; + } + + // Translate to origin + v[3] = -1; + v[7] = -1; + + // Scale to unit cube + v[0] = 2f / width; + v[5] = 2f / height; + v[10] = -1; + v[15] = 1; + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/Quad.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/Quad.java new file mode 100644 index 0000000000..3d9edce7a3 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/Quad.java @@ -0,0 +1,83 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + + +/** + * Structure for points and coordinates. + */ +/*@VisibleForTesting*/ +/*@NotThreadSafe*/ +public final class Quad { + + /** + * Position of left side. + */ + public float xl; + + /** + * Position of right side. + */ + public float xr; + + /** + * Position of bottom side. + */ + public float yb; + + /** + * Position of top side. + */ + public float yt; + + /** + * Depth. + */ + public float z; + + /** + * Left texture coordinate. + */ + public float sl; + + /** + * Right texture coordinate. + */ + public float sr; + + /** + * Bottom texture coordinate. + */ + public float tb; + + /** + * Top texture coordinate. + */ + public float tt; +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/QuadPipeline.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/QuadPipeline.java new file mode 100644 index 0000000000..5d4f889aef --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/QuadPipeline.java @@ -0,0 +1,142 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import com.jogamp.opengl.GL; + + +/** + * Utility for drawing a stream of quads. + */ +/*@VisibleForTesting*/ +public interface QuadPipeline { + + /** + * Registers an {@link EventListener} with this {@link QuadPipeline}. + * + * @param listener Listener to register + * @throws NullPointerException if listener is null + */ + void addListener(/*@Nonnull*/ EventListener listener); + + /** + * Adds a quad to this {@link QuadPipeline}. + * + * @param gl Current OpenGL context + * @param quad Quad to add to pipeline + * @throws NullPointerException if context or quad is null + * @throws GLException if context is unexpected version + */ + void addQuad(/*@Nonnull*/ GL gl, /*@Nonnull*/ Quad quad); + + /** + * Starts a render cycle with this {@link QuadPipeline}. + * + * @param gl Current OpenGL context + * @throws NullPointerException if context is null + * @throws GLException if context is unexpected version + */ + void beginRendering(/*@Nonnull*/ GL gl); + + /** + * Frees resources used by this {@link QuadPipeline}. + * + * @param gl Current OpenGL context + * @throws NullPointerException if context is null + * @throws GLException if context is unexpected version + */ + void dispose(/*@Nonnull*/ GL gl); + + /** + * Finishes a render cycle with this {@link QuadPipeline}. + * + * @param gl Current OpenGL context + * @throws NullPointerException if context is null + * @throws GLException if context is unexpected version + */ + void endRendering(/*@Nonnull*/ GL gl); + + /** + * Draws all vertices in this {@link QuadPipeline}. + * + * @param gl Current OpenGL context + * @throws NullPointerException if context is null + * @throws GLException if context is unexpected version + */ + void flush(/*@Nonnull*/ GL gl); + + // TODO: Rename to `size`? + + /** + * Returns number of quads in this {@link QuadPipeline}. + * + * @return Number of quads in this pipeline, not negative + */ + /*@Nonnegative*/ + int getSize(); + + /** + * Checks if there aren't any quads in this {@link QuadPipeline}. + * + * @return True if there aren't any quads in this pipeline + */ + boolean isEmpty(); + + /** + * Deregisters an {@link EventListener} from this {@link QuadPipeline}. + * + * @param listener Listener to deregister, ignored if null or unregistered + */ + void removeListener(/*@CheckForNull*/ EventListener listener); + + /** + * Observer of a {@link QuadPipeline}. + */ + interface EventListener { + + /** + * Responds to an event from a {@link QuadPipeline}. + * + * @param type Type of event + * @throws NullPointerException if event type is null + */ + void onQuadPipelineEvent(/*@Nonnull*/ EventType type); + } + + /** + * Kind of event. + */ + enum EventType { + + /** + * Pipeline is automatically flushing all queued quads, e.g., when it's full. + */ + AUTOMATIC_FLUSH; + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/QuadPipelineGL10.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/QuadPipelineGL10.java new file mode 100644 index 0000000000..d24cbe4aa5 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/QuadPipelineGL10.java @@ -0,0 +1,86 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import com.jogamp.opengl.GL; +import com.jogamp.opengl.GL2; + + +/** + * {@link QuadPipeline} for use with OpenGL 1.0. + */ +/*@VisibleForTesting*/ +/*@NotThreadSafe*/ +public final class QuadPipelineGL10 extends AbstractQuadPipeline { + + /** + * Number of vertices per primitive. + */ + /*@Nonnegative*/ + private static final int VERTS_PER_PRIM = 4; + + /** + * Number of primitives per quad. + */ + /*@Nonnegative*/ + private static final int PRIMS_PER_QUAD = 1; + + /** + * Constructs a {@link QuadPipelineGL10}. + */ + /*@VisibleForTesting*/ + public QuadPipelineGL10() { + super(VERTS_PER_PRIM, PRIMS_PER_QUAD); + } + + @Override + protected void doFlush(/*@Nonnull*/ final GL gl) { + + Check.notNull(gl, "GL cannot be null"); + + final GL2 gl2 = gl.getGL2(); + + gl2.glBegin(GL2.GL_QUADS); + try { + rewind(); + final int size = getSize(); + for (int q = 0; q < size; ++q) { + for (int v = 0; v < VERTS_PER_QUAD; ++v) { + gl2.glVertex3f(getFloat(), getFloat(), getFloat()); + gl2.glTexCoord2f(getFloat(), getFloat()); + } + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + gl2.glEnd(); + clear(); + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/QuadPipelineGL11.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/QuadPipelineGL11.java new file mode 100644 index 0000000000..587178026f --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/QuadPipelineGL11.java @@ -0,0 +1,161 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import com.jogamp.opengl.GL; +import com.jogamp.opengl.GL2; +import java.nio.FloatBuffer; + + +/** + * {@link QuadPipeline} for use with OpenGL 1.1. + */ +/*@VisibleForTesting*/ +/*@NotThreadSafe*/ +public final class QuadPipelineGL11 extends AbstractQuadPipeline { + + /** + * Number of vertices per primitive. + */ + /*@Nonnegative*/ + private static final int VERTS_PER_PRIM = 4; + + /** + * Number of primitives per quad. + */ + /*@Nonnegative*/ + private static final int PRIMS_PER_QUAD = 1; + + /** + * Vertex array for points. + */ + /*@Nonnull*/ + private final FloatBuffer pointsArray; + + /** + * Vertex array for texture coordinates. + */ + /*@Nonnull*/ + private final FloatBuffer coordsArray; + + /** + * Constructs a {@link QuadPipelineGL11}. + */ + /*@VisibleForTesting*/ + public QuadPipelineGL11() { + + super(VERTS_PER_PRIM, PRIMS_PER_QUAD); + + pointsArray = createFloatBufferView(getData(), POINT_OFFSET); + coordsArray = createFloatBufferView(getData(), COORD_OFFSET); + } + + @Override + public void beginRendering(/*@Nonnull*/ final GL gl) { + + super.beginRendering(gl); + + final GL2 gl2 = gl.getGL2(); + + // Push state + gl2.glPushClientAttrib((int) GL2.GL_ALL_CLIENT_ATTRIB_BITS); + + // Points + gl2.glEnableClientState(GL2.GL_VERTEX_ARRAY); + gl2.glVertexPointer( + FLOATS_PER_POINT, // size + GL2.GL_FLOAT, // type + STRIDE, // stride + pointsArray); // pointer + + // Coordinates + gl2.glEnableClientState(GL2.GL_TEXTURE_COORD_ARRAY); + gl2.glTexCoordPointer( + FLOATS_PER_COORD, // size + GL2.GL_FLOAT, // type + STRIDE, // stride + coordsArray); // pointer + } + + /** + * Makes a view of a float buffer at a certain position. + * + * @param fb Original float buffer + * @param position Index to start view at + * @return Resulting float buffer + * @throws NullPointerException if float buffer is null + * @throws IllegalArgumentException if position is negative + */ + /*@Nonnull*/ + private static FloatBuffer createFloatBufferView(/*@Nonnull*/ final FloatBuffer fb, + /*@Nonnegative*/ final int position) { + + Check.notNull(fb, "Buffer cannot be null"); + Check.argument(position >= 0, "Possition cannot be negative"); + + // Store original position + final int original = fb.position(); + + // Make a view at desired position + fb.position(position); + final FloatBuffer view = fb.asReadOnlyBuffer(); + + // Reset buffer to original position + fb.position(original); + + return view; + } + + @Override + protected void doFlush(/*@Nonnull*/ final GL gl) { + + Check.notNull(gl, "GL cannot be null"); + + final GL2 gl2 = gl.getGL2(); + + gl2.glDrawArrays( + GL2.GL_QUADS, // mode + 0, // first + getSizeInVertices()); // count + clear(); + } + + @Override + public void endRendering(/*@Nonnull*/ final GL gl) { + + Check.notNull(gl, "GL cannot be null"); + + super.endRendering(gl); + + final GL2 gl2 = gl.getGL2(); + + // Pop state + gl2.glPopClientAttrib(); + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/QuadPipelineGL15.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/QuadPipelineGL15.java new file mode 100644 index 0000000000..b96fbaad58 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/QuadPipelineGL15.java @@ -0,0 +1,151 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import com.jogamp.opengl.GL; +import com.jogamp.opengl.GL2; + + +/** + * {@link QuadPipeline} for use with OpenGL 1.5. + */ +/*@VisibleForTesting*/ +/*@NotThreadSafe*/ +public final class QuadPipelineGL15 extends AbstractQuadPipeline { + + /** + * Number of vertices per primitive. + */ + /*@Nonnegative*/ + private static final int VERTS_PER_PRIM = 4; + + /** + * Number of primitives per quad. + */ + /*@Nonnegative*/ + private static final int PRIMS_PER_QUAD = 1; + + /** + * OpenGL handle to vertex buffer. + */ + /*@Nonnegative*/ + private final int vbo; + + /** + * Constructs a {@link QuadPipelineGL15}. + * + * @param gl Current OpenGL context + * @throws NullPointerException if context is null + */ + /*@VisibleForTesting*/ + public QuadPipelineGL15(/*@Nonnull*/ final GL2 gl) { + + super(VERTS_PER_PRIM, PRIMS_PER_QUAD); + + Check.notNull(gl, "GL cannot be null"); + + this.vbo = createVertexBufferObject(gl, BYTES_PER_BUFFER); + } + + @Override + public void beginRendering(/*@Nonnull*/ final GL gl) { + + super.beginRendering(gl); + + final GL2 gl2 = gl.getGL2(); + + // Change state + gl2.glPushClientAttrib((int) GL2.GL_ALL_CLIENT_ATTRIB_BITS); + gl2.glBindBuffer(GL2.GL_ARRAY_BUFFER, vbo); + + // Points + gl2.glEnableClientState(GL2.GL_VERTEX_ARRAY); + gl2.glVertexPointer( + FLOATS_PER_POINT, // size + GL2.GL_FLOAT, // type + STRIDE, // stride + POINT_OFFSET); // offset + + // Coordinates + gl2.glEnableClientState(GL2.GL_TEXTURE_COORD_ARRAY); + gl2.glTexCoordPointer( + FLOATS_PER_COORD, // size + GL2.GL_FLOAT, // type + STRIDE, // stride + COORD_OFFSET); // offset + } + + @Override + public void dispose(/*@Nonnull*/ final GL gl) { + + super.dispose(gl); + + final GL2 gl2 = gl.getGL2(); + + // Delete the vertex buffer object + final int[] handles = new int[] {vbo}; + gl2.glDeleteBuffers(1, handles, 0); + } + + @Override + protected void doFlush(/*@Nonnull*/ final GL gl) { + + Check.notNull(gl, "GL cannot be null"); + + final GL2 gl2 = gl.getGL2(); + + // Upload data + rewind(); + gl2.glBufferSubData( + GL2.GL_ARRAY_BUFFER, // target + 0, // offset + getSizeInBytes(), // size + getData()); // data + + // Draw + gl2.glDrawArrays( + GL2.GL_QUADS, // mode + 0, // first + getSizeInVertices()); // count + + clear(); + } + + @Override + public void endRendering(/*@Nonnull*/ final GL gl) { + + super.endRendering(gl); + + final GL2 gl2 = gl.getGL2(); + + // Restore state + gl2.glBindBuffer(GL2.GL_ARRAY_BUFFER, 0); + gl2.glPopClientAttrib(); + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/QuadPipelineGL30.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/QuadPipelineGL30.java new file mode 100644 index 0000000000..a39a8c008a --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/QuadPipelineGL30.java @@ -0,0 +1,249 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import com.jogamp.opengl.GL; +import com.jogamp.opengl.GL3; + + +/** + * {@link QuadPipeline} for use with OpenGL 3. + * + *

              + * {@code QuadPipelineGL30} draws quads using OpenGL 3 features. It uses a Vertex Buffer Object to + * store vertices in graphics memory and a Vertex Array Object to quickly switch which vertex + * attributes are enabled. + * + *

              + * Since {@code GL_QUAD} has been deprecated in OpenGL 3, this implementation uses two triangles to + * represent one quad. An alternative implementation using one {@code GL_FAN} per quad was also + * tested, but proved slower in most cases. Apparently the penalty imposed by the extra work + * required by the driver outweighed the benefit of transferring less vertices. + */ +/*@VisibleForTesting*/ +/*@NotThreadSafe*/ +public final class QuadPipelineGL30 extends AbstractQuadPipeline { + + /** + * Name of point attribute in shader program. + */ + /*@Nonnull*/ + private static final String POINT_ATTRIB_NAME = "MCVertex"; + + /** + * Name of texture coordinate attribute in shader program. + */ + /*@Nonnull*/ + private static final String COORD_ATTRIB_NAME = "TexCoord0"; + + /** + * Number of vertices per primitive. + */ + /*@Nonnegative*/ + private static final int VERTS_PER_PRIM = 3; + + /** + * Number of primitives per quad. + */ + /*@Nonnegative*/ + private static final int PRIMS_PER_QUAD = 2; + + /** + * Vertex Buffer Object with vertex data. + */ + /*@Nonnegative*/ + private final int vbo; + + /** + * Vertex Array Object with vertex attribute state. + */ + /*@Nonnegative*/ + private final int vao; + + /** + * Constructs a {@link QuadPipelineGL30}. + * + * @param gl Current OpenGL context + * @param shaderProgram Shader program to render quads with + * @throws NullPointerException if context is null + * @throws IllegalArgumentException if shader program is less than one + */ + /*@VisibleForTesting*/ + public QuadPipelineGL30(/*@Nonnull*/ final GL3 gl, /*@Nonnegative*/ final int shaderProgram) { + + super(VERTS_PER_PRIM, PRIMS_PER_QUAD); + + Check.notNull(gl, "GL cannot be null"); + Check.argument(shaderProgram > 0, "Shader program cannot be less than one"); + + this.vbo = createVertexBufferObject(gl, BYTES_PER_BUFFER); + this.vao = createVertexArrayObject(gl, shaderProgram, vbo); + } + + @Override + public void beginRendering(/*@Nonnull*/ final GL gl) { + + super.beginRendering(gl); + + final GL3 gl3 = gl.getGL3(); + + // Bind the VBO and VAO + gl3.glBindBuffer(GL3.GL_ARRAY_BUFFER, vbo); + gl3.glBindVertexArray(vao); + } + + /** + * Creates a vertex array object for use with the pipeline. + * + * @param gl Current OpenGL context, assumed not null + * @param program OpenGL handle to the shader program, assumed not negative + * @param vbo OpenGL handle to VBO holding vertices, assumed not negative + * @return OpenGL handle to resulting VAO + */ + /*@Nonnegative*/ + private static int createVertexArrayObject(/*@Nonnull*/ final GL3 gl, + /*@Nonnegative*/ final int program, + /*@Nonnegative*/ final int vbo) { + + // Generate + final int[] handles = new int[1]; + gl.glGenVertexArrays(1, handles, 0); + final int vao = handles[0]; + + // Bind + gl.glBindVertexArray(vao); + gl.glBindBuffer(GL3.GL_ARRAY_BUFFER, vbo); + + // Points + final int pointLoc = gl.glGetAttribLocation(program, POINT_ATTRIB_NAME); + if (pointLoc == -1) { + throw new IllegalStateException("Could not find point attribute location!"); + } else { + gl.glEnableVertexAttribArray(pointLoc); + gl.glVertexAttribPointer( + pointLoc, // location + FLOATS_PER_POINT, // number of components + GL3.GL_FLOAT, // type + false, // normalized + STRIDE, // stride + POINT_OFFSET); // offset + } + + // Coords + final int coordLoc = gl.glGetAttribLocation(program, COORD_ATTRIB_NAME); + if (coordLoc != -1) { + gl.glEnableVertexAttribArray(coordLoc); + gl.glVertexAttribPointer( + coordLoc, // location + FLOATS_PER_COORD, // number of components + GL3.GL_FLOAT, // type + false, // normalized + STRIDE, // stride + COORD_OFFSET); // offset + } + + // Unbind + gl.glBindBuffer(GL3.GL_ARRAY_BUFFER, 0); + gl.glBindVertexArray(0); + + return vao; + } + + @Override + public void dispose(/*@Nonnull*/ final GL gl) { + + super.dispose(gl); + + final GL3 gl3 = gl.getGL3(); + + // Delete VBO and VAO + final int[] handles = new int[1]; + handles[0] = vbo; + gl3.glDeleteBuffers(1, handles, 0); + handles[0] = vao; + gl3.glDeleteVertexArrays(1, handles, 0); + } + + @Override + protected void doAddQuad(/*@Nonnull*/ final Quad quad) { + + Check.notNull(quad, "Quad cannot be null"); + + // Add upper-left triangle + addPoint(quad.xr, quad.yt, quad.z); + addCoord(quad.sr, quad.tt); + addPoint(quad.xl, quad.yt, quad.z); + addCoord(quad.sl, quad.tt); + addPoint(quad.xl, quad.yb, quad.z); + addCoord(quad.sl, quad.tb); + + // Add lower-right triangle + addPoint(quad.xr, quad.yt, quad.z); + addCoord(quad.sr, quad.tt); + addPoint(quad.xl, quad.yb, quad.z); + addCoord(quad.sl, quad.tb); + addPoint(quad.xr, quad.yb, quad.z); + addCoord(quad.sr, quad.tb); + } + + @Override + protected void doFlush(/*@Nonnull*/ final GL gl) { + + Check.notNull(gl, "GL cannot be null"); + + final GL3 gl3 = gl.getGL3(); + + // Upload data + rewind(); + gl3.glBufferSubData( + GL3.GL_ARRAY_BUFFER, // target + 0, // offset + getSizeInBytes(), // size + getData()); // data + + // Draw + gl3.glDrawArrays( + GL3.GL_TRIANGLES, // mode + 0, // first + getSizeInVertices()); // count + clear(); + } + + @Override + public void endRendering(/*@Nonnull*/ final GL gl) { + + super.endRendering(gl); + + final GL3 gl3 = gl.getGL3(); + + // Unbind the VBO and VAO + gl3.glBindBuffer(GL3.GL_ARRAY_BUFFER, 0); + gl3.glBindVertexArray(0); + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/QuadPipelines.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/QuadPipelines.java new file mode 100644 index 0000000000..55c1c6946e --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/QuadPipelines.java @@ -0,0 +1,86 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import com.jogamp.opengl.GL; +import com.jogamp.opengl.GL2; +import com.jogamp.opengl.GL3; +import com.jogamp.opengl.GLExtensions; +import com.jogamp.opengl.GLProfile; + + +/** + * Utility for working with {@link QuadPipeline}'s. + */ +/*ThreadSafe*/ +public final class QuadPipelines { + + /** + * Prevents instantiation. + */ + private QuadPipelines() { + // pass + } + + /** + * Creates a {@link QuadPipeline} based on the current OpenGL context. + * + * @param gl Current OpenGL context + * @param program Shader program to use, or zero to use default + * @return New quad pipeline for the version of OpenGL in use, not null + * @throws NullPointerException if context is null + * @throws IllegalArgumentException if shader program is negative + * @throws UnsupportedOperationException if GL is unsupported + */ + /*@Nonnull*/ + public QuadPipeline get(/*@Nonnull*/ final GL gl, + /*@Nonnegative*/ final int program) { + + Check.notNull(gl, "Context cannot be null"); + Check.argument(program >= 0, "Program cannot be negative"); + + final GLProfile profile = gl.getGLProfile(); + + if (profile.isGL3()) { + final GL3 gl3 = gl.getGL3(); + return new QuadPipelineGL30(gl3, program); + } else if (profile.isGL2()) { + final GL2 gl2 = gl.getGL2(); + if (gl2.isExtensionAvailable(GLExtensions.VERSION_1_5)) { + return new QuadPipelineGL15(gl2); + } else if (gl2.isExtensionAvailable("GL_VERSION_1_1")) { + return new QuadPipelineGL11(); + } else { + return new QuadPipelineGL10(); + } + } else { + throw new UnsupportedOperationException("Profile currently unsupported"); + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/ShaderLoader.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/ShaderLoader.java new file mode 100644 index 0000000000..ec9b831d34 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/ShaderLoader.java @@ -0,0 +1,164 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import com.jogamp.opengl.GL3ES3; +import com.jogamp.opengl.GLException; +import com.jogamp.opengl.util.glsl.ShaderUtil; + + +/** + * Utility to load shaders from files, URLs, and strings. + * + *

              + * {@code ShaderLoader} is a simple utility for loading shaders. It takes shaders directly as + * strings. It will create and compile the shaders, and link them together into a program. Both + * compiling and linking are verified. If a problem occurs a {@link GLException} is thrown with + * the appropriate log attached. + * + *

              + * Note it is highly recommended that if the developer passes the strings directly to {@code + * ShaderLoader} that they contain newlines. That way if any errors do occur their line numbers + * will be reported correctly. This means that if the shader is to be embedded in Java code, a + * "\n" should be appended to every line. + */ +/*@VisibleForTesting*/ +/*@ThreadSafe*/ +public final class ShaderLoader { + + /** + * Prevents instantiation. + */ + private ShaderLoader() { + // empty + } + + /** + * Checks that a shader was compiled correctly. + * + * @param gl OpenGL context, assumed not null + * @param shader OpenGL handle to a shader + * @return True if shader was compiled without errors + */ + private static boolean isShaderCompiled(/*@Nonnull*/ final GL3ES3 gl, final int shader) { + return ShaderUtil.isShaderStatusValid(gl, shader, GL3ES3.GL_COMPILE_STATUS, null); + } + + /** + * Checks that a shader program was linked successfully. + * + * @param gl OpenGL context, assumed not null + * @param program OpenGL handle to a shader program + * @return True if program was linked successfully + */ + private static boolean isProgramLinked(/*@Nonnull*/ final GL3ES3 gl, final int program) { + return ShaderUtil.isProgramStatusValid(gl, program, GL3ES3.GL_LINK_STATUS); + } + + /** + * Loads a shader program from a pair of strings. + * + * @param gl Current OpenGL context + * @param vss Vertex shader source + * @param fss Fragment shader source + * @return OpenGL handle to the shader program, not negative + * @throws NullPointerException if context or either source is null + * @throws IllegalArgumentException if either source is empty + * @throws GLException if program did not compile or link successfully + */ + /*@Nonnegative*/ + public static int loadProgram(/*@Nonnull*/ final GL3ES3 gl, + /*@Nonnull*/ final String vss, + /*@Nonnull*/ final String fss) { + + Check.notNull(gl, "GL cannot be null"); + Check.notNull(vss, "Vertex shader source cannot be null"); + Check.notNull(fss, "Fragment shader source cannot be null"); + Check.argument(!vss.isEmpty(), "Vertex shader source cannot be empty"); + Check.argument(!fss.isEmpty(), "Fragment shader source cannot be empty"); + + // Create the shaders + final int vs = loadShader(gl, vss, GL3ES3.GL_VERTEX_SHADER); + final int fs = loadShader(gl, fss, GL3ES3.GL_FRAGMENT_SHADER); + + // Create a program and attach the shaders + final int program = gl.glCreateProgram(); + gl.glAttachShader(program, vs); + gl.glAttachShader(program, fs); + + // Link the program + gl.glLinkProgram(program); + if (!isProgramLinked(gl, program)) { + final String log = ShaderUtil.getProgramInfoLog(gl, program); + throw new GLException(log); + } + + // Note: We don't validate here because glValidateProgram checks if the program + // can execute in the CURRENT GL state, which may not have a VAO bound yet. + // The program will still fail at runtime with clear errors if there are issues. + + // Clean up the shaders + gl.glDeleteShader(vs); + gl.glDeleteShader(fs); + + return program; + } + + /** + * Loads a shader from a string. + * + * @param gl Current OpenGL context, assumed not null + * @param source Source code of the shader as one long string, assumed not null or empty + * @param type Type of shader, assumed valid + * @return OpenGL handle to the shader, not negative + * @throws GLException if a GLSL-capable context is not active or could not compile shader + */ + /*@Nonnegative*/ + private static int loadShader(/*@Nonnull*/ final GL3ES3 gl, + /*@Nonnull*/ final String source, + final int type) { + + // Create and read source + final int shader = gl.glCreateShader(type); + gl.glShaderSource( + shader, // shader handle + 1, // number of strings + new String[] {source}, // array of strings + null); // lengths of strings + + // Compile + gl.glCompileShader(shader); + if (!isShaderCompiled(gl, shader)) { + final String log = ShaderUtil.getShaderInfoLog(gl, shader); + throw new GLException(log); + } + + return shader; + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/Texture.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/Texture.java new file mode 100644 index 0000000000..91fb9701e0 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/Texture.java @@ -0,0 +1,180 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import com.jogamp.opengl.GL; +import com.jogamp.opengl.GL3; + + +/** + * OpenGL texture. + */ +abstract class Texture { + + /** + * ID of internal OpenGL texture. + */ + /*@Nonnegative*/ + protected final int handle; + + /** + * {@code GL_TEXTURE2D}, etc. + */ + protected final int type; + + /** + * True for quality texturing. + */ + protected final boolean mipmap; + + /** + * Constructs a {@link Texture}. + * + * @param gl Current OpenGL context + * @param type Type of texture + * @param mipmap True for quality texturing + * @throws NullPointerException if context is null + * @throws IllegalArgumentException if type is invalid + */ + Texture(/*@Nonnull*/ final GL gl, final int type, final boolean mipmap) { + + Check.notNull(gl, "GL cannot be null"); + Check.argument(isValidTextureType(type), "Texture type is invalid"); + + this.handle = generate(gl); + this.type = type; + this.mipmap = mipmap; + } + + /** + * Binds underlying OpenGL texture on a texture unit. + * + * @param gl Current OpenGL context + * @param unit OpenGL enumeration for a texture unit, i.e., {@code GL_TEXTURE0} + * @throws NullPointerException if context is null + * @throws IllegalArgumentException if unit is invalid + */ + void bind(/*@Nonnull*/ final GL gl, final int unit) { + + Check.notNull(gl, "GL cannot be null"); + Check.argument(isValidTextureUnit(unit), "Texture unit is invalid"); + + gl.glActiveTexture(unit); + gl.glBindTexture(type, handle); + } + + /** + * Destroys the texture. + * + * @param gl Current OpenGL context + * @throws NullPointerException if context is null + */ + void dispose(/*@Nonnull*/ final GL gl) { + + Check.notNull(gl, "GL cannot be null"); + + final int[] handles = new int[] {handle}; + gl.glDeleteTextures(1, handles, 0); + } + + /** + * Generates an OpenGL texture object. + * + * @param gl Current OpenGL context, assumed not null + * @return Handle to the OpenGL texture + */ + private static int generate(/*@Nonnull*/ final GL gl) { + final int[] handles = new int[1]; + gl.glGenTextures(1, handles, 0); + return handles[0]; + } + + /** + * Checks if an integer is a valid OpenGL enumeration for a texture type. + * + * @param type Integer to check + * @return True if type is valid + */ + private static boolean isValidTextureType(final int type) { + switch (type) { + case GL3.GL_TEXTURE_1D: + case GL3.GL_TEXTURE_2D: + case GL3.GL_TEXTURE_3D: + return true; + default: + return false; + } + } + + /** + * Checks if an integer is a valid OpenGL enumeration for a texture unit. + * + * @param unit Integer to check + * @return True if unit is valid + */ + private static boolean isValidTextureUnit(final int unit) { + return (unit >= GL.GL_TEXTURE0) && (unit <= GL.GL_TEXTURE31); + } + + /** + * Updates filter parameters for the texture. + * + * @param gl Current OpenGL context + * @param smooth True to interpolate samples + * @throws NullPointerException if context is null + */ + void setFiltering(/*@Nonnull*/ final GL gl, final boolean smooth) { + + Check.notNull(gl, "GL cannot be null"); + + final int mag; + final int min; + if (smooth) { + mag = GL.GL_LINEAR; + min = mipmap ? GL.GL_LINEAR_MIPMAP_NEAREST : GL.GL_LINEAR; + } else { + mag = GL.GL_NEAREST; + min = mipmap ? GL.GL_NEAREST_MIPMAP_NEAREST : GL.GL_NEAREST; + } + + setParameter(gl, GL.GL_TEXTURE_MAG_FILTER, mag); + setParameter(gl, GL.GL_TEXTURE_MIN_FILTER, min); + } + + /** + * Changes a texture parameter for a 2D texture. + * + * @param gl Current OpenGL context, assumed not null + * @param name Name of the parameter, assumed valid + * @param value Value of the parameter, assumed valid + */ + private void setParameter(/*@Nonnull*/ final GL gl, final int name, final int value) { + gl.glTexParameteri(type, name, value); + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/Texture2D.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/Texture2D.java new file mode 100644 index 0000000000..846e7a65af --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/Texture2D.java @@ -0,0 +1,177 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import com.jogamp.opengl.GL; +import com.jogamp.opengl.GL2; +import java.awt.Rectangle; +import java.nio.ByteBuffer; + + +/** + * Two-dimensional OpenGL texture. + */ +abstract class Texture2D extends Texture { + + // Size on X axis + /*@Nonnegative*/ + protected final int width; + + // Size on Y axis + /*@Nonnegative*/ + protected final int height; + + /** + * Creates a 2D texture. + * + * @param gl Current OpenGL context + * @param width Size of texture on X axis + * @param height Size of texture on Y axis + * @param smooth True to interpolate samples + * @param mipmap True for high quality + * @throws NullPointerException if context is null + * @throws IllegalArgumentException if width or height is negative + */ + Texture2D(/*@Nonnull*/ final GL gl, + /*@Nonnegative*/ final int width, + /*@Nonnegative*/ final int height, + final boolean smooth, + final boolean mipmap) { + + super(gl, GL.GL_TEXTURE_2D, mipmap); + + Check.argument(width >= 0, "Width cannot be negative"); + Check.argument(height >= 0, "Height cannot be negative"); + + // Copy parameters + this.width = width; + this.height = height; + + // Set up + bind(gl, GL.GL_TEXTURE0); + allocate(gl); + setFiltering(gl, smooth); + } + + /** + * Allocates a 2D texture for use with a backing store. + * + * @param gl Current OpenGL context, assumed not null + * @param width Width of texture, assumed not negative + * @param height Height of texture, assumed not negative + */ + private void allocate(/*@Nonnull*/ final GL gl) { + gl.glTexImage2D( + GL.GL_TEXTURE_2D, // target + 0, // level + getInternalFormat(gl), // internal format + width, // width + height, // height + 0, // border + GL.GL_RGB, // format (unused) + GL.GL_UNSIGNED_BYTE, // type (unused) + null); // pixels + } + + /** + * Determines the proper texture format for an OpenGL context. + * + * @param gl Current OpenGL context + * @return Texture format enumeration for OpenGL context + * @throws NullPointerException if context is null (optional) + */ + protected abstract int getFormat(/*@Nonnull*/ GL gl); + + /** + * Determines the proper internal texture format for an OpenGL context. + * + * @param gl Current OpenGL context + * @return Internal texture format enumeration for OpenGL context + * @throws NullPointerException if context is null (optional) + */ + protected abstract int getInternalFormat(/*@Nonnull*/ GL gl); + + /** + * Updates the texture. + * + *

              + * Copies any areas marked with {@link #mark(int, int, int, int)} from the local image to the + * OpenGL texture. Only those areas will be modified. + * + * @param gl Current OpenGL context + * @param pixels Data of entire image + * @param area Region to update + * @throws NullPointerException if context, pixels, or area is null + */ + void update(/*@Nonnull*/ final GL gl, + /*@Nonnull*/ final ByteBuffer pixels, + /*@Nonnull*/ final Rectangle area) { + + Check.notNull(gl, "GL cannot be null"); + Check.notNull(pixels, "Pixels cannot be null"); + Check.notNull(area, "Area cannot be null"); + + final int parameters[] = new int[4]; + + // Store unpack parameters + gl.glGetIntegerv(GL.GL_UNPACK_ALIGNMENT, parameters, 0); + gl.glGetIntegerv(GL2.GL_UNPACK_SKIP_ROWS, parameters, 1); + gl.glGetIntegerv(GL2.GL_UNPACK_SKIP_PIXELS, parameters, 2); + gl.glGetIntegerv(GL2.GL_UNPACK_ROW_LENGTH, parameters, 3); + + // Change unpack parameters + gl.glPixelStorei(GL.GL_UNPACK_ALIGNMENT, 1); + gl.glPixelStorei(GL2.GL_UNPACK_SKIP_ROWS, area.y); + gl.glPixelStorei(GL2.GL_UNPACK_SKIP_PIXELS, area.x); + gl.glPixelStorei(GL2.GL_UNPACK_ROW_LENGTH, width); + + // Update the texture + gl.glTexSubImage2D( + GL.GL_TEXTURE_2D, // target + 0, // mipmap level + area.x, // x offset + area.y, // y offset + area.width, // width + area.height, // height + getFormat(gl), // format + GL.GL_UNSIGNED_BYTE, // type + pixels); // pixels + + // Reset unpack parameters + gl.glPixelStorei(GL.GL_UNPACK_ALIGNMENT, parameters[0]); + gl.glPixelStorei(GL2.GL_UNPACK_SKIP_ROWS, parameters[1]); + gl.glPixelStorei(GL2.GL_UNPACK_SKIP_PIXELS, parameters[2]); + gl.glPixelStorei(GL2.GL_UNPACK_ROW_LENGTH, parameters[3]); + + // Generate mipmaps + if (mipmap) { + gl.glGenerateMipmap(GL.GL_TEXTURE_2D); + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/TextureBackingStore.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/TextureBackingStore.java new file mode 100644 index 0000000000..c909fc9f80 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/TextureBackingStore.java @@ -0,0 +1,428 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import com.jogamp.opengl.GL; +import java.awt.AlphaComposite; +import java.awt.Color; +import java.awt.Font; +import java.awt.Graphics2D; +import java.awt.Rectangle; +import java.awt.RenderingHints; +import java.awt.image.BufferedImage; +import java.awt.image.DataBuffer; +import java.awt.image.DataBufferByte; +import java.nio.ByteBuffer; + + +/** + * Wrapper for an OpenGL texture that can be drawn into. + * + *

              + * {@code TextureBackingStore} provides the ability to draw into a grayscale texture using Java 2D. + * To increase performance, the backing store maintains a local copy as a {@link BufferedImage}. + * Changes are applied to the image first and then pushed to the texture all at once. + * + *

              + * After creating a backing store, a client simply needs to grab its {@link Graphics2D} and use its + * AWT or Java 2D drawing methods. Then the area that was drawn to should be noted with the {@link + * #mark(int, int, int, int)} method. After everything is drawn, activate the texture using {@link + * #bind(GL, int)} and call {@link #update(GL)} to actually push the dirty regions to the texture. + * If further changes need to made, consider using {@link #clear(int, int, int, int)} to erase old + * data. + * + *

              + * Note that since texturing hasn't changed much, BackingStore is compatible with GL2 or GL3. For + * that reason, it only requests simple GL objects. + */ +/*@NotThreadSafe*/ +final class TextureBackingStore { + + /** + * Size in X direction. + */ + /*@Nonnegative*/ + private final int width; + + /** + * Size in Y direction. + */ + /*@Nonnegative*/ + private final int height; + + /** + * Local copy of texture. + */ + /*@Nonnull*/ + private final BufferedImage image; + + /** + * Java2D utility for drawing into image. + */ + /*@Nonnull*/ + private final Graphics2D g2d; + + /** + * Raw image data for pushing to texture. + */ + /*@Nonnull*/ + private final ByteBuffer pixels; + + /** + * True for quality texturing. + */ + /*@Nonnull*/ + private final boolean mipmap; + + /** + * OpenGL texture on video card. + */ + /*@CheckForNull*/ + private Texture2D texture = null; + + /** + * Area in image not pushed to texture. + */ + /*@CheckForNull*/ + private Rectangle dirtyRegion = null; + + /** + * True to interpolate samples. + */ + private boolean smooth; + + /** + * True if interpolation has changed. + */ + private boolean smoothChanged = false; + + /** + * Constructs a {@link TextureBackingStore}. + * + * @param width Width of backing store + * @param height Height of backing store + * @param font Style of text + * @param antialias True to render smooth edges + * @param subpixel True to use subpixel accuracy + * @param smooth True to interpolate samples + * @param mipmap True for quality texturing + * @throws IllegalArgumentException if width or height is negative + * @throws NullPointerException if font is null + */ + TextureBackingStore(/*@Nonnegative*/ final int width, + /*@Nonnegative*/ final int height, + /*@Nonnull*/ final Font font, + final boolean antialias, + final boolean subpixel, + final boolean smooth, + final boolean mipmap) { + + Check.argument(width >= 0, "Width cannot be negative"); + Check.argument(height >= 0, "Height cannot be negative"); + Check.notNull(font, "Font cannot be null"); + + this.width = width; + this.height = height; + this.image = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY); + this.g2d = createGraphics(image, font, antialias, subpixel); + this.pixels = getPixels(image); + this.mipmap = mipmap; + this.smooth = smooth; + } + + /** + * Binds the underlying OpenGL texture on a texture unit. + * + * @param gl Current OpenGL context + * @param unit OpenGL enumeration for a texture unit (e.g., {@code GL_TEXTURE0}) + * @throws NullPointerException if context is null + * @throws IllegalArgumentException if unit is invalid + */ + void bind(/*@Nonnull*/ final GL gl, final int unit) { + + Check.notNull(gl, "GL cannot be null"); + Check.argument(unit >= GL.GL_TEXTURE0, "Unit is invalid"); + + ensureTexture(gl); + texture.bind(gl, unit); + } + + /** + * Clears out an area in the backing store. + * + * @param x Position of area's left edge + * @param y Position of area's top edge + * @param width Width of area + * @param height Height of area + * @throws IllegalArgumentException if x, y, width, or height is negative + */ + void clear(/*@Nonnegative*/ final int x, + /*@Nonnegative*/ final int y, + /*@Nonnegative*/ final int width, + /*@Nonnegative*/ final int height) { + + Check.argument(x >= 0, "X cannot be negative"); + Check.argument(y >= 0, "Y cannot be negative"); + Check.argument(width >= 0, "Width cannot be negative"); + Check.argument(height >= 0, "Height cannot be negative"); + + g2d.setComposite(AlphaComposite.Clear); + g2d.fillRect(x, y, width, height); + g2d.setComposite(AlphaComposite.Src); + } + + /** + * Creates a graphics for a backing store. + * + * @param image Backing store's local copy of data, assumed not null + * @param font Style of text, assumed not null + * @param antialias True to smooth edges + * @param subpixel True to use subpixel accuracy + * @return Graphics2D for rendering into image, not null + */ + /*@Nonnull*/ + private static Graphics2D createGraphics(/*@Nonnull*/ final BufferedImage image, + /*@Nonnull*/ final Font font, + final boolean antialias, + final boolean subpixel) { + + final Graphics2D g2d = image.createGraphics(); + + g2d.setComposite(AlphaComposite.Src); + g2d.setColor(Color.WHITE); + g2d.setFont(font); + g2d.setRenderingHint( + RenderingHints.KEY_TEXT_ANTIALIASING, + antialias ? + RenderingHints.VALUE_TEXT_ANTIALIAS_ON : + RenderingHints.VALUE_TEXT_ANTIALIAS_OFF); + g2d.setRenderingHint( + RenderingHints.KEY_FRACTIONALMETRICS, + subpixel ? + RenderingHints.VALUE_FRACTIONALMETRICS_ON : + RenderingHints.VALUE_FRACTIONALMETRICS_OFF); + return g2d; + } + + /** + * Releases resources used by the backing store. + * + * @param gl Current OpenGL context + * @throws NullPointerException if context is null + */ + void dispose(/*@Nonnull*/ final GL gl) { + + Check.notNull(gl, "GL cannot be null"); + + // Dispose of image + if (image != null) { + image.flush(); + } + + // Dispose of texture + if (texture != null) { + texture.dispose(gl); + } + } + + /** + * Makes sure the texture has been created. + * + * @param gl Current OpenGL context, assumed not null + */ + private void ensureTexture(/*@Nonnull*/ final GL gl) { + if (texture == null) { + texture = new GrayTexture2D(gl, width, height, smooth, mipmap); + } + } + + /** + * Returns Java2D Graphics2D object for drawing into this store. + * + * @return Java2D graphics for drawing into this store, not null + */ + /*@Nonnull*/ + final Graphics2D getGraphics() { + return g2d; + } + + /** + * Returns height of the underlying image and texture. + * + * @return Height of the underlying image, not negative + */ + /*@Nonnegative*/ + final int getHeight() { + return height; + } + + /** + * Returns local copy of texture. + * + * @return Local copy of texture, not null + */ + /*@Nonnull*/ + final BufferedImage getImage() { + return image; + } + + /** + * Retrieves the underlying pixels of a buffered image. + * + * @param image Image with underlying pixel buffer, assumed not null + * @return Pixel data of the image as a byte buffer, not null + * @throws IllegalStateException if image is not stored as bytes + */ + /*@Nonnull*/ + private static ByteBuffer getPixels(/*@Nonnull*/ final BufferedImage image) { + + final DataBuffer db = image.getRaster().getDataBuffer(); + final byte[] arr; + + if (db instanceof DataBufferByte) { + arr = ((DataBufferByte) db).getData(); + } else { + throw new IllegalStateException("Unexpected format in image."); + } + return ByteBuffer.wrap(arr); + } + + /** + * Returns true if texture is interpolating samples. + * + * @return True if texture is interpolating samples + */ + final boolean getUseSmoothing() { + return smooth; + } + + /** + * Returns width of the underlying image and texture. + * + * @return Width of the underlying image, not negative + */ + /*@Nonnegative*/ + final int getWidth() { + return width; + } + + /** + * Marks an area of the backing store to be updated. + * + *

              + * The next time the backing store is updated, the area will be pushed to the texture. + * + * @param x Position of area's left edge + * @param y Position of area's top edge + * @param width Width of area + * @param height Height of area + * @throws IllegalArgumentException if x, y, width, or height is negative + */ + void mark(/*@Nonnegative*/ final int x, + /*@Nonnegative*/ final int y, + /*@Nonnegative*/ final int width, + /*@Nonnegative*/ final int height) { + + Check.argument(x >= 0, "X cannot be negative"); + Check.argument(y >= 0, "Y cannot be negative"); + Check.argument(width >= 0, "Width cannot be negative"); + Check.argument(height >= 0, "Height cannot be negative"); + + final Rectangle region = new Rectangle(x, y, width, height); + if (dirtyRegion == null) { + dirtyRegion = region; + } else { + dirtyRegion.add(region); + } + } + + /** + * Specifies whether the texture should interpolate samples. + */ + final void setUseSmoothing(final boolean useSmoothing) { + smoothChanged = (this.smooth != useSmoothing); + this.smooth = useSmoothing; + } + + /** + * Uploads any recently drawn data to the texture. + * + * @param gl Current OpenGL context + * @throws NullPointerException if context is null + */ + void update(/*@Nonnull*/ final GL gl) { + + Check.notNull(gl, "GL cannot be null"); + + // Make sure texture is created + ensureTexture(gl); + + // Check smoothing + if (smoothChanged) { + texture.setFiltering(gl, smooth); + smoothChanged = false; + } + + // Check texture + if (dirtyRegion != null) { + texture.update(gl, pixels, dirtyRegion); + dirtyRegion = null; + } + } + + /** + * Observer of texture backing store events. + */ + interface EventListener { + + /** + * Responds to an event from a texture backing store. + * + * @param type Type of event + * @throws NullPointerException if event type is null (optional) + */ + public void onBackingStoreEvent(/*@Nonnull*/ EventType type); + } + + /** + * Type of event fired from the backing store. + */ + enum EventType { + + /** + * Backing store being resized. + */ + REALLOCATE, + + /** + * Backing store could not be resized. + */ + FAILURE; + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/TextureBackingStoreManager.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/TextureBackingStoreManager.java new file mode 100644 index 0000000000..116b226ee1 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/TextureBackingStoreManager.java @@ -0,0 +1,368 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import com.jogamp.opengl.GL; +import com.jogamp.opengl.GLContext; +import com.jogamp.opengl.util.packrect.BackingStoreManager; +import com.jogamp.opengl.util.packrect.Rect; +import java.awt.Font; +import java.util.ArrayList; +import java.util.List; +import jogamp.text.util.TextureBackingStore.EventListener; +import jogamp.text.util.TextureBackingStore.EventType; + + +/** + * Handler for allocating and reallocating texture backing stores. + * + *

              + * When a backing store is no longer big enough a new backing store needs to be created to replace + * it. Accordingly, the data from the old backing store should be copied to the new one. + * + *

              + * Throughout this process decisions may need to be made about getting rid of old entries and + * handling failures. {@code TextureBackingStoreManager} handles these issues, although it + * delegates some actions to observers by firing backing store events. + */ +final class TextureBackingStoreManager implements BackingStoreManager { + + /** + * Whether or not texture backing store manager should print debugging information. + */ + private static final boolean DEBUG = false; + + /** + * Observers of backing store events. + */ + /*@Nonnull*/ + private final List listeners = new ArrayList(); + + /** + * Style of text. + */ + /*@Nonnull*/ + private final Font font; + + /** + * True to render smooth edges. + */ + private final boolean antialias; + + /** + * True to use subpixel accuracy. + */ + private final boolean subpixel; + + /** + * True for high quality texturing. + */ + private final boolean mipmap; + + /** + * True to interpolate samples. + */ + private boolean smooth = false; + + /** + * Constructs a {@link TextureBackingStoreManager}. + * + * @param font Style of text + * @param antialias True to render smooth edges + * @param subpixel True to use subpixel accuracy + * @param mipmap True for high quality texturing + * @throws NullPointerException if font is null + */ + TextureBackingStoreManager(/*@Nonnull*/ final Font font, + final boolean antialias, + final boolean subpixel, + final boolean mipmap) { + + Check.notNull(font, "Font cannot be null"); + + this.font = font; + this.antialias = antialias; + this.subpixel = subpixel; + this.mipmap = mipmap; + } + + /** + * Performs an action when a rectangle cannot be added. + * + *

              + * Will happen if the backing store ever reaches its maximum size, which in this case is + * dictated by the maximum texture size supported by the video card. Fires an event of type + * {@link EventType.FAILURE} so that an observer of the backing store can decide what to + * actually do. + * + * @param cause Rectangle that could not be added + * @param attempt Number of times it has been tried so far + * @return False if can do nothing more to free space + * @throws NullPointerException if cause is null + */ + @Override + public boolean additionFailed(/*@Nonnull*/ final Rect cause, final int attempt) { + + Check.notNull(cause, "Cause cannot be null"); + + // Print debugging information + if (DEBUG) { + System.err.println("*** Addition failed! ***"); + } + + // Pass event to observers + fireEvent(EventType.FAILURE); + if (attempt == 0) { + return true; + } + return false; + } + + /** + * Adds an object that wants to be notified of events. + * + *

              The observer will be notified when: + * + *

                + *
              • a backing store needs to be expanded and + *
              • an item cannot be added to the backing store. + *
              + * + * @param listener Observer of backing store events + * @throws NullPointerException if listener is null + */ + void addListener(/*@Nonnull*/ final EventListener listener) { + + Check.notNull(listener, "Listener cannot be null"); + + listeners.add(listener); + } + + /** + * Creates a new backing store for the packer. + * + * @param width Width of new backing store + * @param height Height of new backing store + * @return New backing store, not null + * @throws IllegalArgumentException if width or height is negative + */ + /*@Nonnull*/ + @Override + public Object allocateBackingStore(/*@Nonnegative*/ final int width, + /*@Nonnegative*/ final int height) { + + Check.argument(width >= 0, "Width is negative"); + Check.argument(height >= 0, "Height is negative"); + + // Print debugging information + if (DEBUG) { + System.err.printf("Make back store %d x %d\n", width, height); + } + + // Make a new backing store + return new TextureBackingStore( + width, height, + font, + antialias, subpixel, + smooth, mipmap); + } + + /** + * Starts a copy from an old backing store to a new one. + * + * @param obs Backing store being copied from + * @param nbs Backing store being copied to + */ + @Override + public void beginMovement(final Object obs, final Object nbs) { + // empty + } + + /** + * Determines if a backing store can be compacted. + * + * @return True if backing store can be compacted + */ + @Override + public boolean canCompact() { + return true; + } + + /** + * Disposes of a backing store. + * + *

              + * Happens immediately before a backing store needs to be expanded, since the manager will + * actually make a new one. + * + * @param bs Backing store being deleted + * @throws NullPointerException if backing store is null + * @throws ClassCastException if backing store is not a {@code TextureBackingStore} + */ + @Override + public void deleteBackingStore(/*@Nonnull*/ final Object bs) { + + Check.notNull(bs, "Backing store cannot be null"); + + // Dispose the backing store + final GL gl = GLContext.getCurrentGL(); + final TextureBackingStore tbs = (TextureBackingStore) bs; + tbs.dispose(gl); + } + + /** + * Finishes a copy from an old backing store to a new one. + * + *

              + * Marks all of the new backing store dirty. The next time it is updated all of the new data + * will be copied to the texture. + * + * @param obs Backing store being copied from + * @param nbs Backing store being copied to + * @throws NullPointerException if new backing store is null + * @throws ClassCastException if new backing store is not a {@code TextureBackingStore} + */ + @Override + public void endMovement(final Object obs, /*@Nonnull*/ final Object nbs) { + + Check.notNull(nbs, "Backing store cannot be null"); + + // Mark the entire backing store as dirty + final TextureBackingStore ntbs = (TextureBackingStore) nbs; + final int width = ntbs.getWidth(); + final int height = ntbs.getHeight(); + ntbs.mark(0, 0, width, height); + } + + /** + * Sends an event to all listeners. + * + * @param type Type of event to send, assumed not null + */ + private void fireEvent(/*@Nonnull*/ final EventType type) { + for (final EventListener listener : listeners) { + assert listener != null : "addListener rejects null"; + listener.onBackingStoreEvent(type); + } + } + + /** + * Returns true if is interpolating samples. + */ + final boolean getUseSmoothing() { + return smooth; + } + + /** + * Copies part of an old backing store to a new one. + * + *

              + * This method is normally called when a backing store runs out of room and needs to be + * resized, but it can also be called when a backing store is compacted. In that case {@code + * obs} will be equal to {@code nbs}. This situation may need to be handled differently. + * + * @param obs Old backing store being copied from + * @param ol Area of old backing store to copy + * @param nbs New backing store being copied to + * @param nl Area of new backing store to copy to + * @throws NullPointerException if either backing store or area is null + * @throws ClassCastException if either backing store is not the right type + */ + @Override + public void move(/*@Nonnull*/ final Object obs, + /*@Nonnull*/ final Rect ol, + /*@Nonnull*/ final Object nbs, + /*@Nonnull*/ final Rect nl) { + + Check.notNull(obs, "Old backing store cannot be null"); + Check.notNull(ol, "Old location cannot be null"); + Check.notNull(nbs, "New backing store cannot be null"); + Check.notNull(nl, "New location cannot be null"); + + final TextureBackingStore otbs = (TextureBackingStore) obs; + final TextureBackingStore ntbs = (TextureBackingStore) nbs; + + if (otbs == ntbs) { + otbs.getGraphics().copyArea( + ol.x(), ol.y(), + ol.w(), ol.h(), + nl.x() - ol.x(), + nl.y() - ol.y()); + } else { + ntbs.getGraphics().drawImage( + otbs.getImage(), + nl.x(), nl.y(), + nl.x() + nl.w(), + nl.y() + nl.h(), + ol.x(), ol.y(), + ol.x() + ol.w(), + ol.y() + ol.h(), + null); + } + } + + /** + * Performs an action when a store needs to be expanded. + * + *

              + * Fires an event of type {@link EventType.REALLOCATE} so that an observer of the backing store + * can decide what to actually do. This will only happen on the first attempt. + * + * @param cause Rectangle that is being added + * @param attempt Number of times it has been tried so far + * @return True if packer should retry addition + * @throws NullPointerException if cause is null + */ + @Override + public boolean preExpand(/*@Nonnull*/ final Rect cause, final int attempt) { + + Check.notNull(cause, "Cause cannot be null"); + + // Print debugging information + if (DEBUG) { + System.err.println("In preExpand: attempt number " + attempt); + } + + // Pass event to observers + if (attempt == 0) { + fireEvent(EventType.REALLOCATE); + return true; + } + return false; + } + + /** + * Changes whether texture should interpolate samples. + * + * @param useSmoothing True if texture should interpolate + */ + final void setUseSmoothing(final boolean useSmoothing) { + this.smooth = useSmoothing; + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/UnicodeGlyphProducer.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/UnicodeGlyphProducer.java new file mode 100644 index 0000000000..839f1a906f --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/UnicodeGlyphProducer.java @@ -0,0 +1,166 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import java.awt.Font; +import java.awt.font.FontRenderContext; +import java.awt.font.GlyphVector; +import java.util.List; +import jogamp.text.TextRenderer.RenderDelegate; + + +/** + * {@link GlyphProducer} for creating glyphs of all characters in the basic unicode block. + */ +/*@NotThreadSafe*/ +final class UnicodeGlyphProducer extends AbstractGlyphProducer { + + /** + * Storage for glyphs. + */ + /*@Nonnull*/ + private final GlyphMap glyphMap = new GlyphMap(); + + /** + * Constructs a {@link UnicodeGlyphProducer}. + * + * @param font Font glyphs will be made of + * @param rd Object for controlling rendering + * @param frc Details on how to render fonts + * @throws NullPointerException if font, render delegate, or font render context is null + */ + UnicodeGlyphProducer(/*@Nonnull*/ final Font font, + /*@Nonnull*/ final RenderDelegate rd, + /*@Nonnull*/ final FontRenderContext frc) { + super(font, rd, frc); + } + + @Override + public void clearGlyphs() { + glyphMap.clear(); + } + + /** + * Creates a single glyph from text with a complex layout. + * + * @param str Text with a complex layout + * @param gv Glyph vector of entire text + * @return Read-only pointer to list of glyphs valid until next call + * @throws NullPointerException if string is null + * @throws NullPointerException if glyph vector is null + */ + /*@Nonnull*/ + private List createComplexGlyph(/*@Nonnull*/ final String str, + /*@Nonnull*/ final GlyphVector gv) { + + Check.notNull(str, "String cannot be null"); + Check.notNull(gv, "Glyph vector be null"); + + clearOutput(); + + // Create the glyph and add it to output + Glyph glyph = glyphMap.get(str); + if (glyph == null) { + glyph = new Glyph(str, gv); + measure(glyph); + glyphMap.put(str, glyph); + } + addToOutput(glyph); + + return getOutput(); + } + + /*@Nonnull*/ + @Override + public Glyph createGlyph(final char c) { + Glyph glyph = glyphMap.get(c); + if (glyph == null) { + glyph = createGlyphImpl(c); + } + return glyph; + } + + /*@Nonnull*/ + private Glyph createGlyphImpl(final char c) { + + // Create a glyph from the glyph vector + final GlyphVector gv = createGlyphVector(c); + final Glyph glyph = new Glyph(c, gv); + + // Measure and store it + measure(glyph); + glyphMap.put(c, glyph); + + return glyph; + } + + /*@Nonnull*/ + @Override + public List createGlyphs(/*@Nonnull*/ final String str) { + + Check.notNull(str, "String cannot be null"); + + if (!hasComplexCharacters(str)) { + return createSimpleGlyphs(str); + } else { + final GlyphVector gv = createGlyphVector(str); + return isComplex(gv) ? createComplexGlyph(str, gv) : createSimpleGlyphs(str); + } + } + + /** + * Creates multiple glyphs from text with a simple layout. + * + * @param str Text with a simple layout + * @return Read-only pointer to list of glyphs valid until next call + * @throws NullPointerException if string is null + */ + /*@Nonnull*/ + private List createSimpleGlyphs(/*@Nonnull*/ final String str) { + + Check.notNull(str, "String cannot be null"); + + clearOutput(); + + // Create the glyphs and add them to the output + final int len = str.length(); + for (int i = 0; i < len; ++i) { + final char c = str.charAt(i); + final Glyph glyph = createGlyph(c); + addToOutput(glyph); + } + + return getOutput(); + } + + @Override + public void removeGlyph(/*@CheckForNull*/ final Glyph glyph) { + glyphMap.remove(glyph); + } +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/Uniform.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/Uniform.java new file mode 100644 index 0000000000..3ebc4b9eff --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/Uniform.java @@ -0,0 +1,80 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import com.jogamp.opengl.GL2GL3; + + +/** + * Uniform variable in a shader. + */ +abstract class Uniform { + + /** + * Index of uniform in shader. + */ + /*@Nonnegative*/ + final int location; + + /** + * True if local value should be pushed. + */ + boolean dirty; + + /** + * Constructs a {@link Uniform}. + * + * @param gl Current OpenGL context + * @param program OpenGL handle to shader program + * @param name Name of the uniform in shader source code + * @throws NullPointerException if context or name is null + * @throws IllegalArgumentException if program is negative + */ + Uniform(/*@Nonnull*/ final GL2GL3 gl, + /*@Nonnegative*/ final int program, + /*@Nonnull*/ final String name) { + + Check.notNull(gl, "GL cannot be null"); + Check.notNull(name, "Name cannot be null"); + Check.argument(program >= 0, "Program cannot be negative"); + + location = gl.glGetUniformLocation(program, name); + if (location == -1) { + throw new IllegalStateException("Could not find uniform in program"); + } + } + + /** + * Pushes the local value to the shader program. + * + * @param gl Current OpenGL context + * @throws NullPointerException if context is null + */ + abstract void update(/*@Nonnull*/ GL2GL3 gl); +} diff --git a/modules/VisualizationEngine/src/main/java/jogamp/text/util/Vec4Uniform.java b/modules/VisualizationEngine/src/main/java/jogamp/text/util/Vec4Uniform.java new file mode 100644 index 0000000000..fb4107edad --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/jogamp/text/util/Vec4Uniform.java @@ -0,0 +1,65 @@ +/* + * Copyright 2012 JogAmp Community. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, are + * permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, this list of + * conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright notice, this list + * of conditions and the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF + * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * The views and conclusions contained in the software and documentation are those of the + * authors and should not be interpreted as representing official policies, either expressed + * or implied, of JogAmp Community. + */ + +package jogamp.text.util; + +import com.jogamp.opengl.GL2GL3; + + +/** + * Uniform for a {@code vec4}. + */ +/*@NotThreadSafe*/ +final class Vec4Uniform extends Uniform { + + /** + * Local copy of vector values. + */ + /*@Nonnull*/ + final float[] value = new float[4]; + + /** + * Constructs a uniform vector. + * + * @param gl2gl3 Current OpenGL context + * @param program OpenGL handle to shader program + * @param name Name of the uniform in shader source code + * @throws NullPointerException if context is null + */ + Vec4Uniform(/*@Nonnull*/ final GL2GL3 gl, + /*@Nonnegative*/ final int program, + /*@Nonnull*/ final String name) { + super(gl, program, name); + } + + @Override + void update(/*@Nonnull*/ final GL2GL3 gl) { + Check.notNull(gl, "GL cannot be null"); + gl.glUniform4fv(location, 1, value, 0); + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/FrameTimings.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/FrameTimings.java new file mode 100644 index 0000000000..c2447d2c86 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/FrameTimings.java @@ -0,0 +1,30 @@ +package org.gephi.viz.engine; + +import java.util.Map; + +/** + * CPU-side timings (in nanoseconds) captured for the most recent + * {@link VizEngine#display()} call. + * + *

              Each field captures the wall-clock time spent in a particular phase of + * a single frame, as observed on the rendering thread. These are CPU + * latencies (the time spent submitting work) rather than GPU execution + * times β€” the latter would require explicit GL timer queries.

              + * + * @param totalNs total time spent inside {@link VizEngine#display()} + * @param worldUpdateNs time spent producing/consuming world data + * (including {@code worldUpdated()} calls on renderers) + * @param renderNs time spent in the render pass loop + * @param perRendererCategoryNs sum of {@code renderer.render(...)} times per + * {@link org.gephi.viz.engine.spi.PipelinedExecutor#getCategory() category}, + * across all rendering layers + */ +public record FrameTimings( + long totalNs, + long worldUpdateNs, + long renderNs, + Map perRendererCategoryNs +) { + + public static final FrameTimings EMPTY = new FrameTimings(0L, 0L, 0L, Map.of()); +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/VizEngine.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/VizEngine.java new file mode 100644 index 0000000000..ca1465e766 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/VizEngine.java @@ -0,0 +1,935 @@ +package org.gephi.viz.engine; + +import java.awt.Color; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Objects; +import java.util.Queue; +import java.util.Set; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.Future; +import java.util.concurrent.ThreadFactory; +import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import java.util.logging.Logger; +import java.util.stream.Collectors; +import org.gephi.graph.api.Configuration; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Rect2D; +import org.gephi.viz.engine.pipeline.RenderingLayer; +import org.gephi.viz.engine.spi.ElementsCallback; +import org.gephi.viz.engine.spi.InputListener; +import org.gephi.viz.engine.spi.PipelinedExecutor; +import org.gephi.viz.engine.spi.Renderer; +import org.gephi.viz.engine.spi.RenderingTarget; +import org.gephi.viz.engine.spi.WorldData; +import org.gephi.viz.engine.spi.WorldUpdater; +import org.gephi.viz.engine.spi.WorldUpdaterExecutionMode; +import org.gephi.viz.engine.status.GraphRenderingOptions; +import org.gephi.viz.engine.status.GraphRenderingOptionsImpl; +import org.gephi.viz.engine.status.GraphSelection; +import org.gephi.viz.engine.structure.GraphIndex; +import org.gephi.viz.engine.util.TimeUtils; +import org.gephi.viz.engine.util.gl.OpenGLOptions; +import org.joml.Matrix4f; +import org.joml.Matrix4fc; +import org.joml.Vector2f; +import org.joml.Vector2fc; +import org.joml.Vector3f; + +/** + * @param Rendering target + * @param Events type + * @author Eduardo Ramos + */ +public class VizEngine { + + public static final int DEFAULT_MAX_WORLD_UPDATES_PER_SECOND = 60; + public static final int DEFAULT_FPS = 60; + public static final boolean DEFAULT_DARK_LAF = false; + private static final RenderingLayer[] ALL_LAYERS = RenderingLayer.values(); + + //Rendering target + private final R renderingTarget; + private boolean isSetUp = false; + private boolean isDestroyed = false; + private volatile boolean updating = true; + + //State + private int width = 0; + private int height = 0; + private Rect2D viewBoundaries = new Rect2D(0, 0, 0, 0); + + //Matrix + private final Matrix4f modelMatrix = new Matrix4f().identity(); + private final Matrix4f viewMatrix = new Matrix4f(); + private final Matrix4f projectionMatrix = new Matrix4f(); + private final Matrix4f modelViewProjectionMatrix = new Matrix4f(); + float[] mvpFloats = new float[16]; // Float[] version of modelViewProjectionMatrix + + private final Matrix4f modelViewProjectionMatrixInverted = new Matrix4f(); + + private final float[] modelViewProjectionMatrixFloats = new float[16]; + + private final Vector2f translate = new Vector2f(); + + // OpenGL options + private final OpenGLOptions openGLOptions; + + //Renderers: + private final Set> allRenderers = new LinkedHashSet<>(); + private final List> renderersPipeline = new ArrayList<>(); + + //World updaters: + private final Set> allUpdaters = new LinkedHashSet<>(); + private final List> updatersPipeline = new ArrayList<>(); + private final List> updatersElementsCallbacks = new ArrayList<>(); + private final ExecutorService worldUpdaterManagerThread; + private ExecutorService updatersThreadPool; + private final WorldUpdaterExecutionMode worldUpdatersExecutionMode = + WorldUpdaterExecutionMode.CONCURRENT_ASYNCHRONOUS; + private Future allUpdatersCompletableFuture = null; + + //Input listeners: + private final Queue eventsQueue = new ConcurrentLinkedQueue<>(); + private final Set> allInputListeners = new LinkedHashSet<>(); + private final List> inputListenersPipeline = new ArrayList<>(); + + //Model, can't be null + private volatile VizEngineModel engineModel; + private List currentWorldData = Collections.emptyList(); + + //Settings: + private boolean darkLaf = DEFAULT_DARK_LAF; + private final int maxWorldUpdatesPerSecond = DEFAULT_MAX_WORLD_UPDATES_PER_SECOND; + + //CPU-side timings of the most recent display() call. Read by external + //performance monitors; written only from the render thread. Disabled by + //default so production callers don't pay the cost of the nanoTime calls + //and the per-frame Map allocation; enable with + //{@link #setFrameTimingsEnabled(boolean)}. + private volatile boolean frameTimingsEnabled = false; + private volatile FrameTimings lastFrameTimings = FrameTimings.EMPTY; + + public VizEngine(R renderingTarget) { + this.engineModel = createEmptyModel(); + this.openGLOptions = new OpenGLOptions(); + this.renderingTarget = Objects.requireNonNull(renderingTarget, "renderingTarget mandatory"); + this.worldUpdaterManagerThread = Executors.newSingleThreadExecutor( + runnable -> new Thread(runnable, "World Updater Manager")); + loadModelViewProjection(); + } + + private void setup() { + if (isSetUp) { + return; + } + + this.renderingTarget.setup(this); + + isSetUp = true; + Logger.getLogger(VizEngine.class.getSimpleName()) + .log(Level.FINE, "World updaters execution mode: {0}", worldUpdatersExecutionMode); + } + + public R getRenderingTarget() { + return renderingTarget; + } + + public OpenGLOptions getOpenGLOptions() { + return openGLOptions; + } + + private void setupPipelineOfElements(Set allAvailable, List dest, + String elementType) { + final List elements = new ArrayList<>(); + + final Set categories = new HashSet<>(); + + for (T t : allAvailable) { + categories.add(t.getCategory()); + } + + categories.forEach((category) -> { + //Find the best renderer: + T bestElement = null; + for (T r : allAvailable) { + if (r.isAvailable(renderingTarget) && category.equals(r.getCategory()) + && (bestElement == null || bestElement.getPreferenceInCategory() < r.getPreferenceInCategory())) { + bestElement = r; + } + } + + if (bestElement != null) { + elements.add(bestElement); + Logger.getLogger(VizEngine.class.getSimpleName()).log(Level.FINE, + "Using best available {0} ''{1}'' for category {2}", + new Object[] {elementType, bestElement.getName(), category}); + } else { + Logger.getLogger(VizEngine.class.getSimpleName()).log(Level.WARNING, + "No available {0} for category {1}", new Object[] {elementType, category}); + } + }); + + dest.clear(); + dest.addAll(elements); + dest.sort(new PipelinedExecutor.Comparator()); + } + + private void setupRenderersPipeline() { + setupPipelineOfElements(allRenderers, renderersPipeline, "Renderer"); + } + + private void setupWorldUpdatersPipeline() { + setupPipelineOfElements(allUpdaters, updatersPipeline, "WorldUpdater"); + } + + private void setupInputListenersPipeline() { + setupPipelineOfElements(allInputListeners, inputListenersPipeline, "InputListener"); + } + + private void setupElementsCallbackPipeline() { + updatersElementsCallbacks.clear(); + for (WorldUpdater updater : updatersPipeline) { + ElementsCallback callback = updater.getElementsCallback(); + if (callback != null && !updatersElementsCallbacks.contains(callback)) { + updatersElementsCallbacks.add(callback); + } + } + } + + public void addInputListener(InputListener listener) { + allInputListeners.add(listener); + } + + public void addRenderer(Renderer renderer) { + if (renderer != null) { + allRenderers.add(renderer); + } + } + + public void addWorldUpdater(WorldUpdater updater) { + if (updater != null) { + allUpdaters.add(updater); + } + } + + public WorldUpdaterExecutionMode getWorldUpdatersExecutionMode() { + return worldUpdatersExecutionMode; + } + + public boolean isWorldUpdaterInPipeline(WorldUpdater renderer) { + return updatersPipeline.contains(renderer); + } + + public Vector2fc getTranslate() { + return translate; + } + + public Vector2f getTranslate(Vector2f dest) { + return dest.set(translate); + } + + public void setTranslate(float x, float y) { + translate.set(x, y); + engineModel.getRenderingOptions().setPan(translate); + loadModelViewProjection(); + } + + public void setTranslate(Vector2fc value) { + translate.set(value); + engineModel.getRenderingOptions().setPan(translate); + loadModelViewProjection(); + } + + public void translate(float x, float y) { + translate.add(x, y); + engineModel.getRenderingOptions().setPan(translate); + loadModelViewProjection(); + } + + public void translate(Vector2fc value) { + translate.add(value); + engineModel.getRenderingOptions().setPan(translate); + loadModelViewProjection(); + } + + public float getZoom() { + return engineModel.getRenderingOptions().getZoom(); + } + + public int getFps() { + return renderingTarget.getFps(); + } + + public void setZoom(float zoom) { + engineModel.getRenderingOptions().setZoom(zoom); + loadModelViewProjection(); + } + + public float aspectRatio() { + return (float) this.width / this.height; + } + + public void centerOnGraph() { + final Rect2D visibleGraphBoundaries = engineModel.getGraphIndex().getGraphBoundaries(); + + final float width = visibleGraphBoundaries.width(); + final float height = visibleGraphBoundaries.height(); + if (Float.isInfinite(width) || Float.isInfinite(height)) { + return; + } + + final float[] center = visibleGraphBoundaries.center(); + centerOn(new Vector2f(center[0], center[1]), width, height); + } + + public void centerOn(Vector2fc center, float width, float height) { + setTranslate(-center.x(), -center.y()); + + if (width > 0 && height > 0) { + final Rect2D visibleRange = getViewBoundaries(); + final float zoomFactor = Math.max(width / visibleRange.width(), height / visibleRange.height()); + + engineModel.getRenderingOptions().setZoom(getZoom() / zoomFactor); + } + + loadModelViewProjection(); + } + + /** + * Centers the view on a specific tile of a larger image by adjusting the zoom and translation. + * + * @param tileX the X coordinate of the tile in the larger image + * @param tileY the Y coordinate of the tile in the larger image + * @param imageWidth the width of the full image + * @param imageHeight the height of the full image + */ + public void centerOnTile(float tileX, float tileY, float imageWidth, float imageHeight) { + // Calculate scale factor from the full image dimensions + float scaleFactor = imageWidth / width; + + // Calculate the offset of this tile from the top-left corner of the full image + float tileOffsetX = (tileX + width / 2f - imageWidth / 2f) / width; + float tileOffsetY = (tileY + height / 2f - imageHeight / 2f) / height; + + // Apply zoom scaling + float newZoom = getZoom() * scaleFactor; + engineModel.getRenderingOptions().setZoom(newZoom); + + // Adjust translate based on tile offset and original translate + // The tile offset needs to be in world coordinates, so we divide by the new zoom + float translateOffsetX = -tileOffsetX * width / newZoom; + float translateOffsetY = -tileOffsetY * height / newZoom; + + Vector2fc pan = engineModel.getRenderingOptions().getPan(); + translate.set( + pan.x() + translateOffsetX, + pan.y() + translateOffsetY + ); + + loadModelViewProjection(); + } + + private void loadModelViewProjection() { + loadModel(); + loadView(); + loadProjection(); + + projectionMatrix.mulAffine(viewMatrix, modelViewProjectionMatrix); + modelViewProjectionMatrix.mulAffine(modelMatrix); + + modelViewProjectionMatrix.get(modelViewProjectionMatrixFloats); + modelViewProjectionMatrix.invertAffine(modelViewProjectionMatrixInverted); + + calculateWorldBoundaries(); + } + + private void loadModel() { + //Always identity at the moment + } + + private void loadView() { + float zoom = getZoom(); + viewMatrix.scaling(zoom, zoom, 1f); + viewMatrix.translate(translate.x, translate.y, 0); + } + + private void loadProjection() { + projectionMatrix.setOrtho2D(-width / 2f, width / 2f, -height / 2f, height / 2f); + } + + private void calculateWorldBoundaries() { + final Vector3f minCoords = new Vector3f(); + final Vector3f maxCoords = new Vector3f(); + + modelViewProjectionMatrixInverted.transformAab(-1, -1, 0, 1, 1, 0, minCoords, maxCoords); + + viewBoundaries = new Rect2D(minCoords.x, minCoords.y, maxCoords.x, maxCoords.y); + } + + public void reshape(int width, int height) { + this.width = width; + this.height = height; + + loadModelViewProjection(); + } + + public synchronized void start() { + if (isDestroyed) { + throw new IllegalStateException("VizEngine already destroyed, cannot start again. Use pause instead"); + } + + setup(); + } + + public synchronized void setGraphModel(GraphModel graphModel, GraphRenderingOptions renderingOptions, + GraphSelection graphSelection) { + if (this.engineModel.getGraphModel() != graphModel) { + this.engineModel = new VizEngineModel(graphModel, + renderingOptions != null ? renderingOptions : new GraphRenderingOptionsImpl(darkLaf), + graphSelection); + } + + // Sync local translate from new model's pan + this.translate.set(engineModel.getRenderingOptions().getPan()); + loadModelViewProjection(); + } + + public synchronized void unsetGraphModel(GraphModel graphModel) { + if (engineModel.getGraphModel() == graphModel) { + this.engineModel = createEmptyModel(); + this.translate.set(0, 0); + loadModelViewProjection(); + } + } + + private VizEngineModel createEmptyModel() { + Configuration config = Configuration.builder().enableSpatialIndex(true).build(); + GraphModel emptyModel = GraphModel.Factory.newInstance(config); + return new VizEngineModel(emptyModel, new GraphRenderingOptionsImpl(darkLaf), null); + } + + public synchronized void initPipeline() { + setupRenderersPipeline(); + setupWorldUpdatersPipeline(); + setupInputListenersPipeline(); + setupElementsCallbackPipeline(); + + updatersPipeline.forEach((worldUpdater) -> { + worldUpdater.init(renderingTarget); + }); + + renderersPipeline.forEach((renderer) -> { + renderer.init(renderingTarget); + }); + + // Setup world updater threads + if (worldUpdatersExecutionMode.isConcurrent()) { + final int numThreads = Math.max(Math.min(updatersPipeline.size(), 4), 1); + updatersThreadPool = Executors.newFixedThreadPool(numThreads, new ThreadFactory() { + private int id = 1; + + @Override + public Thread newThread(Runnable runnable) { + return new Thread(runnable, "World Updater " + id++); + } + }); + } else { + updatersThreadPool = null; + } + + loadModelViewProjection(); + } + + public synchronized void disposePipeline() { + // Cancel any pending world updates + if (allUpdatersCompletableFuture != null) { + allUpdatersCompletableFuture.cancel(false); + allUpdatersCompletableFuture = null; + } + + // Shutdown thread pool if it exists + if (updatersThreadPool != null) { + updatersThreadPool.shutdown(); + try { + updatersThreadPool.awaitTermination(1, TimeUnit.SECONDS); + } catch (InterruptedException ex) { + Logger.getLogger(VizEngine.class.getSimpleName()) + .log(Level.WARNING, "Interrupted while disposing VizEngine", ex); + } + } + + updatersPipeline.forEach((worldUpdater) -> { + worldUpdater.dispose(renderingTarget); + }); + updatersElementsCallbacks.forEach(ElementsCallback::reset); + + renderersPipeline.forEach((renderer) -> { + renderer.dispose(renderingTarget); + }); + + // Clear all pipelines and world data + renderersPipeline.clear(); + updatersPipeline.clear(); + updatersElementsCallbacks.clear(); + inputListenersPipeline.clear(); + + // Clear current world data to prevent using disposed resources + currentWorldData = Collections.emptyList(); + + // Clear any pending input events + eventsQueue.clear(); + + // Reset world update timing to allow immediate update on next init + lastWorldUpdateMillis = 0; + } + + public synchronized void destroy() { + allInputListeners.clear(); + inputListenersPipeline.clear(); + + if (worldUpdatersExecutionMode.isConcurrent()) { + try { + updatersThreadPool.shutdown(); + + final boolean terminated = updatersThreadPool.awaitTermination(5, TimeUnit.SECONDS); + if (!terminated) { + updatersThreadPool.shutdownNow(); + } + + worldUpdaterManagerThread.shutdown(); + + final boolean managerTerminated = worldUpdaterManagerThread.awaitTermination(1, TimeUnit.SECONDS); + if (!managerTerminated) { + worldUpdaterManagerThread.shutdownNow(); + } + } catch (InterruptedException ex) { + Logger.getLogger(VizEngine.class.getSimpleName()) + .log(Level.WARNING, "Interrupted while destroying VizEngine", ex); + } + } + + Logger.getLogger(VizEngine.class.getSimpleName()) + .log(Level.FINE, "Disposing {0} world updaters", updatersPipeline.size()); + updatersPipeline.forEach((worldUpdater) -> { + worldUpdater.dispose(renderingTarget); + }); + updatersElementsCallbacks.forEach(ElementsCallback::reset); + + Logger.getLogger(VizEngine.class.getSimpleName()) + .log(Level.FINE, "Disposing {0} renderers", renderersPipeline.size()); + renderersPipeline.forEach((renderer) -> { + renderer.dispose(renderingTarget); + }); + + this.isDestroyed = true; + } + + private CompletableFuture buildUpdaterFuture(final WorldUpdater updater, + final VizEngineModel engineModel) { + return CompletableFuture.runAsync(() -> { + try { + updater.updateWorld(engineModel); + } catch (Throwable t) { + Logger.getLogger(VizEngine.class.getSimpleName()).log(Level.SEVERE, null, t); + } + }, updatersThreadPool); + } + + private CompletableFuture buildCallbackFuture(final ElementsCallback callback, + final GraphIndex graphIndex, + final GraphRenderingOptions renderingOptions, + final Rect2D boundaries) { + return CompletableFuture.runAsync(() -> { + try { + callback.run(graphIndex, renderingOptions, boundaries); + } catch (Throwable t) { + Logger.getLogger(VizEngine.class.getSimpleName()).log(Level.SEVERE, null, t); + } + }, updatersThreadPool); + } + + + @SuppressWarnings("unchecked") + public void display() { + // Snapshot the flag once so the rest of the method observes a single + // value (and so HotSpot can hoist the check). + final boolean timed = frameTimingsEnabled; + + final long frameStartNs = timed ? System.nanoTime() : 0L; + renderingTarget.frameStart(); + + // Get world data (might be empty if no world update was done this frame) + final long worldUpdateStartNs = timed ? System.nanoTime() : 0L; + List worldData = + worldUpdatersExecutionMode.isConcurrent() ? checkConcurrentWorldUpdateIsDone() + : runWorldUpdatersSynchronous(this.engineModel); + if (worldData.isEmpty() || !updating) { + // No world update was done this frame, use last one + worldData = currentWorldData; + } + final long worldUpdateNs = timed ? System.nanoTime() - worldUpdateStartNs : 0L; + + // Render + + // Fetch mvpMatrix + modelViewProjectionMatrix.get(mvpFloats); + + final LinkedHashMap perCategoryNs = timed ? new LinkedHashMap<>() : null; + final long renderStartNs = timed ? System.nanoTime() : 0L; + if (!worldData.isEmpty()) { + for (RenderingLayer layer : ALL_LAYERS) { + int rendererIndex = 0; + for (Renderer renderer : renderersPipeline) { + if (renderer.getLayers().contains(layer)) { + // Get world data for this renderer: + WorldData localWorldData = worldData.get(rendererIndex); + if (timed) { + final long rs = System.nanoTime(); + ((Renderer) renderer).render(localWorldData, renderingTarget, layer, + mvpFloats); + perCategoryNs.merge(renderer.getCategory(), System.nanoTime() - rs, Long::sum); + } else { + ((Renderer) renderer).render(localWorldData, renderingTarget, layer, + mvpFloats); + } + } + rendererIndex++; + } + } + } + final long renderNs = timed ? System.nanoTime() - renderStartNs : 0L; + + //Schedule next concurrent world update: + if (worldUpdatersExecutionMode.isConcurrent() && updating) { + scheduleNextConcurrentWorldUpdateIfDone(this.engineModel); + } + + // Commit model used for rendering this frame + currentWorldData = worldData; + + renderingTarget.frameEnd(); + + if (timed) { + final long totalNs = System.nanoTime() - frameStartNs; + lastFrameTimings = new FrameTimings( + totalNs, worldUpdateNs, renderNs, Map.copyOf(perCategoryNs)); + } + } + + /** + * Returns CPU-side timings collected during the most recent + * {@link #display()} call, or {@link FrameTimings#EMPTY} when timing + * collection is disabled. Safe to call from any thread; values are + * updated atomically once per frame. + */ + public FrameTimings getLastFrameTimings() { + return lastFrameTimings; + } + + /** + * Whether per-frame CPU timings (see {@link #getLastFrameTimings()}) are + * collected during {@link #display()}. + */ + public boolean isFrameTimingsEnabled() { + return frameTimingsEnabled; + } + + /** + * Toggles per-frame CPU timing collection. Off by default so callers + * don't pay the cost of the {@code nanoTime} calls and the per-frame + * map allocation. When turned off, {@link #getLastFrameTimings()} starts + * returning {@link FrameTimings#EMPTY} again from the next frame on. + */ + public void setFrameTimingsEnabled(boolean enabled) { + this.frameTimingsEnabled = enabled; + if (!enabled) { + this.lastFrameTimings = FrameTimings.EMPTY; + } + } + + private long lastWorldUpdateMillis = 0; + + private List runWorldUpdatersSynchronous(VizEngineModel model) { + if (!updating) { + return Collections.emptyList(); + } + + //Control max world updates per second + if (maxWorldUpdatesPerSecond >= 1) { + if (TimeUtils.getTimeMillis() < lastWorldUpdateMillis + 1000 / maxWorldUpdatesPerSecond) { + //Skip world update + return Collections.emptyList(); + } + } + processInputEvents(model); + + Rect2D viewBoundaries = getViewBoundaries(); + for (ElementsCallback callback : updatersElementsCallbacks) { + callback.run(model.getGraphIndex(), model.getRenderingOptions(), viewBoundaries); + } + for (WorldUpdater worldUpdater : updatersPipeline) { + worldUpdater.updateWorld(model); + } + lastWorldUpdateMillis = TimeUtils.getTimeMillis(); + + return renderersPipeline.stream().map( + r -> r.worldUpdated(model, renderingTarget, mvpFloats) + ).collect(Collectors.toList()); + } + + private List checkConcurrentWorldUpdateIsDone() { + if (allUpdatersCompletableFuture != null) { + if (worldUpdatersExecutionMode.isSynchronous()) { + return runWorldUpdated(); + } else { + //Notify renderers if next concurrent asynchronous world data update is done: + final boolean worldUpdateDone = + allUpdatersCompletableFuture.isDone(); + if (worldUpdateDone) { + return runWorldUpdated(); + } + } + } + return Collections.emptyList(); + } + + private List runWorldUpdated() { + try { + VizEngineModel modelUsedByUpdaters = allUpdatersCompletableFuture.get(); + allUpdatersCompletableFuture = null; + + return renderersPipeline.stream().map( + r -> r.worldUpdated(modelUsedByUpdaters, renderingTarget, mvpFloats) + ).toList(); + } catch (Throwable t) { + Logger.getLogger(VizEngine.class.getSimpleName()).log(Level.SEVERE, null, t); + throw new RuntimeException(t); + } + } + + private void scheduleNextConcurrentWorldUpdateIfDone(VizEngineModel model) { + if (!updatersThreadPool.isShutdown() && allUpdatersCompletableFuture == null) { + //Control max world updates per second + if (maxWorldUpdatesPerSecond >= 1) { + if (TimeUtils.getTimeMillis() < lastWorldUpdateMillis + 1000 / maxWorldUpdatesPerSecond) { + //Skip world update + return; + } + } + + // Associate local model to the future + allUpdatersCompletableFuture = CompletableFuture.supplyAsync(() -> { + // Process input events + processInputEvents(model); + + // Run all elements callbacks first + CompletableFuture.allOf(updatersElementsCallbacks.stream() + .map(c -> buildCallbackFuture(c, model.getGraphIndex(), + model.getRenderingOptions(), getViewBoundaries())) + .toArray(CompletableFuture[]::new)).join(); + + // Run all world updaters + CompletableFuture.allOf(updatersPipeline.stream() + .map(u -> buildUpdaterFuture(u, model)) + .toArray(CompletableFuture[]::new)).join(); + + return model; + }, worldUpdaterManagerThread); + + lastWorldUpdateMillis = TimeUtils.getTimeMillis(); + } + } + + public GraphModel getGraphModel() { + return engineModel.getGraphModel(); + } + + public GraphIndex getGraphIndex() { + return engineModel.getGraphIndex(); + } + + public GraphSelection getGraphSelection() { + return engineModel.getGraphSelection(); + } + + public GraphRenderingOptions getRenderingOptions() { + return engineModel.getRenderingOptions(); + } + + public int getWidth() { + return width; + } + + public int getHeight() { + return height; + } + + public Matrix4fc getModelMatrix() { + return modelMatrix; + } + + public Matrix4fc getViewMatrix() { + return viewMatrix; + } + + public Matrix4fc getProjectionMatrix() { + return projectionMatrix; + } + + public Matrix4fc getModelViewProjectionMatrix() { + return modelViewProjectionMatrix; + } + + public Matrix4fc getModelViewProjectionMatrixInverted() { + return modelViewProjectionMatrixInverted; + } + + public Rect2D getViewBoundaries() { + return viewBoundaries; + } + + public void getBackgroundColor(float[] backgroundColorFloats) { + System.arraycopy(engineModel.getRenderingOptions().getBackgroundColor(), 0, backgroundColorFloats, 0, 4); + } + + public float[] getBackgroundColor() { + float[] backgroundColor = engineModel.getRenderingOptions().getBackgroundColor(); + return Arrays.copyOf(backgroundColor, backgroundColor.length); + } + + public void setBackgroundColor(Color color) { + float[] backgroundColorComponents = new float[4]; + color.getRGBComponents(backgroundColorComponents); + + setBackgroundColor(backgroundColorComponents); + } + + public void setBackgroundColor(float[] backgroundColor) { + if (backgroundColor.length != 4) { + throw new IllegalArgumentException("Expected 4 float RGBA color"); + } + + engineModel.getRenderingOptions().setBackgroundColor(Arrays.copyOf(backgroundColor, backgroundColor.length)); + } + + public void setDarkLaf(boolean darkLaf) { + this.darkLaf = darkLaf; + if (darkLaf && Arrays.equals(engineModel.getRenderingOptions().getBackgroundColor(), + GraphRenderingOptions.DEFAULT_BACKGROUND_COLOR)) { + engineModel.getRenderingOptions().setBackgroundColor(GraphRenderingOptions.DEFAULT_DARK_BACKGROUND_COLOR); + } else if (!darkLaf && Arrays.equals(engineModel.getRenderingOptions().getBackgroundColor(), + GraphRenderingOptions.DEFAULT_DARK_BACKGROUND_COLOR)) { + engineModel.getRenderingOptions().setBackgroundColor(GraphRenderingOptions.DEFAULT_BACKGROUND_COLOR); + } + } + + public void pauseUpdating() { + updating = false; + } + + public void resumeUpdating() { + updating = true; + } + + public Vector2f screenCoordinatesToWorldCoordinates(int x, int y) { + return screenCoordinatesToWorldCoordinates(x, y, new Vector2f()); + } + + public Vector2f screenCoordinatesToWorldCoordinates(int x, int y, Vector2f dest) { + final float halfWidth = width / 2.0f; + final float halfHeight = height / 2.0f; + + float xScreenNormalized = (-halfWidth + x) / halfWidth; + float yScreenNormalized = (halfHeight - y) / halfHeight; + + final Vector3f worldCoordinates = new Vector3f(); + modelViewProjectionMatrixInverted.transformProject(xScreenNormalized, yScreenNormalized, 0, worldCoordinates); + + return dest.set(worldCoordinates.x, worldCoordinates.y); + } + + /** + * Converts a world position (x, y) into the corresponding screen viewport position in pixels. + * + * @param x World position X + * @param y World position Y + * @param tempNDC Temporary vector to hold the NDC coordinates + * @param dest Result vector where screen position will be stored + * @return The same dest vector + */ + public Vector2f worldCoordinatesToScreenCoordinates(float x, float y, Vector3f tempNDC, Vector2f dest) { + // 1) world -> NDC + modelViewProjectionMatrix.transformProject(x, y, 0f, tempNDC); // ndc in [-1, 1] + + // 2) NDC -> pixels (origin at top-left) + final float halfW = width / 2f; + final float halfH = height / 2f; + + final float sx = halfW + tempNDC.x * halfW; // map [-1,1] -> [0,width] + final float sy = halfH + tempNDC.y * halfH; // map [-1,1] -> [0,] + + return dest.set(sx, sy); + } + + /** + * Returns the local number of screen pixels that correspond to one world unit near (x, y), + * measured along the +X direction in world space. + */ + public float pixelsPerWorldUnitAt(float x, float y, Vector3f tempNDC) { + final float halfW = width / 2f; + final float halfH = height / 2f; + + // (x, y) -> NDC -> pixels + modelViewProjectionMatrix.transformProject(x, y, 0f, tempNDC); + final float sx0 = halfW + tempNDC.x * halfW; + final float sy0 = halfH + tempNDC.y * halfH; + + // (x + 1, y) -> NDC -> pixels + modelViewProjectionMatrix.transformProject(x + 1f, y, 0f, tempNDC); + final float sx1 = halfW + tempNDC.x * halfW; + final float sy1 = halfH + tempNDC.y * halfH; + + return (float) Math.hypot(sx1 - sx0, sy1 - sy0); + } + + private void processInputEvents(VizEngineModel model) { + for (InputListener inputListener : inputListenersPipeline) { + inputListener.frameStart(model); + } + + // Collect all events from queue into a list + List events = new ArrayList<>(); + I event; + while ((event = eventsQueue.poll()) != null) { + events.add(event); + } + + // Pass events through the pipeline + // Each listener can compress/consume events and return remaining ones + for (InputListener inputListener : inputListenersPipeline) { + events = inputListener.processEvents(events); + if (events.isEmpty()) { + break; // All events consumed, stop propagation + } + } + + for (InputListener inputListener : inputListenersPipeline) { + inputListener.frameEnd(model); + } + } + + public void queueEvent(I e) { + eventsQueue.offer(e); + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/VizEngineFactory.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/VizEngineFactory.java new file mode 100644 index 0000000000..d22430851d --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/VizEngineFactory.java @@ -0,0 +1,39 @@ +package org.gephi.viz.engine; + +import java.util.List; +import org.gephi.graph.api.GraphModel; +import org.gephi.viz.engine.spi.RenderingTarget; +import org.gephi.viz.engine.spi.VizEngineConfigurator; + +/** + * + * @author Eduardo Ramos + */ +public class VizEngineFactory { + + public static VizEngine newEngine(R renderingTarget, + List> configurators) { + return newEngine(renderingTarget, null, configurators); + } + + public static VizEngine newEngine(R renderingTarget, GraphModel graphModel, + List> configurators) { + final VizEngine engine = new VizEngine<>(renderingTarget); + + // Set graph model + if (graphModel != null) { + engine.setGraphModel(graphModel, null, null); + } + + //Configure + if (configurators != null) { + for (VizEngineConfigurator configurator : configurators) { + if (configurator != null) { + configurator.configure(engine); + } + } + } + + return engine; + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/VizEngineModel.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/VizEngineModel.java new file mode 100644 index 0000000000..eaa48c6293 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/VizEngineModel.java @@ -0,0 +1,47 @@ +package org.gephi.viz.engine; + +import org.gephi.graph.api.GraphModel; +import org.gephi.viz.engine.status.GraphRenderingOptions; +import org.gephi.viz.engine.status.GraphRenderingOptionsImpl; +import org.gephi.viz.engine.status.GraphSelection; +import org.gephi.viz.engine.status.GraphSelectionImpl; +import org.gephi.viz.engine.structure.GraphIndexImpl; + +public class VizEngineModel { + + // Graph Model + private final GraphModel graphModel; + + //Graph Index + private final GraphIndexImpl graphIndex; + + //Selection + private final GraphSelectionImpl graphSelection; + + //Rendering Options + private final GraphRenderingOptionsImpl renderingOptions; + + protected VizEngineModel(GraphModel graphModel, GraphRenderingOptions renderingOptions, + GraphSelection graphSelection) { + this.graphModel = graphModel; + this.graphSelection = new GraphSelectionImpl(graphSelection); + this.graphIndex = new GraphIndexImpl(graphModel, this.graphSelection); + this.renderingOptions = new GraphRenderingOptionsImpl(renderingOptions); + } + + public GraphIndexImpl getGraphIndex() { + return graphIndex; + } + + public GraphModel getGraphModel() { + return graphModel; + } + + public GraphRenderingOptionsImpl getRenderingOptions() { + return renderingOptions; + } + + public GraphSelectionImpl getGraphSelection() { + return graphSelection; + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/JOGLRenderingTarget.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/JOGLRenderingTarget.java new file mode 100644 index 0000000000..ef4a0fe8ec --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/JOGLRenderingTarget.java @@ -0,0 +1,408 @@ +package org.gephi.viz.engine.jogl; + +import static com.jogamp.opengl.GL.GL_COLOR_BUFFER_BIT; + +import com.jogamp.newt.event.KeyEvent; +import com.jogamp.newt.event.MouseEvent; +import com.jogamp.newt.event.NEWTEvent; +import com.jogamp.newt.event.awt.AWTKeyAdapter; +import com.jogamp.newt.event.awt.AWTMouseAdapter; +import com.jogamp.newt.opengl.GLWindow; +import com.jogamp.opengl.GL; +import com.jogamp.opengl.GLAutoDrawable; +import com.jogamp.opengl.GLEventListener; +import com.jogamp.opengl.awt.GLCanvas; +import com.jogamp.opengl.awt.GLJPanel; +import com.jogamp.opengl.util.AnimatorBase; +import com.jogamp.opengl.util.FPSAnimator; +import com.jogamp.opengl.util.TileRendererBase; +import java.awt.Frame; +import java.awt.image.BufferedImage; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.BooleanSupplier; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.jogl.util.ScreenshotTaker; +import org.gephi.viz.engine.jogl.util.gl.capabilities.GLCapabilitiesSummary; +import org.gephi.viz.engine.jogl.util.gl.capabilities.Profile; +import org.gephi.viz.engine.spi.RenderingTarget; +import org.gephi.viz.engine.util.TimeUtils; + +/** + * + * @author Eduardo Ramos + */ +public class JOGLRenderingTarget implements RenderingTarget, GLEventListener, com.jogamp.newt.event.KeyListener, + com.jogamp.newt.event.MouseListener, TileRendererBase.TileRendererListener { + + private static final AtomicBoolean GL_INFO_LOGGED = new AtomicBoolean(false); + + private final GLAutoDrawable drawable; + + //Animators + private final AnimatorBase animator; + private VizEngine engine; + + //For displaying FPS in window title (optional) + private String windowTitleFormat = null; + private Frame frame; + + // States + private boolean listenersSetup = false; + private final float[] backgroundColor = new float[4]; + + // FPS States + private long lastFpsTime = 0; + + // Screenshot + private volatile ScreenshotRequest screenshotRequest; + + public JOGLRenderingTarget(GLAutoDrawable drawable) { + this.drawable = drawable; + this.animator = new FPSAnimator(drawable, VizEngine.DEFAULT_FPS, true); + this.animator.setExclusiveContext(false); + this.animator.setUpdateFPSFrames(VizEngine.DEFAULT_FPS, null); + } + + @Override + public void setup(VizEngine engine) { + this.engine = engine; + + setupEventListeners(); + } + + private synchronized void setupEventListeners() { + if (listenersSetup) { + return; + } + + drawable.addGLEventListener(this); + + if (drawable instanceof GLWindow) { + setup((GLWindow) drawable); + } else if (drawable instanceof GLJPanel) { + setup((GLJPanel) drawable); + } else if (drawable instanceof GLCanvas) { + setup((GLCanvas) drawable); + } else { + throw new RuntimeException("Drawable of type " + drawable.getClass() + " not supported"); + } + + listenersSetup = true; + } + + private void setup(GLWindow gLWindow) { + gLWindow.addKeyListener(this); + gLWindow.addMouseListener(this); + } + + private void setup(GLJPanel glJpanel) { + new AWTKeyAdapter(this, glJpanel).addTo(glJpanel); + new AWTMouseAdapter(this, glJpanel).addTo(glJpanel); + } + + private void setup(GLCanvas glCanvas) { + new AWTKeyAdapter(this, glCanvas).addTo(glCanvas); + new AWTMouseAdapter(this, glCanvas).addTo(glCanvas); + } + + public GLAutoDrawable getDrawable() { + return drawable; + } + + @Override + public synchronized void init(GLAutoDrawable drawable) { + final GL gl = drawable.getGL(); + + if (GL_INFO_LOGGED.compareAndSet(false, true)) { + Logger.getLogger(VizEngine.class.getSimpleName()).log(Level.INFO, + "OpenGL Vendor: {0}, Renderer: {1}, Version: {2}", + new Object[] { + gl.glGetString(GL.GL_VENDOR), + gl.glGetString(GL.GL_RENDERER), + gl.glGetString(GL.GL_VERSION) + }); + } + + engine.getOpenGLOptions().setGlCapabilitiesSummary(new GLCapabilitiesSummary(gl, Profile.CORE)); + + gl.setSwapInterval(0);//Disable Vertical synchro + + gl.glDisable(GL.GL_DEPTH_TEST);//Z-order is set by the order of drawing + + //Disable blending for better performance + gl.glDisable(GL.GL_BLEND); + + engine.initPipeline(); + + lastFpsTime = TimeUtils.getTimeMillis(); + + // Start animator + animator.start(); + } + + @Override + public synchronized void dispose(GLAutoDrawable drawable) { + // Stop animator + animator.stop(); + + // Dispose pipeline + engine.disposePipeline(); + + // Clear screenshot request + screenshotRequest = null; + } + + + @Override + public void display(GLAutoDrawable drawable) { + final GL gl = drawable.getGL().getGL(); + + engine.getBackgroundColor(backgroundColor); + gl.glClearColor(backgroundColor[0], backgroundColor[1], backgroundColor[2], backgroundColor[3]); + gl.glClear(GL_COLOR_BUFFER_BIT); + + updateFPS(); + engine.display(); + + // Screenshot handling + ScreenshotRequest request = screenshotRequest; + if (request != null && request.scaleFactor == 1) { + // You can't call screenShort when you want as it's picking what's on the frame buffer + // so you need to do this when you are sure the Framebuffer has been drawn so you got actual data. + // Otherwise, it's during when buffer is empty and you have empty black image. + CompletableFuture future = request.future; + future.complete( + ScreenshotTaker.takeSimpleScreenshot(drawable.getGL(), engine.getWidth(), engine.getHeight(), + request.transparentBackground)); + + if (request.transparentBackground) { + float[] bgColor = engine.getBackgroundColor(); + bgColor[3] = 1f; + engine.setBackgroundColor(bgColor); + } + + screenshotRequest = null; // Resets + } + } + + @Override + public synchronized void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { + engine.reshape(width, height); + } + + @Override + public void keyPressed(KeyEvent e) { + if (screenshotRequest != null) { + return; + } + engine.queueEvent(e); + } + + @Override + public void keyReleased(KeyEvent e) { + if (screenshotRequest != null) { + return; + } + engine.queueEvent(e); + } + + @Override + public void mouseClicked(MouseEvent e) { + if (screenshotRequest != null) { + return; + } + engine.queueEvent(e); + } + + @Override + public void mouseEntered(MouseEvent e) { + if (screenshotRequest != null) { + return; + } + engine.queueEvent(e); + } + + @Override + public void mouseExited(MouseEvent e) { + if (screenshotRequest != null) { + return; + } + engine.queueEvent(e); + } + + @Override + public void mousePressed(MouseEvent e) { + if (screenshotRequest != null) { + return; + } + engine.queueEvent(e); + } + + @Override + public void mouseReleased(MouseEvent e) { + if (screenshotRequest != null) { + return; + } + engine.queueEvent(e); + } + + @Override + public void mouseMoved(MouseEvent e) { + if (screenshotRequest != null) { + return; + } + engine.queueEvent(e); + } + + @Override + public void mouseDragged(MouseEvent e) { + if (screenshotRequest != null) { + return; + } + engine.queueEvent(e); + } + + @Override + public void mouseWheelMoved(MouseEvent e) { + if (screenshotRequest != null) { + return; + } + engine.queueEvent(e); + } + + public String getWindowTitleFormat() { + return windowTitleFormat; + } + + public void setWindowTitleFormat(String windowTitleFormat) { + this.windowTitleFormat = windowTitleFormat; + } + + public void setFrame(Frame frame) { + this.frame = frame; + } + + public Frame getFrame() { + return frame; + } + + private void updateFPS() { + if (animator != null && TimeUtils.getTimeMillis() - lastFpsTime > 1000) { + if (frame != null && windowTitleFormat != null && windowTitleFormat.contains("$FPS")) { + int measuredFps = (int) animator.getLastFPS(); + frame.setTitle(windowTitleFormat.replace("$FPS", String.valueOf(measuredFps))); + } + lastFpsTime += 1000; + } + } + + public int getFps() { + return animator != null ? (int) animator.getLastFPS() : 0; + } + + /** + * Captures a screenshot. + *

              + * This method has two modes, one "simple" (mode scaleFactor=1) and one "tiled" (mode scaleFactor>1). + *

              + * In simple mode (scaleFactor=1) the screenshot is taken directly from the current framebuffer. This is fast but limited to the current drawable size. + *

              + * In tiled mode (scaleFactor>1) the screenshot is taken by rendering the scene multiple times in tiles, each of the size of the current drawable. + * + * @param scaleFactor The factor by which to scale the current drawable size for the screenshot, must be 1 or greater + * @param transparentBackground Whether the screenshot should have a transparent background + * @return A CompletableFuture that will be completed with the screenshot image + */ + public CompletableFuture requestScreenshot(int scaleFactor, boolean transparentBackground, + BooleanSupplier isCancelled) { + if (scaleFactor < 1) { + throw new IllegalArgumentException("Scale factor must be 1 or greater"); + } + + // Prepare screenshot request + CompletableFuture future = new CompletableFuture<>(); + if (scaleFactor > 1) { + // With scale factor > 1 we need to do tiled screenshot + boolean wasAnimating = animator.isAnimating(); + try { + // Pause animation and update + if (wasAnimating) { + animator.pause(); + } + engine.pauseUpdating(); + + // Locks key and mouse events processing + this.screenshotRequest = new ScreenshotRequest(scaleFactor, transparentBackground, future); + ; + + // Take tiled screenshot + future.complete( + ScreenshotTaker.takeTiledScreenshot(engine, scaleFactor, transparentBackground, isCancelled)); + } finally { + // Resume update and animation + engine.resumeUpdating(); + if (wasAnimating) { + animator.resume(); + } + + this.screenshotRequest = null; + } + return future; + } else { + // Regular simple screenshot + if (transparentBackground) { + float[] bgColor = engine.getBackgroundColor(); + bgColor[3] = 0f; + engine.setBackgroundColor(bgColor); + + // Wait a bit to ensure background color is set before screenshot + try { + Thread.sleep(50); + } catch (InterruptedException e) { + throw new RuntimeException(e); + } + } + + // Set request, to be completed in display() + this.screenshotRequest = new ScreenshotRequest(scaleFactor, transparentBackground, future); + + return future; + } + } + + @Override + public void addTileRendererNotify(TileRendererBase tr) { + + } + + @Override + public void removeTileRendererNotify(TileRendererBase tr) { + + } + + @Override + public void reshapeTile(TileRendererBase tr, int tileX, int tileY, int tileWidth, int tileHeight, int imageWidth, + int imageHeight) { + engine.centerOnTile(tileX, tileY, imageWidth, imageHeight); + } + + @Override + public void startTileRendering(TileRendererBase tr) { + + } + + @Override + public void endTileRendering(TileRendererBase tr) { + + } + + private record ScreenshotRequest( + int scaleFactor, + boolean transparentBackground, + CompletableFuture future + ) { + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/VizEngineJOGLConfigurator.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/VizEngineJOGLConfigurator.java new file mode 100644 index 0000000000..691c980fd4 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/VizEngineJOGLConfigurator.java @@ -0,0 +1,151 @@ +package org.gephi.viz.engine.jogl; + +import static com.jogamp.opengl.GLProfile.GL2; +import static com.jogamp.opengl.GLProfile.GL3; +import static com.jogamp.opengl.GLProfile.GL4; +import static com.jogamp.opengl.GLProfile.GLES2; +import static com.jogamp.opengl.GLProfile.GLES3; + +import com.jogamp.newt.event.NEWTEvent; +import com.jogamp.opengl.GLCapabilities; +import com.jogamp.opengl.GLProfile; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.jogl.pipeline.DefaultJOGLEventListener; +import org.gephi.viz.engine.jogl.pipeline.arrays.ArrayDrawEdgeData; +import org.gephi.viz.engine.jogl.pipeline.arrays.ArrayDrawNodeData; +import org.gephi.viz.engine.jogl.pipeline.arrays.renderers.EdgeRendererArrayDraw; +import org.gephi.viz.engine.jogl.pipeline.arrays.renderers.NodeRendererArrayDraw; +import org.gephi.viz.engine.jogl.pipeline.arrays.renderers.RectangleSelectionArrayDraw; +import org.gephi.viz.engine.jogl.pipeline.arrays.renderers.SimpleMouseSelectionArrayDraw; +import org.gephi.viz.engine.jogl.pipeline.arrays.updaters.EdgesUpdaterArrayDrawRendering; +import org.gephi.viz.engine.jogl.pipeline.arrays.updaters.NodesUpdaterArrayDrawRendering; +import org.gephi.viz.engine.jogl.pipeline.indirect.IndirectNodeData; +import org.gephi.viz.engine.jogl.pipeline.indirect.renderers.NodeRendererIndirect; +import org.gephi.viz.engine.jogl.pipeline.indirect.updaters.NodesUpdaterIndirectRendering; +import org.gephi.viz.engine.jogl.pipeline.instanced.InstancedEdgeData; +import org.gephi.viz.engine.jogl.pipeline.instanced.InstancedNodeData; +import org.gephi.viz.engine.jogl.pipeline.instanced.renderers.EdgeRendererInstanced; +import org.gephi.viz.engine.jogl.pipeline.instanced.renderers.NodeRendererInstanced; +import org.gephi.viz.engine.jogl.pipeline.instanced.updaters.EdgesUpdaterInstancedRendering; +import org.gephi.viz.engine.jogl.pipeline.instanced.updaters.NodesUpdaterInstancedRendering; +import org.gephi.viz.engine.jogl.pipeline.text.EdgeLabelData; +import org.gephi.viz.engine.jogl.pipeline.text.EdgeLabelRenderer; +import org.gephi.viz.engine.jogl.pipeline.text.EdgeLabelUpdater; +import org.gephi.viz.engine.jogl.pipeline.text.NodeLabelData; +import org.gephi.viz.engine.jogl.pipeline.text.NodeLabelRenderer; +import org.gephi.viz.engine.jogl.pipeline.text.NodeLabelUpdater; +import org.gephi.viz.engine.spi.VizEngineConfigurator; +import org.gephi.viz.engine.util.structure.EdgesCallback; +import org.gephi.viz.engine.util.structure.NodesCallback; + +/** + * + * @author Eduardo Ramos + */ +public class VizEngineJOGLConfigurator implements VizEngineConfigurator { + + /** + * Order of maximum programmable shader core only profiles + * + *

                + *
              • GL4
              • + *
              • GL3
              • + *
              • GLES3
              • + *
              • GL2
              • + *
              • GLES2
              • + *
              + * + */ + public static final String[] GL_PROFILE_LIST_MAX_PROGSHADER_CORE_OR_GL2 = + new String[] {GL4, GL3, GLES3, GL2, GLES2}; + + public static GLCapabilities createCapabilities(int antialiasing) { + GLProfile.getDefaultDevice(); + + GLProfile glProfile = GLProfile.get(GL_PROFILE_LIST_MAX_PROGSHADER_CORE_OR_GL2, true); + GLCapabilities caps = new GLCapabilities(glProfile); + + Logger.getLogger(VizEngine.class.getSimpleName()).log(Level.INFO, "Chosen GL Profile: {0}", glProfile); + + caps.setAlphaBits(8); + caps.setDoubleBuffered(true); + caps.setHardwareAccelerated(true); + + caps.setSampleBuffers(antialiasing > 0); + if (antialiasing > 0) { + caps.setNumSamples(antialiasing); + } + + return caps; + } + + @Override + public void configure(VizEngine engine) { + NodesCallback nodesCallback = new NodesCallback(); + EdgesCallback edgesCallback = new EdgesCallback(); + + setupIndirectRendering(nodesCallback, edgesCallback, engine); + setupInstancedRendering(nodesCallback, edgesCallback, engine); + setupVertexArrayRendering(nodesCallback, edgesCallback, engine); + + setupInputListeners(engine); + } + + private void setupIndirectRendering(final NodesCallback nodesCallback, + final EdgesCallback edgesCallback, + VizEngine engine) { + //Only nodes supported, edges don't have a LOD to benefit from + final IndirectNodeData nodeData = new IndirectNodeData(nodesCallback); + + engine.addRenderer(new NodeRendererIndirect(engine, nodeData)); + engine.addWorldUpdater(new NodesUpdaterIndirectRendering(engine, nodeData)); + } + + private void setupInstancedRendering(final NodesCallback nodesCallback, + final EdgesCallback edgesCallback, + VizEngine engine) { + //Nodes + final InstancedNodeData nodeData = new InstancedNodeData(nodesCallback); + engine.addRenderer(new NodeRendererInstanced(engine, nodeData)); + engine.addWorldUpdater(new NodesUpdaterInstancedRendering(engine, nodeData)); + + //Edges + final InstancedEdgeData indirectEdgeData = new InstancedEdgeData(edgesCallback, nodesCallback); + engine.addRenderer(new EdgeRendererInstanced(engine, indirectEdgeData)); + engine.addWorldUpdater(new EdgesUpdaterInstancedRendering(engine, indirectEdgeData)); + } + + private void setupVertexArrayRendering(final NodesCallback nodesCallback, + final EdgesCallback edgesCallback, + VizEngine engine) { + //Nodes + final ArrayDrawNodeData nodeData = new ArrayDrawNodeData(nodesCallback); + engine.addRenderer(new NodeRendererArrayDraw(engine, nodeData)); + engine.addWorldUpdater(new NodesUpdaterArrayDrawRendering(engine, nodeData)); + + //Edges + final ArrayDrawEdgeData edgeData = new ArrayDrawEdgeData(edgesCallback, nodesCallback); + engine.addRenderer(new EdgeRendererArrayDraw(engine, edgeData)); + engine.addWorldUpdater(new EdgesUpdaterArrayDrawRendering(engine, edgeData)); + + // Node Label + final NodeLabelData nodeLabelData = new NodeLabelData(nodesCallback); + engine.addRenderer(new NodeLabelRenderer(engine, nodeLabelData)); + engine.addWorldUpdater(new NodeLabelUpdater(engine, nodeLabelData)); + + // Edge Label + final EdgeLabelData edgeLabelData = new EdgeLabelData(edgesCallback); + engine.addRenderer(new EdgeLabelRenderer(engine, edgeLabelData)); + engine.addWorldUpdater(new EdgeLabelUpdater(engine, edgeLabelData)); + + //Selection + engine.addRenderer(new RectangleSelectionArrayDraw(engine)); + engine.addRenderer(new SimpleMouseSelectionArrayDraw(engine)); + } + + private void setupInputListeners(VizEngine engine) { + engine.addInputListener(new DefaultJOGLEventListener(engine)); + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/availability/ArrayDraw.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/availability/ArrayDraw.java new file mode 100644 index 0000000000..c3b0ebec37 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/availability/ArrayDraw.java @@ -0,0 +1,24 @@ +package org.gephi.viz.engine.jogl.availability; + +import com.jogamp.opengl.GLAutoDrawable; +import org.gephi.viz.engine.VizEngine; + +/** + * + * @author Eduardo Ramos + */ +public class ArrayDraw { + + public static int getPreferenceInCategory() { + return 0; + } + + public static boolean isAvailable(VizEngine engine, GLAutoDrawable drawable) { + if (engine.getOpenGLOptions().isDisableVertexArrayDrawing()) { + return false; + } + + return drawable.getGLProfile().isGL3ES3(); + } + +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/availability/IndirectDraw.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/availability/IndirectDraw.java new file mode 100644 index 0000000000..97dd7451c0 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/availability/IndirectDraw.java @@ -0,0 +1,27 @@ +package org.gephi.viz.engine.jogl.availability; + +import com.jogamp.newt.event.NEWTEvent; +import com.jogamp.opengl.GLAutoDrawable; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.jogl.JOGLRenderingTarget; + +/** + * + * @author Eduardo Ramos + */ +public class IndirectDraw { + + public static int getPreferenceInCategory() { + return 100; + } + + public static boolean isAvailable(VizEngine engine, GLAutoDrawable drawable) { + if (engine.getOpenGLOptions().isDisableIndirectDrawing()) { + return false; + } + + return drawable.getGLProfile().isGL4() + && engine.getOpenGLOptions().isIndirectDrawSupported(); + } + +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/availability/InstancedDraw.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/availability/InstancedDraw.java new file mode 100644 index 0000000000..e1a90fc4be --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/availability/InstancedDraw.java @@ -0,0 +1,26 @@ +package org.gephi.viz.engine.jogl.availability; + +import com.jogamp.newt.event.NEWTEvent; +import com.jogamp.opengl.GLAutoDrawable; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.jogl.JOGLRenderingTarget; + +/** + * + * @author Eduardo Ramos + */ +public class InstancedDraw { + + public static int getPreferenceInCategory() { + return 50; + } + + public static boolean isAvailable(VizEngine engine, GLAutoDrawable drawable) { + if (engine.getOpenGLOptions().isDisableInstancedDrawing()) { + return false; + } + + return drawable.getGLProfile().isGL3ES3() + && engine.getOpenGLOptions().isInstancingSupported(); + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgecircle/CommonEdgeCircleSelfLoop.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgecircle/CommonEdgeCircleSelfLoop.java new file mode 100644 index 0000000000..9256a84aa5 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgecircle/CommonEdgeCircleSelfLoop.java @@ -0,0 +1,22 @@ +package org.gephi.viz.engine.jogl.models.edgecircle; + +public final class CommonEdgeCircleSelfLoop { + // Attributes 5 + // Index + // 0: posX + // 1: posY + // 2: color + // 3: size + // 4: nodeSize + public static final int VERTEX_FLOATS = 2; + public static final int POSITION_FLOATS = 2; + public static final int COLOR_FLOATS = 1; + public static final int SIZE_FLOATS = 1; + public static final int NODE_SIZE_FLOATS = 1; + + public static final int TOTAL_ATTRIBUTES_FLOATS + = POSITION_FLOATS + + COLOR_FLOATS + + SIZE_FLOATS + + NODE_SIZE_FLOATS; +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgecircle/EdgeCircleSelfLoopNoSelection.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgecircle/EdgeCircleSelfLoopNoSelection.java new file mode 100644 index 0000000000..80f6c0f96f --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgecircle/EdgeCircleSelfLoopNoSelection.java @@ -0,0 +1,76 @@ +package org.gephi.viz.engine.jogl.models.edgecircle; + +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_COLOR; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_POSITION; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_SELFLOOP_NODE_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_VERT; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_COLOR_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_POSITION_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_SELFLOOP_NODE_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_VERT_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_EDGE_SCALE_MAX; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_EDGE_SCALE_MIN; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_MIN_WEIGHT; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_MODEL_VIEW_PROJECTION; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_NODE_SCALE; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR; + +import com.jogamp.opengl.GL3ES3; +import org.gephi.viz.engine.jogl.util.gl.GLShaderProgram; +import org.gephi.viz.engine.util.NumberUtils; +import org.gephi.viz.engine.util.gl.Constants; + +public class EdgeCircleSelfLoopNoSelection { + + private GLShaderProgram program; + + private static final String SHADERS_ROOT = Constants.SHADERS_ROOT + "edge"; + + private static final String SHADERS_NODE_CIRCLE_SOURCE_VS = "selfloop"; + private static final String SHADERS_NODE_CIRCLE_SOURCE_FS = "selfloop"; + + public void initGLProgram(GL3ES3 gl) { + program = new GLShaderProgram(SHADERS_ROOT, SHADERS_NODE_CIRCLE_SOURCE_VS, SHADERS_NODE_CIRCLE_SOURCE_FS) + .addUniformName(UNIFORM_NAME_MODEL_VIEW_PROJECTION) + .addUniformName(UNIFORM_NAME_EDGE_SCALE_MIN) + .addUniformName(UNIFORM_NAME_EDGE_SCALE_MAX) + .addUniformName(UNIFORM_NAME_MIN_WEIGHT) + .addUniformName(UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR) + .addUniformName(UNIFORM_NAME_NODE_SCALE) + .addAttribLocation(ATTRIB_NAME_VERT, SHADER_VERT_LOCATION) + .addAttribLocation(ATTRIB_NAME_POSITION, SHADER_POSITION_LOCATION) + .addAttribLocation(ATTRIB_NAME_COLOR, SHADER_COLOR_LOCATION) + .addAttribLocation(ATTRIB_NAME_SIZE, SHADER_SIZE_LOCATION) + .addAttribLocation(ATTRIB_NAME_SELFLOOP_NODE_SIZE, SHADER_SELFLOOP_NODE_SIZE_LOCATION) + .init(gl); + } + + public void useProgram(GL3ES3 gl, float[] mvpFloats, float edgeScale, float minWeight, float maxWeight, + float edgeRescaleMin, float edgeRescaleMax, float nodeScale) { + program.use(gl); + + gl.glUniformMatrix4fv(program.getUniformLocation(UNIFORM_NAME_MODEL_VIEW_PROJECTION), 1, false, mvpFloats, 0); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_NODE_SCALE), nodeScale); + if (NumberUtils.equalsEpsilon(minWeight, maxWeight, 1e-3f)) { + // All weights equal: rescaling is vacuous, fall back to raw weight Γ— edgeScale + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MIN), edgeScale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MAX), edgeScale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_MIN_WEIGHT), minWeight); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR), 1); + } else { + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MIN), edgeRescaleMin * edgeScale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MAX), edgeRescaleMax * edgeScale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_MIN_WEIGHT), minWeight); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR), maxWeight - minWeight); + } + } + + public void destroy(GL3ES3 gl) { + if (program != null) { + program.destroy(gl); + program = null; + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgecircle/EdgeCircleSelfLoopSelectionSelected.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgecircle/EdgeCircleSelfLoopSelectionSelected.java new file mode 100644 index 0000000000..a6096cac85 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgecircle/EdgeCircleSelfLoopSelectionSelected.java @@ -0,0 +1,88 @@ +package org.gephi.viz.engine.jogl.models.edgecircle; + +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_COLOR; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_POSITION; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_SELFLOOP_NODE_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_VERT; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_COLOR_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_POSITION_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_SELFLOOP_NODE_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_VERT_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_BACKGROUND_COLOR; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_COLOR_LIGHTEN_FACTOR; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_EDGE_SCALE_MAX; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_EDGE_SCALE_MIN; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_GLOBAL_TIME; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_MIN_WEIGHT; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_MODEL_VIEW_PROJECTION; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_NODE_SCALE; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_SELECTION_TIME; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR; + +import com.jogamp.opengl.GL3ES3; +import org.gephi.viz.engine.jogl.util.gl.GLShaderProgram; +import org.gephi.viz.engine.util.NumberUtils; +import org.gephi.viz.engine.util.gl.Constants; + +public class EdgeCircleSelfLoopSelectionSelected { + private GLShaderProgram program; + + private static final String SHADERS_ROOT = Constants.SHADERS_ROOT + "edge"; + + private static final String SHADERS_NODE_CIRCLE_SOURCE_VS = "selfloop_selected"; + private static final String SHADERS_NODE_CIRCLE_SOURCE_FS = "selfloop_selected"; + + public void initGLProgram(GL3ES3 gl) { + program = new GLShaderProgram(SHADERS_ROOT, SHADERS_NODE_CIRCLE_SOURCE_VS, SHADERS_NODE_CIRCLE_SOURCE_FS) + .addUniformName(UNIFORM_NAME_MODEL_VIEW_PROJECTION) + .addUniformName(UNIFORM_NAME_BACKGROUND_COLOR) + .addUniformName(UNIFORM_NAME_COLOR_LIGHTEN_FACTOR) + .addUniformName(UNIFORM_NAME_GLOBAL_TIME) + .addUniformName(UNIFORM_NAME_SELECTION_TIME) + .addUniformName(UNIFORM_NAME_EDGE_SCALE_MIN) + .addUniformName(UNIFORM_NAME_EDGE_SCALE_MAX) + .addUniformName(UNIFORM_NAME_MIN_WEIGHT) + .addUniformName(UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR) + .addUniformName(UNIFORM_NAME_NODE_SCALE) + .addAttribLocation(ATTRIB_NAME_VERT, SHADER_VERT_LOCATION) + .addAttribLocation(ATTRIB_NAME_POSITION, SHADER_POSITION_LOCATION) + .addAttribLocation(ATTRIB_NAME_COLOR, SHADER_COLOR_LOCATION) + .addAttribLocation(ATTRIB_NAME_SIZE, SHADER_SIZE_LOCATION) + .addAttribLocation(ATTRIB_NAME_SELFLOOP_NODE_SIZE, SHADER_SELFLOOP_NODE_SIZE_LOCATION) + .init(gl); + } + + public void useProgram(GL3ES3 gl, float[] mvpFloats, float[] backgroundColorFloats, float colorLightenFactor, + float globalTime, float selectionTime, float edgeScale, float minWeight, float maxWeight, + float edgeRescaleMin, float edgeRescaleMax, float nodeScale) { + program.use(gl); + + gl.glUniformMatrix4fv(program.getUniformLocation(UNIFORM_NAME_MODEL_VIEW_PROJECTION), 1, false, mvpFloats, 0); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_COLOR_LIGHTEN_FACTOR), colorLightenFactor); + gl.glUniform4fv(program.getUniformLocation(UNIFORM_NAME_BACKGROUND_COLOR), 1, backgroundColorFloats, 0); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_GLOBAL_TIME), globalTime); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_SELECTION_TIME), selectionTime); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_NODE_SCALE), nodeScale); + if (NumberUtils.equalsEpsilon(minWeight, maxWeight, 1e-3f)) { + // All weights equal: rescaling is vacuous, fall back to raw weight Γ— edgeScale + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MIN), edgeScale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MAX), edgeScale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_MIN_WEIGHT), minWeight); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR), 1); + } else { + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MIN), edgeRescaleMin * edgeScale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MAX), edgeRescaleMax * edgeScale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_MIN_WEIGHT), minWeight); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR), maxWeight - minWeight); + } + } + + public void destroy(GL3ES3 gl) { + if (program != null) { + program.destroy(gl); + program = null; + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgecircle/EdgeCircleSelfLoopSelectionUnselected.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgecircle/EdgeCircleSelfLoopSelectionUnselected.java new file mode 100644 index 0000000000..69f3f7dc1d --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgecircle/EdgeCircleSelfLoopSelectionUnselected.java @@ -0,0 +1,86 @@ +package org.gephi.viz.engine.jogl.models.edgecircle; + +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_COLOR; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_POSITION; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_SELFLOOP_NODE_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_VERT; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_COLOR_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_POSITION_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_SELFLOOP_NODE_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_VERT_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_BACKGROUND_COLOR; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_COLOR_LIGHTEN_FACTOR; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_EDGE_SCALE_MAX; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_EDGE_SCALE_MIN; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_GLOBAL_TIME; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_MIN_WEIGHT; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_MODEL_VIEW_PROJECTION; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_NODE_SCALE; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_SELECTION_TIME; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR; + +import com.jogamp.opengl.GL3ES3; +import org.gephi.viz.engine.jogl.util.gl.GLShaderProgram; +import org.gephi.viz.engine.util.NumberUtils; +import org.gephi.viz.engine.util.gl.Constants; + +public class EdgeCircleSelfLoopSelectionUnselected { + private GLShaderProgram program; + + private static final String SHADERS_ROOT = Constants.SHADERS_ROOT + "edge"; + private static final String SHADERS_NODE_CIRCLE_SOURCE_VS = "selfloop_unselected"; + private static final String SHADERS_NODE_CIRCLE_SOURCE_FS = "selfloop_unselected"; + + public void initGLProgram(GL3ES3 gl) { + program = new GLShaderProgram(SHADERS_ROOT, SHADERS_NODE_CIRCLE_SOURCE_VS, SHADERS_NODE_CIRCLE_SOURCE_FS) + .addUniformName(UNIFORM_NAME_BACKGROUND_COLOR) + .addUniformName(UNIFORM_NAME_MODEL_VIEW_PROJECTION) + .addUniformName(UNIFORM_NAME_COLOR_LIGHTEN_FACTOR) + .addUniformName(UNIFORM_NAME_GLOBAL_TIME) + .addUniformName(UNIFORM_NAME_SELECTION_TIME) + .addUniformName(UNIFORM_NAME_EDGE_SCALE_MIN) + .addUniformName(UNIFORM_NAME_EDGE_SCALE_MAX) + .addUniformName(UNIFORM_NAME_MIN_WEIGHT) + .addUniformName(UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR) + .addUniformName(UNIFORM_NAME_NODE_SCALE) + .addAttribLocation(ATTRIB_NAME_VERT, SHADER_VERT_LOCATION) + .addAttribLocation(ATTRIB_NAME_POSITION, SHADER_POSITION_LOCATION) + .addAttribLocation(ATTRIB_NAME_COLOR, SHADER_COLOR_LOCATION) + .addAttribLocation(ATTRIB_NAME_SIZE, SHADER_SIZE_LOCATION) + .addAttribLocation(ATTRIB_NAME_SELFLOOP_NODE_SIZE, SHADER_SELFLOOP_NODE_SIZE_LOCATION) + .init(gl); + } + + public void useProgram(GL3ES3 gl, float[] mvpFloats, float[] backgroundColorFloats, float colorLightenFactor, + float globalTime, float selectionTime, float edgeScale, float minWeight, float maxWeight, + float edgeRescaleMin, float edgeRescaleMax, float nodeScale) { + program.use(gl); + gl.glUniformMatrix4fv(program.getUniformLocation(UNIFORM_NAME_MODEL_VIEW_PROJECTION), 1, false, mvpFloats, 0); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_COLOR_LIGHTEN_FACTOR), colorLightenFactor); + gl.glUniform4fv(program.getUniformLocation(UNIFORM_NAME_BACKGROUND_COLOR), 1, backgroundColorFloats, 0); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_GLOBAL_TIME), globalTime); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_SELECTION_TIME), selectionTime); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_NODE_SCALE), nodeScale); + if (NumberUtils.equalsEpsilon(minWeight, maxWeight, 1e-3f)) { + // All weights equal: rescaling is vacuous, fall back to raw weight Γ— edgeScale + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MIN), edgeScale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MAX), edgeScale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_MIN_WEIGHT), minWeight); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR), 1); + } else { + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MIN), edgeRescaleMin * edgeScale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MAX), edgeRescaleMax * edgeScale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_MIN_WEIGHT), minWeight); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR), maxWeight - minWeight); + } + } + + public void destroy(GL3ES3 gl) { + if (program != null) { + program.destroy(gl); + program = null; + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgeline/CommonEdgeLineModel.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgeline/CommonEdgeLineModel.java new file mode 100644 index 0000000000..45c0d8684f --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgeline/CommonEdgeLineModel.java @@ -0,0 +1,19 @@ +package org.gephi.viz.engine.jogl.models.edgeline; + +public class CommonEdgeLineModel { + + public static final int POSITION_SOURCE_FLOATS = 2; + public static final int POSITION_TARGET_FLOATS = 2; + public static final int COLOR_FLOATS = 1; + public static final int SOURCE_SIZE_FLOATS = 1; + public static final int TARGET_SIZE_FLOATS = 1; + public static final int SIZE_FLOATS = 1; + + public static final int TOTAL_ATTRIBUTES_FLOATS + = POSITION_SOURCE_FLOATS + + POSITION_TARGET_FLOATS + + COLOR_FLOATS + + SIZE_FLOATS + + SOURCE_SIZE_FLOATS + + TARGET_SIZE_FLOATS; +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgeline/directed/CommonEdgeLineDirected.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgeline/directed/CommonEdgeLineDirected.java new file mode 100644 index 0000000000..bc5896b097 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgeline/directed/CommonEdgeLineDirected.java @@ -0,0 +1,12 @@ +package org.gephi.viz.engine.jogl.models.edgeline.directed; + +import org.gephi.viz.engine.jogl.models.edgeline.CommonEdgeLineModel; + +public class CommonEdgeLineDirected extends CommonEdgeLineModel { + public static final int VERTEX_FLOATS = 3; + + private static final int VERTEX_PER_TRIANGLE = 3; + + public static final int TRIANGLE_COUNT = 3; + public static final int VERTEX_COUNT = TRIANGLE_COUNT * VERTEX_PER_TRIANGLE; +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgeline/directed/EdgeLineDirectedModelNoSelection.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgeline/directed/EdgeLineDirectedModelNoSelection.java new file mode 100644 index 0000000000..ab821ac027 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgeline/directed/EdgeLineDirectedModelNoSelection.java @@ -0,0 +1,105 @@ +package org.gephi.viz.engine.jogl.models.edgeline.directed; + +import static org.gephi.viz.engine.jogl.models.edgeline.directed.CommonEdgeLineDirected.VERTEX_COUNT; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_COLOR; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_POSITION; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_POSITION_TARGET; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_SOURCE_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_TARGET_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_VERT; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_COLOR_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_POSITION_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_POSITION_TARGET_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_SOURCE_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_TARGET_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_VERT_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_EDGE_INSET; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_EDGE_SCALE_MAX; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_EDGE_SCALE_MIN; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_MIN_WEIGHT; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_MODEL_VIEW_PROJECTION; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_NODE_SCALE; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR; + +import com.jogamp.opengl.GL3ES3; +import org.gephi.viz.engine.jogl.util.gl.GLShaderProgram; +import org.gephi.viz.engine.util.NumberUtils; +import org.gephi.viz.engine.util.gl.Constants; + +/** + * + * @author Eduardo Ramos + */ + +public class EdgeLineDirectedModelNoSelection { + + private GLShaderProgram program; + + public int getVertexCount() { + return VERTEX_COUNT; + } + + private static final String SHADERS_ROOT = Constants.SHADERS_ROOT + "edge"; + + private static final String SHADERS_EDGE_LINE_SOURCE_VS = "edge-line-directed"; + private static final String SHADERS_EDGE_LINE_SOURCE_FS = "edge-line-directed"; + + + public void initProgram(GL3ES3 gl) { + program = new GLShaderProgram(SHADERS_ROOT, SHADERS_EDGE_LINE_SOURCE_VS, SHADERS_EDGE_LINE_SOURCE_FS) + .addUniformName(UNIFORM_NAME_MODEL_VIEW_PROJECTION) + .addUniformName(UNIFORM_NAME_EDGE_SCALE_MIN) + .addUniformName(UNIFORM_NAME_EDGE_SCALE_MAX) + .addUniformName(UNIFORM_NAME_MIN_WEIGHT) + .addUniformName(UNIFORM_NAME_NODE_SCALE) + .addUniformName(UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR) + .addUniformName(UNIFORM_NAME_EDGE_INSET) + .addAttribLocation(ATTRIB_NAME_VERT, SHADER_VERT_LOCATION) + .addAttribLocation(ATTRIB_NAME_POSITION, SHADER_POSITION_LOCATION) + .addAttribLocation(ATTRIB_NAME_POSITION_TARGET, SHADER_POSITION_TARGET_LOCATION) + .addAttribLocation(ATTRIB_NAME_SIZE, SHADER_SIZE_LOCATION) + .addAttribLocation(ATTRIB_NAME_COLOR, SHADER_COLOR_LOCATION) + .addAttribLocation(ATTRIB_NAME_SOURCE_SIZE, SHADER_SOURCE_SIZE_LOCATION) + .addAttribLocation(ATTRIB_NAME_TARGET_SIZE, SHADER_TARGET_SIZE_LOCATION) + .init(gl); + + } + + + public void useProgram(GL3ES3 gl, float[] mvpFloats, float edgeScale, float minWeight, float maxWeight, + float edgeRescaleMin, float edgeRescaleMax, float nodeScale, float edgeInset) { + program.use(gl); + prepareProgramData(gl, mvpFloats, edgeScale, minWeight, maxWeight, nodeScale, edgeRescaleMin, edgeRescaleMax, + edgeInset); + } + + + private void prepareProgramData(GL3ES3 gl, float[] mvpFloats, float scale, float minWeight, float maxWeight, + float nodeScale, float edgeRescaleMin, float edgeRescaleMax, float edgeInset) { + gl.glUniformMatrix4fv(program.getUniformLocation(UNIFORM_NAME_MODEL_VIEW_PROJECTION), 1, false, mvpFloats, 0); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_NODE_SCALE), nodeScale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_INSET), edgeInset); + if (NumberUtils.equalsEpsilon(minWeight, maxWeight, 1e-3f)) { + // All weights equal: rescaling is vacuous, fall back to raw weight Γ— edgeScale + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MIN), scale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MAX), scale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_MIN_WEIGHT), minWeight); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR), 1); + } else { + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MIN), edgeRescaleMin * scale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MAX), edgeRescaleMax * scale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_MIN_WEIGHT), minWeight); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR), maxWeight - minWeight); + } + } + + + public void destroy(GL3ES3 gl) { + if (program != null) { + program.destroy(gl); + program = null; + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgeline/directed/EdgeLineDirectedModelSelectionSelected.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgeline/directed/EdgeLineDirectedModelSelectionSelected.java new file mode 100644 index 0000000000..d1ba67d183 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgeline/directed/EdgeLineDirectedModelSelectionSelected.java @@ -0,0 +1,124 @@ +package org.gephi.viz.engine.jogl.models.edgeline.directed; + +import static org.gephi.viz.engine.jogl.models.edgeline.directed.CommonEdgeLineDirected.VERTEX_COUNT; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_COLOR; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_POSITION; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_POSITION_TARGET; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_SOURCE_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_TARGET_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_VERT; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_COLOR_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_POSITION_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_POSITION_TARGET_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_SOURCE_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_TARGET_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_VERT_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_EDGE_INSET; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_EDGE_SCALE_MAX; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_EDGE_SCALE_MIN; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_GLOBAL_TIME; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_MIN_WEIGHT; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_MODEL_VIEW_PROJECTION; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_NODE_SCALE; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_SELECTION_TIME; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR; + +import com.jogamp.opengl.GL3ES3; +import org.gephi.viz.engine.jogl.util.gl.GLShaderProgram; +import org.gephi.viz.engine.util.NumberUtils; +import org.gephi.viz.engine.util.gl.Constants; + +/** + * + * @author Eduardo Ramos + */ + +public class EdgeLineDirectedModelSelectionSelected { + + private GLShaderProgram program; + + + public int getVertexCount() { + return VERTEX_COUNT; + } + + + private static final String SHADERS_ROOT = Constants.SHADERS_ROOT + "edge"; + + private static final String SHADERS_EDGE_LINE_SOURCE_VS = "edge-line-directed_with_selection_selected"; + private static final String SHADERS_EDGE_LINE_SOURCE_FS = "edge-line-directed"; + + + public void initProgram(GL3ES3 gl) { + program = + new GLShaderProgram(SHADERS_ROOT, SHADERS_EDGE_LINE_SOURCE_VS, + SHADERS_EDGE_LINE_SOURCE_FS) + .addUniformName(UNIFORM_NAME_MODEL_VIEW_PROJECTION) + .addUniformName(UNIFORM_NAME_EDGE_SCALE_MIN) + .addUniformName(UNIFORM_NAME_EDGE_SCALE_MAX) + .addUniformName(UNIFORM_NAME_MIN_WEIGHT) + .addUniformName(UNIFORM_NAME_NODE_SCALE) + .addUniformName(UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR) + .addUniformName(UNIFORM_NAME_EDGE_INSET) + .addUniformName(UNIFORM_NAME_GLOBAL_TIME) + .addUniformName(UNIFORM_NAME_SELECTION_TIME) + .addAttribLocation(ATTRIB_NAME_VERT, SHADER_VERT_LOCATION) + .addAttribLocation(ATTRIB_NAME_POSITION, SHADER_POSITION_LOCATION) + .addAttribLocation(ATTRIB_NAME_POSITION_TARGET, SHADER_POSITION_TARGET_LOCATION) + .addAttribLocation(ATTRIB_NAME_SIZE, SHADER_SIZE_LOCATION) + .addAttribLocation(ATTRIB_NAME_COLOR, SHADER_COLOR_LOCATION) + .addAttribLocation(ATTRIB_NAME_SOURCE_SIZE, SHADER_SOURCE_SIZE_LOCATION) + .addAttribLocation(ATTRIB_NAME_TARGET_SIZE, SHADER_TARGET_SIZE_LOCATION) + .init(gl); + + } + + + public void useProgram(GL3ES3 gl, float[] mvpFloats, float edgeScale, float minWeight, + float maxWeight, float edgeResclaleMin, float edgeRescaleMax, + float nodeScale, float edgeInset, float globalTime, + float selectionTime) { + program.use(gl); + prepareProgramData(gl, mvpFloats, edgeScale, minWeight, maxWeight, nodeScale, + edgeResclaleMin, edgeRescaleMax, edgeInset, globalTime, + selectionTime); + } + + + private void prepareProgramData(GL3ES3 gl, float[] mvpFloats, float scale, float minWeight, + float maxWeight, float nodeScale, float edgeRescaleMin, + float edgeRescaleMax, float edgeInset, + float globalTime, float selectionTime) { + gl.glUniformMatrix4fv(program.getUniformLocation(UNIFORM_NAME_MODEL_VIEW_PROJECTION), 1, + false, mvpFloats, 0); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_NODE_SCALE), nodeScale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_INSET), edgeInset); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_GLOBAL_TIME), globalTime); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_SELECTION_TIME), selectionTime); + if (NumberUtils.equalsEpsilon(minWeight, maxWeight, 1e-3f)) { + // All weights equal: rescaling is vacuous, fall back to raw weight Γ— edgeScale + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MIN), scale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MAX), scale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_MIN_WEIGHT), minWeight); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR), 1); + } else { + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MIN), + edgeRescaleMin * scale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MAX), + edgeRescaleMax * scale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_MIN_WEIGHT), minWeight); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR), + maxWeight - minWeight); + } + } + + + public void destroy(GL3ES3 gl) { + if (program != null) { + program.destroy(gl); + program = null; + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgeline/directed/EdgeLineDirectedModelSelectionUnselected.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgeline/directed/EdgeLineDirectedModelSelectionUnselected.java new file mode 100644 index 0000000000..7594148b9e --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgeline/directed/EdgeLineDirectedModelSelectionUnselected.java @@ -0,0 +1,128 @@ +package org.gephi.viz.engine.jogl.models.edgeline.directed; + +import static org.gephi.viz.engine.jogl.models.edgeline.directed.CommonEdgeLineDirected.VERTEX_COUNT; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_COLOR; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_POSITION; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_POSITION_TARGET; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_SOURCE_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_TARGET_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_VERT; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_COLOR_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_POSITION_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_POSITION_TARGET_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_SOURCE_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_TARGET_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_VERT_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_BACKGROUND_COLOR; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_COLOR_LIGHTEN_FACTOR; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_EDGE_INSET; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_EDGE_SCALE_MAX; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_EDGE_SCALE_MIN; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_GLOBAL_TIME; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_MIN_WEIGHT; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_MODEL_VIEW_PROJECTION; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_NODE_SCALE; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_SELECTION_TIME; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR; + +import com.jogamp.opengl.GL3ES3; +import org.gephi.viz.engine.jogl.util.gl.GLShaderProgram; +import org.gephi.viz.engine.util.NumberUtils; +import org.gephi.viz.engine.util.gl.Constants; + +/** + * + * @author Eduardo Ramos + */ +public class EdgeLineDirectedModelSelectionUnselected { + + private GLShaderProgram program; + + + public int getVertexCount() { + return VERTEX_COUNT; + } + + private static final String SHADERS_ROOT = Constants.SHADERS_ROOT + "edge"; + + private static final String SHADERS_EDGE_LINE_SOURCE_VS = "edge-line-directed_with_selection_unselected"; + private static final String SHADERS_EDGE_LINE_SOURCE_FS = "edge-line-directed"; + + public void initProgram(GL3ES3 gl) { + program = new GLShaderProgram(SHADERS_ROOT, SHADERS_EDGE_LINE_SOURCE_VS, + SHADERS_EDGE_LINE_SOURCE_FS) + .addUniformName(UNIFORM_NAME_MODEL_VIEW_PROJECTION) + .addUniformName(UNIFORM_NAME_BACKGROUND_COLOR) + .addUniformName(UNIFORM_NAME_COLOR_LIGHTEN_FACTOR) + .addUniformName(UNIFORM_NAME_EDGE_SCALE_MIN) + .addUniformName(UNIFORM_NAME_EDGE_SCALE_MAX) + .addUniformName(UNIFORM_NAME_MIN_WEIGHT) + .addUniformName(UNIFORM_NAME_NODE_SCALE) + .addUniformName(UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR) + .addUniformName(UNIFORM_NAME_EDGE_INSET) + .addUniformName(UNIFORM_NAME_GLOBAL_TIME) + .addUniformName(UNIFORM_NAME_SELECTION_TIME) + .addAttribLocation(ATTRIB_NAME_VERT, SHADER_VERT_LOCATION) + .addAttribLocation(ATTRIB_NAME_POSITION, SHADER_POSITION_LOCATION) + .addAttribLocation(ATTRIB_NAME_POSITION_TARGET, SHADER_POSITION_TARGET_LOCATION) + .addAttribLocation(ATTRIB_NAME_SIZE, SHADER_SIZE_LOCATION) + .addAttribLocation(ATTRIB_NAME_COLOR, SHADER_COLOR_LOCATION) + .addAttribLocation(ATTRIB_NAME_SOURCE_SIZE, SHADER_SOURCE_SIZE_LOCATION) + .addAttribLocation(ATTRIB_NAME_TARGET_SIZE, SHADER_TARGET_SIZE_LOCATION) + .init(gl); + } + + + public void useProgram(GL3ES3 gl, float[] mvpFloats, float edgeScale, float minWeight, + float maxWeight, float edgeRescaleMin, float edgeRescaleMax, + float[] backgroundColorFloats, + float colorLightenFactor, float nodeScale, float edgeInset, + float globalTime, float selectionTime) { + program.use(gl); + prepareProgramData(gl, mvpFloats, edgeScale, minWeight, maxWeight, edgeRescaleMin, + edgeRescaleMax, backgroundColorFloats, + colorLightenFactor, nodeScale, edgeInset, globalTime, selectionTime); + } + + private void prepareProgramData(GL3ES3 gl, float[] mvpFloats, float scale, float minWeight, + float maxWeight, float edgeRescaleMin, float edgeRescaleMax, + float[] backgroundColorFloats, + float colorLightenFactor, float nodeScale, float edgeInset, + float globalTime, float selectionTime) { + gl.glUniformMatrix4fv(program.getUniformLocation(UNIFORM_NAME_MODEL_VIEW_PROJECTION), 1, + false, mvpFloats, 0); + gl.glUniform4fv(program.getUniformLocation(UNIFORM_NAME_BACKGROUND_COLOR), 1, + backgroundColorFloats, 0); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_COLOR_LIGHTEN_FACTOR), + colorLightenFactor); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_NODE_SCALE), nodeScale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_INSET), edgeInset); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_GLOBAL_TIME), globalTime); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_SELECTION_TIME), selectionTime); + if (NumberUtils.equalsEpsilon(minWeight, maxWeight, 1e-3f)) { + // All weights equal: rescaling is vacuous, fall back to raw weight Γ— edgeScale + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MIN), scale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MAX), scale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_MIN_WEIGHT), minWeight); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR), + 1); + } else { + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MIN), + edgeRescaleMin * scale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MAX), + edgeRescaleMax * scale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_MIN_WEIGHT), minWeight); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR), + maxWeight - minWeight); + } + } + + public void destroy(GL3ES3 gl) { + if (program != null) { + program.destroy(gl); + program = null; + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgeline/undirected/CommonEdgeLineUndirected.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgeline/undirected/CommonEdgeLineUndirected.java new file mode 100644 index 0000000000..225d2de884 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgeline/undirected/CommonEdgeLineUndirected.java @@ -0,0 +1,11 @@ +package org.gephi.viz.engine.jogl.models.edgeline.undirected; + +import org.gephi.viz.engine.jogl.models.edgeline.CommonEdgeLineModel; + +public final class CommonEdgeLineUndirected extends CommonEdgeLineModel { + public static final int VERTEX_FLOATS = 2; + public static final int VERTEX_PER_TRIANGLE = 3; + + public static final int TRIANGLE_COUNT = 2; + public static final int VERTEX_COUNT = TRIANGLE_COUNT * VERTEX_PER_TRIANGLE; +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgeline/undirected/EdgeLineUndirectedModelNoSelection.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgeline/undirected/EdgeLineUndirectedModelNoSelection.java new file mode 100644 index 0000000000..1ddf67e5c1 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgeline/undirected/EdgeLineUndirectedModelNoSelection.java @@ -0,0 +1,100 @@ +package org.gephi.viz.engine.jogl.models.edgeline.undirected; + +import static org.gephi.viz.engine.jogl.models.edgeline.undirected.CommonEdgeLineUndirected.VERTEX_COUNT; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_COLOR; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_POSITION; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_POSITION_TARGET; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_SOURCE_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_TARGET_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_VERT; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_COLOR_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_POSITION_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_POSITION_TARGET_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_SOURCE_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_TARGET_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_VERT_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_EDGE_SCALE_MAX; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_EDGE_SCALE_MIN; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_MIN_WEIGHT; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_MODEL_VIEW_PROJECTION; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_NODE_SCALE; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR; + +import com.jogamp.opengl.GL3ES3; +import org.gephi.viz.engine.jogl.util.gl.GLShaderProgram; +import org.gephi.viz.engine.util.NumberUtils; +import org.gephi.viz.engine.util.gl.Constants; + +/** + * + * @author Eduardo Ramos + */ + +public class EdgeLineUndirectedModelNoSelection { + private GLShaderProgram program; + + public int getVertexCount() { + return VERTEX_COUNT; + } + + + private static final String SHADERS_ROOT = Constants.SHADERS_ROOT + "edge"; + + private static final String SHADERS_EDGE_LINE_SOURCE_VS = "edge-line-undirected"; + private static final String SHADERS_EDGE_LINE_SOURCE_FS = "edge-line-undirected"; + + public void initProgram(GL3ES3 gl) { + program = new GLShaderProgram(SHADERS_ROOT, SHADERS_EDGE_LINE_SOURCE_VS, SHADERS_EDGE_LINE_SOURCE_FS) + .addUniformName(UNIFORM_NAME_MODEL_VIEW_PROJECTION) + .addUniformName(UNIFORM_NAME_EDGE_SCALE_MIN) + .addUniformName(UNIFORM_NAME_EDGE_SCALE_MAX) + .addUniformName(UNIFORM_NAME_MIN_WEIGHT) + .addUniformName(UNIFORM_NAME_NODE_SCALE) + .addUniformName(UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR) + .addAttribLocation(ATTRIB_NAME_VERT, SHADER_VERT_LOCATION) + .addAttribLocation(ATTRIB_NAME_POSITION, SHADER_POSITION_LOCATION) + .addAttribLocation(ATTRIB_NAME_POSITION_TARGET, SHADER_POSITION_TARGET_LOCATION) + .addAttribLocation(ATTRIB_NAME_SIZE, SHADER_SIZE_LOCATION) + .addAttribLocation(ATTRIB_NAME_COLOR, SHADER_COLOR_LOCATION) + .addAttribLocation(ATTRIB_NAME_SOURCE_SIZE, SHADER_SOURCE_SIZE_LOCATION) + .addAttribLocation(ATTRIB_NAME_TARGET_SIZE, SHADER_TARGET_SIZE_LOCATION) + .init(gl); + + } + + public void useProgram(GL3ES3 gl, float[] mvpFloats, float edgeScale, float minWeight, float maxWeight, + float edgeRescaleMin, float edgeRescaleMax, float nodeScale) { + //Line: + program.use(gl); + prepareProgramData(gl, mvpFloats, edgeScale, minWeight, maxWeight, nodeScale, edgeRescaleMin, edgeRescaleMax); + } + + + private void prepareProgramData(GL3ES3 gl, float[] mvpFloats, float scale, float minWeight, float maxWeight, + float nodeScale, float edgeRescaleMin, float edgeRescaleMax) { + gl.glUniformMatrix4fv(program.getUniformLocation(UNIFORM_NAME_MODEL_VIEW_PROJECTION), 1, false, mvpFloats, 0); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_NODE_SCALE), nodeScale); + if (NumberUtils.equalsEpsilon(minWeight, maxWeight, 1e-3f)) { + // All weights equal: rescaling is vacuous, fall back to raw weight Γ— edgeScale + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MIN), scale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MAX), scale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_MIN_WEIGHT), minWeight); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR), 1); + } else { + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MIN), edgeRescaleMin * scale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MAX), edgeRescaleMax * scale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_MIN_WEIGHT), minWeight); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR), maxWeight - minWeight); + } + } + + public void destroy(GL3ES3 gl) { + if (program != null) { + program.destroy(gl); + program = null; + } + + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgeline/undirected/EdgeLineUndirectedModelSelectionSelected.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgeline/undirected/EdgeLineUndirectedModelSelectionSelected.java new file mode 100644 index 0000000000..9a30978d59 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgeline/undirected/EdgeLineUndirectedModelSelectionSelected.java @@ -0,0 +1,116 @@ +package org.gephi.viz.engine.jogl.models.edgeline.undirected; + +import static org.gephi.viz.engine.jogl.models.edgeline.undirected.CommonEdgeLineUndirected.VERTEX_COUNT; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_COLOR; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_POSITION; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_POSITION_TARGET; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_SOURCE_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_TARGET_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_VERT; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_COLOR_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_POSITION_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_POSITION_TARGET_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_SOURCE_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_TARGET_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_VERT_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_EDGE_SCALE_MAX; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_EDGE_SCALE_MIN; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_GLOBAL_TIME; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_MIN_WEIGHT; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_MODEL_VIEW_PROJECTION; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_NODE_SCALE; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_SELECTION_TIME; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR; + +import com.jogamp.opengl.GL3ES3; +import org.gephi.viz.engine.jogl.util.gl.GLShaderProgram; +import org.gephi.viz.engine.util.NumberUtils; +import org.gephi.viz.engine.util.gl.Constants; + +/** + * + * @author Eduardo Ramos + */ + + +public class EdgeLineUndirectedModelSelectionSelected { + private GLShaderProgram program; + + public int getVertexCount() { + return VERTEX_COUNT; + } + + private static final String SHADERS_ROOT = Constants.SHADERS_ROOT + "edge"; + + private static final String SHADERS_EDGE_LINE_SOURCE_VS = "edge-line-undirected_with_selection_selected"; + private static final String SHADERS_EDGE_LINE_SOURCE_FS = "edge-line-undirected"; + + + public void initProgram(GL3ES3 gl) { + program = + new GLShaderProgram(SHADERS_ROOT, SHADERS_EDGE_LINE_SOURCE_VS, + SHADERS_EDGE_LINE_SOURCE_FS) + .addUniformName(UNIFORM_NAME_MODEL_VIEW_PROJECTION) + .addUniformName(UNIFORM_NAME_EDGE_SCALE_MIN) + .addUniformName(UNIFORM_NAME_EDGE_SCALE_MAX) + .addUniformName(UNIFORM_NAME_MIN_WEIGHT) + .addUniformName(UNIFORM_NAME_NODE_SCALE) + .addUniformName(UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR) + .addUniformName(UNIFORM_NAME_GLOBAL_TIME) + .addUniformName(UNIFORM_NAME_SELECTION_TIME) + .addAttribLocation(ATTRIB_NAME_VERT, SHADER_VERT_LOCATION) + .addAttribLocation(ATTRIB_NAME_POSITION, SHADER_POSITION_LOCATION) + .addAttribLocation(ATTRIB_NAME_POSITION_TARGET, SHADER_POSITION_TARGET_LOCATION) + .addAttribLocation(ATTRIB_NAME_SIZE, SHADER_SIZE_LOCATION) + .addAttribLocation(ATTRIB_NAME_COLOR, SHADER_COLOR_LOCATION) + .addAttribLocation(ATTRIB_NAME_SOURCE_SIZE, SHADER_SOURCE_SIZE_LOCATION) + .addAttribLocation(ATTRIB_NAME_TARGET_SIZE, SHADER_TARGET_SIZE_LOCATION) + .init(gl); + } + + public void useProgram(GL3ES3 gl, float[] mvpFloats, float edgeScale, float minWeight, + float maxWeight, float edgeRescaleMin, float edgeRescaleMax, + float nodeScale, float globalTime, + float selectionTime) { + program.use(gl); + prepareProgramData(gl, mvpFloats, edgeScale, minWeight, maxWeight, edgeRescaleMin, + edgeRescaleMax, nodeScale, globalTime, + selectionTime); + } + + + private void prepareProgramData(GL3ES3 gl, float[] mvpFloats, float scale, float minWeight, + float maxWeight, float edgeRescaleMin, float edgeRescaleMax, + float nodeScale, + float globalTime, float selectionTime) { + gl.glUniformMatrix4fv(program.getUniformLocation(UNIFORM_NAME_MODEL_VIEW_PROJECTION), 1, + false, mvpFloats, 0); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_NODE_SCALE), nodeScale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_GLOBAL_TIME), globalTime); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_SELECTION_TIME), selectionTime); + if (NumberUtils.equalsEpsilon(minWeight, maxWeight, 1e-3f)) { + // All weights equal: rescaling is vacuous, fall back to raw weight Γ— edgeScale + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MIN), scale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MAX), scale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_MIN_WEIGHT), minWeight); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR), 1); + } else { + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MIN), + edgeRescaleMin * scale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MAX), + edgeRescaleMax * scale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_MIN_WEIGHT), minWeight); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR), + maxWeight - minWeight); + } + } + + public void destroy(GL3ES3 gl) { + if (program != null) { + program.destroy(gl); + program = null; + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgeline/undirected/EdgeLineUndirectedModelSelectionUnselected.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgeline/undirected/EdgeLineUndirectedModelSelectionUnselected.java new file mode 100644 index 0000000000..3c646e943b --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/edgeline/undirected/EdgeLineUndirectedModelSelectionUnselected.java @@ -0,0 +1,123 @@ +package org.gephi.viz.engine.jogl.models.edgeline.undirected; + +import static org.gephi.viz.engine.jogl.models.edgeline.undirected.CommonEdgeLineUndirected.VERTEX_COUNT; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_COLOR; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_POSITION; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_POSITION_TARGET; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_SOURCE_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_TARGET_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_VERT; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_COLOR_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_POSITION_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_POSITION_TARGET_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_SOURCE_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_TARGET_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_VERT_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_BACKGROUND_COLOR; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_COLOR_LIGHTEN_FACTOR; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_EDGE_SCALE_MAX; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_EDGE_SCALE_MIN; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_GLOBAL_TIME; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_MIN_WEIGHT; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_MODEL_VIEW_PROJECTION; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_NODE_SCALE; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_SELECTION_TIME; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR; + +import com.jogamp.opengl.GL3ES3; +import org.gephi.viz.engine.jogl.util.gl.GLShaderProgram; +import org.gephi.viz.engine.util.NumberUtils; +import org.gephi.viz.engine.util.gl.Constants; + +/** + * + * @author Eduardo Ramos + */ + +public class EdgeLineUndirectedModelSelectionUnselected { + private GLShaderProgram program; + + public int getVertexCount() { + return VERTEX_COUNT; + } + + private static final String SHADERS_ROOT = Constants.SHADERS_ROOT + "edge"; + + private static final String SHADERS_EDGE_LINE_SOURCE_VS = "edge-line-undirected_with_selection_unselected"; + private static final String SHADERS_EDGE_LINE_SOURCE_FS = "edge-line-undirected"; + + public void initProgram(GL3ES3 gl) { + program = new GLShaderProgram(SHADERS_ROOT, SHADERS_EDGE_LINE_SOURCE_VS, + SHADERS_EDGE_LINE_SOURCE_FS) + .addUniformName(UNIFORM_NAME_MODEL_VIEW_PROJECTION) + .addUniformName(UNIFORM_NAME_BACKGROUND_COLOR) + .addUniformName(UNIFORM_NAME_COLOR_LIGHTEN_FACTOR) + .addUniformName(UNIFORM_NAME_EDGE_SCALE_MIN) + .addUniformName(UNIFORM_NAME_EDGE_SCALE_MAX) + .addUniformName(UNIFORM_NAME_MIN_WEIGHT) + .addUniformName(UNIFORM_NAME_NODE_SCALE) + .addUniformName(UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR) + .addUniformName(UNIFORM_NAME_GLOBAL_TIME) + .addUniformName(UNIFORM_NAME_SELECTION_TIME) + .addAttribLocation(ATTRIB_NAME_VERT, SHADER_VERT_LOCATION) + .addAttribLocation(ATTRIB_NAME_POSITION, SHADER_POSITION_LOCATION) + .addAttribLocation(ATTRIB_NAME_POSITION_TARGET, SHADER_POSITION_TARGET_LOCATION) + .addAttribLocation(ATTRIB_NAME_SIZE, SHADER_SIZE_LOCATION) + .addAttribLocation(ATTRIB_NAME_COLOR, SHADER_COLOR_LOCATION) + .addAttribLocation(ATTRIB_NAME_SOURCE_SIZE, SHADER_SOURCE_SIZE_LOCATION) + .addAttribLocation(ATTRIB_NAME_TARGET_SIZE, SHADER_TARGET_SIZE_LOCATION) + .init(gl); + } + + public void useProgram(GL3ES3 gl, float[] mvpFloats, float edgeScale, float minWeight, + float maxWeight, float edgeRescaleMin, float edgeRescaleMax, + float[] backgroundColorFloats, + float colorLightenFactor, float nodeScale, float globalTime, + float selectionTime) { + program.use(gl); + prepareProgramData(gl, mvpFloats, edgeScale, minWeight, maxWeight, edgeRescaleMin, + edgeRescaleMax, backgroundColorFloats, + colorLightenFactor, nodeScale, globalTime, selectionTime); + } + + private void prepareProgramData(GL3ES3 gl, float[] mvpFloats, float scale, float minWeight, + float maxWeight, float edgeRescaleMin, float edgeRescaleMax, + float[] backgroundColorFloats, + float colorLightenFactor, float nodeScale, float globalTime, + float selectionTime) { + gl.glUniformMatrix4fv(program.getUniformLocation(UNIFORM_NAME_MODEL_VIEW_PROJECTION), 1, + false, mvpFloats, 0); + gl.glUniform4fv(program.getUniformLocation(UNIFORM_NAME_BACKGROUND_COLOR), 1, + backgroundColorFloats, 0); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_COLOR_LIGHTEN_FACTOR), + colorLightenFactor); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_NODE_SCALE), nodeScale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_GLOBAL_TIME), globalTime); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_SELECTION_TIME), selectionTime); + if (NumberUtils.equalsEpsilon(minWeight, maxWeight, 1e-3f)) { + // All weights equal: rescaling is vacuous, fall back to raw weight Γ— edgeScale + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MIN), scale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MAX), scale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_MIN_WEIGHT), minWeight); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR), + 1); + } else { + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MIN), + edgeRescaleMin * scale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_EDGE_SCALE_MAX), + edgeRescaleMax * scale); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_MIN_WEIGHT), minWeight); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR), + maxWeight - minWeight); + } + } + + public void destroy(GL3ES3 gl) { + if (program != null) { + program.destroy(gl); + program = null; + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/mesh/EdgeLineMeshGenerator.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/mesh/EdgeLineMeshGenerator.java new file mode 100644 index 0000000000..95f50e8992 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/mesh/EdgeLineMeshGenerator.java @@ -0,0 +1,47 @@ +package org.gephi.viz.engine.jogl.models.mesh; + + +import org.gephi.viz.engine.jogl.util.Mesh; + +public class EdgeLineMeshGenerator { + public static Mesh undirectedMeshGenerator() { + final Mesh mesh = new Mesh(); + //lineEnd, sideVector + mesh.vertexData = new float[] { + //Triangle 1 + 0, -1,// bottom left corner + 1, -1,// top left corner + 0, 1,// bottom right corner + //Triangle 2 + 0, 1,// bottom right corner + 1, -1,// top left corner + 1, 1// top right corner + }; + mesh.vertexComponentSize = 2; + mesh.vertexCount = 6; + return mesh; + } + + public static Mesh directedMeshGenerator() { + final Mesh mesh = new Mesh(); + //lineEnd, sideVector + mesh.vertexData = new float[] { + //First 6 are the edge line as a rectangle: + //Triangle 1 + 0, 1, 0,// bottom right corner + 0, -1, 0,// bottom left corner + 1, -1, -1,// top left corner + //Triangle 2 + 1, -1, -1,// top left corner + 1, 1, -1,// top right corner + 0, 1, 0,// bottom right corner + //Last 3 are the arrow tip triangle: + 1, 0, 0,//arrow tip + 1, -2, -1,// arrow bottom left vertex + 1, 2, -1// arrow bottom right vertex + }; + mesh.vertexComponentSize = 3; + mesh.vertexCount = 9; + return mesh; + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/mesh/NodeDiskVertexMeshGenerator.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/mesh/NodeDiskVertexMeshGenerator.java new file mode 100644 index 0000000000..b4c7c3a07f --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/mesh/NodeDiskVertexMeshGenerator.java @@ -0,0 +1,45 @@ +package org.gephi.viz.engine.jogl.models.mesh; + +import org.gephi.viz.engine.jogl.util.Mesh; + +public class NodeDiskVertexMeshGenerator { + + public static Mesh generateFilledCircle(int triangleAmount) { + final double twicePi = 2.0 * Math.PI; + + final Mesh mesh = new Mesh(); + mesh.vertexCount = triangleAmount * 3; + mesh.vertexComponentSize = 2; + + final int circleFloatsCount = mesh.vertexCount * mesh.vertexComponentSize; + mesh.vertexData = new float[circleFloatsCount]; + + final int triangleComponentSize = 3 * mesh.vertexComponentSize; + + //Circle: + for (int i = 0; i < triangleAmount; i++) { + double current_radian = i * twicePi / triangleAmount; + double next_radian = (i + 1) * twicePi / triangleAmount; + int index_offset = triangleComponentSize * i; + //Center + mesh.vertexData[index_offset] = 0;//X + mesh.vertexData[index_offset + 1] = 0;//Y + + //Triangle start: + mesh.vertexData[index_offset + 2] = (float) Math.cos(current_radian);//X + mesh.vertexData[index_offset + 3] = (float) Math.sin(current_radian);//Y + + //Triangle end: + if (i == triangleAmount - 1) { + //Last point + mesh.vertexData[index_offset + 4] = 1;//X + mesh.vertexData[index_offset + 5] = 0;//Y + } else { + mesh.vertexData[index_offset + 4] = (float) Math.cos(next_radian);//X + mesh.vertexData[index_offset + 5] = (float) Math.sin(next_radian);//Y + } + } + + return mesh; + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/nodedisk/CommonNodeDiskModel.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/nodedisk/CommonNodeDiskModel.java new file mode 100644 index 0000000000..b90649d2dc --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/nodedisk/CommonNodeDiskModel.java @@ -0,0 +1,17 @@ +package org.gephi.viz.engine.jogl.models.nodedisk; + +import org.gephi.viz.engine.util.gl.Constants; + +public final class CommonNodeDiskModel { + public static final String SHADERS_ROOT = Constants.SHADERS_ROOT + "node"; + + public static final int VERTEX_FLOATS = 2; + public static final int POSITION_FLOATS = 2; + public static final int COLOR_FLOATS = 1; + public static final int SIZE_FLOATS = 1; + + public static final int TOTAL_ATTRIBUTES_FLOATS + = POSITION_FLOATS + + COLOR_FLOATS + + SIZE_FLOATS; +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/nodedisk/NodeDiskModelNoSelection.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/nodedisk/NodeDiskModelNoSelection.java new file mode 100644 index 0000000000..07d946e2f2 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/nodedisk/NodeDiskModelNoSelection.java @@ -0,0 +1,58 @@ +package org.gephi.viz.engine.jogl.models.nodedisk; + +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_COLOR; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_POSITION; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_VERT; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_COLOR_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_POSITION_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_VERT_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_BORDER_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_DARKEN_FACTOR; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_MODEL_VIEW_PROJECTION; + +import com.jogamp.opengl.GL3ES3; +import org.gephi.viz.engine.jogl.util.gl.GLShaderProgram; +import org.gephi.viz.engine.util.gl.Constants; + +/** + * @author Eduardo Ramos + */ +public class NodeDiskModelNoSelection { + private GLShaderProgram program; + + private static final String SHADERS_ROOT = Constants.SHADERS_ROOT + "node"; + + private static final String SHADERS_NODE_CIRCLE_SOURCE_VS = "node"; + private static final String SHADERS_NODE_CIRCLE_SOURCE_FS = "node"; + + public void initGLPrograms(GL3ES3 gl) { + program = new GLShaderProgram(SHADERS_ROOT, SHADERS_NODE_CIRCLE_SOURCE_VS, SHADERS_NODE_CIRCLE_SOURCE_FS) + .addUniformName(UNIFORM_NAME_MODEL_VIEW_PROJECTION) + .addUniformName(UNIFORM_NAME_BORDER_SIZE) + .addUniformName(UNIFORM_NAME_DARKEN_FACTOR) + .addAttribLocation(ATTRIB_NAME_VERT, SHADER_VERT_LOCATION) + .addAttribLocation(ATTRIB_NAME_POSITION, SHADER_POSITION_LOCATION) + .addAttribLocation(ATTRIB_NAME_COLOR, SHADER_COLOR_LOCATION) + .addAttribLocation(ATTRIB_NAME_SIZE, SHADER_SIZE_LOCATION) + .init(gl); + } + + public void useProgram(GL3ES3 gl, float[] mvpFloats, float nodeBorderColorFactor) { + //Circle: + program.use(gl); + gl.glUniformMatrix4fv(program.getUniformLocation(UNIFORM_NAME_MODEL_VIEW_PROJECTION), 1, false, mvpFloats, 0); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_BORDER_SIZE), + Constants.getNodeBorderSize()); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_DARKEN_FACTOR), + nodeBorderColorFactor); + } + + public void destroy(GL3ES3 gl) { + if (program != null) { + program.destroy(gl); + program = null; + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/nodedisk/NodeDiskModelSelectionSelected.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/nodedisk/NodeDiskModelSelectionSelected.java new file mode 100644 index 0000000000..26e9bc3955 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/nodedisk/NodeDiskModelSelectionSelected.java @@ -0,0 +1,75 @@ +package org.gephi.viz.engine.jogl.models.nodedisk; + +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_COLOR; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_POSITION; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_VERT; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_COLOR_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_POSITION_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_VERT_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_BORDER_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_DARKEN_FACTOR; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_GLOBAL_TIME; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_MODEL_VIEW_PROJECTION; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_SELECTION_TIME; + +import com.jogamp.opengl.GL3ES3; +import org.gephi.viz.engine.jogl.util.gl.GLShaderProgram; +import org.gephi.viz.engine.util.gl.Constants; + +/** + * @author Eduardo Ramos + */ +public class NodeDiskModelSelectionSelected { + + private GLShaderProgram program; + + private static final String SHADERS_ROOT = Constants.SHADERS_ROOT + "node"; + + private static final String SHADERS_NODE_CIRCLE_SOURCE_VS = "node_with_selection_selected"; + private static final String SHADERS_NODE_CIRCLE_SOURCE_FS = "node"; + + public void initGLPrograms(GL3ES3 gl) { + program = + new GLShaderProgram(SHADERS_ROOT, SHADERS_NODE_CIRCLE_SOURCE_VS, + SHADERS_NODE_CIRCLE_SOURCE_FS) + .addUniformName(UNIFORM_NAME_MODEL_VIEW_PROJECTION) + .addUniformName(UNIFORM_NAME_GLOBAL_TIME) + .addUniformName(UNIFORM_NAME_SELECTION_TIME) + .addUniformName(UNIFORM_NAME_BORDER_SIZE) + .addUniformName(UNIFORM_NAME_DARKEN_FACTOR) + .addAttribLocation(ATTRIB_NAME_VERT, SHADER_VERT_LOCATION) + .addAttribLocation(ATTRIB_NAME_POSITION, SHADER_POSITION_LOCATION) + .addAttribLocation(ATTRIB_NAME_COLOR, SHADER_COLOR_LOCATION) + .addAttribLocation(ATTRIB_NAME_SIZE, SHADER_SIZE_LOCATION) + .init(gl); + + + } + + public void useProgram(GL3ES3 gl, float[] mvpFloats, + float globalTime, float selectedTime, float nodeBorderColorFactor) { + //Circle: + program.use(gl); + + gl.glUniformMatrix4fv(program.getUniformLocation(UNIFORM_NAME_MODEL_VIEW_PROJECTION), 1, + false, mvpFloats, 0); + + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_GLOBAL_TIME), globalTime); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_SELECTION_TIME), selectedTime); + + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_BORDER_SIZE), + Constants.getNodeBorderSize()); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_DARKEN_FACTOR), + nodeBorderColorFactor); + } + + + public void destroy(GL3ES3 gl) { + if (program != null) { + program.destroy(gl); + program = null; + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/nodedisk/NodeDiskModelSelectionUnselected.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/nodedisk/NodeDiskModelSelectionUnselected.java new file mode 100644 index 0000000000..252a9bebb4 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/models/nodedisk/NodeDiskModelSelectionUnselected.java @@ -0,0 +1,82 @@ +package org.gephi.viz.engine.jogl.models.nodedisk; + +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_COLOR; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_POSITION; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_VERT; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_COLOR_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_POSITION_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_VERT_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_BACKGROUND_COLOR; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_BORDER_SIZE; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_COLOR_LIGHTEN_FACTOR; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_DARKEN_FACTOR; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_GLOBAL_TIME; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_MODEL_VIEW_PROJECTION; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_SELECTION_TIME; + +import com.jogamp.opengl.GL3ES3; +import org.gephi.viz.engine.jogl.util.gl.GLShaderProgram; +import org.gephi.viz.engine.util.gl.Constants; + +/** + * @author Eduardo Ramos + */ +public class NodeDiskModelSelectionUnselected { + + private GLShaderProgram program; + + private static final String SHADERS_ROOT = Constants.SHADERS_ROOT + "node"; + + private static final String SHADERS_NODE_CIRCLE_SOURCE_VS = "node_with_selection_unselected"; + private static final String SHADERS_NODE_CIRCLE_SOURCE_FS = "node_with_selection_unselected"; + + public void initGLPrograms(GL3ES3 gl) { + program = new GLShaderProgram(SHADERS_ROOT, SHADERS_NODE_CIRCLE_SOURCE_VS, + SHADERS_NODE_CIRCLE_SOURCE_FS) + .addUniformName(UNIFORM_NAME_MODEL_VIEW_PROJECTION) + .addUniformName(UNIFORM_NAME_BACKGROUND_COLOR) + .addUniformName(UNIFORM_NAME_COLOR_LIGHTEN_FACTOR) + .addUniformName(UNIFORM_NAME_GLOBAL_TIME) + .addUniformName(UNIFORM_NAME_SELECTION_TIME) + .addUniformName(UNIFORM_NAME_BORDER_SIZE) + .addUniformName(UNIFORM_NAME_DARKEN_FACTOR) + .addAttribLocation(ATTRIB_NAME_VERT, SHADER_VERT_LOCATION) + .addAttribLocation(ATTRIB_NAME_POSITION, SHADER_POSITION_LOCATION) + .addAttribLocation(ATTRIB_NAME_COLOR, SHADER_COLOR_LOCATION) + .addAttribLocation(ATTRIB_NAME_SIZE, SHADER_SIZE_LOCATION) + .init(gl); + } + + public void useProgram(GL3ES3 gl, float[] mvpFloats, + float[] backgroundColorFloats, float colorLightenFactor, + float globalTime, float selectedTime, float nodeBorderColorFactor) { + //Circle: + program.use(gl); + + gl.glUniformMatrix4fv(program.getUniformLocation(UNIFORM_NAME_MODEL_VIEW_PROJECTION), 1, + false, mvpFloats, 0); + + gl.glUniform4fv(program.getUniformLocation(UNIFORM_NAME_BACKGROUND_COLOR), 1, + backgroundColorFloats, 0); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_COLOR_LIGHTEN_FACTOR), + colorLightenFactor); + + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_GLOBAL_TIME), globalTime); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_SELECTION_TIME), selectedTime); + + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_BORDER_SIZE), + Constants.getNodeBorderSize()); + gl.glUniform1f(program.getUniformLocation(UNIFORM_NAME_DARKEN_FACTOR), + nodeBorderColorFactor); + } + + + public void destroy(GL3ES3 gl) { + if (program != null) { + program.destroy(gl); + program = null; + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/DefaultJOGLEventListener.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/DefaultJOGLEventListener.java new file mode 100644 index 0000000000..80c363351a --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/DefaultJOGLEventListener.java @@ -0,0 +1,328 @@ +package org.gephi.viz.engine.jogl.pipeline; + +import com.jogamp.newt.event.KeyEvent; +import com.jogamp.newt.event.MouseEvent; +import com.jogamp.newt.event.NEWTEvent; +import java.util.ArrayList; +import java.util.List; +import org.gephi.graph.api.Rect2D; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.VizEngineModel; +import org.gephi.viz.engine.jogl.JOGLRenderingTarget; +import org.gephi.viz.engine.spi.InputListener; +import org.gephi.viz.engine.status.GraphSelection; +import org.gephi.viz.engine.util.actions.InputActionsProcessor; +import org.joml.Vector2f; + +/** + * + * @author Eduardo Ramos + */ +public class DefaultJOGLEventListener implements InputListener { + + private final VizEngine engine; + private final InputActionsProcessor inputActionsProcessor; + + private static final short MOUSE_LEFT_BUTTON = MouseEvent.BUTTON1; + private static final short MOUSE_WHEEL_BUTTON = MouseEvent.BUTTON2; + private static final short MOUSE_RIGHT_BUTTON = MouseEvent.BUTTON3; + private boolean mouseRightButtonPressed = false; + private boolean mouseLeftButtonPressed = false; + private MouseEvent lastMovedPosition = null; + private VizEngineModel model; + + public DefaultJOGLEventListener(VizEngine engine) { + this.engine = engine; + this.inputActionsProcessor = new InputActionsProcessor(engine); + } + + @Override + public void frameStart(VizEngineModel model) { + lastMovedPosition = null; + this.model = model; + } + + @Override + public void frameEnd(VizEngineModel model) { + if (lastMovedPosition != null) { + //TODO: move to independent selection input listener + final Vector2f worldCoords = + engine.screenCoordinatesToWorldCoordinates(lastMovedPosition.getX(), lastMovedPosition.getY()); + + if (model.getGraphSelection().getMode() == GraphSelection.GraphSelectionMode.SINGLE_NODE_SELECTION) { + inputActionsProcessor.selectNodesAndEdgesUnderPosition(model, worldCoords); + } else if ( + model.getGraphSelection().getMode() == GraphSelection.GraphSelectionMode.SIMPLE_MOUSE_SELECTION || + model.getGraphSelection().getMode() == GraphSelection.GraphSelectionMode.MULTI_NODE_SELECTION) { + float diameter = model.getGraphSelection().getMouseSelectionEffectiveDiameter(); + + if (diameter <= 1) { + // Diameter is disabled + inputActionsProcessor.selectNodesAndEdgesUnderPosition(model, worldCoords); + } else { + inputActionsProcessor.selectNodesWithinRadius(model, worldCoords.x, worldCoords.y, diameter); + } + } + } + this.model = null; + } + + @Override + public List processEvents(List events) { + // Compress consecutive MOUSE_MOVED events - keep only the last one + List compressed = compressMouseMoveEvents(events); + + // Process compressed events and return unconsumed ones + List remaining = new ArrayList<>(); + for (NEWTEvent event : compressed) { + boolean consumed = processEvent(event); + if (!consumed) { + remaining.add(event); + } + } + return remaining; + } + + private List compressMouseMoveEvents(List events) { + if (events.isEmpty()) { + return events; + } + + List compressed = new ArrayList<>(); + NEWTEvent lastMouseMove = null; + + for (NEWTEvent event : events) { + if (event instanceof MouseEvent && + event.getEventType() == MouseEvent.EVENT_MOUSE_MOVED) { + // This is a MOUSE_MOVED event, hold onto it + lastMouseMove = event; + } else { + // Not a MOUSE_MOVED event + // First, add any pending lastMouseMove + if (lastMouseMove != null) { + compressed.add(lastMouseMove); + lastMouseMove = null; + } + // Then add this event + compressed.add(event); + } + } + + // Don't forget the last MOUSE_MOVED event if there was one + if (lastMouseMove != null) { + compressed.add(lastMouseMove); + } + + return compressed; + } + + private boolean processEvent(NEWTEvent event) { + if (event instanceof KeyEvent) { + return false; + } else if (event instanceof MouseEvent mouseEvent) { + switch (event.getEventType()) { + case MouseEvent.EVENT_MOUSE_CLICKED: + return this.mouseClicked(mouseEvent); + case MouseEvent.EVENT_MOUSE_DRAGGED: + return this.mouseDragged(mouseEvent); + case MouseEvent.EVENT_MOUSE_MOVED: + return this.mouseMoved(mouseEvent); + case MouseEvent.EVENT_MOUSE_PRESSED: + return this.mousePressed(mouseEvent); + case MouseEvent.EVENT_MOUSE_RELEASED: + return this.mouseReleased(mouseEvent); + case MouseEvent.EVENT_MOUSE_WHEEL_MOVED: + return this.mouseWheelMoved(mouseEvent); + case MouseEvent.EVENT_MOUSE_ENTERED: + case MouseEvent.EVENT_MOUSE_EXITED: + default: + return false; + } + } + + return false; + } + + public boolean mouseClicked(MouseEvent e) { + boolean leftClick = e.getClickCount() == 1 && e.getButton() == MOUSE_LEFT_BUTTON; + boolean doubleLeftClick = e.getClickCount() == 2 && e.getButton() == MOUSE_LEFT_BUTTON; + boolean doubleRightClick = e.getClickCount() == 2 && e.getButton() == MOUSE_RIGHT_BUTTON; + boolean wheelClick = e.getButton() == MOUSE_WHEEL_BUTTON; + + final int x = e.getX(); + final int y = e.getY(); + + if (wheelClick) { + inputActionsProcessor.processCenterOnGraphEvent(); + return true; + } else if (doubleLeftClick) { + //Zoom in: + inputActionsProcessor.processZoomEvent(10, x, y); + return true; + } else if (doubleRightClick) { + //Zoom out: + inputActionsProcessor.processZoomEvent(-10, x, y); + return true; + } else { + if (model.getGraphSelection().getMode() == GraphSelection.GraphSelectionMode.SIMPLE_MOUSE_SELECTION && + leftClick) { + //TODO: move to independent selection input listener + return true; + } else if (model.getGraphSelection().getMode() == GraphSelection.GraphSelectionMode.SINGLE_NODE_SELECTION && + leftClick) { + return true; + } else if (model.getGraphSelection().getMode() == GraphSelection.GraphSelectionMode.MULTI_NODE_SELECTION && + leftClick) { + return true; + } else if (model.getGraphSelection().getMode() == GraphSelection.GraphSelectionMode.RECTANGLE_SELECTION) { + inputActionsProcessor.clearSelection(model); + return true; + } + } + + return false; + } + + public boolean mousePressed(MouseEvent e) { + if (e.getButton() == MOUSE_LEFT_BUTTON) { + mouseLeftButtonPressed = true; + + if (model.getGraphSelection().getMode() == GraphSelection.GraphSelectionMode.RECTANGLE_SELECTION) { + inputActionsProcessor.clearSelection(model); + model.getGraphSelection() + .startRectangleSelection(engine.screenCoordinatesToWorldCoordinates(e.getX(), e.getY())); + return true; + } + } + + if (e.getButton() == MOUSE_RIGHT_BUTTON) { + mouseRightButtonPressed = true; + } + + lastX = e.getX(); + lastY = e.getY(); + + return false; + } + + public boolean mouseReleased(MouseEvent e) { + if (e.getButton() == MOUSE_LEFT_BUTTON) { + mouseLeftButtonPressed = false; + } + + if (e.getButton() == MOUSE_RIGHT_BUTTON) { + mouseRightButtonPressed = false; + } + + if (e.getButton() == MOUSE_LEFT_BUTTON && + model.getGraphSelection().getMode() == GraphSelection.GraphSelectionMode.RECTANGLE_SELECTION) { + model.getGraphSelection() + .stopRectangleSelection(engine.screenCoordinatesToWorldCoordinates(e.getX(), e.getY())); + } + + return false; + } + + public boolean mouseMoved(MouseEvent e) { + lastMovedPosition = e; + if ((model.getGraphSelection().getMode() == GraphSelection.GraphSelectionMode.SIMPLE_MOUSE_SELECTION || + model.getGraphSelection().getMode() == GraphSelection.GraphSelectionMode.MULTI_NODE_SELECTION) && + model.getGraphSelection().getMouseSelectionDiameter() > 1f) { + model.getGraphSelection() + .updateMousePosition(engine.screenCoordinatesToWorldCoordinates(e.getX(), e.getY())); + } + return true; + } + + public boolean mouseDragged(MouseEvent e) { + try { + if (mouseLeftButtonPressed && mouseRightButtonPressed) { + //Zoom in/on the screen center with both buttons pressed and vertical movement: + double zoomQuantity = (lastY - e.getY()) / 7f;//Divide by some number so zoom is not too fast + inputActionsProcessor.processZoomEvent(zoomQuantity, engine.getWidth() / 2, engine.getHeight() / 2); + return true; + } else { + if (model.getGraphSelection().getMode() == GraphSelection.GraphSelectionMode.MULTI_NODE_SELECTION && + model.getGraphSelection().getMouseSelectionDiameter() > 1f) { + model.getGraphSelection() + .updateMousePosition(engine.screenCoordinatesToWorldCoordinates(e.getX(), e.getY())); + } else if ( + model.getGraphSelection().getMode() != GraphSelection.GraphSelectionMode.RECTANGLE_SELECTION && + (mouseLeftButtonPressed || mouseRightButtonPressed)) { + inputActionsProcessor.processCameraMoveEvent(e.getX() - lastX, e.getY() - lastY); + return true; + } else if ( + model.getGraphSelection().getMode() == GraphSelection.GraphSelectionMode.RECTANGLE_SELECTION && + mouseLeftButtonPressed) { + model.getGraphSelection().updateRectangleSelection( + engine.screenCoordinatesToWorldCoordinates(e.getX(), e.getY())); + + final Vector2f initialPosition = model.getGraphSelection().getRectangleInitialPosition(); + final Vector2f currentPosition = model.getGraphSelection().getRectangleCurrentPosition(); + + if (initialPosition != null && currentPosition != null) { + final Rect2D rectangle = new Rect2D( + Math.min(initialPosition.x, currentPosition.x), + Math.min(initialPosition.y, currentPosition.y), + Math.max(initialPosition.x, currentPosition.x), + Math.max(initialPosition.y, currentPosition.y) + ); + inputActionsProcessor.selectNodesAndEdgesOnRectangle(model, rectangle); + } + return true; + } else if ( + model.getGraphSelection().getMode() == GraphSelection.GraphSelectionMode.RECTANGLE_SELECTION && + mouseRightButtonPressed) { + inputActionsProcessor.processCameraMoveEvent(e.getX() - lastX, e.getY() - lastY); + return true; + } + } + } finally { + lastX = e.getX(); + lastY = e.getY(); + } + + return false; + } + + public boolean mouseWheelMoved(MouseEvent e) { + float[] rotation = e.getRotation(); + float verticalRotation = rotation[1] * e.getRotationScale(); + inputActionsProcessor.processZoomEvent(verticalRotation, e.getX(), e.getY()); + + return true; + } + + private int lastX; + private int lastY; + + @Override + public int getOrder() { + return 0; + } + + @Override + public String getCategory() { + return "default"; + } + + @Override + public int getPreferenceInCategory() { + return 0; + } + + @Override + public String getName() { + return "Default"; + } + + @Override + public boolean isAvailable(JOGLRenderingTarget target) { + return true; + } + + @Override + public void init(JOGLRenderingTarget target) { + //NOOP + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/arrays/ArrayDrawEdgeData.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/arrays/ArrayDrawEdgeData.java new file mode 100644 index 0000000000..0cb3c44dd6 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/arrays/ArrayDrawEdgeData.java @@ -0,0 +1,354 @@ +package org.gephi.viz.engine.jogl.pipeline.arrays; + +import static com.jogamp.opengl.GL.GL_FLOAT; +import static org.gephi.viz.engine.pipeline.RenderingLayer.BACK1; + +import com.jogamp.opengl.GL; +import com.jogamp.opengl.GL3ES3; +import com.jogamp.opengl.util.GLBuffers; +import java.nio.FloatBuffer; +import org.gephi.graph.api.Edge; +import org.gephi.viz.engine.jogl.models.edgeline.directed.CommonEdgeLineDirected; +import org.gephi.viz.engine.jogl.models.edgeline.undirected.CommonEdgeLineUndirected; +import org.gephi.viz.engine.jogl.pipeline.common.AbstractEdgeData; +import org.gephi.viz.engine.jogl.pipeline.common.EdgeWorldData; +import org.gephi.viz.engine.jogl.util.ManagedDirectBuffer; +import org.gephi.viz.engine.jogl.util.gl.GLBufferMutable; +import org.gephi.viz.engine.jogl.util.gl.GLFunctions; +import org.gephi.viz.engine.pipeline.RenderingLayer; +import org.gephi.viz.engine.status.GraphSelection; +import org.gephi.viz.engine.util.ArrayUtils; +import org.gephi.viz.engine.util.structure.EdgesCallback; +import org.gephi.viz.engine.util.structure.NodesCallback; + +/** + * + * @author Eduardo Ramos + */ +public class ArrayDrawEdgeData extends AbstractEdgeData { + + private final int[] bufferName = new int[6]; + + private static final int VERT_BUFFER_UNDIRECTED = 0; + private static final int VERT_BUFFER_DIRECTED = 1; + private static final int ATTRIBS_BUFFER_DIRECTED = 2; + private static final int ATTRIBS_BUFFER_UNDIRECTED = 3; + private static final int VERT_BUFFER_SELFLOOP = 4; + private static final int ATTRIBS_BUFFER_SELFLOOP = 5; + + private float[] attributesBuffer; + private float[] selfLoopAttributesBuffer; + + //For drawing in a loop: + private float[] attributesDrawBufferBatchOneCopyPerVertex; + private ManagedDirectBuffer attributesDrawBufferBatchOneCopyPerVertexManagedDirectBuffer; + + + public ArrayDrawEdgeData(final EdgesCallback edgesCallback, final NodesCallback nodesCallback) { + super(edgesCallback, nodesCallback, false, false); + } + + public void drawArrays(GL3ES3 gl, RenderingLayer layer, EdgeWorldData data, float[] mvpFloats) { + refreshTime(); + if (edgesCallback.hasSelfLoop()) { + drawSelfLoop(gl, data, layer, mvpFloats); + } + drawUndirected(gl, data, layer, mvpFloats); + drawDirected(gl, data, layer, mvpFloats); + + } + + private void drawSelfLoop(GL3ES3 gl, EdgeWorldData data, + RenderingLayer layer, float[] mvpFloats) { + final int instanceCount = setupShaderProgramForRenderingLayerSelfLoop(gl, layer, data, mvpFloats); + + final boolean renderingUnselectedEdges = layer == BACK1; + final int instancesOffset = + renderingUnselectedEdges ? 0 : selfLoopCounter.unselectedCountToDraw; + + final FloatBuffer batchUpdateBuffer = + attributesDrawBufferBatchOneCopyPerVertexManagedDirectBuffer.floatBuffer(); + + final int maxIndex = (instancesOffset + instanceCount); + for (int edgeBase = instancesOffset; edgeBase < maxIndex; edgeBase += BATCH_SELFLOOP_EDGES_SIZE) { + final int drawBatchCount = Math.min(maxIndex - edgeBase, BATCH_SELFLOOP_EDGES_SIZE); + + //Need to copy attributes as many times as vertex per model: + for (int edgeIndex = 0; edgeIndex < drawBatchCount; edgeIndex++) { + System.arraycopy( + selfLoopAttributesBuffer, (edgeBase + edgeIndex) * ATTRIBS_STRIDE_SELFLOOP, + attributesDrawBufferBatchOneCopyPerVertex, + edgeIndex * ATTRIBS_STRIDE_SELFLOOP * selfLoopMesh.vertexCount, + ATTRIBS_STRIDE_SELFLOOP + ); + + ArrayUtils.repeat( + attributesDrawBufferBatchOneCopyPerVertex, + edgeIndex * ATTRIBS_STRIDE_SELFLOOP * selfLoopMesh.vertexCount, + ATTRIBS_STRIDE_SELFLOOP, + selfLoopMesh.vertexCount + ); + } + + batchUpdateBuffer.clear(); + batchUpdateBuffer.put(attributesDrawBufferBatchOneCopyPerVertex, 0, + drawBatchCount * ATTRIBS_STRIDE_SELFLOOP * selfLoopMesh.vertexCount); + batchUpdateBuffer.flip(); + + attributesGLBufferSelfLoop.bind(gl); + attributesGLBufferSelfLoop.updateWithOrphaning(gl, batchUpdateBuffer); + attributesGLBufferSelfLoop.unbind(gl); + + GLFunctions.drawArraysSingleInstance(gl, 0, selfLoopMesh.vertexCount * drawBatchCount); + } + + GLFunctions.stopUsingProgram(gl); + unsetupSelfLoopVertexArrayAttributes(gl); + } + + private void drawUndirected(GL3ES3 gl, EdgeWorldData data, + RenderingLayer layer, float[] mvpFloats) { + final int instanceCount = setupShaderProgramForRenderingLayerUndirected(gl, layer, data, mvpFloats); + + final boolean renderingUnselectedEdges = layer == BACK1; + final int instancesOffset = renderingUnselectedEdges ? 0 : undirectedInstanceCounter.unselectedCountToDraw; + + final FloatBuffer batchUpdateBuffer = + attributesDrawBufferBatchOneCopyPerVertexManagedDirectBuffer.floatBuffer(); + + final int maxIndex = (instancesOffset + instanceCount); + for (int edgeBase = instancesOffset; edgeBase < maxIndex; edgeBase += BATCH_EDGES_SIZE) { + final int drawBatchCount = Math.min(maxIndex - edgeBase, BATCH_EDGES_SIZE); + + //Need to copy attributes as many times as vertex per model: + for (int edgeIndex = 0; edgeIndex < drawBatchCount; edgeIndex++) { + System.arraycopy( + attributesBuffer, (edgeBase + edgeIndex) * ATTRIBS_STRIDE, + attributesDrawBufferBatchOneCopyPerVertex, + edgeIndex * ATTRIBS_STRIDE * CommonEdgeLineUndirected.VERTEX_COUNT, + ATTRIBS_STRIDE + ); + + ArrayUtils.repeat( + attributesDrawBufferBatchOneCopyPerVertex, + edgeIndex * ATTRIBS_STRIDE * CommonEdgeLineUndirected.VERTEX_COUNT, + ATTRIBS_STRIDE, + CommonEdgeLineUndirected.VERTEX_COUNT + ); + } + + batchUpdateBuffer.clear(); + batchUpdateBuffer.put(attributesDrawBufferBatchOneCopyPerVertex, 0, + drawBatchCount * ATTRIBS_STRIDE * CommonEdgeLineUndirected.VERTEX_COUNT); + batchUpdateBuffer.flip(); + + attributesGLBufferUndirected.bind(gl); + attributesGLBufferUndirected.updateWithOrphaning(gl, batchUpdateBuffer); + attributesGLBufferUndirected.unbind(gl); + + GLFunctions.drawArraysSingleInstance(gl, 0, CommonEdgeLineUndirected.VERTEX_COUNT * drawBatchCount); + } + + GLFunctions.stopUsingProgram(gl); + unsetupUndirectedVertexArrayAttributes(gl); + } + + private void drawDirected(GL3ES3 gl, EdgeWorldData data, + RenderingLayer layer, float[] mvpFloats) { + final int instanceCount = setupShaderProgramForRenderingLayerDirected(gl, layer, data, mvpFloats); + + final boolean renderingUnselectedEdges = layer == BACK1; + final int instancesOffset; + if (renderingUnselectedEdges) { + instancesOffset = undirectedInstanceCounter.totalToDraw(); + } else { + instancesOffset = undirectedInstanceCounter.totalToDraw() + directedInstanceCounter.unselectedCountToDraw; + } + + final FloatBuffer batchUpdateBuffer = + attributesDrawBufferBatchOneCopyPerVertexManagedDirectBuffer.floatBuffer(); + + final int maxIndex = (instancesOffset + instanceCount); + for (int edgeBase = instancesOffset; edgeBase < maxIndex; edgeBase += BATCH_EDGES_SIZE) { + final int drawBatchCount = Math.min(maxIndex - edgeBase, BATCH_EDGES_SIZE); + + //Need to copy attributes as many times as vertex per model: + for (int edgeIndex = 0; edgeIndex < drawBatchCount; edgeIndex++) { + System.arraycopy( + attributesBuffer, (edgeBase + edgeIndex) * ATTRIBS_STRIDE, + attributesDrawBufferBatchOneCopyPerVertex, + edgeIndex * ATTRIBS_STRIDE * CommonEdgeLineDirected.VERTEX_COUNT, + ATTRIBS_STRIDE + ); + + ArrayUtils.repeat( + attributesDrawBufferBatchOneCopyPerVertex, + edgeIndex * ATTRIBS_STRIDE * CommonEdgeLineDirected.VERTEX_COUNT, + ATTRIBS_STRIDE, + CommonEdgeLineDirected.VERTEX_COUNT + ); + } + + batchUpdateBuffer.clear(); + batchUpdateBuffer.put(attributesDrawBufferBatchOneCopyPerVertex, 0, + drawBatchCount * ATTRIBS_STRIDE * CommonEdgeLineDirected.VERTEX_COUNT); + batchUpdateBuffer.flip(); + + attributesGLBufferDirected.bind(gl); + attributesGLBufferDirected.updateWithOrphaning(gl, batchUpdateBuffer); + attributesGLBufferDirected.unbind(gl); + + + GLFunctions.drawArraysSingleInstance(gl, 0, CommonEdgeLineDirected.VERTEX_COUNT * drawBatchCount); + } + + GLFunctions.stopUsingProgram(gl); + unsetupDirectedVertexArrayAttributes(gl); + } + + @Override + protected void initBuffers(GL gl) { + super.initBuffers(gl); + // Need to allocate enough space for both regular edges and self-loops + // Self-loops have more vertices (192 for 64-triangle circle) and different stride + final int regularEdgeBufferSize = ATTRIBS_STRIDE * VERTEX_COUNT_MAX * BATCH_EDGES_SIZE; + final int selfLoopBufferSize = ATTRIBS_STRIDE_SELFLOOP * selfLoopMesh.vertexCount * BATCH_SELFLOOP_EDGES_SIZE; + final int maxBufferSize = Math.max(regularEdgeBufferSize, selfLoopBufferSize); + + attributesDrawBufferBatchOneCopyPerVertex = new float[maxBufferSize]; + attributesDrawBufferBatchOneCopyPerVertexManagedDirectBuffer = + new ManagedDirectBuffer(GL_FLOAT, maxBufferSize); + + gl.glGenBuffers(bufferName.length, bufferName, 0); + + { + + float[] undirectedVertexDataArray = new float[undirectedEdgeMesh.vertexData.length * BATCH_EDGES_SIZE]; + System.arraycopy(undirectedEdgeMesh.vertexData, 0, undirectedVertexDataArray, 0, + undirectedEdgeMesh.vertexData.length); + ArrayUtils.repeat(undirectedVertexDataArray, 0, undirectedEdgeMesh.vertexData.length, BATCH_EDGES_SIZE); + + final FloatBuffer undirectedVertexData = GLBuffers.newDirectFloatBuffer(undirectedVertexDataArray); + + vertexGLBufferUndirected = + new GLBufferMutable(bufferName[VERT_BUFFER_UNDIRECTED], GLBufferMutable.GL_BUFFER_TYPE_ARRAY); + vertexGLBufferUndirected.bind(gl); + vertexGLBufferUndirected.init(gl, undirectedVertexData, GLBufferMutable.GL_BUFFER_USAGE_STATIC_DRAW); + vertexGLBufferUndirected.unbind(gl); + } + + { + + float[] directedVertexDataArray = new float[directedEdgeMesh.vertexData.length * BATCH_EDGES_SIZE]; + System.arraycopy(directedEdgeMesh.vertexData, 0, directedVertexDataArray, 0, + directedEdgeMesh.vertexData.length); + ArrayUtils.repeat(directedVertexDataArray, 0, directedEdgeMesh.vertexData.length, BATCH_EDGES_SIZE); + + final FloatBuffer directedVertexData = GLBuffers.newDirectFloatBuffer(directedVertexDataArray); + + vertexGLBufferDirected = + new GLBufferMutable(bufferName[VERT_BUFFER_DIRECTED], GLBufferMutable.GL_BUFFER_TYPE_ARRAY); + vertexGLBufferDirected.bind(gl); + vertexGLBufferDirected.init(gl, directedVertexData, GLBufferMutable.GL_BUFFER_USAGE_STATIC_DRAW); + vertexGLBufferDirected.unbind(gl); + } + + { + + float[] selfLoopVertexDataArray = new float[selfLoopMesh.vertexData.length * BATCH_SELFLOOP_EDGES_SIZE]; + System.arraycopy(selfLoopMesh.vertexData, 0, selfLoopVertexDataArray, 0, + selfLoopMesh.vertexData.length); + ArrayUtils.repeat(selfLoopVertexDataArray, 0, selfLoopMesh.vertexData.length, BATCH_SELFLOOP_EDGES_SIZE); + + final FloatBuffer selfLoopVertexData = GLBuffers.newDirectFloatBuffer(selfLoopVertexDataArray); + + vertexGLBufferSelfLoop = + new GLBufferMutable(bufferName[VERT_BUFFER_SELFLOOP], GLBufferMutable.GL_BUFFER_TYPE_ARRAY); + vertexGLBufferSelfLoop.bind(gl); + vertexGLBufferSelfLoop.init(gl, selfLoopVertexData, GLBufferMutable.GL_BUFFER_USAGE_STATIC_DRAW); + vertexGLBufferSelfLoop.unbind(gl); + } + + //Initialize for batch edges size: + attributesGLBufferDirected = + new GLBufferMutable(bufferName[ATTRIBS_BUFFER_DIRECTED], GLBufferMutable.GL_BUFFER_TYPE_ARRAY); + attributesGLBufferDirected.bind(gl); + attributesGLBufferDirected.init(gl, (long) VERTEX_COUNT_MAX * ATTRIBS_STRIDE * Float.BYTES * BATCH_EDGES_SIZE, + GLBufferMutable.GL_BUFFER_USAGE_DYNAMIC_DRAW); + attributesGLBufferDirected.unbind(gl); + + attributesGLBufferUndirected = + new GLBufferMutable(bufferName[ATTRIBS_BUFFER_UNDIRECTED], GLBufferMutable.GL_BUFFER_TYPE_ARRAY); + attributesGLBufferUndirected.bind(gl); + attributesGLBufferUndirected.init(gl, (long) VERTEX_COUNT_MAX * ATTRIBS_STRIDE * Float.BYTES * BATCH_EDGES_SIZE, + GLBufferMutable.GL_BUFFER_USAGE_DYNAMIC_DRAW); + attributesGLBufferUndirected.unbind(gl); + + attributesGLBufferSelfLoop = + new GLBufferMutable(bufferName[ATTRIBS_BUFFER_SELFLOOP], GLBufferMutable.GL_BUFFER_TYPE_ARRAY); + attributesGLBufferSelfLoop.bind(gl); + attributesGLBufferSelfLoop.init(gl, + (long) selfLoopMesh.vertexData.length * ATTRIBS_STRIDE_SELFLOOP * Float.BYTES * BATCH_SELFLOOP_EDGES_SIZE, + GLBufferMutable.GL_BUFFER_USAGE_DYNAMIC_DRAW); + attributesGLBufferSelfLoop.unbind(gl); + + attributesBuffer = new float[ATTRIBS_STRIDE * BATCH_EDGES_SIZE]; + selfLoopAttributesBuffer = new float[ATTRIBS_STRIDE_SELFLOOP * BATCH_SELFLOOP_EDGES_SIZE]; + } + + public void updateBuffers() { + undirectedInstanceCounter.promoteCountToDraw(); + directedInstanceCounter.promoteCountToDraw(); + selfLoopCounter.promoteCountToDraw(); + } + + @Override + protected void updateData(final GraphSelection selection) { + + int totalEdges = edgesCallback.getCount(); + final float[] attribs + = attributesBuffer + = ArrayUtils.ensureCapacityNoCopy(attributesBuffer, totalEdges * ATTRIBS_STRIDE); + + final Edge[] visibleEdgesArray = edgesCallback.getEdgesArray(); + final float[] edgeWeightsArray = edgesCallback.getEdgeWeightsArray(); + final int maxIndex = edgesCallback.getMaxIndex(); + final boolean directed = edgesCallback.isDirected(); + final boolean undirected = edgesCallback.isUndirected(); + final boolean hasSelfLoop = edgesCallback.hasSelfLoop(); + + if (hasSelfLoop) { + selfLoopAttributesBuffer = ArrayUtils.ensureCapacityNoCopy( + selfLoopAttributesBuffer, totalEdges * ATTRIBS_STRIDE_SELFLOOP); + updateSelfLoop(maxIndex, + visibleEdgesArray, + edgeWeightsArray, + selfLoopAttributesBuffer, + 0, + null); + } else { + selfLoopCounter.clearCount(); + } + + int attribsIndex = 0; + attribsIndex = updateUndirectedData( + directed, + maxIndex, visibleEdgesArray, edgeWeightsArray, + attribs, attribsIndex + ); + updateDirectedData( + undirected, maxIndex, visibleEdgesArray, edgeWeightsArray, + attribs, attribsIndex + ); + } + + @Override + public void dispose(GL gl) { + super.dispose(gl); + attributesDrawBufferBatchOneCopyPerVertex = null; + attributesDrawBufferBatchOneCopyPerVertexManagedDirectBuffer.destroy(); + + attributesBuffer = null; + selfLoopAttributesBuffer = null; + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/arrays/ArrayDrawNodeData.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/arrays/ArrayDrawNodeData.java new file mode 100644 index 0000000000..c4959bcd58 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/arrays/ArrayDrawNodeData.java @@ -0,0 +1,121 @@ +package org.gephi.viz.engine.jogl.pipeline.arrays; + +import static org.gephi.viz.engine.util.gl.Constants.SHADER_COLOR_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_POSITION_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_SIZE_LOCATION; + +import com.jogamp.opengl.GL; +import com.jogamp.opengl.GL3ES3; +import java.nio.FloatBuffer; +import org.gephi.viz.engine.jogl.pipeline.common.AbstractNodeData; +import org.gephi.viz.engine.jogl.pipeline.common.NodeWorldData; +import org.gephi.viz.engine.jogl.util.gl.GLFunctions; +import org.gephi.viz.engine.pipeline.RenderingLayer; +import org.gephi.viz.engine.util.structure.NodesCallback; + +/** + * + * @author Eduardo Ramos + */ +public class ArrayDrawNodeData extends AbstractNodeData { + + private final int[] bufferName = new int[1]; + + private static final int VERT_BUFFER = 0; + + public ArrayDrawNodeData(final NodesCallback nodesCallback) { + super(nodesCallback, false, false); + } + + public void drawArrays(GL3ES3 gl, RenderingLayer layer, NodeWorldData data, + float[] mvpFloats) { + refreshTime(); + + drawArraysInternal(gl, layer, data, mvpFloats); + } + + public void drawArraysInternal(final GL3ES3 gl, + final RenderingLayer layer, + final NodeWorldData data, + final float[] mvpFloats) { + final int instanceCount = + setupShaderProgramForRenderingLayer(gl, layer, data, mvpFloats); + + if (instanceCount <= 0) { + GLFunctions.stopUsingProgram(gl); + unsetupVertexArrayAttributes(gl); + return; + } + + final boolean renderingUnselectedNodes = layer.getLevel() == 1; + final int instancesOffset = renderingUnselectedNodes ? 0 : instanceCounter.unselectedCountToDraw; + + + final float zoom = data.getZoom(); + final float[] attrs = new float[ATTRIBS_STRIDE]; + int index = instancesOffset * ATTRIBS_STRIDE; + + //We have to perform one draw call per instance because repeating the attributes without instancing per each vertex would use too much memory: + //TODO: Maybe we can batch a few nodes at once though + final FloatBuffer attribs = attributesBuffer.floatBuffer(); + + attribs.position(index); + for (int i = 0; i < instanceCount; i++) { + attribs.get(attrs); + + //Choose LOD: + final float size = attrs[3]; + final float observedSize = size * zoom; + + final int circleVertexCount; + final int firstVertex; + if (observedSize > OBSERVED_SIZE_LOD_THRESHOLD_64) { + circleVertexCount = circleMesh64.vertexCount; + firstVertex = firstVertex64; + } else if (observedSize > OBSERVED_SIZE_LOD_THRESHOLD_32) { + circleVertexCount = circleMesh32.vertexCount; + firstVertex = firstVertex32; + } else if (observedSize > OBSERVED_SIZE_LOD_THRESHOLD_16) { + circleVertexCount = circleMesh16.vertexCount; + firstVertex = firstVertex16; + } else { + circleVertexCount = circleMesh8.vertexCount; + firstVertex = firstVertex8; + } + + //Define instance attributes: + gl.glVertexAttrib2fv(SHADER_POSITION_LOCATION, attrs, 0); + + //No vertexAttribArray, we have to unpack rgba manually: + final int argb = Float.floatToRawIntBits(attrs[2]); + + final int a = ((argb >> 24) & 0xFF); + final int r = ((argb >> 16) & 0xFF); + final int g = ((argb >> 8) & 0xFF); + final int b = (argb & 0xFF); + + gl.glVertexAttrib4f(SHADER_COLOR_LOCATION, b, g, r, a); + + gl.glVertexAttrib1f(SHADER_SIZE_LOCATION, size); + + //Draw the instance: + GLFunctions.drawArraysSingleInstance(gl, firstVertex, circleVertexCount); + } + + GLFunctions.stopUsingProgram(gl); + unsetupVertexArrayAttributes(gl); + } + + public void updateBuffers() { + instanceCounter.promoteCountToDraw(); + } + + @Override + protected void initBuffers(final GL gl) { + super.initBuffers(gl); + + gl.glGenBuffers(bufferName.length, bufferName, 0); + + initCirclesGLVertexBuffer(gl, bufferName[VERT_BUFFER]); + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/arrays/renderers/EdgeRendererArrayDraw.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/arrays/renderers/EdgeRendererArrayDraw.java new file mode 100644 index 0000000000..9b7c39b316 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/arrays/renderers/EdgeRendererArrayDraw.java @@ -0,0 +1,57 @@ +package org.gephi.viz.engine.jogl.pipeline.arrays.renderers; + +import com.jogamp.newt.event.NEWTEvent; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.VizEngineModel; +import org.gephi.viz.engine.jogl.JOGLRenderingTarget; +import org.gephi.viz.engine.jogl.availability.ArrayDraw; +import org.gephi.viz.engine.jogl.pipeline.arrays.ArrayDrawEdgeData; +import org.gephi.viz.engine.jogl.pipeline.common.AbstractEdgeRenderer; +import org.gephi.viz.engine.jogl.pipeline.common.EdgeWorldData; +import org.gephi.viz.engine.pipeline.RenderingLayer; + +/** + * + * @author Eduardo Ramos + */ +public class EdgeRendererArrayDraw extends AbstractEdgeRenderer { + + private final VizEngine engine; + private final ArrayDrawEdgeData edgeData; + + public EdgeRendererArrayDraw(VizEngine engine, ArrayDrawEdgeData edgeData) { + this.engine = engine; + this.edgeData = edgeData; + } + + @Override + public void init(JOGLRenderingTarget target) { + //NOOP + } + + @Override + public EdgeWorldData worldUpdated(VizEngineModel model, JOGLRenderingTarget target, float[] mvpFloats) { + edgeData.updateBuffers(); + return edgeData.createWorldData(model, engine); + } + + @Override + public void render(EdgeWorldData data, JOGLRenderingTarget target, RenderingLayer layer, float[] mvpFloats) { + edgeData.drawArrays(target.getDrawable().getGL().getGL3ES3(), layer, data, mvpFloats); + } + + @Override + public int getPreferenceInCategory() { + return ArrayDraw.getPreferenceInCategory(); + } + + @Override + public String getName() { + return "Edges (Vertex Array)"; + } + + @Override + public boolean isAvailable(JOGLRenderingTarget target) { + return ArrayDraw.isAvailable(engine, target.getDrawable()); + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/arrays/renderers/NodeRendererArrayDraw.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/arrays/renderers/NodeRendererArrayDraw.java new file mode 100644 index 0000000000..27d8e6fdea --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/arrays/renderers/NodeRendererArrayDraw.java @@ -0,0 +1,58 @@ +package org.gephi.viz.engine.jogl.pipeline.arrays.renderers; + +import com.jogamp.newt.event.NEWTEvent; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.VizEngineModel; +import org.gephi.viz.engine.jogl.JOGLRenderingTarget; +import org.gephi.viz.engine.jogl.availability.ArrayDraw; +import org.gephi.viz.engine.jogl.pipeline.arrays.ArrayDrawNodeData; +import org.gephi.viz.engine.jogl.pipeline.common.AbstractNodeRenderer; +import org.gephi.viz.engine.jogl.pipeline.common.NodeWorldData; +import org.gephi.viz.engine.pipeline.RenderingLayer; + +/** + * + * @author Eduardo Ramos + */ +public class NodeRendererArrayDraw extends AbstractNodeRenderer { + + private final VizEngine engine; + private final ArrayDrawNodeData nodeData; + + public NodeRendererArrayDraw(VizEngine engine, ArrayDrawNodeData nodeData) { + this.engine = engine; + this.nodeData = nodeData; + } + + @Override + public void init(JOGLRenderingTarget target) { + //NOOP + } + + @Override + public NodeWorldData worldUpdated(VizEngineModel model, JOGLRenderingTarget target, float[] mvpFloats) { + nodeData.updateBuffers(); + return nodeData.createWorldData(model, engine); + } + + @Override + public void render(NodeWorldData data, JOGLRenderingTarget target, RenderingLayer layer, float[] mvpFloats) { + + nodeData.drawArrays(target.getDrawable().getGL().getGL3ES3(), layer, data, mvpFloats); + } + + @Override + public int getPreferenceInCategory() { + return ArrayDraw.getPreferenceInCategory(); + } + + @Override + public String getName() { + return "Nodes (Vertex Array)"; + } + + @Override + public boolean isAvailable(JOGLRenderingTarget target) { + return ArrayDraw.isAvailable(engine, target.getDrawable()); + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/arrays/renderers/RectangleSelectionArrayDraw.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/arrays/renderers/RectangleSelectionArrayDraw.java new file mode 100644 index 0000000000..7fce4115d4 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/arrays/renderers/RectangleSelectionArrayDraw.java @@ -0,0 +1,262 @@ +package org.gephi.viz.engine.jogl.pipeline.arrays.renderers; + +import static com.jogamp.opengl.GL.GL_BLEND; +import static com.jogamp.opengl.GL.GL_BLEND_DST_RGB; +import static com.jogamp.opengl.GL.GL_BLEND_SRC_RGB; +import static com.jogamp.opengl.GL.GL_FLOAT; +import static com.jogamp.opengl.GL.GL_ONE_MINUS_SRC_ALPHA; +import static com.jogamp.opengl.GL.GL_SRC_ALPHA; +import static com.jogamp.opengl.GL.GL_TRIANGLES; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_VERT; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_VERT_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_MODEL_VIEW_PROJECTION; + +import com.jogamp.newt.event.NEWTEvent; +import com.jogamp.opengl.GL3ES3; +import java.nio.FloatBuffer; +import java.util.EnumSet; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.VizEngineModel; +import org.gephi.viz.engine.jogl.JOGLRenderingTarget; +import org.gephi.viz.engine.jogl.pipeline.common.VoidWorldData; +import org.gephi.viz.engine.jogl.util.ManagedDirectBuffer; +import org.gephi.viz.engine.jogl.util.gl.GLBufferMutable; +import org.gephi.viz.engine.jogl.util.gl.GLShaderProgram; +import org.gephi.viz.engine.jogl.util.gl.GLVertexArrayObject; +import org.gephi.viz.engine.pipeline.PipelineCategory; +import org.gephi.viz.engine.pipeline.RenderingLayer; +import org.gephi.viz.engine.spi.Renderer; +import org.gephi.viz.engine.status.GraphSelection; +import org.gephi.viz.engine.util.gl.Constants; +import org.gephi.viz.engine.util.gl.OpenGLOptions; +import org.joml.Vector2f; + +public class RectangleSelectionArrayDraw implements Renderer { + private final VizEngine engine; + + private static final int VERT_BUFFER = 0; + + public static final int VERTEX_COUNT = 6; // 2 triangles + public static final int VERTEX_FLOATS = 2; + + private final int[] bufferName = new int[1]; + private ManagedDirectBuffer rectangleVertexDataBuffer; + private GLBufferMutable vertexGLBuffer; + private SelectionRectangleVAO vao; + + public RectangleSelectionArrayDraw(VizEngine engine) { + this.engine = engine; + } + + @Override + public String getCategory() { + return PipelineCategory.RECTANGLE_SELECTION; + } + + @Override + public int getPreferenceInCategory() { + return 0; + } + + @Override + public String getName() { + return "Rectangle Selection"; + } + + @Override + public void init(JOGLRenderingTarget target) { + final GL3ES3 gl = target.getDrawable().getGL().getGL3ES3(); + + shaderProgram = new GLShaderProgram(SHADERS_ROOT, "rectangleSelection", "rectangleSelection") + .addUniformName(UNIFORM_NAME_MODEL_VIEW_PROJECTION) + .addUniformName(UNIFORM_NAME_COLOR) + .addAttribLocation(ATTRIB_NAME_VERT, SHADER_VERT_LOCATION) + .init(gl); + + gl.glGenBuffers(bufferName.length, bufferName, 0); + + rectangleVertexDataBuffer = new ManagedDirectBuffer(GL_FLOAT, Float.BYTES * VERTEX_COUNT * VERTEX_FLOATS); + + vertexGLBuffer = new GLBufferMutable(bufferName[VERT_BUFFER], GLBufferMutable.GL_BUFFER_TYPE_ARRAY); + vertexGLBuffer.bind(gl); + vertexGLBuffer.init(gl, Float.BYTES * VERTEX_COUNT * VERTEX_FLOATS, + GLBufferMutable.GL_BUFFER_USAGE_DYNAMIC_DRAW); + vertexGLBuffer.unbind(gl); + + vao = new SelectionRectangleVAO( + engine.getOpenGLOptions() + ); + } + + @Override + public void dispose(JOGLRenderingTarget target) { + final GL3ES3 gl = target.getDrawable().getGL().getGL3ES3(); + + if (shaderProgram != null) { + shaderProgram.destroy(gl); + shaderProgram = null; + } + + if (vertexGLBuffer != null) { + vertexGLBuffer.destroy(gl); + vertexGLBuffer = null; + } + + if (rectangleVertexDataBuffer != null) { + rectangleVertexDataBuffer.destroy(); + rectangleVertexDataBuffer = null; + } + + if (vao != null) { + vao.destroy(gl); + vao = null; + } + } + + @Override + public int getOrder() { + return 0; + } + + private boolean render = false; + + @Override + public VoidWorldData worldUpdated(VizEngineModel model, JOGLRenderingTarget target, float[] mvpFloats) { + final GL3ES3 gl = target.getDrawable().getGL().getGL3ES3(); + + final GraphSelection graphSelection = model.getGraphSelection(); + backgroundIsDark = model.getRenderingOptions().isBackgroundColorDark(); + + if (graphSelection.getMode() != GraphSelection.GraphSelectionMode.RECTANGLE_SELECTION) { + return VoidWorldData.INSTANCE; + } + + final Vector2f initialPosition = graphSelection.getRectangleInitialPosition(); + final Vector2f currentPosition = graphSelection.getRectangleCurrentPosition(); + + if (initialPosition != null && currentPosition != null) { + + final float minX = Math.min(initialPosition.x, currentPosition.x); + final float minY = Math.min(initialPosition.y, currentPosition.y); + final float maxX = Math.max(initialPosition.x, currentPosition.x); + final float maxY = Math.max(initialPosition.y, currentPosition.y); + + final FloatBuffer floatBuffer = rectangleVertexDataBuffer.floatBuffer(); + + final float[] rectangleVertexData = { + //Triangle 1: + minX, + minY, + minX, + maxY, + maxX, + minY, + //Triangle 2: + minX, + maxY, + maxX, + maxY, + maxX, + minY + }; + + floatBuffer.put(rectangleVertexData); + floatBuffer.position(0); + + vertexGLBuffer.bind(gl); + vertexGLBuffer.update(gl, floatBuffer); + vertexGLBuffer.unbind(gl); + + render = true; + } else { + render = false; + } + return VoidWorldData.INSTANCE; + } + + private static final String SHADERS_ROOT = Constants.SHADERS_ROOT + "rectangleSelection"; + private static final String UNIFORM_NAME_COLOR = "color"; + private static final float[] RECT_COLOR_DARK = {0f, 0.47f, 0.843f, 0.2f}; + private static final float[] RECT_COLOR_LIGHT = {0.4f, 0.72f, 1.0f, 0.2f}; + private GLShaderProgram shaderProgram; + + private boolean backgroundIsDark = false; + + private final int[] intData = new int[1]; + private final byte[] booleanData = new byte[1]; + + @Override + public void render(VoidWorldData data, JOGLRenderingTarget target, RenderingLayer layer, float[] mvpFloats) { + final GL3ES3 gl = target.getDrawable().getGL().getGL3ES3(); + + if (render) { + shaderProgram.use(gl); + + gl.glUniformMatrix4fv(shaderProgram.getUniformLocation(UNIFORM_NAME_MODEL_VIEW_PROJECTION), 1, false, + mvpFloats, 0); + + final float[] rectColor = backgroundIsDark ? RECT_COLOR_LIGHT : RECT_COLOR_DARK; + gl.glUniform4fv(shaderProgram.getUniformLocation(UNIFORM_NAME_COLOR), 1, rectColor, 0); + + vao.use(gl); + + + gl.glGetBooleanv(GL_BLEND, booleanData, 0); + gl.glGetIntegerv(GL_BLEND_SRC_RGB, intData, 0); + final boolean blendEnabled = booleanData[0] > 0; + final int savedBlendSrc = intData[0]; + gl.glGetIntegerv(GL_BLEND_DST_RGB, intData, 0); + final int savedBlendDst = intData[0]; + + if (!blendEnabled) { + gl.glEnable(GL_BLEND); + } + gl.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + gl.glDrawArrays(GL_TRIANGLES, 0, VERTEX_COUNT); + + //Restore state: + if (!blendEnabled) { + gl.glDisable(GL_BLEND); + } + gl.glBlendFunc(savedBlendSrc, savedBlendDst); + + vao.stopUsing(gl); + + shaderProgram.stopUsing(gl); + } + } + + @Override + public EnumSet getLayers() { + return EnumSet.of(RenderingLayer.FRONT4); + } + + private class SelectionRectangleVAO extends GLVertexArrayObject { + + public SelectionRectangleVAO(OpenGLOptions openGLOptions) { + super(openGLOptions); + } + + @Override + protected void configure(GL3ES3 gl) { + vertexGLBuffer.bind(gl); + { + gl.glVertexAttribPointer(SHADER_VERT_LOCATION, VERTEX_FLOATS, GL_FLOAT, false, 0, 0); + } + vertexGLBuffer.unbind(gl); + } + + @Override + protected int[] getUsedAttributeLocations() { + return new int[] { + SHADER_VERT_LOCATION + }; + } + + @Override + protected int[] getInstancedAttributeLocations() { + return null; + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/arrays/renderers/SimpleMouseSelectionArrayDraw.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/arrays/renderers/SimpleMouseSelectionArrayDraw.java new file mode 100644 index 0000000000..5a01a28231 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/arrays/renderers/SimpleMouseSelectionArrayDraw.java @@ -0,0 +1,266 @@ +package org.gephi.viz.engine.jogl.pipeline.arrays.renderers; + + +import static com.jogamp.opengl.GL.GL_BLEND; +import static com.jogamp.opengl.GL.GL_BLEND_DST_RGB; +import static com.jogamp.opengl.GL.GL_BLEND_SRC_RGB; +import static com.jogamp.opengl.GL.GL_FLOAT; +import static com.jogamp.opengl.GL.GL_ONE_MINUS_SRC_ALPHA; +import static com.jogamp.opengl.GL.GL_SRC_ALPHA; +import static com.jogamp.opengl.GL.GL_TRIANGLES; +import static org.gephi.viz.engine.util.gl.Constants.ATTRIB_NAME_VERT; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_VERT_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.UNIFORM_NAME_MODEL_VIEW_PROJECTION; + +import com.jogamp.newt.event.NEWTEvent; +import com.jogamp.opengl.GL3ES3; +import java.nio.FloatBuffer; +import java.util.Arrays; +import java.util.EnumSet; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.VizEngineModel; +import org.gephi.viz.engine.jogl.JOGLRenderingTarget; +import org.gephi.viz.engine.jogl.models.mesh.NodeDiskVertexMeshGenerator; +import org.gephi.viz.engine.jogl.pipeline.common.VoidWorldData; +import org.gephi.viz.engine.jogl.util.ManagedDirectBuffer; +import org.gephi.viz.engine.jogl.util.Mesh; +import org.gephi.viz.engine.jogl.util.gl.GLBufferMutable; +import org.gephi.viz.engine.jogl.util.gl.GLShaderProgram; +import org.gephi.viz.engine.jogl.util.gl.GLVertexArrayObject; +import org.gephi.viz.engine.pipeline.PipelineCategory; +import org.gephi.viz.engine.pipeline.RenderingLayer; +import org.gephi.viz.engine.spi.Renderer; +import org.gephi.viz.engine.status.GraphSelection; +import org.gephi.viz.engine.util.gl.Constants; +import org.gephi.viz.engine.util.gl.OpenGLOptions; +import org.joml.Matrix4f; +import org.joml.Vector2f; +import org.joml.Vector3f; + +public class SimpleMouseSelectionArrayDraw implements Renderer { + private final VizEngine engine; + + private static final int VERT_BUFFER = 0; + + public static final int VERTEX_FLOATS = 2; + + private final int[] bufferName = new int[1]; + private ManagedDirectBuffer circleVertexDataBuffer; + private GLBufferMutable vertexGLBuffer; + private SelectionMouseVAO vao; + private boolean render = false; + + private static final String SHADERS_ROOT = Constants.SHADERS_ROOT + "simpleMouseSelection"; + private static final String UNIFORM_NAME_COLOR = "color"; + private static final float[] CIRCLE_COLOR_DARK = {0.3f, 0.3f, 0.3f, 0.2f}; + private static final float[] CIRCLE_COLOR_LIGHT = {0.85f, 0.85f, 0.85f, 0.2f}; + private GLShaderProgram shaderProgram; + + private boolean backgroundIsDark = false; + private final int[] intData = new int[1]; + private final byte[] booleanData = new byte[1]; + + private final Mesh meshCircle64 = NodeDiskVertexMeshGenerator.generateFilledCircle(64); + + + public SimpleMouseSelectionArrayDraw(VizEngine engine) { + this.engine = engine; + } + + @Override + public VoidWorldData worldUpdated(VizEngineModel model, JOGLRenderingTarget target, float[] mvpFloats) { + final GL3ES3 gl = target.getDrawable().getGL().getGL3ES3(); + + final GraphSelection graphSelection = model.getGraphSelection(); + backgroundIsDark = model.getRenderingOptions().isBackgroundColorDark(); + + if (graphSelection.getMode() != GraphSelection.GraphSelectionMode.SIMPLE_MOUSE_SELECTION && + graphSelection.getMode() != GraphSelection.GraphSelectionMode.MULTI_NODE_SELECTION) { + render = false; + return VoidWorldData.INSTANCE; + } + + final Vector2f mousePosition = graphSelection.getMousePosition(); + float mouseSelectionDiameter = graphSelection.getMouseSelectionDiameter(); + + if (mousePosition != null && mouseSelectionDiameter > 1) { + if (!graphSelection.getMouseSelectionDiameterZoomProportional()) { + Matrix4f mvp = new Matrix4f(); + mvp.set(mvpFloats); + + Vector3f scale = new Vector3f(); + + mvp.getScale(scale); + + graphSelection.setSimpleMouseSelectionMVPScale(scale.x); + } + mouseSelectionDiameter = graphSelection.getMouseSelectionEffectiveDiameter(); + final FloatBuffer floatBuffer = circleVertexDataBuffer.floatBuffer(); + // Vertex = 2 Float (xy) + float[] vertexData = Arrays.copyOf(meshCircle64.vertexData, meshCircle64.vertexData.length); + + for (int vertexIndex = 0; vertexIndex < meshCircle64.vertexData.length; vertexIndex += 2) { + vertexData[vertexIndex] = vertexData[vertexIndex] * mouseSelectionDiameter + mousePosition.x; + vertexData[vertexIndex + 1] = vertexData[vertexIndex + 1] * mouseSelectionDiameter + mousePosition.y; + + } + floatBuffer.put(vertexData); + floatBuffer.position(0); + + vertexGLBuffer.bind(gl); + vertexGLBuffer.update(gl, floatBuffer); + vertexGLBuffer.unbind(gl); + + render = true; + } else { + render = false; + } + return VoidWorldData.INSTANCE; + } + + @Override + public void render(VoidWorldData data, JOGLRenderingTarget target, RenderingLayer layer, float[] mvpFloats) { + + final GL3ES3 gl = target.getDrawable().getGL().getGL3ES3(); + + if (render) { + shaderProgram.use(gl); + + gl.glUniformMatrix4fv(shaderProgram.getUniformLocation(UNIFORM_NAME_MODEL_VIEW_PROJECTION), 1, false, + mvpFloats, 0); + + final float[] circleColor = backgroundIsDark ? CIRCLE_COLOR_LIGHT : CIRCLE_COLOR_DARK; + gl.glUniform4fv(shaderProgram.getUniformLocation(UNIFORM_NAME_COLOR), 1, circleColor, 0); + + vao.use(gl); + + + gl.glGetBooleanv(GL_BLEND, booleanData, 0); + gl.glGetIntegerv(GL_BLEND_SRC_RGB, intData, 0); + final boolean blendEnabled = booleanData[0] > 0; + final int savedBlendSrc = intData[0]; + gl.glGetIntegerv(GL_BLEND_DST_RGB, intData, 0); + final int savedBlendDst = intData[0]; + + if (!blendEnabled) { + gl.glEnable(GL_BLEND); + } + gl.glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); + + gl.glDrawArrays(GL_TRIANGLES, 0, meshCircle64.vertexCount); + + //Restore state: + if (!blendEnabled) { + gl.glDisable(GL_BLEND); + } + gl.glBlendFunc(savedBlendSrc, savedBlendDst); + + vao.stopUsing(gl); + + shaderProgram.stopUsing(gl); + } + } + + @Override + public EnumSet getLayers() { + return EnumSet.of(RenderingLayer.FRONT4); + } + + @Override + public String getCategory() { + return PipelineCategory.MOUSE_SELECTION; + } + + @Override + public int getPreferenceInCategory() { + return 0; + } + + @Override + public String getName() { + return "Simple Mouse Selection"; + } + + + @Override + public void init(JOGLRenderingTarget target) { + final GL3ES3 gl = target.getDrawable().getGL().getGL3ES3(); + + shaderProgram = new GLShaderProgram(SHADERS_ROOT, "simpleMouseSelection", "simpleMouseSelection") + .addUniformName(UNIFORM_NAME_MODEL_VIEW_PROJECTION) + .addUniformName(UNIFORM_NAME_COLOR) + .addAttribLocation(ATTRIB_NAME_VERT, SHADER_VERT_LOCATION) + .init(gl); + + gl.glGenBuffers(bufferName.length, bufferName, 0); + + circleVertexDataBuffer = new ManagedDirectBuffer(GL_FLOAT, Float.BYTES * meshCircle64.vertexData.length); + + vertexGLBuffer = new GLBufferMutable(bufferName[VERT_BUFFER], GLBufferMutable.GL_BUFFER_TYPE_ARRAY); + vertexGLBuffer.bind(gl); + vertexGLBuffer.init(gl, (long) Float.BYTES * meshCircle64.vertexData.length, + GLBufferMutable.GL_BUFFER_USAGE_DYNAMIC_DRAW); + vertexGLBuffer.unbind(gl); + vao = new SelectionMouseVAO( + engine.getOpenGLOptions() + ); + } + + @Override + public void dispose(JOGLRenderingTarget target) { + final GL3ES3 gl = target.getDrawable().getGL().getGL3ES3(); + + if (shaderProgram != null) { + shaderProgram.destroy(gl); + shaderProgram = null; + } + + if (vertexGLBuffer != null) { + vertexGLBuffer.destroy(gl); + vertexGLBuffer = null; + } + + if (circleVertexDataBuffer != null) { + circleVertexDataBuffer.destroy(); + circleVertexDataBuffer = null; + } + + if (vao != null) { + vao.destroy(gl); + vao = null; + } + } + + @Override + public int getOrder() { + return 0; + } + + private class SelectionMouseVAO extends GLVertexArrayObject { + + public SelectionMouseVAO(OpenGLOptions openGLOptions) { + super(openGLOptions); + } + + @Override + protected void configure(GL3ES3 gl) { + vertexGLBuffer.bind(gl); + { + gl.glVertexAttribPointer(SHADER_VERT_LOCATION, VERTEX_FLOATS, GL_FLOAT, false, 0, 0); + } + vertexGLBuffer.unbind(gl); + } + + @Override + protected int[] getUsedAttributeLocations() { + return new int[] { + SHADER_VERT_LOCATION + }; + } + + @Override + protected int[] getInstancedAttributeLocations() { + return null; + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/arrays/updaters/EdgesUpdaterArrayDrawRendering.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/arrays/updaters/EdgesUpdaterArrayDrawRendering.java new file mode 100644 index 0000000000..1cf9c968bb --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/arrays/updaters/EdgesUpdaterArrayDrawRendering.java @@ -0,0 +1,73 @@ +package org.gephi.viz.engine.jogl.pipeline.arrays.updaters; + +import org.gephi.graph.api.Edge; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.VizEngineModel; +import org.gephi.viz.engine.jogl.JOGLRenderingTarget; +import org.gephi.viz.engine.jogl.availability.ArrayDraw; +import org.gephi.viz.engine.jogl.pipeline.arrays.ArrayDrawEdgeData; +import org.gephi.viz.engine.pipeline.PipelineCategory; +import org.gephi.viz.engine.spi.ElementsCallback; +import org.gephi.viz.engine.spi.WorldUpdater; + +/** + * + * @author Eduardo Ramos + */ +public class EdgesUpdaterArrayDrawRendering implements WorldUpdater { + + private final VizEngine engine; + private final ArrayDrawEdgeData edgeData; + + public EdgesUpdaterArrayDrawRendering(VizEngine engine, ArrayDrawEdgeData edgeData) { + this.engine = engine; + this.edgeData = edgeData; + } + + @Override + public void init(JOGLRenderingTarget target) { + edgeData.init(target.getDrawable().getGL().getGL3ES3()); + } + + @Override + public void dispose(JOGLRenderingTarget target) { + edgeData.dispose(target.getDrawable().getGL().getGL3ES3()); + } + + @Override + public void updateWorld(VizEngineModel model) { + edgeData.update(model.getGraphIndex(), model.getGraphSelection(), model.getRenderingOptions(), + engine.getViewBoundaries()); + } + + @Override + public ElementsCallback getElementsCallback() { + return edgeData.getEdgesCallback(); + } + + @Override + public String getCategory() { + return PipelineCategory.EDGE; + } + + @Override + public int getPreferenceInCategory() { + return ArrayDraw.getPreferenceInCategory(); + } + + @Override + public String getName() { + return "Edges (Vertex Array)"; + } + + @Override + public boolean isAvailable(JOGLRenderingTarget target) { + return ArrayDraw.isAvailable(engine, target.getDrawable()); + } + + @Override + public int getOrder() { + return 0; + } + +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/arrays/updaters/NodesUpdaterArrayDrawRendering.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/arrays/updaters/NodesUpdaterArrayDrawRendering.java new file mode 100644 index 0000000000..7d08f8d399 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/arrays/updaters/NodesUpdaterArrayDrawRendering.java @@ -0,0 +1,72 @@ +package org.gephi.viz.engine.jogl.pipeline.arrays.updaters; + +import org.gephi.graph.api.Node; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.VizEngineModel; +import org.gephi.viz.engine.jogl.JOGLRenderingTarget; +import org.gephi.viz.engine.jogl.availability.ArrayDraw; +import org.gephi.viz.engine.jogl.pipeline.arrays.ArrayDrawNodeData; +import org.gephi.viz.engine.pipeline.PipelineCategory; +import org.gephi.viz.engine.spi.ElementsCallback; +import org.gephi.viz.engine.spi.WorldUpdater; + +/** + * + * @author Eduardo Ramos + */ +public class NodesUpdaterArrayDrawRendering implements WorldUpdater { + + private final VizEngine engine; + private final ArrayDrawNodeData nodeData; + + public NodesUpdaterArrayDrawRendering(VizEngine engine, ArrayDrawNodeData nodeData) { + this.engine = engine; + this.nodeData = nodeData; + } + + @Override + public void init(JOGLRenderingTarget target) { + nodeData.init(target.getDrawable().getGL().getGL3ES3()); + } + + @Override + public void dispose(JOGLRenderingTarget target) { + nodeData.dispose(target.getDrawable().getGL().getGL3ES3()); + } + + @Override + public void updateWorld(VizEngineModel model) { + nodeData.update(model.getRenderingOptions()); + } + + @Override + public ElementsCallback getElementsCallback() { + return nodeData.getNodesCallback(); + } + + @Override + public String getCategory() { + return PipelineCategory.NODE; + } + + @Override + public int getPreferenceInCategory() { + return ArrayDraw.getPreferenceInCategory(); + } + + @Override + public String getName() { + return "Nodes (Vertex Array)"; + } + + @Override + public boolean isAvailable(JOGLRenderingTarget target) { + return ArrayDraw.isAvailable(engine, target.getDrawable()); + } + + @Override + public int getOrder() { + return 0; + } + +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/common/AbstractEdgeData.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/common/AbstractEdgeData.java new file mode 100644 index 0000000000..b3101ac6ef --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/common/AbstractEdgeData.java @@ -0,0 +1,1680 @@ +package org.gephi.viz.engine.jogl.pipeline.common; + +import static com.jogamp.opengl.GL.GL_FLOAT; +import static com.jogamp.opengl.GL.GL_UNSIGNED_BYTE; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_COLOR_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_POSITION_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_POSITION_TARGET_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_SELFLOOP_NODE_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_SOURCE_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_TARGET_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_VERT_LOCATION; + +import com.jogamp.newt.event.NEWTEvent; +import com.jogamp.opengl.GL; +import com.jogamp.opengl.GL3ES3; +import java.nio.FloatBuffer; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.Rect2D; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.VizEngineModel; +import org.gephi.viz.engine.jogl.JOGLRenderingTarget; +import org.gephi.viz.engine.jogl.models.edgecircle.CommonEdgeCircleSelfLoop; +import org.gephi.viz.engine.jogl.models.edgecircle.EdgeCircleSelfLoopNoSelection; +import org.gephi.viz.engine.jogl.models.edgecircle.EdgeCircleSelfLoopSelectionSelected; +import org.gephi.viz.engine.jogl.models.edgecircle.EdgeCircleSelfLoopSelectionUnselected; +import org.gephi.viz.engine.jogl.models.edgeline.CommonEdgeLineModel; +import org.gephi.viz.engine.jogl.models.edgeline.directed.CommonEdgeLineDirected; +import org.gephi.viz.engine.jogl.models.edgeline.directed.EdgeLineDirectedModelNoSelection; +import org.gephi.viz.engine.jogl.models.edgeline.directed.EdgeLineDirectedModelSelectionSelected; +import org.gephi.viz.engine.jogl.models.edgeline.directed.EdgeLineDirectedModelSelectionUnselected; +import org.gephi.viz.engine.jogl.models.edgeline.undirected.CommonEdgeLineUndirected; +import org.gephi.viz.engine.jogl.models.edgeline.undirected.EdgeLineUndirectedModelNoSelection; +import org.gephi.viz.engine.jogl.models.edgeline.undirected.EdgeLineUndirectedModelSelectionSelected; +import org.gephi.viz.engine.jogl.models.edgeline.undirected.EdgeLineUndirectedModelSelectionUnselected; +import org.gephi.viz.engine.jogl.models.mesh.EdgeLineMeshGenerator; +import org.gephi.viz.engine.jogl.models.mesh.NodeDiskVertexMeshGenerator; +import org.gephi.viz.engine.jogl.util.ManagedDirectBuffer; +import org.gephi.viz.engine.jogl.util.Mesh; +import org.gephi.viz.engine.jogl.util.gl.GLBuffer; +import org.gephi.viz.engine.jogl.util.gl.GLVertexArrayObject; +import org.gephi.viz.engine.pipeline.RenderingLayer; +import org.gephi.viz.engine.pipeline.common.InstanceCounter; +import org.gephi.viz.engine.status.GraphRenderingOptions; +import org.gephi.viz.engine.status.GraphSelection; +import org.gephi.viz.engine.structure.GraphIndex; +import org.gephi.viz.engine.util.gl.Constants; +import org.gephi.viz.engine.util.gl.OpenGLOptions; +import org.gephi.viz.engine.util.structure.EdgesCallback; +import org.gephi.viz.engine.util.structure.NodesCallback; + +/** + * + * @author Eduardo Ramos + */ +public abstract class AbstractEdgeData extends AbstractSelectionData { + + protected final EdgeLineUndirectedModelNoSelection lineUndirectedModelNoSelection = + new EdgeLineUndirectedModelNoSelection(); + protected final EdgeLineUndirectedModelSelectionSelected lineUndirectedModelSelectionSelected = + new EdgeLineUndirectedModelSelectionSelected(); + protected final EdgeLineUndirectedModelSelectionUnselected lineUndirectedModelSelectionUnselected = + new EdgeLineUndirectedModelSelectionUnselected(); + + protected final EdgeLineDirectedModelNoSelection lineDirectedModelNoSelection = + new EdgeLineDirectedModelNoSelection(); + protected final EdgeLineDirectedModelSelectionSelected lineDirectedModelSelectionSelected = + new EdgeLineDirectedModelSelectionSelected(); + protected final EdgeLineDirectedModelSelectionUnselected lineDirectedModelSelectionUnselected = + new EdgeLineDirectedModelSelectionUnselected(); + + protected final EdgeCircleSelfLoopNoSelection edgeCircleSelfLoopNoSelection = new EdgeCircleSelfLoopNoSelection(); + protected final EdgeCircleSelfLoopSelectionSelected edgeCircleSelfLoopSelectionSelected = + new EdgeCircleSelfLoopSelectionSelected(); + protected final EdgeCircleSelfLoopSelectionUnselected edgeCircleSelfLoopSelectionUnselected = + new EdgeCircleSelfLoopSelectionUnselected(); + + protected final InstanceCounter undirectedInstanceCounter = new InstanceCounter(); + protected final InstanceCounter directedInstanceCounter = new InstanceCounter(); + protected final InstanceCounter selfLoopCounter = new InstanceCounter(); + + protected final Mesh undirectedEdgeMesh = EdgeLineMeshGenerator.undirectedMeshGenerator(); + protected final Mesh directedEdgeMesh = EdgeLineMeshGenerator.directedMeshGenerator(); + protected final Mesh selfLoopMesh = NodeDiskVertexMeshGenerator.generateFilledCircle(48); + // NOTE: Why secondary buffers and VAOs? + // Sadly, we cannot use glDrawArraysInstancedBaseInstance in MacOS and it will be never available + + protected GLBuffer vertexGLBufferUndirected; + protected GLBuffer vertexGLBufferDirected; + protected GLBuffer attributesGLBufferDirected; + protected GLBuffer attributesGLBufferDirectedSecondary; + protected GLBuffer attributesGLBufferUndirected; + protected GLBuffer attributesGLBufferUndirectedSecondary; + + + final public static int ATTRIBS_STRIDE_SELFLOOP = CommonEdgeCircleSelfLoop.TOTAL_ATTRIBUTES_FLOATS; + protected GLBuffer vertexGLBufferSelfLoop; + protected GLBuffer attributesGLBufferSelfLoop; + protected GLBuffer attributesGLBufferSelfLoopSecondary; + + protected final EdgesCallback edgesCallback; + protected final NodesCallback nodesCallback; + + protected static final int ATTRIBS_STRIDE = CommonEdgeLineModel.TOTAL_ATTRIBUTES_FLOATS; + + + protected static final int VERTEX_COUNT_MAX = + Math.max(CommonEdgeLineDirected.VERTEX_COUNT, CommonEdgeLineUndirected.VERTEX_COUNT); + + protected final boolean instanced; + protected final boolean usesSecondaryBuffer; + + protected ManagedDirectBuffer attributesBuffer; + protected ManagedDirectBuffer selfLoopAttributesBuffer; + + protected float[] attributesBufferBatch; + protected static final int BATCH_EDGES_SIZE = 32768; + protected static final int BATCH_SELFLOOP_EDGES_SIZE = 8192; + + protected float[] selfLoopAttributesBufferBatch; + + // States + protected boolean hideNonSelected; + protected boolean edgeSelectionColor; + protected boolean edgeWeightEnabled; + protected float edgeBothSelectionColor; + protected float edgeOutSelectionColor; + protected float edgeInSelectionColor; + protected GraphRenderingOptions.EdgeColorMode edgeColorMode; + + public AbstractEdgeData(final EdgesCallback edgesCallback, final NodesCallback nodesCallback, boolean instanced, + boolean usesSecondaryBuffer) { + this.startedTime = System.currentTimeMillis(); + this.edgesCallback = edgesCallback; + this.nodesCallback = nodesCallback; + this.instanced = instanced; + this.usesSecondaryBuffer = usesSecondaryBuffer; + } + + public void init(GL3ES3 gl) { + edgeCircleSelfLoopNoSelection.initGLProgram(gl); + edgeCircleSelfLoopSelectionUnselected.initGLProgram(gl); + edgeCircleSelfLoopSelectionSelected.initGLProgram(gl); + + lineDirectedModelNoSelection.initProgram(gl); + lineDirectedModelSelectionSelected.initProgram(gl); + lineDirectedModelSelectionUnselected.initProgram(gl); + + lineUndirectedModelNoSelection.initProgram(gl); + lineUndirectedModelSelectionSelected.initProgram(gl); + lineUndirectedModelSelectionUnselected.initProgram(gl); + + initBuffers(gl); + } + + protected void initBuffers(GL gl) { + attributesBufferBatch = new float[ATTRIBS_STRIDE * BATCH_EDGES_SIZE]; + attributesBuffer = new ManagedDirectBuffer(GL_FLOAT, ATTRIBS_STRIDE * BATCH_EDGES_SIZE); + + selfLoopAttributesBufferBatch = new float[ATTRIBS_STRIDE_SELFLOOP * BATCH_SELFLOOP_EDGES_SIZE]; + selfLoopAttributesBuffer = + new ManagedDirectBuffer(GL_FLOAT, ATTRIBS_STRIDE_SELFLOOP * BATCH_SELFLOOP_EDGES_SIZE); + } + + protected int setupShaderProgramForRenderingLayerSelfLoop( + final GL3ES3 gl, + final RenderingLayer layer, + final EdgeWorldData data, + final float[] mvpFloats + ) { + final boolean someSelection = data.hasSomeSelection(); + final boolean renderingUnselectedEdges = layer.getLevel() == 1; + if (!someSelection && renderingUnselectedEdges) { + return 0; + } + + final float[] backgroundColorFloats = data.getBackgroundColor(); + final float edgeScale = data.getEdgeScale(); + final float nodeScale = data.getNodeScale(); + final float lightenNonSelectedFactor = data.getLightenNonSelectedFactor(); + final float minWeight = data.getMinWeight(); + final float maxWeight = data.getMaxWeight(); + final float edgeRescaleMin = data.getEdgeRescaleMin(); + final float edgeRescaleMax = data.getEdgeRescaleMax(); + + final int instanceCount; + if (renderingUnselectedEdges) { + instanceCount = selfLoopCounter.unselectedCountToDraw; + + edgeCircleSelfLoopSelectionUnselected.useProgram( + gl, + mvpFloats, + backgroundColorFloats, + lightenNonSelectedFactor, + globalTime, + selectedTime, + edgeScale, + minWeight, + maxWeight, + edgeRescaleMin, + edgeRescaleMax, + nodeScale + ); + + if (usesSecondaryBuffer) { + setupSelfLoopVertexArrayAttributesSecondary(gl, data); + } else { + setupSelfLoopVertexArrayAttributes(gl, data); + } + } else { + instanceCount = selfLoopCounter.selectedCountToDraw; + + if (someSelection) { + if (data.isEdgeSelectionColor()) { + edgeCircleSelfLoopNoSelection.useProgram( + gl, + mvpFloats, + edgeScale, + minWeight, + maxWeight, + edgeRescaleMin, + edgeRescaleMax, + nodeScale + ); + } else { + edgeCircleSelfLoopSelectionSelected.useProgram( + gl, + mvpFloats, + backgroundColorFloats, + lightenNonSelectedFactor, + globalTime, + selectedTime, + edgeScale, + minWeight, + maxWeight, + edgeRescaleMin, + edgeRescaleMax, + nodeScale + ); + } + } else { + edgeCircleSelfLoopNoSelection.useProgram( + gl, + mvpFloats, + edgeScale, + minWeight, + maxWeight, + edgeRescaleMin, + edgeRescaleMax, + nodeScale + ); + } + setupSelfLoopVertexArrayAttributes(gl, data); + } + return instanceCount; + } + + protected int setupShaderProgramForRenderingLayerUndirected(final GL3ES3 gl, + final RenderingLayer layer, + final EdgeWorldData data, + final float[] mvpFloats) { + final boolean someSelection = data.hasSomeSelection(); + final boolean renderingUnselectedEdges = layer.getLevel() == 1; + if (!someSelection && renderingUnselectedEdges) { + return 0; + } + + final float[] backgroundColorFloats = data.getBackgroundColor(); + final float edgeScale = data.getEdgeScale(); + final float nodeScale = data.getNodeScale() * (1f - Constants.getEdgeInset()); + float lightenNonSelectedFactor = data.getLightenNonSelectedFactor(); + final float minWeight = data.getMinWeight(); + final float maxWeight = data.getMaxWeight(); + final float edgeRescaleMin = data.getEdgeRescaleMin(); + final float edgeRescaleMax = data.getEdgeRescaleMax(); + + final int instanceCount; + if (renderingUnselectedEdges) { + instanceCount = undirectedInstanceCounter.unselectedCountToDraw; + + lineUndirectedModelSelectionUnselected.useProgram( + gl, + mvpFloats, + edgeScale, + minWeight, + maxWeight, + edgeRescaleMin, + edgeRescaleMax, + backgroundColorFloats, + lightenNonSelectedFactor, + nodeScale, + globalTime, + selectedTime + ); + + if (usesSecondaryBuffer) { + setupUndirectedVertexArrayAttributesSecondary(gl, data); + } else { + setupUndirectedVertexArrayAttributes(gl, data); + } + } else { + instanceCount = undirectedInstanceCounter.selectedCountToDraw; + lineUndirectedModelNoSelection.useProgram( + gl, + mvpFloats, + edgeScale, + minWeight, + maxWeight, + edgeRescaleMin, + edgeRescaleMax, + nodeScale + ); + + if (someSelection) { + if (data.isEdgeSelectionColor()) { + lineUndirectedModelNoSelection.useProgram( + gl, + mvpFloats, + edgeScale, + minWeight, + maxWeight, + edgeRescaleMin, + edgeRescaleMax, + nodeScale + ); + } else { + lineUndirectedModelSelectionSelected.useProgram( + gl, + mvpFloats, + edgeScale, + minWeight, + maxWeight, + edgeRescaleMin, + edgeRescaleMax, + nodeScale, + globalTime, + selectedTime + ); + } + } else { + lineUndirectedModelNoSelection.useProgram( + gl, + mvpFloats, + edgeScale, + minWeight, + maxWeight, + edgeRescaleMin, + edgeRescaleMax, + nodeScale + ); + } + + setupUndirectedVertexArrayAttributes(gl, data); + } + + return instanceCount; + } + + protected int setupShaderProgramForRenderingLayerDirected(final GL3ES3 gl, + final RenderingLayer layer, + final EdgeWorldData data, + final float[] mvpFloats) { + final boolean someSelection = data.hasSomeSelection(); + final boolean renderingUnselectedEdges = layer.getLevel() == 1; + + if (!someSelection && renderingUnselectedEdges) { + return 0; + } + + final float[] backgroundColorFloats = data.getBackgroundColor(); + + final float edgeScale = data.getEdgeScale(); + final float nodeScale = data.getNodeScale(); + float lightenNonSelectedFactor = data.getLightenNonSelectedFactor(); + final float minWeight = data.getMinWeight(); + final float maxWeight = data.getMaxWeight(); + final float edgeRescaleMin = data.getEdgeRescaleMin(); + final float edgeRescaleMax = data.getEdgeRescaleMax(); + + final float edgeInset = Constants.getEdgeInset(); + + final int instanceCount; + if (renderingUnselectedEdges) { + instanceCount = directedInstanceCounter.unselectedCountToDraw; + lineDirectedModelSelectionUnselected.useProgram( + gl, + mvpFloats, + edgeScale, + minWeight, + maxWeight, + edgeRescaleMin, + edgeRescaleMax, + backgroundColorFloats, + lightenNonSelectedFactor, + nodeScale, + edgeInset, + globalTime, + selectedTime + ); + + if (usesSecondaryBuffer) { + setupDirectedVertexArrayAttributesSecondary(gl, data); + } else { + setupDirectedVertexArrayAttributes(gl, data); + } + } else { + instanceCount = directedInstanceCounter.selectedCountToDraw; + lineDirectedModelNoSelection.useProgram( + gl, + mvpFloats, + edgeScale, + minWeight, + maxWeight, + edgeRescaleMin, + edgeRescaleMax, + nodeScale, + edgeInset + ); + + if (someSelection) { + if (data.isEdgeSelectionColor()) { + lineDirectedModelNoSelection.useProgram( + gl, + mvpFloats, + edgeScale, + minWeight, + maxWeight, + edgeRescaleMin, + edgeRescaleMax, + nodeScale, + edgeInset + + ); + } else { + lineDirectedModelSelectionSelected.useProgram( + gl, + mvpFloats, + edgeScale, + minWeight, + maxWeight, + edgeRescaleMin, + edgeRescaleMax, + nodeScale, + edgeInset, + globalTime, + selectedTime + + ); + } + } else { + lineDirectedModelNoSelection.useProgram( + gl, + mvpFloats, + edgeScale, + minWeight, + maxWeight, + edgeRescaleMin, + edgeRescaleMax, + nodeScale, + edgeInset + ); + } + + setupDirectedVertexArrayAttributes(gl, data); + } + + return instanceCount; + } + + public EdgeWorldData createWorldData(VizEngineModel model, VizEngine engine) { + return new EdgeWorldData( + model.getRenderingOptions().getBackgroundColor(), + someSelection, + edgeSelectionColor, + edgeWeightEnabled ? edgesCallback.getMinWeight() : 0f, + edgeWeightEnabled ? edgesCallback.getMaxWeight() : 1f, + model.getRenderingOptions().isEdgeRescaleWeightEnabled() ? model.getRenderingOptions().getEdgeRescaleMin() : + 1f, + model.getRenderingOptions().isEdgeRescaleWeightEnabled() ? model.getRenderingOptions().getEdgeRescaleMax() : + 1f, + model.getRenderingOptions().getNodeScale(), + model.getRenderingOptions().getEdgeScale(), + model.getRenderingOptions().isLightenNonSelected() ? + model.getRenderingOptions().getLightenNonSelectedFactor() : 0f, + engine.getOpenGLOptions() + ); + } + + protected abstract void updateData(GraphSelection selection); + + public void update(GraphIndex graphIndex, GraphSelection selection, GraphRenderingOptions renderingOptions, + Rect2D viewBoundaries) { + if (!renderingOptions.isShowEdges()) { + undirectedInstanceCounter.clearCount(); + directedInstanceCounter.clearCount(); + selfLoopCounter.clearCount(); + return; + } + + //Selection: + this.someSelection = selection.someNodesOrEdgesSelection(); + final float lightenNonSelectedFactor = + renderingOptions.isLightenNonSelected() ? renderingOptions.getLightenNonSelectedFactor() : 0f; + final boolean hideNonSelectedFlag = renderingOptions.isHideNonSelectedEdges(); + // If hide-non-selected is enabled but there is no active selection, hide all edges + if (!someSelection && hideNonSelectedFlag) { + undirectedInstanceCounter.clearCount(); + directedInstanceCounter.clearCount(); + selfLoopCounter.clearCount(); + return; + } + // When there is a selection, hide unselected edges if the flag is on + this.hideNonSelected = someSelection && (hideNonSelectedFlag || lightenNonSelectedFactor >= 1); + this.edgeSelectionColor = renderingOptions.isEdgeSelectionColor(); + this.edgeColorMode = renderingOptions.getEdgeColorMode(); + this.edgeWeightEnabled = renderingOptions.isEdgeWeightEnabled(); + this.edgeBothSelectionColor = + Float.intBitsToFloat(renderingOptions.getEdgeBothSelectionColor().getRGB()); + this.edgeInSelectionColor = Float.intBitsToFloat(renderingOptions.getEdgeInSelectionColor().getRGB()); + this.edgeOutSelectionColor = Float.intBitsToFloat(renderingOptions.getEdgeOutSelectionColor().getRGB()); + + updateData(selection); + } + + protected int updateDirectedData( + final boolean isUndirected, + final int maxIndex, + final Edge[] visibleEdgesArray, + final float[] edgeWeightsArray, + final float[] attribs, int index + ) { + return updateDirectedData(isUndirected, maxIndex, visibleEdgesArray, edgeWeightsArray, + attribs, index, null); + } + + protected int updateSelfLoop(final int maxIndex, + final Edge[] visibleEdgesArray, + final float[] edgeWeightsArray, + final float[] attribs, + int index, + final FloatBuffer directBuffer) { + + int selfLoopEdgeIndex = 0; + int unselectedSelfLoopEdgeIndex = 0; + //Undirected edges: + if (someSelection) { + + if (hideNonSelected) { + for (int i = 0; i <= maxIndex; i++) { + Edge e = visibleEdgesArray[i]; + + // Discard if source and target node are not the same + if (e == null // If edge is null + || e.getSource() != e.getTarget() // or is not self loop + || !edgesCallback.isSelected(i) // or is not selected + ) { + continue; // Filter out + } + + selfLoopEdgeIndex++; + final float weight = edgeWeightEnabled ? edgeWeightsArray[i] : 1f; + + + fillSelfLoopEdgeAttributesDataWithSelection(attribs, e, index, true, weight); + index += ATTRIBS_STRIDE_SELFLOOP; + + if (directBuffer != null && index == attribs.length) { + directBuffer.put(attribs, 0, attribs.length); + index = 0; + } + } + + + } else { + for (int i = 0; i <= maxIndex; i++) { + Edge e = visibleEdgesArray[i]; + + // Discard if source and target node are not the same + if (e == null // If edge is null + || e.getSource() != e.getTarget() // or is not self loop + || edgesCallback.isSelected(i) // or is selected + ) { + continue; // Filter out + } + + unselectedSelfLoopEdgeIndex++; + final float weight = edgeWeightEnabled ? edgeWeightsArray[i] : 1f; + + fillSelfLoopEdgeAttributesDataWithSelection(attribs, e, index, false, weight); + index += ATTRIBS_STRIDE_SELFLOOP; + + if (directBuffer != null && index == attribs.length) { + directBuffer.put(attribs, 0, attribs.length); + index = 0; + } + + } + + for (int i = 0; i <= maxIndex; i++) { + Edge e = visibleEdgesArray[i]; + + // Discard if source and target node are not the same + if (e == null // If edge is null + || e.getSource() != e.getTarget() // or is not self loop + || !edgesCallback.isSelected(i) // or is not selected + ) { + continue; // Filter out + } + + selfLoopEdgeIndex++; + final float weight = edgeWeightEnabled ? edgeWeightsArray[i] : 1f; + + + fillSelfLoopEdgeAttributesDataWithSelection(attribs, e, index, true, weight); + index += ATTRIBS_STRIDE_SELFLOOP; + + if (directBuffer != null && index == attribs.length) { + directBuffer.put(attribs, 0, attribs.length); + index = 0; + } + } + } + } else { + //Just all edges, no selection active: + // Get Index of self loop edges + + for (int i = 0; i <= maxIndex; i++) { + Edge e = visibleEdgesArray[i]; + + // Discard if source and target node are not the same + if (e == null || e.getSource() != e.getTarget()) { + continue; + } + + selfLoopEdgeIndex++; + final float weight = edgeWeightEnabled ? edgeWeightsArray[i] : 1f; + + + fillSelfLoopEdgeAttributesDataWithoutSelection(attribs, e, index, weight); + index += ATTRIBS_STRIDE_SELFLOOP; + + if (directBuffer != null && index == attribs.length) { + directBuffer.put(attribs, 0, attribs.length); + index = 0; + } + + } + } + + // Flush remaining data in batch buffer to directBuffer + if (directBuffer != null && index > 0) { + directBuffer.put(attribs, 0, index); + index = 0; + } + + selfLoopCounter.selectedCount = selfLoopEdgeIndex; + selfLoopCounter.unselectedCount = unselectedSelfLoopEdgeIndex; + + return index; + } + + protected int updateDirectedData( + final boolean isUndirected, + final int maxIndex, + final Edge[] visibleEdgesArray, + final float[] edgeWeightsArray, + final float[] attribs, int index, final FloatBuffer directBuffer + ) { + checkBufferIndexing(directBuffer, attribs, index); + + if (isUndirected) { + directedInstanceCounter.unselectedCount = 0; + directedInstanceCounter.selectedCount = 0; + return index; + } + + int newEdgesCountUnselected = 0; + int newEdgesCountSelected = 0; + if (someSelection) { + if (hideNonSelected) { + for (int j = 0; j <= maxIndex; j++) { + final Edge edge = visibleEdgesArray[j]; + if (edge == null) { + continue; + } + if (edge.getSource() == edge.getTarget()) { + continue; + } + if (!edge.isDirected()) { + continue; + } + + final boolean selected = edgesCallback.isSelected(j); + if (!selected) { + continue; + } + + newEdgesCountSelected++; + + float weight = edgeWeightEnabled ? edgeWeightsArray[j] : 1f; + fillDirectedEdgeAttributesDataWithSelection(attribs, edge, index, selected, weight); + index += ATTRIBS_STRIDE; + + if (directBuffer != null && index == attribs.length) { + directBuffer.put(attribs, 0, attribs.length); + index = 0; + } + } + } else { + //First non-selected (bottom): + for (int j = 0; j <= maxIndex; j++) { + final Edge edge = visibleEdgesArray[j]; + if (edge == null) { + continue; + } + if (edge.getSource() == edge.getTarget()) { + continue; + } + if (!edge.isDirected()) { + continue; + } + + if (edgesCallback.isSelected(j)) { + continue; + } + + newEdgesCountUnselected++; + + float weight = edgeWeightEnabled ? edgeWeightsArray[j] : 1f; + fillDirectedEdgeAttributesDataWithSelection(attribs, edge, index, false, weight); + index += ATTRIBS_STRIDE; + + if (directBuffer != null && index == attribs.length) { + directBuffer.put(attribs, 0, attribs.length); + index = 0; + } + } + + //Then selected ones (up): + for (int j = 0; j <= maxIndex; j++) { + final Edge edge = visibleEdgesArray[j]; + if (edge == null) { + continue; + } + if (edge.getSource() == edge.getTarget()) { + continue; + } + if (!edge.isDirected()) { + continue; + } + + if (!edgesCallback.isSelected(j)) { + continue; + } + + newEdgesCountSelected++; + + float weight = edgeWeightEnabled ? edgeWeightsArray[j] : 1f; + fillDirectedEdgeAttributesDataWithSelection(attribs, edge, index, true, weight); + index += ATTRIBS_STRIDE; + + if (directBuffer != null && index == attribs.length) { + directBuffer.put(attribs, 0, attribs.length); + index = 0; + } + } + } + } else { + //Just all edges, no selection active: + for (int j = 0; j <= maxIndex; j++) { + final Edge edge = visibleEdgesArray[j]; + if (edge == null) { + continue; + } + if (edge.getSource() == edge.getTarget()) { + continue; + } + if (!edge.isDirected()) { + continue; + } + + newEdgesCountSelected++; + + float weight = edgeWeightEnabled ? edgeWeightsArray[j] : 1f; + fillDirectedEdgeAttributesDataWithoutSelection(attribs, edge, index, weight); + index += ATTRIBS_STRIDE; + + if (directBuffer != null && index == attribs.length) { + directBuffer.put(attribs, 0, attribs.length); + index = 0; + } + } + } + + //Remaining: + if (directBuffer != null && index > 0) { + directBuffer.put(attribs, 0, index); + index = 0; + } + + directedInstanceCounter.unselectedCount = newEdgesCountUnselected; + directedInstanceCounter.selectedCount = newEdgesCountSelected; + + return index; + } + + protected int updateUndirectedData( + final boolean isDirected, + final int maxIndex, + final Edge[] visibleEdgesArray, + final float[] edgeWeightsArray, + final float[] attribs, int index + ) { + return updateUndirectedData(isDirected, maxIndex, visibleEdgesArray, edgeWeightsArray, attribs, + index, null); + } + + protected int updateUndirectedData( + final boolean isDirected, + final int maxIndex, + final Edge[] visibleEdgesArray, + final float[] edgeWeightsArray, + final float[] attribs, int index, final FloatBuffer directBuffer + ) { + checkBufferIndexing(directBuffer, attribs, index); + + if (isDirected) { + undirectedInstanceCounter.unselectedCount = 0; + undirectedInstanceCounter.selectedCount = 0; + return index; + } + + int newEdgesCountUnselected = 0; + int newEdgesCountSelected = 0; + //Undirected edges: + if (someSelection) { + if (hideNonSelected) { + for (int j = 0; j <= maxIndex; j++) { + final Edge edge = visibleEdgesArray[j]; + if (edge == null) { + continue; + } + if (edge.getSource() == edge.getTarget()) { + continue; + } + if (edge.isDirected()) { + continue; + } + + if (!edgesCallback.isSelected(j)) { + continue; + } + + newEdgesCountSelected++; + + float weight = edgeWeightEnabled ? edgeWeightsArray[j] : 1f; + fillUndirectedEdgeAttributesDataWithSelection(attribs, edge, index, true, weight); + index += ATTRIBS_STRIDE; + + if (directBuffer != null && index == attribs.length) { + directBuffer.put(attribs, 0, attribs.length); + index = 0; + } + } + } else { + //First non-selected (bottom): + for (int j = 0; j <= maxIndex; j++) { + final Edge edge = visibleEdgesArray[j]; + if (edge == null) { + continue; + } + if (edge.getSource() == edge.getTarget()) { + continue; + } + if (edge.isDirected()) { + continue; + } + + if (edgesCallback.isSelected(j)) { + continue; + } + + newEdgesCountUnselected++; + + float weight = edgeWeightEnabled ? edgeWeightsArray[j] : 1f; + fillUndirectedEdgeAttributesDataWithSelection(attribs, edge, index, false, weight); + index += ATTRIBS_STRIDE; + + if (directBuffer != null && index == attribs.length) { + directBuffer.put(attribs, 0, attribs.length); + index = 0; + } + } + + //Then selected ones (up): + for (int j = 0; j <= maxIndex; j++) { + final Edge edge = visibleEdgesArray[j]; + if (edge == null) { + continue; + } + if (edge.getSource() == edge.getTarget()) { + continue; + } + if (edge.isDirected()) { + continue; + } + + if (!edgesCallback.isSelected(j)) { + continue; + } + + newEdgesCountSelected++; + + float weight = edgeWeightEnabled ? edgeWeightsArray[j] : 1f; + fillUndirectedEdgeAttributesDataWithSelection(attribs, edge, index, true, weight); + index += ATTRIBS_STRIDE; + + if (directBuffer != null && index == attribs.length) { + directBuffer.put(attribs, 0, attribs.length); + index = 0; + } + } + } + } else { + //Just all edges, no selection active: + for (int j = 0; j <= maxIndex; j++) { + final Edge edge = visibleEdgesArray[j]; + if (edge == null) { + continue; + } + if (edge.getSource() == edge.getTarget()) { + continue; + } + if (edge.isDirected()) { + continue; + } + + newEdgesCountSelected++; + + float weight = edgeWeightEnabled ? edgeWeightsArray[j] : 1f; + fillUndirectedEdgeAttributesDataWithoutSelection(attribs, edge, index, weight); + index += ATTRIBS_STRIDE; + + if (directBuffer != null && index == attribs.length) { + directBuffer.put(attribs, 0, attribs.length); + index = 0; + } + } + } + + //Remaining: + if (directBuffer != null && index > 0) { + directBuffer.put(attribs, 0, index); + index = 0; + } + + undirectedInstanceCounter.unselectedCount = newEdgesCountUnselected; + undirectedInstanceCounter.selectedCount = newEdgesCountSelected; + + return index; + } + + private void checkBufferIndexing(final FloatBuffer directBuffer, final float[] attribs, final int index) { + if (directBuffer != null) { + if (attribs.length % ATTRIBS_STRIDE != 0) { + throw new IllegalArgumentException( + "When filling a directBuffer, attribs buffer length should be a multiple of ATTRIBS_STRIDE = " + + ATTRIBS_STRIDE); + } + + if (index % ATTRIBS_STRIDE != 0) { + throw new IllegalArgumentException( + "When filling a directBuffer, index should be a multiple of ATTRIBS_STRIDE = " + ATTRIBS_STRIDE); + } + } + } + + + protected void fillUndirectedEdgeAttributesDataBase(final float[] buffer, final Edge edge, final int index, + final float weight) { + final Node source = edge.getSource(); + final Node target = edge.getTarget(); + + final float sourceX = source.x(); + final float sourceY = source.y(); + final float targetX = target.x(); + final float targetY = target.y(); + + //Position: + buffer[index] = sourceX; + buffer[index + 1] = sourceY; + + //Target position: + buffer[index + 2] = targetX; + buffer[index + 3] = targetY; + + //Size (weight or constant): + buffer[index + 4] = weight; + } + + protected void fillUndirectedEdgeAttributesDataWithoutSelection(final float[] buffer, final Edge edge, + final int index, final float weight) { + fillUndirectedEdgeAttributesDataBase(buffer, edge, index, weight); + + buffer[index + 5] = computeElementColor(edge);//Color + + //Source and target size: + buffer[index + 6] = edge.getSource().size(); + buffer[index + 7] = edge.getTarget().size(); + } + + protected void fillUndirectedEdgeAttributesDataWithSelection(final float[] buffer, final Edge edge, final int index, + final boolean selected, final float weight) { + final Node source = edge.getSource(); + final Node target = edge.getTarget(); + + fillUndirectedEdgeAttributesDataBase(buffer, edge, index, weight); + + //Color: + if (selected) { + if (someSelection && edgeSelectionColor) { + boolean sourceSelected = nodesCallback.isSelected(source.getStoreId()); + boolean targetSelected = nodesCallback.isSelected(target.getStoreId()); + + if (sourceSelected || targetSelected) { + buffer[index + 5] = edgeBothSelectionColor;//Color β€” undirected has no in/out + } else { + buffer[index + 5] = computeElementColor(edge);//Color + } + } else { + // When a node is selected, color the edge with the opposite node color + if (someSelection) { + if (nodesCallback.isSelected(source.getStoreId())) { + buffer[index + 5] = Float.intBitsToFloat(target.getRGBA()); + } else if (nodesCallback.isSelected(target.getStoreId())) { + buffer[index + 5] = Float.intBitsToFloat(source.getRGBA()); + } else { + buffer[index + 5] = computeElementColor(edge);//Color + } + } else { + buffer[index + 5] = computeElementColor(edge);//Color + } + } + } else { + buffer[index + 5] = computeElementColor(edge);//Color + } + + //Source and target size: + buffer[index + 6] = edge.getSource().size(); + buffer[index + 7] = edge.getTarget().size(); + } + + protected void fillDirectedEdgeAttributesDataBase(final float[] buffer, final Edge edge, final int index, + final float weight) { + final Node source = edge.getSource(); + final Node target = edge.getTarget(); + + final float sourceX = source.x(); + final float sourceY = source.y(); + final float targetX = target.x(); + final float targetY = target.y(); + + //Position: + buffer[index] = sourceX; + buffer[index + 1] = sourceY; + + //Target position: + buffer[index + 2] = targetX; + buffer[index + 3] = targetY; + + //Size (weight or constant): + buffer[index + 4] = weight; + } + + protected void fillSelfLoopEdgeAttributesDataWithSelection(final float[] buffer, final Edge edge, + final int index, final boolean selected, + final float weight) { + final Node source = edge.getSource(); + + // Self loop for the moment are just circle like nodes so let's try to have same buffer + // + + final float sourceX = source.x(); + final float sourceY = source.y(); + + //Position: + buffer[index] = sourceX; + buffer[index + 1] = sourceY; + //Color: + if (selected) { + if (someSelection && edgeSelectionColor) { + // Self-loop: source == target, so always "both" selection color + if (nodesCallback.isSelected(source.getStoreId())) { + buffer[index + 2] = edgeBothSelectionColor; + } else { + buffer[index + 2] = computeElementColor(edge); + } + } else if (someSelection && nodesCallback.isSelected(source.getStoreId())) { + // Color by node (source == target for self-loops) + buffer[index + 2] = Float.intBitsToFloat(source.getRGBA()); + } else { + buffer[index + 2] = computeElementColor(edge); + } + } else { + buffer[index + 2] = computeElementColor(edge); + } + + //Size (weight or constant): + buffer[index + 3] = weight; + + //Source and target size, here it's used for an offset to be applied to the circle: + // so that it's not right under the node. + buffer[index + 4] = source.size(); + } + + protected void fillSelfLoopEdgeAttributesDataWithoutSelection(final float[] buffer, final Edge edge, + final int index, final float weight) { + final Node source = edge.getSource(); + + // Self loop for the moment are just circle like nodes so let's try to have same buffer + // + + final float sourceX = source.x(); + final float sourceY = source.y(); + + //Position: + buffer[index] = sourceX; + buffer[index + 1] = sourceY; + //Color: + buffer[index + 2] = computeElementColor(edge); + + //Size (weight or constant): + buffer[index + 3] = weight; + + //Source and target size, here it's used for an offset to be applied to the circle: + // so that it's not right under the node. + buffer[index + 4] = source.size(); + } + + protected void fillDirectedEdgeAttributesDataWithoutSelection(final float[] buffer, final Edge edge, + final int index, final float weight) { + fillDirectedEdgeAttributesDataBase(buffer, edge, index, weight); + + //Color: + buffer[index + 5] = computeElementColor(edge);//Color + + //Source and target size: + buffer[index + 6] = edge.getSource().size(); + buffer[index + 7] = edge.getTarget().size(); + } + + protected void fillDirectedEdgeAttributesDataWithSelection(final float[] buffer, final Edge edge, final int index, + final boolean selected, final float weight) { + final Node source = edge.getSource(); + final Node target = edge.getTarget(); + + fillDirectedEdgeAttributesDataBase(buffer, edge, index, weight); + + //Color: + if (selected) { + if (someSelection && edgeSelectionColor) { + boolean sourceSelected = nodesCallback.isSelected(source.getStoreId()); + boolean targetSelected = nodesCallback.isSelected(target.getStoreId()); + + if (sourceSelected && targetSelected) { + buffer[index + 5] = edgeBothSelectionColor;//Color + } else if (sourceSelected) { + buffer[index + 5] = edgeOutSelectionColor;//Color + } else if (targetSelected) { + buffer[index + 5] = edgeInSelectionColor;//Color + } else { + buffer[index + 5] = computeElementColor(edge);//Color + } + } else { + // When a node is selected, color the edge with the opposite node color + if (someSelection) { + if (nodesCallback.isSelected(source.getStoreId())) { + buffer[index + 5] = Float.intBitsToFloat(target.getRGBA()); + } else if (nodesCallback.isSelected(target.getStoreId())) { + buffer[index + 5] = Float.intBitsToFloat(source.getRGBA()); + } else { + buffer[index + 5] = computeElementColor(edge);//Color + } + } else { + buffer[index + 5] = computeElementColor(edge);//Color + } + } + } else { + buffer[index + 5] = computeElementColor(edge);//Color + } + + //Source and target size: + buffer[index + 6] = source.size(); + buffer[index + 7] = target.size(); + } + + private float computeElementColor(final Edge edge) { + final int colorInt; + switch (edgeColorMode) { + case SOURCE: { + colorInt = edge.getSource().getRGBA(); + break; + } + case TARGET: { + colorInt = edge.getTarget().getRGBA(); + break; + } + case MIXED: { + final int s = edge.getSource().getRGBA(); + final int t = edge.getTarget().getRGBA(); + if (s == t) { + colorInt = s; + break; + } + final int b0 = ((s) & 0xFF) + ((t) & 0xFF); + final int b1 = ((s >>> 8) & 0xFF) + ((t >>> 8) & 0xFF); + final int b2 = ((s >>> 16) & 0xFF) + ((t >>> 16) & 0xFF); + final int b3 = ((s >>> 24) & 0xFF) + ((t >>> 24) & 0xFF); + colorInt = ((b3 >>> 1) << 24) | ((b2 >>> 1) << 16) | ((b1 >>> 1) << 8) | (b0 >>> 1); + break; + } + case SELF: + default: { + colorInt = edge.getRGBA(); + break; + } + } + return Float.intBitsToFloat(colorInt); + } + + private UndirectedEdgesVAO undirectedEdgesVAO; + private UndirectedEdgesVAO undirectedEdgesVAOSecondary; + private DirectedEdgesVAO directedEdgesVAO; + private DirectedEdgesVAO directedEdgesVAOSecondary; + private SelfLoopEdgesVAO selfLoopEdgesVAO; + private SelfLoopEdgesVAO selfLoopEdgesVAOSecondary; + + public void setupSelfLoopVertexArrayAttributes(GL3ES3 gl, EdgeWorldData data) { + if (selfLoopEdgesVAO == null) { + selfLoopEdgesVAO = new SelfLoopEdgesVAO( + data.getOpenGLOptions(), + attributesGLBufferSelfLoop + ); + } + + selfLoopEdgesVAO.use(gl); + } + + public void setupSelfLoopVertexArrayAttributesSecondary(GL3ES3 gl, EdgeWorldData data) { + if (selfLoopEdgesVAOSecondary == null) { + selfLoopEdgesVAOSecondary = new SelfLoopEdgesVAO( + data.getOpenGLOptions(), + attributesGLBufferSelfLoopSecondary + ); + } + + selfLoopEdgesVAOSecondary.use(gl); + } + + public void setupUndirectedVertexArrayAttributes(GL3ES3 gl, EdgeWorldData data) { + if (undirectedEdgesVAO == null) { + undirectedEdgesVAO = new UndirectedEdgesVAO( + data.getOpenGLOptions(), + attributesGLBufferUndirected + ); + } + + undirectedEdgesVAO.use(gl); + } + + public void setupUndirectedVertexArrayAttributesSecondary(GL3ES3 gl, + EdgeWorldData data) { + if (undirectedEdgesVAOSecondary == null) { + undirectedEdgesVAOSecondary = new UndirectedEdgesVAO( + data.getOpenGLOptions(), + attributesGLBufferUndirectedSecondary + ); + } + + undirectedEdgesVAOSecondary.use(gl); + } + + public void unsetupSelfLoopVertexArrayAttributes(GL3ES3 gl) { + if (selfLoopEdgesVAO != null) { + selfLoopEdgesVAO.stopUsing(gl); + } + + if (selfLoopEdgesVAOSecondary != null) { + selfLoopEdgesVAOSecondary.stopUsing(gl); + } + } + + public void unsetupUndirectedVertexArrayAttributes(GL3ES3 gl) { + if (undirectedEdgesVAO != null) { + undirectedEdgesVAO.stopUsing(gl); + } + + if (undirectedEdgesVAOSecondary != null) { + undirectedEdgesVAOSecondary.stopUsing(gl); + } + } + + public void setupDirectedVertexArrayAttributes(GL3ES3 gl, EdgeWorldData data) { + if (directedEdgesVAO == null) { + directedEdgesVAO = new DirectedEdgesVAO( + data.getOpenGLOptions(), + attributesGLBufferDirected + ); + } + + directedEdgesVAO.use(gl); + } + + public void setupDirectedVertexArrayAttributesSecondary(GL3ES3 gl, + EdgeWorldData data) { + if (directedEdgesVAOSecondary == null) { + directedEdgesVAOSecondary = new DirectedEdgesVAO( + data.getOpenGLOptions(), + attributesGLBufferDirectedSecondary + ); + } + + directedEdgesVAOSecondary.use(gl); + } + + public void unsetupDirectedVertexArrayAttributes(GL3ES3 gl) { + if (directedEdgesVAO != null) { + directedEdgesVAO.stopUsing(gl); + } + + if (directedEdgesVAOSecondary != null) { + directedEdgesVAOSecondary.stopUsing(gl); + } + } + + public void dispose(GL gl) { + if (vertexGLBufferUndirected != null) { + vertexGLBufferUndirected.destroy(gl); + vertexGLBufferUndirected = null; + } + + if (vertexGLBufferDirected != null) { + vertexGLBufferDirected.destroy(gl); + vertexGLBufferDirected = null; + } + + if (vertexGLBufferSelfLoop != null) { + vertexGLBufferSelfLoop.destroy(gl); + vertexGLBufferSelfLoop = null; + } + + if (attributesGLBufferDirected != null) { + attributesGLBufferDirected.destroy(gl); + attributesGLBufferDirected = null; + } + + if (attributesGLBufferDirectedSecondary != null) { + attributesGLBufferDirectedSecondary.destroy(gl); + attributesGLBufferDirectedSecondary = null; + } + + if (attributesGLBufferUndirected != null) { + attributesGLBufferUndirected.destroy(gl); + attributesGLBufferUndirected = null; + } + + if (attributesGLBufferUndirectedSecondary != null) { + attributesGLBufferUndirectedSecondary.destroy(gl); + attributesGLBufferUndirectedSecondary = null; + } + if (attributesGLBufferSelfLoop != null) { + attributesGLBufferSelfLoop.destroy(gl); + attributesGLBufferSelfLoop = null; + + } + if (attributesGLBufferSelfLoopSecondary != null) { + attributesGLBufferSelfLoopSecondary.destroy(gl); + attributesGLBufferSelfLoopSecondary = null; + + } + + if (attributesBuffer != null) { + attributesBuffer.destroy(); + attributesBuffer = null; + } + + if (selfLoopAttributesBuffer != null) { + selfLoopAttributesBuffer.destroy(); + selfLoopAttributesBuffer = null; + } + + // Destroy and reset VAOs to prevent reuse after re-init + if (undirectedEdgesVAO != null) { + undirectedEdgesVAO.destroy(gl.getGL3ES3()); + undirectedEdgesVAO = null; + } + + if (undirectedEdgesVAOSecondary != null) { + undirectedEdgesVAOSecondary.destroy(gl.getGL3ES3()); + undirectedEdgesVAOSecondary = null; + } + + if (directedEdgesVAO != null) { + directedEdgesVAO.destroy(gl.getGL3ES3()); + directedEdgesVAO = null; + } + + if (directedEdgesVAOSecondary != null) { + directedEdgesVAOSecondary.destroy(gl.getGL3ES3()); + directedEdgesVAOSecondary = null; + } + + if (selfLoopEdgesVAO != null) { + selfLoopEdgesVAO.destroy(gl.getGL3ES3()); + selfLoopEdgesVAO = null; + } + + if (selfLoopEdgesVAOSecondary != null) { + selfLoopEdgesVAOSecondary.destroy(gl.getGL3ES3()); + selfLoopEdgesVAOSecondary = null; + } + + // Destroy shader programs + lineUndirectedModelSelectionSelected.destroy(gl.getGL3ES3()); + lineUndirectedModelSelectionUnselected.destroy(gl.getGL3ES3()); + lineUndirectedModelNoSelection.destroy(gl.getGL3ES3()); + + lineDirectedModelNoSelection.destroy(gl.getGL3ES3()); + lineDirectedModelSelectionSelected.destroy(gl.getGL3ES3()); + lineDirectedModelSelectionUnselected.destroy(gl.getGL3ES3()); + + + edgeCircleSelfLoopNoSelection.destroy(gl.getGL3ES3()); + edgeCircleSelfLoopSelectionSelected.destroy(gl.getGL3ES3()); + edgeCircleSelfLoopSelectionUnselected.destroy(gl.getGL3ES3()); + + edgesCallback.reset(); + } + + private class SelfLoopEdgesVAO extends GLVertexArrayObject { + + private final GLBuffer attributesBuffer; + + public SelfLoopEdgesVAO(OpenGLOptions openGLOptions, + GLBuffer attributesBuffer) { + super(openGLOptions); + this.attributesBuffer = attributesBuffer; + } + + @Override + protected void configure(GL3ES3 gl) { + vertexGLBufferSelfLoop.bind(gl); + { + gl.glVertexAttribPointer(SHADER_VERT_LOCATION, CommonEdgeCircleSelfLoop.VERTEX_FLOATS, GL_FLOAT, + false, + 0, 0); + } + vertexGLBufferSelfLoop.unbind(gl); + + this.attributesBuffer.bind(gl); + { + int stride = ATTRIBS_STRIDE_SELFLOOP * Float.BYTES; + int offset = 0; + gl.glVertexAttribPointer(SHADER_POSITION_LOCATION, CommonEdgeCircleSelfLoop.POSITION_FLOATS, + GL_FLOAT, false, + stride, offset); + offset += CommonEdgeCircleSelfLoop.POSITION_FLOATS * Float.BYTES; + + gl.glVertexAttribPointer(SHADER_COLOR_LOCATION, + CommonEdgeCircleSelfLoop.COLOR_FLOATS * Float.BYTES, + GL_UNSIGNED_BYTE, + false, stride, offset); + offset += CommonEdgeCircleSelfLoop.COLOR_FLOATS * Float.BYTES; + + gl.glVertexAttribPointer(SHADER_SIZE_LOCATION, CommonEdgeCircleSelfLoop.SIZE_FLOATS, GL_FLOAT, + false, stride, + offset); + offset += CommonEdgeCircleSelfLoop.SIZE_FLOATS * Float.BYTES; + + gl.glVertexAttribPointer(SHADER_SELFLOOP_NODE_SIZE_LOCATION, + CommonEdgeCircleSelfLoop.NODE_SIZE_FLOATS, GL_FLOAT, false, stride, offset); + + + } + this.attributesBuffer.unbind(gl); + } + + @Override + protected int[] getUsedAttributeLocations() { + return new int[] { + SHADER_VERT_LOCATION, + SHADER_POSITION_LOCATION, + SHADER_COLOR_LOCATION, + SHADER_SIZE_LOCATION, + SHADER_SELFLOOP_NODE_SIZE_LOCATION + }; + } + + @Override + protected int[] getInstancedAttributeLocations() { + if (instanced) { + return new int[] { + SHADER_POSITION_LOCATION, + SHADER_COLOR_LOCATION, + SHADER_SIZE_LOCATION, + SHADER_SELFLOOP_NODE_SIZE_LOCATION + + }; + } else { + return null; + } + } + + } + + private class UndirectedEdgesVAO extends GLVertexArrayObject { + + private final GLBuffer attributesBuffer; + + public UndirectedEdgesVAO(OpenGLOptions openGLOptions, + GLBuffer attributesBuffer) { + super(openGLOptions); + this.attributesBuffer = attributesBuffer; + } + + @Override + protected void configure(GL3ES3 gl) { + vertexGLBufferUndirected.bind(gl); + { + gl.glVertexAttribPointer(SHADER_VERT_LOCATION, CommonEdgeLineUndirected.VERTEX_FLOATS, GL_FLOAT, false, + 0, 0); + } + vertexGLBufferUndirected.unbind(gl); + + attributesBuffer.bind(gl); + { + final int stride = ATTRIBS_STRIDE * Float.BYTES; + int offset = 0; + gl.glVertexAttribPointer(SHADER_POSITION_LOCATION, CommonEdgeLineUndirected.POSITION_SOURCE_FLOATS, + GL_FLOAT, false, stride, offset); + offset += CommonEdgeLineUndirected.POSITION_SOURCE_FLOATS * Float.BYTES; + + gl.glVertexAttribPointer(SHADER_POSITION_TARGET_LOCATION, + CommonEdgeLineUndirected.POSITION_TARGET_FLOATS, GL_FLOAT, false, stride, offset); + offset += CommonEdgeLineUndirected.POSITION_TARGET_FLOATS * Float.BYTES; + + gl.glVertexAttribPointer(SHADER_SIZE_LOCATION, CommonEdgeLineUndirected.SIZE_FLOATS, GL_FLOAT, false, + stride, offset); + offset += CommonEdgeLineUndirected.SIZE_FLOATS * Float.BYTES; + + gl.glVertexAttribPointer(SHADER_COLOR_LOCATION, CommonEdgeLineUndirected.COLOR_FLOATS * Float.BYTES, + GL_UNSIGNED_BYTE, false, stride, offset); + offset += CommonEdgeLineUndirected.COLOR_FLOATS * Float.BYTES; + + gl.glVertexAttribPointer(SHADER_SOURCE_SIZE_LOCATION, CommonEdgeLineUndirected.SOURCE_SIZE_FLOATS, + GL_FLOAT, false, stride, offset); + offset += CommonEdgeLineUndirected.SOURCE_SIZE_FLOATS * Float.BYTES; + + gl.glVertexAttribPointer(SHADER_TARGET_SIZE_LOCATION, CommonEdgeLineUndirected.TARGET_SIZE_FLOATS, + GL_FLOAT, false, stride, offset); + } + attributesBuffer.unbind(gl); + } + + @Override + protected int[] getUsedAttributeLocations() { + return new int[] { + SHADER_VERT_LOCATION, + SHADER_POSITION_LOCATION, + SHADER_POSITION_TARGET_LOCATION, + SHADER_SIZE_LOCATION, + SHADER_COLOR_LOCATION, + SHADER_SOURCE_SIZE_LOCATION, + SHADER_TARGET_SIZE_LOCATION + }; + } + + @Override + protected int[] getInstancedAttributeLocations() { + if (instanced) { + return new int[] { + SHADER_POSITION_LOCATION, + SHADER_POSITION_TARGET_LOCATION, + SHADER_SIZE_LOCATION, + SHADER_COLOR_LOCATION, + SHADER_SOURCE_SIZE_LOCATION, + SHADER_TARGET_SIZE_LOCATION + }; + } else { + return null; + } + } + + } + + private class DirectedEdgesVAO extends GLVertexArrayObject { + + private final GLBuffer attributesBuffer; + + public DirectedEdgesVAO(OpenGLOptions openGLOptions, + GLBuffer attributesBuffer) { + super(openGLOptions); + this.attributesBuffer = attributesBuffer; + } + + @Override + protected void configure(GL3ES3 gl) { + vertexGLBufferDirected.bind(gl); + { + + gl.glVertexAttribPointer(SHADER_VERT_LOCATION, CommonEdgeLineDirected.VERTEX_FLOATS, GL_FLOAT, false, 0, + 0); + } + vertexGLBufferDirected.unbind(gl); + + attributesBuffer.bind(gl); + { + int stride = ATTRIBS_STRIDE * Float.BYTES; + int offset = 0; + gl.glVertexAttribPointer(SHADER_POSITION_LOCATION, CommonEdgeLineDirected.POSITION_SOURCE_FLOATS, + GL_FLOAT, false, stride, offset); + offset += CommonEdgeLineDirected.POSITION_SOURCE_FLOATS * Float.BYTES; + + gl.glVertexAttribPointer(SHADER_POSITION_TARGET_LOCATION, CommonEdgeLineDirected.POSITION_TARGET_FLOATS, + GL_FLOAT, false, stride, offset); + offset += CommonEdgeLineDirected.POSITION_TARGET_FLOATS * Float.BYTES; + + gl.glVertexAttribPointer(SHADER_SIZE_LOCATION, CommonEdgeLineDirected.SIZE_FLOATS, GL_FLOAT, false, + stride, offset); + offset += CommonEdgeLineDirected.SIZE_FLOATS * Float.BYTES; + + gl.glVertexAttribPointer(SHADER_COLOR_LOCATION, CommonEdgeLineDirected.COLOR_FLOATS * Float.BYTES, + GL_UNSIGNED_BYTE, false, stride, offset); + offset += CommonEdgeLineDirected.COLOR_FLOATS * Float.BYTES; + + gl.glVertexAttribPointer(SHADER_SOURCE_SIZE_LOCATION, CommonEdgeLineDirected.SOURCE_SIZE_FLOATS, + GL_FLOAT, false, stride, offset); + offset += CommonEdgeLineDirected.SOURCE_SIZE_FLOATS * Float.BYTES; + + gl.glVertexAttribPointer(SHADER_TARGET_SIZE_LOCATION, CommonEdgeLineDirected.TARGET_SIZE_FLOATS, + GL_FLOAT, false, stride, offset); + } + attributesBuffer.unbind(gl); + } + + @Override + protected int[] getUsedAttributeLocations() { + return new int[] { + SHADER_VERT_LOCATION, + SHADER_POSITION_LOCATION, + SHADER_POSITION_TARGET_LOCATION, + SHADER_SIZE_LOCATION, + SHADER_COLOR_LOCATION, + SHADER_SOURCE_SIZE_LOCATION, + SHADER_TARGET_SIZE_LOCATION + }; + } + + @Override + protected int[] getInstancedAttributeLocations() { + if (instanced) { + return new int[] { + SHADER_POSITION_LOCATION, + SHADER_POSITION_TARGET_LOCATION, + SHADER_SIZE_LOCATION, + SHADER_COLOR_LOCATION, + SHADER_SOURCE_SIZE_LOCATION, + SHADER_TARGET_SIZE_LOCATION + }; + } else { + return null; + } + } + } + + public EdgesCallback getEdgesCallback() { + return edgesCallback; + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/common/AbstractEdgeRenderer.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/common/AbstractEdgeRenderer.java new file mode 100644 index 0000000000..cb9ac8ca73 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/common/AbstractEdgeRenderer.java @@ -0,0 +1,31 @@ +package org.gephi.viz.engine.jogl.pipeline.common; + +import java.util.EnumSet; +import org.gephi.viz.engine.jogl.JOGLRenderingTarget; +import org.gephi.viz.engine.pipeline.PipelineCategory; +import org.gephi.viz.engine.pipeline.RenderingLayer; +import org.gephi.viz.engine.spi.Renderer; +import org.gephi.viz.engine.util.gl.Constants; + +public abstract class AbstractEdgeRenderer implements Renderer { + private static final EnumSet LAYERS = EnumSet.of( + RenderingLayer.BACK1, + RenderingLayer.BACK2 + ); + + @Override + public EnumSet getLayers() { + return LAYERS; + } + + @Override + public int getOrder() { + return Constants.RENDERING_ORDER_EDGES; + } + + @Override + public String getCategory() { + return PipelineCategory.EDGE; + } + +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/common/AbstractNodeData.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/common/AbstractNodeData.java new file mode 100644 index 0000000000..3dbcbb0a74 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/common/AbstractNodeData.java @@ -0,0 +1,577 @@ +package org.gephi.viz.engine.jogl.pipeline.common; + +import static com.jogamp.opengl.GL.GL_FLOAT; +import static com.jogamp.opengl.GL.GL_UNSIGNED_BYTE; +import static com.jogamp.opengl.GL.GL_UNSIGNED_INT; +import static org.gephi.viz.engine.jogl.util.gl.GLBufferMutable.GL_BUFFER_TYPE_ARRAY; +import static org.gephi.viz.engine.jogl.util.gl.GLBufferMutable.GL_BUFFER_USAGE_STATIC_DRAW; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_COLOR_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_POSITION_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_SIZE_LOCATION; +import static org.gephi.viz.engine.util.gl.Constants.SHADER_VERT_LOCATION; +import static org.gephi.viz.engine.util.gl.GLConstants.INDIRECT_DRAW_COMMAND_INTS_COUNT; + +import com.jogamp.newt.event.NEWTEvent; +import com.jogamp.opengl.GL; +import com.jogamp.opengl.GL3ES3; +import com.jogamp.opengl.util.GLBuffers; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import org.gephi.graph.api.Node; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.VizEngineModel; +import org.gephi.viz.engine.jogl.JOGLRenderingTarget; +import org.gephi.viz.engine.jogl.models.mesh.NodeDiskVertexMeshGenerator; +import org.gephi.viz.engine.jogl.models.nodedisk.CommonNodeDiskModel; +import org.gephi.viz.engine.jogl.models.nodedisk.NodeDiskModelNoSelection; +import org.gephi.viz.engine.jogl.models.nodedisk.NodeDiskModelSelectionSelected; +import org.gephi.viz.engine.jogl.models.nodedisk.NodeDiskModelSelectionUnselected; +import org.gephi.viz.engine.jogl.util.ManagedDirectBuffer; +import org.gephi.viz.engine.jogl.util.Mesh; +import org.gephi.viz.engine.jogl.util.gl.GLBuffer; +import org.gephi.viz.engine.jogl.util.gl.GLBufferMutable; +import org.gephi.viz.engine.jogl.util.gl.GLVertexArrayObject; +import org.gephi.viz.engine.pipeline.RenderingLayer; +import org.gephi.viz.engine.pipeline.common.InstanceCounter; +import org.gephi.viz.engine.status.GraphRenderingOptions; +import org.gephi.viz.engine.util.ColorUtils; +import org.gephi.viz.engine.util.gl.Constants; +import org.gephi.viz.engine.util.gl.OpenGLOptions; +import org.gephi.viz.engine.util.structure.NodesCallback; + +/** + * + * @author Eduardo Ramos + */ +public abstract class AbstractNodeData extends AbstractSelectionData { + + protected static final int OBSERVED_SIZE_LOD_THRESHOLD_64 = 128; + protected static final int OBSERVED_SIZE_LOD_THRESHOLD_32 = 16; + protected static final int OBSERVED_SIZE_LOD_THRESHOLD_16 = 2; + + // NOTE: Why secondary buffers and VAOs? + // Sadly, we cannot use glDrawArraysInstancedBaseInstance in MacOS and it will be never available + + protected GLBuffer vertexGLBuffer; + protected GLBuffer attributesGLBuffer; + protected GLBuffer attributesGLBufferSecondary; + protected GLBuffer commandsGLBuffer; + protected final NodesCallback nodesCallback; + + protected static final int ATTRIBS_STRIDE = CommonNodeDiskModel.TOTAL_ATTRIBUTES_FLOATS; + + protected final NodeDiskModelNoSelection diskModelNoSelection; + protected final NodeDiskModelSelectionSelected diskModelSelectionSelected; + protected final NodeDiskModelSelectionUnselected diskModelSelectionUnselected; + + protected final Mesh circleMesh64 = NodeDiskVertexMeshGenerator.generateFilledCircle(64); + protected final Mesh circleMesh32 = NodeDiskVertexMeshGenerator.generateFilledCircle(32); + protected final Mesh circleMesh16 = NodeDiskVertexMeshGenerator.generateFilledCircle(16); + protected final Mesh circleMesh8 = NodeDiskVertexMeshGenerator.generateFilledCircle(8); + + + protected final int firstVertex64; + protected final int firstVertex32; + protected final int firstVertex16; + protected final int firstVertex8; + protected final boolean instancedRendering; + protected final boolean indirectCommands; + + // States + protected final InstanceCounter instanceCounter = new InstanceCounter(); + protected float maxNodeSize = 0; + protected float currentNodeScale; + protected float currentZoom; + + + // Buffers for vertex attributes: + protected static final int BATCH_NODES_SIZE = 32768; + protected ManagedDirectBuffer attributesBuffer; + protected float[] attributesBufferBatch; + protected ManagedDirectBuffer commandsBuffer; + private int[] commandsBufferBatch; + + public AbstractNodeData(final NodesCallback nodesCallback, final boolean instancedRendering, + final boolean indirectCommands) { + this.startedTime = System.currentTimeMillis(); + this.instancedRendering = instancedRendering; + this.indirectCommands = indirectCommands; + this.nodesCallback = nodesCallback; + + diskModelNoSelection = new NodeDiskModelNoSelection(); + diskModelSelectionSelected = new NodeDiskModelSelectionSelected(); + diskModelSelectionUnselected = new NodeDiskModelSelectionUnselected(); + + + firstVertex64 = 0; + firstVertex32 = circleMesh64.vertexCount; + firstVertex16 = circleMesh64.vertexCount + circleMesh32.vertexCount; + firstVertex8 = circleMesh64.vertexCount + circleMesh32.vertexCount + circleMesh16.vertexCount; + } + + public void init(GL3ES3 gl) { + diskModelNoSelection.initGLPrograms(gl); + diskModelSelectionSelected.initGLPrograms(gl); + diskModelSelectionUnselected.initGLPrograms(gl); + initBuffers(gl); + } + + protected void initBuffers(GL gl) { + attributesBufferBatch = new float[ATTRIBS_STRIDE * BATCH_NODES_SIZE]; + attributesBuffer = new ManagedDirectBuffer(GL_FLOAT, ATTRIBS_STRIDE * BATCH_NODES_SIZE); + + if (indirectCommands) { + commandsBufferBatch = new int[INDIRECT_DRAW_COMMAND_INTS_COUNT * BATCH_NODES_SIZE]; + commandsBuffer = + new ManagedDirectBuffer(GL_UNSIGNED_INT, INDIRECT_DRAW_COMMAND_INTS_COUNT * BATCH_NODES_SIZE); + } + } + + protected void initCirclesGLVertexBuffer(GL gl, final int bufferName) { + + final float[] circleVertexData = new float[ + circleMesh64.vertexData.length + + circleMesh32.vertexData.length + + circleMesh16.vertexData.length + + circleMesh8.vertexData.length + ]; + + int offset = 0; + System.arraycopy(circleMesh64.vertexData, 0, circleVertexData, offset, circleMesh64.vertexData.length); + offset += circleMesh64.vertexData.length; + System.arraycopy(circleMesh32.vertexData, 0, circleVertexData, offset, circleMesh32.vertexData.length); + offset += circleMesh32.vertexData.length; + System.arraycopy(circleMesh16.vertexData, 0, circleVertexData, offset, circleMesh16.vertexData.length); + offset += circleMesh16.vertexData.length; + System.arraycopy(circleMesh8.vertexData, 0, circleVertexData, offset, circleMesh8.vertexData.length); + + + final FloatBuffer circleVertexBuffer = GLBuffers.newDirectFloatBuffer(circleVertexData); + vertexGLBuffer = new GLBufferMutable(bufferName, GL_BUFFER_TYPE_ARRAY); + vertexGLBuffer.bind(gl); + vertexGLBuffer.init(gl, circleVertexBuffer, GL_BUFFER_USAGE_STATIC_DRAW); + vertexGLBuffer.unbind(gl); + } + + protected int setupShaderProgramForRenderingLayer(final GL3ES3 gl, + final RenderingLayer layer, + final NodeWorldData data, + final float[] mvpFloats) { + final boolean someSelection = data.hasSomeSelection(); + final boolean renderingUnselectedNodes = layer.getLevel() == 1; + + if (!someSelection && renderingUnselectedNodes) { + return 0; + } + + final float[] backgroundColorFloats = data.getBackgroundColor(); + + final int instanceCount; + // if the background is dark (luma <.5) the node border with lighten (color * (factor > 1)) otherwise it's darken (color * (factor < 1)) + float nodeBorderColorFactor = + ColorUtils.isColorDark(backgroundColorFloats) ? 1f + Constants.getNodeBorderDarkenFactor() : + Constants.getNodeBorderDarkenFactor(); + + if (renderingUnselectedNodes) { + instanceCount = instanceCounter.unselectedCountToDraw; + final float colorLightenFactor = data.getLightenNonSelectedFactor(); + + diskModelSelectionUnselected.useProgram( + gl, + mvpFloats, + backgroundColorFloats, + colorLightenFactor, + globalTime, + this.selectedTime, + nodeBorderColorFactor + ); + + setupSecondaryVertexArrayAttributes(gl, data); + } else { + instanceCount = instanceCounter.selectedCountToDraw; + + if (someSelection) { + + diskModelSelectionSelected.useProgram( + gl, + mvpFloats, + globalTime, + this.selectedTime, + nodeBorderColorFactor + ); + } else { + diskModelNoSelection.useProgram(gl, mvpFloats, nodeBorderColorFactor); + } + + setupVertexArrayAttributes(gl, data); + } + + return instanceCount; + } + + public NodeWorldData createWorldData(VizEngineModel model, VizEngine engine) { + return new NodeWorldData( + someSelection, + model.getRenderingOptions().getBackgroundColor(), + maxNodeSize, + currentZoom, + model.getRenderingOptions().isLightenNonSelected() ? + model.getRenderingOptions().getLightenNonSelectedFactor() : 0f, + engine.getOpenGLOptions() + ); + } + + public void update(GraphRenderingOptions renderingOptions) { + if (!renderingOptions.isShowNodes()) { + instanceCounter.clearCount(); + return; + } + + //Selection and other states updates + currentZoom = renderingOptions.getZoom(); + currentNodeScale = renderingOptions.getNodeScale(); + + // Get visible nodes + final Node[] visibleNodesArray = nodesCallback.getNodesArray(); + final int maxIndex = nodesCallback.getMaxIndex(); + final int totalNodes = nodesCallback.getCount(); + someSelection = nodesCallback.hasSelection(); + + attributesBuffer.ensureCapacity(totalNodes * ATTRIBS_STRIDE); + if (indirectCommands) { + commandsBuffer.ensureCapacity(totalNodes * INDIRECT_DRAW_COMMAND_INTS_COUNT); + } + + final FloatBuffer attribs = attributesBuffer.floatBuffer(); + final IntBuffer commands = indirectCommands ? commandsBuffer.intBuffer() : null; + + + int newNodesCountUnselected = 0; + int newNodesCountSelected = 0; + + float newMaxNodeSize = nodesCallback.getMaxNodeSize() * currentNodeScale; + + int attributesIndex = 0; + int commandIndex = 0; + int instanceId = 0; + if (someSelection) { + //First non-selected (bottom): + for (int j = 0; j <= maxIndex; j++) { + final Node node = visibleNodesArray[j]; + if (node == null) { + continue; + } + + final boolean selected = nodesCallback.isSelected(j, true); + if (selected) { + continue; + } + + newNodesCountUnselected++; + + fillNodeAttributesData(node, attributesIndex); + attributesIndex += ATTRIBS_STRIDE; + + if (attributesIndex == attributesBufferBatch.length) { + attribs.put(attributesBufferBatch); + attributesIndex = 0; + } + + if (indirectCommands) { + fillNodeCommandData(node, commandIndex, instanceId); + instanceId++; + commandIndex += INDIRECT_DRAW_COMMAND_INTS_COUNT; + + if (commandIndex == commandsBufferBatch.length) { + commands.put(commandsBufferBatch); + commandIndex = 0; + } + } + } + + instanceId = + 0;//Reset instance id, since we draw elements in 2 separate attribute buffers (main/selected and secondary/unselected) + //Then selected ones (up): + for (int j = 0; j <= maxIndex; j++) { + final Node node = visibleNodesArray[j]; + if (node == null) { + continue; + } + + final boolean selected = nodesCallback.isSelected(j, true); + if (!selected) { + continue; + } + + newNodesCountSelected++; + + fillNodeAttributesData(node, attributesIndex); + attributesIndex += ATTRIBS_STRIDE; + + if (attributesIndex == attributesBufferBatch.length) { + attribs.put(attributesBufferBatch); + attributesIndex = 0; + } + + if (indirectCommands) { + fillNodeCommandData(node, commandIndex, instanceId); + instanceId++; + commandIndex += INDIRECT_DRAW_COMMAND_INTS_COUNT; + + if (commandIndex == commandsBufferBatch.length) { + commands.put(commandsBufferBatch); + commandIndex = 0; + } + } + } + } else { + //Just all nodes, no selection active: + for (int j = 0; j <= maxIndex; j++) { + final Node node = visibleNodesArray[j]; + if (node == null) { + continue; + } + + newNodesCountSelected++; + + fillNodeAttributesData(node, attributesIndex); + attributesIndex += ATTRIBS_STRIDE; + + if (attributesIndex == attributesBufferBatch.length) { + attribs.put(attributesBufferBatch); + attributesIndex = 0; + } + + if (indirectCommands) { + fillNodeCommandData(node, commandIndex, instanceId); + instanceId++; + commandIndex += INDIRECT_DRAW_COMMAND_INTS_COUNT; + + if (commandIndex == commandsBufferBatch.length) { + commands.put(commandsBufferBatch); + commandIndex = 0; + } + } + } + } + + //Remaining: + if (attributesIndex > 0) { + attribs.put(attributesBufferBatch, 0, attributesIndex); + } + + if (indirectCommands && commandIndex > 0) { + commands.put(commandsBufferBatch, 0, commandIndex); + } + + instanceCounter.unselectedCount = newNodesCountUnselected; + instanceCounter.selectedCount = newNodesCountSelected; + maxNodeSize = newMaxNodeSize; + } + + protected void fillNodeAttributesData(final Node node, final int index) { + final float x = node.x(); + final float y = node.y(); + final float size = node.size() * currentNodeScale; + final int rgba = node.getRGBA(); + + //Position: + attributesBufferBatch[index] = x; + attributesBufferBatch[index + 1] = y; + + //Color: + attributesBufferBatch[index + 2] = Float.intBitsToFloat(rgba); + + //Size: + attributesBufferBatch[index + 3] = size; + } + + protected void fillNodeCommandData(final Node node, final int index, final int instanceId) { + //Indirect Draw: + //Choose LOD: + final float observedSize = node.size() * currentNodeScale * currentZoom; + + final int circleVertexCount; + final int firstVertex; + if (observedSize > OBSERVED_SIZE_LOD_THRESHOLD_64) { + circleVertexCount = circleMesh64.vertexCount; + firstVertex = firstVertex64; + } else if (observedSize > OBSERVED_SIZE_LOD_THRESHOLD_32) { + circleVertexCount = circleMesh32.vertexCount; + firstVertex = firstVertex32; + } else if (observedSize > OBSERVED_SIZE_LOD_THRESHOLD_16) { + circleVertexCount = circleMesh16.vertexCount; + firstVertex = firstVertex16; + } else { + circleVertexCount = circleMesh8.vertexCount; + firstVertex = firstVertex8; + } + + commandsBufferBatch[index] = circleVertexCount;//vertex count + commandsBufferBatch[index + 1] = 1;//instance count + commandsBufferBatch[index + 2] = firstVertex;//first vertex + commandsBufferBatch[index + 3] = instanceId;//base instance + } + + private NodesVAO nodesVAO; + private NodesVAO nodesVAOSecondary; + + public void setupVertexArrayAttributes(GL3ES3 gl, NodeWorldData data) { + if (nodesVAO == null) { + nodesVAO = new NodesVAO(data.getOpenGLOptions(), + vertexGLBuffer, attributesGLBuffer + ); + } + + nodesVAO.use(gl); + } + + public void setupSecondaryVertexArrayAttributes(GL3ES3 gl, NodeWorldData data) { + if (nodesVAOSecondary == null) { + nodesVAOSecondary = new NodesVAO(data.getOpenGLOptions(), + vertexGLBuffer, attributesGLBufferSecondary + ); + } + + nodesVAOSecondary.use(gl); + } + + public void unsetupVertexArrayAttributes(GL3ES3 gl) { + if (nodesVAO != null) { + nodesVAO.stopUsing(gl); + } + + if (nodesVAOSecondary != null) { + nodesVAOSecondary.stopUsing(gl); + } + } + + public void dispose(GL gl) { + attributesBufferBatch = null; + commandsBufferBatch = null; + if (attributesBuffer != null) { + attributesBuffer.destroy(); + attributesBuffer = null; + } + + if (vertexGLBuffer != null) { + vertexGLBuffer.destroy(gl); + vertexGLBuffer = null; + } + + if (attributesGLBuffer != null) { + attributesGLBuffer.destroy(gl); + attributesGLBuffer = null; + } + + if (attributesGLBufferSecondary != null) { + attributesGLBufferSecondary.destroy(gl); + attributesGLBufferSecondary = null; + } + if (commandsBuffer != null) { + commandsBuffer.destroy(); + commandsBuffer = null; + } + + if (commandsGLBuffer != null) { + commandsGLBuffer.destroy(gl); + commandsGLBuffer = null; + } + + // Destroy and reset VAOs to prevent reuse after re-init + if (nodesVAO != null) { + nodesVAO.destroy(gl.getGL3ES3()); + nodesVAO = null; + } + + if (nodesVAOSecondary != null) { + nodesVAOSecondary.destroy(gl.getGL3ES3()); + nodesVAOSecondary = null; + } + + // Destroy shader programs + diskModelNoSelection.destroy(gl.getGL3ES3()); + diskModelSelectionSelected.destroy(gl.getGL3ES3()); + diskModelSelectionUnselected.destroy(gl.getGL3ES3()); + + nodesCallback.reset(); + } + + private class NodesVAO extends GLVertexArrayObject { + + private final GLBuffer vertexBuffer; + private final GLBuffer attributesBuffer; + + public NodesVAO(OpenGLOptions openGLOptions, final GLBuffer vertexBuffer, + final GLBuffer attributesBuffer) { + super(openGLOptions); + this.vertexBuffer = vertexBuffer; + this.attributesBuffer = attributesBuffer; + } + + @Override + protected void configure(GL3ES3 gl) { + vertexBuffer.bind(gl); + { + gl.glVertexAttribPointer(SHADER_VERT_LOCATION, CommonNodeDiskModel.VERTEX_FLOATS, GL_FLOAT, false, + 0, 0); + } + vertexBuffer.unbind(gl); + + if (instancedRendering) { + attributesBuffer.bind(gl); + { + final int stride = ATTRIBS_STRIDE * Float.BYTES; + int offset = 0; + + gl.glVertexAttribPointer(SHADER_POSITION_LOCATION, CommonNodeDiskModel.POSITION_FLOATS, + GL_FLOAT, false, + stride, offset); + offset += CommonNodeDiskModel.POSITION_FLOATS * Float.BYTES; + + gl.glVertexAttribPointer(SHADER_COLOR_LOCATION, CommonNodeDiskModel.COLOR_FLOATS * Float.BYTES, + GL_UNSIGNED_BYTE, false, stride, offset); + offset += CommonNodeDiskModel.COLOR_FLOATS * Float.BYTES; + + gl.glVertexAttribPointer(SHADER_SIZE_LOCATION, CommonNodeDiskModel.SIZE_FLOATS, GL_FLOAT, + false, stride, + offset); + } + attributesBuffer.unbind(gl); + } + } + + @Override + protected int[] getUsedAttributeLocations() { + if (instancedRendering) { + return new int[] { + SHADER_VERT_LOCATION, + SHADER_POSITION_LOCATION, + SHADER_COLOR_LOCATION, + SHADER_SIZE_LOCATION + }; + } else { + return new int[] { + SHADER_VERT_LOCATION + }; + } + } + + @Override + protected int[] getInstancedAttributeLocations() { + if (instancedRendering) { + return new int[] { + SHADER_POSITION_LOCATION, + SHADER_COLOR_LOCATION, + SHADER_SIZE_LOCATION + }; + } else { + return null; + } + } + } + + public NodesCallback getNodesCallback() { + return nodesCallback; + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/common/AbstractNodeRenderer.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/common/AbstractNodeRenderer.java new file mode 100644 index 0000000000..365f96e7e6 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/common/AbstractNodeRenderer.java @@ -0,0 +1,30 @@ +package org.gephi.viz.engine.jogl.pipeline.common; + +import java.util.EnumSet; +import org.gephi.viz.engine.jogl.JOGLRenderingTarget; +import org.gephi.viz.engine.pipeline.PipelineCategory; +import org.gephi.viz.engine.pipeline.RenderingLayer; +import org.gephi.viz.engine.spi.Renderer; +import org.gephi.viz.engine.util.gl.Constants; + +public abstract class AbstractNodeRenderer implements Renderer { + public static final EnumSet LAYERS = EnumSet.of( + RenderingLayer.MIDDLE1, + RenderingLayer.MIDDLE2 + ); + + @Override + public EnumSet getLayers() { + return LAYERS; + } + + @Override + public int getOrder() { + return Constants.RENDERING_ORDER_NODES; + } + + @Override + public String getCategory() { + return PipelineCategory.NODE; + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/common/AbstractSelectionData.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/common/AbstractSelectionData.java new file mode 100644 index 0000000000..d32ea34183 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/common/AbstractSelectionData.java @@ -0,0 +1,20 @@ +package org.gephi.viz.engine.jogl.pipeline.common; + +abstract public class AbstractSelectionData { + protected long startedTime = 0L; + protected boolean selectionToggle = false; + protected float globalTime = 0f; + protected float selectedTime = 0f; + + protected volatile boolean someSelection; + + protected void refreshTime() { + globalTime = (System.currentTimeMillis() - this.startedTime) / 1000.0f; + + if (selectionToggle != someSelection) { + selectionToggle = someSelection; + selectedTime = globalTime; + } + } + +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/common/EdgeWorldData.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/common/EdgeWorldData.java new file mode 100644 index 0000000000..0bb5786561 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/common/EdgeWorldData.java @@ -0,0 +1,87 @@ +package org.gephi.viz.engine.jogl.pipeline.common; + +import org.gephi.viz.engine.spi.WorldData; +import org.gephi.viz.engine.util.gl.OpenGLOptions; + +public class EdgeWorldData implements WorldData { + + private final float[] backgroundColor; + private final boolean someSelection; + private final boolean edgeSelectionColor; + private final float minWeight; + private final float maxWeight; + private final float edgeRescaleMin; + private final float edgeRescaleMax; + private final float nodeScale; + private final float edgeScale; + private final float lightenNonSelectedFactor; + private final OpenGLOptions openGLOptions; + + public EdgeWorldData(float[] backgroundColor, + boolean someSelection, + boolean edgeSelectionColor, + float minWeight, + float maxWeight, + float edgeRescaleMin, + float edgeRescaleMax, + float nodeScale, + float edgeScale, + float lightenNonSelectedFactor, + OpenGLOptions openGLOptions) { + this.backgroundColor = backgroundColor; + this.someSelection = someSelection; + this.edgeSelectionColor = edgeSelectionColor; + this.minWeight = minWeight; + this.maxWeight = maxWeight; + this.edgeRescaleMin = edgeRescaleMin; + this.edgeRescaleMax = edgeRescaleMax; + this.nodeScale = nodeScale; + this.edgeScale = edgeScale; + this.lightenNonSelectedFactor = lightenNonSelectedFactor; + this.openGLOptions = openGLOptions; + } + + public float getLightenNonSelectedFactor() { + return lightenNonSelectedFactor; + } + + public float getMinWeight() { + return minWeight; + } + + public float getMaxWeight() { + return maxWeight; + } + + public float getEdgeRescaleMax() { + return edgeRescaleMax; + } + + public float getEdgeRescaleMin() { + return edgeRescaleMin; + } + + public float getEdgeScale() { + return edgeScale; + } + + public float getNodeScale() { + return nodeScale; + } + + public float[] getBackgroundColor() { + return backgroundColor; + } + + public boolean hasSomeSelection() { + return someSelection; + } + + public boolean isEdgeSelectionColor() { + return edgeSelectionColor; + } + + public OpenGLOptions getOpenGLOptions() { + return openGLOptions; + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/common/LabelWorldData.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/common/LabelWorldData.java new file mode 100644 index 0000000000..5926d8dec0 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/common/LabelWorldData.java @@ -0,0 +1,30 @@ +package org.gephi.viz.engine.jogl.pipeline.common; + +import jogamp.text.TextRenderer; +import org.gephi.viz.engine.jogl.pipeline.text.AbstractLabelData; +import org.gephi.viz.engine.spi.WorldData; + +public class LabelWorldData implements WorldData { + + private final TextRenderer textRenderer; + private final AbstractLabelData.LabelBatch[] labelBatches; + private final int maxIndex; + + public LabelWorldData(TextRenderer textRenderer, AbstractLabelData.LabelBatch[] labelBatches, int maxIndex) { + this.textRenderer = textRenderer; + this.labelBatches = labelBatches; + this.maxIndex = maxIndex; + } + + public TextRenderer getTextRenderer() { + return textRenderer; + } + + public AbstractLabelData.LabelBatch[] getLabelBatches() { + return labelBatches; + } + + public int getMaxIndex() { + return maxIndex; + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/common/NodeWorldData.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/common/NodeWorldData.java new file mode 100644 index 0000000000..4b0afce46c --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/common/NodeWorldData.java @@ -0,0 +1,53 @@ +package org.gephi.viz.engine.jogl.pipeline.common; + +import org.gephi.viz.engine.spi.WorldData; +import org.gephi.viz.engine.util.gl.OpenGLOptions; + +public class NodeWorldData implements WorldData { + + private final boolean someSelection; + private final float[] backgroundColor; + private final float maxNodeSize; + private final float zoom; + private final float lightenNonSelectedFactor; + private final OpenGLOptions openGLOptions; + + public NodeWorldData(boolean someSelection, + float[] backgroundColor, + float maxNodeSize, + float zoom, + float lightenNonSelectedFactor, + OpenGLOptions openGLOptions) { + this.someSelection = someSelection; + this.backgroundColor = backgroundColor; + this.maxNodeSize = maxNodeSize; + this.zoom = zoom; + this.lightenNonSelectedFactor = lightenNonSelectedFactor; + this.openGLOptions = openGLOptions; + } + + public boolean hasSomeSelection() { + return someSelection; + } + + public float getMaxNodeSize() { + return maxNodeSize; + } + + public float getZoom() { + return zoom; + } + + public float[] getBackgroundColor() { + return backgroundColor; + } + + public float getLightenNonSelectedFactor() { + return lightenNonSelectedFactor; + } + + public OpenGLOptions getOpenGLOptions() { + return openGLOptions; + } + +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/common/VoidWorldData.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/common/VoidWorldData.java new file mode 100644 index 0000000000..e1be76ae3e --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/common/VoidWorldData.java @@ -0,0 +1,8 @@ +package org.gephi.viz.engine.jogl.pipeline.common; + +import org.gephi.viz.engine.spi.WorldData; + +public class VoidWorldData implements WorldData { + + public static final VoidWorldData INSTANCE = new VoidWorldData(); +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/indirect/IndirectNodeData.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/indirect/IndirectNodeData.java new file mode 100644 index 0000000000..6c2a65d473 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/indirect/IndirectNodeData.java @@ -0,0 +1,123 @@ +package org.gephi.viz.engine.jogl.pipeline.indirect; + +import static org.gephi.viz.engine.util.gl.GLConstants.INDIRECT_DRAW_COMMAND_BYTES; +import static org.gephi.viz.engine.util.gl.GLConstants.INDIRECT_DRAW_COMMAND_INTS_COUNT; + +import com.jogamp.opengl.GL; +import com.jogamp.opengl.GL4; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import org.gephi.viz.engine.jogl.pipeline.common.AbstractNodeData; +import org.gephi.viz.engine.jogl.pipeline.common.NodeWorldData; +import org.gephi.viz.engine.jogl.util.gl.GLBufferMutable; +import org.gephi.viz.engine.jogl.util.gl.GLFunctions; +import org.gephi.viz.engine.pipeline.RenderingLayer; +import org.gephi.viz.engine.util.structure.NodesCallback; + +/** + * + * @author Eduardo Ramos + */ +public class IndirectNodeData extends AbstractNodeData { + + private final int[] bufferName = new int[4]; + + private static final int VERT_BUFFER = 0; + private static final int ATTRIBS_BUFFER = 1; + private static final int ATTRIBS_BUFFER_SECONDARY = 2; + private static final int INDIRECT_DRAW_BUFFER = 3; + + public IndirectNodeData(NodesCallback nodesCallback) { + super(nodesCallback, true, true); + } + + public void drawIndirect(GL4 gl, RenderingLayer layer, NodeWorldData data, float[] mvpFloats) { + refreshTime(); + + drawIndirectInternal(gl, layer, data, mvpFloats); + } + + private void drawIndirectInternal(final GL4 gl, + final RenderingLayer layer, + final NodeWorldData data, + final float[] mvpFloats) { + final int instanceCount = + setupShaderProgramForRenderingLayer(gl, layer, data, mvpFloats); + + if (instanceCount <= 0) { + GLFunctions.stopUsingProgram(gl); + unsetupVertexArrayAttributes(gl); + return; + } + + final boolean renderingUnselectedNodes = layer.getLevel() == 1; + final int instancesOffset = renderingUnselectedNodes ? 0 : instanceCounter.unselectedCountToDraw; + + commandsGLBuffer.bind(gl); + GLFunctions.drawIndirect( + gl, instanceCount, instancesOffset + ); + commandsGLBuffer.unbind(gl); + GLFunctions.stopUsingProgram(gl); + unsetupVertexArrayAttributes(gl); + } + + @Override + protected void initBuffers(final GL gl) { + super.initBuffers(gl); + + gl.glGenBuffers(bufferName.length, bufferName, 0); + + initCirclesGLVertexBuffer(gl, bufferName[VERT_BUFFER]); + + //Initialize for batch nodes size: + attributesGLBuffer = new GLBufferMutable(bufferName[ATTRIBS_BUFFER], GLBufferMutable.GL_BUFFER_TYPE_ARRAY); + attributesGLBuffer.bind(gl); + attributesGLBuffer.init(gl, ATTRIBS_STRIDE * Float.BYTES * BATCH_NODES_SIZE, + GLBufferMutable.GL_BUFFER_USAGE_DYNAMIC_DRAW); + attributesGLBuffer.unbind(gl); + + attributesGLBufferSecondary = + new GLBufferMutable(bufferName[ATTRIBS_BUFFER_SECONDARY], GLBufferMutable.GL_BUFFER_TYPE_ARRAY); + attributesGLBufferSecondary.bind(gl); + attributesGLBufferSecondary.init(gl, ATTRIBS_STRIDE * Float.BYTES * BATCH_NODES_SIZE, + GLBufferMutable.GL_BUFFER_USAGE_DYNAMIC_DRAW); + attributesGLBufferSecondary.unbind(gl); + + commandsGLBuffer = + new GLBufferMutable(bufferName[INDIRECT_DRAW_BUFFER], GLBufferMutable.GL_BUFFER_TYPE_DRAW_INDIRECT); + commandsGLBuffer.bind(gl); + commandsGLBuffer.init(gl, INDIRECT_DRAW_COMMAND_BYTES * BATCH_NODES_SIZE, + GLBufferMutable.GL_BUFFER_USAGE_DYNAMIC_DRAW); + commandsGLBuffer.unbind(gl); + } + + public void updateBuffers(final GL4 gl) { + final FloatBuffer buf = attributesBuffer.floatBuffer(); + + buf.limit(instanceCounter.unselectedCount * ATTRIBS_STRIDE); + buf.position(0); + + attributesGLBufferSecondary.bind(gl); + attributesGLBufferSecondary.updateWithOrphaning(gl, buf); + attributesGLBufferSecondary.unbind(gl); + + final int offset = buf.limit(); + buf.limit(offset + instanceCounter.selectedCount * ATTRIBS_STRIDE); + buf.position(offset); + + attributesGLBuffer.bind(gl); + attributesGLBuffer.updateWithOrphaning(gl, buf); + attributesGLBuffer.unbind(gl); + + final IntBuffer commandsBufferData = commandsBuffer.intBuffer(); + commandsBufferData.position(0); + commandsBufferData.limit(instanceCounter.total() * INDIRECT_DRAW_COMMAND_INTS_COUNT); + + commandsGLBuffer.bind(gl); + commandsGLBuffer.updateWithOrphaning(gl, commandsBufferData); + commandsGLBuffer.unbind(gl); + + instanceCounter.promoteCountToDraw(); + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/indirect/renderers/NodeRendererIndirect.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/indirect/renderers/NodeRendererIndirect.java new file mode 100644 index 0000000000..0516637987 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/indirect/renderers/NodeRendererIndirect.java @@ -0,0 +1,60 @@ +package org.gephi.viz.engine.jogl.pipeline.indirect.renderers; + +import com.jogamp.newt.event.NEWTEvent; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.VizEngineModel; +import org.gephi.viz.engine.jogl.JOGLRenderingTarget; +import org.gephi.viz.engine.jogl.availability.IndirectDraw; +import org.gephi.viz.engine.jogl.pipeline.common.AbstractNodeRenderer; +import org.gephi.viz.engine.jogl.pipeline.common.NodeWorldData; +import org.gephi.viz.engine.jogl.pipeline.indirect.IndirectNodeData; +import org.gephi.viz.engine.pipeline.RenderingLayer; + +/** + * + * @author Eduardo Ramos + */ +public class NodeRendererIndirect extends AbstractNodeRenderer { + + private final VizEngine engine; + private final IndirectNodeData nodeData; + + public NodeRendererIndirect(VizEngine engine, IndirectNodeData nodeData) { + this.engine = engine; + this.nodeData = nodeData; + } + + @Override + public void init(JOGLRenderingTarget target) { + //NOOP + } + + @Override + public NodeWorldData worldUpdated(VizEngineModel model, JOGLRenderingTarget target, float[] mvpFloats) { + nodeData.updateBuffers(target.getDrawable().getGL().getGL4()); + return nodeData.createWorldData(model, engine); + } + + private final float[] mvpFloats = new float[16]; + + @Override + public void render(NodeWorldData data, JOGLRenderingTarget target, RenderingLayer layer, float[] mvpFloats) { + + nodeData.drawIndirect(target.getDrawable().getGL().getGL4(), layer, data, mvpFloats); + } + + @Override + public int getPreferenceInCategory() { + return IndirectDraw.getPreferenceInCategory(); + } + + @Override + public String getName() { + return "Nodes (Indirect)"; + } + + @Override + public boolean isAvailable(JOGLRenderingTarget target) { + return IndirectDraw.isAvailable(engine, target.getDrawable()); + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/indirect/updaters/NodesUpdaterIndirectRendering.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/indirect/updaters/NodesUpdaterIndirectRendering.java new file mode 100644 index 0000000000..1b8cc8b1aa --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/indirect/updaters/NodesUpdaterIndirectRendering.java @@ -0,0 +1,72 @@ +package org.gephi.viz.engine.jogl.pipeline.indirect.updaters; + +import org.gephi.graph.api.Node; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.VizEngineModel; +import org.gephi.viz.engine.jogl.JOGLRenderingTarget; +import org.gephi.viz.engine.jogl.availability.IndirectDraw; +import org.gephi.viz.engine.jogl.pipeline.indirect.IndirectNodeData; +import org.gephi.viz.engine.pipeline.PipelineCategory; +import org.gephi.viz.engine.spi.ElementsCallback; +import org.gephi.viz.engine.spi.WorldUpdater; + +/** + * + * @author Eduardo Ramos + */ +public class NodesUpdaterIndirectRendering implements WorldUpdater { + + private final VizEngine engine; + private final IndirectNodeData nodeData; + + public NodesUpdaterIndirectRendering(VizEngine engine, IndirectNodeData nodeData) { + this.engine = engine; + this.nodeData = nodeData; + } + + @Override + public void init(JOGLRenderingTarget target) { + nodeData.init(target.getDrawable().getGL().getGL4()); + } + + @Override + public void dispose(JOGLRenderingTarget target) { + nodeData.dispose(target.getDrawable().getGL().getGL4()); + } + + @Override + public void updateWorld(VizEngineModel model) { + nodeData.update(model.getRenderingOptions()); + } + + @Override + public ElementsCallback getElementsCallback() { + return nodeData.getNodesCallback(); + } + + @Override + public String getCategory() { + return PipelineCategory.NODE; + } + + @Override + public int getPreferenceInCategory() { + return IndirectDraw.getPreferenceInCategory(); + } + + @Override + public String getName() { + return "Nodes (Indirect)"; + } + + @Override + public boolean isAvailable(JOGLRenderingTarget target) { + return IndirectDraw.isAvailable(engine, target.getDrawable()); + } + + @Override + public int getOrder() { + return 0; + } + +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/instanced/InstancedEdgeData.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/instanced/InstancedEdgeData.java new file mode 100644 index 0000000000..134a924aa2 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/instanced/InstancedEdgeData.java @@ -0,0 +1,277 @@ +package org.gephi.viz.engine.jogl.pipeline.instanced; + +import com.jogamp.opengl.GL; +import com.jogamp.opengl.GL3ES3; +import com.jogamp.opengl.util.GLBuffers; +import java.nio.FloatBuffer; +import org.gephi.graph.api.Edge; +import org.gephi.viz.engine.jogl.models.edgeline.directed.CommonEdgeLineDirected; +import org.gephi.viz.engine.jogl.models.edgeline.undirected.CommonEdgeLineUndirected; +import org.gephi.viz.engine.jogl.pipeline.common.AbstractEdgeData; +import org.gephi.viz.engine.jogl.pipeline.common.EdgeWorldData; +import org.gephi.viz.engine.jogl.util.gl.GLBufferMutable; +import org.gephi.viz.engine.jogl.util.gl.GLFunctions; +import org.gephi.viz.engine.pipeline.RenderingLayer; +import org.gephi.viz.engine.status.GraphSelection; +import org.gephi.viz.engine.util.structure.EdgesCallback; +import org.gephi.viz.engine.util.structure.NodesCallback; + +/** + * + * @author Eduardo Ramos + */ +public class InstancedEdgeData extends AbstractEdgeData { + + private final int[] bufferName = new int[9]; + + private static final int VERT_BUFFER_UNDIRECTED = 0; + private static final int VERT_BUFFER_DIRECTED = 1; + private static final int ATTRIBS_BUFFER_UNDIRECTED = 2; + private static final int ATTRIBS_BUFFER_UNDIRECTED_SECONDARY = 3; + private static final int ATTRIBS_BUFFER_DIRECTED = 4; + private static final int ATTRIBS_BUFFER_DIRECTED_SECONDARY = 5; + + private static final int VERT_BUFFER_SELF_LOOP = 6; + private static final int ATTRIBS_BUFFER_SELF_LOOP = 7; + private static final int ATTRIBS_BUFFER_SELF_LOOP_SECONDARY = 8; + + public InstancedEdgeData(final EdgesCallback edgesCallback, final NodesCallback nodesCallback) { + super(edgesCallback, nodesCallback, true, true); + } + + public void drawInstanced(GL3ES3 gl, RenderingLayer layer, EdgeWorldData data, + float[] mvpFloats) { + refreshTime(); + if (edgesCallback.hasSelfLoop()) { + drawSelfLoop(gl, data, layer, mvpFloats); + } + drawUndirected(gl, data, layer, mvpFloats); + drawDirected(gl, data, layer, mvpFloats); + } + + private void drawSelfLoop(GL3ES3 gl, EdgeWorldData data, + RenderingLayer layer, + float[] mvpFloats) { + final int instanceCount = setupShaderProgramForRenderingLayerSelfLoop(gl, layer, data, mvpFloats); + + GLFunctions.drawInstanced(gl, 0, selfLoopMesh.vertexCount, instanceCount); + GLFunctions.stopUsingProgram(gl); + unsetupSelfLoopVertexArrayAttributes(gl); + + } + + private void drawUndirected(GL3ES3 gl, EdgeWorldData data, + RenderingLayer layer, + float[] mvpFloats) { + final int instanceCount = setupShaderProgramForRenderingLayerUndirected(gl, layer, data, mvpFloats); + + GLFunctions.drawInstanced(gl, 0, CommonEdgeLineUndirected.VERTEX_COUNT, instanceCount); + GLFunctions.stopUsingProgram(gl); + unsetupUndirectedVertexArrayAttributes(gl); + } + + private void drawDirected(GL3ES3 gl, EdgeWorldData data, + RenderingLayer layer, + float[] mvpFloats) { + final int instanceCount = setupShaderProgramForRenderingLayerDirected(gl, layer, data, mvpFloats); + + GLFunctions.drawInstanced(gl, 0, CommonEdgeLineDirected.VERTEX_COUNT, instanceCount); + GLFunctions.stopUsingProgram(gl); + unsetupDirectedVertexArrayAttributes(gl); + } + + @Override + protected void initBuffers(GL gl) { + super.initBuffers(gl); + gl.glGenBuffers(bufferName.length, bufferName, 0); + + final FloatBuffer undirectedVertexData = + GLBuffers.newDirectFloatBuffer(undirectedEdgeMesh.vertexData); + vertexGLBufferUndirected = + new GLBufferMutable(bufferName[VERT_BUFFER_UNDIRECTED], GLBufferMutable.GL_BUFFER_TYPE_ARRAY); + vertexGLBufferUndirected.bind(gl); + vertexGLBufferUndirected.init(gl, undirectedVertexData, GLBufferMutable.GL_BUFFER_USAGE_STATIC_DRAW); + vertexGLBufferUndirected.unbind(gl); + + final FloatBuffer directedVertexData = GLBuffers.newDirectFloatBuffer(directedEdgeMesh.vertexData); + vertexGLBufferDirected = + new GLBufferMutable(bufferName[VERT_BUFFER_DIRECTED], GLBufferMutable.GL_BUFFER_TYPE_ARRAY); + vertexGLBufferDirected.bind(gl); + vertexGLBufferDirected.init(gl, directedVertexData, GLBufferMutable.GL_BUFFER_USAGE_STATIC_DRAW); + vertexGLBufferDirected.unbind(gl); + + final FloatBuffer selfLoopVertexData = + GLBuffers.newDirectFloatBuffer(selfLoopMesh.vertexData); + vertexGLBufferSelfLoop = + new GLBufferMutable(bufferName[VERT_BUFFER_SELF_LOOP], GLBufferMutable.GL_BUFFER_TYPE_ARRAY); + vertexGLBufferSelfLoop.bind(gl); + vertexGLBufferSelfLoop.init(gl, selfLoopVertexData, GLBufferMutable.GL_BUFFER_USAGE_STATIC_DRAW); + vertexGLBufferSelfLoop.unbind(gl); + + //Initialize for batch edges size: + attributesGLBufferDirected = + new GLBufferMutable(bufferName[ATTRIBS_BUFFER_DIRECTED], GLBufferMutable.GL_BUFFER_TYPE_ARRAY); + attributesGLBufferDirected.bind(gl); + attributesGLBufferDirected.init(gl, (long) ATTRIBS_STRIDE * Float.BYTES * BATCH_EDGES_SIZE, + GLBufferMutable.GL_BUFFER_USAGE_DYNAMIC_DRAW); + attributesGLBufferDirected.unbind(gl); + + attributesGLBufferDirectedSecondary = + new GLBufferMutable(bufferName[ATTRIBS_BUFFER_DIRECTED_SECONDARY], GLBufferMutable.GL_BUFFER_TYPE_ARRAY); + attributesGLBufferDirectedSecondary.bind(gl); + attributesGLBufferDirectedSecondary.init(gl, (long) ATTRIBS_STRIDE * Float.BYTES * BATCH_EDGES_SIZE, + GLBufferMutable.GL_BUFFER_USAGE_DYNAMIC_DRAW); + attributesGLBufferDirectedSecondary.unbind(gl); + + attributesGLBufferUndirected = + new GLBufferMutable(bufferName[ATTRIBS_BUFFER_UNDIRECTED], GLBufferMutable.GL_BUFFER_TYPE_ARRAY); + attributesGLBufferUndirected.bind(gl); + attributesGLBufferUndirected.init(gl, (long) ATTRIBS_STRIDE * Float.BYTES * BATCH_EDGES_SIZE, + GLBufferMutable.GL_BUFFER_USAGE_DYNAMIC_DRAW); + attributesGLBufferUndirected.unbind(gl); + + attributesGLBufferUndirectedSecondary = + new GLBufferMutable(bufferName[ATTRIBS_BUFFER_UNDIRECTED_SECONDARY], GLBufferMutable.GL_BUFFER_TYPE_ARRAY); + attributesGLBufferUndirectedSecondary.bind(gl); + attributesGLBufferUndirectedSecondary.init(gl, (long) ATTRIBS_STRIDE * Float.BYTES * BATCH_EDGES_SIZE, + GLBufferMutable.GL_BUFFER_USAGE_DYNAMIC_DRAW); + attributesGLBufferUndirectedSecondary.unbind(gl); + + attributesGLBufferSelfLoop = + new GLBufferMutable(bufferName[ATTRIBS_BUFFER_SELF_LOOP], GLBufferMutable.GL_BUFFER_TYPE_ARRAY); + attributesGLBufferSelfLoop.bind(gl); + attributesGLBufferSelfLoop.init(gl, (long) ATTRIBS_STRIDE_SELFLOOP * Float.BYTES * BATCH_SELFLOOP_EDGES_SIZE, + GLBufferMutable.GL_BUFFER_USAGE_DYNAMIC_DRAW); + attributesGLBufferSelfLoop.unbind(gl); + + attributesGLBufferSelfLoopSecondary = + new GLBufferMutable(bufferName[ATTRIBS_BUFFER_SELF_LOOP_SECONDARY], GLBufferMutable.GL_BUFFER_TYPE_ARRAY); + attributesGLBufferSelfLoopSecondary.bind(gl); + attributesGLBufferSelfLoopSecondary.init(gl, + (long) ATTRIBS_STRIDE_SELFLOOP * Float.BYTES * BATCH_SELFLOOP_EDGES_SIZE, + GLBufferMutable.GL_BUFFER_USAGE_DYNAMIC_DRAW); + attributesGLBufferSelfLoopSecondary.unbind(gl); + + } + + public void updateBuffers(GL gl) { + { + final FloatBuffer buf = attributesBuffer.floatBuffer(); + + + buf.limit(undirectedInstanceCounter.unselectedCount * ATTRIBS_STRIDE); + buf.position(0); + + attributesGLBufferUndirectedSecondary.bind(gl); + attributesGLBufferUndirectedSecondary.updateWithOrphaning(gl, buf); + attributesGLBufferUndirectedSecondary.unbind(gl); + + int offset = buf.limit(); + buf.limit(offset + undirectedInstanceCounter.selectedCount * ATTRIBS_STRIDE); + buf.position(offset); + + attributesGLBufferUndirected.bind(gl); + attributesGLBufferUndirected.updateWithOrphaning(gl, buf); + attributesGLBufferUndirected.unbind(gl); + + offset = buf.limit(); + buf.limit(offset + directedInstanceCounter.unselectedCount * ATTRIBS_STRIDE); + buf.position(offset); + + attributesGLBufferDirectedSecondary.bind(gl); + attributesGLBufferDirectedSecondary.updateWithOrphaning(gl, buf); + attributesGLBufferDirectedSecondary.unbind(gl); + + offset = buf.limit(); + buf.limit(offset + directedInstanceCounter.selectedCount * ATTRIBS_STRIDE); + buf.position(offset); + + attributesGLBufferDirected.bind(gl); + attributesGLBufferDirected.updateWithOrphaning(gl, buf); + attributesGLBufferDirected.unbind(gl); + } + + if (edgesCallback.hasSelfLoop()) { + final FloatBuffer selfLoopBuf = selfLoopAttributesBuffer.floatBuffer(); + + selfLoopBuf.limit(selfLoopCounter.unselectedCount * ATTRIBS_STRIDE_SELFLOOP); + selfLoopBuf.position(0); + + attributesGLBufferSelfLoopSecondary.bind(gl); + attributesGLBufferSelfLoopSecondary.updateWithOrphaning(gl, selfLoopBuf); + attributesGLBufferSelfLoopSecondary.unbind(gl); + + int offset = selfLoopBuf.limit(); + selfLoopBuf.limit(offset + selfLoopCounter.selectedCount * ATTRIBS_STRIDE_SELFLOOP); + selfLoopBuf.position(offset); + + attributesGLBufferSelfLoop.bind(gl); + attributesGLBufferSelfLoop.updateWithOrphaning(gl, selfLoopBuf); + attributesGLBufferSelfLoop.unbind(gl); + } + undirectedInstanceCounter.promoteCountToDraw(); + directedInstanceCounter.promoteCountToDraw(); + selfLoopCounter.promoteCountToDraw(); + } + + @Override + protected void updateData(final GraphSelection selection) { + final int totalEdges = edgesCallback.getCount(); + + attributesBuffer.ensureCapacity(totalEdges * ATTRIBS_STRIDE); + + final FloatBuffer attribsDirectBuffer = attributesBuffer.floatBuffer(); + final Edge[] visibleEdgesArray = edgesCallback.getEdgesArray(); + final float[] edgeWeightsArray = edgesCallback.getEdgeWeightsArray(); + final int maxIndex = edgesCallback.getMaxIndex(); + final boolean isDirected = edgesCallback.isDirected(); + final boolean isUndirected = edgesCallback.isUndirected(); + final boolean hasSelfLoop = edgesCallback.hasSelfLoop(); + + if (hasSelfLoop) { + selfLoopAttributesBuffer.ensureCapacity(totalEdges * ATTRIBS_STRIDE_SELFLOOP); + final FloatBuffer attribsSelfLoopBuffer = selfLoopAttributesBuffer.floatBuffer(); + updateSelfLoop(maxIndex, + visibleEdgesArray, + edgeWeightsArray, + selfLoopAttributesBufferBatch, + 0, + attribsSelfLoopBuffer); + } else { + selfLoopCounter.clearCount(); + } + updateUndirectedData( + isDirected, + maxIndex, + visibleEdgesArray, + edgeWeightsArray, + attributesBufferBatch, + 0, + attribsDirectBuffer + ); + updateDirectedData( + isUndirected, + maxIndex, + visibleEdgesArray, + edgeWeightsArray, + attributesBufferBatch, + 0, + attribsDirectBuffer + ); + } + + @Override + public void dispose(GL gl) { + super.dispose(gl); + attributesBufferBatch = null; + selfLoopAttributesBufferBatch = null; + if (attributesBuffer != null) { + attributesBuffer.destroy(); + attributesBuffer = null; + } + if (selfLoopAttributesBuffer != null) { + selfLoopAttributesBuffer.destroy(); + selfLoopAttributesBuffer = null; + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/instanced/InstancedNodeData.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/instanced/InstancedNodeData.java new file mode 100644 index 0000000000..b65ff5b807 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/instanced/InstancedNodeData.java @@ -0,0 +1,116 @@ +package org.gephi.viz.engine.jogl.pipeline.instanced; + +import com.jogamp.opengl.GL; +import com.jogamp.opengl.GL3ES3; +import java.nio.FloatBuffer; +import org.gephi.viz.engine.jogl.pipeline.common.AbstractNodeData; +import org.gephi.viz.engine.jogl.pipeline.common.NodeWorldData; +import org.gephi.viz.engine.jogl.util.gl.GLBufferMutable; +import org.gephi.viz.engine.jogl.util.gl.GLFunctions; +import org.gephi.viz.engine.pipeline.RenderingLayer; +import org.gephi.viz.engine.util.structure.NodesCallback; + +/** + * + * @author Eduardo Ramos + */ +public class InstancedNodeData extends AbstractNodeData { + + public InstancedNodeData(NodesCallback nodesCallback) { + super(nodesCallback, true, false); + } + + private final int[] bufferName = new int[3]; + + private static final int VERT_BUFFER = 0; + private static final int ATTRIBS_BUFFER = 1; + private static final int ATTRIBS_BUFFER_SECONDARY = 2; + + public void drawInstanced(GL3ES3 gl, RenderingLayer layer, NodeWorldData data, float[] mvpFloats) { + refreshTime(); + + drawInstancedInternal(gl, layer, data, mvpFloats); + } + + private void drawInstancedInternal(final GL3ES3 gl, + final RenderingLayer layer, + final NodeWorldData data, + final float[] mvpFloats) { + final int instanceCount = + setupShaderProgramForRenderingLayer(gl, layer, data, mvpFloats); + + if (instanceCount <= 0) { + GLFunctions.stopUsingProgram(gl); + unsetupVertexArrayAttributes(gl); + return; + } + + final float maxObservedSize = data.getMaxNodeSize() * data.getZoom(); + final int circleVertexCount; + final int firstVertex; + if (maxObservedSize > OBSERVED_SIZE_LOD_THRESHOLD_64) { + circleVertexCount = circleMesh64.vertexCount; + firstVertex = firstVertex64; + } else if (maxObservedSize > OBSERVED_SIZE_LOD_THRESHOLD_32) { + circleVertexCount = circleMesh32.vertexCount; + firstVertex = firstVertex32; + } else if (maxObservedSize > OBSERVED_SIZE_LOD_THRESHOLD_16) { + circleVertexCount = circleMesh16.vertexCount; + firstVertex = firstVertex16; + } else { + circleVertexCount = circleMesh8.vertexCount; + firstVertex = firstVertex8; + } + + GLFunctions.drawInstanced( + gl, + firstVertex, circleVertexCount, instanceCount + ); + GLFunctions.stopUsingProgram(gl); + unsetupVertexArrayAttributes(gl); + } + + @Override + protected void initBuffers(GL gl) { + super.initBuffers(gl); + gl.glGenBuffers(bufferName.length, bufferName, 0); + + initCirclesGLVertexBuffer(gl, bufferName[VERT_BUFFER]); + + //Initialize for batch nodes size: + attributesGLBuffer = new GLBufferMutable(bufferName[ATTRIBS_BUFFER], GLBufferMutable.GL_BUFFER_TYPE_ARRAY); + attributesGLBuffer.bind(gl); + attributesGLBuffer.init(gl, ATTRIBS_STRIDE * Float.BYTES * BATCH_NODES_SIZE, + GLBufferMutable.GL_BUFFER_USAGE_DYNAMIC_DRAW); + attributesGLBuffer.unbind(gl); + + attributesGLBufferSecondary = + new GLBufferMutable(bufferName[ATTRIBS_BUFFER_SECONDARY], GLBufferMutable.GL_BUFFER_TYPE_ARRAY); + attributesGLBufferSecondary.bind(gl); + attributesGLBufferSecondary.init(gl, ATTRIBS_STRIDE * Float.BYTES * BATCH_NODES_SIZE, + GLBufferMutable.GL_BUFFER_USAGE_DYNAMIC_DRAW); + attributesGLBufferSecondary.unbind(gl); + } + + public void updateBuffers(GL gl) { + final FloatBuffer buf = attributesBuffer.floatBuffer(); + + buf.limit(instanceCounter.unselectedCount * ATTRIBS_STRIDE); + buf.position(0); + + attributesGLBufferSecondary.bind(gl); + attributesGLBufferSecondary.updateWithOrphaning(gl, buf); + attributesGLBufferSecondary.unbind(gl); + + final int offset = buf.limit(); + buf.limit(offset + instanceCounter.selectedCount * ATTRIBS_STRIDE); + buf.position(offset); + + attributesGLBuffer.bind(gl); + attributesGLBuffer.updateWithOrphaning(gl, buf); + attributesGLBuffer.unbind(gl); + + instanceCounter.promoteCountToDraw(); + } +} + diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/instanced/renderers/EdgeRendererInstanced.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/instanced/renderers/EdgeRendererInstanced.java new file mode 100644 index 0000000000..02dcabccec --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/instanced/renderers/EdgeRendererInstanced.java @@ -0,0 +1,61 @@ +package org.gephi.viz.engine.jogl.pipeline.instanced.renderers; + +import com.jogamp.newt.event.NEWTEvent; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.VizEngineModel; +import org.gephi.viz.engine.jogl.JOGLRenderingTarget; +import org.gephi.viz.engine.jogl.availability.InstancedDraw; +import org.gephi.viz.engine.jogl.pipeline.common.AbstractEdgeRenderer; +import org.gephi.viz.engine.jogl.pipeline.common.EdgeWorldData; +import org.gephi.viz.engine.jogl.pipeline.instanced.InstancedEdgeData; +import org.gephi.viz.engine.pipeline.RenderingLayer; + +/** + * + * @author Eduardo Ramos + */ +public class EdgeRendererInstanced extends AbstractEdgeRenderer { + + private final VizEngine engine; + private final InstancedEdgeData edgeData; + + public EdgeRendererInstanced(VizEngine engine, InstancedEdgeData edgeData) { + this.engine = engine; + this.edgeData = edgeData; + } + + @Override + public void init(JOGLRenderingTarget target) { + //NOOP + } + + @Override + public EdgeWorldData worldUpdated(VizEngineModel model, JOGLRenderingTarget target, float[] mvpFloats) { + edgeData.updateBuffers(target.getDrawable().getGL()); + return edgeData.createWorldData(model, engine); + } + + @Override + public void render(EdgeWorldData data, JOGLRenderingTarget target, RenderingLayer layer, float[] mvpFloats) { + edgeData.drawInstanced( + target.getDrawable().getGL().getGL3ES3(), + layer, + data, mvpFloats + ); + } + + @Override + public int getPreferenceInCategory() { + return InstancedDraw.getPreferenceInCategory(); + } + + @Override + public String getName() { + return "Edges (Instanced)"; + } + + @Override + public boolean isAvailable(JOGLRenderingTarget target) { + return InstancedDraw.isAvailable(engine, target.getDrawable()); + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/instanced/renderers/NodeRendererInstanced.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/instanced/renderers/NodeRendererInstanced.java new file mode 100644 index 0000000000..fa30fb1dd5 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/instanced/renderers/NodeRendererInstanced.java @@ -0,0 +1,58 @@ +package org.gephi.viz.engine.jogl.pipeline.instanced.renderers; + +import com.jogamp.newt.event.NEWTEvent; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.VizEngineModel; +import org.gephi.viz.engine.jogl.JOGLRenderingTarget; +import org.gephi.viz.engine.jogl.availability.InstancedDraw; +import org.gephi.viz.engine.jogl.pipeline.common.AbstractNodeRenderer; +import org.gephi.viz.engine.jogl.pipeline.common.NodeWorldData; +import org.gephi.viz.engine.jogl.pipeline.instanced.InstancedNodeData; +import org.gephi.viz.engine.pipeline.RenderingLayer; + +/** + * + * @author Eduardo Ramos + */ +public class NodeRendererInstanced extends AbstractNodeRenderer { + + private final VizEngine engine; + private final InstancedNodeData nodeData; + + public NodeRendererInstanced(VizEngine engine, InstancedNodeData nodeData) { + this.engine = engine; + this.nodeData = nodeData; + } + + @Override + public void init(JOGLRenderingTarget target) { + //NOOP + } + + @Override + public NodeWorldData worldUpdated(VizEngineModel model, JOGLRenderingTarget target, float[] mvpFloats) { + nodeData.updateBuffers(target.getDrawable().getGL()); + return nodeData.createWorldData(model, engine); + } + + @Override + public void render(NodeWorldData data, JOGLRenderingTarget target, RenderingLayer layer, float[] mvpFloats) { + + nodeData.drawInstanced(target.getDrawable().getGL().getGL3ES3(), layer, data, mvpFloats); + } + + @Override + public int getPreferenceInCategory() { + return InstancedDraw.getPreferenceInCategory(); + } + + @Override + public String getName() { + return "Nodes (Instanced)"; + } + + @Override + public boolean isAvailable(JOGLRenderingTarget target) { + return InstancedDraw.isAvailable(engine, target.getDrawable()); + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/instanced/updaters/EdgesUpdaterInstancedRendering.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/instanced/updaters/EdgesUpdaterInstancedRendering.java new file mode 100644 index 0000000000..b723aa6d22 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/instanced/updaters/EdgesUpdaterInstancedRendering.java @@ -0,0 +1,73 @@ +package org.gephi.viz.engine.jogl.pipeline.instanced.updaters; + +import org.gephi.graph.api.Edge; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.VizEngineModel; +import org.gephi.viz.engine.jogl.JOGLRenderingTarget; +import org.gephi.viz.engine.jogl.availability.InstancedDraw; +import org.gephi.viz.engine.jogl.pipeline.instanced.InstancedEdgeData; +import org.gephi.viz.engine.pipeline.PipelineCategory; +import org.gephi.viz.engine.spi.ElementsCallback; +import org.gephi.viz.engine.spi.WorldUpdater; + +/** + * + * @author Eduardo Ramos + */ +public class EdgesUpdaterInstancedRendering implements WorldUpdater { + + private final VizEngine engine; + private final InstancedEdgeData edgeData; + + public EdgesUpdaterInstancedRendering(VizEngine engine, InstancedEdgeData edgeData) { + this.engine = engine; + this.edgeData = edgeData; + } + + @Override + public void init(JOGLRenderingTarget target) { + edgeData.init(target.getDrawable().getGL().getGL3ES3()); + } + + @Override + public void dispose(JOGLRenderingTarget target) { + edgeData.dispose(target.getDrawable().getGL()); + } + + @Override + public void updateWorld(VizEngineModel model) { + edgeData.update(model.getGraphIndex(), model.getGraphSelection(), model.getRenderingOptions(), + engine.getViewBoundaries()); + } + + @Override + public ElementsCallback getElementsCallback() { + return edgeData.getEdgesCallback(); + } + + @Override + public String getCategory() { + return PipelineCategory.EDGE; + } + + @Override + public int getPreferenceInCategory() { + return InstancedDraw.getPreferenceInCategory(); + } + + @Override + public String getName() { + return "Edges (Instanced)"; + } + + @Override + public boolean isAvailable(JOGLRenderingTarget target) { + return InstancedDraw.isAvailable(engine, target.getDrawable()); + } + + @Override + public int getOrder() { + return 0; + } + +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/instanced/updaters/NodesUpdaterInstancedRendering.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/instanced/updaters/NodesUpdaterInstancedRendering.java new file mode 100644 index 0000000000..3fb12a6fae --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/instanced/updaters/NodesUpdaterInstancedRendering.java @@ -0,0 +1,72 @@ +package org.gephi.viz.engine.jogl.pipeline.instanced.updaters; + +import org.gephi.graph.api.Node; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.VizEngineModel; +import org.gephi.viz.engine.jogl.JOGLRenderingTarget; +import org.gephi.viz.engine.jogl.availability.InstancedDraw; +import org.gephi.viz.engine.jogl.pipeline.instanced.InstancedNodeData; +import org.gephi.viz.engine.pipeline.PipelineCategory; +import org.gephi.viz.engine.spi.ElementsCallback; +import org.gephi.viz.engine.spi.WorldUpdater; + +/** + * + * @author Eduardo Ramos + */ +public class NodesUpdaterInstancedRendering implements WorldUpdater { + + private final VizEngine engine; + private final InstancedNodeData nodeData; + + public NodesUpdaterInstancedRendering(VizEngine engine, InstancedNodeData nodeData) { + this.engine = engine; + this.nodeData = nodeData; + } + + @Override + public void init(JOGLRenderingTarget target) { + nodeData.init(target.getDrawable().getGL().getGL3ES3()); + } + + @Override + public void dispose(JOGLRenderingTarget target) { + nodeData.dispose(target.getDrawable().getGL()); + } + + @Override + public void updateWorld(VizEngineModel model) { + nodeData.update(model.getRenderingOptions()); + } + + @Override + public ElementsCallback getElementsCallback() { + return nodeData.getNodesCallback(); + } + + @Override + public String getCategory() { + return PipelineCategory.NODE; + } + + @Override + public int getPreferenceInCategory() { + return InstancedDraw.getPreferenceInCategory(); + } + + @Override + public String getName() { + return "Nodes (Instanced)"; + } + + @Override + public boolean isAvailable(JOGLRenderingTarget target) { + return InstancedDraw.isAvailable(engine, target.getDrawable()); + } + + @Override + public int getOrder() { + return 0; + } + +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/text/AbstractLabelData.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/text/AbstractLabelData.java new file mode 100644 index 0000000000..8220b7acec --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/text/AbstractLabelData.java @@ -0,0 +1,393 @@ +package org.gephi.viz.engine.jogl.pipeline.text; + +import static org.gephi.viz.engine.util.ArrayUtils.getNextPowerOf2; + +import java.awt.Font; +import java.awt.geom.Rectangle2D; +import java.util.ArrayList; +import java.util.List; +import jogamp.text.TextRenderer; +import jogamp.text.util.Glyph; +import org.gephi.graph.api.Element; +import org.gephi.viz.engine.spi.ElementsCallback; + +public abstract class AbstractLabelData { + + private static final boolean SMOOTHING = true; + private static final boolean ANTIALIASED = true; + private static final boolean FRACTIONAL_METRICS = true; + private static final boolean MIPMAP = true; + + private final ElementsCallback elementsCallback; + + // Array of label batches indexed by node storeId + private LabelBatch[] labelBatches = new LabelBatch[0]; + + // Maximum valid index in the batches array (updated by updater thread) + private int maxValidIndex = -1; + + // TextRenderer for glyph preparation (doesn't need GL context) + private TextRenderer textRenderer; + private Font currentFont; + + public AbstractLabelData(ElementsCallback elementsCallback) { + this.elementsCallback = elementsCallback; + } + + public ElementsCallback getElementsCallback() { + return elementsCallback; + } + + public void dispose() { + textRenderer = null; + currentFont = null; + labelBatches = new LabelBatch[0]; + maxValidIndex = -1; + } + + /** + * Ensures the text renderer is initialized with the correct font. + * This is called from the updater thread and doesn't require GL context. + */ + public void ensureTextRenderer(Font font, boolean vaoSupported, boolean mipMapSupported) { + if (textRenderer == null || !font.equals(currentFont)) { + textRenderer = new TextRenderer(font, ANTIALIASED, FRACTIONAL_METRICS, null, mipMapSupported && MIPMAP); + textRenderer.setUseVertexArrays(vaoSupported); + textRenderer.setSmoothing(SMOOTHING); + + currentFont = font; + + // Font changed - invalidate all cached glyphs + invalidateAllGlyphs(); + } + } + + /** + * Invalidates all cached glyphs when font changes. + */ + private void invalidateAllGlyphs() { + for (LabelBatch batch : labelBatches) { + if (batch != null) { + batch.invalidateGlyphs(); + } + } + } + + /** + * Gets the bounds of text using the text renderer. + */ + public Rectangle2D getTextBounds(String text) { + if (textRenderer == null || text == null || text.isEmpty()) { + return null; + } + return textRenderer.getBounds(text); + } + + /** + * Ensures the label batches array is large enough to hold the given storeId. + */ + public void ensureLabelBatchesSize(int maxStoreId) { + if (maxStoreId >= labelBatches.length) { + int newSize = getNextPowerOf2(maxStoreId + 1); + LabelBatch[] newArray = new LabelBatch[newSize]; + System.arraycopy(labelBatches, 0, newArray, 0, labelBatches.length); + labelBatches = newArray; + } + } + + /** + * Updates the label data for a specific element (by storeId). + * Only recomputes glyphs if text changed, only recomputes bounds if text or sizeFactor changed. + * Called by updater thread - writes to write buffer of the batch. + * + * @param element The graph element (node or edge) + * @param storeId The element's storeId + * @param text The label text + * @param sizeFactor The size factor (for caching bounds) + * @param nodeX Node position X (will be centered) + * @param nodeY Node position Y (will be centered) + * @param r Red component + * @param g Green component + * @param b Blue component + * @param a Alpha component + * @return The updated LabelBatch (for overlap detection) + */ + public LabelBatch updateBatch(E element, int storeId, String text, float sizeFactor, float nodeX, float nodeY, + float r, float g, float b, float a) { + + // Get or create batch for this storeId + LabelBatch batch = labelBatches[storeId]; + if (batch == null) { + batch = new LabelBatch(); + labelBatches[storeId] = batch; + } + + // Check if we need to recompute glyphs (expensive) + boolean textChanged = !text.equals(batch.writeText); + + if (textChanged) { + // Text changed - must recreate glyphs + final List glyphs = textRenderer.getGlyphProducer().createGlyphs(text); + if (glyphs == null || glyphs.isEmpty()) { + batch.markInvalid(); + return batch; + } + + // Store new glyphs + if (batch.writeGlyphs == null) { + batch.writeGlyphs = new ArrayList<>(glyphs); + } else { + batch.writeGlyphs.clear(); + batch.writeGlyphs.addAll(glyphs); + } + batch.writeText = text; + } + + // Check if we need to recompute bounds (expensive) + boolean sizeFactorChanged = Math.abs(sizeFactor - batch.writeScale) > 0.0001f; + + // Treat dimensions as invalid if they were never set (e.g. after a workspace switch where + // the new element at the same storeId has the same text but uninitialized text properties). + boolean dimensionsValid = batch.writeWidth > 0 && batch.writeHeight > 0; + + float width, height, ascent; + if (textChanged || sizeFactorChanged || !dimensionsValid) { + // Recompute bounds + final Rectangle2D bounds = getTextBounds(text); + if (bounds == null) { + batch.markInvalid(); + return batch; + } + + width = (float) bounds.getWidth() * sizeFactor; + height = (float) bounds.getHeight() * sizeFactor; + ascent = (float) (-bounds.getY()); + + batch.writeWidth = width; + batch.writeHeight = height; + } else { + // Use bounds cached in the batch (safe across workspace switches) + width = batch.writeWidth; + height = batch.writeHeight; + ascent = batch.writeAscent; + } + + // Always sync dimensions to the element so that overlap detection in NodeLabelUpdater + // reads correct values regardless of which branch was taken above. + element.getTextProperties().setDimensions(width, height); + + // Compute centered draw position using cached bounds + final float descentPx = (height / sizeFactor) - ascent; + final float drawX = nodeX - width * 0.5f; + final float drawY = nodeY - ((ascent - descentPx) * sizeFactor) * 0.5f; + + // Always update position, scale, and color (cheap) + batch.writeAscent = ascent; + batch.writeX = drawX; + batch.writeY = drawY; + batch.writeScale = sizeFactor; + batch.writeR = r; + batch.writeG = g; + batch.writeB = b; + batch.writeA = a; + batch.writeValid = true; + + return batch; + } + + /** + * Gets a label batch by storeId (for overlap detection). + * Returns null if no batch exists at that index. + */ + public LabelBatch getBatch(int storeId) { + if (storeId >= 0 && storeId < labelBatches.length) { + return labelBatches[storeId]; + } + return null; + } + + /** + * Marks a batch as invalid (e.g., node has no label). + * Called by updater thread. + */ + public void invalidateBatch(int storeId) { + if (storeId < labelBatches.length && labelBatches[storeId] != null) { + labelBatches[storeId].markInvalid(); + } + } + + /** + * Sets the maximum valid index for this update cycle. + * Called by updater thread. + */ + public void setMaxValidIndex(int maxIndex) { + this.maxValidIndex = maxIndex; + } + + /** + * Gets the maximum valid index. + * Called by renderer thread via worldUpdated(). + */ + public int getMaxValidIndex() { + return maxValidIndex; + } + + + /** + * Swaps the read/write buffers for all batches. + * Called by renderer thread in worldUpdated() after updater completes. + * This makes the newly prepared data visible to the renderer. + */ + public void swapBuffers() { + final LabelBatch[] batches = labelBatches; // Read volatile once + for (LabelBatch batch : batches) { + if (batch != null) { + batch.swap(); + } + } + } + + /** + * Gets the label batch array for rendering. + * Called by renderer thread - reads from read buffer of each batch. + */ + public LabelBatch[] getLabelBatches() { + return labelBatches; + } + + /** + * Gets the TextRenderer for use in the rendering thread. + * The renderer needs to call begin/end rendering with GL context. + */ + public TextRenderer getTextRenderer() { + return textRenderer; + } + + /** + * Pre-computed batch containing glyphs and rendering parameters. + * Each batch is double-buffered: updater writes to write* fields, + * renderer reads from read* fields. swap() atomically publishes changes. + */ + public static class LabelBatch { + // Read buffer (accessed by renderer) + private boolean readValid = false; + private List readGlyphs; + private float readX; + private float readY; + private float readScale; + private float readR; + private float readG; + private float readB; + private float readA; + + // Write buffer (accessed by updater) + private boolean writeValid = false; + private List writeGlyphs; + private String writeText = null; + private float writeAscent; + private float writeWidth; + private float writeHeight; + private float writeX; + private float writeY; + private float writeScale; + private float writeR; + private float writeG; + private float writeB; + private float writeA; + + /** + * Swaps read and write buffers, publishing the write data to the renderer. + * Called by renderer thread at synchronization point. + */ + public void swap() { + readValid = writeValid; + if (writeValid) { + // Create a new list for readGlyphs to avoid concurrent modification + // when the updater modifies writeGlyphs in the next update cycle + if (writeGlyphs != null) { + if (readGlyphs == null) { + readGlyphs = new ArrayList<>(writeGlyphs); + } else { + readGlyphs.clear(); + readGlyphs.addAll(writeGlyphs); + } + } else { + readGlyphs = null; + } + readX = writeX; + readY = writeY; + readScale = writeScale; + readR = writeR; + readG = writeG; + readB = writeB; + readA = writeA; + } + } + + /** + * Marks this batch as invalid (no label to render). + * Called by updater thread. + */ + public void markInvalid() { + writeValid = false; + } + + /** + * Invalidates cached glyphs (e.g., when font changes). + */ + public void invalidateGlyphs() { + writeText = null; + writeGlyphs = null; + writeWidth = 0; + writeHeight = 0; + } + + // Renderer read methods + + public boolean isValid() { + return readValid; + } + + // Updater access methods (for overlap detection) + + public boolean isWriteValid() { + return writeValid; + } + + public float getWriteScale() { + return writeScale; + } + + public List getGlyphs() { + return readGlyphs; + } + + public float getX() { + return readX; + } + + public float getY() { + return readY; + } + + public float getScale() { + return readScale; + } + + public float getR() { + return readR; + } + + public float getG() { + return readG; + } + + public float getB() { + return readB; + } + + public float getA() { + return readA; + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/text/AbstractLabelRenderer.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/text/AbstractLabelRenderer.java new file mode 100644 index 0000000000..c3ed6bad8b --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/text/AbstractLabelRenderer.java @@ -0,0 +1,152 @@ +package org.gephi.viz.engine.jogl.pipeline.text; + +import com.jogamp.opengl.GL; +import com.jogamp.opengl.GLContext; +import com.jogamp.opengl.util.texture.TextureCoords; +import java.util.EnumSet; +import java.util.List; +import jogamp.text.TextRenderer; +import jogamp.text.util.Glyph; +import org.gephi.graph.api.Element; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.VizEngineModel; +import org.gephi.viz.engine.jogl.JOGLRenderingTarget; +import org.gephi.viz.engine.jogl.pipeline.common.LabelWorldData; +import org.gephi.viz.engine.pipeline.RenderingLayer; +import org.gephi.viz.engine.spi.Renderer; + +@SuppressWarnings("rawtypes") +public abstract class AbstractLabelRenderer + implements Renderer { + public static final EnumSet LAYERS = EnumSet.of(RenderingLayer.FRONT1); + + private final VizEngine engine; + private final AbstractLabelData labelData; + private TextRenderer textRenderer; + + public AbstractLabelRenderer(VizEngine engine, AbstractLabelData labelData) { + this.engine = engine; + this.labelData = labelData; + } + + @Override + public void init(JOGLRenderingTarget target) { + // Nothing to do + } + + @Override + public void dispose(JOGLRenderingTarget target) { + if (textRenderer != null) { + textRenderer.dispose(); + textRenderer = null; + } + } + + @Override + public LabelWorldData worldUpdated(VizEngineModel model, JOGLRenderingTarget target, float[] mvpFloats) { + // This is the synchronization point between updater and renderer threads + // The updater has finished preparing batches, now swap the buffers + labelData.swapBuffers(); + + return new LabelWorldData( + labelData.getTextRenderer(), + labelData.getLabelBatches(), + labelData.getMaxValidIndex() + ); + } + + @Override + public void render(LabelWorldData data, JOGLRenderingTarget target, RenderingLayer layer, float[] mvpFloats) { + // Dispose any old renderer that was replaced (e.g., due to font change) + // This must be done in render thread because dispose() requires GL context + if (textRenderer != null && data.getTextRenderer() != null && textRenderer != data.getTextRenderer()) { + textRenderer.dispose(); + } + + // Update to the new TextRenderer + if (data.getTextRenderer() == null) { + if (textRenderer != null) { + textRenderer.dispose(); + textRenderer = null; + } + return; + } else { + textRenderer = data.getTextRenderer(); + } + + // Get the pre-computed batches from the WorldData (captured at worldUpdated time) + // This ensures we use a consistent snapshot for this frame + final AbstractLabelData.LabelBatch[] batches = data.getLabelBatches(); + final int maxIndex = data.getMaxIndex(); + + if (batches == null || batches.length == 0 || maxIndex < 0) { + return; + } + + final GL gl = GLContext.getCurrentGL(); + + textRenderer.begin3DRendering(); + textRenderer.setTransform(mvpFloats); + + // Render each prepared batch up to maxIndex + // All glyphs, positions, colors were pre-computed in the updater thread + for (int i = 0; i <= maxIndex && i < batches.length; i++) { + final AbstractLabelData.LabelBatch batch = batches[i]; + + // Skip null or invalid batches + if (batch == null || !batch.isValid()) { + continue; + } + + final List glyphs = batch.getGlyphs(); + if (glyphs == null || glyphs.isEmpty()) { + continue; + } + + // Set color for this batch + textRenderer.setColor(batch.getR(), batch.getG(), batch.getB(), batch.getA()); + + // Render each glyph in the batch + float x = batch.getX(); + final float y = batch.getY(); + final float scale = batch.getScale(); + + for (final Glyph glyph : glyphs) { + // Upload glyph to texture cache if needed (requires GL) + // Note: After the fix in GlyphCache.clearUnusedEntries(), + // both location and coordinates are cleared on eviction. + // GlyphCache.find() will recompute coordinates if needed. + if (glyph.location == null) { + textRenderer.getGlyphCache().upload(glyph); + } + + // Get texture coordinates (will recompute if needed) + final TextureCoords coords = textRenderer.getGlyphCache().find(glyph); + + // Draw the glyph + final float advance = textRenderer.getGlyphRenderer().drawGlyph( + gl, glyph, x, y, 0f, scale, coords + ); + x += advance * scale; + } + } + + textRenderer.end3DRendering(); + } + + @Override + public EnumSet getLayers() { + return LAYERS; + } + + @Override + public int getOrder() { + return org.gephi.viz.engine.util.gl.Constants.RENDERING_ORDER_LABELS; + } + + @Override + public int getPreferenceInCategory() { + return 0; + } +} + diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/text/AbstractLabelUpdater.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/text/AbstractLabelUpdater.java new file mode 100644 index 0000000000..619957270c --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/text/AbstractLabelUpdater.java @@ -0,0 +1,49 @@ +package org.gephi.viz.engine.jogl.pipeline.text; + +import org.gephi.graph.api.Element; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.jogl.JOGLRenderingTarget; +import org.gephi.viz.engine.spi.ElementsCallback; +import org.gephi.viz.engine.spi.WorldUpdater; +import org.gephi.viz.engine.util.gl.OpenGLOptions; + +public abstract class AbstractLabelUpdater implements WorldUpdater { + + private final VizEngine engine; + protected final AbstractLabelData labelData; + protected boolean vaoSupported = false; + protected boolean mipMapSupported = false; + + public AbstractLabelUpdater(VizEngine engine, AbstractLabelData labelData) { + this.engine = engine; + this.labelData = labelData; + } + + @Override + public void init(JOGLRenderingTarget target) { + final OpenGLOptions openGLOptions = engine.getOpenGLOptions(); + vaoSupported = openGLOptions.isVAOSupported(); + // Disable mipmap generation in intel GPUs. See https://github.com/gephi/gephi/issues/1494 (Some label characters fade away when zooming out) + mipMapSupported = !openGLOptions.isVendorIntel(); + } + + @Override + public void dispose(JOGLRenderingTarget target) { + labelData.dispose(); + } + + @Override + public ElementsCallback getElementsCallback() { + return labelData.getElementsCallback(); + } + + @Override + public int getPreferenceInCategory() { + return 0; + } + + @Override + public int getOrder() { + return 0; + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/text/EdgeLabelData.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/text/EdgeLabelData.java new file mode 100644 index 0000000000..2ceeed4752 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/text/EdgeLabelData.java @@ -0,0 +1,15 @@ +package org.gephi.viz.engine.jogl.pipeline.text; + +import org.gephi.graph.api.Edge; +import org.gephi.viz.engine.util.structure.EdgesCallback; + +public class EdgeLabelData extends AbstractLabelData { + + public EdgeLabelData(EdgesCallback edgesCallback) { + super(edgesCallback); + } + + public EdgesCallback getEdgesCallback() { + return (EdgesCallback) getElementsCallback(); + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/text/EdgeLabelRenderer.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/text/EdgeLabelRenderer.java new file mode 100644 index 0000000000..adfacc5919 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/text/EdgeLabelRenderer.java @@ -0,0 +1,24 @@ +package org.gephi.viz.engine.jogl.pipeline.text; + +import org.gephi.graph.api.Edge; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.pipeline.PipelineCategory; + + +public class EdgeLabelRenderer extends AbstractLabelRenderer { + + public EdgeLabelRenderer(VizEngine engine, EdgeLabelData edgeLabelData) { + super(engine, edgeLabelData); + } + + @Override + public String getCategory() { + return PipelineCategory.EDGE_LABEL; + } + + @Override + public String getName() { + return "Edge Labels"; + } +} + diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/text/EdgeLabelUpdater.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/text/EdgeLabelUpdater.java new file mode 100644 index 0000000000..5e57189636 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/text/EdgeLabelUpdater.java @@ -0,0 +1,244 @@ +package org.gephi.viz.engine.jogl.pipeline.text; + +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.GraphView; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.VizEngineModel; +import org.gephi.viz.engine.pipeline.PipelineCategory; +import org.gephi.viz.engine.status.GraphRenderingOptions; +import org.gephi.viz.engine.util.structure.EdgesCallback; + +public class EdgeLabelUpdater extends AbstractLabelUpdater { + + // Multiplier to make self-loop stroke visually match regular edge thickness (same as shader) + private static final float STROKE_MULTIPLIER = 1.3f; + + public EdgeLabelUpdater(VizEngine engine, EdgeLabelData edgeLabelData) { + super(engine, edgeLabelData); + } + + @Override + public void updateWorld(VizEngineModel model) { + final GraphRenderingOptions options = model.getRenderingOptions(); + final GraphView view = model.getGraphModel().getVisibleView(); + + if (!options.isShowEdgeLabels()) { + labelData.dispose(); + return; + } + + // Get edges and their properties + final EdgesCallback edgesCallback = (EdgesCallback) labelData.getElementsCallback(); + final boolean someSelection = edgesCallback.hasSelection(); + final String[] texts = edgesCallback.getEdgeLabelsArray(); + + if (texts == null || texts.length == 0) { + labelData.setMaxValidIndex(-1); + return; + } + + // Get edges array + final Edge[] edges = edgesCallback.getEdgesArray(); + final int maxIndex = edgesCallback.getMaxIndex(); + + // Rendering parameters + final GraphRenderingOptions.LabelColorMode labelColorMode = options.getEdgeLabelColorMode(); + final GraphRenderingOptions.LabelSizeMode labelSizeMode = options.getEdgeLabelSizeMode(); + final GraphRenderingOptions.EdgeColorMode edgeColorMode = options.getEdgeColorMode(); + final float lightenNonSelectedFactor = + options.isLightenNonSelected() ? options.getLightenNonSelectedFactor() : 0f; + final float edgeLabelScale = options.getEdgeLabelScale(); + final float nodeScale = options.getNodeScale(); + final boolean hideNonSelectedLabels = options.isHideNonSelectedEdgeLabels(); + final float zoom = options.getZoom(); + + // Self-loop thickness parameters + final float edgeScale = options.getEdgeScale(); + final float edgeRescaleMin = options.getEdgeRescaleMin(); + final float edgeRescaleMax = options.getEdgeRescaleMax(); + final float minWeight = edgesCallback.getMinWeight(); + final float maxWeight = edgesCallback.getMaxWeight(); + + // No labels to show + if (hideNonSelectedLabels && !someSelection) { + labelData.setMaxValidIndex(-1); + return; + } + + // Ensure label batches array is large enough + labelData.ensureLabelBatchesSize(maxIndex); + + // Ensure we have a text renderer with the right font + labelData.ensureTextRenderer(options.getEdgeLabelFont(), vaoSupported, mipMapSupported); + + // Set the max valid index for this frame (used by renderer to limit iteration) + labelData.setMaxValidIndex(maxIndex); + + // Update label data for each edge + // Only recomputes glyphs if text changed, only recomputes bounds if sizeFactor changed + for (int i = 0; i <= maxIndex; i++) { + final Edge edge = edges[i]; + + if (edge == null) { + // Mark this slot as invalid + labelData.invalidateBatch(i); + continue; + } + + final String text = texts[i]; + if (text == null) { + // Mark as invalid (no text) + labelData.invalidateBatch(i); + continue; + } + + boolean selected = someSelection && edgesCallback.isSelected(i); + + if (hideNonSelectedLabels && !selected) { + // Mark as invalid (hidden) + labelData.invalidateBatch(i); + continue; + } + + // Size calculation + final float edgeSizeFactor = (float) Math.sqrt(edge.getTextProperties().getSize()); + float sizeFactor = edgeLabelScale * edgeSizeFactor; + if (labelSizeMode.equals(GraphRenderingOptions.LabelSizeMode.SCREEN)) { + sizeFactor /= zoom; + } + + // Color calculation + final int rgba = + labelColorMode.equals(GraphRenderingOptions.LabelColorMode.OBJECT) ? getEdgeColor(edge, edgeColorMode) : + edge.getTextProperties().getRGBA(); + final float r = (rgba >> 16 & 255) / 255.0F; + final float g = (rgba >> 8 & 255) / 255.0F; + final float b = (rgba & 255) / 255.0F; + final float a = ((rgba >> 24) & 0xFF) / 255f; + + // The blend mode is GL_ONE, GL_ONE_MINUS_SRC_ALPHA (premultiplied alpha), so RGB + // must be premultiplied by the effective alpha for correct blending on any background. + // Without premultiplication, a non-black color at reduced alpha is still added at + // full RGB strength, making the lightening effect invisible on dark backgrounds. + final float finalR, finalG, finalB, finalA; + if (someSelection && !selected) { + finalA = a * (1 - lightenNonSelectedFactor); + finalR = r * finalA; + finalG = g * finalA; + finalB = b * finalA; + } else { + finalA = a; + finalR = r * a; + finalG = g * a; + finalB = b * a; + } + + // Position of the label + float x, y; + + // Get node sizes (scaled) + final float sourceSize = edge.getSource().size() * nodeScale; + final float targetSize = edge.getTarget().size() * nodeScale; + + // Calculate edge vector + final float dx = edge.getTarget().x() - edge.getSource().x(); + final float dy = edge.getTarget().y() - edge.getSource().y(); + final float edgeLength = (float) Math.sqrt(dx * dx + dy * dy); + + if (edge.isSelfLoop()) { + // Self-loop: position label at the upper-right of the loop circle (45 degrees) + final float weight = (float) edge.getWeight(view); + final float thickness = edgeThickness(edgeScale * edgeRescaleMin, edgeScale * edgeRescaleMax, + weight, minWeight, maxWeight); + final float strokeWidth = thickness * STROKE_MULTIPLIER; + final float loopRadius = sourceSize * 0.5f + strokeWidth * 0.33f; + + // The loop center is at (node.x + loopRadius, node.y + loopRadius) + // Position label at 45 degrees (upper-right) on the loop circumference + // cos(45Β°) = sin(45Β°) β‰ˆ 0.707 + final float cos45 = 0.707f; + x = edge.getSource().x() + loopRadius * (1 + cos45); + y = edge.getSource().y() + loopRadius * (1 + cos45); + } else if (edgeLength > 0) { + // Normalize edge vector + final float ndx = dx / edgeLength; + final float ndy = dy / edgeLength; + + if (edge.isDirected()) { + // Position at 2/3 from source to target, accounting for node sizes + final float offsetFromSource = sourceSize + (edgeLength - sourceSize - targetSize) * 2f / 3f; + x = edge.getSource().x() + ndx * offsetFromSource; + y = edge.getSource().y() + ndy * offsetFromSource; + } else { + // Position at midpoint, accounting for node sizes + final float offsetFromSource = sourceSize + (edgeLength - sourceSize - targetSize) * 0.5f; + x = edge.getSource().x() + ndx * offsetFromSource; + y = edge.getSource().y() + ndy * offsetFromSource; + } + } else { + // Fallback for zero-length edges (overlapping nodes) + x = edge.getSource().x(); + y = edge.getSource().y(); + } + + // Update batch + labelData.updateBatch(edge, i, text, sizeFactor, x, y, + finalR, finalG, finalB, finalA); + } + } + + private int getEdgeColor(final Edge edge, GraphRenderingOptions.EdgeColorMode edgeColorMode) { + switch (edgeColorMode) { + case SOURCE: { + return edge.getSource().getRGBA(); + } + case TARGET: { + return edge.getTarget().getRGBA(); + } + case MIXED: { + final int s = edge.getSource().getRGBA(); + final int t = edge.getTarget().getRGBA(); + if (s == t) { + return s; + } + final int b0 = ((s) & 0xFF) + ((t) & 0xFF); + final int b1 = ((s >>> 8) & 0xFF) + ((t >>> 8) & 0xFF); + final int b2 = ((s >>> 16) & 0xFF) + ((t >>> 16) & 0xFF); + final int b3 = ((s >>> 24) & 0xFF) + ((t >>> 24) & 0xFF); + return ((b3 >>> 1) << 24) | ((b2 >>> 1) << 16) | ((b1 >>> 1) << 8) | (b0 >>> 1); + } + case SELF: + default: { + return edge.getRGBA(); + } + } + } + + /** + * Computes edge thickness matching the GLSL edge_thickness function. + */ + private float edgeThickness(float edgeScaleMin, float edgeScaleMax, float weight, + float minWeight, float maxWeight) { + if (Math.abs(edgeScaleMin - edgeScaleMax) < 1e-3f) { + return edgeScaleMin; + } + float weightDivisor = maxWeight - minWeight; + if (Math.abs(weightDivisor) < 1e-3f) { + weightDivisor = 1f; + } + float t = (weight - minWeight) / weightDivisor; + t = Math.max(0f, Math.min(1f, t)); // clamp to [0, 1] + return edgeScaleMin + (edgeScaleMax - edgeScaleMin) * t; + } + + @Override + public String getCategory() { + return PipelineCategory.EDGE_LABEL; + } + + @Override + public String getName() { + return "Edges Labels"; + } + +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/text/NodeLabelData.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/text/NodeLabelData.java new file mode 100644 index 0000000000..d9ff0e9912 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/text/NodeLabelData.java @@ -0,0 +1,15 @@ +package org.gephi.viz.engine.jogl.pipeline.text; + +import org.gephi.graph.api.Node; +import org.gephi.viz.engine.util.structure.NodesCallback; + +public class NodeLabelData extends AbstractLabelData { + + public NodeLabelData(NodesCallback nodesCallback) { + super(nodesCallback); + } + + public NodesCallback getNodesCallback() { + return (NodesCallback) getElementsCallback(); + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/text/NodeLabelRenderer.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/text/NodeLabelRenderer.java new file mode 100644 index 0000000000..037ceb68a2 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/text/NodeLabelRenderer.java @@ -0,0 +1,24 @@ +package org.gephi.viz.engine.jogl.pipeline.text; + +import org.gephi.graph.api.Node; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.pipeline.PipelineCategory; + +@SuppressWarnings("rawtypes") +public class NodeLabelRenderer extends AbstractLabelRenderer { + + public NodeLabelRenderer(VizEngine engine, NodeLabelData nodeLabelData) { + super(engine, nodeLabelData); + } + + @Override + public String getCategory() { + return PipelineCategory.NODE_LABEL; + } + + @Override + public String getName() { + return "Node Labels"; + } +} + diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/text/NodeLabelUpdater.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/text/NodeLabelUpdater.java new file mode 100644 index 0000000000..0f990f6d6e --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/pipeline/text/NodeLabelUpdater.java @@ -0,0 +1,233 @@ +package org.gephi.viz.engine.jogl.pipeline.text; + +import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap; +import org.gephi.graph.api.Node; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.VizEngineModel; +import org.gephi.viz.engine.pipeline.PipelineCategory; +import org.gephi.viz.engine.status.GraphRenderingOptions; +import org.gephi.viz.engine.util.structure.NodesCallback; + +public class NodeLabelUpdater extends AbstractLabelUpdater { + + private static final int GRID_SIZE = 15; + + public NodeLabelUpdater(VizEngine engine, AbstractLabelData labelData) { + super(engine, labelData); + } + + @Override + public void updateWorld(VizEngineModel model) { + final GraphRenderingOptions options = model.getRenderingOptions(); + + if (!options.isShowNodeLabels()) { + labelData.dispose(); + return; + } + + // Get nodes and their properties + final NodesCallback nodesCallback = (NodesCallback) labelData.getElementsCallback(); + final boolean someSelection = nodesCallback.hasSelection(); + final String[] texts = nodesCallback.getNodesLabelsArray(); + + if (texts == null || texts.length == 0) { + labelData.setMaxValidIndex(-1); + return; + } + + // Get nodes array + final Node[] nodes = nodesCallback.getNodesArray(); + final int maxIndex = nodesCallback.getMaxIndex(); + + // Rendering parameters + final GraphRenderingOptions.LabelColorMode labelColorMode = options.getNodeLabelColorMode(); + final GraphRenderingOptions.LabelSizeMode labelSizeMode = options.getNodeLabelSizeMode(); + final float lightenNonSelectedFactor = + options.isLightenNonSelected() ? options.getLightenNonSelectedFactor() : 0f; + final float nodeLabelScale = options.getNodeLabelScale(); + final float fitNodeLabelsToNodeSizeFactor = options.getNodeLabelFitToNodeSizeFactor(); + final boolean fitToNodeSize = options.isNodeLabelFitToNodeSize(); + final boolean hideNonSelectedLabels = options.isHideNonSelectedNodeLabels(); + final boolean avoidOverlap = options.isAvoidNodeLabelOverlap(); + final float zoom = options.getZoom(); + final float nodeScale = options.getNodeScale(); + + // No labels to show + if (hideNonSelectedLabels && !someSelection) { + labelData.setMaxValidIndex(-1); + return; + } + + // Ensure label batches array is large enough + labelData.ensureLabelBatchesSize(maxIndex); + + // Ensure we have a text renderer with the right font + labelData.ensureTextRenderer(options.getNodeLabelFont(), vaoSupported, mipMapSupported); + + // Set the max valid index for this frame (used by renderer to limit iteration) + labelData.setMaxValidIndex(maxIndex); + + // Initialize grid for overlap detection if enabled + Int2IntOpenHashMap gridOccupancy = null; // Maps cell index -> storeId + float gridMinX = 0, gridMinY = 0; + float gridWidth = 0, gridHeight = 0; + int gridCols = 0, gridRows = 0; + + if (avoidOverlap) { + // Get bounds from NodesCallback with padding + gridMinX = nodesCallback.getMinX() - GRID_SIZE; + gridMinY = nodesCallback.getMinY() - GRID_SIZE; + float gridMaxX = nodesCallback.getMaxX() + GRID_SIZE; + float gridMaxY = nodesCallback.getMaxY() + GRID_SIZE; + gridWidth = gridMaxX - gridMinX; + gridHeight = gridMaxY - gridMinY; + + if (gridWidth > 0 && gridHeight > 0) { + gridCols = (int) Math.ceil(gridWidth / GRID_SIZE); + gridRows = (int) Math.ceil(gridHeight / GRID_SIZE); + gridOccupancy = new Int2IntOpenHashMap(); + gridOccupancy.defaultReturnValue(-1); // -1 means empty cell + } + } + + // Update label data for each node + // Only recomputes glyphs if text changed, only recomputes bounds if sizeFactor changed + for (int i = 0; i <= maxIndex; i++) { + final Node node = nodes[i]; + + if (node == null) { + // Mark this slot as invalid + labelData.invalidateBatch(i); + continue; + } + + final String text = texts[i]; + if (text == null) { + // Mark as invalid (no text) + labelData.invalidateBatch(i); + continue; + } + + boolean selected = someSelection && nodesCallback.isSelected(i, true); + + if (hideNonSelectedLabels && !selected) { + // Mark as invalid (hidden) + labelData.invalidateBatch(i); + continue; + } + + // Size calculation + final float baseNodeSizeFactor = + fitToNodeSize ? node.size() * fitNodeLabelsToNodeSizeFactor * nodeScale : 1f; + // Add tiny bias (<1%) based on node size to prioritize labels of larger nodes in overlap detection + final float nodeSizeFactor = baseNodeSizeFactor * (1.0f + node.size() * nodeScale * 0.00001f); + float sizeFactor = nodeLabelScale * nodeSizeFactor * (float) Math.sqrt(node.getTextProperties().getSize()); + if (labelSizeMode.equals(GraphRenderingOptions.LabelSizeMode.SCREEN)) { + sizeFactor /= zoom; + } + + // Color calculation + final int rgba = labelColorMode.equals(GraphRenderingOptions.LabelColorMode.OBJECT) ? node.getRGBA() : + node.getTextProperties().getRGBA(); + final float r = (rgba >> 16 & 255) / 255.0F; + final float g = (rgba >> 8 & 255) / 255.0F; + final float b = (rgba & 255) / 255.0F; + final float a = (rgba >> 24 & 255) / 255f; + + // The blend mode is GL_ONE, GL_ONE_MINUS_SRC_ALPHA (premultiplied alpha), so RGB + // must be premultiplied by the effective alpha for correct blending on any background. + // Without premultiplication, a non-black color at reduced alpha is still added at + // full RGB strength, making the lightening effect invisible on dark backgrounds. + final float finalR, finalG, finalB, finalA; + if (someSelection && !selected) { + finalA = a * (1 - lightenNonSelectedFactor); + finalR = r * finalA; + finalG = g * finalA; + finalB = b * finalA; + } else { + finalA = a; + finalR = r * a; + finalG = g * a; + finalB = b * a; + } + + // Update batch first - this computes dimensions and glyphs + NodeLabelData.LabelBatch batch = labelData.updateBatch(node, i, text, sizeFactor, node.x(), node.y(), + finalR, finalG, finalB, finalA); + + // Check for overlap if enabled (after dimensions are computed) + boolean shouldRender = true; + if (avoidOverlap && gridOccupancy != null && batch.isWriteValid() && !selected) { + // Get label dimensions from node text properties (set by updateBatch) + float width = node.getTextProperties().getWidth(); + float height = node.getTextProperties().getHeight(); + + if (width > 0 && height > 0) { + // Calculate grid cells this label overlaps + float labelMinX = node.x() - width * 0.5f; + float labelMaxX = node.x() + width * 0.5f; + float labelMinY = node.y() - height * 0.5f; + float labelMaxY = node.y() + height * 0.5f; + + int minCol = Math.max(0, (int) ((labelMinX - gridMinX) / GRID_SIZE)); + int maxCol = Math.min(gridCols - 1, (int) ((labelMaxX - gridMinX) / GRID_SIZE)); + int minRow = Math.max(0, (int) ((labelMinY - gridMinY) / GRID_SIZE)); + int maxRow = Math.min(gridRows - 1, (int) ((labelMaxY - gridMinY) / GRID_SIZE)); + + // Check all overlapping cells + for (int row = minRow; row <= maxRow && shouldRender; row++) { + for (int col = minCol; col <= maxCol && shouldRender; col++) { + int cellIndex = row * gridCols + col; + int occupyingStoreId = gridOccupancy.get(cellIndex); + + if (occupyingStoreId != -1) { + // Cell is occupied - check if occupying batch is still valid + NodeLabelData.LabelBatch occupyingBatch = labelData.getBatch(occupyingStoreId); + if (occupyingBatch != null && occupyingBatch.isWriteValid()) { + // Compare size factors + float occupyingSizeFactor = occupyingBatch.getWriteScale(); + if (sizeFactor <= occupyingSizeFactor) { + // Current label is smaller or equal - don't render + shouldRender = false; + } else { + // Current label is larger - invalidate the smaller one + labelData.invalidateBatch(occupyingStoreId); + // Note: We don't clean up grid cells of the invalidated label + // as it doesn't matter - larger labels will overwrite + } + } + // If occupying batch is invalid or null, treat cell as free + } + } + } + + if (shouldRender) { + // Mark all cells as occupied by this label + for (int row = minRow; row <= maxRow; row++) { + for (int col = minCol; col <= maxCol; col++) { + int cellIndex = row * gridCols + col; + gridOccupancy.put(cellIndex, i); + } + } + } + } + } + + if (!shouldRender) { + // Mark as invalid (overlapping with larger label) + labelData.invalidateBatch(i); + } + } + } + + @Override + public String getCategory() { + return PipelineCategory.NODE_LABEL; + } + + @Override + public String getName() { + return "Nodes Labels"; + } + +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/ManagedDirectBuffer.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/ManagedDirectBuffer.java new file mode 100644 index 0000000000..2e9efec5fd --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/ManagedDirectBuffer.java @@ -0,0 +1,68 @@ +package org.gephi.viz.engine.jogl.util; + +import static org.gephi.viz.engine.util.ArrayUtils.getNextPowerOf2; + +import com.jogamp.opengl.util.GLBuffers; +import java.nio.Buffer; +import java.nio.ByteBuffer; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.gephi.viz.engine.VizEngine; + +/** + * + * @author Eduardo Ramos + */ +public class ManagedDirectBuffer { + + private final int glType; + private Buffer buffer; + private int elementsCapacity; + + public ManagedDirectBuffer(int glType, int initialCapacity) { + this.glType = glType; + this.elementsCapacity = initialCapacity; + this.buffer = GLBuffers.newDirectGLBuffer(glType, initialCapacity); + } + + public Buffer getBuffer() { + return buffer; + } + + public FloatBuffer floatBuffer() { + return (FloatBuffer) buffer.clear(); + } + + public IntBuffer intBuffer() { + return (IntBuffer) buffer.clear(); + } + + public void ensureCapacity(int elements) { + if (elementsCapacity < elements) { + int newElementsCapacity = getNextPowerOf2(elements); + + Logger.getLogger(VizEngine.class.getSimpleName()).log(Level.FINE, + "Growing managed direct buffer from " + elementsCapacity + " to " + newElementsCapacity + " elements"); + Buffer newBuffer = GLBuffers.newDirectGLBuffer(glType, newElementsCapacity); + + buffer.clear(); + GLBuffers.put(newBuffer, buffer); + + this.buffer = newBuffer; + this.elementsCapacity = newElementsCapacity; + } + } + + public int getElementsCapacity() { + return elementsCapacity; + } + + public void destroy() { + // Should always be, but let's be careful: + if (buffer instanceof ByteBuffer) { + GLBuffers.Cleaner.clean((ByteBuffer) buffer); + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/Mesh.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/Mesh.java new file mode 100644 index 0000000000..1ae7f5558b --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/Mesh.java @@ -0,0 +1,24 @@ +package org.gephi.viz.engine.jogl.util; + +public class Mesh { + /** + * Data class for Mesh + * [a, b, c] > 3 vertex = vertexData.length = 3 + * ^ + * 1 component per Vertex + *

              + * [ax,ay, bx,by, cx,cy] > 3 vertex = vertexData.length = 6 + * ^--^ + * 2 components per Vertex + *

              + * [ax,ay,az, bx,by,bz, cx,cy,cz] > 3 vertex = vertexData.length = 9 + * ^--^--^ + * 3 components per Vertex + */ + public float[] vertexData; + public int vertexCount; + public int vertexComponentSize; + + +} + diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/ScreenshotTaker.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/ScreenshotTaker.java new file mode 100644 index 0000000000..978b0956ba --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/ScreenshotTaker.java @@ -0,0 +1,274 @@ +package org.gephi.viz.engine.jogl.util; + +import static com.jogamp.opengl.GL.GL_BACK; +import static com.jogamp.opengl.GL.GL_BGRA; +import static com.jogamp.opengl.GL2GL3.GL_UNSIGNED_INT_8_8_8_8_REV; + +import com.jogamp.nativewindow.util.PixelFormat; +import com.jogamp.newt.event.NEWTEvent; +import com.jogamp.opengl.GL; +import com.jogamp.opengl.GLAutoDrawable; +import com.jogamp.opengl.GLEventListener; +import com.jogamp.opengl.util.GLPixelBuffer; +import com.jogamp.opengl.util.GLPixelBuffer.GLPixelAttributes; +import com.jogamp.opengl.util.TileRenderer; +import com.jogamp.opengl.util.awt.ImageUtil; +import com.jogamp.opengl.util.texture.TextureData; +import java.awt.image.BufferedImage; +import java.awt.image.DataBufferByte; +import java.nio.ByteBuffer; +import java.nio.IntBuffer; +import java.util.concurrent.CancellationException; +import java.util.function.BooleanSupplier; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.jogl.JOGLRenderingTarget; +import org.joml.Vector2fc; + + +public class ScreenshotTaker { + + /** + * Calculates the maximum scale factor that can be used for tiled screenshots without exceeding array size limits. + * + * @param viewportWidth The width of the viewport/tile. + * @param viewportHeight The height of the viewport/tile. + * @param transparentBackground Whether the screenshot will have a transparent background (requires more memory). + * @return The maximum scale factor that can be safely used. + */ + public static int getMaxScaleFactor(int viewportWidth, int viewportHeight, boolean transparentBackground) { + int bytesPerPixel = transparentBackground ? 4 : 3; + long maxTotalPixels = Integer.MAX_VALUE / bytesPerPixel; + long baseTilePixels = (long) viewportWidth * viewportHeight; + return (int) Math.sqrt((double) maxTotalPixels / baseTilePixels); + } + + /** + * Takes a simple screenshot of the current framebuffer. + * + * @param gl The GL context to read from. + * @param width The width of the screenshot. + * @param height The height of the screenshot. + * @param transparentBackground Whether the screenshot should have a transparent background (if supported). + * @return A BufferedImage containing the screenshot. + */ + public static BufferedImage takeSimpleScreenshot(GL gl, int width, int height, boolean transparentBackground) { + // Create array to hold pixel data + int[] pixelData = new int[width * height]; + + // Wrap the array in an IntBuffer for OpenGL + IntBuffer buffer = IntBuffer.wrap(pixelData); + + // Prepare Framebuffer capture + gl.getGL3ES3().glReadBuffer(GL_BACK); // Some say GL_FRONT, some say GL_BACK + gl.glPixelStorei(GL.GL_PACK_ALIGNMENT, 1); + gl.glReadPixels(0, 0, width, height, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, buffer); + + // Flip vertically in-place (OpenGL origin is bottom-left, BufferedImage is top-left) + for (int y = 0; y < height / 2; y++) { + int topRowStart = y * width; + int bottomRowStart = (height - 1 - y) * width; + + // Swap rows + for (int x = 0; x < width; x++) { + int temp = pixelData[topRowStart + x]; + pixelData[topRowStart + x] = pixelData[bottomRowStart + x]; + pixelData[bottomRowStart + x] = temp; + } + } + + BufferedImage screenshot = + new BufferedImage(width, height, + transparentBackground ? BufferedImage.TYPE_INT_ARGB : BufferedImage.TYPE_INT_RGB); + screenshot.setRGB(0, 0, width, height, pixelData, 0, width); + return screenshot; + } + + /** + * Takes a tiled screenshot of the entire scene rendered by the given VizEngine. + * + * @param engine The VizEngine to take the screenshot from. + * @param scaleFactor The scale factor for the screenshot (e.g., 2 for double size). + * @param transparentBackground Whether the screenshot should have a transparent background (if supported). + * @param isCancelled A BooleanSupplier that returns true if the operation should be cancelled. + * @return A BufferedImage containing the tiled screenshot. + */ + public static BufferedImage takeTiledScreenshot(VizEngine engine, int scaleFactor, + boolean transparentBackground, BooleanSupplier isCancelled) { + + float originalZoom = engine.getZoom(); + Vector2fc originalPan = engine.getRenderingOptions().getPan(); + + GLAutoDrawable drawable = engine.getRenderingTarget().getDrawable(); + int tileWidth = drawable.getSurfaceWidth(); + int tileHeight = drawable.getSurfaceHeight(); + + // Check for potential overflow when calculating final image dimensions + long imageWidthLong = (long) tileWidth * scaleFactor; + long imageHeightLong = (long) tileHeight * scaleFactor; + + // Check if dimensions exceed int range + if (imageWidthLong > Integer.MAX_VALUE || imageHeightLong > Integer.MAX_VALUE) { + throw new IllegalArgumentException( + String.format("Image dimensions too large: %dx%d (scale factor: %d). Maximum dimension is %d.", + imageWidthLong, imageHeightLong, scaleFactor, Integer.MAX_VALUE)); + } + + // Check if total byte array size would exceed array size limits + // BufferedImage uses byte[] internally: TYPE_3BYTE_BGR (3 bytes/pixel) or TYPE_4BYTE_ABGR (4 bytes/pixel) + long totalPixels = imageWidthLong * imageHeightLong; + int bytesPerPixel = transparentBackground ? 4 : 3; + long totalBytes = totalPixels * bytesPerPixel; + + if (totalBytes > Integer.MAX_VALUE) { + int maxScaleFactor = getMaxScaleFactor(tileWidth, tileHeight, transparentBackground); + throw new IllegalArgumentException( + String.format("Scale factor %d is too large for %dx%d viewport. Maximum scale factor: %d", + scaleFactor, tileWidth, tileHeight, maxScaleFactor)); + } + + int imageWidth = (int) imageWidthLong; + int imageHeight = (int) imageHeightLong; + + TileRenderer renderer = new TileRenderer(); + renderer.setImageSize(imageWidth, imageHeight); + renderer.setTileSize(tileWidth, tileHeight, 0); + renderer.attachAutoDrawable(drawable); + + final GLPixelBuffer.GLPixelBufferProvider pixelBufferProvider = GLPixelBuffer.defaultProviderWithRowStride; + final boolean[] flipVertically = {false}; + final GLEventListener preTileGLEL = new GLEventListener() { + @Override + public void init(final GLAutoDrawable drawable) { + final GL gl = drawable.getGL(); + final PixelFormat.Composition hostPixelComp = + pixelBufferProvider.getHostPixelComp(gl.getGLProfile(), transparentBackground ? 4 : 3); + final GLPixelAttributes pixelAttribs = + pixelBufferProvider.getAttributes(gl, transparentBackground ? 4 : 3, true); + final GLPixelBuffer pixelBuffer = + pixelBufferProvider.allocate(gl, hostPixelComp, pixelAttribs, true, imageWidth, imageHeight, 1, 0); + renderer.setImageBuffer(pixelBuffer); + flipVertically[0] = !drawable.isGLOriented(); + } + + @Override + public void dispose(final GLAutoDrawable drawable) { + } + + @Override + public void display(final GLAutoDrawable drawable) { + } + + @Override + public void reshape(final GLAutoDrawable drawable, final int x, final int y, final int width, + final int height) { + } + }; + renderer.setGLEventListener(preTileGLEL, null); + + float[] backgroundColor = engine.getBackgroundColor(); + if (transparentBackground) { + backgroundColor[3] = 0f; + engine.setBackgroundColor(backgroundColor); + } + + try { + while (!renderer.eot()) { + renderer.display(); + engine.setZoom(originalZoom); + engine.setTranslate(originalPan); + // Check if the task was cancelled + if (isCancelled.getAsBoolean()) { + break; + } + } + } finally { + renderer.detachAutoDrawable(); + + // Restore original view and background + engine.setZoom(originalZoom); + engine.setTranslate(originalPan); + if (transparentBackground) { + backgroundColor[3] = 1f; + engine.setBackgroundColor(backgroundColor); + } + } + + if (isCancelled.getAsBoolean()) { + throw new CancellationException("Tiled screenshot taking was cancelled."); + } + + final GLPixelBuffer imageBuffer = renderer.getImageBuffer(); + + final TextureData textureData = new TextureData( + drawable.getChosenGLCapabilities().getGLProfile(), + transparentBackground ? GL.GL_RGBA : GL.GL_RGB, + imageWidth, imageHeight, + 0, + imageBuffer.pixelAttributes, + false, false, + flipVertically[0], + imageBuffer.buffer, + null /* Flusher */); + + return toImage(textureData, isCancelled); + } + + private static BufferedImage toImage(TextureData data, BooleanSupplier isCancelled) { + final int pixelFormat = data.getPixelFormat(); + final int pixelType = data.getPixelType(); + if ((pixelFormat == GL.GL_RGB || + pixelFormat == GL.GL_RGBA) && + (pixelType == GL.GL_BYTE || + pixelType == GL.GL_UNSIGNED_BYTE)) { + BufferedImage image = new BufferedImage(data.getWidth(), data.getHeight(), + (pixelFormat == GL.GL_RGB) ? + BufferedImage.TYPE_3BYTE_BGR : + BufferedImage.TYPE_4BYTE_ABGR); + final byte[] imageData = ((DataBufferByte) image.getRaster().getDataBuffer()).getData(); + ByteBuffer buf = (ByteBuffer) data.getBuffer(); + if (buf == null) { + buf = (ByteBuffer) data.getMipmapData()[0]; + } + buf.rewind(); + buf.get(imageData); + buf.rewind(); + + if (isCancelled.getAsBoolean()) { + throw new CancellationException("Screenshot conversion to image was cancelled."); + } + + // Swizzle image components to be correct + if (pixelFormat == GL.GL_RGB) { + for (int i = 0; i < imageData.length; i += 3) { + final byte red = imageData[i]; + final byte blue = imageData[i + 2]; + imageData[i] = blue; + imageData[i + 2] = red; + } + } else { + for (int i = 0; i < imageData.length; i += 4) { + final byte red = imageData[i]; + final byte green = imageData[i + 1]; + final byte blue = imageData[i + 2]; + final byte alpha = imageData[i + 3]; + imageData[i] = alpha; + imageData[i + 1] = blue; + imageData[i + 2] = green; + imageData[i + 3] = red; + } + } + + // Flip image vertically for the user's convenience + ImageUtil.flipImageVertically(image); + + if (isCancelled.getAsBoolean()) { + throw new CancellationException("Screenshot conversion to image was cancelled."); + } + + return image; + } else { + throw new IllegalArgumentException("Unsupported pixel format/type: " + + pixelFormat + "/" + pixelType); + } + } +} \ No newline at end of file diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/GLBuffer.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/GLBuffer.java new file mode 100644 index 0000000000..ed1e59908f --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/GLBuffer.java @@ -0,0 +1,47 @@ +package org.gephi.viz.engine.jogl.util.gl; + +import com.jogamp.opengl.GL; +import java.nio.Buffer; + +/** + * + * @author Eduardo Ramos + */ +public interface GLBuffer { + + void init(GL gl, long sizeBytes, int usageFlags); + + void init(GL gl, Buffer buffer, int usageFlags); + + void update(GL gl, Buffer buffer); + + void update(GL gl, Buffer buffer, long sizeBytes); + + void update(GL gl, Buffer buffer, long offsetBytes, long sizeBytes); + + void updateWithOrphaning(GL gl, Buffer buffer); + + void updateWithOrphaning(GL gl, Buffer buffer, long sizeBytes); + + void bind(GL gl); + + void destroy(GL gl); + + int getId(); + + long getSizeBytes(); + + int getType(); + + int getUsageFlags(); + + boolean isBound(GL gl); + + boolean isInitialized(); + + long size(); + + void unbind(GL gl); + + boolean isMutable(); +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/GLBufferImmutable.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/GLBufferImmutable.java new file mode 100644 index 0000000000..12c9ed44aa --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/GLBufferImmutable.java @@ -0,0 +1,169 @@ +package org.gephi.viz.engine.jogl.util.gl; + +import static org.gephi.viz.engine.util.gl.Buffers.bufferElementBytes; + +import com.jogamp.opengl.GL; +import java.nio.Buffer; + +/** + * + * @author Eduardo Ramos + */ +public class GLBufferImmutable implements GLBuffer { + + private final int id; + private final int type; + + private int flags = -1; + private long sizeBytes = -1; + + public GLBufferImmutable(int id, int type) { + this.id = id; + this.type = type; + } + + @Override + public void bind(GL gl) { + gl.glBindBuffer(type, id); + } + + @Override + public void unbind(GL gl) { + gl.glBindBuffer(type, 0); + } + + @Override + public void init(GL gl, long sizeBytes, int flags) { + if (!isBound(gl)) { + throw new IllegalStateException("You should bind the buffer first!"); + } + + if (isInitialized()) { + throw new UnsupportedOperationException("Cannot reinitialize an immutable buffer"); + } + + if (!gl.isGL4()) { + throw new UnsupportedOperationException("Need GL4 for using immutable buffer"); + } + + this.flags = flags; + this.sizeBytes = sizeBytes; + + gl.getGL4().glBufferStorage(type, sizeBytes, null, flags); + } + + @Override + public void init(GL gl, Buffer buffer, int flags) { + if (!isBound(gl)) { + throw new IllegalStateException("You should bind the buffer first!"); + } + + if (isInitialized()) { + throw new UnsupportedOperationException("Cannot reinitialize an immutable buffer"); + } + + if (!gl.isGL4()) { + throw new UnsupportedOperationException("Need GL4 for using immutable buffer"); + } + + this.flags = flags; + final int elementBytes = bufferElementBytes(buffer); + + sizeBytes = (long) buffer.capacity() * elementBytes; + + gl.getGL4().glBufferStorage(type, sizeBytes, buffer, flags); + } + + @Override + public void update(GL gl, Buffer buffer) { + update(gl, buffer, (long) buffer.remaining() * bufferElementBytes(buffer)); + } + + @Override + public void update(GL gl, Buffer buffer, long sizeBytes) { + update(gl, buffer, 0, sizeBytes); + } + + @Override + public void update(GL gl, Buffer buffer, long offsetBytes, long sizeBytes) { + if (!isInitialized()) { + throw new IllegalStateException("You should initialize the buffer first!"); + } + if (!isBound(gl)) { + throw new IllegalStateException("You should bind the buffer first!"); + } + + final long neededBytesCapacity = offsetBytes + sizeBytes; + ensureCapacity(gl, neededBytesCapacity); + + gl.glBufferSubData(type, offsetBytes, sizeBytes, buffer); + } + + @Override + public void updateWithOrphaning(GL gl, Buffer buffer) { + throw new UnsupportedOperationException("This buffer is immutable and can't be reinitialized"); + } + + @Override + public void updateWithOrphaning(GL gl, Buffer buffer, long sizeBytes) { + throw new UnsupportedOperationException("This buffer is immutable and can't be reinitialized"); + } + + @Override + public long size() { + return sizeBytes; + } + + private void ensureCapacity(GL gl, long neededBytes) { + if (sizeBytes < neededBytes) { + throw new UnsupportedOperationException( + "This buffer is immutable and needed capacity (" + neededBytes + ") is not enough. Size = " + + sizeBytes); + } + } + + @Override + public boolean isInitialized() { + return sizeBytes != -1; + } + + @Override + public int getId() { + return id; + } + + @Override + public int getType() { + return type; + } + + @Override + public boolean isBound(GL gl) { + return gl.getBoundBuffer(type) == id; + } + + @Override + public int getUsageFlags() { + return flags; + } + + @Override + public long getSizeBytes() { + return sizeBytes; + } + + @Override + public void destroy(GL gl) { + if (!isInitialized()) { + throw new IllegalStateException("You should initialize the buffer first!"); + } + + gl.glDeleteBuffers(1, new int[] {id}, 0); + sizeBytes = -1; + } + + @Override + public boolean isMutable() { + return false; + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/GLBufferMutable.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/GLBufferMutable.java new file mode 100644 index 0000000000..3277a48ad4 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/GLBufferMutable.java @@ -0,0 +1,177 @@ +package org.gephi.viz.engine.jogl.util.gl; + +import static org.gephi.viz.engine.util.ArrayUtils.getNextPowerOf2; +import static org.gephi.viz.engine.util.gl.Buffers.bufferElementBytes; + +import com.jogamp.opengl.GL; +import com.jogamp.opengl.GL3ES3; +import java.nio.Buffer; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.gephi.viz.engine.VizEngine; + +/** + * + * @author Eduardo Ramos + */ +public class GLBufferMutable implements GLBuffer { + + public static final int GL_BUFFER_TYPE_ARRAY = GL.GL_ARRAY_BUFFER; + public static final int GL_BUFFER_TYPE_ELEMENT_INDICES = GL.GL_ELEMENT_ARRAY_BUFFER; + public static final int GL_BUFFER_TYPE_DRAW_INDIRECT = GL3ES3.GL_DRAW_INDIRECT_BUFFER; + public static final int GL_BUFFER_USAGE_STATIC_DRAW = GL.GL_STATIC_DRAW; + public static final int GL_BUFFER_USAGE_STREAM_DRAW = GL3ES3.GL_STREAM_DRAW; + public static final int GL_BUFFER_USAGE_DYNAMIC_DRAW = GL.GL_DYNAMIC_DRAW; + + private final int id; + private final int type; + + private int usage = -1; + private long sizeBytes = -1; + + public GLBufferMutable(int id, int type) { + this.id = id; + this.type = type; + } + + @Override + public void bind(GL gl) { + gl.glBindBuffer(type, id); + } + + @Override + public void unbind(GL gl) { + gl.glBindBuffer(type, 0); + } + + @Override + public void init(GL gl, long sizeBytes, int usage) { + if (!isBound(gl)) { + throw new IllegalStateException("You should bind the buffer first!"); + } + + this.usage = usage; + this.sizeBytes = sizeBytes; + + gl.glBufferData(type, sizeBytes, null, usage); + } + + @Override + public void init(GL gl, Buffer buffer, int usage) { + if (!isBound(gl)) { + throw new IllegalStateException("You should bind the buffer first!"); + } + + this.usage = usage; + final int elementBytes = bufferElementBytes(buffer); + + sizeBytes = (long) buffer.capacity() * elementBytes; + + gl.glBufferData(type, sizeBytes, buffer, usage); + } + + @Override + public void update(GL gl, Buffer buffer) { + update(gl, buffer, (long) buffer.remaining() * bufferElementBytes(buffer)); + } + + @Override + public void update(GL gl, Buffer buffer, long sizeBytes) { + update(gl, buffer, 0, sizeBytes); + } + + @Override + public void update(GL gl, Buffer buffer, long offsetBytes, long sizeBytes) { + if (!isInitialized()) { + throw new IllegalStateException("You should initialize the buffer first!"); + } + if (!isBound(gl)) { + throw new IllegalStateException("You should bind the buffer first!"); + } + + final long neededBytesCapacity = offsetBytes + sizeBytes; + ensureCapacity(gl, neededBytesCapacity); + + gl.glBufferSubData(type, offsetBytes, sizeBytes, buffer); + } + + @Override + public void updateWithOrphaning(GL gl, Buffer buffer) { + if (!isBound(gl)) { + throw new IllegalStateException("You should bind the buffer first!"); + } + + gl.glBufferData(type, sizeBytes, null, usage); + update(gl, buffer); + } + + @Override + public void updateWithOrphaning(GL gl, Buffer buffer, long sizeBytes) { + if (!isBound(gl)) { + throw new IllegalStateException("You should bind the buffer first!"); + } + + gl.glBufferData(type, sizeBytes, null, usage); + update(gl, buffer, sizeBytes); + } + + @Override + public void destroy(GL gl) { + if (!isInitialized()) { + throw new IllegalStateException("You should initialize the buffer first!"); + } + + gl.glDeleteBuffers(1, new int[] {id}, 0); + sizeBytes = -1; + } + + @Override + public long size() { + return sizeBytes; + } + + public void ensureCapacity(GL gl, long neededBytes) { + if (sizeBytes < neededBytes) { + long newSizeBytes = getNextPowerOf2(neededBytes); + + Logger.getLogger(VizEngine.class.getSimpleName()) + .log(Level.FINE, "Growing GL buffer from " + sizeBytes + " to " + newSizeBytes + " bytes"); + init(gl, newSizeBytes, usage); + } + } + + @Override + public boolean isInitialized() { + return sizeBytes != -1; + } + + @Override + public int getId() { + return id; + } + + @Override + public int getType() { + return type; + } + + @Override + public boolean isBound(GL gl) { + return gl.getBoundBuffer(type) == id; + } + + @Override + public int getUsageFlags() { + return usage; + } + + @Override + public long getSizeBytes() { + return sizeBytes; + } + + @Override + public boolean isMutable() { + return true; + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/GLFunctions.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/GLFunctions.java new file mode 100644 index 0000000000..64a7fbcc2c --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/GLFunctions.java @@ -0,0 +1,82 @@ +package org.gephi.viz.engine.jogl.util.gl; + +import static com.jogamp.opengl.GL.GL_TRIANGLES; +import static org.gephi.viz.engine.util.gl.GLConstants.INDIRECT_DRAW_COMMAND_BYTES; + +import com.jogamp.opengl.GL3ES3; +import com.jogamp.opengl.GL4; +import java.nio.IntBuffer; + +public class GLFunctions { + + public static void glGenVertexArrays(GL3ES3 gl, int n, IntBuffer arrays) { + if (gl.isGL2GL3()) { + gl.getGL2GL3().glGenVertexArrays(n, arrays); + } else { + gl.getGLES2().glGenVertexArraysOES(n, arrays); + } + } + + public static void glDeleteVertexArrays(GL3ES3 gl, int n, IntBuffer arrays) { + if (gl.isGL2GL3()) { + gl.getGL2GL3().glDeleteVertexArrays(n, arrays); + } else { + gl.getGLES2().glDeleteVertexArraysOES(n, arrays); + } + } + + public static void glBindVertexArray(GL3ES3 gl, int array) { + if (gl.isGL2GL3()) { + gl.getGL2GL3().glBindVertexArray(array); + } else { + gl.getGLES2().glBindVertexArrayOES(array); + } + } + + public static void glUnbindVertexArray(GL3ES3 gl, int defaultVAO) { + if (gl.isGL2GL3()) { + gl.getGL2GL3().glBindVertexArray(defaultVAO); + } else { + gl.getGLES2().glBindVertexArrayOES(defaultVAO); + } + } + + public static void glVertexAttribDivisor(GL3ES3 gl, int index, int divisor) { + if (gl.isGL2GL3()) { + gl.getGL2GL3().glVertexAttribDivisor(index, divisor); + } else if (gl.isGL3ES3()) { + gl.getGLES2().glVertexAttribDivisor(index, divisor); + } + } + + public static String glGetStringi(GL3ES3 gl, int name, int index) { + if (gl.isGL2GL3()) { + return gl.getGL2GL3().glGetStringi(name, index); + } else { + return gl.getGL3ES3().glGetStringi(name, index); + } + } + + public static void stopUsingProgram(GL3ES3 gl) { + gl.glUseProgram(0); + } + + public static void drawArraysSingleInstance(GL3ES3 gl, int firstVertexIndex, int vertexCount) { + gl.glDrawArrays(GL_TRIANGLES, firstVertexIndex, vertexCount); + } + + public static void drawInstanced(GL3ES3 gl, int vertexOffset, int vertexCount, int instanceCount) { + if (instanceCount <= 0) { + return; + } + gl.glDrawArraysInstanced(GL_TRIANGLES, vertexOffset, vertexCount, instanceCount); + } + + public static void drawIndirect(GL4 gl, int instanceCount, int instancesOffset) { + if (instanceCount <= 0) { + return; + } + gl.glMultiDrawArraysIndirect(GL_TRIANGLES, (long) instancesOffset * INDIRECT_DRAW_COMMAND_BYTES, instanceCount, + 0); + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/GLShaderProgram.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/GLShaderProgram.java new file mode 100644 index 0000000000..589366d626 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/GLShaderProgram.java @@ -0,0 +1,160 @@ +package org.gephi.viz.engine.jogl.util.gl; + +import static com.jogamp.opengl.GL3ES3.GL_FRAGMENT_SHADER; +import static com.jogamp.opengl.GL3ES3.GL_VERTEX_SHADER; + +import com.jogamp.opengl.GL3ES3; +import com.jogamp.opengl.util.glsl.ShaderCode; +import com.jogamp.opengl.util.glsl.ShaderProgram; +import java.util.HashMap; +import java.util.Map; + +/** + * + * @author Eduardo Ramos + */ +public class GLShaderProgram { + + private final String srcRoot; + private final String vertBasename; + private final String fragBasename; + private int id = -1; + + private final Map uniformLocations; + private final Map attribLocations; + private boolean initDone = false; + + public GLShaderProgram(String srcRoot, String vertBasename) { + this(srcRoot, vertBasename, null); + } + + public GLShaderProgram(String srcRoot, String vertBasename, String fragBasename) { + this.srcRoot = srcRoot; + this.vertBasename = vertBasename; + this.fragBasename = fragBasename; + this.uniformLocations = new HashMap<>(); + this.attribLocations = new HashMap<>(); + } + + public GLShaderProgram addUniformName(String name) { + uniformLocations.put(name, null); + return this; + } + + public GLShaderProgram addAttribName(String name) { + attribLocations.put(name, null); + return this; + } + + public GLShaderProgram addAttribLocation(String name, int location) { + attribLocations.put(name, location); + return this; + } + + public GLShaderProgram init(GL3ES3 gl) { + if (initDone) { + throw new IllegalStateException("Already initialized"); + } + + ShaderProgram shaderProgram = new ShaderProgram(); + + ShaderCode vertShaderCode = ShaderCode.create( + gl, GL_VERTEX_SHADER, this.getClass(), srcRoot, null, + vertBasename, "vert", null, true + ); + + shaderProgram.add(vertShaderCode); + if (fragBasename != null) { + ShaderCode fragShaderCode = ShaderCode.create( + gl, GL_FRAGMENT_SHADER, this.getClass(), srcRoot, null, + fragBasename, "frag", null, true + ); + + shaderProgram.add(fragShaderCode); + } + + shaderProgram.init(gl); + + id = shaderProgram.program(); + + //Set explicit locations: + for (String name : attribLocations.keySet().toArray(new String[0])) { + if (attribLocations.get(name) != null) { + gl.glBindAttribLocation(id, attribLocations.get(name), name); + } + } + + shaderProgram.link(gl, System.out); + + // Get variables locations + for (String name : uniformLocations.keySet().toArray(new String[0])) { + uniformLocations.put(name, gl.glGetUniformLocation(id, name)); + } + + for (String name : attribLocations.keySet().toArray(new String[0])) { + if (attribLocations.get(name) == null) { + attribLocations.put(name, gl.glGetAttribLocation(id, name)); + } + } + + initDone = true; + + return this; + } + + public boolean isInitialized() { + return initDone; + } + + public int id() { + return id; + } + + public int getUniformLocation(String name) { + if (!isInitialized()) { + throw new IllegalStateException("Initialize the program first!"); + } + + Integer loc = uniformLocations.get(name); + if (loc == null) { + throw new IllegalArgumentException("Name of uniform " + name + " was not added before init"); + } + + return loc; + } + + public int getAttribLocation(String name) { + if (!isInitialized()) { + throw new IllegalStateException("Initialize the program first!"); + } + + Integer loc = attribLocations.get(name); + if (loc == null) { + throw new IllegalArgumentException("Name of attribute " + name + " was not added before init"); + } + + return loc; + } + + public void use(GL3ES3 gl) { + if (!isInitialized()) { + throw new IllegalStateException("Initialize the program first!"); + } + + gl.glUseProgram(id); + } + + public void stopUsing(GL3ES3 gl) { + gl.glUseProgram(0); + } + + public void destroy(GL3ES3 gl) { + if (id != -1) { + gl.glDeleteProgram(id); + id = -1; + } + uniformLocations.clear(); + attribLocations.clear(); + initDone = false; + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/GLVertexArrayObject.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/GLVertexArrayObject.java new file mode 100644 index 0000000000..1239783b24 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/GLVertexArrayObject.java @@ -0,0 +1,129 @@ +package org.gephi.viz.engine.jogl.util.gl; + +import static com.jogamp.opengl.GL3ES3.GL_VERTEX_ARRAY_BINDING; + +import com.jogamp.opengl.GL3ES3; +import com.jogamp.opengl.util.GLBuffers; +import java.nio.IntBuffer; +import org.gephi.viz.engine.util.gl.OpenGLOptions; + +/** + * VAO abstraction that checks for actual support of VAOs and emulates it if not supported. + * + * @author Eduardo Ramos + */ +public abstract class GLVertexArrayObject { + + private final boolean vaoSupported; + + private int[] attributeLocations; + private int[] instancedAttributeLocations; + private int arrayId = -1; + private final int[] previousArrayId = new int[1]; + + public GLVertexArrayObject(OpenGLOptions openGLOptions) { + vaoSupported = openGLOptions.isVAOSupported(); + } + + private void init(GL3ES3 gl) { + attributeLocations = getUsedAttributeLocations(); + if (attributeLocations == null) { + attributeLocations = new int[0]; + } else { + attributeLocations = attributeLocations.clone(); + } + + instancedAttributeLocations = getInstancedAttributeLocations(); + if (instancedAttributeLocations == null) { + instancedAttributeLocations = new int[0]; + } else { + instancedAttributeLocations = instancedAttributeLocations.clone(); + } + + if (vaoSupported) { + IntBuffer vertexArrayName = GLBuffers.newDirectIntBuffer(1); + + GLFunctions.glGenVertexArrays(gl, 1, vertexArrayName); + arrayId = vertexArrayName.get(0); + + // Note: important to store the previous value of active VAO. + // The OpenGL pipeline always has an active default VAO, + // and we should restore the status to that one when doing the call to unbind + // If we fail to restore it, other renderers such as JOGL text will fail and draw nothing + gl.glGetIntegerv(GL_VERTEX_ARRAY_BINDING, previousArrayId, 0); + + bind(gl); + configureAll(gl); + unbind(gl); + } + } + + public void use(GL3ES3 gl) { + if (attributeLocations == null) { + init(gl); + } + + if (vaoSupported) { + bind(gl); + } else { + configureAll(gl); + } + } + + public void stopUsing(GL3ES3 gl) { + if (vaoSupported) { + unbind(gl); + } else { + unconfigureEnabledAttributes(gl); + } + } + + private void configureAll(GL3ES3 gl) { + configure(gl); + configureEnabledAttributes(gl); + } + + private void bind(GL3ES3 gl) { + GLFunctions.glBindVertexArray(gl, arrayId); + } + + private void unbind(GL3ES3 gl) { + GLFunctions.glUnbindVertexArray(gl, previousArrayId[0]); + } + + private void configureEnabledAttributes(GL3ES3 gl) { + for (int attributeLocation : attributeLocations) { + gl.glEnableVertexAttribArray(attributeLocation); + } + for (int instancedAttributeLocation : instancedAttributeLocations) { + GLFunctions.glVertexAttribDivisor(gl, instancedAttributeLocation, 1); + } + } + + private void unconfigureEnabledAttributes(GL3ES3 gl) { + for (int attributeLocation : attributeLocations) { + gl.glDisableVertexAttribArray(attributeLocation); + } + for (int instancedAttributeLocation : instancedAttributeLocations) { + GLFunctions.glVertexAttribDivisor(gl, instancedAttributeLocation, 0); + } + } + + public void destroy(GL3ES3 gl) { + if (vaoSupported && arrayId != -1) { + IntBuffer vertexArrayName = GLBuffers.newDirectIntBuffer(1); + vertexArrayName.put(0, arrayId); + GLFunctions.glDeleteVertexArrays(gl, 1, vertexArrayName); + arrayId = -1; + } + attributeLocations = null; + instancedAttributeLocations = null; + } + + protected abstract void configure(GL3ES3 gl); + + protected abstract int[] getUsedAttributeLocations(); + + protected abstract int[] getInstancedAttributeLocations(); + +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/GlDebugOutput.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/GlDebugOutput.java new file mode 100644 index 0000000000..1d4b9e93a1 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/GlDebugOutput.java @@ -0,0 +1,62 @@ +package org.gephi.viz.engine.jogl.util.gl; + +import static com.jogamp.opengl.GL3ES3.GL_DEBUG_SEVERITY_LOW; +import static com.jogamp.opengl.GL3ES3.GL_DEBUG_SEVERITY_NOTIFICATION; + +import com.jogamp.opengl.GLDebugListener; +import com.jogamp.opengl.GLDebugMessage; + +/** + * + * @author GBarbieri + */ +public class GlDebugOutput implements GLDebugListener { + + public int source; + public int type; + public int id; + public int severity; + public int length; + public String message; + public boolean received = false; + + public GlDebugOutput() { + + } + + public GlDebugOutput(final int source, final int type, final int severity) { + this.source = source; + this.type = type; + this.severity = severity; + this.message = null; + this.id = -1; + + } + + public GlDebugOutput(final String message, final int id) { + this.source = -1; + this.type = -1; + this.severity = -1; + this.message = message; + this.id = id; + } + + @Override + public void messageSent(GLDebugMessage event) { + + if (event.getDbgSeverity() == GL_DEBUG_SEVERITY_LOW || + event.getDbgSeverity() == GL_DEBUG_SEVERITY_NOTIFICATION) { + System.out.println("GlDebugOutput.messageSent(): " + event); + } else { + System.err.println("GlDebugOutput.messageSent(): " + event); + } + if (null != message && message.equals(event.getDbgMsg()) && id == event.getDbgId()) { + received = true; + } else if (0 <= source && source == event.getDbgSource() + && type == event.getDbgType() + && severity == event.getDbgSeverity()) { + received = true; + } + } + +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/capabilities/GLCapabilitiesSummary.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/capabilities/GLCapabilitiesSummary.java new file mode 100644 index 0000000000..b4bd2f3075 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/capabilities/GLCapabilitiesSummary.java @@ -0,0 +1,723 @@ +package org.gephi.viz.engine.jogl.util.gl.capabilities; + +import static com.jogamp.opengl.GL.GL_EXTENSIONS; +import static com.jogamp.opengl.GL.GL_RENDERER; +import static com.jogamp.opengl.GL.GL_VENDOR; +import static com.jogamp.opengl.GL.GL_VERSION; +import static com.jogamp.opengl.GL3ES3.GL_CONTEXT_FLAGS; +import static com.jogamp.opengl.GL3ES3.GL_MAJOR_VERSION; +import static com.jogamp.opengl.GL3ES3.GL_MINOR_VERSION; +import static com.jogamp.opengl.GL3ES3.GL_NUM_EXTENSIONS; +import static com.jogamp.opengl.GL3ES3.GL_SHADING_LANGUAGE_VERSION; + +import com.jogamp.opengl.GL; +import com.jogamp.opengl.util.GLBuffers; +import java.nio.IntBuffer; +import java.util.ArrayList; +import java.util.List; +import java.util.regex.Pattern; +import org.gephi.viz.engine.jogl.util.gl.GLFunctions; + +/** + * + * @author gbarbieri + */ +public final class GLCapabilitiesSummary { + + public GLCapabilitiesSummary(GL gl, Profile profile) { + initVersion(gl, profile); + initExtensions(gl); + if (check(4, 3) || extensions.KHR_debug) { + gl.glGetIntegerv(GL_CONTEXT_FLAGS, data); + version.CONTEXT_FLAGS = data.get(0); + } + } + + private GLVersionData version; + private GLExtensionData extensions; + + private final IntBuffer data = GLBuffers.newDirectIntBuffer(1); + + private boolean check(int majorVersionRequire, int minorVersionRequire) { + return (version.MAJOR_VERSION * 100 + version.MINOR_VERSION * 10) + >= (majorVersionRequire * 100 + minorVersionRequire * 10); + } + + public GLVersionData getVersion() { + return version; + } + + public GLExtensionData getExtensions() { + return extensions; + } + + private void initVersion(GL gl, Profile profile) { + version = new GLVersionData(profile); + + gl.glGetIntegerv(GL_MINOR_VERSION, data); + version.MINOR_VERSION = data.get(0); + gl.glGetIntegerv(GL_MAJOR_VERSION, data); + version.MAJOR_VERSION = data.get(0); + + version.RENDERER = gl.glGetString(GL_RENDERER); + version.VENDOR = gl.glGetString(GL_VENDOR); + version.VERSION = gl.glGetString(GL_VERSION); + version.SHADING_LANGUAGE_VERSION = gl.glGetString(GL_SHADING_LANGUAGE_VERSION); + } + + private void initExtensions(GL gl) { + extensions = new GLExtensionData(); + + final List extensionsList = new ArrayList<>(); + + if (gl.isGL3ES3()) { + gl.glGetIntegerv(GL_NUM_EXTENSIONS, data); + version.NUM_EXTENSIONS = data.get(0); + + for (int i = 0; i < version.NUM_EXTENSIONS; i++) { + String extension = GLFunctions.glGetStringi(gl.getGL3ES3(), GL_EXTENSIONS, i); + extensionsList.add(extension.trim()); + } + } else { + String[] parts = gl.glGetString(GL_EXTENSIONS).split(Pattern.quote(",")); + for (String extension : parts) { + extensionsList.add(extension.trim()); + } + } + + for (String extension : extensionsList) { + switch (extension) { + case "GL_ARB_multitexture": + extensions.ARB_multitexture = true; + break; + case "GL_ARB_transpose_matrix": + extensions.ARB_transpose_matrix = true; + break; + case "GL_ARB_multisample": + extensions.ARB_multisample = true; + break; + case "GL_ARB_texture_env_add": + extensions.ARB_texture_env_add = true; + break; + case "GL_ARB_texture_cube_map": + extensions.ARB_texture_cube_map = true; + break; + case "GL_ARB_texture_compression": + extensions.ARB_texture_compression = true; + break; + case "GL_ARB_texture_border_clamp": + extensions.ARB_texture_border_clamp = true; + break; + case "GL_ARB_point_parameters": + extensions.ARB_point_parameters = true; + break; + case "GL_ARB_vertex_blend": + extensions.ARB_vertex_blend = true; + break; + case "GL_ARB_matrix_palette": + extensions.ARB_matrix_palette = true; + break; + case "GL_ARB_texture_env_combine": + extensions.ARB_texture_env_combine = true; + break; + case "GL_ARB_texture_env_crossbar": + extensions.ARB_texture_env_crossbar = true; + break; + case "GL_ARB_texture_env_dot3": + extensions.ARB_texture_env_dot3 = true; + break; + case "GL_ARB_texture_mirrored_repeat": + extensions.ARB_texture_mirrored_repeat = true; + break; + case "GL_ARB_depth_texture": + extensions.ARB_depth_texture = true; + break; + case "GL_ARB_shadow": + extensions.ARB_shadow = true; + break; + case "GL_ARB_shadow_ambient": + extensions.ARB_shadow_ambient = true; + break; + case "GL_ARB_window_pos": + extensions.ARB_window_pos = true; + break; + case "GL_ARB_vertex_program": + extensions.ARB_vertex_program = true; + break; + case "GL_ARB_fragment_program": + extensions.ARB_fragment_program = true; + break; + case "GL_ARB_vertex_buffer_object": + extensions.ARB_vertex_buffer_object = true; + break; + case "GL_ARB_occlusion_query": + extensions.ARB_occlusion_query = true; + break; + case "GL_ARB_shader_objects": + extensions.ARB_shader_objects = true; + break; + case "GL_ARB_vertex_shader": + extensions.ARB_vertex_shader = true; + break; + case "GL_ARB_fragment_shader": + extensions.ARB_fragment_shader = true; + break; + case "GL_ARB_shading_language_100": + extensions.ARB_shading_language_100 = true; + break; + case "GL_ARB_texture_non_power_of_two": + extensions.ARB_texture_non_power_of_two = true; + break; + case "GL_ARB_point_sprite": + extensions.ARB_point_sprite = true; + break; + case "GL_ARB_fragment_program_shadow": + extensions.ARB_fragment_program_shadow = true; + break; + case "GL_ARB_draw_buffers": + extensions.ARB_draw_buffers = true; + break; + case "GL_ARB_texture_rectangle": + extensions.ARB_texture_rectangle = true; + break; + case "GL_ARB_color_buffer_float": + extensions.ARB_color_buffer_float = true; + break; + case "GL_ARB_half_float_pixel": + extensions.ARB_half_float_pixel = true; + break; + case "GL_ARB_texture_float": + extensions.ARB_texture_float = true; + break; + case "GL_ARB_pixel_buffer_object": + extensions.ARB_pixel_buffer_object = true; + break; + case "GL_ARB_depth_buffer_float": + extensions.ARB_depth_buffer_float = true; + break; + case "GL_ARB_draw_instanced": + extensions.ARB_draw_instanced = true; + break; + case "GL_ARB_framebuffer_object": + extensions.ARB_framebuffer_object = true; + break; + case "GL_ARB_framebuffer_sRGB": + extensions.ARB_framebuffer_sRGB = true; + break; + case "GL_ARB_geometry_shader4": + extensions.ARB_geometry_shader4 = true; + break; + case "GL_ARB_half_float_vertex": + extensions.ARB_half_float_vertex = true; + break; + case "GL_ARB_instanced_arrays": + extensions.ARB_instanced_arrays = true; + break; + case "GL_ARB_map_buffer_range": + extensions.ARB_map_buffer_range = true; + break; + case "GL_ARB_texture_buffer_object": + extensions.ARB_texture_buffer_object = true; + break; + case "GL_ARB_texture_compression_rgtc": + extensions.ARB_texture_compression_rgtc = true; + break; + case "GL_ARB_texture_rg": + extensions.ARB_texture_rg = true; + break; + case "GL_ARB_vertex_array_object": + extensions.ARB_vertex_array_object = true; + break; + case "GL_ARB_uniform_buffer_object": + extensions.ARB_uniform_buffer_object = true; + break; + case "GL_ARB_compatibility": + extensions.ARB_compatibility = true; + break; + case "GL_ARB_copy_buffer": + extensions.ARB_copy_buffer = true; + break; + case "GL_ARB_shader_texture_lod": + extensions.ARB_shader_texture_lod = true; + break; + case "GL_ARB_depth_clamp": + extensions.ARB_depth_clamp = true; + break; + case "GL_ARB_draw_elements_base_vertex": + extensions.ARB_draw_elements_base_vertex = true; + break; + case "GL_ARB_fragment_coord_conventions": + extensions.ARB_fragment_coord_conventions = true; + break; + case "GL_ARB_provoking_vertex": + extensions.ARB_provoking_vertex = true; + break; + case "GL_ARB_seamless_cube_map": + extensions.ARB_seamless_cube_map = true; + break; + case "GL_ARB_sync": + extensions.ARB_sync = true; + break; + case "GL_ARB_texture_multisample": + extensions.ARB_texture_multisample = true; + break; + case "GL_ARB_vertex_array_bgra": + extensions.ARB_vertex_array_bgra = true; + break; + case "GL_ARB_draw_buffers_blend": + extensions.ARB_draw_buffers_blend = true; + break; + case "GL_ARB_sample_shading": + extensions.ARB_sample_shading = true; + break; + case "GL_ARB_texture_cube_map_array": + extensions.ARB_texture_cube_map_array = true; + break; + case "GL_ARB_texture_gather": + extensions.ARB_texture_gather = true; + break; + case "GL_ARB_texture_query_lod": + extensions.ARB_texture_query_lod = true; + break; + case "GL_ARB_shading_language_include": + extensions.ARB_shading_language_include = true; + break; + case "GL_ARB_texture_compression_bptc": + extensions.ARB_texture_compression_bptc = true; + break; + case "GL_ARB_blend_func_extended": + extensions.ARB_blend_func_extended = true; + break; + case "GL_ARB_explicit_attrib_location": + extensions.ARB_explicit_attrib_location = true; + break; + case "GL_ARB_occlusion_query2": + extensions.ARB_occlusion_query2 = true; + break; + case "GL_ARB_sampler_objects": + extensions.ARB_sampler_objects = true; + break; + case "GL_ARB_shader_bit_encoding": + extensions.ARB_shader_bit_encoding = true; + break; + case "GL_ARB_texture_rgb10_a2ui": + extensions.ARB_texture_rgb10_a2ui = true; + break; + case "GL_ARB_texture_swizzle": + extensions.ARB_texture_swizzle = true; + break; + case "GL_ARB_timer_query": + extensions.ARB_timer_query = true; + break; + case "GL_ARB_vertex_type_2_10_10_10_rev": + extensions.ARB_vertex_type_2_10_10_10_rev = true; + break; + case "GL_ARB_draw_indirect": + extensions.ARB_draw_indirect = true; + break; + case "GL_ARB_gpu_shader5": + extensions.ARB_gpu_shader5 = true; + break; + case "GL_ARB_gpu_shader_fp64": + extensions.ARB_gpu_shader_fp64 = true; + break; + case "GL_ARB_shader_subroutine": + extensions.ARB_shader_subroutine = true; + break; + case "GL_ARB_tessellation_shader": + extensions.ARB_tessellation_shader = true; + break; + case "GL_ARB_texture_buffer_object_rgb32": + extensions.ARB_texture_buffer_object_rgb32 = true; + break; + case "GL_ARB_transform_feedback2": + extensions.ARB_transform_feedback2 = true; + break; + case "GL_ARB_transform_feedback3": + extensions.ARB_transform_feedback3 = true; + break; + case "GL_ARB_ES2_compatibility": + extensions.ARB_ES2_compatibility = true; + break; + case "GL_ARB_get_program_binary": + extensions.ARB_get_program_binary = true; + break; + case "GL_ARB_separate_shader_objects": + extensions.ARB_separate_shader_objects = true; + break; + case "GL_ARB_shader_precision": + extensions.ARB_shader_precision = true; + break; + case "GL_ARB_vertex_attrib_64bit": + extensions.ARB_vertex_attrib_64bit = true; + break; + case "GL_ARB_viewport_array": + extensions.ARB_viewport_array = true; + break; + case "GL_ARB_cl_event": + extensions.ARB_cl_event = true; + break; + case "GL_ARB_debug_output": + extensions.ARB_debug_output = true; + break; + case "GL_ARB_robustness": + extensions.ARB_robustness = true; + break; + case "GL_ARB_shader_stencil_export": + extensions.ARB_shader_stencil_export = true; + break; + case "GL_ARB_base_instance": + extensions.ARB_base_instance = true; + break; + case "GL_ARB_shading_language_420pack": + extensions.ARB_shading_language_420pack = true; + break; + case "GL_ARB_transform_feedback_instanced": + extensions.ARB_transform_feedback_instanced = true; + break; + case "GL_ARB_compressed_texture_pixel_storage": + extensions.ARB_compressed_texture_pixel_storage = true; + break; + case "GL_ARB_conservative_depth": + extensions.ARB_conservative_depth = true; + break; + case "GL_ARB_internalformat_query": + extensions.ARB_internalformat_query = true; + break; + case "GL_ARB_map_buffer_alignment": + extensions.ARB_map_buffer_alignment = true; + break; + case "GL_ARB_shader_atomic_counters": + extensions.ARB_shader_atomic_counters = true; + break; + case "GL_ARB_shader_image_load_store": + extensions.ARB_shader_image_load_store = true; + break; + case "GL_ARB_shading_language_packing": + extensions.ARB_shading_language_packing = true; + break; + case "GL_ARB_texture_storage": + extensions.ARB_texture_storage = true; + break; + case "GL_KHR_texture_compression_astc_hdr": + extensions.KHR_texture_compression_astc_hdr = true; + break; + case "GL_KHR_texture_compression_astc_ldr": + extensions.KHR_texture_compression_astc_ldr = true; + break; + case "GL_KHR_debug": + extensions.KHR_debug = true; + break; + case "GL_ARB_arrays_of_arrays": + extensions.ARB_arrays_of_arrays = true; + break; + case "GL_ARB_clear_buffer_object": + extensions.ARB_clear_buffer_object = true; + break; + case "GL_ARB_compute_shader": + extensions.ARB_compute_shader = true; + break; + case "GL_ARB_copy_image": + extensions.ARB_copy_image = true; + break; + case "GL_ARB_texture_view": + extensions.ARB_texture_view = true; + break; + case "GL_ARB_vertex_attrib_binding": + extensions.ARB_vertex_attrib_binding = true; + break; + case "GL_ARB_robustness_isolation": + extensions.ARB_robustness_isolation = true; + break; + case "GL_ARB_ES3_compatibility": + extensions.ARB_ES3_compatibility = true; + break; + case "GL_ARB_explicit_uniform_location": + extensions.ARB_explicit_uniform_location = true; + break; + case "GL_ARB_fragment_layer_viewport": + extensions.ARB_fragment_layer_viewport = true; + break; + case "GL_ARB_framebuffer_no_attachments": + extensions.ARB_framebuffer_no_attachments = true; + break; + case "GL_ARB_internalformat_query2": + extensions.ARB_internalformat_query2 = true; + break; + case "GL_ARB_invalidate_subdata": + extensions.ARB_invalidate_subdata = true; + break; + case "GL_ARB_multi_draw_indirect": + extensions.ARB_multi_draw_indirect = true; + break; + case "GL_ARB_program_interface_query": + extensions.ARB_program_interface_query = true; + break; + case "GL_ARB_robust_buffer_access_behavior": + extensions.ARB_robust_buffer_access_behavior = true; + break; + case "GL_ARB_shader_image_size": + extensions.ARB_shader_image_size = true; + break; + case "GL_ARB_shader_storage_buffer_object": + extensions.ARB_shader_storage_buffer_object = true; + break; + case "GL_ARB_stencil_texturing": + extensions.ARB_stencil_texturing = true; + break; + case "GL_ARB_texture_buffer_range": + extensions.ARB_texture_buffer_range = true; + break; + case "GL_ARB_texture_query_levels": + extensions.ARB_texture_query_levels = true; + break; + case "GL_ARB_texture_storage_multisample": + extensions.ARB_texture_storage_multisample = true; + break; + case "GL_ARB_buffer_storage": + extensions.ARB_buffer_storage = true; + break; + case "GL_ARB_clear_texture": + extensions.ARB_clear_texture = true; + break; + case "GL_ARB_enhanced_layouts": + extensions.ARB_enhanced_layouts = true; + break; + case "GL_ARB_multi_bind": + extensions.ARB_multi_bind = true; + break; + case "GL_ARB_query_buffer_object": + extensions.ARB_query_buffer_object = true; + break; + case "GL_ARB_texture_mirror_clamp_to_edge": + extensions.ARB_texture_mirror_clamp_to_edge = true; + break; + case "GL_ARB_texture_stencil8": + extensions.ARB_texture_stencil8 = true; + break; + case "GL_ARB_vertex_type_10f_11f_11f_rev": + extensions.ARB_vertex_type_10f_11f_11f_rev = true; + break; + case "GL_ARB_bindless_texture": + extensions.ARB_bindless_texture = true; + break; + case "GL_ARB_compute_variable_group_size": + extensions.ARB_compute_variable_group_size = true; + break; + case "GL_ARB_indirect_parameters": + extensions.ARB_indirect_parameters = true; + break; + case "GL_ARB_seamless_cubemap_per_texture": + extensions.ARB_seamless_cubemap_per_texture = true; + break; + case "GL_ARB_shader_draw_parameters": + extensions.ARB_shader_draw_parameters = true; + break; + case "GL_ARB_shader_group_vote": + extensions.ARB_shader_group_vote = true; + break; + case "GL_ARB_sparse_texture": + extensions.ARB_sparse_texture = true; + break; + case "GL_ARB_ES3_1_compatibility": + extensions.ARB_ES3_1_compatibility = true; + break; + case "GL_ARB_clip_control": + extensions.ARB_clip_control = true; + break; + case "GL_ARB_conditional_render_inverted": + extensions.ARB_conditional_render_inverted = true; + break; + case "GL_ARB_derivative_control": + extensions.ARB_derivative_control = true; + break; + case "GL_ARB_direct_state_access": + extensions.ARB_direct_state_access = true; + break; + case "GL_ARB_get_texture_sub_image": + extensions.ARB_get_texture_sub_image = true; + break; + case "GL_ARB_shader_texture_image_samples": + extensions.ARB_shader_texture_image_samples = true; + break; + case "GL_ARB_texture_barrier": + extensions.ARB_texture_barrier = true; + break; + case "GL_KHR_context_flush_control": + extensions.KHR_context_flush_control = true; + break; + case "GL_KHR_robust_buffer_access_behavior": + extensions.KHR_robust_buffer_access_behavior = true; + break; + case "GL_KHR_robustness": + extensions.KHR_robustness = true; + break; + case "GL_ARB_pipeline_statistics_query": + extensions.ARB_pipeline_statistics_query = true; + break; + case "GL_ARB_sparse_buffer": + extensions.ARB_sparse_buffer = true; + break; + case "GL_ARB_transform_feedback_overflow_query": + extensions.ARB_transform_feedback_overflow_query = true; + break; + // EXT + case "GL_EXT_gpu_shader4": + extensions.EXT_gpu_shader4 = true; + break; + case "GL_EXT_texture_compression_s3tc": + extensions.EXT_texture_compression_s3tc = true; + break; + case "GL_EXT_texture_compression_latc": + extensions.EXT_texture_compression_latc = true; + break; + case "GL_EXT_transform_feedback": + extensions.EXT_transform_feedback = true; + break; + case "GL_EXT_direct_state_access": + extensions.EXT_direct_state_access = true; + break; + case "GL_EXT_texture_filter_anisotropic": + extensions.EXT_texture_filter_anisotropic = true; + break; + case "GL_EXT_texture_array": + extensions.EXT_texture_array = true; + break; + case "GL_EXT_texture_snorm": + extensions.EXT_texture_snorm = true; + break; + case "GL_EXT_texture_sRGB_decode": + extensions.EXT_texture_sRGB_decode = true; + break; + case "GL_EXT_framebuffer_multisample_blit_scaled": + extensions.EXT_framebuffer_multisample_blit_scaled = true; + break; + case "GL_EXT_shader_integer_mix": + extensions.EXT_shader_integer_mix = true; + break; + case "GL_EXT_polygon_offset_clamp": + extensions.EXT_polygon_offset_clamp = true; + break; + // NV + case "GL_NV_explicit_multisample": + extensions.NV_explicit_multisample = true; + break; + case "GL_NV_shader_buffer_load": + extensions.NV_shader_buffer_load = true; + break; + case "GL_NV_vertex_buffer_unified_memory": + extensions.NV_vertex_buffer_unified_memory = true; + break; + case "GL_NV_shader_buffer_store": + extensions.NV_shader_buffer_store = true; + break; + case "GL_NV_bindless_multi_draw_indirect": + extensions.NV_bindless_multi_draw_indirect = true; + break; + case "GL_NV_blend_equation_advanced": + extensions.NV_blend_equation_advanced = true; + break; + case "GL_NV_deep_texture3D": + extensions.NV_deep_texture3D = true; + break; + case "GL_NV_shader_thread_group": + extensions.NV_shader_thread_group = true; + break; + case "GL_NV_shader_thread_shuffle": + extensions.NV_shader_thread_shuffle = true; + break; + case "GL_NV_shader_atomic_int64": + extensions.NV_shader_atomic_int64 = true; + break; + case "GL_NV_bindless_multi_draw_indirect_count": + extensions.NV_bindless_multi_draw_indirect_count = true; + break; + case "GL_NV_uniform_buffer_unified_memory": + extensions.NV_uniform_buffer_unified_memory = true; + break; + // AMD + case "GL_ATI_texture_compression_3dc": + extensions.ATI_texture_compression_3dc = true; + break; + case "GL_AMD_depth_clamp_separate": + extensions.AMD_depth_clamp_separate = true; + break; + case "GL_AMD_stencil_operation_extended": + extensions.AMD_stencil_operation_extended = true; + break; + case "GL_AMD_vertex_shader_viewport_index": + extensions.AMD_vertex_shader_viewport_index = true; + break; + case "GL_AMD_vertex_shader_layer": + extensions.AMD_vertex_shader_layer = true; + break; + case "GL_AMD_shader_trinary_minmax": + extensions.AMD_shader_trinary_minmax = true; + break; + case "GL_AMD_interleaved_elements": + extensions.AMD_interleaved_elements = true; + break; + case "GL_AMD_shader_atomic_counter_ops": + extensions.AMD_shader_atomic_counter_ops = true; + break; + case "GL_AMD_shader_stencil_value_export": + extensions.AMD_shader_stencil_value_export = true; + break; + case "GL_AMD_transform_feedback4": + extensions.AMD_transform_feedback4 = true; + break; + case "GL_AMD_gpu_shader_int64": + extensions.AMD_gpu_shader_int64 = true; + break; + case "GL_AMD_gcn_shader": + extensions.AMD_gcn_shader = true; + break; + // Intel + case "GL_INTEL_map_texture": + extensions.INTEL_map_texture = true; + break; + case "GL_INTEL_fragment_shader_ordering": + extensions.INTEL_fragment_shader_ordering = true; + break; + case "GL_INTEL_performance_query": + extensions.INTEL_performance_query = true; + break; + } + } + } + + public boolean isVAOSupported() { + return (version.MAJOR_VERSION >= 3 || extensions.ARB_vertex_array_object); + } + + public boolean isInstancingSupported() { + return (version.MAJOR_VERSION >= 3 || extensions.ARB_draw_instanced) && extensions.ARB_instanced_arrays; + } + + public boolean isIndirectDrawSupported() { + return + extensions.ARB_draw_indirect && + extensions.ARB_multi_draw_indirect && + extensions.ARB_buffer_storage; + } + + public boolean isVendorIntel() { + return version.VENDOR != null && version.VENDOR.toLowerCase().contains("intel"); + } + + public String getVendor() { + return version.VENDOR; + } + + public String getRenderer() { + return version.RENDERER; + } + + public String getVersionString() { + return version.VERSION; + } + + public String getShadingLanguageVersion() { + return version.SHADING_LANGUAGE_VERSION; + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/capabilities/GLExtensionData.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/capabilities/GLExtensionData.java new file mode 100644 index 0000000000..4638876af2 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/capabilities/GLExtensionData.java @@ -0,0 +1,336 @@ +package org.gephi.viz.engine.jogl.util.gl.capabilities; + +/** + * + * @author gbarbieri + */ +public class GLExtensionData { + + public boolean ARB_multitexture; + public boolean ARB_transpose_matrix; + public boolean ARB_multisample; + public boolean ARB_texture_env_add; + public boolean ARB_texture_cube_map; + public boolean ARB_texture_compression; + public boolean ARB_texture_border_clamp; + public boolean ARB_point_parameters; + public boolean ARB_vertex_blend; + public boolean ARB_matrix_palette; + public boolean ARB_texture_env_combine; + public boolean ARB_texture_env_crossbar; + public boolean ARB_texture_env_dot3; + public boolean ARB_texture_mirrored_repeat; + public boolean ARB_depth_texture; + public boolean ARB_shadow; + public boolean ARB_shadow_ambient; + public boolean ARB_window_pos; + public boolean ARB_vertex_program; + public boolean ARB_fragment_program; + public boolean ARB_vertex_buffer_object; + public boolean ARB_occlusion_query; + public boolean ARB_shader_objects; + public boolean ARB_vertex_shader; + public boolean ARB_fragment_shader; + public boolean ARB_shading_language_100; + public boolean ARB_texture_non_power_of_two; + public boolean ARB_point_sprite; + public boolean ARB_fragment_program_shadow; + public boolean ARB_draw_buffers; + public boolean ARB_texture_rectangle; + public boolean ARB_color_buffer_float; + public boolean ARB_half_float_pixel; + public boolean ARB_texture_float; + public boolean ARB_pixel_buffer_object; + public boolean ARB_depth_buffer_float; + public boolean ARB_draw_instanced; + public boolean ARB_framebuffer_object; + public boolean ARB_framebuffer_sRGB; + public boolean ARB_geometry_shader4; + public boolean ARB_half_float_vertex; + public boolean ARB_instanced_arrays; + public boolean ARB_map_buffer_range; + public boolean ARB_texture_buffer_object; + public boolean ARB_texture_compression_rgtc; + public boolean ARB_texture_rg; + public boolean ARB_vertex_array_object; + public boolean ARB_uniform_buffer_object; + public boolean ARB_compatibility; + public boolean ARB_copy_buffer; + public boolean ARB_shader_texture_lod; + public boolean ARB_depth_clamp; + public boolean ARB_draw_elements_base_vertex; + public boolean ARB_fragment_coord_conventions; + public boolean ARB_provoking_vertex; + public boolean ARB_seamless_cube_map; + public boolean ARB_sync; + public boolean ARB_texture_multisample; + public boolean ARB_vertex_array_bgra; + public boolean ARB_draw_buffers_blend; + public boolean ARB_sample_shading; + public boolean ARB_texture_cube_map_array; + public boolean ARB_texture_gather; + public boolean ARB_texture_query_lod; + public boolean ARB_shading_language_include; + public boolean ARB_texture_compression_bptc; + public boolean ARB_blend_func_extended; + public boolean ARB_explicit_attrib_location; + public boolean ARB_occlusion_query2; + public boolean ARB_sampler_objects; + public boolean ARB_shader_bit_encoding; + public boolean ARB_texture_rgb10_a2ui; + public boolean ARB_texture_swizzle; + public boolean ARB_timer_query; + public boolean ARB_vertex_type_2_10_10_10_rev; + public boolean ARB_draw_indirect; + public boolean ARB_gpu_shader5; + public boolean ARB_gpu_shader_fp64; + public boolean ARB_shader_subroutine; + public boolean ARB_tessellation_shader; + public boolean ARB_texture_buffer_object_rgb32; + public boolean ARB_transform_feedback2; + public boolean ARB_transform_feedback3; + public boolean ARB_ES2_compatibility; + public boolean ARB_get_program_binary; + public boolean ARB_separate_shader_objects; + public boolean ARB_shader_precision; + public boolean ARB_vertex_attrib_64bit; + public boolean ARB_viewport_array; + public boolean ARB_cl_event; + public boolean ARB_debug_output; + public boolean ARB_robustness; + public boolean ARB_shader_stencil_export; + public boolean ARB_base_instance; + public boolean ARB_shading_language_420pack; + public boolean ARB_transform_feedback_instanced; + public boolean ARB_compressed_texture_pixel_storage; + public boolean ARB_conservative_depth; + public boolean ARB_internalformat_query; + public boolean ARB_map_buffer_alignment; + public boolean ARB_shader_atomic_counters; + public boolean ARB_shader_image_load_store; + public boolean ARB_shading_language_packing; + public boolean ARB_texture_storage; + public boolean KHR_texture_compression_astc_hdr; + public boolean KHR_texture_compression_astc_ldr; + public boolean KHR_debug; + public boolean ARB_arrays_of_arrays; + public boolean ARB_clear_buffer_object; + public boolean ARB_compute_shader; + public boolean ARB_copy_image; + public boolean ARB_texture_view; + public boolean ARB_vertex_attrib_binding; + public boolean ARB_robustness_isolation; + public boolean ARB_ES3_compatibility; + public boolean ARB_explicit_uniform_location; + public boolean ARB_fragment_layer_viewport; + public boolean ARB_framebuffer_no_attachments; + public boolean ARB_internalformat_query2; + public boolean ARB_invalidate_subdata; + public boolean ARB_multi_draw_indirect; + public boolean ARB_program_interface_query; + public boolean ARB_robust_buffer_access_behavior; + public boolean ARB_shader_image_size; + public boolean ARB_shader_storage_buffer_object; + public boolean ARB_stencil_texturing; + public boolean ARB_texture_buffer_range; + public boolean ARB_texture_query_levels; + public boolean ARB_texture_storage_multisample; + public boolean ARB_buffer_storage; + public boolean ARB_clear_texture; + public boolean ARB_enhanced_layouts; + public boolean ARB_multi_bind; + public boolean ARB_query_buffer_object; + public boolean ARB_texture_mirror_clamp_to_edge; + public boolean ARB_texture_stencil8; + public boolean ARB_vertex_type_10f_11f_11f_rev; + public boolean ARB_bindless_texture; + public boolean ARB_compute_variable_group_size; + public boolean ARB_indirect_parameters; + public boolean ARB_seamless_cubemap_per_texture; + public boolean ARB_shader_draw_parameters; + public boolean ARB_shader_group_vote; + public boolean ARB_sparse_texture; + public boolean ARB_ES3_1_compatibility; + public boolean ARB_clip_control; + public boolean ARB_conditional_render_inverted; + public boolean ARB_cull_distance; + public boolean ARB_derivative_control; + public boolean ARB_direct_state_access; + public boolean ARB_get_texture_sub_image; + public boolean ARB_shader_texture_image_samples; + public boolean ARB_texture_barrier; + public boolean KHR_context_flush_control; + public boolean KHR_robust_buffer_access_behavior; + public boolean KHR_robustness; + public boolean ARB_pipeline_statistics_query; + public boolean ARB_sparse_buffer; + public boolean ARB_transform_feedback_overflow_query; + + public boolean EXT_gpu_shader4; + public boolean EXT_texture_compression_latc; + public boolean EXT_transform_feedback; + public boolean EXT_direct_state_access; + public boolean EXT_texture_filter_anisotropic; + public boolean EXT_texture_compression_s3tc; + public boolean EXT_texture_array; + public boolean EXT_texture_snorm; + public boolean EXT_texture_sRGB_decode; + public boolean EXT_framebuffer_multisample_blit_scaled; + public boolean EXT_shader_integer_mix; + public boolean EXT_shader_image_load_formatted; + public boolean EXT_polygon_offset_clamp; + + public boolean NV_explicit_multisample; + public boolean NV_shader_buffer_load; + public boolean NV_vertex_buffer_unified_memory; + public boolean NV_shader_buffer_store; + public boolean NV_bindless_multi_draw_indirect; + public boolean NV_blend_equation_advanced; + public boolean NV_deep_texture3D; + public boolean NV_shader_thread_group; + public boolean NV_shader_thread_shuffle; + public boolean NV_shader_atomic_int64; + public boolean NV_bindless_multi_draw_indirect_count; + public boolean NV_uniform_buffer_unified_memory; + + public boolean ATI_texture_compression_3dc; + public boolean AMD_depth_clamp_separate; + public boolean AMD_stencil_operation_extended; + public boolean AMD_vertex_shader_viewport_index; + public boolean AMD_vertex_shader_layer; + public boolean AMD_shader_trinary_minmax; + public boolean AMD_interleaved_elements; + public boolean AMD_shader_atomic_counter_ops; + public boolean AMD_occlusion_query_event; + public boolean AMD_shader_stencil_value_export; + public boolean AMD_transform_feedback4; + public boolean AMD_gpu_shader_int64; + public boolean AMD_gcn_shader; + + public boolean INTEL_map_texture; + public boolean INTEL_fragment_shader_ordering; + public boolean INTEL_performance_query; + + @Override + public String toString() { + return "GLExtensionData{" + "ARB_multitexture=" + ARB_multitexture + ", ARB_transpose_matrix=" + + ARB_transpose_matrix + ", ARB_multisample=" + ARB_multisample + ", ARB_texture_env_add=" + + ARB_texture_env_add + ", ARB_texture_cube_map=" + ARB_texture_cube_map + ", ARB_texture_compression=" + + ARB_texture_compression + ", ARB_texture_border_clamp=" + ARB_texture_border_clamp + + ", ARB_point_parameters=" + ARB_point_parameters + ", ARB_vertex_blend=" + ARB_vertex_blend + + ", ARB_matrix_palette=" + ARB_matrix_palette + ", ARB_texture_env_combine=" + ARB_texture_env_combine + + ", ARB_texture_env_crossbar=" + ARB_texture_env_crossbar + ", ARB_texture_env_dot3=" + + ARB_texture_env_dot3 + ", ARB_texture_mirrored_repeat=" + ARB_texture_mirrored_repeat + + ", ARB_depth_texture=" + ARB_depth_texture + ", ARB_shadow=" + ARB_shadow + ", ARB_shadow_ambient=" + + ARB_shadow_ambient + ", ARB_window_pos=" + ARB_window_pos + ", ARB_vertex_program=" + ARB_vertex_program + + ", ARB_fragment_program=" + ARB_fragment_program + ", ARB_vertex_buffer_object=" + + ARB_vertex_buffer_object + ", ARB_occlusion_query=" + ARB_occlusion_query + ", ARB_shader_objects=" + + ARB_shader_objects + ", ARB_vertex_shader=" + ARB_vertex_shader + ", ARB_fragment_shader=" + + ARB_fragment_shader + ", ARB_shading_language_100=" + ARB_shading_language_100 + + ", ARB_texture_non_power_of_two=" + ARB_texture_non_power_of_two + ", ARB_point_sprite=" + + ARB_point_sprite + ", ARB_fragment_program_shadow=" + ARB_fragment_program_shadow + ", ARB_draw_buffers=" + + ARB_draw_buffers + ", ARB_texture_rectangle=" + ARB_texture_rectangle + ", ARB_color_buffer_float=" + + ARB_color_buffer_float + ", ARB_half_float_pixel=" + ARB_half_float_pixel + ", ARB_texture_float=" + + ARB_texture_float + ", ARB_pixel_buffer_object=" + ARB_pixel_buffer_object + ", ARB_depth_buffer_float=" + + ARB_depth_buffer_float + ", ARB_draw_instanced=" + ARB_draw_instanced + ", ARB_framebuffer_object=" + + ARB_framebuffer_object + ", ARB_framebuffer_sRGB=" + ARB_framebuffer_sRGB + ", ARB_geometry_shader4=" + + ARB_geometry_shader4 + ", ARB_half_float_vertex=" + ARB_half_float_vertex + ", ARB_instanced_arrays=" + + ARB_instanced_arrays + ", ARB_map_buffer_range=" + ARB_map_buffer_range + ", ARB_texture_buffer_object=" + + ARB_texture_buffer_object + ", ARB_texture_compression_rgtc=" + ARB_texture_compression_rgtc + + ", ARB_texture_rg=" + ARB_texture_rg + ", ARB_vertex_array_object=" + ARB_vertex_array_object + + ", ARB_uniform_buffer_object=" + ARB_uniform_buffer_object + ", ARB_compatibility=" + ARB_compatibility + + ", ARB_copy_buffer=" + ARB_copy_buffer + ", ARB_shader_texture_lod=" + ARB_shader_texture_lod + + ", ARB_depth_clamp=" + ARB_depth_clamp + ", ARB_draw_elements_base_vertex=" + + ARB_draw_elements_base_vertex + ", ARB_fragment_coord_conventions=" + ARB_fragment_coord_conventions + + ", ARB_provoking_vertex=" + ARB_provoking_vertex + ", ARB_seamless_cube_map=" + ARB_seamless_cube_map + + ", ARB_sync=" + ARB_sync + ", ARB_texture_multisample=" + ARB_texture_multisample + + ", ARB_vertex_array_bgra=" + ARB_vertex_array_bgra + ", ARB_draw_buffers_blend=" + ARB_draw_buffers_blend + + ", ARB_sample_shading=" + ARB_sample_shading + ", ARB_texture_cube_map_array=" + + ARB_texture_cube_map_array + ", ARB_texture_gather=" + ARB_texture_gather + ", ARB_texture_query_lod=" + + ARB_texture_query_lod + ", ARB_shading_language_include=" + ARB_shading_language_include + + ", ARB_texture_compression_bptc=" + ARB_texture_compression_bptc + ", ARB_blend_func_extended=" + + ARB_blend_func_extended + ", ARB_explicit_attrib_location=" + ARB_explicit_attrib_location + + ", ARB_occlusion_query2=" + ARB_occlusion_query2 + ", ARB_sampler_objects=" + ARB_sampler_objects + + ", ARB_shader_bit_encoding=" + ARB_shader_bit_encoding + ", ARB_texture_rgb10_a2ui=" + + ARB_texture_rgb10_a2ui + ", ARB_texture_swizzle=" + ARB_texture_swizzle + ", ARB_timer_query=" + + ARB_timer_query + ", ARB_vertex_type_2_10_10_10_rev=" + ARB_vertex_type_2_10_10_10_rev + + ", ARB_draw_indirect=" + ARB_draw_indirect + ", ARB_gpu_shader5=" + ARB_gpu_shader5 + + ", ARB_gpu_shader_fp64=" + ARB_gpu_shader_fp64 + ", ARB_shader_subroutine=" + ARB_shader_subroutine + + ", ARB_tessellation_shader=" + ARB_tessellation_shader + ", ARB_texture_buffer_object_rgb32=" + + ARB_texture_buffer_object_rgb32 + ", ARB_transform_feedback2=" + ARB_transform_feedback2 + + ", ARB_transform_feedback3=" + ARB_transform_feedback3 + ", ARB_ES2_compatibility=" + + ARB_ES2_compatibility + ", ARB_get_program_binary=" + ARB_get_program_binary + + ", ARB_separate_shader_objects=" + ARB_separate_shader_objects + ", ARB_shader_precision=" + + ARB_shader_precision + ", ARB_vertex_attrib_64bit=" + ARB_vertex_attrib_64bit + ", ARB_viewport_array=" + + ARB_viewport_array + ", ARB_cl_event=" + ARB_cl_event + ", ARB_debug_output=" + ARB_debug_output + + ", ARB_robustness=" + ARB_robustness + ", ARB_shader_stencil_export=" + ARB_shader_stencil_export + + ", ARB_base_instance=" + ARB_base_instance + ", ARB_shading_language_420pack=" + + ARB_shading_language_420pack + ", ARB_transform_feedback_instanced=" + ARB_transform_feedback_instanced + + ", ARB_compressed_texture_pixel_storage=" + ARB_compressed_texture_pixel_storage + + ", ARB_conservative_depth=" + ARB_conservative_depth + ", ARB_internalformat_query=" + + ARB_internalformat_query + ", ARB_map_buffer_alignment=" + ARB_map_buffer_alignment + + ", ARB_shader_atomic_counters=" + ARB_shader_atomic_counters + ", ARB_shader_image_load_store=" + + ARB_shader_image_load_store + ", ARB_shading_language_packing=" + ARB_shading_language_packing + + ", ARB_texture_storage=" + ARB_texture_storage + ", KHR_texture_compression_astc_hdr=" + + KHR_texture_compression_astc_hdr + ", KHR_texture_compression_astc_ldr=" + + KHR_texture_compression_astc_ldr + ", KHR_debug=" + KHR_debug + ", ARB_arrays_of_arrays=" + + ARB_arrays_of_arrays + ", ARB_clear_buffer_object=" + ARB_clear_buffer_object + ", ARB_compute_shader=" + + ARB_compute_shader + ", ARB_copy_image=" + ARB_copy_image + ", ARB_texture_view=" + ARB_texture_view + + ", ARB_vertex_attrib_binding=" + ARB_vertex_attrib_binding + ", ARB_robustness_isolation=" + + ARB_robustness_isolation + ", ARB_ES3_compatibility=" + ARB_ES3_compatibility + + ", ARB_explicit_uniform_location=" + ARB_explicit_uniform_location + ", ARB_fragment_layer_viewport=" + + ARB_fragment_layer_viewport + ", ARB_framebuffer_no_attachments=" + ARB_framebuffer_no_attachments + + ", ARB_internalformat_query2=" + ARB_internalformat_query2 + ", ARB_invalidate_subdata=" + + ARB_invalidate_subdata + ", ARB_multi_draw_indirect=" + ARB_multi_draw_indirect + + ", ARB_program_interface_query=" + ARB_program_interface_query + ", ARB_robust_buffer_access_behavior=" + + ARB_robust_buffer_access_behavior + ", ARB_shader_image_size=" + ARB_shader_image_size + + ", ARB_shader_storage_buffer_object=" + ARB_shader_storage_buffer_object + ", ARB_stencil_texturing=" + + ARB_stencil_texturing + ", ARB_texture_buffer_range=" + ARB_texture_buffer_range + + ", ARB_texture_query_levels=" + ARB_texture_query_levels + ", ARB_texture_storage_multisample=" + + ARB_texture_storage_multisample + ", ARB_buffer_storage=" + ARB_buffer_storage + ", ARB_clear_texture=" + + ARB_clear_texture + ", ARB_enhanced_layouts=" + ARB_enhanced_layouts + ", ARB_multi_bind=" + + ARB_multi_bind + ", ARB_query_buffer_object=" + ARB_query_buffer_object + + ", ARB_texture_mirror_clamp_to_edge=" + ARB_texture_mirror_clamp_to_edge + ", ARB_texture_stencil8=" + + ARB_texture_stencil8 + ", ARB_vertex_type_10f_11f_11f_rev=" + ARB_vertex_type_10f_11f_11f_rev + + ", ARB_bindless_texture=" + ARB_bindless_texture + ", ARB_compute_variable_group_size=" + + ARB_compute_variable_group_size + ", ARB_indirect_parameters=" + ARB_indirect_parameters + + ", ARB_seamless_cubemap_per_texture=" + ARB_seamless_cubemap_per_texture + ", ARB_shader_draw_parameters=" + + ARB_shader_draw_parameters + ", ARB_shader_group_vote=" + ARB_shader_group_vote + ", ARB_sparse_texture=" + + ARB_sparse_texture + ", ARB_ES3_1_compatibility=" + ARB_ES3_1_compatibility + ", ARB_clip_control=" + + ARB_clip_control + ", ARB_conditional_render_inverted=" + ARB_conditional_render_inverted + + ", ARB_cull_distance=" + ARB_cull_distance + ", ARB_derivative_control=" + ARB_derivative_control + + ", ARB_direct_state_access=" + ARB_direct_state_access + ", ARB_get_texture_sub_image=" + + ARB_get_texture_sub_image + ", ARB_shader_texture_image_samples=" + ARB_shader_texture_image_samples + + ", ARB_texture_barrier=" + ARB_texture_barrier + ", KHR_context_flush_control=" + + KHR_context_flush_control + ", KHR_robust_buffer_access_behavior=" + KHR_robust_buffer_access_behavior + + ", KHR_robustness=" + KHR_robustness + ", ARB_pipeline_statistics_query=" + ARB_pipeline_statistics_query + + ", ARB_sparse_buffer=" + ARB_sparse_buffer + ", ARB_transform_feedback_overflow_query=" + + ARB_transform_feedback_overflow_query + ", EXT_texture_compression_latc=" + EXT_texture_compression_latc + + ", EXT_transform_feedback=" + EXT_transform_feedback + ", EXT_direct_state_access=" + + EXT_direct_state_access + ", EXT_texture_filter_anisotropic=" + EXT_texture_filter_anisotropic + + ", EXT_texture_compression_s3tc=" + EXT_texture_compression_s3tc + ", EXT_texture_array=" + + EXT_texture_array + ", EXT_texture_snorm=" + EXT_texture_snorm + ", EXT_texture_sRGB_decode=" + + EXT_texture_sRGB_decode + ", EXT_framebuffer_multisample_blit_scaled=" + + EXT_framebuffer_multisample_blit_scaled + ", EXT_shader_integer_mix=" + EXT_shader_integer_mix + + ", EXT_shader_image_load_formatted=" + EXT_shader_image_load_formatted + ", EXT_polygon_offset_clamp=" + + EXT_polygon_offset_clamp + ", NV_explicit_multisample=" + NV_explicit_multisample + + ", NV_shader_buffer_load=" + NV_shader_buffer_load + ", NV_vertex_buffer_unified_memory=" + + NV_vertex_buffer_unified_memory + ", NV_shader_buffer_store=" + NV_shader_buffer_store + + ", NV_bindless_multi_draw_indirect=" + NV_bindless_multi_draw_indirect + ", NV_blend_equation_advanced=" + + NV_blend_equation_advanced + ", NV_deep_texture3D=" + NV_deep_texture3D + ", NV_shader_thread_group=" + + NV_shader_thread_group + ", NV_shader_thread_shuffle=" + NV_shader_thread_shuffle + + ", NV_shader_atomic_int64=" + NV_shader_atomic_int64 + ", NV_bindless_multi_draw_indirect_count=" + + NV_bindless_multi_draw_indirect_count + ", NV_uniform_buffer_unified_memory=" + + NV_uniform_buffer_unified_memory + ", ATI_texture_compression_3dc=" + ATI_texture_compression_3dc + + ", AMD_depth_clamp_separate=" + AMD_depth_clamp_separate + ", AMD_stencil_operation_extended=" + + AMD_stencil_operation_extended + ", AMD_vertex_shader_viewport_index=" + AMD_vertex_shader_viewport_index + + ", AMD_vertex_shader_layer=" + AMD_vertex_shader_layer + ", AMD_shader_trinary_minmax=" + + AMD_shader_trinary_minmax + ", AMD_interleaved_elements=" + AMD_interleaved_elements + + ", AMD_shader_atomic_counter_ops=" + AMD_shader_atomic_counter_ops + ", AMD_occlusion_query_event=" + + AMD_occlusion_query_event + ", AMD_shader_stencil_value_export=" + AMD_shader_stencil_value_export + + ", AMD_transform_feedback4=" + AMD_transform_feedback4 + ", AMD_gpu_shader_int64=" + AMD_gpu_shader_int64 + + ", AMD_gcn_shader=" + AMD_gcn_shader + ", INTEL_map_texture=" + INTEL_map_texture + + ", INTEL_fragment_shader_ordering=" + INTEL_fragment_shader_ordering + ", INTEL_performance_query=" + + INTEL_performance_query + '}'; + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/capabilities/GLVersionData.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/capabilities/GLVersionData.java new file mode 100644 index 0000000000..11bf92e359 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/capabilities/GLVersionData.java @@ -0,0 +1,30 @@ +package org.gephi.viz.engine.jogl.util.gl.capabilities; + +/** + * + * @author gbarbieri + */ +public class GLVersionData { + + public GLVersionData(Profile profile) { + PROFILE = profile; + } + + public Profile PROFILE; + public int MAJOR_VERSION; + public int MINOR_VERSION; + public int CONTEXT_FLAGS; + public int NUM_EXTENSIONS; + public String RENDERER; + public String VENDOR; + public String VERSION; + public String SHADING_LANGUAGE_VERSION; + + @Override + public String toString() { + return "GLVersionData{" + "PROFILE=" + PROFILE + ", MAJOR_VERSION=" + MAJOR_VERSION + ", MINOR_VERSION=" + + MINOR_VERSION + ", CONTEXT_FLAGS=" + CONTEXT_FLAGS + ", NUM_EXTENSIONS=" + NUM_EXTENSIONS + ", RENDERER=" + + RENDERER + ", VENDOR=" + VENDOR + ", VERSION=" + VERSION + ", SHADING_LANGUAGE_VERSION=" + + SHADING_LANGUAGE_VERSION + '}'; + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/capabilities/Profile.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/capabilities/Profile.java new file mode 100644 index 0000000000..843c53c248 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/jogl/util/gl/capabilities/Profile.java @@ -0,0 +1,11 @@ +package org.gephi.viz.engine.jogl.util.gl.capabilities; + +/** + * + * @author gbarbieri + */ +public enum Profile { + CORE, + COMPATIBILITY, + ES +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/pipeline/PipelineCategory.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/pipeline/PipelineCategory.java new file mode 100644 index 0000000000..451343512c --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/pipeline/PipelineCategory.java @@ -0,0 +1,14 @@ +package org.gephi.viz.engine.pipeline; + +/** + * + * @author Eduardo Ramos + */ +public class PipelineCategory { + public static final String NODE = "Node"; + public static final String EDGE = "Edge"; + public static final String RECTANGLE_SELECTION = "Rectangle selection"; + public static final String MOUSE_SELECTION = "Mouse selection"; + public static final String NODE_LABEL = "Node label"; + public static final String EDGE_LABEL = "Edge label"; +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/pipeline/RenderingLayer.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/pipeline/RenderingLayer.java new file mode 100644 index 0000000000..d246edc9c3 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/pipeline/RenderingLayer.java @@ -0,0 +1,51 @@ +package org.gephi.viz.engine.pipeline; + +/** + * + * @author Eduardo Ramos + */ +public enum RenderingLayer { + BACK1, + BACK2, + BACK3, + BACK4, + MIDDLE1, + MIDDLE2, + MIDDLE3, + MIDDLE4, + FRONT1, + FRONT2, + FRONT3, + FRONT4; + + public int getLevel() { + switch (this) { + case BACK1: + case MIDDLE1: + case FRONT1: + return 1; + case BACK2: + case MIDDLE2: + case FRONT2: + return 2; + case BACK3: + case MIDDLE3: + case FRONT3: + return 3; + default: + return 4; + } + } + + public boolean isBack() { + return this == BACK1 || this == BACK2 || this == BACK3 || this == BACK4; + } + + public boolean isMiddle() { + return this == MIDDLE1 || this == MIDDLE2 || this == MIDDLE3 || this == MIDDLE4; + } + + public boolean isFront() { + return this == FRONT1 || this == FRONT2 || this == FRONT3 || this == FRONT4; + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/pipeline/common/InstanceCounter.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/pipeline/common/InstanceCounter.java new file mode 100644 index 0000000000..f30e73e94b --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/pipeline/common/InstanceCounter.java @@ -0,0 +1,41 @@ +package org.gephi.viz.engine.pipeline.common; + +/** + * + * @author Eduardo Ramos + */ +public class InstanceCounter { + + public volatile int unselectedCount = 0; + public volatile int selectedCount = 0; + public volatile int unselectedCountToDraw = 0; + public volatile int selectedCountToDraw = 0; + + + public void promoteCountToDraw() { + unselectedCountToDraw = unselectedCount; + selectedCountToDraw = selectedCount; + } + + public void clearCount() { + unselectedCount = 0; + selectedCount = 0; + } + + public int total() { + return unselectedCount + selectedCount; + } + + public int totalToDraw() { + return unselectedCountToDraw + selectedCountToDraw; + } + + @Override + public String toString() { + return "InstanceCounter{" + "unselectedCount=" + unselectedCount + + ", selectedCount=" + selectedCount + + ", unselectedCountToDraw=" + unselectedCountToDraw + + ", selectedCountToDraw=" + selectedCountToDraw + + '}'; + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/spi/ElementsCallback.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/spi/ElementsCallback.java new file mode 100644 index 0000000000..badfdda920 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/spi/ElementsCallback.java @@ -0,0 +1,40 @@ +package org.gephi.viz.engine.spi; + +import java.util.function.Consumer; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Rect2D; +import org.gephi.viz.engine.status.GraphRenderingOptions; +import org.gephi.viz.engine.status.GraphSelection; +import org.gephi.viz.engine.structure.GraphIndex; + +public interface ElementsCallback extends Consumer { + + void run(GraphIndex graphIndex, GraphRenderingOptions renderingOptions, Rect2D viewBoundaries); + + /** + * Called when going to start receiving elements + * + * @param graph Graph + */ + void start(Graph graph, GraphRenderingOptions graphRenderingOptions, GraphSelection selection); + + /** + * Called for each element in the list + * + * @param element Element + */ + @Override + void accept(T element); + + /** + * Called when finished receiving elements + * + * @param graph Graph + */ + void end(Graph graph); + + /** + * Reset to free up memory + */ + void reset(); +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/spi/InputListener.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/spi/InputListener.java new file mode 100644 index 0000000000..9d2918ab22 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/spi/InputListener.java @@ -0,0 +1,29 @@ +package org.gephi.viz.engine.spi; + +import java.util.List; +import org.gephi.viz.engine.VizEngineModel; + +/** + * + * @param + * @param Event type + * @author Eduardo Ramos + */ +public interface InputListener extends PipelinedExecutor { + + default void frameStart(VizEngineModel model) { + + } + + /** + * Process a batch of events. + * + * @param events List of events to process + * @return List of events that were NOT consumed (remaining for next listener in pipeline) + */ + List processEvents(List events); + + default void frameEnd(VizEngineModel model) { + + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/spi/PipelinedExecutor.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/spi/PipelinedExecutor.java new file mode 100644 index 0000000000..dae2aa6759 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/spi/PipelinedExecutor.java @@ -0,0 +1,35 @@ +package org.gephi.viz.engine.spi; + +/** + * + * @param + * @author Eduardo Ramos + */ +public interface PipelinedExecutor { + + String getCategory(); + + int getPreferenceInCategory(); + + String getName(); + + default boolean isAvailable(R target) { + return true; + } + + void init(R target); + + default void dispose(R target) { + //NOOP + } + + int getOrder(); + + class Comparator implements java.util.Comparator { + + @Override + public int compare(PipelinedExecutor o1, PipelinedExecutor o2) { + return o1.getOrder() - o2.getOrder(); + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/spi/Renderer.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/spi/Renderer.java new file mode 100644 index 0000000000..0d39ce3708 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/spi/Renderer.java @@ -0,0 +1,19 @@ +package org.gephi.viz.engine.spi; + +import java.util.EnumSet; +import org.gephi.viz.engine.VizEngineModel; +import org.gephi.viz.engine.pipeline.RenderingLayer; + +/** + * + * @param + * @author Eduardo Ramos + */ +public interface Renderer extends PipelinedExecutor { + + D worldUpdated(VizEngineModel model, R target, float[] mvpFloats); + + void render(D data, R target, RenderingLayer layer, float[] mvpFloats); + + EnumSet getLayers(); +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/spi/RenderingTarget.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/spi/RenderingTarget.java new file mode 100644 index 0000000000..9c7fd62d5f --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/spi/RenderingTarget.java @@ -0,0 +1,22 @@ +package org.gephi.viz.engine.spi; + +import org.gephi.viz.engine.VizEngine; + +/** + * + * @author Eduardo Ramos + */ +public interface RenderingTarget { + + void setup(VizEngine engine); + + default void frameStart() { + //NOOP + } + + default void frameEnd() { + //NOOP + } + + int getFps(); +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/spi/VizEngineConfigurator.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/spi/VizEngineConfigurator.java new file mode 100644 index 0000000000..cd03c617cc --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/spi/VizEngineConfigurator.java @@ -0,0 +1,14 @@ +package org.gephi.viz.engine.spi; + +import org.gephi.viz.engine.VizEngine; + +/** + * + * @param + * @param + * @author Eduardo Ramos + */ +public interface VizEngineConfigurator { + + void configure(VizEngine engine); +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/spi/WorldData.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/spi/WorldData.java new file mode 100644 index 0000000000..5bcca80ff2 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/spi/WorldData.java @@ -0,0 +1,5 @@ +package org.gephi.viz.engine.spi; + +public interface WorldData { + +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/spi/WorldUpdater.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/spi/WorldUpdater.java new file mode 100644 index 0000000000..cad228bcdc --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/spi/WorldUpdater.java @@ -0,0 +1,15 @@ +package org.gephi.viz.engine.spi; + +import org.gephi.viz.engine.VizEngineModel; + +/** + * + * @param + * @author Eduardo Ramos + */ +public interface WorldUpdater extends PipelinedExecutor { + + void updateWorld(VizEngineModel model); + + ElementsCallback getElementsCallback(); +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/spi/WorldUpdaterExecutionMode.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/spi/WorldUpdaterExecutionMode.java new file mode 100644 index 0000000000..e392191a74 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/spi/WorldUpdaterExecutionMode.java @@ -0,0 +1,33 @@ +package org.gephi.viz.engine.spi; + +/** + * + * @author Eduardo Ramos + */ +public enum WorldUpdaterExecutionMode { + /** + * Run each world update in the render loop thread. + */ + SINGLE_THREAD, + /** + * Run each world update in a concurrent thread and wait for termination in the render loop thread before rendering. + */ + CONCURRENT_SYNCHRONOUS, + /** + *

              + * Run each world update in a concurrent thread but don't wait for termination in the render loop thread before rendering. + *

              + *

              + * Maximizes FPS and responsiveness to input events but can cause flicker when zooming out. + *

              + */ + CONCURRENT_ASYNCHRONOUS; + + public boolean isConcurrent() { + return this == CONCURRENT_SYNCHRONOUS || this == CONCURRENT_ASYNCHRONOUS; + } + + public boolean isSynchronous() { + return this == CONCURRENT_SYNCHRONOUS || this == SINGLE_THREAD; + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/status/GraphRenderingOptions.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/status/GraphRenderingOptions.java new file mode 100644 index 0000000000..ff66e11de2 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/status/GraphRenderingOptions.java @@ -0,0 +1,233 @@ +package org.gephi.viz.engine.status; + +import java.awt.Color; +import java.awt.Font; +import org.gephi.graph.api.Column; +import org.joml.Vector2fc; + +/** + * + * @author Eduardo Ramos + */ +public interface GraphRenderingOptions { + + enum EdgeColorMode { + SOURCE, + TARGET, + MIXED, + SELF + } + + enum LabelColorMode { + SELF, + OBJECT + } + + enum LabelSizeMode { + SCREEN, + ZOOM + } + + //Show: + boolean DEFAULT_SHOW_NODES = true; + boolean DEFAULT_SHOW_EDGES = true; + boolean DEFAULT_SHOW_NODE_LABELS = false; + boolean DEFAULT_SHOW_EDGE_LABELS = false; + + //Global + float[] DEFAULT_BACKGROUND_COLOR = new float[] {1, 1, 1, 1}; + float[] DEFAULT_DARK_BACKGROUND_COLOR = new float[] {52 / 255f, 55 / 255f, 57 / 255f, 1f}; + float DEFAULT_ZOOM = 0.3f; + float DEFAULT_PAN_X = 0f; + float DEFAULT_PAN_Y = 0f; + + //Nodes: + float DEFAULT_NODE_SCALE = 1f; + + //Edges: + float DEFAULT_EDGE_SCALE = 2f; + boolean DEFAULT_ENABLE_EDGE_SELECTION_COLOR = false; + Color DEFAULT_EDGE_IN_SELECTION_COLOR = new Color(32, 95, 154, 255); + Color DEFAULT_EDGE_OUT_SELECTION_COLOR = new Color(196, 66, 79, 255); + Color DEFAULT_EDGE_BOTH_SELECTION_COLOR = new Color(248, 215, 83, 255); + EdgeColorMode DEFAULT_EDGE_COLOR_MODE = EdgeColorMode.SELF; + boolean DEFAULT_EDGE_WEIGHT_ENABLED = true; + boolean DEFAULT_EDGE_RESCALE_WEIGHT_ENABLED = true; + float DEFAULT_EDGE_RESCALE_MIN = 0.4f; + float DEFAULT_EDGE_RESCALE_MAX = 8.0f; + + //Node Labels + boolean DEFAULT_NODE_LABEL_FIT_TO_NODE_SIZE = false; + float DEFAULT_NODE_LABEL_SCALE = 1f; + LabelColorMode DEFAULT_NODE_LABEL_COLOR_MODE = LabelColorMode.SELF; + LabelSizeMode DEFAULT_NODE_LABEL_SIZE_MODE = LabelSizeMode.ZOOM; + Font DEFAULT_NODE_LABEL_FONT = new Font("Arial", Font.BOLD, 32); + boolean DEFAULT_HIDE_NON_SELECTED_NODE_LABELS = false; + float DEFAULT_NODE_LABEL_FIT_TO_NODE_SIZE_FACTOR = 0.05f; + boolean DEFAULT_AVOID_NODE_LABEL_OVERLAP = false; + + //Selection: + boolean DEFAULT_HIDE_NON_SELECTED_EDGES = false; + boolean DEFAULT_LIGHTEN_NON_SELECTED = true; + boolean DEFAULT_AUTO_SELECT_NEIGHBOURS = true; + float DEFAULT_LIGHTEN_NON_SELECTED_FACTOR = 0.9f; + + float[] getBackgroundColor(); + + void setBackgroundColor(float[] backgroundColor); + + boolean isBackgroundColorDark(); + + float getZoom(); + + void setZoom(float zoom); + + Vector2fc getPan(); + + void setPan(Vector2fc pan); + + boolean isLightenNonSelected(); + + void setLightenNonSelected(boolean lightenNonSelected); + + float getLightenNonSelectedFactor(); + + void setLightenNonSelectedFactor(float lightenNonSelectedFactor); + + boolean isAutoSelectNeighbours(); + + void setAutoSelectNeighbours(boolean autoSelectNeighbours); + + // Nodes + + float getNodeScale(); + + void setNodeScale(float nodeScale); + + boolean isShowNodes(); + + void setShowNodes(boolean showNodes); + + // Edges + + boolean isShowEdges(); + + void setShowEdges(boolean showEdges); + + float getEdgeScale(); + + void setEdgeScale(float edgeScale); + + boolean isHideNonSelectedEdges(); + + void setHideNonSelectedEdges(boolean hideNonSelected); + + boolean isEdgeSelectionColor(); + + void setEdgeSelectionColor(boolean edgeSelectionColor); + + Color getEdgeBothSelectionColor(); + + void setEdgeBothSelectionColor(Color color); + + Color getEdgeOutSelectionColor(); + + void setEdgeOutSelectionColor(Color color); + + Color getEdgeInSelectionColor(); + + void setEdgeInSelectionColor(Color color); + + EdgeColorMode getEdgeColorMode(); + + void setEdgeColorMode(EdgeColorMode mode); + + boolean isEdgeWeightEnabled(); + + void setEdgeWeightEnabled(boolean enabled); + + boolean isEdgeRescaleWeightEnabled(); + + void setEdgeRescaleWeightEnabled(boolean enabled); + + float getEdgeRescaleMin(); + + void setEdgeRescaleMin(float edgeRescaleMin); + + float getEdgeRescaleMax(); + + void setEdgeRescaleMax(float edgeRescaleMax); + + // Node Labels + + boolean isShowNodeLabels(); + + void setShowNodeLabels(boolean showNodeLabels); + + Column[] getNodeLabelColumns(); + + void setNodeLabelColumns(Column[] columns); + + LabelColorMode getNodeLabelColorMode(); + + void setNodeLabelColorMode(LabelColorMode labelColorMode); + + LabelSizeMode getNodeLabelSizeMode(); + + void setNodeLabelSizeMode(LabelSizeMode labelSizeMode); + + Font getNodeLabelFont(); + + void setNodeLabelFont(Font font); + + float getNodeLabelScale(); + + void setNodeLabelScale(float nodeLabelScale); + + boolean isNodeLabelFitToNodeSize(); + + void setNodeLabelFitToNodeSize(boolean fitToNodeSize); + + float getNodeLabelFitToNodeSizeFactor(); + + void setNodeLabelFitToNodeSizeFactor(float factor); + + boolean isHideNonSelectedNodeLabels(); + + void setHideNonSelectedNodeLabels(boolean hideNonSelected); + + boolean isAvoidNodeLabelOverlap(); + + void setAvoidNodeLabelOverlap(boolean avoidOverlap); + + // Edge Labels + + boolean isShowEdgeLabels(); + + void setShowEdgeLabels(boolean showEdgeLabels); + + Column[] getEdgeLabelColumns(); + + void setEdgeLabelColumns(Column[] columns); + + LabelColorMode getEdgeLabelColorMode(); + + void setEdgeLabelColorMode(LabelColorMode labelColorMode); + + LabelSizeMode getEdgeLabelSizeMode(); + + void setEdgeLabelSizeMode(LabelSizeMode labelSizeMode); + + Font getEdgeLabelFont(); + + void setEdgeLabelFont(Font font); + + float getEdgeLabelScale(); + + void setEdgeLabelScale(float edgeLabelScale); + + boolean isHideNonSelectedEdgeLabels(); + + void setHideNonSelectedEdgeLabels(boolean hideNonSelected); + +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/status/GraphRenderingOptionsImpl.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/status/GraphRenderingOptionsImpl.java new file mode 100644 index 0000000000..69e3d9c4c9 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/status/GraphRenderingOptionsImpl.java @@ -0,0 +1,556 @@ +package org.gephi.viz.engine.status; + +import java.awt.Color; +import java.awt.Font; +import java.util.Objects; +import org.gephi.graph.api.Column; +import org.gephi.viz.engine.util.ColorUtils; +import org.joml.Vector2f; +import org.joml.Vector2fc; + +public class GraphRenderingOptionsImpl implements GraphRenderingOptions { + + //Show: + private boolean showNodes = DEFAULT_SHOW_NODES; + private boolean showEdges = DEFAULT_SHOW_EDGES; + private boolean showNodeLabels = DEFAULT_SHOW_NODE_LABELS; + private boolean showEdgeLabels = DEFAULT_SHOW_EDGE_LABELS; + + //Global + private volatile float[] backgroundColor = DEFAULT_BACKGROUND_COLOR; + private float zoom = DEFAULT_ZOOM; + private volatile Vector2f pan = new Vector2f(DEFAULT_PAN_X, DEFAULT_PAN_Y); + + //Edges + private float edgeScale = DEFAULT_EDGE_SCALE; + private boolean edgeSelectionColor = DEFAULT_ENABLE_EDGE_SELECTION_COLOR; + private Color edgeBothSelectionColor = DEFAULT_EDGE_BOTH_SELECTION_COLOR; + private Color edgeInSelectionColor = DEFAULT_EDGE_IN_SELECTION_COLOR; + private Color edgeOutSelectionColor = DEFAULT_EDGE_OUT_SELECTION_COLOR; + private EdgeColorMode edgeColorMode = DEFAULT_EDGE_COLOR_MODE; + private boolean edgeWeightEnabled = DEFAULT_EDGE_WEIGHT_ENABLED; + private boolean edgeRescaleWeightEnabled = DEFAULT_EDGE_RESCALE_WEIGHT_ENABLED; + private float edgeRescaleMin = DEFAULT_EDGE_RESCALE_MIN; + private float edgeRescaleMax = DEFAULT_EDGE_RESCALE_MAX; + + //Nodes + private float nodeScale = DEFAULT_NODE_SCALE; + + //Node Labels + private boolean nodeLabelFitToNodeSize = DEFAULT_NODE_LABEL_FIT_TO_NODE_SIZE; + private float nodeLabelScale = DEFAULT_NODE_LABEL_SCALE; + private LabelColorMode nodeLabelColorMode = DEFAULT_NODE_LABEL_COLOR_MODE; + private LabelSizeMode nodeLabelSizeMode = DEFAULT_NODE_LABEL_SIZE_MODE; + private Font nodeLabelFont = DEFAULT_NODE_LABEL_FONT; + private boolean hideNonSelectedNodeLabels = DEFAULT_HIDE_NON_SELECTED_NODE_LABELS; + private float nodeLabelFitToNodeSizeFactor = DEFAULT_NODE_LABEL_FIT_TO_NODE_SIZE_FACTOR; + private boolean avoidNodeLabelOverlap = DEFAULT_AVOID_NODE_LABEL_OVERLAP; + private Column[] nodeLabelColumns = new Column[0]; + + //Edge Labels + private LabelColorMode edgeLabelColorMode = DEFAULT_NODE_LABEL_COLOR_MODE; + private LabelSizeMode edgeLabelSizeMode = DEFAULT_NODE_LABEL_SIZE_MODE; + private Font edgeLabelFont = DEFAULT_NODE_LABEL_FONT; + private float edgeLabelScale = DEFAULT_NODE_LABEL_SCALE; + private boolean hideNonSelectedEdgeLabels = DEFAULT_HIDE_NON_SELECTED_NODE_LABELS; + private Column[] edgeLabelColumns = new Column[0]; + + //Selection: + private boolean autoSelectNeighbours = DEFAULT_AUTO_SELECT_NEIGHBOURS; + private boolean hideNonSelectedEdges = DEFAULT_HIDE_NON_SELECTED_EDGES; + private boolean lightenNonSelected = DEFAULT_LIGHTEN_NON_SELECTED; + private float lightenNonSelectedFactor = DEFAULT_LIGHTEN_NON_SELECTED_FACTOR; + + public GraphRenderingOptionsImpl() { + this(false); + } + + public GraphRenderingOptionsImpl(boolean darkLaf) { + if (darkLaf) { + this.backgroundColor = DEFAULT_DARK_BACKGROUND_COLOR; + } + } + + public GraphRenderingOptionsImpl(GraphRenderingOptions other) { + Objects.requireNonNull(other, "other"); + + // Show + this.showNodes = other.isShowNodes(); + this.showEdges = other.isShowEdges(); + this.showNodeLabels = other.isShowNodeLabels(); + this.showEdgeLabels = other.isShowEdgeLabels(); + + // Global + float[] otherBg = other.getBackgroundColor(); + this.backgroundColor = otherBg.clone(); + this.zoom = other.getZoom(); + this.pan = new Vector2f(other.getPan()); + + // Edges + this.edgeScale = other.getEdgeScale(); + this.edgeSelectionColor = other.isEdgeSelectionColor(); + this.edgeBothSelectionColor = other.getEdgeBothSelectionColor(); + this.edgeInSelectionColor = other.getEdgeInSelectionColor(); + this.edgeOutSelectionColor = other.getEdgeOutSelectionColor(); + this.edgeColorMode = other.getEdgeColorMode(); + this.edgeWeightEnabled = other.isEdgeWeightEnabled(); + this.edgeRescaleWeightEnabled = other.isEdgeRescaleWeightEnabled(); + this.edgeRescaleMin = other.getEdgeRescaleMin(); + this.edgeRescaleMax = other.getEdgeRescaleMax(); + + // Nodes + this.nodeScale = other.getNodeScale(); + + // Node Labels + this.nodeLabelFitToNodeSize = other.isNodeLabelFitToNodeSize(); + this.nodeLabelScale = other.getNodeLabelScale(); + this.nodeLabelColorMode = other.getNodeLabelColorMode(); + this.nodeLabelSizeMode = other.getNodeLabelSizeMode(); + this.nodeLabelFont = other.getNodeLabelFont(); + this.hideNonSelectedNodeLabels = other.isHideNonSelectedNodeLabels(); + this.nodeLabelFitToNodeSizeFactor = other.getNodeLabelFitToNodeSizeFactor(); + this.nodeLabelColumns = other.getNodeLabelColumns(); + this.avoidNodeLabelOverlap = other.isAvoidNodeLabelOverlap(); + + // Edge Labels + this.edgeLabelColorMode = other.getEdgeLabelColorMode(); + this.edgeLabelSizeMode = other.getEdgeLabelSizeMode(); + this.edgeLabelFont = other.getEdgeLabelFont(); + this.edgeLabelScale = other.getEdgeLabelScale(); + this.hideNonSelectedEdgeLabels = other.isHideNonSelectedEdgeLabels(); + this.edgeLabelColumns = other.getEdgeLabelColumns(); + + // Selection + this.autoSelectNeighbours = other.isAutoSelectNeighbours(); + this.hideNonSelectedEdges = other.isHideNonSelectedEdges(); + this.lightenNonSelected = other.isLightenNonSelected(); + this.lightenNonSelectedFactor = other.getLightenNonSelectedFactor(); + } + + @Override + public float[] getBackgroundColor() { + return backgroundColor; + } + + public void setBackgroundColor(Color color) { + Objects.requireNonNull(color, "backgroundColor can't be null"); + float[] backgroundColorComponents = new float[4]; + color.getRGBComponents(backgroundColorComponents); + this.backgroundColor = backgroundColorComponents; + } + + @Override + public void setBackgroundColor(float[] backgroundColor) { + Objects.requireNonNull(backgroundColor, "backgroundColor can't be null"); + this.backgroundColor = backgroundColor; + } + + @Override + public boolean isBackgroundColorDark() { + return ColorUtils.isColorDark(backgroundColor); + } + + @Override + public float getZoom() { + return zoom; + } + + @Override + public void setZoom(float zoom) { + this.zoom = zoom; + } + + @Override + public Vector2fc getPan() { + return pan; + } + + @Override + public void setPan(Vector2fc value) { + pan = new Vector2f(value); + } + + @Override + public boolean isLightenNonSelected() { + return lightenNonSelected; + } + + @Override + public void setLightenNonSelected(boolean lightenNonSelected) { + this.lightenNonSelected = lightenNonSelected; + } + + @Override + public float getLightenNonSelectedFactor() { + return lightenNonSelectedFactor; + } + + @Override + public void setLightenNonSelectedFactor(float lightenNonSelectedFactor) { + if (lightenNonSelectedFactor < 0) { + lightenNonSelectedFactor = 0; + } + + if (lightenNonSelectedFactor > 1) { + lightenNonSelectedFactor = 1; + } + + this.lightenNonSelectedFactor = lightenNonSelectedFactor; + } + + @Override + public boolean isAutoSelectNeighbours() { + return autoSelectNeighbours; + } + + @Override + public void setAutoSelectNeighbours(boolean autoSelectNeighbours) { + this.autoSelectNeighbours = autoSelectNeighbours; + } + + // Nodes + + @Override + public float getNodeScale() { + return nodeScale; + } + + @Override + public void setNodeScale(float nodeScale) { + if (Float.isNaN(nodeScale) || Float.isInfinite(nodeScale)) { + nodeScale = DEFAULT_NODE_SCALE; + } + + if (nodeScale <= 0f) { + throw new IllegalArgumentException("nodeScale should be > 0"); + } + + this.nodeScale = nodeScale; + } + + @Override + public boolean isShowNodes() { + return showNodes; + } + + @Override + public void setShowNodes(boolean showNodes) { + this.showNodes = showNodes; + } + + // Edges + + @Override + public boolean isShowEdges() { + return showEdges; + } + + @Override + public void setShowEdges(boolean showEdges) { + this.showEdges = showEdges; + } + + @Override + public float getEdgeScale() { + return edgeScale; + } + + @Override + public void setEdgeScale(float edgeScale) { + if (Float.isNaN(edgeScale) || Float.isInfinite(edgeScale)) { + edgeScale = DEFAULT_EDGE_SCALE; + } + + if (edgeScale <= 0) { + throw new IllegalArgumentException("edgeScale should be > 0"); + } + + this.edgeScale = edgeScale; + } + + @Override + public boolean isHideNonSelectedEdges() { + return hideNonSelectedEdges; + } + + @Override + public void setHideNonSelectedEdges(boolean hideNonSelected) { + this.hideNonSelectedEdges = hideNonSelected; + } + + + @Override + public boolean isEdgeSelectionColor() { + return edgeSelectionColor; + } + + @Override + public void setEdgeSelectionColor(boolean edgeSelectionColor) { + this.edgeSelectionColor = edgeSelectionColor; + } + + @Override + public Color getEdgeBothSelectionColor() { + return edgeBothSelectionColor; + } + + @Override + public void setEdgeBothSelectionColor(Color color) { + Objects.requireNonNull(color, "edge both selection color can't be null"); + this.edgeBothSelectionColor = color; + } + + @Override + public Color getEdgeOutSelectionColor() { + return edgeOutSelectionColor; + } + + @Override + public void setEdgeOutSelectionColor(Color color) { + Objects.requireNonNull(color, "edge out selection color can't be null"); + this.edgeOutSelectionColor = color; + } + + @Override + public Color getEdgeInSelectionColor() { + return edgeInSelectionColor; + } + + @Override + public void setEdgeInSelectionColor(Color color) { + Objects.requireNonNull(color, "edge in selection color can't be null"); + this.edgeInSelectionColor = color; + } + + @Override + public EdgeColorMode getEdgeColorMode() { + return edgeColorMode; + } + + @Override + public void setEdgeColorMode(EdgeColorMode mode) { + this.edgeColorMode = Objects.requireNonNull(mode, "mode can't be null"); + } + + @Override + public boolean isEdgeWeightEnabled() { + return edgeWeightEnabled; + } + + @Override + public void setEdgeWeightEnabled(boolean enabled) { + this.edgeWeightEnabled = enabled; + } + + @Override + public boolean isEdgeRescaleWeightEnabled() { + return edgeRescaleWeightEnabled; + } + + @Override + public void setEdgeRescaleWeightEnabled(boolean edgeRescaleWeightEnabled) { + this.edgeRescaleWeightEnabled = edgeRescaleWeightEnabled; + } + + @Override + public float getEdgeRescaleMax() { + return edgeRescaleMax; + } + + @Override + public void setEdgeRescaleMax(float edgeRescaleMax) { + this.edgeRescaleMax = edgeRescaleMax; + } + + @Override + public float getEdgeRescaleMin() { + return edgeRescaleMin; + } + + @Override + public void setEdgeRescaleMin(float edgeRescaleMin) { + this.edgeRescaleMin = edgeRescaleMin; + } + + // Node Labels + + @Override + public boolean isShowNodeLabels() { + return showNodeLabels; + } + + @Override + public void setShowNodeLabels(boolean showNodeLabels) { + this.showNodeLabels = showNodeLabels; + } + + @Override + public Column[] getNodeLabelColumns() { + return nodeLabelColumns; + } + + @Override + public void setNodeLabelColumns(Column[] nodeLabelColumns) { + this.nodeLabelColumns = Objects.requireNonNull(nodeLabelColumns, "nodeLabelColumns can't be null"); + } + + @Override + public boolean isNodeLabelFitToNodeSize() { + return nodeLabelFitToNodeSize; + } + + @Override + public void setNodeLabelFitToNodeSize(boolean fitToNodeSize) { + this.nodeLabelFitToNodeSize = fitToNodeSize; + } + + @Override + public float getNodeLabelScale() { + return nodeLabelScale; + } + + @Override + public float getNodeLabelFitToNodeSizeFactor() { + return nodeLabelFitToNodeSizeFactor; + } + + @Override + public void setNodeLabelFitToNodeSizeFactor(float factor) { + this.nodeLabelFitToNodeSizeFactor = factor; + } + + @Override + public void setNodeLabelScale(float nodeLabelScale) { + if (nodeLabelScale <= 0f || Float.isNaN(nodeLabelScale) || Float.isInfinite(nodeLabelScale)) { + throw new IllegalArgumentException("nodeLabelScale should be > 0"); + } + + this.nodeLabelScale = nodeLabelScale; + } + + @Override + public LabelColorMode getNodeLabelColorMode() { + return nodeLabelColorMode; + } + + @Override + public void setNodeLabelColorMode(LabelColorMode labelColorMode) { + this.nodeLabelColorMode = Objects.requireNonNull(labelColorMode, "labelColorMode can't be null"); + } + + @Override + public LabelSizeMode getNodeLabelSizeMode() { + return nodeLabelSizeMode; + } + + @Override + public void setNodeLabelSizeMode(LabelSizeMode labelSizeMode) { + this.nodeLabelSizeMode = Objects.requireNonNull(labelSizeMode, "labelSizeMode can't be null"); + } + + @Override + public Font getNodeLabelFont() { + return nodeLabelFont; + } + + @Override + public void setNodeLabelFont(Font font) { + this.nodeLabelFont = Objects.requireNonNull(font, "font can't be null"); + } + + @Override + public boolean isHideNonSelectedNodeLabels() { + return hideNonSelectedNodeLabels; + } + + @Override + public void setHideNonSelectedNodeLabels(boolean hideNonSelected) { + this.hideNonSelectedNodeLabels = hideNonSelected; + } + + @Override + public boolean isAvoidNodeLabelOverlap() { + return avoidNodeLabelOverlap; + } + + @Override + public void setAvoidNodeLabelOverlap(boolean avoidOverlap) { + this.avoidNodeLabelOverlap = avoidOverlap; + } + + // Edge Labels + + @Override + public boolean isShowEdgeLabels() { + return showEdgeLabels; + } + + @Override + public void setShowEdgeLabels(boolean showEdgeLabels) { + this.showEdgeLabels = showEdgeLabels; + } + + @Override + public Column[] getEdgeLabelColumns() { + return edgeLabelColumns; + } + + @Override + public void setEdgeLabelColumns(Column[] edgeLabelColumns) { + this.edgeLabelColumns = Objects.requireNonNull(edgeLabelColumns, "edgeLabelColumns can't be null"); + } + + @Override + public LabelColorMode getEdgeLabelColorMode() { + return edgeLabelColorMode; + } + + @Override + public void setEdgeLabelColorMode(LabelColorMode labelColorMode) { + this.edgeLabelColorMode = Objects.requireNonNull(labelColorMode, "labelColorMode can't be null"); + } + + @Override + public LabelSizeMode getEdgeLabelSizeMode() { + return edgeLabelSizeMode; + } + + @Override + public void setEdgeLabelSizeMode(LabelSizeMode labelSizeMode) { + this.edgeLabelSizeMode = Objects.requireNonNull(labelSizeMode, "labelSizeMode can't be null"); + } + + @Override + public Font getEdgeLabelFont() { + return edgeLabelFont; + } + + @Override + public void setEdgeLabelFont(Font font) { + this.edgeLabelFont = Objects.requireNonNull(font, "font can't be null"); + } + + @Override + public float getEdgeLabelScale() { + return edgeLabelScale; + } + + @Override + public void setEdgeLabelScale(float edgeLabelScale) { + if (edgeLabelScale <= 0f || Float.isNaN(edgeLabelScale) || Float.isInfinite(edgeLabelScale)) { + throw new IllegalArgumentException("edgeLabelScale should be > 0"); + } + + this.edgeLabelScale = edgeLabelScale; + } + + @Override + public boolean isHideNonSelectedEdgeLabels() { + return hideNonSelectedEdgeLabels; + } + + @Override + public void setHideNonSelectedEdgeLabels(boolean hideNonSelected) { + this.hideNonSelectedEdgeLabels = hideNonSelected; + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/status/GraphSelection.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/status/GraphSelection.java new file mode 100644 index 0000000000..27a11f2093 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/status/GraphSelection.java @@ -0,0 +1,78 @@ +package org.gephi.viz.engine.status; + +import java.util.Collection; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.NodeIterable; +import org.joml.Vector2f; + +/** + * @author Eduardo Ramos + */ +public interface GraphSelection { + + enum GraphSelectionMode { + SIMPLE_MOUSE_SELECTION, + SINGLE_NODE_SELECTION, + MULTI_NODE_SELECTION, + RECTANGLE_SELECTION, + NO_SELECTION, + CUSTOM_SELECTION + } + + void setMouseSelectionDiameter(float radius); + + float getMouseSelectionDiameter(); + + float getMouseSelectionEffectiveDiameter(); + + void setSimpleMouseSelectionMVPScale(float scale); + + float getSimpleMouseSelectionMVPScale(); + + void setMouseSelectionDiameterZoomProportional(boolean isZoomProportional); + + boolean getMouseSelectionDiameterZoomProportional(); + + + boolean someNodesOrEdgesSelection(); + + boolean isNodeSelected(Node node); + + boolean isNodeOrNeighbourSelected(Node node); + + Collection getSelectedNodes(); + + void setSelectedNodes(Graph graph, NodeIterable nodesIterable, boolean autoSelectNeighbours, boolean selectEdges); + + void setSelectedNodes(Node[] nodes); + + void clearSelectedNodes(); + + boolean isEdgeSelected(Edge edge); + + void setSelectedEdges(Edge[] edges); + + void clearSelectedEdges(); + + GraphSelectionMode getMode(); + + void setMode(GraphSelectionMode mode); + + void clearSelection(); + + void startRectangleSelection(Vector2f initialPosition); + + void stopRectangleSelection(Vector2f endPosition); + + void updateRectangleSelection(Vector2f updatedPosition); + + Vector2f getRectangleInitialPosition(); + + Vector2f getRectangleCurrentPosition(); + + void updateMousePosition(Vector2f updatedPosition); + + Vector2f getMousePosition(); +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/status/GraphSelectionImpl.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/status/GraphSelectionImpl.java new file mode 100644 index 0000000000..bb267aaf8a --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/status/GraphSelectionImpl.java @@ -0,0 +1,246 @@ +package org.gephi.viz.engine.status; + +import java.util.ArrayList; +import java.util.BitSet; +import java.util.Collection; +import java.util.Collections; +import java.util.List; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.EdgeIterable; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.NodeIterable; +import org.joml.Vector2f; + +public class GraphSelectionImpl implements GraphSelection { + + private final BitSet nodes = new BitSet(); + private final BitSet nodesWithNeighbours = new BitSet(); + private final BitSet edges = new BitSet(); + private final List nodesList = new ArrayList<>(); + + private GraphSelection.GraphSelectionMode selectionMode; + private float simpleMouseSelectionDiameter = 1f; + private float simpleMouseSelectionMVPScale = 1.0f; + private boolean mouseSelectionDiameterZoomProportional = false; + + public GraphSelectionImpl() { + this.selectionMode = GraphSelectionMode.SIMPLE_MOUSE_SELECTION; + nodes.clear(); + } + + public GraphSelectionImpl(GraphSelection other) { + super(); + if (other != null) { + this.selectionMode = other.getMode(); + this.simpleMouseSelectionDiameter = other.getMouseSelectionDiameter(); + this.simpleMouseSelectionMVPScale = other.getSimpleMouseSelectionMVPScale(); + this.mouseSelectionDiameterZoomProportional = other.getMouseSelectionDiameterZoomProportional(); + } else { + this.selectionMode = GraphSelectionMode.SIMPLE_MOUSE_SELECTION; + } + } + + public BitSet getNodesWithNeighbours() { + return nodesWithNeighbours; + } + + public BitSet getNodes() { + return nodes; + } + + public BitSet getEdges() { + return edges; + } + + @Override + public void setMouseSelectionDiameter(float diameter) { + this.simpleMouseSelectionDiameter = diameter >= 1 ? diameter : 1; + } + + @Override + public float getMouseSelectionDiameter() { + return this.simpleMouseSelectionDiameter; + } + + public void setSimpleMouseSelectionMVPScale(float scale) { + this.simpleMouseSelectionMVPScale = scale; + } + + public float getSimpleMouseSelectionMVPScale() { + return this.simpleMouseSelectionMVPScale; + } + + public void setMouseSelectionDiameterZoomProportional(boolean isZoomProportional) { + this.mouseSelectionDiameterZoomProportional = isZoomProportional; + } + + public float getMouseSelectionEffectiveDiameter() { + if (this.mouseSelectionDiameterZoomProportional) { + return this.simpleMouseSelectionDiameter; + } + return (float) ((this.simpleMouseSelectionDiameter / this.simpleMouseSelectionMVPScale) * 0.001); + } + + public boolean getMouseSelectionDiameterZoomProportional() { + return this.mouseSelectionDiameterZoomProportional; + } + + @Override + public boolean someNodesOrEdgesSelection() { + return !nodes.isEmpty() || !edges.isEmpty(); + } + + @Override + public boolean isNodeSelected(Node node) { + return nodes.get(node.getStoreId()); + } + + @Override + public boolean isNodeOrNeighbourSelected(Node node) { + return nodesWithNeighbours.get(node.getStoreId()); + } + + @Override + public Collection getSelectedNodes() { + return Collections.unmodifiableCollection(nodesList); + } + + @Override + public void setSelectedNodes(Graph graph, NodeIterable nodesIterable, boolean autoSelectNeighbours, + boolean selectEdges) { + // Resets + nodes.clear(); + nodesWithNeighbours.clear(); + edges.clear(); + nodesList.clear(); + + final boolean selectNeighbours = autoSelectNeighbours && + getMode() != GraphSelection.GraphSelectionMode.SINGLE_NODE_SELECTION; + + graph.readLock(); + graph.getSpatialIndex().spatialIndexReadLock(); + nodesIterable.stream().forEach(node -> { + int storeId = node.getStoreId(); + nodes.set(storeId); + nodesList.add(node); + nodesWithNeighbours.set(storeId); + if (selectEdges || selectNeighbours) { + EdgeIterable edgeIterable = graph.getEdges(node); + for (Edge edge : edgeIterable) { + edges.set(edge.getStoreId()); + if (selectNeighbours) { + Node oppositeNode = graph.getOpposite(node, edge); + if (oppositeNode != null && oppositeNode != node) { + nodesWithNeighbours.set(oppositeNode.getStoreId()); + } + } + } + } + }); + graph.getSpatialIndex().spatialIndexReadUnlock(); + graph.readUnlock(); + } + + @Override + public void setSelectedNodes(Node[] nodes) { + this.nodes.clear(); + this.nodesWithNeighbours.clear(); + this.nodesList.clear(); + if (nodes != null) { + for (Node node : nodes) { + this.nodes.set(node.getStoreId()); + this.nodesWithNeighbours.set(node.getStoreId()); + this.nodesList.add(node); + } + } + } + + @Override + public void clearSelectedNodes() { + this.nodes.clear(); + this.nodesWithNeighbours.clear(); + this.nodesList.clear(); + } + + @Override + public boolean isEdgeSelected(Edge edge) { + return edges.get(edge.getStoreId()); + } + + @Override + public void setSelectedEdges(Edge[] edges) { + this.edges.clear(); + if (edges != null) { + for (Edge edge : edges) { + this.edges.set(edge.getStoreId()); + } + } + } + + @Override + public void clearSelectedEdges() { + this.edges.clear(); + } + + @Override + public void clearSelection() { + clearSelectedEdges(); + clearSelectedNodes(); + } + + @Override + public GraphSelectionMode getMode() { + return selectionMode; + } + + @Override + public void setMode(GraphSelectionMode mode) { + if (mode != null) { + selectionMode = mode; + clearSelection(); + } + } + + private Vector2f rectangleSelectionInitialPosition; + private Vector2f rectangleSelectionCurrentPosition; + + @Override + public void startRectangleSelection(Vector2f initialPosition) { + rectangleSelectionInitialPosition = initialPosition; + rectangleSelectionCurrentPosition = initialPosition; + } + + @Override + public void stopRectangleSelection(Vector2f endPosition) { + this.rectangleSelectionInitialPosition = null; + this.rectangleSelectionCurrentPosition = null; + } + + @Override + public void updateRectangleSelection(Vector2f updatedPosition) { + this.rectangleSelectionCurrentPosition = updatedPosition; + } + + @Override + public Vector2f getRectangleInitialPosition() { + return this.rectangleSelectionInitialPosition; + } + + @Override + public Vector2f getRectangleCurrentPosition() { + return this.rectangleSelectionCurrentPosition; + } + + private Vector2f mousePosition; + + @Override + public void updateMousePosition(Vector2f mousePosition) { + this.mousePosition = mousePosition; + } + + @Override + public Vector2f getMousePosition() { + return mousePosition; + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/structure/GraphIndex.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/structure/GraphIndex.java new file mode 100644 index 0000000000..10aad83767 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/structure/GraphIndex.java @@ -0,0 +1,47 @@ +package org.gephi.viz.engine.structure; + +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.EdgeIterable; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.NodeIterable; +import org.gephi.graph.api.Rect2D; +import org.gephi.viz.engine.spi.ElementsCallback; +import org.gephi.viz.engine.status.GraphRenderingOptions; + +/** + * + * @author Eduardo Ramos + */ +public interface GraphIndex { + + Graph getVisibleGraph(); + + int getNodeCount(); + + int getEdgeCount(); + + Rect2D getGraphBoundaries(); + + void getVisibleNodes(ElementsCallback callback, GraphRenderingOptions graphRenderingOptions, + Rect2D viewBoundaries); + + void getVisibleEdges(ElementsCallback callback, GraphRenderingOptions graphRenderingOptions, + Rect2D viewBoundaries); + + NodeIterable getNodesUnderPosition(float x, float y); + + NodeIterable getNodesUnderPosition(float x, float y, float nodeScale); + + NodeIterable getNodesInsideRectangle(Rect2D rect); + + NodeIterable getNodesInsideRectangle(Rect2D rect, float nodeScale); + + NodeIterable getNodesInsideCircle(float x, float y, float radius); + + NodeIterable getNodesInsideCircle(float x, float y, float radius, float nodeScale); + + EdgeIterable getEdgesInsideRectangle(Rect2D rect); + + EdgeIterable getEdgesInsideCircle(float x, float y, float radius); +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/structure/GraphIndexImpl.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/structure/GraphIndexImpl.java new file mode 100644 index 0000000000..3a14cd4a29 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/structure/GraphIndexImpl.java @@ -0,0 +1,186 @@ +package org.gephi.viz.engine.structure; + +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.EdgeIterable; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.NodeIterable; +import org.gephi.graph.api.Rect2D; +import org.gephi.graph.api.SpatialIndex; +import org.gephi.viz.engine.spi.ElementsCallback; +import org.gephi.viz.engine.status.GraphRenderingOptions; +import org.gephi.viz.engine.status.GraphSelectionImpl; +import org.joml.Intersectionf; + +/** + *

              + * TODO: make intersection functions customizable for different shape handling

              + *

              + * + * @author Eduardo Ramos + */ +public class GraphIndexImpl implements GraphIndex { + + private final GraphModel graphModel; + private final GraphSelectionImpl graphSelection; + + public GraphIndexImpl(GraphModel graphModel, GraphSelectionImpl graphSelection) { + this.graphModel = graphModel; + this.graphSelection = graphSelection; + } + + public Graph getVisibleGraph() { + return graphModel.getGraphVisible(); + } + + @Override + public int getNodeCount() { + return getVisibleGraph().getNodeCount(); + } + + @Override + public int getEdgeCount() { + return getVisibleGraph().getEdgeCount(); + } + + @Override + public void getVisibleNodes(ElementsCallback callback, GraphRenderingOptions graphRenderingOptions, + Rect2D viewBoundaries) { + graphModel.getGraph().readLock(); + final Graph visibleGraph = getVisibleGraph(); + callback.start(visibleGraph, graphRenderingOptions, graphSelection); + + SpatialIndex spatialIndex = visibleGraph.getSpatialIndex(); + spatialIndex.spatialIndexReadLock(); + spatialIndex.getApproximateNodesInArea(viewBoundaries).parallelStream().forEach( + callback); + spatialIndex.spatialIndexReadUnlock(); + + callback.end(visibleGraph); + graphModel.getGraph().readUnlock(); + } + + @Override + public void getVisibleEdges(ElementsCallback callback, GraphRenderingOptions graphRenderingOptions, + Rect2D viewBoundaries) { + graphModel.getGraph().readLock(); + final Graph visibleGraph = getVisibleGraph(); + callback.start(visibleGraph, graphRenderingOptions, graphSelection); + SpatialIndex spatialIndex = visibleGraph.getSpatialIndex(); + spatialIndex.spatialIndexReadLock(); + spatialIndex.getApproximateEdgesInArea(viewBoundaries).parallelStream().forEach( + callback); + spatialIndex.spatialIndexReadUnlock(); + + callback.end(visibleGraph); + graphModel.getGraph().readUnlock(); + } + + @Override + public NodeIterable getNodesUnderPosition(float x, float y) { + return getNodesUnderPosition(x, y, 1f); + } + + @Override + public NodeIterable getNodesUnderPosition(float x, float y, float nodeScale) { + final float searchExpansion = getScaledNodeSearchExpansion(nodeScale); + return getVisibleGraph().getSpatialIndex().getNodesInArea(getCircleRect2D(x, y, searchExpansion), + node -> { + final float size = node.size() * nodeScale; + + return Intersectionf.testPointCircle(x, y, node.x(), node.y(), size * size); + }); + } + + @Override + public NodeIterable getNodesInsideCircle(float centerX, float centerY, float radius) { + return getNodesInsideCircle(centerX, centerY, radius, 1f); + } + + @Override + public NodeIterable getNodesInsideCircle(float centerX, float centerY, float radius, float nodeScale) { + final float searchExpansion = getScaledNodeSearchExpansion(nodeScale); + return getVisibleGraph().getSpatialIndex().getNodesInArea( + getCircleRect2D(centerX, centerY, radius + searchExpansion), + node -> Intersectionf.testCircleCircle(centerX, centerY, radius, node.x(), node.y(), + node.size() * nodeScale)); + } + + @Override + public NodeIterable getNodesInsideRectangle(Rect2D rect) { + return getNodesInsideRectangle(rect, 1f); + } + + @Override + public NodeIterable getNodesInsideRectangle(Rect2D rect, float nodeScale) { + final float searchExpansion = getScaledNodeSearchExpansion(nodeScale); + final Rect2D searchRect = searchExpansion <= 0f + ? rect + : new Rect2D( + rect.minX - searchExpansion, + rect.minY - searchExpansion, + rect.maxX + searchExpansion, + rect.maxY + searchExpansion + ); + + return getVisibleGraph().getSpatialIndex().getNodesInArea(searchRect, node -> { + final float size = node.size() * nodeScale; + + return Intersectionf.testAarCircle(rect.minX, rect.minY, rect.maxX, rect.maxY, node.x(), node.y(), + size * size); + }); + } + + @Override + public EdgeIterable getEdgesInsideRectangle(Rect2D rect) { + return getVisibleGraph().getSpatialIndex().getEdgesInArea(rect, edge -> { + final Node source = edge.getSource(); + final Node target = edge.getTarget(); + + //TODO: take width into account! + return Intersectionf.testAarLine(rect.minX, rect.minY, rect.maxX, rect.maxY, source.x(), source.y(), + target.x(), target.y()); + }); + } + + @Override + public EdgeIterable getEdgesInsideCircle(float centerX, float centerY, float radius) { + return getVisibleGraph().getSpatialIndex().getEdgesInArea(getCircleRect2D(centerX, centerY, radius), edge -> { + final Node source = edge.getSource(); + final Node target = edge.getTarget(); + + float x0 = source.x(); + float y0 = source.y(); + float x1 = target.x(); + float y1 = target.y(); + + //TODO: take width into account! + return Intersectionf.testLineCircle(y0 - y1, x1 - x0, (x0 - x1) * y0 + (y1 - y0) * x0, centerX, centerY, + radius); + }); + } + + @Override + public Rect2D getGraphBoundaries() { + return getVisibleGraph().getSpatialIndex().getBoundaries(); + } + + private Rect2D getCircleRect2D(float x, float y, float radius) { + return new Rect2D(x - radius, y - radius, x + radius, y + radius); + } + + private float getScaledNodeSearchExpansion(float nodeScale) { + if (nodeScale <= 1f) { + return 0f; + } + + float maxNodeSize = 0f; + for (Node node : getVisibleGraph().getNodes()) { + if (node.size() > maxNodeSize) { + maxNodeSize = node.size(); + } + } + return maxNodeSize * (nodeScale - 1f); + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/ArrayUtils.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/ArrayUtils.java new file mode 100644 index 0000000000..d033298563 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/ArrayUtils.java @@ -0,0 +1,84 @@ +package org.gephi.viz.engine.util; + +import java.util.logging.Level; +import java.util.logging.Logger; +import org.gephi.viz.engine.VizEngine; + +public class ArrayUtils { + + /** + * Inspired in https://stackoverflow.com/questions/32452025/fastest-way-to-create-new-array-with-length-n-and-fill-it-by-repeating-a-given-a + *

              + * You must ensure there is enough length in the array to copy. + * + * @param arr Array object, unsafe to use something that is not an array! + * @param offset Offset in the array to start repeating + * @param elementsCount Elements count from the offset position to repeat + * @param times Times the elements should be repeated after the offset (including existing data) + * @return Next index + */ + public static int repeat(Object arr, int offset, int elementsCount, int times) { + int newLength = times * elementsCount; + + for (long last = elementsCount; last != 0 && last < newLength; last <<= 1) { + System.arraycopy(arr, offset, arr, offset + (int) last, (int) (Math.min(last << 1, newLength) - last)); + } + + return offset + elementsCount * times; + } + + public static float[] ensureCapacity(float[] buffer, int elements) { + final int capacity = buffer.length; + if (capacity < elements) { + int newElementsCapacity = getNextPowerOf2(elements); + + Logger.getLogger(VizEngine.class.getSimpleName()).log( + Level.FINE, "Growing float buffer from " + capacity + " to " + newElementsCapacity + " elements"); + float[] newBuffer = new float[newElementsCapacity]; + + System.arraycopy(buffer, 0, newBuffer, 0, capacity); + return newBuffer; + } else { + return buffer; + } + } + + public static float[] ensureCapacityNoCopy(float[] buffer, int elements) { + final int capacity = buffer.length; + if (capacity < elements) { + int newElementsCapacity = getNextPowerOf2(elements); + + Logger.getLogger(VizEngine.class.getSimpleName()) + .log(Level.FINE, "Growing float buffer from " + capacity + " to " + newElementsCapacity + " elements"); + return new float[newElementsCapacity]; + } else { + return buffer; + } + } + + public static int getNextPowerOf2(int number) { + if (((number - 1) & number) == 0) { + //ex: 8 -> 0b1000; 8-1=7 -> 0b0111; 0b1000&0b0111 == 0 + return number; + } + int power = 0; + while (number > 0) { + number = number >> 1; + power++; + } + return (1 << power); + } + + public static long getNextPowerOf2(long number) { + if (((number - 1) & number) == 0) { + //ex: 8 -> 0b1000; 8-1=7 -> 0b0111; 0b1000&0b0111 == 0 + return number; + } + int power = 0; + while (number > 0) { + number = number >> 1; + power++; + } + return (1L << power); + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/ColorUtils.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/ColorUtils.java new file mode 100644 index 0000000000..0d6ae96c26 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/ColorUtils.java @@ -0,0 +1,10 @@ +package org.gephi.viz.engine.util; + +public class ColorUtils { + + public static boolean isColorDark(float[] rgba) { + // Using the luminance formula to determine if color is dark + double luminance = rgba[0] * .2126 + rgba[1] * .7152 + rgba[2] * .0722; + return luminance < 0.5f; + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/NumberUtils.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/NumberUtils.java new file mode 100644 index 0000000000..45c270fbb7 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/NumberUtils.java @@ -0,0 +1,15 @@ +package org.gephi.viz.engine.util; + +public class NumberUtils { + + public static boolean equalsEpsilon(float a, float b) { + return equalsEpsilon(a, b, EPS); + } + + public static final float EPS = 1e-5f; + + public static boolean equalsEpsilon(float a, float b, float epsilon) { + return a == b || Math.abs(a - b) < epsilon; + } + +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/TimeUtils.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/TimeUtils.java new file mode 100644 index 0000000000..d3a001a8de --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/TimeUtils.java @@ -0,0 +1,12 @@ +package org.gephi.viz.engine.util; + +/** + * + * @author Eduardo Ramos + */ +public class TimeUtils { + + public static long getTimeMillis() { + return System.nanoTime() / 1_000_000; + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/actions/InputActionsProcessor.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/actions/InputActionsProcessor.java new file mode 100644 index 0000000000..e7a42f1081 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/actions/InputActionsProcessor.java @@ -0,0 +1,99 @@ +package org.gephi.viz.engine.util.actions; + +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.NodeIterable; +import org.gephi.graph.api.Rect2D; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.VizEngineModel; +import org.gephi.viz.engine.status.GraphRenderingOptions; +import org.gephi.viz.engine.status.GraphSelection; +import org.joml.Vector2f; + +/** + * @author Eduardo Ramos + */ +public class InputActionsProcessor { + + private final VizEngine engine; + + public InputActionsProcessor(VizEngine engine) { + this.engine = engine; + } + + public void selectNodesWithinRadius(VizEngineModel model, float x, float y, float radius) { + final float nodeScale = model.getRenderingOptions().getNodeScale(); + final NodeIterable iterable = model.getGraphIndex().getNodesInsideCircle(x, y, radius, nodeScale); + selectNodes(model, iterable); + } + + public void selectNodesAndEdgesOnRectangle(VizEngineModel model, final Rect2D rectangle) { + final float nodeScale = model.getRenderingOptions().getNodeScale(); + final NodeIterable iterable = model.getGraphIndex().getNodesInsideRectangle(rectangle, nodeScale); + + selectNodes(model, iterable); + } + + public void selectNodesAndEdgesUnderPosition(VizEngineModel model, Vector2f worldCoords) { + final float nodeScale = model.getRenderingOptions().getNodeScale(); + final NodeIterable iterable = + model.getGraphIndex().getNodesUnderPosition(worldCoords.x, worldCoords.y, nodeScale); + + selectNodes(model, iterable); + } + + public void clearSelection(VizEngineModel model) { + model.getGraphSelection().clearSelectedNodes(); + model.getGraphSelection().clearSelectedEdges(); + } + + private void selectNodes(VizEngineModel model, final NodeIterable nodesIterable) { + final GraphRenderingOptions renderingOptions = model.getRenderingOptions(); + final Graph graph = model.getGraphModel().getGraphVisible(); + final GraphSelection selection = model.getGraphSelection(); + + selection.setSelectedNodes(graph, nodesIterable, renderingOptions.isAutoSelectNeighbours(), + renderingOptions.isShowEdges()); + } + + public void processCameraMoveEvent(int xDiff, int yDiff) { + float zoom = engine.getZoom(); + + engine.translate(xDiff / zoom, -yDiff / zoom); + } + + public void processZoomEvent(double zoomQuantity, int x, int y) { + final float currentZoom = engine.getZoom(); + float newZoom = currentZoom; + + newZoom *= (float) Math.pow(1.1, zoomQuantity); + if (newZoom < 0.001f) { + newZoom = 0.001f; + } + + if (newZoom > 1000f) { + newZoom = 1000f; + } + + //This does directional zoom, to follow where the mouse points: + final Rect2D viewRect = engine.getViewBoundaries(); + final Vector2f center = new Vector2f( + (viewRect.maxX + viewRect.minX) / 2, + (viewRect.maxY + viewRect.minY) / 2 + ); + + final Vector2f diff + = engine.screenCoordinatesToWorldCoordinates(x, y) + .sub(center); + + final Vector2f directionalZoomTranslation = new Vector2f(diff) + .mul(currentZoom / newZoom) + .sub(diff); + + engine.translate(directionalZoomTranslation); + engine.setZoom(newZoom); + } + + public void processCenterOnGraphEvent() { + engine.centerOnGraph(); + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/gl/Buffers.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/gl/Buffers.java new file mode 100644 index 0000000000..7f2fa73c56 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/gl/Buffers.java @@ -0,0 +1,43 @@ +package org.gephi.viz.engine.util.gl; + +import java.nio.Buffer; +import java.nio.ByteBuffer; +import java.nio.CharBuffer; +import java.nio.DoubleBuffer; +import java.nio.FloatBuffer; +import java.nio.IntBuffer; +import java.nio.LongBuffer; +import java.nio.ShortBuffer; + +/** + * + * @author Eduardo Ramos + */ +public final class Buffers { + + public static int bufferElementBytes(Buffer buf) { + if (buf instanceof FloatBuffer) { + return Float.BYTES; + } + if (buf instanceof IntBuffer) { + return Integer.BYTES; + } + if (buf instanceof ShortBuffer) { + return Short.BYTES; + } + if (buf instanceof ByteBuffer) { + return Byte.BYTES; + } + if (buf instanceof DoubleBuffer) { + return Double.BYTES; + } + if (buf instanceof LongBuffer) { + return Long.BYTES; + } + if (buf instanceof CharBuffer) { + return Character.BYTES; + } + + return 1; + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/gl/Constants.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/gl/Constants.java new file mode 100644 index 0000000000..2da7545712 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/gl/Constants.java @@ -0,0 +1,74 @@ +package org.gephi.viz.engine.util.gl; + +/** + * + * @author Eduardo Ramos + */ +public class Constants { + + public static final String ATTRIB_NAME_VERT = "vert"; + public static final String ATTRIB_NAME_POSITION = "position"; + public static final String ATTRIB_NAME_POSITION_TARGET = "targetPosition"; + public static final String ATTRIB_NAME_COLOR = "elementColor"; + public static final String ATTRIB_NAME_COLOR_BIAS = "colorBias"; + public static final String ATTRIB_NAME_COLOR_MULTIPLIER = "colorMultiplier"; + public static final String ATTRIB_NAME_SIZE = "size"; + public static final String ATTRIB_NAME_SOURCE_COLOR = "sourceColor"; + public static final String ATTRIB_NAME_TARGET_COLOR = "targetColor"; + public static final String ATTRIB_NAME_SOURCE_SIZE = "sourceSize"; + public static final String ATTRIB_NAME_TARGET_SIZE = "targetSize"; + public static final String ATTRIB_NAME_SELFLOOP_NODE_SIZE = "nodeSize"; + + public static final int SHADER_VERT_LOCATION = 0; + public static final int SHADER_POSITION_LOCATION = 1; + public static final int SHADER_COLOR_LOCATION = 2; + public static final int SHADER_SIZE_LOCATION = 3; + public static final int SHADER_SOURCE_COLOR_LOCATION = 4; + public static final int SHADER_TARGET_COLOR_LOCATION = 5; + public static final int SHADER_SOURCE_SIZE_LOCATION = 6; + public static final int SHADER_TARGET_SIZE_LOCATION = 7; + public static final int SHADER_POSITION_TARGET_LOCATION = 8; + public static final int SHADER_SELFLOOP_NODE_SIZE_LOCATION = 9; + + public static final String UNIFORM_NAME_MODEL_VIEW_PROJECTION = "mvp"; + public static final String UNIFORM_NAME_EDGE_SCALE = "edgeScale"; + public static final String UNIFORM_NAME_MIN_WEIGHT = "minWeight"; + public static final String UNIFORM_NAME_MAX_WEIGHT = "maxWeight"; + public static final String UNIFORM_NAME_WEIGHT_DIFFERENCE_DIVISOR = "weightDifferenceDivisor"; + public static final String UNIFORM_NAME_EDGE_SCALE_MIN = "edgeScaleMin"; + public static final String UNIFORM_NAME_EDGE_SCALE_MAX = "edgeScaleMax"; + public static final String UNIFORM_NAME_BACKGROUND_COLOR = "backgroundColor"; + public static final String UNIFORM_NAME_COLOR_LIGHTEN_FACTOR = "colorLightenFactor"; + + public static final String UNIFORM_NAME_NODE_SCALE = "nodeScale"; + + public static final String UNIFORM_NAME_GLOBAL_TIME = "globalTime"; + public static final String UNIFORM_NAME_SELECTION_TIME = "selectionTime"; + + public static final String UNIFORM_NAME_BORDER_SIZE = "borderSize"; + public static final String UNIFORM_NAME_EDGE_INSET = "edgeInset"; + public static final String UNIFORM_NAME_DARKEN_FACTOR = "nodeBorderDarkenFactor"; + //Rendering order: + public static final int RENDERING_ORDER_LABELS = 200; + public static final int RENDERING_ORDER_NODES = 100; + public static final int RENDERING_ORDER_EDGES = 50; + + public static final String SHADERS_ROOT = "/org/gephi/viz/engine/shaders/"; + + // Customizable Constants : Might worth considering having a proper static class + private static final float NODE_BORDER_SIZE = 0.16f; + private static final float NODE_BORDER_DARKEN_FACTOR = 0.498f; + private static final float EDGE_INSET = 0.20f; + + public static float getNodeBorderSize() { + return NODE_BORDER_SIZE; + } + + public static float getNodeBorderDarkenFactor() { + return NODE_BORDER_DARKEN_FACTOR; + } + + public static float getEdgeInset() { + return EDGE_INSET; + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/gl/GLConstants.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/gl/GLConstants.java new file mode 100644 index 0000000000..1b32a39c4a --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/gl/GLConstants.java @@ -0,0 +1,10 @@ +package org.gephi.viz.engine.util.gl; + +/** + * + * @author Eduardo Ramos + */ +public class GLConstants { + public static final int INDIRECT_DRAW_COMMAND_INTS_COUNT = 4; + public static final int INDIRECT_DRAW_COMMAND_BYTES = INDIRECT_DRAW_COMMAND_INTS_COUNT * Integer.BYTES; +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/gl/OpenGLOptions.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/gl/OpenGLOptions.java new file mode 100644 index 0000000000..0a2f3ba34f --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/gl/OpenGLOptions.java @@ -0,0 +1,92 @@ +package org.gephi.viz.engine.util.gl; + +import org.gephi.viz.engine.jogl.util.gl.capabilities.GLCapabilitiesSummary; + +/** + * + * @author Eduardo Ramos + */ +public class OpenGLOptions { + + private boolean disableIndirectDrawing = false; + private boolean disableInstancedDrawing = false; + private boolean disableVertexArrayDrawing = false; + private boolean disableVAOS = false; + private boolean debug = false; + private GLCapabilitiesSummary glCapabilitiesSummary = null; + + public OpenGLOptions() { + } + + public boolean isDisableIndirectDrawing() { + return disableIndirectDrawing; + } + + public void setDisableIndirectDrawing(boolean disableIndirectDrawing) { + this.disableIndirectDrawing = disableIndirectDrawing; + } + + public boolean isDisableInstancedDrawing() { + return disableInstancedDrawing; + } + + public void setDisableInstancedDrawing(boolean disableInstancedDrawing) { + this.disableInstancedDrawing = disableInstancedDrawing; + } + + public boolean isDisableVertexArrayDrawing() { + return disableVertexArrayDrawing; + } + + public void setDisableVertexArrayDrawing(boolean disableVertexArrayDrawing) { + this.disableVertexArrayDrawing = disableVertexArrayDrawing; + } + + public boolean isDisableVAOS() { + return disableVAOS; + } + + public void setDisableVAOS(boolean disableVAOS) { + this.disableVAOS = disableVAOS; + } + + public boolean isDebug() { + return debug; + } + + public void setDebug(boolean debug) { + this.debug = debug; + } + + public void setGlCapabilitiesSummary(GLCapabilitiesSummary glCapabilitiesSummary) { + this.glCapabilitiesSummary = glCapabilitiesSummary; + } + + public boolean isVAOSupported() { + return glCapabilitiesSummary.isVAOSupported() && !this.isDisableVAOS(); + } + + public boolean isInstancingSupported() { + return glCapabilitiesSummary.isInstancingSupported(); + } + + public boolean isIndirectDrawSupported() { + return glCapabilitiesSummary.isIndirectDrawSupported(); + } + + public boolean isVendorIntel() { + return glCapabilitiesSummary.isVendorIntel(); + } + + public GLCapabilitiesSummary getGlCapabilitiesSummary() { + return glCapabilitiesSummary; + } + + @Override + public String toString() { + return "OpenGLOptions{" + "disableIndirectDrawing=" + disableIndirectDrawing + ", disableInstancedDrawing=" + + disableInstancedDrawing + ", disableVertexArrayDrawing=" + disableVertexArrayDrawing + ", disableVAOS=" + + disableVAOS + ", debug=" + debug + '}'; + } + +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/structure/EdgesCallback.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/structure/EdgesCallback.java new file mode 100644 index 0000000000..6230eeb873 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/structure/EdgesCallback.java @@ -0,0 +1,231 @@ +package org.gephi.viz.engine.util.structure; + +import static org.gephi.viz.engine.util.ArrayUtils.getNextPowerOf2; + +import java.util.Arrays; +import java.util.BitSet; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.ColumnIndex; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphView; +import org.gephi.graph.api.Rect2D; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.spi.ElementsCallback; +import org.gephi.viz.engine.status.GraphRenderingOptions; +import org.gephi.viz.engine.status.GraphSelection; +import org.gephi.viz.engine.status.GraphSelectionImpl; +import org.gephi.viz.engine.structure.GraphIndex; +import org.gephi.viz.engine.util.text.TextLabelBuilder; + +/** + * + * @author Eduardo Ramos + */ +public class EdgesCallback implements ElementsCallback { + + private int edgeWeightVersion = -1; + private float minWeight = 0f; + private float maxWeight = 1f; + private Edge[] edgesArray = new Edge[0]; + private float[] edgeWeightsArray = new float[0]; + private GraphView graphView; + private Column[] edgeLabelColumns; + private String[] edgeLabelsArray = new String[0]; + private boolean hasSelection = false; + private BitSet selectedBitSet = new BitSet(); + private boolean hasLabels = false; + private boolean hideNonSelectedLabels = false; + private int maxIndex = 0; + private int edgeCount = 0; + private boolean directed = false; + private boolean undirected = false; + private boolean hasSelfLoop = false; + + @Override + public void run(GraphIndex graphIndex, GraphRenderingOptions renderingOptions, Rect2D viewBoundaries) { + if (!renderingOptions.isShowEdges()) { + return; + } + graphIndex.getVisibleEdges(this, renderingOptions, viewBoundaries); + } + + @Override + public void start(Graph graph, GraphRenderingOptions graphRenderingOptions, GraphSelection graphSelection) { + directed = graph.isDirected(); + undirected = graph.isUndirected(); + Arrays.fill(edgesArray, null); + edgesArray = ensureEdgesArraySize(edgesArray, graph.getModel().getMaxEdgeStoreId() + 1); + edgeWeightsArray = ensureEdgeWeightArraySize(edgeWeightsArray, graph.getModel().getMaxEdgeStoreId() + 1); + maxIndex = 0; + edgeCount = 0; + hasSelfLoop = false; + + hasSelection = graphSelection.someNodesOrEdgesSelection(); + if (hasSelection) { + BitSet sourceBitSet = ((GraphSelectionImpl) graphSelection).getEdges(); + selectedBitSet.clear(); + selectedBitSet.or(sourceBitSet); + } + + hideNonSelectedLabels = graphRenderingOptions.isHideNonSelectedEdgeLabels(); + hasLabels = graphRenderingOptions.isShowEdgeLabels() && !(hideNonSelectedLabels && !hasSelection); + if (hasLabels) { + edgeLabelsArray = ensureEdgesLabelsArraySize(edgeLabelsArray, graph.getModel().getMaxEdgeStoreId() + 1); + graphView = graph.getView(); + edgeLabelColumns = graphRenderingOptions.getEdgeLabelColumns(); + } + } + + @Override + public void accept(Edge edge) { + int storeId = edge.getStoreId(); + if (storeId > maxIndex) { + maxIndex = storeId; + } + edgesArray[storeId] = edge; + + if (!hasSelfLoop && edge.isSelfLoop()) { + hasSelfLoop = true; + } + + if (hasLabels && edge.getTextProperties().isVisible() && (!hideNonSelectedLabels || isSelected(storeId))) { + edgeLabelsArray[storeId] = TextLabelBuilder.buildText(edge, graphView, edgeLabelColumns); + } else if (hasLabels) { + edgeLabelsArray[storeId] = null; + } + } + + @Override + public void end(Graph graph) { + // Refresh min/max edge weight (if needed) + Column weightCol = graph.getModel().getEdgeTable().getColumn(3); //Weight column + ColumnIndex edgeWeightIndex = graph.getModel().getEdgeIndex().getColumnIndex(weightCol); + if (edgeWeightIndex.getVersion() != edgeWeightVersion) { + edgeWeightVersion = edgeWeightIndex.getVersion(); + Number minValue = edgeWeightIndex.getMinValue(); + Number maxValue = edgeWeightIndex.getMaxValue(); + minWeight = minValue != null ? minValue.floatValue() : 0f; + maxWeight = maxValue != null ? maxValue.floatValue() : 1f; + } + + // Get actual edge weights + // And count non-null edges + for (int i = 0; i <= maxIndex; i++) { + Edge edge = edgesArray[i]; + if (edge != null) { + edgeCount++; + double weight = edge.getWeight(graph.getView()); + edgeWeightsArray[i] = (float) weight; + } + } + } + + @Override + public void reset() { + edgesArray = new Edge[0]; + edgeWeightsArray = new float[0]; + maxIndex = 0; + edgeCount = 0; + directed = false; + undirected = false; + hasSelfLoop = false; + hasSelection = false; + hideNonSelectedLabels = false; + selectedBitSet = new BitSet(); + edgeLabelColumns = null; + edgeLabelsArray = new String[0]; + hasLabels = false; + } + + public Edge[] getEdgesArray() { + return edgesArray; + } + + public float[] getEdgeWeightsArray() { + return edgeWeightsArray; + } + + public String[] getEdgeLabelsArray() { + return edgeLabelsArray; + } + + public int getMaxIndex() { + return maxIndex; + } + + public int getCount() { + return edgeCount; + } + + public float getMinWeight() { + return minWeight; + } + + public float getMaxWeight() { + return maxWeight; + } + + public boolean isDirected() { + return directed; + } + + public boolean isUndirected() { + return undirected; + } + + public boolean hasSelfLoop() { + return hasSelfLoop; + } + + public boolean isSelected(int edgeStoreId) { + return hasSelection && selectedBitSet.get(edgeStoreId); + } + + public boolean hasSelection() { + return hasSelection; + } + + protected Edge[] ensureEdgesArraySize(Edge[] array, int size) { + if (size > array.length) { + int newSize = getNextPowerOf2(size); + Logger.getLogger(VizEngine.class.getSimpleName()).log( + Level.FINE, "Growing edge vector from " + array.length + " to " + newSize + " elements"); + + final Edge[] newVector = new Edge[newSize]; + System.arraycopy(array, 0, newVector, 0, array.length); + + return newVector; + } else { + return array; + } + } + + protected float[] ensureEdgeWeightArraySize(float[] array, int size) { + if (size > array.length) { + int newSize = getNextPowerOf2(size); + + final float[] newVector = new float[newSize]; + System.arraycopy(array, 0, newVector, 0, array.length); + + return newVector; + } else { + return array; + } + } + + protected String[] ensureEdgesLabelsArraySize(String[] array, int size) { + if (size > array.length) { + int newSize = getNextPowerOf2(size); + + final String[] newVector = new String[newSize]; + System.arraycopy(array, 0, newVector, 0, array.length); + + return newVector; + } else { + return array; + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/structure/NodesCallback.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/structure/NodesCallback.java new file mode 100644 index 0000000000..bc4a225479 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/structure/NodesCallback.java @@ -0,0 +1,220 @@ +package org.gephi.viz.engine.util.structure; + +import static org.gephi.viz.engine.util.ArrayUtils.getNextPowerOf2; + +import java.util.Arrays; +import java.util.BitSet; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphView; +import org.gephi.graph.api.Node; +import org.gephi.graph.api.Rect2D; +import org.gephi.viz.engine.spi.ElementsCallback; +import org.gephi.viz.engine.status.GraphRenderingOptions; +import org.gephi.viz.engine.status.GraphSelection; +import org.gephi.viz.engine.status.GraphSelectionImpl; +import org.gephi.viz.engine.structure.GraphIndex; +import org.gephi.viz.engine.util.text.TextLabelBuilder; + +/** + * + * @author Eduardo Ramos + */ +public class NodesCallback implements ElementsCallback { + + private Node[] nodesArray = new Node[0]; + private GraphView graphView; + private Column[] nodeLabelColumns; + private String[] nodesLabelsArray = new String[0]; + private BitSet selectedBitSet = new BitSet(); + private BitSet selectedWithNeighborsBitSet = new BitSet(); + private boolean hasSelection = false; + private int maxIndex = 0; + private float maxNodeSize = 0f; + private int nodeCount = 0; + private boolean hasLabels = false; + private boolean hideNonSelectedLabels = false; + private float minX = Float.POSITIVE_INFINITY; + private float minY = Float.POSITIVE_INFINITY; + private float maxX = Float.NEGATIVE_INFINITY; + private float maxY = Float.NEGATIVE_INFINITY; + + @Override + public void run(GraphIndex graphIndex, GraphRenderingOptions renderingOptions, Rect2D viewBoundaries) { + if (!renderingOptions.isShowNodes()) { + return; + } + graphIndex.getVisibleNodes(this, renderingOptions, viewBoundaries); + } + + @Override + public void start(Graph graph, GraphRenderingOptions graphRenderingOptions, GraphSelection graphSelection) { + Arrays.fill(nodesArray, null); + nodesArray = ensureNodesArraySize(nodesArray, graph.getModel().getMaxNodeStoreId() + 1); + maxIndex = 0; + maxNodeSize = 0f; + nodeCount = 0; + minX = Float.POSITIVE_INFINITY; + minY = Float.POSITIVE_INFINITY; + maxX = Float.NEGATIVE_INFINITY; + maxY = Float.NEGATIVE_INFINITY; + + hasSelection = graphSelection.someNodesOrEdgesSelection(); + if (hasSelection) { + selectedBitSet.clear(); + selectedBitSet.or(((GraphSelectionImpl) graphSelection).getNodes()); + + selectedWithNeighborsBitSet.clear(); + selectedWithNeighborsBitSet.or(((GraphSelectionImpl) graphSelection).getNodesWithNeighbours()); + } + + hideNonSelectedLabels = graphRenderingOptions.isHideNonSelectedNodeLabels(); + hasLabels = graphRenderingOptions.isShowNodeLabels() && !(hideNonSelectedLabels && !hasSelection); + if (hasLabels) { + nodesLabelsArray = ensureNodesLabelsArraySize(nodesLabelsArray, graph.getModel().getMaxNodeStoreId() + 1); + graphView = graph.getView(); + nodeLabelColumns = graphRenderingOptions.getNodeLabelColumns(); + } + } + + @Override + public void accept(Node node) { + int storeId = node.getStoreId(); + if (storeId > maxIndex) { + maxIndex = storeId; + } + float size = node.size(); + if (size > maxNodeSize) { + maxNodeSize = size; + } + nodesArray[storeId] = node; + + if (hasLabels && node.getTextProperties().isVisible() && (!hideNonSelectedLabels || isSelected(storeId))) { + nodesLabelsArray[storeId] = TextLabelBuilder.buildText(node, graphView, nodeLabelColumns); + } else if (hasLabels) { + nodesLabelsArray[storeId] = null; + } + } + + @Override + public void end(Graph graph) { + // Count non-null nodes and track bounds + // This can't be done in accept as nodes can be duplicated and accept is called via multiple threads (parallel stream) + nodeCount = 0; + for (int i = 0; i <= maxIndex; i++) { + Node node = nodesArray[i]; + if (node != null) { + nodeCount++; + // Track min/max positions for grid bounds + float x = node.x(); + float y = node.y(); + if (x < minX) { + minX = x; + } + if (x > maxX) { + maxX = x; + } + if (y < minY) { + minY = y; + } + if (y > maxY) { + maxY = y; + } + } + } + } + + @Override + public void reset() { + nodesArray = new Node[0]; + maxIndex = 0; + maxNodeSize = 0f; + nodeCount = 0; + selectedBitSet = new BitSet(); + selectedWithNeighborsBitSet = new BitSet(); + hasSelection = false; + nodeLabelColumns = null; + nodesLabelsArray = new String[0]; + hasLabels = false; + hideNonSelectedLabels = false; + minX = Float.POSITIVE_INFINITY; + minY = Float.POSITIVE_INFINITY; + maxX = Float.NEGATIVE_INFINITY; + maxY = Float.NEGATIVE_INFINITY; + } + + public Node[] getNodesArray() { + return nodesArray; + } + + public int getMaxIndex() { + return maxIndex; + } + + public float getMaxNodeSize() { + return maxNodeSize; + } + + public int getCount() { + return nodeCount; + } + + public boolean isSelected(int nodeStoreId) { + return isSelected(nodeStoreId, false); + } + + public boolean isSelected(int nodeStoreId, boolean withNeighbours) { + return hasSelection && withNeighbours ? selectedWithNeighborsBitSet.get(nodeStoreId) : + selectedBitSet.get(nodeStoreId); + } + + public boolean hasSelection() { + return hasSelection; + } + + public String[] getNodesLabelsArray() { + return nodesLabelsArray; + } + + public float getMinX() { + return minX; + } + + public float getMinY() { + return minY; + } + + public float getMaxX() { + return maxX; + } + + public float getMaxY() { + return maxY; + } + + protected Node[] ensureNodesArraySize(Node[] array, int size) { + if (size > array.length) { + int newSize = getNextPowerOf2(size); + + final Node[] newVector = new Node[newSize]; + System.arraycopy(array, 0, newVector, 0, array.length); + + return newVector; + } else { + return array; + } + } + + protected String[] ensureNodesLabelsArraySize(String[] array, int size) { + if (size > array.length) { + int newSize = getNextPowerOf2(size); + + final String[] newVector = new String[newSize]; + System.arraycopy(array, 0, newVector, 0, array.length); + + return newVector; + } else { + return array; + } + } +} diff --git a/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/text/TextLabelBuilder.java b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/text/TextLabelBuilder.java new file mode 100644 index 0000000000..5d6215a6b4 --- /dev/null +++ b/modules/VisualizationEngine/src/main/java/org/gephi/viz/engine/util/text/TextLabelBuilder.java @@ -0,0 +1,53 @@ +package org.gephi.viz.engine.util.text; + +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Element; +import org.gephi.graph.api.GraphView; + +public class TextLabelBuilder { + + public static String buildText(Element element, GraphView view, Column[] columns) { + if (columns.length == 0) { + return null; + } else if (columns.length == 1) { + return buildText(element, view, columns[0]); + } else { + StringBuilder sb = new StringBuilder(); + int i = 0; + for (Column c : columns) { + String str = buildText(element, view, c); + if (str == null) { + continue; + } + if (i++ > 0) { + sb.append(" - "); + } + sb.append(str); + } + String finalStr = sb.toString(); + if (finalStr.isEmpty()) { + return null; + } else { + return finalStr; + } + } + } + + public static String buildText(Element element, GraphView view, Column column) { + Object val = element.getAttribute(column, view); + if (val == null) { + return null; + } + if (column.isArray()) { + return AttributeUtils.printArray(val); + } else { + String str = val.toString(); + if (str.isEmpty()) { + return null; + } else { + return str; + } + } + } +} diff --git a/modules/VisualizationEngine/src/main/nbm/manifest.mf b/modules/VisualizationEngine/src/main/nbm/manifest.mf new file mode 100644 index 0000000000..f41be1cad0 --- /dev/null +++ b/modules/VisualizationEngine/src/main/nbm/manifest.mf @@ -0,0 +1,6 @@ +Manifest-Version: 1.0 +AutoUpdate-Essential-Module: true +OpenIDE-Module-Localizing-Bundle: org/gephi/viz/engine/Bundle.properties +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi UI +OpenIDE-Module-Name: Visualization Engine diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/Bundle.properties b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/Bundle.properties new file mode 100644 index 0000000000..0769f2658e --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/Bundle.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=OpenGL Visualization Engine +OpenIDE-Module-Short-Description=OpenGL Visualization Engine \ No newline at end of file diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/Bundle_ar.properties b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/Bundle_fr.properties b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/Bundle_fr.properties new file mode 100644 index 0000000000..a3013fe2ac --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/Bundle_fr.properties @@ -0,0 +1,2 @@ +OpenIDE-Module-Long-Description=Moteur de visualisation OpenGL +OpenIDE-Module-Short-Description=Moteur de visualisation OpenGL diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/Bundle_th.properties b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/common.animation.glsl b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/common.animation.glsl new file mode 100644 index 0000000000..e52225c394 --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/common.animation.glsl @@ -0,0 +1,6 @@ +uniform float globalTime; +uniform float selectionTime; + +#define _animationSlope(x) (1.-exp(-9.*x)) +float animationTime = globalTime-selectionTime; +float animationCurve = _animationSlope(animationTime);// Going from 0. to 1. https://graphtoy.com/?f1(x,t)=1.-exp(-5.*x)&v1=true&f2(x,t)=&v2=false&f3(x,t)=&v3=false&f4(x,t)=&v4=false&f5(x,t)=&v5=false&f6(x,t)=&v6=false&grid=1&coords=0,0,2.3741360268016223 diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/common.frag.glsl b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/common.frag.glsl new file mode 100644 index 0000000000..79c50924a6 --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/common.frag.glsl @@ -0,0 +1,7 @@ +#version 330 +#define PI 3.14159265358 +#define TAU 6.28318530718 + +#ifdef GL_ES +precision lowp float; +#endif diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/common.vert.glsl b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/common.vert.glsl new file mode 100644 index 0000000000..d08b7276f8 --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/common.vert.glsl @@ -0,0 +1,3 @@ +#version 330 +#define PI 3.14159265358 +#define TAU 6.28318530718 \ No newline at end of file diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/common.edge.directed.vert.glsl b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/common.edge.directed.vert.glsl new file mode 100644 index 0000000000..2d895d5564 --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/common.edge.directed.vert.glsl @@ -0,0 +1 @@ +#define ARROW_HEIGHT 1.1 diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/common.edge.struct.glsl b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/common.edge.struct.glsl new file mode 100644 index 0000000000..b90fd21eba --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/common.edge.struct.glsl @@ -0,0 +1,3 @@ +struct VertexData { + vec4 color; +}; diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/common.edge.vert.glsl b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/common.edge.vert.glsl new file mode 100644 index 0000000000..b8cee8b555 --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/common.edge.vert.glsl @@ -0,0 +1,10 @@ +float edge_thickness(float edgeScaleMin, +float edgeScaleMax, +float size, +float minWeight, +float weightDifferenceDivisor) { + if (edgeScaleMin == edgeScaleMax) { + return size * edgeScaleMin; + } + return mix(edgeScaleMin, edgeScaleMax, (size - minWeight) / weightDifferenceDivisor); +} diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/common.edge.vert.in.glsl b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/common.edge.vert.in.glsl new file mode 100644 index 0000000000..1af8783581 --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/common.edge.vert.in.glsl @@ -0,0 +1,7 @@ +in vec3 vert; +in vec2 position; +in vec2 targetPosition; +in float size;//It's the weight +in vec4 elementColor; +in float sourceSize; +in float targetSize; diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/common.edge.vert.uniform.glsl b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/common.edge.vert.uniform.glsl new file mode 100644 index 0000000000..ce3251233f --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/common.edge.vert.uniform.glsl @@ -0,0 +1,8 @@ +uniform mat4 mvp; + +uniform float minWeight; +uniform float weightDifferenceDivisor; +uniform float edgeScaleMin; +uniform float edgeScaleMax; +uniform float nodeScale; +uniform float edgeInset; diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/edge-line-directed.frag b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/edge-line-directed.frag new file mode 100644 index 0000000000..39f8ad96eb --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/edge-line-directed.frag @@ -0,0 +1,10 @@ +//#include "../common.frag.glsl" + +//#include "common.edge.struct.glsl" +flat in VertexData vertexData; + +out vec4 fragColor; + +void main(void) { + fragColor = vertexData.color; +} diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/edge-line-directed.vert b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/edge-line-directed.vert new file mode 100644 index 0000000000..2b9c02ee13 --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/edge-line-directed.vert @@ -0,0 +1,34 @@ +//#include "../common.vert.glsl" + +//#include "common.edge.vert.glsl" + +//#include "common.edge.vert.uniform.glsl" + +//#include "common.edge.vert.in.glsl" + +//#include "common.edge.directed.vert.glsl" + +//#include "common.edge.struct.glsl" +flat out VertexData vertexData; + +void main() { + float thickness = edge_thickness(edgeScaleMin, edgeScaleMax, size, minWeight, weightDifferenceDivisor); + + vec2 direction = targetPosition - position; + vec2 directionNormalized = normalize(direction); + + vec2 sideVector = vec2(-directionNormalized.y, directionNormalized.x) * thickness * 0.5; + vec2 arrowHeight = directionNormalized * thickness * ARROW_HEIGHT * 2.0; + + vec2 lineStart = directionNormalized * (sourceSize * nodeScale * (1.0 - edgeInset)); + vec2 lineLength = (direction - lineStart) - directionNormalized * (targetSize * nodeScale); + + vec2 edgeVert = lineStart + lineLength * vert.x + sideVector * vert.y + arrowHeight * vert.z; + + gl_Position = mvp * vec4(edgeVert + position, 0.0, 1.0); + + //bgra -> rgba because Java color is argb big-endian + vec4 color = elementColor.bgra / 255.0; + + vertexData.color = color; +} diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/edge-line-directed_with_selection_selected.vert b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/edge-line-directed_with_selection_selected.vert new file mode 100644 index 0000000000..babcdbe784 --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/edge-line-directed_with_selection_selected.vert @@ -0,0 +1,38 @@ +//#include "../common.vert.glsl" + +//#include "common.edge.vert.glsl" + +//#include "common.edge.vert.uniform.glsl" + +//#include "../common.animation.glsl" + +//#include "common.edge.vert.in.glsl" + +//#include "common.edge.directed.vert.glsl" + +//#include "common.edge.struct.glsl" +flat out VertexData vertexData; + +void main() { + float thickness = edge_thickness(edgeScaleMin, edgeScaleMax, size, minWeight, weightDifferenceDivisor); + + vec2 direction = targetPosition - position; + vec2 directionNormalized = normalize(direction); + + vec2 sideVector = vec2(-directionNormalized.y, directionNormalized.x) * thickness * 0.5; + vec2 arrowHeight = directionNormalized * thickness * ARROW_HEIGHT * 2.0; + + vec2 lineStart = directionNormalized * (sourceSize * nodeScale * (1.0 - edgeInset)); + vec2 lineLength = (direction - lineStart) - directionNormalized * (targetSize * nodeScale); + + vec2 edgeVert = lineStart + lineLength * vert.x + sideVector * vert.y + arrowHeight * vert.z; + + gl_Position = mvp * vec4(edgeVert + position, 0.0, 1.0); + + //bgra -> rgba because Java color is argb big-endian + vec4 color = elementColor.bgra / 255.0; + + color = mix(color, color * 1.1, animationCurve); + + vertexData.color = color; +} diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/edge-line-directed_with_selection_unselected.vert b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/edge-line-directed_with_selection_unselected.vert new file mode 100644 index 0000000000..908c70f20b --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/edge-line-directed_with_selection_unselected.vert @@ -0,0 +1,41 @@ +//#include "../common.vert.glsl" + +//#include "common.edge.vert.glsl" + +//#include "common.edge.vert.uniform.glsl" +uniform vec4 backgroundColor; +uniform float colorLightenFactor; + +//#include "../common.animation.glsl" + +//#include "common.edge.vert.in.glsl" + +//#include "common.edge.directed.vert.glsl" + + +//#include "common.edge.struct.glsl" +flat out VertexData vertexData; + +void main() { + float thickness = edge_thickness(edgeScaleMin, edgeScaleMax, size, minWeight, weightDifferenceDivisor); + + vec2 direction = targetPosition - position; + vec2 directionNormalized = normalize(direction); + + vec2 sideVector = vec2(-directionNormalized.y, directionNormalized.x) * thickness * 0.5; + vec2 arrowHeight = directionNormalized * thickness * ARROW_HEIGHT * 2.0; + + vec2 lineStart = directionNormalized * (sourceSize * nodeScale * (1.0 - edgeInset)); + vec2 lineLength = (direction - lineStart) - directionNormalized * (targetSize * nodeScale); + + vec2 edgeVert = lineStart + lineLength * vert.x + sideVector * vert.y + arrowHeight * vert.z; + + gl_Position = mvp * vec4(edgeVert + position, 0.0, 1.0); + + //bgra -> rgba because Java color is argb big-endian + vec4 color = elementColor.bgra / 255.0; + + color.rgb = mix(color.rgb, backgroundColor.rgb, colorLightenFactor * animationCurve); + + vertexData.color = color; +} diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/edge-line-undirected.frag b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/edge-line-undirected.frag new file mode 100644 index 0000000000..39f8ad96eb --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/edge-line-undirected.frag @@ -0,0 +1,10 @@ +//#include "../common.frag.glsl" + +//#include "common.edge.struct.glsl" +flat in VertexData vertexData; + +out vec4 fragColor; + +void main(void) { + fragColor = vertexData.color; +} diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/edge-line-undirected.vert b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/edge-line-undirected.vert new file mode 100644 index 0000000000..f1917e23f6 --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/edge-line-undirected.vert @@ -0,0 +1,31 @@ +//#include "../common.vert.glsl" + +//#include "common.edge.vert.glsl" + +//#include "common.edge.vert.uniform.glsl" + +//#include "common.edge.vert.in.glsl" + +//#include "common.edge.struct.glsl" +flat out VertexData vertexData; + +void main() { + float thickness = edge_thickness(edgeScaleMin, edgeScaleMax, size, minWeight, weightDifferenceDivisor); + + vec2 direction = targetPosition - position; + vec2 directionNormalized = normalize(direction); + + vec2 sideVector = vec2(-directionNormalized.y, directionNormalized.x) * thickness * 0.5; + + vec2 lineStart = directionNormalized * (sourceSize * nodeScale); + vec2 lineLength = (direction - lineStart) - directionNormalized * (targetSize * nodeScale); + + vec2 edgeVert = lineStart + lineLength * vert.x + sideVector * vert.y; + + gl_Position = mvp * vec4(edgeVert + position, 0.0, 1.0); + + //bgra -> rgba because Java color is argb big-endian + vec4 color = elementColor.bgra / 255.0; + + vertexData.color = color; +} diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/edge-line-undirected_with_selection_selected.vert b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/edge-line-undirected_with_selection_selected.vert new file mode 100644 index 0000000000..2ed24ba9ed --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/edge-line-undirected_with_selection_selected.vert @@ -0,0 +1,35 @@ +//#include "../common.vert.glsl" + +//#include "common.edge.vert.glsl" + +//#include "common.edge.vert.uniform.glsl" + +//#include "../common.animation.glsl" + +//#include "common.edge.vert.in.glsl" + +//#include "common.edge.struct.glsl" +flat out VertexData vertexData; + +void main() { + float thickness =edge_thickness(edgeScaleMin, edgeScaleMax, size, minWeight, weightDifferenceDivisor); + + vec2 direction = targetPosition - position; + vec2 directionNormalized = normalize(direction); + + vec2 sideVector = vec2(-directionNormalized.y, directionNormalized.x) * thickness * 0.5; + + vec2 lineStart = directionNormalized * (sourceSize * nodeScale); + vec2 lineLength = (direction - lineStart) - directionNormalized * (targetSize * nodeScale); + + vec2 edgeVert = lineStart + lineLength * vert.x + sideVector * vert.y; + + gl_Position = mvp * vec4(edgeVert + position, 0.0, 1.0); + + //bgra -> rgba because Java color is argb big-endian + vec4 color = elementColor.bgra / 255.0; + + color = mix(color, color * 1.1, animationCurve); + + vertexData.color = color; +} diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/edge-line-undirected_with_selection_unselected.vert b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/edge-line-undirected_with_selection_unselected.vert new file mode 100644 index 0000000000..90228c76b4 --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/edge-line-undirected_with_selection_unselected.vert @@ -0,0 +1,37 @@ +//#include "../common.vert.glsl" + +//#include "common.edge.vert.glsl" + +//#include "common.edge.vert.uniform.glsl" +uniform vec4 backgroundColor; +uniform float colorLightenFactor; + +//#include "../common.animation.glsl" + +//#include "common.edge.vert.in.glsl" + +//#include "common.edge.struct.glsl" +flat out VertexData vertexData; + +void main() { + float thickness = edge_thickness(edgeScaleMin, edgeScaleMax, size, minWeight, weightDifferenceDivisor); + + vec2 direction = targetPosition - position; + vec2 directionNormalized = normalize(direction); + + vec2 sideVector = vec2(-directionNormalized.y, directionNormalized.x) * thickness * 0.5; + + vec2 lineStart = directionNormalized * (sourceSize * nodeScale); + vec2 lineLength = (direction - lineStart) - directionNormalized * (targetSize * nodeScale); + + vec2 edgeVert = lineStart + lineLength * vert.x + sideVector * vert.y; + + gl_Position = mvp * vec4(edgeVert + position, 0.0, 1.0); + + //bgra -> rgba because Java color is argb big-endian + vec4 color = elementColor.bgra / 255.0; + + color.rgb = mix(color.rgb, backgroundColor.rgb, colorLightenFactor * animationCurve); + + vertexData.color = color; +} diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/selfloop.frag b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/selfloop.frag new file mode 100644 index 0000000000..952d28d8cb --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/selfloop.frag @@ -0,0 +1,21 @@ +//#include "../common.frag.glsl" + +in vec2 vLocal; +struct VertexData { + vec4 color; + float innerRadiusSq; // squared inner radius for ring cutoff +}; +flat in VertexData vertexData; +out vec4 fragColor; + +void main(void) { + float distSq = dot(vLocal, vLocal); + + // Discard pixels inside the inner radius (creates the ring/stroke effect) + if (distSq <= vertexData.innerRadiusSq) discard; + + // Discard pixels outside the outer radius (circle edge) + if (distSq > 1.0) discard; + + fragColor = vertexData.color; +} diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/selfloop.vert b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/selfloop.vert new file mode 100644 index 0000000000..f2a506e8f8 --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/selfloop.vert @@ -0,0 +1,47 @@ +//#include "../common.vert.glsl" + +//#include "common.edge.vert.glsl" + +in vec2 vert; +in vec2 position; +in vec4 elementColor; +in float size; +in float nodeSize; + +uniform mat4 mvp; +uniform float minWeight; +uniform float weightDifferenceDivisor; +uniform float edgeScaleMin; +uniform float edgeScaleMax; +uniform float nodeScale; + +struct VertexData { + vec4 color; + float innerRadiusSq; // squared inner radius for ring cutoff +}; +flat out VertexData vertexData; +out vec2 vLocal; + +// Multiplier to make self-loop stroke visually match regular edge thickness +const float STROKE_MULTIPLIER = 1.3; + +void main() { + vLocal = vert; + + float thickness = edge_thickness(edgeScaleMin, edgeScaleMax, size, minWeight, weightDifferenceDivisor); + float strokeWidth = thickness * STROKE_MULTIPLIER; + float scaledNodeSize = nodeSize * nodeScale; + float loopRadius = scaledNodeSize * 0.5 + strokeWidth * 0.33; + vec2 instancePosition = loopRadius * vert + position + vec2(loopRadius); + gl_Position = mvp * vec4(instancePosition, 0.0, 1.0); + + // Compute inner radius for ring effect (in normalized space) + // strokeWidth is the stroke width, loopRadius is the outer radius + float innerRadius = max(0.0, 1.0 - strokeWidth / loopRadius); + vertexData.innerRadiusSq = innerRadius * innerRadius; + + //bgra -> rgba because Java color is argb big-endian + vec4 color = elementColor.bgra / 255.0; + + vertexData.color = color; +} diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/selfloop_selected.frag b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/selfloop_selected.frag new file mode 100644 index 0000000000..952d28d8cb --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/selfloop_selected.frag @@ -0,0 +1,21 @@ +//#include "../common.frag.glsl" + +in vec2 vLocal; +struct VertexData { + vec4 color; + float innerRadiusSq; // squared inner radius for ring cutoff +}; +flat in VertexData vertexData; +out vec4 fragColor; + +void main(void) { + float distSq = dot(vLocal, vLocal); + + // Discard pixels inside the inner radius (creates the ring/stroke effect) + if (distSq <= vertexData.innerRadiusSq) discard; + + // Discard pixels outside the outer radius (circle edge) + if (distSq > 1.0) discard; + + fragColor = vertexData.color; +} diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/selfloop_selected.vert b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/selfloop_selected.vert new file mode 100644 index 0000000000..214e6a3f6f --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/selfloop_selected.vert @@ -0,0 +1,49 @@ +//#include "../common.vert.glsl" + +//#include "common.edge.vert.glsl" + +in vec2 vert; +in vec2 position; +in vec4 elementColor; +in float size; +in float nodeSize; + +//#include "../common.animation.glsl" + +uniform mat4 mvp; +uniform float colorLightenFactor; +uniform float minWeight; +uniform float weightDifferenceDivisor; +uniform float edgeScaleMin; +uniform float edgeScaleMax; +uniform float nodeScale; + +struct VertexData { + vec4 color; + float innerRadiusSq; // squared inner radius for ring cutoff +}; +flat out VertexData vertexData; +out vec2 vLocal; + +// Multiplier to make self-loop stroke visually match regular edge thickness +const float STROKE_MULTIPLIER = 1.3; + +void main() { + vLocal = vert; + + float thickness = edge_thickness(edgeScaleMin, edgeScaleMax, size, minWeight, weightDifferenceDivisor); + float strokeWidth = thickness * STROKE_MULTIPLIER; + float scaledNodeSize = nodeSize * nodeScale; + float loopRadius = scaledNodeSize * 0.5 + strokeWidth * 0.33; + vec2 instancePosition = loopRadius * vert + position + vec2(loopRadius); + gl_Position = mvp * vec4(instancePosition, 0.0, 1.0); + + // Compute inner radius for ring effect (in normalized space) + float innerRadius = max(0.0, 1.0 - strokeWidth / loopRadius); + vertexData.innerRadiusSq = innerRadius * innerRadius; + + //bgra -> rgba because Java color is argb big-endian + vec4 color = elementColor.bgra / 255.0; + + vertexData.color = color; +} diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/selfloop_unselected.frag b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/selfloop_unselected.frag new file mode 100644 index 0000000000..952d28d8cb --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/selfloop_unselected.frag @@ -0,0 +1,21 @@ +//#include "../common.frag.glsl" + +in vec2 vLocal; +struct VertexData { + vec4 color; + float innerRadiusSq; // squared inner radius for ring cutoff +}; +flat in VertexData vertexData; +out vec4 fragColor; + +void main(void) { + float distSq = dot(vLocal, vLocal); + + // Discard pixels inside the inner radius (creates the ring/stroke effect) + if (distSq <= vertexData.innerRadiusSq) discard; + + // Discard pixels outside the outer radius (circle edge) + if (distSq > 1.0) discard; + + fragColor = vertexData.color; +} diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/selfloop_unselected.vert b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/selfloop_unselected.vert new file mode 100644 index 0000000000..4e93da6015 --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/edge/selfloop_unselected.vert @@ -0,0 +1,51 @@ +//#include "../common.vert.glsl" + +//#include "common.edge.vert.glsl" + +in vec2 vert; +in vec2 position; +in vec4 elementColor; +in float size; +in float nodeSize; + +//#include "../common.animation.glsl" + +uniform mat4 mvp; +uniform vec4 backgroundColor; +uniform float colorLightenFactor; +uniform float minWeight; +uniform float weightDifferenceDivisor; +uniform float edgeScaleMin; +uniform float edgeScaleMax; +uniform float nodeScale; + +struct VertexData { + vec4 color; + float innerRadiusSq; // squared inner radius for ring cutoff +}; +flat out VertexData vertexData; +out vec2 vLocal; + +// Multiplier to make self-loop stroke visually match regular edge thickness +const float STROKE_MULTIPLIER = 1.3; + +void main() { + vLocal = vert; + + float thickness = edge_thickness(edgeScaleMin, edgeScaleMax, size, minWeight, weightDifferenceDivisor); + float strokeWidth = thickness * STROKE_MULTIPLIER; + float scaledNodeSize = nodeSize * nodeScale; + float loopRadius = scaledNodeSize * 0.5 + strokeWidth * 0.33; + vec2 instancePosition = loopRadius * vert + position + vec2(loopRadius); + gl_Position = mvp * vec4(instancePosition, 0.0, 1.0); + + // Compute inner radius for ring effect (in normalized space) + float innerRadius = max(0.0, 1.0 - strokeWidth / loopRadius); + vertexData.innerRadiusSq = innerRadius * innerRadius; + + //bgra -> rgba because Java color is argb big-endian + vec4 color = elementColor.bgra / 255.0; + + color.rgb = mix(color.rgb, backgroundColor.rgb, colorLightenFactor * animationCurve); + vertexData.color = color; +} diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/common.node.frag.glsl b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/common.node.frag.glsl new file mode 100644 index 0000000000..265056cb05 --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/common.node.frag.glsl @@ -0,0 +1,7 @@ +void borderColor(inout vec4 color, vec2 position) { + float r2 = dot(position, position); + float t = 1.0 - borderSize;// inner edge of border + float t2 = t * t; + + color.rgb = r2 < t2 ? color.rgb : color.rgb * nodeBorderDarkenFactor; +} \ No newline at end of file diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/common.node.frag.uniform.glsl b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/common.node.frag.uniform.glsl new file mode 100644 index 0000000000..ee549a9c08 --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/common.node.frag.uniform.glsl @@ -0,0 +1,2 @@ +uniform float borderSize; +uniform float nodeBorderDarkenFactor; \ No newline at end of file diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/common.node.struct.glsl b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/common.node.struct.glsl new file mode 100644 index 0000000000..b90fd21eba --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/common.node.struct.glsl @@ -0,0 +1,3 @@ +struct VertexData { + vec4 color; +}; diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/common.node.vert.glsl b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/common.node.vert.glsl new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/common.node.vert.glsl @@ -0,0 +1 @@ + diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/common.node.vert.in.glsl b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/common.node.vert.in.glsl new file mode 100644 index 0000000000..1f4d9532d5 --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/common.node.vert.in.glsl @@ -0,0 +1,4 @@ +in vec2 vert; +in vec2 position; +in vec4 elementColor; +in float size; diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/common.node.vert.uniform.glsl b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/common.node.vert.uniform.glsl new file mode 100644 index 0000000000..b40b6ac350 --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/common.node.vert.uniform.glsl @@ -0,0 +1 @@ +uniform mat4 mvp; diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/node.frag b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/node.frag new file mode 100644 index 0000000000..7a11f5eeef --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/node.frag @@ -0,0 +1,18 @@ +//#include "../common.frag.glsl" + +//#include "common.node.frag.uniform.glsl" + +//#include "common.node.struct.glsl" + +//#include "common.node.frag.glsl" + +in vec2 vLocal; + +flat in VertexData vertexData; +out vec4 fragColor; + +void main(void) { + vec4 color = vertexData.color; + borderColor(color, vLocal); + fragColor = color; +} diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/node.vert b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/node.vert new file mode 100644 index 0000000000..a2c074b2a2 --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/node.vert @@ -0,0 +1,26 @@ +//#include "../common.vert.glsl" + +//#include "common.node.vert.glsl" + +//#include "common.node.vert.uniform.glsl" + +//#include "common.node.vert.in.glsl" + +//#include "common.node.struct.glsl" + +flat out VertexData vertexData; +out vec2 vLocal; + +void main() { + vLocal = vert; + + vec2 instancePosition = size * vert + position; + gl_Position = mvp * vec4(instancePosition, 0.0, 1.0); + + //bgra -> rgba because Java color is argb big-endian + vec4 color = elementColor.bgra / 255.0; + + color.rgb = color.rgb; + + vertexData.color = color; +} diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/node_with_selection_selected.vert b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/node_with_selection_selected.vert new file mode 100644 index 0000000000..9bd8badd98 --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/node_with_selection_selected.vert @@ -0,0 +1,29 @@ +//#include "../common.vert.glsl" + +//#include "common.node.vert.glsl" + +//#include "common.node.vert.uniform.glsl" + +//#include "../common.animation.glsl" + +//#include "common.node.vert.in.glsl" + +//#include "common.node.struct.glsl" + +flat out VertexData vertexData; +out vec2 vLocal; + +void main() { + vLocal = vert; + + vec2 instancePosition = size * vert + position; + gl_Position = mvp * vec4(instancePosition, 0.0, 1.0); + + //bgra -> rgba because Java color is argb big-endian + vec4 color = elementColor.bgra / 255.0; + + color.rgb = color.rgb; + color = mix(color, color * 1.1, animationCurve); + + vertexData.color = color; +} diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/node_with_selection_unselected.frag b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/node_with_selection_unselected.frag new file mode 100644 index 0000000000..c2968f9789 --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/node_with_selection_unselected.frag @@ -0,0 +1,26 @@ +//#include "../common.frag.glsl" + +//#include "common.node.frag.uniform.glsl" + +uniform vec4 backgroundColor; +uniform float colorLightenFactor; + +//#include "../common.animation.glsl" + +//#include "common.node.struct.glsl" + +//#include "common.node.frag.glsl" +in vec2 vLocal; + +flat in VertexData vertexData; +out vec4 fragColor; + +void main(void) { + vec4 color = vertexData.color; + borderColor(color, vLocal); + + // Animation: + color.rgb = mix(color.rgb, backgroundColor.rgb, colorLightenFactor * animationCurve); + + fragColor = color; +} diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/node_with_selection_unselected.vert b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/node_with_selection_unselected.vert new file mode 100644 index 0000000000..a5eb344c05 --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/node/node_with_selection_unselected.vert @@ -0,0 +1,24 @@ +//#include "../common.vert.glsl" + +//#include "common.node.vert.glsl" + +//#include "common.node.vert.uniform.glsl" + +//#include "common.node.vert.in.glsl" + +//#include "common.node.struct.glsl" + +flat out VertexData vertexData; +out vec2 vLocal; + +void main() { + vLocal = vert; + + vec2 instancePosition = size * vert + position; + gl_Position = mvp * vec4(instancePosition, 0.0, 1.0); + + //bgra -> rgba because Java color is argb big-endian + vec4 color = elementColor.bgra / 255.0; + + vertexData.color = color; +} diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/rectangleSelection/rectangleSelection.frag b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/rectangleSelection/rectangleSelection.frag new file mode 100644 index 0000000000..f0153f15e7 --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/rectangleSelection/rectangleSelection.frag @@ -0,0 +1,9 @@ +//#include "../common.frag.glsl" + +uniform vec4 color; + +out vec4 fragColor; + +void main(void) { + fragColor = color; +} diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/rectangleSelection/rectangleSelection.vert b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/rectangleSelection/rectangleSelection.vert new file mode 100644 index 0000000000..b1c129a72b --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/rectangleSelection/rectangleSelection.vert @@ -0,0 +1,8 @@ +//#include "../common.vert.glsl" + +uniform mat4 mvp; +in vec2 vert; + +void main() { + gl_Position = mvp * vec4(vert.xy, 0.0, 1.0); +} diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/simpleMouseSelection/simpleMouseSelection.frag b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/simpleMouseSelection/simpleMouseSelection.frag new file mode 100644 index 0000000000..f0153f15e7 --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/simpleMouseSelection/simpleMouseSelection.frag @@ -0,0 +1,9 @@ +//#include "../common.frag.glsl" + +uniform vec4 color; + +out vec4 fragColor; + +void main(void) { + fragColor = color; +} diff --git a/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/simpleMouseSelection/simpleMouseSelection.vert b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/simpleMouseSelection/simpleMouseSelection.vert new file mode 100644 index 0000000000..9d52fcaaa8 --- /dev/null +++ b/modules/VisualizationEngine/src/main/resources/org/gephi/viz/engine/shaders/simpleMouseSelection/simpleMouseSelection.vert @@ -0,0 +1,8 @@ +//#include "../common.vert.glsl" + +uniform mat4 mvp; +in vec2 vert; + +void main() { + gl_Position = mvp * vec4(vert.xy, 0.0, 1.0); +} diff --git a/modules/VisualizationEngine/src/test/java/org/gephi/viz/engine/util/ArrayUtilsTest.java b/modules/VisualizationEngine/src/test/java/org/gephi/viz/engine/util/ArrayUtilsTest.java new file mode 100644 index 0000000000..77b2070bc3 --- /dev/null +++ b/modules/VisualizationEngine/src/test/java/org/gephi/viz/engine/util/ArrayUtilsTest.java @@ -0,0 +1,64 @@ +package org.gephi.viz.engine.util; + +import org.junit.Assert; +import org.junit.Test; + +/** + * + * @author Eduardo Ramos + */ +public class ArrayUtilsTest { + + public ArrayUtilsTest() { + } + + @Test + public void testRepeat() { + int elems = 4; + int times = 25; + float[] arr = new float[elems * times]; + + arr[0] = 1; + arr[1] = 2; + arr[2] = 2.5f; + arr[3] = 4; + + float[] expected = new float[arr.length]; + for (int i = 0; i < times; i++) { + System.arraycopy(arr, 0, expected, i * elems, elems); + } + + int nextIndex = ArrayUtils.repeat(arr, 0, elems, times); + + Assert.assertArrayEquals(expected, arr, 0.01f); + Assert.assertEquals(arr.length, nextIndex); + } + + @Test + public void testRepeatOffset() { + int elems = 4; + int offset = elems; + int times = 25; + float[] arr = new float[elems * times]; + + arr[0] = 0; + arr[1] = 0; + arr[2] = 0; + arr[3] = 0; + arr[4] = 1; + arr[5] = 2; + arr[6] = -3; + arr[7] = 5; + + float[] expected = new float[arr.length]; + for (int i = 0; i < times - 1; i++) { + System.arraycopy(arr, offset, expected, offset + i * elems, elems); + } + + int nextIndex = ArrayUtils.repeat(arr, offset, elems, times - 1); + + Assert.assertArrayEquals(expected, arr, 0.01f); + Assert.assertEquals(arr.length, nextIndex); + } + +} diff --git a/modules/VisualizationImpl/pom.xml b/modules/VisualizationImpl/pom.xml index 3f654fdc3d..1d775bf9e9 100644 --- a/modules/VisualizationImpl/pom.xml +++ b/modules/VisualizationImpl/pom.xml @@ -1,16 +1,17 @@ - + 4.0.0 gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi visualization - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm VisualizationImpl @@ -18,7 +19,7 @@ ${project.groupId} - dynamic-api + visualization-engine ${project.groupId} @@ -32,10 +33,6 @@ ${project.groupId} ui-components - - ${project.groupId} - core-library-wrapper - ${project.groupId} ui-library-wrapper @@ -48,6 +45,30 @@ ${project.groupId} visualization-api + + ${project.groupId} + datalab-api + + + ${project.groupId} + desktop-icons + + + ${project.groupId} + appearance-api + + + ${project.groupId} + desktop-appearance + + + ${project.groupId} + desktop-attributes + + + ${project.groupId} + appearance-plugin-ui + org.netbeans.api org-netbeans-modules-options-api @@ -73,18 +94,16 @@ org-openide-util - org.jogamp.gluegen - gluegen-rt-main - 2.1.3 + org.netbeans.api + org-openide-util-ui - org.jogamp.jogl - jogl-all-main - 2.1.3 + org.netbeans.api + org-openide-dialogs org.netbeans.api - org-openide-dialogs + org-netbeans-api-annotations-common ${project.groupId} @@ -92,55 +111,43 @@ ${project.groupId} - gleem + utils-longtask - ${project.groupId} - lib.validation + org.netbeans.api + org-openide-modules + + + + + org.mockito + mockito-core + test ${project.groupId} - desktop-project + graph-api + test + test-jar - org.netbeans.api - org-openide-modules + ${project.groupId} + project-api + test-jar + test - - - - jogamp-remote - jogamp test mirror - http://www.jogamp.org/deployment/maven/ - default - - false - - - + - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin - org.gephi.visualization - org.gephi.visualization.api.initializer - org.gephi.visualization.api.objects - org.gephi.visualization.api.selection - org.gephi.visualization.apiimpl - org.gephi.visualization.events - org.gephi.visualization.opengl.text + org.gephi.visualization.* - - - src/main/libs - modules/lib - - diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/CollapseGroup.java b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/CollapseGroup.java new file mode 100644 index 0000000000..38f06324f8 --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/CollapseGroup.java @@ -0,0 +1,72 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.visualization.collapse; + +import javax.swing.JComponent; +import org.gephi.visualization.VizModel; + +/** + * @author Mathieu Bastian + */ +public interface CollapseGroup { + + void setup(VizModel vizModel); + + void unsetup(VizModel vizModel); + + void disable(); + + String getName(); + + JComponent[] getToolbarComponents(); + + JComponent getExtendedComponent(); + + boolean hasToolbar(); + + default boolean drawSeparator() { + return true; + } + + boolean hasExtended(); +} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/CollapsePanel.form b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/CollapsePanel.form similarity index 100% rename from modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/CollapsePanel.form rename to modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/CollapsePanel.form diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/CollapsePanel.java b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/CollapsePanel.java new file mode 100644 index 0000000000..ee56bfd461 --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/CollapsePanel.java @@ -0,0 +1,130 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.visualization.collapse; + +import java.awt.BorderLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.JComponent; +import org.openide.util.ImageUtilities; + +/** + * @author Mathieu Bastian + */ +public class CollapsePanel extends javax.swing.JPanel { + + private boolean extended; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPanel buttonPanel; + private javax.swing.JButton extendButton; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form CollapsePanel + */ + public CollapsePanel() { + initComponents(); + } + + public void init(JComponent topBar, final JComponent extendedPanel, boolean extended) { + add(topBar, BorderLayout.CENTER); + add(extendedPanel, BorderLayout.SOUTH); + + this.extended = extended; + if (extended) { + extendButton.setIcon( + ImageUtilities.loadImageIcon("VisualizationImpl/bottomPanelClose.svg", false)); // NOI18N + } else { + extendButton.setIcon( + ImageUtilities.loadImageIcon("VisualizationImpl/bottomPanelOpen.svg", false)); // NOI18N + } + extendButton.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + boolean ext = CollapsePanel.this.extended; + ext = !ext; + CollapsePanel.this.extended = ext; + if (ext) { + extendButton.setIcon( + ImageUtilities.loadImageIcon("VisualizationImpl/bottomPanelClose.svg", false)); // NOI18N + } else { + extendButton.setIcon( + ImageUtilities.loadImageIcon("VisualizationImpl/bottomPanelOpen.svg", false)); // NOI18N + } + extendedPanel.setVisible(ext); + } + }); + if (!extended) { + extendedPanel.setVisible(extended); + } + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + buttonPanel = new javax.swing.JPanel(); + extendButton = new javax.swing.JButton(); + + setOpaque(true); + setLayout(new java.awt.BorderLayout()); + + buttonPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 3)); + + extendButton.setToolTipText( + org.openide.util.NbBundle.getMessage(CollapsePanel.class, "CollapsePanel.extendButton.text")); // NOI18N + extendButton.setAlignmentY(0.0F); + extendButton.setBorderPainted(false); + extendButton.setContentAreaFilled(false); + extendButton.setFocusable(false); + buttonPanel.add(extendButton); + + add(buttonPanel, java.awt.BorderLayout.EAST); + }// //GEN-END:initComponents +} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/EdgeGroup.java b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/EdgeGroup.java new file mode 100644 index 0000000000..aeea4be7fb --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/EdgeGroup.java @@ -0,0 +1,167 @@ +package org.gephi.desktop.visualization.collapse; + +import java.awt.Dimension; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.beans.PropertyChangeEvent; +import javax.swing.BorderFactory; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JSlider; +import javax.swing.JToggleButton; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import org.gephi.ui.components.JPopupButton; +import org.gephi.visualization.VizConfig; +import org.gephi.visualization.VizModel; +import org.gephi.visualization.api.EdgeColorMode; +import org.gephi.visualization.api.VisualizationController; +import org.gephi.visualization.api.VisualizationModel; +import org.gephi.visualization.api.VisualizationPropertyChangeListener; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +public class EdgeGroup implements CollapseGroup, VisualizationPropertyChangeListener { + + private final VisualizationController vizController; + private final EdgeSettingsPanel edgeSettingsPanel = new EdgeSettingsPanel(); + //Toolbar + private final JToggleButton showEdgeButton; + private final JSlider edgeScaleSlider; + private final JPopupButton edgeColorModeButton; + private final JLabel titleLabel; + + public EdgeGroup() { + vizController = Lookup.getDefault().lookup(VisualizationController.class); + + //Title + titleLabel = new JLabel(NbBundle.getMessage(EdgeGroup.class, "VizToolbar.Edges.groupLabel")); + titleLabel.setBorder(BorderFactory.createEmptyBorder(0, 0, 0, 4)); + + //Show edges + showEdgeButton = new JToggleButton(); + showEdgeButton.setToolTipText(NbBundle.getMessage(EdgeGroup.class, "VizToolbar.Edges.showEdges")); + showEdgeButton.setIcon( + ImageUtilities.loadImageIcon("VisualizationImpl/showEdges.svg", false)); + showEdgeButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + vizController.setShowEdges(showEdgeButton.isSelected()); + } + }); + + //Edge Color mode + edgeColorModeButton = new JPopupButton(); + for (EdgeColorMode mode : EdgeColorMode.values()) { + edgeColorModeButton.addItem(mode, + ImageUtilities.loadImageIcon("VisualizationImpl/EdgeColorMode_" + mode.name() + ".svg", false), + NbBundle.getMessage(EdgeGroup.class, "EdgeColorMode." + mode.name().toLowerCase() + ".name")); + } + edgeColorModeButton.setChangeListener(e -> { + vizController.setEdgeColorMode((EdgeColorMode) e.getSource()); + }); + edgeColorModeButton.setIcon(ImageUtilities.loadImageIcon("VisualizationImpl/edgeColorMode.svg", false)); + edgeColorModeButton + .setToolTipText(NbBundle.getMessage(EdgeGroup.class, "VizToolbar.Edges.colorMode")); + + //EdgeScale slider - logarithmic [0, 100] β†’ [EDGE_SCALE_MIN, EDGE_SCALE_MAX], + // centred (slider=50) at the default value (geometric mean of MIN and MAX). + edgeScaleSlider = new JSlider(0, 100, 0); + edgeScaleSlider.setToolTipText(NbBundle.getMessage(EdgeGroup.class, "VizToolbar.Edges.edgeScale")); + edgeScaleSlider.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + float scale = VizConfig.EDGE_SCALE_MIN * + (float) Math.pow((double) VizConfig.EDGE_SCALE_MAX / VizConfig.EDGE_SCALE_MIN, + edgeScaleSlider.getValue() / 100.0); + vizController.setEdgeScale(scale); + } + }); + edgeScaleSlider.setPreferredSize(new Dimension(100, 20)); + edgeScaleSlider.setMaximumSize(new Dimension(100, 20)); + } + + @Override + public void setup(VizModel vizModel) { + edgeSettingsPanel.setup(vizModel); + + titleLabel.setEnabled(true); + + edgeColorModeButton.setEnabled(true); + edgeColorModeButton.setSelectedItem(vizModel.getEdgeColorMode()); + + showEdgeButton.setEnabled(true); + showEdgeButton.setSelected(vizModel.isShowEdges()); + + edgeScaleSlider.setEnabled(true); + edgeScaleSlider.setValue((int) Math.round( + Math.log((double) vizModel.getEdgeScale() / VizConfig.EDGE_SCALE_MIN) / + Math.log((double) VizConfig.EDGE_SCALE_MAX / VizConfig.EDGE_SCALE_MIN) * 100)); + + // Listeners + vizController.addPropertyChangeListener(this); + } + + @Override + public void unsetup(VizModel vizModel) { + vizController.removePropertyChangeListener(this); + edgeSettingsPanel.unsetup(vizModel); + } + + @Override + public void disable() { + edgeSettingsPanel.setup(null); + for (JComponent component : getToolbarComponents()) { + component.setEnabled(false); + } + } + + @Override + public void propertyChange(VisualizationModel model, PropertyChangeEvent evt) { + if (evt.getPropertyName().equals("showEdges")) { + if (showEdgeButton.isSelected() != model.isShowEdges()) { + showEdgeButton.setSelected(model.isShowEdges()); + } + } else if (evt.getPropertyName().equals("edgeScale")) { + int targetSlider = (int) Math.round(Math.log((double) model.getEdgeScale() / VizConfig.EDGE_SCALE_MIN) / + Math.log((double) VizConfig.EDGE_SCALE_MAX / VizConfig.EDGE_SCALE_MIN) * 100); + if (edgeScaleSlider.getValue() != targetSlider) { + edgeScaleSlider.setValue(targetSlider); + } + } else if (evt.getPropertyName().equals("edgeColorMode")) { + if (edgeColorModeButton.getSelectedItem() != model.getEdgeColorMode()) { + edgeColorModeButton.setSelectedItem(model.getEdgeColorMode()); + } + } + } + + @Override + public String getName() { + return NbBundle.getMessage(EdgeGroup.class, "VizToolbar.Edges.groupBarTitle"); + } + + @Override + public JComponent[] getToolbarComponents() { + return new JComponent[] {titleLabel, + showEdgeButton, + edgeScaleSlider, + edgeColorModeButton + }; + } + + @Override + public JComponent getExtendedComponent() { + return edgeSettingsPanel; + } + + @Override + public boolean hasToolbar() { + return true; + } + + @Override + public boolean hasExtended() { + return true; + } +} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/EdgeLabelGroup.java b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/EdgeLabelGroup.java new file mode 100644 index 0000000000..eb2b683797 --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/EdgeLabelGroup.java @@ -0,0 +1,188 @@ +package org.gephi.desktop.visualization.collapse; + +import java.awt.Dimension; +import java.beans.PropertyChangeEvent; +import javax.swing.JButton; +import javax.swing.JComponent; +import javax.swing.JSlider; +import javax.swing.JToggleButton; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import org.gephi.ui.components.JPopupButton; +import org.gephi.visualization.VizConfig; +import org.gephi.visualization.VizModel; +import org.gephi.visualization.api.LabelColorMode; +import org.gephi.visualization.api.LabelSizeMode; +import org.gephi.visualization.api.VisualizationController; +import org.gephi.visualization.api.VisualizationModel; +import org.gephi.visualization.api.VisualizationPropertyChangeListener; +import org.openide.DialogDescriptor; +import org.openide.DialogDisplayer; +import org.openide.NotifyDescriptor; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +public class EdgeLabelGroup implements CollapseGroup, VisualizationPropertyChangeListener { + + private final JToggleButton showLabelsButton; + private final JPopupButton labelColorModeButton; + private final JPopupButton labelSizeModeButton; + private final JButton attributesButton; + private final JSlider fontSizeSlider; + private final VisualizationController vizController; + private final EdgeLabelsSettingsPanel edgeLabelsSettingsPanel = new EdgeLabelsSettingsPanel(); + + public EdgeLabelGroup() { + vizController = Lookup.getDefault().lookup(VisualizationController.class); + + //Show labels buttons + showLabelsButton = new JToggleButton(); + showLabelsButton.setToolTipText(NbBundle.getMessage(EdgeLabelGroup.class, "VizToolbar.Edges.showLabels")); + showLabelsButton.setIcon(ImageUtilities.loadImageIcon("VisualizationImpl/showEdgeLabels.svg", false)); + showLabelsButton.addActionListener(e -> vizController.setShowEdgeLabels(showLabelsButton.isSelected())); + + //Attributes + attributesButton = new JButton(); + attributesButton.setIcon(ImageUtilities.loadImageIcon("VisualizationImpl/configureLabels.svg", false)); + attributesButton + .setToolTipText(NbBundle.getMessage(EdgeLabelGroup.class, "VizToolbar.Labels.attributes")); + attributesButton.addActionListener(e -> { + VisualizationModel model = vizController.getModel(); + LabelAttributesPanel panel = new LabelAttributesPanel(model, true); + panel.setup(); + DialogDescriptor dd = new DialogDescriptor(panel, + NbBundle.getMessage(EdgeLabelGroup.class, "LabelAttributesPanel.title"), true, + NotifyDescriptor.OK_CANCEL_OPTION, null, null); + if (DialogDisplayer.getDefault().notify(dd).equals(NotifyDescriptor.OK_OPTION)) { + panel.unsetup(); + } + }); + + // Color mode + labelColorModeButton = new JPopupButton(); + for (LabelColorMode mode : LabelColorMode.values()) { + labelColorModeButton.addItem(mode, + ImageUtilities.loadImageIcon("VisualizationImpl/LabelColorMode_" + mode.name() + ".svg", false), + NbBundle.getMessage(EdgeLabelGroup.class, "EdgeLabelColorMode." + mode.name().toLowerCase() + ".name")); + } + labelColorModeButton.setChangeListener(e -> { + vizController.setEdgeLabelColorMode((LabelColorMode) e.getSource()); + }); + labelColorModeButton.setIcon(ImageUtilities.loadImageIcon("VisualizationImpl/labelColorMode.svg", false)); + labelColorModeButton + .setToolTipText(NbBundle.getMessage(EdgeLabelGroup.class, "VizToolbar.Labels.colorMode")); + + // Size Mode + labelSizeModeButton = new JPopupButton(); + for (LabelSizeMode mode : LabelSizeMode.values()) { + labelSizeModeButton.addItem(mode, + ImageUtilities.loadImageIcon("VisualizationImpl/LabelSizeMode_" + mode.name() + ".svg", false), + NbBundle.getMessage(EdgeLabelGroup.class, "LabelSizeMode." + mode.name().toLowerCase() + ".name")); + } + labelSizeModeButton.setChangeListener(e -> { + vizController.setEdgeLabelSizeMode((LabelSizeMode) e.getSource()); + }); + labelSizeModeButton.setIcon(ImageUtilities.loadImageIcon("VisualizationImpl/labelSizeMode.svg", false)); + labelSizeModeButton + .setToolTipText(NbBundle.getMessage(EdgeLabelGroup.class, "VizToolbar.Labels.sizeMode")); + + //Font size - maps [1, 100] to [EDGE_LABEL_SCALE_MIN, EDGE_LABEL_SCALE_MAX] + fontSizeSlider = new JSlider(1, 100, 1); + fontSizeSlider.setToolTipText(NbBundle.getMessage(EdgeLabelGroup.class, "VizToolbar.Labels.fontScale")); + fontSizeSlider.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + float scale = VizConfig.EDGE_LABEL_SCALE_MIN + + (VizConfig.EDGE_LABEL_SCALE_MAX - VizConfig.EDGE_LABEL_SCALE_MIN) * + (fontSizeSlider.getValue() - 1) / 99f; + vizController.setEdgeLabelScale(scale); + } + }); + fontSizeSlider.setPreferredSize(new Dimension(100, 20)); + fontSizeSlider.setMaximumSize(new Dimension(100, 20)); + } + + @Override + public void setup(VizModel vizModel) { + edgeLabelsSettingsPanel.setup(vizModel); + showLabelsButton.setSelected(vizModel.isShowEdgeLabels()); + labelColorModeButton.setSelectedItem(vizModel.getEdgeLabelColorMode()); + labelSizeModeButton.setSelectedItem(vizModel.getEdgeLabelSizeMode()); + fontSizeSlider.setValue(1 + (int) ((vizModel.getEdgeLabelScale() - VizConfig.EDGE_LABEL_SCALE_MIN) / + (VizConfig.EDGE_LABEL_SCALE_MAX - VizConfig.EDGE_LABEL_SCALE_MIN) * 99)); + refreshEnable(true); + + vizController.addPropertyChangeListener(this); + } + + private void refreshEnable(boolean enabled) { + showLabelsButton.setEnabled(enabled); + boolean showLabels = enabled && showLabelsButton.isSelected(); + labelColorModeButton.setEnabled(showLabels); + labelSizeModeButton.setEnabled(showLabels); + attributesButton.setEnabled(showLabels); + fontSizeSlider.setEnabled(showLabels); + } + + @Override + public void unsetup(VizModel vizModel) { + vizController.removePropertyChangeListener(this); + edgeLabelsSettingsPanel.unsetup(vizModel); + } + + @Override + public void disable() { + refreshEnable(false); + edgeLabelsSettingsPanel.setup(null); + } + + @Override + public void propertyChange(VisualizationModel model, PropertyChangeEvent evt) { + if ("showEdgeLabels".equals(evt.getPropertyName())) { + showLabelsButton.setSelected((Boolean) evt.getNewValue()); + refreshEnable(true); + } else if ("edgeLabelColorMode".equals(evt.getPropertyName())) { + labelColorModeButton.setSelectedItem(model.getEdgeLabelColorMode()); + } else if ("edgeLabelSizeMode".equals(evt.getPropertyName())) { + labelSizeModeButton.setSelectedItem(model.getEdgeLabelSizeMode()); + } else if ("edgeLabelScale".equals(evt.getPropertyName())) { + int sliderValue = 1 + (int) (((Float) evt.getNewValue() - VizConfig.EDGE_LABEL_SCALE_MIN) / + (VizConfig.EDGE_LABEL_SCALE_MAX - VizConfig.EDGE_LABEL_SCALE_MIN) * 99); + if (fontSizeSlider.getValue() != sliderValue) { + fontSizeSlider.setValue(sliderValue); + } + } + } + + @Override + public String getName() { + return NbBundle.getMessage(EdgeLabelGroup.class, "VizToolbar.EdgeLabels.groupBarTitle"); + } + + @Override + public JComponent[] getToolbarComponents() { + return new JComponent[] {showLabelsButton, labelColorModeButton, labelSizeModeButton, + fontSizeSlider}; + } + + @Override + public JComponent getExtendedComponent() { + return edgeLabelsSettingsPanel; + } + + @Override + public boolean hasToolbar() { + return true; + } + + @Override + public boolean hasExtended() { + return true; + } + + @Override + public boolean drawSeparator() { + return false; + } +} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/EdgeLabelsSettingsPanel.form b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/EdgeLabelsSettingsPanel.form new file mode 100644 index 0000000000..18eb7ab5d1 --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/EdgeLabelsSettingsPanel.form @@ -0,0 +1,182 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/EdgeLabelsSettingsPanel.java b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/EdgeLabelsSettingsPanel.java new file mode 100644 index 0000000000..1384fb927b --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/EdgeLabelsSettingsPanel.java @@ -0,0 +1,416 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.visualization.collapse; + +import com.connectina.swing.fontchooser.JFontChooser; +import java.awt.Component; +import java.awt.Font; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.beans.PropertyChangeEvent; +import javax.swing.DefaultComboBoxModel; +import javax.swing.DefaultListCellRenderer; +import javax.swing.JLabel; +import javax.swing.JList; +import org.gephi.appearance.spi.TransformerCategory; +import org.gephi.desktop.appearance.AppearanceUIController; +import org.gephi.ui.appearance.plugin.UniqueLabelColorTransformerUI; +import org.gephi.ui.appearance.plugin.category.DefaultCategory; +import org.gephi.visualization.VizConfig; +import org.gephi.visualization.api.LabelColorMode; +import org.gephi.visualization.api.LabelSizeMode; +import org.gephi.visualization.api.VisualizationController; +import org.gephi.visualization.api.VisualizationModel; +import org.gephi.visualization.api.VisualizationPropertyChangeListener; +import org.openide.DialogDescriptor; +import org.openide.DialogDisplayer; +import org.openide.NotifyDescriptor; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; +import org.openide.windows.TopComponent; +import org.openide.windows.WindowManager; + +/** + * @author Mathieu Bastian + */ +public class EdgeLabelsSettingsPanel extends javax.swing.JPanel implements VisualizationPropertyChangeListener { + + private final VisualizationController vizController; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton attributesButton; + private javax.swing.JComboBox edgeColorCombo; + private javax.swing.JButton edgeFontButton; + private javax.swing.JComboBox edgeSizeCombo; + private javax.swing.JSlider edgeSizeSlider; + private javax.swing.JCheckBox hideNonSelectedCheckbox; + private javax.swing.JLabel labelEdgeColor; + private javax.swing.JLabel labelEdgeFont; + private javax.swing.JLabel labelEdgeScale; + private javax.swing.JLabel labelEdgeSize; + private org.jdesktop.swingx.JXHyperlink selfColorLink; + private javax.swing.JCheckBox showLabelsCheckbox; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form NodeLabelsSettingsPanel + */ + public EdgeLabelsSettingsPanel() { + initComponents(); + + vizController = Lookup.getDefault().lookup(VisualizationController.class); + + // Color node + final DefaultComboBoxModel colorModeModel = new DefaultComboBoxModel<>(LabelColorMode.values()); + edgeColorCombo.setModel(colorModeModel); + edgeColorCombo.addActionListener(e -> { + LabelColorMode selected = (LabelColorMode) edgeColorCombo.getSelectedItem(); + if (selected == null) { + return; + } + vizController.setEdgeLabelColorMode(selected); + selfColorLink.setVisible(selected.equals(LabelColorMode.SELF)); + }); + edgeColorCombo.setRenderer(new DefaultListCellRenderer() { + @Override + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, + boolean cellHasFocus) { + JLabel label = + (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + if (value instanceof LabelColorMode) { + label.setText(org.openide.util.NbBundle.getMessage(EdgeLabelsSettingsPanel.class, + "EdgeLabelColorMode." + ((LabelColorMode) value).name().toLowerCase() + ".name")); + label.setIcon(ImageUtilities.loadIcon( + "VisualizationImpl/LabelColorMode_" + ((LabelColorMode) value).name() + ".svg")); + } else { + throw new IllegalArgumentException("Expected LabelColorMode"); + } + return this; + } + }); + + selfColorLink.addActionListener(e -> { + TopComponent topComponent = WindowManager.getDefault().findTopComponent("AppearanceTopComponent"); + topComponent.open(); + topComponent.requestActive(); + + AppearanceUIController appearanceUIController = Lookup.getDefault().lookup(AppearanceUIController.class); + TransformerCategory category = DefaultCategory.LABEL_COLOR; + appearanceUIController.setSelectedElementClass("edges"); + appearanceUIController.setSelectedCategory(category); + UniqueLabelColorTransformerUI transformerUI = + Lookup.getDefault().lookup(UniqueLabelColorTransformerUI.class); + appearanceUIController.setSelectedTransformerUI(transformerUI); + }); + selfColorLink.setToolTipText(org.openide.util.NbBundle.getMessage(EdgeLabelsSettingsPanel.class, + "EdgeLabelsSettingsPanel.selfColorLink.toolTipText")); + + // Size mode + final DefaultComboBoxModel sizeModeModel = new DefaultComboBoxModel<>(LabelSizeMode.values()); + edgeSizeCombo.setModel(sizeModeModel); + edgeSizeCombo.addActionListener( + e -> vizController.setEdgeLabelSizeMode((LabelSizeMode) edgeSizeCombo.getSelectedItem())); + edgeSizeCombo.setRenderer(new DefaultListCellRenderer() { + @Override + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, + boolean cellHasFocus) { + JLabel label = + (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + if (value instanceof LabelSizeMode) { + label.setText(org.openide.util.NbBundle.getMessage(EdgeLabelsSettingsPanel.class, + "LabelSizeMode." + ((LabelSizeMode) value).name().toLowerCase() + ".name")); + label.setIcon(ImageUtilities.loadIcon( + "VisualizationImpl/LabelSizeMode_" + ((LabelSizeMode) value).name() + ".svg")); + } else { + throw new IllegalArgumentException("Expected NodeLabelSizeMode"); + } + return this; + } + }); + + // Show + showLabelsCheckbox.addItemListener(e -> { + vizController.setShowEdgeLabels(showLabelsCheckbox.isSelected()); + setEnable(true); + }); + + // Font + edgeFontButton.addActionListener(e -> { + VisualizationModel model = vizController.getModel(); + Font font = JFontChooser.showDialog(WindowManager.getDefault().getMainWindow(), model.getEdgeLabelFont()); + if (font != null && font != model.getEdgeLabelFont()) { + vizController.setEdgeLabelFont(font); + } + }); + // Slider maps [1, 100] to [EDGE_LABEL_SCALE_MIN, EDGE_LABEL_SCALE_MAX] + edgeSizeSlider.addChangeListener(e -> { + float scale = VizConfig.EDGE_LABEL_SCALE_MIN + + (VizConfig.EDGE_LABEL_SCALE_MAX - VizConfig.EDGE_LABEL_SCALE_MIN) * (edgeSizeSlider.getValue() - 1) / + 99f; + vizController.setEdgeLabelScale(scale); + }); + + // Attributes + attributesButton.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + VisualizationModel model = vizController.getModel(); + LabelAttributesPanel panel = new LabelAttributesPanel(model, true); + panel.setup(); + DialogDescriptor dd = new DialogDescriptor(panel, + NbBundle.getMessage(EdgeLabelsSettingsPanel.class, "LabelAttributesPanel.title"), true, + NotifyDescriptor.OK_CANCEL_OPTION, null, null); + if (DialogDisplayer.getDefault().notify(dd).equals(NotifyDescriptor.OK_OPTION)) { + panel.unsetup(); + } + } + }); + attributesButton.setIcon(ImageUtilities.loadImageIcon("VisualizationImpl/configureLabels.svg", false)); + + // Hide non selected + hideNonSelectedCheckbox.addActionListener( + e -> vizController.setHideNonSelectedEdgeLabels(hideNonSelectedCheckbox.isSelected())); + } + + public void setup(VisualizationModel model) { + if (model == null) { + setEnable(false); + return; + } + refreshSharedConfig(model); + setEnable(true); + vizController.addPropertyChangeListener(this); + } + + public void unsetup(VisualizationModel model) { + vizController.removePropertyChangeListener(this); + } + + @Override + public void propertyChange(VisualizationModel model, PropertyChangeEvent evt) { + if (evt.getPropertyName().equals("showEdgeLabels")) { + refreshSharedConfig(model); + } else if (evt.getPropertyName().equals("edgeLabelFont")) { + refreshSharedConfig(model); + } else if (evt.getPropertyName().equals("edgeLabelScale")) { + refreshSharedConfig(model); + } else if (evt.getPropertyName().equals("hideNonSelectedEdgeLabels")) { + refreshSharedConfig(model); + } else if (evt.getPropertyName().equals("edgeLabelSizeMode")) { + refreshSharedConfig(model); + } else if (evt.getPropertyName().equals("edgeLabelColorMode")) { + refreshSharedConfig(model); + } + } + + private void refreshSharedConfig(VisualizationModel vizModel) { + if (showLabelsCheckbox.isSelected() != vizModel.isShowEdgeLabels()) { + showLabelsCheckbox.setSelected(vizModel.isShowEdgeLabels()); + } + if (edgeColorCombo.getSelectedItem() != vizModel.getEdgeLabelColorMode()) { + edgeColorCombo.setSelectedItem(vizModel.getEdgeLabelColorMode()); + } + if (edgeSizeCombo.getSelectedItem() != vizModel.getEdgeLabelSizeMode()) { + edgeSizeCombo.setSelectedItem(vizModel.getEdgeLabelSizeMode()); + } + edgeFontButton.setText( + vizModel.getEdgeLabelFont().getFontName() + ", " + vizModel.getEdgeLabelFont().getSize()); + float sliderScale = VizConfig.EDGE_LABEL_SCALE_MIN + + (VizConfig.EDGE_LABEL_SCALE_MAX - VizConfig.EDGE_LABEL_SCALE_MIN) * (edgeSizeSlider.getValue() - 1) / 99f; + if (sliderScale != vizModel.getEdgeLabelScale()) { + edgeSizeSlider.setValue(1 + (int) ((vizModel.getEdgeLabelScale() - VizConfig.EDGE_LABEL_SCALE_MIN) / + (VizConfig.EDGE_LABEL_SCALE_MAX - VizConfig.EDGE_LABEL_SCALE_MIN) * 99)); + } + if (hideNonSelectedCheckbox.isSelected() != vizModel.isHideNonSelectedEdgeLabels()) { + hideNonSelectedCheckbox.setSelected(vizModel.isHideNonSelectedEdgeLabels()); + } + selfColorLink.setVisible(edgeColorCombo.getSelectedItem() == LabelColorMode.SELF); + } + + private void setEnable(boolean enable) { + showLabelsCheckbox.setEnabled(enable); + edgeColorCombo.setEnabled(enable && showLabelsCheckbox.isSelected()); + labelEdgeColor.setEnabled(enable && showLabelsCheckbox.isSelected()); + edgeFontButton.setEnabled(enable && showLabelsCheckbox.isSelected()); + labelEdgeFont.setEnabled(enable && showLabelsCheckbox.isSelected()); + edgeSizeSlider.setEnabled(enable && showLabelsCheckbox.isSelected()); + labelEdgeScale.setEnabled(enable && showLabelsCheckbox.isSelected()); + edgeSizeCombo.setEnabled(enable && showLabelsCheckbox.isSelected()); + labelEdgeSize.setEnabled(enable && showLabelsCheckbox.isSelected()); + hideNonSelectedCheckbox.setEnabled(enable && showLabelsCheckbox.isSelected()); + attributesButton.setEnabled(enable && showLabelsCheckbox.isSelected()); + selfColorLink.setEnabled(enable && showLabelsCheckbox.isSelected()); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + showLabelsCheckbox = new javax.swing.JCheckBox(); + labelEdgeColor = new javax.swing.JLabel(); + edgeColorCombo = new javax.swing.JComboBox<>(); + labelEdgeFont = new javax.swing.JLabel(); + edgeFontButton = new javax.swing.JButton(); + labelEdgeScale = new javax.swing.JLabel(); + edgeSizeSlider = new javax.swing.JSlider(); + labelEdgeSize = new javax.swing.JLabel(); + edgeSizeCombo = new javax.swing.JComboBox<>(); + hideNonSelectedCheckbox = new javax.swing.JCheckBox(); + attributesButton = new javax.swing.JButton(); + selfColorLink = new org.jdesktop.swingx.JXHyperlink(); + + showLabelsCheckbox.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N + showLabelsCheckbox.setText(org.openide.util.NbBundle.getMessage(EdgeLabelsSettingsPanel.class, + "EdgeLabelsSettingsPanel.showLabelsCheckbox.text")); // NOI18N + + labelEdgeColor.setText(org.openide.util.NbBundle.getMessage(EdgeLabelsSettingsPanel.class, + "EdgeLabelsSettingsPanel.labelEdgeColor.text")); // NOI18N + + labelEdgeFont.setText(org.openide.util.NbBundle.getMessage(EdgeLabelsSettingsPanel.class, + "EdgeLabelsSettingsPanel.labelEdgeFont.text")); // NOI18N + labelEdgeFont.setMaximumSize(new java.awt.Dimension(60, 15)); + + edgeFontButton.setText(org.openide.util.NbBundle.getMessage(EdgeLabelsSettingsPanel.class, + "EdgeLabelsSettingsPanel.edgeFontButton.text")); // NOI18N + + labelEdgeScale.setText(org.openide.util.NbBundle.getMessage(EdgeLabelsSettingsPanel.class, + "EdgeLabelsSettingsPanel.labelEdgeScale.text")); // NOI18N + + edgeSizeSlider.setMinimum(1); + + labelEdgeSize.setText(org.openide.util.NbBundle.getMessage(EdgeLabelsSettingsPanel.class, + "EdgeLabelsSettingsPanel.labelEdgeSize.text")); // NOI18N + + hideNonSelectedCheckbox.setText(org.openide.util.NbBundle.getMessage(EdgeLabelsSettingsPanel.class, + "EdgeLabelsSettingsPanel.hideNonSelectedCheckbox.text")); // NOI18N + hideNonSelectedCheckbox.setBorder(null); + hideNonSelectedCheckbox.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT); + hideNonSelectedCheckbox.setMargin(new java.awt.Insets(2, 0, 2, 2)); + + attributesButton.setText(org.openide.util.NbBundle.getMessage(EdgeLabelsSettingsPanel.class, + "EdgeLabelsSettingsPanel.attributesButton.text")); // NOI18N + + selfColorLink.setText(org.openide.util.NbBundle.getMessage(EdgeLabelsSettingsPanel.class, + "EdgeLabelsSettingsPanel.selfColorLink.text")); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(19, 19, 19) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(labelEdgeColor) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(edgeColorCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 145, + javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createSequentialGroup() + .addComponent(labelEdgeSize) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(edgeSizeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 145, + javax.swing.GroupLayout.PREFERRED_SIZE))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(selfColorLink, javax.swing.GroupLayout.PREFERRED_SIZE, 31, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(24, 24, 24) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addGroup(layout.createSequentialGroup() + .addComponent(labelEdgeFont, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(edgeFontButton, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addComponent(hideNonSelectedCheckbox)) + .addGap(18, 18, 18) + .addComponent(labelEdgeScale) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(edgeSizeSlider, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(attributesButton, javax.swing.GroupLayout.PREFERRED_SIZE, 125, + javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(showLabelsCheckbox))) + .addContainerGap(99, Short.MAX_VALUE)) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addComponent(showLabelsCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelEdgeColor) + .addComponent(edgeColorCombo, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(labelEdgeFont, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(edgeFontButton) + .addComponent(labelEdgeScale) + .addComponent(edgeSizeSlider, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(selfColorLink, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(attributesButton)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelEdgeSize) + .addComponent(edgeSizeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(hideNonSelectedCheckbox)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + }// //GEN-END:initComponents +} + + diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/EdgeSettingsPanel.form b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/EdgeSettingsPanel.form new file mode 100644 index 0000000000..72b1ba25b9 --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/EdgeSettingsPanel.form @@ -0,0 +1,372 @@ + + +

              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/EdgeSettingsPanel.java b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/EdgeSettingsPanel.java new file mode 100644 index 0000000000..82892d4763 --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/EdgeSettingsPanel.java @@ -0,0 +1,613 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.visualization.collapse; + +import java.awt.Color; +import java.awt.Component; +import java.beans.PropertyChangeEvent; +import java.util.Arrays; +import javax.swing.DefaultComboBoxModel; +import javax.swing.DefaultListCellRenderer; +import javax.swing.JLabel; +import javax.swing.JList; +import org.gephi.appearance.spi.TransformerCategory; +import org.gephi.desktop.appearance.AppearanceUIController; +import org.gephi.graph.api.Estimator; +import org.gephi.ui.appearance.plugin.UniqueElementColorTransformerUI; +import org.gephi.ui.appearance.plugin.category.DefaultCategory; +import org.gephi.visualization.VizConfig; +import org.gephi.visualization.api.EdgeColorMode; +import org.gephi.visualization.api.VisualizationController; +import org.gephi.visualization.api.VisualizationModel; +import org.gephi.visualization.api.VisualizationPropertyChangeListener; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.windows.TopComponent; +import org.openide.windows.WindowManager; + +/** + * @author Mathieu Bastian + */ +public class EdgeSettingsPanel extends javax.swing.JPanel implements VisualizationPropertyChangeListener { + + private final VisualizationController vizController; + // Variables declaration - do not modify//GEN-BEGIN:variables + private net.java.dev.colorchooser.ColorChooser edgeBothSelectionColorChooser; + private javax.swing.JLabel edgeColor; + private javax.swing.JComboBox edgeColorCombo; + private net.java.dev.colorchooser.ColorChooser edgeInSelectionColorChooser; + private net.java.dev.colorchooser.ColorChooser edgeOutSelectionColorChooser; + private javax.swing.JComboBox edgeWeightEstimatorCombo; + private javax.swing.JLabel edgeWeightEstimatorLabel; + private javax.swing.JCheckBox hideNonSelectedCheckbox; + private javax.swing.JLabel labelBoth; + private javax.swing.JLabel labelIn; + private javax.swing.JLabel labelOut; + private javax.swing.JLabel labelScale; + private javax.swing.JCheckBox rescaleEdgeWeightCheckbox; + private javax.swing.JPanel scalePanel; + private javax.swing.JSlider scaleSlider; + private javax.swing.JCheckBox selectionColorCheckbox; + private javax.swing.JPanel selectionColorPanel; + private org.jdesktop.swingx.JXHyperlink selfColorLink; + private javax.swing.JCheckBox showEdgesCheckbox; + private javax.swing.JCheckBox useEdgeWeightCheckbox; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form EdgeSettingsPanel + */ + public EdgeSettingsPanel() { + initComponents(); + + vizController = Lookup.getDefault().lookup(VisualizationController.class); + + final DefaultComboBoxModel colorModeModel = new DefaultComboBoxModel<>(EdgeColorMode.values()); + edgeColorCombo.setModel(colorModeModel); + edgeColorCombo.addActionListener( + e -> { + EdgeColorMode selected = (EdgeColorMode) edgeColorCombo.getSelectedItem(); + if (selected == null) { + return; + } + vizController.setEdgeColorMode(selected); + selfColorLink.setVisible(selected.equals(EdgeColorMode.SELF)); + }); + edgeColorCombo.setRenderer(new DefaultListCellRenderer() { + @Override + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, + boolean cellHasFocus) { + JLabel label = + (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + if (value instanceof EdgeColorMode) { + label.setText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, + "EdgeColorMode." + ((EdgeColorMode) value).name().toLowerCase() + ".name")); + label.setIcon(ImageUtilities.loadIcon( + "VisualizationImpl/EdgeColorMode_" + ((EdgeColorMode) value).name() + ".svg")); + } else { + throw new IllegalArgumentException("Expected EdgeColorMode"); + } + return this; + } + }); + selfColorLink.addActionListener(e -> { + TopComponent topComponent = WindowManager.getDefault().findTopComponent("AppearanceTopComponent"); + topComponent.open(); + topComponent.requestActive(); + + AppearanceUIController appearanceUIController = Lookup.getDefault().lookup(AppearanceUIController.class); + TransformerCategory category = DefaultCategory.COLOR; + appearanceUIController.setSelectedElementClass("edges"); + appearanceUIController.setSelectedCategory(category); + UniqueElementColorTransformerUI transformerUI = + Lookup.getDefault().lookup(UniqueElementColorTransformerUI.class); + appearanceUIController.setSelectedTransformerUI(transformerUI); + }); + selfColorLink.setToolTipText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, + "EdgeSettingsPanel.selfColorLink.toolTipText")); + + showEdgesCheckbox.addItemListener(e -> { + vizController.setShowEdges(showEdgesCheckbox.isSelected()); + setEnable(true, null); + }); + selectionColorCheckbox.addItemListener( + e -> { + vizController.setEdgeSelectionColor(selectionColorCheckbox.isSelected()); + setEnable(true, null); + }); + edgeInSelectionColorChooser.addActionListener( + ae -> vizController.setEdgeInSelectionColor(edgeInSelectionColorChooser.getColor())); + edgeBothSelectionColorChooser.addActionListener( + ae -> vizController.setEdgeBothSelectionColor(edgeBothSelectionColorChooser.getColor())); + edgeOutSelectionColorChooser.addActionListener( + ae -> vizController.setEdgeOutSelectionColor(edgeOutSelectionColorChooser.getColor())); + // Override generated minimum; logarithmic slider [0, 100] β†’ [EDGE_SCALE_MIN, EDGE_SCALE_MAX], + // centred (slider=50) at the default value (geometric mean of MIN and MAX). + scaleSlider.setMinimum(0); + scaleSlider.addChangeListener(e -> { + float scale = VizConfig.EDGE_SCALE_MIN * + (float) Math.pow((double) VizConfig.EDGE_SCALE_MAX / VizConfig.EDGE_SCALE_MIN, + scaleSlider.getValue() / 100.0); + vizController.setEdgeScale(scale); + }); + useEdgeWeightCheckbox.addItemListener(e -> { + vizController.setUseEdgeWeight(useEdgeWeightCheckbox.isSelected()); + setEnable(true, null); + }); + rescaleEdgeWeightCheckbox.addItemListener( + e -> vizController.setRescaleEdgeWeight(rescaleEdgeWeightCheckbox.isSelected())); + hideNonSelectedCheckbox.addItemListener( + e -> vizController.setHideNonSelectedEdges(hideNonSelectedCheckbox.isSelected())); + + final DefaultComboBoxModel estimatorModel = new DefaultComboBoxModel<>( + Arrays.stream(Estimator.values()).filter((e) -> !e.is(Estimator.MEDIAN)).toArray(Estimator[]::new)); + edgeWeightEstimatorCombo.setModel(estimatorModel); + edgeWeightEstimatorCombo.addActionListener( + e -> { + Estimator selected = (Estimator) edgeWeightEstimatorCombo.getSelectedItem(); + if (selected == null) { + return; + } + vizController.setEdgeWeightEstimator(selected); + }); + edgeWeightEstimatorCombo.setRenderer(new DefaultListCellRenderer() { + @Override + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, + boolean cellHasFocus) { + JLabel label = + (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + if (value instanceof Estimator) { + label.setText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, + "EdgeWeightEstimator." + ((Estimator) value).name().toLowerCase() + ".name")); + } else if (value == null) { + label.setText(""); + } else { + throw new IllegalArgumentException("Expected Estimator"); + } + return this; + } + }); + } + + public void setup(VisualizationModel model) { + if (model == null) { + setEnable(false, null); + return; + } + refreshSharedConfig(model); + setEnable(true, model); + vizController.addPropertyChangeListener(this); + } + + public void unsetup(VisualizationModel model) { + vizController.removePropertyChangeListener(this); + } + + @Override + public void propertyChange(VisualizationModel model, PropertyChangeEvent evt) { + if (evt.getPropertyName().equals("showEdges")) { + refreshSharedConfig(model); + } else if (evt.getPropertyName().equals("edgeSelectionColor")) { + refreshSharedConfig(model); + } else if (evt.getPropertyName().equals("edgeInSelectionColor")) { + refreshSharedConfig(model); + } else if (evt.getPropertyName().equals("edgeOutSelectionColor")) { + refreshSharedConfig(model); + } else if (evt.getPropertyName().equals("edgeBothSelectionColor")) { + refreshSharedConfig(model); + } else if (evt.getPropertyName().equals("edgeScale")) { + refreshSharedConfig(model); + } else if (evt.getPropertyName().equals("edgeColorMode")) { + refreshSharedConfig(model); + } else if (evt.getPropertyName().equals("useEdgeWeight")) { + refreshSharedConfig(model); + } else if (evt.getPropertyName().equals("rescaleEdgeWeight")) { + refreshSharedConfig(model); + } else if (evt.getPropertyName().equals("hideNonSelectedEdges")) { + refreshSharedConfig(model); + } else if (evt.getPropertyName().equals("edgeWeightEstimator")) { + refreshSharedConfig(model); + } + } + + private void refreshSharedConfig(VisualizationModel vizModel) { + if (showEdgesCheckbox.isSelected() != vizModel.isShowEdges()) { + showEdgesCheckbox.setSelected(vizModel.isShowEdges()); + } + if (edgeColorCombo.getSelectedItem() != vizModel.getEdgeColorMode()) { + edgeColorCombo.setSelectedItem(vizModel.getEdgeColorMode()); + } + if (selectionColorCheckbox.isSelected() != vizModel.isEdgeSelectionColor()) { + selectionColorCheckbox.setSelected(vizModel.isEdgeSelectionColor()); + } + Color in = vizModel.getEdgeInSelectionColor(); + Color out = vizModel.getEdgeOutSelectionColor(); + Color both = vizModel.getEdgeBothSelectionColor(); + if (!edgeInSelectionColorChooser.getColor().equals(in)) { + edgeInSelectionColorChooser.setColor(in); + } + if (!edgeBothSelectionColorChooser.getColor().equals(both)) { + edgeBothSelectionColorChooser.setColor(both); + } + if (!edgeOutSelectionColorChooser.getColor().equals(out)) { + edgeOutSelectionColorChooser.setColor(out); + } + int targetSlider = (int) Math.round(Math.log((double) vizModel.getEdgeScale() / VizConfig.EDGE_SCALE_MIN) / + Math.log((double) VizConfig.EDGE_SCALE_MAX / VizConfig.EDGE_SCALE_MIN) * 100); + if (scaleSlider.getValue() != targetSlider) { + scaleSlider.setValue(targetSlider); + } + if (useEdgeWeightCheckbox.isSelected() != vizModel.isUseEdgeWeight()) { + useEdgeWeightCheckbox.setSelected(vizModel.isUseEdgeWeight()); + } + if (rescaleEdgeWeightCheckbox.isSelected() != vizModel.isRescaleEdgeWeight()) { + rescaleEdgeWeightCheckbox.setSelected(vizModel.isRescaleEdgeWeight()); + } + if (hideNonSelectedCheckbox.isSelected() != vizModel.isHideNonSelectedEdges()) { + hideNonSelectedCheckbox.setSelected(vizModel.isHideNonSelectedEdges()); + } + if (edgeWeightEstimatorCombo.getSelectedItem() != vizModel.getEdgeWeightEstimator()) { + edgeWeightEstimatorCombo.setSelectedItem(vizModel.getEdgeWeightEstimator()); + } + } + + private void setEnable(boolean enable, VisualizationModel model) { + showEdgesCheckbox.setEnabled(enable); + edgeColorCombo.setEnabled(enable && showEdgesCheckbox.isSelected()); + edgeColor.setEnabled(enable && showEdgesCheckbox.isSelected()); + scaleSlider.setEnabled(enable && showEdgesCheckbox.isSelected()); + labelScale.setEnabled(enable && showEdgesCheckbox.isSelected()); + selectionColorCheckbox.setEnabled(enable && showEdgesCheckbox.isSelected()); + selfColorLink.setEnabled(enable && showEdgesCheckbox.isSelected()); + edgeInSelectionColorChooser + .setEnabled(enable && showEdgesCheckbox.isSelected() && selectionColorCheckbox.isSelected()); + edgeBothSelectionColorChooser + .setEnabled(enable && showEdgesCheckbox.isSelected() && selectionColorCheckbox.isSelected()); + edgeOutSelectionColorChooser + .setEnabled(enable && showEdgesCheckbox.isSelected() && selectionColorCheckbox.isSelected()); + labelIn.setEnabled(enable && showEdgesCheckbox.isSelected() && selectionColorCheckbox.isSelected()); + labelOut.setEnabled(enable && showEdgesCheckbox.isSelected() && selectionColorCheckbox.isSelected()); + labelBoth.setEnabled(enable && showEdgesCheckbox.isSelected() && selectionColorCheckbox.isSelected()); + useEdgeWeightCheckbox.setEnabled(enable && showEdgesCheckbox.isSelected()); + rescaleEdgeWeightCheckbox.setEnabled( + enable && showEdgesCheckbox.isSelected() && useEdgeWeightCheckbox.isSelected()); + hideNonSelectedCheckbox.setEnabled(enable && showEdgesCheckbox.isSelected()); + edgeWeightEstimatorCombo.setEnabled( + enable && showEdgesCheckbox.isSelected() && useEdgeWeightCheckbox.isSelected() && model != null && + model.getEdgeWeightEstimator() != null); + edgeWeightEstimatorLabel.setEnabled( + enable && showEdgesCheckbox.isSelected() && useEdgeWeightCheckbox.isSelected() && model != null && + model.getEdgeWeightEstimator() != null); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + java.awt.GridBagConstraints gridBagConstraints; + + showEdgesCheckbox = new javax.swing.JCheckBox(); + edgeColor = new javax.swing.JLabel(); + selectionColorPanel = new javax.swing.JPanel(); + selectionColorCheckbox = new javax.swing.JCheckBox(); + edgeInSelectionColorChooser = new net.java.dev.colorchooser.ColorChooser(); + edgeOutSelectionColorChooser = new net.java.dev.colorchooser.ColorChooser(); + edgeBothSelectionColorChooser = new net.java.dev.colorchooser.ColorChooser(); + labelIn = new javax.swing.JLabel(); + labelOut = new javax.swing.JLabel(); + labelBoth = new javax.swing.JLabel(); + scalePanel = new javax.swing.JPanel(); + labelScale = new javax.swing.JLabel(); + scaleSlider = new javax.swing.JSlider(); + useEdgeWeightCheckbox = new javax.swing.JCheckBox(); + rescaleEdgeWeightCheckbox = new javax.swing.JCheckBox(); + edgeColorCombo = new javax.swing.JComboBox<>(); + hideNonSelectedCheckbox = new javax.swing.JCheckBox(); + selfColorLink = new org.jdesktop.swingx.JXHyperlink(); + edgeWeightEstimatorLabel = new javax.swing.JLabel(); + edgeWeightEstimatorCombo = new javax.swing.JComboBox<>(); + + showEdgesCheckbox.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N + showEdgesCheckbox.setText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, + "EdgeSettingsPanel.showEdgesCheckbox.text")); // NOI18N + + edgeColor.setText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, + "EdgeSettingsPanel.edgeColor.text")); // NOI18N + + selectionColorPanel.setOpaque(false); + selectionColorPanel.setLayout(new java.awt.GridBagLayout()); + + selectionColorCheckbox.setText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, + "EdgeSettingsPanel.selectionColorCheckbox.text")); // NOI18N + selectionColorCheckbox.setToolTipText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, + "EdgeSettingsPanel.selectionColorCheckbox.toolTipText")); // NOI18N + selectionColorCheckbox.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); + selectionColorCheckbox.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT); + selectionColorCheckbox.setMaximumSize(new java.awt.Dimension(160, 18)); + selectionColorCheckbox.setMinimumSize(new java.awt.Dimension(160, 18)); + selectionColorCheckbox.setPreferredSize(new java.awt.Dimension(160, 18)); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.gridwidth = 4; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.weightx = 1.0; + selectionColorPanel.add(selectionColorCheckbox, gridBagConstraints); + + edgeInSelectionColorChooser.setMinimumSize(new java.awt.Dimension(14, 14)); + edgeInSelectionColorChooser.setPreferredSize(new java.awt.Dimension(14, 14)); + edgeInSelectionColorChooser.setToolTipText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, + "EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText")); // NOI18N + + javax.swing.GroupLayout edgeInSelectionColorChooserLayout = + new javax.swing.GroupLayout(edgeInSelectionColorChooser); + edgeInSelectionColorChooser.setLayout(edgeInSelectionColorChooserLayout); + edgeInSelectionColorChooserLayout.setHorizontalGroup( + edgeInSelectionColorChooserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 12, Short.MAX_VALUE) + ); + edgeInSelectionColorChooserLayout.setVerticalGroup( + edgeInSelectionColorChooserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 12, Short.MAX_VALUE) + ); + + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 1; + gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 5); + selectionColorPanel.add(edgeInSelectionColorChooser, gridBagConstraints); + + edgeOutSelectionColorChooser.setMinimumSize(new java.awt.Dimension(14, 14)); + edgeOutSelectionColorChooser.setPreferredSize(new java.awt.Dimension(14, 14)); + edgeOutSelectionColorChooser.setToolTipText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, + "EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText")); // NOI18N + + javax.swing.GroupLayout edgeOutSelectionColorChooserLayout = + new javax.swing.GroupLayout(edgeOutSelectionColorChooser); + edgeOutSelectionColorChooser.setLayout(edgeOutSelectionColorChooserLayout); + edgeOutSelectionColorChooserLayout.setHorizontalGroup( + edgeOutSelectionColorChooserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 12, Short.MAX_VALUE) + ); + edgeOutSelectionColorChooserLayout.setVerticalGroup( + edgeOutSelectionColorChooserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 12, Short.MAX_VALUE) + ); + + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 2; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; + gridBagConstraints.weighty = 1.0; + gridBagConstraints.insets = new java.awt.Insets(5, 5, 0, 5); + selectionColorPanel.add(edgeOutSelectionColorChooser, gridBagConstraints); + + edgeBothSelectionColorChooser.setMinimumSize(new java.awt.Dimension(14, 14)); + edgeBothSelectionColorChooser.setPreferredSize(new java.awt.Dimension(14, 14)); + edgeBothSelectionColorChooser.setToolTipText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, + "EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText")); // NOI18N + + javax.swing.GroupLayout edgeBothSelectionColorChooserLayout = + new javax.swing.GroupLayout(edgeBothSelectionColorChooser); + edgeBothSelectionColorChooser.setLayout(edgeBothSelectionColorChooserLayout); + edgeBothSelectionColorChooserLayout.setHorizontalGroup( + edgeBothSelectionColorChooserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 12, Short.MAX_VALUE) + ); + edgeBothSelectionColorChooserLayout.setVerticalGroup( + edgeBothSelectionColorChooserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 12, Short.MAX_VALUE) + ); + + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 3; + gridBagConstraints.gridy = 1; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 5); + selectionColorPanel.add(edgeBothSelectionColorChooser, gridBagConstraints); + + labelIn.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N + labelIn.setText( + org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, "EdgeSettingsPanel.labelIn.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 1; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(5, 10, 0, 0); + selectionColorPanel.add(labelIn, gridBagConstraints); + + labelOut.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N + labelOut.setText( + org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, "EdgeSettingsPanel.labelOut.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 2; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; + gridBagConstraints.weighty = 1.0; + gridBagConstraints.insets = new java.awt.Insets(7, 10, 0, 0); + selectionColorPanel.add(labelOut, gridBagConstraints); + + labelBoth.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N + labelBoth.setText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, + "EdgeSettingsPanel.labelBoth.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 2; + gridBagConstraints.gridy = 1; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(5, 5, 0, 0); + selectionColorPanel.add(labelBoth, gridBagConstraints); + + scalePanel.setOpaque(false); + scalePanel.setLayout(new java.awt.GridBagLayout()); + + labelScale.setText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, + "EdgeSettingsPanel.labelScale.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.gridheight = 2; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; + gridBagConstraints.insets = new java.awt.Insets(3, 5, 2, 0); + scalePanel.add(labelScale, gridBagConstraints); + + scaleSlider.setMinimum(1); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 0; + gridBagConstraints.gridwidth = java.awt.GridBagConstraints.REMAINDER; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.weighty = 1.0; + scalePanel.add(scaleSlider, gridBagConstraints); + + useEdgeWeightCheckbox.setText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, + "EdgeSettingsPanel.useEdgeWeightCheckbox.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 1; + gridBagConstraints.gridwidth = 2; + gridBagConstraints.gridheight = 2; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; + scalePanel.add(useEdgeWeightCheckbox, gridBagConstraints); + + rescaleEdgeWeightCheckbox.setText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, + "EdgeSettingsPanel.rescaleEdgeWeightCheckbox.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 3; + gridBagConstraints.gridwidth = 2; + gridBagConstraints.gridheight = 2; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; + scalePanel.add(rescaleEdgeWeightCheckbox, gridBagConstraints); + + hideNonSelectedCheckbox.setText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, + "EdgeSettingsPanel.hideNonSelectedCheckbox.text")); // NOI18N + + selfColorLink.setText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, + "EdgeSettingsPanel.selfColorLink.text")); // NOI18N + + edgeWeightEstimatorLabel.setText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, + "EdgeSettingsPanel.edgeWeightEstimatorLabel.text")); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(21, 21, 21) + .addComponent(scalePanel, javax.swing.GroupLayout.PREFERRED_SIZE, 190, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(edgeColor) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(edgeColorCombo, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(selfColorLink, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createSequentialGroup() + .addComponent(edgeWeightEstimatorLabel) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(edgeWeightEstimatorCombo, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 34, Short.MAX_VALUE) + .addComponent(selectionColorPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 176, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(hideNonSelectedCheckbox)) + .addGroup(layout.createSequentialGroup() + .addComponent(showEdgesCheckbox) + .addGap(0, 0, Short.MAX_VALUE))) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(showEdgesCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(edgeColor) + .addComponent(edgeColorCombo, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(selfColorLink, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(edgeWeightEstimatorLabel) + .addComponent(edgeWeightEstimatorCombo, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.PREFERRED_SIZE))) + .addComponent(scalePanel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() + .addGap(32, 32, 32) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(hideNonSelectedCheckbox) + .addGap(0, 0, Short.MAX_VALUE)) + .addComponent(selectionColorPanel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) + .addContainerGap()) + ); + }// //GEN-END:initComponents +} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/GlobalGroup.java b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/GlobalGroup.java new file mode 100644 index 0000000000..a562a76e20 --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/GlobalGroup.java @@ -0,0 +1,126 @@ +package org.gephi.desktop.visualization.collapse; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.beans.PropertyChangeEvent; +import javax.swing.JComponent; +import javax.swing.JMenuItem; +import javax.swing.JPopupMenu; +import org.gephi.ui.components.JColorBlackWhiteSwitcher; +import org.gephi.ui.components.JColorButton; +import org.gephi.ui.components.JDropDownButton; +import org.gephi.ui.utils.UIUtils; +import org.gephi.visualization.VizConfig; +import org.gephi.visualization.VizController; +import org.gephi.visualization.VizModel; +import org.gephi.visualization.api.VisualizationModel; +import org.gephi.visualization.api.VisualizationPropertyChangeListener; +import org.openide.util.ImageUtilities; +import org.openide.util.NbBundle; + +public class GlobalGroup implements CollapseGroup, VisualizationPropertyChangeListener { + + private final JColorBlackWhiteSwitcher backgroundColorButton; + private final JDropDownButton screenshotButton; + + private final GlobalSettingsPanel globalSettingsPanel = new GlobalSettingsPanel(); + + private final VizController vizController; + + public GlobalGroup(VizController vizController) { + this.vizController = vizController; + backgroundColorButton = new JColorBlackWhiteSwitcher( + UIUtils.isDarkLookAndFeel() ? VizConfig.DEFAULT_DARK_BACKGROUND_COLOR : VizConfig.DEFAULT_BACKGROUND_COLOR); + backgroundColorButton.setLightColor(VizConfig.DEFAULT_BACKGROUND_COLOR); + backgroundColorButton.setDarkColor(VizConfig.DEFAULT_DARK_BACKGROUND_COLOR); + backgroundColorButton + .setToolTipText(NbBundle.getMessage(GlobalGroup.class, "VizToolbar.Global.background")); + backgroundColorButton.addPropertyChangeListener(JColorButton.EVENT_COLOR, evt -> { + vizController.setBackgroundColor(backgroundColorButton.getColor()); + }); + + //Screenshots + JPopupMenu screenshotPopup = new JPopupMenu(); + JMenuItem configureScreenshotItem = + new JMenuItem(NbBundle.getMessage(GlobalGroup.class, "VizToolbar.Global.screenshot.configure")); + configureScreenshotItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + vizController.getScreenshotController().configure(); + } + }); + screenshotPopup.add(configureScreenshotItem); + screenshotButton = new JDropDownButton( + ImageUtilities.loadImageIcon("VisualizationImpl/screenshot.svg", false), + screenshotPopup); + screenshotButton + .setToolTipText(NbBundle.getMessage(GlobalGroup.class, "VizToolbar.Global.screenshot")); + screenshotButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + vizController.getScreenshotController().takeScreenshot(); + } + }); + } + + @Override + public void propertyChange(VisualizationModel vizModel, PropertyChangeEvent evt) { + if (evt.getPropertyName().equals("backgroundColor")) { + backgroundColorButton.setColor(vizModel.getBackgroundColor()); + } + } + + @Override + public void setup(VizModel vizModel) { + for (JComponent component : getToolbarComponents()) { + component.setEnabled(true); + } + backgroundColorButton.setColor(vizModel.getBackgroundColor()); + globalSettingsPanel.setup(vizModel); + vizController.addPropertyChangeListener(this); + } + + @Override + public void unsetup(VizModel vizModel) { + vizController.removePropertyChangeListener(this); + globalSettingsPanel.unsetup(vizModel); + } + + @Override + public void disable() { + globalSettingsPanel.setup(null); + for (JComponent component : getToolbarComponents()) { + component.setEnabled(false); + } + } + + @Override + public String getName() { + return NbBundle.getMessage(GlobalGroup.class, "VizToolbar.Global.groupBarTitle"); + } + + @Override + public JComponent[] getToolbarComponents() { + return new JComponent[] {backgroundColorButton, screenshotButton}; + } + + @Override + public JComponent getExtendedComponent() { + return globalSettingsPanel; + } + + @Override + public boolean hasToolbar() { + return true; + } + + @Override + public boolean hasExtended() { + return true; + } + + @Override + public boolean drawSeparator() { + return false; + } +} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/GlobalSettingsPanel.form b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/GlobalSettingsPanel.form new file mode 100644 index 0000000000..aa9bea4f08 --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/GlobalSettingsPanel.form @@ -0,0 +1,100 @@ + + +
              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/GlobalSettingsPanel.java b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/GlobalSettingsPanel.java new file mode 100644 index 0000000000..3f5d82b184 --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/GlobalSettingsPanel.java @@ -0,0 +1,202 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.visualization.collapse; + +import java.awt.Color; +import java.beans.PropertyChangeEvent; +import org.gephi.ui.components.JColorButton; +import org.gephi.visualization.VizController; +import org.gephi.visualization.api.VisualizationController; +import org.gephi.visualization.api.VisualizationModel; +import org.gephi.visualization.api.VisualizationPropertyChangeListener; +import org.openide.util.Lookup; + +/** + * @author Mathieu Bastian + */ +public class GlobalSettingsPanel extends javax.swing.JPanel implements VisualizationPropertyChangeListener { + + private final VisualizationController vizController; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JCheckBox autoSelectNeigborCheckbox; + private javax.swing.JButton backgroundColorButton; + private javax.swing.JCheckBox hightlightCheckBox; + private javax.swing.JLabel labelBackgroundColor; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form GlobalSettingsPanel + */ + public GlobalSettingsPanel() { + initComponents(); + + vizController = Lookup.getDefault().lookup(VizController.class); + + hightlightCheckBox.addItemListener(e -> { + vizController.setLightenNonSelectedAuto(hightlightCheckBox.isSelected()); + }); + + backgroundColorButton + .addPropertyChangeListener(JColorButton.EVENT_COLOR, evt -> { + vizController.setBackgroundColor(((JColorButton) backgroundColorButton).getColor()); + }); + + autoSelectNeigborCheckbox.addItemListener(e -> { + vizController.setAutoSelectNeighbors(autoSelectNeigborCheckbox.isSelected()); + }); + } + + @Override + public void propertyChange(VisualizationModel model, PropertyChangeEvent evt) { + if (evt.getPropertyName().equals("backgroundColor")) { + refreshSharedConfig(model); + } else if (evt.getPropertyName().equals("autoSelectNeighbor")) { + refreshSharedConfig(model); + } else if (evt.getPropertyName().equals("lightenNonSelectedAuto")) { + refreshSharedConfig(model); + } + } + + public void setup(VisualizationModel model) { + if (model == null) { + setEnable(false); + return; + } + refreshSharedConfig(model); + setEnable(true); + vizController.addPropertyChangeListener(this); + } + + public void unsetup(VisualizationModel model) { + vizController.removePropertyChangeListener(this); + } + + private void refreshSharedConfig(VisualizationModel vizModel) { + if (autoSelectNeigborCheckbox.isSelected() != vizModel.isAutoSelectNeighbors()) { + autoSelectNeigborCheckbox.setSelected(vizModel.isAutoSelectNeighbors()); + } + + ((JColorButton) backgroundColorButton).setColor(vizModel.getBackgroundColor()); + + if (hightlightCheckBox.isSelected() != vizModel.isLightenNonSelectedAuto()) { + hightlightCheckBox.setSelected(vizModel.isLightenNonSelectedAuto()); + } + } + + private void setEnable(boolean enable) { + autoSelectNeigborCheckbox.setEnabled(enable); + backgroundColorButton.setEnabled(enable); + hightlightCheckBox.setEnabled(enable); + labelBackgroundColor.setEnabled(enable); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + java.awt.GridBagConstraints gridBagConstraints; + + labelBackgroundColor = new javax.swing.JLabel(); + backgroundColorButton = new JColorButton(Color.DARK_GRAY); + hightlightCheckBox = new javax.swing.JCheckBox(); + autoSelectNeigborCheckbox = new javax.swing.JCheckBox(); + + labelBackgroundColor.setText(org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, + "GlobalSettingsPanel.labelBackgroundColor.text")); // NOI18N + + backgroundColorButton.setText(org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, + "GlobalSettingsPanel.backgroundColorButton.text")); // NOI18N + + hightlightCheckBox.setText(org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, + "GlobalSettingsPanel.hightlightCheckBox.text")); // NOI18N + hightlightCheckBox.setBorder(null); + hightlightCheckBox.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT); + hightlightCheckBox.setMargin(new java.awt.Insets(2, 0, 2, 2)); + + autoSelectNeigborCheckbox.setText(org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, + "GlobalSettingsPanel.autoSelectNeigborCheckbox.text")); // NOI18N + autoSelectNeigborCheckbox.setBorder(null); + autoSelectNeigborCheckbox.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT); + autoSelectNeigborCheckbox.setMargin(new java.awt.Insets(2, 0, 2, 2)); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(autoSelectNeigborCheckbox) + .addGroup(layout.createSequentialGroup() + .addComponent(labelBackgroundColor) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(backgroundColorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 24, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addComponent(hightlightCheckBox))) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) + .addComponent(labelBackgroundColor, javax.swing.GroupLayout.Alignment.LEADING, + javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(javax.swing.GroupLayout.Alignment.LEADING, + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(backgroundColorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 24, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(hightlightCheckBox, javax.swing.GroupLayout.PREFERRED_SIZE, 25, + javax.swing.GroupLayout.PREFERRED_SIZE))) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(autoSelectNeigborCheckbox, javax.swing.GroupLayout.PREFERRED_SIZE, 26, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addContainerGap()) + ); + }// //GEN-END:initComponents +} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/LabelAttributesPanel.form b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/LabelAttributesPanel.form similarity index 100% rename from modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/LabelAttributesPanel.form rename to modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/LabelAttributesPanel.form diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/LabelAttributesPanel.java b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/LabelAttributesPanel.java new file mode 100644 index 0000000000..76bf9bc58b --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/LabelAttributesPanel.java @@ -0,0 +1,309 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.visualization.collapse; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import javax.swing.ButtonModel; +import javax.swing.JCheckBox; +import net.miginfocom.swing.MigLayout; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.GraphController; +import org.gephi.project.api.Workspace; +import org.gephi.visualization.api.VisualizationController; +import org.gephi.visualization.api.VisualizationModel; +import org.openide.util.Lookup; +import org.openide.util.NbPreferences; + +/** + * @author Mathieu Bastian + */ +public class LabelAttributesPanel extends javax.swing.JPanel { + + private final VisualizationController vizController; + private final VisualizationModel vizModel; + //Settings + private ButtonModel selectedModel; + private boolean showProperties = true; + //Model + private AttributesCheckBox[] nodeCheckBoxs; + private AttributesCheckBox[] edgeCheckBoxs; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JPanel contentPanel; + private javax.swing.JScrollPane contentScrollPane; + private javax.swing.JPanel controlPanel; + private javax.swing.JToggleButton edgesToggleButton; + private javax.swing.ButtonGroup elementButtonGroup; + private javax.swing.JLabel labelComment; + private javax.swing.JToggleButton nodesToggleButton; + private javax.swing.JCheckBox showPropertiesCheckbox; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form LabelAttributesPanel + */ + public LabelAttributesPanel(VisualizationModel vizModel, boolean selectEdges) { + vizController = Lookup.getDefault().lookup(VisualizationController.class); + this.vizModel = vizModel; + this.showProperties = NbPreferences.forModule(LabelAttributesPanel.class) + .getBoolean("LabelAttributesPanel_showProperties", showProperties); + + initComponents(); + selectedModel = selectEdges ? edgesToggleButton.getModel() : nodesToggleButton.getModel(); + elementButtonGroup.setSelected(selectedModel, true); + nodesToggleButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (nodesToggleButton.isSelected()) { + selectedModel = nodesToggleButton.getModel(); + refresh(); + } + } + }); + edgesToggleButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (edgesToggleButton.isSelected()) { + selectedModel = edgesToggleButton.getModel(); + refresh(); + } + } + }); + showPropertiesCheckbox.setSelected(showProperties); + showPropertiesCheckbox.addItemListener(new ItemListener() { + @Override + public void itemStateChanged(ItemEvent e) { + showProperties = showPropertiesCheckbox.isSelected(); + refresh(); + } + }); + } + + public void setup() { + refresh(); + } + + private void refresh() { + Workspace workspace = vizModel.getWorkspace(); + GraphController graphController = Lookup.getDefault().lookup(GraphController.class); + + List availableColumns = new ArrayList<>(); + List selectedColumns = new ArrayList<>(); + AttributesCheckBox[] target; + if (elementButtonGroup.getSelection() == nodesToggleButton.getModel()) { + for (Column c : graphController.getGraphModel(workspace).getNodeTable()) { + if (!c.isProperty()) { + availableColumns.add(c); + } else if (showProperties && c.isProperty() && !c.getId().equals("timeset")) { + availableColumns.add(c); + } + } + + selectedColumns = Arrays.asList(vizModel.getNodeLabelColumns()); + + nodeCheckBoxs = new AttributesCheckBox[availableColumns.size()]; + target = nodeCheckBoxs; + } else { + for (Column c : graphController.getGraphModel().getEdgeTable()) { + if (!c.isProperty()) { + availableColumns.add(c); + } else if (showProperties) { + if (showProperties && c.isProperty() && !c.getId().equals("timeset")) { + availableColumns.add(c); + } + } + } + + selectedColumns = Arrays.asList(vizModel.getEdgeLabelColumns()); + + edgeCheckBoxs = new AttributesCheckBox[availableColumns.size()]; + target = edgeCheckBoxs; + } + contentPanel.removeAll(); + contentPanel.setLayout(new MigLayout("", "[pref!]")); + for (int i = 0; i < availableColumns.size(); i++) { + Column column = availableColumns.get(i); + AttributesCheckBox c = new AttributesCheckBox(column, selectedColumns.contains(column)); + target[i] = c; + contentPanel.add(c.getCheckBox(), "wrap"); + } + contentPanel.revalidate(); + contentPanel.repaint(); + } + + public void unsetup() { + List nodeColumnsList = new ArrayList<>(); + List edgeColumnsList = new ArrayList<>(); + if (nodeCheckBoxs != null) { + for (AttributesCheckBox c : nodeCheckBoxs) { + if (c.isSelected()) { + nodeColumnsList.add(c.getColumn()); + } + } + } + if (edgeCheckBoxs != null) { + for (AttributesCheckBox c : edgeCheckBoxs) { + if (c.isSelected()) { + edgeColumnsList.add(c.getColumn()); + } + } + } + if (!edgeColumnsList.isEmpty()) { + vizController.setEdgeLabelColumns(edgeColumnsList.toArray(new Column[0])); + } + if (!nodeColumnsList.isEmpty()) { + vizController.setNodeLabelColumns(nodeColumnsList.toArray(new Column[0])); + } + NbPreferences.forModule(LabelAttributesPanel.class) + .putBoolean("LabelAttributesPanel_showProperties", showProperties); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + java.awt.GridBagConstraints gridBagConstraints; + + elementButtonGroup = new javax.swing.ButtonGroup(); + controlPanel = new javax.swing.JPanel(); + nodesToggleButton = new javax.swing.JToggleButton(); + edgesToggleButton = new javax.swing.JToggleButton(); + contentScrollPane = new javax.swing.JScrollPane(); + contentPanel = new javax.swing.JPanel(); + labelComment = new javax.swing.JLabel(); + showPropertiesCheckbox = new javax.swing.JCheckBox(); + + controlPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 0)); + + elementButtonGroup.add(nodesToggleButton); + nodesToggleButton.setText(org.openide.util.NbBundle + .getMessage(LabelAttributesPanel.class, "LabelAttributesPanel.nodesToggleButton.text")); // NOI18N + controlPanel.add(nodesToggleButton); + + elementButtonGroup.add(edgesToggleButton); + edgesToggleButton.setText(org.openide.util.NbBundle + .getMessage(LabelAttributesPanel.class, "LabelAttributesPanel.edgesToggleButton.text")); // NOI18N + controlPanel.add(edgesToggleButton); + + contentPanel.setLayout(new java.awt.GridLayout()); + contentScrollPane.setViewportView(contentPanel); + + labelComment.setText(org.openide.util.NbBundle + .getMessage(LabelAttributesPanel.class, "LabelAttributesPanel.labelComment.text")); // NOI18N + + showPropertiesCheckbox.setText(org.openide.util.NbBundle + .getMessage(LabelAttributesPanel.class, "LabelAttributesPanel.showPropertiesCheckbox.text")); // NOI18N + showPropertiesCheckbox.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); + showPropertiesCheckbox.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT); + showPropertiesCheckbox.setMargin(new java.awt.Insets(2, 2, 2, 0)); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(contentScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 313, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addComponent(controlPanel, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 94, Short.MAX_VALUE) + .addComponent(showPropertiesCheckbox)) + .addComponent(labelComment)) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(controlPanel, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(13, 13, 13) + .addComponent(labelComment)) + .addComponent(showPropertiesCheckbox)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(contentScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 197, Short.MAX_VALUE) + .addContainerGap()) + ); + }// //GEN-END:initComponents + + + private static class AttributesCheckBox { + + private JCheckBox checkBox; + private Column column; + + public AttributesCheckBox(Column column, boolean selected) { + checkBox = new JCheckBox(column.getTitle(), selected); + this.column = column; + } + + public boolean isSelected() { + return checkBox.isSelected(); + } + + public void setSelected(boolean selected) { + checkBox.setSelected(selected); + } + + public JCheckBox getCheckBox() { + return checkBox; + } + + public Column getColumn() { + return column; + } + } +} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/NodeGroup.java b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/NodeGroup.java new file mode 100644 index 0000000000..5678fa1dca --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/NodeGroup.java @@ -0,0 +1,105 @@ +package org.gephi.desktop.visualization.collapse; + +import java.awt.Dimension; +import java.beans.PropertyChangeEvent; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JSlider; +import org.gephi.visualization.VizConfig; +import org.gephi.visualization.VizModel; +import org.gephi.visualization.api.VisualizationController; +import org.gephi.visualization.api.VisualizationModel; +import org.gephi.visualization.api.VisualizationPropertyChangeListener; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +public class NodeGroup implements CollapseGroup, VisualizationPropertyChangeListener { + + private final VisualizationController vizController; + private final NodeSettingsPanel nodeSettingsPanel = new NodeSettingsPanel(); + private final JSlider nodeScaleSlider; + private final JLabel titleLabel; + + public NodeGroup() { + vizController = Lookup.getDefault().lookup(VisualizationController.class); + + // Label + titleLabel = new JLabel(NbBundle.getMessage(NodeGroup.class, "VizToolbar.Nodes.groupLabel")); + + // NodeScale slider - logarithmic [0, 100] β†’ [NODE_SCALE_MIN, NODE_SCALE_MAX], + // centred (slider=50) at the default value (geometric mean of MIN and MAX). + nodeScaleSlider = new JSlider(0, 100, 0); + nodeScaleSlider.setToolTipText(NbBundle.getMessage(NodeGroup.class, "VizToolbar.Nodes.nodeScale")); + nodeScaleSlider.addChangeListener(e -> { + float scale = VizConfig.NODE_SCALE_MIN * + (float) Math.pow((double) VizConfig.NODE_SCALE_MAX / VizConfig.NODE_SCALE_MIN, + nodeScaleSlider.getValue() / 100.0); + vizController.setNodeScale(scale); + }); + nodeScaleSlider.setPreferredSize(new Dimension(100, 20)); + nodeScaleSlider.setMaximumSize(new Dimension(100, 20)); + } + + @Override + public void setup(VizModel vizModel) { + nodeSettingsPanel.setup(vizModel); + + titleLabel.setEnabled(true); + + nodeScaleSlider.setEnabled(true); + nodeScaleSlider.setValue((int) Math.round( + Math.log((double) vizModel.getNodeScale() / VizConfig.NODE_SCALE_MIN) / + Math.log((double) VizConfig.NODE_SCALE_MAX / VizConfig.NODE_SCALE_MIN) * 100)); + + vizController.addPropertyChangeListener(this); + } + + @Override + public void unsetup(VizModel vizModel) { + nodeSettingsPanel.unsetup(vizModel); + vizController.removePropertyChangeListener(this); + } + + @Override + public void disable() { + nodeSettingsPanel.setup(null); + nodeScaleSlider.setEnabled(false); + titleLabel.setEnabled(false); + } + + @Override + public void propertyChange(VisualizationModel model, PropertyChangeEvent evt) { + if ("nodeScale".equals(evt.getPropertyName())) { + int targetSlider = (int) Math.round(Math.log((double) model.getNodeScale() / VizConfig.NODE_SCALE_MIN) / + Math.log((double) VizConfig.NODE_SCALE_MAX / VizConfig.NODE_SCALE_MIN) * 100); + if (nodeScaleSlider.getValue() != targetSlider) { + nodeScaleSlider.setValue(targetSlider); + } + } + } + + @Override + public String getName() { + return NbBundle.getMessage(NodeGroup.class, "VizToolbar.Nodes.groupBarTitle"); + } + + @Override + public JComponent[] getToolbarComponents() { + return new JComponent[] {titleLabel, nodeScaleSlider}; + } + + @Override + public JComponent getExtendedComponent() { + return nodeSettingsPanel; + } + + @Override + public boolean hasToolbar() { + return true; + } + + @Override + public boolean hasExtended() { + return true; + } +} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/NodeLabelGroup.java b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/NodeLabelGroup.java new file mode 100644 index 0000000000..81a453ee96 --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/NodeLabelGroup.java @@ -0,0 +1,213 @@ +package org.gephi.desktop.visualization.collapse; + +import java.awt.Dimension; +import java.beans.PropertyChangeEvent; +import javax.swing.JButton; +import javax.swing.JComponent; +import javax.swing.JSlider; +import javax.swing.JToggleButton; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import org.gephi.ui.components.JPopupButton; +import org.gephi.visualization.VizConfig; +import org.gephi.visualization.VizModel; +import org.gephi.visualization.api.LabelColorMode; +import org.gephi.visualization.api.LabelSizeMode; +import org.gephi.visualization.api.VisualizationController; +import org.gephi.visualization.api.VisualizationModel; +import org.gephi.visualization.api.VisualizationPropertyChangeListener; +import org.openide.DialogDescriptor; +import org.openide.DialogDisplayer; +import org.openide.NotifyDescriptor; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +public class NodeLabelGroup implements CollapseGroup, VisualizationPropertyChangeListener { + + private final JToggleButton showLabelsButton; + private final JPopupButton labelColorModeButton; + private final JPopupButton labelSizeModeButton; + private final JToggleButton fitToNodeSizeButton; + private final JToggleButton avoidOverlapButton; + private final JButton attributesButton; + private final JSlider fontSizeSlider; + private final VisualizationController vizController; + private final NodeLabelsSettingsPanel nodeLabelsSettingsPanel = new NodeLabelsSettingsPanel(); + + public NodeLabelGroup() { + vizController = Lookup.getDefault().lookup(VisualizationController.class); + + //Show labels buttons + showLabelsButton = new JToggleButton(); + + showLabelsButton.setToolTipText(NbBundle.getMessage(NodeGroup.class, "VizToolbar.Nodes.showLabels")); + showLabelsButton.setIcon(ImageUtilities.loadImageIcon("VisualizationImpl/showNodeLabels.svg", false)); + showLabelsButton.addActionListener(e -> vizController.setShowNodeLabels(showLabelsButton.isSelected())); + + //Attributes + attributesButton = new JButton(); + attributesButton.setIcon(ImageUtilities.loadImageIcon("VisualizationImpl/configureLabels.svg", false)); + attributesButton + .setToolTipText(NbBundle.getMessage(NodeLabelGroup.class, "VizToolbar.Labels.attributes")); + attributesButton.addActionListener(e -> { + VisualizationModel model = vizController.getModel(); + LabelAttributesPanel panel = new LabelAttributesPanel(model, false); + panel.setup(); + DialogDescriptor dd = new DialogDescriptor(panel, + NbBundle.getMessage(NodeLabelGroup.class, "LabelAttributesPanel.title"), true, + NotifyDescriptor.OK_CANCEL_OPTION, null, null); + if (DialogDisplayer.getDefault().notify(dd).equals(NotifyDescriptor.OK_OPTION)) { + panel.unsetup(); + } + }); + + // Color mode + labelColorModeButton = new JPopupButton(); + for (LabelColorMode mode : LabelColorMode.values()) { + labelColorModeButton.addItem(mode, + ImageUtilities.loadImageIcon("VisualizationImpl/LabelColorMode_" + mode.name() + ".svg", false), + NbBundle.getMessage(NodeLabelGroup.class, "NodeLabelColorMode." + mode.name().toLowerCase() + ".name")); + } + labelColorModeButton.setChangeListener(e -> { + vizController.setNodeLabelColorMode((LabelColorMode) e.getSource()); + }); + labelColorModeButton.setIcon(ImageUtilities.loadImageIcon("VisualizationImpl/labelColorMode.svg", false)); + labelColorModeButton + .setToolTipText(NbBundle.getMessage(NodeLabelGroup.class, "VizToolbar.Labels.colorMode")); + + // Size Mode + labelSizeModeButton = new JPopupButton(); + for (LabelSizeMode mode : LabelSizeMode.values()) { + labelSizeModeButton.addItem(mode, + ImageUtilities.loadImageIcon("VisualizationImpl/LabelSizeMode_" + mode.name() + ".svg", false), + NbBundle.getMessage(NodeLabelGroup.class, "LabelSizeMode." + mode.name().toLowerCase() + ".name")); + } + labelSizeModeButton.setChangeListener(e -> { + vizController.setNodeLabelSizeMode((LabelSizeMode) e.getSource()); + }); + labelSizeModeButton.setIcon(ImageUtilities.loadImageIcon("VisualizationImpl/labelSizeMode.svg", false)); + labelSizeModeButton + .setToolTipText(NbBundle.getMessage(NodeLabelGroup.class, "VizToolbar.Labels.sizeMode")); + + // Fit to node size + fitToNodeSizeButton = new JToggleButton(); + fitToNodeSizeButton.setToolTipText(NbBundle.getMessage(NodeGroup.class, "VizToolbar.Labels.fitToNodeSize")); + fitToNodeSizeButton.setIcon(ImageUtilities.loadImageIcon("VisualizationImpl/fitToNodeSize.svg", false)); + fitToNodeSizeButton.addActionListener( + e -> vizController.setNodeLabelFitToNodeSize(fitToNodeSizeButton.isSelected())); + + // Avoid overlap + avoidOverlapButton = new JToggleButton(); + avoidOverlapButton.setToolTipText(NbBundle.getMessage(NodeLabelGroup.class, "VizToolbar.Labels.avoidOverlap")); + avoidOverlapButton.setIcon(ImageUtilities.loadImageIcon("VisualizationImpl/avoidOverlap.svg", false)); + avoidOverlapButton.addActionListener( + e -> vizController.setAvoidNodeLabelOverlap(avoidOverlapButton.isSelected())); + + //Font size - maps [1, 100] to [NODE_LABEL_SCALE_MIN, NODE_LABEL_SCALE_MAX] + fontSizeSlider = new JSlider(1, 100, 1); + fontSizeSlider.setToolTipText(NbBundle.getMessage(NodeLabelGroup.class, "VizToolbar.Labels.fontScale")); + fontSizeSlider.addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + float scale = VizConfig.NODE_LABEL_SCALE_MIN + + (VizConfig.NODE_LABEL_SCALE_MAX - VizConfig.NODE_LABEL_SCALE_MIN) * + (fontSizeSlider.getValue() - 1) / 99f; + vizController.setNodeLabelScale(scale); + } + }); + fontSizeSlider.setPreferredSize(new Dimension(100, 20)); + fontSizeSlider.setMaximumSize(new Dimension(100, 20)); + } + + @Override + public void setup(VizModel vizModel) { + nodeLabelsSettingsPanel.setup(vizModel); + showLabelsButton.setSelected(vizModel.isShowNodeLabels()); + labelColorModeButton.setSelectedItem(vizModel.getNodeLabelColorMode()); + labelSizeModeButton.setSelectedItem(vizModel.getNodeLabelSizeMode()); + fitToNodeSizeButton.setSelected(vizModel.isNodeLabelFitToNodeSize()); + avoidOverlapButton.setSelected(vizModel.isAvoidNodeLabelOverlap()); + fontSizeSlider.setValue(1 + (int) ((vizModel.getNodeLabelScale() - VizConfig.NODE_LABEL_SCALE_MIN) / + (VizConfig.NODE_LABEL_SCALE_MAX - VizConfig.NODE_LABEL_SCALE_MIN) * 99)); + refreshEnable(true); + + vizController.addPropertyChangeListener(this); + } + + private void refreshEnable(boolean enabled) { + showLabelsButton.setEnabled(enabled); + boolean showLabels = enabled && showLabelsButton.isSelected(); + labelColorModeButton.setEnabled(showLabels); + labelSizeModeButton.setEnabled(showLabels); + fitToNodeSizeButton.setEnabled(showLabels); + avoidOverlapButton.setEnabled(showLabels); + attributesButton.setEnabled(showLabels); + fontSizeSlider.setEnabled(showLabels); + } + + @Override + public void unsetup(VizModel vizModel) { + vizController.removePropertyChangeListener(this); + nodeLabelsSettingsPanel.unsetup(vizModel); + } + + @Override + public void disable() { + refreshEnable(false); + nodeLabelsSettingsPanel.setup(null); + } + + @Override + public void propertyChange(VisualizationModel model, PropertyChangeEvent evt) { + if ("showNodeLabels".equals(evt.getPropertyName())) { + showLabelsButton.setSelected((Boolean) evt.getNewValue()); + refreshEnable(true); + } else if ("nodeLabelColorMode".equals(evt.getPropertyName())) { + labelColorModeButton.setSelectedItem(model.getNodeLabelColorMode()); + } else if ("nodeLabelSizeMode".equals(evt.getPropertyName())) { + labelSizeModeButton.setSelectedItem(model.getNodeLabelSizeMode()); + } else if ("nodeLabelFitToNodeSize".equals(evt.getPropertyName())) { + fitToNodeSizeButton.setSelected((Boolean) evt.getNewValue()); + } else if ("avoidNodeLabelOverlap".equals(evt.getPropertyName())) { + avoidOverlapButton.setSelected((Boolean) evt.getNewValue()); + } else if ("nodeLabelScale".equals(evt.getPropertyName())) { + int sliderValue = 1 + (int) (((Float) evt.getNewValue() - VizConfig.NODE_LABEL_SCALE_MIN) / + (VizConfig.NODE_LABEL_SCALE_MAX - VizConfig.NODE_LABEL_SCALE_MIN) * 99); + if (fontSizeSlider.getValue() != sliderValue) { + fontSizeSlider.setValue(sliderValue); + } + } + } + + @Override + public String getName() { + return NbBundle.getMessage(NodeGroup.class, "VizToolbar.NodeLabels.groupBarTitle"); + } + + @Override + public JComponent[] getToolbarComponents() { + return new JComponent[] {showLabelsButton, labelColorModeButton, labelSizeModeButton, fitToNodeSizeButton, + avoidOverlapButton, fontSizeSlider, attributesButton}; + } + + @Override + public JComponent getExtendedComponent() { + return nodeLabelsSettingsPanel; + } + + @Override + public boolean hasToolbar() { + return true; + } + + @Override + public boolean hasExtended() { + return true; + } + + @Override + public boolean drawSeparator() { + return false; + } +} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/NodeLabelsSettingsPanel.form b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/NodeLabelsSettingsPanel.form new file mode 100644 index 0000000000..26e1e1cf87 --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/NodeLabelsSettingsPanel.form @@ -0,0 +1,218 @@ + + +
              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/NodeLabelsSettingsPanel.java b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/NodeLabelsSettingsPanel.java new file mode 100644 index 0000000000..c27dd1b26d --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/NodeLabelsSettingsPanel.java @@ -0,0 +1,464 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.visualization.collapse; + +import com.connectina.swing.fontchooser.JFontChooser; +import java.awt.Component; +import java.awt.Font; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.beans.PropertyChangeEvent; +import javax.swing.DefaultComboBoxModel; +import javax.swing.DefaultListCellRenderer; +import javax.swing.JLabel; +import javax.swing.JList; +import org.gephi.appearance.spi.TransformerCategory; +import org.gephi.desktop.appearance.AppearanceUIController; +import org.gephi.ui.appearance.plugin.UniqueLabelColorTransformerUI; +import org.gephi.ui.appearance.plugin.category.DefaultCategory; +import org.gephi.visualization.VizConfig; +import org.gephi.visualization.api.LabelColorMode; +import org.gephi.visualization.api.LabelSizeMode; +import org.gephi.visualization.api.VisualizationController; +import org.gephi.visualization.api.VisualizationModel; +import org.gephi.visualization.api.VisualizationPropertyChangeListener; +import org.openide.DialogDescriptor; +import org.openide.DialogDisplayer; +import org.openide.NotifyDescriptor; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; +import org.openide.windows.TopComponent; +import org.openide.windows.WindowManager; + +/** + * @author Mathieu Bastian + */ +public class NodeLabelsSettingsPanel extends javax.swing.JPanel implements VisualizationPropertyChangeListener { + + private final VisualizationController vizController; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton attributesButton; + private javax.swing.JCheckBox avoidOverlap; + private javax.swing.JToggleButton fitToNodeSizeToggleButton; + private javax.swing.JCheckBox hideNonSelectedCheckbox; + private javax.swing.JLabel labelNodeColor; + private javax.swing.JLabel labelNodeFont; + private javax.swing.JLabel labelNodeScale; + private javax.swing.JLabel labelNodeSize; + private javax.swing.JComboBox nodeColorCombo; + private javax.swing.JButton nodeFontButton; + private javax.swing.JComboBox nodeSizeCombo; + private javax.swing.JSlider nodeSizeSlider; + private org.jdesktop.swingx.JXHyperlink selfColorLink; + private javax.swing.JCheckBox showLabelsCheckbox; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form NodeLabelsSettingsPanel + */ + public NodeLabelsSettingsPanel() { + initComponents(); + + vizController = Lookup.getDefault().lookup(VisualizationController.class); + + // Color node + final DefaultComboBoxModel colorModeModel = new DefaultComboBoxModel<>(LabelColorMode.values()); + nodeColorCombo.setModel(colorModeModel); + nodeColorCombo.addActionListener(e -> { + LabelColorMode selected = (LabelColorMode) nodeColorCombo.getSelectedItem(); + if (selected == null) { + return; + } + vizController.setNodeLabelColorMode(selected); + selfColorLink.setVisible(selected.equals(LabelColorMode.SELF)); + }); + nodeColorCombo.setRenderer(new DefaultListCellRenderer() { + @Override + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, + boolean cellHasFocus) { + JLabel label = + (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + if (value instanceof LabelColorMode) { + label.setText(org.openide.util.NbBundle.getMessage(NodeLabelsSettingsPanel.class, + "NodeLabelColorMode." + ((LabelColorMode) value).name().toLowerCase() + ".name")); + label.setIcon(ImageUtilities.loadIcon( + "VisualizationImpl/LabelColorMode_" + ((LabelColorMode) value).name() + ".svg")); + } else { + throw new IllegalArgumentException("Expected LabelColorMode"); + } + return this; + } + }); + + selfColorLink.addActionListener(e -> { + TopComponent topComponent = WindowManager.getDefault().findTopComponent("AppearanceTopComponent"); + topComponent.open(); + topComponent.requestActive(); + + AppearanceUIController appearanceUIController = Lookup.getDefault().lookup(AppearanceUIController.class); + TransformerCategory category = DefaultCategory.LABEL_COLOR; + appearanceUIController.setSelectedElementClass("nodes"); + appearanceUIController.setSelectedCategory(category); + UniqueLabelColorTransformerUI transformerUI = + Lookup.getDefault().lookup(UniqueLabelColorTransformerUI.class); + appearanceUIController.setSelectedTransformerUI(transformerUI); + }); + selfColorLink.setToolTipText(org.openide.util.NbBundle.getMessage(NodeLabelsSettingsPanel.class, + "NodeLabelsSettingsPanel.selfColorLink.toolTipText")); + + // Size node + final DefaultComboBoxModel sizeModeModel = new DefaultComboBoxModel<>(LabelSizeMode.values()); + nodeSizeCombo.setModel(sizeModeModel); + nodeSizeCombo.addActionListener( + e -> vizController.setNodeLabelSizeMode((LabelSizeMode) nodeSizeCombo.getSelectedItem())); + nodeSizeCombo.setRenderer(new DefaultListCellRenderer() { + @Override + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, + boolean cellHasFocus) { + JLabel label = + (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + if (value instanceof LabelSizeMode) { + label.setText(org.openide.util.NbBundle.getMessage(NodeLabelsSettingsPanel.class, + "LabelSizeMode." + ((LabelSizeMode) value).name().toLowerCase() + ".name")); + label.setIcon(ImageUtilities.loadIcon( + "VisualizationImpl/LabelSizeMode_" + ((LabelSizeMode) value).name() + ".svg")); + } else { + throw new IllegalArgumentException("Expected NodeLabelSizeMode"); + } + return this; + } + }); + + // Show + showLabelsCheckbox.addItemListener(e -> { + vizController.setShowNodeLabels(showLabelsCheckbox.isSelected()); + setEnable(true); + }); + + // Font + nodeFontButton.addActionListener(e -> { + VisualizationModel model = vizController.getModel(); + Font font = JFontChooser.showDialog(WindowManager.getDefault().getMainWindow(), model.getNodeLabelFont()); + if (font != null && font != model.getNodeLabelFont()) { + vizController.setNodeLabelFont(font); + } + }); + // Slider maps [1, 100] to [NODE_LABEL_SCALE_MIN, NODE_LABEL_SCALE_MAX] + nodeSizeSlider.addChangeListener(e -> { + float scale = VizConfig.NODE_LABEL_SCALE_MIN + + (VizConfig.NODE_LABEL_SCALE_MAX - VizConfig.NODE_LABEL_SCALE_MIN) * (nodeSizeSlider.getValue() - 1) / + 99f; + vizController.setNodeLabelScale(scale); + }); + + // Attributes + attributesButton.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + VisualizationModel model = vizController.getModel(); + LabelAttributesPanel panel = new LabelAttributesPanel(model, false); + panel.setup(); + DialogDescriptor dd = new DialogDescriptor(panel, + NbBundle.getMessage(NodeLabelsSettingsPanel.class, "LabelAttributesPanel.title"), true, + NotifyDescriptor.OK_CANCEL_OPTION, null, null); + if (DialogDisplayer.getDefault().notify(dd).equals(NotifyDescriptor.OK_OPTION)) { + panel.unsetup(); + } + } + }); + attributesButton.setIcon(ImageUtilities.loadImageIcon("VisualizationImpl/configureLabels.svg", false)); + + // Hide non selected + hideNonSelectedCheckbox.addActionListener( + e -> vizController.setHideNonSelectedNodeLabels(hideNonSelectedCheckbox.isSelected())); + + // Fit to node size + fitToNodeSizeToggleButton.addActionListener( + e -> vizController.setNodeLabelFitToNodeSize(fitToNodeSizeToggleButton.isSelected())); + fitToNodeSizeToggleButton.setIcon(ImageUtilities.loadImageIcon("VisualizationImpl/fitToNodeSize.svg", false)); + fitToNodeSizeToggleButton.setToolTipText(NbBundle.getMessage(NodeLabelsSettingsPanel.class, + "NodeLabelsSettingsPanel.fitToNodeSizeToggleButton.toolTipText")); + + // Avoid overlap + avoidOverlap.addActionListener(e -> vizController.setAvoidNodeLabelOverlap(avoidOverlap.isSelected())); + } + + public void setup(VisualizationModel model) { + if (model == null) { + setEnable(false); + return; + } + refreshSharedConfig(model); + setEnable(true); + vizController.addPropertyChangeListener(this); + } + + public void unsetup(VisualizationModel model) { + vizController.removePropertyChangeListener(this); + } + + @Override + public void propertyChange(VisualizationModel model, PropertyChangeEvent evt) { + if (evt.getPropertyName().equals("showNodeLabels")) { + refreshSharedConfig(model); + } else if (evt.getPropertyName().equals("nodeLabelFont")) { + refreshSharedConfig(model); + } else if (evt.getPropertyName().equals("nodeLabelColor")) { + refreshSharedConfig(model); + } else if (evt.getPropertyName().equals("nodeLabelScale")) { + refreshSharedConfig(model); + } else if (evt.getPropertyName().equals("hideNonSelectedNodeLabels")) { + refreshSharedConfig(model); + } else if (evt.getPropertyName().equals("nodeLabelSizeMode")) { + refreshSharedConfig(model); + } else if (evt.getPropertyName().equals("nodeLabelColorMode")) { + refreshSharedConfig(model); + } else if (evt.getPropertyName().equals("nodeLabelFitToNodeSize")) { + refreshSharedConfig(model); + } else if (evt.getPropertyName().equals("avoidNodeLabelOverlap")) { + refreshSharedConfig(model); + } + } + + private void refreshSharedConfig(VisualizationModel vizModel) { + if (showLabelsCheckbox.isSelected() != vizModel.isShowNodeLabels()) { + showLabelsCheckbox.setSelected(vizModel.isShowNodeLabels()); + } + if (nodeColorCombo.getSelectedItem() != vizModel.getNodeLabelColorMode()) { + nodeColorCombo.setSelectedItem(vizModel.getNodeLabelColorMode()); + } + if (nodeSizeCombo.getSelectedItem() != vizModel.getNodeLabelSizeMode()) { + nodeSizeCombo.setSelectedItem(vizModel.getNodeLabelSizeMode()); + } + nodeFontButton.setText( + vizModel.getNodeLabelFont().getFontName() + ", " + vizModel.getNodeLabelFont().getSize()); + float sliderScale = VizConfig.NODE_LABEL_SCALE_MIN + + (VizConfig.NODE_LABEL_SCALE_MAX - VizConfig.NODE_LABEL_SCALE_MIN) * (nodeSizeSlider.getValue() - 1) / 99f; + if (sliderScale != vizModel.getNodeLabelScale()) { + nodeSizeSlider.setValue(1 + (int) ((vizModel.getNodeLabelScale() - VizConfig.NODE_LABEL_SCALE_MIN) / + (VizConfig.NODE_LABEL_SCALE_MAX - VizConfig.NODE_LABEL_SCALE_MIN) * 99)); + } + if (hideNonSelectedCheckbox.isSelected() != vizModel.isHideNonSelectedNodeLabels()) { + hideNonSelectedCheckbox.setSelected(vizModel.isHideNonSelectedNodeLabels()); + } + if (fitToNodeSizeToggleButton.isSelected() != vizModel.isNodeLabelFitToNodeSize()) { + fitToNodeSizeToggleButton.setSelected(vizModel.isNodeLabelFitToNodeSize()); + } + if (avoidOverlap.isSelected() != vizModel.isAvoidNodeLabelOverlap()) { + avoidOverlap.setSelected(vizModel.isAvoidNodeLabelOverlap()); + } + selfColorLink.setVisible(nodeColorCombo.getSelectedItem() == LabelColorMode.SELF); + } + + private void setEnable(boolean enable) { + showLabelsCheckbox.setEnabled(enable); + nodeColorCombo.setEnabled(enable && showLabelsCheckbox.isSelected()); + labelNodeColor.setEnabled(enable && showLabelsCheckbox.isSelected()); + nodeFontButton.setEnabled(enable && showLabelsCheckbox.isSelected()); + labelNodeFont.setEnabled(enable && showLabelsCheckbox.isSelected()); + nodeSizeSlider.setEnabled(enable && showLabelsCheckbox.isSelected()); + labelNodeScale.setEnabled(enable && showLabelsCheckbox.isSelected()); + nodeSizeCombo.setEnabled(enable && showLabelsCheckbox.isSelected()); + labelNodeSize.setEnabled(enable && showLabelsCheckbox.isSelected()); + fitToNodeSizeToggleButton.setEnabled(enable && showLabelsCheckbox.isSelected()); + hideNonSelectedCheckbox.setEnabled(enable && showLabelsCheckbox.isSelected()); + avoidOverlap.setEnabled(enable && showLabelsCheckbox.isSelected()); + attributesButton.setEnabled(enable && showLabelsCheckbox.isSelected()); + selfColorLink.setEnabled(enable && showLabelsCheckbox.isSelected()); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + showLabelsCheckbox = new javax.swing.JCheckBox(); + labelNodeColor = new javax.swing.JLabel(); + nodeColorCombo = new javax.swing.JComboBox<>(); + labelNodeFont = new javax.swing.JLabel(); + nodeFontButton = new javax.swing.JButton(); + labelNodeScale = new javax.swing.JLabel(); + nodeSizeSlider = new javax.swing.JSlider(); + labelNodeSize = new javax.swing.JLabel(); + nodeSizeCombo = new javax.swing.JComboBox<>(); + fitToNodeSizeToggleButton = new javax.swing.JToggleButton(); + hideNonSelectedCheckbox = new javax.swing.JCheckBox(); + attributesButton = new javax.swing.JButton(); + selfColorLink = new org.jdesktop.swingx.JXHyperlink(); + avoidOverlap = new javax.swing.JCheckBox(); + + showLabelsCheckbox.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N + showLabelsCheckbox.setText(org.openide.util.NbBundle.getMessage(NodeLabelsSettingsPanel.class, + "NodeLabelsSettingsPanel.showLabelsCheckbox.text")); // NOI18N + + labelNodeColor.setText(org.openide.util.NbBundle.getMessage(NodeLabelsSettingsPanel.class, + "NodeLabelsSettingsPanel.labelNodeColor.text")); // NOI18N + + labelNodeFont.setText(org.openide.util.NbBundle.getMessage(NodeLabelsSettingsPanel.class, + "NodeLabelsSettingsPanel.labelNodeFont.text")); // NOI18N + labelNodeFont.setMaximumSize(new java.awt.Dimension(60, 15)); + + nodeFontButton.setText(org.openide.util.NbBundle.getMessage(NodeLabelsSettingsPanel.class, + "NodeLabelsSettingsPanel.nodeFontButton.text")); // NOI18N + + labelNodeScale.setText(org.openide.util.NbBundle.getMessage(NodeLabelsSettingsPanel.class, + "NodeLabelsSettingsPanel.labelNodeScale.text")); // NOI18N + + nodeSizeSlider.setMinimum(1); + + labelNodeSize.setText(org.openide.util.NbBundle.getMessage(NodeLabelsSettingsPanel.class, + "NodeLabelsSettingsPanel.labelNodeSize.text")); // NOI18N + + fitToNodeSizeToggleButton.setText(org.openide.util.NbBundle.getMessage(NodeLabelsSettingsPanel.class, + "NodeLabelsSettingsPanel.fitToNodeSizeToggleButton.text")); // NOI18N + + hideNonSelectedCheckbox.setText(org.openide.util.NbBundle.getMessage(NodeLabelsSettingsPanel.class, + "NodeLabelsSettingsPanel.hideNonSelectedCheckbox.text")); // NOI18N + hideNonSelectedCheckbox.setBorder(null); + hideNonSelectedCheckbox.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT); + hideNonSelectedCheckbox.setMargin(new java.awt.Insets(2, 0, 2, 2)); + + attributesButton.setText(org.openide.util.NbBundle.getMessage(NodeLabelsSettingsPanel.class, + "NodeLabelsSettingsPanel.attributesButton.text")); // NOI18N + + selfColorLink.setText(org.openide.util.NbBundle.getMessage(NodeLabelsSettingsPanel.class, + "NodeLabelsSettingsPanel.selfColorLink.text")); // NOI18N + + avoidOverlap.setText(org.openide.util.NbBundle.getMessage(NodeLabelsSettingsPanel.class, + "NodeLabelsSettingsPanel.avoidOverlap.text")); // NOI18N + avoidOverlap.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT); + avoidOverlap.setMargin(new java.awt.Insets(2, 0, 2, 2)); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(19, 19, 19) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(labelNodeColor) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(nodeColorCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 145, + javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createSequentialGroup() + .addComponent(labelNodeSize) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(nodeSizeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 145, + javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(13, 13, 13) + .addComponent(fitToNodeSizeToggleButton)) + .addGroup(layout.createSequentialGroup() + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(selfColorLink, javax.swing.GroupLayout.PREFERRED_SIZE, 31, + javax.swing.GroupLayout.PREFERRED_SIZE))) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addGroup(layout.createSequentialGroup() + .addComponent(labelNodeFont, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(nodeFontButton, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addComponent(hideNonSelectedCheckbox)) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(18, 18, 18) + .addComponent(labelNodeScale) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(nodeSizeSlider, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(attributesButton, javax.swing.GroupLayout.PREFERRED_SIZE, 125, + javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(layout.createSequentialGroup() + .addGap(18, 18, 18) + .addComponent(avoidOverlap)))) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(showLabelsCheckbox))) + .addContainerGap(99, Short.MAX_VALUE)) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addComponent(showLabelsCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelNodeColor) + .addComponent(nodeColorCombo, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(labelNodeFont, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(nodeFontButton) + .addComponent(labelNodeScale) + .addComponent(nodeSizeSlider, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(selfColorLink, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(attributesButton)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelNodeSize) + .addComponent(nodeSizeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(fitToNodeSizeToggleButton) + .addComponent(hideNonSelectedCheckbox) + .addComponent(avoidOverlap)) + .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + ); + }// //GEN-END:initComponents +} + + diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/NodeSettingsPanel.form b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/NodeSettingsPanel.form new file mode 100644 index 0000000000..3daeb9dd48 --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/NodeSettingsPanel.form @@ -0,0 +1,89 @@ + + +
              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/NodeSettingsPanel.java b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/NodeSettingsPanel.java new file mode 100644 index 0000000000..ae9bd94016 --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/NodeSettingsPanel.java @@ -0,0 +1,185 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.visualization.collapse; + +import java.beans.PropertyChangeEvent; +import org.gephi.visualization.VizConfig; +import org.gephi.visualization.api.VisualizationController; +import org.gephi.visualization.api.VisualizationModel; +import org.gephi.visualization.api.VisualizationPropertyChangeListener; +import org.openide.util.Lookup; + +/** + * @author Mathieu Bastian + */ +public class NodeSettingsPanel extends javax.swing.JPanel implements VisualizationPropertyChangeListener { + + private final VisualizationController vizController; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel labelScale; + private javax.swing.JPanel scalePanel; + private javax.swing.JSlider scaleSlider; + private javax.swing.JCheckBox showNodesCheckbox; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form NodeSettingsPanel + */ + public NodeSettingsPanel() { + initComponents(); + + vizController = Lookup.getDefault().lookup(VisualizationController.class); + + // Override generated minimum; logarithmic slider [0, 100] β†’ [NODE_SCALE_MIN, NODE_SCALE_MAX], + // centred (slider=50) at the default value (geometric mean of MIN and MAX). + scaleSlider.setMinimum(0); + scaleSlider.addChangeListener(e -> { + float scale = VizConfig.NODE_SCALE_MIN * + (float) Math.pow((double) VizConfig.NODE_SCALE_MAX / VizConfig.NODE_SCALE_MIN, + scaleSlider.getValue() / 100.0); + vizController.setNodeScale(scale); + }); + } + + public void setup(VisualizationModel model) { + if (model == null) { + setEnable(false); + return; + } + refreshSharedConfig(model); + setEnable(true); + vizController.addPropertyChangeListener(this); + } + + public void unsetup(VisualizationModel model) { + vizController.removePropertyChangeListener(this); + } + + @Override + public void propertyChange(VisualizationModel model, PropertyChangeEvent evt) { + if (evt.getPropertyName().equals("nodeScale")) { + refreshSharedConfig(model); + } + } + + private void refreshSharedConfig(VisualizationModel vizModel) { + int targetSlider = (int) Math.round(Math.log((double) vizModel.getNodeScale() / VizConfig.NODE_SCALE_MIN) / + Math.log((double) VizConfig.NODE_SCALE_MAX / VizConfig.NODE_SCALE_MIN) * 100); + if (scaleSlider.getValue() != targetSlider) { + scaleSlider.setValue(targetSlider); + } + } + + private void setEnable(boolean enable) { + scaleSlider.setEnabled(enable && showNodesCheckbox.isSelected()); + labelScale.setEnabled(enable && showNodesCheckbox.isSelected()); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + java.awt.GridBagConstraints gridBagConstraints; + + showNodesCheckbox = new javax.swing.JCheckBox(); + scalePanel = new javax.swing.JPanel(); + labelScale = new javax.swing.JLabel(); + scaleSlider = new javax.swing.JSlider(); + + showNodesCheckbox.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N + showNodesCheckbox.setSelected(true); + showNodesCheckbox.setText(org.openide.util.NbBundle.getMessage(NodeSettingsPanel.class, + "NodeSettingsPanel.showNodesCheckbox.text")); // NOI18N + showNodesCheckbox.setEnabled(false); + + scalePanel.setOpaque(false); + scalePanel.setLayout(new java.awt.GridBagLayout()); + + labelScale.setText(org.openide.util.NbBundle.getMessage(NodeSettingsPanel.class, + "NodeSettingsPanel.labelScale.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 5, 2, 0); + scalePanel.add(labelScale, gridBagConstraints); + + scaleSlider.setMinimum(1); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 1; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.weighty = 1.0; + scalePanel.add(scaleSlider, gridBagConstraints); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(21, 21, 21) + .addComponent(scalePanel, javax.swing.GroupLayout.PREFERRED_SIZE, 205, + javax.swing.GroupLayout.PREFERRED_SIZE)) + .addComponent(showNodesCheckbox)) + .addContainerGap(520, Short.MAX_VALUE)) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addContainerGap() + .addComponent(showNodesCheckbox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(scalePanel, javax.swing.GroupLayout.DEFAULT_SIZE, 61, Short.MAX_VALUE) + .addGap(7, 7, 7)) + ); + }// //GEN-END:initComponents +} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/VizExtendedBar.form b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/VizExtendedBar.form similarity index 100% rename from modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/VizExtendedBar.form rename to modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/VizExtendedBar.form diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/VizExtendedBar.java b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/VizExtendedBar.java new file mode 100644 index 0000000000..50d2df0480 --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/VizExtendedBar.java @@ -0,0 +1,102 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.visualization.collapse; + +import javax.swing.JComponent; + +/** + * @author Mathieu Bastian + */ +public class VizExtendedBar extends javax.swing.JPanel { + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JSeparator separator; + private javax.swing.JTabbedPane tabbedPane; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form VizExtendedBar + */ + public VizExtendedBar(CollapseGroup[] groups) { + initComponents(); + + for (CollapseGroup g : groups) { + if (g.hasExtended()) { + JComponent c = g.getExtendedComponent(); + if (c != null) { + tabbedPane.addTab(g.getName(), c); + } + } + } + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + separator = new javax.swing.JSeparator(); + tabbedPane = new javax.swing.JTabbedPane(); + setOpaque(true); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(separator, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE) + .addComponent(tabbedPane, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(separator, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(tabbedPane, javax.swing.GroupLayout.DEFAULT_SIZE, 97, Short.MAX_VALUE)) + ); + }// //GEN-END:initComponents +} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/VizToolbar.java b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/VizToolbar.java similarity index 87% rename from modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/VizToolbar.java rename to modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/VizToolbar.java index 4be6218467..a781f56366 100644 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/VizToolbar.java +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/collapse/VizToolbar.java @@ -38,8 +38,9 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.visualization.component; + */ + +package org.gephi.desktop.visualization.collapse; import java.awt.Component; import javax.swing.BorderFactory; @@ -47,22 +48,24 @@ Development and Distribution License("CDDL") (collectively, the import javax.swing.JComponent; import javax.swing.JToolBar; import javax.swing.SwingUtilities; -import javax.swing.UIManager; import org.gephi.ui.utils.UIUtils; /** - * * @author Mathieu Bastian */ public class VizToolbar extends JToolBar { - public VizToolbar(VizToolbarGroup[] groups) { + public VizToolbar(CollapseGroup[] groups) { initDesign(); - for (VizToolbarGroup g : groups) { - addSeparator(); - for (JComponent c : g.getToolbarComponents()) { - add(c); + for (CollapseGroup g : groups) { + if (g.drawSeparator()) { + addSeparator(); + } + if (g.hasToolbar()) { + for (JComponent c : g.getToolbarComponents()) { + add(c); + } } } } @@ -71,9 +74,7 @@ private void initDesign() { setFloatable(false); putClientProperty("JToolBar.isRollover", Boolean.TRUE); //NOI18N setBorder(BorderFactory.createEmptyBorder(2, 0, 4, 0)); - if (UIUtils.isAquaLookAndFeel()) { - setBackground(UIManager.getColor("NbExplorerView.background")); - } + setOpaque(true); } public void setEnable(final boolean enabled) { diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/options/DefaultOptionsPanelController.java b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/options/DefaultOptionsPanelController.java similarity index 92% rename from modules/VisualizationImpl/src/main/java/org/gephi/visualization/options/DefaultOptionsPanelController.java rename to modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/options/DefaultOptionsPanelController.java index 8df9cdbf33..f65b827166 100644 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/options/DefaultOptionsPanelController.java +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/options/DefaultOptionsPanelController.java @@ -38,8 +38,9 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.visualization.options; + */ + +package org.gephi.desktop.visualization.options; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; @@ -48,10 +49,15 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.HelpCtx; import org.openide.util.Lookup; +@OptionsPanelController.SubRegistration(location = "Gephi", + displayName = "#AdvancedOption_DisplayName_Default", + keywords = "#AdvancedOption_Keywords_Default", + keywordsCategory = "Gephi/OpenGL", + position = 400) public final class DefaultOptionsPanelController extends OptionsPanelController { - private DefaultPanel panel; private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); + private DefaultPanel panel; private boolean changed; @Override diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/options/DefaultPanel.form b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/options/DefaultPanel.form new file mode 100644 index 0000000000..33293d59b9 --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/options/DefaultPanel.form @@ -0,0 +1,774 @@ + + +
              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/options/DefaultPanel.java b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/options/DefaultPanel.java new file mode 100644 index 0000000000..f059d9df2f --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/options/DefaultPanel.java @@ -0,0 +1,1036 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.visualization.options; + +import com.connectina.swing.fontchooser.JFontChooser; +import java.awt.Component; +import java.awt.Font; +import java.util.Locale; +import javax.swing.DefaultComboBoxModel; +import javax.swing.DefaultListCellRenderer; +import javax.swing.JLabel; +import javax.swing.JList; +import org.gephi.desktop.visualization.collapse.EdgeSettingsPanel; +import org.gephi.ui.utils.ColorUtils; +import org.gephi.ui.utils.FontUtils; +import org.gephi.visualization.VizConfig; +import org.gephi.visualization.api.EdgeColorMode; +import org.gephi.visualization.api.LabelColorMode; +import org.gephi.visualization.api.LabelSizeMode; +import org.openide.util.ImageUtilities; +import org.openide.util.NbBundle; +import org.openide.util.NbPreferences; +import org.openide.windows.WindowManager; + +final class DefaultPanel extends javax.swing.JPanel { + + private final DefaultOptionsPanelController controller; + private Font nodeFont; + private Font edgeFont; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JCheckBox autoSelectNeighborCheckbox; + private javax.swing.JCheckBox avoidNodeLabelOverlapCheckbox; + private net.java.dev.colorchooser.ColorChooser backgroundColor; + private net.java.dev.colorchooser.ColorChooser edgeBothSelectionColorChooser; + private javax.swing.JComboBox edgeColorCombo; + private javax.swing.JButton edgeFontButton; + private net.java.dev.colorchooser.ColorChooser edgeInSelectionColorChooser; + private javax.swing.JComboBox edgeLabelColorCombo; + private javax.swing.JPanel edgeLabelPanel; + private javax.swing.JSlider edgeLabelScaleSlider; + private javax.swing.JComboBox edgeLabelSizeCombo; + private net.java.dev.colorchooser.ColorChooser edgeOutSelectionColorChooser; + private javax.swing.JPanel edgePanel; + private javax.swing.JSlider edgeScaleSlider; + private javax.swing.JPanel edgeSelectionColorsPanel; + private javax.swing.JCheckBox fitToNodeSizeCheckbox; + private javax.swing.JPanel globalPanel; + private javax.swing.JCheckBox hideNonSelectedEdgeLabelsCheckbox; + private javax.swing.JCheckBox hideNonSelectedEdgesCheckbox; + private javax.swing.JCheckBox hideNonSelectedNodeLabelsCheckbox; + private javax.swing.JCheckBox highlightCheckbox; + private javax.swing.JLabel labelBackground; + private javax.swing.JLabel labelEdgeBothColor; + private javax.swing.JLabel labelEdgeColor; + private javax.swing.JLabel labelEdgeFont; + private javax.swing.JLabel labelEdgeInColor; + private javax.swing.JLabel labelEdgeLabelColor; + private javax.swing.JLabel labelEdgeLabelScale; + private javax.swing.JLabel labelEdgeLabelSize; + private javax.swing.JLabel labelEdgeOutColor; + private javax.swing.JLabel labelEdgeScale; + private javax.swing.JLabel labelNodeFont; + private javax.swing.JLabel labelNodeLabelColor; + private javax.swing.JLabel labelNodeLabelScale; + private javax.swing.JLabel labelNodeLabelSize; + private javax.swing.JLabel labelNodeScale; + private javax.swing.JButton nodeFontButton; + private javax.swing.JComboBox nodeLabelColorCombo; + private javax.swing.JPanel nodeLabelPanel; + private javax.swing.JSlider nodeLabelScaleSlider; + private javax.swing.JComboBox nodeLabelSizeCombo; + private javax.swing.JPanel nodePanel; + private javax.swing.JSlider nodeScaleSlider; + private javax.swing.JCheckBox rescaleEdgeWeightCheckbox; + private javax.swing.JButton resetButton; + private javax.swing.JPanel resetPanel; + private javax.swing.JCheckBox selectionColorCheckbox; + private javax.swing.JCheckBox showEdgesCheckbox; + private org.jdesktop.swingx.JXTitledSeparator titleEdgeLabelSettings; + private org.jdesktop.swingx.JXTitledSeparator titleEdgeSettings; + private org.jdesktop.swingx.JXTitledSeparator titleGlobalSettings; + private org.jdesktop.swingx.JXTitledSeparator titleNodeLabelSettings; + private org.jdesktop.swingx.JXTitledSeparator titleNodeSettings; + private javax.swing.JCheckBox useEdgeWeightCheckbox; + // End of variables declaration//GEN-END:variables + + DefaultPanel(DefaultOptionsPanelController panelController) { + this.controller = panelController; + initComponents(); + + nodeFontButton.addActionListener(e -> { + Font font = JFontChooser.showDialog(WindowManager.getDefault().getMainWindow(), nodeFont); + if (font != null) { + nodeFont = font; + nodeFontButton.setText(nodeFont.getFontName() + ", " + nodeFont.getSize()); + controller.changed(); + } + }); + edgeFontButton.addActionListener(e -> { + Font font = JFontChooser.showDialog(WindowManager.getDefault().getMainWindow(), edgeFont); + if (font != null) { + edgeFont = font; + edgeFontButton.setText(edgeFont.getFontName() + ", " + edgeFont.getSize()); + controller.changed(); + } + }); + + nodeLabelColorCombo.setModel(new DefaultComboBoxModel<>(LabelColorMode.values())); + nodeLabelColorCombo.setRenderer(labelColorModeRenderer(false)); + nodeLabelColorCombo.addActionListener(e -> controller.changed()); + + edgeLabelColorCombo.setModel(new DefaultComboBoxModel<>(LabelColorMode.values())); + edgeLabelColorCombo.setRenderer(labelColorModeRenderer(true)); + edgeLabelColorCombo.addActionListener(e -> controller.changed()); + + nodeLabelSizeCombo.setModel(new DefaultComboBoxModel<>(LabelSizeMode.values())); + nodeLabelSizeCombo.setRenderer(labelSizeModeRenderer()); + nodeLabelSizeCombo.addActionListener(e -> controller.changed()); + + edgeLabelSizeCombo.setModel(new DefaultComboBoxModel<>(LabelSizeMode.values())); + edgeLabelSizeCombo.setRenderer(labelSizeModeRenderer()); + edgeLabelSizeCombo.addActionListener(e -> controller.changed()); + + edgeColorCombo.setModel(new DefaultComboBoxModel<>(EdgeColorMode.values())); + edgeColorCombo.setRenderer(edgeColorModeRenderer()); + edgeColorCombo.addActionListener(e -> controller.changed()); + + autoSelectNeighborCheckbox.addActionListener(e -> controller.changed()); + highlightCheckbox.addActionListener(e -> controller.changed()); + backgroundColor.addPropertyChangeListener("color", e -> controller.changed()); + nodeScaleSlider.addChangeListener(e -> controller.changed()); + nodeLabelScaleSlider.addChangeListener(e -> controller.changed()); + hideNonSelectedNodeLabelsCheckbox.addActionListener(e -> controller.changed()); + fitToNodeSizeCheckbox.addActionListener(e -> controller.changed()); + avoidNodeLabelOverlapCheckbox.addActionListener(e -> controller.changed()); + edgeLabelScaleSlider.addChangeListener(e -> controller.changed()); + hideNonSelectedEdgeLabelsCheckbox.addActionListener(e -> controller.changed()); + + edgeScaleSlider.addChangeListener(e -> controller.changed()); + showEdgesCheckbox.addActionListener(e -> controller.changed()); + hideNonSelectedEdgesCheckbox.addActionListener(e -> controller.changed()); + useEdgeWeightCheckbox.addActionListener(e -> controller.changed()); + rescaleEdgeWeightCheckbox.addActionListener(e -> controller.changed()); + selectionColorCheckbox.addActionListener(e -> controller.changed()); + edgeInSelectionColorChooser.addPropertyChangeListener("color", e -> controller.changed()); + edgeOutSelectionColorChooser.addPropertyChangeListener("color", e -> controller.changed()); + edgeBothSelectionColorChooser.addPropertyChangeListener("color", e -> controller.changed()); + } + + private DefaultListCellRenderer labelColorModeRenderer(boolean forEdges) { + return new DefaultListCellRenderer() { + @Override + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, + boolean cellHasFocus) { + JLabel label = + (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + if (value instanceof LabelColorMode mode) { + String prefix = forEdges ? "EdgeLabelColorMode." : "NodeLabelColorMode."; + label.setText(NbBundle.getMessage(EdgeSettingsPanel.class, + prefix + mode.name().toLowerCase(Locale.ROOT) + ".name")); + label.setIcon( + ImageUtilities.loadIcon("VisualizationImpl/LabelColorMode_" + mode.name() + ".svg")); + } + return label; + } + }; + } + + private DefaultListCellRenderer labelSizeModeRenderer() { + return new DefaultListCellRenderer() { + @Override + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, + boolean cellHasFocus) { + JLabel label = + (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + if (value instanceof LabelSizeMode mode) { + label.setText(NbBundle.getMessage(EdgeSettingsPanel.class, + "LabelSizeMode." + mode.name().toLowerCase(Locale.ROOT) + ".name")); + label.setIcon( + ImageUtilities.loadIcon("VisualizationImpl/LabelSizeMode_" + mode.name() + ".svg")); + } + return label; + } + }; + } + + private DefaultListCellRenderer edgeColorModeRenderer() { + return new DefaultListCellRenderer() { + @Override + public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, + boolean cellHasFocus) { + JLabel label = + (JLabel) super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); + if (value instanceof EdgeColorMode mode) { + label.setText(NbBundle.getMessage(EdgeSettingsPanel.class, + "EdgeColorMode." + mode.name().toLowerCase(Locale.ROOT) + ".name")); + label.setIcon( + ImageUtilities.loadIcon("VisualizationImpl/EdgeColorMode_" + mode.name() + ".svg")); + } + return label; + } + }; + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + java.awt.GridBagConstraints gridBagConstraints; + + titleGlobalSettings = new org.jdesktop.swingx.JXTitledSeparator(); + globalPanel = new javax.swing.JPanel(); + labelBackground = new javax.swing.JLabel(); + backgroundColor = new net.java.dev.colorchooser.ColorChooser(); + highlightCheckbox = new javax.swing.JCheckBox(); + autoSelectNeighborCheckbox = new javax.swing.JCheckBox(); + titleNodeSettings = new org.jdesktop.swingx.JXTitledSeparator(); + nodePanel = new javax.swing.JPanel(); + labelNodeScale = new javax.swing.JLabel(); + nodeScaleSlider = new javax.swing.JSlider(); + titleEdgeSettings = new org.jdesktop.swingx.JXTitledSeparator(); + edgePanel = new javax.swing.JPanel(); + labelEdgeColor = new javax.swing.JLabel(); + edgeColorCombo = new javax.swing.JComboBox<>(); + labelEdgeScale = new javax.swing.JLabel(); + edgeScaleSlider = new javax.swing.JSlider(); + showEdgesCheckbox = new javax.swing.JCheckBox(); + hideNonSelectedEdgesCheckbox = new javax.swing.JCheckBox(); + useEdgeWeightCheckbox = new javax.swing.JCheckBox(); + rescaleEdgeWeightCheckbox = new javax.swing.JCheckBox(); + selectionColorCheckbox = new javax.swing.JCheckBox(); + edgeSelectionColorsPanel = new javax.swing.JPanel(); + labelEdgeInColor = new javax.swing.JLabel(); + edgeInSelectionColorChooser = new net.java.dev.colorchooser.ColorChooser(); + labelEdgeOutColor = new javax.swing.JLabel(); + edgeOutSelectionColorChooser = new net.java.dev.colorchooser.ColorChooser(); + labelEdgeBothColor = new javax.swing.JLabel(); + edgeBothSelectionColorChooser = new net.java.dev.colorchooser.ColorChooser(); + titleNodeLabelSettings = new org.jdesktop.swingx.JXTitledSeparator(); + nodeLabelPanel = new javax.swing.JPanel(); + labelNodeFont = new javax.swing.JLabel(); + nodeFontButton = new javax.swing.JButton(); + labelNodeLabelColor = new javax.swing.JLabel(); + nodeLabelColorCombo = new javax.swing.JComboBox<>(); + labelNodeLabelSize = new javax.swing.JLabel(); + nodeLabelSizeCombo = new javax.swing.JComboBox<>(); + labelNodeLabelScale = new javax.swing.JLabel(); + nodeLabelScaleSlider = new javax.swing.JSlider(); + hideNonSelectedNodeLabelsCheckbox = new javax.swing.JCheckBox(); + fitToNodeSizeCheckbox = new javax.swing.JCheckBox(); + avoidNodeLabelOverlapCheckbox = new javax.swing.JCheckBox(); + titleEdgeLabelSettings = new org.jdesktop.swingx.JXTitledSeparator(); + edgeLabelPanel = new javax.swing.JPanel(); + labelEdgeFont = new javax.swing.JLabel(); + edgeFontButton = new javax.swing.JButton(); + labelEdgeLabelColor = new javax.swing.JLabel(); + edgeLabelColorCombo = new javax.swing.JComboBox<>(); + labelEdgeLabelSize = new javax.swing.JLabel(); + edgeLabelSizeCombo = new javax.swing.JComboBox<>(); + labelEdgeLabelScale = new javax.swing.JLabel(); + edgeLabelScaleSlider = new javax.swing.JSlider(); + hideNonSelectedEdgeLabelsCheckbox = new javax.swing.JCheckBox(); + resetPanel = new javax.swing.JPanel(); + resetButton = new javax.swing.JButton(); + + titleGlobalSettings.setFont( + titleGlobalSettings.getFont().deriveFont(titleGlobalSettings.getFont().getStyle() | java.awt.Font.BOLD)); + titleGlobalSettings.setTitle(org.openide.util.NbBundle.getMessage(DefaultPanel.class, + "DefaultPanel.titleGlobalSettings.title")); // NOI18N + + globalPanel.setOpaque(false); + globalPanel.setLayout(new java.awt.GridBagLayout()); + + org.openide.awt.Mnemonics.setLocalizedText(labelBackground, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.labelBackground.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + globalPanel.add(labelBackground, gridBagConstraints); + + backgroundColor.setMaximumSize(new java.awt.Dimension(20, 20)); + backgroundColor.setPreferredSize(new java.awt.Dimension(20, 20)); + + javax.swing.GroupLayout backgroundColorLayout = new javax.swing.GroupLayout(backgroundColor); + backgroundColor.setLayout(backgroundColorLayout); + backgroundColorLayout.setHorizontalGroup( + backgroundColorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 0, Short.MAX_VALUE) + ); + backgroundColorLayout.setVerticalGroup( + backgroundColorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 0, Short.MAX_VALUE) + ); + + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 0; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + globalPanel.add(backgroundColor, gridBagConstraints); + + org.openide.awt.Mnemonics.setLocalizedText(highlightCheckbox, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.highlightCheckbox.text")); // NOI18N + highlightCheckbox.setMargin(new java.awt.Insets(2, 0, 2, 2)); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 2; + gridBagConstraints.gridy = 0; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 20, 3, 8); + globalPanel.add(highlightCheckbox, gridBagConstraints); + + org.openide.awt.Mnemonics.setLocalizedText(autoSelectNeighborCheckbox, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, + "DefaultPanel.autoSelectNeighborCheckbox.text")); // NOI18N + autoSelectNeighborCheckbox.setMargin(new java.awt.Insets(2, 0, 2, 2)); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 1; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + globalPanel.add(autoSelectNeighborCheckbox, gridBagConstraints); + + titleNodeSettings.setBorder(javax.swing.BorderFactory.createEmptyBorder(7, 0, 0, 0)); + titleNodeSettings.setFont( + titleNodeSettings.getFont().deriveFont(titleNodeSettings.getFont().getStyle() | java.awt.Font.BOLD)); + titleNodeSettings.setTitle( + org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.titleNodeSettings.title")); // NOI18N + + nodePanel.setOpaque(false); + nodePanel.setLayout(new java.awt.GridBagLayout()); + + org.openide.awt.Mnemonics.setLocalizedText(labelNodeScale, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.labelNodeScale.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + nodePanel.add(labelNodeScale, gridBagConstraints); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 0; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + nodePanel.add(nodeScaleSlider, gridBagConstraints); + + titleEdgeSettings.setBorder(javax.swing.BorderFactory.createEmptyBorder(7, 0, 0, 0)); + titleEdgeSettings.setFont( + titleEdgeSettings.getFont().deriveFont(titleEdgeSettings.getFont().getStyle() | java.awt.Font.BOLD)); + titleEdgeSettings.setTitle( + org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.titleEdgeSettings.title")); // NOI18N + + edgePanel.setOpaque(false); + edgePanel.setLayout(new java.awt.GridBagLayout()); + + org.openide.awt.Mnemonics.setLocalizedText(labelEdgeColor, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.labelEdgeColor.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + edgePanel.add(labelEdgeColor, gridBagConstraints); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 0; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + edgePanel.add(edgeColorCombo, gridBagConstraints); + + org.openide.awt.Mnemonics.setLocalizedText(labelEdgeScale, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.labelEdgeScale.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 1; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + edgePanel.add(labelEdgeScale, gridBagConstraints); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 1; + gridBagConstraints.gridwidth = 2; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + edgePanel.add(edgeScaleSlider, gridBagConstraints); + + org.openide.awt.Mnemonics.setLocalizedText(showEdgesCheckbox, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.showEdgesCheckbox.text")); // NOI18N + showEdgesCheckbox.setMargin(new java.awt.Insets(2, 0, 2, 2)); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 2; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + edgePanel.add(showEdgesCheckbox, gridBagConstraints); + + org.openide.awt.Mnemonics.setLocalizedText(hideNonSelectedEdgesCheckbox, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, + "DefaultPanel.hideNonSelectedEdgesCheckbox.text")); // NOI18N + hideNonSelectedEdgesCheckbox.setMargin(new java.awt.Insets(2, 0, 2, 2)); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 2; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + edgePanel.add(hideNonSelectedEdgesCheckbox, gridBagConstraints); + + org.openide.awt.Mnemonics.setLocalizedText(useEdgeWeightCheckbox, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, + "DefaultPanel.useEdgeWeightCheckbox.text")); // NOI18N + useEdgeWeightCheckbox.setMargin(new java.awt.Insets(2, 0, 2, 2)); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 3; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + edgePanel.add(useEdgeWeightCheckbox, gridBagConstraints); + + org.openide.awt.Mnemonics.setLocalizedText(rescaleEdgeWeightCheckbox, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, + "DefaultPanel.rescaleEdgeWeightCheckbox.text")); // NOI18N + rescaleEdgeWeightCheckbox.setMargin(new java.awt.Insets(2, 0, 2, 2)); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 3; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + edgePanel.add(rescaleEdgeWeightCheckbox, gridBagConstraints); + + org.openide.awt.Mnemonics.setLocalizedText(selectionColorCheckbox, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, + "DefaultPanel.selectionColorCheckbox.text")); // NOI18N + selectionColorCheckbox.setMargin(new java.awt.Insets(2, 0, 2, 2)); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 4; + gridBagConstraints.gridwidth = 3; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + edgePanel.add(selectionColorCheckbox, gridBagConstraints); + + edgeSelectionColorsPanel.setOpaque(false); + + org.openide.awt.Mnemonics.setLocalizedText(labelEdgeInColor, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.labelEdgeInColor.text")); // NOI18N + edgeSelectionColorsPanel.add(labelEdgeInColor); + + edgeInSelectionColorChooser.setPreferredSize(new java.awt.Dimension(16, 16)); + edgeInSelectionColorChooser.setMaximumSize(new java.awt.Dimension(16, 16)); + + javax.swing.GroupLayout edgeInSelectionColorChooserLayout = + new javax.swing.GroupLayout(edgeInSelectionColorChooser); + edgeInSelectionColorChooser.setLayout(edgeInSelectionColorChooserLayout); + edgeInSelectionColorChooserLayout.setHorizontalGroup( + edgeInSelectionColorChooserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 14, Short.MAX_VALUE) + ); + edgeInSelectionColorChooserLayout.setVerticalGroup( + edgeInSelectionColorChooserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 14, Short.MAX_VALUE) + ); + + edgeSelectionColorsPanel.add(edgeInSelectionColorChooser); + + org.openide.awt.Mnemonics.setLocalizedText(labelEdgeOutColor, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.labelEdgeOutColor.text")); // NOI18N + edgeSelectionColorsPanel.add(labelEdgeOutColor); + + edgeOutSelectionColorChooser.setPreferredSize(new java.awt.Dimension(16, 16)); + edgeOutSelectionColorChooser.setMaximumSize(new java.awt.Dimension(16, 16)); + + javax.swing.GroupLayout edgeOutSelectionColorChooserLayout = + new javax.swing.GroupLayout(edgeOutSelectionColorChooser); + edgeOutSelectionColorChooser.setLayout(edgeOutSelectionColorChooserLayout); + edgeOutSelectionColorChooserLayout.setHorizontalGroup( + edgeOutSelectionColorChooserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 14, Short.MAX_VALUE) + ); + edgeOutSelectionColorChooserLayout.setVerticalGroup( + edgeOutSelectionColorChooserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 14, Short.MAX_VALUE) + ); + + edgeSelectionColorsPanel.add(edgeOutSelectionColorChooser); + + org.openide.awt.Mnemonics.setLocalizedText(labelEdgeBothColor, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.labelEdgeBothColor.text")); // NOI18N + edgeSelectionColorsPanel.add(labelEdgeBothColor); + + edgeBothSelectionColorChooser.setMaximumSize(new java.awt.Dimension(16, 16)); + edgeBothSelectionColorChooser.setPreferredSize(new java.awt.Dimension(16, 16)); + + javax.swing.GroupLayout edgeBothSelectionColorChooserLayout = + new javax.swing.GroupLayout(edgeBothSelectionColorChooser); + edgeBothSelectionColorChooser.setLayout(edgeBothSelectionColorChooserLayout); + edgeBothSelectionColorChooserLayout.setHorizontalGroup( + edgeBothSelectionColorChooserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 14, Short.MAX_VALUE) + ); + edgeBothSelectionColorChooserLayout.setVerticalGroup( + edgeBothSelectionColorChooserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 14, Short.MAX_VALUE) + ); + + edgeSelectionColorsPanel.add(edgeBothSelectionColorChooser); + + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 5; + gridBagConstraints.gridwidth = 3; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(0, 4, 3, 8); + edgePanel.add(edgeSelectionColorsPanel, gridBagConstraints); + + titleNodeLabelSettings.setFont(titleNodeLabelSettings.getFont() + .deriveFont(titleNodeLabelSettings.getFont().getStyle() | java.awt.Font.BOLD)); + titleNodeLabelSettings.setTitle(org.openide.util.NbBundle.getMessage(DefaultPanel.class, + "DefaultPanel.titleNodeLabelSettings.title")); // NOI18N + + nodeLabelPanel.setOpaque(false); + nodeLabelPanel.setLayout(new java.awt.GridBagLayout()); + + org.openide.awt.Mnemonics.setLocalizedText(labelNodeFont, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.labelNodeFont.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + nodeLabelPanel.add(labelNodeFont, gridBagConstraints); + + org.openide.awt.Mnemonics.setLocalizedText(nodeFontButton, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.nodeFontButton.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 0; + gridBagConstraints.gridwidth = 4; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + nodeLabelPanel.add(nodeFontButton, gridBagConstraints); + + org.openide.awt.Mnemonics.setLocalizedText(labelNodeLabelColor, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, + "DefaultPanel.labelNodeLabelColor.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 1; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + nodeLabelPanel.add(labelNodeLabelColor, gridBagConstraints); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 1; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + nodeLabelPanel.add(nodeLabelColorCombo, gridBagConstraints); + + org.openide.awt.Mnemonics.setLocalizedText(labelNodeLabelSize, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.labelNodeLabelSize.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 2; + gridBagConstraints.gridy = 1; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + nodeLabelPanel.add(labelNodeLabelSize, gridBagConstraints); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 3; + gridBagConstraints.gridy = 1; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + nodeLabelPanel.add(nodeLabelSizeCombo, gridBagConstraints); + + org.openide.awt.Mnemonics.setLocalizedText(labelNodeLabelScale, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, + "DefaultPanel.labelNodeLabelScale.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 2; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + nodeLabelPanel.add(labelNodeLabelScale, gridBagConstraints); + + nodeLabelScaleSlider.setMinimum(1); + nodeLabelScaleSlider.setValue(1); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 2; + gridBagConstraints.gridwidth = 4; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + nodeLabelPanel.add(nodeLabelScaleSlider, gridBagConstraints); + + org.openide.awt.Mnemonics.setLocalizedText(hideNonSelectedNodeLabelsCheckbox, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, + "DefaultPanel.hideNonSelectedNodeLabelsCheckbox.text")); // NOI18N + hideNonSelectedNodeLabelsCheckbox.setMargin(new java.awt.Insets(2, 0, 2, 2)); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 3; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + nodeLabelPanel.add(hideNonSelectedNodeLabelsCheckbox, gridBagConstraints); + + org.openide.awt.Mnemonics.setLocalizedText(fitToNodeSizeCheckbox, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, + "DefaultPanel.fitToNodeSizeCheckbox.text")); // NOI18N + fitToNodeSizeCheckbox.setMargin(new java.awt.Insets(2, 0, 2, 2)); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 3; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + nodeLabelPanel.add(fitToNodeSizeCheckbox, gridBagConstraints); + + org.openide.awt.Mnemonics.setLocalizedText(avoidNodeLabelOverlapCheckbox, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, + "DefaultPanel.avoidNodeLabelOverlapCheckbox.text")); // NOI18N + avoidNodeLabelOverlapCheckbox.setMargin(new java.awt.Insets(2, 0, 2, 2)); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 2; + gridBagConstraints.gridy = 3; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + nodeLabelPanel.add(avoidNodeLabelOverlapCheckbox, gridBagConstraints); + + titleEdgeLabelSettings.setBorder(javax.swing.BorderFactory.createEmptyBorder(7, 0, 0, 0)); + titleEdgeLabelSettings.setFont(titleEdgeLabelSettings.getFont() + .deriveFont(titleEdgeLabelSettings.getFont().getStyle() | java.awt.Font.BOLD)); + titleEdgeLabelSettings.setTitle(org.openide.util.NbBundle.getMessage(DefaultPanel.class, + "DefaultPanel.titleEdgeLabelSettings.title")); // NOI18N + + edgeLabelPanel.setOpaque(false); + edgeLabelPanel.setLayout(new java.awt.GridBagLayout()); + + org.openide.awt.Mnemonics.setLocalizedText(labelEdgeFont, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.labelEdgeFont.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + edgeLabelPanel.add(labelEdgeFont, gridBagConstraints); + + org.openide.awt.Mnemonics.setLocalizedText(edgeFontButton, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.edgeFontButton.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 0; + gridBagConstraints.gridwidth = 4; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + edgeLabelPanel.add(edgeFontButton, gridBagConstraints); + + org.openide.awt.Mnemonics.setLocalizedText(labelEdgeLabelColor, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, + "DefaultPanel.labelEdgeLabelColor.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 1; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + edgeLabelPanel.add(labelEdgeLabelColor, gridBagConstraints); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 1; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + edgeLabelPanel.add(edgeLabelColorCombo, gridBagConstraints); + + org.openide.awt.Mnemonics.setLocalizedText(labelEdgeLabelSize, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.labelEdgeLabelSize.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 2; + gridBagConstraints.gridy = 1; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + edgeLabelPanel.add(labelEdgeLabelSize, gridBagConstraints); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 3; + gridBagConstraints.gridy = 1; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + edgeLabelPanel.add(edgeLabelSizeCombo, gridBagConstraints); + + org.openide.awt.Mnemonics.setLocalizedText(labelEdgeLabelScale, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, + "DefaultPanel.labelEdgeLabelScale.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 2; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + edgeLabelPanel.add(labelEdgeLabelScale, gridBagConstraints); + + edgeLabelScaleSlider.setMinimum(1); + edgeLabelScaleSlider.setValue(1); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 2; + gridBagConstraints.gridwidth = 4; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + edgeLabelPanel.add(edgeLabelScaleSlider, gridBagConstraints); + + org.openide.awt.Mnemonics.setLocalizedText(hideNonSelectedEdgeLabelsCheckbox, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, + "DefaultPanel.hideNonSelectedEdgeLabelsCheckbox.text")); // NOI18N + hideNonSelectedEdgeLabelsCheckbox.setMargin(new java.awt.Insets(2, 0, 2, 2)); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 3; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(3, 8, 3, 8); + edgeLabelPanel.add(hideNonSelectedEdgeLabelsCheckbox, gridBagConstraints); + + resetPanel.setOpaque(false); + + org.openide.awt.Mnemonics.setLocalizedText(resetButton, + org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.resetButton.text")); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addComponent(resetButton) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(resetPanel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addComponent(edgePanel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(nodePanel, javax.swing.GroupLayout.Alignment.TRAILING, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addComponent(globalPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 344, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, Short.MAX_VALUE)) + .addComponent(nodeLabelPanel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(titleEdgeLabelSettings, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(titleNodeLabelSettings, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(titleEdgeSettings, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(titleGlobalSettings, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(titleNodeSettings, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) + .addContainerGap()) + .addComponent(edgeLabelPanel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(titleGlobalSettings, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(globalPanel, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(titleNodeSettings, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(0, 0, 0) + .addComponent(nodePanel, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(titleEdgeSettings, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(edgePanel, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(titleNodeLabelSettings, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(nodeLabelPanel, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(titleEdgeLabelSettings, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(edgeLabelPanel, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 19, Short.MAX_VALUE) + .addComponent(resetButton) + .addContainerGap()) + .addGroup(layout.createSequentialGroup() + .addGap(13, 13, 13) + .addComponent(resetPanel, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))) + ); + }// //GEN-END:initComponents + + private void resetButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_resetButtonActionPerformed + + java.util.prefs.Preferences prefs = NbPreferences.forModule(VizConfig.class); + prefs.remove(VizConfig.HIGHLIGHT); + prefs.remove(VizConfig.NEIGHBOUR_SELECT); + prefs.remove(VizConfig.BACKGROUND_COLOR); + prefs.remove(VizConfig.NODE_SCALE); + prefs.remove(VizConfig.NODE_LABEL_FONT); + prefs.remove(VizConfig.NODE_LABEL_COLOR_MODE); + prefs.remove(VizConfig.NODE_LABEL_SIZE_MODE); + prefs.remove(VizConfig.NODE_LABEL_SCALE); + prefs.remove(VizConfig.HIDE_NONSELECTED_NODE_LABELS); + prefs.remove(VizConfig.FIT_NODE_LABELS_TO_NODE_SIZE); + prefs.remove(VizConfig.AVOID_NODE_LABEL_OVERLAP); + prefs.remove(VizConfig.EDGE_COLOR_MODE); + prefs.remove(VizConfig.EDGE_SCALE); + prefs.remove(VizConfig.SHOW_EDGES); + prefs.remove(VizConfig.HIDE_NONSELECTED_EDGES); + prefs.remove(VizConfig.EDGE_WEIGHTED); + prefs.remove(VizConfig.EDGE_RESCALE_WEIGHT); + prefs.remove(VizConfig.SELECTEDEDGE_HAS_COLOR); + prefs.remove(VizConfig.SELECTEDEDGE_IN_COLOR); + prefs.remove(VizConfig.SELECTEDEDGE_OUT_COLOR); + prefs.remove(VizConfig.SELECTEDEDGE_BOTH_COLOR); + prefs.remove(VizConfig.EDGE_LABEL_FONT); + prefs.remove(VizConfig.EDGE_LABEL_COLOR_MODE); + prefs.remove(VizConfig.EDGE_LABEL_SIZE_MODE); + prefs.remove(VizConfig.EDGE_LABEL_SCALE); + prefs.remove(VizConfig.HIDE_NONSELECTED_EDGE_LABELS); + load(); + }//GEN-LAST:event_resetButtonActionPerformed + + void load() { + java.util.prefs.Preferences prefs = NbPreferences.forModule(VizConfig.class); + + // Global settings + highlightCheckbox.setSelected( + prefs.getBoolean(VizConfig.HIGHLIGHT, VizConfig.DEFAULT_HIGHLIGHT)); + autoSelectNeighborCheckbox.setSelected( + prefs.getBoolean(VizConfig.NEIGHBOUR_SELECT, VizConfig.DEFAULT_NEIGHBOUR_SELECT)); + backgroundColor.setColor(ColorUtils.decode( + prefs.get(VizConfig.BACKGROUND_COLOR, ColorUtils.encode(VizConfig.DEFAULT_BACKGROUND_COLOR)))); + + // Node settings + float nodeScale = prefs.getFloat(VizConfig.NODE_SCALE, VizConfig.DEFAULT_NODE_SCALE); + int nodeScaleVal = (int) Math.round( + Math.log((double) nodeScale / VizConfig.NODE_SCALE_MIN) + / Math.log((double) VizConfig.NODE_SCALE_MAX / VizConfig.NODE_SCALE_MIN) * 100); + nodeScaleSlider.setValue(Math.max(0, Math.min(100, nodeScaleVal))); + + // Node label settings + nodeFont = Font.decode( + prefs.get(VizConfig.NODE_LABEL_FONT, FontUtils.encode(VizConfig.DEFAULT_NODE_LABEL_FONT))); + nodeFontButton.setText(nodeFont.getFontName() + ", " + nodeFont.getSize()); + nodeLabelColorCombo.setSelectedItem(LabelColorMode.valueOf( + prefs.get(VizConfig.NODE_LABEL_COLOR_MODE, VizConfig.DEFAULT_NODE_LABEL_COLOR_MODE))); + nodeLabelSizeCombo.setSelectedItem(LabelSizeMode.valueOf( + prefs.get(VizConfig.NODE_LABEL_SIZE_MODE, VizConfig.DEFAULT_NODE_LABEL_SIZE_MODE))); + float nodeLabelScale = prefs.getFloat(VizConfig.NODE_LABEL_SCALE, VizConfig.DEFAULT_NODE_LABEL_SCALE); + int nodeLabelScaleVal = 1 + (int) ( + (nodeLabelScale - VizConfig.NODE_LABEL_SCALE_MIN) + / (VizConfig.NODE_LABEL_SCALE_MAX - VizConfig.NODE_LABEL_SCALE_MIN) * 99); + nodeLabelScaleSlider.setValue(Math.max(1, Math.min(100, nodeLabelScaleVal))); + hideNonSelectedNodeLabelsCheckbox.setSelected( + prefs.getBoolean(VizConfig.HIDE_NONSELECTED_NODE_LABELS, VizConfig.DEFAULT_HIDE_NONSELECTED_NODE_LABELS)); + fitToNodeSizeCheckbox.setSelected( + prefs.getBoolean(VizConfig.FIT_NODE_LABELS_TO_NODE_SIZE, VizConfig.DEFAULT_FIT_NODE_LABELS_TO_NODE_SIZE)); + avoidNodeLabelOverlapCheckbox.setSelected( + prefs.getBoolean(VizConfig.AVOID_NODE_LABEL_OVERLAP, VizConfig.DEFAULT_AVOID_NODE_LABEL_OVERLAP)); + + // Edge settings + edgeColorCombo.setSelectedItem(EdgeColorMode.valueOf( + prefs.get(VizConfig.EDGE_COLOR_MODE, VizConfig.DEFAULT_EDGE_COLOR_MODE.name()))); + float edgeScale = prefs.getFloat(VizConfig.EDGE_SCALE, VizConfig.DEFAULT_EDGE_SCALE); + int edgeScaleVal = (int) Math.round( + Math.log((double) edgeScale / VizConfig.EDGE_SCALE_MIN) + / Math.log((double) VizConfig.EDGE_SCALE_MAX / VizConfig.EDGE_SCALE_MIN) * 100); + edgeScaleSlider.setValue(Math.max(0, Math.min(100, edgeScaleVal))); + showEdgesCheckbox.setSelected( + prefs.getBoolean(VizConfig.SHOW_EDGES, VizConfig.DEFAULT_SHOW_EDGES)); + hideNonSelectedEdgesCheckbox.setSelected( + prefs.getBoolean(VizConfig.HIDE_NONSELECTED_EDGES, VizConfig.DEFAULT_HIDE_NONSELECTED_EDGES)); + useEdgeWeightCheckbox.setSelected( + prefs.getBoolean(VizConfig.EDGE_WEIGHTED, VizConfig.DEFAULT_EDGE_WEIGHTED)); + rescaleEdgeWeightCheckbox.setSelected( + prefs.getBoolean(VizConfig.EDGE_RESCALE_WEIGHT, VizConfig.DEFAULT_EDGE_RESCALE_WEIGHTED)); + selectionColorCheckbox.setSelected( + prefs.getBoolean(VizConfig.SELECTEDEDGE_HAS_COLOR, VizConfig.DEFAULT_SELECTEDEDGE_HAS_COLOR)); + edgeInSelectionColorChooser.setColor(ColorUtils.decode( + prefs.get(VizConfig.SELECTEDEDGE_IN_COLOR, ColorUtils.encode(VizConfig.DEFAULT_SELECTEDEDGE_IN_COLOR)))); + edgeOutSelectionColorChooser.setColor(ColorUtils.decode( + prefs.get(VizConfig.SELECTEDEDGE_OUT_COLOR, ColorUtils.encode(VizConfig.DEFAULT_SELECTEDEDGE_OUT_COLOR)))); + edgeBothSelectionColorChooser.setColor(ColorUtils.decode( + prefs.get(VizConfig.SELECTEDEDGE_BOTH_COLOR, + ColorUtils.encode(VizConfig.DEFAULT_SELECTEDEDGE_BOTH_COLOR)))); + + // Edge label settings + edgeFont = Font.decode( + prefs.get(VizConfig.EDGE_LABEL_FONT, FontUtils.encode(VizConfig.DEFAULT_EDGE_LABEL_FONT))); + edgeFontButton.setText(edgeFont.getFontName() + ", " + edgeFont.getSize()); + edgeLabelColorCombo.setSelectedItem(LabelColorMode.valueOf( + prefs.get(VizConfig.EDGE_LABEL_COLOR_MODE, VizConfig.DEFAULT_EDGE_LABEL_COLOR_MODE))); + edgeLabelSizeCombo.setSelectedItem(LabelSizeMode.valueOf( + prefs.get(VizConfig.EDGE_LABEL_SIZE_MODE, VizConfig.DEFAULT_EDGE_LABEL_SIZE_MODE))); + float edgeLabelScale = prefs.getFloat(VizConfig.EDGE_LABEL_SCALE, VizConfig.DEFAULT_EDGE_LABEL_SCALE); + int edgeLabelScaleVal = 1 + (int) ( + (edgeLabelScale - VizConfig.EDGE_LABEL_SCALE_MIN) + / (VizConfig.EDGE_LABEL_SCALE_MAX - VizConfig.EDGE_LABEL_SCALE_MIN) * 99); + edgeLabelScaleSlider.setValue(Math.max(1, Math.min(100, edgeLabelScaleVal))); + hideNonSelectedEdgeLabelsCheckbox.setSelected( + prefs.getBoolean(VizConfig.HIDE_NONSELECTED_EDGE_LABELS, VizConfig.DEFAULT_HIDE_NONSELECTED_EDGE_LABELS)); + } + + void store() { + java.util.prefs.Preferences prefs = NbPreferences.forModule(VizConfig.class); + + // Global settings + prefs.putBoolean(VizConfig.HIGHLIGHT, highlightCheckbox.isSelected()); + prefs.putBoolean(VizConfig.NEIGHBOUR_SELECT, autoSelectNeighborCheckbox.isSelected()); + prefs.put(VizConfig.BACKGROUND_COLOR, ColorUtils.encode(backgroundColor.getColor())); + + // Node settings + float nodeScale = VizConfig.NODE_SCALE_MIN * (float) Math.pow( + (double) VizConfig.NODE_SCALE_MAX / VizConfig.NODE_SCALE_MIN, nodeScaleSlider.getValue() / 100.0); + prefs.putFloat(VizConfig.NODE_SCALE, nodeScale); + + // Node label settings + prefs.put(VizConfig.NODE_LABEL_FONT, FontUtils.encode(nodeFont)); + LabelColorMode nodeLabelColorMode = (LabelColorMode) nodeLabelColorCombo.getSelectedItem(); + if (nodeLabelColorMode != null) { + prefs.put(VizConfig.NODE_LABEL_COLOR_MODE, nodeLabelColorMode.name()); + } + LabelSizeMode nodeLabelSizeMode = (LabelSizeMode) nodeLabelSizeCombo.getSelectedItem(); + if (nodeLabelSizeMode != null) { + prefs.put(VizConfig.NODE_LABEL_SIZE_MODE, nodeLabelSizeMode.name()); + } + float nodeLabelScale = VizConfig.NODE_LABEL_SCALE_MIN + + (VizConfig.NODE_LABEL_SCALE_MAX - VizConfig.NODE_LABEL_SCALE_MIN) + * (nodeLabelScaleSlider.getValue() - 1) / 99f; + prefs.putFloat(VizConfig.NODE_LABEL_SCALE, nodeLabelScale); + prefs.putBoolean(VizConfig.HIDE_NONSELECTED_NODE_LABELS, hideNonSelectedNodeLabelsCheckbox.isSelected()); + prefs.putBoolean(VizConfig.FIT_NODE_LABELS_TO_NODE_SIZE, fitToNodeSizeCheckbox.isSelected()); + prefs.putBoolean(VizConfig.AVOID_NODE_LABEL_OVERLAP, avoidNodeLabelOverlapCheckbox.isSelected()); + + // Edge settings + EdgeColorMode edgeColorMode = (EdgeColorMode) edgeColorCombo.getSelectedItem(); + if (edgeColorMode != null) { + prefs.put(VizConfig.EDGE_COLOR_MODE, edgeColorMode.name()); + } + float edgeScale = VizConfig.EDGE_SCALE_MIN * (float) Math.pow( + (double) VizConfig.EDGE_SCALE_MAX / VizConfig.EDGE_SCALE_MIN, edgeScaleSlider.getValue() / 100.0); + prefs.putFloat(VizConfig.EDGE_SCALE, edgeScale); + prefs.putBoolean(VizConfig.SHOW_EDGES, showEdgesCheckbox.isSelected()); + prefs.putBoolean(VizConfig.HIDE_NONSELECTED_EDGES, hideNonSelectedEdgesCheckbox.isSelected()); + prefs.putBoolean(VizConfig.EDGE_WEIGHTED, useEdgeWeightCheckbox.isSelected()); + prefs.putBoolean(VizConfig.EDGE_RESCALE_WEIGHT, rescaleEdgeWeightCheckbox.isSelected()); + prefs.putBoolean(VizConfig.SELECTEDEDGE_HAS_COLOR, selectionColorCheckbox.isSelected()); + prefs.put(VizConfig.SELECTEDEDGE_IN_COLOR, ColorUtils.encode(edgeInSelectionColorChooser.getColor())); + prefs.put(VizConfig.SELECTEDEDGE_OUT_COLOR, ColorUtils.encode(edgeOutSelectionColorChooser.getColor())); + prefs.put(VizConfig.SELECTEDEDGE_BOTH_COLOR, ColorUtils.encode(edgeBothSelectionColorChooser.getColor())); + + // Edge label settings + prefs.put(VizConfig.EDGE_LABEL_FONT, FontUtils.encode(edgeFont)); + LabelColorMode edgeLabelColorMode = (LabelColorMode) edgeLabelColorCombo.getSelectedItem(); + if (edgeLabelColorMode != null) { + prefs.put(VizConfig.EDGE_LABEL_COLOR_MODE, edgeLabelColorMode.name()); + } + LabelSizeMode edgeLabelSizeMode = (LabelSizeMode) edgeLabelSizeCombo.getSelectedItem(); + if (edgeLabelSizeMode != null) { + prefs.put(VizConfig.EDGE_LABEL_SIZE_MODE, edgeLabelSizeMode.name()); + } + float edgeLabelScale = VizConfig.EDGE_LABEL_SCALE_MIN + + (VizConfig.EDGE_LABEL_SCALE_MAX - VizConfig.EDGE_LABEL_SCALE_MIN) + * (edgeLabelScaleSlider.getValue() - 1) / 99f; + prefs.putFloat(VizConfig.EDGE_LABEL_SCALE, edgeLabelScale); + prefs.putBoolean(VizConfig.HIDE_NONSELECTED_EDGE_LABELS, hideNonSelectedEdgeLabelsCheckbox.isSelected()); + } + + boolean valid() { + return true; + } +} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/options/OpenGLOptionsPanelController.java b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/options/OpenGLOptionsPanelController.java similarity index 92% rename from modules/VisualizationImpl/src/main/java/org/gephi/visualization/options/OpenGLOptionsPanelController.java rename to modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/options/OpenGLOptionsPanelController.java index f3d25ab157..25795ebf80 100644 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/options/OpenGLOptionsPanelController.java +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/options/OpenGLOptionsPanelController.java @@ -38,8 +38,9 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.visualization.options; + */ + +package org.gephi.desktop.visualization.options; import java.beans.PropertyChangeListener; import java.beans.PropertyChangeSupport; @@ -48,10 +49,15 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.util.HelpCtx; import org.openide.util.Lookup; +@OptionsPanelController.SubRegistration(location = "Gephi", + displayName = "#AdvancedOption_DisplayName_OpenGL", + keywords = "#AdvancedOption_Keywords_OpenGL", + keywordsCategory = "Gephi/OpenGL", + position = 500) public final class OpenGLOptionsPanelController extends OptionsPanelController { - private OpenGLPanel panel; private final PropertyChangeSupport pcs = new PropertyChangeSupport(this); + private OpenGLPanel panel; private boolean changed; @Override diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/options/OpenGLPanel.form b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/options/OpenGLPanel.form new file mode 100644 index 0000000000..ef822f6a4f --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/options/OpenGLPanel.form @@ -0,0 +1,176 @@ + + +
              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/options/OpenGLPanel.java b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/options/OpenGLPanel.java new file mode 100644 index 0000000000..67ba9485de --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/options/OpenGLPanel.java @@ -0,0 +1,274 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.visualization.options; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import org.gephi.visualization.VizConfig; +import org.gephi.visualization.VizController; +import org.gephi.viz.engine.jogl.util.gl.capabilities.GLCapabilitiesSummary; +import org.openide.LifecycleManager; +import org.openide.awt.NotificationDisplayer; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; +import org.openide.util.NbPreferences; + +final class OpenGLPanel extends javax.swing.JPanel { + + private final OpenGLOptionsPanelController controller; + //Settings + private int antiAliasing = 0; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JComboBox antialisaingCombobox; + private javax.swing.JCheckBox debugLogs; + private javax.swing.JCheckBox fpsCheckbox; + private org.jdesktop.swingx.JXTitledSeparator jXTitledSeparator1; + private javax.swing.JLabel labelAntialiasing; + private javax.swing.JLabel labelShow; + private javax.swing.JTextArea openInfoText; + private javax.swing.JPanel openglInfoPanel; + private javax.swing.JButton resetButton; + // End of variables declaration//GEN-END:variables + + OpenGLPanel(OpenGLOptionsPanelController controller) { + this.controller = controller; + initComponents(); + + antialisaingCombobox.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent arg0) { + if (antialisaingCombobox.getSelectedIndex() > 0) { + antiAliasing = (int) Math.pow(2, antialisaingCombobox.getSelectedIndex()); + } else { + antiAliasing = 0; + } + } + }); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + // //GEN-BEGIN:initComponents + private void initComponents() { + java.awt.GridBagConstraints gridBagConstraints; + + jXTitledSeparator1 = new org.jdesktop.swingx.JXTitledSeparator(); + labelAntialiasing = new javax.swing.JLabel(); + antialisaingCombobox = new javax.swing.JComboBox(); + labelShow = new javax.swing.JLabel(); + fpsCheckbox = new javax.swing.JCheckBox(); + resetButton = new javax.swing.JButton(); + openglInfoPanel = new javax.swing.JPanel(); + openInfoText = new javax.swing.JTextArea(); + debugLogs = new javax.swing.JCheckBox(); + + jXTitledSeparator1.setTitle( + org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.jXTitledSeparator1.title")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(labelAntialiasing, + org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.labelAntialiasing.text")); // NOI18N + + antialisaingCombobox.setModel( + new javax.swing.DefaultComboBoxModel(new String[] {"0x", "2x", "4x", "8x", "16x"})); + + org.openide.awt.Mnemonics.setLocalizedText(labelShow, + org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.labelShow.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(fpsCheckbox, + org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.fpsCheckbox.text")); // NOI18N + fpsCheckbox.setMargin(new java.awt.Insets(2, 0, 2, 2)); + + org.openide.awt.Mnemonics.setLocalizedText(resetButton, + org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.resetButton.text")); // NOI18N + resetButton.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + resetButtonActionPerformed(evt); + } + }); + + openglInfoPanel.setLayout(new java.awt.GridBagLayout()); + + openInfoText.setEditable(false); + openInfoText.setColumns(5); + openInfoText.setFont(new java.awt.Font("Monospaced", 0, 11)); // NOI18N + openInfoText.setRows(3); + openInfoText.setText("Vendor\nModel\nVersion"); // NOI18N + openInfoText.setOpaque(false); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.weighty = 1.0; + openglInfoPanel.add(openInfoText, gridBagConstraints); + + org.openide.awt.Mnemonics.setLocalizedText(debugLogs, + org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.debugLogs.text")); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 1; + gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.SOUTH; + openglInfoPanel.add(debugLogs, gridBagConstraints); + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(jXTitledSeparator1, javax.swing.GroupLayout.DEFAULT_SIZE, 679, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(resetButton) + .addGroup(layout.createSequentialGroup() + .addGap(10, 10, 10) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(labelShow, javax.swing.GroupLayout.PREFERRED_SIZE, 52, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(labelAntialiasing)) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGap(20, 20, 20) + .addComponent(fpsCheckbox)) + .addGroup(layout.createSequentialGroup() + .addGap(18, 18, 18) + .addComponent(antialisaingCombobox, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.PREFERRED_SIZE))))) + .addGap(0, 0, Short.MAX_VALUE)) + .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() + .addGap(0, 0, Short.MAX_VALUE) + .addComponent(openglInfoPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 209, + javax.swing.GroupLayout.PREFERRED_SIZE))) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(jXTitledSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelAntialiasing) + .addComponent(antialisaingCombobox)) + .addGap(18, 18, 18) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelShow, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(fpsCheckbox)) + .addGap(48, 48, 48)) + .addGroup(layout.createSequentialGroup() + .addComponent(openglInfoPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 86, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18))) + .addComponent(resetButton) + .addContainerGap()) + ); + }// //GEN-END:initComponents + + private void resetButtonActionPerformed( + java.awt.event.ActionEvent evt) {//GEN-FIRST:event_resetButtonActionPerformed + + NbPreferences.forModule(VizConfig.class).remove(VizConfig.ANTIALIASING); + NbPreferences.forModule(VizConfig.class).remove(VizConfig.SHOW_FPS); + + load(); + }//GEN-LAST:event_resetButtonActionPerformed + + void load() { + antiAliasing = + NbPreferences.forModule(VizConfig.class).getInt(VizConfig.ANTIALIASING, VizConfig.DEFAULT_ANTIALIASING); + antialisaingCombobox + .setSelectedIndex(antiAliasing == 0 ? 0 : Math.round((float) (Math.log(antiAliasing) / Math.log(2)))); + fpsCheckbox.setSelected( + NbPreferences.forModule(VizConfig.class).getBoolean(VizConfig.SHOW_FPS, VizConfig.DEFAULT_SHOW_FPS)); + debugLogs.setSelected( + NbPreferences.forModule(VizConfig.class) + .getBoolean(VizConfig.ENGINE_OPENGL_DEBUG, VizConfig.DEFAULT_ENGINE_OPENGL_DEBUG) + ); + + //OpenGLInfo + VizController vizController = Lookup.getDefault().lookup(VizController.class); + vizController.getEngine().ifPresent( + engine -> { + GLCapabilitiesSummary summary = engine.getOpenGLOptions().getGlCapabilitiesSummary(); + String vendor = summary.getVendor(); + String renderer = summary.getRenderer(); + String version = summary.getVersionString(); + String shaderVersion = summary.getShadingLanguageVersion(); + openInfoText.setText(vendor + "\n" + renderer + "\nOpenGL " + version + "\nGLSL " + shaderVersion); + } + ); + } + + void store() { + NbPreferences.forModule(VizConfig.class).putInt(VizConfig.ANTIALIASING, antiAliasing); + NbPreferences.forModule(VizConfig.class).putBoolean(VizConfig.SHOW_FPS, fpsCheckbox.isSelected()); + NbPreferences.forModule(VizConfig.class).putBoolean( + VizConfig.ENGINE_OPENGL_DEBUG, + debugLogs.isSelected() + ); + + NotificationDisplayer.getDefault().notify(NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.restart.title"), + ImageUtilities.loadImageIcon("org/netbeans/core/windows/resources/restart.png", false), + NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.restart.message"), e -> { + LifecycleManager.getDefault().markForRestart(); + LifecycleManager.getDefault().exit(); + }, NotificationDisplayer.Priority.HIGH, NotificationDisplayer.Category.INFO); + } + + boolean valid() { + // TODO check whether form is consistent and complete + return true; + } +} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/screenshot/ScreenshotSettingsPanel.form b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/screenshot/ScreenshotSettingsPanel.form new file mode 100644 index 0000000000..3ffb99f008 --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/screenshot/ScreenshotSettingsPanel.form @@ -0,0 +1,208 @@ + + +
              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
              diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/screenshot/ScreenshotSettingsPanel.java b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/screenshot/ScreenshotSettingsPanel.java new file mode 100644 index 0000000000..7ee7cf01a1 --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/screenshot/ScreenshotSettingsPanel.java @@ -0,0 +1,360 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.visualization.screenshot; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.DefaultComboBoxModel; +import javax.swing.JFileChooser; +import javax.swing.SpinnerNumberModel; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import org.gephi.visualization.api.ScreenshotModel; +import org.gephi.visualization.screenshot.ScreenshotControllerImpl; +import org.gephi.viz.engine.jogl.util.ScreenshotTaker; +import org.openide.util.NbBundle; +import org.openide.windows.WindowManager; + +/** + * @author Mathieu Bastian + */ +public class ScreenshotSettingsPanel extends javax.swing.JPanel { + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JCheckBox autoSaveCheckBox; + private javax.swing.JSpinner customScaleFactorSpinner; + private javax.swing.JLabel heightLabel; + private javax.swing.JPanel imagePanel; + private javax.swing.JLabel labelCustomScaleFactor; + private javax.swing.JLabel labelHeight; + private javax.swing.JLabel labelScaleFactor; + private javax.swing.JLabel labelWidth; + private javax.swing.JComboBox scaleFactorCombo; + private javax.swing.JButton selectDirectoryButton; + private javax.swing.JCheckBox transparentBackgroundCheckbox; + private javax.swing.JLabel widthLabel; + // End of variables declaration//GEN-END:variables + + // Controller + private final ScreenshotControllerImpl controller; + // + private int surfaceWidth; + private int surfaceHeight; + + /** + * Creates new form ScreenshotSettingsPanel + */ + public ScreenshotSettingsPanel(ScreenshotControllerImpl screenshotController) { + controller = screenshotController; + initComponents(); + + autoSaveCheckBox.addChangeListener(new ChangeListener() { + + @Override + public void stateChanged(ChangeEvent e) { + selectDirectoryButton.setEnabled(autoSaveCheckBox.isSelected()); + } + }); + + // Setup combo listener for custom scale factor toggle + scaleFactorCombo.addItemListener(e -> { + String customElement = + NbBundle.getMessage(ScreenshotSettingsPanel.class, + "ScreenshotSettingsPanel.scaleFactorCombo.customItem"); + if (scaleFactorCombo.getSelectedItem() != null && + scaleFactorCombo.getSelectedItem().equals(customElement)) { + customScaleFactorSpinner.setVisible(true); + labelCustomScaleFactor.setVisible(true); + refreshWidthAndHeightLabels((Integer) customScaleFactorSpinner.getModel().getValue()); + } else if (scaleFactorCombo.getSelectedItem() != null) { + customScaleFactorSpinner.setVisible(false); + labelCustomScaleFactor.setVisible(false); + customScaleFactorSpinner.getModel() + .setValue(Integer.parseInt(scaleFactorCombo.getSelectedItem().toString().replace("x", ""))); + } + }); + customScaleFactorSpinner.addChangeListener( + e -> refreshWidthAndHeightLabels((Integer) customScaleFactorSpinner.getModel().getValue())); + } + + private void refreshWidthAndHeightLabels(int scaleFactor) { + if (this.surfaceHeight == 0 || this.surfaceWidth == 0) { + widthLabel.setText("0"); + heightLabel.setText("0"); + return; + } + int width = this.surfaceWidth * scaleFactor; + int height = this.surfaceHeight * scaleFactor; + widthLabel.setText(width + "px"); + heightLabel.setText(height + "px"); + } + + public void setup(final ScreenshotModel model) { + this.surfaceHeight = controller.getSurfaceHeight(); + this.surfaceWidth = controller.getSurfaceWidth(); + + // Calculate maximum scale factor using worst case (transparent = 4 bytes/pixel) + int maxScaleFactor = ScreenshotTaker.getMaxScaleFactor(surfaceWidth, surfaceHeight, true); + + // Build combo model with scale factors up to the maximum + String customElement = + NbBundle.getMessage(ScreenshotSettingsPanel.class, "ScreenshotSettingsPanel.scaleFactorCombo.customItem"); + DefaultComboBoxModel comboModel = new DefaultComboBoxModel<>(); + int[] standardScaleFactors = {1, 2, 4, 8, 16, 32, 64}; + for (int scaleFactor : standardScaleFactors) { + if (scaleFactor <= maxScaleFactor) { + comboModel.addElement(scaleFactor + "x"); + } + } + comboModel.addElement(customElement); + scaleFactorCombo.setModel(comboModel); + + // Update spinner model with maximum + SpinnerNumberModel spinnerModel = new SpinnerNumberModel( + Math.min(model.getScaleFactor(), maxScaleFactor), // current value + 1, // minimum + maxScaleFactor, // maximum + 1 // step + ); + customScaleFactorSpinner.setModel(spinnerModel); + + autoSaveCheckBox.setSelected(model.isAutoSave()); + selectDirectoryButton.setEnabled(autoSaveCheckBox.isSelected()); + customScaleFactorSpinner.setVisible(false); + labelCustomScaleFactor.setVisible(false); + + // Select appropriate combo item based on model's scale factor + int modelScaleFactor = Math.min(model.getScaleFactor(), maxScaleFactor); + boolean foundInCombo = false; + for (int i = 0; i < comboModel.getSize() - 1; i++) { // -1 to exclude custom element + String item = comboModel.getElementAt(i); + int itemScaleFactor = Integer.parseInt(item.replace("x", "")); + if (itemScaleFactor == modelScaleFactor) { + scaleFactorCombo.setSelectedIndex(i); + foundInCombo = true; + break; + } + } + + if (!foundInCombo) { + // Select custom and show spinner + scaleFactorCombo.setSelectedIndex(comboModel.getSize() - 1); + customScaleFactorSpinner.setValue(modelScaleFactor); + customScaleFactorSpinner.setVisible(true); + labelCustomScaleFactor.setVisible(true); + } + + transparentBackgroundCheckbox.setSelected(model.isTransparentBackground()); + + selectDirectoryButton.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + JFileChooser fileChooser = new JFileChooser(model.getDefaultDirectory()); + fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); + int result = fileChooser.showOpenDialog(WindowManager.getDefault().getMainWindow()); + if (result == JFileChooser.APPROVE_OPTION) { + controller.setDefaultDirectory(fileChooser.getSelectedFile()); + } + } + }); + refreshWidthAndHeightLabels((Integer) customScaleFactorSpinner.getModel().getValue()); + } + + public void unsetup() { + controller.setAutoSave(autoSaveCheckBox.isSelected()); + + // Get scale factor from either combo or custom spinner + String customElement = + NbBundle.getMessage(ScreenshotSettingsPanel.class, "ScreenshotSettingsPanel.scaleFactorCombo.customItem"); + Object selectedItem = scaleFactorCombo.getSelectedItem(); + + if (selectedItem != null && selectedItem.equals(customElement)) { + controller.setScaleFactor((Integer) customScaleFactorSpinner.getModel().getValue()); + } else if (selectedItem != null) { + controller.setScaleFactor(Integer.parseInt(selectedItem.toString().replace("x", ""))); + } + + controller.setTransparentBackground(transparentBackgroundCheckbox.isSelected()); + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + + imagePanel = new javax.swing.JPanel(); + labelScaleFactor = new javax.swing.JLabel(); + scaleFactorCombo = new javax.swing.JComboBox<>(); + transparentBackgroundCheckbox = new javax.swing.JCheckBox(); + labelCustomScaleFactor = new javax.swing.JLabel(); + customScaleFactorSpinner = new javax.swing.JSpinner(); + labelWidth = new javax.swing.JLabel(); + widthLabel = new javax.swing.JLabel(); + labelHeight = new javax.swing.JLabel(); + heightLabel = new javax.swing.JLabel(); + autoSaveCheckBox = new javax.swing.JCheckBox(); + selectDirectoryButton = new javax.swing.JButton(); + + imagePanel.setBorder(javax.swing.BorderFactory.createEtchedBorder()); + + labelScaleFactor.setText(org.openide.util.NbBundle.getMessage(ScreenshotSettingsPanel.class, + "ScreenshotSettingsPanel.labelScaleFactor.text")); // NOI18N + + transparentBackgroundCheckbox.setText(org.openide.util.NbBundle.getMessage(ScreenshotSettingsPanel.class, + "ScreenshotSettingsPanel.transparentBackgroundCheckbox.text")); // NOI18N + + labelCustomScaleFactor.setText(org.openide.util.NbBundle.getMessage(ScreenshotSettingsPanel.class, + "ScreenshotSettingsPanel.labelCustomScaleFactor.text")); // NOI18N + + customScaleFactorSpinner.setModel(new javax.swing.SpinnerNumberModel(1, 1, null, 1)); + + labelWidth.setText(org.openide.util.NbBundle.getMessage(ScreenshotSettingsPanel.class, + "ScreenshotSettingsPanel.labelWidth.text")); // NOI18N + + widthLabel.setText(org.openide.util.NbBundle.getMessage(ScreenshotSettingsPanel.class, + "ScreenshotSettingsPanel.widthLabel.text")); // NOI18N + + labelHeight.setText(org.openide.util.NbBundle.getMessage(ScreenshotSettingsPanel.class, + "ScreenshotSettingsPanel.labelHeight.text")); // NOI18N + + heightLabel.setText(org.openide.util.NbBundle.getMessage(ScreenshotSettingsPanel.class, + "ScreenshotSettingsPanel.heightLabel.text")); // NOI18N + + javax.swing.GroupLayout imagePanelLayout = new javax.swing.GroupLayout(imagePanel); + imagePanel.setLayout(imagePanelLayout); + imagePanelLayout.setHorizontalGroup( + imagePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(imagePanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(imagePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(transparentBackgroundCheckbox, javax.swing.GroupLayout.PREFERRED_SIZE, 0, + Short.MAX_VALUE) + .addGroup(imagePanelLayout.createSequentialGroup() + .addGroup(imagePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(imagePanelLayout.createSequentialGroup() + .addComponent(labelScaleFactor) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(scaleFactorCombo, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(imagePanelLayout.createSequentialGroup() + .addComponent(labelCustomScaleFactor) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(customScaleFactorSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addGroup(imagePanelLayout.createSequentialGroup() + .addComponent(labelWidth) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(widthLabel) + .addGap(32, 32, 32) + .addComponent(labelHeight) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(heightLabel))) + .addGap(0, 0, Short.MAX_VALUE))) + .addContainerGap()) + ); + imagePanelLayout.setVerticalGroup( + imagePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(imagePanelLayout.createSequentialGroup() + .addContainerGap() + .addGroup(imagePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelScaleFactor) + .addComponent(scaleFactorCombo, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(imagePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelCustomScaleFactor) + .addComponent(customScaleFactorSpinner, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(imagePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelWidth) + .addComponent(heightLabel) + .addComponent(widthLabel) + .addComponent(labelHeight)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 14, Short.MAX_VALUE) + .addComponent(transparentBackgroundCheckbox) + .addContainerGap()) + ); + + autoSaveCheckBox.setText(org.openide.util.NbBundle.getMessage(ScreenshotSettingsPanel.class, + "ScreenshotSettingsPanel.autoSaveCheckBox.text")); // NOI18N + + selectDirectoryButton.setText(org.openide.util.NbBundle.getMessage(ScreenshotSettingsPanel.class, + "ScreenshotSettingsPanel.selectDirectoryButton.text")); // NOI18N + + javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); + this.setLayout(layout); + layout.setHorizontalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(imagePanel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addGroup(layout.createSequentialGroup() + .addComponent(autoSaveCheckBox) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(selectDirectoryButton, javax.swing.GroupLayout.PREFERRED_SIZE, 1, + Short.MAX_VALUE))) + .addContainerGap()) + ); + layout.setVerticalGroup( + layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(layout.createSequentialGroup() + .addContainerGap() + .addComponent(imagePanel, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 36, Short.MAX_VALUE) + .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(autoSaveCheckBox) + .addComponent(selectDirectoryButton, javax.swing.GroupLayout.PREFERRED_SIZE, 23, + javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap()) + ); + }// //GEN-END:initComponents +} diff --git a/modules/DesktopTools/src/main/java/org/gephi/desktop/tools/MouseSelectionPopupPanel.form b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/selection/MouseSelectionPopupPanel.form similarity index 90% rename from modules/DesktopTools/src/main/java/org/gephi/desktop/tools/MouseSelectionPopupPanel.form rename to modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/selection/MouseSelectionPopupPanel.form index 75a368aac7..a26ccb5f64 100644 --- a/modules/DesktopTools/src/main/java/org/gephi/desktop/tools/MouseSelectionPopupPanel.form +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/selection/MouseSelectionPopupPanel.form @@ -19,7 +19,7 @@ - + @@ -54,7 +54,7 @@ - + diff --git a/modules/DesktopTools/src/main/java/org/gephi/desktop/tools/MouseSelectionPopupPanel.java b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/selection/MouseSelectionPopupPanel.java similarity index 87% rename from modules/DesktopTools/src/main/java/org/gephi/desktop/tools/MouseSelectionPopupPanel.java rename to modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/selection/MouseSelectionPopupPanel.java index 1d843ea7c8..069e75dcd2 100644 --- a/modules/DesktopTools/src/main/java/org/gephi/desktop/tools/MouseSelectionPopupPanel.java +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/selection/MouseSelectionPopupPanel.java @@ -39,7 +39,8 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ -package org.gephi.desktop.tools; + +package org.gephi.desktop.visualization.selection; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; @@ -48,19 +49,28 @@ Development and Distribution License("CDDL") (collectively, the import javax.swing.event.ChangeListener; /** - * * @author Mathieu Bastian */ public class MouseSelectionPopupPanel extends javax.swing.JPanel { private ChangeListener changeListener; + // Variables declaration - do not modify//GEN-BEGIN:variables + private JSlider diameterSlider; + private javax.swing.JLabel labelDiameter; + private javax.swing.JLabel labelValue; + private javax.swing.JCheckBox proportionnalZoomCheckbox; + private org.jdesktop.beansbinding.BindingGroup bindingGroup; + // End of variables declaration//GEN-END:variables - /** Creates new form MouseSelectionPopupPanel */ + /** + * Creates new form MouseSelectionPopupPanel + */ public MouseSelectionPopupPanel() { initComponents(); diameterSlider.addChangeListener(new ChangeListener() { + @Override public void stateChanged(ChangeEvent e) { JSlider source = (JSlider) e.getSource(); if (!source.getValueIsAdjusting()) { @@ -71,6 +81,7 @@ public void stateChanged(ChangeEvent e) { proportionnalZoomCheckbox.addItemListener(new ItemListener() { + @Override public void itemStateChanged(ItemEvent e) { fireChangeEvent(proportionnalZoomCheckbox); } @@ -104,7 +115,8 @@ private void fireChangeEvent(Object source) { } } - /** This method is called from within the constructor to + /** + * This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. @@ -116,13 +128,16 @@ private void initComponents() { bindingGroup = new org.jdesktop.beansbinding.BindingGroup(); labelDiameter = new javax.swing.JLabel(); - diameterSlider = new javax.swing.JSlider(); + diameterSlider = new JSlider(); labelValue = new javax.swing.JLabel(); proportionnalZoomCheckbox = new javax.swing.JCheckBox(); setLayout(new java.awt.GridBagLayout()); + setOpaque(true); + diameterSlider.setOpaque(true); - labelDiameter.setText(org.openide.util.NbBundle.getMessage(MouseSelectionPopupPanel.class, "MouseSelectionPopupPanel.labelDiameter.text")); // NOI18N + labelDiameter.setText(org.openide.util.NbBundle + .getMessage(MouseSelectionPopupPanel.class, "MouseSelectionPopupPanel.labelDiameter.text")); // NOI18N gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.gridx = 0; gridBagConstraints.gridy = 0; @@ -144,7 +159,10 @@ private void initComponents() { gridBagConstraints.weightx = 1.0; add(diameterSlider, gridBagConstraints); - org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings.createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, diameterSlider, org.jdesktop.beansbinding.ELProperty.create("${value}"), labelValue, org.jdesktop.beansbinding.BeanProperty.create("text")); + org.jdesktop.beansbinding.Binding binding = org.jdesktop.beansbinding.Bindings + .createAutoBinding(org.jdesktop.beansbinding.AutoBinding.UpdateStrategy.READ_WRITE, diameterSlider, + org.jdesktop.beansbinding.ELProperty.create("${value}"), labelValue, + org.jdesktop.beansbinding.BeanProperty.create("text")); bindingGroup.addBinding(binding); gridBagConstraints = new java.awt.GridBagConstraints(); @@ -154,7 +172,8 @@ private void initComponents() { gridBagConstraints.insets = new java.awt.Insets(6, 0, 8, 5); add(labelValue, gridBagConstraints); - proportionnalZoomCheckbox.setText(org.openide.util.NbBundle.getMessage(MouseSelectionPopupPanel.class, "MouseSelectionPopupPanel.proportionnalZoomCheckbox.text")); // NOI18N + proportionnalZoomCheckbox.setText(org.openide.util.NbBundle.getMessage(MouseSelectionPopupPanel.class, + "MouseSelectionPopupPanel.proportionnalZoomCheckbox.text")); // NOI18N proportionnalZoomCheckbox.setFocusable(false); proportionnalZoomCheckbox.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT); gridBagConstraints = new java.awt.GridBagConstraints(); @@ -167,11 +186,4 @@ private void initComponents() { bindingGroup.bind(); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JSlider diameterSlider; - private javax.swing.JLabel labelDiameter; - private javax.swing.JLabel labelValue; - private javax.swing.JCheckBox proportionnalZoomCheckbox; - private org.jdesktop.beansbinding.BindingGroup bindingGroup; - // End of variables declaration//GEN-END:variables } diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/selection/SelectionPropertiesToolbar.form b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/selection/SelectionPropertiesToolbar.form new file mode 100644 index 0000000000..d528859d2c --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/selection/SelectionPropertiesToolbar.form @@ -0,0 +1,72 @@ + + +
              + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/selection/SelectionPropertiesToolbar.java b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/selection/SelectionPropertiesToolbar.java new file mode 100644 index 0000000000..b8eda10f97 --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/selection/SelectionPropertiesToolbar.java @@ -0,0 +1,175 @@ +package org.gephi.desktop.visualization.selection; + +import java.awt.Component; +import java.beans.PropertyChangeEvent; +import javax.swing.JPopupMenu; +import javax.swing.SwingUtilities; +import org.gephi.visualization.api.VisualizationController; +import org.gephi.visualization.api.VisualizationModel; +import org.gephi.visualization.api.VisualizationPropertyChangeListener; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +public class SelectionPropertiesToolbar extends javax.swing.JPanel implements VisualizationPropertyChangeListener { + + private final VisualizationController vizController; + // Variables declaration - do not modify//GEN-BEGIN:variables + private org.jdesktop.swingx.JXHyperlink configureLink; + private javax.swing.JSeparator endSeparator; + private javax.swing.JLabel statusLabel; + // End of variables declaration//GEN-END:variables + + /** + * Creates new form SelectionBar + */ + public SelectionPropertiesToolbar() { + vizController = Lookup.getDefault().lookup(VisualizationController.class); + initComponents(); + configureLink.addActionListener(e -> { + if (statusLabel.isEnabled()) { + JPopupMenu menu = createPopup(); + menu.show(statusLabel, 0, statusLabel.getHeight()); + } + }); + configureLink.setVisible(false); + } + + @Override + public void propertyChange(VisualizationModel model, PropertyChangeEvent evt) { + if (evt.getPropertyName().equals("selection")) { + refresh(model); + } + } + + public void setup(VisualizationModel vizModel) { + vizController.addPropertyChangeListener(this); + refresh(vizModel); + } + + public void unsetup() { + vizController.removePropertyChangeListener(this); + } + + public JPopupMenu createPopup() { + VisualizationController controller = Lookup.getDefault().lookup(VisualizationController.class); + VisualizationModel model = controller.getModel(); + + final MouseSelectionPopupPanel popupPanel = new MouseSelectionPopupPanel(); + popupPanel.setDiameter(model.getMouseSelectionDiameter()); + popupPanel.setProportionnalToZoom(model.isMouseSelectionZoomProportional()); + popupPanel.setChangeListener(e -> { + controller.setMouseSelectionDiameter(popupPanel.getDiameter()); + controller.setMouseSelectionZoomProportional(popupPanel.isProportionnalToZoom()); + }); + + JPopupMenu menu = new JPopupMenu(); + menu.add(popupPanel); + return menu; + } + + public void refresh(VisualizationModel vizModel) { + SwingUtilities.invokeLater(() -> { + if (vizModel == null) { + configureLink.setVisible(false); + statusLabel + .setText( + NbBundle.getMessage(SelectionPropertiesToolbar.class, "SelectionBar.statusLabel.noSelection")); + return; + } + if (vizModel.isSelectionEnabled()) { + if (vizModel.isCustomSelection()) { + configureLink.setVisible(false); + statusLabel.setText( + NbBundle.getMessage(SelectionPropertiesToolbar.class, + "SelectionBar.statusLabel.customSelection")); + } else if (vizModel.isNodeSelection()) { + configureLink.setVisible(!vizModel.isSingleNodeSelection()); + statusLabel.setText( + NbBundle.getMessage(SelectionPropertiesToolbar.class, + "SelectionBar.statusLabel.nodeSelection")); + } else if (vizModel.isRectangleSelection()) { + configureLink.setVisible(false); + statusLabel.setText( + NbBundle.getMessage(SelectionPropertiesToolbar.class, + "SelectionBar.statusLabel.rectangleSelection")); + } else if (vizModel.isDirectMouseSelection()) { + configureLink.setVisible(true); + statusLabel.setText( + NbBundle.getMessage(SelectionPropertiesToolbar.class, + "SelectionBar.statusLabel.mouseSelection")); + } + } else { + configureLink.setVisible(false); + statusLabel + .setText( + NbBundle.getMessage(SelectionPropertiesToolbar.class, "SelectionBar.statusLabel.noSelection")); + } + }); + + } + + /** + * This method is called from within the constructor to initialize the form. + * WARNING: Do NOT modify this code. The content of this method is always + * regenerated by the Form Editor. + */ + @SuppressWarnings("unchecked") + // //GEN-BEGIN:initComponents + private void initComponents() { + java.awt.GridBagConstraints gridBagConstraints; + + statusLabel = new javax.swing.JLabel(); + configureLink = new org.jdesktop.swingx.JXHyperlink(); + endSeparator = new javax.swing.JSeparator(); + + setPreferredSize(new java.awt.Dimension(180, 28)); + setLayout(new java.awt.GridBagLayout()); + setOpaque(true); + + statusLabel.setFont(statusLabel.getFont().deriveFont((float) 10)); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 0; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(0, 4, 1, 0); + add(statusLabel, gridBagConstraints); + + configureLink.setText( + org.openide.util.NbBundle.getMessage(SelectionPropertiesToolbar.class, + "SelectionBar.configureLink.text")); // NOI18N + configureLink.setDefaultCapable(false); + configureLink.setFocusable(false); + configureLink.setFont(new java.awt.Font("Lucida Grande", 0, 10)); // NOI18N + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 1; + gridBagConstraints.gridy = 0; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 0); + add(configureLink, gridBagConstraints); + + endSeparator.setOrientation(javax.swing.SwingConstants.VERTICAL); + endSeparator.setPreferredSize(new java.awt.Dimension(3, 22)); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 2; + gridBagConstraints.gridy = 0; + gridBagConstraints.fill = java.awt.GridBagConstraints.VERTICAL; + gridBagConstraints.anchor = java.awt.GridBagConstraints.FIRST_LINE_END; + gridBagConstraints.weightx = 1.0; + gridBagConstraints.insets = new java.awt.Insets(3, 0, 3, 0); + add(endSeparator, gridBagConstraints); + }// //GEN-END:initComponents + + @Override + public void setEnabled(final boolean enabled) { + SwingUtilities.invokeLater(new Runnable() { + + @Override + public void run() { + for (Component c : getComponents()) { + c.setEnabled(enabled); + } + } + }); + } +} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/selection/SelectionToolbar.java b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/selection/SelectionToolbar.java new file mode 100644 index 0000000000..b797c3172b --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/selection/SelectionToolbar.java @@ -0,0 +1,186 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.visualization.selection; + +import java.awt.Component; +import java.beans.PropertyChangeEvent; +import javax.swing.AbstractButton; +import javax.swing.BorderFactory; +import javax.swing.ButtonGroup; +import javax.swing.Icon; +import javax.swing.JButton; +import javax.swing.JToggleButton; +import javax.swing.JToolBar; +import javax.swing.SwingUtilities; +import org.gephi.ui.utils.UIUtils; +import org.gephi.visualization.api.VisualizationController; +import org.gephi.visualization.api.VisualizationModel; +import org.gephi.visualization.api.VisualizationPropertyChangeListener; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +/** + * @author Mathieu Bastian + */ +public class SelectionToolbar extends JToolBar implements VisualizationPropertyChangeListener { + + private final JToggleButton mouseButton; + private final JToggleButton rectangleButton; + private final JToggleButton panButton; + private final ButtonGroup buttonGroup; + private final VisualizationController visualizationController; + + public SelectionToolbar() { + this.visualizationController = Lookup.getDefault().lookup(VisualizationController.class); + + // Design + setFloatable(false); + setOrientation(JToolBar.VERTICAL); + putClientProperty("JToolBar.isRollover", Boolean.TRUE); //NOI18N + setOpaque(true); + setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 2)); + + // Buttons + buttonGroup = new ButtonGroup(); + mouseButton = + new JToggleButton(ImageUtilities.loadImageIcon("VisualizationImpl/mouse.svg", false)); + mouseButton.setToolTipText(NbBundle.getMessage(SelectionToolbar.class, "SelectionToolbar.mouse.tooltip")); + mouseButton.addActionListener(e -> visualizationController.setDirectMouseSelection()); + mouseButton.setFocusPainted(false); + add(mouseButton); + + Icon icon = ImageUtilities.loadImageIcon("VisualizationImpl/rectangle.svg", false); + + rectangleButton = new JToggleButton(icon); + rectangleButton + .setToolTipText(NbBundle.getMessage(SelectionToolbar.class, "SelectionToolbar.rectangle.tooltip")); + rectangleButton.addActionListener(e -> visualizationController.setRectangleSelection()); + rectangleButton.setFocusPainted(false); + add(rectangleButton); + + panButton = + new JToggleButton(ImageUtilities.loadImageIcon("VisualizationImpl/pan.svg", false)); + panButton.setToolTipText(NbBundle.getMessage(SelectionToolbar.class, "SelectionToolbar.pan.tooltip")); + panButton.addActionListener(e -> { + if (panButton.isSelected()) { + visualizationController.disableSelection(); + } + }); + panButton.setFocusPainted(false); + add(panButton); + addSeparator(); + + // Disable + for (Component c : getComponents()) { + c.setEnabled(false); + } + } + + public void setup(VisualizationModel vizModel) { + setEnabled(true); + visualizationController.addPropertyChangeListener(this); + refresh(vizModel); + } + + public void unsetup(VisualizationModel vizModel) { + setEnabled(false); + visualizationController.removePropertyChangeListener(this); + } + + @Override + public void propertyChange(VisualizationModel model, PropertyChangeEvent evt) { + if (evt.getPropertyName().equals("selection")) { + refresh(model); + } + } + + private void refresh(VisualizationModel vizModel) { + SwingUtilities.invokeLater(new Runnable() { + + @Override + public void run() { + if (vizModel.isCustomSelection() || vizModel.isNodeSelection()) { + buttonGroup.clearSelection(); + } else if (!vizModel.isSelectionEnabled()) { + if (!buttonGroup.isSelected(panButton.getModel())) { + buttonGroup.setSelected(panButton.getModel(), true); + } + } else if (vizModel.isDirectMouseSelection()) { + if (!buttonGroup.isSelected(mouseButton.getModel())) { + buttonGroup.setSelected(mouseButton.getModel(), true); + } + } else if (vizModel.isRectangleSelection()) { + if (!buttonGroup.isSelected(rectangleButton.getModel())) { + buttonGroup.setSelected(rectangleButton.getModel(), true); + } + } + } + }); + } + + @Override + public void setEnabled(final boolean enabled) { + SwingUtilities.invokeLater(new Runnable() { + + @Override + public void run() { + for (Component c : getComponents()) { + c.setEnabled(enabled); + } + } + }); + } + + @Override + public Component add(Component comp) { + if (comp instanceof JButton) { + UIUtils.fixButtonUI((JButton) comp); + } + if (comp instanceof AbstractButton) { + buttonGroup.add((AbstractButton) comp); + } + + return super.add(comp); + } +} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/tools/ActionsToolbar.java b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/tools/ActionsToolbar.java new file mode 100644 index 0000000000..a262a093f1 --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/tools/ActionsToolbar.java @@ -0,0 +1,133 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.visualization.tools; + +import java.awt.Component; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import javax.swing.BorderFactory; +import javax.swing.JButton; +import javax.swing.JToolBar; +import javax.swing.SwingUtilities; +import org.gephi.ui.utils.UIUtils; +import org.gephi.visualization.api.VisualizationController; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +/** + * @author Mathieu Bastian + */ +public class ActionsToolbar extends JToolBar { + + private final VisualizationController visualizationController; + + public ActionsToolbar() { + this.visualizationController = Lookup.getDefault().lookup(VisualizationController.class); + initDesign(); + initContent(); + + // Disable + for (Component c : getComponents()) { + c.setEnabled(false); + } + + } + + private void initContent() { + + //Center on graph + final JButton centerOnGraphButton = new JButton(); + centerOnGraphButton.setToolTipText(NbBundle.getMessage(ActionsToolbar.class, "ActionsToolbar.centerOnGraph")); + centerOnGraphButton.setIcon( + ImageUtilities.loadImageIcon("VisualizationImpl/centerOnGraph.svg", false)); + centerOnGraphButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + visualizationController.centerOnGraph(); + } + }); + add(centerOnGraphButton); + + //Center on zero + final JButton centerOnZeroButton = new JButton(); + centerOnZeroButton.setToolTipText(NbBundle.getMessage(ActionsToolbar.class, "ActionsToolbar.centerOnZero")); + centerOnZeroButton.setIcon(ImageUtilities.loadImageIcon("VisualizationImpl/centerOnZero.svg", false)); + centerOnZeroButton.addActionListener(new ActionListener() { + + public void actionPerformed(ActionEvent e) { + visualizationController.centerOnZero(); + } + }); + add(centerOnZeroButton); + + } + + private void initDesign() { + setFloatable(false); + setOrientation(JToolBar.VERTICAL); + putClientProperty("JToolBar.isRollover", Boolean.TRUE); //NOI18N + setBorder(BorderFactory.createEmptyBorder(0, 2, 15, 2)); + setOpaque(true); + } + + @Override + public void setEnabled(final boolean enabled) { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + for (Component c : getComponents()) { + c.setEnabled(enabled); + } + } + }); + } + + @Override + public Component add(Component comp) { + if (comp instanceof JButton) { + UIUtils.fixButtonUI((JButton) comp); + } + return super.add(comp); + } +} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/tools/DesktopToolController.java b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/tools/DesktopToolController.java new file mode 100644 index 0000000000..d327e07d80 --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/tools/DesktopToolController.java @@ -0,0 +1,451 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.visualization.tools; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.beans.PropertyChangeEvent; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.HashMap; +import java.util.List; +import javax.swing.JComponent; +import javax.swing.JToggleButton; +import org.gephi.graph.api.Node; +import org.gephi.tools.api.ToolController; +import org.gephi.tools.spi.MouseClickEventListener; +import org.gephi.tools.spi.NodeClickEventListener; +import org.gephi.tools.spi.NodePressAndDraggingEventListener; +import org.gephi.tools.spi.NodePressingEventListener; +import org.gephi.tools.spi.Tool; +import org.gephi.tools.spi.ToolEventListener; +import org.gephi.tools.spi.ToolUI; +import org.gephi.tools.spi.UnselectToolException; +import org.gephi.visualization.api.VisualizationController; +import org.gephi.visualization.api.VisualizationEvent; +import org.gephi.visualization.api.VisualizationEventListener; +import org.gephi.visualization.api.VisualizationModel; +import org.gephi.visualization.api.VisualizationPropertyChangeListener; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.util.lookup.ServiceProvider; + +/** + * @author Mathieu Bastian + */ +@ServiceProvider(service = ToolController.class) +public class DesktopToolController implements ToolController { + + //Architecture + private final Tool[] tools; + private final VisualizationController visualizationController; + private ToolsPropertiesBar toolsPropertiesBar; + //Current tool + private Tool currentTool; + private ToolEventHandler[] currentHandlers; + + public DesktopToolController() { + //Init tools + tools = Lookup.getDefault().lookupAll(Tool.class).toArray(new Tool[0]); + visualizationController = Lookup.getDefault().lookup(VisualizationController.class); + } + + @Override + public void select(Tool tool) { + unselect(); + if (tool == null) { + return; + } + + //Connect events + ArrayList handlers = new ArrayList<>(); + for (ToolEventListener toolListener : tool.getListeners()) { + if (toolListener instanceof NodeClickEventListener) { + NodeClickEventHandler h = new NodeClickEventHandler(toolListener); + h.select(); + handlers.add(h); + } else if (toolListener instanceof NodePressingEventListener) { + NodePressingEventHandler h = new NodePressingEventHandler(toolListener); + h.select(); + handlers.add(h); + } else if (toolListener instanceof MouseClickEventListener) { + MouseClickEventHandler h = new MouseClickEventHandler(toolListener); + h.select(); + handlers.add(h); + } else if (toolListener instanceof NodePressAndDraggingEventListener) { + NodePressAndDraggingEventHandler h = new NodePressAndDraggingEventHandler(toolListener); + h.select(); + handlers.add(h); + + } else { + throw new RuntimeException( + "The ToolEventListener " + toolListener.getClass().getSimpleName() + " cannot be recognized"); + } + } + currentHandlers = handlers.toArray(new ToolEventHandler[0]); + switch (tool.getSelectionType()) { + case NONE: + visualizationController.disableSelection(); + break; + case SINGLE_NODE_SELECTION: + visualizationController.setNodeSelection(true); + break; + case SELECTION: + case SELECTION_AND_DRAGGING: + visualizationController.setNodeSelection(false); + break; + } + currentTool = tool; + currentTool.select(); + } + + public void unselect() { + if (currentTool != null) { + try { + //Disconnect events + for (ToolEventHandler handler : currentHandlers) { + handler.unselect(); + } + currentTool.unselect(); + } finally { + currentHandlers = null; + currentTool = null; + if (toolsPropertiesBar != null) { + toolsPropertiesBar.unselect(); + } + } + } + } + + public JComponent getToolbar() { + + //Get tools ui + HashMap toolMap = new HashMap<>(); + List toolsUI = new ArrayList<>(); + for (Tool tool : tools) { + ToolUI ui = tool.getUI(); + if (ui != null) { + toolsUI.add(ui); + toolMap.put(ui, tool); + } + + } + //Sort by priority + Collections.sort(toolsUI, new Comparator() { + + @Override + public int compare(Object o1, Object o2) { + Integer p1 = ((ToolUI) o1).getPosition(); + Integer p2 = ((ToolUI) o2).getPosition(); + return p1.compareTo(p2); + } + }); + + //Create toolbar + final Toolbar toolbar = new Toolbar(); + for (final ToolUI toolUI : toolsUI) { + final Tool tool = toolMap.get(toolUI); + JToggleButton btn; + if (toolUI.getIcon() != null) { + btn = new JToggleButton(toolUI.getIcon()); + } else { + btn = new JToggleButton(ImageUtilities.loadImageIcon("VisualizationImpl/tool.svg", false)); + } + btn.setFocusPainted(false); + btn.setToolTipText(toolUI.getName() + " - " + toolUI.getDescription()); + btn.addActionListener(new ActionListener() { + + @Override + public void actionPerformed(ActionEvent e) { + //Let the user unselect a tool (by clicking on it again) without having to select other tool: + if (tool == currentTool) { + toolbar.clearSelection(); + unselect(); + + // Go back to selection + visualizationController.setDirectMouseSelection(); + } else { + try { + select(tool); + toolsPropertiesBar.select(toolUI.getPropertiesBar(tool)); + } catch (UnselectToolException unselectToolException) { + toolbar.clearSelection(); + unselect(); + } + } + } + }); + toolbar.add(btn); + } + + //SelectionManager events + visualizationController.addPropertyChangeListener(new VisualizationPropertyChangeListener() { + + @Override + public void propertyChange(VisualizationModel model, PropertyChangeEvent evt) { + if (evt.getPropertyName().equals("selection")) { + if (currentTool != null && !model.isCustomSelection() && !model.isNodeSelection()) { + toolbar.clearSelection(); + unselect(); + } + } + } + }); + + return toolbar; + } + + public JComponent getPropertiesBar() { + toolsPropertiesBar = new ToolsPropertiesBar(); + return toolsPropertiesBar; + } + + //Event handlers classes + private interface ToolEventHandler { + + void select(); + + void unselect(); + } + + //HANDLERS + private static class NodeClickEventHandler implements ToolEventHandler { + + private NodeClickEventListener toolEventListener; + private VisualizationEventListener currentListener; + + public NodeClickEventHandler(ToolEventListener toolListener) { + this.toolEventListener = (NodeClickEventListener) toolListener; + } + + @Override + public void select() { + currentListener = new VisualizationEventListener() { + + @Override + public boolean handleEvent(VisualizationEvent event) { + return toolEventListener.clickNodes((Node[]) event.getData()); + } + + @Override + public VisualizationEvent.Type getType() { + return VisualizationEvent.Type.NODE_LEFT_CLICK; + } + }; + VisualizationController vizController = Lookup.getDefault().lookup(VisualizationController.class); + vizController.addListener(currentListener); + } + + @Override + public void unselect() { + VisualizationController vizController = Lookup.getDefault().lookup(VisualizationController.class); + vizController.removeListener(currentListener); + currentListener = null; + toolEventListener = null; + } + } + + private static class NodePressingEventHandler implements ToolEventHandler { + + private NodePressingEventListener toolEventListener; + private VisualizationEventListener[] currentListeners; + + public NodePressingEventHandler(ToolEventListener toolListener) { + this.toolEventListener = (NodePressingEventListener) toolListener; + } + + @Override + public void select() { + currentListeners = new VisualizationEventListener[2]; + currentListeners[0] = new VisualizationEventListener() { + + @Override + public boolean handleEvent(VisualizationEvent event) { + return toolEventListener.pressingNodes((Node[]) event.getData()); + } + + @Override + public VisualizationEvent.Type getType() { + return VisualizationEvent.Type.NODE_LEFT_PRESSING; + } + }; + currentListeners[1] = new VisualizationEventListener() { + + @Override + public boolean handleEvent(VisualizationEvent event) { + return toolEventListener.released(); + } + + @Override + public VisualizationEvent.Type getType() { + return VisualizationEvent.Type.MOUSE_RELEASED; + } + }; + VisualizationController vizController = Lookup.getDefault().lookup(VisualizationController.class); + vizController.addListener(currentListeners[0]); + vizController.addListener(currentListeners[1]); + } + + @Override + public void unselect() { + VisualizationController vizController = Lookup.getDefault().lookup(VisualizationController.class); + vizController.removeListener(currentListeners[0]); + vizController.removeListener(currentListeners[1]); + toolEventListener = null; + currentListeners = null; + } + } + + private static class NodePressAndDraggingEventHandler implements ToolEventHandler { + + private NodePressAndDraggingEventListener toolEventListener; + private VisualizationEventListener[] currentListeners; + + public NodePressAndDraggingEventHandler(ToolEventListener toolListener) { + this.toolEventListener = (NodePressAndDraggingEventListener) toolListener; + } + + @Override + public void select() { + currentListeners = new VisualizationEventListener[3]; + currentListeners[0] = new VisualizationEventListener() { + + @Override + public boolean handleEvent(VisualizationEvent event) { + return toolEventListener.pressNodes((Node[]) event.getData()); + } + + @Override + public VisualizationEvent.Type getType() { + return VisualizationEvent.Type.NODE_LEFT_PRESS; + } + }; + currentListeners[1] = new VisualizationEventListener() { + + @Override + public boolean handleEvent(VisualizationEvent event) { + float[] mouseDrag = (float[]) event.getData(); + return toolEventListener.drag( + // Screen coordinates displacement: + mouseDrag[0], mouseDrag[1], + // World coordinates displacement: + mouseDrag[2], mouseDrag[3]); + } + + @Override + public VisualizationEvent.Type getType() { + return VisualizationEvent.Type.DRAG; + } + }; + currentListeners[2] = new VisualizationEventListener() { + + @Override + public boolean handleEvent(VisualizationEvent event) { + toolEventListener.released(); + + return false;//Never consume release events + } + + @Override + public VisualizationEvent.Type getType() { + return VisualizationEvent.Type.STOP_DRAG; + } + }; + VisualizationController vizController = Lookup.getDefault().lookup(VisualizationController.class); + vizController.addListener(currentListeners[0]); + vizController.addListener(currentListeners[1]); + vizController.addListener(currentListeners[2]); + } + + @Override + public void unselect() { + VisualizationController vizController = Lookup.getDefault().lookup(VisualizationController.class); + vizController.removeListener(currentListeners[0]); + vizController.removeListener(currentListeners[1]); + vizController.removeListener(currentListeners[2]); + toolEventListener = null; + currentListeners = null; + } + } + + private static class MouseClickEventHandler implements ToolEventHandler { + + private MouseClickEventListener toolEventListener; + private VisualizationEventListener currentListener; + + public MouseClickEventHandler(ToolEventListener toolListener) { + this.toolEventListener = (MouseClickEventListener) toolListener; + } + + @Override + public void select() { + currentListener = new VisualizationEventListener() { + + @Override + public boolean handleEvent(VisualizationEvent event) { + float[] data = (float[]) event.getData(); + int[] viewport = new int[] {(int) data[0], (int) data[1]}; + float[] worldPosition = new float[] {data[2], data[3]}; + + return toolEventListener.mouseClick(viewport, worldPosition); + } + + @Override + public VisualizationEvent.Type getType() { + return VisualizationEvent.Type.MOUSE_LEFT_CLICK; + } + }; + VisualizationController vizController = Lookup.getDefault().lookup(VisualizationController.class); + vizController.addListener(currentListener); + } + + @Override + public void unselect() { + VisualizationController vizController = Lookup.getDefault().lookup(VisualizationController.class); + vizController.removeListener(currentListener); + toolEventListener = null; + currentListener = null; + } + } +} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/tools/PropertiesBar.java b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/tools/PropertiesBar.java new file mode 100644 index 0000000000..342eb682f5 --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/tools/PropertiesBar.java @@ -0,0 +1,163 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.visualization.tools; + +import java.awt.BorderLayout; +import java.awt.Component; +import java.awt.Dimension; +import javax.swing.JComponent; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.SwingUtilities; +import javax.swing.border.EmptyBorder; +import org.gephi.desktop.visualization.selection.SelectionPropertiesToolbar; +import org.gephi.ui.utils.UIUtils; +import org.gephi.visualization.VizConfig; +import org.gephi.visualization.api.VisualizationController; +import org.gephi.visualization.api.VisualizationModel; +import org.openide.util.Lookup; + +/** + * @author Mathieu Bastian + */ +public class PropertiesBar extends JPanel { + + private final SelectionPropertiesToolbar selectionBar; + private final JLabel fpsLabel; + private volatile boolean fpsThreadRunning = false; + private volatile Thread fpsThread; + + public PropertiesBar() { + super(new BorderLayout()); + JPanel leftPanel = new JPanel(new BorderLayout()); + leftPanel.setOpaque(true); + fpsLabel = new JLabel(); + leftPanel.add(getFpsPanel(), BorderLayout.WEST); + leftPanel.add(selectionBar = new SelectionPropertiesToolbar(), BorderLayout.CENTER); + add(leftPanel, BorderLayout.WEST); + setOpaque(true); + } + + public void setup(VisualizationModel vizModel) { + selectionBar.setup(vizModel); + startFpsThread(); + } + + public void unsetup() { + selectionBar.unsetup(); + stopFpsThread(); + SwingUtilities.invokeLater(() -> fpsLabel.setText("")); + } + + public void addToolsPropertiesBar(JComponent component) { + add(component, BorderLayout.CENTER); + } + + private JComponent getFpsPanel() { + int logoWidth = 27; + int logoHeight = 28; + if (UIUtils.isAquaLookAndFeel()) { + logoWidth = 34; + } + + JPanel c = new JPanel(new BorderLayout()); + fpsLabel.setText(""); + fpsLabel.setFont(new java.awt.Font("Lucida Grande", 0, 8)); + fpsLabel.setBorder(new EmptyBorder(2, 2, 2, 2)); + c.add(fpsLabel, BorderLayout.CENTER); + c.setPreferredSize(new Dimension(logoWidth, logoHeight)); + return c; + } + + private void startFpsThread() { + if (!VizConfig.isShowFps()) { + return; + } + if (fpsThreadRunning) { + return; + } + fpsThreadRunning = true; + fpsThread = new Thread(() -> { + try { + final VisualizationController controller = Lookup.getDefault().lookup(VisualizationController.class); + while (fpsThreadRunning) { + VisualizationModel model = controller != null ? controller.getModel() : null; + String text = ""; + if (model != null) { + text = String.valueOf(model.getFps()); + } + final String fpsText = text; + SwingUtilities.invokeLater(() -> fpsLabel.setText(fpsText)); + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + break; + } + } + } finally { + fpsThreadRunning = false; + } + }, "Refresh FPS Label"); + fpsThread.setDaemon(true); + fpsThread.start(); + } + + private void stopFpsThread() { + fpsThreadRunning = false; + if (fpsThread != null) { + fpsThread.interrupt(); + fpsThread = null; + } + } + + @Override + public void setEnabled(final boolean enabled) { + SwingUtilities.invokeLater(() -> { + for (Component c : getComponents()) { + c.setEnabled(enabled); + } + selectionBar.setEnabled(enabled); + }); + } +} diff --git a/modules/DesktopTools/src/main/java/org/gephi/desktop/tools/Toolbar.java b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/tools/Toolbar.java similarity index 95% rename from modules/DesktopTools/src/main/java/org/gephi/desktop/tools/Toolbar.java rename to modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/tools/Toolbar.java index ca643eb71b..db20491ea2 100644 --- a/modules/DesktopTools/src/main/java/org/gephi/desktop/tools/Toolbar.java +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/tools/Toolbar.java @@ -38,8 +38,9 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.desktop.tools; + */ + +package org.gephi.desktop.visualization.tools; import java.awt.Component; import javax.swing.AbstractButton; @@ -51,12 +52,11 @@ Development and Distribution License("CDDL") (collectively, the import org.gephi.ui.utils.UIUtils; /** - * * @author Mathieu Bastian */ public class Toolbar extends JToolBar { - private ButtonGroup buttonGroup; + private final ButtonGroup buttonGroup; public Toolbar() { initDesign(); @@ -68,13 +68,14 @@ private void initDesign() { setOrientation(JToolBar.VERTICAL); putClientProperty("JToolBar.isRollover", Boolean.TRUE); //NOI18N setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 2)); - setOpaque(false); + setOpaque(true); } @Override public void setEnabled(final boolean enabled) { SwingUtilities.invokeLater(new Runnable() { + @Override public void run() { for (Component c : getComponents()) { c.setEnabled(enabled); diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/tools/ToolsPropertiesBar.java b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/tools/ToolsPropertiesBar.java new file mode 100644 index 0000000000..71501e6755 --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/desktop/visualization/tools/ToolsPropertiesBar.java @@ -0,0 +1,102 @@ +/* +Copyright 2008-2010 Gephi +Authors : Mathieu Bastian +Website : http://www.gephi.org + +This file is part of Gephi. + +DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + +Copyright 2011 Gephi Consortium. All rights reserved. + +The contents of this file are subject to the terms of either the GNU +General Public License Version 3 only ("GPL") or the Common +Development and Distribution License("CDDL") (collectively, the +"License"). You may not use this file except in compliance with the +License. You can obtain a copy of the License at +http://gephi.org/about/legal/license-notice/ +or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the +specific language governing permissions and limitations under the +License. When distributing the software, include this License Header +Notice in each file and include the License files at +/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the +License Header, with the fields enclosed by brackets [] replaced by +your own identifying information: +"Portions Copyrighted [year] [name of copyright owner]" + +If you wish your version of this file to be governed by only the CDDL +or only the GPL Version 3, indicate your decision by adding +"[Contributor] elects to include this software in this distribution +under the [CDDL or GPL Version 3] license." If you do not indicate a +single choice of license, a recipient has the option to distribute +your version of this file under either the CDDL, the GPL Version 3 or +to extend the choice of license to its licensees as provided above. +However, if you add GPL Version 3 code and therefore, elected the GPL +Version 3 license, then the option applies only if the new code is +made subject to such option by the copyright holder. + +Contributor(s): + +Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.desktop.visualization.tools; + +import java.awt.BorderLayout; +import java.awt.Component; +import javax.swing.BorderFactory; +import javax.swing.JComponent; +import javax.swing.JPanel; +import javax.swing.JToolBar; +import javax.swing.SwingUtilities; + +/** + * @author Mathieu Bastian + */ +public class ToolsPropertiesBar extends JPanel { + + private JPanel propertiesBar; + + public ToolsPropertiesBar() { + super(new BorderLayout()); + setOpaque(true); + } + + public void select(JPanel propertiesBar) { + this.propertiesBar = propertiesBar; + if (propertiesBar != null) { + propertiesBar.setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 2)); + add(propertiesBar, BorderLayout.CENTER); + propertiesBar.setOpaque(true); + for (Component c : propertiesBar.getComponents()) { + if (c instanceof JPanel || c instanceof JToolBar) { + ((JComponent) c).setOpaque(true); + } + } + } + revalidate(); + } + + public void unselect() { + if (propertiesBar != null) { + remove(propertiesBar); + revalidate(); + repaint(); + propertiesBar = null; + } + } + + @Override + public void setEnabled(final boolean enabled) { + SwingUtilities.invokeLater(new Runnable() { + + @Override + public void run() { + for (Component c : getComponents()) { + c.setEnabled(enabled); + } + } + }); + + } +} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/GraphLimits.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/GraphLimits.java deleted file mode 100644 index f22276c047..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/GraphLimits.java +++ /dev/null @@ -1,183 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization; - -import org.gephi.lib.gleem.linalg.Vec3f; - -/** - * - * @author Mathieu Bastian - */ -public class GraphLimits { - - private int minXviewport; - private int maxXviewport; - private int minYviewport; - private int maxYviewport; - private float minXoctree; - private float maxXoctree; - private float minYoctree; - private float maxYoctree; - private float minZoctree; - private float maxZoctree; - private Vec3f closestPoint = new Vec3f(0, 0, 0); - private float maxWeight; - private float minWeight; - - public synchronized float getMaxXoctree() { - return maxXoctree; - } - - public synchronized void setMaxXoctree(float maxXoctree) { - this.maxXoctree = maxXoctree; - } - - public synchronized int getMaxXviewport() { - return maxXviewport; - } - - public synchronized void setMaxXviewport(int maxXviewport) { - this.maxXviewport = maxXviewport; - } - - public synchronized float getMaxYoctree() { - return maxYoctree; - } - - public synchronized void setMaxYoctree(float maxYoctree) { - this.maxYoctree = maxYoctree; - } - - public synchronized int getMaxYviewport() { - return maxYviewport; - } - - public synchronized void setMaxYviewport(int maxYviewport) { - this.maxYviewport = maxYviewport; - } - - public synchronized float getMaxZoctree() { - return maxZoctree; - } - - public synchronized void setMaxZoctree(float maxZoctree) { - this.maxZoctree = maxZoctree; - } - - public synchronized float getMinXoctree() { - return minXoctree; - } - - public synchronized void setMinXoctree(float minXoctree) { - this.minXoctree = minXoctree; - } - - public synchronized int getMinXviewport() { - return minXviewport; - } - - public synchronized void setMinXviewport(int minXviewport) { - this.minXviewport = minXviewport; - } - - public synchronized float getMinYoctree() { - return minYoctree; - } - - public synchronized void setMinYoctree(float minYoctree) { - this.minYoctree = minYoctree; - } - - public synchronized int getMinYviewport() { - return minYviewport; - } - - public synchronized void setMinYviewport(int minYviewport) { - this.minYviewport = minYviewport; - } - - public synchronized float getMinZoctree() { - return minZoctree; - } - - public synchronized void setMinZoctree(float minZoctree) { - this.minZoctree = minZoctree; - } - - public synchronized float getDistanceFromPoint(float x, float y, float z) { - - float dis = (float) Math.sqrt((closestPoint.x() - x) * (closestPoint.x() - x) + (closestPoint.y() - y) * (closestPoint.y() - y) + (closestPoint.z() - z) * (closestPoint.z() - z)); - return dis; - - //Minimum distance with the 8 points of the cube, poor method - /*double min = Double.POSITIVE_INFINITY; - min = Math.min(min,Math.sqrt((minXoctree-x)*(minXoctree-x)+(minYoctree-y)*(minYoctree-y)+(maxZoctree-z)*(maxZoctree-z))); - min = Math.min(min,Math.sqrt((maxXoctree-x)*(maxXoctree-x)+(minYoctree-y)*(minYoctree-y)+(maxZoctree-z)*(maxZoctree-z))); - min = Math.min(min,Math.sqrt((minXoctree-x)*(minXoctree-x)+(maxYoctree-y)*(maxYoctree-y)+(maxZoctree-z)*(maxZoctree-z))); - min = Math.min(min,Math.sqrt((maxXoctree-x)*(maxXoctree-x)+(maxYoctree-y)*(maxYoctree-y)+(maxZoctree-z)*(maxZoctree-z))); - min = Math.min(min,Math.sqrt((minXoctree-x)*(minXoctree-x)+(minYoctree-y)*(minYoctree-y)+(minZoctree-z)*(minZoctree-z))); - min = Math.min(min,Math.sqrt((maxXoctree-x)*(maxXoctree-x)+(minYoctree-y)*(minYoctree-y)+(minZoctree-z)*(minZoctree-z))); - min = Math.min(min,Math.sqrt((minXoctree-x)*(minXoctree-x)+(maxYoctree-y)*(maxYoctree-y)+(minZoctree-z)*(minZoctree-z))); - min = Math.min(min,Math.sqrt((maxXoctree-x)*(maxXoctree-x)+(maxYoctree-y)*(maxYoctree-y)+(minZoctree-z)*(minZoctree-z))); - return (float)min;*/ - } - - public void setClosestPoint(Vec3f closestPoint) { - this.closestPoint = closestPoint; - } - - public float getMaxWeight() { - return maxWeight; - } - - public void setMaxWeight(float maxWeight) { - this.maxWeight = maxWeight; - } - - public float getMinWeight() { - return minWeight; - } - - public void setMinWeight(float minWeight) { - this.minWeight = minWeight; - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/Installer.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/Installer.java index e895e03b1b..b4b5fc9a53 100644 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/Installer.java +++ b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/Installer.java @@ -39,16 +39,29 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.visualization; -import javax.media.opengl.GLProfile; +import org.gephi.visualization.component.GraphTopComponent; import org.openide.modules.ModuleInstall; +import org.openide.windows.TopComponent; +import org.openide.windows.WindowManager; public class Installer extends ModuleInstall { @Override public void restored() { - //Init JOGL, recommended - GLProfile.initSingleton(); + // Disable JOGL's default icons + System.setProperty("newt.window.icons", "null,null"); + } + + @Override + public void close() { + // Destroy JOGL + //VizController.getInstance().destroy(); + final TopComponent tc = WindowManager.getDefault().findTopComponent("GraphTopComponent"); + if (tc instanceof GraphTopComponent) { + ((GraphTopComponent) tc).shutdown(); + } } } diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/SelectionModelImpl.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/SelectionModelImpl.java new file mode 100644 index 0000000000..fa9520c66d --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/SelectionModelImpl.java @@ -0,0 +1,183 @@ +package org.gephi.visualization; + +import java.util.Collection; +import java.util.Collections; +import java.util.Optional; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; +import javax.xml.stream.XMLStreamWriter; +import org.gephi.graph.api.Node; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.status.GraphSelection; +import org.gephi.viz.engine.status.GraphSelectionImpl; + +public class SelectionModelImpl { + + // Model + private final VizModel visualizationModel; + // Settings + private int mouseSelectionDiameter; + private boolean mouseSelectionZoomProportional; + //States + private boolean rectangleSelection = false; + private boolean selectionEnable = true; + private boolean customSelection = false; + private boolean singleNodeSelection = false; + private boolean nodeSelection = false; + + public SelectionModelImpl(VizModel visualizationModel) { + this.visualizationModel = visualizationModel; + + // Settings + this.mouseSelectionDiameter = VizConfig.getDefaultMouseSelectionDiameter(); + } + + public GraphSelection toGraphSelection() { + GraphSelectionImpl gs = new GraphSelectionImpl(); + if (selectionEnable) { + if (rectangleSelection) { + gs.setMode(GraphSelection.GraphSelectionMode.RECTANGLE_SELECTION); + } else if (customSelection) { + gs.setMode(GraphSelection.GraphSelectionMode.CUSTOM_SELECTION); + } else if (nodeSelection) { + if (singleNodeSelection) { + gs.setMode(GraphSelection.GraphSelectionMode.SINGLE_NODE_SELECTION); + } else { + gs.setMode(GraphSelection.GraphSelectionMode.MULTI_NODE_SELECTION); + } + } else { + gs.setMode(GraphSelection.GraphSelectionMode.SIMPLE_MOUSE_SELECTION); + } + } + gs.setMouseSelectionDiameter(mouseSelectionDiameter); + gs.setMouseSelectionDiameterZoomProportional(mouseSelectionZoomProportional); + return gs; + } + + protected Optional currentEngineSelectionModel() { + return visualizationModel.getEngine().map(VizEngine::getGraphSelection); + } + + public Collection getSelectedNodes() { + return currentEngineSelectionModel() + .map(GraphSelection::getSelectedNodes) + .orElse(Collections.emptyList()); + } + + public int getMouseSelectionDiameter() { + return mouseSelectionDiameter; + } + + protected void setMouseSelectionDiameter(int mouseSelectionDiameter) { + this.mouseSelectionDiameter = mouseSelectionDiameter; + } + + public boolean isMouseSelectionZoomProportional() { + return mouseSelectionZoomProportional; + } + + protected void setMouseSelectionZoomProportional(boolean mouseSelectionZoomProportional) { + this.mouseSelectionZoomProportional = mouseSelectionZoomProportional; + } + + protected void setSelectionEnable(boolean selectionEnable) { + this.selectionEnable = selectionEnable; + } + + protected void setRectangleSelection(boolean rectangleSelection) { + this.rectangleSelection = rectangleSelection; + } + + protected void setCustomSelection(boolean customSelection) { + this.customSelection = customSelection; + } + + public void setSingleNodeSelection(boolean singleNodeSelection) { + this.singleNodeSelection = singleNodeSelection; + } + + public void setNodeSelection(boolean nodeSelection) { + this.nodeSelection = nodeSelection; + } + + public boolean isRectangleSelection() { + return selectionEnable && rectangleSelection; + } + + public boolean isDirectMouseSelection() { + return selectionEnable && !rectangleSelection; + } + + public boolean isCustomSelection() { + return selectionEnable && customSelection; + } + + public boolean isSingleNodeSelection() { + return singleNodeSelection; + } + + public boolean isSelectionEnabled() { + return selectionEnable; + } + + public boolean isNodeSelection() { + return nodeSelection; + } + + public void readXML(XMLStreamReader reader) throws XMLStreamException { + boolean end = false; + while (reader.hasNext() && !end) { + int type = reader.next(); + switch (type) { + case XMLStreamReader.START_ELEMENT: + String name = reader.getLocalName(); + if ("mouseSelectionDiameter".equalsIgnoreCase(name)) { + mouseSelectionDiameter = Integer.parseInt(reader.getAttributeValue(null, "value")); + } else if ("mouseSelectionZoomProportional".equalsIgnoreCase(name)) { + mouseSelectionZoomProportional = + Boolean.parseBoolean(reader.getAttributeValue(null, "value")); + } else if ("rectangleSelection".equalsIgnoreCase(name)) { + rectangleSelection = Boolean.parseBoolean(reader.getAttributeValue(null, "value")); + } else if ("selectionEnable".equalsIgnoreCase(name)) { + selectionEnable = Boolean.parseBoolean(reader.getAttributeValue(null, "value")); + } else if ("nodeSelection".equalsIgnoreCase(name)) { + nodeSelection = Boolean.parseBoolean(reader.getAttributeValue(null, "value")); + } else if ("singleNodeSelection".equalsIgnoreCase(name)) { + singleNodeSelection = Boolean.parseBoolean(reader.getAttributeValue(null, "value")); + } + break; + case XMLStreamReader.END_ELEMENT: + if ("selectionModel".equalsIgnoreCase(reader.getLocalName())) { + end = true; + } + break; + } + } + } + + public void writeXML(XMLStreamWriter writer) throws XMLStreamException { + writer.writeStartElement("mouseSelectionDiameter"); + writer.writeAttribute("value", String.valueOf(mouseSelectionDiameter)); + writer.writeEndElement(); + + writer.writeStartElement("mouseSelectionZoomProportional"); + writer.writeAttribute("value", String.valueOf(mouseSelectionZoomProportional)); + writer.writeEndElement(); + + writer.writeStartElement("rectangleSelection"); + writer.writeAttribute("value", String.valueOf(rectangleSelection)); + writer.writeEndElement(); + + writer.writeStartElement("selectionEnable"); + writer.writeAttribute("value", String.valueOf(selectionEnable)); + writer.writeEndElement(); + + writer.writeStartElement("nodeSelection"); + writer.writeAttribute("value", String.valueOf(nodeSelection)); + writer.writeEndElement(); + + writer.writeStartElement("singleNodeSelection"); + writer.writeAttribute("value", String.valueOf(singleNodeSelection)); + writer.writeEndElement(); + } +} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/VizArchitecture.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/VizArchitecture.java deleted file mode 100644 index b301d2d930..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/VizArchitecture.java +++ /dev/null @@ -1,51 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.visualization; - -/** - * - * @author Mathieu Bastian - */ -public interface VizArchitecture { - - public void initArchitecture(); -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/VizConfig.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/VizConfig.java new file mode 100644 index 0000000000..434998927e --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/VizConfig.java @@ -0,0 +1,451 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.visualization; + +import java.awt.Color; +import java.awt.Font; +import org.gephi.ui.utils.ColorUtils; +import org.gephi.ui.utils.FontUtils; +import org.gephi.visualization.api.EdgeColorMode; +import org.gephi.visualization.api.LabelColorMode; +import org.gephi.visualization.api.LabelSizeMode; +import org.joml.Vector2f; +import org.joml.Vector2fc; +import org.openide.util.NbPreferences; + +/** + * @author Mathieu Bastian + */ +public class VizConfig { + + private VizConfig() { + // Only static methods and fields + } + + //Const Default Config + public static final String BACKGROUND_COLOR = "VizConfig.defaultBackgroundColor"; + public static final String BACKGROUND_COLOR_DARK = "VizConfig.defaultDarkBackgroundColor"; + public static final String NODE_LABELS = "VizConfig.defaultShowNodeLabels"; + public static final String EDGE_LABELS = "VizConfig.defaultShowEdgeLabels"; + public static final String SHOW_EDGES = "VizConfig.defaultShowEdges"; + public static final String HIGHLIGHT = "VizConfig.defaultLightenNonSelectedAuto"; + public static final String HIGHLIGHT_FACTOR = "VizConfig.defaultLightenNonSelectedFactor"; + public static final String NEIGHBOUR_SELECT = "VizConfig.defaultAutoSelectNeighbor"; + public static final String HIDE_NONSELECTED_EDGES = "VizConfig.defaultHideNonSelectedEdges"; + public static final String EDGE_COLOR_MODE = "VizConfig.defaultEdgeColorMode"; + public static final String NODE_LABEL_FONT = "VizConfig.defaultNodeLabelFont"; + public static final String EDGE_LABEL_FONT = "VizConfig.defaultEdgeLabelFont"; + public static final String SELECTEDEDGE_HAS_COLOR = "VizConfig.defaultEdgeSelectionColor"; + public static final String SELECTEDEDGE_IN_COLOR = "VizConfig.defaultEdgeInSelectedColor"; + public static final String SELECTEDEDGE_OUT_COLOR = "VizConfig.defaultEdgeOutSelectedColor"; + public static final String SELECTEDEDGE_BOTH_COLOR = "VizConfig.defaultEdgeBothSelectedColor"; + public static final String EDGE_SCALE = "VizConfig.defaultEdgeScale"; + public static final String NODE_SCALE = "VizConfig.defaultNodeScale"; + public static final String EDGE_WEIGHTED = "VizConfig.defaultUseEdgeWeight"; + public static final String EDGE_RESCALE_WEIGHT = "VizConfig.defaultRescaleEdgeWeight"; + public static final String NODE_LABEL_SIZE_MODE = "VizConfig.defaultNodeLabelSizeMode"; + public static final String NODE_LABEL_COLOR_MODE = "VizConfig.defaultNodeLabelColorMode"; + public static final String NODE_LABEL_SCALE = "VizConfig.defaultNodeLabelScale"; + public static final String EDGE_LABEL_SCALE = "VizConfig.defaultEdgeLabelScale"; + public static final String EDGE_LABEL_SIZE_MODE = "VizConfig.defaultEdgeLabelSizeMode"; + public static final String EDGE_LABEL_COLOR_MODE = "VizConfig.defaultEdgeLabelColorMode"; + public static final String ZOOM = "VizConfig.defaultZoom"; + public static final String HIDE_NONSELECTED_NODE_LABELS = "VizConfig.hideNonSelectedNodeLabels"; + public static final String HIDE_NONSELECTED_EDGE_LABELS = "VizConfig.hideNonSelectedEdgeLabels"; + public static final String FIT_NODE_LABELS_TO_NODE_SIZE = "VizConfig.fitNodeLabelsToNodeSize"; + public static final String AVOID_NODE_LABEL_OVERLAP = "VizConfig.avoidNodeLabelOverlap"; + public static final String MOUSE_SELECTION_DIAMETER = "VizConfig.mouseSelectionDiameter"; + public static final String SCREENSHOT_SCALE_FACTOR = "VizConfig.screenshotScaleFactor"; + public static final String SCREENSHOT_TRANSPARENT_BACKGROUND = "VizConfig.screenshotTransparentBackground"; + public static final String SCREENSHOT_AUTO_SAVE = "VizConfig.screenshotAutoSave"; + //Const Prefs + public static final String ANTIALIASING = "VizConfig.antialiasing"; + public static final String SHOW_FPS = "VizConfig.showFPS"; + public static final String CONTEXT_MENU = "VizConfig.contextMenu"; + public static final String ENGINE_DISABLE_INDIRECT_RENDERING = "VizConfig.engineDisableIndirectRendering"; + public static final String ENGINE_DISABLE_INSTANCED_RENDERING = "VizConfig.engineDisableInstancedRendering"; + public static final String ENGINE_DISABLE_VAOS = "VizConfig.engineDisableVAOs"; + public static final String ENGINE_DISABLE_VERTEX_ARRAY_DRAWING = "VizConfig.engineDisableVertexArrayDrawing"; + public static final String ENGINE_OPENGL_DEBUG = "VizConfig.engineOpenGLDebug"; + //Default values + public static final Color DEFAULT_BACKGROUND_COLOR = Color.WHITE; + public static final Color DEFAULT_DARK_BACKGROUND_COLOR = new Color(52, 55, 57, 255); + public static final boolean DEFAULT_NODE_LABELS = false; + public static final boolean DEFAULT_EDGE_LABELS = false; + public static final boolean DEFAULT_SHOW_EDGES = true; + public static final boolean DEFAULT_HIGHLIGHT = true; + public static final float DEFAULT_HIGHLIGHT_FACTOR = 0.9f; + public static final boolean DEFAULT_NEIGHBOUR_SELECT = true; + public static final EdgeColorMode DEFAULT_EDGE_COLOR_MODE = EdgeColorMode.SOURCE; + public static final boolean DEFAULT_HIDE_NONSELECTED_EDGES = false; + public static final Font DEFAULT_NODE_LABEL_FONT = new Font("Arial", Font.BOLD, 32); + public static final Font DEFAULT_EDGE_LABEL_FONT = new Font("Arial", Font.BOLD, 32); + public static final float DEFAULT_ZOOM = 0.3f; + public static final boolean DEFAULT_HIDE_NONSELECTED_NODE_LABELS = false; + public static final boolean DEFAULT_HIDE_NONSELECTED_EDGE_LABELS = false; + public static final boolean DEFAULT_FIT_NODE_LABELS_TO_NODE_SIZE = true; + public static final boolean DEFAULT_AVOID_NODE_LABEL_OVERLAP = true; + public static final boolean DEFAULT_SELECTEDEDGE_HAS_COLOR = false; + public static final Color DEFAULT_SELECTEDEDGE_IN_COLOR = new Color(32, 95, 154, 255); + public static final Color DEFAULT_SELECTEDEDGE_OUT_COLOR = new Color(196, 66, 79, 255); + public static final Color DEFAULT_SELECTEDEDGE_BOTH_COLOR = new Color(248, 215, 83, 255); + public static final int DEFAULT_ANTIALIASING = 4; + public static final boolean DEFAULT_SHOW_FPS = false; + public static final boolean DEFAULT_CONTEXT_MENU = true; + public static final int DEFAULT_MOUSE_SELECTION_DIAMETER = 1; + public static final float DEFAULT_EDGE_SCALE = 2f; + public static final float DEFAULT_NODE_SCALE = 1f; + public static final float DEFAULT_NODE_LABEL_SCALE = 0.5f; + public static final float DEFAULT_EDGE_LABEL_SCALE = 0.5f; + public static final String DEFAULT_NODE_LABEL_SIZE_MODE = LabelSizeMode.ZOOM.name(); + public static final String DEFAULT_NODE_LABEL_COLOR_MODE = LabelColorMode.SELF.name(); + public static final String DEFAULT_EDGE_LABEL_SIZE_MODE = LabelSizeMode.ZOOM.name(); + public static final String DEFAULT_EDGE_LABEL_COLOR_MODE = LabelColorMode.SELF.name(); + public static final boolean DEFAULT_EDGE_WEIGHTED = true; + public static final boolean DEFAULT_EDGE_RESCALE_WEIGHTED = true; + public static final int DEFAULT_SCREENSHOT_SCALE_FACTOR = 1; + public static final boolean DEFAULT_SCREENSHOT_TRANSPARENT_BACKGROUND = false; + public static final boolean DEFAULT_SCREENSHOT_AUTO_SAVE = false; + public static final boolean DEFAULT_ENGINE_DISABLE_INDIRECT_RENDERING = false; + public static final boolean DEFAULT_ENGINE_DISABLE_INSTANCED_RENDERING = false; + public static final boolean DEFAULT_ENGINE_DISABLE_VAOS = false; + public static final boolean DEFAULT_ENGINE_DISABLE_VERTEX_ARRAY_DRAWING = false; + public static final boolean DEFAULT_ENGINE_OPENGL_DEBUG = false; + // Scale property bounds (float range displayed by the sliders). + // Node/edge scale sliders are logarithmic: the geometric mean of MIN and MAX equals the + // respective default value, so the slider is centred there (5Γ— factor in each direction). + public static final float NODE_SCALE_MIN = 0.2f; // DEFAULT_NODE_SCALE / 5 + public static final float NODE_SCALE_MAX = 5.0f; // DEFAULT_NODE_SCALE * 5 + public static final float EDGE_SCALE_MIN = 0.4f; // DEFAULT_EDGE_SCALE / 5 + public static final float EDGE_SCALE_MAX = 10.0f; // DEFAULT_EDGE_SCALE * 5 + // Label scale sliders are linear; min > 0 prevents invisible labels. + public static final float NODE_LABEL_SCALE_MIN = 0.01f; + public static final float NODE_LABEL_SCALE_MAX = 1.0f; + public static final float EDGE_LABEL_SCALE_MIN = 0.01f; + public static final float EDGE_LABEL_SCALE_MAX = 1.0f; + + //Default config - loaded in the VizModel + protected static final Color defaultBackgroundColor = ColorUtils.decode( + NbPreferences.forModule(VizConfig.class).get(BACKGROUND_COLOR, ColorUtils.encode(DEFAULT_BACKGROUND_COLOR))); + protected static final Color defaultDarkBackgroundColor = ColorUtils.decode( + NbPreferences.forModule(VizConfig.class) + .get(BACKGROUND_COLOR_DARK, ColorUtils.encode(DEFAULT_DARK_BACKGROUND_COLOR))); + protected static final boolean defaultShowNodeLabels = + NbPreferences.forModule(VizConfig.class).getBoolean(NODE_LABELS, DEFAULT_NODE_LABELS); + protected static final boolean defaultShowEdgeLabels = + NbPreferences.forModule(VizConfig.class).getBoolean(EDGE_LABELS, DEFAULT_EDGE_LABELS); + protected static final boolean defaultShowEdges = + NbPreferences.forModule(VizConfig.class).getBoolean(SHOW_EDGES, DEFAULT_SHOW_EDGES); + protected static final EdgeColorMode defaultEdgeColorMode = + EdgeColorMode.valueOf( + NbPreferences.forModule(VizConfig.class).get(EDGE_COLOR_MODE, DEFAULT_EDGE_COLOR_MODE.name())); + protected static final boolean defaultLightenNonSelectedAuto = + NbPreferences.forModule(VizConfig.class).getBoolean(HIGHLIGHT, DEFAULT_HIGHLIGHT); + protected static final float defaultLightenNonSelectedFactor = + NbPreferences.forModule(VizConfig.class).getFloat(HIGHLIGHT_FACTOR, DEFAULT_HIGHLIGHT_FACTOR); + protected static final boolean defaultAutoSelectNeighbor = + NbPreferences.forModule(VizConfig.class).getBoolean(NEIGHBOUR_SELECT, DEFAULT_NEIGHBOUR_SELECT); + protected static final boolean defaultHideNonSelectedEdges = + NbPreferences.forModule(VizConfig.class).getBoolean(HIDE_NONSELECTED_EDGES, DEFAULT_HIDE_NONSELECTED_EDGES); + protected static final Font defaultNodeLabelFont = Font.decode( + NbPreferences.forModule(VizConfig.class).get(NODE_LABEL_FONT, FontUtils.encode(DEFAULT_NODE_LABEL_FONT))); + protected static final Font defaultEdgeLabelFont = Font.decode( + NbPreferences.forModule(VizConfig.class).get(EDGE_LABEL_FONT, FontUtils.encode(DEFAULT_EDGE_LABEL_FONT))); + protected static final boolean defaultHideNonSelectedNodeLabels = + NbPreferences.forModule(VizConfig.class) + .getBoolean(HIDE_NONSELECTED_NODE_LABELS, DEFAULT_HIDE_NONSELECTED_NODE_LABELS); + protected static final boolean defaultHideNonSelectedEdgeLabels = + NbPreferences.forModule(VizConfig.class) + .getBoolean(HIDE_NONSELECTED_EDGE_LABELS, DEFAULT_HIDE_NONSELECTED_EDGE_LABELS); + protected static final boolean defaultFitNodeLabelsToNodeSize = + NbPreferences.forModule(VizConfig.class).getBoolean(FIT_NODE_LABELS_TO_NODE_SIZE, + DEFAULT_FIT_NODE_LABELS_TO_NODE_SIZE); + protected static final boolean defaultAvoidNodeLabelOverlap = + NbPreferences.forModule(VizConfig.class).getBoolean(AVOID_NODE_LABEL_OVERLAP, + DEFAULT_AVOID_NODE_LABEL_OVERLAP); + protected static final boolean defaultEdgeSelectionColor = + NbPreferences.forModule(VizConfig.class).getBoolean(SELECTEDEDGE_HAS_COLOR, DEFAULT_SELECTEDEDGE_HAS_COLOR); + protected static final Color defaultEdgeInSelectedColor = ColorUtils.decode(NbPreferences.forModule(VizConfig.class) + .get(SELECTEDEDGE_IN_COLOR, ColorUtils.encode(DEFAULT_SELECTEDEDGE_IN_COLOR))); + protected static final Color defaultEdgeOutSelectedColor = + ColorUtils.decode(NbPreferences.forModule(VizConfig.class) + .get(SELECTEDEDGE_OUT_COLOR, ColorUtils.encode(DEFAULT_SELECTEDEDGE_OUT_COLOR))); + protected static final Color defaultEdgeBothSelectedColor = + ColorUtils.decode(NbPreferences.forModule(VizConfig.class) + .get(SELECTEDEDGE_BOTH_COLOR, ColorUtils.encode(DEFAULT_SELECTEDEDGE_BOTH_COLOR))); + protected static final float defaultEdgeScale = + NbPreferences.forModule(VizConfig.class).getFloat(EDGE_SCALE, DEFAULT_EDGE_SCALE); + protected static final float defaultNodeScale = + NbPreferences.forModule(VizConfig.class).getFloat(NODE_SCALE, DEFAULT_NODE_SCALE); + protected static final LabelSizeMode defaultNodeLabelSizeMode = + LabelSizeMode.valueOf( + NbPreferences.forModule(VizConfig.class).get(NODE_LABEL_SIZE_MODE, DEFAULT_NODE_LABEL_SIZE_MODE)); + protected static final LabelColorMode defaultNodeLabelColorMode = + LabelColorMode.valueOf( + NbPreferences.forModule(VizConfig.class).get(NODE_LABEL_COLOR_MODE, DEFAULT_NODE_LABEL_COLOR_MODE)); + protected static final boolean defaultUseEdgeWeight = + NbPreferences.forModule(VizConfig.class).getBoolean(EDGE_WEIGHTED, DEFAULT_EDGE_WEIGHTED); + protected static final boolean defaultRescaleEdgeWeight = + NbPreferences.forModule(VizConfig.class).getBoolean(EDGE_RESCALE_WEIGHT, DEFAULT_EDGE_RESCALE_WEIGHTED); + protected static final float defaultNodeLabelScale = + NbPreferences.forModule(VizConfig.class).getFloat(NODE_LABEL_SCALE, DEFAULT_NODE_LABEL_SCALE); + protected static final float defaultEdgeLabelScale = + NbPreferences.forModule(VizConfig.class).getFloat(EDGE_LABEL_SCALE, DEFAULT_EDGE_LABEL_SCALE); + protected static final LabelSizeMode defaultEdgeLabelSizeMode = + LabelSizeMode.valueOf( + NbPreferences.forModule(VizConfig.class).get(EDGE_LABEL_SIZE_MODE, DEFAULT_EDGE_LABEL_SIZE_MODE)); + protected static final LabelColorMode defaultEdgeLabelColorMode = + LabelColorMode.valueOf( + NbPreferences.forModule(VizConfig.class).get(EDGE_LABEL_COLOR_MODE, DEFAULT_EDGE_LABEL_COLOR_MODE)); + protected static final float defaultZoom = NbPreferences.forModule(VizConfig.class).getFloat(ZOOM, DEFAULT_ZOOM); + protected static final int defaultMouseSelectionDiameter = + NbPreferences.forModule(VizConfig.class).getInt(MOUSE_SELECTION_DIAMETER, DEFAULT_MOUSE_SELECTION_DIAMETER); + protected static final int screenshotScaleFactor = + NbPreferences.forModule(VizConfig.class) + .getInt(SCREENSHOT_SCALE_FACTOR, DEFAULT_SCREENSHOT_SCALE_FACTOR); + protected static final boolean screenshotTransparentBackground = + NbPreferences.forModule(VizConfig.class) + .getBoolean(SCREENSHOT_TRANSPARENT_BACKGROUND, DEFAULT_SCREENSHOT_TRANSPARENT_BACKGROUND); + protected static final boolean screenshotAutoSave = + NbPreferences.forModule(VizConfig.class) + .getBoolean(SCREENSHOT_AUTO_SAVE, DEFAULT_SCREENSHOT_AUTO_SAVE); + protected static final boolean engineDisableIndirectRendering = + NbPreferences.forModule(VizConfig.class) + .getBoolean(ENGINE_DISABLE_INDIRECT_RENDERING, DEFAULT_ENGINE_DISABLE_INDIRECT_RENDERING); + protected static final boolean engineDisableInstancedRendering = + NbPreferences.forModule(VizConfig.class) + .getBoolean(ENGINE_DISABLE_INSTANCED_RENDERING, DEFAULT_ENGINE_DISABLE_INSTANCED_RENDERING); + protected static final boolean engineDisableVAOs = + NbPreferences.forModule(VizConfig.class) + .getBoolean(ENGINE_DISABLE_VAOS, DEFAULT_ENGINE_DISABLE_VAOS); + protected static final boolean engineDisableVertexArrayDrawing = + NbPreferences.forModule(VizConfig.class) + .getBoolean(ENGINE_DISABLE_VERTEX_ARRAY_DRAWING, DEFAULT_ENGINE_DISABLE_VERTEX_ARRAY_DRAWING); + protected static final boolean engineOpenGLDebug = + NbPreferences.forModule(VizConfig.class) + .getBoolean(ENGINE_OPENGL_DEBUG, DEFAULT_ENGINE_OPENGL_DEBUG); + //Preferences + protected static final int antialiasing = + NbPreferences.forModule(VizConfig.class).getInt(ANTIALIASING, DEFAULT_ANTIALIASING); + protected static final boolean enableContextMenu = + NbPreferences.forModule(VizConfig.class).getBoolean(CONTEXT_MENU, DEFAULT_CONTEXT_MENU); + protected static final boolean showFps = + NbPreferences.forModule(VizConfig.class).getBoolean(SHOW_FPS, DEFAULT_SHOW_FPS); + + public static int getAntialiasing() { + return antialiasing; + } + + public static boolean isEnableContextMenu() { + return enableContextMenu; + } + + public static boolean isShowFps() { + return showFps; + } + + public static float getDefaultZoom() { + return defaultZoom; + } + + public static Vector2fc getDefaultPan() { + return new Vector2f(0.0f, 0.0f); + } + + public static boolean isDefaultAutoSelectNeighbor() { + return defaultAutoSelectNeighbor; + } + + public static Color getDefaultBackgroundColor() { + return defaultBackgroundColor; + } + + public static Color getDefaultDarkBackgroundColor() { + return defaultDarkBackgroundColor; + } + + public static Font getDefaultEdgeLabelFont() { + return defaultEdgeLabelFont; + } + + public static boolean isDefaultHideNonSelectedEdges() { + return defaultHideNonSelectedEdges; + } + + public static boolean isDefaultLightenNonSelectedAuto() { + return defaultLightenNonSelectedAuto; + } + + public static float getDefaultLightenNonSelectedFactor() { + return defaultLightenNonSelectedFactor; + } + + public static Font getDefaultNodeLabelFont() { + return defaultNodeLabelFont; + } + + public static boolean isDefaultShowEdgeLabels() { + return defaultShowEdgeLabels; + } + + public static boolean isDefaultHideNonSelectedNodeLabels() { + return defaultHideNonSelectedNodeLabels; + } + + public static boolean isDefaultHideNonSelectedEdgeLabels() { + return defaultHideNonSelectedEdgeLabels; + } + + public static boolean isDefaultFitNodeLabelsToNodeSize() { + return defaultFitNodeLabelsToNodeSize; + } + + public static boolean isDefaultAvoidNodeLabelOverlap() { + return defaultAvoidNodeLabelOverlap; + } + + public static boolean isDefaultShowNodeLabels() { + return defaultShowNodeLabels; + } + + public static boolean isDefaultShowEdges() { + return defaultShowEdges; + } + + public static boolean isDefaultEdgeSelectionColor() { + return defaultEdgeSelectionColor; + } + + public static Color getDefaultEdgeBothSelectedColor() { + return defaultEdgeBothSelectedColor; + } + + public static Color getDefaultEdgeInSelectedColor() { + return defaultEdgeInSelectedColor; + } + + public static Color getDefaultEdgeOutSelectedColor() { + return defaultEdgeOutSelectedColor; + } + + public static LabelSizeMode getDefaultNodeLabelSizeMode() { + return defaultNodeLabelSizeMode; + } + + public static LabelColorMode getDefaultNodeLabelColorMode() { + return defaultNodeLabelColorMode; + } + + public static boolean isDefaultUseEdgeWeight() { + return defaultUseEdgeWeight; + } + + public static boolean isDefaultRescaleEdgeWeight() { + return defaultRescaleEdgeWeight; + } + + public static float getDefaultNodeLabelScale() { + return defaultNodeLabelScale; + } + + public static float getDefaultEdgeLabelScale() { + return defaultEdgeLabelScale; + } + + public static LabelSizeMode getDefaultEdgeLabelSizeMode() { + return defaultEdgeLabelSizeMode; + } + + public static LabelColorMode getDefaultEdgeLabelColorMode() { + return defaultEdgeLabelColorMode; + } + + public static int getDefaultMouseSelectionDiameter() { + return defaultMouseSelectionDiameter; + } + + public static float getDefaultEdgeScale() { + return defaultEdgeScale; + } + + public static float getDefaultNodeScale() { + return defaultNodeScale; + } + + public static EdgeColorMode getDefaultEdgeColorMode() { + return defaultEdgeColorMode; + } + + public static int getDefaultScreenshotScaleFactor() { + return screenshotScaleFactor; + } + + public static boolean isDefaultScreenshotTransparentBackground() { + return screenshotTransparentBackground; + } + + public static boolean isDefaultScreenshotAutoSave() { + return screenshotAutoSave; + } + + public static boolean isEngineDisableIndirectRendering() { + return engineDisableIndirectRendering; + } + + public static boolean isEngineDisableInstancedRendering() { + return engineDisableInstancedRendering; + } + + public static boolean isEngineDisableVAOs() { + return engineDisableVAOs; + } + + public static boolean isEngineDisableVertexArrayDrawing() { + return engineDisableVertexArrayDrawing; + } + + public static boolean isEngineOpenGLDebug() { + return engineOpenGLDebug; + } + +} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/VizController.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/VizController.java index 152a848632..069c3e3cfb 100644 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/VizController.java +++ b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/VizController.java @@ -39,279 +39,673 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.visualization; -import org.gephi.attribute.api.Column; +import com.jogamp.newt.event.NEWTEvent; +import java.awt.Color; +import java.awt.Font; +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import java.util.concurrent.CopyOnWriteArrayList; +import org.gephi.desktop.attributes.api.AttributesUIController; +import org.gephi.graph.api.Column; import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Estimator; import org.gephi.graph.api.Node; -import org.gephi.project.api.ProjectController; import org.gephi.project.api.Workspace; -import org.gephi.project.api.WorkspaceListener; +import org.gephi.project.spi.Controller; +import org.gephi.visualization.api.EdgeColorMode; +import org.gephi.visualization.api.LabelColorMode; +import org.gephi.visualization.api.LabelSizeMode; import org.gephi.visualization.api.VisualizationController; -import org.gephi.visualization.api.selection.SelectionManager; -import org.gephi.visualization.apiimpl.GraphIO; -import org.gephi.visualization.apiimpl.Scheduler; -import org.gephi.visualization.apiimpl.VizConfig; -import org.gephi.visualization.apiimpl.VizEventManager; -import org.gephi.visualization.bridge.DataBridge; -import org.gephi.visualization.config.VizCommander; +import org.gephi.visualization.api.VisualizationEvent; +import org.gephi.visualization.api.VisualizationEventListener; +import org.gephi.visualization.api.VisualizationPropertyChangeListener; +import org.gephi.visualization.component.VizEngineGraphCanvasManager; import org.gephi.visualization.events.StandardVizEventManager; -import org.gephi.visualization.model.ModelClassLibrary; -import org.gephi.visualization.opengl.AbstractEngine; -import org.gephi.visualization.opengl.CompatibilityEngine; -import org.gephi.visualization.scheduler.CompatibilityScheduler; -import org.gephi.visualization.screenshot.ScreenshotMaker; -import org.gephi.visualization.swing.GraphDrawableImpl; -import org.gephi.visualization.swing.StandardGraphIO; -import org.gephi.visualization.text.TextManager; +import org.gephi.visualization.screenshot.ScreenshotControllerImpl; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.VizEngineModel; +import org.gephi.viz.engine.jogl.JOGLRenderingTarget; +import org.gephi.viz.engine.status.GraphSelection; +import org.joml.Vector2f; import org.openide.util.Lookup; import org.openide.util.lookup.ServiceProvider; +import org.openide.util.lookup.ServiceProviders; /** - * * @author Mathieu Bastian */ -@ServiceProvider(service = VisualizationController.class) -public class VizController implements VisualizationController { +@ServiceProviders({ + @ServiceProvider(service = VisualizationController.class), + @ServiceProvider(service = Controller.class)}) +public class VizController implements VisualizationController, Controller { + + //Architecture + protected final List listeners = new CopyOnWriteArrayList<>(); + private final VizEngineGraphCanvasManager canvasManager; + private final StandardVizEventManager vizEventManager; + private final ScreenshotControllerImpl screenshotController; - //Singleton - private static VizController instance; + // Current mouse move listener, if any + private VisualizationEventListener mouseMoveListener; public VizController() { + vizEventManager = new StandardVizEventManager(); + screenshotController = new ScreenshotControllerImpl(this); + canvasManager = new VizEngineGraphCanvasManager(this); } - public synchronized static VizController getInstance() { - if (instance == null) { - instance = (VizController) Lookup.getDefault().lookup(VisualizationController.class); - instance.initInstances(); + public void enableMouseHandler() { + if (mouseMoveListener != null) { + removeListener(mouseMoveListener); } - return instance; - } - //Architecture - private GraphDrawableImpl drawable; - private AbstractEngine engine; - private Scheduler scheduler; - private VizConfig vizConfig; - private GraphIO graphIO; - private VizEventManager vizEventManager; - private ModelClassLibrary modelClassLibrary; - private GraphLimits limits; - private DataBridge dataBridge; - private TextManager textManager; - private ScreenshotMaker screenshotMaker; - private SelectionManager selectionManager; - //Variable - private VizModel currentModel; - - public void initInstances() { - VizCommander commander = new VizCommander(); - - vizConfig = new VizConfig(); - graphIO = new StandardGraphIO(); - engine = new CompatibilityEngine(); - vizEventManager = new StandardVizEventManager(); - scheduler = new CompatibilityScheduler(); - modelClassLibrary = new ModelClassLibrary(); - limits = new GraphLimits(); - dataBridge = new DataBridge(); - textManager = new TextManager(); - screenshotMaker = new ScreenshotMaker(); - currentModel = new VizModel(true); - selectionManager = new SelectionManager(); - - if (vizConfig.isUseGLJPanel()) { - drawable = commander.createPanel(); - } else { -// drawable = commander.createCanvas(); - drawable = commander.createNewtCanvas(); - } - drawable.initArchitecture(); - engine.initArchitecture(); - ((CompatibilityScheduler) scheduler).initArchitecture(); - ((StandardGraphIO) graphIO).initArchitecture(); - dataBridge.initArchitecture(); - textManager.initArchitecture(); - screenshotMaker.initArchitecture(); - vizEventManager.initArchitecture(); - selectionManager.initArchitecture(); - - ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); - pc.addWorkspaceListener(new WorkspaceListener() { - @Override - public void initialize(Workspace workspace) { - workspace.add(new VizModel()); - } + mouseMoveListener = new VisualizationEventListener() { @Override - public void select(Workspace workspace) { - engine.reinit(); + public boolean handleEvent(VisualizationEvent event) { + VizEngineModel model = (VizEngineModel) event.getData(); + Collection selectedNodes = model.getGraphSelection().getSelectedNodes(); + + AttributesUIController attributesUIController = + Lookup.getDefault().lookup(AttributesUIController.class); + if (attributesUIController != null) { + attributesUIController.selectNodes(selectedNodes.toArray(new Node[0])); + } + return false; } @Override - public void unselect(Workspace workspace) { + public VisualizationEvent.Type getType() { + return VisualizationEvent.Type.MOUSE_MOVE; } + }; + addListener(mouseMoveListener); - @Override - public void close(Workspace workspace) { - } + AttributesUIController attributesUIController = Lookup.getDefault().lookup(AttributesUIController.class); + if (attributesUIController != null) { + attributesUIController.disableEdit(); + attributesUIController.openWindow(); + } + } - @Override - public void disable() { - engine.reinit(); + public void disableMouseHandler() { + if (mouseMoveListener != null) { + removeListener(mouseMoveListener); + mouseMoveListener = null; + + AttributesUIController attributesUIController = Lookup.getDefault().lookup(AttributesUIController.class); + if (attributesUIController != null) { + attributesUIController.closeWindow(); } - }); + } + } - if (pc.getCurrentWorkspace() != null) { - engine.reinit(); + @Override + public VizModel newModel(Workspace workspace) { + return new VizModel(this, workspace); + } + + @Override + public VizModel getModel(Workspace workspace) { + return Controller.super.getModel(workspace); + } + + @Override + public Class getModelClass() { + return VizModel.class; + } + + @Override + public VizModel getModel() { + return Controller.super.getModel(); + } + + @Override + public ScreenshotControllerImpl getScreenshotController() { + return screenshotController; + } + + public VizEngineGraphCanvasManager getCanvasManager() { + return canvasManager; + } + + public Optional> getEngine() { + return canvasManager.getEngine(); + } + + @Override + public void addPropertyChangeListener(VisualizationPropertyChangeListener listener) { + listeners.add(listener); + } + + @Override + public void removePropertyChangeListener(VisualizationPropertyChangeListener listener) { + listeners.remove(listener); + } + + @Override + public void addListener(VisualizationEventListener listener) { + vizEventManager.addListener(listener); + } + + @Override + public void removeListener(VisualizationEventListener listener) { + vizEventManager.removeListener(listener); + } + + @Override + public void setZoom(float zoom) { + final VizModel model = getModel(); + if (model != null) { + model.setZoom(zoom); } } - public void refreshWorkspace() { - ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); - VizModel model = null; - if (pc.getCurrentWorkspace() == null) { - model = new VizModel(true); - } else { - model = pc.getCurrentWorkspace().getLookup().lookup(VizModel.class); - if (model == null) { - model = new VizModel(); - pc.getCurrentWorkspace().add(model); - } + @Override + public void setAutoSelectNeighbors(boolean autoSelectNeighbors) { + final VizModel model = getModel(); + if (model != null) { + model.setAutoSelectNeighbors(autoSelectNeighbors); } - if (model != currentModel) { - model.setListeners(currentModel.getListeners()); - model.getTextModel().setListeners(currentModel.getTextModel().getListeners()); - currentModel.setListeners(null); - currentModel.getTextModel().setListeners(null); - currentModel = model; - VizController.getInstance().getModelClassLibrary().getNodeClass().setCurrentModeler(currentModel.getNodeModeler()); - currentModel.init(); + } + + @Override + public void setBackgroundColor(Color color) { + final VizModel model = getModel(); + if (model != null) { + model.setBackgroundColor(color); } } - public void destroy() { - engine.stopDisplay(); - drawable.destroy(); - engine = null; - scheduler = null; - graphIO = null; - vizEventManager = null; - modelClassLibrary = null; - dataBridge = null; - textManager = null; - screenshotMaker = null; - selectionManager = null; + @Override + public void setNodeScale(float nodeScale) { + final VizModel model = getModel(); + if (model != null) { + model.setNodeScale(nodeScale); + } } - public void resetSelection() { - if (selectionManager != null) { - selectionManager.resetSelection(); + @Override + public void setShowEdges(boolean showEdges) { + final VizModel model = getModel(); + if (model != null) { + model.setShowEdges(showEdges); } } - public void selectNode(Node node) { - if (selectionManager != null) { - selectionManager.selectNode(node); + @Override + public void setHideNonSelectedEdges(boolean hideNonSelectedEdges) { + final VizModel model = getModel(); + if (model != null) { + model.setHideNonSelectedEdges(hideNonSelectedEdges); } } - public void selectEdge(Edge edge) { - if (selectionManager != null) { - selectionManager.selectEdge(edge); + @Override + public void setEdgeWeightEstimator(Estimator estimator) { + final VizModel model = getModel(); + if (model != null) { + model.setEdgeWeightEstimator(estimator); } } @Override - public void selectNodes(Node[] nodes) { - if (selectionManager != null) { - selectionManager.selectNodes(nodes); + public void setLightenNonSelectedAuto(boolean lightenNonSelectedAuto) { + final VizModel model = getModel(); + if (model != null) { + model.setLightenNonSelectedAuto(lightenNonSelectedAuto); } } @Override - public void selectEdges(Edge[] edges) { - if (selectionManager != null) { - selectionManager.selectEdges(edges); + public void setEdgeColorMode(EdgeColorMode mode) { + final VizModel model = getModel(); + if (model != null) { + model.setEdgeColorMode(mode); + } + } + + @Override + public void setEdgeSelectionColor(boolean edgeSelectionColor) { + final VizModel model = getModel(); + if (model != null) { + model.setEdgeSelectionColor(edgeSelectionColor); + } + } + + @Override + public void setEdgeInSelectionColor(Color edgeInSelectionColor) { + final VizModel model = getModel(); + if (model != null) { + model.setEdgeInSelectionColor(edgeInSelectionColor); + } + } + + @Override + public void setEdgeOutSelectionColor(Color edgeOutSelectionColor) { + final VizModel model = getModel(); + if (model != null) { + model.setEdgeOutSelectionColor(edgeOutSelectionColor); + } + } + + @Override + public void setEdgeBothSelectionColor(Color edgeBothSelectionColor) { + final VizModel model = getModel(); + if (model != null) { + model.setEdgeBothSelectionColor(edgeBothSelectionColor); } } @Override - public Column[] getEdgeTextColumns() { - return new Column[0]; + public void setEdgeScale(float edgeScale) { + final VizModel model = getModel(); + if (model != null) { + model.setEdgeScale(edgeScale); + } } @Override - public Column[] getNodeTextColumns() { - return new Column[0]; + public void setUseEdgeWeight(boolean useEdgeWeight) { + final VizModel model = getModel(); + if (model != null) { + model.setUseEdgeWeight(useEdgeWeight); + } + } + + @Override + public void setRescaleEdgeWeight(boolean rescaleEdgeWeight) { + final VizModel model = getModel(); + if (model != null) { + model.setEdgeRescaleWeightEnabled(rescaleEdgeWeight); + } } - public VizModel getVizModel() { - return currentModel; + // TEXT + + @Override + public void setShowNodeLabels(boolean showNodeLabels) { + final VizModel model = getModel(); + if (model != null) { + model.setShowNodeLabels(showNodeLabels); + } + } + + @Override + public void setShowEdgeLabels(boolean showEdgeLabels) { + final VizModel model = getModel(); + if (model != null) { + model.setShowEdgeLabels(showEdgeLabels); + } } - public GraphDrawableImpl getDrawable() { - return drawable; + @Override + public void setNodeLabelFont(Font font) { + final VizModel model = getModel(); + if (model != null) { + model.setNodeLabelFont(font); + } } - public AbstractEngine getEngine() { - return engine; + @Override + public void setEdgeLabelFont(Font font) { + final VizModel model = getModel(); + if (model != null) { + model.setEdgeLabelFont(font); + } } - public GraphIO getGraphIO() { - return graphIO; + @Override + public void setNodeLabelScale(float scale) { + final VizModel model = getModel(); + if (model != null) { + model.setNodeLabelScale(scale); + } } - public Scheduler getScheduler() { - return scheduler; + @Override + public void setEdgeLabelScale(float scale) { + final VizModel model = getModel(); + if (model != null) { + model.setEdgeLabelScale(scale); + } } - public VizConfig getVizConfig() { - return vizConfig; + @Override + public void setEdgeLabelColorMode(LabelColorMode mode) { + final VizModel model = getModel(); + if (model != null) { + model.setEdgeLabelColorMode(mode); + } } - public ModelClassLibrary getModelClassLibrary() { - return modelClassLibrary; + @Override + public void setEdgeLabelSizeMode(LabelSizeMode mode) { + final VizModel model = getModel(); + if (model != null) { + model.setEdgeLabelSizeMode(mode); + } } - public VizEventManager getVizEventManager() { + @Override + public void setNodeLabelColorMode(LabelColorMode mode) { + final VizModel model = getModel(); + if (model != null) { + model.setNodeLabelColorMode(mode); + } + } + + @Override + public void setNodeLabelSizeMode(LabelSizeMode mode) { + final VizModel model = getModel(); + if (model != null) { + model.setNodeLabelSizeMode(mode); + } + } + + @Override + public void setHideNonSelectedNodeLabels(boolean hideNonSelected) { + final VizModel model = getModel(); + if (model != null) { + model.setHideNonSelectedNodeLabels(hideNonSelected); + } + } + + @Override + public void setHideNonSelectedEdgeLabels(boolean hideNonSelected) { + final VizModel model = getModel(); + if (model != null) { + model.setHideNonSelectedEdgeLabels(hideNonSelected); + } + } + + @Override + public void setNodeLabelFitToNodeSize(boolean fitToNodeSize) { + final VizModel model = getModel(); + if (model != null) { + model.setNodeLabelFitToNodeSize(fitToNodeSize); + } + } + + @Override + public void setAvoidNodeLabelOverlap(boolean avoidOverlap) { + final VizModel model = getModel(); + if (model != null) { + model.setAvoidNodeLabelOverlap(avoidOverlap); + } + } + + @Override + public void setNodeLabelColumns(Column[] columns) { + final VizModel model = getModel(); + if (model != null) { + model.setNodeLabelColumns(columns); + } + } + + @Override + public void setEdgeLabelColumns(Column[] columns) { + final VizModel model = getModel(); + if (model != null) { + model.setEdgeLabelColumns(columns); + } + } + + + public StandardVizEventManager getVizEventManager() { return vizEventManager; } - public GraphLimits getLimits() { - return limits; + @Override + public void centerOnGraph() { + getEngine().ifPresent( + VizEngine::centerOnGraph + ); + } + + @Override + public void centerOnZero() { + centerOn(0, 0, 1000, 1000); + } + + @Override + public void centerOn(float x, float y, float width, float height) { + getEngine().ifPresent( + engine -> engine.centerOn(new Vector2f(x, y), width, height) + ); + } + + @Override + public void centerOnNode(Node node) { + if (node == null) { + return; + } + getEngine().ifPresent( + engine -> { + final Vector2f position = new Vector2f(node.x(), node.y()); + final float size = node.size() * 10f; + engine.centerOn(position, size, size); + } + ); + } + + @Override + public void centerOnEdge(Edge edge) { + if (edge == null) { + return; + } + getEngine().ifPresent( + engine -> { + Node source = edge.getSource(); + Node target = edge.getTarget(); + float len = (float) Math.hypot(source.x() - target.x(), source.y() - target.y()); + final Vector2f position = new Vector2f((source.x() + target.x()) / 2f, (source.y() + target.y()) / 2f); + engine.centerOn(position, len, len); + } + ); + } + + @Override + public synchronized void disableSelection() { + VizModel model = getModel(); + if (model == null) { + return; + } + model.getSelectionModel().setSelectionEnable(false); + model.getSelectionModel().setRectangleSelection(false); + model.getSelectionModel().setCustomSelection(false); + model.getSelectionModel().setSingleNodeSelection(false); + model.getSelectionModel().setNodeSelection(false); + disableMouseHandler(); + setEngineSelectionMode(GraphSelection.GraphSelectionMode.NO_SELECTION); + model.fireSelectionChange(); + } + + @Override + public void setMouseSelectionDiameter(int diameter) { + VizModel model = getModel(); + if (model == null) { + return; + } + model.getSelectionModel().setMouseSelectionDiameter(diameter); + setEngineSelectionDiameter(diameter); + model.fireSelectionChange(); + } + + @Override + public void setMouseSelectionZoomProportional(boolean proportional) { + VizModel model = getModel(); + if (model == null) { + return; + } + model.getSelectionModel().setMouseSelectionZoomProportional(proportional); + setEngineMouseSelectionZoomProportional(proportional); + model.fireSelectionChange(); + } + + @Override + public synchronized void setRectangleSelection() { + VizModel model = getModel(); + if (model == null) { + return; + } + model.getSelectionModel().setSelectionEnable(true); + model.getSelectionModel().setRectangleSelection(true); + model.getSelectionModel().setCustomSelection(false); + model.getSelectionModel().setSingleNodeSelection(false); + model.getSelectionModel().setNodeSelection(false); + disableMouseHandler(); + setEngineSelectionMode(GraphSelection.GraphSelectionMode.RECTANGLE_SELECTION); + model.fireSelectionChange(); + } + + @Override + public synchronized void setDirectMouseSelection() { + VizModel model = getModel(); + if (model == null) { + return; + } + model.getSelectionModel().setSelectionEnable(true); + model.getSelectionModel().setRectangleSelection(false); + model.getSelectionModel().setCustomSelection(false); + model.getSelectionModel().setNodeSelection(false); + model.getSelectionModel().setSingleNodeSelection(false); + enableMouseHandler(); + setEngineSelectionMode(GraphSelection.GraphSelectionMode.SIMPLE_MOUSE_SELECTION); + model.fireSelectionChange(); + } + + @Override + public void setNodeSelection(boolean singleNode) { + VizModel model = getModel(); + if (model == null) { + return; + } + model.getSelectionModel().setSelectionEnable(true); + model.getSelectionModel().setRectangleSelection(false); + model.getSelectionModel().setCustomSelection(false); + model.getSelectionModel().setNodeSelection(true); + model.getSelectionModel().setSingleNodeSelection(singleNode); + disableMouseHandler(); + if (singleNode) { + setEngineSelectionMode(GraphSelection.GraphSelectionMode.SINGLE_NODE_SELECTION); + } else { + setEngineSelectionMode(GraphSelection.GraphSelectionMode.MULTI_NODE_SELECTION); + } + model.fireSelectionChange(); + } + + @Override + public synchronized void setCustomSelection() { + VizModel model = getModel(); + if (model == null) { + return; + } + model.getSelectionModel().setSelectionEnable(true); + model.getSelectionModel().setCustomSelection(true); + disableMouseHandler(); + setEngineSelectionMode(GraphSelection.GraphSelectionMode.CUSTOM_SELECTION); + model.fireSelectionChange(); + } + + @Override + public synchronized void resetSelection() { + VizModel model = getModel(); + if (model == null) { + return; + } + if (model.getSelectionModel().isCustomSelection()) { + model.getSelectionModel().currentEngineSelectionModel() + .ifPresent(GraphSelection::clearSelection); + model.getSelectionModel().setCustomSelection(false); + if (model.getSelectionModel().isRectangleSelection()) { + setEngineSelectionMode(GraphSelection.GraphSelectionMode.RECTANGLE_SELECTION); + } else if (model.getSelectionModel().isNodeSelection()) { + if (model.getSelectionModel().isSingleNodeSelection()) { + setEngineSelectionMode(GraphSelection.GraphSelectionMode.SINGLE_NODE_SELECTION); + } else { + setEngineSelectionMode(GraphSelection.GraphSelectionMode.MULTI_NODE_SELECTION); + } + } else if (model.getSelectionModel().isDirectMouseSelection()) { + enableMouseHandler(); + setEngineSelectionMode(GraphSelection.GraphSelectionMode.SIMPLE_MOUSE_SELECTION); + } else { + setEngineSelectionMode(GraphSelection.GraphSelectionMode.NO_SELECTION); + } + model.fireSelectionChange(); + } + } + + @Override + public void selectNodes(Node[] nodes) { + VizModel model = getModel(); + if (model == null) { + return; + } + if (!model.isCustomSelection()) { + setCustomSelection(); + } + + model.getSelectionModel().currentEngineSelectionModel() + .ifPresent(selection -> { + if (nodes == null || nodes.length == 0) { + selection.clearSelectedNodes(); + } else { + selection.setSelectedNodes(nodes); + } + }); } - public DataBridge getDataBridge() { - return dataBridge; + @Override + public void selectEdges(Edge[] edges) { + VizModel model = getModel(); + if (model == null) { + return; + } + if (!model.isCustomSelection()) { + setCustomSelection(); + } + + model.getSelectionModel().currentEngineSelectionModel() + .ifPresent(selection -> { + if (edges == null) { + selection.clearSelectedEdges(); + } else { + selection.setSelectedEdges(edges); + } + }); } - public TextManager getTextManager() { - return textManager; + private void setEngineSelectionMode(GraphSelection.GraphSelectionMode mode) { + VizModel model = getModel(); + if (model == null) { + return; + } + model.getSelectionModel().currentEngineSelectionModel().ifPresent(graphSelection -> { + graphSelection.setMode(mode); + }); } - public ScreenshotMaker getScreenshotMaker() { - return screenshotMaker; + private void setEngineSelectionDiameter(float diameter) { + VizModel model = getModel(); + if (model == null) { + return; + } + model.getSelectionModel().currentEngineSelectionModel().ifPresent(graphSelection -> { + graphSelection.setMouseSelectionDiameter(diameter); + }); } - public SelectionManager getSelectionManager() { - return selectionManager; + private void setEngineMouseSelectionZoomProportional(boolean proportional) { + VizModel model = getModel(); + if (model == null) { + return; + } + model.getSelectionModel().currentEngineSelectionModel().ifPresent(graphSelection -> { + graphSelection.setMouseSelectionDiameterZoomProportional(proportional); + }); } -// -// @Override -// public AttributeColumn[] getNodeTextColumns() { -// if (currentModel != null && currentModel.getTextModel() != null) { -// TextModelImpl textModel = currentModel.getTextModel(); -// return textModel.getNodeTextColumns(); -// } -// return new AttributeColumn[0]; -// } -// -// @Override -// public AttributeColumn[] getEdgeTextColumns() { -// if (currentModel != null && currentModel.getTextModel() != null) { -// TextModelImpl textModel = currentModel.getTextModel(); -// return textModel.getEdgeTextColumns(); -// } -// return new AttributeColumn[0]; -// } } diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/VizModel.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/VizModel.java index b8d4ec0f05..a4aebe527e 100644 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/VizModel.java +++ b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/VizModel.java @@ -39,339 +39,834 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.visualization; +import com.jogamp.newt.event.NEWTEvent; import java.awt.Color; +import java.awt.Font; import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; import java.util.ArrayList; -import java.util.Arrays; +import java.util.Collection; import java.util.List; -import javax.swing.SwingUtilities; +import java.util.Optional; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import javax.xml.stream.XMLStreamWriter; +import org.gephi.graph.api.AttributeUtils; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.Edge; +import org.gephi.graph.api.Estimator; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.GraphView; +import org.gephi.graph.api.Node; import org.gephi.project.api.Workspace; import org.gephi.ui.utils.ColorUtils; -import org.gephi.visualization.apiimpl.GraphDrawable; -import org.gephi.visualization.apiimpl.VizConfig; -import org.gephi.visualization.text.TextModelImpl; +import org.gephi.ui.utils.FontUtils; +import org.gephi.ui.utils.UIUtils; +import org.gephi.visualization.api.EdgeColorMode; +import org.gephi.visualization.api.LabelColorMode; +import org.gephi.visualization.api.LabelSizeMode; +import org.gephi.visualization.api.VisualizationModel; +import org.gephi.visualization.api.VisualizationPropertyChangeListener; +import org.gephi.visualization.screenshot.ScreenshotModelImpl; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.jogl.JOGLRenderingTarget; +import org.gephi.viz.engine.status.GraphRenderingOptions; +import org.gephi.viz.engine.status.GraphRenderingOptionsImpl; +import org.gephi.viz.engine.status.GraphSelection; +import org.gephi.viz.engine.util.text.TextLabelBuilder; +import org.joml.Vector2f; +import org.joml.Vector2fc; +import org.openide.util.Lookup; /** - * * @author Mathieu Bastian */ -public class VizModel { - - protected VizConfig config; - protected GraphLimits limits; - //Variable - protected float[] cameraPosition; - protected float[] cameraTarget; - protected TextModelImpl textModel; - protected boolean use3d; - protected boolean lighting; - protected boolean culling; - protected boolean material; - protected Color backgroundColor; - protected boolean rotatingEnable; - protected boolean showEdges; - protected boolean lightenNonSelectedAuto; - protected boolean autoSelectNeighbor; - protected boolean hideNonSelectedEdges; - protected boolean uniColorSelected; - protected boolean edgeHasUniColor; - protected float[] edgeUniColor; - protected boolean edgeSelectionColor; - protected float[] edgeInSelectionColor; - protected float[] edgeOutSelectionColor; - protected float[] edgeBothSelectionColor; - protected boolean adjustByText; - protected String nodeModeler; - protected float edgeScale; - //Listener - protected List listeners = new ArrayList(); - private boolean defaultModel = false; - - public VizModel() { +public class VizModel implements VisualizationModel { + + private final VizController vizController; + private final Workspace workspace; + private final GraphModel graphModel; + + //Global + private float zoom; + private Vector2fc pan; + private Color backgroundColor; + + //Edges + private boolean showEdges; + private float edgeScale; + private boolean edgeSelectionColor; + private Color edgeBothSelectionColor; + private Color edgeInSelectionColor; + private Color edgeOutSelectionColor; + private EdgeColorMode edgeColorMode; + private boolean edgeWeightEnabled; + private boolean edgeRescaleWeightEnabled; + + //Nodes + private float nodeScale; + + //Selection: + private boolean autoSelectNeighbours; + private boolean hideNonSelectedEdges; + private boolean lightenNonSelected; + private float lightenNonSelectedFactor; + + //Node Labels + private boolean showNodeLabels; + private Font nodeLabelFont; + private float nodeLabelScale; + private LabelColorMode nodeLabelColorMode; + private LabelSizeMode nodeLabelSizeMode; + private boolean hideNonSelectedNodeLabels; + private boolean fitNodeLabelsToNodeSize; + private boolean avoidNodeLabelOverlap; + private Column[] nodeLabelColumns = new Column[0]; + + //Edge Labels + private boolean showEdgeLabels; + private Font edgeLabelFont; + private float edgeLabelScale; + private LabelColorMode edgeLabelColorMode; + private LabelSizeMode edgeLabelSizeMode; + private boolean hideNonSelectedEdgeLabels; + private Column[] edgeLabelColumns = new Column[0]; + + // Selection + private final SelectionModelImpl selectionModel; + private final ScreenshotModelImpl screenshotModel; + + public VizModel(VizController controller, Workspace workspace) { + this.vizController = controller; + this.workspace = workspace; + this.graphModel = Lookup.getDefault().lookup(GraphController.class).getGraphModel(workspace); + this.selectionModel = new SelectionModelImpl(this); + this.screenshotModel = new ScreenshotModelImpl(this); + + // Initialize default values defaultValues(); - limits = VizController.getInstance().getLimits(); } - public VizModel(boolean defaultModel) { - this.defaultModel = defaultModel; - defaultValues(); - limits = VizController.getInstance().getLimits(); + private void defaultValues() { + //Global + if (UIUtils.isDarkLookAndFeel()) { + this.backgroundColor = VizConfig.getDefaultDarkBackgroundColor(); + } else { + this.backgroundColor = VizConfig.getDefaultBackgroundColor(); + } + this.zoom = VizConfig.getDefaultZoom(); + this.pan = VizConfig.getDefaultPan(); + + //Edges + this.showEdges = VizConfig.isDefaultShowEdges(); + this.edgeScale = VizConfig.getDefaultEdgeScale(); + this.edgeSelectionColor = VizConfig.isDefaultEdgeSelectionColor(); + this.edgeInSelectionColor = VizConfig.getDefaultEdgeInSelectedColor(); + this.edgeOutSelectionColor = VizConfig.getDefaultEdgeOutSelectedColor(); + this.edgeBothSelectionColor = VizConfig.getDefaultEdgeBothSelectedColor(); + this.edgeColorMode = VizConfig.getDefaultEdgeColorMode(); + this.edgeWeightEnabled = VizConfig.isDefaultUseEdgeWeight(); + this.edgeRescaleWeightEnabled = VizConfig.isDefaultRescaleEdgeWeight(); + + //Nodes + this.nodeScale = VizConfig.getDefaultNodeScale(); + + //Selection + this.autoSelectNeighbours = VizConfig.isDefaultAutoSelectNeighbor(); + this.hideNonSelectedEdges = VizConfig.isDefaultHideNonSelectedEdges(); + this.lightenNonSelected = VizConfig.isDefaultLightenNonSelectedAuto(); + this.lightenNonSelectedFactor = VizConfig.getDefaultLightenNonSelectedFactor(); + + //Node Labels + this.showNodeLabels = VizConfig.isDefaultShowNodeLabels(); + this.nodeLabelColorMode = VizConfig.getDefaultNodeLabelColorMode(); + this.nodeLabelSizeMode = VizConfig.getDefaultNodeLabelSizeMode(); + this.nodeLabelFont = VizConfig.getDefaultNodeLabelFont(); + this.nodeLabelScale = VizConfig.getDefaultNodeLabelScale(); + this.hideNonSelectedNodeLabels = VizConfig.isDefaultHideNonSelectedNodeLabels(); + this.fitNodeLabelsToNodeSize = VizConfig.isDefaultFitNodeLabelsToNodeSize(); + this.avoidNodeLabelOverlap = VizConfig.isDefaultAvoidNodeLabelOverlap(); + this.nodeLabelColumns = new Column[] {this.graphModel.defaultColumns().nodeLabel()}; + + //Edge Labels + this.showEdgeLabels = VizConfig.isDefaultShowEdgeLabels(); + this.edgeLabelColorMode = VizConfig.getDefaultEdgeLabelColorMode(); + this.edgeLabelSizeMode = VizConfig.getDefaultEdgeLabelSizeMode(); + this.edgeLabelFont = VizConfig.getDefaultEdgeLabelFont(); + this.edgeLabelScale = VizConfig.getDefaultEdgeLabelScale(); + this.hideNonSelectedEdgeLabels = VizConfig.isDefaultHideNonSelectedEdgeLabels(); + this.edgeLabelColumns = new Column[] {this.graphModel.defaultColumns().edgeLabel()}; } - public void init() { - final PropertyChangeEvent evt = new PropertyChangeEvent(this, "init", null, null); - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - if (listeners != null) { - for (PropertyChangeListener l : listeners) { - l.propertyChange(evt); - } - } - } + public GraphRenderingOptions toGraphRenderingOptions() { + GraphRenderingOptionsImpl options = new GraphRenderingOptionsImpl(); + options.setZoom(getZoom()); + options.setPan(getPan()); + options.setAutoSelectNeighbours(isAutoSelectNeighbors()); + options.setBackgroundColor(getBackgroundColor()); + options.setEdgeBothSelectionColor(getEdgeBothSelectionColor()); + options.setEdgeInSelectionColor(getEdgeInSelectionColor()); + options.setEdgeOutSelectionColor(getEdgeOutSelectionColor()); + options.setEdgeColorMode(GraphRenderingOptions.EdgeColorMode.valueOf(getEdgeColorMode().name())); + options.setEdgeScale(getEdgeScale()); + options.setEdgeSelectionColor(isEdgeSelectionColor()); + options.setEdgeWeightEnabled(isUseEdgeWeight()); + options.setEdgeRescaleWeightEnabled(isRescaleEdgeWeight()); + options.setHideNonSelectedEdges(isHideNonSelectedEdges()); + options.setLightenNonSelected(isLightenNonSelectedAuto()); + options.setLightenNonSelectedFactor(getLightenNonSelectedFactor()); + options.setNodeScale(getNodeScale()); + options.setShowEdges(isShowEdges()); + options.setShowEdgeLabels(isShowEdgeLabels()); + options.setShowNodeLabels(isShowNodeLabels()); + options.setNodeLabelSizeMode(GraphRenderingOptions.LabelSizeMode.valueOf(getNodeLabelSizeMode().name())); + options.setNodeLabelColorMode(GraphRenderingOptions.LabelColorMode.valueOf(getNodeLabelColorMode().name())); + options.setNodeLabelFont(getNodeLabelFont()); + options.setNodeLabelScale(getNodeLabelScale()); + options.setNodeLabelFitToNodeSize(isNodeLabelFitToNodeSize()); + options.setHideNonSelectedNodeLabels(isHideNonSelectedNodeLabels()); + options.setAvoidNodeLabelOverlap(isAvoidNodeLabelOverlap()); + options.setNodeLabelColumns(getNodeLabelColumns()); + options.setEdgeLabelColorMode(GraphRenderingOptions.LabelColorMode.valueOf(getEdgeLabelColorMode().name())); + options.setEdgeLabelSizeMode(GraphRenderingOptions.LabelSizeMode.valueOf(getEdgeLabelSizeMode().name())); + options.setEdgeLabelFont(getEdgeLabelFont()); + options.setEdgeLabelScale(getEdgeLabelScale()); + options.setHideNonSelectedEdgeLabels(isHideNonSelectedEdgeLabels()); + options.setEdgeLabelColumns(getEdgeLabelColumns()); + return options; + } + + public GraphSelection toGraphSelection() { + return selectionModel.toGraphSelection(); + } + + public void unsetup() { + getEngine().ifPresent(d -> { + GraphRenderingOptions options = d.getRenderingOptions(); + this.zoom = options.getZoom(); + this.pan = new Vector2f(options.getPan()); }); } - public boolean isDefaultModel() { - return defaultModel; + public SelectionModelImpl getSelectionModel() { + return selectionModel; } - public List getListeners() { - return listeners; + public ScreenshotModelImpl getScreenshotModel() { + return screenshotModel; } - public void setListeners(List listeners) { - this.listeners = listeners; + @Override + public Workspace getWorkspace() { + return workspace; } - private void defaultValues() { - config = VizController.getInstance().getVizConfig(); - cameraPosition = Arrays.copyOf(config.getDefaultCameraPosition(), 3); - cameraTarget = Arrays.copyOf(config.getDefaultCameraTarget(), 3); - textModel = new TextModelImpl(); - use3d = config.isDefaultUse3d(); - lighting = use3d; - culling = use3d; - material = use3d; - rotatingEnable = use3d; - backgroundColor = config.getDefaultBackgroundColor(); - - showEdges = config.isDefaultShowEdges(); - lightenNonSelectedAuto = config.isDefaultLightenNonSelectedAuto(); - autoSelectNeighbor = config.isDefaultAutoSelectNeighbor(); - hideNonSelectedEdges = config.isDefaultHideNonSelectedEdges(); - uniColorSelected = config.isDefaultUniColorSelected(); - edgeHasUniColor = config.isDefaultEdgeHasUniColor(); - edgeUniColor = config.getDefaultEdgeUniColor().getRGBComponents(null); - adjustByText = config.isDefaultAdjustByText(); - nodeModeler = use3d ? "CompatibilityNodeSphereModeler" : "CompatibilityNodeDiskModeler"; - edgeSelectionColor = config.isDefaultEdgeSelectionColor(); - edgeInSelectionColor = config.getDefaultEdgeInSelectedColor().getRGBComponents(null); - edgeOutSelectionColor = config.getDefaultEdgeOutSelectedColor().getRGBComponents(null); - edgeBothSelectionColor = config.getDefaultEdgeBothSelectedColor().getRGBComponents(null); - edgeScale = config.getDefaultEdgeScale(); - } - - //GETTERS - public boolean isAdjustByText() { - return adjustByText; - } - - public boolean isAutoSelectNeighbor() { - return autoSelectNeighbor; + public Optional> getEngine() { + return vizController.getCanvasManager().getEngine() + .filter(e -> e.getGraphModel() == graphModel); + } + + private Optional getRenderingOptions() { + return getEngine().map(VizEngine::getRenderingOptions); + } + + @Override + public float getZoom() { + return zoom; + } + + public void setZoom(float zoom) { + float oldValue = this.zoom; + if (oldValue != zoom) { + this.zoom = zoom; + getEngine().ifPresent(vizEngine -> vizEngine.setZoom(zoom)); + firePropertyChange("zoom", oldValue, zoom); + } + } + + public Vector2fc getPan() { + return pan; + } + + public void setPan(Vector2f pan) { + Vector2fc oldValue = this.pan; + if (!pan.equals(oldValue)) { + this.pan = pan; + getEngine().ifPresent(vizEngine -> vizEngine.setTranslate(pan)); + firePropertyChange("pan", oldValue, pan); + } + } + + @Override + public int getFps() { + return getEngine().map(VizEngine::getFps) + .orElse(0); + } + + @Override + public boolean isAutoSelectNeighbors() { + return autoSelectNeighbours; + } + + public void setAutoSelectNeighbors(boolean autoSelectNeighbor) { + boolean oldValue = this.autoSelectNeighbours; + if (oldValue != autoSelectNeighbor) { + this.autoSelectNeighbours = autoSelectNeighbor; + getRenderingOptions().ifPresent(options -> options.setAutoSelectNeighbours(autoSelectNeighbor)); + firePropertyChange("autoSelectNeighbor", oldValue, autoSelectNeighbor); + } } + @Override public Color getBackgroundColor() { return backgroundColor; } - public float[] getCameraPosition() { - return cameraPosition; + @Override + public boolean isBackgroundColorDark() { + return org.gephi.viz.engine.util.ColorUtils.isColorDark(backgroundColor.getRGBComponents(null)); } - public float[] getCameraTarget() { - return cameraTarget; + private void setBackgroundColor(float[] bgColor) { + Color color = new Color(bgColor[0], bgColor[1], bgColor[2], bgColor[3]); + setBackgroundColor(color); } - public boolean isCulling() { - return culling; + public void setBackgroundColor(Color backgroundColor) { + Color oldValue = this.backgroundColor; + if (oldValue != null && oldValue.equals(backgroundColor)) { + return; + } + this.backgroundColor = backgroundColor; + getEngine().ifPresent(vizEngine -> vizEngine.setBackgroundColor(backgroundColor)); + firePropertyChange("backgroundColor", oldValue, backgroundColor); } + @Override public boolean isShowEdges() { return showEdges; } - public boolean isEdgeHasUniColor() { - return edgeHasUniColor; + public void setShowEdges(boolean showEdges) { + boolean oldValue = this.showEdges; + if (oldValue != showEdges) { + this.showEdges = showEdges; + getRenderingOptions().ifPresent(options -> options.setShowEdges(showEdges)); + firePropertyChange("showEdges", oldValue, showEdges); + } + } + + @Override + public EdgeColorMode getEdgeColorMode() { + return edgeColorMode; } - public float[] getEdgeUniColor() { - return edgeUniColor; + public void setEdgeColorMode(EdgeColorMode edgeColorMode) { + EdgeColorMode oldValue = getEdgeColorMode(); + if (oldValue != edgeColorMode) { + this.edgeColorMode = edgeColorMode; + getRenderingOptions().ifPresent(options -> { + options.setEdgeColorMode(GraphRenderingOptions.EdgeColorMode.valueOf(edgeColorMode.name())); + }); + firePropertyChange("edgeColorMode", oldValue, edgeColorMode); + } } + @Override public boolean isHideNonSelectedEdges() { return hideNonSelectedEdges; } - public boolean isLightenNonSelectedAuto() { - return lightenNonSelectedAuto; + public void setHideNonSelectedEdges(boolean hideNonSelectedEdges) { + boolean oldValue = this.hideNonSelectedEdges; + if (oldValue != hideNonSelectedEdges) { + this.hideNonSelectedEdges = hideNonSelectedEdges; + getRenderingOptions().ifPresent(options -> options.setHideNonSelectedEdges(hideNonSelectedEdges)); + firePropertyChange("hideNonSelectedEdges", oldValue, hideNonSelectedEdges); + } } - public boolean isLighting() { - return lighting; + public Estimator getEdgeWeightEstimator() { + if (AttributeUtils.isDynamicType(graphModel.getConfiguration().getEdgeWeightType())) { + return graphModel.getEdgeTable().getColumn("weight").getEstimator(); + } + return null; } - public boolean isMaterial() { - return material; + public void setEdgeWeightEstimator(Estimator estimator) { + if (AttributeUtils.isDynamicType(graphModel.getConfiguration().getEdgeWeightType())) { + Estimator oldValue = graphModel.getEdgeTable().getColumn("weight").getEstimator(); + graphModel.getEdgeTable().getColumn("weight").setEstimator(estimator); + firePropertyChange("edgeWeightEstimator", oldValue, estimator); + } } - public boolean isRotatingEnable() { - return rotatingEnable; + @Override + public boolean isLightenNonSelectedAuto() { + return lightenNonSelected; } - public TextModelImpl getTextModel() { - return textModel; + public void setLightenNonSelectedAuto(boolean lightenNonSelectedAuto) { + boolean oldValue = this.lightenNonSelected; + if (oldValue != lightenNonSelectedAuto) { + this.lightenNonSelected = lightenNonSelectedAuto; + getRenderingOptions().ifPresent(options -> options.setLightenNonSelected(lightenNonSelectedAuto)); + firePropertyChange("lightenNonSelectedAuto", oldValue, lightenNonSelectedAuto); + } } - public boolean isUniColorSelected() { - return uniColorSelected; + public float getLightenNonSelectedFactor() { + return lightenNonSelectedFactor; } - public boolean isUse3d() { - return use3d; + public void setLightenNonSelectedFactor(float lightenNonSelectedFactor) { + float oldValue = this.lightenNonSelectedFactor; + if (oldValue != lightenNonSelectedFactor) { + this.lightenNonSelectedFactor = lightenNonSelectedFactor; + getRenderingOptions().ifPresent(options -> options.setLightenNonSelectedFactor(lightenNonSelectedFactor)); + firePropertyChange("lightenNonSelectedFactor", oldValue, lightenNonSelectedFactor); + } } - public VizConfig getConfig() { - return config; + @Override + public boolean isEdgeSelectionColor() { + return edgeSelectionColor; } - public String getNodeModeler() { - return nodeModeler; + public void setEdgeSelectionColor(boolean edgeSelectionColor) { + boolean oldValue = this.edgeSelectionColor; + if (oldValue != edgeSelectionColor) { + this.edgeSelectionColor = edgeSelectionColor; + getRenderingOptions().ifPresent(options -> options.setEdgeSelectionColor(edgeSelectionColor)); + firePropertyChange("edgeSelectionColor", oldValue, edgeSelectionColor); + } } - public boolean isEdgeSelectionColor() { - return edgeSelectionColor; + @Override + public Color getEdgeInSelectionColor() { + return edgeInSelectionColor; } - public float[] getEdgeInSelectionColor() { - return edgeInSelectionColor; + public void setEdgeInSelectionColor(Color edgeInSelectionColor) { + Color oldValue = this.edgeInSelectionColor; + if (oldValue != edgeInSelectionColor) { + this.edgeInSelectionColor = edgeInSelectionColor; + getRenderingOptions().ifPresent(options -> options.setEdgeInSelectionColor(edgeInSelectionColor)); + firePropertyChange("edgeInSelectionColor", oldValue, edgeInSelectionColor); + } } - public float[] getEdgeOutSelectionColor() { + @Override + public Color getEdgeOutSelectionColor() { return edgeOutSelectionColor; } - public float[] getEdgeBothSelectionColor() { + public void setEdgeOutSelectionColor(Color edgeOutSelectionColor) { + Color oldValue = this.edgeOutSelectionColor; + if (oldValue != edgeOutSelectionColor) { + this.edgeOutSelectionColor = edgeOutSelectionColor; + getRenderingOptions().ifPresent(options -> options.setEdgeOutSelectionColor(edgeOutSelectionColor)); + firePropertyChange("edgeOutSelectionColor", oldValue, edgeOutSelectionColor); + } + } + + @Override + public Color getEdgeBothSelectionColor() { return edgeBothSelectionColor; } + public void setEdgeBothSelectionColor(Color edgeBothSelectionColor) { + Color oldValue = this.edgeBothSelectionColor; + if (oldValue != edgeBothSelectionColor) { + this.edgeBothSelectionColor = edgeBothSelectionColor; + getRenderingOptions().ifPresent(options -> options.setEdgeBothSelectionColor(edgeBothSelectionColor)); + firePropertyChange("edgeBothSelectionColor", oldValue, edgeBothSelectionColor); + } + } + + @Override + public float getNodeScale() { + return nodeScale; + } + + public void setNodeScale(float nodeScale) { + float oldValue = this.nodeScale; + if (oldValue != nodeScale) { + this.nodeScale = nodeScale; + getRenderingOptions().ifPresent(options -> options.setNodeScale(nodeScale)); + firePropertyChange("nodeScale", oldValue, nodeScale); + } + } + + @Override public float getEdgeScale() { return edgeScale; } - //SETTERS - public void setAdjustByText(boolean adjustByText) { - this.adjustByText = adjustByText; - fireProperyChange("adjustByText", null, adjustByText); + public void setEdgeScale(float edgeScale) { + float oldValue = this.edgeScale; + if (oldValue != edgeScale) { + this.edgeScale = edgeScale; + getRenderingOptions().ifPresent(options -> options.setEdgeScale(edgeScale)); + firePropertyChange("edgeScale", oldValue, edgeScale); + } } - public void setAutoSelectNeighbor(boolean autoSelectNeighbor) { - this.autoSelectNeighbor = autoSelectNeighbor; - fireProperyChange("autoSelectNeighbor", null, autoSelectNeighbor); + @Override + public boolean isUseEdgeWeight() { + return edgeWeightEnabled; } - public void setBackgroundColor(Color backgroundColor) { - this.backgroundColor = backgroundColor; - fireProperyChange("backgroundColor", null, backgroundColor); + public void setUseEdgeWeight(boolean useEdgeWeight) { + boolean oldValue = this.edgeWeightEnabled; + if (oldValue != useEdgeWeight) { + this.edgeWeightEnabled = useEdgeWeight; + getRenderingOptions().ifPresent(options -> options.setEdgeWeightEnabled(useEdgeWeight)); + firePropertyChange("useEdgeWeight", oldValue, useEdgeWeight); + } } - public void setShowEdges(boolean showEdges) { - this.showEdges = showEdges; - fireProperyChange("showEdges", null, showEdges); + @Override + public boolean isRescaleEdgeWeight() { + return edgeRescaleWeightEnabled; } - public void setEdgeHasUniColor(boolean edgeHasUniColor) { - this.edgeHasUniColor = edgeHasUniColor; - fireProperyChange("edgeHasUniColor", null, edgeHasUniColor); + public void setEdgeRescaleWeightEnabled(boolean edgeRescaleWeightEnabled) { + boolean oldValue = this.edgeRescaleWeightEnabled; + if (oldValue != edgeRescaleWeightEnabled) { + this.edgeRescaleWeightEnabled = edgeRescaleWeightEnabled; + getRenderingOptions().ifPresent(options -> options.setEdgeRescaleWeightEnabled(edgeRescaleWeightEnabled)); + firePropertyChange("edgeRescaleWeightEnabled", oldValue, edgeRescaleWeightEnabled); + } } - public void setEdgeUniColor(float[] edgeUniColor) { - this.edgeUniColor = edgeUniColor; - fireProperyChange("edgeUniColor", null, edgeUniColor); + // TEXT + + @Override + public boolean isShowNodeLabels() { + return showNodeLabels; } - public void setHideNonSelectedEdges(boolean hideNonSelectedEdges) { - this.hideNonSelectedEdges = hideNonSelectedEdges; - fireProperyChange("hideNonSelectedEdges", null, hideNonSelectedEdges); + public void setShowNodeLabels(boolean showNodeLabels) { + boolean oldValue = this.showNodeLabels; + if (oldValue != showNodeLabels) { + this.showNodeLabels = showNodeLabels; + getRenderingOptions().ifPresent(options -> options.setShowNodeLabels(showNodeLabels)); + firePropertyChange("showNodeLabels", oldValue, showNodeLabels); + } } - public void setLightenNonSelectedAuto(boolean lightenNonSelectedAuto) { - this.lightenNonSelectedAuto = lightenNonSelectedAuto; - fireProperyChange("lightenNonSelectedAuto", null, lightenNonSelectedAuto); + @Override + public boolean isShowEdgeLabels() { + return showEdgeLabels; } - public void setUniColorSelected(boolean uniColorSelected) { - this.uniColorSelected = uniColorSelected; - fireProperyChange("uniColorSelected", null, uniColorSelected); + public void setShowEdgeLabels(boolean showEdgeLabels) { + boolean oldValue = this.showEdgeLabels; + if (oldValue != showEdgeLabels) { + this.showEdgeLabels = showEdgeLabels; + getRenderingOptions().ifPresent(options -> options.setShowEdgeLabels(showEdgeLabels)); + firePropertyChange("showEdgeLabels", oldValue, showEdgeLabels); + } } - public void setUse3d(boolean use3d) { - this.use3d = use3d; - //Additional - this.lighting = use3d; - this.culling = use3d; - this.rotatingEnable = use3d; - this.material = use3d; - fireProperyChange("use3d", null, use3d); + @Override + public LabelColorMode getNodeLabelColorMode() { + return nodeLabelColorMode; } - public void setNodeModeler(String nodeModeler) { - this.nodeModeler = nodeModeler; - fireProperyChange("nodeModeler", null, nodeModeler); + public void setNodeLabelColorMode(LabelColorMode nodeLabelColorMode) { + LabelColorMode oldValue = this.nodeLabelColorMode; + if (oldValue != nodeLabelColorMode) { + this.nodeLabelColorMode = nodeLabelColorMode; + getRenderingOptions().ifPresent(options -> options.setNodeLabelColorMode( + GraphRenderingOptions.LabelColorMode.valueOf(nodeLabelColorMode.name()))); + firePropertyChange("nodeLabelColorMode", oldValue, nodeLabelColorMode); + } } - public void setEdgeSelectionColor(boolean edgeSelectionColor) { - this.edgeSelectionColor = edgeSelectionColor; - fireProperyChange("edgeSelectionColor", null, edgeSelectionColor); + @Override + public LabelSizeMode getNodeLabelSizeMode() { + return nodeLabelSizeMode; } - public void setEdgeInSelectionColor(float[] edgeInSelectionColor) { - this.edgeInSelectionColor = edgeInSelectionColor; - fireProperyChange("edgeInSelectionColor", null, edgeInSelectionColor); + public void setNodeLabelSizeMode(LabelSizeMode nodeLabelSizeMode) { + LabelSizeMode oldValue = this.nodeLabelSizeMode; + if (oldValue != nodeLabelSizeMode) { + this.nodeLabelSizeMode = nodeLabelSizeMode; + getRenderingOptions().ifPresent(options -> options.setNodeLabelSizeMode( + GraphRenderingOptions.LabelSizeMode.valueOf(nodeLabelSizeMode.name())) + ); + firePropertyChange("nodeLabelSizeMode", oldValue, nodeLabelSizeMode); + } } - public void setEdgeOutSelectionColor(float[] edgeOutSelectionColor) { - this.edgeOutSelectionColor = edgeOutSelectionColor; - fireProperyChange("edgeOutSelectionColor", null, edgeOutSelectionColor); + @Override + public Font getNodeLabelFont() { + return nodeLabelFont; } - public void setEdgeBothSelectionColor(float[] edgeBothSelectionColor) { - this.edgeBothSelectionColor = edgeBothSelectionColor; - fireProperyChange("edgeBothSelectionColor", null, edgeBothSelectionColor); + public void setNodeLabelFont(Font nodeLabelFont) { + Font oldValue = this.nodeLabelFont; + if (oldValue != nodeLabelFont) { + this.nodeLabelFont = nodeLabelFont; + getRenderingOptions().ifPresent(options -> options.setNodeLabelFont(nodeLabelFont)); + firePropertyChange("nodeLabelFont", oldValue, nodeLabelFont); + } } - public void setEdgeScale(float edgeScale) { - this.edgeScale = edgeScale; - fireProperyChange("edgeScale", null, edgeScale); + @Override + public Font getEdgeLabelFont() { + return edgeLabelFont; } - public GraphLimits getLimits() { - return limits; + public void setEdgeLabelFont(Font edgeLabelFont) { + Font oldValue = this.edgeLabelFont; + if (oldValue != edgeLabelFont) { + this.edgeLabelFont = edgeLabelFont; + getRenderingOptions().ifPresent(options -> options.setEdgeLabelFont(edgeLabelFont)); + firePropertyChange("edgeLabelFont", oldValue, edgeLabelFont); + } } - public float getCameraDistance() { - GraphDrawable drawable = VizController.getInstance().getDrawable(); - return drawable.getCameraVector().length(); + @Override + public LabelColorMode getEdgeLabelColorMode() { + return edgeLabelColorMode; } - public void setCameraDistance(float distance) { + public void setEdgeLabelColorMode(LabelColorMode edgeLabelColorMode) { + LabelColorMode oldValue = this.edgeLabelColorMode; + if (oldValue != edgeLabelColorMode) { + this.edgeLabelColorMode = edgeLabelColorMode; + getRenderingOptions().ifPresent(options -> options.setEdgeLabelColorMode( + GraphRenderingOptions.LabelColorMode.valueOf(edgeLabelColorMode.name()))); + firePropertyChange("edgeLabelColorMode", oldValue, edgeLabelColorMode); + } } - //EVENTS - public void addPropertyChangeListener(PropertyChangeListener listener) { - listeners.add(listener); + @Override + public LabelSizeMode getEdgeLabelSizeMode() { + return edgeLabelSizeMode; + } + + public void setEdgeLabelSizeMode(LabelSizeMode edgeLabelSizeMode) { + LabelSizeMode oldValue = this.edgeLabelSizeMode; + if (oldValue != edgeLabelSizeMode) { + this.edgeLabelSizeMode = edgeLabelSizeMode; + getRenderingOptions().ifPresent(options -> options.setEdgeLabelSizeMode( + GraphRenderingOptions.LabelSizeMode.valueOf(edgeLabelSizeMode.name())) + ); + firePropertyChange("edgeLabelSizeMode", oldValue, edgeLabelSizeMode); + } + } + + @Override + public float getNodeLabelScale() { + return nodeLabelScale; } - public void removePropertyChangeListener(PropertyChangeListener listener) { - listeners.remove(listener); + public void setNodeLabelScale(float nodeLabelScale) { + float oldValue = this.nodeLabelScale; + if (oldValue != nodeLabelScale) { + this.nodeLabelScale = nodeLabelScale; + getRenderingOptions().ifPresent(options -> options.setNodeLabelScale(nodeLabelScale)); + firePropertyChange("nodeLabelScale", oldValue, nodeLabelScale); + } + } + + @Override + public float getEdgeLabelScale() { + return edgeLabelScale; + } + + public void setEdgeLabelScale(float edgeLabelScale) { + float oldValue = this.edgeLabelScale; + if (oldValue != edgeLabelScale) { + this.edgeLabelScale = edgeLabelScale; + getRenderingOptions().ifPresent(options -> options.setEdgeLabelScale(edgeLabelScale)); + firePropertyChange("edgeLabelScale", oldValue, edgeLabelScale); + } + } + + @Override + public boolean isHideNonSelectedNodeLabels() { + return hideNonSelectedNodeLabels; } - public void fireProperyChange(String propertyName, Object oldvalue, Object newValue) { - PropertyChangeEvent evt = new PropertyChangeEvent(this, propertyName, oldvalue, newValue); - for (PropertyChangeListener l : listeners) { - l.propertyChange(evt); + public void setHideNonSelectedNodeLabels(boolean hideNonSelectedNodeLabels) { + boolean oldValue = this.hideNonSelectedNodeLabels; + if (oldValue != hideNonSelectedNodeLabels) { + this.hideNonSelectedNodeLabels = hideNonSelectedNodeLabels; + getRenderingOptions().ifPresent(options -> options.setHideNonSelectedNodeLabels(hideNonSelectedNodeLabels)); + firePropertyChange("hideNonSelectedNodeLabels", oldValue, hideNonSelectedNodeLabels); } } + @Override + public boolean isHideNonSelectedEdgeLabels() { + return hideNonSelectedEdgeLabels; + } + + public void setHideNonSelectedEdgeLabels(boolean hideNonSelectedEdgeLabels) { + boolean oldValue = this.hideNonSelectedEdgeLabels; + if (oldValue != hideNonSelectedEdgeLabels) { + this.hideNonSelectedEdgeLabels = hideNonSelectedEdgeLabels; + getRenderingOptions().ifPresent(options -> options.setHideNonSelectedEdgeLabels(hideNonSelectedEdgeLabels)); + firePropertyChange("hideNonSelectedEdgeLabels", oldValue, hideNonSelectedEdgeLabels); + } + } + + @Override + public boolean isNodeLabelFitToNodeSize() { + return fitNodeLabelsToNodeSize; + } + + public void setNodeLabelFitToNodeSize(boolean fitNodeLabelsToNodeSize) { + boolean oldValue = this.fitNodeLabelsToNodeSize; + if (oldValue != fitNodeLabelsToNodeSize) { + this.fitNodeLabelsToNodeSize = fitNodeLabelsToNodeSize; + getRenderingOptions().ifPresent(options -> options.setNodeLabelFitToNodeSize(fitNodeLabelsToNodeSize)); + firePropertyChange("nodeLabelFitToNodeSize", oldValue, fitNodeLabelsToNodeSize); + } + } + + @Override + public boolean isAvoidNodeLabelOverlap() { + return avoidNodeLabelOverlap; + } + + public void setAvoidNodeLabelOverlap(boolean avoidNodeLabelOverlap) { + boolean oldValue = this.avoidNodeLabelOverlap; + if (oldValue != avoidNodeLabelOverlap) { + this.avoidNodeLabelOverlap = avoidNodeLabelOverlap; + getRenderingOptions().ifPresent(options -> options.setAvoidNodeLabelOverlap(avoidNodeLabelOverlap)); + firePropertyChange("avoidNodeLabelOverlap", oldValue, avoidNodeLabelOverlap); + } + } + + @Override + public Column[] getNodeLabelColumns() { + return nodeLabelColumns; + } + + @Override + public String getNodeLabel(Node node, GraphView view) { + return TextLabelBuilder.buildText(node, view, getNodeLabelColumns()); + } + + @Override + public String getEdgeLabel(Edge edge, GraphView view) { + return TextLabelBuilder.buildText(edge, view, getEdgeLabelColumns()); + } + + public void setNodeLabelColumns(Column[] nodeLabelColumns) { + Column[] oldValue = this.nodeLabelColumns; + if (oldValue != nodeLabelColumns) { + this.nodeLabelColumns = nodeLabelColumns; + getRenderingOptions().ifPresent(options -> options.setNodeLabelColumns(nodeLabelColumns)); + firePropertyChange("nodeLabelColumns", oldValue, nodeLabelColumns); + } + } + + @Override + public Column[] getEdgeLabelColumns() { + return edgeLabelColumns; + } + + public void setEdgeLabelColumns(Column[] edgeLabelColumns) { + Column[] oldValue = this.edgeLabelColumns; + if (oldValue != edgeLabelColumns) { + this.edgeLabelColumns = edgeLabelColumns; + getRenderingOptions().ifPresent(options -> options.setEdgeLabelColumns(edgeLabelColumns)); + firePropertyChange("edgeLabelColumns", oldValue, edgeLabelColumns); + } + } + + //EVENTS + + public void fireSelectionChange() { + //Copy to avoid possible concurrent modification: + final VisualizationPropertyChangeListener[] listenersCopy = + vizController.listeners.toArray(new VisualizationPropertyChangeListener[0]); + + final PropertyChangeEvent evt = new PropertyChangeEvent(this, "selection", null, null); + for (VisualizationPropertyChangeListener l : listenersCopy) { + l.propertyChange(this, evt); + } + } + + public void firePropertyChange(String propertyName, Object oldvalue, Object newValue) { + // Do not fire if nothing has changed, supporting null values + if (oldvalue == null && newValue == null) { + return; + } + if (oldvalue != null && oldvalue.equals(newValue)) { + return; + } + if (newValue != null && newValue.equals(oldvalue)) { + return; + } + + //Copy to avoid possible concurrent modification: + final VisualizationPropertyChangeListener[] listenersCopy = + vizController.listeners.toArray(new VisualizationPropertyChangeListener[0]); + + final PropertyChangeEvent evt = new PropertyChangeEvent(this, propertyName, oldvalue, newValue); + for (VisualizationPropertyChangeListener l : listenersCopy) { + l.propertyChange(this, evt); + } + } + + @Override + public int getMouseSelectionDiameter() { + return selectionModel.getMouseSelectionDiameter(); + } + + @Override + public boolean isMouseSelectionZoomProportional() { + return selectionModel.isMouseSelectionZoomProportional(); + } + + @Override + public boolean isRectangleSelection() { + return selectionModel.isRectangleSelection(); + } + + @Override + public boolean isDirectMouseSelection() { + return selectionModel.isDirectMouseSelection(); + } + + @Override + public boolean isCustomSelection() { + return selectionModel.isCustomSelection(); + } + + @Override + public boolean isSelectionEnabled() { + return selectionModel.isSelectionEnabled(); + } + + @Override + public boolean isNodeSelection() { + return selectionModel.isNodeSelection(); + } + + @Override + public boolean isSingleNodeSelection() { + return selectionModel.isNodeSelection() && selectionModel.isSingleNodeSelection(); + } + + @Override + public Collection getSelectedNodes() { + return selectionModel.getSelectedNodes(); + } + //XML public void readXML(XMLStreamReader reader, Workspace workspace) throws XMLStreamException { - boolean end = false; while (reader.hasNext() && !end) { int type = reader.next(); @@ -379,57 +874,135 @@ public void readXML(XMLStreamReader reader, Workspace workspace) throws XMLStrea switch (type) { case XMLStreamReader.START_ELEMENT: String name = reader.getLocalName(); - if ("textmodel".equalsIgnoreCase(name)) { - textModel.readXML(reader, workspace); + // Sub-models + if ("screenshotModel".equalsIgnoreCase(name)) { + screenshotModel.readXML(reader); + } else if ("selectionModel".equalsIgnoreCase(name)) { + selectionModel.readXML(reader); + // Legacy: old TextModelImpl persisted under inside + } else if ("textmodel".equalsIgnoreCase(name)) { + readLegacyTextModel(reader); + // Legacy: old was a self-closing element with inline attributes + } else if ("screenshotMaker".equalsIgnoreCase(name)) { + readLegacyScreenshotMaker(reader); + // Global } else if ("cameraposition".equalsIgnoreCase(name)) { - cameraPosition[0] = Float.parseFloat(reader.getAttributeValue(null, "x")); - cameraPosition[1] = Float.parseFloat(reader.getAttributeValue(null, "y")); - cameraPosition[2] = Float.parseFloat(reader.getAttributeValue(null, "z")); - } else if ("cameratarget".equalsIgnoreCase(name)) { - cameraTarget[0] = Float.parseFloat(reader.getAttributeValue(null, "x")); - cameraTarget[1] = Float.parseFloat(reader.getAttributeValue(null, "y")); - cameraTarget[2] = Float.parseFloat(reader.getAttributeValue(null, "z")); - } else if ("use3d".equalsIgnoreCase(name)) { - setUse3d(Boolean.parseBoolean(reader.getAttributeValue(null, "value"))); - } else if ("lighting".equalsIgnoreCase(name)) { - lighting = Boolean.parseBoolean(reader.getAttributeValue(null, "value")); - } else if ("culling".equalsIgnoreCase(name)) { - culling = Boolean.parseBoolean(reader.getAttributeValue(null, "value")); - } else if ("material".equalsIgnoreCase(name)) { - material = Boolean.parseBoolean(reader.getAttributeValue(null, "value")); - } else if ("rotatingenable".equalsIgnoreCase(name)) { - rotatingEnable = Boolean.parseBoolean(reader.getAttributeValue(null, "value")); + String x = reader.getAttributeValue(null, "x"); + String y = reader.getAttributeValue(null, "y"); + if (x != null && y != null) { + this.pan = new Vector2f(Float.parseFloat(x), Float.parseFloat(y)); + } + } else if ("zoom".equalsIgnoreCase(name)) { + this.zoom = Float.parseFloat(reader.getAttributeValue(null, "value")); + // Edges } else if ("showedges".equalsIgnoreCase(name)) { setShowEdges(Boolean.parseBoolean(reader.getAttributeValue(null, "value"))); - } else if ("lightennonselectedauto".equalsIgnoreCase(name)) { - setLightenNonSelectedAuto(Boolean.parseBoolean(reader.getAttributeValue(null, "value"))); + } else if ("edgeScale".equalsIgnoreCase(name)) { + setEdgeScale(Float.parseFloat(reader.getAttributeValue(null, "value"))); + } else if ("nodeScale".equalsIgnoreCase(name)) { + setNodeScale(Float.parseFloat(reader.getAttributeValue(null, "value"))); + } else if ("edgeColorMode".equalsIgnoreCase(name)) { + String v = reader.getAttributeValue(null, "value"); + if (v != null) { + try { + setEdgeColorMode(EdgeColorMode.valueOf(v)); + } catch (IllegalArgumentException ignored) { + } + } + } else if ("edgeWeightEnabled".equalsIgnoreCase(name)) { + setUseEdgeWeight(Boolean.parseBoolean(reader.getAttributeValue(null, "value"))); + } else if ("edgeRescaleWeightEnabled".equalsIgnoreCase(name)) { + setEdgeRescaleWeightEnabled(Boolean.parseBoolean(reader.getAttributeValue(null, "value"))); + // Selection } else if ("autoselectneighbor".equalsIgnoreCase(name)) { - setAutoSelectNeighbor(Boolean.parseBoolean(reader.getAttributeValue(null, "value"))); + setAutoSelectNeighbors(Boolean.parseBoolean(reader.getAttributeValue(null, "value"))); } else if ("hidenonselectededges".equalsIgnoreCase(name)) { setHideNonSelectedEdges(Boolean.parseBoolean(reader.getAttributeValue(null, "value"))); - } else if ("unicolorselected".equalsIgnoreCase(name)) { - setUniColorSelected(Boolean.parseBoolean(reader.getAttributeValue(null, "value"))); - } else if ("edgehasunicolor".equalsIgnoreCase(name)) { - setEdgeHasUniColor(Boolean.parseBoolean(reader.getAttributeValue(null, "value"))); - } else if ("adjustbytext".equalsIgnoreCase(name)) { - setAdjustByText(Boolean.parseBoolean(reader.getAttributeValue(null, "value"))); + } else if ("lightennonselectedauto".equalsIgnoreCase(name)) { + setLightenNonSelectedAuto(Boolean.parseBoolean(reader.getAttributeValue(null, "value"))); + } else if ("lightenNonSelectedFactor".equalsIgnoreCase(name)) { + setLightenNonSelectedFactor(Float.parseFloat(reader.getAttributeValue(null, "value"))); } else if ("edgeSelectionColor".equalsIgnoreCase(name)) { setEdgeSelectionColor(Boolean.parseBoolean(reader.getAttributeValue(null, "value"))); - + // Colors } else if ("backgroundcolor".equalsIgnoreCase(name)) { setBackgroundColor(ColorUtils.decode(reader.getAttributeValue(null, "value"))); - } else if ("edgeunicolor".equalsIgnoreCase(name)) { - setEdgeUniColor(ColorUtils.decode(reader.getAttributeValue(null, "value")).getRGBComponents(null)); } else if ("edgeInSelectionColor".equalsIgnoreCase(name)) { - setEdgeInSelectionColor(ColorUtils.decode(reader.getAttributeValue(null, "value")).getRGBComponents(null)); + setEdgeInSelectionColor(ColorUtils.decode(reader.getAttributeValue(null, "value"))); } else if ("edgeOutSelectionColor".equalsIgnoreCase(name)) { - setEdgeOutSelectionColor(ColorUtils.decode(reader.getAttributeValue(null, "value")).getRGBComponents(null)); + setEdgeOutSelectionColor(ColorUtils.decode(reader.getAttributeValue(null, "value"))); } else if ("edgeBothSelectionColor".equalsIgnoreCase(name)) { - setEdgeBothSelectionColor(ColorUtils.decode(reader.getAttributeValue(null, "value")).getRGBComponents(null)); - } else if ("nodemodeler".equalsIgnoreCase(name)) { - setNodeModeler(reader.getAttributeValue(null, "value")); - } else if ("edgeScale".equalsIgnoreCase(name)) { - setEdgeScale(Float.parseFloat(reader.getAttributeValue(null, "value"))); + setEdgeBothSelectionColor(ColorUtils.decode(reader.getAttributeValue(null, "value"))); + // Node Labels + } else if ("showNodeLabels".equalsIgnoreCase(name)) { + setShowNodeLabels(Boolean.parseBoolean(reader.getAttributeValue(null, "value"))); + } else if ("nodeLabelFont".equalsIgnoreCase(name)) { + String v = reader.getAttributeValue(null, "value"); + if (v != null) { + setNodeLabelFont(Font.decode(v)); + } + } else if ("nodeLabelScale".equalsIgnoreCase(name)) { + setNodeLabelScale(Float.parseFloat(reader.getAttributeValue(null, "value"))); + } else if ("nodeLabelColorMode".equalsIgnoreCase(name)) { + String v = reader.getAttributeValue(null, "value"); + if (v != null) { + try { + setNodeLabelColorMode(LabelColorMode.valueOf(v)); + } catch (IllegalArgumentException ignored) { + } + } + } else if ("nodeLabelSizeMode".equalsIgnoreCase(name)) { + String v = reader.getAttributeValue(null, "value"); + if (v != null) { + try { + setNodeLabelSizeMode(LabelSizeMode.valueOf(v)); + } catch (IllegalArgumentException ignored) { + } + } + } else if ("hideNonSelectedNodeLabels".equalsIgnoreCase(name)) { + setHideNonSelectedNodeLabels(Boolean.parseBoolean(reader.getAttributeValue(null, "value"))); + } else if ("fitNodeLabelsToNodeSize".equalsIgnoreCase(name)) { + setNodeLabelFitToNodeSize(Boolean.parseBoolean(reader.getAttributeValue(null, "value"))); + } else if ("avoidNodeLabelOverlap".equalsIgnoreCase(name)) { + setAvoidNodeLabelOverlap(Boolean.parseBoolean(reader.getAttributeValue(null, "value"))); + } else if ("nodeLabelColumns".equalsIgnoreCase(name)) { + Column[] cols = readLabelColumns(reader, "nodeLabelColumns", graphModel.getNodeTable()); + if (cols != null) { + setNodeLabelColumns(cols); + } + // Edge Labels + } else if ("showEdgeLabels".equalsIgnoreCase(name)) { + setShowEdgeLabels(Boolean.parseBoolean(reader.getAttributeValue(null, "value"))); + } else if ("edgeLabelFont".equalsIgnoreCase(name)) { + String v = reader.getAttributeValue(null, "value"); + if (v != null) { + setEdgeLabelFont(Font.decode(v)); + } + } else if ("edgeLabelScale".equalsIgnoreCase(name)) { + setEdgeLabelScale(Float.parseFloat(reader.getAttributeValue(null, "value"))); + } else if ("edgeLabelColorMode".equalsIgnoreCase(name)) { + String v = reader.getAttributeValue(null, "value"); + if (v != null) { + try { + setEdgeLabelColorMode(LabelColorMode.valueOf(v)); + } catch (IllegalArgumentException ignored) { + } + } + } else if ("edgeLabelSizeMode".equalsIgnoreCase(name)) { + String v = reader.getAttributeValue(null, "value"); + if (v != null) { + try { + setEdgeLabelSizeMode(LabelSizeMode.valueOf(v)); + } catch (IllegalArgumentException ignored) { + } + } + } else if ("hideNonSelectedEdgeLabels".equalsIgnoreCase(name)) { + setHideNonSelectedEdgeLabels(Boolean.parseBoolean(reader.getAttributeValue(null, "value"))); + } else if ("edgeLabelColumns".equalsIgnoreCase(name)) { + Column[] cols = readLabelColumns(reader, "edgeLabelColumns", graphModel.getEdgeTable()); + if (cols != null) { + setEdgeLabelColumns(cols); + } } break; case XMLStreamReader.END_ELEMENT: @@ -441,114 +1014,315 @@ public void readXML(XMLStreamReader reader, Workspace workspace) throws XMLStrea } } - public void writeXML(XMLStreamWriter writer) throws XMLStreamException { + /** + * Reads the legacy {@code } element written by Gephi 0.10 and earlier, mapping its + * content onto the equivalent fields of the current model. + */ + private void readLegacyTextModel(XMLStreamReader reader) throws XMLStreamException { + List nodeCols = new ArrayList<>(); + List edgeCols = new ArrayList<>(); + boolean inNodeColumns = false; + boolean inEdgeColumns = false; + boolean readNodeSizeFactor = false; + boolean readEdgeSizeFactor = false; + boolean end = false; - writer.writeStartElement("vizmodel"); + while (reader.hasNext() && !end) { + int type = reader.next(); + switch (type) { + case XMLStreamReader.START_ELEMENT: + String name = reader.getLocalName(); + if ("shownodelabels".equalsIgnoreCase(name)) { + setShowNodeLabels(Boolean.parseBoolean(reader.getAttributeValue(null, "enable"))); + } else if ("showedgelabels".equalsIgnoreCase(name)) { + setShowEdgeLabels(Boolean.parseBoolean(reader.getAttributeValue(null, "enable"))); + } else if ("selectedOnly".equalsIgnoreCase(name)) { + // Old "show selected labels only" maps to hiding non-selected labels + boolean selectedOnly = Boolean.parseBoolean(reader.getAttributeValue(null, "value")); + setHideNonSelectedNodeLabels(selectedOnly); + setHideNonSelectedEdgeLabels(selectedOnly); + } else if ("nodefont".equalsIgnoreCase(name)) { + // Old format stored font as separate name/size/style attributes + String fontName = reader.getAttributeValue(null, "name"); + int fontSize = Integer.parseInt(reader.getAttributeValue(null, "size")); + int fontStyle = Integer.parseInt(reader.getAttributeValue(null, "style")); + setNodeLabelFont(new Font(fontName, fontStyle, fontSize)); + } else if ("edgefont".equalsIgnoreCase(name)) { + String fontName = reader.getAttributeValue(null, "name"); + int fontSize = Integer.parseInt(reader.getAttributeValue(null, "size")); + int fontStyle = Integer.parseInt(reader.getAttributeValue(null, "style")); + setEdgeLabelFont(new Font(fontName, fontStyle, fontSize)); + } else if ("nodesizefactor".equalsIgnoreCase(name)) { + readNodeSizeFactor = true; + } else if ("edgesizefactor".equalsIgnoreCase(name)) { + readEdgeSizeFactor = true; + } else if ("colormode".equalsIgnoreCase(name)) { + // ObjectColorMode β†’ OBJECT; everything else (TextColorMode, UniqueColorMode) β†’ SELF + String cls = reader.getAttributeValue(null, "class"); + LabelColorMode colorMode = + "ObjectColorMode".equals(cls) ? LabelColorMode.OBJECT : LabelColorMode.SELF; + setNodeLabelColorMode(colorMode); + setEdgeLabelColorMode(colorMode); + } else if ("sizemode".equalsIgnoreCase(name)) { + // FixedSizeMode β†’ SCREEN (constant pixels); everything else β†’ ZOOM + String cls = reader.getAttributeValue(null, "class"); + LabelSizeMode sizeMode = + "FixedSizeMode".equals(cls) ? LabelSizeMode.SCREEN : LabelSizeMode.ZOOM; + setNodeLabelSizeMode(sizeMode); + setEdgeLabelSizeMode(sizeMode); + } else if ("nodecolumns".equalsIgnoreCase(name)) { + inNodeColumns = true; + } else if ("edgecolumns".equalsIgnoreCase(name)) { + inEdgeColumns = true; + } else if ("column".equalsIgnoreCase(name)) { + String id = reader.getAttributeValue(null, "id"); + if (id != null) { + if (inNodeColumns) { + Column col = graphModel.getNodeTable().getColumn(id); + if (col != null) { + nodeCols.add(col); + } + } else if (inEdgeColumns) { + Column col = graphModel.getEdgeTable().getColumn(id); + if (col != null) { + edgeCols.add(col); + } + } + } + } + // nodecolor/edgecolor: no equivalent in new model, intentionally skipped + break; + case XMLStreamReader.CHARACTERS: + // nodesizefactor and edgesizefactor used text content in old format + if (!reader.isWhiteSpace()) { + if (readNodeSizeFactor) { + setNodeLabelScale(Float.parseFloat(reader.getText())); + } else if (readEdgeSizeFactor) { + setEdgeLabelScale(Float.parseFloat(reader.getText())); + } + } + break; + case XMLStreamReader.END_ELEMENT: + readNodeSizeFactor = false; + readEdgeSizeFactor = false; + if ("nodecolumns".equalsIgnoreCase(reader.getLocalName())) { + inNodeColumns = false; + } else if ("edgecolumns".equalsIgnoreCase(reader.getLocalName())) { + inEdgeColumns = false; + } else if ("textmodel".equalsIgnoreCase(reader.getLocalName())) { + end = true; + } + break; + } + } - //Fast refreh - GraphDrawable drawable = VizController.getInstance().getDrawable(); - cameraPosition = Arrays.copyOf(drawable.getCameraLocation(), 3); - cameraTarget = Arrays.copyOf(drawable.getCameraTarget(), 3); + if (!nodeCols.isEmpty()) { + setNodeLabelColumns(nodeCols.toArray(new Column[0])); + } + if (!edgeCols.isEmpty()) { + setEdgeLabelColumns(edgeCols.toArray(new Column[0])); + } + } - //TextModel - textModel.writeXML(writer); + /** + * Reads the legacy {@code } element written by Gephi 0.10 and earlier. + * The old element was self-closing with all data as inline attributes. The old {@code width}, + * {@code height} and {@code antialiasing} attributes have no equivalent in the new model and + * are intentionally ignored. + */ + private void readLegacyScreenshotMaker(XMLStreamReader reader) { + String transparent = reader.getAttributeValue(null, "transparent"); + if (transparent != null) { + screenshotModel.setTransparentBackground(Boolean.parseBoolean(transparent)); + } + String autoSave = reader.getAttributeValue(null, "autosave"); + if (autoSave != null) { + screenshotModel.setAutoSave(Boolean.parseBoolean(autoSave)); + } + String path = reader.getAttributeValue(null, "path"); + if (path != null && !path.isEmpty()) { + screenshotModel.setDefaultDirectory(new java.io.File(path)); + } + } - //Camera + private Column[] readLabelColumns(XMLStreamReader reader, String endElement, + org.gephi.graph.api.Table table) throws XMLStreamException { + List cols = new ArrayList<>(); + while (reader.hasNext()) { + int type = reader.next(); + if (type == XMLStreamReader.START_ELEMENT && "column".equalsIgnoreCase(reader.getLocalName())) { + String id = reader.getAttributeValue(null, "id"); + if (id != null) { + Column col = table.getColumn(id); + if (col != null) { + cols.add(col); + } + } + } else if (type == XMLStreamReader.END_ELEMENT && + endElement.equalsIgnoreCase(reader.getLocalName())) { + break; + } + } + return cols.isEmpty() ? null : cols.toArray(new Column[0]); + } + + public void writeXML(XMLStreamWriter writer) throws XMLStreamException { + // Global writer.writeStartElement("cameraposition"); - writer.writeAttribute("x", Float.toString(cameraPosition[0])); - writer.writeAttribute("y", Float.toString(cameraPosition[1])); - writer.writeAttribute("z", Float.toString(cameraPosition[2])); - writer.writeEndElement(); - writer.writeStartElement("cameratarget"); - writer.writeAttribute("x", Float.toString(cameraTarget[0])); - writer.writeAttribute("y", Float.toString(cameraTarget[1])); - writer.writeAttribute("z", Float.toString(cameraTarget[2])); + writer.writeAttribute("x", Float.toString(pan.x())); + writer.writeAttribute("y", Float.toString(pan.y())); + writer.writeAttribute("z", Float.toString(5000f)); // Keep for backward compatibility, not used anymore writer.writeEndElement(); - //Boolean values - writer.writeStartElement("use3d"); - writer.writeAttribute("value", String.valueOf(use3d)); + writer.writeStartElement("zoom"); + writer.writeAttribute("value", String.valueOf(zoom)); writer.writeEndElement(); - writer.writeStartElement("lighting"); - writer.writeAttribute("value", String.valueOf(lighting)); + // Edges + writer.writeStartElement("showedges"); + writer.writeAttribute("value", String.valueOf(isShowEdges())); writer.writeEndElement(); - writer.writeStartElement("culling"); - writer.writeAttribute("value", String.valueOf(culling)); + writer.writeStartElement("edgeScale"); + writer.writeAttribute("value", String.valueOf(getEdgeScale())); writer.writeEndElement(); - writer.writeStartElement("material"); - writer.writeAttribute("value", String.valueOf(material)); + writer.writeStartElement("nodeScale"); + writer.writeAttribute("value", String.valueOf(getNodeScale())); writer.writeEndElement(); - writer.writeStartElement("rotatingenable"); - writer.writeAttribute("value", String.valueOf(rotatingEnable)); + writer.writeStartElement("edgeColorMode"); + writer.writeAttribute("value", getEdgeColorMode().name()); writer.writeEndElement(); - writer.writeStartElement("showedges"); - writer.writeAttribute("value", String.valueOf(showEdges)); + writer.writeStartElement("edgeWeightEnabled"); + writer.writeAttribute("value", String.valueOf(isUseEdgeWeight())); writer.writeEndElement(); - writer.writeStartElement("lightennonselectedauto"); - writer.writeAttribute("value", String.valueOf(lightenNonSelectedAuto)); + writer.writeStartElement("edgeRescaleWeightEnabled"); + writer.writeAttribute("value", String.valueOf(isRescaleEdgeWeight())); writer.writeEndElement(); + // Selection writer.writeStartElement("autoselectneighbor"); - writer.writeAttribute("value", String.valueOf(autoSelectNeighbor)); + writer.writeAttribute("value", String.valueOf(isAutoSelectNeighbors())); writer.writeEndElement(); writer.writeStartElement("hidenonselectededges"); - writer.writeAttribute("value", String.valueOf(hideNonSelectedEdges)); + writer.writeAttribute("value", String.valueOf(isHideNonSelectedEdges())); writer.writeEndElement(); - writer.writeStartElement("unicolorselected"); - writer.writeAttribute("value", String.valueOf(uniColorSelected)); - writer.writeEndElement(); - - writer.writeStartElement("edgehasunicolor"); - writer.writeAttribute("value", String.valueOf(edgeHasUniColor)); + writer.writeStartElement("lightennonselectedauto"); + writer.writeAttribute("value", String.valueOf(isLightenNonSelectedAuto())); writer.writeEndElement(); - writer.writeStartElement("adjustbytext"); - writer.writeAttribute("value", String.valueOf(adjustByText)); + writer.writeStartElement("lightenNonSelectedFactor"); + writer.writeAttribute("value", String.valueOf(getLightenNonSelectedFactor())); writer.writeEndElement(); writer.writeStartElement("edgeSelectionColor"); - writer.writeAttribute("value", String.valueOf(edgeSelectionColor)); + writer.writeAttribute("value", String.valueOf(isEdgeSelectionColor())); writer.writeEndElement(); - //Colors + // Colors writer.writeStartElement("backgroundcolor"); - writer.writeAttribute("value", ColorUtils.encode(backgroundColor)); - writer.writeEndElement(); - - writer.writeStartElement("edgeunicolor"); - writer.writeAttribute("value", ColorUtils.encode(ColorUtils.decode(edgeUniColor))); + writer.writeAttribute("value", ColorUtils.encode(getBackgroundColor())); writer.writeEndElement(); writer.writeStartElement("edgeInSelectionColor"); - writer.writeAttribute("value", ColorUtils.encode(ColorUtils.decode(edgeInSelectionColor))); + writer.writeAttribute("value", ColorUtils.encode(getEdgeInSelectionColor())); writer.writeEndElement(); writer.writeStartElement("edgeOutSelectionColor"); - writer.writeAttribute("value", ColorUtils.encode(ColorUtils.decode(edgeOutSelectionColor))); + writer.writeAttribute("value", ColorUtils.encode(getEdgeOutSelectionColor())); writer.writeEndElement(); writer.writeStartElement("edgeBothSelectionColor"); - writer.writeAttribute("value", ColorUtils.encode(ColorUtils.decode(edgeBothSelectionColor))); + writer.writeAttribute("value", ColorUtils.encode(getEdgeBothSelectionColor())); writer.writeEndElement(); - //Misc - writer.writeStartElement("nodemodeler"); - writer.writeAttribute("value", nodeModeler); + // Node Labels + writer.writeStartElement("showNodeLabels"); + writer.writeAttribute("value", String.valueOf(isShowNodeLabels())); writer.writeEndElement(); - //Float - writer.writeStartElement("edgeScale"); - writer.writeAttribute("value", String.valueOf(edgeScale)); + writer.writeStartElement("nodeLabelFont"); + writer.writeAttribute("value", FontUtils.encode(getNodeLabelFont())); + writer.writeEndElement(); + + writer.writeStartElement("nodeLabelScale"); + writer.writeAttribute("value", String.valueOf(getNodeLabelScale())); + writer.writeEndElement(); + + writer.writeStartElement("nodeLabelColorMode"); + writer.writeAttribute("value", getNodeLabelColorMode().name()); + writer.writeEndElement(); + + writer.writeStartElement("nodeLabelSizeMode"); + writer.writeAttribute("value", getNodeLabelSizeMode().name()); + writer.writeEndElement(); + + writer.writeStartElement("hideNonSelectedNodeLabels"); + writer.writeAttribute("value", String.valueOf(isHideNonSelectedNodeLabels())); + writer.writeEndElement(); + + writer.writeStartElement("fitNodeLabelsToNodeSize"); + writer.writeAttribute("value", String.valueOf(isNodeLabelFitToNodeSize())); + writer.writeEndElement(); + + writer.writeStartElement("avoidNodeLabelOverlap"); + writer.writeAttribute("value", String.valueOf(isAvoidNodeLabelOverlap())); + writer.writeEndElement(); + + writer.writeStartElement("nodeLabelColumns"); + for (Column col : getNodeLabelColumns()) { + writer.writeStartElement("column"); + writer.writeAttribute("id", col.getId()); + writer.writeEndElement(); + } + writer.writeEndElement(); + + // Edge Labels + writer.writeStartElement("showEdgeLabels"); + writer.writeAttribute("value", String.valueOf(isShowEdgeLabels())); + writer.writeEndElement(); + + writer.writeStartElement("edgeLabelFont"); + writer.writeAttribute("value", FontUtils.encode(getEdgeLabelFont())); + writer.writeEndElement(); + + writer.writeStartElement("edgeLabelScale"); + writer.writeAttribute("value", String.valueOf(getEdgeLabelScale())); + writer.writeEndElement(); + + writer.writeStartElement("edgeLabelColorMode"); + writer.writeAttribute("value", getEdgeLabelColorMode().name()); + writer.writeEndElement(); + + writer.writeStartElement("edgeLabelSizeMode"); + writer.writeAttribute("value", getEdgeLabelSizeMode().name()); + writer.writeEndElement(); + + writer.writeStartElement("hideNonSelectedEdgeLabels"); + writer.writeAttribute("value", String.valueOf(isHideNonSelectedEdgeLabels())); + writer.writeEndElement(); + + writer.writeStartElement("edgeLabelColumns"); + for (Column col : getEdgeLabelColumns()) { + writer.writeStartElement("column"); + writer.writeAttribute("id", col.getId()); + writer.writeEndElement(); + } + writer.writeEndElement(); + + // Screenshot model + writer.writeStartElement("screenshotModel"); + screenshotModel.writeXML(writer); writer.writeEndElement(); + // Selection model + writer.writeStartElement("selectionModel"); + selectionModel.writeXML(writer); writer.writeEndElement(); } } diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/VizModelPersistenceProvider.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/VizModelPersistenceProvider.java index b75ae330a4..44a127a59f 100644 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/VizModelPersistenceProvider.java +++ b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/VizModelPersistenceProvider.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.visualization; import javax.xml.stream.XMLStreamException; @@ -46,15 +47,15 @@ Development and Distribution License("CDDL") (collectively, the import javax.xml.stream.XMLStreamWriter; import org.gephi.project.api.Workspace; import org.gephi.project.spi.WorkspacePersistenceProvider; +import org.gephi.project.spi.WorkspaceXMLPersistenceProvider; import org.openide.util.Lookup; import org.openide.util.lookup.ServiceProvider; /** - * * @author Mathieu Bastian */ @ServiceProvider(service = WorkspacePersistenceProvider.class) -public class VizModelPersistenceProvider implements WorkspacePersistenceProvider { +public class VizModelPersistenceProvider implements WorkspaceXMLPersistenceProvider { @Override public void writeXML(XMLStreamWriter writer, Workspace workspace) { @@ -72,15 +73,14 @@ public void writeXML(XMLStreamWriter writer, Workspace workspace) { public void readXML(XMLStreamReader reader, Workspace workspace) { VizModel vizModel = workspace.getLookup().lookup(VizModel.class); if (vizModel == null) { - vizModel = new VizModel(); + vizModel = new VizModel(Lookup.getDefault().lookup(VizController.class), workspace); workspace.add(vizModel); } - Lookup.getDefault().lookup(VizController.class).refreshWorkspace();//Necessary to get events from reading xml properties such as background color changed try { vizModel.readXML(reader, workspace); } catch (XMLStreamException ex) { throw new RuntimeException(ex); - } + } } @Override diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/api/initializer/Modeler.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/api/initializer/Modeler.java deleted file mode 100644 index f8df19ef11..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/api/initializer/Modeler.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.api.initializer; - -import javax.media.opengl.GL2; -import javax.media.opengl.glu.GLU; -import javax.media.opengl.glu.GLUquadric; -import org.gephi.visualization.VizController; -import org.gephi.visualization.apiimpl.VizConfig; -import org.gephi.visualization.model.Model; -import org.gephi.visualization.model.node.NodeModel; -import org.gephi.visualization.opengl.CompatibilityEngine; - -/** - * - * @author Mathieu Bastian - */ -public abstract class Modeler { - - protected final CompatibilityEngine engine; - protected final VizController controller; - protected final VizConfig config; - - public Modeler(CompatibilityEngine engine) { - this.engine = engine; - this.controller = VizController.getInstance(); - this.config = VizController.getInstance().getVizConfig(); - } - - public abstract int initDisplayLists(GL2 gl, GLU glu, GLUquadric quadric, int ptr); - - public abstract void chooseModel(Model obj); - - public abstract void beforeDisplay(GL2 gl, GLU glu); - - public abstract void afterDisplay(GL2 gl, GLU glu); - - protected float cameraDistance(NodeModel object) { - float[] cameraLocation = controller.getDrawable().getCameraLocation(); - double distance = Math.sqrt(Math.pow((double) object.getNode().x() - cameraLocation[0], 2d) - + Math.pow((double) object.getNode().y() - cameraLocation[1], 2d) - + Math.pow((double) object.getNode().z() - cameraLocation[2], 2d)); - object.setCameraDistance((float) distance); - - return (float) distance - object.getNode().size(); - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/api/selection/SelectionArea.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/api/selection/SelectionArea.java deleted file mode 100644 index 8b7f012532..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/api/selection/SelectionArea.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.api.selection; - -import javax.media.opengl.GL2; -import javax.media.opengl.glu.GLU; -import org.gephi.lib.gleem.linalg.Vecf; -import org.gephi.visualization.model.node.NodeModel; - -/** - * - * @author Mathieu Bastian - */ -public interface SelectionArea { - - public float[] getSelectionAreaRectancle(); - - public float[] getSelectionAreaCenter(); - - public boolean mouseTest(Vecf distanceFromMouse, NodeModel nodeModel); - - public void drawArea(GL2 gl, GLU glu); - - public boolean isEnabled(); - - public boolean blockSelection(); -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/api/selection/SelectionManager.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/api/selection/SelectionManager.java deleted file mode 100644 index 36ea6956f2..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/api/selection/SelectionManager.java +++ /dev/null @@ -1,263 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.api.selection; - -import java.util.ArrayList; -import java.util.List; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.Node; -import org.gephi.visualization.VizArchitecture; -import org.gephi.visualization.VizController; -import org.gephi.visualization.apiimpl.VizConfig; -import org.gephi.visualization.opengl.AbstractEngine; - -/** - * - * @author Mathieu Bastian - */ -public class SelectionManager implements VizArchitecture { - - private VizConfig vizConfig; - private AbstractEngine engine; - private List listeners; - //Settings - private int mouseSelectionDiameter; - private boolean mouseSelectionZoomProportionnal; - private boolean selectionUpdateWhileDragging; - //States - private boolean blocked = false; - - public SelectionManager() { - listeners = new ArrayList(); - } - - @Override - public void initArchitecture() { - this.vizConfig = VizController.getInstance().getVizConfig(); - this.engine = VizController.getInstance().getEngine(); - mouseSelectionDiameter = vizConfig.getMouseSelectionDiameter(); - selectionUpdateWhileDragging = vizConfig.isMouseSelectionUpdateWhileDragging(); - } - - public void blockSelection(boolean block) { - if (vizConfig.isRectangleSelection()) { - this.blocked = block; - vizConfig.setSelectionEnable(!block); - fireChangeEvent(); - } else { - setDirectMouseSelection(); - } - } - - public void disableSelection() { - vizConfig.setSelectionEnable(false); - this.blocked = false; - fireChangeEvent(); - } - - public void setDraggingEnable(boolean dragging) { - vizConfig.setMouseSelectionUpdateWhileDragging(!dragging); - fireChangeEvent(); - } - - public void setRectangleSelection() { - engine.setRectangleSelection(true); - vizConfig.setDraggingEnable(false); - vizConfig.setCustomSelection(false); - vizConfig.setSelectionEnable(true); - this.blocked = false; - fireChangeEvent(); - } - - public void setDirectMouseSelection() { - engine.setRectangleSelection(false); - vizConfig.setSelectionEnable(true); - vizConfig.setDraggingEnable(false); - vizConfig.setCustomSelection(false); - this.blocked = false; - fireChangeEvent(); - } - - public void setDraggingMouseSelection() { - engine.setRectangleSelection(false); - vizConfig.setDraggingEnable(true); - vizConfig.setMouseSelectionUpdateWhileDragging(false); - vizConfig.setSelectionEnable(true); - vizConfig.setCustomSelection(false); - this.blocked = false; - fireChangeEvent(); - } - - public void setCustomSelection() { - vizConfig.setSelectionEnable(false); - vizConfig.setDraggingEnable(false); - vizConfig.setCustomSelection(true); - //this.blocked = true; - fireChangeEvent(); - } - - public void resetSelection() { - if (isCustomSelection()) { - vizConfig.setCustomSelection(false); - setDirectMouseSelection(); - } - engine.resetSelection(); - } - - public void selectNode(Node node) { - if (!isCustomSelection()) { - setCustomSelection(); - } -// if (node.getNodeData().getModel() != null) { -// engine.selectObject(node.getNodeData().getModel()); -// } - } - - public void selectEdge(Edge edge) { - if (!isCustomSelection()) { - setCustomSelection(); - } -// if (edge.getEdgeData().getModel() != null) { -// engine.selectObject(edge.getEdgeData().getModel()); -// } - } - - public void selectNodes(Node[] nodes) { - if (nodes == null) { - resetSelection(); - return; - } - if (!isCustomSelection()) { - setCustomSelection(); - } -// Model[] models = new Model[nodes.length]; - for (int i = 0; i < nodes.length; i++) { -// models[i] = nodes[i].getNodeData().getModel(); - } -// engine.selectObject(models); - } - - public void selectEdges(Edge[] edges) { - if (!isCustomSelection()) { - setCustomSelection(); - } - for (Edge e : edges) { -// if (e.getEdgeData().getModel() != null) { -// engine.selectObject(e.getEdgeData().getModel()); -// } - } - } - - public void centerOnNode(Node node) { -// Model model = node.getNodeData().getModel(); -// if (model != null) { -// VizController.getInstance().getGraphIO().centerOnCoordinate(model.getObj().x(), model.getObj().y(), model.getObj().z() + model.getObj().getSize() * 8); -// engine.getScheduler().requireUpdateVisible(); -// } - } - - public void setMouseSelectionDiameter(int mouseSelectionDiameter) { - this.mouseSelectionDiameter = mouseSelectionDiameter; - } - - public int getMouseSelectionDiameter() { - return mouseSelectionDiameter; - } - - public void setMouseSelectionZoomProportionnal(boolean mouseSelectionZoomProportionnal) { - this.mouseSelectionZoomProportionnal = mouseSelectionZoomProportionnal; - } - - public boolean isMouseSelectionZoomProportionnal() { - return mouseSelectionZoomProportionnal; - } - - public boolean isSelectionUpdateWhileDragging() { - return selectionUpdateWhileDragging; - } - - public void setSelectionUpdateWhileDragging(boolean selectionUpdateWhileDragging) { - this.selectionUpdateWhileDragging = selectionUpdateWhileDragging; - } - - public boolean isBlocked() { - return blocked; - } - - public boolean isRectangleSelection() { - return vizConfig.isSelectionEnable() && vizConfig.isRectangleSelection(); - } - - public boolean isDirectMouseSelection() { - return vizConfig.isSelectionEnable() && !vizConfig.isRectangleSelection() && !vizConfig.isDraggingEnable(); - } - - public boolean isCustomSelection() { - return vizConfig.isCustomSelection(); - } - - public boolean isSelectionEnabled() { - return vizConfig.isSelectionEnable(); - } - - public boolean isDraggingEnabled() { - return vizConfig.isDraggingEnable(); - } - - //Event - public void addChangeListener(ChangeListener changeListener) { - listeners.add(changeListener); - } - - public void removeChangeListener(ChangeListener changeListener) { - listeners.remove(changeListener); - } - - private void fireChangeEvent() { - ChangeEvent evt = new ChangeEvent(this); - for (ChangeListener l : listeners) { - l.stateChanged(evt); - } - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/api/selection/SelectionType.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/api/selection/SelectionType.java deleted file mode 100644 index 745781b23a..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/api/selection/SelectionType.java +++ /dev/null @@ -1,57 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.visualization.api.selection; - -/** - * - * @author Mathieu Bastian - */ -public interface SelectionType { - - public SelectionArea getSelectionArea(); - - public void setSelectionArea(SelectionArea selectionArea); - - public String getName(); - - public void setName(String name); -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/Engine.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/Engine.java deleted file mode 100644 index 397faba98f..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/Engine.java +++ /dev/null @@ -1,51 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ - -package org.gephi.visualization.apiimpl; - -/** - * - * @author Mathieu Bastian - */ -public interface Engine { - -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/GraphContextMenu.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/GraphContextMenu.java deleted file mode 100644 index 3bd283cfcc..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/GraphContextMenu.java +++ /dev/null @@ -1,167 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.apiimpl; - -/** - * - * @author Mathieu Bastian - */ -public class GraphContextMenu { -// private VizConfig config; -// private DHNSEventBridge eventBridge; -// -// public GraphContextMenu() { -// config = VizController.getInstance().getVizConfig(); -// eventBridge = (DHNSEventBridge) VizController.getInstance().getEventBridge(); -// } -// -// public JPopupMenu getMenu() { -// GraphContextMenuItem[] items = getGraphContextMenuItems(); -// final Node[] selectedNodes = eventBridge.getSelectedNodes(); -// final Graph graph = eventBridge.getGraph(); -// JPopupMenu contextMenu = new JPopupMenu(); -// -// //Add items ordered: -// Integer lastItemType = null; -// for (GraphContextMenuItem item : items) { -// item.setup(graph, selectedNodes); -// if (lastItemType == null) { -// lastItemType = item.getType(); -// } -// if (lastItemType != item.getType()) { -// contextMenu.addSeparator(); -// } -// lastItemType = item.getType(); -// if (item.isAvailable()) { -// contextMenu.add(createMenuItemFromGraphContextMenuItem(item, graph, selectedNodes)); -// } -// } -// -// return contextMenu; -// } -// -// /** -// *

              Prepares an array with one new instance of every GraphContextMenuItem -// * and returns it.

              -// *

              It also returns the items ordered first by type and then by -// * position.

              -// * -// * @return Array of all GraphContextMenuItem implementations -// */ -// public GraphContextMenuItem[] getGraphContextMenuItems() { -// ArrayList items = new ArrayList(); -// items.addAll(Lookup.getDefault().lookupAll(GraphContextMenuItem.class)); -// sortItems(items); -// return items.toArray(new GraphContextMenuItem[0]); -// } -// -// public JMenuItem createMenuItemFromGraphContextMenuItem(final GraphContextMenuItem item, final HierarchicalGraph graph, final Node[] nodes) { -// ContextMenuItemManipulator[] subItems = item.getSubItems(); -// if (subItems != null && item.canExecute()) { -// JMenu subMenu = new JMenu(); -// subMenu.setText(item.getName()); -// if (item.getDescription() != null && !item.getDescription().isEmpty()) { -// subMenu.setToolTipText(item.getDescription()); -// } -// subMenu.setIcon(item.getIcon()); -// Integer lastItemType = null; -// for (ContextMenuItemManipulator subItem : subItems) { -// ((GraphContextMenuItem) subItem).setup(graph, nodes); -// if (lastItemType == null) { -// lastItemType = subItem.getType(); -// } -// if (lastItemType != subItem.getType()) { -// subMenu.addSeparator(); -// } -// lastItemType = subItem.getType(); -// if (subItem.isAvailable()) { -// subMenu.add(createMenuItemFromGraphContextMenuItem((GraphContextMenuItem) subItem, graph, nodes)); -// } -// } -// if (item.getMnemonicKey() != null) { -// subMenu.setMnemonic(item.getMnemonicKey());//Mnemonic for opening a sub menu -// } -// return subMenu; -// } else { -// JMenuItem menuItem = new JMenuItem(); -// menuItem.setText(item.getName()); -// if (item.getDescription() != null && !item.getDescription().isEmpty()) { -// menuItem.setToolTipText(item.getDescription()); -// } -// menuItem.setIcon(item.getIcon()); -// if (item.canExecute()) { -// menuItem.addActionListener(new ActionListener() { -// @Override -// public void actionPerformed(ActionEvent e) { -// new Thread() { -// @Override -// public void run() { -// DataLaboratoryHelper.getDefault().executeManipulator(item); -// } -// }.start(); -// } -// }); -// } else { -// menuItem.setEnabled(false); -// } -// if (item.getMnemonicKey() != null) { -// menuItem.setMnemonic(item.getMnemonicKey());//Mnemonic for executing the action -// menuItem.setAccelerator(KeyStroke.getKeyStroke(item.getMnemonicKey(), KeyEvent.CTRL_DOWN_MASK));//And the same key mnemonic + ctrl for executing the action (and as a help display for the user!). -// } -// return menuItem; -// } -// } -// -// private void sortItems(ArrayList m) { -// Collections.sort(m, new Comparator() { -// @Override -// public int compare(GraphContextMenuItem o1, GraphContextMenuItem o2) { -// //Order by type, position. -// if (o1.getType() == o2.getType()) { -// return o1.getPosition() - o2.getPosition(); -// } else { -// return o1.getType() - o2.getType(); -// } -// } -// }); -// } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/GraphDrawable.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/GraphDrawable.java deleted file mode 100644 index c5bd4679e6..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/GraphDrawable.java +++ /dev/null @@ -1,78 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.apiimpl; - -import java.awt.Component; -import java.nio.FloatBuffer; -import java.nio.IntBuffer; -import org.gephi.lib.gleem.linalg.Vec3f; - -/** - * - * @author Mathieu Bastian - */ -public interface GraphDrawable { - - public Component getGraphComponent(); - - public int getViewportHeight(); - - public int getViewportWidth(); - - public float[] getCameraTarget(); - - public float[] getCameraLocation(); - - public void setCameraLocation(float[] cameraLocation); - - public void setCameraTarget(float[] cameraTarget); - - public Vec3f getCameraVector(); - - public double getDraggingMarkerX(); - - public double getDraggingMarkerY(); - - public FloatBuffer getProjectionMatrix(); - - public IntBuffer getViewport(); -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/GraphIO.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/GraphIO.java deleted file mode 100644 index 6372429bae..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/GraphIO.java +++ /dev/null @@ -1,76 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.visualization.apiimpl; - -import java.awt.event.KeyListener; -import java.awt.event.MouseListener; -import java.awt.event.MouseMotionListener; -import java.awt.event.MouseWheelListener; - -/** - * - * @author Mathieu Bastian - */ -public interface GraphIO extends MouseListener, MouseWheelListener, MouseMotionListener, KeyListener { - - public float[] getMousePosition(); - - public float[] getMousePosition3d(); - - public float[] getMouseDrag(); - - public float[] getMouseDrag3d(); - - public void startMouseListening(); - - public void stopMouseListening(); - - public void trigger(); - - public void setCameraDistance(float distance); - - public void centerOnZero(); - - public void centerOnGraph(); - - public void centerOnCoordinate(float x, float y, float z); -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/PropertiesBarAddon.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/PropertiesBarAddon.java deleted file mode 100644 index f51eb26490..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/PropertiesBarAddon.java +++ /dev/null @@ -1,53 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.visualization.apiimpl; - -import javax.swing.JComponent; - -/** - * - * @author Mathieu Bastian - */ -public interface PropertiesBarAddon { - - public JComponent getComponent(); -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/Scheduler.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/Scheduler.java deleted file mode 100644 index 4391033084..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/Scheduler.java +++ /dev/null @@ -1,81 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.apiimpl; - -import javax.media.opengl.GL2; -import javax.media.opengl.glu.GLU; - -/** - * - * @author Mathieu Bastian - */ -public interface Scheduler { - - public void start(); - - public void stop(); - - public boolean isAnimating(); - - public void updatePosition(); - - public void updateWorld(); - - public void display(GL2 gl, GLU glu); - - public void requireUpdateVisible(); - - public void requireUpdateSelection(); - - public void requireStartDrag(); - - public void requireDrag(); - - public void requireStopDrag(); - -// public void requireUpdatePosition(); - public void requireMouseClick(); - - public void setFps(float maxFps); - - public float getFps(); -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/VizConfig.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/VizConfig.java deleted file mode 100644 index ecb5b14b14..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/VizConfig.java +++ /dev/null @@ -1,561 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.apiimpl; - -import java.awt.Color; -import java.awt.Font; -import org.gephi.ui.utils.ColorUtils; -import org.gephi.ui.utils.FontUtils; -import org.openide.util.NbPreferences; - -/** - * - * @author Mathieu Bastian - */ -public class VizConfig { - - //Const Default Config - public static final String USE_3D = "VizConfig.defaultUse3d"; - public static final String BACKGROUND_COLOR = "VizConfig.defaultBackgroundColor"; - public static final String NODE_LABELS = "VizConfig.defaultShowNodeLabels"; - public static final String EDGE_LABELS = "VizConfig.defaultShowEdgeLabels"; - public static final String SHOW_EDGES = "VizConfig.defaultShowEdges"; - public static final String HIGHLIGHT = "VizConfig.defaultLightenNonSelectedAuto"; - public static final String NEIGHBOUR_SELECT = "VizConfig.defaultAutoSelectNeighbor"; - public static final String HIDE_NONSELECTED_EDGES = "VizConfig.defaultHideNonSelectedEdges"; - public static final String SELECTEDNODE_UNIQUE_COLOR = "VizConfig.defaultHideNonSelectedEdges"; - public static final String EDGE_HAS_UNIQUE_COLOR = "VizConfig.defaultEdgeHasUniColor"; - public static final String EDGE_UNIQUE_COLOR = "VizConfig.defaultEdgeUniColor"; - public static final String NODE_LABEL_COLOR = "VizConfig.defaultNodeLabelColor"; - public static final String EDGE_LABEL_COLOR = "VizConfig.defaultEdgeLabelColor"; - public static final String NODE_LABEL_FONT = "VizConfig.defaultNodeLabelFont"; - public static final String EDGE_LABEL_FONT = "VizConfig.defaultEdgeLabelFont"; - public static final String LABEL_SELECTION_ONLY = "VizConfig.defaultShowLabelOnSelectedOnly"; - public static final String SELECTEDEDGE_HAS_COLOR = "VizConfig.defaultEdgeSelectionColor"; - public static final String SELECTEDEDGE_IN_COLOR = "VizConfig.defaultEdgeInSelectedColor"; - public static final String SELECTEDEDGE_OUT_COLOR = "VizConfig.defaultEdgeOutSelectedColor"; - public static final String SELECTEDEDGE_BOTH_COLOR = "VizConfig.defaultEdgeBothSelectedColor"; - public static final String EDGE_SCALE = "VizConfig.defaultEdgeScale"; - //Const Prefs - public static final String ANTIALIASING = "VizConfig.antialiasing"; - public static final String BLENDING = "VizConfig.blending"; - public static final String WIREFRAME = "VizConfig.wireFrame"; - public static final String GLJPANEL = "VizConfig.useGLJPanel"; - public static final String SELECTION = "VizConfig.selectionEnable"; - public static final String RECTANGLE_SELECTION = "VizConfig.rectangleSelection"; - public static final String RECTANGLE_SELECTION_COLOR = "VizConfig.rectangleSelectionColor"; - public static final String DRAGGING = "VizConfig.draggingEnable"; - public static final String CAMERA_CONTROL = "VizConfig.cameraControlEnable"; - public static final String SHOW_FPS = "VizConfig.showFPS"; - public static final String REDUCE_FPS_MOUSE_OUT = "VizConfig.reduceFpsWhenMouseOut"; - public static final String REDUCE_FPS_MOUSE_OUT_VALUE = "VizConfig.reduceFpsWhenMouseOutValue"; - public static final String PAUSE_LOOP_MOUSE_OUT = "VizConfig.pauseLoopWhenMouseOut"; - public static final String HIGHTLIGHT_COLOR = "VizConfig.lightenNonSelectedColor"; - public static final String HIGHTLIGHT_ANIMATION = "VizConfig.lightenNonSelectedAnimation"; - public static final String NODE_SELECTED_UNIQUE_COLOR = "VizConfig.uniColorSelectedColor"; - public static final String NODE_NEIGHBOR_SELECTED_UNIQUE_COLOR = "VizConfig.uniColorSelectedNeigborColor"; - public static final String OCTREE_DEPTH = "VizConfig.octreeDepth"; - public static final String OCTREE_WIDTH = "VizConfig.octreeWidth"; - public static final String CLEAN_DELETED_MODELS = "VizConfig.cleanDeletedModels"; - public static final String LABEL_MIPMAP = "VizConfig.labelMipMap"; - public static final String LABEL_ANTIALIASED = "VizConfig.labelAntialiased"; - public static final String LABEL_FRACTIONAL_METRICS = "VizConfig.labelFractionalMetrics"; - public static final String VIZBAR = "VizConfig.showVizVar"; - public static final String CONTEXT_MENU = "VizConfig.contextMenu"; - public static final String TOOLBAR = "VizConfig.toolbar"; - public static final String MOUSE_SELECTION_DIAMETER = "VizConfig.mouseSelectionDiameter"; - public static final String MOUSE_SELECTION_ZOOM_PROPORTIONAL = "VizConfig.mouseSelectionZoomProportionnal"; - public static final String MOUSE_SELECTION_WHILE_DRAGGING = "VizConfig.mouseSelectionUpdateWhileDragging"; - public static final String DISABLE_LOD = "VizConfig.disableLOD"; - //Default values - public static final boolean DEFAULT_USE_3D = false; - public static final Color DEFAULT_BACKGROUND_COLOR = Color.WHITE; - public static final boolean DEFAULT_NODE_LABELS = false; - public static final boolean DEFAULT_EDGE_LABELS = false; - public static final boolean DEFAULT_SHOW_EDGES = true; - public static final boolean DEFAULT_HIGHLIGHT = true; - public static final boolean DEFAULT_NEIGHBOUR_SELECT = true; - public static final boolean DEFAULT_HIDE_NONSELECTED_EDGES = false; - public static final boolean DEFAULT_SELECTEDNODE_UNIQUE_COLOR = false; - public static final boolean DEFAULT_EDGE_HAS_UNIQUE_COLOR = false; - public static final Color DEFAULT_EDGE_UNIQUE_COLOR = new Color(0.5f, 0.5f, 0.5f, 0.5f); - public static final Color DEFAULT_NODE_LABEL_COLOR = new Color(0f, 0f, 0f, 1f); - public static final Color DEFAULT_EDGE_LABEL_COLOR = new Color(0.5f, 0.5f, 0.5f, 1f); - public static final Font DEFAULT_NODE_LABEL_FONT = new Font("Arial", Font.BOLD, 32); - public static final Font DEFAULT_EDGE_LABEL_FONT = new Font("Arial", Font.BOLD, 32); - public static final boolean DEFAULT_LABEL_SELECTION_ONLY = false; - public static final boolean DEFAULT_SELECTEDEDGE_HAS_COLOR = false; - public static final Color DEFAULT_SELECTEDEDGE_IN_COLOR = new Color(32, 95, 154, 255); - public static final Color DEFAULT_SELECTEDEDGE_OUT_COLOR = new Color(196, 66, 79, 255); - public static final Color DEFAULT_SELECTEDEDGE_BOTH_COLOR = new Color(248, 215, 83, 255); - public static final int DEFAULT_ANTIALIASING = 4; - public static final boolean DEFAULT_BLENDING = true; - public static final boolean DEFAULT_WIREFRAME = false; - public static final boolean DEFAULT_GLJPANEL = false; - public static final boolean DEFAULT_SELECTION = true; - public static final boolean DEFAULT_RECTANGLE_SELECTION = false; - public static final Color DEFAULT_RECTANGLE_SELECTION_COLOR = new Color(0.16f, 0.48f, 0.81f, 0.2f); - public static final boolean DEFAULT_DRAGGING = true; - public static final boolean DEFAULT_CAMERA_CONTROL = true; - public static final boolean DEFAULT_SHOW_FPS = true; - public static final boolean DEFAULT_REDUCE_FPS_MOUSE_OUT = true; - public static final boolean DEFAULT_PAUSE_LOOP_MOUSE_OUT = false; - public static final int DEFAULT_REDUCE_FPS_MOUSE_OUT_VALUE = 20; - public static final Color DEFAULT_HIGHTLIGHT_COLOR = new Color(0.95f, 0.95f, 0.95f, 1f); - public static final boolean DEFAULT_HIGHTLIGHT_ANIMATION = true; - public static final Color DEFAULT_NODE_SELECTED_UNIQUE_COLOR = new Color(0.8f, 0.2f, 0.2f); - public static final Color DEFAULT_NODE_NEIGHBOR_SELECTED_UNIQUE_COLOR = new Color(0.2f, 1f, 0.3f); - public static final int DEFAULT_OCTREE_DEPTH = 5; - public static final int DEFAULT_OCTREE_WIDTH = 50000; - public static final boolean DEFAULT_CLEAN_DELETED_MODELS = true; - public static final boolean DEFAULT_LABEL_MIPMAP = true; - public static final boolean DEFAULT_LABEL_ANTIALIASED = true; - public static final boolean DEFAULT_LABEL_FRACTIONAL_METRICS = true; - public static final boolean DEFAULT_VIZBAR = true; - public static final boolean DEFAULT_CONTEXT_MENU = true; - public static final boolean DEFAULT_TOOLBAR = true; - public static final int DEFAULT_MOUSE_SELECTION_DIAMETER = 1; - public static final boolean DEFAULT_MOUSE_SELECTION_ZOOM_PROPORTIONAL = false; - public static final boolean DEFAULT_MOUSE_SELECTION_WHILE_DRAGGING = false; - public static final boolean DEFAULT_DISABLE_LOD = false; - public static final boolean DEFAULT_SHOW_HULLS = true; - public static final float DEFAULT_EDGE_SCALE = 2f; - public static final float DEFAULT_META_EDGE_SCALE = 2f; - //Default config - loaded in the VizModel - protected boolean defaultUse3d = NbPreferences.forModule(VizConfig.class).getBoolean(USE_3D, DEFAULT_USE_3D); - protected boolean defaultLighting = false; //Overriden by use3d - protected boolean defaultCulling = false; //Overriden by use3d - protected boolean defaultMaterial = false; //Overriden by use3d - protected Color defaultBackgroundColor = ColorUtils.decode(NbPreferences.forModule(VizConfig.class).get(BACKGROUND_COLOR, ColorUtils.encode(DEFAULT_BACKGROUND_COLOR))); - protected float[] defaultCameraTarget = {0f, 0f, 0f}; - protected float[] defaultCameraPosition = {0f, 0f, 5000f}; - protected boolean defaultRotatingEnable = false; //Overriden by use3d - protected boolean defaultShowNodeLabels = NbPreferences.forModule(VizConfig.class).getBoolean(NODE_LABELS, DEFAULT_NODE_LABELS); - protected boolean defaultShowEdgeLabels = NbPreferences.forModule(VizConfig.class).getBoolean(EDGE_LABELS, DEFAULT_EDGE_LABELS); - protected boolean defaultShowEdges = NbPreferences.forModule(VizConfig.class).getBoolean(SHOW_EDGES, DEFAULT_SHOW_EDGES); - protected boolean defaultLightenNonSelectedAuto = NbPreferences.forModule(VizConfig.class).getBoolean(HIGHLIGHT, DEFAULT_HIGHLIGHT); - protected boolean defaultAutoSelectNeighbor = NbPreferences.forModule(VizConfig.class).getBoolean(NEIGHBOUR_SELECT, DEFAULT_NEIGHBOUR_SELECT); - protected boolean defaultHideNonSelectedEdges = NbPreferences.forModule(VizConfig.class).getBoolean(HIDE_NONSELECTED_EDGES, DEFAULT_HIDE_NONSELECTED_EDGES); - protected boolean defaultUniColorSelected = NbPreferences.forModule(VizConfig.class).getBoolean(SELECTEDNODE_UNIQUE_COLOR, DEFAULT_SELECTEDNODE_UNIQUE_COLOR); - protected boolean defaultEdgeHasUniColor = NbPreferences.forModule(VizConfig.class).getBoolean(EDGE_HAS_UNIQUE_COLOR, DEFAULT_EDGE_HAS_UNIQUE_COLOR); - protected Color defaultEdgeUniColor = ColorUtils.decode(NbPreferences.forModule(VizConfig.class).get(EDGE_UNIQUE_COLOR, ColorUtils.encode(DEFAULT_EDGE_UNIQUE_COLOR))); - protected Color defaultNodeLabelColor = ColorUtils.decode(NbPreferences.forModule(VizConfig.class).get(NODE_LABEL_COLOR, ColorUtils.encode(DEFAULT_NODE_LABEL_COLOR))); - protected Color defaultEdgeLabelColor = ColorUtils.decode(NbPreferences.forModule(VizConfig.class).get(EDGE_LABEL_COLOR, ColorUtils.encode(DEFAULT_EDGE_LABEL_COLOR))); - protected Font defaultNodeLabelFont = Font.decode(NbPreferences.forModule(VizConfig.class).get(NODE_LABEL_FONT, FontUtils.encode(DEFAULT_NODE_LABEL_FONT))); - protected Font defaultEdgeLabelFont = Font.decode(NbPreferences.forModule(VizConfig.class).get(EDGE_LABEL_FONT, FontUtils.encode(DEFAULT_EDGE_LABEL_FONT))); - protected boolean defaultAdjustByText = false; //Overriden in Engine - protected boolean defaultShowLabelOnSelectedOnly = NbPreferences.forModule(VizConfig.class).getBoolean(LABEL_SELECTION_ONLY, DEFAULT_LABEL_SELECTION_ONLY); - protected String defaultNodeModeler = "CompatibilityNodeDiskModeler"; //Overriden by use3d - protected boolean defaultEdgeSelectionColor = NbPreferences.forModule(VizConfig.class).getBoolean(SELECTEDEDGE_HAS_COLOR, DEFAULT_SELECTEDEDGE_HAS_COLOR); - protected Color defaultEdgeInSelectedColor = ColorUtils.decode(NbPreferences.forModule(VizConfig.class).get(SELECTEDEDGE_IN_COLOR, ColorUtils.encode(DEFAULT_SELECTEDEDGE_IN_COLOR))); - protected Color defaultEdgeOutSelectedColor = ColorUtils.decode(NbPreferences.forModule(VizConfig.class).get(SELECTEDEDGE_OUT_COLOR, ColorUtils.encode(DEFAULT_SELECTEDEDGE_OUT_COLOR))); - protected Color defaultEdgeBothSelectedColor = ColorUtils.decode(NbPreferences.forModule(VizConfig.class).get(SELECTEDEDGE_BOTH_COLOR, ColorUtils.encode(DEFAULT_SELECTEDEDGE_BOTH_COLOR))); - protected float defaultEdgeScale = NbPreferences.forModule(VizConfig.class).getFloat(EDGE_SCALE, DEFAULT_EDGE_SCALE); - //Preferences - protected int antialiasing = NbPreferences.forModule(VizConfig.class).getInt(ANTIALIASING, DEFAULT_ANTIALIASING); - protected boolean lineSmooth = false; //Not useful, GL_LINES - protected boolean lineSmoothNicest = false; //Not useful, GL_LINES - protected boolean pointSmooth = false; //Not useful, GL_POINTS - protected boolean blending = NbPreferences.forModule(VizConfig.class).getBoolean(BLENDING, DEFAULT_BLENDING); - protected boolean blendCinema = false; //Not working - protected boolean wireFrame = NbPreferences.forModule(VizConfig.class).getBoolean(WIREFRAME, DEFAULT_WIREFRAME); - protected boolean useGLJPanel = NbPreferences.forModule(VizConfig.class).getBoolean(GLJPANEL, DEFAULT_GLJPANEL); - protected float[] nodeSelectedColor = {1f, 1f, 1f}; //Not used - protected boolean selectionEnable = NbPreferences.forModule(VizConfig.class).getBoolean(SELECTION, DEFAULT_SELECTION); - protected boolean rectangleSelection = NbPreferences.forModule(VizConfig.class).getBoolean(RECTANGLE_SELECTION, DEFAULT_RECTANGLE_SELECTION); - protected Color rectangleSelectionColor = ColorUtils.decode(NbPreferences.forModule(VizConfig.class).get(RECTANGLE_SELECTION_COLOR, ColorUtils.encode(DEFAULT_RECTANGLE_SELECTION_COLOR))); - protected boolean customSelection = false; //Overriden in Engine - protected boolean draggingEnable = NbPreferences.forModule(VizConfig.class).getBoolean(DRAGGING, DEFAULT_DRAGGING); - protected boolean cameraControlEnable = NbPreferences.forModule(VizConfig.class).getBoolean(CAMERA_CONTROL, DEFAULT_CAMERA_CONTROL); - protected boolean showFPS = NbPreferences.forModule(VizConfig.class).getBoolean(SHOW_FPS, DEFAULT_SHOW_FPS); - protected boolean reduceFpsWhenMouseOut = NbPreferences.forModule(VizConfig.class).getBoolean(REDUCE_FPS_MOUSE_OUT, DEFAULT_REDUCE_FPS_MOUSE_OUT); - protected int reduceFpsWhenMouseOutValue = NbPreferences.forModule(VizConfig.class).getInt(REDUCE_FPS_MOUSE_OUT_VALUE, DEFAULT_REDUCE_FPS_MOUSE_OUT_VALUE); - protected boolean pauseLoopWhenMouseOut = NbPreferences.forModule(VizConfig.class).getBoolean(PAUSE_LOOP_MOUSE_OUT, DEFAULT_PAUSE_LOOP_MOUSE_OUT); - protected boolean showArrows = true; //Overriden in Engine - protected boolean lightenNonSelected = false; //Overriden in Engine - protected float[] lightenNonSelectedColor = ColorUtils.decode(NbPreferences.forModule(VizConfig.class).get(HIGHTLIGHT_COLOR, ColorUtils.encode(DEFAULT_HIGHTLIGHT_COLOR))).getRGBColorComponents(null); - protected boolean lightenNonSelectedAnimation = NbPreferences.forModule(VizConfig.class).getBoolean(HIGHTLIGHT_ANIMATION, DEFAULT_HIGHTLIGHT_ANIMATION); - protected float lightenNonSelectedFactor = 0.5f; //Overriden in Engine - protected float[] uniColorSelectedColor = ColorUtils.decode(NbPreferences.forModule(VizConfig.class).get(NODE_SELECTED_UNIQUE_COLOR, ColorUtils.encode(DEFAULT_NODE_SELECTED_UNIQUE_COLOR))).getRGBColorComponents(null); - protected float[] uniColorSelectedNeigborColor = ColorUtils.decode(NbPreferences.forModule(VizConfig.class).get(NODE_NEIGHBOR_SELECTED_UNIQUE_COLOR, ColorUtils.encode(DEFAULT_NODE_NEIGHBOR_SELECTED_UNIQUE_COLOR))).getRGBColorComponents(null); - protected int octreeDepth = NbPreferences.forModule(VizConfig.class).getInt(OCTREE_DEPTH, DEFAULT_OCTREE_DEPTH); - protected int octreeWidth = NbPreferences.forModule(VizConfig.class).getInt(OCTREE_WIDTH, DEFAULT_OCTREE_WIDTH); - protected boolean cleanDeletedModels = NbPreferences.forModule(VizConfig.class).getBoolean(CLEAN_DELETED_MODELS, DEFAULT_CLEAN_DELETED_MODELS); - protected boolean labelMipMap = NbPreferences.forModule(VizConfig.class).getBoolean(LABEL_MIPMAP, DEFAULT_LABEL_MIPMAP); - protected boolean labelAntialiased = NbPreferences.forModule(VizConfig.class).getBoolean(LABEL_ANTIALIASED, DEFAULT_LABEL_ANTIALIASED); - protected boolean labelFractionalMetrics = NbPreferences.forModule(VizConfig.class).getBoolean(LABEL_FRACTIONAL_METRICS, DEFAULT_LABEL_FRACTIONAL_METRICS); - protected boolean useLabelRenderer3d = false;//no working - protected boolean showVizVar = NbPreferences.forModule(VizConfig.class).getBoolean(VIZBAR, DEFAULT_VIZBAR); - protected boolean contextMenu = NbPreferences.forModule(VizConfig.class).getBoolean(CONTEXT_MENU, DEFAULT_CONTEXT_MENU); - protected boolean toolbar = NbPreferences.forModule(VizConfig.class).getBoolean(TOOLBAR, DEFAULT_TOOLBAR); - protected boolean propertiesbar = NbPreferences.forModule(VizConfig.class).getBoolean(HIGHTLIGHT_ANIMATION, DEFAULT_HIGHTLIGHT_ANIMATION); - protected int mouseSelectionDiameter = NbPreferences.forModule(VizConfig.class).getInt(MOUSE_SELECTION_DIAMETER, DEFAULT_MOUSE_SELECTION_DIAMETER); - protected boolean mouseSelectionZoomProportionnal = NbPreferences.forModule(VizConfig.class).getBoolean(MOUSE_SELECTION_ZOOM_PROPORTIONAL, DEFAULT_MOUSE_SELECTION_ZOOM_PROPORTIONAL); - protected boolean mouseSelectionUpdateWhileDragging = NbPreferences.forModule(VizConfig.class).getBoolean(MOUSE_SELECTION_WHILE_DRAGGING, DEFAULT_MOUSE_SELECTION_WHILE_DRAGGING); - protected boolean disableLOD = NbPreferences.forModule(VizConfig.class).getBoolean(DISABLE_LOD, DEFAULT_DISABLE_LOD); - protected boolean enableAutoSelect = true; //Overriden in Engine - Temporary used by tools like ShortestPath - - public int getAntialiasing() { - return antialiasing; - } - - public boolean isBlendCinema() { - return blendCinema; - } - - public boolean isBlending() { - return blending; - } - - public boolean isCameraControlEnable() { - return cameraControlEnable; - } - - public boolean isCleanDeletedModels() { - return cleanDeletedModels; - } - - public boolean isContextMenu() { - return contextMenu; - } - - public boolean isDefaultAdjustByText() { - return defaultAdjustByText; - } - - public boolean isDefaultAutoSelectNeighbor() { - return defaultAutoSelectNeighbor; - } - - public Color getDefaultBackgroundColor() { - return defaultBackgroundColor; - } - - public float[] getDefaultCameraPosition() { - return defaultCameraPosition; - } - - public float[] getDefaultCameraTarget() { - return defaultCameraTarget; - } - - public boolean isDefaultCulling() { - return defaultCulling; - } - - public boolean isDefaultEdgeHasUniColor() { - return defaultEdgeHasUniColor; - } - - public Color getDefaultEdgeLabelColor() { - return defaultEdgeLabelColor; - } - - public Font getDefaultEdgeLabelFont() { - return defaultEdgeLabelFont; - } - - public Color getDefaultEdgeUniColor() { - return defaultEdgeUniColor; - } - - public boolean isDefaultHideNonSelectedEdges() { - return defaultHideNonSelectedEdges; - } - - public boolean isDefaultLightenNonSelectedAuto() { - return defaultLightenNonSelectedAuto; - } - - public boolean isDefaultLighting() { - return defaultLighting; - } - - public boolean isDefaultMaterial() { - return defaultMaterial; - } - - public Color getDefaultNodeLabelColor() { - return defaultNodeLabelColor; - } - - public Font getDefaultNodeLabelFont() { - return defaultNodeLabelFont; - } - - public boolean isDefaultRotatingEnable() { - return defaultRotatingEnable; - } - - public boolean isDefaultShowEdgeLabels() { - return defaultShowEdgeLabels; - } - - public boolean isDefaultShowLabelOnSelectedOnly() { - return defaultShowLabelOnSelectedOnly; - } - - public boolean isDefaultShowNodeLabels() { - return defaultShowNodeLabels; - } - - public boolean isDefaultUniColorSelected() { - return defaultUniColorSelected; - } - - public boolean isDefaultUse3d() { - return defaultUse3d; - } - - public boolean isDefaultShowEdges() { - return defaultShowEdges; - } - - public boolean isDraggingEnable() { - return draggingEnable; - } - - public boolean isDefaultEdgeSelectionColor() { - return defaultEdgeSelectionColor; - } - - public Color getDefaultEdgeBothSelectedColor() { - return defaultEdgeBothSelectedColor; - } - - public Color getDefaultEdgeInSelectedColor() { - return defaultEdgeInSelectedColor; - } - - public Color getDefaultEdgeOutSelectedColor() { - return defaultEdgeOutSelectedColor; - } - - public boolean isLabelAntialiased() { - return labelAntialiased; - } - - public boolean isLabelFractionalMetrics() { - return labelFractionalMetrics; - } - - public boolean isLabelMipMap() { - return labelMipMap; - } - - public boolean isLightenNonSelected() { - return lightenNonSelected; - } - - public boolean isLightenNonSelectedAnimation() { - return lightenNonSelectedAnimation; - } - - public float[] getLightenNonSelectedColor() { - return lightenNonSelectedColor; - } - - public float getLightenNonSelectedFactor() { - return lightenNonSelectedFactor; - } - - public boolean isLineSmooth() { - return lineSmooth; - } - - public boolean isLineSmoothNicest() { - return lineSmoothNicest; - } - - public float[] getNodeSelectedColor() { - return nodeSelectedColor; - } - - public int getOctreeDepth() { - return octreeDepth; - } - - public int getOctreeWidth() { - return octreeWidth; - } - - public boolean isPointSmooth() { - return pointSmooth; - } - - public boolean isRectangleSelection() { - return rectangleSelection; - } - - public Color getRectangleSelectionColor() { - return rectangleSelectionColor; - } - - public boolean isSelectionEnable() { - return selectionEnable; - } - - public boolean isShowArrows() { - return showArrows; - } - - public boolean isShowFPS() { - return showFPS; - } - - public boolean isShowVizVar() { - return showVizVar; - } - - public float[] getUniColorSelectedColor() { - return uniColorSelectedColor; - } - - public float[] getUniColorSelectedNeigborColor() { - return uniColorSelectedNeigborColor; - } - - public boolean isUseGLJPanel() { - return useGLJPanel; - } - - public boolean isUseLabelRenderer3d() { - return useLabelRenderer3d; - } - - public boolean isWireFrame() { - return wireFrame; - } - - public String getDefaultNodeModeler() { - return defaultNodeModeler; - } - - public boolean isToolbar() { - return toolbar; - } - - public boolean isPropertiesbar() { - return propertiesbar; - } - - public int getMouseSelectionDiameter() { - return mouseSelectionDiameter; - } - - public boolean isMouseSelectionZoomProportionnal() { - return mouseSelectionZoomProportionnal; - } - - public boolean isMouseSelectionUpdateWhileDragging() { - return mouseSelectionUpdateWhileDragging; - } - - public boolean isCustomSelection() { - return customSelection; - } - - public boolean isReduceFpsWhenMouseOut() { - return reduceFpsWhenMouseOut; - } - - public int getReduceFpsWhenMouseOutValue() { - return reduceFpsWhenMouseOutValue; - } - - //Setters - public void setLightenNonSelectedFactor(float lightenNonSelectedFactor) { - this.lightenNonSelectedFactor = lightenNonSelectedFactor; - } - - public void setLightenNonSelected(boolean lightenNonSelected) { - this.lightenNonSelected = lightenNonSelected; - } - - public void setRectangleSelection(boolean rectangleSelection) { - this.rectangleSelection = rectangleSelection; - } - - public void setDraggingEnable(boolean draggingEnable) { - this.draggingEnable = draggingEnable; - } - - public void setSelectionEnable(boolean selectionEnable) { - this.selectionEnable = selectionEnable; - } - - public void setCustomSelection(boolean customSelection) { - this.customSelection = customSelection; - } - - public void setMouseSelectionUpdateWhileDragging(boolean mouseSelectionUpdateWhileDragging) { - this.mouseSelectionUpdateWhileDragging = mouseSelectionUpdateWhileDragging; - } - - public boolean isDisableLOD() { - return disableLOD; - } - - public void setDisableLOD(boolean disableLOD) { - this.disableLOD = disableLOD; - } - - public boolean isEnableAutoSelect() { - return enableAutoSelect; - } - - public void setEnableAutoSelect(boolean enableAutoSelect) { - this.enableAutoSelect = enableAutoSelect; - } - - public boolean isPauseLoopWhenMouseOut() { - return pauseLoopWhenMouseOut; - } - - public void setPauseLoopWhenMouseOut(boolean pauseLoopWhenMouseOut) { - this.pauseLoopWhenMouseOut = pauseLoopWhenMouseOut; - } - - public float getDefaultEdgeScale() { - return defaultEdgeScale; - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/VizEventListener.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/VizEventListener.java deleted file mode 100644 index 4a6c26b80c..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/VizEventListener.java +++ /dev/null @@ -1,55 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.visualization.apiimpl; - -import java.util.EventListener; - -/** - * - * @author Mathieu Bastian - */ -public interface VizEventListener extends EventListener { - - public void handleEvent(VizEvent event); - - public VizEvent.Type getType(); -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/VizEventManager.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/VizEventManager.java deleted file mode 100644 index 6054da5f12..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/VizEventManager.java +++ /dev/null @@ -1,85 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.visualization.apiimpl; - -import org.gephi.visualization.VizArchitecture; - -/** - * - * @author Mathieu Bastian - */ -public interface VizEventManager extends VizArchitecture { - - public void startDrag(); - - public void drag(); - - public void stopDrag(); - - public void mouseLeftPress(); - - public void mouseRightPress(); - - public void mouseMiddlePress(); - - public void mouseLeftClick(); - - public void mouseRightClick(); - - public void mouseMiddleClick(); - - public void mouseMove(); - - public void mouseLeftPressing(); - - public void mouseReleased(); - - public void addListener(VizEventListener listener); - - public void addListener(VizEventListener[] listeners); - - public void removeListener(VizEventListener listener); - - public void removeListener(VizEventListener[] listeners); - - public boolean hasListeners(VizEvent.Type type); -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/CopyOrMoveToWorkspace.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/CopyOrMoveToWorkspace.java deleted file mode 100644 index e0ecd1a5cd..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/CopyOrMoveToWorkspace.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian , Eduardo Ramos - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.apiimpl.contextmenuitems; - -import javax.swing.Icon; -import org.gephi.graph.api.Node; - -/** - * - */ -public abstract class CopyOrMoveToWorkspace extends BasicItem { - - @Override - public void execute() { - } - - @Override - public void setup(Node[] nodes, Node clickedNode) { - this.nodes = nodes; - } - -// @Override -// public ContextMenuItemManipulator[] getSubItems() { -// if (nodes != null) { -// int i = 0; -// ArrayList subItems = new ArrayList(); -// if (canExecute()) { -// subItems.add(new CopyOrMoveToWorkspaceSubItem(null, true, 0, 0, isCopy()));//New workspace -// ProjectController projectController = Lookup.getDefault().lookup(ProjectController.class); -// for (final Workspace w : projectController.getCurrentProject().getLookup().lookup(WorkspaceProvider.class).getWorkspaces()) { -// GraphContextMenuItem item = new CopyOrMoveToWorkspaceSubItem(w, w != projectController.getCurrentWorkspace(), 1, i, isCopy()); -// subItems.add(item); -// i++; -// } -// return subItems.toArray(new ContextMenuItemManipulator[0]); -// } else { -// return null; -// } -// } else { -// return null; -// } -// } - @Override - public boolean canExecute() { - return nodes.length > 0; - } - - @Override - public int getType() { - return 200; - } - - @Override - public Icon getIcon() { - return null; - } - - protected abstract boolean isCopy(); -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/CopyOrMoveToWorkspaceSubItem.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/CopyOrMoveToWorkspaceSubItem.java deleted file mode 100644 index 7e6c21c9c2..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/CopyOrMoveToWorkspaceSubItem.java +++ /dev/null @@ -1,156 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian , Eduardo Ramos - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.apiimpl.contextmenuitems; - -import javax.swing.Icon; -import org.gephi.desktop.project.api.ProjectControllerUI; -import org.gephi.graph.api.Node; -import org.gephi.project.api.Workspace; -import org.gephi.project.api.WorkspaceInformation; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; - -public class CopyOrMoveToWorkspaceSubItem extends BasicItem { - - private Workspace workspace; - private boolean canExecute; - private int type; - private int position; - private final boolean copy; - - @Override - public void setup(Node[] nodes, Node clickedNode) { - this.nodes = nodes; - } - - /** - * Constructor with copy or move settings - * - * @param workspace Workspace to copy or move, or null to use new workspace - * @param canExecute canExecute - * @param type type - * @param position position - * @param copy True to copy, false to move - */ - public CopyOrMoveToWorkspaceSubItem(Workspace workspace, boolean canExecute, int type, int position, boolean copy) { - this.workspace = workspace; - this.canExecute = canExecute; - this.type = type; - this.position = position; - this.copy = copy; - } - - @Override - public void execute() { - if (workspace == null) { - workspace = Lookup.getDefault().lookup(ProjectControllerUI.class).newWorkspace(); - } - if (copy) { - copyToWorkspace(workspace); - } else { - moveToWorkspace(workspace); - } - } - - @Override - public String getName() { - if (workspace != null) { - return workspace.getLookup().lookup(WorkspaceInformation.class).getName(); - } else { - return NbBundle.getMessage(CopyOrMoveToWorkspaceSubItem.class, copy ? "GraphContextMenu_CopyToWorkspace_NewWorkspace" : "GraphContextMenu_MoveToWorkspace_NewWorkspace"); - } - } - - @Override - public boolean canExecute() { - return canExecute; - } - - @Override - public int getType() { - return type; - } - - @Override - public int getPosition() { - return position; - } - - @Override - public Icon getIcon() { - return null; - } - - public void copyToWorkspace(Workspace workspace) { -// GraphController graphController = Lookup.getDefault().lookup(GraphController.class); -// AttributeController attributeController = Lookup.getDefault().lookup(AttributeController.class); -// ProjectController projectController = Lookup.getDefault().lookup(ProjectController.class); -// -// Workspace currentWorkspace = projectController.getCurrentWorkspace(); -// AttributeModel sourceAttributeModel = attributeController.getModel(currentWorkspace); -// AttributeModel destAttributeModel = attributeController.getModel(workspace); -// destAttributeModel.mergeModel(sourceAttributeModel); -// -// //Copy the TImeFormat -// DynamicController dynamicController = Lookup.getDefault().lookup(DynamicController.class); -// dynamicController.setTimeFormat(dynamicController.getModel(currentWorkspace).getTimeFormat(), workspace); -// -// GraphModel sourceModel = graphController.getModel(currentWorkspace); -// GraphModel destModel = graphController.getModel(workspace); -// Graph destGraph = destModel.getHierarchicalGraphVisible(); -// Graph sourceGraph = sourceModel.getHierarchicalGraphVisible(); -// -// destModel.pushNodes(sourceGraph, nodes); - } - - public void moveToWorkspace(Workspace workspace) { - copyToWorkspace(workspace); - delete(); - } - - public void delete() { -// HierarchicalGraph hg = Lookup.getDefault().lookup(GraphController.class).getModel().getHierarchicalGraph(); -// for (Node n : nodes) { -// hg.removeNode(n); -// } - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/bridge/DHNSDataBridge.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/bridge/DHNSDataBridge.java deleted file mode 100644 index ea1784cbb7..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/bridge/DHNSDataBridge.java +++ /dev/null @@ -1,376 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.bridge; - -import org.gephi.graph.api.Graph; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.GraphModel; -import org.gephi.visualization.GraphLimits; -import org.gephi.visualization.apiimpl.VizConfig; -import org.gephi.visualization.opengl.AbstractEngine; - -/** - * - * @author Mathieu Bastian - */ -public class DHNSDataBridge { - - //Architecture - protected AbstractEngine engine; - protected GraphController controller; - protected Graph graph; - private VizConfig vizConfig; - protected GraphLimits limits; - protected boolean undirected = false; - //Version - protected int nodeVersion = -1; - protected int edgeVersion = -1; - protected int graphView = 0; - protected GraphModel gm; - //Attributes - private int cacheMarker = 0; -// -// @Override -// public void initArchitecture() { -// this.engine = VizController.getInstance().getEngine(); -// controller = Lookup.getDefault().lookup(GraphController.class); -// this.vizConfig = VizController.getInstance().getVizConfig(); -// this.limits = VizController.getInstance().getLimits(); -// } -// -// @Override -// public void updateWorld() { -// //System.out.println("update world"); -// cacheMarker++; -// -// GraphModel graphModel = controller.getGraphModel(); -// if (graphModel == null) { -//// engine.worldUpdated(cacheMarker); -// -// return; -// } -// if (gm != null && gm != graphModel) { -// reset(); -// } -// gm = graphModel; -// Graph graph; -// if (graphModel.isDirected()) { -// undirected = false; -// graph = graphModel.getDirectedGraph(graphModel.getVisibleView()); -// } else if (graphModel.isUndirected()) { -// undirected = true; -// graph = graphModel.getUndirectedGraph(graphModel.getVisibleView()); -// } else if (graphModel.isMixed()) { -// undirected = false; -// graph = graphModel.getGraph(graphModel.getVisibleView()); -// } else { -// undirected = false; -// graph = graphModel.getDirectedGraph(graphModel.getVisibleView()); -// } -// -// graphView = graph.getView(); -// -// ModelClass[] object3dClasses = engine.getModelClasses(); -// -// graph.readLock(); -// -// -// -// ModelClass nodeClass = object3dClasses[AbstractEngine.CLASS_NODE]; -// if (nodeClass.isEnabled() && (graph.getNodeVersion() > nodeVersion || modeManager.requireModeChange())) { -// updateNodes(graph); -// nodeClass.setCacheMarker(cacheMarker); -// } -// -// ModelClass edgeClass = object3dClasses[AbstractEngine.CLASS_EDGE]; -// if (edgeClass.isEnabled() && (graph.getEdgeVersion() > edgeVersion || modeManager.requireModeChange())) { -// updateEdges(graph); -// updateMetaEdges(graph); -// edgeClass.setCacheMarker(cacheMarker); -// if (!undirected && vizConfig.isShowArrows()) { -// object3dClasses[AbstractEngine.CLASS_ARROW].setCacheMarker(cacheMarker); -// } -// } -// -// ModelClass potatoClass = object3dClasses[AbstractEngine.CLASS_POTATO]; -// if (potatoClass.isEnabled() && (graph.getNodeVersion() > nodeVersion || modeManager.requireModeChange())) { -// updatePotatoes(graph); -// potatoClass.setCacheMarker(cacheMarker); -// } -// -// nodeVersion = graph.getNodeVersion(); -// edgeVersion = graph.getEdgeVersion(); -// -// graph.readUnlock(); -// -// engine.worldUpdated(cacheMarker); -// } -// -// private void updateNodes(HierarchicalGraph graph) { -// Modeler nodeInit = engine.getModelClasses()[AbstractEngine.CLASS_NODE].getCurrentModeler(); -// -// NodeIterable nodeIterable; -// nodeIterable = graph.getNodes(); -// -// -// for (Node node : nodeIterable) { -// -// Model obj = node.getNodeData().getModel(); -// if (obj == null) { -// //Model is null, ADD -// obj = nodeInit.initModel(node.getNodeData()); -// engine.addObject(AbstractEngine.CLASS_NODE, (ModelImpl) obj); -// } else if (!obj.isValid()) { -// engine.addObject(AbstractEngine.CLASS_NODE, (ModelImpl) obj); -// } -// obj.setCacheMarker(cacheMarker); -// -// //Modeaction -// if (modeManager.getMode().equals(ModeManager.AVAILABLE_MODES.HIGHLIGHT)) { -// ModelImpl impl = (ModelImpl) obj; -//// if (!node.isVisible()) { -//// ColorLayer.layerColor(impl, 0.8f, 0.8f, 0.8f); -//// } -// } -// } -// } -// -// private void updateEdges(HierarchicalGraph graph) { -// Modeler edgeInit = engine.getModelClasses()[AbstractEngine.CLASS_EDGE].getCurrentModeler(); -// Modeler arrowInit = engine.getModelClasses()[AbstractEngine.CLASS_ARROW].getCurrentModeler(); -// -// EdgeIterable edgeIterable; -// edgeIterable = graph.getEdges(); -// -// float minWeight = Float.POSITIVE_INFINITY; -// float maxWeight = Float.NEGATIVE_INFINITY; -// -// TimeInterval timeInterval = DynamicUtilities.getVisibleInterval(dynamicModel); -// -// for (Edge edge : edgeIterable) { -// if (edge.getSource().getNodeData().getModel() == null || edge.getTarget().getNodeData().getModel() == null) { -// continue; -// } -// float weight = 1f; -// if (timeInterval == null) { -// weight = edge.getWeight(); -// } else { -// weight = edge.getWeight(timeInterval.getLow(), timeInterval.getHigh()); -// } -// minWeight = Math.min(minWeight, weight); -// maxWeight = Math.max(maxWeight, weight); -// Edge2dModel obj = (Edge2dModel) edge.getEdgeData().getModel(); -// if (obj == null) { -// //Model is null, ADD -// obj = (Edge2dModel) edgeInit.initModel(edge.getEdgeData()); -// engine.addObject(AbstractEngine.CLASS_EDGE, obj); -// if (!undirected && vizConfig.isShowArrows() && !edge.isSelfLoop()) { -// Arrow2dModel arrowObj = (Arrow2dModel) arrowInit.initModel(edge.getEdgeData()); -// engine.addObject(AbstractEngine.CLASS_ARROW, arrowObj); -// arrowObj.setCacheMarker(cacheMarker); -// arrowObj.setWeight(weight); -// obj.setArrow(arrowObj); -// } -// } else if (!obj.isValid()) { -// engine.addObject(AbstractEngine.CLASS_EDGE, obj); -// if (!undirected && vizConfig.isShowArrows() && !edge.isSelfLoop()) { -// Arrow2dModel arrowObj = obj.getArrow(); -// engine.addObject(AbstractEngine.CLASS_ARROW, arrowObj); -// arrowObj.setCacheMarker(cacheMarker); -// arrowObj.setWeight(weight); -// } -// } else { -// if (!undirected && vizConfig.isShowArrows() && !edge.isSelfLoop() && edge.isDirected()) { -// Arrow2dModel arrowObj = obj.getArrow(); -// arrowObj.setCacheMarker(cacheMarker); -// arrowObj.setWeight(weight); -// } -// } -// obj.setWeight(weight); -// obj.setCacheMarker(cacheMarker); -// } -// -// limits.setMinWeight(minWeight); -// limits.setMaxWeight(maxWeight); -// } -// -// public void updateMetaEdges(HierarchicalGraph graph) { -// Modeler edgeInit = engine.getModelClasses()[AbstractEngine.CLASS_EDGE].getCurrentModeler(); -// Modeler arrowInit = engine.getModelClasses()[AbstractEngine.CLASS_ARROW].getCurrentModeler(); -// -// float minWeight = Float.POSITIVE_INFINITY; -// float maxWeight = Float.NEGATIVE_INFINITY; -// -// TimeInterval timeInterval = DynamicUtilities.getVisibleInterval(dynamicModel); -// -// for (Edge edge : graph.getMetaEdges()) { -// if (edge.getSource().getNodeData().getModel() == null || edge.getTarget().getNodeData().getModel() == null) { -// continue; -// } -// float weight = 1f; -// if (timeInterval == null) { -// weight = edge.getWeight(); -// } else { -// weight = edge.getWeight(timeInterval.getLow(), timeInterval.getHigh()); -// } -// minWeight = Math.min(minWeight, weight); -// maxWeight = Math.max(maxWeight, weight); -// Edge2dModel obj = (Edge2dModel) edge.getEdgeData().getModel(); -// if (obj == null) { -// //Model is null, ADD -// obj = (Edge2dModel) edgeInit.initModel(edge.getEdgeData()); -// engine.addObject(AbstractEngine.CLASS_EDGE, obj); -// if (!undirected && vizConfig.isShowArrows() && !edge.isSelfLoop()) { -// Arrow2dModel arrowObj = (Arrow2dModel) arrowInit.initModel(edge.getEdgeData()); -// engine.addObject(AbstractEngine.CLASS_ARROW, arrowObj); -// arrowObj.setCacheMarker(cacheMarker); -// arrowObj.setWeight(weight); -// obj.setArrow(arrowObj); -// } -// } else if (!obj.isValid()) { -// engine.addObject(AbstractEngine.CLASS_EDGE, obj); -// if (!undirected && vizConfig.isShowArrows() && !edge.isSelfLoop()) { -// Arrow2dModel arrowObj = obj.getArrow(); -// engine.addObject(AbstractEngine.CLASS_ARROW, arrowObj); -// arrowObj.setCacheMarker(cacheMarker); -// arrowObj.setWeight(weight); -// } -// } else { -// if (!undirected && vizConfig.isShowArrows() && !edge.isSelfLoop() && edge.isDirected()) { -// Arrow2dModel arrowObj = obj.getArrow(); -// arrowObj.setCacheMarker(cacheMarker); -// arrowObj.setWeight(weight); -// } -// } -// obj.setWeight(weight); -// obj.setCacheMarker(cacheMarker); -// } -// -// limits.setMinMetaWeight(minWeight); -// limits.setMaxMetaWeight(maxWeight); -// } -// -// public void updatePotatoes(HierarchicalGraph graph) { -// -// ModelClass potatoClass = engine.getModelClasses()[AbstractEngine.CLASS_POTATO]; -// if (potatoClass.isEnabled()) { -// Modeler potInit = engine.getModelClasses()[AbstractEngine.CLASS_POTATO].getCurrentModeler(); -// -// List hulls = new ArrayList(); -// Node[] nodes = graph.getNodes().toArray(); -// for (Node n : nodes) { -// Node parent = graph.getParent(n); -// if (parent != null) { -// Group group = (Group) parent; -// Model hullModel = group.getGroupData().getHullModel(); -// if (hullModel != null && hullModel.isCacheMatching(cacheMarker)) { -// ConvexHull hull = (ConvexHull) hullModel.getObj(); -// hull.addNode(n); -// hull.setModel(hullModel); -// } else if (hullModel != null) { -// //Its not the first time the hull exist -// ConvexHullModel model = (ConvexHullModel) hullModel; -// model.setScale(1f); -// hullModel.setCacheMarker(cacheMarker); -// hulls.add((ModelImpl) hullModel); -// } else { -// ConvexHull ch = new ConvexHull(); -// ch.setMetaNode(parent); -// ch.addNode(n); -// ModelImpl obj = potInit.initModel(ch); -// group.getGroupData().setHullModel(obj); -// obj.setCacheMarker(cacheMarker); -// hulls.add(obj); -// } -// } -// } -// for (ModelImpl im : hulls) { -// ConvexHull hull = (ConvexHull) im.getObj(); -// hull.recompute(); -// engine.addObject(AbstractEngine.CLASS_POTATO, im); -// } -// } -// } -// -// @Override -// public boolean requireUpdate() { -// if (graph == null) { -// //Try to get a graph -// GraphModel graphModel = controller.getModel(); -// if (graphModel != null) { -// graph = graphModel.getHierarchicalGraphVisible(); -// } -// } -// //Refresh reader if sight changed -// Graph g = graph; -// if (g != null) { -// if (g.getGraphModel().getVisibleView().getViewId() != graphView) { -// reset(); -// } -// return g.getNodeVersion() > nodeVersion || g.getEdgeVersion() > edgeVersion; -// } -// return false; -// } -// -// @Override -// public void resetGraph() { -// graph = null; -// if (dynamicModel != null) { -// dynamicController.removeModelListener(this); -// } -// dynamicModel = null; -// } -// -// @Override -// public void reset() { -// nodeVersion = -1; -// edgeVersion = -1; -// } -// -// private void resetClasses() { -// for (ModelClass objClass : engine.getModelClasses()) { -// if (objClass.isEnabled()) { -// engine.resetObjectClass(objClass); -// } -// } -// } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/bridge/DataBridge.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/bridge/DataBridge.java deleted file mode 100644 index 2dfeead342..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/bridge/DataBridge.java +++ /dev/null @@ -1,216 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.bridge; - -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.Graph; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.GraphModel; -import org.gephi.graph.api.GraphObserver; -import org.gephi.graph.api.Node; -import org.gephi.visualization.GraphLimits; -import org.gephi.visualization.VizArchitecture; -import org.gephi.visualization.VizController; -import org.gephi.visualization.apiimpl.VizConfig; -import org.gephi.visualization.model.edge.EdgeModel; -import org.gephi.visualization.model.edge.EdgeModeler; -import org.gephi.visualization.model.node.NodeModel; -import org.gephi.visualization.model.node.NodeModeler; -import org.gephi.visualization.octree.Octree; -import org.gephi.visualization.opengl.AbstractEngine; -import org.openide.util.Lookup; - -/** - * - * @author Mathieu Bastian - */ -public class DataBridge implements VizArchitecture { - - //Const - protected static final long ONEOVERPHI = 106039; - //Architecture - protected AbstractEngine engine; - protected GraphController controller; - private VizConfig vizConfig; - protected GraphLimits limits; - //Graph - protected GraphModel graphModel; - protected Graph graph; - protected GraphObserver observer; - //Data - protected NodeModel[] nodes; - protected EdgeModel[] edges; - - @Override - public void initArchitecture() { - this.engine = VizController.getInstance().getEngine(); - this.controller = Lookup.getDefault().lookup(GraphController.class); - this.vizConfig = VizController.getInstance().getVizConfig(); - this.limits = VizController.getInstance().getLimits(); - } - - public synchronized boolean updateWorld() { - if (observer != null && observer.hasGraphChanged()) { - NodeModeler nodeModeler = (NodeModeler) engine.getNodeClass().getCurrentModeler(); - EdgeModeler edgeModeler = (EdgeModeler) engine.getEdgeClass().getCurrentModeler(); - Octree octree = engine.getOctree(); - - //Stats - int removedNodes = 0; - int addedNodes = 0; - int removedEdges = 0; - int addedEdges = 0; - - for (int i = 0; i < nodes.length; i++) { - NodeModel node = nodes[i]; - if (node != null && node.getNode().getStoreId() == -1) { - //Removed - octree.removeNode(node); - nodes[i] = null; - removedNodes++; - } - } - for (Node node : graph.getNodes()) { - int id = node.getStoreId(); - if (id >= nodes.length || nodes[id] == null) { - growNodes(id); - NodeModel model = nodeModeler.initModel(node); - octree.addNode(model); - nodes[id] = model; - addedNodes++; - } - } - for (int i = 0; i < edges.length; i++) { - EdgeModel edge = edges[i]; - if (edge != null && edge.getEdge().getStoreId() == -1) { - //Removed - NodeModel sourceModel = nodes[edge.getEdge().getSource().getStoreId()]; - NodeModel targetModel = nodes[edge.getEdge().getTarget().getStoreId()]; - if (sourceModel != null) { - sourceModel.removeEdge(edge); - } - if (targetModel != null) { - targetModel.removeEdge(edge); - } - edges[i] = null; - removedEdges++; - } - } - float minWeight = Float.MAX_VALUE; - float maxWeight = Float.MIN_VALUE; - for (Edge edge : graph.getEdges()) { - int id = edge.getStoreId(); - if (id >= edges.length || edges[id] == null) { - growEdges(id); - NodeModel sourceModel = nodes[edge.getSource().getStoreId()]; - NodeModel targetModel = nodes[edge.getTarget().getStoreId()]; - EdgeModel model = edgeModeler.initModel(edge, sourceModel, targetModel); - sourceModel.addEdge(model); - targetModel.addEdge(model); - edges[id] = model; - addedEdges++; - } - float w = (float) edge.getWeight(); - minWeight = Math.min(w, minWeight); - maxWeight = Math.max(w, maxWeight); - } - limits.setMaxWeight(maxWeight); - limits.setMinWeight(minWeight); - - System.out.println("DATABRIDGE:"); - System.out.println(" Removed Edges: " + removedEdges); - System.out.println(" Added Edges: " + addedEdges); - System.out.println(" Removed Nodes: " + removedNodes); - System.out.println(" Added Nodes: " + addedNodes); - - return true; - } else if (observer == null) { - Octree octree = engine.getOctree(); - if (!octree.isEmpty()) { - octree.clear(); - } - } - return false; - } - - public synchronized void reset() { - graphModel = controller.getGraphModel(); - if (graphModel != null) { - graph = graphModel.getGraphVisible(); - } - if (observer != null && (graphModel == null || observer.getGraph() != graph)) { - observer.destroy(); - observer = null; - } - nodes = new NodeModel[10]; - edges = new EdgeModel[10]; - if (graphModel != null) { - observer = graphModel.createGraphObserver(graph, false); - } - } - - public boolean isDirected() { - return graphModel != null && !graphModel.isUndirected(); - } - - private void growNodes(final int index) { - if (nodes == null) { - nodes = new NodeModel[10]; - } else if (index >= nodes.length) { - final int newLength = (int) Math.min(Math.max((ONEOVERPHI * nodes.length) >>> 16, index + 1), Integer.MAX_VALUE); - final NodeModel t[] = new NodeModel[newLength]; - System.arraycopy(nodes, 0, t, 0, nodes.length); - nodes = t; - } - } - - private void growEdges(final int index) { - if (edges == null) { - edges = new EdgeModel[10]; - } else if (index >= edges.length) { - final int newLength = (int) Math.min(Math.max((ONEOVERPHI * edges.length) >>> 16, index + 1), Integer.MAX_VALUE); - final EdgeModel t[] = new EdgeModel[newLength]; - System.arraycopy(edges, 0, t, 0, edges.length); - edges = t; - } - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/ActionsToolbar.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/ActionsToolbar.java deleted file mode 100644 index 98ec98cfce..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/ActionsToolbar.java +++ /dev/null @@ -1,250 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.component; - -import java.awt.Color; -import java.awt.Component; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import javax.swing.BorderFactory; -import javax.swing.JButton; -import javax.swing.JOptionPane; -import javax.swing.JToolBar; -import javax.swing.SwingUtilities; -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.Graph; -import org.gephi.graph.api.GraphController; -import org.gephi.graph.api.GraphModel; -import org.gephi.graph.api.Node; -import org.gephi.ui.components.JColorButton; -import org.gephi.ui.utils.UIUtils; -import org.gephi.visualization.VizController; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; - -/** - * - * @author Mathieu Bastian - */ -public class ActionsToolbar extends JToolBar { - - //Settings - private Color color = new Color(0.6f, 0.6f, 0.6f); - private float size = 10.0f; - - public ActionsToolbar() { - initDesign(); - initContent(); - } - - private void initContent() { - - //Center on graph - final JButton centerOnGraphButton = new JButton(); - centerOnGraphButton.setToolTipText(NbBundle.getMessage(VizBarController.class, "ActionsToolbar.centerOnGraph")); - centerOnGraphButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/visualization/component/centerOnGraph.png"))); - centerOnGraphButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - VizController.getInstance().getGraphIO().centerOnGraph(); - } - }); - add(centerOnGraphButton); - - //Center on zero - /*final JButton centerOnZeroButton = new JButton(); - centerOnZeroButton.setToolTipText(NbBundle.getMessage(VizBarController.class, "ActionsToolbar.centerOnZero")); - centerOnZeroButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/visualization/component/centerOnZero.png"))); - centerOnZeroButton.addActionListener(new ActionListener() { - - public void actionPerformed(ActionEvent e) { - VizController.getInstance().getGraphIO().centerOnZero(); - } - }); - add(centerOnZeroButton);*/ - - //Reset colors - final JColorButton resetColorButton = new JColorButton(color, true, false); - resetColorButton.setToolTipText(NbBundle.getMessage(ActionsToolbar.class, "ActionsToolbar.resetColors")); - resetColorButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent evt) { - color = resetColorButton.getColor(); - GraphController gc = Lookup.getDefault().lookup(GraphController.class); - GraphModel gm = gc.getGraphModel(); - Graph graph = gm.getGraphVisible(); - for (Node n : graph.getNodes()) { - n.setR(color.getRed() / 255f); - n.setG(color.getGreen() / 255f); - n.setB(color.getBlue() / 255f); - n.setAlpha(1f); - } - for (Edge e : graph.getEdges()) { - e.setR(color.getRed() / 255f); - e.setG(color.getGreen() / 255f); - e.setB(color.getBlue() / 255f); - e.setAlpha(0f); - } - } - }); - add(resetColorButton); - - //Reset sizes - final JButton resetSizeButton = new JButton(); - resetSizeButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/visualization/component/resetSize.png"))); - resetSizeButton.setToolTipText(NbBundle.getMessage(ActionsToolbar.class, "ActionsToolbar.resetSizes")); - resetSizeButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - GraphController gc = Lookup.getDefault().lookup(GraphController.class); - GraphModel gm = gc.getGraphModel(); - Graph graph = gm.getGraphVisible(); - for (Node n : graph.getNodes()) { - n.setSize(size); - } - } - }); - resetSizeButton.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - - if (SwingUtilities.isRightMouseButton(e)) { - Object res = JOptionPane.showInputDialog(resetSizeButton, NbBundle.getMessage(ActionsToolbar.class, "ActionsToolbar.resetSizes.dialog"), "" + size); - if (res != null) { - try { - size = Float.parseFloat((String) res); - } catch (Exception ex) { - } - } - } - } - }); - add(resetSizeButton); - - //Reset label colors - final JButton resetLabelColorButton = new JButton(); - resetLabelColorButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/visualization/component/resetLabelColor.png"))); - resetLabelColorButton.setToolTipText(NbBundle.getMessage(ActionsToolbar.class, "ActionsToolbar.resetLabelColors")); - resetLabelColorButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent evt) { - GraphController gc = Lookup.getDefault().lookup(GraphController.class); - GraphModel gm = gc.getGraphModel(); - Graph graph = gm.getGraphVisible(); - for (Node n : graph.getNodes().toArray()) { - n.getTextProperties().setColor(null); - } - for (Edge e : graph.getEdges().toArray()) { - e.getTextProperties().setColor(null); - } - } - }); - add(resetLabelColorButton); - - //Reset label colors - final JButton resetLabelVisibleButton = new JButton(); - resetLabelVisibleButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/visualization/component/resetLabelVisible.png"))); - resetLabelVisibleButton.setToolTipText(NbBundle.getMessage(ActionsToolbar.class, "ActionsToolbar.resetLabelVisible")); - resetLabelVisibleButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent evt) { - GraphController gc = Lookup.getDefault().lookup(GraphController.class); - GraphModel gm = gc.getGraphModel(); - Graph graph = gm.getGraphVisible(); - for (Node n : graph.getNodes()) { - n.getTextProperties().setVisible(true); - } - for (Edge e : graph.getEdges()) { - e.getTextProperties().setVisible(true); - } - } - }); - add(resetLabelVisibleButton); - - //Reset label size - JButton resetLabelSizeButton = new JButton(); - resetLabelSizeButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/visualization/component/resetLabelSize.png"))); - resetLabelSizeButton.setToolTipText(NbBundle.getMessage(ActionsToolbar.class, "ActionsToolbar.resetLabelSizes")); - resetLabelSizeButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - GraphController gc = Lookup.getDefault().lookup(GraphController.class); - GraphModel gm = gc.getGraphModel(); - Graph graph = gm.getGraphVisible(); - for (Node n : graph.getNodes()) { - n.getTextProperties().setSize(1f); - } - } - }); - add(resetLabelSizeButton); - } - - private void initDesign() { - setFloatable(false); - setOrientation(JToolBar.VERTICAL); - putClientProperty("JToolBar.isRollover", Boolean.TRUE); //NOI18N - setBorder(BorderFactory.createEmptyBorder(0, 2, 15, 2)); - setOpaque(false); - } - - @Override - public void setEnabled(final boolean enabled) { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - for (Component c : getComponents()) { - c.setEnabled(enabled); - } - } - }); - } - - @Override - public Component add(Component comp) { - if (comp instanceof JButton) { - UIUtils.fixButtonUI((JButton) comp); - } - return super.add(comp); - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/CollapsePanel.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/CollapsePanel.java deleted file mode 100644 index 9c1b65429b..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/CollapsePanel.java +++ /dev/null @@ -1,134 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.visualization.component; - -import java.awt.BorderLayout; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import javax.swing.JComponent; -import javax.swing.UIManager; -import org.gephi.ui.utils.UIUtils; - -/** - * - * @author Mathieu Bastian - */ -public class CollapsePanel extends javax.swing.JPanel { - - private boolean extended; - - /** Creates new form CollapsePanel */ - public CollapsePanel() { - initComponents(); - if (UIUtils.isAquaLookAndFeel()) { - buttonPanel.setBackground(UIManager.getColor("NbExplorerView.background")); - } - } - - public void init(JComponent topBar, final JComponent extendedPanel, boolean extended) { - add(topBar, BorderLayout.CENTER); - add(extendedPanel, BorderLayout.SOUTH); - - this.extended = extended; - if (extended) { - extendButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/visualization/component/arrowDown.png"))); // NOI18N - extendButton.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/visualization/component/arrowDown_rollover.png"))); // NOI18N - - } else { - extendButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/visualization/component/arrowUp.png"))); // NOI18N - extendButton.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/visualization/component/arrowUp_rollover.png"))); // NOI18N - } - extendButton.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - boolean ext = CollapsePanel.this.extended; - ext = !ext; - CollapsePanel.this.extended = ext; - if (ext) { - extendButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/visualization/component/arrowDown.png"))); // NOI18N - extendButton.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/visualization/component/arrowDown_rollover.png"))); // NOI18N - } else { - extendButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/visualization/component/arrowUp.png"))); // NOI18N - extendButton.setRolloverIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/visualization/component/arrowUp_rollover.png"))); // NOI18N - } - extendedPanel.setVisible(ext); - getParent().validate(); - getParent().repaint(); - } - }); - if (!extended) { - extendedPanel.setVisible(extended); - } - } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // //GEN-BEGIN:initComponents - private void initComponents() { - - buttonPanel = new javax.swing.JPanel(); - extendButton = new javax.swing.JButton(); - - setOpaque(false); - setLayout(new java.awt.BorderLayout()); - - buttonPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 3)); - - extendButton.setText(org.openide.util.NbBundle.getMessage(CollapsePanel.class, "CollapsePanel.extendButton.text")); // NOI18N - extendButton.setAlignmentY(0.0F); - extendButton.setBorderPainted(false); - extendButton.setContentAreaFilled(false); - extendButton.setFocusable(false); - buttonPanel.add(extendButton); - - add(buttonPanel, java.awt.BorderLayout.EAST); - }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JPanel buttonPanel; - private javax.swing.JButton extendButton; - // End of variables declaration//GEN-END:variables -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/EdgeSettingsPanel.form b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/EdgeSettingsPanel.form deleted file mode 100644 index 5002c8218e..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/EdgeSettingsPanel.form +++ /dev/null @@ -1,318 +0,0 @@ - - -
              - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/EdgeSettingsPanel.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/EdgeSettingsPanel.java deleted file mode 100644 index 2a5779f071..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/EdgeSettingsPanel.java +++ /dev/null @@ -1,442 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.component; - -import java.awt.Color; -import java.awt.color.ColorSpace; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import org.gephi.ui.components.JColorButton; -import org.gephi.visualization.VizController; -import org.gephi.visualization.VizModel; - -/** - * - * @author Mathieu Bastian - */ -public class EdgeSettingsPanel extends javax.swing.JPanel { - - /** - * Creates new form EdgeSettingsPanel - */ - public EdgeSettingsPanel() { - initComponents(); - } - - public void setup() { - VizModel vizModel = VizController.getInstance().getVizModel(); - vizModel.addPropertyChangeListener(new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - if (evt.getPropertyName().equals("init")) { - refreshSharedConfig(); - } else if (evt.getPropertyName().equals("edgeHasUniColor")) { - refreshSharedConfig(); - } else if (evt.getPropertyName().equals("showEdges")) { - refreshSharedConfig(); - } else if (evt.getPropertyName().equals("edgeUniColor")) { - refreshSharedConfig(); - } else if (evt.getPropertyName().equals("edgeSelectionColor")) { - refreshSharedConfig(); - } else if (evt.getPropertyName().equals("edgeInSelectionColor")) { - refreshSharedConfig(); - } else if (evt.getPropertyName().equals("edgeOutSelectionColor")) { - refreshSharedConfig(); - } else if (evt.getPropertyName().equals("edgeBothSelectionColor")) { - refreshSharedConfig(); - } else if (evt.getPropertyName().equals("edgeScale")) { - refreshSharedConfig(); - } - } - }); - refreshSharedConfig(); - - showEdgesCheckbox.addItemListener(new ItemListener() { - @Override - public void itemStateChanged(ItemEvent e) { - VizModel vizModel = VizController.getInstance().getVizModel(); - vizModel.setShowEdges(showEdgesCheckbox.isSelected()); - setEnable(true); - } - }); - ((JColorButton) edgeColorButton).addPropertyChangeListener(JColorButton.EVENT_COLOR, new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - VizModel vizModel = VizController.getInstance().getVizModel(); - vizModel.setEdgeUniColor(((JColorButton) edgeColorButton).getColorArray()); - } - }); - sourceNodeColorCheckbox.addItemListener(new ItemListener() { - @Override - public void itemStateChanged(ItemEvent e) { - VizModel vizModel = VizController.getInstance().getVizModel(); - vizModel.setEdgeHasUniColor(!sourceNodeColorCheckbox.isSelected()); - } - }); - selectionColorCheckbox.addItemListener(new ItemListener() { - @Override - public void itemStateChanged(ItemEvent e) { - VizModel vizModel = VizController.getInstance().getVizModel(); - vizModel.setEdgeSelectionColor(selectionColorCheckbox.isSelected()); - } - }); - edgeInSelectionColorChooser.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent ae) { - VizModel vizModel = VizController.getInstance().getVizModel(); - vizModel.setEdgeInSelectionColor(edgeInSelectionColorChooser.getColor().getComponents(null)); - } - }); - edgeBothSelectionColorChooser.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent ae) { - VizModel vizModel = VizController.getInstance().getVizModel(); - vizModel.setEdgeBothSelectionColor(edgeBothSelectionColorChooser.getColor().getComponents(null)); - } - }); - edgeOutSelectionColorChooser.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent ae) { - VizModel vizModel = VizController.getInstance().getVizModel(); - vizModel.setEdgeOutSelectionColor(edgeOutSelectionColorChooser.getColor().getComponents(null)); - } - }); - scaleSlider.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - VizModel vizModel = VizController.getInstance().getVizModel(); - if (vizModel.getEdgeScale() != (scaleSlider.getValue() / 10f + 0.1f)) { - vizModel.setEdgeScale(scaleSlider.getValue() / 10f + 0.1f); - } - } - }); - } - - private void refreshSharedConfig() { - VizModel vizModel = VizController.getInstance().getVizModel(); - setEnable(!vizModel.isDefaultModel()); - if (vizModel.isDefaultModel()) { - return; - } - if (showEdgesCheckbox.isSelected() != vizModel.isShowEdges()) { - showEdgesCheckbox.setSelected(vizModel.isShowEdges()); - } - float[] edgeCol = vizModel.getEdgeUniColor(); - ((JColorButton) edgeColorButton).setColor(new Color(edgeCol[0], edgeCol[1], edgeCol[2], edgeCol[3])); - - if (sourceNodeColorCheckbox.isSelected() != !vizModel.isEdgeHasUniColor()) { - sourceNodeColorCheckbox.setSelected(!vizModel.isEdgeHasUniColor()); - } - if (selectionColorCheckbox.isSelected() != vizModel.isEdgeSelectionColor()) { - selectionColorCheckbox.setSelected(vizModel.isEdgeSelectionColor()); - } - Color in = new Color(ColorSpace.getInstance(ColorSpace.CS_sRGB), vizModel.getEdgeInSelectionColor(), 1f); - Color out = new Color(ColorSpace.getInstance(ColorSpace.CS_sRGB), vizModel.getEdgeOutSelectionColor(), 1f); - Color both = new Color(ColorSpace.getInstance(ColorSpace.CS_sRGB), vizModel.getEdgeBothSelectionColor(), 1f); - if (!edgeInSelectionColorChooser.getColor().equals(in)) { - edgeInSelectionColorChooser.setColor(in); - } - if (!edgeBothSelectionColorChooser.getColor().equals(both)) { - edgeBothSelectionColorChooser.setColor(both); - } - if (!edgeOutSelectionColorChooser.getColor().equals(out)) { - edgeOutSelectionColorChooser.setColor(out); - } - if (scaleSlider.getValue() / 10f + 0.1f != vizModel.getEdgeScale()) { - scaleSlider.setValue((int) ((vizModel.getEdgeScale() - 0.1f) * 10)); - } - } - - private void setEnable(boolean enable) { - showEdgesCheckbox.setEnabled(enable); - edgeColorButton.setEnabled(enable && showEdgesCheckbox.isSelected()); - sourceNodeColorCheckbox.setEnabled(enable && showEdgesCheckbox.isSelected()); - labelEdgeColor.setEnabled(enable && showEdgesCheckbox.isSelected()); - scaleSlider.setEnabled(enable && showEdgesCheckbox.isSelected()); - labelScale.setEnabled(enable && showEdgesCheckbox.isSelected()); - selectionColorCheckbox.setEnabled(enable && showEdgesCheckbox.isSelected()); - edgeInSelectionColorChooser.setEnabled(enable && showEdgesCheckbox.isSelected() && selectionColorCheckbox.isSelected()); - edgeBothSelectionColorChooser.setEnabled(enable && showEdgesCheckbox.isSelected() && selectionColorCheckbox.isSelected()); - edgeOutSelectionColorChooser.setEnabled(enable && showEdgesCheckbox.isSelected() && selectionColorCheckbox.isSelected()); - labelIn.setEnabled(enable && showEdgesCheckbox.isSelected() && selectionColorCheckbox.isSelected()); - labelOut.setEnabled(enable && showEdgesCheckbox.isSelected() && selectionColorCheckbox.isSelected()); - labelBoth.setEnabled(enable && showEdgesCheckbox.isSelected() && selectionColorCheckbox.isSelected()); - } - - /** - * This method is called from within the constructor to initialize the form. - * WARNING: Do NOT modify this code. The content of this method is always - * regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // //GEN-BEGIN:initComponents - private void initComponents() { - java.awt.GridBagConstraints gridBagConstraints; - - showEdgesCheckbox = new javax.swing.JCheckBox(); - labelEdgeColor = new javax.swing.JLabel(); - edgeColorButton = new JColorButton(Color.BLACK, false, true); - sourceNodeColorCheckbox = new javax.swing.JCheckBox(); - selectionColorPanel = new javax.swing.JPanel(); - selectionColorCheckbox = new javax.swing.JCheckBox(); - edgeInSelectionColorChooser = new net.java.dev.colorchooser.ColorChooser(); - edgeOutSelectionColorChooser = new net.java.dev.colorchooser.ColorChooser(); - edgeBothSelectionColorChooser = new net.java.dev.colorchooser.ColorChooser(); - labelIn = new javax.swing.JLabel(); - labelOut = new javax.swing.JLabel(); - labelBoth = new javax.swing.JLabel(); - scalePanel = new javax.swing.JPanel(); - labelScale = new javax.swing.JLabel(); - scaleSlider = new javax.swing.JSlider(); - - showEdgesCheckbox.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N - showEdgesCheckbox.setText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, "EdgeSettingsPanel.showEdgesCheckbox.text")); // NOI18N - - labelEdgeColor.setText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, "EdgeSettingsPanel.labelEdgeColor.text")); // NOI18N - - edgeColorButton.setText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, "EdgeSettingsPanel.edgeColorButton.text")); // NOI18N - - sourceNodeColorCheckbox.setText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, "EdgeSettingsPanel.sourceNodeColorCheckbox.text")); // NOI18N - sourceNodeColorCheckbox.setBorder(null); - sourceNodeColorCheckbox.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); - sourceNodeColorCheckbox.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT); - sourceNodeColorCheckbox.setMargin(new java.awt.Insets(2, 0, 2, 2)); - - selectionColorPanel.setOpaque(false); - selectionColorPanel.setLayout(new java.awt.GridBagLayout()); - - selectionColorCheckbox.setText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, "EdgeSettingsPanel.selectionColorCheckbox.text")); // NOI18N - selectionColorCheckbox.setToolTipText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, "EdgeSettingsPanel.selectionColorCheckbox.toolTipText")); // NOI18N - selectionColorCheckbox.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); - selectionColorCheckbox.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT); - selectionColorCheckbox.setMaximumSize(new java.awt.Dimension(160, 18)); - selectionColorCheckbox.setMinimumSize(new java.awt.Dimension(160, 18)); - selectionColorCheckbox.setPreferredSize(new java.awt.Dimension(160, 18)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 0; - gridBagConstraints.gridwidth = 4; - gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; - gridBagConstraints.weightx = 1.0; - selectionColorPanel.add(selectionColorCheckbox, gridBagConstraints); - - edgeInSelectionColorChooser.setMinimumSize(new java.awt.Dimension(14, 14)); - edgeInSelectionColorChooser.setPreferredSize(new java.awt.Dimension(14, 14)); - edgeInSelectionColorChooser.setToolTipText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, "EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText")); // NOI18N - - javax.swing.GroupLayout edgeInSelectionColorChooserLayout = new javax.swing.GroupLayout(edgeInSelectionColorChooser); - edgeInSelectionColorChooser.setLayout(edgeInSelectionColorChooserLayout); - edgeInSelectionColorChooserLayout.setHorizontalGroup( - edgeInSelectionColorChooserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 12, Short.MAX_VALUE) - ); - edgeInSelectionColorChooserLayout.setVerticalGroup( - edgeInSelectionColorChooserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 12, Short.MAX_VALUE) - ); - - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 1; - gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 5); - selectionColorPanel.add(edgeInSelectionColorChooser, gridBagConstraints); - - edgeOutSelectionColorChooser.setMinimumSize(new java.awt.Dimension(14, 14)); - edgeOutSelectionColorChooser.setPreferredSize(new java.awt.Dimension(14, 14)); - edgeOutSelectionColorChooser.setToolTipText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, "EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText")); // NOI18N - - javax.swing.GroupLayout edgeOutSelectionColorChooserLayout = new javax.swing.GroupLayout(edgeOutSelectionColorChooser); - edgeOutSelectionColorChooser.setLayout(edgeOutSelectionColorChooserLayout); - edgeOutSelectionColorChooserLayout.setHorizontalGroup( - edgeOutSelectionColorChooserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 12, Short.MAX_VALUE) - ); - edgeOutSelectionColorChooserLayout.setVerticalGroup( - edgeOutSelectionColorChooserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 12, Short.MAX_VALUE) - ); - - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 2; - gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; - gridBagConstraints.weighty = 1.0; - gridBagConstraints.insets = new java.awt.Insets(5, 5, 0, 5); - selectionColorPanel.add(edgeOutSelectionColorChooser, gridBagConstraints); - - edgeBothSelectionColorChooser.setMinimumSize(new java.awt.Dimension(14, 14)); - edgeBothSelectionColorChooser.setPreferredSize(new java.awt.Dimension(14, 14)); - edgeBothSelectionColorChooser.setToolTipText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, "EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText")); // NOI18N - - javax.swing.GroupLayout edgeBothSelectionColorChooserLayout = new javax.swing.GroupLayout(edgeBothSelectionColorChooser); - edgeBothSelectionColorChooser.setLayout(edgeBothSelectionColorChooserLayout); - edgeBothSelectionColorChooserLayout.setHorizontalGroup( - edgeBothSelectionColorChooserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 12, Short.MAX_VALUE) - ); - edgeBothSelectionColorChooserLayout.setVerticalGroup( - edgeBothSelectionColorChooserLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 12, Short.MAX_VALUE) - ); - - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 3; - gridBagConstraints.gridy = 1; - gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; - gridBagConstraints.insets = new java.awt.Insets(0, 5, 0, 5); - selectionColorPanel.add(edgeBothSelectionColorChooser, gridBagConstraints); - - labelIn.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N - labelIn.setText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, "EdgeSettingsPanel.labelIn.text")); // NOI18N - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 1; - gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; - gridBagConstraints.insets = new java.awt.Insets(5, 10, 0, 0); - selectionColorPanel.add(labelIn, gridBagConstraints); - - labelOut.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N - labelOut.setText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, "EdgeSettingsPanel.labelOut.text")); // NOI18N - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 2; - gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTHWEST; - gridBagConstraints.weighty = 1.0; - gridBagConstraints.insets = new java.awt.Insets(7, 10, 0, 0); - selectionColorPanel.add(labelOut, gridBagConstraints); - - labelBoth.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N - labelBoth.setText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, "EdgeSettingsPanel.labelBoth.text")); // NOI18N - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 2; - gridBagConstraints.gridy = 1; - gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; - gridBagConstraints.insets = new java.awt.Insets(5, 5, 0, 0); - selectionColorPanel.add(labelBoth, gridBagConstraints); - - scalePanel.setOpaque(false); - scalePanel.setLayout(new java.awt.GridBagLayout()); - - labelScale.setText(org.openide.util.NbBundle.getMessage(EdgeSettingsPanel.class, "EdgeSettingsPanel.labelScale.text")); // NOI18N - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 0; - gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; - gridBagConstraints.insets = new java.awt.Insets(3, 5, 2, 0); - scalePanel.add(labelScale, gridBagConstraints); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 1; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.anchor = java.awt.GridBagConstraints.NORTH; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.weighty = 1.0; - scalePanel.add(scaleSlider, gridBagConstraints); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGap(19, 19, 19) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(labelEdgeColor) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(edgeColorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(sourceNodeColorCheckbox)) - .addGap(28, 28, 28) - .addComponent(scalePanel, javax.swing.GroupLayout.PREFERRED_SIZE, 130, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(selectionColorPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 176, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(showEdgesCheckbox))) - .addContainerGap(146, Short.MAX_VALUE)) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() - .addContainerGap() - .addComponent(showEdgesCheckbox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(labelEdgeColor)) - .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() - .addGap(32, 32, 32) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(edgeColorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(13, 13, 13) - .addComponent(sourceNodeColorCheckbox)) - .addComponent(scalePanel, javax.swing.GroupLayout.DEFAULT_SIZE, 61, Short.MAX_VALUE) - .addComponent(selectionColorPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 61, Short.MAX_VALUE)))) - .addContainerGap()) - ); - }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private net.java.dev.colorchooser.ColorChooser edgeBothSelectionColorChooser; - private javax.swing.JButton edgeColorButton; - private net.java.dev.colorchooser.ColorChooser edgeInSelectionColorChooser; - private net.java.dev.colorchooser.ColorChooser edgeOutSelectionColorChooser; - private javax.swing.JLabel labelBoth; - private javax.swing.JLabel labelEdgeColor; - private javax.swing.JLabel labelIn; - private javax.swing.JLabel labelOut; - private javax.swing.JLabel labelScale; - private javax.swing.JPanel scalePanel; - private javax.swing.JSlider scaleSlider; - private javax.swing.JCheckBox selectionColorCheckbox; - private javax.swing.JPanel selectionColorPanel; - private javax.swing.JCheckBox showEdgesCheckbox; - private javax.swing.JCheckBox sourceNodeColorCheckbox; - // End of variables declaration//GEN-END:variables -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/GlobalSettingsPanel.form b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/GlobalSettingsPanel.form deleted file mode 100644 index 8567404499..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/GlobalSettingsPanel.form +++ /dev/null @@ -1,139 +0,0 @@ - - -
              - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
              diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/GlobalSettingsPanel.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/GlobalSettingsPanel.java deleted file mode 100644 index 325cd517ce..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/GlobalSettingsPanel.java +++ /dev/null @@ -1,250 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.visualization.component; - -import java.awt.Color; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import org.gephi.ui.components.JColorButton; -import org.gephi.visualization.VizController; -import org.gephi.visualization.VizModel; -import org.gephi.visualization.apiimpl.GraphIO; - -/** - * - * @author Mathieu Bastian - */ -public class GlobalSettingsPanel extends javax.swing.JPanel { - - /** Creates new form GlobalSettingsPanel */ - public GlobalSettingsPanel() { - initComponents(); - } - - public void setup() { - VizModel vizModel = VizController.getInstance().getVizModel(); - vizModel.addPropertyChangeListener(new PropertyChangeListener() { - - @Override - public void propertyChange(PropertyChangeEvent evt) { - if (evt.getPropertyName().equals("init")) { - refreshSharedConfig(); - } else if (evt.getPropertyName().equals("backgroundColor")) { - refreshSharedConfig(); - } else if (evt.getPropertyName().equals("autoSelectNeighbor")) { - refreshSharedConfig(); - } else if (evt.getPropertyName().equals("lightenNonSelectedAuto")) { - refreshSharedConfig(); - } else if (evt.getPropertyName().equals("use3d")) { - refreshSharedConfig(); - } - } - }); - refreshSharedConfig(); - hightlightCheckBox.addItemListener(new ItemListener() { - - @Override - public void itemStateChanged(ItemEvent e) { - VizModel vizModel = VizController.getInstance().getVizModel(); - vizModel.setLightenNonSelectedAuto(hightlightCheckBox.isSelected()); - } - }); - ((JColorButton) backgroundColorButton).addPropertyChangeListener(JColorButton.EVENT_COLOR, new PropertyChangeListener() { - - @Override - public void propertyChange(PropertyChangeEvent evt) { - VizModel vizModel = VizController.getInstance().getVizModel(); - vizModel.setBackgroundColor(((JColorButton) backgroundColorButton).getColor()); - } - }); - autoSelectNeigborCheckbox.addItemListener(new ItemListener() { - - @Override - public void itemStateChanged(ItemEvent e) { - VizModel vizModel = VizController.getInstance().getVizModel(); - vizModel.setAutoSelectNeighbor(autoSelectNeigborCheckbox.isSelected()); - } - }); - zoomSlider.addChangeListener(new ChangeListener() { - - @Override - public void stateChanged(ChangeEvent e) { - int cam = (int) VizController.getInstance().getVizModel().getCameraDistance(); - if (zoomSlider.getValue() != cam && cam < zoomSlider.getMaximum()) { - GraphIO io = VizController.getInstance().getGraphIO(); - io.setCameraDistance(zoomSlider.getValue()); - } - } - }); - } - - private void refreshSharedConfig() { - VizModel vizModel = VizController.getInstance().getVizModel(); - setEnable(!vizModel.isDefaultModel()); - if (vizModel.isDefaultModel()) { - return; - } - if (autoSelectNeigborCheckbox.isSelected() != vizModel.isAutoSelectNeighbor()) { - autoSelectNeigborCheckbox.setSelected(vizModel.isAutoSelectNeighbor()); - } - ((JColorButton) backgroundColorButton).setColor(vizModel.getBackgroundColor()); - if (hightlightCheckBox.isSelected() != vizModel.isLightenNonSelectedAuto()) { - hightlightCheckBox.setSelected(vizModel.isLightenNonSelectedAuto()); - } - } - - private void setEnable(boolean enable) { - autoSelectNeigborCheckbox.setEnabled(enable); - backgroundColorButton.setEnabled(enable); - hightlightCheckBox.setEnabled(enable); - labelBackgroundColor.setEnabled(enable); - labelZoom.setEnabled(enable); - zoomSlider.setEnabled(enable); - } - - private void refreshZoom() { - int zoomValue = (int) VizController.getInstance().getVizModel().getCameraDistance(); - if (zoomSlider.getValue() != zoomValue) { - zoomSlider.setValue(zoomValue); - } - } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // //GEN-BEGIN:initComponents - private void initComponents() { - java.awt.GridBagConstraints gridBagConstraints; - - labelBackgroundColor = new javax.swing.JLabel(); - backgroundColorButton = new JColorButton(Color.BLACK); - hightlightCheckBox = new javax.swing.JCheckBox(); - autoSelectNeigborCheckbox = new javax.swing.JCheckBox(); - zoomPanel = new javax.swing.JPanel(); - labelZoom = new javax.swing.JLabel(); - zoomSlider = new javax.swing.JSlider(); - - labelBackgroundColor.setText(org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.labelBackgroundColor.text")); // NOI18N - - backgroundColorButton.setText(org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.backgroundColorButton.text")); // NOI18N - - hightlightCheckBox.setText(org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.hightlightCheckBox.text")); // NOI18N - hightlightCheckBox.setBorder(null); - hightlightCheckBox.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT); - hightlightCheckBox.setMargin(new java.awt.Insets(2, 0, 2, 2)); - - autoSelectNeigborCheckbox.setText(org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.autoSelectNeigborCheckbox.text")); // NOI18N - autoSelectNeigborCheckbox.setBorder(null); - autoSelectNeigborCheckbox.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT); - autoSelectNeigborCheckbox.setMargin(new java.awt.Insets(2, 0, 2, 2)); - - zoomPanel.setOpaque(false); - zoomPanel.setLayout(new java.awt.GridBagLayout()); - - labelZoom.setText(org.openide.util.NbBundle.getMessage(GlobalSettingsPanel.class, "GlobalSettingsPanel.labelZoom.text")); // NOI18N - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; - gridBagConstraints.insets = new java.awt.Insets(5, 5, 2, 0); - zoomPanel.add(labelZoom, gridBagConstraints); - - zoomSlider.setMaximum(10000); - zoomSlider.setValue(5000); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 1; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.weighty = 1.0; - zoomPanel.add(zoomSlider, gridBagConstraints); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(labelBackgroundColor) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(backgroundColorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(autoSelectNeigborCheckbox)) - .addGap(27, 27, 27) - .addComponent(zoomPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 147, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(28, 28, 28) - .addComponent(hightlightCheckBox) - .addGap(32, 32, 32)) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(hightlightCheckBox, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) - .addComponent(zoomPanel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(labelBackgroundColor, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(backgroundColorButton, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 24, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(autoSelectNeigborCheckbox, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)))) - .addContainerGap()) - ); - }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JCheckBox autoSelectNeigborCheckbox; - private javax.swing.JButton backgroundColorButton; - private javax.swing.JCheckBox hightlightCheckBox; - private javax.swing.JLabel labelBackgroundColor; - private javax.swing.JLabel labelZoom; - private javax.swing.JPanel zoomPanel; - private javax.swing.JSlider zoomSlider; - // End of variables declaration//GEN-END:variables -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/GraphTopComponent.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/GraphTopComponent.java index 1bc9682f75..23211f56b1 100644 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/GraphTopComponent.java +++ b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/GraphTopComponent.java @@ -39,23 +39,38 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.visualization.component; import java.awt.AWTEvent; import java.awt.BorderLayout; import java.awt.event.AWTEventListener; import java.awt.event.KeyEvent; +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; import javax.swing.JComponent; import javax.swing.JPanel; -import javax.swing.UIManager; +import javax.swing.SwingUtilities; +import org.gephi.desktop.visualization.collapse.CollapseGroup; +import org.gephi.desktop.visualization.collapse.CollapsePanel; +import org.gephi.desktop.visualization.collapse.EdgeGroup; +import org.gephi.desktop.visualization.collapse.EdgeLabelGroup; +import org.gephi.desktop.visualization.collapse.GlobalGroup; +import org.gephi.desktop.visualization.collapse.NodeGroup; +import org.gephi.desktop.visualization.collapse.NodeLabelGroup; +import org.gephi.desktop.visualization.collapse.VizExtendedBar; +import org.gephi.desktop.visualization.collapse.VizToolbar; +import org.gephi.desktop.visualization.selection.SelectionToolbar; +import org.gephi.desktop.visualization.tools.ActionsToolbar; +import org.gephi.desktop.visualization.tools.DesktopToolController; +import org.gephi.desktop.visualization.tools.PropertiesBar; import org.gephi.project.api.ProjectController; import org.gephi.project.api.Workspace; import org.gephi.project.api.WorkspaceListener; -import org.gephi.tools.api.ToolController; -import org.gephi.ui.utils.UIUtils; +import org.gephi.visualization.VizConfig; import org.gephi.visualization.VizController; -import org.gephi.visualization.opengl.AbstractEngine; -import org.gephi.visualization.swing.GraphDrawableImpl; +import org.gephi.visualization.VizModel; import org.netbeans.api.settings.ConvertAsProperties; import org.openide.awt.ActionID; import org.openide.awt.ActionReference; @@ -64,97 +79,86 @@ Development and Distribution License("CDDL") (collectively, the import org.openide.windows.TopComponent; @ConvertAsProperties(dtd = "-//org.gephi.visualization.component//Graph//EN", - autostore = false) + autostore = false) @TopComponent.Description(preferredID = "GraphTopComponent", - persistenceType = TopComponent.PERSISTENCE_ALWAYS) + iconBase = "VisualizationImpl/graph.svg", + persistenceType = TopComponent.PERSISTENCE_ALWAYS) @TopComponent.Registration(mode = "editor", openAtStartup = true, roles = {"overview"}) @ActionID(category = "Window", id = "org.gephi.visualization.component.GraphTopComponent") @ActionReference(path = "Menu/Window", position = 500) @TopComponent.OpenActionRegistration(displayName = "#CTL_GraphTopComponent", - preferredID = "GraphTopComponent") + preferredID = "GraphTopComponent") public class GraphTopComponent extends TopComponent implements AWTEventListener { - private AbstractEngine engine; - private VizBarController vizBarController; -// private Map keyActionMappings = new HashMap(); - private final transient GraphDrawableImpl drawable; + private final VizController controller; + private final SelectionToolbar selectionToolbar; + private final ActionsToolbar actionsToolbar; + private final JComponent toolbar; + private final PropertiesBar propertiesBar; + private final CollapseGroup[] groups; + // Variables declaration - do not modify + private CollapsePanel collapsePanel; + private javax.swing.JLabel waitingLabel; + // End of variables declaration - public GraphTopComponent() { - initComponents(); + private final ExecutorService vizExecutor; + public GraphTopComponent() { + controller = Lookup.getDefault().lookup(VizController.class); setName(NbBundle.getMessage(GraphTopComponent.class, "CTL_GraphTopComponent")); -// setToolTipText(NbBundle.getMessage(GraphTopComponent.class, "HINT_GraphTopComponent")); - - engine = VizController.getInstance().getEngine(); - - //Init - initCollapsePanel(); - initToolPanels(); - drawable = VizController.getInstance().getDrawable(); - - //Request component activation and therefore initialize JOGL2 component -// WindowManager.getDefault().invokeWhenUIReady(new Runnable() { -// @Override -// public void run() { -// open(); -// SwingUtilities.invokeLater(new Runnable() { -// @Override -// public void run() { -// requestActive(); -// add(drawable.getGraphComponent(), BorderLayout.CENTER); -// remove(waitingLabel); -// } -// }); -// } -// }); - initKeyEventContextMenuActionMappings(); - - add(drawable.getGraphComponent(), BorderLayout.CENTER); - remove(waitingLabel); - } + initComponents(); - private void initCollapsePanel() { - vizBarController = new VizBarController(); - if (VizController.getInstance().getVizConfig().isShowVizVar()) { - collapsePanel.init(vizBarController.getToolbar(), vizBarController.getExtendedBar(), false); - } else { - collapsePanel.setVisible(false); - } - } - private SelectionToolbar selectionToolbar; - private ActionsToolbar actionsToolbar; - private JComponent toolbar; - private JComponent propertiesBar; + // Start executor for viz engine tasks + vizExecutor = Executors.newSingleThreadExecutor(r -> { + Thread t = new Thread(r, "GraphTopComponent-VizExecutor"); + t.setDaemon(true); + return t; + }); - private void initToolPanels() { - final ToolController tc = Lookup.getDefault().lookup(ToolController.class); - if (tc != null) { - if (VizController.getInstance().getVizConfig().isToolbar()) { - JPanel westPanel = new JPanel(new BorderLayout(0, 0)); - if (UIUtils.isAquaLookAndFeel()) { - westPanel.setBackground(UIManager.getColor("NbExplorerView.background")); - } + // Create toolbars + selectionToolbar = new SelectionToolbar(); + actionsToolbar = new ActionsToolbar(); + propertiesBar = new PropertiesBar(); + + // Create the toolbar + final DesktopToolController tc = Lookup.getDefault().lookup(DesktopToolController.class); + toolbar = tc.getToolbar(); + JComponent toolsPropertiesBar = tc.getPropertiesBar(); + propertiesBar.addToolsPropertiesBar(toolsPropertiesBar); + + // Create collapse panels + groups = createCollapseGroups(); + SwingUtilities.invokeLater(() -> { + // Create the collapse panel + collapsePanel.init(new VizToolbar(groups), new VizExtendedBar(groups), false); + + // Create the toolbar + initToolPanels(); + }); - toolbar = tc.getToolbar(); - if (toolbar != null) { - westPanel.add(toolbar, BorderLayout.CENTER); - } - selectionToolbar = new SelectionToolbar(); - actionsToolbar = new ActionsToolbar(); + // Init the engine + initEngine(); - westPanel.add(selectionToolbar, BorderLayout.NORTH); - westPanel.add(actionsToolbar, BorderLayout.SOUTH); - add(westPanel, BorderLayout.WEST); - } + // Start listening to workspace changes + listenToWorkspaceEvents(); + } - if (VizController.getInstance().getVizConfig().isPropertiesbar()) { - propertiesBar = tc.getPropertiesBar(); - if (propertiesBar != null) { - add(propertiesBar, BorderLayout.NORTH); - } - } + private CollapseGroup[] createCollapseGroups() { + CollapseGroup[] groups = new CollapseGroup[5]; + groups[0] = new GlobalGroup(controller); + groups[1] = new NodeGroup(); + groups[2] = new NodeLabelGroup(); + groups[3] = new EdgeGroup(); + groups[4] = new EdgeLabelGroup(); + + // Disable all groups + for (CollapseGroup group : groups) { + group.disable(); } + return groups; + } + private void listenToWorkspaceEvents() { //Workspace events ProjectController projectController = Lookup.getDefault().lookup(ProjectController.class); projectController.addWorkspaceListener(new WorkspaceListener() { @@ -164,22 +168,12 @@ public void initialize(Workspace workspace) { @Override public void select(Workspace workspace) { - if (toolbar != null) { - toolbar.setEnabled(true); - } - if (propertiesBar != null) { - propertiesBar.setEnabled(true); - } - if (actionsToolbar != null) { - actionsToolbar.setEnabled(true); - } - if (selectionToolbar != null) { - selectionToolbar.setEnabled(true); - } + activateWorkspaceVizEngine(workspace); } @Override public void unselect(Workspace workspace) { + deactivateWorkspaceVizEngine(workspace); } @Override @@ -188,136 +182,181 @@ public void close(Workspace workspace) { @Override public void disable() { - if (toolbar != null) { + SwingUtilities.invokeLater(() -> { toolbar.setEnabled(false); - } - if (tc != null) { - tc.select(null);//Unselect any selected tool - } - if (propertiesBar != null) { propertiesBar.setEnabled(false); - } - if (actionsToolbar != null) { actionsToolbar.setEnabled(false); - } - if (selectionToolbar != null) { selectionToolbar.setEnabled(false); - } + }); } }); - boolean hasWorkspace = projectController.getCurrentWorkspace() != null; - if (toolbar != null) { - toolbar.setEnabled(hasWorkspace); + final boolean hasWorkspace = projectController.getCurrentWorkspace() != null; + if (hasWorkspace) { + activateWorkspaceVizEngine(projectController.getCurrentWorkspace()); } - if (propertiesBar != null) { - propertiesBar.setEnabled(hasWorkspace); - } - if (actionsToolbar != null) { - actionsToolbar.setEnabled(hasWorkspace); + } + + private void initEngine() { + vizExecutor.submit(this::doInitEngine); + } + + private void doInitEngine() { + controller.getCanvasManager().init(this); + SwingUtilities.invokeLater(() -> { + remove(waitingLabel); + }); + } + + private void deactivateWorkspaceVizEngine(final Workspace workspace) { + CompletableFuture.runAsync(() -> doDeactivateWorkspaceVizEngine(workspace), vizExecutor) + .whenComplete((v, ex) -> { + if (ex != null) { + ex.printStackTrace(); + } + }); + } + + private void doDeactivateWorkspaceVizEngine(final Workspace workspace) { + if (workspace == null) { + return; } - if (selectionToolbar != null) { - selectionToolbar.setEnabled(hasWorkspace); + VizModel vizModel = controller.getCanvasManager().unloadWorkspace(workspace); + SwingUtilities.invokeLater(() -> { + for (CollapseGroup group : groups) { + group.unsetup(vizModel); + } + selectionToolbar.unsetup(vizModel); + propertiesBar.unsetup(); + }); + } + + private void activateWorkspaceVizEngine(final Workspace workspace) { + CompletableFuture.runAsync(() -> doActivateWorkspaceVizEngine(workspace), vizExecutor) + .whenComplete((v, ex) -> { + if (ex != null) { + ex.printStackTrace(); + } + }); + } + + private void doActivateWorkspaceVizEngine(final Workspace workspace) { + if (workspace == null) { + return; } + VizModel vizModel = controller.getCanvasManager().loadWorkspace(workspace); + SwingUtilities.invokeLater(() -> { + toolbar.setEnabled(true); + propertiesBar.setEnabled(true); + actionsToolbar.setEnabled(true); + selectionToolbar.setEnabled(true); + + for (CollapseGroup group : groups) { + group.setup(vizModel); + } + selectionToolbar.setup(vizModel); + propertiesBar.setup(vizModel); + }); } - private void initKeyEventContextMenuActionMappings() { -// mapItems(Lookup.getDefault().lookupAll(GraphContextMenuItem.class).toArray(new GraphContextMenuItem[0])); + private void initToolPanels() { + JPanel westPanel = new JPanel(new BorderLayout(0, 0)); + westPanel.add(toolbar, BorderLayout.CENTER); + westPanel.add(selectionToolbar, BorderLayout.NORTH); + westPanel.add(actionsToolbar, BorderLayout.SOUTH); + add(propertiesBar, BorderLayout.NORTH); + + add(westPanel, BorderLayout.WEST); } -// -// private void mapItems(ContextMenuItemManipulator[] items) { -// Integer key; -// ContextMenuItemManipulator[] subItems; -// for (ContextMenuItemManipulator item : items) { -// key = item.getMnemonicKey(); -// if (key != null) { -// if (!keyActionMappings.containsKey(key)) { -// keyActionMappings.put(key, item); -// } -// } -// subItems = item.getSubItems(); -// if (subItems != null) { -// mapItems(subItems); -// } -// } -// } /** - * For attending Ctrl+Key events in graph window to launch context menu - * actions + * For attending Ctrl+Key events in graph window to launch context menu actions */ @Override public void eventDispatched(AWTEvent event) { KeyEvent evt = (KeyEvent) event; - if (evt.getID() == KeyEvent.KEY_RELEASED && (evt.getModifiersEx() & KeyEvent.CTRL_DOWN_MASK) == KeyEvent.CTRL_DOWN_MASK) { -// final ContextMenuItemManipulator item = keyActionMappings.get(evt.getKeyCode()); -// if (item != null) { -// ((GraphContextMenuItem) item).setup(eventBridge.getGraph(), eventBridge.getSelectedNodes()); -// if (item.isAvailable() && item.canExecute()) { -// DataLaboratoryHelper.getDefault().executeManipulator(item); -// } -// evt.consume(); -// } + if (VizConfig.isEnableContextMenu() && evt.getID() == KeyEvent.KEY_RELEASED + && (evt.getModifiersEx() & KeyEvent.CTRL_DOWN_MASK) == KeyEvent.CTRL_DOWN_MASK) { + //TODO, we currently don't support mnemonics execution without first the right click } } /** - * This method is called from within the constructor to initialize the form. - * WARNING: Do NOT modify this code. The content of this method is always - * regenerated by the Form Editor. + * This method is called from within the constructor to initialize the form. WARNING: Do NOT modify this code. The content of this method is always regenerated by the Form Editor. */ // //GEN-BEGIN:initComponents private void initComponents() { waitingLabel = new javax.swing.JLabel(); - collapsePanel = new org.gephi.visualization.component.CollapsePanel(); + collapsePanel = new CollapsePanel(); setLayout(new java.awt.BorderLayout()); waitingLabel.setBackground(new java.awt.Color(255, 255, 255)); - org.openide.awt.Mnemonics.setLocalizedText(waitingLabel, org.openide.util.NbBundle.getMessage(GraphTopComponent.class, "GraphTopComponent.waitingLabel.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(waitingLabel, org.openide.util.NbBundle + .getMessage(GraphTopComponent.class, "GraphTopComponent.waitingLabel.text")); // NOI18N waitingLabel.setVerticalAlignment(javax.swing.SwingConstants.TOP); add(waitingLabel, java.awt.BorderLayout.CENTER); add(collapsePanel, java.awt.BorderLayout.PAGE_END); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private org.gephi.visualization.component.CollapsePanel collapsePanel; - private javax.swing.JLabel waitingLabel; - // End of variables declaration//GEN-END:variables @Override - protected void componentShowing() { - super.componentShowing(); - engine.startDisplay(); + protected void componentActivated() { + super.componentActivated(); + // TODO, not supported yet +// java.awt.Toolkit.getDefaultToolkit().addAWTEventListener(this, AWTEvent.KEY_EVENT_MASK); + } + + @Override + protected void componentClosed() { + super.componentClosed(); + deactivateWorkspaceVizEngine( + Lookup.getDefault().lookup(ProjectController.class) + .getCurrentWorkspace() + ); + + // Note: we cannot shutdown the vizExecutor here because the TopComponent + // can be later reused/reactivated by the netbeans platform because persistenceType = PERSISTENCE_ALWAYS + } + public void shutdown() { + vizExecutor.shutdown(); } @Override protected void componentHidden() { super.componentHidden(); - engine.stopDisplay(); + deactivateWorkspaceVizEngine( + Lookup.getDefault().lookup(ProjectController.class) + .getCurrentWorkspace() + ); } @Override - public void componentOpened() { + protected void componentShowing() { + super.componentShowing(); + activateWorkspaceVizEngine( + Lookup.getDefault().lookup(ProjectController.class) + .getCurrentWorkspace() + ); } @Override - protected void componentActivated() { - java.awt.Toolkit.getDefaultToolkit().addAWTEventListener(this, AWTEvent.KEY_EVENT_MASK); + protected void componentOpened() { + super.componentOpened(); + activateWorkspaceVizEngine( + Lookup.getDefault().lookup(ProjectController.class) + .getCurrentWorkspace() + ); } @Override protected void componentDeactivated() { + super.componentDeactivated(); java.awt.Toolkit.getDefaultToolkit().removeAWTEventListener(this); } - @Override - public void componentClosed() { - engine.stopDisplay(); - } - void writeProperties(java.util.Properties p) { // better to version settings since initial version as advocated at // http://wiki.apidesign.org/wiki/PropertyFiles diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/LabelAttributesPanel.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/LabelAttributesPanel.java deleted file mode 100644 index 7f848b456a..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/LabelAttributesPanel.java +++ /dev/null @@ -1,293 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.component; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import javax.swing.ButtonModel; -import javax.swing.JCheckBox; -import net.miginfocom.swing.MigLayout; -import org.gephi.attribute.api.Column; -import org.gephi.attribute.api.Origin; -import org.gephi.graph.api.GraphController; -import org.gephi.visualization.text.TextModelImpl; -import org.openide.util.Lookup; - -/** - * - * @author Mathieu Bastian - */ -public class LabelAttributesPanel extends javax.swing.JPanel { - - //Settings - private ButtonModel selectedModel; - private boolean showProperties = true; - //Model - private TextModelImpl textModel; - private AttributesCheckBox[] nodeCheckBoxs; - private AttributesCheckBox[] edgeCheckBoxs; - - /** - * Creates new form LabelAttributesPanel - */ - public LabelAttributesPanel() { - initComponents(); - selectedModel = nodesToggleButton.getModel(); - elementButtonGroup.setSelected(selectedModel, true); - nodesToggleButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if (nodesToggleButton.isSelected()) { - selectedModel = nodesToggleButton.getModel(); - refresh(); - } - } - }); - edgesToggleButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if (edgesToggleButton.isSelected()) { - selectedModel = edgesToggleButton.getModel(); - refresh(); - } - } - }); - showPropertiesCheckbox.setSelected(showProperties); - showPropertiesCheckbox.addItemListener(new ItemListener() { - @Override - public void itemStateChanged(ItemEvent e) { - showProperties = showPropertiesCheckbox.isSelected(); - refresh(); - } - }); - } - - public void setup(TextModelImpl model) { - this.textModel = model; - refresh(); - } - - private void refresh() { - GraphController graphController = Lookup.getDefault().lookup(GraphController.class); - - List availableColumns = new ArrayList(); - List selectedColumns = new ArrayList(); - AttributesCheckBox[] target; - if (elementButtonGroup.getSelection() == nodesToggleButton.getModel()) { - for (Column c : graphController.getAttributeModel().getNodeTable()) { - if (c.getOrigin().equals(Origin.DATA)) { - availableColumns.add(c); - } else if (showProperties) { - if (c.getId().equalsIgnoreCase("label")) { - availableColumns.add(c); - } - } - } - - if (textModel.getNodeTextColumns() != null) { - selectedColumns = Arrays.asList(textModel.getNodeTextColumns()); - } - nodeCheckBoxs = new AttributesCheckBox[availableColumns.size()]; - target = nodeCheckBoxs; - } else { - for (Column c : graphController.getAttributeModel().getEdgeTable()) { - if (c.getOrigin().equals(Origin.DATA)) { - availableColumns.add(c); - } else if (showProperties) { - if (c.getId().equalsIgnoreCase("label")) { - availableColumns.add(c); - } - } - } - - if (textModel.getEdgeTextColumns() != null) { - selectedColumns = Arrays.asList(textModel.getEdgeTextColumns()); - } - edgeCheckBoxs = new AttributesCheckBox[availableColumns.size()]; - target = edgeCheckBoxs; - } - contentPanel.removeAll(); - contentPanel.setLayout(new MigLayout("", "[pref!]")); - for (int i = 0; i < availableColumns.size(); i++) { - Column column = availableColumns.get(i); - AttributesCheckBox c = new AttributesCheckBox(column, selectedColumns.contains(column)); - target[i] = c; - contentPanel.add(c.getCheckBox(), "wrap"); - } - contentPanel.revalidate(); - contentPanel.repaint(); - } - - public void unsetup() { - List nodeColumnsList = new ArrayList(); - List edgeColumnsList = new ArrayList(); - if (nodeCheckBoxs != null) { - for (AttributesCheckBox c : nodeCheckBoxs) { - if (c.isSelected()) { - nodeColumnsList.add(c.getColumn()); - } - } - } - if (edgeCheckBoxs != null) { - for (AttributesCheckBox c : edgeCheckBoxs) { - if (c.isSelected()) { - edgeColumnsList.add(c.getColumn()); - } - } - } - if (edgeColumnsList.size() > 0 || nodeColumnsList.size() > 0) { - textModel.setTextColumns(nodeColumnsList.toArray(new Column[0]), edgeColumnsList.toArray(new Column[0])); - } - } - - /** - * This method is called from within the constructor to initialize the form. - * WARNING: Do NOT modify this code. The content of this method is always - * regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // //GEN-BEGIN:initComponents - private void initComponents() { - java.awt.GridBagConstraints gridBagConstraints; - - elementButtonGroup = new javax.swing.ButtonGroup(); - controlPanel = new javax.swing.JPanel(); - nodesToggleButton = new javax.swing.JToggleButton(); - edgesToggleButton = new javax.swing.JToggleButton(); - contentScrollPane = new javax.swing.JScrollPane(); - contentPanel = new javax.swing.JPanel(); - labelComment = new javax.swing.JLabel(); - showPropertiesCheckbox = new javax.swing.JCheckBox(); - - controlPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.CENTER, 0, 0)); - - elementButtonGroup.add(nodesToggleButton); - nodesToggleButton.setText(org.openide.util.NbBundle.getMessage(LabelAttributesPanel.class, "LabelAttributesPanel.nodesToggleButton.text")); // NOI18N - controlPanel.add(nodesToggleButton); - - elementButtonGroup.add(edgesToggleButton); - edgesToggleButton.setText(org.openide.util.NbBundle.getMessage(LabelAttributesPanel.class, "LabelAttributesPanel.edgesToggleButton.text")); // NOI18N - controlPanel.add(edgesToggleButton); - - contentPanel.setLayout(new java.awt.GridLayout()); - contentScrollPane.setViewportView(contentPanel); - - labelComment.setText(org.openide.util.NbBundle.getMessage(LabelAttributesPanel.class, "LabelAttributesPanel.labelComment.text")); // NOI18N - - showPropertiesCheckbox.setText(org.openide.util.NbBundle.getMessage(LabelAttributesPanel.class, "LabelAttributesPanel.showPropertiesCheckbox.text")); // NOI18N - showPropertiesCheckbox.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); - showPropertiesCheckbox.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT); - showPropertiesCheckbox.setMargin(new java.awt.Insets(2, 2, 2, 0)); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(contentScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 313, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addComponent(controlPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 94, Short.MAX_VALUE) - .addComponent(showPropertiesCheckbox)) - .addComponent(labelComment)) - .addContainerGap()) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(controlPanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(13, 13, 13) - .addComponent(labelComment)) - .addComponent(showPropertiesCheckbox)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(contentScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 197, Short.MAX_VALUE) - .addContainerGap()) - ); - }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JPanel contentPanel; - private javax.swing.JScrollPane contentScrollPane; - private javax.swing.JPanel controlPanel; - private javax.swing.JToggleButton edgesToggleButton; - private javax.swing.ButtonGroup elementButtonGroup; - private javax.swing.JLabel labelComment; - private javax.swing.JToggleButton nodesToggleButton; - private javax.swing.JCheckBox showPropertiesCheckbox; - // End of variables declaration//GEN-END:variables - - private static class AttributesCheckBox { - - private JCheckBox checkBox; - private Column column; - - public AttributesCheckBox(Column column, boolean selected) { - checkBox = new JCheckBox(column.getTitle(), selected); - this.column = column; - } - - public void setSelected(boolean selected) { - checkBox.setSelected(selected); - } - - public boolean isSelected() { - return checkBox.isSelected(); - } - - public JCheckBox getCheckBox() { - return checkBox; - } - - public Column getColumn() { - return column; - } - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/LabelSettingsPanel.form b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/LabelSettingsPanel.form deleted file mode 100644 index c5c132a3ea..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/LabelSettingsPanel.form +++ /dev/null @@ -1,420 +0,0 @@ - - -
              - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/LabelSettingsPanel.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/LabelSettingsPanel.java deleted file mode 100644 index 39db1395fb..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/LabelSettingsPanel.java +++ /dev/null @@ -1,585 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.visualization.component; - -import com.connectina.swing.fontchooser.JFontChooser; -import java.awt.Color; -import java.awt.Font; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import javax.swing.DefaultComboBoxModel; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import org.gephi.ui.components.JColorButton; -import org.gephi.visualization.VizController; -import org.gephi.visualization.VizModel; -import org.gephi.visualization.text.ColorMode; -import org.gephi.visualization.text.SizeMode; -import org.gephi.visualization.text.TextManager; -import org.gephi.visualization.text.TextModelImpl; -import org.openide.DialogDescriptor; -import org.openide.DialogDisplayer; -import org.openide.NotifyDescriptor; -import org.openide.util.NbBundle; -import org.openide.windows.WindowManager; - -/** - * - * @author Mathieu Bastian - */ -public class LabelSettingsPanel extends javax.swing.JPanel { - - /** Creates new form LabelSettingsPanel */ - public LabelSettingsPanel() { - initComponents(); - - nodeFontButton.setFont(nodeFontButton.getFont().deriveFont(11)); - } - - public void setup() { - VizModel vizModel = VizController.getInstance().getVizModel(); - TextModelImpl model = vizModel.getTextModel(); - vizModel.addPropertyChangeListener(new PropertyChangeListener() { - - @Override - public void propertyChange(PropertyChangeEvent evt) { - if (evt.getPropertyName().equals("init")) { - refreshSharedConfig(); - } - } - }); - - //NodePanel - showNodeLabelsCheckbox.addItemListener(new ItemListener() { - - @Override - public void itemStateChanged(ItemEvent e) { - boolean value = showNodeLabelsCheckbox.isSelected(); - TextModelImpl model = VizController.getInstance().getVizModel().getTextModel(); - if (value != model.isShowNodeLabels()) { - model.setShowNodeLabels(value); - setEnable(true); - } - } - }); - nodeFontButton.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - TextModelImpl model = VizController.getInstance().getVizModel().getTextModel(); - Font font = JFontChooser.showDialog(WindowManager.getDefault().getMainWindow(), model.getNodeFont()); - if (font != null && font != model.getNodeFont()) { - model.setNodeFont(font); - } - } - }); - ((JColorButton) nodeColorButton).addPropertyChangeListener(JColorButton.EVENT_COLOR, new PropertyChangeListener() { - - @Override - public void propertyChange(PropertyChangeEvent evt) { - TextModelImpl model = VizController.getInstance().getVizModel().getTextModel(); - if (!model.getNodeColor().equals(((JColorButton) nodeColorButton).getColor())) { - model.setNodeColor(((JColorButton) nodeColorButton).getColor()); - } - - } - }); - nodeSizeSlider.addChangeListener(new ChangeListener() { - - @Override - public void stateChanged(ChangeEvent e) { - TextModelImpl model = VizController.getInstance().getVizModel().getTextModel(); - if (model.getNodeSizeFactor() != nodeSizeSlider.getValue() / 100f) { - model.setNodeSizeFactor(nodeSizeSlider.getValue() / 100f); - } - } - }); - - //EdgePanel - showEdgeLabelsCheckbox.addItemListener(new ItemListener() { - - @Override - public void itemStateChanged(ItemEvent e) { - boolean value = showEdgeLabelsCheckbox.isSelected(); - TextModelImpl model = VizController.getInstance().getVizModel().getTextModel(); - if (value != model.isShowEdgeLabels()) { - model.setShowEdgeLabels(value); - setEnable(true); - } - } - }); - edgeFontButton.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - TextModelImpl model = VizController.getInstance().getVizModel().getTextModel(); - Font font = JFontChooser.showDialog(WindowManager.getDefault().getMainWindow(), model.getEdgeFont()); - if (font != null && font != model.getEdgeFont()) { - model.setEdgeFont(font); - } - } - }); - ((JColorButton) edgeColorButton).addPropertyChangeListener(JColorButton.EVENT_COLOR, new PropertyChangeListener() { - - @Override - public void propertyChange(PropertyChangeEvent evt) { - TextModelImpl model = VizController.getInstance().getVizModel().getTextModel(); - if (!model.getEdgeColor().equals(((JColorButton) edgeColorButton).getColor())) { - model.setEdgeColor(((JColorButton) edgeColorButton).getColor()); - } - } - }); - edgeSizeSlider.addChangeListener(new ChangeListener() { - - @Override - public void stateChanged(ChangeEvent e) { - TextModelImpl model = VizController.getInstance().getVizModel().getTextModel(); - model.setEdgeSizeFactor(edgeSizeSlider.getValue() / 100f); - } - }); - - //General - final TextManager textManager = VizController.getInstance().getTextManager(); - final DefaultComboBoxModel sizeModeModel = new DefaultComboBoxModel(textManager.getSizeModes()); - sizeModeCombo.setModel(sizeModeModel); - final DefaultComboBoxModel colorModeModel = new DefaultComboBoxModel(textManager.getColorModes()); - colorModeCombo.setModel(colorModeModel); - sizeModeCombo.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - TextModelImpl model = VizController.getInstance().getVizModel().getTextModel(); - if (model.getSizeMode() != sizeModeModel.getSelectedItem()) { - model.setSizeMode((SizeMode) sizeModeModel.getSelectedItem()); - } - } - }); - colorModeCombo.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - TextModelImpl model = VizController.getInstance().getVizModel().getTextModel(); - if (model.getColorMode() != colorModeModel.getSelectedItem()) { - model.setColorMode((ColorMode) colorModeModel.getSelectedItem()); - } - } - }); - hideNonSelectedCheckbox.addItemListener(new ItemListener() { - - @Override - public void itemStateChanged(ItemEvent e) { - TextModelImpl model = VizController.getInstance().getVizModel().getTextModel(); - if (model.isSelectedOnly() != hideNonSelectedCheckbox.isSelected()) { - model.setSelectedOnly(hideNonSelectedCheckbox.isSelected()); - } - } - }); - - //Attributes - configureLabelsButton.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - TextModelImpl model = VizController.getInstance().getVizModel().getTextModel(); - LabelAttributesPanel panel = new LabelAttributesPanel(); - panel.setup(model); - DialogDescriptor dd = new DialogDescriptor(panel, NbBundle.getMessage(VizBarController.class, "LabelAttributesPanel.title"), true, NotifyDescriptor.OK_CANCEL_OPTION, null, null); - if (DialogDisplayer.getDefault().notify(dd).equals(NotifyDescriptor.OK_OPTION)) { - panel.unsetup(); - return; - } - } - }); - - //Evt - model.addChangeListener(new ChangeListener() { - - @Override - public void stateChanged(ChangeEvent e) { - refreshSharedConfig(); - } - }); - refreshSharedConfig(); - } - - private void refreshSharedConfig() { - VizModel vizModel = VizController.getInstance().getVizModel(); - setEnable(!vizModel.isDefaultModel()); - if (vizModel.isDefaultModel()) { - return; - } - TextModelImpl model = vizModel.getTextModel(); - - //node - nodeFontButton.setText(model.getNodeFont().getFontName() + ", " + model.getNodeFont().getSize()); - ((JColorButton) nodeColorButton).setColor(model.getNodeColor()); - if (showNodeLabelsCheckbox.isSelected() != model.isShowNodeLabels()) { - showNodeLabelsCheckbox.setSelected(model.isShowNodeLabels()); - } - if (nodeSizeSlider.getValue() / 100f != model.getNodeSizeFactor()) { - nodeSizeSlider.setValue((int) (model.getNodeSizeFactor() * 100f)); - } - - //edge - edgeFontButton.setText(model.getEdgeFont().getFontName() + ", " + model.getEdgeFont().getSize()); - ((JColorButton) edgeColorButton).setColor(model.getEdgeColor()); - if (showEdgeLabelsCheckbox.isSelected() != model.isShowEdgeLabels()) { - showEdgeLabelsCheckbox.setSelected(model.isShowEdgeLabels()); - } - if (edgeSizeSlider.getValue() / 100f != model.getEdgeSizeFactor()) { - edgeSizeSlider.setValue((int) (model.getEdgeSizeFactor() * 100f)); - } - - //general - if (hideNonSelectedCheckbox.isSelected() != model.isSelectedOnly()) { - hideNonSelectedCheckbox.setSelected(model.isSelectedOnly()); - } - if (sizeModeCombo.getSelectedItem() != model.getSizeMode()) { - sizeModeCombo.setSelectedItem(model.getSizeMode()); - } - if (colorModeCombo.getSelectedItem() != model.getColorMode()) { - colorModeCombo.setSelectedItem(model.getColorMode()); - } - } - - public void setEnable(boolean enable) { - showEdgeLabelsCheckbox.setEnabled(enable); - showNodeLabelsCheckbox.setEnabled(enable); - sizeModeCombo.setEnabled(enable); - colorModeCombo.setEnabled(enable); - hideNonSelectedCheckbox.setEnabled(enable); - labelColorMode.setEnabled(enable); - labelSizeMode.setEnabled(enable); - configureLabelsButton.setEnabled(enable); - - TextModelImpl model = VizController.getInstance().getVizModel().getTextModel(); - boolean edgeValue = model.isShowEdgeLabels(); - edgeFontButton.setEnabled(enable && edgeValue); - edgeColorButton.setEnabled(enable && edgeValue); - edgeSizeSlider.setEnabled(enable && edgeValue); - labelEdgeColor.setEnabled(enable && edgeValue); - labelEdgeFont.setEnabled(enable && edgeValue); - labelEdgeSize.setEnabled(enable && edgeValue); - boolean nodeValue = model.isShowNodeLabels(); - nodeFontButton.setEnabled(enable && nodeValue); - nodeColorButton.setEnabled(enable && nodeValue); - nodeSizeSlider.setEnabled(enable && nodeValue); - labelNodeColor.setEnabled(enable && nodeValue); - labelNodeFont.setEnabled(enable && nodeValue); - labelNodeSize.setEnabled(enable && nodeValue); - } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // //GEN-BEGIN:initComponents - private void initComponents() { - - nodePanel = new javax.swing.JPanel(); - showNodeLabelsCheckbox = new javax.swing.JCheckBox(); - labelNodeFont = new javax.swing.JLabel(); - nodeSizeSlider = new javax.swing.JSlider(); - labelNodeColor = new javax.swing.JLabel(); - nodeColorButton = new JColorButton(Color.BLACK); - labelNodeSize = new javax.swing.JLabel(); - nodeFontButton = new javax.swing.JButton(); - jSeparator1 = new javax.swing.JSeparator(); - edgePanel = new javax.swing.JPanel(); - showEdgeLabelsCheckbox = new javax.swing.JCheckBox(); - labelEdgeFont = new javax.swing.JLabel(); - edgeFontButton = new javax.swing.JButton(); - labelEdgeColor = new javax.swing.JLabel(); - edgeColorButton = new JColorButton(Color.BLACK); - edgeSizeSlider = new javax.swing.JSlider(); - labelEdgeSize = new javax.swing.JLabel(); - jSeparator2 = new javax.swing.JSeparator(); - labelSizeMode = new javax.swing.JLabel(); - sizeModeCombo = new javax.swing.JComboBox(); - labelColorMode = new javax.swing.JLabel(); - colorModeCombo = new javax.swing.JComboBox(); - hideNonSelectedCheckbox = new javax.swing.JCheckBox(); - configureLabelsButton = new javax.swing.JButton(); - - nodePanel.setOpaque(false); - - showNodeLabelsCheckbox.setText(org.openide.util.NbBundle.getMessage(LabelSettingsPanel.class, "LabelSettingsPanel.showNodeLabelsCheckbox.text")); // NOI18N - showNodeLabelsCheckbox.setBorder(null); - showNodeLabelsCheckbox.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); - showNodeLabelsCheckbox.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT); - showNodeLabelsCheckbox.setMargin(new java.awt.Insets(2, 0, 2, 2)); - - labelNodeFont.setText(org.openide.util.NbBundle.getMessage(LabelSettingsPanel.class, "LabelSettingsPanel.labelNodeFont.text")); // NOI18N - labelNodeFont.setMaximumSize(new java.awt.Dimension(60, 15)); - - labelNodeColor.setText(org.openide.util.NbBundle.getMessage(LabelSettingsPanel.class, "LabelSettingsPanel.labelNodeColor.text")); // NOI18N - - nodeColorButton.setText(org.openide.util.NbBundle.getMessage(LabelSettingsPanel.class, "LabelSettingsPanel.nodeColorButton.text")); // NOI18N - nodeColorButton.setMargin(new java.awt.Insets(1, 0, 1, 0)); - - labelNodeSize.setText(org.openide.util.NbBundle.getMessage(LabelSettingsPanel.class, "LabelSettingsPanel.labelNodeSize.text")); // NOI18N - - nodeFontButton.setText(org.openide.util.NbBundle.getMessage(LabelSettingsPanel.class, "LabelSettingsPanel.nodeFontButton.text")); // NOI18N - - javax.swing.GroupLayout nodePanelLayout = new javax.swing.GroupLayout(nodePanel); - nodePanel.setLayout(nodePanelLayout); - nodePanelLayout.setHorizontalGroup( - nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(nodePanelLayout.createSequentialGroup() - .addContainerGap() - .addComponent(showNodeLabelsCheckbox, javax.swing.GroupLayout.PREFERRED_SIZE, 97, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(163, Short.MAX_VALUE)) - .addGroup(nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(nodePanelLayout.createSequentialGroup() - .addGap(27, 27, 27) - .addGroup(nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addGroup(nodePanelLayout.createSequentialGroup() - .addComponent(labelNodeSize) - .addGap(18, 18, 18) - .addComponent(nodeSizeSlider, 0, 0, Short.MAX_VALUE)) - .addGroup(nodePanelLayout.createSequentialGroup() - .addComponent(labelNodeFont, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(nodeFontButton) - .addGap(23, 23, 23) - .addComponent(labelNodeColor) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(nodeColorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addContainerGap())) - ); - nodePanelLayout.setVerticalGroup( - nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(nodePanelLayout.createSequentialGroup() - .addContainerGap() - .addComponent(showNodeLabelsCheckbox) - .addContainerGap(112, Short.MAX_VALUE)) - .addGroup(nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(nodePanelLayout.createSequentialGroup() - .addGap(31, 31, 31) - .addGroup(nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(labelNodeFont, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelNodeColor) - .addComponent(nodeColorButton) - .addComponent(nodeFontButton)) - .addGroup(nodePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(nodePanelLayout.createSequentialGroup() - .addGap(15, 15, 15) - .addComponent(labelNodeSize)) - .addGroup(nodePanelLayout.createSequentialGroup() - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(nodeSizeSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addContainerGap(50, Short.MAX_VALUE))) - ); - - jSeparator1.setOrientation(javax.swing.SwingConstants.VERTICAL); - - edgePanel.setOpaque(false); - - showEdgeLabelsCheckbox.setText(org.openide.util.NbBundle.getMessage(LabelSettingsPanel.class, "LabelSettingsPanel.showEdgeLabelsCheckbox.text")); // NOI18N - showEdgeLabelsCheckbox.setBorder(null); - showEdgeLabelsCheckbox.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); - showEdgeLabelsCheckbox.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT); - showEdgeLabelsCheckbox.setMargin(new java.awt.Insets(2, 0, 2, 2)); - - labelEdgeFont.setText(org.openide.util.NbBundle.getMessage(LabelSettingsPanel.class, "LabelSettingsPanel.labelEdgeFont.text")); // NOI18N - labelEdgeFont.setMaximumSize(new java.awt.Dimension(60, 15)); - - edgeFontButton.setText(org.openide.util.NbBundle.getMessage(LabelSettingsPanel.class, "LabelSettingsPanel.edgeFontButton.text")); // NOI18N - - labelEdgeColor.setText(org.openide.util.NbBundle.getMessage(LabelSettingsPanel.class, "LabelSettingsPanel.labelEdgeColor.text")); // NOI18N - - edgeColorButton.setText(org.openide.util.NbBundle.getMessage(LabelSettingsPanel.class, "LabelSettingsPanel.edgeColorButton.text")); // NOI18N - edgeColorButton.setMargin(new java.awt.Insets(1, 0, 1, 0)); - - labelEdgeSize.setText(org.openide.util.NbBundle.getMessage(LabelSettingsPanel.class, "LabelSettingsPanel.labelEdgeSize.text")); // NOI18N - - javax.swing.GroupLayout edgePanelLayout = new javax.swing.GroupLayout(edgePanel); - edgePanel.setLayout(edgePanelLayout); - edgePanelLayout.setHorizontalGroup( - edgePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(edgePanelLayout.createSequentialGroup() - .addContainerGap() - .addGroup(edgePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(edgePanelLayout.createSequentialGroup() - .addGap(17, 17, 17) - .addGroup(edgePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addGroup(edgePanelLayout.createSequentialGroup() - .addComponent(labelEdgeSize) - .addGap(18, 18, 18) - .addComponent(edgeSizeSlider, 0, 0, Short.MAX_VALUE)) - .addGroup(edgePanelLayout.createSequentialGroup() - .addComponent(labelEdgeFont, javax.swing.GroupLayout.PREFERRED_SIZE, 32, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(edgeFontButton) - .addGap(23, 23, 23) - .addComponent(labelEdgeColor) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(edgeColorButton, javax.swing.GroupLayout.PREFERRED_SIZE, 26, javax.swing.GroupLayout.PREFERRED_SIZE)))) - .addComponent(showEdgeLabelsCheckbox, javax.swing.GroupLayout.PREFERRED_SIZE, 97, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - edgePanelLayout.setVerticalGroup( - edgePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(edgePanelLayout.createSequentialGroup() - .addContainerGap() - .addComponent(showEdgeLabelsCheckbox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(edgePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(labelEdgeFont, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelEdgeColor) - .addComponent(edgeColorButton) - .addComponent(edgeFontButton)) - .addGroup(edgePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(edgePanelLayout.createSequentialGroup() - .addGap(15, 15, 15) - .addComponent(labelEdgeSize)) - .addGroup(edgePanelLayout.createSequentialGroup() - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(edgeSizeSlider, javax.swing.GroupLayout.PREFERRED_SIZE, 34, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addContainerGap(51, Short.MAX_VALUE)) - ); - - jSeparator2.setOrientation(javax.swing.SwingConstants.VERTICAL); - - labelSizeMode.setText(org.openide.util.NbBundle.getMessage(LabelSettingsPanel.class, "LabelSettingsPanel.labelSizeMode.text")); // NOI18N - - sizeModeCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); - - labelColorMode.setText(org.openide.util.NbBundle.getMessage(LabelSettingsPanel.class, "LabelSettingsPanel.labelColorMode.text")); // NOI18N - - colorModeCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); - - hideNonSelectedCheckbox.setText(org.openide.util.NbBundle.getMessage(LabelSettingsPanel.class, "LabelSettingsPanel.hideNonSelectedCheckbox.text")); // NOI18N - hideNonSelectedCheckbox.setBorder(null); - hideNonSelectedCheckbox.setHorizontalTextPosition(javax.swing.SwingConstants.LEFT); - hideNonSelectedCheckbox.setMargin(new java.awt.Insets(2, 0, 2, 2)); - - configureLabelsButton.setFont(new java.awt.Font("Tahoma", 0, 10)); - configureLabelsButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/visualization/component/configureLabels.png"))); // NOI18N - configureLabelsButton.setText(org.openide.util.NbBundle.getMessage(LabelSettingsPanel.class, "LabelSettingsPanel.configureLabelsButton.text")); // NOI18N - configureLabelsButton.setBorder(null); - configureLabelsButton.setMargin(new java.awt.Insets(2, 7, 2, 7)); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(nodePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(edgePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(jSeparator2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(hideNonSelectedCheckbox) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(labelColorMode) - .addComponent(labelSizeMode)) - .addGap(10, 10, 10) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(colorModeCombo, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(sizeModeCombo, 0, 91, Short.MAX_VALUE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 31, Short.MAX_VALUE) - .addComponent(configureLabelsButton, javax.swing.GroupLayout.PREFERRED_SIZE, 93, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addContainerGap()) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jSeparator1, javax.swing.GroupLayout.DEFAULT_SIZE, 136, Short.MAX_VALUE) - .addComponent(nodePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(edgePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jSeparator2, javax.swing.GroupLayout.DEFAULT_SIZE, 136, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(sizeModeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelSizeMode)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(colorModeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelColorMode)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(hideNonSelectedCheckbox) - .addContainerGap(44, Short.MAX_VALUE)) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(configureLabelsButton, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE) - .addContainerGap(84, Short.MAX_VALUE)) - ); - }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JComboBox colorModeCombo; - private javax.swing.JButton configureLabelsButton; - private javax.swing.JButton edgeColorButton; - private javax.swing.JButton edgeFontButton; - private javax.swing.JPanel edgePanel; - private javax.swing.JSlider edgeSizeSlider; - private javax.swing.JCheckBox hideNonSelectedCheckbox; - private javax.swing.JSeparator jSeparator1; - private javax.swing.JSeparator jSeparator2; - private javax.swing.JLabel labelColorMode; - private javax.swing.JLabel labelEdgeColor; - private javax.swing.JLabel labelEdgeFont; - private javax.swing.JLabel labelEdgeSize; - private javax.swing.JLabel labelNodeColor; - private javax.swing.JLabel labelNodeFont; - private javax.swing.JLabel labelNodeSize; - private javax.swing.JLabel labelSizeMode; - private javax.swing.JButton nodeColorButton; - private javax.swing.JButton nodeFontButton; - private javax.swing.JPanel nodePanel; - private javax.swing.JSlider nodeSizeSlider; - private javax.swing.JCheckBox showEdgeLabelsCheckbox; - private javax.swing.JCheckBox showNodeLabelsCheckbox; - private javax.swing.JComboBox sizeModeCombo; - // End of variables declaration//GEN-END:variables -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/NodeSettingsPanel.form b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/NodeSettingsPanel.form deleted file mode 100644 index 424ad5a595..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/NodeSettingsPanel.form +++ /dev/null @@ -1,76 +0,0 @@ - - -
              - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
              diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/NodeSettingsPanel.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/NodeSettingsPanel.java deleted file mode 100644 index ea0990290f..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/NodeSettingsPanel.java +++ /dev/null @@ -1,203 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.component; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import javax.swing.DefaultComboBoxModel; -import org.gephi.visualization.VizController; -import org.gephi.visualization.VizModel; -import org.gephi.visualization.api.initializer.Modeler; -import org.gephi.visualization.model.ModelClass; -import org.gephi.visualization.model.node.NodeModeler; - -/** - * - * @author Mathieu Bastian - */ -public class NodeSettingsPanel extends javax.swing.JPanel { - - /** - * Creates new form NodeSettingsPanel - */ - public NodeSettingsPanel() { - initComponents(); - } - - public void setup() { - VizModel vizModel = VizController.getInstance().getVizModel(); - adjustTextCheckbox.setSelected(vizModel.isAdjustByText()); - adjustTextCheckbox.addItemListener(new ItemListener() { - @Override - public void itemStateChanged(ItemEvent e) { - VizModel vizModel = VizController.getInstance().getVizModel(); - vizModel.setAdjustByText(adjustTextCheckbox.isSelected()); - } - }); - - final DefaultComboBoxModel comboModel = new DefaultComboBoxModel(); - final ModelClass nodeClass = VizController.getInstance().getModelClassLibrary().getNodeClass(); - for (Modeler modeler : nodeClass.getModelers()) { - comboModel.addElement(modeler); - } - comboModel.setSelectedItem(nodeClass.getCurrentModeler()); - shapeCombo.setModel(comboModel); - shapeCombo.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if (nodeClass.getCurrentModeler() == comboModel.getSelectedItem()) { - return; - } - VizModel vizModel = VizController.getInstance().getVizModel(); - NodeModeler modeler = (NodeModeler) comboModel.getSelectedItem(); - if (modeler.is3d() && !vizModel.isUse3d()) { -// String msg = NbBundle.getMessage(NodeSettingsPanel.class, "NodeSettingsPanel.defaultShape.message3d"); -// if (JOptionPane.showConfirmDialog(WindowManager.getDefault().getMainWindow(), msg, NbBundle.getMessage(NodeSettingsPanel.class, "NodeSettingsPanel.defaultShape.message.title"), JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { - //enable 3d - vizModel.setUse3d(true); - nodeClass.setCurrentModeler(modeler); -// } - - } else if (!modeler.is3d() && vizModel.isUse3d()) { -// String msg = NbBundle.getMessage(NodeSettingsPanel.class, "NodeSettingsPanel.defaultShape.message2d"); -// if (JOptionPane.showConfirmDialog(WindowManager.getDefault().getMainWindow(), msg, NbBundle.getMessage(NodeSettingsPanel.class, "NodeSettingsPanel.defaultShape.message.title"), JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) { - //disable 3d - vizModel.setUse3d(false); - nodeClass.setCurrentModeler(modeler); -// } - } else { - nodeClass.setCurrentModeler(modeler); - } - } - }); - - vizModel.addPropertyChangeListener(new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - if (evt.getPropertyName().equals("nodeModeler")) { - refreshSharedConfig(); - } else if (evt.getPropertyName().equals("init")) { - refreshSharedConfig(); - } else if (evt.getPropertyName().equals("adjustByText")) { - refreshSharedConfig(); - } - } - }); - refreshSharedConfig(); - } - - private void refreshSharedConfig() { - VizModel vizModel = VizController.getInstance().getVizModel(); - setEnable(!vizModel.isDefaultModel()); - if (vizModel.isDefaultModel()) { - return; - } - final ModelClass nodeClass = VizController.getInstance().getModelClassLibrary().getNodeClass(); - if (shapeCombo.getSelectedItem() != nodeClass.getCurrentModeler()) { - shapeCombo.setSelectedItem(nodeClass.getCurrentModeler()); - } - if (adjustTextCheckbox.isSelected() != vizModel.isAdjustByText()) { - adjustTextCheckbox.setSelected(vizModel.isAdjustByText()); - } - } - - public void setEnable(boolean enable) { - labelShape.setEnabled(enable); - adjustTextCheckbox.setEnabled(enable); - shapeCombo.setEnabled(enable); - } - - /** - * This method is called from within the constructor to initialize the form. - * WARNING: Do NOT modify this code. The content of this method is always - * regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // //GEN-BEGIN:initComponents - private void initComponents() { - - labelShape = new javax.swing.JLabel(); - adjustTextCheckbox = new javax.swing.JCheckBox(); - shapeCombo = new javax.swing.JComboBox(); - - labelShape.setText(org.openide.util.NbBundle.getMessage(NodeSettingsPanel.class, "NodeSettingsPanel.labelShape.text")); // NOI18N - - adjustTextCheckbox.setText(org.openide.util.NbBundle.getMessage(NodeSettingsPanel.class, "NodeSettingsPanel.adjustTextCheckbox.text")); // NOI18N - - shapeCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" })); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(labelShape) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(shapeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, 114, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addComponent(adjustTextCheckbox)) - .addContainerGap(358, Short.MAX_VALUE)) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(labelShape) - .addComponent(shapeCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(adjustTextCheckbox) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JCheckBox adjustTextCheckbox; - private javax.swing.JLabel labelShape; - private javax.swing.JComboBox shapeCombo; - // End of variables declaration//GEN-END:variables -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/SelectionPanel.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/SelectionPanel.java deleted file mode 100644 index 833d7f7f7e..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/SelectionPanel.java +++ /dev/null @@ -1,56 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ - -package org.gephi.visualization.component; - -import javax.swing.JPanel; - -/** - * - * @author Mathieu Bastian - */ -public class SelectionPanel extends JPanel { - - public SelectionPanel() { - - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/SelectionToolbar.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/SelectionToolbar.java deleted file mode 100644 index 91951077c8..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/SelectionToolbar.java +++ /dev/null @@ -1,176 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.visualization.component; - -import java.awt.Component; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import javax.swing.AbstractButton; -import javax.swing.BorderFactory; -import javax.swing.ButtonGroup; -import javax.swing.ImageIcon; -import javax.swing.JButton; -import javax.swing.JToggleButton; -import javax.swing.JToolBar; -import javax.swing.SwingUtilities; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import org.gephi.ui.utils.UIUtils; -import org.gephi.visualization.VizController; -import org.gephi.visualization.api.selection.SelectionManager; -import org.openide.util.NbBundle; - -/** - * - * @author Mathieu Bastian - */ -public class SelectionToolbar extends JToolBar { - - private ButtonGroup buttonGroup; - - public SelectionToolbar() { - initDesign(); - buttonGroup = new ButtonGroup(); - initContent(); - } - - private void initContent() { - - //Mouse - final JToggleButton mouseButton = new JToggleButton(new ImageIcon(getClass().getResource("/org/gephi/visualization/component/mouse.png"))); - mouseButton.setToolTipText(NbBundle.getMessage(SelectionToolbar.class, "SelectionToolbar.mouse.tooltip")); - mouseButton.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - if (mouseButton.isSelected()) { - VizController.getInstance().getSelectionManager().setDirectMouseSelection(); - } - } - }); - add(mouseButton); - - //Rectangle - final JToggleButton rectangleButton = new JToggleButton(new ImageIcon(getClass().getResource("/org/gephi/visualization/component/rectangle.png"))); - rectangleButton.setToolTipText(NbBundle.getMessage(SelectionToolbar.class, "SelectionToolbar.rectangle.tooltip")); - rectangleButton.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - if (rectangleButton.isSelected()) { - VizController.getInstance().getSelectionManager().setRectangleSelection(); - } - } - }); - add(rectangleButton); - - //Drag - final JToggleButton dragButton = new JToggleButton(new ImageIcon(getClass().getResource("/org/gephi/visualization/component/hand.png"))); - dragButton.setToolTipText(NbBundle.getMessage(SelectionToolbar.class, "SelectionToolbar.drag.tooltip")); - dragButton.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - if (dragButton.isSelected()) { - VizController.getInstance().getSelectionManager().setDraggingMouseSelection(); - } - } - }); - add(dragButton); - addSeparator(); - - buttonGroup.setSelected(rectangleButton.getModel(), VizController.getInstance().getVizConfig().isRectangleSelection()); - buttonGroup.setSelected(mouseButton.getModel(), !VizController.getInstance().getVizConfig().isRectangleSelection()); - buttonGroup.setSelected(dragButton.getModel(), VizController.getInstance().getVizConfig().isDraggingEnable()); - - //Init events - VizController.getInstance().getSelectionManager().addChangeListener(new ChangeListener() { - - @Override - public void stateChanged(ChangeEvent e) { - SelectionManager selectionManager = VizController.getInstance().getSelectionManager(); - if (selectionManager.isBlocked()) { - buttonGroup.clearSelection(); - } else if (!selectionManager.isSelectionEnabled()) { - buttonGroup.clearSelection(); - } else if (selectionManager.isDirectMouseSelection()) { - if (!buttonGroup.isSelected(mouseButton.getModel())) { - buttonGroup.setSelected(mouseButton.getModel(), true); - } - } - } - }); - } - - private void initDesign() { - setFloatable(false); - setOrientation(JToolBar.VERTICAL); - putClientProperty("JToolBar.isRollover", Boolean.TRUE); //NOI18N - setOpaque(false); - setBorder(BorderFactory.createEmptyBorder(0, 2, 0, 2)); - } - - @Override - public void setEnabled(final boolean enabled) { - SwingUtilities.invokeLater(new Runnable() { - - @Override - public void run() { - for (Component c : getComponents()) { - c.setEnabled(enabled); - } - } - }); - } - - @Override - public Component add(Component comp) { - if (comp instanceof JButton) { - UIUtils.fixButtonUI((JButton) comp); - } - if (comp instanceof AbstractButton) { - buttonGroup.add((AbstractButton) comp); - } - - return super.add(comp); - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/VizBarController.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/VizBarController.java deleted file mode 100644 index a987fbf7b9..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/VizBarController.java +++ /dev/null @@ -1,592 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.component; - -import com.connectina.swing.fontchooser.JFontChooser; -import java.awt.Color; -import java.awt.Dimension; -import java.awt.Font; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import javax.swing.JButton; -import javax.swing.JComponent; -import javax.swing.JMenuItem; -import javax.swing.JPopupMenu; -import javax.swing.JSlider; -import javax.swing.JToggleButton; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import net.java.dev.colorchooser.ColorChooser; -import org.gephi.ui.components.JColorBlackWhiteSwitcher; -import org.gephi.ui.components.JColorButton; -import org.gephi.ui.components.JDropDownButton; -import org.gephi.ui.components.JPopupButton; -import org.gephi.visualization.VizController; -import org.gephi.visualization.VizModel; -import org.gephi.visualization.text.ColorMode; -import org.gephi.visualization.text.SizeMode; -import org.gephi.visualization.text.TextManager; -import org.gephi.visualization.text.TextModelImpl; -import org.openide.DialogDescriptor; -import org.openide.DialogDisplayer; -import org.openide.NotifyDescriptor; -import org.openide.util.NbBundle; -import org.openide.windows.WindowManager; - -/** - * - * @author Mathieu Bastian - */ -public class VizBarController { - - private VizToolbarGroup[] groups; - private VizToolbar toolbar; - private VizExtendedBar extendedBar; - - public VizBarController() { - createDefaultGroups(); - } - - private void createDefaultGroups() { - groups = new VizToolbarGroup[4]; - - groups[0] = new GlobalGroupBar(); - groups[1] = new NodeGroupBar(); - groups[2] = new EdgeGroupBar(); - groups[3] = new LabelGroupBar(); - - VizModel model = VizController.getInstance().getVizModel(); - model.addPropertyChangeListener(new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - if (evt.getPropertyName().equals("init")) { - VizModel model = VizController.getInstance().getVizModel(); - toolbar.setEnable(!model.isDefaultModel()); - ((NodeGroupBar) groups[1]).setModelValues(model); - ((EdgeGroupBar) groups[2]).setModelValues(model); - ((LabelGroupBar) groups[3]).setModelValues(model); - } - } - }); - } - - public VizToolbar getToolbar() { - VizModel model = VizController.getInstance().getVizModel(); - toolbar = new VizToolbar(groups); - toolbar.setEnable(!model.isDefaultModel()); - return toolbar; - } - - public VizExtendedBar getExtendedBar() { - extendedBar = new VizExtendedBar(groups); - return extendedBar; - } - - private static class GlobalGroupBar implements VizToolbarGroup { - - @Override - public String getName() { - return NbBundle.getMessage(VizBarController.class, "VizToolbar.Global.groupBarTitle"); - } - - @Override - public JComponent[] getToolbarComponents() { - JComponent[] components = new JComponent[2]; - - //Background color - VizModel vizModel = VizController.getInstance().getVizModel(); - final JButton backgroundColorButton = new JColorBlackWhiteSwitcher(vizModel.getBackgroundColor()); - backgroundColorButton.setToolTipText(NbBundle.getMessage(VizBarController.class, "VizToolbar.Global.background")); - backgroundColorButton.addPropertyChangeListener(JColorButton.EVENT_COLOR, new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - VizModel vizModel = VizController.getInstance().getVizModel(); - Color backgroundColor = ((JColorBlackWhiteSwitcher) backgroundColorButton).getColor(); - vizModel.setBackgroundColor(backgroundColor); - - TextModelImpl textModel = VizController.getInstance().getVizModel().getTextModel(); - boolean isDarkBackground = (backgroundColor.getRed() + backgroundColor.getGreen() + backgroundColor.getBlue()) / 3 < 128; - textModel.setNodeColor(isDarkBackground ? Color.WHITE : Color.BLACK); - } - }); - vizModel.addPropertyChangeListener(new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - if (evt.getPropertyName().equals("backgroundColor")) { - VizModel vizModel = VizController.getInstance().getVizModel(); - if (!(((JColorBlackWhiteSwitcher) backgroundColorButton).getColor()).equals(vizModel.getBackgroundColor())) { - ((JColorBlackWhiteSwitcher) backgroundColorButton).setColor(vizModel.getBackgroundColor()); - } - } - } - }); - components[0] = backgroundColorButton; - - //Screenshots - JPopupMenu screenshotPopup = new JPopupMenu(); - JMenuItem configureScreenshotItem = new JMenuItem(NbBundle.getMessage(VizBarController.class, "VizToolbar.Global.screenshot.configure")); - configureScreenshotItem.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - VizController.getInstance().getScreenshotMaker().configure(); - } - }); - screenshotPopup.add(configureScreenshotItem); - final JButton screenshotButton = new JDropDownButton(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/visualization/component/screenshot.png")), screenshotPopup); - screenshotButton.setToolTipText(NbBundle.getMessage(VizBarController.class, "VizToolbar.Global.screenshot")); - screenshotButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - VizController.getInstance().getScreenshotMaker().takeScreenshot(); - } - }); - components[1] = screenshotButton; - - return components; - } - - @Override - public JComponent getExtendedComponent() { - GlobalSettingsPanel panel = new GlobalSettingsPanel(); - panel.setup(); - return panel; - } - - @Override - public boolean hasToolbar() { - return true; - } - - @Override - public boolean hasExtended() { - return true; - } - } - - private static class NodeGroupBar implements VizToolbarGroup { - - JComponent[] components = new JComponent[1]; - - @Override - public String getName() { - return NbBundle.getMessage(VizBarController.class, "VizToolbar.Nodes.groupBarTitle"); - } - - public void setModelValues(VizModel vizModel) { - ((JToggleButton) components[0]).setSelected(vizModel.getTextModel().isShowNodeLabels()); - } - - @Override - public JComponent[] getToolbarComponents() { - //Show labels buttons - VizModel vizModel = VizController.getInstance().getVizModel(); - final JToggleButton showLabelsButton = new JToggleButton(); - showLabelsButton.setSelected(vizModel.getTextModel().isShowNodeLabels()); - showLabelsButton.setToolTipText(NbBundle.getMessage(VizBarController.class, "VizToolbar.Nodes.showLabels")); - showLabelsButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/visualization/component/showNodeLabels.png"))); - showLabelsButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - VizModel vizModel = VizController.getInstance().getVizModel(); - vizModel.getTextModel().setShowNodeLabels(showLabelsButton.isSelected()); - } - }); - vizModel.getTextModel().addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - TextModelImpl textModel = VizController.getInstance().getVizModel().getTextModel(); - if (showLabelsButton.isSelected() != textModel.isShowNodeLabels()) { - showLabelsButton.setSelected(textModel.isShowNodeLabels()); - } - } - }); - components[0] = showLabelsButton; - - return components; - } - - @Override - public JComponent getExtendedComponent() { - NodeSettingsPanel panel = new NodeSettingsPanel(); - panel.setup(); - return panel; - } - - @Override - public boolean hasToolbar() { - return true; - } - - @Override - public boolean hasExtended() { - return true; - } - } - - private static class EdgeGroupBar implements VizToolbarGroup { - - JComponent[] components = new JComponent[4]; - - @Override - public String getName() { - return NbBundle.getMessage(VizBarController.class, "VizToolbar.Edges.groupBarTitle"); - } - - public void setModelValues(VizModel vizModel) { - //((JToggleButton) components[0]).setSelected(vizModel.isShowEdges()); - //((JToggleButton) components[1]).setSelected(!vizModel.isEdgeHasUniColor()); - ((JToggleButton) components[2]).setSelected(vizModel.getTextModel().isShowEdgeLabels()); - ((JSlider) components[3]).setValue((int) ((vizModel.getEdgeScale() - 0.1f) * 10)); - } - - @Override - public JComponent[] getToolbarComponents() { - //Show edges buttons - VizModel vizModel = VizController.getInstance().getVizModel(); - final JToggleButton showEdgeButton = new JToggleButton(); - showEdgeButton.setSelected(vizModel.isShowEdges()); - showEdgeButton.setToolTipText(NbBundle.getMessage(VizBarController.class, "VizToolbar.Edges.showEdges")); - showEdgeButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/visualization/component/showEdges.png"))); - showEdgeButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - VizModel vizModel = VizController.getInstance().getVizModel(); - vizModel.setShowEdges(showEdgeButton.isSelected()); - } - }); - vizModel.addPropertyChangeListener(new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - if (evt.getPropertyName().equals("showEdges")) { - VizModel vizModel = VizController.getInstance().getVizModel(); - if (showEdgeButton.isSelected() != vizModel.isShowEdges()) { - showEdgeButton.setSelected(vizModel.isShowEdges()); - } - } - } - }); - components[0] = showEdgeButton; - - //Edge color mode - final JToggleButton edgeHasNodeColorButton = new JToggleButton(); - edgeHasNodeColorButton.setSelected(!vizModel.isEdgeHasUniColor()); - edgeHasNodeColorButton.setToolTipText(NbBundle.getMessage(VizBarController.class, "VizToolbar.Edges.edgeNodeColor")); - edgeHasNodeColorButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/visualization/component/edgeNodeColor.png"))); - edgeHasNodeColorButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - VizModel vizModel = VizController.getInstance().getVizModel(); - vizModel.setEdgeHasUniColor(!edgeHasNodeColorButton.isSelected()); - } - }); - vizModel.addPropertyChangeListener(new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - if (evt.getPropertyName().equals("edgeHasUniColor")) { - VizModel vizModel = VizController.getInstance().getVizModel(); - if (edgeHasNodeColorButton.isSelected() != !vizModel.isEdgeHasUniColor()) { - edgeHasNodeColorButton.setSelected(!vizModel.isEdgeHasUniColor()); - } - } - } - }); - components[1] = edgeHasNodeColorButton; - - - //Show labels buttons - final JToggleButton showLabelsButton = new JToggleButton(); - showLabelsButton.setSelected(vizModel.getTextModel().isShowEdgeLabels()); - showLabelsButton.setToolTipText(NbBundle.getMessage(VizBarController.class, "VizToolbar.Edges.showLabels")); - showLabelsButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/visualization/component/showEdgeLabels.png"))); - showLabelsButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - VizModel vizModel = VizController.getInstance().getVizModel(); - vizModel.getTextModel().setShowEdgeLabels(showLabelsButton.isSelected()); - } - }); - vizModel.getTextModel().addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - TextModelImpl textModel = VizController.getInstance().getVizModel().getTextModel(); - if (showLabelsButton.isSelected() != textModel.isShowEdgeLabels()) { - showLabelsButton.setSelected(textModel.isShowEdgeLabels()); - } - } - }); - components[2] = showLabelsButton; - - //EdgeScale slider - final JSlider edgeScaleSlider = new JSlider(0, 100, (int) ((vizModel.getEdgeScale() - 0.1f) * 10)); - edgeScaleSlider.setToolTipText(NbBundle.getMessage(VizBarController.class, "VizToolbar.Edges.edgeScale")); - edgeScaleSlider.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - VizModel vizModel = VizController.getInstance().getVizModel(); - if (vizModel.getEdgeScale() != (edgeScaleSlider.getValue() / 10f + 0.1f)) { - vizModel.setEdgeScale(edgeScaleSlider.getValue() / 10f + 0.1f); - } - } - }); - edgeScaleSlider.setPreferredSize(new Dimension(100, 20)); - edgeScaleSlider.setMaximumSize(new Dimension(100, 20)); - vizModel.addPropertyChangeListener(new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - if (evt.getPropertyName().equals("edgeScale")) { - VizModel vizModel = VizController.getInstance().getVizModel(); - if (vizModel.getEdgeScale() != (edgeScaleSlider.getValue() / 10f + 0.1f)) { - edgeScaleSlider.setValue((int) ((vizModel.getEdgeScale() - 0.1f) * 10)); - } - } - } - }); - components[3] = edgeScaleSlider; - return components; - } - - @Override - public JComponent getExtendedComponent() { - EdgeSettingsPanel panel = new EdgeSettingsPanel(); - panel.setup(); - return panel; - } - - @Override - public boolean hasToolbar() { - return true; - } - - @Override - public boolean hasExtended() { - return true; - } - } - - private static class LabelGroupBar implements VizToolbarGroup { - - JComponent[] components = new JComponent[6]; - - @Override - public String getName() { - return NbBundle.getMessage(VizBarController.class, "VizToolbar.Labels.groupBarTitle"); - } - - public void setModelValues(VizModel vizModel) { - TextModelImpl model = vizModel.getTextModel(); - ((JPopupButton) components[0]).setSelectedItem(model.getSizeMode()); - ((JPopupButton) components[1]).setSelectedItem(model.getColorMode()); - ((JButton) components[2]).setText(model.getNodeFont().getFontName() + ", " + model.getNodeFont().getSize()); - ((JSlider) components[3]).setValue((int) (model.getNodeSizeFactor() * 100f)); - } - - @Override - public JComponent[] getToolbarComponents() { - TextModelImpl model = VizController.getInstance().getVizModel().getTextModel(); - - //Mode - final JPopupButton labelSizeModeButton = new JPopupButton(); - TextManager textManager = VizController.getInstance().getTextManager(); - for (final SizeMode sm : textManager.getSizeModes()) { - labelSizeModeButton.addItem(sm, sm.getIcon()); - } - labelSizeModeButton.setSelectedItem(model.getSizeMode()); - labelSizeModeButton.setChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - SizeMode sm = (SizeMode) e.getSource(); - TextModelImpl model = VizController.getInstance().getVizModel().getTextModel(); - model.setSizeMode(sm); - } - }); - labelSizeModeButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/visualization/component/labelSizeMode.png"))); - labelSizeModeButton.setToolTipText(NbBundle.getMessage(VizBarController.class, "VizToolbar.Labels.sizeMode")); - model.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - TextModelImpl model = VizController.getInstance().getVizModel().getTextModel(); - if (model.getSizeMode() != labelSizeModeButton.getSelectedItem()) { - labelSizeModeButton.setSelectedItem(model.getSizeMode()); - } - } - }); - components[0] = labelSizeModeButton; - - //Color mode - final JPopupButton labelColorModeButton = new JPopupButton(); - for (final ColorMode cm : textManager.getColorModes()) { - labelColorModeButton.addItem(cm, cm.getIcon()); - } - labelColorModeButton.setSelectedItem(textManager.getModel().getColorMode()); - labelColorModeButton.setChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - ColorMode cm = (ColorMode) e.getSource(); - TextModelImpl model = VizController.getInstance().getVizModel().getTextModel(); - model.setColorMode(cm); - } - }); - labelColorModeButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/visualization/component/labelColorMode.png"))); - labelColorModeButton.setToolTipText(NbBundle.getMessage(VizBarController.class, "VizToolbar.Labels.colorMode")); - model.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - TextModelImpl model = VizController.getInstance().getVizModel().getTextModel(); - if (model.getColorMode() != labelColorModeButton.getSelectedItem()) { - labelColorModeButton.setSelectedItem(model.getColorMode()); - } - } - }); - components[1] = labelColorModeButton; - - //Font - final JButton fontButton = new JButton(model.getNodeFont().getFontName() + ", " + model.getNodeFont().getSize()); - fontButton.setToolTipText(NbBundle.getMessage(VizBarController.class, "VizToolbar.Labels.font")); - fontButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - TextModelImpl model = VizController.getInstance().getVizModel().getTextModel(); - Font font = JFontChooser.showDialog(WindowManager.getDefault().getMainWindow(), model.getNodeFont()); - if (font != null && font != model.getNodeFont()) { - model.setNodeFont(font); - } - } - }); - model.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - TextModelImpl model = VizController.getInstance().getVizModel().getTextModel(); - fontButton.setText(model.getNodeFont().getFontName() + ", " + model.getNodeFont().getSize()); - } - }); - components[2] = fontButton; - - //Font size - final JSlider fontSizeSlider = new JSlider(0, 100, (int) (model.getNodeSizeFactor() * 100f)); - fontSizeSlider.setToolTipText(NbBundle.getMessage(VizBarController.class, "VizToolbar.Labels.fontScale")); - fontSizeSlider.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - TextModelImpl model = VizController.getInstance().getVizModel().getTextModel(); - model.setNodeSizeFactor(fontSizeSlider.getValue() / 100f); - } - }); - fontSizeSlider.setPreferredSize(new Dimension(100, 20)); - fontSizeSlider.setMaximumSize(new Dimension(100, 20)); - model.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - TextModelImpl model = VizController.getInstance().getVizModel().getTextModel(); - if (((int) (model.getNodeSizeFactor() * 100f)) != fontSizeSlider.getValue()) { - fontSizeSlider.setValue((int) (model.getNodeSizeFactor() * 100f)); - } - } - }); - components[3] = fontSizeSlider; - - //Color - final ColorChooser colorChooser = new ColorChooser(model.getNodeColor()); - colorChooser.setToolTipText(NbBundle.getMessage(VizBarController.class, "VizToolbar.Labels.defaultColor")); - colorChooser.setPreferredSize(new Dimension(16, 16)); - colorChooser.setMaximumSize(new Dimension(16, 16)); - colorChooser.addPropertyChangeListener(new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - if (evt.getPropertyName().equals(ColorChooser.PROP_COLOR)) { - TextModelImpl model = VizController.getInstance().getVizModel().getTextModel(); - model.setNodeColor(colorChooser.getColor()); - } - } - }); - model.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - TextModelImpl model = VizController.getInstance().getVizModel().getTextModel(); - if (!model.getNodeColor().equals(colorChooser.getColor())) { - colorChooser.setColor(model.getNodeColor()); - } - } - }); - components[4] = colorChooser; - - //Attributes - final JButton attributesButton = new JButton(); - attributesButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/visualization/component/configureLabels.png"))); - attributesButton.setToolTipText(NbBundle.getMessage(VizBarController.class, "VizToolbar.Labels.attributes")); - attributesButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - TextModelImpl model = VizController.getInstance().getVizModel().getTextModel(); - LabelAttributesPanel panel = new LabelAttributesPanel(); - panel.setup(model); - DialogDescriptor dd = new DialogDescriptor(panel, NbBundle.getMessage(VizBarController.class, "LabelAttributesPanel.title"), true, NotifyDescriptor.OK_CANCEL_OPTION, null, null); - if (DialogDisplayer.getDefault().notify(dd).equals(NotifyDescriptor.OK_OPTION)) { - panel.unsetup(); - return; - } - } - }); - components[5] = attributesButton; - - return components; - } - - @Override - public JComponent getExtendedComponent() { - LabelSettingsPanel panel = new LabelSettingsPanel(); - panel.setup(); - return panel; - } - - @Override - public boolean hasToolbar() { - return true; - } - - @Override - public boolean hasExtended() { - return true; - } - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/VizEngineGraphCanvasManager.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/VizEngineGraphCanvasManager.java new file mode 100644 index 0000000000..f181d86e96 --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/VizEngineGraphCanvasManager.java @@ -0,0 +1,310 @@ +package org.gephi.visualization.component; + +import com.jogamp.newt.Display; +import com.jogamp.newt.NewtFactory; +import com.jogamp.newt.Screen; +import com.jogamp.newt.awt.NewtCanvasAWT; +import com.jogamp.newt.event.MouseEvent; +import com.jogamp.newt.event.NEWTEvent; +import com.jogamp.newt.opengl.GLWindow; +import com.jogamp.opengl.GL; +import com.jogamp.opengl.GLAutoDrawable; +import com.jogamp.opengl.GLCapabilities; +import com.jogamp.opengl.GLContext; +import com.jogamp.opengl.GLEventListener; +import com.jogamp.opengl.GLProfile; +import java.awt.BorderLayout; +import java.awt.EventQueue; +import java.lang.reflect.InvocationTargetException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.logging.Level; +import java.util.logging.Logger; +import javax.swing.JComponent; +import javax.swing.SwingUtilities; +import org.openide.DialogDisplayer; +import org.openide.NotifyDescriptor; +import org.openide.util.NbBundle; +import org.gephi.graph.api.GraphModel; +import org.gephi.project.api.Workspace; +import org.gephi.ui.utils.UIUtils; +import org.gephi.visualization.VizConfig; +import org.gephi.visualization.VizController; +import org.gephi.visualization.VizModel; +import org.gephi.visualization.events.StandardVizEventManager; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.VizEngineFactory; +import org.gephi.viz.engine.VizEngineModel; +import org.gephi.viz.engine.jogl.JOGLRenderingTarget; +import org.gephi.viz.engine.jogl.VizEngineJOGLConfigurator; +import org.gephi.viz.engine.spi.InputListener; +import org.gephi.viz.engine.util.gl.OpenGLOptions; + +public class VizEngineGraphCanvasManager { + private final VizController vizController; + private GLWindow glWindow; + private NewtCanvasAWT glCanvas; + + // Engine + private transient VizEngine engine = null; + + // States + private boolean initialized = false; + + public VizEngineGraphCanvasManager(VizController vizController) { + this.vizController = Objects.requireNonNull(vizController); + } + + public Optional> getEngine() { + return Optional.ofNullable(engine); + } + + public Optional getSurfaceScale() { + if (glWindow != null) { + return Optional.of(glWindow.getCurrentSurfaceScale(new float[2])[0]); + } + return Optional.empty(); + } + + public synchronized VizEngine init(final JComponent component) { + if (initialized) { + throw new IllegalStateException("Already initialized"); + } + + this.initialized = true; + + final GLCapabilities caps = VizEngineJOGLConfigurator.createCapabilities(VizConfig.getAntialiasing()); + + final Display display = NewtFactory.createDisplay(null); + final Screen screen = NewtFactory.createScreen(display, 0); + + this.glWindow = GLWindow.create(screen, caps); + + // Check for unsupported OpenGL before the engine registers its listener + glWindow.addGLEventListener(new OpenGLVersionChecker()); + + if (VizConfig.isEngineOpenGLDebug()) { + glWindow.setContextCreationFlags(GLContext.CTX_OPTION_DEBUG); + + // Set logger to FINE to see debug messages + Logger logger = Logger.getLogger(VizEngine.class.getSimpleName()); + logger.setLevel(Level.FINE); + + logger.log(Level.FINE, GLProfile.glAvailabilityToString()); + } + + final JOGLRenderingTarget renderingTarget = new JOGLRenderingTarget(glWindow); + + this.engine = VizEngineFactory.newEngine( + renderingTarget, + Collections.singletonList( + new VizEngineJOGLConfigurator() + ) + ); + this.engine.setDarkLaf(UIUtils.isDarkLookAndFeel()); + + final OpenGLOptions glOptions = engine.getOpenGLOptions(); + glOptions.setDisableIndirectDrawing(VizConfig.isEngineDisableIndirectRendering()); + glOptions.setDisableInstancedDrawing(VizConfig.isEngineDisableInstancedRendering()); + glOptions.setDisableVAOS(VizConfig.isEngineDisableVAOs()); + glOptions.setDisableVertexArrayDrawing(VizConfig.isEngineDisableVertexArrayDrawing()); + glOptions.setDebug(VizConfig.isEngineOpenGLDebug()); + + engine.addInputListener(new InputListener<>() { + + private VizEngineModel model; + + @Override + public void frameStart(VizEngineModel model) { + this.model = model; + } + + @Override + public void frameEnd(VizEngineModel model) { + this.model = null; + } + + @Override + public List processEvents(List inputEvents) { + if (engine != null && vizController.getVizEventManager() != null) { + StandardVizEventManager vizEventManager = vizController.getVizEventManager(); + List remainingEvents = new ArrayList<>(); + for (NEWTEvent inputEvent : inputEvents) { + if (!(inputEvent instanceof MouseEvent && + vizEventManager.processMouseEvent(glCanvas, VizEngineGraphCanvasManager.this, engine, model, + (MouseEvent) inputEvent))) { + remainingEvents.add(inputEvent); + } + } + return remainingEvents; + } + + return inputEvents; + } + + @Override + public String getCategory() { + return "GephiDesktop"; + } + + @Override + public int getPreferenceInCategory() { + return 0; + } + + @Override + public String getName() { + return "Gephi Viz Event Manager"; + } + + @Override + public void init(JOGLRenderingTarget renderingTarget) { + //NOP + } + + @Override + public int getOrder() { + return -100; // Execute before default listener of viz engine (has order = 0) + } + }); + + runOnEdtAndWait(() -> { + glCanvas = new NewtCanvasAWT(glWindow); + + component.add(glCanvas, BorderLayout.CENTER); + + component.revalidate(); + component.repaint(); + }); + + engine.start(); + + return engine; + } + + public synchronized VizModel loadWorkspace(Workspace workspace) { + if (!initialized) { + throw new IllegalStateException("Not initialized"); + } + VizModel model = vizController.getModel(workspace); + GraphModel graphModel = workspace.getLookup().lookup(GraphModel.class); + + engine.setGraphModel(graphModel, model.toGraphRenderingOptions(), model.toGraphSelection()); + if (model.isDirectMouseSelection()) { + vizController.enableMouseHandler(); + } + return model; + } + + public synchronized VizModel unloadWorkspace(Workspace workspace) { + if (!initialized) { + throw new IllegalStateException("Not initialized"); + } + VizModel model = vizController.getModel(workspace); + GraphModel graphModel = workspace.getLookup().lookup(GraphModel.class); + + if (engine.getGraphModel() == graphModel) { + // We want to avoid calling that twice to not override zoom/pan with default values + model.unsetup(); + + // Only then, reset the engine's engine model + engine.unsetGraphModel(graphModel); + } + vizController.disableMouseHandler(); + + return model; + } + + public synchronized void destroy(JComponent component) { + if (glCanvas != null) { + final NewtCanvasAWT canvasToRemove = glCanvas; + runOnEdtAndWait(() -> { + component.remove(canvasToRemove); + component.revalidate(); + component.repaint(); + }); + } + + if (glWindow != null) { + //Logger.getLogger("").info("Destroying glWindow..."); + glWindow.destroy(); + glWindow = null; + glCanvas = null; + } + + initialized = false; + } + + public synchronized boolean isInitialized() { + return initialized; + } + + private static void runOnEdtAndWait(final Runnable runnable) { + if (EventQueue.isDispatchThread()) { + runnable.run(); + return; + } + + try { + javax.swing.SwingUtilities.invokeAndWait(runnable); + } catch (InterruptedException ex) { + Thread.currentThread().interrupt(); + throw new RuntimeException("Interrupted while waiting for EDT task", ex); + } catch (InvocationTargetException ex) { + throw new RuntimeException("EDT task failed", ex.getCause()); + } + } + + private static class OpenGLVersionChecker implements GLEventListener { + + private static final AtomicBoolean WARNED = new AtomicBoolean(false); + + @Override + public void init(GLAutoDrawable drawable) { + final GL gl = drawable.getGL(); + final String renderer = gl.glGetString(GL.GL_RENDERER); + final String version = gl.glGetString(GL.GL_VERSION); + + // OpenGL version string starts with "major.minor" + boolean tooOld = false; + if (version != null && !version.isEmpty()) { + try { + int major = Character.getNumericValue(version.charAt(0)); + tooOld = major < 2; + } catch (Exception ignored) { + } + } + final boolean isGdiGeneric = renderer != null && renderer.contains("GDI Generic"); + + if ((tooOld || isGdiGeneric) && WARNED.compareAndSet(false, true)) { + final String rendererStr = renderer != null ? renderer : "unknown"; + final String versionStr = version != null ? version : "unknown"; + Logger.getLogger(VizEngineGraphCanvasManager.class.getName()).log( + Level.WARNING, "Unsupported OpenGL: renderer={0}, version={1}", + new Object[] {rendererStr, versionStr}); + SwingUtilities.invokeLater(() -> { + String msg = NbBundle.getMessage(VizEngineGraphCanvasManager.class, + "VizEngineGraphCanvasManager.opengl.unsupported.message", rendererStr, versionStr); + NotifyDescriptor nd = new NotifyDescriptor.Message(msg, NotifyDescriptor.ERROR_MESSAGE); + DialogDisplayer.getDefault().notify(nd); + }); + } + } + + @Override + public void dispose(GLAutoDrawable drawable) { + } + + @Override + public void display(GLAutoDrawable drawable) { + } + + @Override + public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { + } + } +} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/VizExtendedBar.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/VizExtendedBar.java deleted file mode 100644 index 6eeaf5552d..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/VizExtendedBar.java +++ /dev/null @@ -1,103 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.visualization.component; - -import javax.swing.JComponent; -import javax.swing.UIManager; -import org.gephi.ui.utils.UIUtils; - -/** - * - * @author Mathieu Bastian - */ -public class VizExtendedBar extends javax.swing.JPanel { - - /** Creates new form VizExtendedBar */ - public VizExtendedBar(VizToolbarGroup[] groups) { - initComponents(); - if (UIUtils.isAquaLookAndFeel()) { - setBackground(UIManager.getColor("NbExplorerView.background")); - } - - for (VizToolbarGroup g : groups) { - if (g.hasExtended()) { - JComponent c = g.getExtendedComponent(); - if (UIUtils.isAquaLookAndFeel()) { - c.setBackground(UIManager.getColor("NbExplorerView.background")); - } - tabbedPane.addTab(g.getName(), c); - } - } - } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // //GEN-BEGIN:initComponents - private void initComponents() { - - separator = new javax.swing.JSeparator(); - tabbedPane = new javax.swing.JTabbedPane(); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(separator, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE) - .addComponent(tabbedPane, javax.swing.GroupLayout.DEFAULT_SIZE, 400, Short.MAX_VALUE) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(separator, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(tabbedPane, javax.swing.GroupLayout.DEFAULT_SIZE, 97, Short.MAX_VALUE)) - ); - }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JSeparator separator; - private javax.swing.JTabbedPane tabbedPane; - // End of variables declaration//GEN-END:variables -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/VizToolbarGroup.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/VizToolbarGroup.java deleted file mode 100644 index 30885e3392..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/component/VizToolbarGroup.java +++ /dev/null @@ -1,61 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.visualization.component; - -import javax.swing.JComponent; - -/** - * - * @author Mathieu Bastian - */ -public interface VizToolbarGroup { - - public String getName(); - - public JComponent[] getToolbarComponents(); - - public JComponent getExtendedComponent(); - - public boolean hasToolbar(); - - public boolean hasExtended(); -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/config/GraphicalConfiguration.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/config/GraphicalConfiguration.java deleted file mode 100644 index 653df7b146..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/config/GraphicalConfiguration.java +++ /dev/null @@ -1,134 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.config; - -import javax.media.nativewindow.AbstractGraphicsDevice; -import javax.media.opengl.GL2; -import javax.media.opengl.GLCapabilities; -import javax.media.opengl.GLDrawableFactory; -import javax.media.opengl.GLProfile; -import javax.swing.JOptionPane; -import javax.swing.SwingUtilities; -import org.openide.util.NbBundle; -import org.openide.windows.WindowManager; - -/** - * Class dedicated to the analysis and tuning of the engine for the detected - * configuration (graphic card, cpu...) - * - * @author Mathieu Bastian - */ -public class GraphicalConfiguration { - - private static boolean messageDelivered = false; - private boolean vboSupport = false; - private boolean pBufferSupport = false; - private String vendor = ""; - private String renderer = ""; - private String versionStr = ""; - private GLProfile profile = GLProfile.get(GLProfile.GL2); - private GLCapabilities caps = new GLCapabilities(profile); - AbstractGraphicsDevice device = GLDrawableFactory.getFactory(profile).getDefaultDevice(); - - public void checkGeneralCompatibility(GL2 gl) { - if (messageDelivered) { - return; - } - - try { - //Vendor - vendor = gl.glGetString(GL2.GL_VENDOR); - renderer = gl.glGetString(GL2.GL_RENDERER); - versionStr = gl.glGetString(GL2.GL_VERSION); - String currentConfig = String.format(NbBundle.getMessage(GraphicalConfiguration.class, "graphicalConfiguration_currentConfig"), vendor, renderer, versionStr); - - // Check version. - if (!gl.isExtensionAvailable("GL_VERSION_1_2")) { - String err = String.format(NbBundle.getMessage(GraphicalConfiguration.class, "graphicalConfiguration_exception"), versionStr, currentConfig); - throw new GraphicalConfigurationException(err); - } - - - //VBO - boolean vboExtension = gl.isExtensionAvailable("GL_ARB_vertex_buffer_object"); - boolean vboFunctions = gl.isFunctionAvailable("glGenBuffersARB") - && gl.isFunctionAvailable("glBindBufferARB") - && gl.isFunctionAvailable("glBufferDataARB") - && gl.isFunctionAvailable("glDeleteBuffersARB"); - vboSupport = vboExtension && vboFunctions; - - //Pbuffer - - pBufferSupport = GLDrawableFactory.getDesktopFactory().canCreateGLPbuffer(device, profile); - - } catch (final GraphicalConfigurationException exc) { - messageDelivered = true; - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(), exc.getMessage(), "Configuration", JOptionPane.WARNING_MESSAGE); - exc.printStackTrace(); - } - }); - } - } - - public String getVendor() { - return vendor; - } - - public String getRenderer() { - return renderer; - } - - public String getVersionStr() { - return versionStr; - } - - public boolean isPBufferSupported() { - return pBufferSupport; - } - - public boolean isVboSupported() { - return vboSupport; - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/config/GraphicalConfigurationException.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/config/GraphicalConfigurationException.java deleted file mode 100644 index b38383794a..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/config/GraphicalConfigurationException.java +++ /dev/null @@ -1,55 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.visualization.config; - -/** - * Exception when the detected configuration is not compatible. - * - * @author Mathieu Bastian - * @see GraphicalConfiguration - */ -public class GraphicalConfigurationException extends Exception { - - public GraphicalConfigurationException(String message) { - super(message); - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/config/VizCommander.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/config/VizCommander.java deleted file mode 100644 index b5a1d9607c..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/config/VizCommander.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.config; - -import org.gephi.visualization.swing.GraphCanvas; -import org.gephi.visualization.swing.GraphPanel; -import org.gephi.visualization.swing.NewtGraphCanvas; - -/** - * - * @author Mathieu Bastian - */ -public class VizCommander { - - public GraphCanvas createCanvas() { - GraphCanvas canvas = new GraphCanvas(); - return canvas; - } - - public GraphPanel createPanel() { - GraphPanel panel = new GraphPanel(); - return panel; - } - - public NewtGraphCanvas createNewtCanvas() { - NewtGraphCanvas canvas = new NewtGraphCanvas(); - return canvas; - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/GraphContextMenu.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/GraphContextMenu.java new file mode 100644 index 0000000000..ea86cd8a07 --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/GraphContextMenu.java @@ -0,0 +1,185 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.visualization.contextmenu; + +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.KeyEvent; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import javax.swing.JMenu; +import javax.swing.JMenuItem; +import javax.swing.JPopupMenu; +import javax.swing.KeyStroke; +import org.gephi.datalab.api.DataLaboratoryHelper; +import org.gephi.datalab.spi.ContextMenuItemManipulator; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; +import org.gephi.visualization.spi.GraphContextMenuItem; +import org.gephi.viz.engine.VizEngineModel; +import org.gephi.viz.engine.status.GraphSelection; +import org.openide.util.Lookup; + +/** + * @author Mathieu Bastian + */ +public class GraphContextMenu { + + public JPopupMenu getMenu(VizEngineModel model) { + GraphModel graphModel = model.getGraphModel(); + GraphSelection selection = model.getGraphSelection(); + Graph graph = graphModel.getGraphVisible(); + Node[] selectedNodes = selection.getSelectedNodes().toArray(new Node[0]); + + GraphContextMenuItem[] items = getGraphContextMenuItems(); + JPopupMenu contextMenu = new JPopupMenu(); + + //Add items ordered: + Integer lastItemType = null; + for (GraphContextMenuItem item : items) { + item.setup(graph, selectedNodes); + if (lastItemType == null) { + lastItemType = item.getType(); + } + if (lastItemType != item.getType()) { + contextMenu.addSeparator(); + } + lastItemType = item.getType(); + if (item.isAvailable()) { + contextMenu.add(createMenuItemFromGraphContextMenuItem(item, graph, selectedNodes)); + } + } + return contextMenu; + } + + /** + *

              + * Prepares an array with one new instance of every GraphContextMenuItem and + * returns it.

              + *

              + * It also returns the items ordered first by type and then by position.

              + * + * @return Array of all GraphContextMenuItem implementations + */ + public GraphContextMenuItem[] getGraphContextMenuItems() { + ArrayList items = new ArrayList<>(); + items.addAll(Lookup.getDefault().lookupAll(GraphContextMenuItem.class)); + sortItems(items); + return items.toArray(new GraphContextMenuItem[0]); + } + + public JMenuItem createMenuItemFromGraphContextMenuItem(final GraphContextMenuItem item, final Graph graph, + final Node[] nodes) { + ContextMenuItemManipulator[] subItems = item.getSubItems(); + if (subItems != null && item.canExecute()) { + JMenu subMenu = new JMenu(); + subMenu.setText(item.getName()); + if (item.getDescription() != null && !item.getDescription().isEmpty()) { + subMenu.setToolTipText(item.getDescription()); + } + subMenu.setIcon(item.getIcon()); + Integer lastItemType = null; + for (ContextMenuItemManipulator subItem : subItems) { + ((GraphContextMenuItem) subItem).setup(graph, nodes); + if (lastItemType == null) { + lastItemType = subItem.getType(); + } + if (lastItemType != subItem.getType()) { + subMenu.addSeparator(); + } + lastItemType = subItem.getType(); + if (subItem.isAvailable()) { + subMenu.add(createMenuItemFromGraphContextMenuItem((GraphContextMenuItem) subItem, graph, nodes)); + } + } + if (item.getMnemonicKey() != null) { + subMenu.setMnemonic(item.getMnemonicKey());//Mnemonic for opening a sub menu + } + return subMenu; + } else { + JMenuItem menuItem = new JMenuItem(); + menuItem.setText(item.getName()); + if (item.getDescription() != null && !item.getDescription().isEmpty()) { + menuItem.setToolTipText(item.getDescription()); + } + menuItem.setIcon(item.getIcon()); + if (item.canExecute()) { + menuItem.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + new Thread() { + @Override + public void run() { + DataLaboratoryHelper.getDefault().executeManipulator(item); + } + }.start(); + } + }); + } else { + menuItem.setEnabled(false); + } + if (item.getMnemonicKey() != null) { + menuItem.setMnemonic(item.getMnemonicKey());//Mnemonic for executing the action + menuItem.setAccelerator(KeyStroke.getKeyStroke(item.getMnemonicKey(), + KeyEvent.CTRL_DOWN_MASK));//And the same key mnemonic + ctrl for executing the action (and as a help display for the user!). + } + return menuItem; + } + } + + private void sortItems(ArrayList m) { + Collections.sort(m, new Comparator() { + @Override + public int compare(GraphContextMenuItem o1, GraphContextMenuItem o2) { + //Order by type, position. + if (o1.getType() == o2.getType()) { + return o1.getPosition() - o2.getPosition(); + } else { + return o1.getType() - o2.getType(); + } + } + }); + } +} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/BasicItem.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/BasicItem.java similarity index 88% rename from modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/BasicItem.java rename to modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/BasicItem.java index c0f5a0ab7d..23aa933e35 100644 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/BasicItem.java +++ b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/BasicItem.java @@ -1,4 +1,3 @@ - /* Copyright 2008-2010 Gephi Authors : Eduardo Ramos @@ -40,14 +39,16 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ -package org.gephi.visualization.apiimpl.contextmenuitems; +package org.gephi.visualization.contextmenu.items; + +import org.gephi.datalab.spi.ContextMenuItemManipulator; +import org.gephi.datalab.spi.ManipulatorUI; import org.gephi.graph.api.Graph; import org.gephi.graph.api.Node; import org.gephi.visualization.spi.GraphContextMenuItem; /** - * * @author Eduardo */ public abstract class BasicItem implements GraphContextMenuItem { @@ -69,19 +70,21 @@ public String getDescription() { return null; } -// @Override -// public ManipulatorUI getUI() { -// return null; -// } + @Override + public ManipulatorUI getUI() { + return null; + } + @Override public boolean isAvailable() { return true; } -// @Override -// public ContextMenuItemManipulator[] getSubItems() { -// return null; -// } + @Override + public ContextMenuItemManipulator[] getSubItems() { + return null; + } + @Override public Integer getMnemonicKey() { return null; diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/CopyOrMoveToWorkspace.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/CopyOrMoveToWorkspace.java new file mode 100644 index 0000000000..4e065ce027 --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/CopyOrMoveToWorkspace.java @@ -0,0 +1,109 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian , Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.visualization.contextmenu.items; + +import java.util.ArrayList; +import javax.swing.Icon; +import org.gephi.datalab.spi.ContextMenuItemManipulator; +import org.gephi.datalab.spi.nodes.NodesManipulator; +import org.gephi.graph.api.Node; +import org.gephi.project.api.ProjectController; +import org.gephi.project.api.Workspace; +import org.gephi.visualization.spi.GraphContextMenuItem; +import org.openide.util.Lookup; + +/** + * + */ +public abstract class CopyOrMoveToWorkspace extends BasicItem implements NodesManipulator { + + @Override + public void execute() { + } + + @Override + public void setup(Node[] nodes, Node clickedNode) { + this.nodes = nodes; + } + + @Override + public ContextMenuItemManipulator[] getSubItems() { + if (nodes != null) { + int i = 0; + ArrayList subItems = new ArrayList<>(); + if (canExecute()) { + subItems.add(new CopyOrMoveToWorkspaceSubItem(null, true, 0, 0, isCopy()));//New workspace + ProjectController projectController = Lookup.getDefault().lookup(ProjectController.class); + for (final Workspace w : projectController.getCurrentProject().getWorkspaces()) { + GraphContextMenuItem item = + new CopyOrMoveToWorkspaceSubItem(w, w != projectController.getCurrentWorkspace(), 1, i, + isCopy()); + subItems.add(item); + i++; + } + return subItems.toArray(new ContextMenuItemManipulator[0]); + } else { + return null; + } + } else { + return null; + } + } + + @Override + public boolean canExecute() { + return nodes.length > 0; + } + + @Override + public int getType() { + return 200; + } + + @Override + public Icon getIcon() { + return null; + } + + protected abstract boolean isCopy(); +} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/CopyOrMoveToWorkspaceSubItem.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/CopyOrMoveToWorkspaceSubItem.java new file mode 100644 index 0000000000..87580fb7a5 --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/CopyOrMoveToWorkspaceSubItem.java @@ -0,0 +1,173 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian , Eduardo Ramos + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.visualization.contextmenu.items; + +import java.util.Arrays; +import javax.swing.Icon; +import javax.swing.JOptionPane; +import org.gephi.datalab.spi.nodes.NodesManipulator; +import org.gephi.graph.api.Graph; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.graph.api.Node; +import org.gephi.project.api.ProjectController; +import org.gephi.project.api.Workspace; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; + +public class CopyOrMoveToWorkspaceSubItem extends BasicItem implements NodesManipulator { + + private final Workspace workspace; + private final boolean canExecute; + private final int type; + private final int position; + private final boolean copy; + + /** + * Constructor with copy or move settings + * + * @param workspace Workspace to copy or move, or null to use new workspace + * @param canExecute canExecute + * @param type type + * @param position position + * @param copy True to copy, false to move + */ + public CopyOrMoveToWorkspaceSubItem(Workspace workspace, boolean canExecute, int type, int position, boolean copy) { + this.workspace = workspace; + this.canExecute = canExecute; + this.type = type; + this.position = position; + this.copy = copy; + } + + @Override + public void setup(Node[] nodes, Node clickedNode) { + this.nodes = nodes; + } + + @Override + public void execute() { + if (copy) { + copyToWorkspace(workspace); + } else { + moveToWorkspace(workspace); + } + } + + @Override + public String getName() { + if (workspace != null) { + return workspace.getName(); + } else { + return NbBundle.getMessage(CopyOrMoveToWorkspaceSubItem.class, + copy ? "GraphContextMenu_CopyToWorkspace_NewWorkspace" : + "GraphContextMenu_MoveToWorkspace_NewWorkspace"); + } + } + + @Override + public boolean canExecute() { + return canExecute; + } + + @Override + public int getType() { + return type; + } + + @Override + public int getPosition() { + return position; + } + + @Override + public Icon getIcon() { + return null; + } + + public boolean copyToWorkspace(Workspace workspace) { + ProjectController projectController = Lookup.getDefault().lookup(ProjectController.class); + GraphController graphController = Lookup.getDefault().lookup(GraphController.class); + + Workspace currentWorkspace = projectController.getCurrentWorkspace(); + GraphModel currentGraphModel = graphController.getGraphModel(currentWorkspace); + + GraphModel targetGraphModel; + if (workspace == null) { + workspace = projectController.newWorkspace(currentWorkspace.getProject(), + currentGraphModel.getConfiguration().copy()); + targetGraphModel = graphController.getGraphModel(workspace); + + targetGraphModel.setTimeFormat(currentGraphModel.getTimeFormat()); + targetGraphModel.setTimeZone(currentGraphModel.getTimeZone()); + } else { + targetGraphModel = graphController.getGraphModel(workspace); + } + + currentGraphModel.getGraph().readLock(); + try { + targetGraphModel.bridge().copyNodes(nodes); + return true; + } catch (Exception e) { + String error = NbBundle.getMessage(CopyOrMoveToWorkspace.class, + "GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible"); + String title = NbBundle.getMessage(CopyOrMoveToWorkspace.class, + "GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible_Title"); + JOptionPane.showMessageDialog(null, error, title, JOptionPane.ERROR_MESSAGE); + return false; + } finally { + currentGraphModel.getGraph().readUnlockAll(); + } + } + + public void moveToWorkspace(Workspace workspace) { + if (copyToWorkspace(workspace)) { + delete(); + } + } + + public void delete() { + Graph g = Lookup.getDefault().lookup(GraphController.class).getGraphModel().getGraph(); + g.removeAllNodes(Arrays.asList(nodes)); + } +} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/CopyToWorkspace.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/CopyToWorkspace.java similarity index 85% rename from modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/CopyToWorkspace.java rename to modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/CopyToWorkspace.java index 89471eb142..ad95c4ef99 100644 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/CopyToWorkspace.java +++ b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/CopyToWorkspace.java @@ -38,20 +38,19 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ + */ -package org.gephi.visualization.apiimpl.contextmenuitems; +package org.gephi.visualization.contextmenu.items; import org.gephi.visualization.spi.GraphContextMenuItem; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Eduardo */ @ServiceProvider(service = GraphContextMenuItem.class) -public class CopyToWorkspace extends CopyOrMoveToWorkspace{ +public class CopyToWorkspace extends CopyOrMoveToWorkspace { @Override protected boolean isCopy() { @@ -60,7 +59,10 @@ protected boolean isCopy() { @Override public String getName() { - return NbBundle.getMessage(CopyOrMoveToWorkspace.class, "GraphContextMenu_CopyToWorkspace"); + return nodes.length > 1 ? + NbBundle.getMessage(CopyOrMoveToWorkspace.class, "GraphContextMenu_CopyToWorkspace_Plural", nodes.length) : + NbBundle.getMessage(CopyOrMoveToWorkspace.class, "GraphContextMenu_CopyToWorkspace"); + } @Override diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/CopyToWorkspaceForDataLaboratory.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/CopyToWorkspaceForDataLaboratory.java similarity index 81% rename from modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/CopyToWorkspaceForDataLaboratory.java rename to modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/CopyToWorkspaceForDataLaboratory.java index 5fae0458ce..eb3e7e2329 100644 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/CopyToWorkspaceForDataLaboratory.java +++ b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/CopyToWorkspaceForDataLaboratory.java @@ -39,17 +39,22 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ -package org.gephi.visualization.apiimpl.contextmenuitems; -//import org.gephi.datalab.spi.nodes.NodesManipulator; -//import org.gephi.datalab.spi.nodes.NodesManipulatorBuilder; -//public class CopyToWorkspaceForDataLaboratory implements NodesManipulatorBuilder{ -// -// @Override -// public NodesManipulator getNodesManipulator() { -// return new CopyToWorkspaceForDataLaboratoryManipulator(); -// } -//} +package org.gephi.visualization.contextmenu.items; + +import org.gephi.datalab.spi.nodes.NodesManipulator; +import org.gephi.datalab.spi.nodes.NodesManipulatorBuilder; +import org.openide.util.lookup.ServiceProvider; + +@ServiceProvider(service = NodesManipulatorBuilder.class) +public class CopyToWorkspaceForDataLaboratory implements NodesManipulatorBuilder { + + @Override + public NodesManipulator getNodesManipulator() { + return new CopyToWorkspaceForDataLaboratoryManipulator(); + } +} + /** * Same action as CopyToWorkspace, with different position for data laboratory. * diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/Delete.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/Delete.java similarity index 79% rename from modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/Delete.java rename to modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/Delete.java index 1ff349cbe7..3cd868ead5 100644 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/Delete.java +++ b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/Delete.java @@ -39,14 +39,17 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ -package org.gephi.visualization.apiimpl.contextmenuitems; + +package org.gephi.visualization.contextmenu.items; import java.awt.event.KeyEvent; import javax.swing.Icon; +import org.gephi.datalab.api.GraphElementsController; import org.gephi.visualization.spi.GraphContextMenuItem; import org.openide.DialogDisplayer; import org.openide.NotifyDescriptor; import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; @@ -59,17 +62,18 @@ public class Delete extends BasicItem { @Override public void execute() { NotifyDescriptor.Confirmation notifyDescriptor = new NotifyDescriptor.Confirmation( - NbBundle.getMessage(Delete.class, "GraphContextMenu.Delete.message"), - NbBundle.getMessage(Delete.class, "GraphContextMenu.Delete.message.title"), NotifyDescriptor.YES_NO_OPTION); + NbBundle.getMessage(Delete.class, "GraphContextMenu.Delete.message"), + NbBundle.getMessage(Delete.class, "GraphContextMenu.Delete.message.title"), NotifyDescriptor.YES_NO_OPTION); if (DialogDisplayer.getDefault().notify(notifyDescriptor).equals(NotifyDescriptor.YES_OPTION)) { -// GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); -// gec.deleteNodes(nodes); + GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); + gec.deleteNodes(nodes); } } @Override public String getName() { - return NbBundle.getMessage(Delete.class, "GraphContextMenu_Delete"); + return nodes.length > 1 ? NbBundle.getMessage(Delete.class, "GraphContextMenu_Delete_Plural", nodes.length) + : NbBundle.getMessage(Delete.class, "GraphContextMenu_Delete"); } @Override @@ -89,7 +93,7 @@ public int getPosition() { @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/visualization/api/resources/delete.png", false); + return ImageUtilities.loadImageIcon("VisualizationImpl/delete.svg", false); } @Override diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/Free.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/Free.java similarity index 84% rename from modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/Free.java rename to modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/Free.java index 47b79b22f6..bafa191dce 100644 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/Free.java +++ b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/Free.java @@ -39,13 +39,16 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ -package org.gephi.visualization.apiimpl.contextmenuitems; + +package org.gephi.visualization.contextmenu.items; import java.awt.event.KeyEvent; import javax.swing.Icon; +import org.gephi.datalab.api.GraphElementsController; import org.gephi.graph.api.Node; import org.gephi.visualization.spi.GraphContextMenuItem; import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; @@ -57,8 +60,8 @@ public class Free extends BasicItem { @Override public void execute() { -// GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); -// gec.setNodesFixed(nodes, false); + GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); + gec.setNodesFixed(nodes, false); } @Override @@ -68,10 +71,11 @@ public String getName() { @Override public boolean canExecute() { + GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); for (Node n : nodes) { -// if (Lookup.getDefault().lookup(GraphElementsController.class).isNodeFixed(n)) { -// return true; -// } + if (gec.isNodeFixed(n)) { + return true; + } } return false; } @@ -88,7 +92,7 @@ public int getPosition() { @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/visualization/api/resources/free.png", false); + return ImageUtilities.loadImageIcon("VisualizationImpl/free.svg", false); } @Override diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/MoveToWorkspace.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/MoveToWorkspace.java similarity index 86% rename from modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/MoveToWorkspace.java rename to modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/MoveToWorkspace.java index 8809f07c52..47e319f4ed 100644 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/MoveToWorkspace.java +++ b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/MoveToWorkspace.java @@ -39,18 +39,18 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ -package org.gephi.visualization.apiimpl.contextmenuitems; + +package org.gephi.visualization.contextmenu.items; import org.gephi.visualization.spi.GraphContextMenuItem; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; /** - * * @author Eduardo */ @ServiceProvider(service = GraphContextMenuItem.class) -public class MoveToWorkspace extends CopyOrMoveToWorkspace{ +public class MoveToWorkspace extends CopyOrMoveToWorkspace { @Override protected boolean isCopy() { @@ -59,7 +59,9 @@ protected boolean isCopy() { @Override public String getName() { - return NbBundle.getMessage(CopyOrMoveToWorkspace.class, "GraphContextMenu_MoveToWorkspace"); + return nodes.length > 1 ? + NbBundle.getMessage(CopyOrMoveToWorkspace.class, "GraphContextMenu_MoveToWorkspace_Plural", nodes.length) : + NbBundle.getMessage(CopyOrMoveToWorkspace.class, "GraphContextMenu_MoveToWorkspace"); } @Override diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/MoveToWorkspaceForDataLaboratory.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/MoveToWorkspaceForDataLaboratory.java similarity index 81% rename from modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/MoveToWorkspaceForDataLaboratory.java rename to modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/MoveToWorkspaceForDataLaboratory.java index 8b13b1e4e5..f08a5e9b2b 100644 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/MoveToWorkspaceForDataLaboratory.java +++ b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/MoveToWorkspaceForDataLaboratory.java @@ -39,14 +39,21 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ -package org.gephi.visualization.apiimpl.contextmenuitems; -//public class MoveToWorkspaceForDataLaboratory implements NodesManipulatorBuilder{ -// -// @Override -// public NodesManipulator getNodesManipulator() { -// return new MoveToWorkspaceForDataLaboratoryManipulator(); -// } -//} + +package org.gephi.visualization.contextmenu.items; + +import org.gephi.datalab.spi.nodes.NodesManipulator; +import org.gephi.datalab.spi.nodes.NodesManipulatorBuilder; +import org.openide.util.lookup.ServiceProvider; + +@ServiceProvider(service = NodesManipulatorBuilder.class) +public class MoveToWorkspaceForDataLaboratory implements NodesManipulatorBuilder { + + @Override + public NodesManipulator getNodesManipulator() { + return new MoveToWorkspaceForDataLaboratoryManipulator(); + } +} /** * Same action as MoveToWorkspace, with different position for data laboratory. diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/SelectInDataLaboratory.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/SelectInDataLaboratory.java similarity index 83% rename from modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/SelectInDataLaboratory.java rename to modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/SelectInDataLaboratory.java index f1d9bccdca..7055e4e7dc 100644 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/SelectInDataLaboratory.java +++ b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/SelectInDataLaboratory.java @@ -39,15 +39,17 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ -package org.gephi.visualization.apiimpl.contextmenuitems; + +package org.gephi.visualization.contextmenu.items; import java.awt.event.KeyEvent; import javax.swing.Icon; +import org.gephi.datalab.api.datatables.DataTablesController; import org.gephi.graph.api.Graph; -//import org.gephi.datalab.api.datatables.DataTablesController; import org.gephi.graph.api.Node; import org.gephi.visualization.spi.GraphContextMenuItem; import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; @@ -57,20 +59,21 @@ Development and Distribution License("CDDL") (collectively, the @ServiceProvider(service = GraphContextMenuItem.class) public class SelectInDataLaboratory extends BasicItem { -// private DataTablesController dtc; + private DataTablesController dtc; + @Override public void setup(Graph graph, Node[] nodes) { this.nodes = nodes; -// dtc = Lookup.getDefault().lookup(DataTablesController.class); -// if(!dtc.isDataTablesReady()){ -// dtc.prepareDataTables(); -// } + dtc = Lookup.getDefault().lookup(DataTablesController.class); + if (!dtc.isDataTablesReady()) { + dtc.prepareDataTables(); + } } @Override public void execute() { -// dtc.setNodeTableSelection(nodes); -// dtc.selectNodesTable(); + dtc.setNodeTableSelection(nodes); + dtc.selectNodesTable(); } @Override @@ -85,8 +88,7 @@ public boolean isAvailable() { @Override public boolean canExecute() { -// return nodes.length >= 1 && dtc.isDataTablesReady(); - return false; + return nodes.length >= 1 && dtc.isDataTablesReady(); } @Override @@ -101,7 +103,7 @@ public int getPosition() { @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/visualization/api/resources/table-select.png", false); + return ImageUtilities.loadImageIcon("VisualizationImpl/table-select.svg", false); } @Override diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/Settle.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/Settle.java similarity index 84% rename from modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/Settle.java rename to modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/Settle.java index c59a64144f..8c4bfe1d46 100644 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/contextmenuitems/Settle.java +++ b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/contextmenu/items/Settle.java @@ -39,13 +39,16 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ -package org.gephi.visualization.apiimpl.contextmenuitems; + +package org.gephi.visualization.contextmenu.items; import java.awt.event.KeyEvent; import javax.swing.Icon; +import org.gephi.datalab.api.GraphElementsController; import org.gephi.graph.api.Node; import org.gephi.visualization.spi.GraphContextMenuItem; import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; import org.openide.util.NbBundle; import org.openide.util.lookup.ServiceProvider; @@ -57,8 +60,8 @@ public class Settle extends BasicItem { @Override public void execute() { -// GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); -// gec.setNodesFixed(nodes, true); + GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); + gec.setNodesFixed(nodes, true); } @Override @@ -68,10 +71,11 @@ public String getName() { @Override public boolean canExecute() { + GraphElementsController gec = Lookup.getDefault().lookup(GraphElementsController.class); for (Node n : nodes) { -// if (!Lookup.getDefault().lookup(GraphElementsController.class).isNodeFixed(n)) { -// return true; -// } + if (!gec.isNodeFixed(n)) { + return true; + } } return false; } @@ -88,7 +92,7 @@ public int getPosition() { @Override public Icon getIcon() { - return ImageUtilities.loadImageIcon("org/gephi/visualization/api/resources/settle.png", false); + return ImageUtilities.loadImageIcon("VisualizationImpl/settle.svg", false); } @Override diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/events/StandardVizEventManager.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/events/StandardVizEventManager.java index 09ce322893..3672ce81c4 100644 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/events/StandardVizEventManager.java +++ b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/events/StandardVizEventManager.java @@ -39,308 +39,490 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.visualization.events; +import com.jogamp.newt.event.MouseEvent; +import java.awt.Component; import java.lang.ref.WeakReference; import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.Comparator; -import java.util.Iterator; +import java.util.Collection; import java.util.List; -import java.util.concurrent.LinkedBlockingDeque; -import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.ScheduledFuture; import java.util.concurrent.TimeUnit; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.gephi.graph.api.Node; +import org.gephi.visualization.VizConfig; import org.gephi.visualization.VizController; -import org.gephi.visualization.apiimpl.GraphIO; -import org.gephi.visualization.apiimpl.VizEvent; -import org.gephi.visualization.apiimpl.VizEventListener; -import org.gephi.visualization.apiimpl.VizEventManager; -import org.gephi.visualization.opengl.AbstractEngine; +import org.gephi.visualization.api.VisualizationEvent; +import org.gephi.visualization.api.VisualizationEventListener; +import org.gephi.visualization.component.VizEngineGraphCanvasManager; +import org.gephi.visualization.contextmenu.GraphContextMenu; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.VizEngineModel; +import org.gephi.viz.engine.status.GraphSelection; +import org.gephi.viz.engine.structure.GraphIndex; +import org.joml.Vector2f; +import org.joml.Vector2i; +import org.openide.util.Lookup; /** - * * @author Mathieu Bastian */ -public class StandardVizEventManager implements VizEventManager { +public class StandardVizEventManager { + + private static final short MOUSE_LEFT_BUTTON = MouseEvent.BUTTON1; + private static final short MOUSE_WHEEL_BUTTON = MouseEvent.BUTTON2; + private static final short MOUSE_RIGHT_BUTTON = MouseEvent.BUTTON3; + + // State + private final Vector2i dragStartMouseScreenPosition = new Vector2i(0, 0); + private final Vector2f dragStartMouseWorldPosition2d = new Vector2f(0, 0); + + private final Vector2i previousMouseScreenPosition = new Vector2i(0, 0); + private final Vector2f previousMouseWorldPosition2d = new Vector2f(0, 0); + + private final Vector2i mouseScreenPosition = new Vector2i(0, 0); + private final Vector2f mouseWorldPosition = new Vector2f(0, 0); + + // Pressing thread + private static final int PRESSING_FREQUENCY = 7; + private Thread pressingThread; + private volatile boolean shouldStopPressing = false; + private final Object pressingLock = new Object(); //Architecture - private AbstractEngine engine; - private GraphIO graphIO; - // - private ThreadPoolExecutor pool; - private VizEventTypeHandler[] handlers; + private final VisualizationEventTypeHandler[] handlers; + private boolean dragging = false; public StandardVizEventManager() { - pool = new ThreadPoolExecutor(0, 1, 60L, TimeUnit.SECONDS, new LinkedBlockingDeque(10)); + //Set handlers + final ArrayList handlersList = new ArrayList<>(); + handlersList.add(new VisualizationEventTypeHandler(VisualizationEvent.Type.MOUSE_LEFT_CLICK, 0)); + handlersList.add(new VisualizationEventTypeHandler(VisualizationEvent.Type.MOUSE_LEFT_PRESS, 0)); + handlersList.add(new VisualizationEventTypeHandler(VisualizationEvent.Type.MOUSE_MIDDLE_CLICK, 0)); + handlersList.add(new VisualizationEventTypeHandler(VisualizationEvent.Type.MOUSE_MIDDLE_PRESS, 0)); + handlersList.add(new VisualizationEventTypeHandler(VisualizationEvent.Type.MOUSE_RIGHT_CLICK, 0)); + handlersList.add(new VisualizationEventTypeHandler(VisualizationEvent.Type.MOUSE_RIGHT_PRESS, 0)); + handlersList.add(new VisualizationEventTypeHandler(VisualizationEvent.Type.MOUSE_MOVE, 10)); + handlersList.add(new VisualizationEventTypeHandler(VisualizationEvent.Type.START_DRAG, 0)); + handlersList.add(new VisualizationEventTypeHandler(VisualizationEvent.Type.DRAG, 10)); + handlersList.add(new VisualizationEventTypeHandler(VisualizationEvent.Type.STOP_DRAG, 0)); + handlersList.add(new VisualizationEventTypeHandler(VisualizationEvent.Type.NODE_LEFT_CLICK, 0)); + handlersList.add(new VisualizationEventTypeHandler(VisualizationEvent.Type.MOUSE_LEFT_PRESSING, 0)); + handlersList.add(new VisualizationEventTypeHandler(VisualizationEvent.Type.MOUSE_RELEASED, 0)); + handlersList.add(new VisualizationEventTypeHandler(VisualizationEvent.Type.NODE_LEFT_PRESS, 0)); + handlersList.add(new VisualizationEventTypeHandler(VisualizationEvent.Type.NODE_LEFT_PRESSING, 0)); + handlersList.sort((o1, o2) -> { + VisualizationEvent.Type t1 = o1.type; + VisualizationEvent.Type t2 = o2.type; + return t1.compareTo(t2); + }); + handlers = handlersList.toArray(new VisualizationEventTypeHandler[0]); } - @Override - public void initArchitecture() { - engine = VizController.getInstance().getEngine(); - graphIO = VizController.getInstance().getGraphIO(); + public boolean processMouseEvent(Component parentComponent, VizEngineGraphCanvasManager canvasManager, + VizEngine engine, VizEngineModel model, MouseEvent mouseEvent) { + previousMouseScreenPosition.set(mouseScreenPosition); + previousMouseWorldPosition2d.set(mouseWorldPosition); + + mouseScreenPosition.set(mouseEvent.getX(), mouseEvent.getY()); + engine.screenCoordinatesToWorldCoordinates( + mouseScreenPosition.x, mouseScreenPosition.y, + mouseWorldPosition + ); + + switch (mouseEvent.getEventType()) { + case MouseEvent.EVENT_MOUSE_DRAGGED: + if (mouseEvent.getButton() != MOUSE_LEFT_BUTTON) { + return false; + } + final boolean startDragConsumed; + if (!dragging) { + dragStartMouseScreenPosition.set(mouseScreenPosition); + dragStartMouseWorldPosition2d.set(mouseWorldPosition); + dragging = true; + + startDragConsumed = startDrag(); + } else { + startDragConsumed = false; + } - //Set handlers - ArrayList handlersList = new ArrayList(); - handlersList.add(new VizEventTypeHandler(VizEvent.Type.MOUSE_LEFT_CLICK, false)); - handlersList.add(new VizEventTypeHandler(VizEvent.Type.MOUSE_LEFT_PRESS, false)); - handlersList.add(new VizEventTypeHandler(VizEvent.Type.MOUSE_MIDDLE_CLICK, false)); - handlersList.add(new VizEventTypeHandler(VizEvent.Type.MOUSE_MIDDLE_PRESS, false)); - handlersList.add(new VizEventTypeHandler(VizEvent.Type.MOUSE_RIGHT_CLICK, false)); - handlersList.add(new VizEventTypeHandler(VizEvent.Type.MOUSE_RIGHT_PRESS, false)); - handlersList.add(new VizEventTypeHandler(VizEvent.Type.MOUSE_MOVE, true)); - handlersList.add(new VizEventTypeHandler(VizEvent.Type.START_DRAG, false)); - handlersList.add(new VizEventTypeHandler(VizEvent.Type.DRAG, true)); - handlersList.add(new VizEventTypeHandler(VizEvent.Type.STOP_DRAG, false)); - handlersList.add(new VizEventTypeHandler(VizEvent.Type.NODE_LEFT_CLICK, false)); - handlersList.add(new VizEventTypeHandler(VizEvent.Type.MOUSE_LEFT_PRESSING, false)); - handlersList.add(new VizEventTypeHandler(VizEvent.Type.MOUSE_RELEASED, false)); - handlersList.add(new VizEventTypeHandler(VizEvent.Type.NODE_LEFT_PRESS, false)); - handlersList.add(new VizEventTypeHandler(VizEvent.Type.NODE_LEFT_PRESSING, false)); - Collections.sort(handlersList, new Comparator() { - @Override - public int compare(Object o1, Object o2) { - VizEvent.Type t1 = ((VizEventTypeHandler) o1).type; - VizEvent.Type t2 = ((VizEventTypeHandler) o2).type; - return t1.compareTo(t2); + return drag() || startDragConsumed; + case MouseEvent.EVENT_MOUSE_MOVED: + return mouseMove(model); + case MouseEvent.EVENT_MOUSE_CLICKED: + switch (mouseEvent.getButton()) { + case MOUSE_LEFT_BUTTON: + return mouseLeftClick(model); + case MOUSE_RIGHT_BUTTON: + return mouseRightClick(parentComponent, canvasManager, model); + case MOUSE_WHEEL_BUTTON: + return mouseMiddleClick(); + } + return false; + case MouseEvent.EVENT_MOUSE_PRESSED: + switch (mouseEvent.getButton()) { + case MOUSE_LEFT_BUTTON: + return mouseLeftPress(model); + case MOUSE_RIGHT_BUTTON: + return mouseRightPress(); + case MOUSE_WHEEL_BUTTON: + return mouseMiddlePress(); + } + return false; + case MouseEvent.EVENT_MOUSE_WHEEL_MOVED: + //NOOP + return false; + case MouseEvent.EVENT_MOUSE_RELEASED: + if (dragging) { + dragging = false; + stopDrag(); + } + mouseReleased(); + + // Stop pressing thread if it was running + if (mouseEvent.getButton() == MOUSE_LEFT_BUTTON) { + stopPressingThread(); + } + + return false;//Never consume release events + case MouseEvent.EVENT_MOUSE_EXITED: + // Stop the thread if exit mouse event is received + stopPressingThread(); + default: + //NOOP + return false; + } + } + + public boolean mouseLeftClick(VizEngineModel model) { + final GraphIndex graphIndex = model.getGraphIndex(); + final GraphSelection graphSelection = model.getGraphSelection(); + + if (graphSelection == null) { + return false; + } + + Node[] clickedNodes = null; + if (!graphSelection.getMode().equals(GraphSelection.GraphSelectionMode.CUSTOM_SELECTION)) { + clickedNodes = graphSelection.getSelectedNodes().toArray(new Node[0]); + } else { + clickedNodes = graphIndex.getNodesUnderPosition( + mouseWorldPosition.x, + mouseWorldPosition.y, + model.getRenderingOptions().getNodeScale() + ).toArray(); + } + + //Node Left click + final VisualizationEventTypeHandler nodeLeftClickHandler = + handlers[VisualizationEvent.Type.NODE_LEFT_CLICK.ordinal()]; + if (nodeLeftClickHandler.hasListeners() && clickedNodes.length > 0) { + if (nodeLeftClickHandler.dispatch(clickedNodes)) { + return true; } - }); - handlers = handlersList.toArray(new VizEventTypeHandler[0]); + } + + //Mouse left click + final VisualizationEventTypeHandler mouseLeftClickHandler = + handlers[VisualizationEvent.Type.MOUSE_LEFT_CLICK.ordinal()]; + if (mouseLeftClickHandler.hasListeners() && clickedNodes.length == 0) { + return mouseLeftClickHandler.dispatch( + getScreenAndWorldPositionsArray(mouseScreenPosition, mouseWorldPosition) + ); + } + + return false; } - @Override - public void mouseLeftClick() { -// //Node Left click -// VizEventTypeHandler nodeLeftHandler = handlers[VizEvent.Type.NODE_LEFT_CLICK.ordinal()]; -// if (nodeLeftHandler.hasListeners() && VizController.getInstance().getVizConfig().isSelectionEnable()) { -// //Check if some node are selected -// Model[] modelArray = engine.getSelectedObjects(AbstractEngine.CLASS_NODE); -// if (modelArray.length > 0) { -// Node[] nodeArray = new Node[modelArray.length]; -// for (int i = 0; i < modelArray.length; i++) { -// nodeArray[i] = ((NodeModel) modelArray[i]).getNode(); -// } -// nodeLeftHandler.dispatch(nodeArray); -// } -// } -// -// //Mouse left click -// VizEventTypeHandler mouseLeftHandler = handlers[VizEvent.Type.MOUSE_LEFT_CLICK.ordinal()]; -// if (mouseLeftHandler.hasListeners()) { -// Model[] modelArray = engine.getSelectedObjects(AbstractEngine.CLASS_NODE); -// if (modelArray.length == 0 || !VizController.getInstance().getVizConfig().isSelectionEnable()) { -// float[] mousePositionViewport = graphIO.getMousePosition(); -// float[] mousePosition3d = graphIO.getMousePosition3d(); -// float[] mousePos = new float[]{mousePositionViewport[0], mousePositionViewport[1], mousePosition3d[0], mousePosition3d[1]}; -// handlers[VizEvent.Type.MOUSE_LEFT_CLICK.ordinal()].dispatch(mousePos); -// } -// } + private float[] getScreenAndWorldPositionsArray(Vector2i screenPosition, Vector2f worldPosition) { + return new float[] { + screenPosition.x(), screenPosition.y(), + worldPosition.x(), worldPosition.y() + }; } - @Override - public void mouseLeftPress() { -// handlers[VizEvent.Type.MOUSE_LEFT_PRESS.ordinal()].dispatch(); -// pressingTick = PRESSING_FREQUENCY; -// VizEventTypeHandler pressHandler = handlers[VizEvent.Type.NODE_LEFT_PRESS.ordinal()]; -// if (pressHandler.hasListeners()) { -// //Check if some node are selected -// Model[] modelArray = engine.getSelectedObjects(AbstractEngine.CLASS_NODE); -// if (modelArray.length > 0) { -// Node[] nodeArray = new Node[modelArray.length]; -// for (int i = 0; i < modelArray.length; i++) { -// nodeArray[i] = ((NodeModel) modelArray[i]).getNode(); -// } -// pressHandler.dispatch(nodeArray); -// } -// } + public boolean mouseLeftPress(VizEngineModel model) { + final GraphSelection selectionIndex = model.getGraphSelection(); + + if (selectionIndex == null) { + return false; + } + + final VisualizationEventTypeHandler nodeLefPressingHandler = + handlers[VisualizationEvent.Type.NODE_LEFT_PRESSING.ordinal()]; + if (nodeLefPressingHandler.hasListeners()) { + //Check if some node are selected + final Collection selectedNodes = selectionIndex.getSelectedNodes(); + if (!selectedNodes.isEmpty()) { + startPressingThread(model); + return nodeLefPressingHandler.dispatch(toArray(selectedNodes)); + } + } + + final VisualizationEventTypeHandler nodeLefPressHandler = + handlers[VisualizationEvent.Type.NODE_LEFT_PRESS.ordinal()]; + if (nodeLefPressHandler.hasListeners()) { + //Check if some node are selected + final Collection selectedNodes = selectionIndex.getSelectedNodes(); + if (!selectedNodes.isEmpty()) { + return nodeLefPressHandler.dispatch(toArray(selectedNodes)); + } + } + + return handlers[VisualizationEvent.Type.MOUSE_LEFT_PRESS.ordinal()].dispatch(); } - @Override - public void mouseMiddleClick() { - handlers[VizEvent.Type.MOUSE_MIDDLE_CLICK.ordinal()].dispatch(); + private void startPressingThread(final VizEngineModel model) { + final GraphSelection selectionIndex = model.getGraphSelection(); + if (selectionIndex == null) { + return; + } + synchronized (pressingLock) { + // Stop any existing pressing thread + stopPressingThread(); + + shouldStopPressing = false; + pressingThread = new Thread(() -> { + final long intervalMs = 1000 / PRESSING_FREQUENCY; + + while (!shouldStopPressing && !Thread.currentThread().isInterrupted()) { + try { + Thread.sleep(intervalMs); + + if (!shouldStopPressing) { + final Collection selectedNodes = selectionIndex.getSelectedNodes(); + if (!selectedNodes.isEmpty()) { + final Node[] nodesArray = toArray(selectedNodes); + handlers[VisualizationEvent.Type.NODE_LEFT_PRESSING.ordinal()].dispatch(nodesArray); + } + } + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + break; + } + } + }); + + pressingThread.setDaemon(true); + pressingThread.start(); + } } - @Override - public void mouseMiddlePress() { - handlers[VizEvent.Type.MOUSE_LEFT_PRESS.ordinal()].dispatch(); + private void stopPressingThread() { + synchronized (pressingLock) { + shouldStopPressing = true; + if (pressingThread != null && pressingThread.isAlive()) { + pressingThread.interrupt(); + try { + pressingThread.join(100); // Wait up to 100ms for thread to finish + } catch (InterruptedException e) { + Thread.currentThread().interrupt(); + } + } + pressingThread = null; + } } - @Override - public void mouseMove() { - handlers[VizEvent.Type.MOUSE_MOVE.ordinal()].dispatch(); + private Node[] toArray(Collection selectedNodes) { + return selectedNodes.toArray(new Node[0]); } - @Override - public void mouseRightClick() { - handlers[VizEvent.Type.MOUSE_RIGHT_CLICK.ordinal()].dispatch(); + public boolean mouseMiddleClick() { + return handlers[VisualizationEvent.Type.MOUSE_MIDDLE_CLICK.ordinal()].dispatch(); } - @Override - public void mouseRightPress() { - handlers[VizEvent.Type.MOUSE_RIGHT_PRESS.ordinal()].dispatch(); + public boolean mouseMiddlePress() { + return handlers[VisualizationEvent.Type.MOUSE_MIDDLE_PRESS.ordinal()].dispatch(); } - private static final int PRESSING_FREQUENCY = 5; - private int pressingTick = 0; - - @Override - public void mouseLeftPressing() { -// if (pressingTick++ >= PRESSING_FREQUENCY) { -// pressingTick = 0; -// VizEventTypeHandler nodeHandler = handlers[VizEvent.Type.NODE_LEFT_PRESSING.ordinal()]; -// if (nodeHandler.hasListeners()) { -// //Check if some node are selected -// Model[] modelArray = engine.getSelectedObjects(AbstractEngine.CLASS_NODE); -// if (modelArray.length > 0) { -// Node[] nodeArray = new Node[modelArray.length]; -// for (int i = 0; i < modelArray.length; i++) { -// nodeArray[i] = ((NodeModel) modelArray[i]).getNode(); -// } -// nodeHandler.dispatch(nodeArray); -// } -// } -// } + + public boolean mouseMove(VizEngineModel model) { + return handlers[VisualizationEvent.Type.MOUSE_MOVE.ordinal()].dispatch(model); } - @Override - public void startDrag() { - handlers[VizEvent.Type.START_DRAG.ordinal()].dispatch(); + public boolean mouseRightClick(Component parentComponent, VizEngineGraphCanvasManager canvasManager, + VizEngineModel model) { + VizController controller = Lookup.getDefault().lookup(VizController.class); + if (controller != null && controller.getModel() != null && VizConfig.isEnableContextMenu() && + model.getGraphSelection() != null) { + GraphContextMenu popupMenu = new GraphContextMenu(); + float globalScale = canvasManager.getSurfaceScale().orElse(1.0f); + int x = (int) (mouseScreenPosition.x / globalScale); + int y = (int) (mouseScreenPosition.y / globalScale); + popupMenu.getMenu(model).show(parentComponent, x, y); + } + + return handlers[VisualizationEvent.Type.MOUSE_RIGHT_CLICK.ordinal()].dispatch(); + } + + public boolean mouseRightPress() { + return handlers[VisualizationEvent.Type.MOUSE_RIGHT_PRESS.ordinal()].dispatch(); + } + + public boolean startDrag() { + return handlers[VisualizationEvent.Type.START_DRAG.ordinal()].dispatch(); } - @Override public void stopDrag() { - handlers[VizEvent.Type.STOP_DRAG.ordinal()].dispatch(); + handlers[VisualizationEvent.Type.STOP_DRAG.ordinal()].dispatch(); } - private static final int DRAGGING_FREQUENCY = 5; - private int draggingTick = 0; - - @Override - public void drag() { - if (draggingTick++ >= DRAGGING_FREQUENCY) { - draggingTick = 0; - VizEventTypeHandler handler = handlers[VizEvent.Type.DRAG.ordinal()]; - if (handler.hasListeners()) { - float[] mouseDrag = Arrays.copyOf(graphIO.getMouseDrag(), 4); - mouseDrag[2] = graphIO.getMouseDrag3d()[0]; - mouseDrag[3] = graphIO.getMouseDrag3d()[1]; - handler.dispatch(mouseDrag); - } + + public boolean drag() { + final VisualizationEventTypeHandler handler = handlers[VisualizationEvent.Type.DRAG.ordinal()]; + if (handler.hasListeners()) { + final Vector2i dragScreenDisplacement = new Vector2i(mouseScreenPosition); + dragScreenDisplacement.sub(dragStartMouseScreenPosition); + final Vector2f dragWorldDisplacement = new Vector2f(mouseWorldPosition); + dragWorldDisplacement.sub(dragStartMouseWorldPosition2d); + + return handler.dispatch( + getScreenAndWorldPositionsArray(dragScreenDisplacement, dragWorldDisplacement) + ); } + + return false; } - @Override public void mouseReleased() { - handlers[VizEvent.Type.MOUSE_RELEASED.ordinal()].dispatch(); + handlers[VisualizationEvent.Type.MOUSE_RELEASED.ordinal()].dispatch(); } //Listeners - @Override - public boolean hasListeners(VizEvent.Type type) { + public boolean hasListeners(VisualizationEvent.Type type) { return handlers[type.ordinal()].hasListeners(); } - @Override - public void addListener(VizEventListener listener) { + public void addListener(VisualizationEventListener listener) { handlers[listener.getType().ordinal()].addListener(listener); } - @Override - public void removeListener(VizEventListener listener) { + public void removeListener(VisualizationEventListener listener) { + if (listener == null) { + return; + } handlers[listener.getType().ordinal()].removeListener(listener); } - @Override - public void addListener(VizEventListener[] listeners) { - for (int i = 0; i < listeners.length; i++) { - handlers[listeners[i].getType().ordinal()].addListener(listeners[i]); - } - } + private static class VisualizationEventTypeHandler { - @Override - public void removeListener(VizEventListener[] listeners) { - for (int i = 0; i < listeners.length; i++) { - handlers[listeners[i].getType().ordinal()].removeListener(listeners[i]); - } - } + private static final ScheduledExecutorService THROTTLE_EXECUTOR = + Executors.newSingleThreadScheduledExecutor(r -> { + Thread t = new Thread(r, "VizEvent-Throttle"); + t.setDaemon(true); + return t; + }); - private class VizEventTypeHandler { + protected final VisualizationEvent.Type type; + private final long throttleIntervalNanos; + protected List> listeners; - //Settings - private final boolean limitRunning; - //Data - protected List> listeners; - protected final VizEvent.Type type; - protected Runnable runnable; - //States - protected boolean running; + private long lastDispatchTimeNanos; + private Object pendingData; + private boolean hasPendingDispatch; + private ScheduledFuture scheduledFlush; - public VizEventTypeHandler(VizEvent.Type type, boolean limitRunning) { - this.limitRunning = limitRunning; + public VisualizationEventTypeHandler(VisualizationEvent.Type type, long throttleIntervalMs) { this.type = type; - this.listeners = new ArrayList>(); - runnable = new Runnable() { - @Override - public void run() { - fireVizEvent(null); - running = false; - } - }; + this.throttleIntervalNanos = TimeUnit.MILLISECONDS.toNanos(throttleIntervalMs); + this.listeners = new ArrayList<>(); } - protected synchronized void addListener(VizEventListener listener) { - WeakReference weakListener = new WeakReference(listener); + protected synchronized void addListener(VisualizationEventListener listener) { + if (listener == null) { + return; + } + + final WeakReference weakListener = new WeakReference<>(listener); listeners.add(weakListener); } - protected synchronized void removeListener(VizEventListener listener) { - for (Iterator> itr = listeners.iterator(); itr.hasNext();) { - WeakReference li = itr.next(); - if (li.get() == listener) { - itr.remove(); - } - } + protected synchronized void removeListener(VisualizationEventListener listener) { + listeners.removeIf(li -> li.get() == listener); } - protected void dispatch() { - if (limitRunning && running) { - return; + protected boolean dispatch() { + return dispatchInternal(null); + } + + protected boolean dispatch(final Object data) { + return dispatchInternal(data); + } + + private synchronized boolean dispatchInternal(final Object data) { + if (listeners.isEmpty()) { + return false; } - if (listeners.size() > 0) { - running = true; - pool.submit(runnable); + + if (throttleIntervalNanos <= 0) { + return fireVisualizationEvent(data); } - } - protected void dispatch(final Object data) { - if (limitRunning && running) { - return; + final long now = System.nanoTime(); + final long elapsed = now - lastDispatchTimeNanos; + + if (elapsed >= throttleIntervalNanos) { + lastDispatchTimeNanos = now; + cancelScheduledFlush(); + hasPendingDispatch = false; + return fireVisualizationEvent(data); + } else { + pendingData = data; + hasPendingDispatch = true; + if (scheduledFlush == null) { + final long delayNanos = throttleIntervalNanos - elapsed; + scheduledFlush = THROTTLE_EXECUTOR.schedule( + this::flushPending, delayNanos, TimeUnit.NANOSECONDS + ); + } + return false; } - if (listeners.size() > 0) { - running = true; - pool.submit(new Runnable() { - @Override - public void run() { - fireVizEvent(data); - running = false; - } - }); + } + + private synchronized void flushPending() { + scheduledFlush = null; + if (hasPendingDispatch) { + lastDispatchTimeNanos = System.nanoTime(); + hasPendingDispatch = false; + final Object data = pendingData; + pendingData = null; + try { + fireVisualizationEvent(data); + } catch (Exception e) { + Logger.getLogger(VizEngine.class.getSimpleName()).log(Level.SEVERE, null, e); + } } } - protected boolean isRunning() { - return running; + private void cancelScheduledFlush() { + if (scheduledFlush != null) { + scheduledFlush.cancel(false); + scheduledFlush = null; + } } - private synchronized void fireVizEvent(Object data) { - VizEvent event = new VizEvent(this, type, data); - for (int i = 0; i < listeners.size(); i++) { - WeakReference weakListener = listeners.get(i); - VizEventListener v = weakListener.get(); - v.handleEvent(event); + private boolean fireVisualizationEvent(Object data) { + final VisualizationEvent event = new VizEvent(this, type, data); + for (final WeakReference weakListener : listeners) { + final VisualizationEventListener listener = weakListener.get(); + + if (listener != null) { + final boolean consumed = listener.handleEvent(event); + + if (consumed) { + return true; + } + } } + + return false; } - public boolean hasListeners() { - return listeners.size() > 0; + public synchronized boolean hasListeners() { + return !listeners.isEmpty(); } protected int getIndex() { diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/VizEvent.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/events/VizEvent.java similarity index 82% rename from modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/VizEvent.java rename to modules/VisualizationImpl/src/main/java/org/gephi/visualization/events/VizEvent.java index afe1a9e349..05180297c8 100644 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/apiimpl/VizEvent.java +++ b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/events/VizEvent.java @@ -38,35 +38,18 @@ Development and Distribution License("CDDL") (collectively, the Contributor(s): Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.visualization.apiimpl; + */ + +package org.gephi.visualization.events; import java.util.EventObject; +import org.gephi.visualization.api.VisualizationEvent; /** - * * @author Mathieu Bastian */ -public class VizEvent extends EventObject { - - public enum Type { - - START_DRAG, - DRAG, - STOP_DRAG, - MOUSE_MOVE, - MOUSE_LEFT_PRESS, - MOUSE_MIDDLE_PRESS, - MOUSE_RIGHT_PRESS, - MOUSE_LEFT_CLICK, - MOUSE_MIDDLE_CLICK, - MOUSE_RIGHT_CLICK, - NODE_LEFT_CLICK, - MOUSE_LEFT_PRESSING, - MOUSE_RELEASED, - NODE_LEFT_PRESS, - NODE_LEFT_PRESSING, - }; +public class VizEvent extends EventObject implements VisualizationEvent { + private Type type; private Object data; @@ -81,10 +64,12 @@ public VizEvent(Object source, Type t, Object data) { this.data = data; } + @Override public Type getType() { return type; } + @Override public Object getData() { return data; } diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/Model.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/Model.java deleted file mode 100644 index 7a465d886e..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/Model.java +++ /dev/null @@ -1,14 +0,0 @@ -package org.gephi.visualization.model; - -import javax.media.opengl.GL2; -import javax.media.opengl.glu.GLU; -import org.gephi.visualization.VizModel; - -/** - * - * @author mbastian - */ -public interface Model { - - public void display(GL2 gl, GLU glu, VizModel model); -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/ModelClass.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/ModelClass.java deleted file mode 100644 index ada062e257..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/ModelClass.java +++ /dev/null @@ -1,178 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.model; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import javax.media.opengl.GL2; -import javax.media.opengl.glu.GLU; -import org.gephi.visualization.VizController; -import org.gephi.visualization.api.initializer.Modeler; - -/** - * - * @author Mathieu Bastian - */ -public class ModelClass { - - private final String name; - private final int classId; - private boolean enabled; - private int cacheMarker; - private int selectionId = 0; - //Config - private final boolean lod; - private final boolean selectable; - private final boolean clickable; - private final boolean onlyAutoSelect; - private Modeler currentModeler; - private List modelers; - private Modeler newModeler; - - public ModelClass(int classId, String name, boolean lod, boolean selectable, boolean clickable, boolean onlyAutoSelect) { - this.classId = classId; - this.name = name; - this.lod = lod; - this.selectable = selectable; - this.clickable = clickable; - this.onlyAutoSelect = onlyAutoSelect; - modelers = new ArrayList(); - } - - public void lod(Iterator iterator) { - for (; iterator.hasNext();) { - Model obj = iterator.next(); - currentModeler.chooseModel(obj); - } - } - - public void beforeDisplay(GL2 gl, GLU glu) { - currentModeler.beforeDisplay(gl, glu); - } - - public void afterDisplay(GL2 gl, GLU glu) { - currentModeler.afterDisplay(gl, glu); - } - - public void addModeler(Modeler modeler) { - modelers.add(modeler); - } - - public void setCurrentModeler(Modeler modeler) { - if (currentModeler == null) { - currentModeler = modeler; - } - if (modeler != currentModeler) { - newModeler = modeler; - VizController.getInstance().getVizModel().setNodeModeler(newModeler.getClass().getSimpleName()); - } - } - - public void setCurrentModeler(String className) { - for (Modeler mod : modelers) { - if (mod.getClass().getSimpleName().equals(className)) { - setCurrentModeler(mod); - } - } - } - - public Modeler getCurrentModeler() { - return currentModeler; - } - - public List getModelers() { - return modelers; - } - - public void swapModelers() { - if (newModeler != null) { - currentModeler = newModeler; - newModeler = null; - VizController.getInstance().getVizModel().setNodeModeler(currentModeler.getClass().getSimpleName()); - } - } - - public int getClassId() { - return classId; - } - - public boolean isLod() { - return lod; - } - - public boolean isSelectable() { - return selectable; - } - - public boolean isEnabled() { - return enabled; - } - - public boolean isClickable() { - return clickable; - } - - public boolean isOnlyAutoSelect() { - return onlyAutoSelect; - } - - public void setEnabled(boolean enabled) { - this.enabled = enabled; - } - - public int getCacheMarker() { - return cacheMarker; - } - - public void setCacheMarker(int cacheMarker) { - this.cacheMarker = cacheMarker; - } - - public int getSelectionId() { - return selectionId; - } - - public void setSelectionId(int selectionId) { - this.selectionId = selectionId; - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/ModelClassLibrary.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/ModelClassLibrary.java deleted file mode 100644 index 8e477602aa..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/ModelClassLibrary.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.model; - -import org.gephi.visualization.VizController; -import org.gephi.visualization.model.edge.EdgeModeler; -import org.gephi.visualization.model.node.NodeDiskModeler; -import org.gephi.visualization.model.node.NodeRectangleModeler; -import org.gephi.visualization.model.node.NodeSphereModeler; -import org.gephi.visualization.opengl.CompatibilityEngine; - -/** - * - * @author Mathieu Bastian - */ -public class ModelClassLibrary { - - private ModelClass nodeClass; - private ModelClass edgeClass; - - public void createModelClassesCompatibility(CompatibilityEngine engine) { - //NODE - nodeClass = new ModelClass(0, "NODE", true, true, true, false); - NodeSphereModeler modeler3d = new NodeSphereModeler(engine); - NodeDiskModeler modeler2d = new NodeDiskModeler(engine); - NodeRectangleModeler modelerRect = new NodeRectangleModeler(engine); - nodeClass.addModeler(modeler3d); - nodeClass.addModeler(modeler2d); - nodeClass.addModeler(modelerRect); - if (VizController.getInstance().getVizModel().isUse3d()) { - nodeClass.setCurrentModeler(modeler3d); - } else { - nodeClass.setCurrentModeler(modeler2d); - } - - //EDGE - edgeClass = new ModelClass(1, "EDGE", false, true, false, true); - EdgeModeler edgeModeler = new EdgeModeler(engine); - edgeClass.addModeler(edgeModeler); - edgeClass.setCurrentModeler(edgeModeler); - } - - public ModelClass getNodeClass() { - return nodeClass; - } - - public ModelClass getEdgeClass() { - return edgeClass; - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/TextModel.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/TextModel.java deleted file mode 100644 index 3eb37e1342..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/TextModel.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package org.gephi.visualization.model; - -import java.awt.geom.Rectangle2D; -import org.gephi.graph.api.ElementProperties; - -/** - * - * @author mbastian - */ -public interface TextModel { - - public boolean hasCustomTextColor(); - - public void setText(String text); - - public float getTextWidth(); - - public float getTextHeight(); - - public void setTextBounds(Rectangle2D bounds); - - public String getText(); - - public float getTextSize(); - - public float getTextR(); - - public float getTextG(); - - public float getTextB(); - - public float getTextAlpha(); - - public boolean isTextVisible(); - - public ElementProperties getElementProperties(); -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/edge/Edge2dModel.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/edge/Edge2dModel.java deleted file mode 100644 index 02a255cd4d..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/edge/Edge2dModel.java +++ /dev/null @@ -1,345 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.model.edge; - -import javax.media.opengl.GL2; -import javax.media.opengl.glu.GLU; -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.Node; -import org.gephi.lib.gleem.linalg.Vec2f; -import org.gephi.visualization.GraphLimits; -import org.gephi.visualization.VizModel; -import org.gephi.visualization.model.node.NodeModel; - -/** - * - * @author Mathieu Bastian - */ -public class Edge2dModel extends EdgeModel { - - protected static float ARROW_WIDTH = 1f; - protected static float ARROW_HEIGHT = 1.1f; - protected static final float WEIGHT_MINIMUM = 0.4f; - protected static final float WEIGHT_MAXIMUM = 8f; - //An edge is set in both source node and target node octant. Hence edges are not drawn when none of - //these octants are visible. - protected final NodeModel sourceModel; - protected final NodeModel targetModel; - - public Edge2dModel(Edge edge, NodeModel sourceModel, NodeModel targetModel) { - super(edge); - this.sourceModel = sourceModel; - this.targetModel = targetModel; - } - - @Override - public void display(GL2 gl, GLU glu, VizModel vizModel) { - boolean selec = selected || isAutoSelected(); - - if (!selec && vizModel.isHideNonSelectedEdges()) { - return; - } - if (selec && vizModel.isAutoSelectNeighbor()) { - sourceModel.mark = true; - targetModel.mark = true; - } - - //Edge weight - GraphLimits limits = vizModel.getLimits(); - float w; - - float weightRatio; - if (limits.getMinWeight() == limits.getMaxWeight()) { - weightRatio = WEIGHT_MINIMUM / limits.getMinWeight(); - } else { - weightRatio = Math.abs((WEIGHT_MAXIMUM - WEIGHT_MINIMUM) / (limits.getMaxWeight() - limits.getMinWeight())); - } - float edgeScale = vizModel.getEdgeScale(); - w = (float) edge.getWeight(); - w = ((w - limits.getMinWeight()) * weightRatio + WEIGHT_MINIMUM) * edgeScale; - // - - float x1 = edge.getSource().x(); - float x2 = edge.getTarget().x(); - float y1 = edge.getSource().y(); - float y2 = edge.getTarget().y(); - float t1 = w; - float t2 = w; - - float sideVectorX = y1 - y2; - float sideVectorY = x2 - x1; - float norm = (float) Math.sqrt(sideVectorX * sideVectorX + sideVectorY * sideVectorY); - sideVectorX /= norm; - sideVectorY /= norm; - - float x1Thick = sideVectorX / 2f * t1; - float x2Thick = sideVectorX / 2f * t2; - float y1Thick = sideVectorY / 2f * t1; - float y2Thick = sideVectorY / 2f * t2; - - if (!selec) { - float r; - float g; - float b; - float a = edge.alpha(); - if (a == 0f) { - if (vizModel.isEdgeHasUniColor()) { - float[] uni = vizModel.getEdgeUniColor(); - r = uni[0]; - g = uni[1]; - b = uni[2]; - a = uni[3]; - } else { - Node source = edge.getSource(); - r = 0.498f * source.r(); - g = 0.498f * source.g(); - b = 0.498f * source.b(); - a = source.alpha(); - } - } else { - g = 0.498f * edge.g(); - b = 0.498f * edge.b(); - r = 0.498f * edge.r(); - } - if (vizModel.getConfig().isLightenNonSelected()) { - float lightColorFactor = vizModel.getConfig().getLightenNonSelectedFactor(); - a = a - (a - 0.01f) * lightColorFactor; - gl.glColor4f(r, g, b, a); - } else { - gl.glColor4f(r, g, b, a); - } - } else { - float r = 0f; - float g = 0f; - float b = 0f; - if (vizModel.isEdgeSelectionColor()) { - if (sourceModel.isSelected() && targetModel.isSelected()) { - float[] both = vizModel.getEdgeBothSelectionColor(); - r = both[0]; - g = both[1]; - b = both[2]; - } else if (sourceModel.isSelected()) { - float[] out = vizModel.getEdgeOutSelectionColor(); - r = out[0]; - g = out[1]; - b = out[2]; - } else if (targetModel.isSelected()) { - float[] in = vizModel.getEdgeInSelectionColor(); - r = in[0]; - g = in[1]; - b = in[2]; - } - } else { - if (edge.alpha() == 0f) { - Node source = edge.getSource(); - r = source.r(); - g = source.g(); - b = source.b(); - } else { - r = edge.r(); - g = edge.g(); - b = edge.b(); - } - } - gl.glColor4f(r, g, b, 1f); - } - - gl.glVertex2f(x1 + x1Thick, y1 + y1Thick); - gl.glVertex2f(x1 - x1Thick, y1 - y1Thick); - gl.glVertex2f(x2 - x2Thick, y2 - y2Thick); - gl.glVertex2f(x2 - x2Thick, y2 - y2Thick); - gl.glVertex2f(x2 + x2Thick, y2 + y2Thick); - gl.glVertex2f(x1 + x1Thick, y1 + y1Thick); - } - - @Override - public void displayArrow(GL2 gl, GLU glu, VizModel vizModel) { - if (!selected && vizModel.isHideNonSelectedEdges()) { - return; - } - - Node nodeFrom = edge.getSource(); - Node nodeTo = edge.getTarget(); - - //Edge weight - GraphLimits limits = vizModel.getLimits(); - float w; - - float weightRatio; - if (limits.getMinWeight() == limits.getMaxWeight()) { - weightRatio = Edge2dModel.WEIGHT_MINIMUM / limits.getMinWeight(); - } else { - weightRatio = Math.abs((Edge2dModel.WEIGHT_MAXIMUM - Edge2dModel.WEIGHT_MINIMUM) / (limits.getMaxWeight() - limits.getMinWeight())); - } - float edgeScale = vizModel.getEdgeScale(); - w = (float) edge.getWeight(); - w = ((w - limits.getMinWeight()) * weightRatio + Edge2dModel.WEIGHT_MINIMUM) * edgeScale; - - // - - //Edge size - float arrowWidth = ARROW_WIDTH * w * 2f; - float arrowHeight = ARROW_HEIGHT * w * 2f; - - float x2 = nodeTo.x(); - float y2 = nodeTo.y(); - float x1 = nodeFrom.x(); - float y1 = nodeFrom.y(); - - //Edge vector - Vec2f edgeVector = new Vec2f(x2 - x1, y2 - y1); - edgeVector.normalize(); - - //Get collision distance between nodeTo and arrow point - double angle = Math.atan2(y2 - y1, x2 - x1); - float collisionDistance = targetModel.getCollisionDistance(angle); - - //Point of the arrow - float targetX = x2 - edgeVector.x() * collisionDistance; - float targetY = y2 - edgeVector.y() * collisionDistance; - - //Base of the arrow - float baseX = targetX - edgeVector.x() * arrowHeight * 2f; - float baseY = targetY - edgeVector.y() * arrowHeight * 2f; - - //Side vector - float sideVectorX = y1 - y2; - float sideVectorY = x2 - x1; - float norm = (float) Math.sqrt(sideVectorX * sideVectorX + sideVectorY * sideVectorY); - sideVectorX /= norm; - sideVectorY /= norm; - - //Color - if (!selected) { - float r; - float g; - float b; - float a = edge.alpha(); - if (a == 0f) { - if (vizModel.isEdgeHasUniColor()) { - float[] uni = vizModel.getEdgeUniColor(); - r = uni[0]; - g = uni[1]; - b = uni[2]; - a = uni[3]; - } else { - Node source = edge.getSource(); - r = 0.498f * source.r(); - g = 0.498f * source.g(); - b = 0.498f * source.b(); - a = source.alpha(); - } - } else { - g = 0.498f * edge.g(); - b = 0.498f * edge.b(); - r = 0.498f * edge.r(); - a = edge.alpha(); - } - if (vizModel.getConfig().isLightenNonSelected()) { - float lightColorFactor = vizModel.getConfig().getLightenNonSelectedFactor(); - a = a - (a - 0.01f) * lightColorFactor; - gl.glColor4f(r, g, b, a); - } else { - gl.glColor4f(r, g, b, a); - } - } else { - float r = 0f; - float g = 0f; - float b = 0f; - if (vizModel.isEdgeSelectionColor()) { - if (sourceModel.isSelected() && targetModel.isSelected()) { - float[] both = vizModel.getEdgeBothSelectionColor(); - r = both[0]; - g = both[1]; - b = both[2]; - } else if (sourceModel.isSelected()) { - float[] out = vizModel.getEdgeOutSelectionColor(); - r = out[0]; - g = out[1]; - b = out[2]; - } else if (targetModel.isSelected()) { - float[] in = vizModel.getEdgeInSelectionColor(); - r = in[0]; - g = in[1]; - b = in[2]; - } - } else { - if (edge.alpha() == 0f) { - Node source = edge.getSource(); - r = source.r(); - g = source.g(); - b = source.b(); - } else { - r = edge.r(); - g = edge.g(); - b = edge.b(); - } - } - gl.glColor4f(r, g, b, 1f); - } - - //Draw the triangle - gl.glVertex2d(baseX + sideVectorX * arrowWidth, baseY + sideVectorY * arrowWidth); - gl.glVertex2d(baseX - sideVectorX * arrowWidth, baseY - sideVectorY * arrowWidth); - gl.glVertex2d(targetX, targetY); - } - - @Override - public boolean isAutoSelected() { - return sourceModel.isSelected() || targetModel.isSelected(); - } - - @Override - public boolean isSelected() { - return selected; - } - - @Override - public NodeModel getSourceModel() { - return sourceModel; - } - - @Override - public NodeModel getTargetModel() { - return targetModel; - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/edge/Edge3dModel.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/edge/Edge3dModel.java deleted file mode 100644 index f42776db8c..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/edge/Edge3dModel.java +++ /dev/null @@ -1,351 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.model.edge; - -import javax.media.opengl.GL2; -import javax.media.opengl.glu.GLU; -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.Node; -import org.gephi.lib.gleem.linalg.Vec3f; -import org.gephi.visualization.GraphLimits; -import org.gephi.visualization.VizController; -import org.gephi.visualization.VizModel; -import org.gephi.visualization.model.node.NodeModel; - -/** - * - * @author Mathieu Bastian - */ -public class Edge3dModel extends Edge2dModel { - - public Edge3dModel(Edge edge, NodeModel sourceModel, NodeModel targetModel) { - super(edge, sourceModel, targetModel); - } - - @Override - public void display(GL2 gl, GLU glu, VizModel vizModel) { - float[] cameraLocation = VizController.getInstance().getDrawable().getCameraLocation(); - - if (!selected && vizModel.isHideNonSelectedEdges()) { - return; - } - if (selected && vizModel.isAutoSelectNeighbor()) { - sourceModel.mark = true; - targetModel.mark = true; - } - - //Edge weight - GraphLimits limits = vizModel.getLimits(); - float w; - - float weightRatio; - if (limits.getMinWeight() == limits.getMaxWeight()) { - weightRatio = WEIGHT_MINIMUM / limits.getMinWeight(); - } else { - weightRatio = Math.abs((WEIGHT_MAXIMUM - WEIGHT_MINIMUM) / (limits.getMaxWeight() - limits.getMinWeight())); - } - float edgeScale = vizModel.getEdgeScale(); - w = (float) edge.getWeight(); - w = ((w - limits.getMinWeight()) * weightRatio + WEIGHT_MINIMUM) * edgeScale; - - // - - float x1 = edge.getSource().x(); - float x2 = edge.getTarget().x(); - float y1 = edge.getSource().y(); - float y2 = edge.getTarget().y(); - float z1 = edge.getSource().z(); - float z2 = edge.getTarget().z(); - float t1 = w; - float t2 = w; - - //CameraVector, from camera location to any point on the line - float cameraVectorX = x1 - cameraLocation[0]; - float cameraVectorY = y1 - cameraLocation[1]; - float cameraVectorZ = z1 - cameraLocation[2]; - - //This code has been replaced by followinf more efficient - //Vec3f edgeVector = new Vec3f(x2 - x1,y2 - y1,z2 - z1); - //Vec3f cameraVector = new Vec3f(drawable.getCameraLocation()[0] - (x2 - x1)/2f,drawable.getCameraLocation()[1] - (y2 - y1)/2f,drawable.getCameraLocation()[2] - (z2 - z1)/2f); - //Vec3f sideVector = edgeVector.cross(cameraVector); - //sideVector.normalize(); - - //Vector line - float edgeVectorX = x2 - x1; - float edgeVectorY = y2 - y1; - float edgeVectorZ = z2 - z1; - - //Cross product - float sideVectorX = edgeVectorY * cameraVectorZ - edgeVectorZ * cameraVectorY; - float sideVectorY = edgeVectorZ * cameraVectorX - edgeVectorX * cameraVectorZ; - float sideVectorZ = edgeVectorX * cameraVectorY - edgeVectorY * cameraVectorX; - - //Normalize - float norm = (float) Math.sqrt(sideVectorX * sideVectorX + sideVectorY * sideVectorY + sideVectorZ * sideVectorZ); - if (norm > 0f) // Avoid divizion by zero if cameraVector & sideVector colinear - { - sideVectorX /= norm; - sideVectorY /= norm; - sideVectorZ /= norm; - } else { - sideVectorX = 0f; - sideVectorY = 0f; - sideVectorZ = 0f; - } - - float x1Thick = sideVectorX / 2f * t1; - float x2Thick = sideVectorX / 2f * t2; - float y1Thick = sideVectorY / 2f * t1; - float y2Thick = sideVectorY / 2f * t2; - float z1Thick = sideVectorZ / 2f * t1; - float z2Thick = sideVectorZ / 2f * t2; - - if (!selected) { - float r; - float g; - float b; - float a = edge.alpha(); - if (a == 0f) { - if (vizModel.isEdgeHasUniColor()) { - float[] uni = vizModel.getEdgeUniColor(); - r = uni[0]; - g = uni[1]; - b = uni[2]; - a = uni[3]; - } else { - Node source = edge.getSource(); - r = 0.498f * source.r(); - g = 0.498f * source.g(); - b = 0.498f * source.b(); - a = source.alpha(); - } - } else { - g = 0.498f * edge.g(); - b = 0.498f * edge.b(); - r = 0.498f * edge.r(); - a = edge.alpha(); - } - if (vizModel.getConfig().isLightenNonSelected()) { - float lightColorFactor = vizModel.getConfig().getLightenNonSelectedFactor(); - a = a - (a - 0.01f) * lightColorFactor; - gl.glColor4f(r, g, b, a); - } else { - gl.glColor4f(r, g, b, a); - } - } else { - float r = 0f; - float g = 0f; - float b = 0f; - if (vizModel.isEdgeSelectionColor()) { - if (sourceModel.isSelected() && targetModel.isSelected()) { - float[] both = vizModel.getEdgeBothSelectionColor(); - r = both[0]; - g = both[1]; - b = both[2]; - } else if (sourceModel.isSelected()) { - float[] out = vizModel.getEdgeOutSelectionColor(); - r = out[0]; - g = out[1]; - b = out[2]; - } else if (targetModel.isSelected()) { - float[] in = vizModel.getEdgeInSelectionColor(); - r = in[0]; - g = in[1]; - b = in[2]; - } - } else { - if (edge.alpha() == 0f) { - Node source = edge.getSource(); - r = source.r(); - g = source.g(); - b = source.b(); - } else { - r = edge.r(); - g = edge.g(); - b = edge.b(); - } - } - gl.glColor4f(r, g, b, 1f); - } - - gl.glVertex3f(x1 + x1Thick, y1 + y1Thick, z1 + z1Thick); - gl.glVertex3f(x1 - x1Thick, y1 - y1Thick, z1 - z1Thick); - gl.glVertex3f(x2 - x2Thick, y2 - y2Thick, z2 - z2Thick); - gl.glVertex3f(x2 - x2Thick, y2 - y2Thick, z2 - z2Thick); - gl.glVertex3f(x2 + x2Thick, y2 + y2Thick, z2 + z2Thick); - gl.glVertex3f(x1 + x1Thick, y1 + y1Thick, z1 + z1Thick); - - } - - @Override - public void displayArrow(GL2 gl, GLU glu, VizModel vizModel) { - float[] cameraLocation = VizController.getInstance().getDrawable().getCameraLocation(); - if (!selected && vizModel.isHideNonSelectedEdges()) { - return; - } - - Node nodeFrom = edge.getSource(); - Node nodeTo = edge.getTarget(); - - //Edge weight - GraphLimits limits = vizModel.getLimits(); - float w; - - float weightRatio; - if (limits.getMinWeight() == limits.getMaxWeight()) { - weightRatio = Edge2dModel.WEIGHT_MINIMUM / limits.getMinWeight(); - } else { - weightRatio = Math.abs((Edge2dModel.WEIGHT_MAXIMUM - Edge2dModel.WEIGHT_MINIMUM) / (limits.getMaxWeight() - limits.getMinWeight())); - } - float edgeScale = vizModel.getEdgeScale(); - w = (float) edge.getWeight(); - w = ((w - limits.getMinWeight()) * weightRatio + Edge2dModel.WEIGHT_MINIMUM) * edgeScale; - - // - - //Edge size - float arrowWidth = ARROW_WIDTH * w * 2f; - float arrowHeight = ARROW_HEIGHT * w * 2f; - - //Edge vector - Vec3f edgeVector = new Vec3f(nodeTo.x() - nodeFrom.x(), nodeTo.y() - nodeFrom.y(), nodeTo.z() - nodeFrom.z()); - edgeVector.normalize(); - - //Get collision distance between nodeTo and arrow point - double angle = Math.atan2(nodeTo.y() - nodeFrom.y(), nodeTo.x() - nodeFrom.x()); - float collisionDistance = targetModel.getCollisionDistance(angle); - - float x2 = nodeTo.x(); - float y2 = nodeTo.y(); - float z2 = nodeTo.z(); - - //Point of the arrow - float targetX = x2 - edgeVector.x() * collisionDistance; - float targetY = y2 - edgeVector.y() * collisionDistance; - float targetZ = z2 - edgeVector.z() * collisionDistance; - - //Base of the arrow - float baseX = targetX - edgeVector.x() * arrowHeight * 2f; - float baseY = targetY - edgeVector.y() * arrowHeight * 2f; - float baseZ = targetZ - edgeVector.z() * arrowHeight * 2f; - - //Camera vector - Vec3f cameraVector = new Vec3f(targetX - cameraLocation[0], targetY - cameraLocation[1], targetZ - cameraLocation[2]); - - //Side vector - Vec3f sideVector = edgeVector.cross(cameraVector); - sideVector.normalize(); - - //Draw the triangle - if (!selected) { - float r; - float g; - float b; - float a = edge.alpha(); - if (a == 0f) { - if (vizModel.isEdgeHasUniColor()) { - float[] uni = vizModel.getEdgeUniColor(); - r = uni[0]; - g = uni[1]; - b = uni[2]; - a = uni[3]; - } else { - Node source = edge.getSource(); - r = 0.498f * source.r(); - g = 0.498f * source.g(); - b = 0.498f * source.b(); - a = source.alpha(); - } - } else { - g = 0.498f * edge.g(); - b = 0.498f * edge.b(); - r = 0.498f * edge.r(); - a = edge.alpha(); - } - if (vizModel.getConfig().isLightenNonSelected()) { - float lightColorFactor = vizModel.getConfig().getLightenNonSelectedFactor(); - a = a - (a - 0.01f) * lightColorFactor; - gl.glColor4f(r, g, b, a); - } else { - gl.glColor4f(r, g, b, a); - } - } else { - float r = 0f; - float g = 0f; - float b = 0f; - if (vizModel.isEdgeSelectionColor()) { - if (sourceModel.isSelected() && targetModel.isSelected()) { - float[] both = vizModel.getEdgeBothSelectionColor(); - r = both[0]; - g = both[1]; - b = both[2]; - } else if (sourceModel.isSelected()) { - float[] out = vizModel.getEdgeOutSelectionColor(); - r = out[0]; - g = out[1]; - b = out[2]; - } else if (targetModel.isSelected()) { - float[] in = vizModel.getEdgeInSelectionColor(); - r = in[0]; - g = in[1]; - b = in[2]; - } - } else { - if (edge.alpha() == 0f) { - Node source = edge.getSource(); - r = source.r(); - g = source.g(); - b = source.b(); - } else { - r = edge.r(); - g = edge.g(); - b = edge.b(); - } - } - gl.glColor4f(r, g, b, 1f); - } - - gl.glVertex3d(baseX + sideVector.x() * arrowWidth, baseY + sideVector.y() * arrowWidth, baseZ + sideVector.z() * arrowWidth); - gl.glVertex3d(baseX - sideVector.x() * arrowWidth, baseY - sideVector.y() * arrowWidth, baseZ - sideVector.z() * arrowWidth); - gl.glVertex3d(targetX, targetY, targetZ); - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/edge/EdgeModel.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/edge/EdgeModel.java deleted file mode 100644 index 27d47d968c..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/edge/EdgeModel.java +++ /dev/null @@ -1,190 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.model.edge; - -import java.awt.geom.Rectangle2D; -import javax.media.opengl.GL2; -import javax.media.opengl.glu.GLU; -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.ElementProperties; -import org.gephi.visualization.VizModel; -import org.gephi.visualization.model.Model; -import org.gephi.visualization.model.TextModel; -import org.gephi.visualization.model.node.NodeModel; - -/** - * - * @author mbastian - */ -public abstract class EdgeModel implements Model, TextModel { - - protected final Edge edge; - //Flags - protected boolean selected; - //Text - protected Rectangle2D bounds; - //Mark - public int markTime; - //Id - protected int octantSourceId; - protected int octantTargetId; - - public EdgeModel(Edge edge) { - this.edge = edge; - - //Default - markTime = 0; - } - - public abstract NodeModel getSourceModel(); - - public abstract NodeModel getTargetModel(); - - public abstract boolean isAutoSelected(); - - public abstract void displayArrow(GL2 gl, GLU glu, VizModel model); - - public Edge getEdge() { - return edge; - } - - public void setSelected(boolean selected) { - this.selected = selected; - } - - public boolean isSelected() { - return selected; - } - - @Override - public boolean hasCustomTextColor() { - return edge.getTextProperties().getR() > 0; - } - - @Override - public void setText(String text) { - edge.getTextProperties().setText(text); - } - - @Override - public float getTextWidth() { - Rectangle2D rec = bounds; - if (rec != null) { - return (float) rec.getWidth(); - } - return 0f; - } - - @Override - public float getTextHeight() { - Rectangle2D rec = bounds; - if (rec != null) { - return (float) rec.getHeight(); - } - return 0f; - } - - @Override - public void setTextBounds(Rectangle2D bounds) { - this.bounds = bounds; - } - - @Override - public String getText() { - String t = edge.getTextProperties().getText(); - if (t == null) { - return edge.getLabel(); - } - return t; - } - - @Override - public float getTextSize() { - return edge.getTextProperties().getSize(); - } - - @Override - public float getTextR() { - return edge.getTextProperties().getR(); - } - - @Override - public float getTextG() { - return edge.getTextProperties().getG(); - } - - @Override - public float getTextB() { - return edge.getTextProperties().getB(); - } - - @Override - public float getTextAlpha() { - return edge.getTextProperties().getAlpha(); - } - - @Override - public boolean isTextVisible() { - return edge.getTextProperties().isVisible(); - } - - @Override - public ElementProperties getElementProperties() { - return edge; - } - - public int getOctantSourceId() { - return octantSourceId; - } - - public int getOctantTargetId() { - return octantTargetId; - } - - public void setOctantSourceId(int octantSourceId) { - this.octantSourceId = octantSourceId; - } - - public void setOctantTargetId(int octantTargetId) { - this.octantTargetId = octantTargetId; - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/edge/EdgeModeler.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/edge/EdgeModeler.java deleted file mode 100644 index 8851c10784..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/edge/EdgeModeler.java +++ /dev/null @@ -1,102 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.model.edge; - -import javax.media.opengl.GL2; -import javax.media.opengl.glu.GLU; -import javax.media.opengl.glu.GLUquadric; -import org.gephi.graph.api.Edge; -import org.gephi.visualization.api.initializer.Modeler; -import org.gephi.visualization.model.Model; -import org.gephi.visualization.model.node.NodeModel; -import org.gephi.visualization.opengl.CompatibilityEngine; - -/** - * - * @author Mathieu Bastian - */ -public class EdgeModeler extends Modeler { - - public EdgeModeler(CompatibilityEngine engine) { - super(engine); - } - - public EdgeModel initModel(Edge edge, NodeModel sourceModel, NodeModel targetModelImpl) { - - EdgeModel edgeModel; - if (controller.getVizModel().isUse3d()) { - if (edge.isSelfLoop()) { - edgeModel = new SelfLoop3dModel(edge, sourceModel); - } else { - edgeModel = new Edge3dModel(edge, sourceModel, targetModelImpl); - } - } else { - if (edge.isSelfLoop()) { - edgeModel = new SelfLoop2dModel(edge, sourceModel); - } else { - edgeModel = new Edge2dModel(edge, sourceModel, targetModelImpl); - } - } - - return edgeModel; - } - - @Override - public void beforeDisplay(GL2 gl, GLU glu) { - gl.glBegin(GL2.GL_TRIANGLES); - } - - @Override - public void afterDisplay(GL2 gl, GLU glu) { - gl.glEnd(); - } - - @Override - public void chooseModel(Model obj) { - throw new UnsupportedOperationException("Not supported."); - } - - @Override - public int initDisplayLists(GL2 gl, GLU glu, GLUquadric quadric, int ptr) { - return ptr; - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/edge/SelfLoop2dModel.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/edge/SelfLoop2dModel.java deleted file mode 100644 index c22bd806bf..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/edge/SelfLoop2dModel.java +++ /dev/null @@ -1,246 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.model.edge; - -import com.jogamp.common.nio.Buffers; -import java.nio.FloatBuffer; -import javax.media.opengl.GL2; -import javax.media.opengl.glu.GLU; -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.Node; -import org.gephi.lib.gleem.linalg.Vec3f; -import org.gephi.visualization.GraphLimits; -import org.gephi.visualization.VizModel; -import org.gephi.visualization.model.node.NodeModel; - -/** - * - * @author Mathieu Bastian - */ -public class SelfLoop2dModel extends EdgeModel { - - private static Vec3f upVector = new Vec3f(0f, 1f, 0f); - private static Vec3f sideVector = new Vec3f(1f, 0f, 0f); - protected static FloatBuffer buffer = Buffers.newDirectFloatBuffer(24); - protected static int segments = 20; - // - protected final NodeModel nodeModel; - - public SelfLoop2dModel(Edge edge, NodeModel nodeModel) { - super(edge); - this.nodeModel = nodeModel; - } - - @Override - public void display(GL2 gl, GLU glu, VizModel vizModel) { - - gl.glEnd(); - - //Edge weight - GraphLimits limits = vizModel.getLimits(); - float weightRatio; - if (limits.getMinWeight() == limits.getMaxWeight()) { - weightRatio = Edge2dModel.WEIGHT_MINIMUM / limits.getMinWeight(); - } else { - weightRatio = Math.abs((Edge2dModel.WEIGHT_MAXIMUM - Edge2dModel.WEIGHT_MINIMUM) / (limits.getMaxWeight() - limits.getMinWeight())); - } - float w = (float) edge.getWeight(); - float edgeScale = vizModel.getEdgeScale(); - w = ((w - limits.getMinWeight()) * weightRatio + Edge2dModel.WEIGHT_MINIMUM) * edgeScale; - // - - //Params - Node node = edge.getSource(); - float x = node.x(); - float y = node.y(); - float z = node.z(); - - //Get thickness points - float baseRightX = x + sideVector.x() * w / 2; - float baseRightY = y + sideVector.y() * w / 2; - float baseRightZ = z + sideVector.z() * w / 2; - float baseLeftX = x - sideVector.x() * w / 2; - float baseLeftY = y - sideVector.y() * w / 2; - float baseLeftZ = z - sideVector.z() * w / 2; - float baseTopX = x + upVector.x() * w / 2; - float baseTopY = y + upVector.y() * w / 2; - float baseTopZ = z + upVector.z() * w / 2; - float baseBottomX = x - upVector.x() * w / 2; - float baseBottomY = y - upVector.y() * w / 2; - float baseBottomZ = z - upVector.z() * w / 2; - - //Calculate control points - float height = node.size() * 3; - float controlExterior1X = baseLeftX + upVector.x() * height; - float controlExterior1Y = baseLeftY + upVector.y() * height; - float controlExterior1Z = baseLeftZ + upVector.z() * height; - float controlExterior2X = baseBottomX + sideVector.x() * height; - float controlExterior2Y = baseBottomY + sideVector.y() * height; - float controlExterior2Z = baseBottomZ + sideVector.z() * height; - height /= 1.15f; - float controlInterior1X = baseRightX + upVector.x() * height; - float controlInterior1Y = baseRightY + upVector.y() * height; - float controlInterior1Z = baseRightZ + upVector.z() * height; - float controlInterior2X = baseTopX + sideVector.x() * height; - float controlInterior2Y = baseTopY + sideVector.y() * height; - float controlInterior2Z = baseTopZ + sideVector.z() * height; - - //Fill buffer with interior curve - buffer.rewind(); - buffer.put(baseRightX); - buffer.put(baseRightY); - buffer.put(baseRightZ); - buffer.put(controlInterior1X); - buffer.put(controlInterior1Y); - buffer.put(controlInterior1Z); - buffer.put(controlInterior2X); - buffer.put(controlInterior2Y); - buffer.put(controlInterior2Z); - buffer.put(baseTopX); - buffer.put(baseTopY); - buffer.put(baseTopZ); - - //Fill buffer with exterior curve - buffer.put(baseLeftX); - buffer.put(baseLeftY); - buffer.put(baseLeftZ); - buffer.put(controlExterior1X); - buffer.put(controlExterior1Y); - buffer.put(controlExterior1Z); - buffer.put(controlExterior2X); - buffer.put(controlExterior2Y); - buffer.put(controlExterior2Z); - buffer.put(baseBottomX); - buffer.put(baseBottomY); - buffer.put(baseBottomZ); - buffer.rewind(); //Rewind - - //Color - if (!selected) { - float r; - float g; - float b; - float a = edge.alpha(); - if (vizModel.isEdgeHasUniColor()) { - float[] uni = vizModel.getEdgeUniColor(); - r = uni[0]; - g = uni[1]; - b = uni[2]; - a = uni[3]; - } else { - if (a == 0f) { - Node source = edge.getSource(); - r = 0.498f * source.r(); - g = 0.498f * source.g(); - b = 0.498f * source.b(); - a = source.alpha(); - } else { - g = 0.498f * edge.g(); - b = 0.498f * edge.b(); - r = 0.498f * edge.r(); - a = edge.alpha(); - } - } - if (vizModel.getConfig().isLightenNonSelected()) { - float lightColorFactor = vizModel.getConfig().getLightenNonSelectedFactor(); - a = a - (a - 0.01f) * lightColorFactor; - gl.glColor4f(r, g, b, a); - } else { - gl.glColor4f(r, g, b, a); - } - } else { - float r = 0f; - float g = 0f; - float b = 0f; - if (vizModel.isEdgeSelectionColor()) { - if (nodeModel.isSelected()) { - float[] both = vizModel.getEdgeBothSelectionColor(); - r = both[0]; - g = both[1]; - b = both[2]; - } - } else { - if (edge.alpha() == 0f) { - Node source = edge.getSource(); - r = source.r(); - g = source.g(); - b = source.b(); - } else { - r = edge.r(); - g = edge.g(); - b = edge.b(); - } - } - gl.glColor4f(r, g, b, 1f); - } - - //Display - gl.glMap2f(GL2.GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 2, buffer); //Map evaluators - gl.glEnable(GL2.GL_MAP2_VERTEX_3); - gl.glMapGrid2f(segments, 0, 1, 1, 0, 1); //Grid - gl.glEvalMesh2(GL2.GL_FILL, 0, segments, 0, 1); //Display - gl.glDisable(GL2.GL_MAP2_VERTEX_3); - - gl.glEnd(); - - gl.glBegin(GL2.GL_TRIANGLES); - } - - @Override - public void displayArrow(GL2 gl, GLU glu, VizModel model) { - } - - @Override - public boolean isAutoSelected() { - return nodeModel.isSelected(); - } - - @Override - public NodeModel getSourceModel() { - return nodeModel; - } - - @Override - public NodeModel getTargetModel() { - return nodeModel; - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/edge/SelfLoop3dModel.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/edge/SelfLoop3dModel.java deleted file mode 100644 index 68ade35626..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/edge/SelfLoop3dModel.java +++ /dev/null @@ -1,232 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.model.edge; - -import javax.media.opengl.GL2; -import javax.media.opengl.glu.GLU; -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.Node; -import org.gephi.lib.gleem.linalg.Vec3f; -import org.gephi.visualization.GraphLimits; -import org.gephi.visualization.VizController; -import org.gephi.visualization.VizModel; -import org.gephi.visualization.model.node.NodeModel; - -/** - * - * @author Mathieu Bastian - */ -public class SelfLoop3dModel extends SelfLoop2dModel { - - protected static Vec3f transVector = new Vec3f(1, 0, 0); - - public SelfLoop3dModel(Edge edge, NodeModel nodeModel) { - super(edge, nodeModel); - } - - @Override - public void display(GL2 gl, GLU glu, VizModel vizModel) { - float[] cameraLocation = VizController.getInstance().getDrawable().getCameraLocation(); - - gl.glEnd(); - - //Edge weight - GraphLimits limits = vizModel.getLimits(); - float weightRatio; - if (limits.getMinWeight() == limits.getMaxWeight()) { - weightRatio = Edge2dModel.WEIGHT_MINIMUM / limits.getMinWeight(); - } else { - weightRatio = Math.abs((Edge2dModel.WEIGHT_MAXIMUM - Edge2dModel.WEIGHT_MINIMUM) / (limits.getMaxWeight() - limits.getMinWeight())); - } - float w = (float) edge.getWeight(); - float edgeScale = vizModel.getEdgeScale(); - w = ((w - limits.getMinWeight()) * weightRatio + Edge2dModel.WEIGHT_MINIMUM) * edgeScale; - // - - //Params - Node node = edge.getSource(); - float x = node.x(); - float y = node.y(); - float z = node.z(); - - //CameraVector, from camera location to any point on the line - Vec3f cameraVector = new Vec3f(x - cameraLocation[0], y - cameraLocation[1], z - cameraLocation[2]); - cameraVector.normalize(); - - //Get two vectors perpendicular to cameraVector - Vec3f upVector = transVector.cross(cameraVector); - upVector.normalize(); - Vec3f sideVector = cameraVector.cross(upVector); - sideVector.normalize(); - - //Get thickness points - float baseRightX = x + sideVector.x() * w / 2; - float baseRightY = y + sideVector.y() * w / 2; - float baseRightZ = z + sideVector.z() * w / 2; - float baseLeftX = x - sideVector.x() * w / 2; - float baseLeftY = y - sideVector.y() * w / 2; - float baseLeftZ = z - sideVector.z() * w / 2; - float baseTopX = x + upVector.x() * w / 2; - float baseTopY = y + upVector.y() * w / 2; - float baseTopZ = z + upVector.z() * w / 2; - float baseBottomX = x - upVector.x() * w / 2; - float baseBottomY = y - upVector.y() * w / 2; - float baseBottomZ = z - upVector.z() * w / 2; - - //Calculate control points - float height = node.size() * 3; - float controlExterior1X = baseLeftX + upVector.x() * height; - float controlExterior1Y = baseLeftY + upVector.y() * height; - float controlExterior1Z = baseLeftZ + upVector.z() * height; - float controlExterior2X = baseBottomX + sideVector.x() * height; - float controlExterior2Y = baseBottomY + sideVector.y() * height; - float controlExterior2Z = baseBottomZ + sideVector.z() * height; - height /= 1.15f; - float controlInterior1X = baseRightX + upVector.x() * height; - float controlInterior1Y = baseRightY + upVector.y() * height; - float controlInterior1Z = baseRightZ + upVector.z() * height; - float controlInterior2X = baseTopX + sideVector.x() * height; - float controlInterior2Y = baseTopY + sideVector.y() * height; - float controlInterior2Z = baseTopZ + sideVector.z() * height; - - //Fill buffer with interior curve - buffer.rewind(); - buffer.put(baseRightX); - buffer.put(baseRightY); - buffer.put(baseRightZ); - buffer.put(controlInterior1X); - buffer.put(controlInterior1Y); - buffer.put(controlInterior1Z); - buffer.put(controlInterior2X); - buffer.put(controlInterior2Y); - buffer.put(controlInterior2Z); - buffer.put(baseTopX); - buffer.put(baseTopY); - buffer.put(baseTopZ); - - //Fill buffer with exterior curve - buffer.put(baseLeftX); - buffer.put(baseLeftY); - buffer.put(baseLeftZ); - buffer.put(controlExterior1X); - buffer.put(controlExterior1Y); - buffer.put(controlExterior1Z); - buffer.put(controlExterior2X); - buffer.put(controlExterior2Y); - buffer.put(controlExterior2Z); - buffer.put(baseBottomX); - buffer.put(baseBottomY); - buffer.put(baseBottomZ); - buffer.rewind(); //Rewind - - //Color - if (!selected) { - float r; - float g; - float b; - float a = edge.alpha(); - if (vizModel.isEdgeHasUniColor()) { - float[] uni = vizModel.getEdgeUniColor(); - r = uni[0]; - g = uni[1]; - b = uni[2]; - a = uni[3]; - } else { - if (a == 0f) { - Node source = edge.getSource(); - r = 0.498f * source.r(); - g = 0.498f * source.g(); - b = 0.498f * source.b(); - a = source.alpha(); - } else { - g = 0.498f * edge.g(); - b = 0.498f * edge.b(); - r = 0.498f * edge.r(); - a = edge.alpha(); - } - } - if (vizModel.getConfig().isLightenNonSelected()) { - float lightColorFactor = vizModel.getConfig().getLightenNonSelectedFactor(); - a = a - (a - 0.01f) * lightColorFactor; - gl.glColor4f(r, g, b, a); - } else { - gl.glColor4f(r, g, b, a); - } - } else { - float r = 0f; - float g = 0f; - float b = 0f; - if (vizModel.isEdgeSelectionColor()) { - if (nodeModel.isSelected()) { - float[] both = vizModel.getEdgeBothSelectionColor(); - r = both[0]; - g = both[1]; - b = both[2]; - } - } else { - if (edge.alpha() == 0f) { - Node source = edge.getSource(); - r = source.r(); - g = source.g(); - b = source.b(); - } else { - r = edge.r(); - g = edge.g(); - b = edge.b(); - } - } - gl.glColor4f(r, g, b, 1f); - } - - //Display - gl.glMap2f(GL2.GL_MAP2_VERTEX_3, 0, 1, 3, 4, 0, 1, 12, 2, buffer); //Map evaluators - gl.glEnable(GL2.GL_MAP2_VERTEX_3); - gl.glMapGrid2f(segments, 0, 1, 1, 0, 1); //Grid - gl.glEvalMesh2(GL2.GL_FILL, 0, segments, 0, 1); //Display - gl.glDisable(GL2.GL_MAP2_VERTEX_3); - - gl.glEnd(); - - gl.glBegin(GL2.GL_TRIANGLES); - - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/node/NodeDiskModel.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/node/NodeDiskModel.java deleted file mode 100644 index c0b06ac7a4..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/node/NodeDiskModel.java +++ /dev/null @@ -1,160 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.model.node; - -import javax.media.opengl.GL2; -import javax.media.opengl.glu.GLU; -import org.gephi.graph.api.Node; -import org.gephi.lib.gleem.linalg.Vecf; -import org.gephi.visualization.VizModel; - -/** - * - * @author Mathieu Bastian - */ -public class NodeDiskModel extends NodeModel { - - public int modelType; - public int modelBorderType; - - public NodeDiskModel(Node node) { - super(node); - } - - @Override - public void display(GL2 gl, GLU glu, VizModel vizModel) { - boolean selec = selected; - boolean neighbor = false; - highlight = false; - if (vizModel.isAutoSelectNeighbor() && mark && !selec) { - selec = true; - highlight = true; - neighbor = true; - } - mark = false; - gl.glPushMatrix(); - float size = node.size() * 2; - gl.glTranslatef(node.x(), node.y(), node.z()); - gl.glScalef(size, size, size); - - if (!selec) { - if (vizModel.getConfig().isLightenNonSelected()) { - float[] lightColor = vizModel.getConfig().getLightenNonSelectedColor(); - float lightColorFactor = vizModel.getConfig().getLightenNonSelectedFactor(); - float r = node.r(); - float g = node.g(); - float b = node.b(); - gl.glColor3f(r + (lightColor[0] - r) * lightColorFactor, g + (lightColor[1] - g) * lightColorFactor, b + (lightColor[2] - b) * lightColorFactor); - gl.glCallList(modelType); - if (modelBorderType != 0) { - float rborder = 0.498f * r; - float gborder = 0.498f * g; - float bborder = 0.498f * b; - gl.glColor3f(rborder + (lightColor[0] - rborder) * lightColorFactor, gborder + (lightColor[1] - gborder) * lightColorFactor, bborder + (lightColor[2] - bborder) * lightColorFactor); - gl.glCallList(modelBorderType); - } - } else { - float r = node.r(); - float g = node.g(); - float b = node.b(); - gl.glColor3f(r, g, b); - gl.glCallList(modelType); - if (modelBorderType != 0) { - float rborder = 0.498f * r; - float gborder = 0.498f * g; - float bborder = 0.498f * b; - gl.glColor3f(rborder, gborder, bborder); - gl.glCallList(modelBorderType); - } - } - } else { - float r; - float g; - float b; - float rborder; - float gborder; - float bborder; - if (vizModel.isUniColorSelected()) { - if (neighbor) { - r = vizModel.getConfig().getUniColorSelectedNeigborColor()[0]; - g = vizModel.getConfig().getUniColorSelectedNeigborColor()[1]; - b = vizModel.getConfig().getUniColorSelectedNeigborColor()[2]; - } else { - r = vizModel.getConfig().getUniColorSelectedColor()[0]; - g = vizModel.getConfig().getUniColorSelectedColor()[1]; - b = vizModel.getConfig().getUniColorSelectedColor()[2]; - } - rborder = 0.498f * r; - gborder = 0.498f * g; - bborder = 0.498f * b; - } else { - rborder = node.r(); - gborder = node.g(); - bborder = node.b(); - r = Math.min(1, 0.5f * rborder + 0.5f); - g = Math.min(1, 0.5f * gborder + 0.5f); - b = Math.min(1, 0.5f * bborder + 0.5f); - } - gl.glColor3f(r, g, b); - gl.glCallList(modelType); - if (modelBorderType != 0) { - gl.glColor3f(rborder, gborder, bborder); - gl.glCallList(modelBorderType); - } - } - - gl.glPopMatrix(); - } - - @Override - public boolean selectionTest(Vecf distanceFromMouse, float selectionSize) { - if (distanceFromMouse.get(2) - selectionSize < getViewportRadius()) { - return true; - } - return false; - } - - @Override - public float getCollisionDistance(double angle) { - return node.size(); - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/node/NodeDiskModeler.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/node/NodeDiskModeler.java deleted file mode 100644 index 61bb578288..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/node/NodeDiskModeler.java +++ /dev/null @@ -1,169 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.model.node; - -import javax.media.opengl.GL2; -import javax.media.opengl.glu.GLU; -import javax.media.opengl.glu.GLUquadric; -import org.gephi.graph.api.Node; -import org.gephi.visualization.model.Model; -import org.gephi.visualization.opengl.CompatibilityEngine; -import org.openide.util.NbBundle; - -/** - * - * @author Mathieu Bastian - */ -public class NodeDiskModeler extends NodeModeler { - - public int SHAPE_DIAMOND; - public int SHAPE_DISK16; - public int SHAPE_DISK32; - public int SHAPE_DISK64; - public int BORDER16; - public int BORDER32; - public int BORDER64; - - public NodeDiskModeler(CompatibilityEngine engine) { - super(engine); - } - - @Override - public NodeModel initModel(Node n) { - NodeDiskModel obj = new NodeDiskModel((Node) n); - obj.modelType = SHAPE_DISK64; - obj.modelBorderType = BORDER64; - - chooseModel(obj); - return obj; - } - - @Override - public void chooseModel(Model object3d) { - NodeDiskModel obj = (NodeDiskModel) object3d; - if (config.isDisableLOD()) { - obj.modelType = SHAPE_DISK64; - obj.modelBorderType = BORDER64; - return; - } - - float distance = cameraDistance(obj) / obj.getNode().size(); - if (distance > 600) { - obj.modelType = SHAPE_DIAMOND; - obj.modelBorderType = -1; - } else if (distance > 50) { - obj.modelType = SHAPE_DISK16; - obj.modelBorderType = BORDER16; - } else { - obj.modelType = SHAPE_DISK32; - obj.modelBorderType = BORDER32; - } - } - - @Override - public int initDisplayLists(GL2 gl, GLU glu, GLUquadric quadric, int ptr) { - // Diamond display list - SHAPE_DIAMOND = ptr + 1; - gl.glNewList(SHAPE_DIAMOND, GL2.GL_COMPILE); - glu.gluDisk(quadric, 0, 0.5, 4, 1); - gl.glEndList(); - //End - - //Disk16 - SHAPE_DISK16 = SHAPE_DIAMOND + 1; - gl.glNewList(SHAPE_DISK16, GL2.GL_COMPILE); - glu.gluDisk(quadric, 0, 0.5, 6, 1); - gl.glEndList(); - //Fin - - //Disk32 - SHAPE_DISK32 = SHAPE_DISK16 + 1; - gl.glNewList(SHAPE_DISK32, GL2.GL_COMPILE); - glu.gluDisk(quadric, 0, 0.5, 12, 2); - gl.glEndList(); - - //Disk64 - SHAPE_DISK64 = SHAPE_DISK32 + 1; - gl.glNewList(SHAPE_DISK64, GL2.GL_COMPILE); - glu.gluDisk(quadric, 0, 0.5, 32, 4); - gl.glEndList(); - - - //Border16 - BORDER16 = SHAPE_DISK64 + 1; - gl.glNewList(BORDER16, GL2.GL_COMPILE); - glu.gluDisk(quadric, 0.42, 0.50, 24, 2); - gl.glEndList(); - - //Border32 - BORDER32 = BORDER16 + 1; - gl.glNewList(BORDER32, GL2.GL_COMPILE); - glu.gluDisk(quadric, 0.42, 0.50, 48, 2); - gl.glEndList(); - - //Border32 - BORDER64 = BORDER32 + 1; - gl.glNewList(BORDER64, GL2.GL_COMPILE); - glu.gluDisk(quadric, 0.42, 0.50, 96, 4); - gl.glEndList(); - - return BORDER64; - } - - @Override - public void beforeDisplay(GL2 gl, GLU glu) { - } - - @Override - public void afterDisplay(GL2 gl, GLU glu) { - } - - @Override - public boolean is3d() { - return false; - } - - @Override - public String toString() { - return NbBundle.getMessage(NodeDiskModeler.class, "nodeModeler_disk"); - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/node/NodeModel.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/node/NodeModel.java deleted file mode 100644 index ca0c28fed1..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/node/NodeModel.java +++ /dev/null @@ -1,301 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.model.node; - -import java.awt.geom.Rectangle2D; -import org.gephi.graph.api.ElementProperties; -import org.gephi.graph.api.Node; -import org.gephi.lib.gleem.linalg.Vecf; -import org.gephi.visualization.model.Model; -import org.gephi.visualization.model.TextModel; -import org.gephi.visualization.model.edge.EdgeModel; -import org.gephi.visualization.octree.Octant; - -/** - * - * @author mbastian - */ -public abstract class NodeModel implements Model, TextModel { - - protected final Node node; - protected float viewportX; - protected float viewportY; - protected float cameraDistance; - protected float viewportRadius; - protected float[] dragDistance; - //Octant - protected Octant octant; - protected int octantId; - //Flags - protected boolean selected; - protected boolean highlight; - public int markTime; - public boolean mark; - //Text - protected Rectangle2D bounds; - //Edges - protected EdgeModel[] edges; - protected int edgeLength; - protected int edgeCount; - - public NodeModel(Node node) { - this.node = node; - - //Default - dragDistance = new float[2]; - selected = false; - mark = false; - markTime = 0; - - //Edges - edges = new EdgeModel[0]; - } - - public int octreePosition(float centerX, float centerY, float centerZ, float size) { - //float radius = obj.getRadius(); - int index = 0; - - if (node.y() < centerY) { - index += 4; - } - if (node.z() > centerZ) { - index += 2; - } - if (node.x() < centerX) { - index += 1; - } - - return index; - } - - public boolean isInOctreeLeaf(Octant leaf) { -// float radius = node.size() / 2f; - if (Math.abs(node.x() - leaf.getPosX()) > (leaf.getSize() / 2) - || Math.abs(node.y() - leaf.getPosY()) > (leaf.getSize() / 2) - || Math.abs(node.z() - leaf.getPosZ()) > (leaf.getSize() / 2)) { - return false; - } - return true; - } - - public abstract boolean selectionTest(Vecf distanceFromMouse, float selectionSize); - - public abstract float getCollisionDistance(double angle); - - public Node getNode() { - return node; - } - - public void setCameraDistance(float cameraDistance) { - this.cameraDistance = cameraDistance; - } - - public float getCameraDistance() { - return cameraDistance; - } - - public float getViewportRadius() { - return viewportRadius; - } - - public void setViewportRadius(float viewportRadius) { - this.viewportRadius = viewportRadius; - } - - public float getViewportX() { - return viewportX; - } - - public void setViewportX(float viewportX) { - this.viewportX = viewportX; - } - - public float getViewportY() { - return viewportY; - } - - public void setViewportY(float viewportY) { - this.viewportY = viewportY; - } - - public void setSelected(boolean selected) { - this.selected = selected; - } - - public boolean isSelected() { - return selected; - } - - public boolean isHighlight() { - return highlight; - } - - public Octant getOctant() { - return octant; - } - - public void setOctant(Octant octant) { - this.octant = octant; - } - - public void setOctantId(int octantId) { - this.octantId = octantId; - } - - public int getOctantId() { - return octantId; - } - - @Override - public boolean hasCustomTextColor() { - return node.getTextProperties().getR() > 0; - } - - @Override - public void setText(String text) { - node.getTextProperties().setText(text); - } - - @Override - public float getTextWidth() { - Rectangle2D rec = bounds; - if (rec != null) { - return (float) rec.getWidth(); - } - return 0f; - } - - @Override - public float getTextHeight() { - Rectangle2D rec = bounds; - if (rec != null) { - return (float) rec.getHeight(); - } - return 0f; - } - - @Override - public void setTextBounds(Rectangle2D bounds) { - this.bounds = bounds; - } - - @Override - public String getText() { - String t = node.getTextProperties().getText(); - if (t == null) { - return node.getLabel(); - } - return t; - } - - @Override - public float getTextSize() { - return node.getTextProperties().getSize(); - } - - @Override - public float getTextR() { - return node.getTextProperties().getR(); - } - - @Override - public float getTextG() { - return node.getTextProperties().getG(); - } - - @Override - public float getTextB() { - return node.getTextProperties().getB(); - } - - @Override - public float getTextAlpha() { - return node.getTextProperties().getAlpha(); - } - - @Override - public boolean isTextVisible() { - return node.getTextProperties().isVisible(); - } - - @Override - public ElementProperties getElementProperties() { - return node; - } - - public void addEdge(EdgeModel model) { - int id = edgeLength++; - growEdges(id); - edges[id] = model; - edgeCount++; - if (model.getSourceModel() == this) { - model.setOctantSourceId(id); - } else { - model.setOctantTargetId(id); - } - } - - public void removeEdge(EdgeModel model) { - int id; - if (model.getSourceModel() == this) { - id = model.getOctantSourceId(); - } else { - id = model.getOctantTargetId(); - } - edges[id] = null; - edgeCount--; - } - - public EdgeModel[] getEdges() { - return edges; - } - protected static final long ONEOVERPHI = 106039; - - private void growEdges(final int index) { - if (index >= edges.length) { - final int newLength = (int) Math.min(Math.max((ONEOVERPHI * edges.length) >>> 16, index + 1), Integer.MAX_VALUE); - final EdgeModel t[] = new EdgeModel[newLength]; - System.arraycopy(edges, 0, t, 0, edges.length); - edges = t; - } - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/node/NodeModeler.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/node/NodeModeler.java deleted file mode 100644 index c0e5d66ddc..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/node/NodeModeler.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package org.gephi.visualization.model.node; - -import org.gephi.graph.api.Node; -import org.gephi.visualization.api.initializer.Modeler; -import org.gephi.visualization.opengl.CompatibilityEngine; - -/** - * - * @author mbastian - */ -public abstract class NodeModeler extends Modeler { - - public NodeModeler(CompatibilityEngine engine) { - super(engine); - } - - public abstract NodeModel initModel(Node n); - - public abstract boolean is3d(); - - public void setViewportPosition(NodeModel object) { - float[] res = controller.getDrawable().myGluProject(object.getNode().x(), object.getNode().y(), object.getNode().z()); - object.setViewportX(res[0]); - object.setViewportY(res[1]); - - res = controller.getDrawable().myGluProject(object.getNode().x() + object.getNode().size(), object.getNode().y(), object.getNode().z()); - float rad = Math.abs((float) res[0] - object.getViewportX()); - object.setViewportRadius(rad); - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/node/NodeRectangeModel.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/node/NodeRectangeModel.java deleted file mode 100644 index c901d0080e..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/node/NodeRectangeModel.java +++ /dev/null @@ -1,203 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.model.node; - -import javax.media.opengl.GL2; -import javax.media.opengl.glu.GLU; -import org.gephi.graph.api.Node; -import org.gephi.lib.gleem.linalg.Vecf; -import org.gephi.visualization.VizController; -import org.gephi.visualization.VizModel; -import org.gephi.visualization.apiimpl.GraphDrawable; - -/** - * - * @author Mathieu Bastian - */ -public class NodeRectangeModel extends NodeModel { - - public boolean border = true; - protected float width = 20f; - protected float height = 20f; - - public NodeRectangeModel(Node node) { - super(node); - } - - @Override - public void display(GL2 gl, GLU glu, VizModel vizModel) { - boolean selec = selected; - boolean neighbor = false; - highlight = false; - if (vizModel.isAutoSelectNeighbor() && mark && !selec) { - selec = true; - highlight = true; - neighbor = true; - } - mark = false; - if (vizModel.isAdjustByText()) { - width = getTextWidth(); - height = getTextHeight(); - } else { - float size = node.size(); - width = size; - height = size; - } - - float w = width / 2f; - float h = height / 2f; - float x = node.x(); - float y = node.y(); - - float borderSize = 1f; - - if (!selec) { - if (vizModel.getConfig().isLightenNonSelected()) { - float[] lightColor = vizModel.getConfig().getLightenNonSelectedColor(); - float lightColorFactor = vizModel.getConfig().getLightenNonSelectedFactor(); - float r = node.r(); - float g = node.g(); - float b = node.b(); - if (border) { - float rborder = 0.498f * r; - float gborder = 0.498f * g; - float bborder = 0.498f * b; - gl.glColor3f(rborder + (lightColor[0] - rborder) * lightColorFactor, gborder + (lightColor[1] - gborder) * lightColorFactor, bborder + (lightColor[2] - bborder) * lightColorFactor); - gl.glVertex3f(x + w, y + h, 0); - gl.glVertex3f(x - w, y + h, 0); - gl.glVertex3f(x - w, y - h, 0); - gl.glVertex3f(x + w, y - h, 0); - w -= borderSize; - h -= borderSize; - } - gl.glColor3f(r + (lightColor[0] - r) * lightColorFactor, g + (lightColor[1] - g) * lightColorFactor, b + (lightColor[2] - b) * lightColorFactor); - } else { - float r = node.r(); - float g = node.g(); - float b = node.b(); - if (border) { - float rborder = 0.498f * r; - float gborder = 0.498f * g; - float bborder = 0.498f * b; - gl.glColor3f(rborder, gborder, bborder); - gl.glVertex3f(x + w, y + h, 0); - gl.glVertex3f(x - w, y + h, 0); - gl.glVertex3f(x - w, y - h, 0); - gl.glVertex3f(x + w, y - h, 0); - w -= borderSize; - h -= borderSize; - } - gl.glColor3f(r, g, b); - } - } else { - float r; - float g; - float b; - float rborder; - float gborder; - float bborder; - if (vizModel.isUniColorSelected()) { - if (neighbor) { - r = vizModel.getConfig().getUniColorSelectedNeigborColor()[0]; - g = vizModel.getConfig().getUniColorSelectedNeigborColor()[1]; - b = vizModel.getConfig().getUniColorSelectedNeigborColor()[2]; - } else { - r = vizModel.getConfig().getUniColorSelectedColor()[0]; - g = vizModel.getConfig().getUniColorSelectedColor()[1]; - b = vizModel.getConfig().getUniColorSelectedColor()[2]; - } - rborder = 0.498f * r; - gborder = 0.498f * g; - bborder = 0.498f * b; - } else { - rborder = node.r(); - gborder = node.g(); - bborder = node.b(); - r = Math.min(1, 0.5f * rborder + 0.5f); - g = Math.min(1, 0.5f * gborder + 0.5f); - b = Math.min(1, 0.5f * bborder + 0.5f); - } - if (border) { - gl.glColor3f(rborder, gborder, bborder); - gl.glVertex3f(x + w, y + h, 0); - gl.glVertex3f(x - w, y + h, 0); - gl.glVertex3f(x - w, y - h, 0); - gl.glVertex3f(x + w, y - h, 0); - w -= borderSize; - h -= borderSize; - } - gl.glColor3f(r, g, b); - } - - gl.glVertex3f(x + w, y + h, 0); - gl.glVertex3f(x - w, y + h, 0); - gl.glVertex3f(x - w, y - h, 0); - gl.glVertex3f(x + w, y - h, 0); - } - - @Override - public boolean selectionTest(Vecf distanceFromMouse, float selectionSize) { - GraphDrawable drawable = VizController.getInstance().getDrawable(); - if (distanceFromMouse.get(0) < width / 2 * Math.abs(drawable.getDraggingMarkerX()) && distanceFromMouse.get(1) < height / 2 * Math.abs(drawable.getDraggingMarkerY())) { - return true; - } - return false; - } - - @Override - public float getCollisionDistance(double angle) { - double angleSinus = Math.sin(angle); - double angleCosinus = Math.cos(angle); - angle %= Math.PI * 2; - while (angle < 0) { - angle += Math.PI * 2; - } - - if (angle < Math.atan2(height / 2, width / 2) - || (angle > Math.PI - Math.atan2(height / 2, width / 2) && angle < Math.PI + Math.atan2(height / 2, width / 2)) - || angle > 2 * Math.PI - Math.atan2(height / 2, width / 2)) { - return (float) Math.sqrt((width * width / 4) / (1 - angleSinus * angleSinus)); - } else { - return (float) Math.sqrt((height * height / 4) / (1 - angleCosinus * angleCosinus)); - } - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/node/NodeRectangleModeler.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/node/NodeRectangleModeler.java deleted file mode 100644 index d917f46b97..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/node/NodeRectangleModeler.java +++ /dev/null @@ -1,110 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.model.node; - -import javax.media.opengl.GL2; -import javax.media.opengl.glu.GLU; -import javax.media.opengl.glu.GLUquadric; -import org.gephi.graph.api.Node; -import org.gephi.visualization.model.Model; -import org.gephi.visualization.opengl.CompatibilityEngine; -import org.openide.util.NbBundle; - -/** - * - * @author Mathieu Bastian - */ -public class NodeRectangleModeler extends NodeModeler { - - public NodeRectangleModeler(CompatibilityEngine engine) { - super(engine); - } - - @Override - public NodeModel initModel(Node n) { - NodeRectangeModel obj = new NodeRectangeModel(n); - - chooseModel(obj); - return obj; - } - - @Override - public void chooseModel(Model object3d) { - NodeRectangeModel obj = (NodeRectangeModel) object3d; - if (config.isDisableLOD()) { - obj.border = true; - return; - } - - float distance = cameraDistance(obj) / obj.getNode().size(); - if (distance > 600) { - obj.border = false; - } else { - obj.border = true; - } - } - - @Override - public int initDisplayLists(GL2 gl, GLU glu, GLUquadric quadric, int ptr) { - return ptr; - } - - @Override - public void beforeDisplay(GL2 gl, GLU glu) { - gl.glBegin(GL2.GL_QUADS); - } - - @Override - public void afterDisplay(GL2 gl, GLU glu) { - gl.glEnd(); - } - - @Override - public boolean is3d() { - return false; - } - - @Override - public String toString() { - return NbBundle.getMessage(NodeRectangleModeler.class, "nodeModeler_rectangle"); - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/node/NodeSphereModel.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/node/NodeSphereModel.java deleted file mode 100644 index 2c055dbed4..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/node/NodeSphereModel.java +++ /dev/null @@ -1,144 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.model.node; - -import javax.media.opengl.GL2; -import javax.media.opengl.glu.GLU; -import org.gephi.graph.api.Node; -import org.gephi.lib.gleem.linalg.Vecf; -import org.gephi.visualization.VizModel; -import org.gephi.visualization.opengl.CompatibilityEngine; - -/** - * Represent the basic 3d node shape, namely Sphere. Support different model - * type, which is display list identifier. - * - * @author Mathieu Bastian - * @see CompatibilityEngine - */ -public class NodeSphereModel extends NodeModel { - - public int modelType; - - public NodeSphereModel(Node node) { - super(node); - } - - @Override - public void display(GL2 gl, GLU glu, VizModel model) { - boolean selec = selected; - boolean neighbor = false; - highlight = false; - if (model.isAutoSelectNeighbor() && mark && !selec) { - selec = true; - highlight = true; - neighbor = true; - } - mark = false; - gl.glPushMatrix(); - float size = node.size() * 2; - gl.glTranslatef(node.x(), node.y(), node.z()); - gl.glScalef(size, size, size); - - if (!selec) { - if (model.getConfig().isLightenNonSelected()) { - float[] lightColor = model.getConfig().getLightenNonSelectedColor(); - float lightColorFactor = model.getConfig().getLightenNonSelectedFactor(); - float r = node.r(); - float g = node.g(); - float b = node.b(); - gl.glColor3f(r + (lightColor[0] - r) * lightColorFactor, g + (lightColor[1] - g) * lightColorFactor, b + (lightColor[2] - b) * lightColorFactor); - gl.glCallList(modelType); - } else { - float r = node.r(); - float g = node.g(); - float b = node.b(); - gl.glColor3f(r, g, b); - gl.glCallList(modelType); - } - } else { - float r; - float g; - float b; - float rborder; - float gborder; - float bborder; - if (model.isUniColorSelected()) { - if (neighbor) { - r = model.getConfig().getUniColorSelectedNeigborColor()[0]; - g = model.getConfig().getUniColorSelectedNeigborColor()[1]; - b = model.getConfig().getUniColorSelectedNeigborColor()[2]; - } else { - r = model.getConfig().getUniColorSelectedColor()[0]; - g = model.getConfig().getUniColorSelectedColor()[1]; - b = model.getConfig().getUniColorSelectedColor()[2]; - } - rborder = 0.498f * r; - gborder = 0.498f * g; - bborder = 0.498f * b; - } else { - rborder = node.r(); - gborder = node.g(); - bborder = node.b(); - r = Math.min(1, 0.5f * rborder + 0.5f); - g = Math.min(1, 0.5f * gborder + 0.5f); - b = Math.min(1, 0.5f * bborder + 0.5f); - } - gl.glColor3f(r, g, b); - gl.glCallList(modelType); - } - gl.glPopMatrix(); - } - - @Override - public boolean selectionTest(Vecf distanceFromMouse, float selectionSize) { - if (distanceFromMouse.get(2) - selectionSize < getViewportRadius()) { - return true; - } - return false; - } - - @Override - public float getCollisionDistance(double angle) { - return node.size(); - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/node/NodeSphereModeler.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/node/NodeSphereModeler.java deleted file mode 100644 index 4834dc7e9e..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/model/node/NodeSphereModeler.java +++ /dev/null @@ -1,151 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.model.node; - -import javax.media.opengl.GL2; -import javax.media.opengl.glu.GLU; -import javax.media.opengl.glu.GLUquadric; -import org.gephi.graph.api.Node; -import org.gephi.visualization.model.Model; -import org.gephi.visualization.opengl.CompatibilityEngine; -import org.openide.util.NbBundle; - -/** - * Default initializer for the nodes. The class draw sphere objects and manage a - * LOD system. - * - * @author Mathieu Bastian - * @see NodeSphereModel - */ -public class NodeSphereModeler extends NodeModeler { - - public int SHAPE_DIAMOND; - public int SHAPE_SPHERE16; - public int SHAPE_SPHERE32; - public int SHAPE_SPHERE64; - public int SHAPE_BILLBOARD; - - public NodeSphereModeler(CompatibilityEngine engine) { - super(engine); - } - - @Override - public NodeModel initModel(Node n) { - NodeSphereModel obj = new NodeSphereModel(n); - obj.modelType = SHAPE_SPHERE64; - - chooseModel(obj); - - return obj; - } - - @Override - public void chooseModel(Model object3d) { - NodeSphereModel obj = (NodeSphereModel) object3d; - if (config.isDisableLOD()) { - obj.modelType = SHAPE_SPHERE64; - return; - } - - float distance = cameraDistance(obj) / obj.getNode().size(); - if (distance > 600) { - obj.modelType = SHAPE_DIAMOND; - } else if (distance > 50) { - obj.modelType = SHAPE_SPHERE16; - } else { - obj.modelType = SHAPE_SPHERE32; - } - } - - @Override - public int initDisplayLists(GL2 gl, GLU glu, GLUquadric quadric, int ptr) { - // Diamond display list - SHAPE_DIAMOND = ptr + 1; - gl.glNewList(SHAPE_DIAMOND, GL2.GL_COMPILE); - glu.gluSphere(quadric, 0.5f, 4, 2); - gl.glEndList(); - //End - - // Sphere16 display list - SHAPE_SPHERE16 = SHAPE_DIAMOND + 1; - gl.glNewList(SHAPE_SPHERE16, GL2.GL_COMPILE); - gl.glCallList(ptr); - glu.gluSphere(quadric, 0.5f, 16, 8); - gl.glEndList(); - //Fin - - - // Sphere32 display list - SHAPE_SPHERE32 = SHAPE_SPHERE16 + 1; - gl.glNewList(SHAPE_SPHERE32, GL2.GL_COMPILE); - gl.glCallList(ptr); - glu.gluSphere(quadric, 0.5f, 32, 16); - gl.glEndList(); - - // Sphere32 display list - SHAPE_SPHERE64 = SHAPE_SPHERE32 + 1; - gl.glNewList(SHAPE_SPHERE64, GL2.GL_COMPILE); - gl.glCallList(ptr); - glu.gluSphere(quadric, 0.5f, 64, 32); - gl.glEndList(); - - return SHAPE_SPHERE64; - } - - @Override - public void beforeDisplay(GL2 gl, GLU glu) { - } - - @Override - public void afterDisplay(GL2 gl, GLU glu) { - } - - @Override - public boolean is3d() { - return true; - } - - @Override - public String toString() { - return NbBundle.getMessage(NodeSphereModeler.class, "nodeModeler_sphere"); - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/octree/Octant.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/octree/Octant.java deleted file mode 100644 index 6870cf6991..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/octree/Octant.java +++ /dev/null @@ -1,193 +0,0 @@ -package org.gephi.visualization.octree; - -import com.jogamp.opengl.util.gl2.GLUT; -import javax.media.opengl.GL2; -import javax.media.opengl.glu.GLU; -import org.gephi.visualization.model.node.NodeModel; - -/** - * - * @author mbastian - */ -public class Octant { - - //Static - protected static final long ONEOVERPHI = 106039; - protected static final float TRIM_THRESHOLD = 1000; - protected static final float TRIM_RATIO = 0.3f; - //LeafId - protected int leafId = Octree.NULL_ID; - //Coordinates - protected float size; - protected float posX; - protected float posY; - protected float posZ; - protected int depth; - //Children - protected Octant[] children; - //Stats - protected int nodeCount = 0; - //Data - protected NodeModel[] nodes; - protected int[] nodesGarbage; - protected int nodesGarbageLength; - protected int nodesLength; - //Flags - protected boolean visible; - - public Octant(int depth, float posX, float posY, float posZ, float size) { - this.size = size; - this.posX = posX; - this.posY = posY; - this.posZ = posZ; - this.depth = depth; - } - - protected void addNode(NodeModel nodeModel) { - int id; - if (nodesGarbageLength > 0) { - id = removeGarbage(); - } else { - id = nodesLength++; - growNodes(id); - } - nodes[id] = nodeModel; - nodeCount++; - nodeModel.setOctantId(id); - } - - protected void removeNode(NodeModel nodeModel) { - int id = nodeModel.getOctantId(); - nodeModel.setOctantId(Octree.NULL_ID); - nodes[id] = null; - nodeCount--; - addGarbage(id); - trimNodes(); - } - - protected void clear() { - nodes = null; - nodesGarbage = null; - nodesLength = 0; - nodesGarbage = null; - nodesGarbageLength = 0; - nodeCount = 0; - } - - protected boolean isEmpty() { - return nodeCount == 0; - } - - public float getPosX() { - return posX; - } - - public float getPosY() { - return posY; - } - - public float getPosZ() { - return posZ; - } - - public float getSize() { - return size; - } - - protected void displayOctant(GL2 gl) { - - float quantum = size / 2; - gl.glBegin(GL2.GL_QUAD_STRIP); - gl.glVertex3f(posX + quantum, posY + quantum, posZ + quantum); - gl.glVertex3f(posX + quantum, posY - quantum, posZ + quantum); - gl.glVertex3f(posX + quantum, posY + quantum, posZ - quantum); - gl.glVertex3f(posX + quantum, posY - quantum, posZ - quantum); - gl.glVertex3f(posX - quantum, posY + quantum, posZ - quantum); - gl.glVertex3f(posX - quantum, posY - quantum, posZ - quantum); - gl.glVertex3f(posX - quantum, posY + quantum, posZ + quantum); - gl.glVertex3f(posX - quantum, posY - quantum, posZ + quantum); - gl.glVertex3f(posX + quantum, posY + quantum, posZ + quantum); - gl.glVertex3f(posX + quantum, posY - quantum, posZ + quantum); - gl.glEnd(); - gl.glBegin(GL2.GL_QUADS); - gl.glVertex3f(posX - quantum, posY + quantum, posZ - quantum); - gl.glVertex3f(posX - quantum, posY + quantum, posZ + quantum); - gl.glVertex3f(posX + quantum, posY + quantum, posZ + quantum); - gl.glVertex3f(posX + quantum, posY + quantum, posZ - quantum); - - gl.glVertex3f(posX - quantum, posY - quantum, posZ + quantum); - gl.glVertex3f(posX - quantum, posY - quantum, posZ - quantum); - gl.glVertex3f(posX + quantum, posY - quantum, posZ - quantum); - gl.glVertex3f(posX + quantum, posY - quantum, posZ + quantum); - gl.glEnd(); - } - - protected void displayOctantInfo(GL2 gl, GLU glu) { - GLUT glut = new GLUT(); - - float quantum = size / 2; - float height = 15; - - gl.glPushMatrix(); - gl.glTranslatef(posX - quantum, posY + quantum - height, posZ + quantum); - gl.glScalef(0.1f, 0.1f, 0.1f); - gl.glColor4f(0.0f, 0.0f, 1.0f, 1.0f); - glut.glutStrokeString(GLUT.STROKE_MONO_ROMAN, "ID: " + leafId); - gl.glPopMatrix(); - - height += 15; - gl.glPushMatrix(); - gl.glTranslatef(posX - quantum, posY + quantum - height, posZ + quantum); - gl.glScalef(0.1f, 0.1f, 0.1f); - gl.glColor4f(0.0f, 0.0f, 1.0f, 1.0f); - glut.glutStrokeString(GLUT.STROKE_MONO_ROMAN, "objectsCount: " + nodeCount); - gl.glPopMatrix(); - } - - private void addGarbage(int index) { - if (nodesGarbage == null) { - nodesGarbage = new int[10]; - } else if (nodesGarbageLength == nodesGarbage.length) { - final int newLength = (int) Math.min(Math.max((ONEOVERPHI * nodesGarbage.length) >>> 16, nodesGarbageLength + 1), Integer.MAX_VALUE); - final int t[] = new int[newLength]; - System.arraycopy(nodesGarbage, 0, t, 0, nodesGarbage.length); - nodesGarbage = t; - } - nodesGarbage[nodesGarbageLength++] = index; - } - - private int removeGarbage() { - return nodesGarbage[--nodesGarbageLength]; - } - - private void growNodes(final int index) { - if (nodes == null) { - nodes = new NodeModel[10]; - } else if (index >= nodes.length) { - final int newLength = (int) Math.min(Math.max((ONEOVERPHI * nodes.length) >>> 16, index + 1), Integer.MAX_VALUE); - final NodeModel t[] = new NodeModel[newLength]; - System.arraycopy(nodes, 0, t, 0, nodes.length); - nodes = t; - } - } - - private void trimNodes() { - if (nodesLength >= TRIM_THRESHOLD && ((float) nodeCount) / nodesLength < TRIM_RATIO) { - NodeModel t[] = new NodeModel[nodeCount]; - if (nodeCount > 0) { - int c = 0; - for (int i = 0; i < nodes.length; i++) { - NodeModel n = nodes[i]; - if (n != null) { - n.setOctantId(c); - t[c++] = n; - } - } - } - nodesLength = t.length; - nodes = t; - nodesGarbage = null; - nodesGarbageLength = 0; - } - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/octree/Octree.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/octree/Octree.java deleted file mode 100644 index caf79c2a15..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/octree/Octree.java +++ /dev/null @@ -1,630 +0,0 @@ -package org.gephi.visualization.octree; - -import com.jogamp.common.nio.Buffers; -import it.unimi.dsi.fastutil.ints.IntRBTreeSet; -import it.unimi.dsi.fastutil.ints.IntSortedSet; -import java.nio.IntBuffer; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import javax.media.opengl.GL2; -import javax.media.opengl.glu.GLU; -import org.gephi.graph.api.Node; -import org.gephi.lib.gleem.linalg.Vec3f; -import org.gephi.visualization.GraphLimits; -import org.gephi.visualization.VizController; -import org.gephi.visualization.model.edge.EdgeModel; -import org.gephi.visualization.model.node.NodeModel; -import org.gephi.visualization.swing.GraphDrawableImpl; - -/** - * - * @author mbastian - */ -public class Octree { - - //Const - protected static final int NULL_ID = -1; - //Architecture - protected GraphLimits limits; - private GraphDrawableImpl drawable; - protected VizController vizController; - //Params - protected final int maxDepth; - protected final int size; - //Root - protected final Octant root; - //Leaves - protected final IntSortedSet garbageQueue; - protected Octant[] leaves; - protected int leavesCount; - protected int length; - protected int visibleLeaves; - //Selected - protected List selectedLeaves; - //Itr - protected final OctantIterator nodeIterator; - protected final SelectableIterator selectableIterator; - protected final EdgeIterator edgeIterator; - - public Octree(int maxDepth, int size) { - this.length = 0; - this.leaves = new Octant[0]; - this.garbageQueue = new IntRBTreeSet(); - this.maxDepth = maxDepth; - this.size = size; - this.selectedLeaves = new ArrayList(); - this.nodeIterator = new OctantIterator(); - this.edgeIterator = new EdgeIterator(null); - this.selectableIterator = new SelectableIterator(); - - //Init root - float dis = size / (float) Math.pow(2, this.maxDepth + 1); - root = new Octant(0, dis, dis, dis, size); - } - - public void initArchitecture() { - this.drawable = VizController.getInstance().getDrawable(); - this.limits = VizController.getInstance().getLimits(); - this.vizController = VizController.getInstance(); - } - - public void addNode(NodeModel node) { - if (node.getOctant() != null) { - throw new RuntimeException("Can't add a node to two octants"); - } - Octant octant = root; - int depth = octant.depth; - - clampPosition(node); - - while (depth < maxDepth) { - if (octant.children == null) { - subdivide(octant); - } - - int index = node.octreePosition(octant.posX, octant.posY, octant.posZ, octant.size); - octant = octant.children[index]; - depth = octant.depth; - } - - if (octant.isEmpty()) { - addLeaf(octant); - } - - octant.addNode(node); - node.setOctant(octant); - } - - public void removeNode(NodeModel node) { - Octant octant = node.getOctant(); - octant.removeNode(node); - if (octant.isEmpty()) { - removeLeaf(octant); - } - node.setOctant(null); - } - - public boolean repositionNodes() { - List movedNodes = new ArrayList(); - for (int i = 0; i < length; i++) { - Octant leaf = leaves[i]; - if (leaf != null) { - int l = leaf.nodesLength; - NodeModel[] nodes = leaf.nodes; - for (int j = 0; j < l; j++) { - NodeModel node = nodes[j]; - if (node != null) { - if (!node.isInOctreeLeaf(leaf)) { - removeNode(node); - movedNodes.add(node); - } - } - } - } - } - if (!movedNodes.isEmpty()) { - for (NodeModel node : movedNodes) { - addNode(node); - } - return true; - } - return false; - } - - public boolean isEmpty() { - return leavesCount == 0; - } - - public void clear() { - for (int i = 0; i < length; i++) { - Octant leaf = leaves[i]; - if (leaf != null) { - leaf.clear(); - } - } - leaves = new Octant[0]; - leavesCount = 0; - length = 0; - garbageQueue.clear(); - selectedLeaves.clear(); - visibleLeaves = 0; - } - - public Iterator getNodeIterator() { - nodeIterator.reset(); - return nodeIterator; - } - - public Iterator getSelectableNodeIterator() { - selectableIterator.reset(); - return selectableIterator; - } - - public Iterator getEdgeIterator() { - nodeIterator.reset(); - edgeIterator.reset(nodeIterator); - return edgeIterator; - } - - protected int addLeaf(final Octant octant) { - int id; - if (!garbageQueue.isEmpty()) { - id = garbageQueue.firstInt(); - garbageQueue.remove(id); - } else { - id = length++; - ensureArraySize(id); - } - leaves[id] = octant; - leavesCount++; - octant.leafId = id; - return id; - } - - protected void removeLeaf(final Octant octant) { - int id = octant.leafId; - leaves[id] = null; - leavesCount--; - garbageQueue.add(id); - octant.leafId = NULL_ID; - } - - private void ensureArraySize(int index) { - if (index >= leaves.length) { - Octant[] newArray = new Octant[index + 1]; - System.arraycopy(leaves, 0, newArray, 0, leaves.length); - leaves = newArray; - } - } - - private void subdivide(Octant octant) { - float quantum = octant.size / 4; - float newSize = octant.size / 2; - float posX = octant.posX; - float posY = octant.posY; - float posZ = octant.posZ; - int depth = octant.depth; - - Octant o1 = new Octant(depth + 1, posX + quantum, posY + quantum, posZ - quantum, newSize); - Octant o2 = new Octant(depth + 1, posX - quantum, posY + quantum, posZ - quantum, newSize); - Octant o3 = new Octant(depth + 1, posX + quantum, posY + quantum, posZ + quantum, newSize); - Octant o4 = new Octant(depth + 1, posX - quantum, posY + quantum, posZ + quantum, newSize); - - Octant o5 = new Octant(depth + 1, posX + quantum, posY - quantum, posZ - quantum, newSize); - Octant o6 = new Octant(depth + 1, posX - quantum, posY - quantum, posZ - quantum, newSize); - Octant o7 = new Octant(depth + 1, posX + quantum, posY - quantum, posZ + quantum, newSize); - Octant o8 = new Octant(depth + 1, posX - quantum, posY - quantum, posZ + quantum, newSize); - - octant.children = new Octant[]{o1, o2, o3, o4, o5, o6, o7, o8}; - } - - private void clampPosition(NodeModel nodeModel) { - //Clamp Hack to avoid nodes to be outside octree - float quantum = size / 2; - Node node = nodeModel.getNode(); - float x = node.x(); - float y = node.y(); - float z = node.z(); - if (x > root.posX + quantum) { - node.setX(root.posX + quantum); - } else if (x < root.posX - quantum) { - node.setX(root.posX - quantum); - } - if (y > root.posY + quantum) { - node.setY(root.posY + quantum); - } else if (y < root.posY - quantum) { - node.setY(root.posY - quantum); - } - if (z > root.posZ + quantum) { - node.setZ(root.posZ + quantum); - } else if (z < root.posZ - quantum) { - node.setZ(root.posZ - quantum); - } - } - - private void refreshLimits() { - float minX = Float.POSITIVE_INFINITY; - float maxX = Float.NEGATIVE_INFINITY; - float minY = Float.POSITIVE_INFINITY; - float maxY = Float.NEGATIVE_INFINITY; - float minZ = Float.POSITIVE_INFINITY; - float maxZ = Float.NEGATIVE_INFINITY; - - for (Octant o : leaves) { - if (o != null) { - float octanSize = o.getSize() / 2f; - minX = Math.min(minX, o.getPosX() - octanSize); - maxX = Math.max(maxX, o.getPosX() + octanSize); - minY = Math.min(minY, o.getPosY() - octanSize); - maxY = Math.max(maxY, o.getPosY() + octanSize); - minZ = Math.min(minZ, o.getPosZ() - octanSize); - maxZ = Math.max(maxZ, o.getPosZ() + octanSize); - } - } - - int viewportMinX = Integer.MAX_VALUE; - int viewportMaxX = Integer.MIN_VALUE; - int viewportMinY = Integer.MAX_VALUE; - int viewportMaxY = Integer.MIN_VALUE; - float[] point; - - point = drawable.myGluProject(minX, minY, minZ); //bottom far left - viewportMinX = Math.min(viewportMinX, (int) point[0]); - viewportMinY = Math.min(viewportMinY, (int) point[1]); - viewportMaxX = Math.max(viewportMaxX, (int) point[0]); - viewportMaxY = Math.max(viewportMaxY, (int) point[1]); - - point = drawable.myGluProject(minX, minY, maxZ); //bottom near left - viewportMinX = Math.min(viewportMinX, (int) point[0]); - viewportMinY = Math.min(viewportMinY, (int) point[1]); - viewportMaxX = Math.max(viewportMaxX, (int) point[0]); - viewportMaxY = Math.max(viewportMaxY, (int) point[1]); - - point = drawable.myGluProject(minX, maxY, maxZ); //up near left - viewportMinX = Math.min(viewportMinX, (int) point[0]); - viewportMinY = Math.min(viewportMinY, (int) point[1]); - viewportMaxX = Math.max(viewportMaxX, (int) point[0]); - viewportMaxY = Math.max(viewportMaxY, (int) point[1]); - - point = drawable.myGluProject(maxX, minY, maxZ); //bottom near right - viewportMinX = Math.min(viewportMinX, (int) point[0]); - viewportMinY = Math.min(viewportMinY, (int) point[1]); - viewportMaxX = Math.max(viewportMaxX, (int) point[0]); - viewportMaxY = Math.max(viewportMaxY, (int) point[1]); - - point = drawable.myGluProject(maxX, minY, minZ); //bottom far right - viewportMinX = Math.min(viewportMinX, (int) point[0]); - viewportMinY = Math.min(viewportMinY, (int) point[1]); - viewportMaxX = Math.max(viewportMaxX, (int) point[0]); - viewportMaxY = Math.max(viewportMaxY, (int) point[1]); - - point = drawable.myGluProject(maxX, maxY, minZ); //up far right - viewportMinX = Math.min(viewportMinX, (int) point[0]); - viewportMinY = Math.min(viewportMinY, (int) point[1]); - viewportMaxX = Math.max(viewportMaxX, (int) point[0]); - viewportMaxY = Math.max(viewportMaxY, (int) point[1]); - - point = drawable.myGluProject(maxX, maxY, maxZ); //up near right - viewportMinX = Math.min(viewportMinX, (int) point[0]); - viewportMinY = Math.min(viewportMinY, (int) point[1]); - viewportMaxX = Math.max(viewportMaxX, (int) point[0]); - viewportMaxY = Math.max(viewportMaxY, (int) point[1]); - - point = drawable.myGluProject(minX, maxY, minZ); //up far left - viewportMinX = Math.min(viewportMinX, (int) point[0]); - viewportMinY = Math.min(viewportMinY, (int) point[1]); - viewportMaxX = Math.max(viewportMaxX, (int) point[0]); - viewportMaxY = Math.max(viewportMaxY, (int) point[1]); - - limits.setMinXoctree(minX); - limits.setMaxXoctree(maxX); - limits.setMinYoctree(minY); - limits.setMaxYoctree(maxY); - limits.setMinZoctree(minZ); - limits.setMaxZoctree(maxZ); - - limits.setMinXviewport(viewportMinX); - limits.setMaxXviewport(viewportMaxX); - limits.setMinYviewport(viewportMinY); - limits.setMaxYviewport(viewportMaxY); - } - - public void updateVisibleOctant(GL2 gl) { - if (leavesCount > 0) { - //Limits - refreshLimits(); - - //Switch to OpenGL2 select mode - int capacity = 1 * 4 * leavesCount; //Each object take in maximium : 4 * name stack depth - IntBuffer hitsBuffer = Buffers.newDirectIntBuffer(capacity); - gl.glSelectBuffer(hitsBuffer.capacity(), hitsBuffer); - gl.glRenderMode(GL2.GL_SELECT); - gl.glInitNames(); - gl.glPushName(0); - gl.glDisable(GL2.GL_CULL_FACE); //Disable flags - //Draw the nodes cube in the select buffer - for (Octant n : leaves) { - if (n != null) { - gl.glLoadName(n.leafId); - n.displayOctant(gl); - n.visible = false; - } - } - visibleLeaves = 0; - int nbRecords = gl.glRenderMode(GL2.GL_RENDER); - if (vizController.getVizModel().isCulling()) { - gl.glEnable(GL2.GL_CULL_FACE); - gl.glCullFace(GL2.GL_BACK); - } - - //Get the hits and add the nodes' objects to the array - int depth = Integer.MAX_VALUE; - int minDepth = -1; - for (int i = 0; i < nbRecords; i++) { - int hit = hitsBuffer.get(i * 4 + 3); //-1 Because of the glPushName(0) - int minZ = hitsBuffer.get(i * 4 + 1); - if (minZ < depth) { - depth = minZ; - minDepth = hit; - } - - Octant nodeHit = leaves[hit]; - nodeHit.visible = true; - visibleLeaves++; - } - if (minDepth != -1) { - Octant closestOctant = leaves[minDepth]; - Vec3f pos = new Vec3f(closestOctant.getPosX(), closestOctant.getPosY(), closestOctant.getPosZ()); - limits.setClosestPoint(pos); - } - } - } - - public void updateSelectedOctant(GL2 gl, GLU glu, float[] mousePosition, float[] pickRectangle) { - if (visibleLeaves > 0) { - //Start Picking mode - int capacity = 1 * 4 * visibleLeaves; //Each object take in maximium : 4 * name stack depth - IntBuffer hitsBuffer = Buffers.newDirectIntBuffer(capacity); - - gl.glSelectBuffer(hitsBuffer.capacity(), hitsBuffer); - gl.glRenderMode(GL2.GL_SELECT); - gl.glDisable(GL2.GL_CULL_FACE); //Disable flags - - gl.glInitNames(); - gl.glPushName(0); - - gl.glMatrixMode(GL2.GL_PROJECTION); - gl.glPushMatrix(); - gl.glLoadIdentity(); - - glu.gluPickMatrix(mousePosition[0], mousePosition[1], pickRectangle[0], pickRectangle[1], drawable.getViewport()); - gl.glMultMatrixf(drawable.getProjectionMatrix()); - - gl.glMatrixMode(GL2.GL_MODELVIEW); - - //Draw the nodes' cube int the select buffer - List visibleLeaves = new ArrayList(); - for (Octant n : leaves) { - if (n != null && n.visible) { - int i = visibleLeaves.size() + 1; - visibleLeaves.add(n); - gl.glLoadName(i); - n.displayOctant(gl); - } - } - - //Restoring the original projection matrix - gl.glMatrixMode(GL2.GL_PROJECTION); - gl.glPopMatrix(); - gl.glMatrixMode(GL2.GL_MODELVIEW); - gl.glFlush(); - - //Returning to normal rendering mode - int nbRecords = gl.glRenderMode(GL2.GL_RENDER); - if (vizController.getVizModel().isCulling()) { - gl.glEnable(GL2.GL_CULL_FACE); - gl.glCullFace(GL2.GL_BACK); - } - - //Clean previous selection - selectedLeaves.clear(); - - //Get the hits and put the node under selection in the selectionArray - for (int i = 0; i < nbRecords; i++) { - int hit = hitsBuffer.get(i * 4 + 3) - 1; //-1 Because of the glPushName(0) - - Octant nodeHit = visibleLeaves.get(hit); - selectedLeaves.add(nodeHit); - } - } - } - - public void displayOctree(GL2 gl, GLU glu) { - gl.glDisable(GL2.GL_CULL_FACE); - gl.glPolygonMode(GL2.GL_FRONT_AND_BACK, GL2.GL_LINE); - for (Octant o : leaves) { - if (o != null && o.visible) { - gl.glColor3f(1, 0.5f, 0.5f); - o.displayOctant(gl); - o.displayOctantInfo(gl, glu); - } - } - if (!vizController.getVizConfig().isWireFrame()) { - gl.glPolygonMode(GL2.GL_FRONT_AND_BACK, GL2.GL_FILL); - } - - if (vizController.getVizModel().isCulling()) { - gl.glEnable(GL2.GL_CULL_FACE); - gl.glCullFace(GL2.GL_BACK); - } - } - - protected final class OctantIterator implements Iterator { - - private int leafId; - private Octant octant; - private int leavesLength; - private NodeModel[] nodes; - private int nodesId; - private int nodesLength; - private NodeModel pointer; - - public OctantIterator() { - leavesLength = leaves.length; - } - - @Override - public boolean hasNext() { - pointer = null; - while (pointer == null) { - while (nodesId < nodesLength && pointer == null) { - pointer = nodes[nodesId++]; - } - if (pointer == null) { - octant = null; - while (leafId < leavesLength && (octant == null || !octant.visible)) { - octant = leaves[leafId++]; - } - if (octant == null || !octant.visible) { - return false; - } - nodes = octant.nodes; - nodesId = 0; - nodesLength = octant.nodesLength; - } - } - return true; - } - - @Override - public NodeModel next() { - return pointer; - } - - public void reset() { - leafId = 0; - octant = null; - leavesLength = leaves.length; - nodes = null; - nodesId = 0; - nodesLength = 0; - pointer = null; - } - - @Override - public void remove() { - throw new UnsupportedOperationException("Not supported."); - } - } - - protected final class SelectableIterator implements Iterator { - - private int leavesLength; - private int leafId; - private Octant octant; - private NodeModel[] nodes; - private int nodesId; - private int nodesLength; - private NodeModel pointer; - - public SelectableIterator() { - leavesLength = selectedLeaves.size(); - } - - @Override - public boolean hasNext() { - pointer = null; - while (pointer == null) { - while (nodesId < nodesLength && pointer == null) { - pointer = nodes[nodesId++]; - } - if (pointer == null) { - octant = null; - while (leafId < leavesLength && octant == null) { - octant = selectedLeaves.get(leafId++); - } - if (octant == null) { - return false; - } - nodes = octant.nodes; - nodesId = 0; - nodesLength = octant.nodesLength; - } - } - return true; - } - - @Override - public NodeModel next() { - return pointer; - } - - public void reset() { - leafId = 0; - octant = null; - leavesLength = selectedLeaves.size(); - nodes = null; - nodesId = 0; - nodesLength = 0; - pointer = null; - } - - @Override - public void remove() { - throw new UnsupportedOperationException("Not supported."); - } - } - - protected final class EdgeIterator implements Iterator { - - private Iterator nodeItr; - private EdgeModel[] edges; - private int edgeId; - private int edgeLength; - private EdgeModel pointer; - - public EdgeIterator(Iterator nodeIterator) { - this.nodeItr = nodeIterator; - } - - @Override - public boolean hasNext() { - pointer = null; - while (pointer == null) { - while (edgeId < edgeLength && pointer == null) { - pointer = edges[edgeId++]; - } - if (pointer == null) { - if (nodeItr.hasNext()) { - NodeModel node = nodeItr.next(); - edges = node.getEdges(); - edgeLength = edges.length; - edgeId = 0; - } else { - return false; - } - } - } - return true; - } - - @Override - public EdgeModel next() { - return pointer; - } - - public void reset(Iterator nodeIterator) { - nodeItr = nodeIterator; - edges = null; - edgeLength = 0; - edgeId = 0; - pointer = null; - } - - @Override - public void remove() { - throw new UnsupportedOperationException("Not supported."); - } - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/opengl/AbstractEngine.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/opengl/AbstractEngine.java deleted file mode 100644 index df56031794..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/opengl/AbstractEngine.java +++ /dev/null @@ -1,286 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.opengl; - -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import javax.media.opengl.GL2; -import javax.media.opengl.glu.GLU; -import org.gephi.lib.gleem.linalg.Vecf; -import org.gephi.visualization.VizArchitecture; -import org.gephi.visualization.VizController; -import org.gephi.visualization.api.selection.SelectionArea; -import org.gephi.visualization.apiimpl.Engine; -import org.gephi.visualization.apiimpl.GraphIO; -import org.gephi.visualization.apiimpl.Scheduler; -import org.gephi.visualization.apiimpl.VizConfig; -import org.gephi.visualization.apiimpl.VizEventManager; -import org.gephi.visualization.bridge.DataBridge; -import org.gephi.visualization.model.ModelClass; -import org.gephi.visualization.model.ModelClassLibrary; -import org.gephi.visualization.model.node.NodeModel; -import org.gephi.visualization.octree.Octree; -import org.gephi.visualization.swing.GraphDrawableImpl; -import org.gephi.visualization.text.TextManager; - -/** - * Abstract graphic engine. Real graphic engines inherit from this class and can - * use the common functionalities. - * - * @author Mathieu Bastian - */ -public abstract class AbstractEngine implements Engine, VizArchitecture { - - //Enums - public enum Limits { - - MIN_X, MAX_X, MIN_Y, MAX_Y, MIN_Z, MAX_Z - }; - //Architecture - protected GraphDrawableImpl graphDrawable; - protected GraphIO graphIO; - protected VizEventManager vizEventManager; - protected SelectionArea currentSelectionArea; - protected ModelClassLibrary modelClassLibrary; - protected DataBridge dataBridge; - protected VizController vizController; - protected VizConfig vizConfig; - protected TextManager textManager; - //States - protected boolean rectangleSelection; - protected boolean customSelection; - protected EngineLifeCycle lifeCycle = new EngineLifeCycle(); - protected boolean configChanged = false; - protected boolean backgroundChanged = false; - protected boolean reinit = false; - protected float lightenAnimationDelta = 0f; - //Octree - protected Octree octree; - //User config - protected ModelClass nodeClass; - protected ModelClass edgeClass; - - @Override - public void initArchitecture() { - this.graphDrawable = VizController.getInstance().getDrawable(); - this.graphIO = VizController.getInstance().getGraphIO(); - this.modelClassLibrary = VizController.getInstance().getModelClassLibrary(); - this.dataBridge = VizController.getInstance().getDataBridge(); - this.vizController = VizController.getInstance(); - this.vizConfig = VizController.getInstance().getVizConfig(); - this.textManager = VizController.getInstance().getTextManager(); - initObject3dClass(); - initSelection(); - - //Vizconfig events - vizController.getVizModel().addPropertyChangeListener(new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - configChanged = true; - if (evt.getPropertyName().equals("backgroundColor")) { - backgroundChanged = true; - } else if (evt.getPropertyName().equals("use3d")) { - reinit = true; - } - - edgeClass.setEnabled(vizController.getVizModel().isShowEdges()); - } - }); - } - - public abstract void beforeDisplay(GL2 gl, GLU glu); - - public abstract void display(GL2 gl, GLU glu); - - public abstract void afterDisplay(GL2 gl, GLU glu); - - public abstract void initEngine(GL2 gl, GLU glu); - - public abstract void initScreenshot(GL2 gl, GLU glu); - - public abstract void cameraHasBeenMoved(GL2 gl, GLU glu); - - public abstract void mouseMove(); - - public abstract void mouseDrag(); - - public abstract void startDrag(); - - public abstract void stopDrag(); - - public abstract void mouseClick(); - - public abstract Scheduler getScheduler(); - -// public abstract void addObject(int classID, Model obj); -// public abstract void removeObject(int classID, Model obj); - public abstract void updateObjectsPosition(); - - public abstract boolean updateWorld(); - - public abstract void refreshGraphLimits(); - - public abstract void initObject3dClass(); - - public abstract void initSelection(); - - protected abstract void startAnimating(); - - protected abstract void stopAnimating(); - -// public abstract Model[] getSelectedObjects(int modelClass); -// public abstract void selectNodes(NodeModel obj); -// public abstract void selectObject(NodeModel[] objs); - public abstract void resetSelection(); - - /** - * Reset contents of octree for the given class - */ - public abstract void resetObjectClass(ModelClass object3dClass); - - public void reinit() { - reinit = true; - } - - protected boolean isUnderMouse(NodeModel obj) { - if (!currentSelectionArea.isEnabled()) { - return false; - } - float x1 = graphIO.getMousePosition()[0]; - float y1 = graphIO.getMousePosition()[1]; - - float x2 = obj.getViewportX(); - float y2 = obj.getViewportY(); - - float xDist = Math.abs(x2 - x1); - float yDist = Math.abs(y2 - y1); - - float distance = (float) Math.sqrt(xDist * xDist + yDist * yDist); - - Vecf d = new Vecf(5); - d.set(0, xDist); - d.set(1, yDist); - d.set(2, distance); - - return currentSelectionArea.mouseTest(d, obj); - } - - public SelectionArea getCurrentSelectionArea() { - return currentSelectionArea; - } - - public boolean isRectangleSelection() { - return rectangleSelection; - } - - public void setRectangleSelection(boolean rectangleSelection) { - vizConfig.setRectangleSelection(rectangleSelection); - configChanged = true; - lightenAnimationDelta = 0; - vizConfig.setLightenNonSelected(false); - } - - public void setConfigChanged(boolean configChanged) { - this.configChanged = configChanged; - } - - public void startDisplay() { - lifeCycle.requestStartAnimating(); - } - - public void stopDisplay() { - lifeCycle.requestStopAnimating(); - } - - public Octree getOctree() { - return octree; - } - - public ModelClass getNodeClass() { - return nodeClass; - } - - public ModelClass getEdgeClass() { - return edgeClass; - } - - protected class EngineLifeCycle { - - private boolean inited; - private boolean requestAnimation; - - public void requestStartAnimating() { - if (inited) { - startAnimating(); - } else { - requestAnimation = true; - } - } - - public void requestStopAnimating() { - if (inited) { - stopAnimating(); - } - } - - public void initEngine() { - } - - public boolean isInited() { - return inited; - } - - public void setInited() { - if (!inited) { - inited = true; - if (requestAnimation) { - //graphDrawable.display(); - startAnimating(); - requestAnimation = false; - } - } else { - dataBridge.reset(); - textManager.initArchitecture(); - } - } - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/opengl/CompatibilityEngine.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/opengl/CompatibilityEngine.java deleted file mode 100644 index 4dee54a806..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/opengl/CompatibilityEngine.java +++ /dev/null @@ -1,754 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.opengl; - -import java.awt.Color; -import java.nio.FloatBuffer; -import java.util.Arrays; -import java.util.Iterator; -import javax.media.opengl.GL2; -import javax.media.opengl.glu.GLU; -import javax.media.opengl.glu.GLUquadric; -import org.gephi.visualization.VizController; -import org.gephi.visualization.VizModel; -import org.gephi.visualization.api.initializer.Modeler; -import org.gephi.visualization.apiimpl.Scheduler; -import org.gephi.visualization.model.ModelClass; -import org.gephi.visualization.model.edge.EdgeModel; -import org.gephi.visualization.model.node.NodeModel; -import org.gephi.visualization.model.node.NodeModeler; -import org.gephi.visualization.octree.Octree; -import org.gephi.visualization.scheduler.CompatibilityScheduler; -import org.gephi.visualization.selection.Cylinder; -import org.gephi.visualization.selection.Rectangle; - -/** - * - * @author Mathieu Bastian - */ -public class CompatibilityEngine extends AbstractEngine { - - private CompatibilityScheduler scheduler; - private int markTime = 0; - //Selection -// private ConcurrentLinkedQueue[] selectedObjects; - private boolean anySelected = false; - - public CompatibilityEngine() { - super(); - } - - @Override - public void initArchitecture() { - super.initArchitecture(); - scheduler = (CompatibilityScheduler) VizController.getInstance().getScheduler(); - vizEventManager = VizController.getInstance().getVizEventManager(); - - //Init - octree = new Octree(vizConfig.getOctreeDepth(), vizConfig.getOctreeWidth()); - octree.initArchitecture(); - } - - public void updateSelection(GL2 gl, GLU glu) { - if (vizConfig.isSelectionEnable() && currentSelectionArea != null && currentSelectionArea.isEnabled()) { - float[] mp = Arrays.copyOf(graphIO.getMousePosition(), 2); - float[] cent = currentSelectionArea.getSelectionAreaCenter(); - if (cent != null) { - mp[0] += cent[0]; - mp[1] += cent[1]; - } - octree.updateSelectedOctant(gl, glu, mp, currentSelectionArea.getSelectionAreaRectancle()); - } - } - - @Override - public boolean updateWorld() { - boolean repositioned = octree.repositionNodes(); - boolean updated = dataBridge.updateWorld(); - - return repositioned || updated; -// boolean res = false; -// boolean newConfig = configChanged; -// if (newConfig) { -// dataBridge.reset(); -// if (!vizConfig.isCustomSelection()) { -// //Reset model classes -//// for (ModelClass objClass : getModelClasses()) { -//// if (objClass.isEnabled()) { -//// objClass.swapModelers(); -//// resetObjectClass(objClass); -//// } -//// } -// } -// -// initSelection(); -// -// } -// if (dataBridge.requireUpdate() || newConfig) { -// dataBridge.updateWorld(); -// res = true; -// } -// if (newConfig) { -// -// configChanged = false; -// } -// return res; - } - - @Override - public void beforeDisplay(GL2 gl, GLU glu) { - //Lighten delta - if (lightenAnimationDelta != 0) { - float factor = vizConfig.getLightenNonSelectedFactor(); - factor += lightenAnimationDelta; - if (factor >= 0.5f && factor <= 0.98f) { - vizConfig.setLightenNonSelectedFactor(factor); - } else { - lightenAnimationDelta = 0; - vizConfig.setLightenNonSelected(anySelected); - } - } - - if (backgroundChanged) { - Color backgroundColor = vizController.getVizModel().getBackgroundColor(); - gl.glClearColor(backgroundColor.getRed() / 255f, backgroundColor.getGreen() / 255f, backgroundColor.getBlue() / 255f, 1f); - gl.glClear(GL2.GL_COLOR_BUFFER_BIT); - backgroundChanged = false; - } - - if (reinit) { - VizController.getInstance().refreshWorkspace(); - dataBridge.reset(); - graphDrawable.initConfig(gl); - graphDrawable.setCameraLocation(vizController.getVizModel().getCameraPosition()); - graphDrawable.setCameraTarget(vizController.getVizModel().getCameraTarget()); - vizConfig.setCustomSelection(false); - reinit = false; - } - } - - @Override - public void display(GL2 gl, GLU glu) { - //Update viewport - NodeModeler nodeModeler = (NodeModeler) nodeClass.getCurrentModeler(); - for (Iterator itr = octree.getNodeIterator(); itr.hasNext();) { //TODO Move this - NodeModel obj = itr.next(); - nodeModeler.setViewportPosition(obj); - } - - markTime++; - - VizModel vizModel = VizController.getInstance().getVizModel(); - - //Edges - if (edgeClass.isEnabled()) { - edgeClass.beforeDisplay(gl, glu); - - for (Iterator itr = octree.getEdgeIterator(); itr.hasNext();) { - EdgeModel obj = itr.next(); - - if (obj.markTime != markTime) { - obj.display(gl, glu, vizModel); - obj.markTime = markTime; - } - } - edgeClass.afterDisplay(gl, glu); - } - - markTime++; - - //Arrows - if (edgeClass.isEnabled() && vizConfig.isShowArrows() && dataBridge.isDirected()) { - gl.glBegin(GL2.GL_TRIANGLES); - for (Iterator itr = octree.getEdgeIterator(); itr.hasNext();) { - EdgeModel obj = itr.next(); - if (obj.getEdge().isDirected() && obj.markTime != markTime) { - obj.displayArrow(gl, glu, vizModel); - obj.markTime = markTime; - } - } - gl.glEnd(); - } - - //Nodes - if (nodeClass.isEnabled()) { - nodeClass.beforeDisplay(gl, glu); - for (Iterator itr = octree.getNodeIterator(); itr.hasNext();) { - NodeModel obj = itr.next(); - if (obj.markTime != markTime) { - obj.display(gl, glu, vizModel); - obj.markTime = markTime; - } - } - nodeClass.afterDisplay(gl, glu); - } - - //Labels - if (vizModel.getTextModel().isShowNodeLabels() || vizModel.getTextModel().isShowEdgeLabels()) { - markTime++; - if (nodeClass.isEnabled() && vizModel.getTextModel().isShowNodeLabels()) { - textManager.getNodeRenderer().beginRendering(); - textManager.defaultNodeColor(); - if (textManager.isSelectedOnly()) { - for (Iterator itr = octree.getNodeIterator(); itr.hasNext();) { - NodeModel obj = itr.next(); - if (obj.markTime != markTime) { - if (obj.isSelected() && obj.isTextVisible()) { - textManager.getNodeRenderer().drawTextNode(obj); - } - obj.markTime = markTime; - } - } - } else { - for (Iterator itr = octree.getNodeIterator(); itr.hasNext();) { - NodeModel obj = itr.next(); - if (obj.markTime != markTime) { - if (obj.isTextVisible()) { - textManager.getNodeRenderer().drawTextNode(obj); - } - obj.markTime = markTime; - } - } - } - textManager.getNodeRenderer().endRendering(); - } -// if (edgeClass.isEnabled() && vizModel.getTextModel().isShowEdgeLabels()) { -// textManager.getEdgeRenderer().beginRendering(); -// textManager.defaultEdgeColor(); -// if (textManager.isSelectedOnly()) { -// for (Iterator itr = octree.getObjectIterator(AbstractEngine.CLASS_EDGE); itr.hasNext();) { -// ModelImpl obj = itr.next(); -// if (obj.markTime != markTime) { -// if ((obj.isSelected() || obj.isHighlight()) && obj.getObj().getTextData().isVisible()) { -// textManager.getEdgeRenderer().drawTextEdge(obj); -// } -// obj.markTime = markTime; -// } -// } -// } else { -// for (Iterator itr = octree.getObjectIterator(AbstractEngine.CLASS_EDGE); itr.hasNext();) { -// ModelImpl obj = itr.next(); -// if (obj.markTime != markTime) { -// if (obj.getObj().getTextData().isVisible()) { -// textManager.getEdgeRenderer().drawTextEdge(obj); -// } -// obj.markTime = markTime; -// } -// } -// } -// textManager.getEdgeRenderer().endRendering(); -// } - } - - -// octree.displayOctree(gl, glu); - } - - @Override - public void afterDisplay(GL2 gl, GLU glu) { - if (vizConfig.isSelectionEnable() && currentSelectionArea != null) { - gl.glMatrixMode(GL2.GL_PROJECTION); - gl.glPushMatrix(); - gl.glLoadIdentity(); - gl.glOrtho(0, graphDrawable.getViewportWidth(), 0, graphDrawable.getViewportHeight(), -1, 1); - gl.glMatrixMode(GL2.GL_MODELVIEW); - gl.glPushMatrix(); - gl.glLoadIdentity(); - currentSelectionArea.drawArea(gl, glu); - gl.glMatrixMode(GL2.GL_PROJECTION); - gl.glPopMatrix(); - gl.glMatrixMode(GL2.GL_MODELVIEW); - gl.glPopMatrix(); - } - graphIO.trigger(); - } - - @Override - public void cameraHasBeenMoved(GL2 gl, GLU glu) { - } - - @Override - public void initEngine(final GL2 gl, final GLU glu) { - initDisplayLists(gl, glu); -// scheduler.cameraMoved.set(true); -// scheduler.mouseMoved.set(true); - lifeCycle.setInited(); - } - - @Override - public void initScreenshot(GL2 gl, GLU glu) { - initDisplayLists(gl, glu); - textManager.getNodeRenderer().reinitRenderer(); - textManager.getEdgeRenderer().reinitRenderer(); -// scheduler.cameraMoved.set(true); - } - - @Override - public void resetObjectClass(ModelClass object3dClass) { -// octree.resetObjectClass(object3dClass.getClassId()); - } - - @Override - public void mouseClick() { - if (vizConfig.isSelectionEnable() && rectangleSelection && !customSelection) { - Rectangle rectangle = (Rectangle) currentSelectionArea; - //rectangle.setBlocking(false); - - //Select with click - int i = 0; - boolean someSelection = false; - -// for (Iterator itr = octree.getSelectedObjectIterator(objClass.getClassId()); itr.hasNext();) { -// NodeModel obj = (NodeModel) itr.next(); -// if (isUnderMouse(obj)) { -// if (!obj.isSelected()) { -// //New selected -// obj.setSelected(true); -// /*if (vizEventManager.hasSelectionListeners()) { -// newSelectedObjects.add(obj); -// }*/ -// selectedObjects[i].add(obj); -// } -// someSelection = true; -// obj.selectionMark = markTime2; -// } -// } -// if (!(rectangle.isCtrl() && someSelection)) { -// for (Iterator itr = selectedObjects[i].iterator(); itr.hasNext();) { -// ModelImpl o = itr.next(); -// if (o.selectionMark != markTime2) { -// itr.remove(); -// o.setSelected(false); -// } -// } -// -// -// i++; -// } - rectangle.setBlocking(someSelection); - - if (vizController.getVizModel().isLightenNonSelectedAuto()) { - - if (vizConfig.isLightenNonSelectedAnimation()) { - if (!anySelected && someSelection) { - //Start animation - lightenAnimationDelta = 0.07f; - } else if (anySelected && !someSelection) { - //Stop animation - lightenAnimationDelta = -0.07f; - } - - vizConfig.setLightenNonSelected(someSelection || lightenAnimationDelta != 0); - } else { - vizConfig.setLightenNonSelected(someSelection); - } - } - - anySelected = someSelection; - - scheduler.requireUpdateSelection(); - } - } - - @Override - public void mouseDrag() { - if (vizConfig.isMouseSelectionUpdateWhileDragging()) { - mouseMove(); - } else { -// float[] drag = graphIO.getMouseDrag3d(); -// for (ModelImpl obj : selectedObjects[0]) { -// float[] mouseDistance = obj.getDragDistanceFromMouse(); -// obj.getObj().setX(drag[0] + mouseDistance[0]); -// obj.getObj().setY(drag[1] + mouseDistance[1]); -// } - } - } - - @Override - public void mouseMove() { - //Selection - if (vizConfig.isSelectionEnable() && rectangleSelection) { - Rectangle rectangle = (Rectangle) currentSelectionArea; - rectangle.setMousePosition(graphIO.getMousePosition()); - if (rectangle.isStop()) { - return; - } - } - - if (customSelection || currentSelectionArea.blockSelection()) { - return; - } -// -// -// /*List newSelectedObjects = null; -// List unSelectedObjects = null; -// -// if (vizEventManager.hasSelectionListeners()) { -// newSelectedObjects = new ArrayList(); -// unSelectedObjects = new ArrayList(); -// }*/ -// - boolean someSelection = false; - for (Iterator itr = octree.getSelectableNodeIterator(); itr.hasNext();) { - NodeModel obj = itr.next(); - if (isUnderMouse(obj)) { - if (!obj.isSelected()) { - //New selected - obj.setSelected(true); - } - someSelection = true; - } else if (obj.isSelected()) { - obj.setSelected(false); - } - } -// -// for (ModelClass objClass : selectableClasses) { -// forceUnselect = objClass.isAloneSelection() && someSelection; -// for (Iterator itr = octree.getSelectedObjectIterator(objClass.getClassId()); itr.hasNext();) { -// ModelImpl obj = itr.next(); -// if (!forceUnselect && isUnderMouse(obj) && currentSelectionArea.select(obj.getObj())) { -// if (!objClass.isAloneSelection()) { //avoid potatoes to select -// someSelection = true; -// } -// if (!obj.isSelected()) { -// //New selected -// obj.setSelected(true); -// /*if (vizEventManager.hasSelectionListeners()) { -// newSelectedObjects.add(obj); -// }*/ -// selectedObjects[i].add(obj); -// } -// obj.selectionMark = markTime2; -// } else if (currentSelectionArea.unselect(obj.getObj())) { -// if (forceUnselect) { -// obj.setAutoSelect(false); -// } /*else if (vizEventManager.hasSelectionListeners() && obj.isSelected()) { -// unSelectedObjects.add(obj); -// }*/ -// } -// } -// -// for (Iterator itr = selectedObjects[i].iterator(); itr.hasNext();) { -// ModelImpl o = itr.next(); -// if (o.selectionMark != markTime2) { -// itr.remove(); -// o.setSelected(false); -// } -// } -// } -// - if (vizController.getVizModel().isLightenNonSelectedAuto()) { - - if (vizConfig.isLightenNonSelectedAnimation()) { - if (!anySelected && someSelection) { - //Start animation - lightenAnimationDelta = 0.07f; - } else if (anySelected && !someSelection) { - //Stop animation - lightenAnimationDelta = -0.07f; - } - - vizConfig.setLightenNonSelected(someSelection || lightenAnimationDelta != 0); - } else { - vizConfig.setLightenNonSelected(someSelection); - } - } - anySelected = someSelection; - } - - @Override - public void refreshGraphLimits() { - } - - @Override - public void startDrag() { - float x = graphIO.getMouseDrag3d()[0]; - float y = graphIO.getMouseDrag3d()[1]; - -// for (Iterator itr = selectedObjects[0].iterator(); itr.hasNext();) { -// ModelImpl o = itr.next(); -// float[] tab = o.getDragDistanceFromMouse(); -// tab[0] = o.getObj().x() - x; -// tab[1] = o.getObj().y() - y; -// } - } - - @Override - public void stopDrag() { - - //Selection - if (vizConfig.isSelectionEnable() && rectangleSelection) { - Rectangle rectangle = (Rectangle) currentSelectionArea; - rectangle.stop(); - scheduler.requireUpdateSelection(); - } - } - - @Override - public void updateObjectsPosition() { -// for (ModelClass objClass : modelClasses) { -// if (objClass.isEnabled()) { -// octree.updateObjectsPosition(objClass.getClassId()); -// } -// } - } - -// @Override -// public ModelImpl[] getSelectedObjects(int modelClass) { -// return selectedObjects[modelClasses[modelClass].getSelectionId()].toArray(new ModelImpl[0]); -// } -// @Override -// public void selectObject(Model obj) { -// ModelImpl modl = (ModelImpl) obj; -// if (!customSelection) { -// vizConfig.setRectangleSelection(false); -// customSelection = true; -// configChanged = true; -// //Reset -// for (ModelClass objClass : selectableClasses) { -// for (Iterator itr = selectedObjects[objClass.getSelectionId()].iterator(); itr.hasNext();) { -// ModelImpl o = itr.next(); -// itr.remove(); -// o.setSelected(false); -// } -// } -// anySelected = true; -// //Force highlight -// if (vizController.getVizModel().isLightenNonSelectedAuto()) { -// -// if (vizConfig.isLightenNonSelectedAnimation()) { -// //Start animation -// lightenAnimationDelta = 0.07f; -// vizConfig.setLightenNonSelected(true); -// } else { -// vizConfig.setLightenNonSelected(true); -// } -// } -// } -// modl.setSelected(true); -// if (modl.getObj() instanceof NodeData) { -// selectedObjects[modelClasses[AbstractEngine.CLASS_NODE].getSelectionId()].add(modl); -// } -// -// forceSelectRefresh(modelClasses[AbstractEngine.CLASS_EDGE].getClassId()); -// } -// @Override -// public void selectObject(Model[] objs) { -// if (!customSelection) { -// vizConfig.setRectangleSelection(false); -// customSelection = true; -// configChanged = true; -// //Reset -// for (ModelClass objClass : selectableClasses) { -// for (Iterator itr = selectedObjects[objClass.getSelectionId()].iterator(); itr.hasNext();) { -// ModelImpl o = itr.next(); -// itr.remove(); -// o.setSelected(false); -// } -// } -// anySelected = true; -// //Force highlight -// if (vizController.getVizModel().isLightenNonSelectedAuto()) { -// -// if (vizConfig.isLightenNonSelectedAnimation()) { -// //Start animation -// lightenAnimationDelta = 0.07f; -// vizConfig.setLightenNonSelected(true); -// } else { -// vizConfig.setLightenNonSelected(true); -// } -// } -// } else { -// //Reset -// for (ModelClass objClass : selectableClasses) { -// for (Iterator itr = selectedObjects[objClass.getSelectionId()].iterator(); itr.hasNext();) { -// ModelImpl o = itr.next(); -// itr.remove(); -// o.setSelected(false); -// } -// } -// -// for (Iterator itr = octree.getSelectedObjectIterator(modelClasses[AbstractEngine.CLASS_EDGE].getClassId()); itr.hasNext();) { -// ModelImpl obj = itr.next(); -// obj.setSelected(false); -// } -// } -// for (Model r : objs) { -// if (r != null) { -// ModelImpl mdl = (ModelImpl) r; -// mdl.setSelected(true); -// if (mdl.getObj() instanceof NodeData) { -// selectedObjects[modelClasses[AbstractEngine.CLASS_NODE].getSelectionId()].add(mdl); -// } else if (mdl.getObj() instanceof EdgeData) { -// selectedObjects[modelClasses[AbstractEngine.CLASS_EDGE].getSelectionId()].add(mdl); -// } -// } -// } -// -// } - public void forceSelectRefresh(int selectedClass) { -// for (Iterator itr = octree.getSelectedObjectIterator(selectedClass); itr.hasNext();) { -// ModelImpl obj = itr.next(); -// if (isUnderMouse(obj)) { -// if (!obj.isSelected()) { -// //New selected -// obj.setSelected(true); -// selectedObjects[selectedClass].add(obj); -// } -// } -// } - } - - @Override - public void resetSelection() { - customSelection = false; - configChanged = true; - anySelected = false; -// for (ModelClass objClass : selectableClasses) { -// selectedObjects[objClass.getSelectionId()].clear(); -// } - } - - private void initDisplayLists(GL2 gl, GLU glu) { - //Constants - float blancCasse[] = {(float) 213 / 255, (float) 208 / 255, (float) 188 / 255, 1.0f}; - float noirCasse[] = {(float) 39 / 255, (float) 25 / 255, (float) 99 / 255, 1.0f}; - float noir[] = {(float) 0 / 255, (float) 0 / 255, (float) 0 / 255, 0.0f}; - float[] shine_low = {10.0f, 0.0f, 0.0f, 0.0f}; - FloatBuffer ambient_metal = FloatBuffer.wrap(noir); - FloatBuffer diffuse_metal = FloatBuffer.wrap(noirCasse); - FloatBuffer specular_metal = FloatBuffer.wrap(blancCasse); - FloatBuffer shininess_metal = FloatBuffer.wrap(shine_low); - //End - - //Quadric for all the glu models - GLUquadric quadric = glu.gluNewQuadric(); - int ptr = gl.glGenLists(4); - - // Metal material display list - int MATTER_METAL = ptr; - gl.glNewList(MATTER_METAL, GL2.GL_COMPILE); - gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_AMBIENT, ambient_metal); - gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_DIFFUSE, diffuse_metal); - gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_SPECULAR, specular_metal); - gl.glMaterialfv(GL2.GL_FRONT_AND_BACK, GL2.GL_SHININESS, shininess_metal); - gl.glEndList(); - //Fin - - //Display lists - for (Modeler cis : nodeClass.getModelers()) { - int newPtr = cis.initDisplayLists(gl, glu, quadric, ptr); - ptr = newPtr; - } - //Fin - - // Sphere with a texture - //SHAPE_BILLBOARD = SHAPE_SPHERE32 + 1; - /*gl.glNewList(SHAPE_BILLBOARD,GL2.GL_COMPILE); - textures[0].bind(); - gl.glBegin(GL2.GL_TRIANGLE_STRIP); - // Map the texture and create the vertices for the particle. - gl.glTexCoord2d(1, 1); - gl.glVertex3f(0.5f, 0.5f, 0); - gl.glTexCoord2d(0, 1); - gl.glVertex3f(-0.5f, 0.5f,0); - gl.glTexCoord2d(1, 0); - gl.glVertex3f(0.5f, -0.5f, 0); - gl.glTexCoord2d(0, 0); - gl.glVertex3f(-0.5f,-0.5f, 0); - gl.glEnd(); - - gl.glBindTexture(GL2.GL_TEXTURE_2D,0); - gl.glEndList();*/ - //Fin - - glu.gluDeleteQuadric(quadric); - } - - @Override - public void initObject3dClass() { - modelClassLibrary.createModelClassesCompatibility(this); - nodeClass = modelClassLibrary.getNodeClass(); - edgeClass = modelClassLibrary.getEdgeClass(); - - nodeClass.setEnabled(true); - edgeClass.setEnabled(vizController.getVizModel().isShowEdges()); - } - - @Override - public void initSelection() { - if (vizConfig.isCustomSelection()) { - rectangleSelection = false; - currentSelectionArea = null; - } else if (vizConfig.isRectangleSelection()) { - currentSelectionArea = new Rectangle(); - rectangleSelection = true; - customSelection = false; - } else { - currentSelectionArea = new Cylinder(); - rectangleSelection = false; - customSelection = false; - } - } - - @Override - public void startAnimating() { - if (!scheduler.isAnimating()) { - scheduler.start(); - graphIO.startMouseListening(); - } - } - - @Override - public void stopAnimating() { - if (scheduler.isAnimating()) { - scheduler.stop(); - graphIO.stopMouseListening(); - } - - } - - @Override - public Scheduler getScheduler() { - return scheduler; - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/opengl/JOGLNativesInstaller.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/opengl/JOGLNativesInstaller.java deleted file mode 100644 index e66b3ce7dc..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/opengl/JOGLNativesInstaller.java +++ /dev/null @@ -1,288 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.opengl; - -import java.io.File; -import java.lang.reflect.InvocationTargetException; -import java.text.MessageFormat; -import javax.swing.SwingUtilities; -import org.openide.DialogDisplayer; -import org.openide.NotifyDescriptor; -import org.openide.modules.InstalledFileLocator; -import org.openide.modules.ModuleInstall; -import org.openide.util.Exceptions; -import org.openide.util.NbBundle; - -/** - * Manages the JOGL2 natives loading. Thanks to Michael Bien, Lilian Chamontin - * and Kenneth Russell. - * - * @author Mathieu Bastan - */ -public class JOGLNativesInstaller extends ModuleInstall { - - private NativeLibInfo nativeLibInfo; //Compatible nativeLibInfo with OS/Arch - private boolean exitOnFatalError = true; - - @Override - public void restored() { - if (System.getProperty("org.gephi.joGL2.init", "true").equals("true")) { - if (findCompatibleOsAndArch()) { - String nativeArch = nativeLibInfo.getSubDirectoryPath(); - File joglDistFolder = InstalledFileLocator.getDefault().locate("modules/lib/" + nativeArch, "org-gephi-visualization-impl", false); - if (joglDistFolder != null) { - loadNatives(joglDistFolder); - } else { - fatalError(String.format(NbBundle.getMessage(JOGLNativesInstaller.class, "JOGLNativesInstaller_error1"), new Object[]{nativeArch})); - } - } - } - } - - //============================================================= - //============================================================= - private boolean findCompatibleOsAndArch() { - String osName = System.getProperty("os.name"); - String osArch = System.getProperty("os.arch"); - if (checkOSAndArch(osName, osArch)) { - return true; - } else { - fatalError(String.format(NbBundle.getMessage(JOGLNativesInstaller.class, "JOGLNativesInstaller_error2"), new Object[]{osName, osArch})); - } - return false; - } - - boolean checkOSAndArch(String osName, String osArch) { - for (int i = 0; i < allNativeLibInfo.length; i++) { - NativeLibInfo info = allNativeLibInfo[i]; - if (info.matchesOSAndArch(osName, osArch)) { - nativeLibInfo = info; - return true; - } - } - return false; - } - - private void loadNatives(final File nativeLibDir) { - try { - // back to the EDT - SwingUtilities.invokeAndWait(new Runnable() { - @Override - public void run() { - System.out.println("Loading native libraries"); - // disable JOGL2 and GlueGen runtime library loading from elsewhere -// com.sun.openGL2.impl.NativeLibLoader.disableLoading(); -// com.sun.gluegen.runtime.NativeLibLoader.disableLoading(); - // Open GlueGen runtime library optimistically. Note that - // currently we do not need this on any platform except X11 - // ones, because JOGL2 doesn't use the GlueGen NativeLibrary - // class anywhere except the DRIHack class, but if for - // example we add JOAL support then we will need this on - // every platform. - loadLibrary(nativeLibDir, "gluegen-rt"); - Class driHackClass = null; - if (nativeLibInfo.mayNeedDRIHack()) { - // Run the DRI hack - try { - driHackClass = Class.forName("com.sun.openGL2.impl.x11.DRIHack"); - driHackClass.getMethod("begin", new Class[]{}).invoke(null, new Object[]{}); - } catch (Exception e) { - e.printStackTrace(); - } - } - // Load core JOGL2 native library - loadLibrary(nativeLibDir, "jogl"); - if (nativeLibInfo.mayNeedDRIHack()) { - // End DRI hack - try { - driHackClass.getMethod("end", new Class[]{}).invoke(null, new Object[]{}); - } catch (Exception e) { - e.printStackTrace(); - } - } - if (!nativeLibInfo.isMacOS()) { - // borrowed from NativeLibLoader - // Must pre-load JAWT on all non-Mac platforms to - // ensure references from jogl_awt shared object - // will succeed since JAWT shared object isn't in - // default library path - try { - System.loadLibrary("jawt"); - } catch (UnsatisfiedLinkError ex) { - // Accessibility technologies load JAWT themselves; safe to continue - // as long as JAWT is loaded by any loader - if (ex.getMessage().indexOf("already loaded") == -1) { - fatalError(String.format(NbBundle.getMessage(JOGLNativesInstaller.class, "JOGLNativesInstaller_error3"), new Object[]{})); - } - } - } else { - //Make sure jawt is loaded on Mac Os X, Issue #542 - //In Lion the symbolic link to the /Librarires might be missing is some JDK - //JAWT is a dependency of jogl_awt so it needs to be accessible - //We force to load the library at the default location - File defaultJdk = new File("/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK"); - if (!defaultJdk.exists()) { - //Use the current JDK path and remove the /Home - String javaHome = System.getProperty("java.home"); - javaHome = javaHome.substring(0, javaHome.lastIndexOf("Home")); - defaultJdk = new File(javaHome); - } - File libraryPath = new File(defaultJdk, "Libraries"); - File jawtPath = new File(libraryPath, "libjawt.dylib"); - if (libraryPath.exists() && jawtPath.exists()) { - //Load library file - loadLibrary(jawtPath); - } else { - System.out.println("Issue #452: Can't locate the default Libraries folder to load the" - + "JAWT library. This library is needed as a dependency of jogl_awt and is" - + "normally installed in the JDK. To fix that please make sure to have the" - + "'/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK' path" - + "points to the current Java installation."); - } - } - // Load AWT-specific native code - loadLibrary(nativeLibDir, "jogl_awt"); - } - }); - } catch (InterruptedException ex) { - Exceptions.printStackTrace(ex); - } catch (InvocationTargetException ex) { - Exceptions.printStackTrace(ex); - } - } - - private void loadLibrary(File installDir, String libName) { - String nativeLibName = nativeLibInfo.getNativeLibName(libName); - loadLibrary(new File(installDir, nativeLibName)); - } - - private void loadLibrary(File file) { - try { - System.load(file.getPath()); - } catch (UnsatisfiedLinkError ex) { - // should be safe to continue as long as the native is loaded by any loader - if (ex.getMessage().indexOf("already loaded") == -1) { - fatalError(String.format(NbBundle.getMessage(JOGLNativesInstaller.class, "JOGLNativesInstaller_error4"), new Object[]{file.getName()})); - } - } - } - - private void fatalError(String error) { - Exception ex = new Exception(error); - NotifyDescriptor.Exception e = new NotifyDescriptor.Exception(ex); - DialogDisplayer.getDefault().notify(e); - if (exitOnFatalError) { - System.exit(1); - } - } - - private static class NativeLibInfo { - - private String osName; - private String osArch; - private String osNameAndArchPair; - private String nativePrefix; - private String nativeSuffix; - - public NativeLibInfo(String osName, String osArch, String osNameAndArchPair, String nativePrefix, String nativeSuffix) { - this.osName = osName; - this.osArch = osArch; - this.osNameAndArchPair = osNameAndArchPair; - this.nativePrefix = nativePrefix; - this.nativeSuffix = nativeSuffix; - } - - public boolean matchesOSAndArch(String osName, String osArch) { - if (osName.toLowerCase().startsWith(this.osName)) { - if ((this.osArch == null) - || (osArch.toLowerCase().equals(this.osArch))) { - return true; - } - } - return false; - } - - public boolean matchesNativeLib(String fileName) { - if (fileName.toLowerCase().endsWith(nativeSuffix)) { - return true; - } - return false; - } - - public String formatNativeJarName(String nativeJarPattern) { - return MessageFormat.format(nativeJarPattern, new Object[]{osNameAndArchPair}); - } - - public String getNativeLibName(String baseName) { - return nativePrefix + baseName + nativeSuffix; - } - - public boolean isMacOS() { - return (osName.equals("mac")); - } - - public boolean mayNeedDRIHack() { - return (!isMacOS() && !osName.equals("win")); - } - - public String getSubDirectoryPath() { - return osNameAndArchPair; - } - } - private static final NativeLibInfo[] allNativeLibInfo = { - new NativeLibInfo("win", "x86", "windows-i586", "", ".dll"), - new NativeLibInfo("win", "amd64", "windows-amd64", "", ".dll"), - new NativeLibInfo("win", "x86_64", "windows-amd64", "", ".dll"), - new NativeLibInfo("mac", "ppc", "macosx-ppc", "lib", ".jnilib"), - new NativeLibInfo("mac", "i386", "macosx-universal", "lib", ".jnilib"), - new NativeLibInfo("mac", "x86_64", "macosx-universal", "lib", ".jnilib"), - new NativeLibInfo("linux", "i386", "linux-i586", "lib", ".so"), - new NativeLibInfo("linux", "x86", "linux-i586", "lib", ".so"), - new NativeLibInfo("linux", "amd64", "linux-amd64", "lib", ".so"), - new NativeLibInfo("linux", "x86_64", "linux-amd64", "lib", ".so"), - new NativeLibInfo("sunos", "sparc", "solaris-sparc", "lib", ".so"), - new NativeLibInfo("sunos", "sparcv9", "solaris-sparcv9", "lib", ".so"), - new NativeLibInfo("sunos", "x86", "solaris-i586", "lib", ".so"), - new NativeLibInfo("sunos", "amd64", "solaris-amd64", "lib", ".so"), - new NativeLibInfo("sunos", "x86_64", "solaris-amd64", "lib", ".so") - }; -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/opengl/Lighting.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/opengl/Lighting.java deleted file mode 100644 index ac7b399268..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/opengl/Lighting.java +++ /dev/null @@ -1,199 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.opengl; - -import java.util.ArrayList; -import java.util.List; -import javax.media.opengl.GL2; -import org.gephi.ui.utils.PrefsUtils; -import org.openide.util.NbPreferences; - -public class Lighting { - - //Const preferences - public static final String AMBIANT_ENABLED = "Lighting.ambiant.enabled"; - public static final String AMBIANT_AMBIANT = "Lighting.ambiant.ambiant"; - public static final String AMBIANT_SPECULAR = "Lighting.ambiant.specular"; - public static final String AMBIANT_DIFFUSE = "Lighting.ambiant.diffuse"; - public static final String LIGHT1_ENABLED = "Lighting.light1.enabled"; - public static final String LIGHT1_AMBIANT = "Lighting.light1.ambiant"; - public static final String LIGHT1_SPECULAR = "Lighting.light1.specular"; - public static final String LIGHT1_DIFFUSE = "Lighting.light1.diffuse"; - public static final String LIGHT1_POSITION = "Lighting.light1.position"; - public static final String LIGHT2_ENABLED = "Lighting.light2.enabled"; - public static final String LIGHT2_AMBIANT = "Lighting.light2.ambiant"; - public static final String LIGHT2_SPECULAR = "Lighting.light2.specular"; - public static final String LIGHT2_DIFFUSE = "Lighting.light2.diffuse"; - public static final String LIGHT2_POSITION = "Lighting.light2.position"; - public static final String LIGHT3_ENABLED = "Lighting.light3.enabled"; - public static final String LIGHT3_AMBIANT = "Lighting.light3.ambiant"; - public static final String LIGHT3_SPECULAR = "Lighting.light3.specular"; - public static final String LIGHT3_DIFFUSE = "Lighting.light3.diffuse"; - public static final String LIGHT3_POSITION = "Lighting.light3.position"; - //Data - private List lights; - - public Lighting() { - createLights(); - } - - private void createLights() { - lights = new ArrayList(); - - Light ambiant = new Light(GL2.GL_LIGHT0); - ambiant.setEnabled(NbPreferences.forModule(Lighting.class).getBoolean(AMBIANT_ENABLED, true)); - ambiant.setAmbiant(PrefsUtils.stringToFloatArray(NbPreferences.forModule(Lighting.class).get(AMBIANT_AMBIANT, "0.30, 0.33, 0.33, 1.0"))); - ambiant.setDiffuse(PrefsUtils.stringToFloatArray(NbPreferences.forModule(Lighting.class).get(AMBIANT_DIFFUSE, "0.15, 0.10, 0.39, 1.0"))); - ambiant.setSpecular(PrefsUtils.stringToFloatArray(NbPreferences.forModule(Lighting.class).get(AMBIANT_SPECULAR, "0, 0, 0, 1"))); - - Light light1 = new Light(GL2.GL_LIGHT1); - light1.setEnabled(NbPreferences.forModule(Lighting.class).getBoolean(LIGHT1_ENABLED, true)); - light1.setAmbiant(PrefsUtils.stringToFloatArray(NbPreferences.forModule(Lighting.class).get(LIGHT1_AMBIANT, "0.0, 0.0, 0.0, 1.0"))); - light1.setSpecular(PrefsUtils.stringToFloatArray(NbPreferences.forModule(Lighting.class).get(LIGHT1_SPECULAR, "0.91, 0.31, 0.31, 1.0"))); - light1.setDiffuse(PrefsUtils.stringToFloatArray(NbPreferences.forModule(Lighting.class).get(LIGHT1_DIFFUSE, "0.61, 0.28, 0.20, 1.0"))); - light1.setDirection(PrefsUtils.stringToFloatArray(NbPreferences.forModule(Lighting.class).get(LIGHT1_POSITION, "-1.0, -1.2, -0.5, 0.0"))); - - Light light2 = new Light(GL2.GL_LIGHT2); - light2.setEnabled(NbPreferences.forModule(Lighting.class).getBoolean(LIGHT2_ENABLED, true)); - light2.setAmbiant(PrefsUtils.stringToFloatArray(NbPreferences.forModule(Lighting.class).get(LIGHT2_AMBIANT, "0.0, 0.0, 0.0, 1.0"))); - light2.setSpecular(PrefsUtils.stringToFloatArray(NbPreferences.forModule(Lighting.class).get(LIGHT2_SPECULAR, "0.96, 0.89, 0.22, 1.0"))); - light2.setDiffuse(PrefsUtils.stringToFloatArray(NbPreferences.forModule(Lighting.class).get(LIGHT2_DIFFUSE, "0.40, 0.39, 0.18, 1.0"))); - light2.setDirection(PrefsUtils.stringToFloatArray(NbPreferences.forModule(Lighting.class).get(LIGHT2_POSITION, "2.0, 0.0, 1.0, 0.0"))); - - Light light3 = new Light(GL2.GL_LIGHT3); - light3.setEnabled(NbPreferences.forModule(Lighting.class).getBoolean(LIGHT3_ENABLED, true)); - light3.setAmbiant(PrefsUtils.stringToFloatArray(NbPreferences.forModule(Lighting.class).get(LIGHT3_AMBIANT, "0.0, 0.0, 0.0, 1.0"))); - light3.setSpecular(PrefsUtils.stringToFloatArray(NbPreferences.forModule(Lighting.class).get(LIGHT3_SPECULAR, "0.37, 0.37, 0.94, 1.0"))); - light3.setDiffuse(PrefsUtils.stringToFloatArray(NbPreferences.forModule(Lighting.class).get(LIGHT3_DIFFUSE, "0.31, 0.44, 0.54, 1.0"))); - light3.setDirection(PrefsUtils.stringToFloatArray(NbPreferences.forModule(Lighting.class).get(LIGHT3_POSITION, "0.0, 2.0, 0.0, 0.0f"))); - - lights.add(ambiant); - lights.add(light1); - lights.add(light2); - lights.add(light3); - } - - public List getLights() { - return lights; - } - - public void glInit(GL2 gl) { - for (int i = 0; i < lights.size(); i++) { - Light l = lights.get(i); - l.glInit(gl); - } - } - - public static class Light { - - private int id; - private float[] direction; - private float[] ambiant; - private float[] specular; - private float[] diffuse; - private boolean enabled; - - public Light(int id) { - this.id = id; - } - - public void glInit(GL2 gl) { - if (enabled) { - gl.glEnable(id); - if (ambiant != null) { - gl.glLightfv(id, GL2.GL_AMBIENT, ambiant, 0); // color of the reflected light - } - if (diffuse != null) { - gl.glLightfv(id, GL2.GL_DIFFUSE, diffuse, 0); // color of the direct illumination - } - if (specular != null) { - gl.glLightfv(id, GL2.GL_SPECULAR, specular, 0); // color of the highlight - } - if (direction != null) { - gl.glLightfv(id, GL2.GL_POSITION, direction, 0); - } - } else { - gl.glDisable(id); - } - } - - public float[] getAmbiant() { - return ambiant; - } - - public void setAmbiant(float[] ambiant) { - this.ambiant = ambiant; - } - - public float[] getDiffuse() { - return diffuse; - } - - public void setDiffuse(float[] diffuse) { - this.diffuse = diffuse; - } - - public float[] getDirection() { - return direction; - } - - public void setDirection(float[] direction) { - this.direction = direction; - } - - public float[] getSpecular() { - return specular; - } - - public void setSpecular(float[] specular) { - this.specular = specular; - } - - public boolean isEnabled() { - return enabled; - } - - public void setEnabled(boolean enabled) { - this.enabled = enabled; - } - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/options/DefaultPanel.form b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/options/DefaultPanel.form deleted file mode 100644 index 36f86e0a3a..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/options/DefaultPanel.form +++ /dev/null @@ -1,350 +0,0 @@ - - -
              - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
              diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/options/DefaultPanel.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/options/DefaultPanel.java deleted file mode 100644 index c7005cfeb2..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/options/DefaultPanel.java +++ /dev/null @@ -1,376 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.visualization.options; - -import com.connectina.swing.fontchooser.JFontChooser; -import java.awt.Color; -import java.awt.Font; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import org.gephi.ui.utils.ColorUtils; -import org.gephi.ui.utils.FontUtils; -import org.gephi.visualization.apiimpl.VizConfig; -import org.openide.util.NbPreferences; -import org.openide.windows.WindowManager; - -final class DefaultPanel extends javax.swing.JPanel { - - private final DefaultOptionsPanelController controller; - //Settings - private Font nodeFont; - private Font edgeFont; - - DefaultPanel(DefaultOptionsPanelController controller) { - this.controller = controller; - initComponents(); - nodeFontButton.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - Font font = JFontChooser.showDialog(WindowManager.getDefault().getMainWindow(), nodeFont); - if (font != null) { - nodeFont = font; - nodeFontButton.setText(nodeFont.getFontName() + ", " + nodeFont.getSize()); - } - } - }); - edgeFontButton.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - Font font = JFontChooser.showDialog(WindowManager.getDefault().getMainWindow(), edgeFont); - if (font != null) { - edgeFont = font; - edgeFontButton.setText(edgeFont.getFontName() + ", " + edgeFont.getSize()); - } - } - }); - } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - // //GEN-BEGIN:initComponents - private void initComponents() { - - titleDesign = new org.jdesktop.swingx.JXTitledSeparator(); - titleLabel = new org.jdesktop.swingx.JXTitledSeparator(); - labelDefaultSettings = new javax.swing.JLabel(); - use3dCheckbox = new javax.swing.JCheckBox(); - autoSelectNeighborCheckbox = new javax.swing.JCheckBox(); - highlightCheckbox = new javax.swing.JCheckBox(); - labelColor = new javax.swing.JLabel(); - nodeLabelColorButton = new net.java.dev.colorchooser.ColorChooser(); - labelNodeLabelColor = new javax.swing.JLabel(); - labelEdgeLabelColor = new javax.swing.JLabel(); - edgeLabelColorButton = new net.java.dev.colorchooser.ColorChooser(); - labelFont = new javax.swing.JLabel(); - nodeFontButton = new javax.swing.JButton(); - labelNodeFont = new javax.swing.JLabel(); - labelEdgeFont = new javax.swing.JLabel(); - edgeFontButton = new javax.swing.JButton(); - labelBackground = new javax.swing.JLabel(); - labelBackgroundPanel = new javax.swing.JPanel(); - backgroundColor = new net.java.dev.colorchooser.ColorChooser(); - labelBackgroundColor = new javax.swing.JLabel(); - resetButton = new javax.swing.JButton(); - - titleDesign.setTitle(org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.titleDesign.title")); // NOI18N - - titleLabel.setTitle(org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.titleLabel.title")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(labelDefaultSettings, org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.labelDefaultSettings.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(use3dCheckbox, org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.use3dCheckbox.text")); // NOI18N - use3dCheckbox.setMargin(new java.awt.Insets(2, 0, 2, 2)); - - org.openide.awt.Mnemonics.setLocalizedText(autoSelectNeighborCheckbox, org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.autoSelectNeighborCheckbox.text")); // NOI18N - autoSelectNeighborCheckbox.setMargin(new java.awt.Insets(2, 0, 2, 2)); - - org.openide.awt.Mnemonics.setLocalizedText(highlightCheckbox, org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.highlightCheckbox.text")); // NOI18N - highlightCheckbox.setMargin(new java.awt.Insets(2, 0, 2, 2)); - - org.openide.awt.Mnemonics.setLocalizedText(labelColor, org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.labelColor.text")); // NOI18N - - nodeLabelColorButton.setPreferredSize(new java.awt.Dimension(12, 12)); - - javax.swing.GroupLayout nodeLabelColorButtonLayout = new javax.swing.GroupLayout(nodeLabelColorButton); - nodeLabelColorButton.setLayout(nodeLabelColorButtonLayout); - nodeLabelColorButtonLayout.setHorizontalGroup( - nodeLabelColorButtonLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 10, Short.MAX_VALUE) - ); - nodeLabelColorButtonLayout.setVerticalGroup( - nodeLabelColorButtonLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 10, Short.MAX_VALUE) - ); - - org.openide.awt.Mnemonics.setLocalizedText(labelNodeLabelColor, org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.labelNodeLabelColor.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(labelEdgeLabelColor, org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.labelEdgeLabelColor.text")); // NOI18N - - edgeLabelColorButton.setPreferredSize(new java.awt.Dimension(12, 12)); - - javax.swing.GroupLayout edgeLabelColorButtonLayout = new javax.swing.GroupLayout(edgeLabelColorButton); - edgeLabelColorButton.setLayout(edgeLabelColorButtonLayout); - edgeLabelColorButtonLayout.setHorizontalGroup( - edgeLabelColorButtonLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 10, Short.MAX_VALUE) - ); - edgeLabelColorButtonLayout.setVerticalGroup( - edgeLabelColorButtonLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 10, Short.MAX_VALUE) - ); - - org.openide.awt.Mnemonics.setLocalizedText(labelFont, org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.labelFont.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(nodeFontButton, org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.nodeFontButton.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(labelNodeFont, org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.labelNodeFont.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(labelEdgeFont, org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.labelEdgeFont.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(edgeFontButton, org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.edgeFontButton.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(labelBackground, org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.labelBackground.text")); // NOI18N - - labelBackgroundPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 3, 5)); - - backgroundColor.setPreferredSize(new java.awt.Dimension(12, 12)); - - javax.swing.GroupLayout backgroundColorLayout = new javax.swing.GroupLayout(backgroundColor); - backgroundColor.setLayout(backgroundColorLayout); - backgroundColorLayout.setHorizontalGroup( - backgroundColorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 10, Short.MAX_VALUE) - ); - backgroundColorLayout.setVerticalGroup( - backgroundColorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGap(0, 10, Short.MAX_VALUE) - ); - - labelBackgroundPanel.add(backgroundColor); - - labelBackgroundColor.setHorizontalAlignment(javax.swing.SwingConstants.LEFT); - org.openide.awt.Mnemonics.setLocalizedText(labelBackgroundColor, org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.labelBackgroundColor.text")); // NOI18N - labelBackgroundColor.setMaximumSize(new java.awt.Dimension(141, 15)); - labelBackgroundColor.setMinimumSize(new java.awt.Dimension(141, 15)); - labelBackgroundColor.setPreferredSize(new java.awt.Dimension(141, 14)); - labelBackgroundPanel.add(labelBackgroundColor); - - org.openide.awt.Mnemonics.setLocalizedText(resetButton, org.openide.util.NbBundle.getMessage(DefaultPanel.class, "DefaultPanel.resetButton.text")); // NOI18N - resetButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - resetButtonActionPerformed(evt); - } - }); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(titleDesign, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 475, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addGap(10, 10, 10) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(labelDefaultSettings) - .addComponent(labelBackground)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(use3dCheckbox) - .addComponent(autoSelectNeighborCheckbox) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) - .addComponent(labelBackgroundPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(highlightCheckbox, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) - .addComponent(titleLabel, javax.swing.GroupLayout.DEFAULT_SIZE, 475, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addGap(10, 10, 10) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(labelFont, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(labelColor, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - .addGap(65, 65, 65) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(nodeFontButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(labelNodeFont)) - .addGroup(layout.createSequentialGroup() - .addComponent(edgeLabelColorButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(labelEdgeLabelColor)) - .addGroup(layout.createSequentialGroup() - .addComponent(nodeLabelColorButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(labelNodeLabelColor)) - .addGroup(layout.createSequentialGroup() - .addComponent(edgeFontButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(labelEdgeFont)))) - .addComponent(resetButton)) - .addContainerGap()) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(titleDesign, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGap(6, 6, 6) - .addComponent(labelDefaultSettings)) - .addGroup(layout.createSequentialGroup() - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(use3dCheckbox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(autoSelectNeighborCheckbox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(highlightCheckbox))) - .addGap(16, 16, 16) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(labelBackground) - .addComponent(labelBackgroundPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 19, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(18, 18, 18) - .addComponent(titleLabel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(labelColor) - .addGap(34, 34, 34) - .addComponent(labelFont)) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(nodeLabelColorButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelNodeLabelColor)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(edgeLabelColorButton, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelEdgeLabelColor)) - .addGap(14, 14, 14) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(nodeFontButton) - .addComponent(labelNodeFont)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(edgeFontButton) - .addComponent(labelEdgeFont)))) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 62, Short.MAX_VALUE) - .addComponent(resetButton) - .addContainerGap()) - ); - }// //GEN-END:initComponents - - private void resetButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_resetButtonActionPerformed - NbPreferences.forModule(VizConfig.class).remove(VizConfig.USE_3D); - NbPreferences.forModule(VizConfig.class).remove(VizConfig.HIGHLIGHT); - NbPreferences.forModule(VizConfig.class).remove(VizConfig.NEIGHBOUR_SELECT); - NbPreferences.forModule(VizConfig.class).remove(VizConfig.BACKGROUND_COLOR); - NbPreferences.forModule(VizConfig.class).remove(VizConfig.NODE_LABEL_COLOR); - NbPreferences.forModule(VizConfig.class).remove(VizConfig.EDGE_LABEL_COLOR); - NbPreferences.forModule(VizConfig.class).remove(VizConfig.NODE_LABEL_FONT); - NbPreferences.forModule(VizConfig.class).remove(VizConfig.EDGE_LABEL_FONT); - load(); - }//GEN-LAST:event_resetButtonActionPerformed - - void load() { - //Default design settings - use3dCheckbox.setSelected(NbPreferences.forModule(VizConfig.class).getBoolean(VizConfig.USE_3D, VizConfig.DEFAULT_USE_3D)); - highlightCheckbox.setSelected(NbPreferences.forModule(VizConfig.class).getBoolean(VizConfig.HIGHLIGHT, VizConfig.DEFAULT_HIGHLIGHT)); - autoSelectNeighborCheckbox.setSelected(NbPreferences.forModule(VizConfig.class).getBoolean(VizConfig.NEIGHBOUR_SELECT, VizConfig.DEFAULT_NEIGHBOUR_SELECT)); - backgroundColor.setColor(ColorUtils.decode(NbPreferences.forModule(VizConfig.class).get(VizConfig.BACKGROUND_COLOR, ColorUtils.encode(VizConfig.DEFAULT_BACKGROUND_COLOR)))); - - //Label settings - nodeLabelColorButton.setColor(ColorUtils.decode(NbPreferences.forModule(VizConfig.class).get(VizConfig.NODE_LABEL_COLOR, ColorUtils.encode(VizConfig.DEFAULT_NODE_LABEL_COLOR)))); - edgeLabelColorButton.setColor(ColorUtils.decode(NbPreferences.forModule(VizConfig.class).get(VizConfig.EDGE_LABEL_COLOR, ColorUtils.encode(VizConfig.DEFAULT_EDGE_LABEL_COLOR)))); - nodeFont = Font.decode(NbPreferences.forModule(VizConfig.class).get(VizConfig.NODE_LABEL_FONT, FontUtils.encode(VizConfig.DEFAULT_NODE_LABEL_FONT))); - nodeFontButton.setText(nodeFont.getFontName() + ", " + nodeFont.getSize()); - edgeFont = Font.decode(NbPreferences.forModule(VizConfig.class).get(VizConfig.EDGE_LABEL_FONT, FontUtils.encode(VizConfig.DEFAULT_EDGE_LABEL_FONT))); - edgeFontButton.setText(edgeFont.getFontName() + ", " + edgeFont.getSize()); - } - - void store() { - //Default design settings - NbPreferences.forModule(VizConfig.class).putBoolean(VizConfig.USE_3D, use3dCheckbox.isSelected()); - NbPreferences.forModule(VizConfig.class).putBoolean(VizConfig.HIGHLIGHT, highlightCheckbox.isSelected()); - NbPreferences.forModule(VizConfig.class).putBoolean(VizConfig.NEIGHBOUR_SELECT, autoSelectNeighborCheckbox.isSelected()); - NbPreferences.forModule(VizConfig.class).put(VizConfig.BACKGROUND_COLOR, ColorUtils.encode(backgroundColor.getColor())); - - //Label settings - NbPreferences.forModule(VizConfig.class).put(VizConfig.NODE_LABEL_COLOR, ColorUtils.encode(nodeLabelColorButton.getColor())); - NbPreferences.forModule(VizConfig.class).put(VizConfig.EDGE_LABEL_COLOR, ColorUtils.encode(edgeLabelColorButton.getColor())); - NbPreferences.forModule(VizConfig.class).put(VizConfig.NODE_LABEL_FONT, FontUtils.encode(nodeFont)); - NbPreferences.forModule(VizConfig.class).put(VizConfig.EDGE_LABEL_FONT, FontUtils.encode(edgeFont)); - } - - boolean valid() { - // TODO check whether form is consistent and complete - return true; - } - - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JCheckBox autoSelectNeighborCheckbox; - private net.java.dev.colorchooser.ColorChooser backgroundColor; - private javax.swing.JButton edgeFontButton; - private net.java.dev.colorchooser.ColorChooser edgeLabelColorButton; - private javax.swing.JCheckBox highlightCheckbox; - private javax.swing.JLabel labelBackground; - private javax.swing.JLabel labelBackgroundColor; - private javax.swing.JPanel labelBackgroundPanel; - private javax.swing.JLabel labelColor; - private javax.swing.JLabel labelDefaultSettings; - private javax.swing.JLabel labelEdgeFont; - private javax.swing.JLabel labelEdgeLabelColor; - private javax.swing.JLabel labelFont; - private javax.swing.JLabel labelNodeFont; - private javax.swing.JLabel labelNodeLabelColor; - private javax.swing.JButton nodeFontButton; - private net.java.dev.colorchooser.ColorChooser nodeLabelColorButton; - private javax.swing.JButton resetButton; - private org.jdesktop.swingx.JXTitledSeparator titleDesign; - private org.jdesktop.swingx.JXTitledSeparator titleLabel; - private javax.swing.JCheckBox use3dCheckbox; - // End of variables declaration//GEN-END:variables -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/options/OpenGLPanel.form b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/options/OpenGLPanel.form deleted file mode 100644 index 464feea71c..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/options/OpenGLPanel.form +++ /dev/null @@ -1,599 +0,0 @@ - - -
              - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/options/OpenGLPanel.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/options/OpenGLPanel.java deleted file mode 100644 index d530226fcf..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/options/OpenGLPanel.java +++ /dev/null @@ -1,599 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.options; - -import java.awt.Color; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.prefs.BackingStoreException; -import org.gephi.ui.components.JColorButton; -import org.gephi.ui.utils.ColorUtils; -import org.gephi.ui.utils.PrefsUtils; -import org.gephi.visualization.VizController; -import org.gephi.visualization.apiimpl.VizConfig; -import org.gephi.visualization.config.GraphicalConfiguration; -import org.gephi.visualization.opengl.Lighting; -import org.gephi.visualization.opengl.Lighting.Light; -import org.openide.util.Exceptions; -import org.openide.util.NbPreferences; - -final class OpenGLPanel extends javax.swing.JPanel { - - private final OpenGLOptionsPanelController controller; - //Settings - private int antiAliasing = 0; - - OpenGLPanel(OpenGLOptionsPanelController controller) { - this.controller = controller; - initComponents(); - - antialisaingCombobox.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent arg0) { - if (antialisaingCombobox.getSelectedIndex() > 0) { - antiAliasing = (int) Math.pow(2, antialisaingCombobox.getSelectedIndex()); - } else { - antiAliasing = 0; - } - } - }); - - ((JColorButton) ambientAmbiantColorButton).setIncludeOpacity(true); - ((JColorButton) ambientDiffuseColorButton).setIncludeOpacity(true); - ((JColorButton) ambientSpecularColorButton).setIncludeOpacity(true); - ((JColorButton) light1AmbiantColorButton).setIncludeOpacity(true); - ((JColorButton) light1DiffuseColorButton).setIncludeOpacity(true); - ((JColorButton) light1SpecularColorButton).setIncludeOpacity(true); - ((JColorButton) light2AmbiantColorButton).setIncludeOpacity(true); - ((JColorButton) light2DiffuseColorButton).setIncludeOpacity(true); - ((JColorButton) light2SpecularColorButton).setIncludeOpacity(true); - ((JColorButton) light3AmbiantColorButton).setIncludeOpacity(true); - ((JColorButton) light3DiffuseColorButton).setIncludeOpacity(true); - ((JColorButton) light3SpecularColorButton).setIncludeOpacity(true); - } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - // //GEN-BEGIN:initComponents - private void initComponents() { - java.awt.GridBagConstraints gridBagConstraints; - - jXTitledSeparator1 = new org.jdesktop.swingx.JXTitledSeparator(); - labelAntialiasing = new javax.swing.JLabel(); - antialisaingCombobox = new javax.swing.JComboBox(); - labelShow = new javax.swing.JLabel(); - fpsCheckbox = new javax.swing.JCheckBox(); - jXTitledSeparator3 = new org.jdesktop.swingx.JXTitledSeparator(); - labelAmbiant = new javax.swing.JLabel(); - ambientDiffuseColorButton = new JColorButton(Color.BLACK); - ambientSpecularColorButton = new JColorButton(Color.BLACK); - ambientAmbiantColorButton = new JColorButton(Color.BLACK); - labelDirectional = new javax.swing.JLabel(); - light1AmbiantColorButton = new JColorButton(Color.BLACK); - light1DiffuseColorButton = new JColorButton(Color.BLACK); - light1SpecularColorButton = new JColorButton(Color.BLACK); - light1Checkbox = new javax.swing.JCheckBox(); - light2Checkbox = new javax.swing.JCheckBox(); - light2AmbiantColorButton = new JColorButton(Color.BLACK); - light2DiffuseColorButton = new JColorButton(Color.BLACK); - light2SpecularColorButton = new JColorButton(Color.BLACK); - light3Checkbox = new javax.swing.JCheckBox(); - light3AmbiantColorButton = new JColorButton(Color.BLACK); - light3DiffuseColorButton = new JColorButton(Color.BLACK); - light3SpecularColorButton = new JColorButton(Color.BLACK); - light1XPosition = new javax.swing.JSpinner(); - jLabel1 = new javax.swing.JLabel(); - light1YPosition = new javax.swing.JSpinner(); - jLabel2 = new javax.swing.JLabel(); - light1ZPosition = new javax.swing.JSpinner(); - jLabel3 = new javax.swing.JLabel(); - jLabel4 = new javax.swing.JLabel(); - light2XPosition = new javax.swing.JSpinner(); - jLabel5 = new javax.swing.JLabel(); - light2YPosition = new javax.swing.JSpinner(); - jLabel6 = new javax.swing.JLabel(); - light2ZPosition = new javax.swing.JSpinner(); - jLabel7 = new javax.swing.JLabel(); - light3XPosition = new javax.swing.JSpinner(); - jLabel8 = new javax.swing.JLabel(); - light3YPosition = new javax.swing.JSpinner(); - jLabel9 = new javax.swing.JLabel(); - light3ZPosition = new javax.swing.JSpinner(); - resetButton = new javax.swing.JButton(); - jLabel10 = new javax.swing.JLabel(); - openglInfoPanel = new javax.swing.JPanel(); - openInfoText = new javax.swing.JTextArea(); - - jXTitledSeparator1.setTitle(org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.jXTitledSeparator1.title")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(labelAntialiasing, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.labelAntialiasing.text")); // NOI18N - - antialisaingCombobox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "0x", "2x", "4x", "8x", "16x" })); - - org.openide.awt.Mnemonics.setLocalizedText(labelShow, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.labelShow.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(fpsCheckbox, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.fpsCheckbox.text")); // NOI18N - fpsCheckbox.setMargin(new java.awt.Insets(2, 0, 2, 2)); - - jXTitledSeparator3.setTitle(org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.jXTitledSeparator3.title")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(labelAmbiant, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.labelAmbient.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(ambientDiffuseColorButton, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.ambientDiffuseColorButton.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(ambientSpecularColorButton, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.ambientSpecularColorButton.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(ambientAmbiantColorButton, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.ambientAmbientColorButton.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(labelDirectional, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.labelDirectional.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(light1AmbiantColorButton, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.light1AmbientColorButton.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(light1DiffuseColorButton, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.light1DiffuseColorButton.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(light1SpecularColorButton, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.light1SpecularColorButton.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(light1Checkbox, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.light1Checkbox.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(light2Checkbox, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.light2Checkbox.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(light2AmbiantColorButton, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.light2AmbientColorButton.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(light2DiffuseColorButton, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.light2DiffuseColorButton.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(light2SpecularColorButton, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.light2SpecularColorButton.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(light3Checkbox, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.light3Checkbox.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(light3AmbiantColorButton, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.light3AmbientColorButton.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(light3DiffuseColorButton, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.light3DiffuseColorButton.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(light3SpecularColorButton, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.light3SpecularColorButton.text")); // NOI18N - - light1XPosition.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(0.0f), null, null, Float.valueOf(0.1f))); - - org.openide.awt.Mnemonics.setLocalizedText(jLabel1, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.jLabel1.text")); // NOI18N - - light1YPosition.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(0.0f), null, null, Float.valueOf(0.1f))); - - org.openide.awt.Mnemonics.setLocalizedText(jLabel2, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.jLabel2.text")); // NOI18N - - light1ZPosition.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(0.0f), null, null, Float.valueOf(0.1f))); - - org.openide.awt.Mnemonics.setLocalizedText(jLabel3, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.jLabel3.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(jLabel4, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.jLabel4.text")); // NOI18N - - light2XPosition.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(0.0f), null, null, Float.valueOf(0.1f))); - - org.openide.awt.Mnemonics.setLocalizedText(jLabel5, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.jLabel5.text")); // NOI18N - - light2YPosition.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(0.0f), null, null, Float.valueOf(0.1f))); - - org.openide.awt.Mnemonics.setLocalizedText(jLabel6, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.jLabel6.text")); // NOI18N - - light2ZPosition.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(0.0f), null, null, Float.valueOf(0.1f))); - - org.openide.awt.Mnemonics.setLocalizedText(jLabel7, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.jLabel7.text")); // NOI18N - - light3XPosition.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(0.0f), null, null, Float.valueOf(0.1f))); - - org.openide.awt.Mnemonics.setLocalizedText(jLabel8, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.jLabel8.text")); // NOI18N - - light3YPosition.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(0.0f), null, null, Float.valueOf(0.1f))); - - org.openide.awt.Mnemonics.setLocalizedText(jLabel9, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.jLabel9.text")); // NOI18N - - light3ZPosition.setModel(new javax.swing.SpinnerNumberModel(Float.valueOf(0.0f), null, null, Float.valueOf(0.1f))); - - org.openide.awt.Mnemonics.setLocalizedText(resetButton, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.resetButton.text")); // NOI18N - resetButton.addActionListener(new java.awt.event.ActionListener() { - public void actionPerformed(java.awt.event.ActionEvent evt) { - resetButtonActionPerformed(evt); - } - }); - - jLabel10.setFont(new java.awt.Font("Tahoma", 0, 10)); - org.openide.awt.Mnemonics.setLocalizedText(jLabel10, org.openide.util.NbBundle.getMessage(OpenGLPanel.class, "OpenGLPanel.jLabel10.text")); // NOI18N - jLabel10.setForeground(new java.awt.Color(102, 102, 102)); - - openglInfoPanel.setLayout(new java.awt.GridBagLayout()); - - openInfoText.setColumns(5); - openInfoText.setEditable(false); - openInfoText.setFont(new java.awt.Font("Monospaced", 0, 11)); - openInfoText.setRows(3); - openInfoText.setText("Vendor\nModel\nVersion"); // NOI18N - openInfoText.setOpaque(false); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 0; - gridBagConstraints.gridy = 0; - gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.weighty = 1.0; - openglInfoPanel.add(openInfoText, gridBagConstraints); - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jXTitledSeparator1, javax.swing.GroupLayout.DEFAULT_SIZE, 679, Short.MAX_VALUE) - .addComponent(resetButton) - .addGroup(layout.createSequentialGroup() - .addGap(10, 10, 10) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(labelAmbiant) - .addComponent(labelDirectional)) - .addGap(21, 21, 21) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(light2Checkbox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(light2AmbiantColorButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(light2DiffuseColorButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(light2SpecularColorButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(jLabel4) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(light2XPosition, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(jLabel5) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(light2YPosition, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(jLabel6) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(light2ZPosition, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGroup(layout.createSequentialGroup() - .addComponent(light3Checkbox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(light3AmbiantColorButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(light3DiffuseColorButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(light3SpecularColorButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(jLabel7) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(light3XPosition, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(jLabel8) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(light3YPosition, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(jLabel9) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(light3ZPosition, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addGroup(layout.createSequentialGroup() - .addComponent(ambientAmbiantColorButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(ambientDiffuseColorButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(ambientSpecularColorButton)) - .addGroup(layout.createSequentialGroup() - .addComponent(light1Checkbox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(light1AmbiantColorButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(light1DiffuseColorButton) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(light1SpecularColorButton))) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(jLabel1) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(light1XPosition, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(jLabel2) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(light1YPosition, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(jLabel3) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(light1ZPosition, javax.swing.GroupLayout.PREFERRED_SIZE, 46, javax.swing.GroupLayout.PREFERRED_SIZE)))) - .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(jXTitledSeparator3, javax.swing.GroupLayout.DEFAULT_SIZE, 473, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addGap(10, 10, 10) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(labelShow, javax.swing.GroupLayout.PREFERRED_SIZE, 52, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelAntialiasing)) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGap(20, 20, 20) - .addComponent(fpsCheckbox)) - .addGroup(layout.createSequentialGroup() - .addGap(18, 18, 18) - .addComponent(antialisaingCombobox, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))))) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) - .addComponent(openglInfoPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(jLabel10, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) - .addContainerGap()) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(jXTitledSeparator1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(openglInfoPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 86, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(labelAntialiasing) - .addComponent(antialisaingCombobox)) - .addGap(18, 18, 18) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(labelShow, javax.swing.GroupLayout.DEFAULT_SIZE, 23, Short.MAX_VALUE) - .addComponent(fpsCheckbox)))) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(jXTitledSeparator3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jLabel10)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(labelAmbiant) - .addComponent(ambientDiffuseColorButton) - .addComponent(ambientAmbiantColorButton) - .addComponent(ambientSpecularColorButton)) - .addGap(13, 13, 13) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(light1DiffuseColorButton) - .addComponent(light1AmbiantColorButton) - .addComponent(light1SpecularColorButton) - .addComponent(labelDirectional) - .addComponent(light1Checkbox) - .addComponent(light1XPosition, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jLabel1) - .addComponent(light1YPosition, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jLabel2) - .addComponent(light1ZPosition, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jLabel3)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(light2DiffuseColorButton) - .addComponent(light2AmbiantColorButton) - .addComponent(light2SpecularColorButton) - .addComponent(light2Checkbox) - .addComponent(light2XPosition, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jLabel4) - .addComponent(light2YPosition, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jLabel5) - .addComponent(light2ZPosition, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jLabel6)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(light3DiffuseColorButton) - .addComponent(light3AmbiantColorButton) - .addComponent(light3SpecularColorButton) - .addComponent(light3Checkbox) - .addComponent(light3XPosition, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jLabel7) - .addComponent(light3YPosition, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jLabel8) - .addComponent(light3ZPosition, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(jLabel9)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 60, Short.MAX_VALUE) - .addComponent(resetButton) - .addContainerGap()) - ); - }// //GEN-END:initComponents - - private void resetButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_resetButtonActionPerformed - try { - NbPreferences.forModule(Lighting.class).clear(); - NbPreferences.forModule(Lighting.class).remove(Lighting.AMBIANT_ENABLED); - NbPreferences.forModule(Lighting.class).remove(Lighting.AMBIANT_AMBIANT); - NbPreferences.forModule(Lighting.class).remove(Lighting.AMBIANT_SPECULAR); - NbPreferences.forModule(Lighting.class).remove(Lighting.AMBIANT_DIFFUSE); - NbPreferences.forModule(Lighting.class).remove(Lighting.LIGHT1_ENABLED); - NbPreferences.forModule(Lighting.class).remove(Lighting.LIGHT1_AMBIANT); - NbPreferences.forModule(Lighting.class).remove(Lighting.LIGHT1_SPECULAR); - NbPreferences.forModule(Lighting.class).remove(Lighting.LIGHT1_DIFFUSE); - NbPreferences.forModule(Lighting.class).remove(Lighting.LIGHT1_POSITION); - NbPreferences.forModule(Lighting.class).remove(Lighting.LIGHT2_ENABLED); - NbPreferences.forModule(Lighting.class).remove(Lighting.LIGHT2_AMBIANT); - NbPreferences.forModule(Lighting.class).remove(Lighting.LIGHT2_SPECULAR); - NbPreferences.forModule(Lighting.class).remove(Lighting.LIGHT2_DIFFUSE); - NbPreferences.forModule(Lighting.class).remove(Lighting.LIGHT2_POSITION); - NbPreferences.forModule(Lighting.class).remove(Lighting.LIGHT3_ENABLED); - NbPreferences.forModule(Lighting.class).remove(Lighting.LIGHT3_AMBIANT); - NbPreferences.forModule(Lighting.class).remove(Lighting.LIGHT3_SPECULAR); - NbPreferences.forModule(Lighting.class).remove(Lighting.LIGHT3_DIFFUSE); - NbPreferences.forModule(Lighting.class).remove(Lighting.LIGHT3_POSITION); - NbPreferences.forModule(VizConfig.class).remove(VizConfig.ANTIALIASING); - NbPreferences.forModule(VizConfig.class).remove(VizConfig.SHOW_FPS); - } catch (BackingStoreException ex) { - Exceptions.printStackTrace(ex); - } - load(); - }//GEN-LAST:event_resetButtonActionPerformed - - void load() { - antiAliasing = NbPreferences.forModule(VizConfig.class).getInt(VizConfig.ANTIALIASING, VizConfig.DEFAULT_ANTIALIASING); - antialisaingCombobox.setSelectedIndex(antiAliasing == 0 ? 0 : Math.round((float) (Math.log(antiAliasing) / Math.log(2)))); - fpsCheckbox.setSelected(NbPreferences.forModule(VizConfig.class).getBoolean(VizConfig.SHOW_FPS, VizConfig.DEFAULT_SHOW_FPS)); - - //Lights - Lighting lighting = new Lighting(); - Light ambiant = lighting.getLights().get(0); - Light light1 = lighting.getLights().get(1); - Light light2 = lighting.getLights().get(2); - Light light3 = lighting.getLights().get(3); - - //Ambiant - ((JColorButton) ambientAmbiantColorButton).setColor(ColorUtils.decode(ambiant.getAmbiant())); - ((JColorButton) ambientDiffuseColorButton).setColor(ColorUtils.decode(ambiant.getDiffuse())); - ((JColorButton) ambientSpecularColorButton).setColor(ColorUtils.decode(ambiant.getSpecular())); - - //Light1 - light1Checkbox.setSelected(light1.isEnabled()); - ((JColorButton) light1AmbiantColorButton).setColor(ColorUtils.decode(light1.getAmbiant())); - ((JColorButton) light1DiffuseColorButton).setColor(ColorUtils.decode(light1.getDiffuse())); - ((JColorButton) light1SpecularColorButton).setColor(ColorUtils.decode(light1.getSpecular())); - light1XPosition.setValue(Float.valueOf(light1.getDirection()[0])); - light1YPosition.setValue(Float.valueOf(light1.getDirection()[1])); - light1ZPosition.setValue(Float.valueOf(light1.getDirection()[2])); - - //Light2 - light2Checkbox.setSelected(light2.isEnabled()); - ((JColorButton) light2AmbiantColorButton).setColor(ColorUtils.decode(light2.getAmbiant())); - ((JColorButton) light2DiffuseColorButton).setColor(ColorUtils.decode(light2.getDiffuse())); - ((JColorButton) light2SpecularColorButton).setColor(ColorUtils.decode(light2.getSpecular())); - light2XPosition.setValue(Float.valueOf(light2.getDirection()[0])); - light2YPosition.setValue(Float.valueOf(light2.getDirection()[1])); - light2ZPosition.setValue(Float.valueOf(light2.getDirection()[2])); - - //Light3 - light3Checkbox.setSelected(light3.isEnabled()); - ((JColorButton) light3AmbiantColorButton).setColor(ColorUtils.decode(light3.getAmbiant())); - ((JColorButton) light3DiffuseColorButton).setColor(ColorUtils.decode(light3.getDiffuse())); - ((JColorButton) light3SpecularColorButton).setColor(ColorUtils.decode(light3.getSpecular())); - light3XPosition.setValue(Float.valueOf(light3.getDirection()[0])); - light3YPosition.setValue(Float.valueOf(light3.getDirection()[1])); - light3ZPosition.setValue(Float.valueOf(light3.getDirection()[2])); - - //OpenGLInfo - GraphicalConfiguration gc = VizController.getInstance().getDrawable().getGraphicalConfiguration(); - if (gc != null) { - openInfoText.setText(gc.getVendor() + "\n" + gc.getRenderer() + "\nOpenGL2 " + gc.getVersionStr()); - } - } - - void store() { - NbPreferences.forModule(VizConfig.class).putInt(VizConfig.ANTIALIASING, antiAliasing); - NbPreferences.forModule(VizConfig.class).putBoolean(VizConfig.SHOW_FPS, fpsCheckbox.isSelected()); - - //Ambiant - NbPreferences.forModule(Lighting.class).put(Lighting.AMBIANT_AMBIANT, PrefsUtils.floatArrayToString(((JColorButton) ambientAmbiantColorButton).getColorArray())); - NbPreferences.forModule(Lighting.class).put(Lighting.AMBIANT_DIFFUSE, PrefsUtils.floatArrayToString(((JColorButton) ambientDiffuseColorButton).getColorArray())); - NbPreferences.forModule(Lighting.class).put(Lighting.AMBIANT_SPECULAR, PrefsUtils.floatArrayToString(((JColorButton) ambientSpecularColorButton).getColorArray())); - - //Light1 - NbPreferences.forModule(Lighting.class).putBoolean(Lighting.LIGHT1_ENABLED, light1Checkbox.isSelected()); - NbPreferences.forModule(Lighting.class).put(Lighting.LIGHT1_AMBIANT, PrefsUtils.floatArrayToString(((JColorButton) light1AmbiantColorButton).getColorArray())); - NbPreferences.forModule(Lighting.class).put(Lighting.LIGHT1_DIFFUSE, PrefsUtils.floatArrayToString(((JColorButton) light1DiffuseColorButton).getColorArray())); - NbPreferences.forModule(Lighting.class).put(Lighting.LIGHT1_SPECULAR, PrefsUtils.floatArrayToString(((JColorButton) light1SpecularColorButton).getColorArray())); - NbPreferences.forModule(Lighting.class).put(Lighting.LIGHT1_POSITION, PrefsUtils.floatArrayToString(new float[]{(Float) light1XPosition.getValue(), (Float) light1YPosition.getValue(), (Float) light1ZPosition.getValue(), 0f})); - - //Light2 - NbPreferences.forModule(Lighting.class).putBoolean(Lighting.LIGHT2_ENABLED, light2Checkbox.isSelected()); - NbPreferences.forModule(Lighting.class).put(Lighting.LIGHT2_AMBIANT, PrefsUtils.floatArrayToString(((JColorButton) light2AmbiantColorButton).getColorArray())); - NbPreferences.forModule(Lighting.class).put(Lighting.LIGHT2_DIFFUSE, PrefsUtils.floatArrayToString(((JColorButton) light2DiffuseColorButton).getColorArray())); - NbPreferences.forModule(Lighting.class).put(Lighting.LIGHT2_SPECULAR, PrefsUtils.floatArrayToString(((JColorButton) light2SpecularColorButton).getColorArray())); - NbPreferences.forModule(Lighting.class).put(Lighting.LIGHT2_POSITION, PrefsUtils.floatArrayToString(new float[]{(Float) light2XPosition.getValue(), (Float) light2YPosition.getValue(), (Float) light2ZPosition.getValue(), 0f})); - - //Light3 - NbPreferences.forModule(Lighting.class).putBoolean(Lighting.LIGHT3_ENABLED, light3Checkbox.isSelected()); - NbPreferences.forModule(Lighting.class).put(Lighting.LIGHT3_AMBIANT, PrefsUtils.floatArrayToString(((JColorButton) light3AmbiantColorButton).getColorArray())); - NbPreferences.forModule(Lighting.class).put(Lighting.LIGHT3_DIFFUSE, PrefsUtils.floatArrayToString(((JColorButton) light3DiffuseColorButton).getColorArray())); - NbPreferences.forModule(Lighting.class).put(Lighting.LIGHT3_SPECULAR, PrefsUtils.floatArrayToString(((JColorButton) light3SpecularColorButton).getColorArray())); - NbPreferences.forModule(Lighting.class).put(Lighting.LIGHT3_POSITION, PrefsUtils.floatArrayToString(new float[]{(Float) light3XPosition.getValue(), (Float) light3YPosition.getValue(), (Float) light3ZPosition.getValue(), 0f})); - - VizController.getInstance().getEngine().reinit(); - } - - boolean valid() { - // TODO check whether form is consistent and complete - return true; - } - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton ambientAmbiantColorButton; - private javax.swing.JButton ambientDiffuseColorButton; - private javax.swing.JButton ambientSpecularColorButton; - private javax.swing.JComboBox antialisaingCombobox; - private javax.swing.JCheckBox fpsCheckbox; - private javax.swing.JLabel jLabel1; - private javax.swing.JLabel jLabel10; - private javax.swing.JLabel jLabel2; - private javax.swing.JLabel jLabel3; - private javax.swing.JLabel jLabel4; - private javax.swing.JLabel jLabel5; - private javax.swing.JLabel jLabel6; - private javax.swing.JLabel jLabel7; - private javax.swing.JLabel jLabel8; - private javax.swing.JLabel jLabel9; - private org.jdesktop.swingx.JXTitledSeparator jXTitledSeparator1; - private org.jdesktop.swingx.JXTitledSeparator jXTitledSeparator3; - private javax.swing.JLabel labelAmbiant; - private javax.swing.JLabel labelAntialiasing; - private javax.swing.JLabel labelDirectional; - private javax.swing.JLabel labelShow; - private javax.swing.JButton light1AmbiantColorButton; - private javax.swing.JCheckBox light1Checkbox; - private javax.swing.JButton light1DiffuseColorButton; - private javax.swing.JButton light1SpecularColorButton; - private javax.swing.JSpinner light1XPosition; - private javax.swing.JSpinner light1YPosition; - private javax.swing.JSpinner light1ZPosition; - private javax.swing.JButton light2AmbiantColorButton; - private javax.swing.JCheckBox light2Checkbox; - private javax.swing.JButton light2DiffuseColorButton; - private javax.swing.JButton light2SpecularColorButton; - private javax.swing.JSpinner light2XPosition; - private javax.swing.JSpinner light2YPosition; - private javax.swing.JSpinner light2ZPosition; - private javax.swing.JButton light3AmbiantColorButton; - private javax.swing.JCheckBox light3Checkbox; - private javax.swing.JButton light3DiffuseColorButton; - private javax.swing.JButton light3SpecularColorButton; - private javax.swing.JSpinner light3XPosition; - private javax.swing.JSpinner light3YPosition; - private javax.swing.JSpinner light3ZPosition; - private javax.swing.JTextArea openInfoText; - private javax.swing.JPanel openglInfoPanel; - private javax.swing.JButton resetButton; - // End of variables declaration//GEN-END:variables -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/scheduler/AbstractAnimator.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/scheduler/AbstractAnimator.java deleted file mode 100644 index 5cd5c10b6d..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/scheduler/AbstractAnimator.java +++ /dev/null @@ -1,50 +0,0 @@ -package org.gephi.visualization.scheduler; - -import java.util.concurrent.Semaphore; - -/** - * - * @author mbastian - */ -public abstract class AbstractAnimator extends Thread { - - //Runnable - protected final Runnable runnable; - //Flag - protected boolean animating = true; - //Lock - protected final Semaphore semaphore; - - public AbstractAnimator(Runnable runnable, Semaphore semaphore, String name) { - super(name); - this.semaphore = semaphore; - this.runnable = runnable; - setDaemon(true); - } - - @Override - public void run() { - while (animating) { - synchronized (this) { - try { - wait(); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } - runnable.run(); - semaphore.release(); - } - } - - public final void shutdown() { - animating = false; - synchronized (this) { - notify(); - } - } - - public final boolean isAnimating() { - return animating; - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/scheduler/BasicFPSAnimator.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/scheduler/BasicFPSAnimator.java deleted file mode 100644 index be2a5c80fa..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/scheduler/BasicFPSAnimator.java +++ /dev/null @@ -1,66 +0,0 @@ -package org.gephi.visualization.scheduler; - -/** - * - * @author mbastian - */ -public class BasicFPSAnimator extends Thread { - - //Runnable - protected final Runnable runnable; - //Fps - protected long startTime; - protected long delay; - //Flag - protected boolean animating = true; - //Lock - protected final Object worldLock; - protected final Object lock = new Object(); - - public BasicFPSAnimator(Runnable runnable, Object worldLock, String name, float fps) { - super(name); - this.worldLock = worldLock; - this.runnable = runnable; - setDaemon(true); - setFps(fps); - } - - @Override - public void run() { - while (animating) { - startTime = System.currentTimeMillis(); - //Execute - synchronized (worldLock) { - runnable.run(); - } - //End - long timeout; - while ((timeout = delay - System.currentTimeMillis() + startTime) > 0) { - //Wait only if the time spent in display is inferior than delay - //Otherwise the render loop acts as a 'as fast as you can' loop - synchronized (this.lock) { - try { - this.lock.wait(timeout); - } catch (InterruptedException ex) { - } - } - } - } - } - - public final void setFps(float fps) { - delay = (long) (1000.0f / fps); - synchronized (this.lock) { - startTime = 0; - this.lock.notify(); - } - } - - public final void shutdown() { - animating = false; - } - - public final boolean isAnimating() { - return animating; - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/scheduler/CompatibilityScheduler.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/scheduler/CompatibilityScheduler.java deleted file mode 100644 index 4fe3ad2f4d..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/scheduler/CompatibilityScheduler.java +++ /dev/null @@ -1,239 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.scheduler; - -import java.util.concurrent.atomic.AtomicBoolean; -import javax.media.opengl.GL2; -import javax.media.opengl.glu.GLU; -import org.gephi.visualization.VizArchitecture; -import org.gephi.visualization.VizController; -import org.gephi.visualization.apiimpl.Scheduler; -import org.gephi.visualization.apiimpl.VizConfig; -import org.gephi.visualization.opengl.CompatibilityEngine; -import org.gephi.visualization.swing.GraphDrawableImpl; - -/** - * - * @author Mathieu Bastian - */ -public class CompatibilityScheduler implements Scheduler, VizArchitecture { - - //States - AtomicBoolean animating = new AtomicBoolean(); - AtomicBoolean cameraMoved = new AtomicBoolean(); - AtomicBoolean mouseMoved = new AtomicBoolean(); - AtomicBoolean startDrag = new AtomicBoolean(); - AtomicBoolean drag = new AtomicBoolean(); - AtomicBoolean stopDrag = new AtomicBoolean(); - AtomicBoolean mouseClick = new AtomicBoolean(); - //Architeture - private GraphDrawableImpl graphDrawable; - private CompatibilityEngine engine; - private VizConfig vizConfig; - //Animators - private BasicFPSAnimator displayAnimator; - private BasicFPSAnimator updateAnimator; - private float displayFpsLimit = 30f; - private float updateFpsLimit = 5f; - private Object worldLock = new Object(); - - @Override - public void initArchitecture() { - this.graphDrawable = VizController.getInstance().getDrawable(); - this.engine = (CompatibilityEngine) VizController.getInstance().getEngine(); - this.vizConfig = VizController.getInstance().getVizConfig(); - } - - @Override - public synchronized void start() { - if (displayAnimator != null) { - displayAnimator.shutdown(); - } - if (updateAnimator != null) { - updateAnimator.shutdown(); - } - displayAnimator = new BasicFPSAnimator(new Runnable() { - @Override - public void run() { - graphDrawable.display(); - } - }, worldLock, "DisplayAnimator", displayFpsLimit); - displayAnimator.start(); - - - updateAnimator = new BasicFPSAnimator(new Runnable() { - @Override - public void run() { - updateWorld(); - } - }, worldLock, "UpdateAnimator", updateFpsLimit); - updateAnimator.start(); - } - - @Override - public synchronized void stop() { - updateAnimator.shutdown(); - displayAnimator.shutdown(); - - cameraMoved.set(false); - mouseMoved.set(false); - startDrag.set(false); - drag.set(false); - stopDrag.set(false); - mouseClick.set(false); - } - - @Override - public boolean isAnimating() { - if (displayAnimator != null && displayAnimator.isAnimating()) { - return true; - } - return false; - } - - @Override - public void display(GL2 gl, GLU glu) { -// if (simpleFPSAnimator.isDisplayCall()) { - - //Boolean vals - boolean execMouseClick = mouseClick.getAndSet(false); - boolean execMouseMove = mouseMoved.getAndSet(false); - boolean execDrag = drag.get() || startDrag.get() || stopDrag.get(); - - if (cameraMoved.getAndSet(false)) { - graphDrawable.setCameraPosition(gl, glu); - - engine.getOctree().updateVisibleOctant(gl); - //Objects iterators in octree are ready - - //Task MODEL - LOD - engine.getNodeClass().lod(engine.getOctree().getNodeIterator()); - } - - //Task SELECTED - if (execMouseMove) { - engine.updateSelection(gl, glu); - engine.mouseMove(); - } else if (execDrag) { - //Drag - if (stopDrag.getAndSet(false)) { - engine.stopDrag(); - } - if (startDrag.getAndSet(false)) { - engine.startDrag(); - } - if (drag.getAndSet(false)) { - engine.mouseDrag(); - } - } - - //Task AFTERSELECTION - if (execMouseClick) { - engine.mouseClick(); - } - - //Display - engine.beforeDisplay(gl, glu); - engine.display(gl, glu); - engine.afterDisplay(gl, glu); -// } - } - - @Override - public void updateWorld() { - if (engine.updateWorld()) { - cameraMoved.set(true); - mouseMoved.set(true); - } - } - - @Override - public void updatePosition() { -// if (objectsMoved.getAndSet(false)) { -// engine.updateObjectsPosition(); -// cameraMoved.set(true); -// } - } - - @Override - public void requireUpdateVisible() { - cameraMoved.set(true); - } - - @Override - public void requireUpdateSelection() { - mouseMoved.set(true); - } - - @Override - public void requireStartDrag() { - startDrag.set(true); - } - - @Override - public void requireDrag() { - drag.set(true); - } - - @Override - public void requireStopDrag() { - stopDrag.set(true); - } - - @Override - public void requireMouseClick() { - mouseClick.set(true); - } - - @Override - public void setFps(float maxFps) { - this.displayFpsLimit = maxFps; - if (displayAnimator != null) { - displayAnimator.setFps(maxFps); - } - } - - @Override - public float getFps() { - return displayFpsLimit; - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/screenshot/ScreenshotControllerImpl.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/screenshot/ScreenshotControllerImpl.java new file mode 100644 index 0000000000..51fef2c923 --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/screenshot/ScreenshotControllerImpl.java @@ -0,0 +1,125 @@ +/* + Copyright 2008-2010 Gephi + Authors : Mathieu Bastian + Website : http://www.gephi.org + + This file is part of Gephi. + + DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. + + Copyright 2011 Gephi Consortium. All rights reserved. + + The contents of this file are subject to the terms of either the GNU + General Public License Version 3 only ("GPL") or the Common + Development and Distribution License("CDDL") (collectively, the + "License"). You may not use this file except in compliance with the + License. You can obtain a copy of the License at + http://gephi.org/about/legal/license-notice/ + or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the + specific language governing permissions and limitations under the + License. When distributing the software, include this License Header + Notice in each file and include the License files at + /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the + License Header, with the fields enclosed by brackets [] replaced by + your own identifying information: + "Portions Copyrighted [year] [name of copyright owner]" + + If you wish your version of this file to be governed by only the CDDL + or only the GPL Version 3, indicate your decision by adding + "[Contributor] elects to include this software in this distribution + under the [CDDL or GPL Version 3] license." If you do not indicate a + single choice of license, a recipient has the option to distribute + your version of this file under either the CDDL, the GPL Version 3 or + to extend the choice of license to its licensees as provided above. + However, if you add GPL Version 3 code and therefore, elected the GPL + Version 3 license, then the option applies only if the new code is + made subject to such option by the copyright holder. + + Contributor(s): + + Portions Copyrighted 2011 Gephi Consortium. + */ + +package org.gephi.visualization.screenshot; + +import java.io.File; +import org.gephi.desktop.visualization.screenshot.ScreenshotSettingsPanel; +import org.gephi.utils.longtask.api.LongTaskExecutor; +import org.gephi.visualization.VizController; +import org.gephi.visualization.api.ScreenshotController; +import org.openide.DialogDescriptor; +import org.openide.DialogDisplayer; +import org.openide.NotifyDescriptor; +import org.openide.util.NbBundle; + +/** + * @author Mathieu Bastian + */ +public class ScreenshotControllerImpl implements ScreenshotController { + + private final VizController vizController; + private final LongTaskExecutor executor; + + public ScreenshotControllerImpl(VizController vizController) { + this.vizController = vizController; + executor = new LongTaskExecutor(true, "Screenshot Maker"); + } + + private ScreenshotModelImpl getModel() { + return vizController.getModel().getScreenshotModel(); + } + + @Override + public void setAutoSave(boolean autoSave) { + getModel().setAutoSave(autoSave); + } + + @Override + public void setDefaultDirectory(File directory) { + getModel().setDefaultDirectory(directory); + } + + @Override + public void setTransparentBackground(boolean transparentBackground) { + getModel().setTransparentBackground(transparentBackground); + } + + @Override + public void setScaleFactor(int scaleFactor) { + getModel().setScaleFactor(scaleFactor); + } + + @Override + public void takeScreenshot() { + vizController.getModel().getEngine().ifPresent( + engine -> { + ScreenshotTask task = new ScreenshotTask(engine, getModel()); + executor + .execute(task, task, + NbBundle.getMessage(ScreenshotControllerImpl.class, "ScreenshotMaker.progress.message"), null); + }); + + } + + public int getSurfaceWidth() { + return vizController.getEngine().map(engine -> engine.getRenderingTarget().getDrawable().getSurfaceWidth()) + .orElse(0); + } + + public int getSurfaceHeight() { + return vizController.getEngine().map(engine -> engine.getRenderingTarget().getDrawable().getSurfaceHeight()) + .orElse(0); + } + + public void configure() { + ScreenshotSettingsPanel panel = new ScreenshotSettingsPanel(this); + panel.setup(getModel()); + DialogDescriptor dd = new DialogDescriptor(panel, + NbBundle.getMessage(ScreenshotControllerImpl.class, "ScreenshotMaker.configure.title")); + Object result = DialogDisplayer.getDefault().notify(dd); + if (result == NotifyDescriptor.OK_OPTION) { + panel.unsetup(); + } + } + +} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/screenshot/ScreenshotMaker.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/screenshot/ScreenshotMaker.java deleted file mode 100644 index 1e79d0d81d..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/screenshot/ScreenshotMaker.java +++ /dev/null @@ -1,407 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.screenshot; - -import com.jogamp.opengl.util.awt.ImageUtil; -import java.awt.Cursor; -import java.awt.image.BufferedImage; -import java.awt.image.DataBufferByte; -import java.io.File; -import java.io.IOException; -import java.lang.reflect.InvocationTargetException; -import java.nio.ByteBuffer; -import java.text.DateFormat; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import javax.imageio.ImageIO; -import javax.media.nativewindow.AbstractGraphicsDevice; -import javax.media.opengl.GL2; -import javax.media.opengl.GLAutoDrawable; -import javax.media.opengl.GLCapabilities; -import javax.media.opengl.GLContext; -import javax.media.opengl.GLDrawableFactory; -import javax.media.opengl.GLPbuffer; -import javax.media.opengl.GLProfile; -import javax.swing.JFileChooser; -import javax.swing.JOptionPane; -import javax.swing.SwingUtilities; -import org.gephi.ui.utils.DialogFileFilter; -import org.gephi.visualization.VizArchitecture; -import org.gephi.visualization.VizController; -import org.gephi.visualization.apiimpl.VizConfig; -import org.gephi.visualization.opengl.*; -import org.gephi.visualization.swing.GLAbstractListener; -import org.gephi.visualization.swing.GraphDrawableImpl; -import org.gephi.visualization.text.TextManager; -import org.netbeans.validation.api.ui.ValidationPanel; -import org.openide.util.NbBundle; -import org.openide.util.NbPreferences; -import org.openide.windows.WindowManager; - -/** - * - * @author Mathieu Bastian - */ -public class ScreenshotMaker implements VizArchitecture { - - //Const - private final String LAST_PATH = "ScreenshotMaker_Last_Path"; - private final String LAST_PATH_DEFAULT = "ScreenshotMaker_Last_Path_Default"; - private final String ANTIALIASING_DEFAULT = "ScreenshotMaker_Antialiasing_Default"; - private final String WIDTH_DEFAULT = "ScreenshotMaker_Width_Default"; - private final String HEIGHT_DEFAULT = "ScreenshotMaker_Height_Default"; - private final String TRANSPARENT_BACKGROUND_DEFAULT = "ScreenshotMaker_TransparentBackground_Default"; - private final String AUTOSAVE_DEFAULT = "ScreenshotMaker_Autosave_Default"; - private final String SHOW_MESSAGE = "ScreenshotMaker_Show_Message"; - //Architecture - private GraphDrawableImpl drawable; - private AbstractEngine engine; - private TextManager textManager; - private VizConfig vizConfig; - //Settings - private int antiAliasing = 2; - private int width = 1024; - private int height = 768; - private boolean transparentBackground = false; - private boolean finishedMessage = true; - private boolean autoSave = false; - private String defaultDirectory; - //Running - private File file; - //State - private boolean takeTicket = false; - - public ScreenshotMaker() { - - //Preferences - String lastPathDefault = NbPreferences.forModule(ScreenshotMaker.class).get(LAST_PATH_DEFAULT, null); - defaultDirectory = NbPreferences.forModule(ScreenshotMaker.class).get(LAST_PATH, lastPathDefault); - antiAliasing = NbPreferences.forModule(ScreenshotMaker.class).getInt(ANTIALIASING_DEFAULT, antiAliasing); - width = NbPreferences.forModule(ScreenshotMaker.class).getInt(WIDTH_DEFAULT, width); - height = NbPreferences.forModule(ScreenshotMaker.class).getInt(HEIGHT_DEFAULT, height); - transparentBackground = NbPreferences.forModule(ScreenshotMaker.class).getBoolean(TRANSPARENT_BACKGROUND_DEFAULT, transparentBackground); - autoSave = NbPreferences.forModule(ScreenshotMaker.class).getBoolean(AUTOSAVE_DEFAULT, autoSave); - finishedMessage = NbPreferences.forModule(ScreenshotMaker.class).getBoolean(SHOW_MESSAGE, finishedMessage); - } - - @Override - public void initArchitecture() { - drawable = VizController.getInstance().getDrawable(); - engine = VizController.getInstance().getEngine(); - textManager = VizController.getInstance().getTextManager(); - vizConfig = VizController.getInstance().getVizConfig(); - } - - public void takeScreenshot() { - takeTicket = true; - } - - private static String getExtension(File f) { - String ext = null; - String s = f.getName(); - int i = s.lastIndexOf('.'); - - if (i > 0 && i < s.length() - 1) { - ext = s.substring(i + 1).toLowerCase(); - } - - if (ext == null) { - return ""; - } - return ext; - } - - private void take(File file) throws Exception { - - //System.out.println("Take Screenshot to " + file.getName()); - - // Fix the image size for now - int tileWidth = width / 16; - int tileHeight = height / 12; - int imageWidth = width; - int imageHeight = height; - - GLProfile profile = GLProfile.get(GLProfile.GL2); - GLCapabilities caps = new GLCapabilities(profile); - AbstractGraphicsDevice device = GLDrawableFactory.getFactory(profile).getDefaultDevice(); - //Caps - - caps.setAlphaBits(8); - caps.setDoubleBuffered(false); - caps.setHardwareAccelerated(true); - caps.setSampleBuffers(true); - caps.setNumSamples(antiAliasing); - - //Buffer - - GLPbuffer pbuffer = GLDrawableFactory.getFactory(profile).createGLPbuffer(device, caps, null, tileWidth, tileHeight, null); - BufferedImage image = null; - if (transparentBackground) { - image = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_4BYTE_ABGR); - } else { - image = new BufferedImage(imageWidth, imageHeight, BufferedImage.TYPE_3BYTE_BGR); - } - ByteBuffer imageBuffer = ByteBuffer.wrap(((DataBufferByte) image.getRaster().getDataBuffer()).getData()); - - //Tile rendering - TileRenderer tileRenderer = new TileRenderer(); - tileRenderer.setTileSize(tileWidth, tileHeight, 0); - tileRenderer.setImageSize(imageWidth, imageHeight); - if (transparentBackground) { - tileRenderer.setImageBuffer(GL2.GL_BGRA, GL2.GL_UNSIGNED_BYTE, imageBuffer); - } else { - tileRenderer.setImageBuffer(GL2.GL_BGR, GL2.GL_UNSIGNED_BYTE, imageBuffer); - } - tileRenderer.trPerspective(drawable.viewField, (float) imageWidth / (float) imageHeight, drawable.nearDistance, drawable.farDistance); - - //Get gl - //GLContext oldContext = GLContext.getCurrent(); - GLContext context = pbuffer.getContext(); - if (context.makeCurrent() == GLContext.CONTEXT_NOT_CURRENT) { - throw new RuntimeException("Error making pbuffer's context current"); - } - - System.out.println("Disabling snapshot"); - - GL2 gl = pbuffer.getGL().getGL2(); - gl.glMatrixMode(GL2.GL_MODELVIEW); - gl.glLoadIdentity(); - - //Init - drawable.initConfig(gl); - vizConfig.setDisableLOD(true); - engine.initScreenshot(gl, GLAbstractListener.glu); - - - //Textrender - swap to 3D - textManager.setRenderer3d(true); - - //Render in buffer - do { - tileRenderer.beginTile(gl); - drawable.renderScreenshot(pbuffer); - } while (tileRenderer.endTile(gl)); - - //Clean - context.release(); - pbuffer.destroy(); - - - //Textrender - back to 2D - textManager.setRenderer3d(false); - vizConfig.setDisableLOD(false); - //Write image - ImageUtil.flipImageVertically(image); - writeImage(image); - - /*Iterator iter = ImageIO.getImageWritersByFormatName("png"); - if (iter.hasNext()) { - ImageWriter writer = iter.next(); - ImageWriteParam iwp = writer.getDefaultWriteParam(); - //iwp.setCompressionType("DEFAULT"); - //iwp.setCompressionMode(javax.imageio.ImageWriteParam.MODE_EXPLICIT); - //iwp.setCompressionQuality((int)(9*pngCompresssion)); - FileImageOutputStream output = new FileImageOutputStream(file); - writer.setOutput(output); - IIOImage img = new IIOImage(image, null, null); - writer.write(null, img, iwp); - writer.dispose(); - }*/ - - //oldContext.makeCurrent(); - } - - private void writeImage(BufferedImage image) throws Exception { - if (!autoSave) { - //Get last directory - String lastPathDefault = NbPreferences.forModule(ScreenshotMaker.class).get(LAST_PATH_DEFAULT, null); - String lastPath = NbPreferences.forModule(ScreenshotMaker.class).get(LAST_PATH, lastPathDefault); - final JFileChooser chooser = new JFileChooser(lastPath); - chooser.setAcceptAllFileFilterUsed(false); - chooser.setDialogTitle(NbBundle.getMessage(ScreenshotMaker.class, "ScreenshotMaker.filechooser.title")); - DialogFileFilter dialogFileFilter = new DialogFileFilter(NbBundle.getMessage(ScreenshotMaker.class, "ScreenshotMaker.filechooser.pngDescription")); - dialogFileFilter.addExtension("png"); - chooser.addChoosableFileFilter(dialogFileFilter); - File selectedFile = new File(chooser.getCurrentDirectory(), getDefaultFileName() + ".png"); - chooser.setSelectedFile(selectedFile); - int returnFile = chooser.showSaveDialog(null); - if (returnFile != JFileChooser.APPROVE_OPTION) { - return; - } - file = chooser.getSelectedFile(); - - if (!file.getPath().endsWith(".png")) { - file = new File(file.getPath() + ".png"); - } - - //Save last path - defaultDirectory = file.getParentFile().getAbsolutePath(); - NbPreferences.forModule(ScreenshotMaker.class).put(LAST_PATH, defaultDirectory); - - } else { - file = new File(defaultDirectory, getDefaultFileName() + ".png"); - } - String format = "png"; - if (file != null) { - format = getExtension(file); - } - if (!ImageIO.write(image, format, file)) { - throw new IOException("Unsupported file format"); - } - } - - public void openglSignal(GLAutoDrawable drawable) { - if (takeTicket) { - takeTicket = false; - try { - beforeTaking(); - take(file); - drawable.getContext().makeCurrent(); - afterTaking(); - file = null; - } catch (Exception e) { - e.printStackTrace(); - } - - } - } - - private void beforeTaking() throws InterruptedException, InvocationTargetException { - SwingUtilities.invokeLater(new Runnable() { - - @Override - public void run() { - WindowManager.getDefault().getMainWindow().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - } - }); - } - - private void afterTaking() { - SwingUtilities.invokeLater(new Runnable() { - @Override - public void run() { - WindowManager.getDefault().getMainWindow().setCursor(Cursor.getDefaultCursor()); - if (finishedMessage && file != null) { - final String msg = NbBundle.getMessage(ScreenshotMaker.class, "ScreenshotMaker.finishedMessage.message", file.getName()); - JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(), msg, NbBundle.getMessage(ScreenshotMaker.class, "ScreenshotMaker.finishedMessage.title"), JOptionPane.INFORMATION_MESSAGE); - } - } - }); - } - - private static final String DATE_FORMAT_NOW = "HHmmss"; - - private String getDefaultFileName() { - - Calendar cal = Calendar.getInstance(); - DateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT_NOW); - String datetime = dateFormat.format(cal.getTime()); - - return "screenshot_" + datetime; - } - - public void configure() { - ScreenshotSettingsPanel panel = new ScreenshotSettingsPanel(); - panel.setup(this); - ValidationPanel validationPanel = ScreenshotSettingsPanel.createValidationPanel(panel); - if (validationPanel.showOkCancelDialog(NbBundle.getMessage(ScreenshotMaker.class, "ScreenshotMaker.configure.title"))) { - panel.unsetup(this); - return; - } -// DialogDescriptor dd = new DialogDescriptor(validationPanel, NbBundle.getMessage(ScreenshotMaker.class, "ScreenshotMaker.configure.title")); -// Object result = DialogDisplayer.getDefault().notify(dd); -// if (result == NotifyDescriptor.OK_OPTION) { -// panel.unsetup(this); -// } - } - - public int getAntiAliasing() { - return antiAliasing; - } - - public void setAntiAliasing(int antiAliasing) { - this.antiAliasing = antiAliasing; - } - - public int getWidth() { - return width; - } - - public void setWidth(int width) { - this.width = width; - } - - public int getHeight() { - return height; - } - - public void setHeight(int height) { - this.height = height; - } - - public boolean isAutoSave() { - return autoSave; - } - - public void setAutoSave(boolean autoSave) { - this.autoSave = autoSave; - } - - public boolean isTransparentBackground() { - return transparentBackground; - } - - public void setTransparentBackground(boolean transparentBackground) { - this.transparentBackground = transparentBackground; - } - - public String getDefaultDirectory() { - return defaultDirectory; - } - - public void setDefaultDirectory(File directory) { - if (directory != null && directory.exists()) { - defaultDirectory = directory.getAbsolutePath(); - NbPreferences.forModule(ScreenshotMaker.class).put(LAST_PATH, defaultDirectory); - } - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/screenshot/ScreenshotModelImpl.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/screenshot/ScreenshotModelImpl.java new file mode 100644 index 0000000000..5d61854cf6 --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/screenshot/ScreenshotModelImpl.java @@ -0,0 +1,130 @@ +package org.gephi.visualization.screenshot; + +import java.io.File; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; +import javax.xml.stream.XMLStreamWriter; +import org.gephi.visualization.VizConfig; +import org.gephi.visualization.VizModel; +import org.gephi.visualization.api.ScreenshotModel; +import org.gephi.visualization.api.VisualizationModel; +import org.openide.util.NbPreferences; + +public class ScreenshotModelImpl implements ScreenshotModel { + + protected static final String LAST_PATH = "ScreenshotMaker_Last_Path"; + protected static final String LAST_PATH_DEFAULT = "ScreenshotMaker_Last_Path_Default"; + // Model + private final VizModel vizModel; + // Settings + private int scaleFactor; + private boolean transparentBackground; + private boolean autoSave; + private String defaultDirectory; + + public ScreenshotModelImpl(VizModel vizModel) { + this.vizModel = vizModel; + String lastPathDefault = NbPreferences.forModule(ScreenshotControllerImpl.class).get(LAST_PATH_DEFAULT, null); + defaultDirectory = NbPreferences.forModule(ScreenshotControllerImpl.class).get(LAST_PATH, lastPathDefault); + + scaleFactor = VizConfig.getDefaultScreenshotScaleFactor(); + transparentBackground = VizConfig.isDefaultScreenshotTransparentBackground(); + autoSave = VizConfig.isDefaultScreenshotAutoSave(); + } + + @Override + public VisualizationModel getVisualizationModel() { + return vizModel; + } + + @Override + public int getScaleFactor() { + return scaleFactor; + } + + public void setScaleFactor(int scaleFactor) { + this.scaleFactor = scaleFactor; + } + + @Override + public boolean isTransparentBackground() { + return transparentBackground; + } + + public void setTransparentBackground(boolean transparentBackground) { + this.transparentBackground = transparentBackground; + } + + @Override + public boolean isAutoSave() { + return autoSave; + } + + public void setAutoSave(boolean autoSave) { + this.autoSave = autoSave; + } + + @Override + public String getDefaultDirectory() { + return defaultDirectory; + } + + public void setDefaultDirectory(File directory) { + if (directory != null && directory.exists()) { + defaultDirectory = directory.getAbsolutePath(); + NbPreferences.forModule(ScreenshotControllerImpl.class).put(LAST_PATH, defaultDirectory); + } + } + + public void readXML(XMLStreamReader reader) throws XMLStreamException { + boolean end = false; + while (reader.hasNext() && !end) { + int type = reader.next(); + switch (type) { + case XMLStreamReader.START_ELEMENT: + String name = reader.getLocalName(); + if ("scaleFactor".equalsIgnoreCase(name)) { + scaleFactor = Integer.parseInt(reader.getAttributeValue(null, "value")); + } else if ("transparentBackground".equalsIgnoreCase(name)) { + transparentBackground = Boolean.parseBoolean(reader.getAttributeValue(null, "value")); + } else if ("autoSave".equalsIgnoreCase(name)) { + autoSave = Boolean.parseBoolean(reader.getAttributeValue(null, "value")); + } else if ("defaultDirectory".equalsIgnoreCase(name)) { + String path = reader.getAttributeValue(null, "value"); + if (path != null && !path.isEmpty()) { + File dir = new File(path); + if (dir.exists()) { + defaultDirectory = path; + } + } + } + break; + case XMLStreamReader.END_ELEMENT: + if ("screenshotModel".equalsIgnoreCase(reader.getLocalName())) { + end = true; + } + break; + } + } + } + + public void writeXML(XMLStreamWriter writer) throws XMLStreamException { + writer.writeStartElement("scaleFactor"); + writer.writeAttribute("value", String.valueOf(scaleFactor)); + writer.writeEndElement(); + + writer.writeStartElement("transparentBackground"); + writer.writeAttribute("value", String.valueOf(transparentBackground)); + writer.writeEndElement(); + + writer.writeStartElement("autoSave"); + writer.writeAttribute("value", String.valueOf(autoSave)); + writer.writeEndElement(); + + if (defaultDirectory != null && !defaultDirectory.isEmpty()) { + writer.writeStartElement("defaultDirectory"); + writer.writeAttribute("value", defaultDirectory); + writer.writeEndElement(); + } + } +} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/screenshot/ScreenshotSettingsPanel.form b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/screenshot/ScreenshotSettingsPanel.form deleted file mode 100644 index b461ec3fce..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/screenshot/ScreenshotSettingsPanel.form +++ /dev/null @@ -1,169 +0,0 @@ - - -
              - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
              diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/screenshot/ScreenshotSettingsPanel.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/screenshot/ScreenshotSettingsPanel.java deleted file mode 100644 index da4bf90471..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/screenshot/ScreenshotSettingsPanel.java +++ /dev/null @@ -1,273 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.visualization.screenshot; - -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import javax.swing.JFileChooser; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import org.gephi.lib.validation.Multiple4NumberValidator; -import org.netbeans.validation.api.builtin.Validators; -import org.netbeans.validation.api.ui.ValidationGroup; -import org.netbeans.validation.api.ui.ValidationPanel; -import org.openide.windows.WindowManager; - -/** - * - * @author Mathieu Bastian - */ -public class ScreenshotSettingsPanel extends javax.swing.JPanel { - - /** Creates new form ScreenshotSettingsPanel */ - public ScreenshotSettingsPanel() { - initComponents(); - - autoSaveCheckBox.addChangeListener(new ChangeListener() { - - @Override - public void stateChanged(ChangeEvent e) { - selectDirectoryButton.setEnabled(autoSaveCheckBox.isSelected()); - } - }); - } - - public void setup(final ScreenshotMaker screenshotMaker) { - autoSaveCheckBox.setSelected(screenshotMaker.isAutoSave()); - selectDirectoryButton.setEnabled(autoSaveCheckBox.isSelected()); - widthTextField.setText(String.valueOf(screenshotMaker.getWidth())); - heightTextField.setText(String.valueOf(screenshotMaker.getHeight())); - switch (screenshotMaker.getAntiAliasing()) { - case 0: - antiAliasingCombo.setSelectedIndex(0); - break; - case 2: - antiAliasingCombo.setSelectedIndex(1); - break; - case 4: - antiAliasingCombo.setSelectedIndex(2); - break; - case 8: - antiAliasingCombo.setSelectedIndex(3); - break; - case 16: - antiAliasingCombo.setSelectedIndex(4); - break; - default: - antiAliasingCombo.setSelectedIndex(4); - break; - } - //transparentBackgroundCheckBox.setSelected(screenshotMaker.isTransparentBackground()); - selectDirectoryButton.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - JFileChooser fileChooser = new JFileChooser(screenshotMaker.getDefaultDirectory()); - fileChooser.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY); - int result = fileChooser.showOpenDialog(WindowManager.getDefault().getMainWindow()); - if (result == JFileChooser.APPROVE_OPTION) { - screenshotMaker.setDefaultDirectory(fileChooser.getSelectedFile()); - } - } - }); - } - - public void unsetup(ScreenshotMaker screenshotMaker) { - screenshotMaker.setAutoSave(autoSaveCheckBox.isSelected()); - screenshotMaker.setWidth(Integer.parseInt(widthTextField.getText())); - screenshotMaker.setHeight(Integer.parseInt(heightTextField.getText())); - switch (antiAliasingCombo.getSelectedIndex()) { - case 0: - screenshotMaker.setAntiAliasing(0); - break; - case 1: - screenshotMaker.setAntiAliasing(2); - break; - case 2: - screenshotMaker.setAntiAliasing(4); - break; - case 3: - screenshotMaker.setAntiAliasing(8); - break; - case 4: - screenshotMaker.setAntiAliasing(16); - break; - default: - screenshotMaker.setAntiAliasing(0); - break; - } - //screenshotMaker.setTransparentBackground(transparentBackgroundCheckBox.isSelected()); - } - - public static ValidationPanel createValidationPanel(ScreenshotSettingsPanel innerPanel) { - ValidationPanel validationPanel = new ValidationPanel(); - if (innerPanel == null) { - innerPanel = new ScreenshotSettingsPanel(); - } - validationPanel.setInnerComponent(innerPanel); - - ValidationGroup group = validationPanel.getValidationGroup(); - - //Node field - group.add(innerPanel.widthTextField, Validators.REQUIRE_NON_EMPTY_STRING, - new Multiple4NumberValidator()); - - //Edge field - group.add(innerPanel.heightTextField, Validators.REQUIRE_NON_EMPTY_STRING, - new Multiple4NumberValidator()); - - - return validationPanel; - } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // //GEN-BEGIN:initComponents - private void initComponents() { - - imagePanel = new javax.swing.JPanel(); - labelHeight = new javax.swing.JLabel(); - labelWidth = new javax.swing.JLabel(); - widthTextField = new javax.swing.JTextField(); - labelAntiAliasing = new javax.swing.JLabel(); - antiAliasingCombo = new javax.swing.JComboBox(); - heightTextField = new javax.swing.JTextField(); - autoSaveCheckBox = new javax.swing.JCheckBox(); - selectDirectoryButton = new javax.swing.JButton(); - - imagePanel.setBorder(javax.swing.BorderFactory.createEtchedBorder()); - - labelHeight.setText(org.openide.util.NbBundle.getMessage(ScreenshotSettingsPanel.class, "ScreenshotSettingsPanel.labelHeight.text")); // NOI18N - - labelWidth.setText(org.openide.util.NbBundle.getMessage(ScreenshotSettingsPanel.class, "ScreenshotSettingsPanel.labelWidth.text")); // NOI18N - - widthTextField.setText(org.openide.util.NbBundle.getMessage(ScreenshotSettingsPanel.class, "ScreenshotSettingsPanel.widthTextField.text")); // NOI18N - - labelAntiAliasing.setText(org.openide.util.NbBundle.getMessage(ScreenshotSettingsPanel.class, "ScreenshotSettingsPanel.labelAntiAliasing.text")); // NOI18N - - antiAliasingCombo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "0x", "2x", "4x", "8x", "16x" })); - - heightTextField.setText(org.openide.util.NbBundle.getMessage(ScreenshotSettingsPanel.class, "ScreenshotSettingsPanel.heightTextField.text")); // NOI18N - - javax.swing.GroupLayout imagePanelLayout = new javax.swing.GroupLayout(imagePanel); - imagePanel.setLayout(imagePanelLayout); - imagePanelLayout.setHorizontalGroup( - imagePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(imagePanelLayout.createSequentialGroup() - .addContainerGap() - .addGroup(imagePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(imagePanelLayout.createSequentialGroup() - .addComponent(labelWidth) - .addGap(3, 3, 3) - .addComponent(widthTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(labelHeight) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(heightTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 58, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGroup(imagePanelLayout.createSequentialGroup() - .addComponent(labelAntiAliasing) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(antiAliasingCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - imagePanelLayout.setVerticalGroup( - imagePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(imagePanelLayout.createSequentialGroup() - .addContainerGap() - .addGroup(imagePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(labelWidth) - .addComponent(widthTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelHeight) - .addComponent(heightTextField, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addGap(18, 18, 18) - .addGroup(imagePanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(labelAntiAliasing) - .addComponent(antiAliasingCombo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - - autoSaveCheckBox.setText(org.openide.util.NbBundle.getMessage(ScreenshotSettingsPanel.class, "ScreenshotSettingsPanel.autoSaveCheckBox.text")); // NOI18N - - selectDirectoryButton.setText(org.openide.util.NbBundle.getMessage(ScreenshotSettingsPanel.class, "ScreenshotSettingsPanel.selectDirectoryButton.text")); // NOI18N - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(imagePanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(layout.createSequentialGroup() - .addComponent(autoSaveCheckBox) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) - .addComponent(selectDirectoryButton))) - .addContainerGap()) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(imagePanel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) - .addComponent(autoSaveCheckBox) - .addComponent(selectDirectoryButton, javax.swing.GroupLayout.PREFERRED_SIZE, 23, javax.swing.GroupLayout.PREFERRED_SIZE)) - .addContainerGap(21, Short.MAX_VALUE)) - ); - }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JComboBox antiAliasingCombo; - private javax.swing.JCheckBox autoSaveCheckBox; - private javax.swing.JTextField heightTextField; - private javax.swing.JPanel imagePanel; - private javax.swing.JLabel labelAntiAliasing; - private javax.swing.JLabel labelHeight; - private javax.swing.JLabel labelWidth; - private javax.swing.JButton selectDirectoryButton; - private javax.swing.JTextField widthTextField; - // End of variables declaration//GEN-END:variables -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/screenshot/ScreenshotTask.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/screenshot/ScreenshotTask.java new file mode 100644 index 0000000000..be838e0c2c --- /dev/null +++ b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/screenshot/ScreenshotTask.java @@ -0,0 +1,165 @@ +package org.gephi.visualization.screenshot; + +import static org.gephi.visualization.screenshot.ScreenshotModelImpl.LAST_PATH; +import static org.gephi.visualization.screenshot.ScreenshotModelImpl.LAST_PATH_DEFAULT; + +import java.awt.Cursor; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.text.DateFormat; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.concurrent.CancellationException; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.BooleanSupplier; +import javax.swing.JFileChooser; +import javax.swing.JOptionPane; +import javax.swing.SwingUtilities; +import org.gephi.ui.utils.DialogFileFilter; +import org.gephi.utils.longtask.spi.LongTask; +import org.gephi.utils.progress.ProgressTicket; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.jogl.JOGLRenderingTarget; +import org.openide.awt.StatusDisplayer; +import org.openide.util.NbBundle; +import org.openide.util.NbPreferences; +import org.openide.windows.WindowManager; + +public class ScreenshotTask implements LongTask, Runnable { + + private static final String DATE_FORMAT_NOW = "HHmmss"; + + private ProgressTicket progressTicket; + private final ScreenshotModelImpl model; + private final JOGLRenderingTarget renderingTarget; + private final AtomicBoolean cancelled = new AtomicBoolean(false); + private final BooleanSupplier isCancelled = cancelled::get; + private File file; + + public ScreenshotTask(VizEngine engine, ScreenshotModelImpl model) { + this.model = model; + this.renderingTarget = engine.getRenderingTarget(); + } + + @Override + public void run() { + beforeTaking(); + + int scaleFactor = model.getScaleFactor(); + boolean transparentBackground = model.isTransparentBackground(); + try { + BufferedImage image = + renderingTarget.requestScreenshot(scaleFactor, transparentBackground, isCancelled).get(); + + // Write image to file + // Get File + SwingUtilities.invokeAndWait(() -> { + if (!model.isAutoSave()) { + //Get last directory + String lastPathDefault = + NbPreferences.forModule(ScreenshotTask.class).get(LAST_PATH_DEFAULT, null); + String lastPath = + NbPreferences.forModule(ScreenshotTask.class).get(LAST_PATH, lastPathDefault); + final JFileChooser chooser = new JFileChooser(lastPath); + chooser.setAcceptAllFileFilterUsed(false); + chooser.setDialogTitle( + NbBundle.getMessage(ScreenshotTask.class, "ScreenshotMaker.filechooser.title")); + DialogFileFilter dialogFileFilter = new DialogFileFilter(NbBundle + .getMessage(ScreenshotTask.class, "ScreenshotMaker.filechooser.pngDescription")); + dialogFileFilter.addExtension("png"); + chooser.addChoosableFileFilter(dialogFileFilter); + File selectedFile = new File(chooser.getCurrentDirectory(), getDefaultFileName() + ".png"); + chooser.setSelectedFile(selectedFile); + int returnFile = chooser.showSaveDialog(null); + if (returnFile == JFileChooser.APPROVE_OPTION) { + this.file = chooser.getSelectedFile(); + + if (!ScreenshotTask.this.file.getPath().endsWith(".png")) { + this.file = new File(this.file.getPath() + ".png"); + } + + //Save last path + NbPreferences.forModule(ScreenshotTask.class) + .put(LAST_PATH, this.file.getParentFile().getAbsolutePath()); + } else { + this.file = null; + } + } else { + this.file = new File(model.getDefaultDirectory(), getDefaultFileName() + ".png"); + } + }); + + // Write file + if (file != null) { + javax.imageio.ImageIO.write(image, "png", file); + } + + } catch (CancellationException e) { + // Task cancelled, do nothing + final String msg = NbBundle + .getMessage(ScreenshotControllerImpl.class, "ScreenshotMaker.progress.cancelled"); + StatusDisplayer.getDefault().setStatusText(msg); + } catch (InterruptedException | ExecutionException | IOException | InvocationTargetException e) { + throw new RuntimeException(e); + } finally { + afterTaking(); + } + } + + private void beforeTaking() { + SwingUtilities.invokeLater(new Runnable() { + + @Override + public void run() { + WindowManager.getDefault().getMainWindow().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + } + }); + } + + private void afterTaking() { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + WindowManager.getDefault().getMainWindow().setCursor(Cursor.getDefaultCursor()); + if (file != null) { + if (model.isAutoSave()) { + final String msg = NbBundle + .getMessage(ScreenshotControllerImpl.class, "ScreenshotMaker.finishedMessage.message", + file.getAbsolutePath()); + StatusDisplayer.getDefault().setStatusText(msg); + } else { + final String msg = NbBundle + .getMessage(ScreenshotControllerImpl.class, "ScreenshotMaker.finishedMessage.message", + file.getName()); + JOptionPane.showMessageDialog(WindowManager.getDefault().getMainWindow(), msg, + NbBundle.getMessage(ScreenshotControllerImpl.class, + "ScreenshotMaker.finishedMessage.title"), + JOptionPane.INFORMATION_MESSAGE); + } + } + } + }); + } + + private static String getDefaultFileName() { + Calendar cal = Calendar.getInstance(); + DateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT_NOW); + String datetime = dateFormat.format(cal.getTime()); + + return "screenshot_" + datetime; + } + + @Override + public boolean cancel() { + cancelled.set(true); + return true; + } + + @Override + public void setProgressTicket(ProgressTicket progressTicket) { + this.progressTicket = progressTicket; + } +} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/screenshot/TileRenderer.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/screenshot/TileRenderer.java deleted file mode 100644 index 66471ed879..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/screenshot/TileRenderer.java +++ /dev/null @@ -1,607 +0,0 @@ -package org.gephi.visualization.screenshot; - -import java.awt.Dimension; -import java.nio.Buffer; - -import javax.media.opengl.*; -import javax.media.opengl.glu.gl2.*; - -/** - * Note: Code copied from JOGL 2.0.2 sources http://jogamp.org/deployment/maven/org/jogamp/jogl/jogl/2.0.2/ - * This class is no longer included since JOGL 2.1.0 and up (no clear reason why). - * - * We keep this class here until a better solution is found, or TileRenderer is included again in a new JOGL release. - */ - -/** - * A fairly direct port of Brian Paul's tile rendering library, found - * at - * http://www.mesa3d.org/brianp/TR.html . I've java-fied it, but - * the functionality is the same. - * - * Original code Copyright (C) 1997-2005 Brian Paul. Licensed under - * BSD-compatible terms with permission of the author. See LICENSE.txt - * for license information. - * - * @author ryanm - */ -public class TileRenderer -{ - private static final int DEFAULT_TILE_WIDTH = 256; - - private static final int DEFAULT_TILE_HEIGHT = 256; - - private static final int DEFAULT_TILE_BORDER = 0; - - // - // Enumeration flags for accessing variables - // - // @author ryanm - // - - /** - * The width of a tile - */ - public static final int TR_TILE_WIDTH = 0; - /** - * The height of a tile - */ - public static final int TR_TILE_HEIGHT = 1; - /** - * The width of the border around the tiles - */ - public static final int TR_TILE_BORDER = 2; - /** - * The width of the final image - */ - public static final int TR_IMAGE_WIDTH = 3; - /** - * The height of the final image - */ - public static final int TR_IMAGE_HEIGHT = 4; - /** - * The number of rows of tiles - */ - public static final int TR_ROWS = 5; - /** - * The number of columns of tiles - */ - public static final int TR_COLUMNS = 6; - /** - * The current row number - */ - public static final int TR_CURRENT_ROW = 7; - /** - * The current column number - */ - public static final int TR_CURRENT_COLUMN = 8; - /** - * The width of the current tile - */ - public static final int TR_CURRENT_TILE_WIDTH = 9; - /** - * The height of the current tile - */ - public static final int TR_CURRENT_TILE_HEIGHT = 10; - /** - * The order that the rows are traversed - */ - public static final int TR_ROW_ORDER = 11; - - - /** - * Indicates we are traversing rows from the top to the bottom - */ - public static final int TR_TOP_TO_BOTTOM = 1; - - /** - * Indicates we are traversing rows from the bottom to the top - */ - public static final int TR_BOTTOM_TO_TOP = 2; - - /* Final image parameters */ - private Dimension imageSize = new Dimension(); - - private int imageFormat, imageType; - - private Buffer imageBuffer; - - /* Tile parameters */ - private Dimension tileSize = new Dimension(); - - private Dimension tileSizeNB = new Dimension(); - - private int tileBorder; - - private int tileFormat, tileType; - - private Buffer tileBuffer; - - /* Projection parameters */ - private boolean perspective; - - private double left; - - private double right; - - private double bottom; - - private double top; - - private double near; - - private double far; - - /* Misc */ - private int rowOrder; - - private int rows, columns; - - private int currentTile; - - private int currentTileWidth, currentTileHeight; - - private int currentRow, currentColumn; - - private int[] viewportSave = new int[ 4 ]; - - /** - * Creates a new TileRenderer object - */ - public TileRenderer() - { - tileSize.width = DEFAULT_TILE_WIDTH; - tileSize.height = DEFAULT_TILE_HEIGHT; - tileBorder = DEFAULT_TILE_BORDER; - rowOrder = TR_BOTTOM_TO_TOP; - currentTile = -1; - } - - /** - * Sets up the number of rows and columns needed - */ - private void setup() - { - columns = ( imageSize.width + tileSizeNB.width - 1 ) / tileSizeNB.width; - rows = ( imageSize.height + tileSizeNB.height - 1 ) / tileSizeNB.height; - currentTile = 0; - - assert columns >= 0; - assert rows >= 0; - } - - /** - * Sets the size of the tiles to use in rendering. The actual - * effective size of the tile depends on the border size, ie ( - * width - 2*border ) * ( height - 2 * border ) - * - * @param width - * The width of the tiles. Must not be larger than the GL - * context - * @param height - * The height of the tiles. Must not be larger than the - * GL context - * @param border - * The width of the borders on each tile. This is needed - * to avoid artifacts when rendering lines or points with - * thickness > 1. - */ - public void setTileSize( int width, int height, int border ) - { - assert ( border >= 0 ); - assert ( width >= 1 ); - assert ( height >= 1 ); - assert ( width >= 2 * border ); - assert ( height >= 2 * border ); - - tileBorder = border; - tileSize.width = width; - tileSize.height = height; - tileSizeNB.width = width - 2 * border; - tileSizeNB.height = height - 2 * border; - setup(); - } - - /** - * Specify a buffer the tiles to be copied to. This is not - * necessary for the creation of the final image, but useful if you - * want to inspect each tile in turn. - * - * @param format - * Interpreted as in glReadPixels - * @param type - * Interpreted as in glReadPixels - * @param image - * The buffer itself. Must be large enough to contain a - * tile, minus any borders - */ - public void setTileBuffer( int format, int type, Buffer image ) - { - tileFormat = format; - tileType = type; - tileBuffer = image; - } - - /** - * Sets the desired size of the final image - * - * @param width - * The width of the final image - * @param height - * The height of the final image - */ - public void setImageSize( int width, int height ) - { - imageSize.width = width; - imageSize.height = height; - setup(); - } - - /** - * Sets the buffer in which to store the final image - * - * @param format - * Interpreted as in glReadPixels - * @param type - * Interpreted as in glReadPixels - * @param image - * the buffer itself, must be large enough to hold the - * final image - */ - public void setImageBuffer( int format, int type, Buffer image ) - { - imageFormat = format; - imageType = type; - imageBuffer = image; - } - - /** - * Gets the parameters of this TileRenderer object - * - * @param param - * The parameter that is to be retrieved - * @return the value of the parameter - */ - public int getParam( int param ) - { - switch (param) { - case TR_TILE_WIDTH: - return tileSize.width; - case TR_TILE_HEIGHT: - return tileSize.height; - case TR_TILE_BORDER: - return tileBorder; - case TR_IMAGE_WIDTH: - return imageSize.width; - case TR_IMAGE_HEIGHT: - return imageSize.height; - case TR_ROWS: - return rows; - case TR_COLUMNS: - return columns; - case TR_CURRENT_ROW: - if( currentTile < 0 ) - return -1; - else - return currentRow; - case TR_CURRENT_COLUMN: - if( currentTile < 0 ) - return -1; - else - return currentColumn; - case TR_CURRENT_TILE_WIDTH: - return currentTileWidth; - case TR_CURRENT_TILE_HEIGHT: - return currentTileHeight; - case TR_ROW_ORDER: - return rowOrder; - default: - throw new IllegalArgumentException("Invalid enumerant as argument"); - } - } - - /** - * Sets the order of row traversal - * - * @param order - * The row traversal order, must be - * eitherTR_TOP_TO_BOTTOM or TR_BOTTOM_TO_TOP - */ - public void setRowOrder( int order ) - { - if (order == TR_TOP_TO_BOTTOM || order == TR_BOTTOM_TO_TOP) { - rowOrder = order; - } else { - throw new IllegalArgumentException("Must pass TR_TOP_TO_BOTTOM or TR_BOTTOM_TO_TOP"); - } - } - - /** - * Sets the context to use an orthographic projection. Must be - * called before rendering the first tile - * - * @param left - * As in glOrtho - * @param right - * As in glOrtho - * @param bottom - * As in glOrtho - * @param top - * As in glOrtho - * @param zNear - * As in glOrtho - * @param zFar - * As in glOrtho - */ - public void trOrtho( double left, double right, double bottom, double top, double zNear, - double zFar ) - { - this.perspective = false; - this.left = left; - this.right = right; - this.bottom = bottom; - this.top = top; - this.near = zNear; - this.far = zFar; - } - - /** - * Sets the perspective projection frustrum. Must be called before - * rendering the first tile - * - * @param left - * As in glFrustrum - * @param right - * As in glFrustrum - * @param bottom - * As in glFrustrum - * @param top - * As in glFrustrum - * @param zNear - * As in glFrustrum - * @param zFar - * As in glFrustrum - */ - public void trFrustum( double left, double right, double bottom, double top, double zNear, - double zFar ) - { - this.perspective = true; - this.left = left; - this.right = right; - this.bottom = bottom; - this.top = top; - this.near = zNear; - this.far = zFar; - } - - /** - * Convenient way to specify a perspective projection - * - * @param fovy - * As in gluPerspective - * @param aspect - * As in gluPerspective - * @param zNear - * As in gluPerspective - * @param zFar - * As in gluPerspective - */ - public void trPerspective( double fovy, double aspect, double zNear, double zFar ) - { - double xmin, xmax, ymin, ymax; - ymax = zNear * Math.tan( fovy * 3.14159265 / 360.0 ); - ymin = -ymax; - xmin = ymin * aspect; - xmax = ymax * aspect; - trFrustum( xmin, xmax, ymin, ymax, zNear, zFar ); - } - - /** - * Begins rendering a tile. The projection matrix stack should be - * left alone after calling this - * - * @param gl - * The gl context - */ - public void beginTile( GL2 gl ) - { - if (currentTile <= 0) { - setup(); - /* - * Save user's viewport, will be restored after last tile - * rendered - */ - gl.glGetIntegerv( GL2.GL_VIEWPORT, viewportSave, 0 ); - } - - /* which tile (by row and column) we're about to render */ - if (rowOrder == TR_BOTTOM_TO_TOP) { - currentRow = currentTile / columns; - currentColumn = currentTile % columns; - } else { - currentRow = rows - ( currentTile / columns ) - 1; - currentColumn = currentTile % columns; - } - assert ( currentRow < rows ); - assert ( currentColumn < columns ); - - int border = tileBorder; - - int th, tw; - - /* Compute actual size of this tile with border */ - if (currentRow < rows - 1) { - th = tileSize.height; - } else { - th = imageSize.height - ( rows - 1 ) * ( tileSizeNB.height ) + 2 * border; - } - - if (currentColumn < columns - 1) { - tw = tileSize.width; - } else { - tw = imageSize.width - ( columns - 1 ) * ( tileSizeNB.width ) + 2 * border; - } - - /* Save tile size, with border */ - currentTileWidth = tw; - currentTileHeight = th; - - gl.glViewport( 0, 0, tw, th ); - - /* save current matrix mode */ - int[] matrixMode = new int[ 1 ]; - gl.glGetIntegerv( GL2.GL_MATRIX_MODE, matrixMode, 0 ); - gl.glMatrixMode( GL2.GL_PROJECTION ); - gl.glLoadIdentity(); - - /* compute projection parameters */ - double l = - left + ( right - left ) * ( currentColumn * tileSizeNB.width - border ) - / imageSize.width; - double r = l + ( right - left ) * tw / imageSize.width; - double b = - bottom + ( top - bottom ) * ( currentRow * tileSizeNB.height - border ) - / imageSize.height; - double t = b + ( top - bottom ) * th / imageSize.height; - - if( perspective ) { - gl.glFrustum( l, r, b, t, near, far ); - } else { - gl.glOrtho( l, r, b, t, near, far ); - } - - /* restore user's matrix mode */ - gl.glMatrixMode( matrixMode[ 0 ] ); - } - - /** - * Must be called after rendering the scene - * - * @param gl - * the gl context - * @return true if there are more tiles to be rendered, false if - * the final image is complete - */ - public boolean endTile( GL2 gl ) - { - int[] prevRowLength = new int[ 1 ], prevSkipRows = new int[ 1 ], prevSkipPixels = new int[ 1 ], prevAlignment = - new int[ 1 ]; - - assert ( currentTile >= 0 ); - - // be sure OpenGL rendering is finished - gl.glFlush(); - - // save current glPixelStore values - gl.glGetIntegerv( GL2.GL_PACK_ROW_LENGTH, prevRowLength, 0 ); - gl.glGetIntegerv( GL2.GL_PACK_SKIP_ROWS, prevSkipRows, 0 ); - gl.glGetIntegerv( GL2.GL_PACK_SKIP_PIXELS, prevSkipPixels, 0 ); - gl.glGetIntegerv( GL2.GL_PACK_ALIGNMENT, prevAlignment, 0 ); - - if( tileBuffer != null ) { - int srcX = tileBorder; - int srcY = tileBorder; - int srcWidth = tileSizeNB.width; - int srcHeight = tileSizeNB.height; - gl.glReadPixels( srcX, srcY, srcWidth, srcHeight, tileFormat, tileType, tileBuffer ); - } - - if( imageBuffer != null ) { - int srcX = tileBorder; - int srcY = tileBorder; - int srcWidth = currentTileWidth - 2 * tileBorder; - int srcHeight = currentTileHeight - 2 * tileBorder; - int destX = tileSizeNB.width * currentColumn; - int destY = tileSizeNB.height * currentRow; - - /* setup pixel store for glReadPixels */ - gl.glPixelStorei( GL2.GL_PACK_ROW_LENGTH, imageSize.width ); - gl.glPixelStorei( GL2.GL_PACK_SKIP_ROWS, destY ); - gl.glPixelStorei( GL2.GL_PACK_SKIP_PIXELS, destX ); - gl.glPixelStorei( GL2.GL_PACK_ALIGNMENT, 1 ); - - /* read the tile into the final image */ - gl.glReadPixels( srcX, srcY, srcWidth, srcHeight, imageFormat, imageType, imageBuffer ); - } - - /* restore previous glPixelStore values */ - gl.glPixelStorei( GL2.GL_PACK_ROW_LENGTH, prevRowLength[ 0 ] ); - gl.glPixelStorei( GL2.GL_PACK_SKIP_ROWS, prevSkipRows[ 0 ] ); - gl.glPixelStorei( GL2.GL_PACK_SKIP_PIXELS, prevSkipPixels[ 0 ] ); - gl.glPixelStorei( GL2.GL_PACK_ALIGNMENT, prevAlignment[ 0 ] ); - - /* increment tile counter, return 1 if more tiles left to render */ - currentTile++; - if( currentTile >= rows * columns ) { - /* restore user's viewport */ - gl.glViewport( viewportSave[ 0 ], viewportSave[ 1 ], viewportSave[ 2 ], viewportSave[ 3 ] ); - currentTile = -1; /* all done */ - return false; - } else { - return true; - } - } - - /** - * Tile rendering causes problems with using glRasterPos3f, so you - * should use this replacement instead - * - * @param x - * As in glRasterPos3f - * @param y - * As in glRasterPos3f - * @param z - * As in glRasterPos3f - * @param gl - * The gl context - * @param glu - * A GLUgl2 object - */ - public void trRasterPos3f( float x, float y, float z, GL2 gl, GLUgl2 glu ) - { - if (currentTile < 0) { - /* not doing tile rendering right now. Let OpenGL do this. */ - gl.glRasterPos3f( x, y, z ); - } else { - double[] modelview = new double[ 16 ], proj = new double[ 16 ]; - int[] viewport = new int[ 4 ]; - double[] win = new double[3]; - - /* Get modelview, projection and viewport */ - gl.glGetDoublev( GL2.GL_MODELVIEW_MATRIX, modelview, 0 ); - gl.glGetDoublev( GL2.GL_PROJECTION_MATRIX, proj, 0 ); - viewport[ 0 ] = 0; - viewport[ 1 ] = 0; - viewport[ 2 ] = currentTileWidth; - viewport[ 3 ] = currentTileHeight; - - /* Project object coord to window coordinate */ - if( glu.gluProject( x, y, z, modelview, 0, proj, 0, viewport, 0, win, 0 ) ) { - - /* set raster pos to window coord (0,0) */ - gl.glMatrixMode( GL2.GL_MODELVIEW ); - gl.glPushMatrix(); - gl.glLoadIdentity(); - gl.glMatrixMode( GL2.GL_PROJECTION ); - gl.glPushMatrix(); - gl.glLoadIdentity(); - gl.glOrtho( 0.0, currentTileWidth, 0.0, currentTileHeight, 0.0, 1.0 ); - gl.glRasterPos3d( 0.0, 0.0, -win[ 2 ] ); - - /* - * Now use empty bitmap to adjust raster position to - * (winX,winY) - */ - { - byte[] bitmap = { 0 }; - gl.glBitmap( 1, 1, 0.0f, 0.0f, ( float ) win[ 0 ], ( float ) win[ 1 ], bitmap , 0 ); - } - - /* restore original matrices */ - gl.glPopMatrix(); /* proj */ - gl.glMatrixMode( GL2.GL_MODELVIEW ); - gl.glPopMatrix(); - } - } - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/selection/Cylinder.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/selection/Cylinder.java deleted file mode 100644 index 45bca0f184..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/selection/Cylinder.java +++ /dev/null @@ -1,165 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.selection; - -import javax.media.opengl.GL2; -import javax.media.opengl.glu.GLU; -import org.gephi.lib.gleem.linalg.Vecf; -import org.gephi.visualization.VizController; -import org.gephi.visualization.VizModel; -import org.gephi.visualization.api.selection.SelectionArea; -import org.gephi.visualization.api.selection.SelectionManager; -import org.gephi.visualization.apiimpl.GraphDrawable; -import org.gephi.visualization.apiimpl.GraphIO; -import org.gephi.visualization.model.node.NodeModel; - -/** - * - * @author Mathieu Bastian - */ -public class Cylinder implements SelectionArea { - - //Architecture - private final GraphIO graphIO; - private final GraphDrawable drawable; - private final SelectionManager selectionManager; - private final VizModel vizModel; - //Variables - private static final float[] rectPoint = {1, 1}; - private float[] rectangle = new float[2]; - - public Cylinder() { - graphIO = VizController.getInstance().getGraphIO(); - drawable = VizController.getInstance().getDrawable(); - selectionManager = VizController.getInstance().getSelectionManager(); - vizModel = VizController.getInstance().getVizModel(); - } - - @Override - public float[] getSelectionAreaRectancle() { - float diameter = selectionManager.getMouseSelectionDiameter(); - if (diameter == 1) { - //Point - return rectPoint; - } else { - float size; - if (selectionManager.isMouseSelectionZoomProportionnal()) { - size = diameter * (float) Math.abs(drawable.getDraggingMarkerX()); - } else { - size = diameter; - } - rectangle[0] = size; - rectangle[1] = size; - return rectangle; - } - } - - @Override - public float[] getSelectionAreaCenter() { - return null; - } - - @Override - public boolean mouseTest(Vecf distanceFromMouse, NodeModel nodeModel) { - float diameter = selectionManager.getMouseSelectionDiameter(); - if (diameter == 1) { - //Point - return nodeModel.selectionTest(distanceFromMouse, 0); - } else { - if (selectionManager.isMouseSelectionZoomProportionnal()) { - return nodeModel.selectionTest(distanceFromMouse, diameter * (float) Math.abs(drawable.getDraggingMarkerX())); - } else { - return nodeModel.selectionTest(distanceFromMouse, diameter); - } - } - } - - @Override - public void drawArea(GL2 gl, GLU glu) { - float diameter = selectionManager.getMouseSelectionDiameter(); - if (diameter == 1) { - //Point - } else { - //Cylinder - float radius; - boolean lighting = vizModel.isLighting(); - if (selectionManager.isMouseSelectionZoomProportionnal()) { - radius = (float) (diameter * Math.abs(drawable.getDraggingMarkerX())); //Proportionnal - } else { - radius = diameter; //Constant - } - float[] mousePosition = graphIO.getMousePosition(); - float vectorX, vectorY, vectorX1 = mousePosition[0], vectorY1 = mousePosition[1]; - double angle; - - if (lighting) { - gl.glDisable(GL2.GL_LIGHTING); - } - gl.glColor4f(0f, 0f, 0f, 0.2f); - gl.glBegin(GL2.GL_TRIANGLES); - for (int i = 0; i <= 360; i++) { - angle = i / 57.29577957795135f; - vectorX = mousePosition[0] + (radius * (float) Math.sin(angle)); - vectorY = mousePosition[1] + (radius * (float) Math.cos(angle)); - gl.glVertex2f(mousePosition[0], mousePosition[1]); - gl.glVertex2f(vectorX1, vectorY1); - gl.glVertex2f(vectorX, vectorY); - vectorY1 = vectorY; - vectorX1 = vectorX; - } - gl.glEnd(); - if (lighting) { - gl.glEnable(GL2.GL_LIGHTING); - } - } - } - - @Override - public boolean isEnabled() { - return selectionManager.isSelectionEnabled(); - } - - @Override - public boolean blockSelection() { - return false; - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/selection/Rectangle.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/selection/Rectangle.java deleted file mode 100644 index 46ee3d7c09..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/selection/Rectangle.java +++ /dev/null @@ -1,224 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.selection; - -import java.util.Arrays; -import javax.media.opengl.GL2; -import javax.media.opengl.glu.GLU; -import org.gephi.lib.gleem.linalg.Vecf; -import org.gephi.visualization.VizController; -import org.gephi.visualization.api.selection.SelectionArea; -import org.gephi.visualization.apiimpl.GraphDrawable; -import org.gephi.visualization.apiimpl.VizConfig; -import org.gephi.visualization.model.node.NodeModel; - -/** - * - * @author Mathieu Bastian - */ -public class Rectangle implements SelectionArea { - - private static float[] pointRect = {1, 1}; - private final GraphDrawable drawable; - private final VizConfig config; - private final float[] color; - //Variables - private float[] startPosition; - private float[] rectangle = new float[2]; - private float[] center = new float[2]; - private float[] rectangleSize = new float[2]; - private boolean stop = true; - private boolean blocking = true; - private boolean ctrl = false; - - public Rectangle() { - drawable = VizController.getInstance().getDrawable(); - config = VizController.getInstance().getVizConfig(); - color = config.getRectangleSelectionColor().getRGBComponents(null); - } - - @Override - public float[] getSelectionAreaRectancle() { - if (stop) { - return pointRect; - } - rectangleSize[0] = Math.abs(rectangle[0] - startPosition[0]); - rectangleSize[1] = Math.abs(rectangle[1] - startPosition[1]); - if (rectangleSize[0] < 1f) { - rectangleSize[0] = 1f; - } - if (rectangleSize[1] < 1f) { - rectangleSize[1] = 1f; - } - return rectangleSize; - } - - @Override - public float[] getSelectionAreaCenter() { - if (stop) { - return null; - } - center[0] = -(rectangle[0] - startPosition[0]) / 2f; - center[1] = -(rectangle[1] - startPosition[1]) / 2f; - return center; - } - - @Override - public boolean mouseTest(Vecf distanceFromMouse, NodeModel nodeModel) { - if (stop) { - return nodeModel.selectionTest(distanceFromMouse, 0); - } - float x = nodeModel.getViewportX(); - float y = nodeModel.getViewportY(); - float rad = nodeModel.getViewportRadius(); - - boolean res = true; - if (startPosition[0] > rectangle[0]) { - if (x - rad > startPosition[0] || x + rad < rectangle[0]) { - res = false; - } - } else { - if (x + rad < startPosition[0] || x - rad > rectangle[0]) { - res = false; - } - } - if (startPosition[1] < rectangle[1]) { - if (y + rad < startPosition[1] || y - rad > rectangle[1]) { - res = false; - } - } else { - if (y - rad > startPosition[1] || y + rad < rectangle[1]) { - res = false; - } - } - return res; - } - - public void start(float[] mousePosition) { - this.startPosition = Arrays.copyOf(mousePosition, 2); - this.rectangle[0] = startPosition[0]; - this.rectangle[1] = startPosition[1]; - stop = false; - blocking = false; - } - - public void stop() { - stop = true; - blocking = true; - } - - public void setMousePosition(float[] mousePosition) { - if (!stop) { - rectangle[0] = mousePosition[0]; - rectangle[1] = mousePosition[1]; - } - } - - @Override - public boolean isEnabled() { - return true; - } - - @Override - public boolean blockSelection() { - return blocking; - } - - public void setBlocking(boolean blocking) { - this.blocking = blocking; - } - - @Override - public void drawArea(GL2 gl, GLU glu) { - if (!stop) { - float x = startPosition[0]; - float y = startPosition[1]; - float w = rectangle[0] - startPosition[0]; - float h = rectangle[1] - startPosition[1]; - //System.out.println("x:"+x+" y:"+y+" w:"+w+" h:"+h); - - gl.glMatrixMode(GL2.GL_PROJECTION); - gl.glPushMatrix(); - gl.glLoadIdentity(); - glu.gluOrtho2D(0, drawable.getViewportWidth(), 0, drawable.getViewportHeight()); - gl.glMatrixMode(GL2.GL_MODELVIEW); - gl.glPushMatrix(); - gl.glLoadIdentity(); - - gl.glColor4f(color[0], color[1], color[2], color[3]); - - gl.glBegin(GL2.GL_QUADS); - gl.glVertex3f(x + w, y, 0); - gl.glVertex3f(x, y, 0); - gl.glVertex3f(x, y + h, 0); - gl.glVertex3f(x + w, y + h, 0); - gl.glEnd(); - - gl.glColor4f(color[0], color[1], color[2], 1f); - gl.glBegin(GL2.GL_LINE_LOOP); - gl.glVertex3f(x + w, y, 0); - gl.glVertex3f(x, y, 0); - gl.glVertex3f(x, y + h, 0); - gl.glVertex3f(x + w, y + h, 0); - gl.glEnd(); - - gl.glPopMatrix(); - gl.glMatrixMode(GL2.GL_PROJECTION); - gl.glPopMatrix(); - gl.glMatrixMode(GL2.GL_MODELVIEW); - } else { - startPosition = null; - } - } - - public boolean isStop() { - return stop; - } - - public void setCtrl(boolean ctrl) { - this.ctrl = ctrl; - } - - public boolean isCtrl() { - return ctrl; - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/swing/GLAbstractListener.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/swing/GLAbstractListener.java deleted file mode 100644 index 9d49020cd1..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/swing/GLAbstractListener.java +++ /dev/null @@ -1,345 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.swing; - -import com.jogamp.common.nio.Buffers; -import java.awt.Color; -import java.nio.FloatBuffer; -import java.nio.IntBuffer; -import javax.media.opengl.GL2; -import javax.media.opengl.GLAutoDrawable; -import javax.media.opengl.GLCapabilities; -import javax.media.opengl.GLEventListener; -import javax.media.opengl.GLProfile; -import javax.media.opengl.glu.GLU; -import org.gephi.visualization.VizController; -import org.gephi.visualization.config.GraphicalConfiguration; -import org.gephi.visualization.opengl.Lighting; -import org.gephi.visualization.screenshot.ScreenshotMaker; -import org.openide.util.Exceptions; - -/** - * - * @author Mathieu Bastian - */ -public abstract class GLAbstractListener implements GLEventListener { - - protected GLAutoDrawable drawable; - protected VizController vizController; - public static final GLU glu = new GLU(); - private static boolean DEBUG = true; - private long startTime = 0; - protected float fps; - protected float fpsAvg = 0; - protected float fpsCount = 0; - private volatile boolean resizing = false; - public final float viewField = 30.0f; - public final float nearDistance = 1.0f; - public final float farDistance = 100000f; - private double aspectRatio = 0; - protected FloatBuffer projMatrix = Buffers.newDirectFloatBuffer(16); - protected FloatBuffer modelMatrix = Buffers.newDirectFloatBuffer(16); - protected IntBuffer viewport = Buffers.newDirectIntBuffer(4); - protected GraphicalConfiguration graphicalConfiguration; - protected Lighting lighting = new Lighting(); - protected ScreenshotMaker screenshotMaker; - - protected void initDrawable(GLAutoDrawable drawable) { - this.drawable = drawable; - drawable.addGLEventListener(this); - } - - protected abstract void init(GL2 gl); - - protected abstract void render3DScene(GL2 gl, GLU glu); - - protected abstract void reshape3DScene(GL2 gl); - - protected abstract void setCameraPosition(GL2 gl, GLU glu); - - protected GLCapabilities getCaps() { - GLProfile profile = GLProfile.get(GLProfile.GL2); - GLCapabilities caps = new GLCapabilities(profile); - - try { - caps.setAlphaBits(8); //if NOT opaque - caps.setDoubleBuffered(true); - caps.setHardwareAccelerated(true); - - //FSAA - int antialisaing = vizController.getVizConfig().getAntialiasing(); - if (antialisaing == 0) { - caps.setSampleBuffers(false); - } else if (antialisaing == 2) { - caps.setSampleBuffers(true); - caps.setNumSamples(2); - } else if (antialisaing == 4) { - caps.setSampleBuffers(true); - caps.setNumSamples(4); - } else if (antialisaing == 8) { - caps.setSampleBuffers(true); - caps.setNumSamples(8); - } else if (antialisaing == 16) { - caps.setSampleBuffers(true); - caps.setNumSamples(16); - } - } catch (javax.media.opengl.GLException ex) { - Exceptions.printStackTrace(ex); - } - - return caps; - } - - public void initConfig(GL2 gl) { - //Disable Vertical synchro - gl.setSwapInterval(0); - - //Depth - if (vizController.getVizModel().isUse3d()) { - gl.glEnable(GL2.GL_DEPTH_TEST); //Enable Z-Ordering - gl.glDepthFunc(GL2.GL_LEQUAL); - gl.glHint(GL2.GL_PERSPECTIVE_CORRECTION_HINT, GL2.GL_NICEST); //Correct texture & colors perspective calculations - } else { - gl.glDisable(GL2.GL_DEPTH_TEST); //Z is set by the order of drawing - } - - //Cull face - if (vizController.getVizModel().isCulling()) { //When enabled, increases performance but polygons must be drawn counterclockwise - gl.glEnable(GL2.GL_CULL_FACE); - gl.glCullFace(GL2.GL_BACK); //Hide back face of polygons - } - - //Point Smooth - if (vizController.getVizConfig().isPointSmooth()) { //Only for GL_POINTS - gl.glEnable(GL2.GL_POINT_SMOOTH); - gl.glHint(GL2.GL_POINT_SMOOTH_HINT, GL2.GL_NICEST); //Point smoothing - } else { - gl.glDisable(GL2.GL_POINT_SMOOTH); - } - - //Light Smooth - if (vizController.getVizConfig().isLineSmooth()) { //Only for GL_LINES - gl.glEnable(GL2.GL_LINE_SMOOTH); - if (vizController.getVizConfig().isLineSmoothNicest()) { - gl.glHint(GL2.GL_LINE_SMOOTH_HINT, GL2.GL_NICEST); - } else { - gl.glHint(GL2.GL_LINE_SMOOTH_HINT, GL2.GL_FASTEST); - } - } else { - gl.glDisable(GL2.GL_LINE_SMOOTH); - } - - gl.glClearDepth(1.0f); - - //Background - Color backgroundColor = vizController.getVizModel().getBackgroundColor(); - gl.glClearColor(backgroundColor.getRed() / 255f, backgroundColor.getGreen() / 255f, backgroundColor.getBlue() / 255f, 1f); - - //Lighting - if (vizController.getVizModel().isLighting()) { - gl.glEnable(GL2.GL_LIGHTING); - setLighting(gl); - gl.glEnable(GL2.GL_NORMALIZE); //Normalise colors when glScale used - gl.glShadeModel(GL2.GL_SMOOTH); - } else { - gl.glDisable(GL2.GL_LIGHTING); - gl.glShadeModel(GL2.GL_FLAT); - } - - //Blending - if (vizController.getVizConfig().isBlending()) { - gl.glEnable(GL2.GL_BLEND); - if (vizController.getVizConfig().isBlendCinema()) { - gl.glBlendFunc(GL2.GL_CONSTANT_COLOR, GL2.GL_ONE_MINUS_SRC_ALPHA); //Black display - } else { - gl.glBlendFunc(GL2.GL_SRC_ALPHA, GL2.GL_ONE_MINUS_SRC_ALPHA); //Use alpha values correctly - } - } - - - //Material - if (vizController.getVizModel().isMaterial()) { - gl.glColorMaterial(GL2.GL_FRONT, GL2.GL_AMBIENT_AND_DIFFUSE); - gl.glEnable(GL2.GL_COLOR_MATERIAL); //Use color and avoid using glMaterial - } - //Mesh view - if (vizController.getVizConfig().isWireFrame()) { - gl.glPolygonMode(GL2.GL_FRONT_AND_BACK, GL2.GL_LINE); - } - - gl.glEnable(GL2.GL_TEXTURE_2D); - - } - - protected void setLighting(GL2 gl) { - lighting = new Lighting(); - lighting.glInit(gl); - } - - @Override - public void init(GLAutoDrawable drawable) { - GL2 gl = drawable.getGL().getGL2(); - - graphicalConfiguration = new GraphicalConfiguration(); - graphicalConfiguration.checkGeneralCompatibility(gl); - - //Reinit viewport, to ensure reshape to perform - viewport = Buffers.newDirectIntBuffer(4); - - resizing = false; - initConfig(gl); - init(gl); - } - - @Override - public void display(GLAutoDrawable drawable) { - - //Screenshot - screenshotMaker.openglSignal(drawable); - - //FPS - if (startTime == 0) { - startTime = System.currentTimeMillis() - 1; - } - long endTime = System.currentTimeMillis(); - long delta = endTime - startTime; - startTime = endTime; - fps = 1000.0f / delta; - if (fps < 100) { - fpsAvg = (fpsAvg * fpsCount + fps) / ++fpsCount; - } - - GL2 gl = drawable.getGL().getGL2(); - - if (vizController.getVizModel().isUse3d()) { - gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT); - } else { - gl.glClear(GL2.GL_COLOR_BUFFER_BIT); - } - - render3DScene(gl, glu); - } - - @Override - public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { - if (!resizing) { - if (viewport.get(2) == width && viewport.get(3) == height)//NO need - { - return; - } - resizing = true; - - if (height == 0) { - height = 1; - } - if (width == 0) { - width = 1; - } - - int viewportW = 0, viewportH = 0, viewportX = width, viewportY = height; - - aspectRatio = (double) width / (double) height; - viewportH = height; - viewportW = (int) (height * aspectRatio); - if (viewportW > width) { - viewportW = width; - viewportH = (int) (width * (1 / aspectRatio)); - } - viewportX = ((width - viewportW) / 2); - viewportY = ((height - viewportH) / 2); - - GL2 gl = drawable.getGL().getGL2(); - - gl.glViewport(viewportX, viewportY, viewportW, viewportH); - gl.glGetIntegerv(GL2.GL_VIEWPORT, viewport);//Update viewport buffer - - gl.glMatrixMode(GL2.GL_PROJECTION); - gl.glLoadIdentity(); - glu.gluPerspective(viewField, aspectRatio, nearDistance, farDistance); - gl.glGetFloatv(GL2.GL_PROJECTION_MATRIX, projMatrix);//Update projection buffer - - - gl.glMatrixMode(GL2.GL_MODELVIEW); - gl.glLoadIdentity(); - - reshape3DScene(drawable.getGL().getGL2()); - - if (DEBUG) { - DEBUG = false; - System.err.println("GL_VENDOR: " + gl.glGetString(GL2.GL_VENDOR)); - System.err.println("GL_RENDERER: " + gl.glGetString(GL2.GL_RENDERER)); - System.err.println("GL_VERSION: " + gl.glGetString(GL2.GL_VERSION)); - } - - resizing = false; - } - } - - public GL2 getGL() { - return drawable.getGL().getGL2(); - } - - public void setVizController(VizController vizController) { - this.vizController = vizController; - } - - public GLAutoDrawable getGLAutoDrawable() { - return drawable; - } - - public Lighting getLighting() { - return lighting; - } - - public GraphicalConfiguration getGraphicalConfiguration() { - return graphicalConfiguration; - } - - protected void resetFpsAverage() { - fpsAvg = 0; - fpsCount = 0; - } - - protected float getFpsAverage() { - return fpsAvg; - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/swing/GraphCanvas.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/swing/GraphCanvas.java deleted file mode 100644 index 4a7e977809..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/swing/GraphCanvas.java +++ /dev/null @@ -1,101 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.swing; - -import com.jogamp.opengl.util.gl2.GLUT; -import java.awt.Component; -import java.awt.Dimension; -import javax.media.opengl.GL2; -import javax.media.opengl.awt.GLCanvas; -import javax.media.opengl.glu.GLU; -import javax.swing.JPopupMenu; -import javax.swing.ToolTipManager; - -/** - * - * @author Mathieu Bastian - */ -public class GraphCanvas extends GraphDrawableImpl { - - private final GLCanvas glCanvas; - private final GLUT glut = new GLUT(); - - public GraphCanvas() { - super(); - glCanvas = new GLCanvas(getCaps()); - super.initDrawable(glCanvas); - glCanvas.setMinimumSize(new Dimension(0, 0)); //Fix Canvas resize Issue - - //Basic init - graphComponent = (Component) glCanvas; -// graphComponent.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - - //False lets the components appear on top of the canvas - JPopupMenu.setDefaultLightWeightPopupEnabled(false); - ToolTipManager.sharedInstance().setLightWeightPopupEnabled(false); - } - - @Override - protected void render3DScene(GL2 gl, GLU glu) { - if (vizController.getVizConfig().isShowFPS()) { - gl.glPushMatrix(); - gl.glLoadIdentity(); - gl.glMatrixMode(GL2.GL_PROJECTION); - gl.glPushMatrix(); - gl.glLoadIdentity(); - - gl.glGetIntegerv(GL2.GL_VIEWPORT, viewport); - glu.gluOrtho2D(0, viewport.get(2), viewport.get(3), 0); - gl.glDepthFunc(GL2.GL_ALWAYS); - gl.glColor3i(192, 192, 192); - gl.glRasterPos2f(10, 15); - String fpsRound = String.valueOf((int) fps); - glut.glutBitmapString(GLUT.BITMAP_HELVETICA_10, fpsRound); - - gl.glDepthFunc(GL2.GL_LESS); - gl.glPopMatrix(); - gl.glMatrixMode(GL2.GL_MODELVIEW); - gl.glPopMatrix(); - } - super.render3DScene(gl, glu); - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/swing/GraphDrawableImpl.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/swing/GraphDrawableImpl.java deleted file mode 100644 index fa147c90f0..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/swing/GraphDrawableImpl.java +++ /dev/null @@ -1,360 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.swing; - -import java.awt.Component; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.nio.DoubleBuffer; -import java.nio.FloatBuffer; -import java.nio.IntBuffer; -import javax.media.opengl.GL2; -import javax.media.opengl.GLAutoDrawable; -import javax.media.opengl.glu.GLU; -import org.gephi.lib.gleem.linalg.Vec3f; -import org.gephi.visualization.VizArchitecture; -import org.gephi.visualization.VizController; -import org.gephi.visualization.apiimpl.GraphDrawable; -import org.gephi.visualization.apiimpl.Scheduler; -import org.gephi.visualization.opengl.AbstractEngine; - -/** - * - * @author Mathieu Bastian - */ -public class GraphDrawableImpl extends GLAbstractListener implements VizArchitecture, GraphDrawable { - - protected Component graphComponent; - protected AbstractEngine engine; - protected Scheduler scheduler; - protected float[] cameraLocation; - protected float[] cameraTarget; - protected double[] draggingMarker = new double[2];//The drag mesure for a moving of 1 to the viewport - protected Vec3f cameraVector = new Vec3f(); - protected MouseAdapter graphMouseAdapter; - - public GraphDrawableImpl() { - super(); - this.vizController = VizController.getInstance(); - } - - @Override - public void initArchitecture() { - this.engine = VizController.getInstance().getEngine(); - this.scheduler = VizController.getInstance().getScheduler(); - this.screenshotMaker = VizController.getInstance().getScreenshotMaker(); - - cameraLocation = vizController.getVizConfig().getDefaultCameraPosition(); - cameraTarget = vizController.getVizConfig().getDefaultCameraTarget(); - - //Mouse events - if (vizController.getVizConfig().isReduceFpsWhenMouseOut()) { - final int minVal = vizController.getVizConfig().getReduceFpsWhenMouseOutValue(); - final int maxVal = 30; - graphMouseAdapter = new MouseAdapter() { - private float lastTarget = 0.1f; - - @Override - public void mouseEntered(MouseEvent e) { - if (!scheduler.isAnimating()) { - engine.startDisplay(); - } - scheduler.setFps(maxVal); - resetFpsAverage(); - } - - @Override - public void mouseExited(MouseEvent e) { - float fps = getFpsAverage(); - float target = (float) (fps / (1. / Math.sqrt(getFpsAverage()) * 10.)); - if (fps == 0f) { - target = lastTarget; - } - if (target <= 0.005f) { - engine.stopDisplay(); - } else if (target > minVal) { - target = minVal; - } - lastTarget = target; - scheduler.setFps(target); - } - }; - graphComponent.addMouseListener(graphMouseAdapter); - } else if (vizController.getVizConfig().isPauseLoopWhenMouseOut()) { - graphMouseAdapter = new MouseAdapter() { - @Override - public void mouseEntered(MouseEvent e) { - engine.startDisplay(); - } - - @Override - public void mouseExited(MouseEvent e) { - engine.stopDisplay(); - } - }; - graphComponent.addMouseListener(graphMouseAdapter); - } - } - - @Override - protected void init(GL2 gl) { - //System.out.println("init"); -// graphComponent.setCursor(Cursor.getDefaultCursor()); - engine.initEngine(gl, glu); - } - - public void destroy() { - if (graphMouseAdapter != null) { - graphComponent.removeMouseListener(graphMouseAdapter); - } - } - - public void refreshDraggingMarker() { - //Refresh dragging marker - /*DoubleBuffer objPos = BufferUtil.newDoubleBuffer(3); - glu.gluProject(0, 0, 0, modelMatrix, projMatrix, viewport, objPos); - double dxx = objPos.get(0); - double dyy = objPos.get(1); - glu.gluProject(1, 1, 0, modelMatrix, projMatrix, viewport, objPos); - draggingMarker[0] = dxx - objPos.get(0); - draggingMarker[1] = dyy - objPos.get(1); - System.out.print(draggingMarker[0]);*/ - - float[] d = myGluProject(0, 0, 0); - float[] d2 = myGluProject(1, 1, 0); - - draggingMarker[0] = d[0] - d2[0]; - draggingMarker[1] = d[1] - d2[1]; - - } - - @Override - public void setCameraPosition(GL2 gl, GLU glu) { - - //Refresh rotation angle - gl.glLoadIdentity(); - glu.gluLookAt(cameraLocation[0], cameraLocation[1], cameraLocation[2], cameraTarget[0], cameraTarget[1], cameraTarget[2], 0, 1, 0); - gl.glGetFloatv(GL2.GL_MODELVIEW_MATRIX, modelMatrix); - cameraVector.set(cameraTarget[0] - cameraLocation[0], cameraTarget[1] - cameraLocation[1], cameraTarget[2] - cameraLocation[2]); - refreshDraggingMarker(); - } - - @Override - protected void reshape3DScene(GL2 gl) { - setCameraPosition(gl, glu); - } - - @Override - protected void render3DScene(GL2 gl, GLU glu) { - - scheduler.display(gl, glu); - //renderTestCube(gl); - } - - private void renderTestCube(GL2 gl) { - float cubeSize = 100f; - - gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT); - gl.glLoadIdentity(); - glu.gluLookAt(cameraLocation[0], cameraLocation[1], cameraLocation[2], cameraTarget[0], cameraTarget[1], cameraTarget[2], 0, 1, 0); - - gl.glColor3f(0f, 0f, 0f); - - gl.glRotatef(15.0f, 0.0f, 1.0f, 0.0f); // Rotate The cube around the Y axis - gl.glRotatef(15.0f, 1.0f, 1.0f, 1.0f); - - gl.glBegin(GL2.GL_QUADS); // Draw The Cube Using quads - gl.glColor3f(0.0f, 1.0f, 0.0f); // Color Blue - gl.glVertex3f(cubeSize, cubeSize, -cubeSize); // Top Right Of The Quad (Top) - gl.glVertex3f(-cubeSize, cubeSize, -cubeSize); // Top Left Of The Quad (Top) - gl.glVertex3f(-cubeSize, cubeSize, cubeSize); // Bottom Left Of The Quad (Top) - gl.glVertex3f(cubeSize, cubeSize, 1.0f); // Bottom Right Of The Quad (Top) - gl.glColor3f(1.0f, 0.5f, 0.0f); // Color Orange - gl.glVertex3f(cubeSize, -cubeSize, cubeSize); // Top Right Of The Quad (Bottom) - gl.glVertex3f(-cubeSize, -cubeSize, cubeSize); // Top Left Of The Quad (Bottom) - gl.glVertex3f(-cubeSize, -cubeSize, -cubeSize); // Bottom Left Of The Quad (Bottom) - gl.glVertex3f(cubeSize, -cubeSize, -cubeSize); // Bottom Right Of The Quad (Bottom) - gl.glColor3f(1.0f, 0.0f, 0.0f); // Color Red - gl.glVertex3f(cubeSize, cubeSize, cubeSize); // Top Right Of The Quad (Front) - gl.glVertex3f(-cubeSize, cubeSize, cubeSize); // Top Left Of The Quad (Front) - gl.glVertex3f(-cubeSize, -cubeSize, cubeSize); // Bottom Left Of The Quad (Front) - gl.glVertex3f(cubeSize, -cubeSize, cubeSize); // Bottom Right Of The Quad (Front) - gl.glColor3f(1.0f, 1.0f, 0.0f); // Color Yellow - gl.glVertex3f(cubeSize, -cubeSize, -cubeSize); // Top Right Of The Quad (Back) - gl.glVertex3f(-cubeSize, -cubeSize, -cubeSize); // Top Left Of The Quad (Back) - gl.glVertex3f(-cubeSize, cubeSize, -cubeSize); // Bottom Left Of The Quad (Back) - gl.glVertex3f(cubeSize, cubeSize, -cubeSize); // Bottom Right Of The Quad (Back) - gl.glColor3f(0.0f, 0.0f, 1.0f); // Color Blue - gl.glVertex3f(-cubeSize, cubeSize, cubeSize); // Top Right Of The Quad (Left) - gl.glVertex3f(-cubeSize, cubeSize, -cubeSize); // Top Left Of The Quad (Left) - gl.glVertex3f(-cubeSize, -cubeSize, -cubeSize); // Bottom Left Of The Quad (Left) - gl.glVertex3f(-cubeSize, -cubeSize, cubeSize); // Bottom Right Of The Quad (Left) - gl.glColor3f(1.0f, 0.0f, 1.0f); // Color Violet - gl.glVertex3f(cubeSize, cubeSize, -cubeSize); // Top Right Of The Quad (Right) - gl.glVertex3f(cubeSize, cubeSize, cubeSize); // Top Left Of The Quad (Right) - gl.glVertex3f(cubeSize, -cubeSize, cubeSize); // Bottom Left Of The Quad (Right) - gl.glVertex3f(cubeSize, -cubeSize, -cubeSize); // Bottom Right Of The Quad (Right) - gl.glEnd(); // End Drawing The Cube - } - - public void renderScreenshot(GLAutoDrawable drawable) { - GL2 gl = drawable.getGL().getGL2(); - if (vizController.getVizModel().isUse3d()) { - gl.glClear(GL2.GL_COLOR_BUFFER_BIT | GL2.GL_DEPTH_BUFFER_BIT); - } else { - gl.glClear(GL2.GL_COLOR_BUFFER_BIT); - } - setCameraPosition(gl, glu); - engine.display(gl, glu); - } - - public void display() { - drawable.display(); - } - - //Utils - public double[] myGluProject(float x, float y) { - return myGluProject(x, y); - } - - public float[] myGluProject(float x, float y, float z) { - float[] res = new float[2]; - - float o0 = modelMatrix.get(0) * x + modelMatrix.get(4) * y + modelMatrix.get(8) * z + modelMatrix.get(12) * 1f; - float o1 = modelMatrix.get(1) * x + modelMatrix.get(5) * y + modelMatrix.get(9) * z + modelMatrix.get(13) * 1f; - float o2 = modelMatrix.get(2) * x + modelMatrix.get(6) * y + modelMatrix.get(10) * z + modelMatrix.get(14) * 1f; - float o3 = modelMatrix.get(3) * x + modelMatrix.get(7) * y + modelMatrix.get(11) * z + modelMatrix.get(15) * 1f; - - float p0 = projMatrix.get(0) * o0 + projMatrix.get(4) * o1 + projMatrix.get(8) * o2 + projMatrix.get(12) * o3; - float p1 = projMatrix.get(1) * o0 + projMatrix.get(5) * o1 + projMatrix.get(9) * o2 + projMatrix.get(13) * o3; - float p2 = projMatrix.get(2) * o0 + projMatrix.get(6) * o1 + projMatrix.get(10) * o2 + projMatrix.get(14) * o3; - float p3 = projMatrix.get(3) * o0 + projMatrix.get(7) * o1 + projMatrix.get(11) * o2 + projMatrix.get(15) * o3; - p0 /= p3; - p1 /= p3; - p2 /= p3; - - res[0] = viewport.get(0) + (p0 + 1) * viewport.get(2) / 2; - res[1] = viewport.get(1) + viewport.get(3) * (p1 + 1) / 2; - - return res; - } - - private double[] transformVect(double[] in, DoubleBuffer m) { - double[] out = new double[4]; - - out[0] = m.get(0) * in[0] + m.get(4) * in[1] + m.get(8) * in[2] + m.get(12) * in[3]; - out[1] = m.get(1) * in[0] + m.get(5) * in[1] + m.get(9) * in[2] + m.get(13) * in[3]; - out[2] = m.get(2) * in[0] + m.get(6) * in[1] + m.get(10) * in[2] + m.get(14) * in[3]; - out[3] = m.get(3) * in[0] + m.get(7) * in[1] + m.get(11) * in[2] + m.get(15) * in[3]; - - return out; - } - - @Override - public float[] getCameraLocation() { - return cameraLocation; - } - - @Override - public void setCameraLocation(float[] cameraLocation) { - this.cameraLocation = cameraLocation; - } - - @Override - public float[] getCameraTarget() { - return cameraTarget; - } - - @Override - public void setCameraTarget(float[] cameraTarget) { - this.cameraTarget = cameraTarget; - } - - @Override - public Component getGraphComponent() { - return graphComponent; - } - - @Override - public Vec3f getCameraVector() { - return cameraVector; - } - - @Override - public int getViewportHeight() { - return viewport.get(3); - } - - @Override - public int getViewportWidth() { - return viewport.get(2); - } - - @Override - public double getDraggingMarkerX() { - return draggingMarker[0]; - } - - @Override - public double getDraggingMarkerY() { - return draggingMarker[1]; - } - - @Override - public FloatBuffer getProjectionMatrix() { - return projMatrix; - } - - public FloatBuffer getModelMatrix() { - return modelMatrix; - } - - @Override - public IntBuffer getViewport() { - return viewport; - } - - @Override - public void dispose(GLAutoDrawable glad) { - /* FIXME: jbilcke: what should it do? is it new in JOGL2? */ - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/swing/GraphPanel.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/swing/GraphPanel.java deleted file mode 100644 index 998322e537..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/swing/GraphPanel.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.swing; - -import java.awt.Color; -import java.awt.Cursor; -import java.awt.Graphics; -import java.awt.Graphics2D; -import java.text.NumberFormat; -import javax.media.opengl.awt.GLJPanel; -import org.gephi.visualization.GraphLimits; -import org.gephi.visualization.VizController; - -/** - * - * @author Mathieu Bastian - */ -public class GraphPanel extends GraphDrawableImpl { - - private GLJPanel gljPanel; - private NumberFormat formatter; - - public GraphPanel() { - super(); - formatter = NumberFormat.getNumberInstance(); - formatter.setMaximumFractionDigits(1); - - //Init GLJPanel as the drawable - gljPanel = new GLJPanel(getCaps(), null, null) { - //@Override - @Override - public void paintComponent(Graphics g) { - Graphics2D g2d = (Graphics2D) g; - render2DBackground(g2d); - super.paintComponent(g2d); - render2DForeground(g2d); - } - }; - //gljPanel.setOpaque(false); - - graphComponent = gljPanel; - gljPanel.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - - super.initDrawable(gljPanel); - - //Basic panel init - gljPanel.setLayout(null); - } - - public GLJPanel getPanel() { - return gljPanel; - } - - private void render2DBackground(Graphics2D g) { - } - - private void render2DForeground(Graphics2D g) { - if (vizController.getVizConfig().isShowFPS()) { - g.setColor(Color.LIGHT_GRAY); - String fpsRound = formatter.format(fps); - g.drawString(fpsRound, 10, 15); - } - - GraphLimits limits = VizController.getInstance().getLimits(); - int[] xP = new int[4]; - xP[0] = limits.getMinXviewport(); - xP[1] = limits.getMinXviewport(); - xP[2] = limits.getMaxXviewport(); - xP[3] = limits.getMaxXviewport(); - int[] yP = new int[4]; - yP[0] = viewport.get(3) - limits.getMinYviewport(); - yP[1] = viewport.get(3) - limits.getMaxYviewport(); - yP[2] = viewport.get(3) - limits.getMaxYviewport(); - yP[3] = viewport.get(3) - limits.getMinYviewport(); - g.setColor(Color.red); - g.drawPolygon(xP, yP, 4); - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/swing/NewtGraphCanvas.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/swing/NewtGraphCanvas.java deleted file mode 100644 index ef30ca90dd..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/swing/NewtGraphCanvas.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.swing; - -import com.jogamp.newt.awt.NewtCanvasAWT; -import com.jogamp.newt.opengl.GLWindow; -import com.jogamp.opengl.util.gl2.GLUT; -import java.awt.Component; -import javax.media.opengl.GL2; -import javax.media.opengl.glu.GLU; -import javax.swing.JPopupMenu; -import javax.swing.ToolTipManager; - -/** - * - * @author Mathieu Bastian - */ -public class NewtGraphCanvas extends GraphDrawableImpl { - - private NewtCanvasAWT glCanvas; - private final GLUT glut = new GLUT(); - - public NewtGraphCanvas() { - super(); - GLWindow glWindow1 = GLWindow.create(getCaps()); - glCanvas = new NewtCanvasAWT(glWindow1); - glCanvas.setFocusable(true); - glCanvas.setIgnoreRepaint(true); - - super.initDrawable(glWindow1); -// glCanvas.setMinimumSize(new Dimension(0, 0)); //Fix Canvas resize Issue - - //Basic init - graphComponent = (Component) glCanvas; -// graphComponent.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - - //False lets the components appear on top of the canvas - JPopupMenu.setDefaultLightWeightPopupEnabled(false); - ToolTipManager.sharedInstance().setLightWeightPopupEnabled(false); - } - - @Override - protected void render3DScene(GL2 gl, GLU glu) { - if (vizController.getVizConfig().isShowFPS()) { - gl.glPushMatrix(); - gl.glLoadIdentity(); - gl.glMatrixMode(GL2.GL_PROJECTION); - gl.glPushMatrix(); - gl.glLoadIdentity(); - - gl.glGetIntegerv(GL2.GL_VIEWPORT, viewport); - glu.gluOrtho2D(0, viewport.get(2), viewport.get(3), 0); - gl.glDepthFunc(GL2.GL_ALWAYS); - gl.glColor3i(192, 192, 192); - gl.glRasterPos2f(10, 15); - String fpsRound = String.valueOf((int) fps); - glut.glutBitmapString(GLUT.BITMAP_HELVETICA_10, fpsRound); - - gl.glDepthFunc(GL2.GL_LESS); - gl.glPopMatrix(); - gl.glMatrixMode(GL2.GL_MODELVIEW); - gl.glPopMatrix(); - } - super.render3DScene(gl, glu); - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/swing/StandardGraphIO.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/swing/StandardGraphIO.java deleted file mode 100644 index 60b13b5097..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/swing/StandardGraphIO.java +++ /dev/null @@ -1,531 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.swing; - -import java.awt.Cursor; -import java.awt.event.InputEvent; -import java.awt.event.KeyEvent; -import java.awt.event.MouseEvent; -import java.awt.event.MouseWheelEvent; -import javax.swing.SwingUtilities; -import org.gephi.lib.gleem.linalg.MathUtil; -import org.gephi.lib.gleem.linalg.Vec3f; -import org.gephi.visualization.GraphLimits; -import org.gephi.visualization.VizArchitecture; -import org.gephi.visualization.VizController; -import org.gephi.visualization.api.selection.SelectionManager; -import org.gephi.visualization.apiimpl.GraphContextMenu; -import org.gephi.visualization.apiimpl.GraphIO; -import org.gephi.visualization.apiimpl.VizEventManager; -import org.gephi.visualization.opengl.AbstractEngine; -import org.gephi.visualization.selection.Rectangle; - -/** - * - * @author Mathieu Bastian - */ -public class StandardGraphIO implements GraphIO, VizArchitecture { - - //Architecture - protected GraphDrawableImpl graphDrawable; - protected AbstractEngine engine; - protected VizEventManager vizEventManager; - protected VizController vizController; - protected GraphLimits limits; - //Listeners data - protected float[] rightButtonMoving = {-1f, 0f, 0f}; - protected float[] leftButtonMoving = {-1f, 0f, 0f}; - protected float[] middleButtonMoving = {-1f, 0f, 0f}; - protected float[] mousePosition = new float[2]; - protected float[] mouseDrag3d = new float[2]; - protected float[] mouseDrag = new float[2]; - protected float[] startDrag2d = new float[2]; - //Flags - protected boolean draggingEnable = true; - protected boolean dragging = false; - protected boolean pressing = false; - - @Override - public void initArchitecture() { - this.graphDrawable = VizController.getInstance().getDrawable(); - this.engine = VizController.getInstance().getEngine(); - this.vizEventManager = VizController.getInstance().getVizEventManager(); - this.vizController = VizController.getInstance(); - this.limits = VizController.getInstance().getLimits(); - } - - @Override - public void startMouseListening() { - stopMouseListening(); - if (vizController.getVizConfig().isCameraControlEnable()) { - graphDrawable.graphComponent.addMouseListener(this); - graphDrawable.graphComponent.addMouseWheelListener(this); - } - - if (vizController.getVizConfig().isSelectionEnable()) { - graphDrawable.graphComponent.addMouseMotionListener(this); - } - - } - - @Override - public void stopMouseListening() { - graphDrawable.graphComponent.removeMouseListener(this); - graphDrawable.graphComponent.removeMouseMotionListener(this); - graphDrawable.graphComponent.removeMouseWheelListener(this); - } - - @Override - public void mousePressed(MouseEvent e) { - - if (!graphDrawable.getGraphComponent().isShowing()) { - return; - } - - float x = e.getLocationOnScreen().x - graphDrawable.graphComponent.getLocationOnScreen().x; - float y = e.getLocationOnScreen().y - graphDrawable.graphComponent.getLocationOnScreen().y; - - if (SwingUtilities.isRightMouseButton(e)) { - //Save the coordinate of the start - rightButtonMoving[0] = x; - rightButtonMoving[1] = y; - graphDrawable.graphComponent.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); - vizEventManager.mouseRightPress(); - } else if (vizController.getVizModel().isRotatingEnable() && SwingUtilities.isMiddleMouseButton(e)) { - middleButtonMoving[0] = x; - middleButtonMoving[1] = y; - graphDrawable.graphComponent.setCursor(Cursor.getPredefinedCursor(Cursor.MOVE_CURSOR)); - vizEventManager.mouseMiddlePress(); - } else if (SwingUtilities.isLeftMouseButton(e)) { - leftButtonMoving[0] = x; - leftButtonMoving[1] = y; - pressing = true; - vizEventManager.mouseLeftPress(); - } - } - - @Override - public void mouseReleased(MouseEvent e) { - //Disable the right button moving - rightButtonMoving[0] = -1; - leftButtonMoving[0] = -1; - middleButtonMoving[0] = -1; - - //Update mouse position because the movement during dragging - if (graphDrawable.getGraphComponent().isShowing()) { - - float x = e.getLocationOnScreen().x - graphDrawable.graphComponent.getLocationOnScreen().x; - float y = e.getLocationOnScreen().y - graphDrawable.graphComponent.getLocationOnScreen().y; - mousePosition[0] = x; - mousePosition[1] = graphDrawable.viewport.get(3) - y; - } - - if (dragging) { - dragging = false; - engine.getScheduler().requireStopDrag(); - vizEventManager.stopDrag(); - } else { - graphDrawable.graphComponent.setCursor(Cursor.getDefaultCursor()); - } - - vizEventManager.mouseReleased(); - if (pressing) { - pressing = false; - } - } - - @Override - public void mouseEntered(MouseEvent e) { - dragging = false; - /*if (!engine.getScheduler().isAnimating()) { - engine.getScheduler().start(); - }*/ - } - - @Override - public void mouseExited(MouseEvent e) { - if (!dragging) { - //engine.getScheduler().stop(); - } - } - - @Override - public void mouseMoved(MouseEvent e) { - - if (!graphDrawable.getGraphComponent().isShowing()) { - return; - } - - float x = e.getLocationOnScreen().x - graphDrawable.graphComponent.getLocationOnScreen().x; - float y = e.getLocationOnScreen().y - graphDrawable.graphComponent.getLocationOnScreen().y; - mousePosition[0] = x; - mousePosition[1] = graphDrawable.viewport.get(3) - y; - - engine.getScheduler().requireUpdateSelection(); - vizEventManager.mouseMove(); - } - - /** - * Mouse clicked event. - */ - @Override - public void mouseClicked(MouseEvent e) { - if (SwingUtilities.isLeftMouseButton(e)) { - if (vizController.getVizConfig().isSelectionEnable() && engine.isRectangleSelection()) { - Rectangle r = (Rectangle) engine.getCurrentSelectionArea(); - boolean ctrl = (e.getModifiers() & InputEvent.CTRL_DOWN_MASK) != 0 || (e.getModifiers() & InputEvent.CTRL_MASK) != 0; - r.setCtrl(ctrl); - } - engine.getScheduler().requireMouseClick(); - vizEventManager.mouseLeftClick(); - } else if (SwingUtilities.isRightMouseButton(e)) { - if (vizController.getVizConfig().isContextMenu()) { - GraphContextMenu popupMenu = new GraphContextMenu(); -// popupMenu.getMenu().show(graphDrawable.getGraphComponent(), (int) mousePosition[0], (int) (graphDrawable.viewport.get(3) - mousePosition[1])); - } - vizEventManager.mouseRightClick(); - } else if (SwingUtilities.isMiddleMouseButton(e)) { - vizEventManager.mouseMiddleClick(); - } - } - - @Override - public void mouseDragged(MouseEvent e) { - - if (!graphDrawable.getGraphComponent().isShowing()) { - return; - } - - float x = e.getLocationOnScreen().x - graphDrawable.graphComponent.getLocationOnScreen().x;//TODO Pourqoui ce osnt des float et pas des int - float y = e.getLocationOnScreen().y - graphDrawable.graphComponent.getLocationOnScreen().y; - - if (rightButtonMoving[0] != -1) { - //The right button is pressed - float proche = graphDrawable.cameraTarget[2] - graphDrawable.cameraLocation[2]; - proche = proche / 300; - - graphDrawable.cameraTarget[0] += (x - rightButtonMoving[0]) * proche; - graphDrawable.cameraTarget[1] += (rightButtonMoving[1] - y) * proche; - graphDrawable.cameraLocation[0] += (x - rightButtonMoving[0]) * proche; - graphDrawable.cameraLocation[1] += (rightButtonMoving[1] - y) * proche; - - rightButtonMoving[0] = x; - rightButtonMoving[1] = y; - engine.getScheduler().requireUpdateVisible(); - } - - if (middleButtonMoving[0] != -1) { - //The middle button is pressed - float angleY = y - middleButtonMoving[1]; - if (angleY > 0 || (graphDrawable.cameraTarget[1] - graphDrawable.cameraLocation[1] > 0)) { - middleButtonMoving[1] = y; - - graphDrawable.cameraLocation[1] = graphDrawable.cameraLocation[1] - Math.abs(graphDrawable.cameraLocation[2] - graphDrawable.cameraTarget[2]) * (float) Math.sin(Math.toRadians(angleY)); - engine.getScheduler().requireUpdateVisible(); - } - } - - if (leftButtonMoving[0] != -1) { - - //Remet Γ  jour aussi la mousePosition pendant le drag, notamment pour coller quand drag released - mousePosition[0] = x; - mousePosition[1] = graphDrawable.viewport.get(3) - y; - - mouseDrag3d[0] = (float) ((graphDrawable.viewport.get(2) / 2 - x) / graphDrawable.draggingMarker[0] + graphDrawable.cameraTarget[0]); - mouseDrag3d[1] = (float) ((y - graphDrawable.viewport.get(3) / 2) / graphDrawable.draggingMarker[1] + graphDrawable.cameraTarget[1]); - - if (vizController.getVizConfig().isSelectionEnable() && engine.isRectangleSelection()) { - if (!dragging) { - //Start drag - dragging = true; - Rectangle rectangle = (Rectangle) engine.getCurrentSelectionArea(); - rectangle.start(mousePosition); - } - engine.getScheduler().requireUpdateSelection(); - } else if (vizController.getVizConfig().isDraggingEnable()) { - - if (!dragging) { - //Start drag - dragging = true; - engine.getScheduler().requireStartDrag(); - } - engine.getScheduler().requireDrag(); - } else if (vizController.getVizConfig().isMouseSelectionUpdateWhileDragging()) { - engine.getScheduler().requireDrag(); - } else { - if (!dragging) { - //Start drag - dragging = true; - startDrag2d[0] = x; - startDrag2d[1] = y; - vizEventManager.startDrag(); - } - mouseDrag[0] = x - startDrag2d[0]; - mouseDrag[1] = startDrag2d[1] - y; - vizEventManager.drag(); - } - - leftButtonMoving[0] = x; - leftButtonMoving[1] = y; - } - } - - @Override - public void mouseWheelMoved(MouseWheelEvent e) { - if (e.getUnitsToScroll() == 0) { - return; - } - - boolean ctrl = (e.getModifiers() & InputEvent.CTRL_DOWN_MASK) != 0 || (e.getModifiers() & InputEvent.CTRL_MASK) != 0; - if (ctrl) { - SelectionManager manager = VizController.getInstance().getSelectionManager(); - if (!manager.isRectangleSelection()) { - int s = manager.getMouseSelectionDiameter(); - s += -e.getUnitsToScroll() * 2; - s = Math.min(1000, s); - s = Math.max(1, s); - manager.setMouseSelectionDiameter(s); - } - return; - } - - //Attributes - float way = -e.getUnitsToScroll() / Math.abs(e.getUnitsToScroll()); - Vec3f cameraVector = graphDrawable.getCameraVector().copy(); - float cameraLocation[] = graphDrawable.getCameraLocation(); - float cameraTarget[] = graphDrawable.getCameraTarget(); - - //Distance - float distance = limits.getDistanceFromPoint(cameraLocation[0], cameraLocation[1], cameraLocation[2]); - float distanceRatio = MathUtil.clamp(2 * distance / 10000f, 0f, 2f); - float coeff = (float) (Math.exp(distanceRatio - 2) * 2.2 - 0.295); //exp(x-2)*2.2-0.3 - float step = way * (10f + 1000 * coeff); - if (way == -1) { - step *= 3; - } - float stepRatio = step / distance; - - //Get mouse position within the clipping plane - float mouseX = MathUtil.clamp(mousePosition[0], limits.getMinXviewport(), limits.getMaxXviewport()); - float mouseY = MathUtil.clamp(mousePosition[1], limits.getMinYviewport(), limits.getMaxYviewport()); - mouseX = mouseX - graphDrawable.viewport.get(2) / 2f; //Set to centric coordinates - mouseY = mouseY - graphDrawable.viewport.get(3) / 2f; - - //Transform in 3d coordinates - mouseX /= -graphDrawable.draggingMarker[0]; - mouseY /= -graphDrawable.draggingMarker[1]; - - //Set stepVector for zooming, direction of camera and norm of step - cameraVector.normalize(); - Vec3f stepVec = cameraVector.times(step); - - cameraLocation[0] += stepVec.x(); - cameraLocation[1] += stepVec.y(); - cameraLocation[2] += stepVec.z(); - cameraLocation[2] = MathUtil.clamp(cameraLocation[2], 1f, Float.POSITIVE_INFINITY); - //System.out.println("camera: "+graphDrawable.cameraLocation[2]); - - //Displacement of camera according to mouse position. Clamped to graph limits - Vec3f disVec = new Vec3f(mouseX, mouseY, 0); - disVec.scale(stepRatio); - //System.out.println(disVec.x()+" "+disVec.y()+" "+disVec.z()); - - cameraLocation[0] += disVec.x(); - cameraLocation[1] += disVec.y(); - cameraLocation[2] += disVec.z(); - - cameraTarget[0] += disVec.x(); - cameraTarget[1] += disVec.y(); - cameraTarget[2] += disVec.z(); - - //Refresh - engine.getScheduler().requireUpdateVisible(); - - //Too slow as it triggers many events later - //vizController.getVizModel().setCameraDistance(graphDrawable.getCameraVector().length()); - - /* float[] graphLimits = engine.getGraphLimits(); - float graphWidth = Math.abs(graphLimits[1]-graphLimits[0]); - float graphHeight = Math.abs(graphLimits[3]-graphLimits[2]); - - //On reduit l'hypothenuse et on calcule les depl z et y correpsondant - double hypotenuse = Math.sqrt(Math.pow(graphDrawable.cameraTarget[1] - graphDrawable.cameraLocation[1],2d) + - Math.pow(graphDrawable.cameraTarget[2] - graphDrawable.cameraLocation[2],2d)); - float move = e.getUnitsToScroll()*((float)hypotenuse*0.05f); - - float widthRatio = graphWidth/(float)hypotenuse; - float heightRatio = graphHeight/(float)hypotenuse; - float distanceRatio = Math.max(widthRatio, heightRatio); - - if(e.getUnitsToScroll() > 0 && distanceRatio < 0.03f) - return; - - if(hypotenuse + move > 2 ) { - hypotenuse = hypotenuse + move; - - double disY = hypotenuse*Math.sin(graphDrawable.rotationX); - double disZ = hypotenuse*Math.cos(graphDrawable.rotationX); - float moveY = e.getUnitsToScroll()*(float)(disY*1/(8+distanceRatio)); - float moveZ = e.getUnitsToScroll()*(float)(disZ*1/(8+distanceRatio)); - //float moveY = e.getUnitsToScroll()*(float)(disY*0.05f); - //float moveZ = e.getUnitsToScroll()*(float)(disZ*0.05f); - - graphDrawable.cameraLocation[1] += moveY; - graphDrawable.cameraLocation[2] += moveZ; - graphDrawable.rotationX = (float)Math.atan(((graphDrawable.cameraLocation[1]-graphDrawable.cameraTarget[1])/(graphDrawable.cameraLocation[2]-graphDrawable.cameraTarget[2]))); - engine.getScheduler().requireUpdateVisible(); - }*/ - } - - @Override - public void setCameraDistance(float distance) { - float cameraLocation[] = graphDrawable.getCameraLocation(); - float cameraTarget[] = graphDrawable.getCameraTarget(); - Vec3f camVect = new Vec3f(cameraTarget[0] - cameraLocation[0], cameraTarget[1] - cameraLocation[1], cameraTarget[2] - cameraLocation[2]); - - float diff = camVect.length() - distance; - if (Math.abs(diff) > 1f) { - camVect.normalize(); - cameraLocation[0] += camVect.x() * diff; - cameraLocation[1] += camVect.y() * diff; - cameraLocation[2] += camVect.z() * diff; - cameraLocation[2] = Math.max(0.5f, cameraLocation[2]); - - engine.getScheduler().requireUpdateVisible(); - } - } - - @Override - public float[] getMousePosition3d() { - float[] m = new float[2]; - m[0] = mousePosition[0] - graphDrawable.viewport.get(2) / 2f; //Set to centric coordinates - m[1] = mousePosition[1] - graphDrawable.viewport.get(3) / 2f; - m[0] /= -graphDrawable.draggingMarker[0]; //Transform in 3d coordinates - m[1] /= -graphDrawable.draggingMarker[1]; - m[0] += graphDrawable.cameraTarget[0]; - m[1] += graphDrawable.cameraTarget[1]; - - return m; - } - - @Override - public void trigger() { - if (pressing) { - vizEventManager.mouseLeftPressing(); - } - } - - @Override - public void keyPressed(KeyEvent e) { - } - - @Override - public void keyReleased(KeyEvent e) { - } - - @Override - public void keyTyped(KeyEvent e) { - } - - @Override - public float[] getMousePosition() { - return mousePosition; - } - - @Override - public float[] getMouseDrag() { - return mouseDrag; - } - - @Override - public float[] getMouseDrag3d() { - return mouseDrag3d; - } - - @Override - public void centerOnZero() { - graphDrawable.cameraLocation[0] = 0; - graphDrawable.cameraLocation[1] = 0; - graphDrawable.cameraLocation[2] = 100; - - graphDrawable.cameraTarget[0] = 0; - graphDrawable.cameraTarget[1] = 0; - graphDrawable.cameraTarget[2] = 0; - - //Refresh - engine.getScheduler().requireUpdateVisible(); - } - - @Override - public void centerOnGraph() { - float graphWidth = Math.abs(limits.getMaxXoctree() - limits.getMinXoctree()); - float graphHeight = Math.abs(limits.getMaxYoctree() - limits.getMinYoctree()); - - float currentDistanceGraphRatioX = Math.abs(graphDrawable.viewport.get(2) / (float) graphDrawable.getDraggingMarkerX()) / graphDrawable.cameraLocation[2]; - float currentDistanceGraphRatioY = Math.abs(graphDrawable.viewport.get(3) / (float) graphDrawable.getDraggingMarkerY()) / graphDrawable.cameraLocation[2]; - float newCameraLocationX = graphWidth / currentDistanceGraphRatioX; - float newCameraLocationY = graphHeight / currentDistanceGraphRatioY; - float newCameraLocation = Math.max(newCameraLocationX, newCameraLocationY); - - graphDrawable.cameraLocation[0] = limits.getMinXoctree() + graphWidth / 2; - graphDrawable.cameraLocation[1] = limits.getMinYoctree() + graphWidth / 2; - graphDrawable.cameraLocation[2] = newCameraLocation; - - graphDrawable.cameraTarget[0] = graphDrawable.cameraLocation[0]; - graphDrawable.cameraTarget[1] = graphDrawable.cameraLocation[1]; - graphDrawable.cameraTarget[2] = 0; - - //Refresh - engine.getScheduler().requireUpdateVisible(); - } - - @Override - public void centerOnCoordinate(float x, float y, float z) { - graphDrawable.cameraTarget[0] = x; - graphDrawable.cameraTarget[1] = y; - graphDrawable.cameraTarget[2] = z; - - graphDrawable.cameraLocation[0] = x; - graphDrawable.cameraLocation[1] = y; - graphDrawable.cameraLocation[2] = z + 100; - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/text/ColorMode.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/text/ColorMode.java deleted file mode 100644 index ff58762d0b..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/text/ColorMode.java +++ /dev/null @@ -1,66 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.text; - -import javax.swing.ImageIcon; -import org.gephi.visualization.model.edge.EdgeModel; -import org.gephi.visualization.model.node.NodeModel; -import org.gephi.visualization.text.TextManager.Renderer; - -/** - * - * @author Mathieu Bastian - */ -public interface ColorMode { - - public String getName(); - - public ImageIcon getIcon(); - - public void defaultNodeColor(Renderer renderer); - - public void defaultEdgeColor(Renderer renderer); - - public void textNodeColor(Renderer renderer, NodeModel nodeModel); - - public void textEdgeColor(Renderer renderer, EdgeModel edgeModel); -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/text/FixedSizeMode.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/text/FixedSizeMode.java deleted file mode 100644 index 463b7bdf72..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/text/FixedSizeMode.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.text; - -import javax.swing.ImageIcon; -import org.gephi.visualization.VizController; -import org.gephi.visualization.apiimpl.GraphDrawable; -import org.gephi.visualization.model.node.NodeModel; - -/** - * - * @author Mathieu Bastian - */ -public class FixedSizeMode implements SizeMode { - - //private static float FACTOR_3D = 800f; - private GraphDrawable drawable; - - @Override - public void init() { - drawable = VizController.getInstance().getDrawable(); - } - - @Override - public float getSizeFactor2d(float sizeFactor, NodeModel model) { - return sizeFactor * 1.9f + 0.1f; //Between 0.1 and 2 - } - - @Override - public float getSizeFactor3d(float sizeFactor, NodeModel model) { - return sizeFactor / drawable.getViewportWidth() * model.getCameraDistance(); - } - - @Override - public String getName() { - return "Fixed"; - } - - @Override - public ImageIcon getIcon() { - return new ImageIcon(getClass().getResource("/org/gephi/visualization/opengl/text/FixedSizeMode.png")); - } - - @Override - public String toString() { - return getName(); - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/text/ObjectColorMode.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/text/ObjectColorMode.java deleted file mode 100644 index dfb1034778..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/text/ObjectColorMode.java +++ /dev/null @@ -1,122 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.text; - -import javax.swing.ImageIcon; -import org.gephi.visualization.VizController; -import org.gephi.visualization.apiimpl.VizConfig; -import org.gephi.visualization.model.TextModel; -import org.gephi.visualization.model.edge.EdgeModel; -import org.gephi.visualization.model.node.NodeModel; -import org.gephi.visualization.text.TextManager.Renderer; - -/** - * - * @author Mathieu Bastian - */ -public class ObjectColorMode implements ColorMode { - - private VizConfig vizConfig; - - public ObjectColorMode() { - this.vizConfig = VizController.getInstance().getVizConfig(); - } - - @Override - public void defaultEdgeColor(Renderer renderer) { - } - - @Override - public void defaultNodeColor(Renderer renderer) { - } - - @Override - public void textNodeColor(Renderer renderer, NodeModel nodeModel) { - textColor(renderer, nodeModel, nodeModel.isSelected()); - } - - @Override - public void textEdgeColor(Renderer renderer, EdgeModel edgeModel) { - textColor(renderer, edgeModel, edgeModel.isSelected()); - } - - protected void textColor(Renderer renderer, TextModel text, boolean selected) { - if (text.hasCustomTextColor()) { - if (vizConfig.isLightenNonSelected()) { - if (!selected) { - float lightColorFactor = 1 - vizConfig.getLightenNonSelectedFactor(); - renderer.setColor(text.getTextR(), text.getTextG(), text.getTextB(), lightColorFactor); - } else { - renderer.setColor(text.getTextR(), text.getTextG(), text.getTextB(), 1); - } - } else { - renderer.setColor(text.getTextR(), text.getTextG(), text.getTextB(), text.getTextAlpha()); - } - } else { - if (vizConfig.isLightenNonSelected()) { - if (!selected) { - float lightColorFactor = 1 - vizConfig.getLightenNonSelectedFactor(); - renderer.setColor(text.getElementProperties().r(), text.getElementProperties().g(), text.getElementProperties().b(), lightColorFactor); - } else { - renderer.setColor(text.getElementProperties().r(), text.getElementProperties().g(), text.getElementProperties().b(), 1); - } - } else { - renderer.setColor(text.getElementProperties().r(), text.getElementProperties().g(), text.getElementProperties().b(), text.getElementProperties().alpha()); - } - } - } - - @Override - public String getName() { - return "Object"; - } - - @Override - public ImageIcon getIcon() { - return new ImageIcon(getClass().getResource("/org/gephi/visualization/opengl/text/ObjectColorMode.png")); - } - - @Override - public String toString() { - return getName(); - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/text/ProportionalSizeMode.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/text/ProportionalSizeMode.java deleted file mode 100644 index 9038f8ddc0..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/text/ProportionalSizeMode.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.text; - -import javax.swing.ImageIcon; -import org.gephi.visualization.model.node.NodeModel; - -/** - * - * @author Mathieu Bastian - */ -public class ProportionalSizeMode implements SizeMode { - - private static float FACTOR = 200f; - - @Override - public void init() { - } - - @Override - public float getSizeFactor2d(float sizeFactor, NodeModel model) { - return FACTOR * model.getNode().size() * sizeFactor / model.getCameraDistance(); - } - - @Override - public float getSizeFactor3d(float sizeFactor, NodeModel model) { - return sizeFactor * model.getNode().size() / 10f; //Between 0.1 and 2 - } - - @Override - public String getName() { - return "Node size"; - } - - @Override - public ImageIcon getIcon() { - return new ImageIcon(getClass().getResource("/org/gephi/visualization/opengl/text/ProportionalSizeMode.png")); - } - - @Override - public String toString() { - return getName(); - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/text/ScaledSizeMode.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/text/ScaledSizeMode.java deleted file mode 100644 index 0dc8d71d23..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/text/ScaledSizeMode.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.text; - -import javax.swing.ImageIcon; -import org.gephi.visualization.model.node.NodeModel; - -/** - * - * @author Mathieu Bastian - */ -public class ScaledSizeMode implements SizeMode { - - private static float FACTOR_2D = 2000f; - - @Override - public void init() { - } - - @Override - public float getSizeFactor2d(float sizeFactor, NodeModel model) { - return FACTOR_2D * sizeFactor / model.getCameraDistance(); - } - - @Override - public float getSizeFactor3d(float sizeFactor, NodeModel model) { - return sizeFactor * 1.9f + 0.1f; //Between 0.1 and 2 - } - - @Override - public String getName() { - return "Scaled"; - } - - @Override - public ImageIcon getIcon() { - return new ImageIcon(getClass().getResource("/org/gephi/visualization/opengl/text/ScaledSizeMode.png")); - } - - @Override - public String toString() { - return getName(); - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/text/SizeMode.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/text/SizeMode.java deleted file mode 100644 index 5b3664d96d..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/text/SizeMode.java +++ /dev/null @@ -1,62 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.text; - -import javax.swing.ImageIcon; -import org.gephi.visualization.model.node.NodeModel; - -/** - * - * @author Mathieu Bastian - */ -public interface SizeMode { - - public String getName(); - - public ImageIcon getIcon(); - - public void init(); - - public float getSizeFactor2d(float sizeFactor, NodeModel model); - - public float getSizeFactor3d(float sizeFactor, NodeModel model); -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/text/TextManager.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/text/TextManager.java deleted file mode 100644 index cd859a8330..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/text/TextManager.java +++ /dev/null @@ -1,473 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.text; - -import com.jogamp.opengl.util.awt.TextRenderer; -import java.awt.Font; -import java.awt.geom.Rectangle2D; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import org.gephi.attribute.api.Column; -import org.gephi.graph.api.Edge; -import org.gephi.graph.api.Element; -import org.gephi.graph.api.Node; -import org.gephi.graph.api.TextProperties; -import org.gephi.visualization.VizArchitecture; -import org.gephi.visualization.VizController; -import org.gephi.visualization.apiimpl.GraphDrawable; -import org.gephi.visualization.apiimpl.VizConfig; -import org.gephi.visualization.model.TextModel; -import org.gephi.visualization.model.edge.EdgeModel; -import org.gephi.visualization.model.node.NodeModel; - -/** - * - * @author Mathieu Bastian - */ -public class TextManager implements VizArchitecture { - - //Architecture - private VizConfig vizConfig; - private GraphDrawable drawable; - //Configuration - private SizeMode[] sizeModes; - private ColorMode[] colorModes; - //Processing - private Renderer nodeRenderer; - private Renderer edgeRenderer; - //Variables - private TextModelImpl model; - private boolean nodeRefresh = true; - private boolean edgeRefresh = true; - //Preferences - private boolean renderer3d; - private boolean mipmap; - private boolean fractionalMetrics; - private boolean antialised; - - public TextManager() { - //SizeMode init - sizeModes = new SizeMode[3]; - sizeModes[0] = new FixedSizeMode(); - sizeModes[1] = new ScaledSizeMode(); - sizeModes[2] = new ProportionalSizeMode(); - - //ColorMode init - colorModes = new ColorMode[2]; - colorModes[0] = new UniqueColorMode(); - colorModes[1] = new ObjectColorMode(); - } - - @Override - public void initArchitecture() { - model = VizController.getInstance().getVizModel().getTextModel(); - vizConfig = VizController.getInstance().getVizConfig(); - drawable = VizController.getInstance().getDrawable(); - initRenderer(); - - //Init sizemodes - for (SizeMode s : sizeModes) { - s.init(); - } - - //Model listening - model.addChangeListener(new ChangeListener() { - @Override - public void stateChanged(ChangeEvent e) { - if (!nodeRenderer.getFont().equals(model.getNodeFont())) { - nodeRenderer.setFont(model.getNodeFont()); - } - if (!edgeRenderer.getFont().equals(model.getEdgeFont())) { - edgeRenderer.setFont(model.getEdgeFont()); - } - nodeRefresh = true; - edgeRefresh = true; - } - }); - - //Model change - VizController.getInstance().getVizModel().addPropertyChangeListener(new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - if (evt.getPropertyName().equals("init")) { - TextManager.this.model = VizController.getInstance().getVizModel().getTextModel(); - - //Initialize columns if needed - if (model.getNodeTextColumns() == null || model.getNodeTextColumns().length == 0) { - model.setTextColumns(new Column[0], new Column[0]); - } - } - } - }); - - //Settings - antialised = vizConfig.isLabelAntialiased(); - mipmap = vizConfig.isLabelMipMap(); - fractionalMetrics = vizConfig.isLabelFractionalMetrics(); - renderer3d = false; - } - - private void initRenderer() { - if (renderer3d) { - nodeRenderer = new Renderer3D(); - edgeRenderer = new Renderer3D(); - } else { - nodeRenderer = new Renderer2D(); - edgeRenderer = new Renderer2D(); - } - nodeRenderer.initRenderer(model.getNodeFont()); - edgeRenderer.initRenderer(model.getEdgeFont()); - } - - public void defaultNodeColor() { - model.colorMode.defaultNodeColor(nodeRenderer); - } - - public void defaultEdgeColor() { - model.colorMode.defaultEdgeColor(edgeRenderer); - } - - public boolean isSelectedOnly() { - return model.selectedOnly; - } - - public TextModelImpl getModel() { - return model; - } - - public void setModel(TextModelImpl model) { - this.model = model; - } - - public SizeMode[] getSizeModes() { - return sizeModes; - } - - public ColorMode[] getColorModes() { - return colorModes; - } - - public Renderer getNodeRenderer() { - return nodeRenderer; - } - - public Renderer getEdgeRenderer() { - return edgeRenderer; - } - - public void setRenderer3d(boolean renderer3d) { - this.renderer3d = renderer3d; - initRenderer(); - } - - public String buildText(Element element, TextModel textModel, Column[] selectedColumns) { - if (selectedColumns != null && selectedColumns.length > 0) { - String str = ""; - int i = 0; - for (Column c : selectedColumns) { - if (i++ > 0) { - str += " - "; - } - Object val = element.getAttribute(c); - str += val != null ? val : ""; - } - textModel.setText(str); - return str; - } - textModel.setText(element.getLabel()); - return element.getLabel(); - } - - //------------------------------------------------------------------------------------------------- - public static interface Renderer { - - public void initRenderer(Font font); - - public void reinitRenderer(); - - public void disposeRenderer(); - - public void beginRendering(); - - public void endRendering(); - - public void drawTextNode(NodeModel model); - - public void drawTextEdge(EdgeModel model); - - public Font getFont(); - - public void setFont(Font font); - - public void setColor(float r, float g, float b, float a); - - public TextRenderer getJOGLRenderer(); - } - - private class Renderer3D implements Renderer { - - private TextRenderer renderer; - - @Override - public void initRenderer(Font font) { - renderer = new TextRenderer(font, antialised, fractionalMetrics, null, mipmap); - } - - @Override - public void reinitRenderer() { - renderer = new TextRenderer(renderer.getFont(), antialised, fractionalMetrics, null, mipmap); - } - - @Override - public void disposeRenderer() { - renderer.flush(); - renderer.dispose(); - } - - @Override - public Font getFont() { - return renderer.getFont(); - } - - @Override - public void setFont(Font font) { - initRenderer(font); - } - - @Override - public void beginRendering() { - renderer.begin3DRendering(); - } - - @Override - public void endRendering() { - renderer.end3DRendering(); - nodeRefresh = false; - edgeRefresh = false; - } - - @Override - public void drawTextNode(NodeModel objectModel) { - Node node = objectModel.getNode(); - TextProperties textData = (TextProperties) node.getTextProperties(); - if (textData != null) { - String txt = textData.getText(); - if (nodeRefresh) { - txt = buildText(node, objectModel, model.getNodeTextColumns()); - if (txt == null || txt.isEmpty()) { - return; - } - Rectangle2D r = renderer.getBounds(txt); - objectModel.setTextBounds(r); - } - model.colorMode.textNodeColor(this, objectModel); - float sizeFactor = textData.getSize() * model.sizeMode.getSizeFactor3d(model.nodeSizeFactor, objectModel); - - float width = sizeFactor * objectModel.getTextWidth(); - float height = sizeFactor * objectModel.getTextHeight(); - float posX = node.x() + (float) width / -2 * sizeFactor; - float posY = node.y() + (float) height / -2 * sizeFactor; - float posZ = node.size(); - - renderer.draw3D(txt, posX, posY, posZ, sizeFactor); - } - } - - @Override - public void drawTextEdge(EdgeModel objectModel) { - Edge edge = objectModel.getEdge(); - TextProperties textData = (TextProperties) edge.getTextProperties(); - if (textData != null) { - String txt = textData.getText(); - if (edgeRefresh) { - txt = buildText(edge, objectModel, model.getEdgeTextColumns()); - if (txt == null || txt.isEmpty()) { - return; - } - Rectangle2D r = renderer.getBounds(txt); - objectModel.setTextBounds(r); - } - model.colorMode.textEdgeColor(this, objectModel); -// float sizeFactor = textData.getSize() * model.sizeMode.getSizeFactor3d(model.edgeSizeFactor, objectModel); - float sizeFactor = 1f; - float width = sizeFactor * objectModel.getTextWidth(); - float height = sizeFactor * objectModel.getTextHeight(); - float x = (objectModel.getSourceModel().getNode().x() + 2 * objectModel.getTargetModel().getNode().x()) / 3f; - float y = (objectModel.getSourceModel().getNode().y() + 2 * objectModel.getTargetModel().getNode().y()) / 3f; - float z = (objectModel.getSourceModel().getNode().z() + 2 * objectModel.getTargetModel().getNode().z()) / 3f; - - float posX = x + (float) width / -2 * sizeFactor; - float posY = y + (float) height / -2 * sizeFactor; - float posZ = 0; - - renderer.draw3D(txt, posX, posY, posZ, sizeFactor); - } - } - - @Override - public void setColor(float r, float g, float b, float a) { - renderer.setColor(r, g, b, a); - } - - @Override - public TextRenderer getJOGLRenderer() { - return renderer; - } - } - - private class Renderer2D implements Renderer { - - private TextRenderer renderer; - private static final float PIXEL_LIMIT = 3.5f; - - @Override - public void initRenderer(Font font) { - renderer = new TextRenderer(font, antialised, fractionalMetrics, null, mipmap); - } - - @Override - public void reinitRenderer() { - renderer = new TextRenderer(renderer.getFont(), antialised, fractionalMetrics, null, mipmap); - } - - @Override - public void disposeRenderer() { - renderer.flush(); - renderer.dispose(); - } - - @Override - public Font getFont() { - return renderer.getFont(); - } - - @Override - public void setFont(Font font) { - initRenderer(font); - } - - @Override - public void beginRendering() { - renderer.beginRendering(drawable.getViewportWidth(), drawable.getViewportHeight()); - } - - @Override - public void endRendering() { - renderer.endRendering(); - nodeRefresh = false; - edgeRefresh = false; - } - - @Override - public void drawTextNode(NodeModel objectModel) { - Node node = objectModel.getNode(); - TextProperties textData = (TextProperties) node.getTextProperties(); - if (textData != null) { - String txt = textData.getText(); - if (nodeRefresh) { - txt = buildText(node, objectModel, model.getNodeTextColumns()); - if (txt == null || txt.isEmpty()) { - return; - } - Rectangle2D r = renderer.getBounds(txt); - objectModel.setTextBounds(r); - } - model.colorMode.textNodeColor(this, objectModel); - float sizeFactor = textData.getSize() * model.sizeMode.getSizeFactor2d(model.nodeSizeFactor, objectModel); - if (sizeFactor * renderer.getCharWidth('a') < PIXEL_LIMIT) { - return; - } - Rectangle2D r = renderer.getBounds(txt); - float posX = objectModel.getViewportX() + (float) r.getWidth() / -2 * sizeFactor; - float posY = objectModel.getViewportY() + (float) r.getHeight() / -2 * sizeFactor; - r.setRect(0, 0, r.getWidth() / Math.abs(drawable.getDraggingMarkerX()), r.getHeight() / Math.abs(drawable.getDraggingMarkerY())); - objectModel.setTextBounds(r); - - renderer.draw3D(txt, posX, posY, 0, sizeFactor); - } - } - - @Override - public void drawTextEdge(EdgeModel objectModel) { - Edge edge = objectModel.getEdge(); - TextProperties textData = (TextProperties) edge.getTextProperties(); - if (textData != null) { - String txt = textData.getText(); - if (edgeRefresh) { - txt = buildText(edge, objectModel, model.getEdgeTextColumns()); - if (txt == null || txt.isEmpty()) { - return; - } - Rectangle2D r = renderer.getBounds(txt); - objectModel.setTextBounds(r); - } - model.colorMode.textEdgeColor(this, objectModel); -// float sizeFactor = textData.getSize() * model.sizeMode.getSizeFactor2d(model.nodeSizeFactor, objectModel); - float sizeFactor = 1f; - if (sizeFactor * renderer.getCharWidth('a') < PIXEL_LIMIT) { - return; - } - Rectangle2D r = renderer.getBounds(txt); - float viewportX = (objectModel.getSourceModel().getViewportX() + 2 * objectModel.getTargetModel().getViewportX()) / 3f; - float viewportY = (objectModel.getSourceModel().getViewportY() + 2 * objectModel.getTargetModel().getViewportY()) / 3f; - float posX = viewportX + (float) r.getWidth() / -2 * sizeFactor; - float posY = viewportY + (float) r.getHeight() / -2 * sizeFactor; - r.setRect(0, 0, r.getWidth() / drawable.getDraggingMarkerX(), r.getHeight() / drawable.getDraggingMarkerY()); - objectModel.setTextBounds(r); - - renderer.draw3D(txt, posX, posY, 0, sizeFactor); - } - } - - @Override - public void setColor(float r, float g, float b, float a) { - renderer.setColor(r, g, b, a); - } - - @Override - public TextRenderer getJOGLRenderer() { - return renderer; - } - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/text/TextModelImpl.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/text/TextModelImpl.java deleted file mode 100644 index 3d4c8d0063..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/text/TextModelImpl.java +++ /dev/null @@ -1,439 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.text; - -import java.awt.Color; -import java.awt.Font; -import java.util.ArrayList; -import java.util.List; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import javax.xml.stream.XMLStreamException; -import javax.xml.stream.XMLStreamReader; -import javax.xml.stream.XMLStreamWriter; -import org.gephi.attribute.api.AttributeModel; -import org.gephi.attribute.api.Column; -import org.gephi.graph.api.GraphController; -import org.gephi.project.api.Workspace; -import org.gephi.ui.utils.ColorUtils; -import org.gephi.visualization.VizController; -import org.gephi.visualization.apiimpl.VizConfig; -import org.openide.util.Lookup; - -/** - * - * @author Mathieu Bastian - */ -public class TextModelImpl { - - protected ColorMode colorMode; - protected SizeMode sizeMode; - protected boolean selectedOnly; - protected boolean showNodeLabels; - protected boolean showEdgeLabels; - protected Font nodeFont; - protected Font edgeFont; - protected float[] nodeColor = {0f, 0f, 0f, 1f}; - protected float[] edgeColor = {0f, 0f, 0f, 1f}; - protected float nodeSizeFactor = 0.5f;//Between 0 and 1 - protected float edgeSizeFactor = 0.5f; - protected List listeners = new ArrayList(); - protected Column[] nodeTextColumns = new Column[0]; - protected Column[] edgeTextColumns = new Column[0]; - - public TextModelImpl() { - defaultValues(); - } - - private void defaultValues() { - VizConfig vizConfig = VizController.getInstance().getVizConfig(); - showNodeLabels = vizConfig.isDefaultShowNodeLabels(); - showEdgeLabels = vizConfig.isDefaultShowEdgeLabels(); - nodeFont = vizConfig.getDefaultNodeLabelFont(); - edgeFont = vizConfig.getDefaultEdgeLabelFont(); - nodeColor = vizConfig.getDefaultNodeLabelColor().getRGBComponents(null); - edgeColor = vizConfig.getDefaultEdgeLabelColor().getRGBComponents(null); - selectedOnly = vizConfig.isDefaultShowLabelOnSelectedOnly(); - colorMode = VizController.getInstance().getTextManager().getColorModes()[0]; - sizeMode = VizController.getInstance().getTextManager().getSizeModes()[1]; - } - - //Event - public void addChangeListener(ChangeListener changeListener) { - List list = listeners; - if (list != null) { - listeners.add(changeListener); - } - } - - public void removeChangeListener(ChangeListener changeListener) { - List list = listeners; - if (list != null) { - listeners.remove(changeListener); - } - } - - private void fireChangeEvent() { - ChangeEvent evt = new ChangeEvent(this); - List list = listeners; - if (list != null) { - for (ChangeListener l : list) { - l.stateChanged(evt); - } - } - } - - public void setListeners(List listeners) { - this.listeners = listeners; - } - - public List getListeners() { - return listeners; - } - - //Getter & Setters - public boolean isShowEdgeLabels() { - return showEdgeLabels; - } - - public boolean isShowNodeLabels() { - return showNodeLabels; - } - - public void setShowEdgeLabels(boolean showEdgeLabels) { - this.showEdgeLabels = showEdgeLabels; - fireChangeEvent(); - } - - public void setShowNodeLabels(boolean showNodeLabels) { - this.showNodeLabels = showNodeLabels; - fireChangeEvent(); - } - - public void setEdgeFont(Font edgeFont) { - this.edgeFont = edgeFont; - fireChangeEvent(); - } - - public void setEdgeSizeFactor(float edgeSizeFactor) { - this.edgeSizeFactor = edgeSizeFactor; - fireChangeEvent(); - } - - public void setNodeFont(Font nodeFont) { - this.nodeFont = nodeFont; - fireChangeEvent(); - } - - public void setNodeSizeFactor(float nodeSizeFactor) { - this.nodeSizeFactor = nodeSizeFactor; - fireChangeEvent(); - } - - public Font getEdgeFont() { - return edgeFont; - } - - public float getEdgeSizeFactor() { - return edgeSizeFactor; - } - - public Font getNodeFont() { - return nodeFont; - } - - public float getNodeSizeFactor() { - return nodeSizeFactor; - } - - public ColorMode getColorMode() { - return colorMode; - } - - public void setColorMode(ColorMode colorMode) { - this.colorMode = colorMode; - fireChangeEvent(); - } - - public boolean isSelectedOnly() { - return selectedOnly; - } - - public void setSelectedOnly(boolean value) { - this.selectedOnly = value; - fireChangeEvent(); - } - - public SizeMode getSizeMode() { - return sizeMode; - } - - public void setSizeMode(SizeMode sizeMode) { - this.sizeMode = sizeMode; - fireChangeEvent(); - } - - public Color getNodeColor() { - return new Color(nodeColor[0], nodeColor[1], nodeColor[2], nodeColor[3]); - } - - public void setNodeColor(Color color) { - this.nodeColor = color.getRGBComponents(null); - fireChangeEvent(); - } - - public Color getEdgeColor() { - return new Color(edgeColor[0], edgeColor[1], edgeColor[2], edgeColor[3]); - } - - public void setEdgeColor(Color color) { - this.edgeColor = color.getRGBComponents(null); - fireChangeEvent(); - } - - public Column[] getEdgeTextColumns() { - return edgeTextColumns; - } - - public void setTextColumns(Column[] nodeTextColumns, Column[] edgeTextColumns) { - this.nodeTextColumns = nodeTextColumns; - this.edgeTextColumns = edgeTextColumns; - fireChangeEvent(); - } - - public Column[] getNodeTextColumns() { - return nodeTextColumns; - } - - public void readXML(XMLStreamReader reader, Workspace workspace) throws XMLStreamException { - GraphController graphController = Lookup.getDefault().lookup(GraphController.class); - AttributeModel attributeModel = graphController != null ? graphController.getAttributeModel(workspace) : null; - List nodeCols = new ArrayList(); - List edgeCols = new ArrayList(); - - boolean nodeColumn = false; - boolean edgeColumn = false; - boolean nodeSizeFac = false; - boolean edgeSizeFac = false; - boolean end = false; - while (reader.hasNext() && !end) { - int type = reader.next(); - - switch (type) { - case XMLStreamReader.START_ELEMENT: - String name = reader.getLocalName(); - if ("shownodelabels".equalsIgnoreCase(name)) { - showNodeLabels = Boolean.parseBoolean(reader.getAttributeValue(null, "enable")); - } else if ("showedgelabels".equalsIgnoreCase(name)) { - showEdgeLabels = Boolean.parseBoolean(reader.getAttributeValue(null, "enable")); - } else if ("selectedOnly".equalsIgnoreCase(name)) { - selectedOnly = Boolean.parseBoolean(reader.getAttributeValue(null, "value")); - } else if ("nodefont".equalsIgnoreCase(name)) { - String nodeFontName = reader.getAttributeValue(null, "name"); - int nodeFontSize = Integer.parseInt(reader.getAttributeValue(null, "size")); - int nodeFontStyle = Integer.parseInt(reader.getAttributeValue(null, "style")); - nodeFont = new Font(nodeFontName, nodeFontStyle, nodeFontSize); - } else if ("edgefont".equalsIgnoreCase(name)) { - String edgeFontName = reader.getAttributeValue(null, "name"); - int edgeFontSize = Integer.parseInt(reader.getAttributeValue(null, "size")); - int edgeFontStyle = Integer.parseInt(reader.getAttributeValue(null, "style")); - edgeFont = new Font(edgeFontName, edgeFontStyle, edgeFontSize); - } else if ("nodecolor".equalsIgnoreCase(name)) { - nodeColor = ColorUtils.decode(reader.getAttributeValue(null, "value")).getRGBComponents(null); - } else if ("edgecolor".equalsIgnoreCase(name)) { - edgeColor = ColorUtils.decode(reader.getAttributeValue(null, "value")).getRGBComponents(null); - } else if ("nodesizefactor".equalsIgnoreCase(name)) { - nodeSizeFac = true; - } else if ("edgesizefactor".equalsIgnoreCase(name)) { - edgeSizeFac = true; - } else if ("colormode".equalsIgnoreCase(name)) { - String colorModeClass = reader.getAttributeValue(null, "class"); - if (colorModeClass.equals("UniqueColorMode")) { - colorMode = VizController.getInstance().getTextManager().getColorModes()[0]; - } else if (colorModeClass.equals("ObjectColorMode")) { - colorMode = VizController.getInstance().getTextManager().getColorModes()[1]; - } - } else if ("sizemode".equalsIgnoreCase(name)) { - String sizeModeClass = reader.getAttributeValue(null, "class"); - if (sizeModeClass.equals("FixedSizeMode")) { - sizeMode = VizController.getInstance().getTextManager().getSizeModes()[0]; - } else if (sizeModeClass.equals("ProportionalSizeMode")) { - sizeMode = VizController.getInstance().getTextManager().getSizeModes()[2]; - } else if (sizeModeClass.equals("ScaledSizeMode")) { - sizeMode = VizController.getInstance().getTextManager().getSizeModes()[1]; - } - } else if ("nodecolumns".equalsIgnoreCase(name)) { - nodeColumn = true; - } else if ("edgecolumns".equalsIgnoreCase(name)) { - edgeColumn = true; - } else if ("column".equalsIgnoreCase(name)) { - String id = reader.getAttributeValue(null, "id"); - if (nodeColumn && attributeModel != null) { - Column col = attributeModel.getNodeTable().getColumn(id); - if (col != null) { - nodeCols.add(col); - } - } else if (edgeColumn && attributeModel != null) { - Column col = attributeModel.getEdgeTable().getColumn(id); - if (col != null) { - edgeCols.add(col); - } - } - } - - break; - case XMLStreamReader.CHARACTERS: - if (!reader.isWhiteSpace() && nodeSizeFac) { - nodeSizeFactor = Float.parseFloat(reader.getText()); - } else if (!reader.isWhiteSpace() && edgeSizeFac) { - edgeSizeFactor = Float.parseFloat(reader.getText()); - } - break; - case XMLStreamReader.END_ELEMENT: - nodeSizeFac = false; - edgeSizeFac = false; - if ("nodecolumns".equalsIgnoreCase(reader.getLocalName())) { - nodeColumn = false; - } else if ("edgecolumns".equalsIgnoreCase(reader.getLocalName())) { - edgeColumn = false; - } else if ("textmodel".equalsIgnoreCase(reader.getLocalName())) { - end = true; - } - - break; - } - } - - nodeTextColumns = nodeCols.toArray(new Column[0]); - edgeTextColumns = edgeCols.toArray(new Column[0]); - - } - - public void writeXML(XMLStreamWriter writer) throws XMLStreamException { - - writer.writeStartElement("textmodel"); - - //Show - writer.writeStartElement("shownodelabels"); - writer.writeAttribute("enable", String.valueOf(showNodeLabels)); - writer.writeEndElement(); - writer.writeStartElement("showedgelabels"); - writer.writeAttribute("enable", String.valueOf(showEdgeLabels)); - writer.writeEndElement(); - - //Selectedonly - writer.writeStartElement("selectedOnly"); - writer.writeAttribute("value", String.valueOf(selectedOnly)); - writer.writeEndElement(); - - //Font - writer.writeStartElement("nodefont"); - writer.writeAttribute("name", nodeFont.getName()); - writer.writeAttribute("size", Integer.toString(nodeFont.getSize())); - writer.writeAttribute("style", Integer.toString(nodeFont.getStyle())); - writer.writeEndElement(); - - writer.writeStartElement("edgefont"); - writer.writeAttribute("name", edgeFont.getName()); - writer.writeAttribute("size", Integer.toString(edgeFont.getSize())); - writer.writeAttribute("style", Integer.toString(edgeFont.getStyle())); - writer.writeEndElement(); - - //Size factor - writer.writeStartElement("nodesizefactor"); - writer.writeCharacters(String.valueOf(nodeSizeFactor)); - writer.writeEndElement(); - - writer.writeStartElement("edgesizefactor"); - writer.writeCharacters(String.valueOf(edgeSizeFactor)); - writer.writeEndElement(); - - //Colors - writer.writeStartElement("nodecolor"); - writer.writeAttribute("value", ColorUtils.encode(ColorUtils.decode(nodeColor))); - writer.writeEndElement(); - - writer.writeStartElement("edgecolor"); - writer.writeAttribute("value", ColorUtils.encode(ColorUtils.decode(edgeColor))); - writer.writeEndElement(); - - //Colormode - writer.writeStartElement("colormode"); - if (colorMode instanceof UniqueColorMode) { - writer.writeAttribute("class", "UniqueColorMode"); - } else if (colorMode instanceof ObjectColorMode) { - writer.writeAttribute("class", "ObjectColorMode"); - } - writer.writeEndElement(); - - //SizeMode - writer.writeStartElement("sizemode"); - if (sizeMode instanceof FixedSizeMode) { - writer.writeAttribute("class", "FixedSizeMode"); - } else if (sizeMode instanceof ProportionalSizeMode) { - writer.writeAttribute("class", "ProportionalSizeMode"); - } else if (sizeMode instanceof ScaledSizeMode) { - writer.writeAttribute("class", "ScaledSizeMode"); - } - writer.writeEndElement(); - - //NodeColumns - writer.writeStartElement("nodecolumns"); - for (Column c : nodeTextColumns) { - writer.writeStartElement("column"); - writer.writeAttribute("id", c.getId()); - writer.writeEndElement(); - } - writer.writeEndElement(); - - //EdgeColumns - writer.writeStartElement("edgecolumns"); - for (Column c : edgeTextColumns) { - writer.writeStartElement("column"); - writer.writeAttribute("id", c.getId()); - writer.writeEndElement(); - } - writer.writeEndElement(); - - writer.writeEndElement(); - } -} diff --git a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/text/UniqueColorMode.java b/modules/VisualizationImpl/src/main/java/org/gephi/visualization/text/UniqueColorMode.java deleted file mode 100644 index 1a6ecf5d35..0000000000 --- a/modules/VisualizationImpl/src/main/java/org/gephi/visualization/text/UniqueColorMode.java +++ /dev/null @@ -1,125 +0,0 @@ -/* - Copyright 2008-2010 Gephi - Authors : Mathieu Bastian - Website : http://www.gephi.org - - This file is part of Gephi. - - DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - - Copyright 2011 Gephi Consortium. All rights reserved. - - The contents of this file are subject to the terms of either the GNU - General Public License Version 3 only ("GPL") or the Common - Development and Distribution License("CDDL") (collectively, the - "License"). You may not use this file except in compliance with the - License. You can obtain a copy of the License at - http://gephi.org/about/legal/license-notice/ - or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the - specific language governing permissions and limitations under the - License. When distributing the software, include this License Header - Notice in each file and include the License files at - /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the - License Header, with the fields enclosed by brackets [] replaced by - your own identifying information: - "Portions Copyrighted [year] [name of copyright owner]" - - If you wish your version of this file to be governed by only the CDDL - or only the GPL Version 3, indicate your decision by adding - "[Contributor] elects to include this software in this distribution - under the [CDDL or GPL Version 3] license." If you do not indicate a - single choice of license, a recipient has the option to distribute - your version of this file under either the CDDL, the GPL Version 3 or - to extend the choice of license to its licensees as provided above. - However, if you add GPL Version 3 code and therefore, elected the GPL - Version 3 license, then the option applies only if the new code is - made subject to such option by the copyright holder. - - Contributor(s): - - Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.visualization.text; - -import javax.swing.ImageIcon; -import org.gephi.visualization.VizController; -import org.gephi.visualization.apiimpl.VizConfig; -import org.gephi.visualization.model.TextModel; -import org.gephi.visualization.model.edge.EdgeModel; -import org.gephi.visualization.model.node.NodeModel; -import org.gephi.visualization.text.TextManager.Renderer; - -/** - * - * @author Mathieu Bastian - */ -public class UniqueColorMode implements ColorMode { - - private VizConfig vizConfig; - private float[] color; - - public UniqueColorMode() { - this.vizConfig = VizController.getInstance().getVizConfig(); - } - - @Override - public void defaultNodeColor(Renderer renderer) { - color = VizController.getInstance().getVizModel().getTextModel().nodeColor; - renderer.setColor(color[0], color[1], color[2], color[3]); - } - - @Override - public void defaultEdgeColor(Renderer renderer) { - color = VizController.getInstance().getVizModel().getTextModel().edgeColor; - renderer.setColor(color[0], color[1], color[2], color[3]); - } - - @Override - public void textNodeColor(Renderer renderer, NodeModel nodeModel) { - textColor(renderer, nodeModel, nodeModel.isSelected() || nodeModel.isHighlight()); - } - - @Override - public void textEdgeColor(Renderer renderer, EdgeModel edgeModel) { - textColor(renderer, edgeModel, edgeModel.isSelected()); - } - - public void textColor(Renderer renderer, TextModel text, boolean selected) { - if (text.hasCustomTextColor()) { - if (vizConfig.isLightenNonSelected()) { - if (!selected) { - float lightColorFactor = 1 - vizConfig.getLightenNonSelectedFactor(); - renderer.setColor(text.getTextR(), text.getTextG(), text.getTextB(), lightColorFactor); - } else { - renderer.setColor(text.getTextR(), text.getTextG(), text.getTextB(), 1); - } - } else { - renderer.setColor(text.getTextR(), text.getTextG(), text.getTextB(), text.getTextAlpha()); - } - } else { - if (vizConfig.isLightenNonSelected()) { - if (!selected) { - float lightColorFactor = 1 - vizConfig.getLightenNonSelectedFactor(); - renderer.setColor(color[0], color[1], color[2], lightColorFactor); - } else { - renderer.setColor(color[0], color[1], color[2], 1); - } - } - } - } - - @Override - public String getName() { - return "Unique"; - } - - @Override - public ImageIcon getIcon() { - return new ImageIcon(getClass().getResource("/org/gephi/visualization/opengl/text/UniqueColorMode.png")); - } - - @Override - public String toString() { - return getName(); - } -} diff --git a/modules/VisualizationImpl/src/main/nbm/manifest.mf b/modules/VisualizationImpl/src/main/nbm/manifest.mf index bff86dde57..f401bcb576 100644 --- a/modules/VisualizationImpl/src/main/nbm/manifest.mf +++ b/modules/VisualizationImpl/src/main/nbm/manifest.mf @@ -1,7 +1,7 @@ Manifest-Version: 1.0 AutoUpdate-Essential-Module: true -OpenIDE-Module-Layer: org/gephi/visualization/layer.xml OpenIDE-Module-Localizing-Bundle: org/gephi/visualization/Bundle.properties OpenIDE-Module-Install: org/gephi/visualization/Installer.class -OpenIDE-Module-Hide-Classpath-Packages: javax.media.openGL2.**, com.sun.openGL2.**, com.sun.gluegen.runtime.** -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi UI +OpenIDE-Module-Name: Visualization Impl diff --git a/modules/VisualizationImpl/src/main/nbm/module.xml b/modules/VisualizationImpl/src/main/nbm/module.xml deleted file mode 100644 index 7dde579472..0000000000 --- a/modules/VisualizationImpl/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle.properties new file mode 100644 index 0000000000..3128c8c6d3 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle.properties @@ -0,0 +1,91 @@ +CollapsePanel.extendButton.text=More settings... +VizToolbar.Global.background = Background color (left click to switch black-white, right click to choose color) +VizToolbar.Global.groupBarTitle = Global +VizToolbar.Global.screenshot = Take screenshot +VizToolbar.Global.screenshot.configure = Configure... +VizToolbar.Nodes.groupBarTitle = Nodes +VizToolbar.Nodes.groupLabel = Nodes +VizToolbar.Nodes.showLabels = Show Node Labels +VizToolbar.Nodes.nodeScale = Node size scale +VizToolbar.NodeLabels.groupBarTitle = Node Labels +VizToolbar.Edges.showEdges = Show Edges +VizToolbar.Edges.showLabels = Show Edge Labels +VizToolbar.Edges.edgeScale = Edge weight scale +VizToolbar.Edges.colorMode = Edge color mode +VizToolbar.Edges.groupBarTitle = Edges +VizToolbar.Edges.groupLabel = Edges +VizToolbar.EdgeLabels.groupBarTitle = Edge Labels +VizToolbar.Labels.sizeMode = Size mode +VizToolbar.Labels.colorMode = Color mode +VizToolbar.Labels.attributes = Attributes +VizToolbar.Labels.fontScale = Font size scale +VizToolbar.Labels.fitToNodeSize=Fit to node size +VizToolbar.Labels.avoidOverlap=Avoid label overlap +EdgeSettingsPanel.showEdgesCheckbox.text=Show +GlobalSettingsPanel.backgroundColorButton.text= +GlobalSettingsPanel.hightlightCheckBox.text=Highlight selection +GlobalSettingsPanel.labelBackgroundColor.text=Background color: +GlobalSettingsPanel.autoSelectNeigborCheckbox.text=Autoselect neighbor +NodeSettingsPanel.showNodesCheckbox.text=Show +NodeSettingsPanel.labelScale.text=Scale +NodeLabelsSettingsPanel.fitToNodeSizeToggleButton.text= +NodeLabelsSettingsPanel.fitToNodeSizeToggleButton.toolTipText=Fit label size to node size +NodeLabelsSettingsPanel.attributesButton.text=Configure... +NodeLabelsSettingsPanel.labelNodeFont.text=Font: +NodeLabelsSettingsPanel.showLabelsCheckbox.text=Show +NodeLabelsSettingsPanel.nodeFontButton.text= +NodeLabelsSettingsPanel.labelNodeColor.text=Color: +NodeLabelsSettingsPanel.labelNodeSize.text=Size: +NodeLabelsSettingsPanel.labelNodeScale.text=Scale: +NodeLabelsSettingsPanel.hideNonSelectedCheckbox.text=Hide non-selected +NodeLabelsSettingsPanel.avoidOverlap.text=Avoid overlap +LabelAttributesPanel.title = Label text settings +LabelAttributesPanel.nodesToggleButton.text=Nodes +LabelAttributesPanel.edgesToggleButton.text=Edges +LabelAttributesPanel.labelComment.text=Select attributes to display as labels +LabelAttributesPanel.showPropertiesCheckbox.text=Show properties +EdgeSettingsPanel.selectionColorCheckbox.toolTipText=Draw particular color for selected edges (Directed graphs only) +EdgeSettingsPanel.selectionColorCheckbox.text=Selection color +EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText=Edge IN<- Color +EdgeSettingsPanel.labelScale.text=Scale +EdgeSettingsPanel.labelIn.text=In: +EdgeSettingsPanel.labelOut.text=Out: +EdgeSettingsPanel.labelBoth.text=Both: +EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText=Edge Out-> Color +EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText=Edge Both<-> Color +EdgeSettingsPanel.useEdgeWeightCheckbox.text=Use edge weight +EdgeSettingsPanel.edgeColor.text=Edge Color: +EdgeSettingsPanel.hideNonSelectedCheckbox.text=Hide non-selected +GlobalSettingsPanel.labelZoom.text=Zoom +NodeLabelColorMode.self.name=Self +NodeLabelColorMode.object.name=Node +EdgeLabelColorMode.self.name=Self +EdgeLabelColorMode.object.name=Edge +LabelSizeMode.screen.name=Fit to screen +LabelSizeMode.zoom.name=Fit to zoom +EdgeColorMode.self.name=Self +EdgeColorMode.source.name=Source +EdgeColorMode.target.name=Target +EdgeColorMode.mixed.name=Mixed +EdgeSettingsPanel.selfColorLink.text=Set +EdgeSettingsPanel.selfColorLink.toolTipText=Set self color in Appearance panel +EdgeWeightEstimator.average.name=Average +EdgeWeightEstimator.median.name=Median +EdgeWeightEstimator.min.name=Min +EdgeWeightEstimator.max.name=Max +EdgeWeightEstimator.first.name=First +EdgeWeightEstimator.last.name=Last +EdgeSettingsPanel.edgeWeightEstimatorLabel.text=Edge Weight Estimator +NodeLabelsSettingsPanel.selfColorLink.text=Set +NodeLabelsSettingsPanel.selfColorLink.toolTipText=Set self color in Appearance panel +EdgeLabelsSettingsPanel.selfColorLink.text=Set +EdgeLabelsSettingsPanel.selfColorLink.toolTipText=Set self color in Appearance panel +EdgeLabelsSettingsPanel.attributesButton.text=Configure... +EdgeLabelsSettingsPanel.showLabelsCheckbox.text=Show +EdgeLabelsSettingsPanel.hideNonSelectedCheckbox.text=Hide non-selected +EdgeLabelsSettingsPanel.labelEdgeColor.text=Color: +EdgeLabelsSettingsPanel.edgeFontButton.text= +EdgeLabelsSettingsPanel.labelEdgeScale.text=Scale: +EdgeLabelsSettingsPanel.labelEdgeSize.text=Size: +EdgeLabelsSettingsPanel.labelEdgeFont.text=Font: +EdgeSettingsPanel.rescaleEdgeWeightCheckbox.text=Rescale edge weight diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_ar.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_ca.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_ca.properties new file mode 100644 index 0000000000..54f65bd371 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_ca.properties @@ -0,0 +1,34 @@ +VizToolbar.Global.background=Color de fons (clica amb el botσ esquerre per canviar entre blanc i negre, amb el dret per triar el color) +VizToolbar.Global.groupBarTitle=Global +VizToolbar.Global.screenshot=Fes una captura de pantalla +VizToolbar.Global.screenshot.configure=Configura... +VizToolbar.Nodes.groupBarTitle=Nodes +VizToolbar.Nodes.showLabels=Mostra les etiquetes dels nodes +VizToolbar.Edges.showEdges=Mostra les arestes +VizToolbar.Edges.showLabels=Mostra les etiquetes de les arestes +VizToolbar.Edges.edgeScale=Escala del pes de les arestes +VizToolbar.Edges.groupBarTitle=Arestes +VizToolbar.Labels.sizeMode=Tipus de mida +VizToolbar.Labels.colorMode=Tipus de color +VizToolbar.Labels.attributes=Atributs +VizToolbar.Labels.fontScale=Escala de la mida de lletra +EdgeSettingsPanel.showEdgesCheckbox.text=Mostra +GlobalSettingsPanel.backgroundColorButton.text= +GlobalSettingsPanel.hightlightCheckBox.text=Destaca la selecciσ +GlobalSettingsPanel.labelBackgroundColor.text=Color de fons: +GlobalSettingsPanel.autoSelectNeigborCheckbox.text=Selecciona automΰticament el veν +LabelAttributesPanel.title=Configura el text de les etiquetes +LabelAttributesPanel.nodesToggleButton.text=Nodes +LabelAttributesPanel.edgesToggleButton.text=Arestes +LabelAttributesPanel.labelComment.text=Selecciona els atributs que s'han de mostrar com a etiquetes +LabelAttributesPanel.showPropertiesCheckbox.text=Mostra les propietats +EdgeSettingsPanel.selectionColorCheckbox.toolTipText=Pinta les arestes seleccionades d'un mateix color (nomιs pels grafs dirigits) +EdgeSettingsPanel.selectionColorCheckbox.text=Color de selecciσ +EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText=Aresta entrant <- Color +EdgeSettingsPanel.labelScale.text=Escala +EdgeSettingsPanel.labelIn.text=Entrada: +EdgeSettingsPanel.labelOut.text=Sortida: +EdgeSettingsPanel.labelBoth.text=Bidireccional +EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText=Aresta de sortida -> Color +EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText=Aresta bidireccional <-> Color +GlobalSettingsPanel.labelZoom.text=Amplia diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_cs.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_cs.properties new file mode 100644 index 0000000000..0897f55218 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_cs.properties @@ -0,0 +1,34 @@ +VizToolbar.Global.background = Barva pozadν (klikn\u011bte levύm tla\u010dνtkem pro p\u0159epnutν na \u010dernobνlou, pravύm tla\u010dνtkem pro vύb\u011br barvy) +VizToolbar.Global.groupBarTitle = Globαlnν +VizToolbar.Global.screenshot = Po\u0159νdit snνmek obrazovky +VizToolbar.Global.screenshot.configure = Nastavit... +VizToolbar.Nodes.groupBarTitle = Uzly +VizToolbar.Nodes.showLabels = Zobrazit jmenovky uzle +VizToolbar.Edges.showEdges = Zobrazit hrany +VizToolbar.Edges.showLabels = Zobrazit jmenovky hran +VizToolbar.Edges.edgeScale = Stupnice vαhy hrany +VizToolbar.Edges.groupBarTitle = Hrany +VizToolbar.Labels.sizeMode = Re\u017eim velikosti +VizToolbar.Labels.colorMode = Barevnύ re\u017eim +VizToolbar.Labels.attributes = Vlastnosti +VizToolbar.Labels.fontScale = Stupnice velikosti pνsma +EdgeSettingsPanel.showEdgesCheckbox.text=Zobrazit +GlobalSettingsPanel.backgroundColorButton.text= +GlobalSettingsPanel.hightlightCheckBox.text=Zvύraznit vύb\u011br +GlobalSettingsPanel.labelBackgroundColor.text=Barva pozadν: +GlobalSettingsPanel.autoSelectNeigborCheckbox.text=Automatickύ vύb\u011br blνzkιho +LabelAttributesPanel.title = Nastavenν textu jmenovky +LabelAttributesPanel.nodesToggleButton.text=Uzle +LabelAttributesPanel.edgesToggleButton.text=Hrany +LabelAttributesPanel.labelComment.text=Vybrat vlastnosti, kterι zobrazit jako jmenovky +LabelAttributesPanel.showPropertiesCheckbox.text=Zobrazit vlastnosti +EdgeSettingsPanel.selectionColorCheckbox.toolTipText=Vykreslit konkrιtnν barvu na zvolenι hrany (Pouze pro \u0159νzenι grafy) +EdgeSettingsPanel.selectionColorCheckbox.text=Barva vύb\u011bru +EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText=Hrana dovnit\u0159<- Barva +EdgeSettingsPanel.labelScale.text=Stupnice +EdgeSettingsPanel.labelIn.text=Dovnit\u0159: +EdgeSettingsPanel.labelOut.text=Ven: +EdgeSettingsPanel.labelBoth.text=Oba: +EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText=Hrana ven-> Barva +EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText=Hrana ob\u011b<-> Barva +GlobalSettingsPanel.labelZoom.text=P\u0159iblν\u017eenν diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_de.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_de.properties new file mode 100644 index 0000000000..f3a0402437 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_de.properties @@ -0,0 +1,34 @@ +VizToolbar.Global.background=Hintergrundfarbe (Linksklick zum Wechsel zwischen Schwarz-Weiί, Rechtsklick um Farbe auszuwδhlen) +VizToolbar.Global.groupBarTitle=Global +VizToolbar.Global.screenshot=Bildschirmfoto aufnehmen +VizToolbar.Global.screenshot.configure=Konfigurieren... +VizToolbar.Nodes.groupBarTitle=Knoten +VizToolbar.Nodes.showLabels=Knotenbeschriftung anzeigen +VizToolbar.Edges.showEdges=Kanten anzeigen +VizToolbar.Edges.showLabels=Kantenbeschriftung anzeigen +VizToolbar.Edges.edgeScale=Maίstab fόr Kantengewicht einstellen +VizToolbar.Edges.groupBarTitle=Kanten +VizToolbar.Labels.sizeMode=Grφίenmodus +VizToolbar.Labels.colorMode=Farbmodus +VizToolbar.Labels.attributes=Attribute +VizToolbar.Labels.fontScale=Schriftgrφίe einstellen +EdgeSettingsPanel.showEdgesCheckbox.text=Anzeigen +GlobalSettingsPanel.backgroundColorButton.text= +GlobalSettingsPanel.hightlightCheckBox.text=Auswahl hervorheben +GlobalSettingsPanel.labelBackgroundColor.text=Hintegrundfarbe: +GlobalSettingsPanel.autoSelectNeigborCheckbox.text=Nachbarn automatisch auswδhlen +LabelAttributesPanel.title=Einstellungen des Beschriftungstexts +LabelAttributesPanel.nodesToggleButton.text=Knoten +LabelAttributesPanel.edgesToggleButton.text=Kanten +LabelAttributesPanel.labelComment.text=Attribute auswδhlen, die als Beschriftung angezeigt werden sollen +LabelAttributesPanel.showPropertiesCheckbox.text=Eigenschaften anzeigen +EdgeSettingsPanel.selectionColorCheckbox.toolTipText=Ausgewδhlte Kanten in bestimmter Farbe darstellen (Nur fόr gerichtete Graphen) +EdgeSettingsPanel.selectionColorCheckbox.text=Farbe der Selektion +EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText=Eingangskante Farbe +EdgeSettingsPanel.labelScale.text=Maίstab +EdgeSettingsPanel.labelIn.text=Eingehend: +EdgeSettingsPanel.labelOut.text=Ausgehend: +EdgeSettingsPanel.labelBoth.text=Beide: +EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText=Ausgangskante Farbe +EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText=Kante beide<-> Farbe +GlobalSettingsPanel.labelZoom.text=Zoom diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_es.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_es.properties new file mode 100644 index 0000000000..0e390920ae --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_es.properties @@ -0,0 +1,34 @@ +VizToolbar.Global.background=Color de fondo (click izquierdo para cambiar negro-blanco, click derecho para escoger color) +VizToolbar.Global.groupBarTitle=Global +VizToolbar.Global.screenshot=Captura de pantalla +VizToolbar.Global.screenshot.configure=Configurar... +VizToolbar.Nodes.groupBarTitle=Nodos +VizToolbar.Nodes.showLabels=Mostrar etiquetas de los nodos +VizToolbar.Edges.showEdges=Mostrar aristas +VizToolbar.Edges.showLabels=Mostrar etiquetas de las aristas +VizToolbar.Edges.edgeScale=Escala del peso de las aristas +VizToolbar.Edges.groupBarTitle=Aristas +VizToolbar.Labels.sizeMode=Modo de tamaρo +VizToolbar.Labels.colorMode=Modo de color +VizToolbar.Labels.attributes=Atributos +VizToolbar.Labels.fontScale=Escala de la fuente +EdgeSettingsPanel.showEdgesCheckbox.text=Mostrar +GlobalSettingsPanel.backgroundColorButton.text= +GlobalSettingsPanel.hightlightCheckBox.text=Destacar selecciσn +GlobalSettingsPanel.labelBackgroundColor.text=Color de fondo: +GlobalSettingsPanel.autoSelectNeigborCheckbox.text=Auto-seleccionar nodos vecinos +LabelAttributesPanel.title=Configuraciσn del texto de la etiquetas +LabelAttributesPanel.nodesToggleButton.text=Nodos +LabelAttributesPanel.edgesToggleButton.text=Aristas +LabelAttributesPanel.labelComment.text=Seleccionar atributos para mostrar como etiquetas +LabelAttributesPanel.showPropertiesCheckbox.text=Mostrar propiedades +EdgeSettingsPanel.selectionColorCheckbox.toolTipText=Utilizar un color particular para las aristas selecionadas (sσlo grafos dirigidos) +EdgeSettingsPanel.selectionColorCheckbox.text=Color de selecciσn +EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText=Color de arista Entrante <- +EdgeSettingsPanel.labelScale.text=Escala +EdgeSettingsPanel.labelIn.text=Entrada: +EdgeSettingsPanel.labelOut.text=Fuera: +EdgeSettingsPanel.labelBoth.text=Bidireccional: +EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText=Color de arista Saliente -> +EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText=Color de arista Bidireccional <-> +GlobalSettingsPanel.labelZoom.text=Zoom diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_fr.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_fr.properties new file mode 100644 index 0000000000..3bd27aade5 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_fr.properties @@ -0,0 +1,88 @@ +CollapsePanel.extendButton.text=Plus d'options... +VizToolbar.Global.background=Couleur d'arriθre-plan +VizToolbar.Global.groupBarTitle=Global +VizToolbar.Global.screenshot=Capturer l'ιcran +VizToolbar.Global.screenshot.configure=Configurer... +VizToolbar.Nodes.groupBarTitle=Noeuds +VizToolbar.Nodes.showLabels=Afficher les labels des noeuds +VizToolbar.Edges.showEdges=Afficher les liens +VizToolbar.Edges.showLabels=Afficher les labels des liens +VizToolbar.Edges.edgeScale=Ιchelle du poids des liens +VizToolbar.Edges.groupBarTitle=Liens +VizToolbar.Labels.sizeMode=Mode de taille +VizToolbar.Labels.colorMode=Mode de couleur +VizToolbar.Labels.attributes=Attributs +VizToolbar.Labels.fontScale=Ιchelle de la police +EdgeSettingsPanel.showEdgesCheckbox.text=Afficher +GlobalSettingsPanel.backgroundColorButton.text= +GlobalSettingsPanel.hightlightCheckBox.text=Sιlection en surbrillance +GlobalSettingsPanel.labelBackgroundColor.text=Couleur d'arriθre-plan : +GlobalSettingsPanel.autoSelectNeigborCheckbox.text=Voisins sιlectionnιs +LabelAttributesPanel.title=Paramθtres du texte des labels +LabelAttributesPanel.nodesToggleButton.text=Noeuds +LabelAttributesPanel.edgesToggleButton.text=Liens +LabelAttributesPanel.labelComment.text=Sιlectionner les attributs ΰ afficher en tant que label +LabelAttributesPanel.showPropertiesCheckbox.text=Afficher les propriιtιs +EdgeSettingsPanel.selectionColorCheckbox.toolTipText=Utiliser des couleurs particuliθres pour les liens sιlectionnιs (graphes directionnels seulement) +EdgeSettingsPanel.selectionColorCheckbox.text=Couleur de sιlection +EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText=Couleur de lien ENTRANT<- +EdgeSettingsPanel.labelScale.text=Echelle +EdgeSettingsPanel.labelIn.text=Entrant : +EdgeSettingsPanel.labelOut.text=Sortant : +EdgeSettingsPanel.labelBoth.text=Bidirectionnel : +EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText=Couleur de lien SORTANT-> +EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText=Couleur de lien E/S<-> +GlobalSettingsPanel.labelZoom.text=Zoom +VizToolbar.Nodes.groupLabel=N\u0153uds +VizToolbar.Nodes.nodeScale=Ιchelle des noeuds +VizToolbar.NodeLabels.groupBarTitle=Labels de noeud +VizToolbar.Edges.colorMode=Couleur des liens +VizToolbar.Edges.groupLabel=Liens +VizToolbar.EdgeLabels.groupBarTitle=Labels de lien +VizToolbar.Labels.fitToNodeSize=Taille proportionnelle au noeud +VizToolbar.Labels.avoidOverlap=Ιviter le chevauchement des labels +NodeSettingsPanel.showNodesCheckbox.text=Afficher +NodeSettingsPanel.labelScale.text=Ιchelle +NodeLabelsSettingsPanel.fitToNodeSizeToggleButton.toolTipText=Taille proportionnelle au noeud +NodeLabelsSettingsPanel.attributesButton.text=Configurer... +NodeLabelsSettingsPanel.labelNodeFont.text=Police : +NodeLabelsSettingsPanel.showLabelsCheckbox.text=Afficher +NodeLabelsSettingsPanel.labelNodeColor.text=Couleur : +NodeLabelsSettingsPanel.labelNodeSize.text=Taille : +NodeLabelsSettingsPanel.labelNodeScale.text=Ιchelle : +NodeLabelsSettingsPanel.hideNonSelectedCheckbox.text=Cacher les non sιlectionnιs +NodeLabelsSettingsPanel.avoidOverlap.text=Ιviter le chevauchement +EdgeSettingsPanel.useEdgeWeightCheckbox.text=Utiliser le poids des liens +EdgeSettingsPanel.edgeColor.text=Couleur des liens : +EdgeSettingsPanel.hideNonSelectedCheckbox.text=Cacher les non sιlectionnιs +NodeLabelColorMode.self.name=Originale +NodeLabelColorMode.object.name=Noeud +EdgeLabelColorMode.self.name=Originale +EdgeLabelColorMode.object.name=Lien +LabelSizeMode.screen.name=Taille constante ΰ l'ιcran +LabelSizeMode.zoom.name=Taille changeante au zoom +EdgeColorMode.self.name=Originale +EdgeColorMode.source.name=Source +EdgeColorMode.target.name=Destination +EdgeColorMode.mixed.name=Mιlangιe +EdgeSettingsPanel.selfColorLink.text=Dιfinir +EdgeSettingsPanel.selfColorLink.toolTipText=Dιfinir la couleur dans Aspect +EdgeWeightEstimator.average.name=Moyenne +EdgeWeightEstimator.median.name=Mιdiane +EdgeWeightEstimator.min.name=Minimum +EdgeWeightEstimator.max.name=Maximum +EdgeWeightEstimator.first.name=Premier +EdgeWeightEstimator.last.name=Dernier +EdgeSettingsPanel.edgeWeightEstimatorLabel.text=Estimateur de poids dynamique +NodeLabelsSettingsPanel.selfColorLink.text=Dιfinir +NodeLabelsSettingsPanel.selfColorLink.toolTipText=Dιfinir la couleur dans Aspect +EdgeLabelsSettingsPanel.selfColorLink.text=Dιfinir +EdgeLabelsSettingsPanel.selfColorLink.toolTipText=Dιfinir la couleur dans Aspect +EdgeLabelsSettingsPanel.attributesButton.text=Configurer... +EdgeLabelsSettingsPanel.showLabelsCheckbox.text=Afficher +EdgeLabelsSettingsPanel.hideNonSelectedCheckbox.text=Cacher les non sιlectionnιs +EdgeLabelsSettingsPanel.labelEdgeColor.text=Couleur : +EdgeLabelsSettingsPanel.labelEdgeScale.text=Ιchelle : +EdgeLabelsSettingsPanel.labelEdgeSize.text=Taille : +EdgeLabelsSettingsPanel.labelEdgeFont.text=Police : +EdgeSettingsPanel.rescaleEdgeWeightCheckbox.text=Redimensionner le poids des liens diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_he.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_he.properties new file mode 100644 index 0000000000..e3b8ccdbe8 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_he.properties @@ -0,0 +1,34 @@ +VizToolbar.Global.background=Background color (left click to switch black-white, right click to choose color) +VizToolbar.Global.groupBarTitle=Global +VizToolbar.Global.screenshot=\u05dc\u05db\u05d5\u05d3 \u05d4\u05de\u05e1\u05da +VizToolbar.Global.screenshot.configure=Configure... +VizToolbar.Nodes.groupBarTitle=Nodes +VizToolbar.Nodes.showLabels=Show Node Labels +VizToolbar.Edges.showEdges=Show Edges +VizToolbar.Edges.showLabels=Show Edge Labels +VizToolbar.Edges.edgeScale=Edge weight scale +VizToolbar.Edges.groupBarTitle=Edges +VizToolbar.Labels.sizeMode=Size mode +VizToolbar.Labels.colorMode=Color mode +VizToolbar.Labels.attributes=Attributes +VizToolbar.Labels.fontScale=Font size scale +EdgeSettingsPanel.showEdgesCheckbox.text=Show +GlobalSettingsPanel.backgroundColorButton.text= +GlobalSettingsPanel.hightlightCheckBox.text=Highlight selection +GlobalSettingsPanel.labelBackgroundColor.text=Background color: +GlobalSettingsPanel.autoSelectNeigborCheckbox.text=Autoselect neighbor +LabelAttributesPanel.title=Label text settings +LabelAttributesPanel.nodesToggleButton.text=Nodes +LabelAttributesPanel.edgesToggleButton.text=Edges +LabelAttributesPanel.labelComment.text=Select attributes to display as labels +LabelAttributesPanel.showPropertiesCheckbox.text=Show properties +EdgeSettingsPanel.selectionColorCheckbox.toolTipText=Draw particular color for selected edges (Directed graphs only) +EdgeSettingsPanel.selectionColorCheckbox.text=Selection color +EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText=Edge IN<- Color +EdgeSettingsPanel.labelScale.text=Scale +EdgeSettingsPanel.labelIn.text=In: +EdgeSettingsPanel.labelOut.text=Out: +EdgeSettingsPanel.labelBoth.text=Both: +EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText=Edge Out-> Color +EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText=Edge Both<-> Color +GlobalSettingsPanel.labelZoom.text=Zoom diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_hu.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_hu.properties new file mode 100644 index 0000000000..fb4d372f67 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_hu.properties @@ -0,0 +1,34 @@ +CollapsePanel.extendButton.text=Tov\u00E1bbi be\u00E1ll\u00EDt\u00E1sok... +LabelAttributesPanel.title=C\u00EDmkesz\u00F6veg be\u00E1ll\u00EDt\u00E1sai +EdgeSettingsPanel.labelOut.text=Ki: +LabelAttributesPanel.nodesToggleButton.text=Csom\u00F3pontok +EdgeSettingsPanel.labelIn.text=In: +VizToolbar.Edges.showEdges=\u00C9lek megjelen\u00EDt\u00E9se +VizToolbar.Global.screenshot.configure=Konfigur\u00E1ci\u00F3... +VizToolbar.Labels.sizeMode=M\u00E9ret m\u00F3d +VizToolbar.Edges.groupBarTitle=\u00C9lek +LabelAttributesPanel.edgesToggleButton.text=\u00C9lek +VizToolbar.Labels.fontScale=Bet\u0171m\u00E9ret sk\u00E1la +GlobalSettingsPanel.labelZoom.text=Zoomol\u00E1s +EdgeSettingsPanel.selectionColorCheckbox.toolTipText=Rajzoljon adott sz\u00EDnt a kijel\u00F6lt \u00E9lekhez (csak ir\u00E1ny\u00EDtott grafikonok) +VizToolbar.Labels.attributes=Attrib\u00FAtumok +GlobalSettingsPanel.autoSelectNeigborCheckbox.text=Szomsz\u00E9d automatikus kiv\u00E1laszt\u00E1sa +VizToolbar.Global.background=H\u00E1tt\u00E9rsz\u00EDn (bal klikk a fekete-feh\u00E9r v\u00E1lt\u00E1shoz, jobb klikk a sz\u00EDn kiv\u00E1laszt\u00E1s\u00E1hoz) +VizToolbar.Edges.edgeScale=\u00C9ls\u00FAly sk\u00E1la +VizToolbar.Global.screenshot=K\u00E9sz\u00EDtsen k\u00E9perny\u0151k\u00E9pet +EdgeSettingsPanel.showEdgesCheckbox.text=Bemutat\u00F3 +GlobalSettingsPanel.labelBackgroundColor.text=H\u00E1tt\u00E9r sz\u00EDne: +LabelAttributesPanel.showPropertiesCheckbox.text=Tulajdons\u00E1gok megjelen\u00EDt\u00E9se +EdgeSettingsPanel.labelBoth.text=Mindkett\u0151: +EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText=\u00C9l Out-> Sz\u00EDn +GlobalSettingsPanel.hightlightCheckBox.text=Jel\u00F6lje ki a kiv\u00E1laszt\u00E1st +VizToolbar.Labels.colorMode=Sz\u00EDnes m\u00F3d +VizToolbar.Edges.showLabels=\u00C9lc\u00EDmk\u00E9k megjelen\u00EDt\u00E9se +EdgeSettingsPanel.labelScale.text=Sk\u00E1la +LabelAttributesPanel.labelComment.text=V\u00E1lassza ki a c\u00EDmkek\u00E9nt megjelen\u00EDtend\u0151 attrib\u00FAtumokat +EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText=\u00C9l IN<- Sz\u00EDn +VizToolbar.Nodes.showLabels=Csom\u00F3pontc\u00EDmk\u00E9k megjelen\u00EDt\u00E9se +VizToolbar.Nodes.groupBarTitle=Csom\u00F3pontok +VizToolbar.Global.groupBarTitle=Glob\u00E1lis +EdgeSettingsPanel.selectionColorCheckbox.text=Kiv\u00E1laszt\u00E1s sz\u00EDne +EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText=Mindkett\u0151 sz\u00E9le<-> Sz\u00EDn diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_it.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_it.properties new file mode 100644 index 0000000000..e5594fd0fe --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_it.properties @@ -0,0 +1,36 @@ +VizToolbar.Global.background=Background color (left click to switch black-white, right click to choose color) +VizToolbar.Global.groupBarTitle=Global +VizToolbar.Global.screenshot=Take screenshot +VizToolbar.Global.screenshot.configure=Configure... +VizToolbar.Nodes.groupBarTitle=Nodi +VizToolbar.Nodes.showLabels=Show Node Labels +VizToolbar.Edges.showEdges=Show Edges +VizToolbar.Edges.showLabels=Show Edge Labels +VizToolbar.Edges.edgeScale=Edge weight scale +VizToolbar.Edges.groupBarTitle=Archi +VizToolbar.Labels.sizeMode=Size mode +VizToolbar.Labels.colorMode=Color mode +VizToolbar.Labels.attributes=Attributes +VizToolbar.Labels.fontScale=Font size scale +EdgeSettingsPanel.showEdgesCheckbox.text=Show +GlobalSettingsPanel.backgroundColorButton.text= +GlobalSettingsPanel.hightlightCheckBox.text=Highlight selection +GlobalSettingsPanel.labelBackgroundColor.text=Background color: +GlobalSettingsPanel.autoSelectNeigborCheckbox.text=Autoselect neighbor +LabelAttributesPanel.title=Label text settings +LabelAttributesPanel.nodesToggleButton.text=Nodi +LabelAttributesPanel.edgesToggleButton.text=Archi +LabelAttributesPanel.labelComment.text=Select attributes to display as labels +LabelAttributesPanel.showPropertiesCheckbox.text=Show properties +EdgeSettingsPanel.selectionColorCheckbox.toolTipText=Draw particular color for selected edges (Directed graphs only) +EdgeSettingsPanel.selectionColorCheckbox.text=Selection color +EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText=Edge IN<- Color +EdgeSettingsPanel.labelScale.text=Scale +EdgeSettingsPanel.labelIn.text=In: +EdgeSettingsPanel.labelOut.text=Out: +EdgeSettingsPanel.labelBoth.text=Both: +EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText=Edge Out-> Color +EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText=Edge Both<-> Color +GlobalSettingsPanel.labelZoom.text=Zoom +CollapsePanel.extendButton.text=Ulteriori impostazioni... +VizToolbar.Nodes.groupLabel=Nodi diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_ja.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_ja.properties new file mode 100644 index 0000000000..dc548c22cf --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_ja.properties @@ -0,0 +1,34 @@ +VizToolbar.Global.background = \u80cc\u666f\u8272 +VizToolbar.Global.groupBarTitle = Global +VizToolbar.Global.screenshot = \u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u64ae\u5f71 +VizToolbar.Global.screenshot.configure = \u8a2d\u5b9a... +VizToolbar.Nodes.groupBarTitle = \u30ce\u30fc\u30c9 +VizToolbar.Nodes.showLabels = \u30ce\u30fc\u30c9\u30e9\u30d9\u30eb\u3092\u8868\u793a +VizToolbar.Edges.showEdges = \u8fba\u3092\u8868\u793a +VizToolbar.Edges.showLabels = \u8fba\u30e9\u30d9\u30eb\u3092\u8868\u793a +VizToolbar.Edges.edgeScale = \u8fba\u306e\u91cd\u307f\u306e\u30b9\u30b1\u30fc\u30eb +VizToolbar.Edges.groupBarTitle = \u8fba +VizToolbar.Labels.sizeMode = \u30b5\u30a4\u30ba\u30fb\u30e2\u30fc\u30c9 +VizToolbar.Labels.colorMode = \u30ab\u30e9\u30fc\u30fb\u30e2\u30fc\u30c9 +VizToolbar.Labels.attributes = \u5c5e\u6027 +VizToolbar.Labels.fontScale = \u30d5\u30a9\u30f3\u30c8\u30b5\u30a4\u30ba\u30b9\u30b1\u30fc\u30eb +EdgeSettingsPanel.showEdgesCheckbox.text=\u8868\u793a +GlobalSettingsPanel.backgroundColorButton.text= +GlobalSettingsPanel.hightlightCheckBox.text=\u9078\u629e\u3092\u5f37\u8abf +GlobalSettingsPanel.labelBackgroundColor.text=\u80cc\u666f\u8272: +GlobalSettingsPanel.autoSelectNeigborCheckbox.text=\u96a3\u63a5\u3092\u81ea\u52d5\u9078\u629e +LabelAttributesPanel.title = \u30e9\u30d9\u30eb\u306e\u30c6\u30ad\u30b9\u30c8\u306e\u8a2d\u5b9a +LabelAttributesPanel.nodesToggleButton.text=\u30ce\u30fc\u30c9 +LabelAttributesPanel.edgesToggleButton.text=\u8fba +LabelAttributesPanel.labelComment.text=\u30e9\u30d9\u30eb\u3068\u3057\u3066\u8868\u793a\u3059\u308b\u5c5e\u6027\u3092\u9078\u629e\u3057\u307e\u3059\u3002 +LabelAttributesPanel.showPropertiesCheckbox.text=\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u8868\u793a +EdgeSettingsPanel.selectionColorCheckbox.toolTipText=Draw particular color for selected edges (Directed graphs only) +EdgeSettingsPanel.selectionColorCheckbox.text=\u9078\u629e\u8272 +EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText=\u6d41\u5165\u8fba<-\u8272 +EdgeSettingsPanel.labelScale.text=\u30b9\u30b1\u30fc\u30eb +EdgeSettingsPanel.labelIn.text=\u30a4\u30f3: +EdgeSettingsPanel.labelOut.text=\u30a2\u30a6\u30c8: +EdgeSettingsPanel.labelBoth.text=\u53cc\u65b9\u5411: +EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText=\u6d41\u51fa\u8fba->\u8272 +EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText=\u53cc\u65b9\u5411\u8fba<->\u8272 +GlobalSettingsPanel.labelZoom.text=\u62e1\u5927 diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_ko.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_ko.properties new file mode 100644 index 0000000000..acf6ae2fe3 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_ko.properties @@ -0,0 +1,34 @@ +CollapsePanel.extendButton.text=\uCD94\uAC00 \uC124\uC815... +LabelAttributesPanel.title=\uB77C\uBCA8 \uD14D\uC2A4\uD2B8 \uC124\uC815 +EdgeSettingsPanel.labelOut.text=\uC9C4\uCD9C: +LabelAttributesPanel.nodesToggleButton.text=\uB178\uB4DC +EdgeSettingsPanel.labelIn.text=\uC9C4\uC785: +VizToolbar.Edges.showEdges=\uC5E3\uC9C0 \uD45C\uC2DC +VizToolbar.Global.screenshot.configure=\uAD6C\uC131\uD558\uAE30... +VizToolbar.Labels.sizeMode=\uD06C\uAE30 \uBAA8\uB4DC +VizToolbar.Edges.groupBarTitle=\uC5E3\uC9C0 +LabelAttributesPanel.edgesToggleButton.text=\uC5E3\uC9C0 +VizToolbar.Labels.fontScale=\uAE00\uAF34 \uD06C\uAE30 \uC870\uC808 +GlobalSettingsPanel.labelZoom.text=\uD655\uB300 \uCD95\uC18C +EdgeSettingsPanel.selectionColorCheckbox.toolTipText=\uC120\uD0DD\uB41C \uC5E3\uC9C0\uC5D0 \uB300\uD574 \uD2B9\uC815 \uC0C9\uC0C1 \uADF8\uB9AC\uAE30 (\uBC29\uD5A5\uC131 \uADF8\uB798\uD504\uB9CC) +VizToolbar.Labels.attributes=\uC18D\uC131 +GlobalSettingsPanel.autoSelectNeigborCheckbox.text=\uC774\uC6C3 \uC790\uB3D9 \uC120\uD0DD +VizToolbar.Global.background=\uBC30\uACBD \uC0C9\uC0C1 (\uC67C\uCABD \uD074\uB9AD\uC73C\uB85C \uD751\uBC31 \uC804\uD658, \uC624\uB978\uCABD \uD074\uB9AD\uC73C\uB85C \uC0C9\uC0C1 \uC120\uD0DD) +VizToolbar.Edges.edgeScale=\uC5E3\uC9C0 \uAC00\uC911\uCE58 \uC870\uC808 +VizToolbar.Global.screenshot=\uC2A4\uD06C\uB9B0\uC0F7 \uCC0D\uAE30 +EdgeSettingsPanel.showEdgesCheckbox.text=\uD45C\uC2DC +GlobalSettingsPanel.labelBackgroundColor.text=\uBC30\uACBD \uC0C9\uC0C1: +LabelAttributesPanel.showPropertiesCheckbox.text=\uC18D\uC131 \uD45C\uC2DC +EdgeSettingsPanel.labelBoth.text=\uC591\uBC29\uD5A5: +EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText=\uC9C4\uCD9C \uC5E3\uC9C0 \uC0C9\uC0C1 +GlobalSettingsPanel.hightlightCheckBox.text=\uC120\uD0DD \uAC15\uC870 +VizToolbar.Labels.colorMode=\uC0C9\uC0C1 \uBAA8\uB4DC +VizToolbar.Edges.showLabels=\uC5E3\uC9C0 \uB77C\uBCA8 \uD45C\uC2DC +EdgeSettingsPanel.labelScale.text=\uD06C\uAE30 \uC870\uC808 +LabelAttributesPanel.labelComment.text=\uB77C\uBCA8\uC5D0 \uD45C\uC2DC\uD560 \uC18D\uC131 \uC120\uD0DD +EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText=\uC9C4\uC785 \uC5E3\uC9C0 \uC0C9\uC0C1 +VizToolbar.Nodes.showLabels=\uB178\uB4DC \uB77C\uBCA8 \uD45C\uC2DC +VizToolbar.Nodes.groupBarTitle=\uB178\uB4DC +VizToolbar.Global.groupBarTitle=\uC804\uC5ED\uC801 +EdgeSettingsPanel.selectionColorCheckbox.text=\uC120\uD0DD \uD56D\uBAA9 \uC0C9\uC0C1 +EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText=\uC591\uBC29\uD5A5 \uC5E3\uC9C0 \uC0C9\uC0C1 diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_nl.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_nl.properties new file mode 100644 index 0000000000..400110eebb --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_nl.properties @@ -0,0 +1,34 @@ +VizToolbar.Global.background=Background color (left click to switch black-white, right click to choose color) +VizToolbar.Global.groupBarTitle=Global +VizToolbar.Global.screenshot=Screenshot maken +VizToolbar.Global.screenshot.configure=Configureren... +VizToolbar.Nodes.groupBarTitle=Knopen +VizToolbar.Nodes.showLabels=Knooplabels tonen +VizToolbar.Edges.showEdges=Show Edges +VizToolbar.Edges.showLabels=Show Edge Labels +VizToolbar.Edges.edgeScale=Edge weight scale +VizToolbar.Edges.groupBarTitle=Verbindingen +VizToolbar.Labels.sizeMode=Size mode +VizToolbar.Labels.colorMode=Color mode +VizToolbar.Labels.attributes=Attributes +VizToolbar.Labels.fontScale=Font size scale +EdgeSettingsPanel.showEdgesCheckbox.text=Show +GlobalSettingsPanel.backgroundColorButton.text= +GlobalSettingsPanel.hightlightCheckBox.text=Highlight selection +GlobalSettingsPanel.labelBackgroundColor.text=Background color: +GlobalSettingsPanel.autoSelectNeigborCheckbox.text=Autoselect neighbor +LabelAttributesPanel.title=Label text settings +LabelAttributesPanel.nodesToggleButton.text=Knopen +LabelAttributesPanel.edgesToggleButton.text=Verbindingen +LabelAttributesPanel.labelComment.text=Select attributes to display as labels +LabelAttributesPanel.showPropertiesCheckbox.text=Show properties +EdgeSettingsPanel.selectionColorCheckbox.toolTipText=Draw particular color for selected edges (Directed graphs only) +EdgeSettingsPanel.selectionColorCheckbox.text=Selection color +EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText=Edge IN<- Color +EdgeSettingsPanel.labelScale.text=Scale +EdgeSettingsPanel.labelIn.text=In: +EdgeSettingsPanel.labelOut.text=Out: +EdgeSettingsPanel.labelBoth.text=Both: +EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText=Edge Out-> Color +EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText=Edge Both<-> Color +GlobalSettingsPanel.labelZoom.text=Zoom \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_pt.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_pt.properties new file mode 100644 index 0000000000..fe2ae3ef2c --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_pt.properties @@ -0,0 +1,33 @@ +VizToolbar.Global.background=Cor de fundo (clique com o botγo esquerdo para alternar entre branco e preto e com o botγo direito para escolher a cor) +VizToolbar.Global.groupBarTitle=Global +VizToolbar.Global.screenshot=Capturar ecrγ +VizToolbar.Global.screenshot.configure=Configurar... +VizToolbar.Nodes.groupBarTitle=Nσs +VizToolbar.Nodes.showLabels=Mostrar rσtulos dos nσs +VizToolbar.Edges.showEdges=Exibir arestas +VizToolbar.Edges.showLabels=Exibir rσtulos de arestas +VizToolbar.Edges.edgeScale=Escala de peso de arestas +VizToolbar.Edges.groupBarTitle=Arestas +VizToolbar.Labels.sizeMode=Modo de tamanho +VizToolbar.Labels.colorMode=Modo de cor +VizToolbar.Labels.attributes=Atributos +VizToolbar.Labels.fontScale=Escala de tamanho da fonte +EdgeSettingsPanel.showEdgesCheckbox.text=Exibir +GlobalSettingsPanel.hightlightCheckBox.text=Destacar seleηγo +GlobalSettingsPanel.labelBackgroundColor.text=Cor de fundo: +GlobalSettingsPanel.autoSelectNeigborCheckbox.text=Auto-selecionar vizinho +LabelAttributesPanel.title=Configuraηυes do texto do rσtulo +LabelAttributesPanel.nodesToggleButton.text=Nσs +LabelAttributesPanel.edgesToggleButton.text=Arestas +LabelAttributesPanel.labelComment.text=Selecione os atributos para exibir como rσtulos +LabelAttributesPanel.showPropertiesCheckbox.text=Exibir propriedades +EdgeSettingsPanel.selectionColorCheckbox.toolTipText=Usar cor determinada para as arestas selecionadas (Somente grafos direcionados) +EdgeSettingsPanel.selectionColorCheckbox.text=Colorir seleηγo +EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText=Cor da aresta de entrada <- +EdgeSettingsPanel.labelScale.text=Escala +EdgeSettingsPanel.labelIn.text=Entrada: +EdgeSettingsPanel.labelOut.text=Saνda: +EdgeSettingsPanel.labelBoth.text=Ambos: +EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText=Cor da aresta de saνda -> +EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText=Cor da aresta bidirecional <-> +GlobalSettingsPanel.labelZoom.text=Zoom diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_pt_BR.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_pt_BR.properties new file mode 100644 index 0000000000..89a65ae3f4 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_pt_BR.properties @@ -0,0 +1,34 @@ +VizToolbar.Global.background = Cor de fundo (clique com o botγo esquerdo para alternar entre branco e preto e com o botγo direito para escolher a cor) +VizToolbar.Global.groupBarTitle = Global +VizToolbar.Global.screenshot = Capturar tela +VizToolbar.Global.screenshot.configure = Configurar... +VizToolbar.Nodes.groupBarTitle = Nσs +VizToolbar.Nodes.showLabels = Mostrar rσtulos dos nσs +VizToolbar.Edges.showEdges = Exibir arestas +VizToolbar.Edges.showLabels = Exibir rσtulos de arestas +VizToolbar.Edges.edgeScale = Escala de peso de arestas +VizToolbar.Edges.groupBarTitle = Arestas +VizToolbar.Labels.sizeMode = Modo de tamanho +VizToolbar.Labels.colorMode = Modo de cor +VizToolbar.Labels.attributes = Atributos +VizToolbar.Labels.fontScale = Escala de tamanho da fonte +EdgeSettingsPanel.showEdgesCheckbox.text=Exibir +GlobalSettingsPanel.backgroundColorButton.text= +GlobalSettingsPanel.hightlightCheckBox.text=Destacar seleηγo +GlobalSettingsPanel.labelBackgroundColor.text=Cor de fundo: +GlobalSettingsPanel.autoSelectNeigborCheckbox.text=Auto-selecionar vizinho +LabelAttributesPanel.title = Configuraηυes do texto do rσtulo +LabelAttributesPanel.nodesToggleButton.text=Nσs +LabelAttributesPanel.edgesToggleButton.text=Arestas +LabelAttributesPanel.labelComment.text=Selecione os atributos para exibir como rσtulos +LabelAttributesPanel.showPropertiesCheckbox.text=Exibir propriedades +EdgeSettingsPanel.selectionColorCheckbox.toolTipText=Usar cor determinada para as arestas selecionadas (Somente grafos direcionados) +EdgeSettingsPanel.selectionColorCheckbox.text=Colorir seleηγo +EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText=Cor da aresta de entrada <- +EdgeSettingsPanel.labelScale.text=Escala +EdgeSettingsPanel.labelIn.text=Entrada: +EdgeSettingsPanel.labelOut.text=Saνda: +EdgeSettingsPanel.labelBoth.text=Ambos: +EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText=Cor da aresta de saνda -> +EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText=Cor da aresta bidirecional <-> +GlobalSettingsPanel.labelZoom.text=Zoom diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_ro.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_ro.properties new file mode 100644 index 0000000000..97d1277bab --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_ro.properties @@ -0,0 +1,34 @@ +CollapsePanel.extendButton.text=Mai multe set\u0103ri... +VizToolbar.Global.background=Culoare de fundal (click st\u00E2nga pentru comutare alb-negru, click dreapta pentru alegerea culorii) +VizToolbar.Global.groupBarTitle=Global +VizToolbar.Edges.showEdges=Afi\u0219eaz\u0103 muchiile +VizToolbar.Edges.showLabels=Afi\u0219eaz\u0103 etichetele muchiilor +VizToolbar.Edges.edgeScale=Scara ponderilor muchiilor +VizToolbar.Edges.groupBarTitle=Muchii +VizToolbar.Labels.colorMode=Mod de culoare +VizToolbar.Labels.attributes=Atribute +VizToolbar.Labels.fontScale=Scara dimensiunii fontului +EdgeSettingsPanel.showEdgesCheckbox.text=Afi\u0219eaz\u0103 +GlobalSettingsPanel.hightlightCheckBox.text=Eviden\u021Biaz\u0103 selec\u021Bia +GlobalSettingsPanel.labelBackgroundColor.text=Culoare de fundal: +GlobalSettingsPanel.autoSelectNeigborCheckbox.text=Selecteaz\u0103 automat vecinul +LabelAttributesPanel.title=Set\u0103ri text etichete +LabelAttributesPanel.edgesToggleButton.text=Muchii +LabelAttributesPanel.labelComment.text=Selecteaz\u0103 atributele de afi\u0219at ca etichet\u0103 +EdgeSettingsPanel.selectionColorCheckbox.toolTipText=Folose\u0219te o anumit\u0103 culoare pentru muchiile selectate (Numai pentru grafuri orientate) +EdgeSettingsPanel.selectionColorCheckbox.text=Culoarea selec\u021Biei +EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText=Muchie Interioar\u0103<- Culoare +EdgeSettingsPanel.labelScale.text=Scar\u0103 +EdgeSettingsPanel.labelIn.text=Interior: +EdgeSettingsPanel.labelOut.text=Exterior: +EdgeSettingsPanel.labelBoth.text=Ambele: +EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText=Muchie Exterioar\u0103-> Culoare +EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText=Muchie Bidirectionala<-> Culoare +GlobalSettingsPanel.labelZoom.text=Zoom +VizToolbar.Global.screenshot=Captur\u0103 de ecran +VizToolbar.Nodes.groupBarTitle=Noduri +VizToolbar.Global.screenshot.configure=Configureaz\u0103... +VizToolbar.Nodes.showLabels=Afi\u0219eaz\u0103 etichetele nodurilor +VizToolbar.Labels.sizeMode=Mod de dimensiune +LabelAttributesPanel.showPropertiesCheckbox.text=Afi\u0219eaz\u0103 propriet\u0103\u021Bile +LabelAttributesPanel.nodesToggleButton.text=Noduri \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_ru.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_ru.properties new file mode 100644 index 0000000000..f546f309b9 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_ru.properties @@ -0,0 +1,34 @@ +VizToolbar.Global.background = \u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430 +VizToolbar.Global.groupBarTitle = Global +VizToolbar.Global.screenshot = \u0421\u043a\u0440\u0438\u043d\u0448\u043e\u0442 +VizToolbar.Global.screenshot.configure = \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430... +VizToolbar.Nodes.groupBarTitle = \u0423\u0437\u043b\u044b +VizToolbar.Nodes.showLabels = \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u0443\u0437\u043b\u043e\u0432 +VizToolbar.Edges.showEdges = \u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0440\u0451\u0431\u0440\u0430 +VizToolbar.Edges.showLabels = \u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u0440\u0451\u0431\u0435\u0440 +VizToolbar.Edges.edgeScale = \u041c\u0430\u0441\u0448\u0442\u0430\u0431 \u0432\u0435\u0441\u043e\u0432 \u0440\u0451\u0431\u0435\u0440 +VizToolbar.Edges.groupBarTitle = \u0420\u0451\u0431\u0440\u0430 +VizToolbar.Labels.sizeMode = \u0420\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430 +VizToolbar.Labels.colorMode = \u0426\u0432\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0430 +VizToolbar.Labels.attributes = \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b +VizToolbar.Labels.fontScale = \u041c\u0430\u0441\u0448\u0442\u0430\u0431 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0448\u0440\u0438\u0444\u0442\u0430 +EdgeSettingsPanel.showEdgesCheckbox.text=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c +GlobalSettingsPanel.backgroundColorButton.text= +GlobalSettingsPanel.hightlightCheckBox.text=\u041f\u043e\u0434\u0441\u0432\u0435\u0442\u0438\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0435 +GlobalSettingsPanel.labelBackgroundColor.text=\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430: +GlobalSettingsPanel.autoSelectNeigborCheckbox.text=\u0410\u0432\u0442\u043e\u0432\u044b\u0431\u043e\u0440 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 +LabelAttributesPanel.title = \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0430 +LabelAttributesPanel.nodesToggleButton.text=\u0423\u0437\u043b\u044b +LabelAttributesPanel.edgesToggleButton.text=\u0420\u0451\u0431\u0440\u0430 +LabelAttributesPanel.labelComment.text=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u043c\u0451\u043d \u0432\u0435\u0440\u0448\u0438\u043d +LabelAttributesPanel.showPropertiesCheckbox.text=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 +EdgeSettingsPanel.selectionColorCheckbox.toolTipText=Draw particular color for selected edges (Directed graphs only) +EdgeSettingsPanel.selectionColorCheckbox.text=\u0426\u0432\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f +EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText=\u0426\u0432\u0435\u0442 \u0432\u0445\u043e\u0434. \u0440\u0451\u0431\u0435\u0440 +EdgeSettingsPanel.labelScale.text=\u041c\u0430\u0441\u0448\u0442\u0430\u0431 +EdgeSettingsPanel.labelIn.text=\u0412\u0445\u043e\u0434.: +EdgeSettingsPanel.labelOut.text=\u0418\u0441\u0445\u043e\u0434.: +EdgeSettingsPanel.labelBoth.text=\u0421\u043c\u0435\u0448.: +EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText=\u0426\u0432\u0435\u0442 \u0438\u0441\u0445\u043e\u0434. \u0440\u0451\u0431\u0435\u0440 +EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText=\u0426\u0432\u0435\u0442 \u0441\u043c\u0435\u0448\u0430\u043d\u043d\u044b\u0445 \u0440\u0451\u0431\u0435\u0440 +GlobalSettingsPanel.labelZoom.text=\u041f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_th.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_tr.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_tr.properties new file mode 100644 index 0000000000..6e4c7394c6 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_tr.properties @@ -0,0 +1,34 @@ +VizToolbar.Global.background=Background color (left click to switch black-white, right click to choose color) +VizToolbar.Global.groupBarTitle=Global +VizToolbar.Global.screenshot=Take screenshot +VizToolbar.Global.screenshot.configure=Configure... +VizToolbar.Nodes.groupBarTitle=Nodes +VizToolbar.Nodes.showLabels=Show Node Labels +VizToolbar.Edges.showEdges=Show Edges +VizToolbar.Edges.showLabels=Show Edge Labels +VizToolbar.Edges.edgeScale=Edge weight scale +VizToolbar.Edges.groupBarTitle=Edges +VizToolbar.Labels.sizeMode=Size mode +VizToolbar.Labels.colorMode=Color mode +VizToolbar.Labels.attributes=Attributes +VizToolbar.Labels.fontScale=Font size scale +EdgeSettingsPanel.showEdgesCheckbox.text=Show +GlobalSettingsPanel.backgroundColorButton.text= +GlobalSettingsPanel.hightlightCheckBox.text=Highlight selection +GlobalSettingsPanel.labelBackgroundColor.text=Background color: +GlobalSettingsPanel.autoSelectNeigborCheckbox.text=Autoselect neighbor +LabelAttributesPanel.title=Label text settings +LabelAttributesPanel.nodesToggleButton.text=Nodes +LabelAttributesPanel.edgesToggleButton.text=Edges +LabelAttributesPanel.labelComment.text=Select attributes to display as labels +LabelAttributesPanel.showPropertiesCheckbox.text=Show properties +EdgeSettingsPanel.selectionColorCheckbox.toolTipText=Draw particular color for selected edges (Directed graphs only) +EdgeSettingsPanel.selectionColorCheckbox.text=Selection color +EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText=Edge IN<- Color +EdgeSettingsPanel.labelScale.text=Scale +EdgeSettingsPanel.labelIn.text=In: +EdgeSettingsPanel.labelOut.text=Out: +EdgeSettingsPanel.labelBoth.text=Both: +EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText=Edge Out-> Color +EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText=Edge Both<-> Color +GlobalSettingsPanel.labelZoom.text=Zoom diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_zh_CN.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_zh_CN.properties new file mode 100644 index 0000000000..39a7378224 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_zh_CN.properties @@ -0,0 +1,35 @@ +CollapsePanel.extendButton.text=\u66F4\u591A\u8BBE\u7F6E... +VizToolbar.Global.background=\u80cc\u666f\u989c\u8272 +VizToolbar.Global.groupBarTitle=\u5168\u5c40 +VizToolbar.Global.screenshot=\u622a\u5c4f +VizToolbar.Global.screenshot.configure=\u914d\u7f6e... +VizToolbar.Nodes.groupBarTitle=\u8282\u70b9 +VizToolbar.Nodes.showLabels=\u663e\u793a\u8282\u70b9\u6807\u7b7e +VizToolbar.Edges.showEdges=\u663e\u793a\u8fb9 +VizToolbar.Edges.showLabels=\u663e\u793a\u8fb9\u6807\u7b7e +VizToolbar.Edges.edgeScale=\u8fb9\u7684\u6743\u91cd\u5c3a\u5ea6 +VizToolbar.Edges.groupBarTitle=\u8fb9 +VizToolbar.Labels.sizeMode=\u5927\u5c0f\u6a21\u5f0f +VizToolbar.Labels.colorMode=\u989c\u8272\u6a21\u5f0f +VizToolbar.Labels.attributes=\u5c5e\u6027 +VizToolbar.Labels.fontScale=\u5B57\u4F53\u5927\u5C0F\u5C3A\u5BF8 +EdgeSettingsPanel.showEdgesCheckbox.text=\u663e\u793a +GlobalSettingsPanel.backgroundColorButton.text= +GlobalSettingsPanel.hightlightCheckBox.text=\u9ad8\u4eae\u9009\u62e9 +GlobalSettingsPanel.labelBackgroundColor.text=\u80cc\u666f\u989c\u8272\uff1a +GlobalSettingsPanel.autoSelectNeigborCheckbox.text=\u81ea\u52a8\u9009\u62e9\u90bb\u5c45 +LabelAttributesPanel.title=\u91cd\u8bbe\u6587\u672c\u8bbe\u5b9a +LabelAttributesPanel.nodesToggleButton.text=\u8282\u70b9 +LabelAttributesPanel.edgesToggleButton.text=\u8fb9 +LabelAttributesPanel.labelComment.text=\u9009\u62e9\u663e\u793a\u4e3a\u6807\u7b7e\u7684\u5c5e\u6027 +LabelAttributesPanel.showPropertiesCheckbox.text=\u663e\u793a\u5c5e\u6027 +EdgeSettingsPanel.selectionColorCheckbox.toolTipText=\u7ed8\u5236\u7279\u5b9a\u7684\u989c\u8272\u7ed9\u9009\u5b9a\u7684\u8fb9\uff08\u4ec5\u6709\u5411\u56fe\uff09 +EdgeSettingsPanel.selectionColorCheckbox.text=\u9009\u62e9\u989c\u8272 +EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText=\u8fb9 IN<- \u989c\u8272 +EdgeSettingsPanel.labelScale.text=\u5c3a\u5ea6 +EdgeSettingsPanel.labelIn.text=\u5165: +EdgeSettingsPanel.labelOut.text=\u51fa: +EdgeSettingsPanel.labelBoth.text=\u53cc\u5411\uff1a +EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText=\u51fa\u8fb9->\u989c\u8272 +EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText=\u53cc\u5411\u8fb9<->\u989c\u8272 +GlobalSettingsPanel.labelZoom.text=\u7f29\u653e \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_zh_TW.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_zh_TW.properties new file mode 100644 index 0000000000..5d1ab9ce4e --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/collapse/Bundle_zh_TW.properties @@ -0,0 +1,34 @@ +VizToolbar.Global.background=Background color (left click to switch black-white, right click to choose color) +VizToolbar.Global.groupBarTitle=Global +VizToolbar.Global.screenshot=Take screenshot +VizToolbar.Global.screenshot.configure=Configure... +VizToolbar.Nodes.groupBarTitle=\u7bc0\u9ede +VizToolbar.Nodes.showLabels=Show Node Labels +VizToolbar.Edges.showEdges=Show Edges +VizToolbar.Edges.showLabels=Show Edge Labels +VizToolbar.Edges.edgeScale=Edge weight scale +VizToolbar.Edges.groupBarTitle=\u9023\u7d50 +VizToolbar.Labels.sizeMode=Size mode +VizToolbar.Labels.colorMode=Color mode +VizToolbar.Labels.attributes=Attributes +VizToolbar.Labels.fontScale=Font size scale +EdgeSettingsPanel.showEdgesCheckbox.text=Show +GlobalSettingsPanel.backgroundColorButton.text= +GlobalSettingsPanel.hightlightCheckBox.text=Highlight selection +GlobalSettingsPanel.labelBackgroundColor.text=Background color: +GlobalSettingsPanel.autoSelectNeigborCheckbox.text=Autoselect neighbor +LabelAttributesPanel.title=Label text settings +LabelAttributesPanel.nodesToggleButton.text=\u7bc0\u9ede +LabelAttributesPanel.edgesToggleButton.text=\u9023\u7d50 +LabelAttributesPanel.labelComment.text=Select attributes to display as labels +LabelAttributesPanel.showPropertiesCheckbox.text=Show properties +EdgeSettingsPanel.selectionColorCheckbox.toolTipText=Draw particular color for selected edges (Directed graphs only) +EdgeSettingsPanel.selectionColorCheckbox.text=Selection color +EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText=Edge IN<- Color +EdgeSettingsPanel.labelScale.text=Scale +EdgeSettingsPanel.labelIn.text=In: +EdgeSettingsPanel.labelOut.text=Out: +EdgeSettingsPanel.labelBoth.text=Both: +EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText=Edge Out-> Color +EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText=Edge Both<-> Color +GlobalSettingsPanel.labelZoom.text=Zoom diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle.properties new file mode 100644 index 0000000000..29ef572182 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle.properties @@ -0,0 +1,53 @@ +AdvancedOption_DisplayName_Default=Visualization +AdvancedOption_DisplayName_OpenGL=OpenGL +AdvancedOption_Keywords_Default=visualization, color +AdvancedOption_Keywords_OpenGL=opengl, antialiasing +# Section titles +DefaultPanel.titleGlobalSettings.title=Default global settings +DefaultPanel.titleNodeSettings.title=Default node settings +DefaultPanel.titleEdgeSettings.title=Default edge settings +DefaultPanel.titleNodeLabelSettings.title=Default node label settings +DefaultPanel.titleEdgeLabelSettings.title=Default edge label settings +# Global settings +DefaultPanel.labelBackground.text=Background: +DefaultPanel.highlightCheckbox.text=Highlight selection +DefaultPanel.autoSelectNeighborCheckbox.text=Auto-select neighbor +# Node settings +DefaultPanel.labelNodeScale.text=Scale: +# Edge settings +DefaultPanel.labelEdgeColor.text=Color: +DefaultPanel.labelEdgeScale.text=Scale: +DefaultPanel.showEdgesCheckbox.text=Show edges +DefaultPanel.hideNonSelectedEdgesCheckbox.text=Hide non-selected +DefaultPanel.useEdgeWeightCheckbox.text=Use edge weight +DefaultPanel.rescaleEdgeWeightCheckbox.text=Rescale edge weight +DefaultPanel.selectionColorCheckbox.text=Selection color +DefaultPanel.labelEdgeInColor.text=In: +DefaultPanel.labelEdgeOutColor.text=Out: +DefaultPanel.labelEdgeBothColor.text=Both: +# Node label settings +DefaultPanel.labelNodeFont.text=Font: +DefaultPanel.nodeFontButton.text= +DefaultPanel.labelNodeLabelColor.text=Color: +DefaultPanel.labelNodeLabelSize.text=Size: +DefaultPanel.labelNodeLabelScale.text=Scale: +DefaultPanel.hideNonSelectedNodeLabelsCheckbox.text=Hide non-selected +DefaultPanel.fitToNodeSizeCheckbox.text=Fit to node size +DefaultPanel.avoidNodeLabelOverlapCheckbox.text=Avoid overlap +# Edge label settings +DefaultPanel.labelEdgeFont.text=Font: +DefaultPanel.edgeFontButton.text= +DefaultPanel.labelEdgeLabelColor.text=Color: +DefaultPanel.labelEdgeLabelSize.text=Size: +DefaultPanel.labelEdgeLabelScale.text=Scale: +DefaultPanel.hideNonSelectedEdgeLabelsCheckbox.text=Hide non-selected +DefaultPanel.resetButton.text=Reset defaults +# OpenGL panel +OpenGLPanel.jXTitledSeparator1.title=OpenGL +OpenGLPanel.labelShow.text=Show: +OpenGLPanel.labelAntialiasing.text=Antialiasing: +OpenGLPanel.fpsCheckbox.text=FPS (Frames Per Second) +OpenGLPanel.resetButton.text=Reset Default +OpenGLPanel.restart.title = Restart Required +OpenGLPanel.restart.message = You need to restart Gephi for the changes to take effect +OpenGLPanel.debugLogs.text=Print Debug Logs diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_ar.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_ca.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_ca.properties new file mode 100644 index 0000000000..da1075a9c0 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_ca.properties @@ -0,0 +1,17 @@ +AdvancedOption_DisplayName_Default=Per defecte +AdvancedOption_DisplayName_OpenGL=OpenGL +AdvancedOption_Keywords_Default=visualitzaci\u00f3, color +AdvancedOption_Keywords_OpenGL=opengl, suavitzat +DefaultPanel.autoSelectNeighborCheckbox.text=Selecci\u00f3 autom\u00e0tica dels nodes ve\u00efns +DefaultPanel.highlightCheckbox.text=Destaca la selecci\u00f3 +DefaultPanel.nodeFontButton.text= +DefaultPanel.edgeFontButton.text= +DefaultPanel.labelNodeFont.text=Tipus de lletra de l'etiqueta del node +DefaultPanel.labelEdgeFont.text=Tipus de lletra de l'etiqueta de les arestes +OpenGLPanel.jXTitledSeparator1.title=OpenGL +DefaultPanel.labelBackground.text=Fons: +OpenGLPanel.labelShow.text=Mostra: +OpenGLPanel.labelAntialiasing.text=Suavitza: +OpenGLPanel.fpsCheckbox.text=FPS (Imatges per segon) +OpenGLPanel.resetButton.text=Restablir els valors per defecte +DefaultPanel.resetButton.text=Restablir els valors per defecte diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_cs.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_cs.properties new file mode 100644 index 0000000000..a9bf09dd42 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_cs.properties @@ -0,0 +1,17 @@ +AdvancedOption_DisplayName_Default=V\u00fdchoz\u00ed +AdvancedOption_DisplayName_OpenGL=OpenGL +AdvancedOption_Keywords_Default=vizualizace, barva +AdvancedOption_Keywords_OpenGL=opengl, vyhlazen\u00ed hran +DefaultPanel.autoSelectNeighborCheckbox.text=Automaticky vybrat nejbli\u017e\u0161\u00ed +DefaultPanel.highlightCheckbox.text=Zv\u00fdraznit v\u00fdb\u011br +DefaultPanel.nodeFontButton.text= +DefaultPanel.edgeFontButton.text= +DefaultPanel.labelNodeFont.text=P\u00edsmo jmenovky uzle +DefaultPanel.labelEdgeFont.text=P\u00edsmo jmenovky hrany +OpenGLPanel.jXTitledSeparator1.title=OpenGL +DefaultPanel.labelBackground.text=Pozad\u00ed: +OpenGLPanel.labelShow.text=Zobrazit: +OpenGLPanel.labelAntialiasing.text=Vyhlazen\u00ed okraj\u016f: +OpenGLPanel.fpsCheckbox.text=FPS (Sn\u00edmky za sekundu) +OpenGLPanel.resetButton.text=Resetovat na v\u00fdchoz\u00ed +DefaultPanel.resetButton.text=Resetovat na v\u00fdchoz\u00ed diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_de.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_de.properties new file mode 100644 index 0000000000..a9ff3160ab --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_de.properties @@ -0,0 +1,17 @@ +AdvancedOption_DisplayName_Default=Standard +AdvancedOption_DisplayName_OpenGL=OpenGL +AdvancedOption_Keywords_Default=Visualisierung, Farbe +AdvancedOption_Keywords_OpenGL=OpenGL, Antialiasing +DefaultPanel.autoSelectNeighborCheckbox.text=Nachbarn automatisch ausw\u00e4hlen +DefaultPanel.highlightCheckbox.text=Auswahl hervorheben +DefaultPanel.nodeFontButton.text= +DefaultPanel.edgeFontButton.text= +DefaultPanel.labelNodeFont.text=Knotenbeschriftung Schriftart +DefaultPanel.labelEdgeFont.text=Kantenbeschriftung Schriftart +OpenGLPanel.jXTitledSeparator1.title=OpenGL +DefaultPanel.labelBackground.text=Hintergrund: +OpenGLPanel.labelShow.text=Anzeigen: +OpenGLPanel.labelAntialiasing.text=Antialiasing: +OpenGLPanel.fpsCheckbox.text=FPS (Frames pro Sekunde) +OpenGLPanel.resetButton.text=Standard wiederherstellen +DefaultPanel.resetButton.text=Standard wiederherstellen diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_es.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_es.properties new file mode 100644 index 0000000000..f2eeccb25d --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_es.properties @@ -0,0 +1,17 @@ +AdvancedOption_DisplayName_Default=Visualizaci\u00f3n +AdvancedOption_DisplayName_OpenGL=OpenGL +AdvancedOption_Keywords_Default=visualizaci\u00f3n, color +AdvancedOption_Keywords_OpenGL=opengl, suavizado +DefaultPanel.autoSelectNeighborCheckbox.text=Auto-seleccionar nodos vecinos +DefaultPanel.highlightCheckbox.text=Resaltar selecci\u00f3n +DefaultPanel.nodeFontButton.text= +DefaultPanel.edgeFontButton.text= +DefaultPanel.labelNodeFont.text=Fuente de las etiquetas de los nodos: +DefaultPanel.labelEdgeFont.text=Fuente de las etiquetas de las aristas: +OpenGLPanel.jXTitledSeparator1.title=OpenGL +DefaultPanel.labelBackground.text=Fondo: +OpenGLPanel.labelShow.text=Mostrar: +OpenGLPanel.labelAntialiasing.text=Antialiasing: +OpenGLPanel.fpsCheckbox.text=FPS (Im\u00e1genes por segundo) +OpenGLPanel.resetButton.text=Reestablecer valores por defecto +DefaultPanel.resetButton.text=Reestablecer valores por defecto diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_fr.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_fr.properties new file mode 100644 index 0000000000..77335f3757 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_fr.properties @@ -0,0 +1,17 @@ +AdvancedOption_DisplayName_Default=D\u00e9faut +AdvancedOption_DisplayName_OpenGL=OpenGL +AdvancedOption_Keywords_Default=visualisation, couleur +AdvancedOption_Keywords_OpenGL=opengl, anticr\u00e9nelage +DefaultPanel.autoSelectNeighborCheckbox.text=Voisins s\u00e9lectionn\u00e9s +DefaultPanel.highlightCheckbox.text=Surbrillance de la s\u00e9lection +DefaultPanel.nodeFontButton.text= +DefaultPanel.edgeFontButton.text= +DefaultPanel.labelNodeFont.text=Police du label des noeuds +DefaultPanel.labelEdgeFont.text=Police du label des liens +OpenGLPanel.jXTitledSeparator1.title=OpenGL +DefaultPanel.labelBackground.text=Arri\u00e8re-plan : +OpenGLPanel.labelShow.text=Afficher : +OpenGLPanel.labelAntialiasing.text=Anticr\u00e9nelage : +OpenGLPanel.fpsCheckbox.text=IPS (Image Par Seconde) +OpenGLPanel.resetButton.text=Retour aux valeurs par d\u00e9faut +DefaultPanel.resetButton.text=Retour aux valeurs par d\u00e9faut diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_he.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_he.properties new file mode 100644 index 0000000000..1ab5565dcd --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_he.properties @@ -0,0 +1,17 @@ +AdvancedOption_DisplayName_Default=\u05d1\u05e8\u05d9\u05e8\u05ea \u05de\u05d7\u05d3\u05dc +AdvancedOption_DisplayName_OpenGL=OpenGL +AdvancedOption_Keywords_Default=\u05e6\u05d1\u05e2 \u05d5\u05d9\u05d6\u05d5\u05d0\u05dc\u05d9\u05d6\u05e6\u05d9\u05d4 +AdvancedOption_Keywords_OpenGL=\u05d4\u05d7\u05dc\u05e7\u05d4 openGL +DefaultPanel.autoSelectNeighborCheckbox.text=\u05d1\u05d7\u05e8 \u05e9\u05db\u05df \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05ea +DefaultPanel.highlightCheckbox.text=\u05d4\u05d3\u05d2\u05e9 \u05d4\u05d1\u05d7\u05d9\u05e8\u05d4 +DefaultPanel.nodeFontButton.text= +DefaultPanel.edgeFontButton.text= +DefaultPanel.labelNodeFont.text=\u05d2\u05d5\u05e4\u05df \u05ea\u05d5\u05d5\u05d9\u05ea \u05e6\u05d5\u05de\u05ea +DefaultPanel.labelEdgeFont.text=\u05d2\u05d5\u05e4\u05df \u05ea\u05d5\u05d5\u05d9\u05ea \u05e7\u05e9\u05e8 +OpenGLPanel.jXTitledSeparator1.title=OpenGL +DefaultPanel.labelBackground.text=\u05e8\u05e7\u05e2 +OpenGLPanel.labelShow.text=\u05d4\u05e6\u05d2: +OpenGLPanel.labelAntialiasing.text=\u05d4\u05d7\u05dc\u05e7\u05d4: +OpenGLPanel.fpsCheckbox.text=\u05de\u05e1\u05d2\u05e8\u05d5\u05ea \u05dc\u05e9\u05e0\u05d9\u05d4 +OpenGLPanel.resetButton.text=Reset Default +DefaultPanel.resetButton.text=\u05d0\u05e4\u05e1 \u05d1\u05e8\u05d9\u05e8\u05d5\u05ea \u05d4\u05de\u05d7\u05d3\u05dc diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_hu.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_hu.properties new file mode 100644 index 0000000000..e9a1083bd0 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_hu.properties @@ -0,0 +1,17 @@ + + +OpenGLPanel.labelShow.text=Bemutat\u00e1s +DefaultPanel.labelEdgeFont.text=\u00c9l cimke font +AdvancedOption_DisplayName_OpenGL=OpenGL +AdvancedOption_Keywords_Default=vizualiz\u00e1ci\u00f3, sz\u00edn +OpenGLPanel.jXTitledSeparator1.title=OpenGL +DefaultPanel.autoSelectNeighborCheckbox.text=A szomsz\u00e9d automatikus kiv\u00e1laszt\u00e1sa +DefaultPanel.labelBackground.text=H\u00e1tt\u00e9r +AdvancedOption_DisplayName_Default=Megjelen\u00edt\u00e9s +DefaultPanel.highlightCheckbox.text=Jel\u00f6lje ki a Kijel\u00f6l\u00e9st +OpenGLPanel.fpsCheckbox.text=FPS (k\u00e9pkocka m\u00e1sodpercenk\u00e9nt) +OpenGLPanel.resetButton.text=Alap\u00e9rtelmez\u00e9s vissza\u00e1ll\u00edt\u00e1sa +DefaultPanel.resetButton.text=Vissza\u00e1ll\u00edtsa az alap\u00e9rtelmezetteket +OpenGLPanel.labelAntialiasing.text=\u00c9lsim\u00edt\u00e1s: +DefaultPanel.labelNodeFont.text=Csom\u00f3pont c\u00edmke font +AdvancedOption_Keywords_OpenGL=ny\u00edlt, analiz\u00e1l\u00e1s diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_it.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_it.properties new file mode 100644 index 0000000000..b48fadd94d --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_it.properties @@ -0,0 +1,20 @@ +AdvancedOption_DisplayName_Default=Default +AdvancedOption_DisplayName_OpenGL=OpenGL +AdvancedOption_Keywords_Default=visualization, color +AdvancedOption_Keywords_OpenGL=opengl, antialiasing +DefaultPanel.autoSelectNeighborCheckbox.text=Auto-select Neighbor +DefaultPanel.highlightCheckbox.text=Highlight Selection +DefaultPanel.nodeFontButton.text= +DefaultPanel.edgeFontButton.text= +DefaultPanel.labelNodeFont.text=Node Label Font +DefaultPanel.labelEdgeFont.text=Edge Label Font +OpenGLPanel.jXTitledSeparator1.title=OpenGL +DefaultPanel.labelBackground.text=Background: +OpenGLPanel.labelShow.text=Show: +OpenGLPanel.labelAntialiasing.text=Antialiasing: +OpenGLPanel.fpsCheckbox.text=FPS (Frames Per Second) +OpenGLPanel.resetButton.text=Reset Default +DefaultPanel.resetButton.text=Reset defaults +DefaultPanel.titleGlobalSettings.title=Impostazioni globali predefinite +DefaultPanel.titleNodeSettings.title=Impostazioni nodo predefinite +DefaultPanel.titleEdgeSettings.title=Impostazioni arco predefinite diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_ja.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_ja.properties new file mode 100644 index 0000000000..f6e31fc32a --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_ja.properties @@ -0,0 +1,17 @@ +AdvancedOption_DisplayName_Default=\u30c7\u30d5\u30a9\u30eb\u30c8 +AdvancedOption_DisplayName_OpenGL=OpenGL +AdvancedOption_Keywords_Default=\u8996\u899a\u5316\u3001\u8272 +AdvancedOption_Keywords_OpenGL=OpenGL\u3001\u30a2\u30f3\u30c1\u30a8\u30a4\u30ea\u30a2\u30b9 +DefaultPanel.autoSelectNeighborCheckbox.text=\u96a3\u63a5\u3092\u81ea\u52d5\u9078\u629e +DefaultPanel.highlightCheckbox.text=\u9078\u629e\u3092\u5f37\u8abf +DefaultPanel.nodeFontButton.text= +DefaultPanel.edgeFontButton.text= +DefaultPanel.labelNodeFont.text=\u30ce\u30fc\u30c9\u30fb\u30e9\u30d9\u30eb\u306e\u30d5\u30a9\u30f3\u30c8 +DefaultPanel.labelEdgeFont.text=\u8fba\u30e9\u30d9\u30eb\u306e\u30d5\u30a9\u30f3\u30c8 +OpenGLPanel.jXTitledSeparator1.title=OpenGL +DefaultPanel.labelBackground.text=\u80cc\u666f: +OpenGLPanel.labelShow.text=\u8868\u793a: +OpenGLPanel.labelAntialiasing.text=\u30a2\u30f3\u30c1\u30a8\u30a4\u30ea\u30a2\u30b9: +OpenGLPanel.fpsCheckbox.text=FPS (\u79d2\u9593\u30b3\u30de\u6570) +OpenGLPanel.resetButton.text=\u30c7\u30d5\u30a9\u30eb\u30c8\u3092\u30ea\u30bb\u30c3\u30c8 +DefaultPanel.resetButton.text=\u30c7\u30d5\u30a9\u30eb\u30c8\u3092\u30ea\u30bb\u30c3\u30c8 diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_ko.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_ko.properties new file mode 100644 index 0000000000..8aefc3e7e1 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_ko.properties @@ -0,0 +1,17 @@ + + +OpenGLPanel.labelShow.text=\ubcf4\uc774\uae30: +DefaultPanel.labelEdgeFont.text=\uc5e3\uc9c0 \ub77c\ubca8 \uae00\uaf34 +AdvancedOption_DisplayName_OpenGL=OpenGL +AdvancedOption_Keywords_Default=\uc2dc\uac01\ud654, \uc0c9\uc0c1 +OpenGLPanel.jXTitledSeparator1.title=OpenGL +DefaultPanel.autoSelectNeighborCheckbox.text=\uc774\uc6c3 \uc790\ub3d9 \uc120\ud0dd +DefaultPanel.labelBackground.text=\ubc30\uacbd: +AdvancedOption_DisplayName_Default=\uc2dc\uac01\ud654 +DefaultPanel.highlightCheckbox.text=\uc120\ud0dd \uac15\uc870 +OpenGLPanel.fpsCheckbox.text=FPS (\ucd08\ub2f9 \ud504\ub808\uc784 \uc218) +OpenGLPanel.resetButton.text=\uae30\ubcf8\uac12 \uc7ac\uc124\uc815 +DefaultPanel.resetButton.text=\uae30\ubcf8\uac12 \uc7ac\uc124\uc815 +OpenGLPanel.labelAntialiasing.text=\uc548\ud2f0\uc5d0\uc77c\ub9ac\uc5b4\uc2f1: +DefaultPanel.labelNodeFont.text=\ub178\ub4dc \ub77c\ubca8 \uae00\uaf34 +AdvancedOption_Keywords_OpenGL=OpenGL, \uc548\ud2f0\uc5d0\uc77c\ub9ac\uc5b4\uc2f1 diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_nl.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_nl.properties new file mode 100644 index 0000000000..c52f65a4c3 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_nl.properties @@ -0,0 +1,17 @@ +AdvancedOption_DisplayName_Default=Standaard +AdvancedOption_DisplayName_OpenGL=OpenGL +AdvancedOption_Keywords_Default=visualisatie, kleur +AdvancedOption_Keywords_OpenGL=opengl, anti-aliasing, antialiasing +DefaultPanel.autoSelectNeighborCheckbox.text=Auto-select Neighbor +DefaultPanel.highlightCheckbox.text=Selectie uitlichten +DefaultPanel.nodeFontButton.text= +DefaultPanel.edgeFontButton.text= +DefaultPanel.labelNodeFont.text=Lettertype knooplabel +DefaultPanel.labelEdgeFont.text=Edge Label Font +OpenGLPanel.jXTitledSeparator1.title=OpenGL +DefaultPanel.labelBackground.text=Achtergrond: +OpenGLPanel.labelShow.text=Tonen: +OpenGLPanel.labelAntialiasing.text=Anti-aliasing: +OpenGLPanel.fpsCheckbox.text=FPS (beelden per seconde) +OpenGLPanel.resetButton.text=Standaardwaarde herstellen +DefaultPanel.resetButton.text=Standaardwaarden herstellen diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_pt.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_pt.properties new file mode 100644 index 0000000000..cfb60c8c36 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_pt.properties @@ -0,0 +1,11 @@ +AdvancedOption_DisplayName_Default=Visualizaηγo +AdvancedOption_Keywords_Default=visualizaηγo, cor +DefaultPanel.labelBackground.text=Fundo: +DefaultPanel.highlightCheckbox.text=Destacar seleηγo +DefaultPanel.autoSelectNeighborCheckbox.text=Auto-selecionar nσs vizinhos +DefaultPanel.resetButton.text=Restaurar valores padrγo +OpenGLPanel.labelShow.text=Exibir: +OpenGLPanel.labelAntialiasing.text=Antialiasing: +OpenGLPanel.fpsCheckbox.text=FPS (Frames Por Segundo) +OpenGLPanel.resetButton.text=Restaurar valor padrγo +AdvancedOption_DisplayName_OpenGL=OpenGL diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_pt_BR.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_pt_BR.properties new file mode 100644 index 0000000000..3776cb1f0d --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_pt_BR.properties @@ -0,0 +1,17 @@ +AdvancedOption_DisplayName_Default=Visualiza\u00e7\u00e3o +AdvancedOption_DisplayName_OpenGL=OpenGL +AdvancedOption_Keywords_Default=visualiza\u00e7\u00e3o, cor +AdvancedOption_Keywords_OpenGL=opengl, antialiasing +DefaultPanel.autoSelectNeighborCheckbox.text=Auto-selecionar n\u00f3s vizinhos +DefaultPanel.highlightCheckbox.text=Destacar sele\u00e7\u00e3o +DefaultPanel.nodeFontButton.text= +DefaultPanel.edgeFontButton.text= +DefaultPanel.labelNodeFont.text=Fonte dos r\u00f3tulos dos n\u00f3s +DefaultPanel.labelEdgeFont.text=Fonte dos r\u00f3tulos das arestas +OpenGLPanel.jXTitledSeparator1.title=OpenGL +DefaultPanel.labelBackground.text=Fundo: +OpenGLPanel.labelShow.text=Exibir: +OpenGLPanel.labelAntialiasing.text=Antialiasing: +OpenGLPanel.fpsCheckbox.text=FPS (Frames Por Segundo) +OpenGLPanel.resetButton.text=Restaurar valor padr\u00e3o +DefaultPanel.resetButton.text=Restaurar valores padr\u00e3o diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_ro.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_ro.properties new file mode 100644 index 0000000000..1ae3f18728 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_ro.properties @@ -0,0 +1,17 @@ + + +AdvancedOption_DisplayName_Default=Implicit +AdvancedOption_Keywords_Default=vizualizare, culoare +AdvancedOption_Keywords_OpenGL=opengl, antizim\u021bare +DefaultPanel.labelEdgeFont.text=Font etichete muchii +DefaultPanel.labelNodeFont.text=Font etichete noduri +OpenGLPanel.jXTitledSeparator1.title=OpenGL +DefaultPanel.labelBackground.text=Fundal: +OpenGLPanel.labelShow.text=Afi\u0219eaz\u0103: +OpenGLPanel.labelAntialiasing.text=Antizim\u021bare: +AdvancedOption_DisplayName_OpenGL=OpenGL +OpenGLPanel.fpsCheckbox.text=FPS (cadre pe secund\u0103) +OpenGLPanel.resetButton.text=Reseteaz\u0103 la valorile implicite +DefaultPanel.resetButton.text=Reseteaz\u0103 la valorile implicite +DefaultPanel.autoSelectNeighborCheckbox.text=Selecteaz\u0103 automat vecinul +DefaultPanel.highlightCheckbox.text=Eviden\u021biaz\u0103 selec\u021bia diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_ru.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_ru.properties new file mode 100644 index 0000000000..056a6218e9 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_ru.properties @@ -0,0 +1,17 @@ +AdvancedOption_DisplayName_Default=\u041e\u0431\u0449\u0438\u0435 +AdvancedOption_DisplayName_OpenGL=OpenGL +AdvancedOption_Keywords_Default=visualization, color +AdvancedOption_Keywords_OpenGL=opengl, antialiasing +DefaultPanel.autoSelectNeighborCheckbox.text=\u0410\u0432\u0442\u043e\u0432\u044b\u0431\u043e\u0440 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 +DefaultPanel.highlightCheckbox.text=\u041f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u0432\u044b\u0431\u043e\u0440\u0430 +DefaultPanel.nodeFontButton.text= +DefaultPanel.edgeFontButton.text= +DefaultPanel.labelNodeFont.text=\u0428\u0440\u0438\u0444\u0442 \u043c\u0435\u0442\u043a\u0438 \u0443\u0437\u043b\u0430 +DefaultPanel.labelEdgeFont.text=\u0428\u0440\u0438\u0444\u0442 \u043c\u0435\u0442\u043a\u0438 \u0440\u0435\u0431\u0440\u0430 +OpenGLPanel.jXTitledSeparator1.title=OpenGL +DefaultPanel.labelBackground.text=\u0424\u043e\u043d: +OpenGLPanel.labelShow.text=\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c: +OpenGLPanel.labelAntialiasing.text=\u0410\u043d\u0442\u0438\u0430\u043b\u0438\u0430\u0441\u0438\u043d\u0433: +OpenGLPanel.fpsCheckbox.text=FPS (\u043a\u0430\u0434\u0440\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443) +OpenGLPanel.resetButton.text=\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 +DefaultPanel.resetButton.text=\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_th.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_tr.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_tr.properties new file mode 100644 index 0000000000..ed3b61e542 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_tr.properties @@ -0,0 +1,17 @@ +AdvancedOption_DisplayName_Default=Varsay\u0131lan +AdvancedOption_DisplayName_OpenGL=OpenGL +AdvancedOption_Keywords_Default=visualization, color +AdvancedOption_Keywords_OpenGL=opengl, antialiasing +DefaultPanel.autoSelectNeighborCheckbox.text=Auto-select Neighbor +DefaultPanel.highlightCheckbox.text=Highlight Selection +DefaultPanel.nodeFontButton.text= +DefaultPanel.edgeFontButton.text= +DefaultPanel.labelNodeFont.text=Node Label Font +DefaultPanel.labelEdgeFont.text=Edge Label Font +OpenGLPanel.jXTitledSeparator1.title=OpenGL +DefaultPanel.labelBackground.text=Background: +OpenGLPanel.labelShow.text=Show: +OpenGLPanel.labelAntialiasing.text=Antialiasing: +OpenGLPanel.fpsCheckbox.text=FPS (Frames Per Second) +OpenGLPanel.resetButton.text=Reset Default +DefaultPanel.resetButton.text=Reset defaults diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_uk.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_uk.properties new file mode 100644 index 0000000000..683891f513 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_uk.properties @@ -0,0 +1,17 @@ +AdvancedOption_DisplayName_Default=\u0412\u0456\u0437\u0443\u0430\u043b\u0456\u0437\u0430\u0446\u0456\u044f +AdvancedOption_DisplayName_OpenGL=OpenGL +DefaultPanel.labelBackground.text=\u0424\u043e\u043d: +AdvancedOption_Keywords_OpenGL=opengl, \u0437\u0433\u043b\u0430\u0434\u0436\u0443\u0432\u0430\u043d\u043d\u044f +DefaultPanel.nodeFontButton.text=\u0406 +DefaultPanel.edgeFontButton.text=\u0406 +DefaultPanel.labelNodeFont.text=\u0428\u0440\u0438\u0444\u0442 \u043c\u0456\u0442\u043a\u0438 \u0432\u0443\u0437\u043b\u0430 +DefaultPanel.labelEdgeFont.text=\u0428\u0440\u0438\u0444\u0442 \u0435\u0442\u0438\u043a\u0435\u0442\u043a\u0438 \u043d\u0430 \u043a\u0440\u0430\u044e +OpenGLPanel.jXTitledSeparator1.title=OpenGL +OpenGLPanel.labelShow.text=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u0438: +OpenGLPanel.labelAntialiasing.text=\u0417\u0433\u043b\u0430\u0434\u0436\u0443\u0432\u0430\u043d\u043d\u044f: +OpenGLPanel.fpsCheckbox.text=FPS (\u043a\u0430\u0434\u0440\u043e\u0432 \u0437\u0430 \u0441\u0435\u043a\u0443\u043d\u0434\u0443) +OpenGLPanel.resetButton.text=\u0421\u043a\u0438\u043d\u0443\u0442\u0438 \u0437\u0430 \u0437\u0430\u043c\u043e\u0432\u0447\u0443\u0432\u0430\u043d\u043d\u044f\u043c +DefaultPanel.resetButton.text=\u0421\u043a\u0438\u043d\u0443\u0442\u0438 \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0437\u0430 \u0437\u0430\u043c\u043e\u0432\u0447\u0443\u0432\u0430\u043d\u043d\u044f\u043c +AdvancedOption_Keywords_Default=\u0432\u0456\u0437\u0443\u0430\u043b\u0456\u0437\u0430\u0446\u0456\u044f, \u043a\u043e\u043b\u0456\u0440 +DefaultPanel.autoSelectNeighborCheckbox.text=\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u0438\u0439 \u0432\u0438\u0431\u0456\u0440 \u0441\u0443\u0441\u0456\u0434\u0430 +DefaultPanel.highlightCheckbox.text=\u0412\u0438\u0434\u0456\u043b\u0456\u0442\u044c \u0432\u0438\u0434\u0456\u043b\u0435\u043d\u043d\u044f diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_zh_CN.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_zh_CN.properties new file mode 100644 index 0000000000..06437987d3 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_zh_CN.properties @@ -0,0 +1,17 @@ +AdvancedOption_DisplayName_Default=\u53ef\u89c6\u5316 +AdvancedOption_DisplayName_OpenGL=OpenGL +AdvancedOption_Keywords_Default=\u53ef\u89c6\u5316, \u989c\u8272 +AdvancedOption_Keywords_OpenGL=opengl, \u6297\u952f\u9f7f +DefaultPanel.autoSelectNeighborCheckbox.text=\u81ea\u52a8\u9009\u62e9\u90bb\u5c45 +DefaultPanel.highlightCheckbox.text=\u9ad8\u4eae\u9009\u62e9 +DefaultPanel.nodeFontButton.text= +DefaultPanel.edgeFontButton.text= +DefaultPanel.labelNodeFont.text=\u8282\u70b9\u6807\u7b7e\u5b57\u4f53 +DefaultPanel.labelEdgeFont.text=\u8fb9\u6807\u7b7e\u5b57\u4f53 +OpenGLPanel.jXTitledSeparator1.title=OpenGl +DefaultPanel.labelBackground.text=\u80cc\u666f: +OpenGLPanel.labelShow.text=\u663e\u793a: +OpenGLPanel.labelAntialiasing.text=\u6297\u952f\u9f7f: +OpenGLPanel.fpsCheckbox.text=FPS(\u5237\u65b0\u7387\uff0d\u6bcf\u79d2\u5e27\u6570) +OpenGLPanel.resetButton.text=\u91cd\u8bbe\u7f3a\u7701\u503c +DefaultPanel.resetButton.text=\u91cd\u8bbe\u7f3a\u7701\u503c diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_zh_TW.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_zh_TW.properties new file mode 100644 index 0000000000..ff4fdf029d --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/options/Bundle_zh_TW.properties @@ -0,0 +1,17 @@ +AdvancedOption_DisplayName_Default=Default +AdvancedOption_DisplayName_OpenGL=OpenGL +AdvancedOption_Keywords_Default=visualization, color +AdvancedOption_Keywords_OpenGL=opengl, antialiasing +DefaultPanel.autoSelectNeighborCheckbox.text=Auto-select Neighbor +DefaultPanel.highlightCheckbox.text=Highlight Selection +DefaultPanel.nodeFontButton.text= +DefaultPanel.edgeFontButton.text= +DefaultPanel.labelNodeFont.text=Node Label Font +DefaultPanel.labelEdgeFont.text=Edge Label Font +OpenGLPanel.jXTitledSeparator1.title=OpenGL +DefaultPanel.labelBackground.text=Background: +OpenGLPanel.labelShow.text=Show: +OpenGLPanel.labelAntialiasing.text=Antialiasing: +OpenGLPanel.fpsCheckbox.text=FPS (Frames Per Second) +OpenGLPanel.resetButton.text=Reset Default +DefaultPanel.resetButton.text=Reset defaults diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle.properties new file mode 100644 index 0000000000..dc82898fd3 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle.properties @@ -0,0 +1,10 @@ +ScreenshotSettingsPanel.labelCustomScaleFactor.text=Custom Scale Factor: +ScreenshotSettingsPanel.labelWidth.text=Width: +ScreenshotSettingsPanel.labelHeight.text=Height: +ScreenshotSettingsPanel.autoSaveCheckBox.text=Autosave +ScreenshotSettingsPanel.selectDirectoryButton.text=Select directory... +ScreenshotSettingsPanel.transparentBackgroundCheckbox.text=Transparent Background +ScreenshotSettingsPanel.labelScaleFactor.text=Scale Factor: +ScreenshotSettingsPanel.scaleFactorCombo.customItem=Custom... +ScreenshotSettingsPanel.widthLabel.text=\ +ScreenshotSettingsPanel.heightLabel.text=\ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_ar.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_ca.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_ca.properties new file mode 100644 index 0000000000..18a98ad696 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_ca.properties @@ -0,0 +1,2 @@ +ScreenshotSettingsPanel.autoSaveCheckBox.text=Desa autom\u00e0ticament +ScreenshotSettingsPanel.selectDirectoryButton.text=Selecciona la carpeta... \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_cs.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_cs.properties new file mode 100644 index 0000000000..88792d52b4 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_cs.properties @@ -0,0 +1,2 @@ +ScreenshotSettingsPanel.autoSaveCheckBox.text=Automatick\u00e9 ukl\u00e1d\u00e1n\u00ed +ScreenshotSettingsPanel.selectDirectoryButton.text=Vybrat adres\u00e1\u0159... diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_de.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_de.properties new file mode 100644 index 0000000000..1baa2ff452 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_de.properties @@ -0,0 +1,2 @@ +ScreenshotSettingsPanel.autoSaveCheckBox.text=Automatisch speichern +ScreenshotSettingsPanel.selectDirectoryButton.text=Verzeichnis ausw\u00e4hlen... diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_es.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_es.properties new file mode 100644 index 0000000000..09d977f7b0 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_es.properties @@ -0,0 +1,3 @@ +ScreenshotSettingsPanel.autoSaveCheckBox.text=Autoguardado +ScreenshotSettingsPanel.selectDirectoryButton.text=Seleccionar directorio... +ScreenshotSettingsPanel.transparentBackgroundCheckbox.text=Fondo transparente diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_fr.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_fr.properties new file mode 100644 index 0000000000..12bc7ac6c5 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_fr.properties @@ -0,0 +1,8 @@ +ScreenshotSettingsPanel.autoSaveCheckBox.text=Enregistrement automatique +ScreenshotSettingsPanel.selectDirectoryButton.text=S\u00e9lectionnez le dossier... +ScreenshotSettingsPanel.labelCustomScaleFactor.text=Facteur d'Γ©chelleΒ : +ScreenshotSettingsPanel.labelWidth.text=LargeurΒ : +ScreenshotSettingsPanel.labelHeight.text=HauteurΒ : +ScreenshotSettingsPanel.transparentBackgroundCheckbox.text=Fond transparent +ScreenshotSettingsPanel.labelScaleFactor.text=Facteur d'ιchelle : +ScreenshotSettingsPanel.scaleFactorCombo.customItem=Personalisι... diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_he.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_he.properties new file mode 100644 index 0000000000..4eec7d2215 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_he.properties @@ -0,0 +1,2 @@ +ScreenshotSettingsPanel.autoSaveCheckBox.text=\u05e9\u05de\u05d9\u05e8\u05d4 \u05d0\u05d5\u05d8\u05d5\u05de\u05d8\u05d9\u05ea +ScreenshotSettingsPanel.selectDirectoryButton.text=\u05d1\u05d7\u05e8 \u05de\u05d7\u05d9\u05e6\u05d4... diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_hu.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_hu.properties new file mode 100644 index 0000000000..8a6c7ec70d --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_hu.properties @@ -0,0 +1,2 @@ +ScreenshotSettingsPanel.transparentBackgroundCheckbox.text=\u00c1tl\u00e1tsz\u00f3 h\u00e1tt\u00e9r +ScreenshotSettingsPanel.selectDirectoryButton.text=K\u00f6nyvt\u00e1r kiv\u00e1laszt\u00e1sa... \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_it.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_it.properties new file mode 100644 index 0000000000..0c86f8601c --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_it.properties @@ -0,0 +1,7 @@ +ScreenshotSettingsPanel.autoSaveCheckBox.text=Autosave +ScreenshotSettingsPanel.selectDirectoryButton.text=Select directory... +ScreenshotSettingsPanel.labelCustomScaleFactor.text=Fattore di scala personalizzato: +ScreenshotSettingsPanel.labelWidth.text=Larghezza: +ScreenshotSettingsPanel.labelHeight.text=Altezza: +ScreenshotSettingsPanel.transparentBackgroundCheckbox.text=Sfondo trasparente +ScreenshotSettingsPanel.labelScaleFactor.text=Fattore di scala: diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_ja.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_ja.properties new file mode 100644 index 0000000000..5b205f50a1 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_ja.properties @@ -0,0 +1,2 @@ +ScreenshotSettingsPanel.autoSaveCheckBox.text=\u81ea\u52d5\u4fdd\u5b58 +ScreenshotSettingsPanel.selectDirectoryButton.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u9078\u629e... \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_ko.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_ko.properties new file mode 100644 index 0000000000..480cc31e0c --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_ko.properties @@ -0,0 +1,3 @@ +ScreenshotSettingsPanel.transparentBackgroundCheckbox.text=\ud22c\uba85\ud55c \ubc30\uacbd +ScreenshotSettingsPanel.autoSaveCheckBox.text=\uc790\ub3d9 \uc800\uc7a5 +ScreenshotSettingsPanel.selectDirectoryButton.text=\ub514\ub809\ud1a0\ub9ac \uc120\ud0dd... \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_nl.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_nl.properties new file mode 100644 index 0000000000..e5a8f16cb5 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_nl.properties @@ -0,0 +1,2 @@ +ScreenshotSettingsPanel.autoSaveCheckBox.text=Automatisch opslaan +ScreenshotSettingsPanel.selectDirectoryButton.text=Map selecteren... \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_pt_BR.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_pt_BR.properties new file mode 100644 index 0000000000..d89433dd37 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_pt_BR.properties @@ -0,0 +1,2 @@ +ScreenshotSettingsPanel.autoSaveCheckBox.text=Salvamento autom\u00e1tico +ScreenshotSettingsPanel.selectDirectoryButton.text=Selecione um diret\u00f3rio... \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_ro.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_ro.properties new file mode 100644 index 0000000000..2d97962010 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_ro.properties @@ -0,0 +1,10 @@ +ScreenshotSettingsPanel.selectDirectoryButton.text=Selecteaz\u0103 director... +ScreenshotSettingsPanel.transparentBackgroundCheckbox.text=Fundal transparent +ScreenshotSettingsPanel.autoSaveCheckBox.text=Autosalvare +ScreenshotSettingsPanel.labelWidth.text=L\u0103\u021Bime: +ScreenshotSettingsPanel.labelHeight.text=Ξn\u0103l\u021Bime: +ScreenshotSettingsPanel.labelScaleFactor.text=Factor de scal\u0103: +ScreenshotSettingsPanel.scaleFactorCombo.customItem=Personalizare: +ScreenshotSettingsPanel.labelCustomScaleFactor.text=Factor de scalare personalizat: +ScreenshotSettingsPanel.widthLabel.text=\ . +ScreenshotSettingsPanel.heightLabel.text=\ . diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_ru.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_ru.properties new file mode 100644 index 0000000000..b144a3ea73 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_ru.properties @@ -0,0 +1,2 @@ +ScreenshotSettingsPanel.autoSaveCheckBox.text=\u0410\u0432\u0442\u043e\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 +ScreenshotSettingsPanel.selectDirectoryButton.text=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e... \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_th.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_tr.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_tr.properties new file mode 100644 index 0000000000..72cc12847e --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_tr.properties @@ -0,0 +1,2 @@ +ScreenshotSettingsPanel.autoSaveCheckBox.text=Autosave +ScreenshotSettingsPanel.selectDirectoryButton.text=Select directory... diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_uk.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_uk.properties new file mode 100644 index 0000000000..9d0b880504 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_uk.properties @@ -0,0 +1,3 @@ +ScreenshotSettingsPanel.autoSaveCheckBox.text=\u0410\u0432\u0442\u043e\u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u043d\u044f +ScreenshotSettingsPanel.selectDirectoryButton.text=\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044c \u043a\u0430\u0442\u0430\u043b\u043e\u0433... +ScreenshotSettingsPanel.transparentBackgroundCheckbox.text=\u043f\u0440\u043e\u0437\u043e\u0440\u0438\u0439 \u0444\u043e\u043d diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_zh_CN.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_zh_CN.properties new file mode 100644 index 0000000000..7054aa82dd --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_zh_CN.properties @@ -0,0 +1,2 @@ +ScreenshotSettingsPanel.autoSaveCheckBox.text=\u81ea\u52a8\u4fdd\u5b58 +ScreenshotSettingsPanel.selectDirectoryButton.text=\u9009\u62e9\u76ee\u5f55... diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_zh_TW.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_zh_TW.properties new file mode 100644 index 0000000000..72cc12847e --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/screenshot/Bundle_zh_TW.properties @@ -0,0 +1,2 @@ +ScreenshotSettingsPanel.autoSaveCheckBox.text=Autosave +ScreenshotSettingsPanel.selectDirectoryButton.text=Select directory... diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle.properties new file mode 100644 index 0000000000..194152fe8d --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle.properties @@ -0,0 +1,12 @@ +MouseSelectionPopupPanel.labelDiameter.text=Diameter +MouseSelectionPopupPanel.proportionnalZoomCheckbox.text=Proportional to zoom + +SelectionBar.statusLabel.rectangleSelection = Rectangle selection +SelectionBar.statusLabel.mouseSelection = Mouse selection +SelectionBar.statusLabel.noSelection = No selection +SelectionBar.statusLabel.customSelection = Custom selection +SelectionBar.statusLabel.nodeSelection = Node selection +SelectionBar.configureLink.text=(Configure) +SelectionToolbar.rectangle.tooltip = Rectangle selection +SelectionToolbar.mouse.tooltip = Direct selection +SelectionToolbar.pan.tooltip = Pan \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_ar.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_ca.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_ca.properties new file mode 100644 index 0000000000..b9d7d6ad12 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_ca.properties @@ -0,0 +1,9 @@ +MouseSelectionPopupPanel.labelDiameter.text=Diΰmetre +MouseSelectionPopupPanel.proportionnalZoomCheckbox.text=Proportional to zoom +SelectionBar.statusLabel.rectangleSelection=Selecciσ a travιs d'un rectangle +SelectionBar.statusLabel.mouseSelection=Mouse selection +SelectionBar.statusLabel.noSelection=Cap selecciσ +SelectionBar.configureLink.text=(Configura) +SelectionToolbar.rectangle.tooltip=Selecciσ a travιs d'un rectangle +SelectionToolbar.mouse.tooltip=Selecciσ directa +SelectionToolbar.pan.tooltip=Arrossega \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_cs.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_cs.properties new file mode 100644 index 0000000000..effaa730bd --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_cs.properties @@ -0,0 +1,10 @@ +MouseSelectionPopupPanel.labelDiameter.text=Pr\u016fm\u011br +MouseSelectionPopupPanel.proportionnalZoomCheckbox.text=Ϊm\u011brnι p\u0159iblν\u017eenν + +SelectionBar.statusLabel.rectangleSelection = Obdιlnνkovύ vύb\u011br +SelectionBar.statusLabel.mouseSelection = Vύb\u011br my\u0161ν +SelectionBar.statusLabel.noSelection = Bez vύb\u011bru +SelectionBar.configureLink.text=(Nastavit) +SelectionToolbar.rectangle.tooltip = Obdιlnνkovύ vύb\u011br +SelectionToolbar.mouse.tooltip = P\u0159νmύ vύb\u011br +SelectionToolbar.pan.tooltip = Tαhnout \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_de.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_de.properties new file mode 100644 index 0000000000..4182a28e1e --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_de.properties @@ -0,0 +1,10 @@ +MouseSelectionPopupPanel.labelDiameter.text=Durchmesser +MouseSelectionPopupPanel.proportionnalZoomCheckbox.text=Proportional zum Zoom + +SelectionBar.statusLabel.rectangleSelection = Rechteck-Auswahl +SelectionBar.statusLabel.mouseSelection = Maus-Auswahl +SelectionBar.statusLabel.noSelection = Keine Auswahl +SelectionBar.configureLink.text=(Konfigurieren) +SelectionToolbar.rectangle.tooltip=Rechteck-Auswahl +SelectionToolbar.mouse.tooltip=Direkte Auswahl +SelectionToolbar.pan.tooltip=Ziehen \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_el.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_el.properties new file mode 100644 index 0000000000..4866c5b509 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_el.properties @@ -0,0 +1,6 @@ +SelectionBar.configureLink.text=(\u03A1\u03C5\u03B8\u03BC\u03AF\u03C3\u03B5\u03B9\u03C2) +SelectionBar.statusLabel.mouseSelection=\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u03BC\u03B5 \u03BA\u03AD\u03C1\u03C3\u03BF\u03C1\u03B1 +SelectionBar.statusLabel.noSelection=\u03A7\u03C9\u03C1\u03AF\u03C2 \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE +SelectionBar.statusLabel.rectangleSelection=\u039F\u03C1\u03B8\u03BF\u03B3\u03CE\u03BD\u03B9\u03B1 \u03B5\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE +MouseSelectionPopupPanel.proportionnalZoomCheckbox.text=\u0391\u03BD\u03B1\u03BB\u03BF\u03B3\u03B9\u03BA\u03CC \u03C0\u03C1\u03BF\u03C2 \u03BC\u03B5\u03B3\u03AD\u03B8\u03C5\u03BD\u03C3\u03B7 +MouseSelectionPopupPanel.labelDiameter.text=\u0394\u03B9\u03AC\u03BC\u03B5\u03C4\u03C1\u03BF\u03C2 diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_es.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_es.properties new file mode 100644 index 0000000000..6045f536af --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_es.properties @@ -0,0 +1,9 @@ +MouseSelectionPopupPanel.labelDiameter.text=Diαmetro +MouseSelectionPopupPanel.proportionnalZoomCheckbox.text=Proporcional al zoom +SelectionToolbar.rectangle.tooltip=Selecciσn rectangular +SelectionToolbar.mouse.tooltip=Selecciσn directa +SelectionToolbar.pan.tooltip=Desplazar +SelectionBar.statusLabel.rectangleSelection = Selecciσn rectangular +SelectionBar.statusLabel.mouseSelection = Selecciσn +SelectionBar.statusLabel.noSelection = Sin selecciσn +SelectionBar.configureLink.text=(Configurar) diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_fr.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_fr.properties new file mode 100644 index 0000000000..ff596662c4 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_fr.properties @@ -0,0 +1,11 @@ +MouseSelectionPopupPanel.labelDiameter.text=Diamθtre +MouseSelectionPopupPanel.proportionnalZoomCheckbox.text=Proportionnel au zoom +SelectionBar.statusLabel.rectangleSelection=Rectangle de sιlection +SelectionBar.statusLabel.mouseSelection=Sιlection +SelectionBar.statusLabel.noSelection=Aucune sιlection +SelectionBar.configureLink.text=(Configurer) +SelectionToolbar.rectangle.tooltip=Rectangle de sιlection +SelectionToolbar.mouse.tooltip=Sιlection directe +SelectionToolbar.pan.tooltip=Dιplacement +SelectionBar.statusLabel.customSelection=Sιlection personnalisιe +SelectionBar.statusLabel.nodeSelection=Sιlection de noeuds diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_he.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_he.properties new file mode 100644 index 0000000000..c4d760784e --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_he.properties @@ -0,0 +1,6 @@ +MouseSelectionPopupPanel.labelDiameter.text=Diameter +MouseSelectionPopupPanel.proportionnalZoomCheckbox.text=Proportional to zoom +SelectionBar.statusLabel.rectangleSelection=Rectangle selection +SelectionBar.statusLabel.mouseSelection=Mouse selection +SelectionBar.statusLabel.noSelection=No selection +SelectionBar.configureLink.text=(Configure) diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_hu.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_hu.properties new file mode 100644 index 0000000000..a8bdbdeb0c --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_hu.properties @@ -0,0 +1,8 @@ +SelectionBar.configureLink.text=Be\u00E1ll\u00EDt\u00E1s +SelectionBar.statusLabel.mouseSelection=Eg\u00E9r kiv\u00E1laszt\u00E1sa +SelectionBar.statusLabel.noSelection=Nincs kiv\u00E1laszt\u00E1s +SelectionBar.statusLabel.rectangleSelection=T\u00E9glalap kijel\u00F6l\u00E9s +MouseSelectionPopupPanel.proportionnalZoomCheckbox.text=A zoom ar\u00E1nya +MouseSelectionPopupPanel.labelDiameter.text=\u00C1tm\u00E9r\u0151 +SelectionToolbar.rectangle.tooltip=T\u00E9glalap kijel\u00F6l\u00E9s +SelectionToolbar.pan.tooltip=H\u00FAzza \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_it.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_it.properties new file mode 100644 index 0000000000..517439e4ce --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_it.properties @@ -0,0 +1,8 @@ +MouseSelectionPopupPanel.labelDiameter.text=Diameter +MouseSelectionPopupPanel.proportionnalZoomCheckbox.text=Proportional to zoom +SelectionBar.statusLabel.rectangleSelection=Rectangle selection +SelectionBar.statusLabel.mouseSelection=Mouse selection +SelectionBar.statusLabel.noSelection=No selection +SelectionBar.configureLink.text=(Configure) +SelectionBar.statusLabel.customSelection=Selezione personalizzata +SelectionBar.statusLabel.nodeSelection=Seleziona nodo diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_ja.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_ja.properties new file mode 100644 index 0000000000..a6efa5eaaa --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_ja.properties @@ -0,0 +1,9 @@ +MouseSelectionPopupPanel.labelDiameter.text=\u76f4\u5f84 +MouseSelectionPopupPanel.proportionnalZoomCheckbox.text=\u7e26\u6a2a\u6bd4\u56fa\u5b9a + +SelectionBar.statusLabel.rectangleSelection = \u77e9\u5f62\u9078\u629e +SelectionBar.statusLabel.mouseSelection = \u30de\u30a6\u30b9\u9078\u629e +SelectionBar.statusLabel.noSelection = \u9078\u629e\u306a\u3057 +SelectionToolbar.rectangle.tooltip = \u77e9\u5f62\u9078\u629e +SelectionToolbar.mouse.tooltip = \u76f4\u63a5\u9078\u629e +SelectionToolbar.pan.tooltip = \u30c9\u30e9\u30c3\u30b0 \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_ko.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_ko.properties new file mode 100644 index 0000000000..31d5c6a4dd --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_ko.properties @@ -0,0 +1,3 @@ +SelectionToolbar.rectangle.tooltip=\uC0AC\uAC01 \uC601\uC5ED \uC120\uD0DD +SelectionToolbar.pan.tooltip=\uB4DC\uB798\uADF8 +SelectionToolbar.mouse.tooltip=\uC9C1\uC811 \uC120\uD0DD \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_nl.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_nl.properties new file mode 100644 index 0000000000..01417639be --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_nl.properties @@ -0,0 +1,6 @@ +MouseSelectionPopupPanel.labelDiameter.text=Diameter +MouseSelectionPopupPanel.proportionnalZoomCheckbox.text=Proportional to zoom +SelectionBar.statusLabel.rectangleSelection=Rectangle selection +SelectionBar.statusLabel.mouseSelection=Mouse selection +SelectionBar.statusLabel.noSelection=No selection +SelectionBar.configureLink.text=(Configureren) diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_pt_BR.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_pt_BR.properties new file mode 100644 index 0000000000..eee5ff08b0 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_pt_BR.properties @@ -0,0 +1,10 @@ +MouseSelectionPopupPanel.labelDiameter.text=Diβmetro +MouseSelectionPopupPanel.proportionnalZoomCheckbox.text=Proporcional ao zoom + +SelectionBar.statusLabel.rectangleSelection = Seleηγo retangular +SelectionBar.statusLabel.mouseSelection = Seleηγo com o mouse +SelectionBar.statusLabel.noSelection = Sem seleηγo +SelectionBar.configureLink.text=(Configurar) +SelectionToolbar.rectangle.tooltip = Seleηγo retangular +SelectionToolbar.mouse.tooltip = Seleηγo direta +SelectionToolbar.pan.tooltip = Arrastar \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_ro.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_ro.properties new file mode 100644 index 0000000000..a99b60f3e9 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_ro.properties @@ -0,0 +1,9 @@ +MouseSelectionPopupPanel.labelDiameter.text=Diametru +MouseSelectionPopupPanel.proportionnalZoomCheckbox.text=Propor\u021Bional cu zoom-ul +SelectionBar.statusLabel.rectangleSelection=Selec\u021Bie dreptunghiular\u0103 +SelectionBar.statusLabel.mouseSelection=Selec\u021Bie cu mouse-ul +SelectionBar.statusLabel.noSelection=Nicio selec\u021Bie +SelectionBar.configureLink.text=(Configureaz\u0103) +SelectionToolbar.mouse.tooltip=Selec\u021Bie direct\u0103 +SelectionToolbar.rectangle.tooltip=Selec\u021Bie dreptunghiular\u0103 +SelectionToolbar.pan.tooltip=Trage \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_ru.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_ru.properties new file mode 100644 index 0000000000..cc46b309b1 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_ru.properties @@ -0,0 +1,9 @@ +MouseSelectionPopupPanel.labelDiameter.text=\u0414\u0438\u0430\u043c\u0435\u0442\u0440 +MouseSelectionPopupPanel.proportionnalZoomCheckbox.text=\u041f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e \u043c\u0430\u0441\u0448\u0442\u0430\u0431\u0443 + +SelectionBar.statusLabel.rectangleSelection = \u0412\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u043e\u0431\u043b\u0430\u0441\u0442\u0438 +SelectionBar.statusLabel.mouseSelection = \u0412\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043c\u044b\u0448\u044c\u044e +SelectionBar.statusLabel.noSelection = \u041d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u0432\u044b\u0431\u0440\u0430\u043d\u043e +SelectionToolbar.rectangle.tooltip = \u0412\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u043c +SelectionToolbar.mouse.tooltip = \u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 +SelectionToolbar.pan.tooltip = \u041f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u044c diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_th.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_tr.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_tr.properties new file mode 100644 index 0000000000..0e1dae5d7a --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_tr.properties @@ -0,0 +1,9 @@ +MouseSelectionPopupPanel.labelDiameter.text=Diameter +MouseSelectionPopupPanel.proportionnalZoomCheckbox.text=Proportional to zoom +SelectionBar.statusLabel.rectangleSelection=Rectangle selection +SelectionBar.statusLabel.mouseSelection=Mouse selection +SelectionBar.statusLabel.noSelection=No selection +SelectionBar.configureLink.text=(Configure) +SelectionToolbar.rectangle.tooltip=Rectangle selection +SelectionToolbar.mouse.tooltip=Direct selection +SelectionToolbar.pan.tooltip=Pan \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_uk.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_uk.properties new file mode 100644 index 0000000000..bcfe59eb5b --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_uk.properties @@ -0,0 +1,8 @@ +SelectionBar.statusLabel.noSelection=\u0411\u0435\u0437 \u0432\u0438\u0431\u043E\u0440\u0443 +SelectionBar.statusLabel.mouseSelection=\u0412\u0438\u0431\u0456\u0440 \u043C\u0438\u0448\u0435\u044E +MouseSelectionPopupPanel.labelDiameter.text=\u0414\u0456\u0430\u043C\u0435\u0442\u0440 +SelectionBar.statusLabel.rectangleSelection=\u0412\u0438\u0434\u0456\u043B\u0435\u043D\u043D\u044F \u043F\u0440\u044F\u043C\u043E\u043A\u0443\u0442\u043D\u0438\u043A\u0430 +SelectionBar.configureLink.text=(\u041D\u0430\u043B\u0430\u0448\u0442\u0443\u0432\u0430\u0442\u0438) +MouseSelectionPopupPanel.proportionnalZoomCheckbox.text=\u041F\u0440\u043E\u043F\u043E\u0440\u0446\u0456\u0439\u043D\u043E \u043C\u0430\u0441\u0448\u0442\u0430\u0431\u0443 +SelectionToolbar.mouse.tooltip=\u041F\u0440\u044F\u043C\u0438\u0439 \u0432\u0456\u0434\u0431\u0456\u0440 +SelectionToolbar.rectangle.tooltip=\u0412\u0438\u0434\u0456\u043B\u0435\u043D\u043D\u044F \u043F\u0440\u044F\u043C\u043E\u043A\u0443\u0442\u043D\u0438\u043A\u0430 \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_zh_CN.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_zh_CN.properties new file mode 100644 index 0000000000..4e824e2454 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_zh_CN.properties @@ -0,0 +1,10 @@ +MouseSelectionPopupPanel.labelDiameter.text=\u76f4\u5f84 +MouseSelectionPopupPanel.proportionnalZoomCheckbox.text=\u6bd4\u4f8b\u653e\u5927 + +SelectionBar.statusLabel.rectangleSelection = \u77e9\u5f62\u9009\u62e9 +SelectionBar.statusLabel.mouseSelection = \u9f20\u6807\u9009\u62e9 +SelectionBar.statusLabel.noSelection = \u65e0\u9009\u62e9 +SelectionBar.configureLink.text=(\u9f20\u6807\u9009\u53d6\u76f4\u5f84) +SelectionToolbar.rectangle.tooltip=\u77e9\u5f62\u9009\u62e9 +SelectionToolbar.mouse.tooltip=\u76f4\u63a5\u9009\u62e9 +SelectionToolbar.pan.tooltip=\u62d6\u52a8 \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_zh_TW.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_zh_TW.properties new file mode 100644 index 0000000000..c4d760784e --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/selection/Bundle_zh_TW.properties @@ -0,0 +1,6 @@ +MouseSelectionPopupPanel.labelDiameter.text=Diameter +MouseSelectionPopupPanel.proportionnalZoomCheckbox.text=Proportional to zoom +SelectionBar.statusLabel.rectangleSelection=Rectangle selection +SelectionBar.statusLabel.mouseSelection=Mouse selection +SelectionBar.statusLabel.noSelection=No selection +SelectionBar.configureLink.text=(Configure) diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle.properties new file mode 100644 index 0000000000..bab59f91f8 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle.properties @@ -0,0 +1,4 @@ +ActionsToolbar.centerOnGraph = Center On Graph +ActionsToolbar.centerOnZero = Center On Zero +ActionsToolbar.resetColors = Reset colors +ActionsToolbar.resetLabelColors = Reset label color \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_ar.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_ca.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_ca.properties new file mode 100644 index 0000000000..139761a199 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_ca.properties @@ -0,0 +1,5 @@ +ActionsToolbar.centerOnGraph=Centra al graf +ActionsToolbar.centerOnZero=Centra al punt zero +ActionsToolbar.resetColors=Reinicialitzar els colors +ActionsToolbar.resetLabelColors=Restaura el color de l'etiqueta +ActionsToolbar.resetLabelVisible=Restaura la visibilitat de l'etiqueta \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_cs.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_cs.properties new file mode 100644 index 0000000000..af6ca7c01e --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_cs.properties @@ -0,0 +1,5 @@ +ActionsToolbar.centerOnGraph = Vyst\u0159edit na graf +ActionsToolbar.centerOnZero = Vyst\u0159edit na nulu +ActionsToolbar.resetColors = Resetovat barvy +ActionsToolbar.resetLabelColors = Resetovat barvu jmenovky +ActionsToolbar.resetLabelVisible = Resetovat viditelnost jmenovky \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_de.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_de.properties new file mode 100644 index 0000000000..e7480d2208 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_de.properties @@ -0,0 +1,5 @@ +ActionsToolbar.centerOnGraph=Auf Graph zentrieren +ActionsToolbar.centerOnZero=Auf Nullpunkt zentrieren +ActionsToolbar.resetColors=Farbe zurόcksetzen +ActionsToolbar.resetLabelColors=Beschriftungsfarbe zurόcksetzen +ActionsToolbar.resetLabelVisible=Sichtbarkeit der Beschriftung zurόcksetzen \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_es.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_es.properties new file mode 100644 index 0000000000..23c13010cd --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_es.properties @@ -0,0 +1,5 @@ +ActionsToolbar.centerOnGraph=Centrar en el grafo +ActionsToolbar.centerOnZero=Centrar en el punto cero +ActionsToolbar.resetColors=Reestablecer colores +ActionsToolbar.resetLabelColors=Reestablecer colores de las etiquetas +ActionsToolbar.resetLabelVisible=Reestablecer visibilidad de las etiquetas \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_fr.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_fr.properties new file mode 100644 index 0000000000..5ea1c31eee --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_fr.properties @@ -0,0 +1,5 @@ +ActionsToolbar.centerOnGraph=Centrer sur le graphe +ActionsToolbar.centerOnZero=Centrer sur zιro +ActionsToolbar.resetColors=Rιinitialiser les couleurs +ActionsToolbar.resetLabelColors=Rιinitialiser la couleur des labels +ActionsToolbar.resetLabelVisible=Rιinitialiser la visibilitι des labels \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_hu.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_hu.properties new file mode 100644 index 0000000000..2f6ffd8ef0 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_hu.properties @@ -0,0 +1,4 @@ +ActionsToolbar.centerOnGraph=K\u00F6z\u00E9pre a grafikonon +ActionsToolbar.resetLabelVisible=A vissza\u00E1ll\u00EDt\u00E1si c\u00EDmke l\u00E1that\u00F3 +ActionsToolbar.resetColors=\u00C1ll\u00EDtsa vissza a sz\u00EDneket +ActionsToolbar.resetLabelColors=A c\u00EDmke sz\u00EDn\u00E9nek vissza\u00E1ll\u00EDt\u00E1sa \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_ja.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_ja.properties new file mode 100644 index 0000000000..4d6c103cbf --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_ja.properties @@ -0,0 +1,5 @@ +ActionsToolbar.centerOnGraph = \u30b0\u30e9\u30d5\u3092\u4e2d\u5fc3 +ActionsToolbar.centerOnZero = \u30bc\u30ed\u3092\u4e2d\u5fc3 +ActionsToolbar.resetColors = \u30ab\u30e9\u30fc\u3092\u30ea\u30bb\u30c3\u30c8 +ActionsToolbar.resetLabelColors = \u30e9\u30d9\u30eb\u30ab\u30e9\u30fc\u3092\u30ea\u30bb\u30c3\u30c8 +ActionsToolbar.resetLabelVisible = \u30e9\u30d9\u30eb\u3092\u53ef\u8996\u306b\u30ea\u30bb\u30c3\u30c8 \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_ko.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_ko.properties new file mode 100644 index 0000000000..4ddcd5de94 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_ko.properties @@ -0,0 +1,5 @@ +ActionsToolbar.centerOnZero=\uC601\uC810 \uC911\uC2EC +ActionsToolbar.centerOnGraph=\uADF8\uB798\uD504 \uC911\uC2EC +ActionsToolbar.resetLabelVisible=\uB77C\uBCA8 \uD45C\uC2DC \uC7AC\uC124\uC815 +ActionsToolbar.resetColors=\uC0C9\uC0C1 \uC7AC\uC124\uC815 +ActionsToolbar.resetLabelColors=\uB77C\uBCA8 \uC0C9\uC0C1 \uC7AC\uC124\uC815 \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_pt_BR.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_pt_BR.properties new file mode 100644 index 0000000000..867996bf43 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_pt_BR.properties @@ -0,0 +1,5 @@ +ActionsToolbar.centerOnGraph = Centralizar no grafo +ActionsToolbar.centerOnZero = Centralizar no ponto Zero +ActionsToolbar.resetColors = Restaurar cores +ActionsToolbar.resetLabelColors = Restaurar cor do rσtulo +ActionsToolbar.resetLabelVisible = Restaurar rσtulos visνveis \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_ro.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_ro.properties new file mode 100644 index 0000000000..6da40d889e --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_ro.properties @@ -0,0 +1,5 @@ +ActionsToolbar.centerOnGraph=Centrare pe graf +ActionsToolbar.centerOnZero=Centrare pe zero +ActionsToolbar.resetColors=Reseteaz\u0103 culorile +ActionsToolbar.resetLabelVisible=Reseteaz\u0103 vizibilitatea etichetelor +ActionsToolbar.resetLabelColors=Reseteaz\u0103 culorile etichetelor diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_ru.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_ru.properties new file mode 100644 index 0000000000..78de1adc8c --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_ru.properties @@ -0,0 +1,5 @@ +ActionsToolbar.centerOnGraph = \u0426\u0435\u043d\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0433\u0440\u0430\u0444\u0435 +ActionsToolbar.centerOnZero = \u0426\u0435\u043d\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043d\u0443\u043b\u0435 +ActionsToolbar.resetColors = \u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0446\u0432\u0435\u0442\u0435 \u0443\u0437\u043b\u043e\u0432 +ActionsToolbar.resetLabelColors = \u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0446\u0432\u0435\u0442\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 +ActionsToolbar.resetLabelVisible = \u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_th.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_uk.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_uk.properties new file mode 100644 index 0000000000..60bd5a1f30 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_uk.properties @@ -0,0 +1,5 @@ +ActionsToolbar.resetLabelVisible=\u0412\u0438\u0434\u043D\u043E \u043C\u0456\u0442\u043A\u0443 \u0441\u043A\u0438\u0434\u0430\u043D\u043D\u044F +ActionsToolbar.resetLabelColors=\u0421\u043A\u0438\u043D\u0443\u0442\u0438 \u043A\u043E\u043B\u0456\u0440 \u043C\u0456\u0442\u043A\u0438 +ActionsToolbar.centerOnGraph=\u0426\u0435\u043D\u0442\u0440 \u043D\u0430 \u0433\u0440\u0430\u0444\u0456\u043A\u0443 +ActionsToolbar.resetColors=\u0421\u043A\u0438\u043D\u0443\u0442\u0438 \u043A\u043E\u043B\u044C\u043E\u0440\u0438 +ActionsToolbar.centerOnZero=\u0426\u0435\u043D\u0442\u0440 \u043D\u0430 \u043D\u0443\u043B\u0456 diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_zh_CN.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_zh_CN.properties new file mode 100644 index 0000000000..5c5ef350e4 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/desktop/visualization/tools/Bundle_zh_CN.properties @@ -0,0 +1,5 @@ +ActionsToolbar.centerOnGraph=\u56fe\u4e2d\u5fc3 +ActionsToolbar.centerOnZero=\u96f6\u70b9\u4e2d\u5fc3 +ActionsToolbar.resetColors=\u91cd\u8bbe\u989c\u8272 +ActionsToolbar.resetLabelColors=\u91cd\u8bbe\u6807\u7b7e\u7684\u989c\u8272 +ActionsToolbar.resetLabelVisible=\u91cd\u8bbe\u6807\u7b7e\u53ef\u89c1 \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle.properties index 4dba7f8a9d..0d69c62d3a 100644 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle.properties +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle.properties @@ -1,6 +1,3 @@ -Actions/Window/org-gephi-visualization-component-GraphAction.instance=Graph -OpenIDE-Module-Display-Category=Gephi Core -OpenIDE-Module-Long-Description=\ - Visualization module, not modularized -OpenIDE-Module-Name=Visualization Module -OpenIDE-Module-Short-Description=Visualization module, not modularized +OpenIDE-Module-Long-Description=Implementation of Visualization API +OpenIDE-Module-Short-Description=Implementation of Visualization API +Actions/Window/org-gephi-visualization-component-GraphAction.instance=Graph \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_ar.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_ca.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_ca.properties new file mode 100644 index 0000000000..ee60e07c78 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_ca.properties @@ -0,0 +1,3 @@ +OpenIDE-Module-Long-Description=Mςdul de visualitzaciσ, no modular +OpenIDE-Module-Short-Description=Mςdul de visualitzaciσ, no modular +Actions/Window/org-gephi-visualization-component-GraphAction.instance=Graf diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_cs.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_cs.properties index 675a613313..fc97de6ae1 100644 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_cs.properties +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_cs.properties @@ -1,13 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-23 16\:57+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - +OpenIDE-Module-Long-Description=Modul vizualizace, nenν modulαrnν +OpenIDE-Module-Short-Description=Modul vizualizace, nenν modulαrnν Actions/Window/org-gephi-visualization-component-GraphAction.instance=Graf - -OpenIDE-Module-Long-Description=Modul vizualizace, nen\u00ed modul\u00e1rn\u00ed - -OpenIDE-Module-Short-Description=Modul vizualizace, nen\u00ed modul\u00e1rn\u00ed diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_de.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_de.properties new file mode 100644 index 0000000000..1bd4d3265b --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_de.properties @@ -0,0 +1,3 @@ +OpenIDE-Module-Long-Description=Visualisierungsmodul, nicht modularisiert +OpenIDE-Module-Short-Description=Visualisierungsmodul, nicht modularisiert +Actions/Window/org-gephi-visualization-component-GraphAction.instance=Graph diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_es.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_es.properties index 287836f869..cb81ed1475 100644 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_es.properties +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_es.properties @@ -1,13 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:56+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - +OpenIDE-Module-Long-Description=Modulo de visualizaciσn, no modularizado +OpenIDE-Module-Short-Description=Modulo de visualizaciσn, no modularizado Actions/Window/org-gephi-visualization-component-GraphAction.instance=Grafo - -OpenIDE-Module-Long-Description=Modulo de visualizaci\u00f3n, no modularizado - -OpenIDE-Module-Short-Description=Modulo de visualizaci\u00f3n, no modularizado diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_fr.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_fr.properties index 2c5a9e80c5..956fc635e6 100644 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_fr.properties +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_fr.properties @@ -1,13 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:56+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - +OpenIDE-Module-Long-Description=Implementation de l'API de Vizualization +OpenIDE-Module-Short-Description=Implementation de l'API de Visualisation Actions/Window/org-gephi-visualization-component-GraphAction.instance=Graphe - -OpenIDE-Module-Long-Description=Module de visualisation, non modulaire actuellement - -OpenIDE-Module-Short-Description=Module de visualisation, non modulaire diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_he.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_he.properties new file mode 100644 index 0000000000..08f7224073 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_he.properties @@ -0,0 +1,3 @@ +OpenIDE-Module-Long-Description=\u05DE\u05D5\u05D3\u05DC \u05D5\u05D9\u05D6\u05D5\u05D0\u05DC\u05D9\u05D6\u05E6\u05D9\u05D4, \u05DC\u05D0 \u05DE\u05D5\u05D3\u05D5\u05DC\u05E8\u05D9 +OpenIDE-Module-Short-Description=\u05DE\u05D5\u05D3\u05DC \u05D5\u05D9\u05D6\u05D5\u05D0\u05DC\u05D9\u05D6\u05E6\u05D9\u05D4, \u05DC\u05D0 \u05DE\u05D5\u05D3\u05D5\u05DC\u05E8\u05D9 +Actions/Window/org-gephi-visualization-component-GraphAction.instance=\u05d2\u05e8\u05e3 diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_hu.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_hu.properties new file mode 100644 index 0000000000..8e9b364918 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_hu.properties @@ -0,0 +1,5 @@ + + +Actions/Window/org-gephi-visualization-component-GraphAction.instance=Grafikon +OpenIDE-Module-Short-Description=Vizualizαciσs modul, nem modulαris +OpenIDE-Module-Long-Description=Vizualizαciσs modul, nem modulαris diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_it.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_it.properties new file mode 100644 index 0000000000..7c046ac729 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_it.properties @@ -0,0 +1,3 @@ +OpenIDE-Module-Long-Description=Visualization module, not modularized +OpenIDE-Module-Short-Description=Visualization module, not modularized +Actions/Window/org-gephi-visualization-component-GraphAction.instance=Graph diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_ja.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_ja.properties index 0e1ece88a2..719d128985 100644 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_ja.properties +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_ja.properties @@ -1,13 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-11 03\:18+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - +OpenIDE-Module-Long-Description=\u53EF\u8996\u5316\u30E2\u30B8\u30E5\u30FC\u30EB\u3001\u975E\u30E2\u30B8\u30E5\u30FC\u30EB\u5316 +OpenIDE-Module-Short-Description=\u53EF\u8996\u5316\u30E2\u30B8\u30E5\u30FC\u30EB\u3001\u975E\u30E2\u30B8\u30E5\u30FC\u30EB\u5316 Actions/Window/org-gephi-visualization-component-GraphAction.instance=\u30b0\u30e9\u30d5 - -OpenIDE-Module-Long-Description=\u53ef\u8996\u5316\u30e2\u30b8\u30e5\u30fc\u30eb\u3001\u975e\u30e2\u30b8\u30e5\u30fc\u30eb\u5316 - -OpenIDE-Module-Short-Description=\u53ef\u8996\u5316\u30e2\u30b8\u30e5\u30fc\u30eb\u3001\u975e\u30e2\u30b8\u30e5\u30fc\u30eb\u5316 diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_ko.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_ko.properties new file mode 100644 index 0000000000..da5b13653c --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_ko.properties @@ -0,0 +1,5 @@ + + +Actions/Window/org-gephi-visualization-component-GraphAction.instance=\uADF8\uB798\uD504 +OpenIDE-Module-Short-Description=\uBAA8\uB4C8\uD654\uB418\uC9C0 \uC54A\uC740 \uC2DC\uAC01\uD654 \uBAA8\uB4C8 +OpenIDE-Module-Long-Description=\uBAA8\uB4C8\uD654\uB418\uC9C0 \uC54A\uC740 \uC2DC\uAC01\uD654 \uBAA8\uB4C8 diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_nl.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_nl.properties new file mode 100644 index 0000000000..6c02d55a03 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_nl.properties @@ -0,0 +1,3 @@ +OpenIDE-Module-Long-Description=Visualization module, not modularized +OpenIDE-Module-Short-Description=Visualization module, not modularized +Actions/Window/org-gephi-visualization-component-GraphAction.instance=Graaf diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_pt_BR.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_pt_BR.properties index 01365b409b..ff498cc194 100644 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_pt_BR.properties +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_pt_BR.properties @@ -1,13 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 16\:45+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - +OpenIDE-Module-Long-Description=Mσdulo de visualizaηγo, nγo modularizado +OpenIDE-Module-Short-Description=Mσdulo de visualizaηγo, nγo modularizado Actions/Window/org-gephi-visualization-component-GraphAction.instance=Grafo - -OpenIDE-Module-Long-Description=M\u00f3dulo de visualiza\u00e7\u00e3o, n\u00e3o modularizado - -OpenIDE-Module-Short-Description=M\u00f3dulo de visualiza\u00e7\u00e3o, n\u00e3o modularizado diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_ro.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_ro.properties new file mode 100644 index 0000000000..14459859cf --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_ro.properties @@ -0,0 +1,5 @@ + + +OpenIDE-Module-Long-Description=Modul de vizualizare, nemodularizat +OpenIDE-Module-Short-Description=Modul de vizualizare, nemodularizat +Actions/Window/org-gephi-visualization-component-GraphAction.instance=Graf diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_ru.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_ru.properties index 1fb7d71adb..f20d871eb6 100644 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_ru.properties +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_ru.properties @@ -1,13 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 06\:45+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - +OpenIDE-Module-Long-Description=\u041C\u043E\u0434\u0443\u043B\u044C \u0432\u0438\u0437\u0443\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u0438, \u043D\u0435 \u043C\u043E\u0434\u0443\u043B\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439 +OpenIDE-Module-Short-Description=\u041C\u043E\u0434\u0443\u043B\u044C \u0432\u0438\u0437\u0443\u0430\u043B\u0438\u0437\u0430\u0446\u0438\u0438, \u043D\u0435 \u043C\u043E\u0434\u0443\u043B\u0438\u0440\u043E\u0432\u0430\u043D\u043D\u044B\u0439 Actions/Window/org-gephi-visualization-component-GraphAction.instance=\u0413\u0440\u0430\u0444 - -OpenIDE-Module-Long-Description=\u041c\u043e\u0434\u0443\u043b\u044c \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043d\u0435 \u043c\u043e\u0434\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 - -OpenIDE-Module-Short-Description=\u041c\u043e\u0434\u0443\u043b\u044c \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u043d\u0435 \u043c\u043e\u0434\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0439 diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_th.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_tr.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_tr.properties new file mode 100644 index 0000000000..7c046ac729 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_tr.properties @@ -0,0 +1,3 @@ +OpenIDE-Module-Long-Description=Visualization module, not modularized +OpenIDE-Module-Short-Description=Visualization module, not modularized +Actions/Window/org-gephi-visualization-component-GraphAction.instance=Graph diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_uk.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_uk.properties new file mode 100644 index 0000000000..73d6c5c228 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_uk.properties @@ -0,0 +1,3 @@ +OpenIDE-Module-Long-Description=\u0420\u0435\u0430\u043B\u0456\u0437\u0430\u0446\u0456\u044F API \u0432\u0456\u0437\u0443\u0430\u043B\u0456\u0437\u0430\u0446\u0456\u0457 +OpenIDE-Module-Short-Description=\u0420\u0435\u0430\u043B\u0456\u0437\u0430\u0446\u0456\u044F API \u0432\u0456\u0437\u0443\u0430\u043B\u0456\u0437\u0430\u0446\u0456\u0457 +Actions/Window/org-gephi-visualization-component-GraphAction.instance=\u0413\u0440\u0430\u0444\u0456\u043A diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_zh_CN.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_zh_CN.properties index a0ef49cb5a..dd8598cd35 100644 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_zh_CN.properties +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_zh_CN.properties @@ -1,12 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:04+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - +OpenIDE-Module-Long-Description=\u53EF\u89C6\u5316\u6A21\u5757\uFF0C\u672A\u6A21\u5757\u5316 +OpenIDE-Module-Short-Description=\u53EF\u89C6\u5316\u6A21\u5757\uFF0C\u672A\u6A21\u5757\u5316 Actions/Window/org-gephi-visualization-component-GraphAction.instance=\u56fe - -OpenIDE-Module-Long-Description=\u53ef\u89c6\u5316\u6a21\u5757\uff0c\u672a\u6a21\u5757\u5316 - -OpenIDE-Module-Short-Description=\u53ef\u89c6\u5316\u6a21\u5757\uff0c\u672a\u6a21\u5757\u5316 diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_zh_TW.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_zh_TW.properties new file mode 100644 index 0000000000..7c046ac729 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/Bundle_zh_TW.properties @@ -0,0 +1,3 @@ +OpenIDE-Module-Long-Description=Visualization module, not modularized +OpenIDE-Module-Short-Description=Visualization module, not modularized +Actions/Window/org-gephi-visualization-component-GraphAction.instance=Graph diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/api/resources/contract.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/api/resources/contract.png deleted file mode 100644 index d2aba04ccb..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/api/resources/contract.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/api/resources/delete.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/api/resources/delete.png deleted file mode 100644 index 6b9fa6dd36..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/api/resources/delete.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/api/resources/expand.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/api/resources/expand.png deleted file mode 100644 index 689d4b841c..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/api/resources/expand.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/api/resources/free.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/api/resources/free.png deleted file mode 100644 index a9994ae1f6..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/api/resources/free.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/api/resources/group.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/api/resources/group.png deleted file mode 100644 index f18a8e3edc..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/api/resources/group.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/api/resources/new-workspace.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/api/resources/new-workspace.png deleted file mode 100644 index 6a88c4da92..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/api/resources/new-workspace.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/api/resources/settle.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/api/resources/settle.png deleted file mode 100644 index 3d6f96d423..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/api/resources/settle.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/api/resources/table-select.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/api/resources/table-select.png deleted file mode 100644 index e96313c208..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/api/resources/table-select.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/api/resources/ungroup.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/api/resources/ungroup.png deleted file mode 100644 index b22b6285fe..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/api/resources/ungroup.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/Bundle.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/Bundle.properties deleted file mode 100644 index 7e1cf50f24..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/Bundle.properties +++ /dev/null @@ -1,15 +0,0 @@ -GraphContextMenu_Group = Group -GraphContextMenu_Ungroup = Ungroup -GraphContextMenu_Expand = Expand -GraphContextMenu_Contract = Contract -GraphContextMenu_Settle = Settle -GraphContextMenu_Free = Free -GraphContextMenu_Delete = Delete -GraphContextMenu_MoveToWorkspace = Move to... -GraphContextMenu_MoveToWorkspace_NewWorkspace = New workspace -GraphContextMenu_CopyToWorkspace = Copy to... -GraphContextMenu_CopyToWorkspace_NewWorkspace = New workspace - -GraphContextMenu.Delete.message = Nodes will be deleted, do you want to proceed? -GraphContextMenu.Delete.message.title = Delete nodes -GraphContextMenu_SelectInDataLaboratory = Select in data laboratory \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/Bundle_cs.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/Bundle_cs.properties deleted file mode 100644 index 51cdf92d0f..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/Bundle_cs.properties +++ /dev/null @@ -1,35 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-30 21\:19+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -GraphContextMenu_Group=Seskupit - -GraphContextMenu_Ungroup=Odd\u011blit - -GraphContextMenu_Expand=Rozt\u00e1hnout - -GraphContextMenu_Contract=Smr\u0161tit - -GraphContextMenu_Settle=Usadit - -GraphContextMenu_Free=Uvolnit - -GraphContextMenu_Delete=Smazat - -GraphContextMenu_MoveToWorkspace=P\u0159esunout do... - -GraphContextMenu_MoveToWorkspace_NewWorkspace=Nov\u00fd pracovn\u00ed prostor - -GraphContextMenu_CopyToWorkspace=Kop\u00edrovat do... - -GraphContextMenu_CopyToWorkspace_NewWorkspace=Nov\u00fd pracovn\u00ed prostor - -GraphContextMenu.Delete.message=Uzle budou smaz\u00e1ny, chcete pokra\u010dovat? - -GraphContextMenu.Delete.message.title=Smazat uzle - -GraphContextMenu_SelectInDataLaboratory=Vybrat v laborato\u0159i dat diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/Bundle_es.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/Bundle_es.properties deleted file mode 100644 index ce3c214da0..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/Bundle_es.properties +++ /dev/null @@ -1,35 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:56+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -GraphContextMenu_Group=Agrupar - -GraphContextMenu_Ungroup=Desagrupar - -GraphContextMenu_Expand=Expandir - -GraphContextMenu_Contract=Contraer - -GraphContextMenu_Settle=Bloquear - -GraphContextMenu_Free=Desbloquear - -GraphContextMenu_Delete=Eliminar - -GraphContextMenu_MoveToWorkspace=Mover a... - -GraphContextMenu_MoveToWorkspace_NewWorkspace=Nuevo espacio de trabajo - -GraphContextMenu_CopyToWorkspace=Copiar a... - -GraphContextMenu_CopyToWorkspace_NewWorkspace=Nuevo espacio de trabajo - -GraphContextMenu.Delete.message=Los nodos ser\u00e1n eliminados, \u00bfContinuar? - -GraphContextMenu.Delete.message.title=Eliminar nodos - -GraphContextMenu_SelectInDataLaboratory=Seleccionar en laboratorio de datos diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/Bundle_fr.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/Bundle_fr.properties deleted file mode 100644 index a5a6182f0f..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/Bundle_fr.properties +++ /dev/null @@ -1,35 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:56+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -GraphContextMenu_Group=Grouper - -GraphContextMenu_Ungroup=D\u00e9grouper - -GraphContextMenu_Expand=\u00c9tendre - -GraphContextMenu_Contract=Contracter - -GraphContextMenu_Settle=Fixer - -GraphContextMenu_Free=Lib\u00e9rer - -GraphContextMenu_Delete=Supprimer - -GraphContextMenu_MoveToWorkspace=D\u00e9placer vers... - -GraphContextMenu_MoveToWorkspace_NewWorkspace=Nouvel espace de travail - -GraphContextMenu_CopyToWorkspace=Copier vers... - -GraphContextMenu_CopyToWorkspace_NewWorkspace=Nouvel espace de travail - -GraphContextMenu.Delete.message=Les noeuds seront supprim\u00e9s. Voulez-vous continuer ? - -GraphContextMenu.Delete.message.title=Suppression des noeuds - -GraphContextMenu_SelectInDataLaboratory=S\u00e9lectionner dans le Laboratoire de Donn\u00e9es diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/Bundle_ja.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/Bundle_ja.properties deleted file mode 100644 index f204951de0..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/Bundle_ja.properties +++ /dev/null @@ -1,35 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-02 11\:28+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -GraphContextMenu_Group=\u30b0\u30eb\u30fc\u30d7\u5316 - -GraphContextMenu_Ungroup=\u30b0\u30eb\u30fc\u30d7\u5316\u89e3\u9664 - -GraphContextMenu_Expand=\u62e1\u5927 - -GraphContextMenu_Contract=\u7e2e\u5c0f - -GraphContextMenu_Settle=\u56fa\u5b9a - -GraphContextMenu_Free=\u53ef\u52d5 - -GraphContextMenu_Delete=\u6d88\u53bb - -GraphContextMenu_MoveToWorkspace=\u79fb\u52d5... - -GraphContextMenu_MoveToWorkspace_NewWorkspace=\u65b0\u898f\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9 - -GraphContextMenu_CopyToWorkspace=\u30b3\u30d4\u30fc... - -GraphContextMenu_CopyToWorkspace_NewWorkspace=\u65b0\u898f\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9 - -GraphContextMenu.Delete.message=\u30ce\u30fc\u30c9\u306f\u6d88\u53bb\u3055\u308c\u307e\u3059\u3001\u7d99\u7d9a\u3057\u307e\u3059\u304b\uff1f - -GraphContextMenu.Delete.message.title=\u30ce\u30fc\u30c9\u3092\u6d88\u53bb - -GraphContextMenu_SelectInDataLaboratory=\u30c7\u30fc\u30bf\u5de5\u623f\u3067\u9078\u629e diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/Bundle_pt_BR.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/Bundle_pt_BR.properties deleted file mode 100644 index 56f6163f17..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/Bundle_pt_BR.properties +++ /dev/null @@ -1,35 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-06 01\:19+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -GraphContextMenu_Group=Agrupar - -GraphContextMenu_Ungroup=Desagrupar - -GraphContextMenu_Expand=Expandir - -GraphContextMenu_Contract=Contrair - -GraphContextMenu_Settle=Em bloco - -GraphContextMenu_Free=Livre - -GraphContextMenu_Delete=Excluir - -GraphContextMenu_MoveToWorkspace=Mover para... - -GraphContextMenu_MoveToWorkspace_NewWorkspace=Nova \u00c1rea de Trabalho - -GraphContextMenu_CopyToWorkspace=Copiar para... - -GraphContextMenu_CopyToWorkspace_NewWorkspace=Nova \u00c1rea de Trabalho - -GraphContextMenu.Delete.message=Os n\u00f3s ser\u00e3o exclu\u00eddos. Deseja continuar? - -GraphContextMenu.Delete.message.title=Excluir n\u00f3s - -GraphContextMenu_SelectInDataLaboratory=Selecionar no Laborat\u00f3rio de Dados diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/Bundle_ru.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/Bundle_ru.properties deleted file mode 100644 index c4537cf01f..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/Bundle_ru.properties +++ /dev/null @@ -1,35 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-10-14 08\:02+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -GraphContextMenu_Group=\u0421\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c - -GraphContextMenu_Ungroup=\u0420\u0430\u0441\u0433\u0440\u0443\u043f\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c - -GraphContextMenu_Expand=\u0420\u0430\u0441\u0448\u0438\u0440\u0438\u0442\u044c - -GraphContextMenu_Contract=\u0421\u0436\u0430\u0442\u044c - -GraphContextMenu_Settle=\u0417\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c - -GraphContextMenu_Free=\u041e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c - -GraphContextMenu_Delete=\u0423\u0434\u0430\u043b\u0438\u0442\u044c - -GraphContextMenu_MoveToWorkspace=\u041f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u043d\u0430... - -GraphContextMenu_MoveToWorkspace_NewWorkspace=\u041d\u043e\u0432\u0443\u044e \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c - -GraphContextMenu_CopyToWorkspace=\u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430... - -GraphContextMenu_CopyToWorkspace_NewWorkspace=\u041d\u043e\u0432\u0443\u044e \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c - -GraphContextMenu.Delete.message=\u0423\u0437\u043b\u044b \u0431\u0443\u0434\u0443\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u044b, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c? - -GraphContextMenu.Delete.message.title=\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0443\u0437\u043b\u043e\u0432 - -GraphContextMenu_SelectInDataLaboratory=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0432 \u043e\u043a\u043d\u0435 \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/Bundle_zh_CN.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/Bundle_zh_CN.properties deleted file mode 100644 index 2c56917078..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/Bundle_zh_CN.properties +++ /dev/null @@ -1,34 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:05+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -GraphContextMenu_Group=\u7ec4\u5408 - -GraphContextMenu_Ungroup=\u53d6\u6d88\u7ec4\u5408 - -GraphContextMenu_Expand=\u5c55\u5f00 - -GraphContextMenu_Contract=\u5408\u540c - -GraphContextMenu_Settle=\u8bbe\u7f6e - -GraphContextMenu_Free=\u91ca\u653e - -GraphContextMenu_Delete=\u5220\u9664 - -GraphContextMenu_MoveToWorkspace=\u79fb\u81f3... - -GraphContextMenu_MoveToWorkspace_NewWorkspace=\u65b0\u5efa\u5de5\u4f5c\u95f4 - -GraphContextMenu_CopyToWorkspace=\u590d\u5236\u5230... - -GraphContextMenu_CopyToWorkspace_NewWorkspace=\u65b0\u5efa\u5de5\u4f5c\u95f4 - -GraphContextMenu.Delete.message=\u5c06\u5220\u9664\u7ed3\u70b9\uff0c\u7ee7\u7eed\uff1f - -GraphContextMenu.Delete.message.title=\u5220\u9664\u8282\u70b9 - -GraphContextMenu_SelectInDataLaboratory=\u6570\u636e\u5b9e\u9a8c\u5ba4\u4e2d\u9009\u62e9 diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/cs.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/cs.po deleted file mode 100644 index 9050e8fd82..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/cs.po +++ /dev/null @@ -1,61 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-30 21:19+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "GraphContextMenu_Group" -msgstr "Seskupit" - -msgid "GraphContextMenu_Ungroup" -msgstr "OddΔ›lit" - -msgid "GraphContextMenu_Expand" -msgstr "RoztΓ‘hnout" - -msgid "GraphContextMenu_Contract" -msgstr "SmrΕ‘tit" - -msgid "GraphContextMenu_Settle" -msgstr "Usadit" - -msgid "GraphContextMenu_Free" -msgstr "Uvolnit" - -msgid "GraphContextMenu_Delete" -msgstr "Smazat" - -msgid "GraphContextMenu_MoveToWorkspace" -msgstr "PΕ™esunout do..." - -msgid "GraphContextMenu_MoveToWorkspace_NewWorkspace" -msgstr "NovΓ½ pracovnΓ­ prostor" - -msgid "GraphContextMenu_CopyToWorkspace" -msgstr "KopΓ­rovat do..." - -msgid "GraphContextMenu_CopyToWorkspace_NewWorkspace" -msgstr "NovΓ½ pracovnΓ­ prostor" - -msgid "GraphContextMenu.Delete.message" -msgstr "Uzle budou smazΓ‘ny, chcete pokračovat?" - -msgid "GraphContextMenu.Delete.message.title" -msgstr "Smazat uzle" - -msgid "GraphContextMenu_SelectInDataLaboratory" -msgstr "Vybrat v laboratoΕ™i dat" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/es.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/es.po deleted file mode 100644 index 056e8b4a8d..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/es.po +++ /dev/null @@ -1,61 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:56+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "GraphContextMenu_Group" -msgstr "Agrupar" - -msgid "GraphContextMenu_Ungroup" -msgstr "Desagrupar" - -msgid "GraphContextMenu_Expand" -msgstr "Expandir" - -msgid "GraphContextMenu_Contract" -msgstr "Contraer" - -msgid "GraphContextMenu_Settle" -msgstr "Bloquear" - -msgid "GraphContextMenu_Free" -msgstr "Desbloquear" - -msgid "GraphContextMenu_Delete" -msgstr "Eliminar" - -msgid "GraphContextMenu_MoveToWorkspace" -msgstr "Mover a..." - -msgid "GraphContextMenu_MoveToWorkspace_NewWorkspace" -msgstr "Nuevo espacio de trabajo" - -msgid "GraphContextMenu_CopyToWorkspace" -msgstr "Copiar a..." - -msgid "GraphContextMenu_CopyToWorkspace_NewWorkspace" -msgstr "Nuevo espacio de trabajo" - -msgid "GraphContextMenu.Delete.message" -msgstr "Los nodos serΓ‘n eliminados, ΒΏContinuar?" - -msgid "GraphContextMenu.Delete.message.title" -msgstr "Eliminar nodos" - -msgid "GraphContextMenu_SelectInDataLaboratory" -msgstr "Seleccionar en laboratorio de datos" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/fr.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/fr.po deleted file mode 100644 index 42bc849f26..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/fr.po +++ /dev/null @@ -1,61 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:56+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "GraphContextMenu_Group" -msgstr "Grouper" - -msgid "GraphContextMenu_Ungroup" -msgstr "DΓ©grouper" - -msgid "GraphContextMenu_Expand" -msgstr "Γ‰tendre" - -msgid "GraphContextMenu_Contract" -msgstr "Contracter" - -msgid "GraphContextMenu_Settle" -msgstr "Fixer" - -msgid "GraphContextMenu_Free" -msgstr "LibΓ©rer" - -msgid "GraphContextMenu_Delete" -msgstr "Supprimer" - -msgid "GraphContextMenu_MoveToWorkspace" -msgstr "DΓ©placer vers..." - -msgid "GraphContextMenu_MoveToWorkspace_NewWorkspace" -msgstr "Nouvel espace de travail" - -msgid "GraphContextMenu_CopyToWorkspace" -msgstr "Copier vers..." - -msgid "GraphContextMenu_CopyToWorkspace_NewWorkspace" -msgstr "Nouvel espace de travail" - -msgid "GraphContextMenu.Delete.message" -msgstr "Les noeuds seront supprimΓ©s. Voulez-vous continuer ?" - -msgid "GraphContextMenu.Delete.message.title" -msgstr "Suppression des noeuds" - -msgid "GraphContextMenu_SelectInDataLaboratory" -msgstr "SΓ©lectionner dans le Laboratoire de DonnΓ©es" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/ja.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/ja.po deleted file mode 100644 index a26809f9ed..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/ja.po +++ /dev/null @@ -1,61 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-02 11:28+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "GraphContextMenu_Group" -msgstr "γ‚°γƒ«γƒΌγƒ—εŒ–" - -msgid "GraphContextMenu_Ungroup" -msgstr "γ‚°γƒ«γƒΌγƒ—εŒ–θ§£ι™€" - -msgid "GraphContextMenu_Expand" -msgstr "ζ‹‘ε€§" - -msgid "GraphContextMenu_Contract" -msgstr "ηΈε°" - -msgid "GraphContextMenu_Settle" -msgstr "ε›Ίεš" - -msgid "GraphContextMenu_Free" -msgstr "可動" - -msgid "GraphContextMenu_Delete" -msgstr "梈去" - -msgid "GraphContextMenu_MoveToWorkspace" -msgstr "η§»ε‹•..." - -msgid "GraphContextMenu_MoveToWorkspace_NewWorkspace" -msgstr "ζ–°θ¦γƒ―γƒΌγ‚―γ‚ΉγƒšγƒΌγ‚Ή" - -msgid "GraphContextMenu_CopyToWorkspace" -msgstr "コピー..." - -msgid "GraphContextMenu_CopyToWorkspace_NewWorkspace" -msgstr "ζ–°θ¦γƒ―γƒΌγ‚―γ‚ΉγƒšγƒΌγ‚Ή" - -msgid "GraphContextMenu.Delete.message" -msgstr "γƒŽγƒΌγƒ‰γ―ζΆˆεŽ»γ•γ‚ŒγΎγ™γ€ηΆ™ηΆšγ—γΎγ™γ‹οΌŸ" - -msgid "GraphContextMenu.Delete.message.title" -msgstr "γƒŽγƒΌγƒ‰γ‚’ζΆˆεŽ»" - -msgid "GraphContextMenu_SelectInDataLaboratory" -msgstr "データε·₯房で選択" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/org-gephi-visualization-apiimpl-contextmenuitems.pot b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/org-gephi-visualization-apiimpl-contextmenuitems.pot deleted file mode 100644 index dc51b9481d..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/org-gephi-visualization-apiimpl-contextmenuitems.pot +++ /dev/null @@ -1,58 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "GraphContextMenu_Group" -msgstr "Group" - -msgid "GraphContextMenu_Ungroup" -msgstr "Ungroup" - -msgid "GraphContextMenu_Expand" -msgstr "Expand" - -msgid "GraphContextMenu_Contract" -msgstr "Contract" - -msgid "GraphContextMenu_Settle" -msgstr "Settle" - -msgid "GraphContextMenu_Free" -msgstr "Free" - -msgid "GraphContextMenu_Delete" -msgstr "Delete" - -msgid "GraphContextMenu_MoveToWorkspace" -msgstr "Move to..." - -msgid "GraphContextMenu_MoveToWorkspace_NewWorkspace" -msgstr "New workspace" - -msgid "GraphContextMenu_CopyToWorkspace" -msgstr "Copy to..." - -msgid "GraphContextMenu_CopyToWorkspace_NewWorkspace" -msgstr "New workspace" - -msgid "GraphContextMenu.Delete.message" -msgstr "Nodes will be deleted, do you want to proceed?" - -msgid "GraphContextMenu.Delete.message.title" -msgstr "Delete nodes" - -msgid "GraphContextMenu_SelectInDataLaboratory" -msgstr "Select in data laboratory" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/pt_BR.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/pt_BR.po deleted file mode 100644 index 58fbeb4ebc..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/pt_BR.po +++ /dev/null @@ -1,61 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-06 01:19+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "GraphContextMenu_Group" -msgstr "Agrupar" - -msgid "GraphContextMenu_Ungroup" -msgstr "Desagrupar" - -msgid "GraphContextMenu_Expand" -msgstr "Expandir" - -msgid "GraphContextMenu_Contract" -msgstr "Contrair" - -msgid "GraphContextMenu_Settle" -msgstr "Em bloco" - -msgid "GraphContextMenu_Free" -msgstr "Livre" - -msgid "GraphContextMenu_Delete" -msgstr "Excluir" - -msgid "GraphContextMenu_MoveToWorkspace" -msgstr "Mover para..." - -msgid "GraphContextMenu_MoveToWorkspace_NewWorkspace" -msgstr "Nova Área de Trabalho" - -msgid "GraphContextMenu_CopyToWorkspace" -msgstr "Copiar para..." - -msgid "GraphContextMenu_CopyToWorkspace_NewWorkspace" -msgstr "Nova Área de Trabalho" - -msgid "GraphContextMenu.Delete.message" -msgstr "Os nΓ³s serΓ£o excluΓ­dos. Deseja continuar?" - -msgid "GraphContextMenu.Delete.message.title" -msgstr "Excluir nΓ³s" - -msgid "GraphContextMenu_SelectInDataLaboratory" -msgstr "Selecionar no LaboratΓ³rio de Dados" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/ru.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/ru.po deleted file mode 100644 index c60af1e1ca..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/ru.po +++ /dev/null @@ -1,61 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-10-14 08:02+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "GraphContextMenu_Group" -msgstr "Π‘Π³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ" - -msgid "GraphContextMenu_Ungroup" -msgstr "Π Π°ΡΠ³Ρ€ΡƒΠΏΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ" - -msgid "GraphContextMenu_Expand" -msgstr "Π Π°ΡΡˆΠΈΡ€ΠΈΡ‚ΡŒ" - -msgid "GraphContextMenu_Contract" -msgstr "Π‘ΠΆΠ°Ρ‚ΡŒ" - -msgid "GraphContextMenu_Settle" -msgstr "Π—Π°Ρ„ΠΈΠΊΡΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ" - -msgid "GraphContextMenu_Free" -msgstr "ΠžΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ‚ΡŒ" - -msgid "GraphContextMenu_Delete" -msgstr "Π£Π΄Π°Π»ΠΈΡ‚ΡŒ" - -msgid "GraphContextMenu_MoveToWorkspace" -msgstr "ΠŸΠ΅Ρ€Π΅Π½Π΅ΡΡ‚ΠΈ Π½Π°..." - -msgid "GraphContextMenu_MoveToWorkspace_NewWorkspace" -msgstr "ΠΠΎΠ²ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ" - -msgid "GraphContextMenu_CopyToWorkspace" -msgstr "Π‘ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°..." - -msgid "GraphContextMenu_CopyToWorkspace_NewWorkspace" -msgstr "ΠΠΎΠ²ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ" - -msgid "GraphContextMenu.Delete.message" -msgstr "Π£Π·Π»Ρ‹ Π±ΡƒΠ΄ΡƒΡ‚ ΡƒΠ΄Π°Π»Π΅Π½Ρ‹, ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ?" - -msgid "GraphContextMenu.Delete.message.title" -msgstr "Π£Π΄Π°Π»Π΅Π½ΠΈΠ΅ ΡƒΠ·Π»ΠΎΠ²" - -msgid "GraphContextMenu_SelectInDataLaboratory" -msgstr "Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π² ΠΎΠΊΠ½Π΅ Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ…" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/zh_CN.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/zh_CN.po deleted file mode 100644 index 6da2f70a31..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/apiimpl/contextmenuitems/zh_CN.po +++ /dev/null @@ -1,60 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:05+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "GraphContextMenu_Group" -msgstr "η»„εˆ" - -msgid "GraphContextMenu_Ungroup" -msgstr "ε–ζΆˆη»„εˆ" - -msgid "GraphContextMenu_Expand" -msgstr "展开" - -msgid "GraphContextMenu_Contract" -msgstr "合同" - -msgid "GraphContextMenu_Settle" -msgstr "θΎη½" - -msgid "GraphContextMenu_Free" -msgstr "ι‡Šζ”Ύ" - -msgid "GraphContextMenu_Delete" -msgstr "εˆ ι™€" - -msgid "GraphContextMenu_MoveToWorkspace" -msgstr "移至..." - -msgid "GraphContextMenu_MoveToWorkspace_NewWorkspace" -msgstr "ζ–°ε»Ίε·₯δ½œι—΄" - -msgid "GraphContextMenu_CopyToWorkspace" -msgstr "倍刢到..." - -msgid "GraphContextMenu_CopyToWorkspace_NewWorkspace" -msgstr "ζ–°ε»Ίε·₯δ½œι—΄" - -msgid "GraphContextMenu.Delete.message" -msgstr "ε°†εˆ ι™€η»“η‚ΉοΌŒη»§η»­οΌŸ" - -msgid "GraphContextMenu.Delete.message.title" -msgstr "εˆ ι™€θŠ‚η‚Ή" - -msgid "GraphContextMenu_SelectInDataLaboratory" -msgstr "ζ•°ζεžιͺŒε€δΈ­ι€‰ζ‹©" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle.properties index 949170688a..c081bb02a6 100644 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle.properties +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle.properties @@ -1,84 +1,4 @@ CTL_GraphAction=Graph CTL_GraphTopComponent=Graph -!HINT_GraphTopComponent= -GraphTopComponent.jToggleButton1.TabConstraints.tabTitle=tab2 -GraphTopComponent.jToggleButton2.TabConstraints.tabTitle=tab2 -CollapsePanel.extendButton.text= GraphTopComponent.waitingLabel.text=Initializing... - -VizToolbar.Global.background = Background color (left click to switch black-white, right click to choose color) -VizToolbar.Global.groupBarTitle = Global -VizToolbar.Global.screenshot = Take screenshot -VizToolbar.Global.screenshot.configure = Configure... -VizToolbar.Nodes.groupBarTitle = Nodes -VizToolbar.Nodes.showLabels = Show Node Labels -VizToolbar.Nodes.showHulls = Show Hulls -VizToolbar.Edges.showEdges = Show Edges -VizToolbar.Edges.edgeNodeColor = Edges have source node color -VizToolbar.Edges.showLabels = Show Edge Labels -VizToolbar.Edges.edgeScale = Edge weight scale -VizToolbar.Edges.groupBarTitle = Edges -VizToolbar.Labels.font = Font -VizToolbar.Labels.defaultColor = Default color -VizToolbar.Labels.sizeMode = Size mode -VizToolbar.Labels.colorMode = Color mode -VizToolbar.Labels.attributes = Attributes -VizToolbar.Labels.fontScale = Font size scale -VizToolbar.Labels.groupBarTitle = Labels -NodeSettingsPanel.adjustTextCheckbox.text=Adjust to text -NodeSettingsPanel.labelShape.text=Default shape: -NodeSettingsPanel.defaultShape.message3d=This shape is a 3d shape, the engine will be reinitialized. Do you want to proceed ? -NodeSettingsPanel.defaultShape.message.title = Default shape -NodeSettingsPanel.defaultShape.message2d=This shape is a 2d shape, the engine will be reinitialized. Do you want to proceed ? -EdgeSettingsPanel.labelEdgeColor.text=Edge default color: -EdgeSettingsPanel.edgeColorButton.text= -EdgeSettingsPanel.sourceNodeColorCheckbox.text=Source node color -EdgeSettingsPanel.showEdgesCheckbox.text=Show -GlobalSettingsPanel.backgroundColorButton.text= -GlobalSettingsPanel.hightlightCheckBox.text=Highlight selection -GlobalSettingsPanel.labelBackgroundColor.text=Background color: -GlobalSettingsPanel.autoSelectNeigborCheckbox.text=Autoselect neighbor -LabelSettingsPanel.labelNodeFont.text=Font: -LabelSettingsPanel.nodeColorButton.text= -LabelSettingsPanel.showNodeLabelsCheckbox.text=Node -LabelSettingsPanel.nodeFontButton.text= -LabelSettingsPanel.showEdgeLabelsCheckbox.text=Edge -LabelSettingsPanel.labelEdgeFont.text=Font: -LabelSettingsPanel.edgeFontButton.text= -LabelSettingsPanel.labelEdgeColor.text=Color: -LabelSettingsPanel.labelNodeColor.text=Color: -LabelSettingsPanel.labelNodeSize.text=Size: -LabelSettingsPanel.labelEdgeSize.text=Size: -LabelSettingsPanel.edgeColorButton.text= -LabelSettingsPanel.labelSizeMode.text=Size: -LabelSettingsPanel.labelColorMode.text=Color: -LabelSettingsPanel.hideNonSelectedCheckbox.text=Hide non-selected -SelectionToolbar.rectangle.tooltip = Rectangle selection -SelectionToolbar.mouse.tooltip = Direct selection -SelectionToolbar.drag.tooltip = Drag - -ActionsToolbar.centerOnGraph = Center On Graph -ActionsToolbar.centerOnZero = Center On Zero -ActionsToolbar.resetColors = Reset colors -ActionsToolbar.resetSizes = Reset size -ActionsToolbar.resetSizes.dialog = Set size -ActionsToolbar.resetLabelColors = Reset label color -ActionsToolbar.resetLabelSizes = Reset label size -ActionsToolbar.resetLabelVisible = Reset label visible - -LabelAttributesPanel.title = Label text settings -LabelAttributesPanel.nodesToggleButton.text=Nodes -LabelAttributesPanel.edgesToggleButton.text=Edges -LabelAttributesPanel.labelComment.text=Select attributes to display as labels -LabelAttributesPanel.showPropertiesCheckbox.text=Show properties -LabelSettingsPanel.configureLabelsButton.text=Configure... -EdgeSettingsPanel.selectionColorCheckbox.toolTipText=Draw particular color for selected edges -EdgeSettingsPanel.selectionColorCheckbox.text=Selection color -EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText=Edge IN<- Color -EdgeSettingsPanel.labelScale.text=Scale -EdgeSettingsPanel.labelIn.text=In: -EdgeSettingsPanel.labelOut.text=Out: -EdgeSettingsPanel.labelBoth.text=Both: -EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText=Edge Out-> Color -EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText=Edge Both<-> Color -GlobalSettingsPanel.labelZoom.text=Zoom +VizEngineGraphCanvasManager.opengl.unsupported.message=Gephi requires OpenGL 2.0 or later, but your system only provides OpenGL {1} ({0}).\n\nThis usually means your graphics driver is not installed or you are running in a remote desktop session without GPU acceleration.\n\nPlease install or update your graphics driver and restart Gephi. \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_ar.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_ca.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_ca.properties new file mode 100644 index 0000000000..f5179a3be4 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_ca.properties @@ -0,0 +1,3 @@ +CTL_GraphAction=Graf +CTL_GraphTopComponent=Graf +GraphTopComponent.waitingLabel.text=Engegant... \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_cs.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_cs.properties index 7442485c9c..673bbb220c 100644 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_cs.properties +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_cs.properties @@ -1,155 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2011-2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-17 06\:45+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -CTL_GraphAction=Graf - -CTL_GraphTopComponent=Graf - -GraphTopComponent.jToggleButton1.TabConstraints.tabTitle=tab2 - -GraphTopComponent.jToggleButton2.TabConstraints.tabTitle=tab2 - -GraphTopComponent.waitingLabel.text=Zav\u00e1d\u011bn\u00ed... - -VizToolbar.Global.background=Barva pozad\u00ed (klikn\u011bte lev\u00fdm tla\u010d\u00edtkem pro p\u0159epnut\u00ed na \u010dernob\u00edlou, prav\u00fdm tla\u010d\u00edtkem pro v\u00fdb\u011br barvy) - -VizToolbar.Global.groupBarTitle=Glob\u00e1ln\u00ed - -VizToolbar.Global.screenshot=Po\u0159\u00eddit sn\u00edmek obrazovky - -VizToolbar.Global.screenshot.configure=Nastavit... - -VizToolbar.Nodes.groupBarTitle=Uzly - -VizToolbar.Nodes.showLabels=Zobrazit \u0161t\u00edtky uzle - -VizToolbar.Nodes.showHulls=Zobrazit okraje - -VizToolbar.Edges.showEdges=Zobrazit hrany - -VizToolbar.Edges.edgeNodeColor=Hrany maj\u00ed barvu zdrojov\u00e9ho uzle - -VizToolbar.Edges.showLabels=Zobrazit \u0161t\u00edtky hran - -VizToolbar.Edges.edgeScale=Stupnice v\u00e1hy hrany - -VizToolbar.Edges.groupBarTitle=Hrany - -VizToolbar.Labels.font=P\u00edsmo - -VizToolbar.Labels.defaultColor=V\u00fdchoz\u00ed barva - -VizToolbar.Labels.sizeMode=Re\u017eim velikosti - -VizToolbar.Labels.colorMode=Barevn\u00fd re\u017eim - -VizToolbar.Labels.attributes=Vlastnosti - -VizToolbar.Labels.fontScale=Stupnice velikosti p\u00edsma - -VizToolbar.Labels.groupBarTitle=Jmenovky - -NodeSettingsPanel.adjustTextCheckbox.text=Upravit pro text - -NodeSettingsPanel.labelShape.text=V\u00fdchoz\u00ed tvar\: - -NodeSettingsPanel.defaultShape.message3d=Tento tvar je 3d tvar, j\u00e1dro bude znovu zavedeno. Chcete pokra\u010dovat? - -NodeSettingsPanel.defaultShape.message.title=V\u00fdchoz\u00ed tvar - -NodeSettingsPanel.defaultShape.message2d=Tento tvar je 2d tvar, j\u00e1dro bude znovu zavedeno. Chcete pokra\u010dovat? - -EdgeSettingsPanel.labelEdgeColor.text=V\u00fdchoz\u00ed barva hrany\: - -EdgeSettingsPanel.sourceNodeColorCheckbox.text=Barva zdrojov\u00e9ho uzle - -EdgeSettingsPanel.showEdgesCheckbox.text=Zobrazit - -GlobalSettingsPanel.hightlightCheckBox.text=Zv\u00fdraznit v\u00fdb\u011br - -GlobalSettingsPanel.labelBackgroundColor.text=Barva pozad\u00ed\: - -GlobalSettingsPanel.autoSelectNeigborCheckbox.text=Automatick\u00fd v\u00fdb\u011br bl\u00edzk\u00e9ho - -LabelSettingsPanel.labelNodeFont.text=P\u00edsmo\: - -LabelSettingsPanel.showNodeLabelsCheckbox.text=Uzel - -LabelSettingsPanel.showEdgeLabelsCheckbox.text=Hrana - -LabelSettingsPanel.labelEdgeFont.text=P\u00edsmo\: - -LabelSettingsPanel.labelEdgeColor.text=Barva\: - -LabelSettingsPanel.labelNodeColor.text=Barva\: - -LabelSettingsPanel.labelNodeSize.text=Velikost\: - -LabelSettingsPanel.labelEdgeSize.text=Velikost\: - -LabelSettingsPanel.labelSizeMode.text=Velikost\: - -LabelSettingsPanel.labelColorMode.text=Barva\: - -LabelSettingsPanel.hideNonSelectedCheckbox.text=Skr\u00fdt nevybran\u00e9 - -SelectionToolbar.rectangle.tooltip=Obd\u00e9ln\u00edkov\u00fd v\u00fdb\u011br - -SelectionToolbar.mouse.tooltip=P\u0159\u00edm\u00fd v\u00fdb\u011br - -SelectionToolbar.drag.tooltip=T\u00e1hnout - -ActionsToolbar.centerOnGraph=Vyst\u0159edit na graf - -ActionsToolbar.centerOnZero=Vyst\u0159edit na nulu - -ActionsToolbar.resetColors=Resetovat barvy - -ActionsToolbar.resetSizes=Resetovat velikost - -ActionsToolbar.resetSizes.dialog=Nastavit velikost - -ActionsToolbar.resetLabelColors=Resetovat barvu \u0161t\u00edtku - -ActionsToolbar.resetLabelSizes=Resetovat velikost \u0161t\u00edtku - -ActionsToolbar.resetLabelVisible=Resetovat viditelnost \u0161t\u00edtku - -LabelAttributesPanel.title=Nastaven\u00ed textu \u0161t\u00edtku - -LabelAttributesPanel.nodesToggleButton.text=Uzle - -LabelAttributesPanel.edgesToggleButton.text=Hrany - -LabelAttributesPanel.labelComment.text=Vybrat vlastnosti, kter\u00e9 zobrazit jako \u0161t\u00edtky - -LabelAttributesPanel.showPropertiesCheckbox.text=Zobrazit vlastnosti - -LabelSettingsPanel.configureLabelsButton.text=Nastavit... - -EdgeSettingsPanel.selectionColorCheckbox.toolTipText=Vykreslit konkr\u00e9tn\u00ed barvu na zvolen\u00e9 hrany - -EdgeSettingsPanel.selectionColorCheckbox.text=Barva v\u00fdb\u011bru - -EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText=Hrana dovnit\u0159<- Barva - -EdgeSettingsPanel.labelScale.text=Stupnice - -EdgeSettingsPanel.labelIn.text=Dovnit\u0159\: - -EdgeSettingsPanel.labelOut.text=Ven\: - -EdgeSettingsPanel.labelBoth.text=Oba\: - -EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText=Hrana ven-> Barva - -EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText=Hrana ob\u011b<-> Barva - -GlobalSettingsPanel.labelZoom.text=P\u0159ibl\u00ed\u017een\u00ed - -EdgeSettingsPanel.labelMetaScale.text=Stupnice (metahrana) +CTL_GraphAction=Graf +CTL_GraphTopComponent=Graf +GraphTopComponent.waitingLabel.text=Zavαd\u011bnν... \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_de.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_de.properties new file mode 100644 index 0000000000..e17f1a955e --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_de.properties @@ -0,0 +1,3 @@ +CTL_GraphAction=Graph +CTL_GraphTopComponent=Graph +GraphTopComponent.waitingLabel.text=Initialisierung... \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_es.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_es.properties index a106e5c945..d172182ecd 100644 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_es.properties +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_es.properties @@ -1,156 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011-2012. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:22+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - CTL_GraphAction=Grafo - CTL_GraphTopComponent=Grafo - -GraphTopComponent.jToggleButton1.TabConstraints.tabTitle=tab2 - -GraphTopComponent.jToggleButton2.TabConstraints.tabTitle=tab2 - -GraphTopComponent.waitingLabel.text=Inicializando... - -VizToolbar.Global.background=Color de fondo (click izquierdo para cambiar negro-blanco, click derecho para escoger color) - -VizToolbar.Global.groupBarTitle=Global - -VizToolbar.Global.screenshot=Captura de pantalla - -VizToolbar.Global.screenshot.configure=Configurar... - -VizToolbar.Nodes.groupBarTitle=Nodos - -VizToolbar.Nodes.showLabels=Mostrar etiquetas de los nodos - -VizToolbar.Nodes.showHulls=Mostrar envolturas - -VizToolbar.Edges.showEdges=Mostrar aristas - -VizToolbar.Edges.edgeNodeColor=Las aristas tienen el color del nodo origen - -VizToolbar.Edges.showLabels=Mostrar etiquetas de las aristas - -VizToolbar.Edges.edgeScale=Escala del peso de las aristas - -VizToolbar.Edges.groupBarTitle=Aristas - -VizToolbar.Labels.font=Fuente - -VizToolbar.Labels.defaultColor=Color por defecto - -VizToolbar.Labels.sizeMode=Modo de tama\u00f1o - -VizToolbar.Labels.colorMode=Modo de color - -VizToolbar.Labels.attributes=Atributos - -VizToolbar.Labels.fontScale=Escala de la fuente - -VizToolbar.Labels.groupBarTitle=Etiquetas - -NodeSettingsPanel.adjustTextCheckbox.text=Ajustar al texto - -NodeSettingsPanel.labelShape.text=Forma por defecto\: - -NodeSettingsPanel.defaultShape.message3d=Esta forma es en 3 dimensiones, el motor gr\u00e1fico va a ser reinicializado. \u00bfProceder? - -NodeSettingsPanel.defaultShape.message.title=Forma por defecto - -NodeSettingsPanel.defaultShape.message2d=Esta forma es en 2 dimensiones, el motor gr\u00e1fico va a ser reinicializado. \u00bfProceder? - -EdgeSettingsPanel.labelEdgeColor.text=Color por defecto de las aristas\: - -EdgeSettingsPanel.sourceNodeColorCheckbox.text=Color del nodo origen - -EdgeSettingsPanel.showEdgesCheckbox.text=Mostrar - -GlobalSettingsPanel.hightlightCheckBox.text=Destacar selecci\u00f3n - -GlobalSettingsPanel.labelBackgroundColor.text=Color de fondo\: - -GlobalSettingsPanel.autoSelectNeigborCheckbox.text=Auto-seleccionar nodos vecinos - -LabelSettingsPanel.labelNodeFont.text=Fuente\: - -LabelSettingsPanel.showNodeLabelsCheckbox.text=Nodos - -LabelSettingsPanel.showEdgeLabelsCheckbox.text=Aristas - -LabelSettingsPanel.labelEdgeFont.text=Fuente\: - -LabelSettingsPanel.labelEdgeColor.text=Color\: - -LabelSettingsPanel.labelNodeColor.text=Color\: - -LabelSettingsPanel.labelNodeSize.text=Tama\u00f1o\: - -LabelSettingsPanel.labelEdgeSize.text=Tama\u00f1o\: - -LabelSettingsPanel.labelSizeMode.text=Tama\u00f1o\: - -LabelSettingsPanel.labelColorMode.text=Color\: - -LabelSettingsPanel.hideNonSelectedCheckbox.text=Ocultar no seleccionados - -SelectionToolbar.rectangle.tooltip=Selecci\u00f3n rectangular - -SelectionToolbar.mouse.tooltip=Selecci\u00f3n directa - -SelectionToolbar.drag.tooltip=Desplazar - -ActionsToolbar.centerOnGraph=Centrar en el grafo - -ActionsToolbar.centerOnZero=Centrar en el punto cero - -ActionsToolbar.resetColors=Reestablecer colores - -ActionsToolbar.resetSizes=Reestablecer tama\u00f1os - -ActionsToolbar.resetSizes.dialog=Establecer tama\u00f1o - -ActionsToolbar.resetLabelColors=Reestablecer colores de las etiquetas - -ActionsToolbar.resetLabelSizes=Reestablecer tama\u00f1o de las etiquetas - -ActionsToolbar.resetLabelVisible=Reestablecer visibilidad de las etiquetas - -LabelAttributesPanel.title=Configuraci\u00f3n del texto de la etiquetas - -LabelAttributesPanel.nodesToggleButton.text=Nodos - -LabelAttributesPanel.edgesToggleButton.text=Aristas - -LabelAttributesPanel.labelComment.text=Seleccionar atributos para mostrar como etiquetas - -LabelAttributesPanel.showPropertiesCheckbox.text=Mostrar propiedades - -LabelSettingsPanel.configureLabelsButton.text=Configurar... - -EdgeSettingsPanel.selectionColorCheckbox.toolTipText=Dibujar color particular para las aristas seleccionadas - -EdgeSettingsPanel.selectionColorCheckbox.text=Color de selecci\u00f3n - -EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText=Color de arista Entrante <- - -EdgeSettingsPanel.labelScale.text=Escala - -EdgeSettingsPanel.labelIn.text=Entrada\: - -EdgeSettingsPanel.labelOut.text=Salida - -EdgeSettingsPanel.labelBoth.text=Bidireccional\: - -EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText=Color de arista Saliente -> - -EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText=Color de arista Bidireccional <-> - -GlobalSettingsPanel.labelZoom.text=Zoom - -EdgeSettingsPanel.labelMetaScale.text=Escala (meta-arista) +GraphTopComponent.waitingLabel.text=Inicializando... \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_fr.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_fr.properties index d6e6a04328..46a8763c7b 100644 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_fr.properties +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_fr.properties @@ -1,155 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:13+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - CTL_GraphAction=Graphe - CTL_GraphTopComponent=Graphe - -GraphTopComponent.jToggleButton1.TabConstraints.tabTitle=tab2 - -GraphTopComponent.jToggleButton2.TabConstraints.tabTitle=tab2 - -GraphTopComponent.waitingLabel.text=Initialisation... - -VizToolbar.Global.background=Couleur d'arri\u00e8re-plan - -!VizToolbar.Global.groupBarTitle= - -VizToolbar.Global.screenshot=Capturer l'\u00e9cran - -VizToolbar.Global.screenshot.configure=Configurer... - -!VizToolbar.Nodes.groupBarTitle= - -VizToolbar.Nodes.showLabels=Afficher les labels des noeuds - -VizToolbar.Nodes.showHulls=Afficher les enveloppes - -VizToolbar.Edges.showEdges=Afficher les liens - -VizToolbar.Edges.edgeNodeColor=Les liens ont la couleur du noeud source - -VizToolbar.Edges.showLabels=Afficher les labels des liens - -VizToolbar.Edges.edgeScale=\u00c9chelle du poids des liens - -!VizToolbar.Edges.groupBarTitle= - -VizToolbar.Labels.font=Police - -VizToolbar.Labels.defaultColor=Couleur par d\u00e9faut - -VizToolbar.Labels.sizeMode=Mode de taille - -VizToolbar.Labels.colorMode=Mode de couleur - -VizToolbar.Labels.attributes=Attributs - -VizToolbar.Labels.fontScale=\u00c9chelle de la police - -!VizToolbar.Labels.groupBarTitle= - -NodeSettingsPanel.adjustTextCheckbox.text=Ajuster au texte - -NodeSettingsPanel.labelShape.text=Forme par d\u00e9faut \: - -NodeSettingsPanel.defaultShape.message3d=Cette forme est en 3d, le moteur graphique sera r\u00e9initialis\u00e9. Confirmer ? - -NodeSettingsPanel.defaultShape.message.title=Forme par d\u00e9faut - -NodeSettingsPanel.defaultShape.message2d=Cette forme est en 2d, le moteur graphique sera r\u00e9initialis\u00e9. Confirmer ? - -EdgeSettingsPanel.labelEdgeColor.text=Couleur des liens par d\u00e9faut \: - -EdgeSettingsPanel.sourceNodeColorCheckbox.text=Couleur du noeud source - -EdgeSettingsPanel.showEdgesCheckbox.text=Afficher - -GlobalSettingsPanel.hightlightCheckBox.text=S\u00e9lection en surbrillance - -GlobalSettingsPanel.labelBackgroundColor.text=Couleur d'arri\u00e8re-plan \: - -GlobalSettingsPanel.autoSelectNeigborCheckbox.text=Voisins s\u00e9lectionn\u00e9s - -LabelSettingsPanel.labelNodeFont.text=Police \: - -LabelSettingsPanel.showNodeLabelsCheckbox.text=Noeud - -LabelSettingsPanel.showEdgeLabelsCheckbox.text=Lien - -LabelSettingsPanel.labelEdgeFont.text=Police \: - -LabelSettingsPanel.labelEdgeColor.text=Couleur \: - -LabelSettingsPanel.labelNodeColor.text=Couleur \: - -LabelSettingsPanel.labelNodeSize.text=Taille \: - -LabelSettingsPanel.labelEdgeSize.text=Taille \: - -LabelSettingsPanel.labelSizeMode.text=Taille \: - -LabelSettingsPanel.labelColorMode.text=Couleur \: - -LabelSettingsPanel.hideNonSelectedCheckbox.text=Cacher si non s\u00e9lectionn\u00e9 - -SelectionToolbar.rectangle.tooltip=Rectangle de s\u00e9lection - -SelectionToolbar.mouse.tooltip=S\u00e9lection directe - -SelectionToolbar.drag.tooltip=D\u00e9placement - -ActionsToolbar.centerOnGraph=Centrer sur le graphe - -ActionsToolbar.centerOnZero=Centrer sur z\u00e9ro - -ActionsToolbar.resetColors=R\u00e9initialiser les couleurs - -ActionsToolbar.resetSizes=R\u00e9initialiser les tailles - -ActionsToolbar.resetSizes.dialog=Mettre \u00e0 la taille - -ActionsToolbar.resetLabelColors=R\u00e9initialiser la couleur des labels - -ActionsToolbar.resetLabelSizes=R\u00e9initialiser la taille des labels - -ActionsToolbar.resetLabelVisible=R\u00e9initialiser la visibilit\u00e9 des labels - -LabelAttributesPanel.title=Param\u00e8tres du texte des labels - -LabelAttributesPanel.nodesToggleButton.text=Noeuds - -LabelAttributesPanel.edgesToggleButton.text=Liens - -LabelAttributesPanel.labelComment.text=S\u00e9lectionner les attributs \u00e0 afficher en tant que label - -LabelAttributesPanel.showPropertiesCheckbox.text=Afficher les propri\u00e9t\u00e9s - -LabelSettingsPanel.configureLabelsButton.text=Configurer... - -EdgeSettingsPanel.selectionColorCheckbox.toolTipText=Dessiner des couleurs particuli\u00e8res aux liens s\u00e9lectionn\u00e9s - -EdgeSettingsPanel.selectionColorCheckbox.text=Couleur de s\u00e9lection - -EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText=Couleur de lien ENTRANT<- - -EdgeSettingsPanel.labelScale.text=Echelle - -EdgeSettingsPanel.labelIn.text=Entrant \: - -EdgeSettingsPanel.labelOut.text=Sortant \: - -EdgeSettingsPanel.labelBoth.text=Bidirectionnel \: - -EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText=Couleur de lien SORTANT-> - -EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText=Couleur de lien E/S<-> - -GlobalSettingsPanel.labelZoom.text=Zoom - -EdgeSettingsPanel.labelMetaScale.text=Echelle (m\u00e9ta-liens) +GraphTopComponent.waitingLabel.text=Initialisation... \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_he.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_he.properties new file mode 100644 index 0000000000..a8b9b93b77 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_he.properties @@ -0,0 +1,2 @@ +CTL_GraphAction=\u05d2\u05e8\u05e3 +CTL_GraphTopComponent=\u05d2\u05e8\u05e3 \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_hu.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_hu.properties new file mode 100644 index 0000000000..9618ac13bb --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_hu.properties @@ -0,0 +1,3 @@ +CTL_GraphTopComponent=Grafikon +CTL_GraphAction=Grafikon +GraphTopComponent.waitingLabel.text=Kezdi... \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_it.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_it.properties new file mode 100644 index 0000000000..dbe8bfd674 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_it.properties @@ -0,0 +1,3 @@ +CTL_GraphAction=Graph +CTL_GraphTopComponent=Graph +GraphTopComponent.waitingLabel.text=Initializing... \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_ja.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_ja.properties index 7f371ee6b0..01743affc7 100644 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_ja.properties +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_ja.properties @@ -1,155 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:13+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -CTL_GraphAction=\u30b0\u30e9\u30d5 - -CTL_GraphTopComponent=\u30b0\u30e9\u30d5 - -GraphTopComponent.jToggleButton1.TabConstraints.tabTitle=\u30bf\u30d62 - -GraphTopComponent.jToggleButton2.TabConstraints.tabTitle=\u30bf\u30d62 - -GraphTopComponent.waitingLabel.text=\u521d\u671f\u5316\u4e2d... - -VizToolbar.Global.background=\u80cc\u666f\u8272 - -!VizToolbar.Global.groupBarTitle= - -VizToolbar.Global.screenshot=\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u64ae\u5f71 - -VizToolbar.Global.screenshot.configure=\u8a2d\u5b9a... - -!VizToolbar.Nodes.groupBarTitle= - -VizToolbar.Nodes.showLabels=\u30ce\u30fc\u30c9\u30e9\u30d9\u30eb\u3092\u8868\u793a - -VizToolbar.Nodes.showHulls=\u5916\u6bbb\u3092\u8868\u793a - -VizToolbar.Edges.showEdges=\u8fba\u3092\u8868\u793a - -VizToolbar.Edges.edgeNodeColor=\u8fba\u306f\u30bd\u30fc\u30b9\u30ce\u30fc\u30c9\u306e\u8272\u3067\u3059\u3002 - -VizToolbar.Edges.showLabels=\u8fba\u30e9\u30d9\u30eb\u3092\u8868\u793a - -VizToolbar.Edges.edgeScale=\u8fba\u306e\u91cd\u307f\u306e\u30b9\u30b1\u30fc\u30eb - -!VizToolbar.Edges.groupBarTitle= - -VizToolbar.Labels.font=\u30d5\u30a9\u30f3\u30c8 - -VizToolbar.Labels.defaultColor=\u30c7\u30d5\u30a9\u30eb\u30c8\u8272 - -VizToolbar.Labels.sizeMode=\u30b5\u30a4\u30ba\u30fb\u30e2\u30fc\u30c9 - -VizToolbar.Labels.colorMode=\u30ab\u30e9\u30fc\u30fb\u30e2\u30fc\u30c9 - -VizToolbar.Labels.attributes=\u5c5e\u6027 - -VizToolbar.Labels.fontScale=\u30d5\u30a9\u30f3\u30c8\u30b5\u30a4\u30ba\u30b9\u30b1\u30fc\u30eb - -!VizToolbar.Labels.groupBarTitle= - -NodeSettingsPanel.adjustTextCheckbox.text=\u30c6\u30ad\u30b9\u30c8\u306b\u8abf\u6574\u3059\u308b - -NodeSettingsPanel.labelShape.text=\u30c7\u30d5\u30a9\u30eb\u30c8\u56f3\u5f62\: - -NodeSettingsPanel.defaultShape.message3d=\u3053\u306e\u5f62\u72b6\u306f\u30013D\u5f62\u72b6\u3067\u3042\u308a\u3001\u30a8\u30f3\u30b8\u30f3\u304c\u521d\u671f\u5316\u3055\u308c\u307e\u3059\u3002\u7d9a\u884c\u3057\u307e\u3059\u304b\uff1f - -NodeSettingsPanel.defaultShape.message.title=\u30c7\u30d5\u30a9\u30eb\u30c8\u56f3\u5f62 - -NodeSettingsPanel.defaultShape.message2d=\u3053\u306e\u5f62\u72b6\u306f2\u6b21\u5143\u306e\u5f62\u72b6\u3067\u3042\u308b\u3001\u30a8\u30f3\u30b8\u30f3\u304c\u521d\u671f\u5316\u3055\u308c\u307e\u3059\u3002\u7d9a\u884c\u3057\u307e\u3059\u304b\uff1f - -EdgeSettingsPanel.labelEdgeColor.text=\u8fba\u30c7\u30d5\u30a9\u30eb\u30c8\u8272\: - -EdgeSettingsPanel.sourceNodeColorCheckbox.text=\u30bd\u30fc\u30b9\u30fb\u30ce\u30fc\u30c9\u30fb\u30ab\u30e9\u30fc - -EdgeSettingsPanel.showEdgesCheckbox.text=\u8868\u793a - -GlobalSettingsPanel.hightlightCheckBox.text=\u9078\u629e\u3092\u5f37\u8abf - -GlobalSettingsPanel.labelBackgroundColor.text=\u80cc\u666f\u8272\: - -GlobalSettingsPanel.autoSelectNeigborCheckbox.text=\u96a3\u63a5\u3092\u81ea\u52d5\u9078\u629e - -LabelSettingsPanel.labelNodeFont.text=\u30d5\u30a9\u30f3\u30c8\: - -LabelSettingsPanel.showNodeLabelsCheckbox.text=\u30ce\u30fc\u30c9 - -LabelSettingsPanel.showEdgeLabelsCheckbox.text=\u8fba - -LabelSettingsPanel.labelEdgeFont.text=\u30d5\u30a9\u30f3\u30c8\: - -LabelSettingsPanel.labelEdgeColor.text=\u8272\: - -LabelSettingsPanel.labelNodeColor.text=\u8272\: - -LabelSettingsPanel.labelNodeSize.text=\u30b5\u30a4\u30ba\: - -LabelSettingsPanel.labelEdgeSize.text=\u30b5\u30a4\u30ba\: - -LabelSettingsPanel.labelSizeMode.text=\u30b5\u30a4\u30ba\: - -LabelSettingsPanel.labelColorMode.text=\u8272\: - -LabelSettingsPanel.hideNonSelectedCheckbox.text=\u975e\u9078\u629e\u3092\u96a0\u3059 - -SelectionToolbar.rectangle.tooltip=\u77e9\u5f62\u9078\u629e - -SelectionToolbar.mouse.tooltip=\u76f4\u63a5\u9078\u629e - -SelectionToolbar.drag.tooltip=\u30c9\u30e9\u30c3\u30b0 - -ActionsToolbar.centerOnGraph=\u30b0\u30e9\u30d5\u3092\u4e2d\u5fc3 - -ActionsToolbar.centerOnZero=\u30bc\u30ed\u3092\u4e2d\u5fc3 - -ActionsToolbar.resetColors=\u30ab\u30e9\u30fc\u3092\u30ea\u30bb\u30c3\u30c8 - -ActionsToolbar.resetSizes=\u30b5\u30a4\u30ba\u3092\u30ea\u30bb\u30c3\u30c8 - -ActionsToolbar.resetSizes.dialog=\u30b5\u30a4\u30ba\u3092\u8a2d\u5b9a - -ActionsToolbar.resetLabelColors=\u30e9\u30d9\u30eb\u30ab\u30e9\u30fc\u3092\u30ea\u30bb\u30c3\u30c8 - -ActionsToolbar.resetLabelSizes=\u30e9\u30d9\u30eb\u30b5\u30a4\u30ba\u3092\u30ea\u30bb\u30c3\u30c8 - -ActionsToolbar.resetLabelVisible=\u30e9\u30d9\u30eb\u3092\u53ef\u8996\u306b\u30ea\u30bb\u30c3\u30c8 - -LabelAttributesPanel.title=\u30e9\u30d9\u30eb\u306e\u30c6\u30ad\u30b9\u30c8\u306e\u8a2d\u5b9a - -LabelAttributesPanel.nodesToggleButton.text=\u30ce\u30fc\u30c9 - -LabelAttributesPanel.edgesToggleButton.text=\u8fba - -LabelAttributesPanel.labelComment.text=\u30e9\u30d9\u30eb\u3068\u3057\u3066\u8868\u793a\u3059\u308b\u5c5e\u6027\u3092\u9078\u629e\u3057\u307e\u3059\u3002 - -LabelAttributesPanel.showPropertiesCheckbox.text=\u30d7\u30ed\u30d1\u30c6\u30a3\u3092\u8868\u793a - -LabelSettingsPanel.configureLabelsButton.text=\u8a2d\u5b9a... - -EdgeSettingsPanel.selectionColorCheckbox.toolTipText=\u9078\u629e\u3057\u305f\u8fba\u306e\u305f\u3081\u306e\u7279\u5b9a\u306e\u8272\u3092\u63cf\u753b - -EdgeSettingsPanel.selectionColorCheckbox.text=\u9078\u629e\u8272 - -EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText=\u6d41\u5165\u8fba<-\u8272 - -EdgeSettingsPanel.labelScale.text=\u30b9\u30b1\u30fc\u30eb - -EdgeSettingsPanel.labelIn.text=\u30a4\u30f3\: - -EdgeSettingsPanel.labelOut.text=\u30a2\u30a6\u30c8\: - -EdgeSettingsPanel.labelBoth.text=\u53cc\u65b9\u5411\: - -EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText=\u6d41\u51fa\u8fba->\u8272 - -EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText=\u53cc\u65b9\u5411\u8fba<->\u8272 - -GlobalSettingsPanel.labelZoom.text=\u62e1\u5927 - -EdgeSettingsPanel.labelMetaScale.text=\u30b9\u30b1\u30fc\u30eb(\u30e1\u30bf\u8fba) +CTL_GraphAction=\u30b0\u30e9\u30d5 +CTL_GraphTopComponent=\u30b0\u30e9\u30d5 +GraphTopComponent.waitingLabel.text=\u521d\u671f\u5316\u4e2d... \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_ko.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_ko.properties new file mode 100644 index 0000000000..712050199a --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_ko.properties @@ -0,0 +1,3 @@ +CTL_GraphTopComponent=\uADF8\uB798\uD504 +CTL_GraphAction=\uADF8\uB798\uD504 +GraphTopComponent.waitingLabel.text=\uCD08\uAE30\uD654 \uC911... \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_nl.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_nl.properties new file mode 100644 index 0000000000..a9aa1a1762 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_nl.properties @@ -0,0 +1,3 @@ +CTL_GraphAction=Graaf +CTL_GraphTopComponent=Graaf +GraphTopComponent.waitingLabel.text=Initialiseren... \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_pt_BR.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_pt_BR.properties index 9d00b216c8..108848c10f 100644 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_pt_BR.properties +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_pt_BR.properties @@ -1,156 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -# C\u00e9lio Faria Jr. , 2011-2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-18 11\:13+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -CTL_GraphAction=Grafo - -CTL_GraphTopComponent=Grafo - -GraphTopComponent.jToggleButton1.TabConstraints.tabTitle=tab2 - -GraphTopComponent.jToggleButton2.TabConstraints.tabTitle=tab2 - -GraphTopComponent.waitingLabel.text=Inicializando... - -VizToolbar.Global.background=Cor de fundo (clique com o bot\u00e3o esquerdo para alternar entre branco e preto e com o bot\u00e3o direito para escolher a cor) - -VizToolbar.Global.groupBarTitle=Global - -VizToolbar.Global.screenshot=Capturar tela - -VizToolbar.Global.screenshot.configure=Configurar... - -VizToolbar.Nodes.groupBarTitle=N\u00f3s - -VizToolbar.Nodes.showLabels=Mostrar r\u00f3tulos dos n\u00f3s - -VizToolbar.Nodes.showHulls=Exibir bordas - -VizToolbar.Edges.showEdges=Exibir arestas - -VizToolbar.Edges.edgeNodeColor=Arestas t\u00eam a cor do n\u00f3 de origem - -VizToolbar.Edges.showLabels=Exibir r\u00f3tulos de arestas - -VizToolbar.Edges.edgeScale=Escala de peso de arestas - -VizToolbar.Edges.groupBarTitle=Arestas - -VizToolbar.Labels.font=Fonte - -VizToolbar.Labels.defaultColor=Cor padr\u00e3o - -VizToolbar.Labels.sizeMode=Modo de tamanho - -VizToolbar.Labels.colorMode=Modo de cor - -VizToolbar.Labels.attributes=Atributos - -VizToolbar.Labels.fontScale=Escala de tamanho da fonte - -VizToolbar.Labels.groupBarTitle=R\u00f3tulos - -NodeSettingsPanel.adjustTextCheckbox.text=Ajustar ao texto - -NodeSettingsPanel.labelShape.text=Forma padr\u00e3o\: - -NodeSettingsPanel.defaultShape.message3d=Esta \u00e9 uma forma 3D, o motor gr\u00e1fico vai ser reinicializado. Deseja continuar? - -NodeSettingsPanel.defaultShape.message.title=Forma padr\u00e3o - -NodeSettingsPanel.defaultShape.message2d=Esta \u00e9 uma forma 2D, o motor gr\u00e1fico vai ser reinicializado. Deseja continuar? - -EdgeSettingsPanel.labelEdgeColor.text=Cor padr\u00e3o da aresta\: - -EdgeSettingsPanel.sourceNodeColorCheckbox.text=Cor do n\u00f3 de origem - -EdgeSettingsPanel.showEdgesCheckbox.text=Exibir - -GlobalSettingsPanel.hightlightCheckBox.text=Destacar sele\u00e7\u00e3o - -GlobalSettingsPanel.labelBackgroundColor.text=Cor de fundo\: - -GlobalSettingsPanel.autoSelectNeigborCheckbox.text=Auto-selecionar vizinho - -LabelSettingsPanel.labelNodeFont.text=Fonte\: - -LabelSettingsPanel.showNodeLabelsCheckbox.text=N\u00f3 - -LabelSettingsPanel.showEdgeLabelsCheckbox.text=Aresta - -LabelSettingsPanel.labelEdgeFont.text=Fonte\: - -LabelSettingsPanel.labelEdgeColor.text=Cor\: - -LabelSettingsPanel.labelNodeColor.text=Cor\: - -LabelSettingsPanel.labelNodeSize.text=Tamanho\: - -LabelSettingsPanel.labelEdgeSize.text=Tamanho\: - -LabelSettingsPanel.labelSizeMode.text=Tamanho\: - -LabelSettingsPanel.labelColorMode.text=Cor\: - -LabelSettingsPanel.hideNonSelectedCheckbox.text=Esconder n\u00e3o selecionados - -SelectionToolbar.rectangle.tooltip=Sele\u00e7\u00e3o retangular - -SelectionToolbar.mouse.tooltip=Sele\u00e7\u00e3o direta - -SelectionToolbar.drag.tooltip=Arrastar - -ActionsToolbar.centerOnGraph=Centralizar no grafo - -ActionsToolbar.centerOnZero=Centralizar no ponto Zero - -ActionsToolbar.resetColors=Restaurar cores - -ActionsToolbar.resetSizes=Restaurar tamanho - -ActionsToolbar.resetSizes.dialog=Definir tamanho - -ActionsToolbar.resetLabelColors=Restaurar cor do r\u00f3tulo - -ActionsToolbar.resetLabelSizes=Restaurar tamanho do r\u00f3tulo - -ActionsToolbar.resetLabelVisible=Restaurar r\u00f3tulos vis\u00edveis - -LabelAttributesPanel.title=Configura\u00e7\u00f5es do texto do r\u00f3tulo - -LabelAttributesPanel.nodesToggleButton.text=N\u00f3s - -LabelAttributesPanel.edgesToggleButton.text=Arestas - -LabelAttributesPanel.labelComment.text=Selecione os atributos para exibir como r\u00f3tulos - -LabelAttributesPanel.showPropertiesCheckbox.text=Exibir propriedades - -LabelSettingsPanel.configureLabelsButton.text=Configurar... - -EdgeSettingsPanel.selectionColorCheckbox.toolTipText=Usar cor determinada para as arestas selecionadas - -EdgeSettingsPanel.selectionColorCheckbox.text=Colorir sele\u00e7\u00e3o - -EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText=Cor da aresta de entrada <- - -EdgeSettingsPanel.labelScale.text=Escala - -EdgeSettingsPanel.labelIn.text=Entrada\: - -EdgeSettingsPanel.labelOut.text=Sa\u00edda\: - -EdgeSettingsPanel.labelBoth.text=Ambos\: - -EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText=Cor da aresta de sa\u00edda -> - -EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText=Cor da aresta bidirecional <-> - -GlobalSettingsPanel.labelZoom.text=Zoom - -EdgeSettingsPanel.labelMetaScale.text=Escala (meta-aresta) +CTL_GraphAction=Grafo +CTL_GraphTopComponent=Grafo +GraphTopComponent.waitingLabel.text=Inicializando... \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_ro.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_ro.properties new file mode 100644 index 0000000000..fc32a46107 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_ro.properties @@ -0,0 +1,3 @@ +GraphTopComponent.waitingLabel.text=Ini\u021Bializare... +CTL_GraphTopComponent=Graf +CTL_GraphAction=Graf diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_ru.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_ru.properties index 0d86a8ba97..6ba5c45cf4 100644 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_ru.properties +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_ru.properties @@ -1,156 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -# FIRST AUTHOR , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:13+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -CTL_GraphAction=\u041d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0433\u0440\u0430\u0444 - -CTL_GraphTopComponent=\u0413\u0440\u0430\u0444 - -GraphTopComponent.jToggleButton1.TabConstraints.tabTitle=GraphTopComponent.jToggleButton1.TabConstraints.tabTitle - -GraphTopComponent.jToggleButton2.TabConstraints.tabTitle=GraphTopComponent.jToggleButton2.TabConstraints.tabTitle - -GraphTopComponent.waitingLabel.text=\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f - -VizToolbar.Global.background=\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430 - -!VizToolbar.Global.groupBarTitle= - -VizToolbar.Global.screenshot=\u0421\u043a\u0440\u0438\u043d\u0448\u043e\u0442 - -VizToolbar.Global.screenshot.configure=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430... - -!VizToolbar.Nodes.groupBarTitle= - -VizToolbar.Nodes.showLabels=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u0443\u0437\u043b\u043e\u0432 - -VizToolbar.Nodes.showHulls=\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0438 \u043c\u0435\u0442\u0430\u0443\u0437\u043b\u043e\u0432 - -VizToolbar.Edges.showEdges=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0440\u0451\u0431\u0440\u0430 - -VizToolbar.Edges.edgeNodeColor=\u0420\u0451\u0431\u0440\u0430 \u0438\u043c\u0435\u044e\u0442 \u0446\u0432\u0435\u0442 \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 - -VizToolbar.Edges.showLabels=\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u0438\u043c\u0435\u043d\u0430 \u0440\u0451\u0431\u0435\u0440 - -VizToolbar.Edges.edgeScale=\u041c\u0430\u0441\u0448\u0442\u0430\u0431 \u0432\u0435\u0441\u043e\u0432 \u0440\u0451\u0431\u0435\u0440 - -!VizToolbar.Edges.groupBarTitle= - -VizToolbar.Labels.font=\u0428\u0440\u0438\u0444\u0442 - -VizToolbar.Labels.defaultColor=\u0426\u0432\u0435\u0442\u0430 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e - -VizToolbar.Labels.sizeMode=\u0420\u0430\u0437\u043c\u0435\u0440 \u0448\u0440\u0438\u0444\u0442\u0430 - -VizToolbar.Labels.colorMode=\u0426\u0432\u0435\u0442 \u0442\u0435\u043a\u0441\u0442\u0430 - -VizToolbar.Labels.attributes=\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b - -VizToolbar.Labels.fontScale=\u041c\u0430\u0441\u0448\u0442\u0430\u0431 \u0440\u0430\u0437\u043c\u0435\u0440\u0430 \u0448\u0440\u0438\u0444\u0442\u0430 - -!VizToolbar.Labels.groupBarTitle= - -NodeSettingsPanel.adjustTextCheckbox.text=\u0414\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0440\u0430\u043c\u043a\u043e\u0439 \u0442\u0435\u043a\u0441\u0442\u0430 - -NodeSettingsPanel.labelShape.text=\u0424\u043e\u0440\u043c\u0430 \u0443\u0437\u043b\u043e\u0432\: - -NodeSettingsPanel.defaultShape.message3d=\u0412\u044b\u0431\u0440\u0430\u043d\u0430 \u0442\u0440\u0451\u0445\u043c\u0435\u0440\u043d\u0430\u044f \u0444\u043e\u0440\u043c\u0430, \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430. \u0425\u043e\u0442\u0438\u0442\u0435 \u043b\u0438 \u0432\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c? - -NodeSettingsPanel.defaultShape.message.title=\u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430\u044f \u0444\u043e\u0440\u043c\u0430 - -NodeSettingsPanel.defaultShape.message2d=\u0412\u044b\u0431\u0440\u0430\u043d\u0430 \u0434\u0432\u0443\u0445\u043c\u0435\u0440\u043d\u0430\u044f \u0444\u043e\u0440\u043c\u0430, \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u043e \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0430. \u0425\u043e\u0442\u0438\u0442\u0435 \u043b\u0438 \u0432\u044b \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c? - -EdgeSettingsPanel.labelEdgeColor.text=\u0426\u0432\u0435\u0442 \u0440\u0451\u0431\u0435\u0440\: - -EdgeSettingsPanel.sourceNodeColorCheckbox.text=\u0426\u0432\u0435\u0442 \u0443\u0437\u043b\u0430-\u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 - -EdgeSettingsPanel.showEdgesCheckbox.text=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c - -GlobalSettingsPanel.hightlightCheckBox.text=\u041f\u043e\u0434\u0441\u0432\u0435\u0442\u0438\u0442\u044c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0435 - -GlobalSettingsPanel.labelBackgroundColor.text=\u0426\u0432\u0435\u0442 \u0444\u043e\u043d\u0430\: - -GlobalSettingsPanel.autoSelectNeigborCheckbox.text=\u0410\u0432\u0442\u043e\u0432\u044b\u0431\u043e\u0440 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 - -LabelSettingsPanel.labelNodeFont.text=\u0428\u0440\u0438\u0444\u0442\: - -LabelSettingsPanel.showNodeLabelsCheckbox.text=\u0423\u0437\u0435\u043b - -LabelSettingsPanel.showEdgeLabelsCheckbox.text=\u0420\u0435\u0431\u0440\u043e - -LabelSettingsPanel.labelEdgeFont.text=\u0428\u0440\u0438\u0444\u0442\: - -LabelSettingsPanel.labelEdgeColor.text=\u0426\u0432\u0435\u0442\: - -LabelSettingsPanel.labelNodeColor.text=\u0426\u0432\u0435\u0442\: - -LabelSettingsPanel.labelNodeSize.text=\u0420\u0430\u0437\u043c\u0435\u0440\: - -LabelSettingsPanel.labelEdgeSize.text=\u0420\u0430\u0437\u043c\u0435\u0440\: - -LabelSettingsPanel.labelSizeMode.text=\u0420\u0430\u0437\u043c\u0435\u0440\: - -LabelSettingsPanel.labelColorMode.text=\u0426\u0432\u0435\u0442\: - -LabelSettingsPanel.hideNonSelectedCheckbox.text=\u0421\u043f\u0440\u044f\u0442\u0430\u0442\u044c \u043d\u0435\u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0435 - -SelectionToolbar.rectangle.tooltip=\u0412\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u0438\u043a\u043e\u043c - -SelectionToolbar.mouse.tooltip=\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u043e\u0435 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u0435 - -SelectionToolbar.drag.tooltip=\u041f\u0435\u0440\u0435\u0442\u0430\u0449\u0438\u0442\u044c - -ActionsToolbar.centerOnGraph=\u0426\u0435\u043d\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430 \u0433\u0440\u0430\u0444\u0435 - -ActionsToolbar.centerOnZero=\u0426\u0435\u043d\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043d\u0443\u043b\u0435 - -ActionsToolbar.resetColors=\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0446\u0432\u0435\u0442\u0435 \u0443\u0437\u043b\u043e\u0432 - -ActionsToolbar.resetSizes=\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u0435 \u0443\u0437\u043b\u043e\u0432 - -ActionsToolbar.resetSizes.dialog=\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0440\u0430\u0437\u043c\u0435\u0440 \u0443\u0437\u043b\u043e\u0432 - -ActionsToolbar.resetLabelColors=\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0446\u0432\u0435\u0442\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 - -ActionsToolbar.resetLabelSizes=\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0440\u0430\u0437\u043c\u0435\u0440\u0435 \u0442\u0435\u043a\u0441\u0442\u0430 - -ActionsToolbar.resetLabelVisible=\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 - -LabelAttributesPanel.title=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0442\u0435\u043a\u0441\u0442\u0430 - -LabelAttributesPanel.nodesToggleButton.text=\u0423\u0437\u043b\u044b - -LabelAttributesPanel.edgesToggleButton.text=\u0420\u0451\u0431\u0440\u0430 - -LabelAttributesPanel.labelComment.text=\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u043c\u0451\u043d \u0432\u0435\u0440\u0448\u0438\u043d - -LabelAttributesPanel.showPropertiesCheckbox.text=\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 - -LabelSettingsPanel.configureLabelsButton.text=\u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c... - -EdgeSettingsPanel.selectionColorCheckbox.toolTipText=\u0412\u044b\u0434\u0435\u043b\u0438\u0442\u044c \u0446\u0432\u0435\u0442\u043e\u043c \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u0435 \u0432\u0435\u0440\u0448\u0438\u043d\u044b - -EdgeSettingsPanel.selectionColorCheckbox.text=\u0426\u0432\u0435\u0442 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u0438\u044f - -EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText=\u0426\u0432\u0435\u0442 \u0432\u0445\u043e\u0434. \u0440\u0451\u0431\u0435\u0440 - -EdgeSettingsPanel.labelScale.text=\u041c\u0430\u0441\u0448\u0442\u0430\u0431 - -EdgeSettingsPanel.labelIn.text=\u0412\u0445\u043e\u0434.\: - -EdgeSettingsPanel.labelOut.text=\u0418\u0441\u0445\u043e\u0434.\: - -EdgeSettingsPanel.labelBoth.text=\u0421\u043c\u0435\u0448.\: - -EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText=\u0426\u0432\u0435\u0442 \u0438\u0441\u0445\u043e\u0434. \u0440\u0451\u0431\u0435\u0440 - -EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText=\u0426\u0432\u0435\u0442 \u0441\u043c\u0435\u0448\u0430\u043d\u043d\u044b\u0445 \u0440\u0451\u0431\u0435\u0440 - -GlobalSettingsPanel.labelZoom.text=\u041f\u0440\u0438\u0431\u043b\u0438\u0437\u0438\u0442\u044c - -EdgeSettingsPanel.labelMetaScale.text=\u041c\u0430\u0441\u0448\u0442\u0430\u0431 (\u043c\u0435\u0442\u0430-\u0440\u0451\u0431\u0435\u0440) +CTL_GraphAction=\u041d\u0430\u0440\u0438\u0441\u043e\u0432\u0430\u0442\u044c \u0433\u0440\u0430\u0444 +CTL_GraphTopComponent=\u0413\u0440\u0430\u0444 +GraphTopComponent.waitingLabel.text=\u0418\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f38\u044f \u0432 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0438 \u0442\u0435\u043a\u0441\u0442\u0430 \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_th.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_tr.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_tr.properties new file mode 100644 index 0000000000..dbe8bfd674 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_tr.properties @@ -0,0 +1,3 @@ +CTL_GraphAction=Graph +CTL_GraphTopComponent=Graph +GraphTopComponent.waitingLabel.text=Initializing... \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_uk.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_uk.properties new file mode 100644 index 0000000000..aa3e18d04e --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_uk.properties @@ -0,0 +1,4 @@ + +CTL_GraphAction=\u0413\u0440\u0430\u0444\u0456\u043A +CTL_GraphTopComponent=\u0413\u0440\u0430\u0444\u0456\u043A +GraphTopComponent.waitingLabel.text=\u0406\u043D\u0456\u0446\u0456\u0430\u043B\u0456\u0437\u0430\u0446\u0456\u044F... \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_zh_CN.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_zh_CN.properties index f960e06350..2ce93da240 100644 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_zh_CN.properties +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_zh_CN.properties @@ -1,154 +1,3 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:13+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - CTL_GraphAction=\u56fe - CTL_GraphTopComponent=\u56fe - -GraphTopComponent.jToggleButton1.TabConstraints.tabTitle=TAB2 - -GraphTopComponent.jToggleButton2.TabConstraints.tabTitle=TAB2 - -GraphTopComponent.waitingLabel.text=\u521d\u59cb\u5316... - -VizToolbar.Global.background=\u80cc\u666f\u989c\u8272 - -!VizToolbar.Global.groupBarTitle= - -VizToolbar.Global.screenshot=\u622a\u5c4f - -VizToolbar.Global.screenshot.configure=\u914d\u7f6e... - -!VizToolbar.Nodes.groupBarTitle= - -VizToolbar.Nodes.showLabels=\u663e\u793a\u8282\u70b9\u6807\u7b7e - -VizToolbar.Nodes.showHulls=\u663e\u793a\u5916\u58f3 - -VizToolbar.Edges.showEdges=\u663e\u793a\u8fb9 - -VizToolbar.Edges.edgeNodeColor=\u8fb9\u5177\u5907\u6e90\u8282\u70b9\u989c\u8272 - -VizToolbar.Edges.showLabels=\u663e\u793a\u8fb9\u6807\u7b7e - -VizToolbar.Edges.edgeScale=\u8fb9\u7684\u6743\u91cd\u5c3a\u5ea6 - -!VizToolbar.Edges.groupBarTitle= - -VizToolbar.Labels.font=\u5b57\u4f53 - -VizToolbar.Labels.defaultColor=\u7f3a\u7701\u989c\u8272 - -VizToolbar.Labels.sizeMode=\u5927\u5c0f\u6a21\u5f0f - -VizToolbar.Labels.colorMode=\u989c\u8272\u6a21\u5f0f - -VizToolbar.Labels.attributes=\u5c5e\u6027 - -VizToolbar.Labels.fontScale=\u5b57\u4f53\u5927\u5c0f\u5c3a\u5ea6 - -!VizToolbar.Labels.groupBarTitle= - -NodeSettingsPanel.adjustTextCheckbox.text=\u8c03\u6574\u6587\u672c - -NodeSettingsPanel.labelShape.text=\u7f3a\u7701\u5f62\u72b6\uff1a - -NodeSettingsPanel.defaultShape.message3d=\u6b64\u5f62\u72b6\u4e3a3\u7ef4\u5f62\u72b6\uff0c\u5f15\u64ce\u5c06\u88ab\u91cd\u65b0\u521d\u59cb\u5316\u3002\u7ee7\u7eed\uff1f - -NodeSettingsPanel.defaultShape.message.title=\u7f3a\u7701\u5f62\u72b6 - -NodeSettingsPanel.defaultShape.message2d=\u6b64\u5f62\u72b6\u4e3a2\u7ef4\u5f62\u72b6\uff0c\u5f15\u64ce\u5c06\u88ab\u91cd\u65b0\u521d\u59cb\u5316\u3002\u7ee7\u7eed\uff1f - -EdgeSettingsPanel.labelEdgeColor.text=\u8fb9\u7684\u9ed8\u8ba4\u989c\u8272\uff1a - -EdgeSettingsPanel.sourceNodeColorCheckbox.text=\u6e90\u8282\u70b9\u7684\u989c\u8272 - -EdgeSettingsPanel.showEdgesCheckbox.text=\u663e\u793a - -GlobalSettingsPanel.hightlightCheckBox.text=\u9ad8\u4eae\u9009\u62e9 - -GlobalSettingsPanel.labelBackgroundColor.text=\u80cc\u666f\u989c\u8272\uff1a - -GlobalSettingsPanel.autoSelectNeigborCheckbox.text=\u81ea\u52a8\u9009\u62e9\u90bb\u5c45 - -LabelSettingsPanel.labelNodeFont.text=\u5b57\u4f53\uff1a - -LabelSettingsPanel.showNodeLabelsCheckbox.text=\u8282\u70b9 - -LabelSettingsPanel.showEdgeLabelsCheckbox.text=\u8fb9 - -LabelSettingsPanel.labelEdgeFont.text=\u5b57\u4f53\uff1a - -LabelSettingsPanel.labelEdgeColor.text=\u989c\u8272\uff1a - -LabelSettingsPanel.labelNodeColor.text=\u989c\u8272\uff1a - -LabelSettingsPanel.labelNodeSize.text=\u5927\u5c0f\uff1a - -LabelSettingsPanel.labelEdgeSize.text=\u5927\u5c0f\uff1a - -LabelSettingsPanel.labelSizeMode.text=\u5927\u5c0f\uff1a - -LabelSettingsPanel.labelColorMode.text=\u989c\u8272\uff1a - -LabelSettingsPanel.hideNonSelectedCheckbox.text=\u9690\u85cf\u672a\u9009\u4e2d - -SelectionToolbar.rectangle.tooltip=\u77e9\u5f62\u9009\u62e9 - -SelectionToolbar.mouse.tooltip=\u76f4\u63a5\u9009\u62e9 - -SelectionToolbar.drag.tooltip=\u62d6\u52a8 - -ActionsToolbar.centerOnGraph=\u56fe\u4e2d\u5fc3 - -ActionsToolbar.centerOnZero=\u96f6\u70b9\u4e2d\u5fc3 - -ActionsToolbar.resetColors=\u91cd\u8bbe\u989c\u8272 - -ActionsToolbar.resetSizes=\u91cd\u8bbe\u5927\u5c0f - -ActionsToolbar.resetSizes.dialog=\u8bbe\u5b9a\u5927\u5c0f - -ActionsToolbar.resetLabelColors=\u91cd\u8bbe\u6807\u7b7e\u7684\u989c\u8272 - -ActionsToolbar.resetLabelSizes=\u91cd\u8bbe\u6807\u7b7e\u7684\u5927\u5c0f - -ActionsToolbar.resetLabelVisible=\u91cd\u8bbe\u6807\u7b7e\u53ef\u89c1 - -LabelAttributesPanel.title=\u91cd\u8bbe\u6587\u672c\u8bbe\u5b9a - -LabelAttributesPanel.nodesToggleButton.text=\u8282\u70b9 - -LabelAttributesPanel.edgesToggleButton.text=\u8fb9 - -LabelAttributesPanel.labelComment.text=\u9009\u62e9\u663e\u793a\u4e3a\u6807\u7b7e\u7684\u5c5e\u6027 - -LabelAttributesPanel.showPropertiesCheckbox.text=\u663e\u793a\u5c5e\u6027 - -LabelSettingsPanel.configureLabelsButton.text=\u914d\u7f6e... - -EdgeSettingsPanel.selectionColorCheckbox.toolTipText=\u4e3a\u9009\u5b9a\u7684\u8fb9\u7740\u7279\u5b9a\u989c\u8272 - -EdgeSettingsPanel.selectionColorCheckbox.text=\u9009\u62e9\u989c\u8272 - -EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText=\u8fb9 IN<- \u989c\u8272 - -EdgeSettingsPanel.labelScale.text=\u5c3a\u5ea6 - -EdgeSettingsPanel.labelIn.text=\u5165\: - -EdgeSettingsPanel.labelOut.text=\u51fa\: - -EdgeSettingsPanel.labelBoth.text=\u53cc\u5411\uff1a - -EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText=\u51fa\u8fb9->\u989c\u8272 - -EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText=\u53cc\u5411\u8fb9<->\u989c\u8272 - -GlobalSettingsPanel.labelZoom.text=\u7f29\u653e - -EdgeSettingsPanel.labelMetaScale.text=\u5c3a\u5ea6\uff08\u5143\u8fb9\uff09 +GraphTopComponent.waitingLabel.text=\u521d\u59cb\u5316... \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_zh_TW.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_zh_TW.properties new file mode 100644 index 0000000000..dbe8bfd674 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/Bundle_zh_TW.properties @@ -0,0 +1,3 @@ +CTL_GraphAction=Graph +CTL_GraphTopComponent=Graph +GraphTopComponent.waitingLabel.text=Initializing... \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/arrowDown.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/arrowDown.png deleted file mode 100644 index 880a99f665..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/arrowDown.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/arrowDown_rollover.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/arrowDown_rollover.png deleted file mode 100644 index 9b19985f8e..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/arrowDown_rollover.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/arrowUp.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/arrowUp.png deleted file mode 100644 index e247d2813c..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/arrowUp.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/arrowUp_rollover.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/arrowUp_rollover.png deleted file mode 100644 index 84362ffa3d..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/arrowUp_rollover.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/centerOnGraph.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/centerOnGraph.png deleted file mode 100644 index a052429eb7..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/centerOnGraph.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/centerOnZero.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/centerOnZero.png deleted file mode 100644 index ecd217315a..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/centerOnZero.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/configureLabels.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/configureLabels.png deleted file mode 100644 index fd79bcddcf..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/configureLabels.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/cs.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/cs.po deleted file mode 100644 index 664b4629c2..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/cs.po +++ /dev/null @@ -1,244 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2011-2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-17 06:45+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "CTL_GraphAction" -msgstr "Graf" - -msgid "CTL_GraphTopComponent" -msgstr "Graf" - -msgid "GraphTopComponent.jToggleButton1.TabConstraints.tabTitle" -msgstr "tab2" - -msgid "GraphTopComponent.jToggleButton2.TabConstraints.tabTitle" -msgstr "tab2" - -msgid "GraphTopComponent.waitingLabel.text" -msgstr "ZavΓ‘dΔ›nΓ­..." - -msgid "VizToolbar.Global.background" -msgstr "Barva pozadΓ­ (kliknΔ›te levΓ½m tlačítkem pro pΕ™epnutΓ­ na černobΓ­lou, pravΓ½m tlačítkem pro vΓ½bΔ›r barvy)" - -msgid "VizToolbar.Global.groupBarTitle" -msgstr "GlobΓ‘lnΓ­" - -msgid "VizToolbar.Global.screenshot" -msgstr "PoΕ™Γ­dit snΓ­mek obrazovky" - -msgid "VizToolbar.Global.screenshot.configure" -msgstr "Nastavit..." - -msgid "VizToolbar.Nodes.groupBarTitle" -msgstr "Uzly" - -msgid "VizToolbar.Nodes.showLabels" -msgstr "Zobrazit Ε‘tΓ­tky uzle" - -msgid "VizToolbar.Nodes.showHulls" -msgstr "Zobrazit okraje" - -msgid "VizToolbar.Edges.showEdges" -msgstr "Zobrazit hrany" - -msgid "VizToolbar.Edges.edgeNodeColor" -msgstr "Hrany majΓ­ barvu zdrojovΓ©ho uzle" - -msgid "VizToolbar.Edges.showLabels" -msgstr "Zobrazit Ε‘tΓ­tky hran" - -msgid "VizToolbar.Edges.edgeScale" -msgstr "Stupnice vΓ‘hy hrany" - -msgid "VizToolbar.Edges.groupBarTitle" -msgstr "Hrany" - -msgid "VizToolbar.Labels.font" -msgstr "PΓ­smo" - -msgid "VizToolbar.Labels.defaultColor" -msgstr "VΓ½chozΓ­ barva" - -msgid "VizToolbar.Labels.sizeMode" -msgstr "ReΕΎim velikosti" - -msgid "VizToolbar.Labels.colorMode" -msgstr "BarevnΓ½ reΕΎim" - -msgid "VizToolbar.Labels.attributes" -msgstr "Vlastnosti" - -msgid "VizToolbar.Labels.fontScale" -msgstr "Stupnice velikosti pΓ­sma" - -msgid "VizToolbar.Labels.groupBarTitle" -msgstr "Jmenovky" - -msgid "NodeSettingsPanel.adjustTextCheckbox.text" -msgstr "Upravit pro text" - -msgid "NodeSettingsPanel.labelShape.text" -msgstr "VΓ½chozΓ­ tvar:" - -msgid "NodeSettingsPanel.defaultShape.message3d" -msgstr "Tento tvar je 3d tvar, jΓ‘dro bude znovu zavedeno. Chcete pokračovat?" - -msgid "NodeSettingsPanel.defaultShape.message.title" -msgstr "VΓ½chozΓ­ tvar" - -msgid "NodeSettingsPanel.defaultShape.message2d" -msgstr "Tento tvar je 2d tvar, jΓ‘dro bude znovu zavedeno. Chcete pokračovat?" - -msgid "EdgeSettingsPanel.labelEdgeColor.text" -msgstr "VΓ½chozΓ­ barva hrany:" - -msgid "EdgeSettingsPanel.sourceNodeColorCheckbox.text" -msgstr "Barva zdrojovΓ©ho uzle" - -msgid "EdgeSettingsPanel.showEdgesCheckbox.text" -msgstr "Zobrazit" - -msgid "GlobalSettingsPanel.hightlightCheckBox.text" -msgstr "ZvΓ½raznit vΓ½bΔ›r" - -msgid "GlobalSettingsPanel.labelBackgroundColor.text" -msgstr "Barva pozadΓ­:" - -msgid "GlobalSettingsPanel.autoSelectNeigborCheckbox.text" -msgstr "AutomatickΓ½ vΓ½bΔ›r blΓ­zkΓ©ho" - -msgid "LabelSettingsPanel.labelNodeFont.text" -msgstr "PΓ­smo:" - -msgid "LabelSettingsPanel.showNodeLabelsCheckbox.text" -msgstr "Uzel" - -msgid "LabelSettingsPanel.showEdgeLabelsCheckbox.text" -msgstr "Hrana" - -msgid "LabelSettingsPanel.labelEdgeFont.text" -msgstr "PΓ­smo:" - -msgid "LabelSettingsPanel.labelEdgeColor.text" -msgstr "Barva:" - -msgid "LabelSettingsPanel.labelNodeColor.text" -msgstr "Barva:" - -msgid "LabelSettingsPanel.labelNodeSize.text" -msgstr "Velikost:" - -msgid "LabelSettingsPanel.labelEdgeSize.text" -msgstr "Velikost:" - -msgid "LabelSettingsPanel.labelSizeMode.text" -msgstr "Velikost:" - -msgid "LabelSettingsPanel.labelColorMode.text" -msgstr "Barva:" - -msgid "LabelSettingsPanel.hideNonSelectedCheckbox.text" -msgstr "SkrΓ½t nevybranΓ©" - -msgid "SelectionToolbar.rectangle.tooltip" -msgstr "ObdΓ©lnΓ­kovΓ½ vΓ½bΔ›r" - -msgid "SelectionToolbar.mouse.tooltip" -msgstr "PΕ™Γ­mΓ½ vΓ½bΔ›r" - -msgid "SelectionToolbar.drag.tooltip" -msgstr "TΓ‘hnout" - -msgid "ActionsToolbar.centerOnGraph" -msgstr "VystΕ™edit na graf" - -msgid "ActionsToolbar.centerOnZero" -msgstr "VystΕ™edit na nulu" - -msgid "ActionsToolbar.resetColors" -msgstr "Resetovat barvy" - -msgid "ActionsToolbar.resetSizes" -msgstr "Resetovat velikost" - -msgid "ActionsToolbar.resetSizes.dialog" -msgstr "Nastavit velikost" - -msgid "ActionsToolbar.resetLabelColors" -msgstr "Resetovat barvu Ε‘tΓ­tku" - -msgid "ActionsToolbar.resetLabelSizes" -msgstr "Resetovat velikost Ε‘tΓ­tku" - -msgid "ActionsToolbar.resetLabelVisible" -msgstr "Resetovat viditelnost Ε‘tΓ­tku" - -msgid "LabelAttributesPanel.title" -msgstr "NastavenΓ­ textu Ε‘tΓ­tku" - -msgid "LabelAttributesPanel.nodesToggleButton.text" -msgstr "Uzle" - -msgid "LabelAttributesPanel.edgesToggleButton.text" -msgstr "Hrany" - -msgid "LabelAttributesPanel.labelComment.text" -msgstr "Vybrat vlastnosti, kterΓ© zobrazit jako Ε‘tΓ­tky" - -msgid "LabelAttributesPanel.showPropertiesCheckbox.text" -msgstr "Zobrazit vlastnosti" - -msgid "LabelSettingsPanel.configureLabelsButton.text" -msgstr "Nastavit..." - -msgid "EdgeSettingsPanel.selectionColorCheckbox.toolTipText" -msgstr "Vykreslit konkrΓ©tnΓ­ barvu na zvolenΓ© hrany" - -msgid "EdgeSettingsPanel.selectionColorCheckbox.text" -msgstr "Barva vΓ½bΔ›ru" - -msgid "EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText" -msgstr "Hrana dovnitΕ™<- Barva" - -msgid "NodeSettingsPanel.showHullsCheckbox.text" -msgstr "Zobrazit okraje" - -msgid "EdgeSettingsPanel.labelScale.text" -msgstr "Stupnice" - -msgid "EdgeSettingsPanel.labelIn.text" -msgstr "DovnitΕ™:" - -msgid "EdgeSettingsPanel.labelOut.text" -msgstr "Ven:" - -msgid "EdgeSettingsPanel.labelBoth.text" -msgstr "Oba:" - -msgid "EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText" -msgstr "Hrana ven-> Barva" - -msgid "EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText" -msgstr "Hrana obΔ›<-> Barva" - -msgid "GlobalSettingsPanel.labelZoom.text" -msgstr "PΕ™iblΓ­ΕΎenΓ­" - -msgid "EdgeSettingsPanel.labelMetaScale.text" -msgstr "Stupnice (metahrana)" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/edgeNodeColor.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/edgeNodeColor.png deleted file mode 100644 index 6223016e31..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/edgeNodeColor.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/es.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/es.po deleted file mode 100644 index 5b0b140727..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/es.po +++ /dev/null @@ -1,245 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011-2012. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:22+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "CTL_GraphAction" -msgstr "Grafo" - -msgid "CTL_GraphTopComponent" -msgstr "Grafo" - -msgid "GraphTopComponent.jToggleButton1.TabConstraints.tabTitle" -msgstr "tab2" - -msgid "GraphTopComponent.jToggleButton2.TabConstraints.tabTitle" -msgstr "tab2" - -msgid "GraphTopComponent.waitingLabel.text" -msgstr "Inicializando..." - -msgid "VizToolbar.Global.background" -msgstr "Color de fondo (click izquierdo para cambiar negro-blanco, click derecho para escoger color)" - -msgid "VizToolbar.Global.groupBarTitle" -msgstr "Global" - -msgid "VizToolbar.Global.screenshot" -msgstr "Captura de pantalla" - -msgid "VizToolbar.Global.screenshot.configure" -msgstr "Configurar..." - -msgid "VizToolbar.Nodes.groupBarTitle" -msgstr "Nodos" - -msgid "VizToolbar.Nodes.showLabels" -msgstr "Mostrar etiquetas de los nodos" - -msgid "VizToolbar.Nodes.showHulls" -msgstr "Mostrar envolturas" - -msgid "VizToolbar.Edges.showEdges" -msgstr "Mostrar aristas" - -msgid "VizToolbar.Edges.edgeNodeColor" -msgstr "Las aristas tienen el color del nodo origen" - -msgid "VizToolbar.Edges.showLabels" -msgstr "Mostrar etiquetas de las aristas" - -msgid "VizToolbar.Edges.edgeScale" -msgstr "Escala del peso de las aristas" - -msgid "VizToolbar.Edges.groupBarTitle" -msgstr "Aristas" - -msgid "VizToolbar.Labels.font" -msgstr "Fuente" - -msgid "VizToolbar.Labels.defaultColor" -msgstr "Color por defecto" - -msgid "VizToolbar.Labels.sizeMode" -msgstr "Modo de tamaΓ±o" - -msgid "VizToolbar.Labels.colorMode" -msgstr "Modo de color" - -msgid "VizToolbar.Labels.attributes" -msgstr "Atributos" - -msgid "VizToolbar.Labels.fontScale" -msgstr "Escala de la fuente" - -msgid "VizToolbar.Labels.groupBarTitle" -msgstr "Etiquetas" - -msgid "NodeSettingsPanel.adjustTextCheckbox.text" -msgstr "Ajustar al texto" - -msgid "NodeSettingsPanel.labelShape.text" -msgstr "Forma por defecto:" - -msgid "NodeSettingsPanel.defaultShape.message3d" -msgstr "Esta forma es en 3 dimensiones, el motor grΓ‘fico va a ser reinicializado. ΒΏProceder?" - -msgid "NodeSettingsPanel.defaultShape.message.title" -msgstr "Forma por defecto" - -msgid "NodeSettingsPanel.defaultShape.message2d" -msgstr "Esta forma es en 2 dimensiones, el motor grΓ‘fico va a ser reinicializado. ΒΏProceder?" - -msgid "EdgeSettingsPanel.labelEdgeColor.text" -msgstr "Color por defecto de las aristas:" - -msgid "EdgeSettingsPanel.sourceNodeColorCheckbox.text" -msgstr "Color del nodo origen" - -msgid "EdgeSettingsPanel.showEdgesCheckbox.text" -msgstr "Mostrar" - -msgid "GlobalSettingsPanel.hightlightCheckBox.text" -msgstr "Destacar selecciΓ³n" - -msgid "GlobalSettingsPanel.labelBackgroundColor.text" -msgstr "Color de fondo:" - -msgid "GlobalSettingsPanel.autoSelectNeigborCheckbox.text" -msgstr "Auto-seleccionar nodos vecinos" - -msgid "LabelSettingsPanel.labelNodeFont.text" -msgstr "Fuente:" - -msgid "LabelSettingsPanel.showNodeLabelsCheckbox.text" -msgstr "Nodos" - -msgid "LabelSettingsPanel.showEdgeLabelsCheckbox.text" -msgstr "Aristas" - -msgid "LabelSettingsPanel.labelEdgeFont.text" -msgstr "Fuente:" - -msgid "LabelSettingsPanel.labelEdgeColor.text" -msgstr "Color:" - -msgid "LabelSettingsPanel.labelNodeColor.text" -msgstr "Color:" - -msgid "LabelSettingsPanel.labelNodeSize.text" -msgstr "TamaΓ±o:" - -msgid "LabelSettingsPanel.labelEdgeSize.text" -msgstr "TamaΓ±o:" - -msgid "LabelSettingsPanel.labelSizeMode.text" -msgstr "TamaΓ±o:" - -msgid "LabelSettingsPanel.labelColorMode.text" -msgstr "Color:" - -msgid "LabelSettingsPanel.hideNonSelectedCheckbox.text" -msgstr "Ocultar no seleccionados" - -msgid "SelectionToolbar.rectangle.tooltip" -msgstr "SelecciΓ³n rectangular" - -msgid "SelectionToolbar.mouse.tooltip" -msgstr "SelecciΓ³n directa" - -msgid "SelectionToolbar.drag.tooltip" -msgstr "Desplazar" - -msgid "ActionsToolbar.centerOnGraph" -msgstr "Centrar en el grafo" - -msgid "ActionsToolbar.centerOnZero" -msgstr "Centrar en el punto cero" - -msgid "ActionsToolbar.resetColors" -msgstr "Reestablecer colores" - -msgid "ActionsToolbar.resetSizes" -msgstr "Reestablecer tamaΓ±os" - -msgid "ActionsToolbar.resetSizes.dialog" -msgstr "Establecer tamaΓ±o" - -msgid "ActionsToolbar.resetLabelColors" -msgstr "Reestablecer colores de las etiquetas" - -msgid "ActionsToolbar.resetLabelSizes" -msgstr "Reestablecer tamaΓ±o de las etiquetas" - -msgid "ActionsToolbar.resetLabelVisible" -msgstr "Reestablecer visibilidad de las etiquetas" - -msgid "LabelAttributesPanel.title" -msgstr "ConfiguraciΓ³n del texto de la etiquetas" - -msgid "LabelAttributesPanel.nodesToggleButton.text" -msgstr "Nodos" - -msgid "LabelAttributesPanel.edgesToggleButton.text" -msgstr "Aristas" - -msgid "LabelAttributesPanel.labelComment.text" -msgstr "Seleccionar atributos para mostrar como etiquetas" - -msgid "LabelAttributesPanel.showPropertiesCheckbox.text" -msgstr "Mostrar propiedades" - -msgid "LabelSettingsPanel.configureLabelsButton.text" -msgstr "Configurar..." - -msgid "EdgeSettingsPanel.selectionColorCheckbox.toolTipText" -msgstr "Dibujar color particular para las aristas seleccionadas" - -msgid "EdgeSettingsPanel.selectionColorCheckbox.text" -msgstr "Color de selecciΓ³n" - -msgid "EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText" -msgstr "Color de arista Entrante <-" - -msgid "NodeSettingsPanel.showHullsCheckbox.text" -msgstr "Mostrar envolturas" - -msgid "EdgeSettingsPanel.labelScale.text" -msgstr "Escala" - -msgid "EdgeSettingsPanel.labelIn.text" -msgstr "Entrada:" - -msgid "EdgeSettingsPanel.labelOut.text" -msgstr "Salida" - -msgid "EdgeSettingsPanel.labelBoth.text" -msgstr "Bidireccional:" - -msgid "EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText" -msgstr "Color de arista Saliente ->" - -msgid "EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText" -msgstr "Color de arista Bidireccional <->" - -msgid "GlobalSettingsPanel.labelZoom.text" -msgstr "Zoom" - -msgid "EdgeSettingsPanel.labelMetaScale.text" -msgstr "Escala (meta-arista)" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/fr.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/fr.po deleted file mode 100644 index b2b0a144a1..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/fr.po +++ /dev/null @@ -1,244 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:13+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "CTL_GraphAction" -msgstr "Graphe" - -msgid "CTL_GraphTopComponent" -msgstr "Graphe" - -msgid "GraphTopComponent.jToggleButton1.TabConstraints.tabTitle" -msgstr "tab2" - -msgid "GraphTopComponent.jToggleButton2.TabConstraints.tabTitle" -msgstr "tab2" - -msgid "GraphTopComponent.waitingLabel.text" -msgstr "Initialisation..." - -msgid "VizToolbar.Global.background" -msgstr "Couleur d'arriΓ¨re-plan" - -msgid "VizToolbar.Global.groupBarTitle" -msgstr "" - -msgid "VizToolbar.Global.screenshot" -msgstr "Capturer l'Γ©cran" - -msgid "VizToolbar.Global.screenshot.configure" -msgstr "Configurer..." - -msgid "VizToolbar.Nodes.groupBarTitle" -msgstr "" - -msgid "VizToolbar.Nodes.showLabels" -msgstr "Afficher les labels des noeuds" - -msgid "VizToolbar.Nodes.showHulls" -msgstr "Afficher les enveloppes" - -msgid "VizToolbar.Edges.showEdges" -msgstr "Afficher les liens" - -msgid "VizToolbar.Edges.edgeNodeColor" -msgstr "Les liens ont la couleur du noeud source" - -msgid "VizToolbar.Edges.showLabels" -msgstr "Afficher les labels des liens" - -msgid "VizToolbar.Edges.edgeScale" -msgstr "Γ‰chelle du poids des liens" - -msgid "VizToolbar.Edges.groupBarTitle" -msgstr "" - -msgid "VizToolbar.Labels.font" -msgstr "Police" - -msgid "VizToolbar.Labels.defaultColor" -msgstr "Couleur par dΓ©faut" - -msgid "VizToolbar.Labels.sizeMode" -msgstr "Mode de taille" - -msgid "VizToolbar.Labels.colorMode" -msgstr "Mode de couleur" - -msgid "VizToolbar.Labels.attributes" -msgstr "Attributs" - -msgid "VizToolbar.Labels.fontScale" -msgstr "Γ‰chelle de la police" - -msgid "VizToolbar.Labels.groupBarTitle" -msgstr "" - -msgid "NodeSettingsPanel.adjustTextCheckbox.text" -msgstr "Ajuster au texte" - -msgid "NodeSettingsPanel.labelShape.text" -msgstr "Forme par dΓ©faut :" - -msgid "NodeSettingsPanel.defaultShape.message3d" -msgstr "Cette forme est en 3d, le moteur graphique sera rΓ©initialisΓ©. Confirmer ?" - -msgid "NodeSettingsPanel.defaultShape.message.title" -msgstr "Forme par dΓ©faut" - -msgid "NodeSettingsPanel.defaultShape.message2d" -msgstr "Cette forme est en 2d, le moteur graphique sera rΓ©initialisΓ©. Confirmer ?" - -msgid "EdgeSettingsPanel.labelEdgeColor.text" -msgstr "Couleur des liens par dΓ©faut :" - -msgid "EdgeSettingsPanel.sourceNodeColorCheckbox.text" -msgstr "Couleur du noeud source" - -msgid "EdgeSettingsPanel.showEdgesCheckbox.text" -msgstr "Afficher" - -msgid "GlobalSettingsPanel.hightlightCheckBox.text" -msgstr "SΓ©lection en surbrillance" - -msgid "GlobalSettingsPanel.labelBackgroundColor.text" -msgstr "Couleur d'arriΓ¨re-plan :" - -msgid "GlobalSettingsPanel.autoSelectNeigborCheckbox.text" -msgstr "Voisins sΓ©lectionnΓ©s" - -msgid "LabelSettingsPanel.labelNodeFont.text" -msgstr "Police :" - -msgid "LabelSettingsPanel.showNodeLabelsCheckbox.text" -msgstr "Noeud" - -msgid "LabelSettingsPanel.showEdgeLabelsCheckbox.text" -msgstr "Lien" - -msgid "LabelSettingsPanel.labelEdgeFont.text" -msgstr "Police :" - -msgid "LabelSettingsPanel.labelEdgeColor.text" -msgstr "Couleur :" - -msgid "LabelSettingsPanel.labelNodeColor.text" -msgstr "Couleur :" - -msgid "LabelSettingsPanel.labelNodeSize.text" -msgstr "Taille :" - -msgid "LabelSettingsPanel.labelEdgeSize.text" -msgstr "Taille :" - -msgid "LabelSettingsPanel.labelSizeMode.text" -msgstr "Taille :" - -msgid "LabelSettingsPanel.labelColorMode.text" -msgstr "Couleur :" - -msgid "LabelSettingsPanel.hideNonSelectedCheckbox.text" -msgstr "Cacher si non sΓ©lectionnΓ©" - -msgid "SelectionToolbar.rectangle.tooltip" -msgstr "Rectangle de sΓ©lection" - -msgid "SelectionToolbar.mouse.tooltip" -msgstr "SΓ©lection directe" - -msgid "SelectionToolbar.drag.tooltip" -msgstr "DΓ©placement" - -msgid "ActionsToolbar.centerOnGraph" -msgstr "Centrer sur le graphe" - -msgid "ActionsToolbar.centerOnZero" -msgstr "Centrer sur zΓ©ro" - -msgid "ActionsToolbar.resetColors" -msgstr "RΓ©initialiser les couleurs" - -msgid "ActionsToolbar.resetSizes" -msgstr "RΓ©initialiser les tailles" - -msgid "ActionsToolbar.resetSizes.dialog" -msgstr "Mettre Γ  la taille" - -msgid "ActionsToolbar.resetLabelColors" -msgstr "RΓ©initialiser la couleur des labels" - -msgid "ActionsToolbar.resetLabelSizes" -msgstr "RΓ©initialiser la taille des labels" - -msgid "ActionsToolbar.resetLabelVisible" -msgstr "RΓ©initialiser la visibilitΓ© des labels" - -msgid "LabelAttributesPanel.title" -msgstr "ParamΓ¨tres du texte des labels" - -msgid "LabelAttributesPanel.nodesToggleButton.text" -msgstr "Noeuds" - -msgid "LabelAttributesPanel.edgesToggleButton.text" -msgstr "Liens" - -msgid "LabelAttributesPanel.labelComment.text" -msgstr "SΓ©lectionner les attributs Γ  afficher en tant que label" - -msgid "LabelAttributesPanel.showPropertiesCheckbox.text" -msgstr "Afficher les propriΓ©tΓ©s" - -msgid "LabelSettingsPanel.configureLabelsButton.text" -msgstr "Configurer..." - -msgid "EdgeSettingsPanel.selectionColorCheckbox.toolTipText" -msgstr "Dessiner des couleurs particuliΓ¨res aux liens sΓ©lectionnΓ©s" - -msgid "EdgeSettingsPanel.selectionColorCheckbox.text" -msgstr "Couleur de sΓ©lection" - -msgid "EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText" -msgstr "Couleur de lien ENTRANT<-" - -msgid "NodeSettingsPanel.showHullsCheckbox.text" -msgstr "Afficher les enveloppes" - -msgid "EdgeSettingsPanel.labelScale.text" -msgstr "Echelle" - -msgid "EdgeSettingsPanel.labelIn.text" -msgstr "Entrant :" - -msgid "EdgeSettingsPanel.labelOut.text" -msgstr "Sortant :" - -msgid "EdgeSettingsPanel.labelBoth.text" -msgstr "Bidirectionnel :" - -msgid "EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText" -msgstr "Couleur de lien SORTANT->" - -msgid "EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText" -msgstr "Couleur de lien E/S<->" - -msgid "GlobalSettingsPanel.labelZoom.text" -msgstr "Zoom" - -msgid "EdgeSettingsPanel.labelMetaScale.text" -msgstr "Echelle (mΓ©ta-liens)" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/hand.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/hand.png deleted file mode 100644 index 37c7c2c161..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/hand.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/ja.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/ja.po deleted file mode 100644 index 95e09082a5..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/ja.po +++ /dev/null @@ -1,244 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:13+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "CTL_GraphAction" -msgstr "グラフ" - -msgid "CTL_GraphTopComponent" -msgstr "グラフ" - -msgid "GraphTopComponent.jToggleButton1.TabConstraints.tabTitle" -msgstr "γ‚Ώγƒ–2" - -msgid "GraphTopComponent.jToggleButton2.TabConstraints.tabTitle" -msgstr "γ‚Ώγƒ–2" - -msgid "GraphTopComponent.waitingLabel.text" -msgstr "εˆζœŸεŒ–δΈ­..." - -msgid "VizToolbar.Global.background" -msgstr "θƒŒζ™―θ‰²" - -msgid "VizToolbar.Global.groupBarTitle" -msgstr "" - -msgid "VizToolbar.Global.screenshot" -msgstr "γ‚Ήγ‚―γƒͺγƒΌγƒ³γ‚·γƒ§γƒƒγƒˆζ’ε½±" - -msgid "VizToolbar.Global.screenshot.configure" -msgstr "θ¨­εš..." - -msgid "VizToolbar.Nodes.groupBarTitle" -msgstr "" - -msgid "VizToolbar.Nodes.showLabels" -msgstr "γƒŽγƒΌγƒ‰γƒ©γƒ™γƒ«γ‚’θ‘¨η€Ί" - -msgid "VizToolbar.Nodes.showHulls" -msgstr "ε€–ζ»γ‚’葨瀺" - -msgid "VizToolbar.Edges.showEdges" -msgstr "辺を葨瀺" - -msgid "VizToolbar.Edges.edgeNodeColor" -msgstr "θΎΊγ―γ‚½γƒΌγ‚ΉγƒŽγƒΌγƒ‰γθ‰²γ§γ™γ€‚" - -msgid "VizToolbar.Edges.showLabels" -msgstr "辺ラベルを葨瀺" - -msgid "VizToolbar.Edges.edgeScale" -msgstr "θΎΊγι‡γΏγγ‚Ήγ‚±γƒΌγƒ«" - -msgid "VizToolbar.Edges.groupBarTitle" -msgstr "" - -msgid "VizToolbar.Labels.font" -msgstr "γƒ•γ‚©γƒ³γƒˆ" - -msgid "VizToolbar.Labels.defaultColor" -msgstr "γƒ‡γƒ•γ‚©γƒ«γƒˆθ‰²" - -msgid "VizToolbar.Labels.sizeMode" -msgstr "ァむズ・ヒード" - -msgid "VizToolbar.Labels.colorMode" -msgstr "カラー・ヒード" - -msgid "VizToolbar.Labels.attributes" -msgstr "ε±žζ€§" - -msgid "VizToolbar.Labels.fontScale" -msgstr "γƒ•γ‚©γƒ³γƒˆγ‚΅γ‚€γ‚Ίγ‚Ήγ‚±γƒΌγƒ«" - -msgid "VizToolbar.Labels.groupBarTitle" -msgstr "" - -msgid "NodeSettingsPanel.adjustTextCheckbox.text" -msgstr "γƒ†γ‚­γ‚Ήγƒˆγ«θͺΏζ•΄γ™γ‚‹" - -msgid "NodeSettingsPanel.labelShape.text" -msgstr "γƒ‡γƒ•γ‚©γƒ«γƒˆε›³ε½’:" - -msgid "NodeSettingsPanel.defaultShape.message3d" -msgstr "こγε½’ηŠΆγ―γ€3Dε½’ηŠΆγ§γ‚γ‚Šγ€γ‚¨γƒ³γ‚Έγƒ³γŒεˆζœŸεŒ–γ•γ‚ŒγΎγ™γ€‚ηΆšθ‘Œγ—γΎγ™γ‹οΌŸ" - -msgid "NodeSettingsPanel.defaultShape.message.title" -msgstr "γƒ‡γƒ•γ‚©γƒ«γƒˆε›³ε½’" - -msgid "NodeSettingsPanel.defaultShape.message2d" -msgstr "こγε½’犢は2欑元γε½’ηŠΆγ§γ‚γ‚‹γ€γ‚¨γƒ³γ‚Έγƒ³γŒεˆζœŸεŒ–γ•γ‚ŒγΎγ™γ€‚ηΆšθ‘Œγ—γΎγ™γ‹οΌŸ" - -msgid "EdgeSettingsPanel.labelEdgeColor.text" -msgstr "θΎΊγƒ‡γƒ•γ‚©γƒ«γƒˆθ‰²:" - -msgid "EdgeSettingsPanel.sourceNodeColorCheckbox.text" -msgstr "γ‚½γƒΌγ‚Ήγƒ»γƒŽγƒΌγƒ‰γƒ»γ‚«γƒ©γƒΌ" - -msgid "EdgeSettingsPanel.showEdgesCheckbox.text" -msgstr "葨瀺" - -msgid "GlobalSettingsPanel.hightlightCheckBox.text" -msgstr "ιΈζŠžγ‚’εΌ·θͺΏ" - -msgid "GlobalSettingsPanel.labelBackgroundColor.text" -msgstr "θƒŒζ™―θ‰²:" - -msgid "GlobalSettingsPanel.autoSelectNeigborCheckbox.text" -msgstr "隣ζŽ₯γ‚’θ‡ͺε‹•ιΈζŠž" - -msgid "LabelSettingsPanel.labelNodeFont.text" -msgstr "γƒ•γ‚©γƒ³γƒˆ:" - -msgid "LabelSettingsPanel.showNodeLabelsCheckbox.text" -msgstr "γƒŽγƒΌγƒ‰" - -msgid "LabelSettingsPanel.showEdgeLabelsCheckbox.text" -msgstr "θΎΊ" - -msgid "LabelSettingsPanel.labelEdgeFont.text" -msgstr "γƒ•γ‚©γƒ³γƒˆ:" - -msgid "LabelSettingsPanel.labelEdgeColor.text" -msgstr "色:" - -msgid "LabelSettingsPanel.labelNodeColor.text" -msgstr "色:" - -msgid "LabelSettingsPanel.labelNodeSize.text" -msgstr "γ‚΅γ‚€γ‚Ί:" - -msgid "LabelSettingsPanel.labelEdgeSize.text" -msgstr "γ‚΅γ‚€γ‚Ί:" - -msgid "LabelSettingsPanel.labelSizeMode.text" -msgstr "γ‚΅γ‚€γ‚Ί:" - -msgid "LabelSettingsPanel.labelColorMode.text" -msgstr "色:" - -msgid "LabelSettingsPanel.hideNonSelectedCheckbox.text" -msgstr "ιžιΈζŠžγ‚’ιš γ™" - -msgid "SelectionToolbar.rectangle.tooltip" -msgstr "矩归選択" - -msgid "SelectionToolbar.mouse.tooltip" -msgstr "η›΄ζŽ₯選択" - -msgid "SelectionToolbar.drag.tooltip" -msgstr "ドラッグ" - -msgid "ActionsToolbar.centerOnGraph" -msgstr "グラフを中心" - -msgid "ActionsToolbar.centerOnZero" -msgstr "γ‚Όγƒ­γ‚’δΈ­εΏƒ" - -msgid "ActionsToolbar.resetColors" -msgstr "カラーをγƒͺγ‚»γƒƒγƒˆ" - -msgid "ActionsToolbar.resetSizes" -msgstr "γ‚΅γ‚€γ‚Ίγ‚’γƒͺγ‚»γƒƒγƒˆ" - -msgid "ActionsToolbar.resetSizes.dialog" -msgstr "γ‚΅γ‚€γ‚Ίγ‚’θ¨­εš" - -msgid "ActionsToolbar.resetLabelColors" -msgstr "ラベルカラーをγƒͺγ‚»γƒƒγƒˆ" - -msgid "ActionsToolbar.resetLabelSizes" -msgstr "ラベルァむズをγƒͺγ‚»γƒƒγƒˆ" - -msgid "ActionsToolbar.resetLabelVisible" -msgstr "ラベルを可視にγƒͺγ‚»γƒƒγƒˆ" - -msgid "LabelAttributesPanel.title" -msgstr "ラベルγγƒ†γ‚­γ‚Ήγƒˆγθ¨­εš" - -msgid "LabelAttributesPanel.nodesToggleButton.text" -msgstr "γƒŽγƒΌγƒ‰" - -msgid "LabelAttributesPanel.edgesToggleButton.text" -msgstr "θΎΊ" - -msgid "LabelAttributesPanel.labelComment.text" -msgstr "γƒ©γƒ™γƒ«γ¨γ—γ¦θ‘¨η€Ίγ™γ‚‹ε±žζ€§γ‚’ιΈζŠžγ—γΎγ™γ€‚" - -msgid "LabelAttributesPanel.showPropertiesCheckbox.text" -msgstr "プロパティを葨瀺" - -msgid "LabelSettingsPanel.configureLabelsButton.text" -msgstr "θ¨­εš..." - -msgid "EdgeSettingsPanel.selectionColorCheckbox.toolTipText" -msgstr "ιΈζŠžγ—γŸθΎΊγγŸγ‚γη‰Ήεšγθ‰²γ‚’描画" - -msgid "EdgeSettingsPanel.selectionColorCheckbox.text" -msgstr "ιΈζŠžθ‰²" - -msgid "EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText" -msgstr "桁ε…₯θΎΊ<-色" - -msgid "NodeSettingsPanel.showHullsCheckbox.text" -msgstr "ε€–ζ»γ‚’葨瀺" - -msgid "EdgeSettingsPanel.labelScale.text" -msgstr "スケール" - -msgid "EdgeSettingsPanel.labelIn.text" -msgstr "むン:" - -msgid "EdgeSettingsPanel.labelOut.text" -msgstr "γ‚’γ‚¦γƒˆ: " - -msgid "EdgeSettingsPanel.labelBoth.text" -msgstr "εŒζ–Ήε‘:" - -msgid "EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText" -msgstr "桁出辺->色" - -msgid "EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText" -msgstr "εŒζ–Ήε‘θΎΊ<->色" - -msgid "GlobalSettingsPanel.labelZoom.text" -msgstr "ζ‹‘ε€§" - -msgid "EdgeSettingsPanel.labelMetaScale.text" -msgstr "スケール(パタ辺)" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/labelColorMode.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/labelColorMode.png deleted file mode 100644 index 11eb6344c4..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/labelColorMode.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/labelSizeMode.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/labelSizeMode.png deleted file mode 100644 index 597078c3cc..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/labelSizeMode.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/mouse.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/mouse.png deleted file mode 100644 index 4ada07219c..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/mouse.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/on.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/on.png deleted file mode 100644 index fc2b07faf0..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/on.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/org-gephi-visualization-component.pot b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/org-gephi-visualization-component.pot deleted file mode 100644 index 37881df6ed..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/org-gephi-visualization-component.pot +++ /dev/null @@ -1,247 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "CTL_GraphAction" -msgstr "Graph" - -msgid "CTL_GraphTopComponent" -msgstr "Graph" - -msgid "GraphTopComponent.jToggleButton1.TabConstraints.tabTitle" -msgstr "tab2" - -msgid "GraphTopComponent.jToggleButton2.TabConstraints.tabTitle" -msgstr "tab2" - -msgid "GraphTopComponent.waitingLabel.text" -msgstr "Initializing..." - -msgid "VizToolbar.Global.background" -msgstr "" -"Background color (left click to switch black-white, right click to choose " -"color)" - -msgid "VizToolbar.Global.groupBarTitle" -msgstr "Global" - -msgid "VizToolbar.Global.screenshot" -msgstr "Take screenshot" - -msgid "VizToolbar.Global.screenshot.configure" -msgstr "Configure..." - -msgid "VizToolbar.Nodes.groupBarTitle" -msgstr "Nodes" - -msgid "VizToolbar.Nodes.showLabels" -msgstr "Show Node Labels" - -msgid "VizToolbar.Nodes.showHulls" -msgstr "Show Hulls" - -msgid "VizToolbar.Edges.showEdges" -msgstr "Show Edges" - -msgid "VizToolbar.Edges.edgeNodeColor" -msgstr "Edges have source node color" - -msgid "VizToolbar.Edges.showLabels" -msgstr "Show Edge Labels" - -msgid "VizToolbar.Edges.edgeScale" -msgstr "Edge weight scale" - -msgid "VizToolbar.Edges.groupBarTitle" -msgstr "Edges" - -msgid "VizToolbar.Labels.font" -msgstr "Font" - -msgid "VizToolbar.Labels.defaultColor" -msgstr "Default color" - -msgid "VizToolbar.Labels.sizeMode" -msgstr "Size mode" - -msgid "VizToolbar.Labels.colorMode" -msgstr "Color mode" - -msgid "VizToolbar.Labels.attributes" -msgstr "Attributes" - -msgid "VizToolbar.Labels.fontScale" -msgstr "Font size scale" - -msgid "VizToolbar.Labels.groupBarTitle" -msgstr "Labels" - -msgid "NodeSettingsPanel.adjustTextCheckbox.text" -msgstr "Adjust to text" - -msgid "NodeSettingsPanel.labelShape.text" -msgstr "Default shape:" - -msgid "NodeSettingsPanel.defaultShape.message3d" -msgstr "" -"This shape is a 3d shape, the engine will be reinitialized. Do you want to " -"proceed ?" - -msgid "NodeSettingsPanel.defaultShape.message.title" -msgstr "Default shape" - -msgid "NodeSettingsPanel.defaultShape.message2d" -msgstr "" -"This shape is a 2d shape, the engine will be reinitialized. Do you want to " -"proceed ?" - -msgid "EdgeSettingsPanel.labelEdgeColor.text" -msgstr "Edge default color:" - -msgid "EdgeSettingsPanel.sourceNodeColorCheckbox.text" -msgstr "Source node color" - -msgid "EdgeSettingsPanel.showEdgesCheckbox.text" -msgstr "Show" - -msgid "GlobalSettingsPanel.hightlightCheckBox.text" -msgstr "Highlight selection" - -msgid "GlobalSettingsPanel.labelBackgroundColor.text" -msgstr "Background color:" - -msgid "GlobalSettingsPanel.autoSelectNeigborCheckbox.text" -msgstr "Autoselect neighbor" - -msgid "LabelSettingsPanel.labelNodeFont.text" -msgstr "Font:" - -msgid "LabelSettingsPanel.showNodeLabelsCheckbox.text" -msgstr "Node" - -msgid "LabelSettingsPanel.showEdgeLabelsCheckbox.text" -msgstr "Edge" - -msgid "LabelSettingsPanel.labelEdgeFont.text" -msgstr "Font:" - -msgid "LabelSettingsPanel.labelEdgeColor.text" -msgstr "Color:" - -msgid "LabelSettingsPanel.labelNodeColor.text" -msgstr "Color:" - -msgid "LabelSettingsPanel.labelNodeSize.text" -msgstr "Size:" - -msgid "LabelSettingsPanel.labelEdgeSize.text" -msgstr "Size:" - -msgid "LabelSettingsPanel.labelSizeMode.text" -msgstr "Size:" - -msgid "LabelSettingsPanel.labelColorMode.text" -msgstr "Color:" - -msgid "LabelSettingsPanel.hideNonSelectedCheckbox.text" -msgstr "Hide non-selected" - -msgid "SelectionToolbar.rectangle.tooltip" -msgstr "Rectangle selection" - -msgid "SelectionToolbar.mouse.tooltip" -msgstr "Direct selection" - -msgid "SelectionToolbar.drag.tooltip" -msgstr "Drag" - -msgid "ActionsToolbar.centerOnGraph" -msgstr "Center On Graph" - -msgid "ActionsToolbar.centerOnZero" -msgstr "Center On Zero" - -msgid "ActionsToolbar.resetColors" -msgstr "Reset colors" - -msgid "ActionsToolbar.resetSizes" -msgstr "Reset size" - -msgid "ActionsToolbar.resetSizes.dialog" -msgstr "Set size" - -msgid "ActionsToolbar.resetLabelColors" -msgstr "Reset label color" - -msgid "ActionsToolbar.resetLabelSizes" -msgstr "Reset label size" - -msgid "ActionsToolbar.resetLabelVisible" -msgstr "Reset label visible" - -msgid "LabelAttributesPanel.title" -msgstr "Label text settings" - -msgid "LabelAttributesPanel.nodesToggleButton.text" -msgstr "Nodes" - -msgid "LabelAttributesPanel.edgesToggleButton.text" -msgstr "Edges" - -msgid "LabelAttributesPanel.labelComment.text" -msgstr "Select attributes to display as labels" - -msgid "LabelAttributesPanel.showPropertiesCheckbox.text" -msgstr "Show properties" - -msgid "LabelSettingsPanel.configureLabelsButton.text" -msgstr "Configure..." - -msgid "EdgeSettingsPanel.selectionColorCheckbox.toolTipText" -msgstr "Draw particular color for selected edges" - -msgid "EdgeSettingsPanel.selectionColorCheckbox.text" -msgstr "Selection color" - -msgid "EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText" -msgstr "Edge IN<- Color" - -msgid "NodeSettingsPanel.showHullsCheckbox.text" -msgstr "Show hulls" - -msgid "EdgeSettingsPanel.labelScale.text" -msgstr "Scale" - -msgid "EdgeSettingsPanel.labelIn.text" -msgstr "In:" - -msgid "EdgeSettingsPanel.labelOut.text" -msgstr "Out:" - -msgid "EdgeSettingsPanel.labelBoth.text" -msgstr "Both:" - -msgid "EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText" -msgstr "Edge Out-> Color" - -msgid "EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText" -msgstr "Edge Both<-> Color" - -msgid "GlobalSettingsPanel.labelZoom.text" -msgstr "Zoom" - -msgid "EdgeSettingsPanel.labelMetaScale.text" -msgstr "Scale (meta-edge)" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/pt_BR.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/pt_BR.po deleted file mode 100644 index 532467ec7d..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/pt_BR.po +++ /dev/null @@ -1,245 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -# CΓ©lio Faria Jr. , 2011-2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-18 11:13+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "CTL_GraphAction" -msgstr "Grafo" - -msgid "CTL_GraphTopComponent" -msgstr "Grafo" - -msgid "GraphTopComponent.jToggleButton1.TabConstraints.tabTitle" -msgstr "tab2" - -msgid "GraphTopComponent.jToggleButton2.TabConstraints.tabTitle" -msgstr "tab2" - -msgid "GraphTopComponent.waitingLabel.text" -msgstr "Inicializando..." - -msgid "VizToolbar.Global.background" -msgstr "Cor de fundo (clique com o botΓ£o esquerdo para alternar entre branco e preto e com o botΓ£o direito para escolher a cor)" - -msgid "VizToolbar.Global.groupBarTitle" -msgstr "Global" - -msgid "VizToolbar.Global.screenshot" -msgstr "Capturar tela" - -msgid "VizToolbar.Global.screenshot.configure" -msgstr "Configurar..." - -msgid "VizToolbar.Nodes.groupBarTitle" -msgstr "NΓ³s" - -msgid "VizToolbar.Nodes.showLabels" -msgstr "Mostrar rΓ³tulos dos nΓ³s" - -msgid "VizToolbar.Nodes.showHulls" -msgstr "Exibir bordas" - -msgid "VizToolbar.Edges.showEdges" -msgstr "Exibir arestas" - -msgid "VizToolbar.Edges.edgeNodeColor" -msgstr "Arestas tΓͺm a cor do nΓ³ de origem" - -msgid "VizToolbar.Edges.showLabels" -msgstr "Exibir rΓ³tulos de arestas" - -msgid "VizToolbar.Edges.edgeScale" -msgstr "Escala de peso de arestas" - -msgid "VizToolbar.Edges.groupBarTitle" -msgstr "Arestas" - -msgid "VizToolbar.Labels.font" -msgstr "Fonte" - -msgid "VizToolbar.Labels.defaultColor" -msgstr "Cor padrΓ£o" - -msgid "VizToolbar.Labels.sizeMode" -msgstr "Modo de tamanho" - -msgid "VizToolbar.Labels.colorMode" -msgstr "Modo de cor" - -msgid "VizToolbar.Labels.attributes" -msgstr "Atributos" - -msgid "VizToolbar.Labels.fontScale" -msgstr "Escala de tamanho da fonte" - -msgid "VizToolbar.Labels.groupBarTitle" -msgstr "RΓ³tulos" - -msgid "NodeSettingsPanel.adjustTextCheckbox.text" -msgstr "Ajustar ao texto" - -msgid "NodeSettingsPanel.labelShape.text" -msgstr "Forma padrΓ£o:" - -msgid "NodeSettingsPanel.defaultShape.message3d" -msgstr "Esta Γ© uma forma 3D, o motor grΓ‘fico vai ser reinicializado. Deseja continuar?" - -msgid "NodeSettingsPanel.defaultShape.message.title" -msgstr "Forma padrΓ£o" - -msgid "NodeSettingsPanel.defaultShape.message2d" -msgstr "Esta Γ© uma forma 2D, o motor grΓ‘fico vai ser reinicializado. Deseja continuar?" - -msgid "EdgeSettingsPanel.labelEdgeColor.text" -msgstr "Cor padrΓ£o da aresta:" - -msgid "EdgeSettingsPanel.sourceNodeColorCheckbox.text" -msgstr "Cor do nΓ³ de origem" - -msgid "EdgeSettingsPanel.showEdgesCheckbox.text" -msgstr "Exibir" - -msgid "GlobalSettingsPanel.hightlightCheckBox.text" -msgstr "Destacar seleΓ§Γ£o" - -msgid "GlobalSettingsPanel.labelBackgroundColor.text" -msgstr "Cor de fundo:" - -msgid "GlobalSettingsPanel.autoSelectNeigborCheckbox.text" -msgstr "Auto-selecionar vizinho" - -msgid "LabelSettingsPanel.labelNodeFont.text" -msgstr "Fonte:" - -msgid "LabelSettingsPanel.showNodeLabelsCheckbox.text" -msgstr "NΓ³" - -msgid "LabelSettingsPanel.showEdgeLabelsCheckbox.text" -msgstr "Aresta" - -msgid "LabelSettingsPanel.labelEdgeFont.text" -msgstr "Fonte:" - -msgid "LabelSettingsPanel.labelEdgeColor.text" -msgstr "Cor:" - -msgid "LabelSettingsPanel.labelNodeColor.text" -msgstr "Cor:" - -msgid "LabelSettingsPanel.labelNodeSize.text" -msgstr "Tamanho:" - -msgid "LabelSettingsPanel.labelEdgeSize.text" -msgstr "Tamanho:" - -msgid "LabelSettingsPanel.labelSizeMode.text" -msgstr "Tamanho:" - -msgid "LabelSettingsPanel.labelColorMode.text" -msgstr "Cor:" - -msgid "LabelSettingsPanel.hideNonSelectedCheckbox.text" -msgstr "Esconder nΓ£o selecionados" - -msgid "SelectionToolbar.rectangle.tooltip" -msgstr "SeleΓ§Γ£o retangular" - -msgid "SelectionToolbar.mouse.tooltip" -msgstr "SeleΓ§Γ£o direta" - -msgid "SelectionToolbar.drag.tooltip" -msgstr "Arrastar" - -msgid "ActionsToolbar.centerOnGraph" -msgstr "Centralizar no grafo" - -msgid "ActionsToolbar.centerOnZero" -msgstr "Centralizar no ponto Zero" - -msgid "ActionsToolbar.resetColors" -msgstr "Restaurar cores" - -msgid "ActionsToolbar.resetSizes" -msgstr "Restaurar tamanho" - -msgid "ActionsToolbar.resetSizes.dialog" -msgstr "Definir tamanho" - -msgid "ActionsToolbar.resetLabelColors" -msgstr "Restaurar cor do rΓ³tulo" - -msgid "ActionsToolbar.resetLabelSizes" -msgstr "Restaurar tamanho do rΓ³tulo" - -msgid "ActionsToolbar.resetLabelVisible" -msgstr "Restaurar rΓ³tulos visΓ­veis" - -msgid "LabelAttributesPanel.title" -msgstr "ConfiguraΓ§Γ΅es do texto do rΓ³tulo" - -msgid "LabelAttributesPanel.nodesToggleButton.text" -msgstr "NΓ³s" - -msgid "LabelAttributesPanel.edgesToggleButton.text" -msgstr "Arestas" - -msgid "LabelAttributesPanel.labelComment.text" -msgstr "Selecione os atributos para exibir como rΓ³tulos" - -msgid "LabelAttributesPanel.showPropertiesCheckbox.text" -msgstr "Exibir propriedades" - -msgid "LabelSettingsPanel.configureLabelsButton.text" -msgstr "Configurar..." - -msgid "EdgeSettingsPanel.selectionColorCheckbox.toolTipText" -msgstr "Usar cor determinada para as arestas selecionadas" - -msgid "EdgeSettingsPanel.selectionColorCheckbox.text" -msgstr "Colorir seleΓ§Γ£o" - -msgid "EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText" -msgstr "Cor da aresta de entrada <-" - -msgid "NodeSettingsPanel.showHullsCheckbox.text" -msgstr "Exibir bordas" - -msgid "EdgeSettingsPanel.labelScale.text" -msgstr "Escala" - -msgid "EdgeSettingsPanel.labelIn.text" -msgstr "Entrada:" - -msgid "EdgeSettingsPanel.labelOut.text" -msgstr "SaΓ­da:" - -msgid "EdgeSettingsPanel.labelBoth.text" -msgstr "Ambos:" - -msgid "EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText" -msgstr "Cor da aresta de saΓ­da ->" - -msgid "EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText" -msgstr "Cor da aresta bidirecional <->" - -msgid "GlobalSettingsPanel.labelZoom.text" -msgstr "Zoom" - -msgid "EdgeSettingsPanel.labelMetaScale.text" -msgstr "Escala (meta-aresta)" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/rectangle.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/rectangle.png deleted file mode 100644 index 02118fa067..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/rectangle.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/resetLabelColor.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/resetLabelColor.png deleted file mode 100644 index 676f1abb5e..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/resetLabelColor.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/resetLabelSize.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/resetLabelSize.png deleted file mode 100644 index 9d953b012a..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/resetLabelSize.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/resetLabelVisible.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/resetLabelVisible.png deleted file mode 100644 index 2ecd09bb80..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/resetLabelVisible.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/resetSize.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/resetSize.png deleted file mode 100644 index 3140e77c47..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/resetSize.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/ru.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/ru.po deleted file mode 100644 index 583b1ac540..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/ru.po +++ /dev/null @@ -1,245 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2012. -# FIRST AUTHOR , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:13+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "CTL_GraphAction" -msgstr "ΠΠ°Ρ€ΠΈΡΠΎΠ²Π°Ρ‚ΡŒ Π³Ρ€Π°Ρ„" - -msgid "CTL_GraphTopComponent" -msgstr "Π“Ρ€Π°Ρ„" - -msgid "GraphTopComponent.jToggleButton1.TabConstraints.tabTitle" -msgstr "GraphTopComponent.jToggleButton1.TabConstraints.tabTitle" - -msgid "GraphTopComponent.jToggleButton2.TabConstraints.tabTitle" -msgstr "GraphTopComponent.jToggleButton2.TabConstraints.tabTitle" - -msgid "GraphTopComponent.waitingLabel.text" -msgstr "Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ" - -msgid "VizToolbar.Global.background" -msgstr "Π¦Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π°" - -msgid "VizToolbar.Global.groupBarTitle" -msgstr "" - -msgid "VizToolbar.Global.screenshot" -msgstr "Π‘ΠΊΡ€ΠΈΠ½ΡˆΠΎΡ‚" - -msgid "VizToolbar.Global.screenshot.configure" -msgstr "Настройка..." - -msgid "VizToolbar.Nodes.groupBarTitle" -msgstr "" - -msgid "VizToolbar.Nodes.showLabels" -msgstr "ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° ΡƒΠ·Π»ΠΎΠ²" - -msgid "VizToolbar.Nodes.showHulls" -msgstr "ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ ΠΌΠ΅Ρ‚Π°ΡƒΠ·Π»ΠΎΠ²" - -msgid "VizToolbar.Edges.showEdges" -msgstr "ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ€Ρ‘Π±Ρ€Π°" - -msgid "VizToolbar.Edges.edgeNodeColor" -msgstr "Π Ρ‘Π±Ρ€Π° ΠΈΠΌΠ΅ΡŽΡ‚ Ρ†Π²Π΅Ρ‚ ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Ρ… ΡƒΠ·Π»ΠΎΠ²" - -msgid "VizToolbar.Edges.showLabels" -msgstr "ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΠΌΠ΅Π½Π° Ρ€Ρ‘Π±Π΅Ρ€" - -msgid "VizToolbar.Edges.edgeScale" -msgstr "ΠœΠ°ΡΡˆΡ‚Π°Π± вСсов Ρ€Ρ‘Π±Π΅Ρ€" - -msgid "VizToolbar.Edges.groupBarTitle" -msgstr "" - -msgid "VizToolbar.Labels.font" -msgstr "Π¨Ρ€ΠΈΡ„Ρ‚" - -msgid "VizToolbar.Labels.defaultColor" -msgstr "Π¦Π²Π΅Ρ‚Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ" - -msgid "VizToolbar.Labels.sizeMode" -msgstr "Π Π°Π·ΠΌΠ΅Ρ€ ΡˆΡ€ΠΈΡ„Ρ‚Π°" - -msgid "VizToolbar.Labels.colorMode" -msgstr "Π¦Π²Π΅Ρ‚ тСкста" - -msgid "VizToolbar.Labels.attributes" -msgstr "ΠŸΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹" - -msgid "VizToolbar.Labels.fontScale" -msgstr "ΠœΠ°ΡΡˆΡ‚Π°Π± Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΡˆΡ€ΠΈΡ„Ρ‚Π°" - -msgid "VizToolbar.Labels.groupBarTitle" -msgstr "" - -msgid "NodeSettingsPanel.adjustTextCheckbox.text" -msgstr "Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ€Π°ΠΌΠΊΠΎΠΉ тСкста" - -msgid "NodeSettingsPanel.labelShape.text" -msgstr "Π€ΠΎΡ€ΠΌΠ° ΡƒΠ·Π»ΠΎΠ²:" - -msgid "NodeSettingsPanel.defaultShape.message3d" -msgstr "Π’Ρ‹Π±Ρ€Π°Π½Π° трёхмСрная Ρ„ΠΎΡ€ΠΌΠ°, систСма Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Π°. Π₯ΠΎΡ‚ΠΈΡ‚Π΅ Π»ΠΈ Π²Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ?" - -msgid "NodeSettingsPanel.defaultShape.message.title" -msgstr "Бтандартная Ρ„ΠΎΡ€ΠΌΠ°" - -msgid "NodeSettingsPanel.defaultShape.message2d" -msgstr "Π’Ρ‹Π±Ρ€Π°Π½Π° двухмСрная Ρ„ΠΎΡ€ΠΌΠ°, систСма Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€Π½ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Π°. Π₯ΠΎΡ‚ΠΈΡ‚Π΅ Π»ΠΈ Π²Ρ‹ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚ΡŒ?" - -msgid "EdgeSettingsPanel.labelEdgeColor.text" -msgstr "Π¦Π²Π΅Ρ‚ Ρ€Ρ‘Π±Π΅Ρ€:" - -msgid "EdgeSettingsPanel.sourceNodeColorCheckbox.text" -msgstr "Π¦Π²Π΅Ρ‚ ΡƒΠ·Π»Π°-источника" - -msgid "EdgeSettingsPanel.showEdgesCheckbox.text" -msgstr "ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ" - -msgid "GlobalSettingsPanel.hightlightCheckBox.text" -msgstr "ΠŸΠΎΠ΄ΡΠ²Π΅Ρ‚ΠΈΡ‚ΡŒ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠ΅" - -msgid "GlobalSettingsPanel.labelBackgroundColor.text" -msgstr "Π¦Π²Π΅Ρ‚ Ρ„ΠΎΠ½Π°:" - -msgid "GlobalSettingsPanel.autoSelectNeigborCheckbox.text" -msgstr "Автовыбор сосСдСй" - -msgid "LabelSettingsPanel.labelNodeFont.text" -msgstr "Π¨Ρ€ΠΈΡ„Ρ‚:" - -msgid "LabelSettingsPanel.showNodeLabelsCheckbox.text" -msgstr "Π£Π·Π΅Π»" - -msgid "LabelSettingsPanel.showEdgeLabelsCheckbox.text" -msgstr "Π Π΅Π±Ρ€ΠΎ" - -msgid "LabelSettingsPanel.labelEdgeFont.text" -msgstr "Π¨Ρ€ΠΈΡ„Ρ‚:" - -msgid "LabelSettingsPanel.labelEdgeColor.text" -msgstr "Π¦Π²Π΅Ρ‚:" - -msgid "LabelSettingsPanel.labelNodeColor.text" -msgstr "Π¦Π²Π΅Ρ‚:" - -msgid "LabelSettingsPanel.labelNodeSize.text" -msgstr "Π Π°Π·ΠΌΠ΅Ρ€:" - -msgid "LabelSettingsPanel.labelEdgeSize.text" -msgstr "Π Π°Π·ΠΌΠ΅Ρ€:" - -msgid "LabelSettingsPanel.labelSizeMode.text" -msgstr "Π Π°Π·ΠΌΠ΅Ρ€:" - -msgid "LabelSettingsPanel.labelColorMode.text" -msgstr "Π¦Π²Π΅Ρ‚:" - -msgid "LabelSettingsPanel.hideNonSelectedCheckbox.text" -msgstr "Π‘ΠΏΡ€ΡΡ‚Π°Ρ‚ΡŒ Π½Π΅Π²Ρ‹Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅" - -msgid "SelectionToolbar.rectangle.tooltip" -msgstr "Π’Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΡ€ΡΠΌΠΎΡƒΠ³ΠΎΠ»ΡŒΠ½ΠΈΠΊΠΎΠΌ" - -msgid "SelectionToolbar.mouse.tooltip" -msgstr "НаправлСнноС Π²Ρ‹Π΄Π΅Π»Π΅Π½ΠΈΠ΅" - -msgid "SelectionToolbar.drag.tooltip" -msgstr "ΠŸΠ΅Ρ€Π΅Ρ‚Π°Ρ‰ΠΈΡ‚ΡŒ" - -msgid "ActionsToolbar.centerOnGraph" -msgstr "Π¦Π΅Π½Ρ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° Π³Ρ€Π°Ρ„Π΅" - -msgid "ActionsToolbar.centerOnZero" -msgstr "Π¦Π΅Π½Ρ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Π½ΡƒΠ»Π΅" - -msgid "ActionsToolbar.resetColors" -msgstr "Π‘Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ измСнСния Π² Ρ†Π²Π΅Ρ‚Π΅ ΡƒΠ·Π»ΠΎΠ²" - -msgid "ActionsToolbar.resetSizes" -msgstr "Π‘Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ измСнСния Π² Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ ΡƒΠ·Π»ΠΎΠ²" - -msgid "ActionsToolbar.resetSizes.dialog" -msgstr "Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΡƒΠ·Π»ΠΎΠ²" - -msgid "ActionsToolbar.resetLabelColors" -msgstr "Π‘Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ измСнСния Π² Ρ†Π²Π΅Ρ‚Π΅ тСкста" - -msgid "ActionsToolbar.resetLabelSizes" -msgstr "Π‘Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ измСнСния Π² Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅ тСкста" - -msgid "ActionsToolbar.resetLabelVisible" -msgstr "Π‘Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ измСнСния Π² ΠΎΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ тСкста" - -msgid "LabelAttributesPanel.title" -msgstr "Настройки отобраТСния тСкста" - -msgid "LabelAttributesPanel.nodesToggleButton.text" -msgstr "Π£Π·Π»Ρ‹" - -msgid "LabelAttributesPanel.edgesToggleButton.text" -msgstr "Π Ρ‘Π±Ρ€Π°" - -msgid "LabelAttributesPanel.labelComment.text" -msgstr "Π’Ρ‹Π±Π΅Ρ€ΠΈΡ‚Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ для отобраТСния Π² качСствС ΠΈΠΌΡ‘Π½ Π²Π΅Ρ€ΡˆΠΈΠ½" - -msgid "LabelAttributesPanel.showPropertiesCheckbox.text" -msgstr "ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ свойства" - -msgid "LabelSettingsPanel.configureLabelsButton.text" -msgstr "ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ..." - -msgid "EdgeSettingsPanel.selectionColorCheckbox.toolTipText" -msgstr "Π’Ρ‹Π΄Π΅Π»ΠΈΡ‚ΡŒ Ρ†Π²Π΅Ρ‚ΠΎΠΌ Π²Ρ‹Π±Ρ€Π°Π½Π½Ρ‹Π΅ Π²Π΅Ρ€ΡˆΠΈΠ½Ρ‹" - -msgid "EdgeSettingsPanel.selectionColorCheckbox.text" -msgstr "Π¦Π²Π΅Ρ‚ выдСлСния" - -msgid "EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText" -msgstr "Π¦Π²Π΅Ρ‚ Π²Ρ…ΠΎΠ΄. Ρ€Ρ‘Π±Π΅Ρ€" - -msgid "NodeSettingsPanel.showHullsCheckbox.text" -msgstr "ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠ±ΠΎΠ»ΠΎΡ‡ΠΊΠΈ" - -msgid "EdgeSettingsPanel.labelScale.text" -msgstr "ΠœΠ°ΡΡˆΡ‚Π°Π±" - -msgid "EdgeSettingsPanel.labelIn.text" -msgstr "Π’Ρ…ΠΎΠ΄.:" - -msgid "EdgeSettingsPanel.labelOut.text" -msgstr "Π˜ΡΡ…ΠΎΠ΄.:" - -msgid "EdgeSettingsPanel.labelBoth.text" -msgstr "БмСш.:" - -msgid "EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText" -msgstr "Π¦Π²Π΅Ρ‚ исход. Ρ€Ρ‘Π±Π΅Ρ€" - -msgid "EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText" -msgstr "Π¦Π²Π΅Ρ‚ ΡΠΌΠ΅ΡˆΠ°Π½Π½Ρ‹Ρ… Ρ€Ρ‘Π±Π΅Ρ€" - -msgid "GlobalSettingsPanel.labelZoom.text" -msgstr "ΠŸΡ€ΠΈΠ±Π»ΠΈΠ·ΠΈΡ‚ΡŒ" - -msgid "EdgeSettingsPanel.labelMetaScale.text" -msgstr "ΠœΠ°ΡΡˆΡ‚Π°Π± (ΠΌΠ΅Ρ‚Π°-Ρ€Ρ‘Π±Π΅Ρ€)" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/screenshot.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/screenshot.png deleted file mode 100644 index 5b8fa6d597..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/screenshot.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/showEdgeLabels.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/showEdgeLabels.png deleted file mode 100644 index 2fc5ccc4fb..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/showEdgeLabels.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/showEdges.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/showEdges.png deleted file mode 100644 index bdf68ec038..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/showEdges.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/showHulls.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/showHulls.png deleted file mode 100644 index 3129cf5db6..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/showHulls.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/showNodeLabels.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/showNodeLabels.png deleted file mode 100644 index 6db18b4ef1..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/showNodeLabels.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/zh_CN.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/zh_CN.po deleted file mode 100644 index 25bf466a47..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/component/zh_CN.po +++ /dev/null @@ -1,243 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:13+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "CTL_GraphAction" -msgstr "ε›Ύ" - -msgid "CTL_GraphTopComponent" -msgstr "ε›Ύ" - -msgid "GraphTopComponent.jToggleButton1.TabConstraints.tabTitle" -msgstr "TAB2" - -msgid "GraphTopComponent.jToggleButton2.TabConstraints.tabTitle" -msgstr "TAB2" - -msgid "GraphTopComponent.waitingLabel.text" -msgstr "εˆε§‹εŒ–..." - -msgid "VizToolbar.Global.background" -msgstr "θƒŒζ™―ι’œθ‰²" - -msgid "VizToolbar.Global.groupBarTitle" -msgstr "" - -msgid "VizToolbar.Global.screenshot" -msgstr "ζˆͺ屏" - -msgid "VizToolbar.Global.screenshot.configure" -msgstr "配η½..." - -msgid "VizToolbar.Nodes.groupBarTitle" -msgstr "" - -msgid "VizToolbar.Nodes.showLabels" -msgstr "ζ˜Ύη€ΊθŠ‚η‚Ήζ ‡η­Ύ" - -msgid "VizToolbar.Nodes.showHulls" -msgstr "ζ˜Ύη€Ίε€–ε£³" - -msgid "VizToolbar.Edges.showEdges" -msgstr "显瀺边" - -msgid "VizToolbar.Edges.edgeNodeColor" -msgstr "θΎΉε…·ε€‡ζΊθŠ‚η‚Ήι’œθ‰²" - -msgid "VizToolbar.Edges.showLabels" -msgstr "ζ˜Ύη€ΊθΎΉζ ‡η­Ύ" - -msgid "VizToolbar.Edges.edgeScale" -msgstr "θΎΉηš„ζƒι‡ε°ΊεΊ¦" - -msgid "VizToolbar.Edges.groupBarTitle" -msgstr "" - -msgid "VizToolbar.Labels.font" -msgstr "字体" - -msgid "VizToolbar.Labels.defaultColor" -msgstr "ηΌΊηœι’œθ‰²" - -msgid "VizToolbar.Labels.sizeMode" -msgstr "倧小樑式" - -msgid "VizToolbar.Labels.colorMode" -msgstr "ι’œθ‰²ζ¨‘εΌ" - -msgid "VizToolbar.Labels.attributes" -msgstr "ε±žζ€§" - -msgid "VizToolbar.Labels.fontScale" -msgstr "字体倧小尺度" - -msgid "VizToolbar.Labels.groupBarTitle" -msgstr "" - -msgid "NodeSettingsPanel.adjustTextCheckbox.text" -msgstr "θ°ƒζ•΄ζ–‡ζœ¬" - -msgid "NodeSettingsPanel.labelShape.text" -msgstr "缺省归犢:" - -msgid "NodeSettingsPanel.defaultShape.message3d" -msgstr "歀归犢为3η»΄ε½’ηŠΆοΌŒεΌ•ζ“Žε°†θ’«ι‡ζ–°εˆε§‹εŒ–γ€‚η»§η»­οΌŸ" - -msgid "NodeSettingsPanel.defaultShape.message.title" -msgstr "缺省归犢" - -msgid "NodeSettingsPanel.defaultShape.message2d" -msgstr "歀归犢为2η»΄ε½’ηŠΆοΌŒεΌ•ζ“Žε°†θ’«ι‡ζ–°εˆε§‹εŒ–γ€‚η»§η»­οΌŸ" - -msgid "EdgeSettingsPanel.labelEdgeColor.text" -msgstr "θΎΉηš„ι»˜θ€ι’œθ‰²οΌš" - -msgid "EdgeSettingsPanel.sourceNodeColorCheckbox.text" -msgstr "ζΊθŠ‚η‚Ήηš„ι’œθ‰²" - -msgid "EdgeSettingsPanel.showEdgesCheckbox.text" -msgstr "显瀺" - -msgid "GlobalSettingsPanel.hightlightCheckBox.text" -msgstr "高δΊι€‰ζ‹©" - -msgid "GlobalSettingsPanel.labelBackgroundColor.text" -msgstr "θƒŒζ™―ι’œθ‰²οΌš" - -msgid "GlobalSettingsPanel.autoSelectNeigborCheckbox.text" -msgstr "θ‡ͺεŠ¨ι€‰ζ‹©ι‚»ε±…" - -msgid "LabelSettingsPanel.labelNodeFont.text" -msgstr "ε­—δ½“οΌš" - -msgid "LabelSettingsPanel.showNodeLabelsCheckbox.text" -msgstr "θŠ‚η‚Ή" - -msgid "LabelSettingsPanel.showEdgeLabelsCheckbox.text" -msgstr "θΎΉ" - -msgid "LabelSettingsPanel.labelEdgeFont.text" -msgstr "ε­—δ½“οΌš" - -msgid "LabelSettingsPanel.labelEdgeColor.text" -msgstr "ι’œθ‰²οΌš" - -msgid "LabelSettingsPanel.labelNodeColor.text" -msgstr "ι’œθ‰²οΌš" - -msgid "LabelSettingsPanel.labelNodeSize.text" -msgstr "倧小:" - -msgid "LabelSettingsPanel.labelEdgeSize.text" -msgstr "倧小:" - -msgid "LabelSettingsPanel.labelSizeMode.text" -msgstr "倧小:" - -msgid "LabelSettingsPanel.labelColorMode.text" -msgstr "ι’œθ‰²οΌš" - -msgid "LabelSettingsPanel.hideNonSelectedCheckbox.text" -msgstr "ιšθ—ζœͺ选中" - -msgid "SelectionToolbar.rectangle.tooltip" -msgstr "ηŸ©ε½’ι€‰ζ‹©" - -msgid "SelectionToolbar.mouse.tooltip" -msgstr "η›΄ζŽ₯选择" - -msgid "SelectionToolbar.drag.tooltip" -msgstr "ζ‹–εŠ¨" - -msgid "ActionsToolbar.centerOnGraph" -msgstr "ε›ΎδΈ­εΏƒ" - -msgid "ActionsToolbar.centerOnZero" -msgstr "ι›Άη‚ΉδΈ­εΏƒ" - -msgid "ActionsToolbar.resetColors" -msgstr "重θΎι’œθ‰²" - -msgid "ActionsToolbar.resetSizes" -msgstr "重θΎε€§ε°" - -msgid "ActionsToolbar.resetSizes.dialog" -msgstr "θΎεšε€§ε°" - -msgid "ActionsToolbar.resetLabelColors" -msgstr "重θΎζ ‡η­Ύηš„ι’œθ‰²" - -msgid "ActionsToolbar.resetLabelSizes" -msgstr "重θΎζ ‡η­Ύηš„倧小" - -msgid "ActionsToolbar.resetLabelVisible" -msgstr "重θΎζ ‡η­Ύε―见" - -msgid "LabelAttributesPanel.title" -msgstr "重θΎζ–‡ζœ¬θΎεš" - -msgid "LabelAttributesPanel.nodesToggleButton.text" -msgstr "θŠ‚η‚Ή" - -msgid "LabelAttributesPanel.edgesToggleButton.text" -msgstr "θΎΉ" - -msgid "LabelAttributesPanel.labelComment.text" -msgstr "ι€‰ζ‹©ζ˜Ύη€ΊδΈΊζ ‡η­Ύηš„ε±žζ€§" - -msgid "LabelAttributesPanel.showPropertiesCheckbox.text" -msgstr "ζ˜Ύη€Ίε±žζ€§" - -msgid "LabelSettingsPanel.configureLabelsButton.text" -msgstr "配η½..." - -msgid "EdgeSettingsPanel.selectionColorCheckbox.toolTipText" -msgstr "为选εšηš„边着特εšι’œθ‰²" - -msgid "EdgeSettingsPanel.selectionColorCheckbox.text" -msgstr "ι€‰ζ‹©ι’œθ‰²" - -msgid "EdgeSettingsPanel.edgeInSelectionColorChooser.toolTipText" -msgstr "θΎΉ IN<- ι’œθ‰²" - -msgid "NodeSettingsPanel.showHullsCheckbox.text" -msgstr "ζ˜Ύη€Ίε€–ε£³" - -msgid "EdgeSettingsPanel.labelScale.text" -msgstr "ε°ΊεΊ¦" - -msgid "EdgeSettingsPanel.labelIn.text" -msgstr "ε…₯:" - -msgid "EdgeSettingsPanel.labelOut.text" -msgstr "ε‡Ί:" - -msgid "EdgeSettingsPanel.labelBoth.text" -msgstr "εŒε‘οΌš" - -msgid "EdgeSettingsPanel.edgeOutSelectionColorChooser.toolTipText" -msgstr "ε‡ΊθΎΉ->ι’œθ‰²" - -msgid "EdgeSettingsPanel.edgeBothSelectionColorChooser.toolTipText" -msgstr "εŒε‘θΎΉ<->ι’œθ‰²" - -msgid "GlobalSettingsPanel.labelZoom.text" -msgstr "ηΌ©ζ”Ύ" - -msgid "EdgeSettingsPanel.labelMetaScale.text" -msgstr "ε°ΊεΊ¦οΌˆε…ƒθΎΉοΌ‰" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/Bundle.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/Bundle.properties deleted file mode 100644 index 511bab904f..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/Bundle.properties +++ /dev/null @@ -1,2 +0,0 @@ -graphicalConfiguration_currentConfig = "\nCurrent hardware:\n%s\n%s\nVersion:%s; -graphicalConfiguration_exception = "Your OpenGL2 version (%s) is too low to display the graph.\nUpdate your graphical drivers or configuration.%s diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/Bundle_cs.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/Bundle_cs.properties deleted file mode 100644 index 2505dde17f..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/Bundle_cs.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-25 21\:58+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -graphicalConfiguration_currentConfig="\nSou\u010dasn\u00fd hardware\:\n%s\n%s\nVerze\:%s; - -graphicalConfiguration_exception="Va\u0161e verze OpenGL2 (%s) je p\u0159\u00edli\u0161 n\u00edzk\u00e1 pro zobrazen\u00ed grafu.\nAktualizujte Va\u0161e grafick\u00e9 ovlada\u010de nebo nastaven\u00ed.%s diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/Bundle_es.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/Bundle_es.properties deleted file mode 100644 index 659ae255a8..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/Bundle_es.properties +++ /dev/null @@ -1,12 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-31 13\:04+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -graphicalConfiguration_currentConfig="\nHardware actual\:\n%s\n%s\nVersi\u00f3n\:%s; - -graphicalConfiguration_exception=Tu versi\u00f3n de OpenGL2 (%s) es demasiado baja para mostrar el grafo.\nActualiza los controladores gr\u00e1ficos o su configuraci\u00f3n.%s diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/Bundle_fr.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/Bundle_fr.properties deleted file mode 100644 index 922a84ec9f..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/Bundle_fr.properties +++ /dev/null @@ -1,12 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-03-31 13\:04+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -graphicalConfiguration_currentConfig="\nMat\u00e9riel actuel\:\n%s\n%s\nVersion\:%s; - -graphicalConfiguration_exception=Votre version d'OpenGL2 (%s) est trop ancienne pour afficher le graphe.\nMettez \u00e0 jour votre pilote graphique ou votre configuration mat\u00e9rielle. %s diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/Bundle_ja.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/Bundle_ja.properties deleted file mode 100644 index e4109568ac..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/Bundle_ja.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-25 08\:32+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -graphicalConfiguration_currentConfig="\n\u73fe\u5728\u306e\u30cf\u30fc\u30c9\u30a6\u30a7\u30a2\:\n%s\n%s\n\u30d0\u30fc\u30b8\u30e7\u30f3\:%s; - -graphicalConfiguration_exception="\u3042\u306a\u305f\u306eOpenGL\u306e\u30d0\u30fc\u30b8\u30e7\u30f3 (%s) \u306f\u3001\u30b0\u30e9\u30d5\u3092\u8868\u793a\u306b\u306f\u53e4\u3059\u304e\u307e\u3059\u3002\u30b0\u30e9\u30d5\u30a3\u30ab\u30eb\u30c9\u30e9\u30a4\u30d0\u304b\u8a2d\u5b9a\u3092\u66f4\u65b0\u3057\u3066\u4e0b\u3055\u3044\u3002%s diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/Bundle_pt_BR.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/Bundle_pt_BR.properties deleted file mode 100644 index 2dd1fb6233..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/Bundle_pt_BR.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 16\:45+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -graphicalConfiguration_currentConfig="\nHardware atual\:\n%s\n%s\nVers\u00e3o\:%s; - -graphicalConfiguration_exception="Sua vers\u00e3o de OpenGL2 (%s) n\u00e3o \u00e9 suficiente para exibir o grafo. Atualize seus drivers gr\u00e1ficos ou de configura\u00e7\u00e3o.%s diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/Bundle_ru.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/Bundle_ru.properties deleted file mode 100644 index dc9422d746..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/Bundle_ru.properties +++ /dev/null @@ -1,11 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-28 07\:58+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -graphicalConfiguration_currentConfig="\n\u0410\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435\: \n%s\n%s\n\u0412\u0435\u0440\u0441\u0438\u044f\:%s; - -graphicalConfiguration_exception="\u0412\u0430\u0448\u0430 \u0432\u0435\u0440\u0441\u0438\u044f OpenGL2 (%s) \u0443\u0441\u0442\u0430\u0440\u0435\u043b\u0430 \u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0430 \u0434\u043b\u044f \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0433\u0440\u0430\u0444\u0430.\n\u041e\u0431\u043d\u043e\u0432\u0438\u0442\u0435 \u0432\u0430\u0448\u0438 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0440\u0430\u0439\u0432\u0435\u0440\u0430 \u0438\u043b\u0438 \u0430\u043f\u043f\u0430\u0440\u0430\u0442\u043d\u043e\u0435 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0435.%s diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/Bundle_zh_CN.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/Bundle_zh_CN.properties deleted file mode 100644 index c59fb9e3d0..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/Bundle_zh_CN.properties +++ /dev/null @@ -1,10 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:05+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -graphicalConfiguration_currentConfig=\u201c\n\u5f53\u524d\u786c\u4ef6\uff1a\n%s\n%s\n\u7248\u672c\uff1a%s; - -graphicalConfiguration_exception="OpenGL\u7248\u672c(%s)\u592a\u4f4e\u4e0d\u80fd\u663e\u793a\u6b64\u56fe\u3002\n\u8bf7\u5347\u7ea7\u56fe\u5f62\u9a71\u52a8\u6216\u914d\u7f6e\u3002%s diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/cs.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/cs.po deleted file mode 100644 index 966fbda2c8..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/cs.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-25 21:58+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "graphicalConfiguration_currentConfig" -msgstr "\"\nSoučasnΓ½ hardware:\n%s\n%s\nVerze:%s;" - -msgid "graphicalConfiguration_exception" -msgstr "\"VaΕ‘e verze OpenGL2 (%s) je pΕ™Γ­liΕ‘ nΓ­zkΓ‘ pro zobrazenΓ­ grafu.\nAktualizujte VaΕ‘e grafickΓ© ovladače nebo nastavenΓ­.%s" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/es.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/es.po deleted file mode 100644 index e48d05bb85..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/es.po +++ /dev/null @@ -1,26 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-31 13:04+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "graphicalConfiguration_currentConfig" -msgstr "\"\nHardware actual:\n%s\n%s\nVersiΓ³n:%s;" - -msgid "graphicalConfiguration_exception" -msgstr "Tu versiΓ³n de OpenGL2 (%s) es demasiado baja para mostrar el grafo.\nActualiza los controladores grΓ‘ficos o su configuraciΓ³n.%s" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/fr.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/fr.po deleted file mode 100644 index 30c6b09bd6..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/fr.po +++ /dev/null @@ -1,26 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-03-31 13:04+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "graphicalConfiguration_currentConfig" -msgstr "\"\nMatΓ©riel actuel:\n%s\n%s\nVersion:%s;" - -msgid "graphicalConfiguration_exception" -msgstr "Votre version d'OpenGL2 (%s) est trop ancienne pour afficher le graphe.\nMettez Γ  jour votre pilote graphique ou votre configuration matΓ©rielle. %s" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/ja.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/ja.po deleted file mode 100644 index 64628d0147..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/ja.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-25 08:32+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "graphicalConfiguration_currentConfig" -msgstr "\"\n現在γγƒγƒΌγƒ‰γ‚¦γ‚§γ‚’:\n%s\n%s\nバージョン:%s;" - -msgid "graphicalConfiguration_exception" -msgstr "\"あγͺたγOpenGLγγƒγƒΌγ‚Έγƒ§γƒ³ (%s) γ―γ€γ‚°γƒ©γƒ•γ‚’θ‘¨η€Ίγ«γ―ε€γ™γŽγΎγ™γ€‚γ‚°γƒ©γƒ•γ‚£γ‚«γƒ«γƒ‰γƒ©γ‚€γƒγ‹θ¨­εšγ‚’更新して下さい。%s" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/org-gephi-visualization-config.pot b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/org-gephi-visualization-config.pot deleted file mode 100644 index e88f292bd1..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/org-gephi-visualization-config.pot +++ /dev/null @@ -1,29 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "graphicalConfiguration_currentConfig" -msgstr "" -"\"\n" -"Current hardware:\n" -"%s\n" -"%s\n" -"Version:%s;" - -msgid "graphicalConfiguration_exception" -msgstr "" -"\"Your OpenGL2 version (%s) is too low to display the graph.\n" -"Update your graphical drivers or configuration.%s" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/pt_BR.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/pt_BR.po deleted file mode 100644 index 753a90cece..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/pt_BR.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 16:45+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "graphicalConfiguration_currentConfig" -msgstr "\"\nHardware atual:\n%s\n%s\nVersΓ£o:%s;" - -msgid "graphicalConfiguration_exception" -msgstr "\"Sua versΓ£o de OpenGL2 (%s) nΓ£o Γ© suficiente para exibir o grafo. Atualize seus drivers grΓ‘ficos ou de configuraΓ§Γ£o.%s" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/ru.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/ru.po deleted file mode 100644 index 643c5242ca..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/ru.po +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-28 07:58+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "graphicalConfiguration_currentConfig" -msgstr "\"\nАппаратноС обСспСчСниС: \n%s\n%s\nВСрсия:%s;" - -msgid "graphicalConfiguration_exception" -msgstr "\"Π’Π°ΡˆΠ° вСрсия OpenGL2 (%s) устарСла ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ использована для отобраТСния Π³Ρ€Π°Ρ„Π°.\nΠžΠ±Π½ΠΎΠ²ΠΈΡ‚Π΅ ваши графичСскиС Π΄Ρ€Π°ΠΉΠ²Π΅Ρ€Π° ΠΈΠ»ΠΈ Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ΅ обСспСчСниС.%s" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/zh_CN.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/zh_CN.po deleted file mode 100644 index 54f23611a9..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/config/zh_CN.po +++ /dev/null @@ -1,24 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:05+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "graphicalConfiguration_currentConfig" -msgstr "β€œ\nε½“ε‰η‘¬δ»ΆοΌš\n%s\n%s\nη‰ˆζœ¬οΌš%s;" - -msgid "graphicalConfiguration_exception" -msgstr "\"OpenGLη‰ˆζœ¬(%s)ε€ͺδ½ŽδΈθƒ½ζ˜Ύη€Ίζ­€ε›Ύγ€‚\nθ―·ε‡ηΊ§ε›Ύε½’ι©±εŠ¨ζˆ–ι…η½γ€‚%s" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle.properties new file mode 100644 index 0000000000..2fb34bc68a --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle.properties @@ -0,0 +1,16 @@ +GraphContextMenu_Settle = Settle +GraphContextMenu_Free = Free +GraphContextMenu_Delete = Delete +GraphContextMenu_Delete_Plural = Delete {0} nodes +GraphContextMenu_MoveToWorkspace = Move to... +GraphContextMenu_MoveToWorkspace_Plural = Move {0} nodes to... +GraphContextMenu_MoveToWorkspace_NewWorkspace = New workspace +GraphContextMenu_CopyToWorkspace = Copy to... +GraphContextMenu_CopyToWorkspace_Plural = Copy {0} nodes to... +GraphContextMenu_CopyToWorkspace_NewWorkspace = New workspace +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible_Title = Workspace configuration not compatible +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible = The configuration of the two workspaces is not compatible. Please verify that time representation is the same and column types are not conflicting. + +GraphContextMenu.Delete.message = Nodes will be deleted, do you want to proceed? +GraphContextMenu.Delete.message.title = Delete nodes +GraphContextMenu_SelectInDataLaboratory = Select in data laboratory \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_ar.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_ca.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_ca.properties new file mode 100644 index 0000000000..ff942f71d1 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_ca.properties @@ -0,0 +1,12 @@ +GraphContextMenu_Settle=Fixa +GraphContextMenu_Free=Allibera +GraphContextMenu_Delete=Elimina +GraphContextMenu_MoveToWorkspace=Mou a ... +GraphContextMenu_MoveToWorkspace_NewWorkspace=Nou banc de treball +GraphContextMenu_CopyToWorkspace=Copia a ... +GraphContextMenu_CopyToWorkspace_NewWorkspace=Nou banc de treball +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible_Title=Workspace configuration not compatible +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible=The configuration of the two workspaces is not compatible. Please verify that time representation is the same and column types are not conflicting. +GraphContextMenu.Delete.message=S'eliminaran els nodes. Segur que vols seguir? +GraphContextMenu.Delete.message.title=Elimina els nodes +GraphContextMenu_SelectInDataLaboratory=Selecciona al laboratori de dades diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_cs.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_cs.properties new file mode 100644 index 0000000000..6ef4c065fc --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_cs.properties @@ -0,0 +1,13 @@ +GraphContextMenu_Settle = Usadit +GraphContextMenu_Free = Uvolnit +GraphContextMenu_Delete = Smazat +GraphContextMenu_MoveToWorkspace = P\u0159esunout do... +GraphContextMenu_MoveToWorkspace_NewWorkspace = Novύ pracovnν prostor +GraphContextMenu_CopyToWorkspace = Kopνrovat do... +GraphContextMenu_CopyToWorkspace_NewWorkspace = Novύ pracovnν prostor +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible_Title = Nastavenν pracovnνho prostoru nenν kompatibilnν +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible = Nastavenν nenν kompatibilnν s ob\u011bma pracovnνmi prostory. Prosνm ov\u011b\u0159te, \u017ee znαzorn\u011bnν \u010dasu je stejnι a typy sloupc\u016f nejsou v konfliktu. + +GraphContextMenu.Delete.message = Uzle budou smazαny, chcete pokra\u010dovat? +GraphContextMenu.Delete.message.title = Smazat uzle +GraphContextMenu_SelectInDataLaboratory = Vybrat v laborato\u0159i dat diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_de.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_de.properties new file mode 100644 index 0000000000..ccd7bb3cf1 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_de.properties @@ -0,0 +1,13 @@ +GraphContextMenu_Settle = Ausgleichen +GraphContextMenu_Free = Freigeben +GraphContextMenu_Delete = Lφschen +GraphContextMenu_MoveToWorkspace = Verschiebe zu... +GraphContextMenu_MoveToWorkspace_NewWorkspace = Neuen Arbeitsbereich anlegen +GraphContextMenu_CopyToWorkspace = Kopieren nach... +GraphContextMenu_CopyToWorkspace_NewWorkspace = Neuen Arbeitsbereich anlegen +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible_Title = Arbeitsbereich-Konfiguration nicht kompatibel +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible = Die Konfiguration der zwei Arbeitsbereiche ist nicht kompatibel. Bitte όberprόfen Sie, dass die Zeit-Reprδsentierung die gleiche ist und die Spaltentypen nicht in kollidieren. + +GraphContextMenu.Delete.message = Knoten wirklich lφschen? +GraphContextMenu.Delete.message.title = Knoten lφschen +GraphContextMenu_SelectInDataLaboratory = Im Datenlabor auswδhlen diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_es.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_es.properties new file mode 100644 index 0000000000..e829186393 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_es.properties @@ -0,0 +1,13 @@ +GraphContextMenu_Settle = Bloquear +GraphContextMenu_Free = Desbloquear +GraphContextMenu_Delete = Eliminar +GraphContextMenu_MoveToWorkspace = Mover a... +GraphContextMenu_MoveToWorkspace_NewWorkspace = Nuevo espacio de trabajo +GraphContextMenu_CopyToWorkspace = Copiar a... +GraphContextMenu_CopyToWorkspace_NewWorkspace = Nuevo espacio de trabajo +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible_Title = Configuraciσn incompatible de los espacios de trabajo +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible = La configuraciσn de los dos espacios de trabajo no es compatible. Por favor verifica que la representaciσn temporal es la misma y los tipos de las columnas no estαn en conflicto. + +GraphContextMenu.Delete.message = Los nodos serαn eliminados, ΏContinuar? +GraphContextMenu.Delete.message.title = Eliminar nodos +GraphContextMenu_SelectInDataLaboratory = Seleccionar en laboratorio de datos diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_fr.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_fr.properties new file mode 100644 index 0000000000..8f7eb64df4 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_fr.properties @@ -0,0 +1,13 @@ +GraphContextMenu_Settle = Fixer +GraphContextMenu_Free = Libιrer +GraphContextMenu_Delete = Supprimer +GraphContextMenu_MoveToWorkspace = Dιplacer vers... +GraphContextMenu_MoveToWorkspace_NewWorkspace = Nouvel espace de travail +GraphContextMenu_CopyToWorkspace = Copier vers... +GraphContextMenu_CopyToWorkspace_NewWorkspace = Nouvel espace de travail +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible_Title = Configuration de l'espace de travail non-compatible +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible = La configuration des deux espaces de travail n'est pas compatible. Merci de vιrifier que le format de reprιsentation des dates est le mκme et que le type des colonnes est compatible + +GraphContextMenu.Delete.message = Les noeuds seront supprimιs. Voulez-vous continuer ? +GraphContextMenu.Delete.message.title = Suppression des noeuds +GraphContextMenu_SelectInDataLaboratory = Sιlectionner dans le Laboratoire de Donnιes diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_he.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_he.properties new file mode 100644 index 0000000000..dcf163627f --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_he.properties @@ -0,0 +1,12 @@ +GraphContextMenu_Settle=Settle +GraphContextMenu_Free=Free +GraphContextMenu_Delete=\u05de\u05d7\u05e7 +GraphContextMenu_MoveToWorkspace=Move to... +GraphContextMenu_MoveToWorkspace_NewWorkspace=\u05e1\u05d1\u05d9\u05d1\u05ea \u05e2\u05d1\u05d5\u05d3\u05d4 \u05d7\u05d3\u05e9\u05d4 +GraphContextMenu_CopyToWorkspace=Copy to... +GraphContextMenu_CopyToWorkspace_NewWorkspace=\u05e1\u05d1\u05d9\u05d1\u05ea \u05e2\u05d1\u05d5\u05d3\u05d4 \u05d7\u05d3\u05e9\u05d4 +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible_Title=Workspace configuration not compatible +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible=The configuration of the two workspaces is not compatible. Please verify that time representation is the same and column types are not conflicting. +GraphContextMenu.Delete.message=Nodes will be deleted, do you want to proceed? +GraphContextMenu.Delete.message.title=Delete nodes +GraphContextMenu_SelectInDataLaboratory=Select in data laboratory diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_hu.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_hu.properties new file mode 100644 index 0000000000..d226189ebe --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_hu.properties @@ -0,0 +1,14 @@ + + +GraphContextMenu_MoveToWorkspace_NewWorkspace=\u00DAj munkater\u00FClet +GraphContextMenu_CopyToWorkspace_NewWorkspace=\u00DAj munkater\u00FClet +GraphContextMenu_Free=Ingyenes +GraphContextMenu_Delete=T\u00F6r\u00F6l +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible_Title=A munkater\u00FClet konfigur\u00E1ci\u00F3ja nem kompatibilis +GraphContextMenu_CopyToWorkspace=M\u00E1solj... +GraphContextMenu_SelectInDataLaboratory=V\u00E1lassza ki az adatlaborat\u00F3riumban +GraphContextMenu_MoveToWorkspace=Mozg\u00E1s... +GraphContextMenu.Delete.message.title=A csom\u00F3pontok t\u00F6rl\u00E9se +GraphContextMenu_Settle=Rendezni +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible=A k\u00E9t munkater\u00FClet konfigur\u00E1ci\u00F3ja nem kompatibilis. K\u00E9rj\u00FCk, ellen\u0151rizze, hogy az id\u0151\u00E1br\u00E1zol\u00E1s megegyezik-e, \u00E9s az oszlopt\u00EDpusok nem \u00FCtk\u00F6znek-e egym\u00E1ssal. +GraphContextMenu.Delete.message=A csom\u00F3pontok t\u00F6rl\u0151dnek. Folytatja? diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_it.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_it.properties new file mode 100644 index 0000000000..4b2865448e --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_it.properties @@ -0,0 +1,14 @@ +GraphContextMenu_Settle=Fissa +GraphContextMenu_Free=Libera +GraphContextMenu_Delete=Cancella +GraphContextMenu_MoveToWorkspace=Sposta in... +GraphContextMenu_MoveToWorkspace_NewWorkspace=Nuovo workspace +GraphContextMenu_CopyToWorkspace=Copy to... +GraphContextMenu_CopyToWorkspace_NewWorkspace=Nuovo workspace +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible_Title=Configurazione del workspace non compatibile +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible=La configurazione dei due workspace non θ compatibile. Si prega di verificare che la rappresentazione temporale sia la stessa e che i tipi degli attributi non siano in conflitto. +GraphContextMenu.Delete.message=I nodi saranno cancellati, vuoi procedere? +GraphContextMenu.Delete.message.title=Elimina nodi +GraphContextMenu_SelectInDataLaboratory=Select in data laboratory +GraphContextMenu_Delete_Plural=Elimina {0} nodi +GraphContextMenu_MoveToWorkspace_Plural=Muovi il nodo {0} a... diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_ja.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_ja.properties new file mode 100644 index 0000000000..e82d2c540f --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_ja.properties @@ -0,0 +1,13 @@ +GraphContextMenu_Settle = \u56fa\u5b9a +GraphContextMenu_Free = \u53ef\u52d5 +GraphContextMenu_Delete = \u6d88\u53bb +GraphContextMenu_MoveToWorkspace = \u79fb\u52d5... +GraphContextMenu_MoveToWorkspace_NewWorkspace = \u65b0\u898f\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9 +GraphContextMenu_CopyToWorkspace = \u30b3\u30d4\u30fc... +GraphContextMenu_CopyToWorkspace_NewWorkspace = \u65b0\u898f\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9 +# GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible_Title = Workspace configuration not compatible +# GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible = The configuration of the two workspaces is not compatible. Please verify that time representation is the same and column types are not conflicting. + +GraphContextMenu.Delete.message = \u30ce\u30fc\u30c9\u306f\u6d88\u53bb\u3055\u308c\u307e\u3059\u3001\u7d99\u7d9a\u3057\u307e\u3059\u304b\uff1f +GraphContextMenu.Delete.message.title = \u30ce\u30fc\u30c9\u3092\u6d88\u53bb +GraphContextMenu_SelectInDataLaboratory = \u30c7\u30fc\u30bf\u5de5\u623f\u3067\u9078\u629e diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_ko.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_ko.properties new file mode 100644 index 0000000000..a19159a55b --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_ko.properties @@ -0,0 +1,14 @@ + + +GraphContextMenu_MoveToWorkspace_NewWorkspace=\uC0C8 \uC791\uC5C5 \uC601\uC5ED +GraphContextMenu_CopyToWorkspace_NewWorkspace=\uC0C8 \uC791\uC5C5 \uC601\uC5ED +GraphContextMenu_Free=\uC790\uC720 \uC774\uB3D9 +GraphContextMenu_Delete=\uC0AD\uC81C +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible_Title=\uC791\uC5C5 \uC601\uC5ED \uAD6C\uC131\uC774 \uD638\uD658\uB418\uC9C0 \uC54A\uC74C +GraphContextMenu_CopyToWorkspace=\uBCF5\uC0AC... +GraphContextMenu_SelectInDataLaboratory=\uB370\uC774\uD130 \uC2E4\uD5D8\uC2E4\uC5D0\uC11C \uC120\uD0DD +GraphContextMenu_MoveToWorkspace=\uC774\uB3D9... +GraphContextMenu.Delete.message.title=\uB178\uB4DC \uC0AD\uC81C +GraphContextMenu_Settle=\uC815\uB82C +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible=\uB450 \uC791\uC5C5 \uC601\uC5ED\uC758 \uAD6C\uC131\uC774 \uD638\uD658\uB418\uC9C0 \uC54A\uC2B5\uB2C8\uB2E4. \uC2DC\uAC04 \uD45C\uD604\uC774 \uB3D9\uC77C\uD558\uACE0 \uC5F4 \uC720\uD615\uC774 \uCDA9\uB3CC\uD558\uC9C0 \uC54A\uB294\uC9C0 \uC810\uAC80\uD558\uC138\uC694. +GraphContextMenu.Delete.message=\uB178\uB4DC\uAC00 \uC0AD\uC81C\uB429\uB2C8\uB2E4, \uACC4\uC18D \uD558\uC2DC\uACA0\uC2B5\uB2C8\uAE4C? diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_nl.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_nl.properties new file mode 100644 index 0000000000..9457309981 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_nl.properties @@ -0,0 +1,12 @@ +GraphContextMenu_Settle=Settle +GraphContextMenu_Free=Free +GraphContextMenu_Delete=Delete +GraphContextMenu_MoveToWorkspace=Move to... +GraphContextMenu_MoveToWorkspace_NewWorkspace=Nieuwe werkruimte +GraphContextMenu_CopyToWorkspace=Copy to... +GraphContextMenu_CopyToWorkspace_NewWorkspace=Nieuwe werkruimte +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible_Title=Configuratie van werkruimte is niet compatibel +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible=The configuration of the two workspaces is not compatible. Please verify that time representation is the same and column types are not conflicting. +GraphContextMenu.Delete.message=Nodes will be deleted, do you want to proceed? +GraphContextMenu.Delete.message.title=Knopen verwijderen +GraphContextMenu_SelectInDataLaboratory=Select in data laboratory diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_pt_BR.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_pt_BR.properties new file mode 100644 index 0000000000..998575f46e --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_pt_BR.properties @@ -0,0 +1,13 @@ +GraphContextMenu_Settle = Em bloco +GraphContextMenu_Free = Livre +GraphContextMenu_Delete = Excluir +GraphContextMenu_MoveToWorkspace = Mover para... +GraphContextMenu_MoveToWorkspace_NewWorkspace = Nova Αrea de Trabalho +GraphContextMenu_CopyToWorkspace = Copiar para... +GraphContextMenu_CopyToWorkspace_NewWorkspace = Nova Αrea de Trabalho +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible_Title = Configuraηγo do ambiente de trabalho nγo compatνvel +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible = A configuraηγo dos dois ambientes de trabalho nγo ι compatνvel. Por gentileza verifique se a representaηγo da hora ι a mesma e os tipos de colunas nγo estγo conflitando. + +GraphContextMenu.Delete.message = Os nσs serγo excluνdos. Deseja continuar? +GraphContextMenu.Delete.message.title = Excluir nσs +GraphContextMenu_SelectInDataLaboratory = Selecionar no Laboratσrio de Dados diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_ro.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_ro.properties new file mode 100644 index 0000000000..19f3ee6152 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_ro.properties @@ -0,0 +1,14 @@ + + +GraphContextMenu_Settle=Fixeaz\u0103 +GraphContextMenu_Free=Elibereaz\u0103 +GraphContextMenu_Delete=\u0218terge +GraphContextMenu_MoveToWorkspace=Mut\u0103 la... +GraphContextMenu_MoveToWorkspace_NewWorkspace=Spa\u021Biu de lucru nou +GraphContextMenu_CopyToWorkspace=Copiaz\u0103 la... +GraphContextMenu_CopyToWorkspace_NewWorkspace=Spa\u021Biu de lucru nou +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible_Title=Configura\u021Bia spa\u021Biului de lucru nu este compatibil\u0103 +GraphContextMenu.Delete.message=Nodurile vor fi \u0219terse, continu\u0103? +GraphContextMenu.Delete.message.title=\u0218terge nodurile +GraphContextMenu_SelectInDataLaboratory=Selecteaz\u0103 \u00EEn laboratorul de date +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible=Configura\u021Bia celor dou\u0103 spa\u021Bii de lucru nu este compatibil\u0103. Verific\u0103 dac\u0103 reprezentarea timpului este aceea\u0219i \u0219i dac\u0103 tipurile de coloane nu sunt \u00EEn conflict. diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_ru.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_ru.properties new file mode 100644 index 0000000000..5f40c3a509 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_ru.properties @@ -0,0 +1,13 @@ +GraphContextMenu_Settle = \u0417\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c +GraphContextMenu_Free = \u041e\u0441\u0432\u043e\u0431\u043e\u0434\u0438\u0442\u044c +GraphContextMenu_Delete = \u0423\u0434\u0430\u043b\u0438\u0442\u044c +GraphContextMenu_MoveToWorkspace = \u041f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u043d\u0430... +GraphContextMenu_MoveToWorkspace_NewWorkspace = \u041d\u043e\u0432\u0443\u044e \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c +GraphContextMenu_CopyToWorkspace = \u0421\u043a\u043e\u043f\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u0430... +GraphContextMenu_CopyToWorkspace_NewWorkspace = \u041d\u043e\u0432\u0443\u044e \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c +# GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible_Title = Workspace configuration not compatible +# GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible = The configuration of the two workspaces is not compatible. Please verify that time representation is the same and column types are not conflicting. + +GraphContextMenu.Delete.message = \u0423\u0437\u043b\u044b \u0431\u0443\u0434\u0443\u0442 \u0443\u0434\u0430\u043b\u0435\u043d\u044b, \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0438\u0442\u044c? +GraphContextMenu.Delete.message.title = \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0443\u0437\u043b\u043e\u0432 +GraphContextMenu_SelectInDataLaboratory = \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0432 \u043e\u043a\u043d\u0435 \u043b\u0430\u0431\u043e\u0440\u0430\u0442\u043e\u0440\u0438\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_th.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_tr.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_tr.properties new file mode 100644 index 0000000000..21f171e404 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_tr.properties @@ -0,0 +1,12 @@ +GraphContextMenu_Settle=Settle +GraphContextMenu_Free=Free +GraphContextMenu_Delete=Sil +GraphContextMenu_MoveToWorkspace=Move to... +GraphContextMenu_MoveToWorkspace_NewWorkspace=Yeni ηal\u0131\u015fma alan\u0131 +GraphContextMenu_CopyToWorkspace=Copy to... +GraphContextMenu_CopyToWorkspace_NewWorkspace=Yeni ηal\u0131\u015fma alan\u0131 +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible_Title=Workspace configuration not compatible +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible=The configuration of the two workspaces is not compatible. Please verify that time representation is the same and column types are not conflicting. +GraphContextMenu.Delete.message=Nodes will be deleted, do you want to proceed? +GraphContextMenu.Delete.message.title=Delete nodes +GraphContextMenu_SelectInDataLaboratory=Select in data laboratory diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_uk.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_uk.properties new file mode 100644 index 0000000000..69a54a5c8c --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_uk.properties @@ -0,0 +1,12 @@ +GraphContextMenu_Settle=\u0420\u043E\u0437\u0440\u0430\u0445\u0443\u043D\u043E\u043A +GraphContextMenu_Free=\u0411\u0435\u0437\u043A\u043E\u0448\u0442\u043E\u0432\u043D\u043E +GraphContextMenu_Delete=\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 +GraphContextMenu_MoveToWorkspace=\u041F\u0435\u0440\u0435\u0439\u0442\u0438 \u0434\u043E... +GraphContextMenu_MoveToWorkspace_NewWorkspace=\u041D\u043E\u0432\u0430 \u0440\u043E\u0431\u043E\u0447\u0430 \u043E\u0431\u043B\u0430\u0441\u0442\u044C +GraphContextMenu_CopyToWorkspace=\u041A\u043E\u043F\u0456\u044E\u0432\u0430\u0442\u0438 \u0432... +GraphContextMenu_CopyToWorkspace_NewWorkspace=\u041D\u043E\u0432\u0430 \u0440\u043E\u0431\u043E\u0447\u0430 \u043E\u0431\u043B\u0430\u0441\u0442\u044C +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible_Title=\u041A\u043E\u043D\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u044F \u0440\u043E\u0431\u043E\u0447\u043E\u0457 \u043E\u0431\u043B\u0430\u0441\u0442\u0456 \u043D\u0435\u0441\u0443\u043C\u0456\u0441\u043D\u0430 +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible=\u041A\u043E\u043D\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u044F \u0434\u0432\u043E\u0445 \u0440\u043E\u0431\u043E\u0447\u0438\u0445 \u043E\u0431\u043B\u0430\u0441\u0442\u0435\u0439 \u043D\u0435\u0441\u0443\u043C\u0456\u0441\u043D\u0430. \u0411\u0443\u0434\u044C \u043B\u0430\u0441\u043A\u0430, \u043F\u0435\u0440\u0435\u043A\u043E\u043D\u0430\u0439\u0442\u0435\u0441\u044F, \u0449\u043E \u043F\u043E\u0434\u0430\u043D\u043D\u044F \u0447\u0430\u0441\u0443 \u0454 \u043E\u0434\u043D\u0430\u043A\u043E\u0432\u0438\u043C \u0456 \u0442\u0438\u043F\u0438 \u0441\u0442\u043E\u0432\u043F\u0446\u0456\u0432 \u043D\u0435 \u043A\u043E\u043D\u0444\u043B\u0456\u043A\u0442\u0443\u044E\u0442\u044C. +GraphContextMenu.Delete.message.title=\u0412\u0438\u0434\u0430\u043B\u0438\u0442\u0438 \u0432\u0443\u0437\u043B\u0438 +GraphContextMenu_SelectInDataLaboratory=\u0412\u0438\u0431\u0435\u0440\u0456\u0442\u044C \u0432 \u043B\u0430\u0431\u043E\u0440\u0430\u0442\u043E\u0440\u0456\u0457 \u0434\u0430\u043D\u0438\u0445 +GraphContextMenu.Delete.message=\u0412\u0443\u0437\u043B\u0438 \u0431\u0443\u0434\u0443\u0442\u044C \u0432\u0438\u0434\u0430\u043B\u0435\u043D\u0456, \u043F\u0440\u043E\u0434\u043E\u0432\u0436\u0438\u0442\u0438? diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_zh_CN.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_zh_CN.properties new file mode 100644 index 0000000000..d896a2424c --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_zh_CN.properties @@ -0,0 +1,13 @@ +GraphContextMenu_Settle = \u8bbe\u7f6e +GraphContextMenu_Free = \u91ca\u653e +GraphContextMenu_Delete = \u5220\u9664 +GraphContextMenu_MoveToWorkspace = \u79fb\u81f3... +GraphContextMenu_MoveToWorkspace_NewWorkspace = \u65b0\u5efa\u5de5\u4f5c\u95f4 +GraphContextMenu_CopyToWorkspace = \u590d\u5236\u5230... +GraphContextMenu_CopyToWorkspace_NewWorkspace = \u65b0\u5efa\u5de5\u4f5c\u95f4 +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible_Title = \u5de5\u4f5c\u533a\u7684\u914d\u7f6e\u4e0d\u517c\u5bb9 +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible = \u5728\u4e24\u4e2a\u5de5\u4f5c\u533a\u7684\u914d\u7f6e\u4e0d\u517c\u5bb9\u3002\u8bf7\u786e\u8ba4\u65f6\u95f4\u8868\u793a\u662f\u76f8\u540c\u7684\uff0c\u5217\u7c7b\u578b\u4e0d\u51b2\u7a81\u3002 + +GraphContextMenu.Delete.message = \u5c06\u5220\u9664\u7ed3\u70b9\uff0c\u7ee7\u7eed\uff1f +GraphContextMenu.Delete.message.title = \u5220\u9664\u8282\u70b9 +GraphContextMenu_SelectInDataLaboratory = \u6570\u636e\u5b9e\u9a8c\u5ba4\u4e2d\u9009\u62e9 diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_zh_TW.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_zh_TW.properties new file mode 100644 index 0000000000..bec69ca569 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/contextmenu/items/Bundle_zh_TW.properties @@ -0,0 +1,13 @@ +GraphContextMenu_Settle = \u56fa\u5b9a +GraphContextMenu_Free = \u91cb\u653e +GraphContextMenu_Delete = \u522a\u9664 +GraphContextMenu_MoveToWorkspace = \u642c\u79fb\u81f3... +GraphContextMenu_MoveToWorkspace_NewWorkspace = \u65b0\u5de5\u4f5c\u5340 +GraphContextMenu_CopyToWorkspace = \u8907\u88fd\u81f3... +GraphContextMenu_CopyToWorkspace_NewWorkspace = \u65b0\u5de5\u4f5c\u5340 +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible_Title = \u5de5\u4f5c\u5340\u8a2d\u5b9a\u4e0d\u76f8\u5bb9 +GraphContextMenu_CopyOrMoveToWorkspace_ConfigurationNotCompatible = \u9019\u5169\u500b\u5de5\u4f5c\u5340\u7684\u8a2d\u5b9a\u4e26\u4e0d\u76f8\u5bb9\u3002\u8acb\u6aa2\u67e5\u6642\u9593\u8cc7\u6599\u662f\u5426\u76f8\u7b26\u5408\u4ee5\u53ca\u6b04\u4f4d\u985e\u578b\u662f\u5426\u6709\u885d\u7a81\u3002 + +GraphContextMenu.Delete.message = \u7bc0\u9ede\u5c07\u6703\u88ab\u522a\u9664\uff0c\u8acb\u554f\u662f\u5426\u8981\u7e7c\u7e8c\uff1f +GraphContextMenu.Delete.message.title = \u522a\u9664\u7bc0\u9ede +GraphContextMenu_SelectInDataLaboratory = \u9078\u53d6\u81f3\u8cc7\u6599\u5be6\u9a57\u5ba4\u4e2d diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/cs.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/cs.po deleted file mode 100644 index 0c96119b93..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/cs.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-23 16:57+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "Actions/Window/org-gephi-visualization-component-GraphAction.instance" -msgstr "Graf" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Modul vizualizace, nenΓ­ modulΓ‘rnΓ­" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Modul vizualizace, nenΓ­ modulΓ‘rnΓ­" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/es.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/es.po deleted file mode 100644 index 945700c6a3..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/es.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:56+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "Actions/Window/org-gephi-visualization-component-GraphAction.instance" -msgstr "Grafo" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Modulo de visualizaciΓ³n, no modularizado" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Modulo de visualizaciΓ³n, no modularizado" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/fr.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/fr.po deleted file mode 100644 index 5339ae929d..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/fr.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:56+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "Actions/Window/org-gephi-visualization-component-GraphAction.instance" -msgstr "Graphe" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Module de visualisation, non modulaire actuellement" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Module de visualisation, non modulaire" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/ja.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/ja.po deleted file mode 100644 index 4f3e333923..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/ja.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-11 03:18+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "Actions/Window/org-gephi-visualization-component-GraphAction.instance" -msgstr "グラフ" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ε―θ¦–εŒ–γƒ’γ‚Έγƒ₯γƒΌγƒ«γ€ιžγƒ’γ‚Έγƒ₯γƒΌγƒ«εŒ–" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ε―θ¦–εŒ–γƒ’γ‚Έγƒ₯γƒΌγƒ«γ€ιžγƒ’γ‚Έγƒ₯γƒΌγƒ«εŒ–" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/layer.xml b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/layer.xml deleted file mode 100644 index 89ca9cc9c7..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/layer.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/model/node/Bundle.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/model/node/Bundle.properties deleted file mode 100644 index 7224448588..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/model/node/Bundle.properties +++ /dev/null @@ -1,3 +0,0 @@ -nodeModeler_disk=Disk -nodeModeler_rectangle=Rectangle -nodeModeler_sphere=Sphere \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/Bundle.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/Bundle.properties deleted file mode 100644 index 78884aef32..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/Bundle.properties +++ /dev/null @@ -1,4 +0,0 @@ -JOGLNativesInstaller_error1 = Init failed: Impossible to locate natives for %s. -JOGLNativesInstaller_error2 = Init failed : Unsupported os / arch ( %s / %s ). Please check you're using a 32-bit JVM. -JOGLNativesInstaller_error3 = Impossible to load JAWT -JOGLNativesInstaller_error4 = Unable to load %s \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/Bundle_cs.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/Bundle_cs.properties deleted file mode 100644 index 1502235081..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/Bundle_cs.properties +++ /dev/null @@ -1,15 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-17 07\:07+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -JOGLNativesInstaller_error1=Zaveden\u00ed selhalo\: Nelze naj\u00edt m\u00edstn\u00ed nativy pro %s. - -JOGLNativesInstaller_error2=Zaveden\u00ed selhalo\: Nepodporovan\u00e9 os / arch ( %s / %s ). Pros\u00edm zkontrolujte, \u017ee pou\u017e\u00edv\u00e1te 32-bitov\u00e9 JVM. - -JOGLNativesInstaller_error3=Nelze na\u010d\u00edst JAWT - -JOGLNativesInstaller_error4=Nelze na\u010d\u00edst %s diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/Bundle_es.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/Bundle_es.properties deleted file mode 100644 index 09b813a275..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/Bundle_es.properties +++ /dev/null @@ -1,15 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-31 01\:39+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -JOGLNativesInstaller_error1=Inicializaci\u00f3n fallida\: Imposible localizar las librer\u00edas nativas para %s. - -JOGLNativesInstaller_error2=Inicializaci\u00f3n fallida\: S.O. / Arquitectura no soportada ( %s / %s ). Por favor comprueba que est\u00e1s usando una JVM de 32-bit. - -JOGLNativesInstaller_error3=Imposible cargar JAWT - -JOGLNativesInstaller_error4=Imposible cargar %s diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/Bundle_fr.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/Bundle_fr.properties deleted file mode 100644 index 125760953c..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/Bundle_fr.properties +++ /dev/null @@ -1,14 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:14+0000\nLast-Translator\: Mathieu Bastian \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -!JOGLNativesInstaller_error1= - -!JOGLNativesInstaller_error2= - -!JOGLNativesInstaller_error3= - -!JOGLNativesInstaller_error4= diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/Bundle_ja.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/Bundle_ja.properties deleted file mode 100644 index f4acc59548..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/Bundle_ja.properties +++ /dev/null @@ -1,15 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-12 10\:01+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -JOGLNativesInstaller_error1=\u521d\u671f\u5316\u5931\u6557\: %s\u306e\u30cd\u30a4\u30c6\u30a3\u30f4\u306e\u914d\u7f6e\u304c\u51fa\u6765\u307e\u305b\u3093 - -!JOGLNativesInstaller_error2= - -JOGLNativesInstaller_error3=JAWT\u3092\u8aad\u307f\u8fbc\u307f\u51fa\u6765\u307e\u305b\u3093 - -JOGLNativesInstaller_error4=%s\u304c\u8aad\u307f\u8fbc\u307f\u51fa\u6765\u307e\u305b\u3093 diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/Bundle_pt_BR.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/Bundle_pt_BR.properties deleted file mode 100644 index 9a84e4f86a..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/Bundle_pt_BR.properties +++ /dev/null @@ -1,15 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio Faria Jr. , 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-12-18 11\:30+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -JOGLNativesInstaller_error1=Falha na inicializa\u00e7\u00e3o\: n\u00e3o foi poss\u00edvel localizar arquivos nativos para %s. - -JOGLNativesInstaller_error2=Falha na inicializa\u00e7\u00e3o\: SO/arch (%s / %s) n\u00e3o suportados. Por favor verifique se sua JVM \u00e9 de 32 bits. - -JOGLNativesInstaller_error3=Imposs\u00edvel carregar JAWT - -JOGLNativesInstaller_error4=Imposs\u00edvel carregar %s diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/Bundle_ru.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/Bundle_ru.properties deleted file mode 100644 index 2dcead88f3..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/Bundle_ru.properties +++ /dev/null @@ -1,14 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:14+0000\nLast-Translator\: Mathieu Bastian \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -!JOGLNativesInstaller_error1= - -!JOGLNativesInstaller_error2= - -!JOGLNativesInstaller_error3= - -!JOGLNativesInstaller_error4= diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/Bundle_zh_CN.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/Bundle_zh_CN.properties deleted file mode 100644 index 52a5510ce7..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/Bundle_zh_CN.properties +++ /dev/null @@ -1,14 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-10-07 16\:14+0000\nLast-Translator\: Mathieu Bastian \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -!JOGLNativesInstaller_error1= - -!JOGLNativesInstaller_error2= - -!JOGLNativesInstaller_error3= - -!JOGLNativesInstaller_error4= diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/cs.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/cs.po deleted file mode 100644 index c29f6020e6..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/cs.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-17 07:07+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "JOGLNativesInstaller_error1" -msgstr "ZavedenΓ­ selhalo: Nelze najΓ­t mΓ­stnΓ­ nativy pro %s." - -msgid "JOGLNativesInstaller_error2" -msgstr "ZavedenΓ­ selhalo: NepodporovanΓ© os / arch ( %s / %s ). ProsΓ­m zkontrolujte, ΕΎe pouΕΎΓ­vΓ‘te 32-bitovΓ© JVM." - -msgid "JOGLNativesInstaller_error3" -msgstr "Nelze načíst JAWT" - -msgid "JOGLNativesInstaller_error4" -msgstr "Nelze načíst %s" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/es.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/es.po deleted file mode 100644 index 475fe6b62e..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/es.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-31 01:39+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "JOGLNativesInstaller_error1" -msgstr "InicializaciΓ³n fallida: Imposible localizar las librerΓ­as nativas para %s." - -msgid "JOGLNativesInstaller_error2" -msgstr "InicializaciΓ³n fallida: S.O. / Arquitectura no soportada ( %s / %s ). Por favor comprueba que estΓ‘s usando una JVM de 32-bit." - -msgid "JOGLNativesInstaller_error3" -msgstr "Imposible cargar JAWT" - -msgid "JOGLNativesInstaller_error4" -msgstr "Imposible cargar %s" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/fr.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/fr.po deleted file mode 100644 index 4d67d4042f..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/fr.po +++ /dev/null @@ -1,30 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:14+0000\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "JOGLNativesInstaller_error1" -msgstr "" - -msgid "JOGLNativesInstaller_error2" -msgstr "" - -msgid "JOGLNativesInstaller_error3" -msgstr "" - -msgid "JOGLNativesInstaller_error4" -msgstr "" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/ja.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/ja.po deleted file mode 100644 index 25c0f6ef35..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/ja.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-12 10:01+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "JOGLNativesInstaller_error1" -msgstr "εˆζœŸεŒ–ε€±ζ•—: %sγγƒγ‚€γƒ†γ‚£γƒ΄γι…η½γŒε‡Ίζ₯ません" - -msgid "JOGLNativesInstaller_error2" -msgstr "" - -msgid "JOGLNativesInstaller_error3" -msgstr "JAWTγ‚’θͺ­γΏθΎΌγΏε‡Ίζ₯ません" - -msgid "JOGLNativesInstaller_error4" -msgstr "%sがθͺ­γΏθΎΌγΏε‡Ίζ₯ません" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/org-gephi-visualization-opengl.pot b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/org-gephi-visualization-opengl.pot deleted file mode 100644 index 76960ece1c..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/org-gephi-visualization-opengl.pot +++ /dev/null @@ -1,30 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "JOGLNativesInstaller_error1" -msgstr "Init failed: Impossible to locate natives for %s." - -msgid "JOGLNativesInstaller_error2" -msgstr "" -"Init failed : Unsupported os / arch ( %s / %s ). Please check you're using a " -"32-bit JVM." - -msgid "JOGLNativesInstaller_error3" -msgstr "Impossible to load JAWT" - -msgid "JOGLNativesInstaller_error4" -msgstr "Unable to load %s" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/pt_BR.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/pt_BR.po deleted file mode 100644 index 57edfa37c3..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/pt_BR.po +++ /dev/null @@ -1,31 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio Faria Jr. , 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-12-18 11:30+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "JOGLNativesInstaller_error1" -msgstr "Falha na inicializaΓ§Γ£o: nΓ£o foi possΓ­vel localizar arquivos nativos para %s." - -msgid "JOGLNativesInstaller_error2" -msgstr "Falha na inicializaΓ§Γ£o: SO/arch (%s / %s) nΓ£o suportados. Por favor verifique se sua JVM Γ© de 32 bits." - -msgid "JOGLNativesInstaller_error3" -msgstr "ImpossΓ­vel carregar JAWT" - -msgid "JOGLNativesInstaller_error4" -msgstr "ImpossΓ­vel carregar %s" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/ru.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/ru.po deleted file mode 100644 index 2c5a1cc64e..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/ru.po +++ /dev/null @@ -1,30 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:14+0000\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "JOGLNativesInstaller_error1" -msgstr "" - -msgid "JOGLNativesInstaller_error2" -msgstr "" - -msgid "JOGLNativesInstaller_error3" -msgstr "" - -msgid "JOGLNativesInstaller_error4" -msgstr "" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/text/FixedSizeMode.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/text/FixedSizeMode.png deleted file mode 100644 index 23a69daa31..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/text/FixedSizeMode.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/text/ObjectColorMode.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/text/ObjectColorMode.png deleted file mode 100644 index 82556fa849..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/text/ObjectColorMode.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/text/ProportionalSizeMode.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/text/ProportionalSizeMode.png deleted file mode 100644 index af6ee6e428..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/text/ProportionalSizeMode.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/text/ScaledSizeMode.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/text/ScaledSizeMode.png deleted file mode 100644 index 938e9cee31..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/text/ScaledSizeMode.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/text/UniqueColorMode.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/text/UniqueColorMode.png deleted file mode 100644 index 86bb1c460a..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/text/UniqueColorMode.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/zh_CN.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/zh_CN.po deleted file mode 100644 index c42cca9dda..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/opengl/zh_CN.po +++ /dev/null @@ -1,30 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-10-07 16:14+0000\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "JOGLNativesInstaller_error1" -msgstr "" - -msgid "JOGLNativesInstaller_error2" -msgstr "" - -msgid "JOGLNativesInstaller_error3" -msgstr "" - -msgid "JOGLNativesInstaller_error4" -msgstr "" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/Bundle.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/Bundle.properties deleted file mode 100644 index d6e615b359..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/Bundle.properties +++ /dev/null @@ -1,59 +0,0 @@ -AdvancedOption_DisplayName_Default=Default -AdvancedOption_DisplayName_OpenGL=OpenGL -AdvancedOption_Keywords_Default=visualization, color -AdvancedOption_Keywords_OpenGL=opengl, antialiasing -AdvancedOption_Tooltip_Default=Default Visualization Settings -AdvancedOption_Tooltip_OpenGL=OpenGL2 Engine Settings -OptionsCategory_Keywords_Visualization=visualization, opengl -OptionsCategory_Name_Visualization=Visualization -OptionsCategory_Title_Visualization=Visualization -DefaultPanel.titleDesign.title=Design -DefaultPanel.titleLabel.title=Label -DefaultPanel.use3dCheckbox.text=Use 3d Model (Sphere) -DefaultPanel.autoSelectNeighborCheckbox.text=Auto-select Neighbor -DefaultPanel.highlightCheckbox.text=Highlight Selection -DefaultPanel.labelDefaultSettings.text=Default settings: -DefaultPanel.nodeFontButton.text= -DefaultPanel.edgeFontButton.text= -DefaultPanel.labelNodeFont.text=Node Label Font -DefaultPanel.labelEdgeFont.text=Edge Label Font -DefaultPanel.labelFont.text=Font: -DefaultPanel.labelNodeLabelColor.text=Node Label Color -DefaultPanel.labelEdgeLabelColor.text=Edge Label Color -DefaultPanel.labelColor.text=Color: -OpenGLPanel.jXTitledSeparator1.title=OpenGL -DefaultPanel.labelBackground.text=Background: -DefaultPanel.labelBackgroundColor.text=Color -OpenGLPanel.labelShow.text=Show: -OpenGLPanel.labelAntialiasing.text=Antialiasing: -OpenGLPanel.fpsCheckbox.text=FPS (Frames Per Second) -OpenGLPanel.jXTitledSeparator3.title=Lighting -OpenGLPanel.ambientDiffuseColorButton.text=Diffuse -OpenGLPanel.ambientSpecularColorButton.text=Specular -OpenGLPanel.light1Checkbox.text=1 -OpenGLPanel.light2Checkbox.text=2 -OpenGLPanel.light3Checkbox.text=3 -OpenGLPanel.light1DiffuseColorButton.text=Diffuse -OpenGLPanel.light1SpecularColorButton.text=Specular -OpenGLPanel.light2DiffuseColorButton.text=Diffuse -OpenGLPanel.light2SpecularColorButton.text=Specular -OpenGLPanel.light3DiffuseColorButton.text=Diffuse -OpenGLPanel.light3SpecularColorButton.text=Specular -OpenGLPanel.labelDirectional.text=Directional: -OpenGLPanel.jLabel1.text=X -OpenGLPanel.jLabel2.text=Y -OpenGLPanel.jLabel3.text=Z -OpenGLPanel.jLabel4.text=X -OpenGLPanel.jLabel6.text=Z -OpenGLPanel.jLabel5.text=Y -OpenGLPanel.jLabel9.text=Z -OpenGLPanel.jLabel8.text=Y -OpenGLPanel.jLabel7.text=X -OpenGLPanel.resetButton.text=Reset Default -DefaultPanel.resetButton.text=Reset defaults -OpenGLPanel.jLabel10.text=Lighting settings have effect only in 3d mode -OpenGLPanel.ambientAmbientColorButton.text=Ambient -OpenGLPanel.light1AmbientColorButton.text=Ambient -OpenGLPanel.light2AmbientColorButton.text=Ambient -OpenGLPanel.light3AmbientColorButton.text=Ambient -OpenGLPanel.labelAmbient.text=Ambient: diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/Bundle_cs.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/Bundle_cs.properties deleted file mode 100644 index 89386c189b..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/Bundle_cs.properties +++ /dev/null @@ -1,121 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-01 17\:18+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -AdvancedOption_DisplayName_Default=V\u00fdchoz\u00ed - -AdvancedOption_DisplayName_OpenGL=OpenGL - -AdvancedOption_Keywords_Default=vizualizace, barva - -AdvancedOption_Keywords_OpenGL=opengl, vyhlazen\u00ed hran - -AdvancedOption_Tooltip_Default=V\u00fdchoz\u00ed nastaven\u00ed vizualizace - -AdvancedOption_Tooltip_OpenGL=Nastaven\u00ed j\u00e1dra OpenGL - -OptionsCategory_Keywords_Visualization=vizualizace, opengl - -OptionsCategory_Name_Visualization=Vizualizace - -OptionsCategory_Title_Visualization=Vizualizace - -DefaultPanel.titleDesign.title=N\u00e1vrh - -DefaultPanel.titleLabel.title=\u0160t\u00edtek - -DefaultPanel.use3dCheckbox.text=Pou\u017e\u00edt 3d model (Koule) - -DefaultPanel.autoSelectNeighborCheckbox.text=Automaticky vybrat nejbli\u017e\u0161\u00ed - -DefaultPanel.highlightCheckbox.text=Zv\u00fdraznit v\u00fdb\u011br - -DefaultPanel.labelDefaultSettings.text=V\u00fdchoz\u00ed nastaven\u00ed\: - -DefaultPanel.labelNodeFont.text=P\u00edsmo \u0161t\u00edtku uzle - -DefaultPanel.labelEdgeFont.text=P\u00edsmo \u0161t\u00edtku hrany - -DefaultPanel.labelFont.text=P\u00edsmo\: - -DefaultPanel.labelNodeLabelColor.text=Barva \u0161t\u00edtku uzle - -DefaultPanel.labelEdgeLabelColor.text=Barva \u0161t\u00edtku hrany - -DefaultPanel.labelColor.text=Barva\: - -OpenGLPanel.jXTitledSeparator1.title=OpenGL - -DefaultPanel.labelBackground.text=Pozad\u00ed\: - -DefaultPanel.labelBackgroundColor.text=Barva - -OpenGLPanel.labelShow.text=Zobrazit\: - -OpenGLPanel.labelAntialiasing.text=Vyhlazen\u00ed okraj\u016f\: - -OpenGLPanel.fpsCheckbox.text=FPS (Sn\u00edmky za sekundu) - -OpenGLPanel.jXTitledSeparator3.title=Osv\u011btlen\u00ed - -OpenGLPanel.ambientDiffuseColorButton.text=Rozpt\u00fdlit - -OpenGLPanel.ambientSpecularColorButton.text=Zrcadlov\u00e9 - -OpenGLPanel.light1Checkbox.text=1 - -OpenGLPanel.light2Checkbox.text=2 - -OpenGLPanel.light3Checkbox.text=3 - -OpenGLPanel.light1DiffuseColorButton.text=Rozpt\u00fdlit - -OpenGLPanel.light1SpecularColorButton.text=Zrcadlov\u011b - -OpenGLPanel.light2DiffuseColorButton.text=Rozpt\u00fdlit - -OpenGLPanel.light2SpecularColorButton.text=Zrcadlov\u011b - -OpenGLPanel.light3DiffuseColorButton.text=Rozpt\u00fdlit - -OpenGLPanel.light3SpecularColorButton.text=Zrcadlov\u011b - -OpenGLPanel.labelDirectional.text=Sm\u011brov\u00e9\: - -OpenGLPanel.jLabel1.text=X - -OpenGLPanel.jLabel2.text=Y - -OpenGLPanel.jLabel3.text=Z - -OpenGLPanel.jLabel4.text=X - -OpenGLPanel.jLabel6.text=Z - -OpenGLPanel.jLabel5.text=Y - -OpenGLPanel.jLabel9.text=Z - -OpenGLPanel.jLabel8.text=Y - -OpenGLPanel.jLabel7.text=X - -OpenGLPanel.resetButton.text=Resetovat na v\u00fdchoz\u00ed - -DefaultPanel.resetButton.text=Resetovat na v\u00fdchoz\u00ed - -OpenGLPanel.jLabel10.text=Nastaven\u00ed osv\u011btlen\u00ed se projevuje pouze v re\u017eimu 3d - -OpenGLPanel.ambientAmbientColorButton.text=Okoln\u00ed - -OpenGLPanel.light1AmbientColorButton.text=Okoln\u00ed - -OpenGLPanel.light2AmbientColorButton.text=Okoln\u00ed - -OpenGLPanel.light3AmbientColorButton.text=Okoln\u00ed - -OpenGLPanel.labelAmbient.text=Okoln\u00ed\: diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/Bundle_es.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/Bundle_es.properties deleted file mode 100644 index 738b972dc8..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/Bundle_es.properties +++ /dev/null @@ -1,122 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-15 13\:20+0000\nLast-Translator\: Eduardo Ramos \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -AdvancedOption_DisplayName_Default=Por defecto - -AdvancedOption_DisplayName_OpenGL=OpenGL - -AdvancedOption_Keywords_Default=visualizaci\u00f3n, color - -AdvancedOption_Keywords_OpenGL=opengl, antialiasing - -AdvancedOption_Tooltip_Default=Par\u00e1metros de visualizaci\u00f3n por defecto - -AdvancedOption_Tooltip_OpenGL=Par\u00e1metros del motor OpenGL - -OptionsCategory_Keywords_Visualization=visualizaci\u00f3n, opengl - -OptionsCategory_Name_Visualization=Visualizaci\u00f3n - -OptionsCategory_Title_Visualization=Visualizaci\u00f3n - -DefaultPanel.titleDesign.title=Dise\u00f1o - -DefaultPanel.titleLabel.title=Etiquetas - -DefaultPanel.use3dCheckbox.text=Usar modelo 3d (Esfera) - -DefaultPanel.autoSelectNeighborCheckbox.text=Auto-seleccionar nodos vecinos - -DefaultPanel.highlightCheckbox.text=Resaltar selecci\u00f3n - -DefaultPanel.labelDefaultSettings.text=Par\u00e1metros por defecto\: - -DefaultPanel.labelNodeFont.text=Fuente de las etiquetas de los nodos\: - -DefaultPanel.labelEdgeFont.text=Fuente de las etiquetas de las aristas\: - -DefaultPanel.labelFont.text=Fuente\: - -DefaultPanel.labelNodeLabelColor.text=Color de las etiquetas de los nodos - -DefaultPanel.labelEdgeLabelColor.text=Color de las etiquetas de las aristas - -DefaultPanel.labelColor.text=Color\: - -OpenGLPanel.jXTitledSeparator1.title=OpenGL - -DefaultPanel.labelBackground.text=Fondo\: - -DefaultPanel.labelBackgroundColor.text=Color - -OpenGLPanel.labelShow.text=Mostrar\: - -OpenGLPanel.labelAntialiasing.text=Antialiasing\: - -OpenGLPanel.fpsCheckbox.text=FPS (Im\u00e1genes por segundo) - -OpenGLPanel.jXTitledSeparator3.title=Iluminaci\u00f3n - -OpenGLPanel.ambientDiffuseColorButton.text=Difusi\u00f3n - -OpenGLPanel.ambientSpecularColorButton.text=Especular - -OpenGLPanel.light1Checkbox.text=1 - -OpenGLPanel.light2Checkbox.text=2 - -OpenGLPanel.light3Checkbox.text=3 - -OpenGLPanel.light1DiffuseColorButton.text=Difusi\u00f3n - -OpenGLPanel.light1SpecularColorButton.text=Especular - -OpenGLPanel.light2DiffuseColorButton.text=Difusi\u00f3n - -OpenGLPanel.light2SpecularColorButton.text=Especular - -OpenGLPanel.light3DiffuseColorButton.text=Difusi\u00f3n - -OpenGLPanel.light3SpecularColorButton.text=Especular - -OpenGLPanel.labelDirectional.text=Direccional\: - -OpenGLPanel.jLabel1.text=X - -OpenGLPanel.jLabel2.text=Y - -OpenGLPanel.jLabel3.text=Z - -OpenGLPanel.jLabel4.text=X - -OpenGLPanel.jLabel6.text=Z - -OpenGLPanel.jLabel5.text=Y - -OpenGLPanel.jLabel9.text=Z - -OpenGLPanel.jLabel8.text=Y - -OpenGLPanel.jLabel7.text=X - -OpenGLPanel.resetButton.text=Reestablecer valores por defecto - -DefaultPanel.resetButton.text=Reestablecer valores por defecto - -OpenGLPanel.jLabel10.text=Los par\u00e1metros de iluminaci\u00f3n solo tienen efecto en el modo 3d - -OpenGLPanel.ambientAmbientColorButton.text=Ambiente - -OpenGLPanel.light1AmbientColorButton.text=Ambiente - -OpenGLPanel.light2AmbientColorButton.text=Ambiente - -OpenGLPanel.light3AmbientColorButton.text=Ambiente - -OpenGLPanel.labelAmbient.text=Ambiente\: diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/Bundle_fr.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/Bundle_fr.properties deleted file mode 100644 index 04c981328f..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/Bundle_fr.properties +++ /dev/null @@ -1,122 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-17 10\:11+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -AdvancedOption_DisplayName_Default=D\u00e9faut - -AdvancedOption_DisplayName_OpenGL=OpenGL - -AdvancedOption_Keywords_Default=visualisation, couleur - -AdvancedOption_Keywords_OpenGL=opengl, anticr\u00e9nelage - -AdvancedOption_Tooltip_Default=Param\u00e8tres de visualisation par d\u00e9faut - -AdvancedOption_Tooltip_OpenGL=Param\u00e8tres du moteur OpenGL - -OptionsCategory_Keywords_Visualization=visualisation, opengl - -OptionsCategory_Name_Visualization=Visualisation - -OptionsCategory_Title_Visualization=Visualisation - -DefaultPanel.titleDesign.title=Style - -DefaultPanel.titleLabel.title=Label - -DefaultPanel.use3dCheckbox.text=Utiliser le mod\u00e8le 3d (sph\u00e8re) - -DefaultPanel.autoSelectNeighborCheckbox.text=Voisins s\u00e9lectionn\u00e9s - -DefaultPanel.highlightCheckbox.text=Surbrillance de la s\u00e9lection - -DefaultPanel.labelDefaultSettings.text=Param\u00e8tres par d\u00e9faut \: - -DefaultPanel.labelNodeFont.text=Police du label des noeuds - -DefaultPanel.labelEdgeFont.text=Police du label des liens - -DefaultPanel.labelFont.text=Police \: - -DefaultPanel.labelNodeLabelColor.text=Couleur du label des noeuds - -DefaultPanel.labelEdgeLabelColor.text=Couleur du label des liens - -DefaultPanel.labelColor.text=Couleur \: - -OpenGLPanel.jXTitledSeparator1.title=OpenGL - -DefaultPanel.labelBackground.text=Arri\u00e8re-plan \: - -DefaultPanel.labelBackgroundColor.text=Couleur - -OpenGLPanel.labelShow.text=Afficher \: - -OpenGLPanel.labelAntialiasing.text=Anticr\u00e9nelage \: - -OpenGLPanel.fpsCheckbox.text=IPS (Image Par Seconde) - -OpenGLPanel.jXTitledSeparator3.title=\u00c9clairage - -OpenGLPanel.ambientDiffuseColorButton.text=Diffusion - -OpenGLPanel.ambientSpecularColorButton.text=Specular - -OpenGLPanel.light1Checkbox.text=1 - -OpenGLPanel.light2Checkbox.text=2 - -OpenGLPanel.light3Checkbox.text=3 - -OpenGLPanel.light1DiffuseColorButton.text=Diffusion - -OpenGLPanel.light1SpecularColorButton.text=Specular - -OpenGLPanel.light2DiffuseColorButton.text=Diffusion - -OpenGLPanel.light2SpecularColorButton.text=Specular - -OpenGLPanel.light3DiffuseColorButton.text=Diffusion - -OpenGLPanel.light3SpecularColorButton.text=Specular - -OpenGLPanel.labelDirectional.text=Directionnel - -OpenGLPanel.jLabel1.text=X - -OpenGLPanel.jLabel2.text=Y - -OpenGLPanel.jLabel3.text=Z - -OpenGLPanel.jLabel4.text=X - -OpenGLPanel.jLabel6.text=Z - -OpenGLPanel.jLabel5.text=Y - -OpenGLPanel.jLabel9.text=Z - -OpenGLPanel.jLabel8.text=Y - -OpenGLPanel.jLabel7.text=X - -OpenGLPanel.resetButton.text=Retour aux valeurs par d\u00e9faut - -DefaultPanel.resetButton.text=Retour aux valeurs par d\u00e9faut - -OpenGLPanel.jLabel10.text=Les param\u00e8tres d'\u00e9clairage prennent effet en mode 3d uniquement. - -OpenGLPanel.ambientAmbientColorButton.text=Ambiant - -OpenGLPanel.light1AmbientColorButton.text=Ambiant - -OpenGLPanel.light2AmbientColorButton.text=Ambiant - -OpenGLPanel.light3AmbientColorButton.text=Ambiant - -OpenGLPanel.labelAmbient.text=Ambiant diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/Bundle_ja.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/Bundle_ja.properties deleted file mode 100644 index 85caf1e7ac..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/Bundle_ja.properties +++ /dev/null @@ -1,121 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-01 17\:01+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -AdvancedOption_DisplayName_Default=\u30c7\u30d5\u30a9\u30eb\u30c8 - -AdvancedOption_DisplayName_OpenGL=OpenGL - -AdvancedOption_Keywords_Default=\u8996\u899a\u5316\u3001\u8272 - -AdvancedOption_Keywords_OpenGL=OpenGL\u3001\u30a2\u30f3\u30c1\u30a8\u30a4\u30ea\u30a2\u30b9 - -AdvancedOption_Tooltip_Default=\u30c7\u30d5\u30a9\u30eb\u30c8\u8996\u899a\u5316\u8a2d\u5b9a - -AdvancedOption_Tooltip_OpenGL=OpenGL\u30a8\u30f3\u30b8\u30f3\u8a2d\u5b9a - -OptionsCategory_Keywords_Visualization=\u8996\u899a\u5316\u3001OpenGL - -OptionsCategory_Name_Visualization=\u8996\u899a\u5316 - -OptionsCategory_Title_Visualization=\u8996\u899a\u5316 - -DefaultPanel.titleDesign.title=\u30c7\u30b6\u30a4\u30f3 - -DefaultPanel.titleLabel.title=\u30e9\u30d9\u30eb - -DefaultPanel.use3dCheckbox.text=3D\u30e2\u30c7\u30eb\u3092\u4f7f\u7528(\u7403) - -DefaultPanel.autoSelectNeighborCheckbox.text=\u96a3\u63a5\u3092\u81ea\u52d5\u9078\u629e - -DefaultPanel.highlightCheckbox.text=\u9078\u629e\u3092\u5f37\u8abf - -DefaultPanel.labelDefaultSettings.text=\u30c7\u30d5\u30a9\u30eb\u30c8\u8a2d\u5b9a\: - -DefaultPanel.labelNodeFont.text=\u30ce\u30fc\u30c9\u30fb\u30e9\u30d9\u30eb\u306e\u30d5\u30a9\u30f3\u30c8 - -DefaultPanel.labelEdgeFont.text=\u8fba\u30e9\u30d9\u30eb\u306e\u30d5\u30a9\u30f3\u30c8 - -DefaultPanel.labelFont.text=\u30d5\u30a9\u30f3\u30c8\: - -DefaultPanel.labelNodeLabelColor.text=\u30ce\u30fc\u30c9\u30e9\u30d9\u30eb\u306e\u8272 - -DefaultPanel.labelEdgeLabelColor.text=\u8fba\u30e9\u30d9\u30eb\u306e\u8272 - -DefaultPanel.labelColor.text=\u8272\: - -OpenGLPanel.jXTitledSeparator1.title=OpenGL - -DefaultPanel.labelBackground.text=\u80cc\u666f\: - -DefaultPanel.labelBackgroundColor.text=\u8272 - -OpenGLPanel.labelShow.text=\u8868\u793a\: - -OpenGLPanel.labelAntialiasing.text=\u30a2\u30f3\u30c1\u30a8\u30a4\u30ea\u30a2\u30b9\: - -OpenGLPanel.fpsCheckbox.text=FPS (\u79d2\u9593\u30b3\u30de\u6570) - -OpenGLPanel.jXTitledSeparator3.title=\u7167\u660e - -OpenGLPanel.ambientDiffuseColorButton.text=\u4e71\u53cd\u5c04 - -OpenGLPanel.ambientSpecularColorButton.text=\u93e1\u9762\u53cd\u5c04 - -OpenGLPanel.light1Checkbox.text=1 - -OpenGLPanel.light2Checkbox.text=2 - -OpenGLPanel.light3Checkbox.text=3 - -OpenGLPanel.light1DiffuseColorButton.text=\u4e71\u53cd\u5c04 - -OpenGLPanel.light1SpecularColorButton.text=\u93e1\u9762\u53cd\u5c04 - -OpenGLPanel.light2DiffuseColorButton.text=\u4e71\u53cd\u5c04 - -OpenGLPanel.light2SpecularColorButton.text=\u93e1\u9762\u53cd\u5c04 - -OpenGLPanel.light3DiffuseColorButton.text=\u4e71\u53cd\u5c04 - -OpenGLPanel.light3SpecularColorButton.text=\u93e1\u9762\u53cd\u5c04 - -OpenGLPanel.labelDirectional.text=\u6307\u5411\u6027\: - -OpenGLPanel.jLabel1.text=X - -OpenGLPanel.jLabel2.text=Y - -OpenGLPanel.jLabel3.text=Z - -OpenGLPanel.jLabel4.text=X - -OpenGLPanel.jLabel6.text=Z - -OpenGLPanel.jLabel5.text=Y - -OpenGLPanel.jLabel9.text=Z - -OpenGLPanel.jLabel8.text=Y - -OpenGLPanel.jLabel7.text=X - -OpenGLPanel.resetButton.text=\u30c7\u30d5\u30a9\u30eb\u30c8\u3092\u30ea\u30bb\u30c3\u30c8 - -DefaultPanel.resetButton.text=\u30c7\u30d5\u30a9\u30eb\u30c8\u3092\u30ea\u30bb\u30c3\u30c8 - -OpenGLPanel.jLabel10.text=\u7167\u660e\u306e\u8a2d\u5b9a\u306f\u30013D\u30e2\u30fc\u30c9\u3067\u306e\u307f\u6709\u52b9 - -OpenGLPanel.ambientAmbientColorButton.text=\u5468\u56f2 - -OpenGLPanel.light1AmbientColorButton.text=\u5468\u56f2 - -OpenGLPanel.light2AmbientColorButton.text=\u5468\u56f2 - -OpenGLPanel.light3AmbientColorButton.text=\u5468\u56f2 - -OpenGLPanel.labelAmbient.text=\u5468\u56f2\uff1a diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/Bundle_pt_BR.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/Bundle_pt_BR.properties deleted file mode 100644 index 2fc413395c..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/Bundle_pt_BR.properties +++ /dev/null @@ -1,121 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-17 16\:31+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -AdvancedOption_DisplayName_Default=Padr\u00e3o - -AdvancedOption_DisplayName_OpenGL=OpenGL - -AdvancedOption_Keywords_Default=visualiza\u00e7\u00e3o, cor - -AdvancedOption_Keywords_OpenGL=opengl, antialiasing - -AdvancedOption_Tooltip_Default=Configura\u00e7\u00f5es padr\u00e3o de visualiza\u00e7\u00e3o - -AdvancedOption_Tooltip_OpenGL=Configura\u00e7\u00f5es do motor OpenGL - -OptionsCategory_Keywords_Visualization=visualiza\u00e7\u00e3o, opengl - -OptionsCategory_Name_Visualization=Visualiza\u00e7\u00e3o - -OptionsCategory_Title_Visualization=Visualiza\u00e7\u00e3o - -DefaultPanel.titleDesign.title=Projeto - -DefaultPanel.titleLabel.title=R\u00f3tulo - -DefaultPanel.use3dCheckbox.text=Usar modelo 3d (Esfera) - -DefaultPanel.autoSelectNeighborCheckbox.text=Auto-selecionar n\u00f3s vizinhos - -DefaultPanel.highlightCheckbox.text=Destacar sele\u00e7\u00e3o - -DefaultPanel.labelDefaultSettings.text=Configura\u00e7\u00f5es padr\u00e3o\: - -DefaultPanel.labelNodeFont.text=Fonte dos r\u00f3tulos dos n\u00f3s - -DefaultPanel.labelEdgeFont.text=Fonte dos r\u00f3tulos das arestas - -DefaultPanel.labelFont.text=Fonte\: - -DefaultPanel.labelNodeLabelColor.text=Cor dos r\u00f3tulos dos n\u00f3s - -DefaultPanel.labelEdgeLabelColor.text=Cor dos r\u00f3tulos das arestas - -DefaultPanel.labelColor.text=Cor\: - -OpenGLPanel.jXTitledSeparator1.title=OpenGL - -DefaultPanel.labelBackground.text=Fundo\: - -DefaultPanel.labelBackgroundColor.text=Cor - -OpenGLPanel.labelShow.text=Exibir\: - -OpenGLPanel.labelAntialiasing.text=Antialiasing\: - -OpenGLPanel.fpsCheckbox.text=FPS (Frames Por Segundo) - -OpenGLPanel.jXTitledSeparator3.title=Ilumina\u00e7\u00e3o - -OpenGLPanel.ambientDiffuseColorButton.text=Difus\u00e3o - -OpenGLPanel.ambientSpecularColorButton.text=Especular - -OpenGLPanel.light1Checkbox.text=1 - -OpenGLPanel.light2Checkbox.text=2 - -OpenGLPanel.light3Checkbox.text=3 - -OpenGLPanel.light1DiffuseColorButton.text=Difus\u00e3o - -OpenGLPanel.light1SpecularColorButton.text=Especular - -OpenGLPanel.light2DiffuseColorButton.text=Difus\u00e3o - -OpenGLPanel.light2SpecularColorButton.text=Especular - -OpenGLPanel.light3DiffuseColorButton.text=Difus\u00e3o - -OpenGLPanel.light3SpecularColorButton.text=Especular - -OpenGLPanel.labelDirectional.text=Direcional\: - -OpenGLPanel.jLabel1.text=X - -OpenGLPanel.jLabel2.text=Y - -OpenGLPanel.jLabel3.text=Z - -OpenGLPanel.jLabel4.text=X - -OpenGLPanel.jLabel6.text=Z - -OpenGLPanel.jLabel5.text=Y - -OpenGLPanel.jLabel9.text=Z - -OpenGLPanel.jLabel8.text=Y - -OpenGLPanel.jLabel7.text=X - -OpenGLPanel.resetButton.text=Restaurar valor padr\u00e3o - -DefaultPanel.resetButton.text=Restaurar valores padr\u00e3o - -OpenGLPanel.jLabel10.text=As configura\u00e7\u00f5es de ilumina\u00e7\u00e3o s\u00f3 tem efeito no modo 3d - -OpenGLPanel.ambientAmbientColorButton.text=Ambiente - -OpenGLPanel.light1AmbientColorButton.text=Ambiente - -OpenGLPanel.light2AmbientColorButton.text=Ambiente - -OpenGLPanel.light3AmbientColorButton.text=Ambiente - -OpenGLPanel.labelAmbient.text=Ambiente\: diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/Bundle_ru.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/Bundle_ru.properties deleted file mode 100644 index 6514555d2b..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/Bundle_ru.properties +++ /dev/null @@ -1,121 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-14 15\:43+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -AdvancedOption_DisplayName_Default=\u041e\u0431\u0449\u0438\u0435 - -AdvancedOption_DisplayName_OpenGL=OpenGL - -AdvancedOption_Keywords_Default=visualization, color - -AdvancedOption_Keywords_OpenGL=opengl, antialiasing - -AdvancedOption_Tooltip_Default=\u041e\u0431\u0449\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 - -AdvancedOption_Tooltip_OpenGL=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 OpenGL - -OptionsCategory_Keywords_Visualization=visualization, opengl - -OptionsCategory_Name_Visualization=\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f - -OptionsCategory_Title_Visualization=\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f - -DefaultPanel.titleDesign.title=\u0414\u0438\u0437\u0430\u0439\u043d - -DefaultPanel.titleLabel.title=\u041c\u0435\u0442\u043a\u0438 - -DefaultPanel.use3dCheckbox.text=\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c 3d-\u043c\u043e\u0434\u0435\u043b\u044c (\u0441\u0444\u0435\u0440\u0443) - -DefaultPanel.autoSelectNeighborCheckbox.text=\u0410\u0432\u0442\u043e\u0432\u044b\u0431\u043e\u0440 \u0441\u043e\u0441\u0435\u0434\u0435\u0439 - -DefaultPanel.highlightCheckbox.text=\u041f\u043e\u0434\u0441\u0432\u0435\u0442\u043a\u0430 \u0432\u044b\u0431\u043e\u0440\u0430 - -DefaultPanel.labelDefaultSettings.text=\u041e\u0431\u0449\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\: - -DefaultPanel.labelNodeFont.text=\u0428\u0440\u0438\u0444\u0442 \u043c\u0435\u0442\u043a\u0438 \u0443\u0437\u043b\u0430 - -DefaultPanel.labelEdgeFont.text=\u0428\u0440\u0438\u0444\u0442 \u043c\u0435\u0442\u043a\u0438 \u0440\u0435\u0431\u0440\u0430 - -DefaultPanel.labelFont.text=\u0428\u0440\u0438\u0444\u0442\: - -DefaultPanel.labelNodeLabelColor.text=\u0426\u0432\u0435\u0442 \u043c\u0435\u0442\u043a\u0438 \u0443\u0437\u043b\u0430 - -DefaultPanel.labelEdgeLabelColor.text=\u0426\u0432\u0435\u0442 \u043c\u0435\u0442\u043a\u0438 \u0440\u0435\u0431\u0440\u0430 - -DefaultPanel.labelColor.text=\u0426\u0432\u0435\u0442 - -OpenGLPanel.jXTitledSeparator1.title=OpenGL - -DefaultPanel.labelBackground.text=\u0424\u043e\u043d\: - -DefaultPanel.labelBackgroundColor.text=\u0426\u0432\u0435\u0442 - -OpenGLPanel.labelShow.text=\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c\: - -OpenGLPanel.labelAntialiasing.text=\u0410\u043d\u0442\u0438\u0430\u043b\u0438\u0430\u0441\u0438\u043d\u0433\: - -OpenGLPanel.fpsCheckbox.text=FPS (\u043a\u0430\u0434\u0440\u043e\u0432 \u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0443) - -OpenGLPanel.jXTitledSeparator3.title=\u0421\u0432\u0435\u0442 - -OpenGLPanel.ambientDiffuseColorButton.text=\u0414\u0438\u0444\u0444\u0443\u0437\u0438\u044f - -OpenGLPanel.ambientSpecularColorButton.text=\u041e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f - -OpenGLPanel.light1Checkbox.text=1 - -OpenGLPanel.light2Checkbox.text=2 - -OpenGLPanel.light3Checkbox.text=3 - -OpenGLPanel.light1DiffuseColorButton.text=\u0414\u0438\u0444\u0444\u0443\u0437\u0438\u044f - -OpenGLPanel.light1SpecularColorButton.text=\u041e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f - -OpenGLPanel.light2DiffuseColorButton.text=\u0414\u0438\u0444\u0444\u0443\u0437\u0438\u044f - -OpenGLPanel.light2SpecularColorButton.text=\u041e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f - -OpenGLPanel.light3DiffuseColorButton.text=\u0414\u0438\u0444\u0444\u0443\u0437\u0438\u044f - -OpenGLPanel.light3SpecularColorButton.text=\u041e\u0442\u0440\u0430\u0436\u0435\u043d\u0438\u044f - -OpenGLPanel.labelDirectional.text=\u041d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043d\u044b\u0435\: - -OpenGLPanel.jLabel1.text=X - -OpenGLPanel.jLabel2.text=Y - -OpenGLPanel.jLabel3.text=Z - -OpenGLPanel.jLabel4.text=X - -OpenGLPanel.jLabel6.text=Z - -OpenGLPanel.jLabel5.text=Y - -OpenGLPanel.jLabel9.text=Z - -OpenGLPanel.jLabel8.text=Y - -OpenGLPanel.jLabel7.text=X - -OpenGLPanel.resetButton.text=\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 - -DefaultPanel.resetButton.text=\u0421\u0431\u0440\u043e\u0441\u0438\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 - -OpenGLPanel.jLabel10.text=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0443\u044e\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u0440\u0451\u0445\u043c\u0435\u0440\u043d\u043e\u043c \u0440\u0435\u0436\u0438\u043c\u0435 - -OpenGLPanel.ambientAmbientColorButton.text=\u0420\u0430\u0441\u0441\u0435\u044f\u043d\u043d\u044b\u0439 - -OpenGLPanel.light1AmbientColorButton.text=\u0420\u0430\u0441\u0441\u0435\u044f\u043d\u043d\u044b\u0439 - -OpenGLPanel.light2AmbientColorButton.text=\u0420\u0430\u0441\u0441\u0435\u044f\u043d\u043d\u044b\u0439 - -OpenGLPanel.light3AmbientColorButton.text=\u0420\u0430\u0441\u0441\u0435\u044f\u043d\u043d\u044b\u0439 - -OpenGLPanel.labelAmbient.text=\u0420\u0430\u0441\u0441\u0435\u044f\u043d\u043d\u044b\u0435\: diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/Bundle_zh_CN.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/Bundle_zh_CN.properties deleted file mode 100644 index a8be49b522..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/Bundle_zh_CN.properties +++ /dev/null @@ -1,120 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:05+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -AdvancedOption_DisplayName_Default=\u7f3a\u7701 - -AdvancedOption_DisplayName_OpenGL=OpenGL - -AdvancedOption_Keywords_Default=\u53ef\u89c6\u5316, \u989c\u8272 - -AdvancedOption_Keywords_OpenGL=opengl, \u6297\u952f\u9f7f - -AdvancedOption_Tooltip_Default=\u7f3a\u7701\u53ef\u89c6\u5316\u8bbe\u5b9a - -AdvancedOption_Tooltip_OpenGL=OpenGL\u5f15\u64ce\u8bbe\u5b9a - -OptionsCategory_Keywords_Visualization=\u53ef\u89c6\u5316, opengl - -OptionsCategory_Name_Visualization=\u53ef\u89c6\u5316 - -OptionsCategory_Title_Visualization=\u53ef\u89c6\u5316 - -DefaultPanel.titleDesign.title=\u8bbe\u8ba1 - -DefaultPanel.titleLabel.title=\u6807\u7b7e - -DefaultPanel.use3dCheckbox.text=\u4f7f\u75283\u7ef4\u6a21\u578b(\u7403\u4f53) - -DefaultPanel.autoSelectNeighborCheckbox.text=\u81ea\u52a8\u9009\u62e9\u90bb\u5c45 - -DefaultPanel.highlightCheckbox.text=\u9ad8\u4eae\u9009\u62e9 - -DefaultPanel.labelDefaultSettings.text=\u7f3a\u7701\u8bbe\u5b9a\: - -DefaultPanel.labelNodeFont.text=\u8282\u70b9\u6807\u7b7e\u5b57\u4f53 - -DefaultPanel.labelEdgeFont.text=\u8fb9\u6807\u7b7e\u5b57\u4f53 - -DefaultPanel.labelFont.text=\u5b57\u4f53\: - -DefaultPanel.labelNodeLabelColor.text=\u8282\u70b9\u6807\u7b7e\u989c\u8272 - -DefaultPanel.labelEdgeLabelColor.text=\u8fb9\u6807\u7b7e\u989c\u8272 - -DefaultPanel.labelColor.text=\u989c\u8272\: - -OpenGLPanel.jXTitledSeparator1.title=OpenGl - -DefaultPanel.labelBackground.text=\u80cc\u666f\: - -DefaultPanel.labelBackgroundColor.text=\u989c\u8272 - -OpenGLPanel.labelShow.text=\u663e\u793a\: - -OpenGLPanel.labelAntialiasing.text=\u6297\u952f\u9f7f\: - -OpenGLPanel.fpsCheckbox.text=FPS(\u5237\u65b0\u7387\uff0d\u6bcf\u79d2\u5e27\u6570) - -OpenGLPanel.jXTitledSeparator3.title=\u5149\u7167 - -OpenGLPanel.ambientDiffuseColorButton.text=\u6f2b\u5c04 - -OpenGLPanel.ambientSpecularColorButton.text=\u955c\u9762 - -OpenGLPanel.light1Checkbox.text=1 - -OpenGLPanel.light2Checkbox.text=2 - -OpenGLPanel.light3Checkbox.text=3 - -OpenGLPanel.light1DiffuseColorButton.text=\u6f2b\u5c04 - -OpenGLPanel.light1SpecularColorButton.text=\u955c\u9762 - -OpenGLPanel.light2DiffuseColorButton.text=\u6f2b\u5c04 - -OpenGLPanel.light2SpecularColorButton.text=\u955c\u9762 - -OpenGLPanel.light3DiffuseColorButton.text=\u6f2b\u5c04 - -OpenGLPanel.light3SpecularColorButton.text=\u955c\u9762 - -OpenGLPanel.labelDirectional.text=\u5b9a\u5411\uff1a - -OpenGLPanel.jLabel1.text=X - -OpenGLPanel.jLabel2.text=Y - -OpenGLPanel.jLabel3.text=Z - -OpenGLPanel.jLabel4.text=X - -OpenGLPanel.jLabel6.text=Y - -OpenGLPanel.jLabel5.text=Z - -OpenGLPanel.jLabel9.text=Z - -OpenGLPanel.jLabel8.text=Y - -OpenGLPanel.jLabel7.text=X - -OpenGLPanel.resetButton.text=\u91cd\u8bbe\u7f3a\u7701\u503c - -DefaultPanel.resetButton.text=\u91cd\u8bbe\u7f3a\u7701\u503c - -OpenGLPanel.jLabel10.text=\u5149\u7167\u8bbe\u5b9a\u53ea\u57283\u7ef4\u6a21\u5f0f\u4e0b\u6709\u6548 - -OpenGLPanel.ambientAmbientColorButton.text=\u73af\u5883 - -OpenGLPanel.light1AmbientColorButton.text=\u73af\u5883 - -OpenGLPanel.light2AmbientColorButton.text=\u73af\u5883 - -OpenGLPanel.light3AmbientColorButton.text=\u73af\u5883 - -OpenGLPanel.labelAmbient.text=\u73af\u5883\uff1a diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/cs.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/cs.po deleted file mode 100644 index 6b0bbbeb4a..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/cs.po +++ /dev/null @@ -1,190 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-01 17:18+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "AdvancedOption_DisplayName_Default" -msgstr "VΓ½chozΓ­" - -msgid "AdvancedOption_DisplayName_OpenGL" -msgstr "OpenGL" - -msgid "AdvancedOption_Keywords_Default" -msgstr "vizualizace, barva" - -msgid "AdvancedOption_Keywords_OpenGL" -msgstr "opengl, vyhlazenΓ­ hran" - -msgid "AdvancedOption_Tooltip_Default" -msgstr "VΓ½chozΓ­ nastavenΓ­ vizualizace" - -msgid "AdvancedOption_Tooltip_OpenGL" -msgstr "NastavenΓ­ jΓ‘dra OpenGL" - -msgid "OptionsCategory_Keywords_Visualization" -msgstr "vizualizace, opengl" - -msgid "OptionsCategory_Name_Visualization" -msgstr "Vizualizace" - -msgid "OptionsCategory_Title_Visualization" -msgstr "Vizualizace" - -msgid "DefaultPanel.titleDesign.title" -msgstr "NΓ‘vrh" - -msgid "DefaultPanel.titleLabel.title" -msgstr "Ε tΓ­tek" - -msgid "DefaultPanel.use3dCheckbox.text" -msgstr "PouΕΎΓ­t 3d model (Koule)" - -msgid "DefaultPanel.autoSelectNeighborCheckbox.text" -msgstr "Automaticky vybrat nejbliΕΎΕ‘Γ­" - -msgid "DefaultPanel.highlightCheckbox.text" -msgstr "ZvΓ½raznit vΓ½bΔ›r" - -msgid "DefaultPanel.labelDefaultSettings.text" -msgstr "VΓ½chozΓ­ nastavenΓ­:" - -msgid "DefaultPanel.labelNodeFont.text" -msgstr "PΓ­smo Ε‘tΓ­tku uzle" - -msgid "DefaultPanel.labelEdgeFont.text" -msgstr "PΓ­smo Ε‘tΓ­tku hrany" - -msgid "DefaultPanel.labelFont.text" -msgstr "PΓ­smo:" - -msgid "DefaultPanel.labelNodeLabelColor.text" -msgstr "Barva Ε‘tΓ­tku uzle" - -msgid "DefaultPanel.labelEdgeLabelColor.text" -msgstr "Barva Ε‘tΓ­tku hrany" - -msgid "DefaultPanel.labelColor.text" -msgstr "Barva:" - -msgid "OpenGLPanel.jXTitledSeparator1.title" -msgstr "OpenGL" - -msgid "DefaultPanel.labelBackground.text" -msgstr "PozadΓ­:" - -msgid "DefaultPanel.labelBackgroundColor.text" -msgstr "Barva" - -msgid "OpenGLPanel.labelShow.text" -msgstr "Zobrazit:" - -msgid "OpenGLPanel.labelAntialiasing.text" -msgstr "VyhlazenΓ­ okrajΕ―:" - -msgid "OpenGLPanel.fpsCheckbox.text" -msgstr "FPS (SnΓ­mky za sekundu)" - -msgid "OpenGLPanel.jXTitledSeparator3.title" -msgstr "OsvΔ›tlenΓ­" - -msgid "OpenGLPanel.ambientDiffuseColorButton.text" -msgstr "RozptΓ½lit" - -msgid "OpenGLPanel.ambientSpecularColorButton.text" -msgstr "ZrcadlovΓ©" - -msgid "OpenGLPanel.light1Checkbox.text" -msgstr "1" - -msgid "OpenGLPanel.light2Checkbox.text" -msgstr "2" - -msgid "OpenGLPanel.light3Checkbox.text" -msgstr "3" - -msgid "OpenGLPanel.light1DiffuseColorButton.text" -msgstr "RozptΓ½lit" - -msgid "OpenGLPanel.light1SpecularColorButton.text" -msgstr "ZrcadlovΔ›" - -msgid "OpenGLPanel.light2DiffuseColorButton.text" -msgstr "RozptΓ½lit" - -msgid "OpenGLPanel.light2SpecularColorButton.text" -msgstr "ZrcadlovΔ›" - -msgid "OpenGLPanel.light3DiffuseColorButton.text" -msgstr "RozptΓ½lit" - -msgid "OpenGLPanel.light3SpecularColorButton.text" -msgstr "ZrcadlovΔ›" - -msgid "OpenGLPanel.labelDirectional.text" -msgstr "SmΔ›rovΓ©:" - -msgid "OpenGLPanel.jLabel1.text" -msgstr "X" - -msgid "OpenGLPanel.jLabel2.text" -msgstr "Y" - -msgid "OpenGLPanel.jLabel3.text" -msgstr "Z" - -msgid "OpenGLPanel.jLabel4.text" -msgstr "X" - -msgid "OpenGLPanel.jLabel6.text" -msgstr "Z" - -msgid "OpenGLPanel.jLabel5.text" -msgstr "Y" - -msgid "OpenGLPanel.jLabel9.text" -msgstr "Z" - -msgid "OpenGLPanel.jLabel8.text" -msgstr "Y" - -msgid "OpenGLPanel.jLabel7.text" -msgstr "X" - -msgid "OpenGLPanel.resetButton.text" -msgstr "Resetovat na vΓ½chozΓ­" - -msgid "DefaultPanel.resetButton.text" -msgstr "Resetovat na vΓ½chozΓ­" - -msgid "OpenGLPanel.jLabel10.text" -msgstr "NastavenΓ­ osvΔ›tlenΓ­ se projevuje pouze v reΕΎimu 3d" - -msgid "OpenGLPanel.ambientAmbientColorButton.text" -msgstr "OkolnΓ­" - -msgid "OpenGLPanel.light1AmbientColorButton.text" -msgstr "OkolnΓ­" - -msgid "OpenGLPanel.light2AmbientColorButton.text" -msgstr "OkolnΓ­" - -msgid "OpenGLPanel.light3AmbientColorButton.text" -msgstr "OkolnΓ­" - -msgid "OpenGLPanel.labelAmbient.text" -msgstr "OkolnΓ­:" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/es.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/es.po deleted file mode 100644 index 2de70b5f6a..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/es.po +++ /dev/null @@ -1,191 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Eduardo Ramos , 2011. -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-15 13:20+0000\n" -"Last-Translator: Eduardo Ramos \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "AdvancedOption_DisplayName_Default" -msgstr "Por defecto" - -msgid "AdvancedOption_DisplayName_OpenGL" -msgstr "OpenGL" - -msgid "AdvancedOption_Keywords_Default" -msgstr "visualizaciΓ³n, color" - -msgid "AdvancedOption_Keywords_OpenGL" -msgstr "opengl, antialiasing" - -msgid "AdvancedOption_Tooltip_Default" -msgstr "ParΓ‘metros de visualizaciΓ³n por defecto" - -msgid "AdvancedOption_Tooltip_OpenGL" -msgstr "ParΓ‘metros del motor OpenGL" - -msgid "OptionsCategory_Keywords_Visualization" -msgstr "visualizaciΓ³n, opengl" - -msgid "OptionsCategory_Name_Visualization" -msgstr "VisualizaciΓ³n" - -msgid "OptionsCategory_Title_Visualization" -msgstr "VisualizaciΓ³n" - -msgid "DefaultPanel.titleDesign.title" -msgstr "DiseΓ±o" - -msgid "DefaultPanel.titleLabel.title" -msgstr "Etiquetas" - -msgid "DefaultPanel.use3dCheckbox.text" -msgstr "Usar modelo 3d (Esfera)" - -msgid "DefaultPanel.autoSelectNeighborCheckbox.text" -msgstr "Auto-seleccionar nodos vecinos" - -msgid "DefaultPanel.highlightCheckbox.text" -msgstr "Resaltar selecciΓ³n" - -msgid "DefaultPanel.labelDefaultSettings.text" -msgstr "ParΓ‘metros por defecto:" - -msgid "DefaultPanel.labelNodeFont.text" -msgstr "Fuente de las etiquetas de los nodos:" - -msgid "DefaultPanel.labelEdgeFont.text" -msgstr "Fuente de las etiquetas de las aristas:" - -msgid "DefaultPanel.labelFont.text" -msgstr "Fuente:" - -msgid "DefaultPanel.labelNodeLabelColor.text" -msgstr "Color de las etiquetas de los nodos" - -msgid "DefaultPanel.labelEdgeLabelColor.text" -msgstr "Color de las etiquetas de las aristas" - -msgid "DefaultPanel.labelColor.text" -msgstr "Color:" - -msgid "OpenGLPanel.jXTitledSeparator1.title" -msgstr "OpenGL" - -msgid "DefaultPanel.labelBackground.text" -msgstr "Fondo:" - -msgid "DefaultPanel.labelBackgroundColor.text" -msgstr "Color" - -msgid "OpenGLPanel.labelShow.text" -msgstr "Mostrar:" - -msgid "OpenGLPanel.labelAntialiasing.text" -msgstr "Antialiasing:" - -msgid "OpenGLPanel.fpsCheckbox.text" -msgstr "FPS (ImΓ‘genes por segundo)" - -msgid "OpenGLPanel.jXTitledSeparator3.title" -msgstr "IluminaciΓ³n" - -msgid "OpenGLPanel.ambientDiffuseColorButton.text" -msgstr "DifusiΓ³n" - -msgid "OpenGLPanel.ambientSpecularColorButton.text" -msgstr "Especular" - -msgid "OpenGLPanel.light1Checkbox.text" -msgstr "1" - -msgid "OpenGLPanel.light2Checkbox.text" -msgstr "2" - -msgid "OpenGLPanel.light3Checkbox.text" -msgstr "3" - -msgid "OpenGLPanel.light1DiffuseColorButton.text" -msgstr "DifusiΓ³n" - -msgid "OpenGLPanel.light1SpecularColorButton.text" -msgstr "Especular" - -msgid "OpenGLPanel.light2DiffuseColorButton.text" -msgstr "DifusiΓ³n" - -msgid "OpenGLPanel.light2SpecularColorButton.text" -msgstr "Especular" - -msgid "OpenGLPanel.light3DiffuseColorButton.text" -msgstr "DifusiΓ³n" - -msgid "OpenGLPanel.light3SpecularColorButton.text" -msgstr "Especular" - -msgid "OpenGLPanel.labelDirectional.text" -msgstr "Direccional:" - -msgid "OpenGLPanel.jLabel1.text" -msgstr "X" - -msgid "OpenGLPanel.jLabel2.text" -msgstr "Y" - -msgid "OpenGLPanel.jLabel3.text" -msgstr "Z" - -msgid "OpenGLPanel.jLabel4.text" -msgstr "X" - -msgid "OpenGLPanel.jLabel6.text" -msgstr "Z" - -msgid "OpenGLPanel.jLabel5.text" -msgstr "Y" - -msgid "OpenGLPanel.jLabel9.text" -msgstr "Z" - -msgid "OpenGLPanel.jLabel8.text" -msgstr "Y" - -msgid "OpenGLPanel.jLabel7.text" -msgstr "X" - -msgid "OpenGLPanel.resetButton.text" -msgstr "Reestablecer valores por defecto" - -msgid "DefaultPanel.resetButton.text" -msgstr "Reestablecer valores por defecto" - -msgid "OpenGLPanel.jLabel10.text" -msgstr "Los parΓ‘metros de iluminaciΓ³n solo tienen efecto en el modo 3d" - -msgid "OpenGLPanel.ambientAmbientColorButton.text" -msgstr "Ambiente" - -msgid "OpenGLPanel.light1AmbientColorButton.text" -msgstr "Ambiente" - -msgid "OpenGLPanel.light2AmbientColorButton.text" -msgstr "Ambiente" - -msgid "OpenGLPanel.light3AmbientColorButton.text" -msgstr "Ambiente" - -msgid "OpenGLPanel.labelAmbient.text" -msgstr "Ambiente:" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/fr.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/fr.po deleted file mode 100644 index caa6b10da2..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/fr.po +++ /dev/null @@ -1,191 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-17 10:11+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "AdvancedOption_DisplayName_Default" -msgstr "DΓ©faut" - -msgid "AdvancedOption_DisplayName_OpenGL" -msgstr "OpenGL" - -msgid "AdvancedOption_Keywords_Default" -msgstr "visualisation, couleur" - -msgid "AdvancedOption_Keywords_OpenGL" -msgstr "opengl, anticrΓ©nelage" - -msgid "AdvancedOption_Tooltip_Default" -msgstr "ParamΓ¨tres de visualisation par dΓ©faut" - -msgid "AdvancedOption_Tooltip_OpenGL" -msgstr "ParamΓ¨tres du moteur OpenGL" - -msgid "OptionsCategory_Keywords_Visualization" -msgstr "visualisation, opengl" - -msgid "OptionsCategory_Name_Visualization" -msgstr "Visualisation" - -msgid "OptionsCategory_Title_Visualization" -msgstr "Visualisation" - -msgid "DefaultPanel.titleDesign.title" -msgstr "Style" - -msgid "DefaultPanel.titleLabel.title" -msgstr "Label" - -msgid "DefaultPanel.use3dCheckbox.text" -msgstr "Utiliser le modΓ¨le 3d (sphΓ¨re)" - -msgid "DefaultPanel.autoSelectNeighborCheckbox.text" -msgstr "Voisins sΓ©lectionnΓ©s" - -msgid "DefaultPanel.highlightCheckbox.text" -msgstr "Surbrillance de la sΓ©lection" - -msgid "DefaultPanel.labelDefaultSettings.text" -msgstr "ParamΓ¨tres par dΓ©faut :" - -msgid "DefaultPanel.labelNodeFont.text" -msgstr "Police du label des noeuds" - -msgid "DefaultPanel.labelEdgeFont.text" -msgstr "Police du label des liens" - -msgid "DefaultPanel.labelFont.text" -msgstr "Police :" - -msgid "DefaultPanel.labelNodeLabelColor.text" -msgstr "Couleur du label des noeuds" - -msgid "DefaultPanel.labelEdgeLabelColor.text" -msgstr "Couleur du label des liens" - -msgid "DefaultPanel.labelColor.text" -msgstr "Couleur :" - -msgid "OpenGLPanel.jXTitledSeparator1.title" -msgstr "OpenGL" - -msgid "DefaultPanel.labelBackground.text" -msgstr "ArriΓ¨re-plan :" - -msgid "DefaultPanel.labelBackgroundColor.text" -msgstr "Couleur" - -msgid "OpenGLPanel.labelShow.text" -msgstr "Afficher :" - -msgid "OpenGLPanel.labelAntialiasing.text" -msgstr "AnticrΓ©nelage :" - -msgid "OpenGLPanel.fpsCheckbox.text" -msgstr "IPS (Image Par Seconde)" - -msgid "OpenGLPanel.jXTitledSeparator3.title" -msgstr "Γ‰clairage" - -msgid "OpenGLPanel.ambientDiffuseColorButton.text" -msgstr "Diffusion" - -msgid "OpenGLPanel.ambientSpecularColorButton.text" -msgstr "Specular" - -msgid "OpenGLPanel.light1Checkbox.text" -msgstr "1" - -msgid "OpenGLPanel.light2Checkbox.text" -msgstr "2" - -msgid "OpenGLPanel.light3Checkbox.text" -msgstr "3" - -msgid "OpenGLPanel.light1DiffuseColorButton.text" -msgstr "Diffusion" - -msgid "OpenGLPanel.light1SpecularColorButton.text" -msgstr "Specular" - -msgid "OpenGLPanel.light2DiffuseColorButton.text" -msgstr "Diffusion" - -msgid "OpenGLPanel.light2SpecularColorButton.text" -msgstr "Specular" - -msgid "OpenGLPanel.light3DiffuseColorButton.text" -msgstr "Diffusion" - -msgid "OpenGLPanel.light3SpecularColorButton.text" -msgstr "Specular" - -msgid "OpenGLPanel.labelDirectional.text" -msgstr "Directionnel" - -msgid "OpenGLPanel.jLabel1.text" -msgstr "X" - -msgid "OpenGLPanel.jLabel2.text" -msgstr "Y" - -msgid "OpenGLPanel.jLabel3.text" -msgstr "Z" - -msgid "OpenGLPanel.jLabel4.text" -msgstr "X" - -msgid "OpenGLPanel.jLabel6.text" -msgstr "Z" - -msgid "OpenGLPanel.jLabel5.text" -msgstr "Y" - -msgid "OpenGLPanel.jLabel9.text" -msgstr "Z" - -msgid "OpenGLPanel.jLabel8.text" -msgstr "Y" - -msgid "OpenGLPanel.jLabel7.text" -msgstr "X" - -msgid "OpenGLPanel.resetButton.text" -msgstr "Retour aux valeurs par dΓ©faut" - -msgid "DefaultPanel.resetButton.text" -msgstr "Retour aux valeurs par dΓ©faut" - -msgid "OpenGLPanel.jLabel10.text" -msgstr "Les paramΓ¨tres d'Γ©clairage prennent effet en mode 3d uniquement." - -msgid "OpenGLPanel.ambientAmbientColorButton.text" -msgstr "Ambiant" - -msgid "OpenGLPanel.light1AmbientColorButton.text" -msgstr "Ambiant" - -msgid "OpenGLPanel.light2AmbientColorButton.text" -msgstr "Ambiant" - -msgid "OpenGLPanel.light3AmbientColorButton.text" -msgstr "Ambiant" - -msgid "OpenGLPanel.labelAmbient.text" -msgstr "Ambiant" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/ja.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/ja.po deleted file mode 100644 index 2641206696..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/ja.po +++ /dev/null @@ -1,190 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-01 17:01+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "AdvancedOption_DisplayName_Default" -msgstr "γƒ‡γƒ•γ‚©γƒ«γƒˆ" - -msgid "AdvancedOption_DisplayName_OpenGL" -msgstr "OpenGL" - -msgid "AdvancedOption_Keywords_Default" -msgstr "θ¦–θ¦šεŒ–γ€θ‰²" - -msgid "AdvancedOption_Keywords_OpenGL" -msgstr "OpenGL、をンチエむγƒͺγ‚’γ‚Ή" - -msgid "AdvancedOption_Tooltip_Default" -msgstr "γƒ‡γƒ•γ‚©γƒ«γƒˆθ¦–θ¦šεŒ–θ¨­εš" - -msgid "AdvancedOption_Tooltip_OpenGL" -msgstr "OpenGLエンジン設εš" - -msgid "OptionsCategory_Keywords_Visualization" -msgstr "θ¦–θ¦šεŒ–γ€OpenGL" - -msgid "OptionsCategory_Name_Visualization" -msgstr "θ¦–θ¦šεŒ–" - -msgid "OptionsCategory_Title_Visualization" -msgstr "θ¦–θ¦šεŒ–" - -msgid "DefaultPanel.titleDesign.title" -msgstr "デアむン" - -msgid "DefaultPanel.titleLabel.title" -msgstr "ラベル" - -msgid "DefaultPanel.use3dCheckbox.text" -msgstr "3Dヒデルを使用(球)" - -msgid "DefaultPanel.autoSelectNeighborCheckbox.text" -msgstr "隣ζŽ₯γ‚’θ‡ͺε‹•ιΈζŠž" - -msgid "DefaultPanel.highlightCheckbox.text" -msgstr "ιΈζŠžγ‚’εΌ·θͺΏ" - -msgid "DefaultPanel.labelDefaultSettings.text" -msgstr "γƒ‡γƒ•γ‚©γƒ«γƒˆθ¨­εš:" - -msgid "DefaultPanel.labelNodeFont.text" -msgstr "γƒŽγƒΌγƒ‰γƒ»γƒ©γƒ™γƒ«γγƒ•γ‚©γƒ³γƒˆ" - -msgid "DefaultPanel.labelEdgeFont.text" -msgstr "辺ラベルγγƒ•γ‚©γƒ³γƒˆ" - -msgid "DefaultPanel.labelFont.text" -msgstr "γƒ•γ‚©γƒ³γƒˆ:" - -msgid "DefaultPanel.labelNodeLabelColor.text" -msgstr "γƒŽγƒΌγƒ‰γƒ©γƒ™γƒ«γθ‰²" - -msgid "DefaultPanel.labelEdgeLabelColor.text" -msgstr "辺ラベルγθ‰²" - -msgid "DefaultPanel.labelColor.text" -msgstr "色:" - -msgid "OpenGLPanel.jXTitledSeparator1.title" -msgstr "OpenGL" - -msgid "DefaultPanel.labelBackground.text" -msgstr "θƒŒζ™―:" - -msgid "DefaultPanel.labelBackgroundColor.text" -msgstr "色" - -msgid "OpenGLPanel.labelShow.text" -msgstr "葨瀺:" - -msgid "OpenGLPanel.labelAntialiasing.text" -msgstr "をンチエむγƒͺγ‚’γ‚Ή:" - -msgid "OpenGLPanel.fpsCheckbox.text" -msgstr "FPS (η§’ι–“γ‚³γƒžζ•°)" - -msgid "OpenGLPanel.jXTitledSeparator3.title" -msgstr "η…§ζ˜Ž" - -msgid "OpenGLPanel.ambientDiffuseColorButton.text" -msgstr "乱反射" - -msgid "OpenGLPanel.ambientSpecularColorButton.text" -msgstr "鏑青反射" - -msgid "OpenGLPanel.light1Checkbox.text" -msgstr "1" - -msgid "OpenGLPanel.light2Checkbox.text" -msgstr "2" - -msgid "OpenGLPanel.light3Checkbox.text" -msgstr "3" - -msgid "OpenGLPanel.light1DiffuseColorButton.text" -msgstr "乱反射" - -msgid "OpenGLPanel.light1SpecularColorButton.text" -msgstr "鏑青反射" - -msgid "OpenGLPanel.light2DiffuseColorButton.text" -msgstr "乱反射" - -msgid "OpenGLPanel.light2SpecularColorButton.text" -msgstr "鏑青反射" - -msgid "OpenGLPanel.light3DiffuseColorButton.text" -msgstr "乱反射" - -msgid "OpenGLPanel.light3SpecularColorButton.text" -msgstr "鏑青反射" - -msgid "OpenGLPanel.labelDirectional.text" -msgstr "ζŒ‡ε‘ζ€§:" - -msgid "OpenGLPanel.jLabel1.text" -msgstr "X" - -msgid "OpenGLPanel.jLabel2.text" -msgstr "Y" - -msgid "OpenGLPanel.jLabel3.text" -msgstr "Z" - -msgid "OpenGLPanel.jLabel4.text" -msgstr "X" - -msgid "OpenGLPanel.jLabel6.text" -msgstr "Z" - -msgid "OpenGLPanel.jLabel5.text" -msgstr "Y" - -msgid "OpenGLPanel.jLabel9.text" -msgstr "Z" - -msgid "OpenGLPanel.jLabel8.text" -msgstr "Y" - -msgid "OpenGLPanel.jLabel7.text" -msgstr "X" - -msgid "OpenGLPanel.resetButton.text" -msgstr "γƒ‡γƒ•γ‚©γƒ«γƒˆγ‚’γƒͺγ‚»γƒƒγƒˆ" - -msgid "DefaultPanel.resetButton.text" -msgstr "γƒ‡γƒ•γ‚©γƒ«γƒˆγ‚’γƒͺγ‚»γƒƒγƒˆ" - -msgid "OpenGLPanel.jLabel10.text" -msgstr "η…§ζ˜Žγθ¨­εšγ―、3DヒードでγγΏζœ‰εŠΉ" - -msgid "OpenGLPanel.ambientAmbientColorButton.text" -msgstr "周囲" - -msgid "OpenGLPanel.light1AmbientColorButton.text" -msgstr "周囲" - -msgid "OpenGLPanel.light2AmbientColorButton.text" -msgstr "周囲" - -msgid "OpenGLPanel.light3AmbientColorButton.text" -msgstr "周囲" - -msgid "OpenGLPanel.labelAmbient.text" -msgstr "ε‘¨ε›²οΌš" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/optionDialog_viz_name.png b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/optionDialog_viz_name.png deleted file mode 100644 index b449f37a52..0000000000 Binary files a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/optionDialog_viz_name.png and /dev/null differ diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/org-gephi-visualization-options.pot b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/org-gephi-visualization-options.pot deleted file mode 100644 index ce4d8705fd..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/org-gephi-visualization-options.pot +++ /dev/null @@ -1,187 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "AdvancedOption_DisplayName_Default" -msgstr "Default" - -msgid "AdvancedOption_DisplayName_OpenGL" -msgstr "OpenGL" - -msgid "AdvancedOption_Keywords_Default" -msgstr "visualization, color" - -msgid "AdvancedOption_Keywords_OpenGL" -msgstr "opengl, antialiasing" - -msgid "AdvancedOption_Tooltip_Default" -msgstr "Default Visualization Settings" - -msgid "AdvancedOption_Tooltip_OpenGL" -msgstr "OpenGL2 Engine Settings" - -msgid "OptionsCategory_Keywords_Visualization" -msgstr "visualization, opengl" - -msgid "OptionsCategory_Name_Visualization" -msgstr "Visualization" - -msgid "OptionsCategory_Title_Visualization" -msgstr "Visualization" - -msgid "DefaultPanel.titleDesign.title" -msgstr "Design" - -msgid "DefaultPanel.titleLabel.title" -msgstr "Label" - -msgid "DefaultPanel.use3dCheckbox.text" -msgstr "Use 3d Model (Sphere)" - -msgid "DefaultPanel.autoSelectNeighborCheckbox.text" -msgstr "Auto-select Neighbor" - -msgid "DefaultPanel.highlightCheckbox.text" -msgstr "Highlight Selection" - -msgid "DefaultPanel.labelDefaultSettings.text" -msgstr "Default settings:" - -msgid "DefaultPanel.labelNodeFont.text" -msgstr "Node Label Font" - -msgid "DefaultPanel.labelEdgeFont.text" -msgstr "Edge Label Font" - -msgid "DefaultPanel.labelFont.text" -msgstr "Font:" - -msgid "DefaultPanel.labelNodeLabelColor.text" -msgstr "Node Label Color" - -msgid "DefaultPanel.labelEdgeLabelColor.text" -msgstr "Edge Label Color" - -msgid "DefaultPanel.labelColor.text" -msgstr "Color:" - -msgid "OpenGLPanel.jXTitledSeparator1.title" -msgstr "OpenGL" - -msgid "DefaultPanel.labelBackground.text" -msgstr "Background:" - -msgid "DefaultPanel.labelBackgroundColor.text" -msgstr "Color" - -msgid "OpenGLPanel.labelShow.text" -msgstr "Show:" - -msgid "OpenGLPanel.labelAntialiasing.text" -msgstr "Antialiasing:" - -msgid "OpenGLPanel.fpsCheckbox.text" -msgstr "FPS (Frames Per Second)" - -msgid "OpenGLPanel.jXTitledSeparator3.title" -msgstr "Lighting" - -msgid "OpenGLPanel.ambientDiffuseColorButton.text" -msgstr "Diffuse" - -msgid "OpenGLPanel.ambientSpecularColorButton.text" -msgstr "Specular" - -msgid "OpenGLPanel.light1Checkbox.text" -msgstr "1" - -msgid "OpenGLPanel.light2Checkbox.text" -msgstr "2" - -msgid "OpenGLPanel.light3Checkbox.text" -msgstr "3" - -msgid "OpenGLPanel.light1DiffuseColorButton.text" -msgstr "Diffuse" - -msgid "OpenGLPanel.light1SpecularColorButton.text" -msgstr "Specular" - -msgid "OpenGLPanel.light2DiffuseColorButton.text" -msgstr "Diffuse" - -msgid "OpenGLPanel.light2SpecularColorButton.text" -msgstr "Specular" - -msgid "OpenGLPanel.light3DiffuseColorButton.text" -msgstr "Diffuse" - -msgid "OpenGLPanel.light3SpecularColorButton.text" -msgstr "Specular" - -msgid "OpenGLPanel.labelDirectional.text" -msgstr "Directional:" - -msgid "OpenGLPanel.jLabel1.text" -msgstr "X" - -msgid "OpenGLPanel.jLabel2.text" -msgstr "Y" - -msgid "OpenGLPanel.jLabel3.text" -msgstr "Z" - -msgid "OpenGLPanel.jLabel4.text" -msgstr "X" - -msgid "OpenGLPanel.jLabel6.text" -msgstr "Z" - -msgid "OpenGLPanel.jLabel5.text" -msgstr "Y" - -msgid "OpenGLPanel.jLabel9.text" -msgstr "Z" - -msgid "OpenGLPanel.jLabel8.text" -msgstr "Y" - -msgid "OpenGLPanel.jLabel7.text" -msgstr "X" - -msgid "OpenGLPanel.resetButton.text" -msgstr "Reset Default" - -msgid "DefaultPanel.resetButton.text" -msgstr "Reset defaults" - -msgid "OpenGLPanel.jLabel10.text" -msgstr "Lighting settings have effect only in 3d mode" - -msgid "OpenGLPanel.ambientAmbientColorButton.text" -msgstr "Ambient" - -msgid "OpenGLPanel.light1AmbientColorButton.text" -msgstr "Ambient" - -msgid "OpenGLPanel.light2AmbientColorButton.text" -msgstr "Ambient" - -msgid "OpenGLPanel.light3AmbientColorButton.text" -msgstr "Ambient" - -msgid "OpenGLPanel.labelAmbient.text" -msgstr "Ambient:" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/pt_BR.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/pt_BR.po deleted file mode 100644 index 42b0586cbf..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/pt_BR.po +++ /dev/null @@ -1,190 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-17 16:31+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "AdvancedOption_DisplayName_Default" -msgstr "PadrΓ£o" - -msgid "AdvancedOption_DisplayName_OpenGL" -msgstr "OpenGL" - -msgid "AdvancedOption_Keywords_Default" -msgstr "visualizaΓ§Γ£o, cor" - -msgid "AdvancedOption_Keywords_OpenGL" -msgstr "opengl, antialiasing" - -msgid "AdvancedOption_Tooltip_Default" -msgstr "ConfiguraΓ§Γ΅es padrΓ£o de visualizaΓ§Γ£o" - -msgid "AdvancedOption_Tooltip_OpenGL" -msgstr "ConfiguraΓ§Γ΅es do motor OpenGL" - -msgid "OptionsCategory_Keywords_Visualization" -msgstr "visualizaΓ§Γ£o, opengl" - -msgid "OptionsCategory_Name_Visualization" -msgstr "VisualizaΓ§Γ£o" - -msgid "OptionsCategory_Title_Visualization" -msgstr "VisualizaΓ§Γ£o" - -msgid "DefaultPanel.titleDesign.title" -msgstr "Projeto" - -msgid "DefaultPanel.titleLabel.title" -msgstr "RΓ³tulo" - -msgid "DefaultPanel.use3dCheckbox.text" -msgstr "Usar modelo 3d (Esfera)" - -msgid "DefaultPanel.autoSelectNeighborCheckbox.text" -msgstr "Auto-selecionar nΓ³s vizinhos" - -msgid "DefaultPanel.highlightCheckbox.text" -msgstr "Destacar seleΓ§Γ£o" - -msgid "DefaultPanel.labelDefaultSettings.text" -msgstr "ConfiguraΓ§Γ΅es padrΓ£o:" - -msgid "DefaultPanel.labelNodeFont.text" -msgstr "Fonte dos rΓ³tulos dos nΓ³s" - -msgid "DefaultPanel.labelEdgeFont.text" -msgstr "Fonte dos rΓ³tulos das arestas" - -msgid "DefaultPanel.labelFont.text" -msgstr "Fonte:" - -msgid "DefaultPanel.labelNodeLabelColor.text" -msgstr "Cor dos rΓ³tulos dos nΓ³s" - -msgid "DefaultPanel.labelEdgeLabelColor.text" -msgstr "Cor dos rΓ³tulos das arestas" - -msgid "DefaultPanel.labelColor.text" -msgstr "Cor:" - -msgid "OpenGLPanel.jXTitledSeparator1.title" -msgstr "OpenGL" - -msgid "DefaultPanel.labelBackground.text" -msgstr "Fundo:" - -msgid "DefaultPanel.labelBackgroundColor.text" -msgstr "Cor" - -msgid "OpenGLPanel.labelShow.text" -msgstr "Exibir:" - -msgid "OpenGLPanel.labelAntialiasing.text" -msgstr "Antialiasing:" - -msgid "OpenGLPanel.fpsCheckbox.text" -msgstr "FPS (Frames Por Segundo)" - -msgid "OpenGLPanel.jXTitledSeparator3.title" -msgstr "IluminaΓ§Γ£o" - -msgid "OpenGLPanel.ambientDiffuseColorButton.text" -msgstr "DifusΓ£o" - -msgid "OpenGLPanel.ambientSpecularColorButton.text" -msgstr "Especular" - -msgid "OpenGLPanel.light1Checkbox.text" -msgstr "1" - -msgid "OpenGLPanel.light2Checkbox.text" -msgstr "2" - -msgid "OpenGLPanel.light3Checkbox.text" -msgstr "3" - -msgid "OpenGLPanel.light1DiffuseColorButton.text" -msgstr "DifusΓ£o" - -msgid "OpenGLPanel.light1SpecularColorButton.text" -msgstr "Especular" - -msgid "OpenGLPanel.light2DiffuseColorButton.text" -msgstr "DifusΓ£o" - -msgid "OpenGLPanel.light2SpecularColorButton.text" -msgstr "Especular" - -msgid "OpenGLPanel.light3DiffuseColorButton.text" -msgstr "DifusΓ£o" - -msgid "OpenGLPanel.light3SpecularColorButton.text" -msgstr "Especular" - -msgid "OpenGLPanel.labelDirectional.text" -msgstr "Direcional:" - -msgid "OpenGLPanel.jLabel1.text" -msgstr "X" - -msgid "OpenGLPanel.jLabel2.text" -msgstr "Y" - -msgid "OpenGLPanel.jLabel3.text" -msgstr "Z" - -msgid "OpenGLPanel.jLabel4.text" -msgstr "X" - -msgid "OpenGLPanel.jLabel6.text" -msgstr "Z" - -msgid "OpenGLPanel.jLabel5.text" -msgstr "Y" - -msgid "OpenGLPanel.jLabel9.text" -msgstr "Z" - -msgid "OpenGLPanel.jLabel8.text" -msgstr "Y" - -msgid "OpenGLPanel.jLabel7.text" -msgstr "X" - -msgid "OpenGLPanel.resetButton.text" -msgstr "Restaurar valor padrΓ£o" - -msgid "DefaultPanel.resetButton.text" -msgstr "Restaurar valores padrΓ£o" - -msgid "OpenGLPanel.jLabel10.text" -msgstr "As configuraΓ§Γ΅es de iluminaΓ§Γ£o sΓ³ tem efeito no modo 3d" - -msgid "OpenGLPanel.ambientAmbientColorButton.text" -msgstr "Ambiente" - -msgid "OpenGLPanel.light1AmbientColorButton.text" -msgstr "Ambiente" - -msgid "OpenGLPanel.light2AmbientColorButton.text" -msgstr "Ambiente" - -msgid "OpenGLPanel.light3AmbientColorButton.text" -msgstr "Ambiente" - -msgid "OpenGLPanel.labelAmbient.text" -msgstr "Ambiente:" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/ru.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/ru.po deleted file mode 100644 index 6c85e6fe16..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/ru.po +++ /dev/null @@ -1,190 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011, 2012. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-14 15:43+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "AdvancedOption_DisplayName_Default" -msgstr "ΠžΠ±Ρ‰ΠΈΠ΅" - -msgid "AdvancedOption_DisplayName_OpenGL" -msgstr "OpenGL" - -msgid "AdvancedOption_Keywords_Default" -msgstr "visualization, color" - -msgid "AdvancedOption_Keywords_OpenGL" -msgstr "opengl, antialiasing" - -msgid "AdvancedOption_Tooltip_Default" -msgstr "ΠžΠ±Ρ‰ΠΈΠ΅ настройки Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ" - -msgid "AdvancedOption_Tooltip_OpenGL" -msgstr "Настройки OpenGL" - -msgid "OptionsCategory_Keywords_Visualization" -msgstr "visualization, opengl" - -msgid "OptionsCategory_Name_Visualization" -msgstr "Визуализация" - -msgid "OptionsCategory_Title_Visualization" -msgstr "Визуализация" - -msgid "DefaultPanel.titleDesign.title" -msgstr "Π”ΠΈΠ·Π°ΠΉΠ½" - -msgid "DefaultPanel.titleLabel.title" -msgstr "ΠœΠ΅Ρ‚ΠΊΠΈ" - -msgid "DefaultPanel.use3dCheckbox.text" -msgstr "Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ 3d-модСль (сфСру)" - -msgid "DefaultPanel.autoSelectNeighborCheckbox.text" -msgstr "Автовыбор сосСдСй" - -msgid "DefaultPanel.highlightCheckbox.text" -msgstr "ΠŸΠΎΠ΄ΡΠ²Π΅Ρ‚ΠΊΠ° Π²Ρ‹Π±ΠΎΡ€Π°" - -msgid "DefaultPanel.labelDefaultSettings.text" -msgstr "ΠžΠ±Ρ‰ΠΈΠ΅ настройки:" - -msgid "DefaultPanel.labelNodeFont.text" -msgstr "Π¨Ρ€ΠΈΡ„Ρ‚ ΠΌΠ΅Ρ‚ΠΊΠΈ ΡƒΠ·Π»Π°" - -msgid "DefaultPanel.labelEdgeFont.text" -msgstr "Π¨Ρ€ΠΈΡ„Ρ‚ ΠΌΠ΅Ρ‚ΠΊΠΈ Ρ€Π΅Π±Ρ€Π°" - -msgid "DefaultPanel.labelFont.text" -msgstr "Π¨Ρ€ΠΈΡ„Ρ‚:" - -msgid "DefaultPanel.labelNodeLabelColor.text" -msgstr "Π¦Π²Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΊΠΈ ΡƒΠ·Π»Π°" - -msgid "DefaultPanel.labelEdgeLabelColor.text" -msgstr "Π¦Π²Π΅Ρ‚ ΠΌΠ΅Ρ‚ΠΊΠΈ Ρ€Π΅Π±Ρ€Π°" - -msgid "DefaultPanel.labelColor.text" -msgstr "Π¦Π²Π΅Ρ‚" - -msgid "OpenGLPanel.jXTitledSeparator1.title" -msgstr "OpenGL" - -msgid "DefaultPanel.labelBackground.text" -msgstr "Π€ΠΎΠ½:" - -msgid "DefaultPanel.labelBackgroundColor.text" -msgstr "Π¦Π²Π΅Ρ‚" - -msgid "OpenGLPanel.labelShow.text" -msgstr "ΠžΡ‚ΠΎΠ±Ρ€Π°ΠΆΠ°Ρ‚ΡŒ:" - -msgid "OpenGLPanel.labelAntialiasing.text" -msgstr "Антиалиасинг:" - -msgid "OpenGLPanel.fpsCheckbox.text" -msgstr "FPS (ΠΊΠ°Π΄Ρ€ΠΎΠ² Π² сСкунду)" - -msgid "OpenGLPanel.jXTitledSeparator3.title" -msgstr "Π‘Π²Π΅Ρ‚" - -msgid "OpenGLPanel.ambientDiffuseColorButton.text" -msgstr "Диффузия" - -msgid "OpenGLPanel.ambientSpecularColorButton.text" -msgstr "ΠžΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΡ" - -msgid "OpenGLPanel.light1Checkbox.text" -msgstr "1" - -msgid "OpenGLPanel.light2Checkbox.text" -msgstr "2" - -msgid "OpenGLPanel.light3Checkbox.text" -msgstr "3" - -msgid "OpenGLPanel.light1DiffuseColorButton.text" -msgstr "Диффузия" - -msgid "OpenGLPanel.light1SpecularColorButton.text" -msgstr "ΠžΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΡ" - -msgid "OpenGLPanel.light2DiffuseColorButton.text" -msgstr "Диффузия" - -msgid "OpenGLPanel.light2SpecularColorButton.text" -msgstr "ΠžΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΡ" - -msgid "OpenGLPanel.light3DiffuseColorButton.text" -msgstr "Диффузия" - -msgid "OpenGLPanel.light3SpecularColorButton.text" -msgstr "ΠžΡ‚Ρ€Π°ΠΆΠ΅Π½ΠΈΡ" - -msgid "OpenGLPanel.labelDirectional.text" -msgstr "НаправлСнныС:" - -msgid "OpenGLPanel.jLabel1.text" -msgstr "X" - -msgid "OpenGLPanel.jLabel2.text" -msgstr "Y" - -msgid "OpenGLPanel.jLabel3.text" -msgstr "Z" - -msgid "OpenGLPanel.jLabel4.text" -msgstr "X" - -msgid "OpenGLPanel.jLabel6.text" -msgstr "Z" - -msgid "OpenGLPanel.jLabel5.text" -msgstr "Y" - -msgid "OpenGLPanel.jLabel9.text" -msgstr "Z" - -msgid "OpenGLPanel.jLabel8.text" -msgstr "Y" - -msgid "OpenGLPanel.jLabel7.text" -msgstr "X" - -msgid "OpenGLPanel.resetButton.text" -msgstr "Π‘Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ настройки" - -msgid "DefaultPanel.resetButton.text" -msgstr "Π‘Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ настройки" - -msgid "OpenGLPanel.jLabel10.text" -msgstr "Настройки освСщСния Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ‚Ρ€Ρ‘Ρ…ΠΌΠ΅Ρ€Π½ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅" - -msgid "OpenGLPanel.ambientAmbientColorButton.text" -msgstr "РассСянный" - -msgid "OpenGLPanel.light1AmbientColorButton.text" -msgstr "РассСянный" - -msgid "OpenGLPanel.light2AmbientColorButton.text" -msgstr "РассСянный" - -msgid "OpenGLPanel.light3AmbientColorButton.text" -msgstr "РассСянный" - -msgid "OpenGLPanel.labelAmbient.text" -msgstr "РассСянныС:" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/zh_CN.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/zh_CN.po deleted file mode 100644 index b36044b1bd..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/options/zh_CN.po +++ /dev/null @@ -1,189 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:05+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "AdvancedOption_DisplayName_Default" -msgstr "缺省" - -msgid "AdvancedOption_DisplayName_OpenGL" -msgstr "OpenGL" - -msgid "AdvancedOption_Keywords_Default" -msgstr "ε―θ§†εŒ–, ι’œθ‰²" - -msgid "AdvancedOption_Keywords_OpenGL" -msgstr "opengl, ζŠ—ι”―ι½Ώ" - -msgid "AdvancedOption_Tooltip_Default" -msgstr "ηΌΊηœε―θ§†εŒ–θΎεš" - -msgid "AdvancedOption_Tooltip_OpenGL" -msgstr "OpenGLεΌ•ζ“ŽθΎεš" - -msgid "OptionsCategory_Keywords_Visualization" -msgstr "ε―θ§†εŒ–, opengl" - -msgid "OptionsCategory_Name_Visualization" -msgstr "ε―θ§†εŒ–" - -msgid "OptionsCategory_Title_Visualization" -msgstr "ε―θ§†εŒ–" - -msgid "DefaultPanel.titleDesign.title" -msgstr "θΎθ‘" - -msgid "DefaultPanel.titleLabel.title" -msgstr "ζ ‡η­Ύ" - -msgid "DefaultPanel.use3dCheckbox.text" -msgstr "使用3η»΄ζ¨‘εž‹(球体)" - -msgid "DefaultPanel.autoSelectNeighborCheckbox.text" -msgstr "θ‡ͺεŠ¨ι€‰ζ‹©ι‚»ε±…" - -msgid "DefaultPanel.highlightCheckbox.text" -msgstr "高δΊι€‰ζ‹©" - -msgid "DefaultPanel.labelDefaultSettings.text" -msgstr "缺省θΎεš:" - -msgid "DefaultPanel.labelNodeFont.text" -msgstr "θŠ‚η‚Ήζ ‡η­Ύε­—δ½“" - -msgid "DefaultPanel.labelEdgeFont.text" -msgstr "边标签字体" - -msgid "DefaultPanel.labelFont.text" -msgstr "字体:" - -msgid "DefaultPanel.labelNodeLabelColor.text" -msgstr "θŠ‚η‚Ήζ ‡η­Ύι’œθ‰²" - -msgid "DefaultPanel.labelEdgeLabelColor.text" -msgstr "θΎΉζ ‡η­Ύι’œθ‰²" - -msgid "DefaultPanel.labelColor.text" -msgstr "ι’œθ‰²:" - -msgid "OpenGLPanel.jXTitledSeparator1.title" -msgstr "OpenGl" - -msgid "DefaultPanel.labelBackground.text" -msgstr "θƒŒζ™―:" - -msgid "DefaultPanel.labelBackgroundColor.text" -msgstr "ι’œθ‰²" - -msgid "OpenGLPanel.labelShow.text" -msgstr "显瀺:" - -msgid "OpenGLPanel.labelAntialiasing.text" -msgstr "ζŠ—ι”―ι½Ώ:" - -msgid "OpenGLPanel.fpsCheckbox.text" -msgstr "FPS(εˆ·ζ–°ηŽ‡οΌζ―η§’εΈ§ζ•°)" - -msgid "OpenGLPanel.jXTitledSeparator3.title" -msgstr "ε…‰η…§" - -msgid "OpenGLPanel.ambientDiffuseColorButton.text" -msgstr "ζΌ«ε°„" - -msgid "OpenGLPanel.ambientSpecularColorButton.text" -msgstr "ι•œι’" - -msgid "OpenGLPanel.light1Checkbox.text" -msgstr "1" - -msgid "OpenGLPanel.light2Checkbox.text" -msgstr "2" - -msgid "OpenGLPanel.light3Checkbox.text" -msgstr "3" - -msgid "OpenGLPanel.light1DiffuseColorButton.text" -msgstr "ζΌ«ε°„" - -msgid "OpenGLPanel.light1SpecularColorButton.text" -msgstr "ι•œι’" - -msgid "OpenGLPanel.light2DiffuseColorButton.text" -msgstr "ζΌ«ε°„" - -msgid "OpenGLPanel.light2SpecularColorButton.text" -msgstr "ι•œι’" - -msgid "OpenGLPanel.light3DiffuseColorButton.text" -msgstr "ζΌ«ε°„" - -msgid "OpenGLPanel.light3SpecularColorButton.text" -msgstr "ι•œι’" - -msgid "OpenGLPanel.labelDirectional.text" -msgstr "εšε‘οΌš" - -msgid "OpenGLPanel.jLabel1.text" -msgstr "X" - -msgid "OpenGLPanel.jLabel2.text" -msgstr "Y" - -msgid "OpenGLPanel.jLabel3.text" -msgstr "Z" - -msgid "OpenGLPanel.jLabel4.text" -msgstr "X" - -msgid "OpenGLPanel.jLabel6.text" -msgstr "Y" - -msgid "OpenGLPanel.jLabel5.text" -msgstr "Z" - -msgid "OpenGLPanel.jLabel9.text" -msgstr "Z" - -msgid "OpenGLPanel.jLabel8.text" -msgstr "Y" - -msgid "OpenGLPanel.jLabel7.text" -msgstr "X" - -msgid "OpenGLPanel.resetButton.text" -msgstr "重θΎηΌΊηœε€Ό" - -msgid "DefaultPanel.resetButton.text" -msgstr "重θΎηΌΊηœε€Ό" - -msgid "OpenGLPanel.jLabel10.text" -msgstr "ε…‰η…§θΎεšεͺ在3η»΄ζ¨‘εΌδΈ‹ζœ‰ζ•ˆ" - -msgid "OpenGLPanel.ambientAmbientColorButton.text" -msgstr "ηŽ―ε’ƒ" - -msgid "OpenGLPanel.light1AmbientColorButton.text" -msgstr "ηŽ―ε’ƒ" - -msgid "OpenGLPanel.light2AmbientColorButton.text" -msgstr "ηŽ―ε’ƒ" - -msgid "OpenGLPanel.light3AmbientColorButton.text" -msgstr "ηŽ―ε’ƒ" - -msgid "OpenGLPanel.labelAmbient.text" -msgstr "ηŽ―ε’ƒοΌš" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/org-gephi-visualization.pot b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/org-gephi-visualization.pot deleted file mode 100644 index c4b06fa31b..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/org-gephi-visualization.pot +++ /dev/null @@ -1,25 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "Actions/Window/org-gephi-visualization-component-GraphAction.instance" -msgstr "Graph" - -msgid "OpenIDE-Module-Long-Description" -msgstr "Visualization module, not modularized" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Visualization module, not modularized" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/pt_BR.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/pt_BR.po deleted file mode 100644 index b9056e019a..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/pt_BR.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 16:45+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "Actions/Window/org-gephi-visualization-component-GraphAction.instance" -msgstr "Grafo" - -msgid "OpenIDE-Module-Long-Description" -msgstr "MΓ³dulo de visualizaΓ§Γ£o, nΓ£o modularizado" - -msgid "OpenIDE-Module-Short-Description" -msgstr "MΓ³dulo de visualizaΓ§Γ£o, nΓ£o modularizado" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/ru.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/ru.po deleted file mode 100644 index 308c01cdfd..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/ru.po +++ /dev/null @@ -1,28 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 06:45+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "Actions/Window/org-gephi-visualization-component-GraphAction.instance" -msgstr "Π“Ρ€Π°Ρ„" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ΠœΠΎΠ΄ΡƒΠ»ΡŒ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ΠœΠΎΠ΄ΡƒΠ»ΡŒ Π²ΠΈΠ·ΡƒΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ" diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle.properties index fdfcf1e049..1bef92dd19 100644 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle.properties +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle.properties @@ -3,10 +3,5 @@ ScreenshotMaker.finishedMessage.title = Take screenshot ScreenshotMaker.filechooser.title = Save As... ScreenshotMaker.filechooser.pngDescription = PNG ScreenshotMaker.configure.title = Screenshot settings -ScreenshotSettingsPanel.heightTextField.text= -ScreenshotSettingsPanel.labelWidth.text=Width: -ScreenshotSettingsPanel.labelHeight.text=Height: -ScreenshotSettingsPanel.labelAntiAliasing.text=Antialiasing: -ScreenshotSettingsPanel.widthTextField.text= -ScreenshotSettingsPanel.autoSaveCheckBox.text=Autosave -ScreenshotSettingsPanel.selectDirectoryButton.text=Select directory... +ScreenshotMaker.progress.message = Taking screenshot +ScreenshotMaker.progress.cancelled = Taking screenshot task was cancelled \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_ar.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_ca.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_ca.properties new file mode 100644 index 0000000000..05f1bd0ff0 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_ca.properties @@ -0,0 +1,6 @@ +ScreenshotMaker.finishedMessage.message = S'ha desat la captura de pantalla a "{0}" +ScreenshotMaker.finishedMessage.title = Fes una captura de pantalla +ScreenshotMaker.filechooser.title = Desa com a... +ScreenshotMaker.filechooser.pngDescription = PNG +ScreenshotMaker.configure.title = Configuraci\u00f3 de la captura de pantalla +ScreenshotMaker.progress.message = Fent la captura de pantalla \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_cs.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_cs.properties index 450de5a6d6..53767e51ad 100644 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_cs.properties +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_cs.properties @@ -1,27 +1,6 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-23 17\:12+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -ScreenshotMaker.finishedMessage.message=Sn\u00edmek obrazovky ulo\u017een do ''{0}'' - -ScreenshotMaker.finishedMessage.title=Po\u0159\u00eddit sn\u00edmek obrazovky - -ScreenshotMaker.filechooser.title=Ulo\u017eit jako... - -ScreenshotMaker.filechooser.pngDescription=PNG - -ScreenshotMaker.configure.title=Nastaven\u00ed sn\u00edmku obrazovky - -ScreenshotSettingsPanel.labelWidth.text=\u0160\u00ed\u0159ka\: - -ScreenshotSettingsPanel.labelHeight.text=V\u00fd\u0161ka\: - -ScreenshotSettingsPanel.labelAntiAliasing.text=Vyhlazov\u00e1n\u00ed okraj\u016f\: - -ScreenshotSettingsPanel.autoSaveCheckBox.text=Automatick\u00e9 ukl\u00e1d\u00e1n\u00ed - -ScreenshotSettingsPanel.selectDirectoryButton.text=Vybrat adres\u00e1\u0159... +ScreenshotMaker.finishedMessage.message = Sn\u00edmek obrazovky ulo\u017een do ''{0}'' +ScreenshotMaker.finishedMessage.title = Po\u0159\u00eddit sn\u00edmek obrazovky +ScreenshotMaker.filechooser.title = Ulo\u017eit jako... +ScreenshotMaker.filechooser.pngDescription = PNG +ScreenshotMaker.configure.title = Nastaven\u00ed sn\u00edmku obrazovky +ScreenshotMaker.progress.message = Vytv\u00e1\u0159en\u00ed sn\u00edmku obrazovky diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_de.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_de.properties new file mode 100644 index 0000000000..72ae4d2e16 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_de.properties @@ -0,0 +1,6 @@ +ScreenshotMaker.finishedMessage.message = Bildschirmfoto gespeichert unter "{0}" +ScreenshotMaker.finishedMessage.title = Bildschirmfoto aufnehmen +ScreenshotMaker.filechooser.title = Speichern unter... +ScreenshotMaker.filechooser.pngDescription = PNG +ScreenshotMaker.configure.title = Bildschirmfoto-Einstellungen +ScreenshotMaker.progress.message = Bildschirmfoto aufnehmen diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_es.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_es.properties index 6c2be752fd..2136edc786 100644 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_es.properties +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_es.properties @@ -1,27 +1,6 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:56+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - ScreenshotMaker.finishedMessage.message=Captura de pantalla guardada en ''{0}'' - ScreenshotMaker.finishedMessage.title=Capturar pantalla - ScreenshotMaker.filechooser.title=Guardar como... - ScreenshotMaker.filechooser.pngDescription=PNG - ScreenshotMaker.configure.title=Par\u00e1metros de captura de pantalla - -ScreenshotSettingsPanel.labelWidth.text=Ancho\: - -ScreenshotSettingsPanel.labelHeight.text=Alto\: - -ScreenshotSettingsPanel.labelAntiAliasing.text=Antialiasing\: - -ScreenshotSettingsPanel.autoSaveCheckBox.text=Autoguardado - -ScreenshotSettingsPanel.selectDirectoryButton.text=Seleccionar directorio... +ScreenshotMaker.progress.message=Tomando captura de pantalla \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_fr.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_fr.properties index 769f2712ef..df4297e8e2 100644 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_fr.properties +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_fr.properties @@ -1,27 +1,6 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:56+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -ScreenshotMaker.finishedMessage.message=Capture d'\u00e9cran enregistr\u00e9e dans ''{0}'' - -ScreenshotMaker.finishedMessage.title=Capturer l'\u00e9cran - -ScreenshotMaker.filechooser.title=Enregistrer sous... - -ScreenshotMaker.filechooser.pngDescription=PNG - -ScreenshotMaker.configure.title=Param\u00e8tres de capture d'\u00e9cran - -ScreenshotSettingsPanel.labelWidth.text=Largeur \: - -ScreenshotSettingsPanel.labelHeight.text=Hauteur \: - -ScreenshotSettingsPanel.labelAntiAliasing.text=Anticr\u00e9nelage \: - -ScreenshotSettingsPanel.autoSaveCheckBox.text=Enregistrement automatique - -ScreenshotSettingsPanel.selectDirectoryButton.text=S\u00e9lectionnez le dossier... +ScreenshotMaker.finishedMessage.message = Capture d''\u00e9cran enregistr\u00e9e dans ''{0}'' +ScreenshotMaker.finishedMessage.title = Capturer l'\u00e9cran +ScreenshotMaker.filechooser.title = Enregistrer sous... +ScreenshotMaker.filechooser.pngDescription = PNG +ScreenshotMaker.configure.title = Param\u00e8tres de capture d'\u00e9cran +ScreenshotMaker.progress.message = Capture d'\u00e9cran \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_he.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_he.properties new file mode 100644 index 0000000000..8d802b58de --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_he.properties @@ -0,0 +1,6 @@ +ScreenshotMaker.finishedMessage.message = \u05dc\u05db\u05d9\u05d3\u05ea \u05de\u05e1\u05da \u05e0\u05e9\u05de\u05e8\u05d4 \u05d1 "{0}" +ScreenshotMaker.finishedMessage.title = \u05dc\u05db\u05d5\u05d3 \u05d4\u05de\u05e1\u05da +ScreenshotMaker.filechooser.title = \u05e9\u05de\u05d5\u05e8 \u05d1\u05e9\u05dd... +ScreenshotMaker.filechooser.pngDescription = PNG +ScreenshotMaker.configure.title = \u05d4\u05d2\u05d3\u05e8\u05d5\u05ea \u05dc\u05db\u05d9\u05d3\u05ea \u05de\u05e1\u05da +ScreenshotMaker.progress.message = \u05dc\u05db\u05d5\u05d3 \u05d4\u05de\u05e1\u05da \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_hu.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_hu.properties new file mode 100644 index 0000000000..aa4380556a --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_hu.properties @@ -0,0 +1,6 @@ +ScreenshotMaker.finishedMessage.title=K\u00e9sz\u00edtsen k\u00e9perny\u0151k\u00e9pet +ScreenshotMaker.filechooser.pngDescription=PNG +ScreenshotMaker.progress.message=K\u00e9perny\u0151k\u00e9p k\u00e9sz\u00edt\u00e9se +ScreenshotMaker.filechooser.title=Ment\u00e9s m\u00e1sk\u00e9nt... +ScreenshotMaker.finishedMessage.message=A k\u00e9perny\u0151k\u00e9p elmentve ide: ''{0}'' +ScreenshotMaker.configure.title=K\u00e9perny\u0151k\u00e9p be\u00e1ll\u00edt\u00e1sai \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_it.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_it.properties new file mode 100644 index 0000000000..0199f1867f --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_it.properties @@ -0,0 +1,7 @@ +ScreenshotMaker.finishedMessage.message=Screenshot saved to ''{0}'' +ScreenshotMaker.finishedMessage.title=Take screenshot +ScreenshotMaker.filechooser.title=Salva Come +ScreenshotMaker.filechooser.pngDescription=PNG +ScreenshotMaker.configure.title=Screenshot settings +ScreenshotMaker.progress.message=Taking screenshot +ScreenshotMaker.progress.cancelled=Operazione di cattura schermo cancellata diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_ja.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_ja.properties index 80f443afa0..f4c87a3139 100644 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_ja.properties +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_ja.properties @@ -1,27 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-11 03\:21+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -ScreenshotMaker.finishedMessage.message=''{0}''\u306b\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u3092\u4fdd\u5b58 - -ScreenshotMaker.finishedMessage.title=\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u3092\u64ae\u308b - -ScreenshotMaker.filechooser.title=\u540d\u524d\u3092\u4ed8\u3051\u3066\u4fdd\u5b58... - -ScreenshotMaker.filechooser.pngDescription=PNG - -ScreenshotMaker.configure.title=\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u8a2d\u5b9a - -ScreenshotSettingsPanel.labelWidth.text=\u5e45\: - -ScreenshotSettingsPanel.labelHeight.text=\u9ad8\u3055\: - -ScreenshotSettingsPanel.labelAntiAliasing.text=\u30a2\u30f3\u30c1\u30a8\u30a4\u30ea\u30a2\u30b9\: - -ScreenshotSettingsPanel.autoSaveCheckBox.text=\u81ea\u52d5\u4fdd\u5b58 - -ScreenshotSettingsPanel.selectDirectoryButton.text=\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u9078\u629e... +ScreenshotMaker.finishedMessage.message = ''{0}''\u306b\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u3092\u4fdd\u5b58 +ScreenshotMaker.finishedMessage.title = \u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u3092\u64ae\u308b +ScreenshotMaker.filechooser.title = \u540d\u524d\u3092\u4ed8\u3051\u3066\u4fdd\u5b58... +ScreenshotMaker.filechooser.pngDescription = PNG +ScreenshotMaker.configure.title = \u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8\u8a2d\u5b9a \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_ko.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_ko.properties new file mode 100644 index 0000000000..80745e6c42 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_ko.properties @@ -0,0 +1,6 @@ +ScreenshotMaker.finishedMessage.title=\uc2a4\ud06c\ub9b0\uc0f7 \ucc0d\uae30 +ScreenshotMaker.filechooser.pngDescription=PNG +ScreenshotMaker.progress.message=\uc2a4\ud06c\ub9b0\uc0f7 \ucc0d\uae30 +ScreenshotMaker.filechooser.title=\ub2e4\ub978 \uc774\ub984\uc73c\ub85c \uc800\uc7a5... +ScreenshotMaker.finishedMessage.message=\uc2a4\ud06c\ub9b0\uc0f7\uc774 ''{0}''\ub85c \uc800\uc7a5\ub410\uc2b5\ub2c8\ub2e4 +ScreenshotMaker.configure.title=\uc2a4\ud06c\ub9b0\uc0f7 \uc124\uc815 \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_nl.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_nl.properties new file mode 100644 index 0000000000..4b1967a9f0 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_nl.properties @@ -0,0 +1,6 @@ +ScreenshotMaker.finishedMessage.message = Screenshot opgeslagen naar ''{0}'' +ScreenshotMaker.finishedMessage.title = Screenshot maken +ScreenshotMaker.filechooser.title = Opslaan als... +ScreenshotMaker.filechooser.pngDescription = PNG +ScreenshotMaker.configure.title = Screenshotinstellingen +ScreenshotMaker.progress.message = Screenshot maken diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_pt_BR.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_pt_BR.properties index e9108c6f51..ddfb402dda 100644 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_pt_BR.properties +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_pt_BR.properties @@ -1,27 +1,6 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-05 15\:44+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -ScreenshotMaker.finishedMessage.message=Captura de tela salva para "{0}" - -ScreenshotMaker.finishedMessage.title=Capturar tela - -ScreenshotMaker.filechooser.title=Salvar como... - -ScreenshotMaker.filechooser.pngDescription=PNG - -ScreenshotMaker.configure.title=Configura\u00e7\u00f5es de captura de tela - -ScreenshotSettingsPanel.labelWidth.text=Largura\: - -ScreenshotSettingsPanel.labelHeight.text=Altura\: - -ScreenshotSettingsPanel.labelAntiAliasing.text=Antialias\: - -ScreenshotSettingsPanel.autoSaveCheckBox.text=Salvamento autom\u00e1tico - -ScreenshotSettingsPanel.selectDirectoryButton.text=Selecione um diret\u00f3rio... +ScreenshotMaker.finishedMessage.message = Captura de tela salva para ''{0}'' +ScreenshotMaker.finishedMessage.title = Capturar tela +ScreenshotMaker.filechooser.title = Salvar como... +ScreenshotMaker.filechooser.pngDescription = PNG +ScreenshotMaker.configure.title = Configura\u00e7\u00f5es de captura de tela +ScreenshotMaker.progress.message = Capturando a tela \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_ro.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_ro.properties new file mode 100644 index 0000000000..492cddf5af --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_ro.properties @@ -0,0 +1,6 @@ +ScreenshotMaker.finishedMessage.title=Captur\u0103 de ecran +ScreenshotMaker.configure.title=Set\u0103ri captur\u0103 de ecran +ScreenshotMaker.progress.message=Efectuare captur\u0103 de ecran +ScreenshotMaker.finishedMessage.message=Captur\u0103 de ecran salvat\u0103 \u00een ''{0}'' +ScreenshotMaker.filechooser.title=Salveaz\u0103 ca... +ScreenshotMaker.filechooser.pngDescription=PNG diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_ru.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_ru.properties index f604d227e3..6666f49df6 100644 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_ru.properties +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_ru.properties @@ -1,27 +1,5 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-23 07\:22+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -ScreenshotMaker.finishedMessage.message=\u0421\u043d\u0438\u043c\u043e\u043a \u044d\u043a\u0440\u0430\u043d\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d \u0432 ''{0}'' - -ScreenshotMaker.finishedMessage.title=\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043d\u0438\u043c\u043e\u043a \u044d\u043a\u0440\u0430\u043d\u0430 - -ScreenshotMaker.filechooser.title=\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u043a... - -ScreenshotMaker.filechooser.pngDescription=PNG - -ScreenshotMaker.configure.title=\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f - -ScreenshotSettingsPanel.labelWidth.text=\u0428\u0438\u0440\u0438\u043d\u0430\: - -ScreenshotSettingsPanel.labelHeight.text=\u0412\u044b\u0441\u043e\u0442\u0430\: - -ScreenshotSettingsPanel.labelAntiAliasing.text=\u0410\u043d\u0442\u0438\u0430\u043b\u0438\u0430\u0441\u0438\u043d\u0433\: - -ScreenshotSettingsPanel.autoSaveCheckBox.text=\u0410\u0432\u0442\u043e\u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 - -ScreenshotSettingsPanel.selectDirectoryButton.text=\u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u044e... +ScreenshotMaker.finishedMessage.message = \u0421\u043d\u0438\u043c\u043e\u043a \u044d\u043a\u0440\u0430\u043d\u0430 \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d \u0432 ''{0}'' +ScreenshotMaker.finishedMessage.title = \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u043d\u0438\u043c\u043e\u043a \u044d\u043a\u0440\u0430\u043d\u0430 +ScreenshotMaker.filechooser.title = \u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043a\u0430\u043a... +ScreenshotMaker.filechooser.pngDescription = PNG +ScreenshotMaker.configure.title = \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_th.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_tr.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_tr.properties new file mode 100644 index 0000000000..9f301b3b67 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_tr.properties @@ -0,0 +1,6 @@ +ScreenshotMaker.finishedMessage.message=Screenshot saved to ''{0}'' +ScreenshotMaker.finishedMessage.title=Take screenshot +ScreenshotMaker.filechooser.title=Farkl\u0131 kaydet... +ScreenshotMaker.filechooser.pngDescription=PNG +ScreenshotMaker.configure.title=Screenshot settings +ScreenshotMaker.progress.message=Taking screenshot \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_uk.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_uk.properties new file mode 100644 index 0000000000..8739245173 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_uk.properties @@ -0,0 +1,7 @@ +ScreenshotMaker.configure.title=\u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u0437\u043d\u0456\u043c\u043a\u0430 \u0435\u043a\u0440\u0430\u043d\u0430 +ScreenshotMaker.progress.message=\u0417\u0440\u043e\u0431\u0438\u0442\u0438 \u0441\u043a\u0440\u0456\u043d\u0448\u043e\u0442 +ScreenshotMaker.finishedMessage.message=\u0417\u043d\u0456\u043c\u043e\u043a \u0435\u043a\u0440\u0430\u043d\u0430 \u0437\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u043e \u0432 ''{0}'' +ScreenshotMaker.finishedMessage.title=\u0417\u0440\u043e\u0431\u0438\u0442\u0438 \u0441\u043a\u0440\u0456\u043d\u0448\u043e\u0442 +ScreenshotMaker.filechooser.title=\u0417\u0431\u0435\u0440\u0435\u0433\u0442\u0438 \u044f\u043a... +ScreenshotMaker.filechooser.pngDescription=PNG +ScreenshotMaker.progress.cancelled=\u0417\u0430\u0432\u0434\u0430\u043D\u043D\u044F \u0441\u0442\u0432\u043E\u0440\u0435\u043D\u043D\u044F \u0437\u043D\u0456\u043C\u043A\u0430 \u0435\u043A\u0440\u0430\u043D\u0430 \u0441\u043A\u0430\u0441\u043E\u0432\u0430\u043D\u043E diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_zh_CN.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_zh_CN.properties index 54236211a1..ff465fdeca 100644 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_zh_CN.properties +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_zh_CN.properties @@ -1,26 +1,6 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:04+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - ScreenshotMaker.finishedMessage.message=\u622a\u5c4f\u5b58\u81f3''{0}'' - ScreenshotMaker.finishedMessage.title=\u622a\u5c4f - ScreenshotMaker.filechooser.title=\u53e6\u5b58\u4e3a... - ScreenshotMaker.filechooser.pngDescription=PNG - ScreenshotMaker.configure.title=\u622a\u5c4f\u8bbe\u5b9a - -ScreenshotSettingsPanel.labelWidth.text=\u5bbd - -ScreenshotSettingsPanel.labelHeight.text=\u9ad8 - -ScreenshotSettingsPanel.labelAntiAliasing.text=\u6297\u952f\u9f7f\uff1a - -ScreenshotSettingsPanel.autoSaveCheckBox.text=\u81ea\u52a8\u4fdd\u5b58 - -ScreenshotSettingsPanel.selectDirectoryButton.text=\u9009\u62e9\u76ee\u5f55... +ScreenshotMaker.progress.message=\u91c7\u7528\u622a\u56fe \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_zh_TW.properties b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_zh_TW.properties new file mode 100644 index 0000000000..7bd6cd6555 --- /dev/null +++ b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/Bundle_zh_TW.properties @@ -0,0 +1,6 @@ +ScreenshotMaker.finishedMessage.message=Screenshot saved to ''{0}'' +ScreenshotMaker.finishedMessage.title=Take screenshot +ScreenshotMaker.filechooser.title=\u53e6\u5b58\u65b0\u6a94 +ScreenshotMaker.filechooser.pngDescription=PNG +ScreenshotMaker.configure.title=Screenshot settings +ScreenshotMaker.progress.message=Taking screenshot \ No newline at end of file diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/cs.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/cs.po deleted file mode 100644 index caf7a990f9..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/cs.po +++ /dev/null @@ -1,49 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-23 17:12+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "ScreenshotMaker.finishedMessage.message" -msgstr "SnΓ­mek obrazovky uloΕΎen do ''{0}''" - -msgid "ScreenshotMaker.finishedMessage.title" -msgstr "PoΕ™Γ­dit snΓ­mek obrazovky" - -msgid "ScreenshotMaker.filechooser.title" -msgstr "UloΕΎit jako..." - -msgid "ScreenshotMaker.filechooser.pngDescription" -msgstr "PNG" - -msgid "ScreenshotMaker.configure.title" -msgstr "NastavenΓ­ snΓ­mku obrazovky" - -msgid "ScreenshotSettingsPanel.labelWidth.text" -msgstr "Ε Γ­Ε™ka:" - -msgid "ScreenshotSettingsPanel.labelHeight.text" -msgstr "VΓ½Ε‘ka:" - -msgid "ScreenshotSettingsPanel.labelAntiAliasing.text" -msgstr "VyhlazovΓ‘nΓ­ okrajΕ―:" - -msgid "ScreenshotSettingsPanel.autoSaveCheckBox.text" -msgstr "AutomatickΓ© uklΓ‘dΓ‘nΓ­" - -msgid "ScreenshotSettingsPanel.selectDirectoryButton.text" -msgstr "Vybrat adresΓ‘Ε™..." diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/es.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/es.po deleted file mode 100644 index 9be4ff8976..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/es.po +++ /dev/null @@ -1,49 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:56+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "ScreenshotMaker.finishedMessage.message" -msgstr "Captura de pantalla guardada en ''{0}''" - -msgid "ScreenshotMaker.finishedMessage.title" -msgstr "Capturar pantalla" - -msgid "ScreenshotMaker.filechooser.title" -msgstr "Guardar como..." - -msgid "ScreenshotMaker.filechooser.pngDescription" -msgstr "PNG" - -msgid "ScreenshotMaker.configure.title" -msgstr "ParΓ‘metros de captura de pantalla" - -msgid "ScreenshotSettingsPanel.labelWidth.text" -msgstr "Ancho:" - -msgid "ScreenshotSettingsPanel.labelHeight.text" -msgstr "Alto:" - -msgid "ScreenshotSettingsPanel.labelAntiAliasing.text" -msgstr "Antialiasing:" - -msgid "ScreenshotSettingsPanel.autoSaveCheckBox.text" -msgstr "Autoguardado" - -msgid "ScreenshotSettingsPanel.selectDirectoryButton.text" -msgstr "Seleccionar directorio..." diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/fr.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/fr.po deleted file mode 100644 index 4497c2dedd..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/fr.po +++ /dev/null @@ -1,49 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:56+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "ScreenshotMaker.finishedMessage.message" -msgstr "Capture d'Γ©cran enregistrΓ©e dans ''{0}''" - -msgid "ScreenshotMaker.finishedMessage.title" -msgstr "Capturer l'Γ©cran" - -msgid "ScreenshotMaker.filechooser.title" -msgstr "Enregistrer sous..." - -msgid "ScreenshotMaker.filechooser.pngDescription" -msgstr "PNG" - -msgid "ScreenshotMaker.configure.title" -msgstr "ParamΓ¨tres de capture d'Γ©cran" - -msgid "ScreenshotSettingsPanel.labelWidth.text" -msgstr "Largeur :" - -msgid "ScreenshotSettingsPanel.labelHeight.text" -msgstr "Hauteur :" - -msgid "ScreenshotSettingsPanel.labelAntiAliasing.text" -msgstr "AnticrΓ©nelage :" - -msgid "ScreenshotSettingsPanel.autoSaveCheckBox.text" -msgstr "Enregistrement automatique" - -msgid "ScreenshotSettingsPanel.selectDirectoryButton.text" -msgstr "SΓ©lectionnez le dossier..." diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/ja.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/ja.po deleted file mode 100644 index e1af9ef50c..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/ja.po +++ /dev/null @@ -1,49 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-11 03:21+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "ScreenshotMaker.finishedMessage.message" -msgstr "''{0}''にスクγƒͺγƒΌγƒ³γ‚·γƒ§γƒƒγƒˆγ‚’δΏε­˜" - -msgid "ScreenshotMaker.finishedMessage.title" -msgstr "γ‚Ήγ‚―γƒͺγƒΌγƒ³γ‚·γƒ§γƒƒγƒˆγ‚’ζ’γ‚‹" - -msgid "ScreenshotMaker.filechooser.title" -msgstr "εε‰γ‚’δ»˜γ‘γ¦δΏε­˜..." - -msgid "ScreenshotMaker.filechooser.pngDescription" -msgstr "PNG" - -msgid "ScreenshotMaker.configure.title" -msgstr "γ‚Ήγ‚―γƒͺγƒΌγƒ³γ‚·γƒ§γƒƒγƒˆθ¨­εš" - -msgid "ScreenshotSettingsPanel.labelWidth.text" -msgstr "εΉ…:" - -msgid "ScreenshotSettingsPanel.labelHeight.text" -msgstr "ι«˜γ•:" - -msgid "ScreenshotSettingsPanel.labelAntiAliasing.text" -msgstr "をンチエむγƒͺγ‚’γ‚Ή:" - -msgid "ScreenshotSettingsPanel.autoSaveCheckBox.text" -msgstr "θ‡ͺε‹•δΏε­˜" - -msgid "ScreenshotSettingsPanel.selectDirectoryButton.text" -msgstr "γƒ‡γ‚£γƒ¬γ‚―γƒˆγƒͺ選択..." diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/org-gephi-visualization-screenshot.pot b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/org-gephi-visualization-screenshot.pot deleted file mode 100644 index f8c4503a8b..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/org-gephi-visualization-screenshot.pot +++ /dev/null @@ -1,46 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "ScreenshotMaker.finishedMessage.message" -msgstr "Screenshot saved to ''{0}''" - -msgid "ScreenshotMaker.finishedMessage.title" -msgstr "Take screenshot" - -msgid "ScreenshotMaker.filechooser.title" -msgstr "Save As..." - -msgid "ScreenshotMaker.filechooser.pngDescription" -msgstr "PNG" - -msgid "ScreenshotMaker.configure.title" -msgstr "Screenshot settings" - -msgid "ScreenshotSettingsPanel.labelWidth.text" -msgstr "Width:" - -msgid "ScreenshotSettingsPanel.labelHeight.text" -msgstr "Height:" - -msgid "ScreenshotSettingsPanel.labelAntiAliasing.text" -msgstr "Antialiasing:" - -msgid "ScreenshotSettingsPanel.autoSaveCheckBox.text" -msgstr "Autosave" - -msgid "ScreenshotSettingsPanel.selectDirectoryButton.text" -msgstr "Select directory..." diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/pt_BR.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/pt_BR.po deleted file mode 100644 index 48a5fa07fe..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/pt_BR.po +++ /dev/null @@ -1,49 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 15:44+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "ScreenshotMaker.finishedMessage.message" -msgstr "Captura de tela salva para \"{0}\"" - -msgid "ScreenshotMaker.finishedMessage.title" -msgstr "Capturar tela" - -msgid "ScreenshotMaker.filechooser.title" -msgstr "Salvar como..." - -msgid "ScreenshotMaker.filechooser.pngDescription" -msgstr "PNG" - -msgid "ScreenshotMaker.configure.title" -msgstr "ConfiguraΓ§Γ΅es de captura de tela" - -msgid "ScreenshotSettingsPanel.labelWidth.text" -msgstr "Largura:" - -msgid "ScreenshotSettingsPanel.labelHeight.text" -msgstr "Altura:" - -msgid "ScreenshotSettingsPanel.labelAntiAliasing.text" -msgstr "Antialias:" - -msgid "ScreenshotSettingsPanel.autoSaveCheckBox.text" -msgstr "Salvamento automΓ‘tico" - -msgid "ScreenshotSettingsPanel.selectDirectoryButton.text" -msgstr "Selecione um diretΓ³rio..." diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/ru.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/ru.po deleted file mode 100644 index 6913a7db28..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/ru.po +++ /dev/null @@ -1,49 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-23 07:22+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "ScreenshotMaker.finishedMessage.message" -msgstr "Π‘Π½ΠΈΠΌΠΎΠΊ экрана сохранён Π² ''{0}''" - -msgid "ScreenshotMaker.finishedMessage.title" -msgstr "Π‘Π΄Π΅Π»Π°Ρ‚ΡŒ снимок экрана" - -msgid "ScreenshotMaker.filechooser.title" -msgstr "Π‘ΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΊΠ°ΠΊ..." - -msgid "ScreenshotMaker.filechooser.pngDescription" -msgstr "PNG" - -msgid "ScreenshotMaker.configure.title" -msgstr "Настройки сохранСния изобраТСния" - -msgid "ScreenshotSettingsPanel.labelWidth.text" -msgstr "Π¨ΠΈΡ€ΠΈΠ½Π°:" - -msgid "ScreenshotSettingsPanel.labelHeight.text" -msgstr "Высота:" - -msgid "ScreenshotSettingsPanel.labelAntiAliasing.text" -msgstr "Антиалиасинг:" - -msgid "ScreenshotSettingsPanel.autoSaveCheckBox.text" -msgstr "АвтосохранСниС" - -msgid "ScreenshotSettingsPanel.selectDirectoryButton.text" -msgstr "Π’Ρ‹Π±Ρ€Π°Ρ‚ΡŒ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΡŽ..." diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/zh_CN.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/zh_CN.po deleted file mode 100644 index e11793074e..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/screenshot/zh_CN.po +++ /dev/null @@ -1,48 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:04+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "ScreenshotMaker.finishedMessage.message" -msgstr "ζˆͺε±ε­˜θ‡³''{0}''" - -msgid "ScreenshotMaker.finishedMessage.title" -msgstr "ζˆͺ屏" - -msgid "ScreenshotMaker.filechooser.title" -msgstr "另存为..." - -msgid "ScreenshotMaker.filechooser.pngDescription" -msgstr "PNG" - -msgid "ScreenshotMaker.configure.title" -msgstr "ζˆͺ屏θΎεš" - -msgid "ScreenshotSettingsPanel.labelWidth.text" -msgstr "ε½" - -msgid "ScreenshotSettingsPanel.labelHeight.text" -msgstr "高" - -msgid "ScreenshotSettingsPanel.labelAntiAliasing.text" -msgstr "ζŠ—ι”―ι½ΏοΌš" - -msgid "ScreenshotSettingsPanel.autoSaveCheckBox.text" -msgstr "θ‡ͺ动保存" - -msgid "ScreenshotSettingsPanel.selectDirectoryButton.text" -msgstr "选择η›ε½•..." diff --git a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/zh_CN.po b/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/zh_CN.po deleted file mode 100644 index af76d7e501..0000000000 --- a/modules/VisualizationImpl/src/main/resources/org/gephi/visualization/zh_CN.po +++ /dev/null @@ -1,27 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:04+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "Actions/Window/org-gephi-visualization-component-GraphAction.instance" -msgstr "ε›Ύ" - -msgid "OpenIDE-Module-Long-Description" -msgstr "ε―θ§†εŒ–ζ¨‘ε—οΌŒζœͺζ¨‘ε—εŒ–" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ε―θ§†εŒ–ζ¨‘ε—οΌŒζœͺζ¨‘ε—εŒ–" diff --git a/modules/VisualizationImpl/src/test/java/org/gephi/visualization/PersistenceProviderTest.java b/modules/VisualizationImpl/src/test/java/org/gephi/visualization/PersistenceProviderTest.java new file mode 100644 index 0000000000..be8d8f9073 --- /dev/null +++ b/modules/VisualizationImpl/src/test/java/org/gephi/visualization/PersistenceProviderTest.java @@ -0,0 +1,293 @@ +package org.gephi.visualization; + +import java.awt.Color; +import java.awt.Font; +import java.io.StringReader; +import java.io.StringWriter; +import javax.xml.stream.XMLStreamReader; +import javax.xml.stream.XMLStreamWriter; +import org.gephi.graph.GraphGenerator; +import org.gephi.project.api.Workspace; +import org.gephi.project.io.utils.GephiFormat; +import org.gephi.visualization.api.EdgeColorMode; +import org.gephi.visualization.api.LabelColorMode; +import org.gephi.visualization.api.LabelSizeMode; +import org.junit.Assert; +import org.junit.Test; +import org.mockito.Spy; + +public class PersistenceProviderTest { + + private final VizController vizController = new VizController(); + private final VizModelPersistenceProvider provider = new VizModelPersistenceProvider(); + + @Test + public void testEmpty() throws Exception { + GraphGenerator generator = GraphGenerator.build().generateTinyGraph(); + + VizModel model = vizController.getModel(generator.getWorkspace()); + roundTrip(provider, model.getWorkspace()); + } + + @Test + public void testBackgroundColor() throws Exception { + VizModel model = vizController.getModel(GraphGenerator.build().generateTinyGraph().getWorkspace()); + model.setBackgroundColor(Color.CYAN); + + VizModel read = roundTrip(provider, model.getWorkspace()); + Assert.assertEquals(Color.CYAN, read.getBackgroundColor()); + } + + @Test + public void testZoomAndPan() throws Exception { + VizModel model = vizController.getModel(GraphGenerator.build().generateTinyGraph().getWorkspace()); + model.setZoom(1.5f); + model.setPan(new org.joml.Vector2f(123.4f, -56.7f)); + + VizModel read = roundTrip(provider, model.getWorkspace()); + Assert.assertEquals(1.5f, read.getZoom(), 0.0001f); + Assert.assertEquals(123.4f, read.getPan().x(), 0.0001f); + Assert.assertEquals(-56.7f, read.getPan().y(), 0.0001f); + } + + @Test + public void testEdgeSettings() throws Exception { + VizModel model = vizController.getModel(GraphGenerator.build().generateTinyGraph().getWorkspace()); + model.setShowEdges(false); + model.setEdgeScale(3.5f); + model.setNodeScale(2.0f); + model.setEdgeColorMode(EdgeColorMode.MIXED); + model.setUseEdgeWeight(false); + model.setEdgeRescaleWeightEnabled(false); + + VizModel read = roundTrip(provider, model.getWorkspace()); + Assert.assertFalse(read.isShowEdges()); + Assert.assertEquals(3.5f, read.getEdgeScale(), 0.0001f); + Assert.assertEquals(2.0f, read.getNodeScale(), 0.0001f); + Assert.assertEquals(EdgeColorMode.MIXED, read.getEdgeColorMode()); + Assert.assertFalse(read.isUseEdgeWeight()); + Assert.assertFalse(read.isRescaleEdgeWeight()); + } + + @Test + public void testSelectionSettings() throws Exception { + VizModel model = vizController.getModel(GraphGenerator.build().generateTinyGraph().getWorkspace()); + model.setAutoSelectNeighbors(false); + model.setHideNonSelectedEdges(true); + model.setLightenNonSelectedAuto(false); + model.setLightenNonSelectedFactor(0.5f); + model.setEdgeSelectionColor(true); + model.setEdgeInSelectionColor(Color.RED); + model.setEdgeOutSelectionColor(Color.GREEN); + model.setEdgeBothSelectionColor(Color.BLUE); + + VizModel read = roundTrip(provider, model.getWorkspace()); + Assert.assertFalse(read.isAutoSelectNeighbors()); + Assert.assertTrue(read.isHideNonSelectedEdges()); + Assert.assertFalse(read.isLightenNonSelectedAuto()); + Assert.assertEquals(0.5f, read.getLightenNonSelectedFactor(), 0.0001f); + Assert.assertTrue(read.isEdgeSelectionColor()); + Assert.assertEquals(Color.RED, read.getEdgeInSelectionColor()); + Assert.assertEquals(Color.GREEN, read.getEdgeOutSelectionColor()); + Assert.assertEquals(Color.BLUE, read.getEdgeBothSelectionColor()); + } + + @Test + public void testNodeLabelSettings() throws Exception { + VizModel model = vizController.getModel(GraphGenerator.build().generateTinyGraph().getWorkspace()); + model.setShowNodeLabels(true); + model.setNodeLabelFont(new Font("SansSerif", Font.ITALIC, 16)); + model.setNodeLabelScale(0.8f); + model.setNodeLabelColorMode(LabelColorMode.OBJECT); + model.setNodeLabelSizeMode(LabelSizeMode.SCREEN); + model.setHideNonSelectedNodeLabels(true); + model.setNodeLabelFitToNodeSize(true); + model.setAvoidNodeLabelOverlap(false); + + VizModel read = roundTrip(provider, model.getWorkspace()); + Assert.assertTrue(read.isShowNodeLabels()); + Assert.assertEquals(0.8f, read.getNodeLabelScale(), 0.0001f); + Assert.assertEquals(LabelColorMode.OBJECT, read.getNodeLabelColorMode()); + Assert.assertEquals(LabelSizeMode.SCREEN, read.getNodeLabelSizeMode()); + Assert.assertTrue(read.isHideNonSelectedNodeLabels()); + Assert.assertTrue(read.isNodeLabelFitToNodeSize()); + Assert.assertFalse(read.isAvoidNodeLabelOverlap()); + } + + @Test + public void testEdgeLabelSettings() throws Exception { + VizModel model = vizController.getModel(GraphGenerator.build().generateTinyGraph().getWorkspace()); + model.setShowEdgeLabels(true); + model.setEdgeLabelFont(new Font("Monospaced", Font.BOLD, 14)); + model.setEdgeLabelScale(0.6f); + model.setEdgeLabelColorMode(LabelColorMode.OBJECT); + model.setEdgeLabelSizeMode(LabelSizeMode.SCREEN); + model.setHideNonSelectedEdgeLabels(true); + + VizModel read = roundTrip(provider, model.getWorkspace()); + Assert.assertTrue(read.isShowEdgeLabels()); + Assert.assertEquals(0.6f, read.getEdgeLabelScale(), 0.0001f); + Assert.assertEquals(LabelColorMode.OBJECT, read.getEdgeLabelColorMode()); + Assert.assertEquals(LabelSizeMode.SCREEN, read.getEdgeLabelSizeMode()); + Assert.assertTrue(read.isHideNonSelectedEdgeLabels()); + } + + @Test + public void testScreenshotModel() throws Exception { + VizModel model = vizController.getModel(GraphGenerator.build().generateTinyGraph().getWorkspace()); + model.getScreenshotModel().setScaleFactor(4); + model.getScreenshotModel().setTransparentBackground(true); + model.getScreenshotModel().setAutoSave(true); + + VizModel read = roundTrip(provider, model.getWorkspace()); + Assert.assertEquals(4, read.getScreenshotModel().getScaleFactor()); + Assert.assertTrue(read.getScreenshotModel().isTransparentBackground()); + Assert.assertTrue(read.getScreenshotModel().isAutoSave()); + } + + @Test + public void testSelectionModel() throws Exception { + VizModel model = vizController.getModel(GraphGenerator.build().generateTinyGraph().getWorkspace()); + model.getSelectionModel().setMouseSelectionDiameter(5); + model.getSelectionModel().setMouseSelectionZoomProportional(true); + model.getSelectionModel().setRectangleSelection(true); + model.getSelectionModel().setSelectionEnable(true); + + VizModel read = roundTrip(provider, model.getWorkspace()); + Assert.assertEquals(5, read.getMouseSelectionDiameter()); + Assert.assertTrue(read.isMouseSelectionZoomProportional()); + Assert.assertTrue(read.isRectangleSelection()); + Assert.assertTrue(read.isSelectionEnabled()); + } + + @Test + public void testSelectionModelNodeSelection() throws Exception { + VizModel model = vizController.getModel(GraphGenerator.build().generateTinyGraph().getWorkspace()); + model.getSelectionModel().setSelectionEnable(true); + model.getSelectionModel().setNodeSelection(true); + model.getSelectionModel().setSingleNodeSelection(true); + + VizModel read = roundTrip(provider, model.getWorkspace()); + Assert.assertTrue(read.getSelectionModel().isNodeSelection()); + Assert.assertTrue(read.getSelectionModel().isSingleNodeSelection()); + } + + @Test + public void testLegacyScreenshotMakerBackwardCompatibility() throws Exception { + // Simulate a from Gephi 0.10 with the old self-closing element. + // width/height/antialiasing have no equivalent in the new model and must be gracefully ignored. + String legacyXml = "" + + "" + + "" + + ""; + + VizModel model = vizController.getModel(GraphGenerator.build().generateTinyGraph().getWorkspace()); + StringReader stringReader = new StringReader(legacyXml); + XMLStreamReader xmlReader = GephiFormat.newXMLReader(stringReader); + new VizModelPersistenceProvider().readXML(xmlReader, model.getWorkspace()); + xmlReader.close(); + + Assert.assertTrue(model.getScreenshotModel().isTransparentBackground()); + Assert.assertTrue(model.getScreenshotModel().isAutoSave()); + } + + @Test + public void testLegacyTextModelBackwardCompatibility() throws Exception { + // Simulate a block from Gephi 0.10 containing the old element. + String legacyXml = "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "0.75" + + "0.4" + + "" + + "" + + "" + + "" + + "" + + ""; + + VizModel model = vizController.getModel(GraphGenerator.build().generateTinyGraph().getWorkspace()); + StringReader stringReader = new StringReader(legacyXml); + XMLStreamReader xmlReader = GephiFormat.newXMLReader(stringReader); + new VizModelPersistenceProvider().readXML(xmlReader, model.getWorkspace()); + xmlReader.close(); + + Assert.assertTrue(model.isShowNodeLabels()); + Assert.assertTrue(model.isShowEdgeLabels()); + Assert.assertTrue(model.isHideNonSelectedNodeLabels()); + Assert.assertTrue(model.isHideNonSelectedEdgeLabels()); + Assert.assertEquals("SansSerif", model.getNodeLabelFont().getFamily()); + Assert.assertEquals(24, model.getNodeLabelFont().getSize()); + Assert.assertEquals(Font.BOLD, model.getNodeLabelFont().getStyle()); + Assert.assertEquals("Monospaced", model.getEdgeLabelFont().getFamily()); + Assert.assertEquals(18, model.getEdgeLabelFont().getSize()); + Assert.assertEquals(0.75f, model.getNodeLabelScale(), 0.0001f); + Assert.assertEquals(0.4f, model.getEdgeLabelScale(), 0.0001f); + Assert.assertEquals(LabelColorMode.OBJECT, model.getNodeLabelColorMode()); + Assert.assertEquals(LabelColorMode.OBJECT, model.getEdgeLabelColorMode()); + Assert.assertEquals(LabelSizeMode.SCREEN, model.getNodeLabelSizeMode()); + Assert.assertEquals(LabelSizeMode.SCREEN, model.getEdgeLabelSizeMode()); + Assert.assertEquals(1, model.getNodeLabelColumns().length); + Assert.assertEquals("label", model.getNodeLabelColumns()[0].getId()); + } + + @Test + public void testDefaultLabelColumnsRoundTrip() throws Exception { + VizModel model = vizController.getModel(GraphGenerator.build().generateTinyGraph().getWorkspace()); + // Default label column ("label") must survive the round-trip. + Assert.assertEquals(1, model.getNodeLabelColumns().length); + Assert.assertEquals("label", model.getNodeLabelColumns()[0].getId()); + + VizModel read = roundTrip(provider, model.getWorkspace()); + Assert.assertEquals(1, read.getNodeLabelColumns().length); + Assert.assertEquals("label", read.getNodeLabelColumns()[0].getId()); + } + + // Utils + /** + * Performs a full persistence round-trip: serializes the source workspace to XML, reads it + * into a freshly created destination workspace, serializes the destination again, and asserts + * both XML representations are identical (idempotency check). + * + *

              The destination workspace is pre-populated with its own {@link VizModel} so that the + * provider's read path can resolve the model without depending on the global Lookup. + */ + public VizModel roundTrip(VizModelPersistenceProvider provider, Workspace sourceWorkspace) + throws Exception { + String xmlString = toXMLString(provider, sourceWorkspace); + + VizModel destVizModel = vizController.getModel(GraphGenerator.build().getWorkspace()); + Workspace destWorkspace = destVizModel.getWorkspace(); + + StringReader stringReader = new StringReader(xmlString); + XMLStreamReader xmlReader = GephiFormat.newXMLReader(stringReader); + provider.readXML(xmlReader, destWorkspace); + xmlReader.close(); + stringReader.close(); + + String xmlStringAgain = toXMLString(provider, destWorkspace); + Assert.assertEquals(xmlString, xmlStringAgain); + + return vizController.getModel(destWorkspace); + } + + public static String toXMLString(VizModelPersistenceProvider provider, Workspace workspace) + throws Exception { + StringWriter stringWriter = new StringWriter(); + XMLStreamWriter writer = GephiFormat.newXMLWriter(stringWriter); + writer.writeStartDocument("UTF-8", "1.0"); + writer.writeStartElement(provider.getIdentifier()); + provider.writeXML(writer, workspace); + writer.writeEndElement(); + writer.writeEndDocument(); + writer.close(); + stringWriter.close(); + return stringWriter.toString(); + } +} diff --git a/modules/VisualizationImpl/src/test/java/org/gephi/visualization/VisualizationControllerTest.java b/modules/VisualizationImpl/src/test/java/org/gephi/visualization/VisualizationControllerTest.java new file mode 100644 index 0000000000..9e8b8d9354 --- /dev/null +++ b/modules/VisualizationImpl/src/test/java/org/gephi/visualization/VisualizationControllerTest.java @@ -0,0 +1,23 @@ +package org.gephi.visualization; + +import org.gephi.graph.GraphGenerator; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Spy; +import org.mockito.junit.MockitoJUnitRunner; + +@RunWith(MockitoJUnitRunner.class) +public class VisualizationControllerTest { + + @Spy + private VizController vizController = new VizController(); + + @Test + public void testController() { + GraphGenerator generator = GraphGenerator.build().generateTinyGraph(); + + VizModel vizModel = vizController.getModel(generator.getWorkspace()); + Assert.assertSame(vizModel.getWorkspace(), generator.getWorkspace()); + } +} diff --git a/modules/VizEngineDemo/pom.xml b/modules/VizEngineDemo/pom.xml new file mode 100644 index 0000000000..7545a591d8 --- /dev/null +++ b/modules/VizEngineDemo/pom.xml @@ -0,0 +1,202 @@ + + + 4.0.0 + + gephi-parent + org.gephi + 0.11.3-SNAPSHOT + ../.. + + + org.gephi + viz-engine-demo + 0.11.3-SNAPSHOT + jar + + VizEngineDemo + Standalone demo opening a window with an instance of the Gephi VizEngine. + + + 2.6.0 + org.gephi.viz.engine.demo.VizEngineDemo + + + + + + ${project.groupId} + visualization-engine + + + + + ${project.groupId} + project-api + + + ${project.groupId} + io-importer-api + + + ${project.groupId} + io-importer-plugin + + + + + ${project.groupId} + layout-api + + + ${project.groupId} + layout-plugin + + + org.netbeans.api + org-openide-util-lookup + + + org.netbeans.api + org-openide-filesystems + + + org.netbeans.modules + org-netbeans-modules-masterfs + + + + + org.jogamp.jogl + jogl-all + ${jogl.version} + + + org.jogamp.jogl + jogl-all + natives-linux-amd64 + ${jogl.version} + runtime + + + org.jogamp.jogl + jogl-all + natives-linux-aarch64 + ${jogl.version} + runtime + + + org.jogamp.jogl + jogl-all + natives-macosx-universal + ${jogl.version} + runtime + + + org.jogamp.jogl + jogl-all + natives-windows-amd64 + ${jogl.version} + runtime + + + org.jogamp.gluegen + gluegen-rt + ${jogl.version} + + + org.jogamp.gluegen + gluegen-rt + natives-linux-amd64 + ${jogl.version} + runtime + + + org.jogamp.gluegen + gluegen-rt + natives-linux-aarch64 + ${jogl.version} + runtime + + + org.jogamp.gluegen + gluegen-rt + natives-macosx-universal + ${jogl.version} + runtime + + + org.jogamp.gluegen + gluegen-rt + natives-windows-amd64 + ${jogl.version} + runtime + + + + + + + + org.codehaus.mojo + exec-maven-plugin + 3.5.0 + + ${exec.mainClass} + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${exec.mainClass} + + + + + + + + maven-resources-plugin + + + generate-modules-xml + none + + + + + + + org.apache.netbeans.utilities + nbm-maven-plugin + false + + + default-cluster + none + + + default-manifest + none + + + default-nbm + none + + + + + + diff --git a/modules/VizEngineDemo/src/main/java/org/gephi/viz/engine/demo/RenderingMetricsHud.java b/modules/VizEngineDemo/src/main/java/org/gephi/viz/engine/demo/RenderingMetricsHud.java new file mode 100644 index 0000000000..9d7f822c0a --- /dev/null +++ b/modules/VizEngineDemo/src/main/java/org/gephi/viz/engine/demo/RenderingMetricsHud.java @@ -0,0 +1,403 @@ +package org.gephi.viz.engine.demo; + +import java.awt.Color; +import java.awt.Dimension; +import java.awt.Font; +import java.awt.FontMetrics; +import java.awt.Graphics; +import java.awt.Graphics2D; +import java.awt.RenderingHints; +import java.awt.event.ComponentAdapter; +import java.awt.event.ComponentEvent; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import javax.swing.JFrame; +import javax.swing.JPanel; +import javax.swing.JWindow; +import javax.swing.Timer; + +/** + * Floating HUD shown at the top-right of an owner {@link JFrame} that displays + * {@code p50} / {@code p99} of multiple rendering metric series, computed over + * the last {@value #WINDOW_SECONDS_HUMAN} of samples. The first registered + * series is also drawn as a sparkline at the bottom of the HUD. + * + *

              Series are dynamically registered on first {@link #recordSample(String, long)} + * call so the demo can simply forward whatever phases the engine reports. + * Initial series can also be registered via {@link #ensureSeries(String...)} + * to fix their display order.

              + * + *

              Reads/writes of the underlying ring buffers are synchronized per-series, + * so {@link #recordSample(String, long)} is safe to call from the render thread + * while the EDT repaints.

              + */ +public final class RenderingMetricsHud { + + /** Length of the sliding window over which p50/p99 are computed. */ + private static final long WINDOW_NANOS = 10L * 1_000_000_000L; + private static final String WINDOW_SECONDS_HUMAN = "10s"; + + /** Per-series ring buffer capacity (β‰ˆ400 FPS Γ— 10 s, generous). */ + private static final int CAPACITY = 4_096; + + private static final int HUD_WIDTH = 280; + private static final int HUD_HEIGHT = 220; + private static final int HUD_MARGIN = 10; + private static final int REPAINT_INTERVAL_MS = 50; + + /** Reference frame rate. Sparkline anchors this at the chart's vertical middle. */ + private static final double TARGET_FPS = 60.0; + private static final double TARGET_FRAME_MS = 1000.0 / TARGET_FPS; + /** Top-of-chart frame rate. Picked so 60 FPS lands at the middle of the chart. */ + private static final double SPARKLINE_MAX_FPS = TARGET_FPS * 2.0; + + /** + * Series whose samples drive the sparkline at the bottom. Set on first + * {@link #ensureSeries(String...)} call (the first name passed) or, if + * none was registered up front, on the first {@link #recordSample}. + */ + private volatile String sparklineSeries; + + /** Insertion-ordered map; iterated for layout, mutated under its own lock. */ + private final Map seriesByName = new LinkedHashMap<>(); + private final Object seriesMapLock = new Object(); + + private final JFrame anchorFrame; + private final JWindow window; + private final ChartPanel chartPanel; + private final Timer repaintTimer; + private final ComponentAdapter anchorListener; + + public RenderingMetricsHud(JFrame anchorFrame) { + this.anchorFrame = anchorFrame; + + this.chartPanel = new ChartPanel(); + this.window = new JWindow(anchorFrame); + this.window.setContentPane(chartPanel); + this.window.setSize(HUD_WIDTH, HUD_HEIGHT); + this.window.setFocusableWindowState(false); + this.window.setAutoRequestFocus(false); + this.window.setAlwaysOnTop(true); + + this.anchorListener = new ComponentAdapter() { + @Override + public void componentMoved(ComponentEvent e) { + repositionToTopRight(); + } + + @Override + public void componentResized(ComponentEvent e) { + repositionToTopRight(); + } + }; + anchorFrame.addComponentListener(anchorListener); + + this.repaintTimer = new Timer(REPAINT_INTERVAL_MS, e -> chartPanel.repaint()); + this.repaintTimer.setCoalesce(true); + } + + /** + * Registers (or no-ops on already-known) series in the order given. + * Useful to lock down a stable display order. The first name becomes + * the sparkline series. + */ + public void ensureSeries(String... names) { + synchronized (seriesMapLock) { + for (String name : names) { + seriesByName.computeIfAbsent(name, n -> new Series()); + if (sparklineSeries == null) { + sparklineSeries = name; + } + } + } + } + + public void start() { + repositionToTopRight(); + window.setVisible(true); + repaintTimer.start(); + } + + public void dispose() { + repaintTimer.stop(); + anchorFrame.removeComponentListener(anchorListener); + window.dispose(); + } + + /** + * Records a sample for the given series (creating it on first sight). + * Safe to call from the rendering thread. + */ + public void recordSample(String seriesName, long durationNs) { + Series s; + synchronized (seriesMapLock) { + s = seriesByName.get(seriesName); + if (s == null) { + s = new Series(); + seriesByName.put(seriesName, s); + if (sparklineSeries == null) { + sparklineSeries = seriesName; + } + } + } + s.record(durationNs); + } + + private void repositionToTopRight() { + final int x = anchorFrame.getX() + anchorFrame.getWidth() + - HUD_WIDTH - HUD_MARGIN - anchorFrame.getInsets().right; + final int y = anchorFrame.getY() + anchorFrame.getInsets().top + HUD_MARGIN; + window.setLocation(x, y); + } + + /** + * Returns the value at the given percentile {@code p} (in {@code [0, 1]}) + * of an already-sorted-ascending array, expressed in milliseconds. + * Uses nearest-rank ordering. + */ + private static double percentileMs(long[] sortedNs, double p) { + if (sortedNs.length == 0) { + return 0.0; + } + final int rank = (int) Math.ceil(p * sortedNs.length); + final int idx = Math.max(0, Math.min(sortedNs.length - 1, rank - 1)); + return sortedNs[idx] / 1_000_000.0; + } + + /** + * One named time series of frame samples, with timestamps and durations + * stored in parallel ring buffers. Pruning happens on insert. + */ + private static final class Series { + + private final long[] timestampsNs = new long[CAPACITY]; + private final long[] durationsNs = new long[CAPACITY]; + private int head = 0; + private int tail = 0; + private int size = 0; + + synchronized void record(long durationNs) { + final long now = System.nanoTime(); + if (size == CAPACITY) { + head = (head + 1) % CAPACITY; + size--; + } + timestampsNs[tail] = now; + durationsNs[tail] = durationNs; + tail = (tail + 1) % CAPACITY; + size++; + final long cutoff = now - WINDOW_NANOS; + while (size > 0 && timestampsNs[head] < cutoff) { + head = (head + 1) % CAPACITY; + size--; + } + } + + synchronized long[] snapshotDurations() { + final long[] out = new long[size]; + for (int i = 0; i < size; i++) { + out[i] = durationsNs[(head + i) % CAPACITY]; + } + return out; + } + } + + /** + * Lightweight value type used during paint to avoid holding the series + * lock while rendering text. + */ + private record SeriesSnapshot(String name, double p50Ms, double p99Ms, long[] durations) { + } + + private List collectSnapshots() { + final List> entries; + synchronized (seriesMapLock) { + entries = new ArrayList<>(seriesByName.entrySet()); + } + final List snaps = new ArrayList<>(entries.size()); + for (Map.Entry e : entries) { + final long[] samples = e.getValue().snapshotDurations(); + if (samples.length == 0) { + snaps.add(new SeriesSnapshot(e.getKey(), 0.0, 0.0, samples)); + continue; + } + final long[] sorted = samples.clone(); + Arrays.sort(sorted); + snaps.add(new SeriesSnapshot( + e.getKey(), + percentileMs(sorted, 0.50), + percentileMs(sorted, 0.99), + samples)); + } + return snaps; + } + + private final class ChartPanel extends JPanel { + + private static final long serialVersionUID = 1L; + + ChartPanel() { + setOpaque(true); + setBackground(new Color(0, 0, 0, 220)); + setPreferredSize(new Dimension(HUD_WIDTH, HUD_HEIGHT)); + } + + @Override + protected void paintComponent(Graphics g) { + super.paintComponent(g); + + final Graphics2D g2 = (Graphics2D) g.create(); + try { + g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, + RenderingHints.VALUE_ANTIALIAS_ON); + g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, + RenderingHints.VALUE_TEXT_ANTIALIAS_ON); + + final int w = getWidth(); + final int h = getHeight(); + + g2.setColor(new Color(255, 255, 255, 60)); + g2.drawRoundRect(0, 0, w - 1, h - 1, 8, 8); + + final List snaps = collectSnapshots(); + if (snaps.isEmpty()) { + g2.setFont(getFont().deriveFont(Font.BOLD, 11f)); + g2.setColor(Color.LIGHT_GRAY); + g2.drawString("Collecting frame samples...", 8, h / 2 + 4); + return; + } + + drawTable(g2, snaps, w); + + final SeriesSnapshot sparkline = findSeriesSnapshot(snaps, sparklineSeries); + if (sparkline != null && sparkline.durations().length > 1) { + drawSparklineSection(g2, sparkline, w, h); + } + } finally { + g2.dispose(); + } + } + + private void drawTable(Graphics2D g2, List snaps, int w) { + final Font headerFont = getFont().deriveFont(Font.BOLD, 11f); + final Font rowFont = getFont().deriveFont(Font.PLAIN, 11f); + + g2.setFont(headerFont); + g2.setColor(new Color(220, 220, 220)); + final int rightCol = w - 8; + g2.drawString("p50 / p99 (ms, " + WINDOW_SECONDS_HUMAN + ")", 8, 14); + + g2.setFont(rowFont); + final FontMetrics fm = g2.getFontMetrics(); + int y = 30; + for (SeriesSnapshot s : snaps) { + final boolean perRenderer = s.name().contains(":"); + g2.setColor(perRenderer ? new Color(180, 200, 230) : Color.WHITE); + final String displayName = perRenderer ? " " + s.name().substring(s.name().indexOf(':') + 1) + : s.name(); + g2.drawString(displayName, 8, y); + + final String values = String.format("%5.2f / %5.2f", s.p50Ms(), s.p99Ms()); + final int valuesWidth = fm.stringWidth(values); + g2.setColor(s.p99Ms() > TARGET_FRAME_MS * 1.5 + ? new Color(255, 170, 80) : new Color(180, 220, 255)); + g2.drawString(values, rightCol - valuesWidth, y); + y += 13; + if (y > getHeight() - 60) { + break; + } + } + } + + private SeriesSnapshot findSeriesSnapshot(List snaps, String name) { + if (name == null) { + return null; + } + for (SeriesSnapshot s : snaps) { + if (name.equals(s.name())) { + return s; + } + } + return null; + } + + private void drawSparklineSection(Graphics2D g2, SeriesSnapshot s, int w, int h) { + final int chartX = 8; + final int chartW = w - 16; + final int chartH = 44; + final int chartY = h - chartH - 8; + + g2.setColor(new Color(255, 255, 255, 40)); + g2.drawLine(chartX, chartY - 4, chartX + chartW, chartY - 4); + + g2.setFont(getFont().deriveFont(Font.PLAIN, 9f)); + g2.setColor(new Color(255, 255, 255, 160)); + g2.drawString("FPS sparkline", chartX, chartY - 6); + + // Linear FPS scale with 0 at the bottom and SPARKLINE_MAX_FPS at the top, + // so 60 FPS lands at the chart's vertical middle: above when the engine + // is faster than 60 FPS, below when it stutters. + final int y60 = fpsToY(TARGET_FPS, chartY, chartH); + g2.setColor(new Color(0, 200, 120, 120)); + g2.drawLine(chartX, y60, chartX + chartW, y60); + g2.drawString("60 FPS", chartX + chartW - 36, y60 - 2); + + drawFpsSparkline(g2, s.durations(), chartX, chartY, chartW, chartH); + } + + /** + * Draws the sparkline as an FPS curve. Each chart pixel is min-pooled + * over the samples that fall into it (i.e. the worst FPS in the bin), + * so frame-rate dips stay visible at any window length. + */ + private void drawFpsSparkline(Graphics2D g2, long[] samples, + int chartX, int chartY, int chartW, int chartH) { + if (chartW <= 0 || samples.length == 0) { + return; + } + final int bins = chartW; + final double[] binMinFps = new double[bins]; + Arrays.fill(binMinFps, Double.NaN); + + for (int i = 0; i < samples.length; i++) { + int bin = (int) ((long) i * (bins - 1) / Math.max(1, samples.length - 1)); + if (bin < 0) { + bin = 0; + } else if (bin >= bins) { + bin = bins - 1; + } + final double ms = samples[i] / 1_000_000.0; + final double fps = ms > 0 ? 1000.0 / ms : SPARKLINE_MAX_FPS; + if (Double.isNaN(binMinFps[bin]) || fps < binMinFps[bin]) { + binMinFps[bin] = fps; + } + } + + g2.setColor(new Color(80, 180, 255, 230)); + int prevX = -1; + int prevY = -1; + for (int b = 0; b < bins; b++) { + if (Double.isNaN(binMinFps[b])) { + continue; + } + final int x = chartX + b; + final int y = fpsToY(binMinFps[b], chartY, chartH); + if (prevX >= 0) { + g2.drawLine(prevX, prevY, x, y); + } + prevX = x; + prevY = y; + } + } + + /** Maps an FPS value to a Y screen coordinate inside the chart band. */ + private int fpsToY(double fps, int chartY, int chartH) { + final double clamped = Math.max(0.0, Math.min(fps, SPARKLINE_MAX_FPS)); + return chartY + chartH + - (int) Math.round(clamped / SPARKLINE_MAX_FPS * chartH); + } + } +} diff --git a/modules/VizEngineDemo/src/main/java/org/gephi/viz/engine/demo/VizEngineDemo.java b/modules/VizEngineDemo/src/main/java/org/gephi/viz/engine/demo/VizEngineDemo.java new file mode 100644 index 0000000000..ec0f3ab6df --- /dev/null +++ b/modules/VizEngineDemo/src/main/java/org/gephi/viz/engine/demo/VizEngineDemo.java @@ -0,0 +1,489 @@ +package org.gephi.viz.engine.demo; + +import com.jogamp.newt.Display; +import com.jogamp.newt.NewtFactory; +import com.jogamp.newt.Screen; +import com.jogamp.newt.awt.NewtCanvasAWT; +import com.jogamp.newt.event.KeyEvent; +import com.jogamp.newt.event.KeyListener; +import com.jogamp.newt.event.NEWTEvent; +import com.jogamp.newt.opengl.GLWindow; +import com.jogamp.opengl.GLAutoDrawable; +import com.jogamp.opengl.GLCapabilities; +import com.jogamp.opengl.GLEventListener; +import org.gephi.graph.api.Column; +import org.gephi.graph.api.GraphController; +import org.gephi.graph.api.GraphModel; +import org.gephi.io.importer.api.Container; +import org.gephi.io.importer.api.ImportController; +import org.gephi.layout.plugin.forceAtlas2.ForceAtlas2; +import org.gephi.layout.plugin.forceAtlas2.ForceAtlas2Builder; +import org.gephi.project.api.ProjectController; +import org.gephi.viz.engine.FrameTimings; +import org.gephi.viz.engine.VizEngine; +import org.gephi.viz.engine.VizEngineFactory; +import org.gephi.viz.engine.jogl.JOGLRenderingTarget; +import org.gephi.viz.engine.jogl.VizEngineJOGLConfigurator; +import org.gephi.viz.engine.status.GraphRenderingOptions; +import org.openide.util.Lookup; + +import javax.swing.*; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardCopyOption; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicReference; + +/** + * Standalone demo that opens a Swing/NEWT window containing a single instance + * of the Gephi {@link VizEngine}, configured with the JOGL rendering backend. + * + *

              Bundled GEXF samples are cycled with {@code ARROW RIGHT}. The first sample + * (Les Miserables) is loaded on startup. A custom graph file path may also be + * passed as the first command-line argument, in which case it is added at the + * front of the cycle list. {@code SPACE} toggles Force Atlas 2 on the current + * graph; {@code ESC} (or closing the window) exits.

              + * + *

              Run with: {@code mvn -pl modules/VizEngineDemo -am compile exec:java}.

              + */ +public final class VizEngineDemo { + + private static final int WINDOW_WIDTH = 1024; + private static final int WINDOW_HEIGHT = 768; + private static final String WINDOW_TITLE = "VizEngine Demo"; + + /** + * Bundled samples shipped on the classpath, cycled in this order. + */ + private static final List BUNDLED_SAMPLES = List.of( + new Sample("Les Miserables", + "/org/gephi/viz/engine/demo/samples/Les Miserables.gexf"), + new Sample("Comic Hero Network", + "/org/gephi/viz/engine/demo/samples/comic-hero-network.gexf") + ); + + /** + * Worker thread that runs Force Atlas 2 iterations off the EDT/render thread. + */ + private static final ExecutorService LAYOUT_EXECUTOR = + Executors.newSingleThreadExecutor(daemon("VizEngineDemo-ForceAtlas2")); + + /** + * Worker thread used for swapping graph samples. + */ + private static final ExecutorService SAMPLE_LOADER = + Executors.newSingleThreadExecutor(daemon("VizEngineDemo-SampleLoader")); + + /** + * Toggled by the space bar; read by the layout worker each iteration. + */ + private static volatile boolean layoutEnabled = false; + + /** + * True while a sample swap is in flight, to debounce rapid arrow presses. + */ + private static final AtomicBoolean SAMPLE_SWAPPING = new AtomicBoolean(false); + + private VizEngineDemo() { + } + + public static void main(String[] args) { + final String customPath = args.length > 0 ? args[0] : null; + SwingUtilities.invokeLater(() -> start(customPath)); + } + + private static void start(final String customGraphPath) { + final List samples = buildSampleList(customGraphPath); + final AtomicReference currentIndex = new AtomicReference<>(0); + + final GraphModel initialModel = loadSample(samples.get(0)); + final AtomicReference currentGraphModel = new AtomicReference<>(initialModel); + + final GLCapabilities caps = VizEngineJOGLConfigurator.createCapabilities(4); + + final Display display = NewtFactory.createDisplay(null); + final Screen screen = NewtFactory.createScreen(display, 0); + + final GLWindow glWindow = GLWindow.create(screen, caps); + glWindow.setSize(WINDOW_WIDTH, WINDOW_HEIGHT); + + final JOGLRenderingTarget renderingTarget = new JOGLRenderingTarget(glWindow); + + final VizEngine engine = + VizEngineFactory.newEngine( + renderingTarget, + initialModel, + Collections.singletonList(new VizEngineJOGLConfigurator()) + ); + + applyDefaultLabelColumn(engine, initialModel); + + // Enable per-frame phase timings so the metrics HUD can break down + // world-update / render / per-renderer p50 + p99 latencies. + engine.setFrameTimingsEnabled(true); + + engine.start(); + + final NewtCanvasAWT newtCanvas = new NewtCanvasAWT(glWindow); + + final JFrame frame = new JFrame(titleFor(samples.get(0))); + frame.add(newtCanvas); + frame.setSize(WINDOW_WIDTH, WINDOW_HEIGHT); + frame.setLocationRelativeTo(null); + frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); + + final RenderingMetricsHud metricsHud = new RenderingMetricsHud(frame); + // Lock display order: frame total first (it drives the sparkline), + // then the engine-internal phases. + metricsHud.ensureSeries("frame", "world", "render"); + glWindow.addGLEventListener(new FrameTimeRecorder(metricsHud, engine)); + + final CountDownLatch closedLatch = new CountDownLatch(1); + frame.addWindowListener(new WindowAdapter() { + @Override + public void windowClosed(WindowEvent e) { + metricsHud.dispose(); + closedLatch.countDown(); + } + }); + + glWindow.addKeyListener(new KeyListener() { + @Override + public void keyPressed(KeyEvent e) { + } + + @Override + public void keyReleased(KeyEvent e) { + switch (e.getKeyCode()) { + case KeyEvent.VK_ESCAPE: + layoutEnabled = false; + engine.destroy(); + glWindow.destroy(); + frame.dispose(); + break; + case KeyEvent.VK_SPACE: + toggleLayout(currentGraphModel); + break; + case KeyEvent.VK_RIGHT: + cycleToNextSample(samples, currentIndex, currentGraphModel, engine, frame); + break; + case KeyEvent.VK_L: + toggleNodeLabels(engine, currentGraphModel); + break; + default: + // ignored + } + } + }); + + renderingTarget.setFrame(frame); + renderingTarget.setWindowTitleFormat(titleFor(samples.get(0)) + " - FPS: $FPS"); + + frame.setVisible(true); + metricsHud.start(); + + System.out.println(WINDOW_TITLE + " started - SPACE: toggle Force Atlas 2 | " + + "RIGHT: next sample (" + samples.size() + " available) | " + + "L: toggle node labels | ESC: exit."); + } + + /** + * Toggles node-label visibility on the engine's rendering options. + * + *

              Defensively re-applies the default label column from the live graph + * model before flipping the flag: when the engine swaps graph models on + * sample cycling, a fresh {@link GraphRenderingOptions} instance is + * created internally and the previously configured columns are lost + * unless we restore them on the new options.

              + */ + private static void toggleNodeLabels(VizEngine engine, + AtomicReference currentGraphModel) { + final GraphModel graphModel = currentGraphModel.get(); + final GraphRenderingOptions options = engine.getRenderingOptions(); + + final Column nodeLabelColumn = graphModel.defaultColumns().nodeLabel(); + options.setNodeLabelColumns(new Column[] {nodeLabelColumn}); + + final boolean newValue = !options.isShowNodeLabels(); + options.setShowNodeLabels(newValue); + + System.out.println("Node labels: " + (newValue ? "ON" : "OFF") + + " (column=" + (nodeLabelColumn != null ? nodeLabelColumn.getId() : "") + + ", nodes=" + graphModel.getGraph().getNodeCount() + ")"); + } + + /** + * {@link GLEventListener} that records frame-level metrics into the HUD + * after each rendered frame. Registered on the {@link GLWindow} after + * {@code engine.start()}, so it runs after the engine's own listener + * and therefore sees the time between two completed frames as well as + * the per-phase timings the engine just published. + */ + private static final class FrameTimeRecorder implements GLEventListener { + + private final RenderingMetricsHud hud; + private final VizEngine engine; + private long lastFrameNanos = 0L; + + FrameTimeRecorder(RenderingMetricsHud hud, + VizEngine engine) { + this.hud = hud; + this.engine = engine; + } + + @Override + public void init(GLAutoDrawable drawable) { + } + + @Override + public void dispose(GLAutoDrawable drawable) { + } + + @Override + public void display(GLAutoDrawable drawable) { + final long now = System.nanoTime(); + if (lastFrameNanos != 0L) { + hud.recordSample("frame", now - lastFrameNanos); + } + lastFrameNanos = now; + + final FrameTimings t = engine.getLastFrameTimings(); + if (t == null || t == FrameTimings.EMPTY) { + return; + } + hud.recordSample("world", t.worldUpdateNs()); + hud.recordSample("render", t.renderNs()); + for (var entry : t.perRendererCategoryNs().entrySet()) { + // Prefix per-renderer rows so the HUD can detect and indent them. + hud.recordSample("render:" + entry.getKey(), entry.getValue()); + } + } + + @Override + public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) { + } + } + + /** + * Starts or stops a Force Atlas 2 layout iteration loop on the dedicated + * worker thread. The loop reads the volatile {@link #layoutEnabled} flag + * each iteration, plus the latest graph model from {@code currentGraphModel} + * so cycling samples while running is safe (the loop will simply observe + * the new model on its next iteration via the same reference, but for + * cleanliness we stop and restart on each toggle). + */ + private static void toggleLayout(final AtomicReference currentGraphModel) { + if (layoutEnabled) { + System.out.println("Stopping Force Atlas 2"); + layoutEnabled = false; + return; + } + + final GraphModel graphModel = currentGraphModel.get(); + System.out.println("Starting Force Atlas 2"); + LAYOUT_EXECUTOR.submit(() -> { + layoutEnabled = true; + + final ForceAtlas2 forceAtlas2 = new ForceAtlas2Builder().buildLayout(); + forceAtlas2.setGraphModel(graphModel); + forceAtlas2.setBarnesHutOptimize(true); + forceAtlas2.setScalingRatio(1000.0); + forceAtlas2.setAdjustSizes(true); + forceAtlas2.initAlgo(); + try { + while (layoutEnabled && forceAtlas2.canAlgo()) { + forceAtlas2.goAlgo(); + } + } finally { + forceAtlas2.endAlgo(); + } + }); + } + + /** + * Loads the next sample in the cycle on a worker thread (sample files can + * be tens of MB and importing them blocks for a noticeable time), then + * swaps the engine's {@link GraphModel}. Concurrent presses are debounced + * via {@link #SAMPLE_SWAPPING}. + */ + private static void cycleToNextSample(final List samples, + final AtomicReference currentIndex, + final AtomicReference currentGraphModel, + final VizEngine engine, + final JFrame frame) { + if (samples.size() <= 1) { + System.out.println("Only one sample available, nothing to cycle to."); + return; + } + if (!SAMPLE_SWAPPING.compareAndSet(false, true)) { + System.out.println("Sample swap already in progress, ignoring."); + return; + } + + final int nextIdx = (currentIndex.get() + 1) % samples.size(); + final Sample nextSample = samples.get(nextIdx); + + SAMPLE_LOADER.submit(() -> { + try { + // Stop any running FA2 so it doesn't keep iterating on the soon-to-be-replaced model. + layoutEnabled = false; + + System.out.println("Switching to sample: " + nextSample.name()); + SwingUtilities.invokeLater(() -> frame.setTitle( + titleFor(nextSample) + " (loading...)")); + + final GraphModel newModel = loadSample(nextSample); + + engine.setGraphModel(newModel, null, null); + applyDefaultLabelColumn(engine, newModel); + + currentGraphModel.set(newModel); + currentIndex.set(nextIdx); + + SwingUtilities.invokeLater(() -> frame.setTitle(titleFor(nextSample))); + } catch (RuntimeException e) { + System.err.println("Failed to load sample " + nextSample.name() + ": " + e.getMessage()); + e.printStackTrace(); + } finally { + SAMPLE_SWAPPING.set(false); + } + }); + } + + /** + * Builds the ordered cycle list. If a custom path is provided it goes + * first; the bundled samples follow. + */ + private static List buildSampleList(String customGraphPath) { + final List samples = new ArrayList<>(); + if (customGraphPath != null) { + final File f = new File(customGraphPath).getAbsoluteFile(); + samples.add(new Sample(f.getName(), f)); + } + samples.addAll(BUNDLED_SAMPLES); + return Collections.unmodifiableList(samples); + } + + /** + * Loads the given sample: ensures it's available as an on-disk file + * (extracting from the classpath if needed), creates a fresh Gephi + * project, runs the importer and returns the resulting {@link GraphModel}. + */ + private static GraphModel loadSample(Sample sample) { + final File file = sample.toFile(); + if (!file.exists()) { + throw new IllegalStateException("Graph file not found: " + file.getAbsolutePath()); + } + + System.out.println("Loading graph: " + file.getAbsolutePath()); + + final ProjectController projectController = Lookup.getDefault().lookup(ProjectController.class); + if (projectController == null) { + throw new IllegalStateException( + "ProjectController service not available - check that project-api is on the classpath."); + } + projectController.newProject(); + + final ImportController importController = Lookup.getDefault().lookup(ImportController.class); + if (importController == null) { + throw new IllegalStateException( + "ImportController service not available - check that io-importer-plugin is on the classpath."); + } + + final Container container; + try { + container = importController.importFile(file); + } catch (IOException e) { + throw new IllegalStateException("Failed to import graph file: " + file.getAbsolutePath(), e); + } + if (container == null) { + throw new IllegalStateException( + "No importer available for: " + file.getAbsolutePath() + + " - is io-importer-plugin on the classpath?"); + } + importController.process(container); + + return Lookup.getDefault().lookup(GraphController.class).getGraphModel(); + } + + private static void applyDefaultLabelColumn(VizEngine engine, + GraphModel graphModel) { + final GraphRenderingOptions options = engine.getRenderingOptions(); + options.setNodeLabelColumns(new Column[]{graphModel.defaultColumns().nodeLabel()}); + } + + private static String titleFor(Sample sample) { + return WINDOW_TITLE + " - " + sample.name(); + } + + private static java.util.concurrent.ThreadFactory daemon(String name) { + return runnable -> { + Thread thread = new Thread(runnable, name); + thread.setDaemon(true); + return thread; + }; + } + + /** + * A graph sample that is either bundled on the classpath or provided as + * an external file by the user. Classpath samples are extracted lazily + * on first use and the temp file is reused for subsequent loads. + */ + private static final class Sample { + + private final String name; + private final String classpathResource; + private final File externalFile; + private File extractedFile; + + Sample(String name, String classpathResource) { + this.name = name; + this.classpathResource = classpathResource; + this.externalFile = null; + } + + Sample(String name, File externalFile) { + this.name = name; + this.classpathResource = null; + this.externalFile = externalFile; + } + + String name() { + return name; + } + + synchronized File toFile() { + if (externalFile != null) { + return externalFile; + } + if (extractedFile != null && extractedFile.exists()) { + return extractedFile; + } + try (InputStream in = VizEngineDemo.class.getResourceAsStream(classpathResource)) { + if (in == null) { + throw new IllegalStateException( + "Sample resource not found on classpath: " + classpathResource); + } + final String suffix = classpathResource.substring(classpathResource.lastIndexOf('.')); + final Path tempFile = Files.createTempFile("viz-engine-demo-", suffix); + tempFile.toFile().deleteOnExit(); + Files.copy(in, tempFile, StandardCopyOption.REPLACE_EXISTING); + extractedFile = tempFile.toFile(); + return extractedFile; + } catch (IOException e) { + throw new IllegalStateException("Failed to extract sample: " + classpathResource, e); + } + } + } +} diff --git a/modules/VizEngineDemo/src/main/resources/org/gephi/viz/engine/demo/samples/Les Miserables.gexf b/modules/VizEngineDemo/src/main/resources/org/gephi/viz/engine/demo/samples/Les Miserables.gexf new file mode 100644 index 0000000000..7d2eba2961 --- /dev/null +++ b/modules/VizEngineDemo/src/main/resources/org/gephi/viz/engine/demo/samples/Les Miserables.gexf @@ -0,0 +1,1394 @@ + + + + Gephi 0.8.1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/VizEngineDemo/src/main/resources/org/gephi/viz/engine/demo/samples/comic-hero-network.gexf b/modules/VizEngineDemo/src/main/resources/org/gephi/viz/engine/demo/samples/comic-hero-network.gexf new file mode 100644 index 0000000000..2630592265 --- /dev/null +++ b/modules/VizEngineDemo/src/main/resources/org/gephi/viz/engine/demo/samples/comic-hero-network.gexf @@ -0,0 +1,250961 @@ + + + + Gephi 0.9 + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/WelcomeScreen/pom.xml b/modules/WelcomeScreen/pom.xml index ee5cc1920b..2fe5915cad 100644 --- a/modules/WelcomeScreen/pom.xml +++ b/modules/WelcomeScreen/pom.xml @@ -4,13 +4,13 @@ gephi-parent org.gephi - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT ../.. org.gephi welcome-screen - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT nbm WelcomeScreen @@ -36,6 +36,10 @@ ${project.groupId} project-api
              + + ${project.groupId} + desktop-icons + org.netbeans.api org-netbeans-modules-settings @@ -60,6 +64,10 @@ org.netbeans.api org-openide-util + + org.netbeans.api + org-openide-util-ui + org.netbeans.api org-openide-util-lookup @@ -81,7 +89,7 @@ - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin diff --git a/modules/WelcomeScreen/src/main/java/org/gephi/desktop/welcome/Installer.java b/modules/WelcomeScreen/src/main/java/org/gephi/desktop/welcome/Installer.java index 5ac6e39bdb..e42bed5015 100644 --- a/modules/WelcomeScreen/src/main/java/org/gephi/desktop/welcome/Installer.java +++ b/modules/WelcomeScreen/src/main/java/org/gephi/desktop/welcome/Installer.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.welcome; import javax.swing.JDialog; @@ -54,16 +55,18 @@ public class Installer extends ModuleInstall { @Override public void restored() { - if (NbPreferences.forModule(WelcomeTopComponent.class).getBoolean(WelcomeTopComponent.STARTUP_PREF, Boolean.TRUE)) { + if (NbPreferences.forModule(WelcomeTopComponent.class) + .getBoolean(WelcomeTopComponent.STARTUP_PREF, Boolean.TRUE)) { WindowManager.getDefault().invokeWhenUIReady(new Runnable() { @Override public void run() { WelcomeTopComponent component = WelcomeTopComponent.getInstance(); JDialog dialog = new JDialog(WindowManager.getDefault().getMainWindow(), - component.getName(), false); + component.getName(), false); dialog.getContentPane().add(component); - dialog.setBounds(212, 237, 679, 378); + dialog.setSize(679, 420); + dialog.setLocationRelativeTo(WindowManager.getDefault().getMainWindow()); dialog.setVisible(true); } }); diff --git a/modules/WelcomeScreen/src/main/java/org/gephi/desktop/welcome/WelcomeAction.java b/modules/WelcomeScreen/src/main/java/org/gephi/desktop/welcome/WelcomeAction.java index 0a30b10e02..0e5d2b4d29 100644 --- a/modules/WelcomeScreen/src/main/java/org/gephi/desktop/welcome/WelcomeAction.java +++ b/modules/WelcomeScreen/src/main/java/org/gephi/desktop/welcome/WelcomeAction.java @@ -39,22 +39,31 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.welcome; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JDialog; +import javax.swing.SwingUtilities; +import javax.swing.WindowConstants; import org.openide.windows.WindowManager; public final class WelcomeAction implements ActionListener { @Override public void actionPerformed(ActionEvent e) { - WelcomeTopComponent component = WelcomeTopComponent.getInstance(); - JDialog dialog = new JDialog(WindowManager.getDefault().getMainWindow(), - component.getName(), false); - dialog.getContentPane().add(component); - dialog.setBounds(212, 237, 679, 378); - dialog.setVisible(true); + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + WelcomeTopComponent component = WelcomeTopComponent.getInstance(); + JDialog dialog = new JDialog(WindowManager.getDefault().getMainWindow(), + component.getName(), false); + dialog.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); + dialog.getContentPane().add(component); + dialog.setBounds(212, 237, 679, 378); + dialog.setVisible(true); + } + }); } } diff --git a/modules/WelcomeScreen/src/main/java/org/gephi/desktop/welcome/WelcomeTopComponent.form b/modules/WelcomeScreen/src/main/java/org/gephi/desktop/welcome/WelcomeTopComponent.form index 91d15b2cfc..45660f8ec5 100644 --- a/modules/WelcomeScreen/src/main/java/org/gephi/desktop/welcome/WelcomeTopComponent.form +++ b/modules/WelcomeScreen/src/main/java/org/gephi/desktop/welcome/WelcomeTopComponent.form @@ -16,43 +16,12 @@ - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -63,29 +32,31 @@ - - - - - - + - + + - - - + + - + - + + + + + + + + @@ -93,24 +64,29 @@ - - - - + + + + - - + + + + + + + + - + - @@ -130,13 +106,6 @@ - - - - - - - @@ -182,32 +151,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - + diff --git a/modules/WelcomeScreen/src/main/java/org/gephi/desktop/welcome/WelcomeTopComponent.java b/modules/WelcomeScreen/src/main/java/org/gephi/desktop/welcome/WelcomeTopComponent.java index 2c31eace65..d4ecf53b9a 100644 --- a/modules/WelcomeScreen/src/main/java/org/gephi/desktop/welcome/WelcomeTopComponent.java +++ b/modules/WelcomeScreen/src/main/java/org/gephi/desktop/welcome/WelcomeTopComponent.java @@ -39,6 +39,7 @@ Development and Distribution License("CDDL") (collectively, the Portions Copyrighted 2011 Gephi Consortium. */ + package org.gephi.desktop.welcome; import java.awt.Container; @@ -47,21 +48,25 @@ Development and Distribution License("CDDL") (collectively, the import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.io.File; -import java.io.IOException; import java.io.InputStream; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JDialog; +import javax.swing.JLabel; import javax.swing.JPanel; +import javax.swing.SwingUtilities; +import javax.swing.UIManager; import org.gephi.desktop.importer.api.ImportControllerUI; import org.gephi.desktop.mrufiles.api.MostRecentFiles; -import org.gephi.desktop.project.api.ProjectControllerUI; +import org.gephi.project.api.Project; +import org.gephi.project.api.ProjectController; import org.jdesktop.swingx.JXHyperlink; -import org.openide.DialogDisplayer; -import org.openide.NotifyDescriptor; -import org.openide.filesystems.FileObject; -import org.openide.filesystems.FileUtil; -import org.openide.util.*; +import org.openide.awt.Actions; +import org.openide.util.Exceptions; +import org.openide.util.ImageUtilities; +import org.openide.util.Lookup; +import org.openide.util.NbBundle; +import org.openide.util.NbPreferences; import org.openide.windows.TopComponent; /** @@ -69,18 +74,25 @@ Development and Distribution License("CDDL") (collectively, the */ public final class WelcomeTopComponent extends JPanel { - private static WelcomeTopComponent instance; public static final String STARTUP_PREF = "WelcomeScreen_Open_Startup"; - private static final String GEPHI_EXTENSION = "gephi"; private static final Object LINK_PATH = new Object(); - private Action openAction; - - public static synchronized WelcomeTopComponent getInstance() { - if (instance == null) { - instance = new WelcomeTopComponent(); - } - return instance; - } + private static WelcomeTopComponent instance; + private Action openFileAction; + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JLabel labelNew; + private javax.swing.JLabel labelProjects; + private javax.swing.JLabel labelRecent; + private javax.swing.JLabel labelSamples; + private javax.swing.JPanel mainPanel; + private org.jdesktop.swingx.JXHyperlink newProjectLink; + private org.jdesktop.swingx.JXHyperlink openFileLink; + private javax.swing.JCheckBox openOnStartupCheckbox; + private javax.swing.JPanel projectsPanel; + private javax.swing.JScrollPane projectsScrollPane; + private javax.swing.JPanel recentPanel; + private javax.swing.JPanel samplesPanel; + private javax.swing.JPanel southPanel; + // End of variables declaration//GEN-END:variables private WelcomeTopComponent() { initComponents(); @@ -90,42 +102,41 @@ private WelcomeTopComponent() { putClientProperty(TopComponent.PROP_MAXIMIZATION_DISABLED, Boolean.TRUE); initAction(); + loadProjects(); loadMRU(); loadSamples(); loadPrefs(); } - private void closeDialog() { - Container container = this; - for (; !(container instanceof JDialog);) { - container = container.getParent(); + public static synchronized WelcomeTopComponent getInstance() { + if (instance == null) { + instance = new WelcomeTopComponent(); } - container.setVisible(false); + return instance; + } + + private void closeDialog() { + SwingUtilities.invokeLater(new Runnable() { + @Override + public void run() { + Container container = WelcomeTopComponent.this; + for (; !(container instanceof JDialog); ) { + container = container.getParent(); + } + container.setVisible(false); + } + }); } private void initAction() { - openAction = new AbstractAction("", ImageUtilities.loadImageIcon("org/gephi/desktop/welcome/resources/gephifile20.png", false)) { + openFileAction = new AbstractAction("") { @Override public void actionPerformed(ActionEvent e) { JXHyperlink link = (JXHyperlink) e.getSource(); File file = (File) link.getClientProperty(LINK_PATH); - FileObject fileObject = FileUtil.toFileObject(file); - if (fileObject.hasExt(GEPHI_EXTENSION)) { - ProjectControllerUI pc = Lookup.getDefault().lookup(ProjectControllerUI.class); - try { - pc.openProject(file); - } catch (Exception ex) { - ex.printStackTrace(); - NotifyDescriptor.Message msg = new NotifyDescriptor.Message(NbBundle.getMessage(WelcomeTopComponent.class, "WelcomeTopComponent.openGephiError"), NotifyDescriptor.WARNING_MESSAGE); - DialogDisplayer.getDefault().notify(msg); - } - } else { - ImportControllerUI importController = Lookup.getDefault().lookup(ImportControllerUI.class); - if (importController.getImportController().isFileSupported(FileUtil.toFile(fileObject))) { - importController.importFile(fileObject); - } - } + Actions.forID("File", "org.gephi.desktop.project.actions.OpenFile").actionPerformed( + new ActionEvent(file, 0, null)); closeDialog(); } }; @@ -133,8 +144,7 @@ public void actionPerformed(ActionEvent e) { @Override public void actionPerformed(ActionEvent e) { - ProjectControllerUI pc = Lookup.getDefault().lookup(ProjectControllerUI.class); - pc.newProject(); + Actions.forID("File", "org.gephi.desktop.project.actions.NewProject").actionPerformed(null); closeDialog(); } }); @@ -142,63 +152,100 @@ public void actionPerformed(ActionEvent e) { @Override public void actionPerformed(ActionEvent e) { - ProjectControllerUI pc = Lookup.getDefault().lookup(ProjectControllerUI.class); - pc.openFile(); + Actions.forID("File", "org.gephi.desktop.project.actions.OpenFile").actionPerformed(null); closeDialog(); } }); } + private void loadProjects() { + net.miginfocom.swing.MigLayout migLayout1 = new net.miginfocom.swing.MigLayout("insets 6"); + migLayout1.setColumnConstraints("[pref]"); + projectsPanel.setLayout(migLayout1); + + ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); + boolean hasProjects = false; + for (Project project : pc.getAllProjects()) { + if (project.hasFile()) { + hasProjects = true; + JLabel iconLabel = new JLabel(ImageUtilities.loadImageIcon("WelcomeScreen/gephifile20.svg", false)); + projectsPanel.add(iconLabel, "span 1 2, aligny top"); + + JXHyperlink link = new JXHyperlink(openFileAction); + link.setText(project.getName()); + link.setToolTipText(project.getFile().getPath()); + link.putClientProperty(LINK_PATH, project.getFile()); + projectsPanel.add(link, "wrap 0"); + + JLabel fileLabel = new JLabel(project.getFile().getName()); + fileLabel.setFont(fileLabel.getFont().deriveFont(fileLabel.getFont().getSize() - 2f)); + fileLabel.setForeground(UIManager.getColor("Label.disabledForeground")); + projectsPanel.add(fileLabel, "gapleft 2, wrap 6"); + } + } + labelProjects.setVisible(hasProjects); + projectsScrollPane.setVisible(hasProjects); + } + private void loadMRU() { - net.miginfocom.swing.MigLayout migLayout1 = new net.miginfocom.swing.MigLayout(); + net.miginfocom.swing.MigLayout migLayout1 = new net.miginfocom.swing.MigLayout("insets 6"); migLayout1.setColumnConstraints("[pref]"); recentPanel.setLayout(migLayout1); MostRecentFiles mru = Lookup.getDefault().lookup(MostRecentFiles.class); + boolean hasRecent = false; + int recentCount = 0; for (String filePath : mru.getMRUFileList()) { - JXHyperlink fileLink = new JXHyperlink(openAction); + if (recentCount >= 3) { + break; + } + JXHyperlink fileLink = new JXHyperlink(openFileAction); File file = new File(filePath); if (file.exists()) { + hasRecent = true; + recentCount++; fileLink.setText(file.getName()); + fileLink.setToolTipText(file.getPath()); fileLink.putClientProperty(LINK_PATH, file); recentPanel.add(fileLink, "wrap"); } } + labelRecent.setVisible(hasRecent); + recentPanel.setVisible(hasRecent); } private void loadSamples() { - net.miginfocom.swing.MigLayout migLayout1 = new net.miginfocom.swing.MigLayout(); + net.miginfocom.swing.MigLayout migLayout1 = new net.miginfocom.swing.MigLayout("insets 6"); migLayout1.setColumnConstraints("[pref]"); samplesPanel.setLayout(migLayout1); - String[] samplePath = new String[3]; + String[] samplePath = new String[4]; samplePath[0] = "/org/gephi/desktop/welcome/samples/Les Miserables.gexf"; samplePath[1] = "/org/gephi/desktop/welcome/samples/Java.gexf"; samplePath[2] = "/org/gephi/desktop/welcome/samples/Power Grid.gml"; + samplePath[3] = "/org/gephi/desktop/welcome/samples/US Airports.gexf"; - String[] sampleTooltip = new String[3]; + String[] sampleTooltip = new String[4]; sampleTooltip[0] = "Coappearance Network of Characters in 'Les Miserables' (D. E. Knuth)"; sampleTooltip[1] = "Java Programming Language Dependency graph (V. Batagelj)"; sampleTooltip[2] = "Topology of the Western States Power Grid of the US (D. Watts & S. Strogatz)"; + sampleTooltip[3] = "Example of a geographical network with latitude/longitude attributes"; try { for (int i = 0; i < samplePath.length; i++) { - String s = samplePath[i]; + final String s = samplePath[i]; String tooltip = sampleTooltip[i]; - final InputStream stream = WelcomeTopComponent.class.getResourceAsStream(s); - String fileName = s.substring(s.lastIndexOf('/') + 1, s.length()); - final String importer = fileName.substring(fileName.lastIndexOf('.'), fileName.length()); + + String fileName = s.substring(s.lastIndexOf('/') + 1); + final String importer = fileName.substring(fileName.lastIndexOf('.')); + final String fileNameNoExt = fileName.substring(0, fileName.lastIndexOf('.')); JXHyperlink fileLink = new JXHyperlink(new AbstractAction() { @Override public void actionPerformed(ActionEvent e) { - try { - stream.reset(); - } catch (IOException ex) { - //Exceptions.printStackTrace(ex); - } + final InputStream stream = WelcomeTopComponent.class.getResourceAsStream(s); ImportControllerUI importController = Lookup.getDefault().lookup(ImportControllerUI.class); - importController.importStream(stream, importer); + importController.importStream(stream, fileNameNoExt, importer); closeDialog(); } }); @@ -213,17 +260,19 @@ public void actionPerformed(ActionEvent e) { } private void loadPrefs() { - Boolean openStartup = NbPreferences.forModule(WelcomeTopComponent.class).getBoolean(STARTUP_PREF, Boolean.TRUE); + boolean openStartup = NbPreferences.forModule(WelcomeTopComponent.class).getBoolean(STARTUP_PREF, Boolean.TRUE); openOnStartupCheckbox.setSelected(openStartup); openOnStartupCheckbox.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { - NbPreferences.forModule(WelcomeTopComponent.class).putBoolean(STARTUP_PREF, openOnStartupCheckbox.isSelected()); + NbPreferences.forModule(WelcomeTopComponent.class) + .putBoolean(STARTUP_PREF, openOnStartupCheckbox.isSelected()); } }); } + /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always @@ -232,115 +281,227 @@ public void itemStateChanged(ItemEvent e) { // //GEN-BEGIN:initComponents private void initComponents() { - header = new org.jdesktop.swingx.JXHeader(); mainPanel = new javax.swing.JPanel(); labelRecent = new javax.swing.JLabel(); - recentPanel = new javax.swing.JPanel(); labelNew = new javax.swing.JLabel(); newProjectLink = new org.jdesktop.swingx.JXHyperlink(); labelSamples = new javax.swing.JLabel(); samplesPanel = new javax.swing.JPanel(); openFileLink = new org.jdesktop.swingx.JXHyperlink(); + labelProjects = new javax.swing.JLabel(); + projectsScrollPane = new javax.swing.JScrollPane(); + projectsPanel = new javax.swing.JPanel(); + recentPanel = new javax.swing.JPanel(); southPanel = new javax.swing.JPanel(); openOnStartupCheckbox = new javax.swing.JCheckBox(); - setOpaque(true); setPreferredSize(new java.awt.Dimension(679, 379)); setLayout(new java.awt.BorderLayout()); - header.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/desktop/welcome/resources/logo_transparent_small.png"))); // NOI18N - header.setTitle(org.openide.util.NbBundle.getMessage(WelcomeTopComponent.class, "WelcomeTopComponent.header.title")); // NOI18N - header.setTitleFont(header.getTitleFont().deriveFont(header.getTitleFont().getSize()+4f)); - header.setTitleForeground(new java.awt.Color(39, 119, 198)); - header.setBorder(new org.jdesktop.swingx.border.DropShadowBorder()); - add(header, java.awt.BorderLayout.PAGE_START); - - mainPanel.setBackground(new java.awt.Color(255, 255, 255)); - - labelRecent.setFont(labelRecent.getFont().deriveFont(labelRecent.getFont().getStyle() | java.awt.Font.BOLD, labelRecent.getFont().getSize()+2)); - org.openide.awt.Mnemonics.setLocalizedText(labelRecent, org.openide.util.NbBundle.getMessage(WelcomeTopComponent.class, "WelcomeTopComponent.labelRecent.text")); // NOI18N + // Custom header: logo + title on the left, checkbox on the right + javax.swing.JPanel headerPanel = new javax.swing.JPanel(new java.awt.BorderLayout()); + headerPanel.setBorder(javax.swing.BorderFactory.createCompoundBorder( + new org.jdesktop.swingx.border.DropShadowBorder(), + javax.swing.BorderFactory.createEmptyBorder(10, 14, 10, 14))); + + javax.swing.JLabel logoLabel = + new javax.swing.JLabel(ImageUtilities.loadImageIcon("WelcomeScreen/logo_transparent_small.svg", false)); + javax.swing.JLabel titleLabel = new javax.swing.JLabel( + org.openide.util.NbBundle.getMessage(WelcomeTopComponent.class, + "WelcomeTopComponent.header.title")); // NOI18N + titleLabel.setFont(titleLabel.getFont().deriveFont(java.awt.Font.BOLD, titleLabel.getFont().getSize() + 4f)); + titleLabel.setForeground(new java.awt.Color(39, 119, 198)); + + javax.swing.JPanel logoTitlePanel = + new javax.swing.JPanel(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT, 10, 0)); + logoTitlePanel.setOpaque(false); + logoTitlePanel.add(logoLabel); + logoTitlePanel.add(titleLabel); + + org.openide.awt.Mnemonics.setLocalizedText(openOnStartupCheckbox, + org.openide.util.NbBundle.getMessage(WelcomeTopComponent.class, + "WelcomeTopComponent.openOnStartupCheckbox.text")); // NOI18N + javax.swing.JPanel checkboxPanel = new javax.swing.JPanel(new java.awt.GridBagLayout()); + checkboxPanel.setOpaque(false); + checkboxPanel.add(openOnStartupCheckbox); + + headerPanel.add(logoTitlePanel, java.awt.BorderLayout.WEST); + headerPanel.add(checkboxPanel, java.awt.BorderLayout.EAST); + add(headerPanel, java.awt.BorderLayout.PAGE_START); + + labelRecent.setFont(labelRecent.getFont() + .deriveFont(labelRecent.getFont().getStyle() | java.awt.Font.BOLD, labelRecent.getFont().getSize() + 2)); + org.openide.awt.Mnemonics.setLocalizedText(labelRecent, + org.openide.util.NbBundle.getMessage(WelcomeTopComponent.class, + "WelcomeTopComponent.labelRecent.text")); // NOI18N + + labelNew.setFont(labelNew.getFont() + .deriveFont(labelNew.getFont().getStyle() | java.awt.Font.BOLD, labelNew.getFont().getSize() + 2)); + org.openide.awt.Mnemonics.setLocalizedText(labelNew, + org.openide.util.NbBundle.getMessage(WelcomeTopComponent.class, + "WelcomeTopComponent.labelNew.text")); // NOI18N + + org.openide.awt.Mnemonics.setLocalizedText(newProjectLink, + org.openide.util.NbBundle.getMessage(WelcomeTopComponent.class, + "WelcomeTopComponent.newProjectLink.text")); // NOI18N + + labelSamples.setFont(labelSamples.getFont() + .deriveFont(labelSamples.getFont().getStyle() | java.awt.Font.BOLD, labelSamples.getFont().getSize() + 2)); + org.openide.awt.Mnemonics.setLocalizedText(labelSamples, + org.openide.util.NbBundle.getMessage(WelcomeTopComponent.class, + "WelcomeTopComponent.labelSamples.text")); // NOI18N - recentPanel.setOpaque(false); - - labelNew.setFont(labelNew.getFont().deriveFont(labelNew.getFont().getStyle() | java.awt.Font.BOLD, labelNew.getFont().getSize()+2)); - org.openide.awt.Mnemonics.setLocalizedText(labelNew, org.openide.util.NbBundle.getMessage(WelcomeTopComponent.class, "WelcomeTopComponent.labelNew.text")); // NOI18N - - org.openide.awt.Mnemonics.setLocalizedText(newProjectLink, org.openide.util.NbBundle.getMessage(WelcomeTopComponent.class, "WelcomeTopComponent.newProjectLink.text")); // NOI18N + samplesPanel.setOpaque(false); - labelSamples.setFont(labelSamples.getFont().deriveFont(labelSamples.getFont().getStyle() | java.awt.Font.BOLD, labelSamples.getFont().getSize()+2)); - org.openide.awt.Mnemonics.setLocalizedText(labelSamples, org.openide.util.NbBundle.getMessage(WelcomeTopComponent.class, "WelcomeTopComponent.labelSamples.text")); // NOI18N + org.openide.awt.Mnemonics.setLocalizedText(openFileLink, + org.openide.util.NbBundle.getMessage(WelcomeTopComponent.class, + "WelcomeTopComponent.openFileLink.text")); // NOI18N + + labelProjects.setFont(labelProjects.getFont() + .deriveFont(labelProjects.getFont().getStyle() | java.awt.Font.BOLD, + labelProjects.getFont().getSize() + 2)); + org.openide.awt.Mnemonics.setLocalizedText(labelProjects, + org.openide.util.NbBundle.getMessage(WelcomeTopComponent.class, + "WelcomeTopComponent.labelProjects.text")); // NOI18N + + projectsScrollPane.setBorder(null); + projectsScrollPane.setHorizontalScrollBarPolicy(javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER); + + javax.swing.GroupLayout projectsPanelLayout = new javax.swing.GroupLayout(projectsPanel); + projectsPanel.setLayout(projectsPanelLayout); + projectsPanelLayout.setHorizontalGroup( + projectsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 375, Short.MAX_VALUE) + ); + projectsPanelLayout.setVerticalGroup( + projectsPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 168, Short.MAX_VALUE) + ); - samplesPanel.setOpaque(false); + projectsScrollPane.setViewportView(projectsPanel); - org.openide.awt.Mnemonics.setLocalizedText(openFileLink, org.openide.util.NbBundle.getMessage(WelcomeTopComponent.class, "WelcomeTopComponent.openFileLink.text")); // NOI18N + javax.swing.GroupLayout recentPanelLayout = new javax.swing.GroupLayout(recentPanel); + recentPanel.setLayout(recentPanelLayout); + recentPanelLayout.setHorizontalGroup( + recentPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 0, Short.MAX_VALUE) + ); + recentPanelLayout.setVerticalGroup( + recentPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGap(0, 0, Short.MAX_VALUE) + ); javax.swing.GroupLayout mainPanelLayout = new javax.swing.GroupLayout(mainPanel); mainPanel.setLayout(mainPanelLayout); mainPanelLayout.setHorizontalGroup( mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(mainPanelLayout.createSequentialGroup() - .addContainerGap() - .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(recentPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 232, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(labelRecent)) - .addGap(18, 18, 18) - .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(samplesPanel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addGroup(mainPanelLayout.createSequentialGroup() - .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(labelNew) - .addComponent(labelSamples) - .addGroup(mainPanelLayout.createSequentialGroup() - .addGap(10, 10, 10) - .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addComponent(openFileLink, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addComponent(newProjectLink, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))) - .addGap(62, 62, 62))) - .addContainerGap()) + .addGroup(mainPanelLayout.createSequentialGroup() + .addGap(20, 20, 20) + .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(projectsScrollPane, javax.swing.GroupLayout.DEFAULT_SIZE, 288, Short.MAX_VALUE) + .addGroup(mainPanelLayout.createSequentialGroup() + .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(labelProjects) + .addComponent(labelNew) + .addGroup(mainPanelLayout.createSequentialGroup() + .addGap(6, 6, 6) + .addGroup( + mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addComponent(newProjectLink, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.PREFERRED_SIZE) + .addComponent(openFileLink, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.PREFERRED_SIZE)))) + .addGap(0, 0, Short.MAX_VALUE))) + .addGap(18, 18, 18) + .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false) + .addComponent(labelSamples) + .addComponent(labelRecent) + .addComponent(recentPanel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addComponent(samplesPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 260, + javax.swing.GroupLayout.PREFERRED_SIZE)) + .addContainerGap()) ); mainPanelLayout.setVerticalGroup( mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(mainPanelLayout.createSequentialGroup() - .addContainerGap() - .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) - .addComponent(labelNew) - .addComponent(labelRecent)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(mainPanelLayout.createSequentialGroup() - .addGap(5, 5, 5) - .addComponent(newProjectLink, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(openFileLink, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) - .addGap(18, 18, 18) - .addComponent(labelSamples) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(samplesPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 81, Short.MAX_VALUE)) - .addComponent(recentPanel, javax.swing.GroupLayout.DEFAULT_SIZE, 160, Short.MAX_VALUE)) - .addContainerGap()) + .addGroup(mainPanelLayout.createSequentialGroup() + .addGap(15, 15, 15) + .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) + .addComponent(labelNew) + .addComponent(labelRecent)) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addGroup(mainPanelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) + .addGroup(mainPanelLayout.createSequentialGroup() + .addComponent(newProjectLink, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(openFileLink, javax.swing.GroupLayout.PREFERRED_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) + .addGap(18, 18, 18) + .addComponent(labelProjects) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(projectsScrollPane)) + .addGroup(mainPanelLayout.createSequentialGroup() + .addComponent(recentPanel, javax.swing.GroupLayout.DEFAULT_SIZE, + javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) + .addComponent(labelSamples) + .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) + .addComponent(samplesPanel, javax.swing.GroupLayout.PREFERRED_SIZE, 106, + javax.swing.GroupLayout.PREFERRED_SIZE))) + .addContainerGap()) ); add(mainPanel, java.awt.BorderLayout.CENTER); - southPanel.setBackground(new java.awt.Color(255, 255, 255)); - southPanel.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT)); + // Donate banner + southPanel.setOpaque(true); + southPanel.setBackground(new java.awt.Color(0xe2, 0xf7, 0xff)); + southPanel.setBorder( + javax.swing.BorderFactory.createMatteBorder(1, 0, 0, 0, new java.awt.Color(220, 220, 220))); + southPanel.setLayout(new java.awt.BorderLayout()); + + javax.swing.JLabel donateLabel = new javax.swing.JLabel( + org.openide.util.NbBundle.getMessage(WelcomeTopComponent.class, + "WelcomeTopComponent.donateLabel.text")); // NOI18N + donateLabel.setFont(donateLabel.getFont().deriveFont(donateLabel.getFont().getStyle() | java.awt.Font.ITALIC)); + donateLabel.setForeground(new java.awt.Color(0x11, 0x9b, 0xd4)); + donateLabel.setBorder(javax.swing.BorderFactory.createEmptyBorder(0, 14, 0, 0)); + + javax.swing.JButton donateButton = new javax.swing.JButton( + org.openide.util.NbBundle.getMessage(WelcomeTopComponent.class, + "WelcomeTopComponent.donateButton.text")); // NOI18N + donateButton.setUI(new javax.swing.plaf.basic.BasicButtonUI()); + donateButton.setBackground(new java.awt.Color(0x11, 0x9b, 0xd4)); + donateButton.setForeground(java.awt.Color.WHITE); + donateButton.setFocusPainted(false); + donateButton.setOpaque(true); + donateButton.setFont( + donateButton.getFont().deriveFont(java.awt.Font.BOLD, donateButton.getFont().getSize() + 1f)); + donateButton.setCursor(new java.awt.Cursor(java.awt.Cursor.HAND_CURSOR)); + donateButton.setBorder(javax.swing.BorderFactory.createEmptyBorder(8, 18, 8, 18)); + donateButton.addActionListener(new java.awt.event.ActionListener() { + @Override + public void actionPerformed(java.awt.event.ActionEvent evt) { + try { + java.awt.Desktop.getDesktop().browse(new java.net.URI( + "https://opencollective.com/gephi/donate?tags=gephi-desktop&interval=oneTime&amount=5")); + } catch (Exception ex) { + org.openide.util.Exceptions.printStackTrace(ex); + } + } + }); + + javax.swing.JPanel donateButtonWrapper = + new javax.swing.JPanel(new java.awt.FlowLayout(java.awt.FlowLayout.RIGHT, 12, 6)); + donateButtonWrapper.setOpaque(false); + donateButtonWrapper.add(donateButton); - org.openide.awt.Mnemonics.setLocalizedText(openOnStartupCheckbox, org.openide.util.NbBundle.getMessage(WelcomeTopComponent.class, "WelcomeTopComponent.openOnStartupCheckbox.text")); // NOI18N - southPanel.add(openOnStartupCheckbox); + southPanel.add(donateLabel, java.awt.BorderLayout.CENTER); + southPanel.add(donateButtonWrapper, java.awt.BorderLayout.EAST); add(southPanel, java.awt.BorderLayout.SOUTH); }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private org.jdesktop.swingx.JXHeader header; - private javax.swing.JLabel labelNew; - private javax.swing.JLabel labelRecent; - private javax.swing.JLabel labelSamples; - private javax.swing.JPanel mainPanel; - private org.jdesktop.swingx.JXHyperlink newProjectLink; - private org.jdesktop.swingx.JXHyperlink openFileLink; - private javax.swing.JCheckBox openOnStartupCheckbox; - private javax.swing.JPanel recentPanel; - private javax.swing.JPanel samplesPanel; - private javax.swing.JPanel southPanel; - // End of variables declaration//GEN-END:variables } diff --git a/modules/WelcomeScreen/src/main/nbm/manifest.mf b/modules/WelcomeScreen/src/main/nbm/manifest.mf index f0bbcdc8fc..cbf7384747 100644 --- a/modules/WelcomeScreen/src/main/nbm/manifest.mf +++ b/modules/WelcomeScreen/src/main/nbm/manifest.mf @@ -2,4 +2,6 @@ Manifest-Version: 1.0 OpenIDE-Module-Install: org/gephi/desktop/welcome/Installer.class OpenIDE-Module-Layer: org/gephi/desktop/welcome/layer.xml OpenIDE-Module-Localizing-Bundle: org/gephi/desktop/welcome/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file +OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} +OpenIDE-Module-Display-Category: Gephi UI +OpenIDE-Module-Name: Welcome Screen \ No newline at end of file diff --git a/modules/WelcomeScreen/src/main/nbm/module.xml b/modules/WelcomeScreen/src/main/nbm/module.xml deleted file mode 100644 index f2b2d9d160..0000000000 --- a/modules/WelcomeScreen/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle.properties b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle.properties index 92e2a52510..cadceced1b 100644 --- a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle.properties +++ b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle.properties @@ -1,15 +1,15 @@ +OpenIDE-Module-Short-Description=Welcome screen component CTL_WelcomeAction=Welcome CTL_WelcomeTopComponent=Welcome !HINT_WelcomeTopComponent= -OpenIDE-Module-Display-Category=Gephi UI -OpenIDE-Module-Name=Welcome Screen -OpenIDE-Module-Short-Description=Welcome screen component WelcomeTopComponent.labelRecent.text=Open recent WelcomeTopComponent.labelNew.text=New Project WelcomeTopComponent.labelSamples.text=Samples WelcomeTopComponent.newProjectLink.text=New Project WelcomeTopComponent.header.title=Welcome to Gephi -WelcomeTopComponent.openGephiError = Impossible to open this file. It must be a compatible '.gephi' file. WelcomeTopComponent.openOnStartupCheckbox.text=Open at startup WelcomeTopComponent.openFileLink.text=Open Graph File... +WelcomeTopComponent.labelProjects.text=Projects +WelcomeTopComponent.donateLabel.text=Volunteers build Gephi, support the project +WelcomeTopComponent.donateButton.text=Donate diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_ar.properties b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_ar.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_ar.properties @@ -0,0 +1 @@ + diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_ca.properties b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_ca.properties new file mode 100644 index 0000000000..ca49365891 --- /dev/null +++ b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_ca.properties @@ -0,0 +1,12 @@ +OpenIDE-Module-Short-Description=Components de la pantalla de benvinguda +CTL_WelcomeAction=Hola! +CTL_WelcomeTopComponent=Hola! +!HINT_WelcomeTopComponent= +WelcomeTopComponent.labelRecent.text=Obert recentment +WelcomeTopComponent.labelNew.text=Nou projecte +WelcomeTopComponent.labelSamples.text=Exemples +WelcomeTopComponent.newProjectLink.text=Nou projecte +WelcomeTopComponent.header.title=Benvinguda a Gephi + +WelcomeTopComponent.openOnStartupCheckbox.text=Obre a l'iniciar +WelcomeTopComponent.openFileLink.text=Obre un fitxer de Graf... diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_cs.properties b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_cs.properties index 4f3c721aae..d9449c7d7a 100644 --- a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_cs.properties +++ b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_cs.properties @@ -1,29 +1,12 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-23 16\:34+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -CTL_WelcomeAction=V\u00edtejte - -CTL_WelcomeTopComponent=V\u00edtejte - -OpenIDE-Module-Short-Description=Sou\u010d\u00e1st uv\u00edtac\u00ed obrazovky - -WelcomeTopComponent.labelRecent.text=Otev\u0159\u00edt ned\u00e1vn\u00e9 - -WelcomeTopComponent.labelNew.text=Nov\u00fd projekt - -WelcomeTopComponent.labelSamples.text=Uk\u00e1zky - -WelcomeTopComponent.newProjectLink.text=Nov\u00fd projekt - -WelcomeTopComponent.header.title=V\u00edtejte v Gephi - -WelcomeTopComponent.openGephiError=Nelze otev\u0159\u00edt tento soubor. Mus\u00ed to b\u00fdt kompatibiln\u00ed soubor '.gephi' - -WelcomeTopComponent.openOnStartupCheckbox.text=Otev\u0159\u00edt p\u0159i spu\u0161t\u011bn\u00ed - -WelcomeTopComponent.openFileLink.text=Otev\u0159\u00edt soubor grafu... +OpenIDE-Module-Short-Description=Sou\u010dαst uvνtacν obrazovky +CTL_WelcomeAction=Vνtejte +CTL_WelcomeTopComponent=Vνtejte +!HINT_WelcomeTopComponent= +WelcomeTopComponent.labelRecent.text=Otev\u0159νt nedαvnι +WelcomeTopComponent.labelNew.text=Novύ projekt +WelcomeTopComponent.labelSamples.text=Ukαzky +WelcomeTopComponent.newProjectLink.text=Novύ projekt +WelcomeTopComponent.header.title=Vνtejte v Gephi + +WelcomeTopComponent.openOnStartupCheckbox.text=Otev\u0159νt p\u0159i spu\u0161t\u011bnν +WelcomeTopComponent.openFileLink.text=Otev\u0159νt soubor grafu... diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_de.properties b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_de.properties new file mode 100644 index 0000000000..2ca79b9188 --- /dev/null +++ b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_de.properties @@ -0,0 +1,12 @@ +OpenIDE-Module-Short-Description=Willkommens-Meldungs-Komponente +CTL_WelcomeAction=Willkommen +CTL_WelcomeTopComponent=Willkommen +!HINT_WelcomeTopComponent= +WelcomeTopComponent.labelRecent.text=Kόrzlich geφffnet +WelcomeTopComponent.labelNew.text=Neues Projekt erstellen +WelcomeTopComponent.labelSamples.text=Beispiele +WelcomeTopComponent.newProjectLink.text=Neues Projekt erstellen +WelcomeTopComponent.header.title=Wilkommen zu Gephi + +WelcomeTopComponent.openOnStartupCheckbox.text=Beim Start anzeigen +WelcomeTopComponent.openFileLink.text=Graph Datei φffnen... diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_el.properties b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_el.properties new file mode 100644 index 0000000000..09523f8d56 --- /dev/null +++ b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_el.properties @@ -0,0 +1,14 @@ + + +WelcomeTopComponent.labelSamples.text=\u03A5\u03C0\u03BF\u03B4\u03B5\u03AF\u03B3\u03BC\u03B1\u03C4\u03B1 +CTL_WelcomeAction=\u039A\u03B1\u03BB\u03C9\u03C3\u03AE\u03C1\u03B8\u03B1\u03C4\u03B5 +CTL_WelcomeTopComponent=\u039A\u03B1\u03BB\u03C9\u03C3\u03AE\u03C1\u03B8\u03B1\u03C4\u03B5 +WelcomeTopComponent.newProjectLink.text=\u039D\u03AD\u03B1 \u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 +WelcomeTopComponent.header.title=\u039A\u03B1\u03BB\u03C9\u03C3\u03AE\u03C1\u03B8\u03B1\u03C4\u03B5 \u03C3\u03C4\u03BF Gephi +WelcomeTopComponent.openOnStartupCheckbox.text=\u0395\u03BC\u03C6\u03BD\u03AC\u03BD\u03B9\u03C3\u03B7 \u03BA\u03B1\u03C4\u03AC \u03C4\u03B7\u03BD \u03B5\u03BA\u03BA\u03AF\u03BD\u03B7\u03C3\u03B7 +WelcomeTopComponent.labelNew.text=\u039D\u03AD\u03B1 \u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 +WelcomeTopComponent.openFileLink.text=\u0386\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5 \u03B3\u03C1\u03B1\u03C6\u03AE\u03BC\u03B1\u03C4\u03BF\u03C2... +!HINT_WelcomeTopComponent= +WelcomeTopComponent.labelRecent.text=\u0386\u03BD\u03BF\u03B9\u03B3\u03BC\u03B1 \u03C0\u03C1\u03CC\u03C3\u03C6\u03B1\u03C4\u03BF\u03C5 +OpenIDE-Module-Short-Description=\u0394\u03BF\u03BC\u03B9\u03BA\u03CC \u03C3\u03C4\u03BF\u03B9\u03C7\u03B5\u03AF\u03BF \u03BF\u03B8\u03CC\u03BD\u03B7\u03C2 \u03C5\u03C0\u03BF\u03B4\u03BF\u03C7\u03AE\u03C2 +WelcomeTopComponent.labelProjects.text=\u0395\u03C1\u03B3\u03B1\u03C3\u03AF\u03B5\u03C2 diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_es.properties b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_es.properties index 6ee869322e..4a4fea9eda 100644 --- a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_es.properties +++ b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_es.properties @@ -1,29 +1,12 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-15 12\:56+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - +OpenIDE-Module-Short-Description=Componente para la pantalla de bienvenida CTL_WelcomeAction=Bienvenida - CTL_WelcomeTopComponent=Bienvenida - -OpenIDE-Module-Short-Description=Componente para la pantalla de bienvenida - +!HINT_WelcomeTopComponent= WelcomeTopComponent.labelRecent.text=Abrir recientes - WelcomeTopComponent.labelNew.text=Nuevo proyecto - WelcomeTopComponent.labelSamples.text=Ejemplos - WelcomeTopComponent.newProjectLink.text=Nuevo proyecto - WelcomeTopComponent.header.title=Bienvenido a Gephi - -WelcomeTopComponent.openGephiError=Imposible abrir este archivo. Debe ser un archivo '.gephi' compatible. - WelcomeTopComponent.openOnStartupCheckbox.text=Mostrar al iniciar - -WelcomeTopComponent.openFileLink.text=Abrir un archivo de grafo +WelcomeTopComponent.openFileLink.text=Abrir archivo de grafo... +WelcomeTopComponent.labelProjects.text=Proyectos diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_fr.properties b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_fr.properties index e6f8204a89..c53b6f5d4a 100644 --- a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_fr.properties +++ b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_fr.properties @@ -1,29 +1,14 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-15 12\:56+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - +OpenIDE-Module-Short-Description=Ιcran d'accueil CTL_WelcomeAction=Accueil - CTL_WelcomeTopComponent=Accueil - -OpenIDE-Module-Short-Description=\u00c9cran d'accueil - -WelcomeTopComponent.labelRecent.text=R\u00e9cemment ouvert - +!HINT_WelcomeTopComponent= +WelcomeTopComponent.labelRecent.text=Rιcemment ouvert WelcomeTopComponent.labelNew.text=Nouveau projet - WelcomeTopComponent.labelSamples.text=Exemples - WelcomeTopComponent.newProjectLink.text=Nouveau projet - -WelcomeTopComponent.header.title=Bienvenue dans Gephi \! - -WelcomeTopComponent.openGephiError=Impossible d'ouvrir ce fichier. Ce doit \u00eatre un .gephi compatible. - -WelcomeTopComponent.openOnStartupCheckbox.text=Ouvrir au d\u00e9marrage - +WelcomeTopComponent.header.title=Bienvenue dans Gephi +WelcomeTopComponent.openOnStartupCheckbox.text=Ouvrir au dιmarrage WelcomeTopComponent.openFileLink.text=Ouvrir un fichier de graphe... +WelcomeTopComponent.labelProjects.text=Projets +WelcomeTopComponent.donateLabel.text=Gephi est construit par des bιnιvoles, supportez le projet +WelcomeTopComponent.donateButton.text=Faire une donation diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_he.properties b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_he.properties new file mode 100644 index 0000000000..938e0b2ae9 --- /dev/null +++ b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_he.properties @@ -0,0 +1,12 @@ +OpenIDE-Module-Short-Description=\u05e8\u05db\u05d9\u05d1 \u05de\u05e1\u05da \u05d1\u05e8\u05d5\u05db\u05d9\u05dd \u05d4\u05d1\u05d0\u05d9\u05dd +CTL_WelcomeAction=\u05d1\u05e8\u05d5\u05db\u05d9\u05dd \u05d4\u05d1\u05d0\u05d9\u05dd +CTL_WelcomeTopComponent=\u05d1\u05e8\u05d5\u05db\u05d9\u05dd \u05d4\u05d1\u05d0\u05d9\u05dd +!HINT_WelcomeTopComponent= +WelcomeTopComponent.labelRecent.text=\u05e4\u05ea\u05d7 \u05d1\u05e9\u05d9\u05de\u05d5\u05e9 \u05dc\u05d0\u05d7\u05e8\u05d5\u05e0\u05d4 +WelcomeTopComponent.labelNew.text=\u05e4\u05e8\u05d5\u05d9\u05e7\u05d8 \u05d7\u05d3\u05e9 +WelcomeTopComponent.labelSamples.text=\u05d3\u05d5\u05d2\u05de\u05d0\u05d5\u05ea +WelcomeTopComponent.newProjectLink.text=\u05e4\u05e8\u05d5\u05d9\u05e7\u05d8 \u05d7\u05d3\u05e9 +WelcomeTopComponent.header.title=\u05d1\u05e8\u05d5\u05db\u05d9\u05dd \u05d4\u05d1\u05d0\u05d9\u05dd \u05dc\u05d2\u05e4\u05d9 + +WelcomeTopComponent.openOnStartupCheckbox.text=\u05e4\u05ea\u05d7 \u05e2\u05dd \u05d0\u05ea\u05d7\u05d5\u05dc \u05d4\u05ea\u05d5\u05db\u05e0\u05d4 +WelcomeTopComponent.openFileLink.text=\u05e4\u05ea\u05d7 \u05e7\u05d5\u05d1\u05e5 \u05d2\u05e8\u05e3... diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_hu.properties b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_hu.properties new file mode 100644 index 0000000000..50b429270e --- /dev/null +++ b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_hu.properties @@ -0,0 +1,14 @@ + + +WelcomeTopComponent.newProjectLink.text=\u00DAj projekt +WelcomeTopComponent.labelProjects.text=Projektek +WelcomeTopComponent.labelNew.text=\u00DAj projekt +WelcomeTopComponent.openOnStartupCheckbox.text=Nyissa meg ind\u00EDt\u00E1skor +WelcomeTopComponent.labelSamples.text=Mint\u00E1k +!HINT_WelcomeTopComponent= +WelcomeTopComponent.labelRecent.text=Nyissa meg a legut\u00F3bbi lehet\u0151s\u00E9get +OpenIDE-Module-Short-Description=\u00DCdv\u00F6zl\u0151 k\u00E9perny\u0151 komponens +WelcomeTopComponent.openFileLink.text=Grafikonf\u00E1jl megnyit\u00E1sa... +WelcomeTopComponent.header.title=\u00DCdv\u00F6z\u00F6lj\u00FCk Gephiben +CTL_WelcomeAction=\u00DCdv\u00F6z\u00F6lj\u00FCk +CTL_WelcomeTopComponent=\u00DCdv\u00F6z\u00F6lj\u00FCk diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_it.properties b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_it.properties new file mode 100644 index 0000000000..6f3386b96a --- /dev/null +++ b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_it.properties @@ -0,0 +1,12 @@ +OpenIDE-Module-Short-Description=Componente schermata di benvenuto +CTL_WelcomeAction=Benvenuto +CTL_WelcomeTopComponent=Benvenuto +!HINT_WelcomeTopComponent= +WelcomeTopComponent.labelRecent.text=Apri recenti +WelcomeTopComponent.labelNew.text=Nuovo Progetto +WelcomeTopComponent.labelSamples.text=Esempi +WelcomeTopComponent.newProjectLink.text=Nuovo Progetto +WelcomeTopComponent.header.title=Benvenuto in Gephi + +WelcomeTopComponent.openOnStartupCheckbox.text=Apri all'avvio +WelcomeTopComponent.openFileLink.text=Apri file grafo... diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_ja.properties b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_ja.properties index 18b9ceb389..b109e15504 100644 --- a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_ja.properties +++ b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_ja.properties @@ -1,29 +1,12 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-01 01\:28+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -CTL_WelcomeAction=\u3088\u3046\u3053\u305d - -CTL_WelcomeTopComponent=\u3088\u3046\u3053\u305d - -OpenIDE-Module-Short-Description=\u30a6\u30a7\u30eb\u30ab\u30e0\u30b9\u30af\u30ea\u30fc\u30f3\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8 - -WelcomeTopComponent.labelRecent.text=\u6700\u8fd1\u5229\u7528\u3057\u305f\u3082\u306e\u3092\u958b\u304f - -WelcomeTopComponent.labelNew.text=\u65b0\u898f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8 - -WelcomeTopComponent.labelSamples.text=\u30b5\u30f3\u30d7\u30eb - -WelcomeTopComponent.newProjectLink.text=\u65b0\u898f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8 - -WelcomeTopComponent.header.title=Gephi\u3078\u3088\u3046\u3053\u305d - -WelcomeTopComponent.openGephiError=\u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u958b\u3051\u307e\u305b\u3093\u3002'.gephi'\u30d5\u30a1\u30a4\u30eb\u3068\u306e\u4e92\u63db\u6027\u304c\u5fc5\u9808\u3067\u3059\u3002 - -WelcomeTopComponent.openOnStartupCheckbox.text=\u8d77\u52d5\u6642\u306b\u958b\u304f - -WelcomeTopComponent.openFileLink.text=\u30b0\u30e9\u30d5\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f... +OpenIDE-Module-Short-Description=\u30a6\u30a7\u30eb\u30ab\u30e0\u30b9\u30af\u30ea\u30fc\u30f3\u30b3\u30f3\u30dd\u30fc\u30cd\u30f3\u30c8 +CTL_WelcomeAction=\u3088\u3046\u3053\u305d +CTL_WelcomeTopComponent=\u3088\u3046\u3053\u305d +!HINT_WelcomeTopComponent= +WelcomeTopComponent.labelRecent.text=\u6700\u8fd1\u5229\u7528\u3057\u305f\u3082\u306e\u3092\u958b\u304f +WelcomeTopComponent.labelNew.text=\u65b0\u898f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8 +WelcomeTopComponent.labelSamples.text=\u30b5\u30f3\u30d7\u30eb +WelcomeTopComponent.newProjectLink.text=\u65b0\u898f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8 +WelcomeTopComponent.header.title=Gephi\u3078\u3088\u3046\u3053\u305d + +WelcomeTopComponent.openOnStartupCheckbox.text=\u8d77\u52d5\u6642\u306b\u958b\u304f +WelcomeTopComponent.openFileLink.text=\u30b0\u30e9\u30d5\u306e\u30d5\u30a1\u30a4\u30eb\u3092\u958b\u304f... diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_ko.properties b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_ko.properties new file mode 100644 index 0000000000..35da989007 --- /dev/null +++ b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_ko.properties @@ -0,0 +1,14 @@ + + +CTL_WelcomeAction=\uD658\uC601 +CTL_WelcomeTopComponent=\uD658\uC601 +!HINT_WelcomeTopComponent= +WelcomeTopComponent.labelRecent.text=\uCD5C\uADFC \uCEF4\uD3EC\uB10C\uD2B8 \uC5F4\uAE30 +WelcomeTopComponent.labelNew.text=\uC0C8 \uD504\uB85C\uC81D\uD2B8 +WelcomeTopComponent.newProjectLink.text=\uC0C8 \uD504\uB85C\uC81D\uD2B8 +WelcomeTopComponent.openOnStartupCheckbox.text=\uC2DC\uC791\uD560 \uB54C \uC5F4\uAE30 +WelcomeTopComponent.openFileLink.text=\uADF8\uB798\uD504 \uD30C\uC77C \uC5F4\uAE30 ... +WelcomeTopComponent.labelProjects.text=\uD504\uB85C\uC81D\uD2B8 +OpenIDE-Module-Short-Description=\uC2DC\uC791 \uD654\uBA74 \uCEF4\uD3EC\uB10C\uD2B8 +WelcomeTopComponent.labelSamples.text=\uC0D8\uD50C +WelcomeTopComponent.header.title=Gephi\uC5D0 \uC624\uC2E0 \uAC83\uC744 \uD658\uC601\uD574\uC694 diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_nb_NO.properties b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_nb_NO.properties new file mode 100644 index 0000000000..8970200f12 --- /dev/null +++ b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_nb_NO.properties @@ -0,0 +1,11 @@ + + +CTL_WelcomeAction=Velkommen +CTL_WelcomeTopComponent=Velkommen +WelcomeTopComponent.labelNew.text=Nytt prosjekt +WelcomeTopComponent.newProjectLink.text=Nytt prosjekt +WelcomeTopComponent.header.title=Velkommen til Gephi +WelcomeTopComponent.openOnStartupCheckbox.text=\u00C5pne ved oppstart +WelcomeTopComponent.openFileLink.text=\u00C5pne graf-fil \u2026 +WelcomeTopComponent.labelSamples.text=Eksempler +OpenIDE-Module-Short-Description=Komponent for velkomstskjerm. diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_nl.properties b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_nl.properties new file mode 100644 index 0000000000..078817f634 --- /dev/null +++ b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_nl.properties @@ -0,0 +1,12 @@ +OpenIDE-Module-Short-Description=Welkomstschermcomponent +CTL_WelcomeAction=Welkom +CTL_WelcomeTopComponent=Welkom +!HINT_WelcomeTopComponent= +WelcomeTopComponent.labelRecent.text=Recent bestand openen +WelcomeTopComponent.labelNew.text=Nieuw project +WelcomeTopComponent.labelSamples.text=Voorbeelden +WelcomeTopComponent.newProjectLink.text=Nieuw project +WelcomeTopComponent.header.title=Welkom bij Gephi + +WelcomeTopComponent.openOnStartupCheckbox.text=Openen bij opstarten +WelcomeTopComponent.openFileLink.text=Graafbestand openen... diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_pt_BR.properties b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_pt_BR.properties index 9f4ce59f5e..5fc5b7dbd1 100644 --- a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_pt_BR.properties +++ b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_pt_BR.properties @@ -1,29 +1,12 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-15 12\:56+0000\nLast-Translator\: gephi \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -CTL_WelcomeAction=Bem vindo - -CTL_WelcomeTopComponent=Bem vindo - -OpenIDE-Module-Short-Description=Componente de tela de boas vindas - -WelcomeTopComponent.labelRecent.text=Abrir - -WelcomeTopComponent.labelNew.text=Novo projeto - -WelcomeTopComponent.labelSamples.text=Amostras - -WelcomeTopComponent.newProjectLink.text=Novo projeto - -WelcomeTopComponent.header.title=Bem vindo ao Gephi - -WelcomeTopComponent.openGephiError=Foi imposs\u00edvel abrir este arquivo. Para ser aberto, ele deveria ser compat\u00edvel com o formato .gephi. - -WelcomeTopComponent.openOnStartupCheckbox.text=Abrir na inicializa\u00e7\u00e3o do sistema - -WelcomeTopComponent.openFileLink.text=Abrir arquivo +OpenIDE-Module-Short-Description=Componente de tela de boas vindas +CTL_WelcomeAction=Bem vindo +CTL_WelcomeTopComponent=Bem vindo +!HINT_WelcomeTopComponent= +WelcomeTopComponent.labelRecent.text=Abrir +WelcomeTopComponent.labelNew.text=Novo projeto +WelcomeTopComponent.labelSamples.text=Amostras +WelcomeTopComponent.newProjectLink.text=Novo projeto +WelcomeTopComponent.header.title=Bem vindo ao Gephi + +WelcomeTopComponent.openOnStartupCheckbox.text=Abrir na inicializaηγo do sistema +WelcomeTopComponent.openFileLink.text=Abrir arquivo diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_ro.properties b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_ro.properties new file mode 100644 index 0000000000..3681ac7c6b --- /dev/null +++ b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_ro.properties @@ -0,0 +1,13 @@ + + +OpenIDE-Module-Short-Description=Component\u0103 ecran de bun venit +CTL_WelcomeAction=Bun venit +CTL_WelcomeTopComponent=Bun venit +!HINT_WelcomeTopComponent= +WelcomeTopComponent.labelRecent.text=Deschide recente +WelcomeTopComponent.labelNew.text=Proiect nou +WelcomeTopComponent.labelSamples.text=Exemple +WelcomeTopComponent.newProjectLink.text=Proiect nou +WelcomeTopComponent.header.title=Bun venit la Gephi +WelcomeTopComponent.openOnStartupCheckbox.text=Afi\u0219eaz\u0103 la pornire +WelcomeTopComponent.openFileLink.text=Deschide fi\u0219ier graf... diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_ru.properties b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_ru.properties index aba748b75e..b3bab15036 100644 --- a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_ru.properties +++ b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_ru.properties @@ -1,29 +1,12 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-22 06\:44+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -CTL_WelcomeAction=\u041f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 - -CTL_WelcomeTopComponent=\u041f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 - -OpenIDE-Module-Short-Description=\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u044d\u043a\u0440\u0430\u043d\u0430 \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f - -WelcomeTopComponent.labelRecent.text=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b - -WelcomeTopComponent.labelNew.text=\u041d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 - -WelcomeTopComponent.labelSamples.text=\u041f\u0440\u0438\u043c\u0435\u0440\u044b - -WelcomeTopComponent.newProjectLink.text=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 - -WelcomeTopComponent.header.title=\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u0432 Gephi - -WelcomeTopComponent.openGephiError=\u041d\u0435\u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043a\u0440\u044b\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0439 \u0444\u0430\u0439\u043b. \u0424\u043e\u0440\u043c\u0430\u0442 \u0444\u0430\u0439\u043b\u0430 \u0434\u043e\u043b\u0436\u0435\u043d \u0431\u044b\u0442\u044c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u043c \u0441 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u043c '.gephi'-\u0444\u0430\u0439\u043b\u043e\u0432. - -WelcomeTopComponent.openOnStartupCheckbox.text=\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 - -WelcomeTopComponent.openFileLink.text=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b \u0441 \u0433\u0440\u0430\u0444\u043e\u043c... +OpenIDE-Module-Short-Description=\u041a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442 \u044d\u043a\u0440\u0430\u043d\u0430 \u043f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u044f +CTL_WelcomeAction=\u041f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 +CTL_WelcomeTopComponent=\u041f\u0440\u0438\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0435 +!HINT_WelcomeTopComponent= +WelcomeTopComponent.labelRecent.text=\u041f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b +WelcomeTopComponent.labelNew.text=\u041d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 +WelcomeTopComponent.labelSamples.text=\u041f\u0440\u0438\u043c\u0435\u0440\u044b +WelcomeTopComponent.newProjectLink.text=\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 +WelcomeTopComponent.header.title=\u0414\u043e\u0431\u0440\u043e \u043f\u043e\u0436\u0430\u043b\u043e\u0432\u0430\u0442\u044c \u0432 Gephi + +WelcomeTopComponent.openOnStartupCheckbox.text=\u041f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 +WelcomeTopComponent.openFileLink.text=\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0444\u0430\u0439\u043b \u0441 \u0433\u0440\u0430\u0444\u043e\u043c... diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_th.properties b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_th.properties new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_th.properties @@ -0,0 +1 @@ + diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_tr.properties b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_tr.properties new file mode 100644 index 0000000000..1cd4830f86 --- /dev/null +++ b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_tr.properties @@ -0,0 +1,11 @@ +OpenIDE-Module-Short-Description=Kar\u015F\u0131lama ekran\u0131 bile\u015Feni +CTL_WelcomeAction=Welcome +CTL_WelcomeTopComponent=Welcome +!HINT_WelcomeTopComponent= +WelcomeTopComponent.labelRecent.text=Open recent +WelcomeTopComponent.labelNew.text=Yeni Proje +WelcomeTopComponent.labelSamples.text=Samples +WelcomeTopComponent.newProjectLink.text=Yeni Proje +WelcomeTopComponent.header.title=Welcome to Gephi +WelcomeTopComponent.openOnStartupCheckbox.text=Open at startup +WelcomeTopComponent.openFileLink.text=Open Graph File... diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_uk.properties b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_uk.properties new file mode 100644 index 0000000000..123a7cbb3e --- /dev/null +++ b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_uk.properties @@ -0,0 +1,11 @@ +WelcomeTopComponent.labelProjects.text=\u041F\u0440\u043E\u0435\u043A\u0442\u0438 +OpenIDE-Module-Short-Description=\u041A\u043E\u043C\u043F\u043E\u043D\u0435\u043D\u0442 \u0435\u043A\u0440\u0430\u043D\u0430 \u043F\u0440\u0438\u0432\u0456\u0442\u0430\u043D\u043D\u044F +CTL_WelcomeAction=\u041B\u0430\u0441\u043A\u0430\u0432\u043E \u043F\u0440\u043E\u0441\u0438\u043C\u043E +CTL_WelcomeTopComponent=\u041B\u0430\u0441\u043A\u0430\u0432\u043E \u043F\u0440\u043E\u0441\u0438\u043C\u043E +WelcomeTopComponent.labelRecent.text=\u0412\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u043E\u0441\u0442\u0430\u043D\u043D\u0456 +WelcomeTopComponent.labelNew.text=\u041D\u043E\u0432\u0438\u0439 \u043F\u0440\u043E\u0435\u043A\u0442 +WelcomeTopComponent.labelSamples.text=\u0417\u0440\u0430\u0437\u043A\u0438 +WelcomeTopComponent.newProjectLink.text=\u041D\u043E\u0432\u0438\u0439 \u043F\u0440\u043E\u0435\u043A\u0442 +WelcomeTopComponent.header.title=\u041B\u0430\u0441\u043A\u0430\u0432\u043E \u043F\u0440\u043E\u0441\u0438\u043C\u043E \u0434\u043E Gephi +WelcomeTopComponent.openOnStartupCheckbox.text=\u0412\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u043F\u0456\u0434 \u0447\u0430\u0441 \u0437\u0430\u043F\u0443\u0441\u043A\u0443 +WelcomeTopComponent.openFileLink.text=\u0412\u0456\u0434\u043A\u0440\u0438\u0442\u0438 \u0444\u0430\u0439\u043B \u0433\u0440\u0430\u0444\u0456\u043A\u0430... diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_zh_CN.properties b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_zh_CN.properties index a960270621..5cfccc97cc 100644 --- a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_zh_CN.properties +++ b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_zh_CN.properties @@ -1,28 +1,12 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:04+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -CTL_WelcomeAction=\u6b22\u8fce - -CTL_WelcomeTopComponent=\u6b22\u8fce - -OpenIDE-Module-Short-Description=\u6b22\u8fce\u5c4f\u5e55\u7ec4\u4ef6 - -WelcomeTopComponent.labelRecent.text=\u8fd1\u6765\u6253\u5f00 - -WelcomeTopComponent.labelNew.text=\u65b0\u5efa\u5de5\u7a0b - -WelcomeTopComponent.labelSamples.text=\u6837\u4f8b - -WelcomeTopComponent.newProjectLink.text=\u65b0\u5efa\u5de5\u7a0b - -WelcomeTopComponent.header.title=\u6b22\u8fce\u6765\u5230Gephi - -WelcomeTopComponent.openGephiError=\u672a\u80fd\u6253\u5f00\u6b64\u6587\u4ef6\u3002\u53ea\u80fd\u6253\u5f00'.gephi'\u517c\u5bb9\u6587\u4ef6\u3002 - -WelcomeTopComponent.openOnStartupCheckbox.text=\u542f\u52a8\u65f6\u6253\u5f00 - -WelcomeTopComponent.openFileLink.text=\u6253\u5f00\u56fe\u6587\u4ef6... +OpenIDE-Module-Short-Description=\u6b22\u8fce\u5c4f\u5e55\u7ec4\u4ef6 +CTL_WelcomeAction=\u6b22\u8fce +CTL_WelcomeTopComponent=\u6b22\u8fce +!HINT_WelcomeTopComponent= +WelcomeTopComponent.labelRecent.text=\u8fd1\u6765\u6253\u5f00 +WelcomeTopComponent.labelNew.text=\u65b0\u5efa\u5de5\u7a0b +WelcomeTopComponent.labelSamples.text=\u6837\u4f8b +WelcomeTopComponent.newProjectLink.text=\u65b0\u5efa\u5de5\u7a0b +WelcomeTopComponent.header.title=\u6b22\u8fce\u6765\u5230 Gephi + +WelcomeTopComponent.openOnStartupCheckbox.text=\u542f\u52a8\u65f6\u6253\u5f00 +WelcomeTopComponent.openFileLink.text=\u6253\u5f00\u56fe\u6587\u4ef6... diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_zh_TW.properties b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_zh_TW.properties new file mode 100644 index 0000000000..745c545659 --- /dev/null +++ b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/Bundle_zh_TW.properties @@ -0,0 +1,12 @@ +OpenIDE-Module-Short-Description=\u6b61\u8fce\u756b\u9762\u5143\u4ef6 +CTL_WelcomeAction=\u6b61\u8fce\u4f7f\u7528 +CTL_WelcomeTopComponent=\u6b61\u8fce\u4f7f\u7528 +!HINT_WelcomeTopComponent= +WelcomeTopComponent.labelRecent.text=\u958b\u555f\u6700\u8fd1\u6a94\u6848 +WelcomeTopComponent.labelNew.text=\u958b\u65b0\u5c08\u6848 +WelcomeTopComponent.labelSamples.text=\u7bc4\u4f8b\u6a94\u6848 +WelcomeTopComponent.newProjectLink.text=\u958b\u65b0\u5c08\u6848 +WelcomeTopComponent.header.title=\u6b61\u8fce\u4f7f\u7528 Gephi + +WelcomeTopComponent.openOnStartupCheckbox.text=\u9032\u5165\u6642\u958b\u555f +WelcomeTopComponent.openFileLink.text=\u958b\u555f Graph \u6a94\u6848... diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/cs.po b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/cs.po deleted file mode 100644 index 8de46cce77..0000000000 --- a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/cs.po +++ /dev/null @@ -1,52 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-23 16:34+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "CTL_WelcomeAction" -msgstr "VΓ­tejte" - -msgid "CTL_WelcomeTopComponent" -msgstr "VΓ­tejte" - -msgid "OpenIDE-Module-Short-Description" -msgstr "SoučÑst uvΓ­tacΓ­ obrazovky" - -msgid "WelcomeTopComponent.labelRecent.text" -msgstr "OtevΕ™Γ­t nedΓ‘vnΓ©" - -msgid "WelcomeTopComponent.labelNew.text" -msgstr "NovΓ½ projekt" - -msgid "WelcomeTopComponent.labelSamples.text" -msgstr "UkΓ‘zky" - -msgid "WelcomeTopComponent.newProjectLink.text" -msgstr "NovΓ½ projekt" - -msgid "WelcomeTopComponent.header.title" -msgstr "VΓ­tejte v Gephi" - -msgid "WelcomeTopComponent.openGephiError" -msgstr "Nelze otevΕ™Γ­t tento soubor. MusΓ­ to bΓ½t kompatibilnΓ­ soubor '.gephi'" - -msgid "WelcomeTopComponent.openOnStartupCheckbox.text" -msgstr "OtevΕ™Γ­t pΕ™i spuΕ‘tΔ›nΓ­" - -msgid "WelcomeTopComponent.openFileLink.text" -msgstr "OtevΕ™Γ­t soubor grafu..." diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/es.po b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/es.po deleted file mode 100644 index ca1eabe43f..0000000000 --- a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/es.po +++ /dev/null @@ -1,52 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-15 12:56+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "CTL_WelcomeAction" -msgstr "Bienvenida" - -msgid "CTL_WelcomeTopComponent" -msgstr "Bienvenida" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Componente para la pantalla de bienvenida" - -msgid "WelcomeTopComponent.labelRecent.text" -msgstr "Abrir recientes" - -msgid "WelcomeTopComponent.labelNew.text" -msgstr "Nuevo proyecto" - -msgid "WelcomeTopComponent.labelSamples.text" -msgstr "Ejemplos" - -msgid "WelcomeTopComponent.newProjectLink.text" -msgstr "Nuevo proyecto" - -msgid "WelcomeTopComponent.header.title" -msgstr "Bienvenido a Gephi" - -msgid "WelcomeTopComponent.openGephiError" -msgstr "Imposible abrir este archivo. Debe ser un archivo '.gephi' compatible." - -msgid "WelcomeTopComponent.openOnStartupCheckbox.text" -msgstr "Mostrar al iniciar" - -msgid "WelcomeTopComponent.openFileLink.text" -msgstr "Abrir un archivo de grafo" diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/fr.po b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/fr.po deleted file mode 100644 index 23f70e3fb6..0000000000 --- a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/fr.po +++ /dev/null @@ -1,52 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-15 12:56+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "CTL_WelcomeAction" -msgstr "Accueil" - -msgid "CTL_WelcomeTopComponent" -msgstr "Accueil" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Γ‰cran d'accueil" - -msgid "WelcomeTopComponent.labelRecent.text" -msgstr "RΓ©cemment ouvert" - -msgid "WelcomeTopComponent.labelNew.text" -msgstr "Nouveau projet" - -msgid "WelcomeTopComponent.labelSamples.text" -msgstr "Exemples" - -msgid "WelcomeTopComponent.newProjectLink.text" -msgstr "Nouveau projet" - -msgid "WelcomeTopComponent.header.title" -msgstr "Bienvenue dans Gephi !" - -msgid "WelcomeTopComponent.openGephiError" -msgstr "Impossible d'ouvrir ce fichier. Ce doit Γͺtre un .gephi compatible." - -msgid "WelcomeTopComponent.openOnStartupCheckbox.text" -msgstr "Ouvrir au dΓ©marrage" - -msgid "WelcomeTopComponent.openFileLink.text" -msgstr "Ouvrir un fichier de graphe..." diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/ja.po b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/ja.po deleted file mode 100644 index f3b0a29de2..0000000000 --- a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/ja.po +++ /dev/null @@ -1,52 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-01 01:28+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "CTL_WelcomeAction" -msgstr "γ‚ˆγ†γ“γ" - -msgid "CTL_WelcomeTopComponent" -msgstr "γ‚ˆγ†γ“γ" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ウェルカムスクγƒͺγƒΌγƒ³γ‚³γƒ³γƒγƒΌγƒγƒ³γƒˆ" - -msgid "WelcomeTopComponent.labelRecent.text" -msgstr "ζœ€θΏ‘εˆ©η”¨γ—γŸγ‚‚γγ‚’開く" - -msgid "WelcomeTopComponent.labelNew.text" -msgstr "ζ–°θ¦γƒ—γƒ­γ‚Έγ‚§γ‚―γƒˆ" - -msgid "WelcomeTopComponent.labelSamples.text" -msgstr "ァンプル" - -msgid "WelcomeTopComponent.newProjectLink.text" -msgstr "ζ–°θ¦γƒ—γƒ­γ‚Έγ‚§γ‚―γƒˆ" - -msgid "WelcomeTopComponent.header.title" -msgstr "GephiγΈγ‚ˆγ†γ“γ" - -msgid "WelcomeTopComponent.openGephiError" -msgstr "こγγƒ•γ‚‘むルは開けません。'.gephi'フゑむルとγδΊ’ζ›ζ€§γŒεΏ…ι ˆγ§γ™γ€‚" - -msgid "WelcomeTopComponent.openOnStartupCheckbox.text" -msgstr "衷動時に開く" - -msgid "WelcomeTopComponent.openFileLink.text" -msgstr "グラフγγƒ•γ‚‘むルを開く..." diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/org-gephi-desktop-welcome.pot b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/org-gephi-desktop-welcome.pot deleted file mode 100644 index a7b2c6d402..0000000000 --- a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/org-gephi-desktop-welcome.pot +++ /dev/null @@ -1,49 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "CTL_WelcomeAction" -msgstr "Welcome" - -msgid "CTL_WelcomeTopComponent" -msgstr "Welcome" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Welcome screen component" - -msgid "WelcomeTopComponent.labelRecent.text" -msgstr "Open recent" - -msgid "WelcomeTopComponent.labelNew.text" -msgstr "New Project" - -msgid "WelcomeTopComponent.labelSamples.text" -msgstr "Samples" - -msgid "WelcomeTopComponent.newProjectLink.text" -msgstr "New Project" - -msgid "WelcomeTopComponent.header.title" -msgstr "Welcome to Gephi" - -msgid "WelcomeTopComponent.openGephiError" -msgstr "Impossible to open this file. It must be a compatible '.gephi' file." - -msgid "WelcomeTopComponent.openOnStartupCheckbox.text" -msgstr "Open at startup" - -msgid "WelcomeTopComponent.openFileLink.text" -msgstr "Open Graph File..." diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/pt_BR.po b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/pt_BR.po deleted file mode 100644 index 48454a186a..0000000000 --- a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/pt_BR.po +++ /dev/null @@ -1,52 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-15 12:56+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "CTL_WelcomeAction" -msgstr "Bem vindo" - -msgid "CTL_WelcomeTopComponent" -msgstr "Bem vindo" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Componente de tela de boas vindas" - -msgid "WelcomeTopComponent.labelRecent.text" -msgstr "Abrir" - -msgid "WelcomeTopComponent.labelNew.text" -msgstr "Novo projeto" - -msgid "WelcomeTopComponent.labelSamples.text" -msgstr "Amostras" - -msgid "WelcomeTopComponent.newProjectLink.text" -msgstr "Novo projeto" - -msgid "WelcomeTopComponent.header.title" -msgstr "Bem vindo ao Gephi" - -msgid "WelcomeTopComponent.openGephiError" -msgstr "Foi impossΓ­vel abrir este arquivo. Para ser aberto, ele deveria ser compatΓ­vel com o formato .gephi." - -msgid "WelcomeTopComponent.openOnStartupCheckbox.text" -msgstr "Abrir na inicializaΓ§Γ£o do sistema" - -msgid "WelcomeTopComponent.openFileLink.text" -msgstr "Abrir arquivo " diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/resources/gephifile20.png b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/resources/gephifile20.png deleted file mode 100644 index 8a2a4be18a..0000000000 Binary files a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/resources/gephifile20.png and /dev/null differ diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/resources/logo_transparent_small.png b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/resources/logo_transparent_small.png deleted file mode 100644 index 6390b1b60e..0000000000 Binary files a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/resources/logo_transparent_small.png and /dev/null differ diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/ru.po b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/ru.po deleted file mode 100644 index 157e5c0f3d..0000000000 --- a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/ru.po +++ /dev/null @@ -1,52 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-22 06:44+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "CTL_WelcomeAction" -msgstr "ΠŸΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅" - -msgid "CTL_WelcomeTopComponent" -msgstr "ΠŸΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΠΈΠ΅" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ΠšΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚ экрана привСтствия" - -msgid "WelcomeTopComponent.labelRecent.text" -msgstr "ПослСдниС Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹" - -msgid "WelcomeTopComponent.labelNew.text" -msgstr "Новый ΠΏΡ€ΠΎΠ΅ΠΊΡ‚" - -msgid "WelcomeTopComponent.labelSamples.text" -msgstr "ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹" - -msgid "WelcomeTopComponent.newProjectLink.text" -msgstr "Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚" - -msgid "WelcomeTopComponent.header.title" -msgstr "Π”ΠΎΠ±Ρ€ΠΎ ΠΏΠΎΠΆΠ°Π»ΠΎΠ²Π°Ρ‚ΡŒ Π² Gephi" - -msgid "WelcomeTopComponent.openGephiError" -msgstr "НСвозмоТно ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ». Π€ΠΎΡ€ΠΌΠ°Ρ‚ Ρ„Π°ΠΉΠ»Π° Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ совмСстимым с Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΎΠΌ '.gephi'-Ρ„Π°ΠΉΠ»ΠΎΠ²." - -msgid "WelcomeTopComponent.openOnStartupCheckbox.text" -msgstr "ΠŸΠΎΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ запускС" - -msgid "WelcomeTopComponent.openFileLink.text" -msgstr "ΠžΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ„Π°ΠΉΠ» с Π³Ρ€Π°Ρ„ΠΎΠΌ..." diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/samples/Java.gexf b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/samples/Java.gexf index c0f882393b..55ef27924f 100644 --- a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/samples/Java.gexf +++ b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/samples/Java.gexf @@ -1,5 +1,5 @@ - + Gephi 0.7 diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/samples/Les Miserables.gexf b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/samples/Les Miserables.gexf index e1b34f460b..7d2eba2961 100644 --- a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/samples/Les Miserables.gexf +++ b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/samples/Les Miserables.gexf @@ -1,5 +1,5 @@ - + Gephi 0.8.1 diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/samples/US Airports.gexf b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/samples/US Airports.gexf new file mode 100644 index 0000000000..ee709fffae --- /dev/null +++ b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/samples/US Airports.gexf @@ -0,0 +1,3901 @@ + + + + Gephi 0.9.3 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/zh_CN.po b/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/zh_CN.po deleted file mode 100644 index 337750a4b4..0000000000 --- a/modules/WelcomeScreen/src/main/resources/org/gephi/desktop/welcome/zh_CN.po +++ /dev/null @@ -1,51 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:04+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "CTL_WelcomeAction" -msgstr "欒迎" - -msgid "CTL_WelcomeTopComponent" -msgstr "欒迎" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ζ¬’θΏŽε±εΉ•η»„δ»Ά" - -msgid "WelcomeTopComponent.labelRecent.text" -msgstr "θΏ‘ζ₯打开" - -msgid "WelcomeTopComponent.labelNew.text" -msgstr "ζ–°ε»Ίε·₯程" - -msgid "WelcomeTopComponent.labelSamples.text" -msgstr "ζ ·δΎ‹" - -msgid "WelcomeTopComponent.newProjectLink.text" -msgstr "ζ–°ε»Ίε·₯程" - -msgid "WelcomeTopComponent.header.title" -msgstr "欒迎ζ₯到Gephi" - -msgid "WelcomeTopComponent.openGephiError" -msgstr "ζœͺ能打开歀文仢。εͺ能打开'.gephi'ε…ΌεΉζ–‡δ»Άγ€‚" - -msgid "WelcomeTopComponent.openOnStartupCheckbox.text" -msgstr "ε―εŠ¨ζ—Άζ‰“εΌ€" - -msgid "WelcomeTopComponent.openFileLink.text" -msgstr "打开图文仢..." diff --git a/modules/WorkspaceUI/pom.xml b/modules/WorkspaceUI/pom.xml deleted file mode 100644 index eab092ebcb..0000000000 --- a/modules/WorkspaceUI/pom.xml +++ /dev/null @@ -1,65 +0,0 @@ - - - 4.0.0 - - gephi-parent - org.gephi - 0.9-SNAPSHOT - ../.. - - - org.gephi - workspace-ui - 0.9-SNAPSHOT - nbm - - WorkspaceUI - - - - org.netbeans.api - org-netbeans-api-annotations-common - - - ${project.groupId} - project-api - - - org.netbeans.api - org-openide-awt - - - org.netbeans.api - org-openide-dialogs - - - org.netbeans.api - org-openide-util - - - org.netbeans.api - org-openide-util-lookup - - - org.netbeans.api - org-openide-windows - - - ${project.groupId} - ui-components - - - - - - - org.codehaus.mojo - nbm-maven-plugin - - - - - - - - diff --git a/modules/WorkspaceUI/src/main/java/org/gephi/ui/workspace/WorkspacePanePanel.form b/modules/WorkspaceUI/src/main/java/org/gephi/ui/workspace/WorkspacePanePanel.form deleted file mode 100644 index 557653a1af..0000000000 --- a/modules/WorkspaceUI/src/main/java/org/gephi/ui/workspace/WorkspacePanePanel.form +++ /dev/null @@ -1,84 +0,0 @@ - - -
              - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/WorkspaceUI/src/main/java/org/gephi/ui/workspace/WorkspacePanePanel.java b/modules/WorkspaceUI/src/main/java/org/gephi/ui/workspace/WorkspacePanePanel.java deleted file mode 100644 index dd8a2a5b87..0000000000 --- a/modules/WorkspaceUI/src/main/java/org/gephi/ui/workspace/WorkspacePanePanel.java +++ /dev/null @@ -1,193 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.ui.workspace; - -import java.awt.Cursor; -import java.awt.event.ActionEvent; -import java.awt.event.MouseEvent; -import java.awt.event.MouseListener; -import javax.swing.AbstractAction; -import javax.swing.UIManager; -import org.gephi.project.api.ProjectController; -import org.gephi.ui.components.CloseButton; -import org.gephi.project.api.Workspace; -import org.gephi.project.api.WorkspaceInformation; -import org.openide.DialogDisplayer; -import org.openide.NotifyDescriptor; -import org.openide.util.Lookup; -import org.openide.util.NbBundle; - -/** - * - * @author Mathieu Bastian - */ -public final class WorkspacePanePanel extends javax.swing.JPanel implements MouseListener { - - private final Workspace workspace; - - public WorkspacePanePanel(Workspace workspace) { - this.workspace = workspace; - initComponents(); - setOpaque(true); - setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - - //detailsLabel.setFont(detailsLabel.getFont().deriveFont((float) (detailsLabel.getFont().getSize() - 2))); - closeButton.setAction(new DeleteAction()); - closeButton.setCursor(Cursor.getDefaultCursor()); - - //Workspace info - WorkspaceInformation info = workspace.getLookup().lookup(WorkspaceInformation.class); - workspaceLabel.setText(info.getName()); - detailsLabel.setText(info.getSource()); - - //Selected - ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); - boolean selected = pc.getCurrentWorkspace() == workspace; - if (selected) { - //setBackground(UIManager.getDefaults().getColor("ComboBox.selectionBackground")); - workspaceLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); - } else { - //setBackground(UIManager.getDefaults().getColor("ComboBox.background")); - workspaceLabel.setFont(new java.awt.Font("Tahoma", 0, 11)); - } - setBackground(UIManager.getDefaults().getColor("ComboBox.background")); - addMouseListener(this); - } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // //GEN-BEGIN:initComponents - private void initComponents() { - - workspaceLabel = new javax.swing.JLabel(); - detailsLabel = new javax.swing.JLabel(); - closeButton = new CloseButton(); - - workspaceLabel.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N - workspaceLabel.setText(org.openide.util.NbBundle.getMessage(WorkspacePanePanel.class, "WorkspacePanePanel.workspaceLabel.text")); // NOI18N - - detailsLabel.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N - detailsLabel.setForeground(new java.awt.Color(153, 153, 153)); - detailsLabel.setText(org.openide.util.NbBundle.getMessage(WorkspacePanePanel.class, "WorkspacePanePanel.detailsLabel.text")); // NOI18N - - closeButton.setToolTipText(org.openide.util.NbBundle.getMessage(WorkspacePanePanel.class, "WorkspacePanePanel.closeButton.toolTipText")); // NOI18N - - javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this); - this.setLayout(layout); - layout.setHorizontalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) - .addComponent(detailsLabel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) - .addComponent(workspaceLabel, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 270, Short.MAX_VALUE)) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 25, Short.MAX_VALUE) - .addComponent(closeButton) - .addContainerGap()) - ); - layout.setVerticalGroup( - layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) - .addGroup(layout.createSequentialGroup() - .addComponent(workspaceLabel) - .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) - .addComponent(detailsLabel)) - .addGroup(layout.createSequentialGroup() - .addContainerGap() - .addComponent(closeButton))) - .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) - ); - }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JButton closeButton; - private javax.swing.JLabel detailsLabel; - private javax.swing.JLabel workspaceLabel; - // End of variables declaration//GEN-END:variables - - @Override - public void mouseClicked(MouseEvent e) { - ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); - if (pc.getCurrentWorkspace() != workspace) { - pc.openWorkspace(workspace); - } - } - - @Override - public void mousePressed(MouseEvent e) { - } - - @Override - public void mouseReleased(MouseEvent e) { - } - - @Override - public void mouseEntered(MouseEvent e) { - setBackground(UIManager.getDefaults().getColor("ComboBox.selectionBackground")); - } - - @Override - public void mouseExited(MouseEvent e) { - setBackground(UIManager.getDefaults().getColor("ComboBox.background")); - } - // End of variables declaration - - private class DeleteAction extends AbstractAction { - - @Override - public void actionPerformed(ActionEvent actionEvent) { - String message = NbBundle.getMessage(WorkspacePanePanel.class, "WorkspacePanePanel_closeWorkspace_Question"); - String title = NbBundle.getMessage(WorkspacePanePanel.class, "WorkspacePanePanel_closeWorkspace_Title"); - NotifyDescriptor dd = new NotifyDescriptor(message, title, - NotifyDescriptor.YES_NO_OPTION, - NotifyDescriptor.QUESTION_MESSAGE, null, null); - Object retType = DialogDisplayer.getDefault().notify(dd); - if (retType == NotifyDescriptor.YES_OPTION) { - ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); - pc.deleteWorkspace(workspace); - } - } - } -} diff --git a/modules/WorkspaceUI/src/main/java/org/gephi/ui/workspace/WorkspaceUISelector.java b/modules/WorkspaceUI/src/main/java/org/gephi/ui/workspace/WorkspaceUISelector.java deleted file mode 100644 index 7f9d3bfd10..0000000000 --- a/modules/WorkspaceUI/src/main/java/org/gephi/ui/workspace/WorkspaceUISelector.java +++ /dev/null @@ -1,104 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ui.workspace; - -import java.awt.Component; -import org.gephi.project.api.ProjectController; -import org.gephi.project.api.Workspace; -import org.gephi.project.api.WorkspaceListener; -import org.openide.awt.StatusLineElementProvider; -import org.openide.util.Lookup; -import org.openide.util.lookup.ServiceProvider; -import org.openide.windows.WindowManager; - -/** - * - * @author Mathieu Bastian - */ -@ServiceProvider(service = org.openide.awt.StatusLineElementProvider.class, position = -100) -public class WorkspaceUISelector implements StatusLineElementProvider, WorkspaceListener { - - private WorkspaceUISelectorPanel panel; - - @Override - public Component getStatusLineElement() { - WindowManager.getDefault().invokeWhenUIReady(new Runnable() { - - @Override - public void run() { - ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); - pc.addWorkspaceListener(WorkspaceUISelector.this); - if (pc.getCurrentWorkspace() != null) { - initialize(pc.getCurrentWorkspace()); - select(pc.getCurrentWorkspace()); - } - } - }); - - panel = new WorkspaceUISelectorPanel(); - return panel; - } - - @Override - public void initialize(Workspace workspace) { - panel.refreshList(); - } - - @Override - public void select(Workspace workspace) { - panel.setSelectedWorkspace(workspace); - } - - @Override - public void unselect(Workspace workspace) { - } - - @Override - public void close(Workspace workspace) { - panel.refreshList(); - } - - @Override - public void disable() { - panel.noSelectedWorkspace(); - } -} diff --git a/modules/WorkspaceUI/src/main/java/org/gephi/ui/workspace/WorkspaceUISelectorPanel.form b/modules/WorkspaceUI/src/main/java/org/gephi/ui/workspace/WorkspaceUISelectorPanel.form deleted file mode 100644 index 4b2b336846..0000000000 --- a/modules/WorkspaceUI/src/main/java/org/gephi/ui/workspace/WorkspaceUISelectorPanel.form +++ /dev/null @@ -1,99 +0,0 @@ - - -
              - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/modules/WorkspaceUI/src/main/java/org/gephi/ui/workspace/WorkspaceUISelectorPanel.java b/modules/WorkspaceUI/src/main/java/org/gephi/ui/workspace/WorkspaceUISelectorPanel.java deleted file mode 100644 index f9cfa0817e..0000000000 --- a/modules/WorkspaceUI/src/main/java/org/gephi/ui/workspace/WorkspaceUISelectorPanel.java +++ /dev/null @@ -1,263 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. - */ -package org.gephi.ui.workspace; - -import java.awt.Cursor; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import javax.swing.SwingUtilities; -import javax.swing.event.ChangeEvent; -import javax.swing.event.ChangeListener; -import org.gephi.project.api.ProjectController; -import org.gephi.project.api.WorkspaceProvider; -import org.gephi.ui.components.JPopupPane; -import org.gephi.project.api.Workspace; -import org.gephi.project.api.WorkspaceInformation; -import org.openide.util.Lookup; - -/** - * - * @author Mathieu Bastian - */ -public class WorkspaceUISelectorPanel extends javax.swing.JPanel implements ChangeListener { - - private JPopupPane pane; - private Workspace workspace; - - /** Creates new form WorkspaceUISelectorPanel */ - public WorkspaceUISelectorPanel() { - initComponents(); - workspaceLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); - - workspaceLabel.addMouseListener(new MouseAdapter() { - - @Override - public void mouseClicked(MouseEvent e) { - WorkspaceUISelectorPopupContent content = new WorkspaceUISelectorPopupContent(); - ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); - if (pc.getCurrentProject() == null) { - return; - } - for (Workspace w : pc.getCurrentProject().getLookup().lookup(WorkspaceProvider.class).getWorkspaces()) { - content.addListComponent(new WorkspacePanePanel(w)); - } - pane = new JPopupPane(WorkspaceUISelectorPanel.this, content); - pane.showPopupPane(); - } - }); - - leftArrowButton.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - Workspace sel = getPrecedentWorkspace(workspace); - ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); - if (pc.getCurrentWorkspace() != sel) { - pc.openWorkspace(sel); - } - } - }); - - rightArrowButton.addActionListener(new ActionListener() { - - @Override - public void actionPerformed(ActionEvent e) { - Workspace sel = getNextWorkspace(workspace); - ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); - if (pc.getCurrentWorkspace() != sel) { - pc.openWorkspace(sel); - } - } - }); - - ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); - if (pc.getCurrentWorkspace() != null) { - setSelectedWorkspace(pc.getCurrentWorkspace()); - } else { - noSelectedWorkspace(); - } - } - - public void setSelectedWorkspace(Workspace workspace) { - if (this.workspace != null) { - this.workspace.getLookup().lookup(WorkspaceInformation.class).removeChangeListener(this); - } - workspaceLabel.setFont(new java.awt.Font("Tahoma", 0, 11)); - workspaceLabel.setText(workspace.getLookup().lookup(WorkspaceInformation.class).getName()); - workspaceLabel.setEnabled(true); - leftArrowButton.setEnabled(getPrecedentWorkspace(workspace) != null); - rightArrowButton.setEnabled(getNextWorkspace(workspace) != null); - if (pane != null && pane.isPopupShown()) { - pane.hidePopup(); - } - this.workspace = workspace; - this.workspace.getLookup().lookup(WorkspaceInformation.class).addChangeListener(this); - } - - public void noSelectedWorkspace() { - workspaceLabel.setFont(new java.awt.Font("Tahoma", 2, 11)); // NOI18N - workspaceLabel.setText(org.openide.util.NbBundle.getMessage(WorkspaceUISelectorPanel.class, "WorkspaceUISelectorPanel.workspaceLabel.text")); // NOI18N - workspaceLabel.setEnabled(false); - leftArrowButton.setEnabled(false); - rightArrowButton.setEnabled(false); - if (workspace != null) { - workspace.getLookup().lookup(WorkspaceInformation.class).removeChangeListener(this); - } - workspace = null; - } - - public void refreshList() { - if (workspace != null) { - leftArrowButton.setEnabled(getPrecedentWorkspace(workspace) != null); - rightArrowButton.setEnabled(getNextWorkspace(workspace) != null); - } - } - - @Override - public void stateChanged(ChangeEvent e) { - SwingUtilities.invokeLater(new Runnable() { - - @Override - public void run() { - workspaceLabel.setText(workspace.getLookup().lookup(WorkspaceInformation.class).getName()); - } - }); - } - - private Workspace getPrecedentWorkspace(Workspace workspace) { - ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); - Workspace prec = null; - Workspace[] workspaces = pc.getCurrentProject().getLookup().lookup(WorkspaceProvider.class).getWorkspaces(); - for (Workspace w : workspaces) { - if (w == workspace) { - break; - } - prec = w; - } - return prec; - } - - private Workspace getNextWorkspace(Workspace workspace) { - ProjectController pc = Lookup.getDefault().lookup(ProjectController.class); - Workspace next = null; - Workspace[] workspaces = pc.getCurrentProject().getLookup().lookup(WorkspaceProvider.class).getWorkspaces(); - for (Workspace w : workspaces) { - if (next == workspace) { - return w; - } - next = w; - } - return null; - } - - /** This method is called from within the constructor to - * initialize the form. - * WARNING: Do NOT modify this code. The content of this method is - * always regenerated by the Form Editor. - */ - @SuppressWarnings("unchecked") - // //GEN-BEGIN:initComponents - private void initComponents() { - java.awt.GridBagConstraints gridBagConstraints; - - workspaceButtonsBar = new javax.swing.JToolBar(); - leftArrowButton = new javax.swing.JButton(); - rightArrowButton = new javax.swing.JButton(); - workspaceLabel = new javax.swing.JLabel(); - jSeparator2 = new javax.swing.JToolBar.Separator(); - - setLayout(new java.awt.GridBagLayout()); - - workspaceButtonsBar.setFloatable(false); - workspaceButtonsBar.setRollover(true); - - leftArrowButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/ui/workspace/resources/leftArrow.png"))); // NOI18N - leftArrowButton.setText(org.openide.util.NbBundle.getMessage(WorkspaceUISelectorPanel.class, "WorkspaceUISelectorPanel.leftArrowButton.text")); // NOI18N - leftArrowButton.setToolTipText(org.openide.util.NbBundle.getMessage(WorkspaceUISelectorPanel.class, "WorkspaceUISelectorPanel.leftArrowButton.toolTipText")); // NOI18N - leftArrowButton.setEnabled(false); - leftArrowButton.setFocusable(false); - leftArrowButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); - leftArrowButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - workspaceButtonsBar.add(leftArrowButton); - - rightArrowButton.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/ui/workspace/resources/rightArrow.png"))); // NOI18N - rightArrowButton.setText(org.openide.util.NbBundle.getMessage(WorkspaceUISelectorPanel.class, "WorkspaceUISelectorPanel.rightArrowButton.text")); // NOI18N - rightArrowButton.setToolTipText(org.openide.util.NbBundle.getMessage(WorkspaceUISelectorPanel.class, "WorkspaceUISelectorPanel.rightArrowButton.toolTipText")); // NOI18N - rightArrowButton.setEnabled(false); - rightArrowButton.setFocusable(false); - rightArrowButton.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER); - rightArrowButton.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM); - workspaceButtonsBar.add(rightArrowButton); - - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 3; - gridBagConstraints.gridy = 0; - add(workspaceButtonsBar, gridBagConstraints); - - workspaceLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT); - workspaceLabel.setIcon(new javax.swing.ImageIcon(getClass().getResource("/org/gephi/ui/workspace/resources/workspace.png"))); // NOI18N - workspaceLabel.setText(org.openide.util.NbBundle.getMessage(WorkspaceUISelectorPanel.class, "WorkspaceUISelectorPanel.workspaceLabel.text")); // NOI18N - workspaceLabel.setIconTextGap(7); - workspaceLabel.setMaximumSize(new java.awt.Dimension(300, 16)); - workspaceLabel.setPreferredSize(new java.awt.Dimension(300, 16)); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 1; - gridBagConstraints.gridy = 0; - gridBagConstraints.fill = java.awt.GridBagConstraints.HORIZONTAL; - gridBagConstraints.weightx = 1.0; - gridBagConstraints.insets = new java.awt.Insets(0, 0, 0, 2); - add(workspaceLabel, gridBagConstraints); - gridBagConstraints = new java.awt.GridBagConstraints(); - gridBagConstraints.gridx = 2; - gridBagConstraints.gridy = 0; - add(jSeparator2, gridBagConstraints); - }// //GEN-END:initComponents - // Variables declaration - do not modify//GEN-BEGIN:variables - private javax.swing.JToolBar.Separator jSeparator2; - private javax.swing.JButton leftArrowButton; - private javax.swing.JButton rightArrowButton; - private javax.swing.JToolBar workspaceButtonsBar; - private javax.swing.JLabel workspaceLabel; - // End of variables declaration//GEN-END:variables -} diff --git a/modules/WorkspaceUI/src/main/java/org/gephi/ui/workspace/WorkspaceUISelectorPopupContent.java b/modules/WorkspaceUI/src/main/java/org/gephi/ui/workspace/WorkspaceUISelectorPopupContent.java deleted file mode 100644 index 0dead60ca6..0000000000 --- a/modules/WorkspaceUI/src/main/java/org/gephi/ui/workspace/WorkspaceUISelectorPopupContent.java +++ /dev/null @@ -1,103 +0,0 @@ -/* -Copyright 2008-2010 Gephi -Authors : Mathieu Bastian -Website : http://www.gephi.org - -This file is part of Gephi. - -DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. - -Copyright 2011 Gephi Consortium. All rights reserved. - -The contents of this file are subject to the terms of either the GNU -General Public License Version 3 only ("GPL") or the Common -Development and Distribution License("CDDL") (collectively, the -"License"). You may not use this file except in compliance with the -License. You can obtain a copy of the License at -http://gephi.org/about/legal/license-notice/ -or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -specific language governing permissions and limitations under the -License. When distributing the software, include this License Header -Notice in each file and include the License files at -/cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -License Header, with the fields enclosed by brackets [] replaced by -your own identifying information: -"Portions Copyrighted [year] [name of copyright owner]" - -If you wish your version of this file to be governed by only the CDDL -or only the GPL Version 3, indicate your decision by adding -"[Contributor] elects to include this software in this distribution -under the [CDDL or GPL Version 3] license." If you do not indicate a -single choice of license, a recipient has the option to distribute -your version of this file under either the CDDL, the GPL Version 3 or -to extend the choice of license to its licensees as provided above. -However, if you add GPL Version 3 code and therefore, elected the GPL -Version 3 license, then the option applies only if the new code is -made subject to such option by the copyright holder. - -Contributor(s): - -Portions Copyrighted 2011 Gephi Consortium. -*/ -package org.gephi.ui.workspace; - -import java.awt.Color; -import java.awt.Component; -import java.awt.Graphics; -import java.awt.GridLayout; -import java.awt.Insets; -import javax.swing.BorderFactory; -import javax.swing.JComponent; -import javax.swing.JPanel; -import javax.swing.border.Border; - -/** - * - * @author Mathieu Bastian - */ -public class WorkspaceUISelectorPopupContent extends JPanel { - - public WorkspaceUISelectorPopupContent() { - GridLayout grid = new GridLayout(0, 1); - grid.setHgap(0); - grid.setVgap(0); - setLayout(grid); - setBorder(BorderFactory.createEmptyBorder()); - } - - public void addListComponent(JComponent lst) { - if (getComponentCount() > 0) { - JComponent previous = (JComponent) getComponent(getComponentCount() - 1); - previous.setBorder(new BottomLineBorder()); - } - lst.setBorder(BorderFactory.createEmptyBorder()); - add(lst); - } - - private static class BottomLineBorder implements Border { - - private Insets ins = new Insets(0, 0, 1, 0); - private Color col = new Color(221, 229, 248); - - public BottomLineBorder() { - } - - @Override - public Insets getBorderInsets(Component c) { - return ins; - } - - @Override - public boolean isBorderOpaque() { - return false; - } - - @Override - public void paintBorder(Component c, Graphics g, int x, int y, int width, int height) { - Color old = g.getColor(); - g.setColor(col); - g.drawRect(x, y + height - 2, width, 1); - g.setColor(old); - } - } -} diff --git a/modules/WorkspaceUI/src/main/nbm/manifest.mf b/modules/WorkspaceUI/src/main/nbm/manifest.mf deleted file mode 100644 index aa4d39f627..0000000000 --- a/modules/WorkspaceUI/src/main/nbm/manifest.mf +++ /dev/null @@ -1,4 +0,0 @@ -Manifest-Version: 1.0 -AutoUpdate-Essential-Module: true -OpenIDE-Module-Localizing-Bundle: org/gephi/ui/workspace/Bundle.properties -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file diff --git a/modules/WorkspaceUI/src/main/nbm/module.xml b/modules/WorkspaceUI/src/main/nbm/module.xml deleted file mode 100644 index d488b29835..0000000000 --- a/modules/WorkspaceUI/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/Bundle.properties b/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/Bundle.properties deleted file mode 100644 index d323d62ec6..0000000000 --- a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/Bundle.properties +++ /dev/null @@ -1,13 +0,0 @@ -OpenIDE-Module-Display-Category=Gephi UI -OpenIDE-Module-Name=Workspace UI -OpenIDE-Module-Short-Description=Workspace management UI -WorkspaceUISelectorPanel.workspaceLabel.text=No workspace -WorkspacePanePanel.workspaceLabel.text= -WorkspacePanePanel.detailsLabel.text= -WorkspacePanePanel_closeWorkspace_Question=Are you sure do yo want to delete this workspace ? -WorkspacePanePanel_closeWorkspace_Title=Close workspace -WorkspaceUISelectorPanel.leftArrowButton.text= -WorkspaceUISelectorPanel.rightArrowButton.text= -WorkspacePanePanel.closeButton.toolTipText=Close workspace -WorkspaceUISelectorPanel.leftArrowButton.toolTipText=Precedent workspace -WorkspaceUISelectorPanel.rightArrowButton.toolTipText=Next workspace diff --git a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/Bundle_cs.properties b/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/Bundle_cs.properties deleted file mode 100644 index 9d86f80b5d..0000000000 --- a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/Bundle_cs.properties +++ /dev/null @@ -1,21 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Zbyn\u011bk Schwarz , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-12-23 16\:22+0000\nLast-Translator\: Zbyn\u011bk Schwarz \nLanguage-Team\: Czech (http\://www.transifex.com/projects/p/gephi/language/cs/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: cs\nPlural-Forms\: nplurals\=3; plural\=(n\=\=1) ? 0 \: (n>\=2 && n<\=4) ? 1 \: 2;\n - -OpenIDE-Module-Short-Description=Rozhran\u00ed spr\u00e1vy pracovn\u00edho prostoru - -WorkspaceUISelectorPanel.workspaceLabel.text=\u017d\u00e1dn\u00fd pracovn\u00ed prostor - -WorkspacePanePanel_closeWorkspace_Question=Jste si jisti, \u017ee chcete tento pracovn\u00ed prostor smazat ? - -WorkspacePanePanel_closeWorkspace_Title=Zav\u0159\u00edt pracovn\u00ed prostor - -WorkspacePanePanel.closeButton.toolTipText=Zav\u0159\u00edt pracovn\u00ed prostor - -WorkspaceUISelectorPanel.leftArrowButton.toolTipText=P\u0159edchoz\u00ed pracovn\u00ed prostor - -WorkspaceUISelectorPanel.rightArrowButton.toolTipText=Dal\u0161\u00ed pracovn\u00ed prostor diff --git a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/Bundle_es.properties b/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/Bundle_es.properties deleted file mode 100644 index 0d8567db66..0000000000 --- a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/Bundle_es.properties +++ /dev/null @@ -1,21 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:55+0000\nLast-Translator\: gephi \nLanguage-Team\: Spanish (http\://www.transifex.com/projects/p/gephi/language/es/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: es\nPlural-Forms\: nplurals\=2; plural\=(n \!\= 1);\n - -OpenIDE-Module-Short-Description=Interfaz de usuario para la gesti\u00f3n del espacio de trabajo - -WorkspaceUISelectorPanel.workspaceLabel.text=Sin espacio de trabajo - -WorkspacePanePanel_closeWorkspace_Question=\u00bfEst\u00e1s seguro de que quieres eliminar este espacio de trabajo? - -WorkspacePanePanel_closeWorkspace_Title=Cerrar espacio de trabajo - -WorkspacePanePanel.closeButton.toolTipText=Cerrar espacio de trabajo - -WorkspaceUISelectorPanel.leftArrowButton.toolTipText=Anterior espacio de trabajo - -WorkspaceUISelectorPanel.rightArrowButton.toolTipText=Siguiente espacio de trabajo diff --git a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/Bundle_fr.properties b/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/Bundle_fr.properties deleted file mode 100644 index ae97e30385..0000000000 --- a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/Bundle_fr.properties +++ /dev/null @@ -1,21 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-04 22\:55+0000\nLast-Translator\: gephi \nLanguage-Team\: French (http\://www.transifex.com/projects/p/gephi/language/fr/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: fr\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Interface utilisateur de gestion des espaces de travail - -WorkspaceUISelectorPanel.workspaceLabel.text=Aucun espace de travail - -WorkspacePanePanel_closeWorkspace_Question=Souhaitez-vous vraiment supprimer cet espace de travail ? - -WorkspacePanePanel_closeWorkspace_Title=Fermer l'espace de travail - -WorkspacePanePanel.closeButton.toolTipText=Fermer l'espace de travail - -WorkspaceUISelectorPanel.leftArrowButton.toolTipText=Espace de travail pr\u00e9c\u00e9dent - -WorkspaceUISelectorPanel.rightArrowButton.toolTipText=Espace de travail suivant diff --git a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/Bundle_ja.properties b/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/Bundle_ja.properties deleted file mode 100644 index bf2b29b297..0000000000 --- a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/Bundle_ja.properties +++ /dev/null @@ -1,21 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-11 00\:27+0000\nLast-Translator\: Siro Kida \nLanguage-Team\: Japanese (http\://www.transifex.com/projects/p/gephi/language/ja/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ja\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u30de\u30cd\u30b8\u30e1\u30f3\u30c8UI - -WorkspaceUISelectorPanel.workspaceLabel.text=\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u304c\u3042\u308a\u307e\u305b\u3093 - -WorkspacePanePanel_closeWorkspace_Question=\u672c\u5f53\u306b\u3053\u306e\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3092\u524a\u9664\u3057\u307e\u3059\u304b\uff1f - -WorkspacePanePanel_closeWorkspace_Title=\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3092\u9589\u3058\u308b - -WorkspacePanePanel.closeButton.toolTipText=\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9\u3092\u9589\u3058\u308b - -WorkspaceUISelectorPanel.leftArrowButton.toolTipText=\u524d\u306e\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9 - -WorkspaceUISelectorPanel.rightArrowButton.toolTipText=\u6b21\u306e\u30ef\u30fc\u30af\u30b9\u30da\u30fc\u30b9 diff --git a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/Bundle_pt_BR.properties b/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/Bundle_pt_BR.properties deleted file mode 100644 index 87476e83e0..0000000000 --- a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/Bundle_pt_BR.properties +++ /dev/null @@ -1,21 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# C\u00e9lio CJr , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-08-08 13\:42+0000\nLast-Translator\: C\u00e9lio Faria Jr. \nLanguage-Team\: Portuguese (Brazil) (http\://www.transifex.com/projects/p/gephi/language/pt_BR/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: pt_BR\nPlural-Forms\: nplurals\=2; plural\=(n > 1);\n - -OpenIDE-Module-Short-Description=Interface de gerenciamento de \u00c1rea de Trabalho - -WorkspaceUISelectorPanel.workspaceLabel.text=Nenhuma \u00c1rea de Trabalho - -WorkspacePanePanel_closeWorkspace_Question=Deseja realmente excluir esta \u00c1rea de Trabalho? - -WorkspacePanePanel_closeWorkspace_Title=Fechar \u00c1rea de Trabalho - -WorkspacePanePanel.closeButton.toolTipText=Fechar \u00c1rea de Trabalho - -WorkspaceUISelectorPanel.leftArrowButton.toolTipText=\u00c1rea de Trabalho anterior - -WorkspaceUISelectorPanel.rightArrowButton.toolTipText=Pr\u00f3xima \u00c1rea de Trabalho diff --git a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/Bundle_ru.properties b/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/Bundle_ru.properties deleted file mode 100644 index 725d817b93..0000000000 --- a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/Bundle_ru.properties +++ /dev/null @@ -1,21 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2011-09-21 07\:49+0000\nLast-Translator\: Altsoph \nLanguage-Team\: Russian (http\://www.transifex.com/projects/p/gephi/language/ru/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: ru\nPlural-Forms\: nplurals\=3; plural\=(n%10\=\=1 && n%100\!\=11 ? 0 \: n%10>\=2 && n%10<\=4 && (n%100<10 || n%100>\=20) ? 1 \: 2);\n - -OpenIDE-Module-Short-Description=\u0418\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0447\u0438\u043c\u0438 \u043e\u0431\u043b\u0430\u0441\u0442\u044f\u043c\u0438 - -WorkspaceUISelectorPanel.workspaceLabel.text=\u0420\u0430\u0431\u043e\u0447\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u0435\u0442 - -WorkspacePanePanel_closeWorkspace_Question=\u0412\u044b \u0443\u0432\u0435\u0440\u0435\u043d\u044b, \u0447\u0442\u043e \u0445\u043e\u0442\u0438\u0442\u0435 \u0443\u0434\u0430\u043b\u0438\u0442\u044c \u044d\u0442\u0443 \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c? - -WorkspacePanePanel_closeWorkspace_Title=\u0417\u0430\u043a\u0440\u044b\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c - -WorkspacePanePanel.closeButton.toolTipText=\u0417\u0430\u043a\u0440\u044b\u0442\u044c \u0440\u0430\u0431\u043e\u0447\u0443\u044e \u043e\u0431\u043b\u0430\u0441\u0442\u044c - -WorkspaceUISelectorPanel.leftArrowButton.toolTipText=\u041f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0430\u044f \u0440\u0430\u0431\u043e\u0447\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c - -WorkspaceUISelectorPanel.rightArrowButton.toolTipText=\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0440\u0430\u0431\u043e\u0447\u0430\u044f \u043e\u0431\u043b\u0430\u0441\u0442\u044c diff --git a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/Bundle_zh_CN.properties b/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/Bundle_zh_CN.properties deleted file mode 100644 index 9ea21f1c13..0000000000 --- a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/Bundle_zh_CN.properties +++ /dev/null @@ -1,20 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -!=Project-Id-Version\: Gephi\nReport-Msgid-Bugs-To\: https\://github.com/gephi/gephi/issues\nPOT-Creation-Date\: 2011-08-05 14\:52+0200\nPO-Revision-Date\: 2012-01-08 00\:03+0000\nLast-Translator\: gephi \nLanguage-Team\: Chinese (China) (http\://www.transifex.com/projects/p/gephi/language/zh_CN/)\nMIME-Version\: 1.0\nContent-Type\: text/plain; charset\=UTF-8\nContent-Transfer-Encoding\: 8bit\nLanguage\: zh_CN\nPlural-Forms\: nplurals\=1; plural\=0;\n - -OpenIDE-Module-Short-Description=\u5de5\u4f5c\u95f4\u7ba1\u7406\u754c\u9762 - -WorkspaceUISelectorPanel.workspaceLabel.text=\u65e0\u5de5\u4f5c\u95f4 - -WorkspacePanePanel_closeWorkspace_Question=\u786e\u8ba4\u5220\u9664\u6b64\u5de5\u4f5c\u95f4\uff1f - -WorkspacePanePanel_closeWorkspace_Title=\u5173\u95ed\u5de5\u4f5c\u95f4 - -WorkspacePanePanel.closeButton.toolTipText=\u5173\u95ed\u5de5\u4f5c\u95f4 - -WorkspaceUISelectorPanel.leftArrowButton.toolTipText=\u524d\u4e00\u4e2a\u5de5\u4f5c\u95f4 - -WorkspaceUISelectorPanel.rightArrowButton.toolTipText=\u4e0b\u4e00\u4e2a\u5de5\u4f5c\u95f4 diff --git a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/cs.po b/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/cs.po deleted file mode 100644 index e4ccb80166..0000000000 --- a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/cs.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# ZbynΔ›k Schwarz , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-12-23 16:22+0000\n" -"Last-Translator: ZbynΔ›k Schwarz \n" -"Language-Team: Czech (http://www.transifex.com/projects/p/gephi/language/cs/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: cs\n" -"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "RozhranΓ­ sprΓ‘vy pracovnΓ­ho prostoru" - -msgid "WorkspaceUISelectorPanel.workspaceLabel.text" -msgstr "Ε½Γ‘dnΓ½ pracovnΓ­ prostor" - -msgid "WorkspacePanePanel_closeWorkspace_Question" -msgstr "Jste si jisti, ΕΎe chcete tento pracovnΓ­ prostor smazat ?" - -msgid "WorkspacePanePanel_closeWorkspace_Title" -msgstr "ZavΕ™Γ­t pracovnΓ­ prostor" - -msgid "WorkspacePanePanel.closeButton.toolTipText" -msgstr "ZavΕ™Γ­t pracovnΓ­ prostor" - -msgid "WorkspaceUISelectorPanel.leftArrowButton.toolTipText" -msgstr "PΕ™edchozΓ­ pracovnΓ­ prostor" - -msgid "WorkspaceUISelectorPanel.rightArrowButton.toolTipText" -msgstr "DalΕ‘Γ­ pracovnΓ­ prostor" diff --git a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/es.po b/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/es.po deleted file mode 100644 index a373887ca1..0000000000 --- a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/es.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:55+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Spanish (http://www.transifex.com/projects/p/gephi/language/es/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: es\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interfaz de usuario para la gestiΓ³n del espacio de trabajo" - -msgid "WorkspaceUISelectorPanel.workspaceLabel.text" -msgstr "Sin espacio de trabajo" - -msgid "WorkspacePanePanel_closeWorkspace_Question" -msgstr "ΒΏEstΓ‘s seguro de que quieres eliminar este espacio de trabajo?" - -msgid "WorkspacePanePanel_closeWorkspace_Title" -msgstr "Cerrar espacio de trabajo" - -msgid "WorkspacePanePanel.closeButton.toolTipText" -msgstr "Cerrar espacio de trabajo" - -msgid "WorkspaceUISelectorPanel.leftArrowButton.toolTipText" -msgstr "Anterior espacio de trabajo" - -msgid "WorkspaceUISelectorPanel.rightArrowButton.toolTipText" -msgstr "Siguiente espacio de trabajo" diff --git a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/fr.po b/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/fr.po deleted file mode 100644 index d41dc62063..0000000000 --- a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/fr.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# FIRST AUTHOR , 2010. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-04 22:55+0000\n" -"Last-Translator: gephi \n" -"Language-Team: French (http://www.transifex.com/projects/p/gephi/language/fr/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: fr\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interface utilisateur de gestion des espaces de travail" - -msgid "WorkspaceUISelectorPanel.workspaceLabel.text" -msgstr "Aucun espace de travail" - -msgid "WorkspacePanePanel_closeWorkspace_Question" -msgstr "Souhaitez-vous vraiment supprimer cet espace de travail ?" - -msgid "WorkspacePanePanel_closeWorkspace_Title" -msgstr "Fermer l'espace de travail" - -msgid "WorkspacePanePanel.closeButton.toolTipText" -msgstr "Fermer l'espace de travail" - -msgid "WorkspaceUISelectorPanel.leftArrowButton.toolTipText" -msgstr "Espace de travail prΓ©cΓ©dent" - -msgid "WorkspaceUISelectorPanel.rightArrowButton.toolTipText" -msgstr "Espace de travail suivant" diff --git a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/ja.po b/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/ja.po deleted file mode 100644 index 24b3d06a99..0000000000 --- a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/ja.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# Siro Kida , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-11 00:27+0000\n" -"Last-Translator: Siro Kida \n" -"Language-Team: Japanese (http://www.transifex.com/projects/p/gephi/language/ja/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ja\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "γƒ―γƒΌγ‚―γ‚ΉγƒšγƒΌγ‚Ήγƒžγƒγ‚Έγƒ‘γƒ³γƒˆUI" - -msgid "WorkspaceUISelectorPanel.workspaceLabel.text" -msgstr "γƒ―γƒΌγ‚―γ‚ΉγƒšγƒΌγ‚ΉγŒγ‚γ‚ŠγΎγ›γ‚“" - -msgid "WorkspacePanePanel_closeWorkspace_Question" -msgstr "ζœ¬ε½“γ«γ“γγƒ―γƒΌγ‚―γ‚ΉγƒšγƒΌγ‚Ήγ‚’ε‰Šι™€γ—γΎγ™γ‹οΌŸ" - -msgid "WorkspacePanePanel_closeWorkspace_Title" -msgstr "γƒ―γƒΌγ‚―γ‚ΉγƒšγƒΌγ‚Ήγ‚’ι–‰γ˜γ‚‹" - -msgid "WorkspacePanePanel.closeButton.toolTipText" -msgstr "γƒ―γƒΌγ‚―γ‚ΉγƒšγƒΌγ‚Ήγ‚’ι–‰γ˜γ‚‹" - -msgid "WorkspaceUISelectorPanel.leftArrowButton.toolTipText" -msgstr "前γγƒ―γƒΌγ‚―γ‚ΉγƒšγƒΌγ‚Ή" - -msgid "WorkspaceUISelectorPanel.rightArrowButton.toolTipText" -msgstr "欑γγƒ―γƒΌγ‚―γ‚ΉγƒšγƒΌγ‚Ή" diff --git a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/org-gephi-ui-workspace.pot b/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/org-gephi-ui-workspace.pot deleted file mode 100644 index 6e77f3fe27..0000000000 --- a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/org-gephi-ui-workspace.pot +++ /dev/null @@ -1,37 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Workspace management UI" - -msgid "WorkspaceUISelectorPanel.workspaceLabel.text" -msgstr "No workspace" - -msgid "WorkspacePanePanel_closeWorkspace_Question" -msgstr "Are you sure do yo want to delete this workspace ?" - -msgid "WorkspacePanePanel_closeWorkspace_Title" -msgstr "Close workspace" - -msgid "WorkspacePanePanel.closeButton.toolTipText" -msgstr "Close workspace" - -msgid "WorkspaceUISelectorPanel.leftArrowButton.toolTipText" -msgstr "Precedent workspace" - -msgid "WorkspaceUISelectorPanel.rightArrowButton.toolTipText" -msgstr "Next workspace" diff --git a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/pt_BR.po b/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/pt_BR.po deleted file mode 100644 index 26db610b7d..0000000000 --- a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/pt_BR.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# CΓ©lio CJr , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-08 13:42+0000\n" -"Last-Translator: CΓ©lio Faria Jr. \n" -"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/gephi/language/pt_BR/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: pt_BR\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Interface de gerenciamento de Área de Trabalho" - -msgid "WorkspaceUISelectorPanel.workspaceLabel.text" -msgstr "Nenhuma Área de Trabalho" - -msgid "WorkspacePanePanel_closeWorkspace_Question" -msgstr "Deseja realmente excluir esta Área de Trabalho?" - -msgid "WorkspacePanePanel_closeWorkspace_Title" -msgstr "Fechar Área de Trabalho" - -msgid "WorkspacePanePanel.closeButton.toolTipText" -msgstr "Fechar Área de Trabalho" - -msgid "WorkspaceUISelectorPanel.leftArrowButton.toolTipText" -msgstr "Área de Trabalho anterior" - -msgid "WorkspaceUISelectorPanel.rightArrowButton.toolTipText" -msgstr "PrΓ³xima Área de Trabalho" diff --git a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/resources/leftArrow.png b/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/resources/leftArrow.png deleted file mode 100644 index f645bfb9a2..0000000000 Binary files a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/resources/leftArrow.png and /dev/null differ diff --git a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/resources/rightArrow.png b/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/resources/rightArrow.png deleted file mode 100644 index c84c23f675..0000000000 Binary files a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/resources/rightArrow.png and /dev/null differ diff --git a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/resources/workspace.png b/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/resources/workspace.png deleted file mode 100644 index fe4faa90d6..0000000000 Binary files a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/resources/workspace.png and /dev/null differ diff --git a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/ru.po b/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/ru.po deleted file mode 100644 index 84e9da7b2f..0000000000 --- a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/ru.po +++ /dev/null @@ -1,40 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -# , 2011. -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-09-21 07:49+0000\n" -"Last-Translator: Altsoph \n" -"Language-Team: Russian (http://www.transifex.com/projects/p/gephi/language/ru/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: ru\n" -"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ управлСния Ρ€Π°Π±ΠΎΡ‡ΠΈΠΌΠΈ областями" - -msgid "WorkspaceUISelectorPanel.workspaceLabel.text" -msgstr "Рабочая ΠΎΠ±Π»Π°ΡΡ‚ΡŒ отсутствуСт" - -msgid "WorkspacePanePanel_closeWorkspace_Question" -msgstr "Π’Ρ‹ ΡƒΠ²Π΅Ρ€Π΅Π½Ρ‹, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ эту Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ?" - -msgid "WorkspacePanePanel_closeWorkspace_Title" -msgstr "Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ" - -msgid "WorkspacePanePanel.closeButton.toolTipText" -msgstr "Π—Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‡ΡƒΡŽ ΠΎΠ±Π»Π°ΡΡ‚ΡŒ" - -msgid "WorkspaceUISelectorPanel.leftArrowButton.toolTipText" -msgstr "ΠŸΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π°Ρ рабочая ΠΎΠ±Π»Π°ΡΡ‚ΡŒ" - -msgid "WorkspaceUISelectorPanel.rightArrowButton.toolTipText" -msgstr "Π‘Π»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ рабочая ΠΎΠ±Π»Π°ΡΡ‚ΡŒ" diff --git a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/zh_CN.po b/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/zh_CN.po deleted file mode 100644 index 987c9a2305..0000000000 --- a/modules/WorkspaceUI/src/main/resources/org/gephi/ui/workspace/zh_CN.po +++ /dev/null @@ -1,39 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# -# Translators: -msgid "" -msgstr "" -"Project-Id-Version: Gephi\n" -"Report-Msgid-Bugs-To: https://github.com/gephi/gephi/issues\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2012-01-08 00:03+0000\n" -"Last-Translator: gephi \n" -"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/gephi/language/zh_CN/)\n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" -"Language: zh_CN\n" -"Plural-Forms: nplurals=1; plural=0;\n" - -msgid "OpenIDE-Module-Short-Description" -msgstr "ε·₯δ½œι—΄η‘η†η•Œι’" - -msgid "WorkspaceUISelectorPanel.workspaceLabel.text" -msgstr "ζ— ε·₯δ½œι—΄" - -msgid "WorkspacePanePanel_closeWorkspace_Question" -msgstr "η‘θ€εˆ ι™€ζ­€ε·₯δ½œι—΄οΌŸ" - -msgid "WorkspacePanePanel_closeWorkspace_Title" -msgstr "ε…³ι—­ε·₯δ½œι—΄" - -msgid "WorkspacePanePanel.closeButton.toolTipText" -msgstr "ε…³ι—­ε·₯δ½œι—΄" - -msgid "WorkspaceUISelectorPanel.leftArrowButton.toolTipText" -msgstr "前一δΈͺε·₯δ½œι—΄" - -msgid "WorkspaceUISelectorPanel.rightArrowButton.toolTipText" -msgstr "δΈ‹δΈ€δΈͺε·₯δ½œι—΄" diff --git a/modules/application/.gitignore b/modules/application/.gitignore new file mode 100644 index 0000000000..aab52d906f --- /dev/null +++ b/modules/application/.gitignore @@ -0,0 +1 @@ +*.png \ No newline at end of file diff --git a/modules/application/pom.xml b/modules/application/pom.xml index 3b48a616ec..e2ed94f091 100644 --- a/modules/application/pom.xml +++ b/modules/application/pom.xml @@ -1,904 +1,1302 @@ - - - 4.0.0 - - - - org.gephi - gephi-parent - 0.9-SNAPSHOT - ../.. - - - gephi - nbm-application - gephi-app - - - - - org.netbeans.cluster - platform - pom - - - org-jdesktop-layout - org.netbeans.api - - - org-netbeans-api-search - org.netbeans.api - - - org-netbeans-api-visual - org.netbeans.api - - - org-netbeans-core-execution - org.netbeans.modules - - - org-netbeans-core-netigso - org.netbeans.api - - - org-netbeans-core-osgi - org.netbeans.modules - - - org-netbeans-core-output2 - org.netbeans.modules - - - org-netbeans-libs-osgi - org.netbeans.api - - - org-netbeans-libs-felix - org.netbeans.modules - - - org-netbeans-libs-jsr223 - org.netbeans.api - - - org-netbeans-libs-testng - org.netbeans.api - - - org-netbeans-modules-core-kit - org.netbeans.modules - - - org-netbeans-modules-netbinox - org.netbeans.api - - - org-openide-compat - org.netbeans.api - - - org-openide-execution - org.netbeans.api - - - org-openide-options - org.netbeans.api - - - org-openide-util-enumerations - org.netbeans.api - - - org-netbeans-modules-editor-mimelookup-impl - org.netbeans.modules - - - org-netbeans-modules-print - org.netbeans.api - - - org-netbeans-modules-favorites - org.netbeans.modules - - - org-netbeans-modules-javahelp - org.netbeans.api - - - org-netbeans-modules-sampler - org.netbeans.api - - - org-netbeans-modules-spi-actions - org.netbeans.modules - - - - - ${project.groupId} - gephi-branding - - - org.netbeans.api - org-netbeans-modules-nbjunit - test - - - ${project.groupId} - utils-longtask - - - ${project.groupId} - project-api - - - ${project.groupId} - graph-api - - - ${project.groupId} - io-exporter-api - - - ${project.groupId} - preview-api - - - ${project.groupId} - io-exporter-preview - - - ${project.groupId} - lib.validation - - - ${project.groupId} - preview-export-ui - - - - ${project.groupId} - utils - - - - ${project.groupId} - visualization-api - - - ${project.groupId} - preview-plugin - - - ${project.groupId} - db-drivers - - - ${project.groupId} - io-importer-api - - - ${project.groupId} - io-processor-plugin - - - ${project.groupId} - processor-plugin-ui - - - ${project.groupId} - project-ui - - - ${project.groupId} - ui-utils - - - ${project.groupId} - ui-components - - - ${project.groupId} - settings-upgrader - - - - ${project.groupId} - statistics-api - - - ${project.groupId} - statistics-plugin - - - ${project.groupId} - statistics-plugin-ui - - - - ${project.groupId} - tools-api - - - ${project.groupId} - algorithms-plugin - - - ${project.groupId} - gleem - - - ${project.groupId} - mostrecentfiles-api - - - ${project.groupId} - desktop-project - - - ${project.groupId} - visualization - - - - ${project.groupId} - welcome-screen - - - ${project.groupId} - workspace-ui - - - ${project.groupId} - desktop-context - - - ${project.groupId} - desktop-progress - - - ${project.groupId} - desktop-branding - - - ${project.groupId} - layout-api - - - ${project.groupId} - io-generator-api - - - ${project.groupId} - io-generator-plugin - - - ${project.groupId} - generator-plugin-ui - - - ${project.groupId} - io-exporter-plugin - - - ${project.groupId} - desktop-statistics - - - - - ${project.groupId} - layout-plugin - - - - ${project.groupId} - desktop-generate - - - ${project.groupId} - appearance-api - - - ${project.groupId} - desktop-appearance - - - ${project.groupId} - io-importer-plugin - - - - ${project.groupId} - export-plugin-ui - - - ${project.groupId} - desktop-recent-files - - - ${project.groupId} - desktop-io-export - - - ${project.groupId} - perspective-api - - - - ${project.groupId} - import-plugin-ui - - - ${project.groupId} - desktop-perspective - - - - ${project.groupId} - desktop-layout - - - - ${project.groupId} - desktop-import - - - ${project.groupId} - desktop-preview - - - ${project.groupId} - appearance-plugin - - - ${project.groupId} - appearance-plugin-ui - - - ${project.groupId} - directory-chooser - - - - ${project.groupId} - core-library-wrapper - - - ${project.groupId} - ui-library-wrapper - - - - - - - - - org.codehaus.mojo - nbm-maven-plugin - - - ${basedir}/target/${brandingToken}.conf - - - - default-standalone-zip - none - - - - - - - maven-resources-plugin - - - generate-app-conf-file - generate-resources - - copy-resources - - - ${basedir}/target/ - - - src/main/resources - - ${brandingToken}.conf - Info.plist - - true - - - \ - - - - - - - - - - - deployment - - - - - org.netbeans - platform-localization - zip - ${gephi.platform.localization.version} - - - - - - - - - org.codehaus.mojo - nbm-maven-plugin - - - default-standalone-zip - package - - - autoupdate - - autoupdate - - - - - - - - org.apache.maven.plugins - maven-surefire-plugin - - - ${all.clusters} - ${brandingToken} - - - - - - - org.apache.maven.plugins - maven-jar-plugin - - - none - - jar - - - - - - - - org.apache.maven.plugins - maven-dependency-plugin - - - unpack - prepare-package - - unpack-dependencies - - - org.netbeans - platform-localization - - ${project.build.directory}/${brandingToken} - - - - - - - - - - - upload-updates - - - - - org.codehaus.mojo - wagon-maven-plugin - - - upload-jar-to-folder - deploy - - upload - - - - - ${gephi.updates.site} - * - ${gephi.default.repository.url} - ${gephi.updates.repository.path} - ${gephi.default.repository.id} - - - - - - - - - create-dmg - - - - - - org.apache.maven.plugins - maven-antrun-plugin - - - create-app-bundle - pre-integration-test - - run - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - deploy-dmg - - - - - org.codehaus.mojo - build-helper-maven-plugin - - - attach-dmg - pre-integration-test - - attach-artifact - - - - - ${project.build.directory}/${project.artifactId}-${project.version}.dmg - dmg - - - - - - - - - - - - - release-extra - - - - - org.codehaus.mojo - nbm-maven-plugin - - - default-standalone-zip - none - - - autoupdate - none - - - - - - - - - - release-windows - - - - - - maven-resources-plugin - - - generate-iss-file - generate-resources - - copy-resources - - - ${basedir}/target - - - src/main/app-resources - - ${brandingToken}.iss - - true - - - src/main/app-resources - - ${brandingToken}.ico - ${brandingToken}file128.png - COPYING.txt - - false - - - - - - - - - - org.apache.maven.plugins - maven-antrun-plugin - - - replace-windows-icon - package - - run - - - - - - - - - - - - - - - - - - - - - - create-windows-installer - pre-integration-test - - run - - - - - - - - - - - - - - - - - org.apache.maven.plugins - maven-deploy-plugin - - - deploy - - deploy-file - - - exe - false - ${gephi.release.repository.id} - ${gephi.release.repository.url} - ${project.artifactId} - ${project.groupId} - ${project.version} - ${project.build.directory}/${project.artifactId}-${project.version}.setup.exe - - - - - - - - - - - release-macos - - - - - org.apache.maven.plugins - maven-deploy-plugin - - - deploy - - deploy-file - - - dmg - false - ${gephi.release.repository.id} - ${gephi.release.repository.url} - ${project.artifactId} - ${project.groupId} - ${project.version} - ${project.build.directory}/${project.artifactId}-${project.version}.dmg - - - - - - - - - + + + 4.0.0 + + + + org.gephi + gephi-parent + 0.11.3-SNAPSHOT + ../.. + + + org.gephi + gephi + nbm-application + 0.11.3-SNAPSHOT + gephi-app + Gephi - The Open Graph Viz Platform + https://gephi.org + + + + CDDL 1.0 + https://www.opensource.org/licenses/CDDL-1.0 + CDDL License 1.0 + + + GPL v3 + https://www.opensource.org/licenses/GPL-3.0 + GPL v3 License + + + + + scm:git:git://github.com/gephi/gephi.git + scm:git:git@github.com:gephi/gephi.git + https://github.com/gephi/gephi + + + + + mbastian + Mathieu Bastian + mathieu.bastian@gephi.org + + + eduramiba + Eduardo Ramos + eduardo.ramos@gephi.org + + + jacomyma + Mathieu Jacomy + mathieu.jacomy@gephi.org + + + sheymann + SΓ©bastien Heymann + sebastien.heymann@gephi.org + + + jbilcke + Julian Bilcke + julian.bilcke@gephi.org + + + jersub + Jeremy Subtil + jeremy.subtil@gephi.org + + + cbartosiak + Cezary Bartosiak + cezary.bartosiak@gephi.org + + + megaterik + Taras Klaskovsky + taras.klaskovsky@gephi.org + + + vojtech-bardiovsky + Vojtech Bardiovsky + vojtech.bardiovsky@gephi.org + + + luizribeiro + Luiz Ribeiro + luiz.ribeiro@gephi.org + + + baiacu + Helder Suzuki + helder.suzuki@gephi.org + + + daniel-bernardes + Daniel Bernades + daniel.bernades@gephi.org + + + taynaud + Thomas Aynaud + thomas.aynaud@gephi.org + + + panisson + AndrΓ© Panisson + andre.panission@gephi.org + + + annaalkh + Anna Kharitonova + anna.kharitonova@gephi.org + + + binarycrayon + Yudi Xue + yudi.xue@gephi.org + + + totetmatt + Matthieu Totet + mattieu.totet@gephi.org + + + + + package + true + true + true + true + + + + + + github + scm:git:https://github.com/gephi/gephi.git + + + + + + + org.netbeans.cluster + platform + pom + + + org-jdesktop-layout + org.netbeans.api + + + org-netbeans-api-search + org.netbeans.api + + + org-netbeans-api-visual + org.netbeans.api + + + org-netbeans-core-execution + org.netbeans.modules + + + org-netbeans-core-netigso + org.netbeans.api + + + org-netbeans-core-osgi + org.netbeans.modules + + + org-netbeans-libs-jsr223 + org.netbeans.api + + + org-netbeans-libs-testng + org.netbeans.api + + + org-netbeans-libs-junit4 + org.netbeans.api + + + org-netbeans-modules-netbinox + org.netbeans.api + + + org-openide-compat + org.netbeans.api + + + org-openide-options + org.netbeans.api + + + org-openide-util-enumerations + org.netbeans.api + + + org-netbeans-modules-editor-mimelookup-impl + org.netbeans.modules + + + org-netbeans-modules-javahelp + org.netbeans.api + + + org-netbeans-modules-spi-actions + org.netbeans.modules + + + org-netbeans-modules-junitlib + org.netbeans.modules + + + org-netbeans-api-htmlui + org.netbeans.api + + + org-netbeans-modules-templatesui + org.netbeans.modules + + + org.netbeans.html + net.java.html + + + org.netbeans.html + net.java.html.boot + + + org.netbeans.html + net.java.html.boot.fx + + + org.netbeans.html + net.java.html.boot.script + + + org.netbeans.html + net.java.html.geo + + + org.netbeans.html + net.java.html.json + + + org.netbeans.html + net.java.html.sound + + + org.netbeans.html + ko4j + + + org.netbeans.html + xhr4j + + + org.netbeans.api + org-netbeans-libs-junit5 + + + org.netbeans.modules + org-netbeans-modules-htmlui + + + org.netbeans.modules + org-netbeans-modules-core-kit + + + org.netbeans.modules + org-netbeans-modules-favorites + + + + + org.netbeans.api + org-netbeans-modules-nbjunit + test + + + ${project.groupId} + utils-longtask + + + ${project.groupId} + project-api + + + ${project.groupId} + graph-api + + + ${project.groupId} + io-exporter-api + + + ${project.groupId} + preview-api + + + ${project.groupId} + io-exporter-preview + + + ${project.groupId} + preview-export-ui + + + ${project.groupId} + utils + + + ${project.groupId} + datalab-api + + + ${project.groupId} + visualization-api + + + ${project.groupId} + preview-plugin + + + ${project.groupId} + db-drivers + + + ${project.groupId} + io-importer-api + + + ${project.groupId} + ui-utils + + + ${project.groupId} + ui-components + + + ${project.groupId} + settings-upgrader + + + ${project.groupId} + statistics-api + + + ${project.groupId} + statistics-plugin + + + ${project.groupId} + statistics-plugin-ui + + + ${project.groupId} + timeline-api + + + ${project.groupId} + tools-api + + + ${project.groupId} + algorithms-plugin + + + ${project.groupId} + mostrecentfiles-api + + + ${project.groupId} + desktop-project + + + ${project.groupId} + visualization + + + ${project.groupId} + visualization-engine + + + ${project.groupId} + tools-plugin + + + ${project.groupId} + welcome-screen + + + ${project.groupId} + desktop-context + + + ${project.groupId} + desktop-branding + + + ${project.groupId} + layout-api + + + ${project.groupId} + io-generator-api + + + ${project.groupId} + io-generator-plugin + + + ${project.groupId} + generator-plugin-ui + + + ${project.groupId} + io-exporter-plugin + + + ${project.groupId} + desktop-statistics + + + ${project.groupId} + filters-api + + + ${project.groupId} + layout-plugin + + + ${project.groupId} + desktop-generate + + + ${project.groupId} + desktop-datalab + + + ${project.groupId} + appearance-api + + + ${project.groupId} + desktop-appearance + + + ${project.groupId} + io-importer-plugin + + + ${project.groupId} + filters-plugin + + + ${project.groupId} + filters-impl + + + ${project.groupId} + export-plugin-ui + + + ${project.groupId} + desktop-io-export + + + ${project.groupId} + perspective-api + + + ${project.groupId} + import-plugin-ui + + + ${project.groupId} + desktop-window + + + ${project.groupId} + datalab-plugin + + + ${project.groupId} + filters-plugin-ui + + + ${project.groupId} + desktop-layout + + + ${project.groupId} + desktop-import + + + ${project.groupId} + desktop-preview + + + ${project.groupId} + appearance-plugin + + + ${project.groupId} + appearance-plugin-ui + + + ${project.groupId} + desktop-timeline + + + ${project.groupId} + desktop-filters + + + ${project.groupId} + core-library-wrapper + + + ${project.groupId} + ui-library-wrapper + + + ${project.groupId} + desktop-icons + + + ${project.groupId} + desktop-search + + + ${project.groupId} + desktop-attributes + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + + + ${jarGoalPhase} + + jar + + + + + + + + org.apache.netbeans.utilities + nbm-maven-plugin + + + ${basedir}/target/${brandingToken}.conf + + central::default::${gephi.update.center.source} + + + + default-standalone-zip + none + + + + + + + org.apache.maven.plugins + maven-source-plugin + + true + + + + + + maven-resources-plugin + + + generate-app-conf-file + generate-resources + + copy-resources + + + ${basedir}/target/ + + + src/main/resources + + ${brandingToken}.conf + Info.plist + Entitlements.plist + + true + + + \ + + + + + + + + org.apache.maven.plugins + maven-install-plugin + + true + + + + + + org.codehaus.mojo + flatten-maven-plugin + + oss + true + + + + flatten + process-resources + + flatten + + + + flatten.clean + clean + + clean + + + + + + + + + + + deployment + + none + + + + + + nl.cloudfarming.client + lib-platform-l10n + ${gephi.platform.localization.version} + + + + + + + + org.apache.maven.plugins + maven-surefire-plugin + + + ${all.clusters} + ${brandingToken} + + + + + + org.apache.maven.plugins + maven-antrun-plugin + + + replace-windows-icon + package + + run + + + ${skipCreateExe} + + + + + + + + + + + + + + + + + + + + + + download-jre + package + + run + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + create-windows-installer + package + + run + + + ${skipCreateExe} + + + + + + + + + + + + + + + + + + + + + + + + + + create-app-bundle + package + + run + + + ${skipCreateDmg} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + notarize-dmg + package + + run + + + ${skipAppleNotarization} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + create-targz + package + + run + + + ${skipCreateTargz} + + + + + + + + + + + + + + + + + + + + maven-assembly-plugin + + + linux-assembly + package + + single + + + ${skipCreateTargz} + gnu + ${brandingToken}-${project.version} + + src/assemble/linux.xml + + false + + + + + + + org.codehaus.mojo + build-helper-maven-plugin + + + + attach-linux + package + + attach-artifact + + + ${skipCreateTargz} + + + ${basedir}/target/${brandingToken}-${project.version}-linux-${gephi.bundle.arch}.tar.gz + tar.gz + linux-${gephi.bundle.arch} + + + + + + + + attach-exe + package + + attach-artifact + + + ${skipCreateExe} + + + ${project.build.directory}/${project.artifactId}-${project.version}-${gephi.bundle.arch}.setup.exe + exe + windows-${gephi.bundle.arch} + + + + + + + + attach-dmg + package + + attach-artifact + + + ${skipCreateDmg} + + + ${project.build.directory}/${project.artifactId}-${project.version}-${gephi.bundle.arch}.dmg + dmg + macos-${gephi.bundle.arch} + + + + + + + + + + + + + create-autoupdate + + + + + org.apache.netbeans.utilities + nbm-maven-plugin + + + autoupdate + + autoupdate + + + + + + + + maven-antrun-plugin + + + copy-autoupdate + package + + + + + + + + + + + + run + + + + + + + + + + + create-sources + + + + + org.codehaus.mojo + build-helper-maven-plugin + + + attach-sources + pre-integration-test + + attach-artifact + + + + + ${basedir}/../../target/${brandingToken}-${project.version}-sources.tar.gz + tar.gz + sources + + + + + + + + + + + + + create-javadoc + + + + org.codehaus.mojo + build-helper-maven-plugin + + + attach-javadoc-artifacts + package + + attach-artifact + + + + + + ${project.parent.basedir}/target/${project.artifactId}-parent-${project.version}-javadoc.jar + jar + javadoc + + + + + + + + + + + + + create-targz + + false + + + + + + create-exe + + false + + + + + + maven-resources-plugin + + + generate-iss-file + generate-resources + + copy-resources + + + !!! + ${basedir}/target + + + src/main/app-resources + + ${brandingToken}.iss + + true + + + src/main/app-resources + + ${brandingToken}.ico + ${brandingToken}file128.png + COPYING.txt + + false + + + + + + + + + + net.jsign + jsign-maven-plugin + + + sign-exe + + sign + + + + target + + *.exe + + + Gephi + https://gephi.org + ESIGNER + 22db8e8d-981f-462c-a675-35ae68b9de27 + ${gephi.windows.codesign.username}|${gephi.windows.codesign.password} + ${gephi.windows.codesign.totp} + http://ts.ssl.com + RFC3161 + + + + + + + + + + + create-dmg + + false + + + + + + notarize-dmg + + false + + + + + + push-site + + + + + org.apache.maven.plugins + maven-scm-publish-plugin + + ${project.build.directory}/autoupdate_site + gh-pages + Autoupdate update for ${project.version} + ${gephi.minor.version}/autoupdate + github + + + + + + + diff --git a/modules/application/src/assemble/linux.xml b/modules/application/src/assemble/linux.xml new file mode 100644 index 0000000000..13bf045d47 --- /dev/null +++ b/modules/application/src/assemble/linux.xml @@ -0,0 +1,19 @@ + + + linux-${gephi.bundle.arch} + + tar.gz + + + + ${basedir}/target/gephi + + true + + + ${basedir}/../../flathub + flathub + true + + + diff --git a/modules/application/src/main/app-resources/codesign.sh b/modules/application/src/main/app-resources/codesign.sh new file mode 100644 index 0000000000..0f6ad810cb --- /dev/null +++ b/modules/application/src/main/app-resources/codesign.sh @@ -0,0 +1,74 @@ +#!/bin/bash + +# Codesign a folder +function codesignDir { + local dir="$1" + + # Codesign all all relevant files + while IFS= read -r -d $'\0' libfile; do + echo "Codesigning file $(basename "${libfile}")" + codesign --verbose --entitlements src/main/resources/Entitlements.plist --deep --force --timestamp -i org.gephi --sign "$2" --options runtime $libfile + done < <(find -E "$dir" -regex '.*\.(dylib|jnilib)' -print0) +} + +# Codesign content of JARs +function codesignJarsInDir { + local dir="$1" + + # Search for JAR files + while IFS= read -r -d $'\0' file; do + # Check if the JAR contains jnilib or dylib files + jar tvf $file | grep "jnilib\|dylib" > /dev/null + if [ $? -eq 0 ] + then + echo "Codesigning JAR file: $(basename "${file}")" + + # Set temp folder to unzip the JAR + folder="$(dirname "${file}")/tmp" + rm -Rf $folder + + # Unzip the JAR + unzip -d $folder $file > /dev/null + + # Codesign all all relevant files + codesignDir "$folder" "${2}" + + # Create updated JAR + cd $folder + zip -r "../$(basename "${file}")" . -x "*.DS_Store" > /dev/null + cd - > /dev/null + + # Cleanup + rm -Rf $folder + fi + done < <(find "$dir" -name "*.jar" -print0) +} + +# Codesign a single file or folder +function codesignFile { + local file="$1" + echo "Codesigning $(basename "${file}")" + codesign --verbose --entitlements src/main/resources/Entitlements.plist --deep --force --timestamp -i org.gephi --sign "$2" --options runtime $file +} + +# Sign external JARs (gephi) +for dir in "${1}/Contents/Resources/gephi/gephi/modules/ext" ; do + codesignJarsInDir "$dir" "${2}" +done + +# Sign external JARs (platform) +for dir in "${1}/Contents/Resources/gephi/platform/modules/ext" ; do + codesignJarsInDir "$dir" "${2}" +done + +# Sign native Netbeans libs +codesignDir "${1}/Contents/Resources/gephi/platform/modules/lib" "${2}" + +# Sign JRE +codesignDir "${1}/Contents/PlugIns" "${2}" + +# Sign launcher script +codesignFile "${1}/Contents/Resources/gephi/bin/gephi" "${2}" + +# Sign app +codesignFile "${1}" "${2}" \ No newline at end of file diff --git a/modules/application/src/main/app-resources/dmg-background.tiff b/modules/application/src/main/app-resources/dmg-background.tiff new file mode 100644 index 0000000000..37e2dd2055 Binary files /dev/null and b/modules/application/src/main/app-resources/dmg-background.tiff differ diff --git a/modules/application/src/main/app-resources/gephi.icns b/modules/application/src/main/app-resources/gephi.icns index 43637577b7..80b50ac4e7 100644 Binary files a/modules/application/src/main/app-resources/gephi.icns and b/modules/application/src/main/app-resources/gephi.icns differ diff --git a/modules/application/src/main/app-resources/gephi.ico b/modules/application/src/main/app-resources/gephi.ico index 4830a9c764..b2ca497d67 100644 Binary files a/modules/application/src/main/app-resources/gephi.ico and b/modules/application/src/main/app-resources/gephi.ico differ diff --git a/modules/application/src/main/app-resources/gephi.iss b/modules/application/src/main/app-resources/gephi.iss index 93128928cf..bf775f07a0 100644 --- a/modules/application/src/main/app-resources/gephi.iss +++ b/modules/application/src/main/app-resources/gephi.iss @@ -8,75 +8,97 @@ AppId={{51722911-C391-4118-97BF-B50100D2AB15} AppName=Gephi AppVerName=${gephi.menu.app.name} +AppVersion=${project.version} AppPublisher=Gephi -AppPublisherURL=http://gephi.org -AppSupportURL=http://gephi.org -AppUpdatesURL=http://gephi.org -DefaultDirName={pf}\Gephi-${project.version} +AppPublisherURL=https://gephi.org +AppSupportURL=https://gephi.org +AppUpdatesURL=https://gephi.org +DefaultDirName={autopf}\Gephi-${project.version} DefaultGroupName=Gephi LicenseFile=COPYING.txt OutputDir=. -OutputBaseFilename=${project.artifactId}-${project.version}.setup +OutputBaseFilename=${project.artifactId}-${project.version}-${gephi.bundle.arch}.setup SetupIconFile=gephi.ico Compression=lzma SolidCompression=yes ChangesAssociations=yes -PrivilegesRequired=none +PrivilegesRequired=admin +PrivilegesRequiredOverridesAllowed=dialog UsePreviousAppDir=false UsePreviousGroup=false +ArchitecturesAllowed=x64compatible +ArchitecturesInstallIn64BitMode=x64compatible [Languages] Name: "english"; MessagesFile: "compiler:Default.isl" [Tasks] Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; Flags: checkedonce -Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; Flags: checkedonce Name: "associategephi"; Description: "&Associate .gephi files"; Flags: checkedonce Name: "associategexf"; Description: "&Associate .gexf files"; Flags: checkedonce Name: "associategdf"; Description: "&Associate .gdf files"; Flags: unchecked Name: "associategraphml"; Description: "&Associate .graphml files"; Flags: unchecked Name: "associatenet"; Description: "&Associate .net files"; Flags: unchecked +Name: "cleanuserdir"; Description: "&Clean previous user preferences"; Flags: checkedonce + +[Dirs] +Name: "{app}\etc"; Permissions: users-modify +Name: "{app}\extra"; Permissions: users-modify +Name: "{app}\gephi"; Permissions: users-modify +Name: "{app}\platform"; Permissions: users-modify [Files] -;Source: "gephi\bin\gephi.exe"; DestDir: "{app}"; Flags: ignoreversion Source: "gephi\*"; DestDir: "{app}"; Flags: ignoreversion recursesubdirs createallsubdirs ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons] -Name: "{group}\Gephi"; Filename: "{app}\bin\gephi.exe" -Name: "{commondesktop}\Gephi"; Filename: "{app}\bin\gephi.exe"; Tasks: desktopicon +Name: "{group}\Gephi"; Filename: "{app}\bin\gephi64.exe"; AppUserModelID: "Gephi" +Name: "{userdesktop}\Gephi"; Filename: "{app}\bin\gephi64.exe"; Tasks: desktopicon; AppUserModelID: "Gephi" + Name: "{group}\Startup settings"; Filename: "{app}\etc\gephi.conf" -Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Gephi"; Filename: "{app}\bin\gephi.exe"; Tasks: quicklaunchicon [Run] -Filename: "{app}\bin\gephi.exe"; Description: "{cm:LaunchProgram,Gephi}"; Flags: nowait postinstall skipifsilent +Filename: "{app}\bin\gephi64.exe"; Description: "{cm:LaunchProgram,Gephi}"; Flags: nowait postinstall skipifsilent [Registry] -Root: HKCR; Subkey: ".gephi"; ValueType: string; ValueName: ""; ValueData: "GephiProject"; Flags: uninsdeletevalue; Tasks: associategephi -Root: HKCR; Subkey: "GephiProject"; ValueType: string; ValueName: ""; ValueData: "Gephi Project File"; Flags: uninsdeletekey; Tasks: associategephi -Root: HKCR; Subkey: "GephiProject\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\bin\GEPHI.EXE,1"; Tasks: associategephi -Root: HKCR; Subkey: "GephiProject\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\GEPHI.EXE"" ""%1"""; Tasks: associategephi -Root: HKCR; Subkey: ".gexf"; ValueType: string; ValueName: ""; ValueData: "GexfGraphFile"; Flags: uninsdeletevalue; Tasks: associategexf -Root: HKCR; Subkey: "GexfGraphFile"; ValueType: string; ValueName: ""; ValueData: "GEXF Graph File"; Flags: uninsdeletekey; Tasks: associategexf -Root: HKCR; Subkey: "GexfGraphFile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\bin\GEPHI.EXE,1"; Tasks: associategexf -Root: HKCR; Subkey: "GexfGraphFile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\GEPHI.EXE"" ""%1"""; Tasks: associategexf -Root: HKCR; Subkey: ".gdf"; ValueType: string; ValueName: ""; ValueData: "GdfGraphFile"; Flags: uninsdeletevalue; Tasks: associategdf -Root: HKCR; Subkey: "GdfGraphFile"; ValueType: string; ValueName: ""; ValueData: "GDF Graph File"; Flags: uninsdeletekey; Tasks: associategdf -Root: HKCR; Subkey: "GdfGraphFile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\bin\GEPHI.EXE,1"; Tasks: associategdf -Root: HKCR; Subkey: "GdfGraphFile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\GEPHI.EXE"" ""%1"""; Tasks: associategdf -Root: HKCR; Subkey: ".graphml"; ValueType: string; ValueName: ""; ValueData: "GraphmlGraphFile"; Flags: uninsdeletevalue; Tasks: associategraphml -Root: HKCR; Subkey: "GraphmlGraphFile"; ValueType: string; ValueName: ""; ValueData: "GraphML Graph File"; Flags: uninsdeletekey; Tasks: associategraphml -Root: HKCR; Subkey: "GraphmlGraphFile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\bin\GEPHI.EXE,1"; Tasks: associategraphml -Root: HKCR; Subkey: "GraphmlGraphFile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\GEPHI.EXE"" ""%1"""; Tasks: associategraphml -Root: HKCR; Subkey: ".net"; ValueType: string; ValueName: ""; ValueData: "PajekGraphFile"; Flags: uninsdeletevalue; Tasks: associatenet -Root: HKCR; Subkey: "PajekGraphFile"; ValueType: string; ValueName: ""; ValueData: "NET Graph File"; Flags: uninsdeletekey; Tasks: associatenet -Root: HKCR; Subkey: "PajekGraphFile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\bin\GEPHI.EXE,1"; Tasks: associatenet -Root: HKCR; Subkey: "PajekGraphFile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\GEPHI.EXE"" ""%1"""; Tasks: associatenet +Root: HKA; Subkey: "Software\Classes\.gephi\OpenWithProgids"; ValueType: string; ValueName: "GephiProject"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associategephi +Root: HKA; Subkey: "Software\Classes\GephiProject"; ValueType: string; ValueName: ""; ValueData: "Gephi Project File"; Flags: uninsdeletekey; Tasks: associategephi +Root: HKA; Subkey: "Software\Classes\GephiProject\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\bin\GEPHI.EXE,1"; Tasks: associategephi +Root: HKA; Subkey: "Software\Classes\GephiProject\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\GEPHI64.EXE"" ""%1"""; Tasks: associategephi +Root: HKA; Subkey: "Software\Classes\Applications\gephi64.exe\SupportedTypes"; ValueType: string; ValueName: ".gephi"; ValueData: ""; Tasks: associategephi +Root: HKA; Subkey: "Software\Classes\.gexf\OpenWithProgids"; ValueType: string; ValueName: "GexfGraphFile"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associategexf +Root: HKA; Subkey: "Software\Classes\GexfGraphFile"; ValueType: string; ValueName: ""; ValueData: "GEXF Graph File"; Flags: uninsdeletekey; Tasks: associategexf +Root: HKA; Subkey: "Software\Classes\GexfGraphFile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\bin\GEPHI.EXE,1"; Tasks: associategexf +Root: HKA; Subkey: "Software\Classes\GexfGraphFile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\GEPHI64.EXE"" ""%1"""; Tasks: associategexf +Root: HKA; Subkey: "Software\Classes\Applications\gephi64.exe\SupportedTypes"; ValueType: string; ValueName: ".gexf"; ValueData: ""; Tasks: associategexf +Root: HKA; Subkey: "Software\Classes\.gdf\OpenWithProgids"; ValueType: string; ValueName: "GdfGraphFile"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associategdf +Root: HKA; Subkey: "Software\Classes\GdfGraphFile"; ValueType: string; ValueName: ""; ValueData: "GDF Graph File"; Flags: uninsdeletekey; Tasks: associategdf +Root: HKA; Subkey: "Software\Classes\GdfGraphFile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\bin\GEPHI.EXE,1"; Tasks: associategdf +Root: HKA; Subkey: "Software\Classes\GdfGraphFile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\GEPHI64.EXE"" ""%1"""; Tasks: associategdf +Root: HKA; Subkey: "Software\Classes\Applications\gephi64.exe\SupportedTypes"; ValueType: string; ValueName: ".gdf"; ValueData: ""; Tasks: associategdf +Root: HKA; Subkey: "Software\Classes\.graphml\OpenWithProgids"; ValueType: string; ValueName: "GraphmlGraphFile"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associategraphml +Root: HKA; Subkey: "Software\Classes\GraphmlGraphFile"; ValueType: string; ValueName: ""; ValueData: "GraphML Graph File"; Flags: uninsdeletekey; Tasks: associategraphml +Root: HKA; Subkey: "Software\Classes\GraphmlGraphFile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\bin\GEPHI.EXE,1"; Tasks: associategraphml +Root: HKA; Subkey: "Software\Classes\GraphmlGraphFile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\GEPHI64.EXE"" ""%1"""; Tasks: associategraphml +Root: HKA; Subkey: "Software\Classes\Applications\gephi64.exe\SupportedTypes"; ValueType: string; ValueName: ".graphml"; ValueData: ""; Tasks: associategraphml +Root: HKA; Subkey: "Software\Classes\.net\OpenWithProgids"; ValueType: string; ValueName: "PajekGraphFile"; ValueData: ""; Flags: uninsdeletevalue; Tasks: associatenet +Root: HKA; Subkey: "Software\Classes\PajekGraphFile"; ValueType: string; ValueName: ""; ValueData: "Pajek Graph File"; Flags: uninsdeletekey; Tasks: associatenet +Root: HKA; Subkey: "Software\Classes\PajekGraphFile\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\bin\GEPHI.EXE,1"; Tasks: associatenet +Root: HKA; Subkey: "Software\Classes\PajekGraphFile\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\bin\GEPHI64.EXE"" ""%1"""; Tasks: associatenet +Root: HKA; Subkey: "Software\Classes\Applications\gephi64.exe\SupportedTypes"; ValueType: string; ValueName: ".net"; ValueData: ""; Tasks: associatenet + - [InstallDelete] -Type: filesandordirs; Name: "{userappdata}\.gephi\dev\config\Modules" -Type: filesandordirs; Name: "{userappdata}\.gephi\dev\config\Preferences" -Type: filesandordirs; Name: "{userappdata}\.gephi\dev\config\Windows2Local" -Type: filesandordirs; Name: "{userappdata}\.gephi\dev\modules" -Type: filesandordirs; Name: "{userappdata}\.gephi\dev\update_tracking" -Type: filesandordirs; Name: "{userappdata}\.gephi\dev\var" +[InstallDelete] +Type: filesandordirs; Name: "{userappdata}\gephi\${gephi.minor.version}\config\Modules"; Tasks: cleanuserdir +Type: filesandordirs; Name: "{userappdata}\gephi\${gephi.minor.version}\config\Preferences"; Tasks: cleanuserdir +Type: filesandordirs; Name: "{userappdata}\gephi\${gephi.minor.version}\config\Windows2Local" +Type: filesandordirs; Name: "{userappdata}\gephi\${gephi.minor.version}\config\Windows2Local-datalab" +Type: filesandordirs; Name: "{userappdata}\gephi\${gephi.minor.version}\config\Windows2Local-overview" +Type: filesandordirs; Name: "{userappdata}\gephi\${gephi.minor.version}\config\Windows2Local-preview" +Type: filesandordirs; Name: "{userappdata}\gephi\${gephi.minor.version}\config\Preferences.properties"; Tasks: cleanuserdir +Type: filesandordirs; Name: "{userappdata}\gephi\${gephi.minor.version}\modules"; Tasks: cleanuserdir +Type: filesandordirs; Name: "{userappdata}\gephi\${gephi.minor.version}\update_tracking"; Tasks: cleanuserdir +Type: filesandordirs; Name: "{userappdata}\gephi\${gephi.minor.version}\var" +Type: filesandordirs; Name: "{userappdata}\gephi\${gephi.minor.version}\lock" +Type: filesandordirs; Name: "{userappdata}\gephi\${gephi.minor.version}\update" +Type: filesandordirs; Name: "{localappdata}\gephi\Cache\${gephi.minor.version}" diff --git a/modules/application/src/main/app-resources/gephi48.png b/modules/application/src/main/app-resources/gephi48.png index e6e1fdaa7d..fac4d35bf7 100644 Binary files a/modules/application/src/main/app-resources/gephi48.png and b/modules/application/src/main/app-resources/gephi48.png differ diff --git a/modules/application/src/main/resources/Entitlements.plist b/modules/application/src/main/resources/Entitlements.plist new file mode 100644 index 0000000000..900657e8f6 --- /dev/null +++ b/modules/application/src/main/resources/Entitlements.plist @@ -0,0 +1,18 @@ + + + + + com.apple.security.cs.allow-jit + + com.apple.security.cs.allow-unsigned-executable-memory + + com.apple.security.cs.disable-library-validation + + com.apple.security.cs.disable-executable-page-protection + + com.apple.security.cs.allow-dyld-environment-variables + + com.apple.security.cs.debugger + + + \ No newline at end of file diff --git a/modules/application/src/main/resources/Info.plist b/modules/application/src/main/resources/Info.plist index d243b95a39..4f961522a0 100644 --- a/modules/application/src/main/resources/Info.plist +++ b/modules/application/src/main/resources/Info.plist @@ -1,15 +1,15 @@ -ο»Ώ + CFBundleName - Gephi + ${gephi.appbundle.name} CFBundleVersion ${project.version} CFBundleExecutable - gephi + ${brandingToken} CFBundlePackageType APPL @@ -17,17 +17,23 @@ CFBundleShortVersionString ${project.version} - CFBundleSignature - ???? - CFBundleInfoDictionaryVersion 6.0 CFBundleIdentifier - org.gephi + ${project.groupId} CFBundleIconFile - gephi.icns + ${brandingToken}.icns + + LSApplicationCategoryType + public.app-category.graphics-design + + LSMinimumSystemVersion + 11.0 + + NSHumanReadableCopyright + Copyright 2008, 2026 Gephi NSHighResolutionCapable @@ -42,7 +48,11 @@ CFBundleTypeName Gephi Project File CFBundleTypeRole - Viewer + Editor + LSItemContentTypes + + org.gephi.project + CFBundleTypeExtensions @@ -52,8 +62,54 @@ CFBundleTypeName GEXF Graph File CFBundleTypeRole - Viewer + Editor + LSItemContentTypes + + org.gexf.gexf + + + + + UTExportedTypeDeclarations + + + UTTypeIdentifier + org.gephi.project + UTTypeDescription + Gephi Project File + UTTypeConformsTo + + public.data + + UTTypeTagSpecification + + public.filename-extension + + gephi + + + + + + UTImportedTypeDeclarations + + + UTTypeIdentifier + org.gexf.gexf + UTTypeDescription + GEXF Graph File + UTTypeConformsTo + + public.xml + + UTTypeTagSpecification + + public.filename-extension + + gexf + + - \ No newline at end of file + diff --git a/modules/application/src/main/resources/gephi.conf b/modules/application/src/main/resources/gephi.conf index 34f1761bee..8b0658e1e9 100644 --- a/modules/application/src/main/resources/gephi.conf +++ b/modules/application/src/main/resources/gephi.conf @@ -1,14 +1,19 @@ -# \${HOME} will be replaced by user home directory according to platform -default_userdir="\${HOME}/.\${APPNAME}/${project.version}/dev" -default_mac_userdir="\${HOME}/Library/Application Support/\${APPNAME}/${project.version}/dev" +default_userdir="${DEFAULT_USERDIR_ROOT}/${gephi.minor.version}" +default_cachedir="${DEFAULT_CACHEDIR_ROOT}/${gephi.minor.version}" + +# Note that default -Xmx is selected for you by the JVM automatically. +# You can find these values in var/log/messages.log file in your userdir. +# The automatically selected value can be overridden by specifying -J-Xmx +# here # options used by the launcher by default, can be overridden by explicit # command line switches -default_options="--branding gephi -J-Xms64m -J-Xmx512m -J-Xverify:none -J-Dsun.java2d.noddraw=true -J-Dsun.awt.noerasebackground=true -J-Dnetbeans.indexing.noFileRefresh=true -J-Dplugin.manager.check.interval=EVERY_DAY" +default_options="--branding ${branding.token} -J-Dsun.java2d.metal=true -J-Dsun.java2d.noddraw=true -J-Dsun.awt.noerasebackground=true -J-Dapple.awt.graphics.UseQuartz=true -J-Dnetbeans.indexing.noFileRefresh=true -J-Dnetbeans.winsys.hideEmptyDocArea=true -J-Dplugin.manager.check.interval=EVERY_DAY -J-Dapple.awt.application.appearance=system -J--add-opens=java.base/java.net=ALL-UNNAMED -J--add-exports=java.desktop/sun.awt=ALL-UNNAMED -J--add-opens=java.desktop/javax.swing=ALL-UNNAMED -J--add-opens=java.base/java.nio=ALL-UNNAMED -J--add-exports=java.desktop/sun.awt=ALL-UNNAMED" # for development purposes you may wish to append: -J-Dnetbeans.logger.console=true -J-ea +# for JOGL debugging add -J-Dnativewindow.debug=true # default location of JDK/JRE, can be overridden by using --jdkhome switch #jdkhome="/path/to/jdk" # clusters' paths separated by path.separator (semicolon on Windows, colon on Unices) -#extra_clusters= +#extra_clusters= \ No newline at end of file diff --git a/modules/application/src/test/java/org/gephi/ApplicationTest.java b/modules/application/src/test/java/org/gephi/ApplicationTest.java deleted file mode 100644 index 2e3a4794c3..0000000000 --- a/modules/application/src/test/java/org/gephi/ApplicationTest.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.gephi; - -import java.util.logging.Level; -import junit.framework.Test; -import org.netbeans.junit.NbModuleSuite; -import org.netbeans.junit.NbTestCase; - -public class ApplicationTest extends NbTestCase { - - public static Test suite() { - return NbModuleSuite.createConfiguration(ApplicationTest.class). - gui(false). - failOnMessage(Level.WARNING). // works at least in RELEASE71 - failOnException(Level.INFO). - addStartupArgument("org.gephi.settingsUpgrder.enabled", "false"). - addStartupArgument("org.gephi.jogl.init", "false"). - suite(); // RELEASE71+, else use NbModuleSuite.create(NbModuleSuite.createConfiguration(...)) - } - - public ApplicationTest(String n) { - super(n); - } - - public void testApplication() { - // pass if there are merely no warnings/exceptions - /* Example of using Jelly Tools with gui(true): - new ActionNoBlock("Help|About", null).performMenu(); - new NbDialogOperator("About").closeByButton(); - */ - } -} diff --git a/modules/branding/pom.xml b/modules/branding/pom.xml deleted file mode 100644 index 728ea18ca1..0000000000 --- a/modules/branding/pom.xml +++ /dev/null @@ -1,85 +0,0 @@ - - - 4.0.0 - - - - org.gephi - gephi-parent - 0.9-SNAPSHOT - ../.. - - - gephi-branding - nbm - Branding - - - ${gephi.update.center.testing.url} - ${gephi.update.center.testing.url} - - - - - - - maven-resources-plugin - - - - generate-bundles - generate-resources - - copy-resources - - - src/main/nbm-branding - - - src/main/resources - - core/core.jar/org/netbeans/core/startup/Bundle.properties - modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/view/ui/Bundle.properties - - true - - - - - - - generate-autoudate-urls - generate-resources - - copy-resources - - - ${basedir}/target/classes - - - src/main/resources - - org/gephi/branding/Bundle.properties - - true - - - - - - - - - - - - - release - - ${gephi.update.center.official.url} - ${gephi.update.center.thirdparty.url} - - - - diff --git a/modules/branding/src/main/nbm-branding/core/core.jar/org/netbeans/core/startup/Bundle.properties b/modules/branding/src/main/nbm-branding/core/core.jar/org/netbeans/core/startup/Bundle.properties deleted file mode 100644 index 6cdbddaa6e..0000000000 --- a/modules/branding/src/main/nbm-branding/core/core.jar/org/netbeans/core/startup/Bundle.properties +++ /dev/null @@ -1,6 +0,0 @@ -currentVersion=Gephi 0.9-SNAPSHOT {0} -LBL_splash_window_title=Starting Gephi 0.9-SNAPSHOT -SplashProgressBarBounds=0,249,473,3 -SplashProgressBarColor=0xFF9933 -SplashRunningTextBounds=10,235,450,12 -SplashRunningTextColor=0x0 diff --git a/modules/branding/src/main/nbm-branding/core/core.jar/org/netbeans/core/startup/splash.gif b/modules/branding/src/main/nbm-branding/core/core.jar/org/netbeans/core/startup/splash.gif deleted file mode 100644 index 28647f867d..0000000000 Binary files a/modules/branding/src/main/nbm-branding/core/core.jar/org/netbeans/core/startup/splash.gif and /dev/null differ diff --git a/modules/branding/src/main/nbm-branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/Bundle.properties b/modules/branding/src/main/nbm-branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/Bundle.properties deleted file mode 100644 index 2a94ddce03..0000000000 --- a/modules/branding/src/main/nbm-branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/Bundle.properties +++ /dev/null @@ -1,7 +0,0 @@ -Editor.TopComponent.Closing.Enabled=true -Splitter.Respect.MinimumSize.Enabled=false -TopComponent.Maximization.Enabled=false -TopComponent.Sliding.Enabled=true -TopComponent.Undocking.Enabled=true -View.TopComponent.Closing.Enabled=true -WinSys.Show.Hide.MainWindow.While.Switching.Role=false \ No newline at end of file diff --git a/modules/branding/src/main/nbm-branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/view/ui/Bundle.properties b/modules/branding/src/main/nbm-branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/view/ui/Bundle.properties deleted file mode 100644 index 292f3a74fd..0000000000 --- a/modules/branding/src/main/nbm-branding/modules/org-netbeans-core-windows.jar/org/netbeans/core/windows/view/ui/Bundle.properties +++ /dev/null @@ -1,2 +0,0 @@ -CTL_MainWindow_Title=Gephi 0.9-SNAPSHOT -CTL_MainWindow_Title_No_Project=Gephi 0.9-SNAPSHOT \ No newline at end of file diff --git a/modules/branding/src/main/nbm/manifest.mf b/modules/branding/src/main/nbm/manifest.mf deleted file mode 100644 index c1489df831..0000000000 --- a/modules/branding/src/main/nbm/manifest.mf +++ /dev/null @@ -1,5 +0,0 @@ -Manifest-Version: 1.0 -OpenIDE-Module-Localizing-Bundle: org/gephi/branding/Bundle.properties -AutoUpdate-Essential-Module: true -OpenIDE-Module-Layer: org/gephi/branding/layer.xml -OpenIDE-Module-Specification-Version: ${gephi.modules.specification.version} \ No newline at end of file diff --git a/modules/branding/src/main/nbm/module.xml b/modules/branding/src/main/nbm/module.xml deleted file mode 100644 index 492ee05a4f..0000000000 --- a/modules/branding/src/main/nbm/module.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - diff --git a/modules/branding/src/main/resources/core/core.jar/org/netbeans/core/startup/Bundle.properties b/modules/branding/src/main/resources/core/core.jar/org/netbeans/core/startup/Bundle.properties deleted file mode 100644 index db72100aa1..0000000000 --- a/modules/branding/src/main/resources/core/core.jar/org/netbeans/core/startup/Bundle.properties +++ /dev/null @@ -1,6 +0,0 @@ -currentVersion=${gephi.app.title} {0} -LBL_splash_window_title=Starting ${gephi.app.title} -SplashProgressBarBounds=0,249,473,3 -SplashProgressBarColor=0xFF9933 -SplashRunningTextBounds=10,235,450,12 -SplashRunningTextColor=0x0 diff --git a/modules/branding/src/main/resources/org/gephi/branding/Bundle.properties b/modules/branding/src/main/resources/org/gephi/branding/Bundle.properties deleted file mode 100644 index 0f8fe2c8ac..0000000000 --- a/modules/branding/src/main/resources/org/gephi/branding/Bundle.properties +++ /dev/null @@ -1,7 +0,0 @@ -OpenIDE-Module-Display-Category=Gephi UI - -org_gephi_branding_update_center=${gephi.branding.update.center.official.url} -org_gephi_branding_update_center_1=${gephi.branding.update.center.thirdparty.url} - -Services/AutoupdateType/org_gephi_branding_update_center.instance=Gephi Update Center -Services/AutoupdateType/org_gephi_branding_update_center_1.instance=Gephi Thirdparties Plugins \ No newline at end of file diff --git a/modules/branding/src/main/resources/org/gephi/branding/layer.xml b/modules/branding/src/main/resources/org/gephi/branding/layer.xml deleted file mode 100644 index 9307ea7fb9..0000000000 --- a/modules/branding/src/main/resources/org/gephi/branding/layer.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/pom.xml b/pom.xml index 74490d87aa..ef73587740 100644 --- a/pom.xml +++ b/pom.xml @@ -4,17 +4,17 @@ org.gephi gephi-parent - 0.9-SNAPSHOT + 0.11.3-SNAPSHOT pom gephi - http://gephi.org + https://gephi.org Gephi - The Open Graph Viz Platform - Gephi Consortium - http://consortium.gephi.org + Gephi + https://gephi.org 2007 @@ -22,56 +22,149 @@ CDDL 1.0 - http://www.opensource.org/licenses/CDDL-1.0 + https://www.opensource.org/licenses/CDDL-1.0 CDDL License 1.0 GPL v3 - http://www.opensource.org/licenses/GPL-3.0 + https://www.opensource.org/licenses/GPL-3.0 GPL v3 License - - - - gephi-dev - gephi-dev@lists.gephi.org - http://gephi.org/pipermail/gephi-dev/ - - + + + scm:git:git://github.com/gephi/gephi.git + scm:git:git@github.com:gephi/gephi.git + https://github.com/gephi/gephi + + + + + mbastian + Mathieu Bastian + mathieu.bastian@gephi.org + + + eduramiba + Eduardo Ramos + eduardo.ramos@gephi.org + + + jacomyma + Mathieu Jacomy + mathieu.jacomy@gephi.org + + + sheymann + SΓ©bastien Heymann + sebastien.heymann@gephi.org + + + jbilcke + Julian Bilcke + julian.bilcke@gephi.org + + + jersub + Jeremy Subtil + jeremy.subtil@gephi.org + + + cbartosiak + Cezary Bartosiak + cezary.bartosiak@gephi.org + + + megaterik + Taras Klaskovsky + taras.klaskovsky@gephi.org + + + vojtech-bardiovsky + Vojtech Bardiovsky + vojtech.bardiovsky@gephi.org + + + luizribeiro + Luiz Ribeiro + luiz.ribeiro@gephi.org + + + baiacu + Helder Suzuki + helder.suzuki@gephi.org + + + daniel-bernardes + Daniel Bernades + daniel.bernades@gephi.org + + + taynaud + Thomas Aynaud + thomas.aynaud@gephi.org + + + panisson + AndrΓ© Panisson + andre.panission@gephi.org + + + annaalkh + Anna Kharitonova + anna.kharitonova@gephi.org + + + binarycrayon + Yudi Xue + yudi.xue@gephi.org + + + totetmatt + Matthieu Totet + mattieu.totet@gephi.org + + + - + + yyyyMMddHHmm + ${maven.build.timestamp} + UTF-8 - 3.0.4 + 3.6.3 ${netbeans.run.params.ide} - - RELEASE74 + + RELEASE290 + + 0.8.6 + - 7.2 + 1.1-NB80 - 0.8.2 + ${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion} + + + ${parsedVersion.majorVersion}.${parsedVersion.minorVersion}${parsedVersion.qualifier?} - 1.6 - 1.6 + 17 -Xlint:all - true - true true true true - 4.7 + 5.12.0 + 4.2.1 768M ${project.build.directory}/surefire-reports/plain - ${testFailureIgnore} gephi @@ -79,132 +172,122 @@ false Gephi ${project.version} - - http://gephi.org/updates/official/${project.version}/catalog.xml - http://gephi.org/updates/thirdparty/${project.version}/catalog.xml - http://nexus.gephi.org/nexus/content/repositories/snapshots/external/updates/updates.xml - + + https://repo1.maven.org/maven2 + https://raw.githubusercontent.com/gephi/gephi/gh-pages/${gephi.minor.version}/autoupdate/updates.xml + https://raw.githubusercontent.com/gephi/gephi-plugins/gh-pages/plugins/${gephi.minor.version}/updates.xml + + + x64 + + + + https://api.adoptium.net/v3/binary/latest/${gephi.javac.release}/ga/mac/${gephi.bundle.arch}/jre/hotspot/normal/eclipse?project=jdk + https://api.adoptium.net/v3/binary/latest/${gephi.javac.release}/ga/windows/${gephi.bundle.arch}/jre/hotspot/normal/eclipse?project=jdk + https://api.adoptium.net/v3/binary/latest/${gephi.javac.release}/ga/linux/${gephi.bundle.arch}/jre/hotspot/normal/eclipse?project=jdk + Gephi - ???? - 2.2.0 Developer ID Application - - gephi-nexus - gephi-nexus - http://nexus.gephi.org/nexus/content/repositories/releases - http://nexus.gephi.org/nexus/content/repositories/snapshots - ${gephi.snapshot.repository.id} - ${gephi.snapshot.repository.url} - - - ${project.build.directory}/netbeans_site - git Gephi ${project.version} - C:/Program Files (x86)/Inno Setup 5 + C:/Program Files (x86)/Inno Setup 6 + + + + + + + + + 15m + + + + + - - external/apidocs + - - external/updates + 8.40.0 - 1.7 + 3.1.0 - 2.4 + 3.7.1 - 2.5 + 3.3.2 - 3.1 + 3.13.0 - 2.8 + 3.6.1 - 2.7 + 3.1.2 - 1.3.1 + 3.5.0 - 1.4 + 3.0.1 - 2.4 + 3.1.4 - 2.4 + 3.4.1 - 1.2 + 3.0.0 - 2.9.1 + 3.7.0 - 1.9.0 + 2.4.0 - 2.3.2 + 3.0.1 - 2.6 + 3.5.0 - 3.3 + 3.12.1 - 2.2.1 + 3.3.1 - 2.16 + 3.2.5 - 1.8 + 3.6.0 - 3.11.1 + 14.3 + + 2.0.2 - 1.0 + 0.10.0 - 1.0-beta-4 + 3.2.1 + + 2.21.0 + + 3.4.0 + + 7.4 + + 10.17.0 + 7.1.2 + + 1.7.3 - - - ${gephi.maven.requiredVersion} - - - - netbeans - NetBeans - http://bits.netbeans.org/nexus/content/groups/netbeans/ - - false - - gephi-thirdparty - Gephi 3rd Party - http://nexus.gephi.org/nexus/content/repositories/thirdparty/ + https://raw.github.com/gephi/gephi/mvn-thirdparty-repo/ false - - - - - - ${gephi.release.repository.id} - Gephi Release Repository - ${gephi.release.repository.url} - - - - - ${gephi.snapshot.repository.id} - Gephi Snapshot Repository - ${gephi.snapshot.repository.url} - - @@ -232,6 +315,11 @@ org-openide-util ${netbeans.version} + + org.netbeans.api + org-openide-util-ui + ${netbeans.version} + org.netbeans.api org-openide-util-lookup @@ -257,6 +345,11 @@ org-netbeans-api-progress ${netbeans.version} + + org.netbeans.api + org-netbeans-api-progress-nb + ${netbeans.version} + org.netbeans.api org-openide-nodes @@ -292,16 +385,50 @@ org-netbeans-api-annotations-common ${netbeans.version} + + org.netbeans.api + org-netbeans-swing-tabcontrol + ${netbeans.version} + + + org.netbeans.api + org-openide-io + ${netbeans.version} + + + org.netbeans.modules + org-netbeans-core + ${netbeans.version} + + + org.netbeans.modules + org-netbeans-core-output2 + ${netbeans.version} + + + org.netbeans.modules + org-netbeans-core-startup + ${netbeans.version} + + + org.netbeans.modules + org-netbeans-modules-masterfs + ${netbeans.version} + org.netbeans.api org-netbeans-modules-nbjunit ${netbeans.version} - test + + + org.netbeans.api + org-netbeans-modules-autoupdate-services + ${netbeans.version} ${project.groupId} - gephi-branding - ${project.version} + graphstore + ${graphstore.version} ${project.groupId} @@ -323,11 +450,6 @@ graph-api ${project.version} - - ${project.groupId} - data-attributes-api - ${project.version} - ${project.groupId} preview-api @@ -338,21 +460,11 @@ io-exporter-preview ${project.version} - - ${project.groupId} - lib.validation - ${project.version} - ${project.groupId} preview-export-ui ${project.version} - - ${project.groupId} - dynamic-api - ${project.version} - ${project.groupId} utils @@ -383,21 +495,6 @@ io-importer-api ${project.version} - - ${project.groupId} - io-processor-plugin - ${project.version} - - - ${project.groupId} - processor-plugin-ui - ${project.version} - - - ${project.groupId} - project-ui - ${project.version} - ${project.groupId} ui-utils @@ -413,16 +510,6 @@ settings-upgrader ${project.version} - - ${project.groupId} - spigot-plugin - ${project.version} - - - ${project.groupId} - spigot-plugin-ui - ${project.version} - ${project.groupId} statistics-api @@ -440,7 +527,7 @@ ${project.groupId} - timeline + timeline-api ${project.version} @@ -453,16 +540,6 @@ algorithms-plugin ${project.version} - - ${project.groupId} - utils-collection - ${project.version} - - - ${project.groupId} - gleem - ${project.version} - ${project.groupId} mostrecentfiles-api @@ -480,17 +557,17 @@ ${project.groupId} - tools-plugin + visualization-engine ${project.version} ${project.groupId} - welcome-screen + tools-plugin ${project.version} ${project.groupId} - workspace-ui + welcome-screen ${project.version} @@ -498,11 +575,6 @@ desktop-context ${project.version} - - ${project.groupId} - desktop-progress - ${project.version} - ${project.groupId} desktop-branding @@ -543,26 +615,11 @@ filters-api ${project.version} - - ${project.groupId} - clustering-api - ${project.version} - - - ${project.groupId} - ui-propertyeditor - ${project.version} - ${project.groupId} layout-plugin ${project.version} - - ${project.groupId} - desktop-spigot - ${project.version} - ${project.groupId} desktop-generate @@ -578,16 +635,6 @@ desktop-appearance ${project.version} - - ${project.groupId} - graph-dhns - ${project.version} - - - ${project.groupId} - attributes - ${project.version} - ${project.groupId} io-importer-plugin @@ -615,123 +662,146 @@ ${project.groupId} - desktop-recent-files + desktop-io-export ${project.version} ${project.groupId} - desktop-io-export + perspective-api ${project.version} ${project.groupId} - perspective-api + import-plugin-ui ${project.version} ${project.groupId} - desktop-clustering + desktop-window ${project.version} ${project.groupId} - import-plugin-ui + filters-plugin-ui ${project.version} ${project.groupId} - desktop-hierarchy + datalab-plugin ${project.version} ${project.groupId} - desktop-perspective + desktop-layout ${project.version} ${project.groupId} - filters-plugin-ui + desktop-import ${project.version} ${project.groupId} - datalab-plugin + desktop-preview ${project.version} ${project.groupId} - desktop-layout + appearance-plugin ${project.version} ${project.groupId} - dynamic-impl + appearance-plugin-ui ${project.version} ${project.groupId} - desktop-import + desktop-timeline ${project.version} ${project.groupId} - desktop-preview + desktop-filters ${project.version} ${project.groupId} - appearance-plugin + batik-wrapper ${project.version} ${project.groupId} - appearance-plugin-ui + core-library-wrapper ${project.version} ${project.groupId} - desktop-tools + ui-library-wrapper ${project.version} ${project.groupId} - desktop-timeline + desktop-icons ${project.version} ${project.groupId} - directory-chooser + desktop-search ${project.version} ${project.groupId} - desktop-filters + desktop-attributes ${project.version} + + io.sentry + sentry + ${gephi.sentry.version} + + + + + org.mockito + mockito-core + ${gephi.mockito.version} + test + + + org.awaitility + awaitility + ${gephi.awaitility.version} + test + + + ${project.groupId} - clustering-plugin + project-api ${project.version} + test-jar ${project.groupId} - core-library-wrapper + graph-api ${project.version} + test-jar ${project.groupId} - ui-library-wrapper + io-importer-api ${project.version} + test-jar - - + + - org.testng - testng - 6.8.7 + org.netbeans.api + org-netbeans-modules-nbjunit test @@ -742,15 +812,33 @@ + org.codehaus.mojo + versions-maven-plugin + ${gephi.versions-maven-plugin.version} + + file:///${session.executionRootDirectory}/maven-version-rules.xml + + + + org.apache.netbeans.utilities nbm-maven-plugin ${gephi.nbm-maven-plugin.version} + true org.apache.maven.plugins maven-compiler-plugin ${gephi.maven-compiler-plugin.version} + + org.apache.maven.plugins + maven-clean-plugin + ${gephi.maven-clean-plugin.version} + org.apache.maven.plugins maven-jar-plugin @@ -766,6 +854,11 @@ maven-deploy-plugin ${gephi.maven-deploy-plugin.version} + + org.apache.maven.plugins + maven-enforcer-plugin + ${gephi.maven-enforcer-plugin.version} + org.apache.maven.plugins maven-release-plugin @@ -823,13 +916,50 @@ org.apache.maven.plugins - maven-reactor-plugin - ${gephi.maven-reactor-plugin.version} + maven-assembly-plugin + ${gephi.maven-assembly-plugin.version} org.apache.maven.plugins - maven-assembly-plugin - ${gephi.maven-assembly-plugin.version} + maven-site-plugin + ${gephi.maven-site-plugin.version} + + + org.sonatype.central + central-publishing-maven-plugin + ${gephi.central-publishing-maven-plugin.version} + + + org.apache.maven.plugins + maven-scm-publish-plugin + ${gephi.scm-publish-plugin.version} + + + org.apache.maven.plugins + maven-checkstyle-plugin + ${gephi.maven-checkstyle-plugin.version} + + + com.puppycrawl.tools + checkstyle + ${gephi.checkstyle.version} + + + + + net.jsign + jsign-maven-plugin + ${gephi.jsign.version} + + + com.igormaznitsa + jcp + ${gephi.jcp-maven-plugin.version} + + + org.codehaus.mojo + flatten-maven-plugin + ${gephi.flatten-maven-plugin.version} @@ -838,14 +968,32 @@ + + + org.apache.maven.plugins + maven-enforcer-plugin + + + enforce-maven + + enforce + + + + + ${gephi.maven.requiredVersion} + + + + + + + maven-compiler-plugin - ${gephi.javac.debug} - ${gephi.javac.optimize} - ${gephi.javac.source} - ${gephi.javac.target} + ${gephi.javac.release} ${gephi.javac.showDeprecation} ${gephi.javac.showWarnings} ${gephi.javac.fork} @@ -855,30 +1003,13 @@ - - - org.apache.maven.plugins - maven-jar-plugin - - true - - - - package - - jar - - - - - - org.apache.maven.plugins maven-surefire-plugin - true + --add-opens java.base/java.net=ALL-UNNAMED + false @@ -892,7 +1023,7 @@ copy-resources - + ${basedir}/target/ @@ -907,24 +1038,44 @@ + + + + org.codehaus.mojo + build-helper-maven-plugin + + + parse-version + + parse-version + + + + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.build.outputDirectory}/META-INF/MANIFEST.MF + + + - org.codehaus.mojo + org.apache.netbeans.utilities nbm-maven-plugin true - src/main/nbm/module.xml ${project.build.directory}/manifest.mf ${brandingToken} ${brandingToken} ${gephi.netbeans.useOSGiDependencies} - - src/keystore/keystore.ks - gephi - ${keystore.password} - true CDDL 1.0 and GNU GPL v3 @@ -939,48 +1090,127 @@ false false + + + + default-branding + none + + + + + + + org.apache.maven.plugins + maven-site-plugin + + + default-site + site + + site + stage + + + true + + + + + + + + org.apache.maven.plugins + maven-checkstyle-plugin + + checkstyle.xml + checkstyle-suppressions.xml + true + false + true + + true + + + + validate + validate + + check + + + - - + + - deployment + skipTests + - org.apache.maven.plugins - maven-javadoc-plugin + maven-surefire-plugin - private - true - true - true + true - - - attach-javadocs - deploy - - jar - - - - - + + + + + + + enableCheckStyle + + + - maven-source-plugin + org.apache.maven.plugins + maven-checkstyle-plugin + + false + + + + + + + + + sign-artifacts + + + + + + org.apache.netbeans.utilities + nbm-maven-plugin + true + + + keystore.ks + gephi + ${keystore.password} + + + + + + org.apache.maven.plugins + maven-gpg-plugin - attach-sources + sign-gpg-artifacts + verify - jar - + sign + @@ -988,174 +1218,173 @@ - + - release + deployment + + - ${gephi.release.repository.id} - ${gephi.release.repository.url} - external/apidocs/${project.version} - external/updates/${project.version} + false + false + -Xlint:none - - - - - release-extra + - + - maven-deploy-plugin + org.apache.maven.plugins + maven-checkstyle-plugin - true + false - - + + + + org.sonatype.central + central-publishing-maven-plugin + true + + central + false + ${project.version} + true + + + + + + + + + create-javadoc + + + org.apache.maven.plugins - maven-install-plugin + maven-dependency-plugin - default-install - none + unpack + false + pre-site + + unpack + + + + + org.gephi + graphstore + ${graphstore.version} + sources + + ${project.build.directory}/graphstore-sources + + + + - - + + org.apache.maven.plugins maven-javadoc-plugin + + private + true + false + true + false + none + 17 + attach-javadocs - none + package + + jar + - - - - - - org.apache.maven.plugins - maven-source-plugin - + - attach-sources - none + aggregate + site + false + + aggregate-jar + + + public + Gephi ${project.version} API Index + org.gephi.datalab.api:org.gephi.datalab.spi:org.gephi.datalab.spi.columns:org.gephi.datalab.spi.columns.merge:org.gephi.datalab.spi.edges:org.gephi.datalab.spi.general:org.gephi.datalab.spi.nodes:org.gephi.datalab.spi.rows.merge:org.gephi.datalab.spi.values:org.gephi.filters.api:org.gephi.filters.spi:org.gephi.graph.api:org.gephi.graph.api.types:org.gephi.graph.spi:org.gephi.io.exporter.api:org.gephi.io.exporter.spi:org.gephi.io.generator.api:org.gephi.io.generator.spi:org.gephi.io.importer.api:org.gephi.io.importer.spi:org.gephi.io.processor.spi:org.gephi.layout.api:org.gephi.layout.spi:org.gephi.perspective.api:org.gephi.perspective.spi:org.gephi.preview.api:org.gephi.preview.spi:org.gephi.preview.types:org.gephi.project.api:org.gephi.project.spi:org.gephi.appearance.api:org.gephi.appearance.spi:org.gephi.statistics.api:org.gephi.statistics.spi:org.gephi.timeline.api:org.gephi.tools.api:org.gephi.tools.spi:org.gephi.utils.longtask.api:org.gephi.utils.longtask.spi:org.gephi.utils.progress:org.gephi.visualization.api:org.gephi.visualization.spi + true + false + true + modules/LongTaskAPI/src/main/java;modules/DataLaboratoryAPI/src/main/java;modules/FiltersAPI/src/main/java;modules/GraphAPI/src/main/java;modules/ExportAPI/src/main/java;modules/GeneratorAPI/src/main/java;modules/ImportAPI/src/main/java;modules/LayoutAPI/src/main/java;modules/PerspectiveAPI/src/main/java;modules/PreviewAPI/src/main/java;modules/ProjectAPI/src/main/java;modules/AppearanceAPI/src/main/java;modules/StatisticsAPI/src/main/java;modules/TimelineAPI/src/main/java;modules/ToolsAPI/src/main/java;modules/VisualizationAPI/src/main/java;${project.build.directory}/graphstore-sources + - - + + - export-javadoc + create-modules - - - org.apache.maven.plugins - maven-javadoc-plugin - false - - aggregate - - - public - Gephi ${project.version} API Index - org.gephi.clustering.api:org.gephi.clustering.spi:org.gephi.data.attributes.api:org.gephi.data.attributes.spi:org.gephi.data.attributes.type:org.gephi.data.properties:org.gephi.datalab.api:org.gephi.datalab.spi:org.gephi.datalab.spi.columns:org.gephi.datalab.spi.columns.merge:org.gephi.datalab.spi.edges:org.gephi.datalab.spi.general:org.gephi.datalab.spi.nodes:org.gephi.datalab.spi.rows.merge:org.gephi.datalab.spi.values:org.gephi.dynamic.api:org.gephi.filters.api:org.gephi.filters.spi:org.gephi.graph.api:org.gephi.graph.spi:org.gephi.io.exporter.api:org.gephi.io.exporter.spi:org.gephi.io.generator.api:org.gephi.io.generator.spi:org.gephi.io.importer.api:org.gephi.io.importer.spi:org.gephi.io.processor.spi:org.gephi.layout.api:org.gephi.layout.spi:org.gephi.partition.api:org.gephi.partition.spi:org.gephi.perspective.api:org.gephi.perspective.spi:org.gephi.preview.api:org.gephi.preview.spi:org.gephi.preview.types:org.gephi.project.api:org.gephi.project.spi:org.gephi.appearance.api:org.gephi.appearance.spi:org.gephi.statistics.api:org.gephi.statistics.spi:org.gephi.timeline.api:org.gephi.tools.api:org.gephi.tools.spi:org.gephi.utils.longtask.api:org.gephi.utils.longtask.spi:org.gephi.utils.progress - true - true - true - - - - - - org.codehaus.mojo - wagon-maven-plugin - - ${project.build.directory}/site/apidocs - ${gephi.default.repository.url} - ${gephi.javadoc.repository.path} - ${gephi.default.repository.id} - - - - - - org.apache.maven.plugins - maven-assembly-plugin - - gnu - true - ${project.name}-${project.version} - - src/assemble/javadoc.xml - - false - - - - - - org.apache.maven.plugins - maven-deploy-plugin - false - - jar - false - ${gephi.default.repository.id} - ${gephi.default.repository.url} - ${project.artifactId} - ${project.groupId} - ${project.version} - javadoc - ${project.build.directory}/${brandingToken}-${project.version}-javadoc.jar - - + + + - - + + - export-sources + create-sources - - + + - maven-assembly-plugin - - gnu - true - ${project.name}-${project.version} - - src/assemble/sources.xml - - false - + maven-source-plugin + + + attach-sources + + jar-no-fork + + + - - + + - org.apache.maven.plugins - maven-deploy-plugin - false - - tar.gz - false - ${gephi.default.repository.id} - ${gephi.default.repository.url} - ${project.artifactId} - ${project.groupId} - ${project.version} - sources - ${project.build.directory}/${brandingToken}-${project.version}-sources.tar.gz - + maven-assembly-plugin + + + source-assembly + package + + single + + + gnu + true + ${project.name}-${project.version} + + src/assemble/sources.xml + + false + + + @@ -1164,36 +1393,39 @@ - modules/branding modules/application modules/AlgorithmsPlugin modules/AppearanceAPI modules/AppearancePlugin modules/AppearancePluginUI modules/LongTaskAPI + modules/DataLaboratoryAPI + modules/DataLaboratoryPlugin modules/DBDrivers + modules/DesktopWindow modules/DesktopBranding modules/DesktopContext + modules/DesktopDataLaboratory modules/DesktopGenerate modules/DesktopExport + modules/DesktopFilters modules/DesktopImport modules/DesktopLayout modules/DesktopAppearance - modules/DesktopPerspective modules/DesktopPreview - modules/DesktopProgress modules/DesktopProject - modules/DesktopRecentFiles modules/DesktopStatistics - modules/DirectoryChooser - modules/DynamicAPI + modules/DesktopTimeline modules/ExportAPI modules/ExportPlugin modules/ExportPluginUI + modules/FiltersAPI + modules/FiltersImpl + modules/FiltersPlugin + modules/FiltersPluginUI modules/GeneratorAPI modules/GeneratorPlugin modules/GeneratorPluginUI - modules/Gleem modules/GraphAPI modules/ImportAPI modules/ImportPlugin @@ -1206,24 +1438,27 @@ modules/PreviewExport modules/PreviewExportUI modules/PreviewPlugin - modules/ProcessorPlugin - modules/ProcessorPluginUI modules/ProjectAPI - modules/ProjectUI modules/SettingsUpgrader modules/StatisticsAPI modules/StatisticsPlugin modules/StatisticsPluginUI + modules/TimelineAPI modules/ToolsAPI + modules/ToolsPlugin modules/UIComponents modules/UIUtils modules/Utils - modules/ValidationAPI modules/VisualizationAPI modules/VisualizationImpl + modules/VisualizationEngine + modules/VizEngineDemo modules/WelcomeScreen - modules/WorkspaceUI + modules/BatikWrapper modules/CoreLibraryWrapper modules/UILibraryWrapper + modules/DesktopIcons + modules/DesktopSearch + modules/DesktopAttributes - \ No newline at end of file + diff --git a/snap/gui/gephi.desktop b/snap/gui/gephi.desktop new file mode 100644 index 0000000000..64f16d1b59 --- /dev/null +++ b/snap/gui/gephi.desktop @@ -0,0 +1,11 @@ +[Desktop Entry] +Version=1.0 +Type=Application +Name=Gephi +Comment=The Open Graph Viz Platform +Exec=gephi %F +Icon=${SNAP}/meta/gui/gephi.png +Terminal=false +Categories=Science; +StartupNotify=true +StartupWMClass=Gephi \ No newline at end of file diff --git a/snap/gui/gephi.png b/snap/gui/gephi.png new file mode 100644 index 0000000000..0ccc65c771 Binary files /dev/null and b/snap/gui/gephi.png differ diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml new file mode 100644 index 0000000000..d2cce7bf5b --- /dev/null +++ b/snap/snapcraft.yaml @@ -0,0 +1,42 @@ +name: gephi +title: Gephi +base: core24 +version: 0.11.0-SNAPSHOT +summary: The Open Graph Viz Platform +description: | + **Gephi is the leading open-source platform for visualizing and manipulating large graphs.** + * **Fast** Powered by a built-in OpenGL engine, Gephi is able to push the envelope with very large networks. Visualize networks up to a million elements. All actions (e.g. layout, filter, drag) run in real-time. + * **Simple** Easy to install and get started. An UI that is centered around the visualization. Like Photoshopβ„’ for graphs. + * **Extensible** Extend Gephi with plug-ins. + + Example datasets can be found on our docs: https://docs.gephi.org/desktop/User_Manual/Datasets/ + + Localization is available in English, French, Spanish, Japanese, Russian, Brazilian Portuguese, Chinese, Czech, German, Romanian, Greek, Hungarian, Korean, Swedish and Ukrainian. + +license: GPL-3.0 +donation: https://opencollective.com/gephi/donate?interval=oneTime&amount=5&contributeAs=me&tags=snapcraft +platforms: + amd64: + arm64: +icon: snap/gui/gephi.png +grade: devel # must be 'stable' to release into candidate/stable channels +confinement: strict + +parts: + gephi: + stage-packages: + - libglu1-mesa + plugin: dump + source: + - on amd64: https://central.sonatype.com/repository/maven-snapshots/org/gephi/gephi/0.11.0-SNAPSHOT/gephi-0.11.0-20260315.161618-58-linux-x64.tar.gz + - on arm64: https://central.sonatype.com/repository/maven-snapshots/org/gephi/gephi/0.11.0-SNAPSHOT/gephi-0.11.0-20260315.163347-61-linux-aarch64.tar.gz + source-type: tar + +apps: + gephi: + extensions: [gnome] + plugs: + - home + - network + - opengl + command: bin/gephi diff --git a/src/assemble/javadoc.xml b/src/assemble/javadoc.xml deleted file mode 100644 index 6d369b0ba9..0000000000 --- a/src/assemble/javadoc.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - javadoc - - jar - - - - target/site/apidocs - / - - ** - - - - - diff --git a/src/assemble/sources.xml b/src/assemble/sources.xml index 858d29a5ac..baef64ca78 100644 --- a/src/assemble/sources.xml +++ b/src/assemble/sources.xml @@ -6,12 +6,18 @@ - . - / + ${basedir} + true **/target/** .git/** + **/*.log + **/*.asc + **/*.ks + **/*.pfx + **/.DS_Store + .github/** diff --git a/src/keystore/keystore.ks b/src/keystore/keystore.ks deleted file mode 100755 index 7db854fb6c..0000000000 Binary files a/src/keystore/keystore.ks and /dev/null differ diff --git a/src/macosx-launcher/Binaries/AppLauncher_aarch64 b/src/macosx-launcher/Binaries/AppLauncher_aarch64 new file mode 100755 index 0000000000..e8642bf6ba Binary files /dev/null and b/src/macosx-launcher/Binaries/AppLauncher_aarch64 differ diff --git a/src/macosx-launcher/Binaries/AppLauncher_x64 b/src/macosx-launcher/Binaries/AppLauncher_x64 new file mode 100755 index 0000000000..8dced221dc Binary files /dev/null and b/src/macosx-launcher/Binaries/AppLauncher_x64 differ diff --git a/src/macosx-launcher/Package.swift b/src/macosx-launcher/Package.swift new file mode 100644 index 0000000000..0e9b7f1a12 --- /dev/null +++ b/src/macosx-launcher/Package.swift @@ -0,0 +1,35 @@ +// swift-tools-version:5.1 +// The swift-tools-version declares the minimum version of Swift required to build this package. +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +import PackageDescription + +let package = Package( + name: "AppLauncher", + platforms: [ + .macOS(.v10_13) + ], + dependencies: [], + targets: [ + .target( + name: "AppLauncher", + dependencies: []), + ] +) diff --git a/src/macosx-launcher/README.md b/src/macosx-launcher/README.md new file mode 100644 index 0000000000..a1bbe264d9 --- /dev/null +++ b/src/macosx-launcher/README.md @@ -0,0 +1,51 @@ + +# macOS NetBeans Platform Launcher + +[Native macOS NetBeans Platform launcher](https://github.com/apache/netbeans/tree/master/harness/apisupport.harness/macosx-launcher-src) for app bundle. It wraps a call to `Contents/Resources/gephi/gephi` +* Requires macOS with swift to build + + +Manually build with the following command: +```shell +% swift build -c release --arch arm64 +``` + +Then, run the two following commands to fix some erroneous rpath added automatically (more details [here](https://developer.apple.com/forums/thread/706414)): +```shell +install_name_tool -delete_rpath /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx .build/release/AppLauncher +install_name_tool -delete_rpath /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift-5.5/macosx .build/release/AppLauncher +``` + +Finally, copy the binary to the right folder. +```shell +cp .build/release/AppLauncher Binaries/AppLauncher_aarch64 +``` + +Repeat the same operation for `x86_64`: +```shell +swift build -c release --arch x86_64 +install_name_tool -delete_rpath /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/macosx .build/release/AppLauncher +install_name_tool -delete_rpath /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift-5.5/macosx .build/release/AppLauncher +cp .build/release/AppLauncher Binaries/AppLauncher_x64 +``` + +Binaries are stored in the `Binaries` folder. \ No newline at end of file diff --git a/src/macosx-launcher/Sources/AppLauncher/main.swift b/src/macosx-launcher/Sources/AppLauncher/main.swift new file mode 100644 index 0000000000..57942d7467 --- /dev/null +++ b/src/macosx-launcher/Sources/AppLauncher/main.swift @@ -0,0 +1,44 @@ +/* +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, +* software distributed under the License is distributed on an +* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +* KIND, either express or implied. See the License for the +* specific language governing permissions and limitations +* under the License. +*/ + +import Foundation + +let brandingToken = Bundle.main.object(forInfoDictionaryKey: "CFBundleExecutable") as? String +let appName = Bundle.main.object(forInfoDictionaryKey: "CFBundleName") as? String +let launcherURL = Bundle.main.url(forResource: brandingToken, withExtension: "", subdirectory: brandingToken! + "/bin") + +var args = [String]() + +// add user's command line arguments +for argument in Array(CommandLine.arguments.dropFirst()) { + args.append(argument) +} + + +let launchNbexec = Process() +var env = ProcessInfo.processInfo.environment +env["APP_DOCK_NAME"] = appName +launchNbexec.environment = env +launchNbexec.arguments = args +launchNbexec.executableURL = launcherURL +try launchNbexec.run() + +// needed to keep Dock name based on CFBundleName from Info.plist +// does not work if called from command line. +launchNbexec.waitUntilExit() diff --git a/src/main/javadoc/overview.html b/src/main/javadoc/overview.html index b4400f3841..4e2eef0981 100644 --- a/src/main/javadoc/overview.html +++ b/src/main/javadoc/overview.html @@ -2,86 +2,327 @@ Gephi API Overview + -

              This documents provides Gephi APIs documentation and gives details about current status of each API. Each API is categorized by it's stability: - stable, under development, deprecated or - friend. + stable, under development or deprecated.

              -
              +

              API Changes

              -

              +

              0.11.0

              +

              ProjectAPI

              +
                +
              • Addition of newWorkspace() and openNewWorkspace() methods in ProjectController with the option to pass objects that will be added to the Workspace's lookup at creation time.
              • +
              +

              Graph API

              +
                +
              • Dependency on Joda-Time has been removed and replaced by java.time. The dependency to the legacy Colt library was also removed.
              • +
              • A new configuration builder has been added in Configuration.Builder to facilitate configuration customization. A number of configurations - which previously lived as static fields - have been migrated into it. The GraphModel.setConfiguration() method has been deprecated. Configurations are therefore expected to be defined when GraphModel is created. This has consequences on the Workspace lifecycle, as once a Workspace is created, its GraphModel is already set and the configuration can't be changed afterward. A configuration can however be passed to openNewWorkspace() to be taken in account when GraphModel is initialized.
              • +
              • Addition of a getDefaultConfigurationBuilder() method in GraphController that returns the default graph configuration used when creating new GraphModel instances. This should be used as a basis configuration by users willing to create GraphModel with custom configurations.
              • +
              • Instant is now supported as an element type. This allows to store dates and times, but unfortunately it wasn't possible to make the Serialization backward compatible. In other words, if an Instant column is used , it won't be possible to be loaded in previous versions.
              • +
              • Addition of Graph.getNodeByStoreId() and Graph.getEdgeByStoreId() methods to retrieve elements based only on their store id. This allows for faster retrieval. Keep in mind, though, that store ids are re-used when elements are removed. Use those methods in combination with GraphModel.getMaxNodeStoreId() and GraphModel. + getMaxEdgeStoreId() when you want to store elements based on their store ids.
              • +
              • Add new SpatialIndex that holds a quadtree-based spatial index of elements. It can be retrieved via Graph. + getSpatialIndex(). The spatial index allows retrieving nodes and edges based on a Rect2D.
              • +
              • Node/Edge Iterable now have spliterator(), stream() and parallelStream() methods. Therefore, it's possible to iterate/filter over elements in parallel, leading to significant performance gains.
              • +
              • Add a new createView() method to GraphModel based on predicates, to facilitate view creation.
              • +
              +

              Layout API

              +
                +
              • The LayoutController has a new executeLayout(Layout transformation) method to facilitate one-off, synchronous layout execution. This is useful for transformations like rotation or scaling.
              • +
              +

              Tools API

              +
                +
              • Added SINGLE_NODE_SELECTION as a new enum in ToolSelectionType. By default, selection is multi-node but single-node is also now possible via this option.
              • +
              +

              Visualization API

              +
                +
              • A completely new visualization engine has been integrated, and therefore the Visualization API has been rewritten from scratch as well.
              • +
              • The API follows our convention with one VisualizationModel per workspace, and a VisualizationController as the entry point.
              • +
              • All settings in the UI can now be controlled via the controller/model.
              • +
              +

              Preview API

              +
                +
              • A Mode.LIGHTER was added to DependantColor, so that it matches the new engine options set.
              • +
              • Node scale (defined in Visualization API) is now taken in account to determine final node size. It defaults to 1.0 otherwise. Same applies to the edge scale, taken in account in edge thickness formula.
              • +
              • Similar to Overview, it's now possible to turn off using edge weights via the EDGE_USE_WEIGHT property.
              • +
              • New NODE_LABEL_CUSTOM_FONT and EDGE_LABEL_CUSTOM_FONT boolean properties were added. When false, the font used by Visualization API is used. The label sizing formula has been revisited to match settings from Overview.
              • +
              • PreviewProperty now supports optional numeric bounds via a new setMinMax(Number min, Number max) method. When set, values passed to setValue() are clamped to the declared range. Built-in properties such as sizes, opacities and the label grid size are now constrained accordingly.
              • +
              • The new NODE_LABEL_AVOID_OVERLAP boolean property controls whether the node label overlap avoidance algorithm runs or not. Larger labels always take precedence. An additional NODE_LABEL_OVERLAP_GRID_SIZE property controls the algorithm grid size. The smaller, the closer labels will be from each other.
              • +
              +

              Appearance API

              +
                +
              • Added onApply(Function function) method to TransformerUI interface to allow transformers to react to apply events.
              • +
              +

              Import API

              +
                +
              • Processors function in ImportController now return a Workspace to clarify which worspaces graph data has been pushed to, given that providing a workspace to process() functions isn't required (and sometimes not even allowed, depending on the processor).
              • +
              • Added hasIssues() to Report class to check if the report contains any issues.
              • +
              • Added a new ImportException base class for known, user-facing import failures, along with an EmptyFileException subclass. Empty files are now detected centrally in ImportController and raised as EmptyFileException with a localized message, so UIs can present a clean error instead of the default unexpected-exception treatment.
              • +
              +

              0.10.0

              +

              Project API

              +
                +
              • ProjectController now executes all methods synchronously, protected by an internal lock. The openProject(), saveProject() no longer return a Runnable.
              • +
              • Addition of a ProjectListener to receive events from ProjectController.
              • +
              • New ProjectController.openNewWorkspace() to simplify usage.
              • +
              • New WorkspaceMetaData object in Workspace to manage description.
              • +
              • Creation of new SPI classes: Controller and Model to facilitate workspace model creation. It can replace usage of WorkspaceListener to handle model creation and maintenance.
              • +
              • Removal of org.gephi.project.spi.ProjectPropertiesUI as it had no clear purpose.
              • +
              • The ProjectController.startup() method was removed as it wasn't used.
              • +
              • Deprecation of ProjectInformation. Relevant methods have been ported to Project.
              • +
              • Also, deprecation of WorkspaceInformation. Relevant methods have been ported to Workspace.
              • +
              • Finally, deprecation of WorkspaceProvider. Relevant methods were ported to Project.
              • +
              • The duplication of workspaces is now managed through existing persistence providers. Therefore, the WorkspaceDuplicateProvider SPI has been removed.
              • +
              +

              GraphAPI

              +
                +
              • New methods retainNodes() and retainEdges() have been added to Graph.
              • +
              • Make edge types editable via Edge.setType().
              • +
              +

              LongTask API

              +
                +
              • The LongTaskExecutor now has execute methods that also support Callable in addition of Runnable.
              • +
              +

              Preview API

              +
                +
              • The PDFTarget interface now gives access to the PDFBox objects as it has been migrated from iText to Apache PDFBox. All Renderer implementation need to adapt the PDF rendering accordingly.
              • +
              • A setGlobalCanvasSize(boolean) method was added to the PreviewController to control whether the full or filtered (default) graph is used when calculating canvas size.
              • +
              +

              Import API

              +
                +
              • The ContainerLoader now has a setMetadata() method to provide graph metadata.
              • +
              +

              0.9.3

              +

              Graph API

                -
              • (December 07 2012) Add support for mouse listeners in Preview plugins. Create a PreviewMouseListener and implement MouseResponsiveRenderer interface in the renderers that use the listener. -
              • -
              • (April 10 2012) Add a getShortDescription() method to the StatisticsUI API. It enables to get a short description of statistics (used to display tooltips). -
              • -
              • (March 26 2012) Add a needsItemBuilder method to Renderer in Preview API. +
              • Add getEdges(int type) to Graph to allow retrieval of only edges of a specific type.
              • +
              • Add getEdgeTypeLabels(boolean) to GraphModel.
              • +
              • Add min/max to TimeSet and Element.getTimeBounds().
              • +
              • Add Column.exists() as new utility.
              • +
              • Add GraphLock to the API in Graph to expose locking states.
              • +
              • Make Table a Collection of Column.
              • +
              • Add new method Column.isDynamicAttribute().
              • +
              • Add toSet() in addition of toCollection() to element iterables.
              • +
              • Add new Table.countColumns(Origin) method.
              • +
              • Add getElementIndex() methods to GraphModel when providing a Table.
              • +
              • Add isNodeTable() and isEdgeTable() methods to Table.
              • +
              +

              Appearance API (under development)

              +
                +
              • Partition and Ranking now always receive the Graph as parameter for all methods that do need access to the underlying index to facilitate local scale support.
              • +
              • Add getColumn() to Ranking so it aligns with Partition.
              • +
              • Add getNormalizedValue() to Ranking to more easily retrieve the normalised value.
              • +
              • Partition now has a static DEFAULT_COLOR when the color is not found for a given value.
              • +
              • Removed Partition.setColors() as it was prone to confusion.
              • +
              • Add transformAll(Iterable<? extends Element>) to Function.
              • +
              • Split isLocalScale() into isRankingLocalScale() and isPartitionLocalScale() in AppearanceModel.
              • +
              • Make Function getters in AppearanceModel independent from Graph as this should be handled automatically based on the local/global state.
              • +
              +

              Preview API

              +
                +
              • A postProcess() method has been added to the Renderer SPI to allow customization once all items have been rendered.
              • +
              +

              Archive

              +
                +
              • + (September 08 2017) A new optional FileAware interface FileImporter in ImporterAPI. + This allows file importers to receive the file to import in a setFile method instead of the setReader method being called. + If your FileImporter implements this interface, setFile will be called, and setReader will not be called. +
              • +
              • + (February 07 2016) A new setColors method has been added to Partition in AppearanceAPI. +
              • +
              • + (January 28 2016) The SpigotImporter and SpigotImporterBuilder interfaces in ImportAPI have been renamed to WizardImporter and WizardImporterBuilder. Methods have been accordingly renamed in ImportController as well. +
              • +
              • + (January 03 2016) The FilterBuilder.getFilter() and CategoryBuilder.getBuilders() methods in FiltersAPI now take a Workspace as a parameter. +
              • +
              • + (December 08 2015) The functionalities of DynamicAPI have either been replaced by native GraphAPI support or added to the TimelineAPI, effectively removing DynamicAPI from the codebase. The TimeFormat can be set via setTimeFormat() on GraphModel. Estimators are now configurable per column and can directly be set from the Column. Obtaining the minimum time bounds can now be obtained from the TimeIndex directly from GraphModel. +
              • +
              • + (December 03 2015) The createQuery() method in FilterController now can also take a FilterBuilder instead of a Filter. It allows to track down builders down to the query level. +
              • +
              • + (November 25 2015) The ImportAPI now supports importing multiple graphs at the time and supports graph slices through an additional parameter on ContainerLoader. The setTimestamp() and setInterval() allows to define a point or period of existence for the entire graph. The ImportController also allow multiple containers to be processed through a new process() method. In parallel, ImporterUI now takes multiple importers and so does the Processor interface that now takes multiple containes. +
              • +
              • + (November 21 2015) The NodeFilter and EdgeFilter interfaces now inherit from a new ElementFilter so it's easier to create filters that work at the element level. +
              • +
              • + (November 21 2015) The filter() method in Operator now takes an array of Subgraph instead of Graph. This gives access to operations such as union or not. +
              • +
              • + (November 11 2015) Remove ClusteringAPI from codebase. It needs a complete rewrite. +
              • +
              • + (October 27 2015) Add ability to configure timezone with setTimeZone() on ContainerLoader in ImportAPI. +
              • +
              • + (October 10 2015) Remove standalone ContainerFactory class in ImportAPI and replace it with Container.Factory. Also add the ability to configure the TimeRepresentation in ContainerLoader. Finally, add color parsing utility in ImportUtils. It can be used to parse color names or codes. +
              • +
              • + (September 06 2015) The AttributeModel parameter in the execute() method of Statistics interface in StatisticsAPI has been removed as all features are now in GraphModel. +
              • +
              • + (August 26 2015) The ChangeListener in WorkspaceInformation has been replaced with a PropertyChangeListener. +
              • +
              • + (July 21 2013) Both RankingAPI and PartitionAPI have been replaced by a new AppearanceAPI, which supports both concepts. The SPI allows to create Transformer services, which can support either ranking or partition transformations. Ranking and Partition instances are defined in the API and gives access to underlying data. The core concept in appearance are functions, which wrap the transformation entirely and can be accessed in AppearanceModel. +
              • +
              • + (May 27 2013) The Processing dependency in PreviewAPI has been removed and replaced by regular Java2D. Therefore, the ProcessingTarget is now the G2DTarget. Also add a resize() method to facilitate integration. +
              • +
              • + (May 13 2013) Addition of a EdgeWeightMergeStrategy enum to control the way parallel edge weights are merged in ImportAPI. +
              • +
              • + (May 12 2013) Add ability to create WorkspacePersistenceProvider with a new SPI interface: WorkspaceBytesPersistenceProvider. The XML-based interfce has being renamed into WorkspaceXMLPersistenceProvider. +
              • +
              • + (April 15 2013) Importers can now use the setValueString() method on ElementDraft. This will automatically parse the value based on the declared type reducing parsing code on the importer side. If the type is already in the right type, use the setValue() instead. +
              • +
              • + (April 07 2013) Refactoring of the import API. Introduction of a ColumnDraft interface which represents a to-be-created column and the method to manipulate them in ContainerLoader. The NodeDraft and EdgeDraft classes now inherits from a new ElementDraft, centralizing a lot of the code. The EdgeDraftGetter and NodeDraftGetter have been removed and their methods moved directly to the node/edge draft. New elements are now created using the ElementDraft.Factory, which can be obtained with the factory() method on ContainerLoader. Previously the ContainerUnloader returned an AttributeModel. This has been replaced with iterables over column drafts. The EdgeDefault enum becomes EdgeDiretionDefault and represents a graph-level configuration. The EdgeDefault is now edge-level configuration and can be set by setEdgeDirection() on EdgeDraft. Finally, convenient setColor() methods have been added to ElementDraft. +
              • +
              • + (April 07 2013) Complete rewrite of the GraphAPI and add GraphStore as dependency. The new API is entirely defined in the GraphStore project and Gephi makes it available through the GraphAPI. The AttributesAPI functionalities have been consolidated into the new graph API and therefore has been removed. There is too many API changes to be listed all but notable ones are the following. +
                  +
                • + All attribute features (e.g. add column) are now directly accessible from the GraphModel, and there's no more AttributeModel. +
                • +
                • + The AttributeColumn is renamed into Column, the AttributeTable is renamed into Table, AttributeOrigin is renamed into Origin and the AttributeType has been replaced by the direct usage of Class objects. Moreover, the AttributeUtils is now entirely static (i.e. no more needed to obtain an instance) and has multiple important additions such as full parse support. +
                • +
                • + The support for hierarchical graphs has been removed, but multi-graph support added. Each edge now can have a relationship type, and is zero by default. These types can be associated with an arbitrary label object, which can be configured in GraphModel.addEdgeType(). +
                • +
                • + All node/edge data are now directly accessible from the interface. For instance, attribute values can be retrieved with the getAttribute() methods. All properties such as color or position are also accessible directly on the Node/Edge interfaces. +
                • +
                • + Dynamic graphs can now be represented with timestamps as well. Intervals are still supported but the API user must configure the preferred representation through the Configuration (must be done at initialization). The way elements' existence overtime has been greatly simplified with the addition of timestamp/interval management methods on Element, which both Node and Edge extends. See for instance addTimestamp(), addInterval(), getTimestamps() or getIntervals(). Similarly, each attribute getter or setter in Element is available with timestamps and intervals parameters so attribute values over time can be configured. Behind the scenes, the dynamic types used are defined in org.gephi.graph.api.types.
                • There's a new Subgraph interface that extends Graph and is available from GraphModel.getGraph(GraphView). This subgraph interface has additional features such as union() or intersection(). +
                • +
                • + The graph listening system with GraphListener has been entirely replaced with a pull-based system of observers. The system no longer sends events at each update but listeners can create observers, which periodically check if something has changed. There's multiple types of observers: GraphObserver for topology changes, TableObserver for new/removed columns and ColumnObserver for attribute value changes. These observers can obtain diff objects such as GraphDiff or TableDiff to exactly obtain what has changed. +
                • +
                +
              • +
              • + (December 07 2012) Add support for mouse listeners in Preview plugins. Create a PreviewMouseListener and implement MouseResponsiveRenderer interface in the renderers that use the listener. +
              • +
              • + (April 10 2012) Add a getShortDescription() method to the StatisticsUI API. It enables to get a short description of statistics (used to display tooltips). +
              • +
              • + (March 26 2012) Add a needsItemBuilder method to Renderer in Preview API. This helps to avoid building unnecessary items while refreshing preview.
              • -
              • (March 19 2012) Preview API changes:
                - Added a getDisplayName method to Renderer and support for extending default preview renderers.
                - Added a renderer manager to preview controlled with new methods in PreviewModel and PreviewController.:
                +
              • + (March 19 2012) Preview API changes:
                + Added a getDisplayName method to Renderer and support for extending default preview renderers.
                + Added a renderer manager to preview controlled with new methods in PreviewModel and PreviewController.:
              • -
              • (March 04 2012) Add a local scale flag in Ranking API. The value can be set from theRankingController.
              • -
              • (March 01 2012) Add RangeFilter interface in Filters API to help create range filters. The filter system now automatically - manage the range values and bounds. The Range object now also supports exclusive intervals.
              • -
              • (February 29 2012) Add a new AttributableFilter filter type. This is useful for filters manipulating Attributable +
              • + (March 04 2012) Add a local scale flag in Ranking API. The value can be set from theRankingController. +
              • +
              • + (March 01 2012) Add RangeFilter interface in Filters API to help create range filters. The filter system now automatically + manage the range values and bounds. The Range object now also supports exclusive intervals. +
              • +
              • + (February 29 2012) Add a new AttributableFilter filter type. This is useful for filters manipulating Attributable objects regardless whether they belong to a node or edge. Also note new useful abstract plugin implementations have been added to the FiltersPlugin module. Use AbstractFilter for any filter and AbstractAttributeFilter for - filters based on attributes. Filter builders are also provided.
              • -
              • (February 26 2012) Update to Netbeans Platform 7.1 and it's new perspective system. The PerspectiveMember SPI has to go + filters based on attributes. Filter builders are also provided. +
              • +
              • + (February 26 2012) Update to Netbeans Platform 7.1 and it's new perspective system. The PerspectiveMember SPI has to go away and will break compatibility. Top components now directly declare the perspective they belong to in the - @TopComponent.Registration annotation, for instance roles = {"overview"} for the Overview perspective.
              • -
              • (February 08 2012) Add a REPLACE_COLUMN event type in AttributeEvent. -
              • (January 18 2012) New Timeline API exposed as a stable API. Th API controls the Timeline UI component and the animation framework.
              • -
              • (January 15 2012) Add a new TIME_FORMAT event in DynamicModelEvent. The event is triggered when the time format - is initialized.
              • + @TopComponent.Registration annotation, for instance roles = {"overview"} for the Overview perspective. + +
              • + (February 08 2012) Add a REPLACE_COLUMN event type in AttributeEvent. +
              • + (January 18 2012) New Timeline API exposed as a stable API. Th API controls the Timeline UI component and the animation framework. +
              • +
              • + (January 15 2012) Add a new TIME_FORMAT event in DynamicModelEvent. The event is triggered when the time format + is initialized. +
              • (December 14 2011) Add a new PerspectiveAPI module and move API/SPI interfaces from the DesktopPerspective - module. Add a PerspectiveController to find and manage perspectives.
              • -
              • (November 07 2011) Add a getGraphTable() in the AttributeModel. The GraphView elements + module. Add a PerspectiveController to find and manage perspectives. +
              • +
              • + (November 07 2011) Add a getGraphTable() in the AttributeModel. The GraphView elements can also have attributes using the same system as nodes and egdes. The data can be accessed through the Graph.getAttributes() method. -
              • (October 18 2011) Changes in the DesktopPerspective SPI. Modules willing to declare a panel part of a perspective +
              • +
              • + (October 18 2011) Changes in the DesktopPerspective SPI. Modules willing to declare a panel part of a perspective should implement the PerspectiveMember interface. The interface now asks for the TopComponent's ID. -
              • (September 01 2011) Complete rewrite of the Preview API with a new SPI which allows to extend the Preview with new renderers, item +
              • +
              • + (September 01 2011) Complete rewrite of the Preview API with a new SPI which allows to extend the Preview with new renderers, item builders or render targets. The API also now offers better customization through a central property system and is optimized for - external applications as well. The API is also now considered as stable.
              • -
              • (August 28 2011) New DynamicStatistics SPI in the StatisticsAPI module. The interface extends Statistics + external applications as well. The API is also now considered as stable. +
              • +
              • + (August 28 2011) New DynamicStatistics SPI in the StatisticsAPI module. The interface extends Statistics and implement the calculation of metrics over time. -
              • (August 24 2011) Important changes in graph events breaking API compatibility. The ADD_NODES and ADD_EDGES are merged +
              • +
              • + (August 24 2011) Important changes in graph events breaking API compatibility. The ADD_NODES and ADD_EDGES are merged into a ADD_NODES_AND_EDGES event. Similarly REMOVE_NODES and REMOVE_EDGES are merged into a REMOVE_NODES_AND_EDGES event. GraphEventData remains the same and still contains both added/removed nodes and edges. Users may simply test if arrays returned by addedNodes(), addedEdges(), removedNodes() and removedEdges() are null before using them. -
              • (August 22 2011) Add new executeLayout(numIterations) method in LayoutController. -
              • (August 20 2011) The StatisticsController now supports synchronous algorithm execution through the execute(Statistics) - method.
              • -
              • (August 13 2011) Add new startAutoTransform() and stopAutoTransform() in Ranking API to control auto transformations. +
              • +
              • + (August 22 2011) Add new executeLayout(numIterations) method in LayoutController. + +
              • +
              • + (August 20 2011) The StatisticsController now supports synchronous algorithm execution through the execute(Statistics) + method. +
              • +
              • + (August 13 2011) Add new startAutoTransform() and stopAutoTransform() in Ranking API to control auto transformations. The model also allows to retrieve the ranking used in the auto transformation. An additional refreshRanking() method has been added - in the RankingBuilder SPI for a smoother auto transformation support.
              • -
              • (July 26 2011) Added a new AttributeRowsMergeStrategy interface to Data Laboratory API. This is a type of manipulator that defines + in the RankingBuilder SPI for a smoother auto transformation support. +
              • +
              • + (July 26 2011) Added a new AttributeRowsMergeStrategy interface to Data Laboratory API. This is a type of manipulator that defines and strategy for merging values of a row (node or edge) for an specific column. It should be used by other manipulators such as - NodesManipulator MergeNodes
              • -
              • (July 19 2011) Complete refactoring of the Ranking API to improve modularity and reach a stable version of the API. The API now also has + NodesManipulator MergeNodes +
              • +
              • + (July 19 2011) Complete refactoring of the Ranking API to improve modularity and reach a stable version of the API. The API now also has an SPI for ranking builders and transformers. Instead of getNodeRanking() and getEdgeRanking in the model, we introduce the concept of element type and generalize methods to it. Use Ranking.NODE_ELEMENT to obtain a node ranking and Ranking.EDGE_ELEMENT for an edge ranking. Same idea for transformers, which are now defined by a unique name. Default transformers' name can be found in the Transformer interface. A RankingEvent has also been created. - API users have to update to their client code to be compatible.
              • -
              • (July 18 2011) Add a new interface nodes and edges share: Attributable. That allows to manipulate objects with attributes + API users have to update to their client code to be compatible. +
              • +
              • + (July 18 2011) Add a new interface nodes and edges share: Attributable. That allows to manipulate objects with attributes regardless if the object is a node or an edge. Node, Edge, NodeData and EdgeData now now implements this interface, and a getAttributes() method has been added to Node and Edge to - make development easier.
              • -
              • (April 6 2011) Add setCurrentQuery() method on FilterController.
              • -
              • (February 21 2011) Important change how modules save/load data into project files. The WorkspacePersistenceProvider interface + make development easier. +
              • +
              • + (April 6 2011) Add setCurrentQuery() method on FilterController. +
              • +
              • + (February 21 2011) Important change how modules save/load data into project files. The WorkspacePersistenceProvider interface from ProjectAPI now uses StAX instead of DOM. The writeXML() method now uses XMLStreamWriter and readXML() XMLStreamReader. Backward compatibility can't be assured, modules have to use switch to StAX.
              • @@ -91,75 +332,94 @@

                API Changes

                (GraphContextMenuItem) to nodes like DataLaboratory does with NodesManipulator. Note that they share the interface ContextMenuItemManipulator from Data Laboratory API, so they are compatible, being able to reuse actions on nodes for Overview and Data Laboratory. -
              • (December 19 2010) Add removeMetaEdge(Edge) to manually remove meta edges. Add getTotalEdgeCount() method +
              • + (December 19 2010) Add removeMetaEdge(Edge) to manually remove meta edges. Add getTotalEdgeCount() method to globally count the number of edges, regardless if the edge is proper or meta.
              • -
              • (October 12 2010) Add methods in Graph API to better combine edges and meta edges features. Add getEdgesAndMetaEdges(Node) and +
              • + (October 12 2010) Add methods in Graph API to better combine edges and meta edges features. Add getEdgesAndMetaEdges(Node) and getTotalDegree(Node) methods, as well as their in and out variants for HierarchicalDirectedGraph.
              • -
              • (September 06 2010) Add a flatten() method to HierarchicalGraph to flatten the hierarchical graph and transform +
              • + (September 06 2010) Add a flatten() method to HierarchicalGraph to flatten the hierarchical graph and transform meta edges into regular edges.
              • -
              • (September 05 2010) Add destroy(Filter filter) in FilterBuilder to receive notification when a filter +
              • + (September 05 2010) Add destroy(Filter filter) in FilterBuilder to receive notification when a filter query is removed and clean-up.
              • -
              • (September 01 2010) Add MetaEdgeBuilder in Graph SPI to allow custom builders. Add GraphSettings.setMetaEdgeBuilder() +
              • + (September 01 2010) Add MetaEdgeBuilder in Graph SPI to allow custom builders. Add GraphSettings.setMetaEdgeBuilder() in the graph model settings.
              • -
              • (August 26 2010) Modify StatisticsModel to store reports directly instead of Statistics instance. As a +
              • + (August 26 2010) Modify StatisticsModel to store reports directly instead of Statistics instance. As a consequence, the model has now a getReport() and a getResult() method that UI can use. The currently running statistics can now be get with a new getRunning() method.
              • -
              • (August 19 2010) Simplify and improve attribute events management. Event listeners now subscribe directly from the +
              • + (August 19 2010) Simplify and improve attribute events management. Event listeners now subscribe directly from the AttributeModel instead of AttributeTable and will receive events for all tables. Refactoring of the AttributeEvent class with AttributeTable as source and a new AttributeEventData object as data. A new SET_VALUE has been implemented for getting events when attribute values are set.
              • -
              • (August 18 2010) Changes in AttributeRowFactory, the newNodeRow() method now takes the owner object +
              • + (August 18 2010) Changes in AttributeRowFactory, the newNodeRow() method now takes the owner object NodeData as a parameter. Similarly for newEdgeRow() and newRowForTable().
              • -
              • (August 17 2010) Add getEdge(Node, Node) in GraphAPI for consistency reasons. +
              • + (August 17 2010) Add getEdge(Node, Node) in GraphAPI for consistency reasons.
              • -
              • (August 15 2010) Changes in Processor SPI. The Processor has now setters instead of a process() method +
              • + (August 15 2010) Changes in Processor SPI. The Processor has now setters instead of a process() method with parameters. How processors are created remains the same. Creation of a ProcessorUI interface for processors settings configuration. A ProcessorUI implementation provides a panel, which is shown when the import report is closing. The ProcessorUI also allows to disable a processor with some conditions.
              • -
              • (August 13 2010) Add getColor() method in NodeDraft and EdgeDraft. +
              • + (August 13 2010) Add getColor() method in NodeDraft and EdgeDraft.
              • -
              • (July 19 2010) Define the "Overview, "Data Laboratory" and "Preview" as perspectives. Create a new SPI for perspecives and +
              • + (July 19 2010) Define the "Overview, "Data Laboratory" and "Preview" as perspectives. Create a new SPI for perspecives and perspective members. Members are simply the TopComponent that belong to a perspective. Plugins can implement PerspectiveMember to define the open and close behaviour.
              • -
              • (July 16 2010) Add list/array types in Attributes API. All native types has now a related list type, except dynamic types. The list +
              • + (July 16 2010) Add list/array types in Attributes API. All native types has now a related list type, except dynamic types. The list types inherits from AbstractList.
              • -
              • (July 15 2010) Changes in the way Import API deals with time intervals and dynamic data. Support for dynamic attributes has been +
              • + (July 15 2010) Changes in the way Import API deals with time intervals and dynamic data. Support for dynamic attributes has been added with a new addAttributeValue() method in NodeDraft and EdgeDraft. For improving data cleanup possibilities, NodeDraftGetter and EdgeDraftgetter now returns an AttributeRow instead of a list of attribute values only. Finally to profit from latest improvements, draft elements returns directly a TimeInterval type instead of the list of slices. Methods with 'Slice' have been renamed to 'Interval' for consistency reasons.
              • -
              • (July 14 2010) Add dynamic types into Attributes API. Dynamic types store values with a time interval and query can +
              • + (July 14 2010) Add dynamic types into Attributes API. Dynamic types store values with a time interval and query can be customized with estimators. All dynamic types inherit from DynamicType
              • -
              • (June 18 2010) Graph API event management improvements. The GraphEvent has now precise events, including +
              • + (June 18 2010) Graph API event management improvements. The GraphEvent has now precise events, including ADD_NODES, REMOVE_NODES, ADD_EDGES, REMOVE_EDGES and VISIBLE_VIEW. A new GraphEventData interface has been created to retrieve elements related to the events.
              • -
              • (June 14 2010) Export API refactoring, inspired from ImportAPI. Create an ExporterBuilder interface for +
              • + (June 14 2010) Export API refactoring, inspired from ImportAPI. Create an ExporterBuilder interface for exporter creation and different exporters: GraphExporter, VectorExporter, ByteExporter and CharacterExporter that covers common cases. The way exporters write data has been rationalized by using either java.io.Writer (text) or java.io.OutputStream (byte). The ExportController has been improved to support all use-cases, including file, writer and stream export.
              • -
              • (June 11 2010) Add Spigot support to the ImportAPI and SPI. Like DatabaseImporter, the +
              • + (June 11 2010) Add Spigot support to the ImportAPI and SPI. Like DatabaseImporter, the SpigotImporter interface is a new type of Importers. Modifications have also be made to the ImportController to support spigot import.
              • -
              • (June 08 2010) Refactoring and improvements in the Import API and SPI. The refactoring aim is to solve the singleton +
              • + (June 08 2010) Refactoring and improvements in the Import API and SPI. The refactoring aim is to solve the singleton issue with importers and let users implement builders interface that create importers instance. Therefore an ImporterBuilder interface has been created and should be registered with the @ServiceProvider annotation. The various importers types have been simplified and leave more choice to the implementations about how the @@ -222,32 +482,25 @@

                API Changes

                change, but with much less impact than ones marked as under development.
              -


              API List

              -

                -
              • Attributes API - Provides access to attributes values through an efficient column/row system.
              • -
              • Clustering API - API/SPI for clustering algorithms (experimental).
              • +
              • Appearance API - API/SPI for ranking and partition data to transform values in visual signs like color or size.
              • DataLaboratory API - API/SPI for data laboratory features (columns manipulation, edit, ...).
              • Export API - Export API/SPI provides the infrastructure for exporting data to any support and define new exporters.
              • Filters API - API/SPI for filters, define and control current filtering.
              • Generator API - Generator API/SPI provides the way to create and execute graph generators.
              • Graph API - API for accessing the graph.
              • -
              • Dynamic API - Provide features for dynamic graphs.
              • Import API - Import API/SPI provides the import workflow to import data form any support.
              • Layout API - Layout API/SPI provides real-time layout algorithms execution.
              • -
              • LongTask API - LongTask API provides utility features for long and asynchronous task execution.
              • -
              • Partition API - API for manipulating partition within data.
              • +
              • LongTask API - LongTask API provides utility features for long and asynchronous task execution.
              • Perspective API - API/SPI for perspective management. Only related to the user interface.
              • Preview API - API for building the graph preview structure.
              • Project API - Project API/SPI for project and worskpaces manipulation.
              • -
              • Ranking API - API/SPI for ranking data values and transform values in visual signs like color or size.
              • Statistics API - Statistics and Metrics API/SPI provides (a)synchronous algorithms execution.
              • Timeline API - API which provides access to the timeline component data, time interval, settings and animation.
              • Tools API - Tool API/SPI defines interactive actions users can make with the visualization.
              • Visualization API - API/SPI for interacting with visualization and providing context menu actions.
              -

              diff --git a/translations/add_language.py b/translations/add_language.py deleted file mode 100644 index 3f90224751..0000000000 --- a/translations/add_language.py +++ /dev/null @@ -1,77 +0,0 @@ -# Copyright 2008-2012 Gephi -# Website : http://www.gephi.org -# -# This file is part of Gephi. -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. -# -# Copyright 2011 Gephi Consortium. All rights reserved. -# -# The contents of this file are subject to the terms of either the GNU -# General Public License Version 3 only ("GPL") or the Common -# Development and Distribution License("CDDL") (collectively, the -# "License"). You may not use this file except in compliance with the -# License. You can obtain a copy of the License at -# http://gephi.org/about/legal/license-notice/ -# or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -# specific language governing permissions and limitations under the -# License. When distributing the software, include this License Header -# Notice in each file and include the License files at -# /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -# License Header, with the fields enclosed by brackets [] replaced by -# your own identifying information: -# "Portions Copyrighted [year] [name of copyright owner]" -# -# If you wish your version of this file to be governed by only the CDDL -# or only the GPL Version 3, indicate your decision by adding -# "[Contributor] elects to include this software in this distribution -# under the [CDDL or GPL Version 3] license." If you do not indicate a -# single choice of license, a recipient has the option to distribute -# your version of this file under either the CDDL, the GPL Version 3 or -# to extend the choice of license to its licensees as provided above. -# However, if you add GPL Version 3 code and therefore, elected the GPL -# Version 3 license, then the option applies only if the new code is -# made subject to such option by the copyright holder. -# -# Contributor(s): -# -# Portions Copyrighted 2011 Gephi Consortium. - -import os, os.path, sys - -#Use this script when pulling translations of a new language or new files of existing languages. -#After it, just use tx pull - -#Simple script to ensure that .po files exist for a given language in every folder that a .pot file exists. -#Creates empty .po files when not existing. This is necessary to get new language translations that are -#in transifex but not in the repository (tx pull --all is not suitable because it pulls even not translated at all resources). - -if (len(sys.argv) < 2): - print "Usage:" - print ">>python ./add_language.py {lang}" - sys.exit(1) - -#Creates po files of the given language when necessary -def recurseDirs(dir,langPO): - containsPOT=False - containsLangPO=False - for name in os.listdir(dir): - fullpath = os.path.join(dir,name) - if os.path.isfile(fullpath): - dir, filename = os.path.split(fullpath) - resource, extension = os.path.splitext(filename) - if extension == ".pot": - containsPOT=True - if filename == langPO: - containsLangPO=True - elif os.path.isdir(fullpath) and dir.find("target") == -1: #Only search pot files in code, not build: - recurseDirs(fullpath,langPO) - - if containsPOT and not containsLangPO: - newFilePath=os.path.join(dir,langPO) - print "Adding ",newFilePath - file = open(newFilePath,"w") #Create empty lang.po file if not existing and pot exists - file.write("") - file.close() - -recurseDirs("../modules", sys.argv[1] + ".po") \ No newline at end of file diff --git a/translations/po2properties.sh b/translations/po2properties.sh deleted file mode 100644 index a8f23fe501..0000000000 --- a/translations/po2properties.sh +++ /dev/null @@ -1,76 +0,0 @@ -#!/bin/bash - -# Copyright 2008-2012 Gephi -# Website : http://www.gephi.org -# -# This file is part of Gephi. -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. -# -# Copyright 2011 Gephi Consortium. All rights reserved. -# -# The contents of this file are subject to the terms of either the GNU -# General Public License Version 3 only ("GPL") or the Common -# Development and Distribution License("CDDL") (collectively, the -# "License"). You may not use this file except in compliance with the -# License. You can obtain a copy of the License at -# http://gephi.org/about/legal/license-notice/ -# or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -# specific language governing permissions and limitations under the -# License. When distributing the software, include this License Header -# Notice in each file and include the License files at -# /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -# License Header, with the fields enclosed by brackets [] replaced by -# your own identifying information: -# "Portions Copyrighted [year] [name of copyright owner]" -# -# If you wish your version of this file to be governed by only the CDDL -# or only the GPL Version 3, indicate your decision by adding -# "[Contributor] elects to include this software in this distribution -# under the [CDDL or GPL Version 3] license." If you do not indicate a -# single choice of license, a recipient has the option to distribute -# your version of this file under either the CDDL, the GPL Version 3 or -# to extend the choice of license to its licensees as provided above. -# However, if you add GPL Version 3 code and therefore, elected the GPL -# Version 3 license, then the option applies only if the new code is -# made subject to such option by the copyright holder. -# -# Contributor(s): -# -# Portions Copyrighted 2011 Gephi Consortium. - -ROOT=`pwd` - -function RecurseDirs -{ -oldIFS=$IFS -IFS=$'\n' -for f in "$@" -do -#lang=`expr match "$f" '\(\.po\)'` -#SUBSTRING=`expr match "$f" '.*_\(\.po\)_.*' ` -if [[ $f == *\.po ]]; then - PWD=`pwd` - path=`echo "$PWD" | sed 's,.*\/src\/main\/resources\/\(.*\)$,\1,' | sed 's,/,-,g'` - - if [[ $f == *\.po ]]; then - lang=`expr match "$f" '\(.*\).po' ` - fname=Bundle_${lang}.properties - echo $path":" $f "->" $fname - # generate Bundle_LG.properties file from PO - msgcat $f --properties-output --output-file=$fname - - fi - -fi -if [[ -d "${f}" ]]; then - cd "${f}" - RecurseDirs $(ls -1 ".") - cd .. -fi -done -IFS=$oldIFS -} - -RecurseDirs "../modules" - diff --git a/translations/pot-header.txt b/translations/pot-header.txt deleted file mode 100644 index 95f0bc8b49..0000000000 --- a/translations/pot-header.txt +++ /dev/null @@ -1,17 +0,0 @@ -# Translation file for Gephi. -# Copyright (C) 2011 Gephi contributors. -# This file is distributed under the same license as the Gephi package. -# Gephi Team , 2011. -# -msgid "" -msgstr "" -"Project-Id-Version: Gephi 0.8\n" -"Report-Msgid-Bugs-To: gephi.team@lists.launchpad.net\n" -"POT-Creation-Date: 2011-08-05 14:52+0200\n" -"PO-Revision-Date: 2011-08-05 14:52+0200\n" -"Last-Translator: Mathieu Bastian \n" -"Language-Team: English \n" -"MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" - diff --git a/translations/properties2pot.sh b/translations/properties2pot.sh deleted file mode 100644 index b24faa2972..0000000000 --- a/translations/properties2pot.sh +++ /dev/null @@ -1,100 +0,0 @@ -#!/bin/bash - -# Copyright 2008-2012 Gephi -# Website : http://www.gephi.org -# -# This file is part of Gephi. -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. -# -# Copyright 2011 Gephi Consortium. All rights reserved. -# -# The contents of this file are subject to the terms of either the GNU -# General Public License Version 3 only ("GPL") or the Common -# Development and Distribution License("CDDL") (collectively, the -# "License"). You may not use this file except in compliance with the -# License. You can obtain a copy of the License at -# http://gephi.org/about/legal/license-notice/ -# or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -# specific language governing permissions and limitations under the -# License. When distributing the software, include this License Header -# Notice in each file and include the License files at -# /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -# License Header, with the fields enclosed by brackets [] replaced by -# your own identifying information: -# "Portions Copyrighted [year] [name of copyright owner]" -# -# If you wish your version of this file to be governed by only the CDDL -# or only the GPL Version 3, indicate your decision by adding -# "[Contributor] elects to include this software in this distribution -# under the [CDDL or GPL Version 3] license." If you do not indicate a -# single choice of license, a recipient has the option to distribute -# your version of this file under either the CDDL, the GPL Version 3 or -# to extend the choice of license to its licensees as provided above. -# However, if you add GPL Version 3 code and therefore, elected the GPL -# Version 3 license, then the option applies only if the new code is -# made subject to such option by the copyright holder. -# -# Contributor(s): -# -# Portions Copyrighted 2011 Gephi Consortium. - -ROOT=`pwd` - -function RecurseDirs -{ -oldIFS=$IFS -IFS=$'\n' -for f in "$@" -do -PWD=`pwd` -ignoreFolders=`echo "$PWD" | grep -e "modules/branding" -e "src/java" -e "modules/.*/target"` #Don't convert Bundle.properties under branding module and ignore other folders like java or smaven folders -if [[ $f == 'Bundle.properties' && "x$ignoreFolders" == "x" ]]; then - - path=`echo "$PWD" | sed 's,.*\/src\/main\/resources\/\(.*\)$,\1,' | sed 's,/,-,g'` - - #rm *.pot - - if [[ $path == org-* ]]; then - # Duplicates Bundle.properties and remove specific lines - ftmp=Bundle.properties.tmp - cp $f $ftmp - sed -i 's/\r$//' $ftmp - sed -i '/OpenIDE-Module-Display-Category/ d' $ftmp - sed -i '/OpenIDE-Module-Name/ d' $ftmp - sed -i '/^org_gephi_branding_desktop_update_center/ d' $ftmp - sed -i '/=\s*$/ d' $ftmp - - echo $path - fname=${path}.pot - # generate POT file from Bundle.properties - msgcat $ftmp --properties-input --output-file=$fname - - if [[ -s $fname ]]; then - #sed -i -l 2 '/msgid "TopTabComponent.logoLabel.text"\nmsgstr ""/ d' $fname - - #add header - cp $fname tmp.txt - cat ${ROOT}/pot-header.txt tmp.txt > $fname - rm tmp.txt - - #check file - msgfmt -c $fname - rm messages.mo - fi - - rm $ftmp - fi - -fi -if [[ -d "${f}" ]]; then - cd "${f}" - RecurseDirs $(ls -1 ".") - cd .. -fi -done -IFS=$oldIFS -} - -RecurseDirs "../modules" - diff --git a/translations/set_transifex.py b/translations/set_transifex.py deleted file mode 100644 index a54ba25f1d..0000000000 --- a/translations/set_transifex.py +++ /dev/null @@ -1,85 +0,0 @@ -# Copyright 2008-2012 Gephi -# Website : http://www.gephi.org -# -# This file is part of Gephi. -# -# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. -# -# Copyright 2011 Gephi Consortium. All rights reserved. -# -# The contents of this file are subject to the terms of either the GNU -# General Public License Version 3 only ("GPL") or the Common -# Development and Distribution License("CDDL") (collectively, the -# "License"). You may not use this file except in compliance with the -# License. You can obtain a copy of the License at -# http://gephi.org/about/legal/license-notice/ -# or /cddl-1.0.txt and /gpl-3.0.txt. See the License for the -# specific language governing permissions and limitations under the -# License. When distributing the software, include this License Header -# Notice in each file and include the License files at -# /cddl-1.0.txt and /gpl-3.0.txt. If applicable, add the following below the -# License Header, with the fields enclosed by brackets [] replaced by -# your own identifying information: -# "Portions Copyrighted [year] [name of copyright owner]" -# -# If you wish your version of this file to be governed by only the CDDL -# or only the GPL Version 3, indicate your decision by adding -# "[Contributor] elects to include this software in this distribution -# under the [CDDL or GPL Version 3] license." If you do not indicate a -# single choice of license, a recipient has the option to distribute -# your version of this file under either the CDDL, the GPL Version 3 or -# to extend the choice of license to its licensees as provided above. -# However, if you add GPL Version 3 code and therefore, elected the GPL -# Version 3 license, then the option applies only if the new code is -# made subject to such option by the copyright holder. -# -# Contributor(s): -# -# Portions Copyrighted 2011 Gephi Consortium. - -import os.path -import os -import re - -project = "gephi" - -#Note: gehpi-maven version of this script, use with transifex tool 0.8 or better - -#This script sets the initial state of transifex for existing .pot files -#See http://wiki.gephi.org/index.php/Localization for more information -#!!Transifex client must be in the system path to run this script -#If you add 1 or a few pot files, it is faster to do set it manually using a command like the following: -#tx set --auto-local -r gephi.org-gephi-data-attributes-api --source-language=en --source-file org-gephi-data-attributes-api.pot ".po" --execute# -#This means: -#tx set --auto-local -r project.resource --source-language=en --source-file resource.pot "automatically find translations for this resource in this folder with this expression" --execute - -#Searchs for .pot files in subdirectories of the repository and sets them as resources of transifex, also sets its .po translations -#Assumes an executable called transifex in the repository -#This script should be run from gephi repository root -#The result transifex config file exists in .tx/config -#!!Resources with names longer than 50 chars are shortened so they can be correctly pushed -#!!After this script, you should run tx push -s to push new .pot files and optionally -l to push also existing translations - -#To update .po translations from Transifex website you have to execute tx pull - -directories = [".."] -while len(directories) > 0: - directory = directories.pop() - for name in os.listdir(directory): - fullpath = os.path.join(directory,name) - if os.path.isfile(fullpath): - dir, filename = os.path.split(fullpath) - resource, extension = os.path.splitext(filename) - if extension == ".pot": - resourceLen = len(resource) - if resourceLen > 50: #Maximum of 50 chars for a resource slug, shorten it: - print "\n!!Necessary to shorten the following resource (longer than 50 chars): ", resource - start = "s-" - resource = start + resource[(resourceLen-50+len(start)):resourceLen] - print "\n", resource - #set transifex resource - command="tx set --auto-local -r "+project+"."+resource+" --source-language=en --source-file "+fullpath+" \""+dir+"/.po\" -t PO --execute" - os.system(command) - elif os.path.isdir(fullpath) and directory.find("target") == -1: #Only search pot files in code, not build: - directories.append(fullpath) - \ No newline at end of file